Compare commits

..

1137 Commits

Author SHA1 Message Date
1c468b4054 Bump version to 3.7.0 2024-12-25 10:28:55 +09:00
1bad46890a fix: fix possible NPE 2024-12-25 10:28:24 +09:00
5829c8d0f7 chore(i18n): Translated using Weblate (Urdu)
Currently translated at 15.7% (64 of 406 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ur/
2024-12-25 02:17:53 +01:00
85aceaaae4 chore(i18n): Translated using Weblate (Korean)
Currently translated at 100.0% (406 of 406 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ko/
2024-12-25 02:15:11 +01:00
24e593b22f fix: use HEAD instead of GET in songInfo.imageSrc validation step
Thanks to @daika7ana!
Close #2766
2024-12-25 09:49:30 +09:00
3f8ca6002e chore(i18n): Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (403 of 403 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/pt_BR/
2024-12-25 01:45:27 +01:00
b62ccfe7b1 feat(amuse): song query api (add amuse plugin) (#2723)
Co-authored-by: JellyBrick <shlee1503@naver.com>
2024-12-25 09:45:19 +09:00
237dde9765 feat(api-server): add absolute seek endpoint (#2748)
Co-authored-by: JellyBrick <shlee1503@naver.com>
2024-12-25 08:46:51 +09:00
65f4339fd1 fix: flatpak baseVersion 2024-12-25 08:42:59 +09:00
109e9f8166 feat(api-server): Add repeat mode and seek time API (#2630)
Co-authored-by: sent44 <sent44@root533.premium-rootserver.net>
Co-authored-by: JellyBrick <shlee1503@naver.com>
2024-12-25 08:41:44 +09:00
9163b6f04b fix(ci): Bump flatpak runtime version 2024-12-25 08:17:40 +09:00
51da259c97 feat(synced-lyrics): Better-Lyrics Styling for Synced-Lyrics (#2554)
Co-authored-by: JellyBrick <shlee1503@naver.com>
2024-12-25 08:15:36 +09:00
2bf67b941e chore(i18n): Translated using Weblate (Urdu)
Currently translated at 15.7% (63 of 401 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ur/
2024-12-24 23:44:35 +01:00
533b96d1f6 feat(synced-lyrics): multiple lyric sources (#2383)
Co-authored-by: JellyBrick <shlee1503@naver.com>
2024-12-25 07:44:29 +09:00
5c9ded8779 chore(deps): update dependency typescript-eslint to v8.18.2 (#2763)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-25 01:42:18 +09:00
6f389bb297 chore(i18n): Added translation using Weblate (Urdu) 2024-12-24 08:59:48 +01:00
8a209404d4 chore(i18n): Translated using Weblate (Hindi)
Currently translated at 26.1% (105 of 401 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/hi/
2024-12-24 08:59:35 +01:00
6193fb487a chore(i18n): Translated using Weblate (Hindi)
Currently translated at 25.9% (104 of 401 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/hi/
2024-12-23 17:00:41 +01:00
9aa7f7a023 chore(i18n): Translated using Weblate (Indonesian)
Currently translated at 100.0% (401 of 401 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/id/
2024-12-23 17:00:40 +01:00
5bfaa9a791 chore(i18n): Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (401 of 401 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/zh_Hant/
2024-12-23 17:00:39 +01:00
py
d210ec8227 chore(i18n): Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (401 of 401 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/zh_Hans/
2024-12-23 17:00:38 +01:00
dec7c5e95c chore(i18n): Translated using Weblate (Ukrainian)
Currently translated at 99.0% (397 of 401 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/uk/
2024-12-23 17:00:37 +01:00
940d0beb84 chore(i18n): Translated using Weblate (French)
Currently translated at 100.0% (401 of 401 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/fr/
2024-12-23 17:00:36 +01:00
cf98754276 chore(deps): update dependency discord-api-types to v0.37.114 (#2761)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-24 00:37:14 +09:00
d91d493dd1 chore(deps): update dependency discord-api-types to v0.37.113 (#2759)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-23 09:11:34 +09:00
7e1aea21db fix: Set correct window class for X11 and Wayland (#2758) 2024-12-23 09:10:57 +09:00
0179dfd311 feat: Specify flatpak runtime (#2755) 2024-12-22 23:39:05 +09:00
98ea26bbff chore(deps): update dependency rollup to v4.29.1 (#2749)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-22 23:38:48 +09:00
0d9daaad66 chore(deps): update dependency esbuild to v0.24.2 (#2742)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-22 23:38:33 +09:00
fe319daec1 fix: Add Flatpak permissions needed for MPRIS and tray icon (#2754) 2024-12-22 23:37:30 +09:00
929c58671a chore(deps): update dependency vite-plugin-inspect to v0.10.6 (#2756)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-22 23:36:28 +09:00
4fb2350c2b chore(i18n): Translated using Weblate (Russian)
Currently translated at 100.0% (401 of 401 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ru/
2024-12-21 16:00:29 +01:00
a401bfa809 chore(i18n): Translated using Weblate (Japanese)
Currently translated at 100.0% (401 of 401 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ja/
2024-12-21 16:00:28 +01:00
fdeed76f6f chore(i18n): Translated using Weblate (Spanish)
Currently translated at 100.0% (401 of 401 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/es/
2024-12-21 16:00:27 +01:00
0ab113816a chore(deps): update dependency vite to v6.0.5 (#2745)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-20 23:33:52 +09:00
8a58b02c7b fix(deps): update dependency i18next to v24.2.0 (#2744)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-20 23:32:16 +09:00
037b059b55 chore(deps): update dependency vite-plugin-inspect to v0.10.4 (#2743)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-20 23:32:07 +09:00
bb0f9fb3d0 chore(deps): update dependency discord-api-types to v0.37.112 (#2740)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-20 23:31:24 +09:00
d3c7848896 fix(discord): use net.fetch instead of fetch 2024-12-20 23:23:15 +09:00
ea50cb1e65 fix(discord): check imageSrc 2024-12-20 23:22:48 +09:00
5070fd88b5 fix(discord): Fix Album Art failing on Discord RPC (#2666) 2024-12-20 23:19:51 +09:00
21177478cb fix(equalizer): add addedVersion 2024-12-20 23:19:33 +09:00
26b8b38b89 feat: Add equalizer plugin with presets (e.g. bass booster) (#2575) 2024-12-20 23:17:11 +09:00
be04d66aa8 fix: use ghostry adblocker 2024-12-19 19:53:43 +09:00
a837987e70 chore(deps): update dependency vite to v6.0.4 (#2738)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-19 19:28:44 +09:00
da99558163 fix: Fixed #1796 (#2736) 2024-12-19 19:24:32 +09:00
3b50cbcb6e Revert "feat: use swc and lightningcss"
This reverts commit ae3a289005.
2024-12-19 12:42:31 +09:00
595c011bce Revert "fix: fix minify size issue"
This reverts commit 458fe54063.
2024-12-19 12:42:15 +09:00
458fe54063 fix: fix minify size issue 2024-12-19 12:38:49 +09:00
ae3a289005 feat: use swc and lightningcss 2024-12-19 12:22:15 +09:00
a49eea9246 chore(deps): update dependency electron-devtools-installer to v4 (#2734)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-18 22:02:22 +09:00
d675a175e9 Revert "chore(deps): update dependency electron-builder to v25" (#2732)
This reverts commit 6c510a71c2.
2024-12-18 16:14:39 +09:00
6c510a71c2 chore(deps): update dependency electron-builder to v25 (#2490)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-18 13:23:56 +09:00
5503d2cbb8 fix(deps): update dependency i18next to v24.1.2 (#2727)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-18 12:05:24 +09:00
ba4c7e1a0c chore(deps): update dependency electron-devtools-installer to v3.2.1 (#2731)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-18 12:02:00 +09:00
e19c458441 chore(deps): update dependency typescript-eslint to v8.18.1 (#2724)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-17 09:11:12 +09:00
ec5cf0cae8 chore(i18n): Translated using Weblate (Filipino)
Currently translated at 87.1% (346 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/fil/
2024-12-16 10:00:36 +01:00
b3c4570f8c fix: tab misalignment (#2713) 2024-12-16 11:49:57 +09:00
112b6d893b fix(deps): update dependency @hono/zod-validator to v0.4.2 (#2709)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-15 22:02:16 +09:00
52236907e4 chore(deps): update eslint monorepo to v9.17.0 (#2712)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-15 22:00:38 +09:00
d449529ea7 fix(deps): update dependency hono to v4.6.14 (#2716)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-15 22:00:28 +09:00
61c799f7d4 fix: discord rich presence connection status (#2714)
* fix: discord rich presence connection status

* fix: optional chaining already handles null case
2024-12-15 22:00:00 +09:00
1a4ee13e47 fix(CI): temporary disable title check 2024-12-13 12:33:17 +09:00
f91afb984a fix: Laggy scrolling behaviour in large playlists (#2708) 2024-12-13 12:28:48 +09:00
f9892b0eae fix(deps): update dependency youtubei.js to v12.2.0 (#2705)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-13 12:19:20 +09:00
60c7885a3c fix(deps): update dependency i18next to v24.1.0 (#2698)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-11 20:58:08 +09:00
63ca6aa533 chore(deps): update dependency @stylistic/eslint-plugin-js to v2.12.1 (#2697)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-11 20:57:53 +09:00
e77a8c04e8 fix(deps): update dependency zod to v3.24.1 (#2694)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-11 13:30:22 +09:00
0bfabf604c fix(deps): update dependency youtubei.js to v12.1.0 (#2695)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-11 07:22:18 +09:00
4343c599cf chore(deps): update dependency discord-api-types to v0.37.111 (#2690)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-10 12:06:17 +09:00
c251554c31 chore(deps): update dependency typescript-eslint to v8.18.0 (#2692)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-10 12:06:09 +09:00
95e519bdc9 chore(deps): update playwright monorepo to v1.49.1 (#2693)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-10 12:06:00 +09:00
79d38bfc8e fix(deps): update dependency hono to v4.6.13 (#2682)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-09 18:26:40 +09:00
f5655b0ae6 chore(deps): update dependency rollup to v4.28.1 (#2683)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-09 18:26:24 +09:00
12b4afc3ce fix(deps): update dependency conf to v13.1.0 (#2686)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-09 18:26:10 +09:00
c104d47737 chore(deps): update dependency @stylistic/eslint-plugin-js to v2.12.0 (#2689)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-09 18:25:59 +09:00
870cf6143c chore(i18n): Translated using Weblate (Portuguese)
Currently translated at 97.9% (389 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/pt/
2024-12-06 18:00:23 +01:00
1baed0e913 fix(deps): update dependency youtubei.js to v12 (#2681)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-06 12:11:21 +09:00
02619c79bb chore(deps): update dependency vite to v6.0.3 (#2680)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-06 12:11:10 +09:00
0faad538f3 fix(album-actions): Fixed #2312 (#2676)
* Fixed #2312

* Update src/plugins/album-actions/index.ts

Co-authored-by: JellyBrick <shlee1503@naver.com>

---------

Co-authored-by: JellyBrick <shlee1503@naver.com>
2024-12-06 12:10:10 +09:00
Bai
e7de30c629 chore(i18n): Translated using Weblate (Turkish)
Currently translated at 100.0% (397 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/tr/
2024-12-05 15:00:29 +01:00
c5d8333039 chore(deps): update dependency eslint-import-resolver-typescript to v3.7.0 (#2672)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-05 22:41:35 +09:00
4da08e7c9b chore(deps): update dependency node-gyp to v11 (#2678)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-05 22:41:25 +09:00
Bai
171387995a chore(i18n): Translated using Weblate (Turkish)
Currently translated at 100.0% (397 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/tr/
2024-12-04 02:00:59 +00:00
aeac020c9a fix(deps): update dependency i18next to v24.0.5 (#2669)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-03 21:51:58 +09:00
5c05ddeb29 fix(deps): update dependency i18next to v24.0.4 (#2668)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-03 16:30:34 +09:00
cbdd649365 chore(deps): update dependency vite to v6.0.2 (#2662)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-03 16:30:23 +09:00
d2cf2ad71f chore(deps): update dependency node-gyp to v10.3.1 (#2665)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-03 16:28:21 +09:00
7d33494097 chore(deps): update dependency typescript-eslint to v8.17.0 (#2664)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-03 16:28:12 +09:00
ca83edabf3 chore(deps): update dependency vite-plugin-inspect to v0.10.3 (#2667)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-03 16:27:33 +09:00
f84e77e814 chore(deps): update dependency rollup to v4.28.0 (#2661)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-01 22:07:47 +09:00
14f2120a32 chore(deps): update dependency discord-api-types to v0.37.110 (#2653)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-01 22:04:03 +09:00
1cbf14ee2a fix(deps): update dependency @hono/zod-openapi to v0.18.3 (#2654)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-01 22:03:54 +09:00
b7cb167fc6 chore(deps): update eslint monorepo to v9.16.0 (#2656)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-01 22:03:45 +09:00
41b9f8b967 chore(deps): update dependency vite-plugin-inspect to v0.10.2 (#2657)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-01 22:03:34 +09:00
0b769ce287 fix(youtube-music.css): Fixed #2514 (#2659) 2024-12-01 22:03:11 +09:00
ad71ef8a68 chore(i18n): Translated using Weblate (Arabic)
Currently translated at 36.2% (144 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ar/
2024-11-30 15:00:35 +01:00
048a994f32 fix: Fixed Skip Disliked Song not working (#2651) 2024-11-28 20:21:41 +09:00
c2bd8ce188 fix(deps): update dependency @hono/zod-openapi to v0.18.2 (#2650)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-28 20:20:39 +09:00
62ce4e818c chore(deps): update dependency vite-plugin-inspect to v0.10.1 (#2652)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-28 20:20:24 +09:00
4ab8829a02 chore(deps): update dependency electron to v33.2.1 (#2649)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-28 12:02:27 +09:00
36b3e2cb0c chore(deps): update dependency vite-plugin-inspect to v0.10.0 (#2646)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-27 23:20:27 +09:00
9ba0614a7d chore(deps): update dependency vite to v6 (#2644)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-27 23:17:55 +09:00
81431ad196 fix(deps): update dependency @hono/swagger-ui to v0.5.0 (#2643)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-27 23:16:11 +09:00
a8e8d5afd7 chore(deps): update dependency discord-api-types to v0.37.109 (#2642)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-27 23:16:00 +09:00
f3d86743ee chore(deps): update dependency vite-plugin-solid to v2.11.0 (#2641)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-27 23:15:50 +09:00
6306968193 fix(deps): update dependency hono to v4.6.12 (#2636)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-27 07:24:16 +09:00
7142a253d6 fix(deps): update dependency i18next to v24.0.2 (#2637)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-27 07:24:07 +09:00
2a24588338 chore(deps): update dependency discord-api-types to v0.37.108 (#2638)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-27 07:23:58 +09:00
2abaf54ac8 chore(deps): update dependency typescript-eslint to v8.16.0 (#2639)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-27 07:23:26 +09:00
cc730ad55c chore(i18n): Translated using Weblate (Russian)
Currently translated at 100.0% (397 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ru/
2024-11-25 16:01:11 +00:00
d8581c5d69 chore(i18n): Translated using Weblate (Hebrew)
Currently translated at 10.3% (41 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/he/
2024-11-24 16:00:26 +01:00
3208bf4a6d fix: fix pnpm-lock.yaml 2024-11-24 14:46:02 +09:00
4109db1ad7 chore(deps): update dependency rollup to v4.27.4 (#2632)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-24 14:36:40 +09:00
87a0ef5d54 fix(deps): update dependency i18next to v24 (#2633)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-24 14:34:40 +09:00
cdc40f0c53 chore(deps): update dependency typescript to v5.7.2 (#2629)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-24 14:32:08 +09:00
7a3b8082a2 chore(deps): update dependency discord-api-types to v0.37.107 (#2627)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-24 14:31:57 +09:00
3e9039c97d fix(deps): update dependency @hono/zod-openapi to v0.18.0 (#2626)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-24 14:31:48 +09:00
b9d1130468 fix(deps): update dependency i18next to v23.16.8 (#2625)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-24 14:31:38 +09:00
605f0984e4 chore(deps): update dependency vite-plugin-inspect to v0.8.8 (#2623)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-21 12:27:36 +09:00
44de7d9e98 fix(deps): update dependency hono to v4.6.11 (#2624)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-21 12:27:25 +09:00
9926575744 chore(deps): update playwright monorepo to v1.49.0 (#2617)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-21 12:26:28 +09:00
f16a99f6e4 chore(deps): update dependency rollup to v4.27.3 (#2610)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-21 12:10:10 +09:00
a23c64b5b8 chore(deps): update dependency typescript-eslint to v8.15.0 (#2611)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-21 12:10:00 +09:00
0899f76548 chore(deps): update dependency @stylistic/eslint-plugin-js to v2.11.0 (#2618)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-21 12:09:44 +09:00
515dcdc7e3 chore(i18n): Translated using Weblate (Arabic)
Currently translated at 35.7% (142 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ar/
2024-11-19 20:20:51 +01:00
b2c4bc425b chore(deps): update dependency discord-api-types to v0.37.105 (#2603)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-18 23:36:03 +09:00
363c3b3a67 chore(deps): update dependency rollup to v4.27.2 (#2604)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-18 23:35:54 +09:00
c2dde3d78f chore(deps): update eslint monorepo to v9.15.0 (#2607)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-18 23:35:45 +09:00
eb515cfc61 fix(deps): update dependency @hono/zod-openapi to v0.17.1 (#2608)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-18 23:35:34 +09:00
c208ca184f chore(i18n): Translated using Weblate (Estonian)
Currently translated at 19.3% (77 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/et/
2024-11-17 01:00:26 +01:00
c231fa7c44 fix(ambient-mode): fix ambient-mode overlapping other elements (#2609)
Co-authored-by: h-banii <h-banii@users.noreply.github.com>
2024-11-16 18:41:29 +09:00
9e1b8d43d0 fix: Allow media playback control (MPRIS) for flatpak (#2606) 2024-11-16 15:45:09 +09:00
f50ece88df chore(i18n): Translated using Weblate (Slovenian)
Currently translated at 69.2% (275 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/sl/
2024-11-16 00:00:34 +01:00
eeb780d190 fix(deps): update dependency @hono/node-server to v1.13.7 (#2598)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-14 01:59:11 +09:00
cafdf654d3 chore(deps): update dependency rollup to v4.26.0 (#2600)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-14 01:47:36 +09:00
2d665013e7 fix(deps): update dependency hono to v4.6.10 (#2601)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-14 01:47:25 +09:00
451a46e208 chore(i18n): Translated using Weblate (Polish)
Currently translated at 100.0% (397 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/pl/
2024-11-12 19:00:31 +01:00
490b901c34 fix(deps): update dependency @hono/node-server to v1.13.6 (#2594)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-12 18:12:53 +09:00
b57b4a3454 chore(deps): update dependency vite to v5.4.11 (#2595)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-12 18:12:43 +09:00
60c61e32b1 chore(deps): update dependency typescript-eslint to v8.14.0 (#2596)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-12 18:12:30 +09:00
aa9052d449 chore(i18n): Translated using Weblate (Vietnamese)
Currently translated at 99.7% (396 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/vi/
2024-11-11 10:00:21 +00:00
67f3a38583 chore(deps): update dependency electron to v33.2.0 (#2591)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-10 22:45:49 +09:00
a00ecc4729 fix(deps): update dependency @hono/zod-openapi to v0.17.0 (#2592)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-10 22:44:18 +09:00
56d63fca52 fix(deps): update dependency i18next to v23.16.5 (#2589)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-10 18:49:48 +09:00
759f3ba317 fix(deps): update dependency @hono/node-server to v1.13.5 (#2578)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-10 18:49:41 +09:00
d8daf03f2c fix(deps): update dependency hono to v4.6.9 (#2579)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-10 18:47:33 +09:00
a519c7c714 chore(deps): update dependency discord-api-types to v0.37.104 (#2588)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-10 18:47:27 +09:00
933d12fdd1 chore(deps): update dependency typescript-eslint to v8.13.0 (#2581)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-10 18:44:46 +09:00
61fb733550 chore(deps): update dependency rollup to v4.25.0 (#2580)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-10 18:44:40 +09:00
7f05e3168d chore(docs): Update screenshot (#2587) 2024-11-10 18:44:31 +09:00
3b7697a90d chore(docs): Specify full path to xattr for macOS, fixes #2583 (#2586) 2024-11-10 18:43:34 +09:00
350b1467fe chore(i18n): Translated using Weblate (Sinhala)
Currently translated at 12.3% (49 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/si/
2024-11-07 17:00:17 +00:00
2f5d102f4d chore(i18n): Translated using Weblate (Turkish)
Currently translated at 98.9% (393 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/tr/
2024-11-05 21:00:23 +01:00
66e296df1a fix(taskbar-mediacontrol): remove console.log 2024-11-03 19:21:47 +09:00
1e4cd699db fix: callback for time-changed event (#2577)
Co-authored-by: Derek Alsop <15299183+Azorant@users.noreply.github.com>
2024-11-03 19:18:06 +09:00
516fbff3d7 fix: innerHTML trusted-types 2024-11-03 18:22:33 +09:00
aab9358d67 chore(deps): update eslint monorepo to v9.14.0 (#2573)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-03 15:48:00 +09:00
ae3939f857 chore(deps): update dependency utf-8-validate to v6.0.5 (#2572)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-03 15:45:54 +09:00
79bafd1780 chore(deps): update dependency @stylistic/eslint-plugin-js to v2.10.1 (#2571)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-03 15:44:46 +09:00
3f4f52a31f chore(i18n): Translated using Weblate (Russian)
Currently translated at 100.0% (397 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ru/
2024-11-01 15:00:19 +00:00
c2b7b29716 fix(deps): update dependency @hono/node-server to v1.13.4 (#2570)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-01 07:19:44 +09:00
dab84b9cf9 chore(i18n): Translated using Weblate (Russian)
Currently translated at 100.0% (397 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ru/
2024-10-31 15:00:16 +01:00
e5980158eb chore(deps): update dependency @stylistic/eslint-plugin-js to v2.10.0 (#2569)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-31 12:24:46 +09:00
647d4c9d99 fix(deps): update dependency @floating-ui/dom to v1.6.12 (#2568)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-31 12:24:38 +09:00
30feb6128b chore(deps): update dependency rollup to v4.24.3 (#2565)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-30 07:57:12 +09:00
0cf6923540 fix(deps): update dependency hono to v4.6.8 (#2564)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-30 07:57:04 +09:00
cce9f0b462 chore(deps): update dependency typescript-eslint to v8.12.2 (#2563)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-30 07:56:55 +09:00
c0805fb758 chore(deps): update dependency typescript-eslint to v8.12.0 (#2561)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-29 07:13:13 +09:00
04e5844301 fix(deps): update dependency youtubei.js to v11 (#2562)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-29 07:13:03 +09:00
f28e663133 chore(i18n): Translated using Weblate (Slovenian)
Currently translated at 69.2% (275 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/sl/
2024-10-28 17:00:25 +01:00
2c84527c43 chore(i18n): Translated using Weblate (Czech)
Currently translated at 95.2% (378 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/cs/
2024-10-28 17:00:23 +01:00
68511de727 chore(deps): update dependency rollup to v4.24.2 (#2559)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-28 19:33:15 +09:00
e7ca9f129f fix(deps): update dependency @hono/node-server to v1.13.3 (#2560)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-28 19:33:06 +09:00
259da70e4f fix(deps): update dependency i18next to v23.16.4 (#2550)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-28 19:01:37 +09:00
9409d75ac7 chore(deps): update playwright monorepo to v1.48.2 (#2551)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-28 19:01:24 +09:00
3ea923f56f fix(deps): update dependency hono to v4.6.7 (#2552)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-28 19:01:13 +09:00
6d6c8c94cf chore(deps): update dependency @babel/runtime to v7.26.0 (#2548)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-28 19:01:03 +09:00
29098758a9 chore(i18n): Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (397 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/zh_Hant/
2024-10-27 16:00:14 +01:00
fdbb35e221 chore(deps): update dependency @types/color to v4 (#2547)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-25 12:15:35 +09:00
6ddac62313 fix(deps): update dependency i18next to v23.16.3 (#2545)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-25 07:18:08 +09:00
ae4b494300 chore(i18n): Translated using Weblate (Arabic)
Currently translated at 31.2% (124 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ar/
2024-10-24 21:13:04 +02:00
Adi
7d9eed88f4 chore(i18n): Translated using Weblate (French)
Currently translated at 98.7% (392 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/fr/
2024-10-24 21:13:04 +02:00
4abf848f99 fix(deps): update dependency solid-js to v1.9.3 (#2541)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-23 14:36:36 +09:00
cc0a6cfdce chore(deps): update dependency vite to v5.4.10 (#2542)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-23 14:25:16 +09:00
a74d0dd0ca chore(deps): update dependency electron to v33.0.2 (#2537)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-23 07:08:31 +09:00
18f15d4cce chore(deps): update dependency @babel/runtime to v7.25.9 (#2538)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-23 07:08:22 +09:00
80e20c6579 chore(i18n): Translated using Weblate (German)
Currently translated at 100.0% (397 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/de/
2024-10-22 19:15:42 +00:00
761026fd74 chore(i18n): Translated using Weblate (German)
Currently translated at 100.0% (397 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/de/
2024-10-22 19:15:41 +00:00
95b75f020c chore(deps): update dependency discord-api-types to v0.37.103 (#2532)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-22 22:28:47 +09:00
574e4baef8 chore(deps): update dependency typescript-eslint to v8.11.0 (#2534)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-22 22:28:39 +09:00
ec4871d5a8 fix(deps): update dependency hono to v4.6.6 (#2536)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-22 18:36:51 +09:00
ccd6bf9c3f chore(i18n): Translated using Weblate (Arabic)
Currently translated at 27.9% (111 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ar/
2024-10-21 12:16:16 +02:00
2975d4292c chore(i18n): Translated using Weblate (Romanian)
Currently translated at 100.0% (397 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ro/
2024-10-21 12:16:15 +02:00
ad9571550f fix(tuna-obs): Added song url to tuna-obs plugin (#2524) 2024-10-21 10:16:41 +09:00
980068217c fix(deps): update dependency i18next to v23.16.2 (#2530)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-21 00:05:49 +09:00
18f69aea3f fix(deps): update dependency i18next to v23.16.1 (#2529)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-20 23:34:58 +09:00
add7cb9e48 chore(deps): update eslint monorepo to v9.13.0 (#2528)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-20 23:34:48 +09:00
aa67a57971 chore(i18n): Translated using Weblate (Hindi)
Currently translated at 1.5% (6 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/hi/
2024-10-20 10:16:29 +02:00
74f22b4474 chore(i18n): Translated using Weblate (Japanese)
Currently translated at 100.0% (397 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ja/
2024-10-20 10:16:29 +02:00
DW
7ef4a23576 chore(i18n): Translated using Weblate (Hindi)
Currently translated at 0.2% (1 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/hi/
2024-10-19 07:16:28 +02:00
3c90a1f459 chore(i18n): Translated using Weblate (Turkish)
Currently translated at 97.4% (387 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/tr/
2024-10-19 07:16:27 +02:00
DW
3793d36f36 chore(i18n): Added translation using Weblate (Hindi) 2024-10-18 07:01:23 +02:00
179f4b29db chore(i18n): Translated using Weblate (Persian)
Currently translated at 74.3% (295 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/fa/
2024-10-18 07:01:22 +02:00
34f106896c chore(i18n): Translated using Weblate (Icelandic)
Currently translated at 97.2% (386 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/is/
2024-10-18 07:01:22 +02:00
06b581f499 chore(deps): update dependency typescript-eslint to v8.10.0 (#2527)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-18 07:47:15 +09:00
3ec126628c chore(deps): update playwright monorepo to v1.48.1 (#2516)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-18 07:47:06 +09:00
1d3bb60e0b fix(tuna-obs): lite mode logic 2024-10-18 07:46:50 +09:00
2e3ced6006 fix(tuna-obs): fix lite mode logic 2024-10-18 07:45:49 +09:00
e8efca5a3e chore(i18n): Translated using Weblate (Persian)
Currently translated at 74.3% (295 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/fa/
2024-10-17 19:16:24 +02:00
5161c356f9 chore(i18n): Translated using Weblate (Thai)
Currently translated at 70.2% (279 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/th/
2024-10-17 19:16:23 +02:00
py
e917b30e64 chore(i18n): Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (397 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/zh_Hans/
2024-10-17 19:16:23 +02:00
2d847f9808 chore(i18n): Translated using Weblate (Italian)
Currently translated at 100.0% (397 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/it/
2024-10-17 19:16:22 +02:00
21755fffc7 chore(deps): update dependency electron to v33.0.1 (#2523)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-17 11:37:56 +09:00
5c9d3e3e67 fix: disable gpu memory buffer video frames (#2519) 2024-10-17 07:11:33 +09:00
ea801f65ef Update changelog for v3.6.2 2024-10-16 11:59:00 +00:00
27f4c0393e Bump version to 3.6.2 2024-10-16 20:43:19 +09:00
9bc42f836f fix: trustedTypes issue
- Close #2339
2024-10-16 20:40:35 +09:00
11b11ed966 fix(deps): update dependency serve to v14.2.4 (#2515)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-16 20:15:01 +09:00
5f79b7e788 chore(i18n): Translated using Weblate (Icelandic)
Currently translated at 94.7% (376 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/is/
2024-10-15 22:15:39 +02:00
7d1d806797 chore(i18n): Translated using Weblate (Indonesian)
Currently translated at 100.0% (397 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/id/
2024-10-15 22:15:39 +02:00
836cedb0f3 chore(i18n): Translated using Weblate (Ukrainian)
Currently translated at 100.0% (397 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/uk/
2024-10-15 22:15:39 +02:00
70349e13cc chore(i18n): Translated using Weblate (Russian)
Currently translated at 99.7% (396 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ru/
2024-10-15 22:15:39 +02:00
6d16b74471 fix(deps): update dependency hono to v4.6.5 (#2509)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-15 22:33:46 +09:00
c211780c33 chore(deps): update dependency vite to v5.4.9 (#2500)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-15 13:46:51 +09:00
2173ba0234 fix(api-server): properly implement next api call (#2505) 2024-10-15 13:34:19 +09:00
3a4cbc543b chore(deps): update dependency electron to v33 (#2507)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-15 13:30:11 +09:00
2fef7f0246 chore(deps): update dependency typescript-eslint to v8.9.0 (#2503)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-15 05:03:21 +09:00
12d693921e chore(i18n): Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (397 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/zh_Hant/
2024-10-14 19:24:56 +02:00
d1b4879f51 chore(deps): update dependency discord-api-types to v0.37.102 (#2501)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-14 23:32:47 +09:00
f14939fcd2 Update changelog for v3.6.1 2024-10-14 13:42:17 +00:00
4e66b0cedd fix: remove snap arm 2024-10-14 22:23:37 +09:00
11fe54d640 fix(style): fix youtube music player layout not aligned issue 2024-10-14 22:01:26 +09:00
446529f738 fix: remove pacman 2024-10-14 21:59:56 +09:00
ac6e9deeb9 chore(i18n): Translated using Weblate (Spanish)
Currently translated at 100.0% (397 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/es/
2024-10-14 14:42:58 +02:00
100873163f fix: remove "compression": "maximum" 2024-10-14 21:34:33 +09:00
e141e18bac fix: fix build 2024-10-14 21:27:42 +09:00
f4da0c2c95 fix: enum value must be one of xz,lzo, got 'maximum' 2024-10-14 21:17:15 +09:00
7507bce3cc fix: fix org.electronjs.Electron2.BaseApp/x86_64/20.08 2024-10-14 21:03:10 +09:00
2b970fade8 fix: fix org.freedesktop.Sdk/x86_64/20.08 2024-10-14 20:51:36 +09:00
35f0e43082 fix: remove duplicate flatpak 2024-10-14 20:38:25 +09:00
ae4410a613 fix(flatpak): remove armhf/arm64 2024-10-14 20:32:05 +09:00
5534174016 fix: fix flatpak build 2024-10-14 20:27:33 +09:00
15cf6c77c3 fix: fix flatpak release 2024-10-14 20:12:54 +09:00
18a8fc462d fix: fix pnpm-lock 2024-10-14 20:01:02 +09:00
d3acb4945a chore(flatpak-builder): Add more details when failing 2024-10-14 19:57:41 +09:00
32d3c58b44 fix: fix release workflow 2024-10-14 19:33:37 +09:00
bd8c2eb390 fix: configuration has an unknown property 'AppImage' 2024-10-14 19:26:24 +09:00
a81fa9c0d1 fix: apt update 2024-10-14 19:22:02 +09:00
1d0f7d7a48 fix: fix release 2024-10-14 19:20:04 +09:00
b6687307df Bump version to 3.6.1 2024-10-14 19:16:25 +09:00
7e07a44f68 fix(downloader): fix #2371 2024-10-14 18:27:04 +09:00
5ca66530ee fix(ytm-bugs): incorrect video ratio
- Close #2459
2024-10-14 18:16:22 +09:00
95acbe2b65 fix: fix conflict with adguard 2024-10-14 18:06:08 +09:00
534aeb163a fix(api-server): fix init/authentication error
- Close #2497
2024-10-14 17:51:59 +09:00
6abcbee290 chore(i18n): Translated using Weblate (English)
Currently translated at 100.0% (397 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/en/
2024-10-14 09:54:33 +02:00
4457a043a4 chore(i18n): Translated using Weblate (English)
Currently translated at 100.0% (397 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/en/
2024-10-14 09:54:05 +02:00
410a052fea chore(i18n): Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (397 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/pt_BR/
2024-10-14 09:51:36 +02:00
e4287085a1 chore(i18n): Translated using Weblate (Filipino)
Currently translated at 87.1% (346 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/fil/
2024-10-14 09:51:36 +02:00
b6cefef8fb fix(api-server): Various fixes and improvements (#2496) 2024-10-14 16:48:11 +09:00
9d7e2a06bc fix(deps): update dependency electron-debug to v4.1.0 (#2499)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-14 16:45:19 +09:00
d516fc2153 fix(renderer): fix force like buttons display logic (#2493) 2024-10-14 04:27:23 +09:00
77bfe8e218 fix: RSS feed CORS issue
- Close #1620
2024-10-14 04:04:17 +09:00
0fcbe38837 fix(deps): update dependency i18next to v23.16.0 (#2492)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-14 03:46:38 +09:00
b85a40f683 Update changelog for v3.6.0 2024-10-13 13:57:28 +00:00
8020d61715 Bump version to 3.6.0 2024-10-13 22:48:28 +09:00
cb1381bbb3 fix: apply fix from eslint 2024-10-13 22:45:11 +09:00
f42f20f770 chore(i18n): Translated using Weblate (Persian)
Currently translated at 49.1% (195 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/fa/
2024-10-13 15:40:48 +02:00
9fb1dbfde0 chore(i18n): Translated using Weblate (Arabic)
Currently translated at 26.9% (107 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ar/
2024-10-13 15:40:47 +02:00
4f1ebab45d chore(i18n): Translated using Weblate (Catalan)
Currently translated at 100.0% (397 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ca/
2024-10-13 15:34:42 +02:00
95644ea513 chore(i18n): Translated using Weblate (Korean)
Currently translated at 100.0% (397 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ko/
2024-10-13 15:34:41 +02:00
2fcddc8d2d chore(i18n): Translated using Weblate (Spanish)
Currently translated at 99.7% (396 of 397 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/es/
2024-10-13 15:34:41 +02:00
6505a93645 fix(api-server): fix i18n 2024-10-13 21:56:17 +09:00
11c25efd47 fix(taskbar-mediacontrol): fix icon color
- Close #2485
2024-10-13 21:45:20 +09:00
a97bc8da5a fix(README): fix eslint path 2024-10-13 21:42:00 +09:00
782116b31b fix: pin deps version 2024-10-13 19:14:40 +09:00
708d4b5480 chore(deps): Bump pnpm/action-setup to v4 2024-10-13 19:11:03 +09:00
9ba8913da7 feat(api-server): remote control api (#1909)
Co-authored-by: JellyBrick <shlee1503@naver.com>
Co-authored-by: Angelos Bouklis <angelbouklis.official@gmail.com>
Co-authored-by: Angelos Bouklis <me@arjix.dev>
Co-authored-by: Angelos Bouklis <53124886+ArjixWasTaken@users.noreply.github.com>
2024-10-13 19:10:12 +09:00
d07dae2542 fix: fix pnpm-lock.yaml 2024-10-13 18:24:36 +09:00
e7f213c4dc chore(eslint): apply eslint-plugin-prettier
- Close #2438
2024-10-13 18:24:01 +09:00
4cbf6c015b chore(deps): update playwright monorepo to v1.48.0 (#2489)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-13 18:05:01 +09:00
8acb93225b fix(synced-lyrics): fix text extract logic 2024-10-13 18:03:37 +09:00
8153955ccf fix(synced-lyrics): Fix 2 issues (#2441) 2024-10-13 18:00:03 +09:00
1de1cbac65 chore(deps): update dependency typescript to v5.6.3 (#2486)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-13 17:14:17 +09:00
825aac1dab chore(deps): update dependency electron to v32.2.0 (#2487)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-13 17:14:08 +09:00
d48aa7ad39 chore(deps): update dependency del-cli to v6 (#2475)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-13 17:12:05 +09:00
65ad09a02e chore(deps): update dependency typescript-eslint to v8.8.1 (#2477)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-13 17:11:56 +09:00
08aae09446 fix(deps): update dependency solid-js to v1.9.2 (#2480)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-13 17:11:25 +09:00
88f54a389f Revert "chore(deps): update dependency electron-builder to v25" (#2488) 2024-10-13 17:11:11 +09:00
4c23b1f970 chore(deps): update dependency electron-builder to v25 (#2406)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-13 17:09:34 +09:00
a979f1c8ea fix(deps): update dependency deepmerge-ts to v7.1.3 (#2481)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-13 17:09:28 +09:00
ead448ed98 chore(i18n): Translated using Weblate (Persian)
Currently translated at 51.0% (195 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/fa/
2024-10-11 06:56:26 +02:00
fade340e80 chore(i18n): Translated using Weblate (Arabic)
Currently translated at 28.0% (107 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ar/
2024-10-11 06:56:25 +02:00
8cc8160f70 chore(i18n): Translated using Weblate (Persian)
Currently translated at 22.5% (86 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/fa/
2024-10-10 14:39:44 +02:00
ee354ff678 chore(i18n): Added translation using Weblate (Persian) 2024-10-10 01:45:13 +02:00
ca7ccc7b3e chore(i18n): Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (382 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/pt_BR/
2024-10-09 17:15:40 +02:00
f6b2766ec2 fix(deps): update dependency ts-morph to v24 (#2474)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-07 12:42:06 +09:00
4a5f811485 fix(deps): update dependency i18next to v23.15.2 (#2471)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-05 19:57:18 +09:00
a092da7ba5 chore(deps): update eslint monorepo to v9.12.0 (#2470)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-05 15:32:49 +09:00
b587a16419 chore(deps): update dependency @stylistic/eslint-plugin-js to v2.9.0 (#2469)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-05 15:30:15 +09:00
4cf4f19ccc chore(deps): bump micromatch from 4.0.5 to 4.0.8 (#2465)
Bumps [micromatch](https://github.com/micromatch/micromatch) from 4.0.5 to 4.0.8.
- [Release notes](https://github.com/micromatch/micromatch/releases)
- [Changelog](https://github.com/micromatch/micromatch/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/micromatch/compare/4.0.5...4.0.8)

---
updated-dependencies:
- dependency-name: micromatch
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-05 15:06:59 +09:00
5b84c9efce chore(deps): bump braces from 3.0.2 to 3.0.3 (#2466)
Bumps [braces](https://github.com/micromatch/braces) from 3.0.2 to 3.0.3.
- [Changelog](https://github.com/micromatch/braces/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/braces/compare/3.0.2...3.0.3)

---
updated-dependencies:
- dependency-name: braces
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-05 15:06:52 +09:00
98bbbfd851 fix(deps): update dependency electron-updater to v6.3.9 (#2468)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-05 15:04:15 +09:00
da2dbcacc4 fix(deps): update dependency deepmerge-ts to v7.1.1 (#2467)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-05 15:02:19 +09:00
7b6235694b chore(deps): update dependency typescript-eslint to v8.8.0 (#2457)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-05 15:02:09 +09:00
4ad8e7b9dc chore(deps): update dependency @babel/runtime to v7.25.7 (#2462)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-05 15:02:01 +09:00
51ecfff86b chore(deps): update dependency rollup to v4.24.0 (#2458)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-05 15:00:04 +09:00
2c21a03201 chore(deps): update dependency eslint-plugin-import to v2.31.0 (#2464)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-05 14:59:44 +09:00
4c2cb8dac9 chore(i18n): Translated using Weblate (Portuguese (Brazil))
Currently translated at 73.2% (280 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/pt_BR/
2024-10-04 15:15:48 +02:00
9edcd2c32e chore(i18n): Translated using Weblate (Filipino)
Currently translated at 86.9% (332 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/fil/
2024-10-03 02:15:41 +00:00
0829fd2167 chore(deps): update dependency rollup to v4.22.5 (#2448)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-30 07:24:04 +09:00
494e58296b chore(deps): update dependency typescript-eslint to v8.7.0 (#2450)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-30 07:20:57 +09:00
151da2d786 fix(deps): update dependency solid-js to v1.9.1 (#2451)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-30 07:20:46 +09:00
d7f5f28091 chore(deps): update dependency vite to v5.4.8 (#2449)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-28 15:52:06 +09:00
358fb3b084 chore(deps): update dependency discord-api-types to v0.37.101 (#2440)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-28 15:51:54 +09:00
af79ba266d chore(deps): update dependency esbuild to v0.24.0 (#2439)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-28 15:51:44 +09:00
45f419f41a chore(deps): update eslint monorepo to v9.11.1 (#2442)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-28 15:35:42 +09:00
5189d6cfee chore(deps): update dependency @types/howler to v2.2.12 (#2443)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-28 15:35:30 +09:00
102034b58c chore(i18n): Translated using Weblate (Polish)
Currently translated at 100.0% (382 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/pl/
2024-09-24 18:15:47 +02:00
50d92bc004 chore(i18n): Translated using Weblate (English)
Currently translated at 99.7% (381 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/en/
2024-09-24 18:15:46 +02:00
f2716e1dc8 chore(i18n): Translated using Weblate (Polish)
Currently translated at 100.0% (382 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/pl/
2024-09-23 17:26:28 +02:00
9d436ed0a8 chore(i18n): Translated using Weblate (Polish)
Currently translated at 100.0% (382 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/pl/
2024-09-23 17:26:28 +02:00
31d472e289 chore(deps): update dependency vite to v5.4.7 (#2434)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-22 08:17:56 +09:00
7f9a2b3011 chore(deps): update playwright monorepo to v1.47.2 (#2436)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-22 08:17:35 +09:00
f54b346dce chore(deps): update eslint monorepo to v9.11.0 (#2437)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-22 08:17:12 +09:00
dbff62bc5b fix(deps): update dependency youtubei.js to v10.5.0 (#2431)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-22 08:13:18 +09:00
87f43e3237 chore(deps): update dependency rollup to v4.22.4 (#2430)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-22 08:13:00 +09:00
49cdcbdcc2 chore(deps): update dependency electron to v32.1.2 (#2433)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-22 08:12:50 +09:00
bcff26c85b chore(i18n): Translated using Weblate (Portuguese (Brazil))
Currently translated at 72.2% (276 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/pt_BR/
2024-09-21 03:40:55 +00:00
bcfb33b4b1 chore(i18n): Translated using Weblate (Portuguese (Brazil))
Currently translated at 72.2% (276 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/pt_BR/
2024-09-21 03:40:54 +00:00
b172d8e509 chore(i18n): Added translation using Weblate (Portuguese (Brazil)) 2024-09-20 04:55:25 +02:00
f10d146272 chore(i18n): Translated using Weblate (Italian)
Currently translated at 100.0% (382 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/it/
2024-09-19 23:40:54 +02:00
6105821a94 feat: ESLint Flat Config (v9 support #2229) (#2426)
* Flat config

* undo accidental formatting changes

* remove extra newline
2024-09-19 21:19:41 +09:00
7c983df6f4 chore(deps): update dependency electron to v32.1.1 2024-09-19 07:39:25 +09:00
cbbddefcf8 chore(i18n): Translated using Weblate (Ukrainian)
Currently translated at 97.3% (372 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/uk/
2024-09-18 15:41:01 +00:00
8d49c67fcb Update changelog for v3.5.3 2024-09-17 12:41:36 +00:00
c94b22b82c Bump version to 3.5.3 2024-09-17 21:32:22 +09:00
cab3cb49f0 chore(deps): update dependency electron to v32.1.0 2024-09-17 21:31:29 +09:00
e42084f008 fix(deps): update dependency @floating-ui/dom to v1.6.11 2024-09-17 21:30:11 +09:00
adca273ec3 chore(deps): update dependency typescript to v5.6.2 2024-09-17 21:28:03 +09:00
91dceb3c22 chore(deps): update playwright monorepo to v1.47.1 2024-09-17 21:27:47 +09:00
216e76f4a1 fix(music-together): fix ? operator 2024-09-17 21:09:30 +09:00
178bfa483f fix: openToast to toastService 2024-09-17 21:05:35 +09:00
10ecf5d2fe fix(src/index): fix typo 2024-09-17 20:40:23 +09:00
7099b81296 fix(src/index): ignore eslint error 2024-09-17 20:40:23 +09:00
1f15376b00 chore(deps): update dependency vite to v5.4.6 2024-09-17 20:39:32 +09:00
02b7a39753 chore(deps): update dependency eslint to v8.57.1 2024-09-17 20:38:38 +09:00
6edc84a8bd chore(deps): update dependency rollup to v4.21.3 2024-09-17 20:38:19 +09:00
11a0d39064 fix(song-info-front): fix nullable issue 2024-09-17 20:27:11 +09:00
d5a5ed35b6 fix: fix trustedHTML issue
- (Maybe) fix #2339, caused by YouTube's A/B testing
2024-09-17 20:05:22 +09:00
dbb9e95b32 fix(deps): update dependency i18next to v23.15.1 2024-09-17 18:27:27 +09:00
d4c8a4320d chore(deps): update typescript-eslint monorepo to v8.6.0 2024-09-17 18:27:05 +09:00
68d4f38e41 chore(i18n): Translated using Weblate (Hungarian)
Currently translated at 94.7% (362 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/hu/
2024-09-15 22:09:12 +00:00
2204784e89 chore(i18n): Translated using Weblate (Icelandic)
Currently translated at 92.9% (355 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/is/
2024-09-15 22:09:12 +00:00
c3b995b0a8 chore(i18n): Translated using Weblate (Hebrew)
Currently translated at 6.0% (23 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/he/
2024-09-11 22:09:24 +02:00
ed0a344077 chore(i18n): Translated using Weblate (Polish)
Currently translated at 95.2% (364 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/pl/
2024-09-09 22:09:15 +00:00
199d912823 Update changelog for v3.5.2 2024-09-07 12:27:30 +00:00
089eff3152 Revert "chore(deps): update dependency electron-builder to v25"
This reverts commit fe4c89c349.
2024-09-07 20:22:27 +09:00
306ee8dba5 Bump version to 3.5.2 2024-09-07 19:09:15 +09:00
a4992bafb2 fix(synced-lyric): fix timestamp
- Close #2323
- Close #2379
2024-09-07 19:06:52 +09:00
5b004eedff fix(song-info): fix regex 2024-09-07 18:40:24 +09:00
2a66076d31 fix(synced-lyric): optimize logic 2024-09-07 18:37:37 +09:00
f48e46d29c chore(deps): update dependency eslint-plugin-import to v2.30.0 2024-09-07 18:29:22 +09:00
20296f5463 chore(deps): update dependency rollup to v4.21.2 2024-09-07 18:29:16 +09:00
fe4c89c349 chore(deps): update dependency electron-builder to v25 2024-09-07 18:29:09 +09:00
3640527c8c fix(synced-lyrics): LRCLIB returns 0 results if album is undefined
- inspired by #2381
2024-09-07 18:28:13 +09:00
3326582a16 chore(deps): update dependency electron to v32 2024-09-07 18:21:41 +09:00
5dcb9fe9ba fix(deps): update dependency i18next to v23.14.0 2024-09-07 18:19:15 +09:00
336fa1e6fd fix(deps): update dependency youtubei.js to v10.4.0 2024-09-07 18:19:09 +09:00
3679a109d6 chore(deps): update dependency esbuild to v0.23.1 2024-09-07 18:15:01 +09:00
5290ed3de2 chore(deps): update playwright monorepo to v1.47.0 2024-09-07 18:14:40 +09:00
fe5195714f chore(deps): update typescript-eslint monorepo to v8.4.0 (#2401)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-07 18:14:27 +09:00
8eb846262d chore(deps): update dependency @total-typescript/ts-reset to v0.6.1 (#2396)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-07 18:09:00 +09:00
e9a1c2a91f chore(deps): update dependency electron to v31.5.0 (#2397)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-07 18:08:41 +09:00
2d1f78b383 chore(deps): update dependency eslint-import-resolver-typescript to v3.6.3 (#2376)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-07 18:06:07 +09:00
1899064fd3 chore(deps): update dependency discord-api-types to v0.37.100 (#2394)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-07 18:06:00 +09:00
e0280e5fe2 fix(deps): update dependency electron-updater to v6.3.4 (#2395)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-07 18:05:54 +09:00
d577e0fba6 chore(deps): update dependency @babel/runtime to v7.25.6 (#2388)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-07 17:26:24 +09:00
37577c2f7f chore(deps): update dependency vite-plugin-inspect to v0.8.7 (#2389)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-07 17:26:16 +09:00
c880f0a4eb chore(i18n): Translated using Weblate (Portuguese)
Currently translated at 100.0% (382 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/pt/
2024-09-05 21:09:15 +02:00
4875955914 chore(deps): update dependency discord-api-types to v0.37.99 (#2374)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-04 23:47:50 +09:00
5b28c780bd chore(deps): update dependency vite to v5.4.3 (#2377)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-04 23:47:42 +09:00
4db2674b15 chore(i18n): Translated using Weblate (Greek)
Currently translated at 52.6% (201 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/el/
2024-09-02 23:09:12 +00:00
Sen
a454a0163f chore(i18n): Translated using Weblate (Dutch)
Currently translated at 74.0% (283 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/nl/
2024-08-31 21:09:31 +02:00
61eb28e780 fix: incorrect regex when splitting artistName (#2378)
Fixes the incorrect regex used to split a string in the form of `Name1 & Name2` or `Name1, Name2`.

Previously the regex was actually splitting on `Name1 &, Name2`...
2024-08-29 07:48:18 +09:00
e165e64952 chore(i18n): Translated using Weblate (Hungarian)
Currently translated at 93.7% (358 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/hu/
2024-08-28 13:09:22 +00:00
f380822e11 chore(deps): update dependency @babel/runtime to v7.25.4 (#2373)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-28 12:22:29 +09:00
6b1995145a synced-lyrics: make the lyrics search more reliable (#2343)
* fix: comparing multiple artists on a single track

* fix: get song info on startup

* chore: also split on commas

* chore: re-apply .toLowerCase() on the artist names

* chore: remove redundant code

* chore: attempt at improving the initial videodata

* oops

* eureka!

* stuff
2024-08-28 12:21:58 +09:00
9317e99f43 fix(deps): update dependency solid-js to v1.8.22 (#2354)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-28 12:20:37 +09:00
66d05d8683 chore(deps): update typescript-eslint monorepo to v8.3.0 (#2350)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-28 12:20:26 +09:00
545a3a4bb6 fix(deps): update dependency electron-debug to v4.0.1 (#2349)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-28 12:20:07 +09:00
04a6d16dbe chore(deps): update dependency electron to v31.4.0 (#2356)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-28 12:19:53 +09:00
3c36477b1e fix: hide native-controls on linux when in-app-menu is used (#2366) 2024-08-28 12:19:30 +09:00
c5c191492e fix: detect the upgrade btn using the icon (#2364) 2024-08-23 07:13:55 +09:00
b12e2f607c chore(i18n): Translated using Weblate (Filipino)
Currently translated at 86.6% (331 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/fil/
2024-08-20 03:09:10 +00:00
1d77ad6de4 fix: exclude build-id files from rpm (#2361) 2024-08-19 07:46:05 +09:00
25bd26d7f3 chore(i18n): Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (382 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/zh_Hant/
2024-08-17 12:09:10 +02:00
d11d0abe73 chore(i18n): Translated using Weblate (Japanese)
Currently translated at 100.0% (382 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ja/
2024-08-17 12:09:10 +02:00
8a643c465d chore(i18n): Translated using Weblate (Estonian)
Currently translated at 18.8% (72 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/et/
2024-08-15 22:09:31 +00:00
233673b8d8 chore(i18n): Translated using Weblate (Estonian)
Currently translated at 14.1% (54 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/et/
2024-08-13 21:09:13 +02:00
5a448fab31 chore(i18n): Translated using Weblate (Catalan)
Currently translated at 100.0% (382 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ca/
2024-08-13 21:09:12 +02:00
42e8262cda fix(deps): update dependency i18next to v23.12.3 (#2352)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-13 11:57:27 +09:00
f64769b1d3 fix(deps): update dependency @floating-ui/dom to v1.6.10 (#2340)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-12 12:12:08 +09:00
e12998761b fix(deps): update dependency electron-updater to v6.3.3 (#2347)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-12 12:11:55 +09:00
2e20fa83b8 chore(i18n): Translated using Weblate (German)
Currently translated at 99.2% (379 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/de/
2024-08-11 10:09:24 +00:00
5149757af3 chore(i18n): Translated using Weblate (German)
Currently translated at 99.2% (379 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/de/
2024-08-11 10:09:24 +00:00
655741f108 chore(i18n): Translated using Weblate (German)
Currently translated at 96.3% (368 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/de/
2024-08-10 11:41:12 +02:00
4e58571ad0 chore(i18n): Translated using Weblate (German)
Currently translated at 96.3% (368 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/de/
2024-08-10 11:41:12 +02:00
1e4a615b47 chore(i18n): Translated using Weblate (German)
Currently translated at 94.7% (362 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/de/
2024-08-10 11:39:20 +02:00
dedcf0c9ff fix(deps): update dependency solid-js to v1.8.20 (#2345)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-10 10:58:28 +09:00
a84a7d236a chore(deps): update dependency vite to v5.4.0 (#2342)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-10 10:54:05 +09:00
e56b4b21f0 chore(i18n): Update translation files
Updated by "Remove blank strings" hook in Weblate.

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/
2024-08-09 16:09:15 +02:00
361f9e42bd chore(i18n): Translated using Weblate (Malay)
Currently translated at 19.6% (75 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ms/
2024-08-09 16:09:13 +02:00
918736d2ca chore(i18n): Translated using Weblate (German)
Currently translated at 94.2% (360 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/de/
2024-08-09 16:09:12 +02:00
8f3d5b08ac chore(i18n): Translated using Weblate (Russian)
Currently translated at 97.3% (372 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ru/
2024-08-08 00:09:19 +02:00
4ca327d801 chore(deps): update typescript-eslint monorepo to v8.0.1 (#2335)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-07 23:03:13 +09:00
8d0aa057ad fix(deps): update dependency @floating-ui/dom to v1.6.9 (#2337)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-07 23:02:23 +09:00
b7ffee089b chore(deps): update playwright monorepo to v1.46.0 (#2336)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-07 23:02:12 +09:00
d72b994f66 chore(README): Translation README to Russian and adding Synced Lyrics to main README (#2338)
* Translation of README.md to Russian and adding Synced Lyrics to default README.md

* Syntax fixes

* Sorting of Synced Lyrics Alphabetically
2024-08-07 23:01:49 +09:00
e6dafdb068 chore(i18n): Update translation files
Updated by "Remove blank strings" hook in Weblate.

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/
2024-08-06 11:09:21 +02:00
14886dd4bd chore(i18n): Translated using Weblate (Catalan)
Currently translated at 100.0% (382 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ca/
2024-08-06 11:09:17 +02:00
c9f2f88bac chore(i18n): Translated using Weblate (Russian)
Currently translated at 97.3% (372 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ru/
2024-08-06 11:09:17 +02:00
1eabbc0bbe chore(i18n): Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (382 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/zh_Hans/
2024-08-05 09:09:19 +02:00
32a572b35a fix(downloader): fix playabilityStatus 2024-08-04 16:33:28 +09:00
59a5679cbb fix(cache): use cacheNoArgs for better performance 2024-08-04 16:31:07 +09:00
ac51f798c3 fix(synced-lyric): fix album_name 2024-08-04 15:49:30 +09:00
7599cc694a Revert "fix(MPRIS): Prevents player to start with invalid MPRIS interface (#1996)"
This reverts commit eaf9d310aa.

Fix #2225
2024-08-04 15:26:14 +09:00
53595654b1 chore(adblocker): add comment 2024-08-04 14:50:14 +09:00
7656c41dbc fix(adblocker/inplayer): fix Response.prototype.json
fix #2310
2024-08-04 14:36:10 +09:00
ff0c5b87c9 chore(i18n): Translated using Weblate (Estonian)
Currently translated at 2.8% (11 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/et/
2024-08-03 22:09:19 +00:00
506c95740a chore(i18n): Translated using Weblate (Vietnamese)
Currently translated at 99.4% (380 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/vi/
2024-08-03 22:09:18 +00:00
575a42e28a chore(i18n): Translated using Weblate (Indonesian)
Currently translated at 100.0% (382 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/id/
2024-08-03 22:09:17 +00:00
dcdc6a825f chore(i18n): Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (382 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/zh_Hant/
2024-08-03 22:09:16 +00:00
0a41bb1cd6 chore(i18n): Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (382 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/zh_Hant/
2024-08-03 22:09:16 +00:00
72a4736dc9 chore(i18n): Translated using Weblate (Greek)
Currently translated at 47.3% (181 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/el/
2024-08-03 22:09:15 +00:00
f2b1e6b6bf chore(deps): update dependency rollup to v4.20.0 (#2326)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-03 18:47:56 +09:00
bc0e28ad6d chore(i18n): Added translation using Weblate (Estonian) 2024-08-02 23:59:14 +02:00
8ebae91c02 chore(i18n): Translated using Weblate (Hungarian)
Currently translated at 93.7% (358 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/hu/
2024-08-02 23:59:13 +02:00
954ad90733 chore(i18n): Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (382 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/zh_Hant/
2024-08-02 23:59:13 +02:00
5af0643788 chore(i18n): Translated using Weblate (French)
Currently translated at 100.0% (382 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/fr/
2024-08-02 23:59:13 +02:00
be633ac1f2 chore(i18n): Translated using Weblate (Chinese (Traditional))
Currently translated at 99.7% (381 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/zh_Hant/
2024-08-02 21:58:41 +02:00
0d047c1fd5 chore(i18n): Translated using Weblate (Chinese (Traditional))
Currently translated at 99.7% (381 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/zh_Hant/
2024-08-02 21:58:41 +02:00
e8b1aca629 chore(i18n): Translated using Weblate (Turkish)
Currently translated at 100.0% (382 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/tr/
2024-08-02 21:58:41 +02:00
5b9bacf390 chore(i18n): Translated using Weblate (Filipino)
Currently translated at 85.3% (326 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/fil/
2024-08-02 14:09:23 +02:00
ccd16f4a5f chore(i18n): Translated using Weblate (Chinese (Traditional))
Currently translated at 93.4% (357 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/zh_Hant/
2024-08-02 14:09:22 +02:00
02e519dab3 chore(i18n): Translated using Weblate (Spanish)
Currently translated at 100.0% (382 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/es/
2024-08-02 14:09:21 +02:00
473ea78f12 synced-lyrics: fix album name? 2024-08-01 15:46:53 +03:00
e7f366b770 Update changelog for v3.5.1 2024-08-01 11:49:06 +00:00
66816ac42d Bump version to 3.5.1 2024-08-01 20:39:44 +09:00
08b985f2ab chore(i18n): Translated using Weblate (Korean)
Currently translated at 100.0% (382 of 382 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ko/
2024-08-01 13:38:36 +02:00
747bde2136 fix(synced-lyrics): fix lyric load
fix #2295
2024-08-01 20:19:08 +09:00
eabc28b39f fix(wait-for-element): add 100ms timeout for improve performance 2024-08-01 20:19:08 +09:00
3537dc19ee chore(i18n): Translated using Weblate (Hungarian)
Currently translated at 97.8% (358 of 366 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/hu/
2024-08-01 10:57:05 +00:00
6afeb60557 chore(i18n): Translated using Weblate (Vietnamese)
Currently translated at 100.0% (366 of 366 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/vi/
2024-08-01 10:57:04 +00:00
71115dedee chore(i18n): Translated using Weblate (Italian)
Currently translated at 100.0% (366 of 366 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/it/
2024-08-01 10:57:04 +00:00
8750b54f76 fix(synced-lyrics): fix i18n 2024-08-01 19:56:32 +09:00
482a1c5073 fix(deps): update dependency youtubei.js to v10.3.0 (#2306)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-01 19:27:58 +09:00
c8d516c40b fix: Window gets stuck offscreen in some instances (#2303)
Improved offscreen detection logic, fixes th-ch#1894
2024-08-01 19:27:01 +09:00
c1ad168c32 fix: Incorrect window size on multi-monitor scaled displays (#2302)
see discussion on th-ch#2258
2024-08-01 19:26:37 +09:00
5f5be5d02f chore(deps): update dependency rollup to v4.19.2 (#2304)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-01 19:25:59 +09:00
61ef56dccc chore: enable sourcemaps in dev 2024-08-01 11:02:21 +03:00
a73b5acc75 chore(deps): update typescript-eslint monorepo to v8 (major) (#2297)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-01 16:37:08 +09:00
877573532c ts-fix: disambiguate ElectronStore typings 2024-08-01 10:10:52 +03:00
7b033b5caf fix(ambient-mode): fix ambient-mode not working for videos after restart (#2294)
* Fix Ambient Mode not working for videos after restart (#2255)

This should fix https://github.com/th-ch/youtube-music/issues/1641

* fix: fix waitForElement

---------

Co-authored-by: craftgeil <80261988+craftgeil@users.noreply.github.com>
2024-07-31 22:08:45 +09:00
8924ec29d3 fix(deps): update dependency @xhayper/discord-rpc to v1.2.0 (#2291)
* fix(deps): update dependency @xhayper/discord-rpc to v1.2.0

* fix: discord-rpc

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: JellyBrick <shlee1503@naver.com>
2024-07-31 21:57:37 +09:00
23e688aaf8 Update changelog for v3.5.0 2024-07-31 12:04:22 +00:00
9b3cbe8e01 Bump version to 3.5.0 2024-07-31 20:53:02 +09:00
67a89e8ed4 chore(i18n): Translated using Weblate (Korean)
Currently translated at 100.0% (366 of 366 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ko/
2024-07-31 13:51:24 +02:00
464a2b94ea fix: bump electron-builder version to 6.3.2 2024-07-31 20:37:38 +09:00
9357a15116 fix(synced-lyrics): fix type error 2024-07-31 20:32:34 +09:00
ee820bb01c Delete test-results directory 2024-07-31 19:55:51 +09:00
6b81735811 chore(i18n): Translated using Weblate (French)
Currently translated at 100.0% (357 of 357 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/fr/
2024-07-31 12:54:43 +02:00
8ce91b143a plugin: Synced Lyrics (#2207)
* Added Plugin File

* Added Logic

* Known issue

* Finished Backend part

* Before cleanup

* Added Style
Removed log

* Fixed time and visibility issues

* Changed lyrics style

* Changed way lyrics are selected

* Fix

* Added style lyrics options

* Cleanup

* Fix lyrics styling
Changed how lyrics status are changed

* Moved code to make file more readable

* Change Tab Size

* Fixed issue with overlapping lyrics

* Removed debug console.log

* Added style adaptation for music videos

* Changed file indent

* Revered back to original pnpm file

* Removed unnecessary option

* Fix lyrics status bug
Removed leftover logs

* Started to implement fetching for genius lyrics

* feat(synced-lyrics): add `addedVersion` field

* Made changes according to feedbacks

* fix: add a delay of 300ms to the current time

- Since the transition takes 300ms, we need to add a delay of 300ms to the current time

* Removed test about genius.com scraping

* Removed 300ms delay

* chore: cleaned up the code

* Specified path and variable

* chore: always enable lyrics tab

* chore: use SolidJS to render the lyrics

* chore: remove useless signal

* chore: feature-parity with original PR (+some nice stuff)

* recreate lock file

* show json decode error

* feat(synced-lyrics): improve ui
- Change type assertion code
- Replace span to `yt-formatted-string`
- Add refetch button

* chore: make the lyric styling a solidjs effect

* feat: i18n

* chore: apply suggestion

---------

Co-authored-by: Su-Yong <simssy2205@gmail.com>
Co-authored-by: JellyBrick <shlee1503@naver.com>
Co-authored-by: Angelos Bouklis <53124886+ArjixWasTaken@users.noreply.github.com>
2024-07-31 19:54:21 +09:00
116dbad9bc chore(deps): update dependency electron to v31.3.1 (#2290)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-31 19:52:47 +09:00
977af3d617 chore(deps): update typescript-eslint monorepo to v7.18.0 (#2292)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-31 19:52:38 +09:00
6da8defc73 chore(i18n): Translated using Weblate (Sinhala)
Currently translated at 4.4% (16 of 357 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/si/
2024-07-29 01:09:20 +00:00
0e93a963e1 chore(i18n): Translated using Weblate (Korean)
Currently translated at 100.0% (357 of 357 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ko/
2024-07-29 01:09:19 +00:00
1e98b2e75a fix(deps): update dependency youtubei.js to v10.2.0 (#2285)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-29 01:30:01 +09:00
6f5f13a840 chore(deps): update dependency electron to v31.3.0 (#2282)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-28 14:10:07 +00:00
822bcedadf chore(deps): update typescript-eslint monorepo to v7.17.0 (#2283)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-28 14:09:48 +00:00
2b6aea82c3 fix(deps): update dependency solid-js to v1.8.19 (#2280)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-28 19:21:49 +09:00
4f4efb407e fix(deps): update dependency @xhayper/discord-rpc to v1.1.4 (#2279)
* fix(deps): update dependency @xhayper/discord-rpc to v1.1.4

* Update and rename @xhayper__discord-rpc@1.1.2.patch to @xhayper__discord-rpc@1.1.4.patch

* Update package.json

* fix: update pnpm-lock.yaml

* fix: use Listening instead of Playing

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: JellyBrick <shlee1503@naver.com>
2024-07-28 19:21:35 +09:00
6159e0e652 chore(deps): update dependency @babel/runtime to v7.25.0 (#2281)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-28 19:07:01 +09:00
3957e06174 fix(deps): update dependency @floating-ui/dom to v1.6.8 (#2278)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-28 19:06:26 +09:00
c78f823b9b Fix: Incorrect window size on scaled displays (#2258)
fix th-ch#1716
2024-07-28 19:02:08 +09:00
1be3bb360e chore(deps): update dependency vite-plugin-resolve to v2.5.2 (#2276)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-28 15:06:22 +09:00
ba2afd2652 chore(deps): update playwright monorepo to v1.45.3 (#2277)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-28 15:06:07 +09:00
5e283c9ea5 fix(deps): update dependency deepmerge-ts to v7.1.0 (#2263)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-28 14:59:23 +09:00
ddb1c56111 chore(deps): update dependency typescript to v5.5.4 (#2274)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-28 14:59:13 +09:00
ebd167f3f2 chore(deps): update dependency vite to v5.3.5 (#2275)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-28 14:55:57 +09:00
178a62b9d3 fix(deps): update dependency i18next to v23.12.2 (#2260)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-28 14:46:26 +09:00
f98a2cf766 chore(deps): update dependency discord-api-types to v0.37.93 (#2273)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-28 14:46:06 +09:00
fdbe6f7331 chore(deps): update dependency rollup to v4.19.1 (#2261)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-28 14:45:54 +09:00
57c2cdc91e chore(i18n): Translated using Weblate (Portuguese)
Currently translated at 100.0% (357 of 357 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/pt/
2024-07-26 18:09:17 +02:00
0f5074f8ab chore(i18n): Translated using Weblate (French)
Currently translated at 100.0% (357 of 357 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/fr/
2024-07-26 18:09:13 +02:00
661396226d fix(deps): update dependency custom-electron-prompt to v1.5.8 (#2262)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-26 12:42:17 +09:00
36f27fe2e6 chore(i18n): Translated using Weblate (Polish)
Currently translated at 100.0% (357 of 357 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/pl/
2024-07-25 15:09:16 +02:00
adf1ce4bc7 chore(i18n): Translated using Weblate (Vietnamese)
Currently translated at 100.0% (357 of 357 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/vi/
2024-07-22 14:09:21 +02:00
43b4b8df5e chore(i18n): Translated using Weblate (German)
Currently translated at 100.0% (357 of 357 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/de/
2024-07-22 14:09:20 +02:00
4a8440c281 chore(i18n): Translated using Weblate (Catalan)
Currently translated at 100.0% (357 of 357 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ca/
2024-07-20 18:09:24 +02:00
32fe9fcffe chore(i18n): Translated using Weblate (French)
Currently translated at 100.0% (357 of 357 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/fr/
2024-07-20 18:09:22 +02:00
a9896845da chore(i18n): Added translation using Weblate (Catalan) 2024-07-19 17:02:32 +02:00
a59aa07334 chore(i18n): Translated using Weblate (Filipino)
Currently translated at 83.7% (299 of 357 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/fil/
2024-07-19 10:09:32 +02:00
e07d7395e7 chore(i18n): Translated using Weblate (Spanish)
Currently translated at 100.0% (357 of 357 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/es/
2024-07-19 10:09:31 +02:00
9bb6f32ece chore(i18n): Translated using Weblate (Czech)
Currently translated at 96.3% (344 of 357 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/cs/
2024-07-19 10:09:30 +02:00
ccb19a0dc9 feat(adblocker): add new option AdSpeedup (#2235)
* Ad speedup code

* And ad-speedup translations

* Update index.ts

* fix error

* Update build.yml

* add AdSpeedup as adBlock option

* remove it as own plugin

* remove console.log

* add semicolons
2024-07-18 13:16:46 +09:00
64fb6c2597 fix: disable multi-plane format for software video (#2254) 2024-07-18 13:15:26 +09:00
73c3e355fe chore(deps): update dependency eslint-plugin-prettier to v5.2.1 (#2253)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-18 03:42:41 +09:00
fc7a504643 chore(deps): update dependency vite to v5.3.4 (#2243)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-18 03:42:34 +09:00
764dc0f895 chore(deps): update typescript-eslint monorepo to v7.16.1 (#2239)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-18 03:42:26 +09:00
9f33f49ec4 chore(deps): update playwright monorepo to v1.45.2 (#2244)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-18 03:32:19 +09:00
87ae6d29bb chore(deps): update dependency vite-plugin-inspect to v0.8.5 (#2252)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-18 03:31:55 +09:00
093c8e3ca6 fix(deps): update dependency semver to v7.6.3 (#2250)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-18 03:29:19 +09:00
fec26a010d chore(deps): update dependency electron to v31.2.1 (#2241)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-17 18:08:17 +09:00
5d8aaccc55 chore(i18n): Translated using Weblate (Hebrew)
Currently translated at 4.5% (16 of 355 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/he/
2024-07-17 08:09:14 +00:00
cda03078a9 chore(i18n): Translated using Weblate (Turkish)
Currently translated at 100.0% (355 of 355 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/tr/
2024-07-16 02:46:56 +02:00
9c139b96f4 chore(i18n): Translated using Weblate (French)
Currently translated at 98.8% (351 of 355 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/fr/
2024-07-16 02:46:55 +02:00
9b2816c156 chore(i18n): Translated using Weblate (Finnish)
Currently translated at 80.8% (287 of 355 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/fi/
2024-07-15 19:09:19 +00:00
b1b8847134 chore(i18n): Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (355 of 355 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/zh_Hant/
2024-07-15 19:09:19 +00:00
bf9e698288 chore(i18n): Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (355 of 355 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/zh_Hans/
2024-07-15 19:09:18 +00:00
28e8a1c5dd chore(i18n): Translated using Weblate (Polish)
Currently translated at 99.7% (354 of 355 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/pl/
2024-07-15 19:09:17 +00:00
18e0b1b863 Update changelog for v3.4.1 2024-07-14 15:26:58 +00:00
02e2fb6a83 Bump version to 3.4.1 2024-07-15 00:18:37 +09:00
91bee4880e chore(i18n): Translated using Weblate (Spanish)
Currently translated at 100.0% (355 of 355 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/es/
2024-07-14 17:15:57 +02:00
7de7303ebb fix(mpris): fix mpris position
- fix #2225
2024-07-15 00:14:49 +09:00
363d869cff fix(deb): fix depends
- fix #1983
2024-07-14 23:48:15 +09:00
2512af80af fix: fix touchbar icon
- fix #2183
2024-07-14 23:19:06 +09:00
887979932c fix: fix "Starting page"
- fix #1822
2024-07-14 22:59:05 +09:00
eeaaf2f158 fix: fix album actions
- fix #2202
2024-07-14 22:50:24 +09:00
e91e995b95 fix: fix playback slider
- fix #2045
2024-07-14 22:32:56 +09:00
49dd2ecac6 fix(deps): update dependency i18next to v23.12.1 (#2230)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-14 22:09:44 +09:00
06f419abc4 Bump version to 3.4.0 2024-07-14 22:08:17 +09:00
2c29461e61 fix(downloader): update types 2024-07-14 22:05:21 +09:00
a9b9e74477 chore(i18n): Translated using Weblate (Korean)
Currently translated at 100.0% (355 of 355 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ko/
2024-07-14 15:05:05 +02:00
30848b7c4a feat(downloader): New option to download on finish (#1964)
Co-authored-by: JellyBrick <shlee1503@naver.com>
2024-07-14 22:00:40 +09:00
83023c19a6 chore(i18n): Translated using Weblate (Romanian)
Currently translated at 100.0% (346 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ro/
2024-07-14 11:09:21 +00:00
45931a25b0 fix: rollback eslint version to v8 2024-07-14 19:24:46 +09:00
98d4ff83b1 chore(deps): update typescript-eslint monorepo to v8.0.0-alpha.42 (#2228)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-14 16:58:05 +09:00
35f1d75832 chore(deps): update dependency eslint to v9.7.0 (#2226)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-13 11:40:56 +09:00
cbbba6ec76 chore(deps): update dependency @babel/runtime to v7.24.8 (#2221)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-12 21:03:22 +09:00
35383e4730 chore(deps): update dependency node-gyp to v10.2.0 (#2216)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-12 20:58:37 +09:00
b7029cfc60 chore(deps): update dependency ws to v8.18.0 (#2217)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-11 23:32:24 +09:00
d8328e0ad5 chore(deps): update dependency glob to v11 (#2219)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-11 23:32:05 +09:00
7ccb72d399 chore(deps): update dependency esbuild to v0.23.0 (#2215)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-11 23:27:28 +09:00
5108f19ee5 chore(deps): update dependency electron to v31.2.0 (#2214)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-11 23:27:13 +09:00
041574570f fix(deps): update dependency youtubei.js to v10.1.0 (#2218)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-11 16:44:14 +09:00
9505195835 chore(i18n): Translated using Weblate (Malay)
Currently translated at 8.0% (28 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ms/
2024-07-11 06:09:18 +00:00
b33f5ff94d chore(deps): update playwright monorepo to v1.45.1 (#2212)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-10 19:18:51 +09:00
097f488ba0 chore(deps): update typescript-eslint monorepo to v8.0.0-alpha.41 (#2213)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-10 19:18:39 +09:00
521d1d8ee7 chore(deps): update dependency rollup to v4.18.1 (#2210)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-10 19:16:22 +09:00
f38ce093f5 chore(deps): update dependency eslint to v9.6.0 (#2192)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-10 18:33:38 +09:00
2e63985ed3 chore(deps): update dependency vite to v5.3.3 (#2211)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-10 18:30:38 +09:00
a22d08e983 chore(deps): update dependency glob to v10.4.5 (#2205)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-10 18:29:38 +09:00
d1b998aebd chore(deps): update dependency discord-api-types to v0.37.92 (#2204)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-10 18:24:13 +09:00
7f598b5856 fix(deps): update dependency solid-js to v1.8.18 (#2189)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-10 18:23:49 +09:00
373e27ac5b chore(deps): update dependency typescript to v5.5.3 (#2206)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-10 18:23:21 +09:00
dcd53a9234 chore(i18n): Translated using Weblate (Hungarian)
Currently translated at 94.5% (327 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/hu/
2024-07-07 21:09:22 +02:00
c59b11b63b chore(deps): update dependency electron to v31.1.0 (#2190)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-07 22:25:20 +09:00
4d8fd8718f chore(deps): update typescript-eslint monorepo to v8.0.0-alpha.40 (#2193)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-07 22:25:03 +09:00
f0c4d1da36 fix(deps): update dependency @floating-ui/dom to v1.6.7 (#2196)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-07 22:23:56 +09:00
79c669e7c1 chore(i18n): Translated using Weblate (Finnish)
Currently translated at 82.6% (286 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/fi/
2024-07-05 01:09:19 +02:00
e8156fc0fe chore(i18n): Translated using Weblate (Finnish)
Currently translated at 82.6% (286 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/fi/
2024-07-05 01:09:19 +02:00
348c70dca4 chore(i18n): Translated using Weblate (Finnish)
Currently translated at 64.1% (222 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/fi/
2024-07-04 00:47:01 +02:00
3439dded3b chore(i18n): Translated using Weblate (Finnish)
Currently translated at 64.1% (222 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/fi/
2024-07-04 00:47:01 +02:00
2ee0101e97 chore(i18n): Added translation using Weblate (Finnish) 2024-07-03 10:54:29 +02:00
6a037083dd chore(deps): update dependency vite to v5.3.2 (#2188)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-29 09:46:54 +09:00
1d1705e471 chore(deps): update dependency discord-api-types to v0.37.91 (#2187)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-29 09:42:23 +09:00
0f7fe74d40 chore(deps): update typescript-eslint monorepo to v8.0.0-alpha.34 (#2184)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-29 09:42:11 +09:00
d9f24d2c4e fix(deps): update dependency @floating-ui/dom to v1.6.6 (#2182)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-29 09:41:57 +09:00
7b6a7377a8 chore(deps): update playwright monorepo to v1.45.0 (#2181)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-29 09:41:09 +09:00
bd8468a8c1 fix(deps): update dependency ts-morph to v23 (#2180)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-29 09:40:54 +09:00
aec088f95d chore(deps): update dependency electron-vite to v2.3.0 (#2178)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-29 09:40:31 +09:00
4b12b43f57 chore(i18n): Translated using Weblate (Arabic)
Currently translated at 28.9% (100 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ar/
2024-06-28 14:09:24 +02:00
f47287de94 chore(i18n): Translated using Weblate (Thai)
Currently translated at 78.9% (273 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/th/
2024-06-28 14:09:23 +02:00
58317f4c10 chore(i18n): Translated using Weblate (Lithuanian)
Currently translated at 88.1% (305 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/lt/
2024-06-23 22:09:20 +02:00
c0aae7b2ac fix(deps): update dependency conf to v13.0.1 (#2175)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-23 16:43:25 +09:00
76547ad602 chore(deps): update dependency glob to v10.4.2 (#2168)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-22 09:49:13 +09:00
8b128273c8 chore(deps): update dependency discord-api-types to v0.37.90 (#2167)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-22 08:59:25 +09:00
25d1127b21 chore(deps): update dependency typescript to v5.5.2 (#2173)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-22 08:58:53 +09:00
b3ab08b354 chore(deps): update dependency electron to v31.0.2 (#2170)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-22 08:56:45 +09:00
2ef8b4f14c chore(i18n): Translated using Weblate (Filipino)
Currently translated at 83.2% (288 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/fil/
2024-06-21 13:09:24 +02:00
b39baf6d88 chore(i18n): Translated using Weblate (Thai)
Currently translated at 74.5% (258 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/th/
2024-06-21 13:09:23 +02:00
40f0b9b852 chore(i18n): Translated using Weblate (Slovenian)
Currently translated at 43.9% (152 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/sl/
2024-06-18 19:09:35 +00:00
3fe8115f32 chore(i18n): Translated using Weblate (Ukrainian)
Currently translated at 100.0% (346 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/uk/
2024-06-18 19:09:34 +00:00
47d3b34e4b chore(i18n): Added translation using Weblate (Slovenian) 2024-06-18 16:15:21 +02:00
d0889bb622 chore(deps): update dependency ws to v8.17.1 (#2164)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-18 16:22:45 +09:00
d6a7cbfa6f chore(i18n): Translated using Weblate (Polish)
Currently translated at 100.0% (346 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/pl/
2024-06-17 09:09:27 +00:00
c6541b6897 chore(deps): update dependency eslint to v9.5.0 (#2162)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-16 13:44:56 +09:00
865578037b fix(deps): update dependency youtubei.js to v10 (#2136)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-16 13:43:51 +09:00
d4176eeb8a chore(deps): update dependency discord-api-types to v0.37.89 (#2153)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-16 13:43:35 +09:00
b88bbbc680 chore(deps): update dependency vite to v5.3.1 (#2154)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-16 13:43:06 +09:00
67aaccce86 fix(deps): update dependency electron-store to v10 (#2157)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-16 13:42:47 +09:00
b95b69bf50 fix(deps): update dependency conf to v13 (#2156)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-16 13:40:13 +09:00
894531fd93 chore(i18n): Update translation files
Updated by "Remove blank strings" hook in Weblate.

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/
2024-06-14 04:09:29 +00:00
8a20566e0f chore(i18n): Translated using Weblate (Filipino)
Currently translated at 82.6% (286 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/fil/
2024-06-14 04:09:27 +00:00
253325a3cf chore(i18n): Translated using Weblate (Hebrew)
Currently translated at 1.1% (4 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/he/
2024-06-14 04:09:20 +00:00
ee6716a0eb chore(i18n): Translated using Weblate (Indonesian)
Currently translated at 100.0% (346 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/id/
2024-06-14 04:09:20 +00:00
8fe5450ace chore(i18n): Translated using Weblate (Japanese)
Currently translated at 100.0% (346 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ja/
2024-06-14 04:09:19 +00:00
1bb36b38bc chore(deps): update dependency electron to v31.0.1 (#2148)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-13 17:09:51 +09:00
25cec993bc chore(i18n): Translated using Weblate (Czech)
Currently translated at 98.5% (341 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/cs/
2024-06-12 17:09:11 +00:00
c744619664 chore(i18n): Translated using Weblate (Italian)
Currently translated at 100.0% (346 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/it/
2024-06-11 18:09:14 +02:00
451d30517e chore(i18n): Translated using Weblate (Czech)
Currently translated at 91.3% (316 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/cs/
2024-06-11 18:09:13 +02:00
dbb345ba1f chore(deps): update dependency discord-api-types to v0.37.88 (#2138)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-11 10:27:46 +09:00
c60edf9718 chore(deps): update typescript-eslint monorepo to v8.0.0-alpha.30 (#2139)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-11 10:27:03 +09:00
bd4e3a91c8 chore(deps): update dependency electron to v31 (#2141)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-11 10:26:52 +09:00
0f8b586b75 chore(deps): update dependency esbuild to v0.21.5 (#2135)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-11 10:26:27 +09:00
262c17a5bd chore(i18n): Translated using Weblate (Japanese)
Currently translated at 99.4% (344 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ja/
2024-06-10 15:09:22 +02:00
542cb916b5 chore(deps): update typescript-eslint monorepo to v8.0.0-alpha.29 (#2132)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-09 20:40:36 +09:00
2627ebd675 Update changelog for v3.3.12 2024-06-08 11:04:55 +00:00
89ed7d2345 Bump version to 3.3.12 2024-06-08 19:56:02 +09:00
3c4abc1418 hotfix: Revert "chore(deps): update dependencies @cliqz/adblocker-electron, @cliqz/adblocker-electron-preload"
This reverts commit 680f4143f5.
2024-06-08 19:51:38 +09:00
de224444c2 Update changelog for v3.3.11 2024-06-08 05:11:16 +00:00
e9ae2d44c9 Bump version to 3.3.11 2024-06-08 14:01:49 +09:00
680f4143f5 chore(deps): update dependencies @cliqz/adblocker-electron, @cliqz/adblocker-electron-preload 2024-06-08 12:45:24 +09:00
23b553ea4b Revert "fix(deps): update dependency @cliqz/adblocker-electron to v1.27.10" (#2129)
This reverts commit d97aa1a8a0.
2024-06-08 11:52:15 +09:00
e2a91022fd chore(deps): update dependency vite to v5.2.13 (#2127)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-08 11:43:10 +09:00
d97aa1a8a0 fix(deps): update dependency @cliqz/adblocker-electron to v1.27.10 2024-06-07 21:18:57 +09:00
ede11307ef fix(menu): fix menubar items doesn't rendered
resolve #2113
2024-06-07 21:16:48 +09:00
b74c1a0207 chore(i18n): Translated using Weblate (Vietnamese)
Currently translated at 100.0% (346 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/vi/
2024-06-07 13:09:20 +02:00
104c1284f6 chore(deps): update dependency electron to v30.1.0 (#2126)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-07 19:21:03 +09:00
8af1b36551 fix(deps): update dependency deepmerge-ts to v7.0.3 (#2125)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-07 19:19:44 +09:00
ce5421ffce chore(deps): update dependency @babel/runtime to v7.24.7 (#2124)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-07 19:19:19 +09:00
98b1fd8787 chore(deps): update typescript-eslint monorepo to v8.0.0-alpha.28 (#2121)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-07 19:16:36 +09:00
ed5f1ecde3 fix(deps): update dependency electron-updater to v6.2.1 (#2120)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-07 19:16:20 +09:00
efbd9922fd chore(deps): update dependency discord-api-types to v0.37.87 (#2119)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-07 19:14:10 +09:00
463bc2c976 chore(i18n): Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (346 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/zh_Hans/
2024-06-05 18:09:13 +00:00
e71a70d25c chore(i18n): Translated using Weblate (German)
Currently translated at 100.0% (346 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/de/
2024-06-05 18:09:13 +00:00
4ae9a2820e chore(i18n): Translated using Weblate (Nepali)
Currently translated at 100.0% (346 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ne/
2024-06-04 06:09:19 +00:00
3ac1cc9204 fix(deps): update dependency deepmerge-ts to v7.0.2 (#2118)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-03 19:06:50 +09:00
2938c93803 chore(deps): update typescript-eslint monorepo to v8.0.0-alpha.25 (#2114)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-03 19:02:38 +09:00
7e8d31172c chore(i18n): Translated using Weblate (Nepali)
Currently translated at 21.0% (73 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ne/
2024-06-03 07:09:16 +02:00
e0353a88ce chore(i18n): Translated using Weblate (Sinhala)
Currently translated at 2.0% (7 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/si/
2024-06-03 07:09:15 +02:00
635f3334a6 chore(i18n): Translated using Weblate (Thai)
Currently translated at 68.7% (238 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/th/
2024-06-03 07:09:15 +02:00
7800e106cb chore(i18n): Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (346 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/zh_Hant/
2024-06-03 07:09:14 +02:00
e436e6eae0 chore(i18n): Translated using Weblate (Russian)
Currently translated at 100.0% (346 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ru/
2024-06-03 07:09:13 +02:00
0c24b70f23 chore(i18n): Added translation using Weblate (Nepali) 2024-06-03 06:04:30 +02:00
2693a1598a chore(i18n): Added translation using Weblate (Sinhala) 2024-06-02 17:09:31 +02:00
7a87e90edf chore(i18n): Added translation using Weblate (Arabic) 2024-06-02 08:29:33 +02:00
d333fc1075 Update changelog for v3.3.10 2024-06-02 03:56:07 +00:00
1f99db3217 Bump version to 3.3.10 2024-06-02 12:49:41 +09:00
4fa9762a50 fix(deps): bump deps 2024-06-02 12:47:32 +09:00
1e5bea85b3 fix(deps): bump @typescript-eslint/eslint-plugin version to 8.0.0-alpha.24
ESLint v9
2024-06-02 12:33:29 +09:00
739518a6fd fix(adblocker): fix blank screen
- Revert @cliqz/adblocker-electron version from 1.27.3 to 1.27.1

- fix #2103
- fix #2105
2024-06-02 12:30:17 +09:00
24b0ae2c6b chore(i18n): Translated using Weblate (Croatian)
Currently translated at 1.4% (5 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/hr/
2024-06-02 05:16:48 +02:00
dae6fc9149 chore(i18n): Translated using Weblate (Croatian)
Currently translated at 0.5% (2 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/hr/
2024-06-02 03:20:31 +02:00
25958a7bb1 chore(i18n): Translated using Weblate (Hungarian)
Currently translated at 90.4% (313 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/hu/
2024-06-02 03:20:30 +02:00
8b901789dd chore(i18n): Added translation using Weblate (Croatian) 2024-06-01 16:10:33 +02:00
09a582192f Update changelog for v3.3.9 2024-06-01 01:14:52 +00:00
8735107eb0 Bump version to 3.3.9 2024-06-01 10:07:12 +09:00
5b9e947b8f feat(adblocker): improve In-Player adblocker 2024-06-01 10:01:53 +09:00
1f1efac466 fix(adblocker): fix In-Player adblocker
fix #1817
2024-06-01 09:50:13 +09:00
ee9c5a149b chore(deps): update dependency eslint to v9.4.0 (#2106)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-01 09:30:58 +09:00
79151cb3aa chore(i18n): Translated using Weblate (Malay)
Currently translated at 0.8% (3 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ms/
2024-06-01 02:28:08 +02:00
328530ea2c chore(i18n): Translated using Weblate (Hebrew)
Currently translated at 0.8% (3 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/he/
2024-06-01 02:28:08 +02:00
9e809b002d chore(i18n): Translated using Weblate (French)
Currently translated at 100.0% (346 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/fr/
2024-06-01 02:28:08 +02:00
200226f42d Update changelog for v3.3.8 2024-05-31 19:43:15 +00:00
5d99a854e2 Bump version to 3.3.8 2024-06-01 04:35:36 +09:00
cd4f0ccad7 fix(adblocker): fix blank screen
- fix #1942
- fix #2100
- fix #2103
2024-06-01 04:34:21 +09:00
b572623442 Update changelog for v3.3.7 2024-05-31 16:29:54 +00:00
ef02fdcf45 Bump version to 3.3.7 2024-06-01 01:22:18 +09:00
25d5c16af0 fix: release CI 2024-06-01 01:10:44 +09:00
6f49313f03 fix: fix lock file 2024-06-01 00:52:26 +09:00
55c7456c69 chore(deps): update dependency electron to v30.0.9 (#2098)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-01 00:07:07 +09:00
78c435b3c4 Revert "fix(deps): update dependency @cliqz/adblocker-electron to v1.27.6" (#2101) 2024-06-01 00:07:00 +09:00
5e43f38348 fix(deps): update dependency @cliqz/adblocker-electron to v1.27.6 (#2096)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-01 00:05:17 +09:00
24000acda0 chore(i18n): Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (346 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/zh_Hant/
2024-05-31 15:09:17 +02:00
24becf0337 chore(i18n): Translated using Weblate (Turkish)
Currently translated at 100.0% (346 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/tr/
2024-05-30 13:09:18 +02:00
8c80922b6b chore(deps): update dependency discord-api-types to v0.37.86 (#2092)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-28 22:54:09 +09:00
813a089f0d chore(deps): update dependency vite to v5.2.12 (#2094)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-28 22:53:59 +09:00
197bead857 chore(deps): update dependency @typescript-eslint/eslint-plugin to v7.11.0 (#2093)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-28 22:53:46 +09:00
5f7a705394 chore(i18n): Translated using Weblate (Portuguese)
Currently translated at 100.0% (346 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/pt/
2024-05-28 01:09:11 +00:00
646c0d79a3 chore(i18n): Translated using Weblate (Hungarian)
Currently translated at 58.0% (201 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/hu/
2024-05-26 15:09:19 +02:00
5a1313397e chore(i18n): Translated using Weblate (Polish)
Currently translated at 100.0% (346 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/pl/
2024-05-26 15:09:18 +02:00
4bc70ac2b8 chore(i18n): Translated using Weblate (Spanish)
Currently translated at 100.0% (346 of 346 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/es/
2024-05-26 15:09:18 +02:00
dc5b2f96be chore(docs): Added README-es.md and linked to README.md (#2090)
* Added README.md in spanish language and in original README.md added the link to spanish README.md

* Update README-es.md screenshots

* Correction on README-es.md

* Correction on README-es.md

* Correction on README-es.md

* Update README.md
2024-05-26 08:58:00 +09:00
d10b297d75 feat(i18n): add korean translation 2024-05-25 21:26:00 +09:00
933b4cc8f0 feat(menu): add theme list in menu 2024-05-25 21:26:00 +09:00
4557aff9b6 fix(renderer): fix macos traffic lights gap
- resolve #2035
2024-05-25 21:24:06 +09:00
3a42d700fe fix(album-color-theme): fix fullscreen layout issue 2024-05-25 20:51:28 +09:00
1a142a8a39 fix(deps): update dependency deepmerge-ts to v7 (#2085)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-25 20:22:19 +09:00
922b04cd54 chore(deps): update dependency builtin-modules to v4 (#2084)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-25 20:21:49 +09:00
bdfae8ce24 fix(deps): update dependency electron-debug to v4 (#2086)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-25 20:21:27 +09:00
08a537e509 fix(deps): update dependency electron-store to v9 (#2087)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-25 20:12:18 +09:00
51d8145f13 fix(deps): update dependency conf to v12 (#1463)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-25 20:11:24 +09:00
7e74f33030 fix(deps): update dependency youtubei.js to v9.4.0 (#2083)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-25 20:07:03 +09:00
0bb8d9bcd9 chore(deps): update playwright monorepo to v1.44.1 (#2082)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-25 20:06:50 +09:00
19a4cb901b chore(deps): update dependency ws to v8.17.0 (#2081)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-25 20:06:36 +09:00
c497dff69b chore(deps): update dependency glob to v10.4.1 (#2080)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-25 20:05:37 +09:00
cd0164b665 chore(deps): update dependency eslint to v9.3.0 (#2079)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-25 20:03:27 +09:00
ab35cd3049 fix(deps): update dependency peerjs to v1.5.4 (#2075)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-25 20:02:54 +09:00
13b2ff3a2e chore(deps): update dependency esbuild to v0.21.4 (#2078)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-25 20:02:30 +09:00
e00c1b51c7 fix(deps): update dependency semver to v7.6.2 (#2076)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-25 20:00:41 +09:00
0a2a289939 chore(deps): update dependency electron-vite to v2.2.0 (#2077)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-25 20:00:31 +09:00
919b6ba7cb fix(deps): update dependency i18next to v23.11.5 (#2074)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-25 20:00:11 +09:00
f0683177d8 chore(i18n): Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (342 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/zh_Hant/
2024-05-25 09:09:12 +02:00
13450580d0 fix(deps): update dependency @cliqz/adblocker-electron to v1.27.3 (#2071)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-25 15:38:37 +09:00
2375067d19 chore(deps): update dependency vite to v5.2.11 (#2070)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-25 15:38:18 +09:00
b2fe0f21cb fix(deps): update dependency @floating-ui/dom to v1.6.5 (#2073)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-25 15:38:07 +09:00
3e0257ba07 fix(deps): update dependency @cliqz/adblocker-electron-preload to v1.27.3 (#2072)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-25 15:37:38 +09:00
4f078284f3 chore(deps): update pnpm to v9 (#1980)
* chore(deps): update pnpm to v9

* fix: Update package.json

* fix: Update build.yml

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: JellyBrick <shlee1503@naver.com>
2024-05-25 08:52:35 +09:00
e87fa12fdc chore(deps): update dependency electron to v30.0.8 (#2068)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-25 08:40:59 +09:00
354c44d717 chore(deps-dev): bump ejs from 3.1.9 to 3.1.10 (#2023)
Bumps [ejs](https://github.com/mde/ejs) from 3.1.9 to 3.1.10.
- [Release notes](https://github.com/mde/ejs/releases)
- [Commits](https://github.com/mde/ejs/compare/v3.1.9...v3.1.10)

---
updated-dependencies:
- dependency-name: ejs
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-25 08:40:38 +09:00
f55faa0a8a chore(deps): update dependency utf-8-validate to v6.0.4 (#2069)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-25 08:40:25 +09:00
eaf9d310aa fix(MPRIS): Prevents player to start with invalid MPRIS interface (#1996)
Co-authored-by: andreas <andreas.angerer@github.com>
2024-05-25 08:36:52 +09:00
bbd10b657d fix(deps): update dependency solid-js to v1.8.17 (#2002)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-25 08:34:49 +09:00
8600b5558f chore(deps): update dependency @typescript-eslint/eslint-plugin to v7.10.0 (#2000)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-25 08:34:32 +09:00
9c7eb5dc26 chore(deps): update dependency discord-api-types to v0.37.85 (#1998)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-25 08:34:17 +09:00
ac63a6a200 fix(deps): update dependency serve to v14.2.3 (#1997)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-25 08:34:05 +09:00
3389994ff9 chore(deps): update dependency rollup to v4.18.0 (#1990)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-25 08:33:49 +09:00
adaee80913 feat: Enable arm64 for deb and rpm (#2033)
Co-authored-by: Aaron Honeycutt <aaronhoneycutt@proton.me>
2024-05-25 08:33:21 +09:00
4e467d9308 chore (README-is.md): Replace viðbót with tengiforrit (#2004)
* chore (README-is.md): Replace viðbót with tengiforrit

better translation for 'plugin', I wish i knew this word existed earlier smh

* fix broken link

---------

Co-authored-by: Angelos Bouklis <me@arjix.dev>
2024-05-25 08:32:21 +09:00
a85fc609cb chore(docs): readme file translated to french (#2049) 2024-05-25 08:29:47 +09:00
96f69953f2 chore(deps): update dependency @babel/runtime to v7.24.6 (#2039)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-25 08:28:51 +09:00
9095b46a15 chore(i18n): Translated using Weblate (Greek)
Currently translated at 36.8% (126 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/el/
2024-05-19 16:01:56 +02:00
4415927465 fix nav bar color change onscroll 2024-05-16 16:57:18 +09:00
e6b25119cd fix scrollbar over titlebar 2024-05-16 16:57:18 +09:00
09e02aeac8 chore(i18n): Translated using Weblate (Filipino)
Currently translated at 38.8% (133 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/fil/
2024-05-15 04:02:00 +00:00
f3de17112a chore(i18n): Translated using Weblate (Hungarian)
Currently translated at 45.3% (155 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/hu/
2024-05-15 04:01:59 +00:00
91392c0c7e chore(i18n): Translated using Weblate (Filipino)
Currently translated at 29.5% (101 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/fil/
2024-05-10 09:31:19 +02:00
54683a233f chore(i18n): Translated using Weblate (Filipino)
Currently translated at 10.5% (36 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/fil/
2024-05-07 20:07:38 +02:00
8d12eeb033 chore(i18n): Added translation using Weblate (Filipino) 2024-05-06 08:08:29 +02:00
0ba35890b1 chore(i18n): Translated using Weblate (Dutch)
Currently translated at 77.7% (266 of 342 strings)

Co-authored-by: tsafen <nefastable@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/nl/
Translation: th-ch/youtube-music/i18n
2024-05-03 11:07:14 +02:00
4783ca5942 chore(i18n): Translated using Weblate (Dutch)
Currently translated at 77.1% (264 of 342 strings)

Co-authored-by: Rémy Flament <flament.remy1@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/nl/
Translation: th-ch/youtube-music/i18n
2024-05-01 22:07:22 +02:00
1517a60215 chore(i18n): Translated using Weblate (French)
Currently translated at 99.1% (339 of 342 strings)

Co-authored-by: Mattias <watgytb+weblate@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/fr/
Translation: th-ch/youtube-music/i18n
2024-05-01 22:07:20 +02:00
4ca3c8b7e2 Merge pull request #2015 from BryanGIG/fix-fullscreen-patch-1
Fix substract `margin-top` in fullscreen mode
2024-04-28 15:30:54 +03:00
93081c89c8 Fix substract margin-top in fullscreen mode
Fix #2013
2024-04-28 07:42:56 +07:00
09255b626b fix: vite-inspect for renderer 2024-04-27 19:10:10 +03:00
33fe008b5c chore(i18n): Translated using Weblate (Icelandic)
Currently translated at 98.8% (338 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/is/
2024-04-25 03:07:22 +02:00
e72ac3d9d0 chore(deps): update dependency vite-plugin-inspect to v0.8.4 2024-04-21 23:15:23 +09:00
14a926aa88 chore(deps): update dependency vite to v5.2.10 2024-04-21 22:58:30 +09:00
99311dba6d chore(deps): update dependency eslint to v9.1.0 2024-04-21 22:58:20 +09:00
5e9f545e4e chore(deps): update dependency electron to v30 2024-04-21 22:58:07 +09:00
0cc8fdf564 chore(deps): update dependency vite to v5.2.9 2024-04-18 16:48:00 +09:00
27e0e7173a chore(deps): update dependency @typescript-eslint/eslint-plugin to v7.7.0 2024-04-18 16:47:39 +09:00
2710c62b82 chore(i18n): Translated using Weblate (Dutch)
Currently translated at 77.1% (264 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/nl/
2024-04-18 05:03:38 +02:00
a50de65a66 fix(deps): update dependency i18next to v23.11.2 2024-04-16 16:58:50 +09:00
c21758f8e6 chore(deps): update dependency rollup to v4.14.3 2024-04-16 16:58:35 +09:00
1a5f6c2a8f chore(deps): update pnpm to v8.15.7 (#1970)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-14 09:31:24 +09:00
d521a84f85 Update changelog for v3.3.6 2024-04-13 14:34:39 +00:00
aa29a0fa65 Bump version to 3.3.6 2024-04-13 23:26:40 +09:00
a8469d7d8d fix: electron-builder snap bug 2024-04-13 23:03:44 +09:00
d09858cbec chore(deps): bump electron-builder version to 24.13.3 2024-04-13 22:43:06 +09:00
855f67bb1e fix: add AdGuard as blocklist sources (#1966) 2024-04-13 16:45:08 +09:00
8508620e53 chore(deps): update dependency rollup to v4.14.2 (#1968)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-13 16:43:27 +09:00
e9fbfe36cc fix(deps): update dependency youtubei.js to v9.3.0 (#1967)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-13 16:37:09 +09:00
f158a7865a chore(deps): update playwright monorepo to v1.43.1 (#1969)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-13 16:36:58 +09:00
74860edc6e fix: rollback electron-builder version to 24.9.2 2024-04-11 19:02:25 +09:00
1712b70fb5 fix: rollback electron-builder version to 24.9.3 2024-04-11 18:55:12 +09:00
4a57cc5ee9 fix: rollback electron-builder version to 24.9.4 2024-04-11 18:45:10 +09:00
4db0f72864 chore(deps): update dependency electron to v29.3.0 (#1961)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-11 18:18:47 +09:00
bfe624dc57 fix(mpris): use global regex to replace minus in the video ID (#1963) 2024-04-11 18:16:02 +09:00
994fdaf436 fix(deps): update dependency @cliqz/adblocker-electron-preload to v1.27.1 (#1954)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-11 00:59:45 +09:00
9ac9146d78 chore(deps): update dependency typescript to v5.4.5 (#1958)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-11 00:47:36 +09:00
fbbfc540c2 fix(deps): update dependency youtubei.js to v9.2.1 (#1957)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-11 00:47:30 +09:00
ac3f42d507 fix(deps): update dependency i18next to v23.11.1 (#1956)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-11 00:47:20 +09:00
993655fdee fix(deps): update dependency @cliqz/adblocker-electron to v1.27.1 (#1953)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-11 00:47:08 +09:00
eff2f550c6 chore(i18n): Added translation using Weblate (Malay) 2024-04-09 11:44:56 +02:00
aef03ab9fd chore: update electron-builder to 25.0.0-alpha.6 2024-04-09 07:18:39 +09:00
f822373c30 chore: update overrides 2024-04-09 07:17:12 +09:00
19313f9cc9 chore(deps): update dependency @typescript-eslint/eslint-plugin to v7.6.0 (#1947)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-09 06:56:03 +09:00
c3b64b097f fix(deps): update dependency i18next to v23.11.0 (#1946)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-09 06:55:20 +09:00
6668d735a0 chore(deps): update dependency node-gyp to v10.1.0 (#1941)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-07 20:29:51 +09:00
e2d801168e chore(deps): update dependency eslint to v9 (#1940)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-07 20:29:42 +09:00
86f5223350 chore(deps): update dependency rollup to v4.14.1 (#1944)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-07 20:29:19 +09:00
9ee6940856 chore(deps): update dependency node-gyp to v10.1.0 (#1937)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-05 09:26:49 +09:00
bffea06343 chore(deps): update dependency typescript to v5.4.4 (#1936)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-05 09:26:22 +09:00
e0ab14b4ea chore(deps): update playwright monorepo to v1.43.0 (#1938)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-05 09:25:56 +09:00
1cb5f628c8 chore(deps): bump undici from 5.28.3 to 5.28.4 (#1935)
Bumps [undici](https://github.com/nodejs/undici) from 5.28.3 to 5.28.4.
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](https://github.com/nodejs/undici/compare/v5.28.3...v5.28.4)

---
updated-dependencies:
- dependency-name: undici
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-05 09:25:45 +09:00
1ac9704cf4 chore(deps): update dependency vite to v5.2.8 (#1930)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-04 21:36:50 +09:00
7ebcc51646 chore(deps): update dependency discord-api-types to v0.37.79 (#1933)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-04 21:34:22 +09:00
f4ccde2734 chore(deps): update dependency node-gyp to v10.1.0 2024-04-04 21:33:02 +09:00
e6d7c5cdfc chore(deps): update dependency electron to v29.2.0 2024-04-04 21:32:16 +09:00
9e3f32a233 chore(deps): update dependency node-gyp to v10.1.0 2024-04-03 19:55:25 +09:00
8ed813427f chore(deps): update dependency @typescript-eslint/eslint-plugin to v7.5.0 2024-04-03 19:51:38 +09:00
2db0d79af6 chore(deps): update dependency discord-api-types to v0.37.78 2024-04-03 19:48:05 +09:00
28ba662d6f chore(deps): update pnpm to v8.15.6 2024-04-03 19:47:56 +09:00
e041a83121 chore(deps): update dependency node-gyp to v10.1.0 2024-04-03 19:47:44 +09:00
42185e59d5 chore(deps): update dependency rollup to v4.14.0 2024-04-03 19:47:37 +09:00
975e9719ad fix(deps): update dependency youtubei.js to v9.2.0 2024-04-01 01:30:18 +09:00
31e51a67db chore(i18n): Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/
2024-03-31 16:39:49 +02:00
d5f829d8d0 Fixing the dislike skipping issue #1902 2024-03-31 23:39:42 +09:00
0dbf0295b8 i18n Translation to Dutch/nl 2024-03-31 23:39:42 +09:00
daaf48f453 chore(deps): update dependency node-gyp to v10.1.0 (#1910)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-31 03:04:02 +09:00
1d9e021681 chore(deps): update dependency node-gyp to v10.1.0 (#1908)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-31 02:50:07 +09:00
6dd36c74e0 fix(deps): update dependency @cliqz/adblocker-electron to v1.27.0 (#1906)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-31 02:49:57 +09:00
b933218762 fix(deps): update dependency @cliqz/adblocker-electron-preload to v1.27.0 (#1907)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-30 03:51:10 +09:00
26f8814a97 chore(deps): update dependency rollup to v4.13.2 (#1901)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-29 21:02:37 +09:00
236ba7536e chore(deps): update dependency glob to v10.3.12 (#1900)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-29 21:00:50 +09:00
faaf996b16 chore(deps): update dependency vite to v5.2.7 (#1905)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-29 21:00:15 +09:00
5a637fd6e7 fix(deps): update dependency node-html-parser to v6.1.13 (#1903)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-29 21:00:08 +09:00
aca1d30d2f chore(i18n): Translated using Weblate (Dutch)
Currently translated at 16.3% (56 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/nl/
2024-03-28 15:35:09 +01:00
5c3eecb3fd chore(deps): update dependency discord-api-types to v0.37.77 (#1899)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-28 23:11:31 +09:00
9da3ad2fb7 chore(deps): update dependency electron to v29.1.6 (#1898)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-28 17:30:29 +09:00
d45d597136 chore(i18n): Translated using Weblate (Portuguese)
Currently translated at 100.0% (342 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/pt/
2024-03-28 07:47:08 +01:00
2495d5da99 chore(i18n): Translated using Weblate (Dutch)
Currently translated at 5.5% (19 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/nl/
2024-03-27 21:31:00 +01:00
33aeafd19c chore(i18n): Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (342 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/zh_Hant/
2024-03-27 21:31:00 +01:00
374d0ce5e7 chore(i18n): Translated using Weblate (Russian)
Currently translated at 100.0% (342 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ru/
2024-03-27 21:31:00 +01:00
371805334b Improve video title filters (#1667) 2024-03-28 02:54:16 +09:00
47dbeff0d0 fix: fix switch-repeat
fix #1810
2024-03-28 02:40:29 +09:00
17652b5b77 chore(deps): update dependency rollup to v4.13.1 (#1896)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-28 01:12:07 +09:00
9608c2a7fc chore(i18n): Added translation using Weblate (Hebrew) 2024-03-27 08:26:39 +01:00
8abe2823d7 chore(deps): update dependency node-gyp to v10.1.0 (#1890)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-27 01:18:08 +09:00
dbc7f23ab8 chore(deps): update dependency node-gyp to v10.1.0 (#1889)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-26 20:31:13 +09:00
357bd935e4 Update changelog for v3.3.5 2024-03-26 10:58:49 +00:00
f99ca53a6d Bump version to 3.3.5 2024-03-26 11:51:38 +01:00
8700c1a110 chore(deps): update dependency node-gyp to v10.1.0 (#1885)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-26 19:51:34 +09:00
c5e37b791c chore(deps): update dependency @typescript-eslint/eslint-plugin to v7.4.0 (#1886)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-26 19:51:29 +09:00
307f6387ab fix(style): resolve #1887 2024-03-26 19:09:51 +09:00
652a150a0a chore(i18n): Translated using Weblate (Swedish)
Currently translated at 8.4% (29 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/sv/
2024-03-26 10:45:23 +01:00
2c59badb46 chore(i18n): Update translation files
Updated by "Remove blank strings" hook in Weblate.

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/
2024-03-26 10:41:31 +01:00
69087bbf1f chore(i18n): Translated using Weblate (Swedish)
Currently translated at 7.6% (26 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/sv/
2024-03-26 10:41:31 +01:00
af78f1596a chore(i18n): Translated using Weblate (French)
Currently translated at 98.8% (338 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/fr/
2024-03-26 10:41:30 +01:00
fca936a698 chore(i18n): Added translation using Weblate (Swedish) 2024-03-25 19:06:56 +01:00
54b70f6b3e chore(deps): update dependency vite to v5.2.6 (#1883)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-25 05:08:49 +09:00
62f7d440fa Update changelog for v3.3.4 2024-03-23 18:21:29 +00:00
752ccbf482 Bump version to 3.3.4 2024-03-24 03:14:20 +09:00
a8bc53912d fix(style): fix miniplayer style 2024-03-24 02:07:36 +09:00
ed700c2916 fix(style): fix fullscreen style and in-app-menu 2024-03-24 01:28:34 +09:00
97695444af Update changelog for v3.3.3 2024-03-23 15:44:08 +00:00
85e5e1814a Bump version to 3.3.3 2024-03-24 00:37:13 +09:00
88c84a50d0 chore(deps): update dependency electron to v29.1.5 (#1876)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-24 00:24:06 +09:00
0004fb3fc8 chore(deps): update dependency typescript to v5.4.3 (#1877)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-24 00:22:34 +09:00
9cbaf5797b chore(deps): update dependency discord-api-types to v0.37.76 (#1878)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-24 00:22:28 +09:00
1df75ae82f chore(deps): update dependency vite to v5.2.4 (#1881)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-24 00:22:22 +09:00
4d86af5437 Ambient Plugin cleanup (#1880) 2024-03-24 00:22:15 +09:00
ba0876fd8b chore(i18n): Translated using Weblate (Thai)
Currently translated at 69.5% (238 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/th/
2024-03-21 19:01:58 +01:00
a3a3fca694 chore(i18n): Translated using Weblate (Thai)
Currently translated at 69.2% (237 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/th/
2024-03-20 18:50:45 +01:00
de4396936d chore(deps): update dependency vite to v5.2.2 (#1875)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-21 00:58:59 +09:00
164575296f fix(deps): update dependency solid-js to v1.8.16 (#1873)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-20 17:36:36 +09:00
7e8cbfc4c0 chore(i18n): Translated using Weblate (Portuguese)
Currently translated at 97.3% (333 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/pt/
2024-03-19 16:01:50 +01:00
679938ccf7 fix: add support for Wayland
fix #1864
2024-03-19 21:11:10 +09:00
5a6d681bf4 chore(deps): update dependency @typescript-eslint/eslint-plugin to v7.3.1 (#1868)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-19 18:10:26 +09:00
62304b723e chore(deps): update dependency discord-api-types to v0.37.75 (#1867)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-19 18:10:04 +09:00
c89bb4606f chore(i18n): Translated using Weblate (Hungarian)
Currently translated at 12.8% (44 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/hu/
2024-03-18 12:01:57 +01:00
14c50e0d57 chore(deps): update pnpm to v8.15.5 (#1865)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-18 13:37:14 +09:00
f7e9cf9a29 fix: Fix Miniplayer image size (#1863) 2024-03-18 02:46:44 +09:00
4bb3f41828 fix(style): fixed image/video alignment when toggle is active (#1862) 2024-03-18 02:46:23 +09:00
e4759ebe25 chore(i18n): Translated using Weblate (Lithuanian)
Currently translated at 84.7% (290 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/lt/
2024-03-17 11:13:36 +01:00
ce33a92f02 chore(i18n): Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (342 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/zh_Hant/
2024-03-17 11:13:36 +01:00
dd44c07450 chore(i18n): Translated using Weblate (Russian)
Currently translated at 100.0% (342 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ru/
2024-03-17 11:13:36 +01:00
15a5b7a820 chore(i18n): Translated using Weblate (German)
Currently translated at 100.0% (342 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/de/
2024-03-17 11:13:36 +01:00
41b7e095eb chore: Update README-is.md (#1858) 2024-03-17 11:53:15 +09:00
f34a297fcf chore(deps): update dependency vite-plugin-solid to v2.10.2 (#1859)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-17 11:52:59 +09:00
9b2c1a320b fix: Ambient Mode intialization improvement (#1857) 2024-03-17 11:52:46 +09:00
70ed6f8e6c chore(i18n): Update translation files
Updated by "Remove blank strings" hook in Weblate.

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/
2024-03-17 02:01:51 +01:00
5a2489f0bf chore(i18n): Translated using Weblate (Dutch)
Currently translated at 4.9% (17 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/nl/
2024-03-17 02:01:50 +01:00
a7d035022a chore(i18n): Translated using Weblate (Thai)
Currently translated at 69.0% (236 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/th/
2024-03-17 02:01:50 +01:00
b879a70b24 chore(i18n): Added translation using Weblate (Dutch) 2024-03-16 14:48:17 +01:00
ec4e9a1d47 chore(deps): bump follow-redirects from 1.15.5 to 1.15.6 (#1856)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-15 14:45:05 +09:00
d9c52c0a7f chore(README): Nicer Readme 2.0 (#1833) 2024-03-15 14:43:57 +09:00
81ecf18231 chore(deps): update dependency discord-api-types to v0.37.74 (#1854)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-15 14:40:22 +09:00
b0b12a075d chore(deps): update dependency esbuild to v0.20.2 (#1855)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-15 14:40:16 +09:00
54c428083c Improve ambient mode (#1853) 2024-03-15 14:39:31 +09:00
60228a387a chore(deps): update dependency electron to v29.1.4 (#1852)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-14 18:32:17 +09:00
3e04baef00 chore(deps): update dependency electron to v29.1.3 (#1851)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-14 13:34:42 +09:00
573bcba1a0 chore(i18n): Translated using Weblate (Bulgarian)
Currently translated at 25.7% (88 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/bg/
2024-03-13 18:01:58 +01:00
ae2fad5db3 chore(i18n): Translated using Weblate (French)
Currently translated at 95.6% (327 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/fr/
2024-03-13 18:01:56 +01:00
c8fc12569c chore(deps): update dependency rollup to v4.13.0 (#1850)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-13 08:00:29 +09:00
df8efe3fa4 chore(i18n): Translated using Weblate (Bulgarian)
Currently translated at 11.1% (38 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/bg/
2024-03-12 17:01:53 +01:00
HKi
251131b9b5 chore(i18n): Translated using Weblate (Vietnamese)
Currently translated at 99.4% (340 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/vi/
2024-03-12 17:01:53 +01:00
35fb61087a fix(deps): update dependency electron-store to v8.2.0 (#1843)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-12 07:45:40 +09:00
cbec88ff47 chore(deps): update dependency electron to v29.1.1 (#1841)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-12 07:43:13 +09:00
f4319616a6 fix(deps): update dependency i18next to v23.10.1 (#1842)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-12 07:43:04 +09:00
1534b7a67f chore(deps): update dependency @typescript-eslint/eslint-plugin to v7.2.0 (#1848)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-12 07:05:33 +09:00
cbfcc9d140 chore(deps): update dependency vite to v5.1.6 (#1847)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-12 07:05:27 +09:00
60d10a9222 fix(deps): update dependency async-mutex to v0.5.0 (#1849)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-12 07:05:18 +09:00
17e090d5c5 chore(i18n): Translated using Weblate (Hungarian)
Currently translated at 8.4% (29 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/hu/
2024-03-11 07:01:55 +01:00
fa6b4fa83b chore(i18n): Translated using Weblate (Japanese)
Currently translated at 100.0% (342 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ja/
2024-03-11 07:01:54 +01:00
e4b5244d95 fix(deps): update dependency ts-morph to v22 (#1846)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-11 08:27:01 +09:00
04dc5d6314 chore(i18n): Added translation using Weblate (Hungarian) 2024-03-10 16:54:07 +01:00
33ccb03f90 chore(i18n): Translated using Weblate (Italian)
Currently translated at 100.0% (342 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/it/
2024-03-08 23:01:58 +01:00
80011ed3aa chore(i18n): Translated using Weblate (Polish)
Currently translated at 100.0% (342 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/pl/
2024-03-07 20:01:57 +01:00
3e43cf5959 chore(deps): update dependency discord-api-types to v0.37.73 (#1840)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-08 04:00:53 +09:00
bbd590dde8 chore(deps): update dependency rollup to v4.12.1 (#1837)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-07 19:47:53 +09:00
0975a951e4 chore: Changed a single word (README-is.md) (#1836) 2024-03-07 05:27:39 +09:00
8b78f227a7 chore(deps): update dependency typescript to v5.4.2 (#1838)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-07 05:27:06 +09:00
5a93a04b61 chore(deps): update dependency electron-vite to v2.1.0 (#1823)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-05 15:47:51 +09:00
b971eb4191 chore(deps): update dependency @typescript-eslint/eslint-plugin to v7.1.1 (#1829)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-05 15:41:23 +09:00
403e825b8d chore(deps): update dependency vite to v5.1.5 (#1831)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-05 15:41:15 +09:00
9164eba88c Revert "chore(deps): update dependency electron-builder to v24.13.3" (#1818) 2024-03-03 04:56:49 +09:00
bb83bbac38 chore(deps): update dependency electron-builder to v24.13.3 (#1774)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-03 04:50:28 +09:00
651a641b22 chore: Update bug_report.yml 2024-03-02 23:56:23 +09:00
441b5fc8dd fix(style): fix navigation bar items are not working
resolve #1381
resolve #1396
resolve #1649
2024-03-02 23:51:18 +09:00
4fba9445d1 chore(i18n): Translated using Weblate (Norwegian Bokmål)
Currently translated at 66.6% (228 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/nb_NO/
2024-03-02 08:07:24 +01:00
3fb5e01ca5 chore(i18n): Translated using Weblate (Spanish)
Currently translated at 100.0% (342 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/es/
2024-03-02 08:07:24 +01:00
09b2b0d507 chore(deps): update playwright monorepo to v1.42.1 (#1816)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-02 15:31:55 +09:00
a9be35481a chore(i18n): Translated using Weblate (Romanian)
Currently translated at 100.0% (342 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ro/
2024-03-01 15:00:24 +01:00
c871506a69 chore(i18n): Translated using Weblate (Romanian)
Currently translated at 100.0% (342 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ro/
2024-03-01 15:00:24 +01:00
8e6790d366 chore(i18n): Translated using Weblate (Norwegian Bokmål)
Currently translated at 66.0% (226 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/nb_NO/
2024-03-01 15:00:22 +01:00
46620c5ec9 fix(tray): fix tray icon ratio in macOS 2024-03-01 03:20:37 +09:00
5f090169da fix: Add scale ratio for tray icons (#1811) 2024-03-01 03:14:51 +09:00
2205150b86 chore(i18n): Translated using Weblate (Romanian)
Currently translated at 19.5% (67 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ro/
2024-02-29 14:48:03 +01:00
3c4bb8a8fc chore(i18n): Translated using Weblate (Ukrainian)
Currently translated at 100.0% (342 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/uk/
2024-02-29 14:48:03 +01:00
77d0e71529 chore(i18n): Added translation using Weblate (Romanian) 2024-02-29 13:18:59 +01:00
cf974e2d62 chore(i18n): Translated using Weblate (Icelandic)
Currently translated at 98.8% (338 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/is/
2024-02-29 01:02:08 +01:00
ee03db4745 fix(README-is): image path 2024-02-28 14:59:36 +09:00
efd2061058 Icelandic translation of the readme file (#1806) 2024-02-28 14:58:32 +09:00
e7ed20f62f chore(deps): update dependency electron to v29.1.0 (#1808)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-28 14:58:25 +09:00
36d4c08a56 chore(deps): update playwright monorepo to v1.42.0 (#1805)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-28 14:57:10 +09:00
2a939e615c chore(deps): update dependency eslint to v8.57.0 (#1793)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-27 04:39:40 +09:00
9825165286 chore(deps): update dependency @typescript-eslint/eslint-plugin to v7.1.0 (#1800)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-27 04:30:11 +09:00
55c934ac7c fix: remove possible memory leak 2024-02-27 02:42:55 +09:00
c7715115ee chore(i18n): Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (342 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/zh_Hans/
2024-02-26 18:01:55 +01:00
e93b5e8135 chore(deps): update dependency discord-api-types to v0.37.71 (#1799)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-27 01:20:07 +09:00
fd6ba1eda1 fix(downloader): fix memory leak reported in #1791 2024-02-26 19:14:13 +09:00
34f5411aec chore(i18n): Translated using Weblate (Indonesian)
Currently translated at 100.0% (342 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/id/
2024-02-25 13:02:04 +01:00
2b74ec2ef8 chore(i18n): Translated using Weblate (German)
Currently translated at 99.7% (341 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/de/
2024-02-25 13:02:03 +01:00
14dd0e8e03 chore(deps): update pnpm to v8.15.4 (#1795)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-25 17:40:19 +09:00
b0156261b7 chore(deps): update dependency @types/semver to v7.5.8 (#1797)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-25 17:40:12 +09:00
05d520f1c1 chore(i18n): Translated using Weblate (Icelandic)
Currently translated at 98.8% (338 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/is/
2024-02-23 15:02:00 +01:00
ccd44c79e8 fix: center the pause icon (#1786) 2024-02-23 22:56:40 +09:00
7be48ab05e fix(deps): update dependency @cliqz/adblocker-electron to v1.26.16 (#1788)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-23 22:56:19 +09:00
2d40b410b5 fix(deps): update dependency @cliqz/adblocker-electron-preload to v1.26.16 (#1789)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-23 22:47:34 +09:00
f54df86eec fix(deps): update dependency youtubei.js to v9.1.0 (#1790)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-23 20:55:24 +09:00
1be476de54 fix(deps): update dependency i18next to v23.10.0 (#1785)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-22 22:17:30 +09:00
82fa8719a9 chore(i18n): Translated using Weblate (Icelandic)
Currently translated at 97.0% (332 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/is/
2024-02-22 11:02:05 +01:00
7600620c4a chore(i18n): Translated using Weblate (Turkish)
Currently translated at 100.0% (342 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/tr/
2024-02-22 11:02:03 +01:00
c5217f3e1e chore(i18n): Translated using Weblate (Polish)
Currently translated at 100.0% (342 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/pl/
2024-02-22 11:02:03 +01:00
706279852a chore(i18n): Translated using Weblate (Spanish)
Currently translated at 100.0% (342 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/es/
2024-02-22 11:02:03 +01:00
3a6274504f fix(ytm-bugs): fixed a scrollbar-color bug that affected Chromium 121 and later
fix #1737
2024-02-22 12:53:34 +09:00
3aa9398481 chore(deps): update dependency electron to v29 (#1773)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-22 11:58:40 +09:00
7cca435b1d chore(deps): update dependency vite to v5.1.4 (#1778)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-22 00:10:41 +09:00
241b5800d1 chore(deps): bump ip from 2.0.0 to 2.0.1 (#1777)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-21 11:02:47 +09:00
8abb8acdd3 chore(i18n): Translated using Weblate (Icelandic)
Currently translated at 19.0% (65 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/is/
2024-02-21 02:54:14 +01:00
ef8226c091 chore(i18n): Translated using Weblate (Spanish)
Currently translated at 100.0% (342 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/es/
2024-02-21 02:54:13 +01:00
7484e1bf9a chore(i18n): Added translation using Weblate (Icelandic) 2024-02-20 23:55:29 +01:00
2919fd54b7 Update changelog for v3.3.2 2024-02-20 12:07:35 +00:00
9eeb1c986a release 3.3.2 2024-02-20 20:59:48 +09:00
d37cd2418c fix: fix bugs in MPRIS, and improve MPRIS (#1760)
Co-authored-by: JellyBrick <shlee1503@naver.com>
Co-authored-by: Totto <32566573+Totto16@users.noreply.github.com>
2024-02-20 20:50:55 +09:00
8bd05f525d chore(deps): rollback dependency electron-builder to v24.9.1 2024-02-20 15:24:27 +09:00
47b23b414c chore(deps): update dependency electron-builder to v24.13.1 2024-02-20 14:43:04 +09:00
6f70d179c7 fix: fixed an issue that caused infinite loops when using Music Together
fix #1752
2024-02-20 12:57:49 +09:00
62a86e9267 fix(deps): update dependency electron-updater to v6.1.8 (#1770)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-20 12:55:26 +09:00
6358a2d0b1 chore(deps): update dependency electron-builder to v24.12.0 (#1771)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-20 12:55:17 +09:00
273633c2ce chore(i18n): Translated using Weblate (Korean)
Currently translated at 100.0% (342 of 342 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ko/
2024-02-20 04:15:04 +01:00
8b1209ef73 chore(i18n): Translated using Weblate (Italian)
Currently translated at 100.0% (340 of 340 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/it/
2024-02-20 03:55:03 +01:00
47505e9748 chore(i18n): Translated using Weblate (German)
Currently translated at 100.0% (340 of 340 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/de/
2024-02-20 03:55:03 +01:00
5178cc6bd8 feat(scrobblers): use BrowserWindow instead of shell.openExternal (#1758) 2024-02-20 11:54:57 +09:00
d9a27fff42 chore(deps): update dependency @typescript-eslint/eslint-plugin to v7.0.2 (#1763)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-20 11:54:37 +09:00
9e6560b814 chore(i18n): Translated using Weblate (Italian)
Currently translated at 99.7% (339 of 340 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/it/
2024-02-19 19:01:59 +01:00
afdb19a742 chore(deps): update dependency esbuild to v0.20.1 (#1759)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-19 18:23:04 +09:00
0ae5b668f5 fix(in-app-menu): default config 2024-02-19 17:06:01 +09:00
10533e28fa fix: error.html path 2024-02-19 16:53:32 +09:00
6189e67819 fix(deps): update dependency i18next to v23.9.0 (#1754)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-19 14:29:22 +09:00
f9ad505e40 fix: scrobbler migration 2024-02-19 14:27:24 +09:00
9b011101ed Update changelog for v3.3.1 2024-02-18 12:43:37 +00:00
a6ed8bf3aa release 3.3.1 (HOTFIX) 2024-02-18 21:36:04 +09:00
87acf4cf04 hotfix: in-app-menu position issue 2024-02-18 21:35:41 +09:00
b6fe2afd75 chore: Update README.md 2024-02-18 20:57:38 +09:00
6d9bb8eb1c Update changelog for v3.3.0 2024-02-18 11:40:17 +00:00
192fd0620f release 3.3.0 2024-02-18 20:32:45 +09:00
00d0b31980 fix(scrobbler): remove snake_case 2024-02-18 20:21:19 +09:00
5edb2131d2 fix(in-app-menu): implement auto close 2024-02-18 20:00:52 +09:00
4657aeca45 fix: apply fix from eslint 2024-02-18 11:58:26 +09:00
9f5651a8ba fix: fix upgrade button
fix #1199
2024-02-18 10:50:36 +09:00
570dcfee29 fix: revert fbc02a494a 2024-02-18 10:50:15 +09:00
2c130ce80d chore(mpris): use override keyword 2024-02-18 10:34:29 +09:00
8457115105 fix(mpris): fix mpris invalid position
- fix #1726
2024-02-18 10:26:45 +09:00
fbc02a494a fix(in-app-menu): simplified if-statement 2024-02-18 09:50:20 +09:00
7e2c254ecf fix(in-app-menu): should be disabled by default in linux env 2024-02-18 09:47:05 +09:00
11936a889e fix(deps): update dependency i18next to v23.8.3 (#1751)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-18 07:33:35 +09:00
f33970addd import fixed ./constants (#1748) 2024-02-18 07:33:11 +09:00
2c02b7193d chore(deps): update dependency rollup to v4.12.0 (#1743)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-17 10:08:33 +09:00
3f80b598ae chore(deps): bump undici from 5.28.2 to 5.28.3 (#1747)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-17 10:07:19 +09:00
477068ed49 chore(deps): update dependency vite to v5.1.3 (#1742)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-16 08:44:31 +09:00
b4083874ac fix: invalid podcast artist name
🤦
2024-02-16 08:41:00 +09:00
c5d0673b2f chore(deps): update dependency vite-plugin-solid to v2.10.1 (#1734)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-15 22:32:18 +09:00
9ccc44474b chore(deps): update dependency discord-api-types to v0.37.70 (#1740)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-15 22:31:50 +09:00
98e341f122 chore(deps): update dependency electron to v28.2.3 (#1736)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-15 22:29:11 +09:00
b23eba51dd chore(deps): update pnpm to v8.15.3 (#1739)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-15 22:28:47 +09:00
980005a58c chore(deps): update dependency rollup to v4.11.0 (#1738)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-15 22:28:41 +09:00
aba58b1d34 fix(deps): update dependency solid-js to v1.8.15 (#1735)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-15 22:28:17 +09:00
bb6a127d22 chore(deps): update dependency vite to v5.1.2 (#1733)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-15 20:32:18 +09:00
ac6e30a6b6 chore(i18n): Translated using Weblate (Polish)
Currently translated at 98.2% (334 of 340 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/pl/
2024-02-14 19:01:58 +01:00
3f23282eed chore(deps): update dependency vite-plugin-solid to v2.10.0 (#1732)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-14 20:36:09 +09:00
199a77819c chore(deps): update pnpm to v8.15.2 (#1729)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-14 01:16:33 +09:00
89a53b2854 Update Copyright - 2024 (#1730) 2024-02-14 01:06:26 +09:00
c57bf79b08 chore(i18n): Translated using Weblate (Indonesian)
Currently translated at 100.0% (340 of 340 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/id/
2024-02-12 23:42:44 +01:00
eabb3392b4 fix: discord RPC (fix #1664) 2024-02-13 07:41:32 +09:00
c78cc3a38d chore(deps): update dependency @typescript-eslint/eslint-plugin to v7 (#1728)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-13 07:10:13 +09:00
011ffd538b fix(deps): update dependency @floating-ui/dom to v1.6.3 (#1727)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-13 06:41:43 +09:00
f386576196 chore(deps): update dependency electron to v28.2.2 (#1717)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-12 05:07:22 +09:00
bab3526f0f chore(deps): update dependency vite to v5.1.1 (#1718)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-12 05:07:14 +09:00
115923b422 chore(deps): update dependency @types/semver to v7.5.7 (#1724)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-12 05:07:07 +09:00
fefa8c8750 fix(deps): update dependency @floating-ui/dom to v1.6.2 (#1725)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-12 05:07:01 +09:00
3aa80c0f01 chore(i18n): Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (340 of 340 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/zh_Hant/
2024-02-11 04:02:12 +01:00
aea219994a chore(deps): update dependency rollup to v4.10.0 (#1719)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-11 00:36:55 +09:00
74e22ccecd chore(i18n): Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (340 of 340 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/zh_Hans/
2024-02-09 17:44:03 +01:00
db09cf5ffb chore(i18n): Translated using Weblate (Indonesian)
Currently translated at 58.8% (200 of 340 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/id/
2024-02-07 14:01:55 +01:00
cc1d13f203 chore(i18n): Translated using Weblate (Spanish)
Currently translated at 100.0% (340 of 340 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/es/
2024-02-07 14:01:54 +01:00
0cd1ce6a79 fix(deps): update dependency solid-js to v1.8.14 (#1713)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-06 18:00:05 +09:00
95254fc2ff chore(deps): update dependency @typescript-eslint/eslint-plugin to v6.21.0 (#1711) 2024-02-06 05:20:13 +09:00
205376aadf fix(deps): update dependency semver to v7.6.0 (#1712) 2024-02-06 05:20:04 +09:00
6f057bfbfc fix(in-app-menu): remove unused style 2024-02-06 03:09:16 +09:00
bb39481666 fix(plugins): fix many bugs (in-app-menu, album-color-theme, blur-nav-bar) 2024-02-06 02:02:08 +09:00
ddb9968195 fix: workarounds for region restrict 2024-02-06 01:30:36 +09:00
a309729fa4 fix: revert electron version to v28 2024-02-06 01:30:09 +09:00
ba7e065ba6 fix: remove sign-in button (fix #1199) 2024-02-06 00:34:43 +09:00
ee05893d4c feat(album-color-theme): change nav-bar style 2024-02-06 00:00:32 +09:00
febc63edef fix(in-app-menu): fix app crash in production 2024-02-05 23:14:00 +09:00
b3c05c8647 refactor(in-app-menu): refactor in-app-menu plugin (#1710)
Co-authored-by: JellyBrick <shlee1503@naver.com>
2024-02-05 22:26:25 +09:00
cd8701d0e5 chore(i18n): Translated using Weblate (Ukrainian)
Currently translated at 100.0% (340 of 340 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/uk/
2024-02-05 02:02:48 +01:00
3b41edb62d chore(i18n): Translated using Weblate (Japanese)
Currently translated at 100.0% (340 of 340 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ja/
2024-02-05 02:02:38 +01:00
ab3b8495df chore(i18n): Translated using Weblate (Czech)
Currently translated at 89.7% (305 of 340 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/cs/
2024-02-05 02:02:37 +01:00
b04cd79bcf chore(i18n): Translated using Weblate (Indonesian)
Currently translated at 52.0% (177 of 340 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/id/
2024-02-02 15:01:47 +01:00
c864e5764a chore(i18n): Translated using Weblate (Turkish)
Currently translated at 100.0% (340 of 340 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/tr/
2024-02-02 15:01:47 +01:00
1f71df6c41 chore(i18n): Translated using Weblate (Russian)
Currently translated at 100.0% (340 of 340 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ru/
2024-02-02 15:01:47 +01:00
0decda57ab chore(deps): update playwright monorepo to v1.41.2 (#1706)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-02 17:47:46 +09:00
5bfd3a4562 chore(deps): update dependency electron to v29.0.0-beta.5 (#1707)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-02 17:47:36 +09:00
d4af820ae8 chore(i18n): Translated using Weblate (Korean)
Currently translated at 100.0% (340 of 340 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ko/
2024-02-01 14:50:56 +01:00
3ec25b7779 chore(i18n): Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (338 of 338 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/zh_Hans/
2024-02-01 14:12:03 +01:00
a9ee12b05e chore(i18n): Translated using Weblate (Turkish)
Currently translated at 100.0% (338 of 338 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/tr/
2024-02-01 14:12:03 +01:00
a612d1c1fd feat(album-color-theme): support album color theme in all pages (#1685) 2024-02-01 22:11:57 +09:00
fb48d24e0d fix(deps): update dependency youtubei.js to v9.0.2 (#1704)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-01 15:55:16 +09:00
38d19d9ea7 fix(deps): update dependency i18next to v23.8.2 (#1702)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-01 01:55:17 +09:00
4950abc399 fix(PiP): fix multiple handler 2024-01-31 18:40:36 +09:00
e3ad804dc4 feat: Support disabling scrobbling for non-music content (#1665)
Co-authored-by: JellyBrick <shlee1503@naver.com>
2024-01-31 17:41:55 +09:00
A L
f2f15bc3cc chore(i18n): Translated using Weblate (Bulgarian)
Currently translated at 5.0% (17 of 337 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/bg/
2024-01-30 23:01:21 +01:00
4624a1022a fix(deps): update dependency youtubei.js to v9 (#1682)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-30 19:04:03 +09:00
A L
cc169da6d4 chore(i18n): Added translation using Weblate (Bulgarian) 2024-01-30 10:10:26 +01:00
c58ed21661 chore(deps): update dependency electron to v29.0.0-beta.4 (#1698)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-30 09:16:36 +09:00
c483733bc3 fix(deps): update dependency i18next to v23.8.1 (#1694)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-30 09:13:41 +09:00
9738f2f6ae chore(deps): update dependency @typescript-eslint/eslint-plugin to v6.20.0 (#1700)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-30 09:10:18 +09:00
ecdd8eb9f6 chore(deps): update pnpm to v8.15.1 (#1699)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-30 09:10:06 +09:00
47e2052ce0 chore(i18n): Translated using Weblate (Russian)
Currently translated at 100.0% (337 of 337 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ru/
2024-01-29 19:07:33 +01:00
a34eb31d9c chore(i18n): Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (337 of 337 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/zh_Hant/
2024-01-29 18:47:29 +01:00
c03cab179e chore(i18n): Translated using Weblate (Russian)
Currently translated at 88.7% (299 of 337 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ru/
2024-01-29 18:47:29 +01:00
0d61cf906d Fix #1617
Remove duplicated call of `titleBar.appendChild(logo);`.
2024-01-29 14:50:41 +02:00
b3c1aa6b4b chore(deps): update dependency esbuild to v0.20.0 (#1691)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-28 07:07:22 +09:00
4904620ce6 chore(deps): update pnpm to v8.15.0 (#1692)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-28 07:07:09 +09:00
feaccb593d fix(deps): update dependency i18next to v23.7.20 (#1684)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-27 18:29:12 +09:00
9ad2baea59 chore(deps): update dependency electron to v29.0.0-beta.3 (#1683)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-27 18:29:01 +09:00
df77086039 chore(deps): update dependency electron to v29.0.0-beta.2 (#1681)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-26 09:45:16 +09:00
ceb844473a chore(deps): update dependency rollup to v4.9.6 (#1663)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-26 09:44:12 +09:00
a0932b0dc4 chore(i18n): Translated using Weblate (Italian)
Currently translated at 100.0% (337 of 337 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/it/
2024-01-25 23:01:50 +01:00
0be37716ef chore(deps): update dependency electron to v29.0.0-beta.1 (#1670) 2024-01-26 00:17:06 +09:00
c07b05a7be fix(deps): update dependency i18next to v23.7.19 (#1680) 2024-01-26 00:16:55 +09:00
94b1da9db0 chore(deps): update dependency @typescript-eslint/eslint-plugin to v6.19.1 (#1669) 2024-01-26 00:16:28 +09:00
5fa7a1273f chore(deps): update pnpm to v8.14.3 (#1668) 2024-01-26 00:16:18 +09:00
cf9088785b chore(deps): update dependency vite-plugin-inspect to v0.8.3 (#1672) 2024-01-26 00:15:44 +09:00
adf3e3150e chore(deps): update dependency esbuild to v0.19.12 (#1673) 2024-01-26 00:13:11 +09:00
dbeb63018e fix(deps): update dependency @electron/remote to v2.1.2 (#1676) 2024-01-26 00:12:55 +09:00
51a39d240c chore: Update issue templates (#1661)
* Update bug_report.yml

* Update feature_request.yml

* Update bug_report.yml
2024-01-26 00:08:39 +09:00
4061f8e0e6 chore(i18n): Translated using Weblate (Japanese)
Currently translated at 100.0% (337 of 337 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ja/
2024-01-24 14:01:53 +01:00
d32e60249a chore(i18n): Translated using Weblate (Indonesian)
Currently translated at 52.5% (177 of 337 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/id/
2024-01-23 08:01:49 +01:00
b84a1e43af chore(i18n): Translated using Weblate (Thai)
Currently translated at 18.3% (62 of 337 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/th/
2024-01-23 08:01:48 +01:00
f5c22b63aa chore(i18n): Translated using Weblate (French)
Currently translated at 83.6% (282 of 337 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/fr/
2024-01-23 08:01:47 +01:00
41700799c7 chore(i18n): Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (337 of 337 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/zh_Hans/
2024-01-22 07:01:47 +01:00
b15b421975 chore(i18n): Translated using Weblate (Japanese)
Currently translated at 92.5% (312 of 337 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ja/
2024-01-22 07:01:47 +01:00
cca4de8684 chore(deps): update playwright monorepo to v1.41.1 (#1660)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-21 12:46:32 +09:00
946c2790c4 fix(deps): update dependency i18next to v23.7.18 (#1662)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-21 12:46:15 +09:00
3a033f1bab chore(deps): update actions/dependency-review-action action to v4 (#1654)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-21 12:44:10 +09:00
67a04a2840 chore(deps): update dependency electron to v29.0.0-alpha.11 (#1656)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-21 12:43:57 +09:00
dd48e46854 chore(deps): update dependency vite to v5.0.12 [security] (#1659)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-21 12:43:17 +09:00
99edb15c77 chore(i18n): Translated using Weblate (Indonesian)
Currently translated at 32.6% (110 of 337 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/id/
2024-01-21 04:29:51 +01:00
8503afeac7 chore(i18n): Translated using Weblate (Japanese)
Currently translated at 85.7% (289 of 337 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ja/
2024-01-21 04:29:50 +01:00
0528637135 chore(i18n): Translated using Weblate (Vietnamese)
Currently translated at 99.4% (335 of 337 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/vi/
2024-01-19 09:00:21 +01:00
bf20a2b3be chore(i18n): Translated using Weblate (German)
Currently translated at 99.4% (335 of 337 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/de/
2024-01-19 09:00:19 +01:00
0db55ce4f3 fix(deps): update dependency async-mutex to v0.4.1 (#1653)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-18 17:40:11 +09:00
21347e9d0a chore(i18n): Translated using Weblate (Vietnamese)
Currently translated at 43.3% (146 of 337 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/vi/
2024-01-17 16:06:28 +01:00
4333a25c31 chore(i18n): Translated using Weblate (Ukrainian)
Currently translated at 100.0% (337 of 337 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/uk/
2024-01-17 16:06:26 +01:00
5b20e491bd chore(i18n): Translated using Weblate (Turkish)
Currently translated at 100.0% (337 of 337 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/tr/
2024-01-17 16:06:25 +01:00
bc05f5849d chore(i18n): Translated using Weblate (Spanish)
Currently translated at 100.0% (337 of 337 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/es/
2024-01-17 16:06:25 +01:00
b1046bc28d chore(deps): update playwright monorepo to v1.41.0 (#1651)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-17 11:31:10 +09:00
d5ab36f42e fix(crossfade): fix #1633 2024-01-16 22:38:05 +09:00
922d78dcee fix: notification close 2024-01-16 21:14:37 +09:00
de6506e6b4 fix: notification closing 2024-01-16 21:13:07 +09:00
9d136c8dd5 fix: apply fix from eslint 2024-01-16 21:02:55 +09:00
26de7f940e fix: fix #1621 2024-01-16 20:34:00 +09:00
7c404ba2ea chore(song-info): fix typo 2024-01-16 19:14:16 +09:00
96d2a72bfa chore(song-info): change from array to Set
change from `array` to `Set` to prevent the duplicate callback from being stored
2024-01-16 19:13:35 +09:00
10f41bddad fix(i18n): use dash (-) instead of under-bar (_) 2024-01-16 17:36:48 +09:00
39d2f3ec80 chore(i18n): Translated using Weblate (Korean)
Currently translated at 100.0% (337 of 337 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ko/
2024-01-16 09:33:15 +01:00
512b446a3d chore(i18n): Translated using Weblate (English)
Currently translated at 100.0% (337 of 337 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/en/
2024-01-16 09:33:15 +01:00
c9b96f0488 fix(tuna-obs): partially fix #1596 2024-01-16 17:27:27 +09:00
c84ea257d5 fix: os-specific plugin 2024-01-16 17:14:02 +09:00
6512f5ad2a fix(discord): fix hide duration button
fix #1644

Thanks to @DronovasP
2024-01-16 16:41:23 +09:00
e5d0eced5d fix(store): remove duplicated if-statement 2024-01-16 16:40:06 +09:00
f424ee5170 feat: Better Scrobbler Plugin (#1640)
Co-authored-by: JellyBrick <shlee1503@naver.com>
2024-01-16 16:36:27 +09:00
ea0f6c401d chore(deps): update dependency electron to v29.0.0-alpha.10 (#1645)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-16 14:34:05 +09:00
5c5f51b3de chore(deps): update dependency @typescript-eslint/eslint-plugin to v6.19.0 (#1643)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-16 12:52:28 +09:00
7caf02ebba chore(i18n): Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (331 of 331 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/zh_Hans/
2024-01-16 04:06:12 +01:00
f6a444b970 chore(i18n): Translated using Weblate (Russian)
Currently translated at 73.1% (242 of 331 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ru/
2024-01-15 02:26:24 +01:00
d19a36b44f chore(i18n): Translated using Weblate (Polish)
Currently translated at 100.0% (331 of 331 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/pl/
2024-01-15 02:26:23 +01:00
aacb126fb5 chore(i18n): Translated using Weblate (Korean)
Currently translated at 100.0% (331 of 331 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ko/
2024-01-15 02:26:23 +01:00
5adf45cde2 chore(i18n): Translated using Weblate (Italian)
Currently translated at 100.0% (331 of 331 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/it/
2024-01-15 02:26:23 +01:00
0980aad060 chore(i18n): Translated using Weblate (Spanish)
Currently translated at 100.0% (331 of 331 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/es/
2024-01-15 02:26:23 +01:00
069e5ac8b8 chore(README): Fix plugins names and add plugins in/to Readme (in menu too) (#1624) 2024-01-14 14:50:40 +09:00
b5f6762997 chore(i18n): Translated using Weblate (Polish)
Currently translated at 100.0% (331 of 331 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/pl/
2024-01-14 06:50:01 +01:00
c2abfe4b41 chore(i18n): Translated using Weblate (Polish)
Currently translated at 91.2% (302 of 331 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/pl/
2024-01-13 13:43:07 +01:00
3964d03a3b fix: apply fix for album-actions 2024-01-13 17:28:12 +09:00
a82c4ce499 fix(album-actions): Fixed album actions (#1639) 2024-01-13 17:08:51 +09:00
2f54fa19e6 fix(yt-music bugs): fix margin in video mode 2024-01-13 12:35:54 +09:00
aacb4b3147 fix(deps): update dependency @xhayper/discord-rpc to v1.1.2 2024-01-13 10:10:32 +09:00
60980251f2 chore: update pnpm-lock 2024-01-13 10:07:55 +09:00
f8e55f95df fix(yt-music bugs): fixed a weird margin-bottom issue when using YouTube Premium 2024-01-13 10:02:18 +09:00
bebd232af0 chore(deps): update playwright monorepo to v1.41.0-beta-1705101589000 (#1638)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-13 09:08:02 +09:00
1a89fbe612 fix(#1543): fix song control doesn't work (#1637)
Co-authored-by: Su-Yong <simssy2205@gmail.com>
2024-01-13 09:06:41 +09:00
e73584c2aa feat(issue-template): add checklist 2024-01-13 07:34:00 +09:00
96a713074f chore(deps): update playwright monorepo to v1.41.0-beta-1705092460000 (#1635)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-13 07:20:59 +09:00
aedfa4ca06 chore(deps): update dependency rollup to v4.9.5 (#1629)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-13 07:17:58 +09:00
ac187f722b chore(i18n): Translated using Weblate (Vietnamese)
Currently translated at 29.6% (98 of 331 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/vi/
2024-01-12 23:16:48 +01:00
cd87642384 chore(i18n): Translated using Weblate (Indonesian)
Currently translated at 4.5% (15 of 331 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/id/
2024-01-12 23:16:48 +01:00
4a736d3211 chore(i18n): Translated using Weblate (Thai)
Currently translated at 1.2% (4 of 331 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/th/
2024-01-12 23:16:48 +01:00
e586940c57 chore(i18n): Translated using Weblate (Portuguese)
Currently translated at 100.0% (331 of 331 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/pt/
2024-01-12 23:16:47 +01:00
ab36a21583 chore(i18n): Translated using Weblate (French)
Currently translated at 86.4% (286 of 331 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/fr/
2024-01-12 23:16:47 +01:00
c0c1c3b626 chore(i18n): Translated using Weblate (German)
Currently translated at 91.5% (303 of 331 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/de/
2024-01-12 23:16:47 +01:00
918bd7fdb1 chore(deps): update dependency electron to v29.0.0-alpha.9 (#1627)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-12 11:57:43 +09:00
971d1a5776 chore(i18n): Translated using Weblate (Vietnamese)
Currently translated at 16.9% (56 of 331 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/vi/
2024-01-11 18:06:13 +01:00
1235d46e73 chore(i18n): Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (331 of 331 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/zh_Hans/
2024-01-11 18:06:13 +01:00
451b98833b chore(i18n): Translated using Weblate (Portuguese)
Currently translated at 99.3% (329 of 331 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/pt/
2024-01-11 18:06:12 +01:00
48f9be9712 chore(i18n): Translated using Weblate (Italian)
Currently translated at 100.0% (331 of 331 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/it/
2024-01-11 18:06:12 +01:00
fd8d59bada chore: update pnpm-lock 2024-01-11 08:47:46 +09:00
99ce0b7f9c chore(deps): update dependency electron to v29.0.0-alpha.8 (#1608)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-11 08:08:37 +09:00
88ace9ab35 fix(deps): update dependency @cliqz/adblocker-electron to v1.26.15 (#1615)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-11 08:06:41 +09:00
63b0ea60e4 chore(deps): update dependency rollup to v4.9.4 (#1591)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-11 08:02:31 +09:00
b4ecf0f935 fix(deps): update dependency @cliqz/adblocker-electron-preload to v1.26.15 (#1616)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-11 08:02:10 +09:00
c846f18086 chore(deps): update pnpm to v8.14.1 (#1619)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-11 08:02:03 +09:00
8a851b06f9 chore(deps): update dependency eslint-plugin-prettier to v5.1.3 (#1618)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-10 14:36:19 +09:00
5484dc8bd1 chore(deps): update dependency @typescript-eslint/eslint-plugin to v6.18.1 (#1612)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-09 19:36:07 +09:00
6c47ac36e3 fix(deps): update dependency youtubei.js to v8.2.0 (#1614)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-09 19:31:02 +09:00
3554496803 chore(deps): update dependency electron-vite to v2.0.0 (#1609)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-09 19:30:50 +09:00
b8a197615e chore(deps): update dependency @typescript-eslint/eslint-plugin to v6.18.0 (#1603)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-08 23:22:16 +09:00
2ed949920f chore(i18n): Translated using Weblate (Ukrainian)
Currently translated at 100.0% (331 of 331 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/uk/
2024-01-08 14:06:18 +00:00
d76f4dade3 chore(i18n): Translated using Weblate (Ukrainian)
Currently translated at 100.0% (331 of 331 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/uk/
2024-01-08 14:06:17 +00:00
aacd01ce7c chore(i18n): Translated using Weblate (Ukrainian)
Currently translated at 100.0% (331 of 331 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/uk/
2024-01-08 14:06:16 +00:00
d501b016fc chore(i18n): Translated using Weblate (Turkish)
Currently translated at 100.0% (331 of 331 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/tr/
2024-01-08 14:06:14 +00:00
b1503cfb87 chore(deps): update dependency electron-vite to v2.0.0-beta.4 (#1602)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-07 04:19:01 +09:00
8a004ae9dd chore(i18n): Translated using Weblate (Spanish)
Currently translated at 100.0% (331 of 331 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/es/
2024-01-06 18:06:15 +01:00
de709cc7c9 fix: download/pip button for podcast video 2024-01-06 11:05:15 +09:00
6b7c43925a feat: rename IPC 2024-01-06 10:17:40 +09:00
5d5cc58f59 chore(tuna-obs): set keepAlive to true for reuse TCP socket 2024-01-06 09:37:47 +09:00
3e6bab7f15 fix(in-app-menu): fix invalid margin-top
fix #1597
2024-01-06 09:15:57 +09:00
7e17a8b73b fix(README): fix plugins path
fix #1598
2024-01-06 09:03:42 +09:00
129b798d8f chore(README): add demo image 2024-01-06 06:00:07 +09:00
a3a411e197 fix(config): fix duplicated array value 2024-01-06 01:07:57 +09:00
6e6acd6f19 Update changelog for v3.2.2 2024-01-05 14:44:33 +00:00
244 changed files with 34563 additions and 8228 deletions

View File

@ -1 +0,0 @@
.eslintrc.js

View File

@ -1,80 +0,0 @@
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: {},
},
},
};

View File

@ -26,9 +26,10 @@ body:
required: true
- type: checkboxes
attributes:
label: Are you using the portable version of the YouTube Music Application?
label: Checklists
options:
- label: I use the portable version of the YouTube Music Application.
- label: I can reproduce this issue in the [official version of (WEB) YTM](https://music.youtube.com).
- type: dropdown
attributes:
label: What operating system are you using?
@ -49,7 +50,7 @@ body:
required: true
- type: dropdown
attributes:
label: What arch are you using?
label: What CPU architecture are you using?
options:
- x64
- ia32

View File

@ -15,7 +15,7 @@ body:
- 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.
description: A clear and concise description of the problem you are seeking to solve with this feature request.
validations:
required: true
- type: textarea
@ -33,6 +33,6 @@ body:
- type: textarea
attributes:
label: Additional Information
description: Add any other context about the problem here.
description: Any other context about the problem.
validations:
required: false

View File

@ -21,9 +21,9 @@ jobs:
- uses: actions/checkout@v4
- name: Install pnpm
uses: pnpm/action-setup@v2
uses: pnpm/action-setup@v4
with:
version: 8
version: 9
run_install: false
- name: Setup NodeJS
@ -61,6 +61,13 @@ jobs:
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
sudo snap install snapcraft --classic
sudo apt update
sudo apt install -y flatpak flatpak-builder
sudo flatpak remote-add --if-not-exists --system flathub https://flathub.org/repo/flathub.flatpakrepo
sudo flatpak install -y flathub org.freedesktop.Platform/x86_64/24.08
sudo flatpak install -y flathub org.freedesktop.Sdk/x86_64/24.08
sudo flatpak install -y flathub org.electronjs.Electron2.BaseApp/x86_64/24.08
pnpm release:linux
- name: Build and release on Windows
@ -89,9 +96,9 @@ jobs:
fetch-depth: 0
- name: Install pnpm
uses: pnpm/action-setup@v2
uses: pnpm/action-setup@v4
with:
version: 8
version: 9
run_install: false
- name: Setup NodeJS

View File

@ -17,4 +17,4 @@ jobs:
- name: "Checkout Repository"
uses: actions/checkout@v4
- name: "Dependency Review"
uses: actions/dependency-review-action@v3
uses: actions/dependency-review-action@v4

260
README.md
View File

@ -1,10 +1,10 @@
# YouTube Music
<div align="center">
# YouTube Music
[![GitHub release](https://img.shields.io/github/release/th-ch/youtube-music.svg?style=for-the-badge&logo=youtube-music)](https://github.com/th-ch/youtube-music/releases/)
[![GitHub license](https://img.shields.io/github/license/th-ch/youtube-music.svg?style=for-the-badge)](https://github.com/th-ch/youtube-music/blob/master/LICENSE)
[![eslint code style](https://img.shields.io/badge/code_style-eslint-5ed9c7.svg?style=for-the-badge)](https://github.com/th-ch/youtube-music/blob/master/.eslintrc.js)
[![eslint code style](https://img.shields.io/badge/code_style-eslint-5ed9c7.svg?style=for-the-badge)](https://github.com/th-ch/youtube-music/blob/master/eslint.config.mjs)
[![Build status](https://img.shields.io/github/actions/workflow/status/th-ch/youtube-music/build.yml?branch=master&style=for-the-badge&logo=youtube-music)](https://GitHub.com/th-ch/youtube-music/releases/)
[![GitHub All Releases](https://img.shields.io/github/downloads/th-ch/youtube-music/total?style=for-the-badge&logo=youtube-music)](https://GitHub.com/th-ch/youtube-music/releases/)
[![AUR](https://img.shields.io/aur/version/youtube-music-bin?color=blueviolet&style=for-the-badge&logo=youtube-music)](https://aur.archlinux.org/packages/youtube-music-bin)
@ -12,7 +12,8 @@
</div>
![Screenshot](web/screenshot.jpg "Screenshot")
![Screenshot](web/screenshot.png "Screenshot")
<div align="center">
<a href="https://github.com/th-ch/youtube-music/releases/latest">
@ -20,7 +21,7 @@
</a>
</div>
Read this in other languages: [🇰🇷](./docs/readme/README-ko.md)
Read this in other languages: [🇰🇷](./docs/readme/README-ko.md), [🇮🇸](./docs/readme/README-is.md), [🇨🇱 🇪🇸](./docs/readme/README-es.md), [🇷🇺](./docs/readme/README-ru.md)
**Electron wrapper around YouTube Music featuring:**
@ -28,6 +29,141 @@ Read this in other languages: [🇰🇷](./docs/readme/README-ko.md)
- Framework for custom plugins: change YouTube Music to your needs (style, content, features), enable/disable plugins in
one click
## Demo Image
| Player Screen (album color theme & ambient light) |
|:---------------------------------------------------------------------------------------------------------:|
|![Screenshot1](https://github.com/th-ch/youtube-music/assets/16558115/53efdf73-b8fa-4d7b-a235-b96b91ea77fc)|
## Content
- [Features](#features)
- [Available plugins](#available-plugins)
- [Translation](#translation)
- [Download](#download)
- [Arch Linux](#arch-linux)
- [MacOS](#macos)
- [Windows](#windows)
- [How to install without a network connection? (in Windows)](#how-to-install-without-a-network-connection-in-windows)
- [Themes](#themes)
- [Dev](#dev)
- [Build your own plugins](#build-your-own-plugins)
- [Creating a plugin](#creating-a-plugin)
- [Common use cases](#common-use-cases)
- [Build](#build)
- [Production Preview](#production-preview)
- [Tests](#tests)
- [License](#license)
- [FAQ](#faq)
## Features:
- **Auto confirm when paused** (Always Enabled): disable
the ["Continue Watching?"](https://user-images.githubusercontent.com/61631665/129977894-01c60740-7ec6-4bf0-9a2c-25da24491b0e.png)
popup that pause music after a certain time
- And more ...
## Available plugins:
- **Ad Blocker**: Block all ads and tracking out of the box
- **Album Actions**: Adds Undislike, Dislike, Like, and Unlike buttons to apply this to all songs in a playlist or album
- **Album Color Theme**: Applies a dynamic theme and visual effects based on the album color palette
- **Ambient Mode**: Applies a lighting effect by casting gentle colors from the video, into your screens background
- **Audio Compressor**: Apply compression to audio (lowers the volume of the loudest parts of the signal and raises the
volume of the softest parts)
- **Blur Navigation Bar**: makes navigation bar transparent and blurry
- **Bypass Age Restrictions**: bypass YouTube's age verification
- **Captions Selector**: Enable captions
- **Compact Sidebar**: Always set the sidebar in compact mode
- **Crossfade**: Crossfade between songs
- **Disable Autoplay**: Makes every song start in "paused" mode
- **[Discord](https://discord.com/) Rich Presence**: Show your friends what you listen to
with [Rich Presence](https://user-images.githubusercontent.com/28219076/104362104-a7a0b980-5513-11eb-9744-bb89eabe0016.png)
- **Downloader**: downloads
MP3 [directly from the interface](https://user-images.githubusercontent.com/61631665/129977677-83a7d067-c192-45e1-98ae-b5a4927393be.png) [(youtube-dl)](https://github.com/ytdl-org/youtube-dl)
- **Equalizer**: add filters to boost or cut specific range of frequencies (e.g. bass booster)
- **Exponential Volume**: Makes the volume
slider [exponential](https://greasyfork.org/en/scripts/397686-youtube-music-fix-volume-ratio/) so it's easier to
select lower volumes
- **In-App Menu**: [gives bars a fancy, dark look](https://user-images.githubusercontent.com/78568641/112215894-923dbf00-8c29-11eb-95c3-3ce15db27eca.png)
> (see [this post](https://github.com/th-ch/youtube-music/issues/410#issuecomment-952060709) if you have problem
accessing the menu after enabling this plugin and hide-menu option)
- **Scrobbler**: Adds scrobbling support for [Last.fm](https://www.last.fm/) and [ListenBrainz](https://listenbrainz.org/)
- **Lumia Stream**: Adds [Lumia Stream](https://lumiastream.com/) support
- **Lyrics Genius**: Adds lyrics support for most songs
- **Music Together**: Share a playlist with others. When the host plays a song, everyone else will hear the same song
- **Navigation**: Next/Back navigation arrows directly integrated in the interface, like in your favorite browser
- **No Google Login**: Remove Google login buttons and links from the interface
- **Notifications**: Display a notification when a song starts
playing ([interactive notifications](https://user-images.githubusercontent.com/78568641/114102651-63ce0e00-98d0-11eb-9dfe-c5a02bb54f9c.png)
are available on windows)
- **Picture-in-picture**: allows to switch the app to picture-in-picture mode
- **Playback Speed**: Listen fast, listen
slow! [Adds a slider that controls song speed](https://user-images.githubusercontent.com/61631665/129976003-e55db5ba-bf42-448c-a059-26a009775e68.png)
- **Precise Volume**: Control the volume precisely using mousewheel/hotkeys, with a custom hud and customizable volume
steps
- **Shortcuts (& MPRIS)**: Allows setting global hotkeys for playback (play/pause/next/previous) +
disable [media osd](https://user-images.githubusercontent.com/84923831/128601225-afa38c1f-dea8-4209-9f72-0f84c1dd8b54.png)
by overriding media keys + enable Ctrl/CMD + F to search + enable linux mpris support for
mediakeys + [custom hotkeys](https://github.com/Araxeus/youtube-music/blob/1e591d6a3df98449bcda6e63baab249b28026148/providers/song-controls.js#L13-L50)
for [advanced users](https://github.com/th-ch/youtube-music/issues/106#issuecomment-952156902)
- **Skip Disliked Song**: Skips disliked songs
- **Skip Silences**: Automatically skip silenced sections
- [**SponsorBlock**](https://github.com/ajayyy/SponsorBlock): Automatically Skips non-music parts like intro/outro or
parts of music videos where the song isn't playing
- **Synced Lyrics**: Provides synced lyrics to songs, using providers like [LRClib](https://lrclib.net).
- **Taskbar Media Control**: Control playback from
your [Windows taskbar](https://user-images.githubusercontent.com/78568641/111916130-24a35e80-8a82-11eb-80c8-5021c1aa27f4.png)
- **TouchBar**: Custom TouchBar layout for macOS
- **Tuna OBS**: Integration with [OBS](https://obsproject.com/)'s
plugin [Tuna](https://obsproject.com/forum/resources/tuna.843/)
- **Video Quality Changer**: Allows changing the video quality with
a [button](https://user-images.githubusercontent.com/78568641/138574366-70324a5e-2d64-4f6a-acdd-dc2a2b9cecc5.png) on
the video overlay
- **Video Toggle**: Adds
a [button](https://user-images.githubusercontent.com/28893833/173663950-63e6610e-a532-49b7-9afa-54cb57ddfc15.png) to
switch between Video/Song mode. can also optionally remove the whole video tab
- **Visualizer**: Different music visualizers
## Translation
You can help with translation on [Hosted Weblate](https://hosted.weblate.org/projects/youtube-music/).
@ -44,10 +180,10 @@ latest version.
### Arch Linux
Install the `youtube-music-bin` package from the AUR. For AUR installation instructions, take a look at
Install the [`youtube-music-bin`](https://aur.archlinux.org/packages/youtube-music-bin) package from the AUR. For AUR installation instructions, take a look at
this [wiki page](https://wiki.archlinux.org/index.php/Arch_User_Repository#Installing_packages).
### MacOS
### macOS
You can install the app using Homebrew (see the [cask definition](https://github.com/th-ch/homebrew-youtube-music)):
@ -58,7 +194,7 @@ brew install th-ch/youtube-music/youtube-music
If you install the app manually and get an error "is damaged and cant be opened." when launching the app, run the following in the Terminal:
```bash
xattr -cr /Applications/YouTube\ Music.app
/usr/bin/xattr -cr /Applications/YouTube\ Music.app
```
### Windows
@ -92,103 +228,6 @@ winget install th-ch.YouTubeMusic
- 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 screens 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).
@ -213,7 +252,7 @@ Using plugins, you can:
### Creating a plugin
Create a folder in `plugins/YOUR-PLUGIN-NAME`:
Create a folder in `src/plugins/YOUR-PLUGIN-NAME`:
- `index.ts`: the main file of the plugin
```typescript
@ -331,8 +370,11 @@ export default createPlugin({
4. Run `pnpm build:OS`
- `pnpm dist:win` - Windows
- `pnpm dist:linux` - Linux
- `pnpm dist:mac` - MacOS
- `pnpm dist:linux` - Linux (amd64)
- `pnpm dist:linux:deb-arm64` - Linux (arm64 for Debian)
- `pnpm dist:linux:rpm-arm64` - Linux (arm64 for Fedora)
- `pnpm dist:mac` - macOS (amd64)
- `pnpm dist:mac:arm64` - macOS (arm64)
Builds the app for macOS, Linux, and Windows,
using [electron-builder](https://github.com/electron-userland/electron-builder).
@ -355,7 +397,7 @@ Uses [Playwright](https://playwright.dev/) to test the app.
MIT © [th-ch](https://github.com/th-ch/youtube-music)
## Most asked questions
## FAQ
### Why apps menu isn't showing up?

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -2,8 +2,632 @@
All notable changes to this project will be documented in this file. Dates are displayed in UTC.
#### [v3.6.2](https://github.com/th-ch/youtube-music/compare/v3.6.1...v3.6.2)
- fix(deps): update dependency serve to v14.2.4 [`#2515`](https://github.com/th-ch/youtube-music/pull/2515)
- fix(deps): update dependency hono to v4.6.5 [`#2509`](https://github.com/th-ch/youtube-music/pull/2509)
- chore(deps): update dependency vite to v5.4.9 [`#2500`](https://github.com/th-ch/youtube-music/pull/2500)
- fix(api-server): properly implement next api call [`#2505`](https://github.com/th-ch/youtube-music/pull/2505)
- chore(deps): update dependency electron to v33 [`#2507`](https://github.com/th-ch/youtube-music/pull/2507)
- chore(deps): update dependency typescript-eslint to v8.9.0 [`#2503`](https://github.com/th-ch/youtube-music/pull/2503)
- chore(deps): update dependency discord-api-types to v0.37.102 [`#2501`](https://github.com/th-ch/youtube-music/pull/2501)
- fix: trustedTypes issue [`#2339`](https://github.com/th-ch/youtube-music/issues/2339)
- chore(i18n): Translated using Weblate (Icelandic) [`5f79b7e`](https://github.com/th-ch/youtube-music/commit/5f79b7e788c47b0a27a4967c9f3a9e20b483cd75)
- chore(i18n): Translated using Weblate (Chinese (Traditional Han script)) [`12d6939`](https://github.com/th-ch/youtube-music/commit/12d693921e26a5c54015673a404e005d1a7175a4)
- chore(i18n): Translated using Weblate (Ukrainian) [`836cedb`](https://github.com/th-ch/youtube-music/commit/836cedb0f317b74bf2fc3ec2d1aa865719f46ec0)
#### [v3.6.1](https://github.com/th-ch/youtube-music/compare/v3.6.0...v3.6.1)
> 14 October 2024
- fix(api-server): Various fixes and improvements [`#2496`](https://github.com/th-ch/youtube-music/pull/2496)
- fix(deps): update dependency electron-debug to v4.1.0 [`#2499`](https://github.com/th-ch/youtube-music/pull/2499)
- fix(renderer): fix force like buttons display logic [`#2493`](https://github.com/th-ch/youtube-music/pull/2493)
- fix(deps): update dependency i18next to v23.16.0 [`#2492`](https://github.com/th-ch/youtube-music/pull/2492)
- fix(downloader): fix #2371 [`#2371`](https://github.com/th-ch/youtube-music/issues/2371)
- fix(ytm-bugs): incorrect video ratio [`#2459`](https://github.com/th-ch/youtube-music/issues/2459)
- fix(api-server): fix init/authentication error [`#2497`](https://github.com/th-ch/youtube-music/issues/2497)
- fix: RSS feed CORS issue [`#1620`](https://github.com/th-ch/youtube-music/issues/1620)
- chore(flatpak-builder): Add more details when failing [`d3acb49`](https://github.com/th-ch/youtube-music/commit/d3acb4945a8dcde6598c53d8207bbf16eda8c739)
- chore(i18n): Translated using Weblate (Filipino) [`e428708`](https://github.com/th-ch/youtube-music/commit/e4287085a11f30d141148ab0432cc684819fd0d0)
- Bump version to 3.6.1 [`b668730`](https://github.com/th-ch/youtube-music/commit/b6687307dfe7ef765517019093c8db3c2ad14417)
#### [v3.6.0](https://github.com/th-ch/youtube-music/compare/v3.5.3...v3.6.0)
> 13 October 2024
- feat(api-server): remote control api [`#1909`](https://github.com/th-ch/youtube-music/pull/1909)
- chore(deps): update playwright monorepo to v1.48.0 [`#2489`](https://github.com/th-ch/youtube-music/pull/2489)
- fix(`synced-lyrics`): Fix 2 issues [`#2441`](https://github.com/th-ch/youtube-music/pull/2441)
- chore(deps): update dependency typescript to v5.6.3 [`#2486`](https://github.com/th-ch/youtube-music/pull/2486)
- chore(deps): update dependency electron to v32.2.0 [`#2487`](https://github.com/th-ch/youtube-music/pull/2487)
- chore(deps): update dependency del-cli to v6 [`#2475`](https://github.com/th-ch/youtube-music/pull/2475)
- chore(deps): update dependency typescript-eslint to v8.8.1 [`#2477`](https://github.com/th-ch/youtube-music/pull/2477)
- fix(deps): update dependency solid-js to v1.9.2 [`#2480`](https://github.com/th-ch/youtube-music/pull/2480)
- Revert "chore(deps): update dependency electron-builder to v25" [`#2488`](https://github.com/th-ch/youtube-music/pull/2488)
- chore(deps): update dependency electron-builder to v25 [`#2406`](https://github.com/th-ch/youtube-music/pull/2406)
- fix(deps): update dependency deepmerge-ts to v7.1.3 [`#2481`](https://github.com/th-ch/youtube-music/pull/2481)
- fix(deps): update dependency ts-morph to v24 [`#2474`](https://github.com/th-ch/youtube-music/pull/2474)
- fix(deps): update dependency i18next to v23.15.2 [`#2471`](https://github.com/th-ch/youtube-music/pull/2471)
- chore(deps): update eslint monorepo to v9.12.0 [`#2470`](https://github.com/th-ch/youtube-music/pull/2470)
- chore(deps): update dependency @stylistic/eslint-plugin-js to v2.9.0 [`#2469`](https://github.com/th-ch/youtube-music/pull/2469)
- chore(deps): bump micromatch from 4.0.5 to 4.0.8 [`#2465`](https://github.com/th-ch/youtube-music/pull/2465)
- chore(deps): bump braces from 3.0.2 to 3.0.3 [`#2466`](https://github.com/th-ch/youtube-music/pull/2466)
- fix(deps): update dependency electron-updater to v6.3.9 [`#2468`](https://github.com/th-ch/youtube-music/pull/2468)
- fix(deps): update dependency deepmerge-ts to v7.1.1 [`#2467`](https://github.com/th-ch/youtube-music/pull/2467)
- chore(deps): update dependency typescript-eslint to v8.8.0 [`#2457`](https://github.com/th-ch/youtube-music/pull/2457)
- chore(deps): update dependency @babel/runtime to v7.25.7 [`#2462`](https://github.com/th-ch/youtube-music/pull/2462)
- chore(deps): update dependency rollup to v4.24.0 [`#2458`](https://github.com/th-ch/youtube-music/pull/2458)
- chore(deps): update dependency eslint-plugin-import to v2.31.0 [`#2464`](https://github.com/th-ch/youtube-music/pull/2464)
- chore(deps): update dependency rollup to v4.22.5 [`#2448`](https://github.com/th-ch/youtube-music/pull/2448)
- chore(deps): update dependency typescript-eslint to v8.7.0 [`#2450`](https://github.com/th-ch/youtube-music/pull/2450)
- fix(deps): update dependency solid-js to v1.9.1 [`#2451`](https://github.com/th-ch/youtube-music/pull/2451)
- chore(deps): update dependency vite to v5.4.8 [`#2449`](https://github.com/th-ch/youtube-music/pull/2449)
- chore(deps): update dependency discord-api-types to v0.37.101 [`#2440`](https://github.com/th-ch/youtube-music/pull/2440)
- chore(deps): update dependency esbuild to v0.24.0 [`#2439`](https://github.com/th-ch/youtube-music/pull/2439)
- chore(deps): update eslint monorepo to v9.11.1 [`#2442`](https://github.com/th-ch/youtube-music/pull/2442)
- chore(deps): update dependency @types/howler to v2.2.12 [`#2443`](https://github.com/th-ch/youtube-music/pull/2443)
- chore(deps): update dependency vite to v5.4.7 [`#2434`](https://github.com/th-ch/youtube-music/pull/2434)
- chore(deps): update playwright monorepo to v1.47.2 [`#2436`](https://github.com/th-ch/youtube-music/pull/2436)
- chore(deps): update eslint monorepo to v9.11.0 [`#2437`](https://github.com/th-ch/youtube-music/pull/2437)
- fix(deps): update dependency youtubei.js to v10.5.0 [`#2431`](https://github.com/th-ch/youtube-music/pull/2431)
- chore(deps): update dependency rollup to v4.22.4 [`#2430`](https://github.com/th-ch/youtube-music/pull/2430)
- chore(deps): update dependency electron to v32.1.2 [`#2433`](https://github.com/th-ch/youtube-music/pull/2433)
- feat: ESLint Flat Config (v9 support #2229) [`#2426`](https://github.com/th-ch/youtube-music/pull/2426)
- fix(taskbar-mediacontrol): fix icon color [`#2485`](https://github.com/th-ch/youtube-music/issues/2485)
- chore(eslint): apply eslint-plugin-prettier [`#2438`](https://github.com/th-ch/youtube-music/issues/2438)
- fix: apply fix from eslint [`cb1381b`](https://github.com/th-ch/youtube-music/commit/cb1381bbb394e2bbb404f44817ef96411dabc8a9)
- chore(i18n): Translated using Weblate (Portuguese (Brazil)) [`bcff26c`](https://github.com/th-ch/youtube-music/commit/bcff26c85b18258806f3960309776bc860c3a54e)
- chore(i18n): Translated using Weblate (Persian) [`ead448e`](https://github.com/th-ch/youtube-music/commit/ead448ed98095339557903eb0f84c4a6d0f32058)
#### [v3.5.3](https://github.com/th-ch/youtube-music/compare/v3.5.2...v3.5.3)
> 17 September 2024
- fix: fix `trustedHTML` issue [`#2339`](https://github.com/th-ch/youtube-music/issues/2339)
- chore(deps): update dependency rollup to v4.21.3 [`6edc84a`](https://github.com/th-ch/youtube-music/commit/6edc84a8bd6c7e009041117ba0d2004783eb3a47)
- chore(deps): update typescript-eslint monorepo to v8.6.0 [`d4c8a43`](https://github.com/th-ch/youtube-music/commit/d4c8a4320d733f7bddc4dcd1de93644790e71d66)
- chore(deps): update dependency eslint to v8.57.1 [`02b7a39`](https://github.com/th-ch/youtube-music/commit/02b7a39753528cfd8c0d107d6d2ec6ef78c5afe7)
#### [v3.5.2](https://github.com/th-ch/youtube-music/compare/v3.5.1...v3.5.2)
> 7 September 2024
- chore(deps): update typescript-eslint monorepo to v8.4.0 [`#2401`](https://github.com/th-ch/youtube-music/pull/2401)
- chore(deps): update dependency @total-typescript/ts-reset to v0.6.1 [`#2396`](https://github.com/th-ch/youtube-music/pull/2396)
- chore(deps): update dependency electron to v31.5.0 [`#2397`](https://github.com/th-ch/youtube-music/pull/2397)
- chore(deps): update dependency eslint-import-resolver-typescript to v3.6.3 [`#2376`](https://github.com/th-ch/youtube-music/pull/2376)
- chore(deps): update dependency discord-api-types to v0.37.100 [`#2394`](https://github.com/th-ch/youtube-music/pull/2394)
- fix(deps): update dependency electron-updater to v6.3.4 [`#2395`](https://github.com/th-ch/youtube-music/pull/2395)
- chore(deps): update dependency @babel/runtime to v7.25.6 [`#2388`](https://github.com/th-ch/youtube-music/pull/2388)
- chore(deps): update dependency vite-plugin-inspect to v0.8.7 [`#2389`](https://github.com/th-ch/youtube-music/pull/2389)
- chore(deps): update dependency discord-api-types to v0.37.99 [`#2374`](https://github.com/th-ch/youtube-music/pull/2374)
- chore(deps): update dependency vite to v5.4.3 [`#2377`](https://github.com/th-ch/youtube-music/pull/2377)
- fix: incorrect regex when splitting artistName [`#2378`](https://github.com/th-ch/youtube-music/pull/2378)
- chore(deps): update dependency @babel/runtime to v7.25.4 [`#2373`](https://github.com/th-ch/youtube-music/pull/2373)
- synced-lyrics: make the lyrics search more reliable [`#2343`](https://github.com/th-ch/youtube-music/pull/2343)
- fix(deps): update dependency solid-js to v1.8.22 [`#2354`](https://github.com/th-ch/youtube-music/pull/2354)
- chore(deps): update typescript-eslint monorepo to v8.3.0 [`#2350`](https://github.com/th-ch/youtube-music/pull/2350)
- fix(deps): update dependency electron-debug to v4.0.1 [`#2349`](https://github.com/th-ch/youtube-music/pull/2349)
- chore(deps): update dependency electron to v31.4.0 [`#2356`](https://github.com/th-ch/youtube-music/pull/2356)
- fix: hide native-controls on linux when in-app-menu is used [`#2366`](https://github.com/th-ch/youtube-music/pull/2366)
- fix: detect the upgrade btn using the icon [`#2364`](https://github.com/th-ch/youtube-music/pull/2364)
- fix: exclude build-id files from rpm [`#2361`](https://github.com/th-ch/youtube-music/pull/2361)
- fix(deps): update dependency i18next to v23.12.3 [`#2352`](https://github.com/th-ch/youtube-music/pull/2352)
- fix(deps): update dependency @floating-ui/dom to v1.6.10 [`#2340`](https://github.com/th-ch/youtube-music/pull/2340)
- fix(deps): update dependency electron-updater to v6.3.3 [`#2347`](https://github.com/th-ch/youtube-music/pull/2347)
- fix(deps): update dependency solid-js to v1.8.20 [`#2345`](https://github.com/th-ch/youtube-music/pull/2345)
- chore(deps): update dependency vite to v5.4.0 [`#2342`](https://github.com/th-ch/youtube-music/pull/2342)
- chore(deps): update typescript-eslint monorepo to v8.0.1 [`#2335`](https://github.com/th-ch/youtube-music/pull/2335)
- fix(deps): update dependency @floating-ui/dom to v1.6.9 [`#2337`](https://github.com/th-ch/youtube-music/pull/2337)
- chore(deps): update playwright monorepo to v1.46.0 [`#2336`](https://github.com/th-ch/youtube-music/pull/2336)
- chore(README): Translation README to Russian and adding Synced Lyrics to main README [`#2338`](https://github.com/th-ch/youtube-music/pull/2338)
- chore(deps): update dependency rollup to v4.20.0 [`#2326`](https://github.com/th-ch/youtube-music/pull/2326)
- fix(synced-lyric): fix timestamp [`#2323`](https://github.com/th-ch/youtube-music/issues/2323) [`#2379`](https://github.com/th-ch/youtube-music/issues/2379)
- Revert "fix(MPRIS): Prevents player to start with invalid MPRIS interface (#1996)" [`#2225`](https://github.com/th-ch/youtube-music/issues/2225)
- fix(adblocker/inplayer): fix Response.prototype.json [`#2310`](https://github.com/th-ch/youtube-music/issues/2310)
- chore(deps): update dependency eslint-plugin-import to v2.30.0 [`f48e46d`](https://github.com/th-ch/youtube-music/commit/f48e46d29cf09c76c5172fd56d2d0f705616e4e3)
- Revert "chore(deps): update dependency electron-builder to v25" [`089eff3`](https://github.com/th-ch/youtube-music/commit/089eff3152903c8b55ad3e5571b944062a647e27)
- chore(deps): update dependency electron-builder to v25 [`fe4c89c`](https://github.com/th-ch/youtube-music/commit/fe4c89c349bb9f4f54d95c2018943095ccfdab0c)
#### [v3.5.1](https://github.com/th-ch/youtube-music/compare/v3.5.0...v3.5.1)
> 1 August 2024
- fix(deps): update dependency youtubei.js to v10.3.0 [`#2306`](https://github.com/th-ch/youtube-music/pull/2306)
- fix: Window gets stuck offscreen in some instances [`#2303`](https://github.com/th-ch/youtube-music/pull/2303)
- fix: Incorrect window size on multi-monitor scaled displays [`#2302`](https://github.com/th-ch/youtube-music/pull/2302)
- chore(deps): update dependency rollup to v4.19.2 [`#2304`](https://github.com/th-ch/youtube-music/pull/2304)
- chore(deps): update typescript-eslint monorepo to v8 (major) [`#2297`](https://github.com/th-ch/youtube-music/pull/2297)
- fix(ambient-mode): fix ambient-mode not working for videos after restart [`#2294`](https://github.com/th-ch/youtube-music/pull/2294)
- fix(deps): update dependency @xhayper/discord-rpc to v1.2.0 [`#2291`](https://github.com/th-ch/youtube-music/pull/2291)
- fix(synced-lyrics): fix lyric load [`#2295`](https://github.com/th-ch/youtube-music/issues/2295)
- fix(ambient-mode): fix ambient-mode not working for videos after restart (#2294) [`#1641`](https://github.com/th-ch/youtube-music/issues/1641)
- fix(synced-lyrics): fix i18n [`8750b54`](https://github.com/th-ch/youtube-music/commit/8750b54f766c735ff039c6be454427f17d4737e2)
- ts-fix: disambiguate ElectronStore typings [`8775735`](https://github.com/th-ch/youtube-music/commit/877573532c1b68af861a3fdc44d093f3097d36ab)
- chore(i18n): Translated using Weblate (Hungarian) [`3537dc1`](https://github.com/th-ch/youtube-music/commit/3537dc19eecce7f7deb2478942f70d3c7b72148d)
#### [v3.5.0](https://github.com/th-ch/youtube-music/compare/v3.4.1...v3.5.0)
> 31 July 2024
- plugin: Synced Lyrics [`#2207`](https://github.com/th-ch/youtube-music/pull/2207)
- chore(deps): update dependency electron to v31.3.1 [`#2290`](https://github.com/th-ch/youtube-music/pull/2290)
- chore(deps): update typescript-eslint monorepo to v7.18.0 [`#2292`](https://github.com/th-ch/youtube-music/pull/2292)
- fix(deps): update dependency youtubei.js to v10.2.0 [`#2285`](https://github.com/th-ch/youtube-music/pull/2285)
- chore(deps): update dependency electron to v31.3.0 [`#2282`](https://github.com/th-ch/youtube-music/pull/2282)
- chore(deps): update typescript-eslint monorepo to v7.17.0 [`#2283`](https://github.com/th-ch/youtube-music/pull/2283)
- fix(deps): update dependency solid-js to v1.8.19 [`#2280`](https://github.com/th-ch/youtube-music/pull/2280)
- fix(deps): update dependency @xhayper/discord-rpc to v1.1.4 [`#2279`](https://github.com/th-ch/youtube-music/pull/2279)
- chore(deps): update dependency @babel/runtime to v7.25.0 [`#2281`](https://github.com/th-ch/youtube-music/pull/2281)
- fix(deps): update dependency @floating-ui/dom to v1.6.8 [`#2278`](https://github.com/th-ch/youtube-music/pull/2278)
- Fix: Incorrect window size on scaled displays [`#2258`](https://github.com/th-ch/youtube-music/pull/2258)
- chore(deps): update dependency vite-plugin-resolve to v2.5.2 [`#2276`](https://github.com/th-ch/youtube-music/pull/2276)
- chore(deps): update playwright monorepo to v1.45.3 [`#2277`](https://github.com/th-ch/youtube-music/pull/2277)
- fix(deps): update dependency deepmerge-ts to v7.1.0 [`#2263`](https://github.com/th-ch/youtube-music/pull/2263)
- chore(deps): update dependency typescript to v5.5.4 [`#2274`](https://github.com/th-ch/youtube-music/pull/2274)
- chore(deps): update dependency vite to v5.3.5 [`#2275`](https://github.com/th-ch/youtube-music/pull/2275)
- fix(deps): update dependency i18next to v23.12.2 [`#2260`](https://github.com/th-ch/youtube-music/pull/2260)
- chore(deps): update dependency discord-api-types to v0.37.93 [`#2273`](https://github.com/th-ch/youtube-music/pull/2273)
- chore(deps): update dependency rollup to v4.19.1 [`#2261`](https://github.com/th-ch/youtube-music/pull/2261)
- fix(deps): update dependency custom-electron-prompt to v1.5.8 [`#2262`](https://github.com/th-ch/youtube-music/pull/2262)
- feat(adblocker): add new option AdSpeedup [`#2235`](https://github.com/th-ch/youtube-music/pull/2235)
- fix: disable multi-plane format for software video [`#2254`](https://github.com/th-ch/youtube-music/pull/2254)
- chore(deps): update dependency eslint-plugin-prettier to v5.2.1 [`#2253`](https://github.com/th-ch/youtube-music/pull/2253)
- chore(deps): update dependency vite to v5.3.4 [`#2243`](https://github.com/th-ch/youtube-music/pull/2243)
- chore(deps): update typescript-eslint monorepo to v7.16.1 [`#2239`](https://github.com/th-ch/youtube-music/pull/2239)
- chore(deps): update playwright monorepo to v1.45.2 [`#2244`](https://github.com/th-ch/youtube-music/pull/2244)
- chore(deps): update dependency vite-plugin-inspect to v0.8.5 [`#2252`](https://github.com/th-ch/youtube-music/pull/2252)
- fix(deps): update dependency semver to v7.6.3 [`#2250`](https://github.com/th-ch/youtube-music/pull/2250)
- chore(deps): update dependency electron to v31.2.1 [`#2241`](https://github.com/th-ch/youtube-music/pull/2241)
- chore(i18n): Translated using Weblate (Catalan) [`4a8440c`](https://github.com/th-ch/youtube-music/commit/4a8440c281c341977ab3687982cec8cbc5af6cf7)
- Update changelog for v3.4.1 [`18e0b1b`](https://github.com/th-ch/youtube-music/commit/18e0b1b86341b13f1cbc713bfbd7b5d7a45ee392)
- fix(synced-lyrics): fix type error [`9357a15`](https://github.com/th-ch/youtube-music/commit/9357a15116a8526d22ba6142c0a02f31688743f2)
#### [v3.4.1](https://github.com/th-ch/youtube-music/compare/v3.4.0...v3.4.1)
> 15 July 2024
- fix(mpris): fix mpris position [`#2225`](https://github.com/th-ch/youtube-music/issues/2225)
- fix(deb): fix depends [`#1983`](https://github.com/th-ch/youtube-music/issues/1983)
- fix: fix touchbar icon [`#2183`](https://github.com/th-ch/youtube-music/issues/2183)
- fix: fix "Starting page" [`#1822`](https://github.com/th-ch/youtube-music/issues/1822)
- fix: fix album actions [`#2202`](https://github.com/th-ch/youtube-music/issues/2202)
- fix: fix playback slider [`#2045`](https://github.com/th-ch/youtube-music/issues/2045)
- chore(i18n): Translated using Weblate (Spanish) [`91bee48`](https://github.com/th-ch/youtube-music/commit/91bee4880ed2c6fdd887814a2620877d89bea311)
- Bump version to 3.4.1 [`02e2fb6`](https://github.com/th-ch/youtube-music/commit/02e2fb6a83844f439f760e72cdcb935b86000df2)
#### [v3.4.0](https://github.com/th-ch/youtube-music/compare/v3.3.12...v3.4.0)
> 14 July 2024
- fix(deps): update dependency i18next to v23.12.1 [`#2230`](https://github.com/th-ch/youtube-music/pull/2230)
- feat(downloader): New option to download on finish [`#1964`](https://github.com/th-ch/youtube-music/pull/1964)
- chore(deps): update typescript-eslint monorepo to v8.0.0-alpha.42 [`#2228`](https://github.com/th-ch/youtube-music/pull/2228)
- chore(deps): update dependency eslint to v9.7.0 [`#2226`](https://github.com/th-ch/youtube-music/pull/2226)
- chore(deps): update dependency @babel/runtime to v7.24.8 [`#2221`](https://github.com/th-ch/youtube-music/pull/2221)
- chore(deps): update dependency node-gyp to v10.2.0 [`#2216`](https://github.com/th-ch/youtube-music/pull/2216)
- chore(deps): update dependency ws to v8.18.0 [`#2217`](https://github.com/th-ch/youtube-music/pull/2217)
- chore(deps): update dependency glob to v11 [`#2219`](https://github.com/th-ch/youtube-music/pull/2219)
- chore(deps): update dependency esbuild to v0.23.0 [`#2215`](https://github.com/th-ch/youtube-music/pull/2215)
- chore(deps): update dependency electron to v31.2.0 [`#2214`](https://github.com/th-ch/youtube-music/pull/2214)
- fix(deps): update dependency youtubei.js to v10.1.0 [`#2218`](https://github.com/th-ch/youtube-music/pull/2218)
- chore(deps): update playwright monorepo to v1.45.1 [`#2212`](https://github.com/th-ch/youtube-music/pull/2212)
- chore(deps): update typescript-eslint monorepo to v8.0.0-alpha.41 [`#2213`](https://github.com/th-ch/youtube-music/pull/2213)
- chore(deps): update dependency rollup to v4.18.1 [`#2210`](https://github.com/th-ch/youtube-music/pull/2210)
- chore(deps): update dependency eslint to v9.6.0 [`#2192`](https://github.com/th-ch/youtube-music/pull/2192)
- chore(deps): update dependency vite to v5.3.3 [`#2211`](https://github.com/th-ch/youtube-music/pull/2211)
- chore(deps): update dependency glob to v10.4.5 [`#2205`](https://github.com/th-ch/youtube-music/pull/2205)
- chore(deps): update dependency discord-api-types to v0.37.92 [`#2204`](https://github.com/th-ch/youtube-music/pull/2204)
- fix(deps): update dependency solid-js to v1.8.18 [`#2189`](https://github.com/th-ch/youtube-music/pull/2189)
- chore(deps): update dependency typescript to v5.5.3 [`#2206`](https://github.com/th-ch/youtube-music/pull/2206)
- chore(deps): update dependency electron to v31.1.0 [`#2190`](https://github.com/th-ch/youtube-music/pull/2190)
- chore(deps): update typescript-eslint monorepo to v8.0.0-alpha.40 [`#2193`](https://github.com/th-ch/youtube-music/pull/2193)
- fix(deps): update dependency @floating-ui/dom to v1.6.7 [`#2196`](https://github.com/th-ch/youtube-music/pull/2196)
- chore(deps): update dependency vite to v5.3.2 [`#2188`](https://github.com/th-ch/youtube-music/pull/2188)
- chore(deps): update dependency discord-api-types to v0.37.91 [`#2187`](https://github.com/th-ch/youtube-music/pull/2187)
- chore(deps): update typescript-eslint monorepo to v8.0.0-alpha.34 [`#2184`](https://github.com/th-ch/youtube-music/pull/2184)
- fix(deps): update dependency @floating-ui/dom to v1.6.6 [`#2182`](https://github.com/th-ch/youtube-music/pull/2182)
- chore(deps): update playwright monorepo to v1.45.0 [`#2181`](https://github.com/th-ch/youtube-music/pull/2181)
- fix(deps): update dependency ts-morph to v23 [`#2180`](https://github.com/th-ch/youtube-music/pull/2180)
- chore(deps): update dependency electron-vite to v2.3.0 [`#2178`](https://github.com/th-ch/youtube-music/pull/2178)
- fix(deps): update dependency conf to v13.0.1 [`#2175`](https://github.com/th-ch/youtube-music/pull/2175)
- chore(deps): update dependency glob to v10.4.2 [`#2168`](https://github.com/th-ch/youtube-music/pull/2168)
- chore(deps): update dependency discord-api-types to v0.37.90 [`#2167`](https://github.com/th-ch/youtube-music/pull/2167)
- chore(deps): update dependency typescript to v5.5.2 [`#2173`](https://github.com/th-ch/youtube-music/pull/2173)
- chore(deps): update dependency electron to v31.0.2 [`#2170`](https://github.com/th-ch/youtube-music/pull/2170)
- chore(deps): update dependency ws to v8.17.1 [`#2164`](https://github.com/th-ch/youtube-music/pull/2164)
- chore(deps): update dependency eslint to v9.5.0 [`#2162`](https://github.com/th-ch/youtube-music/pull/2162)
- fix(deps): update dependency youtubei.js to v10 [`#2136`](https://github.com/th-ch/youtube-music/pull/2136)
- chore(deps): update dependency discord-api-types to v0.37.89 [`#2153`](https://github.com/th-ch/youtube-music/pull/2153)
- chore(deps): update dependency vite to v5.3.1 [`#2154`](https://github.com/th-ch/youtube-music/pull/2154)
- fix(deps): update dependency electron-store to v10 [`#2157`](https://github.com/th-ch/youtube-music/pull/2157)
- fix(deps): update dependency conf to v13 [`#2156`](https://github.com/th-ch/youtube-music/pull/2156)
- chore(deps): update dependency electron to v31.0.1 [`#2148`](https://github.com/th-ch/youtube-music/pull/2148)
- chore(deps): update dependency discord-api-types to v0.37.88 [`#2138`](https://github.com/th-ch/youtube-music/pull/2138)
- chore(deps): update typescript-eslint monorepo to v8.0.0-alpha.30 [`#2139`](https://github.com/th-ch/youtube-music/pull/2139)
- chore(deps): update dependency electron to v31 [`#2141`](https://github.com/th-ch/youtube-music/pull/2141)
- chore(deps): update dependency esbuild to v0.21.5 [`#2135`](https://github.com/th-ch/youtube-music/pull/2135)
- chore(deps): update typescript-eslint monorepo to v8.0.0-alpha.29 [`#2132`](https://github.com/th-ch/youtube-music/pull/2132)
- fix: rollback eslint version to v8 [`45931a2`](https://github.com/th-ch/youtube-music/commit/45931a25b08ab8a406f9e102486585311fd14bf9)
- chore(i18n): Translated using Weblate (Filipino) [`8a20566`](https://github.com/th-ch/youtube-music/commit/8a20566e0f2736f72d46282188ada69df1d7076a)
- chore(i18n): Translated using Weblate (Slovenian) [`40f0b9b`](https://github.com/th-ch/youtube-music/commit/40f0b9b852dcd9146e1c1e6c741b5baaf55ac079)
#### [v3.3.12](https://github.com/th-ch/youtube-music/compare/v3.3.11...v3.3.12)
> 8 June 2024
- hotfix: Revert "chore(deps): update dependencies `@cliqz/adblocker-electron`, `@cliqz/adblocker-electron-preload`" [`3c4abc1`](https://github.com/th-ch/youtube-music/commit/3c4abc14187e51f7e47c1ae71b3513f6d8c9912a)
- Update changelog for v3.3.11 [`de22444`](https://github.com/th-ch/youtube-music/commit/de224444c2a6d9030aa22a3b263ceacbc4b41914)
- Bump version to 3.3.12 [`89ed7d2`](https://github.com/th-ch/youtube-music/commit/89ed7d2345001fea59514944f4c1d56d2b7bd888)
#### [v3.3.11](https://github.com/th-ch/youtube-music/compare/v3.3.10...v3.3.11)
> 8 June 2024
- Revert "fix(deps): update dependency @cliqz/adblocker-electron to v1.27.10" [`#2129`](https://github.com/th-ch/youtube-music/pull/2129)
- chore(deps): update dependency vite to v5.2.13 [`#2127`](https://github.com/th-ch/youtube-music/pull/2127)
- chore(deps): update dependency electron to v30.1.0 [`#2126`](https://github.com/th-ch/youtube-music/pull/2126)
- fix(deps): update dependency deepmerge-ts to v7.0.3 [`#2125`](https://github.com/th-ch/youtube-music/pull/2125)
- chore(deps): update dependency @babel/runtime to v7.24.7 [`#2124`](https://github.com/th-ch/youtube-music/pull/2124)
- chore(deps): update typescript-eslint monorepo to v8.0.0-alpha.28 [`#2121`](https://github.com/th-ch/youtube-music/pull/2121)
- fix(deps): update dependency electron-updater to v6.2.1 [`#2120`](https://github.com/th-ch/youtube-music/pull/2120)
- chore(deps): update dependency discord-api-types to v0.37.87 [`#2119`](https://github.com/th-ch/youtube-music/pull/2119)
- fix(deps): update dependency deepmerge-ts to v7.0.2 [`#2118`](https://github.com/th-ch/youtube-music/pull/2118)
- chore(deps): update typescript-eslint monorepo to v8.0.0-alpha.25 [`#2114`](https://github.com/th-ch/youtube-music/pull/2114)
- fix(menu): fix menubar items doesn't rendered [`#2113`](https://github.com/th-ch/youtube-music/issues/2113)
- chore(i18n): Translated using Weblate (Nepali) [`4ae9a28`](https://github.com/th-ch/youtube-music/commit/4ae9a2820e9d453635094956264dd8b42c4997f7)
- chore(i18n): Translated using Weblate (Nepali) [`7e8d311`](https://github.com/th-ch/youtube-music/commit/7e8d31172ceb175ba07f307d248fc1246265a4c0)
- fix(deps): update dependency @cliqz/adblocker-electron to v1.27.10 [`d97aa1a`](https://github.com/th-ch/youtube-music/commit/d97aa1a8a003f15eea63c8cb2dabd0f215e885f1)
#### [v3.3.10](https://github.com/th-ch/youtube-music/compare/v3.3.9...v3.3.10)
> 2 June 2024
- fix(adblocker): fix blank screen [`#2103`](https://github.com/th-ch/youtube-music/issues/2103) [`#2105`](https://github.com/th-ch/youtube-music/issues/2105)
- chore(i18n): Translated using Weblate (Hungarian) [`25958a7`](https://github.com/th-ch/youtube-music/commit/25958a7bb1fea20e59676e7821f3dd8819602b68)
- fix(deps): bump deps [`4fa9762`](https://github.com/th-ch/youtube-music/commit/4fa9762a506544ce453894ce2df13033225e6c7d)
- fix(deps): bump `@typescript-eslint/eslint-plugin` version to 8.0.0-alpha.24 [`1e5bea8`](https://github.com/th-ch/youtube-music/commit/1e5bea85b31da5de868d9eff8758e5d2d888c2c8)
#### [v3.3.9](https://github.com/th-ch/youtube-music/compare/v3.3.8...v3.3.9)
> 1 June 2024
- chore(deps): update dependency eslint to v9.4.0 [`#2106`](https://github.com/th-ch/youtube-music/pull/2106)
- fix(adblocker): fix In-Player adblocker [`#1817`](https://github.com/th-ch/youtube-music/issues/1817)
- feat(adblocker): improve In-Player adblocker [`5b9e947`](https://github.com/th-ch/youtube-music/commit/5b9e947b8feebb57d9a2122ae7b7ab2ff7c37c06)
- chore(i18n): Translated using Weblate (French) [`9e809b0`](https://github.com/th-ch/youtube-music/commit/9e809b002d10f6ec0202a7d56d3d0b73f8093012)
- chore(i18n): Translated using Weblate (Malay) [`79151cb`](https://github.com/th-ch/youtube-music/commit/79151cb3aa6c087b8d8bb500322f505797b822bd)
#### [v3.3.8](https://github.com/th-ch/youtube-music/compare/v3.3.7...v3.3.8)
> 1 June 2024
- fix(adblocker): fix blank screen [`#1942`](https://github.com/th-ch/youtube-music/issues/1942) [`#2100`](https://github.com/th-ch/youtube-music/issues/2100) [`#2103`](https://github.com/th-ch/youtube-music/issues/2103)
- Update changelog for v3.3.7 [`b572623`](https://github.com/th-ch/youtube-music/commit/b572623442fc8b45b593dc0c91623fbf814115b4)
- Bump version to 3.3.8 [`5d99a85`](https://github.com/th-ch/youtube-music/commit/5d99a854e2f29bdb6682beeffa4e6b9b8be0f60f)
#### [v3.3.7](https://github.com/th-ch/youtube-music/compare/v3.3.6...v3.3.7)
> 1 June 2024
- chore(deps): update dependency electron to v30.0.9 [`#2098`](https://github.com/th-ch/youtube-music/pull/2098)
- Revert "fix(deps): update dependency @cliqz/adblocker-electron to v1.27.6" [`#2101`](https://github.com/th-ch/youtube-music/pull/2101)
- fix(deps): update dependency @cliqz/adblocker-electron to v1.27.6 [`#2096`](https://github.com/th-ch/youtube-music/pull/2096)
- chore(deps): update dependency discord-api-types to v0.37.86 [`#2092`](https://github.com/th-ch/youtube-music/pull/2092)
- chore(deps): update dependency vite to v5.2.12 [`#2094`](https://github.com/th-ch/youtube-music/pull/2094)
- chore(deps): update dependency @typescript-eslint/eslint-plugin to v7.11.0 [`#2093`](https://github.com/th-ch/youtube-music/pull/2093)
- chore(docs): Added README-es.md and linked to README.md [`#2090`](https://github.com/th-ch/youtube-music/pull/2090)
- fix(deps): update dependency deepmerge-ts to v7 [`#2085`](https://github.com/th-ch/youtube-music/pull/2085)
- chore(deps): update dependency builtin-modules to v4 [`#2084`](https://github.com/th-ch/youtube-music/pull/2084)
- fix(deps): update dependency electron-debug to v4 [`#2086`](https://github.com/th-ch/youtube-music/pull/2086)
- fix(deps): update dependency electron-store to v9 [`#2087`](https://github.com/th-ch/youtube-music/pull/2087)
- fix(deps): update dependency conf to v12 [`#1463`](https://github.com/th-ch/youtube-music/pull/1463)
- fix(deps): update dependency youtubei.js to v9.4.0 [`#2083`](https://github.com/th-ch/youtube-music/pull/2083)
- chore(deps): update playwright monorepo to v1.44.1 [`#2082`](https://github.com/th-ch/youtube-music/pull/2082)
- chore(deps): update dependency ws to v8.17.0 [`#2081`](https://github.com/th-ch/youtube-music/pull/2081)
- chore(deps): update dependency glob to v10.4.1 [`#2080`](https://github.com/th-ch/youtube-music/pull/2080)
- chore(deps): update dependency eslint to v9.3.0 [`#2079`](https://github.com/th-ch/youtube-music/pull/2079)
- fix(deps): update dependency peerjs to v1.5.4 [`#2075`](https://github.com/th-ch/youtube-music/pull/2075)
- chore(deps): update dependency esbuild to v0.21.4 [`#2078`](https://github.com/th-ch/youtube-music/pull/2078)
- fix(deps): update dependency semver to v7.6.2 [`#2076`](https://github.com/th-ch/youtube-music/pull/2076)
- chore(deps): update dependency electron-vite to v2.2.0 [`#2077`](https://github.com/th-ch/youtube-music/pull/2077)
- fix(deps): update dependency i18next to v23.11.5 [`#2074`](https://github.com/th-ch/youtube-music/pull/2074)
- fix(deps): update dependency @cliqz/adblocker-electron to v1.27.3 [`#2071`](https://github.com/th-ch/youtube-music/pull/2071)
- chore(deps): update dependency vite to v5.2.11 [`#2070`](https://github.com/th-ch/youtube-music/pull/2070)
- fix(deps): update dependency @floating-ui/dom to v1.6.5 [`#2073`](https://github.com/th-ch/youtube-music/pull/2073)
- fix(deps): update dependency @cliqz/adblocker-electron-preload to v1.27.3 [`#2072`](https://github.com/th-ch/youtube-music/pull/2072)
- chore(deps): update pnpm to v9 [`#1980`](https://github.com/th-ch/youtube-music/pull/1980)
- chore(deps): update dependency electron to v30.0.8 [`#2068`](https://github.com/th-ch/youtube-music/pull/2068)
- chore(deps-dev): bump ejs from 3.1.9 to 3.1.10 [`#2023`](https://github.com/th-ch/youtube-music/pull/2023)
- chore(deps): update dependency utf-8-validate to v6.0.4 [`#2069`](https://github.com/th-ch/youtube-music/pull/2069)
- fix(MPRIS): Prevents player to start with invalid MPRIS interface [`#1996`](https://github.com/th-ch/youtube-music/pull/1996)
- fix(deps): update dependency solid-js to v1.8.17 [`#2002`](https://github.com/th-ch/youtube-music/pull/2002)
- chore(deps): update dependency @typescript-eslint/eslint-plugin to v7.10.0 [`#2000`](https://github.com/th-ch/youtube-music/pull/2000)
- chore(deps): update dependency discord-api-types to v0.37.85 [`#1998`](https://github.com/th-ch/youtube-music/pull/1998)
- fix(deps): update dependency serve to v14.2.3 [`#1997`](https://github.com/th-ch/youtube-music/pull/1997)
- chore(deps): update dependency rollup to v4.18.0 [`#1990`](https://github.com/th-ch/youtube-music/pull/1990)
- feat: Enable arm64 for deb and rpm [`#2033`](https://github.com/th-ch/youtube-music/pull/2033)
- chore (README-is.md): Replace viðbót with tengiforrit [`#2004`](https://github.com/th-ch/youtube-music/pull/2004)
- chore(docs): readme file translated to french [`#2049`](https://github.com/th-ch/youtube-music/pull/2049)
- chore(deps): update dependency @babel/runtime to v7.24.6 [`#2039`](https://github.com/th-ch/youtube-music/pull/2039)
- Fix substract `margin-top` in fullscreen mode [`#2015`](https://github.com/th-ch/youtube-music/pull/2015)
- chore(deps): update pnpm to v8.15.7 [`#1970`](https://github.com/th-ch/youtube-music/pull/1970)
- fix(renderer): fix macos traffic lights gap [`#2035`](https://github.com/th-ch/youtube-music/issues/2035)
- Fix substract `margin-top` in fullscreen mode [`#2013`](https://github.com/th-ch/youtube-music/issues/2013)
- chore(i18n): Translated using Weblate (Hungarian) [`f3de171`](https://github.com/th-ch/youtube-music/commit/f3de17112af787437362f31b5c4e2d4149ba1436)
- feat(menu): add theme list in menu [`933b4cc`](https://github.com/th-ch/youtube-music/commit/933b4cc8f062b3442afd4516a40eb2938db98fc6)
- chore(i18n): Translated using Weblate (Filipino) [`91392c0`](https://github.com/th-ch/youtube-music/commit/91392c0c7efaf3b33da4be4aaa7946af7108d676)
#### [v3.3.6](https://github.com/th-ch/youtube-music/compare/v3.3.5...v3.3.6)
> 13 April 2024
- fix: add AdGuard as blocklist sources [`#1966`](https://github.com/th-ch/youtube-music/pull/1966)
- chore(deps): update dependency rollup to v4.14.2 [`#1968`](https://github.com/th-ch/youtube-music/pull/1968)
- fix(deps): update dependency youtubei.js to v9.3.0 [`#1967`](https://github.com/th-ch/youtube-music/pull/1967)
- chore(deps): update playwright monorepo to v1.43.1 [`#1969`](https://github.com/th-ch/youtube-music/pull/1969)
- chore(deps): update dependency electron to v29.3.0 [`#1961`](https://github.com/th-ch/youtube-music/pull/1961)
- fix(mpris): use global regex to replace minus in the video ID [`#1963`](https://github.com/th-ch/youtube-music/pull/1963)
- fix(deps): update dependency @cliqz/adblocker-electron-preload to v1.27.1 [`#1954`](https://github.com/th-ch/youtube-music/pull/1954)
- chore(deps): update dependency typescript to v5.4.5 [`#1958`](https://github.com/th-ch/youtube-music/pull/1958)
- fix(deps): update dependency youtubei.js to v9.2.1 [`#1957`](https://github.com/th-ch/youtube-music/pull/1957)
- fix(deps): update dependency i18next to v23.11.1 [`#1956`](https://github.com/th-ch/youtube-music/pull/1956)
- fix(deps): update dependency @cliqz/adblocker-electron to v1.27.1 [`#1953`](https://github.com/th-ch/youtube-music/pull/1953)
- chore(deps): update dependency @typescript-eslint/eslint-plugin to v7.6.0 [`#1947`](https://github.com/th-ch/youtube-music/pull/1947)
- fix(deps): update dependency i18next to v23.11.0 [`#1946`](https://github.com/th-ch/youtube-music/pull/1946)
- chore(deps): update dependency node-gyp to v10.1.0 [`#1941`](https://github.com/th-ch/youtube-music/pull/1941)
- chore(deps): update dependency eslint to v9 [`#1940`](https://github.com/th-ch/youtube-music/pull/1940)
- chore(deps): update dependency rollup to v4.14.1 [`#1944`](https://github.com/th-ch/youtube-music/pull/1944)
- chore(deps): update dependency node-gyp to v10.1.0 [`#1937`](https://github.com/th-ch/youtube-music/pull/1937)
- chore(deps): update dependency typescript to v5.4.4 [`#1936`](https://github.com/th-ch/youtube-music/pull/1936)
- chore(deps): update playwright monorepo to v1.43.0 [`#1938`](https://github.com/th-ch/youtube-music/pull/1938)
- chore(deps): bump undici from 5.28.3 to 5.28.4 [`#1935`](https://github.com/th-ch/youtube-music/pull/1935)
- chore(deps): update dependency vite to v5.2.8 [`#1930`](https://github.com/th-ch/youtube-music/pull/1930)
- chore(deps): update dependency discord-api-types to v0.37.79 [`#1933`](https://github.com/th-ch/youtube-music/pull/1933)
- chore(deps): update dependency node-gyp to v10.1.0 [`#1910`](https://github.com/th-ch/youtube-music/pull/1910)
- chore(deps): update dependency node-gyp to v10.1.0 [`#1908`](https://github.com/th-ch/youtube-music/pull/1908)
- fix(deps): update dependency @cliqz/adblocker-electron to v1.27.0 [`#1906`](https://github.com/th-ch/youtube-music/pull/1906)
- fix(deps): update dependency @cliqz/adblocker-electron-preload to v1.27.0 [`#1907`](https://github.com/th-ch/youtube-music/pull/1907)
- chore(deps): update dependency rollup to v4.13.2 [`#1901`](https://github.com/th-ch/youtube-music/pull/1901)
- chore(deps): update dependency glob to v10.3.12 [`#1900`](https://github.com/th-ch/youtube-music/pull/1900)
- chore(deps): update dependency vite to v5.2.7 [`#1905`](https://github.com/th-ch/youtube-music/pull/1905)
- fix(deps): update dependency node-html-parser to v6.1.13 [`#1903`](https://github.com/th-ch/youtube-music/pull/1903)
- chore(deps): update dependency discord-api-types to v0.37.77 [`#1899`](https://github.com/th-ch/youtube-music/pull/1899)
- chore(deps): update dependency electron to v29.1.6 [`#1898`](https://github.com/th-ch/youtube-music/pull/1898)
- Improve video title filters [`#1667`](https://github.com/th-ch/youtube-music/pull/1667)
- chore(deps): update dependency rollup to v4.13.1 [`#1896`](https://github.com/th-ch/youtube-music/pull/1896)
- chore(deps): update dependency node-gyp to v10.1.0 [`#1890`](https://github.com/th-ch/youtube-music/pull/1890)
- chore(deps): update dependency node-gyp to v10.1.0 [`#1889`](https://github.com/th-ch/youtube-music/pull/1889)
- fix: fix `switch-repeat` [`#1810`](https://github.com/th-ch/youtube-music/issues/1810)
- i18n Translation to Dutch/nl [`0dbf029`](https://github.com/th-ch/youtube-music/commit/0dbf0295b805f9883522ee00983b338060fbddbe)
- fix: rollback electron-builder version to 24.9.4 [`4a57cc5`](https://github.com/th-ch/youtube-music/commit/4a57cc5ee9ab2ad6835cff75b8b3aead75d9e564)
- chore: update electron-builder to 25.0.0-alpha.6 [`aef03ab`](https://github.com/th-ch/youtube-music/commit/aef03ab9fd440fe19c41e315cffab27e976c723d)
#### [v3.3.5](https://github.com/th-ch/youtube-music/compare/v3.3.4...v3.3.5)
> 26 March 2024
- chore(deps): update dependency node-gyp to v10.1.0 [`#1885`](https://github.com/th-ch/youtube-music/pull/1885)
- chore(deps): update dependency @typescript-eslint/eslint-plugin to v7.4.0 [`#1886`](https://github.com/th-ch/youtube-music/pull/1886)
- chore(deps): update dependency vite to v5.2.6 [`#1883`](https://github.com/th-ch/youtube-music/pull/1883)
- fix(style): resolve #1887 [`#1887`](https://github.com/th-ch/youtube-music/issues/1887)
- chore(i18n): Translated using Weblate (Swedish) [`69087bb`](https://github.com/th-ch/youtube-music/commit/69087bbf1fac1ba58e992146deb1d6f1706b1e3c)
- chore(i18n): Translated using Weblate (French) [`af78f15`](https://github.com/th-ch/youtube-music/commit/af78f1596ab8db2fa7069fdb1c4f078099ce4446)
- Update changelog for v3.3.4 [`62f7d44`](https://github.com/th-ch/youtube-music/commit/62f7d440fab5bdbe9f49a3a5f8c32e7aaf2f28f6)
#### [v3.3.4](https://github.com/th-ch/youtube-music/compare/v3.3.3...v3.3.4)
> 24 March 2024
- Update changelog for v3.3.3 [`9769544`](https://github.com/th-ch/youtube-music/commit/97695444affbacb71dd73ae7107d4c987e285a37)
- fix(style): fix fullscreen style and in-app-menu [`ed700c2`](https://github.com/th-ch/youtube-music/commit/ed700c2916cc7e6ccd2010d0c552364af116eb4f)
- fix(style): fix miniplayer style [`a8bc539`](https://github.com/th-ch/youtube-music/commit/a8bc53912d1f4137008ecb2d9d5d9d9eb06ee2a8)
#### [v3.3.3](https://github.com/th-ch/youtube-music/compare/v3.3.2...v3.3.3)
> 24 March 2024
- chore(deps): update dependency electron to v29.1.5 [`#1876`](https://github.com/th-ch/youtube-music/pull/1876)
- chore(deps): update dependency typescript to v5.4.3 [`#1877`](https://github.com/th-ch/youtube-music/pull/1877)
- chore(deps): update dependency discord-api-types to v0.37.76 [`#1878`](https://github.com/th-ch/youtube-music/pull/1878)
- chore(deps): update dependency vite to v5.2.4 [`#1881`](https://github.com/th-ch/youtube-music/pull/1881)
- Ambient Plugin cleanup [`#1880`](https://github.com/th-ch/youtube-music/pull/1880)
- chore(deps): update dependency vite to v5.2.2 [`#1875`](https://github.com/th-ch/youtube-music/pull/1875)
- fix(deps): update dependency solid-js to v1.8.16 [`#1873`](https://github.com/th-ch/youtube-music/pull/1873)
- chore(deps): update dependency @typescript-eslint/eslint-plugin to v7.3.1 [`#1868`](https://github.com/th-ch/youtube-music/pull/1868)
- chore(deps): update dependency discord-api-types to v0.37.75 [`#1867`](https://github.com/th-ch/youtube-music/pull/1867)
- chore(deps): update pnpm to v8.15.5 [`#1865`](https://github.com/th-ch/youtube-music/pull/1865)
- fix: Fix Miniplayer image size [`#1863`](https://github.com/th-ch/youtube-music/pull/1863)
- fix(style): fixed image/video alignment when toggle is active [`#1862`](https://github.com/th-ch/youtube-music/pull/1862)
- chore: Update README-is.md [`#1858`](https://github.com/th-ch/youtube-music/pull/1858)
- chore(deps): update dependency vite-plugin-solid to v2.10.2 [`#1859`](https://github.com/th-ch/youtube-music/pull/1859)
- fix: Ambient Mode intialization improvement [`#1857`](https://github.com/th-ch/youtube-music/pull/1857)
- chore(deps): bump follow-redirects from 1.15.5 to 1.15.6 [`#1856`](https://github.com/th-ch/youtube-music/pull/1856)
- chore(README): Nicer Readme 2.0 [`#1833`](https://github.com/th-ch/youtube-music/pull/1833)
- chore(deps): update dependency discord-api-types to v0.37.74 [`#1854`](https://github.com/th-ch/youtube-music/pull/1854)
- chore(deps): update dependency esbuild to v0.20.2 [`#1855`](https://github.com/th-ch/youtube-music/pull/1855)
- Improve ambient mode [`#1853`](https://github.com/th-ch/youtube-music/pull/1853)
- chore(deps): update dependency electron to v29.1.4 [`#1852`](https://github.com/th-ch/youtube-music/pull/1852)
- chore(deps): update dependency electron to v29.1.3 [`#1851`](https://github.com/th-ch/youtube-music/pull/1851)
- chore(deps): update dependency rollup to v4.13.0 [`#1850`](https://github.com/th-ch/youtube-music/pull/1850)
- fix(deps): update dependency electron-store to v8.2.0 [`#1843`](https://github.com/th-ch/youtube-music/pull/1843)
- chore(deps): update dependency electron to v29.1.1 [`#1841`](https://github.com/th-ch/youtube-music/pull/1841)
- fix(deps): update dependency i18next to v23.10.1 [`#1842`](https://github.com/th-ch/youtube-music/pull/1842)
- chore(deps): update dependency @typescript-eslint/eslint-plugin to v7.2.0 [`#1848`](https://github.com/th-ch/youtube-music/pull/1848)
- chore(deps): update dependency vite to v5.1.6 [`#1847`](https://github.com/th-ch/youtube-music/pull/1847)
- fix(deps): update dependency async-mutex to v0.5.0 [`#1849`](https://github.com/th-ch/youtube-music/pull/1849)
- fix(deps): update dependency ts-morph to v22 [`#1846`](https://github.com/th-ch/youtube-music/pull/1846)
- chore(deps): update dependency discord-api-types to v0.37.73 [`#1840`](https://github.com/th-ch/youtube-music/pull/1840)
- chore(deps): update dependency rollup to v4.12.1 [`#1837`](https://github.com/th-ch/youtube-music/pull/1837)
- chore: Changed a single word (README-is.md) [`#1836`](https://github.com/th-ch/youtube-music/pull/1836)
- chore(deps): update dependency typescript to v5.4.2 [`#1838`](https://github.com/th-ch/youtube-music/pull/1838)
- chore(deps): update dependency electron-vite to v2.1.0 [`#1823`](https://github.com/th-ch/youtube-music/pull/1823)
- chore(deps): update dependency @typescript-eslint/eslint-plugin to v7.1.1 [`#1829`](https://github.com/th-ch/youtube-music/pull/1829)
- chore(deps): update dependency vite to v5.1.5 [`#1831`](https://github.com/th-ch/youtube-music/pull/1831)
- Revert "chore(deps): update dependency electron-builder to v24.13.3" [`#1818`](https://github.com/th-ch/youtube-music/pull/1818)
- chore(deps): update dependency electron-builder to v24.13.3 [`#1774`](https://github.com/th-ch/youtube-music/pull/1774)
- chore(deps): update playwright monorepo to v1.42.1 [`#1816`](https://github.com/th-ch/youtube-music/pull/1816)
- fix: Add scale ratio for tray icons [`#1811`](https://github.com/th-ch/youtube-music/pull/1811)
- Icelandic translation of the readme file [`#1806`](https://github.com/th-ch/youtube-music/pull/1806)
- chore(deps): update dependency electron to v29.1.0 [`#1808`](https://github.com/th-ch/youtube-music/pull/1808)
- chore(deps): update playwright monorepo to v1.42.0 [`#1805`](https://github.com/th-ch/youtube-music/pull/1805)
- chore(deps): update dependency eslint to v8.57.0 [`#1793`](https://github.com/th-ch/youtube-music/pull/1793)
- chore(deps): update dependency @typescript-eslint/eslint-plugin to v7.1.0 [`#1800`](https://github.com/th-ch/youtube-music/pull/1800)
- chore(deps): update dependency discord-api-types to v0.37.71 [`#1799`](https://github.com/th-ch/youtube-music/pull/1799)
- chore(deps): update pnpm to v8.15.4 [`#1795`](https://github.com/th-ch/youtube-music/pull/1795)
- chore(deps): update dependency @types/semver to v7.5.8 [`#1797`](https://github.com/th-ch/youtube-music/pull/1797)
- fix: center the pause icon [`#1786`](https://github.com/th-ch/youtube-music/pull/1786)
- fix(deps): update dependency @cliqz/adblocker-electron to v1.26.16 [`#1788`](https://github.com/th-ch/youtube-music/pull/1788)
- fix(deps): update dependency @cliqz/adblocker-electron-preload to v1.26.16 [`#1789`](https://github.com/th-ch/youtube-music/pull/1789)
- fix(deps): update dependency youtubei.js to v9.1.0 [`#1790`](https://github.com/th-ch/youtube-music/pull/1790)
- fix(deps): update dependency i18next to v23.10.0 [`#1785`](https://github.com/th-ch/youtube-music/pull/1785)
- chore(deps): update dependency electron to v29 [`#1773`](https://github.com/th-ch/youtube-music/pull/1773)
- chore(deps): update dependency vite to v5.1.4 [`#1778`](https://github.com/th-ch/youtube-music/pull/1778)
- chore(deps): bump ip from 2.0.0 to 2.0.1 [`#1777`](https://github.com/th-ch/youtube-music/pull/1777)
- fix: add support for Wayland [`#1864`](https://github.com/th-ch/youtube-music/issues/1864)
- fix(style): fix navigation bar items are not working [`#1381`](https://github.com/th-ch/youtube-music/issues/1381) [`#1396`](https://github.com/th-ch/youtube-music/issues/1396) [`#1649`](https://github.com/th-ch/youtube-music/issues/1649)
- fix(ytm-bugs): fixed a `scrollbar-color` bug that affected Chromium 121 and later [`#1737`](https://github.com/th-ch/youtube-music/issues/1737)
- chore(i18n): Translated using Weblate (Icelandic) [`82fa871`](https://github.com/th-ch/youtube-music/commit/82fa8719a96abdfaaa8548a0077f4db2164ec09b)
- chore(i18n): Translated using Weblate (Romanian) [`c871506`](https://github.com/th-ch/youtube-music/commit/c871506a69180308ab4fc587b6e8a33f193087e8)
- chore(i18n): Translated using Weblate (Thai) [`a7d0350`](https://github.com/th-ch/youtube-music/commit/a7d035022a229f0b245694d1fc7a484befe1c269)
#### [v3.3.2](https://github.com/th-ch/youtube-music/compare/v3.3.1...v3.3.2)
> 20 February 2024
- fix: fix bugs in MPRIS, and improve MPRIS [`#1760`](https://github.com/th-ch/youtube-music/pull/1760)
- fix(deps): update dependency electron-updater to v6.1.8 [`#1770`](https://github.com/th-ch/youtube-music/pull/1770)
- chore(deps): update dependency electron-builder to v24.12.0 [`#1771`](https://github.com/th-ch/youtube-music/pull/1771)
- feat(scrobblers): use `BrowserWindow` instead of `shell.openExternal` [`#1758`](https://github.com/th-ch/youtube-music/pull/1758)
- chore(deps): update dependency @typescript-eslint/eslint-plugin to v7.0.2 [`#1763`](https://github.com/th-ch/youtube-music/pull/1763)
- chore(deps): update dependency esbuild to v0.20.1 [`#1759`](https://github.com/th-ch/youtube-music/pull/1759)
- fix(deps): update dependency i18next to v23.9.0 [`#1754`](https://github.com/th-ch/youtube-music/pull/1754)
- fix: fixed an issue that caused infinite loops when using Music Together [`#1752`](https://github.com/th-ch/youtube-music/issues/1752)
- chore(deps): rollback dependency electron-builder to v24.9.1 [`8bd05f5`](https://github.com/th-ch/youtube-music/commit/8bd05f525df98671f0a516b159cccab302b7ae99)
- chore(deps): update dependency electron-builder to v24.13.1 [`47b23b4`](https://github.com/th-ch/youtube-music/commit/47b23b414c8feb25c4d9a23d6adb7cbf1ac818fb)
- chore(i18n): Translated using Weblate (German) [`47505e9`](https://github.com/th-ch/youtube-music/commit/47505e97482f9e953ee451b968d0950585616ffa)
#### [v3.3.1](https://github.com/th-ch/youtube-music/compare/v3.3.0...v3.3.1)
> 18 February 2024
- Update changelog for v3.3.0 [`6d9bb8e`](https://github.com/th-ch/youtube-music/commit/6d9bb8eb1cc2d892a5552ffb1f7c20859aa80f67)
- hotfix: in-app-menu position issue [`87acf4c`](https://github.com/th-ch/youtube-music/commit/87acf4cf042ba32a000a4aeaec5c17c93501d333)
- release 3.3.1 (HOTFIX) [`a6ed8bf`](https://github.com/th-ch/youtube-music/commit/a6ed8bf3aa20ca8e950e85d88f981ccf9edc7498)
#### [v3.3.0](https://github.com/th-ch/youtube-music/compare/v3.2.2...v3.3.0)
> 18 February 2024
- fix(deps): update dependency i18next to v23.8.3 [`#1751`](https://github.com/th-ch/youtube-music/pull/1751)
- import fixed ./constants [`#1748`](https://github.com/th-ch/youtube-music/pull/1748)
- chore(deps): update dependency rollup to v4.12.0 [`#1743`](https://github.com/th-ch/youtube-music/pull/1743)
- chore(deps): bump undici from 5.28.2 to 5.28.3 [`#1747`](https://github.com/th-ch/youtube-music/pull/1747)
- chore(deps): update dependency vite to v5.1.3 [`#1742`](https://github.com/th-ch/youtube-music/pull/1742)
- chore(deps): update dependency vite-plugin-solid to v2.10.1 [`#1734`](https://github.com/th-ch/youtube-music/pull/1734)
- chore(deps): update dependency discord-api-types to v0.37.70 [`#1740`](https://github.com/th-ch/youtube-music/pull/1740)
- chore(deps): update dependency electron to v28.2.3 [`#1736`](https://github.com/th-ch/youtube-music/pull/1736)
- chore(deps): update pnpm to v8.15.3 [`#1739`](https://github.com/th-ch/youtube-music/pull/1739)
- chore(deps): update dependency rollup to v4.11.0 [`#1738`](https://github.com/th-ch/youtube-music/pull/1738)
- fix(deps): update dependency solid-js to v1.8.15 [`#1735`](https://github.com/th-ch/youtube-music/pull/1735)
- chore(deps): update dependency vite to v5.1.2 [`#1733`](https://github.com/th-ch/youtube-music/pull/1733)
- chore(deps): update dependency vite-plugin-solid to v2.10.0 [`#1732`](https://github.com/th-ch/youtube-music/pull/1732)
- chore(deps): update pnpm to v8.15.2 [`#1729`](https://github.com/th-ch/youtube-music/pull/1729)
- Update Copyright - 2024 [`#1730`](https://github.com/th-ch/youtube-music/pull/1730)
- chore(deps): update dependency @typescript-eslint/eslint-plugin to v7 [`#1728`](https://github.com/th-ch/youtube-music/pull/1728)
- fix(deps): update dependency @floating-ui/dom to v1.6.3 [`#1727`](https://github.com/th-ch/youtube-music/pull/1727)
- chore(deps): update dependency electron to v28.2.2 [`#1717`](https://github.com/th-ch/youtube-music/pull/1717)
- chore(deps): update dependency vite to v5.1.1 [`#1718`](https://github.com/th-ch/youtube-music/pull/1718)
- chore(deps): update dependency @types/semver to v7.5.7 [`#1724`](https://github.com/th-ch/youtube-music/pull/1724)
- fix(deps): update dependency @floating-ui/dom to v1.6.2 [`#1725`](https://github.com/th-ch/youtube-music/pull/1725)
- chore(deps): update dependency rollup to v4.10.0 [`#1719`](https://github.com/th-ch/youtube-music/pull/1719)
- fix(deps): update dependency solid-js to v1.8.14 [`#1713`](https://github.com/th-ch/youtube-music/pull/1713)
- chore(deps): update dependency @typescript-eslint/eslint-plugin to v6.21.0 [`#1711`](https://github.com/th-ch/youtube-music/pull/1711)
- fix(deps): update dependency semver to v7.6.0 [`#1712`](https://github.com/th-ch/youtube-music/pull/1712)
- refactor(in-app-menu): refactor `in-app-menu` plugin [`#1710`](https://github.com/th-ch/youtube-music/pull/1710)
- chore(deps): update playwright monorepo to v1.41.2 [`#1706`](https://github.com/th-ch/youtube-music/pull/1706)
- chore(deps): update dependency electron to v29.0.0-beta.5 [`#1707`](https://github.com/th-ch/youtube-music/pull/1707)
- feat(album-color-theme): support album color theme in all pages [`#1685`](https://github.com/th-ch/youtube-music/pull/1685)
- fix(deps): update dependency youtubei.js to v9.0.2 [`#1704`](https://github.com/th-ch/youtube-music/pull/1704)
- fix(deps): update dependency i18next to v23.8.2 [`#1702`](https://github.com/th-ch/youtube-music/pull/1702)
- feat: Support disabling scrobbling for non-music content [`#1665`](https://github.com/th-ch/youtube-music/pull/1665)
- fix(deps): update dependency youtubei.js to v9 [`#1682`](https://github.com/th-ch/youtube-music/pull/1682)
- chore(deps): update dependency electron to v29.0.0-beta.4 [`#1698`](https://github.com/th-ch/youtube-music/pull/1698)
- fix(deps): update dependency i18next to v23.8.1 [`#1694`](https://github.com/th-ch/youtube-music/pull/1694)
- chore(deps): update dependency @typescript-eslint/eslint-plugin to v6.20.0 [`#1700`](https://github.com/th-ch/youtube-music/pull/1700)
- chore(deps): update pnpm to v8.15.1 [`#1699`](https://github.com/th-ch/youtube-music/pull/1699)
- chore(deps): update dependency esbuild to v0.20.0 [`#1691`](https://github.com/th-ch/youtube-music/pull/1691)
- chore(deps): update pnpm to v8.15.0 [`#1692`](https://github.com/th-ch/youtube-music/pull/1692)
- fix(deps): update dependency i18next to v23.7.20 [`#1684`](https://github.com/th-ch/youtube-music/pull/1684)
- chore(deps): update dependency electron to v29.0.0-beta.3 [`#1683`](https://github.com/th-ch/youtube-music/pull/1683)
- chore(deps): update dependency electron to v29.0.0-beta.2 [`#1681`](https://github.com/th-ch/youtube-music/pull/1681)
- chore(deps): update dependency rollup to v4.9.6 [`#1663`](https://github.com/th-ch/youtube-music/pull/1663)
- chore(deps): update dependency electron to v29.0.0-beta.1 [`#1670`](https://github.com/th-ch/youtube-music/pull/1670)
- fix(deps): update dependency i18next to v23.7.19 [`#1680`](https://github.com/th-ch/youtube-music/pull/1680)
- chore(deps): update dependency @typescript-eslint/eslint-plugin to v6.19.1 [`#1669`](https://github.com/th-ch/youtube-music/pull/1669)
- chore(deps): update pnpm to v8.14.3 [`#1668`](https://github.com/th-ch/youtube-music/pull/1668)
- chore(deps): update dependency vite-plugin-inspect to v0.8.3 [`#1672`](https://github.com/th-ch/youtube-music/pull/1672)
- chore(deps): update dependency esbuild to v0.19.12 [`#1673`](https://github.com/th-ch/youtube-music/pull/1673)
- fix(deps): update dependency @electron/remote to v2.1.2 [`#1676`](https://github.com/th-ch/youtube-music/pull/1676)
- chore: Update issue templates [`#1661`](https://github.com/th-ch/youtube-music/pull/1661)
- chore(deps): update playwright monorepo to v1.41.1 [`#1660`](https://github.com/th-ch/youtube-music/pull/1660)
- fix(deps): update dependency i18next to v23.7.18 [`#1662`](https://github.com/th-ch/youtube-music/pull/1662)
- chore(deps): update actions/dependency-review-action action to v4 [`#1654`](https://github.com/th-ch/youtube-music/pull/1654)
- chore(deps): update dependency electron to v29.0.0-alpha.11 [`#1656`](https://github.com/th-ch/youtube-music/pull/1656)
- chore(deps): update dependency vite to v5.0.12 [security] [`#1659`](https://github.com/th-ch/youtube-music/pull/1659)
- fix(deps): update dependency async-mutex to v0.4.1 [`#1653`](https://github.com/th-ch/youtube-music/pull/1653)
- chore(deps): update playwright monorepo to v1.41.0 [`#1651`](https://github.com/th-ch/youtube-music/pull/1651)
- feat: Better Scrobbler Plugin [`#1640`](https://github.com/th-ch/youtube-music/pull/1640)
- chore(deps): update dependency electron to v29.0.0-alpha.10 [`#1645`](https://github.com/th-ch/youtube-music/pull/1645)
- chore(deps): update dependency @typescript-eslint/eslint-plugin to v6.19.0 [`#1643`](https://github.com/th-ch/youtube-music/pull/1643)
- chore(README): Fix plugins names and add plugins in/to Readme (in menu too) [`#1624`](https://github.com/th-ch/youtube-music/pull/1624)
- fix(album-actions): Fixed album actions [`#1639`](https://github.com/th-ch/youtube-music/pull/1639)
- chore(deps): update playwright monorepo to v1.41.0-beta-1705101589000 [`#1638`](https://github.com/th-ch/youtube-music/pull/1638)
- fix(#1543): fix song control doesn't work [`#1637`](https://github.com/th-ch/youtube-music/pull/1637)
- chore(deps): update playwright monorepo to v1.41.0-beta-1705092460000 [`#1635`](https://github.com/th-ch/youtube-music/pull/1635)
- chore(deps): update dependency rollup to v4.9.5 [`#1629`](https://github.com/th-ch/youtube-music/pull/1629)
- chore(deps): update dependency electron to v29.0.0-alpha.9 [`#1627`](https://github.com/th-ch/youtube-music/pull/1627)
- chore(deps): update dependency electron to v29.0.0-alpha.8 [`#1608`](https://github.com/th-ch/youtube-music/pull/1608)
- fix(deps): update dependency @cliqz/adblocker-electron to v1.26.15 [`#1615`](https://github.com/th-ch/youtube-music/pull/1615)
- chore(deps): update dependency rollup to v4.9.4 [`#1591`](https://github.com/th-ch/youtube-music/pull/1591)
- fix(deps): update dependency @cliqz/adblocker-electron-preload to v1.26.15 [`#1616`](https://github.com/th-ch/youtube-music/pull/1616)
- chore(deps): update pnpm to v8.14.1 [`#1619`](https://github.com/th-ch/youtube-music/pull/1619)
- chore(deps): update dependency eslint-plugin-prettier to v5.1.3 [`#1618`](https://github.com/th-ch/youtube-music/pull/1618)
- chore(deps): update dependency @typescript-eslint/eslint-plugin to v6.18.1 [`#1612`](https://github.com/th-ch/youtube-music/pull/1612)
- fix(deps): update dependency youtubei.js to v8.2.0 [`#1614`](https://github.com/th-ch/youtube-music/pull/1614)
- chore(deps): update dependency electron-vite to v2.0.0 [`#1609`](https://github.com/th-ch/youtube-music/pull/1609)
- chore(deps): update dependency @typescript-eslint/eslint-plugin to v6.18.0 [`#1603`](https://github.com/th-ch/youtube-music/pull/1603)
- chore(deps): update dependency electron-vite to v2.0.0-beta.4 [`#1602`](https://github.com/th-ch/youtube-music/pull/1602)
- fix: fix upgrade button [`#1199`](https://github.com/th-ch/youtube-music/issues/1199)
- fix(mpris): fix mpris invalid position [`#1726`](https://github.com/th-ch/youtube-music/issues/1726)
- fix: discord RPC (fix #1664) [`#1664`](https://github.com/th-ch/youtube-music/issues/1664)
- fix: remove sign-in button (fix #1199) [`#1199`](https://github.com/th-ch/youtube-music/issues/1199)
- Fix #1617 [`#1617`](https://github.com/th-ch/youtube-music/issues/1617)
- fix(crossfade): fix #1633 [`#1633`](https://github.com/th-ch/youtube-music/issues/1633)
- fix: fix #1621 [`#1621`](https://github.com/th-ch/youtube-music/issues/1621)
- fix(tuna-obs): partially fix #1596 [`#1596`](https://github.com/th-ch/youtube-music/issues/1596)
- fix(discord): fix hide duration button [`#1644`](https://github.com/th-ch/youtube-music/issues/1644)
- fix(in-app-menu): fix invalid `margin-top` [`#1597`](https://github.com/th-ch/youtube-music/issues/1597)
- fix(README): fix `plugins` path [`#1598`](https://github.com/th-ch/youtube-music/issues/1598)
- chore(i18n): Translated using Weblate (Vietnamese) [`0528637`](https://github.com/th-ch/youtube-music/commit/05286371353e8b4c36a5b9fe9011ae5dfdc7ee82)
- chore: update pnpm-lock [`fd8d59b`](https://github.com/th-ch/youtube-music/commit/fd8d59bada56dab4e156d22394fe0c5efec5abc4)
- fix(in-app-menu): fix app crash in production [`febc63e`](https://github.com/th-ch/youtube-music/commit/febc63edef375bd82db48b7fb460ec5a601ab872)
#### [v3.2.2](https://github.com/th-ch/youtube-music/compare/v3.2.1...v3.2.2)
> 5 January 2024
- feat(tray): Add song info and paused icon [`#1592`](https://github.com/th-ch/youtube-music/pull/1592)
- fix(skip-silences): fix audio distorted [`#1141`](https://github.com/th-ch/youtube-music/issues/1141)
- chore(deps): update dependency rollup to v4.9.3 [`0c3c380`](https://github.com/th-ch/youtube-music/commit/0c3c3805918adf2a185a7f1dc67ea3af8135863d)
- chore(i18n): Translated using Weblate (Turkish) [`64ea1fd`](https://github.com/th-ch/youtube-music/commit/64ea1fdb58fdf2766ae3284ac1a51bfac8894b36)
- fix(music-together): typing [`895386f`](https://github.com/th-ch/youtube-music/commit/895386f6f8c649f77ea15c88f6fb7ecc5b775554)
#### [v3.2.1](https://github.com/th-ch/youtube-music/compare/v3.2.0...v3.2.1)
> 1 January 2024
- fix: fix #1574 [`#1574`](https://github.com/th-ch/youtube-music/issues/1574)
- fix: fix #1575 [`#1575`](https://github.com/th-ch/youtube-music/issues/1575)
- chore(i18n): Translated using Weblate [`f5aa179`](https://github.com/th-ch/youtube-music/commit/f5aa179cd639eb4b8f70f1264b5b459ebcc16695)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 227 KiB

After

Width:  |  Height:  |  Size: 721 KiB

View File

@ -478,7 +478,7 @@
</a>
</li>
</ul>
<div class="footer-copyright">© 2021 th-ch</div>
<div class="footer-copyright">© 2024 th-ch</div>
</div>
</div>
</div>

390
docs/readme/README-es.md Normal file
View File

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

388
docs/readme/README-fr.md Normal file
View File

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

388
docs/readme/README-is.md Normal file
View File

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

View File

@ -1,7 +1,7 @@
# 유튜브 뮤직 (YouTube Music)
<div align="center">
# 유튜브 뮤직 (YouTube Music)
[![GitHub release](https://img.shields.io/github/release/th-ch/youtube-music.svg?style=for-the-badge&logo=youtube-music)](https://github.com/th-ch/youtube-music/releases/)
[![GitHub license](https://img.shields.io/github/license/th-ch/youtube-music.svg?style=for-the-badge)](https://github.com/th-ch/youtube-music/blob/master/LICENSE)
[![eslint code style](https://img.shields.io/badge/code_style-eslint-5ed9c7.svg?style=for-the-badge)](https://github.com/th-ch/youtube-music/blob/master/.eslintrc.js)
@ -12,7 +12,7 @@
</div>
![Screenshot](../../web/screenshot.jpg "Screenshot")
![Screenshot](/web/screenshot.png "Screenshot")
<div align="center">
<a href="https://github.com/th-ch/youtube-music/releases/latest">
@ -25,62 +25,26 @@
- 원래의 인터페이스를 유지하는 것을 목표로 하는 네이티브 디자인 및 느낌
- 맞춤 플러그인을 위한 프레임워크: 스타일, 콘텐츠, 기능 등 필요에 따라 유튜브 뮤직을 변경하고, 클릭 한 번으로 플러그인을 활성화/비활성화할 수 있습니다.
## 번역
## Content
[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`)
- 두 파일을 **동일한 위치**에 놓아주세요.
- 설치기를 실행하세요.
- [기능](#기능)
- [사용 가능한 플러그인](#사용-가능한-플러그인)
- [번역](#번역)
- [다운로드](#다운로드)
- [Arch Linux](#arch-linux)
- [MacOS](#macos)
- [Windows](#windows)
- [(Windows에서) 네트워크에 연결하지 않고 설치하는 방법은 무엇인가요?](#windows에서-네트워크에-연결하지-않고-설치하는-방법은-무엇인가요)
- [테마](#테마)
- [개발](#개발)
- [나만의 플러그인 만들기](#나만의-플러그인-만들기)
- [플러그인 만들기](#플러그인-만들기)
- [일반적인 사용 예](#일반적인-사용-예)
- [빌드](#빌드)
- [프로덕션 빌드 미리보기](#프로덕션-빌드-미리보기)
- [테스트](#테스트)
- [라이선스](#라이선스)
- [자주 묻는 질문](#자주-묻는-질문)
## 기능:
@ -156,6 +120,63 @@ winget install th-ch.YouTubeMusic
- **비주얼라이저**: 플레이어에 시각화 도구 추가
## 번역
[Hosted Weblate](https://hosted.weblate.org/projects/youtube-music/)에서 번역을 도울 수 있습니다.
<a href="https://hosted.weblate.org/engage/youtube-music/">
<img src="https://hosted.weblate.org/widget/youtube-music/i18n/multi-auto.svg" alt="번역 상태" />
<img src="https://hosted.weblate.org/widget/youtube-music/i18n/287x66-black.png" alt="번역 상태 2" />
</a>
## 다운로드
[최신 릴리즈](https://github.com/th-ch/youtube-music/releases/latest)를 확인하여 최신 버전을 빠르게 찾을 수 있습니다.
### Arch Linux
AUR에서 [`youtube-music-bin`](https://aur.archlinux.org/packages/youtube-music-bin) 패키지를 설치합니다. AUR 설치 지침은 [이 위키 페이지](https://wiki.archlinux.org/index.php/Arch_User_Repository#Installing_packages)를 참조하세요.
### MacOS
Homebrew를 사용하여 앱을 설치할 수 있습니다:
```bash
brew install --cask https://raw.githubusercontent.com/th-ch/youtube-music/master/youtube-music.rb
```
(앱을 수동으로 설치하고) 앱을 실행할 때 `손상되었기 때문에 열 수 없습니다.`라는 오류가 발생하면 터미널에서 다음을 실행하세요:
```bash
/usr/bin/xattr -cr /Applications/YouTube\ Music.app
```
### Windows
[Scoop 패키지 매니저](https://scoop.sh)를 사용하여 [`extras` 버킷](https://github.com/ScoopInstaller/Extras)에서 `youtube-music` 패키지를 설치할 수 있습니다.
```bash
scoop bucket add extras
scoop install extras/youtube-music
```
또는 Windows 11의 공식 CLI 패키지 관리자인 [Winget](https://learn.microsoft.com/en-us/windows/package-manager/winget/)을 사용하여 `th-ch.YouTubeMusic` 패키지를 설치할 수 있습니다.
*참고: "알 수 없는 게시자"의 파일이기 때문에 Microsoft Defender의 SmartScreen에서 설치를 차단할 수 있습니다. 이는 GitHub에서 동일 파일을 수동으로 다운로드한 후 실행 파일(.exe)을 실행하려고 할 때도 마찬가지로 발생합니다.*
```bash
winget install th-ch.YouTubeMusic
```
#### (Windows에서) 네트워크에 연결하지 않고 설치하는 방법은 무엇인가요?
- [릴리즈 페이지](https://github.com/th-ch/youtube-music/releases/latest)에서 _본인 기기 아키텍처_에 맞는 `*.nsis.7z` 파일을 다운로드하세요.
- `x64`는 64비트 Windows 용입니다.
- `ia32`는 32비트 Windows 용입니다.
- `arm64`는 ARM64 Windows 용입니다.
- 릴리즈 페이지에서 설치기를 다운로드하세요. (`*-Setup.exe`)
- 두 파일을 **동일한 위치**에 놓아주세요.
- 설치기를 실행하세요.
## 테마
CSS 파일을 로드하여 애플리케이션의 모양을 변경할 수 있습니다(설정 > 시각적 변경 > 테마).

374
docs/readme/README-ru.md Normal file
View File

@ -0,0 +1,374 @@
<div align="center">
# YouTube Music
[![GitHub release](https://img.shields.io/github/release/th-ch/youtube-music.svg?style=for-the-badge&logo=youtube-music)](https://github.com/th-ch/youtube-music/releases/)
[![GitHub license](https://img.shields.io/github/license/th-ch/youtube-music.svg?style=for-the-badge)](https://github.com/th-ch/youtube-music/blob/master/LICENSE)
[![eslint code style](https://img.shields.io/badge/code_style-eslint-5ed9c7.svg?style=for-the-badge)](https://github.com/th-ch/youtube-music/blob/master/.eslintrc.js)
[![Build status](https://img.shields.io/github/actions/workflow/status/th-ch/youtube-music/build.yml?branch=master&style=for-the-badge&logo=youtube-music)](https://GitHub.com/th-ch/youtube-music/releases/)
[![GitHub All Releases](https://img.shields.io/github/downloads/th-ch/youtube-music/total?style=for-the-badge&logo=youtube-music)](https://GitHub.com/th-ch/youtube-music/releases/)
[![AUR](https://img.shields.io/aur/version/youtube-music-bin?color=blueviolet&style=for-the-badge&logo=youtube-music)](https://aur.archlinux.org/packages/youtube-music-bin)
[![Known Vulnerabilities](https://snyk.io/test/github/th-ch/youtube-music/badge.svg)](https://snyk.io/test/github/th-ch/youtube-music)
</div>
![Screenshot](/web/screenshot.png "Screenshot")
<div align="center">
<a href="https://github.com/th-ch/youtube-music/releases/latest">
<img src="web/youtube-music.svg" width="400" height="100" alt="YouTube Music SVG">
</a>
</div>
**Клиент для YouTube Music основанный на Electron с поддержкой:**
- Нативный вид приложения, нацелен на сохранение оригинального интерфейса
- Фреймворк для пользовательских плагинов: изменяйте YouTube Music под ваши нужды (внешний вид, контент, возможности), включайте/выключайте плагины в один клик
## Демо-изображение
| Экран плеера (цветовая тема альбома & режим Ambient) |
|:---------------------------------------------------------------------------------------------------------:|
|![Screenshot1](https://github.com/th-ch/youtube-music/assets/16558115/53efdf73-b8fa-4d7b-a235-b96b91ea77fc)|
## Содержание
- [Возможности](#features)
- [Доступные плагины](#available-plugins)
- [Перевод](#translation)
- [Скачать](#download)
- [Arch Linux](#arch-linux)
- [MacOS](#macos)
- [Windows](#windows)
- [Как установить без подключения к интернету? (в Windows)](#how-to-install-without-a-network-connection-in-windows)
- [Темы](#themes)
- [Для разработчиков](#dev)
- [Создайте свои собственные плагины](#build-your-own-plugins)
- [Создание плагина](#creating-a-plugin)
- [Примеры использования](#common-use-cases)
- [Сборка](#build)
- [Предварительный просмотр](#production-preview)
- [Тестирование](#tests)
- [Лицензия](#license)
- [Часто задаваемые вопросы](#faq)
## Возможности:
- **Авто-подтверждение при паузе** (Всегда включено): отключает всплывающие уведомление ["Продолжить просмотр?"](https://user-images.githubusercontent.com/61631665/129977894-01c60740-7ec6-4bf0-9a2c-25da24491b0e.png),
которое приостанавливает воспроизведение через определённое время
- И больше ...
## Доступные плагины:
- **Блокировщик рекламы**: Блокирует всю рекламу и трекеры
- **Действия с альбомом**: Добавляет кнопки "Убрать дизлайк", "Дизлайк", "Лайк", "Убрать лайк" и применяет их действия ко всем трекам в плейлисте или альбоме
- **Цветовая тема альбома**: Применяет динамическую тему и эффекты, основываясь на цветовой палитре альбома
- **Режим Ambient**: Применяет световой эффект, проецируя нежные цвета из видео на задний фон вашего экрана
- **Нормализация аудио**: Применяет нормализацию к аудио (уменьшает громкость громких частей трека и повышает громкость тихих частей трека)
- **Размытие панели навигации**: Делает панель навигации прозрачной и размытой
- **Обход возрастных ограничений**: Обходит проверку возраста YouTube
- **Выбор субтитров**: Включить субтитры
- **Компактная боковая панель**: Всегда показывать боковую панель компактно
- **Плавный переход**: Плавный переход между треками
- **Отключить автопроигрыш**: Каждый трек начинается в режиме паузы
- **[Discord](https://discord.com/) Rich Presence**: Показывает вашим друзьям, что вы слушаете с помощью [Rich Presence](https://user-images.githubusercontent.com/28219076/104362104-a7a0b980-5513-11eb-9744-bb89eabe0016.png)
- **Загрузчик**: Загрузка MP3 [напрямую из интерфейса](https://user-images.githubusercontent.com/61631665/129977677-83a7d067-c192-45e1-98ae-b5a4927393be.png) [(youtube-dl)](https://github.com/ytdl-org/youtube-dl)
- **Расширенная громкость**: Делает слайдер громкости [расширенным](https://greasyfork.org/en/scripts/397686-youtube-music-fix-volume-ratio/) облегчая выбор громкости
- **Меню в приложении**: [Придаёт панели меню красивый тёмный вид](https://user-images.githubusercontent.com/78568641/112215894-923dbf00-8c29-11eb-95c3-3ce15db27eca.png)
> (посмотрите [этот пост,](https://github.com/th-ch/youtube-music/issues/410#issuecomment-952060709) если у вас есть проблемы с доступом к меню после включения этого плагина и опции "Скрыть меню")
- **Скробблер**: Добавляет поддержку скробблинга [Last.fm](https://www.last.fm/) и [ListenBrainz](https://listenbrainz.org/)
- **Lumia Stream**: Добавляет поддержку [Lumia Stream](https://lumiastream.com/)
- **Тесты песен Genius**: Добавляет поддержку текстов для большинства песен
- **Music Together**: Делитесь плейлистом с другими. Когда ведущий воспроизводит трек, все остальные будут слушать этот же трек.
- **Навигация**: Кнопки Назад/Вперед интегрированы в интерфейс, как в вашем любимом браузере
- **Без входа в систему Google**: Убирает из интерфейса кнопки и ссылки для входа через Google
- **Уведомления**: Показывает уведомление, когда трек начинает играть ([интерактивные уведомления](https://user-images.githubusercontent.com/78568641/114102651-63ce0e00-98d0-11eb-9dfe-c5a02bb54f9c.png) доступны только для Windows)
- **Картинка в картинке**: Позволяет переключить приложение в режим "картинка в картинке"
- **Скорость воспроизведения**: Слушайте быстрее, слушайте медленнее! [Добавляет слайдер для контроля скорости трека](https://user-images.githubusercontent.com/61631665/129976003-e55db5ba-bf42-448c-a059-26a009775e68.png)
- **Точная громкость**: Точечно управляйте громкостью с помощью колеса мыши/горячих клавиш, с кастомным интерфейсом и настраиваемыми шагами громкости
- **Ярлыки (и MPRIS)**: Позволяет настроить глобальные горячие клавиши управления воспроизведением (плей/пауза/следующий/предыдущий) + отключает [отображение медиа на экране,](https://user-images.githubusercontent.com/84923831/128601225-afa38c1f-dea8-4209-9f72-0f84c1dd8b54.png) переопределяя клавиши управления + включает Ctrl/CMD + F для поиска + включает поддержку linux mpris для клавиш управления медиа + [настраиваемые сочетания клавиш](https://github.com/Araxeus/youtube-music/blob/1e591d6a3df98449bcda6e63baab249b28026148/providers/song-controls.js#L13-L50) для [продвинутых пользователей](https://github.com/th-ch/youtube-music/issues/106#issuecomment-952156902)
- **Пропускать непонравившиеся треки**: Пропускает непонравившиеся треки
- **Пропуск тишины**: Автоматически пропускает тихие моменты в песнях
- [**SponsorBlock**](https://github.com/ajayyy/SponsorBlock): Автоматически пропускает немузыкальные части, такие как интро/аутро музыкальных видео, где трек не играет
- **Управление воспроизведением из панели задач**: Управляйте воспроизведением из [панели задач Windows](https://user-images.githubusercontent.com/78568641/111916130-24a35e80-8a82-11eb-80c8-5021c1aa27f4.png)
- **TouchBar**: Кастомная раскладка TouchBar для MacOS
- **Tuna OBS**: Интеграция с [OBS](https://obsproject.com/) плагином [Tuna](https://obsproject.com/forum/resources/tuna.843/)
- **Изменение качества видео**: Позволяет менять качество видео [кнопкой](https://user-images.githubusercontent.com/78568641/138574366-70324a5e-2d64-4f6a-acdd-dc2a2b9cecc5.png) на медиаплеере видео
- **Переключатель видео**: Добавляет
[кнопку](https://user-images.githubusercontent.com/28893833/173663950-63e6610e-a532-49b7-9afa-54cb57ddfc15.png) переключения режимов Трек/Видео. Также может удалять вкладку "Видео" полностью
- **Визуализатор**: Различные визуализаторы музыки
- **Synced Lyrics**:
Предоставляет синхронизированные слова для песен из таких источников, как [LRClib](https://lrclib.net).
## Перевод
Вы можете помочь с переводом на ваш язык на [Hosted Weblate](https://hosted.weblate.org/projects/youtube-music/).
<a href="https://hosted.weblate.org/engage/youtube-music/">
<img src="https://hosted.weblate.org/widget/youtube-music/i18n/multi-auto.svg" alt="translation status" />
<img src="https://hosted.weblate.org/widget/youtube-music/i18n/287x66-black.png" alt="translation status 2" />
</a>
## Скачать
Вы можете посмотреть [latest release,](https://github.com/th-ch/youtube-music/releases/latest) чтобы быстро найти новую версию.
### Arch Linux
Установите пакет [`youtube-music-bin`](https://aur.archlinux.org/packages/youtube-music-bin) из AUR. Инструкции по установке из AUR можете найти на этой [вики-странице](https://wiki.archlinux.org/index.php/Arch_User_Repository#Installing_packages).
### macOS
Вы можете установить приложение с помощью Homebrew (сморите [cask definition](https://github.com/th-ch/homebrew-youtube-music)):
```bash
brew install th-ch/youtube-music/youtube-music
```
Если вы устанавливаете приложение вручную и получаете ошибку "is damaged and cant be opened.", запустите в терминале следующую команду:
```bash
/usr/bin/xattr -cr /Applications/YouTube\ Music.app
```
### Windows
Вы можете использовать [пакетный менеджер Scoop](https://scoop.sh) для установки пакета `youtube-music` из [`extras` bucket](https://github.com/ScoopInstaller/Extras).
```bash
scoop bucket add extras
scoop install extras/youtube-music
```
Также для установки вы можете использовать [Winget](https://learn.microsoft.com/en-us/windows/package-manager/winget/), официальный пакетный менеджер командной строки Windows 11, для установки пакета `th-ch.YouTubeMusic`.
*К сведению: SmartScreen защитника Windows может блокировать установку, так как она от "неизвестного издателя". Это также применимо к методу ручной установки, когда вы пытаетесь запустить исполняемый файл(.exe) после загрузки здесь, на GitHub (тот же файл).*
```bash
winget install th-ch.YouTubeMusic
```
#### Установка без подключения к Интернету? (в Windows)
- Скачайте файл `*.nsis.7z` из _архетиктура вашего устройства_ на [release page](https://github.com/th-ch/youtube-music/releases/latest).
- `x64` для 64-bit Windows
- `ia32` для 32-bit Windows
- `arm64` для ARM64 Windows
- Скачайте установщик в release page. (`*-Setup.exe`)
- Поместите их в **одной директории**.
- Запустите установщик.
## Темы
Вы можете загрузить файл CSS для смены внешнего вида приложения (Настройки > Визуальные настройки > Тема).
Некоторые предустановленные темы доступны здесь: https://github.com/kerichdev/themes-for-ytmdesktop-player.
## Для разработчиков
```bash
git clone https://github.com/th-ch/youtube-music
cd youtube-music
pnpm install --frozen-lockfile
pnpm dev
```
## Создайте свои собственные плагины
Используя плагины вы можете:
- Манипулировать приложением - `BrowserWindow` из electron проброшен обработчику плагинов
- Изменять внешний вид, манипулируя HTML/CSS
### Создание плагина
Создайте директорию в `src/plugins/YOUR-PLUGIN-NAME`:
- `index.ts`: основной файл плагина
```typescript
import style from './style.css?inline'; // import style as inline
import { createPlugin } from '@/utils';
export default createPlugin({
name: 'Plugin Label',
restartNeeded: true, // if value is true, ytmusic show restart dialog
config: {
enabled: false,
}, // your custom config
stylesheets: [style], // your custom style,
menu: async ({ getConfig, setConfig }) => {
// All *Config methods are wrapped Promise<T>
const config = await getConfig();
return [
{
label: 'menu',
submenu: [1, 2, 3].map((value) => ({
label: `value ${value}`,
type: 'radio',
checked: config.value === value,
click() {
setConfig({ value });
},
})),
},
];
},
backend: {
start({ window, ipc }) {
window.maximize();
// you can communicate with renderer plugin
ipc.handle('some-event', () => {
return 'hello';
});
},
// it fired when config changed
onConfigChange(newConfig) { /* ... */ },
// it fired when plugin disabled
stop(context) { /* ... */ },
},
renderer: {
async start(context) {
console.log(await context.ipc.invoke('some-event'));
},
// Only renderer available hook
onPlayerApiReady(api: YoutubePlayer, context: RendererContext) {
// set plugin config easily
context.setConfig({ myConfig: api.getVolume() });
},
onConfigChange(newConfig) { /* ... */ },
stop(_context) { /* ... */ },
},
preload: {
async start({ getConfig }) {
const config = await getConfig();
},
onConfigChange(newConfig) {},
stop(_context) {},
},
});
```
### Примеры использования
- Кастомный CSS: создайте файл `style.css` в той же директории, затем:
```typescript
// index.ts
import style from './style.css?inline'; // import style as inline
import { createPlugin } from '@/utils';
export default createPlugin({
name: 'Plugin Label',
restartNeeded: true, // if value is true, ytmusic will show a restart dialog
config: {
enabled: false,
}, // your custom config
stylesheets: [style], // your custom style
renderer() {} // define renderer hook
});
```
- Если вы хотите изменить HTML:
```typescript
import { createPlugin } from '@/utils';
export default createPlugin({
name: 'Plugin Label',
restartNeeded: true, // if value is true, ytmusic will show the restart dialog
config: {
enabled: false,
}, // your custom config
renderer() {
// Remove the login button
document.querySelector(".sign-in-link.ytmusic-nav-bar").remove();
} // define renderer hook
});
```
- обмен между фронтом и бэком может быть выполнен с помощью модуля ipcMain из electron. Смотрите файл `index.ts` и
пример в плагине `sponsorblock`.
## Сборка
1. Склонируйте репозиторий
2. Следуйте [этой инструкции,](https://pnpm.io/installation) чтобы установить `pnpm`
3. Запустите `pnpm install --frozen-lockfile` для установки зависимостей
4. Запустите `pnpm build:OS`
- `pnpm dist:win` - Windows
- `pnpm dist:linux` - Linux (amd64)
- `pnpm dist:linux:deb-arm64` - Linux (arm64 for Debian)
- `pnpm dist:linux:rpm-arm64` - Linux (arm64 for Fedora)
- `pnpm dist:mac` - macOS (amd64)
- `pnpm dist:mac:arm64` - macOS (arm64)
Сборка приложения для macOS, Linux, и Windows,
используя [electron-builder](https://github.com/electron-userland/electron-builder).
## Предварительный просмотр
```bash
pnpm start
```
## Тестирование
```bash
pnpm test
```
Использует [Playwright](https://playwright.dev/) для тестирования приложения.
## Лицензия
MIT © [th-ch](https://github.com/th-ch/youtube-music)
## Часто задаваемые вопросы
### Почему меня приложения не отображается?
Если опция `Скрыть меню` включена - вы можете отобразить меню с помощью клавиши <kbd>alt</kbd> (или <kbd>\`</kbd> [обратный апостроф], если используете плагин "Меню в приложении")

View File

@ -1,15 +1,16 @@
import { resolve, dirname } from 'node:path';
import { resolve, dirname, join } from 'node:path';
import { fileURLToPath } from 'node:url';
import { UserConfig } from 'vite';
import { defineConfig, defineViteConfig } from 'electron-vite';
import builtinModules from 'builtin-modules';
import viteResolve from 'vite-plugin-resolve';
import Inspect from 'vite-plugin-inspect';
import solidPlugin from 'vite-plugin-solid';
import { 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));
@ -50,8 +51,12 @@ export default defineConfig({
};
if (mode === 'development') {
commonConfig.build!.sourcemap = 'inline';
commonConfig.plugins?.push(
Inspect({ build: true, outputDir: '.vite-inspect/backend' }),
Inspect({
build: true,
outputDir: join(__dirname, '.vite-inspect/backend'),
}),
);
return commonConfig;
}
@ -94,8 +99,12 @@ export default defineConfig({
};
if (mode === 'development') {
commonConfig.build!.sourcemap = 'inline';
commonConfig.plugins?.push(
Inspect({ build: true, outputDir: '.vite-inspect/preload' }),
Inspect({
build: true,
outputDir: join(__dirname, '.vite-inspect/preload'),
}),
);
return commonConfig;
}
@ -117,6 +126,7 @@ export default defineConfig({
'virtual:i18n': i18nImporter(),
'virtual:plugins': pluginVirtualModuleGenerator('renderer'),
}),
solidPlugin(),
],
root: './src/',
build: {
@ -140,8 +150,12 @@ export default defineConfig({
};
if (mode === 'development') {
commonConfig.build!.sourcemap = 'inline';
commonConfig.plugins?.push(
Inspect({ build: true, outputDir: '.vite-inspect/renderer' }),
Inspect({
build: true,
outputDir: join(__dirname, '.vite-inspect/renderer'),
}),
);
return commonConfig;
}

80
eslint.config.mjs Normal file
View File

@ -0,0 +1,80 @@
//@ts-check
import eslint from '@eslint/js';
import prettier from 'eslint-plugin-prettier/recommended';
import stylistic from '@stylistic/eslint-plugin-js';
import tsEslint from 'typescript-eslint';
import * as importPlugin from 'eslint-plugin-import';
export default tsEslint.config(
eslint.configs.recommended,
tsEslint.configs.eslintRecommended,
...tsEslint.configs.recommendedTypeChecked,
prettier,
{ ignores: ['dist', 'node_modules', '*.config.*js', '*.test.*js'] },
{
plugins: {
stylistic,
importPlugin
},
languageOptions: {
parser: tsEslint.parser,
parserOptions: {
project: true,
sourceType: 'module',
ecmaVersion: 'latest'
}
},
rules: {
'stylistic/arrow-parens': ['error', 'always'],
'stylistic/object-curly-spacing': ['error', 'always'],
'prettier/prettier': ['error', { singleQuote: true, semi: true, tabWidth: 2, trailingComma: 'all', quoteProps: 'preserve' }],
'@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',
'importPlugin/first': 'error',
'importPlugin/newline-after-import': 'off',
'importPlugin/no-default-export': 'off',
'importPlugin/no-duplicates': 'error',
'importPlugin/no-unresolved': ['error', { ignore: ['^virtual:', '\\?inline$', '\\?raw$', '\\?asset&asarUnpack'] }],
'importPlugin/order': ['error', {
'groups': ['builtin', 'external', ['internal', 'index', 'sibling'], 'parent', 'type'],
'newlines-between': 'always-and-inside-groups',
'alphabetize': { order: 'ignore', caseInsensitive: false }
}],
'importPlugin/prefer-default-export': 'off',
'camelcase': ['error', { properties: 'never' }],
'class-methods-use-this': 'off',
'stylistic/lines-around-comment': ['error', {
beforeBlockComment: false,
afterBlockComment: false,
beforeLineComment: false,
afterLineComment: false,
}],
'stylistic/max-len': 'off',
'stylistic/no-mixed-operators': 'warn', // prettier does not support no-mixed-operators
'stylistic/no-multi-spaces': ['error', { ignoreEOLComments: true }],
'stylistic/no-tabs': 'error',
'no-void': 'error',
'no-empty': 'off',
'prefer-promise-reject-errors': 'off',
'stylistic/quotes': ['error', 'single', {
avoidEscape: true,
allowTemplateLiterals: false,
}],
'stylistic/quote-props': ['error', 'consistent'],
'stylistic/semi': ['error', 'always'],
},
settings: {
'import/parsers': {
'@typescript-eslint/parser': ['.ts']
},
'import/resolver': {
typescript: {},
exports: {},
},
},
},
);

View File

@ -1,7 +1,8 @@
{
"name": "youtube-music",
"desktopName": "com.github.th_ch.youtube_music",
"productName": "YouTube Music",
"version": "3.2.2",
"version": "3.7.0",
"description": "YouTube Music Desktop App - including custom plugins",
"main": "./dist/main/index.js",
"license": "MIT",
@ -21,7 +22,7 @@
"license",
"!node_modules",
"node_modules/custom-electron-prompt/**",
"node_modules/@cliqz/adblocker-electron-preload/**",
"node_modules/@ghostery/adblocker-electron-preload/**",
"node_modules/@ffmpeg.wasm/core-mt/**",
"!node_modules/**/*.map",
"!node_modules/**/*.ts"
@ -40,7 +41,8 @@
]
}
],
"icon": "assets/generated/icons/mac/icon.icns"
"icon": "assets/generated/icons/mac/icon.icns",
"compression": "maximum"
},
"win": {
"icon": "assets/generated/icons/win/icon.ico",
@ -61,7 +63,8 @@
"arm64"
]
}
]
],
"compression": "maximum"
},
"nsisWeb": {
"runAfterFinish": false
@ -69,17 +72,107 @@
"linux": {
"icon": "assets/generated/icons/png",
"category": "AudioVideo",
"desktop": {
"StartupWMClass": "com.github.th_ch.youtube_music"
},
"target": [
"AppImage",
"snap",
"freebsd",
"deb",
"rpm"
{
"target": "AppImage",
"arch": [
"x64",
"arm64",
"armv7l"
]
},
{
"target": "flatpak",
"arch": [
"x64"
]
},
{
"target": "deb",
"arch": [
"x64",
"arm64",
"armv7l"
]
},
{
"target": "rpm",
"arch": [
"x64",
"arm64"
]
},
{
"target": "snap",
"arch": [
"x64"
]
},
{
"target": "freebsd",
"arch": [
"x64",
"arm64",
"armv7l"
]
},
{
"target": "tar.gz",
"arch": [
"x64",
"arm64",
"armv7l"
]
}
]
},
"appImage": {
"description": "YouTube Music Desktop App bundled with custom plugins (and built-in ad blocker / downloader)",
"category": "AudioVideo"
},
"flatpak": {
"description": "YouTube Music Desktop App bundled with custom plugins (and built-in ad blocker / downloader)",
"category": "AudioVideo",
"runtimeVersion": "24.08",
"baseVersion": "24.08",
"finishArgs": [
"--socket=wayland",
"--socket=x11",
"--share=ipc",
"--device=dri",
"--socket=pulseaudio",
"--share=network",
"--filesystem=xdg-music:rw",
"--talk-name=org.freedesktop.Notifications",
"--talk-name=org.gnome.SessionManager",
"--talk-name=org.kde.StatusNotifierWatcher",
"--own-name=org.mpris.MediaPlayer2.YoutubeMusic.*"
]
},
"deb": {
"depends": [
"libgtk-3-0",
"libnotify4",
"libnss3",
"libxss1",
"libxtst6",
"xdg-utils",
"libatspi2.0-0",
"libuuid1",
"libasound2",
"libgbm1"
]
},
"rpm": {
"depends": [
"/usr/lib64/libuuid.so.1"
],
"fpm": [
"--rpm-rpmbuild-define",
"_build_id_links none"
]
},
"snap": {
@ -102,11 +195,14 @@
"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": "cross-env NODE_OPTIONS=--enable-source-maps electron-vite dev --watch",
"dev:renderer": "cross-env NODE_OPTIONS=--enable-source-maps electron-vite dev",
"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 && pnpm electron-builder --win --mac --linux -p never",
"dist:linux": "pnpm clean && pnpm build && pnpm electron-builder --linux -p never",
"dist:linux:deb-arm64": "pnpm clean && pnpm build && pnpm electron-builder --linux deb:arm64 -p never",
"dist:linux:rpm-arm64": "pnpm clean && pnpm build && pnpm electron-builder --linux rpm:arm64 -p never",
"dist:mac": "pnpm clean && pnpm build && pnpm electron-builder --mac dmg:x64 -p never",
"dist:mac:arm64": "pnpm clean && pnpm build && pnpm electron-builder --mac dmg:arm64 -p never",
"dist:win": "pnpm clean && pnpm build && pnpm electron-builder --win -p never",
@ -119,106 +215,127 @@
"typecheck": "tsc -p tsconfig.json --noEmit"
},
"engines": {
"node": ">=18.0.0"
"node": ">=18",
"pnpm": ">=8"
},
"pnpm": {
"overrides": {
"esbuild": "0.19.11",
"usocket": "1.0.1",
"rollup": "4.9.3",
"node-gyp": "10.0.1",
"node-gyp": "11.0.0",
"xml2js": "0.6.2",
"node-fetch": "3.3.2",
"@electron/universal": "2.0.1",
"@babel/runtime": "7.23.7"
"@babel/runtime": "7.26.0"
},
"patchedDependencies": {
"vudio@2.1.1": "patches/vudio@2.1.1.patch"
"vudio@2.1.1": "patches/vudio@2.1.1.patch",
"app-builder-lib@24.13.3": "patches/app-builder-lib@24.13.3.patch",
"@malept/flatpak-bundler": "patches/@malept__flatpak-bundler.patch"
}
},
"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",
"@electron/remote": "2.1.2",
"@ffmpeg.wasm/core-mt": "0.12.0",
"@ffmpeg.wasm/main": "0.12.0",
"@floating-ui/dom": "1.6.12",
"@foobar404/wave": "2.0.5",
"@ghostery/adblocker-electron": "2.3.1",
"@ghostery/adblocker-electron-preload": "2.3.1",
"@hono/node-server": "1.13.7",
"@hono/swagger-ui": "0.5.0",
"@hono/zod-openapi": "0.18.3",
"@hono/zod-validator": "0.4.2",
"@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",
"@jimp/plugin-invert": "0.22.12",
"@skyra/jaro-winkler": "1.1.1",
"@xhayper/discord-rpc": "1.2.0",
"async-mutex": "0.5.0",
"butterchurn": "3.0.0-beta.4",
"butterchurn-presets": "3.0.0-beta.4",
"color": "4.2.3",
"conf": "10.2.0",
"custom-electron-prompt": "1.5.7",
"conf": "13.1.0",
"custom-electron-prompt": "1.5.8",
"dbus-next": "0.10.2",
"deepmerge-ts": "5.1.0",
"electron-debug": "3.2.0",
"deepmerge-ts": "7.1.3",
"electron-debug": "4.1.0",
"electron-is": "3.0.0",
"electron-localshortcut": "3.2.1",
"electron-store": "8.1.0",
"electron-store": "10.0.0",
"electron-unhandled": "4.0.1",
"electron-updater": "6.1.7",
"electron-updater": "6.3.9",
"fast-average-color": "9.4.0",
"fast-equals": "5.0.1",
"filenamify": "6.0.0",
"hono": "4.6.14",
"howler": "2.2.4",
"html-to-text": "9.0.5",
"i18next": "23.7.16",
"i18next": "24.2.0",
"jimp": "1.6.0",
"keyboardevent-from-electron-accelerator": "2.0.0",
"keyboardevents-areequal": "0.2.2",
"node-html-parser": "6.1.12",
"node-html-parser": "6.1.13",
"node-id3": "0.2.6",
"peerjs": "1.5.2",
"semver": "7.5.4",
"serve": "14.2.1",
"peerjs": "1.5.4",
"semver": "7.6.3",
"serve": "14.2.4",
"simple-youtube-age-restriction-bypass": "github:organization/Simple-YouTube-Age-Restriction-Bypass#v2.5.9",
"ts-morph": "21.0.1",
"solid-floating-ui": "0.3.1",
"solid-js": "1.9.3",
"solid-styled-components": "0.28.5",
"solid-transition-group": "0.2.3",
"ts-morph": "24.0.0",
"vudio": "2.1.1",
"x11": "2.3.0",
"youtubei.js": "8.1.0"
"youtubei.js": "12.2.0",
"zod": "3.24.1"
},
"devDependencies": {
"@playwright/test": "1.41.0-alpha-jan-5-2024",
"@total-typescript/ts-reset": "0.5.1",
"@types/color": "3.0.6",
"@eslint/js": "9.17.0",
"@playwright/test": "1.49.1",
"@stylistic/eslint-plugin-js": "2.12.1",
"@total-typescript/ts-reset": "0.6.1",
"@types/color": "4.2.0",
"@types/electron-localshortcut": "3.1.3",
"@types/howler": "2.2.11",
"@types/eslint__js": "8.42.3",
"@types/howler": "2.2.12",
"@types/html-to-text": "9.0.4",
"@types/semver": "7.5.6",
"@typescript-eslint/eslint-plugin": "6.17.0",
"@types/semver": "7.5.8",
"@types/trusted-types": "2.0.7",
"bufferutil": "4.0.8",
"builtin-modules": "3.3.0",
"builtin-modules": "4.0.0",
"cross-env": "7.0.3",
"del-cli": "5.1.0",
"electron": "29.0.0-alpha.7",
"electron-builder": "24.9.1",
"electron-devtools-installer": "3.2.0",
"electron-vite": "2.0.0-beta.3",
"esbuild": "0.19.11",
"eslint": "8.56.0",
"del-cli": "6.0.0",
"discord-api-types": "0.37.114",
"electron": "33.2.1",
"electron-builder": "24.13.3",
"electron-devtools-installer": "4.0.0",
"electron-vite": "2.3.0",
"esbuild": "0.24.2",
"eslint": "9.17.0",
"eslint-config-prettier": "9.1.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.1.2",
"glob": "10.3.10",
"node-gyp": "10.0.1",
"playwright": "1.41.0-alpha-jan-5-2024",
"rollup": "4.9.3",
"typescript": "5.3.3",
"utf-8-validate": "6.0.3",
"vite": "5.0.11",
"vite-plugin-inspect": "0.8.1",
"vite-plugin-resolve": "2.5.1",
"ws": "8.16.0"
"eslint-import-resolver-typescript": "3.7.0",
"eslint-plugin-import": "2.31.0",
"eslint-plugin-prettier": "5.2.1",
"glob": "11.0.0",
"node-gyp": "11.0.0",
"playwright": "1.49.1",
"rollup": "4.29.1",
"typescript": "5.7.2",
"typescript-eslint": "8.18.2",
"utf-8-validate": "6.0.5",
"vite": "6.0.5",
"vite-plugin-inspect": "0.10.6",
"vite-plugin-resolve": "2.5.2",
"vite-plugin-solid": "2.11.0",
"ws": "8.18.0"
},
"auto-changelog": {
"hideCredit": true,
"package": true,
"unreleased": true,
"output": "changelog.md"
},
"packageManager": "pnpm@8.14.0"
}
}

View File

@ -0,0 +1,29 @@
diff --git a/index.js b/index.js
index 5968fcf47b69094993b0f861c03f5560e4a6a9b7..0fe16d4f40612c0abfa57898909ce0083f56944c 100644
--- a/index.js
+++ b/index.js
@@ -56,19 +56,23 @@ function getOptionsWithDefaults (options, manifest) {
async function spawnWithLogging (options, command, args, allowFail) {
return new Promise((resolve, reject) => {
logger(`$ ${command} ${args.join(' ')}`)
+ const output = []
const child = childProcess.spawn(command, args, { cwd: options['working-dir'] })
child.stdout.on('data', (data) => {
+ output.push(data)
logger(`1> ${data}`)
})
child.stderr.on('data', (data) => {
+ output.push(data)
logger(`2> ${data}`)
})
child.on('error', (error) => {
+ logger(`error - ${error.message} ${error.stack}`)
reject(error)
})
child.on('close', (code) => {
if (!allowFail && code !== 0) {
- reject(new Error(`${command} failed with status code ${code}`))
+ reject(new Error(`${command} ${args.join(' ')} failed with status code ${code} ${output.join(' ')}`))
}
resolve(code === 0)
})

View File

@ -0,0 +1,21 @@
diff --git a/out/targets/snap.js b/out/targets/snap.js
index f72c36355d27cd2d69fc5fdf2d8bb2451db0287f..baae112fe25ebb49ab8e25aaa48efd6bc43b598f 100644
--- a/out/targets/snap.js
+++ b/out/targets/snap.js
@@ -212,14 +212,14 @@ class SnapTarget extends core_1.Target {
args.push("--template-url", `electron4:${snapArch}`);
}
await (0, builder_util_1.executeAppBuilder)(args);
- const publishConfig = findSnapPublishConfig(this.packager.config);
+
await packager.info.callArtifactBuildCompleted({
file: artifactPath,
safeArtifactName: packager.computeSafeArtifactName(artifactName, "snap", arch, false),
target: this,
arch,
packager,
- publishConfig: publishConfig == null ? { provider: "snapStore" } : publishConfig,
+ publishConfig: options.publish == null ? { provider: "snapStore" } : null,
});
}
isElectronVersionGreaterOrEqualThan(version) {

View File

@ -0,0 +1,161 @@
diff --git a/lib/importDeclaration.js b/lib/importDeclaration.js
index afb4de779034cfea080825a5f4320661c48bee32..f10b0a11a39577fbd42569e6b0e768255c1ef276 100644
--- a/lib/importDeclaration.js
+++ b/lib/importDeclaration.js
@@ -1,5 +1,5 @@
-"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports["default"] = importDeclaration;function importDeclaration(context) {
- var ancestors = context.getAncestors();
+"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports["default"] = importDeclaration;function importDeclaration(context, node) {
+ var ancestors = context.getSourceCode().getAncestors(node);
return ancestors[ancestors.length - 1];
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbXBvcnREZWNsYXJhdGlvbi5qcyJdLCJuYW1lcyI6WyJpbXBvcnREZWNsYXJhdGlvbiIsImNvbnRleHQiLCJhbmNlc3RvcnMiLCJnZXRBbmNlc3RvcnMiLCJsZW5ndGgiXSwibWFwcGluZ3MiOiJnR0FBd0JBLGlCLENBQVQsU0FBU0EsaUJBQVQsQ0FBMkJDLE9BQTNCLEVBQW9DO0FBQ2pELE1BQU1DLFlBQVlELFFBQVFFLFlBQVIsRUFBbEI7QUFDQSxTQUFPRCxVQUFVQSxVQUFVRSxNQUFWLEdBQW1CLENBQTdCLENBQVA7QUFDRCIsImZpbGUiOiJpbXBvcnREZWNsYXJhdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGltcG9ydERlY2xhcmF0aW9uKGNvbnRleHQpIHtcbiAgY29uc3QgYW5jZXN0b3JzID0gY29udGV4dC5nZXRBbmNlc3RvcnMoKTtcbiAgcmV0dXJuIGFuY2VzdG9yc1thbmNlc3RvcnMubGVuZ3RoIC0gMV07XG59XG4iXX0=
\ No newline at end of file
diff --git a/lib/rules/first.js b/lib/rules/first.js
index a77168660cf32c8c3e96f3ff4b8240a36d7de3a6..c0e00d75f9989916057fef3999eeee8d21820292 100644
--- a/lib/rules/first.js
+++ b/lib/rules/first.js
@@ -66,7 +66,7 @@ module.exports = {
}
}
if (nonImportCount > 0) {var _iteratorNormalCompletion = true;var _didIteratorError = false;var _iteratorError = undefined;try {
- for (var _iterator = context.getDeclaredVariables(node)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {var variable = _step.value;
+ for (var _iterator = sourceCode.getDeclaredVariables(node)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {var variable = _step.value;
if (!shouldSort) {break;}
var references = variable.references;
if (references.length) {var _iteratorNormalCompletion2 = true;var _didIteratorError2 = false;var _iteratorError2 = undefined;try {
diff --git a/lib/rules/namespace.js b/lib/rules/namespace.js
index 574d89a60d15c7e0e712956ea6a3ad2d0eac7f08..82e7cb3cff4246592d762cce86323f2b72de92e4 100644
--- a/lib/rules/namespace.js
+++ b/lib/rules/namespace.js
@@ -86,7 +86,7 @@ module.exports = {
// same as above, but does not add names to local map
ExportNamespaceSpecifier: function () {function ExportNamespaceSpecifier(namespace) {
- var declaration = (0, _importDeclaration2['default'])(context);
+ var declaration = (0, _importDeclaration2['default'])(context, namespace);
var imports = _ExportMap2['default'].get(declaration.source.value, context);
if (imports == null) {return null;}
diff --git a/lib/rules/newline-after-import.js b/lib/rules/newline-after-import.js
index 6cc15686464a17803a0b976c35b99627cdbfabee..520eec6d9a375527ab72c459960fe4416c046c17 100644
--- a/lib/rules/newline-after-import.js
+++ b/lib/rules/newline-after-import.js
@@ -194,7 +194,7 @@ module.exports = {
}return CallExpression;}(),
'Program:exit': function () {function ProgramExit() {
log('exit processing for', context.getPhysicalFilename ? context.getPhysicalFilename() : context.getFilename());
- var scopeBody = getScopeBody(context.getScope());
+ var scopeBody = getScopeBody(context.getSourceCode().getScope(node));
log('got scope:', scopeBody);
requireCalls.forEach(function (node, index) {
diff --git a/lib/rules/no-amd.js b/lib/rules/no-amd.js
index 7ac108bf812ca4f78bfa6fe5ae8b9cf38e2ff497..346c3105dc70f72c4d76fcc6b96b946d1d4ec6d5 100644
--- a/lib/rules/no-amd.js
+++ b/lib/rules/no-amd.js
@@ -23,7 +23,7 @@ module.exports = {
create: function () {function create(context) {
return {
CallExpression: function () {function CallExpression(node) {
- if (context.getScope().type !== 'module') {return;}
+ if (context.getSourceCode().getScope(node).type !== 'module') {return;}
if (node.callee.type !== 'Identifier') {return;}
if (node.callee.name !== 'require' && node.callee.name !== 'define') {return;}
diff --git a/lib/rules/no-commonjs.js b/lib/rules/no-commonjs.js
index befeff0026d61d3ac1e6bbcea29f5c471dc1d353..e91c5ed34e968d5867e884ea800e166cda345aef 100644
--- a/lib/rules/no-commonjs.js
+++ b/lib/rules/no-commonjs.js
@@ -107,7 +107,7 @@ module.exports = {
// exports.
if (node.object.name === 'exports') {
- var isInScope = context.getScope().
+ var isInScope = context.getSourceCode().getScope(node).
variables.
some(function (variable) {return variable.name === 'exports';});
if (!isInScope) {
@@ -117,7 +117,7 @@ module.exports = {
}return MemberExpression;}(),
CallExpression: function () {function CallExpression(call) {
- if (!validateScope(context.getScope())) {return;}
+ if (!validateScope(context.getSourceCode().getScope(call))) {return;}
if (call.callee.type !== 'Identifier') {return;}
if (call.callee.name !== 'require') {return;}
diff --git a/lib/rules/no-mutable-exports.js b/lib/rules/no-mutable-exports.js
index 40bd1b4cfa95d41732bb13bba0ed1969a91cc7ff..8a25abfbfadb299204b36a6cbf283259bcc2e790 100644
--- a/lib/rules/no-mutable-exports.js
+++ b/lib/rules/no-mutable-exports.js
@@ -32,7 +32,7 @@ module.exports = {
}
function handleExportDefault(node) {
- var scope = context.getScope();
+ var scope = context.getSourceCode().getScope(node);
if (node.declaration.name) {
checkDeclarationsInScope(scope, node.declaration.name);
@@ -40,7 +40,7 @@ module.exports = {
}
function handleExportNamed(node) {
- var scope = context.getScope();
+ var scope = context.getSourceCode().getScope(node);
if (node.declaration) {
checkDeclaration(node.declaration);
diff --git a/lib/rules/no-named-as-default-member.js b/lib/rules/no-named-as-default-member.js
index 0c15051e027ad7d1d45f1b51c20be1c000b0af01..5b3d6ba415511b7f9f83a52e1acfebe5a1045a7b 100644
--- a/lib/rules/no-named-as-default-member.js
+++ b/lib/rules/no-named-as-default-member.js
@@ -35,7 +35,7 @@ module.exports = {
return {
ImportDefaultSpecifier: function () {function ImportDefaultSpecifier(node) {
- var declaration = (0, _importDeclaration2['default'])(context);
+ var declaration = (0, _importDeclaration2['default'])(context, node);
var exportMap = _ExportMap2['default'].get(declaration.source.value, context);
if (exportMap == null) {return;}
diff --git a/lib/rules/no-named-as-default.js b/lib/rules/no-named-as-default.js
index 63378a33a1c7da004c57a524cec1a1cddf23e210..c81b1f93b11628676158b79f1c4015911943cc7d 100644
--- a/lib/rules/no-named-as-default.js
+++ b/lib/rules/no-named-as-default.js
@@ -18,7 +18,7 @@ module.exports = {
// #566: default is a valid specifier
if (defaultSpecifier[nameKey].name === 'default') {return;}
- var declaration = (0, _importDeclaration2['default'])(context);
+ var declaration = (0, _importDeclaration2['default'])(context, defaultSpecifier);
var imports = _ExportMap2['default'].get(declaration.source.value, context);
if (imports == null) {return;}
diff --git a/lib/rules/no-namespace.js b/lib/rules/no-namespace.js
index 2b0c783adea788101b779b17f977bbcb582cfd3f..a7f7b202ac7c4a342febef2a993586c4cc84fc7a 100644
--- a/lib/rules/no-namespace.js
+++ b/lib/rules/no-namespace.js
@@ -43,7 +43,7 @@ var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_doc
return;
}
- var scopeVariables = context.getScope().variables;
+ var scopeVariables = context.getSourceCode().getScope(node).variables;
var namespaceVariable = scopeVariables.find(function (variable) {return variable.defs[0].node === node;});
var namespaceReferences = namespaceVariable.references;
var namespaceIdentifiers = namespaceReferences.map(function (reference) {return reference.identifier;});
diff --git a/package.json b/package.json
index 5c0af48543483a21791fa23a4a583071d3551772..5deeac3d0accc3878ef0fc93dfb52a8ca7c46e84 100644
--- a/package.json
+++ b/package.json
@@ -72,7 +72,7 @@
"chai": "^4.3.10",
"cross-env": "^4.0.0",
"escope": "^3.6.0",
- "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8",
+ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9",
"eslint-doc-generator": "^1.6.1",
"eslint-import-resolver-node": "file:./resolvers/node",
"eslint-import-resolver-typescript": "^1.0.2 || ^1.1.1",

11671
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@ -32,6 +32,7 @@ export interface DefaultConfig {
proxy: string;
startingPage: string;
overrideUserAgent: boolean;
usePodcastParticipantAsArtist: boolean;
themes: string[];
};
plugins: Record<string, unknown>;
@ -66,6 +67,7 @@ const defaultConfig: DefaultConfig = {
proxy: '',
startingPage: '',
overrideUserAgent: false,
usePodcastParticipantAsArtist: false,
themes: [],
},
'plugins': {},

View File

@ -1,13 +1,16 @@
import Store from 'electron-store';
import { deepmerge } from 'deepmerge-ts';
import { deepmergeCustom } from 'deepmerge-ts';
import defaultConfig from './defaults';
import store from './store';
import store, { IStore } from './store';
import plugins from './plugins';
import { restart } from '@/providers/app-controls';
const deepmerge = deepmergeCustom({
mergeArrays: false,
});
const set = (key: string, value: unknown) => {
store.set(key, value);
};
@ -58,20 +61,19 @@ type Join<K, P> = K extends string | number
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]
: '';
? {
[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;
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>;
@ -82,7 +84,7 @@ export default {
setPartial,
setMenuOption,
edit: () => store.openInEditor(),
watch(cb: Parameters<Store['onDidAnyChange']>[0]) {
watch(cb: Parameters<IStore['onDidAnyChange']>[0]) {
store.onDidAnyChange(cb);
},
plugins,

View File

@ -1,12 +1,64 @@
import Store from 'electron-store';
import Conf from 'conf';
import defaults from './defaults';
import { DefaultPresetList, type Preset } from '@/plugins/downloader/types';
// prettier-ignore
export type IStore = InstanceType<typeof import('conf/dist/source/index').default<Record<string, unknown>>>;
const migrations = {
'>=3.0.0'(store: Conf<Record<string, unknown>>) {
'>=3.3.0'(store: IStore) {
const lastfmConfig = store.get('plugins.lastfm') as {
enabled?: boolean;
token?: string;
session_key?: string;
api_root?: string;
api_key?: string;
secret?: string;
};
if (lastfmConfig) {
let scrobblerConfig = store.get('plugins.scrobbler') as
| {
enabled?: boolean;
scrobblers?: {
lastfm?: {
enabled?: boolean;
token?: string;
sessionKey?: string;
apiRoot?: string;
apiKey?: string;
secret?: string;
};
};
}
| undefined;
if (!scrobblerConfig) {
scrobblerConfig = {
enabled: lastfmConfig.enabled,
};
}
if (!scrobblerConfig.scrobblers) {
scrobblerConfig.scrobblers = {
lastfm: {},
};
}
scrobblerConfig.scrobblers.lastfm = {
enabled: lastfmConfig.enabled,
token: lastfmConfig.token,
sessionKey: lastfmConfig.session_key,
apiRoot: lastfmConfig.api_root,
apiKey: lastfmConfig.api_key,
secret: lastfmConfig.secret,
};
store.set('plugins.scrobbler', scrobblerConfig);
store.delete('plugins.lastfm');
}
},
'>=3.0.0'(store: IStore) {
const discordConfig = store.get('plugins.discord') as Record<
string,
unknown
@ -28,14 +80,14 @@ const migrations = {
}
}
},
'>=2.1.3'(store: Conf<Record<string, unknown>>) {
'>=2.1.3'(store: IStore) {
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>>) {
'>=2.1.0'(store: IStore) {
const originalPreset = store.get('plugins.downloader.preset') as
| string
| undefined;
@ -60,7 +112,7 @@ const migrations = {
store.delete('plugins.downloader.ffmpegArgs');
}
},
'>=1.20.0'(store: Conf<Record<string, unknown>>) {
'>=1.20.0'(store: IStore) {
store.delete('plugins.visualizer'); // default value is now in the plugin
if (store.get('plugins.notifications.toastStyle') === undefined) {
@ -75,14 +127,14 @@ const migrations = {
store.set('options.likeButtons', 'force');
}
},
'>=1.17.0'(store: Conf<Record<string, unknown>>) {
'>=1.17.0'(store: IStore) {
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>>) {
'>=1.14.0'(store: IStore) {
if (
typeof store.get('plugins.precise-volume.globalShortcuts') !== 'object'
) {
@ -94,12 +146,12 @@ const migrations = {
store.set('plugins.video-toggle.enabled', true);
}
},
'>=1.13.0'(store: Conf<Record<string, unknown>>) {
'>=1.13.0'(store: IStore) {
if (store.get('plugins.discord.listenAlong') === undefined) {
store.set('plugins.discord.listenAlong', true);
}
},
'>=1.12.0'(store: Conf<Record<string, unknown>>) {
'>=1.12.0'(store: IStore) {
const options = store.get('plugins.shortcuts') as
| Record<
string,
@ -137,12 +189,12 @@ const migrations = {
}
}
},
'>=1.11.0'(store: Conf<Record<string, unknown>>) {
'>=1.11.0'(store: IStore) {
if (store.get('options.resumeOnStart') === undefined) {
store.set('options.resumeOnStart', true);
}
},
'>=1.7.0'(store: Conf<Record<string, unknown>>) {
'>=1.7.0'(store: IStore) {
const enabledPlugins = store.get('plugins') as string[];
if (!Array.isArray(enabledPlugins)) {
console.warn('Plugins are not in array format, cannot migrate');
@ -183,4 +235,4 @@ export default new Store({
},
clearInvalidConfig: false,
migrations,
});
}) as Store & IStore;

View File

@ -64,29 +64,29 @@ declare module 'custom-electron-prompt' {
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;
? 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;
? 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 },

326
src/i18n/resources/ar.json Normal file
View File

@ -0,0 +1,326 @@
{
"common": {
"console": {
"plugins": {
"execute-failed": "فشل تشغيل الاضافة {{pluginName}}::{{contextName}}",
"executed-at-ms": "تم تشغيل الاضافة {{pluginName}}::{{contextName}} خلال {{ms}} جزء من الثانية",
"initialize-failed": "فشل تنفيذ الاضافة \"{{pluginName}}\"",
"load-all": "جاري تحميل جميع الاضافات",
"load-failed": "فشل في تحميل الاضافة \"{{pluginName}}\"",
"loaded": "تم تحميل الاضافة \"{{pluginName}}\"",
"unload-failed": "فشل ازالة الاضافة \"{{pluginName}}\"",
"unloaded": "تم ازالة الاضافة \"{{pluginName}}\""
}
}
},
"language": {
"code": "ar",
"local-name": "العربية",
"name": "Arabic"
},
"main": {
"console": {
"did-finish-load": {
"dev-tools": "انتهى التحميل, تم فتح قائمة المطور"
},
"i18n": {
"loaded": "تم تحميل i18n"
},
"second-instance": {
"receive-command": "تم الحصول على أمر عن طريق: \"{{command}}\""
},
"theme": {
"css-file-not-found": "ملف \"{{cssFile}}\" غير متواجد,سيتم التجاهل"
},
"unresponsive": {
"details": "خطء عدم استجابة!\n{{error}}"
},
"when-ready": {
"clearing-cache-after-20s": "ازالة بيانات التطبيق المخزنة"
},
"window": {
"tried-to-render-offscreen": "تم محاولة فتح الصفحة خارج الشاشة, حجم الصفحة={{windowSize}}, حجم الشاشة={{displaySize}}, مكان={{position}}"
}
},
"dialog": {
"hide-menu-enabled": {
"detail": "تم اخفاء القائمة, استخدم 'Alt' لاظهار القائمة (أو 'Escape' اذا كنت تستخدم القائمة داخل التطبيق)",
"message": "اخفاء القائمة مفعل",
"title": "تم تفعيل اخفاء القائمة"
},
"need-to-restart": {
"buttons": {
"later": "لاحقاً",
"restart-now": "اعادة التشغيل الأن"
},
"detail": "\"{{pluginName}}\" هذه الاضافة تتطلب اعادة التشغيل ليتم تفعيلها",
"message": "\"{{pluginName}}\" بحاجة الى اعادة التشغيل",
"title": "مطلوب اعادة التشغيل"
},
"unresponsive": {
"buttons": {
"quit": "خروج",
"relaunch": "اعادة التشغيل",
"wait": "انتظار"
},
"detail": "نأسف على الإزعاج! يرجى اختيار ما يجب القيام به:",
"message": "التطبيق لا يستجيب",
"title": "الصفحة لا تستجيب"
},
"update-available": {
"buttons": {
"disable": "ايقاف التحديثات",
"download": "تحميل",
"ok": "موافق"
},
"detail": "يوجد نسخة جديدة يمكن تحميلها من خلال {{downloadLink}}",
"message": "يوجد نسخة حديثة",
"title": "يوجد تحديث"
}
},
"menu": {
"about": "عنا",
"navigation": {
"label": "التنقل",
"submenu": {
"copy-current-url": "نسخ الرابط الحالي",
"go-back": "العودة للخلف",
"go-forward": "التقدم",
"quit": "الخروج",
"restart": "اعادة تشغيل التطبيق"
}
},
"options": {
"label": "الاعدادات",
"submenu": {
"advanced-options": {
"label": "الاعدادات المتقدمة",
"submenu": {
"auto-reset-app-cache": "إعادة تعيين ذاكرة التخزين المؤقت للتطبيق عند بدء التشغيل",
"disable-hardware-acceleration": "تعطيل تسريع الأجهزة",
"edit-config-json": "تعديل ملف الاعدادات",
"override-user-agent": "تجاوز وكيل المستخدم",
"restart-on-config-changes": "اعادة التشغيل بعد تعديل الاعدادات",
"set-proxy": {
"label": "تعيين الوكيل",
"prompt": {
"label": "أدخل عنوان الوكيل: (اتركه فارغًا للتعطيل)",
"placeholder": "مثال: SOCKS5://127.0.0.1:9999",
"title": "اضافة الوكيل"
}
},
"toggle-dev-tools": "تثبيت أدوات التطوير"
}
},
"always-on-top": "دائما في القمة",
"auto-update": "تحديث تلقائي",
"hide-menu": {
"dialog": {
"message": "سيتم إخفاء القائمة عند التشغيل التالي، استخدم [Alt] لإظهارها (أو ضع علامة اختيار على [`] في حالة استخدام القائمة داخل التطبيق)",
"title": "إخفاء القائمة ممكن"
},
"label": "إخفاء القائمة"
},
"language": {
"dialog": {
"message": "سيتم تغيير اللغة بعد اعادة التشغيل",
"title": "تم تغير اللغة"
},
"label": "اللغة",
"submenu": {
"to-help-translate": "تريد المساعدة في الترجمة؟ اضغط هنا"
}
},
"resume-on-start": "تكملة الأغنية الأخيرة عند بدأ التشغيل",
"single-instance-lock": "قفل مثيل واحد",
"start-at-login": "‎ابدأ عند تسجيل الدخول",
"starting-page": {
"label": "صفحة البداية",
"unset": "الغاء"
},
"tray": {
"label": "قائمة",
"submenu": {
"disabled": "غير مفعل",
"enabled-and-hide-app": "تمكين وإخفاء التطبيق",
"enabled-and-show-app": "ممكين وأظهر التطبيق",
"play-pause-on-click": "تشغيل/إيقاف مؤقت عند النقر"
}
},
"visual-tweaks": {
"label": "تعديلات المظهر",
"submenu": {
"like-buttons": {
"default": "الافتراضي",
"force-show": "اجبار الظهور",
"hide": "اخفاء",
"label": "أزرار الاعجاب"
},
"remove-upgrade-button": "ازالة زرار التطوير",
"theme": {
"dialog": {
"button": {
"cancel": "إلغاء",
"remove": "ازالة"
},
"remove-theme": "هل أنت متأكد أنك تريد إزالة السمة المخصصة؟",
"remove-theme-message": "سيؤدي هذا إلى إزالة السمة المخصصة"
},
"label": "السمة",
"submenu": {
"import-css-file": "استيراد ملف CSS مخصص",
"no-theme": "بدون سمة"
}
}
}
}
}
},
"plugins": {
"enabled": "مفعل",
"label": "الاضافات",
"new": "جديد"
},
"view": {
"label": "اظهار",
"submenu": {
"force-reload": "اجبار اعادة التحميل",
"reload": "اعادة التحميل",
"reset-zoom": "الحجم الحقيقي",
"toggle-fullscreen": "ملء الشاشة",
"zoom-in": "تكبير",
"zoom-out": "تصغير"
}
}
},
"tray": {
"next": "التالي",
"play-pause": "تشغيل/إيقاف",
"previous": "السابق",
"quit": "خروج",
"restart": "إعادة تشغيل التطبيق",
"show": "عرض النافدة",
"tooltip": {
"default": "يوتيوب اغاني",
"with-song-info": "يوتيوب أغاني: {{الفنان}}-{{العنوان}}"
}
}
},
"plugins": {
"ad-speedup": {
"description": "إذا تم عرض إعلان, فإن الصوت سيتم كتمانه وسيتم وضع سرعة التشغيل الى 16x",
"name": "تسريع الإعلان"
},
"adblocker": {
"description": "حجب جميع الإعلانات والمتتبعات جاهز للأستخدام",
"menu": {
"blocker": "حاجب الإعلانات"
},
"name": "حاجب الإعلانات"
},
"album-actions": {
"description": "يضيف أزرار \"إلغاء عدم الإعجاب\"، \"عدم الإعجاب\"، \"الإعجاب\"، و\"إلغاء الإعجاب\" لتطبيقها على جميع الأغاني في قائمة التشغيل أو الألبوم",
"name": "إجراءات الألبوم"
},
"album-color-theme": {
"description": "يطبق ثيمًا ديناميكيًا وتأثيرات بصرية بناء على ألوان الألبوم",
"menu": {
"color-mix-ratio": {
"label": "‬نسبة قوة اللون",
"submenu": {
"percent": "{{ratio}}%"
}
}
},
"name": "ثيم ألوان الألبوم"
},
"ambient-mode": {
"description": "يطبق تأثير إضاءة عن طريق إسقاط ألوان ناعمة من الفيديو على خلفية شاشتك",
"menu": {
"blur-amount": {
"label": "مقدار التمويه",
"submenu": {
"pixels": "{{blurAmount}} بكسل"
}
},
"buffer": {
"label": "تخزين الصوت الؤقت",
"submenu": {
"buffer": "{{buffer}}"
}
},
"opacity": {
"label": "الشفافية",
"submenu": {
"percent": "{{opacity}}%"
}
},
"quality": {
"label": "الجودة",
"submenu": {
"pixels": "{{quality}} بكسل"
}
},
"size": {
"label": "الحجم",
"submenu": {
"percent": "{{size}}%"
}
},
"smoothness-transition": {
"label": "انتقال السلاسة",
"submenu": {
"during": "خلال {{interpolationTime}} ثانيه"
}
},
"use-fullscreen": {
"label": "استخدام شاشه كامله"
}
},
"name": "الوضع المحيطي"
},
"api-server": {
"description": "يضيف خادم للتحكم في المشغل",
"dialog": {
"request": {
"buttons": {
"allow": "سماح",
"deny": "رفض"
}
}
},
"menu": {
"hostname": {
"label": "اسم المضيف"
}
},
"prompt": {
"hostname": {
"title": "اسم الخادم"
}
}
},
"blur-nav-bar": {
"description": "يجعل شريط التنقل شفاف و ضبابي"
},
"bypass-age-restrictions": {
"description": "تجاوز تَحَقّق اليوتيوب من السن",
"name": "تجاوز التحقق من السن"
},
"downloader": {
"backend": {
"feedback": {
"downloading-counter": "تنزيل {{current}}/{{total}}…",
"error-while-downloading": "خطأ في تحميل \"{{author}} - {{title}}\": {{error}}",
"loading": "جار التحميل…",
"preparing-file": "يتم تجهيز الملف…",
"saving": "يتم الحفظ…",
"video-id-not-found": "لم يتم ايجاد الفيديو"
}
},
"menu": {
"choose-download-folder": "اختر مكان التحميل"
}
}
}
}

178
src/i18n/resources/bg.json Normal file
View File

@ -0,0 +1,178 @@
{
"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": "bg",
"local-name": "Български",
"name": "Bulgarian"
},
"main": {
"console": {
"did-finish-load": {
"dev-tools": "Завърши зареждането. DevTools отворени"
},
"i18n": {
"loaded": "i18n заредено"
},
"second-instance": {
"receive-command": "Получена команда чрез протокол: \"{{command}}\""
},
"theme": {
"css-file-not-found": "CSS файл \"{{cssFile}}\" не съществува, ингнорира се"
},
"unresponsive": {
"details": "Грешка без отговор!\n{{error}}"
},
"when-ready": {
"clearing-cache-after-20s": "Изчистване на кешът на аппа"
},
"window": {
"tried-to-render-offscreen": "Прозореца се опита да се изрисува извън екрана, windowSize={{windowSize}}, displaySize={{displaySize}}, position={{position}}"
}
},
"dialog": {
"hide-menu-enabled": {
"detail": "Менюто е скрито. Използвайте \"Alt\", за да го покажете, или \"Escape\", ако използвате менюто в приложението",
"message": "\"Скриване на менюто\" е активирано",
"title": "\"Скриване на менюто\" активирано"
},
"need-to-restart": {
"buttons": {
"later": "По-късно",
"restart-now": "Рестартиране сега"
},
"detail": "\"{{pluginName}}\" плъгинът изисква рестартиране, за да влезе в сила",
"message": "\"{{pluginName}}\" трябва да рестартира",
"title": "Изисква се рестартиране"
},
"unresponsive": {
"buttons": {
"quit": "Прекратяване",
"relaunch": "Повторно стартиране",
"wait": "Изчакване"
},
"detail": "Съжаляваме за неудобството! Моля, изберете какво да направите:",
"message": "Приложението не реагира",
"title": "Прозорецът не реагира"
},
"update-available": {
"buttons": {
"disable": "Деактивиране на актуализациите",
"download": "Изтегляне",
"ok": "Добре"
},
"detail": "Налична е нова версия, която можете да изтеглите от {{downloadLink}}",
"message": "Налична е нова версия",
"title": "Налична е актуализация"
}
},
"menu": {
"about": "За нас",
"navigation": {
"label": "Навигация",
"submenu": {
"copy-current-url": "Копиране на текущия URL адрес",
"go-back": "Назад",
"go-forward": "Напред",
"quit": "Изход",
"restart": "Рестартиране на приложението"
}
},
"options": {
"label": "Опции",
"submenu": {
"advanced-options": {
"label": "Разширени опции",
"submenu": {
"auto-reset-app-cache": "Нулиране на кеша на приложението при стартиране на приложението",
"disable-hardware-acceleration": "Деактивиране на хардуерното ускорение",
"edit-config-json": "Редактиране на config.json",
"override-user-agent": "Замяна на 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": "Плъгини",
"new": "НОВО"
}
}
}
}

813
src/i18n/resources/ca.json Normal file
View File

@ -0,0 +1,813 @@
{
"common": {
"console": {
"plugins": {
"execute-failed": "Ha fallat l'execució de l'extensió {{pluginName}}::{{contextName}}",
"executed-at-ms": "L'extensió {{pluginName}}::{{contextName}} s'ha executat als {{ms}}ms",
"initialize-failed": "Ha fallat la inicialització de l'extensió «{{pluginName}}»",
"load-all": "Carregant totes les extensions",
"load-failed": "Error al carregar l'extensió «{{pluginName}}»",
"loaded": "L'extensió «{{pluginName}}» s'ha carregat",
"unload-failed": "Error al deshabilitar l'extensió «{{pluginName}}»",
"unloaded": "Extensió «{{pluginName}}» deshabilitada"
}
}
},
"language": {
"code": "ca",
"local-name": "Català",
"name": "Catalan"
},
"main": {
"console": {
"did-finish-load": {
"dev-tools": "Càrrega finalitzada. S'han obert les DevTools"
},
"i18n": {
"loaded": "i18n carregat"
},
"second-instance": {
"receive-command": "Comanda rebuda a través del protocol: «{{command}}»"
},
"theme": {
"css-file-not-found": "L'arxiu CSS «{{cssFile}}» no existeix, s'ha ignorat"
},
"unresponsive": {
"details": "Error sense resposta!\n{{error}}"
},
"when-ready": {
"clearing-cache-after-20s": "Netejant la memòria cau de l'aplicació"
},
"window": {
"tried-to-render-offscreen": "La finestra s'ha intentat mostrar fora de la pantalla, windowSize={{windowSize}}, displaySize={{displaySize}}, position={{position}}"
}
},
"dialog": {
"hide-menu-enabled": {
"detail": "El menú es troba amagat, premi «Alt» per mostrar-lo (o «Escapament» si utilitza el menú integrat In-App)",
"message": "S'ha habilitat l'amagament del menú",
"title": "Amagament del menú habilitat"
},
"need-to-restart": {
"buttons": {
"later": "Més tard",
"restart-now": "Reinicia ara"
},
"detail": "L'extensió «{{pluginName}}» requereix reiniciar l'aplicació per fer tenir efecte",
"message": "\"{{pluginName}}\" necessita reiniciar-se",
"title": "Es requereix reiniciar"
},
"unresponsive": {
"buttons": {
"quit": "Marxar",
"relaunch": "Rellançar",
"wait": "Espera"
},
"detail": "Ho sentim per les molèsties! si us plau, tria què fer:",
"message": "L'aplicació ha deixat de respondre",
"title": "La finestra ha deixat de respondre"
},
"update-available": {
"buttons": {
"disable": "Deshabilita les actualitzacions",
"download": "Descarrega",
"ok": "D'acord"
},
"detail": "Hi ha una nova versió disponible i pot ser descarregada a {{downloadLink}}",
"message": "Hi ha una nova versió disponible",
"title": "Actualització disponible"
}
},
"menu": {
"about": "Quant a",
"navigation": {
"label": "Navegació",
"submenu": {
"copy-current-url": "Copia l'URL actual",
"go-back": "Ves enrere",
"go-forward": "Ves endavant",
"quit": "Surt",
"restart": "Reinicia l'aplicació"
}
},
"options": {
"label": "Opcions",
"submenu": {
"advanced-options": {
"label": "Opcions avançades",
"submenu": {
"auto-reset-app-cache": "Reinicialitza la memòria cau de l'aplicació quan es reiniciï",
"disable-hardware-acceleration": "Deshabilita l'acceleració per hardware",
"edit-config-json": "Edita el config.json",
"override-user-agent": "Sobreescriu l'agent d'usuari (User-Agent)",
"restart-on-config-changes": "Reinicia quan es canviï la configuració",
"set-proxy": {
"label": "Definir servidor intermediari (proxy)",
"prompt": {
"label": "Introduir l'adreça del servidor intermediari: (deixar en blanc per deshabilitar)",
"placeholder": "Exemple: SOCKS5://127.0.0.1:9999",
"title": "Definir servidor intermediari (proxy)"
}
},
"toggle-dev-tools": "Commuta les DevTools"
}
},
"always-on-top": "Mostra sempre per sobre",
"auto-update": "Actualitza automàticament",
"hide-menu": {
"dialog": {
"message": "El menú s'amagarà la següent vegada que s'iniciï l'aplicació, prem «Alt» per mostrar-lo (o accent obert « ` » si utilitza el menú integrat In-App)",
"title": "Amagament del menú habilitat"
},
"label": "Amaga el menú"
},
"language": {
"dialog": {
"message": "L'idioma es canviarà un cop es reiniciï",
"title": "Idioma canviat"
},
"label": "Idioma",
"submenu": {
"to-help-translate": "Vols ajudar a traduir? Clica aquí"
}
},
"resume-on-start": "Reprèn l'última cançó quan s'inicia l'aplicació",
"single-instance-lock": "Bloqueja en una única instància",
"start-at-login": "Obre a l'iniciar sessió",
"starting-page": {
"label": "Pàgina d'inici",
"unset": "Sense establir"
},
"tray": {
"label": "Safata d'icones",
"submenu": {
"disabled": "Deshabilitat",
"enabled-and-hide-app": "Mostra la icona i amaga l'aplicació",
"enabled-and-show-app": "Mostra la icona i mostra l'aplicació",
"play-pause-on-click": "Reprodueix / pausa en clicar"
}
},
"visual-tweaks": {
"label": "Opcions visuals",
"submenu": {
"like-buttons": {
"default": "Per defecte",
"force-show": "Força que es mostri",
"hide": "Amaga",
"label": "Botons de «m'agrada»"
},
"remove-upgrade-button": "Elimina el botó «Actualitza a Music Premium»",
"theme": {
"dialog": {
"button": {
"cancel": "Cancel·la",
"remove": "Elimina"
},
"remove-theme": "De debó vols eliminar el tema personalitzat?",
"remove-theme-message": "Això eliminarà el tema personalitzat"
},
"label": "Tema",
"submenu": {
"import-css-file": "Importa un arxiu CSS personalitzat",
"no-theme": "Cap tema"
}
}
}
}
}
},
"plugins": {
"enabled": "Habilitat",
"label": "Extensions",
"new": "NOU"
},
"view": {
"label": "Veure",
"submenu": {
"force-reload": "Força la recàrrega",
"reload": "Recarrega",
"reset-zoom": "Mida real",
"toggle-fullscreen": "Commuta la pantalla completa",
"zoom-in": "Apropa el zoom",
"zoom-out": "Allunya el zoom"
}
}
},
"tray": {
"next": "Següent",
"play-pause": "Reprodueix/Pausa",
"previous": "Anterior",
"quit": "Tanca",
"restart": "Reinicia l'aplicació",
"show": "Mostra la finestra",
"tooltip": {
"default": "YouTube Music",
"with-song-info": "YouTube Music: {{artist}} - {{title}}"
}
}
},
"plugins": {
"ad-speedup": {
"description": "Si es reprodueix un anunci, silencia l'àudio i el reprodueix a la velocitat 16x",
"name": "Accelera els anuncis"
},
"adblocker": {
"description": "Bloqueja tots els anuncis i el seguiment",
"menu": {
"blocker": "Bloquejador"
},
"name": "Bloquejador d'anuncis"
},
"album-actions": {
"description": "Afegeix botons de «no m'agrada / retirar el no m'agrada» i «m'agrada / retirar el m'agrada» per aplicar-ho a totes les cançons en una llista de reproducció o àlbum",
"name": "Accions a l'àlbum"
},
"album-color-theme": {
"description": "Aplica un tema dinàmic i efectes visuals basats en la paleta de colors de l'àlbum",
"menu": {
"color-mix-ratio": {
"label": "Proporció de la barreja de colors",
"submenu": {
"percent": "{{ratio}}%"
}
}
},
"name": "Tema de color de l'àlbum"
},
"ambient-mode": {
"description": "Aplica un efecte d'il·luminació que projecta colors difusos del vídeo al fons de la pantalla",
"menu": {
"blur-amount": {
"label": "Quantitat de desenfocament",
"submenu": {
"pixels": "{{blurAmount}} píxels"
}
},
"buffer": {
"label": "Buffer",
"submenu": {
"buffer": "{{buffer}}"
}
},
"opacity": {
"label": "Opacitat",
"submenu": {
"percent": "{{opacity}}%"
}
},
"quality": {
"label": "Qualitat",
"submenu": {
"pixels": "{{quality}} píxels"
}
},
"size": {
"label": "Mida",
"submenu": {
"percent": "{{size}}%"
}
},
"smoothness-transition": {
"label": "Transició suau",
"submenu": {
"during": "Durant {{interpolationTime}} s"
}
},
"use-fullscreen": {
"label": "Utilitza en pantalla completa"
}
},
"name": "Mode ambient"
},
"api-server": {
"description": "Afegeix un servidor API per controlar el reproductor",
"dialog": {
"request": {
"buttons": {
"allow": "Permet",
"deny": "Denegar"
},
"message": "Permetre que {{ID}} ({{origin}}) accedeixi a l'API?",
"title": "Petició d'autorització API"
}
},
"menu": {
"auth-strategy": {
"label": "Estratègia d'autorització",
"submenu": {
"auth-at-first": {
"label": "Autoritza a la primera petició"
},
"none": {
"label": "Sense autorització"
}
}
},
"hostname": {
"label": "Nom del host"
},
"port": {
"label": "Port"
}
},
"name": "Servidor API [Beta]",
"prompt": {
"hostname": {
"label": "Introdueix el nom del host (per exemple 0.0.0.0) pel servidor API:",
"title": "Nom del host"
},
"port": {
"label": "Introdueix el port pel servidor API:",
"title": "Port"
}
}
},
"audio-compressor": {
"description": "Aplica compressió a l'àudio (baixa el volum de les parts més sorolloses de la senyal d'àudio i puja el volum de les parts més fluixes)",
"name": "Compressió d'àudio"
},
"blur-nav-bar": {
"description": "Desenfoca i aplica transparència a la barra de navegació",
"name": "Desenfoca la barra de navegació"
},
"bypass-age-restrictions": {
"description": "Esquiva la verificació d'edat de YouTube",
"name": "Esquiva les restriccions d'edat"
},
"captions-selector": {
"description": "Selector de subtítols per les pistes d'àudio de YouTube Music",
"menu": {
"autoload": "Selecciona automàticament l'últim subtítol emprat",
"disable-captions": "Sense subtítols per defecte"
},
"name": "Selector de subtítols",
"prompt": {
"selector": {
"label": "Idioma actual dels subtítols: {{language}}",
"none": "Cap",
"title": "Selecciona l'idioma dels subtítols"
}
},
"templates": {
"title": "Obra el selector de subtítols"
}
},
"compact-sidebar": {
"description": "Sempre mostrar la barra lateral en mode compacte",
"name": "Barra lateral compacta"
},
"crossfade": {
"description": "Transició creuada (crossfade) entre cançons",
"menu": {
"advanced": "Avançat"
},
"name": "Transició creuada [Beta]",
"prompt": {
"options": {
"multi-input": {
"fade-in-duration": "Durada de la transició d'entrada (ms)",
"fade-out-duration": "Durada de la transició de sortida (ms)",
"fade-scaling": {
"label": "Escala de la transició",
"linear": "Linear",
"logarithmic": "Logarítmica"
},
"seconds-before-end": "Transiciona N segons abans del final"
},
"title": "Opcions de transició creuada"
}
}
},
"disable-autoplay": {
"description": "Fa que la cançó comenci en mode «pausat»",
"menu": {
"apply-once": "Tan sols s'aplica a l'inici"
},
"name": "Deshabilita la reproducció automàtica"
},
"discord": {
"backend": {
"already-connected": "S'ha intentat connectar amb una connexió activa",
"connected": "Connectat a Discord",
"disconnected": "Desconnectat de Discord"
},
"description": "Mostra als teus amics allò que escoltes a l'estat d'activitat",
"menu": {
"auto-reconnect": "Reconnecta automàticament",
"clear-activity": "Esborra l'activitat",
"clear-activity-after-timeout": "Esborra l'activitat al cap d'un temps",
"connected": "Connectat",
"disconnected": "Desconnectat",
"hide-duration-left": "Amaga la durada restant",
"hide-github-button": "Amaga el botó de l'enllaç a GitHub",
"play-on-youtube-music": "Reprodueix a YouTube Music",
"set-inactivity-timeout": "Estableix temps d'espera d'inactivitat"
},
"name": "Estat d'activitat de Discord",
"prompt": {
"set-inactivity-timeout": {
"label": "Introdueix el temps d'espera d'inactivitat en segons:",
"title": "Estableix el temps d'espera d'inactivitat"
}
}
},
"downloader": {
"backend": {
"dialog": {
"error": {
"buttons": {
"ok": "D'acord"
},
"message": "Caram! Ho sentim, ha fallat la descàrrega…",
"title": "Error a la descàrrega!"
},
"start-download-playlist": {
"buttons": {
"ok": "D'acord"
},
"detail": "({{playlistSize}} cançons)",
"message": "Descarregant llista de reproducció {{playlistTitle}}",
"title": "Descàrrega començada"
}
},
"feedback": {
"conversion-progress": "Conversió: {{percent}}%",
"converting": "Convertint…",
"done": "Fet: {{filePath}}",
"download-info": "Descarregant {{artist}} - {{title}} [{{videoId}}",
"download-progress": "Descàrrega: {{percent}}%",
"downloading": "Descarregant…",
"downloading-counter": "Descarregant {{current}}/{{total}}…",
"downloading-playlist": "Descarregant la llista de reproducció «{{playlistTitle}}» - {{playlistSize}} cançons ({{playlistId}})",
"error-while-downloading": "Error al descarregar «{{author}} - {{title}}»: {{error}}",
"folder-already-exists": "La carpeta {{playlistFolder}} ja existeix",
"getting-playlist-info": "Obtenint la informació de la llista de reproducció…",
"loading": "Carregant…",
"playlist-has-only-one-song": "La llista de reproducció té un sol element, descarregant-lo directament",
"playlist-id-not-found": "No s'ha trobat cap ID de llista de reproducció",
"playlist-is-empty": "La llista de reproducció és buida",
"playlist-is-mix-or-private": "Error obtenint la informació de la llista de reproducció: assegura't que no és una llista de reproducció privada o de «Mixos per a tu»\n\n{{error}}",
"preparing-file": "Preparant arxiu…",
"saving": "Desant…",
"trying-to-get-playlist-id": "Intentant obtenir l'ID de la llista de reproducció: {{playlistId}}",
"video-id-not-found": "Vídeo no trobat",
"writing-id3": "Escrivint les etiquetes ID3…"
}
},
"description": "Descarrega el MP3 / àudio d'origen directament des de la interfície",
"menu": {
"choose-download-folder": "Tria la carpeta de descàrrega",
"download-finish-settings": {
"label": "Descarrega en finalitzar",
"prompt": {
"last-percent": "Desprès del x percent",
"last-seconds": "Últims x segons",
"title": "Configura quan descarregar"
},
"submenu": {
"advanced": "Avançat",
"enabled": "Habilitat",
"mode": "Mode de temps",
"percent": "Percentatge",
"seconds": "Segons"
}
},
"download-playlist": "Descarrega la llista de reproducció",
"presets": "Configuracions predefinides",
"skip-existing": "Omet els arxius existents"
},
"name": "Descàrregues",
"renderer": {
"can-not-update-progress": "No es pot actualitzar el progrés"
},
"templates": {
"button": "Descarrega"
}
},
"exponential-volume": {
"description": "Fa que el control lliscant del volum sigui exponencial per que sigui més fàcil seleccionar volums més baixos.",
"name": "Volum exponencial"
},
"in-app-menu": {
"description": "Fa que la barra de menú superior tingui un elegant aspecte fosc o basat en el color de l'àlbum",
"menu": {
"hide-dom-window-controls": "Amaga els controls de la finestra del DOM"
},
"name": "Menú integrat In-App"
},
"lumiastream": {
"description": "Afegeix suport pel Lumia Stream",
"name": "Lumia Stream [Beta]"
},
"lyrics-genius": {
"description": "Afegeix suport per la lletra de la majoria de cançons",
"menu": {
"romanized-lyrics": "Lletra romanitzada"
},
"name": "Lletres de Genius",
"renderer": {
"fetched-lyrics": "S'ha buscat la lletra a Genius"
}
},
"music-together": {
"description": "Comparteix una llista de reproducció amb els demés. Quan l'amfitrió reprodueix una cançó, la resta també sentiran la mateixa",
"dialog": {
"enter-host": "Introdueix l'ID de l'amfitrió"
},
"internal": {
"save": "Desa",
"track-source": "Origen de la pista",
"unknown-user": "Usuari desconegut"
},
"menu": {
"click-to-copy-id": "Copia l'ID d'amfitrió",
"close": "Tanca el Music Together",
"connected-users": "Usuaris connectats",
"disconnect": "Desconnecta el Music Together",
"empty-user": "No hi ha usuaris connectats",
"host": "Amfitrió de Music Together",
"join": "Uneix-te a Music Together",
"permission": {
"all": "Permet que els convidats controlin la llista de reproducció i el reproductor",
"host-only": "Tan sols l'amfitrió pot controlar la llista de reproducció i el reproductor",
"playlist": "Permet que els convidats controlin la llista de reproducció"
},
"set-permission": "Canvia els permisos de control",
"status": {
"disconnected": "Desconnectat",
"guest": "Connectat com a convidat",
"host": "Connectat com amfitrió"
}
},
"name": "Music Together [Beta]",
"toast": {
"add-song-failed": "Error al afegir la cançó",
"closed": "Music Together tancat",
"disconnected": "Music Together desconnectat",
"host-failed": "No s'ha pogut començar el Music Together",
"id-copied": "L'ID d'amfitrió s'ha copiat al porta-retalls",
"id-copy-failed": "Error al copiar l'ID d'amfitrió al porta-retalls",
"join-failed": "Error al unir-se al Music Together",
"joined": "T'has unit al Music Together",
"permission-changed": "Els permisos de Music Together han canviat a «{{permission}}»",
"remove-song-failed": "Error al eliminar la cançó",
"user-connected": "{{name}} s'ha unit al Music Together",
"user-disconnected": "{{name}} s'ha desconnectat del Music Together"
}
},
"navigation": {
"description": "Fletxes de navegació Següent / Enrere integrades directament a la interfície, com al teu navegador preferit",
"name": "Navegació"
},
"no-google-login": {
"description": "Elimina els botons d'inici de sessió de Google de la interfície",
"name": "Amaga l'inici de sessió de Google"
},
"notifications": {
"description": "Mostra una notificació quan una cançó es comença a reproduir (les notificacions interactives estan disponibles a Windows)",
"menu": {
"interactive": "Notificacions interactives",
"interactive-settings": {
"label": "Configuració interactiva",
"submenu": {
"hide-button-text": "Amaga text del botó",
"refresh-on-play-pause": "Recarrega al Reproduir/Pausar",
"tray-controls": "Obra/Tanca en clicar a la safata"
}
},
"priority": "Prioritat de les notificacions",
"toast-style": "Estil dels missatges emergents",
"unpause-notification": "Mostra notificació en reprendre la reproducció"
},
"name": "Notificacions"
},
"picture-in-picture": {
"description": "Permet commutar el mode d'imatge en imatge (PiP)",
"menu": {
"always-on-top": "Mostra sempre a sobre",
"hotkey": {
"label": "Drecera del teclat",
"prompt": {
"keybind-options": {
"hotkey": "Drecera del teclat"
},
"label": "Tria una drecera per commutar el mode d'imatge en imatge (PiP)",
"title": "Drecera del mode imatge en imatge (PiP)"
}
},
"save-window-position": "Desa la posició de la finestra",
"save-window-size": "Desa la mida de la finestra",
"use-native-pip": "Utilitza l'imatge en imatge (PiP) nativa del navegador"
},
"name": "Imatge en imatge (PiP)",
"templates": {
"button": "Imatge en imatge (PiP)"
}
},
"playback-speed": {
"description": "Escolta-ho ràpid, escolta-ho lent! Afegeix un control lliscant per canviar la velocitat de la cançó",
"name": "Velocitat de la reproducció",
"templates": {
"button": "Velocitat"
}
},
"precise-volume": {
"description": "Controla el volum de manera precisa a través de la rodeta del ratolí / dreceres del teclat, amb una interfície personalitzada i passos de volum personalitzats",
"menu": {
"arrows-shortcuts": "Controls locals de tecles de fletxa",
"custom-volume-steps": "Estableix passos de volum personalitzats",
"global-shortcuts": "Dreceres de teclat globals"
},
"name": "Volum precís",
"prompt": {
"global-shortcuts": {
"keybind-options": {
"decrease": "Baixa el volum",
"increase": "Puja el volum"
},
"label": "Tria les dreceres globals de volum:",
"title": "Dreceres globals de volum"
},
"volume-steps": {
"label": "Tria els passos d'augment o disminució del volum",
"title": "Passos de volum"
}
}
},
"quality-changer": {
"backend": {
"dialog": {
"quality-changer": {
"detail": "Qualitat actual: {{quality}}",
"message": "Tria la qualitat del vídeo:",
"title": "Tria la qualitat del vídeo"
}
}
},
"description": "Permet canviar la qualitat del vídeo amb un botó que s'hi mostra a sobre",
"name": "Botó de qualitat del vídeo"
},
"scrobbler": {
"description": "Afegeix suport per scrobbling (Last.fm, ListenBrainz, etc.)",
"dialog": {
"lastfm": {
"auth-failed": {
"message": "Error al autenticar amb Last.fm\nAmaga la finestra emergent fins el següent reinici.",
"title": "Error d'autenticació"
}
}
},
"menu": {
"lastfm": {
"api-settings": "Configuració de l'API de Last.fm"
},
"listenbrainz": {
"token": "Introduir token d'usuari de ListenBrainz"
},
"scrobble-other-media": "Scrobble amb altres mitjans"
},
"name": "Scrobbler",
"prompt": {
"lastfm": {
"api-key": "Clau d'API de Last.fm",
"api-secret": "Clau secreta de l'API de Last.fm"
},
"listenbrainz": {
"token": {
"label": "Introdueix el teu token de ListenBrainz:",
"title": "Token de ListenBrainz"
}
}
}
},
"shortcuts": {
"description": "Permet l'ús de dreceres globals del teclat per la reproducció (reproduir/pausar/següent/anterior) i desactivar l'OSD dels mitjans en sobreescriure les tecles de control multimèdia, habilita el Ctrl/CMD + F per buscar, habilita el suport MPRIS a Linux per tecles de control multimèdia, i dreceres de teclat personalitzades per usuaris avançats",
"menu": {
"override-media-keys": "Sobreescriu les tecles de control multimèdia",
"set-keybinds": "Estableix controls globals de les cançons"
},
"name": "Dreceres i MPRIS",
"prompt": {
"keybind": {
"keybind-options": {
"next": "Següent",
"play-pause": "Reproduir / Pausar",
"previous": "Anterior"
},
"label": "Tria combinacions de tecles per controlar les cançons:",
"title": "Dreceres globals"
}
}
},
"skip-disliked-songs": {
"description": "Salta les cançons amb «no m'agrada»",
"name": "Salta les cançons que no t'agraden"
},
"skip-silences": {
"description": "Omet automàticament les seccions amb silenci a les cançons",
"name": "Omet els silencis"
},
"sponsorblock": {
"description": "Omet automàticament els segments dels vídeos que no son música, com la intro o el final",
"name": "SponsorBlock"
},
"synced-lyrics": {
"description": "Proporciona lletres sincronitzades amb les cançons, a través de proveïdors com LRClib.",
"errors": {
"fetch": "⚠️ - Se ha produït un error en descarregar la lletra. Si us plau, intenta-ho més tard.",
"not-found": "⚠️ - No s'ha trobat la lletra per aquesta cançó."
},
"menu": {
"default-text-string": {
"label": "Caràcter per defecte entre lletres",
"tooltip": "Tria el caràcter per defecte que es mostrarà a l'espai entre les lletres"
},
"line-effect": {
"label": "Efecte de la línia",
"submenu": {
"focus": {
"label": "Focus",
"tooltip": "Mostra tan sols la línia actual en blanc"
},
"offset": {
"label": "Desplaçament",
"tooltip": "Desplaçament a la dreta de la línia actual"
},
"scale": {
"label": "Escala",
"tooltip": "Redimensiona la línia actual"
}
},
"tooltip": "Tria l'efecte a aplicar a la línia actual"
},
"precise-timing": {
"label": "Fes que les lletres es sincronitzin a la perfecció",
"tooltip": "Calcula al mil·lisegon l'aparició de la següent línia (pot tenir un petit impacte en el rendiment)"
},
"show-lyrics-even-if-inexact": {
"label": "Mostra la lletra tot i que sigui inexacta",
"tooltip": "Si no es troba la cançó, el plugin torna a intentar obtenir la lletra amb una cerca diferent.\nEl resultat d'aquesta segona cerca podria no ser exacte."
},
"show-time-codes": {
"label": "Mostra els codis de temps",
"tooltip": "Mostra els codis de temps al costat de la lletra"
}
},
"name": "Lletres sincronitzades",
"refetch-btn": {
"fetching": "Obtenint...",
"normal": "Tornar a obtenir la lletra"
},
"warnings": {
"duration-mismatch": "⚠️ - La lletra podria no estar ben sincronitzada, la durada no és coincident.",
"inexact": "⚠️ - La lletra d'aquesta cançó podria no ser exacta",
"instrumental": "⚠️ - Aquesta cançó és instrumental"
}
},
"taskbar-mediacontrol": {
"description": "Controla la reproducció des de la barra de tasques del Windows",
"name": "Control multimèdia a la barra de tasques"
},
"touchbar": {
"description": "Afegeix un giny a la Touch Bar per usuaris de macOS",
"name": "TouchBar"
},
"tuna-obs": {
"description": "Integració amb l'extensió «Tuna» del OBS",
"name": "Tuna OBS"
},
"video-toggle": {
"description": "Afegeix un botó per commutar entre el mode de vídeo o de cançó. Opcionalment, es pot eliminar la pestanya de vídeo per complet",
"menu": {
"align": {
"label": "Alineament",
"submenu": {
"left": "Esquerra",
"middle": "Mig",
"right": "Dreta"
}
},
"force-hide": "Força amagar la pestanya de vídeo",
"mode": {
"label": "Mode",
"submenu": {
"custom": "Commutador personalitzat",
"disabled": "Deshabilitat",
"native": "Commutador nadiu"
}
}
},
"name": "Botó de vídeo",
"templates": {
"button": "Cançó"
}
},
"visualizer": {
"description": "Afegeix un visualitzador al reproductor",
"menu": {
"visualizer-type": "Tipus de visualitzador"
},
"name": "Visualitzador"
}
}
}

View File

@ -8,7 +8,8 @@
"load-all": "Načítání všech pluginů",
"load-failed": "Selhalo načtení \"{{pluginName}}\" pluginu",
"loaded": "Plugin \"{{pluginName}}\" načten",
"unload-failed": "Selhalo unload \"{{pluginName}}\" pluginu"
"unload-failed": "Selhalo unload \"{{pluginName}}\" pluginu",
"unloaded": "Plugin {{pluginName}} byl odnačten"
}
}
},
@ -38,12 +39,12 @@
"clearing-cache-after-20s": "Čištění mezipaměti aplikace"
},
"window": {
"tried-to-render-offscreen": "Okno se pokusilo vykreslit na pozadí, velikost okna = {{windowSize}}, display velikost = {{displaySize}}, pozice = {{position}}"
"tried-to-render-offscreen": "Okno se pokusilo vykreslit na pozadí, velikost okna = {{windowSize}}, zobrazovací velikost = {{displaySize}}, pozice = {{position}}"
}
},
"dialog": {
"hide-menu-enabled": {
"detail": "Menu je skryté, stiskněte 'Alt' k jeho zobrazení (nebo 'Escape', pokud používáte in-app-menu)",
"detail": "Menu je skryté, stiskněte 'Alt' k jeho zobrazení (nebo 'ESC', pokud používáte vestavěné menu)",
"message": "Skrýt menu je povoleno",
"title": "Skrýt menu Povolené"
},
@ -157,6 +158,14 @@
},
"remove-upgrade-button": "Odebrat upgrade tlačítko",
"theme": {
"dialog": {
"button": {
"cancel": "zrušit",
"remove": "Odstranit"
},
"remove-theme": "Jste si jisti že chcete odstranit tento vlastní motiv?",
"remove-theme-message": "Tohle odstraní vlastní motiv"
},
"label": "Motiv",
"submenu": {
"import-css-file": "Vložit vlastní CSS soubor",
@ -190,27 +199,43 @@
"previous": "Minulý",
"quit": "Ukončit",
"restart": "Restartovat aplikaci",
"show": "Zobrazit okno"
"show": "Zobrazit okno",
"tooltip": {
"default": "Youtube Music",
"with-song-info": "Youtube Music {{Umělec}} - {{Titul}}"
}
}
},
"plugins": {
"ad-speedup": {
"description": "Pokud se přehraje reklama tak ztlumí zvuk a nastaví rychlost přehrávání na 16x",
"name": "Zrychlovač Reklam"
},
"adblocker": {
"description": "Blokuje všechny reklamy a sledování ihned od začátku",
"menu": {
"blocker": "Blokátor"
},
"name": "Blokovač reklam"
"name": "Blokátor reklam"
},
"album-actions": {
"description": "Přidává Undislike, Dislike, Like, a Unlike tlačítka k apply this ke všem písničkám v seznamu písniček nebo albumu.",
"name": "Album akce"
"description": "Přidává Undislike, Dislike, Like, a Unlike tlačítka k aplikování tohoto ke všem písničkám v seznamu písniček nebo albumu",
"name": "Možnosti Albumu"
},
"album-color-theme": {
"description": "Používá dynamický motiv a vizuální efekty na základě palety barev alba",
"menu": {
"color-mix-ratio": {
"label": "Poměr míchání barev",
"submenu": {
"percent": "{{poměr}}%"
}
}
},
"name": "Motiv podle barvy Alba"
},
"ambient-mode": {
"description": "Applies bleskové efekty pomocí casting jemných barev z videa, do vašeho pozadí obrazovky.",
"description": "Aplikuje světelné efekty pomocí vrhání jemných barev z videa, do vašeho pozadí obrazovky",
"menu": {
"blur-amount": {
"label": "Množství rozmazání",
@ -254,6 +279,49 @@
},
"name": "Ambientní režim"
},
"api-server": {
"description": "Vlož API server abys mohl ovládat přehrávač",
"dialog": {
"request": {
"buttons": {
"allow": "Povolit",
"deny": "Zakázat"
},
"message": "Povolit {{ID}} ({{origin}}) přístup k API?",
"title": "dotaz na přihlášení k API"
}
},
"menu": {
"auth-strategy": {
"label": "Možnosti přihlášení",
"submenu": {
"auth-at-first": {
"label": "Ověřit při prvním dotazu"
},
"none": {
"label": "Žádná autorizace"
}
}
},
"hostname": {
"label": "Hostname"
},
"port": {
"label": "Port"
}
},
"name": "API server [Beta]",
"prompt": {
"hostname": {
"label": "Zadej hostname API serveru (ve tvaru 0.0.0.0):",
"title": "Hostname"
},
"port": {
"label": "Zadej port API serveru:",
"title": "Port"
}
}
},
"audio-compressor": {
"description": "Apply compression k audiu (snižuje hlasitost nejhlasitěších částí signálu and zvyšuje hlasitost nejjemnějších částí)",
"name": "Audio kompresor"
@ -297,7 +365,10 @@
"prompt": {
"options": {
"multi-input": {
"fade-in-duration": "Délka Sílení (ms)",
"fade-out-duration": "Délka Slábnutí (ms)",
"fade-scaling": {
"label": "Škálování Přechodu",
"linear": "Lineární",
"logarithmic": "Logaritmické"
},
@ -361,6 +432,7 @@
},
"feedback": {
"conversion-progress": "Konverze: {{percent}}%",
"converting": "Převádím…",
"done": "Hotovo: {{filePath}}",
"download-info": "Stahování {{artist}} - {{title}} [{{videoId}}",
"download-progress": "Stahování: {{percent}}%",
@ -385,6 +457,21 @@
"description": "Stahuje MP3 / source audio přímo z rozhraní",
"menu": {
"choose-download-folder": "Vybrat složku pro stahování",
"download-finish-settings": {
"label": "Stáhnout po dokončení",
"prompt": {
"last-percent": "Po x procentech",
"last-seconds": "Posledních x vteřin",
"title": "Nastavit kdy stahovat"
},
"submenu": {
"advanced": "Pokoročile",
"enabled": "Zapnuto",
"mode": "Časový režim",
"percent": "Procent",
"seconds": "Sekundy"
}
},
"download-playlist": "Stáhnout seznam písniček",
"presets": "Předvolby",
"skip-existing": "Přeskočit existující soubory"
@ -405,11 +492,8 @@
"description": "Dává menu panelům fancy, tmavý nebo album-color vzhled",
"menu": {
"hide-dom-window-controls": "Skrýt DOM window controls"
}
},
"last-fm": {
"description": "Přidat scrobbling podporu pro Last.fm",
"name": "Last.fm"
},
"name": "Vestavěné Menu"
},
"lumiastream": {
"description": "Přidává Lumia Stream podporu",
@ -417,21 +501,26 @@
},
"lyrics-genius": {
"description": "Přidává lyrics podporu pro většinu písniček",
"menu": {
"romanized-lyrics": "Romanizované Lyrics"
},
"name": "Lyrics Genius",
"renderer": {
"fetched-lyrics": "Fetched lyrics pro Genius"
}
},
"music-together": {
"description": "Sdílejte seznam písniček s ostatními. Když the host hraje písničku, uslyší jí i všichni ostatní.",
"description": "Sdílejte playlist s ostatními. Když hostitel přehrává písničku, uslyší jí i všichni ostatní.",
"dialog": {
"enter-host": "Zadejte Host ID"
},
"internal": {
"save": "Uložit",
"track-source": "Zdroj Písně",
"unknown-user": "Neznámý uživatel"
},
"menu": {
"click-to-copy-id": "Zkopírovat Host ID",
"click-to-copy-id": "Zkopírovat ID Hosta",
"close": "Zavřít Hudba Spolu",
"connected-users": "Připojení uživatelé",
"disconnect": "Odpojit od Hudby Spolu",
@ -440,7 +529,7 @@
"join": "Připojit se k Hudbě Spolu",
"permission": {
"all": "Povolit hostům ovládat seznam písniček a přehrávač",
"host-only": "Jenom host může ovládat seznam písniček a přehrávač",
"host-only": "Jenom hostitel může ovládat seznam písniček a přehrávač",
"playlist": "Povolit hostům ovládat seznam písniček"
},
"set-permission": "Změnit ovládací oprávnění",
@ -457,6 +546,7 @@
"disconnected": "Hudba Spolu odpojena",
"host-failed": "Selhalo hostování Hudby Spolu",
"id-copied": "Host ID zkopírováno do schránky",
"id-copy-failed": "Kopírování ID Hosta do schránky selhalo",
"join-failed": "Selhalo připojení k Hudba Spolu",
"joined": "Připojil/a jste se k Hudbě Spolu",
"permission-changed": "Oprávnění Hudby Spolu se změnilo na \"{{permission}}\"",
@ -486,6 +576,7 @@
}
},
"priority": "Priorita Oznámení",
"toast-style": "Toast Styl",
"unpause-notification": "Zobrazit oznámení na unpause"
},
"name": "Oznámení"
@ -523,6 +614,7 @@
"precise-volume": {
"description": "Přesná kontrola hlasitosti pomocí kolečka myši/klávesnicových zkratek, s vlastní HUD a customizable hlasitostních steps",
"menu": {
"arrows-shortcuts": "Ovádání Šipkami",
"custom-volume-steps": "Nastavit vlastní hlasitostní steps",
"global-shortcuts": "Globální klávesové zkratky"
},
@ -555,6 +647,39 @@
"description": "Umožňuje měnit kvalitu videa pomocí tlačítka na video overlay",
"name": "Měnič kvality videa"
},
"scrobbler": {
"description": "Přidat scrobbing podporu (např .last.fm , Listenbrainz)",
"dialog": {
"lastfm": {
"auth-failed": {
"message": "Selhalo ověření s Last.fm\nSchovat vyskakovací okno do dalšího restartu.",
"title": "Ověření Selhalo"
}
}
},
"menu": {
"lastfm": {
"api-settings": "Last.fm API nastavení"
},
"listenbrainz": {
"token": "Vložte Listenbrainz user token"
},
"scrobble-other-media": "Scrobble jiné média"
},
"name": "Scrobbler",
"prompt": {
"lastfm": {
"api-key": "Last,fm API klíč",
"api-secret": "Tajný klíč API Last.fm"
},
"listenbrainz": {
"token": {
"label": "Vložte svůj Listenbrainz user token:",
"title": "ListenBrainz token"
}
}
}
},
"shortcuts": {
"description": "Dovoluje nastavit globální klávesové zkratky pro playback (přehrát/pozastavit/další/předchozí) a vypínání media OSD pomocí přepisování media klíčů, zapínání Ctrl/CMD + F k vyhledávání, zapínání Linux MPRIS podporu pro media klíče, a vlastní klávesové zkratky pro pokročilé uživatele.",
"menu": {
@ -586,6 +711,22 @@
"description": "Automaticky přeskakuje nehudební části jako intro/outro nebo části hudebních videí, kde nehraje písnčka",
"name": "SponsorBlock"
},
"synced-lyrics": {
"description": "Poskytuje synchronizaci textů do písní, pomocí poskytovatelů, jako je LRClib.",
"errors": {
"fetch": "Při hledání textu došlo k chybě. Prosím skuste to znovu později.",
"not-found": "Žáden text nebyl pro túto skladbu nalezen."
},
"menu": {
"default-text-string": {
"label": "Výchozí znak mezi texty",
"tooltip": "Vyberte výchozí znak pro mezeru mezi texty"
},
"line-effect": {
"label": "Efekt řádku"
}
}
},
"taskbar-mediacontrol": {
"description": "Ovládejte přehrávání z vašeho Windows hlavního panelu",
"name": "Hlavní panel Media Control"

View File

@ -46,7 +46,7 @@
"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"
"title": "Menü verstecken aktiviert"
},
"need-to-restart": {
"buttons": {
@ -55,7 +55,7 @@
},
"detail": "\"{{pluginName}}\"-Erweiterung erfordert einen Neustart, um in Kraft zu treten",
"message": "\"{{pluginName}}\" muss neugestartet werden",
"title": "Neustart Erforderlich"
"title": "Neustart erforderlich"
},
"unresponsive": {
"buttons": {
@ -75,7 +75,7 @@
},
"detail": "Eine neue Version ist verfügbar und kann unter {{downloadLink}} heruntergeladen werden",
"message": "Eine neue Version ist verfügbar",
"title": "Aktualisierung Verfügbar"
"title": "Aktualisierung verfügbar"
}
},
"menu": {
@ -87,7 +87,7 @@
"go-back": "Zurück gehen",
"go-forward": "Vorwärts gehen",
"quit": "Beenden",
"restart": "Anwendung Neustarten"
"restart": "Anwendung neustarten"
}
},
"options": {
@ -124,7 +124,7 @@
"language": {
"dialog": {
"message": "Sprache wird nach Neustart geändert",
"title": "Sprache Geändert"
"title": "Sprache geändert"
},
"label": "Sprache",
"submenu": {
@ -158,6 +158,14 @@
},
"remove-upgrade-button": "Upgrade-Schaltfläche entfernen",
"theme": {
"dialog": {
"button": {
"cancel": "Abbrechen",
"remove": "Entfernen"
},
"remove-theme": "Sind Sie sich sicher, dass Sie das benutzerdefinierte Aussehen ändern wollen?",
"remove-theme-message": "Dies wird das benutzerdefinierte Aussehen löschen"
},
"label": "Thema",
"submenu": {
"import-css-file": "Importiere eigene CSS-Datei",
@ -170,7 +178,8 @@
},
"plugins": {
"enabled": "Aktiviert",
"label": "Erweiterungen"
"label": "Erweiterungen",
"new": "NEU"
},
"view": {
"label": "Ansicht",
@ -190,10 +199,18 @@
"previous": "Vorheriges",
"quit": "Beenden",
"restart": "Anwendung neu starten",
"show": "Fenster anzeigen"
"show": "Fenster anzeigen",
"tooltip": {
"default": "YouTube Musik",
"with-song-info": "YouTube Musik: {{artist}} - {{title}}"
}
}
},
"plugins": {
"ad-speedup": {
"description": "Wenn eine Werbung spielt, stummt es das Audio und setzt die Wiedergabegeschwindigkeit auf 16x",
"name": "Werbungsbeschleunigung"
},
"adblocker": {
"description": "Blockiere jegliche Werbung und Tracker",
"menu": {
@ -201,12 +218,24 @@
},
"name": "Werbeblocker"
},
"album-actions": {
"description": "Fügt Undislike, Dislike, Like und Unlike-Knöpfe hinzu, welche sich auf alle Lieder in einer Playlist oder Album auswirken",
"name": "Album-Aktionen"
},
"album-color-theme": {
"description": "Wendet ein dynamisches Farbthema und visuelle Effekte auf Basis der Farbpalette des Albumcovers an",
"menu": {
"color-mix-ratio": {
"label": "Farbmischungsverhältnis",
"submenu": {
"percent": "{{ratio}}%"
}
}
},
"name": "Thema aus Albumfarbe"
},
"ambient-mode": {
"description": "Fügt einen Lichteffekt durch sanftes Abstreifen der Farben des Videos in deinen Bildschirmhintergrund hinzu.",
"description": "Fügt einen Lichteffekt durch sanftes Abstreifen der Farben des Videos in deinen Bildschirmhintergrund hinzu",
"menu": {
"blur-amount": {
"label": "Unschärfemenge",
@ -221,7 +250,7 @@
}
},
"opacity": {
"label": "Durchsichtigkeit",
"label": "Transparenz",
"submenu": {
"percent": "{{opacity}}%"
}
@ -250,6 +279,49 @@
},
"name": "Ambiente-Modus"
},
"api-server": {
"description": "Fügt einen API-Server hinzu, um die Wiedergabe zu steuern",
"dialog": {
"request": {
"buttons": {
"allow": "Erlauben",
"deny": "Ablehnen"
},
"message": "{{ID}} ({{origin}}) den Zugriff zur API erlauben?",
"title": "API-Autorisierungs-Anfrage"
}
},
"menu": {
"auth-strategy": {
"label": "Autorisations-Methode",
"submenu": {
"auth-at-first": {
"label": "Beim ersten Zugriff autorisieren"
},
"none": {
"label": "Keine Autorisierung"
}
}
},
"hostname": {
"label": "Hostname"
},
"port": {
"label": "Port"
}
},
"name": "API-Server [Beta]",
"prompt": {
"hostname": {
"label": "Hostname des API-Servers vergeben (z. B. 0.0.0.0):",
"title": "Hostname"
},
"port": {
"label": "Port des API-Server:",
"title": "Port"
}
}
},
"audio-compressor": {
"description": "Kompressor auf Audio anwenden (senkt die Lautstärke der lautesten Teile des Signals und hebt die Lautstärke der leisesten Teile an)",
"name": "Audio-Komprimierer"
@ -266,7 +338,7 @@
"description": "Untertitelwähler für YouTube Music-Audio-Lieder",
"menu": {
"autoload": "Wähle automatisch den zuletzt verwendeten Untertitel",
"disable-captions": "Standartmäßig keine Untertitel"
"disable-captions": "Standardmäßig keine Untertitel"
},
"name": "Untertitelwähler",
"prompt": {
@ -385,6 +457,21 @@
"description": "Lädt MP3-/Original-Audio direkt von der Schnittstelle herunter",
"menu": {
"choose-download-folder": "Downloadordner wählen",
"download-finish-settings": {
"label": "Song am Ende runterladen",
"prompt": {
"last-percent": "Nach x Prozent",
"last-seconds": "Letzten x Sekunden",
"title": "Konfiguriere wann runtergeladen werden soll"
},
"submenu": {
"advanced": "Erweitert",
"enabled": "Aktiviert",
"mode": "Zeitmodus",
"percent": "Prozent",
"seconds": "Sekunden"
}
},
"download-playlist": "Wiedergabeliste herunterladen",
"presets": "Voreinstellungen",
"skip-existing": "Vorhandene Dateien überspringen"
@ -408,10 +495,6 @@
},
"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]"
@ -426,6 +509,52 @@
"fetched-lyrics": "Liedtexte für Genius abgerufen"
}
},
"music-together": {
"description": "Teile eine Wiedergabeliste mit anderen. Wenn der Host ein Lied abspielt, hören alle anderen das gleiche Lied",
"dialog": {
"enter-host": "Host ID eingeben"
},
"internal": {
"save": "Speichern",
"track-source": "Quelle verfolgen",
"unknown-user": "Unbekannter Nutzer"
},
"menu": {
"click-to-copy-id": "Host ID kopieren",
"close": "Music Together schließen",
"connected-users": "Verbundene Benutzer",
"disconnect": "Verbindung zu Music Together trennen",
"empty-user": "Keine verbundenen Benutzer",
"host": "Host für Music Together",
"join": "Music Together beitreten",
"permission": {
"all": "Gästen erlauben, Wiederhabeliste und Player zu bedienen",
"host-only": "Nur der Host kann die Playlist und den Player kontrollieren",
"playlist": "Gäste das Kontrollieren der Playlist erlauben"
},
"set-permission": "Kontrollberechtigung ändern",
"status": {
"disconnected": "Verbindung getrennt",
"guest": "Als Gast verbunden",
"host": "Als Host verbunden"
}
},
"name": "Music Together [Beta]",
"toast": {
"add-song-failed": "Song hinzufügen gescheitert",
"closed": "Music Together geschlossen",
"disconnected": "Verbindung zu Music Together getrennt",
"host-failed": "Hosten von Music Together gescheitert",
"id-copied": "Host ID in die Zwischenablage kopiert",
"id-copy-failed": "Kopieren der Host ID in die Zwischenablage gescheitert",
"join-failed": "Beitreten zu Music Together gescheitert",
"joined": "Music Together beigetreten",
"permission-changed": "Music Together-Berechtigung zu \"{{permission}}\" geändert",
"remove-song-failed": "Entfernen des Liedes gescheitert",
"user-connected": "{{name}} ist Music Together beigetreten",
"user-disconnected": "{{name}} hat Music Together verlassen"
}
},
"navigation": {
"description": "Vorwärts/Zurück Navigationspfeile direkt in die Oberfläche integriert - wie in deinem geliebten Browser",
"name": "Navigation"
@ -518,8 +647,41 @@
"description": "Erlaubt die Videoqualität über einen Knopf auf dem Video",
"name": "Videoqualitätsänderer"
},
"scrobbler": {
"description": "Scrobbling-Unterstützung aktivieren (z.B. für last.fm, Listenbrainz)",
"dialog": {
"lastfm": {
"auth-failed": {
"message": "Die Authentifizierung von Last.fm ist fehlgeschlagen.\nBlende das Pop-up bis zum nächsten Neustart aus.",
"title": "Authentifizierung fehlgeschlagen"
}
}
},
"menu": {
"lastfm": {
"api-settings": "Last.fm API Einstellungen"
},
"listenbrainz": {
"token": "ListenBrainz-Benutzer-Token eintragen"
},
"scrobble-other-media": "Andere Medien scrobbeln"
},
"name": "Scrobbler",
"prompt": {
"lastfm": {
"api-key": "Last.fm API-Schlüssel",
"api-secret": "Last.fm API-Kennwort"
},
"listenbrainz": {
"token": {
"label": "ListenBrainz-Benutzer-Token eintragen:",
"title": "ListenBrainz-Token"
}
}
}
},
"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.",
"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"
@ -549,6 +711,59 @@
"description": "Überspringt automatisch nicht-musikalische Teile wie Intro/Outro oder Teile von Musikvideos, in denen der Song nicht gespielt wird",
"name": "SponsorBlock"
},
"synced-lyrics": {
"description": "Bietet synchronisierte Liedtexte zu Songs, verwendet Anbieter wie LRClib.",
"errors": {
"fetch": "⚠️ - Beim Abrufen des Liedtexts ist ein Fehler aufgetreten. Bitte versuchen Sie es später nochmal.",
"not-found": "⚠️ - Kein Text für diesen Song gefunden."
},
"menu": {
"default-text-string": {
"label": "Standardzeichen zwischen Texten",
"tooltip": "Standardzeichen für die Lücke zwischen Songtexten auswählen"
},
"line-effect": {
"label": "Zeileneffekt",
"submenu": {
"focus": {
"label": "Fokussieren",
"tooltip": "Nur aktive Zeile weiß darstellen"
},
"offset": {
"label": "Versatz",
"tooltip": "Verschiebe die aktuelle Zeile nach rechts"
},
"scale": {
"label": "Skalieren",
"tooltip": "Aktuelle Zeile skalieren"
}
},
"tooltip": "Effekt für aktive Zeile auswählen"
},
"precise-timing": {
"label": "Den Songtext perfekt synchronisieren",
"tooltip": "Auf die Millisekunde genau berechnen, wann die nächste Zeile angezeigt werden soll (Kann Einfluss auf die Leistung haben)"
},
"show-lyrics-even-if-inexact": {
"label": "Zeige die Liedtexte, auch wenn sie ungenau sind.",
"tooltip": "Die Erweiterung sucht mit anderen Suchparameter nochmals, wenn der Song nicht gefunden wurde.\nEs kann sein, dass das Ergebnis von der zweiten Anfrage nicht genau ist."
},
"show-time-codes": {
"label": "Zeitkodierungen anzeigen",
"tooltip": "Zeitkodierungen neben Songtext anzeigen"
}
},
"name": "Synchronisierte Texte",
"refetch-btn": {
"fetching": "Hole Songtext...",
"normal": "Songtext neu holen"
},
"warnings": {
"duration-mismatch": "⚠️ - Es kann sein, dass die Synchronization nicht stimmt, da die Songdauer nicht übereinstimmt.",
"inexact": "⚠️ - Es ist Möglich, dass der Songtext für diesen Song nicht übereinstimmt.",
"instrumental": "⚠️ - Das ist ein instrumentales Lied"
}
},
"taskbar-mediacontrol": {
"description": "Wiedergabe aus der Windows Taskleiste kontrollieren",
"name": "Mediensteuerung in der Taskleiste"

View File

@ -2,7 +2,14 @@
"common": {
"console": {
"plugins": {
"execute-failed": "Αποτυχία εκτέλεσης προσθέτου {{pluginName}}::{{contextName}}"
"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}}\" απεγκαταστάθηκε"
}
}
},
@ -12,54 +19,156 @@
"name": "Greek"
},
"main": {
"console": {
"did-finish-load": {
"dev-tools": "Η φόρτωση ολοκληρώθηκε. Τα DevTools άνοιξαν"
},
"i18n": {
"loaded": "Το i18n φορτώθηκε"
},
"second-instance": {
"receive-command": "Λήφθηκε εντολή μέσω πρωτοκόλλου: \"{{command}}\""
},
"theme": {
"css-file-not-found": "Το αρχείο CSS \"{{cssFile}}\" δεν υπάρχει, αγνοείται"
},
"unresponsive": {
"details": "Σφάλμα ανταπόκρισης!\n{{error}}"
},
"when-ready": {
"clearing-cache-after-20s": "Εκκαθάριση μνήμης cache εφαρμογής"
},
"window": {
"tried-to-render-offscreen": "Το παράθυρο προσπάθησε να απεικονίσει εκτός οθόνης, windowSize={{windowSize}}, displaySize={{displaySize}}, position={{position}}"
}
},
"dialog": {
"hide-menu-enabled": {
"message": "Απόκρυψη μενού είναι ενεργοποιημένο"
"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": {
"download": "Download",
"disable": "Απενεργοποίηση ενημερώσεων",
"download": "Λήψη",
"ok": "OK"
}
},
"detail": "Μια νέα έκδοση είναι διαθέσιμη και μπορεί να ληφθεί από τον σύνδεσμο {{downloadLink}}",
"message": "Μια νέα έκδοση είναι διαθέσιμη",
"title": "Υπάρχει διαθέσιμη ενημέρωση"
}
},
"menu": {
"about": "Σχετικά",
"navigation": {
"label": "Navigation"
"label": "Πλοήγηση",
"submenu": {
"copy-current-url": "Αντιγραφή τρέχουσας διεύθυνσης URL",
"go-back": "Πήγαινε πίσω",
"go-forward": "Πήγαινε μπροστά",
"quit": "Έξοδος",
"restart": "Επανεκκίνηση εφαρμογής"
}
},
"options": {
"label": "Options",
"label": "Επιλογές",
"submenu": {
"advanced-options": {
"label": "Προηγμένες επιλογές",
"submenu": {
"auto-reset-app-cache": "Επαναφορά της cache της εφαρμογής κατά την εκκίνηση της εφαρμογής",
"disable-hardware-acceleration": "Απενεργοποίηση επιτάχυνσης υλικού",
"edit-config-json": "Επεξεργασία του config.json",
"override-user-agent": "Αντικατάσταση του User-Agent",
"restart-on-config-changes": "Επανεκκίνηση κατά τις αλλαγές στο config",
"set-proxy": {
"label": "Set proxy",
"label": "Ορισμός διακομιστή μεσολάβησης (proxy)",
"prompt": {
"title": "Set proxy"
"label": "Εισαγωγή διεύθυνσης διακομιστή μεσολάβησης (proxy): (αφήστε κενό για απενεργοποίηση)",
"placeholder": "Παράδειγμα: SOCKS5://127.0.0.1:9999",
"title": "Ορισμός μεσολάβησης"
}
}
},
"toggle-dev-tools": "Εναλλαγή DevTools"
}
},
"auto-update": "Auto Update",
"language": {
"label": "Γλώσσα"
"always-on-top": "Πάντα επάνω",
"auto-update": "Αυτόματη Ενημέρωση",
"hide-menu": {
"dialog": {
"message": "Το μενού θα κρυφτεί στην επόμενη εκκίνηση, χρησιμοποιήστε [Alt] για να το εμφανίσετε (ή το πλήκτρο backtick [`] αν χρησιμοποιείτε το μενού εφαρμογής)",
"title": "Η Δυνατότητα Απόκρυψης του Μενού ενεργοποιήθηκε"
},
"label": "Απόκρυψη Μενού"
},
"start-at-login": "Start at login",
"tray": {
"label": "Tray",
"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": "Ενεργοποιημένο και απόκρυψη της εφαρμογής",
"play-pause-on-click": "Play/Pause στο πάτημα"
"enabled-and-show-app": "Ενεργοποιημένο και εμφάνιση της εφαρμογής",
"play-pause-on-click": "Αναπαραγωγή/Παύση με κλικ"
}
},
"visual-tweaks": {
"label": "Τροποποιήσεις Εμφάνισης",
"submenu": {
"like-buttons": {
"default": "Default"
"default": "Default",
"force-show": "Αναγκαστική Εμφάνιση",
"hide": "Απόκρυψη",
"label": "Μου αρέσει"
},
"remove-upgrade-button": "Αφαίρεση κουμπιού αναβάθμισης",
"theme": {
"label": "Theme",
"dialog": {
"button": {
"cancel": "Άκυρο",
"remove": "Αφαίρεση"
},
"remove-theme": "Είστε βέβαιοι ότι θέλετε να αφαιρέσετε το προσαρμοσμένο θέμα;",
"remove-theme-message": "Αυτό θα αφαιρέσει το προσαρμοσμένο θέμα"
},
"label": "Θέμα",
"submenu": {
"import-css-file": "Εισαγωγή προσαρμοσμένου αρχείου CSS",
"no-theme": "No theme"
}
}
@ -68,29 +177,68 @@
}
},
"plugins": {
"label": "Plugins"
"enabled": "Ενεργοποιημένο",
"label": "Πρόσθετα",
"new": "ΝΕΟ"
},
"view": {
"label": "View"
"label": "Προβολή",
"submenu": {
"force-reload": "Αναγκαστική Eπαναφόρτωση",
"reload": "Επαναφόρτωση",
"reset-zoom": "Πραγματικό μέγεθος",
"toggle-fullscreen": "Εναλλαγή Πλήρους Οθόνης",
"zoom-in": "Μεγέθυνση",
"zoom-out": "Σμίκρυνση"
}
}
},
"tray": {
"next": "Επόμενο",
"play-pause": "Αναπαραγωγή/Παύση",
"previous": "Προηγούμενο",
"quit": "Έξοδος",
"restart": "Επανεκκίνηση εφαρμογής",
"show": "Εμφάνιση παραθύρου",
"tooltip": {
"default": "YouTube Music",
"with-song-info": "YouTube Music: {{artist}} - {{title}}"
}
}
},
"plugins": {
"ad-speedup": {
"description": "Εαν παίξει διαφήμιση κάνει σίγαση του ήχου και θέτει την ταχύτητα αναπαραγωγής στο 16x",
"name": "Γρήγορη Προώθηση Διαφημίσεων"
},
"adblocker": {
"description": "Αποκλεισμός όλων των διαφημίσεων και tracker",
"menu": {
"blocker": "Μέθοδος αποκλεισμού"
},
"name": "Adblocker"
"name": "Μπλοκάρισμα Διαφημίσεων"
},
"album-actions": {
"description": "Προσθέτει κουμπιά Like/Unlike και Dislike/Undislike που δρουν συνολικά σε όλα τα κομμάτια μιας playlist ή ενός άλμπουμ",
"name": "Ενέργειες σε Άλμπουμ"
},
"album-color-theme": {
"description": "Εφαρμόζει ένα δυναμικό θέμα και εφέ με βάση τη χρωματική παλέτα του άλμπουμ",
"menu": {
"color-mix-ratio": {
"label": "Αναλογία μίξης χρώματος",
"submenu": {
"percent": "{{ratio}}%"
}
}
},
"name": "Album Color Theme"
},
"ambient-mode": {
"description": "Εφαρμόζει ένα εφέ φωτισμού ρίχνοντας απαλά χρώματα από το βίντεο, στο φόντο της οθόνης σας.",
"menu": {
"blur-amount": {
"label": "Ένταση θαμπώματος",
"submenu": {
"pixels": "{{blurAmount}} pixels"
}
@ -102,25 +250,30 @@
}
},
"opacity": {
"label": "Ποσότητα αδιαφάνειας",
"label": "Αδιαφάνεια",
"submenu": {
"percent": "{{opacity}}%"
}
},
"quality": {
"label": "Ποιότητα",
"submenu": {
"pixels": "{{quality}} pixels"
}
},
"size": {
"label": "Μέγεθος",
"submenu": {
"percent": "{{size}}%"
}
},
"smoothness-transition": {
"submenu": {
"during": "Σε {{interpolationTime}} δεύτερα"
"during": "Σε {{interpolationTime}} δευτερόλεπτα"
}
},
"use-fullscreen": {
"label": "Χρήση πλήρους οθόνης"
}
}
},
@ -162,11 +315,14 @@
"description": "Κάνει τα τραγούδια να είναι αυτόματα σε παύση",
"menu": {
"apply-once": "Εφαρμόζεται μόνο στο πρώτο τραγούδι"
}
},
"name": "Απενεργοποίηση αυτόματης αναπαραγωγής"
},
"discord": {
"description": "Δείξτε στους φίλους σας τι ακούτε με το Rich Presence",
"menu": {
"auto-reconnect": "Αυτόματη επανασύνδεση",
"clear-activity": "Εκκαθάριση δραστηριότητας",
"hide-duration-left": "Απόκρυψη της διάρκειας που απομένει",
"hide-github-button": "Απόκρυψη του συνδέσμου προς GitHub",
"set-inactivity-timeout": "Ορισμός χρονικού ορίου αδράνειας"
@ -185,37 +341,113 @@
"buttons": {
"ok": "OK"
},
"message": "Λήψη λίστας αναπαραγωγής {{playlistTitle}}",
"title": "Λήψη ξεκίνησε"
"detail": "{{playlistSize}} τραγούδια)",
"message": "Λήψη της λίστας αναπαραγωγής {{playlistTitle}}",
"title": "Η λήψη ξεκίνησε"
}
},
"feedback": {
"conversion-progress": "Μετατροπή: {{percent}}%",
"download-progress": "Download: {{percent}}%",
"preparing-file": "Προετοιμασία αρχείου…"
"converting": "Μετατροπή…",
"download-info": "Λήψη του {{artist}} - {{title}} [{{videoId}}",
"download-progress": "Λήψη: {{percent}}%",
"downloading": "Λήψη…",
"downloading-counter": "Λήψη {{current}}/{{total}}…",
"downloading-playlist": "Λήψη της λίστας αναπαραγωγής \"{{playlistTitle}}\" - {{playlistSize}} τραγούδια ({{playlistId}})",
"folder-already-exists": "Ο φάκελος {{playlistFolder}} υπάρχει ήδη",
"loading": "Φόρτωση…",
"playlist-is-empty": "Η λίστα αναπραγωγής είναι άδεια",
"preparing-file": "Προετοιμασία αρχείου…",
"saving": "Αποθήκευση…",
"video-id-not-found": "Το βίντεο δεν βρέθηκε"
}
},
"menu": {
"download-finish-settings": {
"prompt": {
"last-seconds": "Τελευταία x δευτερόλεπτα"
},
"submenu": {
"percent": "Ποσοστό",
"seconds": "Δευτερόλεπτα"
}
},
"download-playlist": "Λήψη λίστας αναπαραγωγής",
"skip-existing": "Παράλειψη υπάρχοντων αρχείων"
},
"templates": {
"button": "Download"
"button": "Λήψη"
}
},
"last-fm": {
"name": "Last.fm"
"music-together": {
"internal": {
"save": "Αποθήκευση",
"unknown-user": "Άγνωστος χρήστης"
},
"menu": {
"connected-users": "Συνδεδεμένοι χρήστες"
},
"toast": {
"add-song-failed": "Απέτυχε η προσθήκη τραγουδιού",
"remove-song-failed": "Απέτυχε η αφαίρεση τραγουδιού"
}
},
"navigation": {
"name": "Navigation"
"name": "Πλοήγηση"
},
"no-google-login": {
"name": "No Google Login"
},
"notifications": {
"name": "Notifications"
"name": "Ειδοποιήσεις"
},
"picture-in-picture": {
"menu": {
"always-on-top": "Πάντα σε πρώτο πλάνο",
"hotkey": {
"label": "Πλήκτρο πρόσβασης",
"prompt": {
"keybind-options": {
"hotkey": "Πλήκτρο πρόσβασης"
}
}
},
"save-window-position": "Αποθήκευση θέσης παραθύρου",
"save-window-size": "Αποθήκευση μεγέθους παραθύρου"
}
},
"playback-speed": {
"name": "Ταχύτητα αναπαραγωγής",
"templates": {
"button": "Ταχύτητα"
}
},
"precise-volume": {
"prompt": {
"global-shortcuts": {
"keybind-options": {
"decrease": "Μείωση έντασης",
"increase": "Αύξηση έντασης"
}
}
}
},
"quality-changer": {
"backend": {
"dialog": {
"quality-changer": {
"detail": "Τρέχουσα ποιότητα: {{quality}}"
}
}
}
},
"shortcuts": {
"prompt": {
"keybind": {
"keybind-options": {
"next": "Next"
"next": "Επόμενο",
"play-pause": "Αναπαραγωγή / Παύση",
"previous": "Προηγούμενο"
}
}
}

View File

@ -158,6 +158,14 @@
},
"remove-upgrade-button": "Remove upgrade button",
"theme": {
"dialog": {
"button": {
"cancel": "Cancel",
"remove": "Remove"
},
"remove-theme": "Are you sure you want to remove the custom theme?",
"remove-theme-message": "This will remove the custom theme"
},
"label": "Theme",
"submenu": {
"import-css-file": "Import custom CSS file",
@ -186,36 +194,48 @@
}
},
"tray": {
"tooltip": {
"default": "YouTube Music",
"with-song-info": "YouTube Music: {{artist}} - {{title}}"
},
"next": "Next",
"play-pause": "Play/Pause",
"previous": "Previous",
"quit": "Exit",
"restart": "Restart App",
"show": "Show window"
"show": "Show window",
"tooltip": {
"default": "YouTube Music",
"with-song-info": "YouTube Music: {{artist}} - {{title}}"
}
}
},
"plugins": {
"ad-speedup": {
"description": "If an ad play it mutes the audio and sets playback speed to 16x",
"name": "Ad Speedup"
},
"adblocker": {
"description": "Block all ads and tracking out of the box",
"menu": {
"blocker": "Blocker"
},
"name": "Adblocker"
"name": "Ad Blocker"
},
"album-actions": {
"description": "Adds Undislike, Dislike, Like, and Unlike buttons to apply this to all songs in a playlist or album.",
"name": "Album actions"
"description": "Adds Undislike, Dislike, Like, and Unlike buttons to apply this to all songs in a playlist or album",
"name": "Album Actions"
},
"album-color-theme": {
"description": "Applies a dynamic theme and visual effects based on the album color palette",
"menu": {
"color-mix-ratio": {
"label": "Color mix ratio",
"submenu": {
"percent": "{{ratio}}%"
}
}
},
"name": "Album Color Theme"
},
"ambient-mode": {
"description": "Applies a lighting effect by casting gentle colors from the video, into your screens background.",
"description": "Applies a lighting effect by casting gentle colors from the video, into your screens background",
"menu": {
"blur-amount": {
"label": "Blur amount",
@ -259,6 +279,56 @@
},
"name": "Ambient Mode"
},
"amuse": {
"description": "Adds YouTube Music support for the Amuse now playing widget by 6K Labs",
"name": "Amuse",
"response": {
"query": "Amuse API server is running. GET /query to get song info."
}
},
"api-server": {
"description": "Adds an API server to control the player",
"dialog": {
"request": {
"buttons": {
"allow": "Allow",
"deny": "Deny"
},
"message": "Allow {{ID}} ({{origin}}) to access the API?",
"title": "API authorization request"
}
},
"menu": {
"auth-strategy": {
"label": "Authorization strategy",
"submenu": {
"auth-at-first": {
"label": "Authorize at first request"
},
"none": {
"label": "No authorization"
}
}
},
"hostname": {
"label": "Hostname"
},
"port": {
"label": "Port"
}
},
"name": "API Server [Beta]",
"prompt": {
"hostname": {
"label": "Enter the hostname (like 0.0.0.0) for the API server:",
"title": "Hostname"
},
"port": {
"label": "Enter the port for the API server:",
"title": "Port"
}
}
},
"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"
@ -394,6 +464,21 @@
"description": "Downloads MP3 / source audio directly from the interface",
"menu": {
"choose-download-folder": "Choose download folder",
"download-finish-settings": {
"label": "Download on finish",
"prompt": {
"last-percent": "After x percent",
"last-seconds": "Last x seconds",
"title": "Configure when to download"
},
"submenu": {
"advanced": "Advanced",
"enabled": "Enabled",
"mode": "Time mode",
"percent": "Percent",
"seconds": "Seconds"
}
},
"download-playlist": "Download playlist",
"presets": "Presets",
"skip-existing": "Skip existing files"
@ -417,10 +502,6 @@
},
"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]"
@ -573,8 +654,41 @@
"description": "Allows changing the video quality with a button on the video overlay",
"name": "Video Quality Changer"
},
"scrobbler": {
"description": "Add scrobbling support (etc. last.fm, Listenbrainz)",
"dialog": {
"lastfm": {
"auth-failed": {
"message": "Failed to authenticate with Last.fm\nHide the popup until the next restart.",
"title": "Authentication Failed"
}
}
},
"menu": {
"lastfm": {
"api-settings": "Last.fm API Settings"
},
"listenbrainz": {
"token": "Enter ListenBrainz user token"
},
"scrobble-other-media": "Scrobble other media"
},
"name": "Scrobbler",
"prompt": {
"lastfm": {
"api-key": "Last.fm API key",
"api-secret": "Last.fm API secret"
},
"listenbrainz": {
"token": {
"label": "Enter your ListenBrainz user token:",
"title": "ListenBrainz token"
}
}
}
},
"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.",
"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"
@ -604,6 +718,63 @@
"description": "Automatically Skips non-music parts like intro/outro or parts of music videos where the song isn't playing",
"name": "SponsorBlock"
},
"synced-lyrics": {
"description": "Provides synced lyrics to songs, using providers like LRClib.",
"errors": {
"fetch": "⚠️\tAn error occurred while fetching the lyrics.\n\tPlease try again later.",
"not-found": "⚠️ No lyrics found for this song."
},
"menu": {
"default-text-string": {
"label": "Default character between lyrics",
"tooltip": "Choose the default character to use for the gap between lyrics"
},
"line-effect": {
"label": "Line effect",
"submenu": {
"fancy": {
"label": "Fancy",
"tooltip": "Use large, app-like effects on the current line"
},
"focus": {
"label": "Focus",
"tooltip": "Make only the current line white"
},
"offset": {
"label": "Offset",
"tooltip": "Offset on the right the current line"
},
"scale": {
"label": "Scale",
"tooltip": "Scale the current line"
}
},
"tooltip": "Choose the effect to apply to the current line"
},
"precise-timing": {
"label": "Make the lyrics perfectly synced",
"tooltip": "Calculate to the milisecond the display of the next line (can have a small impact on performance)"
},
"show-lyrics-even-if-inexact": {
"label": "Show lyrics even if inexact",
"tooltip": "If the song is not found, the plugin tries again with a different search query.\nThe result from the second attempt may not be exact."
},
"show-time-codes": {
"label": "Show time codes",
"tooltip": "Show the time codes next to the lyrics"
}
},
"name": "Synced Lyrics",
"refetch-btn": {
"fetching": "Fetching...",
"normal": "Refetch lyrics"
},
"warnings": {
"duration-mismatch": "⚠️ - The lyrics may be out of sync due to a duration mismatch.",
"inexact": "⚠️ - The lyrics for this song may not be exact",
"instrumental": "⚠️ - This is an instrumental song"
}
},
"taskbar-mediacontrol": {
"description": "Control playback from your Windows taskbar",
"name": "Taskbar Media Control"
@ -648,6 +819,18 @@
"visualizer-type": "Visualizer Type"
},
"name": "Visualizer"
},
"equalizer": {
"description": "Adds an equalizer to the player",
"name": "Equalizer",
"menu": {
"presets": {
"label": "Presets",
"list": {
"bass-booster": "Bass booster"
}
}
}
}
}
}

View File

@ -15,7 +15,7 @@
},
"language": {
"code": "es",
"local-name": "Inglés",
"local-name": "Español",
"name": "Spanish"
},
"main": {
@ -158,6 +158,14 @@
},
"remove-upgrade-button": "Remover el botón de Actualización",
"theme": {
"dialog": {
"button": {
"cancel": "Cancelar",
"remove": "Quitar"
},
"remove-theme": "¿Estás seguro de que quieres eliminar el tema personalizado?",
"remove-theme-message": "Esto eliminará el tema personalizado"
},
"label": "Tema",
"submenu": {
"import-css-file": "Importar archivo CSS personalizado",
@ -199,23 +207,35 @@
}
},
"plugins": {
"ad-speedup": {
"description": "Si se reproduce un anuncio, silencia el audio y fija la velocidad de reproducción en 16x",
"name": "Aumento de la velocidad de anuncios"
},
"adblocker": {
"description": "Bloquear todos los anuncios y el rastreo",
"menu": {
"blocker": "Bloqueador"
},
"name": "Adblocker"
"name": "Bloqueador de anuncios"
},
"album-actions": {
"description": "Añade los botones \"No me gusta\", \"No me gusta\", \"Me gusta\" y \"No me gusta\" para aplicarlos a todas las canciones de una lista de reproducción o un álbum.",
"name": "Acciones del álbum"
"description": "Añade los botones \"No me gusta\", \"No me gusta\", \"Me gusta\" y \"No me gusta\" para aplicarlos a todas las canciones de una lista de reproducción o un álbum",
"name": "Acciones en el álbum"
},
"album-color-theme": {
"description": "Aplica un tema dinámico y efectos visuales basados en la paleta de colores del álbum",
"menu": {
"color-mix-ratio": {
"label": "Proporción de la mezcla de colores",
"submenu": {
"percent": "{{ratio}}%"
}
}
},
"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.",
"description": "Aplica un efecto de iluminación mediante la proyección de colores suaves del vídeo en el fondo de la pantalla",
"menu": {
"blur-amount": {
"label": "Cantidad de desenfoque",
@ -259,6 +279,49 @@
},
"name": "Modo ambiente"
},
"api-server": {
"description": "Añade un servidor API para controlar el reproductor",
"dialog": {
"request": {
"buttons": {
"allow": "Permitir",
"deny": "Denegar"
},
"message": "¿Permitir {{ID}} ({{origin}}) acceder a la API?",
"title": "Petición de autorización API"
}
},
"menu": {
"auth-strategy": {
"label": "Estrategia de autorización",
"submenu": {
"auth-at-first": {
"label": "Autorizar la primera solicitud"
},
"none": {
"label": "Sin autorización"
}
}
},
"hostname": {
"label": "Nombre del host"
},
"port": {
"label": "Puerto"
}
},
"name": "Servidor API [Beta]",
"prompt": {
"hostname": {
"label": "Introduzca el nombre de host (como 0.0.0.0) para el servidor API:",
"title": "Nombre de host"
},
"port": {
"label": "Introduzca el puerto para el servidor API:",
"title": "Puerto"
}
}
},
"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"
@ -394,6 +457,21 @@
"description": "Descarga MP3 / audio fuente directamente desde la interfaz",
"menu": {
"choose-download-folder": "Elija la carpeta de descarga",
"download-finish-settings": {
"label": "Descargar al finalizar",
"prompt": {
"last-percent": "Después del x por ciento",
"last-seconds": "Últimos x segundos",
"title": "Configurar cuándo descargar"
},
"submenu": {
"advanced": "Avanzado",
"enabled": "Activado",
"mode": "Modo de tiempo",
"percent": "Porcentaje",
"seconds": "Segundos"
}
},
"download-playlist": "Descargar lista de reproducción",
"presets": "Preajustes",
"skip-existing": "Saltar archivos existentes"
@ -406,6 +484,18 @@
"button": "Descargar"
}
},
"equalizer": {
"description": "Añade un ecualizador al reproductor",
"menu": {
"presets": {
"label": "Ajustes preestablecidos",
"list": {
"bass-booster": "Amplificador de graves"
}
}
},
"name": "Ecualizador"
},
"exponential-volume": {
"description": "Hace que el control deslizante de volumen sea exponencial para que sea más fácil seleccionar volúmenes más bajos.",
"name": "Volumen exponencial"
@ -417,10 +507,6 @@
},
"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]"
@ -430,7 +516,7 @@
"menu": {
"romanized-lyrics": "Letras Romanizadas"
},
"name": "Lyrics Genius",
"name": "Letras Genius",
"renderer": {
"fetched-lyrics": "Letras recuperadas de Genius"
}
@ -472,6 +558,7 @@
"disconnected": "Music Together desconectados",
"host-failed": "Fallo el host de Music Together",
"id-copied": "ID del host copiado en el portapapeles",
"id-copy-failed": "No se ha podido copiar el ID del host en el portapapeles",
"join-failed": "Fallo en la unión a Music Together",
"joined": "Unido a Music Together",
"permission-changed": "Permiso de Music Together cambiado a \"{{permission}}\"",
@ -572,8 +659,41 @@
"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"
},
"scrobbler": {
"description": "Añadir soporte para scrobbling (last.fm, Listenbrainz, etc.)",
"dialog": {
"lastfm": {
"auth-failed": {
"message": "Error al autenticar con Last.fm\nOcultar la ventana emergente hasta el próximo reinicio.",
"title": "Error de autenticación"
}
}
},
"menu": {
"lastfm": {
"api-settings": "Ajustes de la API de Last.fm"
},
"listenbrainz": {
"token": "Introduzca el token de usuario de ListenBrainz"
},
"scrobble-other-media": "Scrobble en otros medios"
},
"name": "Scrobbler",
"prompt": {
"lastfm": {
"api-key": "Clave de la API de Last.fm",
"api-secret": "Clave secreta de la API de Last.fm"
},
"listenbrainz": {
"token": {
"label": "Introduzca su token de usuario de ListenBrainz:",
"title": "Token de ListenBrainz"
}
}
}
},
"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.",
"description": "Permite configurar teclas de acceso rápido globales para la reproducción (reproducir/pausa/siguiente/anterior) y desactivar la OSD multimedia anulando las teclas multimedia, activar Ctrl/CMD + F para buscar, activar la compatibilidad con MPRIS de Linux para las teclas multimedia y teclas de acceso rápido personalizadas para usuarios avanzados",
"menu": {
"override-media-keys": "Anular teclas de medios",
"set-keybinds": "Configurar controles globales de canciones"
@ -603,6 +723,59 @@
"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"
},
"synced-lyrics": {
"description": "Proporciona letras de canciones sincronizadas, utilizando proveedores como LRClib.",
"errors": {
"fetch": "⚠️ - Se ha producido un error al descargar la letra. Por favor, vuelve a intentarlo más tarde.",
"not-found": "⚠️ - No se ha encontrado ninguna letra para esta canción."
},
"menu": {
"default-text-string": {
"label": "Carácter predeterminado entre letras",
"tooltip": "Elige el carácter predeterminado que se utilizará para el espacio entre letras"
},
"line-effect": {
"label": "Efecto de la línea",
"submenu": {
"focus": {
"label": "Enfoque",
"tooltip": "Mostrar solo la línea actual en blanco"
},
"offset": {
"label": "Desplazamiento",
"tooltip": "Desplazamiento a la derecha de la línea actual"
},
"scale": {
"label": "Escala",
"tooltip": "Escala de la línea actual"
}
},
"tooltip": "Elige el efecto que deseas aplicar a la línea actual"
},
"precise-timing": {
"label": "Haz que la letra esté perfectamente sincronizada",
"tooltip": "Calcular al milisegundo la visualización de la línea siguiente (puede tener un pequeño impacto en el rendimiento)"
},
"show-lyrics-even-if-inexact": {
"label": "Mostrar la letra aunque sea inexacta",
"tooltip": "Si no se encuentra la canción, el complemento vuelve a intentarlo con una búsqueda diferente.\nEl resultado del segundo intento puede no ser exacto."
},
"show-time-codes": {
"label": "Visualización del código de tiempo",
"tooltip": "Mostrar los códigos de tiempo junto a la letra"
}
},
"name": "Letras sincronizadas",
"refetch-btn": {
"fetching": "Recuperando...",
"normal": "Volver a buscar letras"
},
"warnings": {
"duration-mismatch": "⚠️ - La letra puede estar desincronizada debido a un desajuste en la duración.",
"inexact": "⚠️ - La letra de esta canción puede no ser exacta",
"instrumental": "⚠️ - Se trata de una canción instrumental"
}
},
"taskbar-mediacontrol": {
"description": "Controla la reproducción desde la barra de tareas de Windows",
"name": "Control de medios de la barra de tareas"

195
src/i18n/resources/et.json Normal file
View File

@ -0,0 +1,195 @@
{
"common": {
"console": {
"plugins": {
"execute-failed": "{{pluginName}}::{{contextName}} lisamooduli käivitamine ei õnnestunud",
"executed-at-ms": "{{pluginName}}::{{contextName}} lisamoodul käivitus {{ms}} millisekundiga",
"initialize-failed": "„{{pluginName}}“ lisamooduli töö alustamine ei õnnestunud",
"load-all": "Laadime kõiki lisamooduleid",
"load-failed": "„{{pluginName}}“ lisamooduli laadimine ei õnnestunud",
"loaded": "„{{pluginName}}“ lisamoodul on laaditud",
"unload-failed": "„{{pluginName}}“ lisamooduli mälust eemaldamine ei õnnestunud",
"unloaded": "„{{pluginName}}“ lisamoodul on mälust eemaldatud"
}
}
},
"language": {
"code": "et",
"local-name": "Eesti",
"name": "Estonian"
},
"main": {
"console": {
"did-finish-load": {
"dev-tools": "Laadimine lõppes, arendaja tarvikud on avatud"
},
"i18n": {
"loaded": "i18n on laaditud"
},
"second-instance": {
"receive-command": "„{{command}}“ käsk on vastu võetud"
},
"theme": {
"css-file-not-found": "CSS faili „{{cssFile}}“ pole olemas, seega eirame eelistust"
}
},
"dialog": {
"hide-menu-enabled": {
"detail": "Menüü on peidetud ja „Alt“ klahviga saad ta nähtavaks (rakenduse-siseses menüüs „Esc“ klahviga)",
"message": "Menüü peitmine on sisselülitatud",
"title": "Menüü peitmine on sisselülitatud"
},
"need-to-restart": {
"buttons": {
"later": "Hiljem",
"restart-now": "Taaskäivita kohe"
},
"detail": "„{{pluginName}}“ lisamooduli sisselülitamine eeldab rakenduse taaskäivitamist",
"message": "„{{pluginName}}“ lisamoodul eeldab rakenduse taaskäivitamist",
"title": "Palun käivita rakendus uuesti"
},
"unresponsive": {
"buttons": {
"quit": "Välju",
"relaunch": "Käivita uuesti",
"wait": "Oota"
}
}
},
"menu": {
"navigation": {
"label": "Liikumine",
"submenu": {
"copy-current-url": "Kopeeri esitamisel oleva pala URL",
"go-back": "Mine tagasi",
"go-forward": "Mine edasi",
"quit": "Välju",
"restart": "Käivita rakendus uuesti"
}
},
"options": {
"label": "Seadistused",
"submenu": {
"advanced-options": {
"label": "Lisaseadistused",
"submenu": {
"auto-reset-app-cache": "Rakenduse käivitamisel lähtesta puhverdatud andmed",
"disable-hardware-acceleration": "Lülita raudvaraline kiirendamine välja",
"edit-config-json": "Muuda config.json faili"
}
}
}
},
"plugins": {
"label": "Lisamoodulid",
"new": "UUS"
},
"view": {
"submenu": {
"zoom-in": "Suumi sisse",
"zoom-out": "Suumi välja"
}
}
},
"tray": {
"next": "Edasi",
"play-pause": "Esita/Peata esitus",
"previous": "Eelmine",
"quit": "Välju",
"restart": "Käivita rakendus uuesti",
"show": "Näita akent",
"tooltip": {
"default": "YouTube Music",
"with-song-info": "YouTube Music: {{artist}} - {{title}}"
}
}
},
"plugins": {
"ad-speedup": {
"description": "Reklaami esitamisel summutatakse heli ja keritakse edasi 16-kordse kiirusega",
"name": "Reklaamikiirendaja"
},
"adblocker": {
"description": "Blokeeri kõik reklaamid ja jälitajad",
"menu": {
"blocker": "Blokeerijad"
},
"name": "Reklaamiblokeerija"
},
"ambient-mode": {
"menu": {
"opacity": {
"submenu": {
"percent": "{{opacity}}%"
}
},
"quality": {
"label": "Kvaliteet",
"submenu": {
"pixels": "{{quality}} pikslit"
}
}
}
},
"blur-nav-bar": {
"description": "Muudab navigatsiooniriba läbipaistavaks ja hägusaks",
"name": "Hägus navigatsiooniriba"
},
"lyrics-genius": {
"description": "Lisa enamustele lugudele laulusõnad",
"menu": {
"romanized-lyrics": "Latiniseeritud laulusõnad"
},
"name": "Lyrics Genius",
"renderer": {
"fetched-lyrics": "Leidsime Geeniuse jaoks ühed laulusõnad"
}
},
"navigation": {
"name": "Liikumine"
},
"scrobbler": {
"description": "Lisa kraasimise tugi (last.fm, Listenbrainz, jne)",
"dialog": {
"lastfm": {
"auth-failed": {
"message": "Last.fm'i autentimine ei õnnestunud\nPeida hüpikaken järgmise taaskäivituseni.",
"title": "Autentimine ei õnnestunud"
}
}
},
"menu": {
"lastfm": {
"api-settings": "Last.fm API seadistused"
},
"listenbrainz": {
"token": "Sisesta ListenBrainz'i kasutaja tunnusluba"
},
"scrobble-other-media": "Kraasi muud meediat"
},
"name": "Kraasija",
"prompt": {
"lastfm": {
"api-key": "Last.fm API võti",
"api-secret": "Last.fm API saladus"
},
"listenbrainz": {
"token": {
"label": "Sisesta oma ListenBrainz'i tunnusluba:",
"title": "ListenBrainz'i tunnusluba"
}
}
}
},
"synced-lyrics": {
"menu": {
"show-lyrics-even-if-inexact": {
"tooltip": "Kui lugu ei leidu, siis lisamoodul üritab uut otsingut teistsuguse päringuga.\nTeise katse puhul tulemused ei pruugi olla väga täpsed."
}
}
},
"tuna-obs": {
"description": "Lõimimine OBSi Tuna lisamooduliga"
}
}
}

585
src/i18n/resources/fa.json Normal file
View File

@ -0,0 +1,585 @@
{
"common": {
"console": {
"plugins": {
"execute-failed": "اجرای افزونه {{pluginName}}::{{contextName}} با خطا مواجه شد",
"executed-at-ms": "افزونه {{pluginName}}::{{contextName}} در {{ms}} میلی‌ثانیه اجرا شد",
"initialize-failed": "افزونه \"{{pluginName}}\" با خطا در حین مقداردهی اولیه مواجه شد",
"load-all": "در حال بارگذاری تمامی افزونه‌ها",
"load-failed": "افزونه \"{{pluginName}}\" بارگیری نشد",
"loaded": "افزونه \"{{pluginName}}\" بارگیری شد",
"unload-failed": "افزونه \"{{pluginName}}\" بارگذاری نشد",
"unloaded": "افزونه \"{{pluginName}}\" بارگذاری شد"
}
}
},
"language": {
"code": "fa",
"local-name": "فارسی",
"name": "Persian"
},
"main": {
"console": {
"did-finish-load": {
"dev-tools": "بارگذاری کامل شد. DevTools باز شد"
},
"i18n": {
"loaded": "i18n بارگذاری شد"
},
"second-instance": {
"receive-command": "دریافت فرمان از طریق پروتکل: \"{{command}}\""
},
"theme": {
"css-file-not-found": "فایل CSS \"{{cssFile}}\" وجود ندارد، نادیده گرفته شد"
},
"unresponsive": {
"details": "خطای عدم پاسخگویی!\n{{error}}"
},
"when-ready": {
"clearing-cache-after-20s": "پاکسازی حافظه کش برنامه"
},
"window": {
"tried-to-render-offscreen": "پنجره تلاش کرد خارج از صفحه نمایش داده شود، اندازه پنجره={{windowSize}}، اندازه نمایشگر={{displaySize}}، موقعیت={{position}}"
}
},
"dialog": {
"hide-menu-enabled": {
"detail": "منو مخفی است، از 'Alt' برای نمایش آن استفاده کنید (یا 'Escape' اگر از منوی داخل برنامه استفاده می‌کنید)",
"message": "پنهان‌سازی منو فعال است",
"title": "پنهان کردن منو فعال شد"
},
"need-to-restart": {
"buttons": {
"later": "بعداً",
"restart-now": "هم‌اکنون راه‌اندازی مجدد کنید"
},
"detail": "افزونه \"{{pluginName}}\" برای اعمال تغییرات نیاز به راه‌اندازی مجدد دارد",
"message": "\"{{pluginName}}\" نیاز به راه‌اندازی مجدد دارد",
"title": "نیاز به راه‌اندازی مجدد"
},
"unresponsive": {
"buttons": {
"quit": "خروج",
"relaunch": "راه‌اندازی مجدد",
"wait": "منتظر بمانید"
},
"detail": "از بابت این مشکل متأسفیم! لطفاً انتخاب کنید که چه کاری انجام دهید:",
"message": "برنامه پاسخی نمی‌دهد",
"title": "پنجره بدون پاسخ"
},
"update-available": {
"buttons": {
"disable": "غیرفعال کردن به‌روزرسانی‌ها",
"download": "دانلود",
"ok": "تأیید"
},
"detail": "نسخه جدیدی در دسترس است و می‌توان آن را از {{downloadLink}} دانلود کرد",
"message": "نسخه جدیدی در دسترس است",
"title": "به‌روزرسانی موجود است"
}
},
"menu": {
"about": "درباره",
"navigation": {
"label": "ناوبری",
"submenu": {
"copy-current-url": "کپی کردن URL فعلی",
"go-back": "بازگشت",
"go-forward": "حرکت به جلو",
"quit": "خروجی",
"restart": "راه‌اندازی مجدد برنامه"
}
},
"options": {
"label": "گزینه‌ها",
"submenu": {
"advanced-options": {
"label": "گزینه‌های پیشرفته",
"submenu": {
"auto-reset-app-cache": "ریست کردن حافظه کش برنامه هنگام شروع",
"disable-hardware-acceleration": "غیرفعال کردن شتاب سخت‌افزاری",
"edit-config-json": "ویرایش config.json",
"override-user-agent": "تغییر 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": {
"dialog": {
"button": {
"cancel": "لغو",
"remove": "حذف"
},
"remove-theme": "آیا مطمئن هستید که می‌خواهید تم سفارشی را حذف کنید؟",
"remove-theme-message": "این کار تم سفارشی را حذف خواهد کرد"
},
"label": "تم",
"submenu": {
"import-css-file": "وارد کردن فایل CSS سفارشی",
"no-theme": "بدون تم"
}
}
}
}
}
},
"plugins": {
"enabled": "فعال",
"label": "افزونه‌ها",
"new": "جدید"
},
"view": {
"label": "مشاهده",
"submenu": {
"force-reload": "اجبار به بارگذاری مجدد",
"reload": "بارگذاری مجدد",
"reset-zoom": "اندازه واقعی",
"toggle-fullscreen": "تغییر به تمام‌صفحه",
"zoom-in": "بزرگنمایی",
"zoom-out": "کوچکنمایی"
}
}
},
"tray": {
"next": "بعدی",
"play-pause": "پخش/توقف",
"previous": "قبلی",
"quit": "خروج",
"restart": "راه‌اندازی مجدد برنامه",
"show": "نمایش پنجره",
"tooltip": {
"default": "یوتیوب موسیقی",
"with-song-info": "یوتیوب موسیقی: {{artist}} - {{title}}"
}
}
},
"plugins": {
"ad-speedup": {
"description": "اگر تبلیغ پخش شود، صدا را بی‌صدا کرده و سرعت پخش را به 16 برابر افزایش می‌دهد",
"name": "سرعت‌دهی به تبلیغ"
},
"adblocker": {
"description": "مسدود کردن تمامی تبلیغات و ردیابی‌ها از ابتدا",
"menu": {
"blocker": "مسدودکننده"
},
"name": "مسدودکننده تبلیغات"
},
"album-actions": {
"description": "افزودن دکمه‌های \"برگرفتن ناپسند\"، \"ناپسند\"، \"پسند\"، و \"حذف پسند\" برای اعمال آنها روی همه آهنگ‌ها در یک فهرست پخش یا آلبوم",
"name": "عملیات آلبوم"
},
"album-color-theme": {
"description": "اعمال یک تم پویا و جلوه‌های بصری بر اساس پالت رنگ آلبوم",
"menu": {
"color-mix-ratio": {
"label": "نسبت ترکیب رنگ",
"submenu": {
"percent": "{{ratio}}%"
}
}
},
"name": "تم رنگ آلبوم"
},
"ambient-mode": {
"description": "اعمال یک اثر نوری با پخش رنگ‌های ملایم از ویدئو به پس‌زمینه صفحه نمایش شما",
"menu": {
"blur-amount": {
"label": "میزان تاری",
"submenu": {
"pixels": "{{blurAmount}} پیکسل"
}
},
"buffer": {
"label": "بافر",
"submenu": {
"buffer": "{{buffer}}"
}
},
"opacity": {
"label": "شفافیت"
},
"quality": {
"label": "کیفیت",
"submenu": {
"pixels": "{{quality}} پیکسل"
}
},
"size": {
"label": "اندازه"
},
"smoothness-transition": {
"label": "انتقال نرمی",
"submenu": {
"during": "در طول {{interpolationTime}} ثانیه"
}
},
"use-fullscreen": {
"label": "استفاده از تمام‌صفحه"
}
},
"name": "حالت محیطی"
},
"api-server": {
"description": "افزودن یک سرور API برای کنترل پخش‌کننده",
"dialog": {
"request": {
"buttons": {
"allow": "اجازه",
"deny": "رد کردن"
},
"message": "اجازه دادن به {{ID}} ({{origin}}) برای دسترسی به API؟",
"title": "درخواست مجوز API"
}
},
"menu": {
"auth-strategy": {
"label": "استراتژی مجوز",
"submenu": {
"auth-at-first": {
"label": "مجوز در اولین درخواست"
},
"none": {
"label": "بدون نیاز به مجوز"
}
}
},
"hostname": {
"label": "نام میزبان"
},
"port": {
"label": "پورت"
}
},
"name": "سرور API [بتا]",
"prompt": {
"hostname": {
"label": "نام میزبان را برای سرور API وارد کنید (مثل 0.0.0.0):",
"title": "نام میزبان"
},
"port": {
"label": "پورت را برای سرور API وارد کنید:",
"title": "پورت"
}
}
},
"audio-compressor": {
"description": "اعمال فشرده‌سازی به صدا (کاهش حجم بلندترین بخش‌های سیگنال و افزایش حجم بخش‌های نرم‌تر)",
"name": "فشرده‌ساز صدا"
},
"blur-nav-bar": {
"description": "شفاف و محو کردن نوار ناوبری",
"name": "محو کردن نوار ناوبری"
},
"bypass-age-restrictions": {
"description": "دور زدن تأیید سن یوتیوب",
"name": "دور زدن محدودیت‌های سنی"
},
"captions-selector": {
"description": "انتخاب زیرنویس برای آهنگ‌های یوتیوب موسیقی",
"menu": {
"autoload": "به طور خودکار انتخاب آخرین زیرنویس استفاده شده",
"disable-captions": "بدون زیرنویس به صورت پیش‌فرض"
},
"name": "انتخاب‌کننده زیرنویس",
"prompt": {
"selector": {
"label": "زبان زیرنویس فعلی: {{language}}",
"none": "هیچ‌کدام",
"title": "انتخاب زبان زیرنویس"
}
},
"templates": {
"title": "باز کردن انتخاب‌کننده زیرنویس"
}
},
"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": "متصل به Discord",
"disconnected": "قطع اتصال از Discord"
},
"description": "نمایش آنچه گوش می‌دهید به دوستان با Rich Presence",
"menu": {
"auto-reconnect": "اتصال خودکار مجدد",
"clear-activity": "پاک کردن فعالیت",
"clear-activity-after-timeout": "پاک کردن فعالیت پس از تایم‌اوت",
"connected": "متصل",
"disconnected": "قطع شده",
"hide-duration-left": "مخفی کردن مدت زمان باقی‌مانده",
"hide-github-button": "مخفی کردن دکمه لینک GitHub",
"play-on-youtube-music": "پخش در یوتیوب موسیقی",
"set-inactivity-timeout": "تنظیم تایم‌اوت عدم فعالیت"
},
"name": "Rich Presence در Discord",
"prompt": {
"set-inactivity-timeout": {
"label": "ورود تایم‌اوت عدم فعالیت به ثانیه:",
"title": "تنظیم تایم‌اوت عدم فعالیت"
}
}
},
"downloader": {
"backend": {
"dialog": {
"error": {
"buttons": {
"ok": "تأیید"
},
"message": "اوه! متاسفیم، دانلود شکست خورد…",
"title": "خطا در دانلود!"
},
"start-download-playlist": {
"buttons": {
"ok": "تأیید"
},
"detail": "({{playlistSize}} آهنگ)",
"message": "دانلود فهرست پخش {{playlistTitle}}",
"title": "دانلود شروع شد"
}
},
"feedback": {
"conversion-progress": "تبدیل: {{percent}}%",
"converting": "در حال تبدیل…",
"done": "انجام شد: {{filePath}}",
"download-info": "در حال دانلود {{artist}} - {{title}} [{{videoId}}",
"download-progress": "دانلود: {{percent}}%",
"downloading": "در حال دانلود…",
"downloading-counter": "در حال دانلود {{current}}/{{total}}…",
"downloading-playlist": "در حال دانلود فهرست پخش \"{{playlistTitle}}\" - {{playlistSize}} آهنگ ({{playlistId}})",
"error-while-downloading": "خطا در دانلود \"{{author}} - {{title}}\": {{error}}",
"folder-already-exists": "پوشه {{playlistFolder}} از قبل وجود دارد",
"getting-playlist-info": "در حال دریافت اطلاعات فهرست پخش…",
"loading": "در حال بارگذاری…",
"playlist-has-only-one-song": "فهرست پخش فقط یک آیتم دارد، به طور مستقیم دانلود می‌شود",
"playlist-id-not-found": "شناسه فهرست پخش یافت نشد",
"playlist-is-empty": "فهرست پخش خالی است",
"playlist-is-mix-or-private": "خطا در دریافت اطلاعات فهرست پخش: اطمینان حاصل کنید که فهرست پخش خصوصی یا \"مختص شما\" نباشد\n\n{{error}}",
"preparing-file": "در حال آماده‌سازی فایل…",
"saving": "در حال ذخیره‌سازی…",
"trying-to-get-playlist-id": "تلاش برای دریافت شناسه فهرست پخش: {{playlistId}}",
"video-id-not-found": "ویدئو یافت نشد",
"writing-id3": "در حال نوشتن تگ‌های ID3…"
}
},
"description": "دانلود MP3 / صدای منبع به طور مستقیم از رابط",
"menu": {
"choose-download-folder": "انتخاب پوشه دانلود",
"download-finish-settings": {
"label": "دانلود پس از پایان",
"prompt": {
"last-percent": "پس از x درصد",
"last-seconds": "آخرین x ثانیه",
"title": "پیکربندی زمان دانلود"
},
"submenu": {
"advanced": "پیشرفته",
"enabled": "فعال",
"mode": "حالت زمان",
"percent": "درصد",
"seconds": "ثانیه"
}
},
"download-playlist": "دانلود فهرست پخش",
"presets": "پیش‌تنظیم‌ها",
"skip-existing": "رد کردن فایل‌های موجود"
},
"name": "دانلودر",
"renderer": {
"can-not-update-progress": "امکان به‌روزرسانی پیشرفت نیست"
},
"templates": {
"button": "دانلود"
}
},
"exponential-volume": {
"description": "نوار لغزنده حجم را به صورت نمایی می‌سازد تا انتخاب حجم‌های پایین‌تر آسان‌تر شود.",
"name": "حجم نمایی"
},
"in-app-menu": {
"description": "منوها را به صورت جذاب، تاریک یا با رنگ آلبوم نمایش می‌دهد",
"menu": {
"hide-dom-window-controls": "کنترل‌های پنجره DOM را مخفی کن"
},
"name": "منوی داخل برنامه"
},
"lumiastream": {
"description": "افزودن پشتیبانی از Lumia Stream",
"name": "Lumia Stream [بتا]"
},
"lyrics-genius": {
"description": "افزودن پشتیبانی از متن آهنگ برای بیشتر آهنگ‌ها",
"menu": {
"romanized-lyrics": "متن رومی‌شده"
},
"name": "متن آهنگ Genius",
"renderer": {
"fetched-lyrics": "متن آهنگ از Genius بازیابی شد"
}
},
"music-together": {
"description": "اشتراک‌گذاری فهرست پخش با دیگران. وقتی میزبان آهنگی را پخش می‌کند، همه بقیه همان آهنگ را می‌شنوند",
"dialog": {
"enter-host": "شناسه میزبان را وارد کنید"
},
"internal": {
"save": "ذخیره",
"track-source": "منبع آهنگ",
"unknown-user": "کاربر ناشناس"
},
"menu": {
"click-to-copy-id": "کپی کردن شناسه میزبان",
"close": "بستن Music Together",
"connected-users": "کاربران متصل",
"disconnect": "قطع اتصال Music Together",
"empty-user": "هیچ کاربر متصلی وجود ندارد",
"host": "میزبان Music Together",
"join": "پیوستن به Music Together",
"permission": {
"all": "اجازه دادن به مهمانان برای کنترل فهرست پخش و پخش‌کننده",
"host-only": "فقط میزبان می‌تواند فهرست پخش و پخش‌کننده را کنترل کند",
"playlist": "اجازه دادن به مهمانان برای کنترل فهرست پخش"
},
"set-permission": "تغییر مجوز کنترل",
"status": {
"disconnected": "قطع اتصال",
"guest": "متصل به عنوان مهمان",
"host": "متصل به عنوان میزبان"
}
},
"name": "Music Together [بتا]",
"toast": {
"add-song-failed": "افزودن آهنگ با شکست مواجه شد",
"closed": "Music Together بسته شد",
"disconnected": "قطع اتصال Music Together",
"host-failed": "میزبانی Music Together با شکست مواجه شد",
"id-copied": "شناسه میزبان به کلیپ‌بورد کپی شد",
"id-copy-failed": "کپی شناسه میزبان به کلیپ‌بورد با شکست مواجه شد",
"join-failed": "پیوستن به Music Together با شکست مواجه شد",
"joined": "به Music Together پیوست",
"permission-changed": "مجوز Music Together به \"{{permission}}\" تغییر یافت",
"remove-song-failed": "حذف آهنگ با شکست مواجه شد",
"user-connected": "{{name}} به Music Together پیوست",
"user-disconnected": "{{name}} Music Together را ترک کرد"
}
},
"navigation": {
"description": "بعدی/قبلی به طور مستقیم در رابط یکپارچه شده‌اند، مانند مرورگر مورد علاقه شما",
"name": "ناوبری"
},
"no-google-login": {
"description": "حذف دکمه‌های ورود به سیستم Google و لینک‌ها از رابط",
"name": "بدون ورود به Google"
},
"notifications": {
"description": "نمایش اعلان هنگامی که آهنگی شروع به پخش می‌کند (اعلان‌های تعاملی در ویندوز در دسترس هستند)",
"menu": {
"interactive": "اعلان‌های تعاملی",
"interactive-settings": {
"label": "تنظیمات تعاملی",
"submenu": {
"hide-button-text": "مخفی کردن متن دکمه",
"refresh-on-play-pause": "تازه‌سازی در پخش/توقف",
"tray-controls": "باز/بسته شدن با کلیک روی سینی"
}
},
"priority": "اولویت اعلان",
"toast-style": "سبک Toast",
"unpause-notification": "نمایش اعلان هنگام از سرگیری پخش"
},
"name": "اعلان‌ها"
},
"picture-in-picture": {
"description": "اجازه می‌دهد تا برنامه به حالت تصویر در تصویر تغییر کند",
"menu": {
"always-on-top": "همیشه در بالا"
}
}
}
}

565
src/i18n/resources/fi.json Normal file
View File

@ -0,0 +1,565 @@
{
"common": {
"console": {
"plugins": {
"execute-failed": "Virhe pluginin lataamisessa: {{pluginName}}, koska {{contextName}}",
"executed-at-ms": "Lisäosa: {{pluginName}} ja {{contextName}} on ladattu/liitetty {{ms}}",
"initialize-failed": "Laajennuksen alustaminen epäonnistui kohteelle \"{{pluginName}}\"",
"load-all": "Ladataan kaikkia lisäosia",
"load-failed": "Virhe lisäosan lataamisessa kohteelle: {{pluginName}}",
"loaded": "Lisäosa {{pluginName}} on ladattu",
"unload-failed": "Laajennuksen purkaminen epäonnistui kohtelle: {{pluginName}}",
"unloaded": "Lisäosa {{pluginName}} on purettu"
}
}
},
"language": {
"code": "fi",
"local-name": "Suomi",
"name": "Finnish"
},
"main": {
"console": {
"did-finish-load": {
"dev-tools": "Onnistuneesti ladattu. Devtools avautuu"
},
"i18n": {
"loaded": "i18n ladattu"
},
"second-instance": {
"receive-command": "Komento \"{{command}}\" on vastaanotettu"
},
"theme": {
"css-file-not-found": "{{cssFile}} on jätetty väliin, koska tiedosto on virheellinen"
},
"unresponsive": {
"details": "Reagoimaton virhe\n{{error}}"
},
"when-ready": {
"clearing-cache-after-20s": "Puhdista välimuisti"
},
"window": {
"tried-to-render-offscreen": "Näyttö yritti renderöidä näyttöäsi asetuksilla: {{windowSize}}, {{displaySize}} sekä {{position}}"
}
},
"dialog": {
"hide-menu-enabled": {
"detail": "Valikko on piilotettu, avaa valikko uudestaan painamalla \"Alt\" näppäintä tai \"Escape\" näppäintä",
"message": "Valikon piilotus on nyt päällä",
"title": "Piilota valikko päällä"
},
"need-to-restart": {
"buttons": {
"later": "Myöhemmin",
"restart-now": "Uudelleen käynnistä NYT"
},
"detail": "{{pluginName}} lisäosa vaatii uudelleen käynnistyksen YT musicille",
"message": "{{pluginName}} vaatii uudelleen käynnistyksen YT musicille",
"title": "Uudelleen käynnistä sovellus"
},
"unresponsive": {
"buttons": {
"quit": "Poistu",
"relaunch": "Uudelleen käynnistä",
"wait": "Odotas vähän"
},
"detail": "Pahoittelemme häiriötä! ole hyvä ja valitse mitä teet:",
"message": "Sovellus ei ole saataville eli tapahtui virhe",
"title": "Ikkuna ei vastaa"
},
"update-available": {
"buttons": {
"disable": "Poista päivitykset käytöstä",
"download": "Lataa",
"ok": "Selvä"
},
"detail": "Uusin versio sovelluksesta on nyt saatavilla, lataa se tästä {{downloadLink}}",
"message": "Uusin versio on nyt saatavilla",
"title": "Päivitys saatavilla"
}
},
"menu": {
"about": "Tietoa",
"navigation": {
"label": "Selaa",
"submenu": {
"copy-current-url": "Kopio URL osoite",
"go-back": "Takaisin",
"go-forward": "Eteenpäin",
"quit": "Poistu alustalta",
"restart": "Uudelleen käynnistä aplikaatio"
}
},
"options": {
"label": "Asetukset",
"submenu": {
"advanced-options": {
"label": "Lisäasetukset",
"submenu": {
"auto-reset-app-cache": "Puhdista sovelluksen välimuisti aina sovelluksen käynnistyksen aikana",
"disable-hardware-acceleration": "Poista laitteistokiihdytys käytöstä",
"edit-config-json": "Muokkaa \"config.json\" tiedostoa",
"override-user-agent": "Ohita käyttäjäagentti",
"restart-on-config-changes": "Käynnistä uudelleen asetusten muuton jälkeen",
"set-proxy": {
"label": "Aseta välityspalvelin (proxy)",
"prompt": {
"label": "Aseta välityspalvelimen IP-osoite: (jos jätät tyhjäksi, palvelin ei käynnisty)",
"placeholder": "Esimerkki osoite: penapertti://127.0.0.0:6969",
"title": "Aseta välityspalvelin (proxy)"
}
},
"toggle-dev-tools": "Ota DevTools käyttöön"
}
},
"always-on-top": "Aina päällä",
"auto-update": "Automaattisest päivitykset",
"hide-menu": {
"dialog": {
"message": "Valikko piilotetaan seuraavan käynnistyksen yhteydessä. Saat sen päälle painamalla [Alt] näppäintä (tai merkitse takaisin [`], jos käytät sovelluksen sisäistä valikkoa)",
"title": "Piilota valikko (päällä)"
},
"label": "Piilota valikko"
},
"language": {
"dialog": {
"message": "Kieli vaihtuu uudelleen käynnistyksen jälkeen (Language will be changed after restart)",
"title": "Kieli vaihdettu (Language Changed)"
},
"label": "Kieli (languages)",
"submenu": {
"to-help-translate": "Haluatko kääntää puuttuvan kielen? Klkkaa tästä! (Want to help translate? Click here)"
}
},
"resume-on-start": "Jatka kappaleesta, johon jäin aikaisemmin",
"single-instance-lock": "Yhden instanssin lukko",
"start-at-login": "Aloita kirjautuminen",
"starting-page": {
"label": "Etusivu",
"unset": "Valitsematta"
},
"tray": {
"label": "Suositukset",
"submenu": {
"disabled": "Pois päältä",
"enabled-and-hide-app": "Suositukset ovat käytössä ja piilota valikko",
"enabled-and-show-app": "Päällä ja sovellus näkyvissä",
"play-pause-on-click": "Soita/pysäytä klikkaamalla"
}
},
"visual-tweaks": {
"label": "Visuaalisia tehosteita",
"submenu": {
"like-buttons": {
"default": "Vakio",
"force-show": "Pakota näyttämään",
"hide": "Piilota",
"label": "Tykkäys nappula"
},
"remove-upgrade-button": "Poista päivitys nappula",
"theme": {
"dialog": {
"button": {
"cancel": "Peruuta",
"remove": "Poista"
},
"remove-theme": "Oletko aivan varma, että haluat poistaa kustomoidun teeman?",
"remove-theme-message": "Tämä poistaa kustomoidun teeman"
},
"label": "Teema",
"submenu": {
"import-css-file": "Liitä kustomoitu CSS tiedosto",
"no-theme": "Ei teemaa"
}
}
}
}
}
},
"plugins": {
"enabled": "Päällä",
"label": "Lisäosat",
"new": "UUSI"
},
"view": {
"label": "Katso",
"submenu": {
"force-reload": "pakota uudelleen lataamaan",
"reload": "Uudelleen lataa",
"reset-zoom": "Todellinen koko",
"toggle-fullscreen": "Koko näyttö päälle/pois",
"zoom-in": "Zoomaa lähemmäksi",
"zoom-out": "Zoomaa kauemmaksi"
}
}
},
"tray": {
"next": "Seuraava",
"play-pause": "Soita/pysäytä",
"previous": "Edellinen",
"quit": "Lähde pois",
"restart": "Uudelleen käynnistä appi",
"show": "Näytä ikkuna",
"tooltip": {
"default": "Youtube Music",
"with-song-info": "Youtube Music {{artist}} - {{title}}"
}
}
},
"plugins": {
"adblocker": {
"description": "Estä kaikki mainokset ja seuranta",
"menu": {
"blocker": "Estäjät (blockerit)"
},
"name": "Mainos estäjä"
},
"album-actions": {
"description": "Lisää tykkäysnappulat, joilla voit lisätä tai poistaa tykkäyksiä kerralla kaikille soittolistan tai albumin kappaleille",
"name": "Albumin Toiminnot"
},
"album-color-theme": {
"description": "Käyttää dynaamista teemaa ja visuaalisia tehosteita albumin väripaletin perusteella",
"menu": {
"color-mix-ratio": {
"label": "Värien sekoitussuhde",
"submenu": {
"percent": "{{ratio}}%"
}
}
},
"name": "Albumin Värinen Teema"
},
"ambient-mode": {
"description": "Antaa valaistustehosteen heittämällä videosta lempeitä värejä näytön taustalle",
"menu": {
"blur-amount": {
"label": "Sumennuksen voimakkuus",
"submenu": {
"pixels": "{{blurAmount}} pikseliä"
}
},
"buffer": {
"label": "Puskurointi",
"submenu": {
"buffer": "{{buffer}}"
}
},
"opacity": {
"label": "Läpinäkyvyys",
"submenu": {
"percent": "{{opacity}}%"
}
},
"quality": {
"label": "Laatu",
"submenu": {
"pixels": "{{quality}} pikseliä"
}
},
"size": {
"label": "Koko",
"submenu": {
"percent": "{{size}}%"
}
},
"smoothness-transition": {
"label": "Siirtymän sujuvuus",
"submenu": {
"during": "Kesto {{interpolationTime}} s"
}
},
"use-fullscreen": {
"label": "Käytetään koko näytön tilaa"
}
}
},
"audio-compressor": {
"description": "Lisää äänen kompressointia (hiljentää voimakkaimpien äänien voimakkuutta ja tehostaa pehmeämpien äänien voimakkuutta)",
"name": "Äänen Kompressoija"
},
"blur-nav-bar": {
"description": "Tekee siirtymäpalkista läpikuultavan ja sumean",
"name": "Sumenna Siirtymäpalkki"
},
"bypass-age-restrictions": {
"description": "Ohita YouTuben iän vahvistus",
"name": "Ohita Ikään Perustuvat Rajoitukset"
},
"captions-selector": {
"description": "YouTube Music ääniraitojen tekstitysten valitsin",
"menu": {
"autoload": "Valitse automaattisesti viimeksi käytetty tekstitys",
"disable-captions": "Tekstitys ei oletusarvoisesti käytössä"
},
"name": "Tekstitysten valinta",
"prompt": {
"selector": {
"label": "Tekstitysten nykyinen kieli: {{language}}",
"none": "Ei mitään",
"title": "Valitse tekstitysten kieli"
}
},
"templates": {
"title": "Avaa tekstitysten valitsin"
}
},
"compact-sidebar": {
"description": "Asettaa sivupalkin aina kompaktiin tilaan",
"name": "Kompakti sivupalkki"
},
"crossfade": {
"description": "Ristihäivytä kappaleet",
"menu": {
"advanced": "Edistynyt"
},
"name": "Ristihäivytys [Beta]",
"prompt": {
"options": {
"multi-input": {
"fade-in-duration": "Sisään häivytyksen kesto (ms)",
"fade-out-duration": "Ulos häivytyksen kesto (ms)",
"fade-scaling": {
"label": "Häivytyksen skaalaus",
"linear": "Lineaarinen",
"logarithmic": "Logaritminen"
},
"seconds-before-end": "Ristihäivytä N sekuntia ennen loppua"
},
"title": "Ristihäivytyksen asetukset"
}
}
},
"disable-autoplay": {
"description": "Kappaleet alkavat \"pysäytetty\" tilassa",
"name": "Poista automaattinen toisto käytöstä"
},
"discord": {
"backend": {
"already-connected": "Yritettiin yhdistää vaikka yhteys on jo aktiivinen",
"connected": "Yhdistetty Discordiin",
"disconnected": "Katkaistu yhteys Discordiin"
},
"description": "Näytä ystävillesi mitä kuuntelet \"Rich Presence\":n avulla",
"menu": {
"auto-reconnect": "Automaatinen uudelleenyhdistys",
"clear-activity": "Nollaa toiminta",
"clear-activity-after-timeout": "Nollaa toiminta aikakatkaisun jälkeen",
"connected": "Yhdistetty",
"disconnected": "Yhteys katkaistu",
"hide-duration-left": "Piilota kappaleen jäljellä oleva kesto",
"hide-github-button": "Piilota \"linkki GitHubiin\" -nappi",
"play-on-youtube-music": "Kuuntele palvelussa YouTube Music",
"set-inactivity-timeout": "Aseta toimettomuuden aikakatkaisu"
},
"name": "Discord Aktiviteetti (Rich Presence)",
"prompt": {
"set-inactivity-timeout": {
"label": "Anna toimettomuuden aikakatkaisun aika sekunteina:",
"title": "Aseta toimettomuuden aikakatkaisu"
}
}
},
"downloader": {
"backend": {
"dialog": {
"error": {
"buttons": {
"ok": "OK"
},
"message": "Äh! Pahoittelut, lataus epäonnistui…",
"title": "Virhe latauksessa!"
},
"start-download-playlist": {
"buttons": {
"ok": "OK"
},
"detail": "({{playlistSize}} kappaletta)",
"message": "Lataa Soittolista {{playlistTitle}}",
"title": "Lataus aloitettu"
}
},
"feedback": {
"conversion-progress": "Muunnetaan: {{percent}}%",
"converting": "Muuntaa…",
"done": "Valmis: {{filePath}}",
"download-info": "Ladataan {{artist}} -{{title}} [{{videoId}}",
"download-progress": "Latauksen edistyminen: {{percent}}%",
"downloading": "Ladataan…",
"downloading-counter": "Ladataan {{current}}/{{total}}…",
"downloading-playlist": "Ladataan soittolistaa \"{{playlistTitle}}\" {{playlistSize}} kappaletta ({{playlistId}})",
"error-while-downloading": "Virhe ladattaessa \"{{author}} - {{title}}\": {{error}}",
"folder-already-exists": "Kansio {{playlistFolder}} on jo olemassa",
"getting-playlist-info": "Haetaan soittolistan tietoja…",
"loading": "Ladataan…",
"playlist-has-only-one-song": "Soittolistalla on vain yksi kappale, se ladataan suoraan",
"playlist-id-not-found": "Soittolistan tunnistetta ei löytynyt",
"playlist-is-empty": "Soittolista on tyhjä",
"playlist-is-mix-or-private": "Virhe haettaessa soittolista tietoja: varmista ettei soittolista ole yksityinen tai \"Miksattu sinulle\" soittolista\n\n{{error}}",
"preparing-file": "Valmistellaan tiedostoa…",
"saving": "Tallennetaan…",
"trying-to-get-playlist-id": "Yritetään hakea soittolistan tunnistetta: {{playlistId}}",
"video-id-not-found": "Videota ei löytynyt",
"writing-id3": "Kirjoitetaan ID3-tunnisteita…"
}
},
"description": "Lataa MP3- tai lähdetiedoston suoraan käyttöliittymästä",
"menu": {
"choose-download-folder": "Valitse latauskansio",
"download-playlist": "Lataa soittolista",
"presets": "Esiasetukset",
"skip-existing": "Ohita olemassa olevat tiedostot"
},
"name": "Lataaja",
"renderer": {
"can-not-update-progress": "Edistystä ei voida päivittää"
},
"templates": {
"button": "Lataa"
}
},
"exponential-volume": {
"description": "Tekee äänenvoimakkuuden säätimestä eksponentiaalisen, jotta matalampien äänenvoimakkuuksien valinta on helpompaa.",
"name": "Eksponentiaalinen Äänenvoimakkuus"
},
"in-app-menu": {
"description": "Antaa valikkopalkeille hienon tumman tai albumin värisen ulkonäön",
"menu": {
"hide-dom-window-controls": "Piilota ikkunan DOM ohjaimet"
},
"name": "Sovelluksen sisäinen valikko"
},
"lumiastream": {
"description": "Lisää tuen Lumia Stream -palvelulle",
"name": "Lumia Stream [Beta]"
},
"lyrics-genius": {
"description": "Lisää tuen useimpien kappaleiden sanoituksille",
"menu": {
"romanized-lyrics": "Latinaistetut sanoitukset"
},
"name": "Lyrics Genius",
"renderer": {
"fetched-lyrics": "Sanoitukset haettu Geniukselle"
}
},
"music-together": {
"description": "Jaa soittolista muiden kanssa. Kun isäntä soittaa kappaleen, kaikki muut kuulevat saman kappaleen",
"dialog": {
"enter-host": "Anna Istunnon tunniste"
},
"internal": {
"save": "Tallenna",
"track-source": "Kappaleen lähde",
"unknown-user": "Tuntematon käyttäjä"
},
"menu": {
"click-to-copy-id": "Kopioi Istunnon tunniste",
"close": "Sulje \"Music Together\"",
"connected-users": "Yhdistetyt käyttäjät",
"disconnect": "Katkaise yhteys \"Music Together\" -istuntoon",
"empty-user": "Ei yhdistyneitä käyttäjiä",
"host": "\"Music Together\" -istunnon isäntä",
"join": "Yhdistä \"Music Together\" -istuntoon",
"permission": {
"all": "Salli vieraiden hallita soittolistaa ja soitinta",
"host-only": "Vain isäntä voi hallita soittolistaa ja soitinta",
"playlist": "Salli vieraiden hallita soittolistaa"
},
"set-permission": "Muuta hallintaoikeuksia",
"status": {
"disconnected": "Yhteys katkaistu",
"guest": "Yhdistetty vieraana",
"host": "Yhdistetty isäntänä"
}
},
"name": "Music Together [Beta]",
"toast": {
"add-song-failed": "Kappaleen lisääminen epäonnistui",
"closed": "Music Together suljettu",
"disconnected": "\"Music Together\" yhteys katkaistu",
"host-failed": "Music Together -istunnon isännöinti epäonnistui",
"id-copied": "Istunnon tunnus kopioitu leikepöydälle",
"id-copy-failed": "Istunnon tunnisteen kopioiminen epäonnistui",
"join-failed": "Music Together -istuntoon liittyminen epäonnistui",
"joined": "Liityttiin Music Together -istuntoon",
"permission-changed": "Music Together -istunnon oikeuksia muutettiin \"{{permission}}\"",
"remove-song-failed": "Kappaleen poistaminen epäonnistui",
"user-connected": "{{name}} liittyi Music Together -istuntoon",
"user-disconnected": "{{name}} poistui Music Together -istunnosta"
}
},
"navigation": {
"description": "Eteen- ja taaksepäin vievät nuolet suoraan integroituna käyttöliittymään. Juuri niin kuin lempiselaimessasi",
"name": "Siirtyminen"
},
"no-google-login": {
"description": "Poista Googlen kirjautumispainikkeet ja linkit käyttöliittymästä",
"name": "Ei Google kirjautumista"
},
"notifications": {
"description": "Näytä ilmoitus, kun kappale alkaa soida (interaktiiviset ilmoitukset ovat käytettävissä Windowsilla)",
"menu": {
"interactive": "Interaktiiviset Ilmoitukset",
"interactive-settings": {
"label": "Interaktiiviset Asetukset",
"submenu": {
"hide-button-text": "Piilota painikkeen teksti",
"refresh-on-play-pause": "Päivitä Toistamisen/Tauottamisen yhteydessä",
"tray-controls": "Avaa/Sulje tehtäväpalkista"
}
},
"priority": "Ilmoitusten tärkeys",
"unpause-notification": "Näytä ilmoitus toistamisen yhteydessä"
},
"name": "Ilmoitukset"
},
"picture-in-picture": {
"description": "Sallii sovelluksen vaihtamisen \"kuva kuvassa\" tilaan",
"menu": {
"always-on-top": "Aina päällimmäisenä",
"hotkey": {
"label": "Pikanäppäin",
"prompt": {
"keybind-options": {
"hotkey": "Pikanäppäin"
},
"label": "Valitse pikanäppäin \"kuva kuvassa\" -tilan kytkemiseksi",
"title": "\"Kuva kuvassa\" -tilan pikanäppäin"
}
},
"save-window-position": "Tallenna ikkunan sijainti",
"save-window-size": "Tallenna ikkunan koko",
"use-native-pip": "Käytä selaimen natiivia \"Kuva kuvassa\" -tilaa"
},
"name": "Kuva kuvassa",
"templates": {
"button": "Kuva kuvassa"
}
},
"playback-speed": {
"description": "Kuuntele nopeasti, kuuntele hitaasti! Lisää säätimen, jolla voit säätää kappaleen toistonopeutta",
"name": "Toistonopeus",
"templates": {
"button": "Nopeus"
}
},
"precise-volume": {
"description": "Säädä äänenvoimakkuutta tarkasti hiiren rullaa tai pikanäppäimiä käyttäen. Kustomoidulla käyttöliittymällä ja säädettävällä äänenvoimakkuuden porrastuksella",
"menu": {
"custom-volume-steps": "Aseta mukautettu äänenvoimakkuuden porrastus",
"global-shortcuts": "Yleiset pikanäppäimet"
},
"name": "Tarkka äänenvoimakkuus",
"prompt": {
"global-shortcuts": {
"keybind-options": {
"decrease": "Vähennä äänenvoimakkuutta",
"increase": "Lisää äänenvoimakkuutta"
},
"label": "Valitse yleiset äänenvoimakkuuden pikanäppäimet:"
}
}
}
}
}

760
src/i18n/resources/fil.json Normal file
View File

@ -0,0 +1,760 @@
{
"common": {
"console": {
"plugins": {
"execute-failed": "Nabigong patakbuin ang plugin {{pluginName}}::{{contextName}}",
"executed-at-ms": "Ang plugin na {{pluginName}}::{{contextName}} ay pinatakbo sa loob ng {{ms}}ms",
"initialize-failed": "Nabigo ang pagsimula ng plugin na \"{{pluginName}}\"",
"load-all": "Nilo-load lahat ng mga plugin",
"load-failed": "Nabigong i-load ang plugin na \"{{pluginName}}\"",
"loaded": "Na-load ang \"{{pluginName}}\" na plugin",
"unload-failed": "Nabigong i-unload ang plugin na \"{{pluginName}}\"",
"unloaded": "Na-unload ang \"{{pluginName}}\" na plugin"
}
}
},
"language": {
"code": "fil",
"local-name": "Tagalog",
"name": "Filipino"
},
"main": {
"console": {
"did-finish-load": {
"dev-tools": "Natapos ang pag-load. Nabuksan ang DevTools"
},
"i18n": {
"loaded": "na-load ang i18n"
},
"second-instance": {
"receive-command": "Natanggap ang command sa pamamagitan ng protocol: \"{{command}}\""
},
"theme": {
"css-file-not-found": "Ang CSS file na \"{{cssFile}}\" ay hindi umiiral, hindi papansin"
},
"unresponsive": {
"details": "Hindi tumutugon na Error!\n{{error}}"
},
"when-ready": {
"clearing-cache-after-20s": "Naglilinis ng app cache"
},
"window": {
"tried-to-render-offscreen": "Nasubukan ng window na mag-render sa labas ng screen, windowSize={{windowSize}}, displaySize={{displaySize}}, position={{position}}"
}
},
"dialog": {
"hide-menu-enabled": {
"detail": "Nakatago ang menu, gamitin ang 'Alt' para makita ito (o 'Escape' kung gagamitin ang In-App na Menu)",
"message": "Ang Pagtatago ng Menu ay napagana na",
"title": "Napagana ang Pagtatago ng Menu"
},
"need-to-restart": {
"buttons": {
"later": "Mamaya",
"restart-now": "Mag-restart na"
},
"detail": "Ang plugin na \"{{pluginName}}\" ay kinakailangan ng restart para gumana ito",
"message": "Kinakailangan ng \"{{pluginName}}\" na mag-restart",
"title": "Kinakailangan ng Restart"
},
"unresponsive": {
"buttons": {
"quit": "Umalis",
"relaunch": "Muling patakbuhin",
"wait": "Maghintay"
},
"detail": "Ikinalulungkot namin ang abala! piliin kung ano ang gagawin:",
"message": "Ang Application ay Hindi Tumutugon",
"title": "Di tumutugon ang Window"
},
"update-available": {
"buttons": {
"disable": "Di-paganahin ang mga Update",
"download": "I-download",
"ok": "OK"
},
"detail": "Ang isang bagong bersyon ay available at maaaring i-download sa {{downloadLink}}",
"message": "Mayroong bagong version ay available",
"title": "Available ang Update"
}
},
"menu": {
"about": "Patungkol",
"navigation": {
"label": "Nabigasyon",
"submenu": {
"copy-current-url": "Kopyahin ang kasalukuyang URL",
"go-back": "Bumalik",
"go-forward": "Pasulong",
"quit": "Lumabas",
"restart": "I-restart ang App"
}
},
"options": {
"label": "Mga Opsyon",
"submenu": {
"advanced-options": {
"label": "Mga advance na opsyon",
"submenu": {
"auto-reset-app-cache": "I-reset ang app cache kapag nagsisimula ang app",
"disable-hardware-acceleration": "Di paganahin ang pagpapabilis ng hardware",
"edit-config-json": "I-edit ang config.json",
"override-user-agent": "I-override ang User-Agent",
"restart-on-config-changes": "I-restart kada may pagbabago sa config",
"set-proxy": {
"label": "I-set ang proxy",
"prompt": {
"label": "Ilagay ang Proxy Address: (iwanang walang laman para di-paganahin)",
"placeholder": "Halimbawa: SOCKS5://127.0.0.1:9999",
"title": "I-set ang proxy"
}
},
"toggle-dev-tools": "I-toggle ang DevTools"
}
},
"always-on-top": "Laging nasa ibabaw",
"auto-update": "Awto Update",
"hide-menu": {
"dialog": {
"message": "Ang menu ay itatago sa susunod na pag-launch, gamitin ang [Alt] upang ipakita ito (o backtick [`] kung gumagamit ng in-app-menu)",
"title": "Pinagana ang Pagtatago ng Menu"
},
"label": "Pagtatago ng Menu"
},
"language": {
"dialog": {
"message": "Ang wika ay mababago pagkatapos mag-restart",
"title": "Napalitan ang Wika"
},
"label": "Wika",
"submenu": {
"to-help-translate": "Gusto mong tumulong sa pagsasalin? Mag-click dito"
}
},
"resume-on-start": "Ipagpatuloy ang huling kanta kapag nagsisimula ang app",
"single-instance-lock": "I-lock sa isang Instance",
"start-at-login": "Magsimula sa pag-login",
"starting-page": {
"label": "Simulang page",
"unset": "I-unset"
},
"tray": {
"label": "Tray",
"submenu": {
"disabled": "Di-napagana",
"enabled-and-hide-app": "Napagana at natago ang app",
"enabled-and-show-app": "Napagana at napakita ang app",
"play-pause-on-click": "Mag play/pause kada click"
}
},
"visual-tweaks": {
"label": "Mga Biswal na Tweak",
"submenu": {
"like-buttons": {
"default": "Default",
"force-show": "Pilitang ipakita",
"hide": "Itago",
"label": "Mga Like na button"
},
"remove-upgrade-button": "Tanggalin ang upgrade na button",
"theme": {
"dialog": {
"button": {
"cancel": "Kanselahin",
"remove": "Tanggalin"
},
"remove-theme": "Sigurado ka bang gusto mong alisin ang custom na tema?",
"remove-theme-message": "Aalisin nito ang custom na tema"
},
"label": "Tema",
"submenu": {
"import-css-file": "Mag-import ng custom na CSS file",
"no-theme": "Walang tema"
}
}
}
}
}
},
"plugins": {
"enabled": "Napagana",
"label": "Mga Plugin",
"new": "BAGO"
},
"view": {
"label": "View",
"submenu": {
"force-reload": "Pilitang I-reload",
"reload": "I-reload",
"reset-zoom": "Aktuwal na Size",
"toggle-fullscreen": "I-toggle ang Full Screen",
"zoom-in": "Mag-zoom in",
"zoom-out": "Mag-zoom out"
}
}
},
"tray": {
"next": "Susunod",
"play-pause": "Mag-play/Mag-pause",
"previous": "Nakaraan",
"quit": "Lumabas",
"restart": "I-restart ang App",
"show": "Ipakita ang window",
"tooltip": {
"default": "YouTube Music",
"with-song-info": "YouTube Music: {{artist}} - {{title}}"
}
}
},
"plugins": {
"ad-speedup": {
"description": "Pag mag-play ng ad, I-mute ang audio at i-set ang bilis ng playback ng 16x",
"name": "Pagbilis ng Ad"
},
"adblocker": {
"description": "I-block ang lahat ng ad at tracking",
"menu": {
"blocker": "Blocker"
},
"name": "Pag-block ng Ad"
},
"album-actions": {
"description": "Idadagdag ang Undislike, Dislike, Like, at Unlike na button para ilapat ito sa lahat ng kanta sa isang playlist o album",
"name": "Mga aksyon sa Album"
},
"album-color-theme": {
"description": "Naglalapat ng dynamic na tema at visual effect batay sa color palette ng album",
"menu": {
"color-mix-ratio": {
"label": "Ratio ng paghahalo ng kulay",
"submenu": {
"percent": "{{ratio}}%"
}
}
},
"name": "Tema ng Kulay ng Album"
},
"ambient-mode": {
"description": "Naglalapat ng lighting effect sa pamamagitan ng pag-cast ng mga magiliw na kulay mula sa video, sa background ng iyong screen",
"menu": {
"blur-amount": {
"label": "Dami ng blur",
"submenu": {
"pixels": "{{blurAmount}} na pixel"
}
},
"buffer": {
"label": "Buffer",
"submenu": {
"buffer": "{{buffer}}"
}
},
"opacity": {
"label": "Kalabuan (Opacity)",
"submenu": {
"percent": "{{opacity}}%"
}
},
"quality": {
"label": "Kalidad",
"submenu": {
"pixels": "{{quality}} na pixel"
}
},
"size": {
"label": "Laki",
"submenu": {
"percent": "{{size}}%"
}
},
"smoothness-transition": {
"label": "Ayos ng Transisyon",
"submenu": {
"during": "Habang {{interpolationTime}} s"
}
},
"use-fullscreen": {
"label": "Gumamit ng fullscreen"
}
},
"name": "Ambient Mode"
},
"api-server": {
"description": "Nagdadagdag ng API Server upang kontrolin ang player",
"dialog": {
"request": {
"buttons": {
"allow": "Payagan",
"deny": "Tanggihan"
},
"message": "Payagan ang {{ID}} ({{origin}}) upang ma-access ang API?",
"title": "Awtorisasyon ng API request"
}
},
"menu": {
"auth-strategy": {
"label": "Estratehiya ng awtorisasyon",
"submenu": {
"auth-at-first": {
"label": "Mag-autorisa sa unang request"
},
"none": {
"label": "Walang awtorisasyon"
}
}
},
"hostname": {
"label": "Hostname"
},
"port": {
"label": "Port"
}
},
"name": "API Server [Beta]",
"prompt": {
"hostname": {
"label": "Itala ang hostname (tulad ng 0.0.0.0) para sa API server:",
"title": "Hostname"
},
"port": {
"label": "Itala ang port para sa API server:",
"title": "Port"
}
}
},
"audio-compressor": {
"description": "Ilapat ang compression sa audio (pinababa ang volume ng pinakamalakas na bahagi ng signal at pinapataas ang volume ng pinakamalambot na bahagi)",
"name": "Compressor ng Audio"
},
"blur-nav-bar": {
"description": "Gawing transparent at malabo ang bar ng nabigasyon",
"name": "Palabuin ang Bar ng Nabigasyon"
},
"bypass-age-restrictions": {
"description": "I-bypass ang pag-verify ng edad ng YouTube",
"name": "I-bypass ang Restriksyon sa Edad"
},
"captions-selector": {
"description": "Tagapili ng caption para sa mga audio track ng YouTube Music",
"menu": {
"autoload": "Awtomatikong piliin ang huling ginamit na caption",
"disable-captions": "Walang mga caption bilang default"
},
"name": "Tagapili ng Caption",
"prompt": {
"selector": {
"label": "Kasalukuyang wika ng caption:{{language}}",
"none": "Wala",
"title": "Pumili ng wika ng caption"
}
},
"templates": {
"title": "Bumukas ng pagpilian ng caption"
}
},
"compact-sidebar": {
"description": "Laging i-set ang sidebar sa compact mode",
"name": "Pinaliit na Sidebar"
},
"crossfade": {
"description": "I-crossfade kada kanta",
"prompt": {
"options": {
"multi-input": {
"fade-in-duration": "Tagal ng pag-fade in (ms)",
"fade-out-duration": "Tagal ng pag-fade out (ms)",
"fade-scaling": {
"label": "Scaling ng pag-fade"
},
"seconds-before-end": "I-crossfade sa loob ng N segundo bago ang katapusan"
},
"title": "Pagpipilian sa crossfade"
}
}
},
"disable-autoplay": {
"description": "Gawing simulan ang kanta sa \"naka-pause\" na mode",
"menu": {
"apply-once": "Nalalapat lamang sa startup"
},
"name": "Patayin ang Pag-Autoplay"
},
"discord": {
"backend": {
"already-connected": "Sinubukang kumonekta sa aktibong koneksyon",
"connected": "Nakakonekta sa Discord",
"disconnected": "Nadiskonekta sa Discord"
},
"description": "Ipakita sa iyong mga kaibigan kung ano ang pinapakinggan mo gamit ang Rich Presence",
"menu": {
"auto-reconnect": "Awtomatikong kumonekta muli",
"clear-activity": "I-clear ang aktibidad",
"clear-activity-after-timeout": "I-clear ang aktibidad pagkatapos ng timeout",
"connected": "Nakakonekta",
"disconnected": "Nadiskonekta",
"hide-duration-left": "Itago ang natitirang oras",
"hide-github-button": "Itago ang button na GitHub link",
"play-on-youtube-music": "Patugtugin sa YouTube Music",
"set-inactivity-timeout": "I-set ang inactivity timeout"
},
"prompt": {
"set-inactivity-timeout": {
"label": "Ilagay ang inactivity timeout sa ilang segundo:",
"title": "I-set ang inactivity timeout"
}
}
},
"downloader": {
"backend": {
"dialog": {
"error": {
"message": "Kainis! Paumanhin, nabigo ang pag-download…",
"title": "Nagkaroon ng error sa pag-download!"
},
"start-download-playlist": {
"detail": "({{playlistSize}} na mga kanta)",
"message": "Dina-download ang Playlist na {{playlistTitle}}",
"title": "Nasimulan na ang pag-download"
}
},
"feedback": {
"conversion-progress": "Pag-convert: {{percent}}%",
"converting": "Kino-convert…",
"done": "Natapos na: {{filePath}}",
"download-info": "Dina-download ang {{artist}} - {{title}} [{{videoId}}",
"download-progress": "Dina-download: {{percent}}%",
"downloading": "Dina-download…",
"downloading-counter": "Dina-download {{current}}/{{total}}…",
"downloading-playlist": "Dina-download ang playlist \"{{playlistTitle}}\" - {{playlistSize}} na mga kanta ({{playlistId}})",
"error-while-downloading": "Error sa pag-download \"{{author}} - {{title}}\": {{error}}",
"folder-already-exists": "Ang folder na {{playlistFolder}} ay umiiral na",
"getting-playlist-info": "Kinukuha ang impo ng playlist…",
"loading": "Naglo-load…",
"playlist-has-only-one-song": "May isang aytem lang ang playlist, direktang dina-download na",
"playlist-id-not-found": "Walang playlist ID na nahanap",
"playlist-is-empty": "Walang laman ang playlist",
"playlist-is-mix-or-private": "Error sa pagkuha ng impo ng playlist: tiyaking hindi ito pribado o \"Mixed para sa iyo\" na playlist\n\n{{error}}",
"preparing-file": "Inihahanda ang file…",
"saving": "Sine-save…",
"trying-to-get-playlist-id": "Sinusubukang makuha ang playlist ID: {{playlistId}}",
"video-id-not-found": "Hindi nahanap ang video",
"writing-id3": "Sinusulat ang mga ID3 na tag…"
}
},
"description": "Dina-download ang mga MP3 / source audio direkta mula sa interface",
"menu": {
"choose-download-folder": "Pumili ng download folder",
"download-finish-settings": {
"label": "Kung natapos ang download",
"prompt": {
"last-percent": "Tapos ng x na porsyento",
"last-seconds": "Huling x na segundo",
"title": "I-configure kung kailan magda-download"
},
"submenu": {
"enabled": "Napagana na",
"percent": "Porsyento",
"seconds": "Segundo"
}
},
"download-playlist": "Dina-download ang playlist",
"presets": "Mga preset",
"skip-existing": "Laktawan ang mga kasalukuyang file"
},
"renderer": {
"can-not-update-progress": "Hindi ma-update ang progress"
},
"templates": {
"button": "Mag-download"
}
},
"exponential-volume": {
"description": "Ginagawang exponential ang volume slider para mas madaling pumili ng mas mababang volume."
},
"in-app-menu": {
"description": "Nagbibigay sa mga menu-bar ng magarbo, madilim o kulay ng album",
"menu": {
"hide-dom-window-controls": "Itago ang mga DOM window control"
}
},
"lumiastream": {
"description": "Nabibigay suporta sa Lumia Stream",
"name": "Lumia Stream [Beta]"
},
"lyrics-genius": {
"description": "Nagdaragdag ng suporta sa lyrics para sa karamihan ng kanta",
"renderer": {
"fetched-lyrics": "Kinuha ang lyrics para sa Genius"
}
},
"music-together": {
"description": "Magbahagi ng playlist sa iba. Kapag nagpatugtog ang host ng isang kanta, maririnig ng lahat ang parehong kanta",
"dialog": {
"enter-host": "Ilagay ang Host ID"
},
"internal": {
"save": "I-save",
"unknown-user": "Di-kilalang User"
},
"menu": {
"click-to-copy-id": "Kopyahin ang Host ID",
"close": "Isara ang Music Together",
"connected-users": "Nakakonektang (mga) User",
"disconnect": "Mag-diskonekta sa Music Together",
"empty-user": "Walang naka-konektang user",
"host": "Host ng Music Together",
"join": "Sumali sa Music Together",
"permission": {
"all": "Payagan ang mga guest na kontrolin ang playlist at player",
"host-only": "Ang host lamang ang maka-kontrol ng playlist at player",
"playlist": "Payagan ang mga guest na kontrolin ang playlist"
},
"set-permission": "Palitan ng permiso ng pag-control",
"status": {
"disconnected": "Nadiskonekta",
"guest": "Nakakonekta bilang Guest",
"host": "Nakakonekta bilang Host"
}
},
"toast": {
"add-song-failed": "Nabigong magdagdag ng kanta",
"closed": "Nakasara ang Music Together",
"disconnected": "Nakadiskonekta ang Music Together",
"host-failed": "Nabigong mag-host ng Music Together",
"id-copied": "Nakopya na ang Host ID sa clipboard",
"id-copy-failed": "Nabigong nakopya ang Host ID sa clipboard",
"join-failed": "Nabigong sumali sa Music Together",
"joined": "Nakasali sa Music Together",
"permission-changed": "Ang permiso ng Music Together ay nabago sa \"{{permission}}\"",
"remove-song-failed": "Nabigong natanggal ang kanta",
"user-connected": "{{name}} ay sumali sa Music Together",
"user-disconnected": "{{name}} ay umalis sa Music Together"
}
},
"navigation": {
"description": "Ang Next/Back navigation na arrow ay direktang magamit sa interface, katulad sa iyong paboritong browser",
"name": "Nabigasyon"
},
"no-google-login": {
"description": "Tanggalin ang mga Google login na button at mga link mula sa interface",
"name": "Walang Google na Login"
},
"notifications": {
"description": "Magpakita ng notification kapag nagsimulang tumugtog ang kanta (magagamit ang mga interactive na notification sa Windows)",
"menu": {
"interactive": "Interactive na Notification",
"interactive-settings": {
"label": "Mga Interactive na Setting",
"submenu": {
"hide-button-text": "Itago ang button na texto",
"refresh-on-play-pause": "I-refresh sa Pag-play/Pag-pause",
"tray-controls": "Buksan/Isara sa pag-click sa tray"
}
},
"priority": "Prioridad ng Notification",
"toast-style": "Estilo ng toast",
"unpause-notification": "Ipakita ang notification sa pag-unpause"
},
"name": "Mga Abiso"
},
"picture-in-picture": {
"description": "Payagan ang pag-palit ng app sa picture-in-picture mode",
"menu": {
"always-on-top": "Laging sa itaas",
"hotkey": {
"prompt": {
"label": "Pumili ng hotkey sa pag-toggle ng picture-in-picture",
"title": "Hotkey ng Picture-in-picture"
}
},
"save-window-position": "I-save ang posisyon ng window",
"save-window-size": "I-save ang laki ng window",
"use-native-pip": "Gamitin ang browser native na PiP"
}
},
"playback-speed": {
"description": "Makinig na mabilisan, makinig na mabagalan! Nagdaragdag ito ng slider upang makontrol ang bilis ng kanta",
"name": "Bilis ng Playback",
"templates": {
"button": "Bilis"
}
},
"precise-volume": {
"description": "Kontrolin nang wasto ang volume gamit ang mousewheel/mga hotkey, na may custom HUD at customizable na volume step",
"menu": {
"arrows-shortcuts": "Lokal na Arrow-key na Kontrol",
"custom-volume-steps": "I-set ang custom na Volume Step"
},
"prompt": {
"global-shortcuts": {
"keybind-options": {
"decrease": "Bawasan ang Volume",
"increase": "Dagdagan ang Volume"
},
"label": "Pumili ng Keybind para sa Global Volume:"
},
"volume-steps": {
"label": "Pumili ng Dagdagan/Bawasan ang volume step"
}
}
},
"quality-changer": {
"backend": {
"dialog": {
"quality-changer": {
"detail": "Kasalukuyang Kalidad: {{quality}}",
"message": "Pumili ng Kalidad ng Video:",
"title": "Pumili ng Kalidad ng Video"
}
}
},
"description": "Payagang mapapalitan ang kalidad ng video na may button sa video overlay"
},
"scrobbler": {
"description": "Idagdag ang scrobbling support (last.fm, Listenbrains, atbp.)",
"dialog": {
"lastfm": {
"auth-failed": {
"message": "Nabigong mag-authenticate sa Last.fm\nItago ang popup hanggang sa susunod na pag-restart.",
"title": "Nabigo ang Authentication"
}
}
},
"menu": {
"lastfm": {
"api-settings": "Mga setting ng API para sa Last.fm"
},
"listenbrainz": {
"token": "Ilagay ang user token ng ListenBrainz"
},
"scrobble-other-media": "Mag-Scrobble ng ibang media"
},
"prompt": {
"lastfm": {
"api-key": "API key ng Last.fm",
"api-secret": "API secret ng Last.fm"
},
"listenbrainz": {
"token": {
"label": "Ilagay ang ListenBrainz user token:",
"title": "Token ng ListenBrainz"
}
}
}
},
"shortcuts": {
"description": "Nagbibigay-daan sa pagtatakda ng mga global hotkey para sa playback (play/pause/susunod/nakaraan) at pag-off ng media OSD sa pamamagitan ng pag-override sa mga media key, pag-on sa Ctrl/CMD + F para maghanap, pag-on sa suporta ng Linux MPRIS para sa mga media key, at mga custom na hotkey para sa mga advanced na user",
"menu": {
"override-media-keys": "I-override ang mga Media Key",
"set-keybinds": "I-set ang Global Song Control"
},
"name": "Mga shortcut (at MPRIS)",
"prompt": {
"keybind": {
"keybind-options": {
"next": "Susunod",
"play-pause": "Mag-play / Mag-pause",
"previous": "Nakaraan"
},
"label": "Pumili ng Global na Keybind para sa Songs Control:"
}
}
},
"skip-disliked-songs": {
"description": "Laktawan ang na-dislike na kanta",
"name": "I-skip ang mga Na-dislike na Kanta"
},
"skip-silences": {
"description": "Automatikong laktawan ang mga tahimik na mga seksyon sa kanta",
"name": "I-skip ang mga Katahimikan"
},
"sponsorblock": {
"description": "Automatikong Laktawan ang di part ng kanta tulad ng intro/outro o part ng mga music video na ang kanta ay di nagple-play"
},
"synced-lyrics": {
"description": "Nagbibigay ng naka-sync na lyrics sa mga kanta, gamit ang mga provider tulad ng LRClib.",
"errors": {
"fetch": "⚠️ - Nagkaroon ng error habang kinukuha ang lyrics. Subukang muli mamaya.",
"not-found": "⚠️ - Walang nakitang lyrics para sa kantang ito."
},
"menu": {
"default-text-string": {
"label": "Default na character sa pagitan ng lyrics",
"tooltip": "Pumili ng default na character na gagamitin sa pagitan ng lyrics"
},
"line-effect": {
"label": "Effect ng Linya",
"submenu": {
"focus": {
"tooltip": "Gawing puti lamang ang kasalukuyang linya"
},
"offset": {
"tooltip": "I-offset sa kanan ang kasalukuyang linya"
},
"scale": {
"tooltip": "I-scale ang kasalukuyang linya"
}
},
"tooltip": "Pumili ng effect na ilalapat sa kasalukuyang linya"
},
"precise-timing": {
"label": "Gawing perpektong naka-sync ang lyrics",
"tooltip": "Kalkulahin sa millisecond ang pagpapakita ng susunod na linya (maaaring magkaroon ng maliit na epekto sa performance)"
},
"show-lyrics-even-if-inexact": {
"label": "Ipakita ang lyrics kahit di-eksakto",
"tooltip": "Kung hindi matagpuan ang kanta, susubukan muli ng plugin gamit ang ibang query sa paghahanap.\nAng resulta mula sa pangalawang pagsubok ay maaaring hindi eksakto."
},
"show-time-codes": {
"label": "Ipakita ang mga time code",
"tooltip": "Ipakita ang mga time code kasunod sa lyrics"
}
},
"refetch-btn": {
"fetching": "Nag-fe-fetch...",
"normal": "I-fetch muli ang lyrics"
},
"warnings": {
"duration-mismatch": "⚠️ - Maaaring hindi naka-sync ang lyrics dahil sa hindi pagkakatugma ng duration.",
"inexact": "⚠️ - Maaaring hindi eksakto ang lyrics para sa kantang ito",
"instrumental": "⚠️ - Ito ay isang instrumental na kanta"
}
},
"taskbar-mediacontrol": {
"description": "Kontrolin ang pag-play mula sa iyong taskbar ng Windows"
},
"touchbar": {
"description": "Idaragdag ang TouchBar na widget para sa mga user ng macOS"
},
"tuna-obs": {
"description": "Integrasyon kasama ang Tuna na OBS plugin"
},
"video-toggle": {
"description": "Idaragdag ng button na magpalit sa Video/Kanta na mode. maaari ding opsyonal na alisin ang tab ng video",
"menu": {
"align": {
"submenu": {
"left": "Kaliwa",
"middle": "Gitna",
"right": "Kanan"
}
},
"force-hide": "Piliting tanggalin ang video tab",
"mode": {
"submenu": {
"disabled": "Naka-disable"
}
}
},
"templates": {
"button": "Kanta"
}
},
"visualizer": {
"description": "Idaragdag ng visualizer sa player",
"menu": {
"visualizer-type": "Uri ng Visualizer"
}
}
}
}

View File

@ -59,7 +59,7 @@
},
"unresponsive": {
"buttons": {
"quit": "Quitté",
"quit": "Quitter",
"relaunch": "Relancer",
"wait": "Attendre"
},
@ -105,7 +105,7 @@
"label": "Définir un proxy",
"prompt": {
"label": "Entrez l'adresse proxy : (laissez vide pour désactiver)",
"placeholder": "Exemple: socks5://127.0.0.1:9999",
"placeholder": "Exemple: SOCKS5://127.0.0.1:9999",
"title": "Définir un proxy"
}
},
@ -158,6 +158,14 @@
},
"remove-upgrade-button": "Supprimer le bouton de mise à niveau",
"theme": {
"dialog": {
"button": {
"cancel": "Annuler",
"remove": "Supprimer"
},
"remove-theme": "Êtes-vous sûr de supprimer le thème personnalisé?",
"remove-theme-message": "Cela va supprimer le thème personnalisé"
},
"label": "Thème",
"submenu": {
"import-css-file": "Importer fichier CSS personnalisé",
@ -170,7 +178,8 @@
},
"plugins": {
"enabled": "Activé",
"label": "Extensions"
"label": "Extensions",
"new": "NOUVEAU"
},
"view": {
"label": "Vue",
@ -190,10 +199,18 @@
"previous": "Précédent",
"quit": "Quitter",
"restart": "Redémarrer l'application",
"show": "Afficher la fenêtre"
"show": "Afficher la fenêtre",
"tooltip": {
"default": "YouTube Music",
"with-song-info": "YouTube Music: {{artist}} - {{title}}"
}
}
},
"plugins": {
"ad-speedup": {
"description": "Si une publicité apparaît, le son est coupé et la vitesse de lecture est réglée sur 16x",
"name": "Accélérer les publicités"
},
"adblocker": {
"description": "Bloquer toutes les annonces et le suivi par défaut",
"menu": {
@ -201,12 +218,24 @@
},
"name": "Bloqueur de publicités"
},
"album-actions": {
"description": "Ajoute les boutons Dislike, Undislike, Like, et Unlike à appliquer sur toutes les chansons dans un playlist ou un album.",
"name": "Actions d'Album"
},
"album-color-theme": {
"description": "Applique un thème dynamique et des effets visuels basés sur la palette des couleurs de l'album",
"menu": {
"color-mix-ratio": {
"label": "Ratio de mélange des couleurs",
"submenu": {
"percent": "{{ratio}}%"
}
}
},
"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.",
"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",
@ -250,6 +279,49 @@
},
"name": "Mode ambiant"
},
"api-server": {
"description": "Ajouter un serveur API pour contrôler le lecteur",
"dialog": {
"request": {
"buttons": {
"allow": "Autoriser",
"deny": "Interdire"
},
"message": "Autoriser {{ID}} ({{origin}}) à accéder à l'API?",
"title": "Requête d'autorisation d'API"
}
},
"menu": {
"auth-strategy": {
"label": "Plan d'autorisation",
"submenu": {
"auth-at-first": {
"label": "Autoriser à la première requête"
},
"none": {
"label": "Pas d'autorisation"
}
}
},
"hostname": {
"label": "Nom de l'hôte"
},
"port": {
"label": "Port"
}
},
"name": "Serveur API [Beta]",
"prompt": {
"hostname": {
"label": "Entrer le nom de l'hôte (par exemple 0.0.0.0) pour le serveur API:",
"title": "Nom d'hôte"
},
"port": {
"label": "Entrer le port du serveur de l'API :",
"title": "Port"
}
}
},
"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"
@ -293,8 +365,8 @@
"prompt": {
"options": {
"multi-input": {
"fade-in-duration": "Durée du fondu (millisecondes)",
"fade-out-duration": "Durée du fondu (millisecondes)",
"fade-in-duration": "Durée du début du fondu (ms)",
"fade-out-duration": "Durée de sortie du fondu (ms)",
"fade-scaling": {
"label": "Mise à l'échelle du fondu",
"linear": "Linéaire",
@ -363,7 +435,7 @@
"converting": "Conversion…",
"done": "Terminé : {{filePath}}",
"download-info": "Téléchargement {{artist}} - {{title}} [{{videoId}}",
"download-progress": "Télécharger: {{percent}}%",
"download-progress": "Téléchargé : {{percent}}%",
"downloading": "Télécharge…",
"downloading-counter": "Télécharge {{current}}/{{total}}…",
"downloading-playlist": "Téléchargement de la playlist \"{{playlistTitle}}\"  {{playlistSize}} chansons ({{playlistId}})",
@ -385,6 +457,21 @@
"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-finish-settings": {
"label": "Télécharger une fois terminé",
"prompt": {
"last-percent": "Après x pour cent",
"last-seconds": "Dernières x secondes",
"title": "Configurer quand télécharger"
},
"submenu": {
"advanced": "Avancé",
"enabled": "Activé",
"mode": "Mode de temps",
"percent": "Pourcent",
"seconds": "Secondes"
}
},
"download-playlist": "Télécharger la liste de lecture",
"presets": "Préconfigurations",
"skip-existing": "Passer les fichiers existants"
@ -397,6 +484,18 @@
"button": "Télécharger"
}
},
"equalizer": {
"description": "Ajoute un égaliseur au lecteur",
"menu": {
"presets": {
"label": "Préréglages",
"list": {
"bass-booster": "Amplificateur de basses"
}
}
},
"name": "Égaliseur"
},
"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"
@ -408,10 +507,6 @@
},
"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]"
@ -426,6 +521,52 @@
"fetched-lyrics": "Paroles récupérées pour Genius"
}
},
"music-together": {
"description": "Partage une playlist avec d'autres personnes. Quand l'hôte joue un son, tout les participants entendront le même son",
"dialog": {
"enter-host": "Entrer l'identifiant de l'hôte"
},
"internal": {
"save": "Enregistrer",
"track-source": "Source de la piste audio",
"unknown-user": "Utilisateur inconnu"
},
"menu": {
"click-to-copy-id": "Copier l'identifiant de l'hôte",
"close": "Fermer Music Together",
"connected-users": "Utilisateurs connectés",
"disconnect": "Déconnecter Music Together",
"empty-user": "Aucun utilisateur connecté",
"host": "Hôte du Music Together",
"join": "Rejoindre le Music Together",
"permission": {
"all": "Autorisez les invités à contrôler la musique et le player",
"host-only": "Seulement l'hôte peut contrôler les playlists et le lecteur",
"playlist": "Autoriser les invités à contrôler les playlists"
},
"set-permission": "Changer les permissions de contrôle",
"status": {
"disconnected": "Déconnecté",
"guest": "Connecté en tant qu'invité",
"host": "Connecté en tant qu'hôte"
}
},
"name": "Music Together [BETA]",
"toast": {
"add-song-failed": "Echec d'ajout de musique",
"closed": "Music Together fermé",
"disconnected": "Music Together déconnecté",
"host-failed": "Echec de l'hébergement du Music Together",
"id-copied": "Identifiant de l'hôte copié dans le presse papier",
"id-copy-failed": "Echec de la copie de l'identifiant de l'hôte dans le presse papier",
"join-failed": "Echec en rejoignant le Music Together",
"joined": "Rejoint le Music Together",
"permission-changed": "Permission du Music Together changé à \"{{permission}}\"",
"remove-song-failed": "Echec du retrait de la piste",
"user-connected": "{{name}} à rejoint le Music Together",
"user-disconnected": "{{name}} à quitté le Music Together"
}
},
"navigation": {
"description": "Flèches de navigation Suivant/Retour directement intégrées dans l'interface, comme dans votre navigateur préféré",
"name": "Navigation"
@ -462,7 +603,7 @@
"keybind-options": {
"hotkey": "Raccourci clavier"
},
"label": "Choisissez un raccourci clavier pour activer l'image dans l'image",
"label": "Choisissez un raccourci clavier pour activer le mode Image dans l'image",
"title": "Touche de raccourci Image dans l'image"
}
},
@ -518,8 +659,41 @@
"description": "Permet de changer la qualité vidéo avec un bouton sur la vidéo",
"name": "Changeur de qualité vidéo"
},
"scrobbler": {
"description": "Ajouter le support de scrobbling (ex. last.fm, Listenbrainz)",
"dialog": {
"lastfm": {
"auth-failed": {
"message": "Erreur lors de l'authetification avec Last.fm\nCachez la popup jusqu'au prochain redémarrage.",
"title": "Authentification échouée"
}
}
},
"menu": {
"lastfm": {
"api-settings": "Paramètres API de Last.fm"
},
"listenbrainz": {
"token": "Entrer le token utilisateur de ListenBrainz"
},
"scrobble-other-media": "Scrobbler d'autres médias"
},
"name": "Scrobble",
"prompt": {
"lastfm": {
"api-key": "Clé API de Last.fm",
"api-secret": "API secret de Last.fm"
},
"listenbrainz": {
"token": {
"label": "Entrez votre token utilisateur ListenBrainz:",
"title": "Token ListenBrainz"
}
}
}
},
"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",
"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"
@ -538,7 +712,8 @@
}
},
"skip-disliked-songs": {
"description": "Passer les musiques que je n'aime pas"
"description": "Passer les musiques que je n'aime pas",
"name": "Passer Chansons Déplaisantes"
},
"skip-silences": {
"description": "Ignorer automatiquement les sections de silence dans les chansons",
@ -548,6 +723,59 @@
"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"
},
"synced-lyrics": {
"description": "Ajoute des paroles synchronisées aux chansons, grâce à LRClib par exemple.",
"errors": {
"fetch": "⚠️ - Une erreur s'est produite en allant chercher les paroles. Merci de réessayer plus tard.",
"not-found": "⚠️ - Aucune paroles trouvées pour cette musique."
},
"menu": {
"default-text-string": {
"label": "Caractère par défaut entre les paroles",
"tooltip": "Choisi le caractère par défaut à utiliser pour l'espace entre les paroles"
},
"line-effect": {
"label": "Effet de ligne",
"submenu": {
"focus": {
"label": "Focus",
"tooltip": "Rend seulement la ligne actuelle blanche"
},
"offset": {
"label": "Décalage",
"tooltip": "Décale sur la droite la ligne actuelle"
},
"scale": {
"label": "Grossissement",
"tooltip": "Agrandis la ligne actuelle"
}
},
"tooltip": "Choisi l'effet à appliquer sur la ligne actuelle"
},
"precise-timing": {
"label": "Rend les paroles parfaitement synchronisées",
"tooltip": "Calcul à la milliseconde près l'affichage de la ligne suivante (peut avoir un faible impact sur les performances)"
},
"show-lyrics-even-if-inexact": {
"label": "Afficher les paroles même si inexactes",
"tooltip": "Si la musique n'est pas trouvé, le plugin essaye à nouveau avec une différence requête.\nLe résultat du deuxième essais peut ne pas être exacte."
},
"show-time-codes": {
"label": "Afficher les timecodes",
"tooltip": "Affiche à côté de chaque paroles son timecode"
}
},
"name": "Paroles Synchronisées",
"refetch-btn": {
"fetching": "Chargement...",
"normal": "Rafraîchir les paroles"
},
"warnings": {
"duration-mismatch": "⚠️ - Les paroles peuvent ne pas être synchronisées à cause d'une différence de durée.",
"inexact": "⚠️ - Les paroles de cette chanson peuvent ne pas être exactes",
"instrumental": "⚠️ - Cette musique n'a pas de paroles"
}
},
"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"

View File

@ -0,0 +1,91 @@
{
"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": "he",
"local-name": "עברית",
"name": "Hebrew"
},
"main": {
"console": {
"did-finish-load": {
"dev-tools": "הטעינה הסתיימה. הכלים לפמתחים נפתחו"
},
"i18n": {
"loaded": "i18n נטען"
},
"second-instance": {
"receive-command": "התקבלה פקודה מעבר פרוטוקל: {{command}}"
},
"theme": {
"css-file-not-found": "קובץ ה-CSS \"{{cssFile}}\" לא קיים. מדלג"
},
"unresponsive": {
"details": "שגיאה ללא תגובה\n{{error}}"
},
"when-ready": {
"clearing-cache-after-20s": "מוחק קבצי מתמון"
},
"window": {
"tried-to-render-offscreen": "ווינדוס ניסה להציג תוכן מחוץ למסך, גודל חלון={{windowSize}}, גודל מסך={{displaySize}}, מיקום={{position}}"
}
},
"dialog": {
"hide-menu-enabled": {
"detail": "התפריט מוחבא, השתמש \"Alt\" על להציג אותו (או \"Esacpe\" אם משתמשים בתפריט בתוך האפליקציה)",
"message": "הסתרת התפריט מופעלת",
"title": "הסתרת התפריט הופעלה"
},
"need-to-restart": {
"buttons": {
"later": "אחר כך",
"restart-now": "מתחיל את התוכנה מחדש עכשיו"
},
"title": "נדרשת הפעלה מחדש"
},
"unresponsive": {
"buttons": {
"quit": "יציאה",
"relaunch": "הפעל מחדש",
"wait": "המתן"
},
"detail": "אנו מצטערים על אי הנוחות! אנא בחר מה לעשות:",
"message": "האפליקציה אינה מגיבה",
"title": "החלון אינו מגיב"
},
"update-available": {
"buttons": {
"disable": "בטל עדכונים",
"download": "הורדה",
"ok": "אוקי"
},
"message": "גירסא חדשה זמינה כעת",
"title": "קיים עדכון חדש"
}
},
"menu": {
"about": "אודות",
"navigation": {
"label": "ניווט",
"submenu": {
"copy-current-url": "העתק את כתובת ה-URL",
"go-back": "חזור אחורה",
"go-forward": "לך קדימה",
"quit": "יציאה"
}
}
}
}
}

217
src/i18n/resources/hi.json Normal file
View File

@ -0,0 +1,217 @@
{
"common": {
"console": {
"plugins": {
"execute-failed": "{{pluginName}}::{{contextName}} प्लगइन निष्पादित करने में विफल",
"executed-at-ms": "{{pluginName}}::{{contextName}} प्लगिन {{ms}} में निष्पाशित हुआ",
"initialize-failed": "\"{{pluginName}}\" प्लगिन इनिशियलाइज़ होने में असफल रहा",
"load-all": "सारे प्लगिन लोड हो चुके हैं",
"load-failed": "\"{{pluginName}}\" प्लगिन लोड होने में असफल रहा",
"loaded": "प्लगिन \"{{pluginName}}\" लोड हो चुका है",
"unload-failed": "\"{{pluginName}}\" अनलोड होने में असफल रहा",
"unloaded": "प्लगिन \"{{pluginName}}\" अनलोड हो गया है"
}
}
},
"language": {
"code": "hi",
"local-name": "हिंदी",
"name": "Hindi"
},
"main": {
"console": {
"did-finish-load": {
"dev-tools": "लोडिंग समाप्त हुई । डेवटूल्स खोले गए हैं"
},
"i18n": {
"loaded": "i18n लोड हो गया है"
},
"second-instance": {
"receive-command": "प्रोटोकॉल पर आदेश प्राप्त हुआ \"{{command}}\""
},
"theme": {
"css-file-not-found": "सीएसएस फाइल \"{{cssFile}}\" मौजूद नही है, अनदेखा किया जा रहा है"
},
"unresponsive": {
"details": "अनरेस्पॉन्सिव एरर\n{{error}}"
},
"when-ready": {
"clearing-cache-after-20s": "एप कैश साफ़ किया जा रहा है"
},
"window": {
"tried-to-render-offscreen": "विंडो ने ऑफस्क्रीन रेंडर करने का प्रयास किया, विंडो साइज={{windowSize}}, डिस्प्ले साइज={{displaySize}}, पोजिशन={{position}}"
}
},
"dialog": {
"hide-menu-enabled": {
"detail": "मेनू छिपा हुआ है, देखने के लिए 'Alt' का इस्तेमाल करें (या 'Escape' अगर आप इन-एप मेनू का उपयोग कर रहे हैं)",
"message": "मेनू छिपाएँ सक्षम है",
"title": "मेनू छिपाएँ सक्षम"
},
"need-to-restart": {
"buttons": {
"later": "बाद में",
"restart-now": "पुनः आरंभ करें"
},
"detail": "\"{{pluginName}}\" प्रभाव लेने के लिए प्लगिन को पुनः शुरू करें",
"message": "\"{{pluginName}}\" पुनः आरंभ करने की आवश्यकता है",
"title": "पुनः आरंभ करने की आवश्यकता है"
},
"unresponsive": {
"buttons": {
"quit": "बंद करें",
"relaunch": "पुनः लॉन्च करें",
"wait": "रुकें"
},
"detail": "असुविधाए के लिए खेद हैं! कृपया चुनें कि क्या करना है:",
"message": "एप्लीकेशन अनुत्तरदायी है",
"title": "विंडो अनुत्तरदायी है"
},
"update-available": {
"buttons": {
"disable": "अपडेट्स बंद करें",
"download": "डाउनलोड",
"ok": "ठीक है"
},
"detail": "एक नया वर्जन उपलब्ध है, {{downloadLink}} से डाउनलोड किया जा सकता है",
"message": "एक नया वर्जन उपलब्ध है",
"title": "अपडेट उपलब्ध है"
}
},
"menu": {
"about": "के बारे में",
"navigation": {
"label": "मार्गदर्शन",
"submenu": {
"copy-current-url": "मौजूदा यूआरएल कापी करें",
"go-back": "पीछे जाएं",
"go-forward": "आगे जाएं",
"quit": "निकास",
"restart": "एप को पुनः शुरू करें"
}
},
"options": {
"label": "विकल्प",
"submenu": {
"advanced-options": {
"label": "उन्नत विकल्प",
"submenu": {
"auto-reset-app-cache": "एप शुरू होते समय कैश रीसेट करें",
"disable-hardware-acceleration": "हार्डवेयर एक्सीलरेशन बंद करें",
"edit-config-json": "config.json को एडिट करें",
"override-user-agent": "यूजर-एजेंट को रद्द करें",
"restart-on-config-changes": "कनफिग बदलने पे पुनः शुरू करें",
"set-proxy": {
"label": "प्रॉक्सी तय करें",
"prompt": {
"label": "प्प्रॉक्सी पता डालें: (बंद करने के लिए खाली छोड़ें)",
"placeholder": "उदाहरण: SOCKS5://127.0.0.1:9999",
"title": "प्रॉक्सी तय करें"
}
},
"toggle-dev-tools": "डेवटूल्स को टॉगल करें"
}
},
"always-on-top": "हमेशा ऊपर",
"auto-update": "ऑटो अपडेट",
"hide-menu": {
"dialog": {
"message": "अगले लॉन्च पे मेनू छुपा दिया जायेगा, देखने के लिए [Alt] का प्रयोग करें (या बैकटिक [`] अगर आप इन एप मेनू का प्रयोग कर रहे हैं)",
"title": "मेनू छुपाना सक्रिय है"
},
"label": "मेनू छुपाएं"
},
"language": {
"dialog": {
"message": "पुनः शुरू करने के बाद भाषा बदल दी जाएगी",
"title": "भाषा बदल दी गई है"
},
"label": "भाषा",
"submenu": {
"to-help-translate": "अनुवाद करने में सहायता करना चाहते हैं? यहां दबाएं"
}
},
"resume-on-start": "एप शुरू होने पर आखरी गाना फिर शुरू करें",
"single-instance-lock": "सिंगल इंस्टेंस लॉक",
"start-at-login": "शुरू होने पे लॉगिन करें",
"starting-page": {
"label": "स्टार्टिंग पेज",
"unset": "अनसेट"
},
"tray": {
"label": "ट्रे",
"submenu": {
"disabled": "बंद किया गया है",
"enabled-and-hide-app": "सक्रिय है और एप छुपाएं",
"enabled-and-show-app": "सक्रिय है और एप दिखाएं",
"play-pause-on-click": "क्लिक पर प्ले/पोज"
}
},
"visual-tweaks": {
"label": "दृश्य परिवर्तन",
"submenu": {
"like-buttons": {
"default": "डिफॉल्ट",
"force-show": "बल पूर्वक दिखाएं",
"hide": "छुपाएं",
"label": "लाइक बटंस"
},
"remove-upgrade-button": "अपग्रेड बटन हटाएं",
"theme": {
"dialog": {
"button": {
"cancel": "रद्द करें",
"remove": "हटाएं"
},
"remove-theme": "क्या आप निश्चित है आपको कस्टम थीम हटानी है?",
"remove-theme-message": "यह कस्टम थीम को हटा देगा"
},
"label": "थीम",
"submenu": {
"import-css-file": "कस्टम सीएसएस फाइल को आयात करें",
"no-theme": "कोई थीम नही"
}
}
}
}
}
},
"plugins": {
"enabled": "सक्रिय",
"label": "प्लगिंस",
"new": "नया"
},
"view": {
"label": "देखें",
"submenu": {
"force-reload": "बल पूर्वक रिलोड करें",
"reload": "रिलोड करें",
"reset-zoom": "वास्तविक आकार",
"toggle-fullscreen": "टागल फुल स्क्रीन",
"zoom-in": "ज़ूम इन",
"zoom-out": "ज़ूम आउट"
}
}
},
"tray": {
"next": "अगला"
}
},
"plugins": {
"video-toggle": {
"menu": {
"align": {
"submenu": {
"left": "बाएं",
"middle": "मध्य",
"right": "दाहिने"
}
},
"force-hide": "वीडियो टैब को बलपूर्वक हटाएं",
"mode": {
"label": "तरीका"
}
}
}
}
}

View File

@ -0,0 +1,15 @@
{
"common": {
"console": {
"plugins": {
"execute-failed": "Neuspjelo izvršenje plugina {{pluginName}}::{{contextName}}",
"executed-at-ms": "Plugin{{pluginName}}::{{contextName}}{{je izvršen za {{ms}}ms"
}
}
},
"language": {
"code": "hr",
"local-name": "Hrvatski",
"name": "Croatian"
}
}

742
src/i18n/resources/hu.json Normal file
View File

@ -0,0 +1,742 @@
{
"common": {
"console": {
"plugins": {
"execute-failed": "Nem sikerült futtatni a plugint {{pluginName}}::{{contextName}}",
"executed-at-ms": "Plugin {{pluginName}}::{{contextName}} a {{ms}}ms időpontban lefutott",
"initialize-failed": "Nem sikerült inicializálni a \"{{pluginName}}\" plugint",
"load-all": "Összes bővítmény betöltése",
"load-failed": "Nem sikerült betölteni a \"{{pluginName}}\" plugint",
"loaded": "\"{{pluginName}}\" plugin betöltve",
"unload-failed": "Nem sikerült a \"{{pluginName}}\" bővítményt kikapcsolni",
"unloaded": "A \"{{pluginName}}\" bővítmény kikapcsolva"
}
}
},
"language": {
"code": "hu",
"local-name": "Magyar",
"name": "Hungarian"
},
"main": {
"console": {
"did-finish-load": {
"dev-tools": "Betöltés befejezve. DevTools megnyitva"
},
"i18n": {
"loaded": "i18n betöltve"
},
"second-instance": {
"receive-command": "Fogadott parancs a protokollon keresztül: \"{{command}}\""
},
"theme": {
"css-file-not-found": "CSS fájl \"{{cssFile}}\" nem létezik, figyelmen kívül hagyva"
},
"unresponsive": {
"details": "Nem reagál hiba!\n{{error}}"
},
"when-ready": {
"clearing-cache-after-20s": "Alkalmazás gyorsítótárának törlése"
},
"window": {
"tried-to-render-offscreen": "Az ablak a képernyőn kívül próbált betölteni, windowSize={{windowSize}}, displaySize={{displaySize}}, position={{position}}"
}
},
"dialog": {
"hide-menu-enabled": {
"detail": "A menü el van rejtve, a megjelenítéshez használd az 'Alt' billentyűt (vagy az 'Escape' billentyűt, ha az alkalmazáson belüli menüt használod)",
"message": "A menü elrejtése engedélyezve",
"title": "Menü elrejtése engedélyezve"
},
"need-to-restart": {
"buttons": {
"later": "Később",
"restart-now": "Újraindítás most"
},
"detail": "A \"{{pluginName}}\" plugin újraindítást igényel a bekapcsoláshoz",
"message": "\"{{pluginName}}\" nevű plugin-t újra kell indítani",
"title": "Újraindítás szükséges"
},
"unresponsive": {
"buttons": {
"quit": "Kilépés",
"relaunch": "Újraindítás",
"wait": "Várj"
},
"detail": "Elnézést a kellemetlenségért! Válaszdd ki mi történjen:",
"message": "Az alkalmazás nem válaszol",
"title": "Az ablak nem válaszol"
},
"update-available": {
"buttons": {
"disable": "Frissítések kikapcsolása",
"download": "Letöltés",
"ok": "OK"
},
"detail": "Az új verzió elérhető, és letölthető az alábbi linken {{downloadLink}}",
"message": "Új verzió áll rendelkezésre",
"title": "Frissítés elérhető"
}
},
"menu": {
"about": "Névjegy",
"navigation": {
"label": "Navigáció",
"submenu": {
"copy-current-url": "Jelenlegi URL másolása",
"go-back": "Vissza",
"go-forward": "Előre",
"quit": "Kilépés",
"restart": "Alkalmazás újraindítása"
}
},
"options": {
"label": "Beállítások",
"submenu": {
"advanced-options": {
"label": "Speciális beállítások",
"submenu": {
"auto-reset-app-cache": "Az alkalmazás gyorsítótárának törlése indításkor",
"disable-hardware-acceleration": "Hardveres gyorsítás kikapcsolása",
"edit-config-json": "config.json szerkesztése",
"override-user-agent": "Kliens felülírása",
"restart-on-config-changes": "Újraindítás a konfigurációs változtatás után",
"set-proxy": {
"label": "Proxy beállítása",
"prompt": {
"label": "Proxy cím megadása: (Hagyja üresen a kikapcsoláshoz)",
"placeholder": "Példa: SOCKS5://127.0.0.1:9999",
"title": "Proxy beállítása"
}
},
"toggle-dev-tools": "Fejlesztőeszközök BE/KI"
}
},
"always-on-top": "Mindig látható",
"auto-update": "Automatikus frissítés",
"hide-menu": {
"dialog": {
"message": "A menü a következő indításnál rejtve lesz, használja az [Alt] billentyűt a megjelenítéséhez (vagy a backtick [`] billentyűt, ha az alkalmazás belső menüjét használja)",
"title": "Menü elrejtés engedélyezve"
},
"label": "Menü elrejtése"
},
"language": {
"dialog": {
"message": "Az Újraindítást követően változik meg a nyelv",
"title": "Megváltozott a nyelv"
},
"label": "Nyelv",
"submenu": {
"to-help-translate": "Szeretne a fordításban segíteni? Kattintson ide"
}
},
"resume-on-start": "Indításkor az utolsó zene folytatása",
"single-instance-lock": "Csak egy példány engedélyezése",
"start-at-login": "Futtatás rendszerindításkor",
"starting-page": {
"label": "Indítási hely",
"unset": "Visszaállítás"
},
"tray": {
"label": "Tálca",
"submenu": {
"disabled": "Letiltva",
"enabled-and-hide-app": "Aktív és az alkalmazás elrejtve",
"enabled-and-show-app": "Aktív és az alkalmazás megjelenítve",
"play-pause-on-click": "Lejátszás/Szünet az ikonra kattintással"
}
},
"visual-tweaks": {
"label": "Kinézeti beállítások",
"submenu": {
"like-buttons": {
"default": "Alapértelmezett",
"force-show": "Megjelenítés kényszerítése",
"hide": "Elrejtése",
"label": "Kedvelés gombok"
},
"remove-upgrade-button": "Előfizetés gombjának eltávolítása",
"theme": {
"dialog": {
"button": {
"cancel": "Mégse",
"remove": "Eltávolít"
},
"remove-theme": "Biztos, hogy el akarja távolítani az egyéni témát?",
"remove-theme-message": "Ez el fogja távolítani az egyéni témát"
},
"label": "Téma",
"submenu": {
"import-css-file": "Egyéni CSS fájl importálása",
"no-theme": "Nincs téma"
}
}
}
}
}
},
"plugins": {
"enabled": "Bekapcsolva",
"label": "Bővítmények",
"new": "ÚJ"
},
"view": {
"label": "Nézet",
"submenu": {
"force-reload": "Kényszerített újratöltés",
"reload": "Újratöltés",
"reset-zoom": "Valós méret",
"toggle-fullscreen": "Teljes képernyő be/ki",
"zoom-in": "Nagyítás",
"zoom-out": "Kicsinyítés"
}
}
},
"tray": {
"next": "Következő",
"play-pause": "Lejátszás/Szünet",
"previous": "Előző",
"quit": "Kilépés",
"restart": "YT Music újraindítása",
"show": "Ablak megjelenítése",
"tooltip": {
"default": "YouTube Music",
"with-song-info": "YouTube Music: {{artist}} - {{title}}"
}
}
},
"plugins": {
"ad-speedup": {
"description": "Ha reklám szól, elnémítja a hangot és a lejátszási sebességet 16x-ra állítja",
"name": "Gyorsítás hozzáadása"
},
"adblocker": {
"description": "Alapértelmezés szerint blokkolja az összes hirdetést és nyomkövetést",
"menu": {
"blocker": "Blokkoló"
},
"name": "Reklámblokkoló"
},
"album-actions": {
"description": "Dislike, Undislike, Like, Unlike gombok hozzáadása, amivel ezt a lejátszási listán vagy albumon lévő összes dalra alkalmazza",
"name": "Album műveletek"
},
"album-color-theme": {
"description": "Dinamikus téma és vizuális effektek alkalmazása az album színpalettája alapján",
"menu": {
"color-mix-ratio": {
"label": "Szín keverés aránya",
"submenu": {
"percent": "{{ratio}}%"
}
}
},
"name": "Album színtéma"
},
"ambient-mode": {
"description": "Fényhatás alkalmazása a videóból származó lágy színek vetítésével a képernyő hátterére",
"menu": {
"blur-amount": {
"label": "Elmosódás mértéke",
"submenu": {
"pixels": "{{blurAmount}} képpontok"
}
},
"buffer": {
"label": "Puffer",
"submenu": {
"buffer": "{{buffer}}"
}
},
"opacity": {
"label": "Átlátszóság",
"submenu": {
"percent": "{{opacity}}%"
}
},
"quality": {
"label": "Minőség",
"submenu": {
"pixels": "{{quality}} képpont"
}
},
"size": {
"label": "Méret",
"submenu": {
"percent": "{{size}}%"
}
},
"smoothness-transition": {
"label": "Sima átmenet",
"submenu": {
"during": "{{interpolationTime}}s alatt"
}
},
"use-fullscreen": {
"label": "Teljes képernyő használata"
}
},
"name": "Természetes mód"
},
"audio-compressor": {
"description": "Hang tömörítés alkalmazása (csökkenti a jel legzajosabb részeinek hangerősségét, és emeli a legcsendesebb részek hangerősségét)",
"name": "Hangtömörítő"
},
"blur-nav-bar": {
"description": "Átlátszóvá és elmosódottá teszi a navigációs sávot",
"name": "Navigációs sáv elmosása"
},
"bypass-age-restrictions": {
"description": "A YouTube korellenőrzését kihagyja, ezáltal nem kel meg erősíteni a zene meghallgatása elött. (Automatikusan megerősítve lesz.)",
"name": "Korellenőrzés kihagyása"
},
"captions-selector": {
"description": "Felirat választó a YouTube Music zenékhez",
"menu": {
"autoload": "Automatikusan kiválasztja az utoljára használt feliratot",
"disable-captions": "Alapértelmezetten nincsenek feliratok"
},
"name": "Feliratválasztó",
"prompt": {
"selector": {
"label": "Jelenlegi feliratnyelv: {{language}}",
"none": "Nincs",
"title": "Felirat nyelvének kiválasztása"
}
},
"templates": {
"title": "Feliratválasztó megnyitása"
}
},
"compact-sidebar": {
"description": "Mindig becsukva tartja a bal oldali savót, ahol a Kezdőlap. Felfedezés, Könyvtár és egyebek láthatók. (Amit bármikor ki lehet nyitni)",
"name": "Kompakt oldalsáv"
},
"crossfade": {
"description": "Áttünést biztosít a dalok között, ami folytonossá teszi a zenehallgatást anélkül, hogy érezhető lenne a váltás",
"menu": {
"advanced": "Haladó"
},
"name": "Áttünés [Béta]",
"prompt": {
"options": {
"multi-input": {
"fade-in-duration": "Áttünés időtartama (ms)",
"fade-out-duration": "Fokozatos halkítás időtartama (ms)",
"fade-scaling": {
"label": "Áttünés értéke",
"linear": "Lineáris",
"logarithmic": "Logaritmikus"
},
"seconds-before-end": "Áttünés N másodperccel a vége előtt"
},
"title": "Áttünési beállítások"
}
}
},
"disable-autoplay": {
"description": "A Zenék nem fognak maguktól elindulni, a bővítmény használata során kézileg kel indítani a zenéket",
"menu": {
"apply-once": "Csak induláskor alkalmazza"
},
"name": "Automatikus lejátszás letiltása"
},
"discord": {
"backend": {
"already-connected": "Kapcsolódás kísérlete aktív kapcsolattal",
"connected": "Kapcsolódva a Discord-hoz",
"disconnected": "Kapcsolat bontva a Discord-al"
},
"description": "Mutassa meg barátainak, hogy mit hallgat a Rich Presence segítségével. (Ehez a Discord-on is engedélyezve kel lennie a Tevékenységállapot megosztásának [DC Beállítások -> Tevékenyég-adatvédelem -> Megoszthatod az észlelt tevékenységeidet másokkal])",
"menu": {
"auto-reconnect": "Automatikus újracsatlakozás",
"clear-activity": "Tevékenység törlése",
"clear-activity-after-timeout": "Tevékenység törlése időkorlát után",
"connected": "Kapcsolódva",
"disconnected": "Nincs Kapcsolódva",
"hide-duration-left": "Hátralévő idő elrejtése",
"hide-github-button": "GitHub link gombjának elrejtése",
"play-on-youtube-music": "Lejátszás a YouTube Music-on",
"set-inactivity-timeout": "Inaktivitási időkorlát beállítása"
},
"name": "Discord Rich Presence",
"prompt": {
"set-inactivity-timeout": {
"label": "Írja be az inaktivitási időkorlátot másodpercben:",
"title": "Inaktivitási időkorlát beállítása"
}
}
},
"downloader": {
"backend": {
"dialog": {
"error": {
"buttons": {
"ok": "Rendben"
},
"message": "Hoppá! Elnézést, a letöltés sikertelen volt…",
"title": "A letöltés során hiba történt!"
},
"start-download-playlist": {
"buttons": {
"ok": "Rendben"
},
"detail": "({{playlistSize}} dal)",
"message": "A(z) {{playlistTitle}} lejátszási lista letöltése",
"title": "A letöltés elindult"
}
},
"feedback": {
"conversion-progress": "Konvetálás: {{percent}}%",
"converting": "Konvertálás…",
"done": "Kész: {{filePath}}",
"download-info": "Letöltés: {{artist}} - {{title}} [{{videoId}}",
"download-progress": "Letöltés: {{percent}}%",
"downloading": "Letöltés folyamatban…",
"downloading-counter": "Letöltés: {{current}}/{{total}}…",
"downloading-playlist": "Letöltés a lejátszási listáról \"{{playlistTitle}}\" - {{playlistSize}} dal ({{playlistId}})",
"error-while-downloading": "Hiba a \"{{author}} - {{title}}\" letöltésekor: {{error}}",
"folder-already-exists": "A {{playlistFolder}} nevű mappa már létezik",
"getting-playlist-info": "Lejátszási lista információinak lekérése…",
"loading": "Betöltés…",
"playlist-has-only-one-song": "A lejátszási listában csak egy elem van, letöltés közvetlenül",
"playlist-id-not-found": "Nem található lejátszási lista azonosítója",
"playlist-is-empty": "Lejátszási lista üres",
"playlist-is-mix-or-private": "Hiba a lejátszási lista információinak lekérésekor: győződjön meg róla, hogy nem privát vagy \"Saját egyveleg\" lejátszási lista\n\n{{error}}",
"preparing-file": "Fájl előkészítése…",
"saving": "Mentés…",
"trying-to-get-playlist-id": "Playlist ID lekérése: {{playlistId}}",
"video-id-not-found": "Videó nem található",
"writing-id3": "ID3 címkék írása…"
}
},
"description": "MP3 / forrás hanganyag letöltése közvetlenül az interfészről",
"menu": {
"choose-download-folder": "Letöltési mappa kiválasztása",
"download-finish-settings": {
"label": "Letöltés befejezéskor",
"prompt": {
"last-percent": "x százalék után",
"last-seconds": "Utolsó x másodperc"
},
"submenu": {
"advanced": "Speciális",
"enabled": "Engedélyezve",
"mode": "Időmód",
"percent": "Százalék",
"seconds": "Másodpercek"
}
},
"download-playlist": "Lejátszási lista letöltése",
"presets": "Sablonok",
"skip-existing": "Meglévő fájlok kihagyása"
},
"name": "Letöltő",
"renderer": {
"can-not-update-progress": "A haladást nem lehet frissíteni"
},
"templates": {
"button": "Letöltés"
}
},
"exponential-volume": {
"description": "Az hangerő csúszka exponenciálissá tételével könnyebbé válik az alacsony hangerő kiválasztása.",
"name": "Exponenciális hangerő"
},
"in-app-menu": {
"description": "Menüsávok stílusos, sötét vagy album-színű megjelenítése",
"menu": {
"hide-dom-window-controls": "DOM ablakvezérlők elrejtése"
},
"name": "Alkalmazáson belüli menü"
},
"lumiastream": {
"description": "Lumia Stream támogatás hozzáadása",
"name": "Lumia Stream [Béta]"
},
"lyrics-genius": {
"description": "Dalszöveg támogatást ad a legtöbb dalhoz",
"menu": {
"romanized-lyrics": "Latin betűs dalszövegek"
},
"name": "Lyrics Genius",
"renderer": {
"fetched-lyrics": "Dalszövegek lekérése a Genius-ról"
}
},
"music-together": {
"description": "Lehetővé teszi a lejátszási listák megosztását másokkal. Amikor a házigazda lejátszik egy dalt, mindenki más is ugyanazt a dalt fogja hallani",
"dialog": {
"enter-host": "Adja meg a házigazda azonosítóját"
},
"internal": {
"save": "Mentés",
"track-source": "Zeneszám forrása",
"unknown-user": "Ismeretlen felhasználó"
},
"menu": {
"click-to-copy-id": "Házigazda azonosítójának másolása",
"close": "Zene együtt bezárása",
"connected-users": "Csatlakozott felhasználók",
"disconnect": "Zene együtt kapcsolatának megszakítása",
"empty-user": "Nincs csatlakozva felhasználó",
"host": "Music Together Házigazda",
"join": "Csatlakozás a Zene együtt-höz",
"permission": {
"all": "Engedélyezi a vendégeknek a lejátszási lista és a lejátszó vezérlését",
"host-only": "Csak a házigazda tudja vezérelni a lejátszási listát és a lejátszót",
"playlist": "Engedélyezi a vendégeknek a lejátszási lista vezérlését"
},
"status": {
"disconnected": "Kapcsolat bontva",
"guest": "Csatlakozva vendégként",
"host": "Csatlakozva házigazdaként"
}
},
"name": "Zene együtt [Béta]",
"toast": {
"add-song-failed": "Sikertelen volt a dal hozzáadása",
"closed": "Zene együtt bezárva",
"disconnected": "Kapcsolat megszakadt a Music Together-el",
"host-failed": "Sikertelen volt a Zene együtt indítása",
"id-copied": "Házigazda azonosító a vágólapra másolva",
"id-copy-failed": "Nem sikerült a Házigazda azonosítóját a vágólapra másolni",
"join-failed": "Nem sikerült csatlakozni a Music Together-hez",
"joined": "Csatlakozott a Music Together-hez",
"permission-changed": "Music Together engedély megváltoztatva \"{{permission}}\" -re",
"remove-song-failed": "A dal eltávolítása sikertelen",
"user-connected": "{{name}} csatlakozott a Music Together-hez",
"user-disconnected": "{{name}} elhagyta a Music Together-t"
}
},
"navigation": {
"description": "Következő/Vissza navigációs nyilak közvetlenül az interfészbe integrálva, mint a kedvenc böngésződben",
"name": "Navigáció"
},
"no-google-login": {
"description": "A Bejelentkezés gomb eltávolítása az interfészről (Jobb fentről eltünik a bejelentkezés gomb.)",
"name": "Nincs Google bejelentkezés"
},
"notifications": {
"description": "Értesítés megjelenítése, amikor egy dal elindul (interaktív értesítések elérhetők Windows-on)",
"menu": {
"interactive": "Interaktív Értesítések",
"interactive-settings": {
"label": "Interaktív beállítások",
"submenu": {
"hide-button-text": "Gombok szövegének elrejtése",
"refresh-on-play-pause": "Frissítés lejátszás/szünet megnyomásakor",
"tray-controls": "Megnyitás/Bezárás tálca ikonra kattintva"
}
},
"priority": "Értesítési prioritás",
"toast-style": "Értesítés stílusa",
"unpause-notification": "Értesítés megjelenítése a lejátszás folytatásakor"
},
"name": "Értesítések"
},
"picture-in-picture": {
"description": "Lehetővé teszi az alkalmazás kép a képben módra váltását",
"menu": {
"always-on-top": "Mindig látható",
"hotkey": {
"label": "Gyorsbillentyű",
"prompt": {
"keybind-options": {
"hotkey": "Gyorsbillentyű"
},
"label": "Válassz egy gyorsbillentyűt a kép a képben mód váltásához",
"title": "Kép a képben gyorsbillentyű"
}
},
"save-window-position": "Ablakpozíciójának mentése",
"save-window-size": "Ablakméretének mentése",
"use-native-pip": "A böngésző natív PiP(Kép a képben) használata"
},
"name": "Kép a képben",
"templates": {
"button": "Kép a képben"
}
},
"playback-speed": {
"description": "Hallgass gyorsan, hallgass lassan! Hozzáad egy csúszkát, amely szabályozza a dal sebességét",
"name": "Lejátszás sebessége",
"templates": {
"button": "Sebesség"
}
},
"precise-volume": {
"description": "A hangerő precíz szabályozása egérgörgővel/gyorsbillentyűkkel, egy egyedi HUD és testreszabható hangerő csuszka segítségével",
"menu": {
"arrows-shortcuts": "Helyi nyíl-billentyűkkel való vezérlés",
"custom-volume-steps": "Egyedi hangerőléptetés beállítása",
"global-shortcuts": "Globális Gyorsbillentyűk"
},
"name": "Precíz hangerő",
"prompt": {
"global-shortcuts": {
"keybind-options": {
"decrease": "Hangerő csökkentése",
"increase": "Hangerő növelése"
},
"label": "Válaszd ki a globális hangerő gyorsbillentyűket:",
"title": "Globális hangerő gyorsbillentyűk"
},
"volume-steps": {
"label": "Hangerő növelés/csökkentés léptékének kiválasztása",
"title": "Hangerő lépték"
}
}
},
"quality-changer": {
"backend": {
"dialog": {
"quality-changer": {
"detail": "Jelenlegi minőség: {{quality}}",
"message": "Válaszd ki a videó minőségét:",
"title": "Válaszd ki a videó minőségét"
}
}
},
"description": "Lehetővé teszi a videó minőségének megváltoztatását egy gombbal a videó fedvényen",
"name": "Videóminőség modosító"
},
"scrobbler": {
"description": "Scrobbling támogatás hozzáadása (pl. last.fm, ListenBrainz)",
"dialog": {
"lastfm": {
"auth-failed": {
"message": "Last.fm hitelesítése nem sikerült\nA felugró ablak elrejtése a következő újraindításig.",
"title": "Hitelesítés sikertelen"
}
}
},
"menu": {
"lastfm": {
"api-settings": "Last.fm API beállítások"
},
"listenbrainz": {
"token": "Add meg a ListenBrainz felhasználói tokenedet"
}
},
"prompt": {
"lastfm": {
"api-key": "Last.fm API kulcs",
"api-secret": "Last.fm titkos API kulcs"
},
"listenbrainz": {
"token": {
"label": "Add meg a ListenBrainz felhasználói tokenedet:",
"title": "ListenBrainz kulcs"
}
}
}
},
"shortcuts": {
"description": "Lehetővé teszi globális gyorsbillentyűk beállítását a lejátszáshoz (lejátszás/szünet/következő/előző), valamint a média OSD kikapcsolását a médiagombok felülírásával. Bekapcsolja a Ctrl/CMD + F billentyűkombinációt a kereséshez, a Linux MPRIS támogatását a médiagombokhoz, és egyedi gyorsbillentyűket a haladó felhasználók számára",
"menu": {
"override-media-keys": "Médiagombok felülírása",
"set-keybinds": "Globális zenevezérlők beállítása"
},
"name": "Gyorsbillentyűk (& MPRIS)",
"prompt": {
"keybind": {
"keybind-options": {
"next": "Következő",
"play-pause": "Lejátszás / Szünet",
"previous": "Előző"
},
"label": "Globális billentyűparancsok választása a dalok vezérléséhez:",
"title": "Globális gyorsbillentyűk"
}
}
},
"skip-disliked-songs": {
"description": "Kihagyja a nem kedvelt dalokat",
"name": "Nem kedvelt dal kihagyása"
},
"skip-silences": {
"description": "Automatikusan kihagyja a csendes részeket a dalokban",
"name": "Csend kihagyása"
},
"sponsorblock": {
"description": "Automatikusan kihagyja a nem zenés részeket, mint például az intro/outro vagy a zenei videók olyan részeit, ahol a zene nem szól",
"name": "SzponzorBlokk"
},
"synced-lyrics": {
"description": "Szinkronizált dalszövegeket biztosít dalokhoz, LRClib-hez hasonló szolgáltatókat használva.",
"errors": {
"fetch": "⚠️ - Hiba történt a dalszövegek lekérése közben. Kérlek, próbáld újra később.",
"not-found": "⚠️ - Nem található dalszöveg ehhez a zenéhez."
},
"menu": {
"line-effect": {
"submenu": {
"scale": {
"label": "Mérték"
}
}
},
"precise-timing": {
"label": "Dalszöveg tökéletes szinkronizálása"
}
},
"name": "Szinkronizált dalszövegek",
"refetch-btn": {
"fetching": "Lekérés folyamatban...",
"normal": "Dalszöveg újra lekérése"
},
"warnings": {
"duration-mismatch": "⚠️ - A dalszövegek időzítése eltérhet a zene hossza miatt.",
"inexact": "⚠️ - Ennek a zenének a dalszövege pontatlan lehet",
"instrumental": "⚠️ - Ez egy hangszerekkel játszott zene"
}
},
"taskbar-mediacontrol": {
"description": "Lejátszás vezérlése a Windows tálcáról",
"name": "Médiavezérlés a tálcán"
},
"touchbar": {
"description": "macOS felhasználók számára hozzáad egy widgetet a TouchBar-hoz",
"name": "TouchBar"
},
"tuna-obs": {
"description": "Integráció az OBS Tuna pluginjával",
"name": "Tuna OBS"
},
"video-toggle": {
"description": "Hozzáad egy gombot a Videó/Dal mód közötti váltáshoz. Opcionálisan teljesen eltávolíthatja a videó fület is",
"menu": {
"align": {
"label": "Igazítás",
"submenu": {
"left": "Balra",
"middle": "Középre",
"right": "Jobbra"
}
},
"force-hide": "Videó fül kényszeritett eltávolítása",
"mode": {
"label": "Mód",
"submenu": {
"custom": "Egyedi kapcsoló",
"disabled": "Letiltva",
"native": "Natív kapcsoló"
}
}
},
"name": "Videó váltó",
"templates": {
"button": "Zeneszám"
}
},
"visualizer": {
"description": "Vizualizációt ad a lejátszóhoz",
"menu": {
"visualizer-type": "Vizualizáció típus"
},
"name": "Vizualizáció"
}
}
}

View File

@ -17,5 +17,809 @@
"code": "id",
"local-name": "Bahasa Indonesia",
"name": "Indonesian"
},
"main": {
"console": {
"did-finish-load": {
"dev-tools": "Selesai memuat. DevTools terbuka"
},
"i18n": {
"loaded": "i18n selesai dimuat"
},
"second-instance": {
"receive-command": "Menerima instruksi lewat protokol: \"{{command}}\""
},
"theme": {
"css-file-not-found": "File CSS \"{{cssFile}}\" tidak ditemukan, mengabaikan"
},
"unresponsive": {
"details": "Kesalahan Tidak Responsif!\n{{error}}"
},
"when-ready": {
"clearing-cache-after-20s": "Menghapus cache aplikasi"
},
"window": {
"tried-to-render-offscreen": "Window mencoba membuat render di luar layar, windowUkuran={{windowSize}}, displaySize={{displaySize}}, posisi={{position}}"
}
},
"dialog": {
"hide-menu-enabled": {
"detail": "Menu tersembunyi, gunakan 'Alt' untuk menampilkannya (atau 'Escape' jika menggunakan Menu Dalam Aplikasi)",
"message": "Sembunyikan Menu diaktifkan",
"title": "Sembunyikan Menu Diaktifkan"
},
"need-to-restart": {
"buttons": {
"later": "Nanti",
"restart-now": "Restart Sekarang"
},
"detail": "\"{{pluginName}}\" Plugin memerlukan pengaktifan ulang agar dapat diterapkan",
"message": "\"{{pluginName}}\" harus dimulai ulang",
"title": "Restart Diperlukan"
},
"unresponsive": {
"buttons": {
"quit": "Keluar",
"relaunch": "Luncurkan kembali",
"wait": "Tunggu"
},
"detail": "Kami mohon maaf atas ketidaknyamanan ini. silakan pilih apa yang harus dilakukan:",
"message": "Aplikasi Tidak Responsif",
"title": "Jendela Tidak Responsif"
},
"update-available": {
"buttons": {
"disable": "Nonaktifkan Pembaruan",
"download": "Unduh",
"ok": "OK"
},
"detail": "Versi baru tersedia dan dapat diunduh di {{downloadLink}}",
"message": "Versi baru tersedia",
"title": "Pembaruan Tersedia"
}
},
"menu": {
"about": "Tentang",
"navigation": {
"label": "Navigasi",
"submenu": {
"copy-current-url": "Salin URL saat ini",
"go-back": "Kembali",
"go-forward": "Maju",
"quit": "Keluar",
"restart": "Restart Aplikasi"
}
},
"options": {
"label": "Option",
"submenu": {
"advanced-options": {
"label": "Opsi lanjutan",
"submenu": {
"auto-reset-app-cache": "Mengatur ulang cache aplikasi saat aplikasi dimulai",
"disable-hardware-acceleration": "Menonaktifkan akselerasi perangkat keras",
"edit-config-json": "Ubah config.json",
"override-user-agent": "Mengesampingkan User-Agent",
"restart-on-config-changes": "Mulai ulang pada perubahan konfigurasi",
"set-proxy": {
"label": "Atur Proxy",
"prompt": {
"label": "Masukkan Alamat Proxy: (biarkan kosong untuk menonaktifkan)",
"placeholder": "Contoh: SOCKS5://127.0.0.1:9999",
"title": "Atur proxy"
}
},
"toggle-dev-tools": "Beralih ke DevTools"
}
},
"always-on-top": "Selalu di atas",
"auto-update": "Pembaruan Otomatis",
"hide-menu": {
"dialog": {
"message": "Menu akan disembunyikan pada peluncuran berikutnya, gunakan [Alt] untuk menampilkannya (atau centang [`] jika menggunakan menu dalam aplikasi)",
"title": "Sembunyikan Menu Diaktifkan"
},
"label": "Sembunyikan Menu"
},
"language": {
"dialog": {
"message": "Bahasa akan berubah setelah restart",
"title": "Bahasa Berubah"
},
"label": "Bahasa",
"submenu": {
"to-help-translate": "Ingin membantu menerjemahkan? Klik di sini"
}
},
"resume-on-start": "Melanjutkan lagu terakhir saat aplikasi dimulai",
"single-instance-lock": "Kunci Instance Tunggal",
"start-at-login": "Mulai saat masuk",
"starting-page": {
"label": "Halaman awal",
"unset": "Tidak ditetapkan"
},
"tray": {
"label": "Bilah",
"submenu": {
"disabled": "Dinonaktifkan",
"enabled-and-hide-app": "Mengaktifkan dan menyembunyikan aplikasi",
"enabled-and-show-app": "Mengaktifkan dan menampilkan aplikasi",
"play-pause-on-click": "Putar/Jeda dengan klik"
}
},
"visual-tweaks": {
"label": "Penyesuaian Visual",
"submenu": {
"like-buttons": {
"default": "Standar",
"force-show": "Pertunjukan paksa",
"hide": "Sembunyikan",
"label": "Tombol suka"
},
"remove-upgrade-button": "Hapus tombol peningkatan",
"theme": {
"dialog": {
"button": {
"cancel": "Batalkan",
"remove": "Hapus"
},
"remove-theme": "Apakah kamu yakin ingin menhapus tema ini?",
"remove-theme-message": "Ini akan menghapus tema ini"
},
"label": "Tema",
"submenu": {
"import-css-file": "Impor file CSS khusus",
"no-theme": "Tidak ada tema"
}
}
}
}
}
},
"plugins": {
"enabled": "Diaktifkan",
"label": "Plugin",
"new": "Baru"
},
"view": {
"label": "Lihat",
"submenu": {
"force-reload": "Paksa Reload",
"reload": "Muat ulang",
"reset-zoom": "Ukuran sebenarnya",
"toggle-fullscreen": "Alihkan Layar Penuh",
"zoom-in": "Perbesar",
"zoom-out": "Perkecil"
}
}
},
"tray": {
"next": "Selanjutnya",
"play-pause": "Putar/Jeda",
"previous": "Sebelumnya",
"quit": "Keluar",
"restart": "Restart aplikasi",
"show": "Tampilkan jendela",
"tooltip": {
"default": "YouTube Musik",
"with-song-info": "YouTube Musik: {{artist}} - {{title}}"
}
}
},
"plugins": {
"ad-speedup": {
"description": "Jika iklan diputar, audio akan dimatikan dan kecepatan pemutaran akan diatur ke 16x",
"name": "Percepatan Iklan"
},
"adblocker": {
"description": "Blokir semua iklan dan pelacakan di luar kotak",
"menu": {
"blocker": "Pemblokir"
},
"name": "Pemblokir Iklan"
},
"album-actions": {
"description": "Tambah tombol Suka, Batal Suka, Tidak Suka dan Batal Tidak Suka untuk diterapkan ke semua lagu dalam daftar putar atau album",
"name": "Tindakan Album"
},
"album-color-theme": {
"description": "Menerapkan tema dinamis dan efek visual berdasarkan palet warna album",
"menu": {
"color-mix-ratio": {
"label": "Rasio campuran warna",
"submenu": {
"percent": "{{ratio}}%"
}
}
},
"name": "Tema Warna Album"
},
"ambient-mode": {
"description": "Menerapkan efek pencahayaan dengan memancarkan warna-warna lembut dari video, ke dalam latar belakang layar Anda",
"menu": {
"blur-amount": {
"label": "Jumlah kabur",
"submenu": {
"pixels": "{{blurAmount}} piksel"
}
},
"buffer": {
"label": "Buffer",
"submenu": {
"buffer": "{{buffer}}"
}
},
"opacity": {
"label": "Keburaman",
"submenu": {
"percent": "{{opacity}}%"
}
},
"quality": {
"label": "Kualitas",
"submenu": {
"pixels": "{{quality}} piksel"
}
},
"size": {
"label": "Ukuran",
"submenu": {
"percent": "{{size}}%"
}
},
"smoothness-transition": {
"label": "Kehalusan transisi",
"submenu": {
"during": "Selama {{interpolationTime}} s"
}
},
"use-fullscreen": {
"label": "Gunakan layar penuh"
}
},
"name": "Mode ambient"
},
"api-server": {
"description": "Menambahkan server API untuk mengontrol pemutar",
"dialog": {
"request": {
"buttons": {
"allow": "Izinkan",
"deny": "Menolak"
},
"message": "Izinkan {{ID}} ({{origin}}) untuk mengakses API?",
"title": "Permintaan otorisasi API"
}
},
"menu": {
"auth-strategy": {
"label": "Strategi otorisasi",
"submenu": {
"auth-at-first": {
"label": "Otorisasi pada permintaan pertama"
},
"none": {
"label": "Tidak ada otorisasi"
}
}
},
"hostname": {
"label": "Nama host"
},
"port": {
"label": "Port"
}
},
"name": "API Server [Beta]",
"prompt": {
"hostname": {
"label": "Masukkan nama host (seperti 0.0.0.0) untuk server API:",
"title": "Nama host"
},
"port": {
"label": "Masukkan port untuk server API:",
"title": "Port"
}
}
},
"audio-compressor": {
"description": "Menerapkan kompresi pada audio (mengurangi volume pada bagian paling keras dari sinyal dan meningkatkan volume pada bagian paling lembut)",
"name": "Kompresi suara"
},
"blur-nav-bar": {
"description": "Jadikan bar navigasi blur dan transparan",
"name": "buramkan bar navigasi"
},
"bypass-age-restrictions": {
"description": "Lewati verifikasi umur dari YouTube",
"name": "Lewati batasan umur"
},
"captions-selector": {
"description": "pemilih caption untuk trek audio YouTube Music",
"menu": {
"autoload": "pilih caption terakhir secara otomatis",
"disable-captions": "bawaannya tanpa caption"
},
"name": "pemilih caption",
"prompt": {
"selector": {
"label": "bahasa caption yang dipakai sekarang: {{language}}",
"none": "tidak ada",
"title": "pilih bahasa caption"
}
},
"templates": {
"title": "buka pemilih caption"
}
},
"compact-sidebar": {
"description": "Selalu atur sidebar dalam mode kompak",
"name": "sidebar ringkas"
},
"crossfade": {
"description": "Crossfade antar lagu",
"menu": {
"advanced": "Lanjutan"
},
"name": "Crossfade [Beta]",
"prompt": {
"options": {
"multi-input": {
"fade-in-duration": "durasi fade in (ms)",
"fade-out-duration": "durasi fade out (ms)",
"fade-scaling": {
"label": "redup perlahan",
"linear": "Linear",
"logarithmic": "Logaritmik"
},
"seconds-before-end": "Crossfade N detik sebelum berakhir"
},
"title": "Pilihan crossfade"
}
}
},
"disable-autoplay": {
"description": "Buat lagu mulai dalam mode \"jeda\"",
"menu": {
"apply-once": "Hanya terapkan pada saat startup"
},
"name": "Matikan Autoplay"
},
"discord": {
"backend": {
"already-connected": "Percobaan untuk terhubung dengan koneksi yang aktif",
"connected": "Terhubung dengan Discord",
"disconnected": "Terputus dari Discord"
},
"description": "tunjukan apa yang kamu dengarkan dengan Rich Presence",
"menu": {
"auto-reconnect": "Reconnect otomatis",
"clear-activity": "Hapus riwayat aktifitas",
"clear-activity-after-timeout": "hapus riwayat aktifitas setelah timeout",
"connected": "terhubung",
"disconnected": "tidak terhubung",
"hide-duration-left": "sembunyikan sisa durasi",
"hide-github-button": "sembunyikan tombol link GitHub",
"play-on-youtube-music": "Mainkan di YouTube Music",
"set-inactivity-timeout": "Tetapkan batas waktu tidak aktif"
},
"name": "Rich Presence Discord",
"prompt": {
"set-inactivity-timeout": {
"label": "Masukkan batas waktu tidak aktif dalam detik:",
"title": "Tetapkan batas waktu tidak aktif"
}
}
},
"downloader": {
"backend": {
"dialog": {
"error": {
"buttons": {
"ok": "Oke"
},
"message": "Argh! Maaf, dowloadnya gagal…",
"title": "Downloadnya error!"
},
"start-download-playlist": {
"buttons": {
"ok": "Oke"
},
"detail": "({{playlistSize}} lagu-lagu)",
"message": "Mengunduh Playlist {{playlistTitle}}",
"title": "Download dimulai"
}
},
"feedback": {
"conversion-progress": "Konversi: {{percent}}%",
"converting": "Mengkonversi…",
"done": "Selesai: {{filePath}}",
"download-info": "Mengunduh {{artist}} - {{title}} {{videoId}}",
"download-progress": "Mengunduh: {{percent}}%",
"downloading": "Mengunduh…",
"downloading-counter": "Mengunduh {{current}}/{{total}}…",
"downloading-playlist": "Mengunduh playlist \"{{playlistTitle}}\" - {{playlistSize}} lagu ({{playlistId}})",
"error-while-downloading": "Gagal mengunduh \"{{author}} - {{title}}\": {{error}}",
"folder-already-exists": "Folder {{playlistFolder}} sudah ada",
"getting-playlist-info": "Mendapatkan informasi playlist…",
"loading": "Memuat…",
"playlist-has-only-one-song": "Daftar putar hanya memiliki satu item, mengunduhnya secara langsung",
"playlist-id-not-found": "ID playlist tidak ditemukan",
"playlist-is-empty": "Playlist kosong",
"playlist-is-mix-or-private": "Kesalahan mendapatkan info playlist: pastikan bukan playlist pribadi atau \"Campuran untuk Anda\"\n\n{{error}}",
"preparing-file": "Menyiapkan file…",
"saving": "Menyimpan…",
"trying-to-get-playlist-id": "Mencoba mendapatkan ID playlist: {{playlistId}}",
"video-id-not-found": "Video tidak ditemukan",
"writing-id3": "Menulis tanda ID3…"
}
},
"description": "Unduh MP3 / sumber suara secara langsung via antarmuka",
"menu": {
"choose-download-folder": "Pilih folder unduhan",
"download-finish-settings": {
"label": "Unduh setelah selesai",
"prompt": {
"last-percent": "x persen terakhir",
"last-seconds": "x detik terakhir",
"title": "Konfigurasikan kapan akan mengunduh"
},
"submenu": {
"advanced": "Lanjutan",
"enabled": "Diaktifkan",
"mode": "Mode waktu",
"percent": "Persen",
"seconds": "Detik"
}
},
"download-playlist": "Unduh daftar putar",
"presets": "Prasetel",
"skip-existing": "Lewati berkas yang sudah ada"
},
"name": "Pengunduh",
"renderer": {
"can-not-update-progress": "Tidak dapat memperbarui proses"
},
"templates": {
"button": "Unduh"
}
},
"equalizer": {
"description": "Menambahkan equalizer ke pemutar",
"menu": {
"presets": {
"label": "Prasetel",
"list": {
"bass-booster": "Penguat Bass"
}
}
},
"name": "Equalizer"
},
"exponential-volume": {
"description": "Buat penggeser volume menjadi eksponen sehingga memudahkan memilih volume yang lebih rendah.",
"name": "Volume Eksponen"
},
"in-app-menu": {
"description": "Buat bilah-menu terlihat indah, gelap atau serupa dengan album",
"menu": {
"hide-dom-window-controls": "Sembunyikan DOM pengendali jendela"
},
"name": "Menu di Aplikasi"
},
"lumiastream": {
"description": "Tambah dukungan Lumia Stream",
"name": "Lumia Stream [Beta]"
},
"lyrics-genius": {
"description": "Tambah dukungan lirik untuk kebanyakan lagu",
"menu": {
"romanized-lyrics": "Romanisasi Lirik"
},
"name": "Lirik Genius",
"renderer": {
"fetched-lyrics": "Lirik yang diambil untuk Genius"
}
},
"music-together": {
"description": "Bagikan daftar putar dengan yang lain. Saat host memainkan lagu, semua orang akan mendengarkan lagu yang sama",
"dialog": {
"enter-host": "Masukkan ID Host"
},
"internal": {
"save": "Simpan",
"track-source": "Sumber Trek",
"unknown-user": "Pengguna Tidak Diketahui"
},
"menu": {
"click-to-copy-id": "Salin ID Host",
"close": "Tutup Musik Bersama",
"connected-users": "Pengguna Terhubung",
"disconnect": "Putuskan Musik Bersama",
"empty-user": "Tidak ada pengguna terhubung",
"host": "Host Musik Bersama",
"join": "Gabung Musik Bersama",
"permission": {
"all": "Izinkan tamu untuk mengendalikan daftar putar dan pemutar",
"host-only": "Hanya host yang dapat mengendalikan daftar putar dan pemutar",
"playlist": "Izinkan tamu untuk mengendalikan daftar putar"
},
"set-permission": "Ubah Pengendali Izin",
"status": {
"disconnected": "Terputus",
"guest": "Terhubung sebagai Tamu",
"host": "Terhubung sebagai Host"
}
},
"name": "Musik Bersama [Beta]",
"toast": {
"add-song-failed": "Gagal untuk menambahkan lagu",
"closed": "Musik Bersama ditutup",
"disconnected": "Musik Bersama terputus",
"host-failed": "Gagal untuk memulai Musik Bersama",
"id-copied": "ID Host tersalin ke papan klip",
"id-copy-failed": "Gagal menyalin ID Host ke papan klip",
"join-failed": "Gagal untuk bergabung ke Musik Bersama",
"joined": "Bergabung ke Musik Bersama",
"permission-changed": "Perizinan Musik Bersama diubah ke \"{{permission}}\"",
"remove-song-failed": "Gagal menghapus lagu",
"user-connected": "{{name}} bergabung ke Musik Bersama",
"user-disconnected": "{{name}} meninggalkan Musik Bersama"
}
},
"navigation": {
"description": "panah navigasi Selanjutnya/Sebelumnya terintegrasi pada antarmuka, layaknya peramban kesukaan Anda",
"name": "Navigasi"
},
"no-google-login": {
"description": "Hapus tombol dan tautan masuk Google dari antarmuka",
"name": "Tanpa Google Login"
},
"notifications": {
"description": "Tampilkan pemberitahuan saat lagu dimainkan (pemberitahuan interaktif tersedia di Windows)",
"menu": {
"interactive": "Pemberitahuan Interaktif",
"interactive-settings": {
"label": "Pengaturan Interaktif",
"submenu": {
"hide-button-text": "Sembunyikan teks tombol",
"refresh-on-play-pause": "Segarkan saat Putar/Jeda",
"tray-controls": "Buka/Tutup saat baki ditekan"
}
},
"priority": "Prioritas Pemberitahuan",
"toast-style": "Gaya Toast",
"unpause-notification": "Tampilkan pemberitahuan saat tidak dijeda"
},
"name": "Pemberitahuan"
},
"picture-in-picture": {
"description": "Izinkan untuk memindahkan aplikasi ke mode gambar-dalam-gambar",
"menu": {
"always-on-top": "Selalu di atas",
"hotkey": {
"label": "Pintasan",
"prompt": {
"keybind-options": {
"hotkey": "Pintasan"
},
"label": "Pilih pintasan untuk beralih ke gambar-dalam-gambar",
"title": "Pintasan gambar-dalam-gambar"
}
},
"save-window-position": "Simpan posisi jendela",
"save-window-size": "Simpan ukuran jendela",
"use-native-pip": "Gunakan PiP bawaan peramban"
},
"name": "Gambar-dalam-gambar",
"templates": {
"button": "Gambar-dalam-gambar"
}
},
"playback-speed": {
"description": "Dengarkan cepat, dengarkan perlahan! Tambahkan penggeser untuk mengendalikan kecepatan lagu",
"name": "Kecepatan Pemutar",
"templates": {
"button": "Kecepatan"
}
},
"precise-volume": {
"description": "Kendalikan volume secara presisi menggunakan roda tetikus/pintasan, dengan HUD kustom dan langkah volume yang dapat diatur",
"menu": {
"arrows-shortcuts": "Kendali Tombol Panah Lokal",
"custom-volume-steps": "Atur Langkah Volume Kustom",
"global-shortcuts": "Pintasan Global"
},
"name": "Volume Presisi",
"prompt": {
"global-shortcuts": {
"keybind-options": {
"decrease": "Kurangi Volume",
"increase": "Tingkatkan Volume"
},
"label": "Pilih Pintasan Volume Global:",
"title": "Pintasan Volume Global"
},
"volume-steps": {
"label": "Pilih Langkah Peningkatan/Pengurangan Volume",
"title": "Langkah Volume"
}
}
},
"quality-changer": {
"backend": {
"dialog": {
"quality-changer": {
"detail": "Kualitas Terkini: {{quality}}",
"message": "Pilih Kualitas Video:",
"title": "Pilih Kualitas Video"
}
}
},
"description": "Izinkan untuk mengubah kualitas video dengan tombol pada hamparan video",
"name": "Pengubah Kualitas Video"
},
"scrobbler": {
"description": "Tambahkan dukungan scrobbling (mis. last.fm, Listenbrainz)",
"dialog": {
"lastfm": {
"auth-failed": {
"message": "Gagal mengotentikasi Last.fm\nSembunyikan munculan hingga muat ulang selanjutnya.",
"title": "Otentikasi Gagal"
}
}
},
"menu": {
"lastfm": {
"api-settings": "Pengaturan API Last.fm"
},
"listenbrainz": {
"token": "Masukkan token pengguna ListenBrainz"
},
"scrobble-other-media": "Scrobble media lain"
},
"name": "Scrobbler",
"prompt": {
"lastfm": {
"api-key": "Kunci API Last.fm",
"api-secret": "Secret API Last.fm"
},
"listenbrainz": {
"token": {
"label": "Masukkan token pengguna ListenBrainz Anda:",
"title": "Token ListenBrainz"
}
}
}
},
"shortcuts": {
"description": "Izinkan pengaturan pintasan global untuk pemutar (main/jeda/selanjutnya/sebelumnya) dan mematikan OSD media dengan mengesampingkan tombol media, mengaktifkan Ctrl/CMD + F untuk pencarian, mengaktifkan dukungan MPRIS Linux untuk tombol media, dan tombol pintasan kustom untuk pengguna lanjutan",
"menu": {
"override-media-keys": "Timpa Tombol Media",
"set-keybinds": "Atur Pengendali Lagu Global"
},
"name": "Pintasan (& MPRIS)",
"prompt": {
"keybind": {
"keybind-options": {
"next": "Selanjutnya",
"play-pause": "Main / Jeda",
"previous": "Sebelumnya"
},
"label": "Pilih Pintasan Global untuk Pengendali Lagu:",
"title": "Pintasan Global"
}
}
},
"skip-disliked-songs": {
"description": "Lewati lagu yang tidak disukai",
"name": "Lewati Lagu yang Tidak Disukai"
},
"skip-silences": {
"description": "Otomatis lewati bagian hening dari lagu",
"name": "Lewati Keheningan"
},
"sponsorblock": {
"description": "Otomatis Melewati bagian yang bukan musik seperti intro/outro atau bagian dari video musik di mana lagu tidak dimainkan",
"name": "SponsorBlock"
},
"synced-lyrics": {
"description": "Menyediakan lirik lagu yang disinkronkan, menggunakan penyedia seperti LRClib.",
"errors": {
"fetch": "⚠️ - Terjadi kesalahan saat mengambil lirik. Coba lagi nanti.",
"not-found": "⚠️ - Tidak ada lirik yang ditemukan untuk lagu ini."
},
"menu": {
"default-text-string": {
"label": "Karakter default antara lirik",
"tooltip": "Pilih karakter default yang akan digunakan untuk celah antar lirik"
},
"line-effect": {
"label": "Efek garis",
"submenu": {
"focus": {
"label": "Fokus",
"tooltip": "Jadikan hanya baris saat ini berwarna putih"
},
"offset": {
"label": "Offset",
"tooltip": "Mengimbangi garis saat ini di sebelah kanan"
},
"scale": {
"label": "Skala",
"tooltip": "Skala garis saat ini"
}
},
"tooltip": "Pilih efek yang akan diterapkan ke baris saat ini"
},
"precise-timing": {
"label": "Buat liriknya tersinkronisasi dengan sempurna",
"tooltip": "Hitung hingga milidetik tampilan baris berikutnya (dapat berdampak kecil pada kinerja)"
},
"show-lyrics-even-if-inexact": {
"label": "Tampilkan lirik meskipun tidak tepat",
"tooltip": "Jika lagu tidak ditemukan, plugin akan mencoba lagi dengan kueri pencarian yang berbeda.\nHasil dari percobaan kedua mungkin tidak tepat."
},
"show-time-codes": {
"label": "Tampilkan kode waktu",
"tooltip": "Tampilkan kode waktu di samping lirik"
}
},
"name": "Lirik yang Disinkronkan",
"refetch-btn": {
"fetching": "Mengambil...",
"normal": "Ambil ulang lirik"
},
"warnings": {
"duration-mismatch": "⚠️ - Liriknya mungkin tidak sinkron karena ketidakcocokan durasi.",
"inexact": "⚠️ - Lirik lagu ini mungkin tidak tepat",
"instrumental": "⚠️ - Ini adalah lagu instrumental"
}
},
"taskbar-mediacontrol": {
"description": "Kendalikan pemutaran dari bilah alat Windows",
"name": "Pengendali Media di Bilah Alat"
},
"touchbar": {
"description": "Tambahkan widget TouchBar untuk pengguna macOS",
"name": "TouchBar"
},
"tuna-obs": {
"description": "Integrasi dengan plugin Tuna OBS",
"name": "Tuna OBS"
},
"video-toggle": {
"description": "Tambahkan tombol untuk beralih antara mode Lagu/Video. secara opsional juga dapat menghapus keseluruhan tab video",
"menu": {
"align": {
"label": "Perataan",
"submenu": {
"left": "Kiri",
"middle": "Tengah",
"right": "Kanan"
}
},
"force-hide": "Paksa hapus tab video",
"mode": {
"label": "Mode",
"submenu": {
"custom": "Peralih kustom",
"disabled": "Mati",
"native": "Peralih bawaan"
}
}
},
"name": "Peralih Video",
"templates": {
"button": "Lagu"
}
},
"visualizer": {
"description": "Tambahkan visualisator ke pemutar",
"menu": {
"visualizer-type": "Tipe Visualisator"
},
"name": "Visualisator"
}
}
}

813
src/i18n/resources/is.json Normal file
View File

@ -0,0 +1,813 @@
{
"common": {
"console": {
"plugins": {
"execute-failed": "Tókst ekki að framkvæma tengiforrit {{pluginName}}::{{contextName}}",
"executed-at-ms": "Tengiforrit {{pluginName}}::{{contextName}} var framkvæmd í {{ms}}ms",
"initialize-failed": "Tókst ekki að frumstilla tengiforrit \"{{pluginName}}\"",
"load-all": "Er að hlaða öllum tengiforritum",
"load-failed": "Tókst ekki að hlaða tengiforritinu \"{{pluginName}}\"",
"loaded": "Tengiforrit \"{{pluginName}}\" hlaðið",
"unload-failed": "Tókst ekki að afhlaða tengiforritinu \"{{pluginName}}\"",
"unloaded": "Tengiforrit „{{pluginName}}“ óhlaðin"
}
}
},
"language": {
"code": "is",
"local-name": "Íslenska",
"name": "Icelandic"
},
"main": {
"console": {
"did-finish-load": {
"dev-tools": "Lokið við hleðslu. DevTools opnuð"
},
"i18n": {
"loaded": "i18n hlaðið"
},
"second-instance": {
"receive-command": "Fengið skipun yfir prótókoll: \"{{command}}\""
},
"theme": {
"css-file-not-found": "CSS skrá \"{{cssFile}}\" er ekki til, er að hunsa"
},
"unresponsive": {
"details": "Viðbragðslaust Villa!\n{{error}}"
},
"when-ready": {
"clearing-cache-after-20s": "Er að hreinsa forritabúfera"
},
"window": {
"tried-to-render-offscreen": "Gluggi reyndi að birta utan skjás, gluggastærð={{windowSize}}, skjástærð={{displaySize}}, stöðu={{position}}"
}
},
"dialog": {
"hide-menu-enabled": {
"detail": "Valmyndin er falin, notaðu 'Breytingarlykil' til að sýna hana (eða 'Útfararlykil' ef þú notar valmynd í forriti)",
"message": "Fela Valmynd er virkjuð",
"title": "Fela Valmynd Virkjuð"
},
"need-to-restart": {
"buttons": {
"later": "Seinna",
"restart-now": "Endurræsa Núna"
},
"detail": "\"{{pluginName}}\" tengiforrit þarfnast endurræsingar til að taka gildi",
"message": "\"{{pluginName}}\" þarf að endurræsa",
"title": "Endurræsa Krafist"
},
"unresponsive": {
"buttons": {
"quit": "Hætta",
"relaunch": "Endurræsa",
"wait": "Bíddu"
},
"detail": "Við biðjumst velvirðingar á óþægindunum! vinsamlegast veldu hvað á að gera:",
"message": "Umsóknin svarar ekki",
"title": "Gluggi er svarar ekki"
},
"update-available": {
"buttons": {
"disable": "Gera Uppfærslur Óvirkar",
"download": "Sækja",
"ok": "Í lagi"
},
"detail": "Ný útgáfa er fáanleg og hægt er að hlaða henni niður á {{downloadLink}}",
"message": "Ný útgáfa er fáanleg",
"title": "Uppfærsla Fáanleg"
}
},
"menu": {
"about": "Um",
"navigation": {
"label": "Leiðsögn",
"submenu": {
"copy-current-url": "Afritaðu núverandi vefslóð",
"go-back": "Farðu til baka",
"go-forward": "Farðu áfram",
"quit": "Útganga",
"restart": "Endurræstu Forritið"
}
},
"options": {
"label": "Valkostir",
"submenu": {
"advanced-options": {
"label": "Ítarlegravalkostir",
"submenu": {
"auto-reset-app-cache": "Endurstilltu skyndiminni forritsins þegar forritið ræsir",
"disable-hardware-acceleration": "Slökktu á vélbúnaðarhröðun",
"edit-config-json": "Breyta config.json",
"override-user-agent": "Hneka Notandaumboðsmanni",
"restart-on-config-changes": "Endurræstu við stillingarbreytingar",
"set-proxy": {
"label": "Stilla umboð",
"prompt": {
"label": "Sláðu inn umboðsfang: (skilið eftir autt til að slökkva á)",
"placeholder": "Dæmi: SOCKS5://127.0.0.1:9999",
"title": "Stilla umboð"
}
},
"toggle-dev-tools": "Breyta DevTools"
}
},
"always-on-top": "Alltaf á toppnum",
"auto-update": "Sjálfvirk Uppfærsla",
"hide-menu": {
"dialog": {
"message": "Valmyndin verður falin við næstu ræsingu, notaðu [Alt] til að sýna hana (eða bakaðu við [`] ef þú notar valmynd í forriti)",
"title": "Fela Valmynd Virkjuð"
},
"label": "Fela Valmynd"
},
"language": {
"dialog": {
"message": "Tungumáli verður breytt eftir endurræsingu",
"title": "Tungumáli Breytt"
},
"label": "Tungumál",
"submenu": {
"to-help-translate": "Viltu hjálpa til við að þýða? Smellið hér"
}
},
"resume-on-start": "Haltu áfram síðasta lagi þegar forritið byrjar",
"single-instance-lock": "Eittdæmilás",
"start-at-login": "Byrjaðu á innskráningu",
"starting-page": {
"label": "Upphafssíða",
"unset": "Ósetja"
},
"tray": {
"label": "Bakki",
"submenu": {
"disabled": "Fötluð",
"enabled-and-hide-app": "Bakki virkt, og fela forritsgluggi",
"enabled-and-show-app": "Virkjað og sýna forrit",
"play-pause-on-click": "Spila/hlé við smell"
}
},
"visual-tweaks": {
"label": "Sjónrænaraðlögun",
"submenu": {
"like-buttons": {
"default": "Sjálfgefinn",
"force-show": "Þvingaðu sýna",
"hide": "Fela",
"label": "Líkartakkar"
},
"remove-upgrade-button": "Fjarlægja uppgræðartakkan",
"theme": {
"dialog": {
"button": {
"cancel": "Hætta við",
"remove": "Fjarlægja"
},
"remove-theme": "Ertu viss um að þú viljir fjarlægja þetta sérsniðna þema?",
"remove-theme-message": "Þetta mun fjarlægja sérsniðna þema"
},
"label": "Þema",
"submenu": {
"import-css-file": "Flytja inn sérsniðna CSS skrá",
"no-theme": "Engin þema"
}
}
}
}
}
},
"plugins": {
"enabled": "Virkt",
"label": "Tengiforrit",
"new": "NÝR"
},
"view": {
"label": "Útsýni",
"submenu": {
"force-reload": "Þvingaðu Endurhleðslu",
"reload": "Endurhlaða",
"reset-zoom": "Raunveruleg Stærð",
"toggle-fullscreen": "Breyta Fullskjá",
"zoom-in": "Aðdráttur",
"zoom-out": "Aðdráttur út"
}
}
},
"tray": {
"next": "Næst",
"play-pause": "Spila/Hlé",
"previous": "Fyrri",
"quit": "Útganga",
"restart": "Endurræstu Forritið",
"show": "Sýna glugga",
"tooltip": {
"default": "YouTube Tónlist",
"with-song-info": "YouTube Tónlist: {{artist}} - {{title}}"
}
}
},
"plugins": {
"ad-speedup": {
"description": "Ef auglýsing spilar slökknar hún á hljóðinu og stillir spilunarhraðann á 16x",
"name": "Auglýsingahraða"
},
"adblocker": {
"description": "Lokaðu fyrir allar auglýsingar og rakningar úr kassanum",
"menu": {
"blocker": "Blokkari"
},
"name": "Auglýsingablokkari"
},
"album-actions": {
"description": "Bætir Ódíslika, Mislíkt, Líkt, og Ólíkt til að nota þetta á öll lög á spilunarlista eða albúm",
"name": "Albúmsaðgerðir"
},
"album-color-theme": {
"description": "Beitir kraftmikið þema og sjónrænum áhrifum sem byggjast á litavali albúmsins",
"menu": {
"color-mix-ratio": {
"label": "Litablöndunarhlutfall",
"submenu": {
"percent": "{{ratio}}%"
}
}
},
"name": "Albúmlitaþema"
},
"ambient-mode": {
"description": "Beitir lýsingaráhrifum með því að varpa mildum litum úr myndbandinu í bakgrunn skjásins",
"menu": {
"blur-amount": {
"label": "Þokuupphæð",
"submenu": {
"pixels": "{{blurAmount}} pixlum"
}
},
"buffer": {
"label": "Stuðpúði",
"submenu": {
"buffer": "{{buffer}}"
}
},
"opacity": {
"label": "Ógegnsæi",
"submenu": {
"percent": "{{opacity}}%"
}
},
"quality": {
"label": "Gæði",
"submenu": {
"pixels": "{{quality}} pixlum"
}
},
"size": {
"label": "Sæði",
"submenu": {
"percent": "{{size}}%"
}
},
"smoothness-transition": {
"label": "Slétt umskipti",
"submenu": {
"during": "Meðan á {{interpolationTime}} s"
}
},
"use-fullscreen": {
"label": "Er að nota fullskjár"
}
},
"name": "Umhverfishamur"
},
"api-server": {
"description": "Bætir API netþjóni til að stjórna spilaranum",
"dialog": {
"request": {
"buttons": {
"allow": "Leyfa",
"deny": "Óleyfa"
},
"message": "Leyfa {{ID}} ({{origin}}) að aðganga API-ið?",
"title": "API heimildarbeiðni"
}
},
"menu": {
"auth-strategy": {
"label": "Heimildarstefna",
"submenu": {
"auth-at-first": {
"label": "Heimila á fyrst beiðni"
},
"none": {
"label": "Nei heimild"
}
}
},
"hostname": {
"label": "Hýsitölvunafn"
},
"port": {
"label": "Tengi"
}
},
"name": "API-Netþjónn [Beta]",
"prompt": {
"hostname": {
"label": "Sláðu inn hýsitölvunafnið (eins og 0.0.0.0) fyrir API-netþjónninn:",
"title": "Hýsitölvunafn"
},
"port": {
"label": "Sláðu inn tengið fyrir API-netþjónninn:",
"title": "Tengi"
}
}
},
"audio-compressor": {
"description": "Notaðu þjöppun á hljóð (lækkar hljóðstyrk háværustu hluta merkis og hækkar hljóðstyrk í mýkstu hlutunum)",
"name": "Hljóðþjöppu"
},
"blur-nav-bar": {
"description": "Gerir leiðsögustikuna gagnsæja og óskýrt",
"name": "Þoka Leiðsagnarstika"
},
"bypass-age-restrictions": {
"description": "Framhjá aldursstaðfestingu YouTube",
"name": "Farið Framhjá Aldurstakmörkunum"
},
"captions-selector": {
"description": "Skjátextavali fyrir YouTube Tónlist hljóðrásir",
"menu": {
"autoload": "Veldu sjálfkrafa síðast notaða myndatexta",
"disable-captions": "Engir skjátextar sjálfgefið"
},
"name": "Yfirskriftarval",
"prompt": {
"selector": {
"label": "Núverandi tungumál skjátexta: {{language}}",
"none": "Enginn",
"title": "Veldu tungumál fyrir skjátexta"
}
},
"templates": {
"title": "Opnaðu skjátextavali"
}
},
"compact-sidebar": {
"description": "Stilltu hliðarstikuna alltaf í þétta stillingu",
"name": "Fyrirferðarlítillhliðarstika"
},
"crossfade": {
"description": "Krossfæra á milli lög",
"menu": {
"advanced": "Háþróaður"
},
"name": "Krossfæra [Prófunarútgáfa]",
"prompt": {
"options": {
"multi-input": {
"fade-in-duration": "Dvína í lengd (ms)",
"fade-out-duration": "Dvína út lengd (ms)",
"fade-scaling": {
"label": "Fölunarskala",
"linear": "Línulegt",
"logarithmic": "Logaritmískt"
},
"seconds-before-end": "Krossfæra N sekúndum fyrir enda"
},
"title": "Krossfæravalkosti"
}
}
},
"disable-autoplay": {
"description": "Gerir lag að byrja í \"hlé\" ham",
"menu": {
"apply-once": "Á aðeins við ræsingu"
},
"name": "Slökkva á sjálfvirkri spilun"
},
"discord": {
"backend": {
"already-connected": "Reyndi að tengja við virka tengingu",
"connected": "Tengdur við Discord",
"disconnected": "Aftengdur frá Discord"
},
"description": "Sýndu vinum þínum hvað þú hlustar á með Rík Nærvera",
"menu": {
"auto-reconnect": "Sjálfvirk endurtengja",
"clear-activity": "Hreinsa virkni",
"clear-activity-after-timeout": "Hreinsa virkni eftir tímamörk",
"connected": "Tengt",
"disconnected": "Aftengt",
"hide-duration-left": "Fela tímalengd til vinstri",
"hide-github-button": "Fela GitHub tengilhnapp",
"play-on-youtube-music": "Spilaðu á YouTube Tónlist",
"set-inactivity-timeout": "Stilltu tímamörk fyrir óvirkni"
},
"name": "Discord Rík Nærvera",
"prompt": {
"set-inactivity-timeout": {
"label": "Sláðu inn óvirknitíma eftir sekúndur:",
"title": "Stilltu tímamörk fyrir óvirkni"
}
}
},
"downloader": {
"backend": {
"dialog": {
"error": {
"buttons": {
"ok": "Í lagi"
},
"message": "Úff! Afsakið, niðurhal mistókst…",
"title": "Villa við niðurhal!"
},
"start-download-playlist": {
"buttons": {
"ok": "Í lagi"
},
"detail": "({{playlistSize}} lög)",
"message": "Að sækja lagalista {{playlistTitle}}",
"title": "Niðurhal byrjað"
}
},
"feedback": {
"conversion-progress": "Umbreyting: {{percent}}%",
"converting": "Er að umbreytir…",
"done": "Búið: {{filePath}}",
"download-info": "Er að niðurhal {{artist}} - {{title}} [{{videoId}}",
"download-progress": "Niðurhal: {{percent}}%",
"downloading": "Er að niðurhal…",
"downloading-counter": "Er að niðurhal {{current}}/{{total}}…",
"downloading-playlist": "Er að niðurhal spilunarlisti \"{{playlistTitle}}\" - {{playlistSize}} lög ({{playlistId}})",
"error-while-downloading": "Villa við niðurhal \"{{author}} - {{title}}\": {{error}}",
"folder-already-exists": "Mappan {{playlistFolder}} er þegar til",
"getting-playlist-info": "Sækir upplýsingar um spilunarlista…",
"loading": "Er að hlaða.…",
"playlist-has-only-one-song": "Spilunarlista hefur aðeins eitt atriði, það er verið að hlaða því niður beint",
"playlist-id-not-found": "Ekkert auðkenni spilunarlista fannst",
"playlist-is-empty": "Spilunarlistinn er tómur",
"playlist-is-mix-or-private": "Villa við að fá upplýsingar um spilunarlista: Gakktu úr skugga um að þetta sé ekki einkaspilunarlisti eða \"Mixað fyrir þig\"\n\n{{error}}",
"preparing-file": "Er að undirbúa skrá…",
"saving": "Er að vista…",
"trying-to-get-playlist-id": "Er að reyna að fá auðkenni spilunarlista: {{playlistId}}",
"video-id-not-found": "Myndband fannst ekki",
"writing-id3": "Að skrifa ID3 tög…"
}
},
"description": "Niðurhalar MP3 / upprunahljóði beint úr viðmótinu",
"menu": {
"choose-download-folder": "Veldu niðurhalsmöppu",
"download-finish-settings": {
"label": "Sækja þegar lokið",
"prompt": {
"last-percent": "Eftir x sekúndur",
"last-seconds": "Síðustu x sekúndur",
"title": "Stilla hvenær á að hlaða niður"
},
"submenu": {
"advanced": "Ítarlegri",
"enabled": "Virkt",
"mode": "Tímastilling",
"percent": "Hlutfall",
"seconds": "Sekúndur"
}
},
"download-playlist": "Sækja spilunarlista",
"presets": "Forstillingar",
"skip-existing": "Slepptu núverandi skrám"
},
"name": "Niðurhalari",
"renderer": {
"can-not-update-progress": "Ekki er hægt að uppfæra framvindu"
},
"templates": {
"button": "Sækja"
}
},
"exponential-volume": {
"description": "Gerir hljóðstyrkssleðann veldisvísis svo það er auðveldara að velja lægra hljóðstyrk.",
"name": "Veldibundiðrúmmál"
},
"in-app-menu": {
"description": "Gefur valmyndastikum glæsilegt, dökkt eða albúmslitsjáðu",
"menu": {
"hide-dom-window-controls": "Fela DOM gluggastýringar"
},
"name": "Valmynd í forriti"
},
"lumiastream": {
"description": "Bætir við Lumia Stream stuðningi",
"name": "Lumia Stream [Prófunarútgáfa]"
},
"lyrics-genius": {
"description": "Bætir stuðningi við texta fyrir flest lög",
"menu": {
"romanized-lyrics": "Rómaníseraðir Söngtexti"
},
"name": "Söngtexti Snilld",
"renderer": {
"fetched-lyrics": "Sótt söngtexti fyrir Snilld"
}
},
"music-together": {
"description": "Deila spilunarlista með öðrum. Þegar gestgjafinn spilar lag munu allir aðrir heyra sama lagið",
"dialog": {
"enter-host": "Sláðu inn auðkenni gestgjafa"
},
"internal": {
"save": "Vista",
"track-source": "Lagsuppspretta",
"unknown-user": "Óþekktur notandi"
},
"menu": {
"click-to-copy-id": "Afritaðu hýsingarauðkenni",
"close": "Lokaðu Tónlist Saman",
"connected-users": "Tengdir Notendur",
"disconnect": "Aftengdu Tónlist Saman",
"empty-user": "Engir tengdir notendur",
"host": "Tónlist Saman Gestgjafi",
"join": "Vertu með Tónlist Saman",
"permission": {
"all": "Leyfðu gestum að stjórna spilunarlista og spilara",
"host-only": "Aðeins gestgjafi getur stjórnað spilunarlista og spilara",
"playlist": "Leyfðu gestum að stjórna spilunarlista"
},
"set-permission": "Breyta Stjórnunarheimild",
"status": {
"disconnected": "Aftengt",
"guest": "Tengdur sem Gestur",
"host": "Tengdur sem Gestgjafi"
}
},
"name": "Tónlist Saman [Prófunarútgáfa]",
"toast": {
"add-song-failed": "Mistókst að bæta við lagi",
"closed": "Tónlist Saman lokað",
"disconnected": "Tónlist Saman aftengt",
"host-failed": "Mistókst að hýsa Tónlist Saman",
"id-copied": "Gestgjafaauðkenni afritað á klippiborð",
"id-copy-failed": "Mistókst að afrita Hýsingarauðkenni á klippiborð",
"join-failed": "Ekki tókst að taka þátt í Tónlist Saman",
"joined": "Tengd Tónlist Saman",
"permission-changed": "Tónlist Saman leyfi breytt í \"{{permission}}\"",
"remove-song-failed": "Tókst ekki að fjarlægja lag",
"user-connected": "{{name}} tengd Tónlist Saman",
"user-disconnected": "{{name}} fór frá Tónlist Saman"
}
},
"navigation": {
"description": "Næsta/Til baka leiðsagnarörvar beint samþættar í viðmótinu, eins og í uppáhalds vafranum þínum",
"name": "Leiðsögn"
},
"no-google-login": {
"description": "Fjarlægðu Google innskráningarhnappa og tengla úr viðmótinu",
"name": "Engin Google innskráning"
},
"notifications": {
"description": "Birta tilkynningu þegar lag byrjar að spila (gagnvirkartilkynningar eru fáanlegar á Windows)",
"menu": {
"interactive": "Gagnvirkartilkynningar",
"interactive-settings": {
"label": "Gagnvirkarstillingar",
"submenu": {
"hide-button-text": "Fela hnappatexta",
"refresh-on-play-pause": "Endurnýjaðu í Spilun/Hlé",
"tray-controls": "Opna/loka á bakka smellur"
}
},
"priority": "Tilkynningaforgangur",
"toast-style": "Ristað brauð stíl",
"unpause-notification": "Sýna tilkynningu þegar ekki er gert hlé"
},
"name": "Tilkynningar"
},
"picture-in-picture": {
"description": "Gerir kleift að skipta forritinu yfir í mynd-í-mynd stillingu",
"menu": {
"always-on-top": "Alltaf á toppnum",
"hotkey": {
"label": "Flýtilykil",
"prompt": {
"keybind-options": {
"hotkey": "Flýtilykil"
},
"label": "Veldu flýtilykil til að skipta mynd-í-mynd",
"title": "Mynd-í-mynd Flýtilykil"
}
},
"save-window-position": "Vista gluggastöðu",
"save-window-size": "Vista gluggastærð",
"use-native-pip": "Notaðu innbyggða PiP í vafra"
},
"name": "Mynd-í-mynd",
"templates": {
"button": "Mynd-í-mynd"
}
},
"playback-speed": {
"description": "Hlustaðu hratt, hlustaðu hægt! Bætir við sleða sem stjórnar lagahraðanum",
"name": "Spilunarhraði",
"templates": {
"button": "Hraði"
}
},
"precise-volume": {
"description": "Stjórnaðu hljóðstyrknum nákvæmlega með músarhjóli/hraðtökkum, með sérsniðnum HUD og sérsniðnum hljóðstyrksþrepum",
"menu": {
"arrows-shortcuts": "Staðbundnar Örvatakkar Stjórna",
"custom-volume-steps": "Stilltu Sérsniðin Hljóðstyrksskref",
"global-shortcuts": "Alþjóðlegarflýtilyklar"
},
"name": "Nákvæmshljóðstyrkur",
"prompt": {
"global-shortcuts": {
"keybind-options": {
"decrease": "Minnka Hljóðstyrk",
"increase": "Auka Hljóðstyrk"
},
"label": "Veldu Alþjóðleghljóðstyrklyklabindingar:",
"title": "Alþjóðleghljóðstyrklyklabindingar"
},
"volume-steps": {
"label": "Veldu Hljóðstyrksauka/Minnka Skref",
"title": "Hljóðstyrksskref"
}
}
},
"quality-changer": {
"backend": {
"dialog": {
"quality-changer": {
"detail": "Núverandi Gæði: {{quality}}",
"message": "Veldu Myndbandsgæði:",
"title": "Veldu Myndbandsgæði"
}
}
},
"description": "Leyfir að breyta myndbandgæðum með hnappi á myndbandsyfirlaginu",
"name": "Myndbandgæðisbreyting"
},
"scrobbler": {
"description": "Bæta við scrobbling stuðningi (osv. last.fm, Listenbrainz)",
"dialog": {
"lastfm": {
"auth-failed": {
"message": "Mistókst að auðkenna með Last.fm\nFela sprettigluggann þar til næstu endurræsingu.",
"title": "Auðkenning Mistókst"
}
}
},
"menu": {
"lastfm": {
"api-settings": "Last.fm API Stillingar"
},
"listenbrainz": {
"token": "Sláðu inn ListenBrainz notandalykilinn"
},
"scrobble-other-media": "Scrobble aðra fjölmiðla"
},
"name": "Scrobbler",
"prompt": {
"lastfm": {
"api-key": "Last.fm API lykill",
"api-secret": "Last.fm API leyndarmál"
},
"listenbrainz": {
"token": {
"label": "Sláðu inn ListenBrainz notandatáknið þitt:",
"title": "ListenBrainz tákn"
}
}
}
},
"shortcuts": {
"description": "Leyfir að stilla alþjóðlegaflýtilykla fyrir spilun (spila/gera hlé/næsta/fyrri) og slökkva á OSD miðla með því að hnekkja miðlunartökkum, kveikja á Ctrl/CMD + F til að leita, kveikja á Linux MPRIS stuðningi fyrir miðlunarlykla og sérsniðna flýtilykla fyrir lengra komna notendur",
"menu": {
"override-media-keys": "Hneka Fjölmiðlalykla",
"set-keybinds": "Stilltu Alþjóðlegslagastýringar"
},
"name": "Flýtileiðir (og MPRIS)",
"prompt": {
"keybind": {
"keybind-options": {
"next": "Næst",
"play-pause": "Spila / Hlé",
"previous": "Fyrri"
},
"label": "Veldu Alþjóðlegslyklabind fyrir Lagastýringu:",
"title": "Alþjóðlegslyklabindingar"
}
}
},
"skip-disliked-songs": {
"description": "Sleppir mislíkaði lög",
"name": "Slepptu Mislíkaði Lög"
},
"skip-silences": {
"description": "Slepptu sjálfkrafa þagnarköflum í lögum",
"name": "Slepptu Þögnum"
},
"sponsorblock": {
"description": "Sleppur sjálfkrafa hlutum sem ekki eru tónlist, eins og inngangur/lok eða hlutar af tónlistarmyndböndum þar sem lag er ekki að spila",
"name": "Styrktarblokk"
},
"synced-lyrics": {
"description": "Veitir samstillta texta við lög, með því að nota veitur eins og LRClib.",
"errors": {
"fetch": "⚠️ - Villa kom upp við að sækja textann. Vinsamlegast reyndu aftur síðar.",
"not-found": "⚠️ - Enginn texti fannst við þetta lag."
},
"menu": {
"default-text-string": {
"label": "Sjálfgefið tákn á milli texta",
"tooltip": "Veldu sjálfgefna tákn til að nota fyrir bilið á milli texta"
},
"line-effect": {
"label": "Línuafleiðing",
"submenu": {
"focus": {
"label": "Brennidepill",
"tooltip": "Gerðu aðeins núverandi línu hvíta"
},
"offset": {
"label": "Fararbyrjun",
"tooltip": "Fararbyrjun á hægri af núverandi línan"
},
"scale": {
"label": "Skali",
"tooltip": "Skala núverandi línu"
}
},
"tooltip": "Veldu áhrif til að nota á núverandi línu"
},
"precise-timing": {
"label": "Gera textana fullkomlega samstillta",
"tooltip": "Reikna upp á millisekúndu birtingu næstu línu (getur haft lítil áhrif á frammistöðu)"
},
"show-lyrics-even-if-inexact": {
"label": "Sýna texta, jafnvel þótt hann sé ónákvæmur",
"tooltip": "Ef lagið finnst ekki reynir tengiforritið aftur með annarri leitarfyrirspurn.\nNiðurstaðan úr annarri tilraun er kannski ekki nákvæm."
},
"show-time-codes": {
"label": "Sýna tímikóðar",
"tooltip": "Sýna tímakóðana við hliðina á textanum"
}
},
"name": "Samstilltur texti",
"refetch-btn": {
"fetching": "Er að sækja",
"normal": "Endursækja texta"
},
"warnings": {
"duration-mismatch": "⚠️ - Textarnir gætu verið ekki samstilltir vegna tímalengdar.",
"inexact": "⚠️ - Textinn við þetta lag er kannski ekki nákvæmur",
"instrumental": "⚠️ - Þetta er hljóðfærilegt lag"
}
},
"taskbar-mediacontrol": {
"description": "Stjórnaðu spilun frá Windows verkefnastikunni þinni",
"name": "Miðlunarstýringarverkefnastikunnar"
},
"touchbar": {
"description": "Bætir við Snertistiku græju fyrir macOS notendur",
"name": "Snertistiku"
},
"tuna-obs": {
"description": "Samþætting við OBS viðbót Tuna",
"name": "Tuna OBS"
},
"video-toggle": {
"description": "Bætir við hnappi til að skipta á milli myndbands/lagshams. Getur einnig valfrjálst fjarlægt allan myndbandsflipann",
"menu": {
"align": {
"label": "Jöfnun",
"submenu": {
"left": "Vinstri",
"middle": "Miðja",
"right": "Rétt"
}
},
"force-hide": "Þvingaðu fjarlægja myndbandsflipann",
"mode": {
"label": "Hamur",
"submenu": {
"custom": "Sérsniðinn rofi",
"disabled": "Fötluð",
"native": "Innfæddsrofi"
}
}
},
"name": "Myndbandsrofi",
"templates": {
"button": "Lag"
}
},
"visualizer": {
"description": "Bætir sýndarstýringar við spilarann",
"menu": {
"visualizer-type": "Sýndarstýringartegund"
},
"name": "Sýndarstýringar"
}
}
}

View File

@ -158,6 +158,14 @@
},
"remove-upgrade-button": "Rimuovi il pulsante aggiorna",
"theme": {
"dialog": {
"button": {
"cancel": "Cancella",
"remove": "Rimuovi"
},
"remove-theme": "Sicuro di voler rimuovere il tema personalizzato?",
"remove-theme-message": "Questo rimuoverà il tema personalizzato"
},
"label": "Tema",
"submenu": {
"import-css-file": "Importa file CSS personalizzato",
@ -191,27 +199,43 @@
"previous": "Precedente",
"quit": "Esci",
"restart": "Riavvia l'app",
"show": "Mostra finestra"
"show": "Mostra finestra",
"tooltip": {
"default": "YouTube Music",
"with-song-info": "YouTube Music: {{artist}} - {{title}}"
}
}
},
"plugins": {
"ad-speedup": {
"description": "Se viene riprodotto un annuncio, l'audio viene disattivato e viene impostata la velocità di riproduzione su 16x",
"name": "Accelerazione ad"
},
"adblocker": {
"description": "Blocca tutti gli annunci e i tracker",
"menu": {
"blocker": "Blocco"
},
"name": "Adblocker"
"name": "Ad blocker"
},
"album-actions": {
"description": "Aggiunge i pulsanti Undislike, Dislike, Like e Unlike a tutti i brani di una playlist o di un album.",
"description": "Aggiunge i pulsanti Undislike, Dislike, Like e Unlike a tutti i brani di una playlist o di un album",
"name": "Azioni album"
},
"album-color-theme": {
"description": "Applica un tema dinamico e degli effetti visivi basandosi sul colore dell'album",
"menu": {
"color-mix-ratio": {
"label": "Percentiuale colore",
"submenu": {
"percent": "{{ratio}}%"
}
}
},
"name": "Tema abbinato a colore album"
},
"ambient-mode": {
"description": "Applica un effetto di illuminazione proiettando i colori delicati del video sullo sfondo dello schermo.",
"description": "Applica un effetto di illuminazione proiettando i colori delicati del video sullo sfondo dello schermo",
"menu": {
"blur-amount": {
"label": "Intensità sfocatura",
@ -255,6 +279,49 @@
},
"name": "Modalità Ambiente"
},
"api-server": {
"description": "Aggiunge un server API per controllare il player",
"dialog": {
"request": {
"buttons": {
"allow": "Permetti",
"deny": "Nega"
},
"message": "Consentire a {{ID}} ({{origin}}) di accedere all'API?",
"title": "Autorizzazione API richiesta"
}
},
"menu": {
"auth-strategy": {
"label": "Metodo di autorizzazione",
"submenu": {
"auth-at-first": {
"label": "Autorizza alla prima richiesta"
},
"none": {
"label": "Nessuna autorizzazione"
}
}
},
"hostname": {
"label": "Hostname"
},
"port": {
"label": "Porta"
}
},
"name": "API Server [Beta]",
"prompt": {
"hostname": {
"label": "Inserisci il nome host (ad esempio 0.0.0.0) per il server API:",
"title": "Hostname"
},
"port": {
"label": "Inserisci la porta per il server API:",
"title": "Porta"
}
}
},
"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"
@ -390,6 +457,21 @@
"description": "Download MP3 / sorgenti audio direttamente dall'interfaccia",
"menu": {
"choose-download-folder": "Scegli cartella download",
"download-finish-settings": {
"label": "Scarica al termine",
"prompt": {
"last-percent": "Dopo x percento",
"last-seconds": "Ultimi x secondi",
"title": "Configura quando scaricare"
},
"submenu": {
"advanced": "Avanzato",
"enabled": "Abilitato",
"mode": "Modalità tempo",
"percent": "Percentuale",
"seconds": "Secondi"
}
},
"download-playlist": "Scarica la playlist",
"presets": "Preimpostazioni",
"skip-existing": "Salta i file esistenti"
@ -413,10 +495,6 @@
},
"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]"
@ -468,6 +546,7 @@
"disconnected": "Music Together disconnesso",
"host-failed": "Impossibile ospitare Music Together",
"id-copied": "L'ID dell Host è stato copiato negli appunti",
"id-copy-failed": "Impossibile copiare l'ID dell'host negli appunti",
"join-failed": "Impossibile unirsi a Music Together",
"joined": "Unito a Music Together",
"permission-changed": "L'autorizzazione di Music Together è cambiata in {{permission}}",
@ -568,8 +647,41 @@
"description": "Permette di cambiare la qualità del video con un pulsante in sovrimpressione",
"name": "Cambia qualità video"
},
"scrobbler": {
"description": "Aggiunge il supporto per lo scrobbling (Last.fm, Listenbrainz ecc.)",
"dialog": {
"lastfm": {
"auth-failed": {
"message": "Impossibile autenticarsi con Last.fm\nNascondi il popup fino al prossimo riavvio.",
"title": "Autenticazione fallita"
}
}
},
"menu": {
"lastfm": {
"api-settings": "Impostazione Last.fm API"
},
"listenbrainz": {
"token": "Inserire il token utente per ListenBrainz"
},
"scrobble-other-media": "Scrobble altri media"
},
"name": "Scrobbler",
"prompt": {
"lastfm": {
"api-key": "API key per Last.fm",
"api-secret": "API secret per Last.fm"
},
"listenbrainz": {
"token": {
"label": "Inserisci il tuo token utente ListenBrainz:",
"title": "Token ListenBrainz"
}
}
}
},
"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.",
"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"
@ -599,6 +711,59 @@
"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"
},
"synced-lyrics": {
"description": "Fornisce testi sincronizzati alle canzoni, utilizzando provider come LRClib.",
"errors": {
"fetch": "⚠️ - Si è verificato un errore nel recuperare il testo. Per favore riprova più tardi.",
"not-found": "⚠️ - Nessun testo trovato per questa canzone."
},
"menu": {
"default-text-string": {
"label": "Carattere predefinito tra i testi",
"tooltip": "Scegliere il carattere predefinito da utilizzare per l'intervallo tra i testi"
},
"line-effect": {
"label": "Effetto linea",
"submenu": {
"focus": {
"label": "Focus",
"tooltip": "Rendi bianca solo la riga corrente"
},
"offset": {
"label": "Offset",
"tooltip": "Offset a destra della riga corrente"
},
"scale": {
"label": "Ingrandimento",
"tooltip": "Ingrandisci la linea corrente"
}
},
"tooltip": "Scegli l'effetto da applicare alla linea corrente"
},
"precise-timing": {
"label": "Rendi i testi perfettamente sincronizzati",
"tooltip": "Calcola al millisecondo la visualizzazione della riga successiva (può avere un piccolo impatto sulle prestazioni)"
},
"show-lyrics-even-if-inexact": {
"label": "Mostra le lyric anche se incorrette",
"tooltip": "Se il brano non viene trovato, il plugin riprova con un'altra query di ricerca.\nIl risultato del secondo tentativo potrebbe non essere esatto."
},
"show-time-codes": {
"label": "Mostra time code",
"tooltip": "Mostra i codici temporali accanto ai testi"
}
},
"name": "Testi sincronizzati",
"refetch-btn": {
"fetching": "Sto recuperando...",
"normal": "Recupera i testi"
},
"warnings": {
"duration-mismatch": "⚠️ - I testi potrebbero non essere sincronizzati a causa di una mancata corrispondenza della durata.",
"inexact": "⚠️ - Il testo di questa canzone potrebbe essere inesatto",
"instrumental": "⚠️ - Questo è un brano strumentale"
}
},
"taskbar-mediacontrol": {
"description": "Controlla riproduzione dalla taskbar di Windows",
"name": "Controlli multimediali sulla taskbar"

View File

@ -2,11 +2,11 @@
"common": {
"console": {
"plugins": {
"execute-failed": "プラグイン・{{pluginName}}:{{contextName}}実行できませんでした",
"execute-failed": "プラグイン・{{pluginName}}:{{contextName}}実行に失敗しました",
"executed-at-ms": "プラグイン {{pluginName}}::{{contextName}} は {{ms}}ms で実行されました",
"initialize-failed": "プラグイン \"{{pluginName}}\" の初期化に失敗",
"load-all": "すべてのプラグインをロード中",
"load-failed": "プラグイン”{{pluginName}}”のロード失敗しました",
"load-failed": "プラグイン”{{pluginName}}”のロード失敗しました",
"loaded": "プラグイン”{{pluginName}}”ロード完了",
"unload-failed": "プラグインのアンロードに失敗 \"{{pluginName}}\"",
"unloaded": "プラグイン {{pluginName}} がアンロードされました"
@ -24,10 +24,10 @@
"dev-tools": "ロード完了。デベロッパーツールが開きました"
},
"i18n": {
"loaded": "翻訳ロード完了"
"loaded": "i18n ロード完了"
},
"second-instance": {
"receive-command": "プロトコルより命令を受けました:”{{command}}”"
"receive-command": "プロトコルから命令を受けました:”{{command}}”"
},
"theme": {
"css-file-not-found": "CSSファイル”{{cssFile}}”が存在しません。無視します"
@ -51,7 +51,7 @@
"need-to-restart": {
"buttons": {
"later": "あとで",
"restart-now": "今すぐ再起動する"
"restart-now": "今すぐ再起動"
},
"detail": "プラグイン ”{{pluginName}}” を有効にするには再起動が必要です",
"message": "”{{pluginName}}”は再起動が必要です",
@ -64,12 +64,12 @@
"wait": "待つ"
},
"detail": "ご不便をおかけして申し訳ございません! 何をするか選んでください:",
"message": "アプリケーションは応答しません",
"title": "ウィンドウが応答しません"
"message": "アプリケーションは応答していません",
"title": "ウィンドウが応答していません"
},
"update-available": {
"buttons": {
"disable": "更新を無効化",
"disable": "アップデートを無効化",
"download": "ダウンロード",
"ok": "OK"
},
@ -98,13 +98,13 @@
"submenu": {
"auto-reset-app-cache": "アプリの開始時にキャッシュをリセット",
"disable-hardware-acceleration": "ハードウェアアクセラレーションの無効化",
"edit-config-json": "config.json を編集する",
"edit-config-json": "config.json を編集",
"override-user-agent": "ユーザーエージェントの上書き",
"restart-on-config-changes": "設定変更時に再起動",
"set-proxy": {
"label": "プロキシ",
"label": "プロキシ設定",
"prompt": {
"label": "プロキシのアドレスを入力: (空にすると無効化)",
"label": "プロキシのアドレスを入力: (空無効化)",
"placeholder": "例: SOCKS5://127.0.0.1:9999",
"title": "プロキシ"
}
@ -158,6 +158,14 @@
},
"remove-upgrade-button": "アップグレードボタンを削除",
"theme": {
"dialog": {
"button": {
"cancel": "キャンセル",
"remove": "削除"
},
"remove-theme": "本当にカスタムテーマを削除しますか?",
"remove-theme-message": "カスタムテーマを削除します"
},
"label": "テーマ",
"submenu": {
"import-css-file": "CSSファイルをインポート",
@ -170,7 +178,8 @@
},
"plugins": {
"enabled": "有効",
"label": "プラグイン"
"label": "プラグイン",
"new": "新着"
},
"view": {
"label": "表示",
@ -190,23 +199,43 @@
"previous": "前の曲",
"quit": "終了",
"restart": "アプリを再起動",
"show": "ウィンドウを表示"
"show": "ウィンドウを表示",
"tooltip": {
"default": "YouTube ミュージック",
"with-song-info": "YouTube ミュージック: {{artist}} - {{title}}"
}
}
},
"plugins": {
"ad-speedup": {
"description": "広告が再生されると、自動的にミュートされ、再生速度が16倍に設定されます",
"name": "広告のスピードを上げる"
},
"adblocker": {
"description": "すべての広告とトラッカーをブロックj",
"menu": {
"blocker": "ブロッカー"
},
"name": "Adblocker"
"name": "広告ブロッカー"
},
"album-actions": {
"description": "「Undislike嫌いではない」「Dislike嫌い」「Like好き」「Unlike好きではない」ボタンを追加し、プレイリストやアルバム内のすべての曲にこれらを適用します",
"name": "アルバムアクション"
},
"album-color-theme": {
"description": "アルバムカバーの色をベースにして動的テーマと視覚効果を適用します",
"menu": {
"color-mix-ratio": {
"label": "カラー混合比率",
"submenu": {
"percent": "{{ratio}}%"
}
}
},
"name": "アルバムカラーベースのテーマ"
},
"ambient-mode": {
"description": "動画の間接照明を画面背景に投射します",
"description": "動画の内容に合った淡い色に画面背景を変化させるライティング効果を適応します",
"menu": {
"blur-amount": {
"label": "ぼかしの強さ",
@ -239,9 +268,9 @@
}
},
"smoothness-transition": {
"label": "スムーズな切り替え",
"label": "スムーズな切り替え",
"submenu": {
"during": "{{interpolationTime}}秒間切り替え"
"during": "{{interpolationTime}}秒間切り替え"
}
},
"use-fullscreen": {
@ -250,6 +279,49 @@
},
"name": "アンビエント モード"
},
"api-server": {
"description": "プレイヤーを制御するAPIサーバーを追加",
"dialog": {
"request": {
"buttons": {
"allow": "許可",
"deny": "拒否"
},
"message": "{{ID}}が{{origin}}にアクセスすることを許可しますか?",
"title": "API承認リクエスト"
}
},
"menu": {
"auth-strategy": {
"label": "許可方法",
"submenu": {
"auth-at-first": {
"label": "初回リクエスト時に承認"
},
"none": {
"label": "不許可"
}
}
},
"hostname": {
"label": "ホスト名"
},
"port": {
"label": "ポート"
}
},
"name": "APIサーバー(Beta)",
"prompt": {
"hostname": {
"label": "APIサーバーのポート名(0.0.0.0など)を入力:",
"title": "ホスト名"
},
"port": {
"label": "APIサーバーのポートを入力:",
"title": "ポート"
}
}
},
"audio-compressor": {
"description": "オーディオにコンプレッサーを適用します(信号での一番大きい部分の音量を下げ、小さい部分の音量を上げる)",
"name": "オーディオコンプレッサー"
@ -289,7 +361,7 @@
"menu": {
"advanced": "詳細設定"
},
"name": "クロスフェード[ベータ]",
"name": "クロスフェード [ベータ]",
"prompt": {
"options": {
"multi-input": {
@ -385,6 +457,21 @@
"description": "UIから直にMP3・ソースオーディオをダウンロードします",
"menu": {
"choose-download-folder": "ダウンロードフォルダ",
"download-finish-settings": {
"label": "完了時にダウンロード",
"prompt": {
"last-percent": "x パーセント後",
"last-seconds": "最後の x 秒",
"title": "保存するタイミング"
},
"submenu": {
"advanced": "高度な設定",
"enabled": "有効",
"mode": "時間モード",
"percent": "パーセント",
"seconds": "秒"
}
},
"download-playlist": "プレイリストをダウンロード",
"presets": "プリセット",
"skip-existing": "存在するファイルをスキップ"
@ -397,6 +484,18 @@
"button": "ダウンロード"
}
},
"equalizer": {
"description": "プレイヤーにイコライザーを追加",
"menu": {
"presets": {
"label": "プリセット",
"list": {
"bass-booster": "ベースブースター"
}
}
},
"name": "イコライザー"
},
"exponential-volume": {
"description": "音量スライダを指数関数的にさせ、低い音量に設定しやすくなります。",
"name": "指数音量"
@ -408,10 +507,6 @@
},
"name": "アプリ内メニュー"
},
"last-fm": {
"description": "Last.fmのscrobblingサポートを追加",
"name": "Last.fm"
},
"lumiastream": {
"description": "Lumia Streamのサポートを追加",
"name": "Lumia Stream [ベータ]"
@ -426,6 +521,52 @@
"fetched-lyrics": "Geniusから歌詞取得完了"
}
},
"music-together": {
"description": "プレイリストを他の人と共有します。 ホストが曲を再生すると、他の全員にも同じ曲が聞こえます",
"dialog": {
"enter-host": "ホストIDを入力"
},
"internal": {
"save": "保存",
"track-source": "トラックソース",
"unknown-user": "不明なユーザー"
},
"menu": {
"click-to-copy-id": "ホストIDをコピー",
"close": "Music Togetherを閉じる",
"connected-users": "接続中のユーザー",
"disconnect": "Music Togetherから切断",
"empty-user": "接続中のユーザーはいません",
"host": "Music Togetherをホスト",
"join": "Music Togetherに参加",
"permission": {
"all": "ゲストの再生リストとプレーヤーを制御を許可",
"host-only": "ホストのみがプレイリストとプレーヤーを制御",
"playlist": "ゲストによるプレイリストの制御を許可する"
},
"set-permission": "制御権限を変更",
"status": {
"disconnected": "切断されました",
"guest": "ゲストとして接続しました",
"host": "ホストとして接続されています"
}
},
"name": "Music Together [ベータ]",
"toast": {
"add-song-failed": "曲の追加に失敗しました",
"closed": "Music Together が閉じられました",
"disconnected": "Music Together が切断されました",
"host-failed": "Music Together のホストに失敗しました",
"id-copied": "ホストIDがクリップボードにコピーされました",
"id-copy-failed": "ホストIDをクリップボードにコピー出来ませんでした",
"join-failed": "Music Together に参加出来ませんでした",
"joined": "Music Together に参加しました",
"permission-changed": "Music Togetherの権限が \"{{permission}}\" に変更されました",
"remove-song-failed": "曲の削除に失敗しました",
"user-connected": "{{name}} がMusic Togetherに参加しました",
"user-disconnected": "{{name}} がMusic Togetherを退出しました"
}
},
"navigation": {
"description": "ブラウザの戻る・進むボタンのようにUIからコントロールできるボタン",
"name": "ナビゲーション"
@ -518,6 +659,39 @@
"description": "ビデオオーバーレイのボタンを使用してビデオ品質を変更できるようにします",
"name": "ビデオ品質チェンジャー"
},
"scrobbler": {
"description": "スクロブリング対応を追加しますlast.fm、Listenbrainzなど",
"dialog": {
"lastfm": {
"auth-failed": {
"message": "Last.fm の認証に失敗しました\n次の再起動までポップアップは非表示になります。",
"title": "認証に失敗"
}
}
},
"menu": {
"lastfm": {
"api-settings": "Last.fm API 設定"
},
"listenbrainz": {
"token": "ListenBrainzユーザートークンを入力してください"
},
"scrobble-other-media": "他のメディアをScrobbleする"
},
"name": "スクロブラー",
"prompt": {
"lastfm": {
"api-key": "Last.fm APIキー",
"api-secret": "Last.fm API シークレット"
},
"listenbrainz": {
"token": {
"label": "ListenBrainzのユーザートークンを入力してください:",
"title": "ListenBrainzトークン"
}
}
}
},
"shortcuts": {
"description": "再生用のグローバル ホットキー (再生/一時停止/次/前) の設定、メディア キーをオーバーライドしてメディア OSD を無効にする、Ctrl/CMD + F による検索を有効にする、 メディアキーの Linux mpris サポートを有効にする、 上級ユーザー向けのカスタム ホットキー を可能にします",
"menu": {
@ -549,9 +723,62 @@
"description": "イントロ/アウトロなどの音楽以外の部分や、曲が再生されていないミュージック ビデオの部分を自動的にスキップします",
"name": "SponsorBlock"
},
"synced-lyrics": {
"description": "LRClibのようなプロバイダを使って、楽曲に同期した歌詞を使用する。",
"errors": {
"fetch": "⚠️ - 歌詞の取得中にエラーが発生しました。 後でもう一度お試しください。",
"not-found": "⚠️ - この曲の歌詞は見つかりませんでした。"
},
"menu": {
"default-text-string": {
"label": "デフォルトの歌詞間の文字",
"tooltip": "歌詞と歌詞の間に使用するデフォルトの文字を選択してください"
},
"line-effect": {
"label": "歌詞表示のエフェクト",
"submenu": {
"focus": {
"label": "フォーカス",
"tooltip": "現在の行だけを白くする"
},
"offset": {
"label": "オフセット",
"tooltip": "オフセットを現在の行の右側にする"
},
"scale": {
"label": "サイズ",
"tooltip": "現在の行のサイズ変更をする"
}
},
"tooltip": "現在の行に適用するエフェクトを選択"
},
"precise-timing": {
"label": "歌詞を完璧に同期させる",
"tooltip": "次の行の表示をミリ秒単位で計算する(パフォーマンスに若干の影響を与える可能性があります)"
},
"show-lyrics-even-if-inexact": {
"label": "歌詞が不正確でも表示する",
"tooltip": "曲が見つからなかった場合、プラグインは別の検索クエリで再試行します。\nただし、再試行の結果は正確でない可能性があります。"
},
"show-time-codes": {
"label": "タイムコードを表示",
"tooltip": "歌詞の横にタイムコードを表示"
}
},
"name": "歌詞を同期",
"refetch-btn": {
"fetching": "取得中...",
"normal": "歌詞を再取得"
},
"warnings": {
"duration-mismatch": "⚠️ - タイミングが合わないため、歌詞が同期されていない可能性があります。",
"inexact": "⚠️ - この曲の歌詞は正確ではないかもしれません",
"instrumental": "⚠️ - これは演奏のみの曲です"
}
},
"taskbar-mediacontrol": {
"description": "Windowsタスクバーから再生をコントロール",
"name": "Taskbar Media Control"
"name": "タスクバーメディアコントロール"
},
"touchbar": {
"description": "masOSユーザー向けにTouchBarウィジェットを追加",

View File

@ -158,6 +158,14 @@
},
"remove-upgrade-button": "업그레이드 버튼 제거",
"theme": {
"dialog": {
"button": {
"cancel": "취소",
"remove": "제거"
},
"remove-theme": "사용자 정의 테마를 제거하시겠습니까?",
"remove-theme-message": "사용자 정의 테마가 제거됩니다. 계속하시겠습니까?"
},
"label": "테마",
"submenu": {
"import-css-file": "사용자 정의 CSS 파일 가져오기",
@ -199,6 +207,10 @@
}
},
"plugins": {
"ad-speedup": {
"description": "광고가 재생될 때, 오디오가 음소거되고 재생 속도가 16배로 설정됩니다",
"name": "광고 배속"
},
"adblocker": {
"description": "모든 광고와 트래커를 즉시 차단합니다",
"menu": {
@ -207,15 +219,23 @@
"name": "광고 차단기"
},
"album-actions": {
"description": "좋아요, 싫어요 버튼을 추가하고, 결과를 재생 목록 또는 앨범의 모든 노래에 적용합니다.",
"description": "좋아요, 싫어요 버튼을 추가하고, 결과를 재생 목록 또는 앨범의 모든 노래에 적용합니다",
"name": "앨범 액션"
},
"album-color-theme": {
"description": "앨범 색상 팔레트를 기반으로 동적 테마 및 시각 효과를 적용합니다",
"menu": {
"color-mix-ratio": {
"label": "색상 혼합 비율",
"submenu": {
"percent": "{{ratio}}%"
}
}
},
"name": "앨범 컬러 기반 테마"
},
"ambient-mode": {
"description": "영상의 간접 조명을 화면 배경에 투사합니다.",
"description": "영상의 간접 조명을 화면 배경에 투사합니다",
"menu": {
"blur-amount": {
"label": "흐림 효과 강도",
@ -259,6 +279,56 @@
},
"name": "앰비언트 모드"
},
"amuse": {
"description": "6K Labs Amuse의 'now playing' 위젯에 YouTube Music 지원 추가",
"name": "Amuse",
"response": {
"query": "Amuse API 서버가 실행 중입니다. GET /query로 노래 정보를 가져오세요."
}
},
"api-server": {
"description": "플레이어를 제어하기 위한 API 서버를 추가합니다",
"dialog": {
"request": {
"buttons": {
"allow": "허용",
"deny": "거부"
},
"message": "{{ID}} ({{origin}})이(가) API에 액세스하도록 허용하시겠습니까?",
"title": "API 권한 요청"
}
},
"menu": {
"auth-strategy": {
"label": "인증 정책",
"submenu": {
"auth-at-first": {
"label": "첫 번째 요청 시 인증"
},
"none": {
"label": "인증 없음"
}
}
},
"hostname": {
"label": "호스트 명"
},
"port": {
"label": "포트"
}
},
"name": "API 서버 [베타]",
"prompt": {
"hostname": {
"label": "API 서버가 사용할 호스트 명(예: 0.0.0.0)을 입력하세요:",
"title": "호스트 명"
},
"port": {
"label": "API 서버가 사용할 포트를 입력하세요:",
"title": "포트"
}
}
},
"audio-compressor": {
"description": "오디오에 컴프레서를 적용합니다 (신호에서 가장 시끄러운 부분의 음량을 낮추고 가장 조용한 부분의 음량을 높임)",
"name": "오디오 컴프레서"
@ -394,6 +464,21 @@
"description": "UI에서 직접 MP3/소스 오디오를 다운로드하세요",
"menu": {
"choose-download-folder": "다운로드 폴더 선택",
"download-finish-settings": {
"label": "노래가 끝날 때 자동 다운로드",
"prompt": {
"last-percent": "x 퍼센트 이후에",
"last-seconds": "마지막 x 초에",
"title": "다운로드 시기 구성"
},
"submenu": {
"advanced": "고급",
"enabled": "활성화",
"mode": "시간 모드",
"percent": "퍼센트 기준",
"seconds": "초 기준"
}
},
"download-playlist": "재생목록 다운로드",
"presets": "프리셋",
"skip-existing": "이미 존재하는 파일 넘기기"
@ -406,6 +491,18 @@
"button": "다운로드"
}
},
"equalizer": {
"description": "플레이어에 이퀄라이저를 추가합니다",
"menu": {
"presets": {
"label": "프리셋",
"list": {
"bass-booster": "베이스 부스터"
}
}
},
"name": "이퀄라이저"
},
"exponential-volume": {
"description": "음량 슬라이더를 지수적으로 만들어 더 낮은 음량을 쉽게 선택할 수 있도록 합니다.",
"name": "지수 음량"
@ -417,10 +514,6 @@
},
"name": "인앱 메뉴"
},
"last-fm": {
"description": "Last.fm에 대한 스크러블 지원을 추가합니다",
"name": "Last.fm"
},
"lumiastream": {
"description": "Lumia Stream 지원을 추가합니다",
"name": "Lumia Stream [베타]"
@ -573,8 +666,41 @@
"description": "영상 오버레이의 버튼으로 영상 품질을 변경할 수 있습니다",
"name": "영상 품질 체인저"
},
"scrobbler": {
"description": "스크로블링 지원을 추가합니다 (예: last.fm, Listenbrainz)",
"dialog": {
"lastfm": {
"auth-failed": {
"message": "Last.fm 인증에 실패했습니다\n다음에 다시 시작할 때까지 팝업을 숨깁니다.",
"title": "인증 실패"
}
}
},
"menu": {
"lastfm": {
"api-settings": "Last.fm API 설정"
},
"listenbrainz": {
"token": "ListenBrainz 유저 토큰 입력"
},
"scrobble-other-media": "다른 미디어 스크로블하기"
},
"name": "스크로블러",
"prompt": {
"lastfm": {
"api-key": "Last.fm API 키",
"api-secret": "Last.fm API 비밀 키"
},
"listenbrainz": {
"token": {
"label": "ListenBrainz 유저 토큰을 입력하세요:",
"title": "ListenBrainz 토큰"
}
}
}
},
"shortcuts": {
"description": "재생을 위한 전역 단축키 설정 허용 (재생/일시 정지/다음/이전), 미디어 키를 재정의하여 미디어 OSD 비활성화, Ctrl/CMD + F 검색을 활성화, 미디어키 지원을 위해 리눅스 MPRIS 지원 활성화, 고급 사용자를 위한 사용자 지정 단축키 지원 추가.",
"description": "재생을 위한 전역 단축키 설정 허용 (재생/일시 정지/다음/이전), 미디어 키를 재정의하여 미디어 OSD 비활성화, Ctrl/CMD + F 검색을 활성화, 미디어키 지원을 위해 리눅스 MPRIS 지원 활성화, 고급 사용자를 위한 사용자 지정 단축키 지원 추가",
"menu": {
"override-media-keys": "미디어 키 재정의",
"set-keybinds": "전역 노래 제어 설정"
@ -604,6 +730,63 @@
"description": "인트로/아웃트로와 같은 음악이 아닌 부분이나, 노래가 재생되지 않는 뮤직 비디오의 일부를 자동으로 건너뜁니다",
"name": "SponsorBlock"
},
"synced-lyrics": {
"description": "LRClib등의 가사 제공자에서 싱크 가사를 불러옵니다.",
"errors": {
"fetch": "⚠️\t가사를 불러오는 동안 오류가 발생했습니다.\n\t나중에 다시 시도해 주세요.",
"not-found": "⚠️ 이 노래의 가사를 찾을 수 없습니다."
},
"menu": {
"default-text-string": {
"label": "가사 사이에 표시할 문자",
"tooltip": "가사 사이의 빈 공간에 사용할 문자를 선택합니다"
},
"line-effect": {
"label": "줄 표시 효과",
"submenu": {
"fancy": {
"label": "예쁘게",
"tooltip": "유튜브 뮤직 앱처럼 커다란 효과를 현재 라인에 사용합니다"
},
"focus": {
"label": "포커스",
"tooltip": "현재 줄만 하얀색으로 표시"
},
"offset": {
"label": "오프셋",
"tooltip": "현재 줄의 오른쪽에 오프셋 적용"
},
"scale": {
"label": "스케일",
"tooltip": "현재 줄에 스케일 적용"
}
},
"tooltip": "현재 줄에 적용할 효과를 선택합니다"
},
"precise-timing": {
"label": "가사를 최대한 정교하게 동기화",
"tooltip": "다음 줄의 표시를 밀리초 단위로 계산합니다 (성능에 약간의 영향을 미칠 수 있음)"
},
"show-lyrics-even-if-inexact": {
"label": "가사가 정확하지 않더라도 표시",
"tooltip": "노래를 찾을 수 없는 경우, 플러그인이 다른 검색어로 다시 검색합니다.\n두번째 검색 결과는 정확하지 않을 수 있습니다."
},
"show-time-codes": {
"label": "시간 코드 표시",
"tooltip": "가사 옆에 시간 코드 표시"
}
},
"name": "싱크 가사",
"refetch-btn": {
"fetching": "가져오는 중...",
"normal": "가사 다시 가져오기"
},
"warnings": {
"duration-mismatch": "⚠️ - 곡 길이 불일치로 인해 가사가 일치하지 않을 수 있습니다.",
"inexact": "⚠️ - 이 노래의 가사는 정확하지 않을 수 있습니다",
"instrumental": "⚠️ - 연주곡입니다"
}
},
"taskbar-mediacontrol": {
"description": "Windows 작업 표시줄에서 재생을 제어하세요",
"name": "작업표시줄 미디어 컨트롤"

View File

@ -158,6 +158,14 @@
},
"remove-upgrade-button": "Nerodyti \"Patobulinti\" mygtuko",
"theme": {
"dialog": {
"button": {
"cancel": "Atšaukti",
"remove": "Pašalinti"
},
"remove-theme": "Ar tikrai norite pašalinti pasirinktinę temą?",
"remove-theme-message": "Šis veiksmas pašalins pasirinktinę temą"
},
"label": "Tema",
"submenu": {
"import-css-file": "Įkelti pasirinktinį CSS failą",
@ -170,7 +178,8 @@
},
"plugins": {
"enabled": "Įjungta",
"label": "Įskiepiai"
"label": "Įskiepiai",
"new": "NAUJIENA"
},
"view": {
"label": "Vaizdas",
@ -190,7 +199,11 @@
"previous": "Ankstesnis",
"quit": "Išeiti",
"restart": "Perkrauti programą",
"show": "Rodyti langą"
"show": "Rodyti langą",
"tooltip": {
"default": "Youtube Music",
"with-song-info": "YouTube Music: {{artist}} - {{title}}"
}
}
},
"plugins": {
@ -201,8 +214,19 @@
},
"name": "Reklamų blokuotojas"
},
"album-actions": {
"name": "Albumo Veiksmai"
},
"album-color-theme": {
"description": "Pritaiko dinamišką temą ir vizualinius efektus pagal albumo spalvų paletę",
"menu": {
"color-mix-ratio": {
"label": "Spalvų maišymo santykis",
"submenu": {
"percent": "{{ratio}}%"
}
}
},
"name": "Albumo Spalvų Tema"
},
"ambient-mode": {
@ -408,10 +432,6 @@
},
"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]"
@ -426,6 +446,20 @@
"fetched-lyrics": "Gauti žodžiai iš „Genius“"
}
},
"music-together": {
"description": "Pasidalinti grojaraščiu su kitais. Kai vedėjas paleis dainą, visi kiti girdės tą pačią dainą",
"dialog": {
"enter-host": "Įveskite vedėjo ID"
},
"internal": {
"save": "Išsaugoti",
"track-source": "Dainos kilmė",
"unknown-user": "Nežinomas Naudotojas"
},
"menu": {
"click-to-copy-id": "Kopijuoti Vedėjo ID"
}
},
"navigation": {
"description": "Kitas/Ankstenis navigacijos rodyklės tiesiogiai integruotos sąsajoje, kaip tavo mėgstamiausioje naršyklėje",
"name": "Navigacija"

203
src/i18n/resources/ms.json Normal file
View File

@ -0,0 +1,203 @@
{
"common": {
"console": {
"plugins": {
"execute-failed": "Pelaksaan plugin gagal {{pluginName}}::{{contextName}}",
"executed-at-ms": "Plugin {{pluginName}}::{{contextName}} dilaksanakan pada {{ms}}ms",
"initialize-failed": "Gagal untuk memulakan plugin \"{{pluginName}}\"",
"load-all": "Memuatkan semua plugin",
"loaded": "Plugin \"{{pluginName}}\" dimuatkan",
"unload-failed": "Gagal untuk memunggah plugin \"{{pluginName}}\"",
"unloaded": "Plugin \"{{pluginName}}\" dipunggahkan"
}
}
},
"language": {
"code": "ms",
"local-name": "Bahasa Malaysia",
"name": "Malay"
},
"main": {
"console": {
"did-finish-load": {
"dev-tools": "Selesai memuat. DevTools dibuka"
},
"i18n": {
"loaded": "i18n dimuatkan"
},
"second-instance": {
"receive-command": "Menerima arahan atas protokol: \"{{command}}\""
},
"theme": {
"css-file-not-found": "Fail CSS \"{{cssFile}}\" tidak wujud, mengabaikan"
},
"when-ready": {
"clearing-cache-after-20s": "Membersihkan cache aplikasi"
}
},
"dialog": {
"hide-menu-enabled": {
"detail": "Menu telah disembunyikan, guna 'Alt' untuk menunjukkannya (atau 'Escape' jika menggunakan In-App Menu)"
},
"need-to-restart": {
"buttons": {
"later": "Nanti",
"restart-now": "Restart Sekarang"
},
"message": "\"{{pluginName}}\" perlu dimulakan semula",
"title": "Mulakan Semula Diperlukan"
},
"unresponsive": {
"buttons": {
"quit": "Berhenti",
"relaunch": "Lancar Semula",
"wait": "Tunggu"
},
"detail": "Kami memohon maaf atas kesulitan! sila pilih apa yang perlu dilakukan:",
"message": "Aplikasi Tidak Responsif",
"title": "Window Tidak Responsif"
},
"update-available": {
"buttons": {
"download": "Muat Turun",
"ok": "OK"
},
"detail": "Versi baharu kini tersedia dan boleh dimuat turun di {{downloadLink}}"
}
},
"menu": {
"about": "Mengenai",
"navigation": {
"label": "Navigasi",
"submenu": {
"copy-current-url": "Salin URL semasa",
"go-back": "Belakang",
"go-forward": "Depan",
"quit": "Keluar"
}
},
"options": {
"label": "Tetapan",
"submenu": {
"advanced-options": {
"label": "Tetapan Lanjutan",
"submenu": {
"set-proxy": {
"prompt": {
"placeholder": "Contoh: SOCKS5://127.0.0.1:9999",
"title": "Set proksi"
}
}
}
},
"always-on-top": "Sentiasa di atas",
"auto-update": "Kemas Kini Automatik",
"hide-menu": {
"dialog": {
"message": "Menu akan disembunyikan pada pelancaran seterusnya, gunakan [Alt] untuk menunjukkannya (atau backtick [`] jika menggunakan dalam aplikasi-menu)"
}
},
"language": {
"dialog": {
"message": "Bahasa akan ditukar selepas dimulakan semula",
"title": "Bahasa Berubah"
},
"label": "Bahasa",
"submenu": {
"to-help-translate": "Ingin membantu menterjemah? Klik di sini"
}
},
"resume-on-start": "Mulakan semula lagu terakhir apabila aplikasi dimulakan",
"start-at-login": "Mulakan semasa log masuk",
"starting-page": {
"label": "Halaman Permulaan"
},
"tray": {
"submenu": {
"play-pause-on-click": "Main / Hentikan pada klik"
}
},
"visual-tweaks": {
"label": "Pembaikan Visual",
"submenu": {
"like-buttons": {
"default": "Lalai",
"hide": "Sembunyi"
},
"theme": {
"dialog": {
"button": {
"cancel": "Batalkan",
"remove": "Padam"
}
},
"label": "Tema"
}
}
}
}
}
},
"tray": {
"next": "Seterusnya",
"play-pause": "Main / Jeda",
"previous": "Sebelumnya",
"quit": "Keluar",
"restart": "Mulakan Semula Aplikasi"
}
},
"plugins": {
"ambient-mode": {
"menu": {
"quality": {
"label": "Kualiti"
},
"size": {
"label": "Saiz"
}
}
},
"captions-selector": {
"prompt": {
"selector": {
"title": "Pilih bahasa kapsyen"
}
}
},
"synced-lyrics": {
"menu": {
"show-lyrics-even-if-inexact": {
"label": "Tunjukkan lirik walaupun tidak tepat",
"tooltip": "Jika lagu tidak ditemui, plugin cuba lagi dengan pertanyaan carian yang berbeza. \nHasil dari percubaan kedua mungkin tidak tepat."
},
"show-time-codes": {
"tooltip": "Tunjukkan kod masa di sebelah lirik"
}
}
},
"taskbar-mediacontrol": {
"description": "Kawalan main balik dari bar tugas Windows anda",
"name": "Kawalan Media Bar Tugas"
},
"video-toggle": {
"menu": {
"align": {
"submenu": {
"left": "Kiri",
"middle": "Tengah",
"right": "Kanan"
}
},
"force-hide": "Alih Keluar Tab Video",
"mode": {
"submenu": {
"disabled": "Tidak Aktif"
}
}
},
"templates": {
"button": "Lagu"
}
}
}
}

View File

@ -36,15 +36,15 @@
"details": "Svarer ikke\n{{error}}"
},
"when-ready": {
"clearing-cache-after-20s": "Tømmer programhurtiglager"
"clearing-cache-after-20s": "Tømmer programhurtigbuffer"
},
"window": {
"tried-to-render-offscreen": "Prøvde å tegne vindu utenfor skjermen. Størrelse={{windowSize}}, skjermstørrelse={{displaySize}}, posisjon={{position}}"
"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).",
"detail": "Menyen er skjult, bruk 'Alt' for å vise den (eller 'Escape' for å bruke menyen i programmet)",
"message": "Meny skjult",
"title": "Meny vist"
},
@ -85,7 +85,7 @@
"submenu": {
"copy-current-url": "Kopier nåværende nettadresse",
"go-back": "Tilbake",
"go-forward": "Forover",
"go-forward": "Framover",
"quit": "Avslutt",
"restart": "Programomstart"
}
@ -96,7 +96,7 @@
"advanced-options": {
"label": "Avanserte alternativer",
"submenu": {
"auto-reset-app-cache": "Tilbakestill programhurtiglager når programmet startes",
"auto-reset-app-cache": "Tilbakestill programhurtigbuffer når programmet startes",
"disable-hardware-acceleration": "Skru av maskinvareakselerasjon",
"edit-config-json": "Rediger config.json",
"override-user-agent": "Overstyr brukeragent",
@ -406,10 +406,6 @@
},
"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]"

698
src/i18n/resources/ne.json Normal file
View File

@ -0,0 +1,698 @@
{
"common": {
"console": {
"plugins": {
"execute-failed": "प्लगइन {{pluginName}}::{{contextName}} को कार्यान्वयन गर्न असफल भयो",
"executed-at-ms": "प्लगइन {{pluginName}}::{{contextName}} {{ms}} मिलिसेकेण्डमा कार्यान्वित भयो",
"initialize-failed": "प्लगइन \"{{pluginName}}\" आरम्भ गर्न मिलेन",
"load-all": "सबै प्लगइनहरू लोड हुँदैछ",
"load-failed": "प्लगइन \"{{pluginName}}\" लोड गर्न मिलेन",
"loaded": "प्लगइन \"{{pluginName}}\" लोड भयो",
"unload-failed": "प्लगइन \"{{pluginName}}\" अनलोड गर्न मिलेन",
"unloaded": "प्लगइन \"{{pluginName}}\" अनलोड भयो"
}
}
},
"language": {
"code": "ne",
"local-name": "नेपाली",
"name": "Nepali"
},
"main": {
"console": {
"did-finish-load": {
"dev-tools": "लोडिंग समाप्त भयो। डेभटुल्स खोलियो"
},
"i18n": {
"loaded": "i18n लोड भयो"
},
"second-instance": {
"receive-command": "प्रोटोकल मार्फत कमान प्राप्त गरियो: \"{{command}}\""
},
"theme": {
"css-file-not-found": "CSS फाइल \"{{cssFile}}\" मौजूद छैन, अनदेखी गर्दै छ"
},
"unresponsive": {
"details": "अनाक्रियतामा त्रुटि!\n{{error}}"
},
"when-ready": {
"clearing-cache-after-20s": "एप क्यास खाली गर्दै"
},
"window": {
"tried-to-render-offscreen": "Windowले स्क्रीन बाहिर रेन्डर गर्न कोशिस गर्‍यो, windowSize={{windowSize}}, displaySize={{displaySize}}, position={{position}}"
}
},
"dialog": {
"hide-menu-enabled": {
"detail": "मेनु लुकिएको छ, यसलाई देखाउन 'Alt' प्रयोग गर्नुहोस् (वा 'Escape' यदि इन-एप मेनु प्रयोग गर्नुहोस्)",
"message": "हाइड मेनु सक्षम गरिएको छ",
"title": "हाइड मेनु इनेबल गरियो"
},
"need-to-restart": {
"buttons": {
"later": "पछि",
"restart-now": "अहिले पुन: सुरु गर्नुहोस्"
},
"detail": "{{pluginName}}\" प्लगइनले प्रभाव समेत गर्नका लागि पुन: सुरु गर्नुपर्दछ",
"message": "{{pluginName}}\" पुनः सुरु गर्नुपर्छ",
"title": "पुनः सुरु गर्नुपर्छ"
},
"unresponsive": {
"buttons": {
"quit": "बन्द गर्नुहोस्",
"relaunch": "पुन: सुरु गर्नुहोस्",
"wait": "प्रतीक्षा गर्नुहोस्"
},
"detail": "हामी असुविधाका लागि क्षमा गर्दछौं! कृपया के गर्नुहोस् छन् छान्नुहोस्:",
"message": "अनुप्रयोग असार्थक छ",
"title": "विन्डो संपर्क नाघेको छ"
},
"update-available": {
"buttons": {
"disable": "अपडेटहरू निष्क्रिय गर्नुहोस्",
"download": "डाउनलोड गर्नुहोस्",
"ok": "ठिक छ"
},
"detail": "नयाँ संस्करण उपलब्ध छ र यसलाई {{downloadLink}} बाट डाउनलोड गर्न सकिन्छ",
"message": "नयाँ संस्करण उपलब्ध छ",
"title": "अपडेट उपलब्ध छ"
}
},
"menu": {
"about": "बारेमा",
"navigation": {
"label": "नेभिगेसन",
"submenu": {
"copy-current-url": "हालको URL प्रतिलिपि गर्नुहोस्",
"go-back": "पछाडि जानुहोस्",
"go-forward": "अघि जानुहोस्",
"quit": "बाहिर निस्कनुहोस्",
"restart": "अनुप्रयोग पुनः सुरु गर्नुहोस्"
}
},
"options": {
"label": "विकल्पहरू",
"submenu": {
"advanced-options": {
"label": "उन्नत विकल्पहरू",
"submenu": {
"auto-reset-app-cache": "एप सुरु हुँदा एप क्यास रिसेट गर्नुहोस्",
"disable-hardware-acceleration": "हार्डवेयर तेजीगरी निष्क्रिय गर्नुहोस्",
"edit-config-json": "config.json सम्पादन गर्नुहोस्",
"override-user-agent": "प्रयोगकर्ता-एजेन्ट अधिलेखन गर्नुहोस्",
"restart-on-config-changes": "कन्फिगरेसन परिवर्तनमा पुनः सुरु गर्नुहोस्",
"set-proxy": {
"label": "प्रोक्सी सेट गर्नुहोस्",
"prompt": {
"label": "प्रोक्सी ठेगाना प्रविष्टि: (निष्क्रिय गर्नका लागि खाली छोड्नुहोस्)",
"placeholder": "उदाहरण: SOCKS5://127.0.0.1:9999",
"title": "प्रोक्सी सेट गर्नुहोस्"
}
},
"toggle-dev-tools": "डेभटुल्स परिस्थिति परिवर्तन गर्नुहोस्"
}
},
"always-on-top": "सधैं माथिल्लोमा",
"auto-update": "स्वत: अपडेट",
"hide-menu": {
"dialog": {
"message": "मेनु अर्को लन्चमा लुकिनेछ, यसलाई देखाउनका लागि [Alt] प्रयोग गर्नुहोस् (वा इन-एप-मेनु प्रयोग गर्दा backtick [`])प्रयोग गर्नुहोस्",
"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": "ट्रे(tray)",
"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": {
"dialog": {
"button": {
"cancel": "रद्द गर्नुहोस्",
"remove": "हटाउनुहोस्"
},
"remove-theme": "के तपाईँ निश्चित हुनुहुन्छ कि तपाईँ कस्टम थिम हटाउन चाहनुहुन्छ?",
"remove-theme-message": "यसले कस्टम थिम हटाउनेछ"
},
"label": "थिम",
"submenu": {
"import-css-file": "कस्टम CSS फाइल आयात गर्नुहोस्",
"no-theme": "कुनै थिम छैन"
}
}
}
}
}
},
"plugins": {
"enabled": "सक्षम गरियो",
"label": "प्लगइनहरू",
"new": "NEW"
},
"view": {
"label": "हेर्नुहोस्",
"submenu": {
"force-reload": "फोर्स रिलोड",
"reload": "पुनः लोड गर्नुहोस्",
"reset-zoom": "वास्तविक आकार",
"toggle-fullscreen": "पूर्ण स्क्रिन टगल गर्नुहोस्",
"zoom-in": "जुम इन गर्नुहोस्",
"zoom-out": "जुम आउट गर्नुहोस्"
}
}
},
"tray": {
"next": "अर्को",
"play-pause": "खेल्नुहोस्/रोक्नुहोस्",
"previous": "अघिल्ला",
"quit": "बाहिर निस्कनुहोस्",
"restart": "एप पुनः सुरु गर्नुहोस्",
"show": "विन्डो देखाउनुहोस्",
"tooltip": {
"default": "युट्युब मिउजिक",
"with-song-info": "युट्युब मिउजिक:{{artist}}-{{title}}"
}
}
},
"plugins": {
"adblocker": {
"description": "सबै विज्ञापन र ट्र्याकइंगहरू ब्लक गर्नुहोस्",
"menu": {
"blocker": "अवरोधक"
},
"name": "विज्ञापन अवरोधक"
},
"album-actions": {
"description": "प्लेलिस्ट वा एल्बममा सबै गीतहरूमा यो लागू गर्न नचाहेको, मन नपरोस्, मनपर्यो, र विपरीत बटनहरू थप्दछ",
"name": "एल्बम कार्यहरू"
},
"album-color-theme": {
"description": "एल्बम रङ प्यालेटमा आधारित गतिशील विषयवस्तु र दृश्य प्रभावहरू लागू गर्दछ",
"menu": {
"color-mix-ratio": {
"label": "रङ मिश्रण अनुपात",
"submenu": {
"percent": "{{ratio}}%"
}
}
},
"name": "एल्बम रङ विषयवस्तु"
},
"ambient-mode": {
"description": "तपाईँको स्क्रिनको पृष्ठभूमिमा भिडियोबाट कोमल रङहरू कास्ट गरेर प्रकाश प्रभाव लागू गर्दछ",
"menu": {
"blur-amount": {
"label": "ब्लर रकम",
"submenu": {
"pixels": "{{blurAmount}} पिक्सेलमा"
}
},
"buffer": {
"label": "बफर",
"submenu": {
"buffer": "{{buffer}}"
}
},
"opacity": {
"label": "अपारदर्शिता",
"submenu": {
"percent": "{{opacity}}%"
}
},
"quality": {
"label": "गुणस्तर",
"submenu": {
"pixels": "{{quality}} पिक्सेलमा"
}
},
"size": {
"label": "आकार",
"submenu": {
"percent": "{{size}}%"
}
},
"smoothness-transition": {
"label": "सुगमता संक्रमण",
"submenu": {
"during": "{{interpolationTime}} सेकेन्ड को समयमा"
}
},
"use-fullscreen": {
"label": "फुलस्क्रिन प्रयोग गर्दै"
}
},
"name": "परिवेश मोड"
},
"audio-compressor": {
"description": "अडियोमा कम्प्रेसन लागू गर्नुहोस् (सङ्केतको सबैभन्दा चर्को भागहरूको भोल्युम कम गर्दछ र नरम भागहरूको भोल्युम बढाउँछ)",
"name": "अडियो कम्प्रेसर"
},
"blur-nav-bar": {
"description": "नेभिगेसन बारलाई पारदर्शी र धुवाँलो बनाउँछ",
"name": "ब्लर नेभिगेसन बार"
},
"bypass-age-restrictions": {
"description": "युट्युबको उमेर प्रमाणिकरणलाई बाइपास गर्नुहोस्",
"name": "उमेरका प्रतिबन्धहरू बाइपास गर्नुहोस्"
},
"captions-selector": {
"description": "युट्युब सङ्गीत अडियो ट्र्याकहरूका लागि क्याप्सन चयनकर्ता",
"menu": {
"autoload": "स्वचालित रूपमा अन्तिम प्रयोग गरिएको क्याप्सन चयन गर्नुहोस्",
"disable-captions": "पूर्वनिर्धारित रूपमा कुनै क्याप्सनहरू छैनन्"
},
"name": "शीर्षक चयनकर्ता",
"prompt": {
"selector": {
"label": "हालको शीर्षक भाषाः {{language}}",
"none": "केही छैन",
"title": "क्याप्सन भाषा चयन गर्नुहोस्"
}
},
"templates": {
"title": "क्याप्सन चयनकर्ता खोल्नुहोस्"
}
},
"compact-sidebar": {
"description": "सँधै साइडबारलाई कम्प्याक्ट मोडमा सेट गर्नुहोस्",
"name": "कम्प्याक्ट साइडबार"
},
"crossfade": {
"description": "गीतहरू बिच क्रसफेड",
"menu": {
"advanced": "उन्नत"
},
"name": "क्रसफेड [बीटा]",
"prompt": {
"options": {
"multi-input": {
"fade-in-duration": "फेड इन समय (ms)",
"fade-out-duration": "फेड आउट समय (ms)",
"fade-scaling": {
"label": "फेड स्केलिङ",
"linear": "रैखिक",
"logarithmic": "लघुगणक"
},
"seconds-before-end": "अन्त्य हुनुभन्दा अघि क्रसफेड सेकेन्ड"
},
"title": "क्रसफेड विकल्पहरू"
}
}
},
"disable-autoplay": {
"description": "\"रोकिएको\" स्मोथिथिमा गीत सुरु गराउँछ",
"menu": {
"apply-once": "स्टार्टअपमा मात्र लागु हुन्छ"
},
"name": "स्वतः खेल निष्क्रिय गर्नुहोस्"
},
"discord": {
"backend": {
"already-connected": "सक्रिय जडानसँग जडान गर्ने प्रयास गरियो",
"connected": "डिस्कर्डमा जोडियो",
"disconnected": "डिस्कोर्डबाट डिसकनेक्ट गरियो"
},
"description": "Rich Presence प्रयोग गरेर साथीहरुलाइ के सुन्दैछु देखाउने",
"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": "डिसकार्ड रिच प्रीसेंस",
"prompt": {
"set-inactivity-timeout": {
"label": "इनएक्टिभिटी टाइमआउट सेकन्डमा लेख्नुहोस्:",
"title": "इनएक्टिभिटी टाइमआउट राख्नुहोस्"
}
}
},
"downloader": {
"backend": {
"dialog": {
"error": {
"buttons": {
"ok": "ओके"
},
"message": "अह:! माफ गर्नुहोस्, डाउनलोड सफलहुन सकेन…",
"title": "डाउनलोडमा त्रुटि भयो!"
},
"start-download-playlist": {
"buttons": {
"ok": "ओके"
},
"detail": "({{playlistSize}}गाना)",
"message": "प्लेलिस्ट {{playlistTitle}} डाउनलोड हुदै छ",
"title": "डाउनलोड सुरुभयो"
}
},
"feedback": {
"conversion-progress": "रूपान्तरणः {{percent}}%",
"converting": "रूपान्तरण हुदैछ…",
"done": "गरियो: {{filePath}}",
"download-info": "{{artist}}को - {{title}}{{videoId}}डाउनलोड हुदैछ",
"download-progress": "डाउनलोड: {{percent}}%",
"downloading": "डाउनलोड हुदैछ…",
"downloading-counter": "{{current}}/{{total}} डाउनलोड गरिदै…",
"downloading-playlist": "प्लेलिस्ट \"{{playlistTitle}}\" -{{playlistSize}} गाना {{playlistId}} डाउनलोड गरिदैछ",
"error-while-downloading": "\"{{author}}\" - {{title}}\":{{error}} डाउनलोडमा समस्या आयो",
"folder-already-exists": "{{playlistFolder}} नाम गरेको फोल्डर अघाडी देखि छ",
"getting-playlist-info": "प्लेलिस्टको डाटा हासिल गरिदै छ…",
"loading": "लोडिंग…",
"playlist-has-only-one-song": "प्लेलिस्टमा एउता मात्रै गानाछ, तेस्लाई डाइरेक्ट डाउनलोड गर्नुहोस",
"playlist-id-not-found": "प्लेलिस्ट ID भेटियेन",
"playlist-is-empty": "प्लेलिस्ट खाली छ",
"playlist-is-mix-or-private": "प्लेलिस्ट जानकारी प्राप्त गर्न त्रुटिः निश्चित गर्नुहोस् कि यो निजी वा \"तपाईँका लागि मिश्रित\" प्लेलिस्ट होइन\n\n{{error}}",
"preparing-file": "फाइल तयार गरिदै छ…",
"saving": "सेव गरिदै…",
"trying-to-get-playlist-id": "प्लेलिस्ट आईडी: {{playlistId}} प्राप्त गर्ने प्रयास",
"video-id-not-found": "भिडियो फेला परेन",
"writing-id3": "ID3 ट्यागहरू लेखीदै…"
}
},
"description": "इन्टरफेसबाट सिधै 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": "इन-एप मेनु"
},
"lumiastream": {
"description": "लुमिया स्ट्रिम सपोर्ट थप्दछ",
"name": "लुमिया स्ट्रिम [बिटा]"
},
"lyrics-genius": {
"description": "धेरैजसो गीतहरूका लागि लिरिक्स थप्दछ",
"menu": {
"romanized-lyrics": "रोमनाइज्ड लिरिक्स"
},
"name": "लिरिक्स जिनियस",
"renderer": {
"fetched-lyrics": "लिरिक्स जिनियसबाट लिरिक्स प्राप्त गरियो"
}
},
"music-together": {
"description": "अरूसँग प्लेलिस्ट साझा गर्नुहोस्। जब होस्टले गीत बजाउँछ, अरू सबैले एउटै गीत सुन्नेछन्",
"dialog": {
"enter-host": "होस्ट आईडी प्रविष्ट गर्नुहोस्"
},
"internal": {
"save": "सेभ गर्नुहोस्",
"track-source": "गानाको स्रोत",
"unknown-user": "अज्ञात प्रयोगकर्ता"
},
"menu": {
"click-to-copy-id": "होस्ट आईडी कपी गर्नुहोस्",
"close": "मिउजीक टुगेदर बन्द गर्नुहोस्",
"connected-users": "जोडिएका प्रयोगकर्ताहरू",
"disconnect": "मिउजीक टुगेदर डिस्कनेक्ट गर्नुहोस्",
"empty-user": "कोही प्रयोगकर्ताहरू जोडिएका छैनन्",
"host": "मिउजीक टुगेदर होस्ट",
"join": "मिउजीक टुगेदर जोइन गनुहोस",
"permission": {
"all": "पाहुनाहरूलाई प्लेलिस्ट र प्लेयर नियन्त्रण गर्न अनुमति दिनुहोस्",
"host-only": "केवल होस्टले प्लेलिस्ट र प्लेयर नियन्त्रण गर्न सक्छ",
"playlist": "पाहुनाहरूलाई प्लेलिस्ट नियन्त्रण गर्न अनुमति दिनुहोस्"
},
"set-permission": "नियन्त्रण अनुमति परिवर्तन गर्नुहोस्",
"status": {
"disconnected": "विच्छेदित",
"guest": "पाहुनाका रूपमा जोडियो",
"host": "होस्टका रूपमा जोडियो"
}
},
"name": "मिउजीक टुगेदर [बिटा]",
"toast": {
"add-song-failed": "गीत थप्न असफल",
"closed": "मिउजीक टुगेदर बन्द गरियो",
"disconnected": "मिउजीक टुगेदर डिसकनेक्टेड",
"host-failed": "मिउजीक टुगेदर होस्ट गर्न असफल",
"id-copied": "होस्ट आईडी क्लिपबोर्डमा कपी गरियो",
"id-copy-failed": "होस्ट आईडी क्लिपबोर्डमा कपी गर्न असफल",
"join-failed": "मिउजीक टुगेदर जोइन हुन असफल",
"joined": "मिउजीक टुगेदरमा जोडियो",
"permission-changed": "मिउजीक टुगेदर अनुमति \"{{permission}}\" मा परिवर्तन गरियो",
"remove-song-failed": "गाना हटाउनमा समस्या आयो",
"user-connected": "मिउजीक टुगेदरमा {{name}} जोडीनुभायो",
"user-disconnected": "{{name}}ले मिउजीक टुगेदर छोडनु भयो"
}
},
"navigation": {
"description": "अर्को/पछाडि नेभिगेसन तपाईँको मनपर्ने ब्राउजरमा जस्तै सिधा इन्टरफेसमा एकीकृत तीरहरू",
"name": "नेभिगेसन"
},
"no-google-login": {
"description": "इन्टरफेसबाट गुगल लगइन बटन र लिङ्कहरू हटाउनुहोस्",
"name": "गुगल लगइन छैन"
},
"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": "windowको स्थान सेव गर्नुहोस्",
"save-window-size": "windowको आकार सेव गर्नुहोस्",
"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": "भिडियो गुणस्तर परिवर्तनकर्ता"
},
"scrobbler": {
"description": "स्क्रोब्लिङ समर्थन थप्नुहोस् (etc. last.fm, Listenbrainz)",
"dialog": {
"lastfm": {
"auth-failed": {
"message": "Last.fm सँग प्रमाणिकरण गर्न असफल\nअर्को पुनः सुरु नभएसम्म पपअप लुकाउनुहोस्।",
"title": "प्रमाणीकरण असफल"
}
}
},
"menu": {
"lastfm": {
"api-settings": "Last.fm API सेटिङहरू"
},
"listenbrainz": {
"token": "ListenBrainz प्रयोगकर्ता टोकन प्रविष्ट गर्नुहोस्"
},
"scrobble-other-media": "अन्य मिडियालाई स्क्रबल गर्नुहोस्"
},
"name": "स्क्रबबलर",
"prompt": {
"lastfm": {
"api-key": "Last.fm API कुञ्जी",
"api-secret": "Last.fm एपीआई गुप्त"
},
"listenbrainz": {
"token": {
"label": "आफ्नो ListenBrainz प्रयोगकर्ता टोकन प्रविष्ट गर्नुहोस्:",
"title": "ListenBrainz टोकन"
}
}
}
},
"shortcuts": {
"description": "प्लेब्याक (प्ले/विराम/अर्को/अघिल्लो) का लागि ग्लोबल हटकीहरू सेट गर्न र मिडिया कुञ्जीहरू ओभरराइड गरेर मिडिया ओएसडी बन्द गर्न अनुमति दिन्छ, खोजी गर्न 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": "स्पन्सरब्लक"
},
"taskbar-mediacontrol": {
"description": "तपाईँको विन्डोज टास्कबारबाट प्लेब्याक नियन्त्रण गर्नुहोस्",
"name": "टास्कबार मेडिया कन्ट्रोल"
},
"touchbar": {
"description": "MacOS प्रयोगकर्ताहरूका लागि टचबार विजेट थप्दछ",
"name": "टचबार"
},
"tuna-obs": {
"description": "OBS को टुना प्लगइनसँग एकीकरण",
"name": "टुना 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": "भिजुअलाइजर"
}
}
}

570
src/i18n/resources/nl.json Normal file
View File

@ -0,0 +1,570 @@
{
"common": {
"console": {
"plugins": {
"execute-failed": "Mislukt om plugin {{pluginName}}::{{contextName}} uit te voeren",
"executed-at-ms": "Plugin {{pluginName}}::{{contextName}} uitgevoerd in {{ms}}ms",
"initialize-failed": "Initialisatie van plugin \"{{pluginName}}\" mislukt",
"load-all": "Alle plugins laden",
"load-failed": "Mislukt om plugin \"{{pluginName}}\" te laden",
"loaded": "Plugin \"{{pluginName}}\" geladen",
"unload-failed": "Mislukt om plugin \"{{pluginName}}\" te lossen",
"unloaded": "Plugin \"{{pluginName}}\" gelost"
}
}
},
"language": {
"code": "nl",
"local-name": "Nederlands",
"name": "Nederlands"
},
"main": {
"console": {
"did-finish-load": {
"dev-tools": "Laden voltooid. DevTools geopend"
},
"i18n": {
"loaded": "i18n geladen"
},
"second-instance": {
"receive-command": "Commando ontvangen via protocol: \"{{command}}\""
},
"theme": {
"css-file-not-found": "CSS-bestand \"{{cssFile}}\" bestaat niet, wordt genegeerd"
},
"unresponsive": {
"details": "Onverantwoordelijkheidsfout!\n{{error}}"
},
"when-ready": {
"clearing-cache-after-20s": "App-cache wissen"
},
"window": {
"tried-to-render-offscreen": "Venster probeerde buiten het scherm te renderen, venstergrootte={{windowSize}}, weergavegrootte={{displaySize}}, positie={{position}}"
}
},
"dialog": {
"hide-menu-enabled": {
"detail": "Menu is verborgen, gebruik 'Alt' om het weer te geven (of 'Escape' als u de In-App Menu gebruikt)",
"message": "Menu verbergen is ingeschakeld",
"title": "Menu Verbergen Ingeschakeld"
},
"need-to-restart": {
"buttons": {
"later": "Later",
"restart-now": "Nu Opnieuw Opstarten"
},
"detail": "\"{{pluginName}}\" plugin vereist een herstart om van kracht te worden",
"message": "\"{{pluginName}}\" moet opnieuw worden opgestart",
"title": "Herstart Vereist"
},
"unresponsive": {
"buttons": {
"quit": "Stoppen",
"relaunch": "Opnieuw starten",
"wait": "Wachten"
},
"detail": "Het programma reageert niet! Kies wat u wilt doen:",
"message": "De applicatie reageert niet",
"title": "Venster Niet Reagerend"
},
"update-available": {
"buttons": {
"disable": "Updates uitschakelen",
"download": "Downloaden",
"ok": "OK"
},
"detail": "Er is een nieuwe versie beschikbaar en kan worden gedownload op {{downloadLink}}",
"message": "Een nieuwe versie is beschikbaar",
"title": "Update Beschikbaar"
}
},
"menu": {
"about": "Over",
"navigation": {
"label": "Navigatie",
"submenu": {
"copy-current-url": "Huidige URL kopiëren",
"go-back": "Terug",
"go-forward": "Vooruit",
"quit": "Afsluiten",
"restart": "Applicatie Opnieuw Opstarten"
}
},
"options": {
"label": "Opties",
"submenu": {
"advanced-options": {
"label": "Geavanceerde opties",
"submenu": {
"auto-reset-app-cache": "App-cache resetten bij het starten van de app",
"disable-hardware-acceleration": "Hardwareversnelling uitschakelen",
"edit-config-json": "Config.json bewerken",
"override-user-agent": "Gebruikersagent overschrijven",
"restart-on-config-changes": "Herstarten bij configuratiewijzigingen",
"set-proxy": {
"label": "Proxy instellen",
"prompt": {
"label": "Proxy-adres invoeren: (leeg laten om uit te schakelen)",
"placeholder": "Voorbeeld: SOCKS5://127.0.0.1:9999",
"title": "Proxy instellen"
}
},
"toggle-dev-tools": "DevTools schakelen"
}
},
"always-on-top": "Altijd bovenop",
"auto-update": "Automatisch bijwerken",
"hide-menu": {
"dialog": {
"message": "Menu wordt verborgen bij de volgende start, gebruik [Alt] om het weer te geven (of backtick [`] als u de in-app-menu gebruikt)",
"title": "Menu Verbergen Ingeschakeld"
},
"label": "Menu Verbergen"
},
"language": {
"dialog": {
"message": "Taal wordt gewijzigd na herstart",
"title": "Taal Gewijzigd"
},
"label": "Taal",
"submenu": {
"to-help-translate": "Wil je helpen vertalen? Klik hier"
}
},
"resume-on-start": "Hervat laatste liedje bij het opstarten van de app",
"single-instance-lock": "Eenmalige instantievergrendeling",
"start-at-login": "Starten bij het inloggen",
"starting-page": {
"label": "Startpagina",
"unset": "Niet ingesteld"
},
"tray": {
"label": "Systeemvak",
"submenu": {
"disabled": "Uitgeschakeld",
"enabled-and-hide-app": "Ingeschakeld en applicatie verbergen",
"enabled-and-show-app": "Ingeschakeld en applicatie weergeven",
"play-pause-on-click": "Afspelen/Pauzeren bij klikken"
}
},
"visual-tweaks": {
"label": "Visuele Aanpassingen",
"submenu": {
"like-buttons": {
"default": "Standaard",
"force-show": "Forceren weergeven",
"hide": "Verbergen",
"label": "Vind ik leuk-knoppen"
},
"remove-upgrade-button": "Upgrade-knop verwijderen",
"theme": {
"dialog": {
"button": {
"cancel": "Annuleren",
"remove": "Verwijderen"
},
"remove-theme": "Weet je zeker dat je het aangepaste thema wilt verwijderen?",
"remove-theme-message": "Dit verwijderd het aangepaste thema"
},
"label": "Thema",
"submenu": {
"import-css-file": "Aangepast CSS-bestand importeren",
"no-theme": "Geen thema"
}
}
}
}
}
},
"plugins": {
"enabled": "Ingeschakeld",
"label": "Plugins",
"new": "NIEUW"
},
"view": {
"label": "Weergave",
"submenu": {
"force-reload": "Forceer Herladen",
"reload": "Herladen",
"reset-zoom": "Ware Grootte",
"toggle-fullscreen": "Volledig Scherm Wisselen",
"zoom-in": "Inzoomen",
"zoom-out": "Uitzoomen"
}
}
},
"tray": {
"next": "Volgende",
"play-pause": "Afspelen/Pauzeren",
"previous": "Vorige",
"quit": "Afsluiten",
"restart": "Applicatie Opnieuw Opstarten",
"show": "Venster Weergeven",
"tooltip": {
"default": "YouTube Music",
"with-song-info": "YouTube Music: {{artist}} - {{title}}"
}
}
},
"plugins": {
"ad-speedup": {
"description": "Wanneer een advertentie afspeelt, dempt het geluid en versnelt de playback naar 16x",
"name": "Snellere advertenties"
},
"adblocker": {
"description": "Blokkeer alle advertenties en tracking vanuit de doos",
"menu": {
"blocker": "Blokkeerder"
},
"name": "Advertentieblokkeerder"
},
"album-actions": {
"description": "Voegt knoppen toe voor Ondisliken, Disliken, Liken en Ontliken om dit toe te passen op alle nummers in een afspeellijst of album",
"name": "Albumacties"
},
"album-color-theme": {
"description": "Past een dynamisch thema en visuele effecten toe op basis van het kleurenpalet van het album",
"menu": {
"color-mix-ratio": {
"label": "Kleurmixverhouding",
"submenu": {
"percent": "{{ratio}}%"
}
}
},
"name": "Albumkleurthema"
},
"ambient-mode": {
"description": "Past een verlichtingseffect toe door zachte kleuren van de video op het achtergrondscherm te werpen",
"menu": {
"blur-amount": {
"label": "Vervagingshoeveelheid",
"submenu": {
"pixels": "{{blurAmount}} pixels"
}
},
"buffer": {
"label": "Buffer",
"submenu": {
"buffer": "{{buffer}}"
}
},
"opacity": {
"label": "Dekking",
"submenu": {
"percent": "{{opacity}}%"
}
},
"quality": {
"label": "Kwaliteit",
"submenu": {
"pixels": "{{quality}} pixels"
}
},
"size": {
"label": "Formaat",
"submenu": {
"percent": "{{size}}%"
}
},
"smoothness-transition": {
"label": "Soepelheid overgang",
"submenu": {
"during": "Tijdens {{interpolationTime}} s"
}
},
"use-fullscreen": {
"label": "Volledig scherm gebruiken"
}
},
"name": "Omgevingsmodus"
},
"audio-compressor": {
"description": "Past compressie toe op audio (verlaagt het volume van de luidste delen van het signaal en verhoogt het volume van de zachtste delen)",
"name": "Audiocompressor"
},
"blur-nav-bar": {
"description": "Maakt de navigatiebalk transparant en wazig",
"name": "Vervagen Navigatiebalk"
},
"bypass-age-restrictions": {
"description": "Omzeil de leeftijdsverificatie van YouTube",
"name": "Leeftijdsbeperkingen Omzeilen"
},
"captions-selector": {
"description": "Ondertitelkeuze voor YouTube Music-audiotracks",
"menu": {
"autoload": "Automatisch de laatst gebruikte ondertitel selecteren",
"disable-captions": "Standaard geen ondertitels"
},
"name": "Ondertitelkeuze",
"prompt": {
"selector": {
"label": "Huidige ondertitel taal: {{language}}",
"none": "Geen",
"title": "Selecteer ondertitel taal"
}
},
"templates": {
"title": "Open ondertitelkeuze"
}
},
"compact-sidebar": {
"description": "Stel de zijbalk altijd in op compacte modus",
"name": "Compacte Zijbalk"
},
"crossfade": {
"description": "Vervagen tussen nummers",
"menu": {
"advanced": "Geavanceerd"
},
"name": "Crossfade [Beta]",
"prompt": {
"options": {
"multi-input": {
"fade-in-duration": "Fade-in-duur (ms)",
"fade-out-duration": "Fade-out-duur (ms)",
"fade-scaling": {
"label": "Vervagingschaal",
"linear": "Lineair",
"logarithmic": "Logaritmisch"
},
"seconds-before-end": "Vervagen N seconden voor het einde"
},
"title": "Crossfade-opties"
}
}
},
"disable-autoplay": {
"description": "Zorgt ervoor dat nummers starten in 'gepauzeerde' modus",
"menu": {
"apply-once": "Alleen toepassen bij opstarten"
},
"name": "Automatisch afspelen uitschakelen"
},
"discord": {
"backend": {
"already-connected": "Geprobeerd verbinding te maken met een actieve verbinding",
"connected": "Verbonden met Discord",
"disconnected": "Verbinding met Discord verbroken"
},
"description": "Laat je vrienden zien waar je naar luistert met Rich Presence",
"menu": {
"auto-reconnect": "Automatisch opnieuw verbinden",
"clear-activity": "Activiteit wissen",
"clear-activity-after-timeout": "Activiteit na time-out wissen",
"connected": "Verbonden",
"disconnected": "Verbinding verbroken",
"hide-duration-left": "Verberg resterende tijd",
"hide-github-button": "GitHub-knop verbergen",
"play-on-youtube-music": "Afspelen op YouTube Music",
"set-inactivity-timeout": "Inactiviteitstime-out instellen"
},
"name": "Discord Rich Presence",
"prompt": {
"set-inactivity-timeout": {
"label": "Voer inactiviteitstime-out in seconden in:",
"title": "Inactiviteitstime-out instellen"
}
}
},
"downloader": {
"backend": {
"dialog": {
"error": {
"buttons": {
"ok": "Oke"
},
"message": "Excuses, de download is mislukt…",
"title": "Er is een fout opgetreden tijdens het downloaden!"
},
"start-download-playlist": {
"buttons": {
"ok": "Oké"
},
"detail": "({{playlistSize}} nummers)",
"message": "Afspeellijst \"{{playlistTitle}}\" aan het downloaden",
"title": "Download is gestart"
}
},
"feedback": {
"conversion-progress": "Converteren: {{percent}}%",
"converting": "Converteren…",
"done": "Gereed: {{filePath}}",
"download-info": "{{artist}} - {{title}} ([{{videoId}}) aan het downloaden",
"download-progress": "Downloaden: {{percent}}%",
"downloading": "Aan het downloaden…",
"downloading-counter": "{{current}}/{{total}} aan het downloaden…",
"downloading-playlist": "Afspeellijst \"{{playlistTitle}}\" {{playlistId}} aan het downloaden ({{playlistSize}} liederen)",
"error-while-downloading": "Er is een fout opgetreden tijdens het downloaden van \"{{author}} - {{title}}\": {{error}}",
"folder-already-exists": "De map \"{{playlistFolder}}\" bestaat al",
"getting-playlist-info": "Afspeellijst informatie ophalen…",
"loading": "Laden…",
"playlist-has-only-one-song": "Afspeellijst heeft maar 1 item, item direct aan het downloaden",
"playlist-id-not-found": "Geen playlist ID gevonden",
"playlist-is-empty": "Afspeellijst is leeg",
"playlist-is-mix-or-private": "Er is een fout opgetreden tijdens het ophalen van de afspeellijst informatie: zorg ervoor dat het geen verborgen of \"Mixed for you\" afspeellijst is\n\n{{error}}",
"preparing-file": "Bestand voorbereiden…",
"saving": "Opslaan…",
"trying-to-get-playlist-id": "Proberen om het afspeellijst ID op te halen: {{playlistId}}",
"video-id-not-found": "Video niet gevonden",
"writing-id3": "ID3 tags aan het schrijven…"
}
},
"description": "Download MP3 / bron-audio rechtstreeks vanuit de interface",
"menu": {
"choose-download-folder": "Kies de downloadmap",
"download-finish-settings": {
"label": "Downloaden bij voltooiing",
"prompt": {
"last-percent": "Na x procent",
"last-seconds": "Laatste x seconden",
"title": "Configureren wanneer te downloaden"
},
"submenu": {
"advanced": "Geavanceerd",
"enabled": "Ingeschakeld",
"mode": "Tijd-modus",
"percent": "Procent",
"seconds": "Seconden"
}
},
"download-playlist": "Afspeellijst downloaden",
"presets": "Voorinstellingen",
"skip-existing": "Bestaande bestanden overslaan"
},
"name": "Downloader",
"renderer": {
"can-not-update-progress": "Kan de voortgang niet bijwerken"
},
"templates": {
"button": "Download"
}
},
"exponential-volume": {
"description": "Maakt de volumeschuif exponentieel zodat het gemakkelijker is om lagere volumes te selecteren.",
"name": "Exponentieel Volume"
},
"in-app-menu": {
"description": "Geeft menubalken een chique, donkere of albumkleurige uitstraling",
"menu": {
"hide-dom-window-controls": "Verberg DOM-vensterbedieningselementen"
},
"name": "In-App menu"
},
"lumiastream": {
"description": "Voegt ondersteuning voor Lumia Stream toe",
"name": "Lumia Stream [Beta]"
},
"lyrics-genius": {
"description": "Voegt tekstondersteuning toe voor de meeste nummers",
"menu": {
"romanized-lyrics": "Geromaniseerde Teksten"
},
"name": "Lyrics Genius",
"renderer": {
"fetched-lyrics": "Teksten opgehaald voor Genius"
}
},
"music-together": {
"description": "Deel een afspeellijst met anderen. Wanneer de host een nummer afspeelt, hoort iedereen hetzelfde nummer",
"dialog": {
"enter-host": "Voer Host-ID in"
},
"internal": {
"save": "Opslaan",
"track-source": "Bron van nummers",
"unknown-user": "Onbekende gebruiker"
},
"menu": {
"click-to-copy-id": "Host-ID kopiëren",
"close": "Sluit Music Samen",
"connected-users": "Verbonden gebruikers",
"disconnect": "Music Samen verbreken",
"empty-user": "Geen verbonden gebruikers",
"host": "Music Samen Host",
"join": "Voeg Music Samen toe",
"permission": {
"all": "Gasten toestaan de afspeellijst en speler te bedienen",
"host-only": "Alleen de host kan de afspeellijst en speler bedienen",
"playlist": "Gasten toestaan de afspeellijst te bedienen"
},
"set-permission": "Bedieningsmachtiging wijzigen",
"status": {
"disconnected": "Verbroken",
"guest": "Verbonden als Gast",
"host": "Verbonden als Host"
}
},
"name": "Music Samen [Beta]",
"toast": {
"add-song-failed": "Toevoegen van nummer mislukt",
"closed": "Music Samen gesloten",
"disconnected": "Music Samen verbroken",
"host-failed": "Hosten van Music Samen mislukt",
"id-copied": "Host-ID gekopieerd naar klembord",
"id-copy-failed": "Kopiëren van Host-ID naar klembord mislukt",
"join-failed": "Aansluiten bij Music Samen mislukt",
"joined": "Music Samen toegetreden",
"permission-changed": "Music Samen machtiging gewijzigd naar \"{{permission}}\"",
"remove-song-failed": "Verwijderen van nummer mislukt",
"user-connected": "{{name}} heeft Music Samen toegetreden",
"user-disconnected": "{{name}} heeft Music Samen verlaten"
}
},
"navigation": {
"description": "Volgende/Vorige navigatiepijlen rechtstreeks geïntegreerd in de interface, zoals in je favoriete browser",
"name": "Navigatie"
},
"no-google-login": {
"description": "Verwijder Google aanmeldknoppen en -links uit de interface",
"name": "Geen Google Aanmelding"
},
"notifications": {
"description": "Toont een melding wanneer een nummer begint te spelen (interactieve meldingen zijn beschikbaar op Windows)",
"menu": {
"interactive": "Interactieve Meldingen",
"interactive-settings": {
"label": "Interactieve instellingen",
"submenu": {
"hide-button-text": "Verberg tekst op de knop",
"refresh-on-play-pause": "Herlaad bij het afspelen/pauzeren"
}
},
"unpause-notification": "Laat een notificatie zijn bij het depauzeren"
},
"name": "Meldingen"
},
"picture-in-picture": {
"menu": {
"always-on-top": "Altijd bovenaan",
"hotkey": {
"label": "Sneltoets",
"prompt": {
"keybind-options": {
"hotkey": "Sneltoets"
}
}
},
"save-window-position": "Sla schermpositie op",
"save-window-size": "Sla schermgrootte op"
}
},
"video-toggle": {
"menu": {
"mode": {
"submenu": {
"disabled": "Uitgeschakeld"
}
}
}
},
"visualizer": {
"description": "Voeg een visuele equalizer toe",
"menu": {
"visualizer-type": "Type visualisator"
},
"name": "Visualisator"
}
}
}

View File

@ -104,7 +104,7 @@
"set-proxy": {
"label": "Ustaw proxy",
"prompt": {
"label": "Podaj adres Proxy: (zostaw pusty aby wyłączyć)",
"label": "Podaj adres proxy: (zostaw pusty aby wyłączyć)",
"placeholder": "Przykład: SOCKS5://127.0.0.1:9999",
"title": "Ustaw proxy"
}
@ -158,6 +158,14 @@
},
"remove-upgrade-button": "Usuń przycisk subskrypcji premium",
"theme": {
"dialog": {
"button": {
"cancel": "Anuluj",
"remove": "Usuń"
},
"remove-theme": "Czy na pewno chcesz usunąć niestandardowy motyw?",
"remove-theme-message": "Spowoduje to usunięcie niestandarowego motywu"
},
"label": "Motyw",
"submenu": {
"import-css-file": "Importuj własny plik CSS",
@ -170,7 +178,8 @@
},
"plugins": {
"enabled": "Włączone",
"label": "Wtyczki"
"label": "Wtyczki",
"new": "NOWOŚĆ"
},
"view": {
"label": "Widok",
@ -190,10 +199,18 @@
"previous": "Poprzedni",
"quit": "Wyjdź",
"restart": "Uruchom ponownie aplikację",
"show": "Pokaż okno"
"show": "Pokaż okno",
"tooltip": {
"default": "YouTube Music",
"with-song-info": "{{title}} (autorstwa {{artist}}) - YT Music"
}
}
},
"plugins": {
"ad-speedup": {
"description": "Wycisza reklamę i przyśpiesza do 16x",
"name": "Przyśpieszacz reklam"
},
"adblocker": {
"description": "Blokuj wszystkie reklamy i śledzenie",
"menu": {
@ -201,15 +218,27 @@
},
"name": "Blokowanie reklam"
},
"album-actions": {
"description": "Dodaje przyciski łapek w górę i dół do wszystkich piosenek podczas w albumach lub listach odtwarzania",
"name": "Akcje albumu"
},
"album-color-theme": {
"description": "Stosuje dynamiczny motyw i efekty wizualne w oparciu o paletę kolorów albumu",
"menu": {
"color-mix-ratio": {
"label": "Intensywność koloru",
"submenu": {
"percent": "{{ratio}}%"
}
}
},
"name": "Motyw kolorów albumu"
},
"ambient-mode": {
"description": "Stosuje efekt świetlny, rzucając delikatne kolory z wideo na tło ekranu.",
"description": "Stosuje efekt świetlny, rzucając delikatne kolory z wideo na tło ekranu",
"menu": {
"blur-amount": {
"label": "Ilość rozmycia",
"label": "Siła rozmycia",
"submenu": {
"pixels": "{{blurAmount}} pikseli"
}
@ -250,6 +279,49 @@
},
"name": "Tryb otoczenia"
},
"api-server": {
"description": "Pozwala na kontrolowanie YouTube Music poprzez podłączenie specjalnego serwera API",
"dialog": {
"request": {
"buttons": {
"allow": "Zezwól",
"deny": "Odmów"
},
"message": "Zezwolić {{ID}} (pochodzenie: {{origin}}) na dostęp do API?",
"title": "Prośba o autoryzację API"
}
},
"menu": {
"auth-strategy": {
"label": "Strategia autoryzacji",
"submenu": {
"auth-at-first": {
"label": "Autoryzuj przy pierwszej prośbie"
},
"none": {
"label": "Nie autoryzuj"
}
}
},
"hostname": {
"label": "Nazwa hosta (IP)"
},
"port": {
"label": "Port"
}
},
"name": "YouTube Music API",
"prompt": {
"hostname": {
"label": "Wpisz nazwę hosta (IP, np. 0.0.0.0), który będzie użyty do serwera API:",
"title": "Nazwa hosta"
},
"port": {
"label": "Wpisz port, z którego będzie korzystać serwer API:",
"title": "Port"
}
}
},
"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"
@ -289,7 +361,7 @@
"menu": {
"advanced": "Zaawansowane"
},
"name": "Przenikanie [Beta]",
"name": "Płynne przejście [Beta]",
"prompt": {
"options": {
"multi-input": {
@ -319,7 +391,7 @@
"connected": "Połączono z Discordem",
"disconnected": "Odłączono od Discorda"
},
"description": "Pokaż znajomym, czego słuchasz dzięki Rich Presence",
"description": "Pokaż znajomym z Discorda czego słuchasz dzięki Rich Presence",
"menu": {
"auto-reconnect": "Automatyczne wznawianie połączenia",
"clear-activity": "Wyczyść aktywność",
@ -385,6 +457,21 @@
"description": "Pobiera MP3/ źródło audio bezpośrednio z interfejsu",
"menu": {
"choose-download-folder": "Wybierz folder pobierania",
"download-finish-settings": {
"label": "Pobierz po zakończeniu",
"prompt": {
"last-percent": "Po x procentach",
"last-seconds": "Ostatnie x sekund",
"title": "Konfiguruj, kiedy pobierać"
},
"submenu": {
"advanced": "Zaawansowane",
"enabled": "Włączone",
"mode": "Tryb czasowy",
"percent": "Procenty",
"seconds": "Sekundy"
}
},
"download-playlist": "Pobierz playlistę",
"presets": "Predefiniowane ustawienia",
"skip-existing": "Pomiń istniejące pliki"
@ -408,10 +495,6 @@
},
"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]"
@ -426,6 +509,52 @@
"fetched-lyrics": "Tekst dostarczony przez Genius"
}
},
"music-together": {
"description": "Pozwala na udostępnianie listy odtwarzania z możliwością słuchania tego samego utworu co host",
"dialog": {
"enter-host": "Wpisz ID hosta"
},
"internal": {
"save": "Zapisz",
"track-source": "Źródło utworu",
"unknown-user": "Nieznany użytkownik"
},
"menu": {
"click-to-copy-id": "Kopiuj ID hosta",
"close": "Zakończ host",
"connected-users": "Połączeni użytkownicy",
"disconnect": "Rozłącz z hosta",
"empty-user": "Brak połączonych użytkowników",
"host": "Udostępnij tą listę odtwarzania",
"join": "Połącz z hostem",
"permission": {
"all": "Połączeni użytkownicy mają kontrolę nad listą odtwarzania oraz playerem",
"host-only": "Tylko host może kontrolować listę odtwarzania oraz playera",
"playlist": "Połączeni użytkownicy maja kontrolę tylko nad listą odtwarzania"
},
"set-permission": "Zmień permisję kontroli",
"status": {
"disconnected": "Rozłączony",
"guest": "Połączony jako Użytkownik",
"host": "Połączony jako Host"
}
},
"name": "Słuchanie razem [Beta]",
"toast": {
"add-song-failed": "Wystąpił błąd z dodaniem muzyki",
"closed": "Host słuchania razem został zamknięty pomyślnie",
"disconnected": "Pomyślnie rozłączono z hosta słuchania razem",
"host-failed": "Wystąpił błąd z hostem słuchania razem",
"id-copied": "ID hosta został wklejony do schowka",
"id-copy-failed": "Wystąpił błąd z próbą skopiowania ID do schowka",
"join-failed": "Wystąpił błąd z dołączeniem do hosta",
"joined": "Dołączono pomyślnie do hosta słuchania razem",
"permission-changed": "Permisja hosta została zmieniona na \"{{permission}}\"",
"remove-song-failed": "Wystąpił błąd z usunięciem utworu",
"user-connected": "Do hosta dołączył {{name}}",
"user-disconnected": "{{name}} właśnie wyszedł z hosta"
}
},
"navigation": {
"description": "Strzałki nawigacyjne Dalej/Wstecz zintegrowane bezpośrednio z interfejsem, tak jak w Twojej ulubionej przeglądarce",
"name": "Nawigacja"
@ -518,8 +647,41 @@
"description": "Umożliwia zmianę jakości wideo za pomocą przycisku na nakładce wideo",
"name": "Zmieniacz jakości wideo"
},
"scrobbler": {
"description": "Umożliwia scrobbling utworów do m.in. last.fm lub Listenbrainz",
"dialog": {
"lastfm": {
"auth-failed": {
"message": "Podczas autoryzowania z last.fm wystąpił błąd.\nSchowaj pop-up aż do następnego uruchomienia.",
"title": "Podczas autoryzowania wystąpił błąd"
}
}
},
"menu": {
"lastfm": {
"api-settings": "Ustawienia API Last.fm"
},
"listenbrainz": {
"token": "Podaj token użytkownika ListenBrainz"
},
"scrobble-other-media": "Scrobbluj pozostałe multimedia"
},
"name": "Scrobblowanie",
"prompt": {
"lastfm": {
"api-key": "klucz API Last.fm",
"api-secret": "Sekretny klucz Last.fm API (\"secret key\")"
},
"listenbrainz": {
"token": {
"label": "Podaj swój token użytkownika ListenBrainz:",
"title": "Token ListenBrainz"
}
}
}
},
"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.",
"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"
@ -549,6 +711,59 @@
"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"
},
"synced-lyrics": {
"description": "Dodaje zsynchronizowane napisy do utworów używając między innymi LRClib.",
"errors": {
"fetch": "⚠️ - Wystąpił błąd podczas pobierania tekstu utworu. Spróbuj ponownie później.",
"not-found": "⚠️ - Nie znaleziono napisów dla tego utworu."
},
"menu": {
"default-text-string": {
"label": "Standardowy znak luki",
"tooltip": "Wybierz domyślny znak, który ma być wyświetlany jako pauza między słowami"
},
"line-effect": {
"label": "Efekty linijki",
"submenu": {
"focus": {
"label": "Fokus",
"tooltip": "Spraw, aby tylko obecna linijka była biała"
},
"offset": {
"label": "Przesunięcie",
"tooltip": "Przesuń w prawo obecną linijkę"
},
"scale": {
"label": "Skala",
"tooltip": "Zmień skalę aktualnej linijki"
}
},
"tooltip": "Wybierz efekt, by zastosować go do aktualnej linijki"
},
"precise-timing": {
"label": "Zsynchronizuj tekst utworu do perfekcji",
"tooltip": "Wylicz czas wyświetlania następnej linijki co do milisekundy (może mieć mały wpływ na wydajność systemu)"
},
"show-lyrics-even-if-inexact": {
"label": "Pokaż teksty, mimo niezgodności",
"tooltip": "Jeżeli nie znaleziono tekstu piosenki z bazy danych, wtyczka spróbuje ponownie przez wyszukanie przybliżonej frazy.\nNależy jednak pamiętać, że następne próby mogą nie być trafne co do oryginału."
},
"show-time-codes": {
"label": "Pokaż znaczniki czasu",
"tooltip": "Pokaż znaczniki czasu obok linijek"
}
},
"name": "Napisy zsynchronizowane",
"refetch-btn": {
"fetching": "Pobieranie napisów...",
"normal": "Odśwież napisy"
},
"warnings": {
"duration-mismatch": "⚠️ - Napisy mogą nie być zsynchronizowane z powodu różnicy w czasie trwania utworu.",
"inexact": "⚠️ - Tekst utworu może się różnić od oryginału",
"instrumental": "⚠️ - To jest utwór instrumentalny"
}
},
"taskbar-mediacontrol": {
"description": "Steruj odtwarzaniem z paska zadań systemu Windows",
"name": "Kontroler odtwarzania z paska zadań"

View File

@ -0,0 +1,829 @@
{
"common": {
"console": {
"plugins": {
"execute-failed": "Falha ao executar plugin {{pluginName}}::{{contextName}}",
"executed-at-ms": "Plugin {{pluginName}}::{{contextName}} executado em {{ms}} ms",
"initialize-failed": "Falha ao inicializar o plugin \"{{pluginName}}\"",
"load-all": "Carregando todos os plugins",
"load-failed": "Falha ao carregar o plugin \"{{pluginName}}\"",
"loaded": "Plugin \"{{pluginName}}\" carregado",
"unload-failed": "Falha ao descarregar o plugin \"{{pluginName}}\"",
"unloaded": "Plugin \"{{pluginName}}\" descarregado"
}
}
},
"language": {
"code": "pt-BR",
"local-name": "Português (Brasil)",
"name": "Portuguese (Brazil)"
},
"main": {
"console": {
"did-finish-load": {
"dev-tools": "Carregamento concluído. DevTools aberto"
},
"i18n": {
"loaded": "i18n carregado"
},
"second-instance": {
"receive-command": "Comando recebido pelo protocolo: \"{{command}}\""
},
"theme": {
"css-file-not-found": "Arquivo CSS \"{{cssFile}}\" não existe, ignorando"
},
"unresponsive": {
"details": "Erro de falta de resposta!\n{{error}}"
},
"when-ready": {
"clearing-cache-after-20s": "Limpando cache do aplicativo"
},
"window": {
"tried-to-render-offscreen": "A janela tentou renderizar fora da tela, tamanho da janela={{windowSize}}, tamanho da tela={{displaySize}}, posição={{position}}"
}
},
"dialog": {
"hide-menu-enabled": {
"detail": "O menu está oculto, use 'Alt' para mostrá-lo (ou 'Esc' ao usar o menu dentro do aplicativo)",
"message": "Ocultar menu está ativado",
"title": "Ocultar menu ativado"
},
"need-to-restart": {
"buttons": {
"later": "Depois",
"restart-now": "Reiniciar agora"
},
"detail": "O plugin \"{{pluginName}}\" requer uma reinicialização para entrar em vigor",
"message": "\"{{pluginName}}\" precisa reiniciar",
"title": "Necessário reiniciar"
},
"unresponsive": {
"buttons": {
"quit": "Fechar",
"relaunch": "Reiniciar",
"wait": "Aguardar"
},
"detail": "Lamentamos o inconveniente! Por favor, escolha o que fazer:",
"message": "O aplicativo não está respondendo",
"title": "Janela não responde"
},
"update-available": {
"buttons": {
"disable": "Desativar atualizações",
"download": "Baixar",
"ok": "OK"
},
"detail": "Uma versão mais recente está disponível em {{downloadLink}}",
"message": "Nova versão disponível",
"title": "Atualização disponível"
}
},
"menu": {
"about": "Sobre",
"navigation": {
"label": "Navegação",
"submenu": {
"copy-current-url": "Copiar URL atual",
"go-back": "Voltar",
"go-forward": "Avançar",
"quit": "Sair",
"restart": "Reiniciar aplicativo"
}
},
"options": {
"label": "Opções",
"submenu": {
"advanced-options": {
"label": "Opções avançadas",
"submenu": {
"auto-reset-app-cache": "Limpar cache ao iniciar aplicativo",
"disable-hardware-acceleration": "Desativar aceleração de hardware",
"edit-config-json": "Editar config.json",
"override-user-agent": "Substituir User-Agent",
"restart-on-config-changes": "Reiniciar ao alterar configurações",
"set-proxy": {
"label": "Definir proxy",
"prompt": {
"label": "Digite o endereço do proxy: (deixe em branco para desativar)",
"placeholder": "Exemplo: SOCKS5://127.0.0.1:9999",
"title": "Definir proxy"
}
},
"toggle-dev-tools": "Alternar DevTools"
}
},
"always-on-top": "Sempre no topo",
"auto-update": "Atualização automática",
"hide-menu": {
"dialog": {
"message": "O menu ficará oculto na próxima inicialização, use [Alt] para exibi-lo (ou a tecla de crase [`] se estiver usando o menu do aplicativo)",
"title": "Ocultar menu ativado"
},
"label": "Ocultar menu"
},
"language": {
"dialog": {
"message": "O idioma será alterado depois de reiniciar",
"title": "Idioma alterado"
},
"label": "Idioma",
"submenu": {
"to-help-translate": "Quer ajudar a traduzir? Clique aqui"
}
},
"resume-on-start": "Continuar última música ao iniciar o aplicativo",
"single-instance-lock": "Bloqueio de instância única",
"start-at-login": "Iniciar com o sistema",
"starting-page": {
"label": "Página inicial",
"unset": "Limpar"
},
"tray": {
"label": "Área de Notificação",
"submenu": {
"disabled": "Desativado",
"enabled-and-hide-app": "Ativado e aplicativo oculto",
"enabled-and-show-app": "Ativado e mostrar aplicativo",
"play-pause-on-click": "Reproduzir/Pausar ao clicar"
}
},
"visual-tweaks": {
"label": "Ajustes visuais",
"submenu": {
"like-buttons": {
"default": "Padrão",
"force-show": "Forçar exibir",
"hide": "Ocultar",
"label": "Botões de 'Curtir'"
},
"remove-upgrade-button": "Remover botão de atualização",
"theme": {
"dialog": {
"button": {
"cancel": "Cancelar",
"remove": "Remover"
},
"remove-theme": "Deseja realmente remover o tema personalizado?",
"remove-theme-message": "Isto removerá o tema personalizado"
},
"label": "Tema",
"submenu": {
"import-css-file": "Importar arquivo CSS personalizado",
"no-theme": "Sem tema"
}
}
}
}
}
},
"plugins": {
"enabled": "Ativado",
"label": "Plugins",
"new": "NOVO"
},
"view": {
"label": "Visualização",
"submenu": {
"force-reload": "Forçar recarregar",
"reload": "Recarregar",
"reset-zoom": "Tamanho atual",
"toggle-fullscreen": "Alternar tela cheia",
"zoom-in": "Ampliar",
"zoom-out": "Reduzir"
}
}
},
"tray": {
"next": "Próximo",
"play-pause": "Reproduzir/Pausar",
"previous": "Anterior",
"quit": "Sair",
"restart": "Reiniciar aplicativo",
"show": "Mostrar janela",
"tooltip": {
"default": "YouTube Music",
"with-song-info": "YouTube Music: {{artist}} - {{title}}"
}
}
},
"plugins": {
"ad-speedup": {
"description": "Se um anúncio for reproduzido, ele silencia o áudio e define a velocidade de reprodução para 16x",
"name": "Acelerador de Anúncios"
},
"adblocker": {
"description": "Bloqueio de todos os anúncios e rastreamentos imediatamente",
"menu": {
"blocker": "Bloqueador"
},
"name": "Bloqueador de Anúncios"
},
"album-actions": {
"description": "Adiciona botões Remover Não curtir, Não curtir, Curtir e Remover Curtir para aplicar em todas as músicas em uma lista ou álbum",
"name": "Ações do álbum"
},
"album-color-theme": {
"description": "Aplica um tema dinâmico e efeitos visuais com base na paleta de cores do álbum",
"menu": {
"color-mix-ratio": {
"label": "Proporção de mistura de cores",
"submenu": {
"percent": "{{ratio}}%"
}
}
},
"name": "Tema da cor do álbum"
},
"ambient-mode": {
"description": "Aplica um efeito de iluminação projetando cores suaves do vídeo no fundo da tela",
"menu": {
"blur-amount": {
"label": "Quantidade de desfoque",
"submenu": {
"pixels": "{{blurAmount}} pixels"
}
},
"buffer": {
"label": "Buffer",
"submenu": {
"buffer": "{{buffer}}"
}
},
"opacity": {
"label": "Opacidade",
"submenu": {
"percent": "{{opacity}}%"
}
},
"quality": {
"label": "Qualidade",
"submenu": {
"pixels": "{{quality}} pixels"
}
},
"size": {
"label": "Tamanho",
"submenu": {
"percent": "{{size}}%"
}
},
"smoothness-transition": {
"label": "Transição suave",
"submenu": {
"during": "Durante {{interpolationTime}} s"
}
},
"use-fullscreen": {
"label": "Usando tela cheia"
}
},
"name": "Modo ambiente"
},
"api-server": {
"description": "Adiciona um servidor API para controlar o player",
"dialog": {
"request": {
"buttons": {
"allow": "Permitir",
"deny": "Negar"
},
"message": "Permitir que {{ID}} {{origin}} acesse o API?",
"title": "Pedido de autorização API"
}
},
"menu": {
"auth-strategy": {
"label": "Estratégia de autorização",
"submenu": {
"auth-at-first": {
"label": "Autorizar na primeira solicitação"
},
"none": {
"label": "Não autorizar"
}
}
},
"hostname": {
"label": "Nome do anfitrião"
},
"port": {
"label": "Porta"
}
},
"name": "Servidor API [Beta]",
"prompt": {
"hostname": {
"label": "Entre o nome do host (como 0.0.0.0) para o servidor API:",
"title": "Nome do anfitrião"
},
"port": {
"label": "Entre a porta do servidor API:",
"title": "Porta"
}
}
},
"audio-compressor": {
"description": "Aplicar compressão ao áudio (reduz o volume das partes mais altas e aumenta o volume das partes mais baixas)",
"name": "Compressor de áudio"
},
"blur-nav-bar": {
"description": "Torna a barra de navegação transparente e desfocada",
"name": "Desfocar barra de navegação"
},
"bypass-age-restrictions": {
"description": "Pular a verificação de idade do YouTube",
"name": "Ignorar restrições de idade"
},
"captions-selector": {
"description": "Seletor de legendas para faixas de áudio do YouTube Music",
"menu": {
"autoload": "Selecionar automaticamente a última legenda usada",
"disable-captions": "Sem legendas por padrão"
},
"name": "Seletor de legendas",
"prompt": {
"selector": {
"label": "Idioma atual da legenda: {{language}}",
"none": "Nenhum",
"title": "Selecionar idioma da legenda"
}
},
"templates": {
"title": "Abrir seletor de legendas"
}
},
"compact-sidebar": {
"description": "Sempre definir a barra lateral no modo compacto",
"name": "Barra lateral compacta"
},
"crossfade": {
"description": "Crossfade entre músicas",
"menu": {
"advanced": "Avançado"
},
"name": "Crossfade [Beta]",
"prompt": {
"options": {
"multi-input": {
"fade-in-duration": "Duração do fade (ms)",
"fade-out-duration": "Duração do fade out (ms)",
"fade-scaling": {
"label": "Escala do fade",
"linear": "Linear",
"logarithmic": "Logarítmico"
},
"seconds-before-end": "Crossfade N segundos antes do fim"
},
"title": "Opções de crossfade"
}
}
},
"disable-autoplay": {
"description": "Faz a música começar no modo \"pausado\"",
"menu": {
"apply-once": "Aplicar somente ao iniciar"
},
"name": "Desativar reprodução automática"
},
"discord": {
"backend": {
"already-connected": "Tentativa de conectar-se com conexão ativa",
"connected": "Conectado no Discord",
"disconnected": "Desconectado do Discord"
},
"description": "Mostre aos seus amigos o que você ouve com Rich Presence",
"menu": {
"auto-reconnect": "Reconexão automática",
"clear-activity": "Limpar atividades",
"clear-activity-after-timeout": "Limpar atividades após tempo limite",
"connected": "Conectado",
"disconnected": "Desconectado",
"hide-duration-left": "Ocultar duração restante",
"hide-github-button": "Ocultar botão do GitHub",
"play-on-youtube-music": "Reproduzir no YouTube Music",
"set-inactivity-timeout": "Definir tempo limite de inatividade"
},
"name": "Rich Presence do Discord",
"prompt": {
"set-inactivity-timeout": {
"label": "Digite o tempo de inatividade em segundos:",
"title": "Definir tempo limite de inatividade"
}
}
},
"downloader": {
"backend": {
"dialog": {
"error": {
"buttons": {
"ok": "OK"
},
"message": "Ah! Desculpe, o download falhou…",
"title": "Erro no download!"
},
"start-download-playlist": {
"buttons": {
"ok": "OK"
},
"detail": "({{playlistSize}} músicas)",
"message": "Baixando lista de reprodução {{playlistTitle}}",
"title": "Download iniciado"
}
},
"feedback": {
"conversion-progress": "Convertendo: {{percent}}%",
"converting": "Convertendo…",
"done": "Concluído: {{filePath}}",
"download-info": "Baixando {{artist}} - {{title}} [{{videoId}}",
"download-progress": "Download: {{percent}}%",
"downloading": "Baixando…",
"downloading-counter": "Baixando {{current}}/{{total}}…",
"downloading-playlist": "Baixando lista de reprodução \"{{playlistTitle}}\" - {{playlistSize}} músicas ({{playlistId}})",
"error-while-downloading": "Erro ao baixar \"{{author}} - {{title}}\": {{error}}",
"folder-already-exists": "A pasta {{playlistFolder}} já existe",
"getting-playlist-info": "Obtendo informações da playlist…",
"loading": "Carregando…",
"playlist-has-only-one-song": "Playlist possui apenas um item, baixando diretamente",
"playlist-id-not-found": "Nenhum playlist ID encontrado",
"playlist-is-empty": "Playlist está vazia",
"playlist-is-mix-or-private": "Erro ao obter informações da playlist: verifique se não é uma playlist privada ou “”Mixada para você”\n\n{{error}}",
"preparing-file": "Preparando arquivo…",
"saving": "Salvando…",
"trying-to-get-playlist-id": "Tentando obter playlist ID: {{playlistId}}",
"video-id-not-found": "Vídeo não encontrado",
"writing-id3": "Salvando tags ID3…"
}
},
"description": "Faça download do MP3 / fonte de áudio diretamente da interface",
"menu": {
"choose-download-folder": "Escolha a pasta de download",
"download-finish-settings": {
"label": "Baixar ao finalizar",
"prompt": {
"last-percent": "Após x %",
"last-seconds": "Últimos x segundos",
"title": "Configurar quando baixar"
},
"submenu": {
"advanced": "Avançado",
"enabled": "Ativado",
"mode": "Modo de tempo",
"percent": "Porcento",
"seconds": "Segundos"
}
},
"download-playlist": "Baixar playlist",
"presets": "Predefinições",
"skip-existing": "Pular arquivos existentes"
},
"name": "Downloader",
"renderer": {
"can-not-update-progress": "Não é possível atualizar o progresso"
},
"templates": {
"button": "Baixar"
}
},
"equalizer": {
"description": "Adiciona um equalizador ao player",
"menu": {
"presets": {
"label": "Predefinições",
"list": {
"bass-booster": "Reforço de graves"
}
}
},
"name": "Equalizador"
},
"exponential-volume": {
"description": "Torna o controle deslizante de volume exponencial para que seja mais fácil selecionar volumes mais baixos.",
"name": "Volume Exponencial"
},
"in-app-menu": {
"description": "Dá às barras de menu uma aparência elegante, escura ou com a cor do álbum",
"menu": {
"hide-dom-window-controls": "Ocultar controles da janela DOM"
},
"name": "Menu no aplicativo"
},
"lumiastream": {
"description": "Adiciona suporte ao Lumia Stream",
"name": "Lumia Stream [Beta]"
},
"lyrics-genius": {
"description": "Adiciona suporte a letras para a maioria das músicas",
"menu": {
"romanized-lyrics": "Letras Romanizadas"
},
"name": "Letras Genius",
"renderer": {
"fetched-lyrics": "Letras buscadas por Genius"
}
},
"music-together": {
"description": "Compartilhe uma playlist com outras pessoas. Quando o anfitrião toca uma música, todos os outros ouvirão",
"dialog": {
"enter-host": "Insira o ID do host"
},
"internal": {
"save": "Salvar",
"track-source": "Fonte da Faixa",
"unknown-user": "Usuário Desconhecido"
},
"menu": {
"click-to-copy-id": "Copiar ID do host",
"close": "Fechar Music Together",
"connected-users": "Usuários Conectados",
"disconnect": "Desconectar Music Together",
"empty-user": "Nenhum usuário conectado",
"host": "Anfitrião do Music Together",
"join": "Entrar no Music Together",
"permission": {
"all": "Permitir que os convidados controlem a lista de reprodução e o player",
"host-only": "Somente o host pode controlar a lista de reprodução e o player",
"playlist": "Permitir que os convidados controlem a lista de reprodução"
},
"set-permission": "Mudar Permissões de Controle",
"status": {
"disconnected": "Desconectado",
"guest": "Conectado como convidado",
"host": "Conectado como Anfitrião"
}
},
"name": "Music Together [Beta]",
"toast": {
"add-song-failed": "Falha ao adicionar música",
"closed": "Music Together fechado",
"disconnected": "Music Together desconectado",
"host-failed": "Falha ao hospedar o Music Together",
"id-copied": "ID do anfitrião copiado para a área de transferência",
"id-copy-failed": "Falha ao copiar o ID do anfitrião para a área de transferência",
"join-failed": "Falha ao ingressar no Music Together",
"joined": "Entrou no Music Together",
"permission-changed": "A permissão do Music Together foi alterada para \"{{permission}}\"",
"remove-song-failed": "Falha ao remover música",
"user-connected": "{{name}} juntou-se ao Music Together",
"user-disconnected": "{{name}} saiu do Music Together"
}
},
"navigation": {
"description": "Setas de navegação para avançar/retornar diretamente integradas na interface, como no seu navegador favorito",
"name": "Navegação"
},
"no-google-login": {
"description": "Remova os botões e links de login do Google da interface",
"name": "Sem login do Google"
},
"notifications": {
"description": "Exibir uma notificação quando uma música começar a tocar (notificações interativas estão disponíveis no Windows)",
"menu": {
"interactive": "Notificações interativas",
"interactive-settings": {
"label": "Configurações interativas",
"submenu": {
"hide-button-text": "Ocultar texto do botão",
"refresh-on-play-pause": "Atualizar ao Reproduzir/Pausar",
"tray-controls": "Abrir/Fechar ao clicar na área de notificação"
}
},
"priority": "Prioridade da notificação",
"toast-style": "Estilo de alerta",
"unpause-notification": "Mostrar notificação ao despausar"
},
"name": "Notificações"
},
"picture-in-picture": {
"description": "Permite alternar o aplicativo para o modo picture-in-picture",
"menu": {
"always-on-top": "Sempre no topo",
"hotkey": {
"label": "Tecla de atalho",
"prompt": {
"keybind-options": {
"hotkey": "Tecla de atalho"
},
"label": "Escolha uma tecla de atalho para alternar entre picture-in-picture",
"title": "Atalho do picture-in-picture"
}
},
"save-window-position": "Salvar posição da janela",
"save-window-size": "Salvar tamanho da janela",
"use-native-pip": "Usar PiP nativo do navegador"
},
"name": "Picture-in-picture",
"templates": {
"button": "Picture-in-picture"
}
},
"playback-speed": {
"description": "Ouça rápido, ouça devagar! Adiciona um controle deslizante que controla a velocidade da música",
"name": "Velocidade de reprodução",
"templates": {
"button": "Velocidade"
}
},
"precise-volume": {
"description": "Controle o volume com precisão usando a roda do mouse/teclas de atalho, com um HUD personalizado e etapas de volume personalizáveis",
"menu": {
"arrows-shortcuts": "Controles de teclas de seta locais",
"custom-volume-steps": "Definir etapas de volume personalizadas",
"global-shortcuts": "Teclas de atalho globais"
},
"name": "Volume preciso",
"prompt": {
"global-shortcuts": {
"keybind-options": {
"decrease": "Diminuir volume",
"increase": "Aumentar volume"
},
"label": "Selecione as teclas de atalho global do volume:",
"title": "Teclas de atalho global de volume"
},
"volume-steps": {
"label": "Escolha as etapas de aumento/diminuição do volume",
"title": "Fases de volume"
}
}
},
"quality-changer": {
"backend": {
"dialog": {
"quality-changer": {
"detail": "Qualidade atual: {{quality}}",
"message": "Escolher qualidade do vídeo:",
"title": "Escolher qualidade do vídeo"
}
}
},
"description": "Permite alterar a qualidade do vídeo com um botão na sobreposição de vídeo",
"name": "Alterador de qualidade do vídeo"
},
"scrobbler": {
"description": "Adicionar suporte para scrobbling (last.fm, Listenbrainz, etc.)",
"dialog": {
"lastfm": {
"auth-failed": {
"message": "Falha ao autenticar com Last.fm\nOcultar o pop-up até a próxima reinicialização.",
"title": "Falha na autenticação"
}
}
},
"menu": {
"lastfm": {
"api-settings": "Configurações da API do Last.fm"
},
"listenbrainz": {
"token": "Insira o token de usuário ListenBrainz"
},
"scrobble-other-media": "Scrobble outras mídias"
},
"name": "Scrobbler",
"prompt": {
"lastfm": {
"api-key": "Chave de API do Last.fm",
"api-secret": "Chave secreta da API do Last.fm"
},
"listenbrainz": {
"token": {
"label": "Insira seu token de usuário do ListenBrainz:",
"title": "ListenBrainz token"
}
}
}
},
"shortcuts": {
"description": "Permite definir teclas de atalho globais para reprodução (reproduzir/pausar/próximo/anterior) e desativar o OSD de mídia substituindo as teclas de mídia, ativando Ctrl/CMD + F para pesquisar, ativando o suporte Linux MPRIS para teclas de mídia e teclas de atalho personalizadas para usuários avançados",
"menu": {
"override-media-keys": "Substituir chaves de multimédia",
"set-keybinds": "Definir controles globais de música"
},
"name": "Atalhos (& MPRIS)",
"prompt": {
"keybind": {
"keybind-options": {
"next": "Próximo",
"play-pause": "Reproduzir / Pausar",
"previous": "Anterior"
},
"label": "Escolha atalhos de teclado globais para controle de músicas:",
"title": "Atalhos de teclado global"
}
}
},
"skip-disliked-songs": {
"description": "Ignora músicas marcadas com \"não gostei\"",
"name": "Pular músicas marcadas com \"não gostei\""
},
"skip-silences": {
"description": "Pular automaticamente seções de silêncio em músicas",
"name": "Pular silêncios"
},
"sponsorblock": {
"description": "Pula automaticamente partes não musicais, como introdução/finalização ou partes de videoclipes onde a música não está tocando",
"name": "SponsorBlock [Bloquear patrocínios]"
},
"synced-lyrics": {
"description": "Fornece letras sincronizadas para músicas, usando provedores como LRClib.",
"errors": {
"fetch": "⚠️\tOcorreu um erro ao buscar a letra.\n\tTente novamente mais tarde.",
"not-found": "⚠️ Nenhuma letra encontrada para esta música."
},
"menu": {
"default-text-string": {
"label": "Caractere padrão entre letras",
"tooltip": "Escolha o caractere padrão a ser usado para o intervalo entre as letras"
},
"line-effect": {
"label": "Efeito de linha",
"submenu": {
"fancy": {
"label": "Fancy",
"tooltip": "Use efeitos grandes, semelhantes a aplicativos, na linha atual"
},
"focus": {
"label": "Foco",
"tooltip": "Deixe apenas a linha atual branca"
},
"offset": {
"label": "Deslocar",
"tooltip": "Deslocamento à direita da linha atual"
},
"scale": {
"label": "Aumentar",
"tooltip": "Aumentar a linha atual"
}
},
"tooltip": "Escolha o efeito a ser aplicado à linha atual"
},
"precise-timing": {
"label": "Deixa as letras perfeitamente sincronizadas",
"tooltip": "Calcular até o milissegundo a exibição da próxima linha (pode ter um pequeno impacto no desempenho)"
},
"show-lyrics-even-if-inexact": {
"label": "Mostrar letras mesmo que não sejam exatas",
"tooltip": "Se a música não for encontrada, o plugin tenta novamente com uma consulta de pesquisa diferente.\nO resultado da segunda tentativa pode não ser exato."
},
"show-time-codes": {
"label": "Mostrar códigos de tempo",
"tooltip": "Mostrar os códigos de tempo ao lado das letras"
}
},
"name": "Letras sincronizadas",
"refetch-btn": {
"fetching": "Buscando...",
"normal": "Buscar letras novamente"
},
"warnings": {
"duration-mismatch": "⚠️ - A letra pode estar dessincronizada devido a uma incompatibilidade de duração.",
"inexact": "⚠️ - A letra desta música pode não ser exata",
"instrumental": "⚠️ - Esta é uma música instrumental"
}
},
"taskbar-mediacontrol": {
"description": "Controle a reprodução na barra de tarefas do Windows",
"name": "Controle de mídia da barra de tarefas"
},
"touchbar": {
"description": "Adiciona um widget TouchBar para usuários do macOS",
"name": "TouchBar"
},
"tuna-obs": {
"description": "Integração com o plugin Tuna do OBS",
"name": "Tuna OBS"
},
"video-toggle": {
"description": "Adiciona um botão para alternar entre o modo Vídeo/Música. Também é possível remover opcionalmente toda a aba de vídeo",
"menu": {
"align": {
"label": "Alinhamento",
"submenu": {
"left": "Esquerda",
"middle": "Meio",
"right": "Direita"
}
},
"force-hide": "Forçar remoção da aba de vídeo",
"mode": {
"label": "Modo",
"submenu": {
"custom": "Alternância personalizada",
"disabled": "Desativado",
"native": "Alternância nativa"
}
}
},
"name": "Alternar vídeo",
"templates": {
"button": "Música"
}
},
"visualizer": {
"description": "Adiciona um visualizador ao player",
"menu": {
"visualizer-type": "Tipo de visualizador"
},
"name": "Visualizador"
}
}
}

View File

@ -158,6 +158,14 @@
},
"remove-upgrade-button": "Remover botão upgrade",
"theme": {
"dialog": {
"button": {
"cancel": "Cancelar",
"remove": "Remover"
},
"remove-theme": "Você tem certeza que quer remover o tema customizado?",
"remove-theme-message": "Isso removerá o tema customizado"
},
"label": "Tema",
"submenu": {
"import-css-file": "Importar arquivo CSS personalizado",
@ -170,7 +178,8 @@
},
"plugins": {
"enabled": "Ativado",
"label": "Plugins"
"label": "Plugins",
"new": "NOVO"
},
"view": {
"label": "Ver",
@ -190,10 +199,18 @@
"previous": "Anterior",
"quit": "Sair",
"restart": "Reiniciar aplicativo",
"show": "Mostrar janela"
"show": "Mostrar janela",
"tooltip": {
"default": "YouTube Music",
"with-song-info": "YouTube Music: {{artist}} - {{title}}"
}
}
},
"plugins": {
"ad-speedup": {
"description": "Se um anúncio for reproduzido, ele será silenciado o áudio e será definido a velocidade de reprodução para 16x",
"name": "Acelerar os anúncios"
},
"adblocker": {
"description": "Bloquear todos os anúncios e rastreamento automaticamente",
"menu": {
@ -201,8 +218,20 @@
},
"name": "Bloqueador de anúncios"
},
"album-actions": {
"description": "Adiciona os botões Anular Rejeição, Não Gostei, Gostei e Anular o Gosto para ser aplicado a todas as músicas de uma lista de reprodução ou álbum",
"name": "Ações no álbum"
},
"album-color-theme": {
"description": "Aplica um tema dinâmico e efeitos visuais com base na paleta de cores do álbum",
"menu": {
"color-mix-ratio": {
"label": "Relação de mistura de cores",
"submenu": {
"percent": "{{ratio}}%"
}
}
},
"name": "Tema de cores do álbum"
},
"ambient-mode": {
@ -250,6 +279,37 @@
},
"name": "Modo Ambiente"
},
"api-server": {
"dialog": {
"request": {
"buttons": {
"allow": "Permitir",
"deny": "Negar"
}
}
},
"menu": {
"auth-strategy": {
"label": "Estratégia de Autorização",
"submenu": {
"auth-at-first": {
"label": "Autorizar ao primeiro pedido"
},
"none": {
"label": "Sem autorização"
}
}
},
"port": {
"label": "Porta"
}
},
"prompt": {
"port": {
"title": "Porta"
}
}
},
"audio-compressor": {
"description": "Aplicar compressão ao áudio (diminui o volume das partes mais altas do sinal e aumenta o volume das partes mais suaves)",
"name": "Compressor de áudio"
@ -385,6 +445,21 @@
"description": "Baixa MP3 / fonte de áudio diretamente da interface",
"menu": {
"choose-download-folder": "Escolha a pasta de download",
"download-finish-settings": {
"label": "Baixar ao terminar",
"prompt": {
"last-percent": "Depois de x por cento",
"last-seconds": "Últimos x segundos",
"title": "Configurar quando baixar"
},
"submenu": {
"advanced": "Avançado",
"enabled": "Ativado",
"mode": "Modo de tempo",
"percent": "Porcentagem",
"seconds": "Segundos"
}
},
"download-playlist": "Baixar lista de reprodução",
"presets": "Predefinições",
"skip-existing": "Ignorar arquivos existentes"
@ -408,10 +483,6 @@
},
"name": "Menu no aplicativo"
},
"last-fm": {
"description": "Adiciona suporte de scrobbling para Last.fm",
"name": "Last.fm"
},
"lumiastream": {
"description": "Adiciona suporte Lumia Stream",
"name": "Lumia Stream [Beta]"
@ -426,6 +497,52 @@
"fetched-lyrics": "Buscar letras no Genius"
}
},
"music-together": {
"description": "Compartilha a playlist com outros. Quando o host tocar uma música, todos poderão ouvir a mesma canção",
"dialog": {
"enter-host": "Digite o ID do Host"
},
"internal": {
"save": "Salvar",
"track-source": "Fonte da faixa",
"unknown-user": "Usuário Desconhecido"
},
"menu": {
"click-to-copy-id": "Copiar ID do Host",
"close": "Fechar o Música Juntos",
"connected-users": "Usuários Conectados",
"disconnect": "Desconectar do Música Juntos",
"empty-user": "Sem usuários conectados",
"host": "Host do Música Juntos",
"join": "Juntar ao Música Juntos",
"permission": {
"all": "Permita que outros controlem a playlist e ao player",
"host-only": "Apenas o host pode controlar a playlist e ao player",
"playlist": "Permitir que outros controlem a playlist"
},
"set-permission": "Alterar permissões de controle",
"status": {
"disconnected": "Desconectado",
"guest": "Conectado como Convidado",
"host": "Conectado como Host"
}
},
"name": "Música Juntos [Beta]",
"toast": {
"add-song-failed": "Falha ao adicionar canção",
"closed": "Música Juntos encerrado",
"disconnected": "Música Juntos foi desconectado",
"host-failed": "Falha ao hospedar o Music Together",
"id-copied": "ID de anfitrião copiado para a área de transferência",
"id-copy-failed": "Falha ao copiar o ID de anfitrião para a área de transferência",
"join-failed": "Falha ao entrar em Music Together",
"joined": "Entrou em Music Together",
"permission-changed": "A permissão do Music Together foi alterada para \"{{permission}}\"",
"remove-song-failed": "Falha ao remover música",
"user-connected": "{{name}} entrou em Music Together",
"user-disconnected": "{{name}} saiu do Music Together"
}
},
"navigation": {
"description": "Setas de navegação Próximo/Voltar integradas diretamente na interface, como no seu navegador favorito",
"name": "Navegação"
@ -518,8 +635,41 @@
"description": "Permite alterar a qualidade do vídeo com um botão na sobreposição de vídeo",
"name": "Trocador de qualidade do vídeo"
},
"scrobbler": {
"description": "Adicionar suporte para scrobbling (Last.fm, ListenBrainz)",
"dialog": {
"lastfm": {
"auth-failed": {
"message": "Falha ao autenticar com a Last.fm\nOculte o pop-up até a próxima reinicialização.",
"title": "Falha na autenticação"
}
}
},
"menu": {
"lastfm": {
"api-settings": "Configurações de API Last.fm"
},
"listenbrainz": {
"token": "Insira o token de utilizador ListenBrainz"
},
"scrobble-other-media": "Scrobble outros mídia"
},
"name": "Scrobbler",
"prompt": {
"lastfm": {
"api-key": "Chave de API Last.fm",
"api-secret": "Segredo da API Last.fm"
},
"listenbrainz": {
"token": {
"label": "Insira seu token de usuário do ListenBrainz:",
"title": "Token ListenBrainz"
}
}
}
},
"shortcuts": {
"description": "Permite definir teclas de atalho globais para reprodução (reproduzir/pausar/próximo/anterior) e desligar o OSD de mídia substituindo as teclas de mídia, ativando Ctrl/CMD + F para pesquisar, ativando o suporte Linux MPRIS para teclas de mídia e teclas de atalho personalizadas para usuários avançados.",
"description": "Permite definir teclas de atalho globais para reprodução (reproduzir/pausar/próximo/anterior) e desligar o OSD de mídia substituindo as teclas de mídia, ativando Ctrl/CMD + F para pesquisar, ativando o suporte Linux MPRIS para teclas de mídia e teclas de atalho personalizadas para usuários avançados",
"menu": {
"override-media-keys": "Substituir teclas de mídia",
"set-keybinds": "Definir controles globais de música"
@ -549,6 +699,59 @@
"description": "Ignora automaticamente partes não musicais, como introdução/final ou partes de videoclipes onde a música não está tocando",
"name": "SponsorBlock (bloqueador de patrocínios)"
},
"synced-lyrics": {
"description": "Fornece letras sincronizadas de músicas, utilizando fornecedores como o LRClib.",
"errors": {
"fetch": "⚠️ - Ocorreu um erro ao obter as letras da música. Por favor, tenta novamente mais tarde.",
"not-found": "⚠️ - Não foram encontradas letras para esta música."
},
"menu": {
"default-text-string": {
"label": "Caractere padrão entre as letras",
"tooltip": "Escolha o caractere padrão para usar no espaço entre as letras"
},
"line-effect": {
"label": "Efeito de linha",
"submenu": {
"focus": {
"label": "Foco",
"tooltip": "Deixe apenas a linha atual branca"
},
"offset": {
"label": "Deslocamento",
"tooltip": "Desloque a linha atual para a direita"
},
"scale": {
"label": "Escala",
"tooltip": "Escalar a linha atual"
}
},
"tooltip": "Escolha o efeito a ser aplicado à linha atual"
},
"precise-timing": {
"label": "Sincronize perfeitamente as letras",
"tooltip": "Calcule até o milissegundo a exibição da próxima linha (pode ter um pequeno impacto no desempenho)"
},
"show-lyrics-even-if-inexact": {
"label": "Mostrar letras mesmo que imprecisas",
"tooltip": "Se a música não for encontrada, o plugin tenta novamente com uma consulta de pesquisa diferente.\nO resultado da segunda tentativa pode não ser exato."
},
"show-time-codes": {
"label": "Mostrar códigos de tempo",
"tooltip": "Mostrar os códigos de tempo ao lado das letras"
}
},
"name": "Letras Sincronizadas",
"refetch-btn": {
"fetching": "Buscando...",
"normal": "Buscar as letras novamente"
},
"warnings": {
"duration-mismatch": "⚠️ - As letras da música pode estar dessincronizada devido a um erro de duração.",
"inexact": "⚠️ - As letras desta música podem não ser exactas.",
"instrumental": "⚠️ - Esta é uma música instrumental."
}
},
"taskbar-mediacontrol": {
"description": "Controle a reprodução na barra de tarefas do Windows",
"name": "Controle de mídia da barra de tarefas"

813
src/i18n/resources/ro.json Normal file
View File

@ -0,0 +1,813 @@
{
"common": {
"console": {
"plugins": {
"execute-failed": "Nu s-a reusit executarea plugin-ului {{pluginName}}::{{contextName}}",
"executed-at-ms": "Plugin-ul {{pluginName}}::{{contextName}} s-a executat in {{ms}} ms",
"initialize-failed": "Initializarea plugin-ului \"{{pluginName}}\" a esuat",
"load-all": "Se incarca toate plugin-urile",
"load-failed": "Esec la incarcarea plugin-ului \"{{pluginName}}\"",
"loaded": "Plugin-ul \"{{pluginName}}\" s-a incarcat",
"unload-failed": "Esec la oprirea plugin-ului \"{{pluginName}}\"",
"unloaded": "Plugin-ul \"{{pluginName}}\" s-a terminat"
}
}
},
"language": {
"code": "ro",
"local-name": "Română",
"name": "Romanian"
},
"main": {
"console": {
"did-finish-load": {
"dev-tools": "S-a terminat incarcarea. Panoul de developer e deschis"
},
"i18n": {
"loaded": "i18n incarcat"
},
"second-instance": {
"receive-command": "Comanda primita prin protocol: \"{{command}}\""
},
"theme": {
"css-file-not-found": "Fisierul CSS \"{{cssFile}}\" nu exista, se ignora"
},
"unresponsive": {
"details": "Eroare, procesul nu raspunde\n{{error}}"
},
"when-ready": {
"clearing-cache-after-20s": "Se sterge cache-ul aplicatiei"
},
"window": {
"tried-to-render-offscreen": "Fereastra a incercat sa fie randata in afara ecranului, marimeaFerestrei={{windowSize}}, marimeaEcranului={{displaySize}}, pozitia={{position}}"
}
},
"dialog": {
"hide-menu-enabled": {
"detail": "Meniul este ascuns, folositi tasta 'Alt' pentru a-l face sa apara (sau tasta 'Esc' daca folositi meniul din aplicatie)",
"message": "Ascunderea meniului este activata",
"title": "Ascunderea meniului activata"
},
"need-to-restart": {
"buttons": {
"later": "Mai tarziu",
"restart-now": "Reporneste acum"
},
"detail": "Plugin-ul \"{{pluginName}}\" necesita o repornire pentru a intra in efect",
"message": "Pugin-ul \"{{pluginName}}\" trebuie repornit",
"title": "Repornire necesara"
},
"unresponsive": {
"buttons": {
"quit": "Iesi",
"relaunch": "Reporneste",
"wait": "Asteapta"
},
"detail": "Ne cerem scuze pentru incovenient! va rugam alegeti ce doriti sa faceti:",
"message": "Applicatia nu raspunde",
"title": "Fereastra nu raspunde"
},
"update-available": {
"buttons": {
"disable": "Dezactiveaza actualizarile",
"download": "Descarca",
"ok": "OK"
},
"detail": "O noua versiune este disponibila si poate fi descarcata pe {{downloadLink}}",
"message": "O noua versiune este disponibila",
"title": "Actualizare disponibila"
}
},
"menu": {
"about": "Despre",
"navigation": {
"label": "Navigatie",
"submenu": {
"copy-current-url": "Copiaza URL-ul actual",
"go-back": "Mergi inapoi",
"go-forward": "Mergi inainte",
"quit": "Iesi",
"restart": "Reporneste aplicatia"
}
},
"options": {
"label": "Setari",
"submenu": {
"advanced-options": {
"label": "Setari avansate",
"submenu": {
"auto-reset-app-cache": "Reseteaza cache-ul aplicatiei la pornire",
"disable-hardware-acceleration": "Dezactiveaza acceleratia hardware",
"edit-config-json": "Editeaza config,json",
"override-user-agent": "Suprascrie User-Agent-ul",
"restart-on-config-changes": "Reporneste la modificarea configuratiei",
"set-proxy": {
"label": "Seteaza proxy",
"prompt": {
"label": "Introduceti adresa proxy: (lasati liber pentru a dezactiva)",
"placeholder": "Exemplu: SOCKS5://127.0.0.1:9999",
"title": "Seteaza proxy"
}
},
"toggle-dev-tools": "Deschide uneltele de dezvoltator"
}
},
"always-on-top": "Mereu deasupra",
"auto-update": "Actualizare automata",
"hide-menu": {
"dialog": {
"message": "Meniul va fi ascuns la urmatoarea pornire, folositi [Alt] pentru a-l face sa apara (sau ghilimea intoarsa [`] daca folositi meniul applicatiei)",
"title": "Ascunderea meniului pornita"
},
"label": "Ascunde meniul"
},
"language": {
"dialog": {
"message": "Limba va fi schimbata dupa repornire",
"title": "Limba actualizata"
},
"label": "Limba",
"submenu": {
"to-help-translate": "Vrei să ajuți la traducere? Apasă aici"
}
},
"resume-on-start": "Continuă ultimul cântec ascultat când pornește aplicația",
"single-instance-lock": "Blocare cu o singură instanță",
"start-at-login": "Începe de la autentificare",
"starting-page": {
"label": "Pagina de pornire",
"unset": "Deselectat"
},
"tray": {
"label": "Tray",
"submenu": {
"disabled": "Dezactivat",
"enabled-and-hide-app": "Activează și ascunde fereastra aplicației",
"enabled-and-show-app": "Activează și arata fereastra aplicației",
"play-pause-on-click": "Start/Pauza la click"
}
},
"visual-tweaks": {
"label": "Modificări Vizuale",
"submenu": {
"like-buttons": {
"default": "Default",
"force-show": "Forțează randarea",
"hide": "Ascunde",
"label": "Butoane de like"
},
"remove-upgrade-button": "Elimina butonul de upgrade",
"theme": {
"dialog": {
"button": {
"cancel": "Anulează",
"remove": "Elimină"
},
"remove-theme": "Ești sigur că vrei să elimini tema personalizata?",
"remove-theme-message": "Acesta va elimina tema personalizata"
},
"label": "Tema",
"submenu": {
"import-css-file": "Importa fisiere CSS proprii",
"no-theme": "Fara tema"
}
}
}
}
}
},
"plugins": {
"enabled": "Activat",
"label": "Plugins",
"new": "NOU"
},
"view": {
"label": "Aspect",
"submenu": {
"force-reload": "Reimprospatare fortata",
"reload": "Reimprospateaza",
"reset-zoom": "Marimea actuala",
"toggle-fullscreen": "Porneste Full Screen",
"zoom-in": "Mareste",
"zoom-out": "Micsoreaza"
}
}
},
"tray": {
"next": "Urmatorul",
"play-pause": "Reda/Pauza",
"previous": "Anteriorul",
"quit": "Iesi",
"restart": "Reporneste aplicatia",
"show": "Arata fereastra",
"tooltip": {
"default": "YouTube Music",
"with-song-info": "YouTube Music: {{artist}} - {{title}}"
}
}
},
"plugins": {
"ad-speedup": {
"description": "Reclamele au sunetul dezactivat si viteza de redare este x16",
"name": "Accelerare reclame"
},
"adblocker": {
"description": "Blocheaza toate reclamele si trackers",
"menu": {
"blocker": "Blocator"
},
"name": "Blocator de reclame"
},
"album-actions": {
"description": "Adauga butoane pentru Undislike, Like si Unlike pentru toate piesele dintr-un playlist sau album",
"name": "Actiuni pentru album"
},
"album-color-theme": {
"description": "Aplica o tema dinamica si efecte vizuale bazate pe paleta de culori a albumului",
"menu": {
"color-mix-ratio": {
"label": "Raportul amestecului de culori",
"submenu": {
"percent": "{{ratio}}%"
}
}
},
"name": "Tema de culori a albumului"
},
"ambient-mode": {
"description": "Aplica un efect de iluminare, aplicand culori preluate din video pe fundalul ecranului",
"menu": {
"blur-amount": {
"label": "Cantitatea de blur",
"submenu": {
"pixels": "{{blurAmount}} pixeli"
}
},
"buffer": {
"label": "Buffer",
"submenu": {
"buffer": "{{buffer}}"
}
},
"opacity": {
"label": "Opacitate",
"submenu": {
"percent": "{{opacity}}%"
}
},
"quality": {
"label": "Calitate",
"submenu": {
"pixels": "{{quality}} pixeli"
}
},
"size": {
"label": "Marime",
"submenu": {
"percent": "{{size}}%"
}
},
"smoothness-transition": {
"label": "Fluenta tranzitiei",
"submenu": {
"during": "In timpul {{interpolationTime}} s"
}
},
"use-fullscreen": {
"label": "Foloseste fullscreen"
}
},
"name": "Mod ambiental"
},
"api-server": {
"description": "Adauga un server API pentru a controla player-ul",
"dialog": {
"request": {
"buttons": {
"allow": "Permite",
"deny": "Respinge"
},
"message": "Permite {{ID}} {{origin}} sa acceseze API-ul?",
"title": "Cerere autorizare API"
}
},
"menu": {
"auth-strategy": {
"label": "Strategie autorizare",
"submenu": {
"auth-at-first": {
"label": "Autorizare la prima cerere"
},
"none": {
"label": "Fara autorizare"
}
}
},
"hostname": {
"label": "Nume host"
},
"port": {
"label": "Port"
}
},
"name": "Server API [Beta]",
"prompt": {
"hostname": {
"label": "Introduceti nume host (0.0.0.0 de ex.) pentru server-ul API:",
"title": "Nume host"
},
"port": {
"label": "Introduceti port-ul pentru server-ul API:",
"title": "Port"
}
}
},
"audio-compressor": {
"description": "Aplica compresie pe audio (scade volumul partilor cele mai sonore si creste volumul partilor mai putin sonore)",
"name": "Compresor audio"
},
"blur-nav-bar": {
"description": "Fa bara de navigare semi-transparenta",
"name": "Bara de naviagtie semi-transparenta"
},
"bypass-age-restrictions": {
"description": "Treci peste verificarea de varsta a YouTube-ului",
"name": "Ignora restrictiile de varsta"
},
"captions-selector": {
"description": "Selector de subtitrari pentru piesele audio de pe YouTube Music",
"menu": {
"autoload": "Selecteaza automat ultima subtitrare folosita",
"disable-captions": "Fara subtitrari by default"
},
"name": "Selector de subtitrari",
"prompt": {
"selector": {
"label": "Limba curenta a subtitrarilor: {{language}}",
"none": "Niciuna",
"title": "Alege limba subtitrarilor"
}
},
"templates": {
"title": "Deschide selectorul de subtitrari"
}
},
"compact-sidebar": {
"description": "Pastreaza bara laterala mereu in modul compact",
"name": "Bara laterala compacta"
},
"crossfade": {
"description": "Tranzitioneaza intre cantece",
"menu": {
"advanced": "Avansat"
},
"name": "Tranzitie [Beta]",
"prompt": {
"options": {
"multi-input": {
"fade-in-duration": "Durata tranzitie de inceput (ms)",
"fade-out-duration": "Durata tranzitie de sfarsit (ms)",
"fade-scaling": {
"label": "Scala tranzitiei",
"linear": "Linear",
"logarithmic": "Logaritmic"
},
"seconds-before-end": "Tranzitie N secunde inainte de final"
},
"title": "Optiuni de tranzitie"
}
}
},
"disable-autoplay": {
"description": "Fa cantecul sa inceapa in modul \"pauza\"",
"menu": {
"apply-once": "Se aplica doar la pornirea aplicatiei"
},
"name": "Dezactiveaza redarea automata"
},
"discord": {
"backend": {
"already-connected": "S-a incercat conectarea cu o conexiune activa",
"connected": "Conectat la Discord",
"disconnected": "Deconectat de la Discord"
},
"description": "Arata-le prietenilor ce asculti cu Rich Presence",
"menu": {
"auto-reconnect": "Reconectare automata",
"clear-activity": "Sterge activitatea",
"clear-activity-after-timeout": "Sterge activitatea dupa timeout",
"connected": "Conectat",
"disconnected": "Deconectat",
"hide-duration-left": "Ascunde timpul ramas",
"hide-github-button": "Ascunde butonul cu link-ul GitHub",
"play-on-youtube-music": "Reda pe YouTube Music",
"set-inactivity-timeout": "Seteaza intervalul de inactivitate"
},
"name": "Discord Rich Presence",
"prompt": {
"set-inactivity-timeout": {
"label": "Introduceti perioada de inactivitate dorita in secunde:",
"title": "Seteaza timpul de inactivitate"
}
}
},
"downloader": {
"backend": {
"dialog": {
"error": {
"buttons": {
"ok": "OK"
},
"message": "Argh! Scuze, descarcarea a esuat…",
"title": "Eroare la descarcare!"
},
"start-download-playlist": {
"buttons": {
"ok": "OK"
},
"detail": "({{playlistSize}} cantece)",
"message": "Se descarca Playlist-ul {{playlistTitle}}",
"title": "Descarcarea a inceput"
}
},
"feedback": {
"conversion-progress": "Conversie: {{percent}}%",
"converting": "Se converteste…",
"done": "Descarcat: {{filePath}}",
"download-info": "Se descarca {{artist}} -{{title}} [{{videoId}}",
"download-progress": "Se descarca: {{percent}}%",
"downloading": "Se descarca…",
"downloading-counter": "Se descarca {{current}}/{{total}}…",
"downloading-playlist": "Se descarca playlist-ul \"{{playlistTitle}}\" - {{playlistSize}} piese ({{playlistId}})",
"error-while-downloading": "Eroare la descarcarea piesei \"{{author}} - {{title}}\":{{error}}",
"folder-already-exists": "Folderul {{playlistFolder}} exista deja",
"getting-playlist-info": "Se aduna informatiile despre playlist…",
"loading": "Se incarca…",
"playlist-has-only-one-song": "Playlist-ul are doar un element, acesta va fi descarcat direct",
"playlist-id-not-found": "Niciun ID al playlist-ului nu a fost gasit",
"playlist-is-empty": "Playlist-ul este gol",
"playlist-is-mix-or-private": "Eroare la colectarea informatiilor despre playlist: asigurati-va ca nu este privat sau un playlist \"Mixed for you\"\n\n{{error}}",
"preparing-file": "Se pregateste fisierul…",
"saving": "Se salveaza…",
"trying-to-get-playlist-id": "Se incearca obtinerea ID-ului playlist-ului: {{playlistId}}",
"video-id-not-found": "Video-ul nu a fost gasit",
"writing-id3": "Se scriu tag-urile ID3…"
}
},
"description": "Descarca MP3 / sursa audio direct din interfata",
"menu": {
"choose-download-folder": "Alege folderul de descarcari",
"download-finish-settings": {
"label": "Descarcare la finalizare",
"prompt": {
"last-percent": "Dupa x la suta",
"last-seconds": "Ultimele x secunde",
"title": "Configureaza cand sa descarce"
},
"submenu": {
"advanced": "Avansat",
"enabled": "Activat",
"mode": "Mod timp",
"percent": "Procentaj",
"seconds": "Secunde"
}
},
"download-playlist": "Descarca playlist-ul",
"presets": "Setari implicite",
"skip-existing": "Treci peste fisierele existente"
},
"name": "Downloader",
"renderer": {
"can-not-update-progress": "Nu se poate actualiza progresul"
},
"templates": {
"button": "Descarca"
}
},
"exponential-volume": {
"description": "Fa slider-ul de volum exponential pentru a fi mai usor de selectat volumuri reduse.",
"name": "Volum exponential"
},
"in-app-menu": {
"description": "Ofera barelor de meniu un aspect extravagant, intunecat sau de culoarea albumului",
"menu": {
"hide-dom-window-controls": "Ascunde controalele ferestrei DOM"
},
"name": "Meniul aplicatiei"
},
"lumiastream": {
"description": "Adauga asistenta pentru Lumia Stream",
"name": "Lumia Stream [Beta]"
},
"lyrics-genius": {
"description": "Adauga versuri pentru majoritatea cantecelor",
"menu": {
"romanized-lyrics": "Versuri romantizate"
},
"name": "Lyrics Genius",
"renderer": {
"fetched-lyrics": "Versuri preluate de pe Genius"
}
},
"music-together": {
"description": "Impartaseste playlist-ul cu altii. Cand gazda va pune o piesa, toti ceilalti vor auzi acelasi cantec",
"dialog": {
"enter-host": "Introdu ID-ul host-ului"
},
"internal": {
"save": "Salveaza",
"track-source": "Sursa piesei",
"unknown-user": "Utilizator necunoscut"
},
"menu": {
"click-to-copy-id": "Copiaza ID-ul host-ului",
"close": "Inchide Music Together",
"connected-users": "Utilizatori conectati",
"disconnect": "Deconecteaza Music Together",
"empty-user": "Niciun utilizator conectat",
"host": "Gazda Music Together",
"join": "Alatura-te Music Together",
"permission": {
"all": "Permite invitatilor sa controleze playlist-ul si player-ul",
"host-only": "Doar gazda poate controla playlist-ul si player-ul",
"playlist": "Permite invitatilor controlul asupra playlist-ului"
},
"set-permission": "Schimba controlul permisiunilor",
"status": {
"disconnected": "Deconectat",
"guest": "Conectat ca invitat",
"host": "Conectat ca gazda"
}
},
"name": "Music Together [Beta]",
"toast": {
"add-song-failed": "Adaugarea piesei a esuat",
"closed": "Music Together inchis",
"disconnected": "Music Together deconectat",
"host-failed": "Nu s-a reusit gazduirea Music Together",
"id-copied": "ID-ul host-ului a fost copiat in clipboard",
"id-copy-failed": "Eroare la copierea ID-ului host-ului in clipboard",
"join-failed": "Nu s-a reusit alaturarea la Music Together",
"joined": "V-ati alaturat Music Together",
"permission-changed": "Permisiunile Music Together s-au schimbat la \"{{permission}}\"",
"remove-song-failed": "Eroare la indepartarea cantecului",
"user-connected": "{{name}} s-a alaturat la Music Together",
"user-disconnected": "{{name}} a parasit Music Together"
}
},
"navigation": {
"description": "Sagetile pentru Urmatorul/Anteriorul integrate direct in interfata, ca in browser-ul tau preferat",
"name": "Navigatie"
},
"no-google-login": {
"description": "Elimina butonul de autentificare Google si link-urile din interfata",
"name": "Nicio autentificare Google"
},
"notifications": {
"description": "Afiseaza o notificare cand incepe sa cante o piesa (notificarile interactive sunt disponibile pe Windows)",
"menu": {
"interactive": "Notificari interactive",
"interactive-settings": {
"label": "Setari interactive",
"submenu": {
"hide-button-text": "Ascunde textul butoanelor",
"refresh-on-play-pause": "Reimprospateaza la Reda/Pauza",
"tray-controls": "Deschide/Inchide la apasarea icnoitei pentru meniul Tray"
}
},
"priority": "Prioritatea notificarilor",
"toast-style": "Stilul notificarilor",
"unpause-notification": "Arata notificarile la pauza"
},
"name": "Notificari"
},
"picture-in-picture": {
"description": "Permite sa schimbi aplicatie la modul picture-in-picture",
"menu": {
"always-on-top": "Mereu deasupra",
"hotkey": {
"label": "Scurtaturi pe tastatura",
"prompt": {
"keybind-options": {
"hotkey": "Scurtaturi din taste"
},
"label": "Scurtaturi din taste pentru picture-in-picture",
"title": "Scurtatura Picture-in-picture"
}
},
"save-window-position": "Salveaza pozitia ferestrei",
"save-window-size": "Salveaza marimea ferestrei",
"use-native-pip": "Foloseste PiP-ul nativ pentru broswer"
},
"name": "Picture-in-picture",
"templates": {
"button": "Picture-in-picture"
}
},
"playback-speed": {
"description": "Asculta rapid, asculta lent! Adauga un slider pentru viteza de redare a cantecului",
"name": "Viteza de redare",
"templates": {
"button": "Viteza"
}
},
"precise-volume": {
"description": "Controleaza volumul precis folosind rotita mouse-ului/scurtaturi din tastatura, cu un HUD personalizat si incremente de volum personalizate",
"menu": {
"arrows-shortcuts": "Control cu tastele sageti locale",
"custom-volume-steps": "Seteaza incrementele de volum",
"global-shortcuts": "Scurtaturi de tastatura globale"
},
"name": "Volum precis",
"prompt": {
"global-shortcuts": {
"keybind-options": {
"decrease": "Redu volumul audio",
"increase": "Creste volumul audio"
},
"label": "Alege combinatiile de taste globale pentru volumul audio:",
"title": "Combinatii globale de taste pentru volum"
},
"volume-steps": {
"label": "Alege pasii de increment pentru volum audio",
"title": "Incremente de volum"
}
}
},
"quality-changer": {
"backend": {
"dialog": {
"quality-changer": {
"detail": "Calitate actuala: {{quality}}",
"message": "Alegeti calitatea video:",
"title": "Alegeti calitatea video"
}
}
},
"description": "Permite schimbarea calitatii video cu un buton prezent peste video",
"name": "Modificator de calitate video"
},
"scrobbler": {
"description": "Adauga asistenta pentru scrobbling (etc. last.fm, Listenbrainz)",
"dialog": {
"lastfm": {
"auth-failed": {
"message": "Autentificarea cu Last.fm a esuat\nAscunde acest pop-up pana la urmatoarea repornire.",
"title": "Autentificare Esuata"
}
}
},
"menu": {
"lastfm": {
"api-settings": "Setari pentru API-ul Last.fm"
},
"listenbrainz": {
"token": "Introdu token-ul de utilizator ListenBrainz"
},
"scrobble-other-media": "Scrobble alte surse media"
},
"name": "Scrobbler",
"prompt": {
"lastfm": {
"api-key": "Cheia API Last.fm",
"api-secret": "Secret API Last.fm"
},
"listenbrainz": {
"token": {
"label": "Introdu token-ul tau de utilizator ListenBrainz:",
"title": "Token-ul ListenBrainz"
}
}
}
},
"shortcuts": {
"description": "Permite setari globale pentru scurtaturi pe tastatura pentru playback (reda/pauza/urmatorul/anteriorul), pentru oprirea media OSD prin suprascriera tastelor media, pentru folosirea combinatiei Ctrl/CMD + F pentru a cauta, pentru asistenta Linux MPRIS pentru taste media si pentru scurtaturi perosnalizate pentru utilizatori avansati",
"menu": {
"override-media-keys": "Suprascrie tastele media",
"set-keybinds": "Seteaza scurtaturile globale pentru cantece"
},
"name": "Scurtaturi (& MPRIS)",
"prompt": {
"keybind": {
"keybind-options": {
"next": "Urmatorul",
"play-pause": "Reda / Pauza",
"previous": "Anteriorul"
},
"label": "Alege combinatia de taste globala pentru controlul cantecelor:",
"title": "Scurtaturi pe tastatura globale"
}
}
},
"skip-disliked-songs": {
"description": "Sari peste cantecele disliked",
"name": "Treci peste cantecele disliked"
},
"skip-silences": {
"description": "Treci automat peste sectiunile de liniste din cantece",
"name": "Treci peste liniste"
},
"sponsorblock": {
"description": "Treci automat peste partile non-muzicale precum intro/outro sau parti din video-ul catecului, cand nu se aude cantecul",
"name": "SponsorBlock"
},
"synced-lyrics": {
"description": "Furnizeaza versuri sincronizate melodiilor, folosind furnizori precum LRClib.",
"errors": {
"fetch": "⚠️ - A aparut o eroare in timpul incarcarii versurilor. Te rog incearca din nou mai tarziu.",
"not-found": "⚠️ - Nu au fost gasite versuri pentru aceasta melodie."
},
"menu": {
"default-text-string": {
"label": "Caracter implicit intre versuri",
"tooltip": "Alege caracterul implicit folosit pentru spatiul dintre versuri"
},
"line-effect": {
"label": "Efect de linie",
"submenu": {
"focus": {
"label": "Focalizare",
"tooltip": "Doar linia curenta este alba"
},
"offset": {
"label": "Offset",
"tooltip": "Deplasare la dreapta pentru linia curenta"
},
"scale": {
"label": "Marime",
"tooltip": "Schimba dimensiunea liniei curente"
}
},
"tooltip": "Alege efectul aplicat liniei curente"
},
"precise-timing": {
"label": "Sincronizeaza versurile perfect",
"tooltip": "Calculeaza afisarea urmatoarei linii pana la milisecunda (poate afecta performanta)"
},
"show-lyrics-even-if-inexact": {
"label": "Afiseaza versurile chiar daca sunt inexacte",
"tooltip": "Daca melodia nu este gasita, plugin-ul incearca din nou cu o cautare diferita.\nRezultatul acestei incercari poate sa nu fie exact."
},
"show-time-codes": {
"label": "Afiseaza timecode-urile",
"tooltip": "Afiseaza codurile de timp langa versuri"
}
},
"name": "Versuri Sincronizate",
"refetch-btn": {
"fetching": "Incarcare...",
"normal": "Reincarcare versuri"
},
"warnings": {
"duration-mismatch": "⚠️ - Versurile pot fi desincronizate din cauza unei nepotriviri de duratie.",
"inexact": "⚠️ - Versurile pentru aceasta melodie pot fi inexacte",
"instrumental": "⚠️ - Aceasta melodie este instrumentala"
}
},
"taskbar-mediacontrol": {
"description": "Controleaza redarea din Bara de Activitati Windows",
"name": "Control media in Bara de Activitate"
},
"touchbar": {
"description": "Adauga un widget TouchBar pentru utilizatorii macOS",
"name": "TouchBar"
},
"tuna-obs": {
"description": "Integrare cu plugin-ul OBS Tuna",
"name": "Tuna OBS"
},
"video-toggle": {
"description": "Adauga un buton ce schimba intre modurile Video/Cantec. se poate optional elimia complet optiunea video",
"menu": {
"align": {
"label": "Aliniere",
"submenu": {
"left": "Stanga",
"middle": "Mijloc",
"right": "Dreapta"
}
},
"force-hide": "Forteaza eliminarea tab-ului video",
"mode": {
"label": "Mod",
"submenu": {
"custom": "Comutatoare personalizate",
"disabled": "Dezactivat",
"native": "Comutatoare native"
}
}
},
"name": "Comutator video",
"templates": {
"button": "Cantec"
}
},
"visualizer": {
"description": "Adauga un visualizer la player",
"menu": {
"visualizer-type": "Tip de visualizer"
},
"name": "Visualizer"
}
}
}

View File

@ -33,7 +33,7 @@
"css-file-not-found": "CSS файл \"{{cssFile}}\" не существует, игнорирую"
},
"unresponsive": {
"details": "Приложение не отвечает\n{{error}}"
"details": "Приложение не отвечает!\n{{error}}"
},
"when-ready": {
"clearing-cache-after-20s": "Очищаю кеш приложения"
@ -63,7 +63,7 @@
"relaunch": "Перезапустить",
"wait": "Подождать"
},
"detail": "Извиняемся за неувязку! пожалуйста выберите что вы хотите сделать:",
"detail": "Извините за причиненные неудобства! Пожалуйста, выберите, что делать:",
"message": "Приложение не отвечает",
"title": "Окно не отвечает"
},
@ -158,6 +158,14 @@
},
"remove-upgrade-button": "Убрать кнопку Youtube Premium",
"theme": {
"dialog": {
"button": {
"cancel": "Отмена",
"remove": "Убрать"
},
"remove-theme": "Вы уверены, что хотите убрать пользовательскую тему?",
"remove-theme-message": "Это уберёт пользовательскую тему"
},
"label": "Тема",
"submenu": {
"import-css-file": "Импортировать кастомный CSS файл",
@ -170,14 +178,15 @@
},
"plugins": {
"enabled": "Включено",
"label": "Плагины"
"label": "Плагины",
"new": "НОВИНКА"
},
"view": {
"label": "Вид",
"submenu": {
"force-reload": "Принудительная перезагрузка",
"reload": "Перезагрузить",
"reset-zoom": "Настоящий размер",
"reset-zoom": "Текущий размер",
"toggle-fullscreen": "Включить полноэкранный режим",
"zoom-in": "Приблизить",
"zoom-out": "Отдалить"
@ -190,10 +199,18 @@
"previous": "Предыдущий",
"quit": "Выйти",
"restart": "Перезагрузить приложение",
"show": "Показать окно"
"show": "Показать окно",
"tooltip": {
"default": "YouTube Music",
"with-song-info": "YouTube Music: {{artist}} - {{title}}"
}
}
},
"plugins": {
"ad-speedup": {
"description": "Если воспроизводится реклама, аудио заглушается и скорость воспроизведения устанавливается на 16х",
"name": "Ускоренная перемотка"
},
"adblocker": {
"description": "Блокируйте всю рекламу и трекинг сразу после установки",
"menu": {
@ -201,12 +218,24 @@
},
"name": "Блокировщик рекламы"
},
"album-actions": {
"description": "Добавляет кнопки Undislike, Dislike и Unlike, чтобы применять их на все композиции в плейлисте или альбоме",
"name": "Действия с альбомом"
},
"album-color-theme": {
"description": "Применяет динамическую тему и визуальные эффекты на основе цветовой палитры альбома",
"menu": {
"color-mix-ratio": {
"label": "Соотношение цветов",
"submenu": {
"percent": "{{ratio}}%"
}
}
},
"name": "Цветовая тема альбома"
},
"ambient-mode": {
"description": "Применяет световой эффект, отбрасывая мягкие цвета из видео на задний фон вашего экрана.",
"description": "Применяет световой эффект, отбрасывая мягкие цвета из видео на задний фон вашего экрана",
"menu": {
"blur-amount": {
"label": "Степень размытия",
@ -250,9 +279,52 @@
},
"name": "Режим Ambient"
},
"api-server": {
"description": "Добавляет API сервер для контроля за плеером",
"dialog": {
"request": {
"buttons": {
"allow": "Разрешить",
"deny": "Отказать"
},
"message": "Разрешить {{ID}} ({{origin}}) доступ к API?",
"title": "Запрос на авторизацию в API"
}
},
"menu": {
"auth-strategy": {
"label": "Способ авторизации",
"submenu": {
"auth-at-first": {
"label": "Авторизация при первом запросе"
},
"none": {
"label": "Без авторизации"
}
}
},
"hostname": {
"label": "Имя хоста"
},
"port": {
"label": "Порт"
}
},
"name": "API Сервер [БЕТА]",
"prompt": {
"hostname": {
"label": "Введите имя хоста (на подобии 0.0.0.0) для API сервера:",
"title": "Имя хоста"
},
"port": {
"label": "Введите порт для API сервера:",
"title": "Порт"
}
}
},
"audio-compressor": {
"description": "Применяет компрессию к аудио (уменьшает громкость самых громких частей сигнала и повышает громкость самых тихих частей)",
"name": "Аудио компрессор"
"name": "Нормализация аудио"
},
"blur-nav-bar": {
"description": "Делает панель навигации прозрачной и размытой",
@ -385,6 +457,21 @@
"description": "Скачивать MP3 / исходное аудио напрямую из интерфейса",
"menu": {
"choose-download-folder": "Выберите папку для загрузок",
"download-finish-settings": {
"label": "Скачать по завершению",
"prompt": {
"last-percent": "После х процентов",
"last-seconds": "Осталось x сек",
"title": "Условия скачивания"
},
"submenu": {
"advanced": "Расширенные настройки",
"enabled": "Включено",
"mode": "Режим по времени",
"percent": "Процент",
"seconds": "Секунды"
}
},
"download-playlist": "Скачать плейлист",
"presets": "Пресеты",
"skip-existing": "Пропускать уже существующие файлы"
@ -394,26 +481,116 @@
"can-not-update-progress": "Невозможно обновить прогресс"
},
"templates": {
"button": "Download"
"button": "Скачать"
}
},
"equalizer": {
"description": "Добавляет эквалайзер к плееру",
"menu": {
"presets": {
"label": "Предустановки",
"list": {
"bass-booster": "Усилитель баса"
}
}
},
"name": "Эквалайзер"
},
"exponential-volume": {
"description": "Делает слайдер громкости расширенным чтобы было легче выбирать низкие уровни.",
"description": "Делает слайдер громкости расширенным чтобы было легче понижать громкость.",
"name": "Расширенная громкость"
},
"in-app-menu": {
"description": "Придает меню модный вид"
"description": "Придает меню цветовую схему альбома",
"menu": {
"hide-dom-window-controls": "Скрыть элементы управления окном DOM"
},
"name": "Меню в приложении"
},
"last-fm": {
"name": "Last.fm"
"lumiastream": {
"description": "Добавляет поддержку Lumia Stream",
"name": "Lumia Stream [бета]"
},
"lyrics-genius": {
"description": "Добавляет поддержку текстов для большинства композиций",
"menu": {
"romanized-lyrics": "Романизированный текст (any -> en)"
},
"name": "Тексты песен от Genius",
"renderer": {
"fetched-lyrics": "Текст от Genius был получен"
}
},
"music-together": {
"description": "Поделитесь плейлистом с другими. Когда хост играет песню, все остальные слышат ту же песню",
"dialog": {
"enter-host": "Введите ID хоста"
},
"internal": {
"save": "Сохранить",
"track-source": "Источник трека",
"unknown-user": "Неизвестный пользователь"
},
"menu": {
"click-to-copy-id": "Копировать ID хоста",
"close": "Закрыть Music Together",
"connected-users": "Подключенные пользователи",
"disconnect": "Отключиться от Music Together",
"empty-user": "Нет подключенных пользователей",
"host": "Хост Music Together",
"join": "Подключиться к Music Together",
"permission": {
"all": "Позволить гостям управлять плейлистом и плеером",
"host-only": "Только хост может управлять плейлистом и плеером",
"playlist": "Позволить гостям управлять плейлистом"
},
"set-permission": "Изменить разрешения на управление разрешениями",
"status": {
"disconnected": "Отключено",
"guest": "Подключен как гость",
"host": "Подключен как хост"
}
},
"name": "Music Together [Beta]",
"toast": {
"add-song-failed": "Не удалось добавить песню",
"closed": "Music Together закрыт",
"disconnected": "Music Together отключен",
"host-failed": "Не удалось запустить Music Together",
"id-copied": "ID хоста скопирован в буфер обмена",
"id-copy-failed": "Не удалось скопировать айди хоста в буфер обмена",
"join-failed": "Не удалось присоединиться к Music Together",
"joined": "Присоединился к Music Together",
"permission-changed": "Разрешения Music Together изменены на \"{{permission}}\"",
"remove-song-failed": "Не удалось удалить песню",
"user-connected": "{{name}} присоединился к Music Together",
"user-disconnected": "{{name}} отключился от Music Together"
}
},
"navigation": {
"description": "Стрелки навигации \"вперед/назад\" интегрированы в интерфейс, как в вашем любимом браузере",
"name": "Навигация"
},
"no-google-login": {
"name": "No Google Login"
"description": "Убрать из интерфейса кнопки и ссылки для входа через Google",
"name": "Без входа в систему Google"
},
"notifications": {
"description": "Показывать уведомления о начале воспроизведения песни (интерактивные уведомления доступны в Windows)",
"menu": {
"interactive": "Интерактивные уведомления",
"interactive-settings": {
"label": "Интерактивные настройки",
"submenu": {
"hide-button-text": "Скрыть текст кнопки",
"refresh-on-play-pause": "Перезагрузка при воспроизведении/паузе",
"tray-controls": "Открывать/закрывать по нажатию в трее"
}
},
"priority": "Приоритет уведомлений",
"toast-style": "Стиль уведомления",
"unpause-notification": "Показывать уведомление при снятии с паузы"
},
"name": "Уведомления"
},
"picture-in-picture": {
@ -426,42 +603,205 @@
"keybind-options": {
"hotkey": "Горячая клавиша"
},
"label": "Выберите горячую клавишу для переключения режима изображения в изображении"
"label": "Выберите горячую клавишу для переключения режима изображения в изображении",
"title": "Горячая клавиша для картинки в картинке"
}
},
"save-window-position": "Сохранить положение окна",
"save-window-size": "Сохранить размер окна"
"save-window-size": "Сохранить размер окна",
"use-native-pip": "Использовать нативный PiP браузера"
},
"name": "Картинка в картинке",
"templates": {
"button": "Картинка в картинке"
}
},
"shortcuts": {
"playback-speed": {
"description": "Слушайте быстро, слушайте медленно! Добавляет ползунок, регулирующий скорость композиции",
"name": "Скорость воспроизведения",
"templates": {
"button": "Скорость"
}
},
"precise-volume": {
"description": "Точное управление громкостью с помощью колеса мышки/горячих клавиш, пользовательский HUD и настраиваемые ступени громкости",
"menu": {
"arrows-shortcuts": "Локальное управление со стрелками",
"custom-volume-steps": "Настройка пользовательских шагов громкости",
"global-shortcuts": "Глобальные горячие клавиши"
},
"name": "Точная громкость",
"prompt": {
"keybind": {
"global-shortcuts": {
"keybind-options": {
"next": "Next"
"decrease": "Уменьшение громкости",
"increase": "Увеличение громкости"
},
"label": "Выберите глобальные привязки клавиш к громкости:",
"title": "Глобальные привязки клавиш громкости"
},
"volume-steps": {
"label": "Выберите шаги увеличения/уменьшения громкости",
"title": "Ступени громкости"
}
}
},
"quality-changer": {
"backend": {
"dialog": {
"quality-changer": {
"detail": "Текущее качество: {{quality}}",
"message": "Выберите качество видео:",
"title": "Выберите качество видео"
}
}
},
"description": "Позволяет изменять качество видео с помощью кнопки на оверлее видео",
"name": "Изменение качества видео"
},
"scrobbler": {
"description": "Добавляет поддержку скробблинга (last.fm, Listenbrainz)",
"dialog": {
"lastfm": {
"auth-failed": {
"message": "Не удалось войти с помощью Last.fm\nСкрыть сообщение до следующего запуска.",
"title": "Ошибка аунтефикации"
}
}
},
"menu": {
"lastfm": {
"api-settings": "Настройки API Last.fm"
},
"listenbrainz": {
"token": "Введите токен пользователя ListenBrainz"
},
"scrobble-other-media": "Скробблинг других медиа"
},
"name": "Скробблер",
"prompt": {
"lastfm": {
"api-key": "Ключ API Last.fm",
"api-secret": "Секрет API Last.fm"
},
"listenbrainz": {
"token": {
"label": "Введите токен пользователя ListenBrainz:",
"title": "Токен ListenBrainz"
}
}
}
},
"shortcuts": {
"description": "Позволяет задать глобальные горячие клавиши для воспроизведения (play/pause/next/previous) и отключить экранное мультимедийное меню, изменяя мультимедийные клавиши, также включает Ctrl/CMD + F для поиска, добавляет поддержку Linux MPRIS для мультимедийных клавиш, а также пользовательские горячие клавиши для опытных пользователей",
"menu": {
"override-media-keys": "Переопределение мультимедийных клавиш",
"set-keybinds": "Настройка глобальных элементов управления песней"
},
"name": "Ярлыки (и MPRIS)",
"prompt": {
"keybind": {
"keybind-options": {
"next": "Следующая",
"play-pause": "Воспроизведение / Пауза",
"previous": "Предыдущая"
},
"label": "Выберите глобальные привязки клавиш для управления песнями:",
"title": "Глобальные привязки клавиш"
}
}
},
"skip-disliked-songs": {
"description": "Пропускает непонравившиеся песни",
"name": "Пропустить непонравившиеся песни"
},
"skip-silences": {
"description": "Автоматически пропускает тихие моменты в песнях",
"name": "Пропустить тишину"
},
"sponsorblock": {
"description": "Автоматически пропускает не музыкальные фрагменты, например интро/аутро или фрагменты музыкальных клипов, в которых песня не звучит (тишина)",
"name": "SponsorBlock"
},
"synced-lyrics": {
"description": "Предоставляет синхронизированные слова для песен из таких источников, как LRClib.",
"errors": {
"fetch": "⚠️ - Возникла ошибка во время получения слов. Повторите попытку позже.",
"not-found": "⚠️ - Для этой песни не найдено слов."
},
"menu": {
"default-text-string": {
"label": "Стандартный символ между словами",
"tooltip": "Выберите стандартный символ для заполнения пространства между словами"
},
"line-effect": {
"label": "Эффект строки",
"submenu": {
"focus": {
"label": "Фокусировка",
"tooltip": "Делает только текущую строку белой"
},
"offset": {
"label": "Сдвиг",
"tooltip": "Сдвигает текущую строку вправо"
},
"scale": {
"label": "Увеличение",
"tooltip": "Увеличивает текущую строку"
}
},
"tooltip": "Выберите эффект применяемый к текущей строке"
},
"precise-timing": {
"label": "Идеально синхронизировать слова",
"tooltip": "До миллисекунды рассчитывает отображение следующей строки(может оказать небольшое влияние на производительность)"
},
"show-lyrics-even-if-inexact": {
"label": "Показывать слова, даже если неточные",
"tooltip": "Если песня не найдена, плагин попытается снова с другим поисковым запросом.\nСо второй попытки результат может быть неточным."
},
"show-time-codes": {
"label": "Показывать временные метки",
"tooltip": "Показывает временные метки рядом со словами"
}
},
"name": "Синхронизированные тексты песен",
"refetch-btn": {
"fetching": "Сбор данных...",
"normal": "Обновить слова"
},
"warnings": {
"duration-mismatch": "⚠️ - Слова могут быть неточно синхронизированы из-за несовпадения длины трека.",
"inexact": "⚠️ - Слова для этой песни могут быть неточными",
"instrumental": "⚠️ - Это инструментальная музыка"
}
},
"taskbar-mediacontrol": {
"description": "Управляйте воспроизведением с панели задач Windows",
"name": "Управление мультимедиа на панели задач"
},
"touchbar": {
"description": "Добавляет виджет тачбара для пользователей macOS",
"name": "Тачбар"
},
"tuna-obs": {
"description": "Интеграция с плагином Tuna от OBS",
"name": "Tuna OBS"
},
"video-toggle": {
"description": "Добавляет кнопку для переключения между режимами видео и песни. Также можно удалить всю вкладку с видео",
"menu": {
"align": {
"label": "Выравнивание",
"submenu": {
"middle": "Middle",
"right": "Right"
"left": "Слева",
"middle": "По центру",
"right": "Справа"
}
},
"force-hide": "Скрыть обложку",
"force-hide": "Принудительное скрыть видео",
"mode": {
"label": "Mode",
"label": "Режим",
"submenu": {
"custom": "Кастомный переключатель",
"disabled": "Отключен",
@ -471,7 +811,7 @@
},
"name": "Переключатель видео",
"templates": {
"button": "Song"
"button": "Песня"
}
},
"visualizer": {
@ -479,7 +819,7 @@
"menu": {
"visualizer-type": "Вид визуализации"
},
"name": "Визуалайзер"
"name": "Визуализатор"
}
}
}

105
src/i18n/resources/si.json Normal file
View File

@ -0,0 +1,105 @@
{
"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": "si",
"local-name": "සිංහල",
"name": "Sinhala"
},
"main": {
"console": {
"did-finish-load": {
"dev-tools": "පූරණය සම්පුර්නි. ඩෙව්ටූල්ස් ඇරිලා"
},
"i18n": {
"loaded": "i18n පූරණය කර ඇත"
},
"second-instance": {
"receive-command": "ප්‍රෝටෝකාල් හරහා විධානය ලැබුණි: \"{{command}}\""
},
"theme": {
"css-file-not-found": "සීඑස්එස් ගොනුව \"{{cssFile}}\" නොපවතී, නොසලකා හැරීම"
},
"unresponsive": {
"details": "ප්‍රතිචාර නොදක්වන දෝෂයක් {{error}}"
},
"when-ready": {
"clearing-cache-after-20s": "යෙදුම් කෑශ් නිදහස් කරමින්"
}
},
"dialog": {
"hide-menu-enabled": {
"detail": "මෙනුව සැගවී ඇත, 'Alt' යතුර නැවත පෙන්වීමට භාවිතා කරන්න. (හෝ In-App මෙනුවේ 'Escape')",
"message": "මෙනුව සැගවීම සාර්තකයි",
"title": "මෙනුව සැගවීම සක්‍රීයයි"
},
"need-to-restart": {
"buttons": {
"later": "පසුව",
"restart-now": "යෙදුම වසා නැවත ආරම්භ කරන්න"
},
"detail": "\"{{pluginName}}\" ප්ලගිනය යෙදුම නැවත ආරම්භ කිරීමක් ඉල්ලයි",
"message": "\"{{pluginName}}\" නැවත ආරම්භ කළ යුතුය",
"title": "නැවත ආරම්භ කිරීම අවශ්‍යයි"
},
"unresponsive": {
"buttons": {
"quit": "ඉවත් වන්න",
"relaunch": "නැවත ආරම්භ කරන්න",
"wait": "රැදී සිටින්න"
},
"detail": "සිදු වූ දේ සම්බන්ධව අපගේ කණගාටුව! කළ යුතු දේ තෝරන්න:",
"message": "යෙදුම ප්‍රතිචාර නොදක්වයි",
"title": "වින්ඩෝව ප්‍රතිචාර නොදක්වයි"
},
"update-available": {
"buttons": {
"disable": "යාවත්කාලීන කිරීම් නවතන්න",
"download": "බාගත කිරීම",
"ok": "හරි"
},
"detail": "නව අනුවාදයක් ඇති අතර එය මෙයින් බාගන්න {{downloadLink}}",
"message": "නව අනුවාදයක් ඇත",
"title": "යාවත්කාලීන කිරීමක් ඇත"
}
},
"menu": {
"about": "පිළිබදව",
"navigation": {
"label": "සංචලනය",
"submenu": {
"copy-current-url": "යොමුව පිටපත් කරගන්න",
"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 සකසන්න"
}
}
}
}
}
}
}

553
src/i18n/resources/sl.json Normal file
View File

@ -0,0 +1,553 @@
{
"common": {
"console": {
"plugins": {
"execute-failed": "Napaka pri inicilizaciji dodatka {{pluginName}}::{{contextName}}",
"executed-at-ms": "Dodatek {{pluginName}}::{{contextName}} izvršen pri {{ms}}ms",
"initialize-failed": "Napaka pri inicilizaciji dodatka \"{{pluginName}}\"",
"load-all": "Nalaganje dodatkov",
"load-failed": "Napaka pri nalaganju dodatka \"{{pluginName}}\"",
"loaded": "Dodatek \"{{pluginName}}\" naložen",
"unload-failed": "Napaka pri raztvorbi dodatka \"{{pluginName}}\"",
"unloaded": "Dodatek \"{{pluginName}}\" raztvorjen"
}
}
},
"language": {
"code": "sl",
"local-name": "Slovenščina",
"name": "Slovenian"
},
"main": {
"console": {
"did-finish-load": {
"dev-tools": "Nalaganje končano. DevTools odprt"
},
"i18n": {
"loaded": "i18n naložen"
},
"second-instance": {
"receive-command": "Prejel ukaz preko protokola: \"{{command}}\""
},
"theme": {
"css-file-not-found": "CSS datoteka \"{{cssFile}}\" ne obstaja, ignoriram"
},
"unresponsive": {
"details": "Neodzivna napaka!\n{{error}}"
},
"when-ready": {
"clearing-cache-after-20s": "Čiščenje predpomnilnika"
},
"window": {
"tried-to-render-offscreen": "Okno se je poskusilo prikazati izven ekrana, windowSize={{windowSize}}, displaySize={{displaySize}}, position={{position}}"
}
},
"dialog": {
"hide-menu-enabled": {
"detail": "Meni je skrit, pritisni 'Alt' za odpiranje (ali 'Escape' če uporabljaš In-App Meni)",
"message": "Skriti meni je prižgan",
"title": "Skrij meni vklopljen"
},
"need-to-restart": {
"buttons": {
"later": "Kasneje",
"restart-now": "Ponovno zaženi zdaj"
},
"detail": "\"{{pluginName}}\" dodatek potrebuje ponovni zagon",
"message": "\"{{pluginName}}\" je potrebno ponovno zagnati",
"title": "Potreben je ponovni zagon"
},
"unresponsive": {
"buttons": {
"quit": "Zapri",
"relaunch": "Ponovno zaženi",
"wait": "Počakaj"
},
"detail": "Opravičujemo se za nevšečnost! Prosim odločite se kaj narediti:",
"message": "Aplikacija se ne odziva",
"title": "Okno se ne odziva"
},
"update-available": {
"buttons": {
"disable": "Izklopi posodobitve",
"download": "Prenesi",
"ok": "OK"
},
"detail": "Nova verzija je na voljo, lahko jo naložiš na {{downloadLink}}",
"message": "Nova verzija je na voljo",
"title": "Posodobitev je na voljo"
}
},
"menu": {
"about": "O aplikaciji",
"navigation": {
"label": "Navigacija",
"submenu": {
"copy-current-url": "Kopiraj trenutni URL",
"go-back": "Nazaj",
"go-forward": "Naprej",
"quit": "Izhod",
"restart": "Ponovni zagon"
}
},
"options": {
"label": "Nastavitve",
"submenu": {
"advanced-options": {
"label": "Dodatne nastavitve",
"submenu": {
"auto-reset-app-cache": "Resetiraj predpomnilnik aplikacije ob zagonu",
"disable-hardware-acceleration": "Izklopi strojno pospeševanje",
"edit-config-json": "Spremeni config.json",
"override-user-agent": "Prepiši User-Agent",
"restart-on-config-changes": "Ponovni zagon ko se spremeni config",
"set-proxy": {
"label": "Nastavi proxy",
"prompt": {
"label": "Napiši Proxy naslov: (pusti prazno, da izklopiš)",
"placeholder": "Primer: SOCKS5://127.0.0.1:9999",
"title": "Nastavi Proxy"
}
},
"toggle-dev-tools": "Vklopi DevTools"
}
},
"always-on-top": "Vedno na vrhu",
"auto-update": "Avtomatsko posodobi",
"hide-menu": {
"dialog": {
"message": "Meni se bo skrit pri naslednjem zagonu, uporabi [Alt] da se prikaže (ali [`] v meniju aplikacije)",
"title": "Skrij meni vklopljen"
},
"label": "Skrij meni"
},
"language": {
"dialog": {
"message": "Jezik bo spremenjen po ponovnem zagonu",
"title": "Jezik je bil spremenjen"
},
"label": "Jezik",
"submenu": {
"to-help-translate": "Želiš pomagati pri prevajanju? Klikni tukaj"
}
},
"resume-on-start": "Predvajaj zadnjo pesem, ko se aplikacija zažene",
"single-instance-lock": "Zaklep ene instance",
"start-at-login": "Zaženi pri zagonu",
"starting-page": {
"label": "Začetna stran",
"unset": "Ni nastavljeno"
},
"tray": {
"label": "Pladenj",
"submenu": {
"disabled": "Izklopljeno",
"enabled-and-hide-app": "Vklopljeno in skrij",
"enabled-and-show-app": "Vklopljeno in pokaži",
"play-pause-on-click": "Predvajaj/Pavza z klikom"
}
},
"visual-tweaks": {
"label": "Vizualni popravki",
"submenu": {
"like-buttons": {
"default": "Privzeto",
"force-show": "Prisilno pokaži",
"hide": "Skrij",
"label": "Gumbi za všečkanje"
},
"remove-upgrade-button": "Odstrani gumb za nadgradnjo",
"theme": {
"dialog": {
"button": {
"cancel": "Prekliči",
"remove": "Odstrani"
},
"remove-theme": "Ali želite odstraniti temo po meri?",
"remove-theme-message": "Tema po meri bo odstranjena"
},
"label": "Tema",
"submenu": {
"import-css-file": "Vstavi poljubni CSS",
"no-theme": "Brez teme"
}
}
}
}
}
},
"plugins": {
"enabled": "Vključeno",
"label": "Dodatki",
"new": "NOVO"
},
"view": {
"label": "Pogled",
"submenu": {
"force-reload": "Prisilno ponovno naloži",
"reload": "Ponovno naloži",
"reset-zoom": "Prava velikost",
"toggle-fullscreen": "Prikaži cel zaslon",
"zoom-in": "Povečaj",
"zoom-out": "Pomanjšaj"
}
}
},
"tray": {
"next": "Naprej",
"play-pause": "Predvajaj/Pavza",
"previous": "Prejšni",
"quit": "Izhod",
"restart": "Ponovni zagon",
"show": "Pokaži okno",
"tooltip": {
"default": "YouTube Glasba",
"with-song-info": "YouTube Glasba: {{artist}} - {{title}}"
}
}
},
"plugins": {
"ad-speedup": {
"description": "Če se predvaja oglas se zvok utišja. Prav tako se hitrost predvajanja nastavi na 16 krat",
"name": "Pospeševanje oglasov"
},
"adblocker": {
"description": "Izklopi vse oglase in sledenje",
"menu": {
"blocker": "Blokator"
},
"name": "Blokator reklam"
},
"album-actions": {
"description": "Doda Undislike, Dislike, Like, in Unlike gumbe vsem glasbam v seznamu predvajanja ali albumu",
"name": "Nastavitve albuma"
},
"album-color-theme": {
"description": "Doda dinamično temo in vizualne efekte glede na barve albuma",
"menu": {
"color-mix-ratio": {
"label": "Razmerje barv",
"submenu": {
"percent": "{{ratio}}%"
}
}
},
"name": "Barvna tema Albuma"
},
"ambient-mode": {
"description": "Doda barvni učinek iz video posnetka na ozadje",
"menu": {
"blur-amount": {
"label": "Stopnja zameglitve",
"submenu": {
"pixels": "{{blurAmount}} pikslov"
}
},
"buffer": {
"label": "Medpomnilnik",
"submenu": {
"buffer": "{{buffer}}"
}
},
"opacity": {
"label": "Prozornost",
"submenu": {
"percent": "{{opacity}}%"
}
},
"quality": {
"label": "Kvaliteta",
"submenu": {
"pixels": "{{quality}} pikslov"
}
},
"size": {
"label": "Velikost",
"submenu": {
"percent": "{{size}}%"
}
},
"smoothness-transition": {
"label": "Gladkost prehoda",
"submenu": {
"during": "Med {{interpolationTime}} s"
}
},
"use-fullscreen": {
"label": "Uporablja celoten zaslon"
}
},
"name": "Ambienten način"
},
"api-server": {
"description": "Doda API strežnik za nadzor predvajalnika",
"dialog": {
"request": {
"buttons": {
"allow": "Dovoli",
"deny": "Zavrni"
},
"message": "Dovolite {{ID}} ({{origin}}) da dostopa do API-ja?",
"title": "Prošnja za avtomatizacijo API-ja"
}
},
"menu": {
"auth-strategy": {
"label": "Strategija avtorizacije",
"submenu": {
"auth-at-first": {
"label": "Avtorizacija ob prvem zahtevku"
},
"none": {
"label": "Ni avtorizacije"
}
}
},
"hostname": {
"label": "Hostname"
},
"port": {
"label": "Port"
}
},
"name": "API strežnik [Beta]",
"prompt": {
"hostname": {
"label": "Vnesite hostname (npr. 0.0.0.0) za API strežnik:",
"title": "Hostname"
},
"port": {
"label": "Vnesite port za API strežnik:",
"title": "Port"
}
}
},
"audio-compressor": {
"description": "Doda kompresijo zvoka (izenači ravni zvoka, zniža glasnost najglasnejših delov in zviša najtišje)",
"name": "Kompresija zvoka"
},
"blur-nav-bar": {
"description": "Naredi navigacijsko vrstico prozorno in zamegljeno",
"name": "Zameglji navigacijsko vrstico"
},
"bypass-age-restrictions": {
"description": "Preskoči YouTubo-vo preverjanje starosti",
"name": "Preskoči starostno omejitev"
},
"captions-selector": {
"description": "Izberi podnapise za YouTube Music zvočne posnetke",
"menu": {
"autoload": "Avtomatsko uporabi zadnje izbrane podnapise",
"disable-captions": "Avtomatsko brez podnapisov"
},
"name": "Izberi podnapise",
"prompt": {
"selector": {
"label": "Trenutni jezik podnapisov: {{language}}",
"none": "Brez",
"title": "Izberi jezik podnapisov"
}
},
"templates": {
"title": "Odpri izbiro podnapisov"
}
},
"compact-sidebar": {
"description": "Vedno izberi kompakten način stranske vrstice",
"name": "Kompaktna stranska vrstica"
},
"crossfade": {
"description": "Bledenje med pesmimi",
"menu": {
"advanced": "Dodatno"
},
"name": "Bledenje med pesmimi [Beta]",
"prompt": {
"options": {
"multi-input": {
"fade-in-duration": "Čas zbledenja (v pesem) (ms)",
"fade-out-duration": "Čas zbledenja (izven pesemi) (ms)",
"fade-scaling": {
"label": "Zbledi skaliranje",
"linear": "Linearno",
"logarithmic": "Logaritmično"
},
"seconds-before-end": "Bledenje (crossfade) N sekund pred koncem"
},
"title": "Možnosti zbledenja"
}
}
},
"disable-autoplay": {
"description": "Začne pesem v zaustavljenem načinu",
"menu": {
"apply-once": "Uporabi samo ob zagonu"
},
"name": "Onemogoči samodejno predvajanje"
},
"discord": {
"backend": {
"already-connected": "Poizkus povezave z aktivno povezavo",
"connected": "Povezan na Discord",
"disconnected": "Povezava z Discord-om prekinjena"
},
"description": "Pokaži svojim prijateljem kaj poslušaš z bogato prisotnostjo (Rich Presence)",
"menu": {
"auto-reconnect": "Samodejna unovična povezava",
"clear-activity": "Počisti dejavnost",
"clear-activity-after-timeout": "Počisti dejavnost po časovni omejitvi",
"connected": "Povezan",
"disconnected": "Prekinjena povezava",
"hide-duration-left": "Skrij preostali čas",
"hide-github-button": "Skrij povezavo do GitHub-a",
"play-on-youtube-music": "Predvajaj v YouTube Music",
"set-inactivity-timeout": "Nastavite časovno omejitev neaktivnosti"
},
"name": "Discord bogata prisotnost (Rich Presence)",
"prompt": {
"set-inactivity-timeout": {
"label": "Vnesite časovno omejitev neaktivnosti v sekundah:",
"title": "Nastavite časovno omejitev nedejavnosti"
}
}
},
"downloader": {
"backend": {
"dialog": {
"error": {
"buttons": {
"ok": "OK"
},
"message": "Uff! Se opravičujemo, prenos neuspešen…",
"title": "Napaka v prenosu!"
},
"start-download-playlist": {
"buttons": {
"ok": "OK"
},
"detail": "({{playlistSize}} pesmi)",
"message": "Prenašanje seznama {{playlistTitle}}",
"title": "Prenos se je začel"
}
},
"feedback": {
"conversion-progress": "Konverzija: {{percent}}%",
"converting": "Pretvarjanje…",
"done": "Končano: {{filePath}}",
"download-info": "Prenašanje {{artist}} - {{title}} [{{videoId}}",
"download-progress": "Prenos: {{percent}}%",
"downloading": "Prenašanje…",
"downloading-counter": "Prenašanje {{current}}/{{total}}…",
"downloading-playlist": "Prenašanje seznama \"{{playlistTitle}}\" - {{playlistSize}} pesmi ({{playlistId}})",
"error-while-downloading": "Napaka pri prenosu \"{{author}} - {{title}}\": {{error}}",
"folder-already-exists": "Ta mapa {{playlistFolder}} že obstaja",
"getting-playlist-info": "Pridobivam informacije o seznamu…",
"loading": "Nalaganje…",
"playlist-has-only-one-song": "Ta seznam ima samo eno pesem, uporabljam direkten prenos",
"playlist-id-not-found": "ID seznama ni najden",
"playlist-is-empty": "Seznam je prazen",
"playlist-is-mix-or-private": "Napaka v pridobivanju informacij o seznamu: poskrbite da seznam ni zaseben ali \"Mixed for you\" seznam\n\n{{error}}",
"preparing-file": "Pripravljanje datoteke…",
"saving": "Shranjujem…",
"trying-to-get-playlist-id": "Poizkušam pridobiti ID seznama: {{playlistId}}",
"video-id-not-found": "Videoposnetek ni najden",
"writing-id3": "Zapisujem ID3 oznake…"
}
},
"description": "Prenese MP3 / izviren zvok direktno iz vmesnika",
"menu": {
"choose-download-folder": "Izberite mapo s prenosi",
"download-finish-settings": {
"label": "Prenesi ob koncu",
"prompt": {
"last-percent": "Po x odstotkov",
"last-seconds": "Zadnjih x sekund",
"title": "Nastavite čas prenosa"
},
"submenu": {
"advanced": "Napredno",
"enabled": "Omogočen",
"mode": "Časovni način",
"percent": "Odstotek",
"seconds": "Sekunde"
}
},
"download-playlist": "Prenesi seznam",
"presets": "Prednastavitve",
"skip-existing": "Preskoči obstoječe datoteke"
},
"name": "Prenaševalec",
"renderer": {
"can-not-update-progress": "Nemorem osvežiti napredka"
},
"templates": {
"button": "Prenos"
}
},
"exponential-volume": {
"description": "Drsnik za glasnost naredi eksponenten, da bo lažje izbrati nižje glasnosti.",
"name": "Eksponentna glasnost"
},
"in-app-menu": {
"description": "Menijem doda eleganten videz v temnih barvah ali barvah albuma",
"menu": {
"hide-dom-window-controls": "Skrije DOM gumbe za okno"
},
"name": "Meni v aplikaciji"
},
"lumiastream": {
"description": "Doda podporo za Lumia pretočno predvajanje",
"name": "Lumina pretočno predavanje [Beta]"
},
"lyrics-genius": {
"description": "Doda podporo besedil za večino pesmi",
"menu": {
"romanized-lyrics": "Romanizerana besedila"
},
"name": "Besedila Genius",
"renderer": {
"fetched-lyrics": "Prestregel besedila za Genius"
}
},
"music-together": {
"description": "Delite seznam predvajanja z drugimi. Ko gostitelj predvaja skladbo, bodo vsi ostali slišali isto skladbo",
"dialog": {
"enter-host": "Vnesite Host ID"
},
"internal": {
"save": "Shrani",
"track-source": "Vir pesmi",
"unknown-user": "Neznan uporabnik"
},
"menu": {
"click-to-copy-id": "Kopiraj Host ID",
"close": "Zapri Glasba Skupaj",
"connected-users": "Povezani uporabniki",
"disconnect": "Prekini povezavo z Pesmi Skupaj",
"empty-user": "Ni povezanih uporabnikov",
"host": "Gkasba Skupaj gostitelj",
"join": "Pridruži se Glasba Skupaj",
"permission": {
"all": "Dovoli da gosti nadzorujejo seznam predvajanja in predvajalnik",
"host-only": "Samo gostitelj lahko spreminja seznam predvajanja in predvajalnik",
"playlist": "Dovoli da gostje nadzorujejo predvajalnik"
},
"set-permission": "Spremeni dovoljenje nadzora",
"status": {
"disconnected": "Odklopljen",
"guest": "Povezan kot Gost",
"host": "Povezan kot Gostitelj"
}
},
"name": "Gkasba Skupaj [Beta]",
"toast": {
"add-song-failed": "Skladba ni bila dodana",
"closed": "Glasba Skupaj zaprto",
"disconnected": "Gkasba Skupaj odklopljena",
"host-failed": "Gkasba Skupaj nisem mogel gostiti",
"id-copied": "Host ID je kopiran v odložišče",
"id-copy-failed": "Host ID ni bilo mogoče kopirati"
}
}
}
}

107
src/i18n/resources/sv.json Normal file
View File

@ -0,0 +1,107 @@
{
"language": {
"code": "sv",
"local-name": "Svenska",
"name": "Swedish"
},
"plugins": {
"navigation": {
"name": "Navigering"
},
"no-google-login": {
"name": "Inget Google Login"
},
"notifications": {
"name": "Notiser"
},
"picture-in-picture": {
"menu": {
"hotkey": {
"label": "Snabbkommando",
"prompt": {
"keybind-options": {
"hotkey": "Snabbkommando"
},
"title": "Bild-I-Bild genväg"
}
}
},
"name": "Bild-I-Bild",
"templates": {
"button": "Bild-i-bild"
}
},
"playback-speed": {
"name": "Uppspelningshastighet",
"templates": {
"button": "Hasighet"
}
},
"precise-volume": {
"prompt": {
"global-shortcuts": {
"keybind-options": {
"decrease": "Minska Volym",
"increase": "Öka Volym"
}
},
"volume-steps": {
"title": "Volymsteg"
}
}
},
"quality-changer": {
"backend": {
"dialog": {
"quality-changer": {
"detail": "Nuvarande kvalité: {{quality}}",
"message": "Välj Video Kvalité:",
"title": "Välj Video Kvalité"
}
}
}
},
"scrobbler": {
"prompt": {
"lastfm": {
"api-key": "Last.fm API nyckel"
},
"listenbrainz": {
"token": {
"title": "ListenBrainz token"
}
}
}
},
"shortcuts": {
"prompt": {
"keybind": {
"keybind-options": {
"next": "Nästa",
"play-pause": "Spela / Pausa",
"previous": "Föregående"
}
}
}
},
"video-toggle": {
"menu": {
"align": {
"submenu": {
"left": "Vänster",
"middle": "Mitten",
"right": "Höger"
}
},
"mode": {
"submenu": {
"disabled": "Inaktiverad"
}
}
},
"templates": {
"button": "Låt"
}
}
}
}

View File

@ -1,7 +1,556 @@
{
"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": "th",
"local-name": "ภาษาไทย",
"name": "Thai"
},
"main": {
"console": {
"did-finish-load": {
"dev-tools": "การโหลดเสร็จสิ้น. โหมดนักพัฒนาสามรถใช้งานได้แล้ว"
},
"i18n": {
"loaded": "โหลด i18n แล้ว"
},
"second-instance": {
"receive-command": "รับคำสั่งผ่านโปรโตคอล: \"{{command}}\""
},
"theme": {
"css-file-not-found": "ไม่พบไฟล์ CSS \"{{cssFile}}\" กำลังข้าม"
},
"unresponsive": {
"details": "พบข้อผิดพลาด!\n{{error}}"
},
"when-ready": {
"clearing-cache-after-20s": "กำลังล้างแคชแอป"
},
"window": {
"tried-to-render-offscreen": "หน้าต่างพยายามแสดงผลเกินขนาดหน้าจอ windowSize={{windowSize}}, displaySize={{displaySize}}, position={{position}}"
}
},
"dialog": {
"hide-menu-enabled": {
"detail": "เมนูถูกซ่อนไว้ กด'Alt' เพื่อแสดงเมนู (หรือ 'Escape' หากอยู่ในเมนูแอป)",
"message": "การซ่อนเมนูถูกเปิดใช้งาน",
"title": "เปิดใช้งานการซ่อนเมนู"
},
"need-to-restart": {
"buttons": {
"later": "ภายหลัง",
"restart-now": "รีสตาร์ทตอนนี้"
},
"detail": "\"{{pluginName}}\" ปลั๊กอินต้องการการรีสตาร์ทเพื่อแสดงผล",
"message": "\"{{pluginName}}\" ต้องการรีสตาร์ท",
"title": "แนะนำให้รีสตาร์ท"
},
"unresponsive": {
"buttons": {
"quit": "ออก",
"relaunch": "เปิดใหม่",
"wait": "รอซักครู่"
},
"detail": "ขออภัยในความไม่สะดวก! โปรดเลือกสิ่งที่ต้องการจะทำ:",
"message": "แอปพลิเคชันไม่ตอบสนอง",
"title": "หน้าต่างไม่ตอบสนอง"
},
"update-available": {
"buttons": {
"disable": "ปิดใช้งานการอัปเดต",
"download": "ดาวน์โหลด",
"ok": "ตกลง"
},
"detail": "มีเวอร์ชันใหม่ให้ดาวน์โหลดแล้วที่ {{downloadLink}}",
"message": "มีเวอร์ชันใหม่ให้ใช้งานแล้ว",
"title": "อัปเดตพร้อมใช้งาน"
}
},
"menu": {
"about": "เกี่ยวกับ",
"navigation": {
"label": "การนำทาง",
"submenu": {
"copy-current-url": "คัดลอก URL ปัจจุบัน",
"go-back": "ก่อนหน้า",
"go-forward": "ถัดไป",
"quit": "ออก",
"restart": "รีสตาร์ทแอป"
}
},
"options": {
"label": "ตัวเลือก",
"submenu": {
"advanced-options": {
"label": "ตัวเลือกขั้นสูง",
"submenu": {
"auto-reset-app-cache": "รีเซตแอปแคชเมื่อเริ่มแอป",
"disable-hardware-acceleration": "ปิดการใช้งานตัวเร่งประสิทธิภาพด้วยฮาร์ดแวร์",
"edit-config-json": "แก้ไข config.json",
"override-user-agent": "แทนที่ 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] เพื่อแสดงเมนู (หรือใช้ backtick [`] หากอยู่ในเมนูแอป)",
"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": {
"dialog": {
"button": {
"cancel": "ยกเลิก",
"remove": "ลบ"
},
"remove-theme": "คุณแน่ใจหรือหรือไม่ที่จะลบธีม?",
"remove-theme-message": "สิ่งนี้จะลบธีมที่กำหนดเอง"
},
"label": "ธีม",
"submenu": {
"import-css-file": "นำเข้าไฟล์ CSS ที่กำหนดเอง",
"no-theme": "ไม่มีธีม"
}
}
}
}
}
},
"plugins": {
"enabled": "เปิดใช้งาน",
"label": "ปลั๊กอิน",
"new": "ใหม่"
},
"view": {
"label": "มุมมอง",
"submenu": {
"force-reload": "บังคับโหลดใหม่",
"reload": "โหลดใหม่",
"reset-zoom": "ขนาดจริง",
"toggle-fullscreen": "สลับเต็มหน้าจอ",
"zoom-in": "ซูมเข้า",
"zoom-out": "ซูมออก"
}
}
},
"tray": {
"next": "ค่อไป",
"play-pause": "เล่น/พัก",
"previous": "ก่อนหน้า",
"quit": "ออก",
"restart": "รีสตาร์ทแอป",
"show": "แสดงหน้าต่าง",
"tooltip": {
"default": "ยูทุปมิวสิค",
"with-song-info": "ยูทูปมิวสิค: {{artist}} - {{title}}"
}
}
},
"plugins": {
"ad-speedup": {
"description": "หากมีการเล่นโฆษณา เสียงจะถูกปิดและตั้งค่าความเร็วในการเล่นเป็น 16x",
"name": "เพิ่มความเร็วโฆษณา"
},
"adblocker": {
"description": "บล็อกโฆษณาและการติดตามทั้งหมดอย่างอัตโนมัติ",
"menu": {
"blocker": "เครื่องมือบล็อก"
},
"name": "ตัวบล็อกโฆษณา"
},
"album-actions": {
"description": "เพิ่ม ยกเลิกไม่ชอบ, ไม่ชอบ, 'ถูกใจ', และ 'ยกเลิกถูกใจ' เพื่อให้สามารถใช้งานกับเพลงทั้งหมดในรายการเพลงหรืออัลบั้ม",
"name": "การกระทำที่เกี่ยวกับอัลบั้ม"
},
"album-color-theme": {
"description": "ใช้ธีมและเอฟเฟกต์ไดนามิก โดยขึ้นอยู่กับสีของอัลบั้ม",
"menu": {
"color-mix-ratio": {
"label": "สัดส่วนการผสมสี",
"submenu": {
"percent": "{{ratio}}เปอร์เซ็น"
}
}
},
"name": "ธีมสีของอัลบั้ม"
},
"ambient-mode": {
"description": "เอฟเฟกต์แสงจะใช้สีอ่อนๆจากวีดิโอมาเป็พื้นหลังสกรีน",
"menu": {
"blur-amount": {
"label": "ระดับความเบลอ",
"submenu": {
"pixels": "{{blurAmount}} พิกเซล"
}
},
"buffer": {
"label": "บัฟเฟอร์",
"submenu": {
"buffer": "{{buffer}}"
}
},
"opacity": {
"label": "ความโปร่งใส",
"submenu": {
"percent": "{{opacity}}%"
}
},
"quality": {
"label": "คุณภาพ",
"submenu": {
"pixels": "{{quality}} พิกเซล"
}
},
"size": {
"label": "ขนาด",
"submenu": {
"percent": "{{size}}%"
}
},
"smoothness-transition": {
"label": "การเปลี่ยนแบบสมูท",
"submenu": {
"during": "ระหว่าง {{interpolationTime}} วินาที"
}
},
"use-fullscreen": {
"label": "ใช้โหมดเต็มหน้าจอ"
}
},
"name": "โหมดสภาพแวดล้อม"
},
"api-server": {
"description": "เพิ่มเซิร์ฟเวอร์ API เพื่อควบคุมการเล่น",
"dialog": {
"request": {
"buttons": {
"allow": "อนุญาต",
"deny": "ปฏิเสธ"
},
"message": "อนุญาตให้ {{ID}} ({{origin}}) เข้าถึง API หรือไม่?"
}
}
},
"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": "แสดงให้เพื่อนเห็นว่าคุณกำลังฟังอะไรด้วย Rich Presence",
"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": "Discord Rich Presence",
"prompt": {
"set-inactivity-timeout": {
"label": "ป้อนระยะเวลาไม่มีกิจกรรมเป็นวินาที:",
"title": "ตั้งระยะเวลาไม่มีกิจกรรม"
}
}
},
"downloader": {
"backend": {
"dialog": {
"error": {
"buttons": {
"ok": "ตกลง"
},
"message": "อ๊ะ! ขออภัย ดาวน์โหลดล้มเหลว…",
"title": "มีข้อผิดพลาดในการดาวน์โหลด!"
},
"start-download-playlist": {
"buttons": {
"ok": "ตกลง"
},
"detail": "({{playlistSize}} เพลง)",
"message": "กำลังดาวน์โหลดเพลย์ลิสต์ {{playlistTitle}}",
"title": "เริ่มต้นการดาวน์โหลดแล้ว"
}
},
"feedback": {
"conversion-progress": "การแปลง: {{percent}}%",
"converting": "กำลังแปลง…",
"done": "เสร็จสิ้น: {{filePath}}",
"download-info": "กำลังดาวน์โหลด {{artist}} - {{title}} [{{videoId}}",
"download-progress": "ดาวน์โหลด: {{percent}}%",
"downloading": "กำลังดาวน์โหลด…",
"downloading-counter": "กำลังดาวน์โหลด {{current}}/{{total}}…",
"downloading-playlist": "กำลังดาวน์โหลดเพลย์ลิสต์ \"{{playlistTitle}}\" - {{playlistSize}} เพลง ({{playlistId}})",
"error-while-downloading": "เกิดข้อผิดพลาดในการดาวน์โหลด \"{{author}} - {{title}}\": {{error}}",
"folder-already-exists": "มีโฟลเดอร์ {{playlistFolder}} อยู่แล้ว",
"getting-playlist-info": "กำลังรับข้อมูลเพลย์ลิสต์…",
"loading": "กำลังโหลด…",
"playlist-has-only-one-song": "เพลย์ลิสต์มีเพียงเพลงเดียวเท่านั้น กำลังดาวน์โหลดเพลงนั้นโดยตรง",
"playlist-id-not-found": "ไม่พบ ID เพลย์ลิสต์",
"playlist-is-empty": "เพลย์ลิสต์ว่างเปล่า",
"playlist-is-mix-or-private": "เกิดข้อผิดพลาดในการรับข้อมูลเพลย์ลิสต์: ตรวจสอบให้แน่ใจว่าไม่ใช่เพลย์ลิสต์ส่วนตัวหรือเพลย์ลิสต์ \"มิกซ์สำหรับคุณ\"\n\n{{error}}",
"preparing-file": "กำลังเตรียมไฟล์…",
"saving": "กำลังบันทึก…",
"trying-to-get-playlist-id": "กำลังพยายามรับ ID เพลย์ลิสต์: {{playlistId}}",
"video-id-not-found": "ไม่พบวิดีโอ",
"writing-id3": "กำลังเขียนแท็ก ID3…"
}
},
"description": "ดาวน์โหลด MP3 / เสียงต้นฉบับโดยตรงจากอินเทอร์เฟซ",
"menu": {
"choose-download-folder": "เลือกโฟลเดอร์ดาวน์โหลด",
"download-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": "เมนูในแอป"
},
"lumiastream": {
"description": "เพิ่มการรองรับ ลูเมีย สตรีม",
"name": "ลูเมีย สตรีม [เบต้า]"
},
"lyrics-genius": {
"description": "เพิ่มการสนับสนุนเนื้อเพลงสำหรับเพลงหลายๆ เพลง",
"menu": {
"romanized-lyrics": "เนื้อเพลงโรมันไรซ์"
},
"name": "เนื้อเพลงแบบอัจฉริยะ",
"renderer": {
"fetched-lyrics": "ดึงข้อมูลเนื้อเพลงแบบอัจฉริยะแล้ว"
}
},
"music-together": {
"description": "แบ่งปันเพลย์ลิสต์กับผู้อื่น โดยเมื่อเจ้าภาพเล่นเพลง ทุกคนอื่นๆ จะได้ยินเพลงเดียวกัน",
"dialog": {
"enter-host": "ป้อนรหัสโฮสต์"
},
"internal": {
"save": "บันทึก",
"track-source": "แหล่งข้อมูลเพลง",
"unknown-user": "ผู้ใช้ที่ไม่รู้จัก"
},
"menu": {
"click-to-copy-id": "คัดลอกรหัสโฮสต์",
"close": "ปิด Music Together",
"connected-users": "ผู้ใช้ที่เชื่อมต่อ",
"disconnect": "ตัดการเชื่อมต่อ Music Together",
"empty-user": "ไม่มีผู้ใช้ที่เชื่อมต่อ",
"host": "โฮสต์ Music Together",
"join": "เข้าร่วม Music Together",
"permission": {
"all": "อนุญาตให้แขกควบคุมเพลย์ลิสต์และเครื่องเล่น",
"host-only": "เฉพาะโฮสต์เท่านั้นที่สามารถควบคุมเพลย์ลิสต์และเครื่องเล่นได้",
"playlist": "อนุญาตให้แขกควบคุมเพลย์ลิสต์"
},
"set-permission": "เปลี่ยนการอนุญาตในการควบคุม",
"status": {
"disconnected": "ตัดการเชื่อมต่อแล้ว",
"guest": "เชื่อมต่อเป็นแขก",
"host": "เชื่อมต่อเป็นโฮสต์"
}
},
"name": "Music Together [เบต้า]",
"toast": {
"add-song-failed": "เพิ่มเพลงล้มเหลว",
"closed": "ปิด Music Together แล้ว",
"disconnected": "การฟังเพลงร่วมกัน ถูกตัดการเชื่อมต่อแล้ว",
"host-failed": "มีปัญหาสำหรับโฮสต์ฟังเพลงร่วมกัน",
"id-copied": "ID โฮสต์ถูกคัดลอกแล้ว",
"id-copy-failed": "ไม่สามรถคัดลอก ID โฮสต์ได้",
"join-failed": "ไม่สามรถเข้าร่วมฟังเพลงร่วมกันได้",
"joined": "เข้าร่วมฟังเพลงด้วยกันแล้ว",
"permission-changed": "สิทธิการฟังเพลงร่วมกันเปลี่ยนเป็น \"{{permission}}\"",
"remove-song-failed": "ไม่สารถลบเพลงได้",
"user-connected": "{{name}}เข้าร่วมตี้ฟังเพลงด้วยกัน",
"user-disconnected": "{{name}}ออกจากตี้ฟังเพลงด้วยกัน"
}
},
"navigation": {
"description": "ลูกศรนำทางถัดไป/ย้อนกลับรวมอยู่ในอินเทอร์เฟซโดยตรง เช่นเดียวกับในเบราว์เซอร์ที่คุณชื่นชอบ",
"name": "การนำทาง"
},
"no-google-login": {
"description": "ลบปุ่มเข้าสู่ระบบ Google และลิงก์ออกจากอินเทอร์เฟซ",
"name": "ไม่ล็อกอิน Google"
},
"notifications": {
"description": "แสดงการแจ้งเตือนเมื่อเพลงเริ่มเล่น (การแจ้งเตือนมีให้ใช้งานบน Windows)",
"menu": {
"interactive": "การแจ้งเตือนแบบโต้ตอบ",
"interactive-settings": {
"label": "การตั้งค่าการโต้ตอบ",
"submenu": {
"hide-button-text": "ซ่อนข้อความปุ่ม",
"refresh-on-play-pause": "รีเฟรชเมื่อเล่น/หยุดชั่วคราว",
"tray-controls": "เปิด/ปิดเมื่อคลิกถาด"
}
},
"priority": "ลำดับความสำคัญของการแจ้งเตือน",
"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": "บันทึกขนาดหน้าต่าง"
}
}
}
}

View File

@ -9,7 +9,7 @@
"load-failed": "\"{{pluginName}}\" eklentisi yüklenemedi",
"loaded": "\"{{pluginName}}\" eklentisi yüklendi",
"unload-failed": "\"{{pluginName}}\" eklentisi çıkartılamadı",
"unloaded": "\"{{pluginName}}\" eklentisi kaldırıldı"
"unloaded": "\"{{pluginName}}\" eklentisi çıkartıldı"
}
}
},
@ -60,7 +60,7 @@
"unresponsive": {
"buttons": {
"quit": ıkış",
"relaunch": "Yeniden Başlat",
"relaunch": "Tekrar Başlat",
"wait": "Bekle"
},
"detail": "Rahatsızlık için özür dileriz! Lütfen ne yapacağınızı seçin:",
@ -158,6 +158,14 @@
},
"remove-upgrade-button": "Yükseltme düğmesini kaldır",
"theme": {
"dialog": {
"button": {
"cancel": "İptal",
"remove": "Kaldır"
},
"remove-theme": "Özel temayı kaldırmak istediğinizden emin misiniz?",
"remove-theme-message": "Bu işlem özel temayı kaldıracaktır"
},
"label": "Tema",
"submenu": {
"import-css-file": "Özel CSS dosyanı içeri aktar",
@ -191,10 +199,18 @@
"previous": "Önceki",
"quit": ıkış",
"restart": "Yeniden başlat",
"show": "Pencereyi görüntüle"
"show": "Pencereyi görüntüle",
"tooltip": {
"default": "YouTube Müzik",
"with-song-info": "YouTube Müzik: {{artist}} - {{title}}"
}
}
},
"plugins": {
"ad-speedup": {
"description": "Bir reklam oynatılırsa sesi kapatır ve oynatma hızını 16x olarak ayarlar",
"name": "Hızlandırma"
},
"adblocker": {
"description": "Tüm reklamları ve izleyicileri engelle",
"menu": {
@ -203,15 +219,23 @@
"name": "Reklam Engelleyici"
},
"album-actions": {
"description": "Çalma listesindeki veya albümdeki tüm şarkılara Beğendim ve Beğenmedim düğmeleri ekler.",
"description": "Çalma listesindeki veya albümdeki tüm şarkılara Beğendim ve Beğenmedim düğmeleri ekler",
"name": "Albüm Eylemleri"
},
"album-color-theme": {
"description": "Albümün renk paletine dayalı dinamik bir tema ve efektler uygular",
"menu": {
"color-mix-ratio": {
"label": "Renk karışım oranı",
"submenu": {
"percent": "{{ratio}}%"
}
}
},
"name": "Albüm Renk Teması"
},
"ambient-mode": {
"description": "Videodaki yumuşak renkleri ekranınızın arka planına yansıtarak bir ışık efekti uygular..",
"description": "Videodaki yumuşak renkleri ekranınızın arka planına yansıtarak bir ışık efekti uygular",
"menu": {
"blur-amount": {
"label": "Bulanıklık miktarı",
@ -255,6 +279,49 @@
},
"name": "Ambiyans Modu"
},
"api-server": {
"description": "APİ ekle ve oynatıcıyı kontrol et",
"dialog": {
"request": {
"buttons": {
"allow": "İzin ver",
"deny": "Reddet"
},
"message": "{{ID}} ({{origin}}) 'nın APIye erişmesine izin verilsin mi?",
"title": "APİ yetkilendirme isteği"
}
},
"menu": {
"auth-strategy": {
"label": "Yetkilendirme stratejisi",
"submenu": {
"auth-at-first": {
"label": "İlk istekte yetkilendir"
},
"none": {
"label": "Yetkilendirme Yok"
}
}
},
"hostname": {
"label": "Ana bilgisayar adı"
},
"port": {
"label": "Port"
}
},
"name": "API sunucusu [Beta]",
"prompt": {
"hostname": {
"label": "API sunucusu için hostname (örneğin 0.0.0.0) girin:",
"title": "Hostname"
},
"port": {
"label": "API sunucusu için port girin:",
"title": "Bağlantı Noktası"
}
}
},
"audio-compressor": {
"description": "Ses sıkıştırma (dalganın en gürültülü bölümlerinin ses düzeyini azaltır ve daha yumuşak bölümlerin ses düzeyini artırır)",
"name": "Ses Sıkıştırma"
@ -336,7 +403,7 @@
"play-on-youtube-music": "YouTube Music de oynat",
"set-inactivity-timeout": "Hareketsizlik zaman aşımını ayarla"
},
"name": "Discord Rich Presence",
"name": "Discord Etkinlik Durumu",
"prompt": {
"set-inactivity-timeout": {
"label": "Hareketsizlik zaman aşımını saniye cinsinden girin:",
@ -390,6 +457,21 @@
"description": "MP3 / kaynak sesini doğrudan arayüzden indir",
"menu": {
"choose-download-folder": "İndirme klasörünü seç",
"download-finish-settings": {
"label": "Bittiğinde indir",
"prompt": {
"last-percent": "Yüzde x'ten sonra",
"last-seconds": "Son x saniyede",
"title": "Ne zaman indirileceğini ayarla"
},
"submenu": {
"advanced": "Gelişmiş",
"enabled": "Etkin",
"mode": "Zaman türü",
"percent": "Yüzde",
"seconds": "Saniye"
}
},
"download-playlist": "Oynatma listesini indir",
"presets": "Hazır Ayarlar",
"skip-existing": "Mevcut dosyaları atla"
@ -413,10 +495,6 @@
},
"name": "Uygulama İçi Menü"
},
"last-fm": {
"description": "Last.fm için scrobbling desteği ekler",
"name": "Last.fm"
},
"lumiastream": {
"description": "Lumia Stream desteği ekler",
"name": "Lumia Stream [Beta]"
@ -450,7 +528,7 @@
"host": "Birlikte Müzik Sunucusu",
"join": "Birlikte Müziğe Katıl",
"permission": {
"all": "Konukların oynatma listesini ve oynatıcıyı kontrol etmesine izin verin",
"all": "Konukların oynatma listesini ve oynatıcıyı kontrol etmesine izin ver",
"host-only": "Çalma listesini ve oynatıcıyı yalnızca yönetici kontrol edebilir",
"playlist": "Konukların oynatma listesini kontrol etmesine izin ver"
},
@ -458,7 +536,7 @@
"status": {
"disconnected": "Bağlantı kesildi",
"guest": "Misafir olarak bağlandı",
"host": "Ev Sahibi olarak bağlandı"
"host": "Sunucu Sahibi olarak bağlandı"
}
},
"name": "Birlikte Müzik [Beta]",
@ -468,6 +546,7 @@
"disconnected": "Birlikte Müzik bağlantı kesildi",
"host-failed": "Birlikte Müzik sunucusu kurulamadı",
"id-copied": "Sunucu ID'si kopyalandı",
"id-copy-failed": "Sunucu ID'si panoya kopyalanamadı",
"join-failed": "Birlikte Müziğe katılırken bir hata meydana geldi",
"joined": "Birlikte Müziğe Katıldı",
"permission-changed": "Birlikte Müzik yetkisi \"{{permission}}\" olarak değiştirildi",
@ -568,8 +647,41 @@
"description": "Video katmanı üzerindeki bir düğme ile video kalitesinin değiştirilmesine izin verir",
"name": "Video Kalitesi Değiştirici"
},
"scrobbler": {
"description": "Listeleme desteği ekler (lastfm, listenbrainz ve benzeri)",
"dialog": {
"lastfm": {
"auth-failed": {
"message": "Last.fm ile kimlik doğrulaması yapılamadı\nBir sonraki yeniden başlatmaya kadar açılır pencereyi gizle.",
"title": "Kimlik Doğrulama Başarısız"
}
}
},
"menu": {
"lastfm": {
"api-settings": "Last.fm API Ayarları"
},
"listenbrainz": {
"token": "ListenBrainz kullanıcı kimliğinizi girin"
},
"scrobble-other-media": "Diğer medya ortamlarında listele"
},
"name": "Listeleyici",
"prompt": {
"lastfm": {
"api-key": "Last.fm API anahtarı",
"api-secret": "Last.fm API gizli anahtar"
},
"listenbrainz": {
"token": {
"label": "ListenBrainz kullanıcı kimliğinizi girin:",
"title": "ListenBrainz kimliği"
}
}
}
},
"shortcuts": {
"description": "Oynatma için global kısayol tuşları (oynat/duraklat/sonraki/önceki) ayarlamaya ve medya tuşlarını geçersiz kılarak medya OSD'sini kapatmaya, arama yapmak için Ctrl/CMD + F tuşlarını açmaya, medya tuşları için Linux MPRIS desteğini açmaya ve ileri düzey kullanıcılar için özel kısayol tuşlarına izin verir.",
"description": "Oynatma için global kısayol tuşları (oynat/duraklat/sonraki/önceki) ayarlamaya ve medya tuşlarını geçersiz kılarak medya OSD'sini kapatmaya, arama yapmak için Ctrl/CMD + F tuşlarını açmaya, medya tuşları için Linux MPRIS desteğini açmaya ve ileri düzey kullanıcılar için özel kısayol tuşlarına izin verir",
"menu": {
"override-media-keys": "Medya Tuşlarını Geçersiz Kıl",
"set-keybinds": "Global Şarkı Kontrollerini Ayarla"
@ -599,6 +711,59 @@
"description": "Giriş/Çıkış gibi müzik olmayan kısımları veya müzik videolarında şarkının çalmadığı kısımları otomatik olarak atlar",
"name": "SponsorBlock"
},
"synced-lyrics": {
"description": "LRClib gibi sağlayıcıları kullanarak şarkılara senkronize şarkı sözleri sağlar.",
"errors": {
"fetch": "⚠️ - Şarkı sözleri getirilirken bir hata oluştu. Lütfen daha sonra tekrar deneyin.",
"not-found": "⚠️ - Bu şarkı için şarkı sözü bulunamadı."
},
"menu": {
"default-text-string": {
"label": "Şarkı sözleri arasında varsayılan karakter",
"tooltip": "Şarkı sözleri arasındaki boşluk için kullanılacak varsayılan karakteri seçin"
},
"line-effect": {
"label": "Çizgi etkisi",
"submenu": {
"focus": {
"label": "odak",
"tooltip": "Yalnızca geçerli satırı beyaz yapın"
},
"offset": {
"label": "telafi etmek,ofset",
"tooltip": "Geçerli satırın sağındaki ofset"
},
"scale": {
"label": "ölçek",
"tooltip": "Geçerli satırı ölçeklendirir"
}
},
"tooltip": "Geçerli satıra uygulanacak efekti seçin"
},
"precise-timing": {
"label": "Şarkı sözlerini mükemmel şekilde senkronize edin",
"tooltip": "Bir sonraki satırın görüntülenmesini milisaniyesine kadar hesaplayın (performans üzerinde küçük bir etkisi olabilir)"
},
"show-lyrics-even-if-inexact": {
"label": "Kesin olmasa bile şarkı sözlerini gösterin",
"tooltip": "Şarkı bulunamazsa, eklenti farklı bir arama sorgusuyla tekrar dener. \nİkinci denemenin sonucu tam olmayabilir."
},
"show-time-codes": {
"label": "Zaman kodlarını göster",
"tooltip": "Şarkı sözlerinin yanında zaman kodlarını gösterin"
}
},
"name": "Senkronize Şarkı Sözleri",
"refetch-btn": {
"fetching": "Getiriliyor...",
"normal": "Refetch şarkı sözleri"
},
"warnings": {
"duration-mismatch": "⚠️ - Süre uyuşmazlığı nedeniyle şarkı sözleri senkronize olmayabilir.",
"inexact": "⚠️ - Bu şarkının sözleri tam olmayabilir",
"instrumental": "⚠️ - Bu enstrümantal bir şarkıdır"
}
},
"taskbar-mediacontrol": {
"description": "Windows görev çubuğu üzerinden oynatmayı kontrol edebilmenize olanak sağlar",
"name": "Görev Çubuğu Medya Kontrolü"

View File

@ -158,6 +158,14 @@
},
"remove-upgrade-button": "Прибрати кнопку оновлення",
"theme": {
"dialog": {
"button": {
"cancel": "Скасувати",
"remove": "Видалити"
},
"remove-theme": "Ви впевнені, що хочете видалити власну тему?",
"remove-theme-message": "Це видалить власну тему"
},
"label": "Тема",
"submenu": {
"import-css-file": "Імпортувати власний CSS файл",
@ -170,7 +178,8 @@
},
"plugins": {
"enabled": "Увімкнено",
"label": "Плагіни"
"label": "Плагіни",
"new": "НОВЕ"
},
"view": {
"label": "Вид",
@ -190,10 +199,18 @@
"previous": "Попередній",
"quit": "Вихід",
"restart": "Перезапустити програму",
"show": "Показати вікно"
"show": "Показати вікно",
"tooltip": {
"default": "YouTube Music",
"with-song-info": "YouTube Music: {{artist}} - {{title}}"
}
}
},
"plugins": {
"ad-speedup": {
"description": "При програванні реклами звук вимикається і встановлюється швидкість відтворення 16х",
"name": "Пришвидшення релками"
},
"adblocker": {
"description": "Блокувати всю рекламу та відстеження з коробки",
"menu": {
@ -201,12 +218,24 @@
},
"name": "Блокувальник реклами"
},
"album-actions": {
"description": "Додати андізлайк, дізлайк, лайк та анлайк кнопки щоб застосувати це до всіх пісень в плейлисті або альбомі",
"name": "Дії з альбомами"
},
"album-color-theme": {
"description": "Застосовує динамічну тему та візуальні ефекти на основі колірної палітри альбому",
"menu": {
"color-mix-ratio": {
"label": "Співвідношення змішування кольорів",
"submenu": {
"percent": "{{ratio}}%"
}
}
},
"name": "Кольорова тема альбому"
},
"ambient-mode": {
"description": "Застосовує ефект освітлення, накладаючи ніжні кольори з відео на фон екрана.",
"description": "Застосовує ефект освітлення, накладаючи ніжні кольори з відео на фон екрана",
"menu": {
"blur-amount": {
"label": "Обсяг розмиття",
@ -250,6 +279,49 @@
},
"name": "Режим навколишнього середовища"
},
"api-server": {
"description": "Додає API сервер для контролю плеєра",
"dialog": {
"request": {
"buttons": {
"allow": "Дозволити",
"deny": "Відмінити"
},
"message": "Дозволити {{ID}} ({{origin}}) доступ до API?",
"title": "Запит авторизації до API"
}
},
"menu": {
"auth-strategy": {
"label": "Стратегія авторизації",
"submenu": {
"auth-at-first": {
"label": "Авторизувати при першому запиті"
},
"none": {
"label": "Немає авторизації"
}
}
},
"hostname": {
"label": "Назва серверу"
},
"port": {
"label": "Порт"
}
},
"name": "API сервер [Бета]",
"prompt": {
"hostname": {
"label": "Введіть ім'я хоста (наприклад 0.0.0.0) для API серверу:",
"title": "Ім'я хоста"
},
"port": {
"label": "Введіть порт API серверу:",
"title": "Порт"
}
}
},
"audio-compressor": {
"description": "Застосувати стиснення аудіо (зменшити гучність найгучніших фрагментів сигналу та збільшити гучність тихих фрагментів)",
"name": "Аудіокомпресор"
@ -289,7 +361,7 @@
"menu": {
"advanced": "Розширене"
},
"name": "Плавний перехід[бета-версія]",
"name": "Плавний перехід[Бета]",
"prompt": {
"options": {
"multi-input": {
@ -331,7 +403,7 @@
"play-on-youtube-music": "Слухати на YouTube Music",
"set-inactivity-timeout": "Встановити тайм-аут бездіяльності"
},
"name": "Discord Rich Presence",
"name": "Активність Discord",
"prompt": {
"set-inactivity-timeout": {
"label": "Введіть тайм-аут бездіяльності в секундах:",
@ -385,6 +457,21 @@
"description": "Завантажує MP3 / джерело аудіо безпосередньо з інтерфейсу",
"menu": {
"choose-download-folder": "Оберіть папку для завантаження",
"download-finish-settings": {
"label": "Скачати по завершенню",
"prompt": {
"last-percent": "Після Х відсотків",
"last-seconds": "Останні Х секунд",
"title": "Налаштувати коли завантажувати"
},
"submenu": {
"advanced": "Розширені",
"enabled": "Увімкнено",
"mode": "Режим часу",
"percent": "Відсоток",
"seconds": "Секунди"
}
},
"download-playlist": "Завантажити плейлист",
"presets": "Попередні налаштування",
"skip-existing": "Пропустити наявні файли"
@ -399,33 +486,81 @@
},
"exponential-volume": {
"description": "Робить регулятор гучності експоненціальним, що полегшує вибір тихих рівнів гучності.",
"name": "Експоненціальний обсяг"
"name": "Експоненціальна гучність"
},
"in-app-menu": {
"description": "Надає меню-барам вишуканого, темного або кольору альбому вигляду",
"description": "Надає панелям меню вишуканий темний або кольоровий вигляд, схожий на альбом",
"menu": {
"hide-dom-window-controls": "Сховати елементи керування вікном DOM"
},
"name": "Меню в програмі"
},
"last-fm": {
"description": "Додати підтримку прокрутки для Last.fm",
"name": "Last.fm"
},
"lumiastream": {
"description": "Додано підтримку для Lumia Stream",
"name": "Lumia Stream [бета-версія]"
"name": "Lumia Stream [Бета]"
},
"lyrics-genius": {
"description": "Додає підтримку текстів для більшості пісень",
"menu": {
"romanized-lyrics": "Романізована лірика"
"romanized-lyrics": "Романізовані тексти"
},
"name": "Тексти з Genius",
"renderer": {
"fetched-lyrics": "Тексти надано Genius"
}
},
"music-together": {
"description": "Поділитись музикою. Коли хост включає пісню, всі інші будуть чути ту ж пісню",
"dialog": {
"enter-host": "Введіть ID хоста"
},
"internal": {
"save": "Зберегти",
"track-source": "Джерело композиції",
"unknown-user": "Невідомий користувач"
},
"menu": {
"click-to-copy-id": "Скопіювати хост ID",
"close": "Вимкнути сумісне прослуховування",
"connected-users": "Підключені користувачі",
"disconnect": "Відключитись від Music Together",
"empty-user": "Немає підключених користувачів",
"host": "Хост Music Together",
"join": "Приєднатися до Music Together",
"permission": {
"all": "Дозволити гостям керувати списком відтворення та плеєром",
"host-only": "Лише хост може керувати списком відтворення та плеєром",
"playlist": "Дозволити гостям керувати списком відтворення"
},
"set-permission": "Змінити дозвіл на керування",
"status": {
"disconnected": "Відключено",
"guest": "Підключено як гість",
"host": "Підключено як хост"
}
},
"name": "Music Together [Бета]",
"toast": {
"add-song-failed": "Не вдалося додати пісню",
"closed": "Music Together закритий",
"disconnected": "Music Together відключено",
"host-failed": "Не вдалося увімкнути Music Together",
"id-copied": "ID хоста скопійовано в буфер обміну",
"id-copy-failed": "Не вдалося скопіювати ID хоста в буфер обміну",
"join-failed": "Не вдалося приєднатися до Music Together",
"joined": "Приєднано до Music Together",
"permission-changed": "Дозвіл Music Together змінено на \"{{permission}}\"",
"remove-song-failed": "Не вдалося видалити пісню",
"user-connected": "{{name}} приєднався до Music Together",
"user-disconnected": "{{name}} вийшов з Music Together"
}
},
"navigation": {
"description": "Стрілки навігації Вперед/Назад безпосередньо інтегровані в інтерфейс, як у вашому браузері, який ви використовуєте",
"name": "Навігація"
},
"no-google-login": {
"description": "Видалити кнопки та посилання для входу через Google з інтерфейсу",
"name": "Без входу в Google"
},
"notifications": {
@ -435,9 +570,14 @@
"interactive-settings": {
"label": "Інтерактивні налаштування",
"submenu": {
"hide-button-text": "Сховати текст кнопки"
"hide-button-text": "Сховати текст кнопки",
"refresh-on-play-pause": "Оновлення при відтворенні/паузі",
"tray-controls": "Відкриття/закриття при натисканні на значок в області повідомлень (tray)"
}
}
},
"priority": "Пріоритет повідомлень",
"toast-style": "Стиль спливаючих повідомлень",
"unpause-notification": "Показувати повідомлення при відновленні відтворення після паузи"
},
"name": "Сповіщення"
},
@ -456,9 +596,218 @@
}
},
"save-window-position": "Зберегти положення вікна",
"save-window-size": "Зберегти розмір вікна"
"save-window-size": "Зберегти розмір вікна",
"use-native-pip": "Використовувати вбудований режим \"картинка-у-картинці\" браузера"
},
"name": "Зображення в зображенні"
"name": "Картинка-у-картинці",
"templates": {
"button": "Картинка-у-картинці"
}
},
"playback-speed": {
"description": "Додає слайдер, який керує швидкістю відтворення пісні",
"name": "Швидкість відтворення",
"templates": {
"button": "Швидкість"
}
},
"precise-volume": {
"description": "Точне керування гучністю за допомогою колеса миші/гарячих клавіш, з власним інтерфейсом користувача та настроюваними кроками гучності",
"menu": {
"arrows-shortcuts": "Локальне керування за допомогою клавіш зі стрілками",
"custom-volume-steps": "Встановити власні кроки гучності",
"global-shortcuts": "Глобальні гарячі клавіші"
},
"name": "Точна гучність",
"prompt": {
"global-shortcuts": {
"keybind-options": {
"decrease": "Зменшити гучність",
"increase": "Збільшити гучність"
},
"label": "Вибрати глобальні комбінації клавіш для зміни гучності:",
"title": "Глобальні комбінації клавіш для регулювання гучності"
},
"volume-steps": {
"label": "Вибрати кроки збільшення/зменшення гучності",
"title": "Кроки гучності"
}
}
},
"quality-changer": {
"backend": {
"dialog": {
"quality-changer": {
"detail": "Поточна якість: {{quality}}",
"message": "Вибрати якість відео:",
"title": "Виберіть якість відео"
}
}
},
"description": "Дозволяє змінювати якість відео за допомогою кнопки на відео оверлеї",
"name": "Зміна якості відео"
},
"scrobbler": {
"description": "Додає підтримку скроблінгу (last.fm, Listenbrainz тощо)",
"dialog": {
"lastfm": {
"auth-failed": {
"message": "Не вдалося автентифікуватися на Last.fm\nСховати до наступного запуску.",
"title": "Не вдалося автентифікуватися"
}
}
},
"menu": {
"lastfm": {
"api-settings": "Налаштування API Last.fm"
},
"listenbrainz": {
"token": "Ввести токен користувача ListenBrainz"
},
"scrobble-other-media": "Скробилити інші медіа"
},
"name": "Скроблер",
"prompt": {
"lastfm": {
"api-key": "Ключ API Last.fm",
"api-secret": "Секрет API Last.fm"
},
"listenbrainz": {
"token": {
"label": "Введіть ваш токен користувача ListenBrainz:",
"title": "Токен ListenBrainz"
}
}
}
},
"shortcuts": {
"description": "Дозволяє встановлювати глобальні гарячі клавіші для управління відтворенням (відтворення/пауза/наступний/попередній), вимикаючи OSD для мультимедійних клавіш, увімкнення пошуку за допомогою Ctrl/CMD + F, увімкнення підтримки Linux MPRIS для мультимедійних клавіш та власних гарячих клавіш для досвідчених користувачів",
"menu": {
"override-media-keys": "Перевизначити мультимедійні клавіші",
"set-keybinds": "Встановити глобальні комбінації клавіш"
},
"name": "Гарячі клавіші (і MPRIS)",
"prompt": {
"keybind": {
"keybind-options": {
"next": "Наступний",
"play-pause": "Відтворення / Пауза",
"previous": "Попередній"
},
"label": "Виберіть глобальні комбінації клавіш для керування піснями:",
"title": "Глобальні комбінації клавіш"
}
}
},
"skip-disliked-songs": {
"description": "Пропускає пісні що не сподобались",
"name": "Пропускати пісні що не сподобались"
},
"skip-silences": {
"description": "Автоматично пропускати тишу в піснях",
"name": "Пропуск тиші"
},
"sponsorblock": {
"description": "Автоматично пропускати немузичні частини, такі як вступ/закінчення або частини музичних відеороликів, де не відтворюється музика",
"name": "SponsorBlock"
},
"synced-lyrics": {
"description": "Додає синхронізовані тексти до пісень використовуючи провайдери, такі як LRClib.",
"errors": {
"fetch": "⚠️ - При завантаженні тексту сталась помилка. Спробуйте ще раз пізніше.",
"not-found": "⚠️ - До цієї пісні текст не знайдено."
},
"menu": {
"default-text-string": {
"label": "Символ за замовчуванням між текстами пісень",
"tooltip": "Виберіть символ за замовчуванням, який буде використовуватися для проміжку між текстами пісень"
},
"line-effect": {
"label": "Лінійний ефект",
"submenu": {
"focus": {
"label": "Зосереджитись",
"tooltip": "Зробити білим лише поточний рядок"
},
"offset": {
"label": "Офсет",
"tooltip": "Офсет з права від нинішньої лінії"
},
"scale": {
"label": "Масштабувати",
"tooltip": "Масштабуваты поточну лінію"
}
},
"tooltip": "Виберіть ефект, який потрібно застосувати до поточної лінії"
},
"precise-timing": {
"label": "Зробити текст пісні ідеально синхронізованим",
"tooltip": "Обчисли до мілісекунд відображення наступного рядка (може мати невеликий вплив на продуктивність)"
},
"show-lyrics-even-if-inexact": {
"label": "Показувати текст пісні, навіть якщо він неточний",
"tooltip": "Якщо пісня не знайдена, плагін повторює спробу з іншим пошуковим запитом.\nРезультат з другої спроби може бути не точним."
},
"show-time-codes": {
"label": "Показувати часові марки",
"tooltip": "Показує часові маркы поруч із текстом пісні"
}
},
"name": "Синхронізовані тексти",
"refetch-btn": {
"fetching": "Завантаження...",
"normal": "Перезавантажити текст"
},
"warnings": {
"duration-mismatch": "⚠️ - Тексти цієї пісні можуть бути не синхронізовані через не співпадіння довжини пісні.",
"inexact": "⚠️ - Текст цієї пісні може не співпадати",
"instrumental": "⚠️ - Це інструментал"
}
},
"taskbar-mediacontrol": {
"description": "Керування відтворенням з панелі завдань Windows",
"name": "Керування медіа на панелі завдань"
},
"touchbar": {
"description": "Додає віджет TouchBar для користувачів macOS",
"name": "TouchBar"
},
"tuna-obs": {
"description": "Інтеграція з плагіном Tuna для OBS",
"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": "Візуалізація"
}
}
}

134
src/i18n/resources/ur.json Normal file
View File

@ -0,0 +1,134 @@
{
"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": "ur",
"local-name": "اردو",
"name": "Urdu"
},
"main": {
"console": {
"did-finish-load": {
"dev-tools": "لوڈنگ مکمل ہو گئی۔ DevTools کھل گیا"
},
"i18n": {
"loaded": "i18n لوڈ ہو گیا"
},
"second-instance": {
"receive-command": "پروٹوکول پر کمانڈ موصول ہوئی: \"{{command}}\""
},
"theme": {
"css-file-not-found": "CSS فائل \"{{cssFile}}\" موجود نہیں ہے، نظر انداز کر رہے ہیں"
},
"unresponsive": {
"details": "غیر جوابی غلطی!\n{{error}}"
},
"when-ready": {
"clearing-cache-after-20s": "ایپ کیشے کو صاف کرنا"
},
"window": {
"tried-to-render-offscreen": "ونڈو نے آف اسکرین رینڈر کرنے کی کوشش کی، windowSize={{windowSize}}، displaySize={{displaySize}}، position={{position}}"
}
},
"dialog": {
"hide-menu-enabled": {
"detail": "مینو پوشیدہ ہے، اسے دکھانے کے لیے 'Alt' استعمال کریں (یا 'Escape' اگر ایپ مینیو استعمال کر رہے ہیں)",
"message": "پوشیدہ مینو فعال ہے",
"title": "پوشیدہ مینو فعال ہو گیا"
},
"need-to-restart": {
"buttons": {
"later": "بعد میں",
"restart-now": "ابھی دوبارہ شروع کریں"
},
"detail": "\"{{pluginName}}\" پلگ ان کو اثر انداز ہونے کے لیے دوبارہ شروع کرنے کی ضرورت ہے",
"message": "\"{{pluginName}}\" کو دوبارہ شروع کرنے کی ضرورت ہے",
"title": "دوبارہ شروع کرنے کی ضرورت ہے"
},
"unresponsive": {
"buttons": {
"quit": "چھوڑو",
"relaunch": "دوبارہ لانچ کریں",
"wait": "انتظار کرو"
},
"detail": "ہم زحمت کے لیے معذرت خواہ ہیں! براہ کرم منتخب کریں کہ کیا کرنا ہے:",
"message": "پروگرام غیر ذمہ دار ہے",
"title": "ونڈو غیر جوابدہ"
},
"update-available": {
"buttons": {
"disable": "اپ ڈیٹس کو غیر فعال کریں",
"download": "ڈاؤن لوڈ کریں",
"ok": "ٹھیک ہے"
},
"detail": "ایک نیا ورژن دستیاب ہے اور اسے {{downloadLink}} پر ڈاؤن لوڈ کیا جا سکتا ہے",
"message": "ایک نیا ورژن دستیاب ہے",
"title": "اپ ڈیٹ دستیاب ہے"
}
},
"menu": {
"about": "پروگرام کے بارے میں",
"navigation": {
"label": "نیویگیشن",
"submenu": {
"copy-current-url": "موجودہ URL کاپی کریں",
"go-back": "واپس جاؤ",
"go-forward": "آگے بڑھو",
"quit": "باہر نکلیں",
"restart": "ایپ کو دوبارہ شروع کریں"
}
},
"options": {
"label": "آپشنز",
"submenu": {
"advanced-options": {
"label": "اعلی درجے کے آپشنز",
"submenu": {
"auto-reset-app-cache": "ایپ شروع ہونے پر ایپ کیشے کو دوبارہ ترتیب دیں",
"disable-hardware-acceleration": "ہارڈ ویئر ایکسلریشن کو غیر فعال کریں",
"edit-config-json": "config.json میں ترمیم کریں",
"override-user-agent": "یوزر ایجنٹ کو اوور رائیڈ کریں",
"restart-on-config-changes": "کنفیگریشن تبدیلیوں پر دوبارہ شروع کریں",
"set-proxy": {
"label": "پراکسی سیٹ کریں",
"prompt": {
"label": "پراکسی ایڈریس درج کریں: (غیر فعال کرنے کے لیے خالی چھوڑ دیں)",
"placeholder": "مثال: SOCKS5://127.0.0.1:9999",
"title": "پراکسی سیٹ کریں"
}
},
"toggle-dev-tools": "DevTools ٹوگل کریں"
}
},
"always-on-top": "ہمیشہ اوپر",
"auto-update": "خودکار اپ ڈیٹ",
"hide-menu": {
"dialog": {
"message": "اگلے لانچ پر مینو کو چھپایا جائے گا، اسے دکھانے کے لیے [Alt] استعمال کریں (یا in-app-menu استعمال کرنے پر بیک ٹک [`] کریں)",
"title": "پوشیدہ مینو کو فعال کر دیا گیا"
},
"label": "مینو کو چھپائیں"
},
"language": {
"dialog": {
"message": "دوبارہ شروع کرنے کے بعد زبان بدل دی جائے گی",
"title": "زبان بدل گئی ہے"
}
}
}
}
}
}
}

View File

@ -2,7 +2,7 @@
"common": {
"console": {
"plugins": {
"execute-failed": "Lỗi khi bắt đầu phần mở rộng {{pluginName}}::{{contextName}}",
"execute-failed": "Lỗi thực thi plugin {{pluginName}}::{{contextName}}",
"executed-at-ms": "Phần mở rộng {{pluginName}}::{{contextName}} đã bắt đầu trong {{ms}}ms",
"initialize-failed": "Lỗi khi khởi động phần mở rộng \"{{pluginName}}\"",
"load-all": "Đang tải tất cả phần mở rộng",
@ -17,5 +17,797 @@
"code": "vi",
"local-name": "Tiếng Việt",
"name": "Vietnamese"
},
"main": {
"console": {
"did-finish-load": {
"dev-tools": "Đã tải xong. Đã mở Công cụ dành cho nhà phát triển"
},
"i18n": {
"loaded": "i18n đã được tải"
},
"second-instance": {
"receive-command": "Đã nhận được lệnh qua giao thức: \"{{command}}\""
},
"theme": {
"css-file-not-found": "Tệp tin CSS \"{{cssFile}}\"không tồn tại, đang bỏ qua"
},
"unresponsive": {
"details": "Lỗi không phản hồi!\n{{error}}"
},
"when-ready": {
"clearing-cache-after-20s": "Xóa bộ nhớ đệm ứng dụng"
},
"window": {
"tried-to-render-offscreen": "Cửa sổ đã cố gắng hiển thị ngoài màn hình, windowSize={{windowSize}}, displaySize={{displaySize}}, location={{position}}"
}
},
"dialog": {
"hide-menu-enabled": {
"detail": "Menu đã ẩn, ấn phím 'Alt' để hiện menu (hoặc ấn 'Escape' nếu bạn đang bật In-app Menu)",
"message": "Ẩn Menu đã được bật",
"title": "Ẩn Menu đã được bật"
},
"need-to-restart": {
"buttons": {
"later": "Để sau",
"restart-now": "Khởi động lại ngay"
},
"detail": "Tiện ích mở rộng \"{{pluginName}}\" yêu cầu khởi động lại ứng dụng để áp dụng",
"message": "\"{{pluginName}}\" cần khởi động lại",
"title": "Yêu cầu khởi động lại"
},
"unresponsive": {
"buttons": {
"quit": "Thoát",
"relaunch": "Khởi chạy lại",
"wait": "Đợi"
},
"detail": "Chúng tôi xin lỗi về sự bất tiện này! hãy chọn việc cần làm:",
"message": "Ứng dụng không phản hồi",
"title": "Cửa sổ không phản hồi"
},
"update-available": {
"buttons": {
"disable": "Tắt cập nhật",
"download": "Tải xuống",
"ok": "Đồng ý"
},
"detail": "Đã có phiên bản mới hơn, bạn có thể tải xuống tại {{downloadLink}}",
"message": "Đã có phiên bản mới",
"title": "Cập nhật có sẵn"
}
},
"menu": {
"about": "Giới thiệu",
"navigation": {
"label": "Điều hướng",
"submenu": {
"copy-current-url": "Copy URL hiện tại",
"go-back": "Quay lại",
"go-forward": "Tiến về trước",
"quit": "Thoát",
"restart": "Khởi động lại ứng dụng"
}
},
"options": {
"label": "Tùy chọn",
"submenu": {
"advanced-options": {
"label": "Tùy chọn nâng cao",
"submenu": {
"auto-reset-app-cache": "Làm mới bộ nhớ đệm khi khởi động ứng dụng",
"disable-hardware-acceleration": "Vô hiệu hóa tăng tốc phần cứng",
"edit-config-json": "Chỉnh sửa config.json",
"override-user-agent": "Ghi đè User-Agent",
"restart-on-config-changes": "Khởi động lại khi thay đổi cấu hình",
"set-proxy": {
"label": "Cài đặt proxy",
"prompt": {
"label": "Nhập địa chỉ Proxy: (để trống nếu muốn tắt)",
"placeholder": "Ví dụ: SOCKS5://127.0.0.1:9999",
"title": "Cài proxy"
}
},
"toggle-dev-tools": "Bật/tắt DevTools"
}
},
"always-on-top": "Luôn ở trên cùng",
"auto-update": "Tự động cập nhật",
"hide-menu": {
"dialog": {
"message": "Menu sẽ bị ẩn khi ứng dụng được chạy vào lần tới, dùng phím [Alt] để hiện nó (hoặc phím [`] nếu sử dụng in-app-menu)",
"title": "Ẩn Menu đã được bật"
},
"label": "Ẩn Menu"
},
"language": {
"dialog": {
"message": "Ngôn ngữ sẽ được thay đổi sau khi ứng dụng khởi động lại",
"title": "Ngôn ngữ đã thay đổi"
},
"label": "Ngôn ngữ",
"submenu": {
"to-help-translate": "Bạn muốn giúp dịch? Bấm vào đây"
}
},
"resume-on-start": "Tiếp tục bài hát cuối cùng khi ứng dụng khởi động",
"single-instance-lock": "Khóa một trường hợp",
"start-at-login": "Bắt đầu lúc đăng nhập",
"starting-page": {
"label": "Trang bắt đầu",
"unset": "Bỏ thiết đặt"
},
"tray": {
"label": "Khay",
"submenu": {
"disabled": "Vô hiệu hóa",
"enabled-and-hide-app": "Đã bật và ẩn ứng dụng",
"enabled-and-show-app": "Đã bật và hiển thị ứng dụng",
"play-pause-on-click": "Phát/Tạm dừng khi nhấp chuột"
}
},
"visual-tweaks": {
"label": "Tinh chỉnh hình ảnh",
"submenu": {
"like-buttons": {
"default": "Mặc định",
"force-show": "Tập trung hiển thị",
"hide": "Ẩn",
"label": "Nút thích"
},
"remove-upgrade-button": "Xóa nút nâng cấp",
"theme": {
"dialog": {
"button": {
"cancel": "Hủy",
"remove": "Loại bỏ"
},
"remove-theme": "Bạn có chắc muốn loại bỏ chủ đề tùy chỉnh không?",
"remove-theme-message": "Tùy chọn này sẽ loại bỏ chủ đề tùy chỉnh"
},
"label": "Chủ đề",
"submenu": {
"import-css-file": "Nhập tệp CSS tùy chỉnh",
"no-theme": "Không có chủ đề"
}
}
}
}
}
},
"plugins": {
"enabled": "Đã bật",
"label": "Trình bổ sung",
"new": "MỚI"
},
"view": {
"label": "Xem",
"submenu": {
"force-reload": "Buộc tải lại",
"reload": "Tải lại",
"reset-zoom": "Kích thước thực",
"toggle-fullscreen": "Bật chế độ toàn màn hình",
"zoom-in": "Phóng to",
"zoom-out": "Thu nhỏ"
}
}
},
"tray": {
"next": "Tiếp theo",
"play-pause": "Phát/Tạm Dừng",
"previous": "Trước",
"quit": "Thoát",
"restart": "Khởi động lại ứng dụng",
"show": "Hiện cửa sổ",
"tooltip": {
"default": "YouTube Music",
"with-song-info": "YouTube Music: {{artist}} - {{title}}"
}
}
},
"plugins": {
"ad-speedup": {
"description": "Nếu một quảng cáo được phát thì sẽ bị tắt tiếng và tăng tốc độ phát lên 16x",
"name": "Tăng tốc quảng cáo"
},
"adblocker": {
"description": "Chặn toàn bộ quảng cáo và trình theo dõi",
"menu": {
"blocker": "Trình chặn"
},
"name": "Chặn quảng cáo"
},
"album-actions": {
"description": "Thêm nút hủy không thích, không thích, thích và không thích để áp dụng cho tất cả danh sách phát hoặc album",
"name": "Tác vụ với album"
},
"album-color-theme": {
"description": "Áp dụng chủ đề động và hiệu ứng hình ảnh dựa trên bảng màu của album",
"menu": {
"color-mix-ratio": {
"label": "Tỉ lệ trộn màu",
"submenu": {
"percent": "{{ratio}}%"
}
}
},
"name": "Màu nền album"
},
"ambient-mode": {
"description": "Áp dụng hiệu ứng ánh sáng bằng cách truyền các màu nhẹ từ video vào nền màn hình của bạn",
"menu": {
"blur-amount": {
"label": "Lượng mờ",
"submenu": {
"pixels": "{{blurAmount}} điểm ảnh"
}
},
"buffer": {
"label": "Bộ đệm",
"submenu": {
"buffer": "{{buffer}}"
}
},
"opacity": {
"label": "Độ mờ",
"submenu": {
"percent": "{{opacity}}%"
}
},
"quality": {
"label": "Chất lượng",
"submenu": {
"pixels": "{{quality}} điểm ảnh"
}
},
"size": {
"label": "Kích thước",
"submenu": {
"percent": "{{size}}%"
}
},
"smoothness-transition": {
"label": "Độ mượt chuyển cảnh",
"submenu": {
"during": "Trong {{interpolationTime}} s"
}
},
"use-fullscreen": {
"label": "Dùng chế độ toàn màn hình"
}
},
"name": "Chế độ Môi trường xung quanh"
},
"api-server": {
"description": "Thêm máy chủ API để điều khiển trình phát",
"dialog": {
"request": {
"buttons": {
"allow": "Cho phép",
"deny": "Từ chối"
},
"message": "Cho phép {{ID}} ({{origin}}) truy cập API?",
"title": "Yêu cầu cho phép API"
}
},
"menu": {
"auth-strategy": {
"label": "Chiến thuật xác thực",
"submenu": {
"auth-at-first": {
"label": "Xác thực ngay yêu cầu đầu tiên"
},
"none": {
"label": "Không/Chưa xác thực (Need context)"
}
}
},
"hostname": {
"label": "Tên máy chủ"
},
"port": {
"label": "Cổng"
}
},
"name": "Máy chủ API [Beta]",
"prompt": {
"hostname": {
"label": "Điền tên máy chủ (như 0.0.0.0) cho máy chủ API:",
"title": "Tên máy chủ"
},
"port": {
"label": "Nhập cổng cho máy chủ API:",
"title": "Cổng"
}
}
},
"audio-compressor": {
"description": "Áp dụng tính năng nén cho âm thanh (giảm âm lượng của phần to nhất của tín hiệu và tăng âm lượng của phần nhỏ nhất)",
"name": "Bộ nén âm thanh"
},
"blur-nav-bar": {
"description": "Làm mờ và trong suốt thanh điều hướng",
"name": "Thanh điều hướng mờ"
},
"bypass-age-restrictions": {
"description": "Bỏ qua xác minh độ tuổi của YouTube",
"name": "Bỏ qua hạn chế độ tuổi"
},
"captions-selector": {
"description": "Bộ lựa chọn phụ đề cho các bài hát trên Youtube Music",
"menu": {
"autoload": "Tự động chọn phụ đề vừa sử dụng",
"disable-captions": "Không có phụ đề đặt làm mặc định"
},
"name": "Bộ lựa chọn phụ đề",
"prompt": {
"selector": {
"label": "Ngôn ngữ phụ đề hiện tại: {{language}}",
"none": "Không có",
"title": "Chọn ngôn ngữ phụ đề"
}
},
"templates": {
"title": "Mở lựa chọn phụ đề"
}
},
"compact-sidebar": {
"description": "Luôn đặt thanh bên cạnh ở chế độ thu gọn",
"name": "Thanh bên thu gọn"
},
"crossfade": {
"description": "Chuyển tiếp giữa các bài hát",
"menu": {
"advanced": "Nâng cao"
},
"name": "Xen kẽ [thử nghiệm]",
"prompt": {
"options": {
"multi-input": {
"fade-in-duration": "Xuất hiện mờ dần trong khoảng thời gian (ms)",
"fade-out-duration": "Khoảng thời gian hoát ra mờ dần (ms)",
"fade-scaling": {
"label": "Làm mờ theo tỉ lệ",
"linear": "Trực tuyến",
"logarithmic": "Logarit"
},
"seconds-before-end": "Xen kẽ N giây trước khi kết thúc"
},
"title": "Tùy chọn xen kẽ"
}
}
},
"disable-autoplay": {
"description": "Bắt đầu bài hát khi ở chế độ \"tạm dừng\"",
"menu": {
"apply-once": "Áp dụng khi khởi động"
},
"name": "Tắt tự động phát"
},
"discord": {
"backend": {
"already-connected": "Đã cố gắng kết nối với kết nối khả dụng",
"connected": "Đã kết nối với Discord",
"disconnected": "Đã ngắt kết nối với Discord"
},
"description": "Cho bạn bè của bạn thấy những gì bạn nghe với Rich Presence",
"menu": {
"auto-reconnect": "Tự động kết nối lại",
"clear-activity": "Xoá hoạt động",
"clear-activity-after-timeout": "Xóa hoạt động sau khi hết thời gian chờ",
"connected": "Đã kết nối",
"disconnected": "Đã ngắt kết nối",
"hide-duration-left": "Ẩn thời lượng còn lại",
"hide-github-button": "Ẩn nút liên kết GitHub",
"play-on-youtube-music": "Phát trong Youtube Music",
"set-inactivity-timeout": "Đặt thời gian chờ không hoạt động"
},
"name": "Discord Rich Presence",
"prompt": {
"set-inactivity-timeout": {
"label": "Nhập thời gian chờ không hoạt động tính bằng giây:",
"title": "Đặt thời gian chờ không hoạt động"
}
}
},
"downloader": {
"backend": {
"dialog": {
"error": {
"buttons": {
"ok": "Đồng ý"
},
"message": "Argh! Xin lỗi, tải xuống thất bại…",
"title": "Lỗi khi tải xuống!"
},
"start-download-playlist": {
"buttons": {
"ok": "Đồng ý"
},
"detail": "({{playlistSize}} bài hát)",
"message": "Đang tải danh sách phát {{playlistTitle}}",
"title": "Đã bắt đầu tải xuống"
}
},
"feedback": {
"conversion-progress": "Chuyển đổi: {{percent}}%",
"converting": "Đang chuyển đổi…",
"done": "Đã xong: {{filePath}}",
"download-info": "Đang tải {{artist}} - {{title}} [{{videoId}}",
"download-progress": "Đang tải: {{percent}}%",
"downloading": "Đang tải…",
"downloading-counter": "Đang tải {{current}}/{{total}}…",
"downloading-playlist": "Đang tải danh sách phát \"{{playlistTitle}}\" - {{playlistSize}} bài hát ({{playlistId}})",
"error-while-downloading": "Lỗi tải xuống \"{{author}} - {{title}}\": {{error}}",
"folder-already-exists": "Thư mục {{playlistFolder}} đã tồn tại",
"getting-playlist-info": "Đang lấy thông tin danh sách phát…",
"loading": "Đang tải…",
"playlist-has-only-one-song": "Danh sách phát chỉ có một mục, tải trực tiếp",
"playlist-id-not-found": "Không tìm thấy ID danh sách phát",
"playlist-is-empty": "Danh sách phát trống",
"playlist-is-mix-or-private": "Lỗi lấy thông tin danh sách phát: đảm bảo danh sách phát không ở chế độ riêng tư hoặc là danh sách phát \"Dành cho bạn\"\n\n{{error}}",
"preparing-file": "Đang chuẩn bị thư mục…",
"saving": "Đang lưu…",
"trying-to-get-playlist-id": "Đang lấy ID danh sách phát: {{playlistId}}",
"video-id-not-found": "Không tìm thấy video",
"writing-id3": "Đang ghi thẻ ID3…"
}
},
"description": "Tải xuống MP3 / âm thanh nguồn trực tiếp từ giao diện",
"menu": {
"choose-download-folder": "Chọn thư mục tải xuống",
"download-finish-settings": {
"label": "Tải xuống khi hoàn tất",
"prompt": {
"last-percent": "Sau x phần trăm",
"last-seconds": "x giây cuối",
"title": "Định cấu hình thời điểm tải xuống"
},
"submenu": {
"advanced": "Nâng cao",
"enabled": "Đã kích hoạt",
"mode": "Chế độ thời gian",
"percent": "Phần trăm",
"seconds": "Giây"
}
},
"download-playlist": "Tải danh sách phát",
"presets": "Cài đặt sẵn",
"skip-existing": "Bỏ qua các tập tin hiện có"
},
"name": "Trình tải xuống",
"renderer": {
"can-not-update-progress": "Không thể cập nhật tiến độ"
},
"templates": {
"button": "Tải xuống"
}
},
"exponential-volume": {
"description": "Làm cho thanh trượt âm lượng theo cấp số nhân để dễ dàng chọn âm lượng thấp hơn.",
"name": "Âm lượng theo cấp số nhân"
},
"in-app-menu": {
"description": "Mang lại cho thanh menu một giao diện lạ mắt, tối màu hoặc màu album",
"menu": {
"hide-dom-window-controls": "Ẩn cửa sổ điều khiển DOM"
},
"name": "Menu trong ứng dụng"
},
"lumiastream": {
"description": "Thêm hỗ trợ Lumia Stream",
"name": "Lumia Stream [Thử nghiệm]"
},
"lyrics-genius": {
"description": "Thêm hỗ trợ lời bài hát cho hầu hết các bài hát",
"menu": {
"romanized-lyrics": "Lời bài hát La Mã"
},
"name": "Lời bài hát từ Genius",
"renderer": {
"fetched-lyrics": "Lời bài hát được tìm nạp cho Genius"
}
},
"music-together": {
"description": "Chia sẻ danh sách phát với người khác. Khi máy chủ phát một bài hát, những người khác cũng sẽ nghe bài hát đó",
"dialog": {
"enter-host": "Nhập ID máy chủ"
},
"internal": {
"save": "Lưu",
"track-source": "Nguồn âm thanh",
"unknown-user": "Người dùng không rõ"
},
"menu": {
"click-to-copy-id": "Sao chép ID máy chủ",
"close": "Đóng Music Together",
"connected-users": "Người dùng đã kết nối",
"disconnect": "Ngắt kết nối Music Together",
"empty-user": "Không có người dùng đã kết nối",
"host": "Máy chủ Music Together",
"join": "Tham gia Music Together",
"permission": {
"all": "Cho phép người tham gia kiểm soát danh sách phát và trình phát",
"host-only": "Chỉ người tạo máy chủ có quyền điều khiển danh sách phát và trình phát",
"playlist": "Cho phép người tham gia điều khiển danh sách phát"
},
"set-permission": "Thay đổi quyền điều khiển",
"status": {
"disconnected": "Đã ngắt kết nối",
"guest": "Đã kết nối với tư cách Người tham gia",
"host": "Đã kết nối với tư cách Máy chủ"
}
},
"name": "Music Together [Thử nghiệm]",
"toast": {
"add-song-failed": "Thêm bài hát thất bại",
"closed": "Đã đóng Music Together",
"disconnected": "Đã ngắt kết nối Music Together",
"host-failed": "Không thể tổ chức Music Together",
"id-copied": "Đã sao chép ID máy chủ vào bộ nhớ tạm",
"id-copy-failed": "Sao chepd ID máy chủ vào bộ nhớ tạm không thành công",
"join-failed": "Không thể tham gia Music Together",
"joined": "Đã tham gia Music Together",
"permission-changed": "Quyền của Music Together đã thay đổi thành \"{{permission}}\"",
"remove-song-failed": "Không thể xoá bài hát",
"user-connected": "{{name}} đã tham gia Music Together",
"user-disconnected": "{{name}} đã rời khỏi Music Together"
}
},
"navigation": {
"description": "Mũi tên điều hướng Tiếp theo/Quay lại được tích hợp trực tiếp trong giao diện, giống như trong trình duyệt yêu thích của bạn",
"name": "Điều hướng"
},
"no-google-login": {
"description": "Xóa các nút và liên kết đăng nhập Google khỏi giao diện",
"name": "Không đăng nhập Google"
},
"notifications": {
"description": "Hiển thị thông báo khi bài hát bắt đầu phát (thông báo tương tác có sẵn trên Windows)",
"menu": {
"interactive": "Thông báo tương tác",
"interactive-settings": {
"label": "Cài đặt tương tác",
"submenu": {
"hide-button-text": "Ẩn tên nút",
"refresh-on-play-pause": "Làm mới khi phát/tạm dừng",
"tray-controls": "Mở/Đóng khi nhấp vào khay"
}
},
"priority": "Ưu tiên thông báo",
"toast-style": "Kiểu thông báo bật lên",
"unpause-notification": "Hiển thị thông báo khi bỏ tạm dừng"
},
"name": "Thông báo"
},
"picture-in-picture": {
"description": "Cho phép chuyển ứng dụng sang chế độ ảnh trong ảnh",
"menu": {
"always-on-top": "Luôn ở trên cùng",
"hotkey": {
"label": "Phím nóng",
"prompt": {
"keybind-options": {
"hotkey": "Phím nóng"
},
"label": "Chọn phím nóng để chuyển đổi ảnh trong ảnh",
"title": "Phím nóng ảnh trong ảnh"
}
},
"save-window-position": "Lưu vị trí cửa sổ",
"save-window-size": "Lưu kích thước cửa sổ",
"use-native-pip": "Sử dụng PiP gốc của trình duyệt"
},
"name": "Ảnh trong ảnh",
"templates": {
"button": "Ảnh trong ảnh"
}
},
"playback-speed": {
"description": "Nghe nhanh, nghe chậm! Thêm thanh trượt kiểm soát tốc độ bài hát",
"name": "Tốc độ phát lại",
"templates": {
"button": "Tốc độ"
}
},
"precise-volume": {
"description": "Kiểm soát âm lượng chính xác bằng con lăn chuột/phím nóng, với HUD tùy chỉnh và các bước âm lượng có thể tùy chỉnh",
"menu": {
"arrows-shortcuts": "Điều khiển phím mũi tên cục bộ",
"custom-volume-steps": "Đặt các bước âm lượng tùy chỉnh",
"global-shortcuts": "Phím nóng chung"
},
"name": "Âm lượng chính xác",
"prompt": {
"global-shortcuts": {
"keybind-options": {
"decrease": "Giảm âm lượng",
"increase": "Tăng âm lượng"
},
"label": "Chọn tổ hợp phím âm lượng chung:",
"title": "Liên kết phím âm lượng chung"
},
"volume-steps": {
"label": "Chọn các bước tăng/giảm âm lượng",
"title": "Bước âm lượng"
}
}
},
"quality-changer": {
"backend": {
"dialog": {
"quality-changer": {
"detail": "Chất lượng hiện tại: {{quality}}",
"message": "Chọn chất lượng video:",
"title": "Chọn chất lượng video:"
}
}
},
"description": "Cho phép thay đổi chất lượng video bằng một nút trên lớp phủ video",
"name": "Thay đổi chất lượng video"
},
"scrobbler": {
"description": "Thêm hỗ trợ scrobbling (v.v. Last.fm, Listenbrainz)",
"dialog": {
"lastfm": {
"auth-failed": {
"message": "Không thể xác minh với \nẨn thông báo cho đến lần bật ứng dụng tiếp theo.",
"title": "Xác minh thất bại"
}
}
},
"menu": {
"lastfm": {
"api-settings": "Cài đặt API Last.fm"
},
"listenbrainz": {
"token": "Nhập mã người dùng ListenBrainz"
},
"scrobble-other-media": "Scrobber nội dung khác"
},
"name": "Scrobbler",
"prompt": {
"lastfm": {
"api-key": "Khóa API Last.fm",
"api-secret": "API Last.fm bảo mật"
},
"listenbrainz": {
"token": {
"label": "Nhập mã người dùng ListenBrainz của bạn:",
"title": "Mã ListenBrainz"
}
}
}
},
"shortcuts": {
"description": "Cho phép thiết lập các phím nóng chung để phát lại (phát/tạm dừng/tiếp theo/trước) và tắt OSD media bằng cách ghi đè các phím media, bật Ctrl/CMD + F để tìm kiếm, bật hỗ trợ Linux MPRIS cho các phím media và các phím nóng tùy chỉnh cho người dùng nâng cao",
"menu": {
"override-media-keys": "Ghi đè khóa phương tiện",
"set-keybinds": "Đặt điều khiển bài hát chung"
},
"name": "Phím tắt (& MPRIS)",
"prompt": {
"keybind": {
"keybind-options": {
"next": "Tiếp theo",
"play-pause": "Phát / Tạm dừng",
"previous": "Trước đó"
},
"label": "Chọn tổ hợp phím chung để kiểm soát bài hát:",
"title": "Tổ hợp phím chung"
}
}
},
"skip-disliked-songs": {
"description": "Bỏ qua những bài hát không thích",
"name": "Bỏ qua những bài hát không thích"
},
"skip-silences": {
"description": "Tự động bỏ qua các đoạn im lặng trong bài hát",
"name": "Bỏ qua đoạn im lặng"
},
"sponsorblock": {
"description": "Tự động bỏ qua các phần không phải âm nhạc như phần giới thiệu/kết thúc hoặc các phần của video nhạc mà bài hát không được phát",
"name": "SponsorBlock"
},
"synced-lyrics": {
"description": "Cung cấp lời bài hát được đồng bộ hoá với các bài hát, sử dụng những nhà cung cấp như LRClib.",
"errors": {
"fetch": "⚠️ - Đã xảy ra lỗi khi tìm lời bài hát, Vui lòng thử lại sau.",
"not-found": "⚠️ - Không tìm thấy lời cho bài hát này."
},
"menu": {
"default-text-string": {
"label": "Kí tự mặc định giữa các lời bài hát",
"tooltip": "Chọn kí tự mặc định cho khoảng trống giữa các lời bài hát"
},
"line-effect": {
"label": "Kiểu đường thẳng",
"submenu": {
"focus": {
"label": "Tập trung",
"tooltip": "Chỉ làm cho dòng hiện tại có màu trắng"
},
"offset": {
"label": "Độ lệch",
"tooltip": "Độ lệch bên phải của dòng hiện tại"
},
"scale": {
"label": "Tỉ lệ",
"tooltip": "Áp dụng tỉ lệ cho dòng hiện tại"
}
},
"tooltip": "Chọn kiểu để áp dụng cho dòng hiện tại"
},
"precise-timing": {
"label": "Làm cho lời bài hát được đồng bộ hoàn hảo",
"tooltip": "Tính toán chính xác đến mili giây thời gian hiển thị dòng tiếp theo (có thể có tác động nhỏ đến hiệu suất)"
},
"show-lyrics-even-if-inexact": {
"label": "Hiển thị lời bài hát ngay cả khi không chính xác",
"tooltip": "Nếu không tìm thấy bài hát, plugin sẽ thử lại bằng truy vấn tìm kiếm khác.\nKết quả từ lần thử thứ hai có thể không chính xác."
},
"show-time-codes": {
"label": "Hiện mốc thời gian",
"tooltip": "Hiện mốc thời gian bên cạnh lời bài hát"
}
},
"name": "Lời bài hát được đồng bộ hoá",
"refetch-btn": {
"fetching": "Đang tìm nạp...",
"normal": "Tải lại lời bài hát"
},
"warnings": {
"duration-mismatch": "⚠️ - Lời bài hát có thể không đồng bộ do thời lượng không khớp.",
"inexact": "⚠️ - Lời bài hát này có thể không chính xác",
"instrumental": "⚠️ - Đây là một bài hát trình diễn bằng nhạc khí"
}
},
"taskbar-mediacontrol": {
"description": "Kiểm soát phát lại từ thanh tác vụ Windows của bạn",
"name": "Kiểm soát phương tiện trên thanh tác vụ"
},
"touchbar": {
"description": "Thêm tiện ích TouchBar cho người dùng macOS",
"name": "TouchBar"
},
"tuna-obs": {
"description": "Tích hợp với plugin Tuna của OBS",
"name": "Tuna OBS"
},
"video-toggle": {
"description": "Thêm nút để chuyển giữa chế độ Video/Bài hát. Cũng có thể tùy ý xóa toàn bộ tab video",
"menu": {
"align": {
"label": "Căn chỉnh",
"submenu": {
"left": "Trái",
"middle": "Giữa",
"right": "Phải"
}
},
"force-hide": "Buộc loại bỏ tab video",
"mode": {
"label": "Chế độ",
"submenu": {
"custom": "Chuyển đổi tùy chỉnh",
"disabled": "Vô hiệu hoá",
"native": "Chuyển đổi gốc"
}
}
},
"name": "Chuyển đổi video",
"templates": {
"button": "Bài hát"
}
},
"visualizer": {
"description": "Thêm trình hiển thị cho trình phát",
"menu": {
"visualizer-type": "Loại trình hiển thị"
},
"name": "Trình hiển thị"
}
}
}

View File

@ -39,7 +39,7 @@
"clearing-cache-after-20s": "正在清理应用缓存"
},
"window": {
"tried-to-render-offscreen": "窗口试图于屏幕外绘制, windowSize={{windowSize}}, displaySize={{displaySize}}, position={{position}}"
"tried-to-render-offscreen": "窗口试图于屏幕外绘制,窗口大小={{windowSize}},显示尺寸={{displaySize}},位置={{position}}"
}
},
"dialog": {
@ -158,6 +158,14 @@
},
"remove-upgrade-button": "移除升级按钮",
"theme": {
"dialog": {
"button": {
"cancel": "取消",
"remove": "移除"
},
"remove-theme": "您确定要移除自定义主题?",
"remove-theme-message": "此操作将移除自定义主题"
},
"label": "主题",
"submenu": {
"import-css-file": "导入自定义 CSS 文件",
@ -171,7 +179,7 @@
"plugins": {
"enabled": "已启用",
"label": "插件",
"new": "新"
"new": "新"
},
"view": {
"label": "视图",
@ -191,10 +199,18 @@
"previous": "上一首",
"quit": "退出",
"restart": "重启应用",
"show": "显示窗口"
"show": "显示窗口",
"tooltip": {
"default": "YouTube Music",
"with-song-info": "YouTube Music: {{artist}} - {{title}}"
}
}
},
"plugins": {
"ad-speedup": {
"description": "使用静音以及 16 倍速播放跳过广告片段",
"name": "广告加速跳过"
},
"adblocker": {
"description": "屏蔽所有广告与跟踪器",
"menu": {
@ -203,15 +219,23 @@
"name": "广告屏蔽器"
},
"album-actions": {
"description": "添加作用于播放列表或专辑中所有歌曲的全局“点赞/取消点赞”与“喜欢/取消喜欢”按钮",
"description": "添加作用于播放列表或专辑中所有歌曲的全局“点赞/取消点赞”与“喜欢/取消喜欢”按钮",
"name": "专辑操作"
},
"album-color-theme": {
"description": "根据专辑封面配色动态改变主题与视觉效果",
"menu": {
"color-mix-ratio": {
"label": "颜色混合比例",
"submenu": {
"percent": "{{ratio}}%"
}
}
},
"name": "专辑配色主题"
},
"ambient-mode": {
"description": "将视频中的浅配色作为光效投射到背景中,以增加沉浸感",
"description": "将视频中的浅配色作为光效投射到背景中,以增加沉浸感",
"menu": {
"blur-amount": {
"label": "模糊等级",
@ -255,6 +279,49 @@
},
"name": "沉浸模式"
},
"api-server": {
"description": "添加一个 API 服务器来控制播放器",
"dialog": {
"request": {
"buttons": {
"allow": "允许",
"deny": "拒绝"
},
"message": "允许 {{ID}} {{origin}} 访问该 API 吗?",
"title": "API 授权请求"
}
},
"menu": {
"auth-strategy": {
"label": "授权策略",
"submenu": {
"auth-at-first": {
"label": "首次请求时授权"
},
"none": {
"label": "无需授权"
}
}
},
"hostname": {
"label": "主机名"
},
"port": {
"label": "端口号"
}
},
"name": "API 服务器 [测试]",
"prompt": {
"hostname": {
"label": "请输入 API 服务器的主机名(如 0.0.0.0",
"title": "主机名"
},
"port": {
"label": "请输入 API 服务器的端口号:",
"title": "端口号"
}
}
},
"audio-compressor": {
"description": "对音频应用压缩(压低响亮部分,提升柔和部分)",
"name": "音频压缩器"
@ -390,6 +457,21 @@
"description": "在界面内直接下载 MP3 / 源音频",
"menu": {
"choose-download-folder": "选择下载文件夹",
"download-finish-settings": {
"label": "边播边下",
"prompt": {
"last-percent": "播放超过指定百分比时开始下载",
"last-seconds": "歌曲剩余指定秒数时开始下载",
"title": "配置在何时开始下载"
},
"submenu": {
"advanced": "高级",
"enabled": "已启用",
"mode": "激活时机",
"percent": "按播放百分比",
"seconds": "按播放秒数"
}
},
"download-playlist": "下载播放列表",
"presets": "预设",
"skip-existing": "跳过已存在的文件"
@ -402,6 +484,18 @@
"button": "下载"
}
},
"equalizer": {
"description": "为播放器添加均衡器",
"menu": {
"presets": {
"label": "预设",
"list": {
"bass-booster": "低音增强器"
}
}
},
"name": "均衡器"
},
"exponential-volume": {
"description": "让音量滑块指数化以便选择更低的音量。",
"name": "指数化音量"
@ -413,10 +507,6 @@
},
"name": "应用内菜单"
},
"last-fm": {
"description": "添加 Last.fm 记录支持",
"name": "Last.fm"
},
"lumiastream": {
"description": "添加 Lumia Stream 支持",
"name": "Lumia Stream [测试]"
@ -424,11 +514,11 @@
"lyrics-genius": {
"description": "为大多数歌曲添加歌词支持",
"menu": {
"romanized-lyrics": "罗马化字幕"
"romanized-lyrics": "罗马化歌词"
},
"name": "Genius 歌词",
"renderer": {
"fetched-lyrics": "已从 Genius 获取字幕"
"fetched-lyrics": "已从 Genius 获取歌词"
}
},
"music-together": {
@ -443,12 +533,12 @@
},
"menu": {
"click-to-copy-id": "复制发起者 ID",
"close": "关闭 Music Together",
"close": "关闭一起听",
"connected-users": "已连接用户",
"disconnect": "断开 Music Together 连接",
"disconnect": "断开一起听连接",
"empty-user": "没有已连接的用户",
"host": "Music Together 发起者",
"join": "加入 Music Together",
"host": "一起听发起者",
"join": "加入一起听",
"permission": {
"all": "允许来宾控制播放列表与播放器",
"host-only": "仅发起人可以控制播放列表与播放器",
@ -461,19 +551,20 @@
"host": "已作为发起人连接"
}
},
"name": "Music Together [测试]",
"name": "一起听 [测试]",
"toast": {
"add-song-failed": "添加歌曲失败",
"closed": "Music Together 已关闭",
"disconnected": "Music Together 已断开连接",
"host-failed": "发起 Music Together 失败",
"closed": "一起听已关闭",
"disconnected": "一起听已断开连接",
"host-failed": "发起一起听失败",
"id-copied": "已将发起者 ID 复制到剪切板",
"join-failed": "加入 Music Together 失败",
"joined": "加入 Music Together",
"permission-changed": "Music Together 权限已改为 \"{{permission}}\"",
"id-copy-failed": "复制发起者 ID 到剪贴板时失败",
"join-failed": "加入一起听失败",
"joined": "已加入一起听",
"permission-changed": "一起听权限已改为 \"{{permission}}\"",
"remove-song-failed": "移除歌曲失败",
"user-connected": "{{name}} 加入了 Music Together",
"user-disconnected": "{{name}} 离开了 Music Together"
"user-connected": "{{name}} 加入了一起听",
"user-disconnected": "{{name}} 离开了一起听"
}
},
"navigation": {
@ -568,8 +659,41 @@
"description": "允许在视频上显示切换画质按钮",
"name": "视频画质切换器"
},
"scrobbler": {
"description": "添加歌曲追踪支持(如 Last.fm 和 Listenbrainz",
"dialog": {
"lastfm": {
"auth-failed": {
"message": "与 Last.fm 认证时失败\n弹出窗口将在下次重启前隐藏。",
"title": "认证失败"
}
}
},
"menu": {
"lastfm": {
"api-settings": "Last.fm API 设置"
},
"listenbrainz": {
"token": "输入 ListenBrainz 用户令牌"
},
"scrobble-other-media": "记录其他媒体文件"
},
"name": "歌曲记录器",
"prompt": {
"lastfm": {
"api-key": "Last.fm API 密钥Key",
"api-secret": "Last.fm API 密文Secret"
},
"listenbrainz": {
"token": {
"label": "输入您的 ListenBrainz 用户令牌:",
"title": "ListenBrainz 令牌"
}
}
}
},
"shortcuts": {
"description": "允许为音频回放(播放/暂停/上一曲/下一曲)设置全局热键,兼具覆盖物理键以禁用 OSD、启用 Ctrl/CMD + F 搜索、为物理键启用 Linux MPRIS 支持及自定义热键等高级功能",
"description": "允许为音频回放操作(播放/暂停/上一曲/下一曲)设置全局热键,兼具覆盖物理键以禁用 OSD、启用 Ctrl/CMD + F 搜索、为物理键启用 Linux MPRIS 支持及自定义热键等高级功能",
"menu": {
"override-media-keys": "覆盖物理媒体热键",
"set-keybinds": "设置全局歌曲控件"
@ -599,6 +723,59 @@
"description": "自动跳过非音乐部分,如 MV 的介绍/结语以及歌曲未开始的部分",
"name": "SponsorBlock"
},
"synced-lyrics": {
"description": "透过 LRClib 等服务提供滚动歌词显示。",
"errors": {
"fetch": "⚠️ - 获取歌词时发生错误。请稍后再试。",
"not-found": "⚠️ - 未找到此歌曲的歌词。"
},
"menu": {
"default-text-string": {
"label": "默认的歌词行间字符",
"tooltip": "选择在歌词间隙期间默认显示的字符"
},
"line-effect": {
"label": "歌词行特效",
"submenu": {
"focus": {
"label": "高亮",
"tooltip": "仅将当前歌词行显示为白色"
},
"offset": {
"label": "偏移",
"tooltip": "将当前歌词行向右偏移"
},
"scale": {
"label": "放大",
"tooltip": "放大当前歌词行"
}
},
"tooltip": "选择当前歌词行应用的特效"
},
"precise-timing": {
"label": "让滚动歌词完全同步",
"tooltip": "以毫秒精度估算下句歌词的显示时间(可能对性能有小幅影响)"
},
"show-lyrics-even-if-inexact": {
"label": "即使时值不精确依然显示歌词",
"tooltip": "若首次搜索未找到该歌曲的歌词,插件将尝试用不同的查询方式重新获取。\n重试查询的结果可能不精确。"
},
"show-time-codes": {
"label": "显示时值",
"tooltip": "在歌词旁显示时值"
}
},
"name": "滚动歌词",
"refetch-btn": {
"fetching": "正在获取…",
"normal": "重新获取歌词"
},
"warnings": {
"duration-mismatch": "⚠️ - 由于持续时间不对应,滚动歌词可能不同步。",
"inexact": "⚠️ - 此曲目的歌词可能不准确",
"instrumental": "⚠️ - 此曲目为纯音乐"
}
},
"taskbar-mediacontrol": {
"description": "从 Windows 任务栏控制音乐回放",
"name": "任务栏媒体控件"

View File

@ -69,9 +69,9 @@
},
"update-available": {
"buttons": {
"disable": "停用新",
"download": "下載",
"ok": "確定"
"disable": "停用新版本通知",
"download": "前往下載",
"ok": "略過"
},
"detail": "新版本已經推出,你可以至 {{downloadLink}} 下載",
"message": "有新版本可用",
@ -83,7 +83,7 @@
"navigation": {
"label": "導覽列",
"submenu": {
"copy-current-url": "複製目前的網址",
"copy-current-url": "複製當前頁面的網址",
"go-back": "回到上一頁",
"go-forward": "回到下一頁",
"quit": "退出",
@ -96,11 +96,11 @@
"advanced-options": {
"label": "進階選項",
"submenu": {
"auto-reset-app-cache": "當程式啟動時重設應用程式快取",
"auto-reset-app-cache": "啟動時重設應用快取",
"disable-hardware-acceleration": "關閉硬體加速",
"edit-config-json": "編輯 config.json",
"override-user-agent": "覆寫使用者代理",
"restart-on-config-changes": "設定檔更動時自動重啟應用程式",
"restart-on-config-changes": "設定變更時自動重啟應用",
"set-proxy": {
"label": "設定代理伺服器",
"prompt": {
@ -112,7 +112,7 @@
"toggle-dev-tools": "切換開發者人員工具"
}
},
"always-on-top": "永遠顯示在最上層",
"always-on-top": "最上層顯示",
"auto-update": "自動更新",
"hide-menu": {
"dialog": {
@ -123,27 +123,27 @@
},
"language": {
"dialog": {
"message": "語言會在下一次重啟應用程式時變更",
"message": "語言會在重啟應用變更",
"title": "語言已變更"
},
"label": "語言",
"submenu": {
"to-help-translate": "想協助翻譯?按一下這裡"
"to-help-translate": "想協助翻譯?按一下這裡"
}
},
"resume-on-start": "應用啟時繼續上次播放的歌曲",
"single-instance-lock": "單視窗鎖定",
"resume-on-start": "應用啟時繼續播放上次的歌曲",
"single-instance-lock": "單實例模式",
"start-at-login": "開機時啟動",
"starting-page": {
"label": "啟動頁面",
"unset": "不指定"
},
"tray": {
"label": "系統閘圖式",
"label": "系統",
"submenu": {
"disabled": "已停用",
"enabled-and-hide-app": "啟用並隱藏應用程式",
"enabled-and-show-app": "啟用並顯示應用程式",
"enabled-and-hide-app": "啟用並最小化應用",
"enabled-and-show-app": "啟用並顯示應用",
"play-pause-on-click": "點擊時播放/暫停"
}
},
@ -158,6 +158,14 @@
},
"remove-upgrade-button": "移除升級按鈕",
"theme": {
"dialog": {
"button": {
"cancel": "取消",
"remove": "確定移除"
},
"remove-theme": "確定要移除自訂主題嗎?",
"remove-theme-message": "這將會移除自訂主題"
},
"label": "主題",
"submenu": {
"import-css-file": "匯入自訂 CSS 檔案",
@ -170,7 +178,8 @@
},
"plugins": {
"enabled": "啟用",
"label": "外掛功能"
"label": "外掛功能",
"new": "新的"
},
"view": {
"label": "視窗",
@ -190,23 +199,43 @@
"previous": "上一首",
"quit": "關閉",
"restart": "重啟程式",
"show": "顯示視窗"
"show": "顯示視窗",
"tooltip": {
"default": "Youtube Music",
"with-song-info": "YouTube Music: {{artist}} - {{title}}"
}
}
},
"plugins": {
"ad-speedup": {
"description": "使用 16 倍速播放及靜音來跳過廣告片段",
"name": "加速略過"
},
"adblocker": {
"description": "阻擋所有廣告",
"menu": {
"blocker": "阻擋方式"
},
"name": "廣告阻擋"
"name": "廣告攔截器"
},
"album-actions": {
"description": "新增支援對整個播放清單或專輯\"喜歡/不喜歡\"\"取消喜歡/取消不喜歡\"的按鈕",
"name": "進階專輯操作"
},
"album-color-theme": {
"description": "依歌曲色調自動更改應用程式主題",
"description": "根據專輯封面色調更改應用程式主題顏色",
"menu": {
"color-mix-ratio": {
"label": "顏色混合程度",
"submenu": {
"percent": "{{ratio}}%"
}
}
},
"name": "隨歌曲色調變更主題"
},
"ambient-mode": {
"description": "將影片內容的淺色畫面投放至螢幕背景, 讓觀眾在觀賞影片時更有臨場感",
"description": "影片周圍背景根據影片內容改變顏色, 讓觀眾在觀賞影片時更有臨場感",
"menu": {
"blur-amount": {
"label": "模糊等級",
@ -250,6 +279,49 @@
},
"name": "微光效果"
},
"api-server": {
"description": "新增伺服器以使用 API 控制播放器",
"dialog": {
"request": {
"buttons": {
"allow": "允許",
"deny": "拒絕"
},
"message": "允許 {{ID}} ({{origin}}) 訪問 API 嗎?",
"title": "API 驗證請求"
}
},
"menu": {
"auth-strategy": {
"label": "驗證策略",
"submenu": {
"auth-at-first": {
"label": "首次請求時驗證"
},
"none": {
"label": "不要驗證"
}
}
},
"hostname": {
"label": "主機名稱"
},
"port": {
"label": "接口"
}
},
"name": "API 伺服器 [Beta]",
"prompt": {
"hostname": {
"label": "輸入 API 伺服器的主機名稱 例 (0.0.0.0)",
"title": "主機名稱"
},
"port": {
"label": "輸入 API 伺服器接口:",
"title": "接口"
}
}
},
"audio-compressor": {
"description": "使用音效壓縮 (大聲部份的音量降低, 柔和部份的音量提高)",
"name": "音效壓縮器"
@ -271,7 +343,7 @@
"name": "標題選擇器",
"prompt": {
"selector": {
"label": "目前標題語言: {{language}}",
"label": "目前標題語言{{language}}",
"none": "無",
"title": "選擇標題語言"
}
@ -316,10 +388,10 @@
"discord": {
"backend": {
"already-connected": "已嘗試可用連接",
"connected": "已連接至Discord",
"disconnected": "與Discord斷開連接"
"connected": "已連接至 Discord",
"disconnected": "與 Discord 斷開連接"
},
"description": "使用Discord狀態與你的好友分享你正在收聽的音樂",
"description": "使用 Discord 狀態與你的好友分享你正在收聽的音樂",
"menu": {
"auto-reconnect": "自動重新連接",
"clear-activity": "清除狀態",
@ -327,14 +399,14 @@
"connected": "已連接",
"disconnected": "已斷開連接",
"hide-duration-left": "隱藏音樂剩餘時間狀態",
"hide-github-button": "隱藏Github頁面按鈕",
"play-on-youtube-music": "顯示Play on YouTube Music按鈕",
"hide-github-button": "隱藏 Github 頁面按鈕",
"play-on-youtube-music": "顯示 Play on YouTube Music 按鈕",
"set-inactivity-timeout": "設定閒置狀態時長"
},
"name": "Discord狀態",
"name": "Discord 狀態",
"prompt": {
"set-inactivity-timeout": {
"label": "設定多少秒後清除狀態:",
"label": "設定多少秒後清除狀態",
"title": "設定閒置狀態時長"
}
}
@ -359,11 +431,11 @@
}
},
"feedback": {
"conversion-progress": "轉檔進度: {{percent}}%",
"conversion-progress": "轉檔進度{{percent}}%",
"converting": "轉檔中…",
"done": "完成下載: {{filePath}}",
"done": "完成下載{{filePath}}",
"download-info": "正在下載 {{artist}} - {{title}} [{{videoId}}",
"download-progress": "下載進度: {{percent}}%",
"download-progress": "下載進度{{percent}}%",
"downloading": "下載中…",
"downloading-counter": "正在下載第 {{current}}/{{total}}…",
"downloading-playlist": "正在下載播放清單 \"{{playlistTitle}}\" - 共 {{playlistSize}} 首歌 ({{playlistId}})",
@ -374,17 +446,32 @@
"playlist-has-only-one-song": "播放清單內只有一首歌曲, 將直接下載",
"playlist-id-not-found": "沒有找到播放清單 ID",
"playlist-is-empty": "播放清單是空的",
"playlist-is-mix-or-private": "獲取播放清單資訊時發生錯誤: 請確認非私人播放清單或是\"為你推薦的合輯\"\n\n{{error}}",
"playlist-is-mix-or-private": "獲取播放清單資訊時發生錯誤請確認非私人播放清單或是\"為你推薦的合輯\"\n\n{{error}}",
"preparing-file": "正在準備檔案…",
"saving": "儲存中…",
"trying-to-get-playlist-id": "正在嘗試獲取播放清單 ID: {{playlistId}}",
"trying-to-get-playlist-id": "正在嘗試獲取播放清單 ID{{playlistId}}",
"video-id-not-found": "未能找到該影片",
"writing-id3": "正在寫入 ID3 標籤…"
}
},
"description": "應用程式內下載 MP3原始音檔",
"description": "開啟應用程式內下載 MP3原始音檔功能",
"menu": {
"choose-download-folder": "選擇下載位置",
"download-finish-settings": {
"label": "智慧下載",
"prompt": {
"last-percent": "歌曲剩餘多少 % 時下載",
"last-seconds": "歌曲剩餘多少秒時下載",
"title": "智慧下載進階設定"
},
"submenu": {
"advanced": "進階",
"enabled": "啟用",
"mode": "判斷方式",
"percent": "百分比",
"seconds": "秒數"
}
},
"download-playlist": "下載播放清單",
"presets": "預設格式",
"skip-existing": "跳過已存在的檔案"
@ -397,6 +484,18 @@
"button": "下載"
}
},
"equalizer": {
"description": "為播放器加入等化器",
"menu": {
"presets": {
"label": "預設格式",
"list": {
"bass-booster": "低音增強器"
}
}
},
"name": "等化器"
},
"exponential-volume": {
"description": "使音量滑桿指數化,以便更容易選擇較低的音量。",
"name": "指數化音量調整"
@ -408,10 +507,6 @@
},
"name": "程式內選單列"
},
"last-fm": {
"description": "新增對Last.fm的scrobbling支援",
"name": "Last.fm"
},
"lumiastream": {
"description": "新增對 Lumia Stream 的支援",
"name": "Lumia Stream [Beta]"
@ -423,16 +518,62 @@
},
"name": "第三方字幕",
"renderer": {
"fetched-lyrics": "為Genius獲取字幕"
"fetched-lyrics": "為 Genius 獲取字幕"
}
},
"music-together": {
"description": "與他人共享播放清單。當發起人播放歌曲時,其他成員也會同步收聽",
"dialog": {
"enter-host": "輸入發起人 ID"
},
"internal": {
"save": "儲存",
"track-source": "追蹤來源",
"unknown-user": "未知使用者"
},
"menu": {
"click-to-copy-id": "複製發起人 ID",
"close": "同步關閉音樂",
"connected-users": "已連接的使用者",
"disconnect": "斷開連接共享音樂",
"empty-user": "無已連接的使用者",
"host": "發起共享音樂",
"join": "加入共享音樂",
"permission": {
"all": "允許加入的使用者控制播放清單及播放控制",
"host-only": "不允許加入的使用者控制播放清單及播放控制",
"playlist": "只允許加入的使用者控制播放清單"
},
"set-permission": "切換共享音樂播放權限",
"status": {
"disconnected": "已斷開連接",
"guest": "以使用者身份加入",
"host": "以發起人身份加入"
}
},
"name": "共享音樂 [Beta]",
"toast": {
"add-song-failed": "歌曲加入失敗",
"closed": "關閉共享音樂",
"disconnected": "共享音樂已斷開連接",
"host-failed": "發起共享音樂失敗",
"id-copied": "已複製發起人 ID",
"id-copy-failed": "複製發起人 ID 失敗",
"join-failed": "加入共享音樂失敗",
"joined": "加入共享音樂",
"permission-changed": "共享音樂播放權限已切換至 \"{{permission}}\"",
"remove-song-failed": "歌曲移除失敗",
"user-connected": "{{name}} 已加入共享音樂",
"user-disconnected": "{{name}} 離開了共享音樂"
}
},
"navigation": {
"description": "將上一頁/下一頁按鈕新增至應用程式上方, 就像你最熟悉的瀏覽器",
"description": "允許應用程式上方顯示上一頁/下一頁按鈕",
"name": "導覽列"
},
"no-google-login": {
"description": "移除Google登入按鈕及連結",
"name": "停用Google登入"
"description": "移除 Google 登入按鈕及連結",
"name": "停用 Google 登入"
},
"notifications": {
"description": "在歌曲播放時發送一個系統通知 (可互動通知僅限Windows)",
@ -455,7 +596,7 @@
"picture-in-picture": {
"description": "允許應用程式切換至子母畫面模式",
"menu": {
"always-on-top": "永遠顯示在最上層",
"always-on-top": "最上層顯示",
"hotkey": {
"label": "快捷鍵",
"prompt": {
@ -496,7 +637,7 @@
"decrease": "降低音量",
"increase": "增加音量"
},
"label": "選擇全域音量控制快捷鍵:",
"label": "選擇全域音量控制快捷鍵",
"title": "全域音量控制快捷鍵"
},
"volume-steps": {
@ -509,8 +650,8 @@
"backend": {
"dialog": {
"quality-changer": {
"detail": "目前畫質: {{quality}}",
"message": "選擇影片畫質:",
"detail": "目前畫質{{quality}}",
"message": "選擇影片畫質",
"title": "選擇影片畫質"
}
}
@ -518,8 +659,41 @@
"description": "允許在影片內進行畫質更改",
"name": "允許變更影片畫質"
},
"scrobbler": {
"description": "額外新增 scrobbling 支援 (例如last.fm, Listenbrainz)",
"dialog": {
"lastfm": {
"auth-failed": {
"message": "Last.fm認證失敗\n將隱藏彈窗直到重啟。",
"title": "認證失敗"
}
}
},
"menu": {
"lastfm": {
"api-settings": "Last.fm API 設定"
},
"listenbrainz": {
"token": "輸入 ListenBrainz 使用者憑證"
},
"scrobble-other-media": "紀錄其他媒體文件"
},
"name": "Scrobbler",
"prompt": {
"lastfm": {
"api-key": "Last.fm API 金鑰",
"api-secret": "Last.fm API 密鑰"
},
"listenbrainz": {
"token": {
"label": "輸入您的 ListenBrainz 使用者憑證:",
"title": "ListenBrainz 使用者憑證"
}
}
}
},
"shortcuts": {
"description": "使用全域快捷鍵控制音樂 (播放/暫停/下一首/上一首) + 透過覆寫媒體快捷鍵停用媒體OSD + 允許Ctrl/CMD + F來搜尋 + 支援Linux MPRIS媒體快捷鍵 + 更多自訂快捷鍵給進階使用者",
"description": "使用全域快捷鍵控制音樂 (播放/暫停/下一首/上一首) + 透過覆寫媒體快捷鍵停用媒體OSD + 允許Ctrl/CMD + F來搜尋 + 支援Linux MPRIS媒體快捷鍵 + 更多自訂快捷鍵給進階使用者",
"menu": {
"override-media-keys": "覆寫媒體快捷鍵",
"set-keybinds": "設定全域歌曲控制"
@ -532,7 +706,7 @@
"play-pause": "播放/暫停",
"previous": "上一首"
},
"label": "選擇全域音樂控制快捷鍵:",
"label": "選擇全域音樂控制快捷鍵",
"title": "全域快捷鍵"
}
}
@ -549,8 +723,61 @@
"description": "自動跳過贊助片段",
"name": "贊助阻擋"
},
"synced-lyrics": {
"description": "使用 LRClib 等管道提供歌詞同步顯示。",
"errors": {
"fetch": "⚠️擷取歌詞時發生錯誤。請稍後再試。",
"not-found": "⚠️未找到該首歌曲的歌詞。"
},
"menu": {
"default-text-string": {
"label": "預設歌詞中間隔的符號",
"tooltip": "選擇歌詞中間隔要使用的符號"
},
"line-effect": {
"label": "歌詞顯示效果",
"submenu": {
"focus": {
"label": "高亮",
"tooltip": "高亮當前的歌詞"
},
"offset": {
"label": "凸行",
"tooltip": "凸行當前的歌詞"
},
"scale": {
"label": "放大",
"tooltip": "放大當前的歌詞"
}
},
"tooltip": "選擇要使用的歌詞顯示效果"
},
"precise-timing": {
"label": "使歌詞完美同步",
"tooltip": "更精確的計算下一行歌詞的顯示(將會降低些許效能)"
},
"show-lyrics-even-if-inexact": {
"label": "即使不精確依然強制顯示歌詞",
"tooltip": "當找不到符合該歌曲的歌詞時,該功能會嘗試不同的搜尋方式。\n使用不同的搜尋方式會導致不精確的結果。"
},
"show-time-codes": {
"label": "顯示時間線",
"tooltip": "在歌詞旁顯示時間線"
}
},
"name": "歌詞同步",
"refetch-btn": {
"fetching": "擷取中...",
"normal": "重新擷取歌詞"
},
"warnings": {
"duration-mismatch": "⚠️歌詞可能會出現不同步的情況。",
"inexact": "⚠️該歌曲的歌詞可能並不精確",
"instrumental": "⚠️該首歌曲為純音樂"
}
},
"taskbar-mediacontrol": {
"description": "透過工作列應用程式圖式控制媒體播放",
"description": "允許工作列應用程式預覽介面顯示媒體控制相關按鈕",
"name": "工作列媒體控制"
},
"touchbar": {

View File

@ -11,6 +11,8 @@ import {
shell,
dialog,
ipcMain,
protocol,
type BrowserWindowConstructorOptions,
} from 'electron';
import enhanceWebRequest, {
BetterSession,
@ -53,8 +55,17 @@ import {
import { LoggerPrefix } from '@/utils';
import { loadI18n, setLanguage, t } from '@/i18n';
import ErrorHtmlAsset from '@assets/error.html?asset';
import type { PluginConfig } from '@/types/plugins';
if (!is.macOS()) {
delete allPlugins['touchbar'];
}
if (!is.windows()) {
delete allPlugins['taskbar-mediacontrol'];
}
// Catch errors and log them
unhandled({
logger: console.error,
@ -73,11 +84,43 @@ if (!gotTheLock) {
app.exit();
}
protocol.registerSchemesAsPrivileged([
{
scheme: 'http',
privileges: {
standard: true,
bypassCSP: true,
allowServiceWorkers: true,
supportFetchAPI: true,
corsEnabled: true,
stream: true,
codeCache: true,
},
},
{
scheme: 'https',
privileges: {
standard: true,
bypassCSP: true,
allowServiceWorkers: true,
supportFetchAPI: true,
corsEnabled: true,
stream: true,
codeCache: true,
},
},
{ scheme: 'mailto', privileges: { standard: true } },
]);
// Ozone platform hint: Required for Wayland support
app.commandLine.appendSwitch('ozone-platform-hint', 'auto');
// SharedArrayBuffer: Required for downloader (@ffmpeg/core-mt)
// OverlayScrollbar: Required for overlay scrollbars
// UseOzonePlatform: Required for Wayland support
// WaylandWindowDecorations: Required for Wayland decorations
app.commandLine.appendSwitch(
'enable-features',
'OverlayScrollbar,SharedArrayBuffer',
'OverlayScrollbar,SharedArrayBuffer,UseOzonePlatform,WaylandWindowDecorations',
);
if (config.get('options.disableHardwareAcceleration')) {
if (is.dev()) {
@ -87,9 +130,22 @@ if (config.get('options.disableHardwareAcceleration')) {
app.disableHardwareAcceleration();
}
if (is.linux() && config.plugins.isEnabled('shortcuts')) {
if (is.linux()) {
// Overrides WM_CLASS for X11 to correspond to icon filename
app.setName('com.github.th_ch.youtube_music');
// Workaround for issue #2248
if (
process.env.XDG_SESSION_TYPE === 'wayland' ||
process.env.WAYLAND_DISPLAY
) {
app.commandLine.appendSwitch('disable-gpu-memory-buffer-video-frames');
}
// Stops chromium from launching its own MPRIS service
app.commandLine.appendSwitch('disable-features', 'MediaSessionService');
if (config.plugins.isEnabled('shortcuts')) {
app.commandLine.appendSwitch('disable-features', 'MediaSessionService');
}
}
if (config.get('options.proxy')) {
@ -114,18 +170,18 @@ function onClosed() {
mainWindow = null;
}
ipcMain.handle('get-main-plugin-names', () => Object.keys(mainPlugins));
ipcMain.handle('ytmd:get-main-plugin-names', () => Object.keys(mainPlugins));
const initHook = (win: BrowserWindow) => {
ipcMain.handle(
'get-config',
'ytmd:get-config',
(_, id: string) =>
deepmerge(
allPlugins[id].config ?? { enabled: false },
config.get(`plugins.${id}`) ?? {},
) as PluginConfig,
);
ipcMain.handle('set-config', (_, name: string, obj: object) =>
ipcMain.handle('ytmd:set-config', (_, name: string, obj: object) =>
config.setPartial(`plugins.${name}`, obj, allPlugins[name].config),
);
@ -258,12 +314,29 @@ async function createMainWindow() {
const windowPosition: Electron.Point = config.get('window-position');
const useInlineMenu = config.plugins.isEnabled('in-app-menu');
const defaultTitleBarOverlayOptions: Electron.TitleBarOverlayOptions = {
const defaultTitleBarOverlayOptions: Electron.TitleBarOverlay = {
color: '#00000000',
symbolColor: '#ffffff',
height: 32,
};
const decorations: Partial<BrowserWindowConstructorOptions> = {
frame: !is.macOS() && !useInlineMenu,
titleBarOverlay: defaultTitleBarOverlayOptions,
titleBarStyle: useInlineMenu
? 'hidden'
: is.macOS()
? 'hiddenInset'
: 'default',
autoHideMenuBar: config.get('options.hideMenu'),
};
// Note: on linux, for some weird reason, having these extra properties with 'frame: false' does not work
if (is.linux() && useInlineMenu) {
delete decorations.titleBarOverlay;
delete decorations.titleBarStyle;
}
const win = new BrowserWindow({
icon,
width: windowSize.width,
@ -281,14 +354,7 @@ async function createMainWindow() {
sandbox: false,
}),
},
frame: !is.macOS() && !useInlineMenu,
titleBarOverlay: defaultTitleBarOverlayOptions,
titleBarStyle: useInlineMenu
? 'hidden'
: is.macOS()
? 'hiddenInset'
: 'default',
autoHideMenuBar: config.get('options.hideMenu'),
...decorations,
});
initHook(win);
initTheme(win);
@ -299,28 +365,31 @@ async function createMainWindow() {
const { x: windowX, y: windowY } = windowPosition;
const winSize = win.getSize();
const display = screen.getDisplayNearestPoint(windowPosition);
const scaleFactor = is.windows() ? display.scaleFactor: 1;
const primaryDisplay = screen.getPrimaryDisplay();
const scaledWidth = Math.floor(windowSize.width / scaleFactor);
const scaledHeight = Math.floor(windowSize.height / scaleFactor);
const scaleFactor = is.windows()
? primaryDisplay.scaleFactor / display.scaleFactor
: 1;
const scaledWidth = Math.floor(windowSize.width * scaleFactor);
const scaledHeight = Math.floor(windowSize.height * scaleFactor);
const scaledX = windowX;
const scaledY = windowY;
if (
scaledX + scaledWidth < display.bounds.x - 8 ||
scaledX - scaledWidth > display.bounds.x + display.bounds.width ||
scaledY < display.bounds.y - 8 ||
scaledY > display.bounds.y + display.bounds.height
scaledX + scaledWidth / 2 < display.bounds.x - 8 || // Left
scaledX + scaledWidth / 2 > display.bounds.x + display.bounds.width || // Right
scaledY < display.bounds.y - 8 || // Top
scaledY + scaledHeight / 2 > display.bounds.y + display.bounds.height // Bottom
) {
// Window is offscreen
if (is.dev()) {
console.warn(
LoggerPrefix,
t('main.console.window.tried-to-render-offscreen', {
winSize: String(winSize),
displaySize: String(display.bounds),
windowPosition: String(windowPosition),
windowSize: String(winSize),
displaySize: JSON.stringify(display.bounds),
position: JSON.stringify(windowPosition),
}),
);
}
@ -408,11 +477,23 @@ async function createMainWindow() {
...defaultTitleBarOverlayOptions,
height: Math.floor(
defaultTitleBarOverlayOptions.height! *
win.webContents.getZoomFactor(),
win.webContents.getZoomFactor(),
),
});
}
});
win.webContents.on('will-redirect', (event) => {
const url = new URL(event.url);
// Workarounds for regions where YTM is restricted
if (url.hostname.endsWith('youtube.com') && url.pathname === '/premium') {
event.preventDefault();
win.webContents.loadURL(
'https://accounts.google.com/ServiceLogin?ltmpl=music&service=youtube&continue=https%3A%2F%2Fwww.youtube.com%2Fsignin%3Faction_handle_signin%3Dtrue%26next%3Dhttps%253A%252F%252Fmusic.youtube.com%252F',
);
}
});
win.webContents.loadURL(urlToLoad);
@ -433,8 +514,8 @@ app.once('browser-window-created', (_event, win) => {
const updatedUserAgent = is.macOS()
? userAgents.mac
: is.windows()
? userAgents.windows
: userAgents.linux;
? userAgents.windows
: userAgents.linux;
win.webContents.userAgent = updatedUserAgent;
app.userAgentFallback = updatedUserAgent;
@ -483,10 +564,14 @@ app.once('browser-window-created', (_event, win) => {
console.log(log);
}
if (errorCode !== -3) {
if (
errorCode !== -3 &&
// Workaround for #2435
!new URL(validatedURL).hostname.includes('doubleclick.net')
) {
// -3 is a false positive
win.webContents.send('log', log);
win.webContents.loadFile(path.join(__dirname, 'error.html'));
win.webContents.loadFile(ErrorHtmlAsset);
}
},
);
@ -567,11 +652,12 @@ app.whenReady().then(async () => {
);
try {
// Check if shortcut is registered and valid
const shortcutDetails = shell.readShortcutLink(shortcutPath); // Throw error if doesn't exist yet
const shortcutDetails = shell.readShortcutLink(shortcutPath); // Throw error if it doesn't exist yet
if (
shortcutDetails.target !== appLocation ||
shortcutDetails.appUserModelId !== appID
) {
// eslint-disable-next-line @typescript-eslint/only-throw-error
throw 'needUpdate';
}
} catch (error) {
@ -595,7 +681,9 @@ app.whenReady().then(async () => {
// In dev mode, get string from process.env.VITE_DEV_SERVER_URL, else use fs.readFileSync
if (is.dev() && process.env.ELECTRON_RENDERER_URL) {
// HACK: to make vite work with electron renderer (supports hot reload)
event.returnValue = [null, `
event.returnValue = [
null,
`
console.log('${LoggerPrefix}', 'Loading vite from dev server');
(async () => {
await new Promise((resolve) => {
@ -616,7 +704,8 @@ app.whenReady().then(async () => {
document.body.appendChild(rendererScript);
})();
0
`];
`,
];
} else {
const rendererPath = path.join(__dirname, '..', 'renderer');
const indexHTML = parse(
@ -628,7 +717,10 @@ app.whenReady().then(async () => {
scriptSrc.getAttribute('src')!,
);
const scriptString = fs.readFileSync(scriptPath, 'utf-8');
event.returnValue = [url.pathToFileURL(scriptPath).toString(), scriptString + ';0'];
event.returnValue = [
url.pathToFileURL(scriptPath).toString(),
scriptString + ';0',
];
}
});
@ -652,7 +744,9 @@ app.whenReady().then(async () => {
);
}
handleProtocol(command);
const splited = decodeURIComponent(command).split(' ');
handleProtocol(splited.shift()!, splited);
return;
}
@ -810,9 +904,19 @@ function removeContentSecurityPolicy(
betterSession.webRequest.onHeadersReceived((details, callback) => {
details.responseHeaders ??= {};
// Remove the content security policy
delete details.responseHeaders['content-security-policy-report-only'];
delete details.responseHeaders['content-security-policy'];
// prettier-ignore
if (new URL(details.url).protocol === 'https:') {
// Remove the content security policy
delete details.responseHeaders['content-security-policy-report-only'];
delete details.responseHeaders['Content-Security-Policy-Report-Only'];
delete details.responseHeaders['content-security-policy'];
delete details.responseHeaders['Content-Security-Policy'];
// Only allow cross-origin requests from music.youtube.com
delete details.responseHeaders['access-control-allow-origin'];
delete details.responseHeaders['Access-Control-Allow-Origin'];
details.responseHeaders['access-control-allow-origin'] = ['https://music.youtube.com'];
}
callback({ cancel: false, responseHeaders: details.responseHeaders });
});

View File

@ -34,11 +34,12 @@ const createContext = (
win.webContents.send(event, ...args);
},
handle: (event: string, listener: CallableFunction) => {
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
// eslint-disable-next-line @typescript-eslint/no-unsafe-return,@typescript-eslint/no-unsafe-call
ipcMain.handle(event, (_, ...args: unknown[]) => listener(...args));
},
on: (event: string, listener: CallableFunction) => {
ipcMain.on(event, (_, ...args: unknown[]) => {
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
listener(...args);
});
},
@ -75,11 +76,11 @@ export const forceUnloadMainPlugin = async (
);
return;
} else {
console.log(
LoggerPrefix,
t('common.console.plugins.unload-failed', { pluginName: id }),
);
return Promise.reject();
const message = t('common.console.plugins.unload-failed', {
pluginName: id,
});
console.log(LoggerPrefix, message);
return Promise.reject(new Error(message));
}
} catch (err) {
console.error(
@ -87,7 +88,7 @@ export const forceUnloadMainPlugin = async (
t('common.console.plugins.unload-failed', { pluginName: id }),
);
console.trace(err);
return Promise.reject(err);
return Promise.reject(err as Error);
}
};
@ -111,11 +112,11 @@ export const forceLoadMainPlugin = async (
) {
loadedPluginMap[id] = plugin;
} else {
console.log(
LoggerPrefix,
t('common.console.plugins.load-failed', { pluginName: id }),
);
return Promise.reject();
const message = t('common.console.plugins.load-failed', {
pluginName: id,
});
console.log(LoggerPrefix, message);
return Promise.reject(new Error(message));
}
} catch (err) {
console.error(
@ -123,7 +124,7 @@ export const forceLoadMainPlugin = async (
t('common.console.plugins.initialize-failed', { pluginName: id }),
);
console.trace(err);
return Promise.reject(err);
return Promise.reject(err as Error);
}
};

View File

@ -18,9 +18,10 @@ const loadedPluginMap: Record<
export const createContext = <Config extends PluginConfig>(
id: string,
): RendererContext<Config> => ({
getConfig: async () => window.ipcRenderer.invoke('get-config', id),
getConfig: async () =>
window.ipcRenderer.invoke('ytmd:get-config', id) as Promise<Config>,
setConfig: async (newConfig) => {
await window.ipcRenderer.invoke('set-config', id, newConfig);
await window.ipcRenderer.invoke('ytmd:set-config', id, newConfig);
},
ipc: {
send: (event: string, ...args: unknown[]) => {
@ -30,6 +31,7 @@ export const createContext = <Config extends PluginConfig>(
window.ipcRenderer.invoke(event, ...args),
on: (event: string, listener: CallableFunction) => {
window.ipcRenderer.on(event, (_, ...args: unknown[]) => {
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
listener(...args);
});
},

View File

@ -76,12 +76,21 @@ export const mainMenuTemplate = async (
const plugin = allPlugins[id];
const pluginLabel = plugin?.name?.() ?? id;
const pluginDescription = plugin?.description?.() ?? undefined;
const isNew = plugin?.addedVersion ? satisfies(packageJson.version, plugin.addedVersion) : false;
const isNew = plugin?.addedVersion
? satisfies(packageJson.version, plugin.addedVersion)
: false;
if (!config.plugins.isEnabled(id)) {
return [
id,
pluginEnabledMenu(id, pluginLabel, pluginDescription, isNew, true, innerRefreshMenu),
pluginEnabledMenu(
id,
pluginLabel,
pluginDescription,
isNew,
true,
innerRefreshMenu,
),
] as const;
}
@ -123,9 +132,18 @@ export const mainMenuTemplate = async (
const plugin = allPlugins[id];
const pluginLabel = plugin?.name?.() ?? id;
const pluginDescription = plugin?.description?.() ?? undefined;
const isNew = plugin?.addedVersion ? satisfies(packageJson.version, plugin.addedVersion) : false;
const isNew = plugin?.addedVersion
? satisfies(packageJson.version, plugin.addedVersion)
: false;
return pluginEnabledMenu(id, pluginLabel, pluginDescription, isNew, true, innerRefreshMenu);
return pluginEnabledMenu(
id,
pluginLabel,
pluginDescription,
isNew,
true,
innerRefreshMenu,
);
});
const availableLanguages = Object.keys(languageResources);
@ -235,16 +253,50 @@ export const mainMenuTemplate = async (
'main.menu.options.submenu.visual-tweaks.submenu.theme.label',
),
submenu: [
{
label: t(
'main.menu.options.submenu.visual-tweaks.submenu.theme.submenu.no-theme',
),
type: 'radio',
checked: config.get('options.themes')?.length === 0, // Todo rename "themes"
click() {
config.set('options.themes', []);
...((config.get('options.themes')?.length ?? 0) === 0
? [
{
label: t(
'main.menu.options.submenu.visual-tweaks.submenu.theme.submenu.no-theme',
),
},
]
: []),
...(config.get('options.themes')?.map((theme: string) => ({
type: 'normal' as const,
label: theme,
async click() {
const { response } = await dialog.showMessageBox(win, {
type: 'question',
defaultId: 1,
title: t(
'main.menu.options.submenu.visual-tweaks.submenu.theme.dialog.remove-theme',
),
message: t(
'main.menu.options.submenu.visual-tweaks.submenu.theme.dialog.remove-theme-message',
{ theme },
),
buttons: [
t(
'main.menu.options.submenu.visual-tweaks.submenu.theme.dialog.button.cancel',
),
t(
'main.menu.options.submenu.visual-tweaks.submenu.theme.dialog.button.remove',
),
],
});
if (response === 1) {
config.set(
'options.themes',
config
.get('options.themes')
?.filter((t) => t !== theme) ?? [],
);
innerRefreshMenu();
}
},
},
})) ?? []),
{ type: 'separator' },
{
label: t(
@ -258,6 +310,7 @@ export const mainMenuTemplate = async (
});
if (filePaths) {
config.set('options.themes', filePaths);
innerRefreshMenu();
}
},
},

View File

@ -0,0 +1,58 @@
function skipAd(target: Element) {
const skipButton = target.querySelector<HTMLButtonElement>(
'button.ytp-ad-skip-button-modern',
);
if (skipButton) {
skipButton.click();
}
}
function speedUpAndMute(player: Element, isAdShowing: boolean) {
const video = player.querySelector<HTMLVideoElement>('video');
if (!video) return;
if (isAdShowing) {
video.playbackRate = 16;
video.muted = true;
} else if (!isAdShowing) {
video.playbackRate = 1;
video.muted = false;
}
}
export const loadAdSpeedup = () => {
const player = document.querySelector<HTMLVideoElement>('#movie_player');
if (!player) return;
new MutationObserver((mutations) => {
for (const mutation of mutations) {
if (
mutation.type === 'attributes' &&
mutation.attributeName === 'class'
) {
const target = mutation.target as HTMLElement;
const isAdShowing =
target.classList.contains('ad-showing') ||
target.classList.contains('ad-interrupting');
speedUpAndMute(target, isAdShowing);
}
if (
mutation.type === 'childList' &&
mutation.addedNodes.length &&
mutation.target instanceof HTMLElement
) {
skipAd(mutation.target);
}
}
}).observe(player, {
attributes: true,
childList: true,
subtree: true,
});
const isAdShowing =
player.classList.contains('ad-showing') ||
player.classList.contains('ad-interrupting');
speedUpAndMute(player, isAdShowing);
skipAd(player);
};

View File

@ -2,19 +2,23 @@
import path from 'node:path';
import fs, { promises } from 'node:fs';
import { ElectronBlocker } from '@cliqz/adblocker-electron';
import { ElectronBlocker } from '@ghostery/adblocker-electron';
import { app, net } from 'electron';
const SOURCES = [
'https://raw.githubusercontent.com/kbinani/adblock-youtube-ads/master/signed.txt',
// UBlock Origin
'https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/filters.txt',
'https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/filters-2020.txt',
'https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/filters-2021.txt',
'https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/filters-2022.txt',
'https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/filters-2023.txt',
'https://raw.githubusercontent.com/ghostery/adblocker/master/packages/adblocker/assets/ublock-origin/filters.txt',
'https://raw.githubusercontent.com/ghostery/adblocker/master/packages/adblocker/assets/ublock-origin/quick-fixes.txt',
'https://raw.githubusercontent.com/ghostery/adblocker/master/packages/adblocker/assets/ublock-origin/unbreak.txt',
'https://raw.githubusercontent.com/ghostery/adblocker/master/packages/adblocker/assets/ublock-origin/filters-2020.txt',
'https://raw.githubusercontent.com/ghostery/adblocker/master/packages/adblocker/assets/ublock-origin/filters-2021.txt',
'https://raw.githubusercontent.com/ghostery/adblocker/master/packages/adblocker/assets/ublock-origin/filters-2022.txt',
'https://raw.githubusercontent.com/ghostery/adblocker/master/packages/adblocker/assets/ublock-origin/filters-2023.txt',
// Fanboy Annoyances
'https://secure.fanboy.co.nz/fanboy-annoyance_ubo.txt',
// AdGuard
'https://filters.adtidy.org/extension/ublock/filters/122_optimized.txt',
];
let blocker: ElectronBlocker | undefined;
@ -51,6 +55,7 @@ export const loadAdBlockerEngine = async (
(url: string) => net.fetch(url),
lists,
{
enableCompression: true,
// When generating the engine for caching, do not load network filters
// So that enhancing the session works as expected
// Allowing to define multiple webRequest listeners
@ -62,7 +67,7 @@ export const loadAdBlockerEngine = async (
blocker.enableBlockingInSession(session);
}
} catch (error) {
console.log('Error loading adBlocker engine', error);
console.error('Error loading adBlocker engine', error);
}
};

View File

@ -8,8 +8,8 @@ import {
unloadAdBlockerEngine,
} from './blocker';
import injectCliqzPreload from './injectors/inject-cliqz-preload';
import { inject, isInjected } from './injectors/inject';
import { loadAdSpeedup } from './adSpeedup';
import { t } from '@/i18n';
@ -72,6 +72,14 @@ export default createPlugin({
},
];
},
renderer: {
async onPlayerApiReady(_, { getConfig }) {
const config = await getConfig();
if (config.blocker === blockers.AdSpeedup) {
await loadAdSpeedup();
}
},
},
backend: {
mainWindow: null as BrowserWindow | null,
async start({ getConfig, window }) {
@ -109,22 +117,29 @@ export default createPlugin({
},
},
preload: {
script: 'window.JSON.parse = window._proxyJsonParse; window._proxyJsonParse = undefined; window.Response.prototype.json = window._proxyResponseJson; window._proxyResponseJson = undefined; 0',
// see #1478
script: `const _prunerFn = window._pruner;
window._pruner = undefined;
JSON.parse = new Proxy(JSON.parse, {
apply() {
return _prunerFn(Reflect.apply(...arguments));
},
});
Response.prototype.json = new Proxy(Response.prototype.json, {
apply() {
return Reflect.apply(...arguments).then((o) => _prunerFn(o));
},
}); 0`,
async start({ getConfig }) {
const config = await getConfig();
if (config.blocker === blockers.WithBlocklists) {
// Preload adblocker to inject scripts/styles
await injectCliqzPreload();
} else if (config.blocker === blockers.InPlayer && !isInjected()) {
if (config.blocker === blockers.InPlayer && !isInjected()) {
inject(contextBridge);
await webFrame.executeJavaScript(this.script);
}
},
async onConfigChange(newConfig) {
if (newConfig.blocker === blockers.WithBlocklists) {
await injectCliqzPreload();
} else if (newConfig.blocker === blockers.InPlayer && !isInjected()) {
if (newConfig.blocker === blockers.InPlayer && !isInjected()) {
inject(contextBridge);
await webFrame.executeJavaScript(this.script);
}

View File

@ -1,3 +1,3 @@
export default async () => {
await import('@cliqz/adblocker-electron-preload');
await import('@ghostery/adblocker-electron-preload');
};

View File

@ -22,32 +22,46 @@ export const inject = (contextBridge) => {
const pruner = function (o) {
delete o.playerAds;
delete o.adPlacements;
delete o.adSlots;
//
if (o.playerResponse) {
delete o.playerResponse.playerAds;
delete o.playerResponse.adPlacements;
delete o.playerResponse.adSlots;
}
if (o.ytInitialPlayerResponse) {
delete o.ytInitialPlayerResponse.playerAds;
delete o.ytInitialPlayerResponse.adPlacements;
delete o.ytInitialPlayerResponse.adSlots;
}
//
return o;
};
}
contextBridge.exposeInMainWorld('_proxyJsonParse', new Proxy(JSON.parse, {
apply() {
return pruner(Reflect.apply(...arguments));
},
}));
contextBridge.exposeInMainWorld('_proxyResponseJson', new Proxy(Response.prototype.json, {
apply() {
return Reflect.apply(...arguments).then((o) => pruner(o));
},
}));
contextBridge.exposeInMainWorld('_pruner', pruner);
}
(function () {
let cValue = 'undefined';
const chain = 'playerResponse.adPlacements';
const chains = [
{
chain: 'playerResponse.adPlacements',
cValue: 'undefined',
},
{
chain: 'ytInitialPlayerResponse.playerAds',
cValue: 'undefined',
},
{
chain: 'ytInitialPlayerResponse.adPlacements',
cValue: 'undefined',
},
{
chain: 'ytInitialPlayerResponse.adSlots',
cValue: 'undefined',
}
];
chains.forEach(function ({ chain, cValue }) {
const thisScript = document.currentScript;
//
switch (cValue) {
@ -241,203 +255,5 @@ export const inject = (contextBridge) => {
//
trapChain(window, chain);
})();
(function () {
let cValue = 'undefined';
const thisScript = document.currentScript;
const chain = 'ytInitialPlayerResponse.adPlacements';
//
switch (cValue) {
case 'null': {
cValue = null;
break;
}
case "''": {
cValue = '';
break;
}
case 'true': {
cValue = true;
break;
}
case 'false': {
cValue = false;
break;
}
case 'undefined': {
cValue = undefined;
break;
}
case 'noopFunc': {
cValue = function () {};
break;
}
case 'trueFunc': {
cValue = function () {
return true;
};
break;
}
case 'falseFunc': {
cValue = function () {
return false;
};
break;
}
default: {
if (/^\d+$/.test(cValue)) {
cValue = Number.parseFloat(cValue);
//
if (isNaN(cValue)) {
return;
}
if (Math.abs(cValue) > 0x7f_ff) {
return;
}
} else {
return;
}
}
}
//
let aborted = false;
const mustAbort = function (v) {
if (aborted) {
return true;
}
aborted =
v !== undefined &&
v !== null &&
cValue !== undefined &&
cValue !== null &&
typeof v !== typeof cValue;
return aborted;
};
/*
Support multiple trappers for the same property:
https://github.com/uBlockOrigin/uBlock-issues/issues/156
*/
const trapProp = function (owner, prop, configurable, handler) {
if (handler.init(owner[prop]) === false) {
return;
}
//
const odesc = Object.getOwnPropertyDescriptor(owner, prop);
let previousGetter;
let previousSetter;
if (odesc instanceof Object) {
if (odesc.configurable === false) {
return;
}
if (odesc.get instanceof Function) {
previousGetter = odesc.get;
}
if (odesc.set instanceof Function) {
previousSetter = odesc.set;
}
}
//
Object.defineProperty(owner, prop, {
configurable,
get() {
if (previousGetter !== undefined) {
previousGetter();
}
//
return handler.getter();
},
set(a) {
if (previousSetter !== undefined) {
previousSetter(a);
}
//
handler.setter(a);
},
});
};
const trapChain = function (owner, chain) {
const pos = chain.indexOf('.');
if (pos === -1) {
trapProp(owner, chain, false, {
v: undefined,
getter() {
return document.currentScript === thisScript ? this.v : cValue;
},
setter(a) {
if (mustAbort(a) === false) {
return;
}
cValue = a;
},
init(v) {
if (mustAbort(v)) {
return false;
}
//
this.v = v;
return true;
},
});
//
return;
}
//
const prop = chain.slice(0, pos);
const v = owner[prop];
//
chain = chain.slice(pos + 1);
if (v instanceof Object || (typeof v === 'object' && v !== null)) {
trapChain(v, chain);
return;
}
//
trapProp(owner, prop, true, {
v: undefined,
getter() {
return this.v;
},
setter(a) {
this.v = a;
if (a instanceof Object) {
trapChain(a, chain);
}
},
init(v) {
this.v = v;
return true;
},
});
};
//
trapChain(window, chain);
})();
});
};

View File

@ -1,4 +1,5 @@
export const blockers = {
WithBlocklists: 'With blocklists',
InPlayer: 'In player',
AdSpeedup: 'Ad speedup',
} as const;

View File

@ -1,13 +1,28 @@
import { t } from '@/i18n';
import { createPlugin } from '@/utils';
import { ElementFromHtml } from '@/plugins/utils/renderer';
import { waitForElement } from '@/utils/wait-for-element';
import undislikeHTML from './templates/undislike.html?raw';
import dislikeHTML from './templates/dislike.html?raw';
import likeHTML from './templates/like.html?raw';
import unlikeHTML from './templates/unlike.html?raw';
export default createPlugin({
export default createPlugin<
unknown,
unknown,
{
observer?: MutationObserver;
loadObserver?: MutationObserver;
changeObserver?: MutationObserver;
waiting: boolean;
onPageChange(): void;
loadFullList: (event: MouseEvent) => void;
applyToList(id: string, loader: HTMLElement): void;
start(): void;
stop(): void;
}
>({
name: () => t('plugins.album-actions.name'),
description: () => t('plugins.album-actions.description'),
restartNeeded: false,
@ -16,140 +31,153 @@ export default createPlugin({
enabled: false,
},
renderer: {
observer: null as MutationObserver | null,
loadObserver: null as MutationObserver | null,
changeObserver: null as MutationObserver | null,
waiting: false as boolean,
waiting: false,
start() {
//Waits for pagechange
// Waits for pagechange
this.onPageChange();
this.observer = new MutationObserver(() => {
this.onPageChange();
});
this.observer.observe(document.querySelector('#browse-page'), {
this.observer.observe(document.querySelector('#browse-page')!, {
attributes: false,
childList: true,
subtree: true,
});
},
onPageChange() {
async onPageChange() {
if (this.waiting) {
return;
} else {
this.waiting = true;
}
this.waitForElem('#continuations').then((continuations: HTMLElement) => {
this.waiting = false;
//Gets the for buttons
let buttons: Array<HTMLElement> = [
ElementFromHtml(undislikeHTML),
ElementFromHtml(dislikeHTML),
ElementFromHtml(likeHTML),
ElementFromHtml(unlikeHTML),
];
//Finds the playlist
const playlist =
document.querySelector('ytmusic-shelf-renderer') ??
document.querySelector('ytmusic-playlist-shelf-renderer');
//Adds an observer for every button so it gets updated when one is clicked
this.changeObserver?.disconnect();
this.changeObserver = new MutationObserver(() => {
this.stop();
this.start();
const continuations = await waitForElement<HTMLElement>('#continuations');
this.waiting = false;
//Gets the for buttons
const buttons: Array<HTMLElement> = [
ElementFromHtml(undislikeHTML),
ElementFromHtml(dislikeHTML),
ElementFromHtml(likeHTML),
ElementFromHtml(unlikeHTML),
];
//Finds the playlist
const playlist =
document.querySelector('ytmusic-shelf-renderer') ??
document.querySelector('ytmusic-playlist-shelf-renderer')!;
// Adds an observer for every button, so it gets updated when one is clicked
this.changeObserver?.disconnect();
this.changeObserver = new MutationObserver(() => {
this.stop();
this.start();
});
const allButtons = playlist.querySelectorAll(
'yt-button-shape.ytmusic-like-button-renderer',
);
for (const btn of allButtons) {
this.changeObserver.observe(btn, {
attributes: true,
childList: false,
subtree: false,
});
const allButtons = playlist.querySelectorAll(
'yt-button-shape.ytmusic-like-button-renderer',
}
//Determine if button is needed and colors the percentage
const listsLength = playlist.querySelectorAll(
'#button-shape-dislike > button',
).length;
if (continuations.children.length == 0 && listsLength > 0) {
const counts = [
playlist?.querySelectorAll(
'#button-shape-dislike[aria-pressed=true] > button',
).length,
playlist?.querySelectorAll(
'#button-shape-dislike[aria-pressed=false] > button',
).length,
playlist?.querySelectorAll(
'#button-shape-like[aria-pressed=false] > button',
).length,
playlist?.querySelectorAll(
'#button-shape-like[aria-pressed=true] > button',
).length,
];
let i = 0;
for (const count of counts) {
if (count == 0) {
buttons.splice(i, 1);
i--;
} else {
(
buttons[i].children[0].children[0] as HTMLElement
).style.setProperty(
'-webkit-mask-size',
`100% ${100 - (count / listsLength) * 100}%`,
);
}
i++;
}
}
const menuParent =
document.querySelector('#action-buttons')?.parentElement;
if (menuParent && !document.querySelector('.like-menu')) {
const menu = document.createElement('div');
menu.id = 'ytmd-album-action-buttons';
menu.className =
'action-buttons style-scope ytmusic-responsive-header-renderer';
menuParent.insertBefore(
menu,
menuParent.children[menuParent.children.length - 1],
);
for (const btn of allButtons)
this.changeObserver.observe(btn, {
attributes: true,
childList: false,
subtree: false,
});
//Determine if button is needed and colors the percentage
const listsLength = playlist.querySelectorAll(
'#button-shape-dislike > button',
).length;
if (continuations.children.length == 0 && listsLength > 0) {
const counts = [
playlist?.querySelectorAll(
'#button-shape-dislike[aria-pressed=true] > button',
).length,
playlist?.querySelectorAll(
'#button-shape-dislike[aria-pressed=false] > button',
).length,
playlist?.querySelectorAll(
'#button-shape-like[aria-pressed=false] > button',
).length,
playlist?.querySelectorAll(
'#button-shape-like[aria-pressed=true] > button',
).length,
];
let i = 0;
for (const count of counts) {
if (count == 0) {
buttons.splice(i, 1);
i--;
} else {
buttons[i].children[0].children[0].style.setProperty(
'-webkit-mask-size',
`100% ${100 - (count / listsLength) * 100}%`,
);
}
i++;
}
for (const button of buttons) {
menu.appendChild(button);
button.addEventListener('click', this.loadFullList);
}
const menu = document.querySelector('.detail-page-menu');
if (menu && !document.querySelector('.like-menu')) {
for (const button of buttons) {
menu.appendChild(button);
button.addEventListener('click', this.loadFullList);
}
}
});
}
},
loadFullList(event) {
event.stopPropagation();
const id: string = event.currentTarget.id,
loader = document.getElementById('continuations');
this.loadObserver = new MutationObserver(() => {
loadFullList(event: MouseEvent) {
if (event.target instanceof Element) {
event.stopPropagation();
const button = event.target.closest('button') as HTMLElement;
if (!button?.id) return;
const id = button.id;
const loader = document.getElementById('continuations')!;
this.loadObserver = new MutationObserver(() => {
this.applyToList(id, loader);
});
this.applyToList(id, loader);
});
this.applyToList(id, loader);
this.loadObserver.observe(loader, {
attributes: true,
childList: true,
subtree: true,
});
loader?.style.setProperty('top', '0');
loader?.style.setProperty('left', '50%');
loader?.style.setProperty('position', 'absolute');
this.loadObserver.observe(loader, {
attributes: true,
childList: true,
subtree: true,
});
loader?.style.setProperty('top', '0');
loader?.style.setProperty('left', '50%');
loader?.style.setProperty('position', 'absolute');
}
},
applyToList(id: string, loader: HTMLElement) {
if (loader.children.length != 0) return;
this.loadObserver?.disconnect();
let playlistbuttons: NodeListOf<Element> | undefined;
let playlistButtons: NodeListOf<HTMLElement> | undefined;
const playlist = document.querySelector('ytmusic-shelf-renderer')
? document.querySelector('ytmusic-shelf-renderer')
: document.querySelector('ytmusic-playlist-shelf-renderer');
switch (id) {
case 'allundislike':
playlistbuttons = playlist?.querySelectorAll(
playlistButtons = playlist?.querySelectorAll(
'#button-shape-dislike[aria-pressed=true] > button',
);
break;
case 'alldislike':
playlistbuttons = playlist?.querySelectorAll(
playlistButtons = playlist?.querySelectorAll(
'#button-shape-dislike[aria-pressed=false] > button',
);
break;
case 'alllike':
playlistbuttons = playlist?.querySelectorAll(
playlistButtons = playlist?.querySelectorAll(
'#button-shape-like[aria-pressed=false] > button',
);
break;
case 'allunlike':
playlistbuttons = playlist?.querySelectorAll(
playlistButtons = playlist?.querySelectorAll(
'#button-shape-like[aria-pressed=true] > button',
);
break;
@ -164,16 +192,5 @@ export default createPlugin({
button.remove();
}
},
waitForElem(selector: string) {
return new Promise((resolve) => {
const interval = setInterval(() => {
const elem = document.querySelector(selector);
if (!elem) return;
clearInterval(interval);
resolve(elem);
});
});
},
},
});

View File

@ -1,40 +1,58 @@
<button
id="alldislike"
data-type="dislike"
data-filled="false"
class="like-menu yt-spec-button-shape-next yt-spec-button-shape-next--text yt-spec-button-shape-next--mono yt-spec-button-shape-next--size-m yt-spec-button-shape-next--icon-button"
aria-pressed="false"
aria-label="Dislike all"
>
<div
class="yt-spec-button-shape-next__icon"
style="color: var(--ytmusic-setting-item-toggle-active)"
aria-hidden="true"
<div class="style-scope">
<button
id="alldislike"
data-type="dislike"
data-filled="false"
class="like-menu yt-spec-button-shape-next yt-spec-button-shape-next--text yt-spec-button-shape-next--mono yt-spec-button-shape-next--size-m yt-spec-button-shape-next--icon-button"
aria-pressed="false"
aria-label="Dislike all"
>
<div
class="yt-spec-button-shape-next__icon"
style="
color: white;
-webkit-mask: linear-gradient(grey, grey);
-webkit-mask-size: 100% 50%;
-webkit-mask-repeat: no-repeat;
z-index: 1;
position: absolute;
"
style="color: var(--ytmusic-setting-item-toggle-active)"
aria-hidden="true"
>
<div
class="yt-spec-button-shape-next__icon"
style="
color: white;
-webkit-mask: linear-gradient(grey, grey);
-webkit-mask-size: 100% 50%;
-webkit-mask-repeat: no-repeat;
z-index: 1;
position: absolute;
"
aria-hidden="true"
>
<div style="width: 24px; height: 24px">
<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="M18,4h3v10h-3V4z M5.23,14h4.23l-1.52,4.94C7.62,19.97,8.46,21,9.62,21c0.58,0,1.14-0.24,1.52-0.65L17,14V4H6.57 C5.5,4,4.59,4.67,4.38,5.61l-1.34,6C2.77,12.85,3.82,14,5.23,14z"
class="style-scope yt-icon"
></path>
</g>
</svg>
</div>
</div>
<div style="width: 24px; height: 24px">
<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%;
"
style="pointer-events: none; display: block; width: 100%; height: 100%"
>
<g class="style-scope yt-icon">
<path
@ -45,30 +63,14 @@
</svg>
</div>
</div>
<div style="width: 24px; height: 24px">
<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%"
<yt-touch-feedback-shape style="border-radius: inherit">
<div
class="yt-spec-touch-feedback-shape yt-spec-touch-feedback-shape--touch-response"
aria-hidden="true"
>
<g class="style-scope yt-icon">
<path
d="M18,4h3v10h-3V4z M5.23,14h4.23l-1.52,4.94C7.62,19.97,8.46,21,9.62,21c0.58,0,1.14-0.24,1.52-0.65L17,14V4H6.57 C5.5,4,4.59,4.67,4.38,5.61l-1.34,6C2.77,12.85,3.82,14,5.23,14z"
class="style-scope yt-icon"
></path>
</g>
</svg>
</div>
</div>
<yt-touch-feedback-shape style="border-radius: inherit">
<div
class="yt-spec-touch-feedback-shape yt-spec-touch-feedback-shape--touch-response"
aria-hidden="true"
>
<div class="yt-spec-touch-feedback-shape__stroke"></div>
<div class="yt-spec-touch-feedback-shape__fill"></div>
</div>
</yt-touch-feedback-shape>
</button>
<div class="yt-spec-touch-feedback-shape__stroke"></div>
<div class="yt-spec-touch-feedback-shape__fill"></div>
</div>
</yt-touch-feedback-shape>
</button>
</div>

View File

@ -1,40 +1,58 @@
<button
id="alllike"
data-type="like"
data-filled="false"
class="like-menu yt-spec-button-shape-next yt-spec-button-shape-next--text yt-spec-button-shape-next--mono yt-spec-button-shape-next--size-m yt-spec-button-shape-next--icon-button"
aria-pressed="false"
aria-label="Like all"
>
<div
class="yt-spec-button-shape-next__icon"
style="color: var(--ytmusic-setting-item-toggle-active)"
aria-hidden="true"
<div class="style-scope">
<button
id="alllike"
data-type="like"
data-filled="false"
class="like-menu yt-spec-button-shape-next yt-spec-button-shape-next--text yt-spec-button-shape-next--mono yt-spec-button-shape-next--size-m yt-spec-button-shape-next--icon-button"
aria-pressed="false"
aria-label="Like all"
>
<div
class="yt-spec-button-shape-next__icon"
style="
color: white;
-webkit-mask: linear-gradient(grey, grey);
-webkit-mask-size: 100% 50%;
-webkit-mask-repeat: no-repeat;
z-index: 1;
position: absolute;
"
style="color: var(--ytmusic-setting-item-toggle-active)"
aria-hidden="true"
>
<div
class="yt-spec-button-shape-next__icon"
style="
color: white;
-webkit-mask: linear-gradient(grey, grey);
-webkit-mask-size: 100% 50%;
-webkit-mask-repeat: no-repeat;
z-index: 1;
position: absolute;
"
aria-hidden="true"
>
<div style="width: 24px; height: 24px">
<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="M3,11h3v10H3V11z M18.77,11h-4.23l1.52-4.94C16.38,5.03,15.54,4,14.38,4c-0.58,0-1.14,0.24-1.52,0.65L7,11v10h10.43 c1.06,0,1.98-0.67,2.19-1.61l1.34-6C21.23,12.15,20.18,11,18.77,11z"
class="style-scope yt-icon"
></path>
</g>
</svg>
</div>
</div>
<div style="width: 24px; height: 24px">
<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%;
"
style="pointer-events: none; display: block; width: 100%; height: 100%"
>
<g class="style-scope yt-icon">
<path
@ -45,30 +63,14 @@
</svg>
</div>
</div>
<div style="width: 24px; height: 24px">
<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%"
<yt-touch-feedback-shape style="border-radius: inherit">
<div
class="yt-spec-touch-feedback-shape yt-spec-touch-feedback-shape--touch-response"
aria-hidden="true"
>
<g class="style-scope yt-icon">
<path
d="M3,11h3v10H3V11z M18.77,11h-4.23l1.52-4.94C16.38,5.03,15.54,4,14.38,4c-0.58,0-1.14,0.24-1.52,0.65L7,11v10h10.43 c1.06,0,1.98-0.67,2.19-1.61l1.34-6C21.23,12.15,20.18,11,18.77,11z"
class="style-scope yt-icon"
></path>
</g>
</svg>
</div>
</div>
<yt-touch-feedback-shape style="border-radius: inherit">
<div
class="yt-spec-touch-feedback-shape yt-spec-touch-feedback-shape--touch-response"
aria-hidden="true"
>
<div class="yt-spec-touch-feedback-shape__stroke"></div>
<div class="yt-spec-touch-feedback-shape__fill"></div>
</div>
</yt-touch-feedback-shape>
</button>
<div class="yt-spec-touch-feedback-shape__stroke"></div>
<div class="yt-spec-touch-feedback-shape__fill"></div>
</div>
</yt-touch-feedback-shape>
</button>
</div>

View File

@ -1,40 +1,58 @@
<button
id="allundislike"
data-type="dislike"
data-filled="true"
class="like-menu yt-spec-button-shape-next yt-spec-button-shape-next--text yt-spec-button-shape-next--mono yt-spec-button-shape-next--size-m yt-spec-button-shape-next--icon-button"
aria-pressed="false"
aria-label="Undislike all"
>
<div
class="yt-spec-button-shape-next__icon"
style="color: var(--ytmusic-setting-item-toggle-active)"
aria-hidden="true"
<div class="style-scope">
<button
id="allundislike"
data-type="dislike"
data-filled="true"
class="like-menu yt-spec-button-shape-next yt-spec-button-shape-next--text yt-spec-button-shape-next--mono yt-spec-button-shape-next--size-m yt-spec-button-shape-next--icon-button"
aria-pressed="false"
aria-label="Undislike all"
>
<div
class="yt-spec-button-shape-next__icon"
style="
color: white;
-webkit-mask: linear-gradient(grey, grey);
-webkit-mask-size: 100% 50%;
-webkit-mask-repeat: no-repeat;
z-index: 1;
position: absolute;
"
style="color: var(--ytmusic-setting-item-toggle-active)"
aria-hidden="true"
>
<div
class="yt-spec-button-shape-next__icon"
style="
color: white;
-webkit-mask: linear-gradient(grey, grey);
-webkit-mask-size: 100% 50%;
-webkit-mask-repeat: no-repeat;
z-index: 1;
position: absolute;
"
aria-hidden="true"
>
<div style="width: 24px; height: 24px">
<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="M17,4h-1H6.57C5.5,4,4.59,4.67,4.38,5.61l-1.34,6C2.77,12.85,3.82,14,5.23,14h4.23l-1.52,4.94C7.62,19.97,8.46,21,9.62,21 c0.58,0,1.14-0.24,1.52-0.65L17,14h4V4H17z M10.4,19.67C10.21,19.88,9.92,20,9.62,20c-0.26,0-0.5-0.11-0.63-0.3 c-0.07-0.1-0.15-0.26-0.09-0.47l1.52-4.94l0.4-1.29H9.46H5.23c-0.41,0-0.8-0.17-1.03-0.46c-0.12-0.15-0.25-0.4-0.18-0.72l1.34-6 C5.46,5.35,5.97,5,6.57,5H16v8.61L10.4,19.67z M20,13h-3V5h3V13z"
class="style-scope yt-icon"
></path>
</g>
</svg>
</div>
</div>
<div style="width: 24px; height: 24px">
<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%;
"
style="pointer-events: none; display: block; width: 100%; height: 100%"
>
<g class="style-scope yt-icon">
<path
@ -45,30 +63,14 @@
</svg>
</div>
</div>
<div style="width: 24px; height: 24px">
<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%"
<yt-touch-feedback-shape style="border-radius: inherit">
<div
class="yt-spec-touch-feedback-shape yt-spec-touch-feedback-shape--touch-response"
aria-hidden="true"
>
<g class="style-scope yt-icon">
<path
d="M17,4h-1H6.57C5.5,4,4.59,4.67,4.38,5.61l-1.34,6C2.77,12.85,3.82,14,5.23,14h4.23l-1.52,4.94C7.62,19.97,8.46,21,9.62,21 c0.58,0,1.14-0.24,1.52-0.65L17,14h4V4H17z M10.4,19.67C10.21,19.88,9.92,20,9.62,20c-0.26,0-0.5-0.11-0.63-0.3 c-0.07-0.1-0.15-0.26-0.09-0.47l1.52-4.94l0.4-1.29H9.46H5.23c-0.41,0-0.8-0.17-1.03-0.46c-0.12-0.15-0.25-0.4-0.18-0.72l1.34-6 C5.46,5.35,5.97,5,6.57,5H16v8.61L10.4,19.67z M20,13h-3V5h3V13z"
class="style-scope yt-icon"
></path>
</g>
</svg>
</div>
</div>
<yt-touch-feedback-shape style="border-radius: inherit">
<div
class="yt-spec-touch-feedback-shape yt-spec-touch-feedback-shape--touch-response"
aria-hidden="true"
>
<div class="yt-spec-touch-feedback-shape__stroke"></div>
<div class="yt-spec-touch-feedback-shape__fill"></div>
</div>
</yt-touch-feedback-shape>
</button>
<div class="yt-spec-touch-feedback-shape__stroke"></div>
<div class="yt-spec-touch-feedback-shape__fill"></div>
</div>
</yt-touch-feedback-shape>
</button>
</div>

View File

@ -1,40 +1,58 @@
<button
id="allunlike"
data-type="like"
data-filled="true"
class="like-menu yt-spec-button-shape-next yt-spec-button-shape-next--text yt-spec-button-shape-next--mono yt-spec-button-shape-next--size-m yt-spec-button-shape-next--icon-button"
aria-pressed="false"
aria-label="Unlike all"
>
<div
class="yt-spec-button-shape-next__icon"
style="color: var(--ytmusic-setting-item-toggle-active)"
aria-hidden="true"
<div class="style-scope">
<button
id="allunlike"
data-type="like"
data-filled="true"
class="like-menu yt-spec-button-shape-next yt-spec-button-shape-next--text yt-spec-button-shape-next--mono yt-spec-button-shape-next--size-m yt-spec-button-shape-next--icon-button"
aria-pressed="false"
aria-label="Unlike all"
>
<div
class="yt-spec-button-shape-next__icon"
style="
color: white;
-webkit-mask: linear-gradient(grey, grey);
-webkit-mask-size: 100% 50%;
-webkit-mask-repeat: no-repeat;
z-index: 1;
position: absolute;
"
style="color: var(--ytmusic-setting-item-toggle-active)"
aria-hidden="true"
>
<div
class="yt-spec-button-shape-next__icon"
style="
color: white;
-webkit-mask: linear-gradient(grey, grey);
-webkit-mask-size: 100% 50%;
-webkit-mask-repeat: no-repeat;
z-index: 1;
position: absolute;
"
aria-hidden="true"
>
<div style="width: 24px; height: 24px">
<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="M18.77,11h-4.23l1.52-4.94C16.38,5.03,15.54,4,14.38,4c-0.58,0-1.14,0.24-1.52,0.65L7,11H3v10h4h1h9.43 c1.06,0,1.98-0.67,2.19-1.61l1.34-6C21.23,12.15,20.18,11,18.77,11z M7,20H4v-8h3V20z M19.98,13.17l-1.34,6 C18.54,19.65,18.03,20,17.43,20H8v-8.61l5.6-6.06C13.79,5.12,14.08,5,14.38,5c0.26,0,0.5,0.11,0.63,0.3 c0.07,0.1,0.15,0.26,0.09,0.47l-1.52,4.94L13.18,12h1.35h4.23c0.41,0,0.8,0.17,1.03,0.46C19.92,12.61,20.05,12.86,19.98,13.17z"
class="style-scope yt-icon"
></path>
</g>
</svg>
</div>
</div>
<div style="width: 24px; height: 24px">
<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%;
"
style="pointer-events: none; display: block; width: 100%; height: 100%"
>
<g class="style-scope yt-icon">
<path
@ -45,30 +63,14 @@
</svg>
</div>
</div>
<div style="width: 24px; height: 24px">
<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%"
<yt-touch-feedback-shape style="border-radius: inherit">
<div
class="yt-spec-touch-feedback-shape yt-spec-touch-feedback-shape--touch-response"
aria-hidden="true"
>
<g class="style-scope yt-icon">
<path
d="M18.77,11h-4.23l1.52-4.94C16.38,5.03,15.54,4,14.38,4c-0.58,0-1.14,0.24-1.52,0.65L7,11H3v10h4h1h9.43 c1.06,0,1.98-0.67,2.19-1.61l1.34-6C21.23,12.15,20.18,11,18.77,11z M7,20H4v-8h3V20z M19.98,13.17l-1.34,6 C18.54,19.65,18.03,20,17.43,20H8v-8.61l5.6-6.06C13.79,5.12,14.08,5,14.38,5c0.26,0,0.5,0.11,0.63,0.3 c0.07,0.1,0.15,0.26,0.09,0.47l-1.52,4.94L13.18,12h1.35h4.23c0.41,0,0.8,0.17,1.03,0.46C19.92,12.61,20.05,12.86,19.98,13.17z"
class="style-scope yt-icon"
></path>
</g>
</svg>
</div>
</div>
<yt-touch-feedback-shape style="border-radius: inherit">
<div
class="yt-spec-touch-feedback-shape yt-spec-touch-feedback-shape--touch-response"
aria-hidden="true"
>
<div class="yt-spec-touch-feedback-shape__stroke"></div>
<div class="yt-spec-touch-feedback-shape__fill"></div>
</div>
</yt-touch-feedback-shape>
</button>
<div class="yt-spec-touch-feedback-shape__stroke"></div>
<div class="yt-spec-touch-feedback-shape__fill"></div>
</div>
</yt-touch-feedback-shape>
</button>
</div>

View File

@ -8,28 +8,78 @@ import { t } from '@/i18n';
const COLOR_KEY = '--ytmusic-album-color';
const DARK_COLOR_KEY = '--ytmusic-album-color-dark';
const RATIO_KEY = '--ytmusic-album-color-ratio';
export default createPlugin({
export default createPlugin<
unknown,
unknown,
{
color?: Color;
darkColor?: Color;
playerPage: HTMLElement | null;
navBarBackground: HTMLElement | null;
ytmusicPlayerBar: HTMLElement | null;
playerBarBackground: HTMLElement | null;
sidebarBig: HTMLElement | null;
sidebarSmall: HTMLElement | null;
ytmusicAppLayout: HTMLElement | null;
getMixedColor(
color: string,
key: string,
alpha?: number,
ratioMultiply?: number,
): string;
updateColor(): void;
},
{
enabled: boolean;
ratio: number;
}
>({
name: () => t('plugins.album-color-theme.name'),
description: () => t('plugins.album-color-theme.description'),
restartNeeded: true,
restartNeeded: false,
config: {
enabled: false,
ratio: 0.5,
},
stylesheets: [style],
menu: async ({ getConfig, setConfig }) => {
const ratioList = [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1];
const config = await getConfig();
return [
{
label: t('plugins.album-color-theme.menu.color-mix-ratio.label'),
submenu: ratioList.map((ratio) => ({
label: t(
'plugins.album-color-theme.menu.color-mix-ratio.submenu.percent',
{
ratio: ratio * 100,
},
),
type: 'radio',
checked: config.ratio === ratio,
click() {
setConfig({ ratio });
},
})),
},
];
},
renderer: {
color: null as Color | null,
darkColor: null as Color | null,
playerPage: null,
navBarBackground: null,
ytmusicPlayerBar: null,
playerBarBackground: null,
sidebarBig: null,
sidebarSmall: null,
ytmusicAppLayout: null,
playerPage: null as HTMLElement | null,
navBarBackground: null as HTMLElement | null,
ytmusicPlayerBar: null as HTMLElement | null,
playerBarBackground: null as HTMLElement | null,
sidebarBig: null as HTMLElement | null,
sidebarSmall: null as HTMLElement | null,
ytmusicAppLayout: null as HTMLElement | null,
start() {
async start({ getConfig }) {
this.playerPage = document.querySelector<HTMLElement>('#player-page');
this.navBarBackground = document.querySelector<HTMLElement>(
'#nav-bar-background',
@ -44,6 +94,12 @@ export default createPlugin({
'#mini-guide-background',
);
this.ytmusicAppLayout = document.querySelector<HTMLElement>('#layout');
const config = await getConfig();
document.documentElement.style.setProperty(
RATIO_KEY,
`${~~(config.ratio * 100)}%`,
);
},
onPlayerApiReady(playerApi) {
const fastAverageColor = new FastAverageColor();
@ -52,10 +108,12 @@ export default createPlugin({
if (event.detail.name !== 'dataloaded') return;
const playerResponse = playerApi.getPlayerResponse();
const thumbnail = playerResponse?.videoDetails?.thumbnail?.thumbnails?.at(0);
const thumbnail =
playerResponse?.videoDetails?.thumbnail?.thumbnails?.at(0);
if (!thumbnail) return;
const albumColor = await fastAverageColor.getColorAsync(thumbnail.url)
const albumColor = await fastAverageColor
.getColorAsync(thumbnail.url)
.catch((err) => {
console.error(err);
return null;
@ -72,8 +130,14 @@ export default createPlugin({
this.darkColor = this.darkColor?.darken(0.05);
}
document.documentElement.style.setProperty(COLOR_KEY, `${~~this.color.red()}, ${~~this.color.green()}, ${~~this.color.blue()}`);
document.documentElement.style.setProperty(DARK_COLOR_KEY, `${~~this.darkColor.red()}, ${~~this.darkColor.green()}, ${~~this.darkColor.blue()}`);
document.documentElement.style.setProperty(
COLOR_KEY,
`${~~this.color.red()}, ${~~this.color.green()}, ${~~this.color.blue()}`,
);
document.documentElement.style.setProperty(
DARK_COLOR_KEY,
`${~~this.darkColor.red()}, ${~~this.darkColor.green()}, ${~~this.darkColor.blue()}`,
);
} else {
document.documentElement.style.setProperty(COLOR_KEY, '0, 0, 0');
document.documentElement.style.setProperty(DARK_COLOR_KEY, '0, 0, 0');
@ -82,28 +146,77 @@ export default createPlugin({
this.updateColor();
});
},
getColor(key: string, alpha = 1) {
return `rgba(var(${key}), ${alpha})`;
onConfigChange(config) {
document.documentElement.style.setProperty(
RATIO_KEY,
`${~~(config.ratio * 100)}%`,
);
},
getMixedColor(color: string, key: string, alpha = 1, ratioMultiply) {
const keyColor = `rgba(var(${key}), ${alpha})`;
let colorRatio = `var(${RATIO_KEY}, 50%)`;
let originalRatio = `calc(100% - var(${RATIO_KEY}, 50%))`;
if (ratioMultiply) {
colorRatio = `calc(var(${RATIO_KEY}, 50%) * ${ratioMultiply})`;
originalRatio = `calc(100% - calc(var(${RATIO_KEY}, 50%) * ${ratioMultiply}))`;
}
return `color-mix(in srgb, ${color} ${originalRatio}, ${keyColor} ${colorRatio})`;
},
updateColor() {
const change = (element: HTMLElement | null, color: string) => {
if (element) {
element.style.backgroundColor = color;
}
const variableMap = {
'--ytmusic-color-black1': '#212121',
'--ytmusic-color-black2': '#181818',
'--ytmusic-color-black3': '#030303',
'--ytmusic-color-black4': '#030303',
'--ytmusic-color-blackpure': '#000',
'--dark-theme-background-color': '#212121',
'--yt-spec-base-background': '#0f0f0f',
'--yt-spec-raised-background': '#212121',
'--yt-spec-menu-background': '#282828',
'--yt-spec-static-brand-black': '#212121',
'--yt-spec-static-overlay-background-solid': '#000',
'--yt-spec-static-overlay-background-heavy': 'rgba(0,0,0,0.8)',
'--yt-spec-static-overlay-background-medium': 'rgba(0,0,0,0.6)',
'--yt-spec-static-overlay-background-medium-light': 'rgba(0,0,0,0.3)',
'--yt-spec-static-overlay-background-light': 'rgba(0,0,0,0.1)',
'--yt-spec-general-background-a': '#181818',
'--yt-spec-general-background-b': '#0f0f0f',
'--yt-spec-general-background-c': '#030303',
'--yt-spec-snackbar-background': '#030303',
'--yt-spec-filled-button-text': '#030303',
'--yt-spec-black-1': '#282828',
'--yt-spec-black-2': '#1f1f1f',
'--yt-spec-black-3': '#161616',
'--yt-spec-black-4': '#0d0d0d',
'--yt-spec-black-pure': '#000',
'--yt-spec-black-pure-alpha-5': 'rgba(0,0,0,0.05)',
'--yt-spec-black-pure-alpha-10': 'rgba(0,0,0,0.1)',
'--yt-spec-black-pure-alpha-15': 'rgba(0,0,0,0.15)',
'--yt-spec-black-pure-alpha-30': 'rgba(0,0,0,0.3)',
'--yt-spec-black-pure-alpha-60': 'rgba(0,0,0,0.6)',
'--yt-spec-black-pure-alpha-80': 'rgba(0,0,0,0.8)',
'--yt-spec-black-1-alpha-98': 'rgba(40,40,40,0.98)',
'--yt-spec-black-1-alpha-95': 'rgba(40,40,40,0.95)',
};
Object.entries(variableMap).map(([variable, color]) => {
document.documentElement.style.setProperty(
variable,
this.getMixedColor(color, COLOR_KEY),
'important',
);
});
change(this.playerPage, this.getColor(DARK_COLOR_KEY));
change(this.navBarBackground, this.getColor(COLOR_KEY));
change(this.ytmusicPlayerBar, this.getColor(COLOR_KEY));
change(this.playerBarBackground, this.getColor(COLOR_KEY));
change(this.sidebarBig, this.getColor(COLOR_KEY));
if (this.ytmusicAppLayout?.hasAttribute('player-page-open')) {
change(this.sidebarSmall, this.getColor(DARK_COLOR_KEY));
}
const ytRightClickList = document.querySelector<HTMLElement>('tp-yt-paper-listbox');
change(ytRightClickList, this.getColor(COLOR_KEY));
document.body.style.setProperty(
'background',
this.getMixedColor('#030303', COLOR_KEY),
'important',
);
document.documentElement.style.setProperty(
'--ytmusic-background',
this.getMixedColor('#030303', DARK_COLOR_KEY),
'important',
);
},
},
});

View File

@ -24,19 +24,13 @@ yt-page-navigation-progress {
background-color 300ms cubic-bezier(0.2, 0, 0.6, 1) !important;
}
#img,
#player,
.song-media-controls.style-scope.ytmusic-player {
border-radius: 2% !important;
}
#items {
border-radius: 10px !important;
}
/* fix blur navigation bar */
ytmusic-app-layout > [slot='player-page'] {
ytmusic-app-layout > [slot="player-page"]:not([is-mweb-modernization-enabled]):not(:has(ytmusic-player[player-ui-state=FULLSCREEN])) {
padding-top: 90px;
margin-top: calc(-90px + var(--menu-bar-height, 0px)) !important;
}
@ -53,15 +47,37 @@ ytmusic-app-layout > [slot='player-page'] {
.icon.ytmusic-menu-navigation-item-renderer {
color: rgba(255, 255, 255, 0.5) !important;
}
.menu.ytmusic-player-bar {
--iron-icon-fill-color: rgba(255, 255, 255, 0.5) !important;
}
ytmusic-player-bar {
color: rgba(255, 255, 255, 0.5) !important;
}
.time-info.ytmusic-player-bar {
color: rgba(255, 255, 255, 0.5) !important;
}
.volume-slider.ytmusic-player-bar, .expand-volume-slider.ytmusic-player-bar {
--paper-slider-container-color: rgba(255, 255, 255, 0.5) !important;
}
/* fix background image */
ytmusic-fullbleed-thumbnail-renderer img {
mask: linear-gradient(to bottom, #000 0%, #000 50%, transparent 100%);
}
.background-gradient.style-scope,
ytmusic-app-layout[is-bauhaus-sidenav-enabled] #mini-guide-background.ytmusic-app-layout {
background: var(--ytmusic-background) !important;
}
ytmusic-browse-response[has-background]:not([disable-gradient]) .background-gradient.ytmusic-browse-response {
background: unset !important;
}
#background.immersive-background.style-scope.ytmusic-browse-response {
opacity: 0.6;
}

View File

@ -1,18 +1,11 @@
import style from './style.css?inline';
import { createPlugin } from '@/utils';
import { t } from '@/i18n';
import { createPlugin } from '@/utils';
import { menu } from './menu';
import { AmbientModePluginConfig } from './types';
import { waitForElement } from '@/utils/wait-for-element';
export type AmbientModePluginConfig = {
enabled: boolean;
quality: number;
buffer: number;
interpolationTime: number;
blur: number;
size: number;
opacity: number;
fullscreen: boolean;
};
const defaultConfig: AmbientModePluginConfig = {
enabled: false,
quality: 50,
@ -30,198 +23,80 @@ export default createPlugin({
restartNeeded: false,
config: defaultConfig,
stylesheets: [style],
menu: async ({ getConfig, setConfig }) => {
const interpolationTimeList = [0, 500, 1000, 1500, 2000, 3000, 4000, 5000];
const qualityList = [10, 25, 50, 100, 200, 500, 1000];
const sizeList = [100, 110, 125, 150, 175, 200, 300];
const bufferList = [1, 5, 10, 20, 30];
const blurAmountList = [0, 5, 10, 25, 50, 100, 150, 200, 500];
const opacityList = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1];
const config = await getConfig();
return [
{
label: t('plugins.ambient-mode.menu.smoothness-transition.label'),
submenu: interpolationTimeList.map((interpolationTime) => ({
label: t(
'plugins.ambient-mode.menu.smoothness-transition.submenu.during',
{
interpolationTime: interpolationTime / 1000,
},
),
type: 'radio',
checked: config.interpolationTime === interpolationTime,
click() {
setConfig({ interpolationTime });
},
})),
},
{
label: t('plugins.ambient-mode.menu.quality.label'),
submenu: qualityList.map((quality) => ({
label: t('plugins.ambient-mode.menu.quality.submenu.pixels', {
quality,
}),
type: 'radio',
checked: config.quality === quality,
click() {
setConfig({ quality });
},
})),
},
{
label: t('plugins.ambient-mode.menu.size.label'),
submenu: sizeList.map((size) => ({
label: t('plugins.ambient-mode.menu.size.submenu.percent', { size }),
type: 'radio',
checked: config.size === size,
click() {
setConfig({ size });
},
})),
},
{
label: t('plugins.ambient-mode.menu.buffer.label'),
submenu: bufferList.map((buffer) => ({
label: t('plugins.ambient-mode.menu.buffer.submenu.buffer', {
buffer,
}),
type: 'radio',
checked: config.buffer === buffer,
click() {
setConfig({ buffer });
},
})),
},
{
label: t('plugins.ambient-mode.menu.opacity.label'),
submenu: opacityList.map((opacity) => ({
label: t('plugins.ambient-mode.menu.opacity.submenu.percent', {
opacity: opacity * 100,
}),
type: 'radio',
checked: config.opacity === opacity,
click() {
setConfig({ opacity });
},
})),
},
{
label: t('plugins.ambient-mode.menu.blur-amount.label'),
submenu: blurAmountList.map((blur) => ({
label: t('plugins.ambient-mode.menu.blur-amount.submenu.pixels', {
blurAmount: blur,
}),
type: 'radio',
checked: config.blur === blur,
click() {
setConfig({ blur });
},
})),
},
{
label: t('plugins.ambient-mode.menu.use-fullscreen.label'),
type: 'checkbox',
checked: config.fullscreen,
click(item) {
setConfig({ fullscreen: item.checked });
},
},
];
},
menu: menu,
renderer: {
interpolationTime: defaultConfig.interpolationTime,
buffer: defaultConfig.buffer,
qualityRatio: defaultConfig.quality,
sizeRatio: defaultConfig.size / 100,
size: defaultConfig.size,
blur: defaultConfig.blur,
opacity: defaultConfig.opacity,
isFullscreen: defaultConfig.fullscreen,
unregister: null as (() => void) | null,
update: null as (() => void) | null,
observer: null as MutationObserver | null,
interval: null as NodeJS.Timeout | null,
lastMediaType: null as 'video' | 'image' | null,
lastVideoSource: null as string | null,
lastImageSource: null as string | null,
async start({ getConfig }) {
const config = await getConfig();
this.interpolationTime = config.interpolationTime;
this.buffer = config.buffer;
this.qualityRatio = config.quality;
this.size = config.size;
this.blur = config.blur;
this.opacity = config.opacity;
this.isFullscreen = config.fullscreen;
const songImage = document.querySelector<HTMLImageElement>('#song-image');
const songVideo = document.querySelector<HTMLDivElement>('#song-video');
const image = songImage?.querySelector<HTMLImageElement>(
'yt-img-shadow > img',
);
const video = await waitForElement<HTMLVideoElement>(
'.html5-video-container > video',
);
const videoWrapper = document.querySelector(
'#song-video > .player-wrapper',
);
start() {
const injectBlurImage = () => {
const songImage = document.querySelector<HTMLImageElement>(
'#song-image',
);
const image = document.querySelector<HTMLImageElement>(
'#song-image yt-img-shadow > img',
);
if (!songImage || !image) return null;
if (!songImage) return null;
if (!image) return null;
this.lastImageSource = image.src;
const blurImage = document.createElement('img');
blurImage.classList.add('html5-blur-image');
blurImage.src = image.src;
const applyImageAttribute = () => {
const rect = image.getBoundingClientRect();
const newWidth = Math.floor(image.width || rect.width);
const newHeight = Math.floor(image.height || rect.height);
if (newWidth === 0 || newHeight === 0) return;
this.update = () => {
if (this.isFullscreen) blurImage.classList.add('fullscreen');
else blurImage.classList.remove('fullscreen');
const leftOffset = (newWidth * (this.sizeRatio - 1)) / 2;
const topOffset = (newHeight * (this.sizeRatio - 1)) / 2;
blurImage.style.setProperty('--left', `${-1 * leftOffset}px`);
blurImage.style.setProperty('--top', `${-1 * topOffset}px`);
blurImage.style.setProperty('--width', `${newWidth * this.sizeRatio}px`);
blurImage.style.setProperty('--height', `${newHeight * this.sizeRatio}px`);
blurImage.style.setProperty('--width', `${this.size}%`);
blurImage.style.setProperty('--height', `${this.size}%`);
blurImage.style.setProperty('--blur', `${this.blur}px`);
blurImage.style.setProperty('--opacity', `${this.opacity}`);
};
this.update = applyImageAttribute;
const observer = new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
if (mutation.type === 'attributes') {
applyImageAttribute();
}
});
});
const resizeObserver = new ResizeObserver(() => {
applyImageAttribute();
});
applyImageAttribute();
observer.observe(songImage, { attributes: true });
resizeObserver.observe(songImage);
window.addEventListener('resize', applyImageAttribute);
this.update();
/* injecting */
songImage.prepend(blurImage);
/* cleanup */
return () => {
observer.disconnect();
resizeObserver.disconnect();
window.removeEventListener('resize', applyImageAttribute);
if (blurImage.isConnected) blurImage.remove();
};
};
const injectBlurVideo = (): (() => void) | null => {
const songVideo = document.querySelector<HTMLDivElement>('#song-video');
const video = document.querySelector<HTMLVideoElement>(
'#song-video .html5-video-container > video',
);
const wrapper = document.querySelector('#song-video > .player-wrapper');
const injectBlurVideo = () => {
if (!songVideo || !video || !videoWrapper) return null;
if (!songVideo) return null;
if (!video) return null;
if (!wrapper) return null;
this.lastVideoSource = video.src;
const blurCanvas = document.createElement('canvas');
blurCanvas.classList.add('html5-blur-canvas');
@ -253,7 +128,7 @@ export default createPlugin({
if (lastImageData) {
const frameOffset =
(1 / this.buffer) * (1000 / this.interpolationTime);
context.globalAlpha = 1 - (frameOffset * 2); // because of alpha value must be < 1
context.globalAlpha = 1 - frameOffset * 2; // because of alpha value must be < 1
context.putImageData(lastImageData, 0, 0);
context.globalAlpha = frameOffset;
}
@ -265,7 +140,7 @@ export default createPlugin({
});
};
const applyVideoAttributes = () => {
this.update = () => {
const rect = video.getBoundingClientRect();
const newWidth = Math.floor(video.width || rect.width);
@ -277,31 +152,16 @@ export default createPlugin({
blurCanvas.height = Math.floor(
(newHeight / newWidth) * this.qualityRatio,
);
blurCanvas.style.width = `${newWidth * this.sizeRatio}px`;
blurCanvas.style.height = `${newHeight * this.sizeRatio}px`;
if (this.isFullscreen) blurCanvas.classList.add('fullscreen');
else blurCanvas.classList.remove('fullscreen');
const leftOffset = (newWidth * (this.sizeRatio - 1)) / 2;
const topOffset = (newHeight * (this.sizeRatio - 1)) / 2;
blurCanvas.style.setProperty('--left', `${-1 * leftOffset}px`);
blurCanvas.style.setProperty('--top', `${-1 * topOffset}px`);
blurCanvas.style.setProperty('--width', `${this.size}%`);
blurCanvas.style.setProperty('--height', `${this.size}%`);
blurCanvas.style.setProperty('--blur', `${this.blur}px`);
blurCanvas.style.setProperty('--opacity', `${this.opacity}`);
};
this.update = applyVideoAttributes;
const observer = new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
if (mutation.type === 'attributes') {
applyVideoAttributes();
}
});
});
const resizeObserver = new ResizeObserver(() => {
applyVideoAttributes();
});
this.update();
/* hooking */
let canvasInterval: NodeJS.Timeout | null = null;
@ -309,10 +169,6 @@ export default createPlugin({
onSync,
Math.max(1, Math.ceil(1000 / this.buffer)),
);
applyVideoAttributes();
observer.observe(songVideo, { attributes: true });
resizeObserver.observe(songVideo);
window.addEventListener('resize', applyVideoAttributes);
const onPause = () => {
if (canvasInterval) clearInterval(canvasInterval);
@ -329,7 +185,7 @@ export default createPlugin({
songVideo.addEventListener('play', onPlay);
/* injecting */
wrapper.prepend(blurCanvas);
videoWrapper.prepend(blurCanvas);
/* cleanup */
return () => {
@ -338,55 +194,72 @@ export default createPlugin({
songVideo.removeEventListener('pause', onPause);
songVideo.removeEventListener('play', onPlay);
observer.disconnect();
resizeObserver.disconnect();
window.removeEventListener('resize', applyVideoAttributes);
if (blurCanvas.isConnected) blurCanvas.remove();
};
};
const isVideoMode = () => {
const songVideo = document.querySelector<HTMLDivElement>('#song-video');
if (!songVideo) return false;
if (!songVideo) {
this.lastMediaType = 'image';
return false;
}
return getComputedStyle(songVideo).display !== 'none';
const isVideo = getComputedStyle(songVideo).display !== 'none';
this.lastMediaType = isVideo ? 'video' : 'image';
return isVideo;
};
const playerPage = document.querySelector<HTMLElement>('#player-page');
const ytmusicAppLayout = document.querySelector<HTMLElement>('#layout');
const isPageOpen = ytmusicAppLayout?.hasAttribute('player-page-open');
if (isPageOpen) {
this.unregister?.();
this.unregister = (isVideoMode() ? injectBlurVideo() : injectBlurImage()) ?? null;
}
const injectBlurElement = (force?: boolean): boolean | void => {
const isPageOpen = ytmusicAppLayout?.hasAttribute('player-page-open');
if (isPageOpen) {
const isVideo = isVideoMode();
if (!force) {
if (
this.lastMediaType === 'video' &&
this.lastVideoSource === video?.src
)
return false;
if (
this.lastMediaType === 'image' &&
this.lastImageSource === image?.src
)
return false;
}
this.unregister?.();
this.unregister =
(isVideo ? injectBlurVideo() : injectBlurImage()) ?? null;
} else {
this.unregister?.();
this.unregister = null;
}
};
/* needed for switching between different views (e.g. miniplayer) */
const observer = new MutationObserver((mutationsList) => {
for (const mutation of mutationsList) {
if (mutation.type === 'attributes') {
const isPageOpen =
ytmusicAppLayout?.hasAttribute('player-page-open');
if (isPageOpen) {
this.unregister?.();
this.unregister = (isVideoMode() ? injectBlurVideo() : injectBlurImage()) ?? null;
} else {
this.unregister?.();
this.unregister = null;
}
injectBlurElement(true);
break;
}
}
});
if (playerPage) {
observer.observe(playerPage, { attributes: true });
/* fallback ticker for when the observer isn't triggered */
this.interval = setInterval(injectBlurElement, 1000);
}
},
onConfigChange(newConfig) {
this.interpolationTime = newConfig.interpolationTime;
this.buffer = newConfig.buffer;
this.qualityRatio = newConfig.quality;
this.sizeRatio = newConfig.size / 100;
this.size = newConfig.size;
this.blur = newConfig.blur;
this.opacity = newConfig.opacity;
this.isFullscreen = newConfig.fullscreen;
@ -394,9 +267,9 @@ export default createPlugin({
this.update?.();
},
stop() {
this.observer?.disconnect();
this.update = null;
this.unregister?.();
if (this.interval) clearInterval(this.interval);
},
},
});

View File

@ -0,0 +1,120 @@
import { MenuItemConstructorOptions } from 'electron';
import { t } from '@/i18n';
import { MenuContext } from '@/types/contexts';
import { AmbientModePluginConfig } from './types';
export interface menuParameters {
getConfig: () => AmbientModePluginConfig | Promise<AmbientModePluginConfig>;
setConfig: (
conf: Partial<Omit<AmbientModePluginConfig, 'enabled'>>,
) => void | Promise<void>;
}
export const menu: (
ctx: MenuContext<AmbientModePluginConfig>,
) =>
| MenuItemConstructorOptions[]
| Promise<MenuItemConstructorOptions[]> = async ({
getConfig,
setConfig,
}: menuParameters) => {
const interpolationTimeList = [0, 500, 1000, 1500, 2000, 3000, 4000, 5000];
const qualityList = [10, 25, 50, 100, 200, 500, 1000];
const sizeList = [100, 110, 125, 150, 175, 200, 300];
const bufferList = [1, 5, 10, 20, 30];
const blurAmountList = [0, 5, 10, 25, 50, 100, 150, 200, 500];
const opacityList = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1];
const config = await getConfig();
return [
{
label: t('plugins.ambient-mode.menu.smoothness-transition.label'),
submenu: interpolationTimeList.map((interpolationTime) => ({
label: t(
'plugins.ambient-mode.menu.smoothness-transition.submenu.during',
{
interpolationTime: interpolationTime / 1000,
},
),
type: 'radio',
checked: config.interpolationTime === interpolationTime,
click() {
setConfig({ interpolationTime });
},
})),
},
{
label: t('plugins.ambient-mode.menu.quality.label'),
submenu: qualityList.map((quality) => ({
label: t('plugins.ambient-mode.menu.quality.submenu.pixels', {
quality,
}),
type: 'radio',
checked: config.quality === quality,
click() {
setConfig({ quality });
},
})),
},
{
label: t('plugins.ambient-mode.menu.size.label'),
submenu: sizeList.map((size) => ({
label: t('plugins.ambient-mode.menu.size.submenu.percent', { size }),
type: 'radio',
checked: config.size === size,
click() {
setConfig({ size });
},
})),
},
{
label: t('plugins.ambient-mode.menu.buffer.label'),
submenu: bufferList.map((buffer) => ({
label: t('plugins.ambient-mode.menu.buffer.submenu.buffer', {
buffer,
}),
type: 'radio',
checked: config.buffer === buffer,
click() {
setConfig({ buffer });
},
})),
},
{
label: t('plugins.ambient-mode.menu.opacity.label'),
submenu: opacityList.map((opacity) => ({
label: t('plugins.ambient-mode.menu.opacity.submenu.percent', {
opacity: opacity * 100,
}),
type: 'radio',
checked: config.opacity === opacity,
click() {
setConfig({ opacity });
},
})),
},
{
label: t('plugins.ambient-mode.menu.blur-amount.label'),
submenu: blurAmountList.map((blur) => ({
label: t('plugins.ambient-mode.menu.blur-amount.submenu.pixels', {
blurAmount: blur,
}),
type: 'radio',
checked: config.blur === blur,
click() {
setConfig({ blur });
},
})),
},
{
label: t('plugins.ambient-mode.menu.use-fullscreen.label'),
type: 'checkbox',
checked: config.fullscreen,
click(item: Electron.MenuItem) {
setConfig({ fullscreen: item.checked });
},
},
];
};

View File

@ -1,40 +1,45 @@
#song-video canvas.html5-blur-canvas {
#song-video canvas.html5-blur-canvas,
#song-image .html5-blur-image {
filter: blur(var(--blur, 100px));
opacity: var(--opacity, 1);
width: var(--width, 100%);
height: var(--height, 100%);
pointer-events: none;
}
#song-video canvas.html5-blur-canvas:not(.fullscreen) {
#song-video canvas.html5-blur-canvas:not(.fullscreen),
#song-image .html5-blur-image {
position: absolute;
left: var(--left, 0px);
top: var(--top, 0px);
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
#song-video canvas.html5-blur-canvas.fullscreen {
position: fixed;
left: 0;
top: 0;
width: 100% !important;
height: 100% !important;
left: 0 !important;
top: 0 !important;
width: 100%;
height: 100%;
}
#song-video .html5-video-container > video {
top: 0 !important;
#song-video .html5-video-container {
height: 100%;
}
#song-image .html5-blur-image {
position: absolute;
left: var(--left, 0px);
top: var(--top, 0px);
width: var(--width, 100%) !important;
height: var(--height, 100%) !important;
filter: blur(var(--blur, 100px));
opacity: var(--opacity, 1);
pointer-events: none;
#player:not([video-mode]):not(.video-mode):not([player-ui-state='MINIPLAYER']):not([is-mweb-modernization-enabled]) {
width: 100%;
margin: 0 auto !important;
overflow: visible;
}
/* Fix ambient mode overlapping other elements #2520 */
.song-button.ytmusic-av-toggle, .video-button.ytmusic-av-toggle {
z-index: 1;
background-color: transparent;
}
#side-panel.side-panel.ytmusic-player-page {
z-index: 0;
}

View File

@ -0,0 +1,10 @@
export type AmbientModePluginConfig = {
enabled: boolean;
quality: number;
buffer: number;
interpolationTime: number;
blur: number;
size: number;
opacity: number;
fullscreen: boolean;
};

View File

@ -0,0 +1,71 @@
import { t } from 'i18next';
import { type Context, Hono } from 'hono';
import { cors } from 'hono/cors';
import { serve } from '@hono/node-server';
import registerCallback, { type SongInfo } from '@/providers/song-info';
import { createBackend } from '@/utils';
import type { AmuseSongInfo } from './types';
const amusePort = 9863;
const formatSongInfo = (info: SongInfo) => {
const formattedSongInfo: AmuseSongInfo = {
player: {
hasSong: !!(info.artist && info.title),
isPaused: info.isPaused ?? false,
seekbarCurrentPosition: info.elapsedSeconds ?? 0,
},
track: {
duration: info.songDuration,
title: info.title,
author: info.artist,
cover: info.imageSrc ?? '',
url: info.url ?? '',
id: info.videoId,
isAdvertisement: false,
},
};
return formattedSongInfo;
};
export default createBackend({
currentSongInfo: {} as SongInfo,
app: null as Hono | null,
server: null as ReturnType<typeof serve> | null,
start() {
registerCallback((songInfo) => {
this.currentSongInfo = songInfo;
});
this.app = new Hono();
this.app.use('*', cors());
this.app.get('/', (ctx) =>
ctx.body(t('plugins.amuse.response.query'), 200),
);
const queryAndApiHandler = (ctx: Context) => {
return ctx.json(formatSongInfo(this.currentSongInfo), 200);
};
this.app.get('/query', queryAndApiHandler);
this.app.get('/api', queryAndApiHandler);
try {
this.server = serve({
fetch: this.app.fetch.bind(this.app),
port: amusePort,
});
} catch (err) {
console.error(err);
}
},
stop() {
if (this.server) {
this.server?.close();
}
},
});

View File

@ -0,0 +1,20 @@
import { createPlugin } from '@/utils';
import backend from './backend';
import { t } from '@/i18n';
export interface MusicWidgetConfig {
enabled: boolean;
}
export const defaultConfig: MusicWidgetConfig = {
enabled: false,
};
export default createPlugin({
name: () => t('plugins.amuse.name'),
description: () => t('plugins.amuse.description'),
addedVersion: '3.7.X',
restartNeeded: true,
config: defaultConfig,
backend,
});

View File

@ -0,0 +1,20 @@
export interface PlayerInfo {
hasSong: boolean;
isPaused: boolean;
seekbarCurrentPosition: number;
}
export interface TrackInfo {
author: string;
title: string;
cover: string;
duration: number;
url: string;
id: string;
isAdvertisement: boolean;
}
export interface AmuseSongInfo {
player: PlayerInfo;
track: TrackInfo;
}

View File

@ -0,0 +1 @@
export * from './main';

View File

@ -0,0 +1,136 @@
import { jwt } from 'hono/jwt';
import { OpenAPIHono as Hono } from '@hono/zod-openapi';
import { cors } from 'hono/cors';
import { swaggerUI } from '@hono/swagger-ui';
import { serve } from '@hono/node-server';
import registerCallback from '@/providers/song-info';
import { createBackend } from '@/utils';
import { JWTPayloadSchema } from './scheme';
import { registerAuth, registerControl } from './routes';
import { type APIServerConfig, AuthStrategy } from '../config';
import type { BackendType } from './types';
import type { RepeatMode } from '@/types/datahost-get-state';
export const backend = createBackend<BackendType, APIServerConfig>({
async start(ctx) {
const config = await ctx.getConfig();
await this.init(ctx);
registerCallback((songInfo) => {
this.songInfo = songInfo;
});
ctx.ipc.on('ytmd:player-api-loaded', () =>
ctx.ipc.send('ytmd:setup-time-changed-listener'),
);
ctx.ipc.on(
'ytmd:repeat-changed',
(mode: RepeatMode) => (this.currentRepeatMode = mode),
);
this.run(config.hostname, config.port);
},
stop() {
this.end();
},
onConfigChange(config) {
if (
this.oldConfig?.hostname === config.hostname &&
this.oldConfig?.port === config.port
) {
this.oldConfig = config;
return;
}
this.end();
this.run(config.hostname, config.port);
this.oldConfig = config;
},
// Custom
async init(ctx) {
const config = await ctx.getConfig();
this.app = new Hono();
this.app.use('*', cors());
// middlewares
this.app.use('/api/*', async (ctx, next) => {
if (config.authStrategy !== AuthStrategy.NONE) {
return await jwt({
secret: config.secret,
})(ctx, next);
}
await next();
});
this.app.use('/api/*', async (ctx, next) => {
const result = await JWTPayloadSchema.spa(await ctx.get('jwtPayload'));
const isAuthorized =
config.authStrategy === AuthStrategy.NONE ||
(result.success && config.authorizedClients.includes(result.data.id));
if (!isAuthorized) {
ctx.status(401);
return ctx.body('Unauthorized');
}
return await next();
});
// routes
registerControl(
this.app,
ctx,
() => this.songInfo,
() => this.currentRepeatMode,
);
registerAuth(this.app, ctx);
// swagger
this.app.openAPIRegistry.registerComponent(
'securitySchemes',
'bearerAuth',
{
type: 'http',
scheme: 'bearer',
bearerFormat: 'JWT',
},
);
this.app.doc('/doc', {
openapi: '3.1.0',
info: {
version: '1.0.0',
title: 'Youtube Music API Server',
},
security: [
{
bearerAuth: [],
},
],
});
this.app.get('/swagger', swaggerUI({ url: '/doc' }));
},
run(hostname, port) {
if (!this.app) return;
try {
this.server = serve({
fetch: this.app.fetch.bind(this.app),
port,
hostname,
});
} catch (err) {
console.error(err);
}
},
end() {
this.server?.close();
this.server = undefined;
},
});

View File

@ -0,0 +1,95 @@
import { createRoute, z } from '@hono/zod-openapi';
import { dialog } from 'electron';
import { sign } from 'hono/jwt';
import { getConnInfo } from '@hono/node-server/conninfo';
import { t } from '@/i18n';
import { type APIServerConfig, AuthStrategy } from '../../config';
import type { JWTPayload } from '../scheme';
import type { HonoApp } from '../types';
import type { BackendContext } from '@/types/contexts';
const routes = {
request: createRoute({
method: 'post',
path: '/auth/{id}',
summary: '',
description: '',
security: [],
request: {
params: z.object({
id: z.string(),
}),
},
responses: {
200: {
description: 'Success',
content: {
'application/json': {
schema: z.object({
accessToken: z.string(),
}),
},
},
},
403: {
description: 'Forbidden',
},
},
}),
};
export const register = (
app: HonoApp,
{ getConfig, setConfig }: BackendContext<APIServerConfig>,
) => {
app.openapi(routes.request, async (ctx) => {
const config = await getConfig();
const { id } = ctx.req.param();
if (config.authorizedClients.includes(id)) {
// SKIP CHECK
} else if (config.authStrategy === AuthStrategy.AUTH_AT_FIRST) {
const result = await dialog.showMessageBox({
title: t('plugins.api-server.dialog.request.title'),
message: t('plugins.api-server.dialog.request.message', {
origin: getConnInfo(ctx).remote.address,
ID: id,
}),
buttons: [
t('plugins.api-server.dialog.request.buttons.allow'),
t('plugins.api-server.dialog.request.buttons.deny'),
],
defaultId: 1,
cancelId: 1,
});
if (result.response === 1) {
ctx.status(403);
return ctx.body(null);
}
} else if (config.authStrategy === AuthStrategy.NONE) {
// SKIP CHECK
}
setConfig({
authorizedClients: [...config.authorizedClients, id],
});
const token = await sign(
{
id,
iat: ~~(Date.now() / 1000),
} satisfies JWTPayload,
config.secret,
);
ctx.status(200);
return ctx.json({
accessToken: token,
});
});
};

View File

@ -0,0 +1,500 @@
import { createRoute, z } from '@hono/zod-openapi';
import { ipcMain } from 'electron';
import getSongControls from '@/providers/song-controls';
import {
AuthHeadersSchema,
type ResponseSongInfo,
SongInfoSchema,
SeekSchema,
GoForwardScheme,
GoBackSchema,
SwitchRepeatSchema,
SetVolumeSchema,
SetFullscreenSchema,
} from '../scheme';
import type { RepeatMode } from '@/types/datahost-get-state';
import type { SongInfo } from '@/providers/song-info';
import type { BackendContext } from '@/types/contexts';
import type { APIServerConfig } from '../../config';
import type { HonoApp } from '../types';
import type { QueueResponse } from '@/types/youtube-music-desktop-internal';
const API_VERSION = 'v1';
const routes = {
previous: createRoute({
method: 'post',
path: `/api/${API_VERSION}/previous`,
summary: 'play previous song',
description: 'Plays the previous song in the queue',
responses: {
204: {
description: 'Success',
},
},
}),
next: createRoute({
method: 'post',
path: `/api/${API_VERSION}/next`,
summary: 'play next song',
description: 'Plays the next song in the queue',
responses: {
204: {
description: 'Success',
},
},
}),
play: createRoute({
method: 'post',
path: `/api/${API_VERSION}/play`,
summary: 'Play',
description: 'Change the state of the player to play',
responses: {
204: {
description: 'Success',
},
},
}),
pause: createRoute({
method: 'post',
path: `/api/${API_VERSION}/pause`,
summary: 'Pause',
description: 'Change the state of the player to pause',
responses: {
204: {
description: 'Success',
},
},
}),
togglePlay: createRoute({
method: 'post',
path: `/api/${API_VERSION}/toggle-play`,
summary: 'Toggle play/pause',
description:
'Change the state of the player to play if paused, or pause if playing',
responses: {
204: {
description: 'Success',
},
},
}),
like: createRoute({
method: 'post',
path: `/api/${API_VERSION}/like`,
summary: 'like song',
description: 'Set the current song as liked',
responses: {
204: {
description: 'Success',
},
},
}),
dislike: createRoute({
method: 'post',
path: `/api/${API_VERSION}/dislike`,
summary: 'dislike song',
description: 'Set the current song as disliked',
responses: {
204: {
description: 'Success',
},
},
}),
seekTo: createRoute({
method: 'post',
path: `/api/${API_VERSION}/seek-to`,
summary: 'seek',
description: 'Seek to a specific time in the current song',
request: {
headers: AuthHeadersSchema,
body: {
description: 'seconds to seek to',
content: {
'application/json': {
schema: SeekSchema,
},
},
},
},
responses: {
204: {
description: 'Success',
},
},
}),
goBack: createRoute({
method: 'post',
path: `/api/${API_VERSION}/go-back`,
summary: 'go back',
description: 'Move the current song back by a number of seconds',
request: {
headers: AuthHeadersSchema,
body: {
description: 'seconds to go back',
content: {
'application/json': {
schema: GoBackSchema,
},
},
},
},
responses: {
204: {
description: 'Success',
},
},
}),
goForward: createRoute({
method: 'post',
path: `/api/${API_VERSION}/go-forward`,
summary: 'go forward',
description: 'Move the current song forward by a number of seconds',
request: {
headers: AuthHeadersSchema,
body: {
description: 'seconds to go forward',
content: {
'application/json': {
schema: GoForwardScheme,
},
},
},
},
responses: {
204: {
description: 'Success',
},
},
}),
shuffle: createRoute({
method: 'post',
path: `/api/${API_VERSION}/shuffle`,
summary: 'shuffle',
description: 'Shuffle the queue',
responses: {
204: {
description: 'Success',
},
},
}),
repeatMode: createRoute({
method: 'get',
path: `/api/${API_VERSION}/repeat-mode`,
summary: 'get current repeat mode',
description: 'Get the current repeat mode (NONE, ALL, ONE)',
responses: {
200: {
description: 'Success',
content: {
'application/json': {
schema: z.object({
mode: z.enum(['ONE', 'NONE', 'ALL']).nullable(),
}),
},
},
},
},
}),
switchRepeat: createRoute({
method: 'post',
path: `/api/${API_VERSION}/switch-repeat`,
summary: 'switch repeat',
description: 'Switch the repeat mode',
request: {
headers: AuthHeadersSchema,
body: {
description: 'number of times to click the repeat button',
content: {
'application/json': {
schema: SwitchRepeatSchema,
},
},
},
},
responses: {
204: {
description: 'Success',
},
},
}),
setVolume: createRoute({
method: 'post',
path: `/api/${API_VERSION}/volume`,
summary: 'set volume',
description: 'Set the volume of the player',
request: {
headers: AuthHeadersSchema,
body: {
description: 'volume to set',
content: {
'application/json': {
schema: SetVolumeSchema,
},
},
},
},
responses: {
204: {
description: 'Success',
},
},
}),
setFullscreen: createRoute({
method: 'post',
path: `/api/${API_VERSION}/fullscreen`,
summary: 'set fullscreen',
description: 'Set the fullscreen state of the player',
request: {
headers: AuthHeadersSchema,
body: {
description: 'fullscreen state',
content: {
'application/json': {
schema: SetFullscreenSchema,
},
},
},
},
responses: {
204: {
description: 'Success',
},
},
}),
toggleMute: createRoute({
method: 'post',
path: `/api/${API_VERSION}/toggle-mute`,
summary: 'toggle mute',
description: 'Toggle the mute state of the player',
responses: {
204: {
description: 'Success',
},
},
}),
getFullscreenState: createRoute({
method: 'get',
path: `/api/${API_VERSION}/fullscreen`,
summary: 'get fullscreen state',
description: 'Get the current fullscreen state',
responses: {
200: {
description: 'Success',
content: {
'application/json': {
schema: z.object({
state: z.boolean(),
}),
},
},
},
},
}),
queueInfo: createRoute({
method: 'get',
path: `/api/${API_VERSION}/queue-info`,
summary: 'get current queue info',
description: 'Get the current queue info',
responses: {
200: {
description: 'Success',
content: {
'application/json': {
schema: z.object({}),
},
},
},
204: {
description: 'No queue info',
},
},
}),
songInfo: createRoute({
method: 'get',
path: `/api/${API_VERSION}/song-info`,
summary: 'get current song info',
description: 'Get the current song info',
responses: {
200: {
description: 'Success',
content: {
'application/json': {
schema: SongInfoSchema,
},
},
},
204: {
description: 'No song info',
},
},
}),
};
export const register = (
app: HonoApp,
{ window }: BackendContext<APIServerConfig>,
songInfoGetter: () => SongInfo | undefined,
repeatModeGetter: () => RepeatMode | undefined,
) => {
const controller = getSongControls(window);
app.openapi(routes.previous, (ctx) => {
controller.previous();
ctx.status(204);
return ctx.body(null);
});
app.openapi(routes.next, (ctx) => {
controller.next();
ctx.status(204);
return ctx.body(null);
});
app.openapi(routes.play, (ctx) => {
controller.play();
ctx.status(204);
return ctx.body(null);
});
app.openapi(routes.pause, (ctx) => {
controller.pause();
ctx.status(204);
return ctx.body(null);
});
app.openapi(routes.togglePlay, (ctx) => {
controller.playPause();
ctx.status(204);
return ctx.body(null);
});
app.openapi(routes.like, (ctx) => {
controller.like();
ctx.status(204);
return ctx.body(null);
});
app.openapi(routes.dislike, (ctx) => {
controller.dislike();
ctx.status(204);
return ctx.body(null);
});
app.openapi(routes.seekTo, (ctx) => {
const { seconds } = ctx.req.valid('json');
controller.seekTo(seconds);
ctx.status(204);
return ctx.body(null);
});
app.openapi(routes.goBack, (ctx) => {
const { seconds } = ctx.req.valid('json');
controller.goBack(seconds);
ctx.status(204);
return ctx.body(null);
});
app.openapi(routes.goForward, (ctx) => {
const { seconds } = ctx.req.valid('json');
controller.goForward(seconds);
ctx.status(204);
return ctx.body(null);
});
app.openapi(routes.shuffle, (ctx) => {
controller.shuffle();
ctx.status(204);
return ctx.body(null);
});
app.openapi(routes.repeatMode, (ctx) => {
ctx.status(200);
return ctx.json({ mode: repeatModeGetter() ?? null });
});
app.openapi(routes.switchRepeat, (ctx) => {
const { iteration } = ctx.req.valid('json');
controller.switchRepeat(iteration);
ctx.status(204);
return ctx.body(null);
});
app.openapi(routes.setVolume, (ctx) => {
const { volume } = ctx.req.valid('json');
controller.setVolume(volume);
ctx.status(204);
return ctx.body(null);
});
app.openapi(routes.setFullscreen, (ctx) => {
const { state } = ctx.req.valid('json');
controller.setFullscreen(state);
ctx.status(204);
return ctx.body(null);
});
app.openapi(routes.toggleMute, (ctx) => {
controller.muteUnmute();
ctx.status(204);
return ctx.body(null);
});
app.openapi(routes.getFullscreenState, async (ctx) => {
const stateResponsePromise = new Promise<boolean>((resolve) => {
ipcMain.once(
'ytmd:set-fullscreen',
(_, isFullscreen: boolean | undefined) => {
return resolve(!!isFullscreen);
},
);
controller.requestFullscreenInformation();
});
const fullscreen = await stateResponsePromise;
ctx.status(200);
return ctx.json({ state: fullscreen });
});
app.openapi(routes.queueInfo, async (ctx) => {
const queueResponsePromise = new Promise<QueueResponse>((resolve) => {
ipcMain.once('ytmd:get-queue-response', (_, queue: QueueResponse) => {
return resolve(queue);
});
controller.requestQueueInformation();
});
const info = await queueResponsePromise;
if (!info) {
ctx.status(204);
return ctx.body(null);
}
ctx.status(200);
return ctx.json(info);
});
app.openapi(routes.songInfo, (ctx) => {
const info = songInfoGetter();
if (!info) {
ctx.status(204);
return ctx.body(null);
}
const body = { ...info };
delete body.image;
ctx.status(200);
return ctx.json(body satisfies ResponseSongInfo);
});
};

View File

@ -0,0 +1,2 @@
export { register as registerControl } from './control';
export { register as registerAuth } from './auth';

View File

@ -0,0 +1,13 @@
import { z } from '@hono/zod-openapi';
export const AuthHeadersSchema = z.object({
authorization: z.string().openapi({
example: 'Bearer token',
}),
});
export type JWTPayload = z.infer<typeof JWTPayloadSchema>;
export const JWTPayloadSchema = z.object({
id: z.string(),
iat: z.number(),
});

Some files were not shown because too many files have changed in this diff Show More