Compare commits
1526 Commits
v3.6.0
...
renovate/t
| Author | SHA1 | Date | |
|---|---|---|---|
| 4c46886258 | |||
| 82b7b24ef7 | |||
| 732bbc17f4 | |||
| 29da42d9ff | |||
| 269d0cd638 | |||
| 69e15165e3 | |||
| 7663a12ee4 | |||
| dcda0b3561 | |||
| 5f82fd9e5a | |||
| af11fa31d3 | |||
| a049d618e5 | |||
| 41bc03a737 | |||
| 2ab6eff761 | |||
| 6c881a265a | |||
| 2b15f0a87c | |||
| 1d6ab2a82b | |||
| 24e82e69d1 | |||
| b079d411de | |||
| e04c8eb99f | |||
| 3a6b793948 | |||
| f5361de78d | |||
| e0759afc70 | |||
| 700e4ba38e | |||
| cc82b232ce | |||
| c1f422e325 | |||
| ffaaba29d7 | |||
| 9cad841efb | |||
| 324ab09b5d | |||
| 0b5e9e923b | |||
| f2308e567d | |||
| 1466c6451b | |||
| 598c708e92 | |||
| 1f903b4f75 | |||
| 7951b17877 | |||
| 2a39b7315b | |||
| 8b35a60997 | |||
| 696ff0fc7a | |||
| 29736f480d | |||
| f4251f3e1d | |||
| ae981396e5 | |||
| ca0b86bee7 | |||
| 26ca1ec456 | |||
| 017e4c2e4d | |||
| a89658e8c3 | |||
| 99be7c2629 | |||
| 200da8dfaa | |||
| 9a218a6516 | |||
| 933ee0ef75 | |||
| 8dd7bcdf97 | |||
| d5c7e0475b | |||
| a5af233683 | |||
| 27e3796622 | |||
| 5843e85c4d | |||
| 92a943c755 | |||
| 58a19cdaa2 | |||
| b1d2112bfc | |||
| d229bc7f00 | |||
| 033a4d3122 | |||
| 8d252b6375 | |||
| 9453c0ca8f | |||
| ce073b30d9 | |||
| 8f63e5e3a3 | |||
| 23853b66c6 | |||
| 62a322f10d | |||
| 9627dd2202 | |||
| 3383926faa | |||
| 8179664064 | |||
| 1a5e417f4f | |||
| ceb6da9bc9 | |||
| fdafb2dd07 | |||
| c3700e0e59 | |||
| 3f1c26f82d | |||
| bb7816815c | |||
| a1773fd992 | |||
| 1671bea942 | |||
| 141ae03208 | |||
| 55c1012cda | |||
| 612c5c89c9 | |||
| 01bbf7e3f7 | |||
| 6a7b7d88de | |||
| d06896450c | |||
| 4a59afc505 | |||
| 7b0d63b6cf | |||
| c734ffe70f | |||
| 3d0ad69ddb | |||
| 6c4ae0dbfa | |||
| f7aaa3377a | |||
| ab1a0478cf | |||
| 127f56905c | |||
| 8d448c667f | |||
| e00f33eb2d | |||
| 8100804ced | |||
| 4fba3ffd92 | |||
| bef8252314 | |||
| a96cc5aa8a | |||
| b7e43e3125 | |||
| 2d059eb353 | |||
| bce0f8ad17 | |||
| e04a084be9 | |||
| e94aa5c513 | |||
| fa2862ca9a | |||
| e764c69f2b | |||
| b5052d85ad | |||
| e4fa850871 | |||
| db4be4ae25 | |||
| 55680531c5 | |||
| ae4557d32c | |||
| f5f65e73ca | |||
| e9f4958252 | |||
| 00626bc37d | |||
| 8e36d77245 | |||
| 8f6d16ae89 | |||
| 2d1d0257ef | |||
| 7b2543847a | |||
| 00af45ddee | |||
| 786961c33b | |||
| 8dc69cd9ac | |||
| d8e0bd903e | |||
| 4f31d47097 | |||
| cdb1ccec76 | |||
| 4998fa1e28 | |||
| f912598416 | |||
| 1f063c41d4 | |||
| 7b4a4b81ae | |||
| b7750ad50e | |||
| 886f2ae3b2 | |||
| 4c2d3253e7 | |||
| c03d3af289 | |||
| b006466eab | |||
| 39a859703d | |||
| d1e9f5272f | |||
| 2c16e68799 | |||
| d7381f1847 | |||
| 97cee6ca54 | |||
| b2c339a879 | |||
| 7192ad74bc | |||
| 022125755b | |||
| b40851e92a | |||
| 1590f2e309 | |||
| b8e0d53ef3 | |||
| ffa61687bf | |||
| 4f716d8e0b | |||
| 9932316be1 | |||
| 86a4a1b41e | |||
| c6c71bea9f | |||
| cbc6449621 | |||
| 9b8daac28c | |||
| cbc0077690 | |||
| c43d636549 | |||
| af1513a0b5 | |||
| 3a7d3ff73d | |||
| f22b887a3f | |||
| 5d0116ff2e | |||
| 98a8244f5f | |||
| 798bfc0708 | |||
| 91b2c5a41a | |||
| c28d2a950f | |||
| 50aae3e3d4 | |||
| ce410aaa51 | |||
| 82f7e02d5b | |||
| 33017eda63 | |||
| 779006d0cd | |||
| a0c0e3a21f | |||
| b6a622a151 | |||
| ac59883b5c | |||
| c5b6d24f10 | |||
| 6fd97d8b88 | |||
| 18692b0283 | |||
| f81dd1f910 | |||
| 1452c4ae8a | |||
| 504c73df73 | |||
| 0c16467a8b | |||
| 26539544ab | |||
| 9f84e2771c | |||
| a2be98588b | |||
| b445ef8aeb | |||
| a49ee4fd11 | |||
| c8c380841f | |||
| 6fa89db2f3 | |||
| c4ef6efddd | |||
| 55a6e815af | |||
| 8238262afe | |||
| a81aa4b7c9 | |||
| 56c903d5df | |||
| b0931c8924 | |||
| 5142b673c1 | |||
| 36eaeef45f | |||
| da2f3e5102 | |||
| 7ceb160e96 | |||
| a563084055 | |||
| ced531133a | |||
| 345c2e59fd | |||
| b3e0fd5588 | |||
| 7f35738667 | |||
| 1fa827df89 | |||
| 78ba710b3f | |||
| bcb61a922e | |||
| c046a76972 | |||
| ed25d11b23 | |||
| 8de5599240 | |||
| ce7fcc5d01 | |||
| 30ed2b5c75 | |||
| 12d4241668 | |||
| 0eb65f082c | |||
| 25fccc9a62 | |||
| 414a560205 | |||
| 7c1b8ed0a4 | |||
| 8084a175cf | |||
| f5175a6be7 | |||
| c9ae7cb277 | |||
| e455932754 | |||
| a1e3bf23be | |||
| 8ccd510700 | |||
| 127760d509 | |||
| c0a495640f | |||
| 6060e138ee | |||
| 98b2e182fb | |||
| 715ddb8923 | |||
| 3104111f6b | |||
| e064c37859 | |||
| 1de223b4ca | |||
| 50a1365a6f | |||
| cc83804491 | |||
| 92cf306439 | |||
| a8be510a07 | |||
| 58524fb3c1 | |||
| aeb6997117 | |||
| 0116188623 | |||
| af63edb058 | |||
| bd0ac52832 | |||
| 5b537d2a9e | |||
| d9a7c352d3 | |||
| 84add37441 | |||
| 9a88f11f16 | |||
| 51b4441e5c | |||
| 29784e6a39 | |||
| e2981c22fa | |||
| d7513dcc20 | |||
| 5c0face2c9 | |||
| a1805f7662 | |||
| 46889098e8 | |||
| 607938c170 | |||
| 58a03db898 | |||
| 67ef3408dc | |||
| 27f16e26b3 | |||
| e38200bc1f | |||
| 736e63d259 | |||
| 721271d902 | |||
| a2151930ec | |||
| bdc9f42681 | |||
| 0b3c6f9e1f | |||
| ebe373bdc6 | |||
| ab91e6d735 | |||
| be3ae4d789 | |||
| 336b7fe5e9 | |||
| 5ecd39f324 | |||
| eb50596961 | |||
| aede0cd643 | |||
| 25f51784c3 | |||
| 7acac6d11c | |||
| 1972ef70b5 | |||
| c4455ed3d2 | |||
| c1a06ab955 | |||
| 26fa1f85b2 | |||
| 555817e2f5 | |||
| f8654dfdb9 | |||
| 96c0fc412c | |||
| a70a4106df | |||
| 895210cbb6 | |||
| 789a30312b | |||
| 623d97b1e2 | |||
| 4ed97f0145 | |||
| 77a2bbf02a | |||
| 7a9a1531d4 | |||
| 16b59698d6 | |||
| a85a2e0c58 | |||
| 97f1a20a4f | |||
| 8dbe151ddd | |||
| 87144e03c2 | |||
| 2046b253e3 | |||
| c068e11fc5 | |||
| 10384b6c4c | |||
| 4d83bd587d | |||
| aae523989b | |||
| afacec973b | |||
| 75fb51e290 | |||
| cb85048af4 | |||
| 8b10872e83 | |||
| 96ea114335 | |||
| 7c1c3ef28d | |||
| 7a7ad4261c | |||
| c0dbc204a0 | |||
| 68e63f809c | |||
| 4b188ec205 | |||
| 23013cddb9 | |||
| 588b84ecd0 | |||
| fd68c204f6 | |||
| 313bb6e43f | |||
| 0a6f244035 | |||
| 8e4e2c42f6 | |||
| f31053cf3c | |||
| d5758790c0 | |||
| bbd243a534 | |||
| 2fc0d6f3b0 | |||
| 6b15018a9b | |||
| acc977db7c | |||
| 270100a14c | |||
| 094e6fa2d6 | |||
| 9f81f7001c | |||
| e6c78dd5e0 | |||
| b64e1394ae | |||
| dcc611c7d0 | |||
| d329076b52 | |||
| 1435559a56 | |||
| 1feeeedf10 | |||
| 443d716e45 | |||
| 3d65a96e38 | |||
| e20f3fe24c | |||
| 5d3afb52d8 | |||
| 5e0341c8d5 | |||
| b84a8c512a | |||
| cd0f4bbc1d | |||
| e37367c5e5 | |||
| 8a765be912 | |||
| a213dae14d | |||
| 40c429f3c1 | |||
| 3125520e68 | |||
| 1c57fec016 | |||
| 2708b4fffc | |||
| f1d264a6c7 | |||
| c478e74771 | |||
| 6cf9f813a0 | |||
| dddfa581ed | |||
| 94b789aa78 | |||
| d6d731260b | |||
| 440864e605 | |||
| 4506ae4079 | |||
| c2538e280a | |||
| ef7da94201 | |||
| 68a754f438 | |||
| 2a81a4e887 | |||
| 40d64fb04f | |||
| c6bc65b3d3 | |||
| db02e009cd | |||
| b0b6ebe036 | |||
| be698cc0fb | |||
| 06b35acf65 | |||
| 557932f7bb | |||
| d48f328881 | |||
| 4e7f40c86a | |||
| 614c774e71 | |||
| 3fa4ab54b6 | |||
| de8136dbe4 | |||
| 4051aec6e3 | |||
| aa0496c548 | |||
| a953b5995c | |||
| ff2d889329 | |||
| f3b1adbd32 | |||
| 247443630a | |||
| 6eb54afda4 | |||
| 83ecc499e3 | |||
| 418a6ce8e4 | |||
| 4f19f73d4d | |||
| 31d109e00f | |||
| fd3f79e976 | |||
| c748e606b1 | |||
| 40299b38c5 | |||
| 62b40d4df5 | |||
| 5e4a1253d4 | |||
| 702792b659 | |||
| e83f83fa9b | |||
| 3de54340f3 | |||
| ffbc3bd1c2 | |||
| c513959461 | |||
| 66e414dd64 | |||
| 454d2a1d4e | |||
| ca3372d7f5 | |||
| 5bcbab1fac | |||
| 47656c08fd | |||
| 6374ff4a41 | |||
| 86e7c84e43 | |||
| d554fa34b2 | |||
| 1bec276c8b | |||
| 17153eacf0 | |||
| 20d25ca953 | |||
| b3b3d45b96 | |||
| 5ba65ea122 | |||
| 0108e3f603 | |||
| 8d23b13f70 | |||
| a8f9505255 | |||
| cd0509eb06 | |||
| 23504408ec | |||
| ba8282881d | |||
| ad1ac79fdb | |||
| 54736256a4 | |||
| 0d77ac096d | |||
| 6a2b27bfcb | |||
| 2a0aeac89b | |||
| 5dc11e2bdc | |||
| fba48dcd55 | |||
| 832c3103c7 | |||
| 49d9bf9859 | |||
| ef5d0c1222 | |||
| 1cb666d7dd | |||
| 45ca896bef | |||
| 624d5102a5 | |||
| 2e9e5cc51f | |||
| c5f755bfcf | |||
| 0d1cadd650 | |||
| 4cc7ffe74d | |||
| 7f59ca18b0 | |||
| f87030ff55 | |||
| 2406baa5a5 | |||
| d7bf973547 | |||
| 0d199b82ec | |||
| 7d7562d147 | |||
| 9d43fb2bb3 | |||
| 010da7536d | |||
| 3473f05823 | |||
| f72664957d | |||
| a127c2e5e2 | |||
| 952da4ddf6 | |||
| bf84477609 | |||
| e274a1b4c4 | |||
| e6150a5b53 | |||
| dfd881186a | |||
| 762b66dbcd | |||
| f1acfbf48f | |||
| 046faecf11 | |||
| c3612d2ca7 | |||
| 3da344fcad | |||
| 2b5380e67e | |||
| e3c7e4f524 | |||
| 3604e46661 | |||
| 8cea079f26 | |||
| 83b68001cb | |||
| 7a11a47f91 | |||
| 2a9a00bd86 | |||
| cfcbf37f98 | |||
| 7f5c854c00 | |||
| 7ec89580e7 | |||
| 56a5102377 | |||
| b6e9b5ac2b | |||
| eecdbbd2c4 | |||
| efeb871490 | |||
| f326a55247 | |||
| e788585bd4 | |||
| 1396761b18 | |||
| 5872e0f736 | |||
| 1872c8193d | |||
| 187a0c54cb | |||
| 9533497388 | |||
| f323b7bb1f | |||
| 68810b4762 | |||
| d3e01d0732 | |||
| 970cf7ee91 | |||
| 4bf038e24d | |||
| 5925b765b8 | |||
| 78cd3a786c | |||
| adb88991d9 | |||
| 4dad68d255 | |||
| 33a09cc8e1 | |||
| e2c849f6c4 | |||
| 7b41775b26 | |||
| 6284b87fc7 | |||
| f3f63d4fcd | |||
| cf80dd396c | |||
| c79fc799b2 | |||
| 7789d5d444 | |||
| e0dbd4b88f | |||
| 1c74bbd954 | |||
| d949e3550f | |||
| d76115ab5d | |||
| 5be467a869 | |||
| b2dfbe1ed3 | |||
| a9e9e0bdc2 | |||
| 93ce9cc359 | |||
| 2a626a5ff1 | |||
| 1ccabb8e25 | |||
| 2dae8688c2 | |||
| 65459726a4 | |||
| 0c21accb10 | |||
| 125d2d5163 | |||
| 6c1855b5a5 | |||
| 82c5222610 | |||
| 0d0e2a11e1 | |||
| daf724f9dc | |||
| be2cdb4cb5 | |||
| ff2fdab77d | |||
| 9047169a39 | |||
| 9525df343f | |||
| be2abee85d | |||
| 7d5f7a9527 | |||
| b53ece5836 | |||
| c04dc92d39 | |||
| 78acd2ddbb | |||
| 7126c290e2 | |||
| 58651857e2 | |||
| 8e7c95e68f | |||
| 1c68c5637d | |||
| c44d5ea111 | |||
| b48e05ab28 | |||
| 7e5a5a77fe | |||
| 77c4566ad3 | |||
| 6305f52947 | |||
| b8baf0fad4 | |||
| 038244bf43 | |||
| ef22b48aae | |||
| 62b3abd502 | |||
| e1f8ece433 | |||
| dd9ed5e5e6 | |||
| 3f442a97c5 | |||
| 61e19cfa9f | |||
| f73188ab83 | |||
| 4c4a39b9a7 | |||
| 1da83ff27c | |||
| 2cfc38757a | |||
| b5f82f5ed8 | |||
| d13484a47b | |||
| 4d33921881 | |||
| 6fdac6facf | |||
| 51a87566e5 | |||
| f715dcd9b4 | |||
| 275f78a180 | |||
| bc8d199c77 | |||
| e114e0ef44 | |||
| 9ccd126eee | |||
| e3c79c789c | |||
| c9ab69eb9e | |||
| d444f52c27 | |||
| cd51d2c8df | |||
| 84c592f45f | |||
| 83f7ebc087 | |||
| 35a7ab288d | |||
| c1c4c22ec2 | |||
| 5eb0c9f98c | |||
| 733b0166c8 | |||
| c5f7c80542 | |||
| c840e31a80 | |||
| 22181afe73 | |||
| f698614b21 | |||
| adeffdabad | |||
| acdffea563 | |||
| cf1806dc10 | |||
| ff69803fdc | |||
| f7140d78bd | |||
| e4d8365170 | |||
| c64d69f33b | |||
| 16a3fa7469 | |||
| 1e867d10f2 | |||
| 3466b1a863 | |||
| a5cc2f555a | |||
| 9445379280 | |||
| 68c79ded99 | |||
| 9e59a8c1d5 | |||
| cc20cb5620 | |||
| be69d85d27 | |||
| f851c2de20 | |||
| 2319821851 | |||
| 5ba0fee18a | |||
| 8ac7c4ea9d | |||
| 3649ad092a | |||
| 4adaa27beb | |||
| e6ab13a42b | |||
| fb16badcb3 | |||
| fc0da887e1 | |||
| f65add2e28 | |||
| c3b7ee54de | |||
| 245974da42 | |||
| 4e756f7117 | |||
| bed4f1bfe9 | |||
| 0e79d9d5cc | |||
| 136f9f429f | |||
| 97d8cb5ad1 | |||
| b21862f2be | |||
| bedfd20f7e | |||
| 46a95a4f97 | |||
| 80f1d10309 | |||
| 9f38f1fb26 | |||
| 0061318f4c | |||
| 6ba36fcba5 | |||
| 63c8f4d0e1 | |||
| bef304865c | |||
| fec4702ee0 | |||
| ab07b71888 | |||
| 0253bfe193 | |||
| 3e9429879d | |||
| c1ac07d287 | |||
| fa0f68e308 | |||
| 38b2bb64fc | |||
| be92e6c6f7 | |||
| eabbfe94bc | |||
| bcbc691435 | |||
| 90c832733d | |||
| e3b76115aa | |||
| 8fc9692ae4 | |||
| 40ab32cbe7 | |||
| f047dd2d2d | |||
| 1877460094 | |||
| eae4e952f5 | |||
| 89479a5045 | |||
| a702a3284c | |||
| 47674e9a5a | |||
| 93deee665b | |||
| 95385cb9de | |||
| 35f9ac0f9a | |||
| 42b8f57216 | |||
| 56cb3b6cc8 | |||
| 01e137f5d4 | |||
| 0bbc1b4546 | |||
| 40429034b6 | |||
| 49cb29c2fe | |||
| 432427ec5a | |||
| ce0568cc52 | |||
| d6ed6bdc2b | |||
| 65b6417777 | |||
| 7b2c537290 | |||
| cbb7709159 | |||
| 232ca99243 | |||
| 47990c7b95 | |||
| 21a95709a2 | |||
| d43803c14c | |||
| 5fe10a9660 | |||
| fa9e031bbb | |||
| a592520e2a | |||
| f7f82f20f1 | |||
| e8214fa6ee | |||
| 1f0978d5ad | |||
| 2b0295d95c | |||
| 355d9870a1 | |||
| 4eb2d63a82 | |||
| 315fa15eec | |||
| 6037491f98 | |||
| 9e3d84e78e | |||
| de7f7abc91 | |||
| ad0d1ec37d | |||
| 2acd51cec3 | |||
| 96a1df3d0a | |||
| 576cd14ca0 | |||
| baeef8e2c3 | |||
| 1823740dd8 | |||
| ce73d6c075 | |||
| 1e1b469dba | |||
| da6c3b907c | |||
| be90fecbad | |||
| cce5419985 | |||
| fb2bbdc381 | |||
| dbd4113314 | |||
| 49e915d2e1 | |||
| 96cd219a0f | |||
| 7390119143 | |||
| d8a84a3500 | |||
| 34601dd6af | |||
| ee28471146 | |||
| e80bc304c5 | |||
| 2593092f04 | |||
| fc52af96b2 | |||
| c31eaefdee | |||
| 83212294c9 | |||
| fbe1729ac3 | |||
| 419e51a814 | |||
| 170b3132ad | |||
| 5ef2dc5a9a | |||
| 43d6950ee3 | |||
| 6070300c22 | |||
| ef1504ab30 | |||
| c52d8d93b3 | |||
| f6ddfc3807 | |||
| 5035c6a8d8 | |||
| 58ca9523c5 | |||
| 5b2e9c0de9 | |||
| 4a3ca1af75 | |||
| 7beac0b6ad | |||
| af05ff6582 | |||
| 77703e0268 | |||
| dadca8b1c4 | |||
| 87db1dd461 | |||
| 2799f81906 | |||
| bfe96b004f | |||
| 51f7d10113 | |||
| 60ca5ec17e | |||
| 8d1082da4e | |||
| 1858b0712b | |||
| d5b3fbbdb2 | |||
| 346ce00144 | |||
| f9d5e67f3f | |||
| 73dd56416e | |||
| ca97e624cd | |||
| b639fb1073 | |||
| 8488dfd8f4 | |||
| 7eed86608c | |||
| 67dfc618d1 | |||
| 38394193f5 | |||
| c9ca1b8be6 | |||
| 8ce25613ae | |||
| 145cf8563b | |||
| c9b0577ed4 | |||
| 8a5c3a670a | |||
| 17259d68d0 | |||
| aa77ab0779 | |||
| 481fff56f5 | |||
| 0da013a962 | |||
| eeb051dd29 | |||
| 708c96a8e9 | |||
| 4f7e2f29c1 | |||
| b754e16fb6 | |||
| f53d3abef8 | |||
| c9e48782aa | |||
| a49d711c67 | |||
| 878ab6307e | |||
| ad17e9a557 | |||
| bc9ca62cbe | |||
| 4329ac6bf3 | |||
| a49733877f | |||
| a3ca565faf | |||
| a51670c1c8 | |||
| a9b4b42a74 | |||
| f6b51d92a4 | |||
| c4efbcbbeb | |||
| 3de06655df | |||
| 2c649c50f6 | |||
| bccefb9380 | |||
| 6c5009d520 | |||
| a45b8f88cb | |||
| 3a82129d37 | |||
| 16fe257073 | |||
| 39d6b6d30b | |||
| 2dbaecff6e | |||
| 77c9d44823 | |||
| aaea3ba768 | |||
| 2cb44054df | |||
| 3effb58282 | |||
| 1d9573e15d | |||
| f8df3e6548 | |||
| d76ebde673 | |||
| 2e4a15442a | |||
| 716566593e | |||
| 9c0d1788b0 | |||
| 51b3f53569 | |||
| 88111185a3 | |||
| ac0a46cff6 | |||
| 529c798e49 | |||
| 611afd7403 | |||
| 6ac1fec5ab | |||
| 22cfefb5f9 | |||
| e1962810e9 | |||
| cd740880c8 | |||
| 382caaabb0 | |||
| 9f5236439c | |||
| bb69f31f3a | |||
| afe5fed760 | |||
| 981a7f319e | |||
| 42cb9b0ea8 | |||
| d9ead78083 | |||
| 329ea64989 | |||
| 8c1673c6a8 | |||
| dedca8fdd1 | |||
| 02bf057fbc | |||
| 98be48bb13 | |||
| 3200d088cf | |||
| edea7b59e1 | |||
| d10c6ec8fc | |||
| 91a2eb9063 | |||
| dfa427f2ed | |||
| 6d3ac985b2 | |||
| d874fcd117 | |||
| 5158b9cd04 | |||
| efc8038210 | |||
| 8f18fb80ea | |||
| a257d4dfbc | |||
| e2f1d1d611 | |||
| d4c00b6d74 | |||
| 823fbf4a78 | |||
| 806dc11d4a | |||
| d8dcbddbf1 | |||
| 1219de1ae9 | |||
| 1e764f7707 | |||
| 809947716d | |||
| d88406447e | |||
| dbfe9d517a | |||
| 703ad71ff3 | |||
| 3b4f319871 | |||
| 852933d4d7 | |||
| b9269bf085 | |||
| 3b8edf115e | |||
| 97a277a192 | |||
| 41ce2320fa | |||
| 1350ca0816 | |||
| 5e29628351 | |||
| 006aacfb35 | |||
| e5cef89a27 | |||
| e91d44d018 | |||
| f35328fab4 | |||
| d84c308572 | |||
| 733866efea | |||
| 079e625c69 | |||
| 64f87d4fec | |||
| da5c18dcf1 | |||
| f67ff2ee11 | |||
| 0c1d300103 | |||
| e0abc4a43b | |||
| de273da85f | |||
| b52caa5f17 | |||
| fec7d3b1c4 | |||
| 63f7254b60 | |||
| 03501790fb | |||
| 7570dad1b5 | |||
| 2f8b889849 | |||
| 5eb2457c36 | |||
| 52c6e09917 | |||
| 8bfc93b948 | |||
| 5b09123feb | |||
| 2334e4d800 | |||
| 6bf812f9bf | |||
| b0cd8332fc | |||
| 73f7164584 | |||
| 2117bc830c | |||
| cd5e7ef646 | |||
| 0eecd4b6a5 | |||
| 407f01aa19 | |||
| 0d3fb0400f | |||
| 6d46024f42 | |||
| c8812d8ab6 | |||
| 2819740429 | |||
| e1b20baf4d | |||
| 25d02154ed | |||
| 8f59b78059 | |||
| 46c32b18a0 | |||
| 3eb6ba2499 | |||
| 9208547881 | |||
| 8bfcd4a139 | |||
| 00041fd146 | |||
| 98feeed7eb | |||
| 2e33bc8f96 | |||
| 0d6da0681a | |||
| 1c76415846 | |||
| a3d620ba52 | |||
| 82bf407323 | |||
| d83556e9fa | |||
| f70ae4f7c4 | |||
| 268e7be15d | |||
| accd2bf350 | |||
| 58cf1a543d | |||
| 183461a968 | |||
| 4fe0fb9845 | |||
| 0e5e1b8700 | |||
| 1ab1c86909 | |||
| 5e0f03dcd3 | |||
| d4b5778fdd | |||
| 943b806bbb | |||
| a5d6c32f77 | |||
| 4efa243ed0 | |||
| 8d09f27c59 | |||
| 47a2cde673 | |||
| 67051bb5ce | |||
| 233f6dbdea | |||
| 2c7a46240d | |||
| e0edc0c1dd | |||
| 2001fb9254 | |||
| 206efaa7f7 | |||
| 8bb1d63cb0 | |||
| 841de026ce | |||
| 6fac8b409e | |||
| b5ce1f566d | |||
| 8bb4f4426f | |||
| c962d60c6d | |||
| 1d29e6be1a | |||
| 970205954b | |||
| 89fe072c0e | |||
| 93d68a94a3 | |||
| f7afe1b994 | |||
| 5507f1acee | |||
| d513302a9a | |||
| f31351be9c | |||
| 99fdd027c3 | |||
| 0b143ec3a2 | |||
| 588992f84b | |||
| 7306b0bc4e | |||
| 9365f6edbc | |||
| 2c94cc760a | |||
| 53193cda98 | |||
| 5853523074 | |||
| 3a18eb8097 | |||
| 042a7df771 | |||
| 5c2a6598b9 | |||
| 2e4e9faf53 | |||
| a581ddf80d | |||
| 500f770da8 | |||
| 7cfe93312f | |||
| f4bc90bf2d | |||
| 587fcdf23a | |||
| c375e73781 | |||
| 8cf045b450 | |||
| e91f2d386d | |||
| 505465e745 | |||
| 662d3af81b | |||
| fef3b63581 | |||
| 0d3311ff5d | |||
| 7370b56767 | |||
| c0f3f136bb | |||
| 62c2dcba95 | |||
| 3e1abd984f | |||
| b689ba272b | |||
| 2775063cc8 | |||
| d557d1cbf0 | |||
| e965ac2004 | |||
| a1a0705c07 | |||
| 29dfef1518 | |||
| 2c5b09e488 | |||
| 5a2b5ae522 | |||
| 5dc3b09b7b | |||
| 1a1a764d64 | |||
| fc47c9f590 | |||
| 470bc761ef | |||
| a60dde2bdb | |||
| 8b1332ee38 | |||
| 12eb7c7d9b | |||
| aecac6be6c | |||
| 44913173eb | |||
| 2829108e32 | |||
| 0eb10017c9 | |||
| c36745e79b | |||
| e33269bce6 | |||
| 7c4894a5f3 | |||
| 84e3cf895f | |||
| 9d7281179b | |||
| 85c0995323 | |||
| 21990e71db | |||
| 9d99ff4095 | |||
| 075fcde92a | |||
| e654b7e695 | |||
| df78d13076 | |||
| 7bc24116da | |||
| 3225cfe5dd | |||
| 9de8bfcdc4 | |||
| ab01c80a13 | |||
| b6fb3d6316 | |||
| 6287d10a82 | |||
| ed79631d66 | |||
| b7f607bdbd | |||
| 546c89e175 | |||
| 486a43f4b7 | |||
| 8d51137a18 | |||
| cf67540a1f | |||
| edad53e989 | |||
| cc6c0bdff1 | |||
| dbdc3c60a5 | |||
| db4134f40d | |||
| 21c3e6a5f2 | |||
| e5b4ba9f15 | |||
| 8a51468671 | |||
| 083403bf80 | |||
| 886f3203e0 | |||
| 253fe0055f | |||
| 6637f6a0da | |||
| f7e359a740 | |||
| 3c88d171ab | |||
| 8e27be48c6 | |||
| 700b2a3669 | |||
| 329327d491 | |||
| 829a06db5a | |||
| 98b4053a3a | |||
| d340828da7 | |||
| fb18f26964 | |||
| b37fee1e1b | |||
| fb2c4f0a09 | |||
| d58897ba4c | |||
| c30fbe41a6 | |||
| 5a7daaf2f6 | |||
| 61c0217b8f | |||
| d5ea182a50 | |||
| 33133de7c7 | |||
| b544e18cea | |||
| 808f802efd | |||
| 8e21a10214 | |||
| f787c2cc80 | |||
| ebf91f0977 | |||
| cae6d858fa | |||
| 37f3e9ce89 | |||
| f350fd7aae | |||
| 67b001c6a0 | |||
| ccbe5da684 | |||
| e3e5ae3a7f | |||
| 972c3dba2f | |||
| b61151b2bd | |||
| 4b35a96778 | |||
| 19fd0d61c6 | |||
| 77779938b9 | |||
| bb06d71fbb | |||
| 3cf955179d | |||
| 606dd5a679 | |||
| 31fe07ebd4 | |||
| d456d0db89 | |||
| e00c357fae | |||
| 21b54ef6ff | |||
| f96b650787 | |||
| ebbbf2a6b9 | |||
| 610ad59fdc | |||
| 4fe302d753 | |||
| 5983ae47bb | |||
| 4442fc12ec | |||
| b42de1c458 | |||
| eec5a2352e | |||
| 303de7c0aa | |||
| 4bc57c2628 | |||
| c74505ac90 | |||
| 7a3a803d72 | |||
| fec010c73f | |||
| b093cc2c08 | |||
| cb3cd74e9e | |||
| ae5b8038b2 | |||
| 5f93c96901 | |||
| ec81ac5e40 | |||
| 8901a7768d | |||
| 22f14cce3e | |||
| 4afb2276c1 | |||
| 77658035f5 | |||
| 07aa9d5811 | |||
| 7764bcabde | |||
| 69058a52ed | |||
| 1f7acbd219 | |||
| 88dfaa98f3 | |||
| 504829f065 | |||
| e4e6dcb0cd | |||
| 78010793fb | |||
| bcdd24d74b | |||
| 2d86d26701 | |||
| 77ca2b483f | |||
| 13c71e8904 | |||
| 3bfb853414 | |||
| 25454689c0 | |||
| dd3e42c41e | |||
| 499ae2422c | |||
| a3601cece6 | |||
| 8168666720 | |||
| 9f580a1d7d | |||
| f8765fbdbb | |||
| 2922a457cd | |||
| c2e4c32745 | |||
| 5071183550 | |||
| db736bcb23 | |||
| fb29d62cf1 | |||
| 28f5185d38 | |||
| c9178985f2 | |||
| 297b94bdab | |||
| dbf8b1c5c5 | |||
| cec6339f9a | |||
| e7edf30717 | |||
| 441be69ca5 | |||
| 2199391ec1 | |||
| f43daa3805 | |||
| b4dc2ca88f | |||
| 4aae0d89cd | |||
| 7c1eec03a5 | |||
| 06aaba0c7f | |||
| 766268d9e4 | |||
| a7f47001c6 | |||
| 104850e9b0 | |||
| 3139beec91 | |||
| 30bc676fd2 | |||
| c2cf5992f8 | |||
| 50b265c3ea | |||
| b6cf7070bf | |||
| 06f20cc84c | |||
| 7453a5a06c | |||
| de1ccd80fc | |||
| d1ee480452 | |||
| c8397e4fb4 | |||
| 65bcf20f97 | |||
| 1a214140fb | |||
| ffdf7ac5a8 | |||
| c8bb1f386d | |||
| 457e1bb48e | |||
| c1177adc08 | |||
| cd976ee500 | |||
| b856884bba | |||
| 2df8e58773 | |||
| da8e0106f6 | |||
| b0b2005e1c | |||
| 5817d9c3ae | |||
| 08f9187cdf | |||
| 49ac17a40e | |||
| b1c4b04ebf | |||
| 10b8066126 | |||
| d86e454d3f | |||
| 4ea8fa2561 | |||
| dbea4c5884 | |||
| 7d4e949f0c | |||
| 82917e7748 | |||
| 7c9544a528 | |||
| 960a20e899 | |||
| c9b7901681 | |||
| 95698aaf35 | |||
| 4dc87417ff | |||
| 7510f8eb08 | |||
| 59103df665 | |||
| 258d35e48d | |||
| 5e419489d5 | |||
| 0d462ac3a2 | |||
| bcb94f6de8 | |||
| fe925ec8ee | |||
| 86c77d141f | |||
| 754ca3caaa | |||
| 61ea104d7b | |||
| 573bdfae03 | |||
| cca493b7d5 | |||
| f47262d27b | |||
| 65bf9129ea | |||
| 87e9b9f7a8 | |||
| 07bc4f05fd | |||
| e3a6808087 | |||
| e9184e5d60 | |||
| a5b32d96f8 | |||
| 040db7539c | |||
| da646c1d53 | |||
| 5f5917f972 | |||
| eccb0d2f08 | |||
| 4cd9dd17df | |||
| 5de07b9a96 | |||
| 151f067beb | |||
| c68a7bd19f | |||
| b87e5e31df | |||
| 03229d61c8 | |||
| b6330eed18 | |||
| b254812ac2 | |||
| 7e243e2fbf | |||
| 307e52cc89 | |||
| f7b7ea916f | |||
| 3eccf8daca | |||
| aa48944212 | |||
| 4d51f1a412 | |||
| d3c9f76582 | |||
| d638a6cf28 | |||
| f93651b219 | |||
| cb8c6c69fe | |||
| 4e7266fb1b | |||
| 8de75ff3a5 | |||
| 3236c88eb2 | |||
| c9f0ad14c2 | |||
| 0a9199c92b | |||
| 3ffcff7d9c | |||
| ddf614d362 | |||
| 6f1a77bbb9 | |||
| 8595f9761e | |||
| cc442182fd | |||
| b827a05eea | |||
| 250abab8bc | |||
| 8e45518ccf | |||
| 7485e065ed | |||
| c1d88f91d4 | |||
| 124a2bd8d0 | |||
| f8f94f9665 | |||
| 5e98a82b23 | |||
| a5c20a66b3 | |||
| cc84116ad1 | |||
| a2e2031708 | |||
| 5001eabf23 | |||
| aac2974430 | |||
| f7f005bb3d | |||
| e1f6d5b7f2 | |||
| b6b607897e | |||
| 651ebb2b1a | |||
| 9fa24deed2 | |||
| c81022d373 | |||
| b726dc7580 | |||
| 471aa7d0a6 | |||
| f34d645ac3 | |||
| d2a11a560e | |||
| 9d185872db | |||
| d0ff71aa66 | |||
| bc8999585f | |||
| 1e1582e31f | |||
| 2c48a0f6f4 | |||
| 368b251e3f | |||
| 3339f997e3 | |||
| 76e8e7aa7a | |||
| 8c325b17f8 | |||
| 494bc0ccc7 | |||
| f14333d07a | |||
| 268ffe2d4c | |||
| 831eb63ace | |||
| 345f235117 | |||
| c6422d5d9c | |||
| f90384386c | |||
| 9213fdd4f7 | |||
| 787c8cdceb | |||
| ace48bc79b | |||
| e5a8b7431f | |||
| e37f22503b | |||
| e61757a7fc | |||
| fdc798ad87 | |||
| 6393e6348c | |||
| ce6e115783 | |||
| 68cbaabc0c | |||
| 9911bbf509 | |||
| 553c2c1096 | |||
| dde57e3eb0 | |||
| 935461f610 | |||
| b95da863c6 | |||
| 92316a999c | |||
| 0ec038342c | |||
| 4649c3bfaf | |||
| 8441af2483 | |||
| 63c4a9cfa7 | |||
| 4e8173360e | |||
| 4f37377d64 | |||
| 0e886c0890 | |||
| cb0719ecf4 | |||
| d24b31cf74 | |||
| 610073b982 | |||
| 493b65bb11 | |||
| e4e7ef3b52 | |||
| e1dc19e9eb | |||
| 4b9f92ed2d | |||
| 622beccd95 | |||
| 8678fca9c0 | |||
| 4dcb9b5995 | |||
| 718025445c | |||
| 845dac3c03 | |||
| a1ac3d1359 | |||
| c21dd08a40 | |||
| 8de27358d3 | |||
| c4910af494 | |||
| 67fc0a415c | |||
| 7d145cbca1 | |||
| a565d9fc0f | |||
| 71a9ed5d65 | |||
| fc16a325f7 | |||
| c52d96dcbd | |||
| d2c681a047 | |||
| 8e75df42bf | |||
| 85d1dc46d1 | |||
| 84f5e265f2 | |||
| 0d261a8e44 | |||
| 3c228ede48 | |||
| 8b971d2263 | |||
| 6b8fed3fc2 | |||
| f15c51f3d7 | |||
| fa3e146ef7 | |||
| 4baec1560c | |||
| 0e0230b995 | |||
| a33a03f512 | |||
| f8a53f0d61 | |||
| 748d77d1c0 | |||
| 725ad0d630 | |||
| bdbab17772 | |||
| 57d2fa372d | |||
| 80471b0ca4 | |||
| 22fdfe3342 | |||
| 5ecfa2a1f7 | |||
| b9beea810e | |||
| f0e77812e7 | |||
| 6d1237c2a2 | |||
| b43c92386e | |||
| 017476a81b | |||
| 9b047d9c54 | |||
| 31f009d3c4 | |||
| 8504f2c086 | |||
| 1d6251baea | |||
| 3ea13a2a22 | |||
| 1cc153084d | |||
| 1c468b4054 | |||
| 1bad46890a | |||
| 5829c8d0f7 | |||
| 85aceaaae4 | |||
| 24e593b22f | |||
| 3f8ca6002e | |||
| b62ccfe7b1 | |||
| 237dde9765 | |||
| 65f4339fd1 | |||
| 109e9f8166 | |||
| 9163b6f04b | |||
| 51da259c97 | |||
| 2bf67b941e | |||
| 533b96d1f6 | |||
| 5c9ded8779 | |||
| 6f389bb297 | |||
| 8a209404d4 | |||
| 6193fb487a | |||
| 9aa7f7a023 | |||
| 5bfaa9a791 | |||
| d210ec8227 | |||
| dec7c5e95c | |||
| 940d0beb84 | |||
| cf98754276 | |||
| d91d493dd1 | |||
| 7e1aea21db | |||
| 0179dfd311 | |||
| 98ea26bbff | |||
| 0d9daaad66 | |||
| fe319daec1 | |||
| 929c58671a | |||
| 4fb2350c2b | |||
| a401bfa809 | |||
| fdeed76f6f | |||
| 0ab113816a | |||
| 8a58b02c7b | |||
| 037b059b55 | |||
| bb0f9fb3d0 | |||
| d3c7848896 | |||
| ea50cb1e65 | |||
| 5070fd88b5 | |||
| 21177478cb | |||
| 26b8b38b89 | |||
| be04d66aa8 | |||
| a837987e70 | |||
| da99558163 | |||
| 3b50cbcb6e | |||
| 595c011bce | |||
| 458fe54063 | |||
| ae3a289005 | |||
| a49eea9246 | |||
| d675a175e9 | |||
| 6c510a71c2 | |||
| 5503d2cbb8 | |||
| ba4c7e1a0c | |||
| e19c458441 | |||
| ec5cf0cae8 | |||
| b3c4570f8c | |||
| 112b6d893b | |||
| 52236907e4 | |||
| d449529ea7 | |||
| 61c799f7d4 | |||
| 1a4ee13e47 | |||
| f91afb984a | |||
| f9892b0eae | |||
| 60c7885a3c | |||
| 63ca6aa533 | |||
| e77a8c04e8 | |||
| 0bfabf604c | |||
| 4343c599cf | |||
| c251554c31 | |||
| 95e519bdc9 | |||
| 79d38bfc8e | |||
| f5655b0ae6 | |||
| 12b4afc3ce | |||
| c104d47737 | |||
| 870cf6143c | |||
| 1baed0e913 | |||
| 02619c79bb | |||
| 0faad538f3 | |||
| e7de30c629 | |||
| c5d8333039 | |||
| 4da08e7c9b | |||
| 171387995a | |||
| aeac020c9a | |||
| 5c05ddeb29 | |||
| cbdd649365 | |||
| d2cf2ad71f | |||
| 7d33494097 | |||
| ca83edabf3 | |||
| f84e77e814 | |||
| 14f2120a32 | |||
| 1cbf14ee2a | |||
| b7cb167fc6 | |||
| 41b9f8b967 | |||
| 0b769ce287 | |||
| ad71ef8a68 | |||
| 048a994f32 | |||
| c2bd8ce188 | |||
| 62ce4e818c | |||
| 4ab8829a02 | |||
| 36b3e2cb0c | |||
| 9ba0614a7d | |||
| 81431ad196 | |||
| a8e8d5afd7 | |||
| f3d86743ee | |||
| 6306968193 | |||
| 7142a253d6 | |||
| 2a24588338 | |||
| 2abaf54ac8 | |||
| cc730ad55c | |||
| d8581c5d69 | |||
| 3208bf4a6d | |||
| 4109db1ad7 | |||
| 87a0ef5d54 | |||
| cdc40f0c53 | |||
| 7a3b8082a2 | |||
| 3e9039c97d | |||
| b9d1130468 | |||
| 605f0984e4 | |||
| 44de7d9e98 | |||
| 9926575744 | |||
| f16a99f6e4 | |||
| a23c64b5b8 | |||
| 0899f76548 | |||
| 515dcdc7e3 | |||
| b2c4bc425b | |||
| 363c3b3a67 | |||
| c2dde3d78f | |||
| eb515cfc61 | |||
| c208ca184f | |||
| c231fa7c44 | |||
| 9e1b8d43d0 | |||
| f50ece88df | |||
| eeb780d190 | |||
| cafdf654d3 | |||
| 2d665013e7 | |||
| 451a46e208 | |||
| 490b901c34 | |||
| b57b4a3454 | |||
| 60c61e32b1 | |||
| aa9052d449 | |||
| 67f3a38583 | |||
| a00ecc4729 | |||
| 56d63fca52 | |||
| 759f3ba317 | |||
| d8daf03f2c | |||
| a519c7c714 | |||
| 933d12fdd1 | |||
| 61fb733550 | |||
| 7f05e3168d | |||
| 3b7697a90d | |||
| 350b1467fe | |||
| 2f5d102f4d | |||
| 66e296df1a | |||
| 1e4cd699db | |||
| 516fbff3d7 | |||
| aab9358d67 | |||
| ae3939f857 | |||
| 79bafd1780 | |||
| 3f4f52a31f | |||
| c2b7b29716 | |||
| dab84b9cf9 | |||
| e5980158eb | |||
| 647d4c9d99 | |||
| 30feb6128b | |||
| 0cf6923540 | |||
| cce9f0b462 | |||
| c0805fb758 | |||
| 04e5844301 | |||
| f28e663133 | |||
| 2c84527c43 | |||
| 68511de727 | |||
| e7ca9f129f | |||
| 259da70e4f | |||
| 9409d75ac7 | |||
| 3ea923f56f | |||
| 6d6c8c94cf | |||
| 29098758a9 | |||
| fdbb35e221 | |||
| 6ddac62313 | |||
| ae4b494300 | |||
| 7d9eed88f4 | |||
| 4abf848f99 | |||
| cc0a6cfdce | |||
| a74d0dd0ca | |||
| 18f15d4cce | |||
| 80e20c6579 | |||
| 761026fd74 | |||
| 95b75f020c | |||
| 574e4baef8 | |||
| ec4871d5a8 | |||
| ccd6bf9c3f | |||
| 2975d4292c | |||
| ad9571550f | |||
| 980068217c | |||
| 18f69aea3f | |||
| add7cb9e48 | |||
| aa67a57971 | |||
| 74f22b4474 | |||
| 7ef4a23576 | |||
| 3c90a1f459 | |||
| 3793d36f36 | |||
| 179f4b29db | |||
| 34f106896c | |||
| 06b581f499 | |||
| 3ec126628c | |||
| 1d3bb60e0b | |||
| 2e3ced6006 | |||
| e8efca5a3e | |||
| 5161c356f9 | |||
| e917b30e64 | |||
| 2d847f9808 | |||
| 21755fffc7 | |||
| 5c9d3e3e67 | |||
| ea801f65ef | |||
| 27f4c0393e | |||
| 9bc42f836f | |||
| 11b11ed966 | |||
| 5f79b7e788 | |||
| 7d1d806797 | |||
| 836cedb0f3 | |||
| 70349e13cc | |||
| 6d16b74471 | |||
| c211780c33 | |||
| 2173ba0234 | |||
| 3a4cbc543b | |||
| 2fef7f0246 | |||
| 12d693921e | |||
| d1b4879f51 | |||
| f14939fcd2 | |||
| 4e66b0cedd | |||
| 11fe54d640 | |||
| 446529f738 | |||
| ac6e9deeb9 | |||
| 100873163f | |||
| e141e18bac | |||
| f4da0c2c95 | |||
| 7507bce3cc | |||
| 2b970fade8 | |||
| 35f0e43082 | |||
| ae4410a613 | |||
| 5534174016 | |||
| 15cf6c77c3 | |||
| 18a8fc462d | |||
| d3acb4945a | |||
| 32d3c58b44 | |||
| bd8c2eb390 | |||
| a81fa9c0d1 | |||
| 1d0f7d7a48 | |||
| b6687307df | |||
| 7e07a44f68 | |||
| 5ca66530ee | |||
| 95acbe2b65 | |||
| 534aeb163a | |||
| 6abcbee290 | |||
| 4457a043a4 | |||
| 410a052fea | |||
| e4287085a1 | |||
| b6cefef8fb | |||
| 9d7e2a06bc | |||
| d516fc2153 | |||
| 77bfe8e218 | |||
| 0fcbe38837 | |||
| b85a40f683 |
20
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@ -1,5 +1,5 @@
|
||||
name: Bug Report
|
||||
description: Report a YouTube Music bug
|
||||
description: Report a Pear Desktop bug
|
||||
title: "[Bug]: "
|
||||
labels: "bug :beetle:"
|
||||
body:
|
||||
@ -8,17 +8,17 @@ body:
|
||||
label: Preflight Checklist
|
||||
description: Please ensure you've completed all of the following.
|
||||
options:
|
||||
- label: I use the latest version of YouTube Music (Application).
|
||||
- label: I use the latest version of Pear Desktop (Application).
|
||||
required: true
|
||||
- label: I have searched the [issue tracker](https://github.com/th-ch/youtube-music/issues) for a bug report that matches the one I want to file, without success.
|
||||
- label: I have searched the [issue tracker](https://github.com/pear-devs/pear-desktop/issues) for a bug report that matches the one I want to file, without success.
|
||||
required: true
|
||||
- label: I understand that **th-ch/youtube-music has NO affiliation with Google or YouTube**
|
||||
- label: I understand that **pear-devs/pear-desktop has NO affiliation with Google or YouTube**
|
||||
required: true
|
||||
- type: input
|
||||
attributes:
|
||||
label: YouTube Music (Application) Version
|
||||
label: Pear Desktop (Application) Version
|
||||
description: |
|
||||
What version of the YouTube Music Application are you using?
|
||||
What version of the Pear Desktop Application are you using?
|
||||
|
||||
Note: Please check if this issue is reproducible with the latest stable release.
|
||||
placeholder: 2.0.0
|
||||
@ -28,7 +28,7 @@ body:
|
||||
attributes:
|
||||
label: Checklists
|
||||
options:
|
||||
- label: I use the portable version of the YouTube Music Application.
|
||||
- label: I use the portable version of the Pear Desktop Application.
|
||||
- label: I can reproduce this issue in the [official version of (WEB) YTM](https://music.youtube.com).
|
||||
- type: dropdown
|
||||
attributes:
|
||||
@ -60,8 +60,8 @@ body:
|
||||
required: true
|
||||
- type: input
|
||||
attributes:
|
||||
label: Last Known Working YouTube Music (Application) version
|
||||
description: (If applicable) What is the last version of YouTube Music this worked in?
|
||||
label: Last Known Working Pear Desktop (Application) version
|
||||
description: (If applicable) What is the last version of Pear Desktop this worked in?
|
||||
placeholder: 1.20.0
|
||||
- type: textarea
|
||||
attributes:
|
||||
@ -92,4 +92,4 @@ body:
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Additional Information
|
||||
description: If your problem needs further explanation, or if the issue you're seeing cannot be reproduced in a gist, please add more information here.
|
||||
description: If your problem needs further explanation, or if the issue you're seeing cannot be reproduced in a gist, please add more information here.
|
||||
|
||||
6
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
@ -1,5 +1,5 @@
|
||||
name: Feature Request
|
||||
description: Suggest an idea for YouTube Music
|
||||
description: Suggest an idea for Pear Desktop
|
||||
title: "[Feature Request]: "
|
||||
labels: "enhancement :sparkles:"
|
||||
body:
|
||||
@ -8,9 +8,9 @@ body:
|
||||
label: Preflight Checklist
|
||||
description: Please ensure you've completed all of the following.
|
||||
options:
|
||||
- label: I use the latest version of YouTube Music (Application).
|
||||
- label: I use the latest version of Pear Desktop (Application).
|
||||
required: true
|
||||
- label: I have searched the [issue tracker](https://github.com/th-ch/youtube-music/issues) for a feature request that matches the one I want to file, without success.
|
||||
- label: I have searched the [issue tracker](https://github.com/pear-devs/pear-desktop/issues) for a feature request that matches the one I want to file, without success.
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
|
||||
47
.github/workflows/build.yml
vendored
@ -1,4 +1,4 @@
|
||||
name: Build YouTube Music
|
||||
name: Build Pear Desktop
|
||||
|
||||
on:
|
||||
push:
|
||||
@ -6,11 +6,12 @@ on:
|
||||
pull_request:
|
||||
|
||||
env:
|
||||
NODE_VERSION: "20.x"
|
||||
NODE_VERSION: "22.x"
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build YouTube Music
|
||||
if: github.event.pull_request.draft == false
|
||||
name: Build Pear Desktop
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: true
|
||||
@ -18,24 +19,24 @@ jobs:
|
||||
os: [ macos-latest, ubuntu-latest, windows-latest ]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 9
|
||||
version: 10
|
||||
run_install: false
|
||||
|
||||
- name: Setup NodeJS
|
||||
if: startsWith(matrix.os, 'macOS') != true
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v5
|
||||
with:
|
||||
node-version: ${{ env.NODE_VERSION }}
|
||||
cache: 'pnpm'
|
||||
|
||||
- name: Setup NodeJS for macOS
|
||||
if: startsWith(matrix.os, 'macOS')
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v5
|
||||
with:
|
||||
node-version: ${{ env.NODE_VERSION }}
|
||||
|
||||
@ -44,28 +45,34 @@ jobs:
|
||||
|
||||
# Only vite build without release if it is a fork, or it is a pull-request
|
||||
- name: Vite Build
|
||||
if: github.repository == 'th-ch/youtube-music' && github.event_name == 'pull_request'
|
||||
if: github.repository == 'pear-devs/pear-desktop' && github.event_name == 'pull_request'
|
||||
run: |
|
||||
pnpm build
|
||||
|
||||
# Build and release if it's the main repository and is not pull-request
|
||||
- name: Build and release on Mac
|
||||
if: startsWith(matrix.os, 'macOS') && (github.repository == 'th-ch/youtube-music' && github.event_name != 'pull_request')
|
||||
if: startsWith(matrix.os, 'macOS') && (github.repository == 'pear-devs/pear-desktop' && github.event_name != 'pull_request')
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
pnpm release:mac
|
||||
|
||||
- name: Build and release on Linux
|
||||
if: startsWith(matrix.os, 'ubuntu') && (github.repository == 'th-ch/youtube-music' && github.event_name != 'pull_request')
|
||||
if: startsWith(matrix.os, 'ubuntu') && (github.repository == 'pear-devs/pear-desktop' && github.event_name != 'pull_request')
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
sudo snap install snapcraft --classic
|
||||
sudo apt update
|
||||
sudo apt install -y flatpak flatpak-builder
|
||||
sudo flatpak remote-add --if-not-exists --system flathub https://flathub.org/repo/flathub.flatpakrepo
|
||||
sudo flatpak install -y flathub org.freedesktop.Platform/x86_64/24.08
|
||||
sudo flatpak install -y flathub org.freedesktop.Sdk/x86_64/24.08
|
||||
sudo flatpak install -y flathub org.electronjs.Electron2.BaseApp/x86_64/24.08
|
||||
pnpm release:linux
|
||||
|
||||
- name: Build and release on Windows
|
||||
if: startsWith(matrix.os, 'windows') && (github.repository == 'th-ch/youtube-music' && github.event_name != 'pull_request')
|
||||
if: startsWith(matrix.os, 'windows') && (github.repository == 'pear-devs/pear-desktop' && github.event_name != 'pull_request')
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
@ -81,30 +88,30 @@ jobs:
|
||||
|
||||
release:
|
||||
runs-on: ubuntu-latest
|
||||
name: Release YouTube Music
|
||||
if: github.repository == 'th-ch/youtube-music' && github.ref == 'refs/heads/master'
|
||||
name: Release Pear Desktop
|
||||
if: github.repository == 'pear-devs/pear-desktop' && github.ref == 'refs/heads/master'
|
||||
needs: build
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 9
|
||||
version: 10
|
||||
run_install: false
|
||||
|
||||
- name: Setup NodeJS
|
||||
if: startsWith(matrix.os, 'macOS') != true
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v5
|
||||
with:
|
||||
node-version: ${{ env.NODE_VERSION }}
|
||||
cache: 'pnpm'
|
||||
|
||||
- name: Setup NodeJS for macOS
|
||||
if: startsWith(matrix.os, 'macOS')
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v5
|
||||
with:
|
||||
node-version: ${{ env.NODE_VERSION }}
|
||||
|
||||
@ -143,11 +150,11 @@ jobs:
|
||||
name: ${{ env.VERSION_TAG }}
|
||||
replacebody: true
|
||||
body: |
|
||||
See [changelog](https://github.com/th-ch/youtube-music/blob/master/changelog.md#${{ env.CHANGELOG_ANCHOR }}) for the list of updates and the full diff.
|
||||
See [changelog](https://github.com/pear-devs/pear-desktop/blob/master/changelog.md#${{ env.CHANGELOG_ANCHOR }}) for the list of updates and the full diff.
|
||||
|
||||
Thanks to all contributors! 🏅
|
||||
|
||||
(Note for Windows: `YouTube-Music-Web-Setup-${{ env.VERSION_TAG }}.exe` is an installer, and `YouTube-Music-${{ env.VERSION_TAG }}.exe` is a portable version)
|
||||
(Note for Windows: `Pear-Desktop-Web-Setup-${{ env.VERSION_TAG }}.exe` is an installer, and `Pear-Desktop-${{ env.VERSION_TAG }}.exe` is a portable version)
|
||||
|
||||
- name: Update changelog
|
||||
if: ${{ env.VERSION_HASH == '' }}
|
||||
@ -156,7 +163,7 @@ jobs:
|
||||
|
||||
- name: Commit changelog
|
||||
if: ${{ env.VERSION_HASH == '' }}
|
||||
uses: stefanzweifel/git-auto-commit-action@v5
|
||||
uses: stefanzweifel/git-auto-commit-action@v6
|
||||
with:
|
||||
commit_message: Update changelog for ${{ env.VERSION_TAG }}
|
||||
file_pattern: "changelog.md"
|
||||
|
||||
4
.github/workflows/dependency-review.yml
vendored
@ -12,9 +12,11 @@ permissions:
|
||||
|
||||
jobs:
|
||||
dependency-review:
|
||||
if: github.event.pull_request.draft == false
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: "Checkout Repository"
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
|
||||
- name: "Dependency Review"
|
||||
uses: actions/dependency-review-action@v4
|
||||
|
||||
147
.github/workflows/pr-build-artifacts.yml
vendored
Normal file
@ -0,0 +1,147 @@
|
||||
name: Build PR Artifacts
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, synchronize, reopened]
|
||||
|
||||
env:
|
||||
NODE_VERSION: "22.x"
|
||||
|
||||
jobs:
|
||||
check-permissions:
|
||||
if: github.event.pull_request.draft == false
|
||||
name: Check if user has write access
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
has-write-access: ${{ steps.check.outputs.require-result }}
|
||||
steps:
|
||||
- name: Check user permission
|
||||
id: check
|
||||
uses: actions-cool/check-user-permission@v2
|
||||
with:
|
||||
require: write
|
||||
username: ${{ github.event.pull_request.user.login }}
|
||||
|
||||
build:
|
||||
name: Build ${{ matrix.os }}
|
||||
needs: check-permissions
|
||||
if: needs.check-permissions.outputs.has-write-access == 'true'
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [macos-latest, ubuntu-latest, windows-latest]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 10
|
||||
run_install: false
|
||||
|
||||
- name: Setup NodeJS
|
||||
if: startsWith(matrix.os, 'macOS') != true
|
||||
uses: actions/setup-node@v5
|
||||
with:
|
||||
node-version: ${{ env.NODE_VERSION }}
|
||||
cache: 'pnpm'
|
||||
|
||||
- name: Setup NodeJS for macOS
|
||||
if: startsWith(matrix.os, 'macOS')
|
||||
uses: actions/setup-node@v5
|
||||
with:
|
||||
node-version: ${{ env.NODE_VERSION }}
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install --frozen-lockfile
|
||||
|
||||
- name: Build on macOS
|
||||
if: startsWith(matrix.os, 'macOS')
|
||||
run: |
|
||||
pnpm dist:mac
|
||||
pnpm dist:mac:arm64
|
||||
|
||||
- name: Install Linux dependencies
|
||||
if: startsWith(matrix.os, 'ubuntu')
|
||||
run: |
|
||||
sudo snap install snapcraft --classic
|
||||
sudo apt update
|
||||
sudo apt install -y flatpak flatpak-builder
|
||||
sudo flatpak remote-add --if-not-exists --system flathub https://flathub.org/repo/flathub.flatpakrepo
|
||||
sudo flatpak install -y flathub org.freedesktop.Platform/x86_64/24.08
|
||||
sudo flatpak install -y flathub org.freedesktop.Sdk/x86_64/24.08
|
||||
sudo flatpak install -y flathub org.electronjs.Electron2.BaseApp/x86_64/24.08
|
||||
|
||||
- name: Build on Linux
|
||||
if: startsWith(matrix.os, 'ubuntu')
|
||||
run: |
|
||||
pnpm dist:linux
|
||||
pnpm dist:linux:deb-arm64
|
||||
pnpm dist:linux:rpm-arm64
|
||||
|
||||
- name: Build on Windows
|
||||
if: startsWith(matrix.os, 'windows')
|
||||
run: |
|
||||
pnpm dist:win
|
||||
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: build-artifacts-${{ matrix.os }}
|
||||
path: pack/
|
||||
retention-days: 7
|
||||
if-no-files-found: error
|
||||
|
||||
comment:
|
||||
name: Comment on PR
|
||||
needs: [check-permissions, build]
|
||||
if: always() && needs.check-permissions.outputs.has-write-access == 'true'
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
pull-requests: write
|
||||
steps:
|
||||
- name: Create comment
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const runId = context.runId;
|
||||
const runUrl = `https://github.com/${context.repo.owner}/${context.repo.repo}/actions/runs/${runId}`;
|
||||
|
||||
const buildResult = '${{ needs.build.result }}';
|
||||
|
||||
let comment;
|
||||
if (buildResult === 'success') {
|
||||
comment = `## 🚀 Build Artifacts Ready!
|
||||
|
||||
The builds have completed successfully. You can download the artifacts from the workflow run:
|
||||
|
||||
**[📦 Download Artifacts](${runUrl})**
|
||||
|
||||
### Available builds:
|
||||
- **Windows**: \`build-artifacts-windows-latest\`
|
||||
- **macOS**: \`build-artifacts-macos-latest\`
|
||||
- **Linux**: \`build-artifacts-ubuntu-latest\`
|
||||
|
||||
*Note: Artifacts are available for 7 days.*`;
|
||||
} else if (buildResult === 'failure') {
|
||||
comment = `## ❌ Build Failed
|
||||
|
||||
Unfortunately, one or more builds failed. Please check the workflow run for details:
|
||||
|
||||
**[View Workflow Run](${runUrl})**`;
|
||||
} else {
|
||||
comment = `## ⚠️ Build Status: ${buildResult}
|
||||
|
||||
The build process completed with status: **${buildResult}**
|
||||
|
||||
**[View Workflow Run](${runUrl})**`;
|
||||
}
|
||||
|
||||
github.rest.issues.createComment({
|
||||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
body: comment
|
||||
});
|
||||
42
.github/workflows/reviewdog.yml
vendored
Normal file
@ -0,0 +1,42 @@
|
||||
name: reviewdog
|
||||
|
||||
on: [pull_request_target]
|
||||
|
||||
env:
|
||||
NODE_VERSION: "22.x"
|
||||
|
||||
jobs:
|
||||
eslint:
|
||||
if: github.event.pull_request.draft == false
|
||||
name: runner / eslint
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: write
|
||||
checks: write
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 10
|
||||
run_install: false
|
||||
|
||||
- name: Setup NodeJS
|
||||
uses: actions/setup-node@v5
|
||||
with:
|
||||
node-version: ${{ env.NODE_VERSION }}
|
||||
cache: 'pnpm'
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install --frozen-lockfile
|
||||
|
||||
- uses: reviewdog/action-eslint@v1.34.0
|
||||
with:
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
reporter: github-pr-review # Change reporter.
|
||||
eslint_flags: './src'
|
||||
fail_level: error
|
||||
8
.github/workflows/winget-submission.yml
vendored
@ -20,11 +20,11 @@ jobs:
|
||||
TAG_NAME: ${{ inputs.tag_name || github.event.release.tag_name }}
|
||||
run: echo "WINGET_TAG_NAME=$(echo ${TAG_NAME#v})" >> $GITHUB_ENV
|
||||
- name: Submit package to Windows Package Manager Community Repository
|
||||
uses: vedantmgoyal2009/winget-releaser@v2
|
||||
uses: vedantmgoyal2009/winget-releaser@main
|
||||
with:
|
||||
identifier: th-ch.YouTubeMusic
|
||||
installers-regex: '^YouTube-Music-Web-Setup-[\d\.]+\.exe$'
|
||||
identifier: pear-devs.PearDesktop
|
||||
installers-regex: '^Pear-Desktop-Web-Setup-[\d\.]+\.exe$'
|
||||
version: ${{ env.WINGET_TAG_NAME }}
|
||||
release-tag: ${{ inputs.tag_name || github.event.release.tag_name }}
|
||||
token: ${{ secrets.WINGET_ACC_TOKEN }}
|
||||
fork-user: youtube-music-winget
|
||||
fork-user: pear-desktop-winget
|
||||
|
||||
3
.gitignore
vendored
@ -1,7 +1,6 @@
|
||||
node_modules
|
||||
/dist
|
||||
/pack
|
||||
electron-builder.yml
|
||||
.vscode/settings.json
|
||||
.idea
|
||||
|
||||
@ -13,3 +12,5 @@ electron-builder.yml
|
||||
!.yarn/sdks
|
||||
!.yarn/versions
|
||||
.vite-inspect
|
||||
|
||||
.DS_Store
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
{
|
||||
"tabWidth": 2,
|
||||
"useTabs": false,
|
||||
"singleQuote": true
|
||||
"singleQuote": true,
|
||||
"trailingComma": "all",
|
||||
"quoteProps": "consistent"
|
||||
}
|
||||
|
||||
214
README.md
@ -1,44 +1,53 @@
|
||||
<div align="center" markdown="1">
|
||||
<sup>Special thanks to:</sup>
|
||||
<br>
|
||||
<br>
|
||||
<a href="https://go.warp.dev/pear-desktop">
|
||||
<img alt="Warp sponsorship" width="400" src="https://github.com/user-attachments/assets/8307ea56-e872-494a-8a9c-de0e296a06ed" />
|
||||
</a>
|
||||
|
||||
### [Warp, built for coding with multiple AI agents](https://go.warp.dev/pear-desktop)
|
||||
[Available for macOS, Linux, & Windows](https://go.warp.dev/pear-desktop)<br>
|
||||
|
||||
</div>
|
||||
<hr>
|
||||
|
||||
<div align="center">
|
||||
|
||||
# YouTube Music
|
||||
# :pear: Pear Desktop
|
||||
|
||||
[](https://github.com/th-ch/youtube-music/releases/)
|
||||
[](https://github.com/th-ch/youtube-music/blob/master/LICENSE)
|
||||
[](https://github.com/th-ch/youtube-music/blob/master/eslint.config.mjs)
|
||||
[](https://GitHub.com/th-ch/youtube-music/releases/)
|
||||
[](https://GitHub.com/th-ch/youtube-music/releases/)
|
||||
[](https://aur.archlinux.org/packages/youtube-music-bin)
|
||||
[](https://snyk.io/test/github/th-ch/youtube-music)
|
||||
[](https://github.com/pear-devs/pear-desktop/releases/)
|
||||
[](https://github.com/pear-devs/pear-desktop/blob/master/license)
|
||||
[](https://github.com/pear-devs/pear-desktop/blob/master/eslint.config.mjs)
|
||||
[](https://GitHub.com/pear-devs/pear-desktop/releases/)
|
||||
[](https://GitHub.com/pear-devs/pear-desktop/releases/)
|
||||
<!--[](https://aur.archlinux.org/packages/pear-desktop-bin)-->
|
||||
[](https://snyk.io/test/github/pear-devs/pear-desktop)
|
||||
|
||||
</div>
|
||||
|
||||

|
||||
<!---->
|
||||
|
||||
- Native look & feel extension
|
||||
|
||||
<div align="center">
|
||||
<a href="https://github.com/th-ch/youtube-music/releases/latest">
|
||||
<img src="web/youtube-music.svg" width="400" height="100" alt="YouTube Music SVG">
|
||||
</a>
|
||||
</div>
|
||||
|
||||
Read this in other languages: [🇰🇷](./docs/readme/README-ko.md), [🇮🇸](./docs/readme/README-is.md), [🇨🇱 🇪🇸](./docs/readme/README-es.md), [🇷🇺](./docs/readme/README-ru.md)
|
||||
|
||||
**Electron wrapper around YouTube Music featuring:**
|
||||
|
||||
- Native look & feel, aims at keeping the original interface
|
||||
- Framework for custom plugins: change YouTube Music to your needs (style, content, features), enable/disable plugins in
|
||||
one click
|
||||
|
||||
## Demo Image
|
||||
|
||||
| Player Screen (album color theme & ambient light) |
|
||||
|:---------------------------------------------------------------------------------------------------------:|
|
||||
||
|
||||
> [!IMPORTANT]
|
||||
> ⚠️ Disclaimer
|
||||
>
|
||||
> **No Affiliation**
|
||||
>
|
||||
> This project, and its contributors, are not affiliated with, authorized by, endorsed by, or in any way officially connected with Google LLC, YouTube, or any of their subsidiaries or affiliates. **This is an independent, non-profit, and unofficial extension developed by a team of volunteers with the goal of providing a desktop experience.**
|
||||
>
|
||||
> **Trademarks**
|
||||
>
|
||||
> The names "Google" and "YouTube Music", as well as related names, marks, emblems, and images, are registered trademarks of their respective owners. Any use of these trademarks is for identification and reference purposes only and does not imply any association with the trademark holder. We have no intention of infringing upon these trademarks or causing harm to the trademark holders.
|
||||
>
|
||||
> **Limitation of Liability**
|
||||
>
|
||||
> This application (extension) is provided "AS IS", and you use it at your own risk. In no event shall the developers or contributors be liable for any claim, damages, or other liability, including any legal consequences, arising from, out of, or in connection with the software or the use or other dealings in the software. The responsibility for any and all outcomes of using this software rests entirely with the user.
|
||||
|
||||
## Content
|
||||
|
||||
- [Features](#features)
|
||||
- [Available plugins](#available-plugins)
|
||||
- [Translation](#translation)
|
||||
- [Download](#download)
|
||||
- [Arch Linux](#arch-linux)
|
||||
@ -56,169 +65,63 @@ Read this in other languages: [🇰🇷](./docs/readme/README-ko.md), [🇮🇸]
|
||||
- [License](#license)
|
||||
- [FAQ](#faq)
|
||||
|
||||
## Features:
|
||||
|
||||
- **Auto confirm when paused** (Always Enabled): disable
|
||||
the ["Continue Watching?"](https://user-images.githubusercontent.com/61631665/129977894-01c60740-7ec6-4bf0-9a2c-25da24491b0e.png)
|
||||
popup that pause music after a certain time
|
||||
|
||||
- And more ...
|
||||
|
||||
## Available plugins:
|
||||
|
||||
- **Ad Blocker**: Block all ads and tracking out of the box
|
||||
|
||||
- **Album Actions**: Adds Undislike, Dislike, Like, and Unlike buttons to apply this to all songs in a playlist or album
|
||||
|
||||
- **Album Color Theme**: Applies a dynamic theme and visual effects based on the album color palette
|
||||
|
||||
- **Ambient Mode**: Applies a lighting effect by casting gentle colors from the video, into your screen’s background
|
||||
|
||||
- **Audio Compressor**: Apply compression to audio (lowers the volume of the loudest parts of the signal and raises the
|
||||
volume of the softest parts)
|
||||
|
||||
- **Blur Navigation Bar**: makes navigation bar transparent and blurry
|
||||
|
||||
- **Bypass Age Restrictions**: bypass YouTube's age verification
|
||||
|
||||
- **Captions Selector**: Enable captions
|
||||
|
||||
- **Compact Sidebar**: Always set the sidebar in compact mode
|
||||
|
||||
- **Crossfade**: Crossfade between songs
|
||||
|
||||
- **Disable Autoplay**: Makes every song start in "paused" mode
|
||||
|
||||
- **[Discord](https://discord.com/) Rich Presence**: Show your friends what you listen to
|
||||
with [Rich Presence](https://user-images.githubusercontent.com/28219076/104362104-a7a0b980-5513-11eb-9744-bb89eabe0016.png)
|
||||
|
||||
- **Downloader**: downloads
|
||||
MP3 [directly from the interface](https://user-images.githubusercontent.com/61631665/129977677-83a7d067-c192-45e1-98ae-b5a4927393be.png) [(youtube-dl)](https://github.com/ytdl-org/youtube-dl)
|
||||
|
||||
- **Exponential Volume**: Makes the volume
|
||||
slider [exponential](https://greasyfork.org/en/scripts/397686-youtube-music-fix-volume-ratio/) so it's easier to
|
||||
select lower volumes
|
||||
|
||||
- **In-App Menu**: [gives bars a fancy, dark look](https://user-images.githubusercontent.com/78568641/112215894-923dbf00-8c29-11eb-95c3-3ce15db27eca.png)
|
||||
|
||||
> (see [this post](https://github.com/th-ch/youtube-music/issues/410#issuecomment-952060709) if you have problem
|
||||
accessing the menu after enabling this plugin and hide-menu option)
|
||||
|
||||
- **Scrobbler**: Adds scrobbling support for [Last.fm](https://www.last.fm/) and [ListenBrainz](https://listenbrainz.org/)
|
||||
|
||||
- **Lumia Stream**: Adds [Lumia Stream](https://lumiastream.com/) support
|
||||
|
||||
- **Lyrics Genius**: Adds lyrics support for most songs
|
||||
|
||||
- **Music Together**: Share a playlist with others. When the host plays a song, everyone else will hear the same song
|
||||
|
||||
- **Navigation**: Next/Back navigation arrows directly integrated in the interface, like in your favorite browser
|
||||
|
||||
- **No Google Login**: Remove Google login buttons and links from the interface
|
||||
|
||||
- **Notifications**: Display a notification when a song starts
|
||||
playing ([interactive notifications](https://user-images.githubusercontent.com/78568641/114102651-63ce0e00-98d0-11eb-9dfe-c5a02bb54f9c.png)
|
||||
are available on windows)
|
||||
|
||||
- **Picture-in-picture**: allows to switch the app to picture-in-picture mode
|
||||
|
||||
- **Playback Speed**: Listen fast, listen
|
||||
slow! [Adds a slider that controls song speed](https://user-images.githubusercontent.com/61631665/129976003-e55db5ba-bf42-448c-a059-26a009775e68.png)
|
||||
|
||||
- **Precise Volume**: Control the volume precisely using mousewheel/hotkeys, with a custom hud and customizable volume
|
||||
steps
|
||||
|
||||
- **Shortcuts (& MPRIS)**: Allows setting global hotkeys for playback (play/pause/next/previous) +
|
||||
disable [media osd](https://user-images.githubusercontent.com/84923831/128601225-afa38c1f-dea8-4209-9f72-0f84c1dd8b54.png)
|
||||
by overriding media keys + enable Ctrl/CMD + F to search + enable linux mpris support for
|
||||
mediakeys + [custom hotkeys](https://github.com/Araxeus/youtube-music/blob/1e591d6a3df98449bcda6e63baab249b28026148/providers/song-controls.js#L13-L50)
|
||||
for [advanced users](https://github.com/th-ch/youtube-music/issues/106#issuecomment-952156902)
|
||||
|
||||
- **Skip Disliked Song**: Skips disliked songs
|
||||
|
||||
- **Skip Silences**: Automatically skip silenced sections
|
||||
|
||||
- [**SponsorBlock**](https://github.com/ajayyy/SponsorBlock): Automatically Skips non-music parts like intro/outro or
|
||||
parts of music videos where the song isn't playing
|
||||
|
||||
- **Synced Lyrics**: Provides synced lyrics to songs, using providers like [LRClib](https://lrclib.net).
|
||||
|
||||
- **Taskbar Media Control**: Control playback from
|
||||
your [Windows taskbar](https://user-images.githubusercontent.com/78568641/111916130-24a35e80-8a82-11eb-80c8-5021c1aa27f4.png)
|
||||
|
||||
- **TouchBar**: Custom TouchBar layout for macOS
|
||||
|
||||
- **Tuna OBS**: Integration with [OBS](https://obsproject.com/)'s
|
||||
plugin [Tuna](https://obsproject.com/forum/resources/tuna.843/)
|
||||
|
||||
- **Video Quality Changer**: Allows changing the video quality with
|
||||
a [button](https://user-images.githubusercontent.com/78568641/138574366-70324a5e-2d64-4f6a-acdd-dc2a2b9cecc5.png) on
|
||||
the video overlay
|
||||
|
||||
- **Video Toggle**: Adds
|
||||
a [button](https://user-images.githubusercontent.com/28893833/173663950-63e6610e-a532-49b7-9afa-54cb57ddfc15.png) to
|
||||
switch between Video/Song mode. can also optionally remove the whole video tab
|
||||
|
||||
- **Visualizer**: Different music visualizers
|
||||
|
||||
|
||||
## Translation
|
||||
|
||||
You can help with translation on [Hosted Weblate](https://hosted.weblate.org/projects/youtube-music/).
|
||||
You can help with translation on [Hosted Weblate](https://bit.ly/48n5YF7).
|
||||
|
||||
<a href="https://hosted.weblate.org/engage/youtube-music/">
|
||||
<img src="https://hosted.weblate.org/widget/youtube-music/i18n/multi-auto.svg" alt="translation status" />
|
||||
<img src="https://hosted.weblate.org/widget/youtube-music/i18n/287x66-black.png" alt="translation status 2" />
|
||||
<a href="https://bit.ly/48n5YF7/">
|
||||
<img src="https://bit.ly/4q83L6S" alt="translation status" />
|
||||
<img src="https://bit.ly/4h3zBxo" alt="translation status 2" />
|
||||
</a>
|
||||
|
||||
## Download
|
||||
|
||||
You can check out the [latest release](https://github.com/th-ch/youtube-music/releases/latest) to quickly find the
|
||||
You can check out the [latest release](https://github.com/pear-devs/pear-desktop/releases/latest) to quickly find the
|
||||
latest version.
|
||||
|
||||
### Arch Linux
|
||||
|
||||
Install the [`youtube-music-bin`](https://aur.archlinux.org/packages/youtube-music-bin) package from the AUR. For AUR installation instructions, take a look at
|
||||
Install the [`pear-desktop`](https://aur.archlinux.org/packages/pear-desktop) package from the AUR. For AUR installation instructions, take a look at
|
||||
this [wiki page](https://wiki.archlinux.org/index.php/Arch_User_Repository#Installing_packages).
|
||||
|
||||
### macOS
|
||||
|
||||
You can install the app using Homebrew (see the [cask definition](https://github.com/th-ch/homebrew-youtube-music)):
|
||||
You can install the app using Homebrew (see the [cask definition](https://github.com/pear-devs/pear-desktop-homebrew)):
|
||||
|
||||
```bash
|
||||
brew install th-ch/youtube-music/youtube-music
|
||||
brew install pear-devs/pear-desktop
|
||||
```
|
||||
|
||||
If you install the app manually and get an error "is damaged and can’t be opened." when launching the app, run the following in the Terminal:
|
||||
|
||||
```bash
|
||||
xattr -cr /Applications/YouTube\ Music.app
|
||||
/usr/bin/xattr -cr /Applications/Pear\ Desktop.app
|
||||
```
|
||||
|
||||
### Windows
|
||||
|
||||
You can use the [Scoop package manager](https://scoop.sh) to install the `youtube-music` package from
|
||||
You can use the [Scoop package manager](https://scoop.sh) to install the `pear-desktop` package from
|
||||
the [`extras` bucket](https://github.com/ScoopInstaller/Extras).
|
||||
|
||||
```bash
|
||||
scoop bucket add extras
|
||||
scoop install extras/youtube-music
|
||||
scoop install extras/pear-desktop
|
||||
```
|
||||
|
||||
Alternately you can use [Winget](https://learn.microsoft.com/en-us/windows/package-manager/winget/), Windows 11s
|
||||
official CLI package manager to install the `th-ch.YouTubeMusic` package.
|
||||
official CLI package manager to install the `pear-devs.pear-desktop` package.
|
||||
|
||||
*Note: Microsoft Defender SmartScreen might block the installation since it is from an "unknown publisher". This is also
|
||||
true for the manual installation when trying to run the executable(.exe) after a manual download here on github (same
|
||||
file).*
|
||||
|
||||
```bash
|
||||
winget install th-ch.YouTubeMusic
|
||||
winget install pear-devs.pear-desktop
|
||||
```
|
||||
|
||||
#### How to install without a network connection? (in Windows)
|
||||
|
||||
- Download the `*.nsis.7z` file for _your device architecture_ in [release page](https://github.com/th-ch/youtube-music/releases/latest).
|
||||
- Download the `*.nsis.7z` file for _your device architecture_ in [release page](https://github.com/pear-devs/pear-desktop/releases/latest).
|
||||
- `x64` for 64-bit Windows
|
||||
- `ia32` for 32-bit Windows
|
||||
- `arm64` for ARM64 Windows
|
||||
@ -235,8 +138,8 @@ Some predefined themes are available in https://github.com/kerichdev/themes-for-
|
||||
## Dev
|
||||
|
||||
```bash
|
||||
git clone https://github.com/th-ch/youtube-music
|
||||
cd youtube-music
|
||||
git clone https://github.com/pear-devs/pear-desktop
|
||||
cd pear-desktop
|
||||
pnpm install --frozen-lockfile
|
||||
pnpm dev
|
||||
```
|
||||
@ -301,7 +204,7 @@ export default createPlugin({
|
||||
console.log(await context.ipc.invoke('some-event'));
|
||||
},
|
||||
// Only renderer available hook
|
||||
onPlayerApiReady(api: YoutubePlayer, context: RendererContext) {
|
||||
onPlayerApiReady(api, context) {
|
||||
// set plugin config easily
|
||||
context.setConfig({ myConfig: api.getVolume() });
|
||||
},
|
||||
@ -330,7 +233,7 @@ import { createPlugin } from '@/utils';
|
||||
|
||||
export default createPlugin({
|
||||
name: 'Plugin Label',
|
||||
restartNeeded: true, // if value is true, ytmusic will show a restart dialog
|
||||
restartNeeded: true, // if value is true, pear-desktop will show a restart dialog
|
||||
config: {
|
||||
enabled: false,
|
||||
}, // your custom config
|
||||
@ -351,8 +254,7 @@ export default createPlugin({
|
||||
enabled: false,
|
||||
}, // your custom config
|
||||
renderer() {
|
||||
// Remove the login button
|
||||
document.querySelector(".sign-in-link.ytmusic-nav-bar").remove();
|
||||
console.log('hello from renderer');
|
||||
} // define renderer hook
|
||||
});
|
||||
```
|
||||
@ -393,7 +295,7 @@ Uses [Playwright](https://playwright.dev/) to test the app.
|
||||
|
||||
## License
|
||||
|
||||
MIT © [th-ch](https://github.com/th-ch/youtube-music)
|
||||
MIT © [pear-devs](https://github.com/pear-devs/pear-desktop)
|
||||
|
||||
## FAQ
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>Cannot load YouTube Music</title>
|
||||
<title>Cannot load Pear Desktop</title>
|
||||
<style>
|
||||
body {
|
||||
background: #000;
|
||||
@ -43,7 +43,7 @@
|
||||
|
||||
<body>
|
||||
<div class="container">
|
||||
<p>Cannot load YouTube Music… Internet disconnected?</p>
|
||||
<p>Cannot load Pear Desktop… Internet disconnected?</p>
|
||||
<a class="button" href="#" onclick="reload()">Retry</a>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
35
assets/generated/icons/mac/icon.icon/Assets/SVG Image.svg
Normal file
@ -0,0 +1,35 @@
|
||||
<svg width="1024" height="1024" viewBox="0 0 1024 1024" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g filter="url(#filter0_d_18_2)">
|
||||
<circle cx="512" cy="512" r="410" fill="url(#paint0_linear_18_2)"/>
|
||||
<circle cx="512" cy="512" r="402" stroke="url(#paint1_radial_18_2)" stroke-opacity="0.5" stroke-width="16"/>
|
||||
</g>
|
||||
<path d="M675 505.072C680.333 508.152 680.333 515.849 675 518.928L436.5 656.626C431.167 659.705 424.5 655.857 424.5 649.698V374.302C424.5 368.24 430.96 364.415 436.249 367.234L436.5 367.374L675 505.072Z" fill="url(#paint2_linear_18_2)" stroke="url(#paint3_linear_18_2)" stroke-width="8" stroke-linejoin="round"/>
|
||||
<defs>
|
||||
<filter id="filter0_d_18_2" x="78" y="90" width="868" height="868" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset dy="12"/>
|
||||
<feGaussianBlur stdDeviation="12"/>
|
||||
<feComposite in2="hardAlpha" operator="out"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 0.866667 0 0 0 0 0.141176 0 0 0 0 0.462745 0 0 0 0.4 0"/>
|
||||
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_18_2"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_18_2" result="shape"/>
|
||||
</filter>
|
||||
<linearGradient id="paint0_linear_18_2" x1="102" y1="102" x2="922" y2="922" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#FF632F"/>
|
||||
<stop offset="1" stop-color="#DC148C"/>
|
||||
</linearGradient>
|
||||
<radialGradient id="paint1_radial_18_2" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(512 512) rotate(45) scale(579.828)">
|
||||
<stop offset="0.68" stop-color="white" stop-opacity="0"/>
|
||||
<stop offset="0.72" stop-color="white"/>
|
||||
</radialGradient>
|
||||
<linearGradient id="paint2_linear_18_2" x1="512" y1="329" x2="512" y2="695" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="white" stop-opacity="0.4"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint3_linear_18_2" x1="512" y1="329" x2="512" y2="695" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white" stop-opacity="0"/>
|
||||
<stop offset="1" stop-color="white" stop-opacity="0.5"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.2 KiB |
67
assets/generated/icons/mac/icon.icon/icon.json
Normal file
@ -0,0 +1,67 @@
|
||||
{
|
||||
"fill" : {
|
||||
"linear-gradient" : [
|
||||
"display-p3:1.00000,1.00000,1.00000,1.00000",
|
||||
"srgb:0.84314,0.84314,0.84314,1.00000"
|
||||
],
|
||||
"orientation" : {
|
||||
"start" : {
|
||||
"x" : 0.5,
|
||||
"y" : 0
|
||||
},
|
||||
"stop" : {
|
||||
"x" : 0.5,
|
||||
"y" : 0.7
|
||||
}
|
||||
}
|
||||
},
|
||||
"groups" : [
|
||||
{
|
||||
"blur-material" : null,
|
||||
"hidden" : false,
|
||||
"layers" : [
|
||||
{
|
||||
"blend-mode-specializations" : [
|
||||
{
|
||||
"appearance" : "dark",
|
||||
"value" : "normal"
|
||||
}
|
||||
],
|
||||
"image-name" : "SVG Image.svg",
|
||||
"name" : "transparent-icon",
|
||||
"opacity-specializations" : [
|
||||
{
|
||||
"value" : 1
|
||||
},
|
||||
{
|
||||
"appearance" : "dark",
|
||||
"value" : 1
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"name" : "group",
|
||||
"opacity-specializations" : [
|
||||
{
|
||||
"appearance" : "dark",
|
||||
"value" : 0.8
|
||||
}
|
||||
],
|
||||
"shadow" : {
|
||||
"kind" : "layer-color",
|
||||
"opacity" : 0.5
|
||||
},
|
||||
"specular" : true,
|
||||
"translucency" : {
|
||||
"enabled" : false,
|
||||
"value" : 0.5
|
||||
}
|
||||
}
|
||||
],
|
||||
"supported-platforms" : {
|
||||
"circles" : [
|
||||
"watchOS"
|
||||
],
|
||||
"squares" : "shared"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 600 B |
|
Before Width: | Height: | Size: 931 B |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 2.6 KiB |
|
Before Width: | Height: | Size: 353 KiB After Width: | Height: | Size: 36 KiB |
BIN
assets/icon.png
Normal file
|
After Width: | Height: | Size: 790 KiB |
40
assets/icon.svg
Normal file
@ -0,0 +1,40 @@
|
||||
<svg width="1024" height="1024" viewBox="0 0 1024 1024" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g filter="url(#filter0_d_18_2)">
|
||||
<circle cx="512" cy="512" r="410" fill="url(#paint0_linear_18_2)" />
|
||||
<circle cx="512" cy="512" r="402" stroke="url(#paint1_radial_18_2)" stroke-opacity="0.5" stroke-width="16" />
|
||||
</g>
|
||||
<path
|
||||
d="M675 505.072C680.333 508.152 680.333 515.849 675 518.928L436.5 656.626C431.167 659.705 424.5 655.857 424.5 649.698V374.302C424.5 368.24 430.96 364.415 436.249 367.234L436.5 367.374L675 505.072Z"
|
||||
fill="url(#paint2_linear_18_2)" stroke="url(#paint3_linear_18_2)" stroke-width="8" stroke-linejoin="round" />
|
||||
<defs>
|
||||
<filter id="filter0_d_18_2" x="78" y="90" width="868" height="868" filterUnits="userSpaceOnUse"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix" />
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
|
||||
result="hardAlpha" />
|
||||
<feOffset dy="12" />
|
||||
<feGaussianBlur stdDeviation="12" />
|
||||
<feComposite in2="hardAlpha" operator="out" />
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 0.866667 0 0 0 0 0.141176 0 0 0 0 0.462745 0 0 0 0.4 0" />
|
||||
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_18_2" />
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_18_2" result="shape" />
|
||||
</filter>
|
||||
<linearGradient id="paint0_linear_18_2" x1="102" y1="102" x2="922" y2="922" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#FF632F" />
|
||||
<stop offset="1" stop-color="#DC148C" />
|
||||
</linearGradient>
|
||||
<radialGradient id="paint1_radial_18_2" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(512 512) rotate(45) scale(579.828)">
|
||||
<stop offset="0.68" stop-color="white" stop-opacity="0" />
|
||||
<stop offset="0.72" stop-color="white" />
|
||||
</radialGradient>
|
||||
<linearGradient id="paint2_linear_18_2" x1="512" y1="329" x2="512" y2="695" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white" />
|
||||
<stop offset="1" stop-color="white" stop-opacity="0.4" />
|
||||
</linearGradient>
|
||||
<linearGradient id="paint3_linear_18_2" x1="512" y1="329" x2="512" y2="695" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white" stop-opacity="0" />
|
||||
<stop offset="1" stop-color="white" stop-opacity="0.5" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.4 KiB |
607
assets/mdui.css
Normal file
@ -0,0 +1,607 @@
|
||||
:root {
|
||||
--mdui-breakpoint-xs: 0px;
|
||||
--mdui-breakpoint-sm: 600px;
|
||||
--mdui-breakpoint-md: 840px;
|
||||
--mdui-breakpoint-lg: 1080px;
|
||||
--mdui-breakpoint-xl: 1440px;
|
||||
--mdui-breakpoint-xxl: 1920px;
|
||||
}
|
||||
|
||||
:root {
|
||||
--mdui-color-primary-light: 103, 80, 164;
|
||||
--mdui-color-primary-container-light: 234, 221, 255;
|
||||
--mdui-color-on-primary-light: 255, 255, 255;
|
||||
--mdui-color-on-primary-container-light: 33, 0, 94;
|
||||
--mdui-color-inverse-primary-light: 208, 188, 255;
|
||||
--mdui-color-secondary-light: 98, 91, 113;
|
||||
--mdui-color-secondary-container-light: 232, 222, 248;
|
||||
--mdui-color-on-secondary-light: 255, 255, 255;
|
||||
--mdui-color-on-secondary-container-light: 30, 25, 43;
|
||||
--mdui-color-tertiary-light: 125, 82, 96;
|
||||
--mdui-color-tertiary-container-light: 255, 216, 228;
|
||||
--mdui-color-on-tertiary-light: 255, 255, 255;
|
||||
--mdui-color-on-tertiary-container-light: 55, 11, 30;
|
||||
--mdui-color-surface-light: 254, 247, 255;
|
||||
--mdui-color-surface-dim-light: 222, 216, 225;
|
||||
--mdui-color-surface-bright-light: 254, 247, 255;
|
||||
--mdui-color-surface-container-lowest-light: 255, 255, 255;
|
||||
--mdui-color-surface-container-low-light: 247, 242, 250;
|
||||
--mdui-color-surface-container-light: 243, 237, 247;
|
||||
--mdui-color-surface-container-high-light: 236, 230, 240;
|
||||
--mdui-color-surface-container-highest-light: 230, 224, 233;
|
||||
--mdui-color-surface-variant-light: 231, 224, 236;
|
||||
--mdui-color-on-surface-light: 28, 27, 31;
|
||||
--mdui-color-on-surface-variant-light: 73, 69, 78;
|
||||
--mdui-color-inverse-surface-light: 49, 48, 51;
|
||||
--mdui-color-inverse-on-surface-light: 244, 239, 244;
|
||||
--mdui-color-background-light: 254, 247, 255;
|
||||
--mdui-color-on-background-light: 28, 27, 31;
|
||||
--mdui-color-error-light: 179, 38, 30;
|
||||
--mdui-color-error-container-light: 249, 222, 220;
|
||||
--mdui-color-on-error-light: 255, 255, 255;
|
||||
--mdui-color-on-error-container-light: 65, 14, 11;
|
||||
--mdui-color-outline-light: 121, 116, 126;
|
||||
--mdui-color-outline-variant-light: 196, 199, 197;
|
||||
--mdui-color-shadow-light: 0, 0, 0;
|
||||
--mdui-color-surface-tint-color-light: 103, 80, 164;
|
||||
--mdui-color-scrim-light: 0, 0, 0;
|
||||
--mdui-color-primary-dark: 208, 188, 255;
|
||||
--mdui-color-primary-container-dark: 79, 55, 139;
|
||||
--mdui-color-on-primary-dark: 55, 30, 115;
|
||||
--mdui-color-on-primary-container-dark: 234, 221, 255;
|
||||
--mdui-color-inverse-primary-dark: 103, 80, 164;
|
||||
--mdui-color-secondary-dark: 204, 194, 220;
|
||||
--mdui-color-secondary-container-dark: 74, 68, 88;
|
||||
--mdui-color-on-secondary-dark: 51, 45, 65;
|
||||
--mdui-color-on-secondary-container-dark: 232, 222, 248;
|
||||
--mdui-color-tertiary-dark: 239, 184, 200;
|
||||
--mdui-color-tertiary-container-dark: 99, 59, 72;
|
||||
--mdui-color-on-tertiary-dark: 73, 37, 50;
|
||||
--mdui-color-on-tertiary-container-dark: 255, 216, 228;
|
||||
--mdui-color-surface-dark: 20, 18, 24;
|
||||
--mdui-color-surface-dim-dark: 20, 18, 24;
|
||||
--mdui-color-surface-bright-dark: 59, 56, 62;
|
||||
--mdui-color-surface-container-lowest-dark: 15, 13, 19;
|
||||
--mdui-color-surface-container-low-dark: 29, 27, 32;
|
||||
--mdui-color-surface-container-dark: 33, 31, 38;
|
||||
--mdui-color-surface-container-high-dark: 43, 41, 48;
|
||||
--mdui-color-surface-container-highest-dark: 54, 52, 59;
|
||||
--mdui-color-surface-variant-dark: 73, 69, 79;
|
||||
--mdui-color-on-surface-dark: 230, 225, 229;
|
||||
--mdui-color-on-surface-variant-dark: 202, 196, 208;
|
||||
--mdui-color-inverse-surface-dark: 230, 225, 229;
|
||||
--mdui-color-inverse-on-surface-dark: 49, 48, 51;
|
||||
--mdui-color-background-dark: 20, 18, 24;
|
||||
--mdui-color-on-background-dark: 230, 225, 229;
|
||||
--mdui-color-error-dark: 242, 184, 181;
|
||||
--mdui-color-error-container-dark: 140, 29, 24;
|
||||
--mdui-color-on-error-dark: 96, 20, 16;
|
||||
--mdui-color-on-error-container-dark: 249, 222, 220;
|
||||
--mdui-color-outline-dark: 147, 143, 153;
|
||||
--mdui-color-outline-variant-dark: 68, 71, 70;
|
||||
--mdui-color-shadow-dark: 0, 0, 0;
|
||||
--mdui-color-surface-tint-color-dark: 208, 188, 255;
|
||||
--mdui-color-scrim-dark: 0, 0, 0;
|
||||
}
|
||||
|
||||
.mdui-theme-dark,
|
||||
:root {
|
||||
color-scheme: dark;
|
||||
--mdui-color-primary: var(--mdui-color-primary-dark);
|
||||
--mdui-color-primary-container: var(--mdui-color-primary-container-dark);
|
||||
--mdui-color-on-primary: var(--mdui-color-on-primary-dark);
|
||||
--mdui-color-on-primary-container: var(
|
||||
--mdui-color-on-primary-container-dark
|
||||
);
|
||||
--mdui-color-inverse-primary: var(--mdui-color-inverse-primary-dark);
|
||||
--mdui-color-secondary: var(--mdui-color-secondary-dark);
|
||||
--mdui-color-secondary-container: var(--mdui-color-secondary-container-dark);
|
||||
--mdui-color-on-secondary: var(--mdui-color-on-secondary-dark);
|
||||
--mdui-color-on-secondary-container: var(
|
||||
--mdui-color-on-secondary-container-dark
|
||||
);
|
||||
--mdui-color-tertiary: var(--mdui-color-tertiary-dark);
|
||||
--mdui-color-tertiary-container: var(--mdui-color-tertiary-container-dark);
|
||||
--mdui-color-on-tertiary: var(--mdui-color-on-tertiary-dark);
|
||||
--mdui-color-on-tertiary-container: var(
|
||||
--mdui-color-on-tertiary-container-dark
|
||||
);
|
||||
--mdui-color-surface: var(--mdui-color-surface-dark);
|
||||
--mdui-color-surface-dim: var(--mdui-color-surface-dim-dark);
|
||||
--mdui-color-surface-bright: var(--mdui-color-surface-bright-dark);
|
||||
--mdui-color-surface-container-lowest: var(
|
||||
--mdui-color-surface-container-lowest-dark
|
||||
);
|
||||
--mdui-color-surface-container-low: var(
|
||||
--mdui-color-surface-container-low-dark
|
||||
);
|
||||
--mdui-color-surface-container: var(--mdui-color-surface-container-dark);
|
||||
--mdui-color-surface-container-high: var(
|
||||
--mdui-color-surface-container-high-dark
|
||||
);
|
||||
--mdui-color-surface-container-highest: var(
|
||||
--mdui-color-surface-container-highest-dark
|
||||
);
|
||||
--mdui-color-surface-variant: var(--mdui-color-surface-variant-dark);
|
||||
--mdui-color-on-surface: var(--mdui-color-on-surface-dark);
|
||||
--mdui-color-on-surface-variant: var(--mdui-color-on-surface-variant-dark);
|
||||
--mdui-color-inverse-surface: var(--mdui-color-inverse-surface-dark);
|
||||
--mdui-color-inverse-on-surface: var(--mdui-color-inverse-on-surface-dark);
|
||||
--mdui-color-background: var(--mdui-color-background-dark);
|
||||
--mdui-color-on-background: var(--mdui-color-on-background-dark);
|
||||
--mdui-color-error: var(--mdui-color-error-dark);
|
||||
--mdui-color-error-container: var(--mdui-color-error-container-dark);
|
||||
--mdui-color-on-error: var(--mdui-color-on-error-dark);
|
||||
--mdui-color-on-error-container: var(--mdui-color-on-error-container-dark);
|
||||
--mdui-color-outline: var(--mdui-color-outline-dark);
|
||||
--mdui-color-outline-variant: var(--mdui-color-outline-variant-dark);
|
||||
--mdui-color-shadow: var(--mdui-color-shadow-dark);
|
||||
--mdui-color-surface-tint-color: var(--mdui-color-surface-tint-color-dark);
|
||||
--mdui-color-scrim: var(--mdui-color-scrim-dark);
|
||||
color: rgb(var(--mdui-color-on-background));
|
||||
background-color: rgb(var(--mdui-color-background));
|
||||
}
|
||||
|
||||
:root {
|
||||
--mdui-elevation-level0: none;
|
||||
--mdui-elevation-level1: 0 0.5px 1.5px 0 rgba(var(--mdui-color-shadow), 19%),
|
||||
0 0 1px 0 rgba(var(--mdui-color-shadow), 3.9%);
|
||||
--mdui-elevation-level2: 0 0.85px 3px 0 rgba(var(--mdui-color-shadow), 19%),
|
||||
0 0.25px 1px 0 rgba(var(--mdui-color-shadow), 3.9%);
|
||||
--mdui-elevation-level3: 0 1.25px 5px 0 rgba(var(--mdui-color-shadow), 19%),
|
||||
0 0.3333px 1.5px 0 rgba(var(--mdui-color-shadow), 3.9%);
|
||||
--mdui-elevation-level4: 0 1.85px 6.25px 0 rgba(var(--mdui-color-shadow), 19%),
|
||||
0 0.5px 1.75px 0 rgba(var(--mdui-color-shadow), 3.9%);
|
||||
--mdui-elevation-level5: 0 2.75px 9px 0 rgba(var(--mdui-color-shadow), 19%),
|
||||
0 0.25px 3px 0 rgba(var(--mdui-color-shadow), 3.9%);
|
||||
}
|
||||
|
||||
:root {
|
||||
--mdui-motion-easing-linear: cubic-bezier(0, 0, 1, 1);
|
||||
--mdui-motion-easing-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--mdui-motion-easing-standard-accelerate: cubic-bezier(0.3, 0, 1, 1);
|
||||
--mdui-motion-easing-standard-decelerate: cubic-bezier(0, 0, 0, 1);
|
||||
--mdui-motion-easing-emphasized: var(--mdui-motion-easing-standard);
|
||||
--mdui-motion-easing-emphasized-accelerate: cubic-bezier(0.3, 0, 0.8, 0.15);
|
||||
--mdui-motion-easing-emphasized-decelerate: cubic-bezier(0.05, 0.7, 0.1, 1);
|
||||
--mdui-motion-duration-short1: 50ms;
|
||||
--mdui-motion-duration-short2: 100ms;
|
||||
--mdui-motion-duration-short3: 150ms;
|
||||
--mdui-motion-duration-short4: 200ms;
|
||||
--mdui-motion-duration-medium1: 250ms;
|
||||
--mdui-motion-duration-medium2: 300ms;
|
||||
--mdui-motion-duration-medium3: 350ms;
|
||||
--mdui-motion-duration-medium4: 400ms;
|
||||
--mdui-motion-duration-long1: 450ms;
|
||||
--mdui-motion-duration-long2: 500ms;
|
||||
--mdui-motion-duration-long3: 550ms;
|
||||
--mdui-motion-duration-long4: 600ms;
|
||||
--mdui-motion-duration-extra-long1: 700ms;
|
||||
--mdui-motion-duration-extra-long2: 800ms;
|
||||
--mdui-motion-duration-extra-long3: 900ms;
|
||||
--mdui-motion-duration-extra-long4: 1000ms;
|
||||
}
|
||||
|
||||
.mdui-prose {
|
||||
line-height: 1.75;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
.mdui-prose :first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.mdui-prose :last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.mdui-prose code,
|
||||
.mdui-prose kbd,
|
||||
.mdui-prose pre,
|
||||
.mdui-prose pre tt,
|
||||
.mdui-prose samp {
|
||||
font-family: Consolas, Courier, 'Courier New', monospace;
|
||||
}
|
||||
|
||||
.mdui-prose caption {
|
||||
text-align: left;
|
||||
}
|
||||
.mdui-prose [draggable='true'],
|
||||
.mdui-prose [draggable] {
|
||||
cursor: move;
|
||||
}
|
||||
.mdui-prose [draggable='false'] {
|
||||
cursor: inherit;
|
||||
}
|
||||
.mdui-prose dl,
|
||||
.mdui-prose form,
|
||||
.mdui-prose ol,
|
||||
.mdui-prose p,
|
||||
.mdui-prose ul {
|
||||
margin-top: 1.25em;
|
||||
margin-bottom: 1.25em;
|
||||
}
|
||||
.mdui-prose a {
|
||||
text-decoration: none;
|
||||
outline: 0;
|
||||
color: rgb(var(--mdui-color-primary));
|
||||
}
|
||||
.mdui-prose a:focus,
|
||||
.mdui-prose a:hover {
|
||||
border-bottom: 0.0625rem solid rgb(var(--mdui-color-primary));
|
||||
}
|
||||
.mdui-prose small {
|
||||
font-size: 0.875em;
|
||||
}
|
||||
.mdui-prose strong {
|
||||
font-weight: 600;
|
||||
}
|
||||
.mdui-prose blockquote {
|
||||
margin: 1.6em 2em;
|
||||
padding-left: 1em;
|
||||
border-left: 0.25rem solid rgb(var(--mdui-color-surface-variant));
|
||||
}
|
||||
@media only screen and (max-width: 599.98px) {
|
||||
.mdui-prose blockquote {
|
||||
margin: 1.6em 0;
|
||||
}
|
||||
}
|
||||
.mdui-prose blockquote footer {
|
||||
font-size: 86%;
|
||||
color: rgb(var(--mdui-color-on-surface-variant));
|
||||
}
|
||||
.mdui-prose mark {
|
||||
color: inherit;
|
||||
background-color: rgb(var(--mdui-color-secondary-container));
|
||||
border-bottom: 0.0625rem solid rgb(var(--mdui-color-secondary));
|
||||
margin: 0 0.375rem;
|
||||
padding: 0.125rem;
|
||||
}
|
||||
.mdui-prose h1,
|
||||
.mdui-prose h2,
|
||||
.mdui-prose h3,
|
||||
.mdui-prose h4,
|
||||
.mdui-prose h5,
|
||||
.mdui-prose h6 {
|
||||
font-weight: 400;
|
||||
}
|
||||
.mdui-prose h1 small,
|
||||
.mdui-prose h2 small,
|
||||
.mdui-prose h3 small,
|
||||
.mdui-prose h4 small,
|
||||
.mdui-prose h5 small,
|
||||
.mdui-prose h6 small {
|
||||
font-weight: inherit;
|
||||
font-size: 65%;
|
||||
color: rgb(var(--mdui-color-on-surface-variant));
|
||||
}
|
||||
.mdui-prose h1 strong,
|
||||
.mdui-prose h2 strong,
|
||||
.mdui-prose h3 strong,
|
||||
.mdui-prose h4 strong,
|
||||
.mdui-prose h5 strong,
|
||||
.mdui-prose h6 strong {
|
||||
font-weight: 600;
|
||||
}
|
||||
.mdui-prose h1 {
|
||||
font-size: 2.5em;
|
||||
margin-top: 0;
|
||||
margin-bottom: 1.25em;
|
||||
line-height: 1.1111;
|
||||
}
|
||||
.mdui-prose h2 {
|
||||
font-size: 1.875em;
|
||||
margin-top: 2.25em;
|
||||
margin-bottom: 1.125em;
|
||||
line-height: 1.3333;
|
||||
}
|
||||
.mdui-prose h3 {
|
||||
font-size: 1.5em;
|
||||
margin-top: 2em;
|
||||
margin-bottom: 1em;
|
||||
line-height: 1.6;
|
||||
}
|
||||
.mdui-prose h4 {
|
||||
font-size: 1.25em;
|
||||
margin-top: 1.875em;
|
||||
margin-bottom: 0.875em;
|
||||
line-height: 1.5;
|
||||
}
|
||||
.mdui-prose h2 + *,
|
||||
.mdui-prose h3 + *,
|
||||
.mdui-prose h4 + *,
|
||||
.mdui-prose hr + * {
|
||||
margin-top: 0;
|
||||
}
|
||||
.mdui-prose code,
|
||||
.mdui-prose kbd {
|
||||
font-size: 0.875em;
|
||||
color: rgb(var(--mdui-color-on-surface-container));
|
||||
background-color: rgba(var(--mdui-color-surface-variant), 0.28);
|
||||
padding: 0.125rem 0.375rem;
|
||||
border-radius: var(--mdui-shape-corner-extra-small);
|
||||
}
|
||||
.mdui-prose kbd {
|
||||
font-size: 0.9em;
|
||||
}
|
||||
.mdui-prose abbr[title] {
|
||||
text-decoration: none;
|
||||
cursor: help;
|
||||
border-bottom: 0.0625rem dotted rgb(var(--mdui-color-on-surface-variant));
|
||||
}
|
||||
.mdui-prose ins,
|
||||
.mdui-prose u {
|
||||
text-decoration: none;
|
||||
border-bottom: 0.0625rem solid rgb(var(--mdui-color-on-surface-variant));
|
||||
}
|
||||
.mdui-prose del {
|
||||
text-decoration: line-through;
|
||||
}
|
||||
.mdui-prose hr {
|
||||
margin-top: 3em;
|
||||
margin-bottom: 3em;
|
||||
border: none;
|
||||
border-bottom: 0.0625rem solid rgb(var(--mdui-color-surface-variant));
|
||||
}
|
||||
.mdui-prose pre {
|
||||
margin-top: 1.7143em;
|
||||
margin-bottom: 1.7143em;
|
||||
}
|
||||
.mdui-prose pre code {
|
||||
padding: 0.8571em 1.1429em;
|
||||
overflow-x: auto;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
background-color: rgb(var(--mdui-color-surface-container));
|
||||
color: rgb(var(--mdui-color-on-surface-container));
|
||||
border-radius: var(--mdui-shape-corner-extra-small);
|
||||
}
|
||||
.mdui-prose ol,
|
||||
.mdui-prose ul {
|
||||
padding-left: 1.625em;
|
||||
}
|
||||
.mdui-prose ul {
|
||||
list-style-type: disc;
|
||||
}
|
||||
.mdui-prose ol {
|
||||
list-style-type: decimal;
|
||||
}
|
||||
.mdui-prose ol[type='A'] {
|
||||
list-style-type: upper-alpha;
|
||||
}
|
||||
.mdui-prose ol[type='a'] {
|
||||
list-style-type: lower-alpha;
|
||||
}
|
||||
.mdui-prose ol[type='I'] {
|
||||
list-style-type: upper-roman;
|
||||
}
|
||||
.mdui-prose ol[type='i'] {
|
||||
list-style-type: lower-roman;
|
||||
}
|
||||
.mdui-prose ol[type='1'] {
|
||||
list-style-type: decimal;
|
||||
}
|
||||
.mdui-prose li {
|
||||
margin-top: 0.5em;
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
.mdui-prose ol > li,
|
||||
.mdui-prose ul > li {
|
||||
padding-left: 0.375em;
|
||||
}
|
||||
.mdui-prose ol > li > p,
|
||||
.mdui-prose ul > li > p {
|
||||
margin-top: 0.75em;
|
||||
margin-bottom: 0.75em;
|
||||
}
|
||||
.mdui-prose ol > li > :first-child,
|
||||
.mdui-prose ul > li > :first-child {
|
||||
margin-top: 1.25em;
|
||||
}
|
||||
.mdui-prose ol > li > :last-child,
|
||||
.mdui-prose ul > li > :last-child {
|
||||
margin-bottom: 1.25em;
|
||||
}
|
||||
.mdui-prose ol > li::marker {
|
||||
font-weight: 400;
|
||||
color: rgb(var(--mdui-color-on-surface-variant));
|
||||
}
|
||||
.mdui-prose ul > li::marker {
|
||||
color: rgb(var(--mdui-color-on-surface-variant));
|
||||
}
|
||||
.mdui-prose ol ol,
|
||||
.mdui-prose ol ul,
|
||||
.mdui-prose ul ol,
|
||||
.mdui-prose ul ul {
|
||||
margin-top: 0.75em;
|
||||
margin-bottom: 0.75em;
|
||||
}
|
||||
.mdui-prose fieldset,
|
||||
.mdui-prose img {
|
||||
border: none;
|
||||
}
|
||||
.mdui-prose figure,
|
||||
.mdui-prose img,
|
||||
.mdui-prose video {
|
||||
margin-top: 2em;
|
||||
margin-bottom: 2em;
|
||||
max-width: 100%;
|
||||
}
|
||||
.mdui-prose figure > * {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.mdui-prose figcaption {
|
||||
font-size: 0.875em;
|
||||
line-height: 1.4286;
|
||||
margin-top: 0.8571em;
|
||||
color: rgb(var(--mdui-color-on-surface-variant));
|
||||
}
|
||||
.mdui-prose figcaption:empty::before {
|
||||
z-index: -1;
|
||||
cursor: text;
|
||||
content: attr(placeholder);
|
||||
color: rgb(var(--mdui-color-on-surface-variant));
|
||||
}
|
||||
.mdui-prose table {
|
||||
margin-top: 2em;
|
||||
margin-bottom: 2em;
|
||||
border: 0.0625rem solid rgb(var(--mdui-color-surface-variant));
|
||||
border-radius: var(--mdui-shape-corner-large);
|
||||
}
|
||||
.mdui-table {
|
||||
width: 100%;
|
||||
overflow-x: auto;
|
||||
margin-top: 2em;
|
||||
margin-bottom: 2em;
|
||||
border: 0.0625rem solid rgb(var(--mdui-color-surface-variant));
|
||||
border-radius: var(--mdui-shape-corner-large);
|
||||
}
|
||||
.mdui-table table {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
}
|
||||
.mdui-prose table,
|
||||
.mdui-table table {
|
||||
width: 100%;
|
||||
text-align: left;
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
.mdui-prose td,
|
||||
.mdui-prose th,
|
||||
.mdui-table td,
|
||||
.mdui-table th {
|
||||
border-top: 0.0625rem solid rgb(var(--mdui-color-surface-variant));
|
||||
}
|
||||
.mdui-prose td:not(:first-child),
|
||||
.mdui-prose th:not(:first-child),
|
||||
.mdui-table td:not(:first-child),
|
||||
.mdui-table th:not(:first-child) {
|
||||
border-left: 0.0625rem solid rgb(var(--mdui-color-surface-variant));
|
||||
}
|
||||
.mdui-prose td:not(:last-child),
|
||||
.mdui-prose th:not(:last-child),
|
||||
.mdui-table td:not(:last-child),
|
||||
.mdui-table th:not(:last-child) {
|
||||
border-right: 0.0625rem solid rgb(var(--mdui-color-surface-variant));
|
||||
}
|
||||
.mdui-prose tfoot td,
|
||||
.mdui-prose tfoot th,
|
||||
.mdui-prose thead td,
|
||||
.mdui-prose thead th,
|
||||
.mdui-table tfoot td,
|
||||
.mdui-table tfoot th,
|
||||
.mdui-table thead td,
|
||||
.mdui-table thead th {
|
||||
position: relative;
|
||||
vertical-align: middle;
|
||||
padding: 1.125rem 1rem;
|
||||
font-weight: var(--mdui-typescale-title-medium-weight);
|
||||
letter-spacing: var(--mdui-typescale-title-medium-tracking);
|
||||
line-height: var(--mdui-typescale-title-medium-line-height);
|
||||
color: rgb(var(--mdui-color-on-surface-variant));
|
||||
box-shadow: var(--mdui-elevation-level1);
|
||||
}
|
||||
.mdui-prose tbody td,
|
||||
.mdui-prose tbody th,
|
||||
.mdui-table tbody td,
|
||||
.mdui-table tbody th {
|
||||
padding: 0.875rem 1rem;
|
||||
}
|
||||
.mdui-prose tbody th,
|
||||
.mdui-table tbody th {
|
||||
vertical-align: middle;
|
||||
font-weight: inherit;
|
||||
}
|
||||
.mdui-prose tbody td,
|
||||
.mdui-table tbody td {
|
||||
vertical-align: baseline;
|
||||
}
|
||||
.mdui-prose tbody:first-child tr:first-child td,
|
||||
.mdui-prose thead:first-child tr:first-child th,
|
||||
.mdui-table tbody:first-child tr:first-child td,
|
||||
.mdui-table thead:first-child tr:first-child th {
|
||||
border-top: 0;
|
||||
}
|
||||
:root {
|
||||
--mdui-shape-corner-none: 0;
|
||||
--mdui-shape-corner-extra-small: 0.25rem;
|
||||
--mdui-shape-corner-small: 0.5rem;
|
||||
--mdui-shape-corner-medium: 0.75rem;
|
||||
--mdui-shape-corner-large: 1rem;
|
||||
--mdui-shape-corner-extra-large: 1.75rem;
|
||||
--mdui-shape-corner-full: 1000rem;
|
||||
}
|
||||
:root {
|
||||
--mdui-state-layer-hover: 0.08;
|
||||
--mdui-state-layer-focus: 0.12;
|
||||
--mdui-state-layer-pressed: 0.12;
|
||||
--mdui-state-layer-dragged: 0.16;
|
||||
}
|
||||
:root {
|
||||
--mdui-typescale-display-large-weight: 400;
|
||||
--mdui-typescale-display-medium-weight: 400;
|
||||
--mdui-typescale-display-small-weight: 400;
|
||||
--mdui-typescale-display-large-line-height: 4rem;
|
||||
--mdui-typescale-display-medium-line-height: 3.25rem;
|
||||
--mdui-typescale-display-small-line-height: 2.75rem;
|
||||
--mdui-typescale-display-large-size: 3.5625rem;
|
||||
--mdui-typescale-display-medium-size: 2.8125rem;
|
||||
--mdui-typescale-display-small-size: 2.25rem;
|
||||
--mdui-typescale-display-large-tracking: 0rem;
|
||||
--mdui-typescale-display-medium-tracking: 0rem;
|
||||
--mdui-typescale-display-small-tracking: 0rem;
|
||||
--mdui-typescale-headline-large-weight: 400;
|
||||
--mdui-typescale-headline-medium-weight: 400;
|
||||
--mdui-typescale-headline-small-weight: 400;
|
||||
--mdui-typescale-headline-large-line-height: 2.5rem;
|
||||
--mdui-typescale-headline-medium-line-height: 2.25rem;
|
||||
--mdui-typescale-headline-small-line-height: 2rem;
|
||||
--mdui-typescale-headline-large-size: 2rem;
|
||||
--mdui-typescale-headline-medium-size: 1.75rem;
|
||||
--mdui-typescale-headline-small-size: 1.5rem;
|
||||
--mdui-typescale-headline-large-tracking: 0rem;
|
||||
--mdui-typescale-headline-medium-tracking: 0rem;
|
||||
--mdui-typescale-headline-small-tracking: 0rem;
|
||||
--mdui-typescale-title-large-weight: 400;
|
||||
--mdui-typescale-title-medium-weight: 500;
|
||||
--mdui-typescale-title-small-weight: 500;
|
||||
--mdui-typescale-title-large-line-height: 1.75rem;
|
||||
--mdui-typescale-title-medium-line-height: 1.5rem;
|
||||
--mdui-typescale-title-small-line-height: 1.25rem;
|
||||
--mdui-typescale-title-large-size: 1.375rem;
|
||||
--mdui-typescale-title-medium-size: 1rem;
|
||||
--mdui-typescale-title-small-size: 0.875rem;
|
||||
--mdui-typescale-title-large-tracking: 0rem;
|
||||
--mdui-typescale-title-medium-tracking: 0.009375rem;
|
||||
--mdui-typescale-title-small-tracking: 0.00625rem;
|
||||
--mdui-typescale-label-large-weight: 500;
|
||||
--mdui-typescale-label-medium-weight: 500;
|
||||
--mdui-typescale-label-small-weight: 500;
|
||||
--mdui-typescale-label-large-line-height: 1.25rem;
|
||||
--mdui-typescale-label-medium-line-height: 1rem;
|
||||
--mdui-typescale-label-small-line-height: 0.375rem;
|
||||
--mdui-typescale-label-large-size: 0.875rem;
|
||||
--mdui-typescale-label-medium-size: 0.75rem;
|
||||
--mdui-typescale-label-small-size: 0.6875rem;
|
||||
--mdui-typescale-label-large-tracking: 0.00625rem;
|
||||
--mdui-typescale-label-medium-tracking: 0.03125rem;
|
||||
--mdui-typescale-label-small-tracking: 0.03125rem;
|
||||
--mdui-typescale-body-large-weight: 400;
|
||||
--mdui-typescale-body-medium-weight: 400;
|
||||
--mdui-typescale-body-small-weight: 400;
|
||||
--mdui-typescale-body-large-line-height: 1.5rem;
|
||||
--mdui-typescale-body-medium-line-height: 1.25rem;
|
||||
--mdui-typescale-body-small-line-height: 1rem;
|
||||
--mdui-typescale-body-large-size: 1rem;
|
||||
--mdui-typescale-body-medium-size: 0.875rem;
|
||||
--mdui-typescale-body-small-size: 0.75rem;
|
||||
--mdui-typescale-body-large-tracking: 0.009375rem;
|
||||
--mdui-typescale-body-medium-tracking: 0.015625rem;
|
||||
--mdui-typescale-body-small-tracking: 0.025rem;
|
||||
}
|
||||
.mdui-lock-screen {
|
||||
overflow: hidden !important;
|
||||
}
|
||||
|
Before Width: | Height: | Size: 250 B After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 192 B After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 265 B After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 269 B After Width: | Height: | Size: 13 KiB |
BIN
assets/tray-paused-white.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
assets/tray-paused.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
assets/tray-white.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
assets/tray.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 40 KiB |
@ -1,6 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 176 176" width="32" height="32">
|
||||
<circle fill="red" cx="88" cy="88" r="88"/>
|
||||
<path fill="#FFF"
|
||||
d="M88 46c23.1 0 42 18.8 42 42s-18.8 42-42 42-42-18.8-42-42 18.9-42 42-42m0-4c-25.4 0-46 20.6-46 46s20.6 46 46 46 46-20.6 46-46-20.6-46-46-46z"/>
|
||||
<path fill="#FFF" d="M72 111l39-24-39-22z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 353 B |
3115
changelog.md
|
Before Width: | Height: | Size: 247 B |
|
Before Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 365 B |
|
Before Width: | Height: | Size: 493 B |
|
Before Width: | Height: | Size: 860 B |
@ -1,9 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="400" height="400">
|
||||
<g transform="translate(183.604 196.396)" stroke="#fff" stroke-width="2.23">
|
||||
<path
|
||||
style="line-height:normal;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration-line:none;text-transform:none;block-progression:tb;marker:none"
|
||||
d="M-116.99 106.245l31.82 31.82 236.31-236.31-31.82-31.82z" color="#000" font-weight="400"
|
||||
font-family="Sans" overflow="visible" fill="#fff" stroke="none"/>
|
||||
<circle r="171.304" cy="4" cx="16" fill="none" stroke-width="44.6"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 588 B |
@ -1,23 +0,0 @@
|
||||
<svg width="1440" height="347" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="a">
|
||||
<stop stop-color="#606483" stop-opacity="0" offset="0%"/>
|
||||
<stop stop-color="#0B0D19" stop-opacity=".72" offset="100%"/>
|
||||
</linearGradient>
|
||||
<linearGradient x1="50%" y1="0%" x2="39.334%" y2="79.282%" id="b">
|
||||
<stop stop-color="#0B0D19" offset="0%"/>
|
||||
<stop stop-color="#0B0D19" stop-opacity="0" offset="100%"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path
|
||||
d="M177.486 208.219c78.18 89.285 218.65-81.067 218.65-119.337 0-38.27-86.408-69.295-193-69.295-106.59 0-193 31.024-193 69.295 0 38.27 89.17 30.051 167.35 119.337z"
|
||||
transform="rotate(6 -140.175 3980.948)" fill="url(#a)"/>
|
||||
<path
|
||||
d="M252.464 335.471c101.27 115.965 283.227-105.29 283.227-154.996 0-49.705-111.929-90-250-90s-250 40.295-250 90c0 49.706 115.503 39.032 216.773 154.996z"
|
||||
fill="url(#a)" transform="rotate(24 321.92 -247.724)"/>
|
||||
<path
|
||||
d="M302.512 242.909c88.025 32.428 156-25.04 156-55.93 0-30.888-69.844-55.928-156-55.928-86.157 0-156 25.04-156 55.929 0 30.888 67.974 23.5 156 55.929z"
|
||||
fill="url(#b)" transform="rotate(24 338.741 -285.505)"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.2 KiB |
@ -1,32 +0,0 @@
|
||||
<svg width="1440" height="318" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<linearGradient x1="38.706%" y1="-187.115%" x2="18.675%" y2="110.984%" id="a">
|
||||
<stop stop-color="#FFF" stop-opacity="0" offset="0%"/>
|
||||
<stop stop-color="#c3352e" offset="100%"/>
|
||||
</linearGradient>
|
||||
<linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="c">
|
||||
<stop stop-color="#606483" stop-opacity="0" offset="0%"/>
|
||||
<stop stop-color="#0B0D19" stop-opacity=".72" offset="100%"/>
|
||||
</linearGradient>
|
||||
<linearGradient x1="50%" y1="0%" x2="39.334%" y2="79.282%" id="d">
|
||||
<stop stop-color="#0B0D19" stop-opacity=".32" offset="0%"/>
|
||||
<stop stop-color="#0B0D19" stop-opacity="0" offset="100%"/>
|
||||
</linearGradient>
|
||||
<filter id="b">
|
||||
<feTurbulence type="fractalNoise" numOctaves="2" baseFrequency=".3" result="turb"/>
|
||||
<feComposite in="turb" operator="arithmetic" k1=".1" k2=".1" k3=".1" k4=".1" result="result1"/>
|
||||
<feComposite operator="in" in="result1" in2="SourceGraphic" result="finalFilter"/>
|
||||
<feBlend mode="multiply" in="finalFilter" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
</defs>
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M88.494 90c67.04 7.177 161.094-24.753 224.996-90H.2c25.3 48.079 42.361 85.083 88.294 90z"
|
||||
transform="translate(1051)" fill="url(#a)" filter="url(#b)"/>
|
||||
<path
|
||||
d="M250.464 367.471c101.27 115.965 283.227-105.29 283.227-154.996 0-49.705-111.929-90-250-90s-250 40.295-250 90c0 49.706 115.503 39.032 216.773 154.996z"
|
||||
fill="url(#c)" transform="rotate(143 810.285 354.367)"/>
|
||||
<path
|
||||
d="M373.408 256.178c88.026 32.429 156-25.04 156-55.929 0-30.888-69.843-55.929-156-55.929-86.156 0-156 25.04-156 55.93 0 30.888 67.975 23.5 156 55.928z"
|
||||
fill="url(#d)" transform="rotate(136 905.21 332.676)"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.9 KiB |
@ -1,5 +0,0 @@
|
||||
<svg width="96" height="48" xmlns="http://www.w3.org/2000/svg">
|
||||
<text y="35" x="48" fill="#fff" stroke-width="0" font-size="36" font-family="Monospace" text-anchor="middle"
|
||||
stroke="#fff"></>
|
||||
</text>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 224 B |
@ -1,8 +0,0 @@
|
||||
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class="style-scope yt-icon" style="width:100%;height:100%"
|
||||
pointer-events="none" display="block" fill="#fff">
|
||||
<g class="style-scope yt-icon">
|
||||
<path
|
||||
d="M25.462 19.105v6.848H4.515v-6.848H.489v8.861c0 1.111.9 2.012 2.016 2.012h24.967c1.115 0 2.016-.9 2.016-2.012v-8.861h-4.026zM14.62 18.426l-5.764-6.965s-.877-.828.074-.828h3.248V9.217.494S12.049 0 12.793 0h4.572c.536 0 .524.416.524.416V10.424h2.998c1.154 0 .285.867.285.867s-4.904 6.51-5.588 7.193c-.492.495-.964-.058-.964-.058z"
|
||||
class="style-scope yt-icon"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 634 B |
@ -1,35 +0,0 @@
|
||||
<svg width="1440" height="582" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="a">
|
||||
<stop stop-color="#606483" stop-opacity="0" offset="0%"/>
|
||||
<stop stop-color="#363636" stop-opacity=".72" offset="100%"/>
|
||||
</linearGradient>
|
||||
<linearGradient x1="50%" y1="0%" x2="39.334%" y2="79.282%" id="b">
|
||||
<stop stop-color="#363636" offset="0%"/>
|
||||
<stop stop-color="#363636" stop-opacity="0" offset="100%"/>
|
||||
</linearGradient>
|
||||
<radialGradient cx="33.3%" cy="43.394%" fx="33.3%" fy="43.394%" r="57.93%"
|
||||
gradientTransform="matrix(.24796 -.96592 .92535 .25883 -.151 .643)" id="c">
|
||||
<stop stop-color="#c3352e" stop-opacity="0" offset="0%"/>
|
||||
<stop stop-color="#c3352e" stop-opacity=".64" offset="51.712%"/>
|
||||
<stop stop-color="#c3352e" stop-opacity=".24" offset="100%"/>
|
||||
</radialGradient>
|
||||
<filter id="d">
|
||||
<feTurbulence type="fractalNoise" numOctaves="2" baseFrequency=".3" result="turb"/>
|
||||
<feComposite in="turb" operator="arithmetic" k1=".1" k2=".1" k3=".1" k4=".1" result="result1"/>
|
||||
<feComposite operator="in" in="result1" in2="SourceGraphic" result="finalFilter"/>
|
||||
<feBlend mode="multiply" in="finalFilter" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
</defs>
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path
|
||||
d="M252.464 335.471c101.27 115.965 283.227-105.29 283.227-154.996 0-49.705-111.929-90-250-90s-250 40.295-250 90c0 49.706 115.503 39.032 216.773 154.996z"
|
||||
fill="url(#a)" transform="rotate(24 -272.272 -82.087)"/>
|
||||
<path
|
||||
d="M302.512 242.909c88.025 32.428 156-25.04 156-55.93 0-30.888-69.844-55.928-156-55.928-86.157 0-156 25.04-156 55.929 0 30.888 67.974 23.5 156 55.929z"
|
||||
fill="url(#b)" transform="rotate(24 -255.451 -119.868)"/>
|
||||
<path
|
||||
d="M103.064 315.218c128.156 12.998 192.38 157.059 218.627 106.632 26.247-50.427-44.059-106.456 60.397-202.707 104.457-96.252-143.2-285.785-172.392-122.551C180.503 259.825-25.091 302.22 103.064 315.218z"
|
||||
transform="translate(1176 -33)" fill="url(#c)" filter="url(#d)"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 2.2 KiB |
@ -1,6 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 60 60" fill="#fff">
|
||||
<path
|
||||
d="M45.563 29.174l-22-15A1 1 0 0022 15v30a.999.999 0 001.563.826l22-15a1 1 0 000-1.652zM24 43.107V16.893L43.225 30 24 43.107z"/>
|
||||
<path
|
||||
d="M30 0C13.458 0 0 13.458 0 30s13.458 30 30 30 30-13.458 30-30S46.542 0 30 0zm0 58C14.561 58 2 45.439 2 30S14.561 2 30 2s28 12.561 28 28-12.561 28-28 28z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 391 B |
|
Before Width: | Height: | Size: 227 KiB |
@ -1,6 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 176 176" width="32" height="32">
|
||||
<circle fill="red" cx="88" cy="88" r="88"/>
|
||||
<path fill="#FFF"
|
||||
d="M88 46c23.1 0 42 18.8 42 42s-18.8 42-42 42-42-18.8-42-42 18.9-42 42-42m0-4c-25.4 0-46 20.6-46 46s20.6 46 46 46 46-20.6 46-46-20.6-46-46-46z"/>
|
||||
<path fill="#FFF" d="M72 111l39-24-39-22z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 360 B |
490
docs/index.html
@ -1,490 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type"/>
|
||||
|
||||
<meta content="IE=edge" http-equiv="X-UA-Compatible"/>
|
||||
<meta content="width=device-width, initial-scale=1" name="viewport"/>
|
||||
<title>YouTube Music Desktop App (Unofficial)</title>
|
||||
<link
|
||||
href="./favicon/favicon.ico"
|
||||
rel="icon"
|
||||
sizes="16x16"
|
||||
type="image/x-icon"
|
||||
/>
|
||||
<link
|
||||
href="./favicon/favicon_32.png"
|
||||
rel="icon"
|
||||
sizes="32x32"
|
||||
type="image/png"
|
||||
/>
|
||||
<link
|
||||
href="./favicon/favicon_48.png"
|
||||
rel="icon"
|
||||
sizes="48x48"
|
||||
type="image/png"
|
||||
/>
|
||||
<link
|
||||
href="./favicon/favicon_96.png"
|
||||
rel="icon"
|
||||
sizes="96x96"
|
||||
type="image/png"
|
||||
/>
|
||||
<link
|
||||
href="./favicon/favicon_144.png"
|
||||
rel="icon"
|
||||
sizes="144x144"
|
||||
type="image/png"
|
||||
/>
|
||||
|
||||
<meta content="#131313" name="theme-color"/>
|
||||
<meta
|
||||
content="YouTube Music Unofficial Desktop App with built-in ad blocker and downloader"
|
||||
name="description"
|
||||
/>
|
||||
<meta
|
||||
content="YouTube Music Desktop App"
|
||||
property="og:site_name"
|
||||
/>
|
||||
<meta
|
||||
class="meta-url"
|
||||
content="https://th-ch.github.io/youtube-music"
|
||||
property="og:url"
|
||||
/>
|
||||
<meta content="website" property="og:type"/>
|
||||
<meta
|
||||
class="meta-url"
|
||||
content="https://th-ch.github.io/youtube-music"
|
||||
name="twitter:url"
|
||||
/>
|
||||
|
||||
<link href="./style/fonts.css" rel="stylesheet"/>
|
||||
<link href="./style/style.css" rel="stylesheet"/>
|
||||
<script src="https://unpkg.com/scrollreveal"></script>
|
||||
</head>
|
||||
<body class="has-animations vsc-initialized" style="height: 100%;">
|
||||
<div class="body-wrap boxed-container">
|
||||
<header class="site-header text-light">
|
||||
<div class="container">
|
||||
<div class="site-header-inner">
|
||||
<div class="brand header-brand">
|
||||
<h1 class="m-0">
|
||||
<a href="https://github.com/th-ch/youtube-music">
|
||||
<img
|
||||
alt="YouTube Music"
|
||||
class="header-logo-image"
|
||||
src="./img/youtube-music.svg"
|
||||
/>
|
||||
</a>
|
||||
</h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
<section class="hero text-center text-light">
|
||||
<div class="hero-bg"></div>
|
||||
<div class="hero-particles-container">
|
||||
<canvas id="hero-particles"></canvas>
|
||||
</div>
|
||||
<div class="container-sm">
|
||||
<div class="hero-inner">
|
||||
<div class="hero-copy">
|
||||
<h1 class="hero-title mt-0">
|
||||
Custom YouTube Music Desktop App
|
||||
</h1>
|
||||
<p class="hero-paragraph">
|
||||
Open source, cross-platform, unofficial YouTube Music Desktop
|
||||
App with built-in <strong>ad blocker</strong> and
|
||||
<strong>downloader</strong>
|
||||
</p>
|
||||
<div class="hero-cta">
|
||||
<a
|
||||
class="button button-primary button-wide-mobile"
|
||||
href="https://github.com/th-ch/youtube-music/releases/latest"
|
||||
>Download</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mockup-container">
|
||||
<div class="mockup-bg">
|
||||
<img
|
||||
alt="YouTube Music"
|
||||
id="mockup-header-img"
|
||||
src="./img/youtube-music.png"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="features-extended section">
|
||||
<div class="features-extended-inner section-inner">
|
||||
<div class="features-extended-wrap">
|
||||
<div class="container">
|
||||
<div class="feature-extended">
|
||||
<div class="feature-extended-image">
|
||||
<img
|
||||
alt="Adblocker"
|
||||
class="device-mockup"
|
||||
data-sr-id="0"
|
||||
src="./img/adblock.svg"
|
||||
style="
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
transform: matrix3d(
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1
|
||||
);
|
||||
transition: opacity 0.6s
|
||||
cubic-bezier(0.215, 0.61, 0.355, 1) 0s,
|
||||
transform 0.6s cubic-bezier(0.215, 0.61, 0.355, 1) 0s;
|
||||
"
|
||||
width="100px"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="feature-extended-body"
|
||||
data-sr-id="5"
|
||||
style="
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
transform: matrix3d(
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1
|
||||
);
|
||||
transition: opacity 0.6s
|
||||
cubic-bezier(0.215, 0.61, 0.355, 1) 0s,
|
||||
transform 0.6s cubic-bezier(0.215, 0.61, 0.355, 1) 0s;
|
||||
"
|
||||
>
|
||||
<h3 class="mt-0 mb-16">Built-in adblocker</h3>
|
||||
<p class="m-0">Block all ads and tracking out of the box</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="feature-extended">
|
||||
<div class="feature-extended-image">
|
||||
<img
|
||||
alt="Downloader"
|
||||
class="device-mockup"
|
||||
data-sr-id="2"
|
||||
src="./img/download.svg"
|
||||
style="
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
transform: matrix3d(
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1
|
||||
);
|
||||
transition: opacity 0.6s
|
||||
cubic-bezier(0.215, 0.61, 0.355, 1) 0s,
|
||||
transform 0.6s cubic-bezier(0.215, 0.61, 0.355, 1) 0s;
|
||||
"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="feature-extended-body"
|
||||
data-sr-id="6"
|
||||
style="
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
transform: matrix3d(
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1
|
||||
);
|
||||
transition: opacity 0.6s
|
||||
cubic-bezier(0.215, 0.61, 0.355, 1) 0s,
|
||||
transform 0.6s cubic-bezier(0.215, 0.61, 0.355, 1) 0s;
|
||||
"
|
||||
>
|
||||
<h3 class="mt-0 mb-16">Built-in downloader</h3>
|
||||
<p class="m-0">
|
||||
Download (like youtube-dl) to custom formats (mp3, opus,
|
||||
etc) directly from the interface
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="feature-extended">
|
||||
<div class="feature-extended-image">
|
||||
<img
|
||||
alt="Plugins"
|
||||
class="device-mockup"
|
||||
data-sr-id="3"
|
||||
src="./img/plugins.svg"
|
||||
style="
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
transform: matrix3d(
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1
|
||||
);
|
||||
transition: opacity 0.6s
|
||||
cubic-bezier(0.215, 0.61, 0.355, 1) 0s,
|
||||
transform 0.6s cubic-bezier(0.215, 0.61, 0.355, 1) 0s;
|
||||
"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="feature-extended-body"
|
||||
data-sr-id="7"
|
||||
style="
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
transform: matrix3d(
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1
|
||||
);
|
||||
transition: opacity 0.6s
|
||||
cubic-bezier(0.215, 0.61, 0.355, 1) 0s,
|
||||
transform 0.6s cubic-bezier(0.215, 0.61, 0.355, 1) 0s;
|
||||
"
|
||||
>
|
||||
<h3 class="mt-0 mb-16">Many other plugins in one click</h3>
|
||||
<p class="m-0">
|
||||
Enhance your user experience with media keys, integrations
|
||||
(Discord), cosmetic filters, notifications, TouchBar,
|
||||
auto-unpause and many more! Every plugin can be enabled or
|
||||
disabled in one click.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="feature-extended">
|
||||
<div class="feature-extended-image">
|
||||
<img
|
||||
alt="Code"
|
||||
class="device-mockup"
|
||||
data-sr-id="4"
|
||||
src="./img/code.svg"
|
||||
style="
|
||||
visibility: visible;
|
||||
width: 200%;
|
||||
opacity: 1;
|
||||
transform: matrix3d(
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1
|
||||
);
|
||||
transition: opacity 0.6s
|
||||
cubic-bezier(0.215, 0.61, 0.355, 1) 0s,
|
||||
transform 0.6s cubic-bezier(0.215, 0.61, 0.355, 1) 0s;
|
||||
"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="feature-extended-body"
|
||||
data-sr-id="8"
|
||||
style="
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
transform: matrix3d(
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1
|
||||
);
|
||||
transition: opacity 0.6s
|
||||
cubic-bezier(0.215, 0.61, 0.355, 1) 0s,
|
||||
transform 0.6s cubic-bezier(0.215, 0.61, 0.355, 1) 0s;
|
||||
"
|
||||
>
|
||||
<h3 class="mt-0 mb-16">Open source & Cross platform</h3>
|
||||
<p class="m-0">
|
||||
Available for Windows (installer and portable), Mac and
|
||||
Linux (AppImage, deb, etc)
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="main-particles-container">
|
||||
<canvas id="main-particles"></canvas>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<footer class="site-footer">
|
||||
<div class="footer-particles-container">
|
||||
<canvas id="footer-particles"></canvas>
|
||||
</div>
|
||||
<div class="site-footer-top">
|
||||
<section class="cta section text-light">
|
||||
<div class="container-sm">
|
||||
<div class="cta-inner section-inner">
|
||||
<div class="cta-header text-center">
|
||||
<h2 class="section-title mt-0">Download and/or contribute</h2>
|
||||
<p class="section-paragraph">Pull requests welcome!</p>
|
||||
<div class="cta-cta">
|
||||
<a
|
||||
class="button button-primary button-wide-mobile"
|
||||
href="https://github.com/th-ch/youtube-music"
|
||||
>Go to code</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
<div class="site-footer-bottom">
|
||||
<div class="container">
|
||||
<div class="site-footer-inner">
|
||||
<div class="brand footer-brand">
|
||||
<a href="https://github.com/th-ch/youtube-music">
|
||||
<img alt="YouTube Music logo" src="./img/youtube-music.svg"/>
|
||||
</a>
|
||||
</div>
|
||||
<ul class="footer-links list-reset">
|
||||
<li>
|
||||
<a href="https://github.com/th-ch/youtube-music">Main page</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://github.com/th-ch/youtube-music/issues"
|
||||
>Issues</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://github.com/th-ch/youtube-music/pulls"
|
||||
>Pull requests</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="footer-social-links list-reset">
|
||||
<li>
|
||||
<a href="https://github.com/th-ch/youtube-music">
|
||||
<span class="screen-reader-text">GitHub</span>
|
||||
<svg
|
||||
height="16"
|
||||
viewBox="0 0 1792 1792"
|
||||
width="16"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<path
|
||||
d="M896 128q209 0 385.5 103t279.5 279.5 103 385.5q0 251-146.5 451.5t-378.5 277.5q-27 5-40-7t-13-30q0-3 .5-76.5t.5-134.5q0-97-52-142 57-6 102.5-18t94-39 81-66.5 53-105 20.5-150.5q0-119-79-206 37-91-8-204-28-9-81 11t-92 44l-38 24q-93-26-192-26t-192 26q-16-11-42.5-27t-83.5-38.5-85-13.5q-45 113-8 204-79 87-79 206 0 85 20.5 150t52.5 105 80.5 67 94 39 102.5 18q-39 36-49 103-21 10-45 15t-57 5-65.5-21.5-55.5-62.5q-19-32-48.5-52t-49.5-24l-20-3q-21 0-29 4.5t-5 11.5 9 14 13 12l7 5q22 10 43.5 38t31.5 51l10 23q13 38 44 61.5t67 30 69.5 7 55.5-3.5l23-4q0 38 .5 88.5t.5 54.5q0 18-13 30t-40 7q-232-77-378.5-277.5t-146.5-451.5q0-209 103-385.5t279.5-279.5 385.5-103zm-477 1103q3-7-7-12-10-3-13 2-3 7 7 12 9 6 13-2zm31 34q7-5-2-16-10-9-16-3-7 5 2 16 10 10 16 3zm30 45q9-7 0-19-8-13-17-6-9 5 0 18t17 7zm42 42q8-8-4-19-12-12-20-3-9 8 4 19 12 12 20 3zm57 25q3-11-13-16-15-4-19 7t13 15q15 6 19-6zm63 5q0-13-17-11-16 0-16 11 0 13 17 11 16 0 16-11zm58-10q-2-11-18-9-16 3-14 15t18 8 14-14z"
|
||||
fill="#fff"
|
||||
/>
|
||||
</svg>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="footer-copyright">© 2024 th-ch</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
<script src="./js/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
268
docs/js/main.js
@ -1,268 +0,0 @@
|
||||
/* eslint-disable */
|
||||
|
||||
// Constants
|
||||
const element = document.documentElement;
|
||||
const { body } = document;
|
||||
const revealOnScroll = (window.sr = ScrollReveal({ mobile: false }));
|
||||
|
||||
// Load animations
|
||||
element.classList.remove('no-js');
|
||||
element.classList.add('js');
|
||||
window.addEventListener('load', () => {
|
||||
body.classList.add('is-loaded');
|
||||
});
|
||||
|
||||
if (body.classList.contains('has-animations')) {
|
||||
window.addEventListener('load', () => {
|
||||
revealOnScroll.reveal('.feature-extended .device-mockup', {
|
||||
duration: 600,
|
||||
distance: '100px',
|
||||
easing: 'cubic-bezier(0.215, 0.61, 0.355, 1)',
|
||||
origin: 'bottom',
|
||||
viewFactor: 0.6,
|
||||
});
|
||||
revealOnScroll.reveal('.feature-extended .feature-extended-body', {
|
||||
duration: 600,
|
||||
distance: '40px',
|
||||
easing: 'cubic-bezier(0.215, 0.61, 0.355, 1)',
|
||||
origin: 'top',
|
||||
viewFactor: 0.6,
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Bubble canvas
|
||||
const bubbleCanvas = function (t) {
|
||||
const e = this;
|
||||
e.parentNode = t;
|
||||
e.setCanvasSize();
|
||||
window.addEventListener('resize', () => {
|
||||
e.setCanvasSize();
|
||||
});
|
||||
e.mouseX = 0;
|
||||
e.mouseY = 0;
|
||||
window.addEventListener('mousemove', (t) => {
|
||||
e.mouseX = t.clientX;
|
||||
e.mouseY = t.clientY;
|
||||
});
|
||||
e.randomise();
|
||||
};
|
||||
|
||||
bubbleCanvas.prototype.setCanvasSize = function () {
|
||||
this.canvasWidth = this.parentNode.clientWidth;
|
||||
this.canvasHeight = this.parentNode.clientHeight;
|
||||
};
|
||||
|
||||
bubbleCanvas.prototype.generateDecimalBetween = function (start, end) {
|
||||
return (Math.random() * (start - end) + end).toFixed(2);
|
||||
};
|
||||
|
||||
bubbleCanvas.prototype.update = function () {
|
||||
const t = this;
|
||||
t.translateX -= t.movementX;
|
||||
t.translateY -= t.movementY;
|
||||
t.posX += (t.mouseX / (t.staticity / t.magnetism) - t.posX) / t.smoothFactor;
|
||||
t.posY += (t.mouseY / (t.staticity / t.magnetism) - t.posY) / t.smoothFactor;
|
||||
if (
|
||||
t.translateY + t.posY < 0
|
||||
|| t.translateX + t.posX < 0
|
||||
|| t.translateX + t.posX > t.canvasWidth
|
||||
) {
|
||||
t.randomise();
|
||||
t.translateY = t.canvasHeight;
|
||||
}
|
||||
};
|
||||
|
||||
bubbleCanvas.prototype.randomise = function () {
|
||||
this.colors = ['195,53,46', '172,54,46'];
|
||||
|
||||
this.velocity = 20;
|
||||
this.smoothFactor = 50;
|
||||
this.staticity = 30;
|
||||
this.magnetism = 0.1 + 4 * Math.random();
|
||||
this.color = this.colors[Math.floor(Math.random() * this.colors.length)];
|
||||
this.alpha = this.generateDecimalBetween(5, 10) / 10;
|
||||
this.size = this.generateDecimalBetween(1, 4);
|
||||
this.posX = 0;
|
||||
this.posY = 0;
|
||||
this.movementX = this.generateDecimalBetween(-2, 2) / this.velocity;
|
||||
this.movementY = this.generateDecimalBetween(1, 20) / this.velocity;
|
||||
this.translateX = this.generateDecimalBetween(0, this.canvasWidth);
|
||||
this.translateY = this.generateDecimalBetween(0, this.canvasHeight);
|
||||
};
|
||||
|
||||
const drawBubbleCanvas = function (t) {
|
||||
this.canvas = document.getElementById(t);
|
||||
this.ctx = this.canvas.getContext('2d');
|
||||
this.dpr = window.devicePixelRatio;
|
||||
};
|
||||
|
||||
drawBubbleCanvas.prototype.start = function (bubbleDensity) {
|
||||
const t = this;
|
||||
t.bubbleDensity = bubbleDensity;
|
||||
t.setCanvasSize();
|
||||
window.addEventListener('resize', () => {
|
||||
t.setCanvasSize();
|
||||
});
|
||||
t.bubblesList = [];
|
||||
t.generateBubbles();
|
||||
t.animate();
|
||||
};
|
||||
|
||||
drawBubbleCanvas.prototype.setCanvasSize = function () {
|
||||
this.container = this.canvas.parentNode;
|
||||
this.w = this.container.offsetWidth;
|
||||
this.h = this.container.offsetHeight;
|
||||
this.wdpi = this.w * this.dpr;
|
||||
this.hdpi = this.h * this.dpr;
|
||||
this.canvas.width = this.wdpi;
|
||||
this.canvas.height = this.hdpi;
|
||||
this.canvas.style.width = this.w + 'px';
|
||||
this.canvas.style.height = this.h + 'px';
|
||||
this.ctx.scale(this.dpr, this.dpr);
|
||||
};
|
||||
|
||||
drawBubbleCanvas.prototype.animate = function () {
|
||||
const t = this;
|
||||
t.ctx.clearRect(0, 0, t.canvas.clientWidth, t.canvas.clientHeight);
|
||||
for (const e of t.bubblesList) {
|
||||
e.update();
|
||||
t.ctx.translate(e.translateX, e.translateY);
|
||||
t.ctx.beginPath();
|
||||
t.ctx.arc(e.posX, e.posY, e.size, 0, 2 * Math.PI);
|
||||
t.ctx.fillStyle = 'rgba(' + e.color + ',' + e.alpha + ')';
|
||||
t.ctx.fill();
|
||||
t.ctx.setTransform(t.dpr, 0, 0, t.dpr, 0, 0);
|
||||
}
|
||||
|
||||
requestAnimationFrame(this.animate.bind(this));
|
||||
};
|
||||
|
||||
drawBubbleCanvas.prototype.addBubble = function (t) {
|
||||
return this.bubblesList.push(t);
|
||||
};
|
||||
|
||||
drawBubbleCanvas.prototype.generateBubbles = function () {
|
||||
const t = this;
|
||||
for (let e = 0; e < t.bubbleDensity; e++) {
|
||||
t.addBubble(new bubbleCanvas(t.canvas.parentNode));
|
||||
}
|
||||
};
|
||||
|
||||
// Night sky with stars canvas
|
||||
const starCanvas = function (t) {
|
||||
this.canvas = document.getElementById(t);
|
||||
this.ctx = this.canvas.getContext('2d');
|
||||
this.dpr = window.devicePixelRatio;
|
||||
};
|
||||
|
||||
starCanvas.prototype.start = function () {
|
||||
let w;
|
||||
let h;
|
||||
|
||||
const setCanvasExtents = () => {
|
||||
w = this.canvas.parentNode.clientWidth;
|
||||
h = this.canvas.parentNode.clientHeight;
|
||||
this.canvas.width = w;
|
||||
this.canvas.height = h;
|
||||
};
|
||||
|
||||
setCanvasExtents();
|
||||
|
||||
window.addEventListener('resize', () => {
|
||||
setCanvasExtents();
|
||||
});
|
||||
|
||||
const makeStars = (count) => {
|
||||
const out = [];
|
||||
for (let i = 0; i < count; i++) {
|
||||
const s = {
|
||||
x: Math.random() * w - w / 2,
|
||||
y: Math.random() * h - h / 2,
|
||||
z: Math.random() * 1000,
|
||||
};
|
||||
out.push(s);
|
||||
}
|
||||
|
||||
return out;
|
||||
};
|
||||
|
||||
const stars = makeStars(10_000);
|
||||
|
||||
const clear = () => {
|
||||
this.ctx.fillStyle = '#212121';
|
||||
this.ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);
|
||||
};
|
||||
|
||||
const putPixel = (x, y, brightness) => {
|
||||
const intensity = brightness * 255;
|
||||
const rgb = 'rgb(' + intensity + ',' + intensity + ',' + intensity + ')';
|
||||
this.ctx.beginPath();
|
||||
this.ctx.arc(x, y, 0.9, 0, 2 * Math.PI);
|
||||
this.ctx.fillStyle = rgb;
|
||||
this.ctx.fill();
|
||||
};
|
||||
|
||||
const moveStars = (distance) => {
|
||||
const count = stars.length;
|
||||
for (let i = 0; i < count; i++) {
|
||||
const s = stars[i];
|
||||
s.z -= distance;
|
||||
while (s.z <= 1) {
|
||||
s.z += 1000;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
let previousTime;
|
||||
const init = (time) => {
|
||||
previousTime = time;
|
||||
requestAnimationFrame(tick);
|
||||
};
|
||||
|
||||
const tick = (time) => {
|
||||
const elapsed = time - previousTime;
|
||||
previousTime = time;
|
||||
|
||||
moveStars(elapsed * 0.1);
|
||||
|
||||
clear();
|
||||
|
||||
const cx = w / 2;
|
||||
const cy = h / 2;
|
||||
|
||||
const count = stars.length;
|
||||
for (let i = 0; i < count; i++) {
|
||||
const star = stars[i];
|
||||
|
||||
const x = cx + star.x / (star.z * 0.001);
|
||||
const y = cy + star.y / (star.z * 0.001);
|
||||
|
||||
if (x < 0 || x >= w || y < 0 || y >= h) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const d = star.z / 1000;
|
||||
const b = 1 - d * d;
|
||||
|
||||
putPixel(x, y, b);
|
||||
}
|
||||
|
||||
requestAnimationFrame(tick);
|
||||
};
|
||||
|
||||
requestAnimationFrame(init);
|
||||
};
|
||||
|
||||
// Start canvas animations
|
||||
window.addEventListener('load', () => {
|
||||
// Stars
|
||||
const headCanvas = new starCanvas('hero-particles');
|
||||
// Bubbles
|
||||
const footerCanvas = new drawBubbleCanvas('footer-particles');
|
||||
const mainCanvas = new drawBubbleCanvas('main-particles');
|
||||
|
||||
headCanvas.start();
|
||||
footerCanvas.start(30);
|
||||
mainCanvas.start(200);
|
||||
});
|
||||
@ -1,390 +0,0 @@
|
||||
<div align="center">
|
||||
|
||||
# YouTube Music
|
||||
|
||||
[](https://github.com/th-ch/youtube-music/releases/)
|
||||
[](https://github.com/th-ch/youtube-music/blob/master/LICENSE)
|
||||
[](https://github.com/th-ch/youtube-music/blob/master/.eslintrc.js)
|
||||
[](https://GitHub.com/th-ch/youtube-music/releases/)
|
||||
[](https://GitHub.com/th-ch/youtube-music/releases/)
|
||||
[](https://aur.archlinux.org/packages/youtube-music-bin)
|
||||
[](https://snyk.io/test/github/th-ch/youtube-music)
|
||||
|
||||
</div>
|
||||
|
||||

|
||||
|
||||
|
||||
<div align="center">
|
||||
<a href="https://github.com/th-ch/youtube-music/releases/latest">
|
||||
<img src="/web/youtube-music.svg" width="400" height="100" alt="YouTube Music SVG">
|
||||
</a>
|
||||
</div>
|
||||
|
||||
**Electron wrapper de YouTube Music con las siguientes características:**
|
||||
|
||||
- Apariencia y sensación nativa, tiene como objetivo mantener la interfaz original
|
||||
- Framework para plugins personalizados: cambia YouTube Music según tus necesidades (estilo, contenido, funciones), habilita/deshabilita plugins con un solo clic
|
||||
|
||||
## Imagen de demostración
|
||||
|
||||
| Pantalla del reproductor (color del álbum como tema y luz ambiental) |
|
||||
|:---------------------------------------------------------------------------------------------------------:|
|
||||
||
|
||||
|
||||
## Contenido
|
||||
|
||||
- [Características](#características)
|
||||
- [Plugins disponibles](#plugins-disponibles)
|
||||
- [Traducción](#traducción)
|
||||
- [Descarga](#descarga)
|
||||
- [Arch Linux](#arch-linux)
|
||||
- [macOS](#macos)
|
||||
- [Windows](#windows)
|
||||
- [Cómo instalar sin conexión a internet? (en Windows)](#cómo-instalar-sin-conexión-a-internet-en-windows)
|
||||
- [Temas](#temas)
|
||||
- [Dev](#dev)
|
||||
- [Crea tus propios plugins](#crea-tus-propios-plugins)
|
||||
- [Creación de un plugin](#creación-de-un-plugin)
|
||||
- [Casos de uso comunes](#casos-de-uso-comunes)
|
||||
- [Compilar](#compilar)
|
||||
- [Vista previa de producción](#vista-previa-de-producción)
|
||||
- [Tests](#tests)
|
||||
- [Licencia](#licencia)
|
||||
- [Preguntas frecuentes](#preguntas-frecuentes)
|
||||
|
||||
## Características:
|
||||
|
||||
- **Confirmación automática al pausar** (Siempre habilitado): desactiva
|
||||
el mensaje emergente ["¿Continuar reproduciendo?"](https://user-images.githubusercontent.com/61631665/129977894-01c60740-7ec6-4bf0-9a2c-25da24491b0e.png)
|
||||
que pausa la música después de cierto tiempo
|
||||
|
||||
- Y más ...
|
||||
|
||||
## Plugins disponibles:
|
||||
|
||||
- **Bloqueador de Anuncios**: Bloquea todos los anuncios y rastreadores de forma predeterminada
|
||||
|
||||
- **Acciones de Álbum**: Agrega botones de deshacer No me gusta, No me gusta, Me gusta, y Deshacer me gusta a todas las canciones de una lista de reproducción o álbum
|
||||
|
||||
- **Tema de Color del Álbum**: Aplica un tema dinámico y efectos visuales basados en la paleta de colores del álbum
|
||||
|
||||
- **Modo Ambiente**: Aplica un efecto de iluminación proyectando colores suaves del video en el fondo de tu pantalla
|
||||
|
||||
- **Compresor de Audio**: Aplica compresión al audio (reduce el volumen de las partes más fuertes de la señal y aumenta el
|
||||
volumen de las partes más suaves)
|
||||
|
||||
- **Barra de Navegación Difuminada**: hace que la barra de navegación sea transparente y borrosa
|
||||
|
||||
- **Omitir Restricciones de Edades**: omite la verificación de edad de YouTube
|
||||
|
||||
- **Selector de Subtítulos**: Habilita los subtítulos
|
||||
|
||||
- **Barra Lateral Compacta**: Siempre muestra la barra lateral en modo compacto
|
||||
|
||||
- **Crossfade**: Transición suave entre canciones
|
||||
|
||||
- **Desactivar Reproducción Automática**: Hace que cada canción comience en modo "pausado"
|
||||
|
||||
- **[Discord](https://discord.com/) Rich Presence**: Muestra a tus amigos lo que estás escuchando
|
||||
con [Rich Presence](https://user-images.githubusercontent.com/28219076/104362104-a7a0b980-5513-11eb-9744-bb89eabe0016.png)
|
||||
|
||||
- **Descargador**: Descarga
|
||||
MP3 [directamente desde la interfaz](https://user-images.githubusercontent.com/61631665/129977677-83a7d067-c192-45e1-98ae-b5a4927393be.png) [(youtube-dl)](https://github.com/ytdl-org/youtube-dl)
|
||||
|
||||
- **Volumen Exponencial**: Hace que el control de volumen
|
||||
sea [exponencial](https://greasyfork.org/en/scripts/397686-youtube-music-fix-volume-ratio/) para facilitar la
|
||||
selección de volúmenes más bajos
|
||||
|
||||
- **Menú en la Aplicación**: [da a las barras un aspecto elegante y oscuro](https://user-images.githubusercontent.com/78568641/112215894-923dbf00-8c29-11eb-95c3-3ce15db27eca.png)
|
||||
|
||||
> (consulta [esta publicación](https://github.com/th-ch/youtube-music/issues/410#issuecomment-952060709) si tienes problemas
|
||||
para acceder al menú después de habilitar este plugin y la opción hide-menu)
|
||||
|
||||
- **Scrobbler**: Agrega soporte para scrobbling en [Last.fm](https://www.last.fm/) y [ListenBrainz](https://listenbrainz.org/)
|
||||
|
||||
- **Lumia Stream**: Agrega soporte para [Lumia Stream](https://lumiastream.com/)
|
||||
|
||||
- **Letras Genius**: Agrega soporte de letras para la mayoría de las canciones
|
||||
|
||||
- **Music Together**: Comparte una lista de reproducción con otros. Cuando el anfitrión reproduce una canción, todos los demás escucharán la misma canción
|
||||
|
||||
- **Navegación**: Flechas de siguiente/anterior integradas directamente en la interfaz, como en tu navegador favorito
|
||||
|
||||
- **Sin Inicio de Sesión de Google**: Elimina los botones y enlaces de inicio de sesión de Google de la interfaz
|
||||
|
||||
- **Notificaciones**: Muestra una notificación cuando comienza una canción
|
||||
a reproducirse ([notificaciones interactivas](https://user-images.githubusercontent.com/78568641/114102651-63ce0e00-98d0-11eb-9dfe-c5a02bb54f9c.png)
|
||||
están disponibles en Windows)
|
||||
|
||||
- **Picture-in-picture**: permite cambiar la aplicación al modo picture-in-picture
|
||||
|
||||
- **Velocidad de Reproducción**: Escucha rápido, escucha
|
||||
lento! [Agrega un deslizador que controla la velocidad de reproducción de las canciones](https://user-images.githubusercontent.com/61631665/129976003-e55db5ba-bf42-448c-a059-26a009775e68.png)
|
||||
|
||||
- **Volumen Preciso**: Controla el volumen de forma precisa utilizando la rueda del mouse/atajos de teclado, con un HUD personalizado y pasos de volumen personalizables
|
||||
|
||||
- **Atajos (& MPRIS)**: Permite configurar atajos globales para la reproducción (reproducir/pausar/siguiente/anterior) +
|
||||
desactivar [osd multimedia](https://user-images.githubusercontent.com/84923831/128601225-afa38c1f-dea8-4209-9f72-0f84c1dd8b54.png)
|
||||
al anular las teclas multimedia + habilitar Ctrl/CMD + F para buscar + habilitar el soporte mpris de Linux para
|
||||
teclas multimedia + [atajos personalizados](https://github.com/Araxeus/youtube-music/blob/1e591d6a3df98449bcda6e63baab249b28026148/providers/song-controls.js#L13-L50)
|
||||
para [usuarios avanzados](https://github.com/th-ch/youtube-music/issues/106#issuecomment-952156902)
|
||||
|
||||
- **Saltar Canción no Gustada**: Salta las canciones que no te gustan
|
||||
|
||||
- **Saltar Silencios**: Salta automáticamente las secciones de silencio
|
||||
|
||||
- [**SponsorBlock**](https://github.com/ajayyy/SponsorBlock): Salta automáticamente las partes que no son de música, como la introducción/final o
|
||||
partes de videos musicales donde no se reproduce la canción
|
||||
|
||||
- **Control Multimedia en la Barra de Tareas**: Controla la reproducción desde
|
||||
la [barra de tareas de Windows](https://user-images.githubusercontent.com/78568641/111916130-24a35e80-8a82-11eb-80c8-5021c1aa27f4.png)
|
||||
|
||||
- **TouchBar**: Diseño personalizado de TouchBar para macOS
|
||||
|
||||
- **Tuna OBS**: Integración con el complemento [Tuna](https://obsproject.com/forum/resources/tuna.843/) de [OBS](https://obsproject.com/)
|
||||
|
||||
- **Cambiador de Calidad de Video**: Permite cambiar la calidad del video con
|
||||
un [botón](https://user-images.githubusercontent.com/78568641/138574366-70324a5e-2d64-4f6a-acdd-dc2a2b9cecc5.png) en
|
||||
la superposición de video
|
||||
|
||||
- **Alternar Video**: Agrega
|
||||
un [botón](https://user-images.githubusercontent.com/28893833/173663950-63e6610e-a532-49b7-9afa-54cb57ddfc15.png) para
|
||||
alternar entre el modo de video/canción. también puede eliminar opcionalmente toda la pestaña de video
|
||||
|
||||
- **Visualizador**: Diferentes visualizadores de música
|
||||
|
||||
## Traducción
|
||||
|
||||
Puedes ayudar con la traducción en [Hosted Weblate](https://hosted.weblate.org/projects/youtube-music/).
|
||||
|
||||
<a href="https://hosted.weblate.org/engage/youtube-music/">
|
||||
<img src="https://hosted.weblate.org/widget/youtube-music/i18n/multi-auto.svg" alt="estado de traducción" />
|
||||
<img src="https://hosted.weblate.org/widget/youtube-music/i18n/287x66-black.png" alt="estado de traducción 2" />
|
||||
</a>
|
||||
|
||||
## Descarga
|
||||
|
||||
Puedes consultar la [última versión](https://github.com/th-ch/youtube-music/releases/latest) para encontrar rápidamente la versión más reciente.
|
||||
|
||||
### Arch Linux
|
||||
|
||||
Instala el paquete [`youtube-music-bin`](https://aur.archlinux.org/packages/youtube-music-bin) desde AUR. Para obtener instrucciones de instalación de AUR, consulta esta [página del wiki](https://wiki.archlinux.org/index.php/Arch_User_Repository#Installing_packages).
|
||||
|
||||
### macOS
|
||||
|
||||
Puedes instalar la aplicación usando Homebrew (consulta la [definición de cask](https://github.com/th-ch/homebrew-youtube-music)):
|
||||
|
||||
```bash
|
||||
brew install th-ch/youtube-music/youtube-music
|
||||
```
|
||||
|
||||
Si instalas la aplicación manualmente y obtienes un error "está dañado y no se puede abrir" al iniciar la aplicación, ejecuta lo siguiente en la Terminal:
|
||||
|
||||
```bash
|
||||
xattr -cr /Applications/YouTube\ Music.app
|
||||
```
|
||||
|
||||
### Windows
|
||||
|
||||
Puedes usar el [administrador de paquetes Scoop](https://scoop.sh) para instalar el paquete `youtube-music` desde
|
||||
el [`extras` bucket](https://github.com/ScoopInstaller/Extras).
|
||||
|
||||
```bash
|
||||
scoop bucket add extras
|
||||
scoop install extras/youtube-music
|
||||
```
|
||||
|
||||
Alternativamente, puedes usar [Winget](https://learn.microsoft.com/en-us/windows/package-manager/winget/), el administrador de paquetes CLI oficial de Windows 11 para instalar el paquete `th-ch.YouTubeMusic`.
|
||||
|
||||
*Nota: Microsoft Defender SmartScreen podría bloquear la instalación ya que proviene de un "editor desconocido". Esto también esválido para la instalación manual al intentar ejecutar el ejecutable (.exe) después de una descarga manual aquí en GitHub (mismo archivo).*
|
||||
|
||||
```bash
|
||||
winget install th-ch.YouTubeMusic
|
||||
```
|
||||
|
||||
#### Cómo instalar sin conexión a Internet? (en Windows)
|
||||
|
||||
- Descarga el archivo `*.nsis.7z` para _la arquitectura de tu dispositivo_ en la [página de lanzamientos](https://github.com/th-ch/youtube-music/releases/latest).
|
||||
- `x64` para Windows de 64 bits
|
||||
- `ia32` para Windows de 32 bits
|
||||
- `arm64` para Windows ARM64
|
||||
- Descarga el instalador en la página de lanzamientos. (`*-Setup.exe`)
|
||||
- Colócalos en el **mismo directorio**.
|
||||
- Ejecuta el instalador.
|
||||
|
||||
## Temas
|
||||
|
||||
Puedes cargar archivos CSS para cambiar la apariencia de la aplicación (Opciones > Ajustes visuales > Tema).
|
||||
|
||||
Algunos temas predefinidos están disponibles en https://github.com/kerichdev/themes-for-ytmdesktop-player.
|
||||
|
||||
## Dev
|
||||
|
||||
```bash
|
||||
git clone https://github.com/th-ch/youtube-music
|
||||
cd youtube-music
|
||||
pnpm install --frozen-lockfile
|
||||
pnpm dev
|
||||
```
|
||||
|
||||
## Crea tus propios plugins
|
||||
|
||||
Usando plugins, puedes:
|
||||
|
||||
- manipular la aplicación - se pasa el `BrowserWindow` de electron al controlador del plugin
|
||||
- cambiar la interfaz manipulando el HTML/CSS
|
||||
|
||||
### Creación de un plugin
|
||||
|
||||
Crea una carpeta en `src/plugins/NOMBRE-DEL-PLUGIN`:
|
||||
|
||||
- `index.ts`: el archivo principal del plugin
|
||||
```typescript
|
||||
import style from './style.css?inline'; // importar estilo como inline
|
||||
|
||||
import { createPlugin } from '@/utils';
|
||||
|
||||
export default createPlugin({
|
||||
name: "Plugin Label",
|
||||
restartNeeded: true, // si el valor es true, ytmusic muestra el diálogo de reinicio
|
||||
config: {
|
||||
enabled: false,
|
||||
}, // tu configuración personalizada
|
||||
stylesheets: [style], // tu estilo personalizado,
|
||||
menu: async ({ getConfig, setConfig }) => {
|
||||
// Todos los métodos *Config están envueltos en Promise<T>
|
||||
const config = await getConfig();
|
||||
return [
|
||||
{
|
||||
label: "menu",
|
||||
submenu: [1, 2, 3].map((value) => ({
|
||||
label: `value ${value}`,
|
||||
type: "radio",
|
||||
checked: config.value === value,
|
||||
click() {
|
||||
setConfig({ value });
|
||||
},
|
||||
})),
|
||||
},
|
||||
];
|
||||
},
|
||||
backend: {
|
||||
start({ window, ipc }) {
|
||||
window.maximize();
|
||||
|
||||
// puedes comunicarte con el plugin de renderizado
|
||||
ipc.handle("some-event", () => {
|
||||
return "hello";
|
||||
});
|
||||
},
|
||||
// se activa cuando cambia la configuración
|
||||
onConfigChange(newConfig) { /* ... */ },
|
||||
// se activa cuando se desactiva el plugin
|
||||
stop(context) { /* ... */ },
|
||||
},
|
||||
renderer: {
|
||||
async start(context) {
|
||||
console.log(await context.ipc.invoke("some-event"));
|
||||
},
|
||||
// Solo disponible en el plugin de renderizado
|
||||
onPlayerApiReady(api: YoutubePlayer, context: RendererContext) {
|
||||
// establecer la configuración del plugin fácilmente
|
||||
context.setConfig({ myConfig: api.getVolume() });
|
||||
},
|
||||
onConfigChange(newConfig) { /* ... */ },
|
||||
stop(_context) { /* ... */ },
|
||||
},
|
||||
preload: {
|
||||
async start({ getConfig }) {
|
||||
const config = await getConfig();
|
||||
},
|
||||
onConfigChange(newConfig) {},
|
||||
stop(_context) {},
|
||||
},
|
||||
});
|
||||
|
||||
```
|
||||
|
||||
### Casos de uso comunes
|
||||
|
||||
- inyectar CSS personalizado: crea un archivo `style.css` en la misma carpeta y luego:
|
||||
|
||||
```typescript
|
||||
// index.ts
|
||||
import style from './style.css?inline'; // importar estilo como inline
|
||||
|
||||
import { createPlugin } from '@/utils';
|
||||
|
||||
export default createPlugin({
|
||||
name: 'Plugin Label',
|
||||
restartNeeded: true, // si el valor es true, ytmusic mostrará el diálogo de reinicio
|
||||
config: {
|
||||
enabled: false,
|
||||
}, // tu configuración personalizada
|
||||
stylesheets: [style], // tu estilo personalizado
|
||||
renderer() {} // define el hook del renderizador
|
||||
});
|
||||
```
|
||||
|
||||
- Si quieres cambiar el HTML:
|
||||
|
||||
```typescript
|
||||
import { createPlugin } from '@/utils';
|
||||
|
||||
export default createPlugin({
|
||||
name: 'Plugin Label',
|
||||
restartNeeded: true, // si el valor es true, ytmusic mostrará el diálogo de reinicio
|
||||
config: {
|
||||
enabled: false,
|
||||
}, // tu configuración personalizada
|
||||
renderer() {
|
||||
// Elimina el botón de inicio de sesión
|
||||
document.querySelector(".sign-in-link.ytmusic-nav-bar").remove();
|
||||
} // define el hook del renderizador
|
||||
});
|
||||
```
|
||||
|
||||
- comunicación entre el front y el back: se puede hacer utilizando el módulo ipcMain de electron. Ver archivo `index.ts` y
|
||||
ejemplo en el plugin `sponsorblock`.
|
||||
|
||||
## Compilar
|
||||
|
||||
1. Clonar el repositorio
|
||||
2. Seguir [esta guía](https://pnpm.io/es/installation) para instalar `pnpm`
|
||||
3. Ejecutar `pnpm install --frozen-lockfile` para instalar las dependencias
|
||||
4. Ejecutar `pnpm build:OS`
|
||||
|
||||
- `pnpm dist:win` - Windows
|
||||
- `pnpm dist:linux` - Linux (amd64)
|
||||
- `pnpm dist:linux:deb-arm64` - Linux (arm64 para Debian)
|
||||
- `pnpm dist:linux:rpm-arm64` - Linux (arm64 para Fedora)
|
||||
- `pnpm dist:mac` - macOS (amd64)
|
||||
- `pnpm dist:mac:arm64` - macOS (arm64)
|
||||
|
||||
Construye la aplicación para macOS, Linux y Windows,
|
||||
utilizando [electron-builder](https://github.com/electron-userland/electron-builder).
|
||||
|
||||
## Vista previa de producción
|
||||
|
||||
```bash
|
||||
pnpm start
|
||||
```
|
||||
|
||||
## Tests
|
||||
|
||||
```bash
|
||||
pnpm test
|
||||
```
|
||||
|
||||
Utiliza [Playwright](https://playwright.dev/) para probar la aplicación.
|
||||
|
||||
## Licencia
|
||||
|
||||
MIT © [th-ch](https://github.com/th-ch/youtube-music)
|
||||
|
||||
## Preguntas frecuentes
|
||||
|
||||
### ¿Por qué no se muestra el menú de aplicaciones?
|
||||
|
||||
Si la opción `Ocultar menú` está activada - puedes mostrar el menú con la tecla <kbd>alt</kbd> (o <kbd>\`</kbd> [acento grave] si estás utilizando el plugin in-app-menu)
|
||||
@ -1,388 +0,0 @@
|
||||
<div align="center">
|
||||
|
||||
# YouTube Music
|
||||
|
||||
[](https://github.com/th-ch/youtube-music/releases/)
|
||||
[](https://github.com/th-ch/youtube-music/blob/master/LICENSE)
|
||||
[](https://github.com/th-ch/youtube-music/blob/master/.eslintrc.js)
|
||||
[](https://GitHub.com/th-ch/youtube-music/releases/)
|
||||
[](https://GitHub.com/th-ch/youtube-music/releases/)
|
||||
[](https://aur.archlinux.org/packages/youtube-music-bin)
|
||||
[](https://snyk.io/test/github/th-ch/youtube-music)
|
||||
|
||||
</div>
|
||||
|
||||

|
||||
|
||||
|
||||
<div align="center">
|
||||
<a href="https://github.com/th-ch/youtube-music/releases/latest">
|
||||
<img src="https://github.com/th-ch/youtube-music/raw/master/web/youtube-music.svg" width="400" height="100" alt="SVG YouTube Music">
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
**Enveloppe Electron autour de YouTube Music offrant :**
|
||||
|
||||
- Aspect & sensation naturels, vise à conserver l'interface originale
|
||||
- Cadre pour les plugins personnalisés : modifiez YouTube Music selon vos besoins (style, contenu, fonctionnalités), activez/désactivez les plugins en
|
||||
un clic
|
||||
|
||||
## Image de démonstration
|
||||
|
||||
| Écran du lecteur (thème de couleur de l'album & lumière ambiante) |
|
||||
|:---------------------------------------------------------------------------------------------------------:|
|
||||
||
|
||||
|
||||
## Contenu
|
||||
|
||||
- [Fonctionnalités](#fonctionnalités)
|
||||
- [Plugins disponibles](#plugins-disponibles)
|
||||
- [Traduction](#traduction)
|
||||
- [Téléchargement](#téléchargement)
|
||||
- [Arch Linux](#arch-linux)
|
||||
- [MacOS](#macos)
|
||||
- [Windows](#windows)
|
||||
- [Comment installer sans connexion réseau ? (sous Windows)](#comment-installer-sans-connexion-réseau-sous-windows)
|
||||
- [Thèmes](#thèmes)
|
||||
- [Dev](#dev)
|
||||
- [Créez vos propres plugins](#créez-vos-propres-plugins)
|
||||
- [Créer un plugin](#créer-un-plugin)
|
||||
- [Cas d'utilisation courants](#cas-dutilisation-courants)
|
||||
- [Construction](#construction)
|
||||
- [Aperçu de la production](#aperçu-de-la-production)
|
||||
- [Tests](#tests)
|
||||
- [Licence](#licence)
|
||||
- [FAQ](#faq)
|
||||
|
||||
## Fonctionnalités :
|
||||
|
||||
- **Confirmation automatique lors de la pause** (Toujours activé) : désactiver
|
||||
la pop-up ["Continuer à regarder ?"](https://user-images.githubusercontent.com/61631665/129977894-01c60740-7ec6-4bf0-9a2c-25da24491b0e.png)
|
||||
qui pause la musique après un certain temps
|
||||
|
||||
- Et plus encore ...
|
||||
|
||||
## Plugins disponibles :
|
||||
|
||||
- **Bloqueur de publicités** : Bloquez toutes les publicités et le suivi dès le départ
|
||||
|
||||
- **Actions d'album** : Ajoute des boutons Je n'aime pas, Dislike, J'aime, et Unlike pour appliquer cela à toutes les chansons dans une playlist ou un album
|
||||
|
||||
- **Thème de couleur d'album** : Applique un thème dynamique et des effets visuels basés sur la palette de couleurs de l'album
|
||||
|
||||
- **Mode Ambiant** : Applique un effet d'éclairage en projetant des couleurs douces de la vidéo, sur l'arrière-plan de votre écran
|
||||
|
||||
- **Compresseur Audio** : Appliquer une compression audio (diminue le volume des parties les plus fortes du signal et augmente le
|
||||
volume des parties les plus douces)
|
||||
|
||||
- **Barre de navigation floue** : rend la barre de navigation transparente et floue
|
||||
|
||||
- **Contournement des restrictions d'âge** : contourner la vérification d'âge de YouTube
|
||||
|
||||
- **Sélecteur de sous-titres** : Activer les sous-titres
|
||||
|
||||
- **Barre latérale compacte** : Toujours définir la barre latérale en mode compact
|
||||
|
||||
- **Fondu enchaîné** : Fondu enchaîné entre les chansons
|
||||
|
||||
- **Désactiver la lecture automatique** : Fait démarrer chaque chanson en mode "pause"
|
||||
|
||||
- **[Discord](https://discord.com/) Présence riche** : Montrez à vos amis ce que vous écoutez
|
||||
avec [Présence riche](https://user-images.githubusercontent.com/28219076/104362104-a7a0b980-5513-11eb-9744-bb89eabe0016.png)
|
||||
|
||||
- **Téléchargeur** : télécharge des
|
||||
MP3 [directement depuis l'interface](https://user-images.githubusercontent.com/61631665/129977677-83a7d067-c192-45e1-98ae-b5a4927393be.png) [(youtube-dl)](https://github.com/ytdl-org/youtube-dl)
|
||||
|
||||
- **Volume exponentiel** : Rend le curseur de volume
|
||||
[exponentiel](https://greasyfork.org/en/scripts/397686-youtube-music-fix-volume-ratio/) afin qu'il soit plus facile de
|
||||
sélectionner des volumes plus bas
|
||||
|
||||
- **Menu In-App** : [donne aux barres un aspect chic et sombre](https://user-images.githubusercontent.com/78568641/112215894-923dbf00-8c29-11eb-95c3-3ce15db27eca.png)
|
||||
|
||||
> (voir [ce poste](https://github.com/th-ch/youtube-music/issues/410#issuecomment-952060709) si vous avez des problèmes
|
||||
pour accéder au menu après avoir activé ce plugin et l'option masquer-menu)
|
||||
|
||||
- **Scrobbler** : Ajoute le support de scrobbling pour [Last.fm](https://www.last.fm/) et [ListenBrainz](https://listenbrainz.org/)
|
||||
|
||||
- **Lumia Stream** : Ajoute le support de [Lumia Stream](https://lumiastream.com/)
|
||||
|
||||
- **Lyrics Genius** : Ajoute le support des paroles pour la plupart des chansons
|
||||
|
||||
- **Musique Ensemble** : Partagez une playlist avec d'autres. Lorsque l'hôte joue une chanson, tout le monde entendra la même chanson
|
||||
|
||||
- **Navigation** : Flèches de navigation Suivant/Retour directement intégrées dans l'interface, comme dans votre navigateur préféré
|
||||
|
||||
- **Pas de connexion Google** : Supprime les boutons et les liens de connexion Google de l'interface
|
||||
|
||||
- **Notifications** : Affiche une notification lorsqu'une chanson commence à jouer ([notifications interactives](https://user-images.githubusercontent.com/78568641/114102651-63ce0e00-98d0-11eb-9dfe-c5a02bb54f9c.png)
|
||||
sont disponibles sur Windows)
|
||||
|
||||
- **Image dans l'image** : permet de passer l'application en mode image dans l'image
|
||||
|
||||
- **Vitesse de lecture** : Écoutez rapidement, écoutez lentement ! [Ajoute un curseur qui contrôle la vitesse des chansons](https://user-images.githubusercontent.com/61631665/129976003-e55db5ba-bf42-448c-a059-26a009775e68.png)
|
||||
|
||||
- **Volume précis** : Contrôlez le volume précisément en utilisant la molette de la souris/raccourcis clavier, avec un hud personnalisé et des étapes de volume personnalisables
|
||||
|
||||
- **Raccourcis (& MPRIS)** : Permet de définir des raccourcis globaux pour la lecture (lecture/pause/suivant/précédent) +
|
||||
désactive [osd média](https://user-images.githubusercontent.com/84923831/128601225-afa38c1f-dea8-4209-9f72-0f84c1dd8b54.png)
|
||||
en remplaçant les touches multimédias + activer Ctrl/CMD + F pour rechercher + activer le support mpris linux pour
|
||||
les touches multimédias + [raccourcis personnalisés](https://github.com/Araxeus/youtube-music/blob/1e591d6a3df98449bcda6e63baab249b28026148/providers/song-controls.js#L13-L50)
|
||||
pour [utilisateurs avancés](https://github.com/th-ch/youtube-music/issues/106#issuecomment-952156902)
|
||||
|
||||
- **Passer la chanson non aimée** : passe les chansons non aimées
|
||||
|
||||
- **Passer les silences** : passe automatiquement les sections silencieuses
|
||||
|
||||
- [**SponsorBlock**](https://github.com/ajayyy/SponsorBlock) : Saute automatiquement les parties non musicales comme les intros/outros ou
|
||||
les parties des clips vidéo où la chanson n'est pas jouée
|
||||
|
||||
- **Contrôle multimédia de la barre des tâches** : Contrôlez la lecture depuis
|
||||
votre [barre des tâches Windows](https://user-images.githubusercontent.com/78568641/111916130-24a35e80-8a82-11eb-80c8-5021c1aa27f4.png)
|
||||
|
||||
- **TouchBar** : Disposition personnalisée de la TouchBar pour macOS
|
||||
|
||||
- **Tuna OBS** : Intégration avec le
|
||||
plugin [Tuna](https://obsproject.com/forum/resources/tuna.843/) d'[OBS](https://obsproject.com/)
|
||||
|
||||
- **Changeur de qualité vidéo** : Permet de changer la qualité vidéo avec
|
||||
un [bouton](https://user-images.githubusercontent.com/78568641/138574366-70324a5e-2d64-4f6a-acdd-dc2a2b9cecc5.png) sur
|
||||
l'overlay vidéo
|
||||
|
||||
- **Bascule vidéo** : Ajoute
|
||||
un [bouton](https://user-images.githubusercontent.com/28893833/173663950-63e6610e-a532-49b7-9afa-54cb57ddfc15.png) pour
|
||||
basculer entre le mode Vidéo/Chanson. peut également supprimer l'onglet vidéo entier
|
||||
|
||||
- **Visualiseur** : Différents visualiseurs musicaux
|
||||
|
||||
## Traduction
|
||||
|
||||
Vous pouvez aider à la traduction sur [Hosted Weblate](https://hosted.weblate.org/projects/youtube-music/).
|
||||
|
||||
<a href="https://hosted.weblate.org/engage/youtube-music/">
|
||||
<img src="https://hosted.weblate.org/widget/youtube-music/i18n/multi-auto.svg" alt="statut de la traduction" />
|
||||
<img src="https://hosted.weblate.org/widget/youtube-music/i18n/287x66-black.png" alt="statut de la traduction 2" />
|
||||
</a>
|
||||
|
||||
## Téléchargement
|
||||
|
||||
Vous pouvez consulter la [dernière sortie](https://github.com/th-ch/youtube-music/releases/latest) pour trouver rapidement la
|
||||
dernière version.
|
||||
|
||||
### Arch Linux
|
||||
|
||||
Installez le paquet [`youtube-music-bin`](https://aur.archlinux.org/packages/youtube-music-bin) depuis l'AUR. Pour les instructions d'installation de l'AUR, consultez
|
||||
cette [page wiki](https://wiki.archlinux.org/index.php/Arch_User_Repository#Installing_packages).
|
||||
|
||||
### MacOS
|
||||
|
||||
Vous pouvez installer l'application en utilisant Homebrew (voir la [définition du fût](https://github.com/th-ch/homebrew-youtube-music)) :
|
||||
|
||||
```bash
|
||||
brew install th-ch/youtube-music/youtube-music
|
||||
```
|
||||
|
||||
Si vous installez l'application manuellement et obtenez une erreur "est endommagé et ne peut pas être ouvert." lors du lancement de l'application, exécutez ce qui suit dans le Terminal :
|
||||
|
||||
```bash
|
||||
xattr -cr /Applications/YouTube\ Music.app
|
||||
```
|
||||
|
||||
### Windows
|
||||
|
||||
Vous pouvez utiliser le [gestionnaire de paquets Scoop](https://scoop.sh) pour installer le paquet `youtube-music` depuis le [seau `extras`](https://github.com/ScoopInstaller/Extras).
|
||||
|
||||
```bash
|
||||
scoop bucket add extras
|
||||
scoop install extras/youtube-music
|
||||
```
|
||||
|
||||
Alternativement, vous pouvez utiliser [Winget](https://learn.microsoft.com/fr-fr/windows/package-manager/winget/), le gestionnaire de paquets CLI officiel de Windows 11, pour installer le paquet `th-ch.YouTubeMusic`.
|
||||
|
||||
*Note : Microsoft Defender SmartScreen pourrait bloquer l'installation car elle provient d'un "éditeur inconnu". Ceci est également vrai pour l'installation manuelle lors de l'essai d'exécution de l'exécutable (.exe) après un téléchargement manuel ici sur GitHub (même fichier).*
|
||||
|
||||
```bash
|
||||
winget install th-ch.YouTubeMusic
|
||||
```
|
||||
|
||||
#### Comment installer sans connexion réseau ? (sous Windows)
|
||||
|
||||
- Téléchargez le fichier `*.nsis.7z` pour _l'architecture de votre appareil_ sur la [page des versions](https://github.com/th-ch/youtube-music/releases/latest).
|
||||
- `x64` pour Windows 64 bits
|
||||
- `ia32` pour Windows 32 bits
|
||||
- `arm64` pour Windows ARM64
|
||||
- Téléchargez l'installeur sur la page des versions. (`*-Setup.exe`)
|
||||
- Placez-les dans le **même dossier**.
|
||||
- Exécutez l'installeur.
|
||||
|
||||
## Thèmes
|
||||
|
||||
Vous pouvez charger des fichiers CSS pour changer l'apparence de l'application (Options > Ajustements visuels > Thèmes).
|
||||
|
||||
Certains thèmes prédéfinis sont disponibles sur [https://github.com/kerichdev/themes-for-ytmdesktop-player](https://github.com/kerichdev/themes-for-ytmdesktop-player).
|
||||
|
||||
## Dev
|
||||
|
||||
```bash
|
||||
git clone https://github.com/th-ch/youtube-music
|
||||
cd youtube-music
|
||||
pnpm install --frozen-lockfile
|
||||
pnpm dev
|
||||
```
|
||||
## Créez vos propres plugins
|
||||
|
||||
En utilisant des plugins, vous pouvez :
|
||||
|
||||
- manipuler l'application - la `BrowserWindow` d'Electron est passée au gestionnaire de plugin
|
||||
- changer le front en manipulant le HTML/CSS
|
||||
|
||||
### Créer un plugin
|
||||
|
||||
Créez un dossier dans `src/plugins/NOM-DE-VOTRE-PLUGIN` :
|
||||
|
||||
- `index.ts` : le fichier principal du plugin
|
||||
```typescript
|
||||
import style from './style.css?inline'; // importez le style comme inline
|
||||
|
||||
import { createPlugin } from '@/utils';
|
||||
|
||||
export default createPlugin({
|
||||
name: 'Étiquette du plugin',
|
||||
restartNeeded: true, // si la valeur est vraie, ytmusic affichera la boîte de dialogue de redémarrage
|
||||
config: {
|
||||
enabled: false,
|
||||
}, // votre configuration personnalisée
|
||||
stylesheets: [style], // votre style personnalisé,
|
||||
menu: async ({ getConfig, setConfig }) => {
|
||||
// Toutes les méthodes *Config sont des promesses encapsulées <T>
|
||||
const config = await getConfig();
|
||||
return [
|
||||
{
|
||||
label: 'menu',
|
||||
submenu: [1, 2, 3].map((value) => ({
|
||||
label: `valeur ${value}`,
|
||||
type: 'radio',
|
||||
checked: config.value === value,
|
||||
click() {
|
||||
setConfig({ value });
|
||||
},
|
||||
})),
|
||||
},
|
||||
];
|
||||
},
|
||||
backend: {
|
||||
start({ window, ipc }) {
|
||||
window.maximize();
|
||||
|
||||
// vous pouvez communiquer avec le plugin du rendu
|
||||
ipc.handle('un événement', () => {
|
||||
return 'bonjour';
|
||||
});
|
||||
},
|
||||
// il est déclenché lorsque la configuration change
|
||||
onConfigChange(newConfig) { /* ... */ },
|
||||
// il est déclenché lorsque le plugin est désactivé
|
||||
stop(context) { /* ... */ },
|
||||
},
|
||||
renderer: {
|
||||
async start(context) {
|
||||
console.log(await context.ipc.invoke('un événement'));
|
||||
},
|
||||
// Seul le crochet disponible pour le rendu
|
||||
onPlayerApiReady(api: YoutubePlayer, context: RendererContext) {
|
||||
// définir facilement la configuration du plugin
|
||||
context.setConfig({ myConfig: api.getVolume() });
|
||||
},
|
||||
onConfigChange(newConfig) { /* ... */ },
|
||||
stop(_context) { /* ... */ },
|
||||
},
|
||||
preload: {
|
||||
async start({ getConfig }) {
|
||||
const config is obtained by `getConfig` method.
|
||||
},
|
||||
onConfigChange(newConfig) {},
|
||||
stop(_context) {},
|
||||
},
|
||||
});
|
||||
|
||||
```
|
||||
|
||||
### Cas d'utilisation courants
|
||||
|
||||
- **Injection de CSS personnalisé** : créez un fichier `style.css` dans le même dossier puis :
|
||||
|
||||
```typescript
|
||||
// index.ts
|
||||
import style from './style.css?inline'; // importez le style comme en ligne
|
||||
|
||||
import { createPlugin } from '@/utils';
|
||||
|
||||
export default createPlugin({
|
||||
name: 'Étiquette du plugin',
|
||||
restartNeeded: true, // si la valeur est vraie, ytmusic affichera la boîte de dialogue de redémarrage
|
||||
config: {
|
||||
enabled: false,
|
||||
}, // votre configuration personnalisée
|
||||
stylesheets: [style], // votre style personnalisé
|
||||
renderer() {} // définissez le crochet de rendu
|
||||
});
|
||||
```
|
||||
|
||||
- **Si vous voulez modifier le HTML** :
|
||||
|
||||
```typescript
|
||||
import { createPlugin } from '@/utils';
|
||||
|
||||
export default createPlugin({
|
||||
name: 'Étiquette du plugin',
|
||||
restartNeeded: true, // si la valeur est vraie, ytmusic affichera la boîte de dialogue de redémarrage
|
||||
config: {
|
||||
enabled: false,
|
||||
}, // votre configuration personnalisée
|
||||
renderer() {
|
||||
// Supprimez le bouton de connexion
|
||||
document.querySelector(".sign-in-link.ytmusic-nav-bar").remove();
|
||||
} // définissez le crochet de rendu
|
||||
});
|
||||
|
||||
```
|
||||
|
||||
- **Communication entre le front et le back** : cela peut se faire en utilisant le module ipcMain d'Electron. Voir le fichier `index.ts` et l'exemple dans le plugin `sponsorblock`.
|
||||
|
||||
## Construction
|
||||
|
||||
1. Clonez le dépôt
|
||||
2. Suivez [ce guide](https://pnpm.io/installation) pour installer `pnpm`
|
||||
3. Exécutez `pnpm install --frozen-lockfile` pour installer les dépendances
|
||||
4. Exécutez `pnpm build:OS`
|
||||
|
||||
- `pnpm dist:win` - pour Windows
|
||||
- `pnpm dist:linux` - pour Linux
|
||||
- `pnpm dist:mac` - pour MacOS
|
||||
|
||||
Construit l'application pour macOS, Linux et Windows,
|
||||
en utilisant [electron-builder](https://github.com/electron-userland/electron-builder).
|
||||
|
||||
## Aperçu de la production
|
||||
|
||||
```bash
|
||||
pnpm start
|
||||
```
|
||||
|
||||
## Tests
|
||||
|
||||
```bash
|
||||
pnpm test
|
||||
```
|
||||
|
||||
Utilise [Playwright](https://playwright.dev/) pour tester l'application.
|
||||
|
||||
## Licence
|
||||
|
||||
MIT © [th-ch](https://github.com/th-ch/youtube-music)
|
||||
|
||||
## FAQ
|
||||
|
||||
### Pourquoi le menu de l'application ne s'affiche-t-il pas ?
|
||||
|
||||
Si l'option `Masquer le menu` est activée - vous pouvez afficher le menu avec la touche <kbd>alt</kbd> (ou <kbd>\`</kbd> [backtick] si vous utilisez le plugin du menu intégré)
|
||||
@ -1,388 +0,0 @@
|
||||
<div align="center">
|
||||
|
||||
# YouTube Tónlist
|
||||
|
||||
[](https://github.com/th-ch/youtube-music/releases/)
|
||||
[](https://github.com/th-ch/youtube-music/blob/master/LICENSE)
|
||||
[](https://github.com/th-ch/youtube-music/blob/master/.eslintrc.js)
|
||||
[](https://GitHub.com/th-ch/youtube-music/releases/)
|
||||
[](https://GitHub.com/th-ch/youtube-music/releases/)
|
||||
[](https://aur.archlinux.org/packages/youtube-music-bin)
|
||||
[](https://snyk.io/test/github/th-ch/youtube-music)
|
||||
|
||||
</div>
|
||||
|
||||

|
||||
|
||||
|
||||
<div align="center">
|
||||
<a href="https://github.com/th-ch/youtube-music/releases/latest">
|
||||
<img src="../../web/youtube-music.svg" width="400" height="100" alt="YouTube Music SVG">
|
||||
</a>
|
||||
</div>
|
||||
|
||||
**Electron umbúðir utan um YouTube Tónlist sem inniheldur:**
|
||||
|
||||
- Innfæddur útlit og tilfinning, miðar að því að halda upprunalegu viðmótinu
|
||||
- Rammi fyrir sérsniðnar tengiforrit: breyttu YouTube Tónlist að þínum þörfum (stíl, efni, eiginleikar), virkjaðu/slökktu á viðbætur í
|
||||
einn smellur
|
||||
|
||||
## Sýnishornsmynd
|
||||
|
||||
| Spilaraskjár (albúmslitaþema & umhverfisljós) |
|
||||
|:---------------------------------------------------------------------------------------------------------:|
|
||||
||
|
||||
|
||||
## Efni
|
||||
|
||||
- [Eiginleikar](#eiginleikar)
|
||||
- [Tiltæk tengiforrit](#tiltæk-tengiforrit)
|
||||
- [Þýðing](#þýðing)
|
||||
- [Sækja](#sækja)
|
||||
- [Arch Linux](#arch-linux)
|
||||
- [MacOS](#macos)
|
||||
- [Windows](#windows)
|
||||
- [Hvernig á að setja upp án nettengingar? (í Windows)](#hvernig-á-að-setja-upp-án-nettengingar-í-windows)
|
||||
- [Þemu](#þemu)
|
||||
- [Þróun](#þróun)
|
||||
- [Búðu til þín eigin viðbætur](#búðu-til-þín-eigin-viðbætur)
|
||||
- [Er að búa til viðbót](#er-að-búa-til-viðbót)
|
||||
- [Algeng notkunartilvik](#algeng-notkunartilvik)
|
||||
- [Byggja](#byggja)
|
||||
- [Framleiðsluforskoðun](#framleiðsluforskoðun)
|
||||
- [Prófanir](#prófanir)
|
||||
- [Leyfi](#leyfi)
|
||||
- [Algengustu spurningar](#algengustu-spurningar)
|
||||
|
||||
## Eiginleikar:
|
||||
|
||||
- **Sjálfvirk staðfesting þegar gert er hlé** (Alltaf virkt): slökkva á
|
||||
["Halda áfram að horfa?"](https://user-images.githubusercontent.com/61631665/129977894-01c60740-7ec6-4bf0-9a2c-25da24491b0e.png)
|
||||
popup sem gerir hlé á tónlist eftir ákveðinn tíma
|
||||
|
||||
- Og meira...
|
||||
|
||||
## Tiltæk tengiforrit:
|
||||
|
||||
- **Auglýsingablokkari**: Lokaðu fyrir allar auglýsingar og rakningar úr kassanum
|
||||
|
||||
- **Albúmsaðgerðir**: Bætir Ódíslika, Mislíkt, Líkt, og Ólíkt til að nota þetta á öll lög á spilunarlista eða albúm
|
||||
|
||||
- **Albúmslitaþema**: Beitir kraftmikið þema og sjónrænum áhrifum sem byggjast á litavali albúmsins
|
||||
|
||||
- **Umhverfishamur**: Beitir lýsingaráhrifum með því að varpa mildum litum úr myndbandinu í bakgrunn skjásins
|
||||
|
||||
- **Hljóðþjöppur**: Notaðu þjöppun á hljóð (lækkar hljóðstyrk háværustu hluta merkis og hækkar hljóðstyrk í mýkstu hlutunum)
|
||||
|
||||
- **Þoka Leiðsagnarstika**: Gerir leiðsögustikuna gagnsæja og óskýrt
|
||||
|
||||
- **Farið Framhjá Aldurstakmörkunum**: Framhjá aldursstaðfestingu YouTube
|
||||
|
||||
- **Yfirskriftarval**: Virkja skjátexta
|
||||
|
||||
- **Fyrirferðarlítillhliðarstika**: Stilltu hliðarstikuna alltaf í þétta stillingu
|
||||
|
||||
- **Krossfæra**: Krossfæra á milli lög
|
||||
|
||||
- **Slökkva á Sjálfvirkri Spilun**: Gerir lag að byrja í "hlé" ham
|
||||
|
||||
- **[Discord](https://discord.com/) Rík Nærveru**: Sýndu vinum þínum hvað þú hlustar á
|
||||
með [Rík Nærveru](https://user-images.githubusercontent.com/28219076/104362104-a7a0b980-5513-11eb-9744-bb89eabe0016.png)
|
||||
|
||||
- **Niðurhalari**: Niðurhalum
|
||||
MP3 [beint úr viðmótinu](https://user-images.githubusercontent.com/61631665/129977677-83a7d067-c192-45e1-98ae-b5a4927393be.png) [(youtube-dl)](https://github.com/ytdl-org/youtube-dl)
|
||||
|
||||
- **Veldibundiðrúmmál**: Gerir hljóðstyrkssleðann [veldisvísis](https://greasyfork.org/en/scripts/397686-youtube-music-fix-volume-ratio/)
|
||||
svo það er auðveldara að velja lægra hljóðstyrk.
|
||||
|
||||
- **Valmynd í Forriti**: [Gefur börum flott, dökkt útlit](https://user-images.githubusercontent.com/78568641/112215894-923dbf00-8c29-11eb-95c3-3ce15db27eca.png)
|
||||
|
||||
> (sjá [þessa færslu](https://github.com/th-ch/youtube-music/issues/410#issuecomment-952060709) ef þú átt í vandræðum
|
||||
með að fá aðgang að valmyndinni eftir að hafa virkjað þessa viðbót og fela valmyndarvalkostinn)
|
||||
|
||||
- **Scrobbler**: Bætir við scrobbling stuðningi fyrir [Last.fm](https://www.last.fm/) og [ListenBrainz](https://listenbrainz.org/)
|
||||
|
||||
- **Lumia Stream**: Bætir við [Lumia Stream](https://lumiastream.com/) stuðningi
|
||||
|
||||
- **Söngtexti Snilld**: Bætir stuðningi við texta fyrir flest lög
|
||||
|
||||
- **Tónlist Saman**: Deila spilunarlista með öðrum. Þegar gestgjafinn spilar lag munu allir aðrir heyra sama lagið
|
||||
|
||||
- **Leiðsögn**: Næsta/Til baka leiðsagnarörvar beint samþættar í viðmótinu, eins og í uppáhalds vafranum þínum
|
||||
|
||||
- **Engin Google Innskráning**: Fjarlægðu Google innskráningarhnappa og tengla úr viðmótinu
|
||||
|
||||
- **Tilkynningar**: Birta tilkynningu þegar lag byrjar að spila
|
||||
([gagnvirkartilkynningar](https://user-images.githubusercontent.com/78568641/114102651-63ce0e00-98d0-11eb-9dfe-c5a02bb54f9c.png) eru fáanlegar á Windows)
|
||||
|
||||
- **Mynd-í-Mynd**: Gerir kleift að skipta forritinu yfir í mynd-í-mynd stillingu
|
||||
|
||||
- **Spilunarhraði**: Hlustaðu hratt, hlustaðu hægt!
|
||||
[Bætir við sleða sem stjórnar lagahraðanum](https://user-images.githubusercontent.com/61631665/129976003-e55db5ba-bf42-448c-a059-26a009775e68.png)
|
||||
|
||||
- **Nákvæmshljóðstyrkur**: Stjórnaðu hljóðstyrknum nákvæmlega með músarhjóli/hraðtökkum, með sérsniðnum HUD og sérsniðnum hljóðstyrksþrepum
|
||||
|
||||
- **Flýtileiðir (og MPRIS)**: Leyfir að stilla alþjóðlegarflýtilyklar fyrir spilun (spila/gera hlé/næsta/fyrri) +
|
||||
óvirkja [media osd](https://user-images.githubusercontent.com/84923831/128601225-afa38c1f-dea8-4209-9f72-0f84c1dd8b54.png)
|
||||
með því að hnekkja miðlunarlyklum + virkja Ctrl/CMD + F til að leita + virkja linux mpris stuðning fyrir
|
||||
miðlunarlyklar + [sérsniðnir flýtilyklar](https://github.com/Araxeus/youtube-music/blob/1e591d6a3df98449bcda6e63baab249b28026148/providers/song-controls.js#L13-L50)
|
||||
fyrir [háþróaða notendur](https://github.com/th-ch/youtube-music/issues/106#issuecomment-952156902)
|
||||
- **Slepptu Lögum sem Mislíkuðust**: Sleppir mislíkaði lög
|
||||
|
||||
- **Slepptu Þögnum**: Slepptu sjálfkrafa þagnarköflum í lögum
|
||||
|
||||
- [**Styrktarblokk**](https://github.com/ajayyy/SponsorBlock): Sleppur sjálfkrafa hlutum sem ekki eru tónlist, eins og inngangur/lok
|
||||
eða hlutar af tónlistarmyndböndum þar sem lag er ekki að spila
|
||||
|
||||
- **Miðlunarstýringarverkefnastikunnar**: Stjórnaðu spilun frá [Windows verkefnastikunni þinni](https://user-images.githubusercontent.com/78568641/111916130-24a35e80-8a82-11eb-80c8-5021c1aa27f4.png)
|
||||
|
||||
- **Snertistiku**: Sérsniðið Snertistikuútlit fyrir macOS
|
||||
|
||||
- **Tuna OBS**: Samþætting við [OBS](https://obsproject.com/)
|
||||
viðbótina [Tuna](https://obsproject.com/forum/resources/tuna.843/)
|
||||
|
||||
- **Myndbandgæðisbreyting**: Leyfir að breyta myndbandgæðum með
|
||||
[hnappi](https://user-images.githubusercontent.com/78568641/138574366-70324a5e-2d64-4f6a-acdd-dc2a2b9cecc5.png) á
|
||||
myndbandsyfirlaginu
|
||||
|
||||
- **Myndbandsrofi**: Bætir við [hnappi](https://user-images.githubusercontent.com/28893833/173663950-63e6610e-a532-49b7-9afa-54cb57ddfc15.png) til
|
||||
að skipta á milli myndbands/lagshams. Getur einnig valfrjálst fjarlægt allan myndbandsflipann
|
||||
|
||||
- **Sjónrænir**: Mismunandi tónlist sjónrænir
|
||||
|
||||
## Þýðing
|
||||
|
||||
Þú getur aðstoðað við þýðingar á [Hosted Weblate](https://hosted.weblate.org/projects/youtube-music/).
|
||||
|
||||
<a href="https://hosted.weblate.org/engage/youtube-music/">
|
||||
<img src="https://hosted.weblate.org/widget/youtube-music/i18n/multi-auto.svg" alt="translation status" />
|
||||
<img src="https://hosted.weblate.org/widget/youtube-music/i18n/287x66-black.png" alt="translation status 2" />
|
||||
</a>
|
||||
|
||||
## Sækja
|
||||
|
||||
Þú getur skoðað [nýjustu útgáfuna](https://github.com/th-ch/youtube-music/releases/latest) til að finna fljótt
|
||||
nýjustu útgáfuna.
|
||||
|
||||
### Arch Linux
|
||||
|
||||
Settu upp [`youtube-music-bin`](https://aur.archlinux.org/packages/youtube-music-bin) pakkann frá AUR. Fyrir AUR uppsetningarleiðbeiningar skaltu skoða
|
||||
þessa [wiki síðu](https://wiki.archlinux.org/index.php/Arch_User_Repository#Installing_packages).
|
||||
|
||||
### MacOS
|
||||
|
||||
Þú getur sett upp appið með því að nota Homebrew (sjá [cask skilgreiningu](https://github.com/th-ch/homebrew-youtube-music))
|
||||
|
||||
```bash
|
||||
brew install th-ch/youtube-music/youtube-music
|
||||
```
|
||||
|
||||
Ef þú setur upp forritið handvirkt og færð villu "er skemmd og ekki er hægt að opna það," þegar þú ræsir forritið skaltu keyra eftirfarandi í flugstöðinni:
|
||||
|
||||
```bash
|
||||
xattr -cr /Applications/YouTube\ Music.app
|
||||
```
|
||||
|
||||
### Windows
|
||||
|
||||
Þú getur notað [Scoop pakkastjórnun](https://scoop.sh) til að setja upp `youtube-music` pakkann frá
|
||||
[`extras` fötunni](https://github.com/ScoopInstaller/Extras).
|
||||
|
||||
```bash
|
||||
scoop bucket add extras
|
||||
scoop install extras/youtube-music
|
||||
```
|
||||
|
||||
Að öðrum kosti geturðu notað [Winget](https://learn.microsoft.com/en-us/windows/package-manager/winget/), Windows 11s
|
||||
opinber CLI pakkastjóri til að setja upp `th-ch.YouTubeMusic` pakkann.
|
||||
|
||||
*Athugið: Microsoft Defender SmartScreen gæti lokað uppsetningunni þar sem hún er frá „óþekktum útgefanda“. Þetta er einnig
|
||||
satt fyrir handvirka uppsetningu þegar reynt er að keyra executable(.exe) eftir handvirkt niðurhal hér á github (sama
|
||||
skrá).*
|
||||
|
||||
```bash
|
||||
winget install th-ch.YouTubeMusic
|
||||
```
|
||||
|
||||
#### Hvernig á að setja upp án nettengingar? (í Windows)
|
||||
|
||||
- Sæktu `*.nsis.7z` skrána fyrir _arkitektúr tækisins þíns_ á [útgáfusíðu](https://github.com/th-ch/youtube-music/releases/latest).
|
||||
- `x64` fyrir 64-bita Windows
|
||||
- `ia32` fyrir 32-bita Windows
|
||||
- `arm64` fyrir ARM64 Windows
|
||||
- Sæktu uppsetningarforrit á útgáfusíðu. (`*-Setup.exe`)
|
||||
- Settu þær í **sömu möppuna**.
|
||||
- Keyrðu uppsetningarforritið.
|
||||
|
||||
## Þemu
|
||||
|
||||
Þú getur hlaðið CSS skrám til að breyta útliti forritsins (Valkostir > Sjónræn klip > Þemu).
|
||||
|
||||
Sum fyrirframskilgreind þemu eru fáanleg á https://github.com/kerichdev/themes-for-ytmdesktop-player.
|
||||
|
||||
## Þróun
|
||||
|
||||
```bash
|
||||
git clone https://github.com/th-ch/youtube-music
|
||||
cd youtube-music
|
||||
pnpm install --frozen-lockfile
|
||||
pnpm dev
|
||||
```
|
||||
|
||||
## Búðu til þín eigin tengiforrit
|
||||
|
||||
Með því að nota tengiforrit geturðu:
|
||||
|
||||
- vinna með appið - `BrowserWindow` frá electron er sent til tengiforritsstjórans
|
||||
- breyttu framhliðinni með því að vinna með HTML/CSS
|
||||
|
||||
### Er að búa til tengiforrit
|
||||
|
||||
Búðu til möppu í `src/plugins/YOUR-PLUGIN-NAME`:
|
||||
|
||||
- `index.ts`: aðal skránni af tengiforritið
|
||||
```typescript
|
||||
import style from './style.css?inline'; // flytja inn stíl sem inline
|
||||
|
||||
import { createPlugin } from '@/utils';
|
||||
|
||||
export default createPlugin({
|
||||
name: 'Plugin Label',
|
||||
restartNeeded: true, // ef gildi er satt, ytmusic sjá endurræsa gluggann
|
||||
config: {
|
||||
enabled: false,
|
||||
}, // sérsniðnastillingar þinn
|
||||
stylesheets: [style], // sérsniðnastílinn þinn
|
||||
menu: async ({ getConfig, setConfig }) => {
|
||||
// Allar *stillingaraðferðir eru umvafnar Lofor<T>
|
||||
const config = await getConfig();
|
||||
return [
|
||||
{
|
||||
label: 'menu',
|
||||
submenu: [1, 2, 3].map((value) => ({
|
||||
label: `value ${value}`,
|
||||
type: 'radio',
|
||||
checked: config.value === value,
|
||||
click() {
|
||||
setConfig({ value });
|
||||
},
|
||||
})),
|
||||
},
|
||||
];
|
||||
},
|
||||
backend: {
|
||||
start({ window, ipc }) {
|
||||
window.maximize();
|
||||
|
||||
// þú getur tengst við renderer tengiforritið
|
||||
ipc.handle('some-event', () => {
|
||||
return 'hello';
|
||||
});
|
||||
},
|
||||
// það kviknaði þegar stillingum var breytt
|
||||
onConfigChange(newConfig) { /* ... */ },
|
||||
// it fired when plugin disabled
|
||||
stop(context) { /* ... */ },
|
||||
},
|
||||
renderer: {
|
||||
async start(context) {
|
||||
console.log(await context.ipc.invoke('some-event'));
|
||||
},
|
||||
// Aðeins krókur sem er í boði fyrir renderer
|
||||
onPlayerApiReady(api: YoutubePlayer, context: RendererContext) {
|
||||
// stilltu stillingar viðbótarinnar auðveldlega
|
||||
context.setConfig({ myConfig: api.getVolume() });
|
||||
},
|
||||
onConfigChange(newConfig) { /* ... */ },
|
||||
stop(_context) { /* ... */ },
|
||||
},
|
||||
preload: {
|
||||
async start({ getConfig }) {
|
||||
const config = await getConfig();
|
||||
},
|
||||
onConfigChange(newConfig) {},
|
||||
stop(_context) {},
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
### Algeng notkunartilvik
|
||||
|
||||
- er að sprauta sérsniðnum CSS: búðu til `style.css` skrá í sömu möppu þá:
|
||||
|
||||
```typescript
|
||||
// index.ts
|
||||
import style from './style.css?inline'; // flytja inn stíl sem inline
|
||||
|
||||
import { createPlugin } from '@/utils';
|
||||
|
||||
export default createPlugin({
|
||||
name: 'Plugin Label',
|
||||
restartNeeded: true, // ef gildi er satt, ytmusic sjá endurræsa gluggann
|
||||
config: {
|
||||
enabled: false,
|
||||
}, // sérsniðnastillingar þinn
|
||||
stylesheets: [style], // sérsniðnastílinn þinn
|
||||
renderer() {} // skilgreina renderer krók
|
||||
});
|
||||
```
|
||||
|
||||
- Ef þú vilt breyta HTML:
|
||||
|
||||
```typescript
|
||||
import { createPlugin } from '@/utils';
|
||||
|
||||
export default createPlugin({
|
||||
name: 'Plugin Label',
|
||||
restartNeeded: true, // ef gildi er satt, ytmusic sjá endurræsa gluggann
|
||||
config: {
|
||||
enabled: false,
|
||||
}, // sérsniðnastillingar þinn
|
||||
renderer() {
|
||||
// Fjarlægðu innskráningarhnappinn
|
||||
document.querySelector(".sign-in-link.ytmusic-nav-bar").remove();
|
||||
} // skilgreina renderer krók
|
||||
});
|
||||
```
|
||||
|
||||
- samskipti á milli að framan og aftan: hægt að gera með því að nota ipcMain eininguna frá electron. Sjá `index.ts` skrá og
|
||||
dæmi í 'styrktarblokk' tengiforritinu.
|
||||
|
||||
## Byggja
|
||||
|
||||
1. Klóna geymsluna
|
||||
2. Fylgdu [þessa handbók](https://pnpm.io/installation) til að setja upp 'pnpm'
|
||||
3. Keyrðu `pnpm install --frozen-lockfile` til að setja upp ósjálfstæði
|
||||
4. Keyrðu `pnpm build:OS`
|
||||
|
||||
- `pnpm dist:win` - Windows
|
||||
- `pnpm dist:linux` - Linux
|
||||
- `pnpm dist:mac` - MacOS
|
||||
|
||||
Byggir appið fyrir macOS, Linux og Windows,
|
||||
með því að nota [electron-builder](https://github.com/electron-userland/electron-builder).
|
||||
|
||||
## Framleiðsluforskoðun
|
||||
|
||||
```bash
|
||||
pnpm start
|
||||
```
|
||||
|
||||
## Prófanir
|
||||
|
||||
```bash
|
||||
pnpm test
|
||||
```
|
||||
|
||||
Notar [Playwright](https://playwright.dev/) til að prófa forritið.
|
||||
|
||||
## Leyfi
|
||||
|
||||
MIT © [th-ch](https://github.com/th-ch/youtube-music)
|
||||
|
||||
## Algengustu Spurningar
|
||||
|
||||
### Hvers vegna forritavalmynd birtist ekki?
|
||||
|
||||
Ef valmöguleikinn „Fela valmynd“ er á - þú getur sýnt valmyndina með <kbd>alt</kbd> lyklinum (eða <kbd>\`</kbd> [bakka]
|
||||
ef þú notar viðbótina fyrir valmynd í forriti)
|
||||
@ -1,348 +0,0 @@
|
||||
<div align="center">
|
||||
|
||||
# 유튜브 뮤직 (YouTube Music)
|
||||
|
||||
[](https://github.com/th-ch/youtube-music/releases/)
|
||||
[](https://github.com/th-ch/youtube-music/blob/master/LICENSE)
|
||||
[](https://github.com/th-ch/youtube-music/blob/master/.eslintrc.js)
|
||||
[](https://GitHub.com/th-ch/youtube-music/releases/)
|
||||
[](https://GitHub.com/th-ch/youtube-music/releases/)
|
||||
[](https://aur.archlinux.org/packages/youtube-music-bin)
|
||||
[](https://snyk.io/test/github/th-ch/youtube-music)
|
||||
|
||||
</div>
|
||||
|
||||

|
||||
|
||||
<div align="center">
|
||||
<a href="https://github.com/th-ch/youtube-music/releases/latest">
|
||||
<img src="../../web/youtube-music.svg" width="400" height="100" alt="YouTube Music SVG">
|
||||
</a>
|
||||
</div>
|
||||
|
||||
**유튜브 뮤직의 Electron 래퍼; 기능:**
|
||||
|
||||
- 원래의 인터페이스를 유지하는 것을 목표로 하는 네이티브 디자인 및 느낌
|
||||
- 맞춤 플러그인을 위한 프레임워크: 스타일, 콘텐츠, 기능 등 필요에 따라 유튜브 뮤직을 변경하고, 클릭 한 번으로 플러그인을 활성화/비활성화할 수 있습니다.
|
||||
|
||||
## Content
|
||||
|
||||
- [기능](#기능)
|
||||
- [사용 가능한 플러그인](#사용-가능한-플러그인)
|
||||
- [번역](#번역)
|
||||
- [다운로드](#다운로드)
|
||||
- [Arch Linux](#arch-linux)
|
||||
- [MacOS](#macos)
|
||||
- [Windows](#windows)
|
||||
- [(Windows에서) 네트워크에 연결하지 않고 설치하는 방법은 무엇인가요?](#windows에서-네트워크에-연결하지-않고-설치하는-방법은-무엇인가요)
|
||||
- [테마](#테마)
|
||||
- [개발](#개발)
|
||||
- [나만의 플러그인 만들기](#나만의-플러그인-만들기)
|
||||
- [플러그인 만들기](#플러그인-만들기)
|
||||
- [일반적인 사용 예](#일반적인-사용-예)
|
||||
- [빌드](#빌드)
|
||||
- [프로덕션 빌드 미리보기](#프로덕션-빌드-미리보기)
|
||||
- [테스트](#테스트)
|
||||
- [라이선스](#라이선스)
|
||||
- [자주 묻는 질문](#자주-묻는-질문)
|
||||
|
||||
## 기능:
|
||||
|
||||
- **일시 정지 시 자동 확인** (항상 활성화 됨): 일정 시간이 지나면 음악을 일시 정지하는 ["계속 시청하시겠습니까?"](https://user-images.githubusercontent.com/61631665/129977894-01c60740-7ec6-4bf0-9a2c-25da24491b0e.png) 팝업을 비활성화합니다.
|
||||
|
||||
- 이외에 더 많은 기능 ...
|
||||
|
||||
## 사용 가능한 플러그인:
|
||||
|
||||
- **애드블록**: 모든 광고와 트래커를 즉시 차단합니다
|
||||
|
||||
- **앨범 컬러 기반 테마**: 앨범 색상 팔레트를 기반으로 동적 테마 및 시각 효과를 적용합니다
|
||||
|
||||
- **앰비언트 모드**: 영상의 간접 조명을 화면 배경에 투사합니다.
|
||||
|
||||
- **오디오 컴프레서**: 오디오에 컴프레서를 적용합니다 (신호에서 가장 시끄러운 부분의 음량을 낮추고 가장 조용한 부분의 음량을 높임)
|
||||
|
||||
- **네비게이션 바 흐림 효과**: 내비게이션 바를 투명하고 흐릿하게 만듭니다
|
||||
|
||||
- **나이 제한 우회**: 유튜브의 나이 제한을 우회합니다
|
||||
|
||||
- **자막 선택기**: 자막을 활성화합니다
|
||||
|
||||
- **컴팩트 사이드바**: 사이드바를 항상 컴팩트 모드로 설정합니다
|
||||
|
||||
- **크로스페이드**: 노래 사이에 크로스페이드 효과를 적용합니다
|
||||
|
||||
- **자동 재생 해제**: 노래를 '일시 정지' 모드로 시작하게 합니다
|
||||
|
||||
- [**디스코드 활동 상태**](https://discord.com/): [활동 상태 (Rich Presence)](https://user-images.githubusercontent.com/28219076/104362104-a7a0b980-5513-11eb-9744-bb89eabe0016.png)를 사용하여 친구들에게 내가 듣는 음악을 보여주세요
|
||||
|
||||
- **다운로더**: UI에서 [직접](https://user-images.githubusercontent.com/61631665/129977677-83a7d067-c192-45e1-98ae-b5a4927393be.png) MP3/소스 오디오를 다운로드하세요
|
||||
|
||||
- **지수 볼륨**: 음량 슬라이더를 [지수적](https://greasyfork.org/en/scripts/397686-youtube-music-fix-volume-ratio/)으로 만들어 더 낮은 음량을 쉽게 선택할 수 있도록 합니다.
|
||||
|
||||
- **인앱 메뉴**: [메뉴 표시줄을 더 멋지게, 그리고 다크 또는 앨범의 색상으로 만듭니다](https://user-images.githubusercontent.com/78568641/112215894-923dbf00-8c29-11eb-95c3-3ce15db27eca.png)
|
||||
|
||||
> (이 플러그인 및 메뉴 숨기기 옵션을 활성화한 후 메뉴에 액세스하는 데 문제가 있는 경우 [이 글](https://github.com/th-ch/youtube-music/issues/410#issuecomment-952060709)을 참조하세요)
|
||||
|
||||
- [**Last.fm**](https://www.last.fm/): Last.fm에 대한 스크러블 지원을 추가합니다
|
||||
|
||||
- **Lumia Stream**: [Lumia Stream](https://lumiastream.com/) 지원을 추가합니다
|
||||
|
||||
- **Genius 가사**: 더 많은 곡에 대해 가사 지원을 추가합니다
|
||||
|
||||
- **네비게이션**: 브라우저에서처럼, UI에 직접 통합된 앞으로/뒤로 탐색하는 화살표를 추가합니다
|
||||
|
||||
- **Google 로그인 제거**: UI에서 Google 로그인 버튼 및 링크 제거하기
|
||||
|
||||
- **알림**: 노래 재생이 시작되면 알림을 표시 (Windows에서는 [대화형 알림](https://user-images.githubusercontent.com/78568641/114102651-63ce0e00-98d0-11eb-9dfe-c5a02bb54f9c.png) 사용 가능)
|
||||
|
||||
- **PiP**: 앱을 PiP 모드로 전환할 수 있게 허용합니다
|
||||
|
||||
- **재생 속도**: 빨리 듣거나, 천천히 들어보세요! [노래 속도를 제어하는 슬라이더를 추가합니다](https://user-images.githubusercontent.com/61631665/129976003-e55db5ba-bf42-448c-a059-26a009775e68.png)
|
||||
|
||||
- **정확한 음량**: 사용자 지정 HUD와 사용자 지정 음량 단계 및 마우스 휠/단축키를 사용하여 음량을 정확하게 제어하세요
|
||||
|
||||
- **영상 품질 체인저**: 영상 오버레이의 [버튼](https://user-images.githubusercontent.com/78568641/138574366-70324a5e-2d64-4f6a-acdd-dc2a2b9cecc5.png)으로 영상 품질을 변경할 수 있게 합니다
|
||||
|
||||
- **단축키 (& MPRIS)**: 재생을 위한 전역 단축키 설정 허용 (재생/일시 정지/다음/이전) + 미디어 키를 재정의하여 [미디어 osd](https://user-images.githubusercontent.com/84923831/128601225-afa38c1f-dea8-4209-9f72-0f84c1dd8b54.png) 비활성화 + Ctrl/CMD + F 검색 활성화 + 미디어 키에 대한 리눅스 MPRIS 지원 활성화 + [고급 사용자](https://github.com/th-ch/youtube-music/issues/106#issuecomment-952156902)를 위한 [사용자 지정 단축키](https://github.com/Araxeus/youtube-music/blob/1e591d6a3df98449bcda6e63baab249b28026148/providers/song-controls.js#L13-L50) 지원
|
||||
|
||||
- **무음 건너뛰기** - 노래의 무음 부분을 자동으로 건너뜁니다
|
||||
|
||||
- [**SponsorBlock**](https://github.com/ajayyy/SponsorBlock): 인트로/아웃트로와 같은 음악이 아닌 부분이나, 노래가 재생되지 않는 뮤직 비디오의 일부를 자동으로 건너뜁니다
|
||||
|
||||
- **작업표시줄 미디어 컨트롤**: [Windows 작업표시줄](https://user-images.githubusercontent.com/78568641/111916130-24a35e80-8a82-11eb-80c8-5021c1aa27f4.png)에서 재생을 제어하세요
|
||||
|
||||
- **TouchBar**: macOS 사용자를 위한 TouchBar 위젯을 추가합니다
|
||||
|
||||
- **Tuna-OBS**: [OBS](https://obsproject.com/)의 플러그인, [Tuna](https://obsproject.com/forum/resources/tuna.843/)와 통합을 활성화합니다
|
||||
|
||||
- **영상 전환**: 영상/노래 모드를 전환하는 [버튼](https://user-images.githubusercontent.com/28893833/173663950-63e6610e-a532-49b7-9afa-54cb57ddfc15.png)을 추가합니다. 선택적으로 전체 영상 탭을 제거할 수도 있습니다
|
||||
|
||||
- **비주얼라이저**: 플레이어에 시각화 도구 추가
|
||||
|
||||
## 번역
|
||||
|
||||
[Hosted Weblate](https://hosted.weblate.org/projects/youtube-music/)에서 번역을 도울 수 있습니다.
|
||||
|
||||
<a href="https://hosted.weblate.org/engage/youtube-music/">
|
||||
<img src="https://hosted.weblate.org/widget/youtube-music/i18n/multi-auto.svg" alt="번역 상태" />
|
||||
<img src="https://hosted.weblate.org/widget/youtube-music/i18n/287x66-black.png" alt="번역 상태 2" />
|
||||
</a>
|
||||
|
||||
## 다운로드
|
||||
|
||||
[최신 릴리즈](https://github.com/th-ch/youtube-music/releases/latest)를 확인하여 최신 버전을 빠르게 찾을 수 있습니다.
|
||||
|
||||
### Arch Linux
|
||||
|
||||
AUR에서 [`youtube-music-bin`](https://aur.archlinux.org/packages/youtube-music-bin) 패키지를 설치합니다. AUR 설치 지침은 [이 위키 페이지](https://wiki.archlinux.org/index.php/Arch_User_Repository#Installing_packages)를 참조하세요.
|
||||
|
||||
### MacOS
|
||||
|
||||
Homebrew를 사용하여 앱을 설치할 수 있습니다:
|
||||
```bash
|
||||
brew install --cask https://raw.githubusercontent.com/th-ch/youtube-music/master/youtube-music.rb
|
||||
```
|
||||
|
||||
(앱을 수동으로 설치하고) 앱을 실행할 때 `손상되었기 때문에 열 수 없습니다.`라는 오류가 발생하면 터미널에서 다음을 실행하세요:
|
||||
|
||||
```bash
|
||||
xattr -cr /Applications/YouTube\ Music.app
|
||||
```
|
||||
|
||||
### Windows
|
||||
|
||||
[Scoop 패키지 매니저](https://scoop.sh)를 사용하여 [`extras` 버킷](https://github.com/ScoopInstaller/Extras)에서 `youtube-music` 패키지를 설치할 수 있습니다.
|
||||
|
||||
```bash
|
||||
scoop bucket add extras
|
||||
scoop install extras/youtube-music
|
||||
```
|
||||
|
||||
또는 Windows 11의 공식 CLI 패키지 관리자인 [Winget](https://learn.microsoft.com/en-us/windows/package-manager/winget/)을 사용하여 `th-ch.YouTubeMusic` 패키지를 설치할 수 있습니다.
|
||||
|
||||
*참고: "알 수 없는 게시자"의 파일이기 때문에 Microsoft Defender의 SmartScreen에서 설치를 차단할 수 있습니다. 이는 GitHub에서 동일 파일을 수동으로 다운로드한 후 실행 파일(.exe)을 실행하려고 할 때도 마찬가지로 발생합니다.*
|
||||
|
||||
```bash
|
||||
winget install th-ch.YouTubeMusic
|
||||
```
|
||||
|
||||
#### (Windows에서) 네트워크에 연결하지 않고 설치하는 방법은 무엇인가요?
|
||||
|
||||
- [릴리즈 페이지](https://github.com/th-ch/youtube-music/releases/latest)에서 _본인 기기 아키텍처_에 맞는 `*.nsis.7z` 파일을 다운로드하세요.
|
||||
- `x64`는 64비트 Windows 용입니다.
|
||||
- `ia32`는 32비트 Windows 용입니다.
|
||||
- `arm64`는 ARM64 Windows 용입니다.
|
||||
- 릴리즈 페이지에서 설치기를 다운로드하세요. (`*-Setup.exe`)
|
||||
- 두 파일을 **동일한 위치**에 놓아주세요.
|
||||
- 설치기를 실행하세요.
|
||||
|
||||
## 테마
|
||||
|
||||
CSS 파일을 로드하여 애플리케이션의 모양을 변경할 수 있습니다(설정 > 시각적 변경 > 테마).
|
||||
|
||||
일부 사전 정의 테마는 https://github.com/kerichdev/themes-for-ytmdesktop-player 에서 사용할 수 있습니다.
|
||||
|
||||
## 개발
|
||||
|
||||
```bash
|
||||
git clone https://github.com/th-ch/youtube-music
|
||||
cd youtube-music
|
||||
pnpm install --frozen-lockfile
|
||||
pnpm dev
|
||||
```
|
||||
|
||||
## 나만의 플러그인 만들기
|
||||
|
||||
플러그인을 사용하면 할 수 있는 것들:
|
||||
|
||||
- 앱 조작 - Electron에서 `BrowserWindow`가 플러그인 핸들러로 전달
|
||||
- HTML/CSS를 조작하여 프론트엔드를 변경
|
||||
|
||||
### 플러그인 만들기
|
||||
|
||||
`plugins/나만의-플러그인-이름`에 폴더를 만듭니다:
|
||||
|
||||
- `index.ts`: 플러그인의 메인 파일입니다.
|
||||
```typescript
|
||||
import style from './style.css?inline'; // 스타일을 인라인으로 가져옵니다
|
||||
|
||||
import { createPlugin } from '@/utils';
|
||||
|
||||
export default createPlugin({
|
||||
name: 'Plugin Label',
|
||||
restartNeeded: true, // 값이 true면, YTM은 재시작 다이얼로그를 표시합니다
|
||||
config: {
|
||||
enabled: false,
|
||||
}, // 나의 커스텀 config
|
||||
stylesheets: [style], // 나의 스타일
|
||||
menu: async ({ getConfig, setConfig }) => {
|
||||
// 모든 *Config 메서드는 Promise<T>로 래핑됩니다
|
||||
const config = await getConfig();
|
||||
return [
|
||||
{
|
||||
label: 'menu',
|
||||
submenu: [1, 2, 3].map((value) => ({
|
||||
label: `value ${value}`,
|
||||
type: 'radio',
|
||||
checked: config.value === value,
|
||||
click() {
|
||||
setConfig({ value });
|
||||
},
|
||||
})),
|
||||
},
|
||||
];
|
||||
},
|
||||
backend: {
|
||||
start({ window, ipc }) {
|
||||
window.maximize();
|
||||
|
||||
// 이를 사용하여 렌더러 플러그인과 통신할 수 있습니다
|
||||
ipc.handle('some-event', () => {
|
||||
return 'hello';
|
||||
});
|
||||
},
|
||||
// config가 변경되면 실행됩니다
|
||||
onConfigChange(newConfig) { /* ... */ },
|
||||
// 플러그인이 비활성화되면 실행됩니다
|
||||
stop(context) { /* ... */ },
|
||||
},
|
||||
renderer: {
|
||||
async start(context) {
|
||||
console.log(await context.ipc.invoke('some-event'));
|
||||
},
|
||||
// 렌더러에서만 사용 가능한 훅입니다
|
||||
onPlayerApiReady(api: YoutubePlayer, context: RendererContext<T>) {
|
||||
// 플러그인의 config를 간단하게 설정할 수 있습니다
|
||||
context.setConfig({ myConfig: api.getVolume() });
|
||||
},
|
||||
onConfigChange(newConfig) { /* ... */ },
|
||||
stop(_context) { /* ... */ },
|
||||
},
|
||||
preload: {
|
||||
async start({ getConfig }) {
|
||||
const config = await getConfig();
|
||||
},
|
||||
onConfigChange(newConfig) {},
|
||||
stop(_context) {},
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
### 일반적인 사용 예
|
||||
|
||||
- 사용자 정의 CSS 삽입: 같은 폴더에 `style.css` 파일을 생성합니다:
|
||||
|
||||
```typescript
|
||||
// index.ts
|
||||
import style from './style.css?inline'; // 스타일을 인라인으로 가져옵니다
|
||||
|
||||
import { createPlugin } from '@/utils';
|
||||
|
||||
export default createPlugin({
|
||||
name: 'Plugin Label',
|
||||
restartNeeded: true, // 값이 true면, YTM은 재시작 다이얼로그를 표시합니다
|
||||
config: {
|
||||
enabled: false,
|
||||
}, // 나의 커스텀 config
|
||||
stylesheets: [style], // 나의 커스텀 스타일
|
||||
renderer() {} // 렌더러 훅 정의
|
||||
});
|
||||
```
|
||||
|
||||
- HTML을 변경하려는 경우:
|
||||
|
||||
```typescript
|
||||
import { createPlugin } from '@/utils';
|
||||
|
||||
export default createPlugin({
|
||||
name: 'Plugin Label',
|
||||
restartNeeded: true, // 값이 true면, YTM은 재시작 다이얼로그를 표시합니다
|
||||
config: {
|
||||
enabled: false,
|
||||
}, // 나의 커스텀 config
|
||||
renderer() {
|
||||
// 로그인 버튼을 제거합니다
|
||||
document.querySelector(".sign-in-link.ytmusic-nav-bar").remove();
|
||||
} // 렌더러 훅 정의
|
||||
});
|
||||
```
|
||||
|
||||
- 프론트엔드와 백엔드 간의 통신: Electron의 `ipcMain` 모듈을 사용하여 수행할 수 있습니다. `SponsorBlock` 플러그인의 `index.ts` 파일과 예제를 참조하세요.
|
||||
|
||||
## 빌드
|
||||
|
||||
1. 레포지토리를 복제 (clone) 합니다
|
||||
2. [이 가이드](https://pnpm.io/installation)에 따라 `pnpm`을 설치합니다.
|
||||
3. `pnpm install --frozen-lockfile`을 실행하여 종속성을 설치합니다.
|
||||
4. `pnpm build:OS`을 실행합니다.
|
||||
|
||||
- `pnpm dist:win` - Windows
|
||||
- `pnpm dist:linux` - Linux
|
||||
- `pnpm dist:mac` - MacOS
|
||||
|
||||
[electron-builder](https://github.com/electron-userland/electron-builder)를 사용하여 macOS, Linux 및 Windows용 앱을 빌드합니다.
|
||||
|
||||
## 프로덕션 빌드 미리보기
|
||||
|
||||
```bash
|
||||
pnpm start
|
||||
```
|
||||
|
||||
## 테스트
|
||||
|
||||
```bash
|
||||
pnpm test
|
||||
```
|
||||
|
||||
[Playwright](https://playwright.dev/)를 사용하여 앱을 테스트합니다.
|
||||
|
||||
## 라이선스
|
||||
|
||||
MIT © [th-ch](https://github.com/th-ch/youtube-music)
|
||||
|
||||
## 자주 묻는 질문
|
||||
|
||||
### 앱 메뉴가 표시되지 않는 이유는 무엇인가요?
|
||||
|
||||
`메뉴 숨기기` 옵션이 켜져 있는 경우 - <kbd>alt</kbd> 키(또는 인앱 메뉴 플러그인을 사용하는 경우 <kbd>\`</kbd> [백틱] 키)로 메뉴를 표시할 수 있습니다.
|
||||
@ -1,374 +0,0 @@
|
||||
<div align="center">
|
||||
|
||||
# YouTube Music
|
||||
|
||||
[](https://github.com/th-ch/youtube-music/releases/)
|
||||
[](https://github.com/th-ch/youtube-music/blob/master/LICENSE)
|
||||
[](https://github.com/th-ch/youtube-music/blob/master/.eslintrc.js)
|
||||
[](https://GitHub.com/th-ch/youtube-music/releases/)
|
||||
[](https://GitHub.com/th-ch/youtube-music/releases/)
|
||||
[](https://aur.archlinux.org/packages/youtube-music-bin)
|
||||
[](https://snyk.io/test/github/th-ch/youtube-music)
|
||||
|
||||
</div>
|
||||
|
||||

|
||||
|
||||
|
||||
<div align="center">
|
||||
<a href="https://github.com/th-ch/youtube-music/releases/latest">
|
||||
<img src="web/youtube-music.svg" width="400" height="100" alt="YouTube Music SVG">
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
**Клиент для YouTube Music основанный на Electron с поддержкой:**
|
||||
|
||||
- Нативный вид приложения, нацелен на сохранение оригинального интерфейса
|
||||
- Фреймворк для пользовательских плагинов: изменяйте YouTube Music под ваши нужды (внешний вид, контент, возможности), включайте/выключайте плагины в один клик
|
||||
|
||||
## Демо-изображение
|
||||
|
||||
| Экран плеера (цветовая тема альбома & режим Ambient) |
|
||||
|:---------------------------------------------------------------------------------------------------------:|
|
||||
||
|
||||
|
||||
## Содержание
|
||||
|
||||
- [Возможности](#features)
|
||||
- [Доступные плагины](#available-plugins)
|
||||
- [Перевод](#translation)
|
||||
- [Скачать](#download)
|
||||
- [Arch Linux](#arch-linux)
|
||||
- [MacOS](#macos)
|
||||
- [Windows](#windows)
|
||||
- [Как установить без подключения к интернету? (в Windows)](#how-to-install-without-a-network-connection-in-windows)
|
||||
- [Темы](#themes)
|
||||
- [Для разработчиков](#dev)
|
||||
- [Создайте свои собственные плагины](#build-your-own-plugins)
|
||||
- [Создание плагина](#creating-a-plugin)
|
||||
- [Примеры использования](#common-use-cases)
|
||||
- [Сборка](#build)
|
||||
- [Предварительный просмотр](#production-preview)
|
||||
- [Тестирование](#tests)
|
||||
- [Лицензия](#license)
|
||||
- [Часто задаваемые вопросы](#faq)
|
||||
|
||||
## Возможности:
|
||||
|
||||
- **Авто-подтверждение при паузе** (Всегда включено): отключает всплывающие уведомление ["Продолжить просмотр?"](https://user-images.githubusercontent.com/61631665/129977894-01c60740-7ec6-4bf0-9a2c-25da24491b0e.png),
|
||||
которое приостанавливает воспроизведение через определённое время
|
||||
|
||||
- И больше ...
|
||||
|
||||
## Доступные плагины:
|
||||
|
||||
- **Блокировщик рекламы**: Блокирует всю рекламу и трекеры
|
||||
|
||||
- **Действия с альбомом**: Добавляет кнопки "Убрать дизлайк", "Дизлайк", "Лайк", "Убрать лайк" и применяет их действия ко всем трекам в плейлисте или альбоме
|
||||
|
||||
- **Цветовая тема альбома**: Применяет динамическую тему и эффекты, основываясь на цветовой палитре альбома
|
||||
|
||||
- **Режим Ambient**: Применяет световой эффект, проецируя нежные цвета из видео на задний фон вашего экрана
|
||||
|
||||
- **Нормализация аудио**: Применяет нормализацию к аудио (уменьшает громкость громких частей трека и повышает громкость тихих частей трека)
|
||||
|
||||
- **Размытие панели навигации**: Делает панель навигации прозрачной и размытой
|
||||
|
||||
- **Обход возрастных ограничений**: Обходит проверку возраста YouTube
|
||||
|
||||
- **Выбор субтитров**: Включить субтитры
|
||||
|
||||
- **Компактная боковая панель**: Всегда показывать боковую панель компактно
|
||||
|
||||
- **Плавный переход**: Плавный переход между треками
|
||||
|
||||
- **Отключить автопроигрыш**: Каждый трек начинается в режиме паузы
|
||||
|
||||
- **[Discord](https://discord.com/) Rich Presence**: Показывает вашим друзьям, что вы слушаете с помощью [Rich Presence](https://user-images.githubusercontent.com/28219076/104362104-a7a0b980-5513-11eb-9744-bb89eabe0016.png)
|
||||
|
||||
- **Загрузчик**: Загрузка MP3 [напрямую из интерфейса](https://user-images.githubusercontent.com/61631665/129977677-83a7d067-c192-45e1-98ae-b5a4927393be.png) [(youtube-dl)](https://github.com/ytdl-org/youtube-dl)
|
||||
|
||||
- **Расширенная громкость**: Делает слайдер громкости [расширенным](https://greasyfork.org/en/scripts/397686-youtube-music-fix-volume-ratio/) облегчая выбор громкости
|
||||
|
||||
- **Меню в приложении**: [Придаёт панели меню красивый тёмный вид](https://user-images.githubusercontent.com/78568641/112215894-923dbf00-8c29-11eb-95c3-3ce15db27eca.png)
|
||||
|
||||
> (посмотрите [этот пост,](https://github.com/th-ch/youtube-music/issues/410#issuecomment-952060709) если у вас есть проблемы с доступом к меню после включения этого плагина и опции "Скрыть меню")
|
||||
|
||||
- **Скробблер**: Добавляет поддержку скробблинга [Last.fm](https://www.last.fm/) и [ListenBrainz](https://listenbrainz.org/)
|
||||
|
||||
- **Lumia Stream**: Добавляет поддержку [Lumia Stream](https://lumiastream.com/)
|
||||
|
||||
- **Тесты песен Genius**: Добавляет поддержку текстов для большинства песен
|
||||
|
||||
- **Music Together**: Делитесь плейлистом с другими. Когда ведущий воспроизводит трек, все остальные будут слушать этот же трек.
|
||||
|
||||
- **Навигация**: Кнопки Назад/Вперед интегрированы в интерфейс, как в вашем любимом браузере
|
||||
|
||||
- **Без входа в систему Google**: Убирает из интерфейса кнопки и ссылки для входа через Google
|
||||
|
||||
- **Уведомления**: Показывает уведомление, когда трек начинает играть ([интерактивные уведомления](https://user-images.githubusercontent.com/78568641/114102651-63ce0e00-98d0-11eb-9dfe-c5a02bb54f9c.png) доступны только для Windows)
|
||||
|
||||
- **Картинка в картинке**: Позволяет переключить приложение в режим "картинка в картинке"
|
||||
|
||||
- **Скорость воспроизведения**: Слушайте быстрее, слушайте медленнее! [Добавляет слайдер для контроля скорости трека](https://user-images.githubusercontent.com/61631665/129976003-e55db5ba-bf42-448c-a059-26a009775e68.png)
|
||||
|
||||
- **Точная громкость**: Точечно управляйте громкостью с помощью колеса мыши/горячих клавиш, с кастомным интерфейсом и настраиваемыми шагами громкости
|
||||
|
||||
- **Ярлыки (и MPRIS)**: Позволяет настроить глобальные горячие клавиши управления воспроизведением (плей/пауза/следующий/предыдущий) + отключает [отображение медиа на экране,](https://user-images.githubusercontent.com/84923831/128601225-afa38c1f-dea8-4209-9f72-0f84c1dd8b54.png) переопределяя клавиши управления + включает Ctrl/CMD + F для поиска + включает поддержку linux mpris для клавиш управления медиа + [настраиваемые сочетания клавиш](https://github.com/Araxeus/youtube-music/blob/1e591d6a3df98449bcda6e63baab249b28026148/providers/song-controls.js#L13-L50) для [продвинутых пользователей](https://github.com/th-ch/youtube-music/issues/106#issuecomment-952156902)
|
||||
|
||||
- **Пропускать непонравившиеся треки**: Пропускает непонравившиеся треки
|
||||
|
||||
- **Пропуск тишины**: Автоматически пропускает тихие моменты в песнях
|
||||
|
||||
- [**SponsorBlock**](https://github.com/ajayyy/SponsorBlock): Автоматически пропускает немузыкальные части, такие как интро/аутро музыкальных видео, где трек не играет
|
||||
|
||||
- **Управление воспроизведением из панели задач**: Управляйте воспроизведением из [панели задач Windows](https://user-images.githubusercontent.com/78568641/111916130-24a35e80-8a82-11eb-80c8-5021c1aa27f4.png)
|
||||
|
||||
- **TouchBar**: Кастомная раскладка TouchBar для MacOS
|
||||
|
||||
- **Tuna OBS**: Интеграция с [OBS](https://obsproject.com/) плагином [Tuna](https://obsproject.com/forum/resources/tuna.843/)
|
||||
|
||||
- **Изменение качества видео**: Позволяет менять качество видео [кнопкой](https://user-images.githubusercontent.com/78568641/138574366-70324a5e-2d64-4f6a-acdd-dc2a2b9cecc5.png) на медиаплеере видео
|
||||
|
||||
- **Переключатель видео**: Добавляет
|
||||
[кнопку](https://user-images.githubusercontent.com/28893833/173663950-63e6610e-a532-49b7-9afa-54cb57ddfc15.png) переключения режимов Трек/Видео. Также может удалять вкладку "Видео" полностью
|
||||
|
||||
- **Визуализатор**: Различные визуализаторы музыки
|
||||
|
||||
- **Synced Lyrics**:
|
||||
Предоставляет синхронизированные слова для песен из таких источников, как [LRClib](https://lrclib.net).
|
||||
|
||||
## Перевод
|
||||
|
||||
Вы можете помочь с переводом на ваш язык на [Hosted Weblate](https://hosted.weblate.org/projects/youtube-music/).
|
||||
|
||||
<a href="https://hosted.weblate.org/engage/youtube-music/">
|
||||
<img src="https://hosted.weblate.org/widget/youtube-music/i18n/multi-auto.svg" alt="translation status" />
|
||||
<img src="https://hosted.weblate.org/widget/youtube-music/i18n/287x66-black.png" alt="translation status 2" />
|
||||
</a>
|
||||
|
||||
## Скачать
|
||||
|
||||
Вы можете посмотреть [latest release,](https://github.com/th-ch/youtube-music/releases/latest) чтобы быстро найти новую версию.
|
||||
|
||||
### Arch Linux
|
||||
|
||||
Установите пакет [`youtube-music-bin`](https://aur.archlinux.org/packages/youtube-music-bin) из AUR. Инструкции по установке из AUR можете найти на этой [вики-странице](https://wiki.archlinux.org/index.php/Arch_User_Repository#Installing_packages).
|
||||
|
||||
### macOS
|
||||
|
||||
Вы можете установить приложение с помощью Homebrew (сморите [cask definition](https://github.com/th-ch/homebrew-youtube-music)):
|
||||
|
||||
```bash
|
||||
brew install th-ch/youtube-music/youtube-music
|
||||
```
|
||||
|
||||
Если вы устанавливаете приложение вручную и получаете ошибку "is damaged and can’t be opened.", запустите в терминале следующую команду:
|
||||
|
||||
```bash
|
||||
xattr -cr /Applications/YouTube\ Music.app
|
||||
```
|
||||
|
||||
### Windows
|
||||
|
||||
Вы можете использовать [пакетный менеджер Scoop](https://scoop.sh) для установки пакета `youtube-music` из [`extras` bucket](https://github.com/ScoopInstaller/Extras).
|
||||
|
||||
```bash
|
||||
scoop bucket add extras
|
||||
scoop install extras/youtube-music
|
||||
```
|
||||
|
||||
Также для установки вы можете использовать [Winget](https://learn.microsoft.com/en-us/windows/package-manager/winget/), официальный пакетный менеджер командной строки Windows 11, для установки пакета `th-ch.YouTubeMusic`.
|
||||
|
||||
*К сведению: SmartScreen защитника Windows может блокировать установку, так как она от "неизвестного издателя". Это также применимо к методу ручной установки, когда вы пытаетесь запустить исполняемый файл(.exe) после загрузки здесь, на GitHub (тот же файл).*
|
||||
|
||||
```bash
|
||||
winget install th-ch.YouTubeMusic
|
||||
```
|
||||
|
||||
#### Установка без подключения к Интернету? (в Windows)
|
||||
|
||||
- Скачайте файл `*.nsis.7z` из _архетиктура вашего устройства_ на [release page](https://github.com/th-ch/youtube-music/releases/latest).
|
||||
- `x64` для 64-bit Windows
|
||||
- `ia32` для 32-bit Windows
|
||||
- `arm64` для ARM64 Windows
|
||||
- Скачайте установщик в release page. (`*-Setup.exe`)
|
||||
- Поместите их в **одной директории**.
|
||||
- Запустите установщик.
|
||||
|
||||
## Темы
|
||||
|
||||
Вы можете загрузить файл CSS для смены внешнего вида приложения (Настройки > Визуальные настройки > Тема).
|
||||
|
||||
Некоторые предустановленные темы доступны здесь: https://github.com/kerichdev/themes-for-ytmdesktop-player.
|
||||
|
||||
## Для разработчиков
|
||||
|
||||
```bash
|
||||
git clone https://github.com/th-ch/youtube-music
|
||||
cd youtube-music
|
||||
pnpm install --frozen-lockfile
|
||||
pnpm dev
|
||||
```
|
||||
|
||||
## Создайте свои собственные плагины
|
||||
|
||||
Используя плагины вы можете:
|
||||
|
||||
- Манипулировать приложением - `BrowserWindow` из electron проброшен обработчику плагинов
|
||||
- Изменять внешний вид, манипулируя HTML/CSS
|
||||
|
||||
### Создание плагина
|
||||
|
||||
Создайте директорию в `src/plugins/YOUR-PLUGIN-NAME`:
|
||||
|
||||
- `index.ts`: основной файл плагина
|
||||
```typescript
|
||||
import style from './style.css?inline'; // import style as inline
|
||||
|
||||
import { createPlugin } from '@/utils';
|
||||
|
||||
export default createPlugin({
|
||||
name: 'Plugin Label',
|
||||
restartNeeded: true, // if value is true, ytmusic show restart dialog
|
||||
config: {
|
||||
enabled: false,
|
||||
}, // your custom config
|
||||
stylesheets: [style], // your custom style,
|
||||
menu: async ({ getConfig, setConfig }) => {
|
||||
// All *Config methods are wrapped Promise<T>
|
||||
const config = await getConfig();
|
||||
return [
|
||||
{
|
||||
label: 'menu',
|
||||
submenu: [1, 2, 3].map((value) => ({
|
||||
label: `value ${value}`,
|
||||
type: 'radio',
|
||||
checked: config.value === value,
|
||||
click() {
|
||||
setConfig({ value });
|
||||
},
|
||||
})),
|
||||
},
|
||||
];
|
||||
},
|
||||
backend: {
|
||||
start({ window, ipc }) {
|
||||
window.maximize();
|
||||
|
||||
// you can communicate with renderer plugin
|
||||
ipc.handle('some-event', () => {
|
||||
return 'hello';
|
||||
});
|
||||
},
|
||||
// it fired when config changed
|
||||
onConfigChange(newConfig) { /* ... */ },
|
||||
// it fired when plugin disabled
|
||||
stop(context) { /* ... */ },
|
||||
},
|
||||
renderer: {
|
||||
async start(context) {
|
||||
console.log(await context.ipc.invoke('some-event'));
|
||||
},
|
||||
// Only renderer available hook
|
||||
onPlayerApiReady(api: YoutubePlayer, context: RendererContext) {
|
||||
// set plugin config easily
|
||||
context.setConfig({ myConfig: api.getVolume() });
|
||||
},
|
||||
onConfigChange(newConfig) { /* ... */ },
|
||||
stop(_context) { /* ... */ },
|
||||
},
|
||||
preload: {
|
||||
async start({ getConfig }) {
|
||||
const config = await getConfig();
|
||||
},
|
||||
onConfigChange(newConfig) {},
|
||||
stop(_context) {},
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
### Примеры использования
|
||||
|
||||
- Кастомный CSS: создайте файл `style.css` в той же директории, затем:
|
||||
|
||||
```typescript
|
||||
// index.ts
|
||||
import style from './style.css?inline'; // import style as inline
|
||||
|
||||
import { createPlugin } from '@/utils';
|
||||
|
||||
export default createPlugin({
|
||||
name: 'Plugin Label',
|
||||
restartNeeded: true, // if value is true, ytmusic will show a restart dialog
|
||||
config: {
|
||||
enabled: false,
|
||||
}, // your custom config
|
||||
stylesheets: [style], // your custom style
|
||||
renderer() {} // define renderer hook
|
||||
});
|
||||
```
|
||||
|
||||
- Если вы хотите изменить HTML:
|
||||
|
||||
```typescript
|
||||
import { createPlugin } from '@/utils';
|
||||
|
||||
export default createPlugin({
|
||||
name: 'Plugin Label',
|
||||
restartNeeded: true, // if value is true, ytmusic will show the restart dialog
|
||||
config: {
|
||||
enabled: false,
|
||||
}, // your custom config
|
||||
renderer() {
|
||||
// Remove the login button
|
||||
document.querySelector(".sign-in-link.ytmusic-nav-bar").remove();
|
||||
} // define renderer hook
|
||||
});
|
||||
```
|
||||
|
||||
- обмен между фронтом и бэком может быть выполнен с помощью модуля ipcMain из electron. Смотрите файл `index.ts` и
|
||||
пример в плагине `sponsorblock`.
|
||||
|
||||
## Сборка
|
||||
|
||||
1. Склонируйте репозиторий
|
||||
2. Следуйте [этой инструкции,](https://pnpm.io/installation) чтобы установить `pnpm`
|
||||
3. Запустите `pnpm install --frozen-lockfile` для установки зависимостей
|
||||
4. Запустите `pnpm build:OS`
|
||||
|
||||
- `pnpm dist:win` - Windows
|
||||
- `pnpm dist:linux` - Linux (amd64)
|
||||
- `pnpm dist:linux:deb-arm64` - Linux (arm64 for Debian)
|
||||
- `pnpm dist:linux:rpm-arm64` - Linux (arm64 for Fedora)
|
||||
- `pnpm dist:mac` - macOS (amd64)
|
||||
- `pnpm dist:mac:arm64` - macOS (arm64)
|
||||
|
||||
Сборка приложения для macOS, Linux, и Windows,
|
||||
используя [electron-builder](https://github.com/electron-userland/electron-builder).
|
||||
|
||||
## Предварительный просмотр
|
||||
|
||||
```bash
|
||||
pnpm start
|
||||
```
|
||||
|
||||
## Тестирование
|
||||
|
||||
```bash
|
||||
pnpm test
|
||||
```
|
||||
|
||||
Использует [Playwright](https://playwright.dev/) для тестирования приложения.
|
||||
|
||||
## Лицензия
|
||||
|
||||
MIT © [th-ch](https://github.com/th-ch/youtube-music)
|
||||
|
||||
## Часто задаваемые вопросы
|
||||
|
||||
### Почему меня приложения не отображается?
|
||||
|
||||
Если опция `Скрыть меню` включена - вы можете отобразить меню с помощью клавиши <kbd>alt</kbd> (или <kbd>\`</kbd> [обратный апостроф], если используете плагин "Меню в приложении")
|
||||
@ -1,53 +0,0 @@
|
||||
/* hebrew */
|
||||
@font-face {
|
||||
font-family: 'Heebo';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: url(https://fonts.gstatic.com/s/heebo/v9/NGS6v5_NC0k9P9H0TbFhsqMA6aw.woff2) format('woff2');
|
||||
unicode-range: U+0590-05FF, U+20AA, U+25CC, U+FB1D-FB4F;
|
||||
}
|
||||
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Heebo';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: url(https://fonts.gstatic.com/s/heebo/v9/NGS6v5_NC0k9P9H2TbFhsqMA.woff2) format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
|
||||
/* hebrew */
|
||||
@font-face {
|
||||
font-family: 'Heebo';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: url(https://fonts.gstatic.com/s/heebo/v9/NGS6v5_NC0k9P9H0TbFhsqMA6aw.woff2) format('woff2');
|
||||
unicode-range: U+0590-05FF, U+20AA, U+25CC, U+FB1D-FB4F;
|
||||
}
|
||||
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Heebo';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: url(https://fonts.gstatic.com/s/heebo/v9/NGS6v5_NC0k9P9H2TbFhsqMA.woff2) format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: 'Oxygen';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: url(https://fonts.gstatic.com/s/oxygen/v10/2sDcZG1Wl4LcnbuCNWgzZmW5Kb8VZBHR.woff2) format('woff2');
|
||||
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Oxygen';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: url(https://fonts.gstatic.com/s/oxygen/v10/2sDcZG1Wl4LcnbuCNWgzaGW5Kb8VZA.woff2) format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
1890
docs/style/style.css
121
electron-builder.yml
Normal file
@ -0,0 +1,121 @@
|
||||
appId: "com.github.th-ch.\u0079\u006f\u0075\u0074\u0075\u0062\u0065\u002d\u006d\u0075\u0073\u0069\u0063"
|
||||
productName: "\u0059\u006f\u0075\u0054\u0075\u0062\u0065\u0020\u004d\u0075\u0073\u0069\u0063"
|
||||
files:
|
||||
- '!*'
|
||||
- dist
|
||||
- assets
|
||||
- license
|
||||
- '!node_modules'
|
||||
- 'node_modules/custom-electron-prompt/**'
|
||||
- 'node_modules/@ghostery/adblocker-electron-preload/**'
|
||||
- 'node_modules/@ffmpeg.wasm/core-mt/**'
|
||||
- '!node_modules/**/*.map'
|
||||
- '!node_modules/**/*.ts'
|
||||
asarUnpack:
|
||||
- assets
|
||||
mac:
|
||||
identity: null
|
||||
target:
|
||||
- target: dmg
|
||||
arch:
|
||||
- x64
|
||||
- arm64
|
||||
icon: assets/generated/icons/mac/icon.icon
|
||||
compression: maximum
|
||||
win:
|
||||
icon: assets/generated/icons/win/icon.ico
|
||||
target:
|
||||
- target: nsis-web
|
||||
arch:
|
||||
- x64
|
||||
- ia32
|
||||
- arm64
|
||||
- target: portable
|
||||
arch:
|
||||
- x64
|
||||
- ia32
|
||||
- arm64
|
||||
compression: maximum
|
||||
nsisWeb:
|
||||
runAfterFinish: false
|
||||
linux:
|
||||
icon: assets/generated/icons/png
|
||||
category: AudioVideo
|
||||
desktop:
|
||||
entry:
|
||||
StartupWMClass: "com.github.th_ch.\u0079\u006f\u0075\u0074\u0075\u0062\u0065\u005f\u006d\u0075\u0073\u0069\u0063"
|
||||
target:
|
||||
- target: AppImage
|
||||
arch:
|
||||
- x64
|
||||
- arm64
|
||||
- armv7l
|
||||
- target: flatpak
|
||||
arch:
|
||||
- x64
|
||||
- target: deb
|
||||
arch:
|
||||
- x64
|
||||
- arm64
|
||||
- armv7l
|
||||
- target: rpm
|
||||
arch:
|
||||
- x64
|
||||
- arm64
|
||||
- target: snap
|
||||
arch:
|
||||
- x64
|
||||
- target: freebsd
|
||||
arch:
|
||||
- x64
|
||||
- arm64
|
||||
- armv7l
|
||||
- target: tar.gz
|
||||
arch:
|
||||
- x64
|
||||
- arm64
|
||||
- armv7l
|
||||
appImage:
|
||||
description: "\u0059\u006f\u0075\u0054\u0075\u0062\u0065\u0020\u004d\u0075\u0073\u0069\u0063 Desktop App bundled with custom plugins"
|
||||
category: AudioVideo
|
||||
flatpak:
|
||||
description: "\u0059\u006f\u0075\u0054\u0075\u0062\u0065\u0020\u004d\u0075\u0073\u0069\u0063 Desktop App bundled with custom plugins"
|
||||
category: AudioVideo
|
||||
runtimeVersion: '24.08'
|
||||
baseVersion: '24.08'
|
||||
finishArgs:
|
||||
- '--socket=wayland'
|
||||
- '--socket=x11'
|
||||
- '--share=ipc'
|
||||
- '--device=dri'
|
||||
- '--socket=pulseaudio'
|
||||
- '--share=network'
|
||||
- '--filesystem=xdg-music:rw'
|
||||
- '--talk-name=org.freedesktop.Notifications'
|
||||
- '--talk-name=org.gnome.SessionManager'
|
||||
- '--talk-name=org.kde.StatusNotifierWatcher'
|
||||
- "--own-name=org.mpris.MediaPlayer2.\u0059\u006f\u0075\u0074\u0075\u0062\u0065\u004d\u0075\u0073\u0069\u0063.*"
|
||||
deb:
|
||||
depends:
|
||||
- libgtk-3-0
|
||||
- libnotify4
|
||||
- libnss3
|
||||
- libxss1
|
||||
- libxtst6
|
||||
- xdg-utils
|
||||
- libatspi2.0-0
|
||||
- libuuid1
|
||||
- libasound2
|
||||
- libgbm1
|
||||
rpm:
|
||||
depends:
|
||||
- /usr/lib64/libuuid.so.1
|
||||
fpm:
|
||||
- '--rpm-rpmbuild-define'
|
||||
- _build_id_links none
|
||||
snap:
|
||||
slots:
|
||||
- mpris:
|
||||
interface: mpris
|
||||
directories:
|
||||
output: ./pack/
|
||||
@ -1,16 +1,17 @@
|
||||
import { resolve, dirname, join } from 'node:path';
|
||||
import { dirname, join, resolve } from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
|
||||
import { UserConfig } from 'vite';
|
||||
import { defineConfig, defineViteConfig } from 'electron-vite';
|
||||
import builtinModules from 'builtin-modules';
|
||||
import viteResolve from 'vite-plugin-resolve';
|
||||
|
||||
import Inspect from 'vite-plugin-inspect';
|
||||
import solidPlugin from 'vite-plugin-solid';
|
||||
import viteResolve from 'vite-plugin-resolve';
|
||||
|
||||
import { withFilter, type UserConfig } from 'vite';
|
||||
|
||||
import { pluginVirtualModuleGenerator } from './vite-plugins/plugin-importer.mjs';
|
||||
import pluginLoader from './vite-plugins/plugin-loader.mjs';
|
||||
|
||||
import { i18nImporter } from './vite-plugins/i18n-importer.mjs';
|
||||
|
||||
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||||
@ -23,6 +24,9 @@ const resolveAlias = {
|
||||
export default defineConfig({
|
||||
main: defineViteConfig(({ mode }) => {
|
||||
const commonConfig: UserConfig = {
|
||||
experimental: {
|
||||
enableNativePlugin: true,
|
||||
},
|
||||
plugins: [
|
||||
pluginLoader('backend'),
|
||||
viteResolve({
|
||||
@ -31,16 +35,17 @@ export default defineConfig({
|
||||
}),
|
||||
],
|
||||
publicDir: 'assets',
|
||||
define: {
|
||||
'__dirname': 'import.meta.dirname',
|
||||
'__filename': 'import.meta.filename',
|
||||
},
|
||||
build: {
|
||||
lib: {
|
||||
entry: 'src/index.ts',
|
||||
formats: ['cjs'],
|
||||
formats: ['es'],
|
||||
},
|
||||
outDir: 'dist/main',
|
||||
commonjsOptions: {
|
||||
ignoreDynamicRequires: true,
|
||||
},
|
||||
rollupOptions: {
|
||||
rolldownOptions: {
|
||||
external: ['electron', 'custom-electron-prompt', ...builtinModules],
|
||||
input: './src/index.ts',
|
||||
},
|
||||
@ -72,6 +77,9 @@ export default defineConfig({
|
||||
}),
|
||||
preload: defineViteConfig(({ mode }) => {
|
||||
const commonConfig: UserConfig = {
|
||||
experimental: {
|
||||
enableNativePlugin: true,
|
||||
},
|
||||
plugins: [
|
||||
pluginLoader('preload'),
|
||||
viteResolve({
|
||||
@ -88,7 +96,7 @@ export default defineConfig({
|
||||
commonjsOptions: {
|
||||
ignoreDynamicRequires: true,
|
||||
},
|
||||
rollupOptions: {
|
||||
rolldownOptions: {
|
||||
external: ['electron', 'custom-electron-prompt', ...builtinModules],
|
||||
input: './src/preload.ts',
|
||||
},
|
||||
@ -120,13 +128,18 @@ export default defineConfig({
|
||||
}),
|
||||
renderer: defineViteConfig(({ mode }) => {
|
||||
const commonConfig: UserConfig = {
|
||||
experimental: {
|
||||
enableNativePlugin: mode !== 'development', // Disable native plugin in development mode to avoid issues with HMR (bug in rolldown-vite)
|
||||
},
|
||||
plugins: [
|
||||
pluginLoader('renderer'),
|
||||
viteResolve({
|
||||
'virtual:i18n': i18nImporter(),
|
||||
'virtual:plugins': pluginVirtualModuleGenerator('renderer'),
|
||||
}),
|
||||
solidPlugin(),
|
||||
withFilter(solidPlugin(), {
|
||||
load: { id: [/\.(tsx|jsx)$/, '/@solid-refresh'] },
|
||||
}),
|
||||
],
|
||||
root: './src/',
|
||||
build: {
|
||||
@ -136,10 +149,7 @@ export default defineConfig({
|
||||
name: 'renderer',
|
||||
},
|
||||
outDir: 'dist/renderer',
|
||||
commonjsOptions: {
|
||||
ignoreDynamicRequires: true,
|
||||
},
|
||||
rollupOptions: {
|
||||
rolldownOptions: {
|
||||
external: ['electron', ...builtinModules],
|
||||
input: './src/index.html',
|
||||
},
|
||||
@ -147,6 +157,12 @@ export default defineConfig({
|
||||
resolve: {
|
||||
alias: resolveAlias,
|
||||
},
|
||||
server: {
|
||||
cors: {
|
||||
origin:
|
||||
'https://music.\u0079\u006f\u0075\u0074\u0075\u0062\u0065.com',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
if (mode === 'development') {
|
||||
|
||||
@ -2,7 +2,8 @@
|
||||
|
||||
import eslint from '@eslint/js';
|
||||
import prettier from 'eslint-plugin-prettier/recommended';
|
||||
import stylistic from '@stylistic/eslint-plugin-js';
|
||||
import solid from 'eslint-plugin-solid/configs/recommended';
|
||||
import stylistic from '@stylistic/eslint-plugin';
|
||||
import tsEslint from 'typescript-eslint';
|
||||
|
||||
import * as importPlugin from 'eslint-plugin-import';
|
||||
@ -12,47 +13,94 @@ export default tsEslint.config(
|
||||
tsEslint.configs.eslintRecommended,
|
||||
...tsEslint.configs.recommendedTypeChecked,
|
||||
prettier,
|
||||
solid,
|
||||
{ ignores: ['dist', 'node_modules', '*.config.*js', '*.test.*js'] },
|
||||
{
|
||||
plugins: {
|
||||
stylistic,
|
||||
importPlugin
|
||||
importPlugin,
|
||||
},
|
||||
languageOptions: {
|
||||
parser: tsEslint.parser,
|
||||
parserOptions: {
|
||||
project: true,
|
||||
project: ['tsconfig.json', 'tsconfig.test.json'],
|
||||
sourceType: 'module',
|
||||
ecmaVersion: 'latest'
|
||||
}
|
||||
ecmaVersion: 'latest',
|
||||
},
|
||||
},
|
||||
rules: {
|
||||
'stylistic/arrow-parens': ['error', 'always'],
|
||||
'stylistic/object-curly-spacing': ['error', 'always'],
|
||||
'prettier/prettier': ['error', { singleQuote: true, semi: true, tabWidth: 2, trailingComma: 'all', quoteProps: 'preserve' }],
|
||||
'stylistic/jsx-pascal-case': 'error',
|
||||
'stylistic/jsx-curly-spacing': [
|
||||
'error',
|
||||
{ when: 'never', children: true },
|
||||
],
|
||||
'stylistic/jsx-sort-props': 'error',
|
||||
'prettier/prettier': [
|
||||
'error',
|
||||
{
|
||||
singleQuote: true,
|
||||
semi: true,
|
||||
tabWidth: 2,
|
||||
trailingComma: 'all',
|
||||
quoteProps: 'preserve',
|
||||
},
|
||||
],
|
||||
'@typescript-eslint/no-floating-promises': 'off',
|
||||
'@typescript-eslint/no-misused-promises': ['off', { checksVoidReturn: false }],
|
||||
'@typescript-eslint/no-unused-vars': ['warn', { argsIgnorePattern: '^_' }],
|
||||
'@typescript-eslint/no-misused-promises': [
|
||||
'off',
|
||||
{ checksVoidReturn: false },
|
||||
],
|
||||
'@typescript-eslint/no-unused-vars': [
|
||||
'warn',
|
||||
{ argsIgnorePattern: '^_' },
|
||||
],
|
||||
'@typescript-eslint/no-non-null-assertion': 'off',
|
||||
'@typescript-eslint/consistent-type-imports': [
|
||||
'error',
|
||||
{
|
||||
fixStyle: 'inline-type-imports',
|
||||
prefer: 'type-imports',
|
||||
disallowTypeAnnotations: false,
|
||||
},
|
||||
],
|
||||
'importPlugin/first': 'error',
|
||||
'importPlugin/newline-after-import': 'off',
|
||||
'importPlugin/no-default-export': 'off',
|
||||
'importPlugin/no-duplicates': 'error',
|
||||
'importPlugin/no-unresolved': ['error', { ignore: ['^virtual:', '\\?inline$', '\\?raw$', '\\?asset&asarUnpack'] }],
|
||||
'importPlugin/order': ['error', {
|
||||
'groups': ['builtin', 'external', ['internal', 'index', 'sibling'], 'parent', 'type'],
|
||||
'newlines-between': 'always-and-inside-groups',
|
||||
'alphabetize': { order: 'ignore', caseInsensitive: false }
|
||||
}],
|
||||
'importPlugin/no-unresolved': [
|
||||
'error',
|
||||
{
|
||||
ignore: ['^virtual:', '\\?inline$', '\\?raw$', '\\?asset&asarUnpack'],
|
||||
},
|
||||
],
|
||||
'importPlugin/order': [
|
||||
'error',
|
||||
{
|
||||
'groups': [
|
||||
'builtin',
|
||||
'external',
|
||||
['internal', 'index', 'sibling'],
|
||||
'parent',
|
||||
'type',
|
||||
],
|
||||
'newlines-between': 'always-and-inside-groups',
|
||||
'alphabetize': { order: 'ignore', caseInsensitive: false },
|
||||
},
|
||||
],
|
||||
'importPlugin/prefer-default-export': 'off',
|
||||
'camelcase': ['error', { properties: 'never' }],
|
||||
'class-methods-use-this': 'off',
|
||||
'stylistic/lines-around-comment': ['error', {
|
||||
beforeBlockComment: false,
|
||||
afterBlockComment: false,
|
||||
beforeLineComment: false,
|
||||
afterLineComment: false,
|
||||
}],
|
||||
'stylistic/lines-around-comment': [
|
||||
'error',
|
||||
{
|
||||
beforeBlockComment: false,
|
||||
afterBlockComment: false,
|
||||
beforeLineComment: false,
|
||||
afterLineComment: false,
|
||||
},
|
||||
],
|
||||
'stylistic/max-len': 'off',
|
||||
'stylistic/no-mixed-operators': 'warn', // prettier does not support no-mixed-operators
|
||||
'stylistic/no-multi-spaces': ['error', { ignoreEOLComments: true }],
|
||||
@ -60,16 +108,20 @@ export default tsEslint.config(
|
||||
'no-void': 'error',
|
||||
'no-empty': 'off',
|
||||
'prefer-promise-reject-errors': 'off',
|
||||
'stylistic/quotes': ['error', 'single', {
|
||||
avoidEscape: true,
|
||||
allowTemplateLiterals: false,
|
||||
}],
|
||||
'stylistic/quotes': [
|
||||
'error',
|
||||
'single',
|
||||
{
|
||||
avoidEscape: true,
|
||||
allowTemplateLiterals: 'never',
|
||||
},
|
||||
],
|
||||
'stylistic/quote-props': ['error', 'consistent'],
|
||||
'stylistic/semi': ['error', 'always'],
|
||||
},
|
||||
settings: {
|
||||
'import/parsers': {
|
||||
'@typescript-eslint/parser': ['.ts']
|
||||
'@typescript-eslint/parser': ['.ts'],
|
||||
},
|
||||
'import/resolver': {
|
||||
typescript: {},
|
||||
|
||||
2
license
@ -1,6 +1,6 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) th-ch <th-ch@users.noreply.github.com> (https://github.com/th-ch/youtube-music)
|
||||
Copyright (c) th-ch <th-ch@users.noreply.github.com> (https://github.com/pear-devs/pear-desktop)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
311
package.json
@ -1,128 +1,29 @@
|
||||
{
|
||||
"name": "youtube-music",
|
||||
"productName": "YouTube Music",
|
||||
"version": "3.6.0",
|
||||
"description": "YouTube Music Desktop App - including custom plugins",
|
||||
"name": "\u0079\u006f\u0075\u0074\u0075\u0062\u0065\u002d\u006d\u0075\u0073\u0069\u0063",
|
||||
"desktopName": "com.github.th_ch.\u0079\u006f\u0075\u0074\u0075\u0062\u0065\u005f\u006d\u0075\u0073\u0069\u0063",
|
||||
"productName": "\u0059\u006f\u0075\u0054\u0075\u0062\u0065\u0020\u004d\u0075\u0073\u0069\u0063",
|
||||
"version": "3.11.0",
|
||||
"description": "\u0059\u006f\u0075\u0054\u0075\u0062\u0065\u0020\u004d\u0075\u0073\u0069\u0063 Desktop App - including custom plugins",
|
||||
"main": "./dist/main/index.js",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
"repository": "th-ch/youtube-music",
|
||||
"repository": "pear-devs/pear-desktop",
|
||||
"author": {
|
||||
"name": "th-ch",
|
||||
"email": "th-ch@users.noreply.github.com",
|
||||
"url": "https://github.com/th-ch/youtube-music"
|
||||
},
|
||||
"build": {
|
||||
"appId": "com.github.th-ch.youtube-music",
|
||||
"productName": "YouTube Music",
|
||||
"files": [
|
||||
"!*",
|
||||
"dist",
|
||||
"assets",
|
||||
"license",
|
||||
"!node_modules",
|
||||
"node_modules/custom-electron-prompt/**",
|
||||
"node_modules/@cliqz/adblocker-electron-preload/**",
|
||||
"node_modules/@ffmpeg.wasm/core-mt/**",
|
||||
"!node_modules/**/*.map",
|
||||
"!node_modules/**/*.ts"
|
||||
],
|
||||
"asarUnpack": [
|
||||
"assets"
|
||||
],
|
||||
"mac": {
|
||||
"identity": null,
|
||||
"target": [
|
||||
{
|
||||
"target": "dmg",
|
||||
"arch": [
|
||||
"x64",
|
||||
"arm64"
|
||||
]
|
||||
}
|
||||
],
|
||||
"icon": "assets/generated/icons/mac/icon.icns"
|
||||
},
|
||||
"win": {
|
||||
"icon": "assets/generated/icons/win/icon.ico",
|
||||
"target": [
|
||||
{
|
||||
"target": "nsis-web",
|
||||
"arch": [
|
||||
"x64",
|
||||
"ia32",
|
||||
"arm64"
|
||||
]
|
||||
},
|
||||
{
|
||||
"target": "portable",
|
||||
"arch": [
|
||||
"x64",
|
||||
"ia32",
|
||||
"arm64"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"nsisWeb": {
|
||||
"runAfterFinish": false
|
||||
},
|
||||
"linux": {
|
||||
"icon": "assets/generated/icons/png",
|
||||
"category": "AudioVideo",
|
||||
"target": [
|
||||
"AppImage",
|
||||
"snap",
|
||||
"freebsd",
|
||||
"deb",
|
||||
"rpm"
|
||||
]
|
||||
},
|
||||
"deb": {
|
||||
"depends": [
|
||||
"libgtk-3-0",
|
||||
"libnotify4",
|
||||
"libnss3",
|
||||
"libxss1",
|
||||
"libxtst6",
|
||||
"xdg-utils",
|
||||
"libatspi2.0-0",
|
||||
"libuuid1",
|
||||
"libasound2",
|
||||
"libgbm1"
|
||||
]
|
||||
},
|
||||
"rpm": {
|
||||
"depends": [
|
||||
"/usr/lib64/libuuid.so.1"
|
||||
],
|
||||
"fpm": [
|
||||
"--rpm-rpmbuild-define",
|
||||
"_build_id_links none"
|
||||
]
|
||||
},
|
||||
"snap": {
|
||||
"slots": [
|
||||
{
|
||||
"mpris": {
|
||||
"interface": "mpris"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"directories": {
|
||||
"output": "./pack/"
|
||||
}
|
||||
"url": "https://github.com/pear-devs/pear-desktop"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "playwright test",
|
||||
"test:debug": "cross-env DEBUG=pw:*,-pw:test:protocol playwright test",
|
||||
"build": "electron-vite build",
|
||||
"test": "pnpm playwright test",
|
||||
"test:debug": "pnpm cross-env DEBUG=pw:*,-pw:test:protocol playwright test",
|
||||
"build": "pnpm electron-vite build",
|
||||
"vite:inspect": "pnpm clean && electron-vite build --mode development && pnpm exec serve .vite-inspect",
|
||||
"start": "electron-vite preview",
|
||||
"start:debug": "cross-env ELECTRON_ENABLE_LOGGING=1 pnpm start",
|
||||
"dev": "cross-env NODE_OPTIONS=--enable-source-maps electron-vite dev --watch",
|
||||
"dev:debug": "cross-env ELECTRON_ENABLE_LOGGING=1 pnpm dev",
|
||||
"clean": "del-cli dist && del-cli pack && del-cli .vite-inspect",
|
||||
"start": "pnpm electron-vite preview",
|
||||
"start:debug": "pnpm cross-env ELECTRON_ENABLE_LOGGING=1 pnpm start",
|
||||
"dev": "pnpm cross-env NODE_ENV=development NODE_OPTIONS=--enable-source-maps electron-vite dev --watch",
|
||||
"dev:renderer": "pnpm cross-env NODE_ENV=development NODE_OPTIONS=--enable-source-maps electron-vite dev",
|
||||
"dev:debug": "pnpm cross-env ELECTRON_ENABLE_LOGGING=1 pnpm dev",
|
||||
"clean": "pnpm del-cli dist && pnpm del-cli pack && pnpm del-cli .vite-inspect",
|
||||
"dist": "pnpm clean && pnpm build && pnpm electron-builder --win --mac --linux -p never",
|
||||
"dist:linux": "pnpm clean && pnpm build && pnpm electron-builder --linux -p never",
|
||||
"dist:linux:deb-arm64": "pnpm clean && pnpm build && pnpm electron-builder --linux deb:arm64 -p never",
|
||||
@ -131,129 +32,151 @@
|
||||
"dist:mac:arm64": "pnpm clean && pnpm build && pnpm electron-builder --mac dmg:arm64 -p never",
|
||||
"dist:win": "pnpm clean && pnpm build && pnpm electron-builder --win -p never",
|
||||
"dist:win:x64": "pnpm clean && pnpm build && pnpm electron-builder --win nsis-web:x64 -p never",
|
||||
"lint": "eslint .",
|
||||
"changelog": "npx --yes auto-changelog",
|
||||
"lint": "pnpm eslint ./src",
|
||||
"changelog": "pnpm dlx auto-changelog",
|
||||
"release:linux": "pnpm clean && pnpm build && pnpm electron-builder --linux -p always -c.snap.publish=github",
|
||||
"release:mac": "pnpm clean && pnpm build && pnpm electron-builder --mac -p always",
|
||||
"release:win": "pnpm clean && pnpm build && pnpm electron-builder --win -p always",
|
||||
"typecheck": "tsc -p tsconfig.json --noEmit"
|
||||
"typecheck": "pnpm tsc -p tsconfig.json --noEmit"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18.0.0",
|
||||
"pnpm": ">=8"
|
||||
"node": ">=22",
|
||||
"pnpm": ">=10"
|
||||
},
|
||||
"pnpm": {
|
||||
"overrides": {
|
||||
"usocket": "1.0.1",
|
||||
"node-gyp": "10.2.0",
|
||||
"vite": "npm:rolldown-vite@7.3.0",
|
||||
"node-gyp": "11.4.2",
|
||||
"xml2js": "0.6.2",
|
||||
"node-fetch": "3.3.2",
|
||||
"@electron/universal": "2.0.1",
|
||||
"@babel/runtime": "7.25.7"
|
||||
"@electron/universal": "3.0.2",
|
||||
"@babel/runtime": "7.28.4"
|
||||
},
|
||||
"patchedDependencies": {
|
||||
"vudio@2.1.1": "patches/vudio@2.1.1.patch",
|
||||
"app-builder-lib@24.13.3": "patches/app-builder-lib@24.13.3.patch"
|
||||
}
|
||||
"@malept/flatpak-bundler@0.4.0": "patches/@malept__flatpak-bundler@0.4.0.patch",
|
||||
"kuromoji@0.1.2": "patches/kuromoji@0.1.2.patch",
|
||||
"file-type@16.5.4": "patches/file-type@16.5.4.patch",
|
||||
"electron-is@3.0.0": "patches/electron-is@3.0.0.patch",
|
||||
"mdui@2.1.4": "patches/mdui@2.1.4.patch"
|
||||
},
|
||||
"neverBuiltDependencies": []
|
||||
},
|
||||
"dependencies": {
|
||||
"@cliqz/adblocker-electron": "1.27.1",
|
||||
"@cliqz/adblocker-electron-preload": "1.27.1",
|
||||
"@dehoist/romanize-thai": "1.0.0",
|
||||
"@electron-toolkit/tsconfig": "1.0.1",
|
||||
"@electron/remote": "2.1.2",
|
||||
"@electron/remote": "2.1.3",
|
||||
"@ffmpeg.wasm/core-mt": "0.12.0",
|
||||
"@ffmpeg.wasm/main": "0.12.0",
|
||||
"@floating-ui/dom": "1.6.11",
|
||||
"@floating-ui/dom": "1.7.4",
|
||||
"@foobar404/wave": "2.0.5",
|
||||
"@hono/node-server": "1.13.2",
|
||||
"@hono/swagger-ui": "0.4.1",
|
||||
"@hono/zod-openapi": "0.16.4",
|
||||
"@hono/zod-validator": "0.4.1",
|
||||
"@jellybrick/electron-better-web-request": "1.0.4",
|
||||
"@jellybrick/mpris-service": "2.1.4",
|
||||
"@jimp/plugin-invert": "0.22.12",
|
||||
"@ghostery/adblocker-electron": "2.11.6",
|
||||
"@ghostery/adblocker-electron-preload": "2.11.6",
|
||||
"@hono/node-server": "1.19.7",
|
||||
"@hono/node-ws": "1.2.0",
|
||||
"@hono/swagger-ui": "0.5.2",
|
||||
"@hono/zod-openapi": "1.2.0",
|
||||
"@hono/zod-validator": "0.7.6",
|
||||
"@jellybrick/dbus-next": "0.10.3",
|
||||
"@jellybrick/electron-better-web-request": "2.0.0",
|
||||
"@jellybrick/mpris-service": "2.1.5",
|
||||
"@jimp/plugin-color": "1.6.0",
|
||||
"@mdui/icons": "^1.0.3",
|
||||
"@skyra/jaro-winkler": "1.1.1",
|
||||
"@xhayper/discord-rpc": "1.2.0",
|
||||
"@xhayper/discord-rpc": "1.3.0",
|
||||
"async-mutex": "0.5.0",
|
||||
"butterchurn": "3.0.0-beta.4",
|
||||
"bgutils-js": "3.2.0",
|
||||
"butterchurn": "3.0.0-beta.5",
|
||||
"butterchurn-presets": "3.0.0-beta.4",
|
||||
"color": "4.2.3",
|
||||
"conf": "13.0.1",
|
||||
"color": "5.0.3",
|
||||
"conf": "14.0.0",
|
||||
"custom-electron-prompt": "1.5.8",
|
||||
"dbus-next": "0.10.2",
|
||||
"deepmerge-ts": "7.1.3",
|
||||
"electron-debug": "4.0.1",
|
||||
"deepmerge-ts": "7.1.5",
|
||||
"delay": "6.0.0",
|
||||
"electron-debug": "4.1.0",
|
||||
"electron-is": "3.0.0",
|
||||
"electron-localshortcut": "3.2.1",
|
||||
"electron-store": "10.0.0",
|
||||
"electron-unhandled": "4.0.1",
|
||||
"electron-updater": "6.3.9",
|
||||
"fast-average-color": "9.4.0",
|
||||
"fast-equals": "5.0.1",
|
||||
"electron-store": "10.1.0",
|
||||
"electron-unhandled": "5.0.0",
|
||||
"electron-updater": "6.6.2",
|
||||
"es-hangul": "2.3.8",
|
||||
"fast-average-color": "9.5.0",
|
||||
"fast-equals": "5.2.2",
|
||||
"fflate": "0.8.2",
|
||||
"filenamify": "6.0.0",
|
||||
"hono": "4.6.4",
|
||||
"hanja": "1.1.5",
|
||||
"happy-dom": "20.0.11",
|
||||
"hono": "4.10.3",
|
||||
"howler": "2.2.4",
|
||||
"html-to-text": "9.0.5",
|
||||
"i18next": "23.15.2",
|
||||
"i18next": "25.5.2",
|
||||
"jimp": "1.6.0",
|
||||
"keyboardevent-from-electron-accelerator": "2.0.0",
|
||||
"keyboardevents-areequal": "0.2.2",
|
||||
"node-html-parser": "6.1.13",
|
||||
"node-id3": "0.2.6",
|
||||
"peerjs": "1.5.4",
|
||||
"semver": "7.6.3",
|
||||
"serve": "14.2.3",
|
||||
"simple-youtube-age-restriction-bypass": "github:organization/Simple-YouTube-Age-Restriction-Bypass#v2.5.9",
|
||||
"kuromoji": "0.1.2",
|
||||
"kuroshiro": "1.2.0",
|
||||
"kuroshiro-analyzer-kuromoji": "1.1.0",
|
||||
"lazy-var": "2.2.2",
|
||||
"mdui": "2.1.4",
|
||||
"node-html-parser": "7.0.1",
|
||||
"node-id3": "0.2.9",
|
||||
"peerjs": "1.5.5",
|
||||
"semver": "7.7.3",
|
||||
"serve": "14.2.5",
|
||||
"socks": "2.8.7",
|
||||
"solid-element": "1.9.1",
|
||||
"solid-floating-ui": "0.3.1",
|
||||
"solid-js": "1.9.2",
|
||||
"solid-js": "1.9.9",
|
||||
"solid-styled-components": "0.28.5",
|
||||
"solid-transition-group": "0.2.3",
|
||||
"ts-morph": "24.0.0",
|
||||
"solid-transition-group": "0.3.0",
|
||||
"tiny-pinyin": "1.3.2",
|
||||
"tinyld": "1.3.4",
|
||||
"virtua": "0.48.2",
|
||||
"vudio": "2.1.1",
|
||||
"x11": "2.3.0",
|
||||
"youtubei.js": "10.5.0",
|
||||
"zod": "3.23.8"
|
||||
"youtubei.js": "^16.0.1",
|
||||
"zod": "4.2.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@eslint/js": "9.12.0",
|
||||
"@playwright/test": "1.48.0",
|
||||
"@stylistic/eslint-plugin-js": "2.9.0",
|
||||
"@electron-toolkit/tsconfig": "1.0.1",
|
||||
"@eslint/js": "9.35.0",
|
||||
"@malept/flatpak-bundler": "0.4.0",
|
||||
"@playwright/test": "1.55.0",
|
||||
"@stylistic/eslint-plugin": "5.3.1",
|
||||
"@total-typescript/ts-reset": "0.6.1",
|
||||
"@types/color": "3.0.6",
|
||||
"@types/electron-localshortcut": "3.1.3",
|
||||
"@types/eslint__js": "8.42.3",
|
||||
"@types/howler": "2.2.12",
|
||||
"@types/html-to-text": "9.0.4",
|
||||
"@types/semver": "7.5.8",
|
||||
"@types/semver": "7.7.1",
|
||||
"@types/trusted-types": "2.0.7",
|
||||
"bufferutil": "4.0.8",
|
||||
"builtin-modules": "4.0.0",
|
||||
"cross-env": "7.0.3",
|
||||
"bufferutil": "4.0.9",
|
||||
"builtin-modules": "5.0.0",
|
||||
"cross-env": "10.0.0",
|
||||
"del-cli": "6.0.0",
|
||||
"discord-api-types": "0.37.101",
|
||||
"electron": "32.2.0",
|
||||
"electron-builder": "24.13.3",
|
||||
"electron-devtools-installer": "3.2.0",
|
||||
"electron-vite": "2.3.0",
|
||||
"esbuild": "0.24.0",
|
||||
"eslint": "9.12.0",
|
||||
"eslint-config-prettier": "9.1.0",
|
||||
"discord-api-types": "0.38.37",
|
||||
"electron": "38.7.2",
|
||||
"electron-builder": "26.4.0",
|
||||
"electron-builder-squirrel-windows": "26.0.12",
|
||||
"electron-devtools-installer": "4.0.0",
|
||||
"electron-vite": "4.0.1",
|
||||
"eslint": "9.35.0",
|
||||
"eslint-config-prettier": "10.1.8",
|
||||
"eslint-import-resolver-exports": "1.0.0-beta.5",
|
||||
"eslint-import-resolver-typescript": "3.6.3",
|
||||
"eslint-plugin-import": "2.31.0",
|
||||
"eslint-plugin-prettier": "5.2.1",
|
||||
"glob": "11.0.0",
|
||||
"node-gyp": "10.2.0",
|
||||
"playwright": "1.48.0",
|
||||
"rollup": "4.24.0",
|
||||
"typescript": "5.6.3",
|
||||
"typescript-eslint": "8.8.1",
|
||||
"utf-8-validate": "6.0.4",
|
||||
"vite": "5.4.8",
|
||||
"vite-plugin-inspect": "0.8.7",
|
||||
"eslint-import-resolver-typescript": "4.4.4",
|
||||
"eslint-plugin-import": "2.32.0",
|
||||
"eslint-plugin-prettier": "5.5.4",
|
||||
"eslint-plugin-solid": "0.14.5",
|
||||
"glob": "11.1.0",
|
||||
"node-gyp": "11.4.2",
|
||||
"ts-morph": "27.0.2",
|
||||
"typescript": "5.9.3",
|
||||
"typescript-eslint": "8.52.0",
|
||||
"utf-8-validate": "6.0.6",
|
||||
"vite": "npm:rolldown-vite@7.3.0",
|
||||
"vite-plugin-inspect": "11.3.3",
|
||||
"vite-plugin-resolve": "2.5.2",
|
||||
"vite-plugin-solid": "2.10.2",
|
||||
"ws": "8.18.0"
|
||||
"vite-plugin-solid": "2.11.10",
|
||||
"ws": "8.18.3"
|
||||
},
|
||||
"auto-changelog": {
|
||||
"hideCredit": true,
|
||||
|
||||
29
patches/@malept__flatpak-bundler@0.4.0.patch
Normal file
@ -0,0 +1,29 @@
|
||||
diff --git a/index.js b/index.js
|
||||
index 5968fcf47b69094993b0f861c03f5560e4a6a9b7..0fe16d4f40612c0abfa57898909ce0083f56944c 100644
|
||||
--- a/index.js
|
||||
+++ b/index.js
|
||||
@@ -56,19 +56,23 @@ function getOptionsWithDefaults (options, manifest) {
|
||||
async function spawnWithLogging (options, command, args, allowFail) {
|
||||
return new Promise((resolve, reject) => {
|
||||
logger(`$ ${command} ${args.join(' ')}`)
|
||||
+ const output = []
|
||||
const child = childProcess.spawn(command, args, { cwd: options['working-dir'] })
|
||||
child.stdout.on('data', (data) => {
|
||||
+ output.push(data)
|
||||
logger(`1> ${data}`)
|
||||
})
|
||||
child.stderr.on('data', (data) => {
|
||||
+ output.push(data)
|
||||
logger(`2> ${data}`)
|
||||
})
|
||||
child.on('error', (error) => {
|
||||
+ logger(`error - ${error.message} ${error.stack}`)
|
||||
reject(error)
|
||||
})
|
||||
child.on('close', (code) => {
|
||||
if (!allowFail && code !== 0) {
|
||||
- reject(new Error(`${command} failed with status code ${code}`))
|
||||
+ reject(new Error(`${command} ${args.join(' ')} failed with status code ${code} ${output.join(' ')}`))
|
||||
}
|
||||
resolve(code === 0)
|
||||
})
|
||||
@ -1,21 +0,0 @@
|
||||
diff --git a/out/targets/snap.js b/out/targets/snap.js
|
||||
index f72c36355d27cd2d69fc5fdf2d8bb2451db0287f..baae112fe25ebb49ab8e25aaa48efd6bc43b598f 100644
|
||||
--- a/out/targets/snap.js
|
||||
+++ b/out/targets/snap.js
|
||||
@@ -212,14 +212,14 @@ class SnapTarget extends core_1.Target {
|
||||
args.push("--template-url", `electron4:${snapArch}`);
|
||||
}
|
||||
await (0, builder_util_1.executeAppBuilder)(args);
|
||||
- const publishConfig = findSnapPublishConfig(this.packager.config);
|
||||
+
|
||||
await packager.info.callArtifactBuildCompleted({
|
||||
file: artifactPath,
|
||||
safeArtifactName: packager.computeSafeArtifactName(artifactName, "snap", arch, false),
|
||||
target: this,
|
||||
arch,
|
||||
packager,
|
||||
- publishConfig: publishConfig == null ? { provider: "snapStore" } : publishConfig,
|
||||
+ publishConfig: options.publish == null ? { provider: "snapStore" } : null,
|
||||
});
|
||||
}
|
||||
isElectronVersionGreaterOrEqualThan(version) {
|
||||
27
patches/electron-is@3.0.0.patch
Normal file
@ -0,0 +1,27 @@
|
||||
diff --git a/is.d.ts b/is.d.ts
|
||||
index fb861f7b401914f0f89cb4edf25c51df5cb05812..82144733cd34d88e2deb2e4713b104418e673f2e 100644
|
||||
--- a/is.d.ts
|
||||
+++ b/is.d.ts
|
||||
@@ -5,6 +5,7 @@ declare namespace is {
|
||||
export function macOS(): boolean;
|
||||
export function windows(): boolean;
|
||||
export function linux(): boolean;
|
||||
+ export function freebsd(): boolean;
|
||||
export function x86(): boolean;
|
||||
export function x64(): boolean;
|
||||
export function production(): boolean;
|
||||
diff --git a/is.js b/is.js
|
||||
index a76bb1755a2728bde185b35d847031d3b8ea4ab0..f6b03406c17342f5af078de069e5bbbd2246e152 100644
|
||||
--- a/is.js
|
||||
+++ b/is.js
|
||||
@@ -39,6 +39,10 @@ module.exports = {
|
||||
linux: function () {
|
||||
return process.platform === 'linux'
|
||||
},
|
||||
+ // Checks if we are under FreeBSD OS
|
||||
+ freebsd: function () {
|
||||
+ return process.platform === "freebsd"
|
||||
+ },
|
||||
// Checks if we are the processor's arch is x86
|
||||
x86: function () {
|
||||
return process.arch === 'ia32'
|
||||
@ -1,161 +0,0 @@
|
||||
diff --git a/lib/importDeclaration.js b/lib/importDeclaration.js
|
||||
index afb4de779034cfea080825a5f4320661c48bee32..f10b0a11a39577fbd42569e6b0e768255c1ef276 100644
|
||||
--- a/lib/importDeclaration.js
|
||||
+++ b/lib/importDeclaration.js
|
||||
@@ -1,5 +1,5 @@
|
||||
-"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports["default"] = importDeclaration;function importDeclaration(context) {
|
||||
- var ancestors = context.getAncestors();
|
||||
+"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports["default"] = importDeclaration;function importDeclaration(context, node) {
|
||||
+ var ancestors = context.getSourceCode().getAncestors(node);
|
||||
return ancestors[ancestors.length - 1];
|
||||
}
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbXBvcnREZWNsYXJhdGlvbi5qcyJdLCJuYW1lcyI6WyJpbXBvcnREZWNsYXJhdGlvbiIsImNvbnRleHQiLCJhbmNlc3RvcnMiLCJnZXRBbmNlc3RvcnMiLCJsZW5ndGgiXSwibWFwcGluZ3MiOiJnR0FBd0JBLGlCLENBQVQsU0FBU0EsaUJBQVQsQ0FBMkJDLE9BQTNCLEVBQW9DO0FBQ2pELE1BQU1DLFlBQVlELFFBQVFFLFlBQVIsRUFBbEI7QUFDQSxTQUFPRCxVQUFVQSxVQUFVRSxNQUFWLEdBQW1CLENBQTdCLENBQVA7QUFDRCIsImZpbGUiOiJpbXBvcnREZWNsYXJhdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGltcG9ydERlY2xhcmF0aW9uKGNvbnRleHQpIHtcbiAgY29uc3QgYW5jZXN0b3JzID0gY29udGV4dC5nZXRBbmNlc3RvcnMoKTtcbiAgcmV0dXJuIGFuY2VzdG9yc1thbmNlc3RvcnMubGVuZ3RoIC0gMV07XG59XG4iXX0=
|
||||
\ No newline at end of file
|
||||
diff --git a/lib/rules/first.js b/lib/rules/first.js
|
||||
index a77168660cf32c8c3e96f3ff4b8240a36d7de3a6..c0e00d75f9989916057fef3999eeee8d21820292 100644
|
||||
--- a/lib/rules/first.js
|
||||
+++ b/lib/rules/first.js
|
||||
@@ -66,7 +66,7 @@ module.exports = {
|
||||
}
|
||||
}
|
||||
if (nonImportCount > 0) {var _iteratorNormalCompletion = true;var _didIteratorError = false;var _iteratorError = undefined;try {
|
||||
- for (var _iterator = context.getDeclaredVariables(node)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {var variable = _step.value;
|
||||
+ for (var _iterator = sourceCode.getDeclaredVariables(node)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {var variable = _step.value;
|
||||
if (!shouldSort) {break;}
|
||||
var references = variable.references;
|
||||
if (references.length) {var _iteratorNormalCompletion2 = true;var _didIteratorError2 = false;var _iteratorError2 = undefined;try {
|
||||
diff --git a/lib/rules/namespace.js b/lib/rules/namespace.js
|
||||
index 574d89a60d15c7e0e712956ea6a3ad2d0eac7f08..82e7cb3cff4246592d762cce86323f2b72de92e4 100644
|
||||
--- a/lib/rules/namespace.js
|
||||
+++ b/lib/rules/namespace.js
|
||||
@@ -86,7 +86,7 @@ module.exports = {
|
||||
|
||||
// same as above, but does not add names to local map
|
||||
ExportNamespaceSpecifier: function () {function ExportNamespaceSpecifier(namespace) {
|
||||
- var declaration = (0, _importDeclaration2['default'])(context);
|
||||
+ var declaration = (0, _importDeclaration2['default'])(context, namespace);
|
||||
|
||||
var imports = _ExportMap2['default'].get(declaration.source.value, context);
|
||||
if (imports == null) {return null;}
|
||||
diff --git a/lib/rules/newline-after-import.js b/lib/rules/newline-after-import.js
|
||||
index 6cc15686464a17803a0b976c35b99627cdbfabee..520eec6d9a375527ab72c459960fe4416c046c17 100644
|
||||
--- a/lib/rules/newline-after-import.js
|
||||
+++ b/lib/rules/newline-after-import.js
|
||||
@@ -194,7 +194,7 @@ module.exports = {
|
||||
}return CallExpression;}(),
|
||||
'Program:exit': function () {function ProgramExit() {
|
||||
log('exit processing for', context.getPhysicalFilename ? context.getPhysicalFilename() : context.getFilename());
|
||||
- var scopeBody = getScopeBody(context.getScope());
|
||||
+ var scopeBody = getScopeBody(context.getSourceCode().getScope(node));
|
||||
log('got scope:', scopeBody);
|
||||
|
||||
requireCalls.forEach(function (node, index) {
|
||||
diff --git a/lib/rules/no-amd.js b/lib/rules/no-amd.js
|
||||
index 7ac108bf812ca4f78bfa6fe5ae8b9cf38e2ff497..346c3105dc70f72c4d76fcc6b96b946d1d4ec6d5 100644
|
||||
--- a/lib/rules/no-amd.js
|
||||
+++ b/lib/rules/no-amd.js
|
||||
@@ -23,7 +23,7 @@ module.exports = {
|
||||
create: function () {function create(context) {
|
||||
return {
|
||||
CallExpression: function () {function CallExpression(node) {
|
||||
- if (context.getScope().type !== 'module') {return;}
|
||||
+ if (context.getSourceCode().getScope(node).type !== 'module') {return;}
|
||||
|
||||
if (node.callee.type !== 'Identifier') {return;}
|
||||
if (node.callee.name !== 'require' && node.callee.name !== 'define') {return;}
|
||||
diff --git a/lib/rules/no-commonjs.js b/lib/rules/no-commonjs.js
|
||||
index befeff0026d61d3ac1e6bbcea29f5c471dc1d353..e91c5ed34e968d5867e884ea800e166cda345aef 100644
|
||||
--- a/lib/rules/no-commonjs.js
|
||||
+++ b/lib/rules/no-commonjs.js
|
||||
@@ -107,7 +107,7 @@ module.exports = {
|
||||
|
||||
// exports.
|
||||
if (node.object.name === 'exports') {
|
||||
- var isInScope = context.getScope().
|
||||
+ var isInScope = context.getSourceCode().getScope(node).
|
||||
variables.
|
||||
some(function (variable) {return variable.name === 'exports';});
|
||||
if (!isInScope) {
|
||||
@@ -117,7 +117,7 @@ module.exports = {
|
||||
|
||||
}return MemberExpression;}(),
|
||||
CallExpression: function () {function CallExpression(call) {
|
||||
- if (!validateScope(context.getScope())) {return;}
|
||||
+ if (!validateScope(context.getSourceCode().getScope(call))) {return;}
|
||||
|
||||
if (call.callee.type !== 'Identifier') {return;}
|
||||
if (call.callee.name !== 'require') {return;}
|
||||
diff --git a/lib/rules/no-mutable-exports.js b/lib/rules/no-mutable-exports.js
|
||||
index 40bd1b4cfa95d41732bb13bba0ed1969a91cc7ff..8a25abfbfadb299204b36a6cbf283259bcc2e790 100644
|
||||
--- a/lib/rules/no-mutable-exports.js
|
||||
+++ b/lib/rules/no-mutable-exports.js
|
||||
@@ -32,7 +32,7 @@ module.exports = {
|
||||
}
|
||||
|
||||
function handleExportDefault(node) {
|
||||
- var scope = context.getScope();
|
||||
+ var scope = context.getSourceCode().getScope(node);
|
||||
|
||||
if (node.declaration.name) {
|
||||
checkDeclarationsInScope(scope, node.declaration.name);
|
||||
@@ -40,7 +40,7 @@ module.exports = {
|
||||
}
|
||||
|
||||
function handleExportNamed(node) {
|
||||
- var scope = context.getScope();
|
||||
+ var scope = context.getSourceCode().getScope(node);
|
||||
|
||||
if (node.declaration) {
|
||||
checkDeclaration(node.declaration);
|
||||
diff --git a/lib/rules/no-named-as-default-member.js b/lib/rules/no-named-as-default-member.js
|
||||
index 0c15051e027ad7d1d45f1b51c20be1c000b0af01..5b3d6ba415511b7f9f83a52e1acfebe5a1045a7b 100644
|
||||
--- a/lib/rules/no-named-as-default-member.js
|
||||
+++ b/lib/rules/no-named-as-default-member.js
|
||||
@@ -35,7 +35,7 @@ module.exports = {
|
||||
|
||||
return {
|
||||
ImportDefaultSpecifier: function () {function ImportDefaultSpecifier(node) {
|
||||
- var declaration = (0, _importDeclaration2['default'])(context);
|
||||
+ var declaration = (0, _importDeclaration2['default'])(context, node);
|
||||
var exportMap = _ExportMap2['default'].get(declaration.source.value, context);
|
||||
if (exportMap == null) {return;}
|
||||
|
||||
diff --git a/lib/rules/no-named-as-default.js b/lib/rules/no-named-as-default.js
|
||||
index 63378a33a1c7da004c57a524cec1a1cddf23e210..c81b1f93b11628676158b79f1c4015911943cc7d 100644
|
||||
--- a/lib/rules/no-named-as-default.js
|
||||
+++ b/lib/rules/no-named-as-default.js
|
||||
@@ -18,7 +18,7 @@ module.exports = {
|
||||
// #566: default is a valid specifier
|
||||
if (defaultSpecifier[nameKey].name === 'default') {return;}
|
||||
|
||||
- var declaration = (0, _importDeclaration2['default'])(context);
|
||||
+ var declaration = (0, _importDeclaration2['default'])(context, defaultSpecifier);
|
||||
|
||||
var imports = _ExportMap2['default'].get(declaration.source.value, context);
|
||||
if (imports == null) {return;}
|
||||
diff --git a/lib/rules/no-namespace.js b/lib/rules/no-namespace.js
|
||||
index 2b0c783adea788101b779b17f977bbcb582cfd3f..a7f7b202ac7c4a342febef2a993586c4cc84fc7a 100644
|
||||
--- a/lib/rules/no-namespace.js
|
||||
+++ b/lib/rules/no-namespace.js
|
||||
@@ -43,7 +43,7 @@ var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_doc
|
||||
return;
|
||||
}
|
||||
|
||||
- var scopeVariables = context.getScope().variables;
|
||||
+ var scopeVariables = context.getSourceCode().getScope(node).variables;
|
||||
var namespaceVariable = scopeVariables.find(function (variable) {return variable.defs[0].node === node;});
|
||||
var namespaceReferences = namespaceVariable.references;
|
||||
var namespaceIdentifiers = namespaceReferences.map(function (reference) {return reference.identifier;});
|
||||
diff --git a/package.json b/package.json
|
||||
index 5c0af48543483a21791fa23a4a583071d3551772..5deeac3d0accc3878ef0fc93dfb52a8ca7c46e84 100644
|
||||
--- a/package.json
|
||||
+++ b/package.json
|
||||
@@ -72,7 +72,7 @@
|
||||
"chai": "^4.3.10",
|
||||
"cross-env": "^4.0.0",
|
||||
"escope": "^3.6.0",
|
||||
- "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8",
|
||||
+ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9",
|
||||
"eslint-doc-generator": "^1.6.1",
|
||||
"eslint-import-resolver-node": "file:./resolvers/node",
|
||||
"eslint-import-resolver-typescript": "^1.0.2 || ^1.1.1",
|
||||
14
patches/file-type@16.5.4.patch
Normal file
@ -0,0 +1,14 @@
|
||||
diff --git a/core.js b/core.js
|
||||
index d653e66a4056c27cca777d4e25222acae3b2ec85..a91741d67df85fd9627889a6c7197ac4e6a3a813 100644
|
||||
--- a/core.js
|
||||
+++ b/core.js
|
||||
@@ -1415,8 +1415,7 @@ async function _fromTokenizer(tokenizer) {
|
||||
}
|
||||
|
||||
const stream = readableStream => new Promise((resolve, reject) => {
|
||||
- // Using `eval` to work around issues when bundling with Webpack
|
||||
- const stream = eval('require')('stream'); // eslint-disable-line no-eval
|
||||
+ const stream = require('node:stream');
|
||||
|
||||
readableStream.on('error', reject);
|
||||
readableStream.once('readable', async () => {
|
||||
6738
patches/kuromoji@0.1.2.patch
Normal file
40
patches/mdui@2.1.4.patch
Normal file
@ -0,0 +1,40 @@
|
||||
diff --git a/jsx.en.d.ts b/jsx.en.d.ts
|
||||
index 514d455dcdb436aaf7b2ee88deaefe01943c8b4b..48dff045dead4315936afd931336198996c88217 100644
|
||||
--- a/jsx.en.d.ts
|
||||
+++ b/jsx.en.d.ts
|
||||
@@ -1,12 +1,8 @@
|
||||
-import React from 'react';
|
||||
import { JQ } from '@mdui/jq';
|
||||
|
||||
-type HTMLElementProps = React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
|
||||
+type HTMLElementProps = import("solid-js").JSX.HTMLAttributes<HTMLElement>;
|
||||
|
||||
-declare global {
|
||||
- namespace React {
|
||||
- namespace JSX {
|
||||
- interface IntrinsicElements {
|
||||
+export interface IntrinsicElements {
|
||||
/**
|
||||
* Avatar Component
|
||||
*
|
||||
@@ -3296,7 +3292,4 @@ declare global {
|
||||
*/
|
||||
'order'?: number;
|
||||
} & HTMLElementProps;
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
}
|
||||
diff --git a/package.json b/package.json
|
||||
index 3fa3eeb471ce4c31d7ac1c9bcb2d6823947e91ca..c4b062020bf20b8db34ccfea500fa682a4af19a6 100644
|
||||
--- a/package.json
|
||||
+++ b/package.json
|
||||
@@ -60,5 +60,8 @@
|
||||
"tslib": "^2.8.1",
|
||||
"@mdui/shared": "^1.0.8",
|
||||
"@mdui/jq": "^3.0.3"
|
||||
+ },
|
||||
+ "peerDependencies": {
|
||||
+ "solid-js": "^1.9.7"
|
||||
}
|
||||
}
|
||||
7598
pnpm-lock.yaml
generated
@ -1,8 +1,6 @@
|
||||
{
|
||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||
"extends": [
|
||||
"config:base"
|
||||
],
|
||||
"extends": ["config:recommended"],
|
||||
"labels": ["dependencies"],
|
||||
"postUpdateOptions": ["pnpmDedupe"]
|
||||
}
|
||||
|
||||
@ -12,8 +12,8 @@ export interface DefaultConfig {
|
||||
'window-size': WindowSizeConfig;
|
||||
'window-maximized': boolean;
|
||||
'window-position': WindowPositionConfig;
|
||||
url: string;
|
||||
options: {
|
||||
'url': string;
|
||||
'options': {
|
||||
language?: string;
|
||||
tray: boolean;
|
||||
appVisible: boolean;
|
||||
@ -31,14 +31,16 @@ export interface DefaultConfig {
|
||||
likeButtons: string;
|
||||
proxy: string;
|
||||
startingPage: string;
|
||||
backgroundMaterial?: 'none' | 'mica' | 'acrylic' | 'tabbed';
|
||||
overrideUserAgent: boolean;
|
||||
usePodcastParticipantAsArtist: boolean;
|
||||
themes: string[];
|
||||
customWindowTitle?: string;
|
||||
};
|
||||
plugins: Record<string, unknown>;
|
||||
'plugins': Record<string, unknown>;
|
||||
}
|
||||
|
||||
const defaultConfig: DefaultConfig = {
|
||||
export const defaultConfig: DefaultConfig = {
|
||||
'window-size': {
|
||||
width: 1100,
|
||||
height: 550,
|
||||
@ -48,7 +50,7 @@ const defaultConfig: DefaultConfig = {
|
||||
x: -1,
|
||||
y: -1,
|
||||
},
|
||||
'url': 'https://music.youtube.com',
|
||||
'url': 'https://music.\u0079\u006f\u0075\u0074\u0075\u0062\u0065.com',
|
||||
'options': {
|
||||
tray: false,
|
||||
appVisible: true,
|
||||
@ -72,5 +74,3 @@ const defaultConfig: DefaultConfig = {
|
||||
},
|
||||
'plugins': {},
|
||||
};
|
||||
|
||||
export default defaultConfig;
|
||||
|
||||
@ -1,30 +1,36 @@
|
||||
import { deepmergeCustom } from 'deepmerge-ts';
|
||||
|
||||
import defaultConfig from './defaults';
|
||||
|
||||
import store, { IStore } from './store';
|
||||
import plugins from './plugins';
|
||||
|
||||
import { store, type IStore } from './store';
|
||||
import { restart } from '@/providers/app-controls';
|
||||
|
||||
import type { defaultConfig } from './defaults';
|
||||
|
||||
const deepmerge = deepmergeCustom({
|
||||
mergeArrays: false,
|
||||
});
|
||||
|
||||
const set = (key: string, value: unknown) => {
|
||||
export { defaultConfig } from './defaults';
|
||||
export * as plugins from './plugins';
|
||||
|
||||
export const set = (key: string, value: unknown) => {
|
||||
store.set(key, value);
|
||||
};
|
||||
const setPartial = (key: string, value: object, defaultValue?: object) => {
|
||||
|
||||
export const setPartial = (
|
||||
key: string,
|
||||
value: object,
|
||||
defaultValue?: object,
|
||||
) => {
|
||||
const newValue = deepmerge(defaultValue ?? {}, store.get(key) ?? {}, value);
|
||||
store.set(key, newValue);
|
||||
};
|
||||
|
||||
function setMenuOption(key: string, value: unknown) {
|
||||
export const setMenuOption = (key: string, value: unknown) => {
|
||||
set(key, value);
|
||||
if (store.get('options.restartOnConfigChanges')) {
|
||||
restart();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// MAGIC OF TYPESCRIPT
|
||||
|
||||
@ -74,18 +80,11 @@ type PathValue<T, K extends string> =
|
||||
? PathValue<T[A], B>
|
||||
: T;
|
||||
|
||||
const get = <Key extends Paths<typeof defaultConfig>>(key: Key) =>
|
||||
export const get = <Key extends Paths<typeof defaultConfig>>(key: Key) =>
|
||||
store.get(key) as PathValue<typeof defaultConfig, typeof key>;
|
||||
|
||||
export default {
|
||||
defaultConfig,
|
||||
get,
|
||||
set,
|
||||
setPartial,
|
||||
setMenuOption,
|
||||
edit: () => store.openInEditor(),
|
||||
watch(cb: Parameters<IStore['onDidAnyChange']>[0]) {
|
||||
store.onDidAnyChange(cb);
|
||||
},
|
||||
plugins,
|
||||
export const edit = () => store.openInEditor();
|
||||
|
||||
export const watch = (cb: Parameters<IStore['onDidAnyChange']>[0]) => {
|
||||
store.onDidAnyChange(cb);
|
||||
};
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import { deepmerge } from 'deepmerge-ts';
|
||||
import { allPlugins } from 'virtual:plugins';
|
||||
|
||||
import store from './store';
|
||||
import { store } from './store';
|
||||
|
||||
import { restart } from '@/providers/app-controls';
|
||||
|
||||
@ -11,9 +11,9 @@ export function getPlugins() {
|
||||
return store.get('plugins') as Record<string, PluginConfig>;
|
||||
}
|
||||
|
||||
export function isEnabled(plugin: string) {
|
||||
export async function isEnabled(plugin: string) {
|
||||
const pluginConfig = deepmerge(
|
||||
allPlugins[plugin].config ?? { enabled: false },
|
||||
(await allPlugins())[plugin]?.config ?? { enabled: false },
|
||||
(store.get('plugins') as Record<string, PluginConfig>)[plugin] ?? {},
|
||||
);
|
||||
return pluginConfig !== undefined && pluginConfig.enabled;
|
||||
@ -68,13 +68,3 @@ export function enable(plugin: string) {
|
||||
export function disable(plugin: string) {
|
||||
setMenuOptions(plugin, { enabled: false }, []);
|
||||
}
|
||||
|
||||
export default {
|
||||
isEnabled,
|
||||
getPlugins,
|
||||
enable,
|
||||
disable,
|
||||
setOptions,
|
||||
setMenuOptions,
|
||||
getOptions,
|
||||
};
|
||||
|
||||
@ -1,13 +1,42 @@
|
||||
import Store from 'electron-store';
|
||||
|
||||
import defaults from './defaults';
|
||||
import { defaultConfig as defaults } from './defaults';
|
||||
|
||||
import { DefaultPresetList, type Preset } from '@/plugins/downloader/types';
|
||||
|
||||
// prettier-ignore
|
||||
export type IStore = InstanceType<typeof import('conf/dist/source/index').default<Record<string, unknown>>>;
|
||||
import type { SyncedLyricsPluginConfig } from '@/plugins/synced-lyrics/types';
|
||||
|
||||
export type IStore = InstanceType<
|
||||
typeof import('conf').default<Record<string, unknown>>
|
||||
>;
|
||||
|
||||
const migrations = {
|
||||
'>=3.10.0'(store: IStore) {
|
||||
const lyricGeniusConfig = store.get('plugins.lyrics-genius') as
|
||||
| {
|
||||
enabled?: boolean;
|
||||
romanizedLyrics?: boolean;
|
||||
}
|
||||
| undefined;
|
||||
|
||||
if (lyricGeniusConfig) {
|
||||
const syncedLyricsConfig = store.get('plugins.synced-lyrics') as
|
||||
| SyncedLyricsPluginConfig
|
||||
| undefined;
|
||||
|
||||
if (
|
||||
!syncedLyricsConfig ||
|
||||
syncedLyricsConfig?.enabled !== lyricGeniusConfig?.enabled
|
||||
) {
|
||||
store.set('plugins.synced-lyrics', {
|
||||
...syncedLyricsConfig,
|
||||
enabled: lyricGeniusConfig.enabled,
|
||||
});
|
||||
}
|
||||
|
||||
store.delete('plugins.lyrics-genius');
|
||||
}
|
||||
},
|
||||
'>=3.3.0'(store: IStore) {
|
||||
const lastfmConfig = store.get('plugins.lastfm') as {
|
||||
enabled?: boolean;
|
||||
@ -83,7 +112,10 @@ const migrations = {
|
||||
'>=2.1.3'(store: IStore) {
|
||||
const listenAlong = store.get('plugins.discord.listenAlong');
|
||||
if (listenAlong !== undefined) {
|
||||
store.set('plugins.discord.playOnYouTubeMusic', listenAlong);
|
||||
store.set(
|
||||
'plugins.discord.playOn\u0059\u006f\u0075\u0054\u0075\u0062\u0065\u004d\u0075\u0073\u0069\u0063',
|
||||
listenAlong,
|
||||
);
|
||||
store.delete('plugins.discord.listenAlong');
|
||||
}
|
||||
},
|
||||
@ -228,7 +260,7 @@ const migrations = {
|
||||
},
|
||||
};
|
||||
|
||||
export default new Store({
|
||||
export const store = new Store({
|
||||
defaults: {
|
||||
...defaults,
|
||||
// README: 'plugin' uses deepmerge to populate the default values, so it is not necessary to include it here
|
||||
|
||||
2
src/custom-electron-prompt.d.ts
vendored
@ -1,5 +1,5 @@
|
||||
declare module 'custom-electron-prompt' {
|
||||
import { BrowserWindow } from 'electron';
|
||||
import { type BrowserWindow } from 'electron';
|
||||
|
||||
export type SelectOptions = Record<string, string>;
|
||||
|
||||
|
||||
@ -2,9 +2,12 @@ import i18next, { init, t as i18t, changeLanguage } from 'i18next';
|
||||
|
||||
import { languageResources } from 'virtual:i18n';
|
||||
|
||||
export const APPLICATION_NAME =
|
||||
'\u0059\u006f\u0075\u0054\u0075\u0062\u0065\u0020\u004d\u0075\u0073\u0069\u0063';
|
||||
|
||||
export const loadI18n = async () =>
|
||||
await init({
|
||||
resources: languageResources,
|
||||
resources: await languageResources(),
|
||||
lng: 'en',
|
||||
fallbackLng: 'en',
|
||||
interpolation: {
|
||||
|
||||
@ -2,9 +2,9 @@ export interface LanguageResources {
|
||||
[lang: string]: {
|
||||
translation: Record<string, unknown> & {
|
||||
language?: {
|
||||
name: string;
|
||||
'name': string;
|
||||
'local-name': string;
|
||||
code: string;
|
||||
'code': string;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@ -2,10 +2,10 @@
|
||||
"common": {
|
||||
"console": {
|
||||
"plugins": {
|
||||
"execute-failed": "فشل تشغيل الاضافة {{pluginName}}::{{contextName}}",
|
||||
"executed-at-ms": "تم تشغيل الاضافة {{pluginName}}::{{contextName}} خلال {{ms}} جزء من الثانية",
|
||||
"initialize-failed": "فشل تنفيذ الاضافة \"{{pluginName}}\"",
|
||||
"load-all": "جاري تحميل جميع الاضافات",
|
||||
"execute-failed": "فشل بدأ الاضافة {{pluginName}}::{{contextName}}",
|
||||
"executed-at-ms": "تم بدأ الاضافة {{pluginName}}::{{contextName}} خلال {{ms}} جزء من الثانية",
|
||||
"initialize-failed": "فشل تشغيل الاضافة \"{{pluginName}}\"",
|
||||
"load-all": "جار تحميل جميع الاضافات",
|
||||
"load-failed": "فشل في تحميل الاضافة \"{{pluginName}}\"",
|
||||
"loaded": "تم تحميل الاضافة \"{{pluginName}}\"",
|
||||
"unload-failed": "فشل ازالة الاضافة \"{{pluginName}}\"",
|
||||
@ -30,21 +30,21 @@
|
||||
"receive-command": "تم الحصول على أمر عن طريق: \"{{command}}\""
|
||||
},
|
||||
"theme": {
|
||||
"css-file-not-found": "ملف \"{{cssFile}}\" غير متواجد,سيتم التجاهل"
|
||||
"css-file-not-found": "ملف \"{{cssFile}}\" غير متواجد، سيتم التجاهل"
|
||||
},
|
||||
"unresponsive": {
|
||||
"details": "خطء عدم استجابة!\n{{error}}"
|
||||
},
|
||||
"when-ready": {
|
||||
"clearing-cache-after-20s": "ازالة بيانات التطبيق المخزنة"
|
||||
"clearing-cache-after-20s": "ازالة ذاكرة التخزين المؤقت للتطبيق"
|
||||
},
|
||||
"window": {
|
||||
"tried-to-render-offscreen": "تم محاولة فتح الصفحة خارج الشاشة, حجم الصفحة={{windowSize}}, حجم الشاشة={{displaySize}}, مكان={{position}}"
|
||||
"tried-to-render-offscreen": "تم محاولة فتح الصفحة خارج الشاشة, حجم الصفحة={{windowSize}}, حجم النافذة={{displaySize}}, المكان={{position}}"
|
||||
}
|
||||
},
|
||||
"dialog": {
|
||||
"hide-menu-enabled": {
|
||||
"detail": "تم اخفاء القائمة, استخدم 'Alt' لاظهار القائمة (أو 'Escape' اذا كنت تستخدم القائمة داخل التطبيق)",
|
||||
"detail": "تم اخفاء القائمة, استخدم 'Alt' لاظهار القائمة (أو 'Escape' اذا كنت تستخدم القائمة التي داخل التطبيق)",
|
||||
"message": "اخفاء القائمة مفعل",
|
||||
"title": "تم تفعيل اخفاء القائمة"
|
||||
},
|
||||
@ -65,27 +65,27 @@
|
||||
},
|
||||
"detail": "نأسف على الإزعاج! يرجى اختيار ما يجب القيام به:",
|
||||
"message": "التطبيق لا يستجيب",
|
||||
"title": "الصفحة لا تستجيب"
|
||||
"title": "النافذة لا تستجيب"
|
||||
},
|
||||
"update-available": {
|
||||
"buttons": {
|
||||
"disable": "ايقاف التحديثات",
|
||||
"download": "تحميل",
|
||||
"ok": "موافق"
|
||||
"download": "تنزيل",
|
||||
"ok": "حسنا"
|
||||
},
|
||||
"detail": "يوجد نسخة جديدة يمكن تحميلها من خلال {{downloadLink}}",
|
||||
"message": "يوجد نسخة حديثة",
|
||||
"detail": "يوجد نسخة جديدة يمكن تنزيلها من {{downloadLink}}",
|
||||
"message": "يوجد نسخة جديدة",
|
||||
"title": "يوجد تحديث"
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"about": "عنا",
|
||||
"navigation": {
|
||||
"label": "التنقل",
|
||||
"label": "شريط التنقل",
|
||||
"submenu": {
|
||||
"copy-current-url": "نسخ الرابط الحالي",
|
||||
"go-back": "العودة للخلف",
|
||||
"go-forward": "التقدم",
|
||||
"go-back": "عودة",
|
||||
"go-forward": "تقدم",
|
||||
"quit": "الخروج",
|
||||
"restart": "اعادة تشغيل التطبيق"
|
||||
}
|
||||
@ -96,28 +96,28 @@
|
||||
"advanced-options": {
|
||||
"label": "الاعدادات المتقدمة",
|
||||
"submenu": {
|
||||
"auto-reset-app-cache": "إعادة تعيين ذاكرة التخزين المؤقت للتطبيق عند بدء التشغيل",
|
||||
"disable-hardware-acceleration": "تعطيل تسريع الأجهزة",
|
||||
"auto-reset-app-cache": "إعادة ضبط ذاكرة التخزين المؤقت للتطبيق عند بدء التشغيل",
|
||||
"disable-hardware-acceleration": "اطفاء تسريع الأجهزة",
|
||||
"edit-config-json": "تعديل ملف الاعدادات",
|
||||
"override-user-agent": "تجاوز وكيل المستخدم",
|
||||
"restart-on-config-changes": "اعادة التشغيل بعد تعديل الاعدادات",
|
||||
"set-proxy": {
|
||||
"label": "تعيين الوكيل",
|
||||
"prompt": {
|
||||
"label": "أدخل عنوان الوكيل: (اتركه فارغًا للتعطيل)",
|
||||
"label": "أدخل عنوان الوكيل: (اتركه فارغًا لإطفائه)",
|
||||
"placeholder": "مثال: SOCKS5://127.0.0.1:9999",
|
||||
"title": "اضافة الوكيل"
|
||||
"title": "ضع proxy"
|
||||
}
|
||||
},
|
||||
"toggle-dev-tools": "تثبيت أدوات التطوير"
|
||||
}
|
||||
},
|
||||
"always-on-top": "دائما في القمة",
|
||||
"always-on-top": "دائما في المقدمة",
|
||||
"auto-update": "تحديث تلقائي",
|
||||
"hide-menu": {
|
||||
"dialog": {
|
||||
"message": "سيتم إخفاء القائمة عند التشغيل التالي، استخدم [Alt] لإظهارها (أو ضع علامة اختيار على [`] في حالة استخدام القائمة داخل التطبيق)",
|
||||
"title": "إخفاء القائمة ممكن"
|
||||
"message": "سيتم إخفاء القائمة عند التشغيل التالي، استخدم [Alt] لإظهارها (أو اضغط [`] في حالة استخدام القائمة التي داخل التطبيق)",
|
||||
"title": "إخفاء القائمة مفعل"
|
||||
},
|
||||
"label": "إخفاء القائمة"
|
||||
},
|
||||
@ -131,32 +131,39 @@
|
||||
"to-help-translate": "تريد المساعدة في الترجمة؟ اضغط هنا"
|
||||
}
|
||||
},
|
||||
"resume-on-start": "تكملة الأغنية الأخيرة عند بدأ التشغيل",
|
||||
"resume-on-start": "استأنف الأغنية الأخيرة عند بدأ التشغيل",
|
||||
"single-instance-lock": "قفل مثيل واحد",
|
||||
"start-at-login": "ابدأ عند تسجيل الدخول",
|
||||
"starting-page": {
|
||||
"label": "صفحة البداية",
|
||||
"unset": "الغاء"
|
||||
"unset": "عدم تعيين"
|
||||
},
|
||||
"tray": {
|
||||
"label": "قائمة",
|
||||
"submenu": {
|
||||
"disabled": "غير مفعل",
|
||||
"enabled-and-hide-app": "تمكين وإخفاء التطبيق",
|
||||
"enabled-and-show-app": "ممكين وأظهر التطبيق",
|
||||
"play-pause-on-click": "تشغيل/إيقاف مؤقت عند النقر"
|
||||
"enabled-and-hide-app": "مفعل وإخفاء التطبيق",
|
||||
"enabled-and-show-app": "مفعل وأظهر التطبيق",
|
||||
"play-pause-on-click": "تشغيل/إيقاف عند النقر"
|
||||
}
|
||||
},
|
||||
"visual-tweaks": {
|
||||
"label": "تعديلات المظهر",
|
||||
"submenu": {
|
||||
"custom-window-title": {
|
||||
"label": "عنوان نافذة مخصص",
|
||||
"prompt": {
|
||||
"label": "ادخل عنوان مخصص للنافذة: (اتركه فارغًا إلغاء التفعيل)",
|
||||
"placeholder": "مثال: {{applicationName}}"
|
||||
}
|
||||
},
|
||||
"like-buttons": {
|
||||
"default": "الافتراضي",
|
||||
"force-show": "اجبار الظهور",
|
||||
"hide": "اخفاء",
|
||||
"label": "أزرار الاعجاب"
|
||||
},
|
||||
"remove-upgrade-button": "ازالة زرار التطوير",
|
||||
"remove-upgrade-button": "ازالة زر التطوير",
|
||||
"theme": {
|
||||
"dialog": {
|
||||
"button": {
|
||||
@ -195,20 +202,749 @@
|
||||
},
|
||||
"tray": {
|
||||
"next": "التالي",
|
||||
"play-pause": "تشغيل/إيقاف",
|
||||
"previous": "السابق",
|
||||
"quit": "خروج",
|
||||
"restart": "إعادة تشغيل التطبيق",
|
||||
"show": "عرض النافدة",
|
||||
"tooltip": {
|
||||
"default": "يوتيوب اغاني",
|
||||
"with-song-info": "يوتيوب أغاني: {{الفنان}}-{{العنوان}}"
|
||||
"default": "{{applicationName}}",
|
||||
"with-song-info": "{{applicationName}}: {{artist}} - {{title}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"ad-speedup": {
|
||||
"description": "إذا تم عرض إعلان, فإن الصوت سيتم كتمانه وسيتم وضع سرعة التشغيل الى 16x",
|
||||
"name": "تسريع الإعلان"
|
||||
},
|
||||
"adblocker": {
|
||||
"description": "حجب جميع الإعلانات والمسارات خارج الصندوق",
|
||||
"description": "حجب جميع الإعلانات والمتتبعات جاهز للأستخدام",
|
||||
"menu": {
|
||||
"blocker": "حاجب الإعلانات"
|
||||
},
|
||||
"name": "حاجب الإعلانات"
|
||||
},
|
||||
"album-actions": {
|
||||
"description": "يضيف أزرار \"إلغاء عدم الاعجاب\" و\"عدم الاعجاب\" و\"الإعجاب\" و\"إلغاء الإعجاب\" لتطبيق ذلك على جميع الأغاني في قائمة تشغيل أو ألبوم",
|
||||
"name": "إجراءات الألبوم"
|
||||
},
|
||||
"album-color-theme": {
|
||||
"description": "يطبق ثيمًا ديناميكيًا وتأثيرات بصرية بناء على ألوان الألبوم",
|
||||
"menu": {
|
||||
"color-mix-ratio": {
|
||||
"label": "نسبة قوة مزيج الألوان",
|
||||
"submenu": {
|
||||
"percent": "{{ratio}}٪"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "سمة ألوان الألبوم"
|
||||
},
|
||||
"ambient-mode": {
|
||||
"description": "يطبق تأثير إضاءة عن طريق إسقاط ألوان ناعمة من الفيديو على خلفية شاشتك",
|
||||
"menu": {
|
||||
"blur-amount": {
|
||||
"label": "مقدار الطمس",
|
||||
"submenu": {
|
||||
"pixels": "{{blurAmount}} بكسل"
|
||||
}
|
||||
},
|
||||
"buffer": {
|
||||
"label": "تخزين الصوت المؤقت",
|
||||
"submenu": {
|
||||
"buffer": "{{buffer}}"
|
||||
}
|
||||
},
|
||||
"opacity": {
|
||||
"label": "الشفافية",
|
||||
"submenu": {
|
||||
"percent": "{{opacity}}٪"
|
||||
}
|
||||
},
|
||||
"quality": {
|
||||
"label": "الجودة",
|
||||
"submenu": {
|
||||
"pixels": "{{quality}} بكسل"
|
||||
}
|
||||
},
|
||||
"size": {
|
||||
"label": "الحجم",
|
||||
"submenu": {
|
||||
"percent": "{{size}}٪"
|
||||
}
|
||||
},
|
||||
"smoothness-transition": {
|
||||
"label": "انتقال السلاسة",
|
||||
"submenu": {
|
||||
"during": "خلال {{interpolationTime}} ثانيه"
|
||||
}
|
||||
},
|
||||
"use-fullscreen": {
|
||||
"label": "استخدام شاشه كامله"
|
||||
}
|
||||
},
|
||||
"name": "الوضع المحيطي"
|
||||
},
|
||||
"amuse": {
|
||||
"description": "تكامل دعم {{applicationName}} مع ويدجت Amuse لعرض الأغنية التي قيد التشغيل، من إنتاج 6K Labs",
|
||||
"name": "تلسيه",
|
||||
"response": {
|
||||
"query": "خادم Amuse API قيد التشغيل. استخدم GET /query للحصول على معلومات الأغنية."
|
||||
}
|
||||
},
|
||||
"api-server": {
|
||||
"description": "يضيف API للتحكم في المشغل",
|
||||
"dialog": {
|
||||
"request": {
|
||||
"buttons": {
|
||||
"allow": "سماح",
|
||||
"deny": "رفض"
|
||||
},
|
||||
"message": "السماح لـ {{ID}} ({{origin}}) بالوصول إلى الAPI؟",
|
||||
"title": "طلب السماح بالوصول إلى الAPI"
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"auth-strategy": {
|
||||
"label": "استراتيجية التفويض",
|
||||
"submenu": {
|
||||
"auth-at-first": {
|
||||
"label": "التفويض عند الطلب الأول"
|
||||
},
|
||||
"none": {
|
||||
"label": "بدون تفويض"
|
||||
}
|
||||
}
|
||||
},
|
||||
"hostname": {
|
||||
"label": "اسم المضيف"
|
||||
},
|
||||
"port": {
|
||||
"label": "المنفذ"
|
||||
}
|
||||
},
|
||||
"name": "خادم API [تجريبي]",
|
||||
"prompt": {
|
||||
"hostname": {
|
||||
"label": "أدخل اسم المضيف (مثل 0.0.0.0) لخادم API:",
|
||||
"title": "اسم الخادم"
|
||||
},
|
||||
"port": {
|
||||
"label": "أدخل المنفذ لخادم API:",
|
||||
"title": "منفذ"
|
||||
}
|
||||
}
|
||||
},
|
||||
"audio-compressor": {
|
||||
"description": "تطبيق الضغط على الصوت (يخفض مستوى صوت الأجزاء الأعلى من الإشارة ويرفع مستوى صوت الأجزاء الأكثر نعومة)",
|
||||
"name": "ضاغط الصوت"
|
||||
},
|
||||
"auth-proxy-adapter": {
|
||||
"description": "دعم استخدام خدمات proxy للإثبات",
|
||||
"menu": {
|
||||
"disable": "تعطيل مكيف الوكيل",
|
||||
"enable": "تفعيل مكيف proxy للصداقة",
|
||||
"hostname": {
|
||||
"label": "إسم المستضيف"
|
||||
},
|
||||
"port": {
|
||||
"label": "المدخل"
|
||||
}
|
||||
},
|
||||
"name": "مكيّف proxy للمصادقة",
|
||||
"prompt": {
|
||||
"hostname": {
|
||||
"label": "أدخل اسم المستضيف لخادم proxy المحلي (يتطلب إعادة التشغيل):",
|
||||
"title": "إسم مستضيف proxy"
|
||||
},
|
||||
"port": {
|
||||
"label": "أدخل مدخلًا لخادم proxy المحلي (يتطلب إعادة التشغيل):",
|
||||
"title": "مدخل proxy"
|
||||
}
|
||||
}
|
||||
},
|
||||
"blur-nav-bar": {
|
||||
"description": "يجعل شريط التنقل شفاف و مطموس",
|
||||
"name": "طمس شريط التنقل"
|
||||
},
|
||||
"bypass-age-restrictions": {
|
||||
"description": "تجاوز تَحَقّق مشغل الموسيقى من السن",
|
||||
"name": "تجاوز التحقق من السن"
|
||||
},
|
||||
"captions-selector": {
|
||||
"description": "محدد ترجمات المقاطع الصوتية ل{{applicationName}}",
|
||||
"menu": {
|
||||
"autoload": "اختار اخر ترجمة مستخدمة تلقائيا",
|
||||
"disable-captions": "لا توجد ترجمات بشكل افتراضي"
|
||||
},
|
||||
"name": "محدد الترجمة",
|
||||
"prompt": {
|
||||
"selector": {
|
||||
"label": "لغة الترجمة الحالية: {{language}}",
|
||||
"none": "لا شيء",
|
||||
"title": "اختار لغة الترجمة"
|
||||
}
|
||||
},
|
||||
"templates": {
|
||||
"title": "فتح محدد الترجمة"
|
||||
},
|
||||
"toast": {
|
||||
"caption-changed": "تم تغيير الترجمة الى {{language}}",
|
||||
"caption-disabled": "الترجمة غير مفعلة",
|
||||
"no-captions": "الترجمة لهاته الأغنية غير متاحة"
|
||||
}
|
||||
},
|
||||
"compact-sidebar": {
|
||||
"description": "قم دائمًا بتعيين الشريط الجانبي في الوضع الملموم",
|
||||
"name": "شريط جانبي ملموم"
|
||||
},
|
||||
"crossfade": {
|
||||
"description": "التداخل بين الأغاني",
|
||||
"menu": {
|
||||
"advanced": "متقدم"
|
||||
},
|
||||
"name": "التداخل بين الأغاني [تجريبي]",
|
||||
"prompt": {
|
||||
"options": {
|
||||
"multi-input": {
|
||||
"fade-in-duration": "مدة التداخل (بأجزاء الثانية)",
|
||||
"fade-out-duration": "مدة التلاشي (بأجزاء الثانية)",
|
||||
"fade-scaling": {
|
||||
"label": "توسيع التداخل",
|
||||
"linear": "خطي",
|
||||
"logarithmic": "لوغاريتمي"
|
||||
},
|
||||
"seconds-before-end": "التداخل قبل النهاية بـ N ثوانٍ"
|
||||
},
|
||||
"title": "خيارات التداخل"
|
||||
}
|
||||
}
|
||||
},
|
||||
"custom-output-device": {
|
||||
"description": "ضبط مخرج جهاز وسائط مخصص للأغاني",
|
||||
"menu": {
|
||||
"device-selector": "اختر جهاز"
|
||||
},
|
||||
"name": "جهاز اخراج مخصص",
|
||||
"prompt": {
|
||||
"device-selector": {
|
||||
"label": "اختر جهاز الوسائط الذي سيتم استخدامه للاخراج",
|
||||
"title": "اختر الجهاز الإخراج"
|
||||
}
|
||||
}
|
||||
},
|
||||
"disable-autoplay": {
|
||||
"description": "يجعل الأغنية تبدأ في وضع \"الإيقاف\"",
|
||||
"menu": {
|
||||
"apply-once": "ينطبق فقط عند بدء التشغيل"
|
||||
},
|
||||
"name": "تعطيل التشغيل التلقائي"
|
||||
},
|
||||
"discord": {
|
||||
"backend": {
|
||||
"already-connected": "تمت محاولة الاتصال بالاتصال النشط",
|
||||
"connected": "متصل بDiscord",
|
||||
"disconnected": "انقطع الاتصال بDiscord"
|
||||
},
|
||||
"description": "أظهر لأصدقائك ما تستمع إليه من خلال Rich Presence",
|
||||
"menu": {
|
||||
"auto-reconnect": "إعادة اتصال تلقائي",
|
||||
"clear-activity": "مسح النشاط",
|
||||
"clear-activity-after-timeout": "مسح النشاط بعد انتهاء المهلة",
|
||||
"connected": "متصل",
|
||||
"disconnected": "غير متصل",
|
||||
"hide-duration-left": "إخفاء المدة المتبقية",
|
||||
"hide-github-button": "إخفاء زر رابط GitHub",
|
||||
"play-on-application": "شغل في {{applicationName}}",
|
||||
"set-inactivity-timeout": "ضبط مهلة عدم النشاط",
|
||||
"set-status-display-type": {
|
||||
"label": "نص الحالة",
|
||||
"submenu": {
|
||||
"artist": "جار السمع ل{artist}",
|
||||
"application": "جار السمع ل{{applicationName}}",
|
||||
"title": "جار السمع ل{song title}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Discord Rich Presence",
|
||||
"prompt": {
|
||||
"set-inactivity-timeout": {
|
||||
"label": "أدخل مهلة عدم النشاط بالثواني:",
|
||||
"title": "ضبط مهلة عدم النشاط"
|
||||
}
|
||||
}
|
||||
},
|
||||
"downloader": {
|
||||
"backend": {
|
||||
"dialog": {
|
||||
"error": {
|
||||
"buttons": {
|
||||
"ok": "حسنا"
|
||||
},
|
||||
"message": "اه! نعتذر، فشل التنزيل…",
|
||||
"title": "خطأ في التنزيل!"
|
||||
},
|
||||
"start-download-playlist": {
|
||||
"buttons": {
|
||||
"ok": "حسنا"
|
||||
},
|
||||
"detail": "({{playlistSize}} أغنية)",
|
||||
"message": "تنزيل القائمة {{playlistTitle}}",
|
||||
"title": "تم بدأ التنزيل"
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"conversion-progress": "التحويل: {{percent}}٪",
|
||||
"converting": "جارٍ التحويل…",
|
||||
"done": "تم: {{filePath}}",
|
||||
"download-info": "تنزيل {{artist}} - {{title}} {{videoId}}",
|
||||
"download-progress": "تنزيل: {{percent}}٪",
|
||||
"downloading": "جار التنزيل…",
|
||||
"downloading-counter": "جار التنزيل {{current}}/{{total}}…",
|
||||
"downloading-playlist": "جار تنزيل القائمة \"{{playlistTitle}}\" - {{playlistSize}} أغاني ({{playlistId}})",
|
||||
"error-while-downloading": "خطأ في تنزيل \"{{author}} - {{title}}\": {{error}}",
|
||||
"folder-already-exists": "الملف {{playlistFolder}} موجود بالفعل",
|
||||
"getting-playlist-info": "جار الحصول على معلومات القائمة…",
|
||||
"loading": "جارِ التنزيل…",
|
||||
"playlist-has-only-one-song": "تحتوي قائمة التشغيل على عنصر واحد فقط، جار تنزيله الأن",
|
||||
"playlist-id-not-found": "لم يتم العثور على معرف قائمة التشغيل",
|
||||
"playlist-is-empty": "قائمة التشغيل فارغة",
|
||||
"playlist-is-mix-or-private": "حدث خطأ أثناء الحصول على معلومات قائمة التشغيل: تأكد من أنها ليست قائمة تشغيل خاصة أو قائمة تشغيل \"مختلطة لك\"\n\n{{error}}",
|
||||
"preparing-file": "جار تجهيز الملف…",
|
||||
"saving": "جار الحفظ…",
|
||||
"trying-to-get-playlist-id": "جار محاولة الحصول على معرف قائمة التشغيل: {{playlistId}}",
|
||||
"video-id-not-found": "لم يتم ايجاد الفيديو",
|
||||
"writing-id3": "جار كتابة علامات ID3…"
|
||||
}
|
||||
},
|
||||
"description": "يقوم بتنزيل ملفات MP3/مصدر الصوت مباشرة من الواجهة",
|
||||
"menu": {
|
||||
"choose-download-folder": "اختر مكان التنزيل",
|
||||
"download-finish-settings": {
|
||||
"label": "تنزيل عند الانتهاء",
|
||||
"prompt": {
|
||||
"last-percent": "بعد x بالمئة",
|
||||
"last-seconds": "آخر x ثانية",
|
||||
"title": "تكوين وقت التنزيل"
|
||||
},
|
||||
"submenu": {
|
||||
"advanced": "متقدم",
|
||||
"enabled": "مفعل",
|
||||
"mode": "وضع الوقت",
|
||||
"percent": "نسبة",
|
||||
"seconds": "ثواني"
|
||||
}
|
||||
},
|
||||
"download-playlist": "تنزيل قائمة التشغيل",
|
||||
"presets": "الإعدادات المسبقة",
|
||||
"skip-existing": "تخطي الملفات الموجودة بالفعل"
|
||||
},
|
||||
"name": "أداة التنزيل",
|
||||
"renderer": {
|
||||
"can-not-update-progress": "لا يمكن تحديث التقدم"
|
||||
},
|
||||
"templates": {
|
||||
"button": "تنزيل"
|
||||
}
|
||||
},
|
||||
"equalizer": {
|
||||
"description": "يضيف معادل صوتي للمشغل",
|
||||
"menu": {
|
||||
"presets": {
|
||||
"label": "إعدادات مسبقة",
|
||||
"list": {
|
||||
"bass-booster": "مزود البيس"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "معادل صوتي"
|
||||
},
|
||||
"exponential-volume": {
|
||||
"description": "يجعل شريط تمرير مستوى الصوت أسيًا بحيث يسهل تحديد مستويات الصوت الأقل.",
|
||||
"name": "الصوت الأسي"
|
||||
},
|
||||
"in-app-menu": {
|
||||
"description": "يعطي أشرطة القوائم مظهرًا أنيقًا و داكنًا أو بلون الألبوم",
|
||||
"menu": {
|
||||
"hide-dom-window-controls": "إخفاء عناصر التحكم في نافذة DOM"
|
||||
},
|
||||
"name": "قائمة التي داخل التطبيق"
|
||||
},
|
||||
"lumiastream": {
|
||||
"description": "يضيف دعم Lumia Stream",
|
||||
"name": "Lumia Stream [تجريبي]"
|
||||
},
|
||||
"lyrics-genius": {
|
||||
"description": "يضيف دعم الكلمات لمعظم الأغاني",
|
||||
"menu": {
|
||||
"romanized-lyrics": "كلمات مكتوبة بحروف رومانية"
|
||||
},
|
||||
"name": "كلمات الأغاني من Genius",
|
||||
"renderer": {
|
||||
"fetched-lyrics": "تم جلب الكلمات من Genius"
|
||||
}
|
||||
},
|
||||
"music-together": {
|
||||
"description": "مشاركة قائمة تشغيل مع الآخرين. عندما يقوم المضيف بتشغيل أغنية، سيسمع الجميع نفس الأغنية",
|
||||
"dialog": {
|
||||
"enter-host": "أدخل معرف المضيف"
|
||||
},
|
||||
"internal": {
|
||||
"save": "حفظ",
|
||||
"track-source": "تتبع مصدر الاغنية",
|
||||
"unknown-user": "مستخدم مجهول"
|
||||
},
|
||||
"menu": {
|
||||
"click-to-copy-id": "نسخ معرف المستضيف",
|
||||
"close": "إغلاق الموسيقى معًا",
|
||||
"connected-users": "المستخدمون المتصلون",
|
||||
"disconnect": "قطع اتصال من الموسيقى معًا",
|
||||
"empty-user": "لا يوجد مستعملون متصلون",
|
||||
"host": "مضيف الموسيقى معًا",
|
||||
"join": "الانضمام إلى الموسيقى معا",
|
||||
"permission": {
|
||||
"all": "السماح للضيوف بالتحكم في قائمة التشغيل والمشغل",
|
||||
"host-only": "فقط المضيف يستطيع التحكم بالقائمة و المشغل",
|
||||
"playlist": "السماح للضيوف بالتحكم بقائمة التشغيل"
|
||||
},
|
||||
"set-permission": "تغيير إذن التحكم",
|
||||
"status": {
|
||||
"disconnected": "غير متصل",
|
||||
"guest": "متصل كضيف",
|
||||
"host": "متصل كمضيف"
|
||||
}
|
||||
},
|
||||
"name": "الموسيقى معا [تجريبي]",
|
||||
"toast": {
|
||||
"add-song-failed": "فشل في إضافة أغنية",
|
||||
"closed": "تم إغلاق الموسيقى معا",
|
||||
"disconnected": "تم قطع اتصال الموسيقى معًا",
|
||||
"host-failed": "فشل في استضافة الموسيقى معا",
|
||||
"id-copied": "تم نسخ معرف المضيف",
|
||||
"id-copy-failed": "فشل نسخ معرف المضيف",
|
||||
"join-failed": "فشل الانضمام إلى الموسيقى معا",
|
||||
"joined": "تم الانضمام إلى الموسيقى معا",
|
||||
"permission-changed": "تم تغيير إذن الموسيقى معًا إلى \"{{permission}}\"",
|
||||
"remove-song-failed": "فشل في إزالة الأغنية",
|
||||
"user-connected": "{{name}} انضم إلى الموسيقى معًا",
|
||||
"user-disconnected": "{{name}} غادر الموسيقى معًا"
|
||||
}
|
||||
},
|
||||
"navigation": {
|
||||
"description": "أسهم التنقل \"التالي/السابق\" مدمجة مباشرة في الواجهة، كما في متصفحك المفضل",
|
||||
"name": "التنقل",
|
||||
"templates": {
|
||||
"back": {
|
||||
"title": "العودة إلى الصفحة السابقة"
|
||||
},
|
||||
"forward": {
|
||||
"title": "إذهب إلى الصفحة المقبلة"
|
||||
}
|
||||
}
|
||||
},
|
||||
"no-google-login": {
|
||||
"description": "إزالة أزرار وروابط تسجيل الدخول بجوجل من الواجهة",
|
||||
"name": "لا يوجد تسجيل دخول بجوجل"
|
||||
},
|
||||
"notifications": {
|
||||
"description": "عرض إشعار عندما تبدأ الأغنية (الإشعارات التفاعلية متوفرة على ويندوز)",
|
||||
"menu": {
|
||||
"interactive": "إشعارات تفاعلية",
|
||||
"interactive-settings": {
|
||||
"label": "إعدادات تفاعلية",
|
||||
"submenu": {
|
||||
"hide-button-text": "إخفاء نص الزر",
|
||||
"refresh-on-play-pause": "اعادة تحميل عند التشغيل/الإيقاف",
|
||||
"tray-controls": "فتح/إغلاق عند النقر على علامة الشريط"
|
||||
}
|
||||
},
|
||||
"priority": "أولوية الإشعار",
|
||||
"toast-style": "تنسيق النخب",
|
||||
"unpause-notification": "إظهار إشعار عند استئناف التشغيل"
|
||||
},
|
||||
"name": "الإشعارات"
|
||||
},
|
||||
"performance-improvement": {
|
||||
"description": "تحسين الأداء عبر تفعيل السكربتات التجريبية",
|
||||
"name": "تحسين الأداء [تجريبي]"
|
||||
},
|
||||
"picture-in-picture": {
|
||||
"description": "يسمح بتحويل التطبيق إلى وضع الصورة داخل الصورة",
|
||||
"menu": {
|
||||
"always-on-top": "دائمًا في المقدمة",
|
||||
"hotkey": {
|
||||
"label": "مفتاح اختصار",
|
||||
"prompt": {
|
||||
"keybind-options": {
|
||||
"hotkey": "مفتاح اختصار"
|
||||
},
|
||||
"label": "اختر مفتاح اختصار لتبديل وضع الصورة داخل الصورة",
|
||||
"title": "مفتاح اختصار الصورة داخل الصورة"
|
||||
}
|
||||
},
|
||||
"save-window-position": "حفظ موقع النافذة",
|
||||
"save-window-size": "حفظ حجم النافذة",
|
||||
"use-native-pip": "استخدام وضع الصورة داخل الصورة الأصلي للمتصفح"
|
||||
},
|
||||
"name": "وضع الصورة داخل الصورة",
|
||||
"templates": {
|
||||
"button": "وضع الصورة داخل الصورة"
|
||||
}
|
||||
},
|
||||
"playback-speed": {
|
||||
"description": "استمع بسرعة، استمع ببطء! يضيف شريط تمرير يتحكم في سرعة الأغنية",
|
||||
"name": "سرعة التشغيل",
|
||||
"templates": {
|
||||
"button": "السرعة"
|
||||
}
|
||||
},
|
||||
"precise-volume": {
|
||||
"description": "التحكم في مستوى الصوت بدقة باستخدام عجلة الفأرة/مفاتيح الاختصار، مع واجهة مستخدم مخصصة وخطوات صوتية قابلة للتخصيص",
|
||||
"menu": {
|
||||
"arrows-shortcuts": "عناصر التحكم بأسهم المفاتيح",
|
||||
"custom-volume-steps": "تعيين خطوات صوتية خاصة",
|
||||
"global-shortcuts": "مفاتيح اختصار عام"
|
||||
},
|
||||
"name": "مستوى صوت دقيق",
|
||||
"prompt": {
|
||||
"global-shortcuts": {
|
||||
"keybind-options": {
|
||||
"decrease": "تقليل مستوى الصوت",
|
||||
"increase": "زيادة مستوى الصوت"
|
||||
},
|
||||
"label": "اختر اختصارات لوحة المفاتيح للتحكم بمستوى الصوت:",
|
||||
"title": "اختصارات لوحة المفاتيح للتحكم بمستوى الصوت"
|
||||
},
|
||||
"volume-steps": {
|
||||
"label": "اختر خطوات زيادة/تقليل مستوى الصوت",
|
||||
"title": "خطوات زيادة الصوت"
|
||||
}
|
||||
}
|
||||
},
|
||||
"quality-changer": {
|
||||
"backend": {
|
||||
"dialog": {
|
||||
"quality-changer": {
|
||||
"detail": "الجودة الحالية: {{quality}}",
|
||||
"message": "اختر جودة الفيديو:",
|
||||
"title": "اختر جودة الفيديو"
|
||||
}
|
||||
}
|
||||
},
|
||||
"description": "يسمح بتغيير جودة الفيديو باستخدام زر على صورة الفيديو",
|
||||
"name": "مغير جودة الفيديو",
|
||||
"renderer": {
|
||||
"quality-settings-button": {
|
||||
"label": "إفتح مغير الجودة"
|
||||
}
|
||||
}
|
||||
},
|
||||
"scrobbler": {
|
||||
"description": "إضافة دعم Scrobbling (مثل Last.fm، ListenBrainz)",
|
||||
"dialog": {
|
||||
"lastfm": {
|
||||
"auth-failed": {
|
||||
"message": "فشل التفويض مع Last.fm\nإخفاء النافذة المصغرة حتى إعادة التشغيل التالية.",
|
||||
"title": "فشل التفويض"
|
||||
}
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"lastfm": {
|
||||
"api-settings": "إعدادات Last.fm API"
|
||||
},
|
||||
"listenbrainz": {
|
||||
"token": "أدخل رمز مستخدم ListenBrainz"
|
||||
},
|
||||
"scrobble-alternative-artist": "استخدم فنانين بديلين",
|
||||
"scrobble-alternative-title": "استخدم عناوين بديلة",
|
||||
"scrobble-other-media": "Scrobble الوسائط الأخرى"
|
||||
},
|
||||
"name": "أداة تتبع الاستماع",
|
||||
"prompt": {
|
||||
"lastfm": {
|
||||
"api-key": "مفتاح Last.fm API",
|
||||
"api-secret": "الرمز السري لـ Last.fm API"
|
||||
},
|
||||
"listenbrainz": {
|
||||
"token": {
|
||||
"label": "أدخل رمز مستخدم ListenBrainz الخاص بك:",
|
||||
"title": "رمز ListenBrainz"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"shortcuts": {
|
||||
"description": "يسمح بضبط اختصارات لوحة المفاتيح للتحكم في التشغيل (تشغيل/إيقاف/التالي/السابق) وإيقاف تشغيل OSD الوسائط عن طريق تجاوز مفاتيح الوسائط، وتشغيل Ctrl/CMD + F للبحث، وتفعيل دعم Linux MPRIS لمفاتيح الوسائط، واختصارات مخصصة للمستخدمين المتقدمين",
|
||||
"menu": {
|
||||
"override-media-keys": "تجاوز مفاتيح الوسائط",
|
||||
"set-keybinds": "تعيين عناصر التحكم بالأغاني"
|
||||
},
|
||||
"name": "الاختصارات (و MPRIS)",
|
||||
"prompt": {
|
||||
"keybind": {
|
||||
"keybind-options": {
|
||||
"next": "التالي",
|
||||
"play-pause": "تشغيل/ إيقاف",
|
||||
"previous": "السابق"
|
||||
},
|
||||
"label": "اختر اختصارات لوحة المفاتيح للتحكم في الأغاني:",
|
||||
"title": "اختصارات لوحة المفاتيح"
|
||||
}
|
||||
}
|
||||
},
|
||||
"skip-disliked-songs": {
|
||||
"description": "يتخطى الأغاني الغير معجب فيها",
|
||||
"name": "تخطي الأغاني الغير معجب فيها"
|
||||
},
|
||||
"skip-silences": {
|
||||
"description": "تخطي أقسام التي ليس لها صوت تلقائيًا في الأغاني",
|
||||
"name": "تخطي الفترات التي ليس لها صوت"
|
||||
},
|
||||
"sponsorblock": {
|
||||
"description": "تخطي تلقائيًا الأجزاء غير الموسيقية مثل المقدمة/الختام أو أجزاء مقاطع الفيديو الموسيقية حيث لا يتم تشغيل الأغنية",
|
||||
"name": "SponsorBlock"
|
||||
},
|
||||
"synced-lyrics": {
|
||||
"description": "يوفر كلمات الأغاني المتزامنة باستخدام مزودين مثل LRClib.",
|
||||
"errors": {
|
||||
"fetch": "⚠️ حدث خطأ أثناء جلب كلمات الأغنية.\nيرجى المحاولة مرة أخرى لاحقًا.",
|
||||
"not-found": "⚠️ لم يتم العثور على كلمات لهذه الأغنية."
|
||||
},
|
||||
"menu": {
|
||||
"default-text-string": {
|
||||
"label": "المسافة الافتراضية بين كلمات الأغاني",
|
||||
"tooltip": "اختر الحرف الافتراضي لاستخدامه في الفجوة بين كلمات الأغنية"
|
||||
},
|
||||
"line-effect": {
|
||||
"label": "تأثير الخط",
|
||||
"submenu": {
|
||||
"fancy": {
|
||||
"label": "فاخر",
|
||||
"tooltip": "استخدم تأثيرات كبيرة تشبه التطبيقات على السطر الحالي"
|
||||
},
|
||||
"focus": {
|
||||
"label": "تركيز",
|
||||
"tooltip": "اجعل السطر الحالي فقط باللون الأبيض"
|
||||
},
|
||||
"offset": {
|
||||
"label": "مزاح",
|
||||
"tooltip": "مزاح الى يمين السطر الحالي"
|
||||
},
|
||||
"scale": {
|
||||
"label": "تحجيم",
|
||||
"tooltip": "حجم السطر الحالي"
|
||||
}
|
||||
},
|
||||
"tooltip": "اختر التأثير لتطبيقه على السطر الحالي"
|
||||
},
|
||||
"precise-timing": {
|
||||
"label": "اجعل كلمات الأغنية متزامنة بشكل مثالي",
|
||||
"tooltip": "احسب بدقة الملي ثانية عرض السطر التالي (قد يكون له تأثير صغير على الأداء)"
|
||||
},
|
||||
"preferred-provider": {
|
||||
"label": "المزود المفضل",
|
||||
"none": {
|
||||
"label": "لا شيء",
|
||||
"tooltip": "لا يوجد مزود مفضل"
|
||||
},
|
||||
"tooltip": "اختر المزود المفضل للإستخدام"
|
||||
},
|
||||
"romanization": {
|
||||
"label": "اجعل الكلمات رومانية",
|
||||
"tooltip": "إذا كانت كلمات الأغنية بلغة مختلفة، حاول عرض نسخة بالحروف اللاتينية."
|
||||
},
|
||||
"show-lyrics-even-if-inexact": {
|
||||
"label": "أظهر كلمات الأغنية حتى لو كانت غير دقيقة",
|
||||
"tooltip": "إذا لم يتم العثور على الأغنية، سوف يتم البحث مرة أخرى باستخدام استعلام بحث مختلف.\nقد لا تكون النتيجة من المحاولة الثانية دقيقة."
|
||||
},
|
||||
"show-time-codes": {
|
||||
"label": "أظهر الرموز الزمنية",
|
||||
"tooltip": "أظهر الرموز الزمنية بجانب كلمات الأغنية"
|
||||
}
|
||||
},
|
||||
"name": "كلمات متزامنة",
|
||||
"refetch-btn": {
|
||||
"fetching": "جارٍ الجلب...",
|
||||
"normal": "إعادة جلب كلمات الأغنية"
|
||||
},
|
||||
"warnings": {
|
||||
"duration-mismatch": "⚠️ - قد تكون الكلمات غير متزامنة بسبب عدم تطابق المدة.",
|
||||
"inexact": "⚠️ - قد لا تكون كلمات هذه الأغنية دقيقة",
|
||||
"instrumental": "⚠️ - هذه أغنية آلية (بدون كلمات)"
|
||||
}
|
||||
},
|
||||
"taskbar-mediacontrol": {
|
||||
"description": "التحكم في المشغل من شريط مهام ويندوز",
|
||||
"name": "التحكم بالوسائط من شريط المهام"
|
||||
},
|
||||
"touchbar": {
|
||||
"description": "يضيف أداة TouchBar لمستخدمي macOS",
|
||||
"name": "شريط اللمس (TouchBar)"
|
||||
},
|
||||
"transparent-player": {
|
||||
"description": "يجعل نافذة التطبيق شفافة",
|
||||
"menu": {
|
||||
"opacity": {
|
||||
"label": "الشفافية",
|
||||
"submenu": {
|
||||
"percent": "{{opacity}}٪"
|
||||
}
|
||||
},
|
||||
"type": {
|
||||
"label": "النوع",
|
||||
"submenu": {
|
||||
"acrylic": "أكريليك",
|
||||
"mica": "ميكا",
|
||||
"none": "لاشيء",
|
||||
"tabbed": "بديل ميكا"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "مشغل شفاف"
|
||||
},
|
||||
"tuna-obs": {
|
||||
"description": "التكامل مع الإضافة\" Tuna\" الخاصة بـ OBS",
|
||||
"name": "إضافة Tuna OBS"
|
||||
},
|
||||
"unobtrusive-player": {
|
||||
"description": "يمنع المشغل من الظهور عند تشغيل أغنية",
|
||||
"name": "مشغل غير مزعج"
|
||||
},
|
||||
"video-toggle": {
|
||||
"description": "يضيف زرًا للتبديل بين وضع الفيديو/الأغنية. يمكن أيضًا اختياريًا إزالة علامة الفيديو بالكامل",
|
||||
"menu": {
|
||||
"align": {
|
||||
"label": "المحاذاة",
|
||||
"submenu": {
|
||||
"left": "يسار",
|
||||
"middle": "المنتصف",
|
||||
"right": "يمين"
|
||||
}
|
||||
},
|
||||
"force-hide": "إزالة علامة تبويب الفيديو",
|
||||
"mode": {
|
||||
"label": "وضع",
|
||||
"submenu": {
|
||||
"custom": "زر مخصص",
|
||||
"disabled": "غير مفعل",
|
||||
"native": "زر طبيعي"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "زر الفيديو",
|
||||
"templates": {
|
||||
"button-song": "أغنية",
|
||||
"button-video": "فيديو"
|
||||
}
|
||||
},
|
||||
"visualizer": {
|
||||
"description": "يضيف معاينًا بصريًا للمشغل",
|
||||
"menu": {
|
||||
"visualizer-type": "نوع المعاين البصري"
|
||||
},
|
||||
"name": "معاين بصري"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
173
src/i18n/resources/az.json
Normal file
@ -0,0 +1,173 @@
|
||||
{
|
||||
"common": {
|
||||
"console": {
|
||||
"plugins": {
|
||||
"execute-failed": "Plagini icra etmək mümkün olmadı {{pluginName}}::{{contextName}}",
|
||||
"executed-at-ms": "Plagin {{pluginName}}::{{contextName}} {{ms}} millisaniyədə icra edildi",
|
||||
"initialize-failed": "\"{{pluginName}}\" plaginini başlatmaq mümkün olmadı",
|
||||
"load-all": "Bütün plaginlər yüklənir",
|
||||
"load-failed": "\"{{pluginName}}\" plaginini yükləmək mümkün olmadı",
|
||||
"loaded": "\"{{pluginName}}\" plagini yükləndi",
|
||||
"unload-failed": "\"{{pluginName}}\" plaqinini yükləmək mümkün olmadı",
|
||||
"unloaded": "\"{{pluginName}}\" plaqini yükləmədən çıxarıldı"
|
||||
}
|
||||
}
|
||||
},
|
||||
"language": {
|
||||
"code": "az",
|
||||
"local-name": "Azərbaycan dili",
|
||||
"name": "Azerbaijani"
|
||||
},
|
||||
"main": {
|
||||
"console": {
|
||||
"did-finish-load": {
|
||||
"dev-tools": "Yükləmə tamamlandı. DevTools açıldı"
|
||||
},
|
||||
"i18n": {
|
||||
"loaded": "i18n yükləndi"
|
||||
},
|
||||
"second-instance": {
|
||||
"receive-command": "Protokol üzərindən əmr alındı: \"{{command}}\""
|
||||
},
|
||||
"theme": {
|
||||
"css-file-not-found": "CSS faylı \"{{cssFile}}\" mövcud deyil, nəzərə alınmır"
|
||||
},
|
||||
"unresponsive": {
|
||||
"details": "Cavabsız Səhv!\n{{error}}"
|
||||
},
|
||||
"when-ready": {
|
||||
"clearing-cache-after-20s": "Proqram keşi təmizlənir"
|
||||
},
|
||||
"window": {
|
||||
"tried-to-render-offscreen": "Pəncərə ekran kənarında göstərilməyə çalışıldı, PəncərəÖlçüsü={{windowSize}}, EkranÖlçüsü={{displaySize}}, Vəziyyət={{position}}"
|
||||
}
|
||||
},
|
||||
"dialog": {
|
||||
"hide-menu-enabled": {
|
||||
"detail": "Menu gizlədildi, yenidən göstərmək üçün 'Alt' istifadə edin (Proqramiçi menu üçün 'Esc')",
|
||||
"message": "Gizlət menusu aktivləşdirildi",
|
||||
"title": "Gizlət menusu aktivləşdirildi"
|
||||
},
|
||||
"need-to-restart": {
|
||||
"buttons": {
|
||||
"later": "Sonra",
|
||||
"restart-now": "Yenidən başlat"
|
||||
},
|
||||
"detail": "\"{{pluginName}}\" plaginin işləməsi üçün proqramı yenidən başladın",
|
||||
"message": "\"{{pluginName}}\" üçün proqram yenidən başlamalıdır",
|
||||
"title": "Yenidən başlatmaq tələb edilir"
|
||||
},
|
||||
"unresponsive": {
|
||||
"buttons": {
|
||||
"quit": "Tərk et",
|
||||
"relaunch": "Yenidən işə sal",
|
||||
"wait": "Gözləyin"
|
||||
},
|
||||
"detail": "Narahatçılıq üçün üzr istəyirik! Nə etməli olduğumuzu seçin:",
|
||||
"message": "Proqram cavab vermir",
|
||||
"title": "Pəncərə Cavab vermir"
|
||||
},
|
||||
"update-available": {
|
||||
"buttons": {
|
||||
"disable": "Yeniləmələri deaktiv et",
|
||||
"download": "Yüklə",
|
||||
"ok": "Oldu"
|
||||
},
|
||||
"detail": "Yeni versiya mövcuddur və bu linkdən yüklənə bilər {{downloadLink}}",
|
||||
"message": "Yeni versiya mövcuddur",
|
||||
"title": "Yeniləmə mövcuddur"
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"about": "Haqqında",
|
||||
"navigation": {
|
||||
"label": "İstiqamət",
|
||||
"submenu": {
|
||||
"copy-current-url": "Hazırkı linki kopyala",
|
||||
"go-back": "Geri qayıt",
|
||||
"go-forward": "İrəli get",
|
||||
"quit": "Çıx",
|
||||
"restart": "Proqramı Yenidən Başlat"
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"label": "Seçimlər",
|
||||
"submenu": {
|
||||
"advanced-options": {
|
||||
"label": "Əlavə seçimlər",
|
||||
"submenu": {
|
||||
"auto-reset-app-cache": "Proqram başlayanda keşi təmizlə",
|
||||
"disable-hardware-acceleration": "Aparat təminatı sürətlənməsini deaktiv et",
|
||||
"edit-config-json": "Config.json dəyiş",
|
||||
"override-user-agent": "User-Agent dəyişdirildi",
|
||||
"restart-on-config-changes": "Konfiqurasiya dəyişikliklərində yenidən başladılır",
|
||||
"set-proxy": {
|
||||
"label": "Proxy təyin et",
|
||||
"prompt": {
|
||||
"label": "Proxy Ünvanını daxil edin: (deaktiv etmək üçün boş buraxın)",
|
||||
"placeholder": "Nümunə: SOCKS5://127.0.0.1:9999",
|
||||
"title": "Proxy təyin et"
|
||||
}
|
||||
},
|
||||
"toggle-dev-tools": "DevTools-u açıb bağla"
|
||||
}
|
||||
},
|
||||
"always-on-top": "Həmişə üst tərəfdə",
|
||||
"auto-update": "Avtomatik Yeniləmə",
|
||||
"hide-menu": {
|
||||
"dialog": {
|
||||
"message": "Menyu növbəti açılışda gizlədiləcək, göstərmək üçün [Alt] düyməsini basın (proqramdaxili menyudan istifadə edildikdə isə, [`] düyməsi).",
|
||||
"title": "Menyu gizlətmə aktivdir"
|
||||
},
|
||||
"label": "Menyunu gizlət"
|
||||
},
|
||||
"language": {
|
||||
"dialog": {
|
||||
"message": "Dil yenidən başlatmadan sonra dəyişiləcək",
|
||||
"title": "Dil dəyişdirildi"
|
||||
},
|
||||
"label": "Dil",
|
||||
"submenu": {
|
||||
"to-help-translate": "Tərcüməyə kömək etmək istəyirsiniz? Buraya basın"
|
||||
}
|
||||
},
|
||||
"resume-on-start": "Tətbiq başladıqda son mahnıdan davam et",
|
||||
"single-instance-lock": "Tək proqram kilidi",
|
||||
"start-at-login": "Giriş səhifəsində başlat",
|
||||
"starting-page": {
|
||||
"label": "Giriş səhifəsi",
|
||||
"unset": "Təyin edilməyib"
|
||||
},
|
||||
"tray": {
|
||||
"submenu": {
|
||||
"disabled": "Deaktiv edilib"
|
||||
}
|
||||
},
|
||||
"visual-tweaks": {
|
||||
"label": "Vizual düzəlişlər",
|
||||
"submenu": {
|
||||
"custom-window-title": {
|
||||
"prompt": {
|
||||
"placeholder": "Nümunə: {{applicationName}}"
|
||||
}
|
||||
},
|
||||
"like-buttons": {
|
||||
"default": "Standart",
|
||||
"hide": "Gizlət"
|
||||
},
|
||||
"remove-upgrade-button": "Yeniləmə düyməsini sil",
|
||||
"theme": {
|
||||
"dialog": {
|
||||
"button": {
|
||||
"cancel": "Ləğv et",
|
||||
"remove": "Sil"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
1
src/i18n/resources/be.json
Normal file
@ -0,0 +1 @@
|
||||
{}
|
||||
@ -150,6 +150,13 @@
|
||||
"visual-tweaks": {
|
||||
"label": "Визуални настройки",
|
||||
"submenu": {
|
||||
"custom-window-title": {
|
||||
"label": "Персонализирано заглавие на прозорец",
|
||||
"prompt": {
|
||||
"label": "Въведи персонализирано заглавие: (остави празно за да изключиш)",
|
||||
"placeholder": "Пример: {{applicationName}}"
|
||||
}
|
||||
},
|
||||
"like-buttons": {
|
||||
"default": "По подразбиране",
|
||||
"force-show": "Принудително показване",
|
||||
@ -158,6 +165,14 @@
|
||||
},
|
||||
"remove-upgrade-button": "Премахване на \"Ъпгрейд\" бутона",
|
||||
"theme": {
|
||||
"dialog": {
|
||||
"button": {
|
||||
"cancel": "Отказ",
|
||||
"remove": "Премахни"
|
||||
},
|
||||
"remove-theme": "Сигурни ли сте, че искате да премахнете персонализираната тема?",
|
||||
"remove-theme-message": "Това ще премахне персонализираната тема"
|
||||
},
|
||||
"label": "Тема",
|
||||
"submenu": {
|
||||
"import-css-file": "Импортиране на потребителски CSS файл",
|
||||
@ -172,7 +187,764 @@
|
||||
"enabled": "Активирани",
|
||||
"label": "Плъгини",
|
||||
"new": "НОВО"
|
||||
},
|
||||
"view": {
|
||||
"label": "Преглед",
|
||||
"submenu": {
|
||||
"force-reload": "Принудително презареждане",
|
||||
"reload": "Презареди",
|
||||
"reset-zoom": "Действителен размер",
|
||||
"toggle-fullscreen": "Превключване на цял екран",
|
||||
"zoom-in": "Увеличаване",
|
||||
"zoom-out": "Намаляване"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tray": {
|
||||
"next": "Следващ",
|
||||
"play-pause": "Възпроизвеждане/Пауза",
|
||||
"previous": "Предишен",
|
||||
"quit": "Изход",
|
||||
"restart": "Рестартирай приложението",
|
||||
"show": "Покажи прозорец",
|
||||
"tooltip": {
|
||||
"default": "{{applicationName}}",
|
||||
"with-song-info": "{{applicationName}}: {{artist}} - {{title}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"ad-speedup": {
|
||||
"description": "Ако се пусне реклама, заглушава аудиото и задава скорост на възпроизвеждане 16x",
|
||||
"name": "Ускоряване на рекламите"
|
||||
},
|
||||
"adblocker": {
|
||||
"description": "Блокиране на всички реклами и проследяване по подразбиране",
|
||||
"menu": {
|
||||
"blocker": "Блокировач"
|
||||
},
|
||||
"name": "Блокировач на реклами"
|
||||
},
|
||||
"album-actions": {
|
||||
"description": "Добавя бутони „Не харесвам“, „Харесвам“, „Харесано“ и „Премахване на харесване“, за да приложите това към всички песни в плейлист или албум",
|
||||
"name": "Действия за албум"
|
||||
},
|
||||
"album-color-theme": {
|
||||
"description": "Прилага динамична тема и визуални ефекти въз основа на цветовата палитра на албума",
|
||||
"menu": {
|
||||
"color-mix-ratio": {
|
||||
"label": "Съотношение на смесване на цветовете",
|
||||
"submenu": {
|
||||
"percent": "{{ratio}}%"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Цветова тема на албума"
|
||||
},
|
||||
"ambient-mode": {
|
||||
"description": "Прилага светлинен ефект, като проектира нежни цветове от видеото върху фона на екрана",
|
||||
"menu": {
|
||||
"blur-amount": {
|
||||
"label": "Степен на замъгляване",
|
||||
"submenu": {
|
||||
"pixels": "{{blurAmount}} пиксела"
|
||||
}
|
||||
},
|
||||
"buffer": {
|
||||
"label": "Буферизация",
|
||||
"submenu": {
|
||||
"buffer": "{{buffer}}"
|
||||
}
|
||||
},
|
||||
"opacity": {
|
||||
"label": "Непрозрачност",
|
||||
"submenu": {
|
||||
"percent": "{{opacity}}%"
|
||||
}
|
||||
},
|
||||
"quality": {
|
||||
"label": "Качество",
|
||||
"submenu": {
|
||||
"pixels": "{{quality}} пиксела"
|
||||
}
|
||||
},
|
||||
"size": {
|
||||
"label": "Размер",
|
||||
"submenu": {
|
||||
"percent": "{{size}}%"
|
||||
}
|
||||
},
|
||||
"smoothness-transition": {
|
||||
"label": "Плавен преход",
|
||||
"submenu": {
|
||||
"during": "{{interpolationTime}} секунди"
|
||||
}
|
||||
},
|
||||
"use-fullscreen": {
|
||||
"label": "Използване на цял екран"
|
||||
}
|
||||
},
|
||||
"name": "Атмосферен режим"
|
||||
},
|
||||
"amuse": {
|
||||
"description": "Добавя поддръжка на {{applicationName}} за джаджата Amuse Now Play от 6K Labs",
|
||||
"name": "Забавление",
|
||||
"response": {
|
||||
"query": "Сървърът на Amuse API работи. Изпратете GET /query за информация за песента."
|
||||
}
|
||||
},
|
||||
"api-server": {
|
||||
"description": "Добавя API сървър за контрол на плейъра",
|
||||
"dialog": {
|
||||
"request": {
|
||||
"buttons": {
|
||||
"allow": "Разрешавам",
|
||||
"deny": "Отказвам"
|
||||
},
|
||||
"message": "Позволяваш ли {{ID}} {{origin}} да достъпва API-то?",
|
||||
"title": "Заявка за авторизация на API"
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"auth-strategy": {
|
||||
"label": "Стратегия за авторизация",
|
||||
"submenu": {
|
||||
"auth-at-first": {
|
||||
"label": "Авторизиране при първата заявка"
|
||||
},
|
||||
"none": {
|
||||
"label": "Без авторизация"
|
||||
}
|
||||
}
|
||||
},
|
||||
"hostname": {
|
||||
"label": "Име на хост"
|
||||
},
|
||||
"port": {
|
||||
"label": "Порт"
|
||||
}
|
||||
},
|
||||
"name": "API сървър [Бета]",
|
||||
"prompt": {
|
||||
"hostname": {
|
||||
"label": "Въведете името на хоста (като 0.0.0.0) за API сървъра:",
|
||||
"title": "Име на хост"
|
||||
},
|
||||
"port": {
|
||||
"label": "Въведете порта за API сървъра:",
|
||||
"title": "Порт"
|
||||
}
|
||||
}
|
||||
},
|
||||
"audio-compressor": {
|
||||
"description": "Прилага компресия на аудиото (намалява обема на най-силните части от сигнала и увеличава обема на най-тихите части)",
|
||||
"name": "Аудио компресор"
|
||||
},
|
||||
"auth-proxy-adapter": {
|
||||
"description": "Поддръжка за използване на услуги за удостоверяване чрез прокси",
|
||||
"menu": {
|
||||
"disable": "Деактивирай адаптера за удостоверяване чрез прокси",
|
||||
"enable": "Активирай адаптера за удостоверяване чрез прокси",
|
||||
"hostname": {
|
||||
"label": "Име на хост"
|
||||
},
|
||||
"port": {
|
||||
"label": "Порт"
|
||||
}
|
||||
},
|
||||
"name": "Адаптер за удостоверяване чрез прокси",
|
||||
"prompt": {
|
||||
"hostname": {
|
||||
"label": "Въведи име за локалния прокси сървър (необходимо е рестартиране):",
|
||||
"title": "Име на прокси хост"
|
||||
},
|
||||
"port": {
|
||||
"label": "Въведи порт за локалния прокси сървър (необходимо е рестартиране):",
|
||||
"title": "Прокси порт"
|
||||
}
|
||||
}
|
||||
},
|
||||
"blur-nav-bar": {
|
||||
"description": "Прави навигационната лента прозрачна и размазана",
|
||||
"name": "Размазанa навигационна лента"
|
||||
},
|
||||
"bypass-age-restrictions": {
|
||||
"description": "Избягване на възрастова верификация на Music Player",
|
||||
"name": "Избягване на възрастови ограничения"
|
||||
},
|
||||
"captions-selector": {
|
||||
"description": "Избор на надписи за аудио тракове в {{applicationName}}",
|
||||
"menu": {
|
||||
"autoload": "Автоматично избиране на последно използвания надпис",
|
||||
"disable-captions": "Без надписи по подразбиране"
|
||||
},
|
||||
"name": "Избор на надписи",
|
||||
"prompt": {
|
||||
"selector": {
|
||||
"label": "Език на надписи: {{language}}",
|
||||
"none": "Нищо",
|
||||
"title": "Избери език на надписите"
|
||||
}
|
||||
},
|
||||
"templates": {
|
||||
"title": "Отвори избора на надписи"
|
||||
},
|
||||
"toast": {
|
||||
"caption-changed": "Надписите са сменени на {{language}}",
|
||||
"caption-disabled": "Надписите са деактивирани",
|
||||
"no-captions": "Няма налични надписи за тази песен"
|
||||
}
|
||||
},
|
||||
"compact-sidebar": {
|
||||
"description": "Винаги настройвай страничната лента в компактен режим",
|
||||
"name": "Компактна странична лента"
|
||||
},
|
||||
"crossfade": {
|
||||
"description": "Плавно преминаване през песните",
|
||||
"menu": {
|
||||
"advanced": "Разширено"
|
||||
},
|
||||
"name": "Плавно преминаване [Beta]",
|
||||
"prompt": {
|
||||
"options": {
|
||||
"multi-input": {
|
||||
"fade-in-duration": "Продължителност на преливането (милисекунди)",
|
||||
"fade-out-duration": "Продължителност на затихването (милисекунди)",
|
||||
"fade-scaling": {
|
||||
"label": "Скалиране на избледняването",
|
||||
"linear": "Линейно",
|
||||
"logarithmic": "Логаритмично"
|
||||
},
|
||||
"seconds-before-end": "Преливане N секунди преди края"
|
||||
},
|
||||
"title": "Опции за преливане"
|
||||
}
|
||||
}
|
||||
},
|
||||
"custom-output-device": {
|
||||
"description": "Конфигуриране на изходно медийно устройство за песни",
|
||||
"menu": {
|
||||
"device-selector": "Избери устройство"
|
||||
},
|
||||
"name": "Персонализирано изходно устройство",
|
||||
"prompt": {
|
||||
"device-selector": {
|
||||
"label": "Избери изходното медийно устройство",
|
||||
"title": "Избери изходно устройство"
|
||||
}
|
||||
}
|
||||
},
|
||||
"disable-autoplay": {
|
||||
"description": "Започва песента в паузиран режим",
|
||||
"menu": {
|
||||
"apply-once": "Важи само на стартиране"
|
||||
},
|
||||
"name": "Изключи автоматичното пускане"
|
||||
},
|
||||
"discord": {
|
||||
"backend": {
|
||||
"already-connected": "Опит за свързване с активна връзка",
|
||||
"connected": "Свързано с Discord",
|
||||
"disconnected": "Прекъсната връзка с Discord"
|
||||
},
|
||||
"description": "Покажи на приятелите си какво слушате с Rich Presence",
|
||||
"menu": {
|
||||
"auto-reconnect": "Автоматично повторно свързване",
|
||||
"clear-activity": "Изчистване на активността",
|
||||
"clear-activity-after-timeout": "Изчистване на активността след изтичане на времето",
|
||||
"connected": "Свързано",
|
||||
"disconnected": "Прекъснато",
|
||||
"hide-duration-left": "Скрий оставащото време",
|
||||
"hide-github-button": "Скрий бутона за линк към GitHub",
|
||||
"play-on-application": "Възпроизведи в {{applicationName}}",
|
||||
"set-inactivity-timeout": "Задай таймаут за неактивност",
|
||||
"set-status-display-type": {
|
||||
"label": "Статус текст",
|
||||
"submenu": {
|
||||
"artist": "Слушам {artist}",
|
||||
"title": "Слушам {song title}",
|
||||
"application": "Слушам {{applicationName}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Дискорд Разширен статус",
|
||||
"prompt": {
|
||||
"set-inactivity-timeout": {
|
||||
"label": "Въведете таймаута за неактивност в секунди:",
|
||||
"title": "Задайте таймаут за неактивност"
|
||||
}
|
||||
}
|
||||
},
|
||||
"downloader": {
|
||||
"backend": {
|
||||
"dialog": {
|
||||
"error": {
|
||||
"buttons": {
|
||||
"ok": "ОК"
|
||||
},
|
||||
"message": "Ох! Извинявайте, изтеглянето не успя…",
|
||||
"title": "Грешка при изтегляне!"
|
||||
},
|
||||
"start-download-playlist": {
|
||||
"buttons": {
|
||||
"ok": "ОК"
|
||||
},
|
||||
"detail": "({{playlistSize}} песни)",
|
||||
"message": "Изтегляне на плейлист {{playlistTitle}}",
|
||||
"title": "Изтеглянето започна"
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"conversion-progress": "Конвертиране: {{percent}}%",
|
||||
"converting": "Превръщане…",
|
||||
"done": "Готово: {{filePath}}",
|
||||
"download-info": "Изтегляне на {{artist}} - {{title}} [{{videoId}}",
|
||||
"download-progress": "Изтегляне: {{percent}}%",
|
||||
"downloading": "Изтегляне…",
|
||||
"downloading-counter": "Изтегляне {{current}}/{{total}}…",
|
||||
"downloading-playlist": "Изтегляне на плейлист \"{{playlistTitle}}\" - {{playlistSize}} песни ({{playlistId}})",
|
||||
"error-while-downloading": "Грешка при изтегляне на \"{{author}} - {{title}}\": {{error}}",
|
||||
"folder-already-exists": "Папката {{playlistFolder}} вече съществува",
|
||||
"getting-playlist-info": "Получаване на информация за плейлист…",
|
||||
"loading": "Зареждане…",
|
||||
"playlist-has-only-one-song": "Плейлистът съдържа само един елемент, изтегля се директно",
|
||||
"playlist-id-not-found": "Не е намерен ID на плейлист",
|
||||
"playlist-is-empty": "Плейлистът е празен",
|
||||
"playlist-is-mix-or-private": "Грешка при получаване на информация за плейлист: уверете се, че не е частен или \"Смесено за вас\" плейлист\n\n{{error}}",
|
||||
"preparing-file": "Подготвяне на файла…",
|
||||
"saving": "Записване…",
|
||||
"trying-to-get-playlist-id": "Опитвам се да получа ID на плейлист: {{playlistId}}",
|
||||
"video-id-not-found": "Видео не е намерено",
|
||||
"writing-id3": "Записване на ID3 тагове…"
|
||||
}
|
||||
},
|
||||
"description": "Изтегля MP3 / източниково аудио директно от интерфейса",
|
||||
"menu": {
|
||||
"choose-download-folder": "Изберете папка за изтегляне",
|
||||
"download-finish-settings": {
|
||||
"label": "Изтегляне при завършване",
|
||||
"prompt": {
|
||||
"last-percent": "След x процента",
|
||||
"last-seconds": "Последни x секунди",
|
||||
"title": "Конфигурирайте кога да изтеглите"
|
||||
},
|
||||
"submenu": {
|
||||
"advanced": "Разширени настройки",
|
||||
"enabled": "Активирано",
|
||||
"mode": "Режим на време",
|
||||
"percent": "Процент",
|
||||
"seconds": "Секунди"
|
||||
}
|
||||
},
|
||||
"download-playlist": "Изтегляне на плейлист",
|
||||
"presets": "Предварително зададени настройки",
|
||||
"skip-existing": "Пропусни съществуващите файлове"
|
||||
},
|
||||
"name": "Изтегляч",
|
||||
"renderer": {
|
||||
"can-not-update-progress": "Не може да се актуализира напредъкът"
|
||||
},
|
||||
"templates": {
|
||||
"button": "Изтегляне"
|
||||
}
|
||||
},
|
||||
"equalizer": {
|
||||
"description": "Добавя еквалайзер към плеъра",
|
||||
"menu": {
|
||||
"presets": {
|
||||
"label": "Предварителни настройки",
|
||||
"list": {
|
||||
"bass-booster": "Усилвател на басове"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Еквалайзер"
|
||||
},
|
||||
"exponential-volume": {
|
||||
"description": "Прави плъзгача за сила на звука експоненциален, така че да е по-лесно да се избират по-ниски нива на звук.",
|
||||
"name": "Експоненциален звук"
|
||||
},
|
||||
"in-app-menu": {
|
||||
"description": "Придава на меню баровете стилен, тъмен или с цвят на албума вид",
|
||||
"menu": {
|
||||
"hide-dom-window-controls": "Скрий контролните елементи на DOM прозореца"
|
||||
},
|
||||
"name": "Меню в приложението"
|
||||
},
|
||||
"lumiastream": {
|
||||
"description": "Добавя поддръжка за Lumia Stream",
|
||||
"name": "Lumia Stream [Бета]"
|
||||
},
|
||||
"lyrics-genius": {
|
||||
"description": "Добавя поддръжка за текстове за повечето песни",
|
||||
"menu": {
|
||||
"romanized-lyrics": "Романизирани текстове"
|
||||
},
|
||||
"name": "Текстове от Genius",
|
||||
"renderer": {
|
||||
"fetched-lyrics": "Изтеглени текстове от Genius"
|
||||
}
|
||||
},
|
||||
"music-together": {
|
||||
"description": "Сподели плейлист с други. Когато хостът пусне песен, всички останали ще чуят същата песен",
|
||||
"dialog": {
|
||||
"enter-host": "Въведи ID на хоста"
|
||||
},
|
||||
"internal": {
|
||||
"save": "Запазване",
|
||||
"track-source": "Източник на трак",
|
||||
"unknown-user": "Неизвестен потребител"
|
||||
},
|
||||
"menu": {
|
||||
"click-to-copy-id": "Копирай ID на хост",
|
||||
"close": "Затвори Music Together",
|
||||
"connected-users": "Свързани потребители",
|
||||
"disconnect": "Прекъсни Music Together",
|
||||
"empty-user": "Няма свързани потребители",
|
||||
"host": "Хост на Music Together",
|
||||
"join": "Присъедини се към Music Together",
|
||||
"permission": {
|
||||
"all": "Позволи на гостите да управляват плейлист и плеър",
|
||||
"host-only": "Само хостът може да управлява плейлист и плеър",
|
||||
"playlist": "Позволи на гостите да управляват плейлист"
|
||||
},
|
||||
"set-permission": "Промени разрешението за управление",
|
||||
"status": {
|
||||
"disconnected": "Прекъснато",
|
||||
"guest": "Свързан като гост",
|
||||
"host": "Свързан като хост"
|
||||
}
|
||||
},
|
||||
"name": "Music Together [Бета]",
|
||||
"toast": {
|
||||
"add-song-failed": "Неуспешно добавяне на песен",
|
||||
"closed": "Music Together е затворена",
|
||||
"disconnected": "Music Together е прекъсната",
|
||||
"host-failed": "Неуспешно хостване на Music Together",
|
||||
"id-copied": "ID на хоста е копиран в клипборда",
|
||||
"id-copy-failed": "Неуспешно копиране на ID на хоста в клипборда",
|
||||
"join-failed": "Неуспешно присъединяване към Music Together",
|
||||
"joined": "Присъединен към Music Together",
|
||||
"permission-changed": "Разрешението за Music Together е променено на \"{{permission}}\"",
|
||||
"remove-song-failed": "Неуспешно премахване на песен",
|
||||
"user-connected": "{{name}} се присъедини към Music Together",
|
||||
"user-disconnected": "{{name}} напусна Music Together"
|
||||
}
|
||||
},
|
||||
"navigation": {
|
||||
"description": "Навигационни стрелки Напред/Назад, директно интегрирани в интерфейса, както в любимия ви браузър",
|
||||
"name": "Навигация",
|
||||
"templates": {
|
||||
"back": {
|
||||
"title": "Предишна страница"
|
||||
},
|
||||
"forward": {
|
||||
"title": "Следваща страница"
|
||||
}
|
||||
}
|
||||
},
|
||||
"no-google-login": {
|
||||
"description": "Премахни бутоните за вход с Google и връзките от интерфейса",
|
||||
"name": "Няма вход с Google"
|
||||
},
|
||||
"notifications": {
|
||||
"description": "Показване на известие при стартиране на песен (интерактивни известия са налични за Windows)",
|
||||
"menu": {
|
||||
"interactive": "Интерактивни известия",
|
||||
"interactive-settings": {
|
||||
"label": "Интерактивни настройки",
|
||||
"submenu": {
|
||||
"hide-button-text": "Скрий текста на бутоните",
|
||||
"refresh-on-play-pause": "Обновяване при Възпроизвеждане/Пауза",
|
||||
"tray-controls": "Отваряне/Затваряне при клик в тавата"
|
||||
}
|
||||
},
|
||||
"priority": "Приоритет на известията",
|
||||
"toast-style": "Стил на toast (кратки изскачащи известия)",
|
||||
"unpause-notification": "Показване на известие при възобновяване"
|
||||
},
|
||||
"name": "Известия"
|
||||
},
|
||||
"performance-improvement": {
|
||||
"description": "Подобри производителността като пуснеш експериментални скриптове",
|
||||
"name": "Производителни подобрения"
|
||||
},
|
||||
"picture-in-picture": {
|
||||
"description": "Позволява превключване на приложението в режим картинка във картинка",
|
||||
"menu": {
|
||||
"always-on-top": "Винаги на преден план",
|
||||
"hotkey": {
|
||||
"label": "Клавишна комбинация",
|
||||
"prompt": {
|
||||
"keybind-options": {
|
||||
"hotkey": "Клавишна комбинация"
|
||||
},
|
||||
"label": "Изберете клавишна комбинация за превключване на картинка във картинка",
|
||||
"title": "Клавишна комбинация за картинка във картинка"
|
||||
}
|
||||
},
|
||||
"save-window-position": "Запомняне на позицията на прозореца",
|
||||
"save-window-size": "Запомняне на размера на прозореца",
|
||||
"use-native-pip": "Използвайте вградения картинка във картинка на браузера"
|
||||
},
|
||||
"name": "Картинка във картинка",
|
||||
"templates": {
|
||||
"button": "Картинка във картинка"
|
||||
}
|
||||
},
|
||||
"playback-speed": {
|
||||
"description": "Слушай бързо, слушай бавно! Добавя плъзгач, който управлява скоростта на песните",
|
||||
"name": "Скорост на възпроизвеждане",
|
||||
"templates": {
|
||||
"button": "Скорост"
|
||||
}
|
||||
},
|
||||
"precise-volume": {
|
||||
"description": "Управлявайте прецизно силата на звука чрез колелото на мишката или бързи клавиши, с персонализиран HUD и настройвани нива на звука",
|
||||
"menu": {
|
||||
"arrows-shortcuts": "Локални контроли със стрелки",
|
||||
"custom-volume-steps": "Задайте персонализирани нива на звука",
|
||||
"global-shortcuts": "Глобални бързи клавиши"
|
||||
},
|
||||
"name": "Точна сила на звука",
|
||||
"prompt": {
|
||||
"global-shortcuts": {
|
||||
"keybind-options": {
|
||||
"decrease": "Намаляване на звука",
|
||||
"increase": "Усилване на звука"
|
||||
},
|
||||
"label": "Изберете глобални клавишни комбинации за сила на звука:",
|
||||
"title": "Глобални клавишни комбинации за звук"
|
||||
},
|
||||
"volume-steps": {
|
||||
"label": "Изберете стъпки за увеличаване/намаляване на звука",
|
||||
"title": "Стъпки на звука"
|
||||
}
|
||||
}
|
||||
},
|
||||
"quality-changer": {
|
||||
"backend": {
|
||||
"dialog": {
|
||||
"quality-changer": {
|
||||
"detail": "Текущо качество: {{quality}}",
|
||||
"message": "Изберете качество на видеото:",
|
||||
"title": "Изберете качество на видеото"
|
||||
}
|
||||
}
|
||||
},
|
||||
"description": "Позволява промяна на качеството на видеото с бутон върху видеото",
|
||||
"name": "Промяна на качеството на видеото",
|
||||
"renderer": {
|
||||
"quality-settings-button": {
|
||||
"label": "Отвори настройките за качество на плейъра"
|
||||
}
|
||||
}
|
||||
},
|
||||
"scrobbler": {
|
||||
"description": "Добавяне на скробблинг поддръжка (last.fm, Listenbrainz и т.н.)",
|
||||
"dialog": {
|
||||
"lastfm": {
|
||||
"auth-failed": {
|
||||
"message": "Грешка при удостоверяване с Last.fm\nСкрий изкачащия прозорец до следващо пускане.",
|
||||
"title": "Грешка при удостоверяване"
|
||||
}
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"lastfm": {
|
||||
"api-settings": "Настройки за Last.fm API"
|
||||
},
|
||||
"listenbrainz": {
|
||||
"token": "Въведете ListenBrainz потребителски токен"
|
||||
},
|
||||
"scrobble-alternative-artist": "Използвай алтернативни изпълнители",
|
||||
"scrobble-alternative-title": "Използвай алтернативни заглавия",
|
||||
"scrobble-other-media": "Скробъл на други медии"
|
||||
},
|
||||
"name": "Скробълър",
|
||||
"prompt": {
|
||||
"lastfm": {
|
||||
"api-key": "Last.fm API ключ",
|
||||
"api-secret": "Last.fm API тайна"
|
||||
},
|
||||
"listenbrainz": {
|
||||
"token": {
|
||||
"label": "Въведете вашия ListenBrainz потребителски токен:",
|
||||
"title": "ListenBrainz токен"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"shortcuts": {
|
||||
"description": "Позволява задаване на глобални бързи клавиши за възпроизвеждане (пускане/пауза/следваща/предишна), изключване на медиен OSD чрез презаписване на медийни клавиши, включване на Ctrl/CMD + F за търсене, включване на Linux MPRIS поддръжка за медийни клавиши и персонализирани бързи клавиши за напреднали потребители",
|
||||
"menu": {
|
||||
"override-media-keys": "Презаписване на медийни клавиши",
|
||||
"set-keybinds": "Задайте глобални контроли за песни"
|
||||
},
|
||||
"name": "Клавишни комбинации (& MPRIS)",
|
||||
"prompt": {
|
||||
"keybind": {
|
||||
"keybind-options": {
|
||||
"next": "Следваща",
|
||||
"play-pause": "Пусни / Пауза",
|
||||
"previous": "Предишна"
|
||||
},
|
||||
"label": "Изберете глобални клавишни комбинации за контрол на песните:",
|
||||
"title": "Глобални клавишни комбинации"
|
||||
}
|
||||
}
|
||||
},
|
||||
"skip-disliked-songs": {
|
||||
"description": "Прескача нехаресаните песни",
|
||||
"name": "Прескачане на нехаресани песни"
|
||||
},
|
||||
"skip-silences": {
|
||||
"description": "Автоматично прескачане на тихи участъци в песните",
|
||||
"name": "Прескачане на тишини"
|
||||
},
|
||||
"sponsorblock": {
|
||||
"description": "Автоматично прескача не-музикални части като встъпление/изход или части от музикални клипове, където песента не се пуска",
|
||||
"name": "SponsorBlock"
|
||||
},
|
||||
"synced-lyrics": {
|
||||
"description": "Предоставя синхронизирани текстове на песни, използвайки доставчици като LRClib.",
|
||||
"errors": {
|
||||
"fetch": "⚠️\tВъзникна грешка при извличане на текста.\n\tМоля, опитайте по-късно.",
|
||||
"not-found": "⚠️ За тази песен не са намерени текстове."
|
||||
},
|
||||
"menu": {
|
||||
"default-text-string": {
|
||||
"label": "Подразбиращ се знак между текстовете",
|
||||
"tooltip": "Изберете знака, който да се използва за интервала между текстовете"
|
||||
},
|
||||
"line-effect": {
|
||||
"label": "Линеен ефект",
|
||||
"submenu": {
|
||||
"fancy": {
|
||||
"label": "Украсено",
|
||||
"tooltip": "Използвайте големи, приложно-подобни ефекти на текущия ред"
|
||||
},
|
||||
"focus": {
|
||||
"label": "Фокус",
|
||||
"tooltip": "Направете само текущия ред бял"
|
||||
},
|
||||
"offset": {
|
||||
"label": "Отместване",
|
||||
"tooltip": "Отместване на текущия ред вдясно"
|
||||
},
|
||||
"scale": {
|
||||
"label": "Мащаб",
|
||||
"tooltip": "Мащабирайте текущия ред"
|
||||
}
|
||||
},
|
||||
"tooltip": "Изберете ефекта, който да се приложи към текущия ред"
|
||||
},
|
||||
"precise-timing": {
|
||||
"label": "Направете текстовете перфектно синхронизирани",
|
||||
"tooltip": "Изчислете до милисекунда показването на следващия ред (може да има малък ефект върху производителността)"
|
||||
},
|
||||
"preferred-provider": {
|
||||
"label": "Предпочитан доставчик",
|
||||
"none": {
|
||||
"label": "Празно",
|
||||
"tooltip": "Без предпочитан доставчик"
|
||||
},
|
||||
"tooltip": "Изберете доставчик по подразбиране"
|
||||
},
|
||||
"romanization": {
|
||||
"label": "Романизиране на текстовете",
|
||||
"tooltip": "Ако текстовете са на друг език, опитайте да покажете латинска версия."
|
||||
},
|
||||
"show-lyrics-even-if-inexact": {
|
||||
"label": "Показване на текстовете, дори ако са неточни",
|
||||
"tooltip": "Ако песента не бъде намерена, добавката се опитва отново с различен поисков запрос.\nРезултатът от втория опит може да не е точен."
|
||||
},
|
||||
"show-time-codes": {
|
||||
"label": "Показване на временни кодове",
|
||||
"tooltip": "Показване на временни кодове до текстовете"
|
||||
}
|
||||
},
|
||||
"name": "Синхронизирани текстове",
|
||||
"refetch-btn": {
|
||||
"fetching": "Извличане...",
|
||||
"normal": "Повторно извличане на текстовете"
|
||||
},
|
||||
"warnings": {
|
||||
"duration-mismatch": "⚠️ - Текстовете може да не са синхронизирани поради несъответствие в продължителността.",
|
||||
"inexact": "⚠️ - Текстовете за тази песен може да не са точни",
|
||||
"instrumental": "⚠️ - Това е инструментална песен"
|
||||
}
|
||||
},
|
||||
"taskbar-mediacontrol": {
|
||||
"description": "Управление на възпроизвеждането от лентата с задачи на Windows",
|
||||
"name": "Управление на медията от лентата със задачи"
|
||||
},
|
||||
"touchbar": {
|
||||
"description": "Добавя уиджет за TouchBar за потребители на macOS",
|
||||
"name": "TouchBar"
|
||||
},
|
||||
"transparent-player": {
|
||||
"description": "Прави прозореца на приложението прозрачен",
|
||||
"menu": {
|
||||
"opacity": {
|
||||
"label": "Прозрачност",
|
||||
"submenu": {
|
||||
"percent": "{{opacity}}%"
|
||||
}
|
||||
},
|
||||
"type": {
|
||||
"label": "Тип",
|
||||
"submenu": {
|
||||
"acrylic": "Акрил",
|
||||
"mica": "Слюда",
|
||||
"none": "Празно",
|
||||
"tabbed": "С раздели"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Прозрачен плейър"
|
||||
},
|
||||
"tuna-obs": {
|
||||
"description": "Интеграция с плъгина Tuna за OBS",
|
||||
"name": "Tuna OBS"
|
||||
},
|
||||
"unobtrusive-player": {
|
||||
"description": "Предотвратява изскачането на плеъра при възпроизвеждане на песен",
|
||||
"name": "Неназойлив плеър"
|
||||
},
|
||||
"video-toggle": {
|
||||
"description": "Добавя бутон за превключване между видео/песен режим. Също така може по избор да премахва целия раздел за видео",
|
||||
"menu": {
|
||||
"align": {
|
||||
"label": "Подравняване",
|
||||
"submenu": {
|
||||
"left": "Ляво",
|
||||
"middle": "В средата",
|
||||
"right": "Дясно"
|
||||
}
|
||||
},
|
||||
"force-hide": "Принудително премахване на раздела за видео",
|
||||
"mode": {
|
||||
"label": "Режим",
|
||||
"submenu": {
|
||||
"custom": "Персонализиран превключвател",
|
||||
"disabled": "Изключено",
|
||||
"native": "Вграден превключвател"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Превключване на видео",
|
||||
"templates": {
|
||||
"button-song": "Песен",
|
||||
"button-video": "Видео"
|
||||
}
|
||||
},
|
||||
"visualizer": {
|
||||
"description": "Добавя визуализатор към плеъра",
|
||||
"menu": {
|
||||
"visualizer-type": "Тип визуализатор"
|
||||
},
|
||||
"name": "Визуализатор"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
899
src/i18n/resources/bn.json
Normal file
@ -0,0 +1,899 @@
|
||||
{
|
||||
"common": {
|
||||
"console": {
|
||||
"plugins": {
|
||||
"execute-failed": "প্লাগইন {{pluginName}}::{{contextName}} কার্যকর করতে ব্যর্থ হয়েছে",
|
||||
"executed-at-ms": "প্লাগইন {{pluginName}}::{{contextName}} {{ms}}মিলিসেকেন্ডে কার্যকর হয়েছে",
|
||||
"initialize-failed": "প্লাগইন \"{{pluginName}}\" চালু করতে ব্যর্থ হয়েছে",
|
||||
"load-all": "সকল প্লাগইন লোড করা হচ্ছে",
|
||||
"load-failed": "প্লাগইন \"{{pluginName}}\" লোড হতে ব্যর্থ হয়েছে",
|
||||
"loaded": "প্লাগইন \"{{pluginName}}\" লোড হয়েছে",
|
||||
"unload-failed": "প্লাগইন \"{{pluginName}}\" আনলোড করতে ব্যর্থ হয়েছে",
|
||||
"unloaded": "প্লাগইন \"{{pluginName}}\" আনলোড হয়েছে"
|
||||
}
|
||||
}
|
||||
},
|
||||
"language": {
|
||||
"code": "bn",
|
||||
"local-name": "বাংলা",
|
||||
"name": "Bengali"
|
||||
},
|
||||
"main": {
|
||||
"console": {
|
||||
"did-finish-load": {
|
||||
"dev-tools": "লোড সম্পন্ন হয়েছে। ডেভটুলস খোলা হয়েছে"
|
||||
},
|
||||
"i18n": {
|
||||
"loaded": "i18n লোড হয়েছে"
|
||||
},
|
||||
"second-instance": {
|
||||
"receive-command": "প্রোটোকলের মাধ্যমে কমান্ড গ্রহণ করা হয়েছে: \"{{command}}\""
|
||||
},
|
||||
"theme": {
|
||||
"css-file-not-found": "CSS ফাইল \"{{cssFile}}\" পাওয়া যায়নি, ইগনোর করা হয়েছে"
|
||||
},
|
||||
"unresponsive": {
|
||||
"details": "অকার্যকর ত্রুটি!\n{{error}}"
|
||||
},
|
||||
"when-ready": {
|
||||
"clearing-cache-after-20s": "অ্যাপ ক্যাশ মুছে ফেলা হচ্ছে"
|
||||
},
|
||||
"window": {
|
||||
"tried-to-render-offscreen": "উইন্ডোটি স্ক্রিনের বাইরে রেন্ডার করার চেষ্টা করেছে, windowSize={{windowSize}}, displaySize={{displaySize}}, position={{position}}"
|
||||
}
|
||||
},
|
||||
"dialog": {
|
||||
"hide-menu-enabled": {
|
||||
"detail": "মেনু লুকানো রয়েছে, দেখতে 'Alt' চাপুন ( অথবা ইন-অ্যাপ মেনু ব্যবহার করে থাকলে 'Escape' চাপুন )",
|
||||
"message": "মেনু লুকান সক্রিয় করা হয়েছে",
|
||||
"title": "মেনু লুকান সক্রিয় হয়েছে"
|
||||
},
|
||||
"need-to-restart": {
|
||||
"buttons": {
|
||||
"later": "পরে",
|
||||
"restart-now": "রিস্টার্ট করুন"
|
||||
},
|
||||
"detail": "\"{{pluginName}}\" প্লাগইন কার্যকর করতে পুনরারম্ভ করতে হবে",
|
||||
"message": "\"{{pluginName}}\" পুনরায় চালু করা প্রয়োজন",
|
||||
"title": "পুনরায় চালু করা প্রয়োজন"
|
||||
},
|
||||
"unresponsive": {
|
||||
"buttons": {
|
||||
"quit": "বন্ধ করুন",
|
||||
"relaunch": "পুনরায় চালু করুন",
|
||||
"wait": "অপেক্ষা করুন"
|
||||
},
|
||||
"detail": "অসুবিধার জন্য আমরা দুঃখিত! অনুগ্রহ করে কী করতে চান তা নির্বাচন করুন:",
|
||||
"message": "অ্যাপ্লিকেশনটি কাজ করছে না",
|
||||
"title": "উইন্ডোটি কাজ করছে না"
|
||||
},
|
||||
"update-available": {
|
||||
"buttons": {
|
||||
"disable": "আপডেট বন্ধ করুন",
|
||||
"download": "ডাউনলোড",
|
||||
"ok": "ওকে"
|
||||
},
|
||||
"detail": "একটি নতুন ভার্সন এসেছে এবং এটি {{downloadLink}} থেকে ডাউনলোড করতে পারেন",
|
||||
"message": "একটি নতুন ভার্সন এসেছে",
|
||||
"title": "আপডেট করতে পারেন"
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"about": "সম্পর্কে",
|
||||
"navigation": {
|
||||
"label": "নেভিগেশন",
|
||||
"submenu": {
|
||||
"copy-current-url": "বর্তমান URL কপি করুন",
|
||||
"go-back": "পেছনে যান",
|
||||
"go-forward": "সামনে যান",
|
||||
"quit": "বন্ধ",
|
||||
"restart": "অ্যাপ পুনরায় চালু করুন"
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"label": "অপশন",
|
||||
"submenu": {
|
||||
"advanced-options": {
|
||||
"label": "এডভ্যান্স অপশন",
|
||||
"submenu": {
|
||||
"auto-reset-app-cache": "অ্যাপ চালুর সময় ক্যাশ রিসেট করুন",
|
||||
"disable-hardware-acceleration": "হার্ডওয়্যার অ্যাকসেলারেশন নিষ্ক্রিয় করুন",
|
||||
"edit-config-json": "config.json এডিট করুন",
|
||||
"override-user-agent": "ইউজার এজেন্ট বদলান",
|
||||
"restart-on-config-changes": "কনফিগ পরিবর্তন হলে আবার চালু করুন",
|
||||
"set-proxy": {
|
||||
"label": "প্রক্সি সেট করুন",
|
||||
"prompt": {
|
||||
"label": "প্রক্সি ঠিকানা দিন: (বন্ধ করতে ফাকা রাখুন)",
|
||||
"placeholder": "যেমন: SOCKS5://127.0.0.1:9999",
|
||||
"title": "প্রক্সি সেট করুন"
|
||||
}
|
||||
},
|
||||
"toggle-dev-tools": "ডেভ টুল চালু/বন্ধ"
|
||||
}
|
||||
},
|
||||
"always-on-top": "সবসময় উপরে রাখুন",
|
||||
"auto-update": "স্বয়ংক্রিয় আপডেট চালু করুন",
|
||||
"hide-menu": {
|
||||
"dialog": {
|
||||
"message": "পরবর্তী চালুর সময় মেনু লুকানো থাকবে, দেখতে [Alt] চাপুন (অথবা ইন-অ্যাপ মেনু হলে [`] ব্যবহার করুন)",
|
||||
"title": "মেনু লুকানো হয়েছে"
|
||||
},
|
||||
"label": "মেনু লুকান"
|
||||
},
|
||||
"language": {
|
||||
"dialog": {
|
||||
"message": "পুনরায় চালু করলে ভাষা পরিবর্তন হয়ে যাবে",
|
||||
"title": "ভাষা নির্বাচন করুন"
|
||||
},
|
||||
"label": "ভাষা",
|
||||
"submenu": {
|
||||
"to-help-translate": "অনুবাদে সাহায্য করতে চান? এখানে চাপ দিন"
|
||||
}
|
||||
},
|
||||
"resume-on-start": "অ্যাপ চালু হলে শেষ গানটি আবার চালু করুন",
|
||||
"single-instance-lock": "একক ইনস্ট্যান্স লক",
|
||||
"start-at-login": "লগইনের সময় চালু করুন",
|
||||
"starting-page": {
|
||||
"label": "শুরুর পেজ",
|
||||
"unset": "নির্ধারণ করা হয়নি"
|
||||
},
|
||||
"tray": {
|
||||
"label": "ট্রে",
|
||||
"submenu": {
|
||||
"disabled": "ট্রে বন্ধ",
|
||||
"enabled-and-hide-app": "ট্রে চালু ও অ্যাপ লুকান",
|
||||
"enabled-and-show-app": "ট্রে চালু ও অ্যাপ দেখান",
|
||||
"play-pause-on-click": "ট্রে ক্লিক করলে প্লে/পজ"
|
||||
}
|
||||
},
|
||||
"visual-tweaks": {
|
||||
"label": "দৃষ্টিনন্দন পরিবর্তন",
|
||||
"submenu": {
|
||||
"custom-window-title": {
|
||||
"label": "কাস্টম উইন্ডো টাইটেল",
|
||||
"prompt": {
|
||||
"label": "নিজস্ব উইন্ডোর টাইটেল দিন (বন্ধ করতে ফাঁকা রাখুন)",
|
||||
"placeholder": "উদাহরণস্বরূপ: {{applicationName}}"
|
||||
}
|
||||
},
|
||||
"like-buttons": {
|
||||
"default": "ডিফল্ট লাইক বাটন",
|
||||
"force-show": "সবসময় লাইক বাটন দেখান",
|
||||
"hide": "লাইক বাটন লুকান",
|
||||
"label": "লাইক বাটনের নিয়ন্ত্রণ"
|
||||
},
|
||||
"remove-upgrade-button": "আপগ্রেড বাটন সরান",
|
||||
"theme": {
|
||||
"dialog": {
|
||||
"button": {
|
||||
"cancel": "বাতিল",
|
||||
"remove": "থিম সরান"
|
||||
},
|
||||
"remove-theme": "থিম সরাতে চান?",
|
||||
"remove-theme-message": "এটি কাস্টম থিমটি বাদ দিয়ে দিবে"
|
||||
},
|
||||
"label": "থিম",
|
||||
"submenu": {
|
||||
"import-css-file": "CSS ফাইল ইমপোর্ট করুন",
|
||||
"no-theme": "কোন থিম নেই"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"enabled": "প্লাগইন চালু",
|
||||
"label": "প্লাগইন",
|
||||
"new": "নতুন প্লাগইন"
|
||||
},
|
||||
"view": {
|
||||
"label": "দেখুন",
|
||||
"submenu": {
|
||||
"force-reload": "জোর করে রিফ্রেশ করুন",
|
||||
"reload": "রিফ্রেশ করুন",
|
||||
"reset-zoom": "জুম রিসেট করুন",
|
||||
"toggle-fullscreen": "ফুলস্ক্রিন চালু/বন্ধ",
|
||||
"zoom-in": "বড় করুন",
|
||||
"zoom-out": "ছোট করুন"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tray": {
|
||||
"next": "নেক্সট",
|
||||
"play-pause": "চালু/বন্ধ",
|
||||
"previous": "পূর্ববর্তী",
|
||||
"quit": "বন্ধ",
|
||||
"restart": "অ্যাপ পুনরায় চালু করুন",
|
||||
"show": "উইন্ডো দেখান",
|
||||
"tooltip": {
|
||||
"default": "{{applicationName}}",
|
||||
"with-song-info": "{{applicationName}}: {{artist}} - {{title}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"ad-speedup": {
|
||||
"description": "বিজ্ঞাপন চললে, এটি অডিও বন্ধ করে দেয় এবং প্লেব্যাক গতি ১৬ গুণ করে দেয়",
|
||||
"name": "বিজ্ঞাপন দ্রুত করুন"
|
||||
},
|
||||
"adblocker": {
|
||||
"description": "সব বিজ্ঞাপন ও ট্র্যাকিং শুরু থেকেই ব্লক করুন",
|
||||
"menu": {
|
||||
"blocker": "ব্লকার"
|
||||
},
|
||||
"name": "এড ব্লকার"
|
||||
},
|
||||
"album-actions": {
|
||||
"description": "প্লেলিস্ট বা অ্যালবামের সব গানেই প্রয়োগ করতে আনডিসলাইক, ডিসলাইক, লাইক ও আনলাইক বাটন যোগ করে",
|
||||
"name": "অ্যালবাম অ্যাকশনসমূহ"
|
||||
},
|
||||
"album-color-theme": {
|
||||
"description": "অ্যালবামের রঙের উপর ভিত্তি করে ডাইনামিক থিম ও ভিজ্যুয়াল ইফেক্ট প্রয়োগ করুন",
|
||||
"menu": {
|
||||
"color-mix-ratio": {
|
||||
"label": "কালার মিক্স রেশিও",
|
||||
"submenu": {
|
||||
"percent": "{{ratio}}%"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "এলবাম এর কালার থিম"
|
||||
},
|
||||
"ambient-mode": {
|
||||
"description": "ভিডিও থেকে নরম আলো ছড়িয়ে আপনার স্ক্রিনের ব্যাকগ্রাউন্ডে লাইটিং ইফেক্ট প্রয়োগ করে",
|
||||
"menu": {
|
||||
"blur-amount": {
|
||||
"label": "ব্লার এর পরিমাণ",
|
||||
"submenu": {
|
||||
"pixels": "{{blurAmount}} পিক্সেল"
|
||||
}
|
||||
},
|
||||
"buffer": {
|
||||
"label": "বাফার",
|
||||
"submenu": {
|
||||
"buffer": "{{buffer}}"
|
||||
}
|
||||
},
|
||||
"opacity": {
|
||||
"label": "স্বচ্ছতা",
|
||||
"submenu": {
|
||||
"percent": "{{opacity}}%"
|
||||
}
|
||||
},
|
||||
"quality": {
|
||||
"label": "কোয়ালিটি",
|
||||
"submenu": {
|
||||
"pixels": "{{quality}}পিক্সেল"
|
||||
}
|
||||
},
|
||||
"size": {
|
||||
"label": "আকার",
|
||||
"submenu": {
|
||||
"percent": "{{size}}শতাংশ"
|
||||
}
|
||||
},
|
||||
"smoothness-transition": {
|
||||
"label": "মসৃণ রূপান্তর",
|
||||
"submenu": {
|
||||
"during": "{{interpolationTime}} সেকেন্ড সময়কালে"
|
||||
}
|
||||
},
|
||||
"use-fullscreen": {
|
||||
"label": "পূর্ণপর্দা ব্যবহার করা"
|
||||
}
|
||||
},
|
||||
"name": "পরিবেষ্টিত মোড"
|
||||
},
|
||||
"amuse": {
|
||||
"description": "ইউটিউব মিউজিকে অ্যামিউজ সমর্থন যোগ করা হয়েছে যা এখন ৬কে ল্যাবস উইজেটে চলছে",
|
||||
"name": "মনোরঞ্জন",
|
||||
"response": {
|
||||
"query": "অ্যামিউজ API সার্ভার চলছে। /query ব্যবহার করে গান সম্পর্কিত তথ্য পান।"
|
||||
}
|
||||
},
|
||||
"api-server": {
|
||||
"description": "প্লেয়ার নিয়ন্ত্রণের জন্য একটি API সার্ভার যোগ করা হয়েছে",
|
||||
"dialog": {
|
||||
"request": {
|
||||
"buttons": {
|
||||
"allow": "অনুমতি দিন",
|
||||
"deny": "অস্বীকার করা"
|
||||
},
|
||||
"message": "{{ID}} ({{origin}}) কে API ব্যবহারের অনুমতি দিবেন?",
|
||||
"title": "API অথোরাইজ এর অনুরোধ"
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"auth-strategy": {
|
||||
"label": "অথোরাইজেশন স্ট্র্যাটেজি",
|
||||
"submenu": {
|
||||
"auth-at-first": {
|
||||
"label": "প্রথম অনুরোধে অথোরাইজ করুন"
|
||||
},
|
||||
"none": {
|
||||
"label": "কোন অথোরাইজেশন নেই"
|
||||
}
|
||||
}
|
||||
},
|
||||
"hostname": {
|
||||
"label": "হোস্টনেম"
|
||||
},
|
||||
"port": {
|
||||
"label": "পোর্ট"
|
||||
}
|
||||
},
|
||||
"name": "API সার্ভার [বেটা]",
|
||||
"prompt": {
|
||||
"hostname": {
|
||||
"label": "API সার্ভারের জন্য হোস্টনেম (যেমন 0.0.0.0) লিখুন:",
|
||||
"title": "হোস্টনেম"
|
||||
},
|
||||
"port": {
|
||||
"label": "API সার্ভারের জন্য পোর্ট লিখুন:",
|
||||
"title": "পোর্ট"
|
||||
}
|
||||
}
|
||||
},
|
||||
"audio-compressor": {
|
||||
"description": "অডিওতে কম্প্রেশন প্রয়োগ করুন (উচ্চতর শব্দের অংশগুলোর ভলিউম কমিয়ে দেয় এবং নীরবতম অংশগুলোর ভলিউম বাড়িয়ে দেয়)",
|
||||
"name": "অডিও কম্প্রেসর"
|
||||
},
|
||||
"auth-proxy-adapter": {
|
||||
"description": "অথেনটিকেশন প্রক্সি সার্ভিস ব্যবহারের সাপোর্ট",
|
||||
"menu": {
|
||||
"disable": "প্রক্সি অ্যাডাপ্টার বন্ধ করুন",
|
||||
"enable": "প্রক্সি অ্যাডাপ্টার চালু করুন",
|
||||
"hostname": {
|
||||
"label": "হোস্টনেম"
|
||||
},
|
||||
"port": {
|
||||
"label": "পোর্ট"
|
||||
}
|
||||
},
|
||||
"name": "অথেনটিকেশন প্রক্সি অ্যাডাপ্টার",
|
||||
"prompt": {
|
||||
"hostname": {
|
||||
"label": "লোকাল প্রক্সি সার্ভারের জন্য হোস্টনেম লিখুন (পুনরায় চালু করতে হবে):",
|
||||
"title": "প্রক্সি হোস্টনেম"
|
||||
},
|
||||
"port": {
|
||||
"label": "লোকাল প্রক্সি সার্ভারের জন্য পোর্ট লিখুন (পুনরায় চালু করতে হবে):",
|
||||
"title": "প্রক্সি পোর্ট"
|
||||
}
|
||||
}
|
||||
},
|
||||
"blur-nav-bar": {
|
||||
"description": "নেভিগেশন বারকে স্বচ্ছ এবং ঝাপসা করে",
|
||||
"name": "নেভিগেশন বার ঝাপসা করুন"
|
||||
},
|
||||
"bypass-age-restrictions": {
|
||||
"description": "ইউটিউবের বয়স যাচাইকরণ এড়িয়ে যান",
|
||||
"name": "বয়স সীমাবদ্ধতা এড়ান"
|
||||
},
|
||||
"captions-selector": {
|
||||
"description": "ইউটিউব মিউজিক অডিও ট্র্যাকের জন্য ক্যাপশন নির্বাচক",
|
||||
"menu": {
|
||||
"autoload": "সর্বশেষ ব্যবহৃত ক্যাপশন স্বয়ংক্রিয়ভাবে নির্বাচন করুন",
|
||||
"disable-captions": "ডিফল্টভাবে কোন ক্যাপশন নেই"
|
||||
},
|
||||
"name": "ক্যাপশন নির্বাচক",
|
||||
"prompt": {
|
||||
"selector": {
|
||||
"label": "বর্তমান ক্যাপশন ভাষা: {{language}}",
|
||||
"none": "কোনোটি নয়",
|
||||
"title": "ক্যাপশন ভাষা নির্বাচন করুন"
|
||||
}
|
||||
},
|
||||
"templates": {
|
||||
"title": "ক্যাপশন নির্বাচক খুলুন"
|
||||
},
|
||||
"toast": {
|
||||
"caption-changed": "ক্যাপশন {{language}} ভাষায় পরিবর্তিত হয়েছে",
|
||||
"caption-disabled": "ক্যাপশন বন্ধ করা হয়েছে",
|
||||
"no-captions": "এই গানটির জন্য কোনো ক্যাপশন উপলব্ধ নেই"
|
||||
}
|
||||
},
|
||||
"compact-sidebar": {
|
||||
"description": "সাইডবারকে সবসময় কম্প্যাক্ট মোডে সেট করুন",
|
||||
"name": "কম্প্যাক্ট সাইডবার"
|
||||
},
|
||||
"crossfade": {
|
||||
"description": "গানগুলির মধ্যে ক্রসফেড করুন",
|
||||
"menu": {
|
||||
"advanced": "এডভান্স"
|
||||
},
|
||||
"name": "ক্রসফেড [বেটা]",
|
||||
"prompt": {
|
||||
"options": {
|
||||
"multi-input": {
|
||||
"fade-in-duration": "ফেড-ইন সময়কাল (ms)",
|
||||
"fade-out-duration": "ফেড-আউট সময়কাল (ms)",
|
||||
"fade-scaling": {
|
||||
"label": "ফেড স্কেলিং",
|
||||
"linear": "রৈখিক",
|
||||
"logarithmic": "লগারিদমিক"
|
||||
},
|
||||
"seconds-before-end": "শেষ হওয়ার N সেকেন্ড আগে ক্রসফেড করুন"
|
||||
},
|
||||
"title": "ক্রসফেড অপশনসমূহ"
|
||||
}
|
||||
}
|
||||
},
|
||||
"disable-autoplay": {
|
||||
"description": "গান \"পজ\" মোডে শুরু করে",
|
||||
"menu": {
|
||||
"apply-once": "শুধুমাত্র স্টার্টআপে প্রয়োগ হয়"
|
||||
},
|
||||
"name": "অটোপ্লে বন্ধ করুন"
|
||||
},
|
||||
"discord": {
|
||||
"backend": {
|
||||
"already-connected": "একটিভ সংযোগের সাথে সংযোগ করার চেষ্টা করা হয়েছে",
|
||||
"connected": "ডিসকর্ডের সাথে সংযুক্ত",
|
||||
"disconnected": "ডিসকর্ড থেকে সংযোগ বিচ্ছিন্ন"
|
||||
},
|
||||
"description": "রিচ প্রেজেন্স ব্যবহার করে আপনি কি শুনছেন তা আপনার বন্ধুদের দেখান",
|
||||
"menu": {
|
||||
"auto-reconnect": "স্বয়ংক্রিয় রিকানেক্ট",
|
||||
"clear-activity": "কার্যকলাপ মুছুন",
|
||||
"clear-activity-after-timeout": "সময়সীমা শেষ হওয়ার পরে কার্যকলাপ মুছুন",
|
||||
"connected": "সংযুক্ত",
|
||||
"disconnected": "সংযোগ বিচ্ছিন্ন",
|
||||
"hide-duration-left": "অবশিষ্ট সময় লুকান",
|
||||
"hide-github-button": "গিটহাব লিঙ্ক বাটন লুকান",
|
||||
"play-on-application": "ইউটিউব মিউজিকে চালান",
|
||||
"set-inactivity-timeout": "নিষ্ক্রিয়তার সময়সীমা সেট করুন"
|
||||
},
|
||||
"name": "ডিসকর্ড রিচ প্রেজেন্স",
|
||||
"prompt": {
|
||||
"set-inactivity-timeout": {
|
||||
"label": "নিষ্ক্রিয়তার সময়সীমা সেকেন্ডে লিখুন:",
|
||||
"title": "নিষ্ক্রিয়তার সময়সীমা সেট করুন"
|
||||
}
|
||||
}
|
||||
},
|
||||
"downloader": {
|
||||
"backend": {
|
||||
"dialog": {
|
||||
"error": {
|
||||
"buttons": {
|
||||
"ok": "ঠিক আছে"
|
||||
},
|
||||
"message": "আহ! দুঃখিত, ডাউনলোড ব্যর্থ হয়েছে…",
|
||||
"title": "ডাউনলোডে সমস্যা!"
|
||||
},
|
||||
"start-download-playlist": {
|
||||
"buttons": {
|
||||
"ok": "ঠিক আছে"
|
||||
},
|
||||
"detail": "({{playlistSize}} টি গান)",
|
||||
"message": "প্লেলিস্ট {{playlistTitle}} ডাউনলোড করা হচ্ছে",
|
||||
"title": "ডাউনলোড শুরু হয়েছে"
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"conversion-progress": "রূপান্তর: {{percent}}%",
|
||||
"converting": "রূপান্তর করা হচ্ছে…",
|
||||
"done": "সম্পন্ন: {{filePath}}",
|
||||
"download-info": "ডাউনলোড হচ্ছে {{artist}} - {{title}} [{{videoId}}",
|
||||
"download-progress": "ডাউনলোড: {{percent}}%",
|
||||
"downloading": "ডাউনলোড হচ্ছে…",
|
||||
"downloading-counter": "ডাউনলোড হচ্ছে {{current}}/{{total}}…",
|
||||
"downloading-playlist": "প্লেলিস্ট \"{{playlistTitle}}\" - {{playlistSize}}টি গান ({{playlistId}}) ডাউনলোড হচ্ছে",
|
||||
"error-while-downloading": "\"{{author}} - {{title}}\" ডাউনলোড করতে সমস্যা: {{error}}",
|
||||
"folder-already-exists": "{{playlistFolder}} ফোল্ডারটি ইতিমধ্যে বিদ্যমান",
|
||||
"getting-playlist-info": "প্লেলিস্ট তথ্য নেওয়া হচ্ছে…",
|
||||
"loading": "লোড হচ্ছে…",
|
||||
"playlist-has-only-one-song": "প্লেলিস্টে শুধুমাত্র একটি আইটেম আছে, সরাসরি ডাউনলোড করা হচ্ছে",
|
||||
"playlist-id-not-found": "কোনো প্লেলিস্ট আইডি পাওয়া যায়নি",
|
||||
"playlist-is-empty": "প্লেলিস্ট খালি",
|
||||
"playlist-is-mix-or-private": "প্লেলিস্ট তথ্য পেতে সমস্যা: নিশ্চিত করুন এটি প্রাইভেট বা \"আপনার জন্য মিক্সড\" প্লেলিস্ট নয়\n\n{{error}}",
|
||||
"preparing-file": "ফাইল প্রস্তুত করা হচ্ছে…",
|
||||
"saving": "সংরক্ষণ করা হচ্ছে…",
|
||||
"trying-to-get-playlist-id": "প্লেলিস্ট আইডি পাওয়ার চেষ্টা করা হচ্ছে: {{playlistId}}",
|
||||
"video-id-not-found": "ভিডিও পাওয়া যায়নি",
|
||||
"writing-id3": "ID3 ট্যাগ লেখা হচ্ছে…"
|
||||
}
|
||||
},
|
||||
"description": "ইন্টারফেস থেকে সরাসরি MP3 / উৎস অডিও ডাউনলোড করে",
|
||||
"menu": {
|
||||
"choose-download-folder": "ডাউনলোড ফোল্ডার বেছে নিন",
|
||||
"download-finish-settings": {
|
||||
"label": "শেষ হলে ডাউনলোড করুন",
|
||||
"prompt": {
|
||||
"last-percent": "x শতাংশ পরে",
|
||||
"last-seconds": "শেষ x সেকেন্ড",
|
||||
"title": "কখন ডাউনলোড করবেন তা কনফিগার করুন"
|
||||
},
|
||||
"submenu": {
|
||||
"advanced": "উন্নত",
|
||||
"enabled": "সক্রিয়",
|
||||
"mode": "টাইম মোড",
|
||||
"percent": "শতাংশ",
|
||||
"seconds": "সেকেন্ড"
|
||||
}
|
||||
},
|
||||
"download-playlist": "প্লেলিস্ট ডাউনলোড করুন",
|
||||
"presets": "প্রিসেট",
|
||||
"skip-existing": "বিদ্যমান ফাইলগুলি এড়িয়ে যান"
|
||||
},
|
||||
"name": "ডাউনলোডার",
|
||||
"renderer": {
|
||||
"can-not-update-progress": "প্রগ্রেস আপডেট করা যাচ্ছে না"
|
||||
},
|
||||
"templates": {
|
||||
"button": "ডাউনলোড"
|
||||
}
|
||||
},
|
||||
"equalizer": {
|
||||
"description": "প্লেয়ারে একটি ইকুয়ালাইজার যোগ করে",
|
||||
"menu": {
|
||||
"presets": {
|
||||
"label": "প্রিসেট",
|
||||
"list": {
|
||||
"bass-booster": "বেস বুস্টার"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "ইকুয়ালাইজার"
|
||||
},
|
||||
"exponential-volume": {
|
||||
"description": "ভলিউম স্লাইডারকে এক্সপোটেনশিয়াল করে তোলে যাতে কম ভলিউম নির্বাচন করা সহজ হয়।",
|
||||
"name": "এক্সপোটেনশিয়াল ভলিউম"
|
||||
},
|
||||
"in-app-menu": {
|
||||
"description": "মেনু-বারগুলোকে আকর্ষণীয়, গাঢ় বা অ্যালবাম-রঙের চেহারা দেয়",
|
||||
"menu": {
|
||||
"hide-dom-window-controls": "DOM উইন্ডো কন্ট্রোলগুলো লুকান"
|
||||
},
|
||||
"name": "অ্যাপ-ভিতরের মেনু"
|
||||
},
|
||||
"lumiastream": {
|
||||
"description": "লুমিয়া স্ট্রিম সমর্থন যোগ করে",
|
||||
"name": "লুমিয়া স্ট্রিম [বেটা]"
|
||||
},
|
||||
"lyrics-genius": {
|
||||
"description": "বেশিরভাগ গানের জন্য লিরিক্স সমর্থন যোগ করে",
|
||||
"menu": {
|
||||
"romanized-lyrics": "রোমানাইজড লিরিক্স"
|
||||
},
|
||||
"name": "লিরিক্স জিনিয়াস",
|
||||
"renderer": {
|
||||
"fetched-lyrics": "জিনিয়াসের জন্য লিরিক্স সংগ্রহ করা হয়েছে"
|
||||
}
|
||||
},
|
||||
"music-together": {
|
||||
"description": "অন্যদের সাথে প্লেলিস্ট শেয়ার করুন। যখন হোস্ট একটি গান বাজায়, অন্য সবাই একই গানটি শুনবে",
|
||||
"dialog": {
|
||||
"enter-host": "হোস্ট আইডি লিখুন"
|
||||
},
|
||||
"internal": {
|
||||
"save": "সংরক্ষণ করুন",
|
||||
"track-source": "ট্র্যাক উৎস",
|
||||
"unknown-user": "অজানা ব্যবহারকারী"
|
||||
},
|
||||
"menu": {
|
||||
"click-to-copy-id": "হোস্ট আইডি কপি করুন",
|
||||
"close": "মিউজিক টুগেদার বন্ধ করুন",
|
||||
"connected-users": "সংযুক্ত ব্যবহারকারীরা",
|
||||
"disconnect": "মিউজিক টুগেদার সংযোগ বিচ্ছিন্ন করুন",
|
||||
"empty-user": "কোন সংযুক্ত ব্যবহারকারী নেই",
|
||||
"host": "মিউজিক টুগেদার হোস্ট",
|
||||
"join": "মিউজিক টুগেদারে যোগ দিন",
|
||||
"permission": {
|
||||
"all": "অতিথিদের প্লেলিস্ট এবং প্লেয়ার নিয়ন্ত্রণ করতে দিন",
|
||||
"host-only": "শুধুমাত্র হোস্ট প্লেলিস্ট এবং প্লেয়ার নিয়ন্ত্রণ করতে পারবেন",
|
||||
"playlist": "অতিথিদের প্লেলিস্ট নিয়ন্ত্রণ করতে দিন"
|
||||
},
|
||||
"set-permission": "নিয়ন্ত্রণ অনুমতি পরিবর্তন করুন",
|
||||
"status": {
|
||||
"disconnected": "সংযোগ বিচ্ছিন্ন",
|
||||
"guest": "অতিথি হিসাবে সংযুক্ত",
|
||||
"host": "হোস্ট হিসাবে সংযুক্ত"
|
||||
}
|
||||
},
|
||||
"name": "মিউজিক টুগেদার [বেটা]",
|
||||
"toast": {
|
||||
"add-song-failed": "গান যোগ করা ব্যর্থ হয়েছে",
|
||||
"closed": "মিউজিক টুগেদার বন্ধ হয়েছে",
|
||||
"disconnected": "মিউজিক টুগেদার সংযোগ বিচ্ছিন্ন হয়েছে",
|
||||
"host-failed": "মিউজিক টুগেদার হোস্ট করা ব্যর্থ হয়েছে",
|
||||
"id-copied": "হোস্ট আইডি ক্লিপবোর্ডে কপি করা হয়েছে",
|
||||
"id-copy-failed": "হোস্ট আইডি ক্লিপবোর্ডে কপি করা ব্যর্থ হয়েছে",
|
||||
"join-failed": "মিউজিক টুগেদারে যোগদান ব্যর্থ হয়েছে",
|
||||
"joined": "মিউজিক টুগেদারে যোগ দেওয়া হয়েছে",
|
||||
"permission-changed": "মিউজিক টুগেদার অনুমতি \"{{permission}}\" এ পরিবর্তন করা হয়েছে",
|
||||
"remove-song-failed": "গান সরানো ব্যর্থ হয়েছে",
|
||||
"user-connected": "{{name}} মিউজিক টুগেদারে যোগ দিয়েছেন",
|
||||
"user-disconnected": "{{name}} মিউজিক টুগেদার ছেড়ে চলে গেছেন"
|
||||
}
|
||||
},
|
||||
"navigation": {
|
||||
"description": "পরবর্তী/পূর্ববর্তী নেভিগেশন তীরগুলি আপনার প্রিয় ব্রাউজারের মতো সরাসরি ইন্টারফেসে অন্তর্ভুক্ত করা হয়েছে",
|
||||
"name": "নেভিগেশন",
|
||||
"templates": {
|
||||
"back": {
|
||||
"title": "আগের পাতায় যান"
|
||||
},
|
||||
"forward": {
|
||||
"title": "পরের পাতায় যান"
|
||||
}
|
||||
}
|
||||
},
|
||||
"no-google-login": {
|
||||
"description": "ইন্টারফেস থেকে Google লগইন বাটন এবং লিঙ্কগুলি সরান",
|
||||
"name": "গুগল লগইন নয়"
|
||||
},
|
||||
"notifications": {
|
||||
"description": "একটি গান বাজতে শুরু হলে একটি বিজ্ঞপ্তি প্রদর্শন করে (উইন্ডোজে ইন্টারঅ্যাকটিভ বিজ্ঞপ্তিগুলি উপলব্ধ)",
|
||||
"menu": {
|
||||
"interactive": "ইন্টারঅ্যাকটিভ বিজ্ঞপ্তিসমূহ",
|
||||
"interactive-settings": {
|
||||
"label": "ইন্টারঅ্যাকটিভ সেটিংস",
|
||||
"submenu": {
|
||||
"hide-button-text": "বাটন টেক্সট লুকান",
|
||||
"refresh-on-play-pause": "প্লে/পজে রিফ্রেশ করুন",
|
||||
"tray-controls": "ট্রে ক্লিকে খুলুন/বন্ধ করুন"
|
||||
}
|
||||
},
|
||||
"priority": "বিজ্ঞপ্তি অগ্রাধিকার",
|
||||
"toast-style": "টোস্ট স্টাইল",
|
||||
"unpause-notification": "বিরতি থেকে ফিরলে বিজ্ঞপ্তি দেখান"
|
||||
},
|
||||
"name": "বিজ্ঞপ্তিসমূহ"
|
||||
},
|
||||
"performance-improvement": {
|
||||
"description": "পরীক্ষামূলক স্ক্রিপ্টগুলি সক্ষম করে পারফরম্যান্স উন্নত করুন",
|
||||
"name": "পারফরম্যান্স উন্নতিকরণ [বেটা]"
|
||||
},
|
||||
"picture-in-picture": {
|
||||
"description": "অ্যাপকে পিকচার-ইন-পিকচার মোডে স্যুইচ করতে অনুমতি দেয়",
|
||||
"menu": {
|
||||
"always-on-top": "সবসময় উপরে",
|
||||
"hotkey": {
|
||||
"label": "হটকি",
|
||||
"prompt": {
|
||||
"keybind-options": {
|
||||
"hotkey": "হটকি"
|
||||
},
|
||||
"label": "পিকচার-ইন-পিকচার টগল করার জন্য একটি হটকি নির্বাচন করুন",
|
||||
"title": "পিকচার-ইন-পিকচার হটকি"
|
||||
}
|
||||
},
|
||||
"save-window-position": "উইন্ডো অবস্থান সংরক্ষণ করুন",
|
||||
"save-window-size": "উইন্ডো আকার সংরক্ষণ করুন",
|
||||
"use-native-pip": "ব্রাউজারের নেটিভ PiP ব্যবহার করুন"
|
||||
},
|
||||
"name": "পিকচার-ইন-পিকচার",
|
||||
"templates": {
|
||||
"button": "পিকচার-ইন-পিকচার"
|
||||
}
|
||||
},
|
||||
"playback-speed": {
|
||||
"description": "দ্রুত শুনুন, ধীরে শুনুন! গানের গতি নিয়ন্ত্রণ করার জন্য একটি স্লাইডার যোগ করে",
|
||||
"name": "প্লেব্যাক স্পিড",
|
||||
"templates": {
|
||||
"button": "গতি"
|
||||
}
|
||||
},
|
||||
"precise-volume": {
|
||||
"description": "মাউসহুইল/হটকি ব্যবহার করে সঠিকভাবে ভলিউম নিয়ন্ত্রণ করুন, কাস্টম HUD এবং কাস্টমাইজযোগ্য ভলিউম স্টেপ সহ",
|
||||
"menu": {
|
||||
"arrows-shortcuts": "লোকাল অ্যারো-কি কন্ট্রোল",
|
||||
"custom-volume-steps": "কাস্টম ভলিউম স্টেপ সেট করুন",
|
||||
"global-shortcuts": "গ্লোবাল হটকি"
|
||||
},
|
||||
"name": "নির্ভুল ভলিউম",
|
||||
"prompt": {
|
||||
"global-shortcuts": {
|
||||
"keybind-options": {
|
||||
"decrease": "ভলিউম কমান",
|
||||
"increase": "ভলিউম বাড়ান"
|
||||
},
|
||||
"label": "গ্লোবাল ভলিউম কিবাইন্ড নির্বাচন করুন:",
|
||||
"title": "গ্লোবাল ভলিউম কিবাইন্ড"
|
||||
},
|
||||
"volume-steps": {
|
||||
"label": "ভলিউম বৃদ্ধি/হ্রাস স্টেপ নির্বাচন করুন",
|
||||
"title": "ভলিউম স্টেপস"
|
||||
}
|
||||
}
|
||||
},
|
||||
"quality-changer": {
|
||||
"backend": {
|
||||
"dialog": {
|
||||
"quality-changer": {
|
||||
"detail": "বর্তমান কোয়ালিটি: {{quality}}",
|
||||
"message": "ভিডিও কোয়ালিটি নির্বাচন করুন:",
|
||||
"title": "ভিডিও কোয়ালিটি নির্বাচন করুন"
|
||||
}
|
||||
}
|
||||
},
|
||||
"description": "ভিডিও ওভারলেতে একটি বাটনের মাধ্যমে ভিডিও কোয়ালিটি পরিবর্তন করতে দেয়",
|
||||
"name": "ভিডিও কোয়ালিটি পরিবর্তক",
|
||||
"renderer": {
|
||||
"quality-settings-button": {
|
||||
"label": "প্লেয়ারের মান পরিবর্তনের অপশন খুলুন"
|
||||
}
|
||||
}
|
||||
},
|
||||
"scrobbler": {
|
||||
"description": "স্ক্রবলিং সমর্থন যোগ করুন (যেমন last.fm, Listenbrainz)",
|
||||
"dialog": {
|
||||
"lastfm": {
|
||||
"auth-failed": {
|
||||
"message": "Last.fm এর সাথে প্রমাণীকরণ ব্যর্থ হয়েছে\nপরবর্তী পুনরায় চালু না হওয়া পর্যন্ত পপআপ লুকান।",
|
||||
"title": "প্রমাণীকরণ ব্যর্থ হয়েছে"
|
||||
}
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"lastfm": {
|
||||
"api-settings": "Last.fm API সেটিংস"
|
||||
},
|
||||
"listenbrainz": {
|
||||
"token": "ListenBrainz ব্যবহারকারী টোকেন লিখুন"
|
||||
},
|
||||
"scrobble-alternative-title": "বিকল্প শিরোনাম ব্যবহার করুন",
|
||||
"scrobble-other-media": "অন্যান্য মিডিয়া স্ক্রবল করুন"
|
||||
},
|
||||
"name": "স্ক্রবলার",
|
||||
"prompt": {
|
||||
"lastfm": {
|
||||
"api-key": "Last.fm API কি",
|
||||
"api-secret": "Last.fm API সিক্রেট"
|
||||
},
|
||||
"listenbrainz": {
|
||||
"token": {
|
||||
"label": "আপনার ListenBrainz ব্যবহারকারী টোকেন লিখুন:",
|
||||
"title": "ListenBrainz টোকেন"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"shortcuts": {
|
||||
"description": "প্লেব্যাকের জন্য গ্লোবাল হটকি (প্লে/পজ/পরবর্তী/পূর্ববর্তী) সেট করতে এবং মিডিয়া কী ওভাররাইড করে মিডিয়া OSD বন্ধ করতে, Ctrl/CMD + F চালু করে অনুসন্ধান করতে, মিডিয়া কীগুলির জন্য Linux MPRIS সমর্থন চালু করতে এবং অ্যাডভান্সড ব্যবহারকারীদের জন্য কাস্টম হটকি সেট করতে অনুমতি দেয়",
|
||||
"menu": {
|
||||
"override-media-keys": "মিডিয়া কী ওভাররাইড করুন",
|
||||
"set-keybinds": "গ্লোবাল গান কন্ট্রোল সেট করুন"
|
||||
},
|
||||
"name": "শর্টকাট (এবং MPRIS)",
|
||||
"prompt": {
|
||||
"keybind": {
|
||||
"keybind-options": {
|
||||
"next": "পরবর্তী",
|
||||
"play-pause": "চালান / বিরতি",
|
||||
"previous": "পূর্ববর্তী"
|
||||
},
|
||||
"label": "গান নিয়ন্ত্রণের জন্য গ্লোবাল কিবাইন্ড নির্বাচন করুন:",
|
||||
"title": "গ্লোবাল কিবাইন্ড"
|
||||
}
|
||||
}
|
||||
},
|
||||
"skip-disliked-songs": {
|
||||
"description": "পছন্দ হয়নি এমন গানগুলো এড়িয়ে যায়",
|
||||
"name": "অপছন্দ গান এড়ান"
|
||||
},
|
||||
"skip-silences": {
|
||||
"description": "স্বয়ংক্রিয়ভাবে গানের নীরব অংশগুলো এড়িয়ে যান",
|
||||
"name": "নীরবতা এড়িয়ে যান"
|
||||
},
|
||||
"sponsorblock": {
|
||||
"description": "স্বয়ংক্রিয়ভাবে ইন্ট্রো/আউটট্রো বা মিউজিক ভিডিওর যেসব অংশে গান বাজছে না সেগুলি এড়িয়ে যায়",
|
||||
"name": "স্পনসরব্লক"
|
||||
},
|
||||
"synced-lyrics": {
|
||||
"description": "LRClib এর মত প্রোভাইডার ব্যবহার করে গানের সাথে সিঙ্ক করা লিরিক্স প্রদান করে।",
|
||||
"errors": {
|
||||
"fetch": "⚠️\tলিরিক্স আনার সময় একটি ত্রুটি ঘটেছে।\n\tঅনুগ্রহ করে পরে আবার চেষ্টা করুন।",
|
||||
"not-found": "⚠️ এই গানের জন্য কোন লিরিক্স পাওয়া যায়নি।"
|
||||
},
|
||||
"menu": {
|
||||
"default-text-string": {
|
||||
"label": "লিরিক্সের মাঝে ডিফল্ট অক্ষর",
|
||||
"tooltip": "লিরিক্সের মধ্যে ফাঁকের জন্য ব্যবহৃত ডিফল্ট অক্ষর নির্বাচন করুন"
|
||||
},
|
||||
"line-effect": {
|
||||
"label": "লাইন ইফেক্ট",
|
||||
"submenu": {
|
||||
"fancy": {
|
||||
"label": "ফ্যান্সি",
|
||||
"tooltip": "বর্তমান লাইনে বড়, অ্যাপের মত ইফেক্ট ব্যবহার করুন"
|
||||
},
|
||||
"focus": {
|
||||
"label": "ফোকাস",
|
||||
"tooltip": "শুধুমাত্র বর্তমান লাইনটি সাদা করুন"
|
||||
},
|
||||
"offset": {
|
||||
"label": "অফসেট",
|
||||
"tooltip": "বর্তমান লাইনকে ডানদিকে অফসেট করুন"
|
||||
},
|
||||
"scale": {
|
||||
"label": "স্কেল",
|
||||
"tooltip": "বর্তমান লাইন স্কেল করুন"
|
||||
}
|
||||
},
|
||||
"tooltip": "বর্তমান লাইনে প্রয়োগ করার জন্য ইফেক্ট নির্বাচন করুন"
|
||||
},
|
||||
"precise-timing": {
|
||||
"label": "লিরিক্স পুরোপুরি সিঙ্ক করুন",
|
||||
"tooltip": "পরবর্তী লাইন প্রদর্শনের মিলিসেকেন্ড পর্যন্ত গণনা করুন (পারফরম্যান্সে সামান্য প্রভাব পড়তে পারে)"
|
||||
},
|
||||
"romanization": {
|
||||
"label": "লিরিক্স রোমানাইজ করুন",
|
||||
"tooltip": "যদি লিরিক্স ভিন্ন ভাষায় হয়, তাহলে একটি ল্যাটিন সংস্করণ প্রদর্শন করার চেষ্টা করুন।"
|
||||
},
|
||||
"show-lyrics-even-if-inexact": {
|
||||
"label": "অনির্ভুল হলেও লিরিক্স দেখান",
|
||||
"tooltip": "যদি গানটি না পাওয়া যায়, প্লাগইনটি একটি ভিন্ন অনুসন্ধান কোয়েরি দিয়ে আবার চেষ্টা করে।\nদ্বিতীয় প্রচেষ্টার ফলাফল সঠিক নাও হতে পারে।"
|
||||
},
|
||||
"show-time-codes": {
|
||||
"label": "টাইম কোড দেখান",
|
||||
"tooltip": "লিরিক্সের পাশে টাইম কোড দেখান"
|
||||
}
|
||||
},
|
||||
"name": "সিঙ্ক করা লিরিক্স",
|
||||
"refetch-btn": {
|
||||
"fetching": "আনছে..।",
|
||||
"normal": "লিরিক্স পুনরায় আনুন"
|
||||
},
|
||||
"warnings": {
|
||||
"duration-mismatch": "⚠️ - সময়কাল মিলে না যাওয়ার কারণে লিরিক্স সিঙ্ক হতে নাও পারে।",
|
||||
"inexact": "⚠️ - এই গানের লিরিক্স সঠিক নাও হতে পারে",
|
||||
"instrumental": "⚠️ - এটি একটি ইনস্ট্রুমেন্টাল গান"
|
||||
}
|
||||
},
|
||||
"taskbar-mediacontrol": {
|
||||
"description": "উইন্ডোজ টাস্কবার থেকে প্লেব্যাক নিয়ন্ত্রণ করুন",
|
||||
"name": "টাস্কবার মিডিয়া কন্ট্রোল"
|
||||
},
|
||||
"touchbar": {
|
||||
"description": "macOS ব্যবহারকারীদের জন্য একটি টাচবার উইজেট যোগ করে",
|
||||
"name": "টাচবার"
|
||||
},
|
||||
"tuna-obs": {
|
||||
"description": "OBS এর প্লাগইন টুনার সাথে সংযোগ",
|
||||
"name": "টুনা OBS"
|
||||
},
|
||||
"unobtrusive-player": {
|
||||
"description": "গান চালানোর সময় প্লেয়ারকে পপ আপ হওয়া থেকে বিরত রাখে",
|
||||
"name": "অনাড়ম্বর প্লেয়ার"
|
||||
},
|
||||
"video-toggle": {
|
||||
"description": "ভিডিও/গান মোডের মধ্যে স্যুইচ করার জন্য একটি বাটন যোগ করে। ঐচ্ছিকভাবে সম্পূর্ণ ভিডিও ট্যাবও সরাতে পারে",
|
||||
"menu": {
|
||||
"align": {
|
||||
"label": "সারিবদ্ধকরণ",
|
||||
"submenu": {
|
||||
"left": "বাম",
|
||||
"middle": "মাঝখানে",
|
||||
"right": "ডান"
|
||||
}
|
||||
},
|
||||
"force-hide": "জোর করে ভিডিও ট্যাব সরান",
|
||||
"mode": {
|
||||
"label": "মোড",
|
||||
"submenu": {
|
||||
"custom": "কাস্টম টগল",
|
||||
"disabled": "নিষ্ক্রিয়",
|
||||
"native": "নেটিভ টগল"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "ভিডিও টগল",
|
||||
"templates": {
|
||||
"button-song": "গান",
|
||||
"button-video": "ভিডিও"
|
||||
}
|
||||
},
|
||||
"visualizer": {
|
||||
"description": "প্লেয়ারে একটি ভিজ্যুয়ালাইজার যোগ করে",
|
||||
"menu": {
|
||||
"visualizer-type": "ভিজ্যুয়ালাইজার প্রকার"
|
||||
},
|
||||
"name": "ভিজ্যুয়ালাইজার"
|
||||
}
|
||||
}
|
||||
}
|
||||
271
src/i18n/resources/bs.json
Normal file
@ -0,0 +1,271 @@
|
||||
{
|
||||
"common": {
|
||||
"console": {
|
||||
"plugins": {
|
||||
"execute-failed": "Greška u izvršavanju dodatka {{pluginName}}::{{contextName}}",
|
||||
"executed-at-ms": "Dodatak {{pluginName}}::{{contextName}} se izvršio za {{ms}}ms",
|
||||
"initialize-failed": "Greška prilikom inicijalizacije dodatka \"{{pluginName}}\"",
|
||||
"load-all": "Učitavanje svih dodataka",
|
||||
"load-failed": "Greška u učitavanju dodatka \"{{pluginName}}\"",
|
||||
"loaded": "Dodatak \"{{pluginName}}\" učitan",
|
||||
"unload-failed": "Greška prilikom onesposobljavanja dodatka \"{{pluginName}}\"",
|
||||
"unloaded": "Dodatak \"{{pluginName}}\" ugašen"
|
||||
}
|
||||
}
|
||||
},
|
||||
"language": {
|
||||
"code": "ba",
|
||||
"local-name": "Bosanski",
|
||||
"name": "Bosnian"
|
||||
},
|
||||
"main": {
|
||||
"console": {
|
||||
"did-finish-load": {
|
||||
"dev-tools": "Završeno učitavanje. DevTools otvoren"
|
||||
},
|
||||
"i18n": {
|
||||
"loaded": "i18n učitan"
|
||||
},
|
||||
"second-instance": {
|
||||
"receive-command": "Comanda primljena preko protokola \"{{command}}\""
|
||||
},
|
||||
"theme": {
|
||||
"css-file-not-found": "CSS datoteka \"{{cssFile}}\" ne postoji, ignorišem"
|
||||
},
|
||||
"unresponsive": {
|
||||
"details": "Greška u aplikaciji!\n{{error}}"
|
||||
},
|
||||
"when-ready": {
|
||||
"clearing-cache-after-20s": "Čistim predmemoriju aplikacije"
|
||||
},
|
||||
"window": {
|
||||
"tried-to-render-offscreen": "Prozor se pokušao prikazati van okvira ekrana, windowSize={{windowSize}}, displaySize={{displaySize}}, position={{position}}"
|
||||
}
|
||||
},
|
||||
"dialog": {
|
||||
"hide-menu-enabled": {
|
||||
"detail": "Meni je sakriven, koristite 'Alt' da ga prikazete (ili 'ESC' ako koristite meni u aplikaciji)",
|
||||
"message": "Sakrivanje menija je uključeno",
|
||||
"title": "Meni sakriven"
|
||||
},
|
||||
"need-to-restart": {
|
||||
"buttons": {
|
||||
"later": "Kasnije",
|
||||
"restart-now": "Pokreni ponovo odmah"
|
||||
},
|
||||
"detail": "\"{{pluginName}}\" dodatak zahtjeva ponovno pokretanje kako bi se uključio",
|
||||
"message": "\"{{pluginName}}\" potrebno je resetovat",
|
||||
"title": "Restart je potreban"
|
||||
},
|
||||
"unresponsive": {
|
||||
"buttons": {
|
||||
"quit": "Napusti",
|
||||
"relaunch": "Ponovo otvori",
|
||||
"wait": "Pricekajte"
|
||||
},
|
||||
"detail": "Izvinjavamo se zbog zabune! molimo vas da odaberete sta zelite uciniti",
|
||||
"message": "Aplikacija ne reagira",
|
||||
"title": "Prozor ne reagira"
|
||||
},
|
||||
"update-available": {
|
||||
"buttons": {
|
||||
"disable": "Ugasite Nadogradnje",
|
||||
"download": "Skinuti",
|
||||
"ok": "OK"
|
||||
},
|
||||
"detail": "Nova verzija je dostupna i može biti skinuta na {{downloadLink}}",
|
||||
"message": "Nova verzija je dostupna",
|
||||
"title": "Azuriranje dostupno"
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"about": "O nama",
|
||||
"navigation": {
|
||||
"label": "Plejer",
|
||||
"submenu": {
|
||||
"copy-current-url": "Kopirajte trenutni link",
|
||||
"go-back": "Idi Nazad",
|
||||
"go-forward": "Idi Naprijed",
|
||||
"quit": "Izadji",
|
||||
"restart": "Restartujte Aplikaciju"
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"label": "Opcije",
|
||||
"submenu": {
|
||||
"advanced-options": {
|
||||
"label": "Napredne opcije",
|
||||
"submenu": {
|
||||
"auto-reset-app-cache": "Resetuje kes memoriju kad se aplikacija pokrene",
|
||||
"disable-hardware-acceleration": "Ugasite hardversko ubrzanje",
|
||||
"edit-config-json": "Uredite config.json",
|
||||
"override-user-agent": "Nadjacaj User-Agent",
|
||||
"restart-on-config-changes": "Ponovno pokretanje nakon promjena konfiguracije",
|
||||
"set-proxy": {
|
||||
"label": "Postavi proxy",
|
||||
"prompt": {
|
||||
"label": "Unesite adresu proxyja: (ostavite prazno za onemogućavanje)",
|
||||
"placeholder": "Primjer: SOCKS5://127.0.0.1:9999",
|
||||
"title": "Postavi proxy"
|
||||
}
|
||||
},
|
||||
"toggle-dev-tools": "Uključi/isključi DevTools"
|
||||
}
|
||||
},
|
||||
"always-on-top": "Uvijek na vrhu",
|
||||
"auto-update": "Automatski Update",
|
||||
"hide-menu": {
|
||||
"dialog": {
|
||||
"message": "Meni će biti skriven pri sljedećem pokretanju, koristite [Alt] da ga prikažete (ili upotrijebite [`] ako koristite meni u aplikaciji)",
|
||||
"title": "Sakrij meni omogućen"
|
||||
},
|
||||
"label": "Sakrij meni"
|
||||
},
|
||||
"language": {
|
||||
"dialog": {
|
||||
"message": "Jezik će se promijeniti nakon ponovnog pokretanja",
|
||||
"title": "Jezik je uspješno promjenjen"
|
||||
},
|
||||
"label": "Jezik",
|
||||
"submenu": {
|
||||
"to-help-translate": "Želite da pomognete s prijevodom? Kliknite ovdje"
|
||||
}
|
||||
},
|
||||
"resume-on-start": "Nastavi posljednju pjesmu pri sljedećem pokretaju",
|
||||
"single-instance-lock": "Sprječavanje višestrukog pokretanja",
|
||||
"start-at-login": "Pokreni čim se prijavite",
|
||||
"starting-page": {
|
||||
"label": "Početna stranica",
|
||||
"unset": "Ukinite postavu"
|
||||
},
|
||||
"tray": {
|
||||
"label": "Tacna",
|
||||
"submenu": {
|
||||
"disabled": "Onemogućeno",
|
||||
"enabled-and-hide-app": "Tacna je uključena, i prozor aplikacije skrijte",
|
||||
"enabled-and-show-app": "Tacna je uključena, i prozor aplikacije prikažite",
|
||||
"play-pause-on-click": "Pokreni/Zaustavi na klik"
|
||||
}
|
||||
},
|
||||
"visual-tweaks": {
|
||||
"label": "Vizualne postavke",
|
||||
"submenu": {
|
||||
"custom-window-title": {
|
||||
"label": "Prilagođeni naslov prozora",
|
||||
"prompt": {
|
||||
"label": "Unesite vlastiti naslov prozora: (ostavite prazno za isključenje)",
|
||||
"placeholder": "Primjer: {{applicationName}}"
|
||||
}
|
||||
},
|
||||
"like-buttons": {
|
||||
"default": "Zadano",
|
||||
"force-show": "Prinudno prikaži",
|
||||
"hide": "Sakrij",
|
||||
"label": "'Sviđa mi se' dugmadi"
|
||||
},
|
||||
"remove-upgrade-button": "Ukloni dugme za nadogradnju",
|
||||
"theme": {
|
||||
"dialog": {
|
||||
"button": {
|
||||
"cancel": "Otkaži",
|
||||
"remove": "Ukloni"
|
||||
},
|
||||
"remove-theme": "Jeste li sigurni da želite ukloniti prilagođenu temu?",
|
||||
"remove-theme-message": "Ovo će ukloniti prilagođenu temu"
|
||||
},
|
||||
"label": "Tema",
|
||||
"submenu": {
|
||||
"import-css-file": "Uvoz prilagođene CSS datoteke",
|
||||
"no-theme": "Bez teme"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"enabled": "Omogućeno",
|
||||
"label": "Dodaci",
|
||||
"new": "Novo"
|
||||
},
|
||||
"view": {
|
||||
"label": "Pogled",
|
||||
"submenu": {
|
||||
"force-reload": "Silom Ponovo Učitaj",
|
||||
"reload": "Ponovo Učitaj",
|
||||
"reset-zoom": "Stvarna Veličina",
|
||||
"toggle-fullscreen": "Uključi/Isključi Prikaz Cijelog Ekrana",
|
||||
"zoom-in": "Uvećaj",
|
||||
"zoom-out": "Umanji"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tray": {
|
||||
"next": "Slijedeće",
|
||||
"play-pause": "Plej/Pauza",
|
||||
"previous": "Prethodno",
|
||||
"quit": "Izlaz",
|
||||
"restart": "Ponovo Pokreni Aplikaciju",
|
||||
"show": "Pokaži prozor",
|
||||
"tooltip": {
|
||||
"default": "{{applicationName}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"ambient-mode": {
|
||||
"menu": {
|
||||
"quality": {
|
||||
"label": "Kvalitet"
|
||||
}
|
||||
}
|
||||
},
|
||||
"discord": {
|
||||
"menu": {
|
||||
"set-status-display-type": {
|
||||
"submenu": {
|
||||
"application": "Slušate {{applicationName}}",
|
||||
"artist": "Slušate {muzičar}",
|
||||
"title": "Slušate {naziv pesme}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Diskord Rich Presence",
|
||||
"prompt": {
|
||||
"set-inactivity-timeout": {
|
||||
"label": "Unesi ograničenje neaktivnosti u sekundama:",
|
||||
"title": "Postavi ograničenje neaktivnosti"
|
||||
}
|
||||
}
|
||||
},
|
||||
"downloader": {
|
||||
"backend": {
|
||||
"dialog": {
|
||||
"error": {
|
||||
"buttons": {
|
||||
"ok": "OK"
|
||||
},
|
||||
"message": "Ufff! Izvinite, preuzimanje nije uspelo…",
|
||||
"title": "Greška u preuzimanju!"
|
||||
},
|
||||
"start-download-playlist": {
|
||||
"buttons": {
|
||||
"ok": "OK"
|
||||
},
|
||||
"detail": "({{Playlist Size}} pjesme)",
|
||||
"message": "Preuzimanje Plejliste {{playlist Title}}",
|
||||
"title": "Preuzimanje počelo"
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"conversion-progress": "Pretvaranje: {{percent}}%",
|
||||
"converting": "Pretvaranje…",
|
||||
"done": "Gotovo: {{file Path}}",
|
||||
"download-info": "Preuzimanje {{artist}} - {{title}} [{{videoId}}",
|
||||
"download-progress": "Preuzimanje: {{percent}}%",
|
||||
"downloading": "Preuzimanje…"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2,13 +2,13 @@
|
||||
"common": {
|
||||
"console": {
|
||||
"plugins": {
|
||||
"execute-failed": "Ha fallat l'execució de l'extensió {{pluginName}}::{{contextName}}",
|
||||
"execute-failed": "Error en l'execució de l'extensió {{pluginName}}::{{contextName}}",
|
||||
"executed-at-ms": "L'extensió {{pluginName}}::{{contextName}} s'ha executat als {{ms}}ms",
|
||||
"initialize-failed": "Ha fallat la inicialització de l'extensió «{{pluginName}}»",
|
||||
"initialize-failed": "Ha fallat la inicialització de l'extensió \"{{pluginName}}\"",
|
||||
"load-all": "Carregant totes les extensions",
|
||||
"load-failed": "Error al carregar l'extensió «{{pluginName}}»",
|
||||
"load-failed": "Error en carregar l'extensió «{{pluginName}}»",
|
||||
"loaded": "L'extensió «{{pluginName}}» s'ha carregat",
|
||||
"unload-failed": "Error al deshabilitar l'extensió «{{pluginName}}»",
|
||||
"unload-failed": "Error en deshabilitar l'extensió «{{pluginName}}»",
|
||||
"unloaded": "Extensió «{{pluginName}}» deshabilitada"
|
||||
}
|
||||
}
|
||||
@ -150,6 +150,13 @@
|
||||
"visual-tweaks": {
|
||||
"label": "Opcions visuals",
|
||||
"submenu": {
|
||||
"custom-window-title": {
|
||||
"label": "Títol personalitzat de la finestra",
|
||||
"prompt": {
|
||||
"label": "Introdueix un títol personalitzat per a la finestra (deixa-ho buit per deshabilitar-ho)",
|
||||
"placeholder": "Exemple: {{applicationName}}"
|
||||
}
|
||||
},
|
||||
"like-buttons": {
|
||||
"default": "Per defecte",
|
||||
"force-show": "Força que es mostri",
|
||||
@ -201,8 +208,8 @@
|
||||
"restart": "Reinicia l'aplicació",
|
||||
"show": "Mostra la finestra",
|
||||
"tooltip": {
|
||||
"default": "YouTube Music",
|
||||
"with-song-info": "YouTube Music: {{artist}} - {{title}}"
|
||||
"default": "{{applicationName}}",
|
||||
"with-song-info": "{{applicationName}}: {{artist}} - {{title}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -230,7 +237,8 @@
|
||||
"submenu": {
|
||||
"percent": "{{ratio}}%"
|
||||
}
|
||||
}
|
||||
},
|
||||
"enable-seekbar": "Activar el tema en la barra de progrés"
|
||||
},
|
||||
"name": "Tema de color de l'àlbum"
|
||||
},
|
||||
@ -279,6 +287,13 @@
|
||||
},
|
||||
"name": "Mode ambient"
|
||||
},
|
||||
"amuse": {
|
||||
"description": "Afegeix suport a {{applicationName}} per el widget \"now playing\" d'Amuse per 6K Labs",
|
||||
"name": "Amuse",
|
||||
"response": {
|
||||
"query": "L'API del servidor de Amuse està funcionant. GET /query per tenir informació de la cançó."
|
||||
}
|
||||
},
|
||||
"api-server": {
|
||||
"description": "Afegeix un servidor API per controlar el reproductor",
|
||||
"dialog": {
|
||||
@ -326,16 +341,40 @@
|
||||
"description": "Aplica compressió a l'àudio (baixa el volum de les parts més sorolloses de la senyal d'àudio i puja el volum de les parts més fluixes)",
|
||||
"name": "Compressió d'àudio"
|
||||
},
|
||||
"auth-proxy-adapter": {
|
||||
"description": "Suport per l'ús de servidors d'autenticació proxy",
|
||||
"menu": {
|
||||
"disable": "Desactivar adaptador Proxy",
|
||||
"enable": "Activar adaptador Proxy",
|
||||
"hostname": {
|
||||
"label": "Hostname"
|
||||
},
|
||||
"port": {
|
||||
"label": "Port"
|
||||
}
|
||||
},
|
||||
"name": "Adaptador de proxy d'autenticació",
|
||||
"prompt": {
|
||||
"hostname": {
|
||||
"label": "Posa hostname pel servidor del proxy local (requereix reiniciar):",
|
||||
"title": "Hostname del proxy"
|
||||
},
|
||||
"port": {
|
||||
"label": "Entra un port pel servidor local del proxy (requereix reiniciar):",
|
||||
"title": "Port proxy"
|
||||
}
|
||||
}
|
||||
},
|
||||
"blur-nav-bar": {
|
||||
"description": "Desenfoca i aplica transparència a la barra de navegació",
|
||||
"name": "Desenfoca la barra de navegació"
|
||||
},
|
||||
"bypass-age-restrictions": {
|
||||
"description": "Esquiva la verificació d'edat de YouTube",
|
||||
"description": "Esquiva la verificació d'edat de Music Player",
|
||||
"name": "Esquiva les restriccions d'edat"
|
||||
},
|
||||
"captions-selector": {
|
||||
"description": "Selector de subtítols per les pistes d'àudio de YouTube Music",
|
||||
"description": "Selector de subtítols per les pistes d'àudio de {{applicationName}}",
|
||||
"menu": {
|
||||
"autoload": "Selecciona automàticament l'últim subtítol emprat",
|
||||
"disable-captions": "Sense subtítols per defecte"
|
||||
@ -350,6 +389,11 @@
|
||||
},
|
||||
"templates": {
|
||||
"title": "Obra el selector de subtítols"
|
||||
},
|
||||
"toast": {
|
||||
"caption-changed": "Subtítols canviats a {{language}}",
|
||||
"caption-disabled": "Subtítols desactivats",
|
||||
"no-captions": "Subtítols no disponibles per aquesta cançó"
|
||||
}
|
||||
},
|
||||
"compact-sidebar": {
|
||||
@ -378,6 +422,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"custom-output-device": {
|
||||
"description": "Configura un dispositiu multimèdia de sortida personalitzat per a cançons",
|
||||
"menu": {
|
||||
"device-selector": "Selecciona un dispositiu"
|
||||
},
|
||||
"name": "Dispositiu de sortida personalitzat",
|
||||
"prompt": {
|
||||
"device-selector": {
|
||||
"label": "Trieu el dispositiu de sortida que s'utilitzarà",
|
||||
"title": "Escull el dispositiu de sortida"
|
||||
}
|
||||
}
|
||||
},
|
||||
"disable-autoplay": {
|
||||
"description": "Fa que la cançó comenci en mode «pausat»",
|
||||
"menu": {
|
||||
@ -400,8 +457,16 @@
|
||||
"disconnected": "Desconnectat",
|
||||
"hide-duration-left": "Amaga la durada restant",
|
||||
"hide-github-button": "Amaga el botó de l'enllaç a GitHub",
|
||||
"play-on-youtube-music": "Reprodueix a YouTube Music",
|
||||
"set-inactivity-timeout": "Estableix temps d'espera d'inactivitat"
|
||||
"play-on-application": "Reprodueix a {{applicationName}}",
|
||||
"set-inactivity-timeout": "Estableix temps d'espera d'inactivitat",
|
||||
"set-status-display-type": {
|
||||
"label": "Text d'estat",
|
||||
"submenu": {
|
||||
"artist": "Escoltant {artist}",
|
||||
"application": "Escoltant {{applicationName}}",
|
||||
"title": "Escoltant {song title}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Estat d'activitat de Discord",
|
||||
"prompt": {
|
||||
@ -484,6 +549,18 @@
|
||||
"button": "Descarrega"
|
||||
}
|
||||
},
|
||||
"equalizer": {
|
||||
"description": "Afegeix un equalitzador al reproductor",
|
||||
"menu": {
|
||||
"presets": {
|
||||
"label": "Predefinits",
|
||||
"list": {
|
||||
"bass-booster": "Augmentar baixos"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Equalitzador"
|
||||
},
|
||||
"exponential-volume": {
|
||||
"description": "Fa que el control lliscant del volum sigui exponencial per que sigui més fàcil seleccionar volums més baixos.",
|
||||
"name": "Volum exponencial"
|
||||
@ -557,7 +634,15 @@
|
||||
},
|
||||
"navigation": {
|
||||
"description": "Fletxes de navegació Següent / Enrere integrades directament a la interfície, com al teu navegador preferit",
|
||||
"name": "Navegació"
|
||||
"name": "Navegació",
|
||||
"templates": {
|
||||
"back": {
|
||||
"title": "Pàgina anterior"
|
||||
},
|
||||
"forward": {
|
||||
"title": "Pàgina següent"
|
||||
}
|
||||
}
|
||||
},
|
||||
"no-google-login": {
|
||||
"description": "Elimina els botons d'inici de sessió de Google de la interfície",
|
||||
@ -581,6 +666,10 @@
|
||||
},
|
||||
"name": "Notificacions"
|
||||
},
|
||||
"performance-improvement": {
|
||||
"description": "Millora el rendiment habilitant scripts experimentals",
|
||||
"name": "Millora del rendiment [Beta]"
|
||||
},
|
||||
"picture-in-picture": {
|
||||
"description": "Permet commutar el mode d'imatge en imatge (PiP)",
|
||||
"menu": {
|
||||
@ -645,7 +734,12 @@
|
||||
}
|
||||
},
|
||||
"description": "Permet canviar la qualitat del vídeo amb un botó que s'hi mostra a sobre",
|
||||
"name": "Botó de qualitat del vídeo"
|
||||
"name": "Botó de qualitat del vídeo",
|
||||
"renderer": {
|
||||
"quality-settings-button": {
|
||||
"label": "Obre les opcions de qualitat del reproductor"
|
||||
}
|
||||
}
|
||||
},
|
||||
"scrobbler": {
|
||||
"description": "Afegeix suport per scrobbling (Last.fm, ListenBrainz, etc.)",
|
||||
@ -664,6 +758,8 @@
|
||||
"listenbrainz": {
|
||||
"token": "Introduir token d'usuari de ListenBrainz"
|
||||
},
|
||||
"scrobble-alternative-artist": "Utilitza artistes alternatius",
|
||||
"scrobble-alternative-title": "Useu títols alternatius",
|
||||
"scrobble-other-media": "Scrobble amb altres mitjans"
|
||||
},
|
||||
"name": "Scrobbler",
|
||||
@ -714,8 +810,8 @@
|
||||
"synced-lyrics": {
|
||||
"description": "Proporciona lletres sincronitzades amb les cançons, a través de proveïdors com LRClib.",
|
||||
"errors": {
|
||||
"fetch": "⚠️ - Se ha produït un error en descarregar la lletra. Si us plau, intenta-ho més tard.",
|
||||
"not-found": "⚠️ - No s'ha trobat la lletra per aquesta cançó."
|
||||
"fetch": "⚠️\tS'ha produït un error en descarregar la lletra.\n\tSi us plau, intenta-ho més tard.",
|
||||
"not-found": "⚠️ No s'ha trobat la lletra per aquesta cançó."
|
||||
},
|
||||
"menu": {
|
||||
"default-text-string": {
|
||||
@ -725,6 +821,10 @@
|
||||
"line-effect": {
|
||||
"label": "Efecte de la línia",
|
||||
"submenu": {
|
||||
"fancy": {
|
||||
"label": "Caprici",
|
||||
"tooltip": "Utilitza efectes grans \"app-like\" en la línia actual"
|
||||
},
|
||||
"focus": {
|
||||
"label": "Focus",
|
||||
"tooltip": "Mostra tan sols la línia actual en blanc"
|
||||
@ -744,6 +844,18 @@
|
||||
"label": "Fes que les lletres es sincronitzin a la perfecció",
|
||||
"tooltip": "Calcula al mil·lisegon l'aparició de la següent línia (pot tenir un petit impacte en el rendiment)"
|
||||
},
|
||||
"preferred-provider": {
|
||||
"label": "Proveïdor preferit",
|
||||
"none": {
|
||||
"label": "Cap",
|
||||
"tooltip": "Cap proveïdor preferit"
|
||||
},
|
||||
"tooltip": "Trieu el proveïdor predeterminat que voleu utilitzar"
|
||||
},
|
||||
"romanization": {
|
||||
"label": "Romanitza les lletres",
|
||||
"tooltip": "Si les lletres són en un idioma diferent, intenta mostrar la versió amb alfabet llatí."
|
||||
},
|
||||
"show-lyrics-even-if-inexact": {
|
||||
"label": "Mostra la lletra tot i que sigui inexacta",
|
||||
"tooltip": "Si no es troba la cançó, el plugin torna a intentar obtenir la lletra amb una cerca diferent.\nEl resultat d'aquesta segona cerca podria no ser exacte."
|
||||
@ -772,10 +884,35 @@
|
||||
"description": "Afegeix un giny a la Touch Bar per usuaris de macOS",
|
||||
"name": "TouchBar"
|
||||
},
|
||||
"transparent-player": {
|
||||
"description": "Fa la finestra de l'aplicació transparent",
|
||||
"menu": {
|
||||
"opacity": {
|
||||
"label": "Opacitat",
|
||||
"submenu": {
|
||||
"percent": "{{opacity}}%"
|
||||
}
|
||||
},
|
||||
"type": {
|
||||
"label": "Tipus",
|
||||
"submenu": {
|
||||
"acrylic": "Acrílic",
|
||||
"mica": "Mica",
|
||||
"none": "Cap",
|
||||
"tabbed": "En pestanyes"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Reproductor Transparent"
|
||||
},
|
||||
"tuna-obs": {
|
||||
"description": "Integració amb l'extensió «Tuna» del OBS",
|
||||
"name": "Tuna OBS"
|
||||
},
|
||||
"unobtrusive-player": {
|
||||
"description": "Impedeix que salti el reproductor mentre se sent una cançó",
|
||||
"name": "Reproductor Discret"
|
||||
},
|
||||
"video-toggle": {
|
||||
"description": "Afegeix un botó per commutar entre el mode de vídeo o de cançó. Opcionalment, es pot eliminar la pestanya de vídeo per complet",
|
||||
"menu": {
|
||||
@ -799,7 +936,8 @@
|
||||
},
|
||||
"name": "Botó de vídeo",
|
||||
"templates": {
|
||||
"button": "Cançó"
|
||||
"button-song": "Cançó",
|
||||
"button-video": "Vídeo"
|
||||
}
|
||||
},
|
||||
"visualizer": {
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
"load-all": "Načítání všech pluginů",
|
||||
"load-failed": "Selhalo načtení \"{{pluginName}}\" pluginu",
|
||||
"loaded": "Plugin \"{{pluginName}}\" načten",
|
||||
"unload-failed": "Selhalo unload \"{{pluginName}}\" pluginu",
|
||||
"unload-failed": "Selhalo vypnutí \"{{pluginName}}\" pluginu",
|
||||
"unloaded": "Plugin {{pluginName}} byl odnačten"
|
||||
}
|
||||
}
|
||||
@ -150,6 +150,13 @@
|
||||
"visual-tweaks": {
|
||||
"label": "Vzhledové vylepšení",
|
||||
"submenu": {
|
||||
"custom-window-title": {
|
||||
"label": "Vlastní název okna",
|
||||
"prompt": {
|
||||
"label": "Zadejte vlastní název okna: (zanechejte prázdné pro zakázání)",
|
||||
"placeholder": "Příklad: {{applicationName}}"
|
||||
}
|
||||
},
|
||||
"like-buttons": {
|
||||
"default": "Výchozí",
|
||||
"force-show": "Vynutit zobrazení",
|
||||
@ -201,8 +208,8 @@
|
||||
"restart": "Restartovat aplikaci",
|
||||
"show": "Zobrazit okno",
|
||||
"tooltip": {
|
||||
"default": "Youtube Music",
|
||||
"with-song-info": "Youtube Music {{Umělec}} - {{Titul}}"
|
||||
"default": "{{applicationName}}",
|
||||
"with-song-info": "{{applicationName}}: {{artist}} - {{title}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -220,7 +227,7 @@
|
||||
},
|
||||
"album-actions": {
|
||||
"description": "Přidává Undislike, Dislike, Like, a Unlike tlačítka k aplikování tohoto ke všem písničkám v seznamu písniček nebo albumu",
|
||||
"name": "Album akce"
|
||||
"name": "Možnosti Alba"
|
||||
},
|
||||
"album-color-theme": {
|
||||
"description": "Používá dynamický motiv a vizuální efekty na základě palety barev alba",
|
||||
@ -228,7 +235,7 @@
|
||||
"color-mix-ratio": {
|
||||
"label": "Poměr míchání barev",
|
||||
"submenu": {
|
||||
"percent": "{{poměr}}%"
|
||||
"percent": "{{ratio}}%"
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -279,20 +286,94 @@
|
||||
},
|
||||
"name": "Ambientní režim"
|
||||
},
|
||||
"amuse": {
|
||||
"description": "Přídá {{applicationName}} podporu pro Amuse ‚právě hraje‘ widget od 6K Labs",
|
||||
"name": "Amuse",
|
||||
"response": {
|
||||
"query": "Server Amuse API běží. Pošli požadavek typu GET na /query, aby ses dozvěděl info o písničce."
|
||||
}
|
||||
},
|
||||
"api-server": {
|
||||
"description": "Vlož API server abys mohl ovládat přehrávač",
|
||||
"dialog": {
|
||||
"request": {
|
||||
"buttons": {
|
||||
"allow": "Povolit",
|
||||
"deny": "Zakázat"
|
||||
},
|
||||
"message": "Povolit {{ID}} ({{origin}}) přístup k API?",
|
||||
"title": "dotaz na přihlášení k API"
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"auth-strategy": {
|
||||
"label": "Možnosti přihlášení",
|
||||
"submenu": {
|
||||
"auth-at-first": {
|
||||
"label": "Ověřit při prvním dotazu"
|
||||
},
|
||||
"none": {
|
||||
"label": "Bez ověření"
|
||||
}
|
||||
}
|
||||
},
|
||||
"hostname": {
|
||||
"label": "Hostname"
|
||||
},
|
||||
"port": {
|
||||
"label": "Port"
|
||||
}
|
||||
},
|
||||
"name": "API server [Beta]",
|
||||
"prompt": {
|
||||
"hostname": {
|
||||
"label": "Zadej hostname API serveru (ve tvaru 0.0.0.0):",
|
||||
"title": "Hostname"
|
||||
},
|
||||
"port": {
|
||||
"label": "Zadej port API serveru:",
|
||||
"title": "Port"
|
||||
}
|
||||
}
|
||||
},
|
||||
"audio-compressor": {
|
||||
"description": "Apply compression k audiu (snižuje hlasitost nejhlasitěších částí signálu and zvyšuje hlasitost nejjemnějších částí)",
|
||||
"description": "Aplikuje kompresi k audiu (snižuje hlasitost nejhlasitěších částí signálu a zvyšuje hlasitost nejjemnějších částí)",
|
||||
"name": "Audio kompresor"
|
||||
},
|
||||
"auth-proxy-adapter": {
|
||||
"description": "Podpora pro použití ověřovacích proxy služeb",
|
||||
"menu": {
|
||||
"disable": "Vypnout Proxy Adaptér",
|
||||
"enable": "Zapnout Proxy Adaptér",
|
||||
"hostname": {
|
||||
"label": "Hostname"
|
||||
},
|
||||
"port": {
|
||||
"label": "Port"
|
||||
}
|
||||
},
|
||||
"name": "Autorizační Proxy adaptér",
|
||||
"prompt": {
|
||||
"hostname": {
|
||||
"label": "Zadejte hostname lokálního proxy serveru (vyžaduje restart):",
|
||||
"title": "Proxy Hostname"
|
||||
},
|
||||
"port": {
|
||||
"label": "Zadejte port lokálního proxy serveru (vyžaduje restart):",
|
||||
"title": "Proxy Port"
|
||||
}
|
||||
}
|
||||
},
|
||||
"blur-nav-bar": {
|
||||
"description": "Udělá navigační panel průhledný a rozmazaný",
|
||||
"name": "Rozmazaný navigační panel"
|
||||
},
|
||||
"bypass-age-restrictions": {
|
||||
"description": "Obejít ověření věku na YouTube",
|
||||
"description": "Obejít ověření věku na Music Player",
|
||||
"name": "Obejít věková omezení"
|
||||
},
|
||||
"captions-selector": {
|
||||
"description": "Titulkový selector pro zvukové stopy v YouTube Music",
|
||||
"description": "Titulkový selector pro zvukové stopy v {{applicationName}}",
|
||||
"menu": {
|
||||
"autoload": "Automaticky vybrat naposledy použité titulky",
|
||||
"disable-captions": "Žádné titulky ve vychozím nastavení"
|
||||
@ -307,6 +388,11 @@
|
||||
},
|
||||
"templates": {
|
||||
"title": "Otevřít titulový selector"
|
||||
},
|
||||
"toast": {
|
||||
"caption-changed": "Titulky změněny na {{language}}",
|
||||
"caption-disabled": "Titulky vypnuty",
|
||||
"no-captions": "K této skladbě nejsou titulky dostupné"
|
||||
}
|
||||
},
|
||||
"compact-sidebar": {
|
||||
@ -335,6 +421,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"custom-output-device": {
|
||||
"description": "Nastavte vlastní výstupní zařízení pro skladby",
|
||||
"menu": {
|
||||
"device-selector": "Vyberte zařízení"
|
||||
},
|
||||
"name": "Vlastní výstupní zařízení",
|
||||
"prompt": {
|
||||
"device-selector": {
|
||||
"label": "Vyberte zařízení pro výstup zvuku",
|
||||
"title": "Vyberte výstupní zařízení"
|
||||
}
|
||||
}
|
||||
},
|
||||
"disable-autoplay": {
|
||||
"description": "Spustí písničku v režimu \"pozastaveno\"",
|
||||
"menu": {
|
||||
@ -348,7 +447,7 @@
|
||||
"connected": "Připojeno k Discordu",
|
||||
"disconnected": "Odpojeno od Discordu"
|
||||
},
|
||||
"description": "Ukažte svým přátelům, co posloucháte s Bohatou přítomností",
|
||||
"description": "Ukažte svým přátelům, co posloucháte pomocí Rich Persence",
|
||||
"menu": {
|
||||
"auto-reconnect": "Automaticky znovu připojit",
|
||||
"clear-activity": "Vymazat aktivitu",
|
||||
@ -357,10 +456,18 @@
|
||||
"disconnected": "Odpojeno",
|
||||
"hide-duration-left": "Skrýt zbývající duration",
|
||||
"hide-github-button": "Skrýt tlačítko s odkazem na GitHub",
|
||||
"play-on-youtube-music": "Hrát na YouTube Music",
|
||||
"set-inactivity-timeout": "Nastavit timeout pro neaktivitu"
|
||||
"play-on-application": "Hrát na {{applicationName}}",
|
||||
"set-inactivity-timeout": "Nastavit timeout pro neaktivitu",
|
||||
"set-status-display-type": {
|
||||
"label": "Text statusu",
|
||||
"submenu": {
|
||||
"artist": "Poslouchám: {artist}",
|
||||
"application": "Poslouchám {{applicationName}}",
|
||||
"title": "Poslouchám {song title}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Discord Bohatá přítomnost",
|
||||
"name": "Discord Rich Persence",
|
||||
"prompt": {
|
||||
"set-inactivity-timeout": {
|
||||
"label": "Zadejte timeout neaktivity v sekundách:",
|
||||
@ -415,8 +522,18 @@
|
||||
"menu": {
|
||||
"choose-download-folder": "Vybrat složku pro stahování",
|
||||
"download-finish-settings": {
|
||||
"label": "Stáhnout po dokončení",
|
||||
"prompt": {
|
||||
"last-percent": "Po x procentech",
|
||||
"last-seconds": "Posledních x vteřin",
|
||||
"title": "Nastavit kdy stahovat"
|
||||
},
|
||||
"submenu": {
|
||||
"advanced": "Pokoročile"
|
||||
"advanced": "Pokoročile",
|
||||
"enabled": "Povoleno",
|
||||
"mode": "Časový režim",
|
||||
"percent": "Procent",
|
||||
"seconds": "Sekundy"
|
||||
}
|
||||
},
|
||||
"download-playlist": "Stáhnout seznam písniček",
|
||||
@ -431,6 +548,18 @@
|
||||
"button": "Stáhnout"
|
||||
}
|
||||
},
|
||||
"equalizer": {
|
||||
"description": "Přidá do přehrávače ekvalizér",
|
||||
"menu": {
|
||||
"presets": {
|
||||
"label": "Předvolby",
|
||||
"list": {
|
||||
"bass-booster": "Zesílení basů"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Ekvalizér"
|
||||
},
|
||||
"exponential-volume": {
|
||||
"description": "Dělá posuvník hlasitosti exponenciální, takže je snazší vybrat nižší hlasitost.",
|
||||
"name": "Exponenciální hlasitost"
|
||||
@ -457,7 +586,7 @@
|
||||
}
|
||||
},
|
||||
"music-together": {
|
||||
"description": "Sdílejte playlist s ostatními. Když hostitel přehrává písničku, uslyší jí i všichni ostatní.",
|
||||
"description": "Sdílejte playlist s ostatními. Když hostitel přehrává skladbu, uslyší jí i všichni ostatní",
|
||||
"dialog": {
|
||||
"enter-host": "Zadejte Host ID"
|
||||
},
|
||||
@ -504,7 +633,15 @@
|
||||
},
|
||||
"navigation": {
|
||||
"description": "Další/Zpátky navigační šipky přímo integrovány do rozhraní, jako ve vašem oblíbeném prohlížeči",
|
||||
"name": "Navigace"
|
||||
"name": "Navigace",
|
||||
"templates": {
|
||||
"back": {
|
||||
"title": "Přejít na předchozí stránku"
|
||||
},
|
||||
"forward": {
|
||||
"title": "Přejít na další stránku"
|
||||
}
|
||||
}
|
||||
},
|
||||
"no-google-login": {
|
||||
"description": "Odstranit tlačítka Google přihlášení a odkazy z rozhraní",
|
||||
@ -528,6 +665,10 @@
|
||||
},
|
||||
"name": "Oznámení"
|
||||
},
|
||||
"performance-improvement": {
|
||||
"description": "Zlepšit výkon povolením experimentálních skriptů",
|
||||
"name": "Zlepšení výkonu [Beta]"
|
||||
},
|
||||
"picture-in-picture": {
|
||||
"description": "Povoluje switch aplikaci do režimu obrázek v obrázku",
|
||||
"menu": {
|
||||
@ -592,7 +733,12 @@
|
||||
}
|
||||
},
|
||||
"description": "Umožňuje měnit kvalitu videa pomocí tlačítka na video overlay",
|
||||
"name": "Měnič kvality videa"
|
||||
"name": "Měnič kvality videa",
|
||||
"renderer": {
|
||||
"quality-settings-button": {
|
||||
"label": "Otevřít volbu kvality přehrávače"
|
||||
}
|
||||
}
|
||||
},
|
||||
"scrobbler": {
|
||||
"description": "Přidat scrobbing podporu (např .last.fm , Listenbrainz)",
|
||||
@ -611,16 +757,20 @@
|
||||
"listenbrainz": {
|
||||
"token": "Vložte Listenbrainz user token"
|
||||
},
|
||||
"scrobble-alternative-artist": "Použij alternativní umělce",
|
||||
"scrobble-alternative-title": "Používat alternativní názvy",
|
||||
"scrobble-other-media": "Scrobble jiné média"
|
||||
},
|
||||
"name": "Scrobbler",
|
||||
"prompt": {
|
||||
"lastfm": {
|
||||
"api-key": "Last,fm API klíč"
|
||||
"api-key": "Last,fm API klíč",
|
||||
"api-secret": "Tajný klíč API Last.fm"
|
||||
},
|
||||
"listenbrainz": {
|
||||
"token": {
|
||||
"label": "Vložte svůj Listenbrainz user token:"
|
||||
"label": "Vložte svůj Listenbrainz user token:",
|
||||
"title": "ListenBrainz token"
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -656,6 +806,75 @@
|
||||
"description": "Automaticky přeskakuje nehudební části jako intro/outro nebo části hudebních videí, kde nehraje písnčka",
|
||||
"name": "SponsorBlock"
|
||||
},
|
||||
"synced-lyrics": {
|
||||
"description": "Poskytuje synchronizaci textů do písní, pomocí poskytovatelů, jako je LRClib.",
|
||||
"errors": {
|
||||
"fetch": "⚠️ Při hledání textu došlo k chybě.\n \tProsím zkuste to znovu později.",
|
||||
"not-found": "⚠️ Pro tuto skladbu nebyl nalezen žádný text."
|
||||
},
|
||||
"menu": {
|
||||
"default-text-string": {
|
||||
"label": "Výchozí znak mezi texty",
|
||||
"tooltip": "Vyberte výchozí znak pro mezeru mezi texty"
|
||||
},
|
||||
"line-effect": {
|
||||
"label": "Efekt řádku",
|
||||
"submenu": {
|
||||
"fancy": {
|
||||
"label": "Luxusní",
|
||||
"tooltip": "Použijte velké, aplikací inspirované efekty na aktuální řádek"
|
||||
},
|
||||
"focus": {
|
||||
"label": "Soustředění",
|
||||
"tooltip": "Nechat pouze aktuální řádek bílý"
|
||||
},
|
||||
"offset": {
|
||||
"label": "Posun",
|
||||
"tooltip": "Posunout aktuální řádek doprava"
|
||||
},
|
||||
"scale": {
|
||||
"label": "Zvětšení",
|
||||
"tooltip": "Změnit velikost aktuálního řádku"
|
||||
}
|
||||
},
|
||||
"tooltip": "Vyberte efekt pro aktuální řádek"
|
||||
},
|
||||
"precise-timing": {
|
||||
"label": "Dokonale synchronizovat texty",
|
||||
"tooltip": "Vypočítat zobrazení dalšího řádku na milisekundu (může mít menší dopad na výkon)"
|
||||
},
|
||||
"preferred-provider": {
|
||||
"label": "Preferovaný poskytovatel",
|
||||
"none": {
|
||||
"label": "Žádný",
|
||||
"tooltip": "Žádný preferovaný poskytovatel"
|
||||
},
|
||||
"tooltip": "Zvolte výchozího poskytovatele"
|
||||
},
|
||||
"romanization": {
|
||||
"label": "Romanizovat texty",
|
||||
"tooltip": "Pokud je text v jiném jazyce, zkusit zobrazit verzi v latince."
|
||||
},
|
||||
"show-lyrics-even-if-inexact": {
|
||||
"label": "Zobrazit i nepřesné texty",
|
||||
"tooltip": "Pokud se píseň nenajde, plugin to zkusí znovu s jiným vyhledávacím výrazem.\nVýsledek druhého pokusu nemusí být přesný."
|
||||
},
|
||||
"show-time-codes": {
|
||||
"label": "Zobrazit časové kódy",
|
||||
"tooltip": "Zobrazit časové kódy vedle textu"
|
||||
}
|
||||
},
|
||||
"name": "Synchronizované texty",
|
||||
"refetch-btn": {
|
||||
"fetching": "Získávání...",
|
||||
"normal": "Znovu načíst texty"
|
||||
},
|
||||
"warnings": {
|
||||
"duration-mismatch": "⚠️ - Text nemusí být synchronizován kvůli neshodě v délce trvání.",
|
||||
"inexact": "⚠️ - Text pro tuto skladbu nemusí být přesný",
|
||||
"instrumental": "⚠️ - Tato skladba je instrumentální"
|
||||
}
|
||||
},
|
||||
"taskbar-mediacontrol": {
|
||||
"description": "Ovládejte přehrávání z vašeho Windows hlavního panelu",
|
||||
"name": "Hlavní panel Media Control"
|
||||
@ -664,10 +883,35 @@
|
||||
"description": "Přidává Touch Bar widget pro macOS uživatele",
|
||||
"name": "Touch Bar"
|
||||
},
|
||||
"transparent-player": {
|
||||
"description": "Zprůhlední okno aplikace",
|
||||
"menu": {
|
||||
"opacity": {
|
||||
"label": "Průhlednost",
|
||||
"submenu": {
|
||||
"percent": "{{opacity}}%"
|
||||
}
|
||||
},
|
||||
"type": {
|
||||
"label": "Typ",
|
||||
"submenu": {
|
||||
"acrylic": "Akryl",
|
||||
"mica": "Mica",
|
||||
"none": "Žádné",
|
||||
"tabbed": "Záložkovaný"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Průhledný přehrávač"
|
||||
},
|
||||
"tuna-obs": {
|
||||
"description": "Integrace s OBS's plugin Tuna",
|
||||
"name": "Tuna OBS"
|
||||
},
|
||||
"unobtrusive-player": {
|
||||
"description": "Zabrání tomu, aby se přehrávač objevil při hraní písně",
|
||||
"name": "Nepřekážející přehrávač"
|
||||
},
|
||||
"video-toggle": {
|
||||
"description": "Přidává tlačítko k switch mezi video/písničko režimem. Může také odstranit celou video kartu",
|
||||
"menu": {
|
||||
@ -691,7 +935,8 @@
|
||||
},
|
||||
"name": "Přepínač videa",
|
||||
"templates": {
|
||||
"button": "Písnička"
|
||||
"button-song": "Skladba",
|
||||
"button-video": "Video"
|
||||
}
|
||||
},
|
||||
"visualizer": {
|
||||
|
||||
334
src/i18n/resources/da.json
Normal file
@ -0,0 +1,334 @@
|
||||
{
|
||||
"common": {
|
||||
"console": {
|
||||
"plugins": {
|
||||
"execute-failed": "Fejl ved udføring af plugin {{pluginName}}::{{contextName}}",
|
||||
"executed-at-ms": "Plugin {{pluginName}}::{{contextName}} udført på {{ms}}ms",
|
||||
"initialize-failed": "Fejl ved igangsætning af plugin \"{{pluginName}}\"",
|
||||
"load-all": "Indlæser alle plugins",
|
||||
"load-failed": "Fejl ved indlæsning af plugin \"{{pluginName}}\"",
|
||||
"loaded": "Plugin \"{{pluginName}}\" indlæst",
|
||||
"unload-failed": "Fejl ved aflæsning af plugin \"{{pluginNavn}}\"",
|
||||
"unloaded": "Plugin \"{{pluginNavn}}\" aflæssede"
|
||||
}
|
||||
}
|
||||
},
|
||||
"language": {
|
||||
"code": "dk",
|
||||
"local-name": "Dansk",
|
||||
"name": "Danish"
|
||||
},
|
||||
"main": {
|
||||
"console": {
|
||||
"did-finish-load": {
|
||||
"dev-tools": "Indlæsning færdig. DevTools åbnet"
|
||||
},
|
||||
"i18n": {
|
||||
"loaded": "i18n indlæst"
|
||||
},
|
||||
"second-instance": {
|
||||
"receive-command": "Modtog kommando over protokol: \"{{command}}\""
|
||||
},
|
||||
"theme": {
|
||||
"css-file-not-found": "CSS fil \"{{cssFile}}\" eksisterer ikke, ignorere"
|
||||
},
|
||||
"unresponsive": {
|
||||
"details": "Uresponsiv fejl!\n{{error}}"
|
||||
},
|
||||
"when-ready": {
|
||||
"clearing-cache-after-20s": "Rydder op i appens cache"
|
||||
},
|
||||
"window": {
|
||||
"tried-to-render-offscreen": "Windows forsøgte at indlæse uden for skærmen, windowSize={{windowSize}}, displaySize={{displaySize}}, position={{position}}"
|
||||
}
|
||||
},
|
||||
"dialog": {
|
||||
"hide-menu-enabled": {
|
||||
"detail": "Menuen er gemt, brug 'Alt' knappen for at vise den igen (eller 'Escape' hvis In-App menuen bruges)",
|
||||
"message": "Skjul menuen er aktiveret",
|
||||
"title": "Skjult menu aktiveret"
|
||||
},
|
||||
"need-to-restart": {
|
||||
"buttons": {
|
||||
"later": "Senere",
|
||||
"restart-now": "Genstart nu"
|
||||
},
|
||||
"detail": "\"{{pluginName}}\" plugin kræver en genstart for at have en effekt",
|
||||
"message": "\"{{pluginName}}\" skal genstarte",
|
||||
"title": "Genstart krævet"
|
||||
},
|
||||
"unresponsive": {
|
||||
"buttons": {
|
||||
"quit": "Afslut",
|
||||
"relaunch": "Genåben",
|
||||
"wait": "Vent"
|
||||
},
|
||||
"detail": "Vi undskylder for ubelejligheden! Vælg næste handling:",
|
||||
"message": "Appen svarer ikke",
|
||||
"title": "Vindue svarer ikke"
|
||||
},
|
||||
"update-available": {
|
||||
"buttons": {
|
||||
"disable": "Slå opdateringer fra",
|
||||
"download": "Hent",
|
||||
"ok": "OK"
|
||||
},
|
||||
"detail": "En ny version er tilgængelig og kan downloades her: {{downloadLink}}",
|
||||
"message": "En ny version er tilgængelig",
|
||||
"title": "Opdatering tilgængelig"
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"about": "Om",
|
||||
"navigation": {
|
||||
"label": "Navigering",
|
||||
"submenu": {
|
||||
"copy-current-url": "Kopier nuværende URL",
|
||||
"go-back": "Tilbage",
|
||||
"go-forward": "Frem",
|
||||
"quit": "Afslut",
|
||||
"restart": "Genstart Appen"
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"label": "Indstillinger",
|
||||
"submenu": {
|
||||
"advanced-options": {
|
||||
"label": "Avancerede indstillinger",
|
||||
"submenu": {
|
||||
"auto-reset-app-cache": "Nulstil app cache når appen starter",
|
||||
"disable-hardware-acceleration": "Deaktiver hardware acceleration",
|
||||
"edit-config-json": "Rediger config.json",
|
||||
"override-user-agent": "Erstat Bruger-Agent",
|
||||
"restart-on-config-changes": "Genstart ved config ændringer",
|
||||
"set-proxy": {
|
||||
"label": "Indstil proxy",
|
||||
"prompt": {
|
||||
"label": "Skriv proxy adresse: (Efterlad tom for at deaktivere)",
|
||||
"placeholder": "Eksempel: SOCKS5://127.0.0.1:9999",
|
||||
"title": "Sæt proxy"
|
||||
}
|
||||
},
|
||||
"toggle-dev-tools": "Skift DevTools"
|
||||
}
|
||||
},
|
||||
"always-on-top": "Altid øverst",
|
||||
"auto-update": "Automatisk opdatering",
|
||||
"hide-menu": {
|
||||
"dialog": {
|
||||
"message": "Menuen vil være lukket næste gang appen starter. Brug [Alt] for at vise den (Eller backtick [`] hvis in-app-menu bruges)",
|
||||
"title": "Gemt menu aktiveret"
|
||||
},
|
||||
"label": "Skjul menu"
|
||||
},
|
||||
"language": {
|
||||
"dialog": {
|
||||
"message": "Sproget vil blive ændret efter genstart",
|
||||
"title": "Sprog ændret"
|
||||
},
|
||||
"label": "Sprog",
|
||||
"submenu": {
|
||||
"to-help-translate": "Vil du hjælpe med at oversætte? Klik her"
|
||||
}
|
||||
},
|
||||
"resume-on-start": "Genoptag sidste sang når appen starter",
|
||||
"single-instance-lock": "Enkeltinstans lås",
|
||||
"start-at-login": "Start ved login",
|
||||
"starting-page": {
|
||||
"label": "Startside",
|
||||
"unset": "Ikke valgt"
|
||||
},
|
||||
"tray": {
|
||||
"label": "Bakke",
|
||||
"submenu": {
|
||||
"disabled": "Deaktiveret",
|
||||
"enabled-and-hide-app": "Bakke aktiveret, og skjul programvindue",
|
||||
"enabled-and-show-app": "Aktiver og vis app",
|
||||
"play-pause-on-click": "Start/Stop ved klik"
|
||||
}
|
||||
},
|
||||
"visual-tweaks": {
|
||||
"label": "Visuelle Justeringer",
|
||||
"submenu": {
|
||||
"custom-window-title": {
|
||||
"label": "Tilpasset vindues titel",
|
||||
"prompt": {
|
||||
"label": "Indtast tilpasset vindues titel: (lad være top for deaktiveret)",
|
||||
"placeholder": "Eksempel: {{applicationName}}"
|
||||
}
|
||||
},
|
||||
"like-buttons": {
|
||||
"default": "Standard",
|
||||
"force-show": "Tving visning",
|
||||
"hide": "Skjul",
|
||||
"label": "Like knapper"
|
||||
},
|
||||
"remove-upgrade-button": "Fjern opgrader knappen",
|
||||
"theme": {
|
||||
"dialog": {
|
||||
"button": {
|
||||
"cancel": "Annuller",
|
||||
"remove": "Fjern"
|
||||
},
|
||||
"remove-theme": "Er du sikker på at du til fjerne det brugerdefinerede tema?",
|
||||
"remove-theme-message": "Dette vil fjerne det brugerdefinerede tema"
|
||||
},
|
||||
"label": "Tema",
|
||||
"submenu": {
|
||||
"import-css-file": "Importer brugerdefinerede CSS fil",
|
||||
"no-theme": "Intet tema"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"enabled": "Aktiveret",
|
||||
"label": "Plugins",
|
||||
"new": "NY"
|
||||
},
|
||||
"view": {
|
||||
"label": "Vis",
|
||||
"submenu": {
|
||||
"force-reload": "Tving Genindlæs",
|
||||
"reload": "Genindlæs",
|
||||
"zoom-in": "Zoom ind",
|
||||
"zoom-out": "Zoom ud"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tray": {
|
||||
"next": "Næste",
|
||||
"play-pause": "Afspil",
|
||||
"previous": "Sidste",
|
||||
"quit": "Luk",
|
||||
"restart": "Genstart app",
|
||||
"show": "Vis vindue",
|
||||
"tooltip": {
|
||||
"default": "{{applicationName}}",
|
||||
"with-song-info": "{{applicationName}}: {{artist}} - {{title}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"ad-speedup": {
|
||||
"description": "Hvis en reklame afspilles, slår den lyden fra og sætter hastigheden til 16x",
|
||||
"name": "Spol igennem reklamen"
|
||||
},
|
||||
"adblocker": {
|
||||
"description": "Bloker alle reklamer og sporing fra starten af",
|
||||
"menu": {
|
||||
"blocker": "Bloker"
|
||||
},
|
||||
"name": "Bloker reklamer"
|
||||
},
|
||||
"album-color-theme": {
|
||||
"menu": {
|
||||
"color-mix-ratio": {
|
||||
"submenu": {
|
||||
"percent": "{{ratio}}%"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Albummets farve tema"
|
||||
},
|
||||
"ambient-mode": {
|
||||
"menu": {
|
||||
"blur-amount": {
|
||||
"label": "Sløringsmængde",
|
||||
"submenu": {
|
||||
"pixels": "{{blurAmount}} pixel"
|
||||
}
|
||||
},
|
||||
"buffer": {
|
||||
"label": "Buffer",
|
||||
"submenu": {
|
||||
"buffer": "{{buffer}}"
|
||||
}
|
||||
},
|
||||
"opacity": {
|
||||
"label": "Gennemsigtighed",
|
||||
"submenu": {
|
||||
"percent": "{{opacity}}%"
|
||||
}
|
||||
},
|
||||
"quality": {
|
||||
"label": "Kvalitet",
|
||||
"submenu": {
|
||||
"pixels": "{{quality}} pixel"
|
||||
}
|
||||
},
|
||||
"size": {
|
||||
"label": "Størrelse",
|
||||
"submenu": {
|
||||
"percent": "{{size}}%"
|
||||
}
|
||||
},
|
||||
"use-fullscreen": {
|
||||
"label": "Bruger fuldskærm"
|
||||
}
|
||||
}
|
||||
},
|
||||
"api-server": {
|
||||
"dialog": {
|
||||
"request": {
|
||||
"buttons": {
|
||||
"allow": "Tillad",
|
||||
"deny": "Afvis"
|
||||
},
|
||||
"message": "Tillad at {{ID}} ({{origin}}) får adgang til API'en?"
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"auth-strategy": {
|
||||
"label": "Godkendelsesstrategi"
|
||||
},
|
||||
"hostname": {
|
||||
"label": "Hostname"
|
||||
},
|
||||
"port": {
|
||||
"label": "Port"
|
||||
}
|
||||
},
|
||||
"name": "API Server [Beta]",
|
||||
"prompt": {
|
||||
"hostname": {
|
||||
"label": "Skriv API serverens hostname (f. eks. 0.0.0.0):",
|
||||
"title": "Hostname"
|
||||
},
|
||||
"port": {
|
||||
"label": "Skriv API serverens port:",
|
||||
"title": "Port"
|
||||
}
|
||||
}
|
||||
},
|
||||
"audio-compressor": {
|
||||
"name": "Lyd kompressor"
|
||||
},
|
||||
"blur-nav-bar": {
|
||||
"description": "Gør navigationsbaren gennemsigtig og sløret",
|
||||
"name": "Slør navigationsbar"
|
||||
},
|
||||
"captions-selector": {
|
||||
"menu": {
|
||||
"disable-captions": "Ingen undertekster som standard"
|
||||
},
|
||||
"name": "Vælg undertekster",
|
||||
"prompt": {
|
||||
"selector": {
|
||||
"label": "Nuværende sprog på undertekster: {{language}}",
|
||||
"none": "Ingen",
|
||||
"title": "Vælg underteksternes sprog"
|
||||
}
|
||||
}
|
||||
},
|
||||
"crossfade": {
|
||||
"description": "Fade imellem sange",
|
||||
"menu": {
|
||||
"advanced": "Avanceret"
|
||||
},
|
||||
"name": "Fade [Beta]"
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -3,7 +3,7 @@
|
||||
"console": {
|
||||
"plugins": {
|
||||
"execute-failed": "Erweiterung {{pluginName}}::{{contextName}} konnte nicht ausgeführt werden",
|
||||
"executed-at-ms": "Erweiterung {{pluginName}}::{{contextName}} ausgeführt in {{ms}}ms",
|
||||
"executed-at-ms": "Erweiterung {{pluginName}}::{{contextName}} in {{ms}}ms ausgeführt",
|
||||
"initialize-failed": "Initialisierung der Erweiterung \"{{pluginName}}\" fehlgeschlagen",
|
||||
"load-all": "Lade alle Erweiterungen",
|
||||
"load-failed": "Laden der Erweiterung \"{{pluginName}}\" fehlgeschlagen",
|
||||
@ -150,6 +150,13 @@
|
||||
"visual-tweaks": {
|
||||
"label": "Visuelle Optimierungen",
|
||||
"submenu": {
|
||||
"custom-window-title": {
|
||||
"label": "Benutzerdefinierter Fenstertitel",
|
||||
"prompt": {
|
||||
"label": "Benutzerdefinierten Fenstertitel eingeben: (zum Deaktivieren leer lassen)",
|
||||
"placeholder": "Beispiel: {{applicationName}}"
|
||||
}
|
||||
},
|
||||
"like-buttons": {
|
||||
"default": "Standard",
|
||||
"force-show": "Zeigen erzwungen",
|
||||
@ -201,8 +208,8 @@
|
||||
"restart": "Anwendung neu starten",
|
||||
"show": "Fenster anzeigen",
|
||||
"tooltip": {
|
||||
"default": "YouTube Musik",
|
||||
"with-song-info": "YouTube Musik: {{artist}} - {{title}}"
|
||||
"default": "{{applicationName}}",
|
||||
"with-song-info": "{{applicationName}}: {{artist}} - {{title}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -230,7 +237,8 @@
|
||||
"submenu": {
|
||||
"percent": "{{ratio}}%"
|
||||
}
|
||||
}
|
||||
},
|
||||
"enable-seekbar": "Suchleisten-Design aktivieren"
|
||||
},
|
||||
"name": "Thema aus Albumfarbe"
|
||||
},
|
||||
@ -279,20 +287,110 @@
|
||||
},
|
||||
"name": "Ambiente-Modus"
|
||||
},
|
||||
"amuse": {
|
||||
"description": "Fügt {{applicationName}} Unterstützung für das Amuse \"Spielt gerade\"-Widget von 6K Labs hinzu",
|
||||
"name": "Amuse",
|
||||
"response": {
|
||||
"query": "Amuse API-Server läuft. /query für Liedinformationen."
|
||||
}
|
||||
},
|
||||
"api-server": {
|
||||
"description": "Fügt einen API-Server hinzu, um die Wiedergabe zu steuern",
|
||||
"dialog": {
|
||||
"request": {
|
||||
"buttons": {
|
||||
"allow": "Erlauben",
|
||||
"deny": "Ablehnen"
|
||||
},
|
||||
"message": "{{ID}} ({{origin}}) den Zugriff zur API erlauben?",
|
||||
"title": "API-Autorisierungs-Anfrage"
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"auth-strategy": {
|
||||
"label": "Autorisations-Methode",
|
||||
"submenu": {
|
||||
"auth-at-first": {
|
||||
"label": "Beim ersten Zugriff autorisieren"
|
||||
},
|
||||
"none": {
|
||||
"label": "Keine Autorisierung"
|
||||
}
|
||||
}
|
||||
},
|
||||
"hostname": {
|
||||
"label": "Hostname"
|
||||
},
|
||||
"https": {
|
||||
"label": "HTTPS & Zertifikate",
|
||||
"submenu": {
|
||||
"cert": {
|
||||
"dialogTitle": "HTTPS Zertifikat Datei auswählen",
|
||||
"label": "Zertifikate Datei (.crt/.pem)"
|
||||
},
|
||||
"enable-https": {
|
||||
"label": "HTTPS aktivieren"
|
||||
},
|
||||
"key": {
|
||||
"dialogTitle": "HTTPS privaten Schlüssel Datei auswählen",
|
||||
"label": "Privater Schlüssel Datei (.key/.pem)"
|
||||
}
|
||||
}
|
||||
},
|
||||
"port": {
|
||||
"label": "Port"
|
||||
}
|
||||
},
|
||||
"name": "API-Server [Beta]",
|
||||
"prompt": {
|
||||
"hostname": {
|
||||
"label": "Hostname des API-Servers vergeben (z. B. 0.0.0.0):",
|
||||
"title": "Hostname"
|
||||
},
|
||||
"port": {
|
||||
"label": "Port des API-Server:",
|
||||
"title": "Port"
|
||||
}
|
||||
}
|
||||
},
|
||||
"audio-compressor": {
|
||||
"description": "Kompressor auf Audio anwenden (senkt die Lautstärke der lautesten Teile des Signals und hebt die Lautstärke der leisesten Teile an)",
|
||||
"name": "Audio-Komprimierer"
|
||||
},
|
||||
"auth-proxy-adapter": {
|
||||
"description": "Unterstützung für Proxy-Authentifizierungsdienste",
|
||||
"menu": {
|
||||
"disable": "Proxy-Adapter deaktivieren",
|
||||
"enable": "Proxy-Adapter aktivieren",
|
||||
"hostname": {
|
||||
"label": "Hostname"
|
||||
},
|
||||
"port": {
|
||||
"label": "Port"
|
||||
}
|
||||
},
|
||||
"name": "Authentifizierungs-Proxyadapter",
|
||||
"prompt": {
|
||||
"hostname": {
|
||||
"label": "Hostnamen eingeben für lokalen Proxy-Server (Neustart erforderlich):",
|
||||
"title": "Proxy Hostname"
|
||||
},
|
||||
"port": {
|
||||
"label": "Geben Sie den Port für den lokalen Proxyserver ein (Neustart erforderlich):",
|
||||
"title": "Proxy Port"
|
||||
}
|
||||
}
|
||||
},
|
||||
"blur-nav-bar": {
|
||||
"description": "Macht Navigationsleiste durchsichtig und unscharf",
|
||||
"name": "Verschwommene Navigationsleiste"
|
||||
},
|
||||
"bypass-age-restrictions": {
|
||||
"description": "Youtubes Altersbestätigung umgehen",
|
||||
"description": "Music Player Altersbestätigung umgehen",
|
||||
"name": "Altersbeschränkungen umgehen"
|
||||
},
|
||||
"captions-selector": {
|
||||
"description": "Untertitelwähler für YouTube Music-Audio-Lieder",
|
||||
"description": "Untertitelwähler für {{applicationName}}-Audio-Lieder",
|
||||
"menu": {
|
||||
"autoload": "Wähle automatisch den zuletzt verwendeten Untertitel",
|
||||
"disable-captions": "Standardmäßig keine Untertitel"
|
||||
@ -307,6 +405,11 @@
|
||||
},
|
||||
"templates": {
|
||||
"title": "Untertitelwähler öffnen"
|
||||
},
|
||||
"toast": {
|
||||
"caption-changed": "Untertitel gewechselt zu {{language}}",
|
||||
"caption-disabled": "Untertitel deaktiviert",
|
||||
"no-captions": "Keine Untertitel für dieses Lied verfügbar"
|
||||
}
|
||||
},
|
||||
"compact-sidebar": {
|
||||
@ -335,6 +438,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"custom-output-device": {
|
||||
"description": "Einen maßgeschneiderten Ausgabemedienträger für Lieder einrichten",
|
||||
"menu": {
|
||||
"device-selector": "Gerät auswählen"
|
||||
},
|
||||
"name": "Benutzerdefiniertes Ausgabegerät",
|
||||
"prompt": {
|
||||
"device-selector": {
|
||||
"label": "Wähle das Ausgabegerät, welches benutzt werden soll",
|
||||
"title": "Wähle ein Ausgabegerät"
|
||||
}
|
||||
}
|
||||
},
|
||||
"disable-autoplay": {
|
||||
"description": "Startet Lied im pausierten Modus",
|
||||
"menu": {
|
||||
@ -357,8 +473,16 @@
|
||||
"disconnected": "Getrennt",
|
||||
"hide-duration-left": "Verbleibende Zeit verstecken",
|
||||
"hide-github-button": "Knopf mit Link zu GitHub ausblenden",
|
||||
"play-on-youtube-music": "Auf YouTube Music abspielen",
|
||||
"set-inactivity-timeout": "Inaktivitätstimeout setzen"
|
||||
"play-on-application": "Auf {{applicationName}} abspielen",
|
||||
"set-inactivity-timeout": "Inaktivitätstimeout setzen",
|
||||
"set-status-display-type": {
|
||||
"label": "Status Text",
|
||||
"submenu": {
|
||||
"application": "Hört {{applicationName}}",
|
||||
"artist": "Hört {artist} zu",
|
||||
"title": "Du hörst {song title}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Discords Aktivitätsstatus",
|
||||
"prompt": {
|
||||
@ -441,6 +565,18 @@
|
||||
"button": "Herunterladen"
|
||||
}
|
||||
},
|
||||
"equalizer": {
|
||||
"description": "Fügt einen Equalizer zum Player hinzu",
|
||||
"menu": {
|
||||
"presets": {
|
||||
"label": "Vorgaben",
|
||||
"list": {
|
||||
"bass-booster": "Bass-Verstärker"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Equalizer"
|
||||
},
|
||||
"exponential-volume": {
|
||||
"description": "Macht den Lautstärkeregler exponentiell, damit es einfacher ist leise Lautstärken zu wählen.",
|
||||
"name": "Exponentielle Lautstärke"
|
||||
@ -461,7 +597,7 @@
|
||||
"menu": {
|
||||
"romanized-lyrics": "Romanisierte Songtexte"
|
||||
},
|
||||
"name": "Liedtexte von Genius",
|
||||
"name": "Songtexte von Genius",
|
||||
"renderer": {
|
||||
"fetched-lyrics": "Liedtexte für Genius abgerufen"
|
||||
}
|
||||
@ -487,7 +623,7 @@
|
||||
"permission": {
|
||||
"all": "Gästen erlauben, Wiederhabeliste und Player zu bedienen",
|
||||
"host-only": "Nur der Host kann die Playlist und den Player kontrollieren",
|
||||
"playlist": "Gäste das Kontrollieren der Playlist erlauben"
|
||||
"playlist": "Gästen das Kontrollieren der Playlist erlauben"
|
||||
},
|
||||
"set-permission": "Kontrollberechtigung ändern",
|
||||
"status": {
|
||||
@ -514,7 +650,15 @@
|
||||
},
|
||||
"navigation": {
|
||||
"description": "Vorwärts/Zurück Navigationspfeile direkt in die Oberfläche integriert - wie in deinem geliebten Browser",
|
||||
"name": "Navigation"
|
||||
"name": "Navigation",
|
||||
"templates": {
|
||||
"back": {
|
||||
"title": "Zur vorherigen Seite gehen"
|
||||
},
|
||||
"forward": {
|
||||
"title": "Zur nächsten Seite gehen"
|
||||
}
|
||||
}
|
||||
},
|
||||
"no-google-login": {
|
||||
"description": "Googles Anmelden-Knöpfe und -Links von der Oberfläche entfernen",
|
||||
@ -538,6 +682,10 @@
|
||||
},
|
||||
"name": "Benachrichtigungen"
|
||||
},
|
||||
"performance-improvement": {
|
||||
"description": "Leistung durch Aktivieren experimenteller Skripte verbessern",
|
||||
"name": "Leistungs Verbesserung [Beta]"
|
||||
},
|
||||
"picture-in-picture": {
|
||||
"description": "Erlaubt die App in den Bild-im-Bild-Modus zu wechseln",
|
||||
"menu": {
|
||||
@ -602,7 +750,12 @@
|
||||
}
|
||||
},
|
||||
"description": "Erlaubt die Videoqualität über einen Knopf auf dem Video",
|
||||
"name": "Videoqualitätsänderer"
|
||||
"name": "Videoqualitätsänderer",
|
||||
"renderer": {
|
||||
"quality-settings-button": {
|
||||
"label": "Videoqualität ändern"
|
||||
}
|
||||
}
|
||||
},
|
||||
"scrobbler": {
|
||||
"description": "Scrobbling-Unterstützung aktivieren (z.B. für last.fm, Listenbrainz)",
|
||||
@ -621,6 +774,8 @@
|
||||
"listenbrainz": {
|
||||
"token": "ListenBrainz-Benutzer-Token eintragen"
|
||||
},
|
||||
"scrobble-alternative-artist": "Benutze Alternative Künstler",
|
||||
"scrobble-alternative-title": "Nutze alternative Titel",
|
||||
"scrobble-other-media": "Andere Medien scrobbeln"
|
||||
},
|
||||
"name": "Scrobbler",
|
||||
@ -671,8 +826,8 @@
|
||||
"synced-lyrics": {
|
||||
"description": "Bietet synchronisierte Liedtexte zu Songs, verwendet Anbieter wie LRClib.",
|
||||
"errors": {
|
||||
"fetch": "⚠️ - Beim Abrufen des Liedtexts ist ein Fehler aufgetreten. Bitte versuchen Sie es später nochmal.",
|
||||
"not-found": "⚠️ - Kein Text für diesen Song gefunden."
|
||||
"fetch": "⚠️ - \tBeim Abrufen des Liedtexts ist ein Fehler aufgetreten. \n\tBitte versuchen Sie es später nochmal.",
|
||||
"not-found": "⚠️ Kein Text für diesen Song gefunden."
|
||||
},
|
||||
"menu": {
|
||||
"default-text-string": {
|
||||
@ -682,12 +837,17 @@
|
||||
"line-effect": {
|
||||
"label": "Zeileneffekt",
|
||||
"submenu": {
|
||||
"fancy": {
|
||||
"label": "schick",
|
||||
"tooltip": "Verwende große, app-ähnliche Effekte in der aktuellen Zeile"
|
||||
},
|
||||
"focus": {
|
||||
"label": "Fokussieren",
|
||||
"tooltip": "Nur aktive Zeile weiß darstellen"
|
||||
},
|
||||
"offset": {
|
||||
"label": "Versatz"
|
||||
"label": "Versatz",
|
||||
"tooltip": "Verschiebe die aktuelle Zeile nach rechts"
|
||||
},
|
||||
"scale": {
|
||||
"label": "Skalieren",
|
||||
@ -700,6 +860,22 @@
|
||||
"label": "Den Songtext perfekt synchronisieren",
|
||||
"tooltip": "Auf die Millisekunde genau berechnen, wann die nächste Zeile angezeigt werden soll (Kann Einfluss auf die Leistung haben)"
|
||||
},
|
||||
"preferred-provider": {
|
||||
"label": "bevorzugter Anbieter",
|
||||
"none": {
|
||||
"label": "Nichts",
|
||||
"tooltip": "Kein bevorzugter Anbieter"
|
||||
},
|
||||
"tooltip": "Standardanbieter auswählen"
|
||||
},
|
||||
"romanization": {
|
||||
"label": "Lateinische Umschrift anzeigen",
|
||||
"tooltip": "Wenn der Liedtext in einer anderen Schrift ist, zeige nach Möglichkeit eine Version in lateinischer Schrift an."
|
||||
},
|
||||
"show-lyrics-even-if-inexact": {
|
||||
"label": "Songtext anzeigen, auch wenn er ungenau ist",
|
||||
"tooltip": "Die Erweiterung sucht mit anderen Suchparameter nochmals, wenn der Song nicht gefunden wurde.\nEs kann sein, dass das Ergebnis von der zweiten Anfrage nicht genau ist."
|
||||
},
|
||||
"show-time-codes": {
|
||||
"label": "Zeitkodierungen anzeigen",
|
||||
"tooltip": "Zeitkodierungen neben Songtext anzeigen"
|
||||
@ -707,12 +883,12 @@
|
||||
},
|
||||
"name": "Synchronisierte Texte",
|
||||
"refetch-btn": {
|
||||
"fetching": "Hole Songtext...",
|
||||
"normal": "Songtext neu holen"
|
||||
"fetching": "Laden...",
|
||||
"normal": "Songtext neu laden"
|
||||
},
|
||||
"warnings": {
|
||||
"duration-mismatch": "⚠️ - Es kann sein, dass die Synchronization nicht stimmt, da die Songdauer nicht übereinstimmt.",
|
||||
"inexact": "⚠️ - Es ist Möglich, dass der Songtext für diesen Song nicht übereinstimmt.",
|
||||
"inexact": "⚠️ - Es ist möglich, dass der Songtext für diesen Song nicht übereinstimmt.",
|
||||
"instrumental": "⚠️ - Das ist ein instrumentales Lied"
|
||||
}
|
||||
},
|
||||
@ -724,10 +900,35 @@
|
||||
"description": "Fügt ein TouchBar-Widget für macOS-Benutzer hinzu",
|
||||
"name": "TouchBar"
|
||||
},
|
||||
"transparent-player": {
|
||||
"description": "Macht das Player-Fenster transparent",
|
||||
"menu": {
|
||||
"opacity": {
|
||||
"label": "Hintergrund-Sichtbarkeit",
|
||||
"submenu": {
|
||||
"percent": "{{opacity}}%"
|
||||
}
|
||||
},
|
||||
"type": {
|
||||
"label": "Typ",
|
||||
"submenu": {
|
||||
"acrylic": "Acryl",
|
||||
"mica": "Mica",
|
||||
"none": "Nichts",
|
||||
"tabbed": "Mit Registerkarten"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Transparenter Player"
|
||||
},
|
||||
"tuna-obs": {
|
||||
"description": "Integration mit dem OBS-Plugin Tuna",
|
||||
"name": "Tuna OBS"
|
||||
},
|
||||
"unobtrusive-player": {
|
||||
"description": "Verhindert das Aufpoppen des Spielers während ein Song gespielt wird",
|
||||
"name": "Unauffälliger Player"
|
||||
},
|
||||
"video-toggle": {
|
||||
"description": "Fügt einen Knopf hinzu, um zwischen Video-/Liedmodus zu wechseln. kann auch genutzt werden, um den ganzen Videoabschnitt zu entfernen",
|
||||
"menu": {
|
||||
@ -751,7 +952,8 @@
|
||||
},
|
||||
"name": "Videoumschalter",
|
||||
"templates": {
|
||||
"button": "Lied"
|
||||
"button-song": "Lied",
|
||||
"button-video": "Video"
|
||||
}
|
||||
},
|
||||
"visualizer": {
|
||||
|
||||
@ -8,8 +8,8 @@
|
||||
"load-all": "Φόρτωση όλων των πρόσθετων",
|
||||
"load-failed": "Απέτυχε η φόρτωση του πρόσθετου \"{{pluginName}}\"",
|
||||
"loaded": "Το πρόσθετο \"{{pluginName}}\" φορτώθηκε",
|
||||
"unload-failed": "Απέτυχε η απεγκατάσταση του πρόσθετου \"{{pluginName}}\"",
|
||||
"unloaded": "Το πρόσθετο \"{{pluginName}}\" απεγκαταστάθηκε"
|
||||
"unload-failed": "Απέτυχε η κατάργηση φόρτωσης του πρόσθετου \"{{pluginName}}\"",
|
||||
"unloaded": "Η φόρτωση του πρόσθετου \"{{pluginName}}\" καταργήθηκε"
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -21,7 +21,7 @@
|
||||
"main": {
|
||||
"console": {
|
||||
"did-finish-load": {
|
||||
"dev-tools": "Η φόρτωση ολοκληρώθηκε. Τα DevTools άνοιξαν"
|
||||
"dev-tools": "Ολοκληρώθηκε η φόρτωση. Τα DevTools άνοιξαν"
|
||||
},
|
||||
"i18n": {
|
||||
"loaded": "Το i18n φορτώθηκε"
|
||||
@ -30,10 +30,10 @@
|
||||
"receive-command": "Λήφθηκε εντολή μέσω πρωτοκόλλου: \"{{command}}\""
|
||||
},
|
||||
"theme": {
|
||||
"css-file-not-found": "Το αρχείο CSS \"{{cssFile}}\" δεν υπάρχει, αγνοείται"
|
||||
"css-file-not-found": "Το αρχείο CSS \"{{cssFile}}\" δεν υπάρχει, αγνόηση"
|
||||
},
|
||||
"unresponsive": {
|
||||
"details": "Σφάλμα ανταπόκρισης!\n{{error}}"
|
||||
"details": "Σφάλμα απόκρισης!\n{{error}}"
|
||||
},
|
||||
"when-ready": {
|
||||
"clearing-cache-after-20s": "Εκκαθάριση μνήμης cache εφαρμογής"
|
||||
@ -59,13 +59,13 @@
|
||||
},
|
||||
"unresponsive": {
|
||||
"buttons": {
|
||||
"quit": "Έξοδος",
|
||||
"quit": "Τερματισμός",
|
||||
"relaunch": "Επανεκκίνηση",
|
||||
"wait": "Περιμένετε"
|
||||
"wait": "Αναμονή"
|
||||
},
|
||||
"detail": "Λυπούμαστε για την ταλαιπωρία! Παρακαλούμε επιλέξτε τι να κάνετε:",
|
||||
"message": "Η εφαρμογή δεν ανταποκρίνεται",
|
||||
"title": "Το παράθυρο δεν ανταποκρίνεται"
|
||||
"detail": "Λυπούμαστε για την ταλαιπωρία! Παρακαλώ επιλέξτε τι να κάνετε:",
|
||||
"message": "Η εφαρμογή δεν αποκρίνεται",
|
||||
"title": "Το παράθυρο δεν αποκρίνεται"
|
||||
},
|
||||
"update-available": {
|
||||
"buttons": {
|
||||
@ -73,19 +73,19 @@
|
||||
"download": "Λήψη",
|
||||
"ok": "OK"
|
||||
},
|
||||
"detail": "Μια νέα έκδοση είναι διαθέσιμη και μπορεί να ληφθεί από τον σύνδεσμο {{downloadLink}}",
|
||||
"detail": "Μια νέα έκδοση είναι διαθέσιμη και μπορεί να ληφθεί από το {{downloadLink}}",
|
||||
"message": "Μια νέα έκδοση είναι διαθέσιμη",
|
||||
"title": "Υπάρχει διαθέσιμη ενημέρωση"
|
||||
"title": "Διατίθεται ενημέρωση"
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"about": "Σχετικά",
|
||||
"about": "Πληροφορίες",
|
||||
"navigation": {
|
||||
"label": "Πλοήγηση",
|
||||
"submenu": {
|
||||
"copy-current-url": "Αντιγραφή τρέχουσας διεύθυνσης URL",
|
||||
"go-back": "Πήγαινε πίσω",
|
||||
"go-forward": "Πήγαινε μπροστά",
|
||||
"go-back": "Πίσω",
|
||||
"go-forward": "Εμπρός",
|
||||
"quit": "Έξοδος",
|
||||
"restart": "Επανεκκίνηση εφαρμογής"
|
||||
}
|
||||
@ -94,17 +94,17 @@
|
||||
"label": "Επιλογές",
|
||||
"submenu": {
|
||||
"advanced-options": {
|
||||
"label": "Προηγμένες επιλογές",
|
||||
"label": "Επιλογές για προχωρημένους",
|
||||
"submenu": {
|
||||
"auto-reset-app-cache": "Επαναφορά της cache της εφαρμογής κατά την εκκίνηση της εφαρμογής",
|
||||
"auto-reset-app-cache": "Επαναφορά μνήμης cache εφαρμογής όταν η εφαρμογή ξεκινά",
|
||||
"disable-hardware-acceleration": "Απενεργοποίηση επιτάχυνσης υλικού",
|
||||
"edit-config-json": "Επεξεργασία του config.json",
|
||||
"override-user-agent": "Αντικατάσταση του User-Agent",
|
||||
"restart-on-config-changes": "Επανεκκίνηση κατά τις αλλαγές στο config",
|
||||
"restart-on-config-changes": "Επανεκκίνηση σε αλλαγές του config",
|
||||
"set-proxy": {
|
||||
"label": "Ορισμός διακομιστή μεσολάβησης (proxy)",
|
||||
"label": "Ορισμός μεσολάβησης",
|
||||
"prompt": {
|
||||
"label": "Εισαγωγή διεύθυνσης διακομιστή μεσολάβησης (proxy): (αφήστε κενό για απενεργοποίηση)",
|
||||
"label": "Εισαγωγή διεύθυνσης μεσολάβησης: (αφήστε κενό για απενεργοποίηση)",
|
||||
"placeholder": "Παράδειγμα: SOCKS5://127.0.0.1:9999",
|
||||
"title": "Ορισμός μεσολάβησης"
|
||||
}
|
||||
@ -112,14 +112,14 @@
|
||||
"toggle-dev-tools": "Εναλλαγή DevTools"
|
||||
}
|
||||
},
|
||||
"always-on-top": "Πάντα επάνω",
|
||||
"auto-update": "Αυτόματη Ενημέρωση",
|
||||
"always-on-top": "Πάντα σε πρώτο πλάνο",
|
||||
"auto-update": "Αυτόματη ενημέρωση",
|
||||
"hide-menu": {
|
||||
"dialog": {
|
||||
"message": "Το μενού θα κρυφτεί στην επόμενη εκκίνηση, χρησιμοποιήστε [Alt] για να το εμφανίσετε (ή το πλήκτρο backtick [`] αν χρησιμοποιείτε το μενού εφαρμογής)",
|
||||
"title": "Η Δυνατότητα Απόκρυψης του Μενού ενεργοποιήθηκε"
|
||||
"title": "Η απόκρυψη μενού ενεργοποιήθηκε"
|
||||
},
|
||||
"label": "Απόκρυψη Μενού"
|
||||
"label": "Απόκρυψη μενού"
|
||||
},
|
||||
"language": {
|
||||
"dialog": {
|
||||
@ -131,15 +131,15 @@
|
||||
"to-help-translate": "Θέλετε να βοηθήσετε στη μετάφραση; Κάντε κλικ εδώ"
|
||||
}
|
||||
},
|
||||
"resume-on-start": "Συνέχιση του τελευταίου τραγουδιού όταν η εφαρμογή ξεκινά",
|
||||
"single-instance-lock": "Κλείδωμα Μοναδικής Εκδοχής",
|
||||
"start-at-login": "Έναρξη κατά την σύνδεση",
|
||||
"resume-on-start": "Συνέχιση τελευταίου τραγουδιού όταν η εφαρμογή ξεκινά",
|
||||
"single-instance-lock": "Κλείδωμα μοναδικής εκδοχής",
|
||||
"start-at-login": "Έναρξη κατά τη σύνδεση",
|
||||
"starting-page": {
|
||||
"label": "Σελίδα έναρξης",
|
||||
"label": "Αρχική σελίδα",
|
||||
"unset": "Κατάργηση ορισμού"
|
||||
},
|
||||
"tray": {
|
||||
"label": "Δίσκος",
|
||||
"label": "Περιοχή συστήματος",
|
||||
"submenu": {
|
||||
"disabled": "Απενεργοποιημένο",
|
||||
"enabled-and-hide-app": "Ενεργοποιημένο και απόκρυψη της εφαρμογής",
|
||||
@ -148,13 +148,20 @@
|
||||
}
|
||||
},
|
||||
"visual-tweaks": {
|
||||
"label": "Τροποποιήσεις Εμφάνισης",
|
||||
"label": "Οπτικές προσαρμογές",
|
||||
"submenu": {
|
||||
"custom-window-title": {
|
||||
"label": "Προσαρμοσμένος τίτλος παραθύρου",
|
||||
"prompt": {
|
||||
"label": "Εισαγωγή προσαρμοσμένου τίτλου παραθύρου: (κενό για απενεργοποίηση)",
|
||||
"placeholder": "Παράδειγμα: {{applicationName}}"
|
||||
}
|
||||
},
|
||||
"like-buttons": {
|
||||
"default": "Default",
|
||||
"force-show": "Αναγκαστική Εμφάνιση",
|
||||
"default": "Προεπιλογή",
|
||||
"force-show": "Επιβολή εμφάνισης",
|
||||
"hide": "Απόκρυψη",
|
||||
"label": "Μου αρέσει"
|
||||
"label": "Κουμπιά Μου αρέσει"
|
||||
},
|
||||
"remove-upgrade-button": "Αφαίρεση κουμπιού αναβάθμισης",
|
||||
"theme": {
|
||||
@ -169,7 +176,7 @@
|
||||
"label": "Θέμα",
|
||||
"submenu": {
|
||||
"import-css-file": "Εισαγωγή προσαρμοσμένου αρχείου CSS",
|
||||
"no-theme": "No theme"
|
||||
"no-theme": "Χωρίς θέμα"
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -184,10 +191,10 @@
|
||||
"view": {
|
||||
"label": "Προβολή",
|
||||
"submenu": {
|
||||
"force-reload": "Αναγκαστική Eπαναφόρτωση",
|
||||
"force-reload": "Επιβολή επαναφόρτωσης",
|
||||
"reload": "Επαναφόρτωση",
|
||||
"reset-zoom": "Πραγματικό μέγεθος",
|
||||
"toggle-fullscreen": "Εναλλαγή Πλήρους Οθόνης",
|
||||
"toggle-fullscreen": "Εναλλαγή πλήρους οθόνης",
|
||||
"zoom-in": "Μεγέθυνση",
|
||||
"zoom-out": "Σμίκρυνση"
|
||||
}
|
||||
@ -201,50 +208,50 @@
|
||||
"restart": "Επανεκκίνηση εφαρμογής",
|
||||
"show": "Εμφάνιση παραθύρου",
|
||||
"tooltip": {
|
||||
"default": "YouTube Music",
|
||||
"with-song-info": "YouTube Music: {{artist}} - {{title}}"
|
||||
"default": "{{applicationName}}",
|
||||
"with-song-info": "{{applicationName}}: {{artist}} - {{title}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"ad-speedup": {
|
||||
"description": "Εαν παίξει διαφήμιση κάνει σίγαση του ήχου και θέτει την ταχύτητα αναπαραγωγής στο 16x",
|
||||
"name": "Γρήγορη Προώθηση Διαφημίσεων"
|
||||
"description": "Εάν ξεκινήσει διαφήμιση, ο ήχος απενεργοποιείται και η ταχύτητα αναπαραγωγής ορίζεται σε 16x",
|
||||
"name": "Επιτάχυνση διαφημίσεων"
|
||||
},
|
||||
"adblocker": {
|
||||
"description": "Αποκλεισμός όλων των διαφημίσεων και tracker",
|
||||
"description": "Αποκλεισμός όλων των διαφημίσεων και της παρακολούθησης από προεπιλογή",
|
||||
"menu": {
|
||||
"blocker": "Μέθοδος αποκλεισμού"
|
||||
"blocker": "Πρόγραμμα αποκλεισμού"
|
||||
},
|
||||
"name": "Μπλοκάρισμα Διαφημίσεων"
|
||||
"name": "Πρόγραμμα αποκλεισμού διαφημίσεων"
|
||||
},
|
||||
"album-actions": {
|
||||
"description": "Προσθέτει κουμπιά Like/Unlike και Dislike/Undislike που δρουν συνολικά σε όλα τα κομμάτια μιας playlist ή ενός άλμπουμ",
|
||||
"name": "Ενέργειες σε Άλμπουμ"
|
||||
},
|
||||
"album-color-theme": {
|
||||
"description": "Εφαρμόζει ένα δυναμικό θέμα και εφέ με βάση τη χρωματική παλέτα του άλμπουμ",
|
||||
"description": "Εφαρμόζει ένα δυναμικό θέμα και οπτικά εφέ βάσει της παλέτας χρωμάτων του άλμπουμ",
|
||||
"menu": {
|
||||
"color-mix-ratio": {
|
||||
"label": "Αναλογία μίξης χρώματος",
|
||||
"label": "Αναλογία ανάμειξης χρωμάτων",
|
||||
"submenu": {
|
||||
"percent": "{{ratio}}%"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Album Color Theme"
|
||||
"name": "Θέμα χρωμάτων άλμπουμ"
|
||||
},
|
||||
"ambient-mode": {
|
||||
"description": "Εφαρμόζει ένα εφέ φωτισμού ρίχνοντας απαλά χρώματα από το βίντεο, στο φόντο της οθόνης σας.",
|
||||
"description": "Εφαρμόζει ένα εφέ φωτισμού ρίχνοντας απαλά χρώματα από το βίντεο στο φόντο της οθόνης σας",
|
||||
"menu": {
|
||||
"blur-amount": {
|
||||
"label": "Ένταση θαμπώματος",
|
||||
"label": "Ποσότητα θολώματος",
|
||||
"submenu": {
|
||||
"pixels": "{{blurAmount}} pixels"
|
||||
}
|
||||
},
|
||||
"buffer": {
|
||||
"label": "Buffer",
|
||||
"label": "Ενδιάμεση μνήμη",
|
||||
"submenu": {
|
||||
"buffer": "{{buffer}}"
|
||||
}
|
||||
@ -268,46 +275,149 @@
|
||||
}
|
||||
},
|
||||
"smoothness-transition": {
|
||||
"label": "Ομαλή μετάβαση",
|
||||
"submenu": {
|
||||
"during": "Σε {{interpolationTime}} δευτερόλεπτα"
|
||||
"during": "Για {{interpolationTime}} δευτερόλεπτα"
|
||||
}
|
||||
},
|
||||
"use-fullscreen": {
|
||||
"label": "Χρήση πλήρους οθόνης"
|
||||
"label": "Σε πλήρη οθόνη"
|
||||
}
|
||||
},
|
||||
"name": "Λειτουργία περιβάλλοντος"
|
||||
},
|
||||
"amuse": {
|
||||
"description": "Προσθέτει υποστήριξη {{applicationName}} στο widget Amuse now playing από την 6K Labs",
|
||||
"name": "Amuse",
|
||||
"response": {
|
||||
"query": "Ο διακομιστής Amuse API εκτελείται. GET /query για να λάβετε πληροφορίες για το τραγούδι."
|
||||
}
|
||||
},
|
||||
"api-server": {
|
||||
"description": "Προσθέτει έναν διακομιστή API για τον έλεγχο του παίκτη",
|
||||
"dialog": {
|
||||
"request": {
|
||||
"buttons": {
|
||||
"allow": "Αποδοχή",
|
||||
"deny": "Άρνηση"
|
||||
},
|
||||
"message": "Επιτρέψτε {{ID}} ({{origin}}) να έχει πρόσβαση στο API;",
|
||||
"title": "Αίτημα εξουσιοδότησης API"
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"auth-strategy": {
|
||||
"label": "Στρατηγική εξουσιοδότησης",
|
||||
"submenu": {
|
||||
"auth-at-first": {
|
||||
"label": "Εξουσιοδότηση στο πρώτο αίτημα"
|
||||
},
|
||||
"none": {
|
||||
"label": "Χωρίς εξουσιοδότηση"
|
||||
}
|
||||
}
|
||||
},
|
||||
"hostname": {
|
||||
"label": "Όνομα κεντρικού υπολογιστή"
|
||||
},
|
||||
"port": {
|
||||
"label": "Θύρα"
|
||||
}
|
||||
},
|
||||
"name": "Διακομιστής API [Beta]",
|
||||
"prompt": {
|
||||
"hostname": {
|
||||
"label": "Εισάγετε το όνομα κεντρικού υπολογιστή (όπως 0.0.0.0.0) για τον διακομιστή API:",
|
||||
"title": "Όνομα κεντρικού υπολογιστή"
|
||||
},
|
||||
"port": {
|
||||
"label": "Εισάγετε τη θύρα για το διακομιστή API:",
|
||||
"title": "Θύρα"
|
||||
}
|
||||
}
|
||||
},
|
||||
"audio-compressor": {
|
||||
"description": "Συμπίεση ήχου (μειώνει την ένταση των πιο δυνατών τμημάτων του κύματος και αυξάνει την ένταση των πιο μαλακών τμημάτων)"
|
||||
"description": "Συμπίεση ήχου (μειώνει την ένταση των πιο δυνατών τμημάτων του κύματος και αυξάνει την ένταση των πιο μαλακών τμημάτων)",
|
||||
"name": "Συμπιεστής ήχου"
|
||||
},
|
||||
"blur-nav-bar": {
|
||||
"description": "Κάνει τη γραμμή πλοήγησης διαφανή και θολή"
|
||||
},
|
||||
"bypass-age-restrictions": {
|
||||
"description": "Παράκαμψη της επαλήθευσης ηλικίας του YouTube"
|
||||
},
|
||||
"captions-selector": {
|
||||
"auth-proxy-adapter": {
|
||||
"description": "Υποστήριξη για τη χρήση υπηρεσιών μεσολάβησης αυθεντικοποίησης",
|
||||
"menu": {
|
||||
"disable": "Απενεργοποίηση προσαρμογέα μεσολάβησης",
|
||||
"enable": "Ενεργοποίηση προσαρμογέα μεσολάβησης",
|
||||
"hostname": {
|
||||
"label": "Όνομα οικοδεσπότη"
|
||||
},
|
||||
"port": {
|
||||
"label": "Θύρα"
|
||||
}
|
||||
},
|
||||
"name": "Προσαρμογέας μεσολάβησης Auth",
|
||||
"prompt": {
|
||||
"selector": {
|
||||
"none": "None"
|
||||
"hostname": {
|
||||
"label": "Εισάγετε το όνομα κεντρικού υπολογιστή για τον τοπικό διακομιστή μεσολάβησης (απαιτείται επανεκκίνηση):",
|
||||
"title": "Όνομα κεντρικού υπολογιστή μεσολάβησης"
|
||||
},
|
||||
"port": {
|
||||
"label": "Εισάγετε τη θύρα για τον τοπικό διακομιστή μεσολάβησης (απαιτεί επανεκκίνηση):",
|
||||
"title": "Θύρα διακομιστή μεσολάβησης"
|
||||
}
|
||||
}
|
||||
},
|
||||
"blur-nav-bar": {
|
||||
"description": "θέτει τη γραμμή πλοήγησης διαφανή και θολή",
|
||||
"name": "Θόλωμα γραμμής πλοήγησης"
|
||||
},
|
||||
"bypass-age-restrictions": {
|
||||
"description": "Παράκαμψη επαλήθευσης ηλικίας στο Music Player",
|
||||
"name": "Παράκαμψη ηλικιακών περιορισμών"
|
||||
},
|
||||
"captions-selector": {
|
||||
"description": "Επιλογέας λεζάντας για μουσικά κομμάτια ήχου του {{applicationName}}",
|
||||
"menu": {
|
||||
"autoload": "Αυτόματη επιλογή της τελευταίας χρησιμοποιούμενης λεζάντας",
|
||||
"disable-captions": "Χωρίς λεζάντες από προεπιλογή"
|
||||
},
|
||||
"name": "Επιλογέας λεζάντες",
|
||||
"prompt": {
|
||||
"selector": {
|
||||
"label": "Τρέχουσα γλώσσα λεζάντας: {{language}}",
|
||||
"none": "None",
|
||||
"title": "Επιλογή γλώσσας λεζάντας"
|
||||
}
|
||||
},
|
||||
"templates": {
|
||||
"title": "Ανοίξτε τον επιλογέα λεζάντας"
|
||||
},
|
||||
"toast": {
|
||||
"caption-changed": "Λεζάντα άλλαξε σε {{language}}",
|
||||
"caption-disabled": "Λεζάντες απενεργοποιήθηκαν",
|
||||
"no-captions": "Λεζάντες μη διαθέσιμες για αυτό το τραγούδι"
|
||||
}
|
||||
},
|
||||
"compact-sidebar": {
|
||||
"description": "Να είναι πάντα συμπαγές το sidebar"
|
||||
"description": "Να είναι πάντα συμπαγές το sidebar",
|
||||
"name": "Συμπαγής πλευρική μπάρα"
|
||||
},
|
||||
"crossfade": {
|
||||
"description": "Crossfade μεταξύ τραγουδιών",
|
||||
"menu": {
|
||||
"advanced": "Για προχωρημένους"
|
||||
},
|
||||
"name": "Crossfade [Beta]",
|
||||
"prompt": {
|
||||
"options": {
|
||||
"multi-input": {
|
||||
"fade-in-duration": "Διάρκεια εξασθένισης (ms)",
|
||||
"fade-out-duration": "Διάρκεια σβήσιμου (ms)",
|
||||
"fade-scaling": {
|
||||
"label": "Κλιμάκωση εξασθένισης",
|
||||
"linear": "Γραμμική",
|
||||
"logarithmic": "Λογαριθμική"
|
||||
}
|
||||
}
|
||||
},
|
||||
"seconds-before-end": "Crossfade N δευτερόλεπτα πριν το τέλος"
|
||||
},
|
||||
"title": "Επιλογές Crossfade"
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -319,13 +429,29 @@
|
||||
"name": "Απενεργοποίηση αυτόματης αναπαραγωγής"
|
||||
},
|
||||
"discord": {
|
||||
"backend": {
|
||||
"already-connected": "Προσπάθεια σύνδεσης με ενεργή σύνδεση",
|
||||
"connected": "Συνδεδεμένος με το Discord",
|
||||
"disconnected": "Αποσυνδεδεμένος από το Discord"
|
||||
},
|
||||
"description": "Δείξτε στους φίλους σας τι ακούτε με το Rich Presence",
|
||||
"menu": {
|
||||
"auto-reconnect": "Αυτόματη επανασύνδεση",
|
||||
"clear-activity": "Εκκαθάριση δραστηριότητας",
|
||||
"clear-activity-after-timeout": "Εκκαθάριση δραστηριότητας μετά από χρονικό όριο",
|
||||
"connected": "Συνδεδεμένο",
|
||||
"disconnected": "Αποσυνδεδεμένο",
|
||||
"hide-duration-left": "Απόκρυψη της διάρκειας που απομένει",
|
||||
"hide-github-button": "Απόκρυψη του συνδέσμου προς GitHub",
|
||||
"hide-github-button": "Απόκρυψη κουμπιού συνδέσμου GitHub",
|
||||
"play-on-application": "Αναπαραγωγή στο {{applicationName}}",
|
||||
"set-inactivity-timeout": "Ορισμός χρονικού ορίου αδράνειας"
|
||||
},
|
||||
"name": "Discord Πλούσια παρουσία",
|
||||
"prompt": {
|
||||
"set-inactivity-timeout": {
|
||||
"label": "Εισαγωγή χρονικού ορίου αδράνειας σε δευτερόλεπτα:",
|
||||
"title": "Ορισμός χρονικού ορίου αδράνειας"
|
||||
}
|
||||
}
|
||||
},
|
||||
"downloader": {
|
||||
@ -335,7 +461,8 @@
|
||||
"buttons": {
|
||||
"ok": "OK"
|
||||
},
|
||||
"title": "Error in download!"
|
||||
"message": "Ωχ! Λυπούμαστε, η λήψη απέτυχε…",
|
||||
"title": "Σφάλμα στη λήψη!"
|
||||
},
|
||||
"start-download-playlist": {
|
||||
"buttons": {
|
||||
@ -349,59 +476,180 @@
|
||||
"feedback": {
|
||||
"conversion-progress": "Μετατροπή: {{percent}}%",
|
||||
"converting": "Μετατροπή…",
|
||||
"done": "Τέλος: {{filePath}}",
|
||||
"download-info": "Λήψη του {{artist}} - {{title}} [{{videoId}}",
|
||||
"download-progress": "Λήψη: {{percent}}%",
|
||||
"downloading": "Λήψη…",
|
||||
"downloading-counter": "Λήψη {{current}}/{{total}}…",
|
||||
"downloading-playlist": "Λήψη της λίστας αναπαραγωγής \"{{playlistTitle}}\" - {{playlistSize}} τραγούδια ({{playlistId}})",
|
||||
"error-while-downloading": "Σφάλμα λήψης \"{{author}} - {{title}}\": {{error}}",
|
||||
"folder-already-exists": "Ο φάκελος {{playlistFolder}} υπάρχει ήδη",
|
||||
"getting-playlist-info": "Λήψη πληροφοριών λίστας αναπαραγωγής…",
|
||||
"loading": "Φόρτωση…",
|
||||
"playlist-has-only-one-song": "Η λίστα αναπαραγωγής έχει μόνο ένα στοιχείο, κατεβάζοντάς το απευθείας",
|
||||
"playlist-id-not-found": "Δεν βρέθηκε ID λίστας αναπαραγωγής",
|
||||
"playlist-is-empty": "Η λίστα αναπραγωγής είναι άδεια",
|
||||
"playlist-is-mix-or-private": "Σφάλμα λήψης πληροφοριών λίστας αναπαραγωγής: βεβαιωθείτε ότι δεν είναι ιδιωτική ή «Μικτή για εσάς» λίστα αναπαραγωγής\n\n{{error}}",
|
||||
"preparing-file": "Προετοιμασία αρχείου…",
|
||||
"saving": "Αποθήκευση…",
|
||||
"video-id-not-found": "Το βίντεο δεν βρέθηκε"
|
||||
"trying-to-get-playlist-id": "Προσπαθώ να πάρω το αναγνωριστικό της λίστας αναπαραγωγής: {{playlistId}}",
|
||||
"video-id-not-found": "Το βίντεο δεν βρέθηκε",
|
||||
"writing-id3": "Εγγραφή ετικετών ID3…"
|
||||
}
|
||||
},
|
||||
"description": "Λήψεις MP3 / ήχου πηγής απευθείας από τη διεπαφή",
|
||||
"menu": {
|
||||
"choose-download-folder": "Επιλογή φακέλου λήψης",
|
||||
"download-finish-settings": {
|
||||
"label": "Λήψη στο τέλος",
|
||||
"prompt": {
|
||||
"last-seconds": "Τελευταία x δευτερόλεπτα"
|
||||
"last-percent": "Μετά από x ποσοστό",
|
||||
"last-seconds": "Τελευταία x δευτερόλεπτα",
|
||||
"title": "Ρύθμιση του πότε θα γίνεται λήψη"
|
||||
},
|
||||
"submenu": {
|
||||
"advanced": "Για προχωρημένους",
|
||||
"enabled": "Ενεργοποιημένο",
|
||||
"mode": "Λειτουργία χρόνου",
|
||||
"percent": "Ποσοστό",
|
||||
"seconds": "Δευτερόλεπτα"
|
||||
}
|
||||
},
|
||||
"download-playlist": "Λήψη λίστας αναπαραγωγής",
|
||||
"presets": "Προεπιλογές",
|
||||
"skip-existing": "Παράλειψη υπάρχοντων αρχείων"
|
||||
},
|
||||
"name": "Κατεβαστής",
|
||||
"renderer": {
|
||||
"can-not-update-progress": "Δεν μπορεί να ενημερωθεί η πρόοδος"
|
||||
},
|
||||
"templates": {
|
||||
"button": "Λήψη"
|
||||
}
|
||||
},
|
||||
"equalizer": {
|
||||
"description": "Προσθέτει έναν ισοσταθμιστή στο πρόγραμμα αναπαραγωγής",
|
||||
"menu": {
|
||||
"presets": {
|
||||
"label": "Προεπιλογές",
|
||||
"list": {
|
||||
"bass-booster": "Ενίσχυση μπάσου"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Ισοσταθμιστής"
|
||||
},
|
||||
"exponential-volume": {
|
||||
"description": "Κάνει το ρυθμιστικό έντασης εκθετικό, ώστε να είναι ευκολότερη η επιλογή χαμηλότερων εντάσεων.",
|
||||
"name": "Εκθετικός όγκος"
|
||||
},
|
||||
"in-app-menu": {
|
||||
"description": "Δίνει στις γραμμές μενού μια φανταχτερή, σκοτεινή ή άλμπουμ-χρωματική εμφάνιση",
|
||||
"menu": {
|
||||
"hide-dom-window-controls": "Απόκρυψη στοιχείων ελέγχου παραθύρου DOM"
|
||||
},
|
||||
"name": "Μενού εντός της εφαρμογής"
|
||||
},
|
||||
"lumiastream": {
|
||||
"description": "Προσθέτει υποστήριξη Lumia Stream",
|
||||
"name": "Lumia Stream [Beta]"
|
||||
},
|
||||
"lyrics-genius": {
|
||||
"description": "Προσθέτει υποστήριξη στίχων για τα περισσότερα τραγούδια",
|
||||
"menu": {
|
||||
"romanized-lyrics": "Ρομαντικοποιημένοι στίχοι"
|
||||
},
|
||||
"name": "Στίχοι Genius",
|
||||
"renderer": {
|
||||
"fetched-lyrics": "Στίχοι για το Genius"
|
||||
}
|
||||
},
|
||||
"music-together": {
|
||||
"description": "Μοιραστείτε μια λίστα αναπαραγωγής με άλλους. Όταν ο οικοδεσπότης παίζει ένα τραγούδι, όλοι οι άλλοι θα ακούσουν το ίδιο τραγούδι",
|
||||
"dialog": {
|
||||
"enter-host": "Εισαγωγή ID κεντρικού υπολογιστή"
|
||||
},
|
||||
"internal": {
|
||||
"save": "Αποθήκευση",
|
||||
"track-source": "Πηγή διαδρομής",
|
||||
"unknown-user": "Άγνωστος χρήστης"
|
||||
},
|
||||
"menu": {
|
||||
"connected-users": "Συνδεδεμένοι χρήστες"
|
||||
"click-to-copy-id": "Αντιγραφή ID κεντρικού υπολογιστή",
|
||||
"close": "Κλείσιμο Music Together",
|
||||
"connected-users": "Συνδεδεμένοι χρήστες",
|
||||
"disconnect": "Αποσύνδεση Music Together",
|
||||
"empty-user": "Κανένας συνδεδεμένος χρήστης",
|
||||
"host": "Κεντρικός υπολογιστής Music Together",
|
||||
"join": "Γίνετε μέλος της Μουσικής Μαζί",
|
||||
"permission": {
|
||||
"all": "Επιτρέψτε στους επισκέπτες να ελέγχουν τη λίστα αναπαραγωγής και τον παίκτη",
|
||||
"host-only": "Μόνο ο οικοδεσπότης μπορεί να ελέγχει τη λίστα αναπαραγωγής και τον παίκτη",
|
||||
"playlist": "Επιτρέψτε στους επισκέπτες να ελέγχουν τη λίστα αναπαραγωγής"
|
||||
},
|
||||
"set-permission": "Άδεια ελέγχου αλλαγής",
|
||||
"status": {
|
||||
"disconnected": "Αποσυνδεδεμένο",
|
||||
"guest": "Συνδεδεμένος ως επισκέπτης",
|
||||
"host": "Συνδεδεμένος ως οικοδεσπότης"
|
||||
}
|
||||
},
|
||||
"name": "Music Together [Beta]",
|
||||
"toast": {
|
||||
"add-song-failed": "Απέτυχε η προσθήκη τραγουδιού",
|
||||
"remove-song-failed": "Απέτυχε η αφαίρεση τραγουδιού"
|
||||
"closed": "Το Music Together έκλεισε",
|
||||
"disconnected": "Το Music Together αποσυνδέθηκε",
|
||||
"host-failed": "Απέτυχε να φιλοξενήσει το Μουσική Μαζί",
|
||||
"id-copied": "Το ID κεντρικού υπολογιστή αντιγράφηκε στο πρόχειρο",
|
||||
"id-copy-failed": "Απέτυχε η αντιγραφή ID κεντρικού υπολογιστή στο πρόχειρο",
|
||||
"join-failed": "Απέτυχε να ενταχθεί στη Μουσική Μαζί",
|
||||
"joined": "Ενωμένη μουσική μαζί",
|
||||
"permission-changed": "Η άδεια «Μουσική Μαζί» άλλαξε σε «{{permission}}»",
|
||||
"remove-song-failed": "Απέτυχε η αφαίρεση τραγουδιού",
|
||||
"user-connected": "{{name}} εντάχθηκε στη Μουσική Μαζί",
|
||||
"user-disconnected": "{{name}} αριστερά Μουσική Μαζί"
|
||||
}
|
||||
},
|
||||
"navigation": {
|
||||
"name": "Πλοήγηση"
|
||||
"description": "Βέλη πλοήγησης Επόμενο/Πίσω ενσωματωμένα απευθείας στο περιβάλλον εργασίας, όπως στο αγαπημένο σας πρόγραμμα περιήγησης",
|
||||
"name": "Πλοήγηση",
|
||||
"templates": {
|
||||
"back": {
|
||||
"title": "Μετάβαση στην προηγούμενη σελίδα"
|
||||
},
|
||||
"forward": {
|
||||
"title": "Μετάβαση στην επόμενη σελίδα"
|
||||
}
|
||||
}
|
||||
},
|
||||
"no-google-login": {
|
||||
"description": "Αφαίρεση των κουμπιών και των συνδέσμων σύνδεσης Google από το περιβάλλον εργασίας",
|
||||
"name": "No Google Login"
|
||||
},
|
||||
"notifications": {
|
||||
"description": "Εμφάνιση ειδοποίησης όταν ξεκινάει η αναπαραγωγή ενός τραγουδιού (οι διαδραστικές ειδοποιήσεις είναι διαθέσιμες στα Windows)",
|
||||
"menu": {
|
||||
"interactive": "Διαδραστικές ειδοποιήσεις",
|
||||
"interactive-settings": {
|
||||
"label": "Διαδραστικές ρυθμίσεις",
|
||||
"submenu": {
|
||||
"hide-button-text": "Απόκρυψη κειμένου κουμπιού",
|
||||
"refresh-on-play-pause": "Ανανέωση σε Αναπαραγωγή/Παύση",
|
||||
"tray-controls": "Άνοιγμα/κλείσιμο με κλικ στο δίσκο"
|
||||
}
|
||||
},
|
||||
"priority": "Προτεραιότητα κοινοποίησης",
|
||||
"toast-style": "Στυλ τοστ",
|
||||
"unpause-notification": "Εμφάνιση ειδοποίησης κατά την κατάργηση της παύσης"
|
||||
},
|
||||
"name": "Ειδοποιήσεις"
|
||||
},
|
||||
"performance-improvement": {
|
||||
"description": "Βελτιώστε την απόδοση ενεργοποιώντας πειραματικές δέσμες ενεργειών",
|
||||
"name": "Βελτίωση της απόδοσης με την ενεργοποίηση επικίνδυνων σεναρίωνΒελτίωση της απόδοσης [Beta]"
|
||||
},
|
||||
"picture-in-picture": {
|
||||
"description": "Επιτρέπει την εναλλαγή της εφαρμογής σε λειτουργία εικόνας σε εικόνα",
|
||||
"menu": {
|
||||
"always-on-top": "Πάντα σε πρώτο πλάνο",
|
||||
"hotkey": {
|
||||
@ -409,26 +657,47 @@
|
||||
"prompt": {
|
||||
"keybind-options": {
|
||||
"hotkey": "Πλήκτρο πρόσβασης"
|
||||
}
|
||||
},
|
||||
"label": "Επιλέξτε ένα πλήκτρο συντόμευσης για να ενεργοποιήσετε την εικόνα στην εικόνα",
|
||||
"title": "Πλήκτρο Hotkey Εικόνα-σε-Εικόνα"
|
||||
}
|
||||
},
|
||||
"save-window-position": "Αποθήκευση θέσης παραθύρου",
|
||||
"save-window-size": "Αποθήκευση μεγέθους παραθύρου"
|
||||
"save-window-size": "Αποθήκευση μεγέθους παραθύρου",
|
||||
"use-native-pip": "Χρήση εγγενούς PiP του προγράμματος περιήγησης"
|
||||
},
|
||||
"name": "Εικόνα-στην-εικόνα",
|
||||
"templates": {
|
||||
"button": "Εικόνα-στην-εικόνα"
|
||||
}
|
||||
},
|
||||
"playback-speed": {
|
||||
"description": "Ακούστε γρήγορα, ακούστε αργά! Προσθέτει ένα ρυθμιστικό που ελέγχει την ταχύτητα του τραγουδιού",
|
||||
"name": "Ταχύτητα αναπαραγωγής",
|
||||
"templates": {
|
||||
"button": "Ταχύτητα"
|
||||
}
|
||||
},
|
||||
"precise-volume": {
|
||||
"description": "Ελέγξτε την ένταση του ήχου με ακρίβεια χρησιμοποιώντας τον τροχό του ποντικιού/τα πλήκτρα, με ένα προσαρμοσμένο HUD και προσαρμόσιμα βήματα έντασης",
|
||||
"menu": {
|
||||
"arrows-shortcuts": "Τοπικά πλήκτρα βέλους Έλεγχοι",
|
||||
"custom-volume-steps": "Ορισμός προσαρμοσμένων βημάτων έντασης ήχου",
|
||||
"global-shortcuts": "Παγκόσμια πλήκτρα συντόμευσης"
|
||||
},
|
||||
"name": "Ακριβής Ήχος",
|
||||
"prompt": {
|
||||
"global-shortcuts": {
|
||||
"keybind-options": {
|
||||
"decrease": "Μείωση έντασης",
|
||||
"increase": "Αύξηση έντασης"
|
||||
}
|
||||
},
|
||||
"label": "Επιλέξτε Παγκόσμια δέσμευση πλήκτρων έντασης ήχου:",
|
||||
"title": "Επιλέξτε Παγκόσμια δέσμευση πλήκτρων έντασης ήχου"
|
||||
},
|
||||
"volume-steps": {
|
||||
"label": "Επιλέξτε Βήματα αύξησης/μείωσης έντασης ήχου",
|
||||
"title": "Βήματα έντασης"
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -436,46 +705,195 @@
|
||||
"backend": {
|
||||
"dialog": {
|
||||
"quality-changer": {
|
||||
"detail": "Τρέχουσα ποιότητα: {{quality}}"
|
||||
"detail": "Τρέχουσα ποιότητα: {{quality}}",
|
||||
"message": "Επιλογή ποιότητας βίντεο:",
|
||||
"title": "Επιλογή ποιότητας βίντεο"
|
||||
}
|
||||
}
|
||||
},
|
||||
"description": "Επιτρέπει την αλλαγή της ποιότητας βίντεο με ένα κουμπί στην επικάλυψη βίντεο",
|
||||
"name": "Αλλαγή ποιότητας βίντεο",
|
||||
"renderer": {
|
||||
"quality-settings-button": {
|
||||
"label": "Άνοιγμα ρυθμίσεων ποιότητας αναπαραγωγέα"
|
||||
}
|
||||
}
|
||||
},
|
||||
"scrobbler": {
|
||||
"description": "Προσθήκη υποστήριξης scrobbling (κ.λπ. last.fm, Listenbrainz)",
|
||||
"dialog": {
|
||||
"lastfm": {
|
||||
"auth-failed": {
|
||||
"message": "Απέτυχε η πιστοποίηση ταυτότητας στο Last.fm\nΚρύψτε το αναδυόμενο παράθυρο μέχρι την επόμενη επανεκκίνηση.",
|
||||
"title": "Αποτυχία ελέγχου ταυτότητας"
|
||||
}
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"lastfm": {
|
||||
"api-settings": "Ρυθμίσεις API Last.fm"
|
||||
},
|
||||
"listenbrainz": {
|
||||
"token": "Εισάγετε το διακριτικό χρήστη ListenBrainz"
|
||||
},
|
||||
"scrobble-alternative-title": "Χρήση εναλλακτικών τίτλων",
|
||||
"scrobble-other-media": "Scrobble άλλα μέσα ενημέρωσης"
|
||||
},
|
||||
"name": "Σκρόμπλερ",
|
||||
"prompt": {
|
||||
"lastfm": {
|
||||
"api-key": "Κλειδί API Last.fm",
|
||||
"api-secret": "Μυστικό API του Last.fm"
|
||||
},
|
||||
"listenbrainz": {
|
||||
"token": {
|
||||
"label": "Εισάγετε το διακριτικό χρήστη ListenBrainz:",
|
||||
"title": "Κουπόνι ListenBrainz"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"shortcuts": {
|
||||
"description": "Επιτρέπετε τον καθορισμό παγκόσμιων πλήκτρων άμεσης πρόσβασης για την παρακολούθηση (αναπαραγωγή/παύση/επόμενη/προηγούμενη) και την απενεργοποίηση του OSD πολυμέσων με παράκαμψη των πλήκτρων πολυμέσων, την ενεργοποίηση του Ctrl/CMD + F για αναζήτηση, την ενεργοποίηση της υποστήριξης Linux MPRIS για τα πλήκτρα πολυμέσων και προσαρμοσμένα πλήκτρα άμεσης πρόσβασης για προχωρημένους χρήστες",
|
||||
"menu": {
|
||||
"override-media-keys": "Παράκαμψη κλειδιών πολυμέσων",
|
||||
"set-keybinds": "Ορισμός παγκόσμιων ελέγχων τραγουδιού"
|
||||
},
|
||||
"name": "Συντομεύσεις (& MPRIS)",
|
||||
"prompt": {
|
||||
"keybind": {
|
||||
"keybind-options": {
|
||||
"next": "Επόμενο",
|
||||
"play-pause": "Αναπαραγωγή / Παύση",
|
||||
"previous": "Προηγούμενο"
|
||||
}
|
||||
},
|
||||
"label": "Επιλέξτε Global Keybinds για το τραγούδι Έλεγχος:",
|
||||
"title": "Παγκόσμια δέσμευση πλήκτρων"
|
||||
}
|
||||
}
|
||||
},
|
||||
"skip-disliked-songs": {
|
||||
"description": "Παραλείπει τα αρεστά τραγούδια",
|
||||
"name": "Παραλείψτε τα τραγούδια που δεν άρεσαν"
|
||||
},
|
||||
"skip-silences": {
|
||||
"description": "Αυτόματη παράλειψη τμημάτων σιωπής σε τραγούδια",
|
||||
"name": "Παραλείψτε τις σιωπές"
|
||||
},
|
||||
"sponsorblock": {
|
||||
"description": "Παραλείπει αυτόματα μέρη που δεν είναι μουσικά, όπως intro/outro ή μέρη μουσικών βίντεο όπου δεν παίζεται το τραγούδι",
|
||||
"name": "SponsorBlock"
|
||||
},
|
||||
"synced-lyrics": {
|
||||
"description": "Παρέχει συγχρονισμένους στίχους σε τραγούδια, χρησιμοποιώντας παρόχους όπως η LRClib.",
|
||||
"errors": {
|
||||
"fetch": "⚠️ Προέκυψε σφάλμα κατά την ανάκτηση των στίχων.\n\tΠροσπαθήστε ξανά αργότερα.",
|
||||
"not-found": "⚠️ Δεν βρέθηκαν στίχοι για αυτό το τραγούδι."
|
||||
},
|
||||
"menu": {
|
||||
"default-text-string": {
|
||||
"label": "Προεπιλεγμένος χαρακτήρας μεταξύ στίχων",
|
||||
"tooltip": "Επιλέξτε τον προεπιλεγμένο χαρακτήρα που θα χρησιμοποιηθεί για το κενό μεταξύ των στίχων"
|
||||
},
|
||||
"line-effect": {
|
||||
"label": "Επίδραση γραμμής",
|
||||
"submenu": {
|
||||
"fancy": {
|
||||
"label": "Φανταχτερό",
|
||||
"tooltip": "Χρήση μεγάλων εφέ που μοιάζουν με εφαρμογές στην τρέχουσα γραμμή"
|
||||
},
|
||||
"focus": {
|
||||
"label": "Εστίαση",
|
||||
"tooltip": "Κάντε μόνο την τρέχουσα γραμμή λευκή"
|
||||
},
|
||||
"offset": {
|
||||
"label": "Μετατόπιση",
|
||||
"tooltip": "Μετατόπιση προς τα δεξιά της τρέχουσας γραμμής"
|
||||
},
|
||||
"scale": {
|
||||
"label": "Κλίμακα",
|
||||
"tooltip": "Κλιμάκωση της τρέχουσας γραμμής"
|
||||
}
|
||||
},
|
||||
"tooltip": "Επιλέξτε το εφέ που θα εφαρμοστεί στην τρέχουσα γραμμή"
|
||||
},
|
||||
"precise-timing": {
|
||||
"label": "Κάντε τους στίχους τέλεια συγχρονισμένους",
|
||||
"tooltip": "Υπολογίζει με ακρίβεια χιλιοστού του δευτερολέπτου την εμφάνιση της επόμενης γραμμής (μπορεί να έχει μικρή επίπτωση στην απόδοση)"
|
||||
},
|
||||
"romanization": {
|
||||
"label": "Στίχοι Ρομαντικοποίηση",
|
||||
"tooltip": "Αν οι στίχοι είναι σε διαφορετική γλώσσα, προσπαθήστε να εμφανίσετε μια λατινική έκδοση."
|
||||
},
|
||||
"show-lyrics-even-if-inexact": {
|
||||
"label": "Εμφάνιση στίχων ακόμα και αν είναι ανακριβείς",
|
||||
"tooltip": "Εάν το τραγούδι δεν βρεθεί, το πρόσθετο προσπαθεί ξανά με διαφορετικό ερώτημα αναζήτησης.\nΤο αποτέλεσμα της δεύτερης προσπάθειας μπορεί να μην είναι ακριβές."
|
||||
},
|
||||
"show-time-codes": {
|
||||
"label": "Εμφάνιση κωδικών ώρας",
|
||||
"tooltip": "Εμφάνιση των κωδικών ώρας δίπλα στους στίχους"
|
||||
}
|
||||
},
|
||||
"name": "Συγχρονισμένοι στίχοι",
|
||||
"refetch-btn": {
|
||||
"fetching": "Φέρνοντας...",
|
||||
"normal": "Στίχοι Refetch"
|
||||
},
|
||||
"warnings": {
|
||||
"duration-mismatch": "⚠️ - Οι στίχοι ενδέχεται να μην είναι συγχρονισμένοι λόγω αναντιστοιχίας διάρκειας.",
|
||||
"inexact": "⚠️ - Οι στίχοι για αυτό το τραγούδι μπορεί να μην είναι ακριβείς",
|
||||
"instrumental": "⚠️ - Αυτό είναι ένα ορχηστρικό τραγούδι"
|
||||
}
|
||||
},
|
||||
"taskbar-mediacontrol": {
|
||||
"description": "Έλεγχος αναπαραγωγής από τη γραμμή εργασιών των Windows",
|
||||
"name": "Έλεγχος μέσων γραμμής εργασιών"
|
||||
},
|
||||
"touchbar": {
|
||||
"description": "Προσθέτει ένα γραφικό στοιχείο TouchBar για χρήστες macOS",
|
||||
"name": "TouchBar"
|
||||
},
|
||||
"tuna-obs": {
|
||||
"description": "Ενσωμάτωση με το plugin Tuna του OBS",
|
||||
"name": "Tuna OBS"
|
||||
},
|
||||
"unobtrusive-player": {
|
||||
"description": "Αποτρέπει την εμφάνιση του προγράμματος αναπαραγωγής κατά την αναπαραγωγή ενός τραγουδιού",
|
||||
"name": "Ανεπαίσθητος παίκτης"
|
||||
},
|
||||
"video-toggle": {
|
||||
"description": "Προσθέτει ένα κουμπί για εναλλαγή μεταξύ της λειτουργίας βίντεο/τραγουδιού. μπορεί επίσης προαιρετικά να αφαιρέσει ολόκληρη την καρτέλα βίντεο",
|
||||
"menu": {
|
||||
"align": {
|
||||
"label": "Στοίχιση",
|
||||
"submenu": {
|
||||
"left": "Αριστερά",
|
||||
"middle": "Middle",
|
||||
"right": "Right"
|
||||
"right": "Δεξιά"
|
||||
}
|
||||
},
|
||||
"force-hide": "Αναγκαστική αφαίρεση καρτέλας βίντεο",
|
||||
"mode": {
|
||||
"label": "Mode"
|
||||
"label": "Mode",
|
||||
"submenu": {
|
||||
"custom": "Προσαρμοσμένη εναλλαγή",
|
||||
"disabled": "Απενεργοποιημένο",
|
||||
"native": "Γηγενής εναλλαγή"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Εναλλαγή βίντεο",
|
||||
"templates": {
|
||||
"button": "Song"
|
||||
"button-song": "Τραγούδι",
|
||||
"button-video": "Βίντεο"
|
||||
}
|
||||
},
|
||||
"visualizer": {
|
||||
"description": "Προσθέτει έναν απεικονιστή στο πρόγραμμα αναπαραγωγής",
|
||||
"menu": {
|
||||
"visualizer-type": "Τύπος απεικονιστή"
|
||||
},
|
||||
"name": "Απεικονιστής"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -156,6 +156,13 @@
|
||||
"hide": "Hide",
|
||||
"label": "Like buttons"
|
||||
},
|
||||
"custom-window-title": {
|
||||
"label": "Custom window title",
|
||||
"prompt": {
|
||||
"label": "Enter custom window title: (leave empty to disable)",
|
||||
"placeholder": "Example: {{applicationName}}"
|
||||
}
|
||||
},
|
||||
"remove-upgrade-button": "Remove upgrade button",
|
||||
"theme": {
|
||||
"dialog": {
|
||||
@ -201,8 +208,8 @@
|
||||
"restart": "Restart App",
|
||||
"show": "Show window",
|
||||
"tooltip": {
|
||||
"default": "YouTube Music",
|
||||
"with-song-info": "YouTube Music: {{artist}} - {{title}}"
|
||||
"default": "{{applicationName}}",
|
||||
"with-song-info": "{{applicationName}}: {{artist}} - {{title}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -230,7 +237,8 @@
|
||||
"submenu": {
|
||||
"percent": "{{ratio}}%"
|
||||
}
|
||||
}
|
||||
},
|
||||
"enable-seekbar": "Enable seekbar theming"
|
||||
},
|
||||
"name": "Album Color Theme"
|
||||
},
|
||||
@ -279,26 +287,26 @@
|
||||
},
|
||||
"name": "Ambient Mode"
|
||||
},
|
||||
"amuse": {
|
||||
"description": "Adds {{applicationName}} support for the Amuse now playing widget by 6K Labs",
|
||||
"name": "Amuse",
|
||||
"response": {
|
||||
"query": "Amuse API server is running. GET /query to get song info."
|
||||
}
|
||||
},
|
||||
"api-server": {
|
||||
"description": "Adds an API server to control the player",
|
||||
"name": "API Server [Beta]",
|
||||
"dialog": {
|
||||
"request": {
|
||||
"title": "API authorization request",
|
||||
"message": "Allow {{ID}} ({{origin}}) to access the API?",
|
||||
"buttons": {
|
||||
"allow": "Allow",
|
||||
"deny": "Deny"
|
||||
}
|
||||
},
|
||||
"message": "Allow {{ID}} ({{origin}}) to access the API?",
|
||||
"title": "API authorization request"
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"hostname": {
|
||||
"label": "Hostname"
|
||||
},
|
||||
"port": {
|
||||
"label": "Port"
|
||||
},
|
||||
"auth-strategy": {
|
||||
"label": "Authorization strategy",
|
||||
"submenu": {
|
||||
@ -309,16 +317,39 @@
|
||||
"label": "No authorization"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"prompt": {
|
||||
},
|
||||
"hostname": {
|
||||
"title": "Hostname",
|
||||
"label": "Enter the hostname (like 0.0.0.0) for the API server:"
|
||||
"label": "Hostname"
|
||||
},
|
||||
"port": {
|
||||
"title": "Port",
|
||||
"label": "Enter the port for the API server:"
|
||||
"label": "Port"
|
||||
},
|
||||
"https": {
|
||||
"label": "HTTPS & Certificates",
|
||||
"submenu": {
|
||||
"enable-https": {
|
||||
"label": "Enable HTTPS"
|
||||
},
|
||||
"cert": {
|
||||
"label": "Certificate file (.crt/.pem)",
|
||||
"dialogTitle": "Select HTTPS certificate file"
|
||||
},
|
||||
"key": {
|
||||
"label": "Private key file (.key/.pem)",
|
||||
"dialogTitle": "Select HTTPS private key file"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "API Server [Beta]",
|
||||
"prompt": {
|
||||
"hostname": {
|
||||
"label": "Enter the hostname (like 0.0.0.0) for the API server:",
|
||||
"title": "Hostname"
|
||||
},
|
||||
"port": {
|
||||
"label": "Enter the port for the API server:",
|
||||
"title": "Port"
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -326,16 +357,40 @@
|
||||
"description": "Apply compression to audio (lowers the volume of the loudest parts of the signal and raises the volume of the softest parts)",
|
||||
"name": "Audio Compressor"
|
||||
},
|
||||
"auth-proxy-adapter": {
|
||||
"description": "Support for the use of authentication proxy services",
|
||||
"menu": {
|
||||
"disable": "Disable Proxy Adapter",
|
||||
"enable": "Enable Proxy Adapter",
|
||||
"hostname": {
|
||||
"label": "Hostname"
|
||||
},
|
||||
"port": {
|
||||
"label": "Port"
|
||||
}
|
||||
},
|
||||
"name": "Auth Proxy Adapter",
|
||||
"prompt": {
|
||||
"hostname": {
|
||||
"title": "Proxy Hostname",
|
||||
"label": "Enter hostname for local proxy server (requires restart):"
|
||||
},
|
||||
"port": {
|
||||
"title": "Proxy Port",
|
||||
"label": "Enter port for local proxy server (requires restart):"
|
||||
}
|
||||
}
|
||||
},
|
||||
"blur-nav-bar": {
|
||||
"description": "Makes navigation bar transparent and blurry",
|
||||
"name": "Blur Navigation Bar"
|
||||
},
|
||||
"bypass-age-restrictions": {
|
||||
"description": "Bypass YouTube's age verification",
|
||||
"description": "Bypass Music Player's age verification",
|
||||
"name": "Bypass Age Restrictions"
|
||||
},
|
||||
"captions-selector": {
|
||||
"description": "Caption selector for YouTube Music audio tracks",
|
||||
"description": "Caption selector for {{applicationName}} audio tracks",
|
||||
"menu": {
|
||||
"autoload": "Automatically select last used caption",
|
||||
"disable-captions": "No captions by default"
|
||||
@ -350,6 +405,11 @@
|
||||
},
|
||||
"templates": {
|
||||
"title": "Open captions selector"
|
||||
},
|
||||
"toast": {
|
||||
"caption-changed": "Caption changed to {{language}}",
|
||||
"caption-disabled": "Captions disabled",
|
||||
"no-captions": "No captions available for this song"
|
||||
}
|
||||
},
|
||||
"compact-sidebar": {
|
||||
@ -378,6 +438,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"custom-output-device": {
|
||||
"description": "Configure a custom output media device for songs",
|
||||
"menu": {
|
||||
"device-selector": "Select Device"
|
||||
},
|
||||
"name": "Custom Output Device",
|
||||
"prompt": {
|
||||
"device-selector": {
|
||||
"label": "Choose the output media device to be used",
|
||||
"title": "Select Output Device"
|
||||
}
|
||||
}
|
||||
},
|
||||
"disable-autoplay": {
|
||||
"description": "Makes song start in \"paused\" mode",
|
||||
"menu": {
|
||||
@ -400,8 +473,16 @@
|
||||
"disconnected": "Disconnected",
|
||||
"hide-duration-left": "Hide duration left",
|
||||
"hide-github-button": "Hide GitHub link Button",
|
||||
"play-on-youtube-music": "Play on YouTube Music",
|
||||
"set-inactivity-timeout": "Set inactivity timeout"
|
||||
"play-on-application": "Play on {{applicationName}}",
|
||||
"set-inactivity-timeout": "Set inactivity timeout",
|
||||
"set-status-display-type": {
|
||||
"label": "Status text",
|
||||
"submenu": {
|
||||
"application": "Listening to {{applicationName}}",
|
||||
"artist": "Listening to {artist}",
|
||||
"title": "Listening to {song title}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Discord Rich Presence",
|
||||
"prompt": {
|
||||
@ -484,6 +565,18 @@
|
||||
"button": "Download"
|
||||
}
|
||||
},
|
||||
"equalizer": {
|
||||
"description": "Adds an equalizer to the player",
|
||||
"menu": {
|
||||
"presets": {
|
||||
"label": "Presets",
|
||||
"list": {
|
||||
"bass-booster": "Bass booster"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Equalizer"
|
||||
},
|
||||
"exponential-volume": {
|
||||
"description": "Makes the volume slider exponential so it's easier to select lower volumes.",
|
||||
"name": "Exponential Volume"
|
||||
@ -557,7 +650,15 @@
|
||||
},
|
||||
"navigation": {
|
||||
"description": "Next/Back navigation arrows directly integrated in the interface, like in your favorite browser",
|
||||
"name": "Navigation"
|
||||
"name": "Navigation",
|
||||
"templates": {
|
||||
"back": {
|
||||
"title": "Go to previous page"
|
||||
},
|
||||
"forward": {
|
||||
"title": "Go to next page"
|
||||
}
|
||||
}
|
||||
},
|
||||
"no-google-login": {
|
||||
"description": "Remove Google login buttons and links from the interface",
|
||||
@ -581,6 +682,10 @@
|
||||
},
|
||||
"name": "Notifications"
|
||||
},
|
||||
"performance-improvement": {
|
||||
"description": "Improve performance by enabling experimental scripts",
|
||||
"name": "Performance improvement [Beta]"
|
||||
},
|
||||
"picture-in-picture": {
|
||||
"description": "Allows to switch the app to picture-in-picture mode",
|
||||
"menu": {
|
||||
@ -645,7 +750,12 @@
|
||||
}
|
||||
},
|
||||
"description": "Allows changing the video quality with a button on the video overlay",
|
||||
"name": "Video Quality Changer"
|
||||
"name": "Video Quality Changer",
|
||||
"renderer": {
|
||||
"quality-settings-button": {
|
||||
"label": "Open player quality changer"
|
||||
}
|
||||
}
|
||||
},
|
||||
"scrobbler": {
|
||||
"description": "Add scrobbling support (etc. last.fm, Listenbrainz)",
|
||||
@ -664,6 +774,8 @@
|
||||
"listenbrainz": {
|
||||
"token": "Enter ListenBrainz user token"
|
||||
},
|
||||
"scrobble-alternative-title": "Use alternative titles",
|
||||
"scrobble-alternative-artist": "Use alternative artists",
|
||||
"scrobble-other-media": "Scrobble other media"
|
||||
},
|
||||
"name": "Scrobbler",
|
||||
@ -714,10 +826,18 @@
|
||||
"synced-lyrics": {
|
||||
"description": "Provides synced lyrics to songs, using providers like LRClib.",
|
||||
"errors": {
|
||||
"fetch": "⚠️ - An error occurred while fetching the lyrics. Please try again later.",
|
||||
"not-found": "⚠️ - No lyrics found for this song."
|
||||
"fetch": "⚠️\tAn error occurred while fetching the lyrics.\n\tPlease try again later.",
|
||||
"not-found": "⚠️ No lyrics found for this song."
|
||||
},
|
||||
"menu": {
|
||||
"preferred-provider": {
|
||||
"label": "Preferred Provider",
|
||||
"tooltip": "Choose the default provider to use",
|
||||
"none": {
|
||||
"label": "None",
|
||||
"tooltip": "No preferred provider"
|
||||
}
|
||||
},
|
||||
"default-text-string": {
|
||||
"label": "Default character between lyrics",
|
||||
"tooltip": "Choose the default character to use for the gap between lyrics"
|
||||
@ -725,6 +845,10 @@
|
||||
"line-effect": {
|
||||
"label": "Line effect",
|
||||
"submenu": {
|
||||
"fancy": {
|
||||
"label": "Fancy",
|
||||
"tooltip": "Use large, app-like effects on the current line"
|
||||
},
|
||||
"focus": {
|
||||
"label": "Focus",
|
||||
"tooltip": "Make only the current line white"
|
||||
@ -744,6 +868,10 @@
|
||||
"label": "Make the lyrics perfectly synced",
|
||||
"tooltip": "Calculate to the milisecond the display of the next line (can have a small impact on performance)"
|
||||
},
|
||||
"romanization": {
|
||||
"label": "Romanize lyrics",
|
||||
"tooltip": "If the lyrics are in a different language, try to display a latin version."
|
||||
},
|
||||
"show-lyrics-even-if-inexact": {
|
||||
"label": "Show lyrics even if inexact",
|
||||
"tooltip": "If the song is not found, the plugin tries again with a different search query.\nThe result from the second attempt may not be exact."
|
||||
@ -772,10 +900,35 @@
|
||||
"description": "Adds a TouchBar widget for macOS users",
|
||||
"name": "TouchBar"
|
||||
},
|
||||
"transparent-player": {
|
||||
"description": "Makes the app window transparent",
|
||||
"name": "Transparent Player",
|
||||
"menu": {
|
||||
"opacity": {
|
||||
"label": "Opacity",
|
||||
"submenu": {
|
||||
"percent": "{{opacity}}%"
|
||||
}
|
||||
},
|
||||
"type": {
|
||||
"label": "Type",
|
||||
"submenu": {
|
||||
"acrylic": "Acrylic",
|
||||
"mica": "Mica",
|
||||
"tabbed": "Tabbed",
|
||||
"none": "None"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"tuna-obs": {
|
||||
"description": "Integration with OBS's plugin Tuna",
|
||||
"name": "Tuna OBS"
|
||||
},
|
||||
"unobtrusive-player": {
|
||||
"description": "Prevents the player from popping up when playing a song",
|
||||
"name": "Unobtrusive Player"
|
||||
},
|
||||
"video-toggle": {
|
||||
"description": "Adds a button to switch between Video/Song mode. can also optionally remove the whole video tab",
|
||||
"menu": {
|
||||
@ -799,7 +952,8 @@
|
||||
},
|
||||
"name": "Video Toggle",
|
||||
"templates": {
|
||||
"button": "Song"
|
||||
"button-song": "Song",
|
||||
"button-video": "Video"
|
||||
}
|
||||
},
|
||||
"visualizer": {
|
||||
|
||||
@ -2,14 +2,14 @@
|
||||
"common": {
|
||||
"console": {
|
||||
"plugins": {
|
||||
"execute-failed": "Error al ejecutar el plugin {{pluginName}}::{{contextName}}",
|
||||
"executed-at-ms": "Plugin {{pluginName}}: {{contextName}} ejecutado en {{ms}}ms",
|
||||
"initialize-failed": "Error al inicializar plugin \"{{pluginName}}\"",
|
||||
"load-all": "Cargando todos los plugins",
|
||||
"load-failed": "Error al cargar el plugin \"{{pluginName}}\"",
|
||||
"loaded": "Plugin \"{{pluginName}}\" cargado",
|
||||
"unload-failed": "No se ha podido descargar el plugin \"{{pluginName}}\"",
|
||||
"unloaded": "Plugin \"{{pluginName}}\" descargado"
|
||||
"execute-failed": "Error al ejecutar el complemento {{pluginName}}::{{contextName}}",
|
||||
"executed-at-ms": "Complemento {{pluginName}}::{{contextName}} se ejecutó en {{ms}}ms",
|
||||
"initialize-failed": "Error al inicializar el complemento \"{{pluginName}}\"",
|
||||
"load-all": "Cargando todos los complementos",
|
||||
"load-failed": "Error al cargar el complemento \"{{pluginName}}\"",
|
||||
"loaded": "Complementos \"{{pluginName}}\" cargados",
|
||||
"unload-failed": "No se ha podido descargar el complemento \"{{pluginName}}\"",
|
||||
"unloaded": "Complemento \"{{pluginName}}\" descargado"
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -21,7 +21,7 @@
|
||||
"main": {
|
||||
"console": {
|
||||
"did-finish-load": {
|
||||
"dev-tools": "Carga finalizada. DevTools abiertos"
|
||||
"dev-tools": "Carga finalizada. DevTools abierto"
|
||||
},
|
||||
"i18n": {
|
||||
"loaded": "i18n cargado"
|
||||
@ -36,7 +36,7 @@
|
||||
"details": "¡Error sin repuesta!\n{{error}}"
|
||||
},
|
||||
"when-ready": {
|
||||
"clearing-cache-after-20s": "Borrar caché de la aplicación"
|
||||
"clearing-cache-after-20s": "Borrando caché de la aplicación"
|
||||
},
|
||||
"window": {
|
||||
"tried-to-render-offscreen": "La ventana intentó mostrarse fuera de la pantalla, windowSize={{windowSize}}, displaySize={{displaySize}}, posicion={{position}}"
|
||||
@ -45,21 +45,21 @@
|
||||
"dialog": {
|
||||
"hide-menu-enabled": {
|
||||
"detail": "El menú está oculto, utiliza \"Alt\" para mostrarlo (o \"Escape\" si utilizas el menú integrado en la aplicación)",
|
||||
"message": "Menu oculto esta deshabilitado",
|
||||
"title": "Menú oculto activado"
|
||||
"message": "El \"Menú Oculto\" está habilitado",
|
||||
"title": "\"Menú oculto\" habilitado"
|
||||
},
|
||||
"need-to-restart": {
|
||||
"buttons": {
|
||||
"later": "Más tarde",
|
||||
"restart-now": "Reiniciar ahora"
|
||||
},
|
||||
"detail": "\"{{pluginName}}\" se requiere reiniciar para que el plugin tome efecto",
|
||||
"detail": "El complemento \"{{pluginName}}\" requiere reiniciar para tomar efecto",
|
||||
"message": "\"{{pluginName}}\" necesita reiniciar",
|
||||
"title": "Se requiere reinicio"
|
||||
},
|
||||
"unresponsive": {
|
||||
"buttons": {
|
||||
"quit": "Dejar",
|
||||
"quit": "Salir",
|
||||
"relaunch": "Volver a abrir",
|
||||
"wait": "Espera"
|
||||
},
|
||||
@ -74,7 +74,7 @@
|
||||
"ok": "OK"
|
||||
},
|
||||
"detail": "Una nueva versión está disponible y puede descargarse en {{downloadLink}}",
|
||||
"message": "Ya está disponible una nueva versión",
|
||||
"message": "Hay una nueva versión disponible",
|
||||
"title": "Actualización disponible"
|
||||
}
|
||||
},
|
||||
@ -84,7 +84,7 @@
|
||||
"label": "Navegación",
|
||||
"submenu": {
|
||||
"copy-current-url": "Copiar la URL actual",
|
||||
"go-back": "Regresar",
|
||||
"go-back": "Atrás",
|
||||
"go-forward": "Adelante",
|
||||
"quit": "Salir",
|
||||
"restart": "Reiniciar la aplicación"
|
||||
@ -99,10 +99,10 @@
|
||||
"auto-reset-app-cache": "Restablecer la caché de la aplicación al iniciarla",
|
||||
"disable-hardware-acceleration": "Desactivar la aceleración por hardware",
|
||||
"edit-config-json": "Editar config.json",
|
||||
"override-user-agent": "sobrescribir User-Agent",
|
||||
"restart-on-config-changes": "Reinicie al cambiar la configuración",
|
||||
"override-user-agent": "Sobrescribir User-Agent",
|
||||
"restart-on-config-changes": "Reiniciar al modificar la configuración",
|
||||
"set-proxy": {
|
||||
"label": "Definir proxy",
|
||||
"label": "Establecer proxy",
|
||||
"prompt": {
|
||||
"label": "Introduzca la dirección del proxy: (déjela vacía para desactivarla)",
|
||||
"placeholder": "Ejemplo: SOCKS5://127.0.0.1:9999",
|
||||
@ -112,28 +112,28 @@
|
||||
"toggle-dev-tools": "Activar DevTools"
|
||||
}
|
||||
},
|
||||
"always-on-top": "Siempre arriba",
|
||||
"always-on-top": "Siempre al frente",
|
||||
"auto-update": "Actualización automática",
|
||||
"hide-menu": {
|
||||
"dialog": {
|
||||
"message": "El menú se ocultará la próxima vez que lo inicies, usa [Alt] para mostrarlo (o pulsa [`] si usas el menú dentro de la aplicación)",
|
||||
"title": "Ocultar menú habilitado"
|
||||
"message": "El menú se ocultará la próxima vez que inicies la aplicación, usa [Alt] para mostrarlo (o pulsa [`] si usas el menú dentro de la aplicación)",
|
||||
"title": "Menú oculto habilitado"
|
||||
},
|
||||
"label": "Ocultar menú"
|
||||
},
|
||||
"language": {
|
||||
"dialog": {
|
||||
"message": "El idioma se cambiará después de reiniciar",
|
||||
"title": "Se cambio el idioma"
|
||||
"title": "Se cambió el idioma"
|
||||
},
|
||||
"label": "Idioma",
|
||||
"submenu": {
|
||||
"to-help-translate": "¿Quieres ayudar a traducir? Haz clic aquí"
|
||||
}
|
||||
},
|
||||
"resume-on-start": "Reanudar la última canción al iniciar la aplicación",
|
||||
"single-instance-lock": "Bloquear en una instancia unica",
|
||||
"start-at-login": "Comenzar al iniciar sesión",
|
||||
"resume-on-start": "Reanudar la última canción reproducida al iniciar la aplicación",
|
||||
"single-instance-lock": "Limitar a una única instancia",
|
||||
"start-at-login": "Iniciar al iniciar sesión",
|
||||
"starting-page": {
|
||||
"label": "Página de inicio",
|
||||
"unset": "Sin configurar"
|
||||
@ -142,21 +142,28 @@
|
||||
"label": "Bandeja",
|
||||
"submenu": {
|
||||
"disabled": "Desactivado",
|
||||
"enabled-and-hide-app": "Activar y ocultar la aplicación",
|
||||
"enabled-and-show-app": "Activado y mostrar aplicación",
|
||||
"enabled-and-hide-app": "Habilitado y ocultar la aplicación",
|
||||
"enabled-and-show-app": "Habilitado y mostrar aplicación",
|
||||
"play-pause-on-click": "Reproducir/Pausar al hacer clic"
|
||||
}
|
||||
},
|
||||
"visual-tweaks": {
|
||||
"label": "Ajustes visuales",
|
||||
"submenu": {
|
||||
"custom-window-title": {
|
||||
"label": "Título de ventana personalizado",
|
||||
"prompt": {
|
||||
"label": "Ingresa un título de ventana personalizado: (déjalo vacío para desactivar)",
|
||||
"placeholder": "Ejemplo: {{applicationName}}"
|
||||
}
|
||||
},
|
||||
"like-buttons": {
|
||||
"default": "Predeterminado",
|
||||
"force-show": "Forzar la visualización",
|
||||
"hide": "Ocultar",
|
||||
"label": "Botones de \"Me Gusta\""
|
||||
},
|
||||
"remove-upgrade-button": "Remover el botón de Actualización",
|
||||
"remove-upgrade-button": "Eliminar el botón de Actualización",
|
||||
"theme": {
|
||||
"dialog": {
|
||||
"button": {
|
||||
@ -178,7 +185,7 @@
|
||||
},
|
||||
"plugins": {
|
||||
"enabled": "Habilitado",
|
||||
"label": "Plugins",
|
||||
"label": "Complementos",
|
||||
"new": "NUEVO"
|
||||
},
|
||||
"view": {
|
||||
@ -201,8 +208,8 @@
|
||||
"restart": "Reiniciar la aplicación",
|
||||
"show": "Mostrar ventana",
|
||||
"tooltip": {
|
||||
"default": "YouTube Music",
|
||||
"with-song-info": "YouTube Music: {{artist}} - {{title}}"
|
||||
"default": "{{applicationName}}",
|
||||
"with-song-info": "{{applicationName}}: {{artist}} - {{title}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -212,14 +219,14 @@
|
||||
"name": "Aumento de la velocidad de anuncios"
|
||||
},
|
||||
"adblocker": {
|
||||
"description": "Bloquear todos los anuncios y el rastreo",
|
||||
"description": "Bloquear todos los anuncios y el rastreo por defecto",
|
||||
"menu": {
|
||||
"blocker": "Bloqueador"
|
||||
},
|
||||
"name": "Bloqueador de anuncios"
|
||||
},
|
||||
"album-actions": {
|
||||
"description": "Añade los botones \"No me gusta\", \"No me gusta\", \"Me gusta\" y \"No me gusta\" para aplicarlos a todas las canciones de una lista de reproducción o un álbum",
|
||||
"description": "Añade los botones \"Quitar no me gusta\", \"No me gusta\", \"Me gusta\" y \"Quitar me gusta\" para aplicarlos a todas las canciones de una lista de reproducción o un álbum",
|
||||
"name": "Acciones en el álbum"
|
||||
},
|
||||
"album-color-theme": {
|
||||
@ -230,17 +237,18 @@
|
||||
"submenu": {
|
||||
"percent": "{{ratio}}%"
|
||||
}
|
||||
}
|
||||
},
|
||||
"enable-seekbar": "Habilitar temas a la barra de búsqueda"
|
||||
},
|
||||
"name": "Color del álbum"
|
||||
"name": "Tema de color del álbum"
|
||||
},
|
||||
"ambient-mode": {
|
||||
"description": "Aplica un efecto de iluminación mediante la proyección de colores suaves del vídeo en el fondo de la pantalla",
|
||||
"description": "Aplica un efecto de iluminación mediante la proyección de colores suaves extraídos del vídeo sobre el fondo de pantalla",
|
||||
"menu": {
|
||||
"blur-amount": {
|
||||
"label": "Cantidad de desenfoque",
|
||||
"submenu": {
|
||||
"pixels": "{{blurAmount}} pixeles"
|
||||
"pixels": "{{blurAmount}} píxeles"
|
||||
}
|
||||
},
|
||||
"buffer": {
|
||||
@ -250,7 +258,7 @@
|
||||
}
|
||||
},
|
||||
"opacity": {
|
||||
"label": "Transparencia",
|
||||
"label": "Opacidad",
|
||||
"submenu": {
|
||||
"percent": "{{opacity}}%"
|
||||
}
|
||||
@ -279,6 +287,13 @@
|
||||
},
|
||||
"name": "Modo ambiente"
|
||||
},
|
||||
"amuse": {
|
||||
"description": "Agrega soporte a {{applicationName}} para el widget \"reproduciendo\" de Amuse por 6K Labs",
|
||||
"name": "Amuse",
|
||||
"response": {
|
||||
"query": "El servidor API de Amuse se está ejecutando. Usa GET /query para obtener información de la canción."
|
||||
}
|
||||
},
|
||||
"api-server": {
|
||||
"description": "Añade un servidor API para controlar el reproductor",
|
||||
"dialog": {
|
||||
@ -287,15 +302,16 @@
|
||||
"allow": "Permitir",
|
||||
"deny": "Denegar"
|
||||
},
|
||||
"message": "¿Permitir {{ID}} ({{origin}}) acceder a la API?",
|
||||
"message": "¿Permitir que {{ID}} ({{origin}}) acceda a la API?",
|
||||
"title": "Petición de autorización API"
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"auth-strategy": {
|
||||
"label": "Estrategia de autorización",
|
||||
"submenu": {
|
||||
"auth-at-first": {
|
||||
"label": "Autorizar la primera solicitud"
|
||||
"label": "Autorizar a la primera solicitud"
|
||||
},
|
||||
"none": {
|
||||
"label": "Sin autorización"
|
||||
@ -305,6 +321,22 @@
|
||||
"hostname": {
|
||||
"label": "Nombre del host"
|
||||
},
|
||||
"https": {
|
||||
"label": "HTTPS & Certificados",
|
||||
"submenu": {
|
||||
"cert": {
|
||||
"dialogTitle": "Selecciona el archivo de certificado HTTPS",
|
||||
"label": "Archivo de certificado (.crt/.pem)"
|
||||
},
|
||||
"enable-https": {
|
||||
"label": "Habilitar HTTPS"
|
||||
},
|
||||
"key": {
|
||||
"dialogTitle": "Selecciona el archivo de clave privada HTTPS",
|
||||
"label": "Archivo de clave privada (.key/.pem)"
|
||||
}
|
||||
}
|
||||
},
|
||||
"port": {
|
||||
"label": "Puerto"
|
||||
}
|
||||
@ -325,16 +357,40 @@
|
||||
"description": "Aplicar compresión al audio (reduce la diferencia entre las partes más fuertes y más suaves de una pista para que tenga un nivel más consistente)",
|
||||
"name": "Compresor de audio"
|
||||
},
|
||||
"auth-proxy-adapter": {
|
||||
"description": "Soporte para el uso de servicios de proxy de autenticación",
|
||||
"menu": {
|
||||
"disable": "Deshabilitar el adaptador proxy",
|
||||
"enable": "Habilitar el adaptador proxy",
|
||||
"hostname": {
|
||||
"label": "Nombre de host"
|
||||
},
|
||||
"port": {
|
||||
"label": "Puerto"
|
||||
}
|
||||
},
|
||||
"name": "Adaptador de proxy de autenticación",
|
||||
"prompt": {
|
||||
"hostname": {
|
||||
"label": "Ingrese el nombre de host del servidor proxy local (requiere reinicio):",
|
||||
"title": "Nombre de host del proxy"
|
||||
},
|
||||
"port": {
|
||||
"label": "Ingrese el puerto para el servidor de proxy local (requiere reinicio):",
|
||||
"title": "Puerto de proxy"
|
||||
}
|
||||
}
|
||||
},
|
||||
"blur-nav-bar": {
|
||||
"description": "Hace que la barra de navegación sea transparente y borrosa",
|
||||
"description": "Hace que la barra de navegación se vea transparente y borrosa",
|
||||
"name": "Desenfocar barra de navegación"
|
||||
},
|
||||
"bypass-age-restrictions": {
|
||||
"description": "Saltar la verificación de edad de YouTube",
|
||||
"name": "Saltar las restricciones de edad"
|
||||
"description": "Saltarse la verificación de edad de Music Player",
|
||||
"name": "Saltarse las restricciones de edad"
|
||||
},
|
||||
"captions-selector": {
|
||||
"description": "Selector de subtítulos para pistas de audio de YouTube Music",
|
||||
"description": "Selector de subtítulos para pistas de audio de {{applicationName}}",
|
||||
"menu": {
|
||||
"autoload": "Seleccionar automáticamente el último subtítulo utilizado",
|
||||
"disable-captions": "Sin subtítulos por defecto"
|
||||
@ -342,17 +398,22 @@
|
||||
"name": "Selector de subtítulos",
|
||||
"prompt": {
|
||||
"selector": {
|
||||
"label": "Idioma actual: {{language}}",
|
||||
"label": "Idioma actual de los subtítulos: {{language}}",
|
||||
"none": "Ninguno",
|
||||
"title": "Seleccionar idioma de los subtítulos"
|
||||
}
|
||||
},
|
||||
"templates": {
|
||||
"title": "Abra el selector de subtítulos"
|
||||
"title": "Abrir el selector de subtítulos"
|
||||
},
|
||||
"toast": {
|
||||
"caption-changed": "Subtítulos cambiados a {{language}}",
|
||||
"caption-disabled": "Subtítulos desactivados",
|
||||
"no-captions": "Sin subtítulos para ésta canción"
|
||||
}
|
||||
},
|
||||
"compact-sidebar": {
|
||||
"description": "Poner siempre la barra lateral en modo compacto",
|
||||
"description": "Establecer siempre la barra lateral en modo compacto",
|
||||
"name": "Barra lateral compacta"
|
||||
},
|
||||
"crossfade": {
|
||||
@ -364,16 +425,29 @@
|
||||
"prompt": {
|
||||
"options": {
|
||||
"multi-input": {
|
||||
"fade-in-duration": "Duración del fundido (ms)",
|
||||
"fade-in-duration": "Duración del fundido de entrada (ms)",
|
||||
"fade-out-duration": "Duración del fundido de salida (ms)",
|
||||
"fade-scaling": {
|
||||
"label": "Escala de fundido",
|
||||
"label": "Escala del fundido",
|
||||
"linear": "Lineal",
|
||||
"logarithmic": "Logarítmico"
|
||||
},
|
||||
"seconds-before-end": "Crossfade N segundos antes del final"
|
||||
"seconds-before-end": "Activar Crossfade N segundos antes del final"
|
||||
},
|
||||
"title": "Opciones de crossfade"
|
||||
"title": "Opciones de Crossfade"
|
||||
}
|
||||
}
|
||||
},
|
||||
"custom-output-device": {
|
||||
"description": "Configura un dispositivo de salida de audio personalizado para las canciones",
|
||||
"menu": {
|
||||
"device-selector": "Seleccionar un dispositivo"
|
||||
},
|
||||
"name": "Dispositivo de audio personalizado",
|
||||
"prompt": {
|
||||
"device-selector": {
|
||||
"label": "Escoge el dispositivo de salida de audio que se va a usar",
|
||||
"title": "Seleccionar un dispositivo de audio"
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -399,10 +473,18 @@
|
||||
"disconnected": "Desconectado",
|
||||
"hide-duration-left": "Ocultar la duración restante",
|
||||
"hide-github-button": "Ocultar el botón de enlace a GitHub",
|
||||
"play-on-youtube-music": "Reproducir en YouTube Music",
|
||||
"set-inactivity-timeout": "Establecer tiempo de inactividad"
|
||||
"play-on-application": "Reproducir en {{applicationName}}",
|
||||
"set-inactivity-timeout": "Establecer tiempo de inactividad",
|
||||
"set-status-display-type": {
|
||||
"label": "Texto de estado",
|
||||
"submenu": {
|
||||
"application": "Escuchando {{applicationName}}",
|
||||
"artist": "Escuchando a {artist}",
|
||||
"title": "Escuchando {song title}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Estado de actividad de Discord",
|
||||
"name": "Discord Rich Presence",
|
||||
"prompt": {
|
||||
"set-inactivity-timeout": {
|
||||
"label": "Introduzca el tiempo de inactividad en segundos:",
|
||||
@ -425,7 +507,7 @@
|
||||
"ok": "OK"
|
||||
},
|
||||
"detail": "({{playlistSize}} canciones)",
|
||||
"message": "Descargar Playlist {{playlistTitle}}",
|
||||
"message": "Descargando lista de reproducción {{playlistTitle}}",
|
||||
"title": "Descarga iniciada"
|
||||
}
|
||||
},
|
||||
@ -437,45 +519,45 @@
|
||||
"download-progress": "Descarga: {{percent}}%",
|
||||
"downloading": "Descargando…",
|
||||
"downloading-counter": "Descargando {{current}}/{{total}}…",
|
||||
"downloading-playlist": "Descargar lista de reproducción \"{{playlistTitle}}\" - {{playlistSize}} canciones ({{playlistId}})",
|
||||
"downloading-playlist": "Descargando lista de reproducción \"{{playlistTitle}}\" - {{playlistSize}} canciones ({{playlistId}})",
|
||||
"error-while-downloading": "Error al descargar \"{{author}} - {{title}}\": {{error}}",
|
||||
"folder-already-exists": "La carpeta {{playlistFolder}} ya existe",
|
||||
"getting-playlist-info": "Obteniendo información de la lista de reproducción…",
|
||||
"loading": "Cargando…",
|
||||
"playlist-has-only-one-song": "La lista de reproducción sólo tiene un elemento, descárgala directamente",
|
||||
"playlist-id-not-found": "No se ha encontrado el ID de la lista de reproducción",
|
||||
"playlist-has-only-one-song": "La lista de reproducción sólo tiene un elemento, descargándolo directamente",
|
||||
"playlist-id-not-found": "No se ha encontrado la ID de la lista de reproducción",
|
||||
"playlist-is-empty": "La lista de reproducción está vacía",
|
||||
"playlist-is-mix-or-private": "Error obteniendo información de la lista de reproducción: asegúrese de que no es una lista privada o \"Mixed for you\"\n\n{{error}}",
|
||||
"playlist-is-mix-or-private": "Error obteniendo la información de la lista de reproducción: asegúrese de que no es una lista privada o \"Mixed for you\"\n\n{{error}}",
|
||||
"preparing-file": "Preparando archivo…",
|
||||
"saving": "Guardando…",
|
||||
"trying-to-get-playlist-id": "Intentando obtener el ID de la lista de reproducción: {{playlistId}}",
|
||||
"trying-to-get-playlist-id": "Intentando obtener la ID de la lista de reproducción: {{playlistId}}",
|
||||
"video-id-not-found": "Video no encontrado",
|
||||
"writing-id3": "Escribiendo las etiquetas ID3…"
|
||||
}
|
||||
},
|
||||
"description": "Descarga MP3 / audio fuente directamente desde la interfaz",
|
||||
"description": "Descarga audio MP3 / fuente directamente desde la interfaz",
|
||||
"menu": {
|
||||
"choose-download-folder": "Elija la carpeta de descarga",
|
||||
"download-finish-settings": {
|
||||
"label": "Descargar al finalizar",
|
||||
"prompt": {
|
||||
"last-percent": "Después del x por ciento",
|
||||
"last-percent": "Después de x porcentaje",
|
||||
"last-seconds": "Últimos x segundos",
|
||||
"title": "Configurar cuándo descargar"
|
||||
},
|
||||
"submenu": {
|
||||
"advanced": "Avanzado",
|
||||
"enabled": "Activado",
|
||||
"enabled": "Habilitado",
|
||||
"mode": "Modo de tiempo",
|
||||
"percent": "Porcentaje",
|
||||
"seconds": "Segundos"
|
||||
}
|
||||
},
|
||||
"download-playlist": "Descargar lista de reproducción",
|
||||
"presets": "Preajustes",
|
||||
"presets": "Ajustes preestablecidos",
|
||||
"skip-existing": "Saltar archivos existentes"
|
||||
},
|
||||
"name": "Descargador",
|
||||
"name": "Gestor de descargas",
|
||||
"renderer": {
|
||||
"can-not-update-progress": "No se puede actualizar el progreso"
|
||||
},
|
||||
@ -483,8 +565,20 @@
|
||||
"button": "Descargar"
|
||||
}
|
||||
},
|
||||
"equalizer": {
|
||||
"description": "Añade un ecualizador al reproductor",
|
||||
"menu": {
|
||||
"presets": {
|
||||
"label": "Ajustes preestablecidos",
|
||||
"list": {
|
||||
"bass-booster": "Amplificador de graves"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Ecualizador"
|
||||
},
|
||||
"exponential-volume": {
|
||||
"description": "Hace que el control deslizante de volumen sea exponencial para que sea más fácil seleccionar volúmenes más bajos.",
|
||||
"description": "Hace que la barra de volumen sea exponencial para que sea más fácil seleccionar volúmenes más bajos.",
|
||||
"name": "Volumen exponencial"
|
||||
},
|
||||
"in-app-menu": {
|
||||
@ -499,19 +593,19 @@
|
||||
"name": "Lumia Stream [Beta]"
|
||||
},
|
||||
"lyrics-genius": {
|
||||
"description": "Añade el soporte para las letras para la mayoría de las canciones",
|
||||
"description": "Añade soporte para letras para la mayoría de las canciones",
|
||||
"menu": {
|
||||
"romanized-lyrics": "Letras Romanizadas"
|
||||
},
|
||||
"name": "Letras Genius",
|
||||
"renderer": {
|
||||
"fetched-lyrics": "Letras recuperadas de Genius"
|
||||
"fetched-lyrics": "Letras obtenidas de Genius"
|
||||
}
|
||||
},
|
||||
"music-together": {
|
||||
"description": "Comparte una lista de reproducción con los demás. Cuando el anfitrión reproduzca una canción, todos los demás escucharán la misma",
|
||||
"dialog": {
|
||||
"enter-host": "Introduzca el ID del host"
|
||||
"enter-host": "Introduzca la ID del host"
|
||||
},
|
||||
"internal": {
|
||||
"save": "Guardar",
|
||||
@ -519,7 +613,7 @@
|
||||
"unknown-user": "Usuario desconocido"
|
||||
},
|
||||
"menu": {
|
||||
"click-to-copy-id": "Copiar el ID del host",
|
||||
"click-to-copy-id": "Copiar la ID del host",
|
||||
"close": "Cerrar Music Together",
|
||||
"connected-users": "Usuarios conectados",
|
||||
"disconnect": "Desactivar Music Together",
|
||||
@ -529,7 +623,7 @@
|
||||
"permission": {
|
||||
"all": "Permite a los invitados controlar la lista de reproducción y el reproductor",
|
||||
"host-only": "Sólo el anfitrión puede controlar la lista de reproducción y el reproductor",
|
||||
"playlist": "Permita que los invitados controlen la lista de reproducción"
|
||||
"playlist": "Permitir que los invitados controlen la lista de reproducción"
|
||||
},
|
||||
"set-permission": "Permiso de control de cambios",
|
||||
"status": {
|
||||
@ -542,11 +636,11 @@
|
||||
"toast": {
|
||||
"add-song-failed": "No se puede añadir la canción",
|
||||
"closed": "Music Together cerrado",
|
||||
"disconnected": "Music Together desconectados",
|
||||
"host-failed": "Fallo el host de Music Together",
|
||||
"id-copied": "ID del host copiado en el portapapeles",
|
||||
"id-copy-failed": "No se ha podido copiar el ID del host en el portapapeles",
|
||||
"join-failed": "Fallo en la unión a Music Together",
|
||||
"disconnected": "Music Together desconectado",
|
||||
"host-failed": "Fallo al hostear Music Together",
|
||||
"id-copied": "ID del host copiada al portapapeles",
|
||||
"id-copy-failed": "No se ha podido copiar la ID del host al portapapeles",
|
||||
"join-failed": "Fallo al unirse a Music Together",
|
||||
"joined": "Unido a Music Together",
|
||||
"permission-changed": "Permiso de Music Together cambiado a \"{{permission}}\"",
|
||||
"remove-song-failed": "Error al eliminar la canción",
|
||||
@ -556,7 +650,15 @@
|
||||
},
|
||||
"navigation": {
|
||||
"description": "Flechas de navegación Siguiente/Atrás directamente integradas en la interfaz, como en tu navegador favorito",
|
||||
"name": "Navegación"
|
||||
"name": "Navegación",
|
||||
"templates": {
|
||||
"back": {
|
||||
"title": "Volver a la página anterior"
|
||||
},
|
||||
"forward": {
|
||||
"title": "Ir a la siguiente página"
|
||||
}
|
||||
}
|
||||
},
|
||||
"no-google-login": {
|
||||
"description": "Eliminar los botones y enlaces de inicio de sesión de Google de la interfaz",
|
||||
@ -580,8 +682,12 @@
|
||||
},
|
||||
"name": "Notificaciones"
|
||||
},
|
||||
"performance-improvement": {
|
||||
"description": "Mejore el rendimiento habilitando scripts experimentales",
|
||||
"name": "Mejora del rendimiento [Beta]"
|
||||
},
|
||||
"picture-in-picture": {
|
||||
"description": "Permite cambiar la aplicación al modo de imagen en imagen",
|
||||
"description": "Permite cambiar la aplicación al modo picture-in-picture",
|
||||
"menu": {
|
||||
"always-on-top": "Siempre encima",
|
||||
"hotkey": {
|
||||
@ -590,17 +696,17 @@
|
||||
"keybind-options": {
|
||||
"hotkey": "Tecla de acceso rápido"
|
||||
},
|
||||
"label": "Elige una tecla de acceso rápido para activar la función de imagen en imagen",
|
||||
"title": "Tecla de acceso directo a imagen en imagen"
|
||||
"label": "Elige una tecla de acceso rápido para activar la función picture-in-picture",
|
||||
"title": "Tecla de acceso directo a picture-in-picture"
|
||||
}
|
||||
},
|
||||
"save-window-position": "Guardar la posición de la ventana",
|
||||
"save-window-size": "Guardar tamaño de la ventana",
|
||||
"use-native-pip": "Utilizar \"Dos imágenes a la vez\" PiP nativo del navegador"
|
||||
"use-native-pip": "Utilizar PiP nativo del navegador"
|
||||
},
|
||||
"name": "Imagen en imagen",
|
||||
"name": "Picture-in-picture",
|
||||
"templates": {
|
||||
"button": "Imagen en imagen"
|
||||
"button": "Picture-in-picture"
|
||||
}
|
||||
},
|
||||
"playback-speed": {
|
||||
@ -611,7 +717,7 @@
|
||||
}
|
||||
},
|
||||
"precise-volume": {
|
||||
"description": "Controla el volumen de manera precisa utilizando la rueda del ratón/teclas de acceso rápido, con una interfaz personalizada y pasos de volumen personalizables",
|
||||
"description": "Controla el volumen de manera precisa utilizando la rueda del ratón/teclas de acceso rápido, con una interfaz personalizada y niveles de volumen personalizables",
|
||||
"menu": {
|
||||
"arrows-shortcuts": "Controles de teclas de flechas locales",
|
||||
"custom-volume-steps": "Establecer niveles de volumen personalizados",
|
||||
@ -628,7 +734,7 @@
|
||||
"title": "Combinaciones de teclas para el volumen"
|
||||
},
|
||||
"volume-steps": {
|
||||
"label": "Escoge los pasos de aumento o disminución del volumen",
|
||||
"label": "Escoge los niveles de aumento o disminución del volumen",
|
||||
"title": "Niveles de volumen"
|
||||
}
|
||||
}
|
||||
@ -644,7 +750,12 @@
|
||||
}
|
||||
},
|
||||
"description": "Permite cambiar la calidad del vídeo con un botón sobre puesto en el vídeo",
|
||||
"name": "Ajustador de calidad de vídeo"
|
||||
"name": "Ajustador de calidad de vídeo",
|
||||
"renderer": {
|
||||
"quality-settings-button": {
|
||||
"label": "Abrir selector de calidad del reproductor"
|
||||
}
|
||||
}
|
||||
},
|
||||
"scrobbler": {
|
||||
"description": "Añadir soporte para scrobbling (last.fm, Listenbrainz, etc.)",
|
||||
@ -663,7 +774,9 @@
|
||||
"listenbrainz": {
|
||||
"token": "Introduzca el token de usuario de ListenBrainz"
|
||||
},
|
||||
"scrobble-other-media": "Scrobble en otros medios"
|
||||
"scrobble-alternative-artist": "Usar artistas alternativos",
|
||||
"scrobble-alternative-title": "Usar títulos alternativos",
|
||||
"scrobble-other-media": "Hacer Scrobble sobre otros medios"
|
||||
},
|
||||
"name": "Scrobbler",
|
||||
"prompt": {
|
||||
@ -680,7 +793,7 @@
|
||||
}
|
||||
},
|
||||
"shortcuts": {
|
||||
"description": "Permite configurar teclas de acceso rápido globales para la reproducción (reproducir/pausa/siguiente/anterior) y desactivar la OSD multimedia anulando las teclas multimedia, activar Ctrl/CMD + F para buscar, activar la compatibilidad con MPRIS de Linux para las teclas multimedia y teclas de acceso rápido personalizadas para usuarios avanzados",
|
||||
"description": "Permite configurar teclas de acceso rápido globales para la reproducción (reproducir/pausa/siguiente/anterior) y desactivar el OSD multimedia anulando las teclas multimedia, activar Ctrl/CMD + F para buscar, activar la compatibilidad con MPRIS de Linux para las teclas multimedia y teclas de acceso rápido personalizadas para usuarios avanzados",
|
||||
"menu": {
|
||||
"override-media-keys": "Anular teclas de medios",
|
||||
"set-keybinds": "Configurar controles globales de canciones"
|
||||
@ -713,8 +826,8 @@
|
||||
"synced-lyrics": {
|
||||
"description": "Proporciona letras de canciones sincronizadas, utilizando proveedores como LRClib.",
|
||||
"errors": {
|
||||
"fetch": "⚠️ - Se ha producido un error al descargar la letra. Por favor, vuelve a intentarlo más tarde.",
|
||||
"not-found": "⚠️ - No se ha encontrado ninguna letra para esta canción."
|
||||
"fetch": "⚠️\tSe produjo un error al obtener la letra.\n\tPor favor, inténtelo de nuevo más tarde.",
|
||||
"not-found": "⚠️ No se han encontrado letras para esta canción."
|
||||
},
|
||||
"menu": {
|
||||
"default-text-string": {
|
||||
@ -724,6 +837,10 @@
|
||||
"line-effect": {
|
||||
"label": "Efecto de la línea",
|
||||
"submenu": {
|
||||
"fancy": {
|
||||
"label": "Elegante",
|
||||
"tooltip": "Usar efectos grandes, similares a los de una aplicación, en la línea actual"
|
||||
},
|
||||
"focus": {
|
||||
"label": "Enfoque",
|
||||
"tooltip": "Mostrar solo la línea actual en blanco"
|
||||
@ -734,18 +851,30 @@
|
||||
},
|
||||
"scale": {
|
||||
"label": "Escala",
|
||||
"tooltip": "Escala de la línea actual"
|
||||
"tooltip": "Escalar la línea actual"
|
||||
}
|
||||
},
|
||||
"tooltip": "Elige el efecto que deseas aplicar a la línea actual"
|
||||
},
|
||||
"precise-timing": {
|
||||
"label": "Haz que la letra esté perfectamente sincronizada",
|
||||
"tooltip": "Calcular al milisegundo la visualización de la línea siguiente (puede tener un pequeño impacto en el rendimiento)"
|
||||
"tooltip": "Calcular al milisegundo la visualización de la siguiente línea (puede tener un pequeño impacto en el rendimiento)"
|
||||
},
|
||||
"preferred-provider": {
|
||||
"label": "Proveedor preferido",
|
||||
"none": {
|
||||
"label": "Ninguno",
|
||||
"tooltip": "Ningún proveedor preferido"
|
||||
},
|
||||
"tooltip": "Elige el proveedor predeterminado que deseas usar"
|
||||
},
|
||||
"romanization": {
|
||||
"label": "Romanizar letras",
|
||||
"tooltip": "Si la letra está en un idioma diferente, intenta mostrar una versión en latín."
|
||||
},
|
||||
"show-lyrics-even-if-inexact": {
|
||||
"label": "Mostrar la letra aunque sea inexacta",
|
||||
"tooltip": "Si no se encuentra la canción, el complemento vuelve a intentarlo con una búsqueda diferente.\nEl resultado del segundo intento puede no ser exacto."
|
||||
"tooltip": "Si no se encuentra la canción, el plugin vuelve a intentarlo con una búsqueda diferente.\nEl resultado del segundo intento puede no ser exacto."
|
||||
},
|
||||
"show-time-codes": {
|
||||
"label": "Visualización del código de tiempo",
|
||||
@ -754,35 +883,60 @@
|
||||
},
|
||||
"name": "Letras sincronizadas",
|
||||
"refetch-btn": {
|
||||
"fetching": "Recuperando...",
|
||||
"fetching": "Obteniendo...",
|
||||
"normal": "Volver a buscar letras"
|
||||
},
|
||||
"warnings": {
|
||||
"duration-mismatch": "⚠️ - La letra puede estar desincronizada debido a un desajuste en la duración.",
|
||||
"inexact": "⚠️ - La letra de esta canción puede no ser exacta",
|
||||
"instrumental": "⚠️ - Se trata de una canción instrumental"
|
||||
"instrumental": "⚠️ - Esta es una canción instrumental"
|
||||
}
|
||||
},
|
||||
"taskbar-mediacontrol": {
|
||||
"description": "Controla la reproducción desde la barra de tareas de Windows",
|
||||
"name": "Control de medios de la barra de tareas"
|
||||
"name": "Control de medios desde la barra de tareas"
|
||||
},
|
||||
"touchbar": {
|
||||
"description": "Añade un widget TouchBar para los usuarios de macOS",
|
||||
"name": "TouchBar"
|
||||
},
|
||||
"transparent-player": {
|
||||
"description": "Hace que la ventana de la aplicación sea transparente",
|
||||
"menu": {
|
||||
"opacity": {
|
||||
"label": "Opacidad",
|
||||
"submenu": {
|
||||
"percent": "{{opacity}}%"
|
||||
}
|
||||
},
|
||||
"type": {
|
||||
"label": "Tipo",
|
||||
"submenu": {
|
||||
"acrylic": "Acrílico",
|
||||
"mica": "Mica",
|
||||
"none": "Ninguno",
|
||||
"tabbed": "Con pestañas"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Reproductor transparente"
|
||||
},
|
||||
"tuna-obs": {
|
||||
"description": "Integración con el complemento Tuna de OBS",
|
||||
"name": "Tuna OBS"
|
||||
},
|
||||
"unobtrusive-player": {
|
||||
"description": "Evita que el reproductor aparezca al reproducir una canción",
|
||||
"name": "Reproductor discreto"
|
||||
},
|
||||
"video-toggle": {
|
||||
"description": "Añade un botón para cambiar entre el modo Vídeo/Canción. también puede eliminar opcionalmente toda la pestaña de vídeo",
|
||||
"description": "Añade un botón para cambiar entre el modo Vídeo/Canción. También puede eliminar opcionalmente toda la pestaña de vídeo",
|
||||
"menu": {
|
||||
"align": {
|
||||
"label": "Alineación",
|
||||
"submenu": {
|
||||
"left": "Izquierda",
|
||||
"middle": "Medio",
|
||||
"middle": "Centro",
|
||||
"right": "Derecha"
|
||||
}
|
||||
},
|
||||
@ -798,7 +952,8 @@
|
||||
},
|
||||
"name": "Alternador de vídeo",
|
||||
"templates": {
|
||||
"button": "Canción"
|
||||
"button-song": "Canción",
|
||||
"button-video": "Vídeo"
|
||||
}
|
||||
},
|
||||
"visualizer": {
|
||||
|
||||
@ -31,6 +31,15 @@
|
||||
},
|
||||
"theme": {
|
||||
"css-file-not-found": "CSS faili „{{cssFile}}“ pole olemas, seega eirame eelistust"
|
||||
},
|
||||
"unresponsive": {
|
||||
"details": "Tõrge ei vasta!\n{{error}}"
|
||||
},
|
||||
"when-ready": {
|
||||
"clearing-cache-after-20s": "Programmi vahemälu kustutamine"
|
||||
},
|
||||
"window": {
|
||||
"tried-to-render-offscreen": "Akent prooviti renderdada väljaspool ekraani, windowSize={{windowSize}}, displaySize={{displaySize}}, position={{position}}"
|
||||
}
|
||||
},
|
||||
"dialog": {
|
||||
@ -53,10 +62,24 @@
|
||||
"quit": "Välju",
|
||||
"relaunch": "Käivita uuesti",
|
||||
"wait": "Oota"
|
||||
}
|
||||
},
|
||||
"detail": "Vabandame ebamugavuste pärast! Palun vali kuidas jätkata:",
|
||||
"message": "Rakendus ei vasta ega reageeri",
|
||||
"title": "Aken ei vasta ega reageeri"
|
||||
},
|
||||
"update-available": {
|
||||
"buttons": {
|
||||
"disable": "Lülita uuendused välja",
|
||||
"download": "Laadi alla",
|
||||
"ok": "Sobib"
|
||||
},
|
||||
"detail": "Saadaval on uus versioon, ning seda saad alla laadida siit {{downloadLink}}",
|
||||
"message": "Uus versioon on saadaval",
|
||||
"title": "Rakenduse uuendus on saadaval"
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"about": "Rakenduse teave",
|
||||
"navigation": {
|
||||
"label": "Liikumine",
|
||||
"submenu": {
|
||||
@ -67,12 +90,111 @@
|
||||
"restart": "Käivita rakendus uuesti"
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"label": "Seadistused",
|
||||
"submenu": {
|
||||
"advanced-options": {
|
||||
"label": "Lisaseadistused",
|
||||
"submenu": {
|
||||
"auto-reset-app-cache": "Rakenduse käivitamisel lähtesta puhverdatud andmed",
|
||||
"disable-hardware-acceleration": "Lülita raudvaraline kiirendamine välja",
|
||||
"edit-config-json": "Muuda config.json faili",
|
||||
"override-user-agent": "Jõudlusta User-Agent",
|
||||
"restart-on-config-changes": "Taaskäivita pärast konfiguratsiooni muutmist",
|
||||
"set-proxy": {
|
||||
"label": "Määra proxy",
|
||||
"prompt": {
|
||||
"label": "Sisesta proxy aadress: (jäta täitmata, et välja lülitada)",
|
||||
"placeholder": "Näide: SOCKS5://127.0.0.1:9999",
|
||||
"title": "Määra proxy"
|
||||
}
|
||||
},
|
||||
"toggle-dev-tools": "Lülita sisse arendaja tööriistad"
|
||||
}
|
||||
},
|
||||
"always-on-top": "Alati esiplaanil",
|
||||
"auto-update": "Automaatsed uuendused",
|
||||
"hide-menu": {
|
||||
"dialog": {
|
||||
"message": "Järgmisel käivitamisel jääb menüü peidetuks, kasutage [Alt] klahvi, et näidata (või [`], kui kasutate rakendusesisest menüüd)",
|
||||
"title": "Menüü peitmine on sisse lülitatud"
|
||||
},
|
||||
"label": "Peida menüü"
|
||||
},
|
||||
"language": {
|
||||
"dialog": {
|
||||
"message": "Keele muutmine jõustub peale uuesti käivitamist",
|
||||
"title": "Keel on muutunud"
|
||||
},
|
||||
"label": "Keel",
|
||||
"submenu": {
|
||||
"to-help-translate": "Soovid aidata tõlkimisel? Klõpsi siin"
|
||||
}
|
||||
},
|
||||
"resume-on-start": "Rakenduse käivitamisel jätka viimatiesitatud loo esitamist",
|
||||
"single-instance-lock": "Ühe instantsi lukk",
|
||||
"start-at-login": "Käivita sisselogimisel",
|
||||
"starting-page": {
|
||||
"label": "Avaleht",
|
||||
"unset": "Määramata"
|
||||
},
|
||||
"tray": {
|
||||
"label": "Trey",
|
||||
"submenu": {
|
||||
"disabled": "Välja lülitatud",
|
||||
"enabled-and-hide-app": "Sisse lülitatud ja rakendus peidetud",
|
||||
"enabled-and-show-app": "Sisse lülitatud ja rakendus nähtav",
|
||||
"play-pause-on-click": "Mängi/Peata klõpsates"
|
||||
}
|
||||
},
|
||||
"visual-tweaks": {
|
||||
"label": "Visuaalsed muudatused",
|
||||
"submenu": {
|
||||
"custom-window-title": {
|
||||
"label": "Kohandatud akna tiitel",
|
||||
"prompt": {
|
||||
"label": "Sisesta kohandatud akna tiitel: (jäta täitmata, et välja lülitada)",
|
||||
"placeholder": "Näide: {{applicationName}}"
|
||||
}
|
||||
},
|
||||
"like-buttons": {
|
||||
"default": "Vaikimisi",
|
||||
"force-show": "Sunni näitama",
|
||||
"hide": "Peida",
|
||||
"label": "Meeldib nupud"
|
||||
},
|
||||
"remove-upgrade-button": "Eemalda upgrade nupp",
|
||||
"theme": {
|
||||
"dialog": {
|
||||
"button": {
|
||||
"cancel": "Katkesta",
|
||||
"remove": "Eemalda"
|
||||
},
|
||||
"remove-theme": "Kas oled kindel, et soovid enda loodud kujunduse eemaldada?",
|
||||
"remove-theme-message": "Sellega saab sinu loodud kujundus eemdladatud"
|
||||
},
|
||||
"label": "Kujundus",
|
||||
"submenu": {
|
||||
"import-css-file": "Impordi kohandatud CSS fail",
|
||||
"no-theme": "Ilma kujunduseta"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"enabled": "Kasutusel",
|
||||
"label": "Lisamoodulid",
|
||||
"new": "UUS"
|
||||
},
|
||||
"view": {
|
||||
"label": "Vaata",
|
||||
"submenu": {
|
||||
"force-reload": "Laadi sundkorras uuesti",
|
||||
"reload": "Laadi uuesti",
|
||||
"reset-zoom": "Tegelik suurus",
|
||||
"toggle-fullscreen": "Lülita täisekraanivaade sisse/välja",
|
||||
"zoom-in": "Suumi sisse",
|
||||
"zoom-out": "Suumi välja"
|
||||
}
|
||||
@ -86,8 +208,8 @@
|
||||
"restart": "Käivita rakendus uuesti",
|
||||
"show": "Näita akent",
|
||||
"tooltip": {
|
||||
"default": "YouTube Music",
|
||||
"with-song-info": "YouTube Music: {{artist}} - {{title}}"
|
||||
"default": "{{applicationName}}",
|
||||
"with-song-info": "{{applicationName}}: {{artist}} - {{title}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -103,8 +225,28 @@
|
||||
},
|
||||
"name": "Reklaamiblokeerija"
|
||||
},
|
||||
"ambient-mode": {
|
||||
"album-actions": {
|
||||
"description": "Lisab Undislike, Ebameeldiv, Meeldiv ja Unlike nupud selle rakendamiseks kõikidele loendisse või albumisse kuuluvatele lauludele.",
|
||||
"name": "Albumi aktsioonid"
|
||||
},
|
||||
"album-color-theme": {
|
||||
"description": "Rakendab dünaamilist teemat ja visuaalseid efekte, mis põhinevad albumi värvipalettil",
|
||||
"menu": {
|
||||
"color-mix-ratio": {
|
||||
"label": "Värvide segamissuhe",
|
||||
"submenu": {
|
||||
"percent": "{{suhe}}%"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Albumi värviteema"
|
||||
},
|
||||
"ambient-mode": {
|
||||
"description": "Rakendab valgusefekti, projitseerides videost õrnad värvid ekraani taustale",
|
||||
"menu": {
|
||||
"blur-amount": {
|
||||
"label": "Hägusus"
|
||||
},
|
||||
"opacity": {
|
||||
"submenu": {
|
||||
"percent": "{{opacity}}%"
|
||||
@ -115,6 +257,12 @@
|
||||
"submenu": {
|
||||
"pixels": "{{quality}} pikslit"
|
||||
}
|
||||
},
|
||||
"size": {
|
||||
"label": "Suurus",
|
||||
"submenu": {
|
||||
"percent": "{{size}}%"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -135,6 +283,23 @@
|
||||
"navigation": {
|
||||
"name": "Liikumine"
|
||||
},
|
||||
"no-google-login": {
|
||||
"description": "Eemalda kasutajaliidesest Google'i sisselogimisnupud",
|
||||
"name": "Elu ilma Google'i sisselogimiseta"
|
||||
},
|
||||
"quality-changer": {
|
||||
"backend": {
|
||||
"dialog": {
|
||||
"quality-changer": {
|
||||
"detail": "Praegune kvaliteet: {{quality}}",
|
||||
"message": "Vali video kvaliteet:",
|
||||
"title": "Videokvaliteedi valik"
|
||||
}
|
||||
}
|
||||
},
|
||||
"description": "Võimaldab muuta video kvaliteeti nupust, mis asub video ülekattes",
|
||||
"name": "Videokvaliteedi muutja"
|
||||
},
|
||||
"scrobbler": {
|
||||
"description": "Lisa kraasimise tugi (last.fm, Listenbrainz, jne)",
|
||||
"dialog": {
|
||||
|
||||
7
src/i18n/resources/eu.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"language": {
|
||||
"code": "eu",
|
||||
"local-name": "Euskara",
|
||||
"name": "Basque"
|
||||
}
|
||||
}
|
||||
@ -2,7 +2,7 @@
|
||||
"common": {
|
||||
"console": {
|
||||
"plugins": {
|
||||
"execute-failed": "اجرای افزونه {{pluginName}}::{{contextName}} با خطا مواجه شد",
|
||||
"execute-failed": "اجراى {{اسمزمىنه}}::{{اسمپلاگىن}} با خطا مواجه شد",
|
||||
"executed-at-ms": "افزونه {{pluginName}}::{{contextName}} در {{ms}} میلیثانیه اجرا شد",
|
||||
"initialize-failed": "افزونه \"{{pluginName}}\" با خطا در حین مقداردهی اولیه مواجه شد",
|
||||
"load-all": "در حال بارگذاری تمامی افزونهها",
|
||||
@ -81,12 +81,12 @@
|
||||
"menu": {
|
||||
"about": "درباره",
|
||||
"navigation": {
|
||||
"label": "ناوبری",
|
||||
"label": "کنترلهای رابط",
|
||||
"submenu": {
|
||||
"copy-current-url": "کپی کردن URL فعلی",
|
||||
"go-back": "بازگشت",
|
||||
"go-forward": "حرکت به جلو",
|
||||
"quit": "خروجی",
|
||||
"copy-current-url": "کپی کردن لینک صفحه فعلی",
|
||||
"go-back": "صفحه قبل",
|
||||
"go-forward": "صفحه بعدی",
|
||||
"quit": "خروج از برنامه",
|
||||
"restart": "راهاندازی مجدد برنامه"
|
||||
}
|
||||
},
|
||||
@ -98,8 +98,8 @@
|
||||
"submenu": {
|
||||
"auto-reset-app-cache": "ریست کردن حافظه کش برنامه هنگام شروع",
|
||||
"disable-hardware-acceleration": "غیرفعال کردن شتاب سختافزاری",
|
||||
"edit-config-json": "ویرایش config.json",
|
||||
"override-user-agent": "تغییر User-Agent",
|
||||
"edit-config-json": "config.json ویرایش",
|
||||
"override-user-agent": "User-Agent تغییر",
|
||||
"restart-on-config-changes": "راهاندازی مجدد در صورت تغییرات در پیکربندی",
|
||||
"set-proxy": {
|
||||
"label": "تنظیم پراکسی",
|
||||
@ -109,7 +109,7 @@
|
||||
"title": "تنظیم پراکسی"
|
||||
}
|
||||
},
|
||||
"toggle-dev-tools": "باز کردن DevTools"
|
||||
"toggle-dev-tools": "DevTools باز کردن"
|
||||
}
|
||||
},
|
||||
"always-on-top": "همیشه در بالا",
|
||||
@ -150,6 +150,13 @@
|
||||
"visual-tweaks": {
|
||||
"label": "تغییرات ظاهری",
|
||||
"submenu": {
|
||||
"custom-window-title": {
|
||||
"label": "عنوان پنجره سفارشى",
|
||||
"prompt": {
|
||||
"label": "عنوان پنجره سفارشى را وارد کنىد: (خالى بزارىد تا غىرفعال شود)",
|
||||
"placeholder": "مثال :{{applicationName}}"
|
||||
}
|
||||
},
|
||||
"like-buttons": {
|
||||
"default": "پیشفرض",
|
||||
"force-show": "اجبار به نمایش",
|
||||
@ -168,7 +175,7 @@
|
||||
},
|
||||
"label": "تم",
|
||||
"submenu": {
|
||||
"import-css-file": "وارد کردن فایل CSS سفارشی",
|
||||
"import-css-file": "سفارشی CSS وارد کردن فایل",
|
||||
"no-theme": "بدون تم"
|
||||
}
|
||||
}
|
||||
@ -177,7 +184,7 @@
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"enabled": "فعال",
|
||||
"enabled": "فعال/غیرفعال کردن",
|
||||
"label": "افزونهها",
|
||||
"new": "جدید"
|
||||
},
|
||||
@ -187,7 +194,7 @@
|
||||
"force-reload": "اجبار به بارگذاری مجدد",
|
||||
"reload": "بارگذاری مجدد",
|
||||
"reset-zoom": "اندازه واقعی",
|
||||
"toggle-fullscreen": "تغییر به تمامصفحه",
|
||||
"toggle-fullscreen": "تغییر به تمام صفحه",
|
||||
"zoom-in": "بزرگنمایی",
|
||||
"zoom-out": "کوچکنمایی"
|
||||
}
|
||||
@ -197,12 +204,12 @@
|
||||
"next": "بعدی",
|
||||
"play-pause": "پخش/توقف",
|
||||
"previous": "قبلی",
|
||||
"quit": "خروجی",
|
||||
"quit": "خروج",
|
||||
"restart": "راهاندازی مجدد برنامه",
|
||||
"show": "نمایش پنجره",
|
||||
"tooltip": {
|
||||
"default": "یوتیوب موسیقی",
|
||||
"with-song-info": "یوتیوب موسیقی: {{artist}} - {{title}}"
|
||||
"default": "{{applicationName}}",
|
||||
"with-song-info": "{{applicationName}}: {{artist}} - {{title}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -219,14 +226,17 @@
|
||||
"name": "مسدودکننده تبلیغات"
|
||||
},
|
||||
"album-actions": {
|
||||
"description": "افزودن دکمههای \"برگرفتن ناپسند\"، \"ناپسند\"، \"پسند\"، و \"حذف پسند\" برای اعمال آنها روی همه آهنگها در یک فهرست پخش یا آلبوم",
|
||||
"description": "اضافه کردن دکمههای عدم پسندیدن، پسندیدن و لغو پسندیدن برای اعمال این تغییرات به تمامی آهنگهای یک فهرست پخش یا آلبوم",
|
||||
"name": "عملیات آلبوم"
|
||||
},
|
||||
"album-color-theme": {
|
||||
"description": "اعمال یک تم پویا و جلوههای بصری بر اساس پالت رنگ آلبوم",
|
||||
"menu": {
|
||||
"color-mix-ratio": {
|
||||
"label": "نسبت ترکیب رنگ"
|
||||
"label": "نسبت ترکیب رنگ",
|
||||
"submenu": {
|
||||
"percent": "{{ratio}}%"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "تم رنگ آلبوم"
|
||||
@ -241,10 +251,16 @@
|
||||
}
|
||||
},
|
||||
"buffer": {
|
||||
"label": "بافر"
|
||||
"label": "بافر",
|
||||
"submenu": {
|
||||
"buffer": "{{buffer}}"
|
||||
}
|
||||
},
|
||||
"opacity": {
|
||||
"label": "شفافیت"
|
||||
"label": "شفافیت",
|
||||
"submenu": {
|
||||
"percent": "{{opacity}}%"
|
||||
}
|
||||
},
|
||||
"quality": {
|
||||
"label": "کیفیت",
|
||||
@ -253,7 +269,10 @@
|
||||
}
|
||||
},
|
||||
"size": {
|
||||
"label": "اندازه"
|
||||
"label": "اندازه",
|
||||
"submenu": {
|
||||
"percent": "{{size}}%"
|
||||
}
|
||||
},
|
||||
"smoothness-transition": {
|
||||
"label": "انتقال نرمی",
|
||||
@ -267,20 +286,110 @@
|
||||
},
|
||||
"name": "حالت محیطی"
|
||||
},
|
||||
"amuse": {
|
||||
"description": "حالا ویجت Amuse از {{applicationName}} هم پشتیبانی میکنه! (توسط 6K Labs)",
|
||||
"name": "Amuse",
|
||||
"response": {
|
||||
"query": "سرور Amuse فعال است. برای دریافت اطلاعات آهنگ، از آدرس /query استفاده کنید."
|
||||
}
|
||||
},
|
||||
"api-server": {
|
||||
"description": "برای کنترل پخشکننده API افزودن یک سرور",
|
||||
"dialog": {
|
||||
"request": {
|
||||
"buttons": {
|
||||
"allow": "اجازه",
|
||||
"deny": "رد کردن"
|
||||
},
|
||||
"message": "اجازه دادن به {{ID}} ({{origin}}) برای دسترسی به API؟",
|
||||
"title": "درخواست مجوز API"
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"auth-strategy": {
|
||||
"label": "استراتژی مجوز",
|
||||
"submenu": {
|
||||
"auth-at-first": {
|
||||
"label": "مجوز در اولین درخواست"
|
||||
},
|
||||
"none": {
|
||||
"label": "بدون نیاز به مجوز"
|
||||
}
|
||||
}
|
||||
},
|
||||
"hostname": {
|
||||
"label": "نام میزبان"
|
||||
},
|
||||
"https": {
|
||||
"label": "HTTPS و گواهینامهها",
|
||||
"submenu": {
|
||||
"cert": {
|
||||
"dialogTitle": "پرونده گواهینامه HTTPS را انتخاب کنید",
|
||||
"label": "پرونده گواهینامه (crt/.pem.)"
|
||||
},
|
||||
"enable-https": {
|
||||
"label": "فعال کردن HTTPS"
|
||||
},
|
||||
"key": {
|
||||
"dialogTitle": "پرونده کلید خصوصی HTTPS را انتخاب کنید",
|
||||
"label": "پرونده کلید خصوصی (key/.pem)"
|
||||
}
|
||||
}
|
||||
},
|
||||
"port": {
|
||||
"label": "پورت"
|
||||
}
|
||||
},
|
||||
"name": "[بتا]API سرور",
|
||||
"prompt": {
|
||||
"hostname": {
|
||||
"label": "وارد کنید (مثل 0.0.0.0): API نام میزبان را برای سرور",
|
||||
"title": "نام میزبان"
|
||||
},
|
||||
"port": {
|
||||
"label": "وارد کنید: API پورت را برای سرور",
|
||||
"title": "پورت"
|
||||
}
|
||||
}
|
||||
},
|
||||
"audio-compressor": {
|
||||
"description": "اعمال فشردهسازی به صدا (کاهش حجم بلندترین بخشهای سیگنال و افزایش حجم بخشهای نرمتر)",
|
||||
"name": "فشردهساز صدا"
|
||||
},
|
||||
"auth-proxy-adapter": {
|
||||
"description": "پشتیبانی برای استفاده از سرویسهای پروکسی احراز هویت",
|
||||
"menu": {
|
||||
"disable": "غیرفعال کردن آداپتور پروکسی",
|
||||
"enable": "فعال کردن آداپتور پروکسی",
|
||||
"hostname": {
|
||||
"label": "نام میزبان"
|
||||
},
|
||||
"port": {
|
||||
"label": "پورت"
|
||||
}
|
||||
},
|
||||
"name": "آداپتور پروکسی احراز هویت",
|
||||
"prompt": {
|
||||
"hostname": {
|
||||
"label": "نام میزبان را برای سرور پروکسی محلی وارد کنید (نیاز به راه اندازی مجدد دارد):",
|
||||
"title": "پروکسی نام میزبان"
|
||||
},
|
||||
"port": {
|
||||
"label": "پورت مربوط به پروکسی سرور محلی را وارد کنید(نیاز به راه اندازی مجدد دارد):",
|
||||
"title": "پورت پروکسی"
|
||||
}
|
||||
}
|
||||
},
|
||||
"blur-nav-bar": {
|
||||
"description": "شفاف و محو کردن نوار ناوبری",
|
||||
"name": "محو کردن نوار ناوبری"
|
||||
"description": "شفاف و محو کردن نوار کنترل",
|
||||
"name": "محو کردن نوار کنترل"
|
||||
},
|
||||
"bypass-age-restrictions": {
|
||||
"description": "دور زدن تأیید سن یوتیوب",
|
||||
"description": "دور زدن تأیید سن مىوزىک پلىر",
|
||||
"name": "دور زدن محدودیتهای سنی"
|
||||
},
|
||||
"captions-selector": {
|
||||
"description": "انتخاب زیرنویس برای آهنگهای یوتیوب موسیقی",
|
||||
"description": "انتخاب زیرنویس برای آهنگهای پىر دسکتاپ",
|
||||
"menu": {
|
||||
"autoload": "به طور خودکار انتخاب آخرین زیرنویس استفاده شده",
|
||||
"disable-captions": "بدون زیرنویس به صورت پیشفرض"
|
||||
@ -295,6 +404,11 @@
|
||||
},
|
||||
"templates": {
|
||||
"title": "باز کردن انتخابکننده زیرنویس"
|
||||
},
|
||||
"toast": {
|
||||
"caption-changed": "زیرنویس تغییر کرد به {{language}}",
|
||||
"caption-disabled": "زیرنویس غیرفعال شده",
|
||||
"no-captions": "برای این آهنگ زیرنویسی موجود نیست"
|
||||
}
|
||||
},
|
||||
"compact-sidebar": {
|
||||
@ -323,6 +437,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"custom-output-device": {
|
||||
"description": "ىک اسپىکر براى پخش آهنگها انتخاب کنىد",
|
||||
"menu": {
|
||||
"device-selector": "دستگاه را انتخاب کنىد"
|
||||
},
|
||||
"name": "اسپىکر دلخواه",
|
||||
"prompt": {
|
||||
"device-selector": {
|
||||
"label": "اسپىکر دلخواه را انتخاب کنىد",
|
||||
"title": "اسپىکر دلخواهتان را انتخاب کنىد"
|
||||
}
|
||||
}
|
||||
},
|
||||
"disable-autoplay": {
|
||||
"description": "شروع آهنگ در حالت \"توقف\"",
|
||||
"menu": {
|
||||
@ -332,27 +459,35 @@
|
||||
},
|
||||
"discord": {
|
||||
"backend": {
|
||||
"already-connected": "تلاش برای اتصال با اتصال فعال",
|
||||
"connected": "متصل به Discord",
|
||||
"disconnected": "قطع اتصال از Discord"
|
||||
"already-connected": "تلاش برای برقراری ارتباط با اتصال فعال",
|
||||
"connected": "متصل به دیسکورد",
|
||||
"disconnected": "ارتباط با دیسکورد قطع شد"
|
||||
},
|
||||
"description": "نمایش آنچه گوش میدهید به دوستان با Rich Presence",
|
||||
"description": "Rich Presence نمایش آنچه گوش میدهید به دوستان با",
|
||||
"menu": {
|
||||
"auto-reconnect": "اتصال خودکار مجدد",
|
||||
"auto-reconnect": "اتصال خودکار",
|
||||
"clear-activity": "پاک کردن فعالیت",
|
||||
"clear-activity-after-timeout": "پاک کردن فعالیت پس از تایماوت",
|
||||
"connected": "متصل",
|
||||
"disconnected": "قطع شده",
|
||||
"clear-activity-after-timeout": "حذف فعالیت پس از اتمام زمان تعیینشده",
|
||||
"connected": "اتصال برقرار شد",
|
||||
"disconnected": "اتصال قطع شد",
|
||||
"hide-duration-left": "مخفی کردن مدت زمان باقیمانده",
|
||||
"hide-github-button": "مخفی کردن دکمه لینک GitHub",
|
||||
"play-on-youtube-music": "پخش در یوتیوب موسیقی",
|
||||
"set-inactivity-timeout": "تنظیم تایماوت عدم فعالیت"
|
||||
"hide-github-button": "مخفی کردن دکمه لینک گیت هاب",
|
||||
"play-on-application": "پخش در یوتیوب موزیک",
|
||||
"set-inactivity-timeout": "تنظیم زمان عدم فعالیت",
|
||||
"set-status-display-type": {
|
||||
"label": "متن وضعىت",
|
||||
"submenu": {
|
||||
"application": "به پىر دسکتاپ گوش مىکند",
|
||||
"artist": "به {artist} گوش مىکند",
|
||||
"title": "به {song title} گوش مىکند"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Rich Presence در Discord",
|
||||
"name": "Discord Rich Presence",
|
||||
"prompt": {
|
||||
"set-inactivity-timeout": {
|
||||
"label": "ورود تایماوت عدم فعالیت به ثانیه:",
|
||||
"title": "تنظیم تایماوت عدم فعالیت"
|
||||
"label": "محدودیت زمان عدم فعالیت را به ثانیه وارد کنید:",
|
||||
"title": "تنظیم زمان عدم فعالیت"
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -389,9 +524,443 @@
|
||||
"getting-playlist-info": "در حال دریافت اطلاعات فهرست پخش…",
|
||||
"loading": "در حال بارگذاری…",
|
||||
"playlist-has-only-one-song": "فهرست پخش فقط یک آیتم دارد، به طور مستقیم دانلود میشود",
|
||||
"playlist-id-not-found": "شناسه فهرست پخش یافت نشد"
|
||||
"playlist-id-not-found": "شناسه فهرست پخش یافت نشد",
|
||||
"playlist-is-empty": "فهرست پخش خالی است",
|
||||
"playlist-is-mix-or-private": "خطا در دریافت اطلاعات فهرست پخش: اطمینان حاصل کنید که فهرست پخش خصوصی یا \"مختص شما\" نباشد\n\n{{error}}",
|
||||
"preparing-file": "در حال آمادهسازی فایل…",
|
||||
"saving": "در حال ذخیرهسازی…",
|
||||
"trying-to-get-playlist-id": "تلاش برای دریافت شناسه فهرست پخش: {{playlistId}}",
|
||||
"video-id-not-found": "ویدئو یافت نشد",
|
||||
"writing-id3": "در حال نوشتن تگهای ID3…"
|
||||
}
|
||||
},
|
||||
"description": "دانلود MP3 / صدای منبع به طور مستقیم از رابط",
|
||||
"menu": {
|
||||
"choose-download-folder": "انتخاب پوشه دانلود",
|
||||
"download-finish-settings": {
|
||||
"label": "دانلود پس از پایان",
|
||||
"prompt": {
|
||||
"last-percent": "پس از x درصد",
|
||||
"last-seconds": "آخرین x ثانیه",
|
||||
"title": "پیکربندی زمان دانلود"
|
||||
},
|
||||
"submenu": {
|
||||
"advanced": "پیشرفته",
|
||||
"enabled": "فعال",
|
||||
"mode": "حالت زمان",
|
||||
"percent": "درصد",
|
||||
"seconds": "ثانیه"
|
||||
}
|
||||
},
|
||||
"download-playlist": "دانلود فهرست پخش",
|
||||
"presets": "پیشتنظیمها",
|
||||
"skip-existing": "رد کردن فایلهای موجود"
|
||||
},
|
||||
"name": "دانلودر",
|
||||
"renderer": {
|
||||
"can-not-update-progress": "امکان بهروزرسانی پیشرفت نیست"
|
||||
},
|
||||
"templates": {
|
||||
"button": "دانلود"
|
||||
}
|
||||
},
|
||||
"equalizer": {
|
||||
"description": "اضافه کردن یک اکولایزر به پخشکننده",
|
||||
"menu": {
|
||||
"presets": {
|
||||
"label": "تنظیمات از پیش تعیین شده",
|
||||
"list": {
|
||||
"bass-booster": "تقویتکننده باس صدا"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "اکولایزر"
|
||||
},
|
||||
"exponential-volume": {
|
||||
"description": "نوار لغزنده حجم را به صورت نمایی میسازد تا انتخاب حجمهای پایینتر آسانتر شود.",
|
||||
"name": "حجم نمایی"
|
||||
},
|
||||
"in-app-menu": {
|
||||
"description": "منوها را به صورت جذاب، تاریک یا با رنگ آلبوم نمایش میدهد",
|
||||
"menu": {
|
||||
"hide-dom-window-controls": "کنترلهای پنجره DOM را مخفی کن"
|
||||
},
|
||||
"name": "منوی داخل برنامه"
|
||||
},
|
||||
"lumiastream": {
|
||||
"description": "Lumia Stream افزودن پشتیبانی از",
|
||||
"name": "Lumia Stream [بتا]"
|
||||
},
|
||||
"lyrics-genius": {
|
||||
"description": "افزودن متن ترانه پشتیبان برای اکثر ترانه ها",
|
||||
"menu": {
|
||||
"romanized-lyrics": "الفبای لاتین برای آهنگهایی با الفبای شرقی (فینگلیش)"
|
||||
},
|
||||
"name": "Genius متن آهنگ",
|
||||
"renderer": {
|
||||
"fetched-lyrics": "بازیابی شد Genius متن ترانه توسط"
|
||||
}
|
||||
},
|
||||
"music-together": {
|
||||
"description": "اشتراکگذاری فهرست پخش با دیگران. وقتی میزبان آهنگی را پخش میکند، همه بقیه همان آهنگ را میشنوند",
|
||||
"dialog": {
|
||||
"enter-host": "شناسه میزبان را وارد کنید"
|
||||
},
|
||||
"internal": {
|
||||
"save": "ذخیره",
|
||||
"track-source": "منبع آهنگ",
|
||||
"unknown-user": "کاربر ناشناس"
|
||||
},
|
||||
"menu": {
|
||||
"click-to-copy-id": "کپی کردن شناسه میزبان",
|
||||
"close": "بستن Music Together",
|
||||
"connected-users": "کاربران متصل",
|
||||
"disconnect": "قطع اتصال Music Together",
|
||||
"empty-user": "هیچ کاربر متصلی وجود ندارد",
|
||||
"host": "میزبان Music Together",
|
||||
"join": "پیوستن به Music Together",
|
||||
"permission": {
|
||||
"all": "اجازه دادن به مهمانان برای کنترل فهرست پخش و پخشکننده",
|
||||
"host-only": "فقط میزبان میتواند فهرست پخش و پخشکننده را کنترل کند",
|
||||
"playlist": "اجازه دادن به مهمانان برای کنترل فهرست پخش"
|
||||
},
|
||||
"set-permission": "تغییر مجوز کنترل",
|
||||
"status": {
|
||||
"disconnected": "قطع اتصال",
|
||||
"guest": "متصل به عنوان مهمان",
|
||||
"host": "متصل به عنوان میزبان"
|
||||
}
|
||||
},
|
||||
"name": "Music Together [بتا]",
|
||||
"toast": {
|
||||
"add-song-failed": "افزودن آهنگ با شکست مواجه شد",
|
||||
"closed": "بسته شد Music Together",
|
||||
"disconnected": "Music Together قطع اتصال",
|
||||
"host-failed": "با شکست مواجه شد Music Together میزبانی",
|
||||
"id-copied": "شناسه میزبان به کلیپبورد کپی شد",
|
||||
"id-copy-failed": "کپی شناسه میزبان به کلیپبورد با شکست مواجه شد",
|
||||
"join-failed": "با شکست مواجه شد Music Together پیوستن به",
|
||||
"joined": "پیوست Music Together به",
|
||||
"permission-changed": "مجوز Music Together به \"{{permission}}\" تغییر یافت",
|
||||
"remove-song-failed": "حذف آهنگ با شکست مواجه شد",
|
||||
"user-connected": "{{name}} به Music Together پیوست",
|
||||
"user-disconnected": "{{name}} Music Together را ترک کرد"
|
||||
}
|
||||
},
|
||||
"navigation": {
|
||||
"description": "بعدی/قبلی به طور مستقیم در رابط یکپارچه شدهاند، مانند مرورگر مورد علاقه شما",
|
||||
"name": "کنترل های رابط",
|
||||
"templates": {
|
||||
"back": {
|
||||
"title": "برو به صفحه قبل"
|
||||
},
|
||||
"forward": {
|
||||
"title": "برو به صفحه بعد"
|
||||
}
|
||||
}
|
||||
},
|
||||
"no-google-login": {
|
||||
"description": "حذف دکمهها و لینکهای ورود به گوگل از رابط کاربری",
|
||||
"name": "بدون ورود به گوگل"
|
||||
},
|
||||
"notifications": {
|
||||
"description": "نمایش اعلان هنگامی که آهنگی شروع به پخش میکند (اعلانهای تعاملی در ویندوز در دسترس هستند)",
|
||||
"menu": {
|
||||
"interactive": "اعلانهای تعاملی",
|
||||
"interactive-settings": {
|
||||
"label": "تنظیمات تعاملی",
|
||||
"submenu": {
|
||||
"hide-button-text": "مخفی کردن متن دکمه",
|
||||
"refresh-on-play-pause": "تازهسازی در پخش/توقف",
|
||||
"tray-controls": "باز/بسته شدن با کلیک روی آیکون در نوار وظیفه"
|
||||
}
|
||||
},
|
||||
"priority": "اولویت اعلان",
|
||||
"toast-style": "Toast سبک",
|
||||
"unpause-notification": "نمایش اعلان هنگام از سرگیری پخش"
|
||||
},
|
||||
"name": "اعلانها"
|
||||
},
|
||||
"performance-improvement": {
|
||||
"description": "بهبود عملکرد با فعال کردن اسکریپتهای آزمایشی",
|
||||
"name": "بهبود عملکرد [بتا]"
|
||||
},
|
||||
"picture-in-picture": {
|
||||
"description": "اجازه میدهد تا برنامه به حالت تصویر در تصویر تغییر کند",
|
||||
"menu": {
|
||||
"always-on-top": "همیشه در بالا",
|
||||
"hotkey": {
|
||||
"label": "کلید میانبر",
|
||||
"prompt": {
|
||||
"keybind-options": {
|
||||
"hotkey": "کلید میانبر"
|
||||
},
|
||||
"label": "یک کلید میانبر انتخاب کنید برای فعال/غیرفعال کردن حالت تصویر در تصویر",
|
||||
"title": "کلید میانبر برای حالت تصویر در تصویر"
|
||||
}
|
||||
},
|
||||
"save-window-position": "ذخیره موقعیت پنجره",
|
||||
"save-window-size": "ذخیره اندازه پنجره",
|
||||
"use-native-pip": "استفاده از حالت تصویر در تصویر اصلی مرورگر"
|
||||
},
|
||||
"name": "تصویر در تصویر",
|
||||
"templates": {
|
||||
"button": "تصویر در تصویر"
|
||||
}
|
||||
},
|
||||
"playback-speed": {
|
||||
"description": "به سرعت گوش بده، به آرامی گوش بده! یک دکمه کشویی برای تنظیم سرعت آهنگ اضافه شد",
|
||||
"name": "سرعت پخش",
|
||||
"templates": {
|
||||
"button": "سرعت"
|
||||
}
|
||||
},
|
||||
"precise-volume": {
|
||||
"description": "کنترل دقیق صدا با استفاده از چرخ موس/میانبرها، همراه با HUD سفارشی و مراحل تنظیم حجم قابل تنظیم",
|
||||
"menu": {
|
||||
"arrows-shortcuts": "میانبرهای کلیدهای فلشی",
|
||||
"custom-volume-steps": "مراحل تنظیم صدای دلخواه",
|
||||
"global-shortcuts": "کلید های میانبر جهانی"
|
||||
},
|
||||
"name": "صدای دقیق",
|
||||
"prompt": {
|
||||
"global-shortcuts": {
|
||||
"keybind-options": {
|
||||
"decrease": "کاهش صدا",
|
||||
"increase": "افزایش صدا"
|
||||
},
|
||||
"label": "انتخاب کلیدهای میانبر سراسری صدا:",
|
||||
"title": "میانبرهای کلید سراسری صدا"
|
||||
},
|
||||
"volume-steps": {
|
||||
"label": "مراحل انتخاب افزایش/کاهش صدا",
|
||||
"title": "سطح صدا"
|
||||
}
|
||||
}
|
||||
},
|
||||
"quality-changer": {
|
||||
"backend": {
|
||||
"dialog": {
|
||||
"quality-changer": {
|
||||
"detail": "کیفیت کنونی: {{quality}}",
|
||||
"message": "انتخاب کیفیت ویدیو:",
|
||||
"title": "انتخاب کیفیت ویدیو"
|
||||
}
|
||||
}
|
||||
},
|
||||
"description": "امکان تغییر کیفیت ویدیو با استفاده از دکمه در رابط پخش ویدیو",
|
||||
"name": "تغییر دهنده کیفیت ویدیو",
|
||||
"renderer": {
|
||||
"quality-settings-button": {
|
||||
"label": "باز کردن تغییر دهنده کیفیت پخش کننده"
|
||||
}
|
||||
}
|
||||
},
|
||||
"scrobbler": {
|
||||
"description": "اضافه کردن پشتیبانی از اسکرابلینگ (etc. last.fm, Listenbrainz)",
|
||||
"dialog": {
|
||||
"lastfm": {
|
||||
"auth-failed": {
|
||||
"message": "احراز هویت با Last.fm ناموفق بود\nپنجره شناور را تا راهاندازی مجدد بعدی مخفی کن.",
|
||||
"title": "احراز هویت ناموفق بود"
|
||||
}
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"lastfm": {
|
||||
"api-settings": "تنظیمات \"Last.fm \"API"
|
||||
},
|
||||
"listenbrainz": {
|
||||
"token": "توکن کاربری ListenBrainz را وارد کنید"
|
||||
},
|
||||
"scrobble-alternative-artist": "از هنرمند دىگرى استفاده کنىد",
|
||||
"scrobble-alternative-title": "از عناوین جایگزین استفاده کنید",
|
||||
"scrobble-other-media": "ردیابی رسانههای دیگر"
|
||||
},
|
||||
"name": "ابزار ثبتکنندهی آهنگ",
|
||||
"prompt": {
|
||||
"lastfm": {
|
||||
"api-key": "کلید Last.fm API",
|
||||
"api-secret": "API مخفی Last.fm"
|
||||
},
|
||||
"listenbrainz": {
|
||||
"token": {
|
||||
"label": "توکن کاربری ListenBrainz خود را وارد کنید:",
|
||||
"title": "توکن ListenBrainz"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"shortcuts": {
|
||||
"description": "امکان تنظیم میانبرهای سراسری برای کنترل (پخش/توقف/بعدی/قبلی) و خاموش کردن OSD رسانه با بازنویسی کلیدهای رسانهای، فعالسازی Ctrl/CMD + F برای جستجو، فعالسازی پشتیبانی MPRIS در لینوکس برای کلیدهای رسانهای، و میانبرهای سفارشی برای کاربران پیشرفته",
|
||||
"menu": {
|
||||
"override-media-keys": "تغییر عملکرد کلیدهای رسانه",
|
||||
"set-keybinds": "تنظیم کنترلهای سراسری آهنگ"
|
||||
},
|
||||
"name": "میانبرها (& MPRIS)",
|
||||
"prompt": {
|
||||
"keybind": {
|
||||
"keybind-options": {
|
||||
"next": "بعدی",
|
||||
"play-pause": "پخش / توقف",
|
||||
"previous": "قبلی"
|
||||
},
|
||||
"label": "انتخاب میانبرهای سراسری برای کنترل آهنگها:",
|
||||
"title": "میانبرهای کلیدی سراسری"
|
||||
}
|
||||
}
|
||||
},
|
||||
"skip-disliked-songs": {
|
||||
"description": "خودکار آهنگ های غیر موردعلاقه رد میشن",
|
||||
"name": "رد آهنگهای غیر مورد علاقه"
|
||||
},
|
||||
"skip-silences": {
|
||||
"description": "رد خودکار بخشهای بی صدا آهنگ ها",
|
||||
"name": "رد بخشهای بیصدا"
|
||||
},
|
||||
"sponsorblock": {
|
||||
"description": "بهطور خودکار بخشهای غیرموسیقی مانند مقدمه/پایان یا قسمتهایی از ویدیوهای موسیقی که آهنگ در آن پخش نمیشود را رد میکند",
|
||||
"name": "مسدودکننده اسپانسر"
|
||||
},
|
||||
"synced-lyrics": {
|
||||
"description": "ارائه متن ترانهها به صورت هماهنگ با آهنگها، با استفاده از ارائهدهندگانی مانند LRClib.",
|
||||
"errors": {
|
||||
"fetch": "⚠️هنگام بارگیری متن ترانه خطایی رخ داده است.\n\tلطفاً بعداً دوباره تلاش کنید.",
|
||||
"not-found": "⚠️ متنی برای این ترانه پیدا نشد."
|
||||
},
|
||||
"menu": {
|
||||
"default-text-string": {
|
||||
"label": "حرف/کاراکتر پیشفرض بین متنهای ترانه",
|
||||
"tooltip": "حرف/کاراکتر پیشفرض را برای فاصله بین متنهای ترانه انتخاب کنید"
|
||||
},
|
||||
"line-effect": {
|
||||
"label": "افکت خط متن",
|
||||
"submenu": {
|
||||
"fancy": {
|
||||
"label": "شیک",
|
||||
"tooltip": "استفاده از افکتهای بزرگ و شبیه به اپلیکیشنها برای خط فعلی"
|
||||
},
|
||||
"focus": {
|
||||
"label": "تمرکز",
|
||||
"tooltip": "فقط خط فعلی رو سفید کن"
|
||||
},
|
||||
"offset": {
|
||||
"label": "جابجایی",
|
||||
"tooltip": "جابجایی خط فعلی به سمت راست"
|
||||
},
|
||||
"scale": {
|
||||
"label": "مقیاس",
|
||||
"tooltip": "تغییر اندازه خط فعلی"
|
||||
}
|
||||
},
|
||||
"tooltip": "افکت مورد نظر را برای خط فعلی انتخاب کنید"
|
||||
},
|
||||
"precise-timing": {
|
||||
"label": "هماهنگسازی کامل متن ترانه",
|
||||
"tooltip": "محاسبه دقیق نمایش خط بعدی تا میلیثانیه (ممکن است تاثیر کمی بر عملکرد داشته باشد)"
|
||||
},
|
||||
"preferred-provider": {
|
||||
"label": "منبع دلخواه",
|
||||
"none": {
|
||||
"label": "هىچکدام",
|
||||
"tooltip": "منبح دلخواهى انتخاب نشده"
|
||||
},
|
||||
"tooltip": "منبع دلخواهتان را انتخاب کنىد"
|
||||
},
|
||||
"romanization": {
|
||||
"label": "اشعار رومی شده",
|
||||
"tooltip": "اگر اشعار به زبانی متفاوت هستند، سعی کنید نسخه لاتین را نمایش دهید."
|
||||
},
|
||||
"show-lyrics-even-if-inexact": {
|
||||
"label": "نمایش متن ترانه ها حتی اگر دقیق نباشد",
|
||||
"tooltip": "اگر آهنگ پیدا نشد، افزونه دوباره با یک جستجوی متفاوت امتحان میکند.\nنتیجهی این تلاش ممکن است دقیق نباشد."
|
||||
},
|
||||
"show-time-codes": {
|
||||
"label": "نمایش زمانبندیها",
|
||||
"tooltip": "نمایش زمانبندیها کنار متن ترانه"
|
||||
}
|
||||
},
|
||||
"name": "متن ترانه هماهنگ شد",
|
||||
"refetch-btn": {
|
||||
"fetching": "در حال بارگذاری...",
|
||||
"normal": "دریافت مجدد متن ترانه"
|
||||
},
|
||||
"warnings": {
|
||||
"duration-mismatch": "⚠️ - ممکن است متن ترانه به دلیل عدم تطابق زمان با مشکل هماهنگی مواجه شود.",
|
||||
"inexact": "⚠️ - ممکن است متن ترانه برای این آهنگ دقیق نباشد",
|
||||
"instrumental": "⚠️ - این آهنگ بی کلام است"
|
||||
}
|
||||
},
|
||||
"taskbar-mediacontrol": {
|
||||
"description": "کنترل پخش از نوار وظیفه ویندوز(taskbar)",
|
||||
"name": "کنترل رسانه از نوار وظیفه (taskbar)"
|
||||
},
|
||||
"touchbar": {
|
||||
"description": "افزودن ویجت TouchBar برای کاربران macOS",
|
||||
"name": "نوار لمسی"
|
||||
},
|
||||
"transparent-player": {
|
||||
"description": "پنجره برنامه را شفاف مىکند",
|
||||
"menu": {
|
||||
"opacity": {
|
||||
"label": "تارى",
|
||||
"submenu": {
|
||||
"percent": "%{{تارى}}"
|
||||
}
|
||||
},
|
||||
"type": {
|
||||
"label": "نوع",
|
||||
"submenu": {
|
||||
"acrylic": "اکرىلىک",
|
||||
"mica": "مىکا",
|
||||
"none": "هىچکدام",
|
||||
"tabbed": "نوار دار"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "پلىر شفاف"
|
||||
},
|
||||
"tuna-obs": {
|
||||
"description": "ادغام با پلاگین Tuna در OBS",
|
||||
"name": "Tuna OBS"
|
||||
},
|
||||
"unobtrusive-player": {
|
||||
"description": "هنگام پخش یک آهنگ از پخش کننده جلوگیری می کند",
|
||||
"name": "پخشکننده بی نظیر"
|
||||
},
|
||||
"video-toggle": {
|
||||
"description": "دکمهای اضافه میکند برای جابجایی بین حالت ویدیو/آهنگ. همچنین به صورت اختیاری میتواند تب ویدیو را حذف کند",
|
||||
"menu": {
|
||||
"align": {
|
||||
"label": "چینش",
|
||||
"submenu": {
|
||||
"left": "چپ",
|
||||
"middle": "میانه",
|
||||
"right": "راست"
|
||||
}
|
||||
},
|
||||
"force-hide": "حذف اجباری تب ویدیو",
|
||||
"mode": {
|
||||
"label": "حالت",
|
||||
"submenu": {
|
||||
"custom": "حالت شخصیسازی شده",
|
||||
"disabled": "غیرفعال",
|
||||
"native": "حالت پیشفرض"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "ویدیو به آهنگ",
|
||||
"templates": {
|
||||
"button-song": "ترانه",
|
||||
"button-video": "ویدیو"
|
||||
}
|
||||
},
|
||||
"visualizer": {
|
||||
"description": "اضافه کردن نمایشدهنده تصویری به پخشکننده",
|
||||
"menu": {
|
||||
"visualizer-type": "نوع نمایشدهنده تصویری"
|
||||
},
|
||||
"name": "نمایشدهنده تصویری"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||