Compare commits
2426 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 203c80767d | |||
| f564039438 | |||
| d6566fb870 | |||
| 55ab17e789 | |||
| e0eeb720cd | |||
| 53ac7ff257 | |||
| a4e2f10afa | |||
| c9c9d766e6 | |||
| b82d161180 | |||
| 7cadacd8cf | |||
| fc1a7cda62 | |||
| da3bc5aeb7 | |||
| ee98344064 | |||
| da10eabf99 | |||
| ce3c63c386 | |||
| f8c3cff5a9 | |||
| 08f369f8bc | |||
| 1517230ede | |||
| 45aeadef86 | |||
| 5ec7c346ca | |||
| 4b68de1606 | |||
| 7710bcdacc | |||
| 4c19bcc983 | |||
| 2f50b1423a | |||
| 15768c9691 | |||
| 442eb75b8d | |||
| 8facd27125 | |||
| a302cb6ebf | |||
| 32422c7ba9 | |||
| ca131cb156 | |||
| 5f8262ede1 | |||
| 88db9d3693 | |||
| 0fa6f344f9 | |||
| d1642b3dfb | |||
| 7599fce5f5 | |||
| 9bd0dc9a7b | |||
| dad7cafebc | |||
| 4febb28201 | |||
| ced943bad3 | |||
| 202b8717a2 | |||
| eba7026b89 | |||
| 6b2adca1f4 | |||
| 0c9d3cc057 | |||
| 45ec11aaed | |||
| 4d47fa3fac | |||
| 6322d5bb09 | |||
| 2e8a579049 | |||
| 9db7e99d7f | |||
| ef73989995 | |||
| 61024084e9 | |||
| 1c71b2020f | |||
| 3b2b545388 | |||
| fafc7f94fd | |||
| 5fa88b5ce9 | |||
| a8fe4167db | |||
| 0e6b0ddc26 | |||
| af88db3865 | |||
| 0a1bef556c | |||
| 7030181dc1 | |||
| 98cb2f61ab | |||
| a601d0b3d2 | |||
| 8d18923065 | |||
| 4b6a7e0bd7 | |||
| 44f87853d6 | |||
| 4ff47bee03 | |||
| 7a2c28df21 | |||
| f7241d1e4a | |||
| 2b5daf3a75 | |||
| d7184cf75d | |||
| 1313d18d44 | |||
| 605e9481d9 | |||
| cf4c89f825 | |||
| f4f1d4d373 | |||
| 6557b40924 | |||
| e01a29c5d1 | |||
| d9a7e16d63 | |||
| d170199d85 | |||
| e650aae491 | |||
| 49058dbeab | |||
| 31d2d91566 | |||
| abf2a52b46 | |||
| d0ca10e1a1 | |||
| fe99a04174 | |||
| 916900ae6a | |||
| 826c9ba48e | |||
| 7783cc5f30 | |||
| 035d7f19ea | |||
| 294cf15d58 | |||
| 11fa0dcbc6 | |||
| 85b53db439 | |||
| 200df100f4 | |||
| ba202a8572 | |||
| daf05239a1 | |||
| b73b5735ec | |||
| 292248dd35 | |||
| 2e240541c8 | |||
| ab62ae3682 | |||
| 5c3f5d05d3 | |||
| c81af537b6 | |||
| 7295c73371 | |||
| 5a65e08a94 | |||
| 45e5bc7df5 | |||
| a81cb9515c | |||
| 88e5cc2728 | |||
| 1685648328 | |||
| 9334adacf6 | |||
| efbe557dce | |||
| 52b2625486 | |||
| aa0424db08 | |||
| 157619aa4f | |||
| ce637968b2 | |||
| b2a3ed7428 | |||
| ca856e4d88 | |||
| 2ef2536766 | |||
| 1b22633388 | |||
| db306ad4e0 | |||
| 34a44cb9c6 | |||
| 8c499a6e20 | |||
| 3b816a6fd9 | |||
| 35aba8e25a | |||
| 0eb6723f27 | |||
| 2250ec9372 | |||
| ef02b53284 | |||
| 57df7cf3f9 | |||
| f0cd540726 | |||
| 7e919395eb | |||
| facc7252c2 | |||
| 09b8943f69 | |||
| aa84ffc7e1 | |||
| 10162c948b | |||
| e8c1cbdd94 | |||
| 5459f623ec | |||
| 2a2cba3539 | |||
| 1ce84607e6 | |||
| 075c54d39f | |||
| aabb826cb8 | |||
| 3791b1ae1c | |||
| d4b87d098b | |||
| 57e9c13d13 | |||
| e48e570e69 | |||
| b7d4d5b022 | |||
| dc8b0173e9 | |||
| 840729126e | |||
| ed90b97a92 | |||
| bbe4f07651 | |||
| 66df83a86d | |||
| dfedd8f091 | |||
| 58ec6eebfb | |||
| 3ba4130bc6 | |||
| 7dbbf38e78 | |||
| 51e04162a7 | |||
| d3325e2490 | |||
| d2708ee32f | |||
| 781a09c717 | |||
| 11605293dd | |||
| 3f0b946190 | |||
| 74972f053a | |||
| d85190ace1 | |||
| 5755b4ac7f | |||
| 3c24f2edcd | |||
| 6828520853 | |||
| 2ba7dddb95 | |||
| 57a8922d04 | |||
| 640098860a | |||
| 53384d9f3b | |||
| 89d8d98a35 | |||
| 7b78ba6761 | |||
| 3926a9a0c0 | |||
| 0708cd5a38 | |||
| e20e9ca771 | |||
| be1038bafd | |||
| ebc087963b | |||
| 020bdc0811 | |||
| a0d1ad6a47 | |||
| 62e5679791 | |||
| 35568bd299 | |||
| 1e40b377af | |||
| 1073de1b45 | |||
| 1d5788acaf | |||
| 8fb446588d | |||
| 6cec34b2ac | |||
| 763d3e8f74 | |||
| 7da0a913f1 | |||
| ca04c4561b | |||
| 7d8fbf49a8 | |||
| 75e15b948d | |||
| 125b69fd75 | |||
| a68d6b64dd | |||
| a60d4264dc | |||
| 9e2c6b1afa | |||
| 14965a93e9 | |||
| f62664b6a5 | |||
| 60cb7f32f1 | |||
| 008b3ad710 | |||
| 8cae64f496 | |||
| 5cdc1bc762 | |||
| 15c455105b | |||
| 14407a98c9 | |||
| 0d004d5caf | |||
| 4b75a2405c | |||
| 1f7e28b6fb | |||
| c41b2ce861 | |||
| 7f02afc5a6 | |||
| 496b3ffc1b | |||
| e9a395f67a | |||
| 0660f0b7ce | |||
| 3ac09b9dc1 | |||
| fe4904a4af | |||
| d8c8bd17ec | |||
| e9d4d5ba14 | |||
| 5b2e69588f | |||
| c1591402a0 | |||
| e2e9c03895 | |||
| deac4ef56b | |||
| 7c39e658ce | |||
| 6b026f57bc | |||
| dc07cbda6f | |||
| 1cf43fcd42 | |||
| e2cf550bed | |||
| 2917da1138 | |||
| b74eeb5688 | |||
| 0b084a6441 | |||
| 865efa1b12 | |||
| 6a248e5336 | |||
| eb9c256a5d | |||
| 4bd54dcb2d | |||
| 17b035d317 | |||
| 28bcd1fefc | |||
| 59bb1d9124 | |||
| d9255c1cec | |||
| 4ab4bb4cb3 | |||
| a6c8b887e3 | |||
| 1db0abf32d | |||
| ff899b8720 | |||
| 18004c4441 | |||
| ce1cde72bd | |||
| 453f4d92c9 | |||
| 37740e78b4 | |||
| 8ace123179 | |||
| bcdb9de41a | |||
| 9fdb6eb7e5 | |||
| 88cd1d2390 | |||
| 943bcd322d | |||
| 7774128d7e | |||
| b9b9e2ba00 | |||
| 0ce4f20ec5 | |||
| 51b87312c4 | |||
| 9ffd7af8a7 | |||
| 4a453a4f3d | |||
| dc8a472cdb | |||
| d2eabaa4bb | |||
| 39c8ca66d1 | |||
| 806098a5ef | |||
| 5f6cfd9558 | |||
| b4b7ad824b | |||
| 7b5d602f63 | |||
| 7eeeb89457 | |||
| 6e8447b5d1 | |||
| a6445bacf0 | |||
| bd9b4f1b1a | |||
| 9a816b3f07 | |||
| 4dcac23688 | |||
| 97ef6ff997 | |||
| 244a656671 | |||
| f8a2829adb | |||
| 24daadbef8 | |||
| bf2ac88847 | |||
| e42423b100 | |||
| de0c02efaf | |||
| b8290417f8 | |||
| b92205a228 | |||
| 5f642007ba | |||
| ee40d278d4 | |||
| 02d2e8ea92 | |||
| 70715e5e8a | |||
| 5ae4f564b7 | |||
| 123eabd77a | |||
| fd3438a20d | |||
| c8554a12f6 | |||
| 4a687ade9c | |||
| f77aa372cc | |||
| 0b9eef94c4 | |||
| 71b2f69f98 | |||
| 4b61c5307e | |||
| a617b91263 | |||
| fc79bdd0f3 | |||
| e5e1e547d5 | |||
| edac9b0c20 | |||
| dfaf3cf95a | |||
| bae90ce8f3 | |||
| 188e56ce30 | |||
| 19b48b123f | |||
| 549961f297 | |||
| ba7bc68ac3 | |||
| bbfe272d41 | |||
| 8a3e0a31ca | |||
| 8fbda97885 | |||
| 1856deb0f5 | |||
| fec7c5c130 | |||
| 936b4b28bb | |||
| f3092d0778 | |||
| fc1adfae6c | |||
| e279aaed64 | |||
| 4d346a9471 | |||
| cfc504da34 | |||
| 0919a4b9b7 | |||
| f46ad2ea0e | |||
| 252719bc71 | |||
| 45f49361ea | |||
| c4a74c6c7e | |||
| 05f197948d | |||
| 5a1d230538 | |||
| a7ad260a00 | |||
| ef068cccd9 | |||
| 166067920d | |||
| 8227853cf9 | |||
| 324a539b89 | |||
| ce7557353c | |||
| 7b7923fe9b | |||
| 105d5c78e7 | |||
| b25183a8f5 | |||
| adde33d1f5 | |||
| ad325ccb10 | |||
| 2e7ea6969c | |||
| 7401cf69ad | |||
| 7f71c36dc0 | |||
| a3104fda4b | |||
| 44c42310f1 | |||
| a22a8ac5c9 | |||
| aa5c3bac4e | |||
| 30b3beee18 | |||
| b059e43fb1 | |||
| 3b04d0ba19 | |||
| 959f99beae | |||
| ed402933d3 | |||
| ef8bb95884 | |||
| 1b79d2e429 | |||
| ec786748be | |||
| 06f1c7effe | |||
| d78da237fc | |||
| 4c0cce89ee | |||
| 888ced8fd1 | |||
| e1690720b3 | |||
| bbff0a6bc2 | |||
| 5db759150c | |||
| ae239f6700 | |||
| 1d26d10e57 | |||
| da70a4ce7e | |||
| 75ae9f4fad | |||
| 8f7933c111 | |||
| 29a0dedcce | |||
| 4d62993177 | |||
| 8714f33fa2 | |||
| 5dacd50ff6 | |||
| 8d06dcc7b6 | |||
| b8f6dd2584 | |||
| 0650205b86 | |||
| 3e8a0ec49a | |||
| 04d7b32d3f | |||
| eaaf170cc8 | |||
| 09450fb8c7 | |||
| ac0b78eefb | |||
| 90103d9853 | |||
| bf27c73f1d | |||
| 845c9365be | |||
| 91cf5f5c25 | |||
| 783a892e26 | |||
| 41d8f86962 | |||
| 252349579e | |||
| 99b1cfbde4 | |||
| 3f70d912d7 | |||
| bf33c4e7b4 | |||
| 3152842a30 | |||
| d84416b27c | |||
| cc38978bd3 | |||
| 7a76079ff4 | |||
| 2fe28cf126 | |||
| 3ffbfbe0e3 | |||
| 4fad456619 | |||
| 7591f13505 | |||
| 11d06c50a5 | |||
| e0a3489640 | |||
| e55a1d3076 | |||
| 563d431c00 | |||
| 3a1b77ebd8 | |||
| 3f8030a9c5 | |||
| e12e67af0e | |||
| 3ab4cd5d05 | |||
| 738adbed98 | |||
| 365a078600 | |||
| 04fc43e18b | |||
| 54273baec7 | |||
| 51e62ef47b | |||
| a330ebcda7 | |||
| a023fff2d0 | |||
| abb25ea6fb | |||
| ef49bcdb5f | |||
| b4f1b112d6 | |||
| f24ec0ae9d | |||
| ebb51fe37b | |||
| e8ee18f903 | |||
| a593de705c | |||
| 03dd024704 | |||
| 528c3535dd | |||
| 0e0f80a2d0 | |||
| 6b67fb136a | |||
| 9fe1c14869 | |||
| 8a96dddf54 | |||
| 230422c98b | |||
| d16ffc531f | |||
| f614199ea5 | |||
| 55a1c2e9e3 | |||
| bee1f77812 | |||
| fdf982ada5 | |||
| ff02fc7855 | |||
| 01ed289400 | |||
| aedb2db655 | |||
| 10a54b9de0 | |||
| ccd029c040 | |||
| 3a431841b7 | |||
| deceae8354 | |||
| c8628670cf | |||
| ffe53d5596 | |||
| a4f4ecb569 | |||
| 2097f42efb | |||
| 9c59f56aac | |||
| dfcc4107b7 | |||
| ef71abfff1 | |||
| bc916f3a6e | |||
| c7ff0dcbf6 | |||
| 7242f9bfd0 | |||
| bb2e865880 | |||
| 6ab3cf9ac9 | |||
| b77f5c9ecc | |||
| b470dbd6b9 | |||
| 1f96b6b44d | |||
| de0b228ae8 | |||
| f35d192650 | |||
| 794d00ce9e | |||
| 739e7a448b | |||
| 7fa8a454b6 | |||
| 5cd1d9abe8 | |||
| e0e17cac99 | |||
| 840039330f | |||
| 734409dc3f | |||
| 34564c8c55 | |||
| afe6accab8 | |||
| b6e7e75ae8 | |||
| 06dc0e80f0 | |||
| 47cccbce7c | |||
| 269352af97 | |||
| fa62f79dce | |||
| 9f88b37f41 | |||
| 55ae9eac1e | |||
| 05564d4a58 | |||
| 59426c56db | |||
| 18cd4c0c9a | |||
| a0e2a33e28 | |||
| 7bdb46e161 | |||
| f560b62de0 | |||
| adc1f6822b | |||
| 2da29fcfa7 | |||
| c5d0314db6 | |||
| 8c052faedd | |||
| 37067ff950 | |||
| 6366dc026e | |||
| 6e52178074 | |||
| 47f38cc690 | |||
| fdd6d9929f | |||
| 1707261f49 | |||
| 6712fced6d | |||
| 6dabfaa9ba | |||
| a41db79c35 | |||
| 87786d9aef | |||
| 22f5866050 | |||
| 04894fbcf5 | |||
| c17c624ba4 | |||
| bfe7249df8 | |||
| 13c570efe9 | |||
| b299846f0f | |||
| 59e9289d27 | |||
| 8dc29caa1b | |||
| 7fedf88654 | |||
| 5da0202425 | |||
| 6288d0b171 | |||
| 4248d20e8e | |||
| 0b413492ad | |||
| dc73561c8a | |||
| 949a2f6428 | |||
| bceaa05197 | |||
| 776cdac30d | |||
| 4333891cca | |||
| 8a89bbccf7 | |||
| fa4c69d228 | |||
| c25def8901 | |||
| 284a59b721 | |||
| 5fcba8619a | |||
| f3cd759276 | |||
| 9d3981e361 | |||
| 787326948b | |||
| 779251933c | |||
| 1efe835c69 | |||
| 5702978227 | |||
| fa3d742838 | |||
| c460cc2296 | |||
| 4e4af5e830 | |||
| 9a4e98063b | |||
| 8bfe04bb50 | |||
| 6774d54f5e | |||
| 9705f8489d | |||
| a7229cbe14 | |||
| 7577aba45e | |||
| d78fbe476e | |||
| bfe4b2bba7 | |||
| 7625a3aa52 | |||
| 30c8dcf730 | |||
| 00a3e8d35e | |||
| 4d01cdfa6c | |||
| f924b6c8e3 | |||
| 926d98174c | |||
| 41b3972f54 | |||
| 467f29e363 | |||
| 9cc13c3757 | |||
| f8ccb86156 | |||
| b316aa2301 | |||
| 5c49b28664 | |||
| dedf96afd3 | |||
| 3bb5bc2ca1 | |||
| c79fdd9887 | |||
| d7b821727d | |||
| 21c45faf20 | |||
| 92cab89d17 | |||
| fa160b2e90 | |||
| 308ac38e6b | |||
| a62cafb601 | |||
| bf9e3b5f48 | |||
| 3c6b3aeff0 | |||
| 37181a7b5e | |||
| 0b363d6487 | |||
| e9398adac3 | |||
| 6901713036 | |||
| 1d5b2997bd | |||
| 572a023aaa | |||
| 9187f1e240 | |||
| df13d7d0f3 | |||
| 85228fd7d2 | |||
| 17ba071057 | |||
| d7df4d7d10 | |||
| 7aa970cebc | |||
| f08f003cf4 | |||
| 9f99eded9e | |||
| c512f13009 | |||
| b475f780ff | |||
| 2294102006 | |||
| d69a07d025 | |||
| 4f4995c20c | |||
| b6894dca29 | |||
| 73f14e581d | |||
| 2f2e64af4a | |||
| 5710307ddc | |||
| 52ba2dc9ff | |||
| 926b9fb5e6 | |||
| a6c9b3381a | |||
| 5dc13a4698 | |||
| a69085c591 | |||
| a22f7fed21 | |||
| 8b7045fb1b | |||
| efd1b92514 | |||
| 969f6d7bba | |||
| 4f7c92d6a0 | |||
| 24d4a50574 | |||
| 7693a3ba4a | |||
| 7ca4dc5c85 | |||
| 21ff09b605 | |||
| fbf4b3b8b5 | |||
| 5812eb0147 | |||
| b5dbfaf686 | |||
| 6b7fd5ba63 | |||
| 73a049a7bc | |||
| ef0c30e23a | |||
| 59ed2326d9 | |||
| 07a02c8c82 | |||
| f1050cb676 | |||
| 7131893f1c | |||
| e4dfb2ff33 | |||
| 187fad6834 | |||
| 26df435db0 | |||
| 0bee281d1d | |||
| 26de5802a0 | |||
| c258a4855e | |||
| b7b6d50ba2 | |||
| 0376a30fbb | |||
| ca92031e89 | |||
| 986d2ad5b1 | |||
| d9b8d8c48d | |||
| 0ef34d7c71 | |||
| f87607d25d | |||
| cc0bfae067 | |||
| e7d2d04f5a | |||
| f4319ebc6b | |||
| a1f025e23c | |||
| c002263c3b | |||
| 2d69dfd333 | |||
| 9d99ffdc72 | |||
| a859b27eba | |||
| be26827609 | |||
| 457a8b5018 | |||
| 0442e427a6 | |||
| d45ca960b4 | |||
| 0bcfdbf39c | |||
| e3b5afda3e | |||
| 97297a2c49 | |||
| 11ac756da5 | |||
| a273d13086 | |||
| ca11120036 | |||
| 7dac9a2454 | |||
| 30e0e99467 | |||
| 275d8cb2b9 | |||
| 1cc46daead | |||
| 9048da22f9 | |||
| 70fa5aa217 | |||
| 6bf7f3b9eb | |||
| 67579877bc | |||
| 534f96921e | |||
| 22491ae0a0 | |||
| dd39bdd84c | |||
| 935a307235 | |||
| 517e9c0472 | |||
| b2c27b9fdb | |||
| 8acfabf9f8 | |||
| 375fb082f0 | |||
| 8b65f1d6e4 | |||
| d36fb592d0 | |||
| 575a643e55 | |||
| 07853d8b39 | |||
| da9cb8e2f5 | |||
| 22acaf688f | |||
| 063ba1b6c7 | |||
| 0229ccaa1e | |||
| df1e28546b | |||
| 1806d5a0a2 | |||
| 59efba4dec | |||
| 670ed62360 | |||
| 6a2b393b45 | |||
| 4488a3adba | |||
| eb7ef7ab36 | |||
| dcadf0a31a | |||
| 3dda8b7c2e | |||
| 947007cc59 | |||
| bf5ac285d3 | |||
| 5dfbdd4882 | |||
| 3cd1f79886 | |||
| 04234f0b3f | |||
| 7b30896091 | |||
| 2cf29fe88d | |||
| 09ce665df1 | |||
| 299f34d98e | |||
| 1af73a7cf8 | |||
| bcc7397f26 | |||
| 95ac01c9ba | |||
| edd7b80fcd | |||
| 231514ae0d | |||
| 0c948d5ea1 | |||
| 50117ea51b | |||
| 78d8160823 | |||
| 81b2303a6f | |||
| f7a09082a5 | |||
| ca318450b8 | |||
| e86739c99c | |||
| 92a3a55803 | |||
| 7479f2f697 | |||
| 371a7eb475 | |||
| 84f6e46efc | |||
| 110dbd3e18 | |||
| 4b7d94b1d5 | |||
| 9c4aa4bcb2 | |||
| a7fd8bc21b | |||
| 548f82ba0a | |||
| 127e325b2b | |||
| 40745d3946 | |||
| 2c337953eb | |||
| 61cb3135f3 | |||
| 1a2f20042b | |||
| 6e315b9af2 | |||
| 9438cd8b26 | |||
| 6eadc7f7e5 | |||
| 399c6e37ce | |||
| 16a32d1946 | |||
| 45b7422ea8 | |||
| 76c570413a | |||
| b9ea98c115 | |||
| 2c38b8a764 | |||
| 7af418a040 | |||
| bc40fc3d49 | |||
| 831aa3d391 | |||
| 2fe391beba | |||
| 47bd015549 | |||
| 2cb05c9d86 | |||
| 5a7774e7b1 | |||
| a5fe8bc589 | |||
| aed1bbc6d7 | |||
| 042083b112 | |||
| 61b04e9b42 | |||
| f655cdf953 | |||
| 4118b4b6c4 | |||
| 5cd2e78e88 | |||
| 70b5e579b1 | |||
| 71f2123f27 | |||
| 40fa1bac92 | |||
| 10049d1ee9 | |||
| faaf54d0b0 | |||
| 7224620350 | |||
| 549f0f7c7a | |||
| 529d5e165c | |||
| 35f6064b7a | |||
| c11ec3341a | |||
| b7142000ab | |||
| e3d41ccb95 | |||
| 1067417dbd | |||
| c554ed79b1 | |||
| 8fd6bdbdf3 | |||
| 92ecf6a0b0 | |||
| 8d475eda0a | |||
| 46d3a85cc0 | |||
| 72660f5aa1 | |||
| 8fa1c7e5a8 | |||
| f532398a9c | |||
| 6bb33453c7 | |||
| 170e2a696e | |||
| 1ff69c933c | |||
| 0935edd516 | |||
| e7e3e8abe0 | |||
| 3e77064cd3 | |||
| 4651d6d241 | |||
| 7418a1f4b2 | |||
| c6bba51166 | |||
| c8b149281b | |||
| 3276e318d8 | |||
| d0d739e61f | |||
| 3f3a5483ed | |||
| c90ab00c09 | |||
| 5e29235c03 | |||
| e81671f4da | |||
| fbf92971a5 | |||
| 0c06d59a47 | |||
| 5237311f1f | |||
| 7d355ea1f2 | |||
| ad8b9c9bf7 | |||
| f2b532d8fa | |||
| c6ee222e43 | |||
| 9739dbe27f | |||
| 1d6f1d2216 | |||
| 563daae11a | |||
| 451d33707a | |||
| ce264c5d65 | |||
| 9b6e3c850a | |||
| ae1e106ccd | |||
| b362118207 | |||
| 73287cf8b2 | |||
| 42ad78c6cc | |||
| 031875ad86 | |||
| 27086e759f | |||
| 913c69a33d | |||
| 2eaa660a6d | |||
| d811ebadb4 | |||
| 774815c4e5 | |||
| a5bdb257d4 | |||
| 72c8c49edf | |||
| 68d985acba | |||
| 76a7b303fa | |||
| b5472c11df | |||
| 0c45f9850b | |||
| 999d4ab4ab | |||
| 5069913c56 | |||
| 88dea85f03 | |||
| 85793d70f7 | |||
| 12825d8bf2 | |||
| 53f5bda382 | |||
| c0d7972da3 | |||
| 278618bc83 | |||
| 03c1ab0e98 | |||
| 8b5a094eb5 | |||
| 1f52995dc4 | |||
| d30755e5fa | |||
| 82bcadcd64 | |||
| 3e3fdb3c3f | |||
| b67a4ed9bb | |||
| 06b9cf9255 | |||
| 4284bcc329 | |||
| aacc2d261b | |||
| 92da06eb96 | |||
| 897cfd3c7d | |||
| c722896a73 | |||
| 31a7588cee | |||
| da69d4c5a6 | |||
| ce0ee82648 | |||
| c837f104f7 | |||
| 2f73548701 | |||
| efb92a3513 | |||
| 98fc8e3b9d | |||
| 6f0d4fbbe4 | |||
| dab97293be | |||
| f2149e3b72 | |||
| 48b0469a4e | |||
| 1add1a2233 | |||
| 9f4187e64a | |||
| f1bbae69ac | |||
| 98a2c0d82b | |||
| d0733e25dc | |||
| 34aded725d | |||
| bb385d440e | |||
| 1ed43e11ad | |||
| bf8b88cb60 | |||
| f0f85955dc | |||
| d7950fbf70 | |||
| c8f12990eb | |||
| eb14286315 | |||
| 217c3f41ee | |||
| a9227b529c | |||
| 9f77dcc348 | |||
| 3b6a7c82ef | |||
| 69f560cdd1 | |||
| c488c30015 | |||
| 135e1002e6 | |||
| f51e625c29 | |||
| 040946ca9e | |||
| 5098ddb98c | |||
| 80c152f795 | |||
| 9cde19d906 | |||
| 3f33eb8c07 | |||
| 0bba2980c7 | |||
| 7e60049143 | |||
| e74098e9a5 | |||
| 4fe02baace | |||
| eecc13852f | |||
| 2135e01ee1 | |||
| 346d301fe4 | |||
| 263a335c96 | |||
| 20db77f965 | |||
| d0ab23fa88 | |||
| a669b1ed3a | |||
| 660fce8c99 | |||
| 4bfca93713 | |||
| bb1295c5f7 | |||
| 5f97255908 | |||
| 7a50bbd0c6 | |||
| 7f7267d806 | |||
| 12d9b07c8d | |||
| 0b6b707ccd | |||
| 5a775b238c | |||
| cad8e4fe83 | |||
| 4b9af14c40 | |||
| f8db04e3fc | |||
| e8b712b3fa | |||
| 556b1a213e | |||
| 8daf2462ec | |||
| 99e0eec9fe | |||
| f36283d63f | |||
| 1a73e74039 | |||
| 454061ece9 | |||
| e6746722c5 | |||
| 4c07817b72 | |||
| ac9b59dc84 | |||
| 4e10dab5a8 | |||
| 8124c2b218 | |||
| fe813df0b5 | |||
| 05278ab643 | |||
| f722cf86dd | |||
| b909df9e66 | |||
| 55a442e90e | |||
| af569c3eee | |||
| 45fa963818 | |||
| 764f08ebfb | |||
| 94f2cbaf06 | |||
| 2ad097c743 | |||
| 648d102101 | |||
| 212009a69b | |||
| 4364d3be71 | |||
| 62e2e8a471 | |||
| 5d8b04b8d6 | |||
| 3526197d93 | |||
| 494b1d9515 | |||
| 5f71be280b | |||
| e8c3716106 | |||
| 9840956ef7 | |||
| 605401166d | |||
| 03f4654518 | |||
| e87099c816 | |||
| 83eb187d91 | |||
| 20cdaf2317 | |||
| 4f4372b65a | |||
| 325026e3ea | |||
| a6242d13ae | |||
| bc2a1f7f71 | |||
| d5c2ad2115 | |||
| 3abef7cb8a | |||
| b45c628142 | |||
| 9d6a78bc57 | |||
| 7018481b1d | |||
| 9f9e991aec | |||
| 640ba26d55 | |||
| f5758bfe93 | |||
| a3ea37d412 | |||
| 89c664b4d2 | |||
| 51871a3fec | |||
| 04ca4e8537 | |||
| 023258f1d7 | |||
| 848bb36c64 | |||
| a6e9c140fe | |||
| e972fd15c2 | |||
| ed5fb06504 | |||
| 51c2b76c8b | |||
| f193c0b547 | |||
| 7ac3cf69b6 | |||
| 69cd5ed613 | |||
| 1649bd9c2d | |||
| a97888a207 | |||
| f1073e37b5 | |||
| 7abc67b456 | |||
| b652a011a5 | |||
| 83abbdb25a | |||
| 837e888462 | |||
| 66ccd71b7c | |||
| 108c778f6d | |||
| af2b6782e8 | |||
| 7d93e9f031 | |||
| 8c311bf630 | |||
| bdfdf83c24 | |||
| 96e6b5d018 | |||
| c5ef9a9ebb | |||
| 4ace5e3647 | |||
| 476e13de9f | |||
| 659cb35525 | |||
| a507a8cd71 | |||
| 8cca8c89b3 | |||
| 476b45096c | |||
| 43be177b66 | |||
| 2edeab567f | |||
| 26fb48fd37 | |||
| c5781962f4 | |||
| 61dd477c27 | |||
| 6ca64d68ca | |||
| ad484ab745 | |||
| 7b3280c12b | |||
| cd41f093be | |||
| a2eb3a3319 | |||
| e4b1d38f85 | |||
| 560e323893 | |||
| a31e59fbc7 | |||
| 2cbc73d2ed | |||
| 099e5d8491 | |||
| 54d3f925e6 | |||
| ec6107138d | |||
| 83d7befc45 | |||
| b6f9404ff5 | |||
| 16a0b6a893 | |||
| 9ff40611ce | |||
| f2d20d05c4 | |||
| f650ee1e70 | |||
| ab7ba1c280 | |||
| c4ced889b5 | |||
| 79e71dae26 | |||
| 87cbdc3dc3 | |||
| a3c5be0cc2 | |||
| 0e3982d199 | |||
| 8bfbbca044 | |||
| 35fa794395 | |||
| bfb392a326 | |||
| 8adfcdc002 | |||
| 4ec0b7ff30 | |||
| 0e683444d3 | |||
| 7282a227fd | |||
| c0d0c267a7 | |||
| 6577bcdad8 | |||
| 34f56df2ec | |||
| 7f66ff2c0c | |||
| 735fd39c3c | |||
| 7df7b32eea | |||
| d9f1c589e9 | |||
| 5dd8d1a274 | |||
| 2f117117d8 | |||
| d8a6453a8d | |||
| 27d8bbdf85 | |||
| 7bdbab5a2d | |||
| 96f23ea8d5 | |||
| 0a8ac31c1e | |||
| e0d7117970 | |||
| e70f843ac3 | |||
| 7932408b47 | |||
| 97c6cad503 | |||
| 455a89ad28 | |||
| 9ec07b5fb7 | |||
| b9aa6ffdd4 | |||
| ff1847d1e2 | |||
| fa4a55f97e | |||
| 781a726f4b | |||
| 0b49d57969 | |||
| 70c55ca587 | |||
| 3277a8e6c9 | |||
| 9c54fccf93 | |||
| f3a6d4dd18 | |||
| 721b048151 | |||
| 35859a6c3a | |||
| 7f099eef4e | |||
| 9da0e4305f | |||
| a81476100b | |||
| 7cbc99fc19 | |||
| 8a9a3fc69d | |||
| f422b25cb6 | |||
| d44fb5c840 | |||
| b4713196fe | |||
| 8bf2c8397e | |||
| 317e3af412 | |||
| a4a3564136 | |||
| bc49e09810 | |||
| 79890e019a | |||
| 70361afbaf | |||
| 333b695b16 | |||
| c6bb0cfe88 | |||
| b665343fd9 | |||
| 236034a1f9 | |||
| c61a719f59 | |||
| 96b1b69629 | |||
| 1eb0269434 | |||
| 5909af42d2 | |||
| 4eaeaafa7c | |||
| fe42f8d953 | |||
| 0f09f8a8ed | |||
| cb2c9fe1cd | |||
| b5cddd2d49 | |||
| 4957bccaad | |||
| b518866d24 | |||
| a51ed89281 | |||
| 3482ec4ec7 | |||
| 3c3530367a | |||
| fae1f67a64 | |||
| eb9b0b4cd1 | |||
| 91e111d483 | |||
| dbfddebbc2 | |||
| b541dd0312 | |||
| 3a822f611a | |||
| 0c53f7ffeb | |||
| acdff69919 | |||
| a80219ae40 | |||
| fecafe5a19 | |||
| a8769faea8 | |||
| 3ed4a30915 | |||
| 832195f29c | |||
| 9869063a5d | |||
| b63e7ed402 | |||
| 1b7bb4703a | |||
| 2cc347ff94 | |||
| 4674a25746 | |||
| 237423da1d | |||
| 6edc94ae98 | |||
| 98e677a76f | |||
| d289b30782 | |||
| 9b14a274ce | |||
| 7701c03e2b | |||
| 0cf72074f3 | |||
| 6e96b355bd | |||
| 210a16a32b | |||
| 3389679287 | |||
| 06eacea9a5 | |||
| 759b3844db | |||
| 2b4e996743 | |||
| 0e99f96f01 | |||
| b3f561cf2f | |||
| f9820df6c6 | |||
| bc5023c360 | |||
| 1c5d61854e | |||
| a8f3451e04 | |||
| 8728784c02 | |||
| b77c62128e | |||
| 70522173b7 | |||
| 35bd62cc0d | |||
| 52b67af59c | |||
| 027d4ce3f0 | |||
| 05d0ac963a | |||
| 97c5dc25be | |||
| 14b0315ed9 | |||
| 2c49f6c740 | |||
| bc23131e48 | |||
| e6146940b1 | |||
| 3412b3504f | |||
| fcb92fda84 | |||
| 51fdbe2086 | |||
| 74535b696c | |||
| 31ab27c39f | |||
| a13606b361 | |||
| d0ed64928d | |||
| 2b8b825f4c | |||
| 74c9fe13e2 | |||
| a2a2f18058 | |||
| e587f02bd9 | |||
| c38c416813 | |||
| 138b6df5a4 | |||
| cf2add8d91 | |||
| 453fe3f87a | |||
| ccedb17545 | |||
| 43c501b6d8 | |||
| a1bed628f4 | |||
| 7052a74a77 | |||
| 254758a4f2 | |||
| 5d85108c8a | |||
| 46bfec299c | |||
| de7bc828b1 | |||
| 335d515e22 | |||
| 3fb219fcd1 | |||
| 64114e8e9d | |||
| ca6225d47b | |||
| bf580645ae | |||
| 4361cf2b2b | |||
| c2fbc89b91 | |||
| 3605e32b25 | |||
| 49eae89886 | |||
| ee01ae1c00 | |||
| d199a5fce9 | |||
| 350e8fb706 | |||
| 3fdc6e2f09 | |||
| 938210e8f9 | |||
| c8a852bf2e | |||
| f58c10b02d | |||
| c281b8ba98 | |||
| 1fef3c4aab | |||
| 762ef4eede | |||
| fe9b26ebdd | |||
| 77173c1347 | |||
| be3a2880eb | |||
| d761d92861 | |||
| 0e7fd4d36d | |||
| 073ea27bba | |||
| 9441a6a694 | |||
| c9f610f7fc | |||
| 22b75bbfeb | |||
| 0063be02fb | |||
| cc1c13cece | |||
| 7f96c89f41 | |||
| cdb8bdcfb4 | |||
| 8c817e0862 | |||
| b4ec6a791d | |||
| 82ced02a5e | |||
| b843825f72 | |||
| b66d3bc3d4 | |||
| 9adabd41d9 | |||
| 3f3df09819 | |||
| 1f5f597561 | |||
| 91e4433aba | |||
| 2d3ce4a8b3 | |||
| 971b7f05c5 | |||
| bb6115fec1 | |||
| 2a6dc30366 | |||
| 5e2d843742 | |||
| 7aaef26cc8 | |||
| 0a08eaaa3c | |||
| 8bbf18cd6b | |||
| 0d22446f20 | |||
| a0543d15a6 | |||
| e62ee35b42 | |||
| 927596d0c1 | |||
| 0c0cb0501c | |||
| a2847c5007 | |||
| ef6fb402bf | |||
| a8301f44be | |||
| 1ead86a220 | |||
| 03e716fe17 | |||
| f0bb328981 | |||
| f40183f0ca | |||
| 5b004acdc1 | |||
| f6b3347d0a | |||
| 0f96da9928 | |||
| dfba3d9c2d | |||
| d9c51063f4 | |||
| cd9012691a | |||
| 2499f574ef | |||
| e7e873866d | |||
| 4ccbc741b8 | |||
| 8ec965a1a4 | |||
| 0936e9a258 | |||
| 32a5597573 | |||
| 9932fd7647 | |||
| 68429be1ce | |||
| d7ac493337 | |||
| 686a0a340e | |||
| bba499044b | |||
| 6e1c50ede1 | |||
| 6e739e2723 | |||
| 86029a0a73 | |||
| b458925aa6 | |||
| 86a1c3c850 | |||
| 8666f934cd | |||
| 59a93916a8 | |||
| f06a3c8c70 | |||
| 7fe937b21e | |||
| a4aa22aae9 | |||
| 96b2aab683 | |||
| 54d25a26c7 | |||
| f5622970c6 | |||
| ea09825ece | |||
| 247764b64b | |||
| 5e187b47d8 | |||
| 1194befa48 | |||
| 74d3358487 | |||
| 769a613ea5 | |||
| 7280e02709 | |||
| 7b3a767003 | |||
| 96b0d4e367 | |||
| ae8365f721 | |||
| 8d85bbf5ec | |||
| 61cd2ef9dc | |||
| 3394d647a1 | |||
| 882ad63fa8 | |||
| 5fd88ce522 | |||
| de280195c5 | |||
| 7bd69e447a | |||
| 357f12c4d1 | |||
| d164cd6fb9 | |||
| 5d3dc6442f | |||
| cb7c9bda16 | |||
| 6f2552814f | |||
| 9beebd3772 | |||
| 7cd9506122 | |||
| f6de5c7c22 | |||
| 2ac3df0455 | |||
| 2dfe098521 | |||
| 77d4e9cb84 | |||
| b420998458 | |||
| feb06b015e | |||
| 09ba760aff | |||
| 0f192aab2b | |||
| c992ec4607 | |||
| 30840804fa | |||
| 8000a8326f | |||
| d23bfe9368 | |||
| 047085e72b | |||
| 768ec7bda7 | |||
| c25a6f9d2a | |||
| 23058729f3 | |||
| a1c6dfb199 | |||
| 89ebc230e0 | |||
| b4b785d773 | |||
| 57ec0a463d | |||
| 6be9b76550 | |||
| ebe3baf4bc | |||
| 648d540ca9 | |||
| cb910a6fd7 | |||
| e071f768b4 | |||
| 05b6435a5c | |||
| 71e9f280a1 | |||
| dbc34e6d0d | |||
| d0532d691e | |||
| 2f218ef108 | |||
| 14326d2440 | |||
| d37e557f79 | |||
| 5ca0c6b8a9 | |||
| e58a580b2b | |||
| f3641f5072 | |||
| 296ecb6740 | |||
| 28b5645a56 | |||
| 742a949680 | |||
| 57290c4164 | |||
| 6d5fe9561e | |||
| 735901095f | |||
| 27454ab527 | |||
| c345d2cb34 | |||
| 1da297a356 | |||
| 8ebdaf6fa0 | |||
| d4d82867f5 | |||
| 2e99d6b9bb | |||
| a1e740b881 | |||
| de14d64927 | |||
| 6c93d635d0 | |||
| f4df6fceee | |||
| d69c8a754e | |||
| c3d90d8b27 | |||
| 10681e4e99 | |||
| 48aa3ba0d8 | |||
| f98e4ea749 | |||
| dc500efb79 | |||
| 8d9dafb149 | |||
| 4ddd2f339b | |||
| d2265b59d7 | |||
| d47b03c23d | |||
| 4c857cb9e9 | |||
| c31f6cc797 | |||
| 0d3fa261a7 | |||
| b6ee861166 | |||
| f9cf12b7d3 | |||
| bed8d0a7f2 | |||
| afac520ff8 | |||
| 1332c66050 | |||
| 7f08579671 | |||
| d5e4f3af46 | |||
| bdceb4d462 | |||
| 2758a44965 | |||
| 704fba9aba | |||
| 5cffb6f062 | |||
| 407887254f | |||
| 47729130c9 | |||
| 7088941179 | |||
| ff39ddb277 | |||
| 1d9bfe8ac8 | |||
| edfa9d2ff5 | |||
| 1eeaf1dd0a | |||
| efd2c912a8 | |||
| 9abf7a77d8 | |||
| 2dd208c21b | |||
| c7fe81475f | |||
| 0acd16fd5d | |||
| 107c79f6a8 | |||
| 6aa789fb6a | |||
| 94c86491d0 | |||
| a9f5f376d0 | |||
| 5bd97685b9 | |||
| ea35da52c3 | |||
| 6cad6871bf | |||
| f865dfd1b6 | |||
| 37e84d3287 | |||
| 7192b253eb | |||
| 1b99cc6930 | |||
| 7f0d62383d | |||
| 44300e757f | |||
| dc928542f8 | |||
| 1834e1e938 | |||
| 8263918033 | |||
| 247777bcc4 | |||
| 023db03278 | |||
| a3f7eebd14 | |||
| 5c7d612e97 | |||
| 465e8e1717 | |||
| 621c5de357 | |||
| 4d890c4941 | |||
| 9b7c1a8d37 | |||
| 05b877b702 | |||
| 8268b18eee | |||
| ed15ee92df | |||
| c2fdfcca58 | |||
| ac54d33fa7 | |||
| 38ffc093c3 | |||
| 37c0ceaafe | |||
| 47f71a6022 | |||
| 08a39a59d3 | |||
| e6e83de89d | |||
| 1d1a9f5094 | |||
| a5ba0b1a1a | |||
| d785b9b95b | |||
| 2f5e0c0038 | |||
| 09bd271df2 | |||
| 766dd21cb7 | |||
| fef711549f | |||
| ca624f4df8 | |||
| 8be07bcb7a | |||
| 271d5258ca | |||
| 721f733dc4 | |||
| 9b8d9c4905 | |||
| 543db59a55 | |||
| e9a670831c | |||
| 24f694737a | |||
| fc111e2513 | |||
| 187f6833f4 | |||
| b042d0a8ca | |||
| eff0995d78 | |||
| 366c90f71d | |||
| 909036108f | |||
| 41b9ab4815 | |||
| 60bb5b861d | |||
| 900c44d9c0 | |||
| babc50099c | |||
| ea191a3005 | |||
| 02081d8272 | |||
| 03e27519db | |||
| 1248f1c8ec | |||
| 766bd378fd | |||
| 61eb23614a | |||
| 3f606695bf | |||
| 74b67c3d33 | |||
| 8dd41cca09 | |||
| 89ea66ba2b | |||
| 199d8ba4d7 | |||
| b0f29dde94 | |||
| 90f4c9383f | |||
| 4c8996096a | |||
| 315048722f | |||
| 9403804128 | |||
| 28b6d99599 | |||
| 92fc8f325a | |||
| a744a2ebde | |||
| c8f62f6d19 | |||
| 7fd9d5a971 | |||
| cb920194ce | |||
| dc728786ee | |||
| 8cfc8d1ba1 | |||
| 68bd691702 | |||
| 44aa62c9c8 | |||
| 2ad6c0fcdc | |||
| 40fbf3441a | |||
| 96f0d30818 | |||
| 90d6f13b56 | |||
| a0f2233db4 | |||
| 57ace9d504 | |||
| c2cc3cf7a0 | |||
| 17a24cbb04 | |||
| 74f61a532d | |||
| c7e793b66e | |||
| 21c149efc7 | |||
| 5e68d2487f | |||
| e8bbc5ec1c | |||
| 97013d8373 | |||
| ec4c2e92af | |||
| 81dadeddb9 | |||
| 7f3a554bc3 | |||
| 98f990fcdd | |||
| 75999e9dcf | |||
| 4d595f56d5 | |||
| f44b6f0c33 | |||
| c45e4e50fc | |||
| 9839a973f7 | |||
| 9ea967f03b | |||
| 9d6765125b | |||
| 8d66735585 | |||
| 14b4c55ce7 | |||
| 1d1f4bbcc3 | |||
| bd520c7eff | |||
| 73e201bb2c | |||
| 81b08917ae | |||
| 81c2ab34d9 | |||
| 33faa2deb3 | |||
| 4d4ac56486 | |||
| 56ac2b3b06 | |||
| c72ea4bad5 | |||
| d60069555e | |||
| ed7025b4a2 | |||
| 5fbc0f8122 | |||
| 02a989ca07 | |||
| 7c6fe6748e | |||
| 8f2ed3039a | |||
| baeebd1959 | |||
| 49edbf723f | |||
| 3764ce9a7c | |||
| 46943520bd | |||
| 1048b3f99a | |||
| b1e40271e6 | |||
| 11429978c9 | |||
| 47ca6e0b1f | |||
| a273f6f73c | |||
| c8ba85be76 | |||
| 6633243628 | |||
| 2fb47933ac | |||
| 4fd683ed23 | |||
| e1e9748002 | |||
| dd122666c5 | |||
| 5483f0ee36 | |||
| 2c6c80d829 | |||
| 584d3e83c6 | |||
| 58d5256dd2 | |||
| 920d61a1c6 | |||
| c5c2d5b74c | |||
| 2daee01ff7 | |||
| d13c9b7ca6 | |||
| 5296a88525 | |||
| 8ce4b5b297 | |||
| 2c39c0efed | |||
| e917abaec9 | |||
| bdd0a2e8db | |||
| 362003e10e | |||
| 4e4b557413 | |||
| 3a068af925 | |||
| 44ca812330 | |||
| 74a69e1c7a | |||
| c3ef16c3dd | |||
| 8c5ac17cdf | |||
| c99b95e611 | |||
| 4362101c0a | |||
| 7ba205cc6c | |||
| abc1712cf7 | |||
| 92452f804f | |||
| c76df84ce3 | |||
| 185ebbf417 | |||
| 6726e2600b | |||
| 93e0664f95 | |||
| bf45ed10aa | |||
| 8da78d50c4 | |||
| b27a959c2b | |||
| cfe719b6bd | |||
| 071799c435 | |||
| 87ee7ed83d | |||
| 08fdd07969 | |||
| 02d5b78f55 | |||
| 5492afe5f6 | |||
| 9a7baeac23 | |||
| ccfe7434bf | |||
| 6dbed73e6b | |||
| 895136af0a | |||
| 72b4398024 | |||
| 65ce62adc1 | |||
| eafdd5046d | |||
| bbece751c0 | |||
| 719c244e32 | |||
| e70b41b256 | |||
| f4b6fd53f3 | |||
| f40ed04899 | |||
| c897323be0 | |||
| d7c4716a6e | |||
| 461cac741b | |||
| cee2e066b9 | |||
| 953d6fe3e4 | |||
| c592a26e42 | |||
| 62bacf76d0 | |||
| fc254db010 | |||
| 0287b69424 | |||
| ceebd99927 | |||
| 41285ac9fc | |||
| 7b9415033f | |||
| b1ffd93bc2 | |||
| 64637a6ac5 | |||
| b83afa22d9 | |||
| c68daabeab | |||
| 9ec0830a65 | |||
| 48943ee74b | |||
| 29d5b3c7db | |||
| 3de574a2e4 | |||
| e765d18ab0 | |||
| 4629759eec | |||
| a14d27da70 | |||
| 5256ffcf77 | |||
| e2bbc6abbc | |||
| 6243e6fd48 | |||
| 1434849142 | |||
| 9bd089adb0 | |||
| 6c1a4c0ac2 | |||
| d35fef82fe | |||
| bca22d8e24 | |||
| 754eac6ee0 | |||
| 762566cce6 | |||
| 286bc0113e | |||
| 62e8e673eb | |||
| 68996809f0 | |||
| 48a2a13163 | |||
| 6e94422b15 | |||
| 713e005aa8 | |||
| 3f3ab766ce | |||
| 00e1bbf994 | |||
| b45adac847 | |||
| 3d9b495863 | |||
| a70364facf | |||
| 02cb39602f | |||
| 12c31725fe | |||
| e0841060df | |||
| b7b55b5c83 | |||
| 43a9093eb7 | |||
| 67e43bc0e3 | |||
| a47c906ab2 | |||
| 41a01ba58a | |||
| ca2bd011e2 | |||
| 2106914aff | |||
| 1c11ddbb7d | |||
| fc1211f7a1 | |||
| 18f87c7b0d | |||
| f9a4bffa55 | |||
| 02f4aabead | |||
| f97dade168 | |||
| 8c3a6472f8 | |||
| 315f9783f5 | |||
| ada78837ce | |||
| 58c6a12e53 | |||
| 005c930d58 | |||
| 7c2891b732 | |||
| 8b36139dab | |||
| a045d65e58 | |||
| 7b064c1e6f | |||
| 6a2e3ab6c1 | |||
| 362da8c308 | |||
| 5658765f54 | |||
| 38449f003a | |||
| df75e480a6 | |||
| 79a95f133b | |||
| 9b1a5b8d26 | |||
| bb2e1bd616 | |||
| 2d518abc19 | |||
| 978aca1f9a | |||
| 2224786478 | |||
| 51364b63e7 | |||
| c897bedd90 | |||
| 831b1ea8e1 | |||
| 4d4dacbc71 | |||
| 1cd4f53657 | |||
| 2eda0e4948 | |||
| f2e04f9170 | |||
| c92b3915d9 | |||
| 6118a17b08 | |||
| 1490c0f179 | |||
| fdf203e70a | |||
| 8114a28964 | |||
| 663507b3f8 | |||
| 79d0c7b666 | |||
| ce4580605d | |||
| dda18a72af | |||
| f7a1de05c8 | |||
| 361606427a | |||
| 81fb5118aa | |||
| a76f12c01c | |||
| 88ee0fb989 | |||
| 3ec49bca74 | |||
| 1908921ae6 | |||
| b9dbd8bd4d | |||
| 587818b91e | |||
| 157ae05f80 | |||
| f2039e29e7 | |||
| ea2d33c3cf | |||
| d775e3d588 | |||
| e7ec15e90f | |||
| 403470be69 | |||
| 6dc0ba74c4 | |||
| 6dcfb336c2 | |||
| 84516b2ac1 | |||
| 57cf2a8cdd | |||
| e3ae97fec4 | |||
| ee76e2cb45 | |||
| de01bb6e75 | |||
| 42668c3e99 | |||
| 05f3c56e47 | |||
| d54977b9ee | |||
| b89fb4dc2f | |||
| a0cf77edfb | |||
| 069f9855d1 | |||
| e3e0775401 | |||
| d255e5ffe1 | |||
| fea460a374 | |||
| 302d3f693f | |||
| 9cc320d74b | |||
| e255777283 | |||
| ef66612cc8 | |||
| 4bed835347 | |||
| b5fd6b4969 | |||
| fe0f213919 | |||
| e888b5c896 | |||
| f27ff52689 | |||
| acbe0ac25d | |||
| c66ff2bf05 | |||
| d089487aa8 | |||
| 6bc1d1606f | |||
| 9df5d921c7 | |||
| 4b1dfa1173 | |||
| f98318e737 | |||
| 7fa1278b31 | |||
| 878ec1f6c1 | |||
| 086048780a | |||
| 65eaaecae5 | |||
| aff0415816 | |||
| 6040fe1cbd | |||
| 36bc9c62b0 | |||
| 3901457218 | |||
| 52f4e9d796 | |||
| 183bad43f6 | |||
| 09fe80cae7 | |||
| 817b48dc9d | |||
| c6f8c42c45 | |||
| 0535686129 | |||
| 53a77255ca | |||
| c01506dc44 | |||
| a49817fdc3 | |||
| 52a4608d76 | |||
| 6f5f9386ff | |||
| fddd0607e6 | |||
| 2cb6f56feb | |||
| 46285a5ed0 | |||
| 496836b33b | |||
| af127879a5 | |||
| 38ef452801 | |||
| a9a5d99676 | |||
| e5ab50cebd | |||
| 49194f8141 | |||
| 641ae27efd | |||
| 47a5dec465 | |||
| c93eabb400 | |||
| 664be51de2 | |||
| 492a47321d | |||
| c89f6af8c6 | |||
| 9687c6c8e4 | |||
| ef0a89126a | |||
| 8ce71d628d | |||
| ca95d105c8 | |||
| 12568c2b09 | |||
| 82abb4d4d3 | |||
| 3c0a5dbbe5 | |||
| 0b98eef06f | |||
| 18e69c9f2a | |||
| 8f5d06d420 | |||
| 8a299461a0 | |||
| 0c58bec921 | |||
| e0cb132686 | |||
| 2a192f39f9 | |||
| b7ebb7d499 | |||
| fffeac21b7 | |||
| 4387cb485d | |||
| 2a58dc823a | |||
| 8eb38271ff | |||
| 1987ad1d4f | |||
| cc4dae60ef | |||
| 1943116aa1 | |||
| 3485d26b11 | |||
| 4a60aa9f20 | |||
| cda07c9675 | |||
| ca64a77ed0 | |||
| 30e94d1d6f | |||
| b8c6ebfa53 | |||
| b26748ded8 | |||
| f186da0834 | |||
| c52c2d886a | |||
| e5dc1f8a58 | |||
| 6dbf4134de | |||
| e1cc49a74d | |||
| 4489a400b7 | |||
| 28aa1c0b22 | |||
| c540788d20 | |||
| 4ab07dc875 | |||
| 5033de13ef | |||
| 55a8787a16 | |||
| 3515bf364d | |||
| d8f3246e46 | |||
| cd613aaba2 | |||
| c5f84b568b | |||
| 14dc78984f | |||
| fb61dbfa6c | |||
| 33855f17dd | |||
| 8124623142 | |||
| e99c91ce6e | |||
| 177ce5721f | |||
| 4fb0b1dd08 | |||
| 177ad2ce7c | |||
| 9b88769585 | |||
| fd044072a1 | |||
| bae5155e19 | |||
| 1e2085b990 | |||
| bbe5a7d50b | |||
| e5473cdfe4 | |||
| 9c7a70e056 | |||
| 5bc8e86353 | |||
| 5b00465558 | |||
| 28b70f6459 | |||
| 6961cdee95 | |||
| 58557505ae | |||
| 65178b259f | |||
| 541c7f34b7 | |||
| b2c209837c | |||
| 355f61188a | |||
| ea672c2423 | |||
| 71ba6b8e55 | |||
| 8a07fccf8f | |||
| 7bc35f4cee | |||
| 002081bcb9 | |||
| 0e8e78362b | |||
| cb6a5a478e | |||
| d615030222 | |||
| e43c01da64 | |||
| cb5ef1d6e5 | |||
| 78a7dcb7e8 | |||
| 8cca9f3eeb | |||
| 93d4d3c976 | |||
| 8284b56075 | |||
| 580caeffb9 | |||
| b266037bb4 | |||
| cb743de7fd | |||
| 7cf78c6635 | |||
| 0eca30367f | |||
| 36317c953a | |||
| f910593fb6 | |||
| 7942efa202 | |||
| 792c2931b0 | |||
| a3778af48a | |||
| 163dc7e1d1 | |||
| 0a59122ac2 | |||
| d2a5110f3b | |||
| cf4bbf94e4 | |||
| d7e42471a4 | |||
| d634c41e75 | |||
| 6b88397f82 | |||
| da3c709ff0 | |||
| ccd320d8ff | |||
| 3831e61d10 | |||
| e46e7b74e2 | |||
| b3da77a6bc | |||
| 96a74f8955 | |||
| 3ea17e6f46 | |||
| a8ac2c3af9 | |||
| 2168cbca30 | |||
| cceb45319a | |||
| e985b78241 | |||
| 090ca828c0 | |||
| 3522925dec | |||
| 5418ef7ae2 | |||
| 5faeddb99b | |||
| 1140c3e2e7 | |||
| 3fb08d27c7 | |||
| 250940d083 | |||
| e00be8f010 | |||
| 8b471c0772 | |||
| 88e738c796 | |||
| c76d8c79d8 | |||
| b396431a8b | |||
| d1795a82f7 | |||
| 9b821a0dfe | |||
| bf89842ee8 | |||
| d274e80f75 | |||
| a98b8945fb | |||
| 6b72599f80 | |||
| 4b6fe78a1a | |||
| d000c03fca | |||
| c0a185ba68 | |||
| ef0813e638 | |||
| 25e9f44260 | |||
| 2d6e858e8f | |||
| 53bf7c5068 | |||
| 13fb686188 | |||
| 61c5494588 | |||
| d96fefbc24 | |||
| e18b7c1013 | |||
| f190b51dcc | |||
| ca41c12f7c | |||
| 844edbe2f4 | |||
| 78974c02e5 | |||
| 4508464fd1 | |||
| dd6455a559 | |||
| 6b147b098a | |||
| 834f8674a3 | |||
| 5cee331abe | |||
| 98c00f7a60 | |||
| db8d946178 | |||
| b97a86f6dc | |||
| 34a4e6be3d | |||
| 22c5ea5000 | |||
| 79acf6c0ba | |||
| ebaa01896f | |||
| d4811b7901 | |||
| bf409967b2 | |||
| 4cb658daca | |||
| 8aeddcf8d8 | |||
| fb81e1bdd5 | |||
| d5b9e3c960 | |||
| c7ff536ed5 | |||
| 7dbb5fc86d | |||
| 8f766bcbaa | |||
| f65c6c89ae | |||
| 472462cdcb | |||
| 8575996e46 | |||
| 02d16ca510 | |||
| 1f69048c86 | |||
| 442aafd2c5 | |||
| 6082a6549a | |||
| 2567702b44 | |||
| ec981ac547 | |||
| d0d4ada7c2 | |||
| 54cbe3faa4 | |||
| 49e51de274 | |||
| e456035f29 | |||
| 964974c142 | |||
| b63eb1c8b4 | |||
| 603bcf7d9d | |||
| 0468a23c4f | |||
| f95e29df45 | |||
| 79d95d9477 | |||
| a406ba4ca0 | |||
| dfbda7c10b | |||
| c11ecd3323 | |||
| 8a5c39ee53 | |||
| c38035188b | |||
| ba02d372f7 | |||
| 5312b3694b | |||
| d0800bb31c | |||
| e272d38ca5 | |||
| 66517af81c | |||
| d2925ee3f9 | |||
| 729714375b | |||
| b77643b928 | |||
| 0491babe0a | |||
| 0adb36cfb8 | |||
| 8dc486f18f | |||
| a229ba9c15 | |||
| e4eed2e519 | |||
| 395eac26a3 | |||
| e9d7ddebb2 | |||
| 5dc1179d54 | |||
| 8decdf4346 | |||
| 98fd6240ba | |||
| 5a77528526 | |||
| d4fdced538 | |||
| 8b1bbdf360 | |||
| eae4cca148 | |||
| a194046168 | |||
| 7c6ed7bb31 | |||
| 20123d8245 | |||
| 650945418d | |||
| 064facb048 | |||
| 0bc1b5e0d3 | |||
| 65f6822199 | |||
| 021d2a8a54 | |||
| 5fa8f3ef6f | |||
| 10dffdbde2 | |||
| 72716afcd3 | |||
| 00468c7d0e | |||
| b7b1316e70 | |||
| 97a9e63231 | |||
| 3f50ab7cfc | |||
| 341a06aae7 | |||
| c48260f10c | |||
| 12a2517697 | |||
| 49698ea669 | |||
| 834202411d | |||
| 94e152bb57 | |||
| 5adcc3efad | |||
| b65bc65d7c | |||
| 06958c424c | |||
| 02896cac03 | |||
| c0ec1bc5cf | |||
| 40968d573c | |||
| 9f848e3e76 | |||
| f765fb63f0 | |||
| ff6a486daf | |||
| bb6ad14111 | |||
| a2207a2cb3 | |||
| c764d657d7 | |||
| 2b6cecc441 | |||
| 61d83be52e | |||
| 9f2362d346 | |||
| 193c3823b6 | |||
| 09d9f72db2 | |||
| 3d41d04818 | |||
| 46ac0a1ed3 | |||
| e6d77c165e | |||
| 18f041f1c6 | |||
| 9c0a633677 | |||
| 095196785a | |||
| 80b1207640 | |||
| ba6244780c | |||
| d8dc4656e4 | |||
| 30675e0567 | |||
| e6efddc639 | |||
| 47eace97bd | |||
| 980ffb45e9 | |||
| 17fd499420 | |||
| 0e9b15722a | |||
| 724c213af1 | |||
| a215035d07 | |||
| 25d0f50f3d | |||
| 6d44a579a4 | |||
| 106e461beb | |||
| 6472002f8a | |||
| 11bd1adbd4 | |||
| 28d366ab19 | |||
| 10e29090d8 | |||
| 73b0ddc2ce | |||
| 7c8e946871 | |||
| d12d16348a | |||
| 421fe67930 | |||
| 8291cdfc12 | |||
| 2e6fffc903 | |||
| 8b6c60bb17 | |||
| 1cae35a62b | |||
| 70b03b71e4 | |||
| 317521bba6 | |||
| 061e4a9e5f | |||
| ec3adff706 | |||
| 5524a14c87 | |||
| e1e8c943f3 | |||
| 0c6630d2d9 | |||
| 80a7d2c255 | |||
| 2b3a20c5ff | |||
| 216205200c | |||
| 61e7124516 | |||
| 2ab216effc | |||
| 1e59301c0e | |||
| d5a2c1cad6 | |||
| b5c60ee6a9 | |||
| 533b8a8cb7 | |||
| fecb193ded | |||
| dc5d257082 | |||
| c690473b2e | |||
| 04fa5eb289 | |||
| d6cd3a0ead | |||
| a23f281734 | |||
| 135d58e1f5 | |||
| 832ff19e51 | |||
| c7bef5ac7b | |||
| 2254cac15b | |||
| 01d574a302 | |||
| d67d697847 | |||
| 8c9e37f8a1 | |||
| 77393c5324 | |||
| e66db051a9 | |||
| 5670a6d1b4 | |||
| 02d45bed74 | |||
| adc0d145c3 | |||
| 58481e3133 | |||
| a3ec9b7b78 | |||
| 2d534b0293 | |||
| d73d0cf8ce | |||
| fbe490c28d | |||
| c09de43154 | |||
| be651ebb4b | |||
| 3fe793cd4d | |||
| a8cfe399b3 | |||
| ff9e39e2ee | |||
| 0d2b61472c | |||
| f9f3482bf1 | |||
| 400a2a9bab | |||
| 36864b4c2f | |||
| 5671b99b7e | |||
| 76f88686da | |||
| ba42a8b269 | |||
| ae7def2313 | |||
| e55176511f | |||
| 640f146373 | |||
| ebe8755613 | |||
| 05eee7cb0f | |||
| 7ac9fda1eb | |||
| 6987a0a585 | |||
| 1a338fb9e5 | |||
| 8dc18bbe5e | |||
| 64c2b32b24 | |||
| f01ef5d955 | |||
| 221ee0be05 | |||
| 2b8ba02c2a | |||
| b06583afce | |||
| b8b1ae7e88 | |||
| b67b1bed13 | |||
| 33fa9f8f50 | |||
| a7087aaa38 | |||
| a7170762d4 | |||
| ea3d198723 | |||
| fe8f048571 | |||
| 09d2feb15b | |||
| 33d4c1a60e | |||
| cbd7a13275 | |||
| 903b7f8718 | |||
| 88cd1651c3 | |||
| 13ff5f26a2 | |||
| 57345a5fd2 | |||
| bd82bd2249 | |||
| f253a69656 | |||
| 493a5835f8 | |||
| bffbcb229d | |||
| b5ec431b0a | |||
| 259706478f | |||
| c9f172ef21 | |||
| eb32c98b76 | |||
| 95c3f04c10 | |||
| d4daf7231c | |||
| 9a95f435ad | |||
| 5218b80cab | |||
| b1665c880b | |||
| 6395dfe425 | |||
| 304ad6e767 | |||
| 587a093aff | |||
| 91b49e4a16 | |||
| e72915c5d0 | |||
| bee2da567b | |||
| 951689c5ea | |||
| 4146ae60bc | |||
| 6bcf5efb65 | |||
| ddf10f1052 | |||
| 7edca44ed8 | |||
| ebc3f16597 | |||
| 9dad31775c | |||
| b1089b66c3 | |||
| 84142ab27e | |||
| fd518e39ff | |||
| 2fb4cbcf02 | |||
| d3337c7d3c | |||
| 5fd11bf009 | |||
| 92603a1e7f | |||
| 7d8afe3476 | |||
| f9c66ead50 | |||
| a12d5a982f | |||
| c1f176fa21 | |||
| f1dbe4ab6c | |||
| 459ebf7070 | |||
| 8cf0ec16bb | |||
| 87558c67c8 | |||
| 8727a2e299 | |||
| b8c5c87cfa | |||
| ce2970eefa | |||
| 24fea5a24a | |||
| 5285680eed | |||
| 17e63194ad | |||
| 6427b3406c | |||
| df8c77cd3e | |||
| 41796aec06 | |||
| 1355b692b9 | |||
| 2c13ef40e2 | |||
| 2bb67db888 | |||
| 204f384d01 | |||
| 42e3d48caf | |||
| 4747050b60 | |||
| c926db7f13 | |||
| 8cce3f4503 | |||
| 3464b0383c | |||
| d852029d25 | |||
| ca8d62d4e2 | |||
| 0632920a6f | |||
| c5bda4f3be | |||
| 3dc92b4939 | |||
| 150146385f | |||
| f50bd32fa3 | |||
| 0dcf820944 | |||
| 6fd16684f7 | |||
| eaa957168f | |||
| 796a7aaaf1 | |||
| 9aaae7b2d9 | |||
| c00609223b | |||
| 5641c3fc87 | |||
| dd1bdae947 | |||
| 70973b2281 | |||
| 5842a6d42f | |||
| 538ab52abd | |||
| 5a1358b310 | |||
| 024ed9085c | |||
| b2c9e445b7 | |||
| 5b8d5d5ee4 | |||
| a82efaf91b | |||
| 980090f108 | |||
| f7f31850d3 | |||
| 3415ce3965 | |||
| 436d9ef3e1 | |||
| da61621a62 | |||
| 3976d1c862 | |||
| a9980190d0 | |||
| e75dfcf41c | |||
| 1fdf2416ad | |||
| df627788c9 | |||
| c1ee58b47f | |||
| d6f7c54370 | |||
| 3a03fb51cd | |||
| e19964edf6 | |||
| 3bcf409f2b | |||
| 37289b9cbe | |||
| 227902b7cc | |||
| 644950ccc0 | |||
| d848937e6a | |||
| 446aa8becc | |||
| d52dbee13c | |||
| ed09304ed7 | |||
| 2861473097 | |||
| 39dc22973e | |||
| 25fd48697b | |||
| aec542e95e | |||
| eae95befe1 | |||
| f0200e7b38 | |||
| 70775f4988 | |||
| 074840ef56 | |||
| b54c501eeb | |||
| 6d587cb432 | |||
| 39c8031cd7 | |||
| 9ad1dad6df | |||
| 79e8fc2fac | |||
| 67c4422eb8 | |||
| 18df1223af | |||
| 0fafed7c53 | |||
| f7cbf2c221 | |||
| 87d2693e2b | |||
| de1e4196d9 | |||
| 9110e79c16 | |||
| 0743034de0 | |||
| f1ddb92886 | |||
| a8ce87f2cc | |||
| 86a329a61b | |||
| 77e24f41a5 | |||
| 3a5d9bd973 | |||
| 69f486d53f | |||
| 5d89043884 | |||
| 2b297c245a | |||
| 945a61fafd | |||
| 1ba166a172 | |||
| a9a840b6c3 | |||
| 6a100c8cb1 | |||
| b04e2ea130 | |||
| 5ac356bf91 | |||
| 35ceb7e83e | |||
| 5c0cc08d80 | |||
| 0bf77e592a | |||
| ec3c1578d2 | |||
| e8ed580ecc | |||
| e2cc2628ae | |||
| 9e31e753f0 | |||
| 588e0019d6 | |||
| 5bffdbd628 | |||
| ee239da647 | |||
| 9be3e1afe9 | |||
| af02b60ce3 | |||
| fbdae0452c | |||
| d68d73eb4c | |||
| 2de27d2e24 | |||
| 15591e24d7 | |||
| 715d59e3d4 | |||
| f71e0e9da9 | |||
| ba3779db07 | |||
| d99aa0242f | |||
| 3ea859de09 | |||
| 7473677477 | |||
| c3e2c13808 | |||
| 5074ba2f48 | |||
| a8b8f1079f | |||
| e52987df92 | |||
| 01fc965170 | |||
| ff71f29206 | |||
| a47c5144ac | |||
| 9b979b2273 | |||
| 81198192bb | |||
| c03a08e76a | |||
| 807e21eabf | |||
| 36f9d640df | |||
| 39f30b143b | |||
| 49497d0efb | |||
| 79c795927a | |||
| 66c5ce46ca | |||
| 22c7f70c93 | |||
| 467171a17e | |||
| 3022facbea | |||
| a67bf5ea43 | |||
| 3a1a3d4241 | |||
| 9197f4a0e1 | |||
| d21220693b | |||
| e07cac2406 | |||
| fd97576611 | |||
| 6ab01056e0 | |||
| 4dcbd2e7f0 | |||
| b94d0d4e8b | |||
| 7b20b9339d | |||
| 4d4a1f038b | |||
| e5ec79e345 | |||
| f4fe5c2a58 | |||
| a5130c1d3f | |||
| 8ab2da0482 | |||
| 1b54b19f3f | |||
| be7e6e431f | |||
| 6e42b097f8 | |||
| ef9cd8cd24 | |||
| 8f3e165917 | |||
| 33a11efe9a | |||
| 9a97436cd8 | |||
| f7935c0024 | |||
| 2b33d4e857 | |||
| ed16c35a57 | |||
| ae5b85d8d7 | |||
| 47b4414eb3 | |||
| e329bb2201 | |||
| 155ef9e5f5 | |||
| 4bac3ace18 | |||
| 1d2b53f6ee | |||
| 0fd49330d3 | |||
| 4b0e79345f | |||
| 0c819e9aa9 | |||
| 20d591c554 | |||
| 002469a98d | |||
| 3bc8430201 | |||
| db447a5d62 | |||
| 72527d0522 | |||
| cf4827d780 | |||
| 9b02591767 | |||
| 2b243f6dcb | |||
| 4d4aadfdfc | |||
| 2937db3dde | |||
| e1166c06fa | |||
| 3ee0777628 | |||
| 3441a6f215 | |||
| 235150a0cc | |||
| c1427c24d8 | |||
| 941dd90d77 | |||
| 3da76020b1 | |||
| 575dc5177d | |||
| 27255dc477 | |||
| fc4754a170 | |||
| 2e3a177f01 | |||
| 059f756d89 | |||
| e197087a50 | |||
| e0f61f128e | |||
| 9ee7598375 | |||
| fc48b920a8 | |||
| 9bc81da6f2 | |||
| 2b3363f5dc | |||
| bcff6e5134 | |||
| 1dcf76b006 | |||
| 7bdc0f42a2 | |||
| 023f5b6bc3 | |||
| 3e97e9307c | |||
| 4299ba7865 | |||
| 855d8007a7 | |||
| f239ec3232 | |||
| 5f0dcbb3fc | |||
| 97dce5ad41 | |||
| 1b3e4df1b2 | |||
| 8d74a0a9b5 | |||
| fbce109554 | |||
| f4641acdbb | |||
| 02ae9f8187 | |||
| 9f428415bb | |||
| c7d3741b97 | |||
| 6404ec0919 | |||
| 4cd2d10cad | |||
| 57f5d302d5 | |||
| 168524ba50 | |||
| 149362f2a7 | |||
| 6c330046b7 | |||
| 884a2cc226 | |||
| 3882118121 | |||
| 0fd2e7f51c | |||
| 408aa9bb59 | |||
| eec6993b95 | |||
| eb8e0a37d6 | |||
| 2a915f4fae | |||
| 26994000d7 | |||
| 78f143ea10 | |||
| 684a369fed | |||
| b19470ad0b | |||
| 6691cbf8c0 | |||
| 7ac98cf024 | |||
| 3d835fbeaa | |||
| d0824f52ea | |||
| 8c945100e2 | |||
| 68801c8e2b | |||
| a06eece4a0 | |||
| 873e093ff0 | |||
| 9c343d58ef | |||
| fed7a1df17 | |||
| 89d8907bc6 | |||
| 08d145b6fc | |||
| 57d3545701 | |||
| 08710558f5 | |||
| b80007bbd5 | |||
| ab0c93d443 | |||
| e84f045201 | |||
| 692b6b22aa | |||
| 954a58bcf5 | |||
| bce5b7d8eb | |||
| 736a706801 | |||
| 37cac19d9c | |||
| 4824dda5d5 | |||
| 3fa3c3ab9e | |||
| 058371ace8 | |||
| 430687f4d6 | |||
| 45f4b3bc28 | |||
| 7c12344d05 | |||
| 98213005d0 | |||
| db61589735 | |||
| 26dd7c5f71 | |||
| 3bbab525c6 | |||
| d42b7bc559 | |||
| 69f88ed840 | |||
| eb10bf2b34 | |||
| e051c4a9a2 | |||
| 477202bf24 | |||
| 876e52bb01 | |||
| edfd5be6a2 | |||
| baa4f17276 | |||
| 1de6f3e2ed | |||
| 1c56e7fea6 | |||
| 4c46bceb7d | |||
| 7098cd7602 | |||
| 210418e5d3 | |||
| 297de08278 | |||
| 050bdd3c02 | |||
| 3edc6e9b37 | |||
| 2e721c942f | |||
| 8d375070ac | |||
| 387a6d9f16 | |||
| 3999b991fa | |||
| 3d9e59dc90 | |||
| f25eb48f79 | |||
| 6e45e7b2cb | |||
| 59bba8e590 | |||
| 422c3fc28d | |||
| 6fb251f00f | |||
| 1cb876da55 | |||
| c5021d5ca2 | |||
| 359360b058 | |||
| 80da3feb01 | |||
| ff074c10a6 | |||
| 098776e31a | |||
| d702321969 | |||
| 4748cf92bb | |||
| 5e3b7c0db7 | |||
| 4648854a04 | |||
| 0dc28064db | |||
| a3d5c038ea | |||
| 91f7a0d1a5 | |||
| d5a6e50017 | |||
| 6d8204f60a | |||
| f25bb59065 | |||
| 39c7d56791 | |||
| 1a0369b69d | |||
| e5b4e01a96 | |||
| 0a6587942b | |||
| 7050dfca5c | |||
| 4a7a94240a | |||
| 479013f9c9 | |||
| 164c3141ca | |||
| 234954a86c | |||
| 8c19757dfc | |||
| 790185893d | |||
| 7a816fa4f3 | |||
| d4b5c53dc3 | |||
| e1b83f07a8 | |||
| b855726973 | |||
| 9371a4827e | |||
| 81ce939451 | |||
| 6fd10ea4a0 | |||
| 746b5f13bb | |||
| 474bfd19a2 | |||
| 71222649a0 | |||
| 1a72129108 | |||
| 3108e16018 | |||
| fae19f4533 | |||
| 348f1b8189 | |||
| ffdc7f66b9 | |||
| 07c4a429c1 | |||
| b10a1bb32d | |||
| 0420f2e49e | |||
| 9714994501 | |||
| b1c4cc9c45 | |||
| a85325f33d | |||
| 147ac48de6 | |||
| e86d63da8c | |||
| 09a39daeda | |||
| d9247dad33 | |||
| ec58b5cbed | |||
| eac2c5cf14 | |||
| 5a1d7fbf23 |
@ -1,7 +1,8 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
indent_style = tab
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
1
.eslintignore
Normal file
@ -0,0 +1 @@
|
||||
.eslintrc.js
|
||||
80
.eslintrc.js
Normal file
@ -0,0 +1,80 @@
|
||||
module.exports = {
|
||||
extends: [
|
||||
'eslint:recommended',
|
||||
'plugin:import/recommended',
|
||||
'plugin:import/typescript',
|
||||
'plugin:@typescript-eslint/eslint-recommended',
|
||||
'plugin:@typescript-eslint/recommended',
|
||||
'plugin:@typescript-eslint/recommended-requiring-type-checking',
|
||||
],
|
||||
plugins: ['prettier', '@typescript-eslint', 'import'],
|
||||
parser: '@typescript-eslint/parser',
|
||||
parserOptions: {
|
||||
project: './tsconfig.json',
|
||||
tsconfigRootDir: __dirname,
|
||||
sourceType: 'module',
|
||||
ecmaVersion: 'latest'
|
||||
},
|
||||
rules: {
|
||||
'arrow-parens': ['error', 'always'],
|
||||
'object-curly-spacing': ['error', 'always'],
|
||||
'@typescript-eslint/no-floating-promises': 'off',
|
||||
'@typescript-eslint/no-misused-promises': ['off', { checksVoidReturn: false }],
|
||||
'@typescript-eslint/no-unused-vars': ['warn', { argsIgnorePattern: '^_' }],
|
||||
"@typescript-eslint/no-non-null-assertion": "off",
|
||||
'import/first': 'error',
|
||||
'import/newline-after-import': 'error',
|
||||
'import/no-default-export': 'off',
|
||||
'import/no-duplicates': 'error',
|
||||
'import/no-unresolved': ['error', { ignore: ['^virtual:', '\\?inline$', '\\?raw$', '\\?asset&asarUnpack'] }],
|
||||
'import/order': [
|
||||
'error',
|
||||
{
|
||||
'groups': ['builtin', 'external', ['internal', 'index', 'sibling'], 'parent', 'type'],
|
||||
'newlines-between': 'always-and-inside-groups',
|
||||
'alphabetize': {order: 'ignore', caseInsensitive: false}
|
||||
}
|
||||
],
|
||||
'import/prefer-default-export': 'off',
|
||||
'camelcase': ['error', {properties: 'never'}],
|
||||
'class-methods-use-this': 'off',
|
||||
'lines-around-comment': [
|
||||
'error',
|
||||
{
|
||||
beforeBlockComment: false,
|
||||
afterBlockComment: false,
|
||||
beforeLineComment: false,
|
||||
afterLineComment: false,
|
||||
},
|
||||
],
|
||||
'max-len': 'off',
|
||||
'no-mixed-operators': 'error',
|
||||
'no-multi-spaces': ['error', {ignoreEOLComments: true}],
|
||||
'no-tabs': 'error',
|
||||
'no-void': 'error',
|
||||
'no-empty': 'off',
|
||||
'prefer-promise-reject-errors': 'off',
|
||||
'quotes': ['error', 'single', {
|
||||
avoidEscape: true,
|
||||
allowTemplateLiterals: false,
|
||||
}],
|
||||
'quote-props': ['error', 'consistent'],
|
||||
'semi': ['error', 'always'],
|
||||
},
|
||||
env: {
|
||||
browser: true,
|
||||
node: true,
|
||||
es6: true,
|
||||
},
|
||||
ignorePatterns: ['dist', 'node_modules'],
|
||||
root: true,
|
||||
settings: {
|
||||
'import/parsers': {
|
||||
'@typescript-eslint/parser': ['.ts']
|
||||
},
|
||||
'import/resolver': {
|
||||
typescript: {},
|
||||
exports: {},
|
||||
},
|
||||
},
|
||||
};
|
||||
4
.gitattributes
vendored
@ -1,2 +1,2 @@
|
||||
* text=auto
|
||||
*.js text eol=lf
|
||||
* text=auto eol=lf
|
||||
*.js text
|
||||
|
||||
94
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
@ -0,0 +1,94 @@
|
||||
name: Bug Report
|
||||
description: Report a YouTube Music bug
|
||||
title: "[Bug]: "
|
||||
labels: "bug :beetle:"
|
||||
body:
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: Preflight Checklist
|
||||
description: Please ensure you've completed all of the following.
|
||||
options:
|
||||
- label: I use the latest version of YouTube Music (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.
|
||||
required: true
|
||||
- label: I understand that **th-ch/youtube-music has NO affiliation with Google or YouTube**
|
||||
required: true
|
||||
- type: input
|
||||
attributes:
|
||||
label: YouTube Music (Application) Version
|
||||
description: |
|
||||
What version of the YouTube Music Application are you using?
|
||||
|
||||
Note: Please check if this issue is reproducible with the latest stable release.
|
||||
placeholder: 2.0.0
|
||||
validations:
|
||||
required: true
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: Are you using the portable version of the YouTube Music Application?
|
||||
options:
|
||||
- label: I use the portable version of the YouTube Music Application.
|
||||
- type: dropdown
|
||||
attributes:
|
||||
label: What operating system are you using?
|
||||
options:
|
||||
- Windows
|
||||
- macOS
|
||||
- Ubuntu
|
||||
- Other Linux
|
||||
- Other (specify below)
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
attributes:
|
||||
label: Operating System Version
|
||||
description: What operating system version are you using? On Windows, click the Start button > Settings > System > About. On macOS, click the Apple Menu > About This Mac. On Linux, use lsb_release or uname -a.
|
||||
placeholder: "e.g. Windows 10 version 1909, macOS Catalina 10.15.7, or Ubuntu 20.04"
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
attributes:
|
||||
label: What arch are you using?
|
||||
options:
|
||||
- x64
|
||||
- ia32
|
||||
- arm64 (including Apple Silicon)
|
||||
- Other (specify below)
|
||||
validations:
|
||||
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?
|
||||
placeholder: 1.20.0
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Reproduction steps
|
||||
description: Provide steps to reproduce the issue.
|
||||
placeholder: 1. Enable the X plugin.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Expected Behavior
|
||||
description: A clear and concise description of what you expected to happen.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Actual Behavior
|
||||
description: A clear description of what actually happens.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Enabled plugins
|
||||
description: Provide the list of plugins you enabled.
|
||||
placeholder: 1. Album Color Theme
|
||||
validations:
|
||||
required: true
|
||||
- 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.
|
||||
38
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
name: Feature Request
|
||||
description: Suggest an idea for YouTube Music
|
||||
title: "[Feature Request]: "
|
||||
labels: "enhancement :sparkles:"
|
||||
body:
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: Preflight Checklist
|
||||
description: Please ensure you've completed all of the following.
|
||||
options:
|
||||
- label: I use the latest version of YouTube Music (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.
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Problem Description
|
||||
description: Please add a clear and concise description of the problem you are seeking to solve with this feature request.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Proposed Solution
|
||||
description: Describe the solution you'd like in a clear and concise manner.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Alternatives Considered
|
||||
description: A clear and concise description of any alternative solutions or features you've considered.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Additional Information
|
||||
description: Add any other context about the problem here.
|
||||
validations:
|
||||
required: false
|
||||
163
.github/workflows/build.yml
vendored
Normal file
@ -0,0 +1,163 @@
|
||||
name: Build YouTube Music
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ master ]
|
||||
pull_request:
|
||||
|
||||
env:
|
||||
NODE_VERSION: "20.x"
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build YouTube Music
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: true
|
||||
matrix:
|
||||
os: [ macos-latest, ubuntu-latest, windows-latest ]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v2
|
||||
with:
|
||||
version: 8
|
||||
run_install: false
|
||||
|
||||
- name: Setup NodeJS
|
||||
if: startsWith(matrix.os, 'macOS') != true
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: ${{ env.NODE_VERSION }}
|
||||
cache: 'pnpm'
|
||||
|
||||
- name: Setup NodeJS for macOS
|
||||
if: startsWith(matrix.os, 'macOS')
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: ${{ env.NODE_VERSION }}
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install --frozen-lockfile
|
||||
|
||||
# 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'
|
||||
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')
|
||||
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')
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
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')
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
pnpm release:win
|
||||
|
||||
- name: Test
|
||||
uses: coactions/setup-xvfb@v1
|
||||
env:
|
||||
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
|
||||
with:
|
||||
run: pnpm test:debug
|
||||
|
||||
|
||||
release:
|
||||
runs-on: ubuntu-latest
|
||||
name: Release YouTube Music
|
||||
if: github.repository == 'th-ch/youtube-music' && github.ref == 'refs/heads/master'
|
||||
needs: build
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v2
|
||||
with:
|
||||
version: 8
|
||||
run_install: false
|
||||
|
||||
- name: Setup NodeJS
|
||||
if: startsWith(matrix.os, 'macOS') != true
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: ${{ env.NODE_VERSION }}
|
||||
cache: 'pnpm'
|
||||
|
||||
- name: Setup NodeJS for macOS
|
||||
if: startsWith(matrix.os, 'macOS')
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: ${{ env.NODE_VERSION }}
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install --frozen-lockfile
|
||||
|
||||
- name: Get version
|
||||
run: |
|
||||
echo "VERSION_TAG=v$(node -pe "require('./package.json').version")" >> $GITHUB_ENV
|
||||
|
||||
- name: Check if version already exists in tags
|
||||
run: |
|
||||
echo "VERSION_HASH=$(git rev-parse -q --verify 'refs/tags/${{ env.VERSION_TAG }}')" >> $GITHUB_ENV
|
||||
echo "CHANGELOG_ANCHOR=$(echo $VERSION_TAG | sed -e 's/\.//g')" >> $GITHUB_ENV
|
||||
|
||||
- name: Fetch draft release
|
||||
if: ${{ env.VERSION_HASH == '' }}
|
||||
uses: cardinalby/git-get-release-action@v1
|
||||
id: get_draft_release
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
latest: true
|
||||
draft: true
|
||||
searchLimit: 1
|
||||
|
||||
- name: Publish Release (if it does not exist)
|
||||
if: ${{ env.VERSION_HASH == '' }}
|
||||
uses: irongut/EditRelease@v1.2.0
|
||||
with:
|
||||
token: ${{ secrets.GH_TOKEN }}
|
||||
id: ${{ steps.get_draft_release.outputs.id }}
|
||||
draft: false
|
||||
prerelease: false
|
||||
replacename: true
|
||||
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.
|
||||
|
||||
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)
|
||||
|
||||
- name: Update changelog
|
||||
if: ${{ env.VERSION_HASH == '' }}
|
||||
run: |
|
||||
pnpm changelog
|
||||
|
||||
- name: Commit changelog
|
||||
if: ${{ env.VERSION_HASH == '' }}
|
||||
uses: stefanzweifel/git-auto-commit-action@v5
|
||||
with:
|
||||
commit_message: Update changelog for ${{ env.VERSION_TAG }}
|
||||
file_pattern: "changelog.md"
|
||||
commit_user_name: CI
|
||||
commit_user_email: th-ch@users.noreply.github.com
|
||||
20
.github/workflows/dependency-review.yml
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
# Dependency Review Action
|
||||
#
|
||||
# This Action will scan dependency manifest files that change as part of a Pull Reqest, surfacing known-vulnerable versions of the packages declared or updated in the PR. Once installed, if the workflow run is marked as required, PRs introducing known-vulnerable packages will be blocked from merging.
|
||||
#
|
||||
# Source repository: https://github.com/actions/dependency-review-action
|
||||
# Public documentation: https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review#dependency-review-enforcement
|
||||
name: "Dependency Review"
|
||||
on: [ pull_request ]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
dependency-review:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: "Checkout Repository"
|
||||
uses: actions/checkout@v4
|
||||
- name: "Dependency Review"
|
||||
uses: actions/dependency-review-action@v3
|
||||
20
.github/workflows/winget-cla.yml
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
name: Submit CLA to Winget PR
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
pr_url:
|
||||
description: "Specific PR URL"
|
||||
required: true
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
comment:
|
||||
name: Comment to PR
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Submit CLA to Windows Package Manager Community Repository Pull Request
|
||||
run: gh pr comment $PR_URL --body "@microsoft-github-policy-service agree"
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.WINGET_ACC_TOKEN }}
|
||||
PR_URL: ${{ inputs.pr_url }}
|
||||
30
.github/workflows/winget-submission.yml
vendored
Normal file
@ -0,0 +1,30 @@
|
||||
name: Submit to Windows Package Manager Community Repository
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [ released ]
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
tag_name:
|
||||
description: "Specific tag name"
|
||||
required: true
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
winget:
|
||||
name: Publish winget package
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Set winget version env
|
||||
env:
|
||||
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
|
||||
with:
|
||||
identifier: th-ch.YouTubeMusic
|
||||
installers-regex: '^YouTube-Music-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
|
||||
13
.gitignore
vendored
@ -1,4 +1,15 @@
|
||||
node_modules
|
||||
/dist
|
||||
/assets/generated
|
||||
/pack
|
||||
electron-builder.yml
|
||||
.vscode/settings.json
|
||||
.idea
|
||||
|
||||
.pnp.*
|
||||
.yarn/*
|
||||
!.yarn/patches
|
||||
!.yarn/plugins
|
||||
!.yarn/releases
|
||||
!.yarn/sdks
|
||||
!.yarn/versions
|
||||
.vite-inspect
|
||||
|
||||
5
.prettierrc
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"tabWidth": 2,
|
||||
"useTabs": false,
|
||||
"singleQuote": true
|
||||
}
|
||||
43
.travis.yml
@ -1,43 +0,0 @@
|
||||
matrix:
|
||||
include:
|
||||
- os: osx
|
||||
osx_image: xcode9.4
|
||||
language: node_js
|
||||
node_js: "10"
|
||||
env:
|
||||
- ELECTRON_CACHE=$HOME/.cache/electron
|
||||
- ELECTRON_BUILDER_CACHE=$HOME/.cache/electron-builder
|
||||
|
||||
- os: linux
|
||||
services: docker
|
||||
language: generic
|
||||
|
||||
cache:
|
||||
directories:
|
||||
- node_modules
|
||||
- $HOME/.cache/electron
|
||||
- $HOME/.cache/electron-builder
|
||||
|
||||
script:
|
||||
- |
|
||||
if [ "$TRAVIS_OS_NAME" == "linux" ]; then
|
||||
docker run --rm \
|
||||
$(env | \
|
||||
grep -Eo '^[^\s=]*(DEBUG|NODE_|ELECTRON_|YARN_|NPM_|CI|CIRCLE|TRAVIS|APPVEYOR_|CSC_|_TOKEN|_KEY|AWS_|STRIP|BUILD_)[^\s=]*' | \
|
||||
sed '/^$/d;s/^/-e /' | \
|
||||
paste -sd ' ' \
|
||||
) \
|
||||
-v ${PWD}:/project \
|
||||
-v ~/.cache/electron:/root/.cache/electron \
|
||||
-v ~/.cache/electron-builder:/root/.cache/electron-builder \
|
||||
electronuserland/builder \
|
||||
/bin/bash -c "npm install && npm run release:linux"
|
||||
else
|
||||
npm run release:mac
|
||||
fi
|
||||
before_cache:
|
||||
- rm -rf $HOME/.cache/electron-builder
|
||||
|
||||
branches:
|
||||
except:
|
||||
- "/^v\\d+\\.\\d+\\.\\d+$/"
|
||||
362
README.md
Normal file
@ -0,0 +1,362 @@
|
||||
# YouTube Music
|
||||
|
||||
<div align="center">
|
||||
|
||||
[](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>
|
||||
|
||||
Read this in other languages: [🇰🇷](./docs/readme/README-ko.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
|
||||
|
||||
## Translation
|
||||
|
||||
You can help with translation on [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>
|
||||
|
||||
## Download
|
||||
|
||||
You can check out the [latest release](https://github.com/th-ch/youtube-music/releases/latest) to quickly find the
|
||||
latest version.
|
||||
|
||||
### Arch Linux
|
||||
|
||||
Install the `youtube-music-bin` 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:
|
||||
```bash
|
||||
brew install --cask https://raw.githubusercontent.com/th-ch/youtube-music/master/youtube-music.rb
|
||||
```
|
||||
|
||||
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
|
||||
```
|
||||
|
||||
### Windows
|
||||
|
||||
You can use the [Scoop package manager](https://scoop.sh) to install the `youtube-music` package from
|
||||
the [`extras` bucket](https://github.com/ScoopInstaller/Extras).
|
||||
|
||||
```bash
|
||||
scoop bucket add extras
|
||||
scoop install extras/youtube-music
|
||||
```
|
||||
|
||||
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.
|
||||
|
||||
*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
|
||||
```
|
||||
|
||||
#### 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).
|
||||
- `x64` for 64-bit Windows
|
||||
- `ia32` for 32-bit Windows
|
||||
- `arm64` for ARM64 Windows
|
||||
- Download installer in release page. (`*-Setup.exe`)
|
||||
- Place them in the **same directory**.
|
||||
- Run the installer.
|
||||
|
||||
## 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 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 Nav 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/): 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)
|
||||
|
||||
- [**Last.fm**](https://www.last.fm/): Scrobbles support
|
||||
|
||||
- **Lumia Stream**: Adds [Lumia Stream](https://lumiastream.com/) support
|
||||
|
||||
- **Lyrics Genius**: Adds lyrics support for most songs
|
||||
|
||||
- **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
|
||||
|
||||
- **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
|
||||
|
||||
- **Shortcuts**: 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-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
|
||||
|
||||
- **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 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
|
||||
|
||||
## Themes
|
||||
|
||||
You can load CSS files to change the look of the application (Options > Visual Tweaks > Themes).
|
||||
|
||||
Some predefined themes are available in 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
|
||||
```
|
||||
|
||||
## Build your own plugins
|
||||
|
||||
Using plugins, you can:
|
||||
|
||||
- manipulate the app - the `BrowserWindow` from electron is passed to the plugin handler
|
||||
- change the front by manipulating the HTML/CSS
|
||||
|
||||
### Creating a plugin
|
||||
|
||||
Create a folder in `plugins/YOUR-PLUGIN-NAME`:
|
||||
|
||||
- `index.ts`: the main file of the plugin
|
||||
```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) {},
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
### Common use cases
|
||||
|
||||
- injecting custom CSS: create a `style.css` file in the same folder then:
|
||||
|
||||
```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
|
||||
});
|
||||
```
|
||||
|
||||
- If you want to change the 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
|
||||
});
|
||||
```
|
||||
|
||||
- communicating between the front and back: can be done using the ipcMain module from electron. See `index.ts` file and
|
||||
example in `sponsorblock` plugin.
|
||||
|
||||
## Build
|
||||
|
||||
1. Clone the repo
|
||||
2. Follow [this guide](https://pnpm.io/installation) to install `pnpm`
|
||||
3. Run `pnpm install --frozen-lockfile` to install dependencies
|
||||
4. Run `pnpm build:OS`
|
||||
|
||||
- `pnpm dist:win` - Windows
|
||||
- `pnpm dist:linux` - Linux
|
||||
- `pnpm dist:mac` - MacOS
|
||||
|
||||
Builds the app for macOS, Linux, and Windows,
|
||||
using [electron-builder](https://github.com/electron-userland/electron-builder).
|
||||
|
||||
## Production Preview
|
||||
|
||||
```bash
|
||||
pnpm start
|
||||
```
|
||||
|
||||
## Tests
|
||||
|
||||
```bash
|
||||
pnpm test
|
||||
```
|
||||
|
||||
Uses [Playwright](https://playwright.dev/) to test the app.
|
||||
|
||||
## License
|
||||
|
||||
MIT © [th-ch](https://github.com/th-ch/youtube-music)
|
||||
|
||||
## Most asked questions
|
||||
|
||||
### Why apps menu isn't showing up?
|
||||
|
||||
If `Hide Menu` option is on - you can show the menu with the <kbd>alt</kbd> key (or <kbd>\`</kbd> [backtick] if using
|
||||
the in-app-menu plugin)
|
||||
20
appveyor.yml
@ -1,20 +0,0 @@
|
||||
image: Visual Studio 2017
|
||||
|
||||
platform:
|
||||
- x64
|
||||
|
||||
cache:
|
||||
- node_modules
|
||||
- '%USERPROFILE%\.electron'
|
||||
|
||||
init:
|
||||
- git config --global core.autocrlf input
|
||||
|
||||
install:
|
||||
- ps: Install-Product node 8 x64
|
||||
- npm install
|
||||
|
||||
build_script:
|
||||
- npm run release:win
|
||||
|
||||
test: off
|
||||
BIN
assets/generated/icons/mac/icon.icns
Normal file
BIN
assets/generated/icons/png/1024x1024.png
Normal file
|
After Width: | Height: | Size: 59 KiB |
BIN
assets/generated/icons/png/128x128.png
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
BIN
assets/generated/icons/png/16x16.png
Normal file
|
After Width: | Height: | Size: 600 B |
BIN
assets/generated/icons/png/24x24.png
Normal file
|
After Width: | Height: | Size: 931 B |
BIN
assets/generated/icons/png/256x256.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
assets/generated/icons/png/32x32.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
assets/generated/icons/png/48x48.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
assets/generated/icons/png/512x512.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
assets/generated/icons/png/64x64.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
assets/generated/icons/win/icon.ico
Normal file
|
After Width: | Height: | Size: 353 KiB |
BIN
assets/media-icons-black/next.png
Normal file
|
After Width: | Height: | Size: 250 B |
BIN
assets/media-icons-black/pause.png
Normal file
|
After Width: | Height: | Size: 192 B |
BIN
assets/media-icons-black/play.png
Normal file
|
After Width: | Height: | Size: 265 B |
BIN
assets/media-icons-black/previous.png
Normal file
|
After Width: | Height: | Size: 269 B |
BIN
assets/youtube-music-tray.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
6
assets/youtube-music.svg
Normal file
@ -0,0 +1,6 @@
|
||||
<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>
|
||||
|
After Width: | Height: | Size: 353 B |
892
changelog.md
Normal file
@ -0,0 +1,892 @@
|
||||
### Changelog
|
||||
|
||||
All notable changes to this project will be documented in this file. Dates are displayed in UTC.
|
||||
|
||||
#### [v3.1.0](https://github.com/th-ch/youtube-music/compare/v3.0.2...v3.1.0)
|
||||
|
||||
- chore(deps): update dependency electron to v28 [`#1498`](https://github.com/th-ch/youtube-music/pull/1498)
|
||||
- Enable/Disable Navigation without restart [`#1507`](https://github.com/th-ch/youtube-music/pull/1507)
|
||||
- Turkish(tr)_lang_file [`#1513`](https://github.com/th-ch/youtube-music/pull/1513)
|
||||
- Skip Disliked Songs [`#1505`](https://github.com/th-ch/youtube-music/pull/1505)
|
||||
- chore(deps): update dependency @typescript-eslint/eslint-plugin to v6.13.2 [`#1452`](https://github.com/th-ch/youtube-music/pull/1452)
|
||||
- fix: Homebrew latest release url parsing [`#1496`](https://github.com/th-ch/youtube-music/pull/1496)
|
||||
- fix: in-player adblocker inject timing issue [`#1478`](https://github.com/th-ch/youtube-music/issues/1478)
|
||||
- fix(package.json): fix RPM version `libuuid` issue [`#1508`](https://github.com/th-ch/youtube-music/issues/1508)
|
||||
- Translated using Weblate (Polish) [`7b78ba6`](https://github.com/th-ch/youtube-music/commit/7b78ba67613f14be65a45751efeb06431b405a91)
|
||||
- Translated using Weblate (French) [`ebc0879`](https://github.com/th-ch/youtube-music/commit/ebc087963b23265ff00528c8305d51597abf587a)
|
||||
- Translated using Weblate (Chinese (Traditional)) [`020bdc0`](https://github.com/th-ch/youtube-music/commit/020bdc0811ea45ad6c2853c62a05ae6695c5c4f9)
|
||||
|
||||
#### [v3.0.2](https://github.com/th-ch/youtube-music/compare/v3.0.1...v3.0.2)
|
||||
|
||||
> 3 December 2023
|
||||
|
||||
- fix(adblocker): fix In-Player adblocker [`#1478`](https://github.com/th-ch/youtube-music/issues/1478)
|
||||
- fix(menu): crash on linux [`#1477`](https://github.com/th-ch/youtube-music/issues/1477)
|
||||
- fix: update pnpm-lock.yaml [`9e2c6b1`](https://github.com/th-ch/youtube-music/commit/9e2c6b1afa33b5708853c8328946e68ec45b09c3)
|
||||
- Translated using Weblate (Chinese (Traditional)) [`125b69f`](https://github.com/th-ch/youtube-music/commit/125b69fd75a05c3eb893886119e2d9f2332b3e56)
|
||||
- Translated using Weblate (French) [`15c4551`](https://github.com/th-ch/youtube-music/commit/15c455105b5100a8ee2bd0a4631548d3d455f047)
|
||||
|
||||
#### [v3.0.1](https://github.com/th-ch/youtube-music/compare/v3.0.0...v3.0.1)
|
||||
|
||||
> 2 December 2023
|
||||
|
||||
- hotfix(adblocker): fix #1475 [`#1475`](https://github.com/th-ch/youtube-music/issues/1475)
|
||||
- Translated using Weblate (French) [`7f02afc`](https://github.com/th-ch/youtube-music/commit/7f02afc5a6839adfe8437d4e2cc8dee13a93b311)
|
||||
- Update changelog for v3.0.0 [`d8c8bd1`](https://github.com/th-ch/youtube-music/commit/d8c8bd17ecfbdf96ebd29eb4c5748c07876ee242)
|
||||
- Translated using Weblate (German) [`0660f0b`](https://github.com/th-ch/youtube-music/commit/0660f0b7ce6895ef5800f48ade1da2d7f8e0c1f7)
|
||||
|
||||
### [v3.0.0](https://github.com/th-ch/youtube-music/compare/v2.2.0...v3.0.0)
|
||||
|
||||
> 2 December 2023
|
||||
|
||||
- Add text to Translation section [`#1470`](https://github.com/th-ch/youtube-music/pull/1470)
|
||||
- fix(deps): update dependency youtubei.js to v8 [`#1473`](https://github.com/th-ch/youtube-music/pull/1473)
|
||||
- chore(deps): update dependency electron to v27.1.3 [`#1471`](https://github.com/th-ch/youtube-music/pull/1471)
|
||||
- fix(deps): update dependency @xhayper/discord-rpc to v1.1.1 [`#1472`](https://github.com/th-ch/youtube-music/pull/1472)
|
||||
- feat: add support i18n [`#1468`](https://github.com/th-ch/youtube-music/pull/1468)
|
||||
- chore(deps): update dependency electron to v27.1.2 [`#1441`](https://github.com/th-ch/youtube-music/pull/1441)
|
||||
- Nicer Readme [`#1439`](https://github.com/th-ch/youtube-music/pull/1439)
|
||||
- Windows Zoom, ScaleFactor [`#1402`](https://github.com/th-ch/youtube-music/pull/1402)
|
||||
- chore(deps): bump axios from 1.5.1 to 1.6.1 [`#1400`](https://github.com/th-ch/youtube-music/pull/1400)
|
||||
- Updated mac icon to better reflect the Mac styling [`#1395`](https://github.com/th-ch/youtube-music/pull/1395)
|
||||
- feat: rename plugins to clarify context [`#1392`](https://github.com/th-ch/youtube-music/pull/1392)
|
||||
- feat: refactor plugin utils [`#1391`](https://github.com/th-ch/youtube-music/pull/1391)
|
||||
- feat: plugin auto-importer with `vite-plugin-resolve` [`#1385`](https://github.com/th-ch/youtube-music/pull/1385)
|
||||
- feat: migrate from `rollup` to `electron-vite` [`#1364`](https://github.com/th-ch/youtube-music/pull/1364)
|
||||
- feat: enable `context-isolation` [`#1361`](https://github.com/th-ch/youtube-music/pull/1361)
|
||||
- fix: add workaround for `podcast` type video [`#1362`](https://github.com/th-ch/youtube-music/pull/1362)
|
||||
- fix: fix broken menu-layout [`#1360`](https://github.com/th-ch/youtube-music/pull/1360)
|
||||
- Add Homebrew cask install option for MacOS. [`#1357`](https://github.com/th-ch/youtube-music/pull/1357)
|
||||
- feat: changed Zoom shortcuts to standard [`#1458`](https://github.com/th-ch/youtube-music/issues/1458)
|
||||
- fix(in-app-menu): fix #1436 [`#1436`](https://github.com/th-ch/youtube-music/issues/1436)
|
||||
- fix(discord): update application client-id [`#1431`](https://github.com/th-ch/youtube-music/issues/1431)
|
||||
- chore(deps): update dependency electron to v27.0.4 [`#1324`](https://github.com/th-ch/youtube-music/issues/1324)
|
||||
- fix(in-app-menu): panel should close with the window when it is closed [`#1389`](https://github.com/th-ch/youtube-music/issues/1389)
|
||||
- fix: change titleBarOverlay height based on zoomFactor [`#1375`](https://github.com/th-ch/youtube-music/issues/1375)
|
||||
- fix: fixed an issue if "Always on top" is enabled, the dialog is displayed below the window [`#1379`](https://github.com/th-ch/youtube-music/issues/1379)
|
||||
- fix: fix winget version (fix #1363) [`#1363`](https://github.com/th-ch/youtube-music/issues/1363)
|
||||
- feat: run prettier [`a3104fd`](https://github.com/th-ch/youtube-music/commit/a3104fda4b0d58b076d0c737111636a66e468acc)
|
||||
- Translated using Weblate (Korean) [`b4b7ad8`](https://github.com/th-ch/youtube-music/commit/b4b7ad824b8c489ae483eba139b46e5b200231fc)
|
||||
- Translated using Weblate (English) [`d2eabaa`](https://github.com/th-ch/youtube-music/commit/d2eabaa4bbccd89eae529eae52cec035e8e2620c)
|
||||
|
||||
#### [v2.2.0](https://github.com/th-ch/youtube-music/compare/v2.1.3...v2.2.0)
|
||||
|
||||
> 27 October 2023
|
||||
|
||||
- feat(ambient-mode): add config for `ambient-mode` plugin [`#1349`](https://github.com/th-ch/youtube-music/pull/1349)
|
||||
- bump deps [`4248d20`](https://github.com/th-ch/youtube-music/commit/4248d20e8ef926ce7b1d07eb83743755a341d9f6)
|
||||
- Update changelog for v2.1.3 [`dc73561`](https://github.com/th-ch/youtube-music/commit/dc73561c8a8acfc8ba91aff2dc78e4267869f2fd)
|
||||
- Bump version to 2.2.0 [`6288d0b`](https://github.com/th-ch/youtube-music/commit/6288d0b171a65ea015922cdf3af6c7bd9a1f269b)
|
||||
|
||||
#### [v2.1.3](https://github.com/th-ch/youtube-music/compare/v2.1.2...v2.1.3)
|
||||
|
||||
> 23 October 2023
|
||||
|
||||
- fix: fixed bugs in downloader [`#1342`](https://github.com/th-ch/youtube-music/pull/1342)
|
||||
- feat(discord): rename `Listen Along` to `Play on YTM` [`#1341`](https://github.com/th-ch/youtube-music/issues/1341)
|
||||
- chore(deps): bump deps [`4333891`](https://github.com/th-ch/youtube-music/commit/4333891ccabe42aedf756fd48618be715db13262)
|
||||
- Update changelog for v2.1.2 [`fa4c69d`](https://github.com/th-ch/youtube-music/commit/fa4c69d228d4e06a7858e2b22fcdfa075a8ca766)
|
||||
- fix(store): fix listenAlong statement [`bceaa05`](https://github.com/th-ch/youtube-music/commit/bceaa05197d47a4a4bbd22e767d1e4d6ec277514)
|
||||
|
||||
#### [v2.1.2](https://github.com/th-ch/youtube-music/compare/v2.1.1...v2.1.2)
|
||||
|
||||
> 19 October 2023
|
||||
|
||||
- feat(in-app-menu): add an option to hide the window controls [`#1335`](https://github.com/th-ch/youtube-music/pull/1335)
|
||||
- fix: fixed an issue where the album name was missing [`#1334`](https://github.com/th-ch/youtube-music/pull/1334)
|
||||
- chore(deps): update dependency electron to v27.0.1 [`#1331`](https://github.com/th-ch/youtube-music/pull/1331)
|
||||
- fix: fixed an issue where only the first 100 songs in a playlist were downloaded [`#1329`](https://github.com/th-ch/youtube-music/pull/1329)
|
||||
- Updated readme plugins list [`#1326`](https://github.com/th-ch/youtube-music/pull/1326)
|
||||
- QOL: Move source code under the src directory. [`#1318`](https://github.com/th-ch/youtube-music/pull/1318)
|
||||
- feat: migrate from `npm` to `pnpm` [`#1316`](https://github.com/th-ch/youtube-music/pull/1316)
|
||||
- fix: fix unresponsive (fix #1325) [`#1325`](https://github.com/th-ch/youtube-music/issues/1325)
|
||||
- fix(blocker): remove the `app.isPackaged` check (fix #1315) [`#1315`](https://github.com/th-ch/youtube-music/issues/1315)
|
||||
- fix(discord): `Discord RPC fails if a song's title is only one character` (fix #1314) [`#1314`](https://github.com/th-ch/youtube-music/issues/1314)
|
||||
- chore(deps): Bump @rollup/plugin-commonjs, pnpm version, Remove ytpl [`9705f84`](https://github.com/th-ch/youtube-music/commit/9705f8489d7bf262bfd8b15ab84c2d3485f10eae)
|
||||
- chore(deps): Bump rollup, @xhayper/discord-rpc version [`00a3e8d`](https://github.com/th-ch/youtube-music/commit/00a3e8d35ec335e1913be19f30ae09dbe0b7acdd)
|
||||
- chore(deps): update dependency rollup to v4.1.4 [`6774d54`](https://github.com/th-ch/youtube-music/commit/6774d54f5eca432edc2e11743d9d1b1c2fda9ac8)
|
||||
|
||||
#### [v2.1.1](https://github.com/th-ch/youtube-music/compare/v2.1.0...v2.1.1)
|
||||
|
||||
> 14 October 2023
|
||||
|
||||
- hotfix(downloader): can't get an album title (fix #1313) [`#1313`](https://github.com/th-ch/youtube-music/issues/1313)
|
||||
- Update changelog for v2.1.0 [`92cab89`](https://github.com/th-ch/youtube-music/commit/92cab89d17175741e60e65ea61633e23ebdc1f45)
|
||||
- Bump version to 2.1.1 [`3bb5bc2`](https://github.com/th-ch/youtube-music/commit/3bb5bc2ca1856f4e222ee1e01e865f1ab804fdba)
|
||||
- Add "about" menu to show app version [`21c45fa`](https://github.com/th-ch/youtube-music/commit/21c45faf2043cf72a7c14d5cf6c8d848d0448528)
|
||||
|
||||
#### [v2.1.0](https://github.com/th-ch/youtube-music/compare/v2.0.4...v2.1.0)
|
||||
|
||||
> 14 October 2023
|
||||
|
||||
- feat(downloader): Added support for audio format auto-detection [`#1310`](https://github.com/th-ch/youtube-music/pull/1310)
|
||||
- feat(in-app-menu): enable in-app-menu by default (in Windows) [`#1311`](https://github.com/th-ch/youtube-music/pull/1311)
|
||||
- fix: winget publish [`#1307`](https://github.com/th-ch/youtube-music/pull/1307)
|
||||
- hotfix(downloader): fix invalid query selector (fix #1308) [`#1308`](https://github.com/th-ch/youtube-music/issues/1308)
|
||||
- chore(deps): bump dependencies [`3c6b3ae`](https://github.com/th-ch/youtube-music/commit/3c6b3aeff0aae32adb2f2ad9c091b0a9701d3c24)
|
||||
- chore(actions): create winget-cla.yml [`37181a7`](https://github.com/th-ch/youtube-music/commit/37181a7b5e2aa5bed6a36298eac3a66aac2762b8)
|
||||
- Update changelog for v2.0.4 [`e9398ad`](https://github.com/th-ch/youtube-music/commit/e9398adac34a8abb11801e32999a915a8be0ece6)
|
||||
|
||||
#### [v2.0.4](https://github.com/th-ch/youtube-music/compare/v2.0.3...v2.0.4)
|
||||
|
||||
> 12 October 2023
|
||||
|
||||
- hotfix(adblocker): fix `ipcRenderer.sendSync() with ...` [`#1301`](https://github.com/th-ch/youtube-music/pull/1301)
|
||||
- fix(downloader): Korean filename is broken on non-macOS devices [`#1297`](https://github.com/th-ch/youtube-music/pull/1297)
|
||||
- chore(deps): bump deps [`b6894dc`](https://github.com/th-ch/youtube-music/commit/b6894dca2974c63fa2945d3a4995665d11eb2a78)
|
||||
- fix: bump dependencies [`7aa970c`](https://github.com/th-ch/youtube-music/commit/7aa970cebc8e1407ff6937b402ba303e14c73efd)
|
||||
- fix(downloader): private playlist download [`1d5b299`](https://github.com/th-ch/youtube-music/commit/1d5b2997bd0c72c1c007c57b145509e4a8f77fef)
|
||||
|
||||
#### [v2.0.3](https://github.com/th-ch/youtube-music/compare/v2.0.2...v2.0.3)
|
||||
|
||||
> 10 October 2023
|
||||
|
||||
- feat(discord): add `Hide GitHub link Button` [`#1293`](https://github.com/th-ch/youtube-music/pull/1293)
|
||||
- feat(deps): bundle `youtubei.js` (temporary solution) [`#1292`](https://github.com/th-ch/youtube-music/pull/1292)
|
||||
- fix(mpris): fixed an issue where MPRIS information was incorrect [`#1291`](https://github.com/th-ch/youtube-music/pull/1291)
|
||||
- fix(discord): fixed an issue where `timeChanged` was not being applied to Discord activities [`#1290`](https://github.com/th-ch/youtube-music/pull/1290)
|
||||
- Fix: typo in README [`#1286`](https://github.com/th-ch/youtube-music/pull/1286)
|
||||
- fix: chore(deps): update dependency @jellybrick/mpris-service to 2.1.4 (fix #971) [`#971`](https://github.com/th-ch/youtube-music/issues/971)
|
||||
- chore(deps): Bump `@cliqz/adblocker-electron` to 1.26.8 (fix #1269) [`#1269`](https://github.com/th-ch/youtube-music/issues/1269)
|
||||
- fix: missing icons taskbar-mediacontrol [`fbf4b3b`](https://github.com/th-ch/youtube-music/commit/fbf4b3b8b5e39c61975e67efc990c45f62de76d8)
|
||||
- remove: migration scripts [`52ba2dc`](https://github.com/th-ch/youtube-music/commit/52ba2dc9ffd8e235251d1279686f55e33b3fa3bb)
|
||||
- feat: add migration script [`926b9fb`](https://github.com/th-ch/youtube-music/commit/926b9fb5e6db69b69935ec5d7be9a76a84e54ceb)
|
||||
|
||||
#### [v2.0.2](https://github.com/th-ch/youtube-music/compare/v2.0.1...v2.0.2)
|
||||
|
||||
> 8 October 2023
|
||||
|
||||
- fix: discord-rpc [`#1278`](https://github.com/th-ch/youtube-music/pull/1278)
|
||||
- Bump version to 2.0.2 [`b5dbfaf`](https://github.com/th-ch/youtube-music/commit/b5dbfaf68691a546d72f5c1818fd3a44802eb0fa)
|
||||
- Merge pull request #1272 from th-ch/feat/resolves-1265 [`6b7fd5b`](https://github.com/th-ch/youtube-music/commit/6b7fd5ba630888de08004105179c059c6d93e028)
|
||||
- Merge pull request #1279 from th-ch/fix/1274 [`73a049a`](https://github.com/th-ch/youtube-music/commit/73a049a7bc5161f0d53c252cf510f1e2a6f6eeb3)
|
||||
|
||||
#### [v2.0.1](https://github.com/th-ch/youtube-music/compare/v2.0.0...v2.0.1)
|
||||
|
||||
> 8 October 2023
|
||||
|
||||
- Update changelog for v2.0.0 [`2d69dfd`](https://github.com/th-ch/youtube-music/commit/2d69dfd333c3223ecc7de13a0abc98fd99aa3a2b)
|
||||
- hotfix: hotfix for #1267 [`c002263`](https://github.com/th-ch/youtube-music/commit/c002263c3bdd51890b8ffb431283afb60405d8fe)
|
||||
- Bump version to 2.0.1 [`a1f025e`](https://github.com/th-ch/youtube-music/commit/a1f025e23c599fe5eb63b32ea38ee81200d232d6)
|
||||
|
||||
### [v2.0.0](https://github.com/th-ch/youtube-music/compare/v1.20.0...v2.0.0)
|
||||
|
||||
> 7 October 2023
|
||||
|
||||
- Bump version to 2.0.0 [`#1257`](https://github.com/th-ch/youtube-music/pull/1257)
|
||||
- feat(GitHub): add issue template [`#1264`](https://github.com/th-ch/youtube-music/pull/1264)
|
||||
- feat: I guess it's TypeScript [`#1235`](https://github.com/th-ch/youtube-music/pull/1235)
|
||||
- chore(deps): update dependency rollup to v4 [`#44`](https://github.com/th-ch/youtube-music/pull/44)
|
||||
- feat: apply rollup 🚀 [`#20`](https://github.com/th-ch/youtube-music/pull/20)
|
||||
- fix: Fixes the video-toggle being displayed at the wrong position on fullscreen [`#1218`](https://github.com/th-ch/youtube-music/pull/1218)
|
||||
- Change Winget Releaser job to `ubuntu-latest` [`#1225`](https://github.com/th-ch/youtube-music/pull/1225)
|
||||
- Fixes the video-toggle being displayed at the wrong position on fullscreen [`#1218`](https://github.com/th-ch/youtube-music/pull/1218)
|
||||
- Fix Remove upgrade button [`#1206`](https://github.com/th-ch/youtube-music/pull/1206)
|
||||
- Fixed Age Restriction Bypass [`#1221`](https://github.com/th-ch/youtube-music/pull/1221)
|
||||
- fix(tuna): handle `playPaused` [`#1`](https://github.com/th-ch/youtube-music/pull/1)
|
||||
- Add plugin to always use the compact sidebar [`#1190`](https://github.com/th-ch/youtube-music/pull/1190)
|
||||
- Hide login elements [`#1189`](https://github.com/th-ch/youtube-music/pull/1189)
|
||||
- Fix navigation arrows [`#1191`](https://github.com/th-ch/youtube-music/pull/1191)
|
||||
- MacOS better copy paste in readme.md [`#1156`](https://github.com/th-ch/youtube-music/pull/1156)
|
||||
- feat(build-windows): Add support for IA32 (resolves #1110) [`#1110`](https://github.com/th-ch/youtube-music/issues/1110)
|
||||
- fix: fix the downloader to work in a proxy environment (resolve #46) [`#46`](https://github.com/th-ch/youtube-music/issues/46)
|
||||
- fix: fix #34 [`#34`](https://github.com/th-ch/youtube-music/issues/34)
|
||||
- fix: fix #32 [`#32`](https://github.com/th-ch/youtube-music/issues/32)
|
||||
- fix: fix #29 [`#29`](https://github.com/th-ch/youtube-music/issues/29)
|
||||
- fix: fix #30 [`#30`](https://github.com/th-ch/youtube-music/issues/30)
|
||||
- fix: fix #29 [`#29`](https://github.com/th-ch/youtube-music/issues/29)
|
||||
- fix: fix #30 [`#30`](https://github.com/th-ch/youtube-music/issues/30)
|
||||
- hotfix: fix #28 [`#28`](https://github.com/th-ch/youtube-music/issues/28)
|
||||
- fix: resolve #12 [`#12`](https://github.com/th-ch/youtube-music/issues/12)
|
||||
- fix(precise-volume): fix slider ui does not sync [`#15`](https://github.com/th-ch/youtube-music/issues/15)
|
||||
- fix(video-toggle): fix video config not load config [`#16`](https://github.com/th-ch/youtube-music/issues/16)
|
||||
- refactor(in-app-menu): refactor in-app-menu plugin [`#13`](https://github.com/th-ch/youtube-music/issues/13)
|
||||
- feat(disable-autoplay): add `apply once`, resolve #9 [`#9`](https://github.com/th-ch/youtube-music/issues/9)
|
||||
- fix: fix #4 [`#4`](https://github.com/th-ch/youtube-music/issues/4)
|
||||
- fix: fix #7 [`#7`](https://github.com/th-ch/youtube-music/issues/7)
|
||||
- fix: fix #1187 [`#1187`](https://github.com/th-ch/youtube-music/issues/1187)
|
||||
- fix: resolves #978 [`#978`](https://github.com/th-ch/youtube-music/issues/978)
|
||||
- fix: resolves #958 [`#958`](https://github.com/th-ch/youtube-music/issues/958)
|
||||
- Merge pull request #1259 from organization/feat/fork-to-main [`457a8b5`](https://github.com/th-ch/youtube-music/commit/457a8b5018695d82b043cb7fa7264fbcf43f996c)
|
||||
- fix: remove `xo`, migration to `eslint` [`c722896`](https://github.com/th-ch/youtube-music/commit/c722896a73cfbca3bbbab67bfcdfa639474e9030)
|
||||
- fix: rollback changelog [`9048da2`](https://github.com/th-ch/youtube-music/commit/9048da22f98b9091ab606464a6cbdaad8bc185ae)
|
||||
|
||||
#### [v1.20.0](https://github.com/th-ch/youtube-music/compare/v1.19.0...v1.20.0)
|
||||
|
||||
> 18 May 2023
|
||||
|
||||
- Bump version to 1.20.0 [`#1117`](https://github.com/th-ch/youtube-music/pull/1117)
|
||||
- Multiple implementations for the Adblocker plugin [`#1134`](https://github.com/th-ch/youtube-music/pull/1134)
|
||||
- add xesam:url mpris from songInfo.url [`#1138`](https://github.com/th-ch/youtube-music/pull/1138)
|
||||
- revert adblocker bump [`#1124`](https://github.com/th-ch/youtube-music/pull/1124)
|
||||
- fix security issues in dependencies [`#1116`](https://github.com/th-ch/youtube-music/pull/1116)
|
||||
- commit assets/generated [`#1118`](https://github.com/th-ch/youtube-music/pull/1118)
|
||||
- remove `electron.remote` dependency [`#1113`](https://github.com/th-ch/youtube-music/pull/1113)
|
||||
- .gitattributes set `eol=lf` on *all* files [`#1115`](https://github.com/th-ch/youtube-music/pull/1115)
|
||||
- [crossfade] add `[beta]` tag to warn of possible bugs [`#1096`](https://github.com/th-ch/youtube-music/pull/1096)
|
||||
- [crossfade] add menu options [`#1065`](https://github.com/th-ch/youtube-music/pull/1065)
|
||||
- [captions-selector] add `autoload` option [`#1079`](https://github.com/th-ch/youtube-music/pull/1079)
|
||||
- [downloader] Cleanup metadata [`#1091`](https://github.com/th-ch/youtube-music/pull/1091)
|
||||
- fix protocol handler on unix [`#1099`](https://github.com/th-ch/youtube-music/pull/1099)
|
||||
- fix merge conflict mistake in #1032 [`#1090`](https://github.com/th-ch/youtube-music/pull/1090)
|
||||
- Create providers/decorators.js [`#1068`](https://github.com/th-ch/youtube-music/pull/1068)
|
||||
- [adblocker] fix ads showing on program start [`#1100`](https://github.com/th-ch/youtube-music/pull/1100)
|
||||
- Allow downloading age restricted videos [`#1086`](https://github.com/th-ch/youtube-music/pull/1086)
|
||||
- add starting page option [`#1073`](https://github.com/th-ch/youtube-music/pull/1073)
|
||||
- [downloader] plugin overhaul [`#1054`](https://github.com/th-ch/youtube-music/pull/1054)
|
||||
- [Snyk] Upgrade @cliqz/adblocker-electron from 1.25.2 to 1.26.0 [`#1070`](https://github.com/th-ch/youtube-music/pull/1070)
|
||||
- [in-app-menu] fix css style of the library of uploaded songs [`#1072`](https://github.com/th-ch/youtube-music/pull/1072)
|
||||
- add option to hide the like buttons [`#1077`](https://github.com/th-ch/youtube-music/pull/1077)
|
||||
- Nitpick: Fix name casing in tray icon tooltip [`#1081`](https://github.com/th-ch/youtube-music/pull/1081)
|
||||
- [lyrics-genius] Improved reliability of east asian language detection #1080 [`#1082`](https://github.com/th-ch/youtube-music/pull/1082)
|
||||
- Add dynamic synced plugin config provider [`#1064`](https://github.com/th-ch/youtube-music/pull/1064)
|
||||
- [captions-selector] fix button showing when there aren't any captions available [`#1063`](https://github.com/th-ch/youtube-music/pull/1063)
|
||||
- [in-app-menu] fix items hidden by navbar in library [`#1067`](https://github.com/th-ch/youtube-music/pull/1067)
|
||||
- Fix Youtube Music logo is draggable [`#1061`](https://github.com/th-ch/youtube-music/pull/1061)
|
||||
- fix build action failing on forks, and run it on pull requests [`#1069`](https://github.com/th-ch/youtube-music/pull/1069)
|
||||
- try to fix songInfo time&album [`#1032`](https://github.com/th-ch/youtube-music/pull/1032)
|
||||
- [lyrics] Romanization toggle for Genius plugin [`#1039`](https://github.com/th-ch/youtube-music/pull/1039)
|
||||
- [Snyk] Upgrade html-to-text from 9.0.3 to 9.0.4 [`#1056`](https://github.com/th-ch/youtube-music/pull/1056)
|
||||
- [in-app-menu] add toggle menu icon [`#988`](https://github.com/th-ch/youtube-music/pull/988)
|
||||
- Fix playback speed slider not showing and PiP button showing when it shouldn't [`#1048`](https://github.com/th-ch/youtube-music/pull/1048)
|
||||
- [lyrics-genius] Fix lyrics not showing up or showing up when they shouldn't [`#1052`](https://github.com/th-ch/youtube-music/pull/1052)
|
||||
- [in-app-menu] disable nav-bar drag when menu is open [`#1055`](https://github.com/th-ch/youtube-music/pull/1055)
|
||||
- [Notifications] [Windows] Native interactive notifications [`#946`](https://github.com/th-ch/youtube-music/pull/946)
|
||||
- automate winget releases [`#1049`](https://github.com/th-ch/youtube-music/pull/1049)
|
||||
- build win target on ARM [`#1029`](https://github.com/th-ch/youtube-music/pull/1029)
|
||||
- feat: auto reconnect rpc and CSP fix [`#961`](https://github.com/th-ch/youtube-music/pull/961)
|
||||
- [in-app-menu] make navbar draggable [`#989`](https://github.com/th-ch/youtube-music/pull/989)
|
||||
- Add option `useNativePiP` in PiP plugin to use native PiP [`#1013`](https://github.com/th-ch/youtube-music/pull/1013)
|
||||
- [PiP] fix hotkey activating when typing in the search box [`#1025`](https://github.com/th-ch/youtube-music/pull/1025)
|
||||
- [PiP] Remove titlebar when in-app-menu is enabled [`#1024`](https://github.com/th-ch/youtube-music/pull/1024)
|
||||
- [Shortcuts] MPRIS fixes, Repeat Language bug fix [`#1005`](https://github.com/th-ch/youtube-music/pull/1005)
|
||||
- Build without release in forks [`#1023`](https://github.com/th-ch/youtube-music/pull/1023)
|
||||
- [in-app-menu] fix navbar position [`#997`](https://github.com/th-ch/youtube-music/pull/997)
|
||||
- Migrate to yarn v3 [`#1022`](https://github.com/th-ch/youtube-music/pull/1022)
|
||||
- [precise-volume] fix arrows shortcuts active in search box [`#1002`](https://github.com/th-ch/youtube-music/pull/1002)
|
||||
- [new plugin] Add first version for crossfade plugin [`#1012`](https://github.com/th-ch/youtube-music/pull/1012)
|
||||
- Fix bypass-age-restriction lib import [`#984`](https://github.com/th-ch/youtube-music/pull/984)
|
||||
- Add menu entry to copy current URL [`#977`](https://github.com/th-ch/youtube-music/pull/977)
|
||||
- Remove deprecated code [`#979`](https://github.com/th-ch/youtube-music/pull/979)
|
||||
- Update dev dependencies [`#976`](https://github.com/th-ch/youtube-music/pull/976)
|
||||
- Update electron and various dependencies [`#974`](https://github.com/th-ch/youtube-music/pull/974)
|
||||
- Add CI job for dependency review [`#973`](https://github.com/th-ch/youtube-music/pull/973)
|
||||
- Improve captions plugin [`#972`](https://github.com/th-ch/youtube-music/pull/972)
|
||||
- fix malformed json in tuna-obs [`#817`](https://github.com/th-ch/youtube-music/pull/817)
|
||||
- Add Captions selector [`#866`](https://github.com/th-ch/youtube-music/pull/866)
|
||||
- fix SnoreToast implementation [`#941`](https://github.com/th-ch/youtube-music/pull/941)
|
||||
- Bump json5 from 1.0.1 to 1.0.2 [`#942`](https://github.com/th-ch/youtube-music/pull/942)
|
||||
- [Snyk] Upgrade custom-electron-titlebar from 4.1.3 to 4.1.5 [`#969`](https://github.com/th-ch/youtube-music/pull/969)
|
||||
- Fixed video-toggle aligning running before #main-panel exists [`#956`](https://github.com/th-ch/youtube-music/pull/956)
|
||||
- [New plugin] Music visualizers [`#953`](https://github.com/th-ch/youtube-music/pull/953)
|
||||
- fix PiP buttons not showing up [`#964`](https://github.com/th-ch/youtube-music/pull/964)
|
||||
- Use same audio context/source everywhere [`#951`](https://github.com/th-ch/youtube-music/pull/951)
|
||||
- revert adblocker bump [`#1105`](https://github.com/th-ch/youtube-music/issues/1105)
|
||||
- Allow downloading age restricted videos [`#1084`](https://github.com/th-ch/youtube-music/issues/1084)
|
||||
- add option to hide the like buttons [`#1075`](https://github.com/th-ch/youtube-music/issues/1075)
|
||||
- add starting page option [`#1071`](https://github.com/th-ch/youtube-music/issues/1071)
|
||||
- add slight delay to lyrics genius [`#1041`](https://github.com/th-ch/youtube-music/issues/1041)
|
||||
- fix unescaped url params [`#1050`](https://github.com/th-ch/youtube-music/issues/1050)
|
||||
- fix playback speed selector [`#1045`](https://github.com/th-ch/youtube-music/issues/1045)
|
||||
- fix PiP button [`#959`](https://github.com/th-ch/youtube-music/issues/959)
|
||||
- fix security issues in deps [`9cde19d`](https://github.com/th-ch/youtube-music/commit/9cde19d906081fe1851f90fa44581b2b74c328e3)
|
||||
- rome lint [`325026e`](https://github.com/th-ch/youtube-music/commit/325026e3eae3daed33a6d66d1ef9f898d6805b28)
|
||||
- lint [`b652a01`](https://github.com/th-ch/youtube-music/commit/b652a011a5a08978db6660aeca6908c47a7cf07a)
|
||||
|
||||
#### [v1.19.0](https://github.com/th-ch/youtube-music/compare/v1.18.0...v1.19.0)
|
||||
|
||||
> 31 December 2022
|
||||
|
||||
- Automatic release by CI when version is updated [`#936`](https://github.com/th-ch/youtube-music/pull/936)
|
||||
- Center toggle of video-toggle [`#894`](https://github.com/th-ch/youtube-music/pull/894)
|
||||
- Load plugins as soon as the window is created [`#890`](https://github.com/th-ch/youtube-music/pull/890)
|
||||
- Bump qs from 6.5.2 to 6.5.3 [`#913`](https://github.com/th-ch/youtube-music/pull/913)
|
||||
- [Snyk] Upgrade custom-electron-titlebar from 4.1.1 to 4.1.2 [`#900`](https://github.com/th-ch/youtube-music/pull/900)
|
||||
- Add option in skip-silences plugin to only skip at the beginning [`#931`](https://github.com/th-ch/youtube-music/pull/931)
|
||||
- Replace rimraf by del-cli [`#932`](https://github.com/th-ch/youtube-music/pull/932)
|
||||
- docs: Added winget install instructions [`#873`](https://github.com/th-ch/youtube-music/pull/873)
|
||||
- [Snyk] Upgrade async-mutex from 0.3.2 to 0.4.0 [`#855`](https://github.com/th-ch/youtube-music/pull/855)
|
||||
- [Snyk] Upgrade @cliqz/adblocker-electron from 1.25.0 to 1.25.1 [`#856`](https://github.com/th-ch/youtube-music/pull/856)
|
||||
- [Snyk] Upgrade custom-electron-titlebar from 4.1.0 to 4.1.1 [`#865`](https://github.com/th-ch/youtube-music/pull/865)
|
||||
- [Snyk] Upgrade @ffmpeg/ffmpeg from 0.11.5 to 0.11.6 [`#876`](https://github.com/th-ch/youtube-music/pull/876)
|
||||
- Discord Plugin RPC Fix [`#888`](https://github.com/th-ch/youtube-music/pull/888)
|
||||
- Bump FFMpeg [`#854`](https://github.com/th-ch/youtube-music/pull/854)
|
||||
- [Snyk] Upgrade @cliqz/adblocker-electron from 1.23.8 to 1.23.9 [`#823`](https://github.com/th-ch/youtube-music/pull/823)
|
||||
- [Snyk] Upgrade electron-store from 8.0.2 to 8.1.0 [`#801`](https://github.com/th-ch/youtube-music/pull/801)
|
||||
- proposal: Adding an option to hide duration before the song ends [`#802`](https://github.com/th-ch/youtube-music/pull/802)
|
||||
- [Snyk] Security upgrade node-fetch from 2.6.7 to 3.2.10 [`#790`](https://github.com/th-ch/youtube-music/pull/790)
|
||||
- Update README.md with a new theme repo [`#807`](https://github.com/th-ch/youtube-music/pull/807)
|
||||
- Fix likes on touchbar (they were inverted) [`#822`](https://github.com/th-ch/youtube-music/pull/822)
|
||||
- Add Scoop install directions for Windows 🪟 [`#839`](https://github.com/th-ch/youtube-music/pull/839)
|
||||
- Bump version and change release type when publishing a new version [`31ab27c`](https://github.com/th-ch/youtube-music/commit/31ab27c39ff6319116a6514d952eed1f02dd45fd)
|
||||
- Lock node-fetch to v2 for commonJS [`c9f610f`](https://github.com/th-ch/youtube-music/commit/c9f610f7fcfcce1317338364045ab0e1bf4249a4)
|
||||
- fix: upgrade @cliqz/adblocker-electron from 1.25.0 to 1.25.1 [`762ef4e`](https://github.com/th-ch/youtube-music/commit/762ef4eede29b53aae912b3b50a1ca53f6765c53)
|
||||
|
||||
#### [v1.18.0](https://github.com/th-ch/youtube-music/compare/v1.17.0...v1.18.0)
|
||||
|
||||
> 5 September 2022
|
||||
|
||||
- Bump ytdl-core (bug fix) [`#816`](https://github.com/th-ch/youtube-music/pull/816)
|
||||
- Bump electron and fix tests in CI [`#813`](https://github.com/th-ch/youtube-music/pull/813)
|
||||
- Allow user to pass custom CSS file [`#800`](https://github.com/th-ch/youtube-music/pull/800)
|
||||
- [Snyk] Upgrade html-to-text from 8.2.0 to 8.2.1 [`#799`](https://github.com/th-ch/youtube-music/pull/799)
|
||||
- [Snyk] Upgrade electron-store from 8.0.1 to 8.0.2 [`#772`](https://github.com/th-ch/youtube-music/pull/772)
|
||||
- Bump jpeg-js from 0.4.3 to 0.4.4 [`#756`](https://github.com/th-ch/youtube-music/pull/756)
|
||||
- Support MPRIS loop and volume change [`#749`](https://github.com/th-ch/youtube-music/pull/749)
|
||||
- [Snyk] Upgrade @cliqz/adblocker-electron from 1.23.7 to 1.23.8 [`#742`](https://github.com/th-ch/youtube-music/pull/742)
|
||||
- Use ; instead of space for play/pause. [`#745`](https://github.com/th-ch/youtube-music/pull/745)
|
||||
- Update readme.md [`#750`](https://github.com/th-ch/youtube-music/pull/750)
|
||||
- fix lyrics font size [`#753`](https://github.com/th-ch/youtube-music/pull/753)
|
||||
- fix top gap between nav-bar and browse-page [`#734`](https://github.com/th-ch/youtube-music/pull/734)
|
||||
- migrate from remote to ipc + fix restart in portable app [`#605`](https://github.com/th-ch/youtube-music/pull/605)
|
||||
- [Snyk] Upgrade custom-electron-prompt from 1.4.2 to 1.5.0 [`#717`](https://github.com/th-ch/youtube-music/pull/717)
|
||||
- Picture in Picture v2 [`#685`](https://github.com/th-ch/youtube-music/pull/685)
|
||||
- Add MPRIS volume control [`#776`](https://github.com/th-ch/youtube-music/issues/776)
|
||||
- Remove jest [`bb6115f`](https://github.com/th-ch/youtube-music/commit/bb6115fec1a18a416edb365a442eb0b0ee330768)
|
||||
- migrate from remote to ipc [`5bd9768`](https://github.com/th-ch/youtube-music/commit/5bd97685b9e07c656e0b57a9e02819afc70af1b1)
|
||||
- v3 [`d23bfe9`](https://github.com/th-ch/youtube-music/commit/d23bfe936840b947ca101fd304464f65d36e88cc)
|
||||
|
||||
#### [v1.17.0](https://github.com/th-ch/youtube-music/compare/v1.16.0...v1.17.0)
|
||||
|
||||
> 16 May 2022
|
||||
|
||||
- Bump ejs from 3.1.6 to 3.1.7 [`#712`](https://github.com/th-ch/youtube-music/pull/712)
|
||||
- fix injectCSS `did-finish-load` listener overload [`#693`](https://github.com/th-ch/youtube-music/pull/693)
|
||||
- [Snyk] Upgrade @cliqz/adblocker-electron from 1.23.6 to 1.23.7 [`#689`](https://github.com/th-ch/youtube-music/pull/689)
|
||||
- [Snyk] Upgrade custom-electron-prompt from 1.4.1 to 1.4.2 [`#686`](https://github.com/th-ch/youtube-music/pull/686)
|
||||
- [Snyk] Upgrade @electron/remote from 2.0.7 to 2.0.8 [`#684`](https://github.com/th-ch/youtube-music/pull/684)
|
||||
- Improve plugin submenu ux [`#699`](https://github.com/th-ch/youtube-music/pull/699)
|
||||
- update build action [`#702`](https://github.com/th-ch/youtube-music/pull/702)
|
||||
- add different modes to video-toggle plugin [`#700`](https://github.com/th-ch/youtube-music/pull/700)
|
||||
- lint [`#701`](https://github.com/th-ch/youtube-music/pull/701)
|
||||
- [ImgBot] Optimize images [`#703`](https://github.com/th-ch/youtube-music/pull/703)
|
||||
- add album to lastfm if available [`#695`](https://github.com/th-ch/youtube-music/pull/695)
|
||||
- [in-app-menu] add hide icon option [`#680`](https://github.com/th-ch/youtube-music/pull/680)
|
||||
- Add plugin to bypass age restrictions [`#682`](https://github.com/th-ch/youtube-music/pull/682)
|
||||
- Add "Picture in picture" plugin [`#674`](https://github.com/th-ch/youtube-music/pull/674)
|
||||
- Set lyrics metadata from Genius [`#679`](https://github.com/th-ch/youtube-music/pull/679)
|
||||
- MacOS: bring back the app in dock when using tray + app hidden [`#677`](https://github.com/th-ch/youtube-music/pull/677)
|
||||
- [Snyk] Upgrade @electron/remote from 2.0.4 to 2.0.5 [`#644`](https://github.com/th-ch/youtube-music/pull/644)
|
||||
- [Snyk] Upgrade ytpl from 2.2.3 to 2.3.0 [`#660`](https://github.com/th-ch/youtube-music/pull/660)
|
||||
- [Snyk] Upgrade ytdl-core from 4.10.1 to 4.11.0 [`#659`](https://github.com/th-ch/youtube-music/pull/659)
|
||||
- Bump plist from 3.0.2 to 3.0.5 [`#678`](https://github.com/th-ch/youtube-music/pull/678)
|
||||
- [Snyk] Upgrade @cliqz/adblocker-electron from 1.23.4 to 1.23.5 [`#624`](https://github.com/th-ch/youtube-music/pull/624)
|
||||
- [Precise-Volume] fix volumeHud position in miniplayer [`#645`](https://github.com/th-ch/youtube-music/pull/645)
|
||||
- add always-on-top option [`#655`](https://github.com/th-ch/youtube-music/pull/655)
|
||||
- [precise-volume] fix expand-volume-slider not updating its value [`#670`](https://github.com/th-ch/youtube-music/pull/670)
|
||||
- Fix lyrics genius missing parts [`#671`](https://github.com/th-ch/youtube-music/pull/671)
|
||||
- feat: option to force show like buttons [`#673`](https://github.com/th-ch/youtube-music/pull/673)
|
||||
- fix custom titlebar in prompt options [`#619`](https://github.com/th-ch/youtube-music/pull/619)
|
||||
- Process lyrics HTML in Genius util [`d0532d6`](https://github.com/th-ch/youtube-music/commit/d0532d691e56f955ef0b41f5fe2efe6295dddf9e)
|
||||
- Create first version of picture in picture plugin [`d2265b5`](https://github.com/th-ch/youtube-music/commit/d2265b59d78143cf51fe4dc3d5dee9da66873cc1)
|
||||
- Bump electron-builder to fix Mac build script [`ae8365f`](https://github.com/th-ch/youtube-music/commit/ae8365f721eafda6c502d02eee86d098f2b9e2a1)
|
||||
|
||||
#### [v1.16.0](https://github.com/th-ch/youtube-music/compare/v1.15.0...v1.16.0)
|
||||
|
||||
> 20 February 2022
|
||||
|
||||
- update in-app-menu [`#596`](https://github.com/th-ch/youtube-music/pull/596)
|
||||
- Fix clientID [`#602`](https://github.com/th-ch/youtube-music/pull/602)
|
||||
- Add snoretoast custom compile script [`#600`](https://github.com/th-ch/youtube-music/pull/600)
|
||||
- fix interactive notifications icon + exclude platform specific plugins from build [`#591`](https://github.com/th-ch/youtube-music/pull/591)
|
||||
- Add album title to largeImage and change paused icon [`#587`](https://github.com/th-ch/youtube-music/pull/587)
|
||||
- make useragent override optional [`#595`](https://github.com/th-ch/youtube-music/pull/595)
|
||||
- get album name from DOM [`#588`](https://github.com/th-ch/youtube-music/pull/588)
|
||||
- fix various lyrics issues [`#584`](https://github.com/th-ch/youtube-music/pull/584)
|
||||
- discord set inactivity timeout prompt [`#580`](https://github.com/th-ch/youtube-music/pull/580)
|
||||
- add single instance lock option [`#578`](https://github.com/th-ch/youtube-music/pull/578)
|
||||
- fix "restart app on config change" option [`#561`](https://github.com/th-ch/youtube-music/pull/561)
|
||||
- fix window position save spam [`#562`](https://github.com/th-ch/youtube-music/pull/562)
|
||||
- load adblocker sooner [`#583`](https://github.com/th-ch/youtube-music/pull/583)
|
||||
- add description of new plugins to readme [`#585`](https://github.com/th-ch/youtube-music/pull/585)
|
||||
- Use `center` alignment for lyrics text [`#573`](https://github.com/th-ch/youtube-music/pull/573)
|
||||
- fix precise-volume hud positioning [`#567`](https://github.com/th-ch/youtube-music/pull/567)
|
||||
- update electron and dependencies [`#565`](https://github.com/th-ch/youtube-music/pull/565)
|
||||
- filenamify playlist folder name [`#557`](https://github.com/th-ch/youtube-music/pull/557)
|
||||
- [Snyk] Security upgrade node-fetch from 2.6.6 to 2.6.7 (3.1.1 incompatible) [`#554`](https://github.com/th-ch/youtube-music/pull/554)
|
||||
- fix app starting offscreen [`#548`](https://github.com/th-ch/youtube-music/pull/548)
|
||||
- Release Mac arm64 [`#566`](https://github.com/th-ch/youtube-music/pull/566)
|
||||
- Build command for Apple (m1) silicon macs [`#553`](https://github.com/th-ch/youtube-music/pull/553)
|
||||
- [Snyk] Upgrade custom-electron-titlebar from 3.2.9 to 3.2.10 [`#545`](https://github.com/th-ch/youtube-music/pull/545)
|
||||
- Fix duplicate media session on linux [`#551`](https://github.com/th-ch/youtube-music/pull/551)
|
||||
- show a badge remaining items when downloading a playlist [`#550`](https://github.com/th-ch/youtube-music/pull/550)
|
||||
- allow downloading playlists from popup menu [`#549`](https://github.com/th-ch/youtube-music/pull/549)
|
||||
- xesam:artist should be a list [`#539`](https://github.com/th-ch/youtube-music/pull/539)
|
||||
- fix notifications showing thumbnail of last song [`#537`](https://github.com/th-ch/youtube-music/pull/537)
|
||||
- Fix https://github.com/th-ch/youtube-music/pull/578#issuecomment-1035517531 [`#578`](https://github.com/th-ch/youtube-music/pull/578)
|
||||
- Add automatic changelog [`1d9bfe8`](https://github.com/th-ch/youtube-music/commit/1d9bfe8ac8869cde648164979986964baa52c2f9)
|
||||
- update electron to v17.0.0 [`fef7115`](https://github.com/th-ch/youtube-music/commit/fef711549fa9862f8ea23301edde747c5802e352)
|
||||
- update dependencies [`8be07bc`](https://github.com/th-ch/youtube-music/commit/8be07bcb7ad8b727d97c36aa0760aed4e2fc481f)
|
||||
|
||||
#### [v1.15.0](https://github.com/th-ch/youtube-music/compare/v1.14.0...v1.15.0)
|
||||
|
||||
> 30 December 2021
|
||||
|
||||
- Switch from spectron to playwright to fix tests [`#531`](https://github.com/th-ch/youtube-music/pull/531)
|
||||
- [Snyk] Upgrade @cliqz/adblocker-electron from 1.23.0 to 1.23.1 [`#529`](https://github.com/th-ch/youtube-music/pull/529)
|
||||
- fix precise-volume options sync [`#525`](https://github.com/th-ch/youtube-music/pull/525)
|
||||
- Add album art/thumbnail to discord activity [`#524`](https://github.com/th-ch/youtube-music/pull/524)
|
||||
- fix skip-silences plugin [`#521`](https://github.com/th-ch/youtube-music/pull/521)
|
||||
- [Snyk] Upgrade electron-updater from 4.6.2 to 4.6.3 [`#520`](https://github.com/th-ch/youtube-music/pull/520)
|
||||
- update electron & remote & user agents [`#515`](https://github.com/th-ch/youtube-music/pull/515)
|
||||
- fixes mpris bug in snap [`#513`](https://github.com/th-ch/youtube-music/pull/513)
|
||||
- Add "Skip silences" plugin [`#519`](https://github.com/th-ch/youtube-music/pull/519)
|
||||
- Aligned lyric design [`#510`](https://github.com/th-ch/youtube-music/pull/510)
|
||||
- Fix mpris bugs - follows #480 [`#509`](https://github.com/th-ch/youtube-music/pull/509)
|
||||
- Various small fixes (discord, video-toggle, precise-volume, playback-speed, shortcuts, lyrics) [`#476`](https://github.com/th-ch/youtube-music/pull/476)
|
||||
- Mpris + obs-tuna fixes [`#480`](https://github.com/th-ch/youtube-music/pull/480)
|
||||
- [Snyk] Upgrade node-fetch from 2.6.5 to 2.6.6 [`#498`](https://github.com/th-ch/youtube-music/pull/498)
|
||||
- fix interaction between blur navbar & in-app-menu [`#491`](https://github.com/th-ch/youtube-music/pull/491)
|
||||
- [Snyk] Upgrade @cliqz/adblocker-electron from 1.22.7 to 1.23.0 [`#475`](https://github.com/th-ch/youtube-music/pull/475)
|
||||
- New Plugin: Exponential Volume [`#488`](https://github.com/th-ch/youtube-music/pull/488)
|
||||
- [Snyk] Upgrade electron-updater from 4.6.0 to 4.6.1 [`#474`](https://github.com/th-ch/youtube-music/pull/474)
|
||||
- Fix loadeddata/metadata video events rarely not firing (+other small fixes) [`#477`](https://github.com/th-ch/youtube-music/pull/477)
|
||||
- fix #490 [`#490`](https://github.com/th-ch/youtube-music/issues/490)
|
||||
- fix #472 [`#472`](https://github.com/th-ch/youtube-music/issues/472)
|
||||
- fix mpris [`ccfe743`](https://github.com/th-ch/youtube-music/commit/ccfe7434bf708ee58156c2952234a049706edfc2)
|
||||
- lint [`4362101`](https://github.com/th-ch/youtube-music/commit/4362101c0a2ebb7f0536f615cecba8a55ac96702)
|
||||
- rework songInfo pause listener [`6726e26`](https://github.com/th-ch/youtube-music/commit/6726e2600b3ca3a8d68e3e1b95b50da211fa354d)
|
||||
|
||||
#### [v1.14.0](https://github.com/th-ch/youtube-music/compare/v1.13.0...v1.14.0)
|
||||
|
||||
> 7 November 2021
|
||||
|
||||
- [Snyk] Upgrade custom-electron-prompt from 1.1.0 to 1.2.0 [`#467`](https://github.com/th-ch/youtube-music/pull/467)
|
||||
- Video Toggle Plugin [`#448`](https://github.com/th-ch/youtube-music/pull/448)
|
||||
- fix playback speed plugin [`#462`](https://github.com/th-ch/youtube-music/pull/462)
|
||||
- Fix sponsorblock skipping when not needed [`#465`](https://github.com/th-ch/youtube-music/pull/465)
|
||||
- Sponsorblock fix + use new apiLoaded event [`#463`](https://github.com/th-ch/youtube-music/pull/463)
|
||||
- use apiLoaded event in audio-compressor plugin [`#458`](https://github.com/th-ch/youtube-music/pull/458)
|
||||
- alert on initial hide-menu enabled [`#456`](https://github.com/th-ch/youtube-music/pull/456)
|
||||
- Blur plugin tweaks and integration with in-app-menu [`#451`](https://github.com/th-ch/youtube-music/pull/451)
|
||||
- set resume on start url to songInfo.url [`#449`](https://github.com/th-ch/youtube-music/pull/449)
|
||||
- quality-changer-plugin [`#446`](https://github.com/th-ch/youtube-music/pull/446)
|
||||
- get songInfo from youtube API [`#443`](https://github.com/th-ch/youtube-music/pull/443)
|
||||
- New plugin: Blur navigation bar [`#442`](https://github.com/th-ch/youtube-music/pull/442)
|
||||
- Discord plugin: Clean Up Export (follow-up #380) [`#440`](https://github.com/th-ch/youtube-music/pull/440)
|
||||
- remove upgrade button + makes images unselectable [`#434`](https://github.com/th-ch/youtube-music/pull/434)
|
||||
- new auto confirm when paused [`#433`](https://github.com/th-ch/youtube-music/pull/433)
|
||||
- fix: mpris instance not registering itself and media controls [`#431`](https://github.com/th-ch/youtube-music/pull/431)
|
||||
- Audio compressor plugin [`#288`](https://github.com/th-ch/youtube-music/pull/288)
|
||||
- precise-volume plugin fixes & updates [`#275`](https://github.com/th-ch/youtube-music/pull/275)
|
||||
- Custom Prompt for changing options [`#243`](https://github.com/th-ch/youtube-music/pull/243)
|
||||
- [Snyk] Upgrade async-mutex from 0.3.1 to 0.3.2 [`#412`](https://github.com/th-ch/youtube-music/pull/412)
|
||||
- build(deps): bump tmpl from 1.0.4 to 1.0.5 [`#414`](https://github.com/th-ch/youtube-music/pull/414)
|
||||
- [Snyk] Upgrade node-fetch from 2.6.1 to 2.6.2 [`#416`](https://github.com/th-ch/youtube-music/pull/416)
|
||||
- [Snyk] Upgrade @cliqz/adblocker-electron from 1.22.5 to 1.22.6 [`#429`](https://github.com/th-ch/youtube-music/pull/429)
|
||||
- build(deps-dev): bump electron from 12.0.8 to 12.1.0 [`#430`](https://github.com/th-ch/youtube-music/pull/430)
|
||||
- Fix discord clearActivity, menu, listen along option [`#380`](https://github.com/th-ch/youtube-music/pull/380)
|
||||
- Bump dev deps [`41a01ba`](https://github.com/th-ch/youtube-music/commit/41a01ba58a17056ba5143fdbd10d3bae11dd8d52)
|
||||
- Discord add reconnecting functionality [`b5fd6b4`](https://github.com/th-ch/youtube-music/commit/b5fd6b4969a318b3738583e7f33eb2c0cf295237)
|
||||
- add custom-electron-prompt [`e4eed2e`](https://github.com/th-ch/youtube-music/commit/e4eed2e51979378e62dab902e425218cae5108dc)
|
||||
|
||||
#### [v1.13.0](https://github.com/th-ch/youtube-music/compare/v1.12.2...v1.13.0)
|
||||
|
||||
> 19 September 2021
|
||||
|
||||
- [Snyk] Upgrade @cliqz/adblocker-electron from 1.22.4 to 1.22.5 [`#406`](https://github.com/th-ch/youtube-music/pull/406)
|
||||
- Fix incorrect Google alert caused by changing user agent coresponding to current platform [`#384`](https://github.com/th-ch/youtube-music/pull/384)
|
||||
- [Snyk] Upgrade electron-updater from 4.4.3 to 4.4.6 [`#401`](https://github.com/th-ch/youtube-music/pull/401)
|
||||
- [Snyk] Upgrade electron-updater from 4.4.0 to 4.4.1 [`#370`](https://github.com/th-ch/youtube-music/pull/370)
|
||||
- Bump path-parse from 1.0.6 to 1.0.7 [`#375`](https://github.com/th-ch/youtube-music/pull/375)
|
||||
- [Snyk] Upgrade @cliqz/adblocker-electron from 1.22.2 to 1.22.3 [`#385`](https://github.com/th-ch/youtube-music/pull/385)
|
||||
- Bump jszip from 3.5.0 to 3.7.1 [`#388`](https://github.com/th-ch/youtube-music/pull/388)
|
||||
- List missing plugins [`#382`](https://github.com/th-ch/youtube-music/pull/382)
|
||||
- add tuna plugin for obs [`#397`](https://github.com/th-ch/youtube-music/pull/397)
|
||||
- Update menu buttons to new format [`#389`](https://github.com/th-ch/youtube-music/pull/389)
|
||||
- Plugin to fetch lyrics from Genius [`#387`](https://github.com/th-ch/youtube-music/pull/387)
|
||||
- Add mpris support with cherry picked commit from previous PR https://github.com/th-ch/youtube-music/pull/394 [`#395`](https://github.com/th-ch/youtube-music/pull/395)
|
||||
- Add "Listen Along" button, solve #353 [`#383`](https://github.com/th-ch/youtube-music/pull/383)
|
||||
- Bump node to v14 [`#386`](https://github.com/th-ch/youtube-music/pull/386)
|
||||
- [Snyk] Upgrade electron-updater from 4.3.9 to 4.3.10 [`#350`](https://github.com/th-ch/youtube-music/pull/350)
|
||||
- [Snyk] Upgrade chokidar from 3.5.1 to 3.5.2 [`#354`](https://github.com/th-ch/youtube-music/pull/354)
|
||||
- Bump ytdl/ytpl [`c01506d`](https://github.com/th-ch/youtube-music/commit/c01506dc441bfc538471dc2c552c1a8a2800c611)
|
||||
- Add mpris support [`e255777`](https://github.com/th-ch/youtube-music/commit/e255777283c7b16611404cbfe260bfcca75a1e40)
|
||||
- Add Genius lyrics plugin [`acbe0ac`](https://github.com/th-ch/youtube-music/commit/acbe0ac25d568c25fedb514e0e96c66497b0f2d6)
|
||||
|
||||
#### [v1.12.2](https://github.com/th-ch/youtube-music/compare/v1.12.1...v1.12.2)
|
||||
|
||||
> 1 July 2021
|
||||
|
||||
- Fix downloader plugin [`#339`](https://github.com/th-ch/youtube-music/pull/339)
|
||||
- [Snyk] Upgrade @cliqz/adblocker-electron from 1.22.0 to 1.22.1 [`#337`](https://github.com/th-ch/youtube-music/pull/337)
|
||||
- Update and simplify in-app-menu [`#249`](https://github.com/th-ch/youtube-music/pull/249)
|
||||
- Bump hosted-git-info from 2.8.8 to 2.8.9 [`#331`](https://github.com/th-ch/youtube-music/pull/331)
|
||||
- Bump lodash from 4.17.20 to 4.17.21 [`#330`](https://github.com/th-ch/youtube-music/pull/330)
|
||||
- [Snyk] Upgrade ytdl-core from 4.8.0 to 4.8.2 [`#328`](https://github.com/th-ch/youtube-music/pull/328)
|
||||
- [Snyk] Upgrade electron-updater from 4.3.8 to 4.3.9 [`#324`](https://github.com/th-ch/youtube-music/pull/324)
|
||||
- Bump normalize-url from 4.5.0 to 4.5.1 [`#323`](https://github.com/th-ch/youtube-music/pull/323)
|
||||
- Bump trim-newlines from 3.0.0 to 3.0.1 [`#320`](https://github.com/th-ch/youtube-music/pull/320)
|
||||
- [Snyk] Upgrade @ffmpeg/core from 0.9.0 to 0.10.0 [`#317`](https://github.com/th-ch/youtube-music/pull/317)
|
||||
- [Snyk] Upgrade @ffmpeg/ffmpeg from 0.9.8 to 0.10.0 [`#316`](https://github.com/th-ch/youtube-music/pull/316)
|
||||
- [Snyk] Upgrade custom-electron-titlebar from 3.2.6 to 3.2.7 [`#311`](https://github.com/th-ch/youtube-music/pull/311)
|
||||
- fix hidden webp thumbnail throwing MIME type error in downloader [`#318`](https://github.com/th-ch/youtube-music/pull/318)
|
||||
- Add Sponsorblock plugin [`#308`](https://github.com/th-ch/youtube-music/pull/308)
|
||||
- [Snyk] Upgrade @ffmpeg/ffmpeg from 0.9.7 to 0.9.8 [`#305`](https://github.com/th-ch/youtube-music/pull/305)
|
||||
- Bump dependencies to fix vulnerabilities [`496836b`](https://github.com/th-ch/youtube-music/commit/496836b33b116e06b8d1361ce1f47ab6c9138cae)
|
||||
- update refreshMenu() function [`33855f1`](https://github.com/th-ch/youtube-music/commit/33855f17dd80c099117a3d84bbd9b5021776771c)
|
||||
- Add SponsorBlock plugin [`ca64a77`](https://github.com/th-ch/youtube-music/commit/ca64a77ed0236fd9cfb4b40e450578a186638dc7)
|
||||
|
||||
#### [v1.12.1](https://github.com/th-ch/youtube-music/compare/v1.12.0...v1.12.1)
|
||||
|
||||
> 28 May 2021
|
||||
|
||||
- Bump ws from 7.4.3 to 7.4.6 [`#303`](https://github.com/th-ch/youtube-music/pull/303)
|
||||
- Bump browserslist from 4.16.3 to 4.16.6 [`#301`](https://github.com/th-ch/youtube-music/pull/301)
|
||||
- [Snyk] Upgrade @cliqz/adblocker-electron from 1.20.4 to 1.20.5 [`#300`](https://github.com/th-ch/youtube-music/pull/300)
|
||||
- [Snyk] Upgrade ytdl-core from 4.5.0 to 4.7.0 [`#299`](https://github.com/th-ch/youtube-music/pull/299)
|
||||
- [Snyk] Upgrade @ffmpeg/core from 0.8.5 to 0.9.0 [`#298`](https://github.com/th-ch/youtube-music/pull/298)
|
||||
- [Snyk] Upgrade filenamify from 4.2.0 to 4.3.0 [`#293`](https://github.com/th-ch/youtube-music/pull/293)
|
||||
- [Snyk] Upgrade ytpl from 2.1.1 to 2.2.0 [`#285`](https://github.com/th-ch/youtube-music/pull/285)
|
||||
- fix song-info callback duplication [`#269`](https://github.com/th-ch/youtube-music/pull/269)
|
||||
- fix notification showing appID instead of app name on windows [`#270`](https://github.com/th-ch/youtube-music/pull/270)
|
||||
- Upgrade electron to v12 [`#273`](https://github.com/th-ch/youtube-music/pull/273)
|
||||
- fix last-fm overwrite config on each start [`#267`](https://github.com/th-ch/youtube-music/pull/267)
|
||||
- Downloader tweaks + taskbar progress bar [`#265`](https://github.com/th-ch/youtube-music/pull/265)
|
||||
- remove `open` dependency from last-fm plugin [`#262`](https://github.com/th-ch/youtube-music/pull/262)
|
||||
- Fix downloader metadata if not currently playing [`#252`](https://github.com/th-ch/youtube-music/pull/252)
|
||||
- fix playPause bugs by directly playPause video element [`#259`](https://github.com/th-ch/youtube-music/pull/259)
|
||||
- Bump ua-parser-js from 0.7.23 to 0.7.28 [`#260`](https://github.com/th-ch/youtube-music/pull/260)
|
||||
- Fix precise volume listener override [`#253`](https://github.com/th-ch/youtube-music/pull/253)
|
||||
- fix css not inserting on reload [`#255`](https://github.com/th-ch/youtube-music/pull/255)
|
||||
- playlist download progressBar using `chokidar` [`53bf7c5`](https://github.com/th-ch/youtube-music/commit/53bf7c5068fdc14f5aa469d47b3174d27f40e05c)
|
||||
- download progress bar on taskbar [`a8ac2c3`](https://github.com/th-ch/youtube-music/commit/a8ac2c3af988f299be85010e7fea541096b7e261)
|
||||
- fix: upgrade @cliqz/adblocker-electron from 1.20.4 to 1.20.5 [`c5f84b5`](https://github.com/th-ch/youtube-music/commit/c5f84b568b0c3480af1abc8ff111771e2170a50e)
|
||||
|
||||
#### [v1.12.0](https://github.com/th-ch/youtube-music/compare/v1.11.0...v1.12.0)
|
||||
|
||||
> 4 May 2021
|
||||
|
||||
- Menu tweaks [`#224`](https://github.com/th-ch/youtube-music/pull/224)
|
||||
- Interactive notifications for windows [`#228`](https://github.com/th-ch/youtube-music/pull/228)
|
||||
- [Plugin] Precise volume control [`#236`](https://github.com/th-ch/youtube-music/pull/236)
|
||||
- [Snyk] Upgrade electron-store from 7.0.2 to 7.0.3 [`#244`](https://github.com/th-ch/youtube-music/pull/244)
|
||||
- [Snyk] Upgrade @cliqz/adblocker-electron from 1.20.3 to 1.20.4 [`#233`](https://github.com/th-ch/youtube-music/pull/233)
|
||||
- Dependencies update [`#231`](https://github.com/th-ch/youtube-music/pull/231)
|
||||
- Fix downloader metadata [`#245`](https://github.com/th-ch/youtube-music/pull/245)
|
||||
- Last.fm support [`#196`](https://github.com/th-ch/youtube-music/pull/196)
|
||||
- simple fix for discord plugin [`#239`](https://github.com/th-ch/youtube-music/pull/239)
|
||||
- In-app-menu plugin - rename plugin & configure menu builder [`#215`](https://github.com/th-ch/youtube-music/pull/215)
|
||||
- Allows downloading songs that aren't currently playing [`#221`](https://github.com/th-ch/youtube-music/pull/221)
|
||||
- Updated download plugin icon color to match other icons [`#222`](https://github.com/th-ch/youtube-music/pull/222)
|
||||
- [Notification Plugin] Fix duplicate notification [`#216`](https://github.com/th-ch/youtube-music/pull/216)
|
||||
- Pass metadata to front + use metadata URL in downloader [`#213`](https://github.com/th-ch/youtube-music/pull/213)
|
||||
- Refresh menu on plugin enable/disable (show/hide submenu) [`#217`](https://github.com/th-ch/youtube-music/pull/217)
|
||||
- remove 'shortcuts' from default plugins [`#218`](https://github.com/th-ch/youtube-music/pull/218)
|
||||
- [Plugin] styled-bars [`#201`](https://github.com/th-ch/youtube-music/pull/201)
|
||||
- Add configurable notification urgency [`#212`](https://github.com/th-ch/youtube-music/pull/212)
|
||||
- add Download Folder Chooser [`#207`](https://github.com/th-ch/youtube-music/pull/207)
|
||||
- Improved songinfo provider, by using the data from the '/player' request [`#194`](https://github.com/th-ch/youtube-music/pull/194)
|
||||
- Download plugin directory chooser [`#10`](https://github.com/th-ch/youtube-music/pull/10)
|
||||
- [Snyk] Upgrade @cliqz/adblocker-electron from 1.20.0 to 1.20.1 [`#180`](https://github.com/th-ch/youtube-music/pull/180)
|
||||
- [Plugin] taskbar-mediacontrol (for Windows) [`#200`](https://github.com/th-ch/youtube-music/pull/200)
|
||||
- merge source [`#3`](https://github.com/th-ch/youtube-music/pull/3)
|
||||
- merge source [`#2`](https://github.com/th-ch/youtube-music/pull/2)
|
||||
- Add playlist feature in downloader plugin + custom menus in plugin system [`#203`](https://github.com/th-ch/youtube-music/pull/203)
|
||||
- Added Discord timeout [`#192`](https://github.com/th-ch/youtube-music/pull/192)
|
||||
- Override hide(),show(),isVisible from inside plugin [`6427b34`](https://github.com/th-ch/youtube-music/commit/6427b3406c8d84c5b7ecbe6a28158d5dc895c3c2)
|
||||
- added back original yarn.lock [`24fea5a`](https://github.com/th-ch/youtube-music/commit/24fea5a24afd4f547628549962d24756cca5e413)
|
||||
- remove local prompt [`8dc486f`](https://github.com/th-ch/youtube-music/commit/8dc486f18fe02a218b149838dc7ab939ec1b698a)
|
||||
|
||||
#### [v1.11.0](https://github.com/th-ch/youtube-music/compare/v1.10.0...v1.11.0)
|
||||
|
||||
> 9 March 2021
|
||||
|
||||
- [Snyk] Upgrade electron-store from 7.0.1 to 7.0.2 [`#178`](https://github.com/th-ch/youtube-music/pull/178)
|
||||
- Added function to toggle resuming of last song when app starts [`#177`](https://github.com/th-ch/youtube-music/pull/177)
|
||||
- [Snyk] Upgrade discord-rpc from 3.1.4 to 3.2.0 [`#175`](https://github.com/th-ch/youtube-music/pull/175)
|
||||
- [Snyk] Upgrade @cliqz/adblocker-electron from 1.19.0 to 1.20.0 [`#154`](https://github.com/th-ch/youtube-music/pull/154)
|
||||
- Added metadata to downloader plugin, and updated packages [`dd1bdae`](https://github.com/th-ch/youtube-music/commit/dd1bdae9478ef831ee2a00b29be04c65626933f8)
|
||||
- Fix download/speed menu item [`796a7aa`](https://github.com/th-ch/youtube-music/commit/796a7aaaf1ecaf80b2ef113137f2222499803e29)
|
||||
- fix: upgrade @cliqz/adblocker-electron from 1.19.0 to 1.20.0 [`538ab52`](https://github.com/th-ch/youtube-music/commit/538ab52abd46c2e3c6abb529c5137b5286d29670)
|
||||
|
||||
#### [v1.10.0](https://github.com/th-ch/youtube-music/compare/v1.9.0...v1.10.0)
|
||||
|
||||
> 7 February 2021
|
||||
|
||||
- [Snyk] Upgrade @ffmpeg/ffmpeg from 0.9.6 to 0.9.7 [`#146`](https://github.com/th-ch/youtube-music/pull/146)
|
||||
- Reuse the same notification, instead of creating a new one each time the song changes. [`#144`](https://github.com/th-ch/youtube-music/pull/144)
|
||||
- [Snyk] Upgrade ytdl-core from 4.2.1 to 4.3.0 [`#136`](https://github.com/th-ch/youtube-music/pull/136)
|
||||
- bring the new commits to this fork [`#1`](https://github.com/th-ch/youtube-music/pull/1)
|
||||
- GH page [`3bcf409`](https://github.com/th-ch/youtube-music/commit/3bcf409f2b1629333714b187c606891cedb12512)
|
||||
- Add plugin to control playback speed like in YouTube (from 0.25 to 2) [`f7f3185`](https://github.com/th-ch/youtube-music/commit/f7f31850d3d9879002dc47326e4f6ec9a52c25a1)
|
||||
- Update back.js [`1fdf241`](https://github.com/th-ch/youtube-music/commit/1fdf2416ad414035104bfb51b8450d82e566cb13)
|
||||
|
||||
#### [v1.9.0](https://github.com/th-ch/youtube-music/compare/v1.8.2...v1.9.0)
|
||||
|
||||
> 15 January 2021
|
||||
|
||||
- [Snyk] Upgrade electron-debug from 3.1.0 to 3.2.0 [`#121`](https://github.com/th-ch/youtube-music/pull/121)
|
||||
- Refactor providers [`#125`](https://github.com/th-ch/youtube-music/pull/125)
|
||||
- Added Discord rich presence and added extra properties to songInfo provider [`#124`](https://github.com/th-ch/youtube-music/pull/124)
|
||||
- Fix plugins with context isolation [`#127`](https://github.com/th-ch/youtube-music/pull/127)
|
||||
- Windows portable exe [`#126`](https://github.com/th-ch/youtube-music/pull/126)
|
||||
- Split providers in 2 [`0743034`](https://github.com/th-ch/youtube-music/commit/0743034de0443e889ec11d7ea83727ff4fb96599)
|
||||
- Added Discord rich presence and added extra properties to songinfo provider [`a8ce87f`](https://github.com/th-ch/youtube-music/commit/a8ce87f2ccb4f0fdbd36676883e6a0497bebc263)
|
||||
- Update discord plugin for new provider + wait for ready [`aec542e`](https://github.com/th-ch/youtube-music/commit/aec542e95e2837f54bf19de675f311444789ea4e)
|
||||
|
||||
#### [v1.8.2](https://github.com/th-ch/youtube-music/compare/v1.8.1...v1.8.2)
|
||||
|
||||
> 12 January 2021
|
||||
|
||||
- Downloader plugin - custom audio format [`#118`](https://github.com/th-ch/youtube-music/pull/118)
|
||||
- Globalized the song info and song controls, and updated Touch Bar for it. [`#102`](https://github.com/th-ch/youtube-music/pull/102)
|
||||
- Bump electron to v11 [`#120`](https://github.com/th-ch/youtube-music/pull/120)
|
||||
- Globalized the songinfo and song controls, and changed the pause/play button. [`9be3e1a`](https://github.com/th-ch/youtube-music/commit/9be3e1afe91f0aa3419040bba65e7b3b83b469c6)
|
||||
- Simplifies the notification plugin to use the globalized song info [`5bffdbd`](https://github.com/th-ch/youtube-music/commit/5bffdbd6285a6816749c467d6e912d14748f9959)
|
||||
- Loads providers before plugins [`3a5d9bd`](https://github.com/th-ch/youtube-music/commit/3a5d9bd973bdd67e77f8a7687c1430245a9490bd)
|
||||
|
||||
#### [v1.8.1](https://github.com/th-ch/youtube-music/compare/v1.8.0...v1.8.1)
|
||||
|
||||
> 8 January 2021
|
||||
|
||||
- [Snyk] Upgrade electron-updater from 4.3.5 to 4.3.6 [`#116`](https://github.com/th-ch/youtube-music/pull/116)
|
||||
- [Snyk] Upgrade @cliqz/adblocker-electron from 1.18.8 to 1.19.0 [`#117`](https://github.com/th-ch/youtube-music/pull/117)
|
||||
- [Snyk] Upgrade ytdl-core from 4.1.1 to 4.1.2 [`#109`](https://github.com/th-ch/youtube-music/pull/109)
|
||||
- Bump node-notifier from 8.0.0 to 8.0.1 [`#104`](https://github.com/th-ch/youtube-music/pull/104)
|
||||
- fix: upgrade electron-updater from 4.3.5 to 4.3.6 [`0bf77e5`](https://github.com/th-ch/youtube-music/commit/0bf77e592a87eb8a5222cf2c1588488a51044422)
|
||||
- fix: upgrade @cliqz/adblocker-electron from 1.18.8 to 1.19.0 [`5c0cc08`](https://github.com/th-ch/youtube-music/commit/5c0cc08d80d60c46e8b27343c6fc302f64fe89e2)
|
||||
- fix: upgrade ytdl-core from 4.1.1 to 4.1.2 [`e2cc262`](https://github.com/th-ch/youtube-music/commit/e2cc2628aea653739f878ec2cd2e72e2e70018a1)
|
||||
|
||||
#### [v1.8.0](https://github.com/th-ch/youtube-music/compare/v1.7.5...v1.8.0)
|
||||
|
||||
> 20 December 2020
|
||||
|
||||
- Added Touch Bar plugin [`#101`](https://github.com/th-ch/youtube-music/pull/101)
|
||||
- [Snyk] Upgrade @ffmpeg/core from 0.8.4 to 0.8.5 [`#99`](https://github.com/th-ch/youtube-music/pull/99)
|
||||
- [Snyk] Upgrade @ffmpeg/ffmpeg from 0.9.5 to 0.9.6 [`#100`](https://github.com/th-ch/youtube-music/pull/100)
|
||||
- [Readme] Web folder for readme assets + new SVG animation [`#96`](https://github.com/th-ch/youtube-music/pull/96)
|
||||
- Add new Linux targets (deb, freebsd, rpm) [`#94`](https://github.com/th-ch/youtube-music/pull/94)
|
||||
- Web folder for readme assets + new svg animation [`01fc965`](https://github.com/th-ch/youtube-music/commit/01fc9651705f457da63615ff774f00957f783d3d)
|
||||
- touchbar plugin - fixed code style [`7473677`](https://github.com/th-ch/youtube-music/commit/7473677477071ca5e7b18bda3193e345d7fd549f)
|
||||
- added initial touchbar support [`c3e2c13`](https://github.com/th-ch/youtube-music/commit/c3e2c1380810d156d9d6863fffc804242171bec0)
|
||||
|
||||
#### [v1.7.5](https://github.com/th-ch/youtube-music/compare/v1.7.4...v1.7.5)
|
||||
|
||||
> 12 December 2020
|
||||
|
||||
- Bump ini from 1.3.5 to 1.3.7 [`#92`](https://github.com/th-ch/youtube-music/pull/92)
|
||||
- Fix adblocking [`#90`](https://github.com/th-ch/youtube-music/pull/90)
|
||||
- Bump adblocker dependency [`49497d0`](https://github.com/th-ch/youtube-music/commit/49497d0efb28ee0be5b16d0f1c3660efafcd289c)
|
||||
- Fix adblocker preloading to inject scripts/styles [`66c5ce4`](https://github.com/th-ch/youtube-music/commit/66c5ce46caa85a7ae4ceb3d63a9e168827015c71)
|
||||
- Add uBlock Origin filters to default sources [`79c7959`](https://github.com/th-ch/youtube-music/commit/79c795927a3be96456a2f45159285c64166a29b8)
|
||||
|
||||
#### [v1.7.4](https://github.com/th-ch/youtube-music/compare/v1.7.3...v1.7.4)
|
||||
|
||||
> 8 December 2020
|
||||
|
||||
#### [v1.7.3](https://github.com/th-ch/youtube-music/compare/v1.7.2...v1.7.3)
|
||||
|
||||
> 8 December 2020
|
||||
|
||||
- Adblocker: add option to disable default lists [`22c7f70`](https://github.com/th-ch/youtube-music/commit/22c7f70c938566a9db9c4d46a57224cfdee43df0)
|
||||
|
||||
#### [v1.7.2](https://github.com/th-ch/youtube-music/compare/v1.7.1...v1.7.2)
|
||||
|
||||
> 6 December 2020
|
||||
|
||||
- Add AUR badge + beautify badges [`#82`](https://github.com/th-ch/youtube-music/pull/82)
|
||||
- Bugfix: only use cache with no additional blocklists [`467171a`](https://github.com/th-ch/youtube-music/commit/467171a17e648331d63f166c2da2f3134e95b37f)
|
||||
- Add AUR tag + beautify tags [`d212206`](https://github.com/th-ch/youtube-music/commit/d21220693b9ffa26e05fe1963376b636b40b9952)
|
||||
- Readme: add youtube-music logo to badges [`3022fac`](https://github.com/th-ch/youtube-music/commit/3022facbead40ccd81629c37b870ab33ce7fa106)
|
||||
|
||||
#### [v1.7.1](https://github.com/th-ch/youtube-music/compare/v1.7.0...v1.7.1)
|
||||
|
||||
> 3 December 2020
|
||||
|
||||
- Option to restart the app on config changes [`fd97576`](https://github.com/th-ch/youtube-music/commit/fd97576611ae80b959ffe7984e88ddc8d28a1ffc)
|
||||
- Bump version to 1.7.1 [`e07cac2`](https://github.com/th-ch/youtube-music/commit/e07cac240691b1c9d6909e457824616182374c3a)
|
||||
|
||||
#### [v1.7.0](https://github.com/th-ch/youtube-music/compare/v1.6.5...v1.7.0)
|
||||
|
||||
> 3 December 2020
|
||||
|
||||
- Refactor config, custom plugin options [`#79`](https://github.com/th-ch/youtube-music/pull/79)
|
||||
- Refactor config for simpler use and advanced options in plugins [`8ab2da0`](https://github.com/th-ch/youtube-music/commit/8ab2da0482b6211b6b6d43423ec06daed48dac4f)
|
||||
- Allow editing config (advanced) [`f4fe5c2`](https://github.com/th-ch/youtube-music/commit/f4fe5c2a58e1ad555c321f27c00d2d78184fc687)
|
||||
- Adblocker - advanced options (caching or not, additional lists) [`b94d0d4`](https://github.com/th-ch/youtube-music/commit/b94d0d4e8bd3a92bbb5e012a63fa782baa774be7)
|
||||
|
||||
#### [v1.6.5](https://github.com/th-ch/youtube-music/compare/v1.6.4...v1.6.5)
|
||||
|
||||
> 2 December 2020
|
||||
|
||||
- Add option to disable hardware acceleration [`#77`](https://github.com/th-ch/youtube-music/pull/77)
|
||||
- Downloader plugin - retry and upgrade dependencies [`#76`](https://github.com/th-ch/youtube-music/pull/76)
|
||||
- Reflect Arch Linux package name change [`#70`](https://github.com/th-ch/youtube-music/pull/70)
|
||||
- Option to hide menu [`#67`](https://github.com/th-ch/youtube-music/pull/67)
|
||||
- Add Arch Linux installation instructions [`#68`](https://github.com/th-ch/youtube-music/pull/68)
|
||||
- Update ytdl-core to 4.1.1 [`33a11ef`](https://github.com/th-ch/youtube-music/commit/33a11efe9acad234e41ad9044ae9e67fd573b7f4)
|
||||
- Autoupdate modal: add download/disable updates buttons [`ae5b85d`](https://github.com/th-ch/youtube-music/commit/ae5b85d8d748659f2e23d417560026f24ab8ce9c)
|
||||
- Option to hide menu (win/linux) [`4bac3ac`](https://github.com/th-ch/youtube-music/commit/4bac3ace186c5be2cb9409d2b703f960bd662145)
|
||||
|
||||
#### [v1.6.4](https://github.com/th-ch/youtube-music/compare/v1.6.3...v1.6.4)
|
||||
|
||||
> 24 November 2020
|
||||
|
||||
#### [v1.6.3](https://github.com/th-ch/youtube-music/compare/v1.6.2...v1.6.3)
|
||||
|
||||
> 24 November 2020
|
||||
|
||||
- Improve CI [`#64`](https://github.com/th-ch/youtube-music/pull/64)
|
||||
- Ensure menu is visible on all platforms [`#63`](https://github.com/th-ch/youtube-music/pull/63)
|
||||
- [Snyk] Upgrade @cliqz/adblocker-electron from 1.18.3 to 1.18.4 [`#62`](https://github.com/th-ch/youtube-music/pull/62)
|
||||
- fix: upgrade @cliqz/adblocker-electron from 1.18.3 to 1.18.4 [`2b243f6`](https://github.com/th-ch/youtube-music/commit/2b243f6dcb00d3b6f27fd066c093e7b16bb384e2)
|
||||
- CI: cache yarn directory [`0fd4933`](https://github.com/th-ch/youtube-music/commit/0fd49330d3218ec5f1bc62b72ace28e79d02bc93)
|
||||
- Run CI on every push/PR [`cf4827d`](https://github.com/th-ch/youtube-music/commit/cf4827d780fee510a27eecf42453b0505c52bcf9)
|
||||
|
||||
#### [v1.6.2](https://github.com/th-ch/youtube-music/compare/v1.6.0...v1.6.2)
|
||||
|
||||
> 22 November 2020
|
||||
|
||||
- Add github action to build/release [`#60`](https://github.com/th-ch/youtube-music/pull/60)
|
||||
- Bump to node 12 [`#59`](https://github.com/th-ch/youtube-music/pull/59)
|
||||
- Bump to node 12 [`#59`](https://github.com/th-ch/youtube-music/pull/59)
|
||||
- Add downloader (video -> mp3) plugin (in music menu) [`e197087`](https://github.com/th-ch/youtube-music/commit/e197087a5027af1ca71ecde7bbdf6351137555b9)
|
||||
- Delete AppVeyor/Travis CI integration [`941dd90`](https://github.com/th-ch/youtube-music/commit/941dd90d77a5c46ed5505918374693fcd892af1f)
|
||||
- GH action to build/release [`fc4754a`](https://github.com/th-ch/youtube-music/commit/fc4754a1709e6eb70d662f89eafd360aa4a77aa2)
|
||||
|
||||
#### [v1.6.0](https://github.com/th-ch/youtube-music/compare/v1.5.0...v1.6.0)
|
||||
|
||||
> 11 November 2020
|
||||
|
||||
- [Snyk] Upgrade electron-store from 6.0.0 to 6.0.1 [`#54`](https://github.com/th-ch/youtube-music/pull/54)
|
||||
- Add notifications plugin (notify of song on play event) [`bcff6e5`](https://github.com/th-ch/youtube-music/commit/bcff6e51348645395549c206717225fb16a29cda)
|
||||
- Plugins/event handlers in each window [`9bc81da`](https://github.com/th-ch/youtube-music/commit/9bc81da6f2c7f5f35769489e179851bdd80a7da8)
|
||||
- Option to toggle devtools [`3e97e93`](https://github.com/th-ch/youtube-music/commit/3e97e9307cf0991adc5584a603c292b03bc6202d)
|
||||
|
||||
#### [v1.5.0](https://github.com/th-ch/youtube-music/compare/v1.4.0...v1.5.0)
|
||||
|
||||
> 4 October 2020
|
||||
|
||||
- Bump node-fetch from 2.6.0 to 2.6.1 [`#45`](https://github.com/th-ch/youtube-music/pull/45)
|
||||
- [Snyk] Upgrade @cliqz/adblocker-electron from 1.17.0 to 1.18.0 [`#47`](https://github.com/th-ch/youtube-music/pull/47)
|
||||
- [Snyk] Upgrade electron-updater from 4.3.3 to 4.3.4 [`#40`](https://github.com/th-ch/youtube-music/pull/40)
|
||||
- Bump elliptic from 6.5.2 to 6.5.3 [`#38`](https://github.com/th-ch/youtube-music/pull/38)
|
||||
- [Snyk] Upgrade @cliqz/adblocker-electron from 1.16.0 to 1.16.1 [`#37`](https://github.com/th-ch/youtube-music/pull/37)
|
||||
- Bump lodash from 4.17.15 to 4.17.19 [`#34`](https://github.com/th-ch/youtube-music/pull/34)
|
||||
- Option to start at login [`#32`](https://github.com/th-ch/youtube-music/pull/32)
|
||||
- Bump dependencies [`97dce5a`](https://github.com/th-ch/youtube-music/commit/97dce5ad41ba7ff7a12d4e57a6a0acfeccd666d8)
|
||||
- Bump electron to v10 (+ remove devtron, bump spectron) [`5f0dcbb`](https://github.com/th-ch/youtube-music/commit/5f0dcbb3fc9b2912bba690db232184d32c599150)
|
||||
- Navigation plugin: fix arrow style [`8d74a0a`](https://github.com/th-ch/youtube-music/commit/8d74a0a9b52c5b5a04b0986e5fbec9b47a35823e)
|
||||
|
||||
#### [v1.4.0](https://github.com/th-ch/youtube-music/compare/v1.3.3...v1.4.0)
|
||||
|
||||
> 12 July 2020
|
||||
|
||||
- Bump electron from 8.2.1 to 8.2.4 [`#31`](https://github.com/th-ch/youtube-music/pull/31)
|
||||
- [Snyk] Upgrade electron-store from 5.1.1 to 5.2.0 [`#30`](https://github.com/th-ch/youtube-music/pull/30)
|
||||
- [Snyk] Upgrade @cliqz/adblocker-electron from 1.14.4 to 1.15.0 [`#29`](https://github.com/th-ch/youtube-music/pull/29)
|
||||
- [Snyk] Upgrade electron-debug from 3.0.1 to 3.1.0 [`#28`](https://github.com/th-ch/youtube-music/pull/28)
|
||||
- [Snyk] Upgrade electron-updater from 4.3.1 to 4.3.2 [`#27`](https://github.com/th-ch/youtube-music/pull/27)
|
||||
- [Snyk] Upgrade electron-updater from 4.3.0 to 4.3.1 [`#26`](https://github.com/th-ch/youtube-music/pull/26)
|
||||
- [Snyk] Upgrade @cliqz/adblocker-electron from 1.14.1 to 1.14.2 [`#25`](https://github.com/th-ch/youtube-music/pull/25)
|
||||
- [Tests] Add integration tests [`#24`](https://github.com/th-ch/youtube-music/pull/24)
|
||||
- Add jest, spectron and getPort util for tests [`736a706`](https://github.com/th-ch/youtube-music/commit/736a70680108620cdecab2da9dd48e10354c713e)
|
||||
- fix: upgrade electron-updater from 4.3.1 to 4.3.2 [`8c94510`](https://github.com/th-ch/youtube-music/commit/8c945100e24187885dbbe5bb7830b1da11e4eaa2)
|
||||
- Add jest config and test environment to launch app [`bce5b7d`](https://github.com/th-ch/youtube-music/commit/bce5b7d8ebd96886d462a3c999d72e6c69b6f807)
|
||||
|
||||
#### [v1.3.3](https://github.com/th-ch/youtube-music/compare/v1.3.2...v1.3.3)
|
||||
|
||||
> 29 April 2020
|
||||
|
||||
- Move tray click callback in setUpTray [`4824dda`](https://github.com/th-ch/youtube-music/commit/4824dda5d52565deb5cd6ef4b51d2d742677a154)
|
||||
- Bump version to 1.3.3 [`37cac19`](https://github.com/th-ch/youtube-music/commit/37cac19d9ccae59b89a68b995eaf7e08c7d24d11)
|
||||
|
||||
#### [v1.3.2](https://github.com/th-ch/youtube-music/compare/v1.3.1...v1.3.2)
|
||||
|
||||
> 26 April 2020
|
||||
|
||||
- [Snyk] Upgrade electron-updater from 4.2.5 to 4.3.0 [`#22`](https://github.com/th-ch/youtube-music/pull/22)
|
||||
- fix: upgrade electron-updater from 4.2.5 to 4.3.0 [`9821300`](https://github.com/th-ch/youtube-music/commit/98213005d09d00bf013d2217809736bdc334ede6)
|
||||
- Hide the app (no quit) on close if tray enabled [`430687f`](https://github.com/th-ch/youtube-music/commit/430687f4d6d301aaeaeeaa11ae34d971ac3280df)
|
||||
- Show/hide window when clicking on tray [`058371a`](https://github.com/th-ch/youtube-music/commit/058371ace8fbd3d9f126454fdc7dbff86df05506)
|
||||
|
||||
#### [v1.3.1](https://github.com/th-ch/youtube-music/compare/v1.2.0...v1.3.1)
|
||||
|
||||
> 12 April 2020
|
||||
|
||||
- Add options and tray [`#21`](https://github.com/th-ch/youtube-music/pull/21)
|
||||
- Upgrade outdated dependencies [`#20`](https://github.com/th-ch/youtube-music/pull/20)
|
||||
- [Plugins] Migrate ad blocker [`#19`](https://github.com/th-ch/youtube-music/pull/19)
|
||||
- Upgrade xo [`297de08`](https://github.com/th-ch/youtube-music/commit/297de08278c2704b3baf65c455bba72f72acc06f)
|
||||
- Bump electron-builder (needed after electron upgrade) [`3d9e59d`](https://github.com/th-ch/youtube-music/commit/3d9e59dc90e0e994e20af55af9134477e68907a5)
|
||||
- Migrate from adblock-rs to cliqz [`422c3fc`](https://github.com/th-ch/youtube-music/commit/422c3fc28d83da309a80447dcd5064a4346580e8)
|
||||
|
||||
#### [v1.2.0](https://github.com/th-ch/youtube-music/compare/v1.1.6...v1.2.0)
|
||||
|
||||
> 15 March 2020
|
||||
|
||||
- [Snyk] Upgrade electron-localshortcut from 3.1.0 to 3.2.1 [`#13`](https://github.com/th-ch/youtube-music/pull/13)
|
||||
- [Snyk] Upgrade electron-updater from 4.0.6 to 4.2.2 [`#12`](https://github.com/th-ch/youtube-music/pull/12)
|
||||
- [Snyk] Upgrade electron-debug from 2.1.0 to 2.2.0 [`#15`](https://github.com/th-ch/youtube-music/pull/15)
|
||||
- Fix vulnerability [`#16`](https://github.com/th-ch/youtube-music/pull/16)
|
||||
- Plugin: autoconfirm when paused [`#11`](https://github.com/th-ch/youtube-music/pull/11)
|
||||
- Migrate to yarn to install packages without package.json (but keep npm rebuild) [`9371a48`](https://github.com/th-ch/youtube-music/commit/9371a4827e2312258a4f692c18f964155d57ceb8)
|
||||
- Bump electron-store to fix a vulnerability [`7050dfc`](https://github.com/th-ch/youtube-music/commit/7050dfca5c6a545dabc334690572d7f88b37e027)
|
||||
- Bump electron updater [`f25bb59`](https://github.com/th-ch/youtube-music/commit/f25bb59065d84cde202b5192688847c528c6ef61)
|
||||
|
||||
#### [v1.1.6](https://github.com/th-ch/youtube-music/compare/v1.1.5...v1.1.6)
|
||||
|
||||
> 11 September 2019
|
||||
|
||||
- Bump eslint-utils from 1.3.1 to 1.4.2 [`#7`](https://github.com/th-ch/youtube-music/pull/7)
|
||||
- Bump lodash.mergewith from 4.6.1 to 4.6.2 [`#4`](https://github.com/th-ch/youtube-music/pull/4)
|
||||
- Bump lodash from 4.17.11 to 4.17.14 [`#5`](https://github.com/th-ch/youtube-music/pull/5)
|
||||
- npm audit fix [`1a72129`](https://github.com/th-ch/youtube-music/commit/1a72129108935cbe732621d93b877e90d11a4195)
|
||||
- Fix Google login [`746b5f1`](https://github.com/th-ch/youtube-music/commit/746b5f13bb08c614df290e69946cfd116a550521)
|
||||
- Bump version to 1.1.6 [`6fd10ea`](https://github.com/th-ch/youtube-music/commit/6fd10ea4a0f63e9a46e7307d811977f4e0f3213f)
|
||||
|
||||
#### [v1.1.5](https://github.com/th-ch/youtube-music/compare/v1.1.4...v1.1.5)
|
||||
|
||||
> 6 July 2019
|
||||
|
||||
- Fix navigation plugin [`b10a1bb`](https://github.com/th-ch/youtube-music/commit/b10a1bb32dbea187422a43487527c379a9ddbb26)
|
||||
- Bump version to 1.1.5 [`07c4a42`](https://github.com/th-ch/youtube-music/commit/07c4a429c15f22b173629618518abb97d9ec0100)
|
||||
|
||||
#### [v1.1.4](https://github.com/th-ch/youtube-music/compare/v1.1.3...v1.1.4)
|
||||
|
||||
> 8 June 2019
|
||||
|
||||
- isDev -> is package [`a85325f`](https://github.com/th-ch/youtube-music/commit/a85325f33dbd40517b6029e500569fc1640af2ef)
|
||||
- Add titlebar/frame only on MacOS [`b1c4cc9`](https://github.com/th-ch/youtube-music/commit/b1c4cc9c45cc48413118aec8ce54767b1983a3e7)
|
||||
- Bump version to 1.1.4 [`0420f2e`](https://github.com/th-ch/youtube-music/commit/0420f2e49e295cede0db22dbb1f35ffafd6318ed)
|
||||
|
||||
#### [v1.1.3](https://github.com/th-ch/youtube-music/compare/v1.1.2...v1.1.3)
|
||||
|
||||
> 2 June 2019
|
||||
|
||||
- Bump fstream from 1.0.11 to 1.0.12 [`#3`](https://github.com/th-ch/youtube-music/pull/3)
|
||||
- Version 1.1.3 + npm audit fix [`147ac48`](https://github.com/th-ch/youtube-music/commit/147ac48de6540c836e835fefe47e66e55dbdc9bc)
|
||||
- Fix case for {en/dis}ablePlugin [`e86d63d`](https://github.com/th-ch/youtube-music/commit/e86d63da8cb083b89c2a26e6514a5b0df8868b13)
|
||||
- Remove outdated download links [`ec58b5c`](https://github.com/th-ch/youtube-music/commit/ec58b5cbedda8d6f881f0e81f185a1707dbe5fab)
|
||||
|
||||
#### [v1.1.2](https://github.com/th-ch/youtube-music/compare/v1.1.1...v1.1.2)
|
||||
|
||||
> 1 May 2019
|
||||
|
||||
- Display error/retry in case of failure [`5a1d7fb`](https://github.com/th-ch/youtube-music/commit/5a1d7fbf230fcd840a3ea654f31602fb5f504852)
|
||||
- Bump version to 1.1.2 [`eac2c5c`](https://github.com/th-ch/youtube-music/commit/eac2c5cf14d0a348704f7fbf0ff0bdce02758670)
|
||||
|
||||
#### [v1.1.1](https://github.com/th-ch/youtube-music/compare/v1.1.0...v1.1.1)
|
||||
|
||||
> 28 April 2019
|
||||
|
||||
- Update package lock [`2d3f77d`](https://github.com/th-ch/youtube-music/commit/2d3f77d96211460bb81a73c8c62b9e5407a7cf30)
|
||||
- Add travis config [`5279a45`](https://github.com/th-ch/youtube-music/commit/5279a45f3537170006ba04cd5d59ac8b879d78a5)
|
||||
- Add Appveyor config [`abc2bb8`](https://github.com/th-ch/youtube-music/commit/abc2bb8a4f749704f2daf376c0d392030f030caf)
|
||||
|
||||
#### [v1.1.0](https://github.com/th-ch/youtube-music/compare/v1.0.0...v1.1.0)
|
||||
|
||||
> 19 April 2019
|
||||
|
||||
- Build script + check for updates [`b3c24a5`](https://github.com/th-ch/youtube-music/commit/b3c24a521281c352c37d649e8334b581b2a1de4f)
|
||||
- Add download section in readme [`828e8d4`](https://github.com/th-ch/youtube-music/commit/828e8d472ca3d76dea71d95a85f8fa726404b8e7)
|
||||
- Add release/licence badge in readme [`9d343bf`](https://github.com/th-ch/youtube-music/commit/9d343bf779f2fa830302cc84c484bf4a93a25f36)
|
||||
|
||||
#### v1.0.0
|
||||
|
||||
> 19 April 2019
|
||||
|
||||
- Initial commit - app + 4 plugins [`8787b5c`](https://github.com/th-ch/youtube-music/commit/8787b5c175d02b52de65f2c559b411d999fa51e4)
|
||||
- Fix screenshot shadow + compress image [`c5c128f`](https://github.com/th-ch/youtube-music/commit/c5c128fa0f77c69e9bf12f6ca551315b37c51e84)
|
||||
- Missing quote in readme [`4b446ac`](https://github.com/th-ch/youtube-music/commit/4b446ac7c816c660cf369f3b8b6e420f766ee35f)
|
||||
BIN
docs/favicon/favicon.ico
Normal file
|
After Width: | Height: | Size: 247 B |
BIN
docs/favicon/favicon_144.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
docs/favicon/favicon_32.png
Normal file
|
After Width: | Height: | Size: 365 B |
BIN
docs/favicon/favicon_48.png
Normal file
|
After Width: | Height: | Size: 493 B |
BIN
docs/favicon/favicon_96.png
Normal file
|
After Width: | Height: | Size: 860 B |
9
docs/img/adblock.svg
Normal file
@ -0,0 +1,9 @@
|
||||
<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>
|
||||
|
After Width: | Height: | Size: 588 B |
23
docs/img/bg-bottom.svg
Normal file
@ -0,0 +1,23 @@
|
||||
<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>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
32
docs/img/bg-top.svg
Normal file
@ -0,0 +1,32 @@
|
||||
<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>
|
||||
|
After Width: | Height: | Size: 1.9 KiB |
5
docs/img/code.svg
Normal file
@ -0,0 +1,5 @@
|
||||
<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>
|
||||
|
After Width: | Height: | Size: 224 B |
8
docs/img/download.svg
Normal file
@ -0,0 +1,8 @@
|
||||
<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>
|
||||
|
After Width: | Height: | Size: 634 B |
35
docs/img/footer.svg
Normal file
@ -0,0 +1,35 @@
|
||||
<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>
|
||||
|
After Width: | Height: | Size: 2.2 KiB |
6
docs/img/plugins.svg
Normal file
@ -0,0 +1,6 @@
|
||||
<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>
|
||||
|
After Width: | Height: | Size: 391 B |
BIN
docs/img/youtube-music.png
Normal file
|
After Width: | Height: | Size: 227 KiB |
6
docs/img/youtube-music.svg
Normal file
@ -0,0 +1,6 @@
|
||||
<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>
|
||||
|
After Width: | Height: | Size: 360 B |
490
docs/index.html
Normal file
@ -0,0 +1,490 @@
|
||||
<!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">© 2021 th-ch</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
<script src="./js/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
268
docs/js/main.js
Normal file
@ -0,0 +1,268 @@
|
||||
/* 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);
|
||||
});
|
||||
327
docs/readme/README-ko.md
Normal file
@ -0,0 +1,327 @@
|
||||
# 유튜브 뮤직 (YouTube Music)
|
||||
|
||||
<div align="center">
|
||||
|
||||
[](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 래퍼; 기능:**
|
||||
|
||||
- 원래의 인터페이스를 유지하는 것을 목표로 하는 네이티브 디자인 및 느낌
|
||||
- 맞춤 플러그인을 위한 프레임워크: 스타일, 콘텐츠, 기능 등 필요에 따라 유튜브 뮤직을 변경하고, 클릭 한 번으로 플러그인을 활성화/비활성화할 수 있습니다.
|
||||
|
||||
## 번역
|
||||
|
||||
[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` 패키지를 설치합니다. 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`)
|
||||
- 두 파일을 **동일한 위치**에 놓아주세요.
|
||||
- 설치기를 실행하세요.
|
||||
|
||||
## 기능:
|
||||
|
||||
- **일시 정지 시 자동 확인** (항상 활성화 됨): 일정 시간이 지나면 음악을 일시 정지하는 ["계속 시청하시겠습니까?"](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)을 추가합니다. 선택적으로 전체 영상 탭을 제거할 수도 있습니다
|
||||
|
||||
- **비주얼라이저**: 플레이어에 시각화 도구 추가
|
||||
|
||||
## 테마
|
||||
|
||||
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';
|
||||
|
||||
const builder = createPlugin({
|
||||
name: 'Plugin Label',
|
||||
restartNeeded: true, // 값이 true면, YTM은 재시작 다이얼로그를 표시합니다
|
||||
config: {
|
||||
enabled: false,
|
||||
}, // 나의 커스텀 config
|
||||
stylesheets: [style], // 나의 커스텀 스타일
|
||||
renderer() {} // 렌더러 훅 정의
|
||||
});
|
||||
```
|
||||
|
||||
- HTML을 변경하려는 경우:
|
||||
|
||||
```typescript
|
||||
import { createPlugin } from '@/utils';
|
||||
|
||||
const builder = 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> [백틱] 키)로 메뉴를 표시할 수 있습니다.
|
||||
53
docs/style/fonts.css
Normal file
@ -0,0 +1,53 @@
|
||||
/* 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
Normal file
158
electron.vite.config.mts
Normal file
@ -0,0 +1,158 @@
|
||||
import { resolve, dirname } from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
|
||||
import { defineConfig, defineViteConfig } from 'electron-vite';
|
||||
import builtinModules from 'builtin-modules';
|
||||
import viteResolve from 'vite-plugin-resolve';
|
||||
import Inspect from 'vite-plugin-inspect';
|
||||
|
||||
import { pluginVirtualModuleGenerator } from './vite-plugins/plugin-importer.mjs';
|
||||
import pluginLoader from './vite-plugins/plugin-loader.mjs';
|
||||
|
||||
import type { UserConfig } from 'vite';
|
||||
import { i18nImporter } from './vite-plugins/i18n-importer.mjs';
|
||||
|
||||
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||||
|
||||
const resolveAlias = {
|
||||
'@': resolve(__dirname, './src'),
|
||||
'@assets': resolve(__dirname, './assets'),
|
||||
};
|
||||
|
||||
export default defineConfig({
|
||||
main: defineViteConfig(({ mode }) => {
|
||||
const commonConfig: UserConfig = {
|
||||
plugins: [
|
||||
pluginLoader('backend'),
|
||||
viteResolve({
|
||||
'virtual:i18n': i18nImporter(),
|
||||
'virtual:plugins': pluginVirtualModuleGenerator('main'),
|
||||
}),
|
||||
],
|
||||
publicDir: 'assets',
|
||||
build: {
|
||||
lib: {
|
||||
entry: 'src/index.ts',
|
||||
formats: ['cjs'],
|
||||
},
|
||||
outDir: 'dist/main',
|
||||
commonjsOptions: {
|
||||
ignoreDynamicRequires: true,
|
||||
},
|
||||
rollupOptions: {
|
||||
external: ['electron', 'custom-electron-prompt', ...builtinModules],
|
||||
input: './src/index.ts',
|
||||
},
|
||||
},
|
||||
resolve: {
|
||||
alias: resolveAlias,
|
||||
},
|
||||
};
|
||||
|
||||
if (mode === 'development') {
|
||||
commonConfig.plugins?.push(
|
||||
Inspect({ build: true, outputDir: '.vite-inspect/backend' }),
|
||||
);
|
||||
return commonConfig;
|
||||
}
|
||||
|
||||
return {
|
||||
...commonConfig,
|
||||
build: {
|
||||
...commonConfig.build,
|
||||
minify: true,
|
||||
cssMinify: true,
|
||||
},
|
||||
};
|
||||
}),
|
||||
preload: defineViteConfig(({ mode }) => {
|
||||
const commonConfig: UserConfig = {
|
||||
plugins: [
|
||||
pluginLoader('preload'),
|
||||
viteResolve({
|
||||
'virtual:i18n': i18nImporter(),
|
||||
'virtual:plugins': pluginVirtualModuleGenerator('preload'),
|
||||
}),
|
||||
],
|
||||
build: {
|
||||
lib: {
|
||||
entry: 'src/preload.ts',
|
||||
formats: ['cjs'],
|
||||
},
|
||||
outDir: 'dist/preload',
|
||||
commonjsOptions: {
|
||||
ignoreDynamicRequires: true,
|
||||
},
|
||||
rollupOptions: {
|
||||
external: ['electron', 'custom-electron-prompt', ...builtinModules],
|
||||
input: './src/preload.ts',
|
||||
},
|
||||
},
|
||||
resolve: {
|
||||
alias: resolveAlias,
|
||||
},
|
||||
};
|
||||
|
||||
if (mode === 'development') {
|
||||
commonConfig.plugins?.push(
|
||||
Inspect({ build: true, outputDir: '.vite-inspect/preload' }),
|
||||
);
|
||||
return commonConfig;
|
||||
}
|
||||
|
||||
return {
|
||||
...commonConfig,
|
||||
build: {
|
||||
...commonConfig.build,
|
||||
minify: true,
|
||||
cssMinify: true,
|
||||
},
|
||||
};
|
||||
}),
|
||||
renderer: defineViteConfig(({ mode }) => {
|
||||
const commonConfig: UserConfig = {
|
||||
plugins: [
|
||||
pluginLoader('renderer'),
|
||||
viteResolve({
|
||||
'virtual:i18n': i18nImporter(),
|
||||
'virtual:plugins': pluginVirtualModuleGenerator('renderer'),
|
||||
}),
|
||||
],
|
||||
root: './src/',
|
||||
build: {
|
||||
lib: {
|
||||
entry: 'src/index.html',
|
||||
formats: ['iife'],
|
||||
name: 'renderer',
|
||||
},
|
||||
outDir: 'dist/renderer',
|
||||
commonjsOptions: {
|
||||
ignoreDynamicRequires: true,
|
||||
},
|
||||
rollupOptions: {
|
||||
external: ['electron', ...builtinModules],
|
||||
input: './src/index.html',
|
||||
},
|
||||
},
|
||||
resolve: {
|
||||
alias: resolveAlias,
|
||||
},
|
||||
};
|
||||
|
||||
if (mode === 'development') {
|
||||
commonConfig.plugins?.push(
|
||||
Inspect({ build: true, outputDir: '.vite-inspect/renderer' }),
|
||||
);
|
||||
return commonConfig;
|
||||
}
|
||||
|
||||
return {
|
||||
...commonConfig,
|
||||
build: {
|
||||
...commonConfig.build,
|
||||
minify: true,
|
||||
cssMinify: true,
|
||||
},
|
||||
};
|
||||
}),
|
||||
});
|
||||
153
index.js
@ -1,153 +0,0 @@
|
||||
"use strict";
|
||||
const path = require("path");
|
||||
|
||||
const electron = require("electron");
|
||||
const isDev = require("electron-is-dev");
|
||||
const { autoUpdater } = require("electron-updater");
|
||||
|
||||
const { setApplicationMenu } = require("./menu");
|
||||
const { getEnabledPlugins, store } = require("./store");
|
||||
const { fileExists, injectCSS } = require("./plugins/utils");
|
||||
|
||||
const app = electron.app;
|
||||
|
||||
// Adds debug features like hotkeys for triggering dev tools and reload
|
||||
require("electron-debug")();
|
||||
|
||||
// Prevent window being garbage collected
|
||||
let mainWindow;
|
||||
autoUpdater.autoDownload = false;
|
||||
|
||||
let icon = "assets/youtube-music.png";
|
||||
if (process.platform == "win32") {
|
||||
icon = "assets/generated/icon.ico";
|
||||
} else if (process.platform == "darwin") {
|
||||
icon = "assets/generated/icon.icns";
|
||||
}
|
||||
|
||||
function onClosed() {
|
||||
// Dereference the window
|
||||
// For multiple windows store them in an array
|
||||
mainWindow = null;
|
||||
}
|
||||
|
||||
function createMainWindow() {
|
||||
const windowSize = store.get("window-size");
|
||||
const windowMaximized = store.get("window-maximized");
|
||||
|
||||
const win = new electron.BrowserWindow({
|
||||
icon : icon,
|
||||
width : windowSize.width,
|
||||
height : windowSize.height,
|
||||
backgroundColor: "#000",
|
||||
show : false,
|
||||
webPreferences : {
|
||||
nodeIntegration: false,
|
||||
preload : path.join(__dirname, "preload.js")
|
||||
},
|
||||
frame : false,
|
||||
titleBarStyle: "hiddenInset"
|
||||
});
|
||||
if (windowMaximized) {
|
||||
win.maximize();
|
||||
}
|
||||
|
||||
win.webContents.loadURL(store.get("url"));
|
||||
win.on("closed", onClosed);
|
||||
|
||||
injectCSS(win.webContents, path.join(__dirname, "youtube-music.css"));
|
||||
win.webContents.on("did-finish-load", () => {
|
||||
if (isDev) {
|
||||
console.log("did finish load");
|
||||
win.webContents.openDevTools();
|
||||
}
|
||||
});
|
||||
|
||||
getEnabledPlugins().forEach(plugin => {
|
||||
console.log("Loaded plugin - " + plugin);
|
||||
const pluginPath = path.join(__dirname, "plugins", plugin, "back.js");
|
||||
fileExists(pluginPath, () => {
|
||||
const handle = require(pluginPath);
|
||||
handle(win);
|
||||
});
|
||||
});
|
||||
|
||||
win.webContents.on("did-navigate-in-page", () => {
|
||||
const url = win.webContents.getURL();
|
||||
if (url.startsWith("https://music.youtube.com")) {
|
||||
store.set("url", url);
|
||||
}
|
||||
});
|
||||
|
||||
win.on("move", () => {
|
||||
let position = win.getPosition();
|
||||
store.set("window-position", { x: position[0], y: position[1] });
|
||||
});
|
||||
|
||||
win.on("resize", () => {
|
||||
const windowSize = win.getSize();
|
||||
|
||||
store.set("window-maximized", win.isMaximized());
|
||||
if (!win.isMaximized()) {
|
||||
store.set("window-size", { width: windowSize[0], height: windowSize[1] });
|
||||
}
|
||||
});
|
||||
|
||||
win.once("ready-to-show", () => {
|
||||
win.show();
|
||||
});
|
||||
|
||||
return win;
|
||||
}
|
||||
|
||||
app.on("window-all-closed", () => {
|
||||
if (process.platform !== "darwin") {
|
||||
app.quit();
|
||||
}
|
||||
|
||||
// Unregister all shortcuts.
|
||||
electron.globalShortcut.unregisterAll();
|
||||
});
|
||||
|
||||
app.on("activate", () => {
|
||||
// On OS X it's common to re-create a window in the app when the
|
||||
// dock icon is clicked and there are no other windows open.
|
||||
if (mainWindow === null) {
|
||||
mainWindow = createMainWindow();
|
||||
} else if (!mainWindow.isVisible()) {
|
||||
mainWindow.show();
|
||||
}
|
||||
});
|
||||
|
||||
app.on("ready", () => {
|
||||
setApplicationMenu();
|
||||
mainWindow = createMainWindow();
|
||||
if (!isDev) {
|
||||
autoUpdater.checkForUpdatesAndNotify();
|
||||
autoUpdater.on("update-available", () => {
|
||||
const dialogOpts = {
|
||||
type : "info",
|
||||
buttons: ["OK"],
|
||||
title : "Application Update",
|
||||
message: "A new version is available",
|
||||
detail :
|
||||
"A new version is available and can be downloaded at https://github.com/th-ch/youtube-music/releases/latest"
|
||||
};
|
||||
electron.dialog.showMessageBox(dialogOpts);
|
||||
});
|
||||
}
|
||||
|
||||
// Optimized for Mac OS X
|
||||
if (process.platform === "darwin") {
|
||||
var forceQuit = false;
|
||||
app.on("before-quit", () => {
|
||||
forceQuit = true;
|
||||
});
|
||||
mainWindow.on("close", event => {
|
||||
if (!forceQuit) {
|
||||
event.preventDefault();
|
||||
mainWindow.hide();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
56
menu.js
@ -1,56 +0,0 @@
|
||||
const { app, Menu } = require("electron");
|
||||
|
||||
const { getAllPlugins } = require("./plugins/utils");
|
||||
const { isPluginEnabled, enablePlugin, disablePlugin } = require("./store");
|
||||
|
||||
module.exports.setApplicationMenu = () => {
|
||||
const menuTemplate = [
|
||||
{
|
||||
label : "Plugins",
|
||||
submenu: getAllPlugins().map(plugin => {
|
||||
return {
|
||||
label : plugin,
|
||||
type : "checkbox",
|
||||
checked: isPluginEnabled(plugin),
|
||||
click : item => {
|
||||
if (item.checked) {
|
||||
enablePlugin(plugin);
|
||||
} else {
|
||||
disablePlugin(plugin);
|
||||
}
|
||||
}
|
||||
};
|
||||
})
|
||||
}
|
||||
];
|
||||
|
||||
if (process.platform === "darwin") {
|
||||
const name = app.getName();
|
||||
menuTemplate.unshift({
|
||||
label : name,
|
||||
submenu: [
|
||||
{ role: "about" },
|
||||
{ type: "separator" },
|
||||
{ role: "hide" },
|
||||
{ role: "hideothers" },
|
||||
{ role: "unhide" },
|
||||
{ type: "separator" },
|
||||
{
|
||||
label : "Select All",
|
||||
accelerator: "CmdOrCtrl+A",
|
||||
selector : "selectAll:"
|
||||
},
|
||||
{ label: "Cut", accelerator: "CmdOrCtrl+X", selector: "cut:" },
|
||||
{ label: "Copy", accelerator: "CmdOrCtrl+C", selector: "copy:" },
|
||||
{ label: "Paste", accelerator: "CmdOrCtrl+V", selector: "paste:" },
|
||||
{ type: "separator" },
|
||||
{ role: "minimize" },
|
||||
{ role: "close" },
|
||||
{ role: "quit" }
|
||||
]
|
||||
});
|
||||
}
|
||||
|
||||
const menu = Menu.buildFromTemplate(menuTemplate);
|
||||
Menu.setApplicationMenu(menu);
|
||||
};
|
||||
7391
package-lock.json
generated
277
package.json
@ -1,65 +1,216 @@
|
||||
{
|
||||
"name" : "youtube-music",
|
||||
"productName": "YouTube Music",
|
||||
"version" : "1.1.1",
|
||||
"description": "YouTube Music Desktop App - including custom plugins",
|
||||
"license" : "MIT",
|
||||
"repository" : "th-ch/youtube-music",
|
||||
"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",
|
||||
"mac" : {
|
||||
"identity": null,
|
||||
"icon" : "assets/generated/icons/mac/icon.icns"
|
||||
},
|
||||
"win": {
|
||||
"icon": "assets/generated/icons/win/icon.ico"
|
||||
},
|
||||
"linux": {
|
||||
"icon" : "assets/generated/icons/png",
|
||||
"category": "AudioVideo"
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"test" : "xo",
|
||||
"start" : "electron .",
|
||||
"icon" : "rimraf assets/generated && electron-icon-maker --input=assets/youtube-music.png --output=assets/generated",
|
||||
"postinstall" : "npm run icon && npm rebuild && node plugins/adblocker/generator.js && electron-rebuild",
|
||||
"clean" : "rimraf dist",
|
||||
"build" : "npm run clean && build --win --mac --linux",
|
||||
"build:mac" : "npm run clean && build --mac",
|
||||
"build:win" : "npm run clean && build --win",
|
||||
"release:linux": "npm run clean && build --linux -p always",
|
||||
"release:mac" : "npm run clean && build --mac -p always",
|
||||
"release:win" : "npm run clean && build --win -p always"
|
||||
},
|
||||
"dependencies": {
|
||||
"ad-block" : "^4.1.3",
|
||||
"electron-debug" : "^2.0.0",
|
||||
"electron-is-dev" : "^1.0.1",
|
||||
"electron-localshortcut": "^3.1.0",
|
||||
"electron-store" : "^2.0.0",
|
||||
"electron-updater" : "^4.0.6"
|
||||
},
|
||||
"devDependencies": {
|
||||
"devtron" : "^1.4.0",
|
||||
"electron" : "^4.0.8",
|
||||
"electron-builder" : "^20.40.2",
|
||||
"electron-devtools-installer": "^2.2.4",
|
||||
"electron-icon-maker" : "0.0.4",
|
||||
"electron-rebuild" : "^1.8.4",
|
||||
"rimraf" : "^2.6.3",
|
||||
"xo" : "^0.24.0"
|
||||
},
|
||||
"xo": {
|
||||
"envs": [
|
||||
"node",
|
||||
"browser"
|
||||
]
|
||||
}
|
||||
"name": "youtube-music",
|
||||
"productName": "YouTube Music",
|
||||
"version": "3.1.1",
|
||||
"description": "YouTube Music Desktop App - including custom plugins",
|
||||
"main": "./dist/main/index.js",
|
||||
"license": "MIT",
|
||||
"repository": "th-ch/youtube-music",
|
||||
"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"
|
||||
]
|
||||
},
|
||||
"rpm": {
|
||||
"depends": [
|
||||
"/usr/lib64/libuuid.so.1"
|
||||
]
|
||||
},
|
||||
"snap": {
|
||||
"slots": [
|
||||
{
|
||||
"mpris": {
|
||||
"interface": "mpris"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"directories": {
|
||||
"output": "./pack/"
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"test": "playwright test",
|
||||
"test:debug": "cross-env DEBUG=pw:*,-pw:test:protocol playwright test",
|
||||
"build": "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": "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",
|
||||
"dist": "pnpm clean && pnpm build && electron-builder --win --mac --linux -p never",
|
||||
"dist:linux": "pnpm clean && pnpm build && electron-builder --linux -p never",
|
||||
"dist:mac": "pnpm clean && pnpm build && electron-builder --mac dmg:x64 -p never",
|
||||
"dist:mac:arm64": "pnpm clean && pnpm build && electron-builder --mac dmg:arm64 -p never",
|
||||
"dist:win": "pnpm clean && pnpm build && electron-builder --win -p never",
|
||||
"dist:win:x64": "pnpm clean && pnpm build && electron-builder --win nsis-web:x64 -p never",
|
||||
"lint": "eslint .",
|
||||
"changelog": "npx --yes auto-changelog",
|
||||
"release:linux": "pnpm clean && pnpm build && electron-builder --linux -p always -c.snap.publish=github",
|
||||
"release:mac": "pnpm clean && pnpm build && electron-builder --mac -p always",
|
||||
"release:win": "pnpm clean && pnpm build && electron-builder --win -p always",
|
||||
"typecheck": "tsc -p tsconfig.json --noEmit"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18.0.0"
|
||||
},
|
||||
"pnpm": {
|
||||
"overrides": {
|
||||
"esbuild": "0.18.20",
|
||||
"usocket": "1.0.1",
|
||||
"rollup": "4.9.1",
|
||||
"node-gyp": "10.0.1",
|
||||
"xml2js": "0.6.2",
|
||||
"node-fetch": "3.3.2",
|
||||
"@electron/universal": "2.0.0",
|
||||
"@babel/runtime": "7.23.2"
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"@cliqz/adblocker-electron": "1.26.12",
|
||||
"@cliqz/adblocker-electron-preload": "1.26.12",
|
||||
"@electron-toolkit/tsconfig": "1.0.1",
|
||||
"@electron/remote": "2.1.1",
|
||||
"@ffmpeg.wasm/core-mt": "0.12.0",
|
||||
"@ffmpeg.wasm/main": "0.12.0",
|
||||
"@foobar404/wave": "2.0.4",
|
||||
"@jellybrick/electron-better-web-request": "1.0.4",
|
||||
"@jellybrick/mpris-service": "2.1.4",
|
||||
"@xhayper/discord-rpc": "1.1.1",
|
||||
"async-mutex": "0.4.0",
|
||||
"butterchurn": "3.0.0-beta.4",
|
||||
"butterchurn-presets": "3.0.0-beta.4",
|
||||
"conf": "10.2.0",
|
||||
"custom-electron-prompt": "1.5.7",
|
||||
"dbus-next": "0.10.2",
|
||||
"deepmerge-ts": "5.1.0",
|
||||
"electron-debug": "3.2.0",
|
||||
"electron-is": "3.0.0",
|
||||
"electron-localshortcut": "3.2.1",
|
||||
"electron-store": "8.1.0",
|
||||
"electron-unhandled": "4.0.1",
|
||||
"electron-updater": "6.1.7",
|
||||
"fast-average-color": "9.4.0",
|
||||
"fast-equals": "5.0.1",
|
||||
"filenamify": "6.0.0",
|
||||
"howler": "2.2.4",
|
||||
"html-to-text": "9.0.5",
|
||||
"i18next": "23.7.11",
|
||||
"keyboardevent-from-electron-accelerator": "2.0.0",
|
||||
"keyboardevents-areequal": "0.2.2",
|
||||
"node-html-parser": "6.1.11",
|
||||
"node-id3": "0.2.6",
|
||||
"serve": "14.2.1",
|
||||
"simple-youtube-age-restriction-bypass": "github:organization/Simple-YouTube-Age-Restriction-Bypass#v2.5.9",
|
||||
"ts-morph": "21.0.1",
|
||||
"vudio": "2.1.1",
|
||||
"x11": "2.3.0",
|
||||
"youtubei.js": "8.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@playwright/test": "1.41.0-alpha-dec-18-2023",
|
||||
"@total-typescript/ts-reset": "0.5.1",
|
||||
"@types/electron-localshortcut": "3.1.3",
|
||||
"@types/howler": "2.2.11",
|
||||
"@types/html-to-text": "9.0.4",
|
||||
"@typescript-eslint/eslint-plugin": "6.14.0",
|
||||
"bufferutil": "4.0.8",
|
||||
"builtin-modules": "3.3.0",
|
||||
"cross-env": "7.0.3",
|
||||
"del-cli": "5.1.0",
|
||||
"electron": "28.0.0",
|
||||
"electron-builder": "24.9.1",
|
||||
"electron-devtools-installer": "3.2.0",
|
||||
"electron-vite": "2.0.0-beta.1",
|
||||
"esbuild": "0.18.20",
|
||||
"eslint": "8.56.0",
|
||||
"eslint-import-resolver-exports": "1.0.0-beta.5",
|
||||
"eslint-import-resolver-typescript": "3.6.1",
|
||||
"eslint-plugin-import": "2.29.1",
|
||||
"eslint-plugin-prettier": "5.0.1",
|
||||
"glob": "10.3.10",
|
||||
"node-gyp": "10.0.1",
|
||||
"playwright": "1.41.0-alpha-dec-18-2023",
|
||||
"rollup": "4.9.1",
|
||||
"typescript": "5.3.3",
|
||||
"utf-8-validate": "6.0.3",
|
||||
"vite": "5.0.10",
|
||||
"vite-plugin-inspect": "0.8.1",
|
||||
"vite-plugin-resolve": "2.5.1",
|
||||
"ws": "8.15.1"
|
||||
},
|
||||
"auto-changelog": {
|
||||
"hideCredit": true,
|
||||
"package": true,
|
||||
"unreleased": true,
|
||||
"output": "changelog.md"
|
||||
},
|
||||
"packageManager": "pnpm@8.12.1"
|
||||
}
|
||||
|
||||
1
plugins/adblocker/.gitignore
vendored
@ -1 +0,0 @@
|
||||
detector.buffer
|
||||
@ -1,3 +0,0 @@
|
||||
const { blockWindowAds } = require("./blocker");
|
||||
|
||||
module.exports = win => blockWindowAds(win.webContents);
|
||||
@ -1,12 +0,0 @@
|
||||
const { initialize, containsAds } = require("./contains-ads");
|
||||
|
||||
module.exports.blockWindowAds = webContents => {
|
||||
initialize();
|
||||
webContents.session.webRequest.onBeforeRequest(
|
||||
["*://*./*"],
|
||||
(details, cb) => {
|
||||
const shouldBeBlocked = containsAds(details.url);
|
||||
cb({ cancel: shouldBeBlocked });
|
||||
}
|
||||
);
|
||||
};
|
||||
@ -1,24 +0,0 @@
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
const Blocker = require("ad-block");
|
||||
|
||||
const client = new Blocker.AdBlockClient();
|
||||
const file = path.resolve(__dirname, "detector.buffer");
|
||||
|
||||
module.exports.client = client;
|
||||
module.exports.initialize = () =>
|
||||
new Promise((resolve, reject) => {
|
||||
fs.readFile(file, (err, buffer) => {
|
||||
if (err) {
|
||||
return reject(err);
|
||||
}
|
||||
client.deserialize(buffer);
|
||||
return resolve();
|
||||
});
|
||||
});
|
||||
|
||||
const none = Blocker.FilterOptions.noFilterOption;
|
||||
const isAd = (req, base) => client.matches(req, none, base);
|
||||
|
||||
module.exports.containsAds = (req, base) => isAd(req, base);
|
||||
module.exports.isAd = isAd;
|
||||
@ -1,67 +0,0 @@
|
||||
// This file generates the detector buffer
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
const Blocker = require("ad-block");
|
||||
const https = require("https");
|
||||
|
||||
const SOURCES = [
|
||||
"https://raw.githubusercontent.com/kbinani/adblock-youtube-ads/master/signed.txt"
|
||||
];
|
||||
|
||||
function parseAdblockList(client, adblockList) {
|
||||
const urls = adblockList.split("\n");
|
||||
const totalSize = urls.length;
|
||||
console.log(
|
||||
"Parsing " + totalSize + " urls (this can take a couple minutes)."
|
||||
);
|
||||
urls.map(line => client.parse(line));
|
||||
console.log("Created buffer.");
|
||||
}
|
||||
|
||||
function writeBuffer(client) {
|
||||
const output = path.resolve(__dirname, "detector.buffer");
|
||||
fs.writeFile(output, client.serialize(64), err => {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return;
|
||||
}
|
||||
console.log("Wrote buffer to detector.buffer!");
|
||||
});
|
||||
}
|
||||
|
||||
function generateDetectorBuffer() {
|
||||
const client = new Blocker.AdBlockClient();
|
||||
let nbSourcesFetched = 0;
|
||||
|
||||
// fetch updated versions
|
||||
SOURCES.forEach(source => {
|
||||
console.log("Downloading " + source);
|
||||
https
|
||||
.get(source, resp => {
|
||||
let data = "";
|
||||
|
||||
// A chunk of data has been recieved.
|
||||
resp.on("data", chunk => {
|
||||
data += chunk;
|
||||
});
|
||||
|
||||
// The whole response has been received. Print out the result.
|
||||
resp.on("end", () => {
|
||||
parseAdblockList(client, data);
|
||||
nbSourcesFetched++;
|
||||
|
||||
if (nbSourcesFetched === SOURCES.length) {
|
||||
writeBuffer(client);
|
||||
}
|
||||
});
|
||||
})
|
||||
.on("error", err => {
|
||||
console.log("Error: " + err.message);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = generateDetectorBuffer;
|
||||
if (require.main === module) {
|
||||
generateDetectorBuffer();
|
||||
}
|
||||
@ -1,24 +0,0 @@
|
||||
const { triggerAction } = require('../utils');
|
||||
|
||||
const CHANNEL = "navigation";
|
||||
const ACTIONS = {
|
||||
NEXT: "next",
|
||||
BACK: 'back',
|
||||
}
|
||||
|
||||
function goToNextPage() {
|
||||
triggerAction(CHANNEL, ACTIONS.NEXT);
|
||||
}
|
||||
|
||||
function goToPreviousPage() {
|
||||
triggerAction(CHANNEL, ACTIONS.BACK);
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
CHANNEL: CHANNEL,
|
||||
ACTIONS: ACTIONS,
|
||||
global: {
|
||||
goToNextPage: goToNextPage,
|
||||
goToPreviousPage: goToPreviousPage,
|
||||
}
|
||||
};
|
||||
@ -1,23 +0,0 @@
|
||||
const { listenAction } = require("../utils");
|
||||
const { ACTIONS, CHANNEL } = require("./actions.js");
|
||||
|
||||
function handle(win) {
|
||||
listenAction(CHANNEL, (event, action) => {
|
||||
switch (action) {
|
||||
case ACTIONS.NEXT:
|
||||
if (win.webContents.canGoForward()) {
|
||||
win.webContents.goForward();
|
||||
}
|
||||
break;
|
||||
case ACTIONS.BACK:
|
||||
if (win.webContents.canGoBack()) {
|
||||
win.webContents.goBack();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
console.log("Unknown action: " + action);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = handle;
|
||||
@ -1,14 +0,0 @@
|
||||
const { ElementFromFile, templatePath } = require('../utils');
|
||||
|
||||
function run() {
|
||||
const forwardButton = ElementFromFile(templatePath(__dirname, 'forward.html'));
|
||||
const backButton = ElementFromFile(templatePath(__dirname, 'back.html'));
|
||||
const menu = document.querySelector("ytmusic-pivot-bar-renderer");
|
||||
|
||||
if (menu) {
|
||||
menu.prepend(forwardButton);
|
||||
menu.prepend(backButton);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = run;
|
||||
@ -1,21 +0,0 @@
|
||||
<ytmusic-pivot-bar-item-renderer class="style-scope ytmusic-pivot-bar-renderer" tab-id="FEmusic_back" role="tab" onclick="goToPreviousPage()">
|
||||
<yt-icon class="tab-icon style-scope ytmusic-pivot-bar-item-renderer">
|
||||
<svg viewBox="0 0 24 24" preserveAspectRatio="xMidYMid meet" focusable="false" class="style-scope yt-icon" style="pointer-events: none; display: block; width: 100%; height: 100%;">
|
||||
<g class="style-scope yt-icon">
|
||||
<path class="st0" d="M109.3 265.2l218.9 218.9c5.1 5.1 11.8 7.9 19 7.9s14-2.8 19-7.9l16.1-16.1c10.5-10.5 10.5-27.6 0-38.1L198.6 246.1 382.7 62c5.1-5.1 7.9-11.8 7.9-19 0-7.2-2.8-14-7.9-19L366.5 7.9c-5.1-5.1-11.8-7.9-19-7.9-7.2 0-14 2.8-19 7.9L109.3 227c-5.1 5.1-7.9 11.9-7.8 19.1 0 7.2 2.8 14 7.8 19.1z" class="style-scope yt-icon">
|
||||
</path>
|
||||
</g>
|
||||
</svg>
|
||||
</yt-icon>
|
||||
|
||||
<paper-icon-button class="search-icon style-scope ytmusic-search-box" role="button" tabindex="0" aria-disabled="false" title="Go to previous page">
|
||||
<iron-icon id="icon" class="style-scope paper-icon-button">
|
||||
<svg viewBox="0 0 492 492" preserveAspectRatio="xMidYMid meet" focusable="false" class="style-scope iron-icon" style="pointer-events: none; display: block; width: 100%; height: 100%;">
|
||||
<g class="style-scope iron-icon">
|
||||
<path class="st0" d="M109.3 265.2l218.9 218.9c5.1 5.1 11.8 7.9 19 7.9s14-2.8 19-7.9l16.1-16.1c10.5-10.5 10.5-27.6 0-38.1L198.6 246.1 382.7 62c5.1-5.1 7.9-11.8 7.9-19 0-7.2-2.8-14-7.9-19L366.5 7.9c-5.1-5.1-11.8-7.9-19-7.9-7.2 0-14 2.8-19 7.9L109.3 227c-5.1 5.1-7.9 11.9-7.8 19.1 0 7.2 2.8 14 7.8 19.1z">
|
||||
</path>
|
||||
</g>
|
||||
</svg>
|
||||
</iron-icon>
|
||||
</paper-icon-button>
|
||||
</ytmusic-pivot-bar-item-renderer>
|
||||
@ -1,26 +0,0 @@
|
||||
<ytmusic-pivot-bar-item-renderer class="style-scope ytmusic-pivot-bar-renderer" tab-id="FEmusic_next" role="tab" onclick="goToNextPage()">
|
||||
<yt-icon class="tab-icon style-scope ytmusic-pivot-bar-item-renderer">
|
||||
<svg viewBox="0 0 24 24" preserveAspectRatio="xMidYMid meet" focusable="false" class="style-scope yt-icon" style="pointer-events: none; display: block; width: 100%; height: 100%;">
|
||||
<g class="style-scope yt-icon">
|
||||
<path d="M382.678,226.804L163.73,7.86C158.666,2.792,151.906,0,144.698,0s-13.968,2.792-19.032,7.86l-16.124,16.12
|
||||
c-10.492,10.504-10.492,27.576,0,38.064L293.398,245.9l-184.06,184.06c-5.064,5.068-7.86,11.824-7.86,19.028
|
||||
c0,7.212,2.796,13.968,7.86,19.04l16.124,16.116c5.068,5.068,11.824,7.86,19.032,7.86s13.968-2.792,19.032-7.86L382.678,265
|
||||
c5.076-5.084,7.864-11.872,7.848-19.088C390.542,238.668,387.754,231.884,382.678,226.804z" class="style-scope yt-icon">
|
||||
</path>
|
||||
</g>
|
||||
</svg>
|
||||
</yt-icon>
|
||||
|
||||
<paper-icon-button class="search-icon style-scope ytmusic-search-box" role="button" tabindex="0" aria-disabled="false" title="Go to next page">
|
||||
<iron-icon id="icon" class="style-scope paper-icon-button">
|
||||
<svg viewBox="0 0 492 492" preserveAspectRatio="xMidYMid meet" focusable="false" class="style-scope iron-icon" style="pointer-events: none; display: block; width: 100%; height: 100%;">
|
||||
<g class="style-scope iron-icon">
|
||||
<path class="st0" d="M382.7,226.8L163.7,7.9c-5.1-5.1-11.8-7.9-19-7.9s-14,2.8-19,7.9L109.5,24c-10.5,10.5-10.5,27.6,0,38.1
|
||||
l183.9,183.9L109.3,430c-5.1,5.1-7.9,11.8-7.9,19c0,7.2,2.8,14,7.9,19l16.1,16.1c5.1,5.1,11.8,7.9,19,7.9s14-2.8,19-7.9L382.7,265
|
||||
c5.1-5.1,7.9-11.9,7.8-19.1C390.5,238.7,387.8,231.9,382.7,226.8z">
|
||||
</path>
|
||||
</g>
|
||||
</svg>
|
||||
</iron-icon>
|
||||
</paper-icon-button>
|
||||
</ytmusic-pivot-bar-item-renderer>
|
||||
@ -1,6 +0,0 @@
|
||||
const { injectCSS } = require("../utils");
|
||||
const path = require("path");
|
||||
|
||||
module.exports = win => {
|
||||
injectCSS(win.webContents, path.join(__dirname, "style.css"));
|
||||
};
|
||||
@ -1,15 +0,0 @@
|
||||
function removeLoginElements() {
|
||||
const elementsToRemove = [
|
||||
".sign-in-link.ytmusic-nav-bar",
|
||||
'.ytmusic-pivot-bar-renderer[tab-id="FEmusic_liked"]'
|
||||
];
|
||||
|
||||
elementsToRemove.forEach(selector => {
|
||||
const node = document.querySelector(selector);
|
||||
if (node) {
|
||||
node.remove();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = removeLoginElements;
|
||||
@ -1,3 +0,0 @@
|
||||
.ytmusic-pivot-bar-renderer[tab-id="FEmusic_liked"] {
|
||||
display: none !important;
|
||||
}
|
||||
@ -1,31 +0,0 @@
|
||||
const { globalShortcut } = require("electron");
|
||||
const electronLocalshortcut = require("electron-localshortcut");
|
||||
|
||||
const {
|
||||
playPause,
|
||||
nextTrack,
|
||||
previousTrack,
|
||||
startSearch
|
||||
} = require("./youtube.js");
|
||||
|
||||
function _registerGlobalShortcut(webContents, shortcut, action) {
|
||||
globalShortcut.register(shortcut, () => {
|
||||
action(webContents);
|
||||
});
|
||||
}
|
||||
|
||||
function _registerLocalShortcut(win, shortcut, action) {
|
||||
electronLocalshortcut.register(win, shortcut, () => {
|
||||
action(win.webContents);
|
||||
});
|
||||
}
|
||||
|
||||
function registerShortcuts(win) {
|
||||
_registerGlobalShortcut(win.webContents, "MediaPlayPause", playPause);
|
||||
_registerGlobalShortcut(win.webContents, "MediaNextTrack", nextTrack);
|
||||
_registerGlobalShortcut(win.webContents, "MediaPreviousTrack", previousTrack);
|
||||
_registerLocalShortcut(win, "CommandOrControl+F", startSearch);
|
||||
_registerLocalShortcut(win, "CommandOrControl+L", startSearch);
|
||||
}
|
||||
|
||||
module.exports = registerShortcuts;
|
||||
@ -1,29 +0,0 @@
|
||||
function _keyboardInput(webContents, key) {
|
||||
return webContents.sendInputEvent({
|
||||
type : "keydown",
|
||||
keyCode: key
|
||||
});
|
||||
}
|
||||
|
||||
function playPause(webContents) {
|
||||
return _keyboardInput(webContents, "Space");
|
||||
}
|
||||
|
||||
function nextTrack(webContents) {
|
||||
return _keyboardInput(webContents, "j");
|
||||
}
|
||||
|
||||
function previousTrack(webContents) {
|
||||
return _keyboardInput(webContents, "k");
|
||||
}
|
||||
|
||||
function startSearch(webContents) {
|
||||
return _keyboardInput(webContents, "/");
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
playPause : playPause,
|
||||
nextTrack : nextTrack,
|
||||
previousTrack: previousTrack,
|
||||
startSearch : startSearch
|
||||
};
|
||||
@ -1,54 +0,0 @@
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
|
||||
const { ipcMain, ipcRenderer } = require("electron");
|
||||
|
||||
// Creates a DOM element from a HTML string
|
||||
module.exports.ElementFromHtml = html => {
|
||||
var template = document.createElement("template");
|
||||
html = html.trim(); // Never return a text node of whitespace as the result
|
||||
template.innerHTML = html;
|
||||
return template.content.firstChild;
|
||||
};
|
||||
|
||||
// Creates a DOM element from a HTML file
|
||||
module.exports.ElementFromFile = filepath => {
|
||||
return module.exports.ElementFromHtml(fs.readFileSync(filepath, "utf8"));
|
||||
};
|
||||
|
||||
module.exports.templatePath = (pluginPath, name) => {
|
||||
return path.join(pluginPath, "templates", name);
|
||||
};
|
||||
|
||||
module.exports.triggerAction = (channel, action) => {
|
||||
return ipcRenderer.send(channel, action);
|
||||
};
|
||||
|
||||
module.exports.listenAction = (channel, callback) => {
|
||||
return ipcMain.on(channel, callback);
|
||||
};
|
||||
|
||||
module.exports.fileExists = (path, callbackIfExists) => {
|
||||
fs.access(path, fs.F_OK, err => {
|
||||
if (err) {
|
||||
return;
|
||||
}
|
||||
|
||||
callbackIfExists();
|
||||
});
|
||||
};
|
||||
|
||||
module.exports.injectCSS = (webContents, filepath) => {
|
||||
webContents.on("did-finish-load", () => {
|
||||
webContents.insertCSS(fs.readFileSync(filepath, "utf8"));
|
||||
});
|
||||
};
|
||||
|
||||
module.exports.getAllPlugins = () => {
|
||||
const isDirectory = source => fs.lstatSync(source).isDirectory();
|
||||
return fs
|
||||
.readdirSync(__dirname)
|
||||
.map(name => path.join(__dirname, name))
|
||||
.filter(isDirectory)
|
||||
.map(name => path.basename(name));
|
||||
};
|
||||
6279
pnpm-lock.yaml
generated
Normal file
26
preload.js
@ -1,26 +0,0 @@
|
||||
const path = require("path");
|
||||
|
||||
const { getEnabledPlugins } = require("./store");
|
||||
const { fileExists } = require("./plugins/utils");
|
||||
|
||||
const plugins = getEnabledPlugins();
|
||||
|
||||
plugins.forEach(plugin => {
|
||||
const pluginPath = path.join(__dirname, "plugins", plugin, "actions.js");
|
||||
fileExists(pluginPath, () => {
|
||||
const actions = require(pluginPath).global || {};
|
||||
Object.keys(actions).forEach(actionName => {
|
||||
global[actionName] = actions[actionName];
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
plugins.forEach(plugin => {
|
||||
const pluginPath = path.join(__dirname, "plugins", plugin, "front.js");
|
||||
fileExists(pluginPath, () => {
|
||||
const run = require(pluginPath);
|
||||
run();
|
||||
});
|
||||
});
|
||||
});
|
||||
104
readme.md
@ -1,104 +0,0 @@
|
||||
# YouTube Music
|
||||
[](https://GitHub.com/th-ch/youtube-music/releases/)
|
||||
[](https://github.com/th-ch/youtube-music/blob/master/LICENSE)
|
||||
[](https://github.com/sindresorhus/xo)
|
||||
[](https://ci.appveyor.com/project/th-ch/youtube-music)
|
||||
[](https://travis-ci.org/th-ch/youtube-music)
|
||||
|
||||

|
||||
|
||||
**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
|
||||
|
||||
## Download
|
||||
|
||||
You can check out the [latest release](https://github.com/th-ch/youtube-music/releases/latest) to quickly find the latest version.
|
||||
Here are the links to the current version:
|
||||
|
||||
- [Mac](https://github.com/th-ch/youtube-music/releases/download/v1.0.0/youtube-music-1.0.0.dmg)
|
||||
- [Windows](https://github.com/th-ch/youtube-music/releases/download/v1.0.0/youtube-music-setup-1.0.0.exe)
|
||||
- [Linux](https://github.com/th-ch/youtube-music/releases/download/v1.0.0/youtube-music-1.0.0-x86_64.AppImage)
|
||||
|
||||
## Available plugins:
|
||||
|
||||
- **Ad Blocker**: block all ads and tracking out of the box
|
||||
- **No Google Login**: remove Google login buttons and links from the interface
|
||||
- **Shortcuts**: use your usual shortcuts (media keys, Ctrl/CMD + F…) to control YouTube Music
|
||||
- **Navigation**: next/back navigation arrows directly integrated in the interface, like in your favorite browser
|
||||
|
||||
## Dev
|
||||
|
||||
```sh
|
||||
git clone https://github.com/th-ch/youtube-music
|
||||
cd youtube-music
|
||||
npm install
|
||||
npm start
|
||||
```
|
||||
|
||||
## Build your own plugins
|
||||
|
||||
Using plugins, you can:
|
||||
|
||||
- manipulate the app - the `BrowserWindow` from electron is passed to the plugin handler
|
||||
- change the front by manipulating the HTML/CSS
|
||||
|
||||
### Creating a plugin
|
||||
|
||||
Create a folder in `plugins/YOUR-PLUGIN-NAME`:
|
||||
|
||||
- if you need to manipulate the BrowserWindow, create a file `back.js` with the following template:
|
||||
|
||||
```node
|
||||
module.exports = win => {
|
||||
// win is the BrowserWindow object
|
||||
};
|
||||
```
|
||||
|
||||
- if you need to change the front, create a file `front.js` with the following template:
|
||||
|
||||
```node
|
||||
module.exports = () => {
|
||||
// This function will be called as a preload script
|
||||
// So you can use front features like `document.querySelector`
|
||||
};
|
||||
```
|
||||
|
||||
### Common use cases
|
||||
|
||||
- injecting custom CSS: create a `style.css` file in the same folder then:
|
||||
|
||||
```node
|
||||
const path = require("path");
|
||||
const { injectCSS } = require("../utils");
|
||||
|
||||
// back.js
|
||||
module.exports = win => {
|
||||
injectCSS(win.webContents, path.join(__dirname, "style.css"));
|
||||
};
|
||||
```
|
||||
|
||||
- changing the HTML:
|
||||
|
||||
```node
|
||||
// front.js
|
||||
module.exports = () => {
|
||||
// Remove the login button
|
||||
document.querySelector('.sign-in-link.ytmusic-nav-bar').remove();
|
||||
};
|
||||
```
|
||||
|
||||
- communicating between the front and back: can be done using the ipcMain module from electron. See `utils.js` file and example in `navigation` plugin.
|
||||
|
||||
## Build
|
||||
|
||||
```sh
|
||||
npm run build
|
||||
```
|
||||
|
||||
Builds the app for macOS, Linux, and Windows, using [electron-builder](https://github.com/electron-userland/electron-builder).
|
||||
|
||||
## License
|
||||
|
||||
MIT © [th-ch](https://github.com/th-ch/youtube-music)
|
||||
8
renovate.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||
"extends": [
|
||||
"config:base"
|
||||
],
|
||||
"labels": ["dependencies"],
|
||||
"postUpdateOptions": ["pnpmDedupe"]
|
||||
}
|
||||
BIN
screenshot.jpg
|
Before Width: | Height: | Size: 816 KiB |
74
src/config/defaults.ts
Normal file
@ -0,0 +1,74 @@
|
||||
export interface WindowSizeConfig {
|
||||
width: number;
|
||||
height: number;
|
||||
}
|
||||
|
||||
export interface WindowPositionConfig {
|
||||
x: number;
|
||||
y: number;
|
||||
}
|
||||
|
||||
export interface DefaultConfig {
|
||||
'window-size': WindowSizeConfig;
|
||||
'window-maximized': boolean;
|
||||
'window-position': WindowPositionConfig;
|
||||
url: string;
|
||||
options: {
|
||||
language?: string;
|
||||
tray: boolean;
|
||||
appVisible: boolean;
|
||||
autoUpdates: boolean;
|
||||
alwaysOnTop: boolean;
|
||||
hideMenu: boolean;
|
||||
hideMenuWarned: boolean;
|
||||
startAtLogin: boolean;
|
||||
disableHardwareAcceleration: boolean;
|
||||
removeUpgradeButton: boolean;
|
||||
restartOnConfigChanges: boolean;
|
||||
trayClickPlayPause: boolean;
|
||||
autoResetAppCache: boolean;
|
||||
resumeOnStart: boolean;
|
||||
likeButtons: string;
|
||||
proxy: string;
|
||||
startingPage: string;
|
||||
overrideUserAgent: boolean;
|
||||
themes: string[];
|
||||
};
|
||||
plugins: Record<string, unknown>;
|
||||
}
|
||||
|
||||
const defaultConfig: DefaultConfig = {
|
||||
'window-size': {
|
||||
width: 1100,
|
||||
height: 550,
|
||||
},
|
||||
'window-maximized': false,
|
||||
'window-position': {
|
||||
x: -1,
|
||||
y: -1,
|
||||
},
|
||||
'url': 'https://music.youtube.com',
|
||||
'options': {
|
||||
tray: false,
|
||||
appVisible: true,
|
||||
autoUpdates: true,
|
||||
alwaysOnTop: false,
|
||||
hideMenu: false,
|
||||
hideMenuWarned: false,
|
||||
startAtLogin: false,
|
||||
disableHardwareAcceleration: false,
|
||||
removeUpgradeButton: false,
|
||||
restartOnConfigChanges: false,
|
||||
trayClickPlayPause: false,
|
||||
autoResetAppCache: false,
|
||||
resumeOnStart: true,
|
||||
likeButtons: '',
|
||||
proxy: '',
|
||||
startingPage: '',
|
||||
overrideUserAgent: false,
|
||||
themes: [],
|
||||
},
|
||||
'plugins': {},
|
||||
};
|
||||
|
||||
export default defaultConfig;
|
||||
89
src/config/index.ts
Normal file
@ -0,0 +1,89 @@
|
||||
import Store from 'electron-store';
|
||||
import { deepmerge } from 'deepmerge-ts';
|
||||
|
||||
import defaultConfig from './defaults';
|
||||
|
||||
import store from './store';
|
||||
import plugins from './plugins';
|
||||
|
||||
import { restart } from '@/providers/app-controls';
|
||||
|
||||
const set = (key: string, value: unknown) => {
|
||||
store.set(key, value);
|
||||
};
|
||||
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) {
|
||||
set(key, value);
|
||||
if (store.get('options.restartOnConfigChanges')) {
|
||||
restart();
|
||||
}
|
||||
}
|
||||
|
||||
// MAGIC OF TYPESCRIPT
|
||||
|
||||
type Prev = [
|
||||
never,
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
6,
|
||||
7,
|
||||
8,
|
||||
9,
|
||||
10,
|
||||
11,
|
||||
12,
|
||||
13,
|
||||
14,
|
||||
15,
|
||||
16,
|
||||
17,
|
||||
18,
|
||||
19,
|
||||
20,
|
||||
...0[],
|
||||
];
|
||||
type Join<K, P> = K extends string | number
|
||||
? P extends string | number
|
||||
? `${K}${'' extends P ? '' : '.'}${P}`
|
||||
: never
|
||||
: never;
|
||||
type Paths<T, D extends number = 10> = [D] extends [never]
|
||||
? never
|
||||
: T extends object
|
||||
? {
|
||||
[K in keyof T]-?: K extends string | number
|
||||
? `${K}` | Join<K, Paths<T[K], Prev[D]>>
|
||||
: never;
|
||||
}[keyof T]
|
||||
: '';
|
||||
|
||||
type SplitKey<K> = K extends `${infer A}.${infer B}` ? [A, B] : [K, string];
|
||||
type PathValue<T, K extends string> = SplitKey<K> extends [
|
||||
infer A extends keyof T,
|
||||
infer B extends string,
|
||||
]
|
||||
? PathValue<T[A], B>
|
||||
: T;
|
||||
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<Store['onDidAnyChange']>[0]) {
|
||||
store.onDidAnyChange(cb);
|
||||
},
|
||||
plugins,
|
||||
};
|
||||
80
src/config/plugins.ts
Normal file
@ -0,0 +1,80 @@
|
||||
import { deepmerge } from 'deepmerge-ts';
|
||||
import { allPlugins } from 'virtual:plugins';
|
||||
|
||||
import store from './store';
|
||||
|
||||
import { restart } from '@/providers/app-controls';
|
||||
|
||||
import type { PluginConfig } from '@/types/plugins';
|
||||
|
||||
export function getPlugins() {
|
||||
return store.get('plugins') as Record<string, PluginConfig>;
|
||||
}
|
||||
|
||||
export function isEnabled(plugin: string) {
|
||||
const pluginConfig = deepmerge(
|
||||
allPlugins[plugin].config ?? { enabled: false },
|
||||
(store.get('plugins') as Record<string, PluginConfig>)[plugin] ?? {},
|
||||
);
|
||||
return pluginConfig !== undefined && pluginConfig.enabled;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set options for a plugin
|
||||
* @param plugin Plugin name
|
||||
* @param options Options to set
|
||||
* @param exclude Options to exclude from the options object
|
||||
*/
|
||||
export function setOptions<T>(
|
||||
plugin: string,
|
||||
options: T,
|
||||
exclude: string[] = ['enabled'],
|
||||
) {
|
||||
const plugins = store.get('plugins') as Record<string, T>;
|
||||
// HACK: This is a workaround for preventing changed options from being overwritten
|
||||
exclude.forEach((key) => {
|
||||
if (Object.prototype.hasOwnProperty.call(options, key)) {
|
||||
delete options[key as keyof T];
|
||||
}
|
||||
});
|
||||
store.set('plugins', {
|
||||
...plugins,
|
||||
[plugin]: {
|
||||
...plugins[plugin],
|
||||
...options,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
export function setMenuOptions<T>(
|
||||
plugin: string,
|
||||
options: T,
|
||||
exclude: string[] = ['enabled'],
|
||||
) {
|
||||
setOptions(plugin, options, exclude);
|
||||
if (store.get('options.restartOnConfigChanges')) {
|
||||
restart();
|
||||
}
|
||||
}
|
||||
|
||||
export function getOptions<T>(plugin: string): T {
|
||||
return (store.get('plugins') as Record<string, T>)[plugin];
|
||||
}
|
||||
|
||||
export function enable(plugin: string) {
|
||||
setMenuOptions(plugin, { enabled: true }, []);
|
||||
}
|
||||
|
||||
export function disable(plugin: string) {
|
||||
setMenuOptions(plugin, { enabled: false }, []);
|
||||
}
|
||||
|
||||
export default {
|
||||
isEnabled,
|
||||
getPlugins,
|
||||
enable,
|
||||
disable,
|
||||
setOptions,
|
||||
setMenuOptions,
|
||||
getOptions,
|
||||
};
|
||||
186
src/config/store.ts
Normal file
@ -0,0 +1,186 @@
|
||||
import Store from 'electron-store';
|
||||
import Conf from 'conf';
|
||||
|
||||
import defaults from './defaults';
|
||||
|
||||
import { DefaultPresetList, type Preset } from '@/plugins/downloader/types';
|
||||
|
||||
const migrations = {
|
||||
'>=3.0.0'(store: Conf<Record<string, unknown>>) {
|
||||
const discordConfig = store.get('plugins.discord') as Record<
|
||||
string,
|
||||
unknown
|
||||
>;
|
||||
if (discordConfig) {
|
||||
const oldActivityTimoutEnabled = store.get(
|
||||
'plugins.discord.activityTimoutEnabled',
|
||||
) as boolean | undefined;
|
||||
const oldActivityTimoutTime = store.get(
|
||||
'plugins.discord.activityTimoutTime',
|
||||
) as number | undefined;
|
||||
if (oldActivityTimoutEnabled !== undefined) {
|
||||
discordConfig.activityTimeoutEnabled = oldActivityTimoutEnabled;
|
||||
store.set('plugins.discord', discordConfig);
|
||||
}
|
||||
if (oldActivityTimoutTime !== undefined) {
|
||||
discordConfig.activityTimeoutTime = oldActivityTimoutTime;
|
||||
store.set('plugins.discord', discordConfig);
|
||||
}
|
||||
}
|
||||
},
|
||||
'>=2.1.3'(store: Conf<Record<string, unknown>>) {
|
||||
const listenAlong = store.get('plugins.discord.listenAlong');
|
||||
if (listenAlong !== undefined) {
|
||||
store.set('plugins.discord.playOnYouTubeMusic', listenAlong);
|
||||
store.delete('plugins.discord.listenAlong');
|
||||
}
|
||||
},
|
||||
'>=2.1.0'(store: Conf<Record<string, unknown>>) {
|
||||
const originalPreset = store.get('plugins.downloader.preset') as
|
||||
| string
|
||||
| undefined;
|
||||
if (originalPreset) {
|
||||
if (originalPreset !== 'opus') {
|
||||
store.set('plugins.downloader.selectedPreset', 'Custom');
|
||||
store.set('plugins.downloader.customPresetSetting', {
|
||||
extension: 'mp3',
|
||||
ffmpegArgs:
|
||||
(store.get('plugins.downloader.ffmpegArgs') as string[]) ??
|
||||
DefaultPresetList['mp3 (256kbps)'].ffmpegArgs,
|
||||
} satisfies Preset);
|
||||
} else {
|
||||
store.set('plugins.downloader.selectedPreset', 'Source');
|
||||
store.set('plugins.downloader.customPresetSetting', {
|
||||
extension: null,
|
||||
ffmpegArgs:
|
||||
(store.get('plugins.downloader.ffmpegArgs') as string[]) ?? [],
|
||||
} satisfies Preset);
|
||||
}
|
||||
store.delete('plugins.downloader.preset');
|
||||
store.delete('plugins.downloader.ffmpegArgs');
|
||||
}
|
||||
},
|
||||
'>=1.20.0'(store: Conf<Record<string, unknown>>) {
|
||||
store.delete('plugins.visualizer'); // default value is now in the plugin
|
||||
|
||||
if (store.get('plugins.notifications.toastStyle') === undefined) {
|
||||
const pluginOptions = store.get('plugins.notifications') || {};
|
||||
store.set('plugins.notifications', {
|
||||
...pluginOptions,
|
||||
});
|
||||
}
|
||||
|
||||
if (store.get('options.ForceShowLikeButtons')) {
|
||||
store.delete('options.ForceShowLikeButtons');
|
||||
store.set('options.likeButtons', 'force');
|
||||
}
|
||||
},
|
||||
'>=1.17.0'(store: Conf<Record<string, unknown>>) {
|
||||
store.delete('plugins.picture-in-picture'); // default value is now in the plugin
|
||||
|
||||
if (store.get('plugins.video-toggle.mode') === undefined) {
|
||||
store.set('plugins.video-toggle.mode', 'custom');
|
||||
}
|
||||
},
|
||||
'>=1.14.0'(store: Conf<Record<string, unknown>>) {
|
||||
if (
|
||||
typeof store.get('plugins.precise-volume.globalShortcuts') !== 'object'
|
||||
) {
|
||||
store.set('plugins.precise-volume.globalShortcuts', {});
|
||||
}
|
||||
|
||||
if (store.get('plugins.hide-video-player.enabled')) {
|
||||
store.delete('plugins.hide-video-player');
|
||||
store.set('plugins.video-toggle.enabled', true);
|
||||
}
|
||||
},
|
||||
'>=1.13.0'(store: Conf<Record<string, unknown>>) {
|
||||
if (store.get('plugins.discord.listenAlong') === undefined) {
|
||||
store.set('plugins.discord.listenAlong', true);
|
||||
}
|
||||
},
|
||||
'>=1.12.0'(store: Conf<Record<string, unknown>>) {
|
||||
const options = store.get('plugins.shortcuts') as
|
||||
| Record<
|
||||
string,
|
||||
| {
|
||||
action: string;
|
||||
shortcut: unknown;
|
||||
}[]
|
||||
| Record<string, unknown>
|
||||
>
|
||||
| undefined;
|
||||
if (options) {
|
||||
let updated = false;
|
||||
for (const optionType of ['global', 'local']) {
|
||||
if (
|
||||
Object.hasOwn(options, optionType) &&
|
||||
Array.isArray(options[optionType])
|
||||
) {
|
||||
const optionsArray = options[optionType] as {
|
||||
action: string;
|
||||
shortcut: unknown;
|
||||
}[];
|
||||
const updatedOptions: Record<string, unknown> = {};
|
||||
for (const optionObject of optionsArray) {
|
||||
if (optionObject.action && optionObject.shortcut) {
|
||||
updatedOptions[optionObject.action] = optionObject.shortcut;
|
||||
}
|
||||
}
|
||||
|
||||
options[optionType] = updatedOptions;
|
||||
updated = true;
|
||||
}
|
||||
}
|
||||
if (updated) {
|
||||
store.set('plugins.shortcuts', options);
|
||||
}
|
||||
}
|
||||
},
|
||||
'>=1.11.0'(store: Conf<Record<string, unknown>>) {
|
||||
if (store.get('options.resumeOnStart') === undefined) {
|
||||
store.set('options.resumeOnStart', true);
|
||||
}
|
||||
},
|
||||
'>=1.7.0'(store: Conf<Record<string, unknown>>) {
|
||||
const enabledPlugins = store.get('plugins') as string[];
|
||||
if (!Array.isArray(enabledPlugins)) {
|
||||
console.warn('Plugins are not in array format, cannot migrate');
|
||||
return;
|
||||
}
|
||||
|
||||
// Include custom options
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
const plugins: Record<string, any> = {
|
||||
adblocker: {
|
||||
enabled: true,
|
||||
cache: true,
|
||||
additionalBlockLists: [],
|
||||
},
|
||||
downloader: {
|
||||
enabled: false,
|
||||
ffmpegArgs: [], // E.g. ["-b:a", "192k"] for an audio bitrate of 192kb/s
|
||||
downloadFolder: undefined, // Custom download folder (absolute path)
|
||||
},
|
||||
};
|
||||
|
||||
for (const enabledPlugin of enabledPlugins) {
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
||||
plugins[enabledPlugin] = {
|
||||
...plugins[enabledPlugin],
|
||||
enabled: true,
|
||||
};
|
||||
}
|
||||
|
||||
store.set('plugins', plugins);
|
||||
},
|
||||
};
|
||||
|
||||
export default new Store({
|
||||
defaults: {
|
||||
...defaults,
|
||||
// README: 'plugin' uses deepmerge to populate the default values, so it is not necessary to include it here
|
||||
},
|
||||
clearInvalidConfig: false,
|
||||
migrations,
|
||||
});
|
||||
97
src/custom-electron-prompt.d.ts
vendored
Normal file
@ -0,0 +1,97 @@
|
||||
declare module 'custom-electron-prompt' {
|
||||
import { BrowserWindow } from 'electron';
|
||||
|
||||
export type SelectOptions = Record<string, string>;
|
||||
|
||||
export interface CounterOptions {
|
||||
minimum?: number;
|
||||
maximum?: number;
|
||||
multiFire?: boolean;
|
||||
}
|
||||
|
||||
export interface KeybindOptions {
|
||||
value: string;
|
||||
label: string;
|
||||
default?: string;
|
||||
}
|
||||
|
||||
export interface InputOptions {
|
||||
label: string;
|
||||
value: unknown;
|
||||
inputAttrs?: Partial<HTMLInputElement>;
|
||||
selectOptions?: SelectOptions;
|
||||
}
|
||||
|
||||
interface BasePromptOptions<T extends string> {
|
||||
type?: T;
|
||||
width?: number;
|
||||
height?: number;
|
||||
resizable?: boolean;
|
||||
title?: string;
|
||||
label?: string;
|
||||
buttonLabels?: {
|
||||
ok?: string;
|
||||
cancel?: string;
|
||||
};
|
||||
alwaysOnTop?: boolean;
|
||||
value?: unknown;
|
||||
icon?: string;
|
||||
useHtmlLabel?: boolean;
|
||||
customStylesheet?: string;
|
||||
menuBarVisible?: boolean;
|
||||
skipTaskbar?: boolean;
|
||||
frame?: boolean;
|
||||
customScript?: string;
|
||||
enableRemoteModule?: boolean;
|
||||
inputAttrs?: Partial<HTMLInputElement>;
|
||||
}
|
||||
|
||||
export type InputPromptOptions = BasePromptOptions<'input'>;
|
||||
export interface SelectPromptOptions extends BasePromptOptions<'select'> {
|
||||
selectOptions: SelectOptions;
|
||||
}
|
||||
export interface CounterPromptOptions extends BasePromptOptions<'counter'> {
|
||||
counterOptions: CounterOptions;
|
||||
}
|
||||
export interface MultiInputPromptOptions
|
||||
extends BasePromptOptions<'multiInput'> {
|
||||
multiInputOptions: InputOptions[];
|
||||
}
|
||||
export interface KeybindPromptOptions extends BasePromptOptions<'keybind'> {
|
||||
keybindOptions: KeybindOptions[];
|
||||
}
|
||||
|
||||
export type PromptOptions<T extends string> = T extends 'input'
|
||||
? InputPromptOptions
|
||||
: T extends 'select'
|
||||
? SelectPromptOptions
|
||||
: T extends 'counter'
|
||||
? CounterPromptOptions
|
||||
: T extends 'keybind'
|
||||
? KeybindPromptOptions
|
||||
: T extends 'multiInput'
|
||||
? MultiInputPromptOptions
|
||||
: never;
|
||||
|
||||
type PromptResult<T extends string> = T extends 'input'
|
||||
? string
|
||||
: T extends 'select'
|
||||
? string
|
||||
: T extends 'counter'
|
||||
? number
|
||||
: T extends 'keybind'
|
||||
? {
|
||||
value: string;
|
||||
accelerator: string;
|
||||
}[]
|
||||
: T extends 'multiInput'
|
||||
? string[]
|
||||
: never;
|
||||
|
||||
const prompt: <T extends Type>(
|
||||
options?: PromptOptions<T> & { type: T },
|
||||
parent?: BrowserWindow,
|
||||
) => Promise<PromptResult<T> | null>;
|
||||
|
||||
export default prompt;
|
||||
}
|
||||
50
src/error.html
Normal file
@ -0,0 +1,50 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>Cannot load YouTube Music</title>
|
||||
<style>
|
||||
body {
|
||||
background: #000;
|
||||
}
|
||||
|
||||
.container {
|
||||
margin: 0;
|
||||
font-family: Roboto, Arial, sans-serif;
|
||||
font-size: 20px;
|
||||
font-weight: 500;
|
||||
color: rgba(255, 255, 255, 0.5);
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
margin-right: -50%;
|
||||
transform: translate(-50%, -50%);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.button {
|
||||
background: #065fd4;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
color: white;
|
||||
font: inherit;
|
||||
text-transform: uppercase;
|
||||
text-decoration: none;
|
||||
border-radius: 2px;
|
||||
font-size: 16px;
|
||||
font-weight: normal;
|
||||
text-align: center;
|
||||
padding: 8px 22px;
|
||||
display: inline-block;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="container">
|
||||
<p>Cannot load YouTube Music… Internet disconnected?</p>
|
||||
<a class="button" href="#" onclick="reload()">Retry</a>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
18
src/i18n/index.ts
Normal file
@ -0,0 +1,18 @@
|
||||
import i18next, { init, t as i18t, changeLanguage } from 'i18next';
|
||||
|
||||
import { languageResources } from 'virtual:i18n';
|
||||
|
||||
export const loadI18n = async () =>
|
||||
await init({
|
||||
resources: languageResources,
|
||||
lng: 'en',
|
||||
fallbackLng: 'en',
|
||||
interpolation: {
|
||||
escapeValue: false,
|
||||
},
|
||||
});
|
||||
|
||||
export const setLanguage = async (language: string) =>
|
||||
await changeLanguage(language);
|
||||
|
||||
export const t = i18t.bind(i18next);
|
||||
11
src/i18n/resources/@types/index.ts
Normal file
@ -0,0 +1,11 @@
|
||||
export interface LanguageResources {
|
||||
[lang: string]: {
|
||||
translation: Record<string, unknown> & {
|
||||
language?: {
|
||||
name: string;
|
||||
'local-name': string;
|
||||
code: string;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
531
src/i18n/resources/cs.json
Normal file
@ -0,0 +1,531 @@
|
||||
{
|
||||
"common": {
|
||||
"console": {
|
||||
"plugins": {
|
||||
"execute-failed": "Selhalo execute pluginu {{pluginName}}::{{contextName}}",
|
||||
"executed-at-ms": "Plugin {{pluginName}}::{{contextName}} executed at {{ms}}ms",
|
||||
"initialize-failed": "Selhala initialize \"{{pluginName}}\" pluginu",
|
||||
"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"
|
||||
}
|
||||
}
|
||||
},
|
||||
"language": {
|
||||
"code": "cs",
|
||||
"local-name": "Čeština",
|
||||
"name": "Czech"
|
||||
},
|
||||
"main": {
|
||||
"console": {
|
||||
"did-finish-load": {
|
||||
"dev-tools": "Načítání dokončeno. Vývojářské nástroje se otevřely"
|
||||
},
|
||||
"i18n": {
|
||||
"loaded": "i18n načteno"
|
||||
},
|
||||
"second-instance": {
|
||||
"receive-command": "Přijmut příkaz přes protokol: \"{{command}}\""
|
||||
},
|
||||
"theme": {
|
||||
"css-file-not-found": "CSS soubor \"{{cssFile}}\" neexistuje, ignorováno"
|
||||
},
|
||||
"unresponsive": {
|
||||
"details": "Unresponsive chyba!\n{{error}}"
|
||||
},
|
||||
"when-ready": {
|
||||
"clearing-cache-after-20s": "Čištění mezipaměti aplikace"
|
||||
},
|
||||
"window": {
|
||||
"tried-to-render-offscreen": "Okno se pokusilo render na pozadí, Velikost okna ={{windowSize}}, displaySize={{displaySize}}, position={{position}}"
|
||||
}
|
||||
},
|
||||
"dialog": {
|
||||
"hide-menu-enabled": {
|
||||
"detail": "Menu je skryté, stiskněte 'Alt' k zobrazení (nebo 'Escape', pokud používáte in-app-menu)",
|
||||
"message": "Skrýt Menu je povoleno",
|
||||
"title": "Skrýt Menu Povolené"
|
||||
},
|
||||
"need-to-restart": {
|
||||
"buttons": {
|
||||
"later": "Později",
|
||||
"restart-now": "Restartovat nyní"
|
||||
},
|
||||
"detail": "\"{{pluginName}}\" plugin vyžaduje restart, aby se projevil",
|
||||
"message": "\"{{pluginName}}\" potřebuje restartovat",
|
||||
"title": "Restart vyžadován"
|
||||
},
|
||||
"unresponsive": {
|
||||
"buttons": {
|
||||
"quit": "Ukončit",
|
||||
"relaunch": "Spustit znovu",
|
||||
"wait": "Počkat"
|
||||
},
|
||||
"detail": "Omlouváme se za způsobené nepříjemnosti! prosím vyberte, co dělat:",
|
||||
"message": "Aplikace nereaguje",
|
||||
"title": "Okno nereaguje"
|
||||
},
|
||||
"update-available": {
|
||||
"buttons": {
|
||||
"disable": "Vypnout aktualizace",
|
||||
"download": "Stáhnout",
|
||||
"ok": "OK"
|
||||
},
|
||||
"detail": "Nová verze je k dispozici a lze stáhnout na {{downloadLink}}",
|
||||
"message": "Nová verze je dostupná",
|
||||
"title": "Aktualizace k dispozici"
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"about": "O Aplikaci",
|
||||
"navigation": {
|
||||
"label": "Navigace",
|
||||
"submenu": {
|
||||
"copy-current-url": "Kopírovat aktuální URL adresu",
|
||||
"go-back": "Jít zpátky",
|
||||
"go-forward": "Jít dopředu",
|
||||
"quit": "Ukončit",
|
||||
"restart": "Restartovat aplikaci"
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"label": "Možnosti",
|
||||
"submenu": {
|
||||
"advanced-options": {
|
||||
"label": "Pokročilé možnosti",
|
||||
"submenu": {
|
||||
"auto-reset-app-cache": "Při spuštění aplikace, se resetuje její mezipaměť",
|
||||
"disable-hardware-acceleration": "Vypnout hardware zrychlení",
|
||||
"edit-config-json": "Upravit config.json",
|
||||
"override-user-agent": "Přepsat User-Agent",
|
||||
"restart-on-config-changes": "Restartovat na změny v konfiguraci",
|
||||
"set-proxy": {
|
||||
"label": "Nastavit proxy",
|
||||
"prompt": {
|
||||
"label": "Zadejte adresu proxy: (nechejte prázdné to disable)",
|
||||
"placeholder": "Příklad: socks5://127.0.0.1:9999",
|
||||
"title": "Nastavit proxy"
|
||||
}
|
||||
},
|
||||
"toggle-dev-tools": "Toggle Vývojářské nástroje"
|
||||
}
|
||||
},
|
||||
"always-on-top": "Vždy na vrchu",
|
||||
"auto-update": "Automatické aktualizace",
|
||||
"hide-menu": {
|
||||
"dialog": {
|
||||
"message": "Menu bude skryto na dalším launch, use [Alt] to show it (nebo backtick [`] pokud používáte in-app-menu)",
|
||||
"title": "Skrýt Menu Povoleno"
|
||||
},
|
||||
"label": "Skrýt menu"
|
||||
},
|
||||
"language": {
|
||||
"dialog": {
|
||||
"message": "Jazyk bude změněn po restartu",
|
||||
"title": "Jazyk změněn"
|
||||
},
|
||||
"label": "Jazyk",
|
||||
"submenu": {
|
||||
"to-help-translate": "Chcete pomoc s překladem? Klikněte zde"
|
||||
}
|
||||
},
|
||||
"resume-on-start": "Resume poslední písničku při spuštění aplikace",
|
||||
"single-instance-lock": "Zámek pro jednu instanci",
|
||||
"starting-page": {
|
||||
"label": "Úvodní stránka",
|
||||
"unset": "Nenastaveno"
|
||||
},
|
||||
"tray": {
|
||||
"submenu": {
|
||||
"disabled": "Vypnuté",
|
||||
"enabled-and-hide-app": "Povolit a skrýt aplikaci",
|
||||
"enabled-and-show-app": "Enabled a show aplikaci",
|
||||
"play-pause-on-click": "Přehrát/Pozastavit na kliknutí"
|
||||
}
|
||||
},
|
||||
"visual-tweaks": {
|
||||
"label": "Vzhledové vylepšení",
|
||||
"submenu": {
|
||||
"like-buttons": {
|
||||
"default": "Výchozí",
|
||||
"force-show": "Vynutit show",
|
||||
"hide": "Schovat",
|
||||
"label": "Like tlačítka"
|
||||
},
|
||||
"remove-upgrade-button": "Odebrat upgrade tlačítko",
|
||||
"theme": {
|
||||
"label": "Motiv",
|
||||
"submenu": {
|
||||
"import-css-file": "Import vlastní CSS soubor",
|
||||
"no-theme": "Žádný motiv"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"enabled": "Povoleno",
|
||||
"label": "Pluginy"
|
||||
},
|
||||
"view": {
|
||||
"label": "Zobrazení",
|
||||
"submenu": {
|
||||
"force-reload": "Vynutit znovu načtení",
|
||||
"reload": "Obnovit",
|
||||
"reset-zoom": "Actual velikost",
|
||||
"toggle-fullscreen": "Přepnout režim celé obrazovky",
|
||||
"zoom-in": "Přiblížit",
|
||||
"zoom-out": "Oddálit"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tray": {
|
||||
"next": "Další",
|
||||
"play-pause": "Přehrát/Pozastavit",
|
||||
"previous": "Minulý",
|
||||
"quit": "Ukončit",
|
||||
"restart": "Restartovat aplikaci",
|
||||
"show": "Ukázat okno"
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"adblocker": {
|
||||
"description": "Blokuje všechny reklamy a sledování ihned od začátku",
|
||||
"menu": {
|
||||
"blocker": "Blokátor"
|
||||
},
|
||||
"name": "Blokovač reklam"
|
||||
},
|
||||
"album-color-theme": {
|
||||
"description": "Použije dynamický motiv a vizuální efekty na základě palety barev alba",
|
||||
"name": "Motiv podle barvy Alba"
|
||||
},
|
||||
"ambient-mode": {
|
||||
"description": "Applies a lighting efekty pomocí casting gentle barvy z videa, do vašeho screen’s pozadí.",
|
||||
"menu": {
|
||||
"blur-amount": {
|
||||
"submenu": {
|
||||
"pixels": "{{blurAmount}} pixelů"
|
||||
}
|
||||
},
|
||||
"buffer": {
|
||||
"label": "Vyrovnávací paměť",
|
||||
"submenu": {
|
||||
"buffer": "{{buffer}}"
|
||||
}
|
||||
},
|
||||
"opacity": {
|
||||
"label": "Neprůhlednost",
|
||||
"submenu": {
|
||||
"percent": "{{opacity}}%"
|
||||
}
|
||||
},
|
||||
"quality": {
|
||||
"label": "Kvalita",
|
||||
"submenu": {
|
||||
"pixels": "{{quality}} pixelů"
|
||||
}
|
||||
},
|
||||
"size": {
|
||||
"label": "Velikost",
|
||||
"submenu": {
|
||||
"percent": "{{size}}%"
|
||||
}
|
||||
},
|
||||
"smoothness-transition": {
|
||||
"label": "Plynulý přechod",
|
||||
"submenu": {
|
||||
"during": "Během {{interpolationTime}}s"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Ambientní režim"
|
||||
},
|
||||
"audio-compressor": {
|
||||
"name": "Audio kompresor"
|
||||
},
|
||||
"blur-nav-bar": {
|
||||
"description": "Udělá navigační panel průhledným a rozmazaným",
|
||||
"name": "Rozmazaný navigační Bar"
|
||||
},
|
||||
"bypass-age-restrictions": {
|
||||
"description": "Obejít ověření věku na YouTube",
|
||||
"name": "Obejít věková omezení"
|
||||
},
|
||||
"captions-selector": {
|
||||
"description": "Titulkový selector pro zvukové stopy v YouTube Music",
|
||||
"menu": {
|
||||
"autoload": "Automaticky vybrat naposledy použité titulky",
|
||||
"disable-captions": "Žádné titulky ve vychozím nastavení"
|
||||
},
|
||||
"name": "Titulkový selector",
|
||||
"prompt": {
|
||||
"selector": {
|
||||
"label": "Aktuální jazyk titulků: {{language}}",
|
||||
"none": "Žádný",
|
||||
"title": "Vybrat jazyk titulků"
|
||||
}
|
||||
},
|
||||
"templates": {
|
||||
"title": "Otevřít titulový selector"
|
||||
}
|
||||
},
|
||||
"compact-sidebar": {
|
||||
"description": "Vždy set the sidebar v kompaktním režimu",
|
||||
"name": "Kompaktní Sidebar"
|
||||
},
|
||||
"crossfade": {
|
||||
"description": "Crossfade mezi písničkami",
|
||||
"menu": {
|
||||
"advanced": "Pokročilý"
|
||||
},
|
||||
"name": "Prolínání [beta]",
|
||||
"prompt": {
|
||||
"options": {
|
||||
"multi-input": {
|
||||
"fade-scaling": {
|
||||
"linear": "Lineární",
|
||||
"logarithmic": "Logaritmické"
|
||||
},
|
||||
"seconds-before-end": "Crossfade N sekund před koncem"
|
||||
},
|
||||
"title": "Možnosti prolínání"
|
||||
}
|
||||
}
|
||||
},
|
||||
"disable-autoplay": {
|
||||
"menu": {
|
||||
"apply-once": "Applies jenom na spuštění aplikace"
|
||||
},
|
||||
"name": "Zrušit automatické přehrávání"
|
||||
},
|
||||
"discord": {
|
||||
"backend": {
|
||||
"connected": "Připojeno k Discordu",
|
||||
"disconnected": "Odpojeno od Discordu"
|
||||
},
|
||||
"description": "Ukažte svým přátelům, co posloucháte s Rich Presence",
|
||||
"menu": {
|
||||
"connected": "Připojeno",
|
||||
"disconnected": "Odpojeno",
|
||||
"hide-github-button": "Skrýt tlačítko s odkazem na GitHub",
|
||||
"play-on-youtube-music": "Hrát na YouTube Music"
|
||||
},
|
||||
"prompt": {
|
||||
"set-inactivity-timeout": {
|
||||
"label": "Zadejte inactivity timeout v sekundách:"
|
||||
}
|
||||
}
|
||||
},
|
||||
"downloader": {
|
||||
"backend": {
|
||||
"dialog": {
|
||||
"error": {
|
||||
"buttons": {
|
||||
"ok": "OK"
|
||||
},
|
||||
"message": "Argh! Omlouvám se, stáhnutí selhalo…",
|
||||
"title": "Chyba ve stáhování!"
|
||||
},
|
||||
"start-download-playlist": {
|
||||
"buttons": {
|
||||
"ok": "OK"
|
||||
},
|
||||
"detail": "({{playlistSize}} písničky)",
|
||||
"message": "Stahování seznamu skladeb {{playlistTitle}}",
|
||||
"title": "Stahování začalo"
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"done": "Hotovo: {{filePath}}",
|
||||
"download-info": "Stahování {{artist}} - {{title}} [{{videoId}}",
|
||||
"download-progress": "Stahování: {{percent}}%",
|
||||
"downloading": "Stahování…",
|
||||
"downloading-counter": "Stahování {{current}}/{{total}}…",
|
||||
"downloading-playlist": "Stahování seznamu skladeb \"{{playlistTitle}}\" - {{playlistSize}} písničky ({{playlistId}})",
|
||||
"error-while-downloading": "Chyba při stahování \"{{author}} - {{title}}\": {{error}}",
|
||||
"folder-already-exists": "Složka {{playlistFolder}} již existuje",
|
||||
"getting-playlist-info": "Getting informace o seznamu skladeb…",
|
||||
"loading": "Načítání…",
|
||||
"playlist-has-only-one-song": "Seznam skladeb má pouze jednu položku, downloading it directly",
|
||||
"playlist-id-not-found": "Žádné ID seznamu skladeb nenalezeno",
|
||||
"playlist-is-empty": "Seznam skladeb je prázdný",
|
||||
"preparing-file": "Připravování souboru…",
|
||||
"saving": "Ukládání…",
|
||||
"trying-to-get-playlist-id": "Trying to get ID seznamu skladeb: {{playlistId}}",
|
||||
"video-id-not-found": "Video nebylo nalezeno"
|
||||
}
|
||||
},
|
||||
"description": "Stahuje MP3 / source audio přímo z rozhraní",
|
||||
"menu": {
|
||||
"choose-download-folder": "Vybrat download složku",
|
||||
"download-playlist": "Stáhnout seznam skladeb",
|
||||
"skip-existing": "Přeskočit existující soubory"
|
||||
},
|
||||
"name": "Stahovač",
|
||||
"templates": {
|
||||
"button": "Stáhnout"
|
||||
}
|
||||
},
|
||||
"exponential-volume": {
|
||||
"name": "Exponenciální hlasitost"
|
||||
},
|
||||
"in-app-menu": {
|
||||
"description": "Dává menu-bars a fancy, tmavý nebo album-color vzhled"
|
||||
},
|
||||
"last-fm": {
|
||||
"description": "Přidat scrobbling podporu pro Last.fm",
|
||||
"name": "Last.fm"
|
||||
},
|
||||
"lumiastream": {
|
||||
"description": "Přidává Lumia Stream podporu"
|
||||
},
|
||||
"lyrics-genius": {
|
||||
"description": "Přidat lyrics podporu pro většinu písniček",
|
||||
"renderer": {
|
||||
"fetched-lyrics": "Fetched lyrics pro Genius"
|
||||
}
|
||||
},
|
||||
"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"
|
||||
},
|
||||
"no-google-login": {
|
||||
"description": "Odstranit Google login tlačítka a odkazy z rozhraní",
|
||||
"name": "Žádné Google přihlášení"
|
||||
},
|
||||
"notifications": {
|
||||
"description": "Display oznámení when a písnička starts hraje (interactive notifications are available on Windows)",
|
||||
"menu": {
|
||||
"interactive": "Interaktivní oznámení",
|
||||
"interactive-settings": {
|
||||
"label": "Interactive Nastavení",
|
||||
"submenu": {
|
||||
"hide-button-text": "Skrýt text tlačítka",
|
||||
"refresh-on-play-pause": "Refresh na Přehrát/Pozastavit",
|
||||
"tray-controls": "Otevřít/Zavřít on tray click"
|
||||
}
|
||||
},
|
||||
"priority": "Priorita Oznámení",
|
||||
"unpause-notification": "Zobrazit oznámení na unpause"
|
||||
},
|
||||
"name": "Oznámení"
|
||||
},
|
||||
"picture-in-picture": {
|
||||
"menu": {
|
||||
"always-on-top": "Vždy na vrchu",
|
||||
"hotkey": {
|
||||
"label": "Klávesová zkratka",
|
||||
"prompt": {
|
||||
"keybind-options": {
|
||||
"hotkey": "Klávesová zkratka"
|
||||
},
|
||||
"label": "Vybrat klávesovou zkratku pro toggle obrázek v obrázku",
|
||||
"title": "Obrázek v obrázku klávesová zkratka"
|
||||
}
|
||||
},
|
||||
"save-window-position": "Uložit pozici okna",
|
||||
"save-window-size": "Uložit velikost okna",
|
||||
"use-native-pip": "Použít browser native PiP"
|
||||
},
|
||||
"name": "Obrázek v obrázku",
|
||||
"templates": {
|
||||
"button": "Obrázek v obrázku"
|
||||
}
|
||||
},
|
||||
"playback-speed": {
|
||||
"description": "Posloiuchej rychle, poslouchej pomalu! Adds a slider, který kontroluje rychlost písníčky",
|
||||
"name": "Rychlost přehrávání",
|
||||
"templates": {
|
||||
"button": "Rychlost"
|
||||
}
|
||||
},
|
||||
"precise-volume": {
|
||||
"menu": {
|
||||
"global-shortcuts": "Globální klávesové zkratky"
|
||||
},
|
||||
"name": "Přesná hlasitost",
|
||||
"prompt": {
|
||||
"global-shortcuts": {
|
||||
"keybind-options": {
|
||||
"decrease": "Snížit hlasitost",
|
||||
"increase": "Zvýšit hlasitost"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"quality-changer": {
|
||||
"backend": {
|
||||
"dialog": {
|
||||
"quality-changer": {
|
||||
"detail": "Aktuální kvalita: {{quality}}",
|
||||
"message": "Vybrat kvalitu videa:",
|
||||
"title": "Vybrat kvalitu videa"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"shortcuts": {
|
||||
"menu": {
|
||||
"override-media-keys": "Přepsat Media Keys"
|
||||
},
|
||||
"name": "Zkratky (& MPRIS)",
|
||||
"prompt": {
|
||||
"keybind": {
|
||||
"keybind-options": {
|
||||
"next": "Další",
|
||||
"play-pause": "Přehrát / Pozastavit",
|
||||
"previous": "Předchozí"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"skip-silences": {
|
||||
"description": "Automaticky přeskakovat tichá místa v písničkách",
|
||||
"name": "Přeskočit Tichá místa"
|
||||
},
|
||||
"sponsorblock": {
|
||||
"description": "Automaticky přeskakuje non-music části jako intro/outro nebo části of music videos, kde nehraje písnčka"
|
||||
},
|
||||
"taskbar-mediacontrol": {
|
||||
"description": "Ovládejte přehrávání z vašeho hlavního panelu Windows",
|
||||
"name": "Hlavní panel Media Control"
|
||||
},
|
||||
"touchbar": {
|
||||
"description": "Přidává Touch Bar widget pro macOS uživatele",
|
||||
"name": "Touch Bar"
|
||||
},
|
||||
"tuna-obs": {
|
||||
"description": "Integrace s OBS's plugin Tuna"
|
||||
},
|
||||
"video-toggle": {
|
||||
"description": "Přidává tlačítko switch mezi videem/písničkou mode. Může také optionally remove celou video kartu",
|
||||
"menu": {
|
||||
"align": {
|
||||
"label": "Zarovnání",
|
||||
"submenu": {
|
||||
"left": "Vlevo",
|
||||
"middle": "Uprostřed",
|
||||
"right": "Pravo"
|
||||
}
|
||||
},
|
||||
"force-hide": "Vynutit odstranění karty videa",
|
||||
"mode": {
|
||||
"label": "Režim"
|
||||
}
|
||||
},
|
||||
"templates": {
|
||||
"button": "Písnička"
|
||||
}
|
||||
},
|
||||
"visualizer": {
|
||||
"description": "Přidá vizualizér do přehrávače",
|
||||
"menu": {
|
||||
"visualizer-type": "Typ vizualizéru"
|
||||
},
|
||||
"name": "Vizualizér"
|
||||
}
|
||||
}
|
||||
}
|
||||
598
src/i18n/resources/de.json
Normal file
@ -0,0 +1,598 @@
|
||||
{
|
||||
"common": {
|
||||
"console": {
|
||||
"plugins": {
|
||||
"execute-failed": "Erweiterung {{pluginName}}::{{contextName}} konnte nicht ausgeführt werden",
|
||||
"executed-at-ms": "Erweiterung {{pluginName}}::{{contextName}} ausgeführt in {{ms}}ms",
|
||||
"initialize-failed": "Initialisierung der Erweiterung \"{{pluginName}}\" fehlgeschlagen",
|
||||
"load-all": "Lade alle Erweiterungen",
|
||||
"load-failed": "Laden der Erweiterung \"{{pluginName}}\" fehlgeschlagen",
|
||||
"loaded": "Erweiterung \"{{pluginName}}\" geladen",
|
||||
"unload-failed": "Entladen der Erweiterung \"{{pluginName}}\" fehlgeschlagen",
|
||||
"unloaded": "Erweiterung \"{{pluginName}}\" entladen"
|
||||
}
|
||||
}
|
||||
},
|
||||
"language": {
|
||||
"code": "de",
|
||||
"local-name": "Deutsch",
|
||||
"name": "German"
|
||||
},
|
||||
"main": {
|
||||
"console": {
|
||||
"did-finish-load": {
|
||||
"dev-tools": "Laden fertiggestellt. Entwicklerwerkzeuge geöffnet"
|
||||
},
|
||||
"i18n": {
|
||||
"loaded": "i18n geladen"
|
||||
},
|
||||
"second-instance": {
|
||||
"receive-command": "Befehl über Protokoll empfangen: \"{{command}}\""
|
||||
},
|
||||
"theme": {
|
||||
"css-file-not-found": "CSS-Datei \"{{cssFile}}\" existiert nicht, ignoriere"
|
||||
},
|
||||
"unresponsive": {
|
||||
"details": "Nicht reagierender Fehler!\n{{error}}"
|
||||
},
|
||||
"when-ready": {
|
||||
"clearing-cache-after-20s": "Leere Anwendungscache"
|
||||
},
|
||||
"window": {
|
||||
"tried-to-render-offscreen": "Fenster vesucht außerhalb des Bildschirms zu rendern, windowSize={{windowSize}}, displaySize={{displaySize}}, position={{position}}"
|
||||
}
|
||||
},
|
||||
"dialog": {
|
||||
"hide-menu-enabled": {
|
||||
"detail": "Das Menü ist versteckt, nutze 'Alt', um es zu aufzurufen (oder 'Escape' beim Verwenden des In-App-Menüs)",
|
||||
"message": "Menü verstecken ist aktiviert",
|
||||
"title": "Menü Verstecken Aktiviert"
|
||||
},
|
||||
"need-to-restart": {
|
||||
"buttons": {
|
||||
"later": "Später",
|
||||
"restart-now": "Jetzt neustarten"
|
||||
},
|
||||
"detail": "\"{{pluginName}}\"-Erweiterung erfordert einen Neustart, um in Kraft zu treten",
|
||||
"message": "\"{{pluginName}}\" muss neugestartet werden",
|
||||
"title": "Neustart Erforderlich"
|
||||
},
|
||||
"unresponsive": {
|
||||
"buttons": {
|
||||
"quit": "Verlassen",
|
||||
"relaunch": "Neustarten",
|
||||
"wait": "Warten"
|
||||
},
|
||||
"detail": "Wir entschuldigen uns für die Unannehmlichkeiten! Bitte entscheide, was du tun möchtest:",
|
||||
"message": "Die Anwendung reagiert nicht",
|
||||
"title": "Fenster reagiert nicht"
|
||||
},
|
||||
"update-available": {
|
||||
"buttons": {
|
||||
"disable": "Aktualisierungen deaktivieren",
|
||||
"download": "Herunterladen",
|
||||
"ok": "OK"
|
||||
},
|
||||
"detail": "Eine neue Version ist verfügbar und kann unter {{downloadLink}} heruntergeladen werden",
|
||||
"message": "Eine neue Version ist verfügbar",
|
||||
"title": "Aktualisierung Verfügbar"
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"about": "Über",
|
||||
"navigation": {
|
||||
"label": "Navigation",
|
||||
"submenu": {
|
||||
"copy-current-url": "Aktuelle URL kopieren",
|
||||
"go-back": "Zurück gehen",
|
||||
"go-forward": "Vorwärts gehen",
|
||||
"quit": "Beenden",
|
||||
"restart": "Anwendung Neustarten"
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"label": "Einstellungen",
|
||||
"submenu": {
|
||||
"advanced-options": {
|
||||
"label": "Erweiterte Einstellungen",
|
||||
"submenu": {
|
||||
"auto-reset-app-cache": "Anwendungscache beim Start der Anwendung zurücksetzen",
|
||||
"disable-hardware-acceleration": "Hardware-Beschleunigung deaktivieren",
|
||||
"edit-config-json": "config.json ändern",
|
||||
"override-user-agent": "User-Agent außer Kraft setzen",
|
||||
"restart-on-config-changes": "Neustarten bei Änderungen der Konfiguration",
|
||||
"set-proxy": {
|
||||
"label": "Proxy setzen",
|
||||
"prompt": {
|
||||
"label": "Proxy-Adresse eingeben: (leer lassen zum Ausschalten)",
|
||||
"placeholder": "Beispiel: SOCKS5://127.0.0.1:9999",
|
||||
"title": "Proxy setzen"
|
||||
}
|
||||
},
|
||||
"toggle-dev-tools": "Entwicklerwerkzeuge umschalten"
|
||||
}
|
||||
},
|
||||
"always-on-top": "Immer im Vordergrund",
|
||||
"auto-update": "Automatisch Aktualisieren",
|
||||
"hide-menu": {
|
||||
"dialog": {
|
||||
"message": "Menü wird beim nächsten Start versteckt, verwende [Alt], um es zu zeigen (oder Backtick [`], wenn du das In-App-Menü benutzt)",
|
||||
"title": "Menü Verstecken Aktiviert"
|
||||
},
|
||||
"label": "Menü Verstecken"
|
||||
},
|
||||
"language": {
|
||||
"dialog": {
|
||||
"message": "Sprache wird nach Neustart geändert",
|
||||
"title": "Sprache Geändert"
|
||||
},
|
||||
"label": "Sprache",
|
||||
"submenu": {
|
||||
"to-help-translate": "Willst du beim Übersetzen helfen? Klicke hier"
|
||||
}
|
||||
},
|
||||
"resume-on-start": "Letztes Lied weiter abspielen, wenn Anwendung startet",
|
||||
"single-instance-lock": "Sperren einer einzelnen Instanz",
|
||||
"start-at-login": "Start beim Einschalten",
|
||||
"starting-page": {
|
||||
"label": "Startseite",
|
||||
"unset": "Ungesetzt"
|
||||
},
|
||||
"tray": {
|
||||
"label": "Tray",
|
||||
"submenu": {
|
||||
"disabled": "Deaktiviert",
|
||||
"enabled-and-hide-app": "Aktiviert und verstecke Anwendung",
|
||||
"enabled-and-show-app": "Aktiviert und zeige Anwendung",
|
||||
"play-pause-on-click": "Abspielen/Pausieren durch Klick"
|
||||
}
|
||||
},
|
||||
"visual-tweaks": {
|
||||
"label": "Visuelle Optimierungen",
|
||||
"submenu": {
|
||||
"like-buttons": {
|
||||
"default": "Standard",
|
||||
"force-show": "Zeigen erzwungen",
|
||||
"hide": "Versteckt",
|
||||
"label": "Gefällt mir-Knopf"
|
||||
},
|
||||
"remove-upgrade-button": "Upgrade-Schaltfläche entfernen",
|
||||
"theme": {
|
||||
"label": "Thema",
|
||||
"submenu": {
|
||||
"import-css-file": "Importiere eigene CSS-Datei",
|
||||
"no-theme": "Kein Thema"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"enabled": "Aktiviert",
|
||||
"label": "Erweiterungen"
|
||||
},
|
||||
"view": {
|
||||
"label": "Ansicht",
|
||||
"submenu": {
|
||||
"force-reload": "Neuladen erzwingen",
|
||||
"reload": "Neu laden",
|
||||
"reset-zoom": "Tatsächliche Größe",
|
||||
"toggle-fullscreen": "Vollbild umschalten",
|
||||
"zoom-in": "Vergrößern",
|
||||
"zoom-out": "Verkleinern"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tray": {
|
||||
"next": "Nächstes",
|
||||
"play-pause": "Weiter/Pause",
|
||||
"previous": "Vorheriges",
|
||||
"quit": "Beenden",
|
||||
"restart": "Anwendung neu starten",
|
||||
"show": "Fenster anzeigen"
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"adblocker": {
|
||||
"description": "Blockiere jegliche Werbung und Tracker",
|
||||
"menu": {
|
||||
"blocker": "Abfangmethode"
|
||||
},
|
||||
"name": "Werbeblocker"
|
||||
},
|
||||
"album-color-theme": {
|
||||
"description": "Wendet ein dynamisches Farbthema und visuelle Effekte auf Basis der Farbpalette des Albumcovers an",
|
||||
"name": "Thema aus Albumfarbe"
|
||||
},
|
||||
"ambient-mode": {
|
||||
"description": "Fügt einen Lichteffekt durch sanftes Abstreifen der Farben des Videos in deinen Bildschirmhintergrund hinzu.",
|
||||
"menu": {
|
||||
"blur-amount": {
|
||||
"label": "Unschärfemenge",
|
||||
"submenu": {
|
||||
"pixels": "{{blurAmount}} Pixel"
|
||||
}
|
||||
},
|
||||
"buffer": {
|
||||
"label": "Puffer",
|
||||
"submenu": {
|
||||
"buffer": "{{buffer}}"
|
||||
}
|
||||
},
|
||||
"opacity": {
|
||||
"label": "Durchsichtigkeit",
|
||||
"submenu": {
|
||||
"percent": "{{opacity}}%"
|
||||
}
|
||||
},
|
||||
"quality": {
|
||||
"label": "Qualität",
|
||||
"submenu": {
|
||||
"pixels": "{{quality}} Pixel"
|
||||
}
|
||||
},
|
||||
"size": {
|
||||
"label": "Größe",
|
||||
"submenu": {
|
||||
"percent": "{{size}}%"
|
||||
}
|
||||
},
|
||||
"smoothness-transition": {
|
||||
"label": "Glatter Übergang",
|
||||
"submenu": {
|
||||
"during": "Während {{interpolationTime}}s"
|
||||
}
|
||||
},
|
||||
"use-fullscreen": {
|
||||
"label": "Vollbild nutzen"
|
||||
}
|
||||
},
|
||||
"name": "Ambiente-Modus"
|
||||
},
|
||||
"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"
|
||||
},
|
||||
"blur-nav-bar": {
|
||||
"description": "Macht Navigationsleiste durchsichtig und unscharf",
|
||||
"name": "Verschwommene Navigationsleiste"
|
||||
},
|
||||
"bypass-age-restrictions": {
|
||||
"description": "Youtubes Altersbestätigung umgehen",
|
||||
"name": "Altersbeschränkungen umgehen"
|
||||
},
|
||||
"captions-selector": {
|
||||
"description": "Untertitelwähler für YouTube Music-Audio-Lieder",
|
||||
"menu": {
|
||||
"autoload": "Wähle automatisch den zuletzt verwendeten Untertitel",
|
||||
"disable-captions": "Standartmäßig keine Untertitel"
|
||||
},
|
||||
"name": "Untertitelwähler",
|
||||
"prompt": {
|
||||
"selector": {
|
||||
"label": "Aktuelle Untertitelsprache: {{language}}",
|
||||
"none": "Keine",
|
||||
"title": "Wähle Untertitelsprache"
|
||||
}
|
||||
},
|
||||
"templates": {
|
||||
"title": "Untertitelwähler öffnen"
|
||||
}
|
||||
},
|
||||
"compact-sidebar": {
|
||||
"description": "Seitenleiste immer in den kompakten Modus setzen",
|
||||
"name": "Kompakte Seitenleiste"
|
||||
},
|
||||
"crossfade": {
|
||||
"description": "Übergang zwischen Liedern",
|
||||
"menu": {
|
||||
"advanced": "Erweitert"
|
||||
},
|
||||
"name": "Übergang [Beta]",
|
||||
"prompt": {
|
||||
"options": {
|
||||
"multi-input": {
|
||||
"fade-in-duration": "Einblendezeit (Millisekunden)",
|
||||
"fade-out-duration": "Ausblendezeit (Millisekunden)",
|
||||
"fade-scaling": {
|
||||
"label": "Übergangsskalierung",
|
||||
"linear": "Linear",
|
||||
"logarithmic": "Logarithmisch"
|
||||
},
|
||||
"seconds-before-end": "Übergang N Sekunden vor dem Ende starten"
|
||||
},
|
||||
"title": "Übergangseinstellungen"
|
||||
}
|
||||
}
|
||||
},
|
||||
"disable-autoplay": {
|
||||
"description": "Startet Lied im pausierten Modus",
|
||||
"menu": {
|
||||
"apply-once": "Nur beim Start der Anwendung anwenden"
|
||||
},
|
||||
"name": "Deaktiviere automatisches Abspielen"
|
||||
},
|
||||
"discord": {
|
||||
"backend": {
|
||||
"already-connected": "Verbindungsaufbau bei aktiver Verbindung versucht",
|
||||
"connected": "Mit Discord verbunden",
|
||||
"disconnected": "Verbindung zu Discord getrennt"
|
||||
},
|
||||
"description": "Zeige deinen Freunden, was du hörst mit Discords Aktivitätsstatus",
|
||||
"menu": {
|
||||
"auto-reconnect": "Automatisch erneut verbinden",
|
||||
"clear-activity": "Aktivität leeren",
|
||||
"clear-activity-after-timeout": "Aktivität nach Timeout leeren",
|
||||
"connected": "Verbunden",
|
||||
"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"
|
||||
},
|
||||
"name": "Discords Aktivitätsstatus",
|
||||
"prompt": {
|
||||
"set-inactivity-timeout": {
|
||||
"label": "Inaktivitätstimeout in Sekunden eingeben:",
|
||||
"title": "Inaktivitätstimeout setzen"
|
||||
}
|
||||
}
|
||||
},
|
||||
"downloader": {
|
||||
"backend": {
|
||||
"dialog": {
|
||||
"error": {
|
||||
"buttons": {
|
||||
"ok": "OK"
|
||||
},
|
||||
"message": "Argh! Entschuldigung, herunterladen fehlgeschlagen…",
|
||||
"title": "Fehler beim Herunterladen!"
|
||||
},
|
||||
"start-download-playlist": {
|
||||
"buttons": {
|
||||
"ok": "OK"
|
||||
},
|
||||
"detail": "({{playlistSize}} Lieder)",
|
||||
"message": "Lade Playlist {{playlistTitle}} herunter",
|
||||
"title": "Download begonnen"
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"conversion-progress": "Konvertieren: {{percent}}%",
|
||||
"converting": "Konvertiere…",
|
||||
"done": "Abgeschlossen: {{filePath}}",
|
||||
"download-info": "Lade {{artist}} - {{title}} [{{videoId}} herunter",
|
||||
"download-progress": "Herunterladen: {{percent}}%",
|
||||
"downloading": "Lade herunter…",
|
||||
"downloading-counter": "Lade herunter {{current}}/{{total}}…",
|
||||
"downloading-playlist": "Lade Playlist \"{{playlistTitle}}\" herunter - {{playlistSize}} Lieder ({{playlistId}})",
|
||||
"error-while-downloading": "Fehler beim Herunterladen \"{{author}} - {{title}}\": {{error}}",
|
||||
"folder-already-exists": "Der Ordner {{playlistFolder}} existiert bereits",
|
||||
"getting-playlist-info": "Hole Playlist-Informationen…",
|
||||
"loading": "Lade…",
|
||||
"playlist-has-only-one-song": "Playlist hat nur ein Element, wird direkt heruntergeladen",
|
||||
"playlist-id-not-found": "Keine Playlist-ID gefunden",
|
||||
"playlist-is-empty": "Playlist ist leer",
|
||||
"playlist-is-mix-or-private": "Fehler beim Sammeln der Playlist-Informationen: stelle sicher, dass es keine private oder \"Mixed for you\"-Playlist ist\n\n{{error}}",
|
||||
"preparing-file": "Bereite Datei vor…",
|
||||
"saving": "Speichere…",
|
||||
"trying-to-get-playlist-id": "Versuche Playlist-ID zu bekommen: {{playlistId}}",
|
||||
"video-id-not-found": "Video nicht gefunden",
|
||||
"writing-id3": "Schreibe ID3 tags…"
|
||||
}
|
||||
},
|
||||
"description": "Lädt MP3-/Original-Audio direkt von der Schnittstelle herunter",
|
||||
"menu": {
|
||||
"choose-download-folder": "Downloadordner wählen",
|
||||
"download-playlist": "Wiedergabeliste herunterladen",
|
||||
"presets": "Voreinstellungen",
|
||||
"skip-existing": "Vorhandene Dateien überspringen"
|
||||
},
|
||||
"name": "Downloader",
|
||||
"renderer": {
|
||||
"can-not-update-progress": "Fortschritt kann nicht aktualisiert werden"
|
||||
},
|
||||
"templates": {
|
||||
"button": "Herunterladen"
|
||||
}
|
||||
},
|
||||
"exponential-volume": {
|
||||
"description": "Macht den Lautstärkeregler exponentiell, damit es einfacher ist leise Lautstärken zu wählen.",
|
||||
"name": "Exponentielle Lautstärke"
|
||||
},
|
||||
"in-app-menu": {
|
||||
"description": "Verleiht den Menüleisten ein schickes, dunkles oder albumfarbenes Aussehen",
|
||||
"menu": {
|
||||
"hide-dom-window-controls": "DOM-Fenster-Steuerelemente ausblenden"
|
||||
},
|
||||
"name": "In-App Menü"
|
||||
},
|
||||
"last-fm": {
|
||||
"description": "Scrobbling-Unterstützung für Last.fm hinzufügen",
|
||||
"name": "Last.fm"
|
||||
},
|
||||
"lumiastream": {
|
||||
"description": "Fügt Unterstützung für Lumia Stream hinzu",
|
||||
"name": "Lumia Stream [Beta]"
|
||||
},
|
||||
"lyrics-genius": {
|
||||
"description": "Für Songtextunterstützung für die meisten Lieder hinzu",
|
||||
"menu": {
|
||||
"romanized-lyrics": "Romanisierte Songtexte"
|
||||
},
|
||||
"name": "Liedtexte von Genius",
|
||||
"renderer": {
|
||||
"fetched-lyrics": "Liedtexte für Genius abgerufen"
|
||||
}
|
||||
},
|
||||
"navigation": {
|
||||
"description": "Vorwärts/Zurück Navigationspfeile direkt in die Oberfläche integriert - wie in deinem geliebten Browser",
|
||||
"name": "Navigation"
|
||||
},
|
||||
"no-google-login": {
|
||||
"description": "Googles Anmelden-Knöpfe und -Links von der Oberfläche entfernen",
|
||||
"name": "Keine Google-Anmeldung"
|
||||
},
|
||||
"notifications": {
|
||||
"description": "Zeige eine Benachrichtigung, wenn ein Lied beginnt zu spielen (interaktive Benachrichtigungen sind unter Windows verfügbar)",
|
||||
"menu": {
|
||||
"interactive": "Interaktive Benachrichtigungen",
|
||||
"interactive-settings": {
|
||||
"label": "Interaktivitätseinstellungen",
|
||||
"submenu": {
|
||||
"hide-button-text": "Text der Knöpfe verstecken",
|
||||
"refresh-on-play-pause": "Aktualisieren bei Wiedergabe/Pause",
|
||||
"tray-controls": "Öffnen/Schließen beim Klicken des Tray-Icons"
|
||||
}
|
||||
},
|
||||
"priority": "Benachrichtigungspriorität",
|
||||
"toast-style": "Toast-Stil",
|
||||
"unpause-notification": "Benachrichtigungen beim Pausieren anzeigen"
|
||||
},
|
||||
"name": "Benachrichtigungen"
|
||||
},
|
||||
"picture-in-picture": {
|
||||
"description": "Erlaubt die App in den Bild-im-Bild-Modus zu wechseln",
|
||||
"menu": {
|
||||
"always-on-top": "Immer im Vordergrund",
|
||||
"hotkey": {
|
||||
"label": "Tastenkürzel",
|
||||
"prompt": {
|
||||
"keybind-options": {
|
||||
"hotkey": "Tastenkürzel"
|
||||
},
|
||||
"label": "Tastenkürzel für Bild-im-Bild wählen",
|
||||
"title": "Bild-im-Bild Tastenkürzel"
|
||||
}
|
||||
},
|
||||
"save-window-position": "Fensterposition speichern",
|
||||
"save-window-size": "Fenstergröße speichern",
|
||||
"use-native-pip": "Browsereigenes PiP verwenden"
|
||||
},
|
||||
"name": "Bild-im-Bild",
|
||||
"templates": {
|
||||
"button": "Bild-im-Bild"
|
||||
}
|
||||
},
|
||||
"playback-speed": {
|
||||
"description": "Schnell hören, langsam hören! Fügt einen Schieberegler zur Steuerung der Songgeschwindigkeit hinzu",
|
||||
"name": "Wiedergabegeschwindigkeit",
|
||||
"templates": {
|
||||
"button": "Geschwindigkeit"
|
||||
}
|
||||
},
|
||||
"precise-volume": {
|
||||
"description": "Präzise Steuerung der Lautstärke mit dem Mausrad/Numpad mit einem benutzerdefinierten HUD und benutzerdefinierten Lautstärkestufen",
|
||||
"menu": {
|
||||
"arrows-shortcuts": "Lokale Pfeiltasten als Steuerung",
|
||||
"custom-volume-steps": "Eigene Lautstärkestufen setzen",
|
||||
"global-shortcuts": "Globale Tastenkürzel"
|
||||
},
|
||||
"name": "Genaue Lautstärke",
|
||||
"prompt": {
|
||||
"global-shortcuts": {
|
||||
"keybind-options": {
|
||||
"decrease": "Lautstärke senken",
|
||||
"increase": "Lautstärke erhöhen"
|
||||
},
|
||||
"label": "Wähle globale Tastenkombinationen für Lautstärke:",
|
||||
"title": "Globale Lautstärketastenbelegungen"
|
||||
},
|
||||
"volume-steps": {
|
||||
"label": "Wähle Schritte zur Lautstärkehebung/-senkung",
|
||||
"title": "Lautstärkestufen"
|
||||
}
|
||||
}
|
||||
},
|
||||
"quality-changer": {
|
||||
"backend": {
|
||||
"dialog": {
|
||||
"quality-changer": {
|
||||
"detail": "Aktuelle Videoqualität: {{quality}}",
|
||||
"message": "Wähle Videoqualität:",
|
||||
"title": "Videoqualität wählen"
|
||||
}
|
||||
}
|
||||
},
|
||||
"description": "Erlaubt die Videoqualität über einen Knopf auf dem Video",
|
||||
"name": "Videoqualitätsänderer"
|
||||
},
|
||||
"shortcuts": {
|
||||
"description": "Ermöglicht das Festlegen globaler Hotkeys für die Wiedergabe (Abspielen/Pause/Nächster/Vorheriger) + Deaktivieren des Medien-OSD durch Überschreiben der Medientasten + Aktivieren von Strg/CMD + F zum Suchen + Aktivieren der Linux mpris-Unterstützung für Medientasten + Angepasste Tastenkürzel für fortgeschrittene Benutzer.",
|
||||
"menu": {
|
||||
"override-media-keys": "Medientasten überschreiben",
|
||||
"set-keybinds": "Globale Liedsteuerung setzen"
|
||||
},
|
||||
"name": "Abkürzungen (& MPRIS)",
|
||||
"prompt": {
|
||||
"keybind": {
|
||||
"keybind-options": {
|
||||
"next": "Nächstes",
|
||||
"play-pause": "Weiter / Pause",
|
||||
"previous": "Vorheriges"
|
||||
},
|
||||
"label": "Wähle globale Tastenkombinationen für die Liedsteuerung:",
|
||||
"title": "Globale Tastenkombinationen"
|
||||
}
|
||||
}
|
||||
},
|
||||
"skip-disliked-songs": {
|
||||
"description": "Überspringt Lieder, die ihnen nicht gefallen",
|
||||
"name": "Überspring Lieder, die ihnen nicht gefallen"
|
||||
},
|
||||
"skip-silences": {
|
||||
"description": "Automatisch stille Abschnitte in Liedern überspringen",
|
||||
"name": "Stille überspringen"
|
||||
},
|
||||
"sponsorblock": {
|
||||
"description": "Überspringt automatisch nicht-musikalische Teile wie Intro/Outro oder Teile von Musikvideos, in denen der Song nicht gespielt wird",
|
||||
"name": "SponsorBlock"
|
||||
},
|
||||
"taskbar-mediacontrol": {
|
||||
"description": "Wiedergabe aus der Windows Taskleiste kontrollieren",
|
||||
"name": "Mediensteuerung in der Taskleiste"
|
||||
},
|
||||
"touchbar": {
|
||||
"description": "Fügt ein TouchBar-Widget für macOS-Benutzer hinzu",
|
||||
"name": "TouchBar"
|
||||
},
|
||||
"tuna-obs": {
|
||||
"description": "Integration mit dem OBS-Plugin Tuna",
|
||||
"name": "Tuna OBS"
|
||||
},
|
||||
"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": {
|
||||
"align": {
|
||||
"label": "Ausrichtung",
|
||||
"submenu": {
|
||||
"left": "Links",
|
||||
"middle": "Mitte",
|
||||
"right": "Rechts"
|
||||
}
|
||||
},
|
||||
"force-hide": "Entfernen des Videoabschnitts erzwingen",
|
||||
"mode": {
|
||||
"label": "Modus",
|
||||
"submenu": {
|
||||
"custom": "Angepasster Schalter",
|
||||
"disabled": "Deaktiviert",
|
||||
"native": "Eingebauter Schalter"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Videoumschalter",
|
||||
"templates": {
|
||||
"button": "Lied"
|
||||
}
|
||||
},
|
||||
"visualizer": {
|
||||
"description": "Fügt einen Visualisierer zum Player hinzu",
|
||||
"menu": {
|
||||
"visualizer-type": "Visualisierertyp"
|
||||
},
|
||||
"name": "Visualisierer"
|
||||
}
|
||||
}
|
||||
}
|
||||
249
src/i18n/resources/el.json
Normal file
@ -0,0 +1,249 @@
|
||||
{
|
||||
"common": {
|
||||
"console": {
|
||||
"plugins": {
|
||||
"execute-failed": "Αποτυχία εκτέλεσης προσθέτου {{pluginName}}::{{contextName}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"language": {
|
||||
"code": "el",
|
||||
"local-name": "Ελληνικά",
|
||||
"name": "Greek"
|
||||
},
|
||||
"main": {
|
||||
"dialog": {
|
||||
"hide-menu-enabled": {
|
||||
"message": "Απόκρυψη μενού είναι ενεργοποιημένο"
|
||||
},
|
||||
"update-available": {
|
||||
"buttons": {
|
||||
"download": "Download",
|
||||
"ok": "OK"
|
||||
}
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"navigation": {
|
||||
"label": "Navigation"
|
||||
},
|
||||
"options": {
|
||||
"label": "Options",
|
||||
"submenu": {
|
||||
"advanced-options": {
|
||||
"submenu": {
|
||||
"set-proxy": {
|
||||
"label": "Set proxy",
|
||||
"prompt": {
|
||||
"title": "Set proxy"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"auto-update": "Auto Update",
|
||||
"language": {
|
||||
"label": "Γλώσσα"
|
||||
},
|
||||
"start-at-login": "Start at login",
|
||||
"tray": {
|
||||
"label": "Tray",
|
||||
"submenu": {
|
||||
"enabled-and-hide-app": "Ενεργοποιημένο και απόκρυψη της εφαρμογής",
|
||||
"play-pause-on-click": "Play/Pause στο πάτημα"
|
||||
}
|
||||
},
|
||||
"visual-tweaks": {
|
||||
"submenu": {
|
||||
"like-buttons": {
|
||||
"default": "Default"
|
||||
},
|
||||
"theme": {
|
||||
"label": "Theme",
|
||||
"submenu": {
|
||||
"no-theme": "No theme"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"label": "Plugins"
|
||||
},
|
||||
"view": {
|
||||
"label": "View"
|
||||
}
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"adblocker": {
|
||||
"description": "Αποκλεισμός όλων των διαφημίσεων και tracker",
|
||||
"menu": {
|
||||
"blocker": "Μέθοδος αποκλεισμού"
|
||||
},
|
||||
"name": "Adblocker"
|
||||
},
|
||||
"album-color-theme": {
|
||||
"description": "Εφαρμόζει ένα δυναμικό θέμα και εφέ με βάση τη χρωματική παλέτα του άλμπουμ",
|
||||
"name": "Album Color Theme"
|
||||
},
|
||||
"ambient-mode": {
|
||||
"description": "Εφαρμόζει ένα εφέ φωτισμού ρίχνοντας απαλά χρώματα από το βίντεο, στο φόντο της οθόνης σας.",
|
||||
"menu": {
|
||||
"blur-amount": {
|
||||
"submenu": {
|
||||
"pixels": "{{blurAmount}} pixels"
|
||||
}
|
||||
},
|
||||
"buffer": {
|
||||
"label": "Buffer",
|
||||
"submenu": {
|
||||
"buffer": "{{buffer}}"
|
||||
}
|
||||
},
|
||||
"opacity": {
|
||||
"label": "Ποσότητα αδιαφάνειας",
|
||||
"submenu": {
|
||||
"percent": "{{opacity}}%"
|
||||
}
|
||||
},
|
||||
"quality": {
|
||||
"submenu": {
|
||||
"pixels": "{{quality}} pixels"
|
||||
}
|
||||
},
|
||||
"size": {
|
||||
"submenu": {
|
||||
"percent": "{{size}}%"
|
||||
}
|
||||
},
|
||||
"smoothness-transition": {
|
||||
"submenu": {
|
||||
"during": "Σε {{interpolationTime}} δεύτερα"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"audio-compressor": {
|
||||
"description": "Συμπίεση ήχου (μειώνει την ένταση των πιο δυνατών τμημάτων του κύματος και αυξάνει την ένταση των πιο μαλακών τμημάτων)"
|
||||
},
|
||||
"blur-nav-bar": {
|
||||
"description": "Κάνει τη γραμμή πλοήγησης διαφανή και θολή"
|
||||
},
|
||||
"bypass-age-restrictions": {
|
||||
"description": "Παράκαμψη της επαλήθευσης ηλικίας του YouTube"
|
||||
},
|
||||
"captions-selector": {
|
||||
"prompt": {
|
||||
"selector": {
|
||||
"none": "None"
|
||||
}
|
||||
}
|
||||
},
|
||||
"compact-sidebar": {
|
||||
"description": "Να είναι πάντα συμπαγές το sidebar"
|
||||
},
|
||||
"crossfade": {
|
||||
"menu": {
|
||||
"advanced": "Για προχωρημένους"
|
||||
},
|
||||
"prompt": {
|
||||
"options": {
|
||||
"multi-input": {
|
||||
"fade-scaling": {
|
||||
"linear": "Γραμμική",
|
||||
"logarithmic": "Λογαριθμική"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"disable-autoplay": {
|
||||
"description": "Κάνει τα τραγούδια να είναι αυτόματα σε παύση",
|
||||
"menu": {
|
||||
"apply-once": "Εφαρμόζεται μόνο στο πρώτο τραγούδι"
|
||||
}
|
||||
},
|
||||
"discord": {
|
||||
"description": "Δείξτε στους φίλους σας τι ακούτε με το Rich Presence",
|
||||
"menu": {
|
||||
"hide-duration-left": "Απόκρυψη της διάρκειας που απομένει",
|
||||
"hide-github-button": "Απόκρυψη του συνδέσμου προς GitHub",
|
||||
"set-inactivity-timeout": "Ορισμός χρονικού ορίου αδράνειας"
|
||||
}
|
||||
},
|
||||
"downloader": {
|
||||
"backend": {
|
||||
"dialog": {
|
||||
"error": {
|
||||
"buttons": {
|
||||
"ok": "OK"
|
||||
},
|
||||
"title": "Error in download!"
|
||||
},
|
||||
"start-download-playlist": {
|
||||
"buttons": {
|
||||
"ok": "OK"
|
||||
},
|
||||
"message": "Λήψη λίστας αναπαραγωγής {{playlistTitle}}",
|
||||
"title": "Λήψη ξεκίνησε"
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"conversion-progress": "Μετατροπή: {{percent}}%",
|
||||
"download-progress": "Download: {{percent}}%",
|
||||
"preparing-file": "Προετοιμασία αρχείου…"
|
||||
}
|
||||
},
|
||||
"templates": {
|
||||
"button": "Download"
|
||||
}
|
||||
},
|
||||
"last-fm": {
|
||||
"name": "Last.fm"
|
||||
},
|
||||
"navigation": {
|
||||
"name": "Navigation"
|
||||
},
|
||||
"no-google-login": {
|
||||
"name": "No Google Login"
|
||||
},
|
||||
"notifications": {
|
||||
"name": "Notifications"
|
||||
},
|
||||
"shortcuts": {
|
||||
"prompt": {
|
||||
"keybind": {
|
||||
"keybind-options": {
|
||||
"next": "Next"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"sponsorblock": {
|
||||
"name": "SponsorBlock"
|
||||
},
|
||||
"touchbar": {
|
||||
"name": "TouchBar"
|
||||
},
|
||||
"tuna-obs": {
|
||||
"name": "Tuna OBS"
|
||||
},
|
||||
"video-toggle": {
|
||||
"menu": {
|
||||
"align": {
|
||||
"submenu": {
|
||||
"middle": "Middle",
|
||||
"right": "Right"
|
||||
}
|
||||
},
|
||||
"mode": {
|
||||
"label": "Mode"
|
||||
}
|
||||
},
|
||||
"templates": {
|
||||
"button": "Song"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
598
src/i18n/resources/en.json
Normal file
@ -0,0 +1,598 @@
|
||||
{
|
||||
"common": {
|
||||
"console": {
|
||||
"plugins": {
|
||||
"execute-failed": "Failed to execute plugin {{pluginName}}::{{contextName}}",
|
||||
"executed-at-ms": "Plugin {{pluginName}}::{{contextName}} executed at {{ms}}ms",
|
||||
"initialize-failed": "Failed to initialize plugin \"{{pluginName}}\"",
|
||||
"load-all": "Loading all plugins",
|
||||
"load-failed": "Failed to load plugin \"{{pluginName}}\"",
|
||||
"loaded": "Plugin \"{{pluginName}}\" loaded",
|
||||
"unload-failed": "Failed to unload plugin \"{{pluginName}}\"",
|
||||
"unloaded": "Plugin \"{{pluginName}}\" unloaded"
|
||||
}
|
||||
}
|
||||
},
|
||||
"language": {
|
||||
"code": "en",
|
||||
"local-name": "English",
|
||||
"name": "English"
|
||||
},
|
||||
"main": {
|
||||
"console": {
|
||||
"did-finish-load": {
|
||||
"dev-tools": "Finished loading. DevTools opened"
|
||||
},
|
||||
"i18n": {
|
||||
"loaded": "i18n loaded"
|
||||
},
|
||||
"second-instance": {
|
||||
"receive-command": "Received command over protocol: \"{{command}}\""
|
||||
},
|
||||
"theme": {
|
||||
"css-file-not-found": "CSS file \"{{cssFile}}\" does not exist, ignoring"
|
||||
},
|
||||
"unresponsive": {
|
||||
"details": "Unresponsive Error!\n{{error}}"
|
||||
},
|
||||
"when-ready": {
|
||||
"clearing-cache-after-20s": "Clearing app cache"
|
||||
},
|
||||
"window": {
|
||||
"tried-to-render-offscreen": "Window tried to render offscreen, windowSize={{windowSize}}, displaySize={{displaySize}}, position={{position}}"
|
||||
}
|
||||
},
|
||||
"dialog": {
|
||||
"hide-menu-enabled": {
|
||||
"detail": "Menu is hidden, use 'Alt' to show it (or 'Escape' if using In-App Menu)",
|
||||
"message": "Hide Menu is enabled",
|
||||
"title": "Hide Menu Enabled"
|
||||
},
|
||||
"need-to-restart": {
|
||||
"buttons": {
|
||||
"later": "Later",
|
||||
"restart-now": "Restart Now"
|
||||
},
|
||||
"detail": "\"{{pluginName}}\" plugin requires a restart to take effect",
|
||||
"message": "\"{{pluginName}}\" needs to restart",
|
||||
"title": "Restart Required"
|
||||
},
|
||||
"unresponsive": {
|
||||
"buttons": {
|
||||
"quit": "Quit",
|
||||
"relaunch": "Relaunch",
|
||||
"wait": "Wait"
|
||||
},
|
||||
"detail": "We are sorry for the inconvenience! please choose what to do:",
|
||||
"message": "The Application is Unresponsive",
|
||||
"title": "Window Unresponsive"
|
||||
},
|
||||
"update-available": {
|
||||
"buttons": {
|
||||
"disable": "Disable Updates",
|
||||
"download": "Download",
|
||||
"ok": "OK"
|
||||
},
|
||||
"detail": "A new version is available and can be downloaded at {{downloadLink}}",
|
||||
"message": "A new version is available",
|
||||
"title": "Update Available"
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"about": "About",
|
||||
"navigation": {
|
||||
"label": "Navigation",
|
||||
"submenu": {
|
||||
"copy-current-url": "Copy current URL",
|
||||
"go-back": "Go back",
|
||||
"go-forward": "Go forward",
|
||||
"quit": "Exit",
|
||||
"restart": "Restart App"
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"label": "Options",
|
||||
"submenu": {
|
||||
"advanced-options": {
|
||||
"label": "Advanced options",
|
||||
"submenu": {
|
||||
"auto-reset-app-cache": "Reset app cache when app starts",
|
||||
"disable-hardware-acceleration": "Disable hardware acceleration",
|
||||
"edit-config-json": "Edit config.json",
|
||||
"override-user-agent": "Override User-Agent",
|
||||
"restart-on-config-changes": "Restart on config changes",
|
||||
"set-proxy": {
|
||||
"label": "Set proxy",
|
||||
"prompt": {
|
||||
"label": "Enter Proxy Address: (leave empty to disable)",
|
||||
"placeholder": "Example: SOCKS5://127.0.0.1:9999",
|
||||
"title": "Set proxy"
|
||||
}
|
||||
},
|
||||
"toggle-dev-tools": "Toggle DevTools"
|
||||
}
|
||||
},
|
||||
"always-on-top": "Always on top",
|
||||
"auto-update": "Auto Update",
|
||||
"hide-menu": {
|
||||
"dialog": {
|
||||
"message": "Menu will be hidden on next launch, use [Alt] to show it (or backtick [`] if using in-app-menu)",
|
||||
"title": "Hide Menu Enabled"
|
||||
},
|
||||
"label": "Hide Menu"
|
||||
},
|
||||
"language": {
|
||||
"dialog": {
|
||||
"message": "Language will be changed after restart",
|
||||
"title": "Language Changed"
|
||||
},
|
||||
"label": "Language",
|
||||
"submenu": {
|
||||
"to-help-translate": "Want to help translate? Click here"
|
||||
}
|
||||
},
|
||||
"resume-on-start": "Resume last song when app starts",
|
||||
"single-instance-lock": "Single Instance Lock",
|
||||
"start-at-login": "Start at login",
|
||||
"starting-page": {
|
||||
"label": "Starting page",
|
||||
"unset": "Unset"
|
||||
},
|
||||
"tray": {
|
||||
"label": "Tray",
|
||||
"submenu": {
|
||||
"disabled": "Disabled",
|
||||
"enabled-and-hide-app": "Enabled and hide app",
|
||||
"enabled-and-show-app": "Enabled and show app",
|
||||
"play-pause-on-click": "Play/Pause on click"
|
||||
}
|
||||
},
|
||||
"visual-tweaks": {
|
||||
"label": "Visual Tweaks",
|
||||
"submenu": {
|
||||
"like-buttons": {
|
||||
"default": "Default",
|
||||
"force-show": "Force show",
|
||||
"hide": "Hide",
|
||||
"label": "Like buttons"
|
||||
},
|
||||
"remove-upgrade-button": "Remove upgrade button",
|
||||
"theme": {
|
||||
"label": "Theme",
|
||||
"submenu": {
|
||||
"import-css-file": "Import custom CSS file",
|
||||
"no-theme": "No theme"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"enabled": "Enabled",
|
||||
"label": "Plugins"
|
||||
},
|
||||
"view": {
|
||||
"label": "View",
|
||||
"submenu": {
|
||||
"force-reload": "Force Reload",
|
||||
"reload": "Reload",
|
||||
"reset-zoom": "Actual Size",
|
||||
"toggle-fullscreen": "Toggle Full Screen",
|
||||
"zoom-in": "Zoom In",
|
||||
"zoom-out": "Zoom Out"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tray": {
|
||||
"next": "Next",
|
||||
"play-pause": "Play/Pause",
|
||||
"previous": "Previous",
|
||||
"quit": "Exit",
|
||||
"restart": "Restart App",
|
||||
"show": "Show window"
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"adblocker": {
|
||||
"description": "Block all ads and tracking out of the box",
|
||||
"menu": {
|
||||
"blocker": "Blocker"
|
||||
},
|
||||
"name": "Adblocker"
|
||||
},
|
||||
"album-color-theme": {
|
||||
"description": "Applies a dynamic theme and visual effects based on the album color palette",
|
||||
"name": "Album Color Theme"
|
||||
},
|
||||
"ambient-mode": {
|
||||
"description": "Applies a lighting effect by casting gentle colors from the video, into your screen’s background.",
|
||||
"menu": {
|
||||
"blur-amount": {
|
||||
"label": "Blur amount",
|
||||
"submenu": {
|
||||
"pixels": "{{blurAmount}} pixels"
|
||||
}
|
||||
},
|
||||
"buffer": {
|
||||
"label": "Buffer",
|
||||
"submenu": {
|
||||
"buffer": "{{buffer}}"
|
||||
}
|
||||
},
|
||||
"opacity": {
|
||||
"label": "Opacity",
|
||||
"submenu": {
|
||||
"percent": "{{opacity}}%"
|
||||
}
|
||||
},
|
||||
"quality": {
|
||||
"label": "Quality",
|
||||
"submenu": {
|
||||
"pixels": "{{quality}} pixels"
|
||||
}
|
||||
},
|
||||
"size": {
|
||||
"label": "Size",
|
||||
"submenu": {
|
||||
"percent": "{{size}}%"
|
||||
}
|
||||
},
|
||||
"smoothness-transition": {
|
||||
"label": "Smoothness transition",
|
||||
"submenu": {
|
||||
"during": "During {{interpolationTime}} s"
|
||||
}
|
||||
},
|
||||
"use-fullscreen": {
|
||||
"label": "Using fullscreen"
|
||||
}
|
||||
},
|
||||
"name": "Ambient Mode"
|
||||
},
|
||||
"audio-compressor": {
|
||||
"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"
|
||||
},
|
||||
"blur-nav-bar": {
|
||||
"description": "Makes navigation bar transparent and blurry",
|
||||
"name": "Blur Navigation Bar"
|
||||
},
|
||||
"bypass-age-restrictions": {
|
||||
"description": "Bypass YouTube's age verification",
|
||||
"name": "Bypass Age Restrictions"
|
||||
},
|
||||
"captions-selector": {
|
||||
"description": "Caption selector for YouTube Music audio tracks",
|
||||
"menu": {
|
||||
"autoload": "Automatically select last used caption",
|
||||
"disable-captions": "No captions by default"
|
||||
},
|
||||
"name": "Captions Selector",
|
||||
"prompt": {
|
||||
"selector": {
|
||||
"label": "Current caption language: {{language}}",
|
||||
"none": "None",
|
||||
"title": "Select caption language"
|
||||
}
|
||||
},
|
||||
"templates": {
|
||||
"title": "Open captions selector"
|
||||
}
|
||||
},
|
||||
"compact-sidebar": {
|
||||
"description": "Always set the sidebar in compact mode",
|
||||
"name": "Compact Sidebar"
|
||||
},
|
||||
"crossfade": {
|
||||
"description": "Crossfade between songs",
|
||||
"menu": {
|
||||
"advanced": "Advanced"
|
||||
},
|
||||
"name": "Crossfade [beta]",
|
||||
"prompt": {
|
||||
"options": {
|
||||
"multi-input": {
|
||||
"fade-in-duration": "Fade in duration (ms)",
|
||||
"fade-out-duration": "Fade out duration (ms)",
|
||||
"fade-scaling": {
|
||||
"label": "Fade scaling",
|
||||
"linear": "Linear",
|
||||
"logarithmic": "Logarithmic"
|
||||
},
|
||||
"seconds-before-end": "Crossfade N seconds before end"
|
||||
},
|
||||
"title": "Crossfade options"
|
||||
}
|
||||
}
|
||||
},
|
||||
"disable-autoplay": {
|
||||
"description": "Makes song start in \"paused\" mode",
|
||||
"menu": {
|
||||
"apply-once": "Applies only on startup"
|
||||
},
|
||||
"name": "Disable Autoplay"
|
||||
},
|
||||
"discord": {
|
||||
"backend": {
|
||||
"already-connected": "Attempted to connect with active connection",
|
||||
"connected": "Connected to Discord",
|
||||
"disconnected": "Disconnected from Discord"
|
||||
},
|
||||
"description": "Show your friends what you listen to with Rich Presence",
|
||||
"menu": {
|
||||
"auto-reconnect": "Auto reconnect",
|
||||
"clear-activity": "Clear activity",
|
||||
"clear-activity-after-timeout": "Clear activity after timeout",
|
||||
"connected": "Connected",
|
||||
"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"
|
||||
},
|
||||
"name": "Discord Rich Presence",
|
||||
"prompt": {
|
||||
"set-inactivity-timeout": {
|
||||
"label": "Enter inactivity timeout in seconds:",
|
||||
"title": "Set inactivity timeout"
|
||||
}
|
||||
}
|
||||
},
|
||||
"downloader": {
|
||||
"backend": {
|
||||
"dialog": {
|
||||
"error": {
|
||||
"buttons": {
|
||||
"ok": "OK"
|
||||
},
|
||||
"message": "Argh! Apologies, download failed…",
|
||||
"title": "Error in download!"
|
||||
},
|
||||
"start-download-playlist": {
|
||||
"buttons": {
|
||||
"ok": "OK"
|
||||
},
|
||||
"detail": "({{playlistSize}} songs)",
|
||||
"message": "Downloading Playlist {{playlistTitle}}",
|
||||
"title": "Download started"
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"conversion-progress": "Conversion: {{percent}}%",
|
||||
"converting": "Converting…",
|
||||
"done": "Done: {{filePath}}",
|
||||
"download-info": "Downloading {{artist}} - {{title}} [{{videoId}}",
|
||||
"download-progress": "Download: {{percent}}%",
|
||||
"downloading": "Downloading…",
|
||||
"downloading-counter": "Downloading {{current}}/{{total}}…",
|
||||
"downloading-playlist": "Downloading playlist \"{{playlistTitle}}\" - {{playlistSize}} songs ({{playlistId}})",
|
||||
"error-while-downloading": "Error downloading \"{{author}} - {{title}}\": {{error}}",
|
||||
"folder-already-exists": "The folder {{playlistFolder}} already exists",
|
||||
"getting-playlist-info": "Getting playlist info…",
|
||||
"loading": "Loading…",
|
||||
"playlist-has-only-one-song": "Playlist has only one item, downloading it directly",
|
||||
"playlist-id-not-found": "No playlist ID found",
|
||||
"playlist-is-empty": "Playlist is empty",
|
||||
"playlist-is-mix-or-private": "Error getting playlist info: make sure it isn't a private or \"Mixed for you\" playlist\n\n{{error}}",
|
||||
"preparing-file": "Preparing file…",
|
||||
"saving": "Saving…",
|
||||
"trying-to-get-playlist-id": "Trying to get playlist ID: {{playlistId}}",
|
||||
"video-id-not-found": "Video not found",
|
||||
"writing-id3": "Writing ID3 tags…"
|
||||
}
|
||||
},
|
||||
"description": "Downloads MP3 / source audio directly from the interface",
|
||||
"menu": {
|
||||
"choose-download-folder": "Choose download folder",
|
||||
"download-playlist": "Download playlist",
|
||||
"presets": "Presets",
|
||||
"skip-existing": "Skip existing files"
|
||||
},
|
||||
"name": "Downloader",
|
||||
"renderer": {
|
||||
"can-not-update-progress": "Cannot update progress"
|
||||
},
|
||||
"templates": {
|
||||
"button": "Download"
|
||||
}
|
||||
},
|
||||
"exponential-volume": {
|
||||
"description": "Makes the volume slider exponential so it's easier to select lower volumes.",
|
||||
"name": "Exponential Volume"
|
||||
},
|
||||
"in-app-menu": {
|
||||
"description": "Gives menu-bars a fancy, dark or album-color look",
|
||||
"menu": {
|
||||
"hide-dom-window-controls": "Hide DOM window controls"
|
||||
},
|
||||
"name": "In-App Menu"
|
||||
},
|
||||
"last-fm": {
|
||||
"description": "Add scrobbling support for Last.fm",
|
||||
"name": "Last.fm"
|
||||
},
|
||||
"lumiastream": {
|
||||
"description": "Adds Lumia Stream support",
|
||||
"name": "Lumia Stream [beta]"
|
||||
},
|
||||
"lyrics-genius": {
|
||||
"description": "Adds lyrics support for most songs",
|
||||
"menu": {
|
||||
"romanized-lyrics": "Romanized Lyrics"
|
||||
},
|
||||
"name": "Lyrics Genius",
|
||||
"renderer": {
|
||||
"fetched-lyrics": "Fetched lyrics for Genius"
|
||||
}
|
||||
},
|
||||
"navigation": {
|
||||
"description": "Next/Back navigation arrows directly integrated in the interface, like in your favorite browser",
|
||||
"name": "Navigation"
|
||||
},
|
||||
"no-google-login": {
|
||||
"description": "Remove Google login buttons and links from the interface",
|
||||
"name": "No Google Login"
|
||||
},
|
||||
"notifications": {
|
||||
"description": "Display a notification when a song starts playing (interactive notifications are available on Windows)",
|
||||
"menu": {
|
||||
"interactive": "Interactive Notifications",
|
||||
"interactive-settings": {
|
||||
"label": "Interactive Settings",
|
||||
"submenu": {
|
||||
"hide-button-text": "Hide button text",
|
||||
"refresh-on-play-pause": "Refresh on Play/Pause",
|
||||
"tray-controls": "Open/Close on tray click"
|
||||
}
|
||||
},
|
||||
"priority": "Notification Priority",
|
||||
"toast-style": "Toast style",
|
||||
"unpause-notification": "Show notification on unpause"
|
||||
},
|
||||
"name": "Notifications"
|
||||
},
|
||||
"picture-in-picture": {
|
||||
"description": "Allows to switch the app to picture-in-picture mode",
|
||||
"menu": {
|
||||
"always-on-top": "Always on top",
|
||||
"hotkey": {
|
||||
"label": "Hotkey",
|
||||
"prompt": {
|
||||
"keybind-options": {
|
||||
"hotkey": "Hotkey"
|
||||
},
|
||||
"label": "Choose a hotkey to toggle picture-in-picture",
|
||||
"title": "Picture-in-picture Hotkey"
|
||||
}
|
||||
},
|
||||
"save-window-position": "Save window position",
|
||||
"save-window-size": "Save window size",
|
||||
"use-native-pip": "Use browser native PiP"
|
||||
},
|
||||
"name": "Picture-in-picture",
|
||||
"templates": {
|
||||
"button": "Picture-in-picture"
|
||||
}
|
||||
},
|
||||
"playback-speed": {
|
||||
"description": "Listen fast, listen slow! Adds a slider that controls song speed",
|
||||
"name": "Playback Speed",
|
||||
"templates": {
|
||||
"button": "Speed"
|
||||
}
|
||||
},
|
||||
"precise-volume": {
|
||||
"description": "Control the volume precisely using mousewheel/hotkeys, with a custom HUD and customizable volume steps",
|
||||
"menu": {
|
||||
"arrows-shortcuts": "Local Arrow-keys Controls",
|
||||
"custom-volume-steps": "Set Custom Volume Steps",
|
||||
"global-shortcuts": "Global Hotkeys"
|
||||
},
|
||||
"name": "Precise Volume",
|
||||
"prompt": {
|
||||
"global-shortcuts": {
|
||||
"keybind-options": {
|
||||
"decrease": "Decrease Volume",
|
||||
"increase": "Increase Volume"
|
||||
},
|
||||
"label": "Choose Global Volume Keybinds:",
|
||||
"title": "Global Volume Keybinds"
|
||||
},
|
||||
"volume-steps": {
|
||||
"label": "Choose Volume Increase/Decrease Steps",
|
||||
"title": "Volume Steps"
|
||||
}
|
||||
}
|
||||
},
|
||||
"quality-changer": {
|
||||
"backend": {
|
||||
"dialog": {
|
||||
"quality-changer": {
|
||||
"detail": "Current Quality: {{quality}}",
|
||||
"message": "Choose Video Quality:",
|
||||
"title": "Choose Video Quality"
|
||||
}
|
||||
}
|
||||
},
|
||||
"description": "Allows changing the video quality with a button on the video overlay",
|
||||
"name": "Video Quality Changer"
|
||||
},
|
||||
"shortcuts": {
|
||||
"description": "Allows setting global hotkeys for playback (play/pause/next/previous) and turning off media OSD by overriding media keys, turning on Ctrl/CMD + F to search, turning on Linux MPRIS support for media keys, and custom hotkeys for advanced users.",
|
||||
"menu": {
|
||||
"override-media-keys": "Override Media Keys",
|
||||
"set-keybinds": "Set Global Song Controls"
|
||||
},
|
||||
"name": "Shortcuts (& MPRIS)",
|
||||
"prompt": {
|
||||
"keybind": {
|
||||
"keybind-options": {
|
||||
"next": "Next",
|
||||
"play-pause": "Play / Pause",
|
||||
"previous": "Previous"
|
||||
},
|
||||
"label": "Choose Global Keybinds for Songs Control:",
|
||||
"title": "Global Keybinds"
|
||||
}
|
||||
}
|
||||
},
|
||||
"skip-disliked-songs": {
|
||||
"description": "Skips disliked songs",
|
||||
"name": "Skip Disliked Songs"
|
||||
},
|
||||
"skip-silences": {
|
||||
"description": "Automatically skip silences sections in songs",
|
||||
"name": "Skip Silences"
|
||||
},
|
||||
"sponsorblock": {
|
||||
"description": "Automatically Skips non-music parts like intro/outro or parts of music videos where the song isn't playing",
|
||||
"name": "SponsorBlock"
|
||||
},
|
||||
"taskbar-mediacontrol": {
|
||||
"description": "Control playback from your Windows taskbar",
|
||||
"name": "Taskbar Media Control"
|
||||
},
|
||||
"touchbar": {
|
||||
"description": "Adds a TouchBar widget for macOS users",
|
||||
"name": "TouchBar"
|
||||
},
|
||||
"tuna-obs": {
|
||||
"description": "Integration with OBS's plugin Tuna",
|
||||
"name": "Tuna OBS"
|
||||
},
|
||||
"video-toggle": {
|
||||
"description": "Adds a button to switch between Video/Song mode. can also optionally remove the whole video tab",
|
||||
"menu": {
|
||||
"align": {
|
||||
"label": "Alignment",
|
||||
"submenu": {
|
||||
"left": "Left",
|
||||
"middle": "Middle",
|
||||
"right": "Right"
|
||||
}
|
||||
},
|
||||
"force-hide": "Force remove video tab",
|
||||
"mode": {
|
||||
"label": "Mode",
|
||||
"submenu": {
|
||||
"custom": "Custom toggle",
|
||||
"disabled": "Disabled",
|
||||
"native": "Native toggle"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Video Toggle",
|
||||
"templates": {
|
||||
"button": "Song"
|
||||
}
|
||||
},
|
||||
"visualizer": {
|
||||
"description": "Adds a visualizer to the player",
|
||||
"menu": {
|
||||
"visualizer-type": "Visualizer Type"
|
||||
},
|
||||
"name": "Visualizer"
|
||||
}
|
||||
}
|
||||
}
|
||||
598
src/i18n/resources/es.json
Normal file
@ -0,0 +1,598 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
}
|
||||
},
|
||||
"language": {
|
||||
"code": "es",
|
||||
"local-name": "Inglés",
|
||||
"name": "Spanish"
|
||||
},
|
||||
"main": {
|
||||
"console": {
|
||||
"did-finish-load": {
|
||||
"dev-tools": "Carga finalizada. DevTools abiertos"
|
||||
},
|
||||
"i18n": {
|
||||
"loaded": "i18n cargado"
|
||||
},
|
||||
"second-instance": {
|
||||
"receive-command": "Comando recibido sobre el protocolo: \"{{command}}\""
|
||||
},
|
||||
"theme": {
|
||||
"css-file-not-found": "El archivo CSS \"{{cssFile}}\" no existe, ignorando"
|
||||
},
|
||||
"unresponsive": {
|
||||
"details": "¡Error sin repuesta!\n{{error}}"
|
||||
},
|
||||
"when-ready": {
|
||||
"clearing-cache-after-20s": "Borrar caché de la aplicación"
|
||||
},
|
||||
"window": {
|
||||
"tried-to-render-offscreen": "La ventana intentó mostrarse fuera de la pantalla, windowSize={{windowSize}}, displaySize={{displaySize}}, posicion={{position}}"
|
||||
}
|
||||
},
|
||||
"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"
|
||||
},
|
||||
"need-to-restart": {
|
||||
"buttons": {
|
||||
"later": "Más tarde",
|
||||
"restart-now": "Reiniciar ahora"
|
||||
},
|
||||
"detail": "\"{{pluginName}}\" se requiere reiniciar para que el plugin tome efecto",
|
||||
"message": "\"{{pluginName}}\" necesita reiniciar",
|
||||
"title": "Se requiere reinicio"
|
||||
},
|
||||
"unresponsive": {
|
||||
"buttons": {
|
||||
"quit": "Dejar",
|
||||
"relaunch": "Volver a abrir",
|
||||
"wait": "Espera"
|
||||
},
|
||||
"detail": "Sentimos las molestias. Por favor, elija qué hacer:",
|
||||
"message": "La aplicación no responde",
|
||||
"title": "La ventana no responde"
|
||||
},
|
||||
"update-available": {
|
||||
"buttons": {
|
||||
"disable": "Desactivar actualizaciones",
|
||||
"download": "Descargar",
|
||||
"ok": "OK"
|
||||
},
|
||||
"detail": "Una nueva versión está disponible y puede descargarse en {{downloadLink}}",
|
||||
"message": "Ya está disponible una nueva versión",
|
||||
"title": "Actualización disponible"
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"about": "Acerca de",
|
||||
"navigation": {
|
||||
"label": "Navegación",
|
||||
"submenu": {
|
||||
"copy-current-url": "Copiar la URL actual",
|
||||
"go-back": "Regresar",
|
||||
"go-forward": "Adelante",
|
||||
"quit": "Salir",
|
||||
"restart": "Reiniciar la aplicación"
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"label": "Opciones",
|
||||
"submenu": {
|
||||
"advanced-options": {
|
||||
"label": "Opciones avanzadas",
|
||||
"submenu": {
|
||||
"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",
|
||||
"set-proxy": {
|
||||
"label": "Definir proxy",
|
||||
"prompt": {
|
||||
"label": "Introduzca la dirección del proxy: (déjela vacía para desactivarla)",
|
||||
"placeholder": "Ejemplo: SOCKS5://127.0.0.1:9999",
|
||||
"title": "Establecer proxy"
|
||||
}
|
||||
},
|
||||
"toggle-dev-tools": "Activar DevTools"
|
||||
}
|
||||
},
|
||||
"always-on-top": "Siempre arriba",
|
||||
"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"
|
||||
},
|
||||
"label": "Ocultar menú"
|
||||
},
|
||||
"language": {
|
||||
"dialog": {
|
||||
"message": "El idioma se cambiará después de reiniciar",
|
||||
"title": "Se cambio 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",
|
||||
"starting-page": {
|
||||
"label": "Página de inicio",
|
||||
"unset": "Sin configurar"
|
||||
},
|
||||
"tray": {
|
||||
"label": "Bandeja",
|
||||
"submenu": {
|
||||
"disabled": "Desactivado",
|
||||
"enabled-and-hide-app": "Activar y ocultar la aplicación",
|
||||
"enabled-and-show-app": "Activado y mostrar aplicación",
|
||||
"play-pause-on-click": "Reproducir/Pausar al hacer clic"
|
||||
}
|
||||
},
|
||||
"visual-tweaks": {
|
||||
"label": "Ajustes visuales",
|
||||
"submenu": {
|
||||
"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",
|
||||
"theme": {
|
||||
"label": "Tema",
|
||||
"submenu": {
|
||||
"import-css-file": "Importar archivo CSS personalizado",
|
||||
"no-theme": "Sin temas"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"enabled": "Habilitado",
|
||||
"label": "Plugins"
|
||||
},
|
||||
"view": {
|
||||
"label": "Ver",
|
||||
"submenu": {
|
||||
"force-reload": "Forzar la recarga",
|
||||
"reload": "Recargar",
|
||||
"reset-zoom": "Tamaño actual",
|
||||
"toggle-fullscreen": "Alternar pantalla completa",
|
||||
"zoom-in": "Acercar",
|
||||
"zoom-out": "Alejar"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tray": {
|
||||
"next": "Siguiente",
|
||||
"play-pause": "Reproducir/Pausar",
|
||||
"previous": "Anterior",
|
||||
"quit": "Salir",
|
||||
"restart": "Reiniciar la aplicación",
|
||||
"show": "Mostrar ventana"
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"adblocker": {
|
||||
"description": "Bloquear todos los anuncios y el rastreo",
|
||||
"menu": {
|
||||
"blocker": "Bloqueador"
|
||||
},
|
||||
"name": "Adblocker"
|
||||
},
|
||||
"album-color-theme": {
|
||||
"description": "Aplica un tema dinámico y efectos visuales basados en la paleta de colores del álbum",
|
||||
"name": "Color del álbum"
|
||||
},
|
||||
"ambient-mode": {
|
||||
"description": "Aplica un efecto de iluminación proyectando colores suaves del vídeo en el fondo de la pantalla.",
|
||||
"menu": {
|
||||
"blur-amount": {
|
||||
"label": "Cantidad de desenfoque",
|
||||
"submenu": {
|
||||
"pixels": "{{blurAmount}} pixeles"
|
||||
}
|
||||
},
|
||||
"buffer": {
|
||||
"label": "Buffer",
|
||||
"submenu": {
|
||||
"buffer": "{{buffer}}"
|
||||
}
|
||||
},
|
||||
"opacity": {
|
||||
"label": "Transparencia",
|
||||
"submenu": {
|
||||
"percent": "{{opacity}}%"
|
||||
}
|
||||
},
|
||||
"quality": {
|
||||
"label": "Calidad",
|
||||
"submenu": {
|
||||
"pixels": "{{quality}} píxeles"
|
||||
}
|
||||
},
|
||||
"size": {
|
||||
"label": "Tamaño",
|
||||
"submenu": {
|
||||
"percent": "{{size}}%"
|
||||
}
|
||||
},
|
||||
"smoothness-transition": {
|
||||
"label": "Transición suave",
|
||||
"submenu": {
|
||||
"during": "Durante {{interpolationTime}} s"
|
||||
}
|
||||
},
|
||||
"use-fullscreen": {
|
||||
"label": "Usando Pantalla Completa"
|
||||
}
|
||||
},
|
||||
"name": "Modo ambiente"
|
||||
},
|
||||
"audio-compressor": {
|
||||
"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"
|
||||
},
|
||||
"blur-nav-bar": {
|
||||
"description": "Hace que la barra de navegación sea 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"
|
||||
},
|
||||
"captions-selector": {
|
||||
"description": "Selector de subtítulos para pistas de audio de YouTube Music",
|
||||
"menu": {
|
||||
"autoload": "Seleccionar automáticamente el último subtítulo utilizado",
|
||||
"disable-captions": "Sin subtítulos por defecto"
|
||||
},
|
||||
"name": "Selector de subtítulos",
|
||||
"prompt": {
|
||||
"selector": {
|
||||
"label": "Idioma actual: {{language}}",
|
||||
"none": "Ninguno",
|
||||
"title": "Seleccionar idioma de los subtítulos"
|
||||
}
|
||||
},
|
||||
"templates": {
|
||||
"title": "Abra el selector de subtítulos"
|
||||
}
|
||||
},
|
||||
"compact-sidebar": {
|
||||
"description": "Poner siempre la barra lateral en modo compacto",
|
||||
"name": "Barra lateral compacta"
|
||||
},
|
||||
"crossfade": {
|
||||
"description": "Crossfade entre canciones",
|
||||
"menu": {
|
||||
"advanced": "Avanzado"
|
||||
},
|
||||
"name": "Crossfade [beta]",
|
||||
"prompt": {
|
||||
"options": {
|
||||
"multi-input": {
|
||||
"fade-in-duration": "Duración del fundido (ms)",
|
||||
"fade-out-duration": "Duración del fundido de salida (ms)",
|
||||
"fade-scaling": {
|
||||
"label": "Escala de fundido",
|
||||
"linear": "Lineal",
|
||||
"logarithmic": "Logarítmico"
|
||||
},
|
||||
"seconds-before-end": "Crossfade N segundos antes del final"
|
||||
},
|
||||
"title": "Opciones de crossfade"
|
||||
}
|
||||
}
|
||||
},
|
||||
"disable-autoplay": {
|
||||
"description": "Hace que la canción comience en modo \"pausado\"",
|
||||
"menu": {
|
||||
"apply-once": "Sólo se aplica al inicio"
|
||||
},
|
||||
"name": "Desactivar reproducción automática"
|
||||
},
|
||||
"discord": {
|
||||
"backend": {
|
||||
"already-connected": "Se intentó conectar con una conexión activa",
|
||||
"connected": "Conectado a Discord",
|
||||
"disconnected": "Desconectado de Discord"
|
||||
},
|
||||
"description": "Muestra a tus amigos lo que escuchas con Rich Presence",
|
||||
"menu": {
|
||||
"auto-reconnect": "Reconectar automáticamente",
|
||||
"clear-activity": "Borrar actividad",
|
||||
"clear-activity-after-timeout": "Borrar actividad después de un tiempo",
|
||||
"connected": "Conectado",
|
||||
"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"
|
||||
},
|
||||
"name": "Estado de actividad de Discord",
|
||||
"prompt": {
|
||||
"set-inactivity-timeout": {
|
||||
"label": "Introduzca el tiempo de inactividad en segundos:",
|
||||
"title": "Establecer tiempo de inactividad"
|
||||
}
|
||||
}
|
||||
},
|
||||
"downloader": {
|
||||
"backend": {
|
||||
"dialog": {
|
||||
"error": {
|
||||
"buttons": {
|
||||
"ok": "OK"
|
||||
},
|
||||
"message": "¡Argh! Lo siento, la descarga falló…",
|
||||
"title": "¡Error en la descarga!"
|
||||
},
|
||||
"start-download-playlist": {
|
||||
"buttons": {
|
||||
"ok": "OK"
|
||||
},
|
||||
"detail": "({{playlistSize}} canciones)",
|
||||
"message": "Descargar Playlist {{playlistTitle}}",
|
||||
"title": "Descarga iniciada"
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"conversion-progress": "Conversión: {{percent}}%",
|
||||
"converting": "Convirtiendo…",
|
||||
"done": "Listo: {{filePath}}",
|
||||
"download-info": "Descargando {{artist}} - {{title}} [{{videoId}}",
|
||||
"download-progress": "Descarga: {{percent}}%",
|
||||
"downloading": "Descargando…",
|
||||
"downloading-counter": "Descargando {{current}}/{{total}}…",
|
||||
"downloading-playlist": "Descargar 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-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}}",
|
||||
"preparing-file": "Preparando archivo…",
|
||||
"saving": "Guardando…",
|
||||
"trying-to-get-playlist-id": "Intentando obtener el 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",
|
||||
"menu": {
|
||||
"choose-download-folder": "Elija la carpeta de descarga",
|
||||
"download-playlist": "Descargar lista de reproducción",
|
||||
"presets": "Preajustes",
|
||||
"skip-existing": "Saltar archivos existentes"
|
||||
},
|
||||
"name": "Descargador",
|
||||
"renderer": {
|
||||
"can-not-update-progress": "No se puede actualizar el progreso"
|
||||
},
|
||||
"templates": {
|
||||
"button": "Descargar"
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
"name": "Volumen exponencial"
|
||||
},
|
||||
"in-app-menu": {
|
||||
"description": "Da a las barras de menú un aspecto elegante, oscuro o del color de un álbum",
|
||||
"menu": {
|
||||
"hide-dom-window-controls": "Ocultar controles de ventana DOM"
|
||||
},
|
||||
"name": "Menú de aplicación"
|
||||
},
|
||||
"last-fm": {
|
||||
"description": "Añade soporte de scrobbling para Last.fm",
|
||||
"name": "Last.fm"
|
||||
},
|
||||
"lumiastream": {
|
||||
"description": "Agrega soporte para Lumia Stream",
|
||||
"name": "Lumia Stream [beta]"
|
||||
},
|
||||
"lyrics-genius": {
|
||||
"description": "Añade el soporte para las letras para la mayoría de las canciones",
|
||||
"menu": {
|
||||
"romanized-lyrics": "Letras Romanizadas"
|
||||
},
|
||||
"name": "Lyrics Genius",
|
||||
"renderer": {
|
||||
"fetched-lyrics": "Letras recuperadas de Genius"
|
||||
}
|
||||
},
|
||||
"navigation": {
|
||||
"description": "Flechas de navegación Siguiente/Atrás directamente integradas en la interfaz, como en tu navegador favorito",
|
||||
"name": "Navegación"
|
||||
},
|
||||
"no-google-login": {
|
||||
"description": "Eliminar los botones y enlaces de inicio de sesión de Google de la interfaz",
|
||||
"name": "Sin inicio de sesión de Google"
|
||||
},
|
||||
"notifications": {
|
||||
"description": "Mostrar una notificación cuando empiece a sonar una canción (las notificaciones interactivas están disponibles en Windows)",
|
||||
"menu": {
|
||||
"interactive": "Notificaciones interactivas",
|
||||
"interactive-settings": {
|
||||
"label": "Ajustes interactivos",
|
||||
"submenu": {
|
||||
"hide-button-text": "Ocultar el texto del botón",
|
||||
"refresh-on-play-pause": "Actualizar al reproducir/pausar",
|
||||
"tray-controls": "Abrir/Cerrar al hacer clic en la bandeja"
|
||||
}
|
||||
},
|
||||
"priority": "Prioridad de notificación",
|
||||
"toast-style": "Estilo de mensaje emergente",
|
||||
"unpause-notification": "Mostrar notificación al reanudar"
|
||||
},
|
||||
"name": "Notificaciones"
|
||||
},
|
||||
"picture-in-picture": {
|
||||
"description": "Permite cambiar la aplicación al modo de imagen en imagen",
|
||||
"menu": {
|
||||
"always-on-top": "Siempre encima",
|
||||
"hotkey": {
|
||||
"label": "Tecla de acceso rápido",
|
||||
"prompt": {
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"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"
|
||||
},
|
||||
"name": "Imagen en imagen",
|
||||
"templates": {
|
||||
"button": "Imagen en imagen"
|
||||
}
|
||||
},
|
||||
"playback-speed": {
|
||||
"description": "Escucha rápido, escucha despacio! Añade un control deslizante que ajusta la velocidad de la canción",
|
||||
"name": "Velocidad de reproducción",
|
||||
"templates": {
|
||||
"button": "Velocidad"
|
||||
}
|
||||
},
|
||||
"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",
|
||||
"menu": {
|
||||
"arrows-shortcuts": "Controles de teclas de flechas locales",
|
||||
"custom-volume-steps": "Establecer niveles de volumen personalizados",
|
||||
"global-shortcuts": "Teclas de acceso rápido globales"
|
||||
},
|
||||
"name": "Volumen preciso",
|
||||
"prompt": {
|
||||
"global-shortcuts": {
|
||||
"keybind-options": {
|
||||
"decrease": "Disminuir el volumen",
|
||||
"increase": "Aumentar el volumen"
|
||||
},
|
||||
"label": "Elija combinaciones de teclas para el volumen:",
|
||||
"title": "Combinaciones de teclas para el volumen"
|
||||
},
|
||||
"volume-steps": {
|
||||
"label": "Escoge los pasos de aumento o disminución del volumen",
|
||||
"title": "Niveles de volumen"
|
||||
}
|
||||
}
|
||||
},
|
||||
"quality-changer": {
|
||||
"backend": {
|
||||
"dialog": {
|
||||
"quality-changer": {
|
||||
"detail": "Calidad actual: {{quality}}",
|
||||
"message": "Elija la calidad de vídeo:",
|
||||
"title": "Elija la calidad de vídeo"
|
||||
}
|
||||
}
|
||||
},
|
||||
"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"
|
||||
},
|
||||
"shortcuts": {
|
||||
"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"
|
||||
},
|
||||
"name": "Atajos (& MPRIS)",
|
||||
"prompt": {
|
||||
"keybind": {
|
||||
"keybind-options": {
|
||||
"next": "Siguiente",
|
||||
"play-pause": "Reproducir / Pausa",
|
||||
"previous": "Anterior"
|
||||
},
|
||||
"label": "Elija combinaciones de teclas para el control de las canciones:",
|
||||
"title": "Atajos de teclado globales"
|
||||
}
|
||||
}
|
||||
},
|
||||
"skip-disliked-songs": {
|
||||
"description": "Omite las canciones que no le gustan",
|
||||
"name": "Saltar canciones que no me gustan"
|
||||
},
|
||||
"skip-silences": {
|
||||
"description": "Salta automáticamente las secciones silenciosas de las canciones",
|
||||
"name": "Saltar silencios"
|
||||
},
|
||||
"sponsorblock": {
|
||||
"description": "Salta automáticamente las partes no musicales como la introducción/final o secciones de videos musicales donde la canción no está sonando",
|
||||
"name": "SponsorBlock"
|
||||
},
|
||||
"taskbar-mediacontrol": {
|
||||
"description": "Controla la reproducción desde la barra de tareas de Windows",
|
||||
"name": "Control de medios de la barra de tareas"
|
||||
},
|
||||
"touchbar": {
|
||||
"description": "Añade un widget TouchBar para los usuarios de macOS",
|
||||
"name": "TouchBar"
|
||||
},
|
||||
"tuna-obs": {
|
||||
"description": "Integración con el complemento Tuna de OBS",
|
||||
"name": "Tuna OBS"
|
||||
},
|
||||
"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",
|
||||
"menu": {
|
||||
"align": {
|
||||
"label": "Alineación",
|
||||
"submenu": {
|
||||
"left": "Izquierda",
|
||||
"middle": "Medio",
|
||||
"right": "Derecha"
|
||||
}
|
||||
},
|
||||
"force-hide": "Forzar eliminación de la pestaña de vídeo",
|
||||
"mode": {
|
||||
"label": "Modo",
|
||||
"submenu": {
|
||||
"custom": "Alternador personalizado",
|
||||
"disabled": "Desactivado",
|
||||
"native": "Alternador nativo"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Alternador de vídeo",
|
||||
"templates": {
|
||||
"button": "Canción"
|
||||
}
|
||||
},
|
||||
"visualizer": {
|
||||
"description": "Añadir un visualizador al reproductor",
|
||||
"menu": {
|
||||
"visualizer-type": "Tipo de visualizador"
|
||||
},
|
||||
"name": "Visualizador"
|
||||
}
|
||||
}
|
||||
}
|
||||
597
src/i18n/resources/fr.json
Normal file
@ -0,0 +1,597 @@
|
||||
{
|
||||
"common": {
|
||||
"console": {
|
||||
"plugins": {
|
||||
"execute-failed": "Échec de l'exécution du plugin {{pluginName}}::{{contextName}}",
|
||||
"executed-at-ms": "Plugin {{pluginName}}::{{contextName}} exécuté en {{ms}}ms",
|
||||
"initialize-failed": "Échec de l'initialisation du plugin \"{{pluginName}}\"",
|
||||
"load-all": "Chargement des plugins",
|
||||
"load-failed": "Échec du chargement du plugin \"{{pluginName}}\"",
|
||||
"loaded": "Plugin \"{{pluginName}}\" chargé",
|
||||
"unload-failed": "Échec du déchargement du plugin \"{{pluginName}}\"",
|
||||
"unloaded": "Plugin \"{{pluginName}}\" déchargé"
|
||||
}
|
||||
}
|
||||
},
|
||||
"language": {
|
||||
"code": "fr",
|
||||
"local-name": "Français",
|
||||
"name": "French"
|
||||
},
|
||||
"main": {
|
||||
"console": {
|
||||
"did-finish-load": {
|
||||
"dev-tools": "Chargement terminé. DevTools ouvert"
|
||||
},
|
||||
"i18n": {
|
||||
"loaded": "i18n chargé"
|
||||
},
|
||||
"second-instance": {
|
||||
"receive-command": "Received command over protocol : \"{{command}}\""
|
||||
},
|
||||
"theme": {
|
||||
"css-file-not-found": "Le fichier de CSS \"{{cssFile}}\" n'existe pas, ignorer"
|
||||
},
|
||||
"unresponsive": {
|
||||
"details": "Erreur : ne répond pas !\n{{error}}"
|
||||
},
|
||||
"when-ready": {
|
||||
"clearing-cache-after-20s": "Effacement du cache de l'application"
|
||||
},
|
||||
"window": {
|
||||
"tried-to-render-offscreen": "La fenêtre a essayé d'effectuer un rendu hors écran, windowSize={{windowSize}}, displaySize={{displaySize}}, position={{position}}"
|
||||
}
|
||||
},
|
||||
"dialog": {
|
||||
"hide-menu-enabled": {
|
||||
"detail": "Le menu est masqué, utilisez « Alt » pour l'afficher (ou « Échap » si vous utilisez le menu de l'application)",
|
||||
"message": "Le masquage du menu est activé",
|
||||
"title": "Masquer le menu activé"
|
||||
},
|
||||
"need-to-restart": {
|
||||
"buttons": {
|
||||
"later": "Plus tard",
|
||||
"restart-now": "Redémarrer maintenant"
|
||||
},
|
||||
"detail": "\"{{pluginName}}\" plugin nécessite un redémarrage pour qu'il soit pris en compte",
|
||||
"message": "\"{{pluginName}}\" a besoin d'un redémarrage",
|
||||
"title": "Redémarrage requis"
|
||||
},
|
||||
"unresponsive": {
|
||||
"buttons": {
|
||||
"quit": "Quitté",
|
||||
"relaunch": "Relancer",
|
||||
"wait": "Attendre"
|
||||
},
|
||||
"detail": "Nous sommes désolés du dérangement ! veuillez choisir quoi faire :",
|
||||
"message": "L'application ne répond pas",
|
||||
"title": "La fenêtre ne répond pas"
|
||||
},
|
||||
"update-available": {
|
||||
"buttons": {
|
||||
"disable": "Désactiver les mises à jour",
|
||||
"download": "Télécharger",
|
||||
"ok": "Ok"
|
||||
},
|
||||
"detail": "Une nouvelle version est disponible et peut-être télécharger sur {{downloadLink}}",
|
||||
"message": "Une nouvelle version est disponible",
|
||||
"title": "Mise à jour disponible"
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"about": "À-propos",
|
||||
"navigation": {
|
||||
"label": "Navigation",
|
||||
"submenu": {
|
||||
"copy-current-url": "Copier l'URL actuelle",
|
||||
"go-back": "Retour",
|
||||
"go-forward": "Avancer",
|
||||
"quit": "Quitter",
|
||||
"restart": "Redémarrer l'application"
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"label": "Paramètres",
|
||||
"submenu": {
|
||||
"advanced-options": {
|
||||
"label": "Options avancée",
|
||||
"submenu": {
|
||||
"auto-reset-app-cache": "Réinitialiser le cache de l'application au démarrage",
|
||||
"disable-hardware-acceleration": "Désactiver les accélérations matérielles",
|
||||
"edit-config-json": "Modifier config.json",
|
||||
"override-user-agent": "Remplacer le User-Agent",
|
||||
"restart-on-config-changes": "Redémarrer quand la configuration change",
|
||||
"set-proxy": {
|
||||
"label": "Définir un proxy",
|
||||
"prompt": {
|
||||
"label": "Entrez l'adresse proxy : (laissez vide pour désactiver)",
|
||||
"placeholder": "Exemple: socks5://127.0.0.1:9999",
|
||||
"title": "Définir un proxy"
|
||||
}
|
||||
},
|
||||
"toggle-dev-tools": "Ouvrir/fermer les outils de développement"
|
||||
}
|
||||
},
|
||||
"always-on-top": "Toujours au dessus",
|
||||
"auto-update": "Mise à jour automatique",
|
||||
"hide-menu": {
|
||||
"dialog": {
|
||||
"message": "Le menu sera masqué au prochain lancement, utilisez [Alt] pour l'afficher (ou backtick [`] si vous utilisez le menu intégré à l'application)",
|
||||
"title": "Masquer le menu activé"
|
||||
},
|
||||
"label": "Cacher le menu"
|
||||
},
|
||||
"language": {
|
||||
"dialog": {
|
||||
"message": "La langue sera changée après le redémarrage",
|
||||
"title": "Langue modifiée"
|
||||
},
|
||||
"label": "Langue",
|
||||
"submenu": {
|
||||
"to-help-translate": "Envie d'aider à la traduction ? Cliquer ici"
|
||||
}
|
||||
},
|
||||
"resume-on-start": "Reprendre la dernière chanson quand l'application démarre",
|
||||
"single-instance-lock": "Verrouillage d'instance unique",
|
||||
"start-at-login": "Démarrer à la connexion",
|
||||
"starting-page": {
|
||||
"label": "Page de démarrage",
|
||||
"unset": "Définir à vide"
|
||||
},
|
||||
"tray": {
|
||||
"label": "Plateau",
|
||||
"submenu": {
|
||||
"disabled": "Désactivé",
|
||||
"enabled-and-hide-app": "Activé et cacher l'app",
|
||||
"enabled-and-show-app": "Activé et afficher l'application",
|
||||
"play-pause-on-click": "Lecture/Pause au clic"
|
||||
}
|
||||
},
|
||||
"visual-tweaks": {
|
||||
"label": "Ajustements visuels",
|
||||
"submenu": {
|
||||
"like-buttons": {
|
||||
"default": "Par défaut",
|
||||
"force-show": "Forcer à apparaître",
|
||||
"hide": "Cacher",
|
||||
"label": "Boutons « J'aime »"
|
||||
},
|
||||
"remove-upgrade-button": "Supprimer le bouton de mise à niveau",
|
||||
"theme": {
|
||||
"label": "Thème",
|
||||
"submenu": {
|
||||
"import-css-file": "Importer fichier CSS personnalisé",
|
||||
"no-theme": "Pas de thème"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"enabled": "Activé",
|
||||
"label": "Extensions"
|
||||
},
|
||||
"view": {
|
||||
"label": "Vue",
|
||||
"submenu": {
|
||||
"force-reload": "Forcer l'actualisation",
|
||||
"reload": "Actualiser",
|
||||
"reset-zoom": "Taille réelle",
|
||||
"toggle-fullscreen": "Basculer en plein écran",
|
||||
"zoom-in": "Zoom avant",
|
||||
"zoom-out": "Zoom arrière"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tray": {
|
||||
"next": "Suivant",
|
||||
"play-pause": "Lecture/Pause",
|
||||
"previous": "Précédent",
|
||||
"quit": "Quitter",
|
||||
"restart": "Redémarrer l'application",
|
||||
"show": "Afficher la fenêtre"
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"adblocker": {
|
||||
"description": "Bloquer toutes les annonces et le suivi par défaut",
|
||||
"menu": {
|
||||
"blocker": "Bloqueur"
|
||||
},
|
||||
"name": "Bloqueur de publicités"
|
||||
},
|
||||
"album-color-theme": {
|
||||
"description": "Applique un thème dynamique et des effets visuels basés sur la palette des couleurs de l'album",
|
||||
"name": "Thème de couleur d'album"
|
||||
},
|
||||
"ambient-mode": {
|
||||
"description": "Applique un effet d'éclairage en jetant des couleurs douces de la vidéo, dans le fond de votre écran.",
|
||||
"menu": {
|
||||
"blur-amount": {
|
||||
"label": "Quantité de flou",
|
||||
"submenu": {
|
||||
"pixels": "{{blurAmount}} pixels"
|
||||
}
|
||||
},
|
||||
"buffer": {
|
||||
"label": "Tampon",
|
||||
"submenu": {
|
||||
"buffer": "{{buffer}}"
|
||||
}
|
||||
},
|
||||
"opacity": {
|
||||
"label": "Opacité",
|
||||
"submenu": {
|
||||
"percent": "{{opacity}}%"
|
||||
}
|
||||
},
|
||||
"quality": {
|
||||
"label": "Qualité",
|
||||
"submenu": {
|
||||
"pixels": "{{quality}} pixels"
|
||||
}
|
||||
},
|
||||
"size": {
|
||||
"label": "Taille",
|
||||
"submenu": {
|
||||
"percent": "{{size}}%"
|
||||
}
|
||||
},
|
||||
"smoothness-transition": {
|
||||
"label": "Transition en douceur",
|
||||
"submenu": {
|
||||
"during": "Pendant {{interpolationTime}} s"
|
||||
}
|
||||
},
|
||||
"use-fullscreen": {
|
||||
"label": "Utilisation du mode plein écran"
|
||||
}
|
||||
},
|
||||
"name": "Mode ambiant"
|
||||
},
|
||||
"audio-compressor": {
|
||||
"description": "Appliquer une compression à l'audio (diminue le volume des parties les plus fortes du signal et augmente le volume des parties les plus faibles)",
|
||||
"name": "Compresseur audio"
|
||||
},
|
||||
"blur-nav-bar": {
|
||||
"description": "Rend la barre de navigation transparente et floue",
|
||||
"name": "Barre de navigation floue"
|
||||
},
|
||||
"bypass-age-restrictions": {
|
||||
"description": "Contourner la vérification de l'âge de YouTube",
|
||||
"name": "Contourner les restrictions d’âge"
|
||||
},
|
||||
"captions-selector": {
|
||||
"description": "Sélecteur de sous-titres pour les pistes audio YouTube Music",
|
||||
"menu": {
|
||||
"autoload": "Sélectionner automatiquement la dernière légende utilisée",
|
||||
"disable-captions": "Pas de sous-titres par défaut"
|
||||
},
|
||||
"name": "Sélecteur de sous-titres",
|
||||
"prompt": {
|
||||
"selector": {
|
||||
"label": "Langue de sous-titrage actuelle : {{language}}",
|
||||
"none": "Aucun",
|
||||
"title": "Sélectionnez la langue des sous-titres"
|
||||
}
|
||||
},
|
||||
"templates": {
|
||||
"title": "Ouvrir le sélecteur de sous-titres"
|
||||
}
|
||||
},
|
||||
"compact-sidebar": {
|
||||
"description": "Toujours définir la barre latérale en mode compact",
|
||||
"name": "Barre latérale compacte"
|
||||
},
|
||||
"crossfade": {
|
||||
"description": "Fondu enchaîné entre les chansons",
|
||||
"menu": {
|
||||
"advanced": "Avancé"
|
||||
},
|
||||
"name": "Fondu enchaîné [bêta]",
|
||||
"prompt": {
|
||||
"options": {
|
||||
"multi-input": {
|
||||
"fade-in-duration": "Durée du fondu (millisecondes)",
|
||||
"fade-out-duration": "Durée du fondu (millisecondes)",
|
||||
"fade-scaling": {
|
||||
"label": "Mise à l'échelle du fondu",
|
||||
"linear": "Linéaire",
|
||||
"logarithmic": "Logarithmique"
|
||||
},
|
||||
"seconds-before-end": "Fondu enchaîné N secondes avant la fin"
|
||||
},
|
||||
"title": "Options de fondu enchaîné"
|
||||
}
|
||||
}
|
||||
},
|
||||
"disable-autoplay": {
|
||||
"description": "Fait démarrer la chanson en mode \"pause\"",
|
||||
"menu": {
|
||||
"apply-once": "S'applique seulement au démarrage"
|
||||
},
|
||||
"name": "Désactiver la lecture automatique"
|
||||
},
|
||||
"discord": {
|
||||
"backend": {
|
||||
"already-connected": "Tentative de connexion avec une connexion active",
|
||||
"connected": "Connecté à Discord",
|
||||
"disconnected": "Déconnecté de Discord"
|
||||
},
|
||||
"description": "Montrez à vos amis ce que vous écoutez avec Rich Presence",
|
||||
"menu": {
|
||||
"auto-reconnect": "Reconnexion automatique",
|
||||
"clear-activity": "Effacer l'activité",
|
||||
"clear-activity-after-timeout": "Effacer l’activité après un délai d’attente",
|
||||
"connected": "Connecté",
|
||||
"disconnected": "Déconnecté",
|
||||
"hide-duration-left": "Masquer la durée restante",
|
||||
"hide-github-button": "Masquer le bouton du lien GitHub",
|
||||
"play-on-youtube-music": "Jouer sur YouTube Music",
|
||||
"set-inactivity-timeout": "Définir le délai d'inactivité"
|
||||
},
|
||||
"name": "Discord Rich Presence",
|
||||
"prompt": {
|
||||
"set-inactivity-timeout": {
|
||||
"label": "Entrez le délai d'inactivité en secondes :",
|
||||
"title": "Définir le délai d'inactivité"
|
||||
}
|
||||
}
|
||||
},
|
||||
"downloader": {
|
||||
"backend": {
|
||||
"dialog": {
|
||||
"error": {
|
||||
"buttons": {
|
||||
"ok": "Ok"
|
||||
},
|
||||
"message": "Argh ! Désolé, le téléchargement a échoué…",
|
||||
"title": "Erreur de téléchargement !"
|
||||
},
|
||||
"start-download-playlist": {
|
||||
"buttons": {
|
||||
"ok": "Ok"
|
||||
},
|
||||
"detail": "({{playlistSize}} chansons)",
|
||||
"message": "Téléchargement de la playlist {{playlistTitle}}",
|
||||
"title": "Téléchargement a commencé"
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"conversion-progress": "Conversion : {{percent}} %",
|
||||
"converting": "Conversion…",
|
||||
"done": "Terminé : {{filePath}}",
|
||||
"download-info": "Téléchargement {{artist}} - {{title}} [{{videoId}}",
|
||||
"download-progress": "Télécharger: {{percent}}%",
|
||||
"downloading": "Télécharge…",
|
||||
"downloading-counter": "Télécharge {{current}}/{{total}}…",
|
||||
"downloading-playlist": "Téléchargement de la playlist \"{{playlistTitle}}\" – {{playlistSize}} chansons ({{playlistId}})",
|
||||
"error-while-downloading": "Erreur lors du téléchargement de \"{{author}} - {{title}}\" : {{error}}",
|
||||
"folder-already-exists": "Le dossier {{playlistFolder}} existe déjà",
|
||||
"getting-playlist-info": "Obtention d'informations sur la liste de lecture…",
|
||||
"loading": "Chargement…",
|
||||
"playlist-has-only-one-song": "La liste de lecture ne contient qu'un seul élément, téléchargement du morceau seul",
|
||||
"playlist-id-not-found": "Aucun ID de liste de lecture trouvé",
|
||||
"playlist-is-empty": "La liste de lecture est vide",
|
||||
"playlist-is-mix-or-private": "Erreur lors de l'obtention des informations sur la liste de lecture : assurez-vous qu'il ne s'agit pas d'une liste privée ou \"Mixée pour vous\"\n\n{{error}}",
|
||||
"preparing-file": "Péparer des fichier…",
|
||||
"saving": "Sauvegarde…",
|
||||
"trying-to-get-playlist-id": "Obtention de l'ID de la liste de lecture : {{playlistId}}",
|
||||
"video-id-not-found": "Vidéo non trouvée",
|
||||
"writing-id3": "Écriture des balises ID3…"
|
||||
}
|
||||
},
|
||||
"description": "Télécharge les fichiers MP3/source audio directement depuis l'interface",
|
||||
"menu": {
|
||||
"choose-download-folder": "Choisissez le dossier de téléchargement",
|
||||
"download-playlist": "Télécharger la liste de lecture",
|
||||
"presets": "Préconfigurations",
|
||||
"skip-existing": "Passer les fichiers existants"
|
||||
},
|
||||
"name": "Téléchargeur",
|
||||
"renderer": {
|
||||
"can-not-update-progress": "Impossible de mettre à jour la progression"
|
||||
},
|
||||
"templates": {
|
||||
"button": "Télécharger"
|
||||
}
|
||||
},
|
||||
"exponential-volume": {
|
||||
"description": "Rend le curseur de volume exponentiel afin qu'il soit plus facile de sélectionner des volumes plus faibles.",
|
||||
"name": "Volume exponentiel"
|
||||
},
|
||||
"in-app-menu": {
|
||||
"description": "Donne aux barres de menus un aspect élégant, sombre ou aux couleurs de l'album",
|
||||
"menu": {
|
||||
"hide-dom-window-controls": "Masquer les contrôles de la fenêtre DOM"
|
||||
},
|
||||
"name": "Menu intégré à l'application"
|
||||
},
|
||||
"last-fm": {
|
||||
"description": "Ajouter le support du scrobbling pour Last.fm",
|
||||
"name": "Last.fm"
|
||||
},
|
||||
"lumiastream": {
|
||||
"description": "Ajoute la prise en charge de Lumia Stream",
|
||||
"name": "Lumia Stream [bêta]"
|
||||
},
|
||||
"lyrics-genius": {
|
||||
"description": "Ajoute la prise en charge des paroles pour la plupart des chansons",
|
||||
"menu": {
|
||||
"romanized-lyrics": "Paroles romanisées"
|
||||
},
|
||||
"name": "Paroles Genius",
|
||||
"renderer": {
|
||||
"fetched-lyrics": "Paroles récupérées pour Genius"
|
||||
}
|
||||
},
|
||||
"navigation": {
|
||||
"description": "Flèches de navigation Suivant/Retour directement intégrées dans l'interface, comme dans votre navigateur préféré",
|
||||
"name": "Navigation"
|
||||
},
|
||||
"no-google-login": {
|
||||
"description": "Supprimer les boutons et liens de connexion Google de l'interface",
|
||||
"name": "Pas de connexion Google"
|
||||
},
|
||||
"notifications": {
|
||||
"description": "Afficher une notification quand une chanson commence à jouer (les notifications interactives sont disponibles sur Windows)",
|
||||
"menu": {
|
||||
"interactive": "Notifications interactives",
|
||||
"interactive-settings": {
|
||||
"label": "Paramètres interactifs",
|
||||
"submenu": {
|
||||
"hide-button-text": "Masquer le texte du bouton",
|
||||
"refresh-on-play-pause": "Actualiser lors de la lecture/pause",
|
||||
"tray-controls": "Ouvrir/Fermer sur le plateau, cliquez"
|
||||
}
|
||||
},
|
||||
"priority": "Priorité des notifications",
|
||||
"toast-style": "Style des notifications \"Toast\"",
|
||||
"unpause-notification": "Afficher la notification lors de la reprise"
|
||||
},
|
||||
"name": "Notifications"
|
||||
},
|
||||
"picture-in-picture": {
|
||||
"description": "Permet de basculer l’application en mode image dans image",
|
||||
"menu": {
|
||||
"always-on-top": "Toujours en haut",
|
||||
"hotkey": {
|
||||
"label": "Raccourci clavier",
|
||||
"prompt": {
|
||||
"keybind-options": {
|
||||
"hotkey": "Raccourci clavier"
|
||||
},
|
||||
"label": "Choisissez un raccourci clavier pour activer l'image dans l'image",
|
||||
"title": "Touche de raccourci Image dans l'image"
|
||||
}
|
||||
},
|
||||
"save-window-position": "Enregistrer la position de la fenêtre",
|
||||
"save-window-size": "Enregistrer la taille de la fenêtre",
|
||||
"use-native-pip": "Utiliser le mode image dans image natif du navigateur"
|
||||
},
|
||||
"name": "Image dans l'image",
|
||||
"templates": {
|
||||
"button": "Image dans l'image"
|
||||
}
|
||||
},
|
||||
"playback-speed": {
|
||||
"description": "Écoutez vite, écoutez lentement ! Ajoute un curseur qui contrôle la vitesse de la chanson",
|
||||
"name": "Vitesse de lecture",
|
||||
"templates": {
|
||||
"button": "Vitesse"
|
||||
}
|
||||
},
|
||||
"precise-volume": {
|
||||
"description": "Contrôlez le volume avec précision à l'aide de la molette de la souris/des raccourcis clavier, avec une interface personnalisée et des étapes de volume personnalisables",
|
||||
"menu": {
|
||||
"arrows-shortcuts": "Contrôles avec les touches fléchées",
|
||||
"custom-volume-steps": "Définir des étapes de volume personnalisées",
|
||||
"global-shortcuts": "Raccourcis clavier globaux"
|
||||
},
|
||||
"name": "Volume précis",
|
||||
"prompt": {
|
||||
"global-shortcuts": {
|
||||
"keybind-options": {
|
||||
"decrease": "Diminuer le volume",
|
||||
"increase": "Augmenter le volume"
|
||||
},
|
||||
"label": "Choisissez les raccourcis clavier du volume global :",
|
||||
"title": "Raccourcis clavier de volume global"
|
||||
},
|
||||
"volume-steps": {
|
||||
"label": "Choisissez les étapes d'augmentation/diminution du volume",
|
||||
"title": "Étapes de volume"
|
||||
}
|
||||
}
|
||||
},
|
||||
"quality-changer": {
|
||||
"backend": {
|
||||
"dialog": {
|
||||
"quality-changer": {
|
||||
"detail": "Qualité actuelle : {{quality}}",
|
||||
"message": "Choisissez la qualité vidéo :",
|
||||
"title": "Choisissez la qualité vidéo"
|
||||
}
|
||||
}
|
||||
},
|
||||
"description": "Permet de changer la qualité vidéo avec un bouton sur la vidéo",
|
||||
"name": "Changeur de qualité vidéo"
|
||||
},
|
||||
"shortcuts": {
|
||||
"description": "Permet de définir des raccourcis clavier globaux pour la lecture (lecture/pause/suivant/précédent) + désactiver l'OSD multimédia en remplaçant les touches multimédias + activer Ctrl/CMD + F pour rechercher + activer la prise en charge Linux MPRIS pour les touches multimédias + raccourcis clavier personnalisés pour les utilisateurs avancés",
|
||||
"menu": {
|
||||
"override-media-keys": "Remplacer les touches multimédias",
|
||||
"set-keybinds": "Définir les contrôles globaux des morceaux"
|
||||
},
|
||||
"name": "Raccourcis (& MPRIS)",
|
||||
"prompt": {
|
||||
"keybind": {
|
||||
"keybind-options": {
|
||||
"next": "Suivant",
|
||||
"play-pause": "Lecture / Pause",
|
||||
"previous": "Précédent"
|
||||
},
|
||||
"label": "Choisissez les raccourcis clavier globaux pour le contrôle des morceaux :",
|
||||
"title": "Raccourcis clavier globaux"
|
||||
}
|
||||
}
|
||||
},
|
||||
"skip-disliked-songs": {
|
||||
"description": "Passer les musiques que je n'aime pas"
|
||||
},
|
||||
"skip-silences": {
|
||||
"description": "Ignorer automatiquement les sections de silence dans les chansons",
|
||||
"name": "Passer les silences"
|
||||
},
|
||||
"sponsorblock": {
|
||||
"description": "Saute automatiquement les parties non musicales comme l'intro/outro ou les parties de clips vidéo où la chanson n'est pas lue",
|
||||
"name": "SponsorBlock"
|
||||
},
|
||||
"taskbar-mediacontrol": {
|
||||
"description": "Contrôlez la lecture depuis votre barre des tâches Windows",
|
||||
"name": "Contrôle multimédia de la barre des tâches"
|
||||
},
|
||||
"touchbar": {
|
||||
"description": "Ajoute un widget TouchBar pour les utilisateurs de macOS",
|
||||
"name": "TouchBar"
|
||||
},
|
||||
"tuna-obs": {
|
||||
"description": "Intégration avec le plugin OBS Tuna",
|
||||
"name": "Tuna OBS"
|
||||
},
|
||||
"video-toggle": {
|
||||
"description": "Ajoute un bouton pour basculer entre le mode Vidéo/Chanson. peut également supprimer tout l'onglet vidéo",
|
||||
"menu": {
|
||||
"align": {
|
||||
"label": "Alignement",
|
||||
"submenu": {
|
||||
"left": "Gauche",
|
||||
"middle": "Milieu",
|
||||
"right": "Droite"
|
||||
}
|
||||
},
|
||||
"force-hide": "Forcer la suppression de l'onglet vidéo",
|
||||
"mode": {
|
||||
"label": "Mode",
|
||||
"submenu": {
|
||||
"custom": "Bascule personnalisée",
|
||||
"disabled": "Désactivé",
|
||||
"native": "Bascule native"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Basculer la vidéo",
|
||||
"templates": {
|
||||
"button": "Musique"
|
||||
}
|
||||
},
|
||||
"visualizer": {
|
||||
"description": "Ajoute un visualiseur au lecteur",
|
||||
"menu": {
|
||||
"visualizer-type": "Type de visualiseur"
|
||||
},
|
||||
"name": "Visualiseur"
|
||||
}
|
||||
}
|
||||
}
|
||||
19
src/i18n/resources/id.json
Normal file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"common": {
|
||||
"console": {
|
||||
"plugins": {
|
||||
"execute-failed": "Gagal saat mengeksekusi plugin {{pluginName}}::{{contextName}}",
|
||||
"executed-at-ms": "Plugin {{pluginName}}::{{contextName}} dieksekusi pada {{ms}}ms",
|
||||
"initialize-failed": "Gagal dalam menginisialisasi plugin \"{{pluginName}}\"",
|
||||
"load-all": "Memuat semua plugin",
|
||||
"load-failed": "Gagal memuat plugin \"{{pluginName}}\"",
|
||||
"loaded": "Plugin \"{{pluginName}}\" dimuat"
|
||||
}
|
||||
}
|
||||
},
|
||||
"language": {
|
||||
"code": "id",
|
||||
"local-name": "Bahasa Indonesia",
|
||||
"name": "Indonesian"
|
||||
}
|
||||
}
|
||||
598
src/i18n/resources/it.json
Normal file
@ -0,0 +1,598 @@
|
||||
{
|
||||
"common": {
|
||||
"console": {
|
||||
"plugins": {
|
||||
"execute-failed": "È stato impossibile eseguire il plugin {{pluginName}}::{{contextName}}",
|
||||
"executed-at-ms": "Il plugin {{pluginName}}:{{contextName}} è stato eseguito a {{ms}}ms",
|
||||
"initialize-failed": "Inizializzazione del plugin \"{{pluginName}}\" fallita",
|
||||
"load-all": "Carica tutti i plugin",
|
||||
"load-failed": "Caricamento del plugin \"{{pluginName}}\" non riuscito",
|
||||
"loaded": "Plugin \"{{pluginName}}\" caricato",
|
||||
"unload-failed": "Rimozione del plugin \"{{pluginName}}\" fallita",
|
||||
"unloaded": "Plugin \"{{pluginName}}\" rimosso"
|
||||
}
|
||||
}
|
||||
},
|
||||
"language": {
|
||||
"code": "it",
|
||||
"local-name": "Italiano",
|
||||
"name": "Italian"
|
||||
},
|
||||
"main": {
|
||||
"console": {
|
||||
"did-finish-load": {
|
||||
"dev-tools": "Caricamento concluso. DevTools aperto"
|
||||
},
|
||||
"i18n": {
|
||||
"loaded": "i18n caricato"
|
||||
},
|
||||
"second-instance": {
|
||||
"receive-command": "Comando ricevuto tramite protocollo: \"{{command}}\""
|
||||
},
|
||||
"theme": {
|
||||
"css-file-not-found": "Il file CSS \"{{cssFile}}\" non esiste, ignorato"
|
||||
},
|
||||
"unresponsive": {
|
||||
"details": "Errore di mancata risposta!\n{{error}}"
|
||||
},
|
||||
"when-ready": {
|
||||
"clearing-cache-after-20s": "Sto liberando la cache dell'app"
|
||||
},
|
||||
"window": {
|
||||
"tried-to-render-offscreen": "La finestra ha cercato di renderizzare fuori schermo, windowSize={{windowSize}}, displaySize={{displaySize}}, position={{position}}\""
|
||||
}
|
||||
},
|
||||
"dialog": {
|
||||
"hide-menu-enabled": {
|
||||
"detail": "Il menu è nascosto, utilizza 'Alt' per visualizzarlo (o 'Escape' se si utilizza il Menu In-App)\"",
|
||||
"message": "'Nascondi menu' è attivo",
|
||||
"title": "'Nascondi menu' attivo"
|
||||
},
|
||||
"need-to-restart": {
|
||||
"buttons": {
|
||||
"later": "In seguito",
|
||||
"restart-now": "Riavvia ora"
|
||||
},
|
||||
"detail": "Riavviare per attivare il plugin\"{{pluginName}}\"",
|
||||
"message": "\"{{pluginName}}\" deve essere riavviato",
|
||||
"title": "Riavvio richiesto"
|
||||
},
|
||||
"unresponsive": {
|
||||
"buttons": {
|
||||
"quit": "Arresta",
|
||||
"relaunch": "Riavvia",
|
||||
"wait": "Attendi"
|
||||
},
|
||||
"detail": "Ci dispiace per l'inconveniente! Scegli cosa fare:",
|
||||
"message": "L'applicazione non risponde",
|
||||
"title": "La finestra non risponde"
|
||||
},
|
||||
"update-available": {
|
||||
"buttons": {
|
||||
"disable": "Disattiva gli aggiornamenti",
|
||||
"download": "Download",
|
||||
"ok": "OK"
|
||||
},
|
||||
"detail": "È disponibile una nuova versione scaricabile all'indirizzo {{downloadLink}}",
|
||||
"message": "È disponibile una nuova versione",
|
||||
"title": "Aggiornamento disponibile"
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"about": "Informazioni",
|
||||
"navigation": {
|
||||
"label": "Navigazione",
|
||||
"submenu": {
|
||||
"copy-current-url": "Copia l'URL corrente",
|
||||
"go-back": "Pagina indietro",
|
||||
"go-forward": "Pagina avanti",
|
||||
"quit": "Esci",
|
||||
"restart": "Riavvia l'app"
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"label": "Opzioni",
|
||||
"submenu": {
|
||||
"advanced-options": {
|
||||
"label": "Opzioni avanzate",
|
||||
"submenu": {
|
||||
"auto-reset-app-cache": "Reimposta la cache dell'app quando viene riavviata",
|
||||
"disable-hardware-acceleration": "Disabilita l'accelerazione hardware",
|
||||
"edit-config-json": "Modificare config.json",
|
||||
"override-user-agent": "Sovrascrivi User-Agent",
|
||||
"restart-on-config-changes": "Riavvia alla modifica delle impostazioni",
|
||||
"set-proxy": {
|
||||
"label": "Imposta il proxy",
|
||||
"prompt": {
|
||||
"label": "Inserisci l'indirizzo proxy: (lascia vuoto per disabilitare)",
|
||||
"placeholder": "Esempio: SOKS5://127.0.0.1:9999",
|
||||
"title": "Imposta il proxy"
|
||||
}
|
||||
},
|
||||
"toggle-dev-tools": "Attiva/disattiva DevTools"
|
||||
}
|
||||
},
|
||||
"always-on-top": "Sempre in cima",
|
||||
"auto-update": "Aggiornamento automatico",
|
||||
"hide-menu": {
|
||||
"dialog": {
|
||||
"message": "Il menu verrà nascosto al prossimo avvio. Utilizzare [Alt] per mostrarlo (o backtick [`] se si utilizza il Menu In-App)",
|
||||
"title": "Nascondi menu abilitato"
|
||||
},
|
||||
"label": "Nascondi menu"
|
||||
},
|
||||
"language": {
|
||||
"dialog": {
|
||||
"message": "La lingua verrà cambiata dopo il riavvio",
|
||||
"title": "Lingua cambiata"
|
||||
},
|
||||
"label": "Lingua",
|
||||
"submenu": {
|
||||
"to-help-translate": "Vuoi aiutare a tradurre? Clicca qui"
|
||||
}
|
||||
},
|
||||
"resume-on-start": "Riprendi a riprodurre l'ultimo brano all'avvio dell'app",
|
||||
"single-instance-lock": "Permetti una sola istanza dell'app",
|
||||
"start-at-login": "Avvia al login",
|
||||
"starting-page": {
|
||||
"label": "Pagina iniziale",
|
||||
"unset": "Non impostato"
|
||||
},
|
||||
"tray": {
|
||||
"label": "Mostra icona nel tray",
|
||||
"submenu": {
|
||||
"disabled": "Disabilita",
|
||||
"enabled-and-hide-app": "Abilita e nascondi l'app",
|
||||
"enabled-and-show-app": "Abilita e mostra l'app",
|
||||
"play-pause-on-click": "Riproduci/Pausa al click sull'icona"
|
||||
}
|
||||
},
|
||||
"visual-tweaks": {
|
||||
"label": "Miglioramenti visivi",
|
||||
"submenu": {
|
||||
"like-buttons": {
|
||||
"default": "Predefinito",
|
||||
"force-show": "Forza la visualizzazione",
|
||||
"hide": "Nascondi",
|
||||
"label": "Pulsanti Like"
|
||||
},
|
||||
"remove-upgrade-button": "Rimuovi il pulsante aggiorna",
|
||||
"theme": {
|
||||
"label": "Tema",
|
||||
"submenu": {
|
||||
"import-css-file": "Importa file CSS personalizzato",
|
||||
"no-theme": "Nessun tema"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"enabled": "Attivato",
|
||||
"label": "Plugin"
|
||||
},
|
||||
"view": {
|
||||
"label": "Visualizzazione",
|
||||
"submenu": {
|
||||
"force-reload": "Forza l'aggiornamento",
|
||||
"reload": "Aggiorna",
|
||||
"reset-zoom": "Ripristina dimensione",
|
||||
"toggle-fullscreen": "Attiva/disattiva Schermo Intero",
|
||||
"zoom-in": "Zoom in",
|
||||
"zoom-out": "Zoom out"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tray": {
|
||||
"next": "Prossimo",
|
||||
"play-pause": "Riproduci/Pausa",
|
||||
"previous": "Precedente",
|
||||
"quit": "Esci",
|
||||
"restart": "Riavvia l'app",
|
||||
"show": "Mostra finestra"
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"adblocker": {
|
||||
"description": "Blocca tutti gli annunci e i tracker",
|
||||
"menu": {
|
||||
"blocker": "Blocco"
|
||||
},
|
||||
"name": "Adblocker"
|
||||
},
|
||||
"album-color-theme": {
|
||||
"description": "Applica un tema dinamico e degli effetti visivi basandosi sul colore dell'album",
|
||||
"name": "Tema abbinato a colore album"
|
||||
},
|
||||
"ambient-mode": {
|
||||
"description": "Applica un effetto di illuminazione proiettando i colori delicati del video sullo sfondo dello schermo.",
|
||||
"menu": {
|
||||
"blur-amount": {
|
||||
"label": "Intensità sfocatura",
|
||||
"submenu": {
|
||||
"pixels": "{{blurAmount}} pixel"
|
||||
}
|
||||
},
|
||||
"buffer": {
|
||||
"label": "Buffer",
|
||||
"submenu": {
|
||||
"buffer": "{{buffer}}"
|
||||
}
|
||||
},
|
||||
"opacity": {
|
||||
"label": "Trasparenza",
|
||||
"submenu": {
|
||||
"percent": "{{opacity}}%"
|
||||
}
|
||||
},
|
||||
"quality": {
|
||||
"label": "Qualità",
|
||||
"submenu": {
|
||||
"pixels": "{{quality}} pixel"
|
||||
}
|
||||
},
|
||||
"size": {
|
||||
"label": "Dimensione",
|
||||
"submenu": {
|
||||
"percent": "{{size}}%"
|
||||
}
|
||||
},
|
||||
"smoothness-transition": {
|
||||
"label": "Fluidità transizione",
|
||||
"submenu": {
|
||||
"during": "Per {{interpolationTime}} _s"
|
||||
}
|
||||
},
|
||||
"use-fullscreen": {
|
||||
"label": "Utilizzo di schermo intero"
|
||||
}
|
||||
},
|
||||
"name": "Modalità Ambiente"
|
||||
},
|
||||
"audio-compressor": {
|
||||
"description": "Attiva la compressione audio (abbassa il volume delle parti più alte e alza quello delle parti più basse del segnale)",
|
||||
"name": "Compressore audio"
|
||||
},
|
||||
"blur-nav-bar": {
|
||||
"description": "Rende la barra di navigazione trasparente e sfuocata",
|
||||
"name": "Barra di navigazione trasparente"
|
||||
},
|
||||
"bypass-age-restrictions": {
|
||||
"description": "Bypassa la verifica dell'età di YouTube",
|
||||
"name": "Aggira i limiti d'età"
|
||||
},
|
||||
"captions-selector": {
|
||||
"description": "Selettore sottotitolo per le tracce audio di YouTube",
|
||||
"menu": {
|
||||
"autoload": "Seleziona automaticamente l'ultimo sottotitolo utilizzato",
|
||||
"disable-captions": "Disattiva i sottotitoli"
|
||||
},
|
||||
"name": "Selettore Sottotitoli",
|
||||
"prompt": {
|
||||
"selector": {
|
||||
"label": "Lingua del sottotitolo attuale: {{language}}",
|
||||
"none": "Nessuno",
|
||||
"title": "Scegli la lingua del sottotitolo"
|
||||
}
|
||||
},
|
||||
"templates": {
|
||||
"title": "Apri il selettore dei sottotitoli"
|
||||
}
|
||||
},
|
||||
"compact-sidebar": {
|
||||
"description": "Imposta sempre la barra laterale in modalità compatta",
|
||||
"name": "Barra laterale compatta"
|
||||
},
|
||||
"crossfade": {
|
||||
"description": "Crossfade tra i brani",
|
||||
"menu": {
|
||||
"advanced": "Impostazioni avanzate"
|
||||
},
|
||||
"name": "Crossfade [beta]",
|
||||
"prompt": {
|
||||
"options": {
|
||||
"multi-input": {
|
||||
"fade-in-duration": "Durata dissolvenza in entrata (ms)",
|
||||
"fade-out-duration": "Durata dissolvenza in uscita (ms)",
|
||||
"fade-scaling": {
|
||||
"label": "Transizione dissolvenza",
|
||||
"linear": "Lineare",
|
||||
"logarithmic": "Logaritmica"
|
||||
},
|
||||
"seconds-before-end": "N° secondi di crossfade prima della fine"
|
||||
},
|
||||
"title": "Opzioni crossfade"
|
||||
}
|
||||
}
|
||||
},
|
||||
"disable-autoplay": {
|
||||
"description": "Fa iniziare i brani in modalità \"pausa\"",
|
||||
"menu": {
|
||||
"apply-once": "Solo all'avvio"
|
||||
},
|
||||
"name": "Disattiva autoplay"
|
||||
},
|
||||
"discord": {
|
||||
"backend": {
|
||||
"already-connected": "Tenta di connettersi con connessione attiva",
|
||||
"connected": "Connesso a Discord",
|
||||
"disconnected": "Scollegato da Discord"
|
||||
},
|
||||
"description": "Mostra ai tuoi amici cosa ascolti con Rich Presence",
|
||||
"menu": {
|
||||
"auto-reconnect": "Riconnessione automatica",
|
||||
"clear-activity": "Rimuovi attività",
|
||||
"clear-activity-after-timeout": "Cancella attività dopo il timeout",
|
||||
"connected": "Connesso",
|
||||
"disconnected": "Disconnesso",
|
||||
"hide-duration-left": "Nascondi la durata rimasta",
|
||||
"hide-github-button": "Nascondi il pulsante link a GitHub",
|
||||
"play-on-youtube-music": "Riproduci su YouTube Music",
|
||||
"set-inactivity-timeout": "Imposta il timeout di inattività"
|
||||
},
|
||||
"name": "Discord Rich Presence",
|
||||
"prompt": {
|
||||
"set-inactivity-timeout": {
|
||||
"label": "Inserisci il timeout di inattività in secondi:",
|
||||
"title": "Imposta il timeout di inattività"
|
||||
}
|
||||
}
|
||||
},
|
||||
"downloader": {
|
||||
"backend": {
|
||||
"dialog": {
|
||||
"error": {
|
||||
"buttons": {
|
||||
"ok": "OK"
|
||||
},
|
||||
"message": "Mi dispiace, download fallito…",
|
||||
"title": "Errore nel download!"
|
||||
},
|
||||
"start-download-playlist": {
|
||||
"buttons": {
|
||||
"ok": "OK"
|
||||
},
|
||||
"detail": "({{playlistSize}} canzoni)",
|
||||
"message": "Scarica Playlist {{playlistTitle}}",
|
||||
"title": "Download iniziato"
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"conversion-progress": "Conversione: {{percent}}%",
|
||||
"converting": "Sto convertendo…",
|
||||
"done": "Fatto: {{filePath}}",
|
||||
"download-info": "Sto scaricando {{artist}} - {{title}} [{{videoId}}",
|
||||
"download-progress": "Download: {{percent}}%",
|
||||
"downloading": "Sto scaricando…",
|
||||
"downloading-counter": "Sto scaricando {{current}}/{{total}}…",
|
||||
"downloading-playlist": "Sto scaricando la playlist \"{{playlistTitle}}\" - {{playlistSize}} brani({{playlistId}})",
|
||||
"error-while-downloading": "Errore di download \"{{author}} - {{title}}\": {{error}}",
|
||||
"folder-already-exists": "La cartella {{playlistFolder}} è già esistente",
|
||||
"getting-playlist-info": "Sto ottenendo le info sulla playlist…",
|
||||
"loading": "Caricamento…",
|
||||
"playlist-has-only-one-song": "La playlist ha un solo elemento, lo sto scaricando direttamente",
|
||||
"playlist-id-not-found": "Nessun ID playlist trovato",
|
||||
"playlist-is-empty": "La playlist è vuota",
|
||||
"playlist-is-mix-or-private": "Errore nell'ottenere info sulla playlist: assicurati che non sia una playlist privata o un \"Mixtape per te\"\n\n{{error}}",
|
||||
"preparing-file": "Sto preparando il file…",
|
||||
"saving": "Sto salvando…",
|
||||
"trying-to-get-playlist-id": "Sto cercando di ottenere l'ID della playlist: {{playlistId}}",
|
||||
"video-id-not-found": "Video non trovato",
|
||||
"writing-id3": "Sto scrivendo i tag ID3…"
|
||||
}
|
||||
},
|
||||
"description": "Download MP3 / sorgenti audio direttamente dall'interfaccia",
|
||||
"menu": {
|
||||
"choose-download-folder": "Scegli cartella download",
|
||||
"download-playlist": "Scarica la playlist",
|
||||
"presets": "Preimpostazioni",
|
||||
"skip-existing": "Salta i file esistenti"
|
||||
},
|
||||
"name": "Downloader",
|
||||
"renderer": {
|
||||
"can-not-update-progress": "Impossibile aggiornare l'avanzamento"
|
||||
},
|
||||
"templates": {
|
||||
"button": "Scarica"
|
||||
}
|
||||
},
|
||||
"exponential-volume": {
|
||||
"description": "Rende esponenziale il cursore del volume, in modo da facilitare la selezione di volumi più bassi.",
|
||||
"name": "Volume esponenziale"
|
||||
},
|
||||
"in-app-menu": {
|
||||
"description": "Migliora l'aspetto delle barre del menu con un look scuro o basato sul colore dell'album",
|
||||
"menu": {
|
||||
"hide-dom-window-controls": "Nascondi i controlli delle finestre DOM"
|
||||
},
|
||||
"name": "Menu In-App"
|
||||
},
|
||||
"last-fm": {
|
||||
"description": "Aggiungi supporto per lo scrobbling su Last.fm",
|
||||
"name": "Last.fm"
|
||||
},
|
||||
"lumiastream": {
|
||||
"description": "Aggiungi supporto per Lumia Stream",
|
||||
"name": "Lumia Stream [beta]"
|
||||
},
|
||||
"lyrics-genius": {
|
||||
"description": "Aggiunge il supporto dei testi per la maggior parte delle canzoni",
|
||||
"menu": {
|
||||
"romanized-lyrics": "Alfabeto latino per i brani con testo in caratteri orientali"
|
||||
},
|
||||
"name": "Lyrics Genius",
|
||||
"renderer": {
|
||||
"fetched-lyrics": "Testi recuperati per Genius"
|
||||
}
|
||||
},
|
||||
"navigation": {
|
||||
"description": "Frecce di navigazione Avanti/Indietro integrate direttamente nell'interfaccia, come nel tuo browser preferito",
|
||||
"name": "Navigazione"
|
||||
},
|
||||
"no-google-login": {
|
||||
"description": "Rimuovi i pulsanti di accesso e i link di Google dall'interfaccia",
|
||||
"name": "Nessun login di Google"
|
||||
},
|
||||
"notifications": {
|
||||
"description": "Mostra una notifica quando viene riprodotto un brano (le notifiche interattive sono disponibili su Windows)",
|
||||
"menu": {
|
||||
"interactive": "Notifiche interattive",
|
||||
"interactive-settings": {
|
||||
"label": "Impostazioni dell'interazione",
|
||||
"submenu": {
|
||||
"hide-button-text": "Nascondi il testo del pulsante",
|
||||
"refresh-on-play-pause": "Refresh quando si preme Riproduci/Pausa",
|
||||
"tray-controls": "Apri/chiudi cliccando l'icona nel tray"
|
||||
}
|
||||
},
|
||||
"priority": "Priorità di notifica",
|
||||
"toast-style": "Stile Toast",
|
||||
"unpause-notification": "Mostra notifica quando riprendi ascolto"
|
||||
},
|
||||
"name": "Notifiche"
|
||||
},
|
||||
"picture-in-picture": {
|
||||
"description": "Consente di far passare l'app alla modalità Picture-in-Picture",
|
||||
"menu": {
|
||||
"always-on-top": "Sempre in primo piano",
|
||||
"hotkey": {
|
||||
"label": "Hotkey",
|
||||
"prompt": {
|
||||
"keybind-options": {
|
||||
"hotkey": "Hotkey"
|
||||
},
|
||||
"label": "Scegliere un'hotkey per attivare Picture-in-picture",
|
||||
"title": "Picture-in-picture Hotkey"
|
||||
}
|
||||
},
|
||||
"save-window-position": "Salva la posizione della finestra",
|
||||
"save-window-size": "Salva la dimensione della finestra",
|
||||
"use-native-pip": "Usa il PiP nativo del browser"
|
||||
},
|
||||
"name": "Picture-in-Picture",
|
||||
"templates": {
|
||||
"button": "Picture-in-Picture"
|
||||
}
|
||||
},
|
||||
"playback-speed": {
|
||||
"description": "Ascolto veloce, ascolto lento! Aggiunge un cursore che controlla la velocità di riproduzione del brano",
|
||||
"name": "Velocità riproduzione",
|
||||
"templates": {
|
||||
"button": "Velocità"
|
||||
}
|
||||
},
|
||||
"precise-volume": {
|
||||
"description": "Controlla con precisione il volume utilizzando la rotella del mouse, le hotkey o i tasti freccia e usando incrementi di volume personalizzabili",
|
||||
"menu": {
|
||||
"arrows-shortcuts": "Controlla con i tasti freccia",
|
||||
"custom-volume-steps": "Imposta incrementi di volume personalizzati",
|
||||
"global-shortcuts": "Hotkey globali"
|
||||
},
|
||||
"name": "Volume preciso",
|
||||
"prompt": {
|
||||
"global-shortcuts": {
|
||||
"keybind-options": {
|
||||
"decrease": "Diminuisci volume",
|
||||
"increase": "Aumenta volume"
|
||||
},
|
||||
"label": "Scegli i tasti di scelta rapida regolazione volume:",
|
||||
"title": "Tasti di scelta rapida regolazione volume"
|
||||
},
|
||||
"volume-steps": {
|
||||
"label": "Seleziona l'incremento/decremento del volume",
|
||||
"title": "Incrementi volume"
|
||||
}
|
||||
}
|
||||
},
|
||||
"quality-changer": {
|
||||
"backend": {
|
||||
"dialog": {
|
||||
"quality-changer": {
|
||||
"detail": "Qualità attuale: {{quality}}",
|
||||
"message": "Qualità Video:",
|
||||
"title": "Scegli la qualità video"
|
||||
}
|
||||
}
|
||||
},
|
||||
"description": "Permette di cambiare la qualità del video con un pulsante in sovrimpressione",
|
||||
"name": "Cambia qualità video"
|
||||
},
|
||||
"shortcuts": {
|
||||
"description": "Consente di impostare tasti di scelta rapida globali per la riproduzione (riproduci/pausa/successivo/precedente) + disabilita l'OSD multimediale sovrascrivendo i tasti multimediali + abilita Ctrl/CMD + F per la ricerca + abilita il supporto Linux MPRIS per i tasti multimediali + tasti di scelta rapida personalizzati per utenti avanzati.",
|
||||
"menu": {
|
||||
"override-media-keys": "Ridefinisci i tasti multimediali",
|
||||
"set-keybinds": "Imposta i controlli brano globali"
|
||||
},
|
||||
"name": "Scorciatoie (& MPRIS)",
|
||||
"prompt": {
|
||||
"keybind": {
|
||||
"keybind-options": {
|
||||
"next": "Prossimo",
|
||||
"play-pause": "Riproduci / Pausa",
|
||||
"previous": "Precedente"
|
||||
},
|
||||
"label": "Scegli combinazioni di tasti per il controllo dei brani:",
|
||||
"title": "Combinazioni di tasti"
|
||||
}
|
||||
}
|
||||
},
|
||||
"skip-disliked-songs": {
|
||||
"description": "Salta i brani che non ti piacciono",
|
||||
"name": "Salta i brani che non ti piacciono"
|
||||
},
|
||||
"skip-silences": {
|
||||
"description": "Salta automaticamente le parti silenziose nei brani",
|
||||
"name": "Salta silenzi"
|
||||
},
|
||||
"sponsorblock": {
|
||||
"description": "Salta automaticamente le parti non musicali, come l'intro/outro delle canzoni o le parti dei video musicali in cui non viene riprodotto il brano",
|
||||
"name": "Blocco sponsor"
|
||||
},
|
||||
"taskbar-mediacontrol": {
|
||||
"description": "Controlla riproduzione dalla taskbar di Windows",
|
||||
"name": "Controlli multimediali sulla taskbar"
|
||||
},
|
||||
"touchbar": {
|
||||
"description": "Aggiunge un widget TouchBar per gli utenti macOS",
|
||||
"name": "Touch Bar (per MacOS)"
|
||||
},
|
||||
"tuna-obs": {
|
||||
"description": "Integrazione con il plugin OBS Tuna",
|
||||
"name": "Tuna OBS"
|
||||
},
|
||||
"video-toggle": {
|
||||
"description": "Aggiunge un pulsante per passare dalla modalità Video a quella Brano. Può anche rimuovere l'intera scheda Brano/Video",
|
||||
"menu": {
|
||||
"align": {
|
||||
"label": "Allineamento",
|
||||
"submenu": {
|
||||
"left": "Sinistra",
|
||||
"middle": "Centro",
|
||||
"right": "Destra"
|
||||
}
|
||||
},
|
||||
"force-hide": "Rimuovi la scheda Brano/Video",
|
||||
"mode": {
|
||||
"label": "Modalità",
|
||||
"submenu": {
|
||||
"custom": "Brano/Video personalizzato",
|
||||
"disabled": "Disattivato",
|
||||
"native": "Brano/Video nativo"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Selettore Brano/Video",
|
||||
"templates": {
|
||||
"button": "Brano"
|
||||
}
|
||||
},
|
||||
"visualizer": {
|
||||
"description": "Sostituisce al Video un visualizzatore grafico",
|
||||
"menu": {
|
||||
"visualizer-type": "Tipo di visualizzazione"
|
||||
},
|
||||
"name": "Visualizzatore grafico"
|
||||
}
|
||||
}
|
||||
}
|
||||
598
src/i18n/resources/ja.json
Normal file
@ -0,0 +1,598 @@
|
||||
{
|
||||
"common": {
|
||||
"console": {
|
||||
"plugins": {
|
||||
"execute-failed": "プラグイン・{{pluginName}}:{{contextName}}を実行できませんでした",
|
||||
"executed-at-ms": "プラグイン {{pluginName}}::{{contextName}} は {{ms}}ms で実行されました",
|
||||
"initialize-failed": "プラグイン \"{{pluginName}}\" の初期化に失敗",
|
||||
"load-all": "すべてのプラグインをロード中",
|
||||
"load-failed": "プラグイン”{{pluginName}}”のロードが失敗しました",
|
||||
"loaded": "プラグイン”{{pluginName}}”ロード完了",
|
||||
"unload-failed": "プラグインのアンロードに失敗 \"{{pluginName}}\"",
|
||||
"unloaded": "プラグイン {{pluginName}} がアンロードされました"
|
||||
}
|
||||
}
|
||||
},
|
||||
"language": {
|
||||
"code": "ja",
|
||||
"local-name": "日本語",
|
||||
"name": "Japanese"
|
||||
},
|
||||
"main": {
|
||||
"console": {
|
||||
"did-finish-load": {
|
||||
"dev-tools": "ロード完了。デベロッパーツールが開きました"
|
||||
},
|
||||
"i18n": {
|
||||
"loaded": "翻訳ロード完了"
|
||||
},
|
||||
"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": "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": "DevToolsの切り替え"
|
||||
}
|
||||
},
|
||||
"always-on-top": "常に最前面に表示",
|
||||
"auto-update": "自動アップデート",
|
||||
"hide-menu": {
|
||||
"dialog": {
|
||||
"message": "メニューは次の起動から非表示になります。表示するには[Alt]キーを使用します (in-app-menuを使用している場合は[`]を使用します)",
|
||||
"title": "メニューの非表示が有効"
|
||||
},
|
||||
"label": "メニューの非表示"
|
||||
},
|
||||
"language": {
|
||||
"dialog": {
|
||||
"message": "言語は再起動後に変更されます",
|
||||
"title": "言語が変更されました"
|
||||
},
|
||||
"label": "言語設定",
|
||||
"submenu": {
|
||||
"to-help-translate": "翻訳をサポートしたいですか?こちらをクリック"
|
||||
}
|
||||
},
|
||||
"resume-on-start": "起動時に最後の曲を再開する",
|
||||
"single-instance-lock": "単一インスタンスロック",
|
||||
"start-at-login": "windowsのログイン時に起動",
|
||||
"starting-page": {
|
||||
"label": "スターティングページ",
|
||||
"unset": "未設定"
|
||||
},
|
||||
"tray": {
|
||||
"label": "トレイアイコン",
|
||||
"submenu": {
|
||||
"disabled": "無効",
|
||||
"enabled-and-hide-app": "有効 + アプリを非表示",
|
||||
"enabled-and-show-app": "有効 + アプリを表示",
|
||||
"play-pause-on-click": "クリックで再生/一時停止"
|
||||
}
|
||||
},
|
||||
"visual-tweaks": {
|
||||
"label": "見た目の微調整",
|
||||
"submenu": {
|
||||
"like-buttons": {
|
||||
"default": "デフォルト",
|
||||
"force-show": "強制的に表示",
|
||||
"hide": "非表示",
|
||||
"label": "いいねボタン"
|
||||
},
|
||||
"remove-upgrade-button": "アップグレードボタンを削除",
|
||||
"theme": {
|
||||
"label": "テーマ",
|
||||
"submenu": {
|
||||
"import-css-file": "CSSファイルをインポート",
|
||||
"no-theme": "テーマなし"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"enabled": "有効",
|
||||
"label": "プラグイン"
|
||||
},
|
||||
"view": {
|
||||
"label": "表示",
|
||||
"submenu": {
|
||||
"force-reload": "強制再読み込み",
|
||||
"reload": "再読み込み",
|
||||
"reset-zoom": "実際のサイズ",
|
||||
"toggle-fullscreen": "全画面表示を切り替え",
|
||||
"zoom-in": "拡大",
|
||||
"zoom-out": "縮小"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tray": {
|
||||
"next": "次の曲",
|
||||
"play-pause": "再生/一時停止",
|
||||
"previous": "前の曲",
|
||||
"quit": "終了",
|
||||
"restart": "アプリを再起動",
|
||||
"show": "ウィンドウを表示"
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"adblocker": {
|
||||
"description": "すべての広告とトラッカーをブロックj",
|
||||
"menu": {
|
||||
"blocker": "ブロッカー"
|
||||
},
|
||||
"name": "Adblocker"
|
||||
},
|
||||
"album-color-theme": {
|
||||
"description": "アルバムカバーの色をベースにして動的テーマと視覚効果を適用します",
|
||||
"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": "アンビエント モード"
|
||||
},
|
||||
"audio-compressor": {
|
||||
"description": "オーディオにコンプレッサーを適用します(信号での一番大きい部分の音量を下げ、小さい部分の音量を上げる)",
|
||||
"name": "オーディオコンプレッサー"
|
||||
},
|
||||
"blur-nav-bar": {
|
||||
"description": "ナビゲーションバーを透明かつぼやけにします",
|
||||
"name": "ナビゲーションバーの曇り効果"
|
||||
},
|
||||
"bypass-age-restrictions": {
|
||||
"description": "ユーチューブの年齢制限を迂回します",
|
||||
"name": "年齢制限迂回"
|
||||
},
|
||||
"captions-selector": {
|
||||
"description": "YouTube Musicトラック用字幕選択機",
|
||||
"menu": {
|
||||
"autoload": "最後の字幕を自動に選択",
|
||||
"disable-captions": "デフォルトで字幕を無効化"
|
||||
},
|
||||
"name": "字幕選択機",
|
||||
"prompt": {
|
||||
"selector": {
|
||||
"label": "選択した字幕言語: {{language}}",
|
||||
"none": "なし",
|
||||
"title": "字幕の言語を選択"
|
||||
}
|
||||
},
|
||||
"templates": {
|
||||
"title": "字幕選択機を開く"
|
||||
}
|
||||
},
|
||||
"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": "クロスフェード設定"
|
||||
}
|
||||
}
|
||||
},
|
||||
"disable-autoplay": {
|
||||
"description": "曲を「一時停止」モードで始めさせます",
|
||||
"menu": {
|
||||
"apply-once": "起動時のみ適用"
|
||||
},
|
||||
"name": "自動再生を無効化"
|
||||
},
|
||||
"discord": {
|
||||
"backend": {
|
||||
"already-connected": "すでに有効になっている接続に接続を試みました",
|
||||
"connected": "ディスコードに接続中",
|
||||
"disconnected": "Discordから切断されました"
|
||||
},
|
||||
"description": "アクティビティ ステータスで、あなたが聴いている曲を友達に見せましょう",
|
||||
"menu": {
|
||||
"auto-reconnect": "自動再接続",
|
||||
"clear-activity": "アクティビティの削除",
|
||||
"clear-activity-after-timeout": "タイムアウト発生時にアクティビティを削除",
|
||||
"connected": "接続済み",
|
||||
"disconnected": "切断済み",
|
||||
"hide-duration-left": "残りの再生時間を隠す",
|
||||
"hide-github-button": "GitHubリンクボタンを隠す",
|
||||
"play-on-youtube-music": "YouTube Musicで再生",
|
||||
"set-inactivity-timeout": "タイムアウト時間を設定"
|
||||
},
|
||||
"name": "Discordアクティビティステータス",
|
||||
"prompt": {
|
||||
"set-inactivity-timeout": {
|
||||
"label": "非アクティブ時のタイムアウトを秒単位で入力:",
|
||||
"title": "非アクティブタイムアウト"
|
||||
}
|
||||
}
|
||||
},
|
||||
"downloader": {
|
||||
"backend": {
|
||||
"dialog": {
|
||||
"error": {
|
||||
"buttons": {
|
||||
"ok": "OK"
|
||||
},
|
||||
"message": "ダウンロード失敗!ごめんね…",
|
||||
"title": "ダウンロード中にエラーが発生しました!"
|
||||
},
|
||||
"start-download-playlist": {
|
||||
"buttons": {
|
||||
"ok": "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": "プレイリストに1曲しかありません。直接ダウンロードします",
|
||||
"playlist-id-not-found": "プレイリストIDが見つかりません",
|
||||
"playlist-is-empty": "プレイリストは空です",
|
||||
"playlist-is-mix-or-private": "プレイリスト情報をダウンロード中にエラーが発生しました: プレイリストが非公開ではないこと、\"Mixed for you\"ではないことを確認してください\n\n{{error}}",
|
||||
"preparing-file": "ファイルを準備中…",
|
||||
"saving": "保存中…",
|
||||
"trying-to-get-playlist-id": "プレイリストIDを取得中:{{playlistId}}",
|
||||
"video-id-not-found": "動画が見つかりません",
|
||||
"writing-id3": "ID3タグ作成中…"
|
||||
}
|
||||
},
|
||||
"description": "UIから直にMP3・ソースオーディオをダウンロードします",
|
||||
"menu": {
|
||||
"choose-download-folder": "ダウンロードフォルダ",
|
||||
"download-playlist": "プレイリストをダウンロード",
|
||||
"presets": "プリセット",
|
||||
"skip-existing": "存在するファイルをスキップ"
|
||||
},
|
||||
"name": "ダウンローダー",
|
||||
"renderer": {
|
||||
"can-not-update-progress": "進捗を更新できません"
|
||||
},
|
||||
"templates": {
|
||||
"button": "ダウンロード"
|
||||
}
|
||||
},
|
||||
"exponential-volume": {
|
||||
"description": "音量スライダを指数関数的にさせ、低い音量に設定しやすくなります。",
|
||||
"name": "指数音量"
|
||||
},
|
||||
"in-app-menu": {
|
||||
"description": "メニューバーをファンシー、ダーク、またはアルバムカラーの外観にする",
|
||||
"menu": {
|
||||
"hide-dom-window-controls": "DOMウィンドウコントロールを隠す"
|
||||
},
|
||||
"name": "アプリ内メニュー"
|
||||
},
|
||||
"last-fm": {
|
||||
"description": "Last.fmのscrobblingサポートを追加",
|
||||
"name": "Last.fm"
|
||||
},
|
||||
"lumiastream": {
|
||||
"description": "Lumia Streamのサポートを追加",
|
||||
"name": "Lumia Stream [ベータ]"
|
||||
},
|
||||
"lyrics-genius": {
|
||||
"description": "より広い範囲の曲に歌詞を付けます",
|
||||
"menu": {
|
||||
"romanized-lyrics": "ローマ字歌詞"
|
||||
},
|
||||
"name": "Genius 歌詞",
|
||||
"renderer": {
|
||||
"fetched-lyrics": "Geniusから歌詞取得完了"
|
||||
}
|
||||
},
|
||||
"navigation": {
|
||||
"description": "ブラウザの戻る・進むボタンのようにUIからコントロールできるボタン",
|
||||
"name": "ナビゲーション"
|
||||
},
|
||||
"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": "通知"
|
||||
},
|
||||
"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": "ビデオ品質チェンジャー"
|
||||
},
|
||||
"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"
|
||||
},
|
||||
"taskbar-mediacontrol": {
|
||||
"description": "Windowsタスクバーから再生をコントロール",
|
||||
"name": "Taskbar Media Control"
|
||||
},
|
||||
"touchbar": {
|
||||
"description": "masOSユーザー向けにTouchBarウィジェットを追加",
|
||||
"name": "TouchBar"
|
||||
},
|
||||
"tuna-obs": {
|
||||
"description": "OBSのプラグインTunaの統合",
|
||||
"name": "Tuna OBS"
|
||||
},
|
||||
"video-toggle": {
|
||||
"description": "ビデオ/ソングモードを切り替えるボタンを追加します。オプションでビデオタブ全体を削除することもできます",
|
||||
"menu": {
|
||||
"align": {
|
||||
"label": "位置",
|
||||
"submenu": {
|
||||
"left": "左",
|
||||
"middle": "中央",
|
||||
"right": "右"
|
||||
}
|
||||
},
|
||||
"force-hide": "強制的にビデオタブを削除",
|
||||
"mode": {
|
||||
"label": "モード",
|
||||
"submenu": {
|
||||
"custom": "カスタム切り替え",
|
||||
"disabled": "無効",
|
||||
"native": "標準の切り替え"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "動画の切り替え",
|
||||
"templates": {
|
||||
"button": "曲"
|
||||
}
|
||||
},
|
||||
"visualizer": {
|
||||
"description": "視覚効果(ビジュアライザー)をプレイヤーに追加します",
|
||||
"menu": {
|
||||
"visualizer-type": "ビジュアライザーの種類"
|
||||
},
|
||||
"name": "視覚効果"
|
||||
}
|
||||
}
|
||||
}
|
||||
598
src/i18n/resources/ko.json
Normal file
@ -0,0 +1,598 @@
|
||||
{
|
||||
"common": {
|
||||
"console": {
|
||||
"plugins": {
|
||||
"execute-failed": "확장 {{pluginName}}::{{contextName}}을(를) 실행하지 못했습니다",
|
||||
"executed-at-ms": "확장 {{pluginName}}::{{contextName}}이 {{ms}}ms 만에 실행됨",
|
||||
"initialize-failed": "확장 \"{{pluginName}}\"을(를) 초기화하지 못했습니다",
|
||||
"load-all": "모든 확장 로드 중",
|
||||
"load-failed": "확장 \"{{pluginName}}\"을(를) 로드하지 못했습니다",
|
||||
"loaded": "확장 \"{{pluginName}}\" 로드됨",
|
||||
"unload-failed": "확장 \"{{pluginName}}\"을(를) 언로드하지 못했습니다",
|
||||
"unloaded": "확장 \"{{pluginName}}\" 언로드 됨"
|
||||
}
|
||||
}
|
||||
},
|
||||
"language": {
|
||||
"code": "ko",
|
||||
"local-name": "한국어",
|
||||
"name": "Korean"
|
||||
},
|
||||
"main": {
|
||||
"console": {
|
||||
"did-finish-load": {
|
||||
"dev-tools": "로드가 완료되었습니다. 개발자 도구가 열렸습니다"
|
||||
},
|
||||
"i18n": {
|
||||
"loaded": "국제화 로드됨"
|
||||
},
|
||||
"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' 키를 눌러 숨겨진 메뉴를 표시할 수 있습니다 (인앱 메뉴를 사용하는 경우 'Esc' 키를 사용)",
|
||||
"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": "User-Agent 재정의",
|
||||
"restart-on-config-changes": "설정 변경 시 재시작",
|
||||
"set-proxy": {
|
||||
"label": "프록시 설정",
|
||||
"prompt": {
|
||||
"label": "프록시 주소를 입력하세요: (비워두면 비활성화됨)",
|
||||
"placeholder": "예제: SOCKS5://127.0.0.1:9999",
|
||||
"title": "프록시 설정"
|
||||
}
|
||||
},
|
||||
"toggle-dev-tools": "DevTools 열기"
|
||||
}
|
||||
},
|
||||
"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": {
|
||||
"like-buttons": {
|
||||
"default": "기본",
|
||||
"force-show": "강제로 표시",
|
||||
"hide": "숨기기",
|
||||
"label": "좋아요 버튼"
|
||||
},
|
||||
"remove-upgrade-button": "업그레이드 버튼 제거",
|
||||
"theme": {
|
||||
"label": "테마",
|
||||
"submenu": {
|
||||
"import-css-file": "사용자 정의 CSS 파일 가져오기",
|
||||
"no-theme": "테마 없음"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"enabled": "활성화",
|
||||
"label": "확장"
|
||||
},
|
||||
"view": {
|
||||
"label": "보기",
|
||||
"submenu": {
|
||||
"force-reload": "강제 새로고침",
|
||||
"reload": "새로고침",
|
||||
"reset-zoom": "원래 크기",
|
||||
"toggle-fullscreen": "전체 화면 전환",
|
||||
"zoom-in": "확대",
|
||||
"zoom-out": "축소"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tray": {
|
||||
"next": "다음",
|
||||
"play-pause": "재생/일시정지",
|
||||
"previous": "이전",
|
||||
"quit": "종료",
|
||||
"restart": "앱 재시작",
|
||||
"show": "창 표시"
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"adblocker": {
|
||||
"description": "모든 광고와 트래커를 즉시 차단합니다",
|
||||
"menu": {
|
||||
"blocker": "광고 차단 타입"
|
||||
},
|
||||
"name": "광고 차단기"
|
||||
},
|
||||
"album-color-theme": {
|
||||
"description": "앨범 색상 팔레트를 기반으로 동적 테마 및 시각 효과를 적용합니다",
|
||||
"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": "앰비언트 모드"
|
||||
},
|
||||
"audio-compressor": {
|
||||
"description": "오디오에 컴프레서를 적용합니다 (신호에서 가장 시끄러운 부분의 음량을 낮추고 가장 조용한 부분의 음량을 높임)",
|
||||
"name": "오디오 컴프레서"
|
||||
},
|
||||
"blur-nav-bar": {
|
||||
"description": "탐색 바를 투명하고 흐릿하게 만듭니다",
|
||||
"name": "탐색 바 흐림 효과"
|
||||
},
|
||||
"bypass-age-restrictions": {
|
||||
"description": "유튜브의 나이 제한을 우회합니다",
|
||||
"name": "나이 제한 우회"
|
||||
},
|
||||
"captions-selector": {
|
||||
"description": "YouTube Music 트랙용 자막 선택기입니다",
|
||||
"menu": {
|
||||
"autoload": "마지막으로 사용한 자막을 자동으로 선택",
|
||||
"disable-captions": "기본 자막 제거"
|
||||
},
|
||||
"name": "자막 선택기",
|
||||
"prompt": {
|
||||
"selector": {
|
||||
"label": "현재 선택된 언어: {{language}}",
|
||||
"none": "없음",
|
||||
"title": "자막 언어 선택"
|
||||
}
|
||||
},
|
||||
"templates": {
|
||||
"title": "자막 선택기 열기"
|
||||
}
|
||||
},
|
||||
"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": "크로스페이드 설정"
|
||||
}
|
||||
}
|
||||
},
|
||||
"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": "GitHub 링크 버튼 숨기기",
|
||||
"play-on-youtube-music": "유튜브 뮤직에서 재생",
|
||||
"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": "재생목록 ID를 찾을 수 없습니다",
|
||||
"playlist-is-empty": "재생목록이 비어있습니다",
|
||||
"playlist-is-mix-or-private": "재생목록 정보 가져오는 중 오류 발생: 비공개 재생목록 또는 '유튜브 Mix' 재생목록이 아닌지 확인하세요\n\n{{error}}",
|
||||
"preparing-file": "파일 준비 중…",
|
||||
"saving": "저장 중…",
|
||||
"trying-to-get-playlist-id": "재생목록 ID를 가져오는 중: {{playlistId}}",
|
||||
"video-id-not-found": "영상을 찾을 수 없습니다",
|
||||
"writing-id3": "ID3 태그 작성 중…"
|
||||
}
|
||||
},
|
||||
"description": "UI에서 직접 MP3/소스 오디오를 다운로드하세요",
|
||||
"menu": {
|
||||
"choose-download-folder": "다운로드 폴더 선택",
|
||||
"download-playlist": "재생목록 다운로드",
|
||||
"presets": "프리셋",
|
||||
"skip-existing": "이미 존재하는 파일 넘기기"
|
||||
},
|
||||
"name": "다운로더",
|
||||
"renderer": {
|
||||
"can-not-update-progress": "진행 상황을 업데이트 할 수 없음"
|
||||
},
|
||||
"templates": {
|
||||
"button": "다운로드"
|
||||
}
|
||||
},
|
||||
"exponential-volume": {
|
||||
"description": "음량 슬라이더를 지수적으로 만들어 더 낮은 음량을 쉽게 선택할 수 있도록 합니다.",
|
||||
"name": "지수 음량"
|
||||
},
|
||||
"in-app-menu": {
|
||||
"description": "메뉴 표시줄을 더 멋지게, 그리고 다크 또는 앨범의 색상으로 만듭니다",
|
||||
"menu": {
|
||||
"hide-dom-window-controls": "DOM 윈도우 컨트롤 숨기기"
|
||||
},
|
||||
"name": "인앱 메뉴"
|
||||
},
|
||||
"last-fm": {
|
||||
"description": "Last.fm에 대한 스크러블 지원을 추가합니다",
|
||||
"name": "Last.fm"
|
||||
},
|
||||
"lumiastream": {
|
||||
"description": "Lumia Stream 지원을 추가합니다",
|
||||
"name": "Lumia Stream [베타]"
|
||||
},
|
||||
"lyrics-genius": {
|
||||
"description": "더 많은 곡에 대해 가사 지원을 추가합니다",
|
||||
"menu": {
|
||||
"romanized-lyrics": "가사 로마자화"
|
||||
},
|
||||
"name": "Genius 가사",
|
||||
"renderer": {
|
||||
"fetched-lyrics": "Genius에서 가사 불러옴"
|
||||
}
|
||||
},
|
||||
"navigation": {
|
||||
"description": "브라우저에서처럼, UI에 직접 통합된 앞으로/뒤로 탐색하는 화살표",
|
||||
"name": "탐색"
|
||||
},
|
||||
"no-google-login": {
|
||||
"description": "UI에서 Google 로그인 버튼 및 링크 제거하기",
|
||||
"name": "Google 로그인 제거"
|
||||
},
|
||||
"notifications": {
|
||||
"description": "노래 재생이 시작되면 알림을 표시 (Windows에서는 대화형 알림 사용 가능)",
|
||||
"menu": {
|
||||
"interactive": "대화형 알림",
|
||||
"interactive-settings": {
|
||||
"label": "대화형 알림 설정",
|
||||
"submenu": {
|
||||
"hide-button-text": "버튼 텍스트 숨기기",
|
||||
"refresh-on-play-pause": "재생/일시정지 시 새로고침",
|
||||
"tray-controls": "트레이 클릭 시 열기/닫기"
|
||||
}
|
||||
},
|
||||
"priority": "알림 우선순위",
|
||||
"toast-style": "토스트 스타일",
|
||||
"unpause-notification": "일시정지 시 알림 표시"
|
||||
},
|
||||
"name": "알림"
|
||||
},
|
||||
"picture-in-picture": {
|
||||
"description": "앱을 PiP 모드로 전환할 수 있게 허용합니다",
|
||||
"menu": {
|
||||
"always-on-top": "항상 맨 위에 표시",
|
||||
"hotkey": {
|
||||
"label": "단축키",
|
||||
"prompt": {
|
||||
"keybind-options": {
|
||||
"hotkey": "단축키"
|
||||
},
|
||||
"label": "PiP를 전환하기 위한 단축키를 선택하세요",
|
||||
"title": "PiP 단축키"
|
||||
}
|
||||
},
|
||||
"save-window-position": "창 위치 저장",
|
||||
"save-window-size": "창 크기 저장",
|
||||
"use-native-pip": "브라우저 내장 PiP 사용"
|
||||
},
|
||||
"name": "PiP",
|
||||
"templates": {
|
||||
"button": "PiP"
|
||||
}
|
||||
},
|
||||
"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": "영상 품질 체인저"
|
||||
},
|
||||
"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": "SponsorBlock"
|
||||
},
|
||||
"taskbar-mediacontrol": {
|
||||
"description": "Windows 작업 표시줄에서 재생을 제어하세요",
|
||||
"name": "작업표시줄 미디어 컨트롤"
|
||||
},
|
||||
"touchbar": {
|
||||
"description": "macOS 사용자를 위한 TouchBar 위젯을 추가합니다",
|
||||
"name": "TouchBar"
|
||||
},
|
||||
"tuna-obs": {
|
||||
"description": "OBS의 확장인 Tuna와의 통합을 활성화합니다",
|
||||
"name": "Tuna OBS"
|
||||
},
|
||||
"video-toggle": {
|
||||
"description": "영상/노래 모드를 전환하는 버튼을 추가합니다. 선택적으로 전체 영상 탭을 제거할 수도 있습니다",
|
||||
"menu": {
|
||||
"align": {
|
||||
"label": "정렬",
|
||||
"submenu": {
|
||||
"left": "왼쪽",
|
||||
"middle": "가운데",
|
||||
"right": "오른쪽"
|
||||
}
|
||||
},
|
||||
"force-hide": "영상 탭 강제 제거",
|
||||
"mode": {
|
||||
"label": "모드",
|
||||
"submenu": {
|
||||
"custom": "사용자 지정 전환",
|
||||
"disabled": "비활성화",
|
||||
"native": "기본 토글"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "영상 전환",
|
||||
"templates": {
|
||||
"button": "노래"
|
||||
}
|
||||
},
|
||||
"visualizer": {
|
||||
"description": "플레이어에 시각화 도구 추가",
|
||||
"menu": {
|
||||
"visualizer-type": "비주얼라이저 타입"
|
||||
},
|
||||
"name": "비주얼라이저"
|
||||
}
|
||||
}
|
||||
}
|
||||
598
src/i18n/resources/lt.json
Normal file
@ -0,0 +1,598 @@
|
||||
{
|
||||
"common": {
|
||||
"console": {
|
||||
"plugins": {
|
||||
"execute-failed": "Nepavyko įvykdyti įskiepio {{pluginName}}::{{contextName}}",
|
||||
"executed-at-ms": "Įskiepis {{pluginName}}::{{contextName}} įvykdytas per {{ms}}ms",
|
||||
"initialize-failed": "Nepavyko inicijuoti įskiepio \"{{pluginName}}\"",
|
||||
"load-all": "Kraunama visus įskiepius",
|
||||
"load-failed": "Nepavyko užkrauti įskiepio \"{{pluginName}}\"",
|
||||
"loaded": "Įskiepis \"{{pluginName}}\" užkrautas",
|
||||
"unload-failed": "Nepavyko iškrauti įskiepio \"{{pluginName}}\"",
|
||||
"unloaded": "Įskiepis \"{{pluginName}}\" iškrautas"
|
||||
}
|
||||
}
|
||||
},
|
||||
"language": {
|
||||
"code": "lt",
|
||||
"local-name": "Lietuvių kalba",
|
||||
"name": "Lithuanian"
|
||||
},
|
||||
"main": {
|
||||
"console": {
|
||||
"did-finish-load": {
|
||||
"dev-tools": "Baigta krauti. \"DevTools\" atidaryta"
|
||||
},
|
||||
"i18n": {
|
||||
"loaded": "\"i18n\" užkrauta"
|
||||
},
|
||||
"second-instance": {
|
||||
"receive-command": "Gauta komanda per protokolą: \"{{command}}\""
|
||||
},
|
||||
"theme": {
|
||||
"css-file-not-found": "CSS failas \"{{cssFile}}\" neegzistuoja, ignoruojama"
|
||||
},
|
||||
"unresponsive": {
|
||||
"details": "Nereguojanti paklaida\n{{error}}"
|
||||
},
|
||||
"when-ready": {
|
||||
"clearing-cache-after-20s": "Išvaloma programos talpykla"
|
||||
},
|
||||
"window": {
|
||||
"tried-to-render-offscreen": "Langas bandė vaizduotis už ekrano ribų, langoDydis={{windowSize}}, ekranoDydis={{displaySize}}, pozicija={{position}}"
|
||||
}
|
||||
},
|
||||
"dialog": {
|
||||
"hide-menu-enabled": {
|
||||
"detail": "Meniu yra paslėpta, naudokite 'Alt', kad ją parodyti (arba 'Escape' jei naudojama programos meniu)",
|
||||
"message": "\"Paslėpti Meniu\" yra įjungta",
|
||||
"title": "Įjungta \"Paslėpti Meniu\""
|
||||
},
|
||||
"need-to-restart": {
|
||||
"buttons": {
|
||||
"later": "Vėliau",
|
||||
"restart-now": "Perkrauti Dabar"
|
||||
},
|
||||
"detail": "\"{{pluginName}}\" įskiepis reikalauja perkrovimą, kad veiktų",
|
||||
"message": "\"{{pluginName}}\" reikia perkrovimo",
|
||||
"title": "Reikiamas perkrovimas"
|
||||
},
|
||||
"unresponsive": {
|
||||
"buttons": {
|
||||
"quit": "Išeiti",
|
||||
"relaunch": "Perleisti",
|
||||
"wait": "Palaukti"
|
||||
},
|
||||
"detail": "Mes apgailestaujame dėl nepatogumų! prašau pasirinkti ką daryti:",
|
||||
"message": "Programa Neatsako",
|
||||
"title": "Langas Neatsako"
|
||||
},
|
||||
"update-available": {
|
||||
"buttons": {
|
||||
"disable": "Išjungti Atnaujinimus",
|
||||
"download": "Atsisiųsti",
|
||||
"ok": "Gerai"
|
||||
},
|
||||
"detail": "Nauja versija yra prieinama ir gali būti atsisiųsta {{downloadLink}}",
|
||||
"message": "Nauja versija yra prieinama",
|
||||
"title": "Prieinamas Atnaujinimas"
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"about": "Apie",
|
||||
"navigation": {
|
||||
"label": "Navigacija",
|
||||
"submenu": {
|
||||
"copy-current-url": "Nukopijuoti dabartinį URL",
|
||||
"go-back": "Grįžti Atgal",
|
||||
"go-forward": "Eiti į priekį",
|
||||
"quit": "Išeiti",
|
||||
"restart": "Perkrauti programą"
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"label": "Nustatymai",
|
||||
"submenu": {
|
||||
"advanced-options": {
|
||||
"label": "Išplėstiniai nustatymai",
|
||||
"submenu": {
|
||||
"auto-reset-app-cache": "Perkrauti programos talpyklą, kai programa paleidžiama",
|
||||
"disable-hardware-acceleration": "Išjungti aparatūros pagreitį",
|
||||
"edit-config-json": "Redaguoti config.json",
|
||||
"override-user-agent": "Perrašyti User-Agent",
|
||||
"restart-on-config-changes": "Perkrauti po config pasikeitimo",
|
||||
"set-proxy": {
|
||||
"label": "Nustatyti įgaliotajį serverį",
|
||||
"prompt": {
|
||||
"label": "Įvesti Įgaliotojo serverio adresą: (palikti tuščią, kad išjungti)",
|
||||
"placeholder": "Pavyzdys: SOCKS5://127.0.0.1:9999",
|
||||
"title": "Nustatyti įgaliotajį serverį"
|
||||
}
|
||||
},
|
||||
"toggle-dev-tools": "Įjungti/Išjungti DevTools"
|
||||
}
|
||||
},
|
||||
"always-on-top": "Visada viršuje",
|
||||
"auto-update": "Automatinis Atnaujinimas",
|
||||
"hide-menu": {
|
||||
"dialog": {
|
||||
"message": "Meniu bus paslėpta per kitą paleidimą, naudokite [Alt], kad ją parodyti (arba [`] jei naudojama programos meniu)",
|
||||
"title": "\"Paslėpti Meniu\" įjungtas"
|
||||
},
|
||||
"label": "Paslėpti Meniu"
|
||||
},
|
||||
"language": {
|
||||
"dialog": {
|
||||
"message": "Kalba bus pakeista po perkrovimo",
|
||||
"title": "Kalba Pakeista"
|
||||
},
|
||||
"label": "Kalba",
|
||||
"submenu": {
|
||||
"to-help-translate": "Norite padėti išversti? Paspauskite čia"
|
||||
}
|
||||
},
|
||||
"resume-on-start": "Tęsti paskutinę dainą, kai programa bus paleista",
|
||||
"single-instance-lock": "Vienkartinis užraktas",
|
||||
"start-at-login": "Pradėti nuo prisijungimo",
|
||||
"starting-page": {
|
||||
"label": "Pradžios puslapis",
|
||||
"unset": "Nenustatyta"
|
||||
},
|
||||
"tray": {
|
||||
"label": "Padėklas",
|
||||
"submenu": {
|
||||
"disabled": "Išjungta",
|
||||
"enabled-and-hide-app": "Įjungta ir slėpti programos langą",
|
||||
"enabled-and-show-app": "Įjungta ir rodyti programos langą",
|
||||
"play-pause-on-click": "Leisti/Sustabdyti ant paspaudimo"
|
||||
}
|
||||
},
|
||||
"visual-tweaks": {
|
||||
"label": "Vizualiniai patobulinimai",
|
||||
"submenu": {
|
||||
"like-buttons": {
|
||||
"default": "Numatytasis",
|
||||
"force-show": "Priversti rodyti",
|
||||
"hide": "Slėpti",
|
||||
"label": "\"Patinka\" mygtukai"
|
||||
},
|
||||
"remove-upgrade-button": "Nerodyti \"Patobulinti\" mygtuko",
|
||||
"theme": {
|
||||
"label": "Tema",
|
||||
"submenu": {
|
||||
"import-css-file": "Įkelti pasirinktinį CSS failą",
|
||||
"no-theme": "Be temos"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"enabled": "Įjungta",
|
||||
"label": "Įskiepiai"
|
||||
},
|
||||
"view": {
|
||||
"label": "Vaizdas",
|
||||
"submenu": {
|
||||
"force-reload": "Priverstinis perkrovimas",
|
||||
"reload": "Perkrauti",
|
||||
"reset-zoom": "Tikras dydis",
|
||||
"toggle-fullscreen": "Įjungti/Išjungti Pilną Ekraną",
|
||||
"zoom-in": "Priartinti",
|
||||
"zoom-out": "Nutolinti"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tray": {
|
||||
"next": "Kitas",
|
||||
"play-pause": "Leisti/Sustabdyti",
|
||||
"previous": "Ankstesnis",
|
||||
"quit": "Išeiti",
|
||||
"restart": "Perkrauti programą",
|
||||
"show": "Rodyti langą"
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"adblocker": {
|
||||
"description": "Blokuoti visas reklamas ir seklius",
|
||||
"menu": {
|
||||
"blocker": "Blokuotojas"
|
||||
},
|
||||
"name": "Reklamų blokuotojas"
|
||||
},
|
||||
"album-color-theme": {
|
||||
"description": "Pritaiko dinamišką temą ir vizualinius efektus pagal albumo spalvų paletę",
|
||||
"name": "Albumo Spalvų Tema"
|
||||
},
|
||||
"ambient-mode": {
|
||||
"description": "Pritaiko apšvietimo efektą, perteikdamas švelnias vaizdo įrašo spalvas į ekrano foną.",
|
||||
"menu": {
|
||||
"blur-amount": {
|
||||
"label": "Suliejimo kiekis",
|
||||
"submenu": {
|
||||
"pixels": "{{blurAmount}} pikseliai"
|
||||
}
|
||||
},
|
||||
"buffer": {
|
||||
"label": "Buferis",
|
||||
"submenu": {
|
||||
"buffer": "{{buffer}}"
|
||||
}
|
||||
},
|
||||
"opacity": {
|
||||
"label": "Skaidrumas",
|
||||
"submenu": {
|
||||
"percent": "{{opacity}}%"
|
||||
}
|
||||
},
|
||||
"quality": {
|
||||
"label": "Kokybė",
|
||||
"submenu": {
|
||||
"pixels": "{{quality}} pikseliai"
|
||||
}
|
||||
},
|
||||
"size": {
|
||||
"label": "Dydis",
|
||||
"submenu": {
|
||||
"percent": "{{size}}%"
|
||||
}
|
||||
},
|
||||
"smoothness-transition": {
|
||||
"label": "Perėjimo švelnumas",
|
||||
"submenu": {
|
||||
"during": "Per {{interpolationTime}}s"
|
||||
}
|
||||
},
|
||||
"use-fullscreen": {
|
||||
"label": "Naudojamas visas ekranas"
|
||||
}
|
||||
},
|
||||
"name": "Aplinkos rėžimas"
|
||||
},
|
||||
"audio-compressor": {
|
||||
"description": "Pritaikyti garso kompresiją (sumažina garsiausių signalo dalių garsumą ir padidina švelniausių dalių garsumą)",
|
||||
"name": "Garso Kompresorius"
|
||||
},
|
||||
"blur-nav-bar": {
|
||||
"description": "Padaro navigacijos lentą permatomą ir susiliejusią",
|
||||
"name": "Sulieti Navigacijos Lentą"
|
||||
},
|
||||
"bypass-age-restrictions": {
|
||||
"description": "Apeiti \"Youtube\" amžiaus patikrinimą",
|
||||
"name": "Apeiti Amžiaus Apribojimus"
|
||||
},
|
||||
"captions-selector": {
|
||||
"description": "„YouTube Music“ Garso takelių antraščių parinkiklis",
|
||||
"menu": {
|
||||
"autoload": "Automatiškai pasirinkti paskutinę naudotą antraštę",
|
||||
"disable-captions": "Pagal numatytuosius nustatymus išjungti antraštės"
|
||||
},
|
||||
"name": "Antraščių parinkiklis",
|
||||
"prompt": {
|
||||
"selector": {
|
||||
"label": "Dabartinė antraščių kalba: {{language}}",
|
||||
"none": "Joks",
|
||||
"title": "Pasirinkti antraščių kalbą"
|
||||
}
|
||||
},
|
||||
"templates": {
|
||||
"title": "Atidaryti antraščių parinkiklį"
|
||||
}
|
||||
},
|
||||
"compact-sidebar": {
|
||||
"description": "Visada nustatyti šoninę juostą kompaktiniame rėžime",
|
||||
"name": "Kompaktinė šoninė juosta"
|
||||
},
|
||||
"crossfade": {
|
||||
"description": "Perliejimas tarp dainų",
|
||||
"menu": {
|
||||
"advanced": "Išplėstinė"
|
||||
},
|
||||
"name": "Perliejimas [beta]",
|
||||
"prompt": {
|
||||
"options": {
|
||||
"multi-input": {
|
||||
"fade-in-duration": "Išblukimo trukmė (ms)",
|
||||
"fade-out-duration": "Išnykimo trukmė (ms)",
|
||||
"fade-scaling": {
|
||||
"label": "Išblukimo stiprumas",
|
||||
"linear": "Linijinis",
|
||||
"logarithmic": "Logaritminis"
|
||||
},
|
||||
"seconds-before-end": "Pradėti lieti dainas N sekundžių prieš pabaigą"
|
||||
},
|
||||
"title": "Perliejimo nustatymai"
|
||||
}
|
||||
}
|
||||
},
|
||||
"disable-autoplay": {
|
||||
"description": "Pradeda dainą sustabdytame rėžime",
|
||||
"menu": {
|
||||
"apply-once": "Pritaiko tik per programos paleidimą"
|
||||
},
|
||||
"name": "Išjungti Automatinį leidimą"
|
||||
},
|
||||
"discord": {
|
||||
"backend": {
|
||||
"already-connected": "Bandyta prisijungti naudojant aktyvų ryšį",
|
||||
"connected": "Prisijungta prie \"Discord\"",
|
||||
"disconnected": "Atsijungta nuo \"Discord\""
|
||||
},
|
||||
"description": "Parodyk savo draugams ko tu klausaisi su \"Turtingas Buvimas\"",
|
||||
"menu": {
|
||||
"auto-reconnect": "Automatiškai prisijungti",
|
||||
"clear-activity": "Išvalyti veiksmus",
|
||||
"clear-activity-after-timeout": "Išvalyti veiksmus po skirtojo laiko",
|
||||
"connected": "Prisijungta",
|
||||
"disconnected": "Atsijungta",
|
||||
"hide-duration-left": "Slėpti kiek liko laiko",
|
||||
"hide-github-button": "Slėpti \"GitHub\" nuorodos mygtuką",
|
||||
"play-on-youtube-music": "Leisti ant \"Youtube Music\"",
|
||||
"set-inactivity-timeout": "Nustatyti neveiklumo laiką"
|
||||
},
|
||||
"name": "\"Discord\" Turtingas Buvimas",
|
||||
"prompt": {
|
||||
"set-inactivity-timeout": {
|
||||
"label": "Įveskite neveiklumo skirtąjį laiką sekundėmis:",
|
||||
"title": "Nustatyti neveiklumo laiką"
|
||||
}
|
||||
}
|
||||
},
|
||||
"downloader": {
|
||||
"backend": {
|
||||
"dialog": {
|
||||
"error": {
|
||||
"buttons": {
|
||||
"ok": "Gerai"
|
||||
},
|
||||
"message": "Aaa! Apgailestaujame, nepavyko atsisiųsti…",
|
||||
"title": "Paklaida atsisiunčiant!"
|
||||
},
|
||||
"start-download-playlist": {
|
||||
"buttons": {
|
||||
"ok": "Gerai"
|
||||
},
|
||||
"detail": "({{playlistSize}} dainos)",
|
||||
"message": "Atsisiunčiama {{playlistTitle}} grojaraštį",
|
||||
"title": "Prasidėjo atsisiuntimas"
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"conversion-progress": "Konversija: {{percent}}%",
|
||||
"converting": "Konvertuojama…",
|
||||
"done": "Baigta: {{filePath}}",
|
||||
"download-info": "Atsiunčiama {{artist}} - {{title}} {{videoId}}",
|
||||
"download-progress": "Atsisiuntimas: {{percent}}%",
|
||||
"downloading": "Atsisiunčiama…",
|
||||
"downloading-counter": "Atsisiunčiama {{current}}/{{total}}…",
|
||||
"downloading-playlist": "Atsisiunčiamas grojaraštis \"{{playlistTitle}}\" - {{playlistSize}} dainų {{playlistId}}",
|
||||
"error-while-downloading": "Paklaida atsisiunčiant \"{{author}} - {{title}}\": {{error}}",
|
||||
"folder-already-exists": "Aplankas {{playlistFolder}} jau egzistuoja",
|
||||
"getting-playlist-info": "Gaunama grojaraščio informacija…",
|
||||
"loading": "Kraunama…",
|
||||
"playlist-has-only-one-song": "Grojaraštis turi tik vieną daiktą, jis atsisiunčiamas tiesiogiai",
|
||||
"playlist-id-not-found": "Grojaraščio ID nerastas",
|
||||
"playlist-is-empty": "Grojaraštis yra tuščias",
|
||||
"playlist-is-mix-or-private": "Paklaida gaunant grojaraščio informaciją: Pasitikrink, kad nėra privatus ar \"Surinkta specialiai jums\" grojaraštis\n\n{{error}}",
|
||||
"preparing-file": "Failas paruošiamas…",
|
||||
"saving": "Išsaugojama…",
|
||||
"trying-to-get-playlist-id": "Bandoma gauti grojaraščio ID: {{playlistId}}",
|
||||
"video-id-not-found": "Vaizdo įrašas nerastas",
|
||||
"writing-id3": "Rašoma ID3 žymes…"
|
||||
}
|
||||
},
|
||||
"description": "Atsisiunčia MP3 / šaltinio garsą tiesiogiai iš sąsajos",
|
||||
"menu": {
|
||||
"choose-download-folder": "Pasirinkti atsisiuntimų aplanką",
|
||||
"download-playlist": "Atsisiųsti grojaraštį",
|
||||
"presets": "Iš anksto nustatyti nustatymai",
|
||||
"skip-existing": "Praleisti egzistuojančius failus"
|
||||
},
|
||||
"name": "Atsiuntėjas",
|
||||
"renderer": {
|
||||
"can-not-update-progress": "Nepavyko atnaujinti eigos"
|
||||
},
|
||||
"templates": {
|
||||
"button": "Atsisiųsti"
|
||||
}
|
||||
},
|
||||
"exponential-volume": {
|
||||
"description": "Padaro garsumo slankiklį eksponentinį, kad būtų lengviau pasirinkti mažesnį garsumą.",
|
||||
"name": "Eksponentinis garsas"
|
||||
},
|
||||
"in-app-menu": {
|
||||
"description": "Duoda meniu lentoms įmantrią, tamsią ar albumo spalvos išvaizdą",
|
||||
"menu": {
|
||||
"hide-dom-window-controls": "Slėpti DOM lango kontroles"
|
||||
},
|
||||
"name": "Programos Meniu"
|
||||
},
|
||||
"last-fm": {
|
||||
"description": "Pridėkite Last.fm scrobble palaikymą",
|
||||
"name": "Last.fm"
|
||||
},
|
||||
"lumiastream": {
|
||||
"description": "Prideda \"Lumia Stream\" palaikymą",
|
||||
"name": "Lumia Stream [beta]"
|
||||
},
|
||||
"lyrics-genius": {
|
||||
"description": "Prideda daugumai dainių žodžių tekstus",
|
||||
"menu": {
|
||||
"romanized-lyrics": "Romanizuoti dainų tekstai"
|
||||
},
|
||||
"name": "\"Genius\" Žodžių tekstai",
|
||||
"renderer": {
|
||||
"fetched-lyrics": "Gauti žodžiai iš „Genius“."
|
||||
}
|
||||
},
|
||||
"navigation": {
|
||||
"description": "Kitas/Ankstenis navigacijos rodyklės tiesiogiai integruotos sąsajoje, kaip tavo mėgstamiausioje naršyklėje",
|
||||
"name": "Navigacija"
|
||||
},
|
||||
"no-google-login": {
|
||||
"description": "Pašalinti \"Google\" prisijungimo mygtukus ir nuorodas iš sąsjos",
|
||||
"name": "Be \"Google\" Prisijungimo"
|
||||
},
|
||||
"notifications": {
|
||||
"description": "Rodyti pranešimą, kai pradeda groti daina (interaktyvūs pranešimai pasiekiami sistemoje \"Windows\")",
|
||||
"menu": {
|
||||
"interactive": "Interaktyvūs pranešimai",
|
||||
"interactive-settings": {
|
||||
"label": "Interaktyvūs nustatymai",
|
||||
"submenu": {
|
||||
"hide-button-text": "Paslėpti mygtuko tekstą",
|
||||
"refresh-on-play-pause": "Atnaujinti ant Leisti/Sustabdyti",
|
||||
"tray-controls": "Atidaryti/Uždaryti ant padėklo paspaudimo"
|
||||
}
|
||||
},
|
||||
"priority": "Pranešimų pirminybė",
|
||||
"toast-style": "Skrudintas stilius",
|
||||
"unpause-notification": "Rodyti pranešimus po dainos paleidimo"
|
||||
},
|
||||
"name": "Pranešimai"
|
||||
},
|
||||
"picture-in-picture": {
|
||||
"description": "Leidžia pakeisti programą į \"picture-in-picture\" rėžimą",
|
||||
"menu": {
|
||||
"always-on-top": "Visada viršuje",
|
||||
"hotkey": {
|
||||
"label": "Spartusis klavišas",
|
||||
"prompt": {
|
||||
"keybind-options": {
|
||||
"hotkey": "Spartusis klavišas"
|
||||
},
|
||||
"label": "Pasirinkti spartujį klaviša, kad įjungti/išjungti \"picture-in-picture\"",
|
||||
"title": "\"Picture-in-picture\" Spartusis klavišas"
|
||||
}
|
||||
},
|
||||
"save-window-position": "Išsaugoti lango poziciją",
|
||||
"save-window-size": "Išsaugoti lango dydį",
|
||||
"use-native-pip": "Naudoti naršyklės savajį PiP"
|
||||
},
|
||||
"name": "Picture-in-picture",
|
||||
"templates": {
|
||||
"button": "Picture-in-picture"
|
||||
}
|
||||
},
|
||||
"playback-speed": {
|
||||
"description": "Klausyk greitai, klausyk lėtai! Prideda slankiklį, kuris valdo dainos greitį",
|
||||
"name": "Atkūrimo Greitis",
|
||||
"templates": {
|
||||
"button": "Greitis"
|
||||
}
|
||||
},
|
||||
"precise-volume": {
|
||||
"description": "Tiksliai valdykite garsumą naudodami pelės ratuką / sparčiuosius klavišus, naudodami pritaikytą HUD ir pritaikomus garsumo žingsnius",
|
||||
"menu": {
|
||||
"arrows-shortcuts": "Vietiniai rodyklių klavišai valdikliai",
|
||||
"custom-volume-steps": "Nustatykite Pasirinktinius Garsumo Žingsnius",
|
||||
"global-shortcuts": "Pasauliniai spartieji klavišai"
|
||||
},
|
||||
"name": "Tikslus Garsas",
|
||||
"prompt": {
|
||||
"global-shortcuts": {
|
||||
"keybind-options": {
|
||||
"decrease": "Pamažinti Garsą",
|
||||
"increase": "Padidinti Garsą"
|
||||
},
|
||||
"label": "Pasirinkti Pasaulinius garso klavišus:",
|
||||
"title": "Pasauliniai Garso Klavišai"
|
||||
},
|
||||
"volume-steps": {
|
||||
"label": "Pasirinkti Garso Didinimo/Mažinimo Žingsnius",
|
||||
"title": "Garso Žingsniai"
|
||||
}
|
||||
}
|
||||
},
|
||||
"quality-changer": {
|
||||
"backend": {
|
||||
"dialog": {
|
||||
"quality-changer": {
|
||||
"detail": "Dabartinė Kokybė: {{quality}}",
|
||||
"message": "Pasirinkite Vaizdo Kokybę:",
|
||||
"title": "Pasirinkite Vaizdo Kokybę"
|
||||
}
|
||||
}
|
||||
},
|
||||
"description": "Leidžia pakeisti vaizdo kokybę su mygtuku ant vaizdo perdangos",
|
||||
"name": "Vaizdo Kokybės Pakeitėjas"
|
||||
},
|
||||
"shortcuts": {
|
||||
"description": "Leidžia nustatyti visuotinius atkūrimo sparčiuosius klavišus (paleisti / pristabdyti / kitą / ankstesnį) ir išjungti medijos OSD nepaisant medijos klavišų, įjungti Ctrl / CMD + F ieškoti, įjungti Linux MPRIS palaikymą medijos klavišams ir pasirinktinius sparčiuosius klavišus pažengusiems vartotojams.",
|
||||
"menu": {
|
||||
"override-media-keys": "Perrašyti Medijos klavišus",
|
||||
"set-keybinds": "Nustatyti Pasaulines Dainų Kontroles"
|
||||
},
|
||||
"name": "Spartieji klavišai (& MPRIS)",
|
||||
"prompt": {
|
||||
"keybind": {
|
||||
"keybind-options": {
|
||||
"next": "Kitas",
|
||||
"play-pause": "Paleisti / Pristabdyti",
|
||||
"previous": "Ankstesnis"
|
||||
},
|
||||
"label": "Pasirinkti Pasaulinius Klavišus Dainų Kontroliavimui:",
|
||||
"title": "Pasauliniai Klavišai"
|
||||
}
|
||||
}
|
||||
},
|
||||
"skip-disliked-songs": {
|
||||
"description": "Praleidžia nepatinkančias dainas",
|
||||
"name": "Praleisti Nepatinkančias Dainas"
|
||||
},
|
||||
"skip-silences": {
|
||||
"description": "Automatiškai praleisti tylos dalis dainose",
|
||||
"name": "Praleisti Tylas"
|
||||
},
|
||||
"sponsorblock": {
|
||||
"description": "Automatiškai praleidžia ne muzikines dalis, pvz., įžangą/užvedimą arba muzikinių vaizdo įrašų dalis, kuriose daina negrojama",
|
||||
"name": "Rėmėjų blokuotojas"
|
||||
},
|
||||
"taskbar-mediacontrol": {
|
||||
"description": "Valdykite atkūrimą iš „Windows“ užduočių juostos",
|
||||
"name": "Užduočių juostos medijos valdymas"
|
||||
},
|
||||
"touchbar": {
|
||||
"description": "Pridedamas jutiklinės juostos valdiklis MacOS vartotojams",
|
||||
"name": "TouchBar"
|
||||
},
|
||||
"tuna-obs": {
|
||||
"description": "Integracija su OBS papildiniu \"Tuna\"",
|
||||
"name": "Tuna OBS"
|
||||
},
|
||||
"video-toggle": {
|
||||
"description": "Pridedamas mygtukas, skirtas perjungti vaizdo įrašo/dainos režimą. taip pat galite pasirinktinai pašalinti visą vaizdo įrašo skirtuką",
|
||||
"menu": {
|
||||
"align": {
|
||||
"label": "Lygiavimas",
|
||||
"submenu": {
|
||||
"left": "Kairė",
|
||||
"middle": "Vidurys",
|
||||
"right": "Dešinė"
|
||||
}
|
||||
},
|
||||
"force-hide": "Priverstinai pašalinti vaizdo įrašo skirtuką",
|
||||
"mode": {
|
||||
"label": "Rėžimas",
|
||||
"submenu": {
|
||||
"custom": "Pasirinktinis perjungimas",
|
||||
"disabled": "Išjungta",
|
||||
"native": "Vietinis perjungimas"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Vaizdo įrašo perjungimas",
|
||||
"templates": {
|
||||
"button": "Daina"
|
||||
}
|
||||
},
|
||||
"visualizer": {
|
||||
"description": "Prie grotuvo pridedamas vizualizatorius",
|
||||
"menu": {
|
||||
"visualizer-type": "Vizualizatoriaus tipas"
|
||||
},
|
||||
"name": "Vizualizatorius"
|
||||
}
|
||||
}
|
||||
}
|
||||
595
src/i18n/resources/nb.json
Normal file
@ -0,0 +1,595 @@
|
||||
{
|
||||
"common": {
|
||||
"console": {
|
||||
"plugins": {
|
||||
"execute-failed": "Klarte ikke å kjøre programtillegg {{pluginName}}::{{contextName}}",
|
||||
"executed-at-ms": "Det tok {{ms}} ms å kjøre {{pluginName}}::{{contextName}}",
|
||||
"initialize-failed": "Klarte ikke å igangsette «{{pluginName}}»",
|
||||
"load-all": "Laster inn alle programtillegg",
|
||||
"load-failed": "Klarte ikke å laste inn {{pluginName}}-programtillegget",
|
||||
"loaded": "Lastet inn {{pluginName}}-programtillegget",
|
||||
"unload-failed": "Kunne ikke skru av {{pluginName}}-programtillegget",
|
||||
"unloaded": "{{pluginName}}-programtillegg avskrudd"
|
||||
}
|
||||
}
|
||||
},
|
||||
"language": {
|
||||
"code": "nb_NO",
|
||||
"local-name": "Norsk bokmål",
|
||||
"name": "Norwegian Bokmål"
|
||||
},
|
||||
"main": {
|
||||
"console": {
|
||||
"did-finish-load": {
|
||||
"dev-tools": "Innlasting fullført. Utviklerverktøy åpnet."
|
||||
},
|
||||
"i18n": {
|
||||
"loaded": "språkstøtte innlastet"
|
||||
},
|
||||
"second-instance": {
|
||||
"receive-command": "Mottok kommando over protokoll: \"{{command}}\""
|
||||
},
|
||||
"theme": {
|
||||
"css-file-not-found": "CSS-filen «{{cssFile}}» finnes ikke. Ignorerer."
|
||||
},
|
||||
"unresponsive": {
|
||||
"details": "Svarer ikke\n{{error}}"
|
||||
},
|
||||
"when-ready": {
|
||||
"clearing-cache-after-20s": "Tømmer programhurtiglager"
|
||||
},
|
||||
"window": {
|
||||
"tried-to-render-offscreen": "Prøvde å tegne vindu utenfor skjermen. Størrelse={{windowSize}}, skjermstørrelse={{displaySize}}, posisjon={{position}}"
|
||||
}
|
||||
},
|
||||
"dialog": {
|
||||
"hide-menu-enabled": {
|
||||
"detail": "Menyen er skjult. Bruk «Alt» for å vise den, (ller «Esc» for å bruke menyen i programmet).",
|
||||
"message": "Meny skjult",
|
||||
"title": "Meny vist"
|
||||
},
|
||||
"need-to-restart": {
|
||||
"buttons": {
|
||||
"later": "Senere",
|
||||
"restart-now": "Start på ny nå"
|
||||
},
|
||||
"detail": "{{pluginName}}-programtillegget krever programomstart før bruk.",
|
||||
"message": "{{pluginName}}-programtillegget krever programomstart.",
|
||||
"title": "Programomstart kreves"
|
||||
},
|
||||
"unresponsive": {
|
||||
"buttons": {
|
||||
"quit": "Avslutt",
|
||||
"relaunch": "Start igjen",
|
||||
"wait": "Vent"
|
||||
},
|
||||
"detail": "Velg blandt følgende:",
|
||||
"message": "Programmet svarer ikke",
|
||||
"title": "Vinduet svarer ikke"
|
||||
},
|
||||
"update-available": {
|
||||
"buttons": {
|
||||
"disable": "Skru av oppgraderinger",
|
||||
"download": "Last ned",
|
||||
"ok": "OK"
|
||||
},
|
||||
"detail": "En ny versjon er tilgjengelig og kan lastes ned fra {{downloadLink}}",
|
||||
"message": "En ny versjon er tilgjengelig",
|
||||
"title": "Oppgradering tilgjengelig"
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"about": "Om",
|
||||
"navigation": {
|
||||
"label": "Navigasjon",
|
||||
"submenu": {
|
||||
"copy-current-url": "Kopier nåværende nettadresse",
|
||||
"go-back": "Tilbake",
|
||||
"go-forward": "Forover",
|
||||
"quit": "Avslutt",
|
||||
"restart": "Programomstart"
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"label": "Alternativer",
|
||||
"submenu": {
|
||||
"advanced-options": {
|
||||
"label": "Avanserte alternativer",
|
||||
"submenu": {
|
||||
"auto-reset-app-cache": "Tilbakestill programhurtiglager når programmet startes",
|
||||
"disable-hardware-acceleration": "Skru av maskinvareakselerasjon",
|
||||
"edit-config-json": "Rediger config.json",
|
||||
"override-user-agent": "Overstyr brukeragent",
|
||||
"restart-on-config-changes": "Omstart ved oppsettsendringer",
|
||||
"set-proxy": {
|
||||
"label": "Sett mellomtjener",
|
||||
"prompt": {
|
||||
"label": "Skriv inn mellomtjeneradresse: (la stå tom for å skru av)",
|
||||
"placeholder": "Eksempel: socks5://127.0.0.1:9999",
|
||||
"title": "Sett mellomtjener"
|
||||
}
|
||||
},
|
||||
"toggle-dev-tools": "Skru av/på utviklerverktøy"
|
||||
}
|
||||
},
|
||||
"always-on-top": "Alltid på toppen",
|
||||
"auto-update": "Auto-oppdatering",
|
||||
"hide-menu": {
|
||||
"dialog": {
|
||||
"message": "Menyen vil bli skjult ved neste programstart. Bruk [Alt] for å vise den, eller gravistegn [`] hvis du bruker menyen i programmet).",
|
||||
"title": "Skjuler meny"
|
||||
},
|
||||
"label": "Skjul meny"
|
||||
},
|
||||
"language": {
|
||||
"dialog": {
|
||||
"message": "Nytt språk vises når programmet startes på ny",
|
||||
"title": "Språk endret"
|
||||
},
|
||||
"label": "Språk",
|
||||
"submenu": {
|
||||
"to-help-translate": "Klikk her for å bistå oversettelsen"
|
||||
}
|
||||
},
|
||||
"resume-on-start": "Gjenoppta siste spor ved programstart",
|
||||
"single-instance-lock": "Sperr én instans",
|
||||
"start-at-login": "Start ved innlogging",
|
||||
"starting-page": {
|
||||
"label": "Startside",
|
||||
"unset": "Opphev"
|
||||
},
|
||||
"tray": {
|
||||
"label": "Systemkurv",
|
||||
"submenu": {
|
||||
"disabled": "Avskrudd",
|
||||
"play-pause-on-click": "Spill av/pause ved klikk"
|
||||
}
|
||||
},
|
||||
"visual-tweaks": {
|
||||
"label": "Visuelle tilpasninger",
|
||||
"submenu": {
|
||||
"like-buttons": {
|
||||
"default": "Forvalg",
|
||||
"force-show": "Tving visning",
|
||||
"hide": "Skjul",
|
||||
"label": "Begunstningsknapper"
|
||||
},
|
||||
"remove-upgrade-button": "Fjern oppgraderingsknapp",
|
||||
"theme": {
|
||||
"label": "Drakt",
|
||||
"submenu": {
|
||||
"import-css-file": "Importer egendefinert CSS-fil",
|
||||
"no-theme": "Ingen"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"enabled": "Påskrudd",
|
||||
"label": "Programtillegg"
|
||||
},
|
||||
"view": {
|
||||
"label": "Vis",
|
||||
"submenu": {
|
||||
"force-reload": "Tving gjeninnlasting",
|
||||
"reload": "Gjeninnlast",
|
||||
"reset-zoom": "Faktisk størrelse",
|
||||
"toggle-fullscreen": "Veksle fullskjermsvisning",
|
||||
"zoom-in": "Forstørr",
|
||||
"zoom-out": "Forminsk"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tray": {
|
||||
"next": "Neste",
|
||||
"play-pause": "Spill av/pause",
|
||||
"previous": "Forrige",
|
||||
"quit": "Avslutt",
|
||||
"restart": "Programomstart",
|
||||
"show": "Vis vindu"
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"adblocker": {
|
||||
"description": "Stenger ute reklame og sporing",
|
||||
"menu": {
|
||||
"blocker": "Blokkering"
|
||||
},
|
||||
"name": "Reklameblokkering"
|
||||
},
|
||||
"album-color-theme": {
|
||||
"description": "Ifører dynamisk drakt og visuelle effekter basert på albumsfargepaletten",
|
||||
"name": "Albumsfargedrakt"
|
||||
},
|
||||
"ambient-mode": {
|
||||
"description": "Ifører lyseffekt ved å hente myke farger fra videoen inn i skjermens bakgrunn.",
|
||||
"menu": {
|
||||
"blur-amount": {
|
||||
"label": "Tilsløringsmengde",
|
||||
"submenu": {
|
||||
"pixels": "{{blurAmount}} piksler"
|
||||
}
|
||||
},
|
||||
"buffer": {
|
||||
"label": "Mellomlager",
|
||||
"submenu": {
|
||||
"buffer": "{{buffer}}"
|
||||
}
|
||||
},
|
||||
"opacity": {
|
||||
"label": "Dekkevne",
|
||||
"submenu": {
|
||||
"percent": "{{opacity}}%"
|
||||
}
|
||||
},
|
||||
"quality": {
|
||||
"label": "Kvalitet",
|
||||
"submenu": {
|
||||
"pixels": "{{quality}} piksler"
|
||||
}
|
||||
},
|
||||
"size": {
|
||||
"label": "Størrelse",
|
||||
"submenu": {
|
||||
"percent": "{{size}}%"
|
||||
}
|
||||
},
|
||||
"smoothness-transition": {
|
||||
"label": "Mykhetsovergang",
|
||||
"submenu": {
|
||||
"during": "I løpet av {{interpolationTime}} s"
|
||||
}
|
||||
},
|
||||
"use-fullscreen": {
|
||||
"label": "Ved bruk av fullskjerm"
|
||||
}
|
||||
},
|
||||
"name": "Omgivelsesmodus"
|
||||
},
|
||||
"audio-compressor": {
|
||||
"description": "Anvend kompresjon for lyd (senker lydstyrken for de kraftigste delene av signalet og øker nivået i de svakeste)",
|
||||
"name": "Lydkompressor"
|
||||
},
|
||||
"blur-nav-bar": {
|
||||
"description": "Gjør navigeringsbjelken gjennomsiktig og tilslørt",
|
||||
"name": "Tilslør navigasjonsfelt"
|
||||
},
|
||||
"bypass-age-restrictions": {
|
||||
"description": "Omgå YouTube sin aldersgrenser",
|
||||
"name": "Omgå aldersgrense"
|
||||
},
|
||||
"captions-selector": {
|
||||
"description": "Undertekstverktøy for lydspor i YouTube Music",
|
||||
"menu": {
|
||||
"autoload": "Auto-velg sist brukte undertekst",
|
||||
"disable-captions": "Ingen undertekst som forvalg"
|
||||
},
|
||||
"name": "Undertekstvelger",
|
||||
"prompt": {
|
||||
"selector": {
|
||||
"label": "Nåværende tekstingsspråk: {{language}}",
|
||||
"none": "Ingen",
|
||||
"title": "Velg tekstingsspråk"
|
||||
}
|
||||
},
|
||||
"templates": {
|
||||
"title": "Åpne undertekstvelger"
|
||||
}
|
||||
},
|
||||
"compact-sidebar": {
|
||||
"description": "Alltid sett sidefeltet i kompakt modus",
|
||||
"name": "Kompakt sidefelt"
|
||||
},
|
||||
"crossfade": {
|
||||
"description": "Overgang mellom spor",
|
||||
"menu": {
|
||||
"advanced": "Avansert"
|
||||
},
|
||||
"name": "Overgang [beta]",
|
||||
"prompt": {
|
||||
"options": {
|
||||
"multi-input": {
|
||||
"fade-in-duration": "Inntoningsvarighet (ms)",
|
||||
"fade-out-duration": "Uttoningsvarighet (ms)",
|
||||
"fade-scaling": {
|
||||
"label": "Overgangsskalering",
|
||||
"linear": "Lineær",
|
||||
"logarithmic": "Logaritmisk"
|
||||
},
|
||||
"seconds-before-end": "Overgang antall sekunder før slutt"
|
||||
},
|
||||
"title": "Overgangsalternativer"
|
||||
}
|
||||
}
|
||||
},
|
||||
"disable-autoplay": {
|
||||
"description": "Merkerer sporstart i «pauset» modus",
|
||||
"menu": {
|
||||
"apply-once": "Har kun innvirkning ved oppstart"
|
||||
},
|
||||
"name": "Skru av autospilling"
|
||||
},
|
||||
"discord": {
|
||||
"backend": {
|
||||
"already-connected": "Forsøkte å koble til med aktiv tilkobling",
|
||||
"connected": "Tilkoblet Discord",
|
||||
"disconnected": "Frakoblet fra Discord"
|
||||
},
|
||||
"description": "Vis venne dine hva du lytter til med rik tilstedeværelse",
|
||||
"menu": {
|
||||
"auto-reconnect": "Automatisk retilkobling",
|
||||
"clear-activity": "Tøm aktivitet",
|
||||
"clear-activity-after-timeout": "Tøm aktivitet etter tidsavbrudd",
|
||||
"connected": "Tilkoblet",
|
||||
"disconnected": "Frakoblet",
|
||||
"hide-duration-left": "Skjul gjenværende tid",
|
||||
"hide-github-button": "Skjul GitHub-lenkeknapp",
|
||||
"play-on-youtube-music": "Spill på YouTube Music",
|
||||
"set-inactivity-timeout": "Sett tid før tidsavbrudd"
|
||||
},
|
||||
"name": "Rik tilstedeværelse for Discord",
|
||||
"prompt": {
|
||||
"set-inactivity-timeout": {
|
||||
"label": "Skriv inn antall sekunder for inaktivitetstidsavbrudd:",
|
||||
"title": "Sett inaktivitetstidsavbrudd"
|
||||
}
|
||||
}
|
||||
},
|
||||
"downloader": {
|
||||
"backend": {
|
||||
"dialog": {
|
||||
"error": {
|
||||
"buttons": {
|
||||
"ok": "OK"
|
||||
},
|
||||
"message": "Nedlasting mislyktes …",
|
||||
"title": "Feil i nedlastning."
|
||||
},
|
||||
"start-download-playlist": {
|
||||
"buttons": {
|
||||
"ok": "OK"
|
||||
},
|
||||
"detail": "({{playlistSize}} spor)",
|
||||
"message": "Laster ned {{playlistTitle}}-spillelisten …",
|
||||
"title": "Nedlasting startet"
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"conversion-progress": "Konvertering: {{percent}}%",
|
||||
"converting": "Konverterer …",
|
||||
"done": "Ferdig: {{filePath}}",
|
||||
"download-info": "Laster ned {{artist}} — {{title}} [{{videoId}} …",
|
||||
"download-progress": "Nedlastet: {{percent}}%",
|
||||
"downloading": "Laster ned …",
|
||||
"downloading-counter": "Laster ned {{current}}/{{total}} …",
|
||||
"downloading-playlist": "Laster ned {{playlistTitle}}-spillelisten — {{playlistSize}} spor ({{playlistId}})",
|
||||
"error-while-downloading": "Kunne ikke laste ned «{{author}} — {{title}}»: {{error}}",
|
||||
"folder-already-exists": "{{playlistFolder}}-mappen finnes allerede",
|
||||
"getting-playlist-info": "Henter spillelisteinfo …",
|
||||
"loading": "Laster inn …",
|
||||
"playlist-has-only-one-song": "Spillelisten har kun ett element. Laster ned direkte.",
|
||||
"playlist-id-not-found": "Fant ingen spilleliste-ID",
|
||||
"playlist-is-empty": "Tom spilleliste",
|
||||
"playlist-is-mix-or-private": "Kunne ikke hente spillelisteinfo. Forsikre deg om at den ikke er privat eller «Mikset for deg».\n\n{{error}}",
|
||||
"preparing-file": "Forbereder fil …",
|
||||
"saving": "Lagrer …",
|
||||
"trying-to-get-playlist-id": "Prøver å hente spilleliste-ID: {{playlistId}}",
|
||||
"video-id-not-found": "Fant ikke videoen",
|
||||
"writing-id3": "Skriver ID3-tagger …"
|
||||
}
|
||||
},
|
||||
"description": "Laster ned MP3/kildelyd direkte fra grensesnittet",
|
||||
"menu": {
|
||||
"choose-download-folder": "Velg nedlastningsmappe",
|
||||
"download-playlist": "Last ned spilleliste",
|
||||
"presets": "Forhåndsinnstillinger",
|
||||
"skip-existing": "Hopp over eksisterende filer"
|
||||
},
|
||||
"name": "Nedlaster",
|
||||
"renderer": {
|
||||
"can-not-update-progress": "Kan ikke oppdatere framdrift"
|
||||
},
|
||||
"templates": {
|
||||
"button": "Last ned"
|
||||
}
|
||||
},
|
||||
"exponential-volume": {
|
||||
"description": "Gjør lydstyrkekontrollen eksponentiell, slik at det er enklere velge lavere lydstyrker.",
|
||||
"name": "Eksponentiell lydstyrke"
|
||||
},
|
||||
"in-app-menu": {
|
||||
"description": "Gir menybjelkene stilig, mørk, eller albumfarget utseende",
|
||||
"menu": {
|
||||
"hide-dom-window-controls": "Skjul DOM-vinduskontroller"
|
||||
},
|
||||
"name": "Meny i programmet"
|
||||
},
|
||||
"last-fm": {
|
||||
"description": "Legg til lyttestatistikkstøtte for Last.fm",
|
||||
"name": "Last.fm"
|
||||
},
|
||||
"lumiastream": {
|
||||
"description": "Legger til Lumia Stream-støtte",
|
||||
"name": "Lumia Stream [beta]"
|
||||
},
|
||||
"lyrics-genius": {
|
||||
"description": "Gir sangtekststøtte for de fleste spor",
|
||||
"menu": {
|
||||
"romanized-lyrics": "Romaniserte sangtekster"
|
||||
},
|
||||
"name": "Sangtekster fra Genius",
|
||||
"renderer": {
|
||||
"fetched-lyrics": "Henter sangtekster for Genius"
|
||||
}
|
||||
},
|
||||
"navigation": {
|
||||
"description": "Direkte integrering av neste/tilbake-navigasjonspilene i grensesnittet, som din favorittnettleser",
|
||||
"name": "Navigasjon"
|
||||
},
|
||||
"no-google-login": {
|
||||
"description": "Fjern Google-innloggingsknapper og lenker fra grensesnittet",
|
||||
"name": "Ingen Google-innlogging"
|
||||
},
|
||||
"notifications": {
|
||||
"description": "Vis en merknad når et spor starter avspilling (interaktive merknader er tilgjengelig på Windows)",
|
||||
"menu": {
|
||||
"interactive": "Interaktive merknader",
|
||||
"interactive-settings": {
|
||||
"label": "Interaktive innstillinger",
|
||||
"submenu": {
|
||||
"hide-button-text": "Skjul knappetekst",
|
||||
"refresh-on-play-pause": "Gjenoppfrisk ved avspilling/pause",
|
||||
"tray-controls": "Åpne/lukk med klikk i systemkurven"
|
||||
}
|
||||
},
|
||||
"priority": "Merknadsprioritet",
|
||||
"unpause-notification": "Vis merknad ved oppheving av pause"
|
||||
},
|
||||
"name": "Merknader"
|
||||
},
|
||||
"picture-in-picture": {
|
||||
"description": "Tillater å bytte programmet til bilde-i-bilde modus",
|
||||
"menu": {
|
||||
"always-on-top": "Alltid på toppen",
|
||||
"hotkey": {
|
||||
"label": "Hurtigtast",
|
||||
"prompt": {
|
||||
"keybind-options": {
|
||||
"hotkey": "Hurtigtast"
|
||||
},
|
||||
"label": "Velg en hurtigtast for veksling av bilde-i-bilde",
|
||||
"title": "Hurtigtast for bilde-i-bilde"
|
||||
}
|
||||
},
|
||||
"save-window-position": "Lagre vindusposisjon",
|
||||
"save-window-size": "Lagre vindusstørrelse",
|
||||
"use-native-pip": "Bruk nettleserens innebygde bilde-i-bilde"
|
||||
},
|
||||
"name": "Bilde-i-bilde",
|
||||
"templates": {
|
||||
"button": "Bilde-i-bilde"
|
||||
}
|
||||
},
|
||||
"playback-speed": {
|
||||
"description": "Legger til glidebryter som kontrollerer avspillingshastighet",
|
||||
"name": "Avspillingshastighet",
|
||||
"templates": {
|
||||
"button": "Hastighet"
|
||||
}
|
||||
},
|
||||
"precise-volume": {
|
||||
"description": "Kontroller lydstyrken presist ved bruk av musehjul/hurtigtaster, med egendefinert skjermoverlag og tilpassbare steg",
|
||||
"menu": {
|
||||
"arrows-shortcuts": "Kontroller for lokale piltaster",
|
||||
"custom-volume-steps": "Sett egendefinerte lydstyrkesteg",
|
||||
"global-shortcuts": "Hurtigtaster i hele programmet"
|
||||
},
|
||||
"name": "Presis lydstyrkejustering",
|
||||
"prompt": {
|
||||
"global-shortcuts": {
|
||||
"keybind-options": {
|
||||
"decrease": "Senk lydstyrke",
|
||||
"increase": "Øk lydstyrke"
|
||||
},
|
||||
"label": "Velg tastetilknytninger for lydstyrkejusteringskontroller i hele programmet",
|
||||
"title": "Tastetilknytninger for lydstyrkejusteringskontroller i hele programmet"
|
||||
},
|
||||
"volume-steps": {
|
||||
"label": "Velg steg for økning/senking av lydstyrke",
|
||||
"title": "Lydstyrkesteg"
|
||||
}
|
||||
}
|
||||
},
|
||||
"quality-changer": {
|
||||
"backend": {
|
||||
"dialog": {
|
||||
"quality-changer": {
|
||||
"detail": "Nåværende kvalitet: {{quality}}",
|
||||
"message": "Velg videokvalitet:",
|
||||
"title": "Velg videokvalitet"
|
||||
}
|
||||
}
|
||||
},
|
||||
"description": "Tillat endring av videokvalitet med en knapp i videooverlaget",
|
||||
"name": "Vindukvalitetsvelger"
|
||||
},
|
||||
"shortcuts": {
|
||||
"description": "Tillater bruk av hurtigtaster for hele programmet til avspilling (spill/pause/neste/forrige) + skru av media-videooverlag ved å overstyre mediataster + skru på Ctrl+CMD+F for å søke, pluss å egge til MPRIS støtte på linux for mediataster pluss egendefinerte hurtigtaster for avanserte brukere",
|
||||
"menu": {
|
||||
"override-media-keys": "Overstyr mediataster",
|
||||
"set-keybinds": "Sett kontroller for spor i hele programmet"
|
||||
},
|
||||
"name": "Snarveier (og MPRIS)",
|
||||
"prompt": {
|
||||
"keybind": {
|
||||
"keybind-options": {
|
||||
"next": "Neste",
|
||||
"play-pause": "Spill av/pause",
|
||||
"previous": "Forrige"
|
||||
},
|
||||
"label": "Velg kontroller for spor i hele programmet:",
|
||||
"title": "Tastaturtilknytninger i hele programmet"
|
||||
}
|
||||
}
|
||||
},
|
||||
"skip-disliked-songs": {
|
||||
"description": "Hopper over mislikte spor",
|
||||
"name": "Hopp over mislikte spor"
|
||||
},
|
||||
"skip-silences": {
|
||||
"description": "Hopp over stille deler av spor",
|
||||
"name": "Hopp over pauser"
|
||||
},
|
||||
"sponsorblock": {
|
||||
"description": "Hopper over ikke-musikalske deler, som intro/sluttsats, eller deler av musikkvideoer der ingen musikk spilles",
|
||||
"name": "SponsorBlock"
|
||||
},
|
||||
"taskbar-mediacontrol": {
|
||||
"description": "Kontroller avspilling fra din Windows-oppgavelinje",
|
||||
"name": "Oppgavelinje-mediakontroll"
|
||||
},
|
||||
"touchbar": {
|
||||
"description": "Legger til et pekefelt-miniprogram for macOS-brukere",
|
||||
"name": "Pekefelt"
|
||||
},
|
||||
"tuna-obs": {
|
||||
"description": "Integrasjon med Tuna-programtillegget i OBS",
|
||||
"name": "OBS Tuna"
|
||||
},
|
||||
"video-toggle": {
|
||||
"description": "Leger til en knapp for å bytte mellom video/spormodus. Kan også alternativt fjerne hele videofanen.",
|
||||
"menu": {
|
||||
"align": {
|
||||
"label": "Justering",
|
||||
"submenu": {
|
||||
"left": "Venstre",
|
||||
"middle": "Midten",
|
||||
"right": "Høyre"
|
||||
}
|
||||
},
|
||||
"force-hide": "Påtving fjerning av videofane",
|
||||
"mode": {
|
||||
"label": "Modus",
|
||||
"submenu": {
|
||||
"custom": "Egendefinert veksling",
|
||||
"disabled": "Avskrudd",
|
||||
"native": "Innebygd veksling"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Videoveksling",
|
||||
"templates": {
|
||||
"button": "Spor"
|
||||
}
|
||||
},
|
||||
"visualizer": {
|
||||
"description": "Legger til en visualisator i avspilleren",
|
||||
"menu": {
|
||||
"visualizer-type": "Visualisatortype"
|
||||
},
|
||||
"name": "Visualisator"
|
||||
}
|
||||
}
|
||||
}
|
||||
598
src/i18n/resources/pl.json
Normal file
@ -0,0 +1,598 @@
|
||||
{
|
||||
"common": {
|
||||
"console": {
|
||||
"plugins": {
|
||||
"execute-failed": "Błąd uruchamiania wtyczki {{pluginName}}::{{contextName}}",
|
||||
"executed-at-ms": "Wtyczka {{pluginName}}::{{contextName}} uruchomiona w {{ms}}ms",
|
||||
"initialize-failed": "Błąd inicjalizacji wtyczki \"{{pluginName}}\"",
|
||||
"load-all": "Ładowanie wszystkich wtyczek",
|
||||
"load-failed": "Błąd w ładowaniu wtyczki \"{{pluginName}}\"",
|
||||
"loaded": "Wtyczka \"{{pluginName}}\" załadowana",
|
||||
"unload-failed": "Błąd w odłączaniu wtyczki \"{{pluginName}}\"",
|
||||
"unloaded": "Wtyczka \"{{pluginName}}\" odłączona"
|
||||
}
|
||||
}
|
||||
},
|
||||
"language": {
|
||||
"code": "pl",
|
||||
"local-name": "Polski",
|
||||
"name": "Polish"
|
||||
},
|
||||
"main": {
|
||||
"console": {
|
||||
"did-finish-load": {
|
||||
"dev-tools": "Ukończono ładowanie. Narzędzia deweloperskie otwarte"
|
||||
},
|
||||
"i18n": {
|
||||
"loaded": "i18n załadowane"
|
||||
},
|
||||
"second-instance": {
|
||||
"receive-command": "Otrzymano komendę przez protokół: \"{{command}}\""
|
||||
},
|
||||
"theme": {
|
||||
"css-file-not-found": "Plik CSS \"{{cssFile}}\" nie istnieje, ignoruję"
|
||||
},
|
||||
"unresponsive": {
|
||||
"details": "Błąd! Brak odpowiedzi:\n{{error}}"
|
||||
},
|
||||
"when-ready": {
|
||||
"clearing-cache-after-20s": "Czyszczenie pamięci podręcznej aplikacji"
|
||||
},
|
||||
"window": {
|
||||
"tried-to-render-offscreen": "Okno próbuje się renderować poza ekranem, rozmiar okna={{windowSize}}, rozmiar monitora={{displaySize}}, pozycja={{position}}"
|
||||
}
|
||||
},
|
||||
"dialog": {
|
||||
"hide-menu-enabled": {
|
||||
"detail": "Menu jest ukryte, użyj przycisku [Alt] aby je pokazać (lub [Escape], jeśli używasz menu w aplikacji)",
|
||||
"message": "Ukrywanie menu jest włączone",
|
||||
"title": "Ukrywanie Menu Włączone"
|
||||
},
|
||||
"need-to-restart": {
|
||||
"buttons": {
|
||||
"later": "Później",
|
||||
"restart-now": "Uruchom ponownie teraz"
|
||||
},
|
||||
"detail": "Wtyczka \"{{pluginName}}\" potrzebuje ponownego uruchomienia aby była aktywna",
|
||||
"message": "\"{{pluginName}}\" potrzebuje ponownego uruchomienia",
|
||||
"title": "Ponowne uruchomienie potrzebne"
|
||||
},
|
||||
"unresponsive": {
|
||||
"buttons": {
|
||||
"quit": "Wyjdź",
|
||||
"relaunch": "Ponownie uruchom",
|
||||
"wait": "Czekać"
|
||||
},
|
||||
"detail": "Przepraszamy za niedogodność! Proszę wybierz co zrobić:",
|
||||
"message": "Aplikacja nie reaguje",
|
||||
"title": "Okno nie reaguje"
|
||||
},
|
||||
"update-available": {
|
||||
"buttons": {
|
||||
"disable": "Wyłącz aktualizacje",
|
||||
"download": "Pobierz",
|
||||
"ok": "OK"
|
||||
},
|
||||
"detail": "Nowa wersja jest dostępna i możesz ją pobrać tutaj {{downloadLink}}",
|
||||
"message": "Nowa wersja jest dostępna",
|
||||
"title": "Aktualizacja jest dostępna"
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"about": "O aplikacji",
|
||||
"navigation": {
|
||||
"label": "Nawigacja",
|
||||
"submenu": {
|
||||
"copy-current-url": "Skopiuj aktualny adres URL",
|
||||
"go-back": "Wróć",
|
||||
"go-forward": "Do przodu",
|
||||
"quit": "Wyjście",
|
||||
"restart": "Uruchom ponownie aplikację"
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"label": "Opcje",
|
||||
"submenu": {
|
||||
"advanced-options": {
|
||||
"label": "Opcje zaawansowane",
|
||||
"submenu": {
|
||||
"auto-reset-app-cache": "Wyczyść pamięć podręczną aplikacji przy jej uruchomieniu",
|
||||
"disable-hardware-acceleration": "Wyłącz przyspieszanie sprzętowe",
|
||||
"edit-config-json": "Edytuj config.json",
|
||||
"override-user-agent": "Zastąp klienta użytkownika (User-Agent)",
|
||||
"restart-on-config-changes": "Uruchom ponownie po zmianie konfiguracji",
|
||||
"set-proxy": {
|
||||
"label": "Ustaw proxy",
|
||||
"prompt": {
|
||||
"label": "Podaj adres Proxy: (zostaw pusty aby wyłączyć)",
|
||||
"placeholder": "Przykład: socks5://127.0.0.1:9999",
|
||||
"title": "Ustaw proxy"
|
||||
}
|
||||
},
|
||||
"toggle-dev-tools": "Przełącz narzędzia deweloperskie"
|
||||
}
|
||||
},
|
||||
"always-on-top": "Zawsze na wierzchu",
|
||||
"auto-update": "Automatyczne aktualizacje",
|
||||
"hide-menu": {
|
||||
"dialog": {
|
||||
"message": "Menu będzie ukryte po następnym uruchomieniu, użyj przycisku [Alt] aby je pokazać (lub [`], jeśli używasz menu w aplikacji)",
|
||||
"title": "Ukrywanie menu włączone"
|
||||
},
|
||||
"label": "Ukryj menu"
|
||||
},
|
||||
"language": {
|
||||
"dialog": {
|
||||
"message": "Język będzie zmieniony po ponownym uruchomieniu",
|
||||
"title": "Język zmieniony"
|
||||
},
|
||||
"label": "Język",
|
||||
"submenu": {
|
||||
"to-help-translate": "Chcesz pomóc w tłumaczeniu? Kliknij tutaj"
|
||||
}
|
||||
},
|
||||
"resume-on-start": "Wznów ostatni utwór po uruchomieniu aplikacji",
|
||||
"single-instance-lock": "Zablokuj do jednej instancji aplikacji",
|
||||
"start-at-login": "Uruchom po zalogowaniu",
|
||||
"starting-page": {
|
||||
"label": "Strona startowa",
|
||||
"unset": "Pusty"
|
||||
},
|
||||
"tray": {
|
||||
"label": "Ikona w zasobniku",
|
||||
"submenu": {
|
||||
"disabled": "Wyłączone",
|
||||
"enabled-and-hide-app": "Włącz i ukryj aplikację",
|
||||
"enabled-and-show-app": "Włącz i pokaż aplikację",
|
||||
"play-pause-on-click": "Odtwórz/Wstrzymaj po kliknięciu"
|
||||
}
|
||||
},
|
||||
"visual-tweaks": {
|
||||
"label": "Poprawki wizualne",
|
||||
"submenu": {
|
||||
"like-buttons": {
|
||||
"default": "Domyślne",
|
||||
"force-show": "Wymuś pokazywanie",
|
||||
"hide": "Ukryj",
|
||||
"label": "Przyciski polubienia"
|
||||
},
|
||||
"remove-upgrade-button": "Usuń przycisk subskrypcji premium",
|
||||
"theme": {
|
||||
"label": "Motyw",
|
||||
"submenu": {
|
||||
"import-css-file": "Importuj własny plik CSS",
|
||||
"no-theme": "Bez motywu"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"enabled": "Włączone",
|
||||
"label": "Wtyczki"
|
||||
},
|
||||
"view": {
|
||||
"label": "Widok",
|
||||
"submenu": {
|
||||
"force-reload": "Wymuś ponowne ładowanie",
|
||||
"reload": "Ponowne ładowanie",
|
||||
"reset-zoom": "Rozmiar rzeczywisty",
|
||||
"toggle-fullscreen": "Przełącz pełny ekran",
|
||||
"zoom-in": "Powiększ",
|
||||
"zoom-out": "Pomniejsz"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tray": {
|
||||
"next": "Następny",
|
||||
"play-pause": "Odtwórz/Pauza",
|
||||
"previous": "Poprzedni",
|
||||
"quit": "Wyjdź",
|
||||
"restart": "Uruchom ponownie aplikację",
|
||||
"show": "Pokaż okno"
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"adblocker": {
|
||||
"description": "Blokuj wszystkie reklamy i śledzenie",
|
||||
"menu": {
|
||||
"blocker": "Metoda przechwytywania"
|
||||
},
|
||||
"name": "Blokowanie reklam"
|
||||
},
|
||||
"album-color-theme": {
|
||||
"description": "Stosuje dynamiczny motyw i efekty wizualne w oparciu o paletę kolorów albumu",
|
||||
"name": "Motyw kolorów albumu"
|
||||
},
|
||||
"ambient-mode": {
|
||||
"description": "Stosuje efekt świetlny, rzucając delikatne kolory z wideo na tło ekranu.",
|
||||
"menu": {
|
||||
"blur-amount": {
|
||||
"label": "Ilość rozmycia",
|
||||
"submenu": {
|
||||
"pixels": "{{blurAmount}} pikseli"
|
||||
}
|
||||
},
|
||||
"buffer": {
|
||||
"label": "Bufor",
|
||||
"submenu": {
|
||||
"buffer": "{{buffer}}"
|
||||
}
|
||||
},
|
||||
"opacity": {
|
||||
"label": "Nieprzezroczystość",
|
||||
"submenu": {
|
||||
"percent": "{{opacity}}%"
|
||||
}
|
||||
},
|
||||
"quality": {
|
||||
"label": "Jakość",
|
||||
"submenu": {
|
||||
"pixels": "{{quality}} pikseli"
|
||||
}
|
||||
},
|
||||
"size": {
|
||||
"label": "Rozmiar",
|
||||
"submenu": {
|
||||
"percent": "{{size}}%"
|
||||
}
|
||||
},
|
||||
"smoothness-transition": {
|
||||
"label": "Płynność przejścia",
|
||||
"submenu": {
|
||||
"during": "W czasie {{interpolationTime}}s"
|
||||
}
|
||||
},
|
||||
"use-fullscreen": {
|
||||
"label": "Podczas pełnego ekranu"
|
||||
}
|
||||
},
|
||||
"name": "Tryb otoczenia"
|
||||
},
|
||||
"audio-compressor": {
|
||||
"description": "Zastosuj kompresję do dźwięku (obniża głośność najgłośniejszych części sygnału i zwiększa głośność najcichszych części)",
|
||||
"name": "Kompresor dźwięku"
|
||||
},
|
||||
"blur-nav-bar": {
|
||||
"description": "Sprawia, że pasek nawigacji jest przezroczysty i rozmazany",
|
||||
"name": "Rozmycie paska nawigacji"
|
||||
},
|
||||
"bypass-age-restrictions": {
|
||||
"description": "Pomija weryfikację wieku",
|
||||
"name": "Omiń ograniczenia wiekowe"
|
||||
},
|
||||
"captions-selector": {
|
||||
"description": "Selektor napisów dla ścieżek audio YouTube Music",
|
||||
"menu": {
|
||||
"autoload": "Automatycznie wybierz ostatnio używanych napisów",
|
||||
"disable-captions": "Domyślnie, brak napisów"
|
||||
},
|
||||
"name": "Selektor napisów",
|
||||
"prompt": {
|
||||
"selector": {
|
||||
"label": "Bieżący język napisów: {{language}}",
|
||||
"none": "Brak",
|
||||
"title": "Wybierz język napisów"
|
||||
}
|
||||
},
|
||||
"templates": {
|
||||
"title": "Otwórz selektor napisów"
|
||||
}
|
||||
},
|
||||
"compact-sidebar": {
|
||||
"description": "Zawsze ustawiaj pasek boczny w trybie kompaktowym",
|
||||
"name": "Kompaktowy pasek boczny"
|
||||
},
|
||||
"crossfade": {
|
||||
"description": "Przenikanie pomiędzy utworami",
|
||||
"menu": {
|
||||
"advanced": "Zaawansowane"
|
||||
},
|
||||
"name": "Przenikanie [Beta]",
|
||||
"prompt": {
|
||||
"options": {
|
||||
"multi-input": {
|
||||
"fade-in-duration": "Czas wnikania (milisekundy)",
|
||||
"fade-out-duration": "Czas zanikania (milisekundy)",
|
||||
"fade-scaling": {
|
||||
"label": "Skalowanie zanikania",
|
||||
"linear": "Liniowe",
|
||||
"logarithmic": "Logarytmiczne"
|
||||
},
|
||||
"seconds-before-end": "Przenikanie N sekund przed końcem"
|
||||
},
|
||||
"title": "Opcje przenikania"
|
||||
}
|
||||
}
|
||||
},
|
||||
"disable-autoplay": {
|
||||
"description": "Wyłącza automatyczne odtwarzanie utworów",
|
||||
"menu": {
|
||||
"apply-once": "Tylko przy uruchomieniu aplikacji"
|
||||
},
|
||||
"name": "Wyłącz automatyczne odtwarzanie"
|
||||
},
|
||||
"discord": {
|
||||
"backend": {
|
||||
"already-connected": "Próbowano połączyć się przy aktywnym połączeniu",
|
||||
"connected": "Połączono z Discordem",
|
||||
"disconnected": "Odłączono od Discorda"
|
||||
},
|
||||
"description": "Pokaż znajomym, czego słuchasz dzięki Rich Presence",
|
||||
"menu": {
|
||||
"auto-reconnect": "Automatyczne wznawianie połączenia",
|
||||
"clear-activity": "Wyczyść aktywność",
|
||||
"clear-activity-after-timeout": "Wyczyść aktywność po czasie",
|
||||
"connected": "Połączono",
|
||||
"disconnected": "Odłączono",
|
||||
"hide-duration-left": "Ukryj pozostały czas trwania",
|
||||
"hide-github-button": "Ukryj przycisk do GitHub",
|
||||
"play-on-youtube-music": "Odtwórz w YouTube Music",
|
||||
"set-inactivity-timeout": "Ustaw limit czasu bezczynności"
|
||||
},
|
||||
"name": "Discord Rich Presence",
|
||||
"prompt": {
|
||||
"set-inactivity-timeout": {
|
||||
"label": "Podaj limit czasu bezczynności w sekundach:",
|
||||
"title": "Ustaw limit czasu bezczynności"
|
||||
}
|
||||
}
|
||||
},
|
||||
"downloader": {
|
||||
"backend": {
|
||||
"dialog": {
|
||||
"error": {
|
||||
"buttons": {
|
||||
"ok": "OK"
|
||||
},
|
||||
"message": "Argh! Przepraszamy, pobieranie nie powiodło się…",
|
||||
"title": "Błąd podczas pobierania!"
|
||||
},
|
||||
"start-download-playlist": {
|
||||
"buttons": {
|
||||
"ok": "OK"
|
||||
},
|
||||
"detail": "({{playlistSize}} utworów)",
|
||||
"message": "Pobieranie playlisty {{playlistTitle}}",
|
||||
"title": "Pobieranie rozpoczęte"
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"conversion-progress": "Konwertowanie: {{percent}}%",
|
||||
"converting": "Konwertowanie…",
|
||||
"done": "Gotowe: {{filePath}}",
|
||||
"download-info": "Pobieranie {{artist}} - {{title}} {{videoId}}",
|
||||
"download-progress": "Pobieranie: {{percent}}%",
|
||||
"downloading": "Pobieranie…",
|
||||
"downloading-counter": "Pobieranie {{current}}/{{total}} …",
|
||||
"downloading-playlist": "Pobieranie playlisty \"{{playlistTitle}}\" - {{playlistSize}} utworów ({{playlistId}})",
|
||||
"error-while-downloading": "Błąd pobierania \"{{author}} - {{title}}\": {{error}}",
|
||||
"folder-already-exists": "Folder {{playlistFolder}} już istnieje",
|
||||
"getting-playlist-info": "Pobieram informacje o playliście…",
|
||||
"loading": "Ładowanie…",
|
||||
"playlist-has-only-one-song": "Playlista zawiera tylko jeden element, zostanie pobrany bezpośrednio",
|
||||
"playlist-id-not-found": "Nie znaleziono ID playlisty",
|
||||
"playlist-is-empty": "Playlista jest pusta",
|
||||
"playlist-is-mix-or-private": "Podczas pobierania informacji o playliście wystąpił błąd: upewnij się, że nie jest to playlista prywatna ani playlista „Składanki dla Ciebie”.\n\n{{error}}",
|
||||
"preparing-file": "Przygotowuję plik…",
|
||||
"saving": "Zapisuję…",
|
||||
"trying-to-get-playlist-id": "Próbuję uzyskać ID playlisty: {{playlistId}}",
|
||||
"video-id-not-found": "Nie znaleziono filmu",
|
||||
"writing-id3": "Zapisywanie tagów ID3…"
|
||||
}
|
||||
},
|
||||
"description": "Pobiera MP3/ źródło audio bezpośrednio z interfejsu",
|
||||
"menu": {
|
||||
"choose-download-folder": "Wybierz folder pobierania",
|
||||
"download-playlist": "Pobierz playlistę",
|
||||
"presets": "Predefiniowane ustawienia",
|
||||
"skip-existing": "Pomiń istniejące pliki"
|
||||
},
|
||||
"name": "Pobieranie",
|
||||
"renderer": {
|
||||
"can-not-update-progress": "Nie można zaktualizować postępu"
|
||||
},
|
||||
"templates": {
|
||||
"button": "Pobierz"
|
||||
}
|
||||
},
|
||||
"exponential-volume": {
|
||||
"description": "Sprawia, że suwak głośności jest proporcjonalna, dzięki czemu łatwiej jest wybrać niższą głośność.",
|
||||
"name": "Proporcjonalna głośność"
|
||||
},
|
||||
"in-app-menu": {
|
||||
"description": "Nadaje paskom menu elegancki, ciemny lub albumowy wygląd",
|
||||
"menu": {
|
||||
"hide-dom-window-controls": "Ukryj kontrolki okna DOM"
|
||||
},
|
||||
"name": "Menu w aplikacji"
|
||||
},
|
||||
"last-fm": {
|
||||
"description": "Dodanie obsługi scrobblingu dla Last.fm",
|
||||
"name": "Last.fm"
|
||||
},
|
||||
"lumiastream": {
|
||||
"description": "Dodaje obsługę Lumia Stream",
|
||||
"name": "Lumia Stream [beta]"
|
||||
},
|
||||
"lyrics-genius": {
|
||||
"description": "Dodaje obsługę tekstów dla większości piosenek",
|
||||
"menu": {
|
||||
"romanized-lyrics": "Teksty zromanizowane"
|
||||
},
|
||||
"name": "Tekst piosenek od Genius",
|
||||
"renderer": {
|
||||
"fetched-lyrics": "Tekst dostarczony przez Genius"
|
||||
}
|
||||
},
|
||||
"navigation": {
|
||||
"description": "Strzałki nawigacyjne Dalej/Wstecz zintegrowane bezpośrednio z interfejsem, tak jak w Twojej ulubionej przeglądarce",
|
||||
"name": "Nawigacja"
|
||||
},
|
||||
"no-google-login": {
|
||||
"description": "Usuń przyciski i linki logowania Google z interfejsu",
|
||||
"name": "Usuń logowanie do Google"
|
||||
},
|
||||
"notifications": {
|
||||
"description": "Wyświetl powiadomienie, gdy rozpocznie się odtwarzanie utworu (interaktywne powiadomienia są dostępne w systemie Windows)",
|
||||
"menu": {
|
||||
"interactive": "Interaktywne powiadomienia",
|
||||
"interactive-settings": {
|
||||
"label": "Interaktywne ustawienia",
|
||||
"submenu": {
|
||||
"hide-button-text": "Ukryj tekst przycisku",
|
||||
"refresh-on-play-pause": "Odśwież podczas odtwarzania/pauzy",
|
||||
"tray-controls": "Otwórz/zamknij po kliknięciu ikony na pasku zadań"
|
||||
}
|
||||
},
|
||||
"priority": "Priorytet powiadomień",
|
||||
"toast-style": "Styl powiadomień \"Toast\"",
|
||||
"unpause-notification": "Pokaż powiadomienie po wznowieniu"
|
||||
},
|
||||
"name": "Powiadomienia"
|
||||
},
|
||||
"picture-in-picture": {
|
||||
"description": "Umożliwia przełączenie aplikacji w tryb obrazu w obrazie",
|
||||
"menu": {
|
||||
"always-on-top": "Zawsze na wierzchu",
|
||||
"hotkey": {
|
||||
"label": "Klawisz skrótu",
|
||||
"prompt": {
|
||||
"keybind-options": {
|
||||
"hotkey": "Klawisz skrótu"
|
||||
},
|
||||
"label": "Wybierz klawisz skrótu do przełączania trybu obrazu w obrazie",
|
||||
"title": "Klawisz skrótu obrazu w obrazie"
|
||||
}
|
||||
},
|
||||
"save-window-position": "Zapisz pozycję okna",
|
||||
"save-window-size": "Zapisz rozmiar okna",
|
||||
"use-native-pip": "Użyj natywnego PiP dla przeglądarki"
|
||||
},
|
||||
"name": "Obraz w obrazie",
|
||||
"templates": {
|
||||
"button": "Obraz w obrazie"
|
||||
}
|
||||
},
|
||||
"playback-speed": {
|
||||
"description": "Słuchaj szybko, słuchaj powoli! Dodaje suwak kontrolujący prędkość utworu",
|
||||
"name": "Szybkość odtwarzania",
|
||||
"templates": {
|
||||
"button": "Szybkość"
|
||||
}
|
||||
},
|
||||
"precise-volume": {
|
||||
"description": "Precyzyjnie kontroluj głośność za pomocą kółka myszy/klawiszy skrótu, z niestandardowym interfejsem HUD i konfigurowalnymi krokami głośności",
|
||||
"menu": {
|
||||
"arrows-shortcuts": "Sterowanie za pomocą klawiszy strzałek",
|
||||
"custom-volume-steps": "Ustaw niestandardowe kroki głośności",
|
||||
"global-shortcuts": "Globalne skróty klawiszowe"
|
||||
},
|
||||
"name": "Precyzyjna głośność",
|
||||
"prompt": {
|
||||
"global-shortcuts": {
|
||||
"keybind-options": {
|
||||
"decrease": "Zmniejsz głośność",
|
||||
"increase": "Zwiększ głośność"
|
||||
},
|
||||
"label": "Wybierz globalne skróty klawiaturowe głośności:",
|
||||
"title": "Globalne skróty klawiszowe głośności"
|
||||
},
|
||||
"volume-steps": {
|
||||
"label": "Wybierz kroki zwiększania/zmniejszania głośności",
|
||||
"title": "Kroki głośności"
|
||||
}
|
||||
}
|
||||
},
|
||||
"quality-changer": {
|
||||
"backend": {
|
||||
"dialog": {
|
||||
"quality-changer": {
|
||||
"detail": "Aktualna jakość: {{quality}}",
|
||||
"message": "Wybierz jakość wideo:",
|
||||
"title": "Wybierz jakość wideo"
|
||||
}
|
||||
}
|
||||
},
|
||||
"description": "Umożliwia zmianę jakości wideo za pomocą przycisku na nakładce wideo",
|
||||
"name": "Zmieniacz jakości wideo"
|
||||
},
|
||||
"shortcuts": {
|
||||
"description": "Umożliwia ustawienie globalnych skrótów klawiszowych do odtwarzania (odtwarzanie/pauza/następny/poprzedni) + wyłączanie OSD multimediów poprzez zastąpienie klawiszy multimediów, włączając kombinację klawiszy Ctrl/CMD + F w celu wyszukiwania, obsługę Linux MPRIS dla klawiszy multimediów oraz niestandardowe skróty klawiszowe dla zaawansowanych użytkowników.",
|
||||
"menu": {
|
||||
"override-media-keys": "Zastąp klawisze multimediów",
|
||||
"set-keybinds": "Ustaw globalne sterowanie utworem"
|
||||
},
|
||||
"name": "Skróty klawiszowe (oraz MPRIS)",
|
||||
"prompt": {
|
||||
"keybind": {
|
||||
"keybind-options": {
|
||||
"next": "Następny",
|
||||
"play-pause": "Odtwarzanie / Pauza",
|
||||
"previous": "Poprzedni"
|
||||
},
|
||||
"label": "Wybierz globalne skróty klawiszowe do sterowania utworami:",
|
||||
"title": "Globalne skróty klawiszowe"
|
||||
}
|
||||
}
|
||||
},
|
||||
"skip-disliked-songs": {
|
||||
"description": "Pomija nieulubione piosenki (zaznaczone łapką w dół)",
|
||||
"name": "Pomijanie nieulubionych piosenek"
|
||||
},
|
||||
"skip-silences": {
|
||||
"description": "Automatycznie pomijaj sekcje bez dźwięku w utworach",
|
||||
"name": "Pomiń ciszę"
|
||||
},
|
||||
"sponsorblock": {
|
||||
"description": "Automatycznie pomija fragmenty niebędące muzyką, takie jak wstęp/zakończenie lub fragmenty teledysków, w których utwór nie jest odtwarzany",
|
||||
"name": "Pomiń nieistotne fragmenty"
|
||||
},
|
||||
"taskbar-mediacontrol": {
|
||||
"description": "Steruj odtwarzaniem z paska zadań systemu Windows",
|
||||
"name": "Kontroler odtwarzania z paska zadań"
|
||||
},
|
||||
"touchbar": {
|
||||
"description": "Dodaje widżet do paska dotykowego dla użytkowników systemu macOS",
|
||||
"name": "Pasek dotykowy"
|
||||
},
|
||||
"tuna-obs": {
|
||||
"description": "Integracja z wtyczką OBS Tuna",
|
||||
"name": "Tuna OBS"
|
||||
},
|
||||
"video-toggle": {
|
||||
"description": "Dodaje przycisk do przełączania między trybem wideo a piosenki. Może również opcjonalnie usunąć całą kartę wideo",
|
||||
"menu": {
|
||||
"align": {
|
||||
"label": "Wyrównanie",
|
||||
"submenu": {
|
||||
"left": "Lewo",
|
||||
"middle": "Środek",
|
||||
"right": "Prawo"
|
||||
}
|
||||
},
|
||||
"force-hide": "Wymuś usunięcie zakładki wideo",
|
||||
"mode": {
|
||||
"label": "Tryb",
|
||||
"submenu": {
|
||||
"custom": "Niestandardowy przełącznik",
|
||||
"disabled": "Wyłączony",
|
||||
"native": "Natywny przełącznik"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "Przełącznik wideo",
|
||||
"templates": {
|
||||
"button": "Utwór"
|
||||
}
|
||||
},
|
||||
"visualizer": {
|
||||
"description": "Dodaje wizualizator do odtwarzacza",
|
||||
"menu": {
|
||||
"visualizer-type": "Typ wizualizatora"
|
||||
},
|
||||
"name": "Wizualizator"
|
||||
}
|
||||
}
|
||||
}
|
||||