Compare commits

...

72 Commits

Author SHA1 Message Date
1e9f32e248 Merge branch 'master' into synced-lyrics/netease 2025-12-04 09:26:15 +02:00
6c4ae0dbfa chore(i18n): Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (457 of 457 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/zh_Hans/
2025-12-03 01:00:18 +01:00
f7aaa3377a chore(i18n): Translated using Weblate (Slovak)
Currently translated at 88.3% (403 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/sk/
2025-12-01 22:00:36 +01:00
ab1a0478cf chore(i18n): Translated using Weblate (Ukrainian)
Currently translated at 100.0% (456 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/uk/
2025-12-01 22:00:35 +01:00
127f56905c fix(album-color-theme): improve theming consistency across UI elements (#4109)
Co-authored-by: 최민우 <chaeminu0711@gmail.com>
2025-12-01 16:25:14 +09:00
8d448c667f chore(i18n): Translated using Weblate (Urdu)
Currently translated at 25.0% (114 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ur/
2025-11-29 08:01:53 +01:00
e00f33eb2d chore(i18n): Translated using Weblate (Slovak)
Currently translated at 84.4% (385 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/sk/
2025-11-29 08:01:52 +01:00
8100804ced chore(i18n): Translated using Weblate (Hebrew)
Currently translated at 46.9% (214 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/he/
2025-11-28 06:02:01 +01:00
dbbdb63aa8 feat(synced-lyrics): NetEase provider 2025-11-26 23:23:00 +02:00
4fba3ffd92 fix(downloader): update youtubei.js and remove player_id (#4069) 2025-11-26 21:20:58 +02:00
bef8252314 chore(i18n): Translated using Weblate (Slovak)
Currently translated at 84.4% (385 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/sk/
2025-11-22 23:51:18 +01:00
a96cc5aa8a chore(i18n): Translated using Weblate (German)
Currently translated at 100.0% (456 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/de/
2025-11-22 23:51:16 +01:00
b7e43e3125 chore(i18n): Translated using Weblate (Galician)
Currently translated at 23.2% (106 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/gl/
2025-11-21 21:51:18 +00:00
2d059eb353 chore(i18n): Translated using Weblate (Hindi)
Currently translated at 86.6% (395 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/hi/
2025-11-20 13:51:30 +01:00
bce0f8ad17 chore(i18n): Translated using Weblate (Hindi)
Currently translated at 86.6% (395 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/hi/
2025-11-20 13:51:22 +01:00
e04a084be9 chore(i18n): Translated using Weblate (Estonian)
Currently translated at 33.3% (152 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/et/
2025-11-20 13:51:21 +01:00
J
e94aa5c513 chore(i18n): Translated using Weblate (Estonian)
Currently translated at 33.3% (152 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/et/
2025-11-20 13:51:20 +01:00
fa2862ca9a chore(i18n): Translated using Weblate (Azerbaijani)
Currently translated at 16.4% (75 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/az/
2025-11-17 18:51:19 +01:00
e764c69f2b chore(i18n): Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (456 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/pt_BR/
2025-11-15 14:51:17 +01:00
b5052d85ad chore(i18n): Translated using Weblate (Slovak)
Currently translated at 81.1% (370 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/sk/
2025-11-08 09:51:16 +00:00
e4fa850871 chore(i18n): Translated using Weblate (Slovak)
Currently translated at 77.6% (354 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/sk/
2025-11-06 14:51:55 +01:00
db4be4ae25 chore(i18n): Translated using Weblate (Slovak)
Currently translated at 77.6% (354 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/sk/
2025-11-06 14:51:54 +01:00
55680531c5 chore(i18n): Translated using Weblate (Slovak)
Currently translated at 77.6% (354 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/sk/
2025-11-06 14:51:19 +01:00
ae4557d32c chore(i18n): Translated using Weblate (Czech)
Currently translated at 100.0% (456 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/cs/
2025-11-06 14:51:14 +01:00
f5f65e73ca chore(i18n): Translated using Weblate (Slovak)
Currently translated at 25.2% (115 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/sk/
2025-11-05 08:51:18 +01:00
e9f4958252 chore(i18n): Translated using Weblate (Slovak)
Currently translated at 25.0% (114 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/sk/
2025-11-04 04:51:18 +01:00
00626bc37d chore(i18n): Translated using Weblate (Urdu)
Currently translated at 24.3% (111 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ur/
2025-11-04 04:51:13 +01:00
8e36d77245 chore(i18n): Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (456 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/zh_Hant/
2025-11-02 20:51:14 +00:00
8f6d16ae89 chore(i18n): Translated using Weblate (Korean)
Currently translated at 100.0% (456 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ko/
2025-11-02 20:51:12 +00:00
2d1d0257ef chore(i18n): Added translation using Weblate (Belarusian) 2025-10-31 19:41:59 +01:00
7b2543847a chore(i18n): Translated using Weblate (Malay)
Currently translated at 70.3% (321 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ms/
2025-10-31 19:41:57 +01:00
00af45ddee chore(i18n): Translated using Weblate (Malay)
Currently translated at 70.3% (321 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ms/
2025-10-31 19:41:57 +01:00
786961c33b chore(i18n): Translated using Weblate (Estonian)
Currently translated at 25.2% (115 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/et/
2025-10-29 13:50:16 +01:00
8dc69cd9ac chore(i18n): Translated using Weblate (Ukrainian)
Currently translated at 96.0% (438 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/uk/
2025-10-29 13:50:15 +01:00
d8e0bd903e chore(i18n): Translated using Weblate (Azerbaijani)
Currently translated at 16.0% (73 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/az/
2025-10-27 16:02:51 +00:00
4f31d47097 chore(i18n): Translated using Weblate (Georgian)
Currently translated at 20.1% (92 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ka/
2025-10-23 06:02:44 +00:00
cdb1ccec76 chore(i18n): Translated using Weblate (Persian)
Currently translated at 100.0% (456 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/fa/
2025-10-21 21:04:16 +00:00
4998fa1e28 Merge pull request #4019 from BigicecreamTaken/update-electron-version 2025-10-19 00:49:43 +03:00
f912598416 chore(deps): Update Electron to version 38.2.0 2025-10-18 11:33:47 +03:00
1f063c41d4 chore(i18n): Translated using Weblate (Croatian)
Currently translated at 100.0% (456 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/hr/
2025-10-16 17:07:27 +00:00
7b4a4b81ae chore(i18n): Translated using Weblate (Hungarian)
Currently translated at 95.8% (437 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/hu/
2025-10-16 17:07:26 +00:00
b7750ad50e chore(i18n): Translated using Weblate (Arabic)
Currently translated at 100.0% (456 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ar/
2025-10-15 15:02:48 +02:00
886f2ae3b2 chore(i18n): Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/
2025-10-14 09:08:02 +02:00
4c2d3253e7 chore(i18n): Translated using Weblate (Tamil)
Currently translated at 99.7% (455 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ta/
2025-10-14 09:07:55 +02:00
c03d3af289 chore(i18n): Translated using Weblate (Russian)
Currently translated at 99.7% (455 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ru/
2025-10-14 09:07:53 +02:00
b006466eab chore(i18n): Translated using Weblate (Polish)
Currently translated at 100.0% (456 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/pl/
2025-10-14 09:07:53 +02:00
39a859703d chore(i18n): Translated using Weblate (Polish)
Currently translated at 100.0% (456 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/pl/
2025-10-14 09:07:52 +02:00
d1e9f5272f chore(i18n): Translated using Weblate (Korean)
Currently translated at 99.3% (453 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ko/
2025-10-14 09:07:51 +02:00
2c16e68799 chore(i18n): Translated using Weblate (Japanese)
Currently translated at 100.0% (456 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ja/
2025-10-14 09:07:50 +02:00
d7381f1847 chore(i18n): Translated using Weblate (Japanese)
Currently translated at 100.0% (456 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ja/
2025-10-14 09:07:50 +02:00
97cee6ca54 chore(i18n): Translated using Weblate (German)
Currently translated at 99.7% (455 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/de/
2025-10-14 09:07:49 +02:00
b2c339a879 Update lv.json 2025-10-14 00:06:13 +03:00
7192ad74bc fix conflict 2 2025-10-13 15:07:49 +09:00
022125755b fix conflict 2025-10-13 15:02:44 +09:00
b40851e92a chore(i18n): Translated using Weblate (Latvian)
Currently translated at 66.8% (305 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/lv/
2025-10-13 05:07:26 +00:00
1590f2e309 chore(i18n): Translated using Weblate (Malay)
Currently translated at 68.8% (314 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ms/
2025-10-13 05:07:24 +00:00
b8e0d53ef3 chore: improve readability 2 2025-10-12 14:34:36 +09:00
ffa61687bf chore: improve readability 2025-10-12 14:28:29 +09:00
4f716d8e0b feat(workflows): skip pr workflows on draft prs 2025-10-12 03:51:17 +03:00
9932316be1 remove typing for mdui icons 2025-10-12 03:17:42 +03:00
86a4a1b41e proper support for tree-shakeable Lit components 2025-10-12 03:16:35 +03:00
c6c71bea9f chore(i18n): Translated using Weblate (Malayalam)
Currently translated at 11.6% (53 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ml/
2025-10-11 23:07:34 +02:00
cbc6449621 fix preload 2025-10-11 18:18:36 +03:00
9b8daac28c Add Material UI 3 component library (#3606)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: JellyBrick <shlee1503@naver.com>
2025-10-11 00:11:38 +03:00
cbc0077690 chore(i18n): Translated using Weblate (Malay)
Currently translated at 62.7% (286 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ms/
2025-10-10 10:07:41 +00:00
c43d636549 chore(i18n): Translated using Weblate (Lithuanian)
Currently translated at 79.1% (361 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/lt/
2025-10-10 10:07:40 +00:00
af1513a0b5 chore(i18n): Translated using Weblate (Ukrainian)
Currently translated at 94.9% (433 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/uk/
2025-10-10 10:07:39 +00:00
3a7d3ff73d Merge pull request #3973 from pear-devs/downloader-fix 2025-10-10 12:41:34 +03:00
f22b887a3f Merge pull request #3883 from dima-dencep/master 2025-10-10 12:37:31 +03:00
5d0116ff2e remove asset 2025-10-10 16:53:51 +09:00
98a8244f5f chore: Update README for package names and links 2025-10-10 16:50:22 +09:00
127760d509 Update plugins.ts 2025-09-13 19:26:03 +07:00
167 changed files with 5830 additions and 3958 deletions

View File

@ -1,5 +1,5 @@
name: Bug Report name: Bug Report
description: Report a YouTube Music bug description: Report a Pear Desktop bug
title: "[Bug]: " title: "[Bug]: "
labels: "bug :beetle:" labels: "bug :beetle:"
body: body:
@ -8,17 +8,17 @@ body:
label: Preflight Checklist label: Preflight Checklist
description: Please ensure you've completed all of the following. description: Please ensure you've completed all of the following.
options: options:
- label: I use the latest version of YouTube Music (Application). - label: I use the latest version of Pear Desktop (Application).
required: true required: true
- label: I have searched the [issue tracker](https://github.com/th-ch/youtube-music/issues) for a bug report that matches the one I want to file, without success. - label: I have searched the [issue tracker](https://github.com/pear-devs/pear-desktop/issues) for a bug report that matches the one I want to file, without success.
required: true required: true
- label: I understand that **th-ch/youtube-music has NO affiliation with Google or YouTube** - label: I understand that **pear-devs/pear-desktop has NO affiliation with Google or YouTube**
required: true required: true
- type: input - type: input
attributes: attributes:
label: YouTube Music (Application) Version label: Pear Desktop (Application) Version
description: | description: |
What version of the YouTube Music Application are you using? What version of the Pear Desktop Application are you using?
Note: Please check if this issue is reproducible with the latest stable release. Note: Please check if this issue is reproducible with the latest stable release.
placeholder: 2.0.0 placeholder: 2.0.0
@ -28,7 +28,7 @@ body:
attributes: attributes:
label: Checklists label: Checklists
options: options:
- label: I use the portable version of the YouTube Music Application. - label: I use the portable version of the Pear Desktop Application.
- label: I can reproduce this issue in the [official version of (WEB) YTM](https://music.youtube.com). - label: I can reproduce this issue in the [official version of (WEB) YTM](https://music.youtube.com).
- type: dropdown - type: dropdown
attributes: attributes:
@ -60,8 +60,8 @@ body:
required: true required: true
- type: input - type: input
attributes: attributes:
label: Last Known Working YouTube Music (Application) version label: Last Known Working Pear Desktop (Application) version
description: (If applicable) What is the last version of YouTube Music this worked in? description: (If applicable) What is the last version of Pear Desktop this worked in?
placeholder: 1.20.0 placeholder: 1.20.0
- type: textarea - type: textarea
attributes: attributes:

View File

@ -1,5 +1,5 @@
name: Feature Request name: Feature Request
description: Suggest an idea for YouTube Music description: Suggest an idea for Pear Desktop
title: "[Feature Request]: " title: "[Feature Request]: "
labels: "enhancement :sparkles:" labels: "enhancement :sparkles:"
body: body:
@ -8,9 +8,9 @@ body:
label: Preflight Checklist label: Preflight Checklist
description: Please ensure you've completed all of the following. description: Please ensure you've completed all of the following.
options: options:
- label: I use the latest version of YouTube Music (Application). - label: I use the latest version of Pear Desktop (Application).
required: true required: true
- label: I have searched the [issue tracker](https://github.com/th-ch/youtube-music/issues) for a feature request that matches the one I want to file, without success. - label: I have searched the [issue tracker](https://github.com/pear-devs/pear-desktop/issues) for a feature request that matches the one I want to file, without success.
required: true required: true
- type: textarea - type: textarea
attributes: attributes:

View File

@ -1,4 +1,4 @@
name: Build YouTube Music name: Build Pear Desktop
on: on:
push: push:
@ -10,7 +10,8 @@ env:
jobs: jobs:
build: build:
name: Build YouTube Music if: github.event.pull_request.draft == false
name: Build Pear Desktop
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
strategy: strategy:
fail-fast: true fail-fast: true
@ -44,20 +45,20 @@ jobs:
# Only vite build without release if it is a fork, or it is a pull-request # Only vite build without release if it is a fork, or it is a pull-request
- name: Vite Build - name: Vite Build
if: github.repository == 'th-ch/youtube-music' && github.event_name == 'pull_request' if: github.repository == 'pear-devs/pear-desktop' && github.event_name == 'pull_request'
run: | run: |
pnpm build pnpm build
# Build and release if it's the main repository and is not pull-request # Build and release if it's the main repository and is not pull-request
- name: Build and release on Mac - name: Build and release on Mac
if: startsWith(matrix.os, 'macOS') && (github.repository == 'th-ch/youtube-music' && github.event_name != 'pull_request') if: startsWith(matrix.os, 'macOS') && (github.repository == 'pear-devs/pear-desktop' && github.event_name != 'pull_request')
env: env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: | run: |
pnpm release:mac pnpm release:mac
- name: Build and release on Linux - name: Build and release on Linux
if: startsWith(matrix.os, 'ubuntu') && (github.repository == 'th-ch/youtube-music' && github.event_name != 'pull_request') if: startsWith(matrix.os, 'ubuntu') && (github.repository == 'pear-devs/pear-desktop' && github.event_name != 'pull_request')
env: env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: | run: |
@ -71,7 +72,7 @@ jobs:
pnpm release:linux pnpm release:linux
- name: Build and release on Windows - name: Build and release on Windows
if: startsWith(matrix.os, 'windows') && (github.repository == 'th-ch/youtube-music' && github.event_name != 'pull_request') if: startsWith(matrix.os, 'windows') && (github.repository == 'pear-devs/pear-desktop' && github.event_name != 'pull_request')
env: env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: | run: |
@ -87,8 +88,8 @@ jobs:
release: release:
runs-on: ubuntu-latest runs-on: ubuntu-latest
name: Release YouTube Music name: Release Pear Desktop
if: github.repository == 'th-ch/youtube-music' && github.ref == 'refs/heads/master' if: github.repository == 'pear-devs/pear-desktop' && github.ref == 'refs/heads/master'
needs: build needs: build
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v5
@ -149,11 +150,11 @@ jobs:
name: ${{ env.VERSION_TAG }} name: ${{ env.VERSION_TAG }}
replacebody: true replacebody: true
body: | body: |
See [changelog](https://github.com/th-ch/youtube-music/blob/master/changelog.md#${{ env.CHANGELOG_ANCHOR }}) for the list of updates and the full diff. See [changelog](https://github.com/pear-devs/pear-desktop/blob/master/changelog.md#${{ env.CHANGELOG_ANCHOR }}) for the list of updates and the full diff.
Thanks to all contributors! 🏅 Thanks to all contributors! 🏅
(Note for Windows: `YouTube-Music-Web-Setup-${{ env.VERSION_TAG }}.exe` is an installer, and `YouTube-Music-${{ env.VERSION_TAG }}.exe` is a portable version) (Note for Windows: `Pear-Desktop-Web-Setup-${{ env.VERSION_TAG }}.exe` is an installer, and `Pear-Desktop-${{ env.VERSION_TAG }}.exe` is a portable version)
- name: Update changelog - name: Update changelog
if: ${{ env.VERSION_HASH == '' }} if: ${{ env.VERSION_HASH == '' }}

View File

@ -12,6 +12,7 @@ permissions:
jobs: jobs:
dependency-review: dependency-review:
if: github.event.pull_request.draft == false
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: "Checkout Repository" - name: "Checkout Repository"

View File

@ -9,6 +9,7 @@ env:
jobs: jobs:
check-permissions: check-permissions:
if: github.event.pull_request.draft == false
name: Check if user has write access name: Check if user has write access
runs-on: ubuntu-latest runs-on: ubuntu-latest
outputs: outputs:

View File

@ -7,6 +7,7 @@ env:
jobs: jobs:
eslint: eslint:
if: github.event.pull_request.draft == false
name: runner / eslint name: runner / eslint
runs-on: ubuntu-latest runs-on: ubuntu-latest
permissions: permissions:

View File

@ -22,9 +22,9 @@ jobs:
- name: Submit package to Windows Package Manager Community Repository - name: Submit package to Windows Package Manager Community Repository
uses: vedantmgoyal2009/winget-releaser@main uses: vedantmgoyal2009/winget-releaser@main
with: with:
identifier: th-ch.YouTubeMusic identifier: pear-devs.PearDesktop
installers-regex: '^YouTube-Music-Web-Setup-[\d\.]+\.exe$' installers-regex: '^Pear-Desktop-Web-Setup-[\d\.]+\.exe$'
version: ${{ env.WINGET_TAG_NAME }} version: ${{ env.WINGET_TAG_NAME }}
release-tag: ${{ inputs.tag_name || github.event.release.tag_name }} release-tag: ${{ inputs.tag_name || github.event.release.tag_name }}
token: ${{ secrets.WINGET_ACC_TOKEN }} token: ${{ secrets.WINGET_ACC_TOKEN }}
fork-user: youtube-music-winget fork-user: pear-desktop-winget

View File

@ -2,12 +2,12 @@
# :pear: Pear Desktop # :pear: Pear Desktop
[![GitHub release](https://img.shields.io/github/release/pear-devs/pear-desktop.svg?style=for-the-badge&logo=youtube-music)](https://github.com/pear-devs/pear-desktop/releases/) [![GitHub release](https://img.shields.io/github/release/pear-devs/pear-desktop.svg?style=for-the-badge)](https://github.com/pear-devs/pear-desktop/releases/)
[![GitHub license](https://img.shields.io/github/license/pear-devs/pear-desktop.svg?style=for-the-badge)](https://github.com/pear-devs/pear-desktop/blob/master/license) [![GitHub license](https://img.shields.io/github/license/pear-devs/pear-desktop.svg?style=for-the-badge)](https://github.com/pear-devs/pear-desktop/blob/master/license)
[![eslint code style](https://img.shields.io/badge/code_style-eslint-5ed9c7.svg?style=for-the-badge)](https://github.com/pear-devs/pear-desktop/blob/master/eslint.config.mjs) [![eslint code style](https://img.shields.io/badge/code_style-eslint-5ed9c7.svg?style=for-the-badge)](https://github.com/pear-devs/pear-desktop/blob/master/eslint.config.mjs)
[![Build status](https://img.shields.io/github/actions/workflow/status/pear-devs/pear-desktop/build.yml?branch=master&style=for-the-badge&logo=youtube-music)](https://GitHub.com/pear-devs/pear-desktop/releases/) [![Build status](https://img.shields.io/github/actions/workflow/status/pear-devs/pear-desktop/build.yml?branch=master&style=for-the-badge)](https://GitHub.com/pear-devs/pear-desktop/releases/)
[![GitHub All Releases](https://img.shields.io/github/downloads/pear-devs/pear-desktop/total?style=for-the-badge&logo=youtube-music)](https://GitHub.com/pear-devs/pear-desktop/releases/) [![GitHub All Releases](https://img.shields.io/github/downloads/pear-devs/pear-desktop/total?style=for-the-badge)](https://GitHub.com/pear-devs/pear-desktop/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) <!--[![AUR](https://img.shields.io/aur/version/pear-desktop-bin?color=blueviolet&style=for-the-badge)](https://aur.archlinux.org/packages/pear-desktop-bin)-->
[![Known Vulnerabilities](https://snyk.io/test/github/pear-devs/pear-desktop/badge.svg)](https://snyk.io/test/github/pear-devs/pear-desktop) [![Known Vulnerabilities](https://snyk.io/test/github/pear-devs/pear-desktop/badge.svg)](https://snyk.io/test/github/pear-devs/pear-desktop)
</div> </div>
@ -53,11 +53,11 @@
## Translation ## Translation
You can help with translation on [Hosted Weblate](https://hosted.weblate.org/projects/youtube-music/). You can help with translation on [Hosted Weblate](https://bit.ly/48n5YF7).
<a href="https://hosted.weblate.org/engage/youtube-music/"> <a href="https://bit.ly/48n5YF7/">
<img src="https://hosted.weblate.org/widget/youtube-music/i18n/multi-auto.svg" alt="translation status" /> <img src="https://bit.ly/4q83L6S" alt="translation status" />
<img src="https://hosted.weblate.org/widget/youtube-music/i18n/287x66-black.png" alt="translation status 2" /> <img src="https://bit.ly/4h3zBxo" alt="translation status 2" />
</a> </a>
## Download ## Download
@ -67,12 +67,12 @@ latest version.
### Arch Linux ### Arch Linux
Install the [`youtube-music-bin`](https://aur.archlinux.org/packages/youtube-music-bin) package from the AUR. For AUR installation instructions, take a look at Install the [`pear-desktop`](https://aur.archlinux.org/packages/pear-desktop) package from the AUR. For AUR installation instructions, take a look at
this [wiki page](https://wiki.archlinux.org/index.php/Arch_User_Repository#Installing_packages). 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)): You can install the app using Homebrew (see the [cask definition](https://github.com/pear-devs/pear-desktop-homebrew)):
```bash ```bash
brew install pear-devs/pear-desktop brew install pear-devs/pear-desktop
@ -86,23 +86,23 @@ If you install the app manually and get an error "is damaged and cant be open
### Windows ### Windows
You can use the [Scoop package manager](https://scoop.sh) to install the `youtube-music` package from You can use the [Scoop package manager](https://scoop.sh) to install the `pear-desktop` package from
the [`extras` bucket](https://github.com/ScoopInstaller/Extras). the [`extras` bucket](https://github.com/ScoopInstaller/Extras).
```bash ```bash
scoop bucket add extras scoop bucket add extras
scoop install extras/youtube-music scoop install extras/pear-desktop
``` ```
Alternately you can use [Winget](https://learn.microsoft.com/en-us/windows/package-manager/winget/), Windows 11s Alternately you can use [Winget](https://learn.microsoft.com/en-us/windows/package-manager/winget/), Windows 11s
official CLI package manager to install the `th-ch.YouTubeMusic` package. official CLI package manager to install the `pear-devs.pear-desktop` package.
*Note: Microsoft Defender SmartScreen might block the installation since it is from an "unknown publisher". This is also *Note: Microsoft Defender SmartScreen might block the installation since it is from an "unknown publisher". This is also
true for the manual installation when trying to run the executable(.exe) after a manual download here on github (same true for the manual installation when trying to run the executable(.exe) after a manual download here on github (same
file).* file).*
```bash ```bash
winget install th-ch.YouTubeMusic winget install pear-devs.pear-desktop
``` ```
#### How to install without a network connection? (in Windows) #### How to install without a network connection? (in Windows)
@ -190,7 +190,7 @@ export default createPlugin({
console.log(await context.ipc.invoke('some-event')); console.log(await context.ipc.invoke('some-event'));
}, },
// Only renderer available hook // Only renderer available hook
onPlayerApiReady(api: YoutubePlayer, context: RendererContext) { onPlayerApiReady(api, context) {
// set plugin config easily // set plugin config easily
context.setConfig({ myConfig: api.getVolume() }); context.setConfig({ myConfig: api.getVolume() });
}, },

View File

@ -2,7 +2,7 @@
<html> <html>
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<title>Cannot load YouTube Music</title> <title>Cannot load Pear Desktop</title>
<style> <style>
body { body {
background: #000; background: #000;
@ -43,7 +43,7 @@
<body> <body>
<div class="container"> <div class="container">
<p>Cannot load YouTube Music… Internet disconnected?</p> <p>Cannot load Pear Desktop… Internet disconnected?</p>
<a class="button" href="#" onclick="reload()">Retry</a> <a class="button" href="#" onclick="reload()">Retry</a>
</div> </div>
</body> </body>

607
assets/mdui.css Normal file
View File

@ -0,0 +1,607 @@
:root {
--mdui-breakpoint-xs: 0px;
--mdui-breakpoint-sm: 600px;
--mdui-breakpoint-md: 840px;
--mdui-breakpoint-lg: 1080px;
--mdui-breakpoint-xl: 1440px;
--mdui-breakpoint-xxl: 1920px;
}
:root {
--mdui-color-primary-light: 103, 80, 164;
--mdui-color-primary-container-light: 234, 221, 255;
--mdui-color-on-primary-light: 255, 255, 255;
--mdui-color-on-primary-container-light: 33, 0, 94;
--mdui-color-inverse-primary-light: 208, 188, 255;
--mdui-color-secondary-light: 98, 91, 113;
--mdui-color-secondary-container-light: 232, 222, 248;
--mdui-color-on-secondary-light: 255, 255, 255;
--mdui-color-on-secondary-container-light: 30, 25, 43;
--mdui-color-tertiary-light: 125, 82, 96;
--mdui-color-tertiary-container-light: 255, 216, 228;
--mdui-color-on-tertiary-light: 255, 255, 255;
--mdui-color-on-tertiary-container-light: 55, 11, 30;
--mdui-color-surface-light: 254, 247, 255;
--mdui-color-surface-dim-light: 222, 216, 225;
--mdui-color-surface-bright-light: 254, 247, 255;
--mdui-color-surface-container-lowest-light: 255, 255, 255;
--mdui-color-surface-container-low-light: 247, 242, 250;
--mdui-color-surface-container-light: 243, 237, 247;
--mdui-color-surface-container-high-light: 236, 230, 240;
--mdui-color-surface-container-highest-light: 230, 224, 233;
--mdui-color-surface-variant-light: 231, 224, 236;
--mdui-color-on-surface-light: 28, 27, 31;
--mdui-color-on-surface-variant-light: 73, 69, 78;
--mdui-color-inverse-surface-light: 49, 48, 51;
--mdui-color-inverse-on-surface-light: 244, 239, 244;
--mdui-color-background-light: 254, 247, 255;
--mdui-color-on-background-light: 28, 27, 31;
--mdui-color-error-light: 179, 38, 30;
--mdui-color-error-container-light: 249, 222, 220;
--mdui-color-on-error-light: 255, 255, 255;
--mdui-color-on-error-container-light: 65, 14, 11;
--mdui-color-outline-light: 121, 116, 126;
--mdui-color-outline-variant-light: 196, 199, 197;
--mdui-color-shadow-light: 0, 0, 0;
--mdui-color-surface-tint-color-light: 103, 80, 164;
--mdui-color-scrim-light: 0, 0, 0;
--mdui-color-primary-dark: 208, 188, 255;
--mdui-color-primary-container-dark: 79, 55, 139;
--mdui-color-on-primary-dark: 55, 30, 115;
--mdui-color-on-primary-container-dark: 234, 221, 255;
--mdui-color-inverse-primary-dark: 103, 80, 164;
--mdui-color-secondary-dark: 204, 194, 220;
--mdui-color-secondary-container-dark: 74, 68, 88;
--mdui-color-on-secondary-dark: 51, 45, 65;
--mdui-color-on-secondary-container-dark: 232, 222, 248;
--mdui-color-tertiary-dark: 239, 184, 200;
--mdui-color-tertiary-container-dark: 99, 59, 72;
--mdui-color-on-tertiary-dark: 73, 37, 50;
--mdui-color-on-tertiary-container-dark: 255, 216, 228;
--mdui-color-surface-dark: 20, 18, 24;
--mdui-color-surface-dim-dark: 20, 18, 24;
--mdui-color-surface-bright-dark: 59, 56, 62;
--mdui-color-surface-container-lowest-dark: 15, 13, 19;
--mdui-color-surface-container-low-dark: 29, 27, 32;
--mdui-color-surface-container-dark: 33, 31, 38;
--mdui-color-surface-container-high-dark: 43, 41, 48;
--mdui-color-surface-container-highest-dark: 54, 52, 59;
--mdui-color-surface-variant-dark: 73, 69, 79;
--mdui-color-on-surface-dark: 230, 225, 229;
--mdui-color-on-surface-variant-dark: 202, 196, 208;
--mdui-color-inverse-surface-dark: 230, 225, 229;
--mdui-color-inverse-on-surface-dark: 49, 48, 51;
--mdui-color-background-dark: 20, 18, 24;
--mdui-color-on-background-dark: 230, 225, 229;
--mdui-color-error-dark: 242, 184, 181;
--mdui-color-error-container-dark: 140, 29, 24;
--mdui-color-on-error-dark: 96, 20, 16;
--mdui-color-on-error-container-dark: 249, 222, 220;
--mdui-color-outline-dark: 147, 143, 153;
--mdui-color-outline-variant-dark: 68, 71, 70;
--mdui-color-shadow-dark: 0, 0, 0;
--mdui-color-surface-tint-color-dark: 208, 188, 255;
--mdui-color-scrim-dark: 0, 0, 0;
}
.mdui-theme-dark,
:root {
color-scheme: dark;
--mdui-color-primary: var(--mdui-color-primary-dark);
--mdui-color-primary-container: var(--mdui-color-primary-container-dark);
--mdui-color-on-primary: var(--mdui-color-on-primary-dark);
--mdui-color-on-primary-container: var(
--mdui-color-on-primary-container-dark
);
--mdui-color-inverse-primary: var(--mdui-color-inverse-primary-dark);
--mdui-color-secondary: var(--mdui-color-secondary-dark);
--mdui-color-secondary-container: var(--mdui-color-secondary-container-dark);
--mdui-color-on-secondary: var(--mdui-color-on-secondary-dark);
--mdui-color-on-secondary-container: var(
--mdui-color-on-secondary-container-dark
);
--mdui-color-tertiary: var(--mdui-color-tertiary-dark);
--mdui-color-tertiary-container: var(--mdui-color-tertiary-container-dark);
--mdui-color-on-tertiary: var(--mdui-color-on-tertiary-dark);
--mdui-color-on-tertiary-container: var(
--mdui-color-on-tertiary-container-dark
);
--mdui-color-surface: var(--mdui-color-surface-dark);
--mdui-color-surface-dim: var(--mdui-color-surface-dim-dark);
--mdui-color-surface-bright: var(--mdui-color-surface-bright-dark);
--mdui-color-surface-container-lowest: var(
--mdui-color-surface-container-lowest-dark
);
--mdui-color-surface-container-low: var(
--mdui-color-surface-container-low-dark
);
--mdui-color-surface-container: var(--mdui-color-surface-container-dark);
--mdui-color-surface-container-high: var(
--mdui-color-surface-container-high-dark
);
--mdui-color-surface-container-highest: var(
--mdui-color-surface-container-highest-dark
);
--mdui-color-surface-variant: var(--mdui-color-surface-variant-dark);
--mdui-color-on-surface: var(--mdui-color-on-surface-dark);
--mdui-color-on-surface-variant: var(--mdui-color-on-surface-variant-dark);
--mdui-color-inverse-surface: var(--mdui-color-inverse-surface-dark);
--mdui-color-inverse-on-surface: var(--mdui-color-inverse-on-surface-dark);
--mdui-color-background: var(--mdui-color-background-dark);
--mdui-color-on-background: var(--mdui-color-on-background-dark);
--mdui-color-error: var(--mdui-color-error-dark);
--mdui-color-error-container: var(--mdui-color-error-container-dark);
--mdui-color-on-error: var(--mdui-color-on-error-dark);
--mdui-color-on-error-container: var(--mdui-color-on-error-container-dark);
--mdui-color-outline: var(--mdui-color-outline-dark);
--mdui-color-outline-variant: var(--mdui-color-outline-variant-dark);
--mdui-color-shadow: var(--mdui-color-shadow-dark);
--mdui-color-surface-tint-color: var(--mdui-color-surface-tint-color-dark);
--mdui-color-scrim: var(--mdui-color-scrim-dark);
color: rgb(var(--mdui-color-on-background));
background-color: rgb(var(--mdui-color-background));
}
:root {
--mdui-elevation-level0: none;
--mdui-elevation-level1: 0 0.5px 1.5px 0 rgba(var(--mdui-color-shadow), 19%),
0 0 1px 0 rgba(var(--mdui-color-shadow), 3.9%);
--mdui-elevation-level2: 0 0.85px 3px 0 rgba(var(--mdui-color-shadow), 19%),
0 0.25px 1px 0 rgba(var(--mdui-color-shadow), 3.9%);
--mdui-elevation-level3: 0 1.25px 5px 0 rgba(var(--mdui-color-shadow), 19%),
0 0.3333px 1.5px 0 rgba(var(--mdui-color-shadow), 3.9%);
--mdui-elevation-level4: 0 1.85px 6.25px 0 rgba(var(--mdui-color-shadow), 19%),
0 0.5px 1.75px 0 rgba(var(--mdui-color-shadow), 3.9%);
--mdui-elevation-level5: 0 2.75px 9px 0 rgba(var(--mdui-color-shadow), 19%),
0 0.25px 3px 0 rgba(var(--mdui-color-shadow), 3.9%);
}
:root {
--mdui-motion-easing-linear: cubic-bezier(0, 0, 1, 1);
--mdui-motion-easing-standard: cubic-bezier(0.2, 0, 0, 1);
--mdui-motion-easing-standard-accelerate: cubic-bezier(0.3, 0, 1, 1);
--mdui-motion-easing-standard-decelerate: cubic-bezier(0, 0, 0, 1);
--mdui-motion-easing-emphasized: var(--mdui-motion-easing-standard);
--mdui-motion-easing-emphasized-accelerate: cubic-bezier(0.3, 0, 0.8, 0.15);
--mdui-motion-easing-emphasized-decelerate: cubic-bezier(0.05, 0.7, 0.1, 1);
--mdui-motion-duration-short1: 50ms;
--mdui-motion-duration-short2: 100ms;
--mdui-motion-duration-short3: 150ms;
--mdui-motion-duration-short4: 200ms;
--mdui-motion-duration-medium1: 250ms;
--mdui-motion-duration-medium2: 300ms;
--mdui-motion-duration-medium3: 350ms;
--mdui-motion-duration-medium4: 400ms;
--mdui-motion-duration-long1: 450ms;
--mdui-motion-duration-long2: 500ms;
--mdui-motion-duration-long3: 550ms;
--mdui-motion-duration-long4: 600ms;
--mdui-motion-duration-extra-long1: 700ms;
--mdui-motion-duration-extra-long2: 800ms;
--mdui-motion-duration-extra-long3: 900ms;
--mdui-motion-duration-extra-long4: 1000ms;
}
.mdui-prose {
line-height: 1.75;
word-wrap: break-word;
}
.mdui-prose :first-child {
margin-top: 0;
}
.mdui-prose :last-child {
margin-bottom: 0;
}
.mdui-prose code,
.mdui-prose kbd,
.mdui-prose pre,
.mdui-prose pre tt,
.mdui-prose samp {
font-family: Consolas, Courier, 'Courier New', monospace;
}
.mdui-prose caption {
text-align: left;
}
.mdui-prose [draggable='true'],
.mdui-prose [draggable] {
cursor: move;
}
.mdui-prose [draggable='false'] {
cursor: inherit;
}
.mdui-prose dl,
.mdui-prose form,
.mdui-prose ol,
.mdui-prose p,
.mdui-prose ul {
margin-top: 1.25em;
margin-bottom: 1.25em;
}
.mdui-prose a {
text-decoration: none;
outline: 0;
color: rgb(var(--mdui-color-primary));
}
.mdui-prose a:focus,
.mdui-prose a:hover {
border-bottom: 0.0625rem solid rgb(var(--mdui-color-primary));
}
.mdui-prose small {
font-size: 0.875em;
}
.mdui-prose strong {
font-weight: 600;
}
.mdui-prose blockquote {
margin: 1.6em 2em;
padding-left: 1em;
border-left: 0.25rem solid rgb(var(--mdui-color-surface-variant));
}
@media only screen and (max-width: 599.98px) {
.mdui-prose blockquote {
margin: 1.6em 0;
}
}
.mdui-prose blockquote footer {
font-size: 86%;
color: rgb(var(--mdui-color-on-surface-variant));
}
.mdui-prose mark {
color: inherit;
background-color: rgb(var(--mdui-color-secondary-container));
border-bottom: 0.0625rem solid rgb(var(--mdui-color-secondary));
margin: 0 0.375rem;
padding: 0.125rem;
}
.mdui-prose h1,
.mdui-prose h2,
.mdui-prose h3,
.mdui-prose h4,
.mdui-prose h5,
.mdui-prose h6 {
font-weight: 400;
}
.mdui-prose h1 small,
.mdui-prose h2 small,
.mdui-prose h3 small,
.mdui-prose h4 small,
.mdui-prose h5 small,
.mdui-prose h6 small {
font-weight: inherit;
font-size: 65%;
color: rgb(var(--mdui-color-on-surface-variant));
}
.mdui-prose h1 strong,
.mdui-prose h2 strong,
.mdui-prose h3 strong,
.mdui-prose h4 strong,
.mdui-prose h5 strong,
.mdui-prose h6 strong {
font-weight: 600;
}
.mdui-prose h1 {
font-size: 2.5em;
margin-top: 0;
margin-bottom: 1.25em;
line-height: 1.1111;
}
.mdui-prose h2 {
font-size: 1.875em;
margin-top: 2.25em;
margin-bottom: 1.125em;
line-height: 1.3333;
}
.mdui-prose h3 {
font-size: 1.5em;
margin-top: 2em;
margin-bottom: 1em;
line-height: 1.6;
}
.mdui-prose h4 {
font-size: 1.25em;
margin-top: 1.875em;
margin-bottom: 0.875em;
line-height: 1.5;
}
.mdui-prose h2 + *,
.mdui-prose h3 + *,
.mdui-prose h4 + *,
.mdui-prose hr + * {
margin-top: 0;
}
.mdui-prose code,
.mdui-prose kbd {
font-size: 0.875em;
color: rgb(var(--mdui-color-on-surface-container));
background-color: rgba(var(--mdui-color-surface-variant), 0.28);
padding: 0.125rem 0.375rem;
border-radius: var(--mdui-shape-corner-extra-small);
}
.mdui-prose kbd {
font-size: 0.9em;
}
.mdui-prose abbr[title] {
text-decoration: none;
cursor: help;
border-bottom: 0.0625rem dotted rgb(var(--mdui-color-on-surface-variant));
}
.mdui-prose ins,
.mdui-prose u {
text-decoration: none;
border-bottom: 0.0625rem solid rgb(var(--mdui-color-on-surface-variant));
}
.mdui-prose del {
text-decoration: line-through;
}
.mdui-prose hr {
margin-top: 3em;
margin-bottom: 3em;
border: none;
border-bottom: 0.0625rem solid rgb(var(--mdui-color-surface-variant));
}
.mdui-prose pre {
margin-top: 1.7143em;
margin-bottom: 1.7143em;
}
.mdui-prose pre code {
padding: 0.8571em 1.1429em;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
background-color: rgb(var(--mdui-color-surface-container));
color: rgb(var(--mdui-color-on-surface-container));
border-radius: var(--mdui-shape-corner-extra-small);
}
.mdui-prose ol,
.mdui-prose ul {
padding-left: 1.625em;
}
.mdui-prose ul {
list-style-type: disc;
}
.mdui-prose ol {
list-style-type: decimal;
}
.mdui-prose ol[type='A'] {
list-style-type: upper-alpha;
}
.mdui-prose ol[type='a'] {
list-style-type: lower-alpha;
}
.mdui-prose ol[type='I'] {
list-style-type: upper-roman;
}
.mdui-prose ol[type='i'] {
list-style-type: lower-roman;
}
.mdui-prose ol[type='1'] {
list-style-type: decimal;
}
.mdui-prose li {
margin-top: 0.5em;
margin-bottom: 0.5em;
}
.mdui-prose ol > li,
.mdui-prose ul > li {
padding-left: 0.375em;
}
.mdui-prose ol > li > p,
.mdui-prose ul > li > p {
margin-top: 0.75em;
margin-bottom: 0.75em;
}
.mdui-prose ol > li > :first-child,
.mdui-prose ul > li > :first-child {
margin-top: 1.25em;
}
.mdui-prose ol > li > :last-child,
.mdui-prose ul > li > :last-child {
margin-bottom: 1.25em;
}
.mdui-prose ol > li::marker {
font-weight: 400;
color: rgb(var(--mdui-color-on-surface-variant));
}
.mdui-prose ul > li::marker {
color: rgb(var(--mdui-color-on-surface-variant));
}
.mdui-prose ol ol,
.mdui-prose ol ul,
.mdui-prose ul ol,
.mdui-prose ul ul {
margin-top: 0.75em;
margin-bottom: 0.75em;
}
.mdui-prose fieldset,
.mdui-prose img {
border: none;
}
.mdui-prose figure,
.mdui-prose img,
.mdui-prose video {
margin-top: 2em;
margin-bottom: 2em;
max-width: 100%;
}
.mdui-prose figure > * {
margin-top: 0;
margin-bottom: 0;
}
.mdui-prose figcaption {
font-size: 0.875em;
line-height: 1.4286;
margin-top: 0.8571em;
color: rgb(var(--mdui-color-on-surface-variant));
}
.mdui-prose figcaption:empty::before {
z-index: -1;
cursor: text;
content: attr(placeholder);
color: rgb(var(--mdui-color-on-surface-variant));
}
.mdui-prose table {
margin-top: 2em;
margin-bottom: 2em;
border: 0.0625rem solid rgb(var(--mdui-color-surface-variant));
border-radius: var(--mdui-shape-corner-large);
}
.mdui-table {
width: 100%;
overflow-x: auto;
margin-top: 2em;
margin-bottom: 2em;
border: 0.0625rem solid rgb(var(--mdui-color-surface-variant));
border-radius: var(--mdui-shape-corner-large);
}
.mdui-table table {
margin-top: 0;
margin-bottom: 0;
border: none;
border-radius: 0;
}
.mdui-prose table,
.mdui-table table {
width: 100%;
text-align: left;
border-collapse: collapse;
border-spacing: 0;
}
.mdui-prose td,
.mdui-prose th,
.mdui-table td,
.mdui-table th {
border-top: 0.0625rem solid rgb(var(--mdui-color-surface-variant));
}
.mdui-prose td:not(:first-child),
.mdui-prose th:not(:first-child),
.mdui-table td:not(:first-child),
.mdui-table th:not(:first-child) {
border-left: 0.0625rem solid rgb(var(--mdui-color-surface-variant));
}
.mdui-prose td:not(:last-child),
.mdui-prose th:not(:last-child),
.mdui-table td:not(:last-child),
.mdui-table th:not(:last-child) {
border-right: 0.0625rem solid rgb(var(--mdui-color-surface-variant));
}
.mdui-prose tfoot td,
.mdui-prose tfoot th,
.mdui-prose thead td,
.mdui-prose thead th,
.mdui-table tfoot td,
.mdui-table tfoot th,
.mdui-table thead td,
.mdui-table thead th {
position: relative;
vertical-align: middle;
padding: 1.125rem 1rem;
font-weight: var(--mdui-typescale-title-medium-weight);
letter-spacing: var(--mdui-typescale-title-medium-tracking);
line-height: var(--mdui-typescale-title-medium-line-height);
color: rgb(var(--mdui-color-on-surface-variant));
box-shadow: var(--mdui-elevation-level1);
}
.mdui-prose tbody td,
.mdui-prose tbody th,
.mdui-table tbody td,
.mdui-table tbody th {
padding: 0.875rem 1rem;
}
.mdui-prose tbody th,
.mdui-table tbody th {
vertical-align: middle;
font-weight: inherit;
}
.mdui-prose tbody td,
.mdui-table tbody td {
vertical-align: baseline;
}
.mdui-prose tbody:first-child tr:first-child td,
.mdui-prose thead:first-child tr:first-child th,
.mdui-table tbody:first-child tr:first-child td,
.mdui-table thead:first-child tr:first-child th {
border-top: 0;
}
:root {
--mdui-shape-corner-none: 0;
--mdui-shape-corner-extra-small: 0.25rem;
--mdui-shape-corner-small: 0.5rem;
--mdui-shape-corner-medium: 0.75rem;
--mdui-shape-corner-large: 1rem;
--mdui-shape-corner-extra-large: 1.75rem;
--mdui-shape-corner-full: 1000rem;
}
:root {
--mdui-state-layer-hover: 0.08;
--mdui-state-layer-focus: 0.12;
--mdui-state-layer-pressed: 0.12;
--mdui-state-layer-dragged: 0.16;
}
:root {
--mdui-typescale-display-large-weight: 400;
--mdui-typescale-display-medium-weight: 400;
--mdui-typescale-display-small-weight: 400;
--mdui-typescale-display-large-line-height: 4rem;
--mdui-typescale-display-medium-line-height: 3.25rem;
--mdui-typescale-display-small-line-height: 2.75rem;
--mdui-typescale-display-large-size: 3.5625rem;
--mdui-typescale-display-medium-size: 2.8125rem;
--mdui-typescale-display-small-size: 2.25rem;
--mdui-typescale-display-large-tracking: 0rem;
--mdui-typescale-display-medium-tracking: 0rem;
--mdui-typescale-display-small-tracking: 0rem;
--mdui-typescale-headline-large-weight: 400;
--mdui-typescale-headline-medium-weight: 400;
--mdui-typescale-headline-small-weight: 400;
--mdui-typescale-headline-large-line-height: 2.5rem;
--mdui-typescale-headline-medium-line-height: 2.25rem;
--mdui-typescale-headline-small-line-height: 2rem;
--mdui-typescale-headline-large-size: 2rem;
--mdui-typescale-headline-medium-size: 1.75rem;
--mdui-typescale-headline-small-size: 1.5rem;
--mdui-typescale-headline-large-tracking: 0rem;
--mdui-typescale-headline-medium-tracking: 0rem;
--mdui-typescale-headline-small-tracking: 0rem;
--mdui-typescale-title-large-weight: 400;
--mdui-typescale-title-medium-weight: 500;
--mdui-typescale-title-small-weight: 500;
--mdui-typescale-title-large-line-height: 1.75rem;
--mdui-typescale-title-medium-line-height: 1.5rem;
--mdui-typescale-title-small-line-height: 1.25rem;
--mdui-typescale-title-large-size: 1.375rem;
--mdui-typescale-title-medium-size: 1rem;
--mdui-typescale-title-small-size: 0.875rem;
--mdui-typescale-title-large-tracking: 0rem;
--mdui-typescale-title-medium-tracking: 0.009375rem;
--mdui-typescale-title-small-tracking: 0.00625rem;
--mdui-typescale-label-large-weight: 500;
--mdui-typescale-label-medium-weight: 500;
--mdui-typescale-label-small-weight: 500;
--mdui-typescale-label-large-line-height: 1.25rem;
--mdui-typescale-label-medium-line-height: 1rem;
--mdui-typescale-label-small-line-height: 0.375rem;
--mdui-typescale-label-large-size: 0.875rem;
--mdui-typescale-label-medium-size: 0.75rem;
--mdui-typescale-label-small-size: 0.6875rem;
--mdui-typescale-label-large-tracking: 0.00625rem;
--mdui-typescale-label-medium-tracking: 0.03125rem;
--mdui-typescale-label-small-tracking: 0.03125rem;
--mdui-typescale-body-large-weight: 400;
--mdui-typescale-body-medium-weight: 400;
--mdui-typescale-body-small-weight: 400;
--mdui-typescale-body-large-line-height: 1.5rem;
--mdui-typescale-body-medium-line-height: 1.25rem;
--mdui-typescale-body-small-line-height: 1rem;
--mdui-typescale-body-large-size: 1rem;
--mdui-typescale-body-medium-size: 0.875rem;
--mdui-typescale-body-small-size: 0.75rem;
--mdui-typescale-body-large-tracking: 0.009375rem;
--mdui-typescale-body-medium-tracking: 0.015625rem;
--mdui-typescale-body-small-tracking: 0.025rem;
}
.mdui-lock-screen {
overflow: hidden !important;
}

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
appId: com.github.th-ch.youtube-music appId: com.github.th-ch.pear-desktop
productName: YouTube Music productName: Pear Desktop
files: files:
- '!*' - '!*'
- dist - dist
@ -43,7 +43,7 @@ linux:
category: AudioVideo category: AudioVideo
desktop: desktop:
entry: entry:
StartupWMClass: com.github.th_ch.youtube_music StartupWMClass: com.github.th_ch.pear_desktop
target: target:
- target: AppImage - target: AppImage
arch: arch:
@ -77,12 +77,12 @@ linux:
- armv7l - armv7l
appImage: appImage:
description: >- description: >-
YouTube Music Desktop App bundled with custom plugins (and built-in ad Pear Desktop App bundled with custom plugins (and built-in ad
blocker / downloader) blocker / downloader)
category: AudioVideo category: AudioVideo
flatpak: flatpak:
description: >- description: >-
YouTube Music Desktop App bundled with custom plugins (and built-in ad Pear Desktop App bundled with custom plugins (and built-in ad
blocker / downloader) blocker / downloader)
category: AudioVideo category: AudioVideo
runtimeVersion: '24.08' runtimeVersion: '24.08'
@ -98,7 +98,7 @@ flatpak:
- '--talk-name=org.freedesktop.Notifications' - '--talk-name=org.freedesktop.Notifications'
- '--talk-name=org.gnome.SessionManager' - '--talk-name=org.gnome.SessionManager'
- '--talk-name=org.kde.StatusNotifierWatcher' - '--talk-name=org.kde.StatusNotifierWatcher'
- '--own-name=org.mpris.MediaPlayer2.YoutubeMusic.*' - '--own-name=org.mpris.MediaPlayer2.PearDesktop.*'
deb: deb:
depends: depends:
- libgtk-3-0 - libgtk-3-0

View File

@ -159,7 +159,8 @@ export default defineConfig({
}, },
server: { server: {
cors: { cors: {
origin: 'https://music.youtube.com', origin:
'https://music.\u0079\u006f\u0075\u0074\u0075\u0062\u0065.com',
}, },
}, },
}; };

View File

@ -1,6 +1,6 @@
The MIT License (MIT) The MIT License (MIT)
Copyright (c) th-ch <th-ch@users.noreply.github.com> (https://github.com/th-ch/youtube-music) Copyright (c) th-ch <th-ch@users.noreply.github.com> (https://github.com/pear-devs/pear-desktop)
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@ -1,17 +1,17 @@
{ {
"name": "youtube-music", "name": "pear-music",
"desktopName": "com.github.th_ch.youtube_music", "desktopName": "com.github.th_ch.pear_music",
"productName": "YouTube Music", "productName": "Pear Desktop",
"version": "3.11.0", "version": "3.11.0",
"description": "YouTube Music Desktop App - including custom plugins", "description": "Pear Desktop App - including custom plugins",
"main": "./dist/main/index.js", "main": "./dist/main/index.js",
"type": "module", "type": "module",
"license": "MIT", "license": "MIT",
"repository": "th-ch/youtube-music", "repository": "pear-devs/pear-desktop",
"author": { "author": {
"name": "th-ch", "name": "th-ch",
"email": "th-ch@users.noreply.github.com", "email": "th-ch@users.noreply.github.com",
"url": "https://github.com/th-ch/youtube-music" "url": "https://github.com/pear-devs/pear-desktop"
}, },
"scripts": { "scripts": {
"test": "pnpm playwright test", "test": "pnpm playwright test",
@ -57,7 +57,8 @@
"@malept/flatpak-bundler@0.4.0": "patches/@malept__flatpak-bundler@0.4.0.patch", "@malept/flatpak-bundler@0.4.0": "patches/@malept__flatpak-bundler@0.4.0.patch",
"kuromoji@0.1.2": "patches/kuromoji@0.1.2.patch", "kuromoji@0.1.2": "patches/kuromoji@0.1.2.patch",
"file-type@16.5.4": "patches/file-type@16.5.4.patch", "file-type@16.5.4": "patches/file-type@16.5.4.patch",
"electron-is@3.0.0": "patches/electron-is@3.0.0.patch" "electron-is@3.0.0": "patches/electron-is@3.0.0.patch",
"mdui@2.1.4": "patches/mdui@2.1.4.patch"
}, },
"neverBuiltDependencies": [] "neverBuiltDependencies": []
}, },
@ -80,6 +81,7 @@
"@jellybrick/electron-better-web-request": "1.0.4", "@jellybrick/electron-better-web-request": "1.0.4",
"@jellybrick/mpris-service": "2.1.5", "@jellybrick/mpris-service": "2.1.5",
"@jimp/plugin-color": "1.6.0", "@jimp/plugin-color": "1.6.0",
"@mdui/icons": "^1.0.3",
"@skyra/jaro-winkler": "1.1.1", "@skyra/jaro-winkler": "1.1.1",
"@xhayper/discord-rpc": "1.3.0", "@xhayper/discord-rpc": "1.3.0",
"async-mutex": "0.5.0", "async-mutex": "0.5.0",
@ -88,6 +90,7 @@
"butterchurn-presets": "3.0.0-beta.4", "butterchurn-presets": "3.0.0-beta.4",
"color": "5.0.0", "color": "5.0.0",
"conf": "14.0.0", "conf": "14.0.0",
"crypto-js": "^4.2.0",
"custom-electron-prompt": "1.5.8", "custom-electron-prompt": "1.5.8",
"deepmerge-ts": "7.1.5", "deepmerge-ts": "7.1.5",
"delay": "6.0.0", "delay": "6.0.0",
@ -115,12 +118,12 @@
"kuroshiro": "1.2.0", "kuroshiro": "1.2.0",
"kuroshiro-analyzer-kuromoji": "1.1.0", "kuroshiro-analyzer-kuromoji": "1.1.0",
"lazy-var": "2.2.2", "lazy-var": "2.2.2",
"mdui": "2.1.4",
"node-html-parser": "7.0.1", "node-html-parser": "7.0.1",
"node-id3": "0.2.9", "node-id3": "0.2.9",
"peerjs": "1.5.5", "peerjs": "1.5.5",
"semver": "7.7.2", "semver": "7.7.2",
"serve": "14.2.5", "serve": "14.2.5",
"simple-youtube-age-restriction-bypass": "github:organization/Simple-YouTube-Age-Restriction-Bypass#v2.5.9",
"socks": "2.8.7", "socks": "2.8.7",
"solid-element": "1.9.1", "solid-element": "1.9.1",
"solid-floating-ui": "0.3.1", "solid-floating-ui": "0.3.1",
@ -132,7 +135,7 @@
"virtua": "0.42.3", "virtua": "0.42.3",
"vudio": "2.1.1", "vudio": "2.1.1",
"x11": "2.3.0", "x11": "2.3.0",
"youtubei.js": "15.0.1", "youtubei.js": "^16.0.1",
"zod": "4.1.5" "zod": "4.1.5"
}, },
"devDependencies": { "devDependencies": {
@ -142,6 +145,7 @@
"@playwright/test": "1.55.0", "@playwright/test": "1.55.0",
"@stylistic/eslint-plugin": "5.3.1", "@stylistic/eslint-plugin": "5.3.1",
"@total-typescript/ts-reset": "0.6.1", "@total-typescript/ts-reset": "0.6.1",
"@types/crypto-js": "^4.2.2",
"@types/electron-localshortcut": "3.1.3", "@types/electron-localshortcut": "3.1.3",
"@types/howler": "2.2.12", "@types/howler": "2.2.12",
"@types/html-to-text": "9.0.4", "@types/html-to-text": "9.0.4",
@ -152,7 +156,7 @@
"cross-env": "10.0.0", "cross-env": "10.0.0",
"del-cli": "6.0.0", "del-cli": "6.0.0",
"discord-api-types": "0.38.23", "discord-api-types": "0.38.23",
"electron": "38.0.0", "electron": "38.2.0",
"electron-builder": "26.0.12", "electron-builder": "26.0.12",
"electron-builder-squirrel-windows": "26.0.12", "electron-builder-squirrel-windows": "26.0.12",
"electron-devtools-installer": "4.0.0", "electron-devtools-installer": "4.0.0",

40
patches/mdui@2.1.4.patch Normal file
View File

@ -0,0 +1,40 @@
diff --git a/jsx.en.d.ts b/jsx.en.d.ts
index 514d455dcdb436aaf7b2ee88deaefe01943c8b4b..48dff045dead4315936afd931336198996c88217 100644
--- a/jsx.en.d.ts
+++ b/jsx.en.d.ts
@@ -1,12 +1,8 @@
-import React from 'react';
import { JQ } from '@mdui/jq';
-type HTMLElementProps = React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+type HTMLElementProps = import("solid-js").JSX.HTMLAttributes<HTMLElement>;
-declare global {
- namespace React {
- namespace JSX {
- interface IntrinsicElements {
+export interface IntrinsicElements {
/**
* Avatar Component
*
@@ -3296,7 +3292,4 @@ declare global {
*/
'order'?: number;
} & HTMLElementProps;
- }
- }
- }
}
diff --git a/package.json b/package.json
index 3fa3eeb471ce4c31d7ac1c9bcb2d6823947e91ca..c4b062020bf20b8db34ccfea500fa682a4af19a6 100644
--- a/package.json
+++ b/package.json
@@ -60,5 +60,8 @@
"tslib": "^2.8.1",
"@mdui/shared": "^1.0.8",
"@mdui/jq": "^3.0.3"
+ },
+ "peerDependencies": {
+ "solid-js": "^1.9.7"
}
}

223
pnpm-lock.yaml generated
View File

@ -25,6 +25,9 @@ patchedDependencies:
kuromoji@0.1.2: kuromoji@0.1.2:
hash: 4a948f1ea45c61779fa371feb020253ccf7a24e1f7c6b2e250b3ce53d86216d4 hash: 4a948f1ea45c61779fa371feb020253ccf7a24e1f7c6b2e250b3ce53d86216d4
path: patches/kuromoji@0.1.2.patch path: patches/kuromoji@0.1.2.patch
mdui@2.1.4:
hash: 008b925e23862ced06c38f9765eef4322eb8a93cb5e9a6b684fd717fec0ea0d9
path: patches/mdui@2.1.4.patch
vudio@2.1.1: vudio@2.1.1:
hash: 0e06c2ed11c02bdc490c209fa80070e98517c2735c641f5738b6e15d7dc1959d hash: 0e06c2ed11c02bdc490c209fa80070e98517c2735c641f5738b6e15d7dc1959d
path: patches/vudio@2.1.1.patch path: patches/vudio@2.1.1.patch
@ -41,7 +44,7 @@ importers:
version: 1.0.1(@types/node@24.3.0) version: 1.0.1(@types/node@24.3.0)
'@electron/remote': '@electron/remote':
specifier: 2.1.3 specifier: 2.1.3
version: 2.1.3(electron@38.0.0) version: 2.1.3(electron@38.2.0)
'@ffmpeg.wasm/core-mt': '@ffmpeg.wasm/core-mt':
specifier: 0.12.0 specifier: 0.12.0
version: 0.12.0 version: 0.12.0
@ -56,10 +59,10 @@ importers:
version: 2.0.5 version: 2.0.5
'@ghostery/adblocker-electron': '@ghostery/adblocker-electron':
specifier: 2.11.6 specifier: 2.11.6
version: 2.11.6(electron@38.0.0) version: 2.11.6(electron@38.2.0)
'@ghostery/adblocker-electron-preload': '@ghostery/adblocker-electron-preload':
specifier: 2.11.6 specifier: 2.11.6
version: 2.11.6(electron@38.0.0) version: 2.11.6(electron@38.2.0)
'@hono/node-server': '@hono/node-server':
specifier: 1.19.1 specifier: 1.19.1
version: 1.19.1(hono@4.9.6) version: 1.19.1(hono@4.9.6)
@ -87,6 +90,9 @@ importers:
'@jimp/plugin-color': '@jimp/plugin-color':
specifier: 1.6.0 specifier: 1.6.0
version: 1.6.0 version: 1.6.0
'@mdui/icons':
specifier: ^1.0.3
version: 1.0.3
'@skyra/jaro-winkler': '@skyra/jaro-winkler':
specifier: 1.1.1 specifier: 1.1.1
version: 1.1.1 version: 1.1.1
@ -111,9 +117,12 @@ importers:
conf: conf:
specifier: 14.0.0 specifier: 14.0.0
version: 14.0.0 version: 14.0.0
crypto-js:
specifier: ^4.2.0
version: 4.2.0
custom-electron-prompt: custom-electron-prompt:
specifier: 1.5.8 specifier: 1.5.8
version: 1.5.8(electron@38.0.0) version: 1.5.8(electron@38.2.0)
deepmerge-ts: deepmerge-ts:
specifier: 7.1.5 specifier: 7.1.5
version: 7.1.5 version: 7.1.5
@ -192,6 +201,9 @@ importers:
lazy-var: lazy-var:
specifier: 2.2.2 specifier: 2.2.2
version: 2.2.2 version: 2.2.2
mdui:
specifier: 2.1.4
version: 2.1.4(patch_hash=008b925e23862ced06c38f9765eef4322eb8a93cb5e9a6b684fd717fec0ea0d9)
node-html-parser: node-html-parser:
specifier: 7.0.1 specifier: 7.0.1
version: 7.0.1 version: 7.0.1
@ -207,9 +219,6 @@ importers:
serve: serve:
specifier: 14.2.5 specifier: 14.2.5
version: 14.2.5 version: 14.2.5
simple-youtube-age-restriction-bypass:
specifier: github:organization/Simple-YouTube-Age-Restriction-Bypass#v2.5.9
version: https://codeload.github.com/organization/Simple-YouTube-Age-Restriction-Bypass/tar.gz/4e2db89ccb2fb880c5110add9ff3f1dfb78d0ff6
socks: socks:
specifier: 2.8.7 specifier: 2.8.7
version: 2.8.7 version: 2.8.7
@ -244,8 +253,8 @@ importers:
specifier: 2.3.0 specifier: 2.3.0
version: 2.3.0 version: 2.3.0
youtubei.js: youtubei.js:
specifier: 15.0.1 specifier: ^16.0.1
version: 15.0.1 version: 16.0.1
zod: zod:
specifier: 4.1.5 specifier: 4.1.5
version: 4.1.5 version: 4.1.5
@ -265,6 +274,9 @@ importers:
'@total-typescript/ts-reset': '@total-typescript/ts-reset':
specifier: 0.6.1 specifier: 0.6.1
version: 0.6.1 version: 0.6.1
'@types/crypto-js':
specifier: ^4.2.2
version: 4.2.2
'@types/electron-localshortcut': '@types/electron-localshortcut':
specifier: 3.1.3 specifier: 3.1.3
version: 3.1.3 version: 3.1.3
@ -296,8 +308,8 @@ importers:
specifier: 0.38.23 specifier: 0.38.23
version: 0.38.23 version: 0.38.23
electron: electron:
specifier: 38.0.0 specifier: 38.2.0
version: 38.0.0 version: 38.2.0
electron-builder: electron-builder:
specifier: 26.0.12 specifier: 26.0.12
version: 26.0.12(electron-builder-squirrel-windows@26.0.12) version: 26.0.12(electron-builder-squirrel-windows@26.0.12)
@ -476,8 +488,8 @@ packages:
resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
'@bufbuild/protobuf@2.6.3': '@bufbuild/protobuf@2.10.0':
resolution: {integrity: sha512-w/gJKME9mYN7ZoUAmSMAWXk4hkVpxRKvEJCb3dV5g9wwWdxTJJ0ayOJAVcNxtdqaxDyFuC0uz4RSGVacJ030PQ==} resolution: {integrity: sha512-fdRs9PSrBF7QUntpZpq6BTw58fhgGJojgg39m9oFOJGZT+nip9b0so5cYY1oWl5pvemDLr0cPPsH46vwThEbpQ==}
'@dehoist/romanize-thai@1.0.0': '@dehoist/romanize-thai@1.0.0':
resolution: {integrity: sha512-6SqD4vyZ48otnypLXMh901CeQetoP5ptYOaIr58N6zDqjjoN0bHszMb5d/6AXJJQf8kIvbmSWBeuDrbAWLajPQ==} resolution: {integrity: sha512-6SqD4vyZ48otnypLXMh901CeQetoP5ptYOaIr58N6zDqjjoN0bHszMb5d/6AXJJQf8kIvbmSWBeuDrbAWLajPQ==}
@ -1011,6 +1023,15 @@ packages:
'@jridgewell/trace-mapping@0.3.30': '@jridgewell/trace-mapping@0.3.30':
resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==} resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==}
'@lit-labs/ssr-dom-shim@1.4.0':
resolution: {integrity: sha512-ficsEARKnmmW5njugNYKipTm4SFnbik7CXtoencDZzmzo/dQ+2Q0bgkzJuoJP20Aj0F+izzJjOqsnkd6F/o1bw==}
'@lit/localize@0.12.2':
resolution: {integrity: sha512-Qv9kvgJKDq/JVSwXOxuWvQnnOBysHA99ti9im9a4fImCmx+fto+XXcUYQbjZHqiueEEc4V20PcRDPO+1g/6seQ==}
'@lit/reactive-element@2.1.1':
resolution: {integrity: sha512-N+dm5PAYdQ8e6UlywyyrgI2t++wFGXfHx+dSJ1oBrg6FAxUj40jId++EaRm80MKX5JnlH1sBsyZ5h0bcZKemCg==}
'@malept/cross-spawn-promise@2.0.0': '@malept/cross-spawn-promise@2.0.0':
resolution: {integrity: sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==} resolution: {integrity: sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==}
engines: {node: '>= 12.13.0'} engines: {node: '>= 12.13.0'}
@ -1019,6 +1040,18 @@ packages:
resolution: {integrity: sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==} resolution: {integrity: sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==}
engines: {node: '>= 10.0.0'} engines: {node: '>= 10.0.0'}
'@material/material-color-utilities@0.3.0':
resolution: {integrity: sha512-ztmtTd6xwnuh2/xu+Vb01btgV8SQWYCaK56CkRK8gEkWe5TuDyBcYJ0wgkMRn+2VcE9KUmhvkz+N9GHrqw/C0g==}
'@mdui/icons@1.0.3':
resolution: {integrity: sha512-Jq9juUqIJMBvIRSTr0qBKiqnlbY5pVUzUP20EHSN8dT7GcqN7bq0AL8MASL5DxKs09kgcERq+z5bHJOkz/VDlA==}
'@mdui/jq@3.0.3':
resolution: {integrity: sha512-nI8QK9UPHhiIbECrC1aMdLXNxP6WgUtC9XwRPs/e56FtwduePyxPyloXmgU8VYw85i6TtYdgClHS9tW8JweNZA==}
'@mdui/shared@1.0.8':
resolution: {integrity: sha512-YY863fjHBuk8KtiO4uLDm1YyIVdGrWv4xUxfv8jP32WqIQBkSTbV7HN8jnKXXIej0NFP7pU89yGr4GJYzVszPg==}
'@msgpack/msgpack@2.8.0': '@msgpack/msgpack@2.8.0':
resolution: {integrity: sha512-h9u4u/jiIRKbq25PM+zymTyW6bhTzELvOoUd+AvYriWOAKpLGnIamaET3pnHYoI5iYphAHBI4ayx0MehR+VVPQ==} resolution: {integrity: sha512-h9u4u/jiIRKbq25PM+zymTyW6bhTzELvOoUd+AvYriWOAKpLGnIamaET3pnHYoI5iYphAHBI4ayx0MehR+VVPQ==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
@ -1271,6 +1304,9 @@ packages:
'@types/cacheable-request@6.0.3': '@types/cacheable-request@6.0.3':
resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==}
'@types/crypto-js@4.2.2':
resolution: {integrity: sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ==}
'@types/debug@4.1.12': '@types/debug@4.1.12':
resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
@ -1890,6 +1926,9 @@ packages:
resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
engines: {node: '>=8'} engines: {node: '>=8'}
classcat@5.0.5:
resolution: {integrity: sha512-JhZUT7JFcQy/EzW605k/ktHtncoo9vnyW/2GspNYwFlN1C/WmjuV/xtS04e9SOkL2sTdw0VAZ2UGCcQ9lR6p6w==}
clean-stack@2.2.0: clean-stack@2.2.0:
resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
engines: {node: '>=6'} engines: {node: '>=6'}
@ -2024,6 +2063,9 @@ packages:
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
engines: {node: '>= 8'} engines: {node: '>= 8'}
crypto-js@4.2.0:
resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==}
css-select@5.2.2: css-select@5.2.2:
resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==}
@ -2289,8 +2331,8 @@ packages:
resolution: {integrity: sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==} resolution: {integrity: sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==}
engines: {node: '>=8.0.0'} engines: {node: '>=8.0.0'}
electron@38.0.0: electron@38.2.0:
resolution: {integrity: sha512-egljptiPJqbL/oamFCEY+g3RNeONWTVxZSGeyLqzK8xq106JhzuxnhJZ3sxt4DzJFaofbGyGJA37Oe9d+gVzYw==} resolution: {integrity: sha512-Cw5Mb+N5NxsG0Hc1qr8I65Kt5APRrbgTtEEn3zTod30UNJRnAE1xbGk/1NOaDn3ODzI/MYn6BzT9T9zreP7xWA==}
engines: {node: '>= 12.20.55'} engines: {node: '>= 12.20.55'}
hasBin: true hasBin: true
@ -2541,6 +2583,9 @@ packages:
exponential-backoff@3.1.2: exponential-backoff@3.1.2:
resolution: {integrity: sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==} resolution: {integrity: sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==}
exponential-backoff@3.1.3:
resolution: {integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==}
extract-zip@2.0.1: extract-zip@2.0.1:
resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==}
engines: {node: '>= 10.17.0'} engines: {node: '>= 10.17.0'}
@ -3085,6 +3130,9 @@ packages:
resolution: {integrity: sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig==} resolution: {integrity: sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
is-promise@4.0.0:
resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==}
is-regex@1.2.1: is-regex@1.2.1:
resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
@ -3181,9 +3229,6 @@ packages:
resolution: {integrity: sha512-YcwCHw1kiqEeI5xRpDlPPBGL2EOpBKLwO4yIBJcXWHPj5PnA5urGq0jbyhM5KoNpypQ6VboSoxc9D8HyfvngSg==} resolution: {integrity: sha512-YcwCHw1kiqEeI5xRpDlPPBGL2EOpBKLwO4yIBJcXWHPj5PnA5urGq0jbyhM5KoNpypQ6VboSoxc9D8HyfvngSg==}
engines: {node: '>=18'} engines: {node: '>=18'}
jintr@3.3.1:
resolution: {integrity: sha512-nnOzyhf0SLpbWuZ270Omwbj5LcXUkTcZkVnK8/veJXtSZOiATM5gMZMdmzN75FmTyj+NVgrGaPdH12zIJ24oIA==}
jpeg-js@0.4.4: jpeg-js@0.4.4:
resolution: {integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==} resolution: {integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==}
@ -3346,6 +3391,15 @@ packages:
resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==} resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==}
engines: {node: '>= 12.0.0'} engines: {node: '>= 12.0.0'}
lit-element@4.2.1:
resolution: {integrity: sha512-WGAWRGzirAgyphK2urmYOV72tlvnxw7YfyLDgQ+OZnM9vQQBQnumQ7jUJe6unEzwGU3ahFOjuz1iz1jjrpCPuw==}
lit-html@3.3.1:
resolution: {integrity: sha512-S9hbyDu/vs1qNrithiNyeyv64c9yqiW9l+DBgI18fL+MTvOtWoFR0FWiyq1TxaYef5wNlpEmzlXoBlZEO+WjoA==}
lit@3.3.1:
resolution: {integrity: sha512-Ksr/8L3PTapbdXJCk+EJVB78jDodUMaP54gD24W186zGRARvwrsPfS60wae/SSCTCNZVPd1chXqio1qHQmu4NA==}
locate-path@6.0.0: locate-path@6.0.0:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'} engines: {node: '>=10'}
@ -3420,6 +3474,9 @@ packages:
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
mdui@2.1.4:
resolution: {integrity: sha512-QtK5xia5HXtVO7yH30QjwvvNruw5JdrJL1MEc1k6S/ZfsbHOj6BxxdYjrdv2HiN5ikkGqt5CIbZdFyq6shaZyw==}
meow@13.2.0: meow@13.2.0:
resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==}
engines: {node: '>=18'} engines: {node: '>=18'}
@ -3435,6 +3492,10 @@ packages:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'} engines: {node: '>= 8'}
meriyah@6.1.4:
resolution: {integrity: sha512-Sz8FzjzI0kN13GK/6MVEsVzMZEPvOhnmmI1lU5+/1cGOiK3QUahntrNNtdVeihrO7t9JpoH75iMNXg6R6uWflQ==}
engines: {node: '>=18.0.0'}
micromatch@4.0.8: micromatch@4.0.8:
resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
engines: {node: '>=8.6'} engines: {node: '>=8.6'}
@ -4228,11 +4289,6 @@ packages:
resolution: {integrity: sha512-kWJDCr9EWtZ+/EYYM5MareWj2cRnZGF93YDNpH4jQiHB+hBIZnfPFSQiVMzZOdk+zXWqTZ/9fTeQNu2DqeiudA==} resolution: {integrity: sha512-kWJDCr9EWtZ+/EYYM5MareWj2cRnZGF93YDNpH4jQiHB+hBIZnfPFSQiVMzZOdk+zXWqTZ/9fTeQNu2DqeiudA==}
engines: {node: '>=20.12.2'} engines: {node: '>=20.12.2'}
simple-youtube-age-restriction-bypass@https://codeload.github.com/organization/Simple-YouTube-Age-Restriction-Bypass/tar.gz/4e2db89ccb2fb880c5110add9ff3f1dfb78d0ff6:
resolution: {tarball: https://codeload.github.com/organization/Simple-YouTube-Age-Restriction-Bypass/tar.gz/4e2db89ccb2fb880c5110add9ff3f1dfb78d0ff6}
version: 2.5.9
engines: {node: '>=18.0.0', npm: '>=7.0.0'}
sirv@3.0.1: sirv@3.0.1:
resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==} resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==}
engines: {node: '>=18'} engines: {node: '>=18'}
@ -4309,6 +4365,9 @@ packages:
sprintf-js@1.1.3: sprintf-js@1.1.3:
resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==}
ssr-window@5.0.1:
resolution: {integrity: sha512-WVXlhQsm54HC+FnJfEbccEgNF7mKXtnFUB8Xn7rx2dsWHOlBdqezdX88Vjh6pVGaa0ZvL+PoSu7rEcBuNmxt6g==}
ssri@12.0.0: ssri@12.0.0:
resolution: {integrity: sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==} resolution: {integrity: sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==}
engines: {node: ^18.17.0 || >=20.5.0} engines: {node: ^18.17.0 || >=20.5.0}
@ -4832,8 +4891,8 @@ packages:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'} engines: {node: '>=10'}
youtubei.js@15.0.1: youtubei.js@16.0.1:
resolution: {integrity: sha512-2slapqJS5NuXKHvcACEknyVz0AjH/TrXaOhDM0q2twQKa54kCmfj+7B/2nGfd20uzAe29zW1ejk2qOc4ABuGkg==} resolution: {integrity: sha512-3802bCAGkBc2/G5WUTc0l/bO5mPYJbQAHL04d9hE9PnrDHoBUT8MN721Yqt4RCNncAXdHcfee9VdJy3Fhq1r5g==}
zlibjs@0.3.1: zlibjs@0.3.1:
resolution: {integrity: sha512-+J9RrgTKOmlxFSDHo0pI1xM6BLVUv+o0ZT9ANtCxGkjIVCCUdx9alUF8Gm+dGLKbkkkidWIHFDZHDMpfITt4+w==} resolution: {integrity: sha512-+J9RrgTKOmlxFSDHo0pI1xM6BLVUv+o0ZT9ANtCxGkjIVCCUdx9alUF8Gm+dGLKbkkkidWIHFDZHDMpfITt4+w==}
@ -4978,7 +5037,7 @@ snapshots:
'@babel/helper-string-parser': 7.27.1 '@babel/helper-string-parser': 7.27.1
'@babel/helper-validator-identifier': 7.27.1 '@babel/helper-validator-identifier': 7.27.1
'@bufbuild/protobuf@2.6.3': {} '@bufbuild/protobuf@2.10.0': {}
'@dehoist/romanize-thai@1.0.0': {} '@dehoist/romanize-thai@1.0.0': {}
@ -5048,7 +5107,7 @@ snapshots:
'@electron/node-gyp@https://codeload.github.com/electron/node-gyp/tar.gz/06b29aafb7708acef8b3669835c8a7857ebc92d2': '@electron/node-gyp@https://codeload.github.com/electron/node-gyp/tar.gz/06b29aafb7708acef8b3669835c8a7857ebc92d2':
dependencies: dependencies:
env-paths: 2.2.1 env-paths: 2.2.1
exponential-backoff: 3.1.2 exponential-backoff: 3.1.3
glob: 8.1.0 glob: 8.1.0
graceful-fs: 4.2.11 graceful-fs: 4.2.11
make-fetch-happen: 10.2.1 make-fetch-happen: 10.2.1
@ -5100,9 +5159,9 @@ snapshots:
- bluebird - bluebird
- supports-color - supports-color
'@electron/remote@2.1.3(electron@38.0.0)': '@electron/remote@2.1.3(electron@38.2.0)':
dependencies: dependencies:
electron: 38.0.0 electron: 38.2.0
'@electron/universal@3.0.1': '@electron/universal@3.0.1':
dependencies: dependencies:
@ -5293,16 +5352,16 @@ snapshots:
dependencies: dependencies:
'@ghostery/adblocker-extended-selectors': 2.11.6 '@ghostery/adblocker-extended-selectors': 2.11.6
'@ghostery/adblocker-electron-preload@2.11.6(electron@38.0.0)': '@ghostery/adblocker-electron-preload@2.11.6(electron@38.2.0)':
dependencies: dependencies:
'@ghostery/adblocker-content': 2.11.6 '@ghostery/adblocker-content': 2.11.6
electron: 38.0.0 electron: 38.2.0
'@ghostery/adblocker-electron@2.11.6(electron@38.0.0)': '@ghostery/adblocker-electron@2.11.6(electron@38.2.0)':
dependencies: dependencies:
'@ghostery/adblocker': 2.11.6 '@ghostery/adblocker': 2.11.6
'@ghostery/adblocker-electron-preload': 2.11.6(electron@38.0.0) '@ghostery/adblocker-electron-preload': 2.11.6(electron@38.2.0)
electron: 38.0.0 electron: 38.2.0
tldts-experimental: 7.0.12 tldts-experimental: 7.0.12
'@ghostery/adblocker-extended-selectors@2.11.6': {} '@ghostery/adblocker-extended-selectors@2.11.6': {}
@ -5606,6 +5665,16 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2 '@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.5 '@jridgewell/sourcemap-codec': 1.5.5
'@lit-labs/ssr-dom-shim@1.4.0': {}
'@lit/localize@0.12.2':
dependencies:
lit: 3.3.1
'@lit/reactive-element@2.1.1':
dependencies:
'@lit-labs/ssr-dom-shim': 1.4.0
'@malept/cross-spawn-promise@2.0.0': '@malept/cross-spawn-promise@2.0.0':
dependencies: dependencies:
cross-spawn: 7.0.6 cross-spawn: 7.0.6
@ -5619,6 +5688,27 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@material/material-color-utilities@0.3.0': {}
'@mdui/icons@1.0.3':
dependencies:
'@mdui/shared': 1.0.8
lit: 3.3.1
tslib: 2.8.1
'@mdui/jq@3.0.3':
dependencies:
ssr-window: 5.0.1
tslib: 2.8.1
'@mdui/shared@1.0.8':
dependencies:
'@lit/reactive-element': 2.1.1
'@mdui/jq': 3.0.3
lit: 3.3.1
ssr-window: 5.0.1
tslib: 2.8.1
'@msgpack/msgpack@2.8.0': {} '@msgpack/msgpack@2.8.0': {}
'@napi-rs/wasm-runtime@0.2.12': '@napi-rs/wasm-runtime@0.2.12':
@ -5840,13 +5930,15 @@ snapshots:
'@types/node': 24.3.0 '@types/node': 24.3.0
'@types/responselike': 1.0.3 '@types/responselike': 1.0.3
'@types/crypto-js@4.2.2': {}
'@types/debug@4.1.12': '@types/debug@4.1.12':
dependencies: dependencies:
'@types/ms': 2.1.0 '@types/ms': 2.1.0
'@types/electron-localshortcut@3.1.3': '@types/electron-localshortcut@3.1.3':
dependencies: dependencies:
electron: 38.0.0 electron: 38.2.0
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -6576,6 +6668,8 @@ snapshots:
ci-info@3.9.0: {} ci-info@3.9.0: {}
classcat@5.0.5: {}
clean-stack@2.2.0: {} clean-stack@2.2.0: {}
clean-stack@5.2.0: clean-stack@5.2.0:
@ -6715,6 +6809,8 @@ snapshots:
shebang-command: 2.0.0 shebang-command: 2.0.0
which: 2.0.2 which: 2.0.2
crypto-js@4.2.0: {}
css-select@5.2.2: css-select@5.2.2:
dependencies: dependencies:
boolbase: 1.0.0 boolbase: 1.0.0
@ -6727,9 +6823,9 @@ snapshots:
csstype@3.1.3: {} csstype@3.1.3: {}
custom-electron-prompt@1.5.8(electron@38.0.0): custom-electron-prompt@1.5.8(electron@38.2.0):
dependencies: dependencies:
electron: 38.0.0 electron: 38.2.0
data-uri-to-buffer@4.0.1: {} data-uri-to-buffer@4.0.1: {}
@ -7059,7 +7155,7 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
electron@38.0.0: electron@38.2.0:
dependencies: dependencies:
'@electron/get': 2.0.3 '@electron/get': 2.0.3
'@types/node': 22.17.2 '@types/node': 22.17.2
@ -7429,6 +7525,8 @@ snapshots:
exponential-backoff@3.1.2: {} exponential-backoff@3.1.2: {}
exponential-backoff@3.1.3: {}
extract-zip@2.0.1: extract-zip@2.0.1:
dependencies: dependencies:
debug: 4.4.1 debug: 4.4.1
@ -8009,6 +8107,8 @@ snapshots:
is-port-reachable@4.0.0: {} is-port-reachable@4.0.0: {}
is-promise@4.0.0: {}
is-regex@1.2.1: is-regex@1.2.1:
dependencies: dependencies:
call-bound: 1.0.4 call-bound: 1.0.4
@ -8122,10 +8222,6 @@ snapshots:
'@jimp/types': 1.6.0 '@jimp/types': 1.6.0
'@jimp/utils': 1.6.0 '@jimp/utils': 1.6.0
jintr@3.3.1:
dependencies:
acorn: 8.15.0
jpeg-js@0.4.4: {} jpeg-js@0.4.4: {}
js-tokens@4.0.0: {} js-tokens@4.0.0: {}
@ -8262,6 +8358,22 @@ snapshots:
lightningcss-win32-arm64-msvc: 1.30.1 lightningcss-win32-arm64-msvc: 1.30.1
lightningcss-win32-x64-msvc: 1.30.1 lightningcss-win32-x64-msvc: 1.30.1
lit-element@4.2.1:
dependencies:
'@lit-labs/ssr-dom-shim': 1.4.0
'@lit/reactive-element': 2.1.1
lit-html: 3.3.1
lit-html@3.3.1:
dependencies:
'@types/trusted-types': 2.0.7
lit@3.3.1:
dependencies:
'@lit/reactive-element': 2.1.1
lit-element: 4.2.1
lit-html: 3.3.1
locate-path@6.0.0: locate-path@6.0.0:
dependencies: dependencies:
p-locate: 5.0.0 p-locate: 5.0.0
@ -8352,6 +8464,20 @@ snapshots:
math-intrinsics@1.1.0: {} math-intrinsics@1.1.0: {}
mdui@2.1.4(patch_hash=008b925e23862ced06c38f9765eef4322eb8a93cb5e9a6b684fd717fec0ea0d9):
dependencies:
'@floating-ui/utils': 0.2.10
'@lit/localize': 0.12.2
'@lit/reactive-element': 2.1.1
'@material/material-color-utilities': 0.3.0
'@mdui/jq': 3.0.3
'@mdui/shared': 1.0.8
classcat: 5.0.5
is-promise: 4.0.0
lit: 3.3.1
ssr-window: 5.0.1
tslib: 2.8.1
meow@13.2.0: {} meow@13.2.0: {}
merge-anything@5.1.7: merge-anything@5.1.7:
@ -8362,6 +8488,8 @@ snapshots:
merge2@1.4.1: {} merge2@1.4.1: {}
meriyah@6.1.4: {}
micromatch@4.0.8: micromatch@4.0.8:
dependencies: dependencies:
braces: 3.0.3 braces: 3.0.3
@ -9139,8 +9267,6 @@ snapshots:
simple-xml-to-json@1.2.3: {} simple-xml-to-json@1.2.3: {}
simple-youtube-age-restriction-bypass@https://codeload.github.com/organization/Simple-YouTube-Age-Restriction-Bypass/tar.gz/4e2db89ccb2fb880c5110add9ff3f1dfb78d0ff6: {}
sirv@3.0.1: sirv@3.0.1:
dependencies: dependencies:
'@polka/url': 1.0.0-next.29 '@polka/url': 1.0.0-next.29
@ -9232,6 +9358,8 @@ snapshots:
sprintf-js@1.1.3: sprintf-js@1.1.3:
optional: true optional: true
ssr-window@5.0.1: {}
ssri@12.0.0: ssri@12.0.0:
dependencies: dependencies:
minipass: 7.1.2 minipass: 7.1.2
@ -9796,11 +9924,10 @@ snapshots:
yocto-queue@0.1.0: {} yocto-queue@0.1.0: {}
youtubei.js@15.0.1: youtubei.js@16.0.1:
dependencies: dependencies:
'@bufbuild/protobuf': 2.6.3 '@bufbuild/protobuf': 2.10.0
jintr: 3.3.1 meriyah: 6.1.4
undici: 6.21.3
zlibjs@0.3.1: {} zlibjs@0.3.1: {}

View File

@ -50,7 +50,7 @@ export const defaultConfig: DefaultConfig = {
x: -1, x: -1,
y: -1, y: -1,
}, },
'url': 'https://music.youtube.com', 'url': 'https://music.\u0079\u006f\u0075\u0074\u0075\u0062\u0065.com',
'options': { 'options': {
tray: false, tray: false,
appVisible: true, appVisible: true,

View File

@ -13,7 +13,7 @@ export function getPlugins() {
export async function isEnabled(plugin: string) { export async function isEnabled(plugin: string) {
const pluginConfig = deepmerge( const pluginConfig = deepmerge(
(await allPlugins())[plugin].config ?? { enabled: false }, (await allPlugins())[plugin]?.config ?? { enabled: false },
(store.get('plugins') as Record<string, PluginConfig>)[plugin] ?? {}, (store.get('plugins') as Record<string, PluginConfig>)[plugin] ?? {},
); );
return pluginConfig !== undefined && pluginConfig.enabled; return pluginConfig !== undefined && pluginConfig.enabled;

View File

@ -112,7 +112,7 @@ const migrations = {
'>=2.1.3'(store: IStore) { '>=2.1.3'(store: IStore) {
const listenAlong = store.get('plugins.discord.listenAlong'); const listenAlong = store.get('plugins.discord.listenAlong');
if (listenAlong !== undefined) { if (listenAlong !== undefined) {
store.set('plugins.discord.playOnYouTubeMusic', listenAlong); store.set('plugins.discord.playOnPearMusic', listenAlong);
store.delete('plugins.discord.listenAlong'); store.delete('plugins.discord.listenAlong');
} }
}, },

View File

@ -2,10 +2,10 @@
"common": { "common": {
"console": { "console": {
"plugins": { "plugins": {
"execute-failed": "فشل تشغيل الاضافة {{pluginName}}::{{contextName}}", "execute-failed": "فشل بدأ الاضافة {{pluginName}}::{{contextName}}",
"executed-at-ms": "تم تشغيل الاضافة {{pluginName}}::{{contextName}} خلال {{ms}} جزء من الثانية", "executed-at-ms": "تم بدأ الاضافة {{pluginName}}::{{contextName}} خلال {{ms}} جزء من الثانية",
"initialize-failed": "فشل تنفيذ الاضافة \"{{pluginName}}\"", "initialize-failed": "فشل تشغيل الاضافة \"{{pluginName}}\"",
"load-all": "جاري تحميل جميع الاضافات", "load-all": "جار تحميل جميع الاضافات",
"load-failed": "فشل في تحميل الاضافة \"{{pluginName}}\"", "load-failed": "فشل في تحميل الاضافة \"{{pluginName}}\"",
"loaded": "تم تحميل الاضافة \"{{pluginName}}\"", "loaded": "تم تحميل الاضافة \"{{pluginName}}\"",
"unload-failed": "فشل ازالة الاضافة \"{{pluginName}}\"", "unload-failed": "فشل ازالة الاضافة \"{{pluginName}}\"",
@ -30,21 +30,21 @@
"receive-command": "تم الحصول على أمر عن طريق: \"{{command}}\"" "receive-command": "تم الحصول على أمر عن طريق: \"{{command}}\""
}, },
"theme": { "theme": {
"css-file-not-found": "ملف \"{{cssFile}}\" غير متواجد,سيتم التجاهل" "css-file-not-found": "ملف \"{{cssFile}}\" غير متواجد، سيتم التجاهل"
}, },
"unresponsive": { "unresponsive": {
"details": "خطء عدم استجابة!\n{{error}}" "details": "خطء عدم استجابة!\n{{error}}"
}, },
"when-ready": { "when-ready": {
"clearing-cache-after-20s": "ازالة بيانات التطبيق المخزنة" "clearing-cache-after-20s": "ازالة ذاكرة التخزين المؤقت للتطبيق"
}, },
"window": { "window": {
"tried-to-render-offscreen": "تم محاولة فتح الصفحة خارج الشاشة, حجم الصفحة={{windowSize}}, حجم الشاشة={{displaySize}}, مكان={{position}}" "tried-to-render-offscreen": "تم محاولة فتح الصفحة خارج الشاشة, حجم الصفحة={{windowSize}}, حجم النافذة={{displaySize}}, المكان={{position}}"
} }
}, },
"dialog": { "dialog": {
"hide-menu-enabled": { "hide-menu-enabled": {
"detail": "تم اخفاء القائمة, استخدم 'Alt' لاظهار القائمة (أو 'Escape' اذا كنت تستخدم القائمة داخل التطبيق)", "detail": "تم اخفاء القائمة, استخدم 'Alt' لاظهار القائمة (أو 'Escape' اذا كنت تستخدم القائمة التي داخل التطبيق)",
"message": "اخفاء القائمة مفعل", "message": "اخفاء القائمة مفعل",
"title": "تم تفعيل اخفاء القائمة" "title": "تم تفعيل اخفاء القائمة"
}, },
@ -65,27 +65,27 @@
}, },
"detail": "نأسف على الإزعاج! يرجى اختيار ما يجب القيام به:", "detail": "نأسف على الإزعاج! يرجى اختيار ما يجب القيام به:",
"message": "التطبيق لا يستجيب", "message": "التطبيق لا يستجيب",
"title": "الصفحة لا تستجيب" "title": "النافذة لا تستجيب"
}, },
"update-available": { "update-available": {
"buttons": { "buttons": {
"disable": "ايقاف التحديثات", "disable": "ايقاف التحديثات",
"download": حميل", "download": نزيل",
"ok": "موافق" "ok": "حسنا"
}, },
"detail": "يوجد نسخة جديدة يمكن تحميلها من خلال {{downloadLink}}", "detail": "يوجد نسخة جديدة يمكن تنزيلها من {{downloadLink}}",
"message": "يوجد نسخة حديثة", "message": "يوجد نسخة جديدة",
"title": "يوجد تحديث" "title": "يوجد تحديث"
} }
}, },
"menu": { "menu": {
"about": "عنا", "about": "عنا",
"navigation": { "navigation": {
"label": "التنقل", "label": "شريط التنقل",
"submenu": { "submenu": {
"copy-current-url": "نسخ الرابط الحالي", "copy-current-url": "نسخ الرابط الحالي",
"go-back": "العودة للخلف", "go-back": "عودة",
"go-forward": "التقدم", "go-forward": "تقدم",
"quit": "الخروج", "quit": "الخروج",
"restart": "اعادة تشغيل التطبيق" "restart": "اعادة تشغيل التطبيق"
} }
@ -96,28 +96,28 @@
"advanced-options": { "advanced-options": {
"label": "الاعدادات المتقدمة", "label": "الاعدادات المتقدمة",
"submenu": { "submenu": {
"auto-reset-app-cache": "إعادة تعيين ذاكرة التخزين المؤقت للتطبيق عند بدء التشغيل", "auto-reset-app-cache": "إعادة ضبط ذاكرة التخزين المؤقت للتطبيق عند بدء التشغيل",
"disable-hardware-acceleration": "تعطيل تسريع الأجهزة", "disable-hardware-acceleration": "اطفاء تسريع الأجهزة",
"edit-config-json": "تعديل ملف الاعدادات", "edit-config-json": "تعديل ملف الاعدادات",
"override-user-agent": "تجاوز وكيل المستخدم", "override-user-agent": "تجاوز وكيل المستخدم",
"restart-on-config-changes": "اعادة التشغيل بعد تعديل الاعدادات", "restart-on-config-changes": "اعادة التشغيل بعد تعديل الاعدادات",
"set-proxy": { "set-proxy": {
"label": "تعيين الوكيل", "label": "تعيين الوكيل",
"prompt": { "prompt": {
"label": "أدخل عنوان الوكيل: (اتركه فارغًا للتعطيل)", "label": "أدخل عنوان الوكيل: (اتركه فارغًا لإطفائه)",
"placeholder": "مثال: SOCKS5://127.0.0.1:9999", "placeholder": "مثال: SOCKS5://127.0.0.1:9999",
"title": "اضافة الوكيل" "title": "ضع proxy"
} }
}, },
"toggle-dev-tools": "تثبيت أدوات التطوير" "toggle-dev-tools": "تثبيت أدوات التطوير"
} }
}, },
"always-on-top": "دائما في القمة", "always-on-top": "دائما في المقدمة",
"auto-update": "تحديث تلقائي", "auto-update": "تحديث تلقائي",
"hide-menu": { "hide-menu": {
"dialog": { "dialog": {
"message": "سيتم إخفاء القائمة عند التشغيل التالي، استخدم [Alt] لإظهارها (أو ضع علامة اختيار على [`] في حالة استخدام القائمة داخل التطبيق)", "message": "سيتم إخفاء القائمة عند التشغيل التالي، استخدم [Alt] لإظهارها (أو اضغط [`] في حالة استخدام القائمة التي داخل التطبيق)",
"title": "إخفاء القائمة ممكن" "title": "إخفاء القائمة مفعل"
}, },
"label": "إخفاء القائمة" "label": "إخفاء القائمة"
}, },
@ -131,20 +131,20 @@
"to-help-translate": "تريد المساعدة في الترجمة؟ اضغط هنا" "to-help-translate": "تريد المساعدة في الترجمة؟ اضغط هنا"
} }
}, },
"resume-on-start": "تكملة الأغنية الأخيرة عند بدأ التشغيل", "resume-on-start": "استأنف الأغنية الأخيرة عند بدأ التشغيل",
"single-instance-lock": "قفل مثيل واحد", "single-instance-lock": "قفل مثيل واحد",
"start-at-login": "‎ابدأ عند تسجيل الدخول", "start-at-login": "‎ابدأ عند تسجيل الدخول",
"starting-page": { "starting-page": {
"label": "صفحة البداية", "label": "صفحة البداية",
"unset": "الغاء" "unset": "عدم تعيين"
}, },
"tray": { "tray": {
"label": "قائمة", "label": "قائمة",
"submenu": { "submenu": {
"disabled": "غير مفعل", "disabled": "غير مفعل",
"enabled-and-hide-app": "تمكين وإخفاء التطبيق", "enabled-and-hide-app": "مفعل وإخفاء التطبيق",
"enabled-and-show-app": مكين وأظهر التطبيق", "enabled-and-show-app": فعل وأظهر التطبيق",
"play-pause-on-click": "تشغيل/إيقاف مؤقت عند النقر" "play-pause-on-click": "تشغيل/إيقاف عند النقر"
} }
}, },
"visual-tweaks": { "visual-tweaks": {
@ -153,7 +153,8 @@
"custom-window-title": { "custom-window-title": {
"label": "عنوان نافذة مخصص", "label": "عنوان نافذة مخصص",
"prompt": { "prompt": {
"placeholder": "مثال: YouTube Music" "label": "ادخل عنوان مخصص للنافذة: (اتركه فارغًا إلغاء التفعيل)",
"placeholder": "مثال: Pear Desktop"
} }
}, },
"like-buttons": { "like-buttons": {
@ -162,7 +163,7 @@
"hide": "اخفاء", "hide": "اخفاء",
"label": "أزرار الاعجاب" "label": "أزرار الاعجاب"
}, },
"remove-upgrade-button": "ازالة زرار التطوير", "remove-upgrade-button": "ازالة زر التطوير",
"theme": { "theme": {
"dialog": { "dialog": {
"button": { "button": {
@ -207,8 +208,8 @@
"restart": "إعادة تشغيل التطبيق", "restart": "إعادة تشغيل التطبيق",
"show": "عرض النافدة", "show": "عرض النافدة",
"tooltip": { "tooltip": {
"default": "يوتيوب اغاني", "default": "Pear Desktop",
"with-song-info": "أغاني يوتيوب: {{artist}} - {{title}}" "with-song-info": "Pear Desktop: {{artist}} - {{title}}"
} }
} }
}, },
@ -232,25 +233,25 @@
"description": "يطبق ثيمًا ديناميكيًا وتأثيرات بصرية بناء على ألوان الألبوم", "description": "يطبق ثيمًا ديناميكيًا وتأثيرات بصرية بناء على ألوان الألبوم",
"menu": { "menu": {
"color-mix-ratio": { "color-mix-ratio": {
"label": "‬نسبة قوة اللون", "label": "‬نسبة قوة مزيج الألوان",
"submenu": { "submenu": {
"percent": "{{ratio}}%" "percent": "{{ratio}}٪"
} }
} }
}, },
"name": "ثيم ألوان الألبوم" "name": "سمة ألوان الألبوم"
}, },
"ambient-mode": { "ambient-mode": {
"description": "يطبق تأثير إضاءة عن طريق إسقاط ألوان ناعمة من الفيديو على خلفية شاشتك", "description": "يطبق تأثير إضاءة عن طريق إسقاط ألوان ناعمة من الفيديو على خلفية شاشتك",
"menu": { "menu": {
"blur-amount": { "blur-amount": {
"label": "مقدار التمويه", "label": "مقدار الطمس",
"submenu": { "submenu": {
"pixels": "{{blurAmount}} بكسل" "pixels": "{{blurAmount}} بكسل"
} }
}, },
"buffer": { "buffer": {
"label": "تخزين الصوت الؤقت", "label": "تخزين الصوت المؤقت",
"submenu": { "submenu": {
"buffer": "{{buffer}}" "buffer": "{{buffer}}"
} }
@ -258,7 +259,7 @@
"opacity": { "opacity": {
"label": "الشفافية", "label": "الشفافية",
"submenu": { "submenu": {
"percent": "{{opacity}}%" "percent": "{{opacity}}٪"
} }
}, },
"quality": { "quality": {
@ -270,7 +271,7 @@
"size": { "size": {
"label": "الحجم", "label": "الحجم",
"submenu": { "submenu": {
"percent": "{{size}}%" "percent": "{{size}}٪"
} }
}, },
"smoothness-transition": { "smoothness-transition": {
@ -286,30 +287,30 @@
"name": "الوضع المحيطي" "name": "الوضع المحيطي"
}, },
"amuse": { "amuse": {
"description": "تكامل دعم YouTube Music مع ويدجت Amuse لعرض الأغنية قيد التشغيل، من إنتاج 6K Labs", "description": "تكامل دعم Pear Desktop مع ويدجت Amuse لعرض الأغنية التي قيد التشغيل، من إنتاج 6K Labs",
"name": "تلسيه", "name": "تلسيه",
"response": { "response": {
"query": "خادم Amuse API قيد التشغيل. استخدم GET /query للحصول على معلومات الأغنية." "query": "خادم Amuse API قيد التشغيل. استخدم GET /query للحصول على معلومات الأغنية."
} }
}, },
"api-server": { "api-server": {
"description": "يضيف خادم للتحكم في المشغل", "description": "يضيف API للتحكم في المشغل",
"dialog": { "dialog": {
"request": { "request": {
"buttons": { "buttons": {
"allow": "سماح", "allow": "سماح",
"deny": "رفض" "deny": "رفض"
}, },
"message": "السماح لـ {{ID}} ({{origin}}) بالوصول إلى واجهة برمجة التطبيقات (API)؟", "message": "السماح لـ {{ID}} ({{origin}}) بالوصول إلى الAPI؟",
"title": "طلب السماح بالوصول إلى واجهة برمجة التطبيقات(API)" "title": "طلب السماح بالوصول إلى الAPI"
} }
}, },
"menu": { "menu": {
"auth-strategy": { "auth-strategy": {
"label": "نهج التفويض", "label": "استراتيجية التفويض",
"submenu": { "submenu": {
"auth-at-first": { "auth-at-first": {
"label": "التفويض المبدئي عند الطلب الأول" "label": "التفويض عند الطلب الأول"
}, },
"none": { "none": {
"label": "بدون تفويض" "label": "بدون تفويض"
@ -340,10 +341,10 @@
"name": "ضاغط الصوت" "name": "ضاغط الصوت"
}, },
"auth-proxy-adapter": { "auth-proxy-adapter": {
"description": "دعم استخدام خدمات وكيل المصادقة", "description": "دعم استخدام خدمات proxy للإثبات",
"menu": { "menu": {
"disable": "تعطيل مكيف الوكيل", "disable": "تعطيل مكيف الوكيل",
"enable": "تفعيل مكيف الوكيل", "enable": "تفعيل مكيف proxy للصداقة",
"hostname": { "hostname": {
"label": "إسم المستضيف" "label": "إسم المستضيف"
}, },
@ -351,28 +352,28 @@
"label": "المدخل" "label": "المدخل"
} }
}, },
"name": "مكيّف وسيط المصادقة", "name": "مكيّف proxy للمصادقة",
"prompt": { "prompt": {
"hostname": { "hostname": {
"label": "أدخل اسم المستضيف لخادم الوسيط المحلي (يتطلب إعادة التشغيل):", "label": "أدخل اسم المستضيف لخادم proxy المحلي (يتطلب إعادة التشغيل):",
"title": "إسم مستضيف الوسيط" "title": "إسم مستضيف proxy"
}, },
"port": { "port": {
"label": "أدخل مدخلًا لخادم الوسيط المحلي (يتطلب إعادة التشغيل):", "label": "أدخل مدخلًا لخادم proxy المحلي (يتطلب إعادة التشغيل):",
"title": "مدخل الوسيط" "title": "مدخل proxy"
} }
} }
}, },
"blur-nav-bar": { "blur-nav-bar": {
"description": "يجعل شريط التنقل شفاف و ضبابي", "description": "يجعل شريط التنقل شفاف و مطموس",
"name": "تغبيش شريط التنقل" "name": "طمس شريط التنقل"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "تجاوز تَحَقّق اليوتيوب من السن", "description": "تجاوز تَحَقّق مشغل الموسيقى من السن",
"name": "تجاوز التحقق من السن" "name": "تجاوز التحقق من السن"
}, },
"captions-selector": { "captions-selector": {
"description": "محدد ترجمات المقاطع الصوتية لYoutube Music", "description": "محدد ترجمات المقاطع الصوتية لPear Desktop",
"menu": { "menu": {
"autoload": "اختار اخر ترجمة مستخدمة تلقائيا", "autoload": "اختار اخر ترجمة مستخدمة تلقائيا",
"disable-captions": "لا توجد ترجمات بشكل افتراضي" "disable-captions": "لا توجد ترجمات بشكل افتراضي"
@ -390,7 +391,7 @@
}, },
"toast": { "toast": {
"caption-changed": "تم تغيير الترجمة الى {{language}}", "caption-changed": "تم تغيير الترجمة الى {{language}}",
"caption-disabled": "الترجمة معطلة", "caption-disabled": "الترجمة غير مفعلة",
"no-captions": "الترجمة لهاته الأغنية غير متاحة" "no-captions": "الترجمة لهاته الأغنية غير متاحة"
} }
}, },
@ -408,25 +409,33 @@
"options": { "options": {
"multi-input": { "multi-input": {
"fade-in-duration": "مدة التداخل (بأجزاء الثانية)", "fade-in-duration": "مدة التداخل (بأجزاء الثانية)",
"fade-out-duration": "مدة التلاشي (جزء ثانية)", "fade-out-duration": "مدة التلاشي (بأجزاء الثانية)",
"fade-scaling": { "fade-scaling": {
"label": "توسيع التداخل", "label": "توسيع التداخل",
"linear": "خطي", "linear": "خطي",
"logarithmic": "لوغاريتمي" "logarithmic": "لوغاريتمي"
}, },
"seconds-before-end": "التلاشي قبل النهاية بـ N ثوانٍ" "seconds-before-end": "التداخل قبل النهاية بـ N ثوانٍ"
}, },
"title": "خيارات التداخل" "title": "خيارات التداخل"
} }
} }
}, },
"custom-output-device": { "custom-output-device": {
"description": "ضبط مخرج جهاز وسائط مخصص للأغاني",
"menu": { "menu": {
"device-selector": "اختر جهاز" "device-selector": "اختر جهاز"
},
"name": "جهاز اخراج مخصص",
"prompt": {
"device-selector": {
"label": "اختر جهاز الوسائط الذي سيتم استخدامه للاخراج",
"title": "اختر الجهاز الإخراج"
}
} }
}, },
"disable-autoplay": { "disable-autoplay": {
"description": "يجعل الأغنية تبدأ في وضع \"الإيقاف المؤقت\"", "description": "يجعل الأغنية تبدأ في وضع \"الإيقاف\"",
"menu": { "menu": {
"apply-once": "ينطبق فقط عند بدء التشغيل" "apply-once": "ينطبق فقط عند بدء التشغيل"
}, },
@ -444,13 +453,21 @@
"clear-activity": "مسح النشاط", "clear-activity": "مسح النشاط",
"clear-activity-after-timeout": "مسح النشاط بعد انتهاء المهلة", "clear-activity-after-timeout": "مسح النشاط بعد انتهاء المهلة",
"connected": "متصل", "connected": "متصل",
"disconnected": "قطع الاتصال", "disconnected": "غير متصل",
"hide-duration-left": "إخفاء المدة المتبقية", "hide-duration-left": "إخفاء المدة المتبقية",
"hide-github-button": "إخفاء زر رابط GitHub", "hide-github-button": "إخفاء زر رابط GitHub",
"play-on-youtube-music": "شغل في YouTube Music", "play-on-pear-desktop": "شغل في Pear Desktop",
"set-inactivity-timeout": "ضبط مهلة عدم النشاط" "set-inactivity-timeout": "ضبط مهلة عدم النشاط",
"set-status-display-type": {
"label": "نص الحالة",
"submenu": {
"artist": "جار السمع ل{artist}",
"pear-desktop": "جار السمع لPear Desktop",
"title": "جار السمع ل{song title}"
}
}
}, },
"name": "حالة ديسكورد", "name": "Discord Rich Presence",
"prompt": { "prompt": {
"set-inactivity-timeout": { "set-inactivity-timeout": {
"label": "أدخل مهلة عدم النشاط بالثواني:", "label": "أدخل مهلة عدم النشاط بالثواني:",
@ -465,70 +482,70 @@
"buttons": { "buttons": {
"ok": "حسنا" "ok": "حسنا"
}, },
"message": "نعتذر، فشل التحميل…", "message": "اه! نعتذر، فشل التنزيل…",
"title": "خطأ في التحميل!" "title": "خطأ في التنزيل!"
}, },
"start-download-playlist": { "start-download-playlist": {
"buttons": { "buttons": {
"ok": "حسنا" "ok": "حسنا"
}, },
"detail": "({{playlistSize}} أغنية)", "detail": "({{playlistSize}} أغنية)",
"message": حميل القائمة {{playlistTitle}}", "message": نزيل القائمة {{playlistTitle}}",
"title": "بدأ التحميل" "title": "تم بدأ التنزيل"
} }
}, },
"feedback": { "feedback": {
"conversion-progress": "التحويل: {{percent}}%", "conversion-progress": "التحويل: {{percent}}٪",
"converting": "جارٍ التحويل…", "converting": "جارٍ التحويل…",
"done": "تم: {{filePath}}", "done": "تم: {{filePath}}",
"download-info": حميل {{artist}} - {{title}} {{videoId}}", "download-info": نزيل {{artist}} - {{title}} {{videoId}}",
"download-progress": حميل: {{percent}}%", "download-progress": نزيل: {{percent}}٪",
"downloading": "تحميل…", "downloading": "جار التنزيل…",
"downloading-counter": "تنزيل {{current}}/{{total}}…", "downloading-counter": "جار التنزيل {{current}}/{{total}}…",
"downloading-playlist": "يتم تحميل القائمة \"{{playlistTitle}}\" - {{playlistSize}} أغاني ({{playlistId}})", "downloading-playlist": "جار تنزيل القائمة \"{{playlistTitle}}\" - {{playlistSize}} أغاني ({{playlistId}})",
"error-while-downloading": "خطأ في تحميل \"{{author}} - {{title}}\": {{error}}", "error-while-downloading": "خطأ في تنزيل \"{{author}} - {{title}}\": {{error}}",
"folder-already-exists": "الملف {{playlistFolder}} موجود بالفعل", "folder-already-exists": "الملف {{playlistFolder}} موجود بالفعل",
"getting-playlist-info": "الحصول على معلومات القائمة…", "getting-playlist-info": "جار الحصول على معلومات القائمة…",
"loading": "جار التحميل…", "loading": "جارِ التنزيل…",
"playlist-has-only-one-song": "تحتوي قائمة التشغيل على عنصر واحد فقط، يتم تحميله الأن", "playlist-has-only-one-song": "تحتوي قائمة التشغيل على عنصر واحد فقط، جار تنزيله الأن",
"playlist-id-not-found": "لم يتم العثور على معرف قائمة التشغيل", "playlist-id-not-found": "لم يتم العثور على معرف قائمة التشغيل",
"playlist-is-empty": "قائمة التشغيل فارغة", "playlist-is-empty": "قائمة التشغيل فارغة",
"playlist-is-mix-or-private": "حدث خطأ أثناء الحصول على معلومات قائمة التشغيل: تأكد من أنها ليست قائمة تشغيل خاصة أو قائمة تشغيل \"مختلطة لك\"\n\n{{error}}", "playlist-is-mix-or-private": "حدث خطأ أثناء الحصول على معلومات قائمة التشغيل: تأكد من أنها ليست قائمة تشغيل خاصة أو قائمة تشغيل \"مختلطة لك\"\n\n{{error}}",
"preparing-file": "يتم تجهيز الملف…", "preparing-file": "جار تجهيز الملف…",
"saving": "يتم الحفظ…", "saving": "جار الحفظ…",
"trying-to-get-playlist-id": "محاولة الحصول على معرف قائمة التشغيل: {{playlistId}}", "trying-to-get-playlist-id": "جار محاولة الحصول على معرف قائمة التشغيل: {{playlistId}}",
"video-id-not-found": "لم يتم ايجاد الفيديو", "video-id-not-found": "لم يتم ايجاد الفيديو",
"writing-id3": "كتابة علامات ID3…" "writing-id3": "جار كتابة علامات ID3…"
} }
}, },
"description": "يقوم بتنزيل ملفات MP3/مصدر الصوت مباشرة من الواجهة", "description": "يقوم بتنزيل ملفات MP3/مصدر الصوت مباشرة من الواجهة",
"menu": { "menu": {
"choose-download-folder": "اختر مكان التحميل", "choose-download-folder": "اختر مكان التنزيل",
"download-finish-settings": { "download-finish-settings": {
"label": حميل عند الانتهاء", "label": نزيل عند الانتهاء",
"prompt": { "prompt": {
"last-percent": "بعد ( عدد مجهول ) بالمئة", "last-percent": "بعد x بالمئة",
"last-seconds": "آخر (x) ثانية", "last-seconds": "آخر x ثانية",
"title": "تكوين وقت التحميل" "title": "تكوين وقت التنزيل"
}, },
"submenu": { "submenu": {
"advanced": "متقدم", "advanced": "متقدم",
"enabled": "مفعل", "enabled": "مفعل",
"mode": "وضع الوقت", "mode": "وضع الوقت",
"percent": "النسبة", "percent": "نسبة",
"seconds": "ثواني" "seconds": "ثواني"
} }
}, },
"download-playlist": حميل قائمة التشغيل", "download-playlist": نزيل قائمة التشغيل",
"presets": "الإعدادات المسبقة", "presets": "الإعدادات المسبقة",
"skip-existing": "تخطي الملفات الموجودة" "skip-existing": "تخطي الملفات الموجودة بالفعل"
}, },
"name": "أداة التنزيل", "name": "أداة التنزيل",
"renderer": { "renderer": {
"can-not-update-progress": "لا يمكن تحديث التقدم" "can-not-update-progress": "لا يمكن تحديث التقدم"
}, },
"templates": { "templates": {
"button": حميل" "button": نزيل"
} }
}, },
"equalizer": { "equalizer": {
@ -552,11 +569,11 @@
"menu": { "menu": {
"hide-dom-window-controls": "إخفاء عناصر التحكم في نافذة DOM" "hide-dom-window-controls": "إخفاء عناصر التحكم في نافذة DOM"
}, },
"name": "قائمة داخل التطبيق" "name": "قائمة التي داخل التطبيق"
}, },
"lumiastream": { "lumiastream": {
"description": "يضيف دعم Lumia Stream", "description": "يضيف دعم Lumia Stream",
"name": "Lumia Stream [بيتا]" "name": "Lumia Stream [تجريبي]"
}, },
"lyrics-genius": { "lyrics-genius": {
"description": "يضيف دعم الكلمات لمعظم الأغاني", "description": "يضيف دعم الكلمات لمعظم الأغاني",
@ -575,17 +592,17 @@
}, },
"internal": { "internal": {
"save": "حفظ", "save": "حفظ",
"track-source": "مصدر الاغنية", "track-source": "تتبع مصدر الاغنية",
"unknown-user": "مستخدم مجهول" "unknown-user": "مستخدم مجهول"
}, },
"menu": { "menu": {
"click-to-copy-id": "نسخ معرف المستضيف", "click-to-copy-id": "نسخ معرف المستضيف",
"close": "إغلاق \"الموسيقى معًا\"", "close": "إغلاق الموسيقى معًا",
"connected-users": "المستخدمون المتصلون", "connected-users": "المستخدمون المتصلون",
"disconnect": "قطع اتصال من \"الموسيقى معًا\"", "disconnect": "قطع اتصال من الموسيقى معًا",
"empty-user": "لا يوجد مستعملون متصلون", "empty-user": "لا يوجد مستعملون متصلون",
"host": "مضيف \"الموسيقى معًا\"", "host": "مضيف الموسيقى معًا",
"join": "الانضمام إلى \"الموسيقى معا\"", "join": "الانضمام إلى الموسيقى معا",
"permission": { "permission": {
"all": "السماح للضيوف بالتحكم في قائمة التشغيل والمشغل", "all": "السماح للضيوف بالتحكم في قائمة التشغيل والمشغل",
"host-only": "فقط المضيف يستطيع التحكم بالقائمة و المشغل", "host-only": "فقط المضيف يستطيع التحكم بالقائمة و المشغل",
@ -593,29 +610,29 @@
}, },
"set-permission": "تغيير إذن التحكم", "set-permission": "تغيير إذن التحكم",
"status": { "status": {
"disconnected": "قطع الاتصال", "disconnected": "غير متصل",
"guest": "متصل كضيف", "guest": "متصل كضيف",
"host": "متصل كمضيف" "host": "متصل كمضيف"
} }
}, },
"name": "الموسيقى معا [بيتا]", "name": "الموسيقى معا [تجريبي]",
"toast": { "toast": {
"add-song-failed": "فشل في إضافة أغنية", "add-song-failed": "فشل في إضافة أغنية",
"closed": "تم إغلاق \"الموسيقى معا\"", "closed": "تم إغلاق الموسيقى معا",
"disconnected": "تم قطع اتصال \"الموسيقى معًا\"", "disconnected": "تم قطع اتصال الموسيقى معًا",
"host-failed": "فشل في استضافة \"الموسيقى معا\"", "host-failed": "فشل في استضافة الموسيقى معا",
"id-copied": "تم نسخ معرف المضيف", "id-copied": "تم نسخ معرف المضيف",
"id-copy-failed": م يتم نسخ معرف المضيف", "id-copy-failed": "فشل نسخ معرف المضيف",
"join-failed": "فشل الانضمام إلى \"الموسيقى معا\"", "join-failed": "فشل الانضمام إلى الموسيقى معا",
"joined": "تم الانضمام إلى \"الموسيقى معا\"", "joined": "تم الانضمام إلى الموسيقى معا",
"permission-changed": "تم تغيير إذن \"الموسيقى معًا\" إلى \"{{permission}}\"", "permission-changed": "تم تغيير إذن الموسيقى معًا إلى \"{{permission}}\"",
"remove-song-failed": "فشل في إزالة الأغنية", "remove-song-failed": "فشل في إزالة الأغنية",
"user-connected": "{{name}} انضم إلى \"الموسيقى معًا\"", "user-connected": "{{name}} انضم إلى الموسيقى معًا",
"user-disconnected": "{{name}} غادر \"الموسيقى معًا\"" "user-disconnected": "{{name}} غادر الموسيقى معًا"
} }
}, },
"navigation": { "navigation": {
"description": "أسهم التنقل \"التالي/السابق\" مدمجة مباشرة في الواجهة، كما في متصفحك", "description": "أسهم التنقل \"التالي/السابق\" مدمجة مباشرة في الواجهة، كما في متصفحك المفضل",
"name": "التنقل", "name": "التنقل",
"templates": { "templates": {
"back": { "back": {
@ -631,31 +648,31 @@
"name": "لا يوجد تسجيل دخول بجوجل" "name": "لا يوجد تسجيل دخول بجوجل"
}, },
"notifications": { "notifications": {
"description": "عرض إشعار عندما تبدأ الأغنية بالتشغيل (الإشعارات التفاعلية متوفرة على ويندوز)", "description": "عرض إشعار عندما تبدأ الأغنية (الإشعارات التفاعلية متوفرة على ويندوز)",
"menu": { "menu": {
"interactive": "إشعارات تفاعلية", "interactive": "إشعارات تفاعلية",
"interactive-settings": { "interactive-settings": {
"label": "إعدادات تفاعلية", "label": "إعدادات تفاعلية",
"submenu": { "submenu": {
"hide-button-text": "إخفاء زر النص", "hide-button-text": "إخفاء نص الزر",
"refresh-on-play-pause": "تحديث عند التشغيل/الإيقاف المؤقت", "refresh-on-play-pause": "اعادة تحميل عند التشغيل/الإيقاف",
"tray-controls": "فتح/إغلاق عند النقر على علامة الشريط" "tray-controls": "فتح/إغلاق عند النقر على علامة الشريط"
} }
}, },
"priority": "أولوية الإشعار", "priority": "أولوية الإشعار",
"toast-style": "تنسيق التوست", "toast-style": "تنسيق النخب",
"unpause-notification": "إظهار إشعار عند استئناف التشغيل" "unpause-notification": "إظهار إشعار عند استئناف التشغيل"
}, },
"name": "الإشعارات" "name": "الإشعارات"
}, },
"performance-improvement": { "performance-improvement": {
"description": "تحسين الأداء عبر تفعيل السكربتات التجريبية", "description": "تحسين الأداء عبر تفعيل السكربتات التجريبية",
"name": "تحسين الأداء [بيتا]" "name": "تحسين الأداء [تجريبي]"
}, },
"picture-in-picture": { "picture-in-picture": {
"description": "يسمح بتحويل التطبيق إلى وضع الصورة داخل الصورة", "description": "يسمح بتحويل التطبيق إلى وضع الصورة داخل الصورة",
"menu": { "menu": {
"always-on-top": "دائمًا في الأعلى", "always-on-top": "دائمًا في المقدمة",
"hotkey": { "hotkey": {
"label": "مفتاح اختصار", "label": "مفتاح اختصار",
"prompt": { "prompt": {
@ -670,7 +687,7 @@
"save-window-size": "حفظ حجم النافذة", "save-window-size": "حفظ حجم النافذة",
"use-native-pip": "استخدام وضع الصورة داخل الصورة الأصلي للمتصفح" "use-native-pip": "استخدام وضع الصورة داخل الصورة الأصلي للمتصفح"
}, },
"name": "الصورة داخل الصورة", "name": "وضع الصورة داخل الصورة",
"templates": { "templates": {
"button": "وضع الصورة داخل الصورة" "button": "وضع الصورة داخل الصورة"
} }
@ -683,7 +700,7 @@
} }
}, },
"precise-volume": { "precise-volume": {
"description": "التحكم في مستوى الصوت بدقة باستخدام عجلة الفأرة/مفاتيح الاختصار، مع واجهة مستخدم مخصصة وقابلة للتخصيص وخطوات صوتية قابلة للتعديل", "description": "التحكم في مستوى الصوت بدقة باستخدام عجلة الفأرة/مفاتيح الاختصار، مع واجهة مستخدم مخصصة وخطوات صوتية قابلة للتخصيص",
"menu": { "menu": {
"arrows-shortcuts": "عناصر التحكم بأسهم المفاتيح", "arrows-shortcuts": "عناصر التحكم بأسهم المفاتيح",
"custom-volume-steps": "تعيين خطوات صوتية خاصة", "custom-volume-steps": "تعيين خطوات صوتية خاصة",
@ -728,8 +745,8 @@
"dialog": { "dialog": {
"lastfm": { "lastfm": {
"auth-failed": { "auth-failed": {
"message": "فشل المصادقة مع Last.fm\nإخفاء النافذة المنبثقة حتى إعادة التشغيل التالية.", "message": "فشل التفويض مع Last.fm\nإخفاء النافذة المصغرة حتى إعادة التشغيل التالية.",
"title": "فشلت المصادقة" "title": "فشل التفويض"
} }
} }
}, },
@ -740,6 +757,7 @@
"listenbrainz": { "listenbrainz": {
"token": "أدخل رمز مستخدم ListenBrainz" "token": "أدخل رمز مستخدم ListenBrainz"
}, },
"scrobble-alternative-artist": "استخدم فنانين بديلين",
"scrobble-alternative-title": "استخدم عناوين بديلة", "scrobble-alternative-title": "استخدم عناوين بديلة",
"scrobble-other-media": "Scrobble الوسائط الأخرى" "scrobble-other-media": "Scrobble الوسائط الأخرى"
}, },
@ -758,12 +776,12 @@
} }
}, },
"shortcuts": { "shortcuts": {
"description": "يسمح بضبط اختصارات لوحة المفاتيح العالمية للتحكم في التشغيل (تشغيل/إيقاف مؤقت/التالي/السابق) وإيقاف تشغيل OSD الوسائط عن طريق تجاوز مفاتيح الوسائط، وتشغيل Ctrl/CMD + F للبحث، وتفعيل دعم Linux MPRIS لمفاتيح الوسائط، واختصارات مخصصة للمستخدمين المتقدمين", "description": "يسمح بضبط اختصارات لوحة المفاتيح للتحكم في التشغيل (تشغيل/إيقاف/التالي/السابق) وإيقاف تشغيل OSD الوسائط عن طريق تجاوز مفاتيح الوسائط، وتشغيل Ctrl/CMD + F للبحث، وتفعيل دعم Linux MPRIS لمفاتيح الوسائط، واختصارات مخصصة للمستخدمين المتقدمين",
"menu": { "menu": {
"override-media-keys": "تجاوز مفاتيح الوسائط", "override-media-keys": "تجاوز مفاتيح الوسائط",
"set-keybinds": "تعيين عناصر التحكم بالأغاني" "set-keybinds": "تعيين عناصر التحكم بالأغاني"
}, },
"name": "الاختصارات (& MPRIS)", "name": "الاختصارات (و MPRIS)",
"prompt": { "prompt": {
"keybind": { "keybind": {
"keybind-options": { "keybind-options": {
@ -772,17 +790,17 @@
"previous": "السابق" "previous": "السابق"
}, },
"label": "اختر اختصارات لوحة المفاتيح للتحكم في الأغاني:", "label": "اختر اختصارات لوحة المفاتيح للتحكم في الأغاني:",
"title": "اختصارات لوحة المفاتيح العالمية" "title": "اختصارات لوحة المفاتيح"
} }
} }
}, },
"skip-disliked-songs": { "skip-disliked-songs": {
"description": "تخطي الأغاني غير المرغوب فيها", "description": "يتخطى الأغاني الغير معجب فيها",
"name": "تخطي الأغاني الغير مرغوب فيها" "name": "تخطي الأغاني الغير معجب فيها"
}, },
"skip-silences": { "skip-silences": {
"description": "تخطي أقسام الصمت تلقائيًا في الأغاني", "description": "تخطي أقسام التي ليس لها صوت تلقائيًا في الأغاني",
"name": "تخطي فترات الصمت" "name": "تخطي الفترات التي ليس لها صوت"
}, },
"sponsorblock": { "sponsorblock": {
"description": "تخطي تلقائيًا الأجزاء غير الموسيقية مثل المقدمة/الختام أو أجزاء مقاطع الفيديو الموسيقية حيث لا يتم تشغيل الأغنية", "description": "تخطي تلقائيًا الأجزاء غير الموسيقية مثل المقدمة/الختام أو أجزاء مقاطع الفيديو الموسيقية حيث لا يتم تشغيل الأغنية",
@ -796,7 +814,7 @@
}, },
"menu": { "menu": {
"default-text-string": { "default-text-string": {
"label": "المسافة الافتراضي بين كلمات الأغاني", "label": "المسافة الافتراضية بين كلمات الأغاني",
"tooltip": "اختر الحرف الافتراضي لاستخدامه في الفجوة بين كلمات الأغنية" "tooltip": "اختر الحرف الافتراضي لاستخدامه في الفجوة بين كلمات الأغنية"
}, },
"line-effect": { "line-effect": {
@ -816,14 +834,22 @@
}, },
"scale": { "scale": {
"label": "تحجيم", "label": "تحجيم",
"tooltip": "تكبير السطر الحالي" "tooltip": "حجم السطر الحالي"
} }
}, },
"tooltip": "اختر التأثير لتطبيقه على السطر الحالي" "tooltip": "اختر التأثير لتطبيقه على السطر الحالي"
}, },
"precise-timing": { "precise-timing": {
"label": "اجعل كلمات الأغنية متزامنة بشكل مثالي", "label": "اجعل كلمات الأغنية متزامنة بشكل مثالي",
"tooltip": "احسب بدقة الملي ثانية عرض السطر التالي (قد يكون له تأثير طفيف على الأداء)" "tooltip": "احسب بدقة الملي ثانية عرض السطر التالي (قد يكون له تأثير صغير على الأداء)"
},
"preferred-provider": {
"label": "المزود المفضل",
"none": {
"label": "لا شيء",
"tooltip": "لا يوجد مزود مفضل"
},
"tooltip": "اختر المزود المفضل للإستخدام"
}, },
"romanization": { "romanization": {
"label": "اجعل الكلمات رومانية", "label": "اجعل الكلمات رومانية",
@ -850,7 +876,7 @@
} }
}, },
"taskbar-mediacontrol": { "taskbar-mediacontrol": {
"description": "التحكم في المشغل من شريط المهام ويندوز", "description": "التحكم في المشغل من شريط مهام ويندوز",
"name": "التحكم بالوسائط من شريط المهام" "name": "التحكم بالوسائط من شريط المهام"
}, },
"touchbar": { "touchbar": {
@ -858,12 +884,21 @@
"name": "شريط اللمس (TouchBar)" "name": "شريط اللمس (TouchBar)"
}, },
"transparent-player": { "transparent-player": {
"description": "يجعل نافذة التطبيق شفافة",
"menu": { "menu": {
"type": { "opacity": {
"label": "الشفافية",
"submenu": { "submenu": {
"acrylic": "زجاجي", "percent": "{{opacity}}٪"
"mica": "حجري", }
"none": "لاشيء" },
"type": {
"label": "النوع",
"submenu": {
"acrylic": "أكريليك",
"mica": "ميكا",
"none": "لاشيء",
"tabbed": "بديل ميكا"
} }
} }
}, },
@ -892,13 +927,13 @@
"mode": { "mode": {
"label": "وضع", "label": "وضع",
"submenu": { "submenu": {
"custom": "تبديل مخصص", "custom": "زر مخصص",
"disabled": "غير مفعل", "disabled": "غير مفعل",
"native": "تبديل طبيعي" "native": "زر طبيعي"
} }
} }
}, },
"name": "تفعيل الفيديو", "name": "زر الفيديو",
"templates": { "templates": {
"button-song": "أغنية", "button-song": "أغنية",
"button-video": "فيديو" "button-video": "فيديو"
@ -907,7 +942,7 @@
"visualizer": { "visualizer": {
"description": "يضيف معاينًا بصريًا للمشغل", "description": "يضيف معاينًا بصريًا للمشغل",
"menu": { "menu": {
"visualizer-type": "نوع المعاينة المصرية" "visualizer-type": "نوع المعاين البصري"
}, },
"name": "معاين بصري" "name": "معاين بصري"
} }

View File

@ -116,7 +116,54 @@
"auto-update": "Avtomatik Yeniləmə", "auto-update": "Avtomatik Yeniləmə",
"hide-menu": { "hide-menu": {
"dialog": { "dialog": {
"message": "Menu will be hidden on next launch, use [Alt] to show it (or backtick [`] if using in-app-menu)" "message": "Menyu növbəti açılışda gizlədiləcək, göstərmək üçün [Alt] düyməsini basın (proqramdaxili menyudan istifadə edildikdə isə, [`] düyməsi).",
"title": "Menyu gizlətmə aktivdir"
},
"label": "Menyunu gizlət"
},
"language": {
"dialog": {
"message": "Dil yenidən başlatmadan sonra dəyişiləcək",
"title": "Dil dəyişdirildi"
},
"label": "Dil",
"submenu": {
"to-help-translate": "Tərcüməyə kömək etmək istəyirsiniz? Buraya basın"
}
},
"resume-on-start": "Tətbiq başladıqda son mahnıdan davam et",
"single-instance-lock": "Tək proqram kilidi",
"start-at-login": "Giriş səhifəsində başlat",
"starting-page": {
"label": "Giriş səhifəsi",
"unset": "Təyin edilməyib"
},
"tray": {
"submenu": {
"disabled": "Deaktiv edilib"
}
},
"visual-tweaks": {
"label": "Vizual düzəlişlər",
"submenu": {
"custom-window-title": {
"prompt": {
"placeholder": "Nümunə: Pear Desktop"
}
},
"like-buttons": {
"default": "Standart",
"hide": "Gizlət"
},
"remove-upgrade-button": "Yeniləmə düyməsini sil",
"theme": {
"dialog": {
"button": {
"cancel": "Ləğv et",
"remove": "Sil"
}
}
}
} }
} }
} }

View File

@ -0,0 +1 @@
{}

View File

@ -154,7 +154,7 @@
"label": "Персонализирано заглавие на прозорец", "label": "Персонализирано заглавие на прозорец",
"prompt": { "prompt": {
"label": "Въведи персонализирано заглавие: (остави празно за да изключиш)", "label": "Въведи персонализирано заглавие: (остави празно за да изключиш)",
"placeholder": "Пример: Youtube Music" "placeholder": "Пример: Pear Desktop"
} }
}, },
"like-buttons": { "like-buttons": {
@ -208,8 +208,8 @@
"restart": "Рестартирай приложението", "restart": "Рестартирай приложението",
"show": "Покажи прозорец", "show": "Покажи прозорец",
"tooltip": { "tooltip": {
"default": "YouTube Музика", "default": "Pear Desktop",
"with-song-info": "YouTube Музика: {{artist}} - {{title}}" "with-song-info": "Pear Desktop: {{artist}} - {{title}}"
} }
} }
}, },
@ -287,7 +287,7 @@
"name": "Атмосферен режим" "name": "Атмосферен режим"
}, },
"amuse": { "amuse": {
"description": "Добавя поддръжка на YouTube Music за джаджата Amuse Now Play от 6K Labs", "description": "Добавя поддръжка на Pear Desktop за джаджата Amuse Now Play от 6K Labs",
"name": "Забавление", "name": "Забавление",
"response": { "response": {
"query": "Сървърът на Amuse API работи. Изпратете GET /query за информация за песента." "query": "Сървърът на Amuse API работи. Изпратете GET /query за информация за песента."
@ -369,11 +369,11 @@
"name": "Размазанa навигационна лента" "name": "Размазанa навигационна лента"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "Избягване на възрастова верификация на YouTube", "description": "Избягване на възрастова верификация на Music Player",
"name": "Избягване на възрастови ограничения" "name": "Избягване на възрастови ограничения"
}, },
"captions-selector": { "captions-selector": {
"description": "Избор на надписи за аудио тракове в YouTube Music", "description": "Избор на надписи за аудио тракове в Pear Desktop",
"menu": { "menu": {
"autoload": "Автоматично избиране на последно използвания надпис", "autoload": "Автоматично избиране на последно използвания надпис",
"disable-captions": "Без надписи по подразбиране" "disable-captions": "Без надписи по подразбиране"
@ -456,14 +456,14 @@
"disconnected": "Прекъснато", "disconnected": "Прекъснато",
"hide-duration-left": "Скрий оставащото време", "hide-duration-left": "Скрий оставащото време",
"hide-github-button": "Скрий бутона за линк към GitHub", "hide-github-button": "Скрий бутона за линк към GitHub",
"play-on-youtube-music": "Възпроизведи в YouTube Music", "play-on-pear-desktop": "Възпроизведи в Pear Desktop",
"set-inactivity-timeout": "Задай таймаут за неактивност", "set-inactivity-timeout": "Задай таймаут за неактивност",
"set-status-display-type": { "set-status-display-type": {
"label": "Статус текст", "label": "Статус текст",
"submenu": { "submenu": {
"artist": "Слушам {artist}", "artist": "Слушам {artist}",
"title": "Слушам {song title}", "title": "Слушам {song title}",
"youtube-music": "Слушам YouTube Music" "pear-desktop": "Слушам Pear Desktop"
} }
} }
}, },

View File

@ -154,7 +154,7 @@
"label": "কাস্টম উইন্ডো টাইটেল", "label": "কাস্টম উইন্ডো টাইটেল",
"prompt": { "prompt": {
"label": "নিজস্ব উইন্ডোর টাইটেল দিন (বন্ধ করতে ফাঁকা রাখুন)", "label": "নিজস্ব উইন্ডোর টাইটেল দিন (বন্ধ করতে ফাঁকা রাখুন)",
"placeholder": "উদাহরণস্বরূপ: YouTube Music" "placeholder": "উদাহরণস্বরূপ: Pear Desktop"
} }
}, },
"like-buttons": { "like-buttons": {
@ -443,7 +443,7 @@
"disconnected": "সংযোগ বিচ্ছিন্ন", "disconnected": "সংযোগ বিচ্ছিন্ন",
"hide-duration-left": "অবশিষ্ট সময় লুকান", "hide-duration-left": "অবশিষ্ট সময় লুকান",
"hide-github-button": "গিটহাব লিঙ্ক বাটন লুকান", "hide-github-button": "গিটহাব লিঙ্ক বাটন লুকান",
"play-on-youtube-music": "ইউটিউব মিউজিকে চালান", "play-on-pear-desktop": "ইউটিউব মিউজিকে চালান",
"set-inactivity-timeout": "নিষ্ক্রিয়তার সময়সীমা সেট করুন" "set-inactivity-timeout": "নিষ্ক্রিয়তার সময়সীমা সেট করুন"
}, },
"name": "ডিসকর্ড রিচ প্রেজেন্স", "name": "ডিসকর্ড রিচ প্রেজেন্স",

View File

@ -154,7 +154,7 @@
"label": "Prilagođeni naslov prozora", "label": "Prilagođeni naslov prozora",
"prompt": { "prompt": {
"label": "Unesite vlastiti naslov prozora: (ostavite prazno za isključenje)", "label": "Unesite vlastiti naslov prozora: (ostavite prazno za isključenje)",
"placeholder": "Primjer: YouTube Music" "placeholder": "Primjer: Pear Desktop"
} }
}, },
"like-buttons": { "like-buttons": {

View File

@ -154,7 +154,7 @@
"label": "Títol personalitzat de la finestra", "label": "Títol personalitzat de la finestra",
"prompt": { "prompt": {
"label": "Introdueix un títol personalitzat per a la finestra (deixa-ho buit per deshabilitar-ho)", "label": "Introdueix un títol personalitzat per a la finestra (deixa-ho buit per deshabilitar-ho)",
"placeholder": "Exemple: YouTube Music" "placeholder": "Exemple: Pear Desktop"
} }
}, },
"like-buttons": { "like-buttons": {
@ -208,8 +208,8 @@
"restart": "Reinicia l'aplicació", "restart": "Reinicia l'aplicació",
"show": "Mostra la finestra", "show": "Mostra la finestra",
"tooltip": { "tooltip": {
"default": "YouTube Music", "default": "Pear Desktop",
"with-song-info": "YouTube Music: {{artist}} - {{title}}" "with-song-info": "Pear Desktop: {{artist}} - {{title}}"
} }
} }
}, },
@ -287,7 +287,7 @@
"name": "Mode ambient" "name": "Mode ambient"
}, },
"amuse": { "amuse": {
"description": "Afegeix suport a Youtube Music per el widget \"now playing\" d'Amuse per 6K Labs", "description": "Afegeix suport a Pear Desktop per el widget \"now playing\" d'Amuse per 6K Labs",
"name": "Amuse", "name": "Amuse",
"response": { "response": {
"query": "L'API del servidor de Amuse està funcionant. GET /query per tenir informació de la cançó." "query": "L'API del servidor de Amuse està funcionant. GET /query per tenir informació de la cançó."
@ -369,11 +369,11 @@
"name": "Desenfoca la barra de navegació" "name": "Desenfoca la barra de navegació"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "Esquiva la verificació d'edat de YouTube", "description": "Esquiva la verificació d'edat de Music Player",
"name": "Esquiva les restriccions d'edat" "name": "Esquiva les restriccions d'edat"
}, },
"captions-selector": { "captions-selector": {
"description": "Selector de subtítols per les pistes d'àudio de YouTube Music", "description": "Selector de subtítols per les pistes d'àudio de Pear Desktop",
"menu": { "menu": {
"autoload": "Selecciona automàticament l'últim subtítol emprat", "autoload": "Selecciona automàticament l'últim subtítol emprat",
"disable-captions": "Sense subtítols per defecte" "disable-captions": "Sense subtítols per defecte"
@ -456,14 +456,14 @@
"disconnected": "Desconnectat", "disconnected": "Desconnectat",
"hide-duration-left": "Amaga la durada restant", "hide-duration-left": "Amaga la durada restant",
"hide-github-button": "Amaga el botó de l'enllaç a GitHub", "hide-github-button": "Amaga el botó de l'enllaç a GitHub",
"play-on-youtube-music": "Reprodueix a YouTube Music", "play-on-pear-desktop": "Reprodueix a Pear Desktop",
"set-inactivity-timeout": "Estableix temps d'espera d'inactivitat", "set-inactivity-timeout": "Estableix temps d'espera d'inactivitat",
"set-status-display-type": { "set-status-display-type": {
"label": "Text d'estat", "label": "Text d'estat",
"submenu": { "submenu": {
"artist": "Escoltant {artist}", "artist": "Escoltant {artist}",
"title": "Escoltant {song title}", "title": "Escoltant {song title}",
"youtube-music": "Escoltant YouTube Music" "pear-desktop": "Escoltant Pear Desktop"
} }
} }
}, },

View File

@ -154,7 +154,7 @@
"label": "Vlastní název okna", "label": "Vlastní název okna",
"prompt": { "prompt": {
"label": "Zadejte vlastní název okna: (zanechejte prázdné pro zakázání)", "label": "Zadejte vlastní název okna: (zanechejte prázdné pro zakázání)",
"placeholder": "Příklad: Hudba YouTube" "placeholder": "Příklad: Pear Desktop"
} }
}, },
"like-buttons": { "like-buttons": {
@ -208,8 +208,8 @@
"restart": "Restartovat aplikaci", "restart": "Restartovat aplikaci",
"show": "Zobrazit okno", "show": "Zobrazit okno",
"tooltip": { "tooltip": {
"default": "Youtube Music", "default": "Pear Desktop",
"with-song-info": "YouTube Music: {{artist}} - {{title}}" "with-song-info": "Pear Desktop: {{artist}} - {{title}}"
} }
} }
}, },
@ -287,7 +287,7 @@
"name": "Ambientní režim" "name": "Ambientní režim"
}, },
"amuse": { "amuse": {
"description": "Přídá YouTube Music podporu pro Amuse právě hraje widget od 6K Labs", "description": "Přídá Pear Desktop podporu pro Amuse právě hraje widget od 6K Labs",
"name": "Amuse", "name": "Amuse",
"response": { "response": {
"query": "Server Amuse API běží. Pošli požadavek typu GET na /query, aby ses dozvěděl info o písničce." "query": "Server Amuse API běží. Pošli požadavek typu GET na /query, aby ses dozvěděl info o písničce."
@ -337,7 +337,7 @@
} }
}, },
"audio-compressor": { "audio-compressor": {
"description": "Apply compression k audiu (snižuje hlasitost nejhlasitěších částí signálu and zvyšuje hlasitost nejjemnějších částí)", "description": "Aplikuje kompresi k audiu (snižuje hlasitost nejhlasitěších částí signálu a zvyšuje hlasitost nejjemnějších částí)",
"name": "Audio kompresor" "name": "Audio kompresor"
}, },
"auth-proxy-adapter": { "auth-proxy-adapter": {
@ -369,11 +369,11 @@
"name": "Rozmazaný navigační panel" "name": "Rozmazaný navigační panel"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "Obejít ověření věku na YouTube", "description": "Obejít ověření věku na Music Player",
"name": "Obejít věková omezení" "name": "Obejít věková omezení"
}, },
"captions-selector": { "captions-selector": {
"description": "Titulkový selector pro zvukové stopy v YouTube Music", "description": "Titulkový selector pro zvukové stopy v Pear Desktop",
"menu": { "menu": {
"autoload": "Automaticky vybrat naposledy použité titulky", "autoload": "Automaticky vybrat naposledy použité titulky",
"disable-captions": "Žádné titulky ve vychozím nastavení" "disable-captions": "Žádné titulky ve vychozím nastavení"
@ -456,14 +456,14 @@
"disconnected": "Odpojeno", "disconnected": "Odpojeno",
"hide-duration-left": "Skrýt zbývající duration", "hide-duration-left": "Skrýt zbývající duration",
"hide-github-button": "Skrýt tlačítko s odkazem na GitHub", "hide-github-button": "Skrýt tlačítko s odkazem na GitHub",
"play-on-youtube-music": "Hrát na YouTube Music", "play-on-pear-desktop": "Hrát na Pear Desktop",
"set-inactivity-timeout": "Nastavit timeout pro neaktivitu", "set-inactivity-timeout": "Nastavit timeout pro neaktivitu",
"set-status-display-type": { "set-status-display-type": {
"label": "Text statusu", "label": "Text statusu",
"submenu": { "submenu": {
"artist": "Poslouchám: {artist}", "artist": "Poslouchám: {artist}",
"title": "Poslouchám {song title}", "pear-desktop": "Poslouchám Pear Desktop",
"youtube-music": "Poslouchám YouTube Music" "title": "Poslouchám {song title}"
} }
} }
}, },

View File

@ -154,7 +154,7 @@
"label": "Tilpasset vindues titel", "label": "Tilpasset vindues titel",
"prompt": { "prompt": {
"label": "Indtast tilpasset vindues titel: (lad være top for deaktiveret)", "label": "Indtast tilpasset vindues titel: (lad være top for deaktiveret)",
"placeholder": "Eksempel: YouTube Music" "placeholder": "Eksempel: Pear Desktop"
} }
}, },
"like-buttons": { "like-buttons": {
@ -206,8 +206,8 @@
"restart": "Genstart app", "restart": "Genstart app",
"show": "Vis vindue", "show": "Vis vindue",
"tooltip": { "tooltip": {
"default": "YouTube Music", "default": "Pear Desktop",
"with-song-info": "YouTube Music: {{artist}} - {{title}}" "with-song-info": "Pear Desktop: {{artist}} - {{title}}"
} }
} }
}, },

View File

@ -3,7 +3,7 @@
"console": { "console": {
"plugins": { "plugins": {
"execute-failed": "Erweiterung {{pluginName}}::{{contextName}} konnte nicht ausgeführt werden", "execute-failed": "Erweiterung {{pluginName}}::{{contextName}} konnte nicht ausgeführt werden",
"executed-at-ms": "Erweiterung {{pluginName}}::{{contextName}} ausgeführt in {{ms}}ms", "executed-at-ms": "Erweiterung {{pluginName}}::{{contextName}} in {{ms}}ms ausgeführt",
"initialize-failed": "Initialisierung der Erweiterung \"{{pluginName}}\" fehlgeschlagen", "initialize-failed": "Initialisierung der Erweiterung \"{{pluginName}}\" fehlgeschlagen",
"load-all": "Lade alle Erweiterungen", "load-all": "Lade alle Erweiterungen",
"load-failed": "Laden der Erweiterung \"{{pluginName}}\" fehlgeschlagen", "load-failed": "Laden der Erweiterung \"{{pluginName}}\" fehlgeschlagen",
@ -154,7 +154,7 @@
"label": "Benutzerdefinierter Fenstertitel", "label": "Benutzerdefinierter Fenstertitel",
"prompt": { "prompt": {
"label": "Benutzerdefinierten Fenstertitel eingeben: (zum Deaktivieren leer lassen)", "label": "Benutzerdefinierten Fenstertitel eingeben: (zum Deaktivieren leer lassen)",
"placeholder": "Beispiel: YouTube Music" "placeholder": "Beispiel: Pear Desktop"
} }
}, },
"like-buttons": { "like-buttons": {
@ -208,8 +208,8 @@
"restart": "Anwendung neu starten", "restart": "Anwendung neu starten",
"show": "Fenster anzeigen", "show": "Fenster anzeigen",
"tooltip": { "tooltip": {
"default": "YouTube Musik", "default": "Pear Desktop",
"with-song-info": "YouTube Musik: {{artist}} - {{title}}" "with-song-info": "Pear Desktop: {{artist}} - {{title}}"
} }
} }
}, },
@ -369,11 +369,11 @@
"name": "Verschwommene Navigationsleiste" "name": "Verschwommene Navigationsleiste"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "Youtubes Altersbestätigung umgehen", "description": "Music Player Altersbestätigung umgehen",
"name": "Altersbeschränkungen umgehen" "name": "Altersbeschränkungen umgehen"
}, },
"captions-selector": { "captions-selector": {
"description": "Untertitelwähler für YouTube Music-Audio-Lieder", "description": "Untertitelwähler für Pear Desktop-Audio-Lieder",
"menu": { "menu": {
"autoload": "Wähle automatisch den zuletzt verwendeten Untertitel", "autoload": "Wähle automatisch den zuletzt verwendeten Untertitel",
"disable-captions": "Standardmäßig keine Untertitel" "disable-captions": "Standardmäßig keine Untertitel"
@ -456,14 +456,14 @@
"disconnected": "Getrennt", "disconnected": "Getrennt",
"hide-duration-left": "Verbleibende Zeit verstecken", "hide-duration-left": "Verbleibende Zeit verstecken",
"hide-github-button": "Knopf mit Link zu GitHub ausblenden", "hide-github-button": "Knopf mit Link zu GitHub ausblenden",
"play-on-youtube-music": "Auf YouTube Music abspielen", "play-on-pear-desktop": "Auf Pear Desktop abspielen",
"set-inactivity-timeout": "Inaktivitätstimeout setzen", "set-inactivity-timeout": "Inaktivitätstimeout setzen",
"set-status-display-type": { "set-status-display-type": {
"label": "Status Text", "label": "Status Text",
"submenu": { "submenu": {
"artist": "Hört {artist} zu", "artist": "Hört {artist} zu",
"title": "Du hörst {song title}", "pear-desktop": "Hört Pear Desktop",
"youtube-music": "Hört YouTube Music" "title": "Du hörst {song title}"
} }
} }
}, },

View File

@ -154,7 +154,7 @@
"label": "Προσαρμοσμένος τίτλος παραθύρου", "label": "Προσαρμοσμένος τίτλος παραθύρου",
"prompt": { "prompt": {
"label": "Εισαγωγή προσαρμοσμένου τίτλου παραθύρου: (κενό για απενεργοποίηση)", "label": "Εισαγωγή προσαρμοσμένου τίτλου παραθύρου: (κενό για απενεργοποίηση)",
"placeholder": "Παράδειγμα: YouTube Music" "placeholder": "Παράδειγμα: Pear Desktop"
} }
}, },
"like-buttons": { "like-buttons": {
@ -208,8 +208,8 @@
"restart": "Επανεκκίνηση εφαρμογής", "restart": "Επανεκκίνηση εφαρμογής",
"show": "Εμφάνιση παραθύρου", "show": "Εμφάνιση παραθύρου",
"tooltip": { "tooltip": {
"default": "YouTube Music", "default": "Pear Desktop",
"with-song-info": "YouTube Music: {{artist}} - {{title}}" "with-song-info": "Pear Desktop: {{artist}} - {{title}}"
} }
} }
}, },
@ -287,7 +287,7 @@
"name": "Λειτουργία περιβάλλοντος" "name": "Λειτουργία περιβάλλοντος"
}, },
"amuse": { "amuse": {
"description": "Προσθέτει υποστήριξη YouTube Music στο widget Amuse now playing από την 6K Labs", "description": "Προσθέτει υποστήριξη Pear Desktop στο widget Amuse now playing από την 6K Labs",
"name": "Amuse", "name": "Amuse",
"response": { "response": {
"query": "Ο διακομιστής Amuse API εκτελείται. GET /query για να λάβετε πληροφορίες για το τραγούδι." "query": "Ο διακομιστής Amuse API εκτελείται. GET /query για να λάβετε πληροφορίες για το τραγούδι."
@ -369,11 +369,11 @@
"name": "Θόλωμα γραμμής πλοήγησης" "name": "Θόλωμα γραμμής πλοήγησης"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "Παράκαμψη επαλήθευσης ηλικίας στο YouTube", "description": "Παράκαμψη επαλήθευσης ηλικίας στο Music Player",
"name": "Παράκαμψη ηλικιακών περιορισμών" "name": "Παράκαμψη ηλικιακών περιορισμών"
}, },
"captions-selector": { "captions-selector": {
"description": "Επιλογέας λεζάντας για μουσικά κομμάτια ήχου του YouTube", "description": "Επιλογέας λεζάντας για μουσικά κομμάτια ήχου του Pear Desktop",
"menu": { "menu": {
"autoload": "Αυτόματη επιλογή της τελευταίας χρησιμοποιούμενης λεζάντας", "autoload": "Αυτόματη επιλογή της τελευταίας χρησιμοποιούμενης λεζάντας",
"disable-captions": "Χωρίς λεζάντες από προεπιλογή" "disable-captions": "Χωρίς λεζάντες από προεπιλογή"
@ -443,7 +443,7 @@
"disconnected": "Αποσυνδεδεμένο", "disconnected": "Αποσυνδεδεμένο",
"hide-duration-left": "Απόκρυψη της διάρκειας που απομένει", "hide-duration-left": "Απόκρυψη της διάρκειας που απομένει",
"hide-github-button": "Απόκρυψη κουμπιού συνδέσμου GitHub", "hide-github-button": "Απόκρυψη κουμπιού συνδέσμου GitHub",
"play-on-youtube-music": "Αναπαραγωγή στο YouTube Music", "play-on-pear-desktop": "Αναπαραγωγή στο Pear Desktop",
"set-inactivity-timeout": "Ορισμός χρονικού ορίου αδράνειας" "set-inactivity-timeout": "Ορισμός χρονικού ορίου αδράνειας"
}, },
"name": "Discord Πλούσια παρουσία", "name": "Discord Πλούσια παρουσία",

View File

@ -160,7 +160,7 @@
"label": "Custom window title", "label": "Custom window title",
"prompt": { "prompt": {
"label": "Enter custom window title: (leave empty to disable)", "label": "Enter custom window title: (leave empty to disable)",
"placeholder": "Example: YouTube Music" "placeholder": "Example: Pear Desktop"
} }
}, },
"remove-upgrade-button": "Remove upgrade button", "remove-upgrade-button": "Remove upgrade button",
@ -208,8 +208,8 @@
"restart": "Restart App", "restart": "Restart App",
"show": "Show window", "show": "Show window",
"tooltip": { "tooltip": {
"default": "YouTube Music", "default": "Pear Desktop",
"with-song-info": "YouTube Music: {{artist}} - {{title}}" "with-song-info": "Pear Desktop: {{artist}} - {{title}}"
} }
} }
}, },
@ -237,7 +237,8 @@
"submenu": { "submenu": {
"percent": "{{ratio}}%" "percent": "{{ratio}}%"
} }
} },
"enable-seekbar": "Enable seekbar theming"
}, },
"name": "Album Color Theme" "name": "Album Color Theme"
}, },
@ -287,7 +288,7 @@
"name": "Ambient Mode" "name": "Ambient Mode"
}, },
"amuse": { "amuse": {
"description": "Adds YouTube Music support for the Amuse now playing widget by 6K Labs", "description": "Adds Pear Desktop support for the Amuse now playing widget by 6K Labs",
"name": "Amuse", "name": "Amuse",
"response": { "response": {
"query": "Amuse API server is running. GET /query to get song info." "query": "Amuse API server is running. GET /query to get song info."
@ -369,11 +370,11 @@
"name": "Blur Navigation Bar" "name": "Blur Navigation Bar"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "Bypass YouTube's age verification", "description": "Bypass Music Player's age verification",
"name": "Bypass Age Restrictions" "name": "Bypass Age Restrictions"
}, },
"captions-selector": { "captions-selector": {
"description": "Caption selector for YouTube Music audio tracks", "description": "Caption selector for Pear Desktop audio tracks",
"menu": { "menu": {
"autoload": "Automatically select last used caption", "autoload": "Automatically select last used caption",
"disable-captions": "No captions by default" "disable-captions": "No captions by default"
@ -456,12 +457,12 @@
"disconnected": "Disconnected", "disconnected": "Disconnected",
"hide-duration-left": "Hide duration left", "hide-duration-left": "Hide duration left",
"hide-github-button": "Hide GitHub link Button", "hide-github-button": "Hide GitHub link Button",
"play-on-youtube-music": "Play on YouTube Music", "play-on-pear-desktop": "Play on Pear Desktop",
"set-inactivity-timeout": "Set inactivity timeout", "set-inactivity-timeout": "Set inactivity timeout",
"set-status-display-type": { "set-status-display-type": {
"label": "Status text", "label": "Status text",
"submenu": { "submenu": {
"youtube-music": "Listening to YouTube Music", "pear-desktop": "Listening to Pear Desktop",
"artist": "Listening to {artist}", "artist": "Listening to {artist}",
"title": "Listening to {song title}" "title": "Listening to {song title}"
} }

View File

@ -154,7 +154,7 @@
"label": "Título de ventana personalizado", "label": "Título de ventana personalizado",
"prompt": { "prompt": {
"label": "Ingresa un título de ventana personalizado: (déjalo vacío para desactivar)", "label": "Ingresa un título de ventana personalizado: (déjalo vacío para desactivar)",
"placeholder": "Ejemplo: YouTube Music" "placeholder": "Ejemplo: Pear Desktop"
} }
}, },
"like-buttons": { "like-buttons": {
@ -208,8 +208,8 @@
"restart": "Reiniciar la aplicación", "restart": "Reiniciar la aplicación",
"show": "Mostrar ventana", "show": "Mostrar ventana",
"tooltip": { "tooltip": {
"default": "YouTube Music", "default": "Pear Desktop",
"with-song-info": "YouTube Music: {{artist}} - {{title}}" "with-song-info": "Pear Desktop: {{artist}} - {{title}}"
} }
} }
}, },
@ -287,7 +287,7 @@
"name": "Modo ambiente" "name": "Modo ambiente"
}, },
"amuse": { "amuse": {
"description": "Agrega soporte a YouTube Music para el widget \"reproduciendo\" de Amuse por 6K Labs", "description": "Agrega soporte a Pear Desktop para el widget \"reproduciendo\" de Amuse por 6K Labs",
"name": "Amuse", "name": "Amuse",
"response": { "response": {
"query": "El servidor API de Amuse se está ejecutando. Usa GET /query para obtener información de la canción." "query": "El servidor API de Amuse se está ejecutando. Usa GET /query para obtener información de la canción."
@ -369,11 +369,11 @@
"name": "Desenfocar barra de navegación" "name": "Desenfocar barra de navegación"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "Saltarse la verificación de edad de YouTube", "description": "Saltarse la verificación de edad de Music Player",
"name": "Saltarse las restricciones de edad" "name": "Saltarse las restricciones de edad"
}, },
"captions-selector": { "captions-selector": {
"description": "Selector de subtítulos para pistas de audio de YouTube Music", "description": "Selector de subtítulos para pistas de audio de Pear Desktop",
"menu": { "menu": {
"autoload": "Seleccionar automáticamente el último subtítulo utilizado", "autoload": "Seleccionar automáticamente el último subtítulo utilizado",
"disable-captions": "Sin subtítulos por defecto" "disable-captions": "Sin subtítulos por defecto"
@ -456,14 +456,14 @@
"disconnected": "Desconectado", "disconnected": "Desconectado",
"hide-duration-left": "Ocultar la duración restante", "hide-duration-left": "Ocultar la duración restante",
"hide-github-button": "Ocultar el botón de enlace a GitHub", "hide-github-button": "Ocultar el botón de enlace a GitHub",
"play-on-youtube-music": "Reproducir en YouTube Music", "play-on-pear-desktop": "Reproducir en Pear Desktop",
"set-inactivity-timeout": "Establecer tiempo de inactividad", "set-inactivity-timeout": "Establecer tiempo de inactividad",
"set-status-display-type": { "set-status-display-type": {
"label": "Texto de estado", "label": "Texto de estado",
"submenu": { "submenu": {
"artist": "Escuchando a {artist}", "artist": "Escuchando a {artist}",
"title": "Escuchando {song title}", "title": "Escuchando {song title}",
"youtube-music": "Escuchando YouTube Music" "pear-desktop": "Escuchando Pear Desktop"
} }
} }
}, },

View File

@ -31,6 +31,15 @@
}, },
"theme": { "theme": {
"css-file-not-found": "CSS faili „{{cssFile}}“ pole olemas, seega eirame eelistust" "css-file-not-found": "CSS faili „{{cssFile}}“ pole olemas, seega eirame eelistust"
},
"unresponsive": {
"details": "Tõrge ei vasta!\n{{error}}"
},
"when-ready": {
"clearing-cache-after-20s": "Programmi vahemälu kustutamine"
},
"window": {
"tried-to-render-offscreen": "Akent prooviti renderdada väljaspool ekraani, windowSize={{windowSize}}, displaySize={{displaySize}}, position={{position}}"
} }
}, },
"dialog": { "dialog": {
@ -89,9 +98,29 @@
"submenu": { "submenu": {
"auto-reset-app-cache": "Rakenduse käivitamisel lähtesta puhverdatud andmed", "auto-reset-app-cache": "Rakenduse käivitamisel lähtesta puhverdatud andmed",
"disable-hardware-acceleration": "Lülita raudvaraline kiirendamine välja", "disable-hardware-acceleration": "Lülita raudvaraline kiirendamine välja",
"edit-config-json": "Muuda config.json faili" "edit-config-json": "Muuda config.json faili",
"override-user-agent": "Jõudlusta User-Agent",
"restart-on-config-changes": "Taaskäivita pärast konfiguratsiooni muutmist",
"set-proxy": {
"label": "Määra proxy",
"prompt": {
"label": "Sisesta proxy aadress: (jäta täitmata, et välja lülitada)",
"placeholder": "Näide: SOCKS5://127.0.0.1:9999",
"title": "Määra proxy"
}
},
"toggle-dev-tools": "Lülita sisse arendaja tööriistad"
} }
}, },
"always-on-top": "Alati esiplaanil",
"auto-update": "Automaatsed uuendused",
"hide-menu": {
"dialog": {
"message": "Järgmisel käivitamisel jääb menüü peidetuks, kasutage [Alt] klahvi, et näidata (või [`], kui kasutate rakendusesisest menüüd)",
"title": "Menüü peitmine on sisse lülitatud"
},
"label": "Peida menüü"
},
"language": { "language": {
"dialog": { "dialog": {
"message": "Keele muutmine jõustub peale uuesti käivitamist", "message": "Keele muutmine jõustub peale uuesti käivitamist",
@ -102,15 +131,69 @@
"to-help-translate": "Soovid aidata tõlkimisel? Klõpsi siin" "to-help-translate": "Soovid aidata tõlkimisel? Klõpsi siin"
} }
}, },
"resume-on-start": "Rakenduse käivitamisel jätka viimatiesitatud loo esitamist" "resume-on-start": "Rakenduse käivitamisel jätka viimatiesitatud loo esitamist",
"single-instance-lock": "Ühe instantsi lukk",
"start-at-login": "Käivita sisselogimisel",
"starting-page": {
"label": "Avaleht",
"unset": "Määramata"
},
"tray": {
"label": "Trey",
"submenu": {
"disabled": "Välja lülitatud",
"enabled-and-hide-app": "Sisse lülitatud ja rakendus peidetud",
"enabled-and-show-app": "Sisse lülitatud ja rakendus nähtav",
"play-pause-on-click": "Mängi/Peata klõpsates"
}
},
"visual-tweaks": {
"label": "Visuaalsed muudatused",
"submenu": {
"custom-window-title": {
"label": "Kohandatud akna tiitel",
"prompt": {
"label": "Sisesta kohandatud akna tiitel: (jäta täitmata, et välja lülitada)",
"placeholder": "Näide: Pear Desktop"
}
},
"like-buttons": {
"default": "Vaikimisi",
"force-show": "Sunni näitama",
"hide": "Peida",
"label": "Meeldib nupud"
},
"remove-upgrade-button": "Eemalda upgrade nupp",
"theme": {
"dialog": {
"button": {
"cancel": "Katkesta",
"remove": "Eemalda"
},
"remove-theme": "Kas oled kindel, et soovid enda loodud kujunduse eemaldada?",
"remove-theme-message": "Sellega saab sinu loodud kujundus eemdladatud"
},
"label": "Kujundus",
"submenu": {
"import-css-file": "Impordi kohandatud CSS fail",
"no-theme": "Ilma kujunduseta"
}
}
}
}
} }
}, },
"plugins": { "plugins": {
"enabled": "Kasutusel",
"label": "Lisamoodulid", "label": "Lisamoodulid",
"new": "UUS" "new": "UUS"
}, },
"view": { "view": {
"label": "Vaata",
"submenu": { "submenu": {
"force-reload": "Laadi sundkorras uuesti",
"reload": "Laadi uuesti",
"reset-zoom": "Tegelik suurus",
"toggle-fullscreen": "Lülita täisekraanivaade sisse/välja", "toggle-fullscreen": "Lülita täisekraanivaade sisse/välja",
"zoom-in": "Suumi sisse", "zoom-in": "Suumi sisse",
"zoom-out": "Suumi välja" "zoom-out": "Suumi välja"
@ -125,8 +208,8 @@
"restart": "Käivita rakendus uuesti", "restart": "Käivita rakendus uuesti",
"show": "Näita akent", "show": "Näita akent",
"tooltip": { "tooltip": {
"default": "YouTube Music", "default": "Pear Desktop",
"with-song-info": "YouTube Music: {{artist}} - {{title}}" "with-song-info": "Pear Desktop: {{artist}} - {{title}}"
} }
} }
}, },
@ -142,8 +225,28 @@
}, },
"name": "Reklaamiblokeerija" "name": "Reklaamiblokeerija"
}, },
"ambient-mode": { "album-actions": {
"description": "Lisab Undislike, Ebameeldiv, Meeldiv ja Unlike nupud selle rakendamiseks kõikidele loendisse või albumisse kuuluvatele lauludele.",
"name": "Albumi aktsioonid"
},
"album-color-theme": {
"description": "Rakendab dünaamilist teemat ja visuaalseid efekte, mis põhinevad albumi värvipalettil",
"menu": { "menu": {
"color-mix-ratio": {
"label": "Värvide segamissuhe",
"submenu": {
"percent": "{{suhe}}%"
}
}
},
"name": "Albumi värviteema"
},
"ambient-mode": {
"description": "Rakendab valgusefekti, projitseerides videost õrnad värvid ekraani taustale",
"menu": {
"blur-amount": {
"label": "Hägusus"
},
"opacity": { "opacity": {
"submenu": { "submenu": {
"percent": "{{opacity}}%" "percent": "{{opacity}}%"

View File

@ -2,7 +2,7 @@
"common": { "common": {
"console": { "console": {
"plugins": { "plugins": {
"execute-failed": "اجرای افزونه {{pluginName}}::{{contextName}} با خطا مواجه شد", "execute-failed": "اجراى {{اسمزمىنه}}::{{اسمپلاگىن}} با خطا مواجه شد",
"executed-at-ms": "افزونه {{pluginName}}::{{contextName}} در {{ms}} میلی‌ثانیه اجرا شد", "executed-at-ms": "افزونه {{pluginName}}::{{contextName}} در {{ms}} میلی‌ثانیه اجرا شد",
"initialize-failed": "افزونه \"{{pluginName}}\" با خطا در حین مقداردهی اولیه مواجه شد", "initialize-failed": "افزونه \"{{pluginName}}\" با خطا در حین مقداردهی اولیه مواجه شد",
"load-all": "در حال بارگذاری تمامی افزونه‌ها", "load-all": "در حال بارگذاری تمامی افزونه‌ها",
@ -150,6 +150,13 @@
"visual-tweaks": { "visual-tweaks": {
"label": "تغییرات ظاهری", "label": "تغییرات ظاهری",
"submenu": { "submenu": {
"custom-window-title": {
"label": "عنوان پنجره سفارشى",
"prompt": {
"label": "عنوان پنجره سفارشى را وارد کنىد: (خالى بزارىد تا غىرفعال شود)",
"placeholder": "مثال :Pear Desktop"
}
},
"like-buttons": { "like-buttons": {
"default": "پیش‌فرض", "default": "پیش‌فرض",
"force-show": "اجبار به نمایش", "force-show": "اجبار به نمایش",
@ -201,8 +208,8 @@
"restart": "راه‌اندازی مجدد برنامه", "restart": "راه‌اندازی مجدد برنامه",
"show": "نمایش پنجره", "show": "نمایش پنجره",
"tooltip": { "tooltip": {
"default": "یوتیوب موسیقی", "default": "پىر دسکتاپ",
"with-song-info": "یوتیوب موسیقی: {{artist}} - {{title}}" "with-song-info": "پىر دسکتاپ: {{artist}} - {{title}}"
} }
} }
}, },
@ -280,7 +287,7 @@
"name": "حالت محیطی" "name": "حالت محیطی"
}, },
"amuse": { "amuse": {
"description": "حالا ویجت Amuse از YouTube Music هم پشتیبانی می‌کنه! (توسط 6K Labs)", "description": "حالا ویجت Amuse از Pear Desktop هم پشتیبانی می‌کنه! (توسط 6K Labs)",
"name": "Amuse", "name": "Amuse",
"response": { "response": {
"query": "سرور Amuse فعال است. برای دریافت اطلاعات آهنگ، از آدرس /query استفاده کنید." "query": "سرور Amuse فعال است. برای دریافت اطلاعات آهنگ، از آدرس /query استفاده کنید."
@ -362,11 +369,11 @@
"name": "محو کردن نوار کنترل" "name": "محو کردن نوار کنترل"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "دور زدن تأیید سن یوتیوب", "description": "دور زدن تأیید سن مىوزىک پلىر",
"name": "دور زدن محدودیت‌های سنی" "name": "دور زدن محدودیت‌های سنی"
}, },
"captions-selector": { "captions-selector": {
"description": "انتخاب زیرنویس برای آهنگ‌های یوتیوب موسیقی", "description": "انتخاب زیرنویس برای آهنگ‌های پىر دسکتاپ",
"menu": { "menu": {
"autoload": "به طور خودکار انتخاب آخرین زیرنویس استفاده شده", "autoload": "به طور خودکار انتخاب آخرین زیرنویس استفاده شده",
"disable-captions": "بدون زیرنویس به صورت پیش‌فرض" "disable-captions": "بدون زیرنویس به صورت پیش‌فرض"
@ -414,6 +421,19 @@
} }
} }
}, },
"custom-output-device": {
"description": "ىک اسپىکر براى پخش آهنگها انتخاب کنىد",
"menu": {
"device-selector": "دستگاه را انتخاب کنىد"
},
"name": "اسپىکر دلخواه",
"prompt": {
"device-selector": {
"label": "اسپىکر دلخواه را انتخاب کنىد",
"title": "اسپىکر دلخواهتان را انتخاب کنىد"
}
}
},
"disable-autoplay": { "disable-autoplay": {
"description": "شروع آهنگ در حالت \"توقف\"", "description": "شروع آهنگ در حالت \"توقف\"",
"menu": { "menu": {
@ -436,8 +456,16 @@
"disconnected": "اتصال قطع شد", "disconnected": "اتصال قطع شد",
"hide-duration-left": "مخفی کردن مدت زمان باقی‌مانده", "hide-duration-left": "مخفی کردن مدت زمان باقی‌مانده",
"hide-github-button": "مخفی کردن دکمه لینک گیت هاب", "hide-github-button": "مخفی کردن دکمه لینک گیت هاب",
"play-on-youtube-music": "پخش در یوتیوب موزیک", "play-on-pear-desktop": "پخش در یوتیوب موزیک",
"set-inactivity-timeout": "تنظیم زمان عدم فعالیت" "set-inactivity-timeout": "تنظیم زمان عدم فعالیت",
"set-status-display-type": {
"label": "متن وضعىت",
"submenu": {
"artist": "به {artist} گوش مىکند",
"pear-desktop": "به پىر دسکتاپ گوش مىکند",
"title": "به {song title} گوش مىکند"
}
}
}, },
"name": "Discord Rich Presence", "name": "Discord Rich Presence",
"prompt": { "prompt": {
@ -729,6 +757,7 @@
"listenbrainz": { "listenbrainz": {
"token": "توکن کاربری ListenBrainz را وارد کنید" "token": "توکن کاربری ListenBrainz را وارد کنید"
}, },
"scrobble-alternative-artist": "از هنرمند دىگرى استفاده کنىد",
"scrobble-alternative-title": "از عناوین جایگزین استفاده کنید", "scrobble-alternative-title": "از عناوین جایگزین استفاده کنید",
"scrobble-other-media": "ردیابی رسانه‌های دیگر" "scrobble-other-media": "ردیابی رسانه‌های دیگر"
}, },
@ -814,6 +843,14 @@
"label": "هماهنگ‌سازی کامل متن ترانه‌", "label": "هماهنگ‌سازی کامل متن ترانه‌",
"tooltip": "محاسبه دقیق نمایش خط بعدی تا میلی‌ثانیه (ممکن است تاثیر کمی بر عملکرد داشته باشد)" "tooltip": "محاسبه دقیق نمایش خط بعدی تا میلی‌ثانیه (ممکن است تاثیر کمی بر عملکرد داشته باشد)"
}, },
"preferred-provider": {
"label": "منبع دلخواه",
"none": {
"label": "هىچکدام",
"tooltip": "منبح دلخواهى انتخاب نشده"
},
"tooltip": "منبع دلخواهتان را انتخاب کنىد"
},
"romanization": { "romanization": {
"label": "اشعار رومی شده", "label": "اشعار رومی شده",
"tooltip": "اگر اشعار به زبانی متفاوت هستند، سعی کنید نسخه لاتین را نمایش دهید." "tooltip": "اگر اشعار به زبانی متفاوت هستند، سعی کنید نسخه لاتین را نمایش دهید."
@ -846,6 +883,27 @@
"description": "افزودن ویجت TouchBar برای کاربران macOS", "description": "افزودن ویجت TouchBar برای کاربران macOS",
"name": "نوار لمسی" "name": "نوار لمسی"
}, },
"transparent-player": {
"description": "پنجره برنامه را شفاف مىکند",
"menu": {
"opacity": {
"label": "تارى",
"submenu": {
"percent": "%{{تارى}}"
}
},
"type": {
"label": "نوع",
"submenu": {
"acrylic": "اکرىلىک",
"mica": "مىکا",
"none": "هىچکدام",
"tabbed": "نوار دار"
}
}
},
"name": "پلىر شفاف"
},
"tuna-obs": { "tuna-obs": {
"description": "ادغام با پلاگین Tuna در OBS", "description": "ادغام با پلاگین Tuna در OBS",
"name": "Tuna OBS" "name": "Tuna OBS"

View File

@ -154,7 +154,7 @@
"label": "Mukautettu ikkunan otsikko", "label": "Mukautettu ikkunan otsikko",
"prompt": { "prompt": {
"label": "Syötä mukautettu ikkunan otsikko: (jätä tyhjäksi poistaaksesi päältä)", "label": "Syötä mukautettu ikkunan otsikko: (jätä tyhjäksi poistaaksesi päältä)",
"placeholder": "Esimerkki: YouTube Music" "placeholder": "Esimerkki: Pear Desktop"
} }
}, },
"like-buttons": { "like-buttons": {
@ -208,8 +208,8 @@
"restart": "Uudelleen käynnistä appi", "restart": "Uudelleen käynnistä appi",
"show": "Näytä ikkuna", "show": "Näytä ikkuna",
"tooltip": { "tooltip": {
"default": "Youtube Music", "default": "Pear Desktop",
"with-song-info": "Youtube Music {{artist}} - {{title}}" "with-song-info": "Pear Desktop {{artist}} - {{title}}"
} }
} }
}, },
@ -287,7 +287,7 @@
"name": "Tunnelmallinen Tila" "name": "Tunnelmallinen Tila"
}, },
"amuse": { "amuse": {
"description": "Lisää YouTube Music tuen Amusen nyt soitetaan -widgetille, kehittäjänä 6K Labs", "description": "Lisää Pear Desktop tuen Amusen nyt soitetaan -widgetille, kehittäjänä 6K Labs",
"name": "Amuse", "name": "Amuse",
"response": { "response": {
"query": "Amuse API-palvelin on päällä. Käytä GET /query-rajapintaa saadaksesi kappaleen tiedot." "query": "Amuse API-palvelin on päällä. Käytä GET /query-rajapintaa saadaksesi kappaleen tiedot."
@ -369,11 +369,11 @@
"name": "Sumenna Siirtymäpalkki" "name": "Sumenna Siirtymäpalkki"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "Ohita YouTuben iän vahvistus", "description": "Ohita Music Player iän vahvistus",
"name": "Ohita Ikään Perustuvat Rajoitukset" "name": "Ohita Ikään Perustuvat Rajoitukset"
}, },
"captions-selector": { "captions-selector": {
"description": "YouTube Music ääniraitojen tekstitysten valitsin", "description": "Pear Desktop ääniraitojen tekstitysten valitsin",
"menu": { "menu": {
"autoload": "Valitse automaattisesti viimeksi käytetty tekstitys", "autoload": "Valitse automaattisesti viimeksi käytetty tekstitys",
"disable-captions": "Tekstitys ei oletusarvoisesti käytössä" "disable-captions": "Tekstitys ei oletusarvoisesti käytössä"
@ -443,7 +443,7 @@
"disconnected": "Yhteys katkaistu", "disconnected": "Yhteys katkaistu",
"hide-duration-left": "Piilota kappaleen jäljellä oleva kesto", "hide-duration-left": "Piilota kappaleen jäljellä oleva kesto",
"hide-github-button": "Piilota \"linkki GitHubiin\" -nappi", "hide-github-button": "Piilota \"linkki GitHubiin\" -nappi",
"play-on-youtube-music": "Kuuntele palvelussa YouTube Music", "play-on-pear-desktop": "Kuuntele palvelussa Pear Desktop",
"set-inactivity-timeout": "Aseta toimettomuuden aikakatkaisu" "set-inactivity-timeout": "Aseta toimettomuuden aikakatkaisu"
}, },
"name": "Discord Aktiviteetti (Rich Presence)", "name": "Discord Aktiviteetti (Rich Presence)",

View File

@ -154,7 +154,7 @@
"label": "Custom na window title", "label": "Custom na window title",
"prompt": { "prompt": {
"label": "I-enter ang custom na window tile: (iwanang blanko para di-mapagana)", "label": "I-enter ang custom na window tile: (iwanang blanko para di-mapagana)",
"placeholder": "Halimbawa: YouTube Music" "placeholder": "Halimbawa: Pear Desktop"
} }
}, },
"like-buttons": { "like-buttons": {
@ -208,8 +208,8 @@
"restart": "I-restart ang App", "restart": "I-restart ang App",
"show": "Ipakita ang window", "show": "Ipakita ang window",
"tooltip": { "tooltip": {
"default": "YouTube Music", "default": "Pear Desktop",
"with-song-info": "YouTube Music: {{artist}} - {{title}}" "with-song-info": "Pear Desktop: {{artist}} - {{title}}"
} }
} }
}, },
@ -287,7 +287,7 @@
"name": "Ambient Mode" "name": "Ambient Mode"
}, },
"amuse": { "amuse": {
"description": "Nagdaragdag ng suporta sa YouTube Music para sa Amuse now playing widget ng 6K Labs", "description": "Nagdaragdag ng suporta sa Pear Desktop para sa Amuse now playing widget ng 6K Labs",
"response": { "response": {
"query": "Tumatakbo ang Amuse API server. Gamitin ang GET /query para makuha ang impo ng kanta." "query": "Tumatakbo ang Amuse API server. Gamitin ang GET /query para makuha ang impo ng kanta."
} }
@ -365,11 +365,11 @@
"name": "Palabuin ang Bar ng Nabigasyon" "name": "Palabuin ang Bar ng Nabigasyon"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "I-bypass ang pag-verify ng edad ng YouTube", "description": "I-bypass ang pag-verify ng edad ng Music Player",
"name": "I-bypass ang Restriksyon sa Edad" "name": "I-bypass ang Restriksyon sa Edad"
}, },
"captions-selector": { "captions-selector": {
"description": "Tagapili ng caption para sa mga audio track ng YouTube Music", "description": "Tagapili ng caption para sa mga audio track ng Pear Desktop",
"menu": { "menu": {
"autoload": "Awtomatikong piliin ang huling ginamit na caption", "autoload": "Awtomatikong piliin ang huling ginamit na caption",
"disable-captions": "Walang mga caption bilang default" "disable-captions": "Walang mga caption bilang default"
@ -446,13 +446,13 @@
"disconnected": "Nadiskonekta", "disconnected": "Nadiskonekta",
"hide-duration-left": "Itago ang natitirang oras", "hide-duration-left": "Itago ang natitirang oras",
"hide-github-button": "Itago ang button na GitHub link", "hide-github-button": "Itago ang button na GitHub link",
"play-on-youtube-music": "Patugtugin sa YouTube Music", "play-on-pear-desktop": "Patugtugin sa Pear Desktop",
"set-inactivity-timeout": "I-set ang inactivity timeout", "set-inactivity-timeout": "I-set ang inactivity timeout",
"set-status-display-type": { "set-status-display-type": {
"submenu": { "submenu": {
"artist": "Nakikinig sa {artist}", "artist": "Nakikinig sa {artist}",
"title": "Nakikinig sa {song title}", "title": "Nakikinig sa {song title}",
"youtube-music": "Kumikinig sa YouTube Music" "pear-desktop": "Kumikinig sa Pear Desktop"
} }
} }
}, },

View File

@ -154,7 +154,7 @@
"label": "Titre de fenêtre personnalisé", "label": "Titre de fenêtre personnalisé",
"prompt": { "prompt": {
"label": "Entrés un titre de fenêtre : (Laissé vide pour déactiver)", "label": "Entrés un titre de fenêtre : (Laissé vide pour déactiver)",
"placeholder": "Exemple : YouTube Musique" "placeholder": "Exemple : Pear Desktop"
} }
}, },
"like-buttons": { "like-buttons": {
@ -208,8 +208,8 @@
"restart": "Redémarrer l'application", "restart": "Redémarrer l'application",
"show": "Afficher la fenêtre", "show": "Afficher la fenêtre",
"tooltip": { "tooltip": {
"default": "YouTube Music", "default": "Pear Desktop",
"with-song-info": "YouTube Music: {{artist}} - {{title}}" "with-song-info": "Pear Desktop: {{artist}} - {{title}}"
} }
} }
}, },
@ -287,7 +287,7 @@
"name": "Mode ambiant" "name": "Mode ambiant"
}, },
"amuse": { "amuse": {
"description": "Ajout de la prise en charge de YouTube Music pour le widget Amuse now playing de 6K Labs", "description": "Ajout de la prise en charge de Pear Desktop pour le widget Amuse now playing de 6K Labs",
"name": "Amuse", "name": "Amuse",
"response": { "response": {
"query": "Le serveur API Amuse est en cours d'exécution. Envoyez une requête GET /query pour obtenir des informations sur la chanson." "query": "Le serveur API Amuse est en cours d'exécution. Envoyez une requête GET /query pour obtenir des informations sur la chanson."
@ -369,11 +369,11 @@
"name": "Barre de navigation floue" "name": "Barre de navigation floue"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "Contourner la vérification de l'âge de YouTube", "description": "Contourner la vérification de l'âge de Music Player",
"name": "Contourner les restrictions dâge" "name": "Contourner les restrictions dâge"
}, },
"captions-selector": { "captions-selector": {
"description": "Sélecteur de sous-titres pour les pistes audio YouTube Music", "description": "Sélecteur de sous-titres pour les pistes audio Pear Desktop",
"menu": { "menu": {
"autoload": "Sélectionner automatiquement la dernière légende utilisée", "autoload": "Sélectionner automatiquement la dernière légende utilisée",
"disable-captions": "Pas de sous-titres par défaut" "disable-captions": "Pas de sous-titres par défaut"
@ -456,14 +456,14 @@
"disconnected": "Déconnecté", "disconnected": "Déconnecté",
"hide-duration-left": "Masquer la durée restante", "hide-duration-left": "Masquer la durée restante",
"hide-github-button": "Masquer le bouton du lien GitHub", "hide-github-button": "Masquer le bouton du lien GitHub",
"play-on-youtube-music": "Jouer sur YouTube Music", "play-on-pear-desktop": "Jouer sur Pear Desktop",
"set-inactivity-timeout": "Définir le délai d'inactivité", "set-inactivity-timeout": "Définir le délai d'inactivité",
"set-status-display-type": { "set-status-display-type": {
"label": "Texte d'état", "label": "Texte d'état",
"submenu": { "submenu": {
"artist": "Écoute {artiste}", "artist": "Écoute {artiste}",
"title": "Écoute {titre de la chanson}", "title": "Écoute {titre de la chanson}",
"youtube-music": "Écoute YouTube Music" "pear-desktop": "Écoute Pear Desktop"
} }
} }
}, },

View File

@ -53,8 +53,158 @@
"later": "Despois", "later": "Despois",
"restart-now": "Reiniciar Agora" "restart-now": "Reiniciar Agora"
}, },
"detail": "O plugin \"{{pluginName}}\" precisa dun reinicio para tomar efecto" "detail": "O plugin \"{{pluginName}}\" precisa dun reinicio para tomar efecto",
"message": "\"{{pluginName}}\" precisa reiniciar",
"title": "Requírese reinicio"
},
"unresponsive": {
"buttons": {
"quit": "Saír",
"relaunch": "Lanzar de novo",
"wait": "Agardar"
},
"detail": "Desculpa o inconveniente! Por favor escolle que facer:",
"message": "A aplicación non responde",
"title": "A xanela non responde"
},
"update-available": {
"buttons": {
"disable": "Desactivar actualizacións",
"download": "Descarregar",
"ok": "OK"
},
"detail": "Está dispoñíbel unha nova versión que se pode descarregar de {{downloadLink}}",
"message": "Hai una nova versión dispoñíbel",
"title": "Actualización dispoñíbel"
} }
},
"menu": {
"about": "Sobre",
"navigation": {
"label": "Navegación",
"submenu": {
"copy-current-url": "Copiar o URL actual",
"go-back": "Atrás",
"go-forward": "Adiante",
"quit": "Saír",
"restart": "Reiniciar a aplicación"
}
},
"options": {
"label": "Opcións",
"submenu": {
"advanced-options": {
"label": "Opcións avanzadas",
"submenu": {
"auto-reset-app-cache": "Reiniciar a caché cando a aplicación arrinque",
"disable-hardware-acceleration": "Desactivar a aceleración hardware",
"edit-config-json": "Editar config.json",
"override-user-agent": "Substituír o User-Agent",
"restart-on-config-changes": "Reiniciar ao alterar a configuración",
"set-proxy": {
"label": "Configurar o proxy",
"prompt": {
"label": "Introducir o enderezo do proxy (deixar baleiro para desactivalo)",
"placeholder": "Exemplo: SOCKS5://127.0.0.1:9999",
"title": "Configurar o proxy"
}
},
"toggle-dev-tools": "Activar ou desactivar as DevTools"
}
},
"always-on-top": "Sempre en primeiro plano",
"auto-update": "Actualización automática",
"hide-menu": {
"dialog": {
"message": "O menú ocultarase no próximo inicio; use [Alt] para mostralo (ou a tecla [`] se emprega o menú integrado)",
"title": "Ocultar Menú activado"
},
"label": "Ocultar Menú"
},
"language": {
"dialog": {
"message": "A lingua hase mudar despois do reinicio",
"title": "Mudouse a lingua"
},
"label": "Lingua",
"submenu": {
"to-help-translate": "Quere axudar a traducir? Prema aquí"
}
},
"resume-on-start": "Retomar a última canción ao iniciar a aplicación",
"single-instance-lock": "Bloqueo de instancia única",
"start-at-login": "Iniciar co inicio de sesión",
"starting-page": {
"label": "Páxina de inicio",
"unset": "Sen definir"
},
"tray": {
"label": "Bandexa",
"submenu": {
"disabled": "Desactivado",
"enabled-and-hide-app": "Activado e ocultar a aplicación",
"enabled-and-show-app": "Activado e mostrar a aplicación",
"play-pause-on-click": "Reproducir/Pausar ao premer"
}
},
"visual-tweaks": {
"label": "Axustes visuais",
"submenu": {
"custom-window-title": {
"label": "Título de xanela personalizado",
"prompt": {
"label": "Introduza o título personalizado da xanela (deixe baleiro para desactivala)",
"placeholder": "Exemplo: Pear Desktop"
}
},
"like-buttons": {
"default": "Predeterminado",
"force-show": "Forzar a visualización",
"hide": "Agochar",
"label": "Botóns de Gústame"
},
"remove-upgrade-button": "Retirar o botón de anovación",
"theme": {
"dialog": {
"button": {
"cancel": "Cancelar",
"remove": "Retirar"
},
"remove-theme": "Estás certo que queres retirar o tema personalizado?",
"remove-theme-message": "Isto ha retirar o tema personalizado"
},
"label": "Tema",
"submenu": {
"import-css-file": "Importar arquivo CSS personalizado",
"no-theme": "Sen tema"
}
}
}
}
}
},
"plugins": {
"enabled": "Activado",
"label": "Complementos",
"new": "NOVO"
},
"view": {
"label": "Vista",
"submenu": {
"force-reload": "Forzar recarga",
"reload": "Recargar",
"reset-zoom": "Tamaño real",
"toggle-fullscreen": "Alternar Pantalla Completa",
"zoom-in": "Achegarse",
"zoom-out": "Afastarse"
}
}
},
"tray": {
"next": "Seguinte",
"play-pause": "Reproducir/Pausar",
"previous": "Anterior",
"quit": "Saír"
} }
} }
} }

View File

@ -150,6 +150,11 @@
"visual-tweaks": { "visual-tweaks": {
"label": "תיקונים חזותיים", "label": "תיקונים חזותיים",
"submenu": { "submenu": {
"custom-window-title": {
"prompt": {
"placeholder": "לדוגמה: שולחן כתיבה אגסי"
}
},
"like-buttons": { "like-buttons": {
"default": "ברירת מחדל", "default": "ברירת מחדל",
"force-show": "הפעל בכוח", "force-show": "הפעל בכוח",
@ -201,8 +206,8 @@
"restart": "הפעל מחדש", "restart": "הפעל מחדש",
"show": "הראה חלון", "show": "הראה חלון",
"tooltip": { "tooltip": {
"default": "יוטיוב מיוזיק", "default": "שולחן כתיבה אגסי",
"with-song-info": "יוטיוב מיוזיק: {{artist}} - {{title}}" "with-song-info": "שולחן כתיב אגסי: {{יוצר}} - {{כותרת}}"
} }
} }
}, },
@ -212,7 +217,7 @@
"name": "הגבר מהירות פרסומת" "name": "הגבר מהירות פרסומת"
}, },
"adblocker": { "adblocker": {
"description": "חסום את כל המודעות והמעקב מחוץ לקופסה", "description": "חסום את כל המודעות והמעקבים",
"menu": { "menu": {
"blocker": "חוסם" "blocker": "חוסם"
}, },
@ -244,6 +249,7 @@
} }
}, },
"buffer": { "buffer": {
"label": "חוצץ",
"submenu": { "submenu": {
"buffer": "{{buffer}}" "buffer": "{{buffer}}"
} }
@ -279,7 +285,7 @@
"name": "מצב אווירה" "name": "מצב אווירה"
}, },
"amuse": { "amuse": {
"description": "מוסיף תמיכה ב-YouTube Music עבור הווידג'ט של Amuse המתנגן כעת על ידי 6K Labs", "description": "מוסיף תמיכה ב-Pear Desktop עבור הווידג'ט של Amuse המתנגן כעת על ידי 6K Labs",
"name": "משעשע", "name": "משעשע",
"response": { "response": {
"query": "שרת ה-API של Amuse פועל. קבל מידע על השיר באמצעות GET /query." "query": "שרת ה-API של Amuse פועל. קבל מידע על השיר באמצעות GET /query."
@ -365,7 +371,7 @@
"name": "עקוף את ההחמרות של הגיל" "name": "עקוף את ההחמרות של הגיל"
}, },
"captions-selector": { "captions-selector": {
"description": "בורר כתוביות עבור רצועות אודיו של YouTube Music", "description": "בורר כתוביות עבור רצועות אודיו של Pear Desktop",
"menu": { "menu": {
"autoload": "בחר אוטומטי את הכתובית האחרונה שנבחרה", "autoload": "בחר אוטומטי את הכתובית האחרונה שנבחרה",
"disable-captions": "ברירת מחד ללא כתוביות" "disable-captions": "ברירת מחד ללא כתוביות"
@ -380,6 +386,11 @@
}, },
"templates": { "templates": {
"title": "פתח בחירת כתוביות" "title": "פתח בחירת כתוביות"
},
"toast": {
"caption-changed": "תרגום שונה ל {{שפה}}",
"caption-disabled": "תרגום בוטל",
"no-captions": "אין תרגום זמין לשיר הזה"
} }
}, },
"compact-sidebar": { "compact-sidebar": {
@ -391,9 +402,11 @@
"menu": { "menu": {
"advanced": "מתקדם" "advanced": "מתקדם"
}, },
"name": "התפיידות צלב[בית]",
"prompt": { "prompt": {
"options": { "options": {
"multi-input": { "multi-input": {
"fade-in-duration": "תתפייד בזמן[מילישניות]",
"fade-scaling": { "fade-scaling": {
"linear": "לינארי", "linear": "לינארי",
"logarithmic": "לוגריתמי" "logarithmic": "לוגריתמי"
@ -419,7 +432,7 @@
"connected": "מחובר", "connected": "מחובר",
"disconnected": "מנותק", "disconnected": "מנותק",
"hide-github-button": "הסתר את לחצן הקישור של GitHub", "hide-github-button": "הסתר את לחצן הקישור של GitHub",
"play-on-youtube-music": "הפעל ביוטיוב מיוזיק", "play-on-pear-desktop": "הפעל ביוטיוב מיוזיק",
"set-inactivity-timeout": "הגדר פסק זמן לחוסר פעילות" "set-inactivity-timeout": "הגדר פסק זמן לחוסר פעילות"
} }
}, },

View File

@ -154,7 +154,7 @@
"label": "कस्टम विंडो टाइटल", "label": "कस्टम विंडो टाइटल",
"prompt": { "prompt": {
"label": "कस्टम विंडो टाइटल डालें: (डिसएबल करने के लिए खाली छोड़ें)", "label": "कस्टम विंडो टाइटल डालें: (डिसएबल करने के लिए खाली छोड़ें)",
"placeholder": "उदाहरण: यूट्यूब संगीत" "placeholder": "उदाहरण: पियर डेस्कटॉप"
} }
}, },
"like-buttons": { "like-buttons": {
@ -208,8 +208,8 @@
"restart": "ऐप पुनः प्रारंभ करें", "restart": "ऐप पुनः प्रारंभ करें",
"show": "ऐप दिखाए", "show": "ऐप दिखाए",
"tooltip": { "tooltip": {
"default": "यूट्यूब म्यूजिक", "default": "पियर डेस्कटॉप",
"with-song-info": "यूट्यूब म्यूजिक: {{artist}} - {{title}}" "with-song-info": "पियर डेस्कटॉप: {{artist}} - {{title}}"
} }
} }
}, },
@ -287,7 +287,7 @@
"name": "अम्बिएन्ट मोड्" "name": "अम्बिएन्ट मोड्"
}, },
"amuse": { "amuse": {
"description": "6K लैब्स द्वारा Amuse now playing विजेट के लिए YouTube म्यूजिक समर्थन जोड़ा गया", "description": "6K लैब्स द्वारा Amuse now playing विजेट के लिए Music Player म्यूजिक समर्थन जोड़ा गया",
"name": "मन बहलाना", "name": "मन बहलाना",
"response": { "response": {
"query": "अमयूस ए.पि.ऐ. चल रहा है। गाने की जान्कारि होने के लिये GET /query कीजिये।" "query": "अमयूस ए.पि.ऐ. चल रहा है। गाने की जान्कारि होने के लिये GET /query कीजिये।"
@ -369,11 +369,11 @@
"name": "नेविगेशन बार को ब्लर करें" "name": "नेविगेशन बार को ब्लर करें"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "YouTube आयु की जांच को बायपास करें", "description": "Music Player आयु की जांच को बायपास करें",
"name": "आयु प्रतिबंध को बायपास करें" "name": "आयु प्रतिबंध को बायपास करें"
}, },
"captions-selector": { "captions-selector": {
"description": "YouTube म्यूज़िक ऑडियो ट्रैक के लिए कैप्शन चयनकर्ता", "description": "Pear Desktop म्यूज़िक ऑडियो ट्रैक के लिए कैप्शन चयनकर्ता",
"menu": { "menu": {
"autoload": "अंतिम बार उपयोग किए गए कैप्शन का ऑटोमैटिक रूप से चयन करें", "autoload": "अंतिम बार उपयोग किए गए कैप्शन का ऑटोमैटिक रूप से चयन करें",
"disable-captions": "डिफ़ॉल्ट रूप में कोई कैप्शन नहीं" "disable-captions": "डिफ़ॉल्ट रूप में कोई कैप्शन नहीं"
@ -426,7 +426,13 @@
"menu": { "menu": {
"device-selector": "डिवाइस चुनें" "device-selector": "डिवाइस चुनें"
}, },
"name": "अपनी पसंद का आउटपुट डिवाइस" "name": "अपनी पसंद का आउटपुट डिवाइस",
"prompt": {
"device-selector": {
"label": "उपयोग किए जाने वाला आउटपुट मीडिया चुने",
"title": "आउटपुट डिवाइस चुनें"
}
}
}, },
"disable-autoplay": { "disable-autoplay": {
"description": "गीत को \"रुके हुए \" मोड में शुरू करता है", "description": "गीत को \"रुके हुए \" मोड में शुरू करता है",
@ -450,8 +456,16 @@
"disconnected": "डिस्कनेक्ट किया गया", "disconnected": "डिस्कनेक्ट किया गया",
"hide-duration-left": "शेष अवधि छिपाएँ", "hide-duration-left": "शेष अवधि छिपाएँ",
"hide-github-button": "GitHub लिंक के बटन को छिपाएँ", "hide-github-button": "GitHub लिंक के बटन को छिपाएँ",
"play-on-youtube-music": "YouTube म्यूज़िक पर चलाएँ", "play-on-pear-desktop": "Pear Desktop म्यूज़िक पर चलाएँ",
"set-inactivity-timeout": "निष्क्रियता समय समाप्ति सेट करें" "set-inactivity-timeout": "निष्क्रियता समय समाप्ति सेट करें",
"set-status-display-type": {
"label": "स्टेटस टेक्स्ट",
"submenu": {
"artist": "{artist} को सुन रहे है",
"pear-desktop": "Pear Desktop सुन रहे है",
"title": "{song title} सुन रहे है"
}
}
}, },
"name": "डिस्कॉर्ड रिच प्रेजेंस", "name": "डिस्कॉर्ड रिच प्रेजेंस",
"prompt": { "prompt": {
@ -743,6 +757,7 @@
"listenbrainz": { "listenbrainz": {
"token": "listenbrainz उपयोगकर्ता टोकन दर्ज करें" "token": "listenbrainz उपयोगकर्ता टोकन दर्ज करें"
}, },
"scrobble-alternative-artist": "वैकल्पिक आर्टिस्ट का उपयोग करें",
"scrobble-alternative-title": "वैकल्पिक शीर्षक का उपयोग करें", "scrobble-alternative-title": "वैकल्पिक शीर्षक का उपयोग करें",
"scrobble-other-media": "अन्य मीडिया स्क्रोबल करें" "scrobble-other-media": "अन्य मीडिया स्क्रोबल करें"
}, },
@ -788,9 +803,12 @@
"name": "साइलेंस स्किप करें" "name": "साइलेंस स्किप करें"
}, },
"sponsorblock": { "sponsorblock": {
"description": "Intro/Outro जैसे गैर-संगीत भागों को स्किप करता है", "description": "गाने के वीडियो में जहाँ म्यूजिक नहीं चलता, जैसे शुरुआत या अंत के हिस्से, उन्हें अपने आप स्किप कर देता है",
"name": "SponsorBlock" "name": "SponsorBlock"
}, },
"synced-lyrics": {
"description": "LRClib जैसे सोर्सेज के उपयोग से, गानों के लिए सिंक किए गए लिरिक्स देता है।"
},
"video-toggle": { "video-toggle": {
"menu": { "menu": {
"align": { "align": {

View File

@ -55,7 +55,7 @@
}, },
"detail": "\"{{pluginName}}\" plugin zahtjeva ponovno pokretanje da bi postao aktivan", "detail": "\"{{pluginName}}\" plugin zahtjeva ponovno pokretanje da bi postao aktivan",
"message": "\"{{pluginName}}\" se treba ponovo pokreniti", "message": "\"{{pluginName}}\" se treba ponovo pokreniti",
"title": "Ponovno Pokrećanje je Potrebno" "title": "Potrebno Ponovno Pokretanje"
}, },
"unresponsive": { "unresponsive": {
"buttons": { "buttons": {
@ -128,7 +128,7 @@
}, },
"label": "Jezik", "label": "Jezik",
"submenu": { "submenu": {
"to-help-translate": "Želite pomoć za prijevodom? Kliknite ovdje" "to-help-translate": "Želite pomoći sa prijevodom? Kliknite ovdje"
} }
}, },
"resume-on-start": "Nastavi zadnju pjesmu kad se aplikacija pokrene", "resume-on-start": "Nastavi zadnju pjesmu kad se aplikacija pokrene",
@ -150,6 +150,13 @@
"visual-tweaks": { "visual-tweaks": {
"label": "Vizualna podešavanja", "label": "Vizualna podešavanja",
"submenu": { "submenu": {
"custom-window-title": {
"label": "Prilagođeni naslov prozora",
"prompt": {
"label": "Unesi prilagođeni naslov prozora: (ostavi prazno za onemogućiti)",
"placeholder": "Primjer: Pear Desktop"
}
},
"like-buttons": { "like-buttons": {
"default": "Zadano", "default": "Zadano",
"force-show": "Prisilno prikaži", "force-show": "Prisilno prikaži",
@ -201,8 +208,8 @@
"restart": "Ponovo Pokreni Aplikaciju", "restart": "Ponovo Pokreni Aplikaciju",
"show": "Prikaži prozor", "show": "Prikaži prozor",
"tooltip": { "tooltip": {
"default": "YouTube Glazba", "default": "Pear Desktop",
"with-song-info": "YouTube Glazba: {{artist}} - {{title}}" "with-song-info": "Pear Desktop: {{artist}} - {{title}}"
} }
} }
}, },
@ -280,8 +287,8 @@
"name": "Ambijentalni Način" "name": "Ambijentalni Način"
}, },
"amuse": { "amuse": {
"description": "Dodaje podršku za YouTube Glazbu za widget \"sada reproducira\" od Amuse od strane 6K Labs", "description": "Dodaje podršku za Pear Desktop za widget \"sada reproducira\" od Amuse od strane 6K Labs",
"name": "Amuse", "name": "Zabavljati",
"response": { "response": {
"query": "Amuse API poslužitelj je pokrenut. Koristi GET /query za dohvat informacija o pjesmi." "query": "Amuse API poslužitelj je pokrenut. Koristi GET /query za dohvat informacija o pjesmi."
} }
@ -362,11 +369,11 @@
"name": "Zamagli Navigacijsku Traku" "name": "Zamagli Navigacijsku Traku"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "Zaobiđi YouTubeovu provjeru dobi", "description": "Zaobiđi Music Player provjeru dobi",
"name": "Zaobiđi dobna ograničenja" "name": "Zaobiđi dobna ograničenja"
}, },
"captions-selector": { "captions-selector": {
"description": "Izbornik titlova za audiozapise od YouTube Musica", "description": "Izbornik titlova za audiozapise od Pear Desktopa",
"menu": { "menu": {
"autoload": "Automatski izaberi posljednje korištene titlove", "autoload": "Automatski izaberi posljednje korištene titlove",
"disable-captions": "Bez titlova" "disable-captions": "Bez titlova"
@ -383,7 +390,7 @@
"title": "Otvori izbornik za titlove" "title": "Otvori izbornik za titlove"
}, },
"toast": { "toast": {
"caption-changed": "Titlovi su promenjeni u {{language}}", "caption-changed": "Titlovi su promijenjeni u {{language}}",
"caption-disabled": "Titlovi su isključeni", "caption-disabled": "Titlovi su isključeni",
"no-captions": "Za ovu pjesmu nisu dostupni titlovi" "no-captions": "Za ovu pjesmu nisu dostupni titlovi"
} }
@ -414,8 +421,21 @@
} }
} }
}, },
"custom-output-device": {
"description": "Konfiguriraj prilagođeni izlazni medijski uređaj za pjesme",
"menu": {
"device-selector": "Odaberi Uređaj"
},
"name": "Prilagođeni uređaj za izlaz",
"prompt": {
"device-selector": {
"label": "Odaberi izlazni medijski uređaj za korištenje",
"title": "Odaberi izlazni uređaj"
}
}
},
"disable-autoplay": { "disable-autoplay": {
"description": "Postavlja da pjesma počne pauzirana", "description": "Pokreće pjesmu u pauziranom načinu rada",
"menu": { "menu": {
"apply-once": "Primjenjuje se samo pri pokretanju aplikacije" "apply-once": "Primjenjuje se samo pri pokretanju aplikacije"
}, },
@ -436,10 +456,18 @@
"disconnected": "Odspojen", "disconnected": "Odspojen",
"hide-duration-left": "Sakrij preostalo vrijeme", "hide-duration-left": "Sakrij preostalo vrijeme",
"hide-github-button": "Sakrij gumb sa GitHub poveznicom", "hide-github-button": "Sakrij gumb sa GitHub poveznicom",
"play-on-youtube-music": "Reproduciraj na YouTube Musicu", "play-on-pear-desktop": "Reproduciraj na Pear Desktopu",
"set-inactivity-timeout": "Postavi vremensko ograničenje neaktivnosti (inactivity timeout)" "set-inactivity-timeout": "Postavi vremensko ograničenje neaktivnosti (inactivity timeout)",
"set-status-display-type": {
"label": "Tekst statusa",
"submenu": {
"artist": "Slušate {glazbenika}",
"pear-desktop": "Slušate Pear Desktop",
"title": "Slušate {naslov pjesme}"
}
}
}, },
"name": "Discord Rich Presence", "name": "Bogata prisutnost Discorda",
"prompt": { "prompt": {
"set-inactivity-timeout": { "set-inactivity-timeout": {
"label": "Postavi vremensko ograničenje neaktivnosti u sekundama:", "label": "Postavi vremensko ograničenje neaktivnosti u sekundama:",
@ -479,10 +507,10 @@
"folder-already-exists": "Mapa {{playlistFolder}} već postoji", "folder-already-exists": "Mapa {{playlistFolder}} već postoji",
"getting-playlist-info": "Dobavljaju se informacije o playlisti…", "getting-playlist-info": "Dobavljaju se informacije o playlisti…",
"loading": "Učitavanje…", "loading": "Učitavanje…",
"playlist-has-only-one-song": "Playlista ima samo jedan stavku, preuzeti će se direktno", "playlist-has-only-one-song": "Playlista ima samo jednu stavku, preuzeti će se direktno",
"playlist-id-not-found": "Nije pronađen ID playliste", "playlist-id-not-found": "Nije pronađen ID playliste",
"playlist-is-empty": "Playlista je prazna", "playlist-is-empty": "Playlista je prazna",
"playlist-is-mix-or-private": "Pogreška pri dobivanju informacija o playlisti: provjerite da nije ili privatna ili \"Za vas\" playlista\n\n{{error}}", "playlist-is-mix-or-private": "Pogreška pri dobavljanju informacija o playlisti: provjerite da nije privatna ili \"Za vas\" playlista\n\n{{error}}",
"preparing-file": "Priprema se datoteka…", "preparing-file": "Priprema se datoteka…",
"saving": "Spremanje…", "saving": "Spremanje…",
"trying-to-get-playlist-id": "Pokušavam dobaviti playlist ID: {{playlistId}}", "trying-to-get-playlist-id": "Pokušavam dobaviti playlist ID: {{playlistId}}",
@ -533,7 +561,7 @@
"name": "Ekvalizator" "name": "Ekvalizator"
}, },
"exponential-volume": { "exponential-volume": {
"description": "Čini klizač glasnoće (volume slider) eksponencijalnim za lakše odabranje niže glasnoće.", "description": "Čini klizač glasnoće (volume slider) eksponencijalnim za lakši odabir niže glasnoće.",
"name": "Eksponencijalna Glasnoća" "name": "Eksponencijalna Glasnoća"
}, },
"in-app-menu": { "in-app-menu": {
@ -552,7 +580,7 @@
"menu": { "menu": {
"romanized-lyrics": "Romanizirani tekstovi pjesme" "romanized-lyrics": "Romanizirani tekstovi pjesme"
}, },
"name": "Genius teksovi pjesme", "name": "Genius tekstovi",
"renderer": { "renderer": {
"fetched-lyrics": "Dobavljen tekst pjesme s Genius-a" "fetched-lyrics": "Dobavljen tekst pjesme s Genius-a"
} }
@ -729,6 +757,7 @@
"listenbrainz": { "listenbrainz": {
"token": "Unesi korisnički žeton za ListenBrainz" "token": "Unesi korisnički žeton za ListenBrainz"
}, },
"scrobble-alternative-artist": "Izaberite druge glazbenike",
"scrobble-alternative-title": "Koristi alternativne naslove", "scrobble-alternative-title": "Koristi alternativne naslove",
"scrobble-other-media": "Učetkaj druge medije" "scrobble-other-media": "Učetkaj druge medije"
}, },
@ -781,7 +810,7 @@
"description": "Obezbjeđava sinkronizirane lirike pjesama, korištenjem dobavljača poput LRClib.", "description": "Obezbjeđava sinkronizirane lirike pjesama, korištenjem dobavljača poput LRClib.",
"errors": { "errors": {
"fetch": "⚠️\tDošlo je do greške prilikom dobavljanja stihova pjesme.\n\tMolimo vas da probate ponovno kasnije.", "fetch": "⚠️\tDošlo je do greške prilikom dobavljanja stihova pjesme.\n\tMolimo vas da probate ponovno kasnije.",
"not-found": "⚠️ Tekst za ovu pjesmu nije pronađen." "not-found": "⚠️ Tekst ove pjesme nije pronađen."
}, },
"menu": { "menu": {
"default-text-string": { "default-text-string": {
@ -789,7 +818,7 @@
"tooltip": "Odaberi zadane karaktere koji će biti korišteni za razmake između stihova pjesama" "tooltip": "Odaberi zadane karaktere koji će biti korišteni za razmake između stihova pjesama"
}, },
"line-effect": { "line-effect": {
"label": "Efekat crte", "label": "Efekt crte",
"submenu": { "submenu": {
"fancy": { "fancy": {
"label": "Kitnjast", "label": "Kitnjast",
@ -808,15 +837,23 @@
"tooltip": "Promjeni razmjeru trenutne crte" "tooltip": "Promjeni razmjeru trenutne crte"
} }
}, },
"tooltip": "Odaberi efekat koji će biti primjenjen na trenutnoj crti" "tooltip": "Odaberi efekt koji će biti primijenjen na trenutnoj crti"
}, },
"precise-timing": { "precise-timing": {
"label": "Napravi da tekst pjesme bude izvrsno usklađen", "label": "Napravi da tekst pjesme bude izvrsno usklađen",
"tooltip": "Izračunaj do milisekunde prikaz sljedeće crteteksta (može malo utjecati na učinak)" "tooltip": "Izračunaj do milisekunde prikaz sljedeće crteteksta (može malo utjecati na učinak)"
}, },
"preferred-provider": {
"label": "Željeni davatelj usluga",
"none": {
"label": "Nema / prazno",
"tooltip": "Nema željenog pružatelja usluga"
},
"tooltip": "Odaberite zadanog pružatelja usluga kojeg ćete koristiti"
},
"romanization": { "romanization": {
"label": "Romanizuj stihove pjesama", "label": "Romanizuj stihove pjesama",
"tooltip": "Ako je tekst pjesme na drugom jeziku, probajte da ga prikažete na latinici." "tooltip": "Ako je tekst pjesme na drugom jeziku, probajte ga prikazati na latinici."
}, },
"show-lyrics-even-if-inexact": { "show-lyrics-even-if-inexact": {
"label": "Prikaži tekst pjesme čak i ako je netačan", "label": "Prikaži tekst pjesme čak i ako je netačan",
@ -827,14 +864,14 @@
"tooltip": "Prikaži vremenske oznake pored teksta pjesme" "tooltip": "Prikaži vremenske oznake pored teksta pjesme"
} }
}, },
"name": "Sinkronizovani stihovi pjesama", "name": "Sinkronizirani stihovi pjesama",
"refetch-btn": { "refetch-btn": {
"fetching": "Dobavljanje...", "fetching": "Dobavljanje...",
"normal": "Ponovo dobavite tekst pjesme" "normal": "Ponovo dobavite tekst pjesme"
}, },
"warnings": { "warnings": {
"duration-mismatch": "⚠️ - Tekst pjesme možda nije usklađen zbog neuklapanja u daljini trajanja.", "duration-mismatch": "⚠️ - Tekst pjesme možda nije usklađen zbog neuklapanja u daljini trajanja.",
"inexact": "⚠️ - Tekst za ovu pjesmu možda nije tačan", "inexact": "⚠️ - Tekst ove pjesme možda nije točan",
"instrumental": "⚠️ - Ovo je instrumentalna glazba" "instrumental": "⚠️ - Ovo je instrumentalna glazba"
} }
}, },
@ -846,6 +883,27 @@
"description": "Dodaje dodatak dodirne trake za macOS korisnike", "description": "Dodaje dodatak dodirne trake za macOS korisnike",
"name": "Dodirna Traka" "name": "Dodirna Traka"
}, },
"transparent-player": {
"description": "Učinit će prozor aplikacije prozirnim",
"menu": {
"opacity": {
"label": "Neprozirnost",
"submenu": {
"percent": "{{opacity}}%"
}
},
"type": {
"label": "Vrsta",
"submenu": {
"acrylic": "Akrilni",
"mica": "Tinjac",
"none": "Nema / prazno",
"tabbed": "U karticama"
}
}
},
"name": "Prozirni Svirač"
},
"tuna-obs": { "tuna-obs": {
"description": "Integracija sa OBS-ovim Tuna dodatkom", "description": "Integracija sa OBS-ovim Tuna dodatkom",
"name": "Tuna OBS" "name": "Tuna OBS"

View File

@ -154,7 +154,7 @@
"label": "Saját ablak cím", "label": "Saját ablak cím",
"prompt": { "prompt": {
"label": "Kérem az egyéni ablak címét: (hagyd üresen a kikapcsoláshoz)", "label": "Kérem az egyéni ablak címét: (hagyd üresen a kikapcsoláshoz)",
"placeholder": "Példa: Youtube Music" "placeholder": "Példa: Pear Desktop"
} }
}, },
"like-buttons": { "like-buttons": {
@ -208,8 +208,8 @@
"restart": "YT Music újraindítása", "restart": "YT Music újraindítása",
"show": "Ablak megjelenítése", "show": "Ablak megjelenítése",
"tooltip": { "tooltip": {
"default": "YouTube Music", "default": "Pear Desktop",
"with-song-info": "YouTube Music: {{artist}} - {{title}}" "with-song-info": "Pear Desktop: {{artist}} - {{title}}"
} }
} }
}, },
@ -287,7 +287,7 @@
"name": "Ambient mód" "name": "Ambient mód"
}, },
"amuse": { "amuse": {
"description": "Hozzáadja a YouTube Music támogatását az Amuse \"now playing\" widgethez a 6K Labs által", "description": "Hozzáadja a Pear Desktop támogatását az Amuse \"now playing\" widgethez a 6K Labs által",
"name": "Amuse", "name": "Amuse",
"response": { "response": {
"query": "Az Amuse API szerver fut. Használja a GET /query kérést a dalinformációk lekéréséhez." "query": "Az Amuse API szerver fut. Használja a GET /query kérést a dalinformációk lekéréséhez."
@ -367,11 +367,11 @@
"name": "Navigációs sáv elmosása" "name": "Navigációs sáv elmosása"
}, },
"bypass-age-restrictions": { "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.)", "description": "A Music Player 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" "name": "Korellenőrzés kihagyása"
}, },
"captions-selector": { "captions-selector": {
"description": "Felirat választó a YouTube Music zenékhez", "description": "Felirat választó a Pear Desktop zenékhez",
"menu": { "menu": {
"autoload": "Automatikusan kiválasztja az utoljára használt feliratot", "autoload": "Automatikusan kiválasztja az utoljára használt feliratot",
"disable-captions": "Alapértelmezetten nincsenek feliratok" "disable-captions": "Alapértelmezetten nincsenek feliratok"
@ -453,14 +453,14 @@
"disconnected": "Nincs Kapcsolódva", "disconnected": "Nincs Kapcsolódva",
"hide-duration-left": "Hátralévő idő elrejtése", "hide-duration-left": "Hátralévő idő elrejtése",
"hide-github-button": "GitHub url gombjának elrejtése", "hide-github-button": "GitHub url gombjának elrejtése",
"play-on-youtube-music": "Lejátszás a YouTube Music-on", "play-on-pear-desktop": "Lejátszás a Pear Desktop-on",
"set-inactivity-timeout": "Inaktivitási időkorlát beállítása", "set-inactivity-timeout": "Inaktivitási időkorlát beállítása",
"set-status-display-type": { "set-status-display-type": {
"label": "Tevékenység szöveg", "label": "Tevékenység szöveg",
"submenu": { "submenu": {
"artist": "Hallgatja: {artist}", "artist": "Hallgatja: {artist}",
"title": "Hallgatja: {song title}", "pear-desktop": "Hallgatja: Pear Desktop",
"youtube-music": "Hallgatja: YouTube Music" "title": "Hallgatja: {song title}"
} }
} }
}, },
@ -730,7 +730,7 @@
} }
}, },
"description": "Lehetővé teszi a videó minőségének megváltoztatását egy gombbal a videó fedvényen", "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ó" "name": "Videóminőség módosító"
}, },
"scrobbler": { "scrobbler": {
"description": "Scrobbling támogatás hozzáadása (pl. last.fm, ListenBrainz)", "description": "Scrobbling támogatás hozzáadása (pl. last.fm, ListenBrainz)",

View File

@ -154,7 +154,7 @@
"label": "Judul jendela kustom", "label": "Judul jendela kustom",
"prompt": { "prompt": {
"label": "Masukkan judul jendela kustom (kosongkan untuk menonaktifkan)", "label": "Masukkan judul jendela kustom (kosongkan untuk menonaktifkan)",
"placeholder": "Contoh: YouTube Music" "placeholder": "Contoh: Pear Desktop"
} }
}, },
"like-buttons": { "like-buttons": {
@ -208,8 +208,8 @@
"restart": "Restart aplikasi", "restart": "Restart aplikasi",
"show": "Tampilkan jendela", "show": "Tampilkan jendela",
"tooltip": { "tooltip": {
"default": "YouTube Musik", "default": "Pear Desktop",
"with-song-info": "YouTube Musik: {{artist}} - {{title}}" "with-song-info": "Pear Desktop: {{artist}} - {{title}}"
} }
} }
}, },
@ -287,7 +287,7 @@
"name": "Mode ambient" "name": "Mode ambient"
}, },
"amuse": { "amuse": {
"description": "Menambahkan dukungan YouTube Music untuk widget Amuse yang sedang diputar oleh 6K Labs", "description": "Menambahkan dukungan Pear Desktop untuk widget Amuse yang sedang diputar oleh 6K Labs",
"name": "Amuse", "name": "Amuse",
"response": { "response": {
"query": "Server API Amuse sedang berjalan. GET /query untuk mendapatkan info lagu." "query": "Server API Amuse sedang berjalan. GET /query untuk mendapatkan info lagu."
@ -369,11 +369,11 @@
"name": "Buramkan Bar Navigasi" "name": "Buramkan Bar Navigasi"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "Lewati verifikasi umur dari YouTube", "description": "Lewati verifikasi umur dari Music Player",
"name": "Lewati batasan umur" "name": "Lewati batasan umur"
}, },
"captions-selector": { "captions-selector": {
"description": "Pemilih caption untuk trek audio YouTube Music", "description": "Pemilih caption untuk trek audio Pear Desktop",
"menu": { "menu": {
"autoload": "Pilih caption terakhir secara otomatis", "autoload": "Pilih caption terakhir secara otomatis",
"disable-captions": "Tidak ada caption secara default" "disable-captions": "Tidak ada caption secara default"
@ -456,14 +456,14 @@
"disconnected": "Terputus", "disconnected": "Terputus",
"hide-duration-left": "Sembunyikan sisa durasi", "hide-duration-left": "Sembunyikan sisa durasi",
"hide-github-button": "Sembunyikan tombol link GitHub", "hide-github-button": "Sembunyikan tombol link GitHub",
"play-on-youtube-music": "Mainkan di YouTube Music", "play-on-pear-desktop": "Mainkan di Pear Desktop",
"set-inactivity-timeout": "Tetapkan batas waktu tidak aktif", "set-inactivity-timeout": "Tetapkan batas waktu tidak aktif",
"set-status-display-type": { "set-status-display-type": {
"label": "Teks status", "label": "Teks status",
"submenu": { "submenu": {
"artist": "Sedang mendengarkan {artist}", "artist": "Sedang mendengarkan {artist}",
"title": "Sedang mendengarkan {song title}", "title": "Sedang mendengarkan {song title}",
"youtube-music": "Sedang mendengarkan YouTube Music" "pear-desktop": "Sedang mendengarkan Pear Desktop"
} }
} }
}, },

View File

@ -201,8 +201,8 @@
"restart": "Endurræstu Forritið", "restart": "Endurræstu Forritið",
"show": "Sýna glugga", "show": "Sýna glugga",
"tooltip": { "tooltip": {
"default": "YouTube Tónlist", "default": "Pear Desktop",
"with-song-info": "YouTube Tónlist: {{artist}} - {{title}}" "with-song-info": "Pear Desktop: {{artist}} - {{title}}"
} }
} }
}, },
@ -331,11 +331,11 @@
"name": "Þoka Leiðsagnarstika" "name": "Þoka Leiðsagnarstika"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "Framhjá aldursstaðfestingu YouTube", "description": "Framhjá aldursstaðfestingu Music Player",
"name": "Farið Framhjá Aldurstakmörkunum" "name": "Farið Framhjá Aldurstakmörkunum"
}, },
"captions-selector": { "captions-selector": {
"description": "Skjátextavali fyrir YouTube Tónlist hljóðrásir", "description": "Skjátextavali fyrir Pear Desktop hljóðrásir",
"menu": { "menu": {
"autoload": "Veldu sjálfkrafa síðast notaða myndatexta", "autoload": "Veldu sjálfkrafa síðast notaða myndatexta",
"disable-captions": "Engir skjátextar sjálfgefið" "disable-captions": "Engir skjátextar sjálfgefið"
@ -400,7 +400,7 @@
"disconnected": "Aftengt", "disconnected": "Aftengt",
"hide-duration-left": "Fela tímalengd til vinstri", "hide-duration-left": "Fela tímalengd til vinstri",
"hide-github-button": "Fela GitHub tengilhnapp", "hide-github-button": "Fela GitHub tengilhnapp",
"play-on-youtube-music": "Spilaðu á YouTube Tónlist", "play-on-pear-desktop": "Spilaðu á Pear Desktop",
"set-inactivity-timeout": "Stilltu tímamörk fyrir óvirkni" "set-inactivity-timeout": "Stilltu tímamörk fyrir óvirkni"
}, },
"name": "Discord Rík Nærvera", "name": "Discord Rík Nærvera",

View File

@ -154,7 +154,7 @@
"label": "Personalizza titolo finestra", "label": "Personalizza titolo finestra",
"prompt": { "prompt": {
"label": "Inserisci un titolo della finestra personalizzato: (lascia vuoto per disattivare)", "label": "Inserisci un titolo della finestra personalizzato: (lascia vuoto per disattivare)",
"placeholder": "Esempio: YouTube Music" "placeholder": "Esempio: Pear Desktop"
} }
}, },
"like-buttons": { "like-buttons": {
@ -208,8 +208,8 @@
"restart": "Riavvia l'app", "restart": "Riavvia l'app",
"show": "Mostra finestra", "show": "Mostra finestra",
"tooltip": { "tooltip": {
"default": "YouTube Music", "default": "Pear Desktop",
"with-song-info": "YouTube Music: {{artist}} - {{title}}" "with-song-info": "Pear Desktop: {{artist}} - {{title}}"
} }
} }
}, },
@ -287,7 +287,7 @@
"name": "Modalità Ambiente" "name": "Modalità Ambiente"
}, },
"amuse": { "amuse": {
"description": "Aggiunge il supporto a YouTube Music per il widget Amuse Now Playing di 6K Labs", "description": "Aggiunge il supporto a Pear Desktop per il widget Amuse Now Playing di 6K Labs",
"name": "Amuse", "name": "Amuse",
"response": { "response": {
"query": "Il server API di Amuse è in funzione. GET /query per ottenere informazioni sui brani." "query": "Il server API di Amuse è in funzione. GET /query per ottenere informazioni sui brani."
@ -369,11 +369,11 @@
"name": "Barra di navigazione trasparente" "name": "Barra di navigazione trasparente"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "Bypassa la verifica dell'età di YouTube", "description": "Bypassa la verifica dell'età di Music Player",
"name": "Aggira i limiti d'età" "name": "Aggira i limiti d'età"
}, },
"captions-selector": { "captions-selector": {
"description": "Selettore sottotitolo per le tracce audio di YouTube", "description": "Selettore sottotitolo per le tracce audio di Pear Desktop",
"menu": { "menu": {
"autoload": "Seleziona automaticamente l'ultimo sottotitolo utilizzato", "autoload": "Seleziona automaticamente l'ultimo sottotitolo utilizzato",
"disable-captions": "Disattiva i sottotitoli" "disable-captions": "Disattiva i sottotitoli"
@ -456,14 +456,14 @@
"disconnected": "Disconnesso", "disconnected": "Disconnesso",
"hide-duration-left": "Nascondi la durata rimasta", "hide-duration-left": "Nascondi la durata rimasta",
"hide-github-button": "Nascondi il pulsante link a GitHub", "hide-github-button": "Nascondi il pulsante link a GitHub",
"play-on-youtube-music": "Riproduci su YouTube Music", "play-on-pear-desktop": "Riproduci su Pear Desktop",
"set-inactivity-timeout": "Imposta il timeout di inattività", "set-inactivity-timeout": "Imposta il timeout di inattività",
"set-status-display-type": { "set-status-display-type": {
"label": "Testo dello status", "label": "Testo dello status",
"submenu": { "submenu": {
"artist": "Stai ascoltando {artist}", "artist": "Stai ascoltando {artist}",
"title": "Stai ascoltando {song title}", "title": "Stai ascoltando {song title}",
"youtube-music": "Ascoltando YouTube Music" "pear-desktop": "Ascoltando Pear Desktop"
} }
} }
}, },

View File

@ -154,7 +154,7 @@
"label": "カスタムウィンドウタイトル", "label": "カスタムウィンドウタイトル",
"prompt": { "prompt": {
"label": "カスタムウィンドウタイトルを入力: (未入力の場合無効になります)", "label": "カスタムウィンドウタイトルを入力: (未入力の場合無効になります)",
"placeholder": "例: YouTube Music" "placeholder": "例: Pear Desktop"
} }
}, },
"like-buttons": { "like-buttons": {
@ -208,8 +208,8 @@
"restart": "アプリを再起動", "restart": "アプリを再起動",
"show": "ウィンドウを表示", "show": "ウィンドウを表示",
"tooltip": { "tooltip": {
"default": "YouTube ミュージック", "default": "Pear Desktop",
"with-song-info": "YouTube ミュージック: {{artist}} - {{title}}" "with-song-info": "Pear Desktop: {{artist}} - {{title}}"
} }
} }
}, },
@ -287,7 +287,7 @@
"name": "アンビエント モード" "name": "アンビエント モード"
}, },
"amuse": { "amuse": {
"description": "6K LabsのAmuse再生中ウィジェットがYouTube Musicに対応しました", "description": "6K LabsのAmuse再生中ウィジェットがPear Desktopに対応しました",
"name": "Amuse", "name": "Amuse",
"response": { "response": {
"query": "AmuseのAPIサーバーが稼働中です。GET /query で楽曲情報を取得できます。" "query": "AmuseのAPIサーバーが稼働中です。GET /query で楽曲情報を取得できます。"
@ -369,11 +369,11 @@
"name": "ナビゲーションバーの曇り効果" "name": "ナビゲーションバーの曇り効果"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "ユーチューブの年齢制限を迂回します", "description": "音楽プレーヤーの年齢確認をバイパスする",
"name": "年齢制限迂回" "name": "年齢制限迂回"
}, },
"captions-selector": { "captions-selector": {
"description": "YouTube Musicトラック用字幕選択機", "description": "Pear Desktopトラック用字幕選択機",
"menu": { "menu": {
"autoload": "最後の字幕を自動に選択", "autoload": "最後の字幕を自動に選択",
"disable-captions": "デフォルトで字幕を無効化" "disable-captions": "デフォルトで字幕を無効化"
@ -456,14 +456,14 @@
"disconnected": "切断済み", "disconnected": "切断済み",
"hide-duration-left": "残りの再生時間を隠す", "hide-duration-left": "残りの再生時間を隠す",
"hide-github-button": "GitHubリンクボタンを隠す", "hide-github-button": "GitHubリンクボタンを隠す",
"play-on-youtube-music": "YouTube Musicで再生", "play-on-pear-desktop": "Pear Desktopで再生",
"set-inactivity-timeout": "タイムアウト時間を設定", "set-inactivity-timeout": "タイムアウト時間を設定",
"set-status-display-type": { "set-status-display-type": {
"label": "ステータステキスト", "label": "ステータステキスト",
"submenu": { "submenu": {
"artist": "{artist}を聴いている", "artist": "{artist}を聴いている",
"title": "{曲名}を聴いている", "pear-desktop": "Pear Desktopを聴く",
"youtube-music": "YouTube Musicを聴く" "title": "{曲名}を聴いている"
} }
} }
}, },

View File

@ -2,7 +2,7 @@
"common": { "common": {
"console": { "console": {
"plugins": { "plugins": {
"execute-failed": "პლაგინის დაყენების შეცდომა {{pluginName}}::{{contextName}}", "execute-failed": "დამატების შესრულების შეცდომა {{pluginName}}::{{contextName}}",
"executed-at-ms": "პლაგინი {{pluginName}}::{{contextName}} გაეშვა {{ms}} მილიწამში", "executed-at-ms": "პლაგინი {{pluginName}}::{{contextName}} გაეშვა {{ms}} მილიწამში",
"initialize-failed": "პლაგინის ინიციალიზაცია ვერ მოხდა\"{{pluginName}}\"", "initialize-failed": "პლაგინის ინიციალიზაცია ვერ მოხდა\"{{pluginName}}\"",
"load-all": "იტვირთება ყველა პლაგინი", "load-all": "იტვირთება ყველა პლაგინი",
@ -37,9 +37,15 @@
}, },
"when-ready": { "when-ready": {
"clearing-cache-after-20s": "აპლიკაციის ქეშის გაწმენდვა" "clearing-cache-after-20s": "აპლიკაციის ქეშის გაწმენდვა"
},
"window": {
"tried-to-render-offscreen": "ფანჯარამ სცადა, ეკრანსმიღმა გახსნილიყო, ფანჯრის ზომა={{windowSize}}, ეკრანის ზომა={{displaySize}}, მდებარეობა={{position}}"
} }
}, },
"dialog": { "dialog": {
"hide-menu-enabled": {
"detail": "მენიუ დამალულია, გამოიყენეთ 'Alt', რათა გამოაჩინოთ ის (ან 'Escape' თუ იყენებთ აპლიკაციის შიგნითა მენიუს)"
},
"need-to-restart": { "need-to-restart": {
"buttons": { "buttons": {
"later": "მოგვიანებით" "later": "მოგვიანებით"

View File

@ -154,7 +154,7 @@
"label": "사용자 정의 앱 제목", "label": "사용자 정의 앱 제목",
"prompt": { "prompt": {
"label": "앱 제목으로 표시할 내용 : (빈 칸 일시 비활성화)", "label": "앱 제목으로 표시할 내용 : (빈 칸 일시 비활성화)",
"placeholder": "예: YouTube Music" "placeholder": "예: Pear Desktop"
} }
}, },
"like-buttons": { "like-buttons": {
@ -208,8 +208,8 @@
"restart": "앱 재시작", "restart": "앱 재시작",
"show": "창 표시", "show": "창 표시",
"tooltip": { "tooltip": {
"default": "유튜브 뮤직", "default": "피어 데스크톱",
"with-song-info": "유튜브 뮤직: {{artist}} - {{title}}" "with-song-info": "피어 데스크톱: {{artist}} - {{title}}"
} }
} }
}, },
@ -237,7 +237,8 @@
"submenu": { "submenu": {
"percent": "{{ratio}}%" "percent": "{{ratio}}%"
} }
} },
"enable-seekbar": "재생바 색조 변경 활성화"
}, },
"name": "앨범 컬러 기반 테마" "name": "앨범 컬러 기반 테마"
}, },
@ -287,7 +288,7 @@
"name": "앰비언트 모드" "name": "앰비언트 모드"
}, },
"amuse": { "amuse": {
"description": "6K Labs Amuse의 'now playing' 위젯에 YouTube Music 지원 추가", "description": "6K Labs Amuse의 'now playing' 위젯에 Pear Desktop 지원 추가",
"name": "Amuse", "name": "Amuse",
"response": { "response": {
"query": "Amuse API 서버가 실행 중입니다. GET /query로 노래 정보를 가져오세요." "query": "Amuse API 서버가 실행 중입니다. GET /query로 노래 정보를 가져오세요."
@ -369,11 +370,11 @@
"name": "탐색 바 흐림 효과" "name": "탐색 바 흐림 효과"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "유튜브의 나이 제한을 우회합니다", "description": "음악 플레이어의 연령 확인 우회합니다",
"name": "나이 제한 우회" "name": "나이 제한 우회"
}, },
"captions-selector": { "captions-selector": {
"description": "YouTube Music 트랙용 자막 선택기입니다", "description": "Pear Desktop 트랙용 자막 선택기입니다",
"menu": { "menu": {
"autoload": "마지막으로 사용한 자막을 자동으로 선택", "autoload": "마지막으로 사용한 자막을 자동으로 선택",
"disable-captions": "기본 자막 제거" "disable-captions": "기본 자막 제거"
@ -456,14 +457,14 @@
"disconnected": "연결 해제 됨", "disconnected": "연결 해제 됨",
"hide-duration-left": "남은 재생 시간 숨기기", "hide-duration-left": "남은 재생 시간 숨기기",
"hide-github-button": "GitHub 링크 버튼 숨기기", "hide-github-button": "GitHub 링크 버튼 숨기기",
"play-on-youtube-music": "유튜브 뮤직에서 재생", "play-on-pear-desktop": "유튜브 뮤직에서 재생",
"set-inactivity-timeout": "비활성 시간 제한 설정", "set-inactivity-timeout": "비활성 시간 제한 설정",
"set-status-display-type": { "set-status-display-type": {
"label": "상태 텍스트", "label": "상태 텍스트",
"submenu": { "submenu": {
"artist": "{아티스트} 듣는 중", "artist": "{아티스트} 듣는 중",
"title": "{곡 제목} 듣는 중", "pear-desktop": "Pear Desktop 듣는 중",
"youtube-music": "YouTube Music 듣는 중" "title": "{곡 제목} 듣는 중"
} }
} }
}, },

View File

@ -150,6 +150,11 @@
"visual-tweaks": { "visual-tweaks": {
"label": "Vizualiniai patobulinimai", "label": "Vizualiniai patobulinimai",
"submenu": { "submenu": {
"custom-window-title": {
"prompt": {
"placeholder": "Pavyzdys: Pear Desktop"
}
},
"like-buttons": { "like-buttons": {
"default": "Numatytasis", "default": "Numatytasis",
"force-show": "Priversti rodyti", "force-show": "Priversti rodyti",
@ -201,8 +206,8 @@
"restart": "Perkrauti programą", "restart": "Perkrauti programą",
"show": "Rodyti langą", "show": "Rodyti langą",
"tooltip": { "tooltip": {
"default": "Youtube Music", "default": "Pear Desktop",
"with-song-info": "YouTube Music: {{artist}} - {{title}}" "with-song-info": "Pear Desktop: {{artist}} - {{title}}"
} }
} }
}, },
@ -280,7 +285,7 @@
"name": "Aplinkos rėžimas" "name": "Aplinkos rėžimas"
}, },
"amuse": { "amuse": {
"description": "Prideda Youtube Muzika palaikyma Amuse grojimo valdikliui pagal 6K Labs", "description": "Prideda Pear Desktop palaikyma Amuse grojimo valdikliui pagal 6K Labs",
"name": "Amuse (Platforma Dainininkams)", "name": "Amuse (Platforma Dainininkams)",
"response": { "response": {
"query": "Amuse API serveris yra veikiantis. Parašykite Get /query kad gautumėte dainos informacija." "query": "Amuse API serveris yra veikiantis. Parašykite Get /query kad gautumėte dainos informacija."
@ -338,11 +343,11 @@
"name": "Sulieti Navigacijos Lentą" "name": "Sulieti Navigacijos Lentą"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "Apeiti \"Youtube\" amžiaus patikrinimą", "description": "Apeiti \"Music Player\" amžiaus patikrinimą",
"name": "Apeiti Amžiaus Apribojimus" "name": "Apeiti Amžiaus Apribojimus"
}, },
"captions-selector": { "captions-selector": {
"description": "„YouTube Music“ Garso takelių antraščių parinkiklis", "description": "„Pear Desktop“ Garso takelių antraščių parinkiklis",
"menu": { "menu": {
"autoload": "Automatiškai pasirinkti paskutinę naudotą antraštę", "autoload": "Automatiškai pasirinkti paskutinę naudotą antraštę",
"disable-captions": "Pagal numatytuosius nustatymus išjungti antraštės" "disable-captions": "Pagal numatytuosius nustatymus išjungti antraštės"
@ -357,6 +362,10 @@
}, },
"templates": { "templates": {
"title": "Atidaryti antraščių parinkiklį" "title": "Atidaryti antraščių parinkiklį"
},
"toast": {
"caption-changed": "Subtitrai pakeisti į {{language}}",
"caption-disabled": "Subtitrai išjungti"
} }
}, },
"compact-sidebar": { "compact-sidebar": {
@ -385,6 +394,17 @@
} }
} }
}, },
"custom-output-device": {
"menu": {
"device-selector": "Pasirinkti įrenginį"
},
"name": "Pasirinktinas išvesties įrenginys",
"prompt": {
"device-selector": {
"title": "Pasirinkite išvesties įrenginį"
}
}
},
"disable-autoplay": { "disable-autoplay": {
"description": "Pradeda dainą pristabdytame rėžime", "description": "Pradeda dainą pristabdytame rėžime",
"menu": { "menu": {
@ -407,8 +427,15 @@
"disconnected": "Atsijungta", "disconnected": "Atsijungta",
"hide-duration-left": "Slėpti kiek liko laiko", "hide-duration-left": "Slėpti kiek liko laiko",
"hide-github-button": "Slėpti \"GitHub\" nuorodos mygtuką", "hide-github-button": "Slėpti \"GitHub\" nuorodos mygtuką",
"play-on-youtube-music": "Leisti ant \"Youtube Music\"", "play-on-pear-desktop": "Leisti ant \"Pear Desktop\"",
"set-inactivity-timeout": "Nustatyti neveiklumo laiką" "set-inactivity-timeout": "Nustatyti neveiklumo laiką",
"set-status-display-type": {
"submenu": {
"artist": "Klausosi {artist]",
"title": "Klausosi {song title}",
"pear-desktop": "Klausosi Pear Desktop"
}
}
}, },
"name": "\"Discord\" Turtingas Buvimas (Rich Presence)", "name": "\"Discord\" Turtingas Buvimas (Rich Presence)",
"prompt": { "prompt": {
@ -464,6 +491,19 @@
"description": "Atsisiunčia MP3 / šaltinio garsą tiesiogiai iš sąsajos", "description": "Atsisiunčia MP3 / šaltinio garsą tiesiogiai iš sąsajos",
"menu": { "menu": {
"choose-download-folder": "Pasirinkti atsisiuntimų aplanką", "choose-download-folder": "Pasirinkti atsisiuntimų aplanką",
"download-finish-settings": {
"prompt": {
"last-percent": "Po x procentų",
"last-seconds": "Paskutinės x sekundės",
"title": "Nustatyti kada atsisiųsti"
},
"submenu": {
"enabled": "Įjungtas",
"mode": "Laiko rėžimas",
"percent": "Procentai",
"seconds": "Sekundės"
}
},
"download-playlist": "Atsisiųsti grojaraštį", "download-playlist": "Atsisiųsti grojaraštį",
"presets": "Iš anksto nustatyti nustatymai", "presets": "Iš anksto nustatyti nustatymai",
"skip-existing": "Praleisti egzistuojančius failus" "skip-existing": "Praleisti egzistuojančius failus"
@ -476,6 +516,13 @@
"button": "Atsisiųsti" "button": "Atsisiųsti"
} }
}, },
"equalizer": {
"menu": {
"presets": {
"label": "Išankstiniai nustatymai"
}
}
},
"exponential-volume": { "exponential-volume": {
"description": "Padaro garsumo slankiklį eksponentinį, kad būtų lengviau pasirinkti mažesnį garsumą.", "description": "Padaro garsumo slankiklį eksponentinį, kad būtų lengviau pasirinkti mažesnį garsumą.",
"name": "Eksponentinis garsas" "name": "Eksponentinis garsas"
@ -512,7 +559,20 @@
"unknown-user": "Nežinomas Naudotojas" "unknown-user": "Nežinomas Naudotojas"
}, },
"menu": { "menu": {
"click-to-copy-id": "Kopijuoti Vedėjo ID" "click-to-copy-id": "Kopijuoti Vedėjo ID",
"permission": {
"all": "Leisti svečiams valdyti grojaraštį ir grotuvą",
"playlist": "Leisti svečiams valdyti grojaraštį"
},
"set-permission": "Keisti valdymo leidimus",
"status": {
"disconnected": "Atsijungta",
"guest": "Prisijungta kaip svečias"
}
},
"toast": {
"add-song-failed": "Nepavyko pridėti dainos",
"remove-song-failed": "Nepavyko pašalinti dainos"
} }
}, },
"navigation": { "navigation": {
@ -607,6 +667,17 @@
"description": "Leidžia pakeisti vaizdo kokybę su mygtuku ant vaizdo perdangos", "description": "Leidžia pakeisti vaizdo kokybę su mygtuku ant vaizdo perdangos",
"name": "Vaizdo Kokybės Pakeitėjas" "name": "Vaizdo Kokybės Pakeitėjas"
}, },
"scrobbler": {
"menu": {
"scrobble-alternative-artist": "Naudoti alternatyvius atlikėjus",
"scrobble-alternative-title": "Naudoti alternatyvius pavadinimus"
},
"prompt": {
"lastfm": {
"api-key": "Last.fm API raktas"
}
}
},
"shortcuts": { "shortcuts": {
"description": "Leidžia nustatyti visuotinius atkūrimo sparčiuosius klavišus (paleisti / pristabdyti / kitą / ankstesnį) ir išjungti medijos OSD nepaisant medijos klavišų, įjungti Ctrl / CMD + F ieškoti, įjungti Linux MPRIS palaikymą medijos klavišams ir pasirinktinius sparčiuosius klavišus pažengusiems vartotojams.", "description": "Leidžia nustatyti visuotinius atkūrimo sparčiuosius klavišus (paleisti / pristabdyti / kitą / ankstesnį) ir išjungti medijos OSD nepaisant medijos klavišų, įjungti Ctrl / CMD + F ieškoti, įjungti Linux MPRIS palaikymą medijos klavišams ir pasirinktinius sparčiuosius klavišus pažengusiems vartotojams.",
"menu": { "menu": {
@ -639,6 +710,11 @@
"name": "Rėmėjų blokuotojas" "name": "Rėmėjų blokuotojas"
}, },
"synced-lyrics": { "synced-lyrics": {
"description": "Teikia sinchronizuotus dainų žodžius, naudojantis tiekėjais kaip LRClib.",
"errors": {
"fetch": "⚠️\t\tĮvyko klaida gaunant dainos žodžius.\n\tPabandykite dar karta vėliau.",
"not-found": "⚠️ Šiai dainai nerasti dainos tekstai."
},
"refetch-btn": { "refetch-btn": {
"fetching": "Gaunama...", "fetching": "Gaunama...",
"normal": "Atgauti dainos žodžius" "normal": "Atgauti dainos žodžius"

View File

@ -150,13 +150,20 @@
"visual-tweaks": { "visual-tweaks": {
"label": "Vizuāli Iestatījumi", "label": "Vizuāli Iestatījumi",
"submenu": { "submenu": {
"custom-window-title": {
"label": "Pielāgots loga nosaukums",
"prompt": {
"label": "Ievadiet pielāgotu loga nosaukumu: (atstājiet tukšu, lai atspējotu)",
"placeholder": "Piemērs: Pear mūzika"
}
},
"like-buttons": { "like-buttons": {
"default": "Noklusējums", "default": "Noklusējums",
"force-show": "Vienmēr rādīt", "force-show": "Vienmēr rādīt",
"hide": "Paslēpt", "hide": "Paslēpt",
"label": "Like pogas" "label": "Like pogas"
}, },
"remove-upgrade-button": "Noslēpt YouTube Premium pogu", "remove-upgrade-button": "Noslēpt Premium pogu",
"theme": { "theme": {
"dialog": { "dialog": {
"button": { "button": {
@ -201,8 +208,8 @@
"restart": "Restartēt Lietotni", "restart": "Restartēt Lietotni",
"show": "Rādīt logu", "show": "Rādīt logu",
"tooltip": { "tooltip": {
"default": "YouTube Music", "default": "Pear Desktop",
"with-song-info": "YouTube Music: {{artist}} - {{title}}" "with-song-info": "Pear Desktop: {{artist}} - {{title}}"
} }
} }
}, },
@ -280,7 +287,7 @@
"name": "Ambientais Režīms" "name": "Ambientais Režīms"
}, },
"amuse": { "amuse": {
"description": "Pievieno YouTube Music atblastu priekš Amuse \"tagad spēlē\" no 6K Labs", "description": "Pievieno Pear Desktop atblastu priekš Amuse \"tagad spēlē\" no 6K Labs",
"name": "Amuse", "name": "Amuse",
"response": { "response": {
"query": "Amuse API serveris ir palaists. GET /query lai dabūtu dziesmas info." "query": "Amuse API serveris ir palaists. GET /query lai dabūtu dziesmas info."
@ -362,11 +369,11 @@
"name": "Izplūdusi Navigācijas Josla" "name": "Izplūdusi Navigācijas Josla"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "Apiet YouTube vecuma pārbaudi", "description": "Apiet Music Player vecuma pārbaudi",
"name": "Apiet Vecuma Ierobežojumus" "name": "Apiet Vecuma Ierobežojumus"
}, },
"captions-selector": { "captions-selector": {
"description": "Subtitru izvēlne priekš YouTube Music audio ceļiem", "description": "Subtitru izvēlne priekš Pear Desktop audio ceļiem",
"menu": { "menu": {
"autoload": "Automātiski izvēlēties pēdējo izmantotos subtitrus", "autoload": "Automātiski izvēlēties pēdējo izmantotos subtitrus",
"disable-captions": "Bez subtitriem pēc noklusējuma" "disable-captions": "Bez subtitriem pēc noklusējuma"
@ -414,6 +421,19 @@
} }
} }
}, },
"custom-output-device": {
"description": "Pielāgotas izvades multivides ierīces konfigurēšana dziesmām",
"menu": {
"device-selector": "Izvēlieties ierīci"
},
"name": "Pielāgota izvades ierīce",
"prompt": {
"device-selector": {
"label": "Izvēlieties izmantojamo izvades multivides ierīci",
"title": "Izvēlieties izvades ierīci"
}
}
},
"disable-autoplay": { "disable-autoplay": {
"description": "Palaiž dziesmu nopauzētu", "description": "Palaiž dziesmu nopauzētu",
"menu": { "menu": {
@ -436,8 +456,15 @@
"disconnected": "Atvienojies", "disconnected": "Atvienojies",
"hide-duration-left": "Paslēpt cik palika laika", "hide-duration-left": "Paslēpt cik palika laika",
"hide-github-button": "Paslēpt GitHub saites pogu", "hide-github-button": "Paslēpt GitHub saites pogu",
"play-on-youtube-music": "Atskaņot uz YouTube Music", "play-on-pear-desktop": "Atskaņot uz Pear Desktop",
"set-inactivity-timeout": "Iestatīt neaktivitātes taimeru" "set-inactivity-timeout": "Iestatīt neaktivitātes taimeru",
"set-status-display-type": {
"label": "Statusa teksts",
"submenu": {
"artist": "Klausos {mākslinieku}",
"title": "Klausos {dziesmas nosaukums}"
}
}
}, },
"name": "Discord Rich Presence", "name": "Discord Rich Presence",
"prompt": { "prompt": {
@ -485,9 +512,114 @@
"playlist-is-mix-or-private": "Neizdevās iegūt atskaņošanas saraksta informāciju: pārliecinieties, ka tas nav privāts vai \"Jums izveidotā izlase\" saraksts.\n\n{{error}}", "playlist-is-mix-or-private": "Neizdevās iegūt atskaņošanas saraksta informāciju: pārliecinieties, ka tas nav privāts vai \"Jums izveidotā izlase\" saraksts.\n\n{{error}}",
"preparing-file": "Faila sagatavošana…", "preparing-file": "Faila sagatavošana…",
"saving": "Saglabāšana…", "saving": "Saglabāšana…",
"trying-to-get-playlist-id": "Mēģinu iegūt atskaņošanas saraksta ID: {{playlistId}}",
"video-id-not-found": "Video nav atrasts", "video-id-not-found": "Video nav atrasts",
"writing-id3": "Rakstam ID3 tegus…" "writing-id3": "Rakstam ID3 tegus…"
} }
},
"description": "Lejupielādē MP3/avota audio tieši no saskarnes",
"menu": {
"choose-download-folder": "Izvēlieties lejupielādes mapi",
"download-finish-settings": {
"label": "Lejupielādēt pēc pabeigšanas",
"prompt": {
"last-percent": "Pēc x procentiem",
"last-seconds": "Pēdējās x sekundes",
"title": "Konfigurējiet lejupielādes laiku"
},
"submenu": {
"advanced": "Paplašināts",
"enabled": "Iespējots",
"mode": "Laika režīms",
"percent": "Procenti",
"seconds": "Sekundes"
}
},
"download-playlist": "Lejupielādēt atskaņošanas sarakstu",
"presets": "Iepriekšiestatījumi",
"skip-existing": "Izlaist esošos failus"
},
"name": "Lejupielādētājs",
"renderer": {
"can-not-update-progress": "Nevar atjaunināt progresu"
},
"templates": {
"button": "Lejupielādēt"
}
},
"equalizer": {
"description": "Pievieno atskaņotājam ekvalaizeru",
"menu": {
"presets": {
"label": "Iepriekšiestatījumi",
"list": {
"bass-booster": "Basu pastiprinātājs"
}
}
},
"name": "Ekvalaizers"
},
"exponential-volume": {
"description": "Padara skaļuma slīdni eksponenciālu, lai būtu vieglāk izvēlēties zemākus skaļumus.",
"name": "Eksponenciālais apjoms"
},
"in-app-menu": {
"description": "Piešķir izvēļņu joslām greznu, tumšu vai albuma krāsas izskatu",
"menu": {
"hide-dom-window-controls": "Slēpt DOM loga vadīklas"
},
"name": "Lietotnes izvēlne"
},
"lumiastream": {
"description": "Pievieno Lumia Stream atbalstu",
"name": "Lumia Stream [Beta versija]"
},
"lyrics-genius": {
"description": "Pievieno dziesmu tekstu atbalstu lielākajai daļai dziesmu",
"menu": {
"romanized-lyrics": "Romanizēti dziesmu teksti"
},
"name": "Dziesmu vārdu ģēnijs",
"renderer": {
"fetched-lyrics": "Iegūti dziesmu vārdi priekš oriģināla"
}
},
"music-together": {
"description": "Kopīgojiet atskaņošanas sarakstu ar citiem. Kad vadītājs atskaņo dziesmu, visi pārējie dzirdēs to pašu dziesmu.",
"dialog": {
"enter-host": "Ievadiet resursdatora ID"
},
"internal": {
"save": "Saglabāt",
"track-source": "Dziesmas avots",
"unknown-user": "Nezināms lietotājs"
},
"menu": {
"click-to-copy-id": "Kopēt resursdatora ID",
"close": "Aizvērt mūziku kopā",
"connected-users": "Savienotie lietotāji",
"disconnect": "Atvienojiet mūziku kopā",
"empty-user": "Nav pievienotu lietotāju",
"host": "Kopklausīšanās vadītājs",
"join": "Pievienojieties mūzikai kopā",
"permission": {
"all": "Atļaut viesiem kontrolēt atskaņošanas sarakstu un atskaņotāju",
"host-only": "Tikai resursdators var kontrolēt atskaņošanas sarakstu un atskaņotāju",
"playlist": "Atļaut viesiem kontrolēt atskaņošanas sarakstu"
},
"set-permission": "Izmainīt kontroles piekļuvi",
"status": {
"disconnected": "Atvienots",
"guest": "Pieslēdzies kā viesis",
"host": "Pieslēdzies kā vadītājs"
}
},
"name": "Mūzika Kopā [Beta]",
"toast": {
"add-song-failed": "Neizdevās pievienot dziesmu",
"closed": "Mūzika Kopā slēgta",
"disconnected": "Mūzika Kopā atvienota",
"host-failed": "Neizdevās uzsākt Mūziku Kopā"
} }
} }
} }

View File

@ -27,7 +27,7 @@
"loaded": "i18n ലോഡ് ചെയ്തു" "loaded": "i18n ലോഡ് ചെയ്തു"
}, },
"second-instance": { "second-instance": {
"receive-command": "പ്രോട്ടോക്കോളിലൂടെ കമാൻഡ് ലഭിച്ചു : \"{{command}}\"" "receive-command": "പ്രോട്ടോക്കോളിലൂടെ കമാൻഡ് ലഭിച്ചു : \"{{command}}\""
}, },
"theme": { "theme": {
"css-file-not-found": "\"{{cssFile}}\" എന്ന CSS file നിലവിൽ ഇല്ല. ഉപേക്ഷിക്കുന്നു" "css-file-not-found": "\"{{cssFile}}\" എന്ന CSS file നിലവിൽ ഇല്ല. ഉപേക്ഷിക്കുന്നു"

View File

@ -53,7 +53,7 @@
"later": "Nanti", "later": "Nanti",
"restart-now": "Restart Sekarang" "restart-now": "Restart Sekarang"
}, },
"detail": "Plugin {{pluginName}} perlu dimulakan semula untuk berkuatkuasa", "detail": "\"{{pluginName}}\" plugin memerlukan mula semula untuk ambil keberkesanan",
"message": "\"{{pluginName}}\" perlu dimulakan semula", "message": "\"{{pluginName}}\" perlu dimulakan semula",
"title": "Mulakan Semula Diperlukan" "title": "Mulakan Semula Diperlukan"
}, },
@ -74,7 +74,7 @@
"ok": "OK" "ok": "OK"
}, },
"detail": "Versi baharu kini tersedia dan boleh dimuat turun di {{downloadLink}}", "detail": "Versi baharu kini tersedia dan boleh dimuat turun di {{downloadLink}}",
"message": "Versi baharu tersedia", "message": "Versi baharu kini tersedia",
"title": "Kemas Kini Tersedia" "title": "Kemas Kini Tersedia"
} }
}, },
@ -154,7 +154,7 @@
"label": "Tajuk tetingkap tersuai", "label": "Tajuk tetingkap tersuai",
"prompt": { "prompt": {
"label": "Masukkan tajuk tetingkap tersuai: (biarkan kosong untuk matikan)", "label": "Masukkan tajuk tetingkap tersuai: (biarkan kosong untuk matikan)",
"placeholder": "Contoh: YouTube Music" "placeholder": "Contoh: Pear Desktop"
} }
}, },
"like-buttons": { "like-buttons": {
@ -208,8 +208,8 @@
"restart": "Mulakan Semula Aplikasi", "restart": "Mulakan Semula Aplikasi",
"show": "Papar tetingkap", "show": "Papar tetingkap",
"tooltip": { "tooltip": {
"default": "YouTube Muzik", "default": "Pear Desktop",
"with-song-info": "YouTube Muzik : {{artist}} - {{title}}" "with-song-info": "Pear Desktop : {{artist}} - {{title}}"
} }
} }
}, },
@ -287,7 +287,7 @@
"name": "Mod Sekitaran" "name": "Mod Sekitaran"
}, },
"amuse": { "amuse": {
"description": "Menambahkan sokongan YouTube Music untuk widget sedang dimain Amuse oleh 6K Labs", "description": "Menambahkan sokongan Pear Desktop untuk widget sedang dimain Amuse oleh 6K Labs",
"name": "Terhibur", "name": "Terhibur",
"response": { "response": {
"query": "API server Amuse telah berjalan. GET /query untuk mendapatkan maklumat lagu." "query": "API server Amuse telah berjalan. GET /query untuk mendapatkan maklumat lagu."
@ -369,11 +369,11 @@
"name": "Kaburkan Bar navigasi" "name": "Kaburkan Bar navigasi"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "Pintas verifikasi umur Youtube", "description": "Pintas verifikasi umur Music Player",
"name": "Pintas Sekatan Umur" "name": "Pintas Sekatan Umur"
}, },
"captions-selector": { "captions-selector": {
"description": "Pemilih kapsyen untuk trek audio Youtube Music", "description": "Pemilih kapsyen untuk trek audio Pear Desktop",
"menu": { "menu": {
"autoload": "Pilih kapsyen terakhir diguna secara automatik", "autoload": "Pilih kapsyen terakhir diguna secara automatik",
"disable-captions": "Tiada kapsyen secara lalai" "disable-captions": "Tiada kapsyen secara lalai"
@ -456,13 +456,14 @@
"disconnected": "Tidak disambungkan", "disconnected": "Tidak disambungkan",
"hide-duration-left": "Sembunyikan tempoh yang tinggal", "hide-duration-left": "Sembunyikan tempoh yang tinggal",
"hide-github-button": "Sembunyikan Butang pautan GitHub", "hide-github-button": "Sembunyikan Butang pautan GitHub",
"play-on-youtube-music": "Main di YouTube Music", "play-on-pear-desktop": "Main di Pear Desktop",
"set-inactivity-timeout": "Tetapkan tamat masa tidak aktif", "set-inactivity-timeout": "Tetapkan tamat masa tidak aktif",
"set-status-display-type": { "set-status-display-type": {
"label": "Teks status", "label": "Teks status",
"submenu": { "submenu": {
"artist": "Sedang mendengar {artist}", "artist": "Sedang mendengar {artist}",
"youtube-music": "Mendengar YouTube Music" "pear-desktop": "Mendengar Pear Desktop",
"title": "Sedang mendengar {tajuk lagu}"
} }
} }
}, },
@ -498,6 +499,7 @@
"converting": "Menukarkan…", "converting": "Menukarkan…",
"done": "Selesai: {{filePath}}", "done": "Selesai: {{filePath}}",
"download-info": "Memuat turun {{artist}} - {{title}} [{{videoId}}", "download-info": "Memuat turun {{artist}} - {{title}} [{{videoId}}",
"download-progress": "Muat turun: {{percent}}%",
"downloading": "Memuat turun…", "downloading": "Memuat turun…",
"downloading-counter": "Memuat turun {{current}}/{{total}}…", "downloading-counter": "Memuat turun {{current}}/{{total}}…",
"downloading-playlist": "Memuat turun senarai main \"{{playlistTitle}}\" - {{playlistSize}} lagu ({{playlistId}})", "downloading-playlist": "Memuat turun senarai main \"{{playlistTitle}}\" - {{playlistSize}} lagu ({{playlistId}})",
@ -508,29 +510,67 @@
"playlist-has-only-one-song": "Senarai main hanya mempunyai satu item, memuat turunnya terus", "playlist-has-only-one-song": "Senarai main hanya mempunyai satu item, memuat turunnya terus",
"playlist-id-not-found": "ID senarai main tidak dijumpai", "playlist-id-not-found": "ID senarai main tidak dijumpai",
"playlist-is-empty": "Senarai main kosong", "playlist-is-empty": "Senarai main kosong",
"playlist-is-mix-or-private": "Ralat dalam mendapatkan senarai info main: pastikan ia tidak peribadi atau di dalam senarai main \"Campuran untuk anda\"\n\n{{error}}",
"preparing-file": "Menyediakan fail…",
"saving": "Menyimpan…", "saving": "Menyimpan…",
"trying-to-get-playlist-id": "Mencuba untuk mendapatkan ID senarai main: {{playlistId}}", "trying-to-get-playlist-id": "Mencuba untuk mendapatkan ID senarai main: {{playlistId}}",
"video-id-not-found": "Video tidak dijumpai" "video-id-not-found": "Video tidak dijumpai",
"writing-id3": "Sedang menulis tag ID3…"
} }
}, },
"description": "Memuat turun audio MP3 / sumber terus dari antara muka", "description": "Memuat turun audio MP3 / sumber terus dari antara muka",
"menu": { "menu": {
"choose-download-folder": "Pilih folder muat turun", "choose-download-folder": "Pilih folder muat turun",
"download-finish-settings": { "download-finish-settings": {
"label": "Muat turun selesai",
"prompt": { "prompt": {
"last-percent": "Selepas peratus x",
"last-seconds": "Saat x terakhir",
"title": "Konfigurasikan masa untuk memuat turun" "title": "Konfigurasikan masa untuk memuat turun"
}, },
"submenu": { "submenu": {
"advanced": "Lanjutan",
"enabled": "Dinyalakan", "enabled": "Dinyalakan",
"mode": "Mod masa", "mode": "Mod masa",
"percent": "Peratus", "percent": "Peratus",
"seconds": "Saat" "seconds": "Saat"
} }
}, },
"download-playlist": "Muat turun senarai main" "download-playlist": "Muat turun senarai main",
"presets": "Pratetap",
"skip-existing": "Langkau fail sedia ada"
},
"name": "Pemuat turun",
"renderer": {
"can-not-update-progress": "Tidak boleh memuat turun perkembangan"
},
"templates": {
"button": "Memuat turun"
} }
}, },
"equalizer": {
"description": "Menambahkan penyamaan kepada pemain",
"menu": {
"presets": {
"label": "Pratetap",
"list": {
"bass-booster": "Penggalak bass"
}
}
}
},
"exponential-volume": {
"description": "Menjadikan gelangsar kelantangan eksponen supaya lebih mudah memilih kelantangan yang lebih rendah."
},
"in-app-menu": {
"description": "Memberi bar menu rupa yang mewah, gelap atau warna album",
"menu": {
"hide-dom-window-controls": "Sembunyikan kawalan tetingkap DOM"
},
"name": "Menu Dalam Apl"
},
"lumiastream": { "lumiastream": {
"description": "Menambah sokongan Lumia Stream",
"name": "Lumia Stream [Beta]" "name": "Lumia Stream [Beta]"
}, },
"lyrics-genius": { "lyrics-genius": {
@ -545,15 +585,68 @@
}, },
"music-together": { "music-together": {
"description": "Kongsi senarai main dengan orang lain. Apabila hos memainkan lagu, semua orang akan mendengar lagu yang sama", "description": "Kongsi senarai main dengan orang lain. Apabila hos memainkan lagu, semua orang akan mendengar lagu yang sama",
"dialog": {
"enter-host": "Masukkan ID Hos"
},
"internal": { "internal": {
"save": "Simpan", "save": "Simpan",
"unknown-user": "Pengguna tidak diketahui" "unknown-user": "Pengguna tidak diketahui"
}, },
"menu": { "menu": {
"close": "Tutup Music Together" "click-to-copy-id": "Salin ID Hos",
"close": "Tutup Music Together",
"connected-users": "Pengguna yang telah berhubung",
"disconnect": "Putuskan Sambungan Music Together",
"empty-user": "Tiada pengguna yang disambungkan",
"host": "Hos Music Together",
"join": "Sertai Music Together",
"permission": {
"all": "Benarkan tetamu mengawal senarai main dan pemain",
"host-only": "Hanya hos boleh mengawal senarai main dan pemain",
"playlist": "Benarkan tetamu mengawal senarai main"
},
"set-permission": "Tukar Kebenaran Kawalan",
"status": {
"disconnected": "Terputus",
"guest": "Disambungkan sebagai Tetamu",
"host": "Disambungkan sebagai Hos"
}
},
"name": "Music Together [Beta]",
"toast": {
"add-song-failed": "Gagal menambah lagu",
"closed": "Music Together ditutup",
"disconnected": "Music Together terputus",
"host-failed": "Gagal untuk menjadi hos Music Together",
"id-copied": "ID hos disalin ke papan keratan",
"id-copy-failed": "Gagal menyalin ID Hos ke papan keratan"
}
},
"navigation": {
"name": "Navigasi"
},
"notifications": {
"name": "Notifikasi"
},
"scrobbler": {
"dialog": {
"lastfm": {
"auth-failed": {
"title": "Atuntikasi Gagal"
}
}
},
"prompt": {
"lastfm": {
"api-key": "kunci API Last.fm",
"api-secret": "rahasia API Last.fm"
}
} }
}, },
"synced-lyrics": { "synced-lyrics": {
"errors": {
"not-found": "⚠️ Tak ada liriks untuk lagu ini."
},
"menu": { "menu": {
"show-lyrics-even-if-inexact": { "show-lyrics-even-if-inexact": {
"label": "Tunjukkan lirik walaupun tidak tepat", "label": "Tunjukkan lirik walaupun tidak tepat",

View File

@ -257,11 +257,11 @@
"name": "Tilslør navigasjonsfelt" "name": "Tilslør navigasjonsfelt"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "Omgå YouTube sin aldersgrenser", "description": "Omgå Music Player sin aldersgrenser",
"name": "Omgå aldersgrense" "name": "Omgå aldersgrense"
}, },
"captions-selector": { "captions-selector": {
"description": "Undertekstverktøy for lydspor i YouTube Music", "description": "Undertekstverktøy for lydspor i Pear Desktop",
"menu": { "menu": {
"autoload": "Auto-velg sist brukte undertekst", "autoload": "Auto-velg sist brukte undertekst",
"disable-captions": "Ingen undertekst som forvalg" "disable-captions": "Ingen undertekst som forvalg"
@ -326,7 +326,7 @@
"disconnected": "Frakoblet", "disconnected": "Frakoblet",
"hide-duration-left": "Skjul gjenværende tid", "hide-duration-left": "Skjul gjenværende tid",
"hide-github-button": "Skjul GitHub-lenkeknapp", "hide-github-button": "Skjul GitHub-lenkeknapp",
"play-on-youtube-music": "Spill på YouTube Music", "play-on-pear-desktop": "Spill på Pear Desktop",
"set-inactivity-timeout": "Sett tid før tidsavbrudd" "set-inactivity-timeout": "Sett tid før tidsavbrudd"
}, },
"name": "Rik tilstedeværelse for Discord", "name": "Rik tilstedeværelse for Discord",

View File

@ -436,7 +436,7 @@
"disconnected": "डिसकन्एक्टेड", "disconnected": "डिसकन्एक्टेड",
"hide-duration-left": "बाकी समय लुकाऊ", "hide-duration-left": "बाकी समय लुकाऊ",
"hide-github-button": "GitHub लिंक लुकाऊ", "hide-github-button": "GitHub लिंक लुकाऊ",
"play-on-youtube-music": "YouTube music मा बजाउ", "play-on-pear-desktop": "Pear Desktop मा बजाउ",
"set-inactivity-timeout": "इनएक्टिभिटी टाइमआउट राख" "set-inactivity-timeout": "इनएक्टिभिटी टाइमआउट राख"
}, },
"name": "डिसकार्ड रिच प्रीसेंस", "name": "डिसकार्ड रिच प्रीसेंस",

View File

@ -154,7 +154,7 @@
"label": "Aangepaste venstertitel", "label": "Aangepaste venstertitel",
"prompt": { "prompt": {
"label": "Voer aangepaste venstertitel in: (laat leeg om uit te schakelen)", "label": "Voer aangepaste venstertitel in: (laat leeg om uit te schakelen)",
"placeholder": "Voorbeeld: Youtube Music" "placeholder": "Voorbeeld: Pear Desktop"
} }
}, },
"like-buttons": { "like-buttons": {
@ -208,8 +208,8 @@
"restart": "Herstarten App", "restart": "Herstarten App",
"show": "Weergeven Venster", "show": "Weergeven Venster",
"tooltip": { "tooltip": {
"default": "YouTube Music", "default": "Pear Desktop",
"with-song-info": "YouTube Music: {{artist}} - {{title}}" "with-song-info": "Pear Desktop: {{artist}} - {{title}}"
} }
} }
}, },
@ -287,7 +287,7 @@
"name": "Omgevingsmodus" "name": "Omgevingsmodus"
}, },
"amuse": { "amuse": {
"description": "Voegt YouTube Music ondersteuning toe voor de Amuse now playing widget van 6K Labs", "description": "Voegt Pear Desktop ondersteuning toe voor de Amuse now playing widget van 6K Labs",
"name": "Amuse", "name": "Amuse",
"response": { "response": {
"query": "Amuse API server loopt. Gebruik /query voor nummer informatie." "query": "Amuse API server loopt. Gebruik /query voor nummer informatie."
@ -369,11 +369,11 @@
"name": "Vervagen Navigatiebalk" "name": "Vervagen Navigatiebalk"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "Omzeil de leeftijdsverificatie van YouTube", "description": "Omzeil de leeftijdsverificatie van Music Player",
"name": "Leeftijdsbeperkingen Omzeilen" "name": "Leeftijdsbeperkingen Omzeilen"
}, },
"captions-selector": { "captions-selector": {
"description": "Ondertitelkeuze voor YouTube Music-audiotracks", "description": "Ondertitelkeuze voor Pear Desktop-audiotracks",
"menu": { "menu": {
"autoload": "Automatisch de laatst gebruikte ondertitel selecteren", "autoload": "Automatisch de laatst gebruikte ondertitel selecteren",
"disable-captions": "Standaard geen ondertitels" "disable-captions": "Standaard geen ondertitels"
@ -456,14 +456,14 @@
"disconnected": "Verbinding verbroken", "disconnected": "Verbinding verbroken",
"hide-duration-left": "Verberg resterende tijd", "hide-duration-left": "Verberg resterende tijd",
"hide-github-button": "GitHub-knop verbergen", "hide-github-button": "GitHub-knop verbergen",
"play-on-youtube-music": "Afspelen op YouTube Music", "play-on-pear-desktop": "Afspelen op Pear Desktop",
"set-inactivity-timeout": "Inactiviteitstime-out instellen", "set-inactivity-timeout": "Inactiviteitstime-out instellen",
"set-status-display-type": { "set-status-display-type": {
"label": "Status tekst", "label": "Status tekst",
"submenu": { "submenu": {
"artist": "Naar {artist} aan het luisteren", "artist": "Naar {artist} aan het luisteren",
"title": "Naar {song title} aan het luisteren", "title": "Naar {song title} aan het luisteren",
"youtube-music": "Naar Youtube Music aan het luisteren" "pear-desktop": "Naar Pear Desktop aan het luisteren"
} }
} }
}, },

View File

@ -153,8 +153,8 @@
"custom-window-title": { "custom-window-title": {
"label": "Niestandardowy tytuł okna", "label": "Niestandardowy tytuł okna",
"prompt": { "prompt": {
"label": "Podaj niestandardowy tytuł okna (zostaw puste, aby to wyłączyć):", "label": "Podaj niestandardowy tytuł okna (zostaw puste, aby to wyłączyć)",
"placeholder": "Przykład: YouTube Music" "placeholder": "Przykład: Pear Desktop"
} }
}, },
"like-buttons": { "like-buttons": {
@ -208,8 +208,8 @@
"restart": "Uruchom ponownie aplikację", "restart": "Uruchom ponownie aplikację",
"show": "Pokaż okno", "show": "Pokaż okno",
"tooltip": { "tooltip": {
"default": "YouTube Music", "default": "Pear Desktop",
"with-song-info": "{{title}} (autorstwa {{artist}}) - YT Music" "with-song-info": "{{title}} (autorstwa {{artist}}) - Pear Desktop"
} }
} }
}, },
@ -287,14 +287,14 @@
"name": "Tryb otoczenia" "name": "Tryb otoczenia"
}, },
"amuse": { "amuse": {
"description": "Wspiera integrację YouTube Music z widgetami Amuse (od 6K Labs)", "description": "Wspiera integrację Pear Desktop z widgetami Amuse (od 6K Labs)",
"name": "Amuse", "name": "Amuse",
"response": { "response": {
"query": "Serwer API Amuse działa. Użyj metody GET do /query, aby zdobyć informację o utworze." "query": "Serwer API Amuse działa. Użyj metody GET do /query, aby zdobyć informację o utworze."
} }
}, },
"api-server": { "api-server": {
"description": "Pozwala na kontrolowanie YouTube Music poprzez podłączenie specjalnego serwera API", "description": "Pozwala na kontrolowanie Pear Desktop poprzez podłączenie specjalnego serwera API",
"dialog": { "dialog": {
"request": { "request": {
"buttons": { "buttons": {
@ -324,7 +324,7 @@
"label": "Port" "label": "Port"
} }
}, },
"name": "YouTube Music API", "name": "Pear Desktop API",
"prompt": { "prompt": {
"hostname": { "hostname": {
"label": "Wpisz nazwę hosta (IP, np. 0.0.0.0), który będzie użyty do serwera API:", "label": "Wpisz nazwę hosta (IP, np. 0.0.0.0), który będzie użyty do serwera API:",
@ -373,7 +373,7 @@
"name": "Omiń ograniczenia wiekowe" "name": "Omiń ograniczenia wiekowe"
}, },
"captions-selector": { "captions-selector": {
"description": "Selektor napisów dla ścieżek audio YouTube Music", "description": "Selektor napisów dla ścieżek audio Pear Desktop",
"menu": { "menu": {
"autoload": "Automatycznie wybierz ostatnio używanych napisów", "autoload": "Automatycznie wybierz ostatnio używanych napisów",
"disable-captions": "Domyślnie, brak napisów" "disable-captions": "Domyślnie, brak napisów"
@ -429,7 +429,7 @@
"name": "Niestandardowe urządzenie wyjścia", "name": "Niestandardowe urządzenie wyjścia",
"prompt": { "prompt": {
"device-selector": { "device-selector": {
"label": "Wybierz wyjście audio które ma być użyte", "label": "Wybierz urządzenie wyjściowe",
"title": "Wybierz wyjście audio" "title": "Wybierz wyjście audio"
} }
} }
@ -447,7 +447,7 @@
"connected": "Połączono z Discordem", "connected": "Połączono z Discordem",
"disconnected": "Odłączono od Discorda" "disconnected": "Odłączono od Discorda"
}, },
"description": "Pokaż znajomym z Discorda czego słuchasz dzięki Rich Presence", "description": "Pokaż znajomym z Discorda czego słuchasz, dzięki technologii Rich Presence",
"menu": { "menu": {
"auto-reconnect": "Automatyczne wznawianie połączenia", "auto-reconnect": "Automatyczne wznawianie połączenia",
"clear-activity": "Wyczyść aktywność", "clear-activity": "Wyczyść aktywność",
@ -456,18 +456,18 @@
"disconnected": "Odłączono", "disconnected": "Odłączono",
"hide-duration-left": "Ukryj pozostały czas trwania", "hide-duration-left": "Ukryj pozostały czas trwania",
"hide-github-button": "Ukryj przycisk do GitHub", "hide-github-button": "Ukryj przycisk do GitHub",
"play-on-youtube-music": "Odtwórz w YouTube Music", "play-on-pear-desktop": "Odtwórz w Pear Desktop",
"set-inactivity-timeout": "Ustaw limit czasu bezczynności", "set-inactivity-timeout": "Ustaw limit czasu bezczynności",
"set-status-display-type": { "set-status-display-type": {
"label": "Opis statusu", "label": "Opis statusu",
"submenu": { "submenu": {
"artist": "Słucha {artist}", "artist": "Słucha {artist}",
"title": "Słucha {song title}", "pear-desktop": "Słucha Pear Desktop",
"youtube-music": "Słucha YouTube Music" "title": "Słucha {song title}"
} }
} }
}, },
"name": "Discord Rich Presence", "name": "Aktywność w Discord",
"prompt": { "prompt": {
"set-inactivity-timeout": { "set-inactivity-timeout": {
"label": "Podaj limit czasu bezczynności w sekundach:", "label": "Podaj limit czasu bezczynności w sekundach:",

View File

@ -33,25 +33,25 @@
"css-file-not-found": "Arquivo CSS \"{{cssFile}}\" não existe, ignorando" "css-file-not-found": "Arquivo CSS \"{{cssFile}}\" não existe, ignorando"
}, },
"unresponsive": { "unresponsive": {
"details": "Erro de falta de resposta!\n{{error}}" "details": "Erro por falta de resposta!\n{{error}}"
}, },
"when-ready": { "when-ready": {
"clearing-cache-after-20s": "Limpando cache do aplicativo" "clearing-cache-after-20s": "Limpando cache do aplicativo"
}, },
"window": { "window": {
"tried-to-render-offscreen": "A janela tentou renderizar fora da tela, tamanho da janela={{windowSize}}, tamanho da tela={{displaySize}}, posição={{position}}" "tried-to-render-offscreen": "A janela tentou renderizar fora dos parâmetros da tela, tamanho da janela={{windowSize}}, tamanho da tela={{displaySize}}, posição={{position}}"
} }
}, },
"dialog": { "dialog": {
"hide-menu-enabled": { "hide-menu-enabled": {
"detail": "O menu está oculto, use 'Alt' para mostrá-lo (ou 'Esc' ao usar o menu dentro do aplicativo)", "detail": "O menu está oculto, use 'Alt' para mostrá-lo (ou 'Esc' ao usar o menu dentro do aplicativo)",
"message": "Ocultar menu está ativado", "message": "Ocultar Menu está ativado",
"title": "Ocultar menu ativado" "title": "Ocultar Menu ativado"
}, },
"need-to-restart": { "need-to-restart": {
"buttons": { "buttons": {
"later": "Depois", "later": "Depois",
"restart-now": "Reiniciar agora" "restart-now": "Reiniciar Agora"
}, },
"detail": "O plugin \"{{pluginName}}\" requer uma reinicialização para entrar em vigor", "detail": "O plugin \"{{pluginName}}\" requer uma reinicialização para entrar em vigor",
"message": "\"{{pluginName}}\" precisa reiniciar", "message": "\"{{pluginName}}\" precisa reiniciar",
@ -84,7 +84,7 @@
"label": "Navegação", "label": "Navegação",
"submenu": { "submenu": {
"copy-current-url": "Copiar URL atual", "copy-current-url": "Copiar URL atual",
"go-back": "Voltar", "go-back": "Retornar",
"go-forward": "Avançar", "go-forward": "Avançar",
"quit": "Sair", "quit": "Sair",
"restart": "Reiniciar aplicativo" "restart": "Reiniciar aplicativo"
@ -154,7 +154,7 @@
"label": "Título da janela customizado", "label": "Título da janela customizado",
"prompt": { "prompt": {
"label": "Insira título customizado para a janela: (deixe em branco para desabilitar)", "label": "Insira título customizado para a janela: (deixe em branco para desabilitar)",
"placeholder": "Exemplo: Youtube Music" "placeholder": "Exemplo: Pear Desktop"
} }
}, },
"like-buttons": { "like-buttons": {
@ -208,8 +208,8 @@
"restart": "Reiniciar aplicativo", "restart": "Reiniciar aplicativo",
"show": "Mostrar janela", "show": "Mostrar janela",
"tooltip": { "tooltip": {
"default": "YouTube Music", "default": "Pear Desktop",
"with-song-info": "YouTube Music: {{artist}} - {{title}}" "with-song-info": "Pear Desktop: {{artist}} - {{title}}"
} }
} }
}, },
@ -287,7 +287,7 @@
"name": "Modo ambiente" "name": "Modo ambiente"
}, },
"amuse": { "amuse": {
"description": "Adiciona suporte ao YouTube Music ao widget 'Reproduzindo agora' do Amuse da 6K Labs", "description": "Adiciona suporte ao Pear Desktop ao widget 'Reproduzindo agora' do Amuse da 6K Labs",
"name": "Amuse", "name": "Amuse",
"response": { "response": {
"query": "Servidor API do Amuse em execução. GET /query para obter informações da música." "query": "Servidor API do Amuse em execução. GET /query para obter informações da música."
@ -369,11 +369,11 @@
"name": "Desfocar barra de navegação" "name": "Desfocar barra de navegação"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "Pular a verificação de idade do YouTube", "description": "Pular a verificação de idade do Music Player",
"name": "Ignorar restrições de idade" "name": "Ignorar restrições de idade"
}, },
"captions-selector": { "captions-selector": {
"description": "Seletor de legendas para faixas de áudio do YouTube Music", "description": "Seletor de legendas para faixas de áudio do Pear Desktop",
"menu": { "menu": {
"autoload": "Selecionar automaticamente a última legenda usada", "autoload": "Selecionar automaticamente a última legenda usada",
"disable-captions": "Sem legendas por padrão" "disable-captions": "Sem legendas por padrão"
@ -456,14 +456,14 @@
"disconnected": "Desconectado", "disconnected": "Desconectado",
"hide-duration-left": "Ocultar duração restante", "hide-duration-left": "Ocultar duração restante",
"hide-github-button": "Ocultar botão do GitHub", "hide-github-button": "Ocultar botão do GitHub",
"play-on-youtube-music": "Reproduzir no YouTube Music", "play-on-pear-desktop": "Reproduzir no Pear Desktop",
"set-inactivity-timeout": "Definir tempo limite de inatividade", "set-inactivity-timeout": "Definir tempo limite de inatividade",
"set-status-display-type": { "set-status-display-type": {
"label": "Texto de status", "label": "Texto de status",
"submenu": { "submenu": {
"artist": "Ouvindo {artist}", "artist": "Ouvindo {artist}",
"title": "Ouvindo {song title}", "pear-desktop": "Ouvindo Pear Desktop",
"youtube-music": "Ouvindo YouTube Music" "title": "Ouvindo {song title}"
} }
} }
}, },

View File

@ -154,7 +154,7 @@
"label": "Título de janela personalizado", "label": "Título de janela personalizado",
"prompt": { "prompt": {
"label": "Introduza um título: (deixe em branco para desativar)", "label": "Introduza um título: (deixe em branco para desativar)",
"placeholder": "Exemplo: YouTube Music" "placeholder": "Exemplo: Pear Desktop"
} }
}, },
"like-buttons": { "like-buttons": {
@ -208,8 +208,8 @@
"restart": "Reiniciar aplicação", "restart": "Reiniciar aplicação",
"show": "Mostrar janela", "show": "Mostrar janela",
"tooltip": { "tooltip": {
"default": "YouTube Music", "default": "Pear Desktop",
"with-song-info": "YouTube Music: {{artist}} - {{title}}" "with-song-info": "Pear Desktop: {{artist}} - {{title}}"
} }
} }
}, },
@ -287,7 +287,7 @@
"name": "Modo ambiente" "name": "Modo ambiente"
}, },
"amuse": { "amuse": {
"description": "Adiciona suporte ao YouTube Music para o widget Amuse now playing de 6K Labs", "description": "Adiciona suporte ao Pear Desktop para o widget Amuse now playing de 6K Labs",
"name": "Amuse", "name": "Amuse",
"response": { "response": {
"query": "O servidor da API Amuse está a ser executado. GET/query para obter informações sobre a faixa." "query": "O servidor da API Amuse está a ser executado. GET/query para obter informações sobre a faixa."
@ -369,11 +369,11 @@
"name": "Barra de navegação desfocada" "name": "Barra de navegação desfocada"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "Ignorar verificação de idade do YouTube", "description": "Ignorar verificação de idade do Music Player",
"name": "Ignorar restrições de idade" "name": "Ignorar restrições de idade"
}, },
"captions-selector": { "captions-selector": {
"description": "Seletor de legendas para as faixas de áudio do YouTube Music", "description": "Seletor de legendas para as faixas de áudio do Pear Desktop",
"menu": { "menu": {
"autoload": "Selecionar automaticamente a última legenda utilizada", "autoload": "Selecionar automaticamente a última legenda utilizada",
"disable-captions": "Sem legendas por omissão" "disable-captions": "Sem legendas por omissão"
@ -456,14 +456,14 @@
"disconnected": "Desconectado", "disconnected": "Desconectado",
"hide-duration-left": "Ocultar tempo restante", "hide-duration-left": "Ocultar tempo restante",
"hide-github-button": "Ocultar botão GitHub", "hide-github-button": "Ocultar botão GitHub",
"play-on-youtube-music": "Reproduzir em YouTube Music", "play-on-pear-desktop": "Reproduzir em Pear Desktop",
"set-inactivity-timeout": "Definir tempo de inatividade", "set-inactivity-timeout": "Definir tempo de inatividade",
"set-status-display-type": { "set-status-display-type": {
"label": "Texto de estado", "label": "Texto de estado",
"submenu": { "submenu": {
"artist": "A ouvir {artist}", "artist": "A ouvir {artist}",
"title": "A ouvir {song title}", "title": "A ouvir {song title}",
"youtube-music": "A reproduzir YouTube Music" "pear-desktop": "A reproduzir Pear Desktop"
} }
} }
}, },

View File

@ -154,7 +154,7 @@
"label": "Titlul ferestrei personalizate", "label": "Titlul ferestrei personalizate",
"prompt": { "prompt": {
"label": "Introduceți titlul ferestrei personalizate: (lăsați gol pentru a dezactiva)", "label": "Introduceți titlul ferestrei personalizate: (lăsați gol pentru a dezactiva)",
"placeholder": "Exemplu: Youtube Music" "placeholder": "Exemplu: Pear Desktop"
} }
}, },
"like-buttons": { "like-buttons": {
@ -208,8 +208,8 @@
"restart": "Reporneste aplicatia", "restart": "Reporneste aplicatia",
"show": "Arata fereastra", "show": "Arata fereastra",
"tooltip": { "tooltip": {
"default": "YouTube Music", "default": "Pear Desktop",
"with-song-info": "YouTube Music: {{artist}} - {{title}}" "with-song-info": "Pear Desktop: {{artist}} - {{title}}"
} }
} }
}, },
@ -287,7 +287,7 @@
"name": "Mod ambiental" "name": "Mod ambiental"
}, },
"amuse": { "amuse": {
"description": "Adauga suport Youtube Music pentru Amuse se redă acum widget de 6K Labs", "description": "Adauga suport Pear Desktop pentru Amuse se redă acum widget de 6K Labs",
"name": "Amuse", "name": "Amuse",
"response": { "response": {
"query": "Server-ul API-ului Amuse rulează. GET /query pentru a obține informații despre melodie." "query": "Server-ul API-ului Amuse rulează. GET /query pentru a obține informații despre melodie."
@ -369,11 +369,11 @@
"name": "Estompează Bara de Navigație" "name": "Estompează Bara de Navigație"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "Treci peste verificarea de vârstă a YouTube-ului", "description": "Treci peste verificarea de vârstă a Music Player",
"name": "Ignoră restricțiile de vârstă" "name": "Ignoră restricțiile de vârstă"
}, },
"captions-selector": { "captions-selector": {
"description": "Selector de subtitrări pentru piesele audio de pe YouTube Music", "description": "Selector de subtitrări pentru piesele audio de pe Pear Desktop",
"menu": { "menu": {
"autoload": "Selectează automat ultima subtitrare folosită", "autoload": "Selectează automat ultima subtitrare folosită",
"disable-captions": "Fără subtitrări în mod implicit" "disable-captions": "Fără subtitrări în mod implicit"
@ -456,14 +456,14 @@
"disconnected": "Deconectat", "disconnected": "Deconectat",
"hide-duration-left": "Ascunde timpul rămas", "hide-duration-left": "Ascunde timpul rămas",
"hide-github-button": "Ascunde butonul cu link-ul GitHub", "hide-github-button": "Ascunde butonul cu link-ul GitHub",
"play-on-youtube-music": "Redă pe YouTube Music", "play-on-pear-desktop": "Redă pe Pear Desktop",
"set-inactivity-timeout": "Setează intervalul de inactivitate", "set-inactivity-timeout": "Setează intervalul de inactivitate",
"set-status-display-type": { "set-status-display-type": {
"label": "Text stare", "label": "Text stare",
"submenu": { "submenu": {
"artist": "Ascultând {artist}", "artist": "Ascultând {artist}",
"title": "Ascultând {song title}", "title": "Ascultând {song title}",
"youtube-music": "Ascultând YouTube Music" "pear-desktop": "Ascultând Pear Desktop"
} }
} }
}, },

View File

@ -154,7 +154,7 @@
"label": "Собственное название окна", "label": "Собственное название окна",
"prompt": { "prompt": {
"label": "Введите собственное название окна: (оставьте пустым, чтобы отключить)", "label": "Введите собственное название окна: (оставьте пустым, чтобы отключить)",
"placeholder": "Например: YouTube Music" "placeholder": "Например: Pear Desktop"
} }
}, },
"like-buttons": { "like-buttons": {
@ -163,7 +163,7 @@
"hide": "Скрывать", "hide": "Скрывать",
"label": "Кнопка лайка" "label": "Кнопка лайка"
}, },
"remove-upgrade-button": "Убрать кнопку Youtube Premium", "remove-upgrade-button": "Убрать кнопку Premium",
"theme": { "theme": {
"dialog": { "dialog": {
"button": { "button": {
@ -208,8 +208,8 @@
"restart": "Перезапустить приложение", "restart": "Перезапустить приложение",
"show": "Показать окно", "show": "Показать окно",
"tooltip": { "tooltip": {
"default": "YouTube Music", "default": "Pear Desktop",
"with-song-info": "YouTube Music: {{artist}} - {{title}}" "with-song-info": "Pear Desktop: {{artist}} - {{title}}"
} }
} }
}, },
@ -369,11 +369,11 @@
"name": "Размытие панели навигации" "name": "Размытие панели навигации"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "Обход проверки возраста на YouTube", "description": "Обход проверки возраста на Music Player",
"name": "Обход возрастных ограничений" "name": "Обход возрастных ограничений"
}, },
"captions-selector": { "captions-selector": {
"description": "Выбор субтитров для аудиотреков в YouTube Music", "description": "Выбор субтитров для аудиотреков в Pear Desktop",
"menu": { "menu": {
"autoload": "Автоматически выбирать последние использованные субтитры", "autoload": "Автоматически выбирать последние использованные субтитры",
"disable-captions": "Без субтитров по умолчанию" "disable-captions": "Без субтитров по умолчанию"
@ -456,14 +456,14 @@
"disconnected": "Отключено", "disconnected": "Отключено",
"hide-duration-left": "Скрыть сколько осталось времени", "hide-duration-left": "Скрыть сколько осталось времени",
"hide-github-button": "Скрыть ссылку на GitHub", "hide-github-button": "Скрыть ссылку на GitHub",
"play-on-youtube-music": "Воспроизвести на YouTube Music", "play-on-pear-desktop": "Воспроизвести на Pear Desktop",
"set-inactivity-timeout": "Поставить таймер неактивности", "set-inactivity-timeout": "Поставить таймер неактивности",
"set-status-display-type": { "set-status-display-type": {
"label": "Текст статуса", "label": "Текст статуса",
"submenu": { "submenu": {
"artist": "Слушает {исполнитель}", "artist": "Слушает {исполнитель}",
"title": "Слушает {название трека}", "pear-desktop": "Слушает Pear Desktop",
"youtube-music": "Слушает YouTube Music" "title": "Слушает {название трека}"
} }
} }
}, },

View File

@ -201,8 +201,8 @@
"restart": "නැවත ආරම්භ කරන්න", "restart": "නැවත ආරම්භ කරන්න",
"show": "තිරය පෙන්වන්න", "show": "තිරය පෙන්වන්න",
"tooltip": { "tooltip": {
"default": "YouTube Music", "default": "Pear Desktop",
"with-song-info": "YouTube Music: {{artist}} - {{title}}" "with-song-info": "Pear Desktop: {{artist}} - {{title}}"
} }
} }
}, },

View File

@ -59,7 +59,7 @@
}, },
"unresponsive": { "unresponsive": {
"buttons": { "buttons": {
"quit": "Skončiť", "quit": "Ukončiť",
"relaunch": "Spustiť znova", "relaunch": "Spustiť znova",
"wait": "Počkajte" "wait": "Počkajte"
}, },
@ -70,7 +70,7 @@
"update-available": { "update-available": {
"buttons": { "buttons": {
"disable": "Vypnúť aktualizácie", "disable": "Vypnúť aktualizácie",
"download": "Sťiahnuť", "download": "Stiahnuť",
"ok": "OK" "ok": "OK"
}, },
"detail": "Nová verzia je k dispozícii a je možné ju stiahnuť na {{downloadLink}}", "detail": "Nová verzia je k dispozícii a je možné ju stiahnuť na {{downloadLink}}",
@ -141,9 +141,9 @@
"tray": { "tray": {
"label": "Panel oznámení", "label": "Panel oznámení",
"submenu": { "submenu": {
"disabled": "Vypnuý", "disabled": "Vypnutý",
"enabled-and-hide-app": "Zapnutý , a skryť okno aplikácie", "enabled-and-hide-app": "Povolené a skry aplikáciu",
"enabled-and-show-app": "Spustené a ukáž aplikáciu", "enabled-and-show-app": "Povolené a ukáž aplikáciu",
"play-pause-on-click": "Prehrať/Pozastaviť na stlačenie" "play-pause-on-click": "Prehrať/Pozastaviť na stlačenie"
} }
}, },
@ -154,7 +154,7 @@
"label": "Vlastný názov okna", "label": "Vlastný názov okna",
"prompt": { "prompt": {
"label": "Napíšte vlastný názov okna: (nechajte prázdne pre vypnutie)", "label": "Napíšte vlastný názov okna: (nechajte prázdne pre vypnutie)",
"placeholder": "Napríklad: YouTube Music" "placeholder": "Napríklad: Pear Desktop"
} }
}, },
"like-buttons": { "like-buttons": {
@ -185,11 +185,13 @@
}, },
"plugins": { "plugins": {
"enabled": "Zapnuté", "enabled": "Zapnuté",
"label": "Rozšírenia",
"new": "NOVÝ" "new": "NOVÝ"
}, },
"view": { "view": {
"label": "Náhľad",
"submenu": { "submenu": {
"force-reload": "Natvrdo obnoviť", "force-reload": "Nasilu obnoviť",
"reload": "Obnoviť", "reload": "Obnoviť",
"reset-zoom": "Ozajstná veľkosť", "reset-zoom": "Ozajstná veľkosť",
"toggle-fullscreen": "Prepnúť režim Celej Obrazovky", "toggle-fullscreen": "Prepnúť režim Celej Obrazovky",
@ -206,9 +208,664 @@
"restart": "Reštartovať aplikáciu", "restart": "Reštartovať aplikáciu",
"show": "Zobraziť okno", "show": "Zobraziť okno",
"tooltip": { "tooltip": {
"default": "YouTube Hudba", "default": "Pear Desktop",
"with-song-info": "Youtube Hudba: {{artist}} - {{title}}" "with-song-info": "Pear Desktop: {{artist}} - {{title}}"
} }
} }
},
"plugins": {
"ad-speedup": {
"description": "Ak sa spustí reklama, stlmí sa zvuk a nastaví sa rýchlosť prehrávania na 16x",
"name": "Zrýchľovač reklám"
},
"adblocker": {
"description": "Blokovať všetky reklamy a sledovania hneď od začiatku",
"menu": {
"blocker": "Blokovač"
},
"name": "Blokovač reklám"
},
"album-actions": {
"description": "Pridáva Undislike, Dislike, Like, a Unlike tlačítka k aplikovaniu tohto ku všetkým pesničkám v zozname pesničiek alebo albume",
"name": "Možnosti albumu"
},
"album-color-theme": {
"description": "Aplikuje dynamický motív a vizuálne efekty na základe palety farieb albumu",
"menu": {
"color-mix-ratio": {
"label": "Pomer miešania farieb",
"submenu": {
"percent": "{{ratio}}%"
}
}
},
"name": "Farebná téma albumu"
},
"ambient-mode": {
"description": "Aplikuje svetelné efekty pomocou vrhania jemných farieb z videa, do vášho pozadia obrazovky",
"menu": {
"blur-amount": {
"label": "Hodnota rozmazania",
"submenu": {
"pixels": "{{blurAmount}} pixelov"
}
},
"buffer": {
"label": "Vyrovnávacia pamäť",
"submenu": {
"buffer": "{{buffer}}"
}
},
"opacity": {
"label": "Nepriehľadnosť",
"submenu": {
"percent": "{{opacity}}%"
}
},
"quality": {
"label": "Kvalita",
"submenu": {
"pixels": "{{quality}} pixelov"
}
},
"size": {
"label": "Veľkosť",
"submenu": {
"percent": "{{size}}%"
}
},
"smoothness-transition": {
"label": "Plynulý prechod",
"submenu": {
"during": "Počas {{interpolationTime}} s"
}
},
"use-fullscreen": {
"label": "Používanie režimu celej obrazovky"
}
},
"name": "Ambientný mód"
},
"amuse": {
"description": "Pridáva Pear Desktop podporu pre Amuse práve prehráva widget od 6K Labs",
"name": "Amuse",
"response": {
"query": "Amuse API server beží. GET /query to get song info."
}
},
"api-server": {
"description": "Pridáva API server na ovládanie prehrávača",
"dialog": {
"request": {
"buttons": {
"allow": "Povoliť",
"deny": "Zakázať"
},
"message": "Povoliť {{ID}} ({{origin}}) prístup cez API?",
"title": "Žiadosť o autorizáciu API"
}
},
"menu": {
"auth-strategy": {
"label": "Stratégia autorizácie",
"submenu": {
"auth-at-first": {
"label": "Overiť pri prvom dotaze"
},
"none": {
"label": "Žiadna autorizácia"
}
}
},
"hostname": {
"label": "Hostname"
},
"port": {
"label": "Port"
}
},
"name": "API Server [Beta]",
"prompt": {
"hostname": {
"label": "Zadajte názov hostname(napr. 0.0.0.0) pre server API:",
"title": "Hostname"
},
"port": {
"label": "Zadajte port pre server API:",
"title": "Port"
}
}
},
"audio-compressor": {
"description": "Aplikovať kompresiu k audiu (znižuje hlasitosť najhlasnejších častí signálu a zvyšuje hlasitosť najjemnejších častí)",
"name": "Audio kompresor"
},
"auth-proxy-adapter": {
"description": "Podpora používania autentifikačných proxy služieb",
"menu": {
"disable": "Vypnúť Proxy Adaptér",
"enable": "Zapnúť Proxy Adaptér",
"hostname": {
"label": "Hostname"
},
"port": {
"label": "Port"
}
},
"name": "Adaptér autentifikačného proxy servera",
"prompt": {
"hostname": {
"label": "Zadajte hostname pre lokálny proxy server (vyžaduje reštart):",
"title": "Proxy Hostname"
},
"port": {
"label": "Zadajte port pre lokálny proxy server (vyžaduje reštart):",
"title": "Proxy Port"
}
}
},
"blur-nav-bar": {
"description": "Navigačnú lištu nastaví ako priehľadnú a rozmazanú",
"name": "Rozmazať navigačnú lištu"
},
"bypass-age-restrictions": {
"description": "Obísť overenie veku v hudobnom prehrávači",
"name": "Obísť vekové obmedzenia"
},
"captions-selector": {
"description": "Selektor titulkov pre zvukové stopy Pear Desktop",
"menu": {
"autoload": "Automatický výber naposledy použitých titulkov",
"disable-captions": "Žiadne titulky"
},
"name": "Selektor titulkov",
"prompt": {
"selector": {
"label": "Aktuálny jazyk titulkov: {{language}}",
"none": "Žiadne",
"title": "Výber jazyka titulkov"
}
},
"templates": {
"title": "Otvoriť selektor titulkov"
},
"toast": {
"caption-changed": "Titulky zmenené na {{language}}",
"caption-disabled": "Deaktivované titulky",
"no-captions": "Pre túto skladbu nie sú dostupné žiadne titulky"
}
},
"compact-sidebar": {
"description": "Vždy nastaviť bočný panel do kompaktného režimu",
"name": "Kompaktný bočný panel"
},
"crossfade": {
"description": "Prelínanie medzi skladbami",
"menu": {
"advanced": "Pokročilé"
},
"name": "Prelínanie [Beta]",
"prompt": {
"options": {
"multi-input": {
"fade-in-duration": "Trvanie nábehu (ms)",
"fade-out-duration": "Trvanie doznievania (ms)",
"fade-scaling": {
"label": "Škálovanie prelínania",
"linear": "Lineárny",
"logarithmic": "Logaritmický"
},
"seconds-before-end": "Prechod N sekúnd pred koncom"
},
"title": "Možnosti prelínania"
}
}
},
"custom-output-device": {
"description": "Nastavte vlastné výstupné médium pre skladby",
"menu": {
"device-selector": "Výber Zariadenia"
},
"name": "Vlastné výstupné zariadenie",
"prompt": {
"device-selector": {
"label": "Vyberte výstupné médium, ktoré chcete použiť",
"title": "Výber výstupného zariadenia"
}
}
},
"disable-autoplay": {
"description": "Spustí skladbu v režime „pozastavené“",
"menu": {
"apply-once": "Platí len pri spustení"
},
"name": "Zakázať automatické prehrávanie"
},
"discord": {
"backend": {
"already-connected": "Pokus o pripojenie s aktívnym pripojením",
"connected": "Pripojené k Discordu",
"disconnected": "Odpojené od Discordu"
},
"description": "Ukážte svojim priateľom, čo počúvate, s funkciou Rich Presence",
"menu": {
"auto-reconnect": "Automatické opätovné pripojenie",
"clear-activity": "Zmazať aktivitu",
"clear-activity-after-timeout": "Zmazať aktivitu po uplynutí časového limitu",
"connected": "Pripojené",
"disconnected": "Odpojené",
"hide-duration-left": "Skryť zostávajúcu dobu trvania",
"hide-github-button": "Skryť tlačidlo s odkazom na GitHub",
"play-on-pear-desktop": "Spustiť na Pear Desktop",
"set-inactivity-timeout": "Nastaviť časový limit nečinnosti",
"set-status-display-type": {
"label": "Text stavu",
"submenu": {
"artist": "Aktuálne si prehráva {artist}",
"pear-desktop": "Počúvať Pear Desktop",
"title": "Aktuálne si prehráva {song title}"
}
}
},
"name": "Discord Rich Presence",
"prompt": {
"set-inactivity-timeout": {
"label": "Zadajte časový limit nečinnosti v sekundách:",
"title": "Nastaviť časový limit nečinnosti"
}
}
},
"downloader": {
"backend": {
"dialog": {
"error": {
"buttons": {
"ok": "OK"
},
"message": "Ach! Ospravedlňujeme sa, sťahovanie sa nepodarilo…",
"title": "Chyba pri sťahovaní!"
},
"start-download-playlist": {
"buttons": {
"ok": "OK"
},
"detail": "({{playlistSize}} skladieb)",
"message": "Sťahovanie zoznamu {{playlistTitle}}",
"title": "Sťahovanie začalo"
}
},
"feedback": {
"conversion-progress": "Konverzia: {{percent}}%",
"converting": "Konvertujem…",
"done": "Hotovo: {{filePath}}",
"download-info": "Sťahujem {{artist}} - {{title}} [{{videoId}}",
"download-progress": "Sťahovanie: {{percent}}%",
"downloading": "Sťahujem…",
"downloading-counter": "Sťahujem {{current}}/{{total}}…",
"downloading-playlist": "Sťahujem zoznam „{{playlistTitle}}“ - {{playlistSize}} skladieb ({{playlistId}})",
"error-while-downloading": "Chyba pri sťahovaní „{{author}} - {{title}}“: {{error}}",
"folder-already-exists": "Priečinok {{playlistFolder}} už existuje",
"getting-playlist-info": "Získavanie informácií o zozname…",
"loading": "Načítavam…",
"playlist-has-only-one-song": "Zoznam obsahuje len jednu položku, ktorá sa stiahne priamo",
"playlist-id-not-found": "Nebolo nájdené žiadne ID zoznamu",
"playlist-is-empty": "Zoznam je prázdny",
"playlist-is-mix-or-private": "Chyba pri získavaní informácií o zozname: uistite sa, že nejde o súkromný zoznam alebo zoznam „Pre Vás“\n\n{{error}}",
"preparing-file": "Pripravujem súbor…",
"saving": "Ukladám…",
"trying-to-get-playlist-id": "Snažím sa získať ID zoznam: {{playlistId}}",
"video-id-not-found": "Video nebolo nájdené",
"writing-id3": "Zapisujem ID3 značky…"
}
},
"description": "Sťahuje MP3 / zdrojový zvuk priamo z rozhrania",
"menu": {
"choose-download-folder": "Vyberte priečinok na sťahovanie",
"download-finish-settings": {
"label": "Stiahnuť po skončení",
"prompt": {
"last-percent": "Po x percentách",
"last-seconds": "Posledných x sekúnd",
"title": "Nastavte, kedy sa má stiahnuť"
},
"submenu": {
"advanced": "Rozšírené",
"enabled": "Povolené",
"mode": "Časový režim",
"percent": "Percento",
"seconds": "Sekundy"
}
},
"download-playlist": "Stiahnuť zoznam",
"presets": "Predvoľby",
"skip-existing": "Preskočiť už existujúce súbory"
},
"name": "Sťahovač",
"renderer": {
"can-not-update-progress": "Nie je možné aktualizovať priebeh"
},
"templates": {
"button": "Stiahnuť"
}
},
"equalizer": {
"description": "Pridáva ekvalizér do prehrávača",
"menu": {
"presets": {
"label": "Predvoľby",
"list": {
"bass-booster": "Zosilňovač basov"
}
}
},
"name": "Ekvalizér"
},
"exponential-volume": {
"description": "Zmení slider hlasitosti na exponenciálny, aby bolo ľahšie vybrať nižšiu hlasitosť.",
"name": "Exponenciálna hlasitosť"
},
"in-app-menu": {
"description": "Dodáva lištám ponúk elegantný, tmavý alebo farebný vzhľad albumu",
"menu": {
"hide-dom-window-controls": "Skryť ovládacie prvky DOM"
},
"name": "Aplikačné menu"
},
"lumiastream": {
"description": "Pridáva Lumia Stream podporu",
"name": "Lumia Stream [Beta]"
},
"lyrics-genius": {
"description": "Pridáva podporu textov pre väčšinu piesní",
"menu": {
"romanized-lyrics": "Romanizované texty piesní"
},
"name": "Texty Genius",
"renderer": {
"fetched-lyrics": "Načítané texty piesní pre Genius"
}
},
"music-together": {
"description": "Zdieľajte zoznam s ostatnými. Keď hostiteľ prehrá skladbu, všetci ostatní budú počuť tú istú skladbu",
"dialog": {
"enter-host": "Zadajte Host ID"
},
"internal": {
"save": "Uložiť",
"track-source": "Sledovať zdroj",
"unknown-user": "Neznámy užívateľ"
},
"menu": {
"click-to-copy-id": "Kopírovať Host ID",
"close": "Zatvoriť Music Together",
"connected-users": "Pripojení užívatelia",
"disconnect": "Odpojiť Music Together",
"empty-user": "Žiadni pripojení užívatelia",
"host": "Music Together Host",
"join": "Pripojiť sa k Music Together",
"permission": {
"all": "Umožniť hosťom ovládať zoznam a prehrávač",
"host-only": "Len hostiteľ môže ovládať zoznam skladieb a prehrávač",
"playlist": "Umožniť hosťom ovládať zoznam"
},
"set-permission": "Povolenie na kontrolu zmien",
"status": {
"disconnected": "Odpojené",
"guest": "Pripojený ako hosť",
"host": "Pripojený ako hostiteľ"
}
},
"name": "Music Together [Beta]",
"toast": {
"add-song-failed": "Nepodarilo sa pridať skladbu",
"closed": "Music Together ukončené",
"disconnected": "Music Together odpojené",
"host-failed": "Nepodarilo sa hosťovať Music Together",
"id-copied": "Host ID bolo skopírované do schránky",
"id-copy-failed": "Nepodarilo sa skopírovať Host ID do schránky",
"join-failed": "Nepodarilo sa pripojiť k Music Together",
"joined": "Pripojený k Music Together",
"permission-changed": "Povolenie Music Together zmenené na „{{permission}}“",
"remove-song-failed": "Nepodarilo sa odstrániť skladbu",
"user-connected": "{{name}} sa pripojil k Music Together",
"user-disconnected": "{{name}} opustil Music Together"
}
},
"navigation": {
"description": "Šípky pre navigáciu vpred/vzad sú priamo integrované do rozhrania, rovnako ako vo vašom obľúbenom prehliadači",
"name": "Navigácia",
"templates": {
"back": {
"title": "Prejsť na predchádzajúcu stránku"
},
"forward": {
"title": "Prejsť na nasledujúcu stránku"
}
}
},
"no-google-login": {
"description": "Odstrániť tlačidlá a odkazy na prihlásenie do služby Google z rozhrania",
"name": "Žiadne prihlásenie do Google"
},
"notifications": {
"description": "Zobraziť upozornenie pri spustení prehrávania skladby (interaktívne upozornenia sú k dispozícii v systéme Windows)",
"menu": {
"interactive": "Interaktívne oznámenia",
"interactive-settings": {
"label": "Interaktívne nastavenia",
"submenu": {
"hide-button-text": "Skryť text tlačidla",
"refresh-on-play-pause": "Obnoviť pri prehrávaní/pozastavení",
"tray-controls": "Otvoriť/Zatvoriť kliknutím na lištu"
}
},
"priority": "Priorita oznámenia",
"toast-style": "Štýl toastu",
"unpause-notification": "Zobraziť upozornenie pri obnovení"
},
"name": "Upozornenia"
},
"performance-improvement": {
"description": "Zlepšite výkon povolením experimentálnych skriptov",
"name": "Zlepšenie výkonu [Beta]"
},
"picture-in-picture": {
"description": "Umožňuje prepnúť aplikáciu do režimu obraz v obraze",
"menu": {
"always-on-top": "Vždy na vrchu",
"hotkey": {
"label": "Klávesová skratka",
"prompt": {
"keybind-options": {
"hotkey": "Klávesová skratka"
},
"label": "Vyberte klávesovú skratku pre prepínanie obraz v obraze",
"title": "Obraz v obraze klávesová skratka"
}
},
"save-window-position": "Uložiť pozíciu okna",
"save-window-size": "Uložiť veľkosť okna",
"use-native-pip": "Použiť natívne PiP prehliadača"
},
"name": "Obraz v obraze",
"templates": {
"button": "Obraz v obraze"
}
},
"playback-speed": {
"description": "Počúvajte rýchlo, počúvajte pomaly! Pridáva slider, ktorý ovláda rýchlosť skladby",
"name": "Rýchlosť prehrávania",
"templates": {
"button": "Rýchlosť"
}
},
"precise-volume": {
"description": "Presne ovládajte hlasitosť pomocou kolieska myši/klávesových skratiek, s vlastným HUD a prispôsobiteľnými krokmi hlasitosti",
"menu": {
"arrows-shortcuts": "Ovládanie pomocou šípok",
"custom-volume-steps": "Nastavenie vlastných krokov hlasitosti",
"global-shortcuts": "Globálne klávesové skratky"
},
"name": "Presná hlasitosť",
"prompt": {
"global-shortcuts": {
"keybind-options": {
"decrease": "Znížiť hlasitosť",
"increase": "Zvýšiť hlasitosť"
},
"label": "Vybrať globálne klávesové skratky:",
"title": "Globálne klávesové skratky pre hlasitosť"
},
"volume-steps": {
"label": "Vybrať kroky zvýšenia/zníženia hlasitosti",
"title": "Kroky hlasitosti"
}
}
},
"quality-changer": {
"backend": {
"dialog": {
"quality-changer": {
"detail": "Aktuálna kvalita: {{quality}}",
"message": "Výber kvality videa:",
"title": "Výber kvality videa"
}
}
},
"description": "Umožňuje zmeniť kvalitu videa pomocou tlačidla v prekrytí videa",
"name": "Zmena kvality videa",
"renderer": {
"quality-settings-button": {
"label": "Otvoriť nastavenia kvality prehrávača"
}
}
},
"scrobbler": {
"description": "Pridať podporu scrobbling (napr. last.fm, Listenbrainz)",
"dialog": {
"lastfm": {
"auth-failed": {
"message": "Nepodarilo sa autentifikovať s Last.fm\nSkryť vyskakovacie okno do ďalšieho reštartu.",
"title": "Autentifikácia zlyhala"
}
}
},
"menu": {
"lastfm": {
"api-settings": "Last.fm API Nastavenia"
},
"listenbrainz": {
"token": "Vložiť ListenBrainz používateľský token"
},
"scrobble-alternative-artist": "Použiť alternatívnych umelcov",
"scrobble-alternative-title": "Použiť alternatívne názvy",
"scrobble-other-media": "Scrobble iných médií"
},
"name": "Scrobbler",
"prompt": {
"lastfm": {
"api-key": "Last.fm API kľúč",
"api-secret": "Last.fm API tajomstvo"
},
"listenbrainz": {
"token": {
"label": "Vlož svoj ListenBrainz používateľský token:",
"title": "ListenBrainz token"
}
}
}
},
"shortcuts": {
"description": "Povoľuje nastaviť globálne klávesové skratky pre prehrávanie (Prehrať/Pozastaviť/Ďalšie/Predošlé) a vypínať media OSD prepisovaním media kľúčov, zapne Ctrl/CMD + F pre vyhľadávanie, zapne Linux MPRIS podporu pre media kľúče a vlastné klávesové skratky pre pokročilých používateľov.",
"menu": {
"override-media-keys": "Prepísať Media Kľúče",
"set-keybinds": "Globálne ovládanie skladieb"
},
"name": "Skratky (& MPRIS)",
"prompt": {
"keybind": {
"keybind-options": {
"next": "Ďalšia",
"play-pause": "Prehrať / Pauza",
"previous": "Predošlá"
},
"label": "Zvoliť globálne klávesové skratky na ovládanie skladieb:",
"title": "Globálne klávesové skratky"
}
}
},
"skip-disliked-songs": {
"description": "Preskakuje skladby označené Nepáči sa",
"name": "Preskakovať skladby označené Nepáči sa"
},
"skip-silences": {
"description": "Automaticky preskakovať tiché časti v hudbe",
"name": "Preskakuj tiché časti"
},
"sponsorblock": {
"description": "Automaticky preskakuje nehudbné časti ako intro/outro, alebo tie časti videoklipov v ktorých nehrá hudba",
"name": "Sponzorský blok"
},
"synced-lyrics": {
"description": "Poskytuje synchronizované texty k skladbám, pričom používa poskytovateľov ako LRClib.",
"errors": {
"fetch": "⚠️\t\tPri získavaní textu sa vyskytla chyba. \n\tSkúste znova neskôr.",
"not-found": "⚠Pre túto skladbu nebol nájdený žiadny text."
},
"menu": {
"line-effect": {
"submenu": {
"offset": {
"label": "Offset"
}
}
},
"precise-timing": {
"label": "Dokonale synchronizovať text piesne"
},
"preferred-provider": {
"label": "Preferovaný Poskytovateľ",
"none": {
"label": "Žiadne",
"tooltip": "Žiadny preferovaný poskytovateľ"
}
}
}
},
"touchbar": {
"name": "Dotykový Panel"
},
"transparent-player": {
"description": "Nastaví okno aplikácie ako priehľadné"
},
"video-toggle": {
"menu": {
"align": {
"submenu": {
"left": "Vľavo",
"middle": "Stred",
"right": "Vpravo"
}
},
"mode": {
"submenu": {
"disabled": "Vypnuté",
"native": "Natívny prepínač"
}
}
},
"name": "Prepínač Videa",
"templates": {
"button-song": "Skladba",
"button-video": "Video"
}
},
"visualizer": {
"description": "Pridá do prehrávača vizualizér",
"menu": {
"visualizer-type": "Typ Vizualizéra"
},
"name": "Vizualizér"
}
} }
} }

View File

@ -201,8 +201,8 @@
"restart": "Ponovni zagon", "restart": "Ponovni zagon",
"show": "Pokaži okno", "show": "Pokaži okno",
"tooltip": { "tooltip": {
"default": "YouTube Glasba", "default": "Pear Desktop",
"with-song-info": "YouTube Glasba: {{artist}} - {{title}}" "with-song-info": "Pear Desktop: {{artist}} - {{title}}"
} }
} }
}, },
@ -335,7 +335,7 @@
"name": "Preskoči starostno omejitev" "name": "Preskoči starostno omejitev"
}, },
"captions-selector": { "captions-selector": {
"description": "Izberi podnapise za YouTube Music zvočne posnetke", "description": "Izberi podnapise za Pear Desktop zvočne posnetke",
"menu": { "menu": {
"autoload": "Avtomatsko uporabi zadnje izbrane podnapise", "autoload": "Avtomatsko uporabi zadnje izbrane podnapise",
"disable-captions": "Avtomatsko brez podnapisov" "disable-captions": "Avtomatsko brez podnapisov"
@ -400,7 +400,7 @@
"disconnected": "Prekinjena povezava", "disconnected": "Prekinjena povezava",
"hide-duration-left": "Skrij preostali čas", "hide-duration-left": "Skrij preostali čas",
"hide-github-button": "Skrij povezavo do GitHub-a", "hide-github-button": "Skrij povezavo do GitHub-a",
"play-on-youtube-music": "Predvajaj v YouTube Music", "play-on-pear-desktop": "Predvajaj v Pear Desktop",
"set-inactivity-timeout": "Nastavite časovno omejitev neaktivnosti" "set-inactivity-timeout": "Nastavite časovno omejitev neaktivnosti"
}, },
"name": "Discord bogata prisotnost (Rich Presence)", "name": "Discord bogata prisotnost (Rich Presence)",

View File

@ -154,7 +154,7 @@
"label": "Prilagođeni naziv prozora", "label": "Prilagođeni naziv prozora",
"prompt": { "prompt": {
"label": "Unesite prilagođeni naslov prozora: (ostavite prazno da onemogućite)", "label": "Unesite prilagođeni naslov prozora: (ostavite prazno da onemogućite)",
"placeholder": "Primer: YouTube Muzika" "placeholder": "Primer: Pear Desktop"
} }
}, },
"like-buttons": { "like-buttons": {
@ -208,8 +208,8 @@
"restart": "Ponovo pokreni aplikaciju", "restart": "Ponovo pokreni aplikaciju",
"show": "Prikaži prozor", "show": "Prikaži prozor",
"tooltip": { "tooltip": {
"default": "YouTube Muzika", "default": "Pear Desktop",
"with-song-info": "YouTube Muzika: {{artist}} - {{title}}" "with-song-info": "Pear Desktop: {{artist}} - {{title}}"
} }
} }
}, },
@ -287,7 +287,7 @@
"name": "Ambijentalni režim" "name": "Ambijentalni režim"
}, },
"amuse": { "amuse": {
"description": "Dodaje podršku za 'Amuse now' vidžet (6K Labs) u YouTube Muziku", "description": "Dodaje podršku za 'Amuse now' vidžet (6K Labs) u Pear Desktop",
"name": "Zabavi", "name": "Zabavi",
"response": { "response": {
"query": "Amuse API server je pokrenut. Koristite GET /query da biste dobili informacije o numeri." "query": "Amuse API server je pokrenut. Koristite GET /query da biste dobili informacije o numeri."
@ -369,11 +369,11 @@
"name": "Zamuti navigacioni meni" "name": "Zamuti navigacioni meni"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "Preskoči starosnu verifikaciju za YouTube", "description": "Preskoči starosnu verifikaciju za Music Player",
"name": "Preskoči starosna ograničenja" "name": "Preskoči starosna ograničenja"
}, },
"captions-selector": { "captions-selector": {
"description": "Odabir prevoda za numere/audio trake na YouTube Muzici", "description": "Odabir prevoda za numere/audio trake na Pear Desktop",
"menu": { "menu": {
"autoload": "Automatski odaberi prethodno odabrani prevod", "autoload": "Automatski odaberi prethodno odabrani prevod",
"disable-captions": "Podrazumevano bez prevoda" "disable-captions": "Podrazumevano bez prevoda"
@ -456,14 +456,14 @@
"disconnected": "Nije povezano", "disconnected": "Nije povezano",
"hide-duration-left": "Sakrij preostalo vreme", "hide-duration-left": "Sakrij preostalo vreme",
"hide-github-button": "Sakrij dugme sa GitHub linkom", "hide-github-button": "Sakrij dugme sa GitHub linkom",
"play-on-youtube-music": "Reprodukuj na YouTube Muzici", "play-on-pear-desktop": "Reprodukuj na Pear Desktop",
"set-inactivity-timeout": "Podesi tajmer za neaktivnost", "set-inactivity-timeout": "Podesi tajmer za neaktivnost",
"set-status-display-type": { "set-status-display-type": {
"label": "Tekst statusa", "label": "Tekst statusa",
"submenu": { "submenu": {
"artist": "Slušanje {artist}", "artist": "Slušanje {artist}",
"title": "Slušanje {song title}", "title": "Slušanje {song title}",
"youtube-music": "Slušanje YouTube muzike" "pear-desktop": "Slušanje Pear Desktop"
} }
} }
}, },

View File

@ -154,7 +154,7 @@
"label": "Anpassad titel på fönstret", "label": "Anpassad titel på fönstret",
"prompt": { "prompt": {
"label": "Ange anpassad fönstertitel: (lämna tomt för att inaktivera)", "label": "Ange anpassad fönstertitel: (lämna tomt för att inaktivera)",
"placeholder": "Exempelvis: YouTube Music" "placeholder": "Exempelvis: Pear Desktop"
} }
}, },
"like-buttons": { "like-buttons": {
@ -208,8 +208,8 @@
"restart": "Starta om appen", "restart": "Starta om appen",
"show": "Visa fönster", "show": "Visa fönster",
"tooltip": { "tooltip": {
"default": "YouTube Music", "default": "Pear Desktop",
"with-song-info": "YouTube Music: {{artist}} {{title}}" "with-song-info": "Pear Desktop: {{artist}} {{title}}"
} }
} }
}, },
@ -287,7 +287,7 @@
"name": "Ambiensläge" "name": "Ambiensläge"
}, },
"amuse": { "amuse": {
"description": "Lägger till stöd för YouTube Music i Amuse Now Playing-widgeten av 6K Labs", "description": "Lägger till stöd för Pear Desktop i Amuse Now Playing-widgeten av 6K Labs",
"name": "Amuse", "name": "Amuse",
"response": { "response": {
"query": "Amuse API-servern körs. Använd GET /query för att hämta information om låt." "query": "Amuse API-servern körs. Använd GET /query för att hämta information om låt."
@ -369,11 +369,11 @@
"name": "Suddigt Navigeringsfält" "name": "Suddigt Navigeringsfält"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "Hoppa över YouTubes åldersverifiering", "description": "Hoppa över Music Player åldersverifiering",
"name": "Hoppa Över Åldersbegränsningar" "name": "Hoppa Över Åldersbegränsningar"
}, },
"captions-selector": { "captions-selector": {
"description": "Välj textning för YouTube Music-ljudspår", "description": "Välj textning för Pear Desktop-ljudspår",
"menu": { "menu": {
"autoload": "Välj automatiskt senast använda textning", "autoload": "Välj automatiskt senast använda textning",
"disable-captions": "Ingen textning som standard" "disable-captions": "Ingen textning som standard"
@ -456,14 +456,14 @@
"disconnected": "Frånkopplad", "disconnected": "Frånkopplad",
"hide-duration-left": "Dölj återstående tid", "hide-duration-left": "Dölj återstående tid",
"hide-github-button": "Dölj knapp för GitHub-länk", "hide-github-button": "Dölj knapp för GitHub-länk",
"play-on-youtube-music": "Spela på YouTube Music", "play-on-pear-desktop": "Spela på Pear Desktop",
"set-inactivity-timeout": "Ställ in inaktivitetstid", "set-inactivity-timeout": "Ställ in inaktivitetstid",
"set-status-display-type": { "set-status-display-type": {
"label": "Statusmeddelande", "label": "Statusmeddelande",
"submenu": { "submenu": {
"artist": "Lyssnar på {artist}", "artist": "Lyssnar på {artist}",
"title": "Lyssnar på {song title}", "title": "Lyssnar på {song title}",
"youtube-music": "Lyssnar på YouTube Music" "pear-desktop": "Lyssnar på Pear Desktop"
} }
} }
}, },

View File

@ -154,7 +154,7 @@
"label": "தனிப்பயன் சாளர தலைப்பு", "label": "தனிப்பயன் சாளர தலைப்பு",
"prompt": { "prompt": {
"label": "தனிப்பயன் சாளர தலைப்பை உள்ளிடவும்: (முடக்க காலியாக விடவும்)", "label": "தனிப்பயன் சாளர தலைப்பை உள்ளிடவும்: (முடக்க காலியாக விடவும்)",
"placeholder": "எடுத்துக்காட்டு: YouTube இசை" "placeholder": "எடுத்துக்காட்டு: Pear Desktop"
} }
}, },
"like-buttons": { "like-buttons": {
@ -209,7 +209,7 @@
"show": "சாளரத்தைக் காட்டு", "show": "சாளரத்தைக் காட்டு",
"tooltip": { "tooltip": {
"default": "யூடியூப் இசை", "default": "யூடியூப் இசை",
"with-song-info": "YouTube இசை: {{artist}} - {{title}}" "with-song-info": "Pear Desktop: {{artist}} - {{title}}"
} }
} }
}, },
@ -287,7 +287,7 @@
"name": "சுற்றுப்புற முறை" "name": "சுற்றுப்புற முறை"
}, },
"amuse": { "amuse": {
"description": "6K ஆய்வகங்களால் இப்போது விட்செட்டில் விளையாடும் Amuse க்கு YouTube இசை ஆதரவை சேர்க்கிறது", "description": "6K ஆய்வகங்களால் இப்போது விட்செட்டில் விளையாடும் Amuse க்கு Music Player இசை ஆதரவை சேர்க்கிறது",
"name": "பொழுதுபோக்கு", "name": "பொழுதுபோக்கு",
"response": { "response": {
"query": "பநிஇ சேவையகம் இயங்குகிறது. பாடல் தகவலைப் பெற /வினவல்." "query": "பநிஇ சேவையகம் இயங்குகிறது. பாடல் தகவலைப் பெற /வினவல்."
@ -369,11 +369,11 @@
"name": "மங்கலான வழிசெலுத்தல் பட்டி" "name": "மங்கலான வழிசெலுத்தல் பட்டி"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "YouTube அகவை சரிபார்ப்பு பைபாச்", "description": "Music Player அகவை சரிபார்ப்பு பைபாச்",
"name": "அகவை கட்டுப்பாடுகள் பைபாச்" "name": "அகவை கட்டுப்பாடுகள் பைபாச்"
}, },
"captions-selector": { "captions-selector": {
"description": "YouTube இசை ஆடியோ டிராக்குகளுக்கான தலைப்பு தேர்வாளர்", "description": "Pear Desktop இசை ஆடியோ டிராக்குகளுக்கான தலைப்பு தேர்வாளர்",
"menu": { "menu": {
"autoload": "கடைசியாக பயன்படுத்தப்பட்ட தலைப்பை தானாகத் தேர்ந்தெடுக்கவும்", "autoload": "கடைசியாக பயன்படுத்தப்பட்ட தலைப்பை தானாகத் தேர்ந்தெடுக்கவும்",
"disable-captions": "முன்னிருப்பாக தலைப்புகள் இல்லை" "disable-captions": "முன்னிருப்பாக தலைப்புகள் இல்லை"
@ -456,14 +456,14 @@
"disconnected": "துண்டிக்கப்பட்டது", "disconnected": "துண்டிக்கப்பட்டது",
"hide-duration-left": "காலம் மீதமுள்ளதை மறைக்கவும்", "hide-duration-left": "காலம் மீதமுள்ளதை மறைக்கவும்",
"hide-github-button": "அறிவிலிமையம் இணைப்பு பொத்தானை மறைக்கவும்", "hide-github-button": "அறிவிலிமையம் இணைப்பு பொத்தானை மறைக்கவும்",
"play-on-youtube-music": "யூடியூப் இசையில் விளையாடுங்கள்", "play-on-pear-desktop": "யூடியூப் இசையில் விளையாடுங்கள்",
"set-inactivity-timeout": "செயலற்ற நேரம் முடிந்தது", "set-inactivity-timeout": "செயலற்ற நேரம் முடிந்தது",
"set-status-display-type": { "set-status-display-type": {
"label": "நிலை உரை", "label": "நிலை உரை",
"submenu": { "submenu": {
"artist": "{கலைஞர்} பாடலைக் கேட்கிறேன்", "artist": "{கலைஞர்} பாடலைக் கேட்கிறேன்",
"title": "பாடலைக் கேட்கிறேன்{பாடல் தலைப்பு}", "pear-desktop": "வலையொளி இசையில் கேட்கிறது",
"youtube-music": "வலையொளி இசையில் கேட்கிறது" "title": "பாடலைக் கேட்கிறேன்{பாடல் தலைப்பு}"
} }
} }
}, },

View File

@ -154,7 +154,7 @@
"label": "ชื่อหน้าต่างกำหนดเอง", "label": "ชื่อหน้าต่างกำหนดเอง",
"prompt": { "prompt": {
"label": "กำหนดชื่อหน้าต่างที่ต้องการ: (ปล่อยว่างเพื่อปิดใช้งาน)", "label": "กำหนดชื่อหน้าต่างที่ต้องการ: (ปล่อยว่างเพื่อปิดใช้งาน)",
"placeholder": "ตัวอย่าง: Youtube Music" "placeholder": "ตัวอย่าง: Pear Desktop"
} }
}, },
"like-buttons": { "like-buttons": {
@ -208,8 +208,8 @@
"restart": "รีสตาร์ตแอป", "restart": "รีสตาร์ตแอป",
"show": "แสดงหน้าต่าง", "show": "แสดงหน้าต่าง",
"tooltip": { "tooltip": {
"default": "YouTube Music", "default": "Pear Desktop",
"with-song-info": "YouTube Music: {{artist}} - {{title}}" "with-song-info": "Pear Desktop: {{artist}} - {{title}}"
} }
} }
}, },
@ -287,7 +287,7 @@
"name": "โหมดสภาพแวดล้อม" "name": "โหมดสภาพแวดล้อม"
}, },
"amuse": { "amuse": {
"description": "เพิ่มการรองรับ Youtube Music สำหรับ Widget Amuse Now Playing ของ 6K Labs", "description": "เพิ่มการรองรับ Pear Desktop สำหรับ Widget Amuse Now Playing ของ 6K Labs",
"name": "Amuse", "name": "Amuse",
"response": { "response": {
"query": "API Server ของ Amuse ทำงานอยู่ ส่ง GET ไปที่ /query เพื่อขอข้อมูลเกี่ยวกับเพลง" "query": "API Server ของ Amuse ทำงานอยู่ ส่ง GET ไปที่ /query เพื่อขอข้อมูลเกี่ยวกับเพลง"
@ -369,11 +369,11 @@
"name": "เบลอแถบนำทาง" "name": "เบลอแถบนำทาง"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "ข้ามการตรวจสอบอายุของ YouTube", "description": "ข้ามการตรวจสอบอายุของ Music Player",
"name": "ข้ามข้อจำกัดอายุ" "name": "ข้ามข้อจำกัดอายุ"
}, },
"captions-selector": { "captions-selector": {
"description": "ตัวเลือกคำบรรยายสำหรับเพลงใน YouTube Music", "description": "ตัวเลือกคำบรรยายสำหรับเพลงใน Pear Desktop",
"menu": { "menu": {
"autoload": "เลือกคำบรรยายที่ใช้ครั้งล่าสุดโดยอัตโนมัติ", "autoload": "เลือกคำบรรยายที่ใช้ครั้งล่าสุดโดยอัตโนมัติ",
"disable-captions": "ไม่มีคำบรรยายเป็นค่าเริ่มต้น" "disable-captions": "ไม่มีคำบรรยายเป็นค่าเริ่มต้น"
@ -456,14 +456,14 @@
"disconnected": "ตัดการเชื่อมต่อ", "disconnected": "ตัดการเชื่อมต่อ",
"hide-duration-left": "ซ่อนระยะเวลาที่เหลือ", "hide-duration-left": "ซ่อนระยะเวลาที่เหลือ",
"hide-github-button": "ซ่อนปุ่มลิงก์ GitHub", "hide-github-button": "ซ่อนปุ่มลิงก์ GitHub",
"play-on-youtube-music": "เล่นบน YouTube Music", "play-on-pear-desktop": "เล่นบน Pear Desktop",
"set-inactivity-timeout": "ตั้งระยะเวลาไม่มีกิจกรรม", "set-inactivity-timeout": "ตั้งระยะเวลาไม่มีกิจกรรม",
"set-status-display-type": { "set-status-display-type": {
"label": "ข้อความสถานะ", "label": "ข้อความสถานะ",
"submenu": { "submenu": {
"artist": "กำลังฟัง {ชื่อนักร้อง}", "artist": "กำลังฟัง {ชื่อนักร้อง}",
"title": "กำลังฟัง {ชื่อเพลง}", "title": "กำลังฟัง {ชื่อเพลง}",
"youtube-music": "กำลังฟัง YouTube Music" "pear-desktop": "กำลังฟัง Pear Desktop"
} }
} }
}, },

View File

@ -154,7 +154,7 @@
"label": "Özel pencere başlığı", "label": "Özel pencere başlığı",
"prompt": { "prompt": {
"label": "Özel pencere başlığı girin: (devre dışı bırakmak için boş bırakın)", "label": "Özel pencere başlığı girin: (devre dışı bırakmak için boş bırakın)",
"placeholder": "Örnek: Youtube Music" "placeholder": "Örnek: Pear Desktop"
} }
}, },
"like-buttons": { "like-buttons": {
@ -208,8 +208,8 @@
"restart": "Yeniden başlat", "restart": "Yeniden başlat",
"show": "Pencereyi görüntüle", "show": "Pencereyi görüntüle",
"tooltip": { "tooltip": {
"default": "YouTube Müzik", "default": "Pear Desktop",
"with-song-info": "YouTube Müzik: {{artist}} - {{title}}" "with-song-info": "Pear Desktop: {{artist}} - {{title}}"
} }
} }
}, },
@ -287,7 +287,7 @@
"name": "Ambiyans Modu" "name": "Ambiyans Modu"
}, },
"amuse": { "amuse": {
"description": "6K Labs'ın Amuse oynatma widget'ı için YouTube Music desteği ekler", "description": "6K Labs'ın Amuse oynatma widget'ı için Pear Desktop desteği ekler",
"name": "Amuse", "name": "Amuse",
"response": { "response": {
"query": "Amuse API sunucusu çalışıyor. Şarkı bilgilerini almak için GET /query kullanabilirsiniz." "query": "Amuse API sunucusu çalışıyor. Şarkı bilgilerini almak için GET /query kullanabilirsiniz."
@ -369,11 +369,11 @@
"name": "Navigasyon barını bulanıklaştır" "name": "Navigasyon barını bulanıklaştır"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "YouTube yaş doğrulamasını atla", "description": "Music Player yaş doğrulamasını atla",
"name": "Yaş doğrulamasını atla" "name": "Yaş doğrulamasını atla"
}, },
"captions-selector": { "captions-selector": {
"description": "YouTube Music için altyazı seçici", "description": "Pear Desktop için altyazı seçici",
"menu": { "menu": {
"autoload": "Son kullanılan altyazıyı otomatik olarak seç", "autoload": "Son kullanılan altyazıyı otomatik olarak seç",
"disable-captions": "Varsayılan olarak altyazı yok" "disable-captions": "Varsayılan olarak altyazı yok"
@ -456,14 +456,14 @@
"disconnected": "Bağlantı kesildi", "disconnected": "Bağlantı kesildi",
"hide-duration-left": "Kalan süreyi gizle", "hide-duration-left": "Kalan süreyi gizle",
"hide-github-button": "GitHub bağlantısını gizle", "hide-github-button": "GitHub bağlantısını gizle",
"play-on-youtube-music": "YouTube Music de oynat", "play-on-pear-desktop": "Pear Desktop de oynat",
"set-inactivity-timeout": "Hareketsizlik zaman aşımını ayarla", "set-inactivity-timeout": "Hareketsizlik zaman aşımını ayarla",
"set-status-display-type": { "set-status-display-type": {
"label": "Durum metni", "label": "Durum metni",
"submenu": { "submenu": {
"artist": "{artist} Dinleniyor", "artist": "{artist} Dinleniyor",
"title": "{song title} Dinleniyor", "title": "{song title} Dinleniyor",
"youtube-music": "YouTube Müzik Dinleniyor" "pear-desktop": "Pear Desktop Dinleniyor"
} }
} }
}, },

View File

@ -150,6 +150,13 @@
"visual-tweaks": { "visual-tweaks": {
"label": "Візуальні налаштування", "label": "Візуальні налаштування",
"submenu": { "submenu": {
"custom-window-title": {
"label": "Налаштування заголовка вікна",
"prompt": {
"label": "Введіть власний заголовок вікна: (залиште порожнім, щоб вимкнути)",
"placeholder": "Приклад: Pear Desktop"
}
},
"like-buttons": { "like-buttons": {
"default": "За замовчуванням", "default": "За замовчуванням",
"force-show": "Завжди показувати", "force-show": "Завжди показувати",
@ -201,8 +208,8 @@
"restart": "Перезапустити програму", "restart": "Перезапустити програму",
"show": "Показати вікно", "show": "Показати вікно",
"tooltip": { "tooltip": {
"default": "YouTube Music", "default": "Pear Desktop",
"with-song-info": "YouTube Music: {{artist}} - {{title}}" "with-song-info": "Pear Desktop: {{artist}} - {{title}}"
} }
} }
}, },
@ -280,7 +287,7 @@
"name": "Режим навколишнього середовища" "name": "Режим навколишнього середовища"
}, },
"amuse": { "amuse": {
"description": "Додає підтримку YouTube Music для віджета Amuse now playing від 6K Labs", "description": "Додає підтримку Pear Desktop для віджета Amuse now playing від 6K Labs",
"name": "Amuse", "name": "Amuse",
"response": { "response": {
"query": "Сервер Amuse API запущено. Запит GET /query для отримання інформації про пісню." "query": "Сервер Amuse API запущено. Запит GET /query для отримання інформації про пісню."
@ -362,11 +369,11 @@
"name": "Розмиття панелі навігації" "name": "Розмиття панелі навігації"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "Обхід перевірки віку на YouTube", "description": "Обхід перевірки віку на Music Player",
"name": "Обхід вікових обмежень" "name": "Обхід вікових обмежень"
}, },
"captions-selector": { "captions-selector": {
"description": "Вибір субтитрів для аудіодоріжок YouTube Music", "description": "Вибір субтитрів для аудіодоріжок Pear Desktop",
"menu": { "menu": {
"autoload": "Автоматичний вибір останніх використаних субтитрів", "autoload": "Автоматичний вибір останніх використаних субтитрів",
"disable-captions": "За замовчуванням субтитри відсутні" "disable-captions": "За замовчуванням субтитри відсутні"
@ -381,6 +388,11 @@
}, },
"templates": { "templates": {
"title": "Відкрити селектор субтитрів" "title": "Відкрити селектор субтитрів"
},
"toast": {
"caption-changed": "Субтитри змінені на {{language}}",
"caption-disabled": "Субтитри відключені",
"no-captions": "Субтитри не доступні для цієї пісні"
} }
}, },
"compact-sidebar": { "compact-sidebar": {
@ -409,6 +421,19 @@
} }
} }
}, },
"custom-output-device": {
"description": "Налаштування власного пристрою для відтворення пісень",
"menu": {
"device-selector": "Обрати пристрій"
},
"name": "Спеціальний пристрій виводу",
"prompt": {
"device-selector": {
"label": "Оберіть пристрій для виводу медіа",
"title": "Оберіть пристрій виводу"
}
}
},
"disable-autoplay": { "disable-autoplay": {
"description": "Запуск пісні в режимі \"пауза\"", "description": "Запуск пісні в режимі \"пауза\"",
"menu": { "menu": {
@ -431,8 +456,16 @@
"disconnected": "Від'єднано", "disconnected": "Від'єднано",
"hide-duration-left": "Приховати тривалість, яка залишилася", "hide-duration-left": "Приховати тривалість, яка залишилася",
"hide-github-button": "Приховати посилання на GitHub", "hide-github-button": "Приховати посилання на GitHub",
"play-on-youtube-music": "Слухати на YouTube Music", "play-on-pear-desktop": "Слухати на Pear Desktop",
"set-inactivity-timeout": "Встановити тайм-аут бездіяльності" "set-inactivity-timeout": "Встановити тайм-аут бездіяльності",
"set-status-display-type": {
"label": "Статус",
"submenu": {
"artist": "Ви слухаєте {artist}",
"pear-desktop": "Відтворення з Pear Desktop",
"title": "Ви слухаєте {song title}"
}
}
}, },
"name": "Активність Discord", "name": "Активність Discord",
"prompt": { "prompt": {
@ -600,7 +633,15 @@
}, },
"navigation": { "navigation": {
"description": "Стрілки навігації Вперед/Назад безпосередньо інтегровані в інтерфейс, як у вашому браузері, який ви використовуєте", "description": "Стрілки навігації Вперед/Назад безпосередньо інтегровані в інтерфейс, як у вашому браузері, який ви використовуєте",
"name": "Навігація" "name": "Навігація",
"templates": {
"back": {
"title": "Перейти на минулу сторінку"
},
"forward": {
"title": "Перейти на наступну сторінку"
}
}
}, },
"no-google-login": { "no-google-login": {
"description": "Видалити кнопки та посилання для входу через Google з інтерфейсу", "description": "Видалити кнопки та посилання для входу через Google з інтерфейсу",
@ -692,7 +733,12 @@
} }
}, },
"description": "Дозволяє змінювати якість відео за допомогою кнопки на відео оверлеї", "description": "Дозволяє змінювати якість відео за допомогою кнопки на відео оверлеї",
"name": "Зміна якості відео" "name": "Зміна якості відео",
"renderer": {
"quality-settings-button": {
"label": "Відкрити налаштування якості плеєру"
}
}
}, },
"scrobbler": { "scrobbler": {
"description": "Додає підтримку скроблінгу (last.fm, Listenbrainz тощо)", "description": "Додає підтримку скроблінгу (last.fm, Listenbrainz тощо)",
@ -711,6 +757,7 @@
"listenbrainz": { "listenbrainz": {
"token": "Ввести токен користувача ListenBrainz" "token": "Ввести токен користувача ListenBrainz"
}, },
"scrobble-alternative-artist": "Використати іншого виконавця",
"scrobble-alternative-title": "Використовувати альтернативні назви", "scrobble-alternative-title": "Використовувати альтернативні назви",
"scrobble-other-media": "Скробилити інші медіа" "scrobble-other-media": "Скробилити інші медіа"
}, },
@ -762,7 +809,7 @@
"synced-lyrics": { "synced-lyrics": {
"description": "Додає синхронізовані тексти до пісень використовуючи провайдери, такі як LRClib.", "description": "Додає синхронізовані тексти до пісень використовуючи провайдери, такі як LRClib.",
"errors": { "errors": {
"fetch": "⚠️ - При завантаженні слів пісні сталась помилка. Спробуйте пізніше.", "fetch": "⚠️ - При завантаженні слів пісні сталась помилка.\nСпробуйте будь ласка пізніше.",
"not-found": "⚠️ До цієї пісні текст не знайдено." "not-found": "⚠️ До цієї пісні текст не знайдено."
}, },
"menu": { "menu": {
@ -796,6 +843,14 @@
"label": "Зробити текст пісні ідеально синхронізованим", "label": "Зробити текст пісні ідеально синхронізованим",
"tooltip": "Обчисли до мілісекунд відображення наступного рядка (може мати невеликий вплив на продуктивність)" "tooltip": "Обчисли до мілісекунд відображення наступного рядка (може мати невеликий вплив на продуктивність)"
}, },
"preferred-provider": {
"label": "Пріорітетний Провайдер",
"none": {
"label": "Жоден",
"tooltip": "Нема провайдера за замовчуванням"
},
"tooltip": "Оберіть якого провайдера використовувати за замовчуванням"
},
"romanization": { "romanization": {
"label": "Транслітерувати текст пісень", "label": "Транслітерувати текст пісень",
"tooltip": "Якщо текст пісні іншою мовою, спробувати його відобразити латинською версією." "tooltip": "Якщо текст пісні іншою мовою, спробувати його відобразити латинською версією."
@ -828,6 +883,27 @@
"description": "Додає віджет TouchBar для користувачів macOS", "description": "Додає віджет TouchBar для користувачів macOS",
"name": "TouchBar" "name": "TouchBar"
}, },
"transparent-player": {
"description": "Зробити вікно програми прозорим",
"menu": {
"opacity": {
"label": "Прозорість",
"submenu": {
"percent": "{{opacity}}%"
}
},
"type": {
"label": "Тип",
"submenu": {
"acrylic": "Акриловий",
"mica": "Міка",
"none": "Жоден",
"tabbed": "З роздільниками"
}
}
},
"name": "Прозорий Плеєр"
},
"tuna-obs": { "tuna-obs": {
"description": "Інтеграція з плагіном Tuna для OBS", "description": "Інтеграція з плагіном Tuna для OBS",
"name": "Tuna OBS" "name": "Tuna OBS"
@ -859,7 +935,8 @@
}, },
"name": "Перемикач відео", "name": "Перемикач відео",
"templates": { "templates": {
"button-song": "Пісня" "button-song": "Пісня",
"button-video": "Відео"
} }
}, },
"visualizer": { "visualizer": {

View File

@ -150,6 +150,13 @@
"visual-tweaks": { "visual-tweaks": {
"label": "بصری تبدیلیاں", "label": "بصری تبدیلیاں",
"submenu": { "submenu": {
"custom-window-title": {
"label": "اپنی مرضی کا ونڈو عنوان",
"prompt": {
"label": "اپنی مرضی کا ونڈو عنوان درج کریں: (بند کرنے کے لیے خالی چھوڑ دیں)",
"placeholder": "مثال: پیئر ڈیسک ٹاپ"
}
},
"like-buttons": { "like-buttons": {
"default": "پہلے سے طے شدہ", "default": "پہلے سے طے شدہ",
"force-show": "زبردستی دکھائیں", "force-show": "زبردستی دکھائیں",
@ -198,7 +205,24 @@
"play-pause": "چلائیں/روکیں", "play-pause": "چلائیں/روکیں",
"previous": "پچھلا", "previous": "پچھلا",
"quit": "باہر نکلیں", "quit": "باہر نکلیں",
"restart": "ایپ دوبارہ شروع کریں" "restart": "ایپ دوبارہ شروع کریں",
"show": "ونڈو دکھائیں",
"tooltip": {
"default": "پیئر ڈیسک ٹاپ"
}
}
},
"plugins": {
"ad-speedup": {
"description": "اگر کوئی اشتہار چلے تو آواز بند کرکے پلے بیک کی رفتار 16 گناہ کردیں",
"name": "اشتہار کی رفتار"
},
"adblocker": {
"description": "شروغ سے تمام اشتہارات اور ٹریکنگ بلاک کردیں",
"menu": {
"blocker": "بلاکر"
},
"name": "ایڈ بلاکر"
} }
} }
} }

View File

@ -154,7 +154,7 @@
"label": "Tiêu đề cửa sổ tùy chỉnh", "label": "Tiêu đề cửa sổ tùy chỉnh",
"prompt": { "prompt": {
"label": "Nhập tiêu đề cửa sổ tùy chỉnh: (để trống để vô hiệu hóa)", "label": "Nhập tiêu đề cửa sổ tùy chỉnh: (để trống để vô hiệu hóa)",
"placeholder": "Ví dụ: Youtube Music" "placeholder": "Ví dụ: Pear Desktop"
} }
}, },
"like-buttons": { "like-buttons": {
@ -208,8 +208,8 @@
"restart": "Khởi động lại ứng dụng", "restart": "Khởi động lại ứng dụng",
"show": "Hiện cửa sổ", "show": "Hiện cửa sổ",
"tooltip": { "tooltip": {
"default": "YouTube Music", "default": "Pear Desktop",
"with-song-info": "YouTube Music: {{title}} - {{artist}}" "with-song-info": "Pear Desktop: {{title}} - {{artist}}"
} }
} }
}, },
@ -287,7 +287,7 @@
"name": "Chế độ Môi trường xung quanh" "name": "Chế độ Môi trường xung quanh"
}, },
"amuse": { "amuse": {
"description": "Thêm hỗ trợ YouTube Music cho tiện ích hiển thị bài hát đang phát Amuse của 6K Labs", "description": "Thêm hỗ trợ Pear Desktop cho tiện ích hiển thị bài hát đang phát Amuse của 6K Labs",
"name": "Amuse", "name": "Amuse",
"response": { "response": {
"query": "Máy chủ API của Amuse đang chạy. GET /query để lấy thông tin về bài hát." "query": "Máy chủ API của Amuse đang chạy. GET /query để lấy thông tin về bài hát."
@ -369,11 +369,11 @@
"name": "Làm mờ thanh điều hướng" "name": "Làm mờ thanh điều hướng"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "Bỏ qua xác minh độ tuổi của YouTube", "description": "Bỏ qua xác minh độ tuổi của Music Player",
"name": "Bỏ qua hạn chế độ tuổi" "name": "Bỏ qua hạn chế độ tuổi"
}, },
"captions-selector": { "captions-selector": {
"description": "Bộ lựa chọn phụ đề cho các bài hát trên Youtube Music", "description": "Bộ lựa chọn phụ đề cho các bài hát trên Pear Desktop",
"menu": { "menu": {
"autoload": "Tự động chọn phụ đề vừa sử dụng", "autoload": "Tự động chọn phụ đề vừa sử dụng",
"disable-captions": "Không có phụ đề làm mặc định" "disable-captions": "Không có phụ đề làm mặc định"
@ -456,14 +456,14 @@
"disconnected": "Đã ngắt kết nối", "disconnected": "Đã ngắt kết nối",
"hide-duration-left": "Ẩn thời lượng còn lại", "hide-duration-left": "Ẩn thời lượng còn lại",
"hide-github-button": "Ẩn nút liên kết GitHub", "hide-github-button": "Ẩn nút liên kết GitHub",
"play-on-youtube-music": "Phát trong Youtube Music", "play-on-pear-desktop": "Phát trong Pear Desktop",
"set-inactivity-timeout": "Đặt thời gian chờ không hoạt động", "set-inactivity-timeout": "Đặt thời gian chờ không hoạt động",
"set-status-display-type": { "set-status-display-type": {
"label": "Văn bản trạng thái", "label": "Văn bản trạng thái",
"submenu": { "submenu": {
"artist": "Đang nghe nhạc của {artist}", "artist": "Đang nghe nhạc của {artist}",
"title": "Đang nghe nhạc {song title}", "title": "Đang nghe nhạc {song title}",
"youtube-music": "Đang nghe Youtube Music" "pear-desktop": "Đang nghe Pear Desktop"
} }
} }
}, },

View File

@ -154,7 +154,7 @@
"label": "自定义窗口标题", "label": "自定义窗口标题",
"prompt": { "prompt": {
"label": "输入自定义窗口标题:(留空表示停用)", "label": "输入自定义窗口标题:(留空表示停用)",
"placeholder": "示例:YouTube Music" "placeholder": "示例:Pear Desktop"
} }
}, },
"like-buttons": { "like-buttons": {
@ -208,8 +208,8 @@
"restart": "重启应用", "restart": "重启应用",
"show": "显示窗口", "show": "显示窗口",
"tooltip": { "tooltip": {
"default": "YouTube Music", "default": "Pear Desktop",
"with-song-info": "YouTube Music: {{artist}} - {{title}}" "with-song-info": "Pear Desktop: {{artist}} - {{title}}"
} }
} }
}, },
@ -237,7 +237,8 @@
"submenu": { "submenu": {
"percent": "{{ratio}}%" "percent": "{{ratio}}%"
} }
} },
"enable-seekbar": "启用进度条主题"
}, },
"name": "专辑配色主题" "name": "专辑配色主题"
}, },
@ -287,7 +288,7 @@
"name": "沉浸模式" "name": "沉浸模式"
}, },
"amuse": { "amuse": {
"description": "为 6K Labs 的 Amuse 正在播放小部件添加 YouTube Music 支持", "description": "为 6K Labs 的 Amuse 正在播放小部件添加 Pear Desktop 支持",
"name": "Amuse", "name": "Amuse",
"response": { "response": {
"query": "Amuse API服务器已在运行。使用 /query 以获取歌曲信息。" "query": "Amuse API服务器已在运行。使用 /query 以获取歌曲信息。"
@ -369,11 +370,11 @@
"name": "模糊导航栏" "name": "模糊导航栏"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "绕过 YouTube 年龄验证", "description": "绕过 Music Player 年龄验证",
"name": "绕过年龄验证" "name": "绕过年龄验证"
}, },
"captions-selector": { "captions-selector": {
"description": "YouTube Music 音轨字幕选择器", "description": "Pear Desktop 音轨字幕选择器",
"menu": { "menu": {
"autoload": "自动选择上次使用的字幕", "autoload": "自动选择上次使用的字幕",
"disable-captions": "默认无字幕" "disable-captions": "默认无字幕"
@ -456,14 +457,14 @@
"disconnected": "已断开连接", "disconnected": "已断开连接",
"hide-duration-left": "隐藏剩余时长", "hide-duration-left": "隐藏剩余时长",
"hide-github-button": "隐藏 GitHub 链接按钮", "hide-github-button": "隐藏 GitHub 链接按钮",
"play-on-youtube-music": "转至 YouTube Music 播放", "play-on-pear-desktop": "转至 Pear Desktop 播放",
"set-inactivity-timeout": "设置非活跃时长", "set-inactivity-timeout": "设置非活跃时长",
"set-status-display-type": { "set-status-display-type": {
"label": "状态文本", "label": "状态文本",
"submenu": { "submenu": {
"artist": "在听 {artist}", "artist": "在听 {artist}",
"title": "在听 {song title}", "pear-desktop": "在听 Pear Desktop",
"youtube-music": "在听 YouTube Music" "title": "在听 {song title}"
} }
} }
}, },

View File

@ -154,7 +154,7 @@
"label": "自訂窗口標題", "label": "自訂窗口標題",
"prompt": { "prompt": {
"label": "輸入自訂視窗標題: (留空將其停用)", "label": "輸入自訂視窗標題: (留空將其停用)",
"placeholder": "例如: YouTube 音樂" "placeholder": "例如: Pear Desktop"
} }
}, },
"like-buttons": { "like-buttons": {
@ -208,8 +208,8 @@
"restart": "重新啟動應用程式", "restart": "重新啟動應用程式",
"show": "顯示視窗", "show": "顯示視窗",
"tooltip": { "tooltip": {
"default": "YouTube 音樂", "default": "Pear Desktop",
"with-song-info": "YouTube 音樂: {{artist}} - {{title}}" "with-song-info": "Pear Desktop: {{artist}} - {{title}}"
} }
} }
}, },
@ -287,7 +287,7 @@
"name": "微光效果" "name": "微光效果"
}, },
"amuse": { "amuse": {
"description": "加入支援 6K Labs 的 Amuse OBS 外掛以取得 YouTube Music 現正播放資訊", "description": "加入支援 6K Labs 的 Amuse OBS 外掛以取得 Pear Desktop 現正播放資訊",
"name": "Amuse", "name": "Amuse",
"response": { "response": {
"query": "Amuse API 伺服器正在運作中,使用 /query 以取得歌曲資訊。" "query": "Amuse API 伺服器正在運作中,使用 /query 以取得歌曲資訊。"
@ -369,11 +369,11 @@
"name": "模糊導覽列" "name": "模糊導覽列"
}, },
"bypass-age-restrictions": { "bypass-age-restrictions": {
"description": "繞過 YouTube 年齡驗證", "description": "繞過年齡驗證",
"name": "繞過年齡驗證" "name": "繞過年齡驗證"
}, },
"captions-selector": { "captions-selector": {
"description": "Youtube Music 音軌字幕選項", "description": "Pear Desktop 音軌字幕選項",
"menu": { "menu": {
"autoload": "自動選擇上次使用的字幕", "autoload": "自動選擇上次使用的字幕",
"disable-captions": "預設無字幕" "disable-captions": "預設無字幕"
@ -456,14 +456,14 @@
"disconnected": "已斷開連線", "disconnected": "已斷開連線",
"hide-duration-left": "隱藏音樂剩餘時間狀態", "hide-duration-left": "隱藏音樂剩餘時間狀態",
"hide-github-button": "隱藏 GitHub 頁面按鈕", "hide-github-button": "隱藏 GitHub 頁面按鈕",
"play-on-youtube-music": "顯示 Play on YouTube Music 按鈕", "play-on-pear-desktop": "顯示 Play on Pear Desktop 按鈕",
"set-inactivity-timeout": "設定閒置狀態時長", "set-inactivity-timeout": "設定閒置狀態時長",
"set-status-display-type": { "set-status-display-type": {
"label": "狀態樣式", "label": "狀態樣式",
"submenu": { "submenu": {
"artist": "正在聆聽 {artist} 的歌曲", "artist": "正在聆聽 {artist} 的歌曲",
"title": "正在聆聽 {song title}", "pear-desktop": "正在聆聽 Pear Desktop",
"youtube-music": "正在聆聽 YouTube Music" "title": "正在聆聽 {song title}"
} }
} }
}, },

View File

@ -7,7 +7,7 @@
within the `createMainWindow` function. within the `createMainWindow` function.
Archived link for reference: Archived link for reference:
https://github.com/th-ch/youtube-music/blob/a3104fda4b0d58b076d0c737111636a66e468acc/src/index.ts#L407-L443 https://github.com/pear-devs/pear-desktop/blob/a3104fda4b0d58b076d0c737111636a66e468acc/src/index.ts#L407-L443
--> -->

View File

@ -43,7 +43,7 @@ import {
setupProtocolHandler, setupProtocolHandler,
} from '@/providers/protocol-handler'; } from '@/providers/protocol-handler';
import youtubeMusicCSS from '@/youtube-music.css?inline'; import musicPlayerCss from '@/music-player.css?inline';
import { import {
forceLoadMainPlugin, forceLoadMainPlugin,
@ -131,7 +131,7 @@ if (config.get('options.disableHardwareAcceleration')) {
if (is.linux()) { if (is.linux()) {
// Overrides WM_CLASS for X11 to correspond to icon filename // Overrides WM_CLASS for X11 to correspond to icon filename
app.setName('com.github.th_ch.youtube_music'); app.setName('com.github.th_ch.pear_music');
// Stops chromium from launching its own MPRIS service // Stops chromium from launching its own MPRIS service
if (await config.plugins.isEnabled('shortcuts')) { if (await config.plugins.isEnabled('shortcuts')) {
@ -165,7 +165,7 @@ electronDebug({
showDevTools: false, // Disable automatic devTools on new window showDevTools: false, // Disable automatic devTools on new window
}); });
let icon = 'assets/youtube-music.png'; let icon = 'assets/icon.png';
if (process.platform === 'win32') { if (process.platform === 'win32') {
icon = 'assets/generated/icon.ico'; icon = 'assets/generated/icon.ico';
} else if (process.platform === 'darwin') { } else if (process.platform === 'darwin') {
@ -178,7 +178,7 @@ function onClosed() {
mainWindow = null; mainWindow = null;
} }
ipcMain.handle('ytmd:get-main-plugin-names', async () => ipcMain.handle('peard:get-main-plugin-names', async () =>
Object.keys(await mainPlugins()), Object.keys(await mainPlugins()),
); );
@ -186,14 +186,14 @@ const initHook = async (win: BrowserWindow) => {
const allPluginStubs = await allPlugins(); const allPluginStubs = await allPlugins();
ipcMain.handle( ipcMain.handle(
'ytmd:get-config', 'peard:get-config',
(_, id: string) => (_, id: string) =>
deepmerge( deepmerge(
allPluginStubs[id].config ?? { enabled: false }, allPluginStubs[id].config ?? { enabled: false },
config.get(`plugins.${id}`) ?? {}, config.get(`plugins.${id}`) ?? {},
) as PluginConfig, ) as PluginConfig,
); );
ipcMain.handle('ytmd:set-config', (_, name: string, obj: object) => ipcMain.handle('peard:set-config', (_, name: string, obj: object) =>
config.setPartial(`plugins.${name}`, obj, allPluginStubs[name].config), config.setPartial(`plugins.${name}`, obj, allPluginStubs[name].config),
); );
@ -292,7 +292,7 @@ const showNeedToRestartDialog = async (id: string) => {
}; };
function initTheme(win: BrowserWindow) { function initTheme(win: BrowserWindow) {
injectCSS(win.webContents, youtubeMusicCSS); injectCSS(win.webContents, musicPlayerCss);
// Load user CSS // Load user CSS
const themes: string[] = config.get('options.themes'); const themes: string[] = config.get('options.themes');
if (Array.isArray(themes)) { if (Array.isArray(themes)) {
@ -503,11 +503,14 @@ async function createMainWindow() {
const url = new URL(event.url); const url = new URL(event.url);
// Workarounds for regions where YTM is restricted // Workarounds for regions where YTM is restricted
if (url.hostname.endsWith('youtube.com') && url.pathname === '/premium') { if (
url.hostname.endsWith('\u0079\u006f\u0075\u0074\u0075\u0062\u0065.com') &&
url.pathname === '/premium'
) {
event.preventDefault(); event.preventDefault();
win.webContents.loadURL( 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', 'https://accounts.google.com/ServiceLogin?ltmpl=music&service=\u0079\u006f\u0075\u0074\u0075\u0062\u0065&continue=https%3A%2F%2Fwww.\u0079\u006f\u0075\u0074\u0075\u0062\u0065.com%2Fsignin%3Faction_handle_signin%3Dtrue%26next%3Dhttps%253A%252F%252Fmusic.\u0079\u006f\u0075\u0074\u0075\u0062\u0065.com%252F',
); );
} }
}); });
@ -660,7 +663,7 @@ app.whenReady().then(async () => {
// Register appID on windows // Register appID on windows
if (is.windows()) { if (is.windows()) {
const appID = 'com.github.th-ch.youtube-music'; const appID = 'com.github.th-ch.pear-music';
app.setAppUserModelId(appID); app.setAppUserModelId(appID);
const appLocation = process.execPath; const appLocation = process.execPath;
const appData = app.getPath('appData'); const appData = app.getPath('appData');
@ -675,7 +678,7 @@ app.whenReady().then(async () => {
'Windows', 'Windows',
'Start Menu', 'Start Menu',
'Programs', 'Programs',
'YouTube Music.lnk', 'Pear Desktop.lnk',
); );
try { try {
// Check if shortcut is registered and valid // Check if shortcut is registered and valid
@ -695,7 +698,7 @@ app.whenReady().then(async () => {
{ {
target: appLocation, target: appLocation,
cwd: path.dirname(appLocation), cwd: path.dirname(appLocation),
description: 'YouTube Music Desktop App - including custom plugins', description: 'Pear Desktop App - including custom plugins',
appUserModelId: appID, appUserModelId: appID,
}, },
); );
@ -804,7 +807,7 @@ app.whenReady().then(async () => {
}, 2000); }, 2000);
autoUpdater.on('update-available', () => { autoUpdater.on('update-available', () => {
const downloadLink = const downloadLink =
'https://github.com/th-ch/youtube-music/releases/latest'; 'https://github.com/pear-devs/pear-desktop/releases/latest';
const dialogOptions: Electron.MessageBoxOptions = { const dialogOptions: Electron.MessageBoxOptions = {
type: 'info', type: 'info',
buttons: [ buttons: [
@ -943,7 +946,7 @@ function removeContentSecurityPolicy(
!details.responseHeaders['access-control-allow-origin'] && !details.responseHeaders['access-control-allow-origin'] &&
!details.responseHeaders['Access-Control-Allow-Origin'] !details.responseHeaders['Access-Control-Allow-Origin']
) { ) {
details.responseHeaders['access-control-allow-origin'] = ['https://music.youtube.com']; details.responseHeaders['access-control-allow-origin'] = ['https://music.\u0079\u006f\u0075\u0074\u0075\u0062\u0065.com'];
} }
} }

View File

@ -19,9 +19,9 @@ export const createContext = <Config extends PluginConfig>(
id: string, id: string,
): RendererContext<Config> => ({ ): RendererContext<Config> => ({
getConfig: () => getConfig: () =>
window.ipcRenderer.invoke('ytmd:get-config', id) as Promise<Config>, window.ipcRenderer.invoke('peard:get-config', id) as Promise<Config>,
setConfig: async (newConfig) => { setConfig: async (newConfig) => {
await window.ipcRenderer.invoke('ytmd:set-config', id, newConfig); await window.ipcRenderer.invoke('peard:set-config', id, newConfig);
}, },
ipc: { ipc: {
send: (event: string, ...args: unknown[]) => { send: (event: string, ...args: unknown[]) => {

View File

@ -473,7 +473,7 @@ export const mainMenuTemplate = async (
), ),
type: 'normal', type: 'normal',
click() { click() {
const url = 'https://hosted.weblate.org/engage/youtube-music/'; const url = 'https://bit.ly/48n5YF7';
shell.openExternal(url); shell.openExternal(url);
}, },
} as Electron.MenuItemConstructorOptions, } as Electron.MenuItemConstructorOptions,

View File

@ -1,5 +1,5 @@
/** /**
* Overriding YouTube Music style * Overriding default style
*/ */
/* Allow window dragging */ /* Allow window dragging */
@ -49,7 +49,7 @@ ytmusic-cast-button {
display: none !important; display: none !important;
} }
/* Make youtube-music logo un-draggable */ /* Make the logo un-draggable */
ytmusic-nav-bar > div.left-content > a, ytmusic-nav-bar > div.left-content > a,
ytmusic-nav-bar > div.left-content > a > picture > img { ytmusic-nav-bar > div.left-content > a > picture > img {
-webkit-user-drag: none; -webkit-user-drag: none;

View File

@ -10,41 +10,32 @@ const COLOR_KEY = '--ytmusic-album-color';
const DARK_COLOR_KEY = '--ytmusic-album-color-dark'; const DARK_COLOR_KEY = '--ytmusic-album-color-dark';
const RATIO_KEY = '--ytmusic-album-color-ratio'; const RATIO_KEY = '--ytmusic-album-color-ratio';
export default createPlugin< type Config = {
unknown, enabled: boolean;
unknown, ratio: number;
{ enableSeekbar: boolean;
color?: ColorInstance; };
darkColor?: ColorInstance;
playerPage: HTMLElement | null; type Renderer = {
navBarBackground: HTMLElement | null; getMixedColor(
ytmusicPlayerBar: HTMLElement | null; color: string,
playerBarBackground: HTMLElement | null; key: string,
sidebarBig: HTMLElement | null; alpha?: number,
sidebarSmall: HTMLElement | null; ratioMultiply?: number,
ytmusicAppLayout: HTMLElement | null; ): string;
updateColor(alpha: number): void;
onConfigChange(newConfig: Config): void;
};
getMixedColor( export default createPlugin({
color: string,
key: string,
alpha?: number,
ratioMultiply?: number,
): string;
updateColor(alpha: number): void;
},
{
enabled: boolean;
ratio: number;
}
>({
name: () => t('plugins.album-color-theme.name'), name: () => t('plugins.album-color-theme.name'),
description: () => t('plugins.album-color-theme.description'), description: () => t('plugins.album-color-theme.description'),
restartNeeded: false, restartNeeded: false,
config: { config: {
enabled: false, enabled: false,
ratio: 0.5, ratio: 0.5,
}, enableSeekbar: true,
} satisfies Config as Config,
stylesheets: [style], stylesheets: [style],
menu: async ({ getConfig, setConfig }) => { 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 ratioList = [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1];
@ -68,18 +59,28 @@ export default createPlugin<
}, },
})), })),
}, },
{
label: t('plugins.album-color-theme.menu.enable-seekbar'),
type: 'checkbox',
checked: config.enableSeekbar,
click(item) {
setConfig({ enableSeekbar: item.checked });
},
},
]; ];
}, },
renderer: { renderer: {
playerPage: null, playerPage: null as HTMLElement | null,
navBarBackground: null, navBarBackground: null as HTMLElement | null,
ytmusicPlayerBar: null, ytmusicPlayerBar: null as HTMLElement | null,
playerBarBackground: null, playerBarBackground: null as HTMLElement | null,
sidebarBig: null, sidebarBig: null as HTMLElement | null,
sidebarSmall: null, sidebarSmall: null as HTMLElement | null,
ytmusicAppLayout: null, ytmusicAppLayout: null as HTMLElement | null,
color: null as ColorInstance | null,
darkColor: null as ColorInstance | null,
async start({ getConfig }) { start() {
this.playerPage = document.querySelector<HTMLElement>('#player-page'); this.playerPage = document.querySelector<HTMLElement>('#player-page');
this.navBarBackground = document.querySelector<HTMLElement>( this.navBarBackground = document.querySelector<HTMLElement>(
'#nav-bar-background', '#nav-bar-background',
@ -94,14 +95,11 @@ export default createPlugin<
'#mini-guide-background', '#mini-guide-background',
); );
this.ytmusicAppLayout = document.querySelector<HTMLElement>('#layout'); this.ytmusicAppLayout = document.querySelector<HTMLElement>('#layout');
const config = await getConfig();
document.documentElement.style.setProperty(
RATIO_KEY,
`${~~(config.ratio * 100)}%`,
);
}, },
onPlayerApiReady(playerApi) { async onPlayerApiReady(playerApi, { getConfig }) {
const config = await getConfig();
(this as Renderer).onConfigChange(config);
const fastAverageColor = new FastAverageColor(); const fastAverageColor = new FastAverageColor();
document.addEventListener('videodatachange', async (event) => { document.addEventListener('videodatachange', async (event) => {
@ -152,7 +150,7 @@ export default createPlugin<
alpha = value; alpha = value;
} }
} }
this.updateColor(alpha ?? 1); (this as Renderer).updateColor(alpha ?? 1);
}); });
}, },
onConfigChange(config) { onConfigChange(config) {
@ -160,8 +158,15 @@ export default createPlugin<
RATIO_KEY, RATIO_KEY,
`${~~(config.ratio * 100)}%`, `${~~(config.ratio * 100)}%`,
); );
if (config.enableSeekbar) document.body.classList.add('seekbar-theme');
else document.body.classList.remove('seekbar-theme');
}, },
getMixedColor(color: string, key: string, alpha = 1, ratioMultiply) { getMixedColor(
color: string,
key: string,
alpha = 1,
ratioMultiply?: number,
) {
const keyColor = `rgba(var(${key}), ${alpha})`; const keyColor = `rgba(var(${key}), ${alpha})`;
let colorRatio = `var(${RATIO_KEY}, 50%)`; let colorRatio = `var(${RATIO_KEY}, 50%)`;
@ -207,26 +212,39 @@ export default createPlugin<
'--yt-spec-black-pure-alpha-80': 'rgba(0,0,0,0.8)', '--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-98': 'rgba(40,40,40,0.98)',
'--yt-spec-black-1-alpha-95': 'rgba(40,40,40,0.95)', '--yt-spec-black-1-alpha-95': 'rgba(40,40,40,0.95)',
'--paper-toast-background-color': '#323232',
'--ytmusic-search-background': '#030303',
'--paper-slider-knob-color': '#f03',
'--paper-dialog-background-color': '#212121',
'--paper-progress-active-color-1': '#f03',
'--paper-progress-active-color-2': '#ff2791',
'--yt-spec-inverted-background': '#f3f3f3',
'background': 'rgba(3, 3, 3)',
'--ytmusic-background': 'rgba(3, 3, 3)',
}; };
const colorKeyMap: Record<string, string> = {
'background': DARK_COLOR_KEY,
'--ytmusic-background': DARK_COLOR_KEY,
};
const ratioMap: Record<string, number> = {
'--paper-progress-active-color-1': 1.75,
'--paper-progress-active-color-2': 1.75,
'--yt-spec-inverted-background': 1.75,
};
const getMixedColor = (this as Renderer).getMixedColor.bind(this);
Object.entries(variableMap).map(([variable, color]) => { Object.entries(variableMap).map(([variable, color]) => {
const key = colorKeyMap[variable] ?? COLOR_KEY;
const ratio = ratioMap[variable] ?? undefined;
document.documentElement.style.setProperty( document.documentElement.style.setProperty(
variable, variable,
this.getMixedColor(color, COLOR_KEY, alpha), getMixedColor(color, key, alpha, ratio),
'important', 'important',
); );
}); });
document.body.style.setProperty(
'background',
this.getMixedColor('rgba(3, 3, 3)', DARK_COLOR_KEY, alpha),
'important',
);
document.documentElement.style.setProperty(
'--ytmusic-background',
// #030303
this.getMixedColor('rgba(3, 3, 3)', DARK_COLOR_KEY, alpha),
'important',
);
}, },
}, },
}); });

View File

@ -81,3 +81,14 @@ ytmusic-browse-response[has-background]:not([disable-gradient]) .background-grad
#background.immersive-background.style-scope.ytmusic-browse-response { #background.immersive-background.style-scope.ytmusic-browse-response {
opacity: 0.6; opacity: 0.6;
} }
ytmusic-search-box[is-bauhaus-sidenav-enabled] {
--ytmusic-search-background: var(--ytmusic-color-black3) !important;
}
.seekbar-theme #progress-bar.ytmusic-player-bar {
--paper-slider-active-color: linear-gradient(to right, var(--paper-progress-active-color-1) 80%, var(--paper-progress-active-color-2) 100%) !important;
--paper-slider-knob-color: var(--paper-progress-active-color-1) !important;
--paper-slider-knob-start-color: var(--paper-progress-active-color-2) !important;
}

View File

@ -29,22 +29,22 @@ export const backend = createBackend<BackendType, APIServerConfig>({
this.songInfo = songInfo; this.songInfo = songInfo;
}); });
ctx.ipc.on('ytmd:player-api-loaded', () => { ctx.ipc.on('peard:player-api-loaded', () => {
ctx.ipc.send('ytmd:setup-seeked-listener'); ctx.ipc.send('peard:setup-seeked-listener');
ctx.ipc.send('ytmd:setup-time-changed-listener'); ctx.ipc.send('peard:setup-time-changed-listener');
ctx.ipc.send('ytmd:setup-repeat-changed-listener'); ctx.ipc.send('peard:setup-repeat-changed-listener');
ctx.ipc.send('ytmd:setup-like-changed-listener'); ctx.ipc.send('peard:setup-like-changed-listener');
ctx.ipc.send('ytmd:setup-volume-changed-listener'); ctx.ipc.send('peard:setup-volume-changed-listener');
ctx.ipc.send('ytmd:setup-shuffle-changed-listener'); ctx.ipc.send('peard:setup-shuffle-changed-listener');
}); });
ctx.ipc.on( ctx.ipc.on(
'ytmd:repeat-changed', 'peard:repeat-changed',
(mode: RepeatMode) => (this.currentRepeatMode = mode), (mode: RepeatMode) => (this.currentRepeatMode = mode),
); );
ctx.ipc.on( ctx.ipc.on(
'ytmd:volume-changed', 'peard:volume-changed',
(newVolumeState: VolumeState) => (this.volumeState = newVolumeState), (newVolumeState: VolumeState) => (this.volumeState = newVolumeState),
); );
@ -138,7 +138,7 @@ export const backend = createBackend<BackendType, APIServerConfig>({
openapi: '3.1.0', openapi: '3.1.0',
info: { info: {
version: '1.0.0', version: '1.0.0',
title: 'Youtube Music API Server', title: 'Pear Desktop API Server',
description: description:
'Note: You need to get an access token using the `/auth/{id}` endpoint first to call any API endpoints under `/api`.', 'Note: You need to get an access token using the `/auth/{id}` endpoint first to call any API endpoints under `/api`.',
}, },

View File

@ -29,7 +29,7 @@ import type { SongInfo } from '@/providers/song-info';
import type { BackendContext } from '@/types/contexts'; import type { BackendContext } from '@/types/contexts';
import type { APIServerConfig } from '../../config'; import type { APIServerConfig } from '../../config';
import type { HonoApp } from '../types'; import type { HonoApp } from '../types';
import type { QueueResponse } from '@/types/youtube-music-desktop-internal'; import type { QueueResponse } from '@/types/music-player-desktop-internal';
import type { Context } from 'hono'; import type { Context } from 'hono';
const routes = { const routes = {
@ -630,7 +630,7 @@ export const register = (
app.openapi(routes.getShuffleState, async (ctx) => { app.openapi(routes.getShuffleState, async (ctx) => {
const stateResponsePromise = new Promise<boolean>((resolve) => { const stateResponsePromise = new Promise<boolean>((resolve) => {
ipcMain.once( ipcMain.once(
'ytmd:get-shuffle-response', 'peard:get-shuffle-response',
(_, isShuffled: boolean | undefined) => { (_, isShuffled: boolean | undefined) => {
return resolve(!!isShuffled); return resolve(!!isShuffled);
}, },
@ -693,7 +693,7 @@ export const register = (
app.openapi(routes.getFullscreenState, async (ctx) => { app.openapi(routes.getFullscreenState, async (ctx) => {
const stateResponsePromise = new Promise<boolean>((resolve) => { const stateResponsePromise = new Promise<boolean>((resolve) => {
ipcMain.once( ipcMain.once(
'ytmd:set-fullscreen', 'peard:set-fullscreen',
(_, isFullscreen: boolean | undefined) => { (_, isFullscreen: boolean | undefined) => {
return resolve(!!isFullscreen); return resolve(!!isFullscreen);
}, },
@ -728,7 +728,7 @@ export const register = (
// Queue // Queue
const queueInfo = async (ctx: Context) => { const queueInfo = async (ctx: Context) => {
const queueResponsePromise = new Promise<QueueResponse>((resolve) => { const queueResponsePromise = new Promise<QueueResponse>((resolve) => {
ipcMain.once('ytmd:get-queue-response', (_, queue: QueueResponse) => { ipcMain.once('peard:get-queue-response', (_, queue: QueueResponse) => {
return resolve(queue); return resolve(queue);
}); });

View File

@ -94,7 +94,7 @@ export const register = (
lastSongInfo = { ...songInfo }; lastSongInfo = { ...songInfo };
}); });
ipc.on('ytmd:volume-changed', (newVolumeState: VolumeState) => { ipc.on('peard:volume-changed', (newVolumeState: VolumeState) => {
volumeState = newVolumeState; volumeState = newVolumeState;
send(DataTypes.VolumeChanged, { send(DataTypes.VolumeChanged, {
volume: volumeState.state, volume: volumeState.state,
@ -102,16 +102,16 @@ export const register = (
}); });
}); });
ipc.on('ytmd:repeat-changed', (mode: RepeatMode) => { ipc.on('peard:repeat-changed', (mode: RepeatMode) => {
repeat = mode; repeat = mode;
send(DataTypes.RepeatChanged, { repeat }); send(DataTypes.RepeatChanged, { repeat });
}); });
ipc.on('ytmd:seeked', (t: number) => { ipc.on('peard:seeked', (t: number) => {
send(DataTypes.PositionChanged, { position: t }); send(DataTypes.PositionChanged, { position: t });
}); });
ipc.on('ytmd:shuffle-changed', (newShuffle: boolean) => { ipc.on('peard:shuffle-changed', (newShuffle: boolean) => {
shuffle = newShuffle; shuffle = newShuffle;
send(DataTypes.ShuffleChanged, { shuffle }); send(DataTypes.ShuffleChanged, { shuffle });
}); });

View File

@ -1,6 +1,6 @@
import { createPlugin } from '@/utils'; import { createPlugin } from '@/utils';
import { t } from '@/i18n'; import { t } from '@/i18n';
import { type YoutubePlayer } from '@/types/youtube-player'; import { type MusicPlayer } from '@/types/music-player';
const lazySafeTry = (...fns: (() => void)[]) => { const lazySafeTry = (...fns: (() => void)[]) => {
for (const fn of fns) { for (const fn of fns) {
@ -95,7 +95,7 @@ const audioCanPlayHandler = ({
); );
}; };
const ensureAudioContextLoad = (playerApi: YoutubePlayer) => { const ensureAudioContextLoad = (playerApi: MusicPlayer) => {
if (playerApi.getPlayerState() !== 1 || storage.lastContext) return; if (playerApi.getPlayerState() !== 1 || storage.lastContext) return;
playerApi.loadVideoById( playerApi.loadVideoById(
@ -115,7 +115,7 @@ export default createPlugin({
}, },
start() { start() {
document.addEventListener('ytmd:audio-can-play', audioCanPlayHandler, { document.addEventListener('peard:audio-can-play', audioCanPlayHandler, {
passive: true, passive: true,
}); });
storage.connectToCompressor( storage.connectToCompressor(
@ -126,7 +126,7 @@ export default createPlugin({
}, },
stop() { stop() {
document.removeEventListener('ytmd:audio-can-play', audioCanPlayHandler); document.removeEventListener('peard:audio-can-play', audioCanPlayHandler);
storage.disconnectCompressor(); storage.disconnectCompressor();
}, },
}, },

View File

@ -7,7 +7,7 @@ import { t } from '@/i18n';
export default createBackend({ export default createBackend({
start({ ipc: { handle }, window }) { start({ ipc: { handle }, window }) {
handle( handle(
'ytmd:captions-selector', 'peard:captions-selector',
async (captionLabels: Record<string, string>, currentIndex: string) => async (captionLabels: Record<string, string>, currentIndex: string) =>
await prompt( await prompt(
{ {

View File

@ -7,7 +7,7 @@ import renderer, {
type LanguageOptions, type LanguageOptions,
} from './renderer'; } from './renderer';
import type { YoutubePlayer } from '@/types/youtube-player'; import type { MusicPlayer } from '@/types/music-player';
export default createPlugin< export default createPlugin<
unknown, unknown,
@ -15,7 +15,7 @@ export default createPlugin<
{ {
captionsSettingsButton?: HTMLElement; captionsSettingsButton?: HTMLElement;
captionTrackList: LanguageOptions[] | null; captionTrackList: LanguageOptions[] | null;
api: YoutubePlayer | null; api: MusicPlayer | null;
config: CaptionsSelectorConfig | null; config: CaptionsSelectorConfig | null;
videoChangeListener: () => void; videoChangeListener: () => void;
}, },

View File

@ -6,7 +6,7 @@ import { t } from '@/i18n';
import { CaptionsSettingButton } from './templates/captions-settings-template'; import { CaptionsSettingButton } from './templates/captions-settings-template';
import type { YoutubePlayer } from '@/types/youtube-player'; import type { MusicPlayer } from '@/types/music-player';
import type { AppElement } from '@/types/queue'; import type { AppElement } from '@/types/queue';
export interface LanguageOptions { export interface LanguageOptions {
@ -35,7 +35,7 @@ export default createRenderer<
{ {
captionsSettingsButton?: HTMLElement; captionsSettingsButton?: HTMLElement;
captionTrackList: LanguageOptions[] | null; captionTrackList: LanguageOptions[] | null;
api: YoutubePlayer | null; api: MusicPlayer | null;
config: CaptionsSelectorConfig | null; config: CaptionsSelectorConfig | null;
videoChangeListener: () => void; videoChangeListener: () => void;
}, },
@ -73,7 +73,7 @@ export default createRenderer<
this.api?.unloadModule('captions'); this.api?.unloadModule('captions');
document document
.querySelector('video') .querySelector('video')
?.removeEventListener('ytmd:src-changed', this.videoChangeListener); ?.removeEventListener('peard:src-changed', this.videoChangeListener);
if (this.captionsSettingsButton) { if (this.captionsSettingsButton) {
document document
.querySelector('.right-controls-buttons') .querySelector('.right-controls-buttons')
@ -111,7 +111,7 @@ export default createRenderer<
]; ];
currentIndex = (await ipc.invoke( currentIndex = (await ipc.invoke(
'ytmd:captions-selector', 'peard:captions-selector',
captionLabels, captionLabels,
currentIndex, currentIndex,
)) as number; )) as number;
@ -156,7 +156,7 @@ export default createRenderer<
document document
.querySelector('video') .querySelector('video')
?.addEventListener('ytmd:src-changed', this.videoChangeListener); ?.addEventListener('peard:src-changed', this.videoChangeListener);
}, },
onConfigChange(newConfig) { onConfigChange(newConfig) {
this.config = newConfig; this.config = newConfig;

View File

@ -1,4 +1,4 @@
import { Innertube } from 'youtubei.js'; import { Innertube } from '\u0079\u006f\u0075\u0074\u0075\u0062\u0065i.js';
import prompt from 'custom-electron-prompt'; import prompt from 'custom-electron-prompt';

View File

@ -1,6 +1,6 @@
import { createRenderer } from '@/utils'; import { createRenderer } from '@/utils';
import type { YoutubePlayer } from '@/types/youtube-player'; import type { MusicPlayer } from '@/types/music-player';
import type { RendererContext } from '@/types/contexts'; import type { RendererContext } from '@/types/contexts';
import type { CustomOutputPluginConfig } from './index'; import type { CustomOutputPluginConfig } from './index';
@ -48,13 +48,13 @@ export const renderer = createRenderer<
await updateSinkId(audioContext, this.options!.output); await updateSinkId(audioContext, this.options!.output);
}, },
async onPlayerApiReady(_: YoutubePlayer, context) { async onPlayerApiReady(_: MusicPlayer, context) {
this.options = await context.getConfig(); this.options = await context.getConfig();
await navigator.mediaDevices.getUserMedia({ audio: true, video: false }); await navigator.mediaDevices.getUserMedia({ audio: true, video: false });
navigator.mediaDevices.ondevicechange = async () => navigator.mediaDevices.ondevicechange = async () =>
await updateDeviceList(context); await updateDeviceList(context);
document.addEventListener('ytmd:audio-can-play', this.audioCanPlayHandler, { document.addEventListener('peard:audio-can-play', this.audioCanPlayHandler, {
once: true, once: true,
passive: true, passive: true,
}); });
@ -63,7 +63,7 @@ export const renderer = createRenderer<
stop() { stop() {
document.removeEventListener( document.removeEventListener(
'ytmd:audio-can-play', 'peard:audio-can-play',
this.audioCanPlayHandler, this.audioCanPlayHandler,
); );
navigator.mediaDevices.ondevicechange = null; navigator.mediaDevices.ondevicechange = null;

View File

@ -3,7 +3,7 @@ import { createPlugin } from '@/utils';
import { t } from '@/i18n'; import { t } from '@/i18n';
import type { VideoDataChanged } from '@/types/video-data-changed'; import type { VideoDataChanged } from '@/types/video-data-changed';
import type { YoutubePlayer } from '@/types/youtube-player'; import type { MusicPlayer } from '@/types/music-player';
export type DisableAutoPlayPluginConfig = { export type DisableAutoPlayPluginConfig = {
enabled: boolean; enabled: boolean;
@ -15,7 +15,7 @@ export default createPlugin<
unknown, unknown,
{ {
config: DisableAutoPlayPluginConfig | null; config: DisableAutoPlayPluginConfig | null;
api: YoutubePlayer | null; api: MusicPlayer | null;
eventListener: (event: CustomEvent<VideoDataChanged>) => void; eventListener: (event: CustomEvent<VideoDataChanged>) => void;
timeUpdateListener: (e: Event) => void; timeUpdateListener: (e: Event) => void;
}, },

View File

@ -1,5 +1,5 @@
/** /**
* Application ID registered by @th-ch/youtube-music dev team * Application ID registered by @th-ch/pear-desktop dev team
*/ */
export const clientId = '1177081335727267940'; export const clientId = '1177081335727267940';
/** /**

View File

@ -24,9 +24,9 @@ export type DiscordPluginConfig = {
*/ */
activityTimeoutTime: number; activityTimeoutTime: number;
/** /**
* Add a "Play on YouTube Music" button to rich presence * Add a "Play on Pear Desktop" button to rich presence
*/ */
playOnYouTubeMusic: boolean; playOnPearDesktop: boolean;
/** /**
* Hide the "View App On GitHub" button in the rich presence * Hide the "View App On GitHub" button in the rich presence
*/ */
@ -50,7 +50,7 @@ export default createPlugin({
autoReconnect: true, autoReconnect: true,
activityTimeoutEnabled: true, activityTimeoutEnabled: true,
activityTimeoutTime: 10 * 60 * 1000, activityTimeoutTime: 10 * 60 * 1000,
playOnYouTubeMusic: true, playOnPearDesktop: true,
hideGitHubButton: false, hideGitHubButton: false,
hideDurationLeft: false, hideDurationLeft: false,
statusDisplayType: StatusDisplayType.Details, statusDisplayType: StatusDisplayType.Details,

View File

@ -45,8 +45,8 @@ export const backend = createBackend<
}); });
} }
ctx.ipc.on('ytmd:player-api-loaded', () => { ctx.ipc.on('peard:player-api-loaded', () => {
ctx.ipc.send('ytmd:setup-time-changed-listener'); ctx.ipc.send('peard:setup-time-changed-listener');
}); });
app.on('before-quit', () => { app.on('before-quit', () => {

View File

@ -18,7 +18,7 @@ const registerRefreshOnce = singleton((refreshMenu: () => void) => {
const DiscordStatusDisplayTypeLabels: Record<StatusDisplayType, string> = { const DiscordStatusDisplayTypeLabels: Record<StatusDisplayType, string> = {
[StatusDisplayType.Name]: [StatusDisplayType.Name]:
'plugins.discord.menu.set-status-display-type.submenu.youtube-music', 'plugins.discord.menu.set-status-display-type.submenu.pear-desktop',
[StatusDisplayType.State]: [StatusDisplayType.State]:
'plugins.discord.menu.set-status-display-type.submenu.artist', 'plugins.discord.menu.set-status-display-type.submenu.artist',
[StatusDisplayType.Details]: [StatusDisplayType.Details]:
@ -67,12 +67,12 @@ export const onMenu = async ({
}, },
}, },
{ {
label: t('plugins.discord.menu.play-on-youtube-music'), label: t('plugins.discord.menu.play-on-pear-desktop'),
type: 'checkbox', type: 'checkbox',
checked: config.playOnYouTubeMusic, checked: config.playOnPearDesktop,
click(item: Electron.MenuItem) { click(item: Electron.MenuItem) {
setConfig({ setConfig({
playOnYouTubeMusic: item.checked, playOnPearDesktop: item.checked,
}); });
}, },
}, },

View File

@ -28,16 +28,16 @@ export const buildDiscordButtons = (
songInfo: SongInfo, songInfo: SongInfo,
): GatewayActivityButton[] | undefined => { ): GatewayActivityButton[] | undefined => {
const buttons: GatewayActivityButton[] = []; const buttons: GatewayActivityButton[] = [];
if (config.playOnYouTubeMusic && songInfo.url) { if (config.playOnPearDesktop && songInfo.url) {
buttons.push({ buttons.push({
label: 'Play on YouTube Music', label: 'Play on Pear Desktop',
url: songInfo.url, url: songInfo.url,
}); });
} }
if (!config.hideGitHubButton) { if (!config.hideGitHubButton) {
buttons.push({ buttons.push({
label: 'View App On GitHub', label: 'View App On GitHub',
url: 'https://github.com/th-ch/youtube-music', url: 'https://github.com/pear-devs/pear-desktop',
}); });
} }
return buttons.length ? buttons : undefined; return buttons.length ? buttons : undefined;

View File

@ -3,7 +3,13 @@ import { join } from 'node:path';
import { randomBytes } from 'node:crypto'; import { randomBytes } from 'node:crypto';
import { app, type BrowserWindow, dialog, ipcMain } from 'electron'; import { app, type BrowserWindow, dialog, ipcMain } from 'electron';
import { Innertube, UniversalCache, Utils, YTNodes } from 'youtubei.js'; import {
Innertube,
UniversalCache,
Utils,
YTNodes,
Platform,
} from '\u0079\u006f\u0075\u0074\u0075\u0062\u0065i.js';
import is from 'electron-is'; import is from 'electron-is';
import filenamify from 'filenamify'; import filenamify from 'filenamify';
import { Mutex } from 'async-mutex'; import { Mutex } from 'async-mutex';
@ -28,18 +34,18 @@ import {
import { getNetFetchAsFetch } from '@/plugins/utils/main'; import { getNetFetchAsFetch } from '@/plugins/utils/main';
import { t } from '@/i18n'; import { t } from '@/i18n';
import { DefaultPresetList, type Preset, YoutubeFormatList } from '../types'; import { DefaultPresetList, type Preset, VideoFormatList } from '../types';
import type { DownloaderPluginConfig } from '../index'; import type { DownloaderPluginConfig } from '../index';
import type { BackendContext } from '@/types/contexts'; import type { BackendContext } from '@/types/contexts';
import type { GetPlayerResponse } from '@/types/get-player-response'; import type { GetPlayerResponse } from '@/types/get-player-response';
import type { FormatOptions } from 'node_modules/youtubei.js/dist/src/types'; import type { FormatOptions } from 'node_modules/\u0079\u006f\u0075\u0074\u0075\u0062\u0065i.js/dist/src/types';
import type { VideoInfo } from 'node_modules/youtubei.js/dist/src/parser/youtube'; import type { VideoInfo } from 'node_modules/\u0079\u006f\u0075\u0074\u0075\u0062\u0065i.js/dist/src/parser/\u0079\u006f\u0075\u0074\u0075\u0062\u0065';
import type { PlayerErrorMessage } from 'node_modules/youtubei.js/dist/src/parser/nodes'; import type { PlayerErrorMessage } from 'node_modules/\u0079\u006f\u0075\u0074\u0075\u0062\u0065i.js/dist/src/parser/nodes';
import type { import type {
TrackInfo, TrackInfo,
Playlist, Playlist,
} from 'node_modules/youtubei.js/dist/src/parser/ytmusic'; } from 'node_modules/\u0079\u006f\u0075\u0074\u0075\u0062\u0065i.js/dist/src/parser/ytmusic';
type CustomSongInfo = SongInfo & { trackId?: string }; type CustomSongInfo = SongInfo & { trackId?: string };
@ -52,11 +58,27 @@ const ffmpeg = lazy(async () =>
); );
const ffmpegMutex = new Mutex(); const ffmpegMutex = new Mutex();
Platform.shim.eval = async (data: Types.BuildScriptResult, env: Record<string, Types.VMPrimative>) => {
const properties = [];
if(env.n) {
properties.push(`n: exportedVars.nFunction("${env.n}")`)
}
if (env.sig) {
properties.push(`sig: exportedVars.sigFunction("${env.sig}")`)
}
const code = `${data.output}\nreturn { ${properties.join(', ')} }`;
return new Function(code)();
}
let yt: Innertube; let yt: Innertube;
let win: BrowserWindow; let win: BrowserWindow;
let playingUrl: string; let playingUrl: string;
const isYouTubeMusicPremium = async () => { const isPremium = async () => {
// If signed out, it is understood as non-premium // If signed out, it is understood as non-premium
const isSignedIn = (await win.webContents.executeJavaScript( const isSignedIn = (await win.webContents.executeJavaScript(
'!!yt.config_.LOGGED_IN', '!!yt.config_.LOGGED_IN',
@ -66,7 +88,7 @@ const isYouTubeMusicPremium = async () => {
// If signed in, check if the upgrade button is present // If signed in, check if the upgrade button is present
const upgradeBtnIconPathData = (await win.webContents.executeJavaScript( const upgradeBtnIconPathData = (await win.webContents.executeJavaScript(
'document.querySelector(\'iron-iconset-svg[name="yt-sys-icons"] #youtube_music_monochrome\')?.firstChild?.getAttribute("d")?.substring(0, 15)', 'document.querySelector(\'iron-iconset-svg[name="yt-sys-icons"] #\u0079\u006f\u0075\u0074\u0075\u0062\u0065_music_monochrome\')?.firstChild?.getAttribute("d")?.substring(0, 15)',
)) as string | null; )) as string | null;
// Fallback to non-premium if the icon is not found // Fallback to non-premium if the icon is not found
@ -107,7 +129,7 @@ const sendError = (error: Error, source?: string) => {
export const getCookieFromWindow = async (win: BrowserWindow) => { export const getCookieFromWindow = async (win: BrowserWindow) => {
return ( return (
await win.webContents.session.cookies.get({ await win.webContents.session.cookies.get({
url: 'https://music.youtube.com', url: 'https://music.\u0079\u006f\u0075\u0074\u0075\u0062\u0065.com',
}) })
) )
.map((it) => it.name + '=' + it.value) .map((it) => it.name + '=' + it.value)
@ -191,7 +213,7 @@ export const onMainLoad = async ({
} }
ipc.handle('download-song', (url: string) => downloadSong(url)); ipc.handle('download-song', (url: string) => downloadSong(url));
ipc.on('ytmd:video-src-changed', (data: GetPlayerResponse) => { ipc.on('peard:video-src-changed', (data: GetPlayerResponse) => {
playingUrl = data.microformat.microformatDataRenderer.urlCanonical; playingUrl = data.microformat.microformatDataRenderer.urlCanonical;
}); });
ipc.handle('download-playlist-request', async (url: string) => ipc.handle('download-playlist-request', async (url: string) =>
@ -297,8 +319,8 @@ function downloadSongOnFinishSetup({
} }
}); });
ipcMain.on('ytmd:player-api-loaded', () => { ipcMain.on('peard:player-api-loaded', () => {
ipc.send('ytmd:setup-time-changed-listener'); ipc.send('peard:setup-time-changed-listener');
}); });
} }
@ -389,7 +411,7 @@ async function downloadSongUnsafe(
} }
const downloadOptions: FormatOptions = { const downloadOptions: FormatOptions = {
type: (await isYouTubeMusicPremium()) ? 'audio' : 'video+audio', // Audio, video or video+audio type: (await isPremium()) ? 'audio' : 'video+audio', // Audio, video or video+audio
quality: 'best', // Best, bestefficiency, 144p, 240p, 480p, 720p and so on. quality: 'best', // Best, bestefficiency, 144p, 240p, 480p, 720p and so on.
format: 'any', // Media container format format: 'any', // Media container format
}; };
@ -399,7 +421,7 @@ async function downloadSongUnsafe(
let targetFileExtension: string; let targetFileExtension: string;
if (!presetSetting?.extension) { if (!presetSetting?.extension) {
targetFileExtension = targetFileExtension =
YoutubeFormatList.find((it) => it.itag === format.itag)?.container ?? VideoFormatList.find((it) => it.itag === format.itag)?.container ??
'mp3'; 'mp3';
} else { } else {
targetFileExtension = presetSetting?.extension ?? 'mp3'; targetFileExtension = presetSetting?.extension ?? 'mp3';

View File

@ -10,7 +10,7 @@ export const sendFeedback = (win: BrowserWindow, message?: unknown) => {
export const cropMaxWidth = (image: Electron.NativeImage) => { export const cropMaxWidth = (image: Electron.NativeImage) => {
const imageSize = image.getSize(); const imageSize = image.getSize();
// Standart YouTube artwork width with margins from both sides is 280 + 720 + 280 // Standard artwork width with margins from both sides is 280 + 720 + 280
if (imageSize.width === 1280 && imageSize.height === 720) { if (imageSize.width === 1280 && imageSize.height === 720) {
return image.crop({ return image.crop({
x: 280, x: 280,

View File

@ -19,7 +19,7 @@ export const DefaultPresetList: Record<string, Preset> = {
}, },
}; };
export interface YouTubeFormat { export interface VideoFormat {
itag: number; itag: number;
container: string; container: string;
content: string; content: string;
@ -29,9 +29,9 @@ export interface YouTubeFormat {
vrOr3D: string; vrOr3D: string;
} }
// converted from https://gist.github.com/sidneys/7095afe4da4ae58694d128b1034e01e2#file-youtube_format_code_itag_list-md // converted from https://gist.github.com/sidneys/7095afe4da4ae58694d128b1034e01e2
// and https://gist.github.com/MartinEesmaa/2f4b261cb90a47e9c41ba115a011a4aa // and https://gist.github.com/MartinEesmaa/2f4b261cb90a47e9c41ba115a011a4aa
export const YoutubeFormatList: YouTubeFormat[] = [ export const VideoFormatList: VideoFormat[] = [
{ {
itag: 5, itag: 5,
container: 'flv', container: 'flv',

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