Compare commits

...

486 Commits

Author SHA1 Message Date
Ilya Shurupov b6519e9839 fix(sharing): copy share link to clipboard from within the user gesture (#2135)
The share URL is only known after the create-share request resolves, so the
previous navigator.clipboard.writeText() in the mutation onSuccess callback ran
outside the originating click's user activation. Firefox and Safari reject such
writes ('Clipboard write was blocked due to lack of user activation'), so the
link was never copied (and the toast still claimed success).

Issue clipboard.write() synchronously inside the submit gesture with a
ClipboardItem whose text/plain value is a promise resolving to the share URL,
which preserves the user activation while the share is created. Falls back to
writeText, and finally to the existing 'click to open' toast when the clipboard
is unavailable or blocked, with the toast text reflecting whether the copy
actually succeeded.

Co-authored-by: ilusha <ilusha.basic@gmail.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 22:03:38 -07:00
Hosted Weblate 2103c3b8c6 Translated using Weblate
Currently translated at 100.0% (1283 of 1283 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Translated using Weblate

Currently translated at 100.0% (1283 of 1283 strings) (Spanish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/

Translated using Weblate

Currently translated at 48.1% (601 of 1249 strings) (Ukrainian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/uk/

Translated using Weblate

Currently translated at 100.0% (1249 of 1249 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: York <goog10216922@gmail.com>
Co-authored-by: albatrays <weblate.duct925@passmail.net>
2026-06-23 07:03:19 +02:00
York 4a7f084b59 fix: lyrics export issue when furigana is enabled (#2175)
* fix: lyrics export issue when furigana is enabled
2026-06-22 22:03:13 -07:00
jeffvli 5ef4744c44 bump electron-builder to latest, fix alpha build 2026-06-22 21:15:51 -07:00
York ecda4ef8bc fix: add i18n for EQ settings (#2174)
* fix: add i18n for EQ settings

* reuse common reset i18n labels
2026-06-22 14:17:50 +00:00
York 0ed68e8ebb feat: add Japanese Furigana support to lyrics display (#2161) 2026-06-21 19:11:20 -07:00
jeffvli 417365f091 fix replaygain volume jump (#1576) 2026-06-21 18:49:43 -07:00
Hosted Weblate ff8a21af08 Translated using Weblate
Currently translated at 100.0% (1247 of 1247 strings) (Estonian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/et/

Translated using Weblate

Currently translated at 100.0% (1247 of 1247 strings) (Polish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/

Co-authored-by: rimasx <riks_12@hot.ee>
Co-authored-by: skajmer <skajmer@protonmail.com>
2026-06-21 12:01:22 +02:00
jeffvli ff426bda6d add unknown MediaType to Jellyfin playlist fetch (#2063) 2026-06-19 22:08:10 -07:00
jeffvli 0664b0ad02 fix lint 2026-06-19 22:07:42 -07:00
jeffvli 61cc87e0b7 refactor song path replacement
- path replacement during runtime instead of during API normalization
- fix Navidrome API path not appending libraryPath which caused inconsistency between ND and Subsonic paths
2026-06-19 22:02:25 -07:00
Sai Asish Y 36624350f6 feat(artists): preserve artist detail scroll position on back navigation (#2045)
* feat(artists): preserve artist detail scroll position on back navigation

* fix(artists): target OverlayScrollbars viewport child for scroll persistence

Signed-off-by: Sai Asish Y <say.apm35@gmail.com>

---------

Signed-off-by: Sai Asish Y <say.apm35@gmail.com>
2026-06-20 04:55:41 +00:00
Hosted Weblate dbe46e03a4 Translated using Weblate
Currently translated at 64.8% (809 of 1247 strings) (Turkish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/tr/

Translated using Weblate

Currently translated at 100.0% (1247 of 1247 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Translated using Weblate

Currently translated at 100.0% (1247 of 1247 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Translated using Weblate

Currently translated at 100.0% (1247 of 1247 strings) (Spanish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/

Co-authored-by: Berkay Dogan <berkaydog4n@gmail.com>
Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: linger <linger0517@gmail.com>
2026-06-19 23:01:32 +02:00
Bram Johnson 16e00a0f9f feat(playlists): add isMissing and isPresent operators to Navidrome smart playlist form (#2149) 2026-06-18 09:44:58 -07:00
Hosted Weblate 00d9929568 Translated using Weblate
Currently translated at 100.0% (1245 of 1245 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
2026-06-17 11:10:56 +02:00
Ryan Kupka c301b14cb3 fix: recognize function keys F1–F24 when assigning hotkeys (#2157)
keyboardCodeToHotkeyKey had branches for Key*, Digit*, and Numpad* codes
but none for function keys, so KeyboardEvent.code values "F1".."F24"
returned null and the hotkey capture handler silently dropped them. This
made every function key unassignable (not just F13+ such as F21/F22).

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 00:54:39 -07:00
Hosted Weblate 10332fdeaf Translated using Weblate
Currently translated at 16.0% (200 of 1245 strings) (Norwegian Nynorsk)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/nn/

Co-authored-by: johron <johanhrong@icloud.com>
2026-06-16 23:01:22 +02:00
keebsxd 2107d1c928 Added Graphic EQ and Compressor (#1972)
* Adding Graphic Eq and Compressor with presets
2026-06-16 00:38:40 -07:00
jeffvli f7adcb8533 more potential fixes for server lock duplication 2026-06-15 20:49:56 -07:00
Hosted Weblate ba4664e797 Added translation using Weblate (Norwegian Nynorsk)
Co-authored-by: johron <johanhrong@icloud.com>
2026-06-15 22:57:14 +02:00
Hosted Weblate b14eb1c423 Translated using Weblate
Currently translated at 100.0% (1245 of 1245 strings) (Estonian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/et/

Co-authored-by: rimasx <riks_12@hot.ee>
2026-06-15 21:40:26 +02:00
Hosted Weblate 4297d0d5b3 Translated using Weblate
Currently translated at 100.0% (1245 of 1245 strings) (Estonian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/et/

Co-authored-by: rimasx <riks_12@hot.ee>
2026-06-14 23:53:00 +02:00
Hosted Weblate 64615a1701 Translated using Weblate
Currently translated at 100.0% (1245 of 1245 strings) (Estonian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/et/

Translated using Weblate

Currently translated at 100.0% (1245 of 1245 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: rimasx <riks_12@hot.ee>
2026-06-12 22:01:16 +02:00
Kendall Garner 2a0e414d8f fix lint for custom property 2026-06-11 17:47:29 -07:00
Kendall Garner f2c455f23b disable text wrap for combined-title artists 2026-06-11 17:42:05 -07:00
Hosted Weblate 0a0027f245 Translated using Weblate
Currently translated at 100.0% (1245 of 1245 strings) (Estonian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/et/

Co-authored-by: rimasx <riks_12@hot.ee>
2026-06-11 12:48:54 +02:00
jeffvli 4f687c155f relax minReleaseAge to 24 hours 2026-06-10 16:40:52 -07:00
Hosted Weblate f1f415daa8 Translated using Weblate
Currently translated at 100.0% (1245 of 1245 strings) (Polish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/

Translated using Weblate

Currently translated at 100.0% (1245 of 1245 strings) (Estonian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/et/

Co-authored-by: rimasx <riks_12@hot.ee>
Co-authored-by: skajmer <skajmer@protonmail.com>
2026-06-10 22:25:59 +02:00
jeffvli 1ee767352a add 1 week minimumReleaseAge for packages 2026-06-10 10:15:46 -07:00
jeffvli 66a123c10d remove pnpm10 compatibility in package.json 2026-06-10 10:15:46 -07:00
Hosted Weblate de0ddfe226 Translated using Weblate
Currently translated at 100.0% (1245 of 1245 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Translated using Weblate

Currently translated at 100.0% (1245 of 1245 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Translated using Weblate

Currently translated at 100.0% (1245 of 1245 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Translated using Weblate

Currently translated at 100.0% (1245 of 1245 strings) (Estonian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/et/

Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: rimasx <riks_12@hot.ee>
Co-authored-by: 為什麼不加空格 <c++23@users.noreply.hosted.weblate.org>
2026-06-10 08:01:28 +00:00
oHaoDaio d23f7619ec chore: Support pnpm v11 2026-06-09 22:15:47 -07:00
Kendall Garner 44de6f2207 chore: upgrade depdencencies (#2133)
* upgrade depdencencies
2026-06-09 21:18:47 -07:00
BotBlake f6f25154a1 add "enhancement" to exempt-issue-labels (#2061) 2026-06-09 11:22:36 -07:00
Pedro Vieira 880516069d fix: preserve infinite list cache on component remount (fixes random sort reshuffling) (#2097)
* fix: preserve infinite list cache on component remount

When browsing with random sort, navigating to a detail view and coming
back would reshuffle the list. This happens because the list component
unmounts, losing its internal ref guard, and the reset effect re-fetches
all pages — returning a new random order from the server.
2026-06-09 11:21:02 -07:00
Hosted Weblate 95970183db Translated using Weblate
Currently translated at 100.0% (1245 of 1245 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Translated using Weblate

Currently translated at 100.0% (1245 of 1245 strings) (Catalan)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ca/

Translated using Weblate

Currently translated at 100.0% (1245 of 1245 strings) (Estonian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/et/

Co-authored-by: Ondo <SparkyOndo@proton.me>
Co-authored-by: rimasx <riks_12@hot.ee>
Co-authored-by: 為什麼不加空格 <c++23@users.noreply.hosted.weblate.org>
2026-06-09 07:01:35 +00:00
Hosted Weblate 3a2c952d2a Translated using Weblate
Currently translated at 75.7% (943 of 1245 strings) (Estonian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/et/

Co-authored-by: rimasx <riks_12@hot.ee>
2026-06-07 22:01:21 +02:00
jeffvli 46b94a83f1 fix reportPlayback event chain (#2131)
- properly send stopped event on song change
- properly send both starting and playing evento n song change instead of only starting
2026-06-06 18:41:59 -07:00
jeffvli 40a1d1438d re-add missing scrobble on playback start when using playback report (#2131) 2026-06-06 18:07:53 -07:00
Hosted Weblate 905088cae7 Translated using Weblate
Currently translated at 85.6% (1066 of 1245 strings) (Russian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ru/

Translated using Weblate

Currently translated at 64.2% (800 of 1245 strings) (Estonian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/et/

Translated using Weblate

Currently translated at 44.3% (552 of 1245 strings) (Norwegian Bokmål)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/nb_NO/

Co-authored-by: Vladimir Levitskiy <lvdm87@gmail.com>
Co-authored-by: klodrik <klodrik@zoominn.no>
Co-authored-by: rimasx <riks_12@hot.ee>
2026-06-06 12:01:23 +00:00
Hosted Weblate 705b375dab Translated using Weblate
Currently translated at 20.1% (251 of 1245 strings) (Korean)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ko/

Translated using Weblate

Currently translated at 82.5% (1028 of 1245 strings) (Russian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ru/

Translated using Weblate

Currently translated at 43.2% (538 of 1245 strings) (Japanese)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ja/

Translated using Weblate

Currently translated at 57.7% (719 of 1245 strings) (Estonian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/et/

Co-authored-by: Benjamin <ben@iipython.dev>
Co-authored-by: Vladimir Levitskiy <lvdm87@gmail.com>
Co-authored-by: karigane <169052233+karigane-cha@users.noreply.github.com>
Co-authored-by: rimasx <riks_12@hot.ee>
2026-06-05 11:01:20 +00:00
Mathieu Lemay 0b537b07ee Add zenburn theme (#2112) 2026-06-04 09:55:17 -07:00
Hosted Weblate dfa6198bdd Translated using Weblate
Currently translated at 20.0% (249 of 1245 strings) (Korean)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ko/

Translated using Weblate

Currently translated at 100.0% (1245 of 1245 strings) (Spanish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/

Translated using Weblate

Currently translated at 26.9% (336 of 1245 strings) (Japanese)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ja/

Translated using Weblate

Currently translated at 100.0% (1245 of 1245 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Translated using Weblate

Currently translated at 98.3% (1224 of 1245 strings) (French)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/

Translated using Weblate

Currently translated at 46.9% (584 of 1245 strings) (Estonian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/et/

Translated using Weblate

Currently translated at 100.0% (1245 of 1245 strings) (Polish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/

Co-authored-by: Benjamin <ben@iipython.dev>
Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: KosmoMoustache <kosmomoustache@users.noreply.hosted.weblate.org>
Co-authored-by: rimasx <riks_12@hot.ee>
Co-authored-by: skajmer <skajmer@protonmail.com>
2026-06-04 10:01:27 +00:00
jeffvli b9312d86fd update to v1.13.0 2026-06-03 01:01:04 -07:00
jeffvli 30a1bda93d add new i18n locales 2026-06-03 00:28:12 -07:00
jeffvli 0e24eeeb1c only show queue save toast on explicit request (#2090) 2026-06-03 00:28:12 -07:00
Hosted Weblate 58d4dea09a Translated using Weblate
Currently translated at 22.2% (277 of 1245 strings) (Estonian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/et/

Translated using Weblate

Currently translated at 100.0% (1245 of 1245 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Translated using Weblate

Currently translated at 21.9% (273 of 1244 strings) (Estonian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/et/

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: York <goog10216922@gmail.com>
Co-authored-by: rimasx <riks_12@hot.ee>
2026-06-03 09:09:27 +02:00
jeffvli c4da44a443 add playlist/artist image upload for jellyfin (#2105) 2026-06-03 00:07:31 -07:00
jeffvli be3f959354 fetch local lyrics first if preferred (#2100) 2026-06-02 23:38:31 -07:00
Overdrive deb69ef8ea Feature: Add sleep timer for end of current album (#2081)
* Add logic for stopping playback at end of current album, unless in shuffle mode.
2026-06-02 23:22:56 -07:00
fiso64 5ac0aaeec0 fix(player): step correctly when seeking rapidly (#2084)
* fix(player): step correctly when seeking rapidly

mediaSkipBackward/mediaSkipForward compute the new target relative to
the timestamp store, which is only refreshed by a ~500ms engine poll.
Rapid presses within that window all read the same stale position and
recompute the same target, so the time appears stuck until the poll
catches up.

Update the timestamp store immediately when a seek is issued so
subsequent presses compute from the new position; the poll then just
reconciles to the same value. Also applied to mediaSeekToTimestamp so
absolute seeks reflect in the UI without the poll lag.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(player): unify seek comments per review

Use one canonical explanation in mediaSkipBackward and have
mediaSeekToTimestamp/mediaSkipForward reference it.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 23:11:21 +00:00
Kendall Garner 515cadb916 Better cross platform font handling (#2104)
* fix: better handling of custom font

Practically speaking, custom font seems to have only worked on Linux, because
`net.fetch` would include the mime type in the response headers which could validate the payload.
This doesn't appear to be the case on windows/macOS. Instead:

1. On Linux (or if some other system supports it), check the content type. If good, serve as normal
2. Otherwise, fetch the payload. Read the first four to five bytes and check for a valid magic number.

Additionally, to prevent arbitrary requests fetching other paths via injected content, sync the custom font path
to the main process, and then make _every_ request to `feishin:/` point to the same renderer path.
When setting the font, first send the path to the main process. This will register `feishin:/` to point
to the path provided. This is done via a promise-based set.

Finally, provide a default value for the file input (a best effort approximation for the last part of the file path)
on the file input component.

* make the linter happy
2026-06-02 19:34:16 +00:00
Hosted Weblate 4b4d64c7fc Translated using Weblate
Currently translated at 100.0% (1244 of 1244 strings) (Catalan)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ca/

Translated using Weblate

Currently translated at 36.9% (460 of 1244 strings) (Ukrainian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/uk/

Translated using Weblate

Currently translated at 20.5% (256 of 1244 strings) (Estonian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/et/

Co-authored-by: Ondo <SparkyOndo@proton.me>
Co-authored-by: albatrays <weblate.duct925@passmail.net>
Co-authored-by: rimasx <riks_12@hot.ee>
2026-06-02 16:01:13 +02:00
Hosted Weblate f7e1198482 Added translation using Weblate (Estonian)
Co-authored-by: rimasx <riks_12@hot.ee>
2026-06-01 15:15:06 +02:00
jeffvli 7243ed7f15 fix timestamp restore when song switched before playback start (#2094) 2026-05-31 23:09:33 -07:00
York 7e9a78898f fix: punctuation hotkeys not captured (#2091) 2026-05-31 22:43:58 -07:00
Kendall Garner 6aab8d4121 fix(scrobble): use proper pause/unpause for seek, use ms for subsonic 2026-05-31 21:13:11 -07:00
Kendall Garner 70594a696b chore(context menu): show go to only for albums/tracks, prefer artist over album artist where possible 2026-05-31 19:44:58 -07:00
York 08b4c620f2 Merge pull request #2082 from york9675/fix/spacebar
Fix playback hotkeys by preventing browser default
2026-05-31 14:36:53 +00:00
Hosted Weblate 7a20cf3853 Translated using Weblate
Currently translated at 100.0% (1244 of 1244 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Co-authored-by: York <goog10216922@gmail.com>
2026-05-31 10:51:08 +02:00
Hosted Weblate dd186c570f Translated using Weblate
Currently translated at 0.8% (10 of 1244 strings) (Tagalog)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/tl/

Co-authored-by: Redd <reddtheeditor@gmail.com>
2026-05-31 08:04:07 +02:00
Hosted Weblate d5e9d491b6 Added translation using Weblate (Tagalog)
Co-authored-by: Redd <reddtheeditor@gmail.com>
2026-05-31 06:08:43 +02:00
Hosted Weblate 28dc822e4f Translated using Weblate
Currently translated at 100.0% (1244 of 1244 strings) (Spanish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/

Translated using Weblate

Currently translated at 100.0% (1244 of 1244 strings) (Polish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/

Translated using Weblate

Currently translated at 100.0% (1244 of 1244 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Translated using Weblate

Currently translated at 84.1% (1047 of 1244 strings) (English)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/en/

Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Lucas Winther <lucasw89@live.dk>
Co-authored-by: skajmer <skajmer@protonmail.com>
2026-05-30 19:01:12 +00:00
Kendall Garner def1b1e710 fix(butterchurn): allow unsafe wasm for butterchurn 2026-05-30 07:01:53 -07:00
Kendall Garner 2ff9e4b0a2 fix(subsonic): fix favoriting/unfavoriting on playlist songs 2026-05-29 09:19:39 -07:00
jeffvli 49bfc907cd bump lock-threads to v6 2026-05-28 23:07:47 -07:00
jeffvli 34314bdf46 update to v1.12.1 2026-05-28 02:06:41 -07:00
jeffvli 9d53c53c54 fix queue end handling to prevent repeat 2026-05-28 02:06:07 -07:00
jeffvli 8acd585630 clean up discord rpc implementation with usePlayerEvents 2026-05-28 01:50:29 -07:00
jeffvli 1f5907716f disable interval-based timeupdate scrobbles 2026-05-28 00:59:30 -07:00
jeffvli 99ae0c99c6 fix restart requirement logic when switching windowbar style 2026-05-28 00:46:07 -07:00
jeffvli a56253cd3a fix queue height when using web windowbar style (#2068) 2026-05-28 00:46:06 -07:00
Kendall Garner a2cdce66bc chore(github): update bug report template 2026-05-27 21:20:08 -07:00
Jonathan Grotelüschen 7454832663 fix: set RESOURCES_PATH relative to app.getAppPath() (#2064)
When running the app with system electron, process.resourcesPath points
to the resources folder of the system electron, not the one from
feishin.
2026-05-27 20:01:54 -07:00
Hosted Weblate 1ed185606d Translated using Weblate
Currently translated at 100.0% (1244 of 1244 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Translated using Weblate

Currently translated at 100.0% (1244 of 1244 strings) (Polish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/

Translated using Weblate

Currently translated at 54.9% (684 of 1244 strings) (German)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/de/

Translated using Weblate

Currently translated at 100.0% (1244 of 1244 strings) (Spanish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/

Translated using Weblate

Currently translated at 100.0% (1244 of 1244 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Translated using Weblate

Currently translated at 17.8% (222 of 1244 strings) (Arabic)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ar/

Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Laalo <hyohnoo3@gmail.com>
Co-authored-by: Zarakkas <kaz@users.noreply.hosted.weblate.org>
Co-authored-by: linger <linger0517@gmail.com>
Co-authored-by: skajmer <skajmer@protonmail.com>
2026-05-27 05:11:44 +00:00
jeffvli d9da588c7c add workaround for identical Jellyfin release name bug (#2041) 2026-05-26 22:06:40 -07:00
jeffvli e206136156 add physical key mapping for useHotkeys to support alt keyboard languages (#2051) 2026-05-26 21:55:08 -07:00
jeffvli 57b11e0dae remove invalid expand button on Playlist table index column 2026-05-26 20:49:19 -07:00
jeffvli 2fc130d709 validate mpv extra parameters to prevent empty string param (#2058) 2026-05-26 20:46:17 -07:00
jeffvli 1aa6b88cfa allow transcode on waveform streamURL (#2060) 2026-05-26 20:35:23 -07:00
jeffvli 329d028edd add open delay to scrobble status HoverCard 2026-05-26 20:05:01 -07:00
jeffvli 4955f30081 fix regression on numeric column designation (#2065) 2026-05-26 19:51:42 -07:00
jeffvli bf7ca937ff force pnpm v10 in dockerfile 2026-05-25 22:00:31 -07:00
Hosted Weblate 2193fa4251 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Translated using Weblate

Currently translated at 100.0% (1231 of 1231 strings) (Chinese (Traditional Han script))
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Translated using Weblate

Currently translated at 15.8% (195 of 1231 strings) (Arabic)
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ar/

Translated using Weblate

Currently translated at 100.0% (1231 of 1231 strings) (Polish)
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/

Translated using Weblate

Currently translated at 54.3% (669 of 1230 strings) (German)
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/de/

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Laalo <hyohnoo3@gmail.com>
Co-authored-by: Timon Seidel <timongcraft@users.noreply.hosted.weblate.org>
Co-authored-by: York <goog10216922@gmail.com>
Co-authored-by: skajmer <skajmer@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translation: feishin/Translation
2026-05-26 06:05:29 +02:00
jeffvli 9124604b89 update to v1.12.0 2026-05-25 21:01:37 -07:00
jeffvli 239ef4a4ec add album mode for autodj
- add selection modes: similar, random
- add autodj settings in playerbar popover
2026-05-25 19:23:37 -07:00
jeffvli f3b72504f1 fix missing count configuration for track radio 2026-05-25 19:10:45 -07:00
Simon Bråten f098f848a3 feat: reading custom css from external file (#2012)
* feat: reading custom css from external file

---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2026-05-25 14:53:53 -07:00
muckymucky 22d37135ae fix: strip playback accelerators whenever any text input is focused (#2059)
The command-palette-specific IPC approach didn't cover other modals
with inputs (settings search, playlist creation, etc.). Replace it
with document-level focusin/focusout listeners that signal the main
process whenever any input/textarea/contenteditable gains or loses
focus, so the menu rebuild is triggered automatically for all current
and future input surfaces.

Co-authored-by: muckymucky <muckymucky@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 13:35:45 -07:00
jeffvli 61c6036d41 cap scrobble status at max values 2026-05-25 13:26:12 -07:00
jeffvli 95ae474cc6 fix playerbar slider styles
- left / right values should be consistent width
2026-05-25 13:26:12 -07:00
jeffvli 504bbeed91 handle positional scrobbles for OS 2026-05-25 13:26:11 -07:00
jeffvli 0e5b3450dd set ignoreScrobble, playbackRate as optional params 2026-05-25 13:26:11 -07:00
jeffvli 650ae0b320 add reportPlayback as default Jellyfin feature 2026-05-25 13:26:11 -07:00
jeffvli 66cfab3b57 add playbackReport handler to Subsonic controller 2026-05-25 13:26:10 -07:00
jeffvli 0455d5bfb8 add reportPlayback server feature 2026-05-25 13:26:09 -07:00
jeffvli 112449576e add OS reportPlayback endpoint and types 2026-05-25 13:26:09 -07:00
muckymucky 3122f4121e fix: strip playback menu accelerators while command palette is open (#2055)
On macOS, menu item accelerators (e.g. Space for Play/Pause) fire even
when an input has focus, bypassing the renderer-side useHotkeys guard
added in #1925. Typing a space character in the command palette search
toggled play/pause instead of inserting a space.

Track command palette open state in the main process via IPC. When the
palette is open, rebuild the application menu with empty playback
accelerators so single-key shortcuts no longer intercept keystrokes
intended for the search input. Restore accelerators when the palette
closes.

Co-authored-by: Jack McCrea <jack@MacBookPro.lan>
2026-05-25 11:24:15 -07:00
Hosted Weblate 28b8894b49 Translated using Weblate
Currently translated at 53.2% (655 of 1230 strings) (German)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/de/

Co-authored-by: Timon Seidel <svc-weblate-24123097555425b5@timongcraft.de>
2026-05-24 16:11:35 +02:00
Hosted Weblate 41d5694f1f Translated using Weblate
Currently translated at 100.0% (1230 of 1230 strings) (Indonesian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/id/

Translated using Weblate

Currently translated at 57.4% (707 of 1230 strings) (Portuguese)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pt/

Co-authored-by: Arif Budiman <arifpedia@gmail.com>
Co-authored-by: ssantos <ssantos@web.de>
2026-05-23 13:11:45 +00:00
Kendall Garner 7befd70e21 Apply additional security recommendations (#2050)
* enable sandbox

* enable CSP (umami tentatively works?) and reduce amount of ipc APIs exposed

* remove csp from index
2026-05-22 22:09:22 -07:00
Hosted Weblate 0de1e1aa3e Translated using Weblate
Currently translated at 26.0% (320 of 1230 strings) (Japanese)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ja/

Translated using Weblate

Currently translated at 98.6% (1213 of 1230 strings) (Catalan)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ca/

Translated using Weblate

Currently translated at 73.8% (908 of 1230 strings) (Russian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ru/

Co-authored-by: Napster2k <Napster2k@gmail.com>
Co-authored-by: Ondo <SparkyOndo@proton.me>
Co-authored-by: karigane <169052233+karigane-cha@users.noreply.github.com>
2026-05-22 11:11:40 +00:00
jeffvli 6528859ea9 adjust ItemDetail row play control alignment to match ItemTable 2026-05-22 03:43:48 -07:00
jeffvli 704745eb7c fix item table crashing with row play controls
- hovercard causes issues with the image component as the component is mounted/unmounted within the portal
2026-05-22 03:28:37 -07:00
jeffvli 2759cfee97 Revert "fix NativeImage state causing crashes in table"
This reverts commit 4008c8dfdf.
2026-05-22 01:56:50 -07:00
jeffvli 755f0aab9d fix mediasession breaking on player repeat (#1472)
- switch to single web player instance for loop instead of dual-player
- this fixes the issue, but does have a breaking change if using the crossfade player
2026-05-22 01:32:22 -07:00
jeffvli 0e163543fc update lockfile for electron v41 2026-05-21 11:30:09 -07:00
jeffvli fad2534d44 update to electron v41 in deps 2026-05-21 11:28:13 -07:00
jeffvli edfc64d790 update to electron v41 (#2047) 2026-05-21 11:20:55 -07:00
Tiago Simionato 8f40894926 feat: persist player timestamp (#2043)
* feat: persist player timestamp
2026-05-21 00:16:46 -07:00
Kendall Garner 2befcb4e74 disable node integration (#2049) 2026-05-20 21:06:28 -07:00
jeffvli 2d78c32a68 prevent track radio from prepending song in queue
- this behavior relates to when using NEXT or LAST as this will add a duplicate song
2026-05-20 20:49:29 -07:00
jeffvli 3d0500980a implement row playback controls for the detail list 2026-05-20 20:40:30 -07:00
jeffvli 3551ee5077 prevent desktopCaturer from running unless visualizer explicitly requested (#1931) 2026-05-20 20:34:25 -07:00
jeffvli 4008c8dfdf fix NativeImage state causing crashes in table 2026-05-19 21:03:28 -07:00
jeffvli 64efbc5210 add table row playback controls
- supports song, album, artist, and album artist tables
- hovering over the first row index or track number column will display a hovercard for the playback controls
2026-05-19 21:03:27 -07:00
Kendall Garner 42e9394246 fix lint 2026-05-19 20:11:42 -07:00
Kendall Garner afbe8fac52 include add to playlist action in quick search 2026-05-19 20:06:15 -07:00
Hosted Weblate 2c1be99bd5 Translated using Weblate
Currently translated at 98.4% (1211 of 1230 strings) (French)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/

Co-authored-by: KosmoMoustache <kosmomoustache@users.noreply.hosted.weblate.org>
2026-05-19 14:48:01 +02:00
jeffvli ada94e5f5d add loading state to playlist folder move 2026-05-19 01:50:36 -07:00
jeffvli c8675ab600 prevent item drop on smart playlists 2026-05-19 01:30:27 -07:00
jeffvli 37367a6741 fix nested playlist folder drag behavior 2026-05-18 21:45:07 -07:00
jeffvli e7b65c8e86 add drag over expand/collapse behavior for playlist folders 2026-05-18 19:15:28 -07:00
jeffvli 3d1095dbd8 adjust playlist folder design, add animations 2026-05-18 18:39:55 -07:00
jeffvli da4284bac0 fix playlist folder drop on root behavior
- previously, nested folders dropped onto root would destroy the folder. instead, move the nested folder into the root
2026-05-18 18:39:55 -07:00
Braelyn Boynton f3c0b68a0f fix(player): stop radio before starting track playback (#2039)
* fix(player): stop radio before starting track playback

When internet radio is streaming, clicking a track to play does nothing
because the MPV engine guards check currentStreamUrl and bail early.
Stop the radio stream before setting up the new queue on Play.NOW and
Play.SHUFFLE so the audio engine proceeds normally.

Fixes #2038

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: correct import ordering for lint

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 17:58:08 -07:00
jeffvli 5a3f2fe96f set low image fetchpriority by default 2026-05-18 17:52:28 -07:00
Kendall Garner aec5e84758 fix(navidrome): always filter by id instead of value 2026-05-18 17:17:20 -07:00
Kendall Garner e85acee3e6 fix(remote): always send remote settings on init 2026-05-17 07:22:05 -07:00
Hosted Weblate 406cf470bc Translated using Weblate
Currently translated at 100.0% (1230 of 1230 strings) (Polish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/

Co-authored-by: skajmer <skajmer@protonmail.com>
2026-05-16 10:11:35 +00:00
Hosted Weblate 167ee03a1f Translated using Weblate
Currently translated at 100.0% (1230 of 1230 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Translated using Weblate

Currently translated at 100.0% (1230 of 1230 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Translated using Weblate

Currently translated at 100.0% (1230 of 1230 strings) (Spanish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/

Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: York <goog10216922@gmail.com>
2026-05-15 07:11:36 +02:00
Hosted Weblate 61c8e996d3 Translated using Weblate
Currently translated at 98.8% (1212 of 1226 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Co-authored-by: linger <linger0517@gmail.com>
2026-05-14 05:38:01 +02:00
jeffvli ed80f06e72 lint files 2026-05-13 20:37:50 -07:00
jeffvli adc9e30266 Merge branch 'development' of https://github.com/jeffvli/feishin into development 2026-05-13 19:02:54 -07:00
jeffvli fcd4c27fb8 support playlist folder drag/drop 2026-05-13 18:39:06 -07:00
jeffvli c4ef6f3799 add sidebar playlist folder settings to env, add compact sidebar playlist view 2026-05-13 17:26:41 -07:00
Hosted Weblate 073b482fed Translated using Weblate
Currently translated at 100.0% (1209 of 1209 strings) (Polish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/

Translated using Weblate

Currently translated at 100.0% (1209 of 1209 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Translated using Weblate

Currently translated at 100.0% (1209 of 1209 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Translated using Weblate

Currently translated at 100.0% (1209 of 1209 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Translated using Weblate

Currently translated at 100.0% (1209 of 1209 strings) (Spanish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/

Translated using Weblate

Currently translated at 99.6% (1204 of 1208 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: York <goog10216922@gmail.com>
Co-authored-by: linger <linger0517@gmail.com>
Co-authored-by: skajmer <skajmer@protonmail.com>
2026-05-14 02:08:22 +02:00
Norman 74939c6417 Adding a hotkey to jump to the currently playing song (only works without pagination) (#2024) 2026-05-13 17:08:05 -07:00
Shawn 27a62a2a02 feat(sidebar): multi-level playlist folders with tree and navigation views (#2017)
Group playlists into folders using a configurable separator (default '/').
Three view modes:
- Single: first-level grouping only (original behavior)
- Tree: full recursive nesting with connecting lines (configurable indent and line color)
- Navigation: drill-down view with stacked breadcrumb chain

Folders are sorted before playlists at every level. New settings render as
indented sub-options under the master 'Enable folders' toggle.
2026-05-13 17:07:45 -07:00
jeffvli ffe59b2c78 refactor scrobbling to use duration instead of progress (#2010)
- add scrobble status debug and indicator
- add force / reset scrobble
2026-05-12 22:04:46 -07:00
jeffvli 4226da94ec add Mantine progress component 2026-05-12 21:43:35 -07:00
jeffvli 6e634972c9 add transparent icon color variant 2026-05-12 21:43:27 -07:00
Hosted Weblate 984b85e0e9 Translated using Weblate
Currently translated at 75.6% (914 of 1208 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Translated using Weblate

Currently translated at 100.0% (1208 of 1208 strings) (Spanish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/

Translated using Weblate

Currently translated at 100.0% (1208 of 1208 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: linger <linger0517@gmail.com>
2026-05-13 02:48:17 +00:00
jeffvli 9bb38e1df3 apply additional name sort to RELEASE_DATE album list sort (#2022) 2026-05-12 19:48:03 -07:00
jeffvli 4ecd8271a2 add transcode and playback filters to env settings (#2018) 2026-05-12 19:39:28 -07:00
jeffvli ce7a319d2f fix entity locales to titleCase 2026-05-12 18:50:03 -07:00
jeffvli 1616021451 fix regression on ActionBar width
- Mantine v9 uses a new inner div on the Grid component
2026-05-12 02:15:56 -07:00
Jeff e2a1d813a9 Use proper casing for i18n locales (#1998) 2026-05-11 19:42:07 -07:00
Hosted Weblate e49e488b4c Translated using Weblate
Currently translated at 100.0% (1208 of 1208 strings) (Japanese)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ja/

Co-authored-by: karigane <169052233+karigane-cha@users.noreply.github.com>
2026-05-08 09:59:37 +02:00
Felix Prillwitz 5d4547080d Always use remote url for discord rpc image (#2009)
* add option to force remote url for api calls

* force remote url for discord rpc image
2026-05-07 21:13:34 -07:00
jeffvli cc8910cfd6 add artistrating smart playlist field (#2015) 2026-05-07 21:08:57 -07:00
jeffvli 9fb241dca2 remove server selector from collapsed sidebar 2026-05-07 20:54:42 -07:00
Maximilian Leith e3a0879301 fix: only show Jellyfin audio playlist (#2000) 2026-05-07 20:48:43 -07:00
Norman 953494e9d0 Fixed bad smart playlist field s (#2011) 2026-05-07 20:46:48 -07:00
jeffvli f190626c8c fix playcounts on jellyfin album detail songs (#2005) 2026-05-07 20:42:51 -07:00
Hosted Weblate 324936e0c8 Translated using Weblate
Currently translated at 100.0% (1208 of 1208 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Translated using Weblate

Currently translated at 100.0% (1208 of 1208 strings) (Catalan)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ca/

Co-authored-by: Ondo <SparkyOndo@proton.me>
Co-authored-by: York <goog10216922@gmail.com>
2026-05-05 05:09:50 +00:00
Hosted Weblate 868ec15b16 Added translation using Weblate (Thai)
Translated using Weblate

Currently translated at 100.0% (1208 of 1208 strings) (Spanish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/

Translated using Weblate

Currently translated at 100.0% (1208 of 1208 strings) (Polish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/

Translated using Weblate

Currently translated at 100.0% (1208 of 1208 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Co-authored-by: Anucha Hlownonkor <anucha.initdz@gmail.com>
Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: skajmer <skajmer@protonmail.com>
2026-05-03 12:06:39 +02:00
Hosted Weblate 775c4e68fa Translated using Weblate
Currently translated at 81.3% (981 of 1206 strings) (Russian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ru/

Translated using Weblate

Currently translated at 100.0% (1206 of 1206 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Translated using Weblate

Currently translated at 85.6% (1033 of 1206 strings) (Basque)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/eu/

Co-authored-by: Aitor Astorga <a.astorga.sdv@protonmail.com>
Co-authored-by: York <goog10216922@gmail.com>
Co-authored-by: spoon <monkeyfart907@gmail.com>
2026-05-02 04:34:18 +00:00
jeffvli 34e0c4bd4a prevent first lyric line highlight before timestamp (#1965) 2026-05-01 21:33:40 -07:00
jeffvli 323130a877 add toggle for app-suspension for powersave block (#1992) 2026-05-01 21:24:45 -07:00
jeffvli 3b2aab74ac enforce web player seek by seconds when less than 1 (#1993) 2026-05-01 21:12:20 -07:00
Hosted Weblate bc7ef0624b Translated using Weblate
Currently translated at 100.0% (1205 of 1205 strings) (Dutch)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/nl/

Translated using Weblate

Currently translated at 100.0% (1205 of 1205 strings) (Dutch)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/nl/

Co-authored-by: Joren Vansteenkiste <vansteenkiste.joren@telenet.be>
Co-authored-by: bokse <weblate@bokse.nl>
2026-05-01 21:32:24 +02:00
Pedro Daniel Reis 304ce8b881 [UI] Made sidebar image just use flex (#1975)
* made sidebar image just use flex

* force aspect ratio to be square

* prevent image container from expanding

---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2026-05-01 12:32:18 -07:00
Jonne Saloranta 01011a49a2 Replace success toast with info when no songs are added (#1994) 2026-05-01 11:44:15 -07:00
York d24ca04878 fix: detect Homebrew mpv on macOS (#1989) 2026-05-01 11:43:07 -07:00
Hosted Weblate 640d38e5a9 Translated using Weblate
Currently translated at 100.0% (1205 of 1205 strings) (Catalan)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ca/

Co-authored-by: Ondo <SparkyOndo@proton.me>
2026-04-30 15:09:57 +00:00
jeffvli ac0c074d4b fix undefined / null parameter string for Subsonic (#1978) 2026-04-28 21:17:44 -07:00
jeffvli 6be5818493 migrate to mantine v9 2026-04-28 21:02:27 -07:00
Hosted Weblate 03edd5a639 Translated using Weblate
Currently translated at 100.0% (1205 of 1205 strings) (Spanish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/

Translated using Weblate

Currently translated at 100.0% (1205 of 1205 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Translated using Weblate

Currently translated at 100.0% (1205 of 1205 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Translated using Weblate

Currently translated at 99.8% (1201 of 1203 strings) (French)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/

Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: KosmoMoustache <kosmomoustache@users.noreply.hosted.weblate.org>
Co-authored-by: York <goog10216922@gmail.com>
2026-04-29 04:45:44 +02:00
jeffvli f5eb3f1488 wrap useHotkeys to disable on command palette open (#1925) 2026-04-28 19:31:41 -07:00
jeffvli 8eab9edb15 fix performance issue related to blurred library header 2026-04-28 19:05:43 -07:00
Mitch Ray fcc69980e4 Stretch the wavesurfer waveform to the full height (#1962)
* Stretch the wavesurfer waveform to the full height

* Add waveform stretch setting
2026-04-27 20:28:03 -07:00
Hosted Weblate 053b78a3fd Translated using Weblate
Currently translated at 100.0% (1203 of 1203 strings) (Spanish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/

Translated using Weblate

Currently translated at 100.0% (1203 of 1203 strings) (Polish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/

Translated using Weblate

Currently translated at 100.0% (1203 of 1203 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Translated using Weblate

Currently translated at 100.0% (1203 of 1203 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: linger <linger0517@gmail.com>
Co-authored-by: skajmer <skajmer@protonmail.com>
2026-04-22 11:09:49 +02:00
mathew4 42ded966e4 fix: proper selection of next song when using shuffle and repeat-one (#1932) 2026-04-21 00:10:21 -07:00
Kendall Garner ea9119431c use urlsearchparams instead of qs (#1970) 2026-04-21 00:09:23 -07:00
vimae add0345f10 feat(lyrics): non-active lyric settings (#1954)
* feat: non-active lyric settings
2026-04-21 00:09:03 -07:00
Hosted Weblate e5a8324a79 Translated using Weblate
Currently translated at 99.3% (1193 of 1201 strings) (Chinese (Simplified Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/

Co-authored-by: yidaduizuoye <yidaduizuoye@outlook.com>
2026-04-19 06:09:51 +02:00
jeffvli cc4e933c07 fix missing path replacement transformations 2026-04-16 00:29:13 -07:00
Hosted Weblate 382d279dad Translated using Weblate
Currently translated at 100.0% (1201 of 1201 strings) (Spanish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/

Translated using Weblate

Currently translated at 100.0% (1201 of 1201 strings) (French)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/

Translated using Weblate

Currently translated at 100.0% (1201 of 1201 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Translated using Weblate

Currently translated at 100.0% (1201 of 1201 strings) (Polish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/

Translated using Weblate

Currently translated at 100.0% (1201 of 1201 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Translated using Weblate

Currently translated at 79.9% (959 of 1200 strings) (Russian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ru/

Co-authored-by: Dylan MONTIGAUD <dylanmontigaud17@gmail.com>
Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Nick <n.grakhov08@gmail.com>
Co-authored-by: York <goog10216922@gmail.com>
Co-authored-by: skajmer <skajmer@protonmail.com>
2026-04-15 06:10:05 +02:00
York b99899f128 fix MPV visualizer on macOS and handle exclusive mode UX (#1930) 2026-04-13 20:47:03 -07:00
korpseluv f5839bf39c normalize album release types and improve grouping logic (#1892) 2026-04-13 20:40:11 -07:00
Damien Erambert 914ed5b8f3 macOS 26-friendly icon (#1941) 2026-04-13 20:32:21 -07:00
Ross ca0a1569f8 Add everfrost dark and light themes (#1934)
Co-authored-by: Ross <ro@noirlab.edu>
2026-04-13 20:22:37 -07:00
Hosted Weblate 9f10fe398a Translated using Weblate
Currently translated at 58.1% (698 of 1200 strings) (Portuguese (Brazil))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pt_BR/

Translated using Weblate

Currently translated at 38.8% (466 of 1200 strings) (Ukrainian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/uk/

Co-authored-by: Yuri Shumyatsky <shumy260404@gmail.com>
Co-authored-by: albatrays <weblate.duct925@passmail.net>
2026-04-12 12:09:54 +00:00
Kendall Garner 8869278898 make theme selector serachable 2026-04-10 20:03:50 -07:00
Jeff 16c9e6cc1b Fix various build issues (#1942)
* remove dynamic import for platform features

* increase node memory limit on macOS build

* fix invalid dynamic imports in renderer

* remove discord-rpc import in renderer
2026-04-10 01:54:11 -07:00
Kendall Garner 2a6e9b6ad3 add extendInfo to alpha/beta builders 2026-04-08 07:28:34 -07:00
Kendall Garner 167b42df2b Merge pull request #1926 from noctuum/fix/wayland-screen-share-dialog
fix(linux): remove unnecessary screen capture from audio loopback handler
2026-04-08 02:11:36 +00:00
jeffvli e6a2bc3acf disable useTransition in router again 2026-04-07 18:21:32 -07:00
jeffvli ca3c7015c6 add fallback to direct streamURL if getTranscodeDecision fails 2026-04-07 18:14:47 -07:00
jeffvli c7c15d917a isolate item card control renders 2026-04-07 18:14:47 -07:00
noctuum 6adb29bc38 fix(linux): remove unnecessary desktopCapturer call from display media handler
The setDisplayMediaRequestHandler was calling desktopCapturer.getSources()
to provide a video source that the renderer never uses (it requests
video: false and only consumes audio tracks). On Wayland, this created a
new xdg-desktop-portal ScreenCast session on every launch, showing an
unavoidable screen share dialog because Electron does not persist
PipeWire restore tokens across desktopCapturer sessions.

Simplified the handler to return only { audio: 'loopback' }, which
captures system audio via PipeWire/PulseAudio monitor source without
any portal interaction.
2026-04-08 04:56:05 +07:00
Hosted Weblate 2c3cd7af24 Translated using Weblate
Currently translated at 94.6% (1136 of 1200 strings) (German)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/de/

Translated using Weblate

Currently translated at 100.0% (1200 of 1200 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Translated using Weblate

Currently translated at 100.0% (1200 of 1200 strings) (Japanese)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ja/

Translated using Weblate

Currently translated at 100.0% (1200 of 1200 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Translated using Weblate

Currently translated at 100.0% (1200 of 1200 strings) (Spanish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/

Translated using Weblate

Currently translated at 100.0% (1200 of 1200 strings) (French)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/

Translated using Weblate

Currently translated at 100.0% (1200 of 1200 strings) (Polish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/

Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: KosmoMoustache <kosmomoustache@users.noreply.hosted.weblate.org>
Co-authored-by: York <goog10216922@gmail.com>
Co-authored-by: Zarakkas <kaz@users.noreply.hosted.weblate.org>
Co-authored-by: karigane <169052233+karigane-cha@users.noreply.github.com>
Co-authored-by: lorduskordus <lorduskordus@gmail.com>
Co-authored-by: skajmer <skajmer@protonmail.com>
2026-04-07 08:10:05 +02:00
jeffvli 3c442a2d40 update to v1.11.0 2026-04-06 17:10:18 -07:00
Andrzej Voss d67c185c93 feat: Make "Clear" button "Refresh" when there are no lyrics found. (#1920)
Ref: effvli/feishin#1919 - tl;dr: Button actually reloads/refreshes
lyrics info from the server too, it makes it, well, clearer what it does
in that case - allows to reread lyrics from server without clearing whole cache.
2026-04-06 16:59:01 -07:00
jeffvli ff96a5f121 lint 2026-04-06 12:06:55 -07:00
jeffvli 6fc7b6b271 support image drop for upload 2026-04-06 11:41:33 -07:00
jeffvli 918f453066 support navidrome artist image upload/delete 2026-04-06 11:41:26 -07:00
jeffvli 4a986069f8 set flac as default transcoding profile 2026-04-06 10:58:37 -07:00
jeffvli 11d26af893 remove arm/v7 from container build 2026-04-06 09:47:28 -07:00
jeffvli ad13fea033 update to v1.10.0 2026-04-05 22:41:06 -07:00
Hosted Weblate 8a75ec2558 Translated using Weblate
Currently translated at 100.0% (1196 of 1196 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Co-authored-by: York <goog10216922@gmail.com>
2026-04-06 05:27:10 +00:00
Auzlex 895cbb4d16 fix(media-session): prevent handlers from being destroyed during playback (#1898)
Handlers were being registered and destroyed on state change/re-render,
causing media controls to vanish during rapid use or quick track skipping.
Persist handlers and add debounce for rapid track skipping.

Tested on Windows, Linux, and Android.
2026-04-05 22:27:04 -07:00
jeffvli 3f300c40cc add in-app prompt for system audio connection 2026-04-05 22:19:09 -07:00
jeffvli c8e8f58cce re-add useTransition to router 2026-04-05 21:54:07 -07:00
jeffvli 56cd50e0ed add react compiler 2026-04-05 18:38:06 -07:00
jeffvli 1b2a6dfc1f optimize item list controls 2026-04-05 18:21:28 -07:00
jeffvli 356f5487b0 reorder playlist context menu items 2026-04-05 14:10:07 -07:00
jeffvli 37501f2983 remove automatic autosize, use dummy fill column instead 2026-04-05 09:06:03 -07:00
jeffvli d61587b16f add automatic autosize columns when auto-fit is disabled 2026-04-05 08:12:10 -07:00
Kendall Garner 06b7b53dc9 feat(macos): add NSLocalNetworkUsageDescription 2026-04-05 08:03:28 -07:00
Kendall Garner 6c2cd1c274 fix(mpris): serve minimal metadata when playing radio
1. MPRIS (or `mpris-service`) is very fragile. If an invalid `mpris:trackid` (something with `-` or spaces) is passed in, it breaks. Use a minimal track id instead
2. Only populate album/artist/title
2026-04-05 08:01:28 -07:00
jeffvli ef129e4638 remove video from displayMedia request 2026-04-05 07:58:01 -07:00
jeffvli a01b4e664d add plex fork notice 2026-04-05 07:57:41 -07:00
jeffvli 0b45ab7f36 support real-time table column resizing 2026-04-05 07:48:54 -07:00
jeffvli 031d365262 decrease padding on list header 2026-04-05 03:49:31 -07:00
jeffvli 4fd56281d5 increase font size of smart playlist JSON editor 2026-04-05 02:42:05 -07:00
jeffvli 08ce8a4028 add nd v0.61.1 smart playlist fields 2026-04-05 02:38:40 -07:00
jeffvli e06877af76 make visualizer idle kill consistent for both 2026-04-05 02:35:32 -07:00
jeffvli 84395ce5b4 pass muted text props to JoinedArtists in left controls 2026-04-05 00:59:53 -07:00
jeffvli 94886a2d5a add system audio loopback for webaudio 2026-04-05 00:48:38 -07:00
jeffvli 25bb7f7069 fix scroll shadow z-indexing issue with table scrollbars 2026-04-04 23:48:48 -07:00
jeffvli 573fe5ee35 use external store for scroll shadow 2026-04-04 23:32:32 -07:00
jeffvli a868d4d539 combine wav codec check 2026-04-04 23:11:55 -07:00
jeffvli 564ee721c4 revert default transcoding profile to opus, add safari check for mp3 2026-04-04 23:08:53 -07:00
jeffvli a8d990db23 fix subsonic transcoding stream url to return raw string instead of fetch 2026-04-04 23:03:46 -07:00
jeffvli e21515f7fb add additional codec probes for transcoding profile, use mp3 instead of opus for default transcode 2026-04-04 23:03:29 -07:00
jeffvli 3e5a8ac78d re-add default suspense to album/artist routes 2026-04-04 22:25:21 -07:00
jeffvli 6c73d06dcf remove useTransition from router 2026-04-04 22:14:07 -07:00
jeffvli a8954bfa2a remove imageUrl in favor or imageId for artistInfo 2026-04-04 21:52:44 -07:00
jeffvli 19a1617a8d remove suspense spinner from router 2026-04-04 18:26:25 -07:00
jeffvli 1abae986f8 move server selector into app menu 2026-04-04 18:25:04 -07:00
jeffvli 43fa574dab add responsive breakpoint for queue control items 2026-04-04 17:37:47 -07:00
jeffvli 99530c670e redesign queue controls bar 2026-04-04 17:37:05 -07:00
jeffvli 3a0dfe59ce improve visibily of keyboard-focused search items 2026-04-04 17:37:05 -07:00
York d60ed0a793 feat: macOS menu enhancement (#1903) 2026-04-04 17:35:30 -07:00
Kendall Garner a32fed3bcf chore: upgrade dependencies (#1906)
* upgrade dependencies

* downgrade fast-average-color
2026-04-04 17:10:57 -07:00
Kendall Garner 132ac92984 chore: use consistent order of track / artist / ablum on full screen page 2026-04-04 14:46:13 -07:00
jeffvli 141a20f042 refactor item table props 2026-04-04 12:34:27 -07:00
jeffvli 1592204515 add fallback sort order for subsonic playlist list 2026-04-04 12:03:41 -07:00
jeffvli b9f5459725 fix layout shift on grid carousel page change 2026-04-03 20:25:12 -07:00
jeffvli d4e9b9b7a6 adjust bg loading on album detail page 2026-04-03 20:11:10 -07:00
jeffvli ec9e4b1339 fix type error due to new param on mediaStop 2026-04-03 19:09:42 -07:00
Hosted Weblate f09109b887 Translated using Weblate
Currently translated at 100.0% (1194 of 1194 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Translated using Weblate

Currently translated at 100.0% (1194 of 1194 strings) (Polish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/

Translated using Weblate

Currently translated at 100.0% (1194 of 1194 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Translated using Weblate

Currently translated at 100.0% (1193 of 1193 strings) (French)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/

Translated using Weblate

Currently translated at 100.0% (1193 of 1193 strings) (Polish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/

Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: KosmoMoustache <kosmomoustache@users.noreply.hosted.weblate.org>
Co-authored-by: York <goog10216922@gmail.com>
Co-authored-by: skajmer <skajmer@protonmail.com>
2026-04-04 04:05:50 +02:00
jeffvli 1494c8e044 fix mpv seek error on queue end 2026-04-03 19:05:34 -07:00
jeffvli f3a6027e6d fix mpv progress interval still running after queue ends 2026-04-03 18:58:58 -07:00
jeffvli 3c42355c1e attempt to fix mpv playback sync on song insertion (#1855) 2026-04-03 18:54:49 -07:00
jeffvli feda1bb06f remove square image param, default item id for image 2026-04-03 11:24:39 -07:00
jeffvli 72f1d2f9f9 improve date parsing for partial dates (#1683) 2026-04-02 19:39:08 -07:00
jeffvli ad11a9303c add playlist description to expanded header 2026-04-02 18:36:42 -07:00
jeffvli db06e7f601 add native nd radio endpoints, support radio station images 2026-04-02 18:26:26 -07:00
jeffvli fbf82c1ef0 add playlist image upload to edit playlist modal 2026-04-02 17:41:25 -07:00
jeffvli 92cea5dfda add log for direct play profiles 2026-04-02 01:27:14 -07:00
jeffvli 7442f9d3ca support navidrome playlist image upload 2026-04-02 01:23:09 -07:00
jeffvli 68dacea228 use resized images in artist header 2026-04-01 21:57:32 -07:00
jeffvli 51425b5e86 various performance refactors 2026-04-01 21:57:26 -07:00
jeffvli c60610cb42 lint files 2026-03-31 21:12:48 -07:00
jeffvli d3881ee3be support limitPercent for smart playlists 2026-03-31 21:09:13 -07:00
jeffvli de403ea6ac add new nd smart playlist fields
- averagerating

- albumdateloved
- albumlastplayed
- albumdaterated
- albumloved
- albumrating

- artistdateloved
 -artistlastplayed
- artistdaterated
- artistloved
- artistplaycount
2026-03-31 20:55:36 -07:00
jeffvli a30b1ec90b add OS transcoding extension 2026-03-31 20:45:22 -07:00
Hosted Weblate 7982c0e1bd Translated using Weblate
Currently translated at 100.0% (1193 of 1193 strings) (Chinese (Simplified Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/

Translated using Weblate

Currently translated at 83.4% (996 of 1193 strings) (Basque)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/eu/

Co-authored-by: Aitor Astorga <a.astorga.sdv@protonmail.com>
Co-authored-by: 無情天 <kofzhanganguo@126.com>
2026-03-31 16:09:57 +02:00
dependabot[bot] baf4e7bc0b Bump fast-xml-parser in the npm_and_yarn group across 1 directory (#1777)
Bumps the npm_and_yarn group with 1 update in the / directory: [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser).


Updates `fast-xml-parser` from 5.3.6 to 5.3.8
- [Release notes](https://github.com/NaturalIntelligence/fast-xml-parser/releases)
- [Changelog](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/NaturalIntelligence/fast-xml-parser/compare/v5.3.6...v5.3.8)

---
updated-dependencies:
- dependency-name: fast-xml-parser
  dependency-version: 5.3.8
  dependency-type: direct:production
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-29 21:43:31 -07:00
Sutaai 74c44558fe fix: window bar disappearing in Glassy Dark (#1878)
* fix: glassy dark content container claiming entire width  (#1713)

* fix: apply container height fix only when using window bar

---------

Co-authored-by: Jeff <42182408+jeffvli@users.noreply.github.com>
2026-03-29 21:43:08 -07:00
Pyx 4033619421 glassy dark theme improvements (#1844)
* glassy dark theme improvements
2026-03-29 21:27:56 -07:00
jeffvli 5d206bbb1f toggle fullscreen visualizer on left controls image (#1857) 2026-03-29 21:05:53 -07:00
Hosted Weblate 3db801f2de Translated using Weblate
Currently translated at 89.1% (1063 of 1193 strings) (German)
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/de/

Translated using Weblate

Currently translated at 100.0% (1193 of 1193 strings) (Czech)
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Translated using Weblate

Currently translated at 100.0% (1193 of 1193 strings) (Japanese)
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ja/

Translated using Weblate

Currently translated at 100.0% (1193 of 1193 strings) (Spanish)
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Translated using Weblate

Currently translated at 100.0% (1194 of 1194 strings) (Chinese (Traditional Han script))
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: PhillyMay <mein.alias@outlook.com>
Co-authored-by: karigane <169052233+karigane-cha@users.noreply.github.com>
Co-authored-by: linger <linger0517@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translation: feishin/Translation
2026-03-30 05:34:25 +02:00
ebee04 0d3cf912d3 fix click on feishin icon in macos menu bar (tray) causing switch to feishin window (#1881) 2026-03-29 20:34:18 -07:00
jeffvli d81f30a8b5 disable lyrics on radio playback (#1885) 2026-03-29 20:33:31 -07:00
Kendall Garner a5c3b454f4 add flathub to readme 2026-03-28 21:33:51 -07:00
Kendall Garner 68e6e3cf65 feat(playlist): support updating playlist track order (#1875)
* feat(playlist): support updating playlist track order

* force track mode when editing

* use common confirmation for save

* remove en editPLaylist key
2026-03-27 21:36:08 -07:00
Romain VIGNERES 86e6b88555 feat(albums): show grouping tags on album detail page (#1872)
* feat(albums): show grouping tags on album detail page

---------

Co-authored-by: Romain VIGNERES <romain.vigneres@texa.fr>
2026-03-27 18:51:44 -07:00
jeffvli 5cdc45836f rework queue persistence (#1862) 2026-03-27 18:48:38 -07:00
Kendall Garner d438c802a4 fix(normalize): do not duplicate remixer when included in credit 2026-03-27 18:46:12 -07:00
Hosted Weblate a838bdebb7 Translated using Weblate
Currently translated at 79.5% (949 of 1193 strings) (Basque)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/eu/

Co-authored-by: Aitor Astorga <a.astorga.sdv@protonmail.com>
2026-03-27 20:09:51 +01:00
Hosted Weblate 8ff2f4dfb4 Translated using Weblate
Currently translated at 100.0% (1193 of 1193 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Translated using Weblate

Currently translated at 100.0% (1193 of 1193 strings) (Japanese)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ja/

Translated using Weblate

Currently translated at 100.0% (1193 of 1193 strings) (Spanish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/

Translated using Weblate

Currently translated at 100.0% (1193 of 1193 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: York <goog10216922@gmail.com>
Co-authored-by: karigane <169052233+karigane-cha@users.noreply.github.com>
2026-03-26 08:09:54 +01:00
jeffvli ede47fbf8f fix missing artist name in lyrics search query for lrclib (#1871) 2026-03-25 17:49:50 -07:00
jeffvli 9eb64079f7 handle disabled features in a single flag (#1271) 2026-03-25 17:41:08 -07:00
Hosted Weblate 3b955bb319 Translated using Weblate
Currently translated at 100.0% (1191 of 1191 strings) (Chinese (Simplified Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/

Translated using Weblate

Currently translated at 100.0% (1191 of 1191 strings) (Dutch)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/nl/

Co-authored-by: bokse <weblate@bokse.nl>
Co-authored-by: 無情天 <kofzhanganguo@126.com>
2026-03-25 07:09:59 +01:00
Darius 816adfa6c7 Waveform playerbar improvements (#1781)
* Defer waveform loading & show default seek bar as fallback

* Add configurable waveform loading delay

* Add 2s default value for waveform loading delay

* disable transcoding config on waveform url

---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2026-03-24 10:06:25 -07:00
Hosted Weblate f91dcc6af6 Translated using Weblate
Currently translated at 100.0% (1191 of 1191 strings) (French)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/

Co-authored-by: KosmoMoustache <kosmomoustache@users.noreply.hosted.weblate.org>
2026-03-24 06:10:58 +01:00
kast3t 6dc58a3ff8 fix playlist sort by id (#1867) (#1868)
* fix playlist sort by id (#1867)
2026-03-23 18:27:21 -07:00
Kendall Garner 09fa10a4e9 fix(web): do not load umami if env is disabled 2026-03-22 15:08:21 -07:00
Hosted Weblate 6f45e1a814 Translated using Weblate
Currently translated at 100.0% (1191 of 1191 strings) (Polish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/

Co-authored-by: skajmer <skajmer@protonmail.com>
2026-03-21 23:09:51 +01:00
Hosted Weblate 62ba721f26 Translated using Weblate
Currently translated at 100.0% (1191 of 1191 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Translated using Weblate

Currently translated at 100.0% (1191 of 1191 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Translated using Weblate

Currently translated at 100.0% (1191 of 1191 strings) (Spanish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/

Translated using Weblate

Currently translated at 100.0% (1191 of 1191 strings) (Japanese)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ja/

Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: York <goog10216922@gmail.com>
Co-authored-by: karigane <169052233+karigane-cha@users.noreply.github.com>
2026-03-19 13:09:56 +01:00
jeffvli 67231753e4 add list search links to command palette 2026-03-18 02:51:27 -07:00
jeffvli c16eccaecb fix tab index on command palette play buttons 2026-03-18 02:17:31 -07:00
Hosted Weblate 0bdf1dcb75 Translated using Weblate
Currently translated at 100.0% (1190 of 1190 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Co-authored-by: York <goog10216922@gmail.com>
2026-03-18 08:03:12 +00:00
jeffvli 598e9ca5c2 replace lastfm, musicbrainz, and listenbrainz logos 2026-03-18 01:02:57 -07:00
jeffvli 615f9c3515 refactor search into individual sections by itemtype, add infinite loader 2026-03-18 00:59:04 -07:00
jeffvli b7cbdb4d6c persist command palette collapsed sections to app store 2026-03-17 22:34:07 -07:00
jeffvli 3c562c1398 redesign command palette
- add collapsible search groups
- reduce modal padding
- reduce command item padding
- use breadcrumbs for pagination
- move page breadcrumbs to the bottom
2026-03-17 22:28:07 -07:00
jeffvli 3eafa73217 adjust padding / design of layout toggle 2026-03-17 21:40:16 -07:00
Hosted Weblate 74864d9621 Translated using Weblate
Currently translated at 100.0% (1184 of 1184 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Co-authored-by: York <goog10216922@gmail.com>
2026-03-18 04:25:29 +00:00
jeffvli cb5562d32e decrease height of single feature carousel (#1850) 2026-03-17 21:25:18 -07:00
jeffvli e40a175e12 add qobuz and listenbrainz external links 2026-03-17 21:10:31 -07:00
jeffvli f996b111b9 add new external brand icons 2026-03-17 21:10:31 -07:00
Hosted Weblate 0cb5c49924 Translated using Weblate
Currently translated at 100.0% (1180 of 1180 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
2026-03-18 02:06:56 +00:00
jeffvli c636029003 assert appstore state migration return type 2026-03-17 19:06:45 -07:00
jeffvli db88a6bc22 support vertical play queue layout 2026-03-17 19:01:01 -07:00
Hosted Weblate 8ccd97b574 Translated using Weblate
Currently translated at 100.0% (1180 of 1180 strings) (Spanish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/

Translated using Weblate

Currently translated at 100.0% (1180 of 1180 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Translated using Weblate

Currently translated at 100.0% (1180 of 1180 strings) (Japanese)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ja/

Translated using Weblate

Currently translated at 45.5% (537 of 1180 strings) (Norwegian Bokmål)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/nb_NO/

Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Kristoffer <spinal-onto-rebel@duck.com>
Co-authored-by: karigane <169052233+karigane-cha@users.noreply.github.com>
Co-authored-by: linger <linger0517@gmail.com>
2026-03-17 09:10:00 +01:00
jeffvli 3f99acf473 update to v1.9.0 2026-03-16 00:19:48 -07:00
Hosted Weblate 0cd37ce8ec Translated using Weblate
Currently translated at 100.0% (1180 of 1180 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Co-authored-by: linger <linger0517@gmail.com>
2026-03-16 08:19:17 +01:00
jeffvli ee04878580 set mpv audio device to auto if undefined 2026-03-15 20:17:59 -07:00
jeffvli e987049f20 improve sleep timer ui 2026-03-15 18:20:12 -07:00
Hosted Weblate 122552287a Translated using Weblate
Currently translated at 100.0% (1175 of 1175 strings) (Chinese (Simplified Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/

Translated using Weblate

Currently translated at 100.0% (1175 of 1175 strings) (Japanese)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ja/

Translated using Weblate

Currently translated at 100.0% (1175 of 1175 strings) (French)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/

Translated using Weblate

Currently translated at 10.1% (119 of 1175 strings) (Arabic)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ar/

Translated using Weblate

Currently translated at 89.0% (1046 of 1175 strings) (German)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/de/

Translated using Weblate

Currently translated at 100.0% (1175 of 1175 strings) (Catalan)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ca/

Co-authored-by: Benjamin <ben@iipython.dev>
Co-authored-by: KosmoMoustache <kosmomoustache@users.noreply.hosted.weblate.org>
Co-authored-by: PhillyMay <mein.alias@outlook.com>
2026-03-16 01:01:08 +00:00
jeffvli d318e6d341 ensure no concurrent playback on non-transition state on web player (#1829) 2026-03-15 18:00:51 -07:00
riccardo d96b282cae feat: "open in spotify" button (#1839)
* feat: open in spotify

* fix: disable native spotify URI by default
2026-03-15 11:49:33 -07:00
jeffvli f2ab01199f disable WaylandFractionScaleV1 (#1271) 2026-03-15 11:42:31 -07:00
Kendall Garner 04b22431f4 fix(settings): proper description for sidebar configuration 2026-03-15 09:16:12 -07:00
Kendall Garner 31fce705ab feat(docker): rootless container) 2026-03-14 18:39:38 -07:00
jeffvli a28fab0ff3 optimize skeleton animation (#1832) 2026-03-14 15:31:13 -07:00
Hosted Weblate 0a1d4788ee Translated using Weblate
Currently translated at 81.1% (954 of 1175 strings) (Russian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ru/

Translated using Weblate

Currently translated at 100.0% (1175 of 1175 strings) (Polish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/

Translated using Weblate

Currently translated at 44.1% (519 of 1175 strings) (Norwegian Bokmål)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/nb_NO/

Co-authored-by: klodrik <klodrik@zoominn.no>
Co-authored-by: qvap <qvapelsin@gmail.com>
Co-authored-by: skajmer <skajmer@protonmail.com>
2026-03-14 14:09:54 +01:00
jeffvli fafb9d4f56 remove vercel.json due to incorrect edge request configuration 2026-03-13 17:23:03 -07:00
jeffvli 4fdc38caee remove duplicate only-built-dependencies 2026-03-13 17:15:12 -07:00
jeffvli 799cdb44d3 use pnpm v10 on runners 2026-03-13 17:11:24 -07:00
jeffvli 372892199f pin pnpm/action-setup to v4 2026-03-13 17:02:34 -07:00
jeffvli d16184fb25 bump actions dependencies to latest due to deprecated Node v20 2026-03-13 16:59:55 -07:00
jeffvli b8564f6d41 skip wait-for-lint on workflow dispatch 2026-03-13 16:38:32 -07:00
Hosted Weblate d474e60c51 Translated using Weblate
Currently translated at 100.0% (1175 of 1175 strings) (French)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/

Translated using Weblate

Currently translated at 87.5% (1029 of 1175 strings) (Japanese)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ja/

Co-authored-by: Mario Gervais <social.m@riogervais.ca>
Co-authored-by: karigane <169052233+karigane-cha@users.noreply.github.com>
2026-03-13 09:09:54 +00:00
Lyall dfdac28f53 Fix server queue saving/restoring on Navidrome and OpenSubsonic (#1828)
* fix server queue saving

* fix error when attempting to restore empty queue

* queue items optional

* make playQueueByIndex optional

* fix incorrect error message
2026-03-12 13:41:50 +00:00
jeffvli 16b713bc85 add missing suspense boundary around playlist filter sidebar 2026-03-11 22:00:39 -07:00
Kendall Garner 81cd0722b1 fix(mpv): replace mpv queue when restoring queue 2026-03-11 21:42:16 -07:00
jeffvli 1526f9b8d6 re-add session cache for loaded images 2026-03-11 21:20:31 -07:00
jeffvli 5b4da3bc29 use batched fetching for nd song list
- albumIds get culled from query parameters after a certain number, resulting in not all items fetched
2026-03-11 20:46:49 -07:00
jeffvli d78ea440cc set low fetchPriority for carousel images 2026-03-11 19:41:04 -07:00
jeffvli 1595805b83 add additional render optimizations to ArtistAlbums 2026-03-11 19:12:11 -07:00
jeffvli 00fa45f15d isolate render of sticky elements on item table 2026-03-11 19:07:18 -07:00
Luna M ab05be30c0 Fix typo in docker-compose config (#1827) 2026-03-12 01:08:13 +00:00
Hosted Weblate 3d407e5f24 Update translation files
Updated by "Remove blank strings" hook in Weblate.

Translated using Weblate

Currently translated at 99.8% (1173 of 1175 strings) (Polish)
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/

Translated using Weblate

Currently translated at 74.1% (871 of 1175 strings) (Russian)
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ru/

Translated using Weblate

Currently translated at 74.1% (871 of 1175 strings) (Russian)
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ru/

Translated using Weblate

Currently translated at 85.7% (1007 of 1175 strings) (Japanese)
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ja/

Co-authored-by: DanisimoR <danisimogg22@gmail.com>
Co-authored-by: Gentor <gentor92@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: karigane <169052233+karigane-cha@users.noreply.github.com>
Co-authored-by: skajmer <skajmer@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translation: feishin/Translation
2026-03-11 21:10:02 +01:00
jeffvli 60776b5f02 fix missing list query invalidation on playlist create/delete 2026-03-11 02:04:51 -07:00
jeffvli 8699b1ffea add sort to artist favorite songs page (#1691) 2026-03-11 01:48:39 -07:00
riccardo 16ac536f93 feat(lyrics): simpmusic lyrics provider (#1820)
* feat(lyrics): simpmusic lyrics provider
2026-03-11 01:04:55 -07:00
jeffvli f51d3d5711 prevent no lyrics message fade out on fullscreen player (#1821) 2026-03-11 01:00:32 -07:00
jeffvli 17a4a14a4e fix isValid condition on REMOTE_URL for server lock (#1822) 2026-03-10 20:02:37 -07:00
jeffvli ecda918b46 update to v1.8.0 2026-03-09 21:53:26 -07:00
Tarulia 93834788b5 use electron-builder's static AppImage runtime (#1816)
electron-builder added compatibility with the AppImage Type2 runtime
(i.e. FUSE-less runtime). However, this is - for now anyway - an opt-in
feature, which this commit enables.
2026-03-09 21:52:48 -07:00
jeffvli 66e7b44d75 add client-side sort to artist favorite songs (#1691) 2026-03-09 20:58:02 -07:00
jeffvli 8825fc1e84 unhide image on error on libraryheader 2026-03-09 20:49:02 -07:00
jeffvli ac0cc19c04 prefer artistInfo artist image 2026-03-09 20:49:02 -07:00
jeffvli de29465b1f enable skeleton animations by default 2026-03-09 20:49:02 -07:00
jeffvli 31a201ca32 rewrite Image component
- remove react-image dependency
- use manual blob load
- abort load when exiting viewport
2026-03-09 20:49:02 -07:00
Hosted Weblate 3644ea2969 Update translation files
Updated by "Remove blank strings" hook in Weblate.

Translated using Weblate

Currently translated at 100.0% (1175 of 1175 strings) (Czech)
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Translated using Weblate

Currently translated at 100.0% (1175 of 1175 strings) (Spanish)
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/

Translated using Weblate

Currently translated at 98.2% (1155 of 1175 strings) (French)
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/

Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: KosmoMoustache <kosmomoustache@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translation: feishin/Translation
2026-03-10 03:08:35 +01:00
ashe e46c61e026 Remote URL hardcoding compatibility (#1810)
* Remote URL compatibility
---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2026-03-09 19:08:28 -07:00
Oliver Tzeng 3873218e94 fix translated zh-Hant and zh-Hans (#1807) 2026-03-09 17:08:07 -07:00
Jeff b4a61cbd6e use ad-hoc code signing for macOS build, disable hardenedRuntime (#1815) 2026-03-09 17:05:12 -07:00
jeffvli accc6e53f0 bump electron-builder for pnpm v10.3 ( #1796) 2026-03-09 12:54:32 -07:00
jeffvli adf48decc4 run PR publish on electron-builder config changes 2026-03-09 09:52:42 -07:00
jeffvli 49ff928414 refactor artist header to better handle artist image from info endpoint 2026-03-09 01:54:04 -07:00
Hosted Weblate 71efd4a6d7 Translated using Weblate
Currently translated at 97.8% (1149 of 1174 strings) (Chinese (Simplified Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/

Co-authored-by: 無情天 <kofzhanganguo@126.com>
2026-03-09 09:38:55 +01:00
jeffvli 01e4907295 update to v1.7.0 2026-03-09 01:36:19 -07:00
jeffvli 6a47e99680 add manual update notice for macOS, disable autoinstall (#1725) 2026-03-09 01:31:33 -07:00
jeffvli 078d8068e0 fix file path replacement to handle both add/replace (#1749) 2026-03-09 00:55:13 -07:00
jeffvli 58ae76ce2a use album order on artist page for queue add (#1754) 2026-03-09 00:47:55 -07:00
jeffvli bc6cd5b014 refactor grid columns internally into album artist sections to handle null cases 2026-03-08 22:15:54 -07:00
jeffvli 17deac8d65 decouple AlbumArtistInfo from AlbumArtistDetail (#1809) 2026-03-08 22:06:18 -07:00
jeffvli 7dbf8dd9fe add conditional render to queue/lyric state on mobile player (#1797) 2026-03-08 21:06:22 -07:00
Hosted Weblate 27ab9f89c9 Translated using Weblate
Currently translated at 100.0% (1174 of 1174 strings) (Spanish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/

Translated using Weblate

Currently translated at 100.0% (1174 of 1174 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: Fordas <fordas15@gmail.com>
2026-03-08 13:09:50 +00:00
jeffvli 602808c742 directly replace playlist rules on save and replace 2026-03-07 21:18:55 -08:00
jeffvli c1051956ad add size to album detail header 2026-03-07 20:25:04 -08:00
York 6d2c084355 fix: sleep timer end-of-song mode (#1706) 2026-03-07 20:23:19 -08:00
Hosted Weblate 6e3f0f2253 Translated using Weblate
Currently translated at 100.0% (1174 of 1174 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Co-authored-by: York <goog10216922@gmail.com>
2026-03-07 10:09:54 +01:00
jeffvli d3d3688d60 add Symbola font for explicit status indicator 2026-03-07 00:50:00 -08:00
Kendall Garner 49c28299af remove package.lock, make lint happy 2026-03-06 21:04:51 -08:00
Kendall Garner 0bb6fea3db don't assume server exists in enable either 2026-03-06 20:59:13 -08:00
Kendall Garner 7027084394 fix(autosave): server isn't guaranteed to exist 2026-03-06 20:52:41 -08:00
Kendall Garner 7c4cbaad9a feat(player): add server-side autosave capability 2026-03-06 20:01:35 -08:00
jeffvli e603048a80 add settings override with env variables 2026-03-06 19:32:38 -08:00
jeffvli 9e08157517 add has_rating filter for Navidrome song list 2026-03-06 18:03:14 -08:00
Hosted Weblate d4c2b1e914 Translated using Weblate
Currently translated at 84.1% (985 of 1170 strings) (Japanese)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ja/

Co-authored-by: UnknownExplorer13 <kyedylanfenton@gmail.com>
2026-03-06 19:09:49 +00:00
Hosted Weblate 65dd67ec96 Translated using Weblate
Currently translated at 100.0% (1170 of 1170 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Co-authored-by: linger <linger0517@gmail.com>
2026-03-06 12:09:50 +00:00
Hosted Weblate 76259309af Translated using Weblate
Currently translated at 74.7% (875 of 1170 strings) (Finnish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fi/

Co-authored-by: jonoafi <joona@jonottaa.com>
2026-03-06 00:09:53 +01:00
Hosted Weblate 3e5a9db279 Translated using Weblate
Currently translated at 100.0% (1170 of 1170 strings) (Spanish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/

Translated using Weblate

Currently translated at 100.0% (1170 of 1170 strings) (Polish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/

Translated using Weblate

Currently translated at 100.0% (1170 of 1170 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: skajmer <skajmer@protonmail.com>
2026-03-05 15:09:54 +00:00
Hosted Weblate c155bbdb37 Translated using Weblate
Currently translated at 100.0% (1169 of 1169 strings) (Indonesian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/id/

Co-authored-by: Arif Budiman <arifpedia@gmail.com>
2026-03-05 07:39:54 +01:00
jeffvli ecbc03f052 add dummy onErrorPause handler for radio player 2026-03-04 22:39:46 -08:00
jeffvli 6ef9efc8bf add 10s retry for playback on network err (#1779) 2026-03-04 22:32:33 -08:00
jeffvli 513e9e822d attempt to fix viewport size for mobile browsers (#1787) 2026-03-04 21:51:04 -08:00
jeffvli dbc215c44f add toggle visibility behavior to tray icon (#1793) 2026-03-04 21:38:11 -08:00
jeffvli 43c5cf4275 fix primary color css variable to use new shade value 2026-03-04 21:26:47 -08:00
Benjamin 41f1f376bc feat: customizable item layout on fullscreen player (#1769)
* change container display to release type, readd badge styling to improve contrast

* make everything customizable
2026-03-04 21:23:14 -08:00
jeffvli cad7fef454 add type assertion for primaryShade 2026-03-04 21:01:56 -08:00
jeffvli 93791aea15 add setting to override theme primary shade (#1791) 2026-03-04 20:58:30 -08:00
Hosted Weblate 884dcde289 Translated using Weblate
Currently translated at 67.2% (782 of 1163 strings) (Finnish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fi/

Co-authored-by: Lauri Koo <late91@gmail.com>
2026-03-05 05:09:50 +01:00
Hosted Weblate 21f993a951 Translated using Weblate
Currently translated at 100.0% (1163 of 1163 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Co-authored-by: linger <linger0517@gmail.com>
2026-03-04 05:09:49 +00:00
Hosted Weblate 4784228831 Translated using Weblate
Currently translated at 100.0% (1163 of 1163 strings) (Polish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/

Co-authored-by: skajmer <skajmer@protonmail.com>
2026-03-03 21:09:48 +00:00
Hosted Weblate c6e3e0c07e Translated using Weblate
Currently translated at 100.0% (1163 of 1163 strings) (Spanish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/

Translated using Weblate

Currently translated at 100.0% (1163 of 1163 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: Fordas <fordas15@gmail.com>
2026-03-03 15:09:50 +00:00
Kendall Garner 30685e7252 fix(subsonic): do favorite filter processing on artist favorite 2026-03-03 06:54:59 -08:00
Kendall Garner 12a398a65c fix(server selector): better handling for large server/folder list 2026-03-02 22:30:14 -08:00
Kendall Garner 71360e37de fix(favorites): filter favorite artists on favorite page for Jellyfin 2026-03-02 21:02:24 -08:00
Kendall Garner f99b8ea9ee feat(queue): add go to current button 2026-03-02 20:30:35 -08:00
Kendall Garner 2854b928f6 fix(player): handle items in the queue moved to next before current index 2026-03-02 20:05:01 -08:00
Hosted Weblate 14e1f1d003 Translated using Weblate
Currently translated at 73.7% (857 of 1162 strings) (Russian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ru/

Translated using Weblate

Currently translated at 100.0% (1162 of 1162 strings) (Tamil)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ta/

Co-authored-by: Платон Петров <pplaton6@gmail.com>
Co-authored-by: தமிழ்நேரம் <tamilneram247@gmail.com>
2026-03-01 23:10:04 +01:00
Hosted Weblate 85c490bd06 Translated using Weblate
Currently translated at 100.0% (1162 of 1162 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Co-authored-by: York <goog10216922@gmail.com>
2026-03-01 08:09:52 +01:00
Hosted Weblate 96d78f8bda Translated using Weblate
Currently translated at 44.6% (519 of 1162 strings) (Norwegian Bokmål)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/nb_NO/

Co-authored-by: klodrik <klodrik@zoominn.no>
2026-02-28 14:09:50 +00:00
jeffvli 5f65aebe63 convert nd album rating filter to yes/no (#1775) 2026-02-27 19:30:33 -08:00
Hosted Weblate cd96da9cd5 Translated using Weblate
Currently translated at 100.0% (1162 of 1162 strings) (Polish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/

Translated using Weblate

Currently translated at 100.0% (1162 of 1162 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Translated using Weblate

Currently translated at 100.0% (1162 of 1162 strings) (Spanish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/

Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: skajmer <skajmer@protonmail.com>
2026-02-27 23:09:53 +00:00
Hosted Weblate 674b66b682 Translated using Weblate
Currently translated at 84.6% (984 of 1162 strings) (Japanese)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ja/

Co-authored-by: karigane <169052233+karigane-cha@users.noreply.github.com>
2026-02-27 15:09:56 +01:00
jeffvli 934851456b prevent click propagation on detached queue button (#1762) 2026-02-27 00:53:09 -08:00
jeffvli afca396654 attempt to fix mpv autoNext behavior (#1768) 2026-02-27 00:39:27 -08:00
jeffvli b62f62671d fix table config drag and drop interaction on bottom edge 2026-02-26 20:59:28 -08:00
Norman eb8913479b Add album grouping column (#1722)
* Add album grouping column

---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2026-02-26 20:34:55 -08:00
Alexander Welsing 4918b412b2 Album radio (#1759)
* added album radio feature

---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2026-02-26 20:33:00 -08:00
jeffvli a78f5803a5 fix mediasession play hotkey on after pause on web (#1758)
- chrome (and other browsers) determine that the audio element is inactive if the volume is set to 0 when paused, leading to the resume (play) mediasession event to no longer be available
2026-02-26 01:11:24 -08:00
dependabot[bot] 0d1799cbf7 Bump the npm_and_yarn group across 1 directory with 6 updates (#1763)
Bumps the npm_and_yarn group with 6 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [axios](https://github.com/axios/axios) | `1.13.2` | `1.13.5` |
| [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser) | `5.3.3` | `5.3.6` |
| [lodash](https://github.com/lodash/lodash) | `4.17.21` | `4.17.23` |
| [qs](https://github.com/ljharb/qs) | `6.14.1` | `6.14.2` |
| [minimatch](https://github.com/isaacs/minimatch) | `3.1.2` | `3.1.5` |
| [tar](https://github.com/isaacs/node-tar) | `6.2.1` | `7.5.9` |



Updates `axios` from 1.13.2 to 1.13.5
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.13.2...v1.13.5)

Updates `fast-xml-parser` from 5.3.3 to 5.3.6
- [Release notes](https://github.com/NaturalIntelligence/fast-xml-parser/releases)
- [Changelog](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/NaturalIntelligence/fast-xml-parser/compare/v5.3.3...v5.3.6)

Updates `lodash` from 4.17.21 to 4.17.23
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)

Updates `qs` from 6.14.1 to 6.14.2
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.14.1...v6.14.2)

Updates `minimatch` from 3.1.2 to 3.1.5
- [Changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md)
- [Commits](https://github.com/isaacs/minimatch/compare/v3.1.2...v3.1.5)

Updates `tar` from 6.2.1 to 7.5.9
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-tar/compare/v6.2.1...v7.5.9)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.13.5
  dependency-type: direct:production
  dependency-group: npm_and_yarn
- dependency-name: fast-xml-parser
  dependency-version: 5.3.6
  dependency-type: direct:production
  dependency-group: npm_and_yarn
- dependency-name: lodash
  dependency-version: 4.17.23
  dependency-type: direct:production
  dependency-group: npm_and_yarn
- dependency-name: qs
  dependency-version: 6.14.2
  dependency-type: direct:production
  dependency-group: npm_and_yarn
- dependency-name: minimatch
  dependency-version: 3.1.5
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: tar
  dependency-version: 7.5.9
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-25 22:22:53 -08:00
jeffvli 438db40d0e remove audio prefix from subsonic contentType property 2026-02-25 22:22:13 -08:00
dependabot[bot] aca5e1fe87 Bump react-router in the npm_and_yarn group across 1 directory (#1534)
Bumps the npm_and_yarn group with 1 update in the / directory: [react-router](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router).


Updates `react-router` from 7.11.0 to 7.12.0
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router@7.12.0/packages/react-router)

---
updated-dependencies:
- dependency-name: react-router
  dependency-version: 7.12.0
  dependency-type: direct:production
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-25 22:06:26 -08:00
Tarulia 8aaf24ff87 Redo Icons in SVG (#1731)
Also includes exports from SVG for all relevant files:
- `assets/icons/` in 16-1024px size PNGs
- `assets/icons/icon.ico` using same sizes as the old one
- `assets/icons/` IconTemplate
- `media/` black and white logo-only variants
- `resource/icon.png`
2026-02-25 21:35:13 -08:00
Hosted Weblate 75dbea1ab7 Translated using Weblate
Currently translated at 100.0% (1160 of 1160 strings) (Catalan)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ca/

Co-authored-by: HUMET <ressaguer@proton.me>
2026-02-25 16:09:51 +00:00
jeffvli 61616dd2b9 move remote hook to global scope (#1752) 2026-02-24 00:45:43 -08:00
jeffvli ceef7964af add originalyear to smart playlist filters (#1746) 2026-02-24 00:34:07 -08:00
jeffvli ec12e89653 fix missing blur config from expanded album image 2026-02-23 23:48:56 -08:00
Hosted Weblate 386ca41a5d Translated using Weblate
Currently translated at 99.3% (1152 of 1160 strings) (French)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/

Co-authored-by: KosmoMoustache <kosmomoustache@users.noreply.hosted.weblate.org>
2026-02-24 01:09:49 +00:00
Hosted Weblate a8fd5a4f46 Translated using Weblate
Currently translated at 100.0% (1160 of 1160 strings) (Dutch)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/nl/

Co-authored-by: bokse <weblate@bokse.nl>
2026-02-23 16:09:54 +01:00
Hosted Weblate 4590383a97 Translated using Weblate
Currently translated at 83.1% (964 of 1160 strings) (Japanese)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ja/

Translated using Weblate

Currently translated at 100.0% (1160 of 1160 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: karigane <169052233+karigane-cha@users.noreply.github.com>
2026-02-22 14:09:50 +01:00
Hosted Weblate 405208cf92 Translated using Weblate
Currently translated at 97.8% (1135 of 1160 strings) (Chinese (Simplified Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/

Co-authored-by: 無情天 <kofzhanganguo@126.com>
2026-02-22 00:09:48 +01:00
Hosted Weblate f19c37276a Translated using Weblate
Currently translated at 100.0% (1160 of 1160 strings) (Polish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/

Co-authored-by: skajmer <skajmer@protonmail.com>
2026-02-21 15:09:49 +01:00
Hosted Weblate 3269034bfb Translated using Weblate
Currently translated at 88.9% (1032 of 1160 strings) (German)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/de/

Translated using Weblate

Currently translated at 99.1% (1150 of 1160 strings) (French)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/

Translated using Weblate

Currently translated at 42.4% (492 of 1160 strings) (Norwegian Bokmål)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/nb_NO/

Co-authored-by: KosmoMoustache <kosmomoustache@users.noreply.hosted.weblate.org>
Co-authored-by: PhillyMay <mein.alias@outlook.com>
Co-authored-by: klodrik <klodrik@zoominn.no>
2026-02-20 22:09:52 +00:00
Lyosha e5f99af43b Fix image resolution setting value checking (#1741) 2026-02-20 13:10:26 -08:00
Hosted Weblate 2866ca9537 Translated using Weblate
Currently translated at 100.0% (1160 of 1160 strings) (Spanish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/

Translated using Weblate

Currently translated at 40.6% (471 of 1160 strings) (Norwegian Bokmål)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/nb_NO/

Translated using Weblate

Currently translated at 99.1% (1150 of 1160 strings) (French)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/

Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: KosmoMoustache <kosmomoustache@users.noreply.hosted.weblate.org>
Co-authored-by: klodrik <klodrik@zoominn.no>
2026-02-20 17:09:51 +00:00
Kendall Garner a377eae2f4 fix(build): do not add hash to favicon and assets 2026-02-20 08:48:36 -08:00
Hosted Weblate dbd8ce2380 Translated using Weblate
Currently translated at 100.0% (1160 of 1160 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Co-authored-by: linger <linger0517@gmail.com>
2026-02-20 12:09:53 +01:00
Kendall Garner 0741351318 fix(share): only copy to clipboard if available and secure 2026-02-19 19:55:10 -08:00
Hosted Weblate ab9e02adfc Translated using Weblate
Currently translated at 39.6% (459 of 1158 strings) (Norwegian Bokmål)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/nb_NO/

Co-authored-by: klodrik <klodrik@zoominn.no>
2026-02-19 19:09:47 +01:00
Kendall Garner 12ff690619 fix(window): recreate window on macos when closed but not quit 2026-02-18 21:50:44 -08:00
jeffvli 5039012fcb catch errors on desktop scrobble notification failure (#1723) 2026-02-18 20:54:31 -08:00
jeffvli 75af57a7b3 use correct player seek event for mpris updater (#1740) 2026-02-18 20:37:18 -08:00
jeffvli 9027eee99f fix lyrics type in player sidebar 2026-02-18 20:28:14 -08:00
jeffvli 50fe373f1e simplify lyrics implementation
- removes complex lyrics fetch and override logic, and instead uses a single query as a source of truth for the lyrics
- properly handles loading state, invalidation, and refetch
2026-02-18 20:25:52 -08:00
Alexander Welsing 2c546867a8 change "Fields" query parameter to array (#1733)
* change "Fields" query parameter to array

* platformToTarget.key() -> to array
2026-02-17 18:45:31 -08:00
Kendall Garner 9dad934a40 transcode player bar waveform 2026-02-17 14:30:26 -08:00
Hosted Weblate 34dbb4c794 Translated using Weblate
Currently translated at 77.2% (894 of 1158 strings) (Italian)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/it/

Co-authored-by: Giuseppe Filomeno <giusefilo@gmail.com>
2026-02-17 19:10:04 +00:00
Hosted Weblate 7472af66ef Translated using Weblate
Currently translated at 99.3% (1150 of 1158 strings) (French)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/

Co-authored-by: KosmoMoustache <kosmomoustache@users.noreply.hosted.weblate.org>
2026-02-17 00:09:52 +01:00
Adam f293fb287d Add hook script to update and publish appstream metainfo on electron build (#1719) 2026-02-16 12:54:11 -08:00
libussa 7656e84c20 fix stale SERVER_URL when changing env var in Docker (#1714)
settings.js (which injects SERVER_URL into the browser) was served
without Cache-Control headers, causing Cloudflare and other reverse
proxies to cache the old value indefinitely. Additionally, when
SERVER_LOCK is enabled, the persisted server URL in localStorage was
never compared against the current window.SERVER_URL, so same-browser
sessions kept using the old server even after settings.js was updated.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 12:44:29 -08:00
Kendall Garner c524e8d3b7 fix(left-controls): use joined artsts instead of array by artist id 2026-02-16 07:52:36 -08:00
Hosted Weblate 7f13ce491b Translated using Weblate
Currently translated at 92.0% (1066 of 1158 strings) (French)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/

Co-authored-by: Nicolas DERIVE <kalon33@ubuntu.com>
2026-02-16 15:09:54 +00:00
Hosted Weblate 6c16aabce0 Translated using Weblate
Currently translated at 88.3% (1023 of 1158 strings) (German)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/de/

Co-authored-by: PhillyMay <mein.alias@outlook.com>
2026-02-15 13:10:11 +01:00
Hosted Weblate f5240b1766 Translated using Weblate
Currently translated at 78.7% (912 of 1158 strings) (German)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/de/

Co-authored-by: PhillyMay <mein.alias@outlook.com>
2026-02-15 04:09:48 +01:00
Hosted Weblate cc5a95d725 Translated using Weblate
Currently translated at 100.0% (1158 of 1158 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Translated using Weblate

Currently translated at 100.0% (1158 of 1158 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: York <goog10216922@gmail.com>
2026-02-14 20:09:53 +01:00
Hosted Weblate 8ba63988d8 Translated using Weblate
Currently translated at 97.8% (1133 of 1158 strings) (Chinese (Simplified Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/

Translated using Weblate

Currently translated at 100.0% (1158 of 1158 strings) (Spanish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/

Translated using Weblate

Currently translated at 100.0% (1158 of 1158 strings) (Polish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/

Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: skajmer <skajmer@protonmail.com>
Co-authored-by: 無情天 <kofzhanganguo@126.com>
2026-02-14 15:09:49 +01:00
jeffvli 289f307a52 update to v1.6.0 2026-02-13 23:08:33 -08:00
jeffvli 91ac36c835 fix Subsonic root folder condition (#1686)
- some older subsonic servers used numeric ids which causes the rootFolderId regex to fail which resulted in the getFolder endpoint to always attempt to fetch the root
2026-02-13 23:03:24 -08:00
jeffvli 503e4b2bac fix list refresh not working on discography/genre pages 2026-02-13 21:38:12 -08:00
jeffvli c39ddc3b45 refactor PlaylistQueryEditor to new file 2026-02-13 21:05:37 -08:00
jeffvli 1163c4ad5e add JSON editor for playlist query builder (#1711) 2026-02-13 21:05:34 -08:00
jeffvli e497734c07 allow all rule groups to be empty (#1710) 2026-02-13 20:26:58 -08:00
Kendall Garner 77fef33cbf improve album artist favorite performance and search (#1709)
* improve album artist favorite performance and search

* adjust top songs / favorite songs sections

---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
2026-02-13 20:13:28 -08:00
Hosted Weblate 81189db1e1 Translated using Weblate
Currently translated at 100.0% (1156 of 1156 strings) (Catalan)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ca/

Co-authored-by: HUMET <ressaguer@proton.me>
2026-02-14 03:46:02 +00:00
Maevi 054a3d005e Listen on IPv6 by default in docker image (#1707) 2026-02-13 19:45:55 -08:00
jeffvli dfbff64430 fix duplicate server add when SERVER_LOCK is configured (#1623) 2026-02-13 19:42:36 -08:00
jeffvli 2b4046a82e fix double click propagation on the table expand button 2026-02-13 17:49:49 -08:00
jeffvli 9eb879fc37 hide favorite / rating from playlist album view items 2026-02-13 17:39:35 -08:00
jeffvli 9e63ee2735 add loading spinners for some lazy loaded content 2026-02-13 15:04:54 -08:00
jeffvli 9950e51d45 remove lazy loading from context menu initialization 2026-02-13 15:01:18 -08:00
jeffvli 70fdd4bdc3 refactor album expansion to global scope 2026-02-13 14:59:15 -08:00
jeffvli e855f7dd01 remove invalid detail view type for song list config 2026-02-13 12:19:14 -08:00
jeffvli 123842dfda attempt to optimize the tagList query
- this query in some cases can return a very large amount of data, depending on the size of the user's library
- increasing the cacheTime reduces the frequency of fetches while disabling structuralSharing reduces the need for react-query to do a deep equality comparison for the cache
2026-02-13 11:53:42 -08:00
Hosted Weblate 1338513f82 Translated using Weblate
Currently translated at 100.0% (1156 of 1156 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Co-authored-by: Fjuro <fjuro@alius.cz>
2026-02-13 19:09:45 +01:00
Hosted Weblate c9c88dd82d Translated using Weblate
Currently translated at 100.0% (1156 of 1156 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Translated using Weblate

Currently translated at 100.0% (1156 of 1156 strings) (Spanish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/

Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: York <goog10216922@gmail.com>
2026-02-13 14:09:48 +01:00
York 02a5395453 fix: regenerate macOS icon (.icns) to fix glitched small icons (#1705) 2026-02-13 00:15:12 -08:00
jeffvli 7ba2f6b827 fix removed filter functions 2026-02-12 22:04:08 -08:00
jeffvli f1b5dc8ef3 add additional client-side filters to playlist songs 2026-02-12 22:00:07 -08:00
Kendall Garner 78875572e9 add explicit blurring to left expanded image and full screen (#1701)
* add explicit blurring to left expanded image and full screen
2026-02-12 18:49:57 -08:00
jeffvli f487560ec5 fix vite web build again for hashed assets and PWA cache clear 2026-02-12 18:21:27 -08:00
jeffvli f752090c78 Revert "attempt fix for web/docker cache busting on new release"
This reverts commit 91e7c7434c.
2026-02-12 18:17:49 -08:00
jeffvli 96f5b2b82a Revert "fix vite web build to work with subpath"
This reverts commit 1a9f36ce9e.
2026-02-12 18:17:44 -08:00
jeffvli 80292ae579 fix alpha autoupdater logic to use correct config for latest 2026-02-12 18:17:08 -08:00
Hosted Weblate 1d156ac506 Translated using Weblate
Currently translated at 100.0% (1154 of 1154 strings) (Czech)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/

Co-authored-by: Fjuro <fjuro@alius.cz>
2026-02-13 00:09:58 +00:00
jeffvli dc5586f859 adjuat audioDevice description to remove web player disclaimer 2026-02-12 11:18:55 -08:00
jeffvli 1a9f36ce9e fix vite web build to work with subpath 2026-02-12 11:18:55 -08:00
York 203c8a6588 fix: restore original macOS squircle icon and regenerate icns properly (#1703) 2026-02-12 10:03:23 -08:00
Hosted Weblate 2e6cf8d869 Translated using Weblate
Currently translated at 100.0% (1154 of 1154 strings) (Spanish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/

Co-authored-by: Fordas <fordas15@gmail.com>
2026-02-12 17:09:48 +00:00
Hosted Weblate b1827dd352 Translated using Weblate
Currently translated at 100.0% (1154 of 1154 strings) (Polish)
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/

Translated using Weblate

Currently translated at 100.0% (1154 of 1154 strings) (Chinese (Traditional Han script))
Translation: feishin/Translation
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/

Co-authored-by: York <goog10216922@gmail.com>
Co-authored-by: skajmer <skajmer@protonmail.com>
2026-02-12 11:09:50 +01:00
jeffvli 0d2dddddbc fix invalid comparison on detail rating column hide condition 2026-02-12 01:40:01 -08:00
jeffvli 1d8e1957ba handle image drag from item detail list 2026-02-12 01:37:59 -08:00
jeffvli dc957cb3cc hide detail rating column on zero value 2026-02-12 00:57:24 -08:00
jeffvli c314fa0bf3 properly handle context menu in playlist album view 2026-02-12 00:54:45 -08:00
jeffvli c5ebfac647 fix playlist grid view itemType to PLAYLIST_SONG to support remove from playlist 2026-02-12 00:28:39 -08:00
jeffvli 4adea11a93 support select all hotkey in detail list view 2026-02-12 00:13:32 -08:00
Jeff e6f49b9f1f Add album view for playlists (#1700)
* update client side song ordering to include album order

* add compact styling to LibraryHeader

* move search button to top right of LibraryHeader
2026-02-11 21:48:25 -08:00
York 9cde569c7d Add option to show playing icon in Discord RPC (#1699)
* feat: add option to show playing/paused icon in Discord RPC
2026-02-11 21:14:58 -08:00
jeffvli 91e7c7434c attempt fix for web/docker cache busting on new release
- remove static asset filenames
- add cache clear config to PWA
- move PWA to base dir instead of assets
2026-02-11 20:52:28 -08:00
Yoshua Wakeham ffef5dfdee fix: actually show Jellyfin recently played songs carousel (#1697) 2026-02-11 20:35:23 -08:00
Kendall Garner 409dd69fcb reduce explicit indicator spacing slightly 2026-02-11 19:34:20 -08:00
Hosted Weblate 064cf5103a Translated using Weblate
Currently translated at 100.0% (1152 of 1152 strings)

Co-authored-by: Ondo <SparkyOndo@proton.me>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ca/
Translation: feishin/Translation
2026-02-11 23:09:47 +01:00
Hosted Weblate 7e3a613a93 Translated using Weblate
Currently translated at 100.0% (1152 of 1152 strings)

Translated using Weblate

Currently translated at 100.0% (1152 of 1152 strings)

Translated using Weblate

Currently translated at 99.9% (1151 of 1152 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: skajmer <skajmer@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/
Translation: feishin/Translation
2026-02-11 16:09:52 +01:00
Hosted Weblate e7c49f6d67 Translated using Weblate
Currently translated at 36.6% (422 of 1152 strings)

Translated using Weblate

Currently translated at 33.5% (387 of 1152 strings)

Translated using Weblate

Currently translated at 100.0% (1152 of 1152 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 96.3% (1101 of 1143 strings)

Translated using Weblate (Ukrainian)

Currently translated at 32.1% (368 of 1143 strings)

Translated using Weblate (French)

Currently translated at 91.3% (1044 of 1143 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (1143 of 1143 strings)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 100.0% (1143 of 1143 strings)

Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Raphael <raphael.margueron@gmail.com>
Co-authored-by: York <goog10216922@gmail.com>
Co-authored-by: Yurii <04_hours.lambing@icloud.com>
Co-authored-by: linger <linger0517@gmail.com>
Co-authored-by: 無情天 <kofzhanganguo@126.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/uk/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/
Translation: feishin/Translation
2026-02-11 11:02:22 +01:00
626 changed files with 53771 additions and 48344 deletions
+1 -1
View File
@@ -6,7 +6,7 @@ body:
- type: checkboxes
id: check-duplicate
attributes:
label: I have already checked through the existing bug reports and found no duplicates
label: I have already checked through the existing (both open AND closed) bug reports and found no duplicates
options:
- label: 'Yes'
required: true
+10 -14
View File
@@ -40,12 +40,10 @@ jobs:
version: ${{ steps.version.outputs.version }}
steps:
- name: Checkout git repo
uses: actions/checkout@v1
uses: actions/checkout@v6
- name: Install Node and PNPM
uses: pnpm/action-setup@v4.1.0
with:
version: 9
uses: pnpm/action-setup@v4
- name: Install dependencies
run: pnpm install
@@ -121,16 +119,14 @@ jobs:
strategy:
matrix:
os: [windows-latest, macos-latest, ubuntu-latest]
os: [windows-latest, macos-26, ubuntu-latest]
steps:
- name: Checkout git repo
uses: actions/checkout@v1
uses: actions/checkout@v6
- name: Install Node and PNPM
uses: pnpm/action-setup@v4.1.0
with:
version: 9
uses: pnpm/action-setup@v4
- name: Install dependencies
run: pnpm install
@@ -146,7 +142,7 @@ jobs:
- name: Build and Publish to R2 (Windows)
if: matrix.os == 'windows-latest'
uses: nick-invision/retry@v2.8.2
uses: nick-invision/retry@v3.0.2
with:
timeout_minutes: 30
max_attempts: 3
@@ -156,8 +152,8 @@ jobs:
on_retry_command: pnpm cache delete
- name: Build and Publish to R2 (macOS)
if: matrix.os == 'macos-latest'
uses: nick-invision/retry@v2.8.2
if: matrix.os == 'macos-26'
uses: nick-invision/retry@v3.0.2
with:
timeout_minutes: 30
max_attempts: 3
@@ -168,7 +164,7 @@ jobs:
- name: Build and Publish to R2 (Linux)
if: matrix.os == 'ubuntu-latest'
uses: nick-invision/retry@v2.8.2
uses: nick-invision/retry@v3.0.2
with:
timeout_minutes: 30
max_attempts: 3
@@ -179,7 +175,7 @@ jobs:
- name: Build and Publish to R2 (Linux ARM64)
if: matrix.os == 'ubuntu-latest'
uses: nick-invision/retry@v2.8.2
uses: nick-invision/retry@v3.0.2
with:
timeout_minutes: 30
max_attempts: 3
+12 -16
View File
@@ -15,12 +15,10 @@ jobs:
version: ${{ steps.version.outputs.version }}
steps:
- name: Checkout git repo
uses: actions/checkout@v1
uses: actions/checkout@v6
- name: Install Node and PNPM
uses: pnpm/action-setup@v4.1.0
with:
version: 9
uses: pnpm/action-setup@v4
- name: Install dependencies
run: pnpm install
@@ -115,16 +113,14 @@ jobs:
strategy:
matrix:
os: [windows-latest, macos-latest, ubuntu-latest]
os: [windows-latest, macos-26, ubuntu-latest]
steps:
- name: Checkout git repo
uses: actions/checkout@v1
uses: actions/checkout@v6
- name: Install Node and PNPM
uses: pnpm/action-setup@v4.1.0
with:
version: 9
uses: pnpm/action-setup@v4
- name: Install dependencies
run: pnpm install
@@ -146,7 +142,7 @@ jobs:
if: matrix.os == 'windows-latest'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: nick-invision/retry@v2.8.2
uses: nick-invision/retry@v3.0.2
with:
timeout_minutes: 30
max_attempts: 3
@@ -156,10 +152,10 @@ jobs:
on_retry_command: pnpm cache delete
- name: Build and Publish releases (macOS)
if: matrix.os == 'macos-latest'
if: matrix.os == 'macos-26'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: nick-invision/retry@v2.8.2
uses: nick-invision/retry@v3.0.2
with:
timeout_minutes: 30
max_attempts: 3
@@ -172,7 +168,7 @@ jobs:
if: matrix.os == 'ubuntu-latest'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: nick-invision/retry@v2.8.2
uses: nick-invision/retry@v3.0.2
with:
timeout_minutes: 30
max_attempts: 3
@@ -185,7 +181,7 @@ jobs:
if: matrix.os == 'ubuntu-latest'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: nick-invision/retry@v2.8.2
uses: nick-invision/retry@v3.0.2
with:
timeout_minutes: 30
max_attempts: 3
@@ -199,7 +195,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout git repo
uses: actions/checkout@v1
uses: actions/checkout@v6
- name: Edit release with commits and title
shell: pwsh
@@ -346,7 +342,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout git repo
uses: actions/checkout@v1
uses: actions/checkout@v6
- name: Delete existing prereleases
shell: pwsh
+10 -7
View File
@@ -4,6 +4,11 @@ permissions: write-all
on:
workflow_dispatch:
inputs:
tag:
description: 'Docker image tag (e.g. 1.12.0 or latest)'
required: true
type: string
push:
tags:
- 'v*.*.*'
@@ -20,7 +25,7 @@ jobs:
packages: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Log in to the Container registry
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
with:
@@ -33,11 +38,10 @@ jobs:
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=ref,event=branch
type=ref,event=pr
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=raw,value=${{ inputs.tag }},enable=${{ github.event_name == 'workflow_dispatch' }}
type=semver,pattern={{version}},enable=${{ github.event_name == 'push' }}
type=semver,pattern={{major}}.{{minor}},enable=${{ github.event_name == 'push' }}
type=semver,pattern={{major}},enable=${{ github.event_name == 'push' }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Setup Docker buildx
@@ -51,5 +55,4 @@ jobs:
labels: ${{ steps.meta.outputs.labels }}
platforms: |
linux/amd64
linux/arm/v7
linux/arm64/v8
+1 -1
View File
@@ -15,7 +15,7 @@ jobs:
packages: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Log in to the Container registry
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
with:
+4 -6
View File
@@ -12,12 +12,10 @@ jobs:
steps:
- name: Checkout git repo
uses: actions/checkout@v1
uses: actions/checkout@v6
- name: Install Node and PNPM
uses: pnpm/action-setup@v4.1.0
with:
version: 9
uses: pnpm/action-setup@v4
- name: Install dependencies
run: pnpm install
@@ -25,7 +23,7 @@ jobs:
- name: Build and Publish releases
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: nick-invision/retry@v2.8.2
uses: nick-invision/retry@v3.0.2
with:
timeout_minutes: 30
max_attempts: 3
@@ -37,7 +35,7 @@ jobs:
- name: Build and Publish releases (arm64)
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: nick-invision/retry@v2.8.2
uses: nick-invision/retry@v3.0.2
with:
timeout_minutes: 30
max_attempts: 3
+5 -6
View File
@@ -8,24 +8,23 @@ jobs:
strategy:
matrix:
os: [macos-latest]
os: [macos-26]
steps:
- name: Checkout git repo
uses: actions/checkout@v1
uses: actions/checkout@v6
- name: Install Node and PNPM
uses: pnpm/action-setup@v4.1.0
with:
version: 9
uses: pnpm/action-setup@v4
- name: Install dependencies
run: pnpm install
- name: Build and Publish releases
env:
NODE_OPTIONS: --max-old-space-size=4096
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: nick-invision/retry@v2.8.2
uses: nick-invision/retry@v3.0.2
with:
timeout_minutes: 30
max_attempts: 3
+16 -14
View File
@@ -1,14 +1,17 @@
name: Publish (PR)
on:
workflow_dispatch:
pull_request:
branches:
- development
paths:
- 'src/**'
- 'electron-builder*.yml'
jobs:
wait-for-lint:
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
steps:
- name: Wait for Test workflow to complete
@@ -22,27 +25,26 @@ jobs:
publish:
needs: wait-for-lint
if: always() && (needs.wait-for-lint.result == 'success' || needs.wait-for-lint.result == 'skipped')
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [macos-latest, ubuntu-latest, windows-latest]
os: [macos-26, ubuntu-latest, windows-latest]
steps:
- name: Checkout git repo
uses: actions/checkout@v3
uses: actions/checkout@v6
- name: Install Node and PNPM
uses: pnpm/action-setup@v4.1.0
with:
version: 9
uses: pnpm/action-setup@v4
- name: Install dependencies
run: pnpm install
- name: Build for Windows
if: ${{ matrix.os == 'windows-latest' }}
uses: nick-invision/retry@v2.8.2
uses: nick-invision/retry@v3.0.2
with:
timeout_minutes: 30
max_attempts: 3
@@ -52,7 +54,7 @@ jobs:
- name: Build for Linux
if: ${{ matrix.os == 'ubuntu-latest' }}
uses: nick-invision/retry@v2.8.2
uses: nick-invision/retry@v3.0.2
with:
timeout_minutes: 30
max_attempts: 3
@@ -61,8 +63,8 @@ jobs:
pnpm run package:linux:pr
- name: Build for MacOS
if: ${{ matrix.os == 'macos-latest' }}
uses: nick-invision/retry@v2.8.2
if: ${{ matrix.os == 'macos-26' }}
uses: nick-invision/retry@v3.0.2
with:
timeout_minutes: 30
max_attempts: 3
@@ -82,27 +84,27 @@ jobs:
zip -r dist/linux-binaries.zip dist/*.{AppImage,deb,rpm}
- name: Zip MacOS Binaries
if: ${{ matrix.os == 'macos-latest' }}
if: ${{ matrix.os == 'macos-26' }}
run: |
zip -r dist/macos-binaries.zip dist/*.dmg
- name: Upload Windows Binaries
if: ${{ matrix.os == 'windows-latest' }}
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: windows-binaries
path: dist/windows-binaries.zip
- name: Upload Linux Binaries
if: ${{ matrix.os == 'ubuntu-latest' }}
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: linux-binaries
path: dist/linux-binaries.zip
- name: Upload MacOS Binaries
if: ${{ matrix.os == 'macos-latest' }}
uses: actions/upload-artifact@v4
if: ${{ matrix.os == 'macos-26' }}
uses: actions/upload-artifact@v7
with:
name: macos-binaries
path: dist/macos-binaries.zip
+3 -5
View File
@@ -12,12 +12,10 @@ jobs:
steps:
- name: Checkout git repo
uses: actions/checkout@v1
uses: actions/checkout@v6
- name: Install Node and PNPM
uses: pnpm/action-setup@v4.1.0
with:
version: 9
uses: pnpm/action-setup@v4
- name: Install dependencies
run: pnpm install
@@ -25,7 +23,7 @@ jobs:
- name: Build and Publish releases
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: nick-invision/retry@v2.8.2
uses: nick-invision/retry@v3.0.2
with:
timeout_minutes: 30
max_attempts: 3
+8 -10
View File
@@ -8,16 +8,14 @@ jobs:
strategy:
matrix:
os: [windows-latest, macos-latest, ubuntu-latest]
os: [windows-latest, macos-26, ubuntu-latest]
steps:
- name: Checkout git repo
uses: actions/checkout@v1
uses: actions/checkout@v6
- name: Install Node and PNPM
uses: pnpm/action-setup@v4.1.0
with:
version: 9
uses: pnpm/action-setup@v4
- name: Install dependencies
run: pnpm install
@@ -26,7 +24,7 @@ jobs:
if: matrix.os == 'windows-latest'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: nick-invision/retry@v2.8.2
uses: nick-invision/retry@v3.0.2
with:
timeout_minutes: 30
max_attempts: 3
@@ -36,10 +34,10 @@ jobs:
on_retry_command: pnpm cache delete
- name: Build and Publish releases (macOS)
if: matrix.os == 'macos-latest'
if: matrix.os == 'macos-26'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: nick-invision/retry@v2.8.2
uses: nick-invision/retry@v3.0.2
with:
timeout_minutes: 30
max_attempts: 3
@@ -52,7 +50,7 @@ jobs:
if: matrix.os == 'ubuntu-latest'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: nick-invision/retry@v2.8.2
uses: nick-invision/retry@v3.0.2
with:
timeout_minutes: 30
max_attempts: 3
@@ -65,7 +63,7 @@ jobs:
if: matrix.os == 'ubuntu-latest'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: nick-invision/retry@v2.8.2
uses: nick-invision/retry@v3.0.2
with:
timeout_minutes: 30
max_attempts: 3
+6 -5
View File
@@ -12,7 +12,8 @@ jobs:
pull-requests: write
runs-on: ubuntu-latest
steps:
- uses: dessant/lock-threads@v5
- uses: dessant/lock-threads@v6
with:
process-only: 'issues, prs'
issue-inactive-days: 120
@@ -29,19 +30,19 @@ jobs:
days-before-pr-close: 30
stale-issue-message: >
This issue has been automatically marked as stale because it has not had recent activity. The resources of the Feishin team are limited, and so we are asking for your help.
If this is a **bug** and you can still reproduce this error on the <code>development</code> branch, please reply with all of the information you have about it in order to keep the issue open.
This issue will automatically be closed in the near future if no further activity occurs. Thank you for all your contributions.
stale-pr-message: >
This PR has been automatically marked as stale because it has not had recent activity. The resources of the Feishin team are limited, and so we are asking for your help.
This PR will automatically be closed in the near future if no further activity occurs. Thank you for all your contributions.
stale-issue-label: 'stale'
exempt-issue-labels: 'keep,security'
exempt-issue-labels: 'keep,security,enhancement'
stale-pr-label: 'stale'
exempt-pr-labels: 'keep,security'
+2 -4
View File
@@ -8,12 +8,10 @@ jobs:
steps:
- name: Check out Git repository
uses: actions/checkout@v1
uses: actions/checkout@v6
- name: Install Node.js and PNPM
uses: pnpm/action-setup@v4.1.0
with:
version: 9
uses: pnpm/action-setup@v4
- name: Install dependencies
run: pnpm install
-1
View File
@@ -1,2 +1 @@
legacy-peer-deps=true
only-built-dependencies=electron,esbuild
+6 -8
View File
@@ -1,11 +1,9 @@
# --- Builder stage
FROM node:23-alpine as builder
FROM node:23-alpine AS builder
WORKDIR /app
# Copy package.json first to cache node_modules
COPY package.json pnpm-lock.yaml .
RUN npm install -g pnpm
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml .
RUN pnpm install
@@ -14,13 +12,13 @@ COPY . .
RUN pnpm run build:web
# --- Production stage
FROM nginx:alpine-slim
FROM nginxinc/nginx-unprivileged:alpine-slim
COPY --chown=nginx:nginx --from=builder /app/out/web /usr/share/nginx/html
COPY ./settings.js.template /etc/nginx/templates/settings.js.template
COPY ng.conf.template /etc/nginx/templates/default.conf.template
COPY --chown=nginx:nginx ./settings.js.template /etc/nginx/templates/settings.js.template
COPY --chown=nginx:nginx ng.conf.template /etc/nginx/templates/default.conf.template
ENV SERVER_LOCK=false SERVER_NAME="" SERVER_TYPE="" SERVER_URL=""
ENV SERVER_LOCK=false SERVER_NAME="" SERVER_TYPE="" SERVER_URL="" REMOTE_URL=""
ENV LEGACY_AUTHENTICATION="" ANALYTICS_DISABLED="" PUBLIC_PATH="/"
EXPOSE 9180
+15 -2
View File
@@ -59,7 +59,11 @@ For media keys to work, you will be prompted to allow Feishin to be a Trusted Ac
#### Linux Notes
We provide a small install script to download the latest `.AppImage`, make it executable, and also download the icons required by Desktop Environments. Finally, it generates a `.desktop` file to add Feishin to your Application Launcher.
Feishin is available in [Flathub](https://flathub.org/en/apps/org.jeffvli.feishin).
Alternatively, you can install it as an Appimage.
We provide a small install script to download the latest `.AppImage`, make it executable, and also download the icons required by Desktop Environments.
Finally, it generates a `.desktop` file to add Feishin to your Application Launcher.
Simply run the installer like this:
@@ -114,6 +118,7 @@ services:
- SERVER_LOCK=true # When true AND name/type/url are set, only username/password can be toggled
- SERVER_TYPE=jellyfin # the allowed types are: jellyfin, navidrome, subsonic. These values are case insensitive
- SERVER_URL= # http://address:port or https://address:port
- REMOTE_URL= # http://address or https://address
- LEGACY_AUTHENTICATION=false # When SERVER_LOCK is true, sets the legacy (plaintext) authentication flag for Subsonic/OpenSubsonic servers
- ANALYTICS_DISABLED=true # Set to true to disable Umami analytics tracking
ports:
@@ -134,7 +139,11 @@ services:
4. _Optional_ - To hard code the server url, pass the following environment variables: `SERVER_NAME`, `SERVER_TYPE` (one of `jellyfin` or `navidrome` or `subsonic`), `SERVER_URL`. To prevent users from changing these settings, pass `SERVER_LOCK=true`. This can only be set if all three of the previous values are set. When `SERVER_LOCK=true`, you can also set `LEGACY_AUTHENTICATION=true` or `LEGACY_AUTHENTICATION=false` to configure the legacy authentication flag for the server (only applicable for Subsonic/OpenSubsonic servers).
5. _Optional_ - To disable Umami analytics tracking in the Docker/web version, set the environment variable `ANALYTICS_DISABLED=true`. When enabled, the analytics script will not be loaded and all tracking will be disabled.
5. _Optional_ - If your server uses a separate public-facing URL than what integrating applications use internally to communicate with your server, such as a separate Navidrome `ShareURL`, set `REMOTE_URL` to said public-facing URL.
6. _Optional_ - To disable Umami analytics tracking in the Docker/web version, set the environment variable `ANALYTICS_DISABLED=true`. When enabled, the analytics script will not be loaded and all tracking will be disabled.
7. _Optional_ - App settings (theme, language, sidebar options, etc.) can be overridden with environment variables on first run. The variables use the `FS_` prefix (e.g. `FS_GENERAL_THEME=defaultDark`, `FS_GENERAL_LANGUAGE=de`). See [the settings environment variable documentation](docs/ENV_SETTINGS.md) for the full list.
## FAQ
@@ -160,6 +169,10 @@ Feishin supports any music server that implements a [Navidrome](https://www.navi
- [Qm-Music](https://github.com/chenqimiao/qm-music)
- More (?)
- [Plex](https://www.plex.tv/media-server-downloads)
- [Feishin fork by lux032](https://github.com/lux032/feishin) - Plex is not natively supported. Use the fork by lux032 to use Plex with Feishin.
### I have the issue "The SUID sandbox helper binary was found, but is not configured correctly" on Linux
This happens when you have user (unprivileged) namespaces disabled (`sysctl kernel.unprivileged_userns_clone` returns 0). You can fix this by either enabling unprivileged namespaces, or by making the `chrome-sandbox` Setuid.
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 185 KiB

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 820 B

After

Width:  |  Height:  |  Size: 651 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 301 B

After

Width:  |  Height:  |  Size: 277 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 535 B

After

Width:  |  Height:  |  Size: 447 B

Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 176 KiB

After

Width:  |  Height:  |  Size: 422 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 32 KiB

+1
View File
@@ -8,6 +8,7 @@ services:
- SERVER_LOCK=false # When true AND name/type/url are set, only username/password can be toggled
- SERVER_TYPE=jellyfin # the allowed types are: jellyfin, navidrome, subsonic. These values are case insensitive
- SERVER_URL=http://localhost:8096 # http://address:port or https://address:port
# - REMOTE_URL=http://share.localhost # Used for compatibility with external functionality, such as custom sharing URLs on Navidrome
- LEGACY_AUTHENTICATION=false # When SERVER_LOCK is true, sets the legacyauth flag for server authentication (true or false)
- ANALYTICS_DISABLED=false # Set to true to disable Umami analytics tracking
ports:
+141
View File
@@ -0,0 +1,141 @@
# Environment variables for settings (web / Docker)
These variables override app settings **on first run** when no persisted settings exist. They are injected via `settings.js` (from `settings.js.template`) and only apply to the **web** build.
**Format:** All values are strings; booleans use `true`/`false`, numbers are numeric strings. Leave unset or empty to use the default.
---
## General
| Setting | Default | Env variable | Available values / Description |
|-------------|---------|--------------|--------------------------------|
| `general.accent` | `rgb(53, 116, 252)` | `FS_GENERAL_ACCENT` | CSS `rgb(r, g, b)` string (e.g. `rgb(53, 116, 252)`). Invalid values are ignored. |
| `general.albumBackground` | `false` | `FS_GENERAL_ALBUM_BACKGROUND` | `true` / `false` — Show album background image. |
| `general.albumBackgroundBlur` | `3` | `FS_GENERAL_ALBUM_BACKGROUND_BLUR` | Blur amount for album background (number). |
| `general.artistBackground` | `true` | `FS_GENERAL_ARTIST_BACKGROUND` | `true` / `false` — Show artist background image. |
| `general.artistBackgroundBlur` | `3` | `FS_GENERAL_ARTIST_BACKGROUND_BLUR` | Blur amount for artist background (number). |
| `general.blurExplicitImages` | `false` | `FS_GENERAL_BLUR_EXPLICIT_IMAGES` | `true` / `false` — Blur explicit images. |
| `general.combinedLyricsAndVisualizer` | `false` | `FS_GENERAL_COMBINED_LYRICS_AND_VISUALIZER` | `true` / `false` — Combine lyrics and visualizer panel. |
| `general.enableGridMultiSelect` | `false` | `FS_GENERAL_ENABLE_GRID_MULTI_SELECT` | `true` / `false` — Enable multi-select in grid views. |
| `general.externalLinks` | `true` | `FS_GENERAL_EXTERNAL_LINKS` | `true` / `false` — Show external links in UI. |
| `general.followCurrentSong` | `true` | `FS_GENERAL_FOLLOW_CURRENT_SONG` | `true` / `false` — Follow current song in list. |
| `general.followSystemTheme` | `false` | `FS_GENERAL_FOLLOW_SYSTEM_THEME` | `true` / `false` — Use OS light/dark preference. |
| `general.homeFeature` | `true` | `FS_GENERAL_HOME_FEATURE` | `true` / `false` — Show home featured carousel. |
| `general.homeFeatureStyle` | `single` | `FS_GENERAL_HOME_FEATURE_STYLE` | `multiple` / `single` — Home featured carousel style. |
| `general.language` | `en` | `FS_GENERAL_LANGUAGE` | UI language code (e.g. `en`, `de`, `fr`). |
| `general.theme` | `defaultDark` | `FS_GENERAL_THEME` | One of: `ayuDark`, `ayuLight`, `catppuccinLatte`, `catppuccinMocha`, `defaultDark`, `defaultLight`, `dracula`, `githubDark`, `githubLight`, `glassyDark`, `gruvboxDark`, `gruvboxLight`, `highContrastDark`, `highContrastLight`, `materialDark`, `materialLight`, `monokai`, `nightOwl`, `nord`, `oneDark`, `rosePine`, `rosePineDawn`, `rosePineMoon`, `shadesOfPurple`, `solarizedDark`, `solarizedLight`, `tokyoNight`, `vscodeDarkPlus`, `vscodeLightPlus`. |
| `general.themeDark` | `defaultDark` | `FS_GENERAL_THEME_DARK` | Same as theme (used when system is dark). |
| `general.themeLight` | `defaultLight` | `FS_GENERAL_THEME_LIGHT` | Same as theme (used when system is light). |
| `general.lastfmApiKey` | *(empty)* | `FS_GENERAL_LASTFM_API_KEY` | Last.fm API key. |
| `general.lastFM` | `true` | `FS_GENERAL_LAST_FM` | `true` / `false` — Enable Last.fm. |
| `general.listenBrainz` | `true` | `FS_GENERAL_LISTEN_BRAINZ` | `true` / `false` — ListenBrainz links. |
| `general.musicBrainz` | `true` | `FS_GENERAL_MUSIC_BRAINZ` | `true` / `false` — MusicBrainz links. |
| `general.nativeAspectRatio` | `false` | `FS_GENERAL_NATIVE_ASPECT_RATIO` | `true` / `false` — Use native cover art aspect ratio. |
| `general.pathReplace` | *(empty)* | `FS_GENERAL_PATH_REPLACE` | Path pattern to replace (e.g. server path in Docker). |
| `general.pathReplaceWith` | *(empty)* | `FS_GENERAL_PATH_REPLACE_WITH` | Replacement path. |
| `general.playerbarOpenDrawer` | `false` | `FS_GENERAL_PLAYERBAR_OPEN_DRAWER` | `true` / `false` — Open queue/lyrics as drawer from player bar. |
| `general.primaryShade` | `6` | `FS_GENERAL_PRIMARY_SHADE` | Mantine primary shade 09 (number). |
| `general.qobuz` | `true` | `FS_GENERAL_QOBUZ` | `true` / `false` — Qobuz links. |
| `general.resume` | `true` | `FS_GENERAL_RESUME` | `true` / `false` — Resume playback on load. |
| `general.showLyricsInSidebar` | `true` | `FS_GENERAL_SHOW_LYRICS_IN_SIDEBAR` | `true` / `false` — Show lyrics in sidebar. |
| `general.showRatings` | `true` | `FS_GENERAL_SHOW_RATINGS` | `true` / `false` — Show star ratings. |
| `general.showVisualizerInSidebar` | `true` | `FS_GENERAL_SHOW_VISUALIZER_IN_SIDEBAR` | `true` / `false` — Show visualizer in sidebar. |
| `general.sidebarCollapsedNavigation` | `true` | `FS_GENERAL_SIDEBAR_COLLAPSED_NAVIGATION` | `true` / `false` — Start with collapsed sidebar nav. |
| `general.sidebarCollapseShared` | `false` | `FS_GENERAL_SIDEBAR_COLLAPSE_SHARED` | `true` / `false` — Share sidebar collapse state. |
| `general.sidebarPlaylistFolders` | `true` | `FS_GENERAL_SIDEBAR_PLAYLIST_FOLDERS` | `true` / `false` — Group playlists into folders by name separator. |
| `general.sidebarPlaylistFolderSeparator` | `/` | `FS_GENERAL_SIDEBAR_PLAYLIST_FOLDER_SEPARATOR` | Character or string that separates folder levels in a playlist name. Empty = use default. |
| `general.sidebarPlaylistFolderTreeIndent` | `16` | `FS_GENERAL_SIDEBAR_PLAYLIST_FOLDER_TREE_INDENT` | Pixels each tree level is indented (064). |
| `general.sidebarPlaylistFolderTreeLineColor` | *(empty)* | `FS_GENERAL_SIDEBAR_PLAYLIST_FOLDER_TREE_LINE_COLOR` | CSS color for tree connecting lines. Empty = theme default. |
| `general.sidebarPlaylistFolderView` | `tree` | `FS_GENERAL_SIDEBAR_PLAYLIST_FOLDER_VIEW` | `single` / `tree` / `navigation` — How folders are displayed in the sidebar. |
| `general.sidebarPlaylistList` | `true` | `FS_GENERAL_SIDEBAR_PLAYLIST_LIST` | `true` / `false` — Show playlist list in sidebar. |
| `general.sidebarPlaylistMode` | `expanded` | `FS_GENERAL_SIDEBAR_PLAYLIST_MODE` | `compact` / `expanded` — Sidebar playlist row layout. |
| `general.sidebarPlaylistSorting` | `false` | `FS_GENERAL_SIDEBAR_PLAYLIST_SORTING` | `true` / `false` — Enable playlist sorting in sidebar. |
| `general.sideQueueType` | `sideQueue` | `FS_GENERAL_SIDE_QUEUE_TYPE` | `sideDrawerQueue` / `sideQueue` — Side play queue style. |
| `general.sideQueueLayout` | `horizontal` | `FS_GENERAL_SIDE_QUEUE_LAYOUT` | `horizontal` / `vertical` — Attached side queue layout orientation. |
| `general.useThemeAccentColor` | `false` | `FS_GENERAL_USE_THEME_ACCENT_COLOR` | `true` / `false` — Use themes accent color instead of custom. |
| `general.useThemePrimaryShade` | `true` | `FS_GENERAL_USE_THEME_PRIMARY_SHADE` | `true` / `false` — Use themes primary shade. |
| `general.zoomFactor` | `100` | `FS_GENERAL_ZOOM_FACTOR` | UI zoom percentage (number). |
---
## Playback
| Setting path | Default | Env variable | Available values / Description |
|-------------|---------|--------------|--------------------------------|
| `playback.mediaSession` | `false` | `FS_PLAYBACK_MEDIA_SESSION` | `true` / `false` — Media Session API (e.g. browser/media keys). |
| `playback.webAudio` | `true` | `FS_PLAYBACK_WEB_AUDIO` | `true` / `false` — Use Web Audio for playback. |
| `playback.audioFadeOnStatusChange` | `true` | `FS_PLAYBACK_AUDIO_FADE_ON_STATUS_CHANGE` | `true` / `false` — Fade on play/pause. |
| `playback.preservePitch` | `true` | `FS_PLAYBACK_PRESERVE_PITCH` | `true` / `false` — Preserve pitch when changing speed. |
| `playback.scrobble.enabled` | `true` | `FS_PLAYBACK_SCROBBLE_ENABLED` | `true` / `false` — Enable scrobbling. |
| `playback.scrobble.notify` | `false` | `FS_PLAYBACK_SCROBBLE_NOTIFY` | `true` / `false` — Scrobble notifications. |
| `playback.scrobble.scrobbleAtDuration` | `240` | `FS_PLAYBACK_SCROBBLE_AT_DURATION` | Seconds of playback before scrobble. |
| `playback.scrobble.scrobbleAtPercentage` | `75` | `FS_PLAYBACK_SCROBBLE_AT_PERCENTAGE` | Percentage of track before scrobble. |
| `playback.transcode.enabled` | `false` | `FS_PLAYBACK_TRANSCODE_ENABLED` | `true` / `false` — Enable transcoding. |
| `playback.transcode.format` | *(unset)* | `FS_PLAYBACK_TRANSCODE_FORMAT` | Transcode format string (codec/container), e.g. server-specific value. Empty = use default. |
| `playback.transcode.bitrate` | *(unset)* | `FS_PLAYBACK_TRANSCODE_BITRATE` | Transcode bitrate (number, kbps or as defined by server). |
| `playback.filters` | `[]` | `FS_PLAYBACK_FILTERS` | JSON array of player filters: each object needs `id`, `field`, `operator`, `value`; optional `isEnabled`. Invalid JSON or shape is ignored. |
---
## Discord
| Setting path | Default | Env variable | Available values / Description |
|-------------|---------|--------------|--------------------------------|
| `discord.enabled` | `false` | `FS_DISCORD_ENABLED` | `true` / `false` — Discord rich presence. |
| `discord.clientId` | *(built-in)* | `FS_DISCORD_CLIENT_ID` | Custom Discord application ID. |
| `discord.displayType` | `feishin` | `FS_DISCORD_DISPLAY_TYPE` | `artist` / `feishin` / `song`. |
| `discord.linkType` | `none` | `FS_DISCORD_LINK_TYPE` | `last_fm` / `musicbrainz` / `musicbrainz_last_fm` / `none`. |
| `discord.showAsListening` | `false` | `FS_DISCORD_SHOW_AS_LISTENING` | `true` / `false`. |
| `discord.showPaused` | `true` | `FS_DISCORD_SHOW_PAUSED` | `true` / `false` — Show paused state. |
| `discord.showServerImage` | `false` | `FS_DISCORD_SHOW_SERVER_IMAGE` | `true` / `false`. |
| `discord.showStateIcon` | `true` | `FS_DISCORD_SHOW_STATE_ICON` | `true` / `false`. |
---
## Lyrics
| Setting path | Default | Env variable | Available values / Description |
|-------------|---------|--------------|--------------------------------|
| `lyrics.fetch` | `true` | `FS_LYRICS_FETCH` | `true` / `false` — Fetch lyrics. |
| `lyrics.follow` | `true` | `FS_LYRICS_FOLLOW` | `true` / `false` — Follow current line. |
| `lyrics.delayMs` | `0` | `FS_LYRICS_DELAY_MS` | Sync delay in milliseconds. |
| `lyrics.preferLocalLyrics` | `true` | `FS_LYRICS_PREFER_LOCAL` | `true` / `false` — Prefer local lyric files. |
| `lyrics.showMatch` | `true` | `FS_LYRICS_SHOW_MATCH` | `true` / `false`. |
| `lyrics.showProvider` | `true` | `FS_LYRICS_SHOW_PROVIDER` | `true` / `false`. |
| `lyrics.enableAutoTranslation` | `false` | `FS_LYRICS_ENABLE_AUTO_TRANSLATION` | `true` / `false`. |
| `lyrics.translationApiKey` | *(empty)* | `FS_LYRICS_TRANSLATION_API_KEY` | API key for lyric translation. |
| `lyrics.translationTargetLanguage` | `en` | `FS_LYRICS_TRANSLATION_TARGET_LANGUAGE` | Target language code. |
| `lyrics.alignment` | `center` | `FS_LYRICS_ALIGNMENT` | `center` / `left` / `right`. |
---
## Auto DJ
| Setting path | Default | Env variable | Available values / Description |
|-------------|---------|--------------|--------------------------------|
| `autoDJ.albumStrategy` | `similar` | `FS_AUTO_DJ_ALBUM_STRATEGY` | `similar` / `library_random`. |
| `autoDJ.enabled` | `false` | `FS_AUTO_DJ_ENABLED` | `true` / `false`. |
| `autoDJ.itemCount` | `5` | `FS_AUTO_DJ_ITEM_COUNT` | Number of items to add. |
| `autoDJ.mode` | `songs` | `FS_AUTO_DJ_MODE` | `songs` / `albums`. |
| `autoDJ.songStrategy` | `similar` | `FS_AUTO_DJ_SONG_STRATEGY` | `similar` / `library_random`. |
| `autoDJ.timing` | `1` | `FS_AUTO_DJ_TIMING` | Timing value (number). |
---
## CSS
| Setting path | Default | Env variable | Available values / Description |
|-------------|---------|--------------|--------------------------------|
| `css.content` | *(empty)* | `FS_CSS_CONTENT` | Custom CSS string (sanitized like in-app custom CSS). Set `FS_CSS_ENABLED=true` to apply. |
| `css.enabled` | `false` | `FS_CSS_ENABLED` | `true` / `false` — Enable custom CSS. |
---
## Font
| Setting path | Default | Env variable | Available values / Description |
|-------------|---------|--------------|--------------------------------|
| `font.type` | `builtIn` | `FS_FONT_TYPE` | `builtIn` / `system` / `custom`. |
| `font.builtIn` | `Inter` | `FS_FONT_BUILT_IN` | Built-in font name. |
| `font.system` | *(empty)* | `FS_FONT_SYSTEM` | System font name (when type is `system`). |
+19 -9
View File
@@ -1,7 +1,7 @@
appId: org.jeffvli.feishin
productName: Feishin
artifactName: ${productName}-${version}-${os}-${arch}.${ext}
electronVersion: 39.4.0
electronVersion: 41.7.0
directories:
buildResources: assets
files:
@@ -32,17 +32,23 @@ nsis:
mac:
target:
target: default
arch:
- arm64
- x64
icon: assets/icons/icon.icns
- target: dmg
arch:
- arm64
- x64
- target: zip
arch:
- arm64
- x64
icon: media/feishin.icon
type: distribution
hardenedRuntime: true
entitlements: assets/entitlements.mac.plist
entitlementsInherit: assets/entitlements.mac.plist
hardenedRuntime: false
identity: '-'
gatekeeperAssess: false
notarize: false
extendInfo:
NSAudioCaptureUsageDescription: 'System audio access is required for mpv visualizer capture in Feishin'
NSLocalNetworkUsageDescription: 'Local network is necessary for accessing servers hosted on the same system as Feishin'
dmg:
contents: [{ x: 130, y: 220 }, { x: 410, y: 220, type: link, path: /Applications }]
@@ -56,10 +62,14 @@ linux:
icon: assets/icons/icon.png
artifactName: ${productName}-${os}-${arch}.${ext}
toolsets:
appimage: '1.0.3'
npmRebuild: false
publish:
provider: s3
bucket: feishin-nightly
channel: alpha
region: auto
endpoint: https://065f090c64de2dc707dd70ac72db9669.r2.cloudflarestorage.com
+18 -9
View File
@@ -1,7 +1,7 @@
appId: org.jeffvli.feishin
productName: Feishin
artifactName: ${productName}-${version}-${os}-${arch}.${ext}
electronVersion: 39.4.0
electronVersion: 41.7.0
directories:
buildResources: assets
files:
@@ -32,17 +32,23 @@ nsis:
mac:
target:
target: default
arch:
- arm64
- x64
icon: assets/icons/icon.icns
- target: dmg
arch:
- arm64
- x64
- target: zip
arch:
- arm64
- x64
icon: media/feishin.icon
type: distribution
hardenedRuntime: true
entitlements: assets/entitlements.mac.plist
entitlementsInherit: assets/entitlements.mac.plist
hardenedRuntime: false
identity: '-'
gatekeeperAssess: false
notarize: false
extendInfo:
NSAudioCaptureUsageDescription: 'System audio access is required for mpv visualizer capture in Feishin'
NSLocalNetworkUsageDescription: 'Local network is necessary for accessing servers hosted on the same system as Feishin'
dmg:
contents: [{ x: 130, y: 220 }, { x: 410, y: 220, type: link, path: /Applications }]
@@ -56,6 +62,9 @@ linux:
icon: assets/icons/icon.png
artifactName: ${productName}-${os}-${arch}.${ext}
toolsets:
appimage: '1.0.3'
npmRebuild: false
publish:
provider: github
+19 -9
View File
@@ -1,7 +1,7 @@
appId: org.jeffvli.feishin
productName: Feishin
artifactName: ${productName}-${version}-${os}-${arch}.${ext}
electronVersion: 39.4.0
electronVersion: 41.7.0
directories:
buildResources: assets
files:
@@ -32,17 +32,23 @@ nsis:
mac:
target:
target: default
arch:
- arm64
- x64
icon: assets/icons/icon.icns
- target: dmg
arch:
- arm64
- x64
- target: zip
arch:
- arm64
- x64
icon: media/feishin.icon
type: distribution
hardenedRuntime: true
entitlements: assets/entitlements.mac.plist
entitlementsInherit: assets/entitlements.mac.plist
hardenedRuntime: false
identity: '-'
gatekeeperAssess: false
notarize: false
extendInfo:
NSAudioCaptureUsageDescription: 'System audio access is required for mpv visualizer capture in Feishin'
NSLocalNetworkUsageDescription: 'Local network is necessary for accessing servers hosted on the same system as Feishin'
dmg:
contents: [{ x: 130, y: 220 }, { x: 410, y: 220, type: link, path: /Applications }]
@@ -56,7 +62,11 @@ linux:
icon: assets/icons/icon.png
artifactName: ${productName}-${os}-${arch}.${ext}
toolsets:
appimage: '1.0.3'
npmRebuild: false
afterAllArtifactBuild: scripts/after-all-artifact-build.mjs
publish:
provider: github
owner: jeffvli
+3 -2
View File
@@ -1,10 +1,11 @@
import react from '@vitejs/plugin-react';
import { externalizeDepsPlugin, UserConfig } from 'electron-vite';
import { resolve } from 'path';
import conditionalImportPlugin from 'vite-plugin-conditional-import';
import dynamicImportPlugin from 'vite-plugin-dynamic-import';
import { ViteEjsPlugin } from 'vite-plugin-ejs';
import { createReactPlugin } from './vite.react-plugin';
const currentOSEnv = process.platform;
const electronRendererTarget = 'chrome87';
@@ -64,7 +65,7 @@ const config: UserConfig = {
localsConvention: 'camelCase',
},
},
plugins: [react(), ViteEjsPlugin({ web: false })],
plugins: [createReactPlugin(), ViteEjsPlugin({ web: false })],
resolve: {
alias: {
'/@/i18n': resolve('src/i18n'),
+1 -1
View File
@@ -25,7 +25,7 @@ export default tseslint.config(
'react-refresh': eslintPluginReactRefresh,
},
rules: {
...eslintPluginReactHooks.configs.recommended.rules,
...eslintPluginReactHooks.configs['recommended-latest'].rules,
...eslintPluginReactRefresh.configs.vite.rules,
'@typescript-eslint/explicit-function-return-type': 'off',
'@typescript-eslint/no-duplicate-enum-values': 'off',
Regular → Executable
+1
View File
@@ -1,3 +1,4 @@
#!/usr/bin/env xdg-open
[Desktop Entry]
Name=Feishin
GenericName=Music player
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512"><g style="display:inline" transform="translate(-53.452 -43.352)scale(1.11813)"><circle cx="256" cy="240.312" r="21.5" style="opacity:1;fill:#000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.19597;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke;filter:url(#filter249)"/><path d="M220.85 277.951 183.5 315.6l36 36.1 20-19.7s5.856-6.2 16.5-6.2 16.5 6.2 16.5 6.2l20 19.7 36-36.1-37.35-37.649A51.5 51.5 0 0 1 256 291.812a51.5 51.5 0 0 1-35.15-13.86" style="opacity:1;fill:#000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter249)"/><path d="M256 145.4a25.7 25.7 0 0 0-18.229 7.551L66.97 323.47A25.42 25.42 0 0 0 59.5 341.5c0 14.083 11.417 25.5 25.5 25.5a25.42 25.42 0 0 0 18.031-7.469l103.895-103.597a51.5 51.5 0 0 1-2.426-15.621 51.5 51.5 0 0 1 51.5-51.5 51.5 51.5 0 0 1 51.5 51.5 51.5 51.5 0 0 1-2.426 15.62L408.97 359.532A25.42 25.42 0 0 0 427 367c14.083 0 25.5-11.417 25.5-25.5a25.42 25.42 0 0 0-7.469-18.031L274.23 152.95a25.7 25.7 0 0 0-18.229-7.55" style="display:inline;opacity:1;fill:#000;fill-opacity:1;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;paint-order:markers fill stroke;filter:url(#filter249)"/></g></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

+202
View File
@@ -0,0 +1,202 @@
{
"fill-specializations" : [
{
"value" : {
"linear-gradient" : [
"display-p3:0.87416,0.87416,0.87416,1.00000",
"display-p3:0.99575,0.99575,0.99575,1.00000"
],
"orientation" : {
"start" : {
"x" : 0.5,
"y" : 1
},
"stop" : {
"x" : 0.5,
"y" : 0.3
}
}
}
},
{
"appearance" : "dark",
"value" : "system-dark"
}
],
"groups" : [
{
"blend-mode-specializations" : [
{
"appearance" : "tinted",
"value" : "normal"
}
],
"blur-material-specializations" : [
{
"value" : 0.7
},
{
"appearance" : "dark",
"value" : 0.7
},
{
"appearance" : "tinted",
"value" : null
}
],
"hidden" : false,
"layers" : [
{
"blend-mode-specializations" : [
{
"appearance" : "tinted",
"value" : "normal"
}
],
"fill-specializations" : [
{
"value" : {
"solid" : "extended-gray:0.00000,1.00000"
}
},
{
"appearance" : "dark",
"value" : {
"linear-gradient" : [
"display-p3:0.78674,0.78674,0.78674,1.00000",
"display-p3:0.87416,0.87416,0.87416,1.00000"
],
"orientation" : {
"start" : {
"x" : 0.5,
"y" : 1
},
"stop" : {
"x" : 0.5,
"y" : 0
}
}
}
},
{
"appearance" : "tinted",
"value" : {
"solid" : "gray:1.00000,1.00000"
}
}
],
"glass-specializations" : [
{
"value" : true
},
{
"appearance" : "dark",
"value" : true
},
{
"appearance" : "tinted",
"value" : true
}
],
"hidden" : false,
"image-name" : "feishin.svg",
"name" : "feishin",
"opacity-specializations" : [
{
"value" : 1
},
{
"appearance" : "tinted",
"value" : 1
}
],
"position" : {
"scale" : 0.79,
"translation-in-points" : [
18,
-2
]
}
}
],
"lighting-specializations" : [
{
"value" : "individual"
},
{
"appearance" : "tinted",
"value" : "combined"
}
],
"position" : {
"scale" : 2.2,
"translation-in-points" : [
0,
0
]
},
"shadow-specializations" : [
{
"value" : {
"kind" : "neutral",
"opacity" : 1
}
},
{
"appearance" : "dark",
"value" : {
"kind" : "layer-color",
"opacity" : 0.5
}
},
{
"appearance" : "tinted",
"value" : {
"kind" : "neutral",
"opacity" : 1
}
}
],
"specular-specializations" : [
{
"value" : false
},
{
"appearance" : "dark",
"value" : false
},
{
"appearance" : "tinted",
"value" : true
}
],
"translucency-specializations" : [
{
"value" : {
"enabled" : true,
"value" : 0.29
}
},
{
"appearance" : "dark",
"value" : {
"enabled" : false,
"value" : 0.29
}
},
{
"appearance" : "tinted",
"value" : {
"enabled" : true,
"value" : 0.5
}
}
]
}
],
"supported-platforms" : {
"squares" : [
"macOS"
]
}
}
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 214 KiB

BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

+104
View File
@@ -0,0 +1,104 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="512"
height="512"
viewBox="0 0 512 512"
version="1.1"
id="svg1"
xml:space="preserve"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs1"><linearGradient
id="linearGradient1"><stop
style="stop-color:#dfdfdf;stop-opacity:1;"
offset="0"
id="stop1" /><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="1"
id="stop2" /></linearGradient><filter
style="color-interpolation-filters:sRGB"
id="filter249"
x="-0.61395349"
y="-0.61395349"
width="2.227907"
height="2.5069767"><feFlood
result="flood"
in="SourceGraphic"
flood-opacity="0.498039"
flood-color="rgb(0,0,0)"
id="feFlood247" /><feGaussianBlur
result="blur"
in="SourceGraphic"
stdDeviation="1.000000"
id="feGaussianBlur247" /><feOffset
result="offset"
in="blur"
dx="0.000000"
dy="2"
id="feOffset247" /><feComposite
result="comp1"
operator="in"
in="flood"
in2="offset"
id="feComposite248" /><feComposite
result="fbSourceGraphic"
operator="over"
in="SourceGraphic"
id="feComposite249"
in2="comp1" /><feColorMatrix
result="fbSourceGraphicAlpha"
in="fbSourceGraphic"
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
id="feColorMatrix122" /><feFlood
id="feFlood122"
result="flood"
in="fbSourceGraphic"
flood-opacity="0.196078"
flood-color="rgb(0,0,0)" /><feGaussianBlur
id="feGaussianBlur122"
result="blur"
in="fbSourceGraphic"
stdDeviation="10.000000" /><feOffset
id="feOffset122"
result="offset"
in="blur"
dx="0.000000"
dy="10.000000" /><feComposite
id="feComposite122"
result="comp1"
operator="in"
in="flood"
in2="offset" /><feComposite
id="feComposite123"
result="comp2"
operator="over"
in="fbSourceGraphic"
in2="comp1" /></filter><linearGradient
xlink:href="#linearGradient1"
id="linearGradient2"
x1="256"
y1="0"
x2="256"
y2="512"
gradientUnits="userSpaceOnUse" /></defs><g
id="layer1"
style="display:inline"><circle
style="display:inline;fill:url(#linearGradient2);stroke-width:25;stroke-linecap:round;stroke-linejoin:round;paint-order:markers fill stroke"
id="background"
cx="256"
cy="256"
r="256" /><circle
style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.19597;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke;filter:url(#filter249)"
id="dot"
cx="256"
cy="240.31155"
r="21.5" /><path
id="bottom"
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter249)"
d="M 220.84961,277.95117 183.5,315.59961 219.5,351.69922 239.5,332 c 0,0 5.85615,-6.19922 16.5,-6.19922 10.64385,0 16.5,6.19922 16.5,6.19922 l 20,19.69922 36,-36.09961 -37.34961,-37.64844 A 51.5,51.5 0 0 1 256,291.8125 51.5,51.5 0 0 1 220.84961,277.95117 Z" /><path
id="main"
style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;paint-order:markers fill stroke;filter:url(#filter249)"
d="m 256,145.40039 c -7.11895,0 -13.56326,2.88552 -18.22852,7.55078 L 66.96875,323.46875 C 62.354158,328.08334 59.5,334.45837 59.5,341.5 c 0,14.08326 11.416739,25.5 25.5,25.5 7.04163,0 13.41666,-2.85416 18.03125,-7.46875 L 206.92578,255.93359 A 51.5,51.5 0 0 1 204.5,240.3125 a 51.5,51.5 0 0 1 51.5,-51.5 51.5,51.5 0 0 1 51.5,51.5 51.5,51.5 0 0 1 -2.42578,15.62109 L 408.96875,359.53125 C 413.58334,364.14585 419.95837,367 427,367 c 14.08326,0 25.5,-11.41674 25.5,-25.5 0,-7.04163 -2.85415,-13.41666 -7.46875,-18.03125 L 274.22852,152.95117 C 269.56326,148.2859 263.11895,145.40039 256,145.40039 Z" /></g></svg>

After

Width:  |  Height:  |  Size: 4.4 KiB

+3
View File
@@ -1,5 +1,6 @@
server {
listen 9180;
listen [::]:9180;
sendfile on;
default_type application/octet-stream;
@@ -19,9 +20,11 @@ server {
location ${PUBLIC_PATH}settings.js {
alias /etc/nginx/conf.d/settings.js;
add_header Cache-Control "no-store";
}
location ${PUBLIC_PATH}/settings.js {
alias /etc/nginx/conf.d/settings.js;
add_header Cache-Control "no-store";
}
}
-18321
View File
File diff suppressed because it is too large Load Diff
+87 -88
View File
@@ -1,6 +1,6 @@
{
"name": "feishin",
"version": "1.5.0",
"version": "1.13.0",
"description": "A modern self-hosted music player.",
"keywords": [
"subsonic",
@@ -31,36 +31,36 @@
"i18next": "i18next -c src/i18n/i18next-parser.config.js",
"postinstall": "electron-builder install-app-deps",
"lint": "pnpm run typecheck && pnpm run lint-code && pnpm run lint-styles",
"lint:fix": "pnpm run lint-code:fix && pnpm run lint-styles:fix",
"lint-code": "eslint --max-warnings=0 --cache .",
"lint-code:fix": "eslint --cache --fix .",
"lint-styles": "stylelint --max-warnings=0 'src/**/*.{css,scss}'",
"lint-styles:fix": "stylelint 'src/**/*.{css,scss}' --fix",
"lint:fix": "pnpm run lint-code:fix && pnpm run lint-styles:fix",
"package": "pnpm run build && electron-builder",
"package:dev": "pnpm run build && electron-builder --dir",
"package:linux": "pnpm run build && electron-builder --linux",
"package:linux-arm64:pr": "pnpm run build && electron-builder --linux --arm64 --publish never",
"package:linux:pr": "pnpm run build && electron-builder --linux --publish never",
"package:linux-arm64:pr": "pnpm run build && electron-builder --linux --arm64 --publish never",
"package:mac": "pnpm run build && electron-builder --mac",
"package:mac:pr": "pnpm run build && electron-builder --mac --publish never",
"package:win": "pnpm run build && electron-builder --win",
"package:win-arm64:pr": "pnpm run build && electron-builder --win --arm64 --publish never",
"package:win:pr": "pnpm run build && electron-builder --win --publish never",
"package:win-arm64:pr": "pnpm run build && electron-builder --win --arm64 --publish never",
"publish:linux": "pnpm run build && electron-builder --publish always --linux",
"publish:linux:alpha": "pnpm run build && electron-builder --config electron-builder-alpha.yml --publish always --linux",
"publish:linux:beta": "pnpm run build && electron-builder --config electron-builder-beta.yml --publish always --linux",
"publish:linux-arm64": "pnpm run build && electron-builder --publish always --linux --arm64",
"publish:linux-arm64:alpha": "pnpm run build && electron-builder --config electron-builder-alpha.yml --publish always --linux --arm64",
"publish:linux-arm64:beta": "pnpm run build && electron-builder --config electron-builder-beta.yml --publish always --linux --arm64",
"publish:linux:alpha": "pnpm run build && electron-builder --config electron-builder-alpha.yml --publish always --linux",
"publish:linux:beta": "pnpm run build && electron-builder --config electron-builder-beta.yml --publish always --linux",
"publish:mac": "pnpm run build && electron-builder --publish always --mac",
"publish:mac:alpha": "pnpm run build && electron-builder --config electron-builder-alpha.yml --publish always --mac",
"publish:mac:beta": "pnpm run build && electron-builder --config electron-builder-beta.yml --publish always --mac",
"publish:win": "pnpm run build && electron-builder --publish always --win",
"publish:win:alpha": "pnpm run build && electron-builder --config electron-builder-alpha.yml --publish always --win",
"publish:win:beta": "pnpm run build && electron-builder --config electron-builder-beta.yml --publish always --win",
"publish:win-arm64": "pnpm run build && electron-builder --publish always --win --arm64",
"publish:win-arm64:alpha": "pnpm run build && electron-builder --config electron-builder-alpha.yml --publish always --win --arm64",
"publish:win-arm64:beta": "pnpm run build && electron-builder --config electron-builder-beta.yml --publish always --win --arm64",
"publish:win:alpha": "pnpm run build && electron-builder --config electron-builder-alpha.yml --publish always --win",
"publish:win:beta": "pnpm run build && electron-builder --config electron-builder-beta.yml --publish always --win",
"start": "electron-vite preview",
"typecheck": "pnpm run typecheck:node && pnpm run typecheck:web",
"typecheck:node": "tsc --noEmit -p tsconfig.node.json --composite false",
@@ -68,126 +68,125 @@
"version": "pnpm version --no-git-tag-version",
"postversion": "node ./scripts/update-app-stream.mjs"
},
"resolutions": {
"xml2js": "0.5.0"
},
"dependencies": {
"@atlaskit/pragmatic-drag-and-drop": "1.7.7",
"@atlaskit/pragmatic-drag-and-drop-auto-scroll": "^2.1.2",
"@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.1.0",
"@electron-toolkit/preload": "^3.0.1",
"@atlaskit/pragmatic-drag-and-drop-auto-scroll": "^2.1.5",
"@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.2.0",
"@electron-toolkit/preload": "^3.0.2",
"@electron-toolkit/utils": "^4.0.0",
"@mantine/colors-generator": "^8.3.8",
"@mantine/core": "^8.3.8",
"@mantine/dates": "^8.3.8",
"@mantine/form": "^8.3.8",
"@mantine/hooks": "^8.3.8",
"@mantine/modals": "^8.3.8",
"@mantine/notifications": "^8.3.8",
"@radix-ui/react-context-menu": "^2.2.16",
"@tanstack/react-query": "^5.90.9",
"@tanstack/react-query-devtools": "^5.90.2",
"@tanstack/react-query-persist-client": "^5.90.11",
"@mantine/colors-generator": "^9.3.0",
"@mantine/core": "^9.3.0",
"@mantine/dates": "^9.3.0",
"@mantine/form": "^9.3.0",
"@mantine/hooks": "^9.3.0",
"@mantine/modals": "^9.3.0",
"@mantine/notifications": "^9.3.0",
"@radix-ui/react-context-menu": "^2.3.0",
"@tanstack/react-query": "5.96.2",
"@tanstack/react-query-devtools": "5.96.2",
"@tanstack/react-query-persist-client": "5.96.2",
"@ts-rest/core": "^3.52.1",
"@wavesurfer/react": "^1.0.11",
"@xhayper/discord-rpc": "^1.3.0",
"audiomotion-analyzer": "^4.5.1",
"axios": "^1.13.2",
"butterchurn": "^3.0.0-beta.5",
"butterchurn-presets": "^3.0.0-beta.4",
"cheerio": "^1.1.2",
"@wavesurfer/react": "^1.0.12",
"@xhayper/discord-rpc": "^1.3.4",
"audiomotion-analyzer": "^4.5.4",
"axios": "^1.17.0",
"butterchurn": "3.0.0-beta.5",
"butterchurn-presets": "3.0.0-beta.4",
"cheerio": "^1.2.0",
"clsx": "^2.1.1",
"cmdk": "^1.1.1",
"dayjs": "^1.11.19",
"dompurify": "^3.3.0",
"dayjs": "^1.11.21",
"dompurify": "^3.4.11",
"electron-debug": "^3.2.0",
"electron-localshortcut": "^3.2.1",
"electron-log": "^5.4.3",
"electron-log": "^5.4.4",
"electron-store": "^8.2.0",
"electron-updater": "^6.6.2",
"fast-average-color": "^9.5.0",
"fast-xml-parser": "^5.3.2",
"electron-updater": "^6.8.9",
"fast-average-color": "9.5.0",
"fast-xml-parser": "^5.8.0",
"format-duration": "^3.0.2",
"fuse.js": "^7.1.0",
"i18next": "^25.6.2",
"fuse.js": "^7.4.2",
"i18next": "^25.10.10",
"icecast-metadata-stats": "^0.1.12",
"idb-keyval": "^6.2.2",
"idb-keyval": "^6.2.5",
"immer": "^10.2.0",
"is-electron": "^2.2.2",
"lodash": "^4.17.21",
"kuroshiro": "^1.2.0",
"kuroshiro-analyzer-kuromoji": "^1.1.0",
"lodash": "^4.18.1",
"md5": "^2.3.0",
"motion": "^12.23.24",
"motion": "^12.40.0",
"mpris-service": "^2.1.2",
"nanoid": "^3.3.11",
"nanoid": "^3.3.12",
"node-mpv": "github:jeffvli/Node-MPV#32b4d64395289ad710c41d481d2707a7acfc228f",
"nuqs": "^2.7.1",
"overlayscrollbars": "^2.11.1",
"overlayscrollbars": "^2.16.0",
"overlayscrollbars-react": "^0.5.6",
"qs": "^6.14.1",
"react": "^19.1.0",
"react-call": "^1.8.1",
"react-dom": "^19.1.0",
"qs": "^6.15.2",
"react": "^19.2.7",
"react-call": "^1.8.2",
"react-dom": "^19.2.7",
"react-error-boundary": "^5.0.0",
"react-i18next": "^16.3.3",
"react-icons": "^5.5.0",
"react-image": "^4.1.0",
"react-player": "^2.16.0",
"react-router": "^7.9.6",
"react-split-pane": "^3.0.4",
"react-i18next": "^16.6.6",
"react-icons": "^5.6.0",
"react-player": "^2.16.1",
"react-router": "^7.17.0",
"react-split-pane": "^3.2.0",
"react-virtualized-auto-sizer": "^1.0.26",
"react-window": "1.8.11",
"react-window-v2": "npm:react-window@^2.2.3",
"semver": "^7.5.4",
"react-window-v2": "npm:react-window@^2.2.7",
"semver": "^7.8.2",
"string-to-color": "^2.2.2",
"wavesurfer.js": "^7.11.1",
"ws": "^8.18.2",
"zod": "^3.22.3",
"zustand": "^5.0.5"
"wavesurfer.js": "^7.12.7",
"ws": "^8.21.0",
"zod": "^3.25.76",
"zustand": "^5.0.14"
},
"devDependencies": {
"@electron-toolkit/eslint-config-prettier": "^3.0.0",
"@electron-toolkit/eslint-config-ts": "^3.0.0",
"@electron-toolkit/eslint-config-ts": "^3.1.0",
"@electron-toolkit/tsconfig": "^2.0.0",
"@types/electron-localshortcut": "^3.1.0",
"@types/lodash": "^4.17.18",
"@types/md5": "^2.3.5",
"@types/node": "^24.10.1",
"@types/react": "^19.2.5",
"@types/electron-localshortcut": "^3.1.3",
"@types/lodash": "^4.17.24",
"@types/md5": "^2.3.6",
"@types/node": "^24.13.1",
"@types/react": "^19.2.17",
"@types/react-dom": "^19.2.3",
"@types/react-window": "^1.8.8",
"@types/source-map-support": "^0.5.10",
"@types/ws": "^8.18.1",
"@vitejs/plugin-react": "^5.1.1",
"@vitejs/plugin-react": "^5.2.0",
"babel-plugin-react-compiler": "^1.0.0",
"concurrently": "^9.2.1",
"cross-env": "^10.1.0",
"electron": "^39.4.0",
"electron-builder": "^26.0.12",
"electron": "^41.7.1",
"electron-builder": "^26.15.5",
"electron-devtools-installer": "^4.0.0",
"electron-vite": "^4.0.1",
"eslint": "^9.24.0",
"eslint-plugin-perfectionist": "^4.13.0",
"eslint-plugin-prettier": "^5.4.0",
"eslint": "^9.39.4",
"eslint-plugin-perfectionist": "^4.15.1",
"eslint-plugin-prettier": "^5.5.6",
"eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-hooks": "^7.0.1",
"eslint-plugin-react-refresh": "^0.4.24",
"i18next-parser": "^9.3.0",
"eslint-plugin-react-hooks": "^7.1.1",
"eslint-plugin-react-refresh": "^0.4.26",
"i18next-parser": "^9.4.0",
"postcss-preset-mantine": "^1.18.0",
"postcss-simple-vars": "^7.0.1",
"prettier": "^3.6.2",
"prettier-plugin-packagejson": "^2.5.19",
"stylelint": "^16.25.0",
"stylelint-config-css-modules": "^4.5.1",
"stylelint-config-recess-order": "^7.4.0",
"prettier": "^3.8.3",
"prettier-plugin-packagejson": "^2.5.22",
"stylelint": "^16.26.1",
"stylelint-config-css-modules": "^4.6.0",
"stylelint-config-recess-order": "^7.7.0",
"stylelint-config-standard": "^39.0.1",
"typescript": "^5.8.3",
"vite": "^7.2.2",
"typescript": "^5.9.3",
"vite": "^7.3.5",
"vite-plugin-conditional-import": "^0.1.7",
"vite-plugin-dynamic-import": "^1.6.0",
"vite-plugin-ejs": "^1.7.0",
"vite-plugin-pwa": "^1.1.0"
},
"pnpm": {
"onlyBuiltDependencies": [
"electron",
"esbuild"
]
"vite-plugin-pwa": "^1.3.0"
},
"packageManager": "pnpm@11.5.2",
"productName": "feishin"
}
+3563 -3999
View File
File diff suppressed because it is too large Load Diff
+9
View File
@@ -0,0 +1,9 @@
allowBuilds:
abstract-socket: true
electron: true
electron-winstaller: true
esbuild: true
minimumReleaseAge: 1440
overrides:
'xml2js': '0.5.0'
'react-router': '7.14.0'
+2 -2
View File
@@ -1,9 +1,9 @@
import react from '@vitejs/plugin-react';
import path from 'path';
import { defineConfig, normalizePath } from 'vite';
import { ViteEjsPlugin } from 'vite-plugin-ejs';
import { version } from './package.json';
import { createReactPlugin } from './vite.react-plugin';
export default defineConfig({
build: {
@@ -35,7 +35,7 @@ export default defineConfig({
},
},
plugins: [
react(),
createReactPlugin(),
ViteEjsPlugin({
prod: process.env.NODE_ENV === 'production',
root: normalizePath(path.resolve(__dirname, './src/remote')),
Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 32 KiB

+45
View File
@@ -0,0 +1,45 @@
import { execSync } from 'child_process';
import path from 'path';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
/**
* Electron-builder afterAllArtifactBuild hook
* Runs the app stream update script only for Linux builds
* Returns the metainfo file path to be included in published artifacts
*/
// This is not a typescript file, and is called by electron-builder, so we cannot use typescript features here.
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
export default async function afterAllArtifactBuild(buildResult) {
// Check if this build includes Linux as a target
const isLinux = Array.from(buildResult.platformToTargets.keys()).some(
(platform) => platform.name === 'linux',
);
if (isLinux) {
const updateScriptPath = path.join(__dirname, 'update-app-stream.mjs');
const projectRoot = path.resolve(__dirname, '..');
const metainfoFile = path.resolve(projectRoot, 'org.jeffvli.feishin.metainfo.xml');
console.log('Running app stream update for Linux build...');
try {
execSync(`node ${updateScriptPath} --replace-if-version-missing`, {
cwd: projectRoot,
stdio: 'inherit',
});
// Return the metainfo file to be included in published artifacts
return [metainfoFile];
} catch (error) {
console.error('Failed to update app stream:', error.message);
throw error;
}
}
// Return empty array if not a Linux build
return [];
}
+32 -11
View File
@@ -3,30 +3,51 @@ import fs from 'fs';
import path from 'path';
const args = process.argv.slice(2);
if (args.length > 3) {
console.error('Usage: node update-app-stream.js [package-file] [date] [metainfo-file]');
// Parse flags and positional arguments
const flags = args.filter((arg) => arg.startsWith('--'));
const positionalArgs = args.filter((arg) => !arg.startsWith('--'));
const replaceIfVersionMissing = flags.includes('--replace-if-version-missing');
if (positionalArgs.length > 3) {
console.error(
'Usage: node update-app-stream.js [package-file] [date] [metainfo-file] [--replace-if-version-missing]',
);
process.exit(1);
}
const packageFile = args[0] || path.resolve(process.cwd(), 'package.json');
const packageFile = positionalArgs[0] || path.resolve(process.cwd(), 'package.json');
const packageContent = fs.readFileSync(packageFile, 'utf8');
const packageJson = JSON.parse(packageContent);
const version = packageJson.version;
const time = Math.floor((Date.parse(args[1]) || Date.now()) / 1000);
const metainfoFile = args[2] || path.resolve(process.cwd(), 'org.jeffvli.feishin.metainfo.xml');
const time = Math.floor((Date.parse(positionalArgs[1]) || Date.now()) / 1000);
const metainfoFile =
positionalArgs[2] || path.resolve(process.cwd(), 'org.jeffvli.feishin.metainfo.xml');
const parser = new XMLParser({ ignoreAttributes: false });
const metainfoContent = fs.readFileSync(metainfoFile, 'utf8');
const metainfo = parser.parse(metainfoContent);
if (!metainfo.component.releases.release.find((release) => release['@_version'] === version)) {
metainfo.component.releases.release.unshift({
'@_date': new Date(time * 1000).toISOString().split('T')[0],
'@_type': version.includes('-') ? 'development' : 'stable',
'@_version': version,
});
const newRelease = {
'@_date': new Date(time * 1000).toISOString().split('T')[0],
'@_type': version.includes('-') ? 'development' : 'stable',
'@_version': version,
};
if (replaceIfVersionMissing) {
// Replace all releases with only the current version
metainfo.component.releases.release = [newRelease];
} else {
// Default behavior: add new release if it doesn't exist
const releaseExists =
metainfo.component.releases.release.findIndex(
(release) => release['@_version'] === version,
) !== -1;
if (!releaseExists) {
metainfo.component.releases.release.unshift(newRelease);
}
}
const builder = new XMLBuilder({ format: true, ignoreAttributes: false, indentBy: ' ' });
+102 -1
View File
@@ -1 +1,102 @@
"use strict";window.SERVER_URL="${SERVER_URL}";window.SERVER_NAME="${SERVER_NAME}";window.SERVER_TYPE="${SERVER_TYPE}";window.SERVER_LOCK="${SERVER_LOCK}";window.LEGACY_AUTHENTICATION="${LEGACY_AUTHENTICATION}";window.ANALYTICS_DISABLED="${ANALYTICS_DISABLED}";
"use strict";
window.SERVER_URL = "${SERVER_URL}";
window.REMOTE_URL = "${REMOTE_URL}";
window.SERVER_NAME = "${SERVER_NAME}";
window.SERVER_TYPE = "${SERVER_TYPE}";
window.SERVER_LOCK = "${SERVER_LOCK}";
window.LEGACY_AUTHENTICATION = "${LEGACY_AUTHENTICATION}";
window.ANALYTICS_DISABLED = "${ANALYTICS_DISABLED}";
window.FS_GENERAL_ACCENT = "${FS_GENERAL_ACCENT}";
window.FS_GENERAL_ALBUM_BACKGROUND = "${FS_GENERAL_ALBUM_BACKGROUND}";
window.FS_GENERAL_ALBUM_BACKGROUND_BLUR = "${FS_GENERAL_ALBUM_BACKGROUND_BLUR}";
window.FS_GENERAL_ARTIST_BACKGROUND = "${FS_GENERAL_ARTIST_BACKGROUND}";
window.FS_GENERAL_ARTIST_BACKGROUND_BLUR = "${FS_GENERAL_ARTIST_BACKGROUND_BLUR}";
window.FS_GENERAL_BLUR_EXPLICIT_IMAGES = "${FS_GENERAL_BLUR_EXPLICIT_IMAGES}";
window.FS_GENERAL_COMBINED_LYRICS_AND_VISUALIZER = "${FS_GENERAL_COMBINED_LYRICS_AND_VISUALIZER}";
window.FS_GENERAL_ENABLE_GRID_MULTI_SELECT = "${FS_GENERAL_ENABLE_GRID_MULTI_SELECT}";
window.FS_GENERAL_EXTERNAL_LINKS = "${FS_GENERAL_EXTERNAL_LINKS}";
window.FS_GENERAL_FOLLOW_CURRENT_SONG = "${FS_GENERAL_FOLLOW_CURRENT_SONG}";
window.FS_GENERAL_FOLLOW_SYSTEM_THEME = "${FS_GENERAL_FOLLOW_SYSTEM_THEME}";
window.FS_GENERAL_HOME_FEATURE = "${FS_GENERAL_HOME_FEATURE}";
window.FS_GENERAL_HOME_FEATURE_STYLE = "${FS_GENERAL_HOME_FEATURE_STYLE}";
window.FS_GENERAL_LANGUAGE = "${FS_GENERAL_LANGUAGE}";
window.FS_GENERAL_LAST_FM = "${FS_GENERAL_LAST_FM}";
window.FS_GENERAL_LASTFM_API_KEY = "${FS_GENERAL_LASTFM_API_KEY}";
window.FS_GENERAL_LISTEN_BRAINZ = "${FS_GENERAL_LISTEN_BRAINZ}";
window.FS_GENERAL_MUSIC_BRAINZ = "${FS_GENERAL_MUSIC_BRAINZ}";
window.FS_GENERAL_NATIVE_ASPECT_RATIO = "${FS_GENERAL_NATIVE_ASPECT_RATIO}";
window.FS_GENERAL_PATH_REPLACE = "${FS_GENERAL_PATH_REPLACE}";
window.FS_GENERAL_PATH_REPLACE_WITH = "${FS_GENERAL_PATH_REPLACE_WITH}";
window.FS_GENERAL_PLAYERBAR_OPEN_DRAWER = "${FS_GENERAL_PLAYERBAR_OPEN_DRAWER}";
window.FS_GENERAL_PRIMARY_SHADE = "${FS_GENERAL_PRIMARY_SHADE}";
window.FS_GENERAL_QOBUZ = "${FS_GENERAL_QOBUZ}";
window.FS_GENERAL_RESUME = "${FS_GENERAL_RESUME}";
window.FS_GENERAL_SHOW_LYRICS_IN_SIDEBAR = "${FS_GENERAL_SHOW_LYRICS_IN_SIDEBAR}";
window.FS_GENERAL_SHOW_RATINGS = "${FS_GENERAL_SHOW_RATINGS}";
window.FS_GENERAL_SHOW_VISUALIZER_IN_SIDEBAR = "${FS_GENERAL_SHOW_VISUALIZER_IN_SIDEBAR}";
window.FS_GENERAL_SIDEBAR_COLLAPSED_NAVIGATION = "${FS_GENERAL_SIDEBAR_COLLAPSED_NAVIGATION}";
window.FS_GENERAL_SIDEBAR_COLLAPSE_SHARED = "${FS_GENERAL_SIDEBAR_COLLAPSE_SHARED}";
window.FS_GENERAL_SIDEBAR_PLAYLIST_FOLDERS = "${FS_GENERAL_SIDEBAR_PLAYLIST_FOLDERS}";
window.FS_GENERAL_SIDEBAR_PLAYLIST_FOLDER_SEPARATOR = "${FS_GENERAL_SIDEBAR_PLAYLIST_FOLDER_SEPARATOR}";
window.FS_GENERAL_SIDEBAR_PLAYLIST_FOLDER_TREE_INDENT = "${FS_GENERAL_SIDEBAR_PLAYLIST_FOLDER_TREE_INDENT}";
window.FS_GENERAL_SIDEBAR_PLAYLIST_FOLDER_TREE_LINE_COLOR = "${FS_GENERAL_SIDEBAR_PLAYLIST_FOLDER_TREE_LINE_COLOR}";
window.FS_GENERAL_SIDEBAR_PLAYLIST_FOLDER_VIEW = "${FS_GENERAL_SIDEBAR_PLAYLIST_FOLDER_VIEW}";
window.FS_GENERAL_SIDEBAR_PLAYLIST_LIST = "${FS_GENERAL_SIDEBAR_PLAYLIST_LIST}";
window.FS_GENERAL_SIDEBAR_PLAYLIST_MODE = "${FS_GENERAL_SIDEBAR_PLAYLIST_MODE}";
window.FS_GENERAL_SIDEBAR_PLAYLIST_SORTING = "${FS_GENERAL_SIDEBAR_PLAYLIST_SORTING}";
window.FS_GENERAL_SIDE_QUEUE_TYPE = "${FS_GENERAL_SIDE_QUEUE_TYPE}";
window.FS_GENERAL_SIDE_QUEUE_LAYOUT = "${FS_GENERAL_SIDE_QUEUE_LAYOUT}";
window.FS_GENERAL_THEME = "${FS_GENERAL_THEME}";
window.FS_GENERAL_THEME_DARK = "${FS_GENERAL_THEME_DARK}";
window.FS_GENERAL_THEME_LIGHT = "${FS_GENERAL_THEME_LIGHT}";
window.FS_GENERAL_USE_THEME_ACCENT_COLOR = "${FS_GENERAL_USE_THEME_ACCENT_COLOR}";
window.FS_GENERAL_USE_THEME_PRIMARY_SHADE = "${FS_GENERAL_USE_THEME_PRIMARY_SHADE}";
window.FS_GENERAL_ZOOM_FACTOR = "${FS_GENERAL_ZOOM_FACTOR}";
window.FS_PLAYBACK_MEDIA_SESSION = "${FS_PLAYBACK_MEDIA_SESSION}";
window.FS_PLAYBACK_WEB_AUDIO = "${FS_PLAYBACK_WEB_AUDIO}";
window.FS_PLAYBACK_AUDIO_FADE_ON_STATUS_CHANGE = "${FS_PLAYBACK_AUDIO_FADE_ON_STATUS_CHANGE}";
window.FS_PLAYBACK_PRESERVE_PITCH = "${FS_PLAYBACK_PRESERVE_PITCH}";
window.FS_PLAYBACK_SCROBBLE_ENABLED = "${FS_PLAYBACK_SCROBBLE_ENABLED}";
window.FS_PLAYBACK_SCROBBLE_NOTIFY = "${FS_PLAYBACK_SCROBBLE_NOTIFY}";
window.FS_PLAYBACK_SCROBBLE_AT_DURATION = "${FS_PLAYBACK_SCROBBLE_AT_DURATION}";
window.FS_PLAYBACK_SCROBBLE_AT_PERCENTAGE = "${FS_PLAYBACK_SCROBBLE_AT_PERCENTAGE}";
window.FS_PLAYBACK_TRANSCODE_ENABLED = "${FS_PLAYBACK_TRANSCODE_ENABLED}";
window.FS_PLAYBACK_TRANSCODE_FORMAT = "${FS_PLAYBACK_TRANSCODE_FORMAT}";
window.FS_PLAYBACK_TRANSCODE_BITRATE = "${FS_PLAYBACK_TRANSCODE_BITRATE}";
window.FS_PLAYBACK_FILTERS = "${FS_PLAYBACK_FILTERS}";
window.FS_DISCORD_ENABLED = "${FS_DISCORD_ENABLED}";
window.FS_DISCORD_CLIENT_ID = "${FS_DISCORD_CLIENT_ID}";
window.FS_DISCORD_DISPLAY_TYPE = "${FS_DISCORD_DISPLAY_TYPE}";
window.FS_DISCORD_LINK_TYPE = "${FS_DISCORD_LINK_TYPE}";
window.FS_DISCORD_SHOW_AS_LISTENING = "${FS_DISCORD_SHOW_AS_LISTENING}";
window.FS_DISCORD_SHOW_PAUSED = "${FS_DISCORD_SHOW_PAUSED}";
window.FS_DISCORD_SHOW_SERVER_IMAGE = "${FS_DISCORD_SHOW_SERVER_IMAGE}";
window.FS_DISCORD_SHOW_STATE_ICON = "${FS_DISCORD_SHOW_STATE_ICON}";
window.FS_LYRICS_FETCH = "${FS_LYRICS_FETCH}";
window.FS_LYRICS_FOLLOW = "${FS_LYRICS_FOLLOW}";
window.FS_LYRICS_DELAY_MS = "${FS_LYRICS_DELAY_MS}";
window.FS_LYRICS_PREFER_LOCAL = "${FS_LYRICS_PREFER_LOCAL}";
window.FS_LYRICS_SHOW_MATCH = "${FS_LYRICS_SHOW_MATCH}";
window.FS_LYRICS_SHOW_PROVIDER = "${FS_LYRICS_SHOW_PROVIDER}";
window.FS_LYRICS_ENABLE_AUTO_TRANSLATION = "${FS_LYRICS_ENABLE_AUTO_TRANSLATION}";
window.FS_LYRICS_TRANSLATION_API_KEY = "${FS_LYRICS_TRANSLATION_API_KEY}";
window.FS_LYRICS_TRANSLATION_TARGET_LANGUAGE = "${FS_LYRICS_TRANSLATION_TARGET_LANGUAGE}";
window.FS_LYRICS_ALIGNMENT = "${FS_LYRICS_ALIGNMENT}";
window.FS_AUTO_DJ_ALBUM_STRATEGY = "${FS_AUTO_DJ_ALBUM_STRATEGY}";
window.FS_AUTO_DJ_ENABLED = "${FS_AUTO_DJ_ENABLED}";
window.FS_AUTO_DJ_ITEM_COUNT = "${FS_AUTO_DJ_ITEM_COUNT}";
window.FS_AUTO_DJ_MODE = "${FS_AUTO_DJ_MODE}";
window.FS_AUTO_DJ_SONG_STRATEGY = "${FS_AUTO_DJ_SONG_STRATEGY}";
window.FS_AUTO_DJ_TIMING = "${FS_AUTO_DJ_TIMING}";
window.FS_CSS_CONTENT = "${FS_CSS_CONTENT}";
window.FS_CSS_ENABLED = "${FS_CSS_ENABLED}";
window.FS_FONT_TYPE = "${FS_FONT_TYPE}";
window.FS_FONT_BUILT_IN = "${FS_FONT_BUILT_IN}";
window.FS_FONT_SYSTEM = "${FS_FONT_SYSTEM}";
+22 -12
View File
@@ -1,4 +1,4 @@
import { PostProcessorModule, TOptions } from 'i18next';
import { PostProcessorModule } from 'i18next';
import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
@@ -8,6 +8,7 @@ import cs from './locales/cs.json';
import de from './locales/de.json';
import en from './locales/en.json';
import es from './locales/es.json';
import et from './locales/et.json';
import eu from './locales/eu.json';
import fa from './locales/fa.json';
import fi from './locales/fi.json';
@@ -27,6 +28,8 @@ import sl from './locales/sl.json';
import sr from './locales/sr.json';
import sv from './locales/sv.json';
import ta from './locales/ta.json';
import th from './locales/th.json';
import tl from './locales/tl.json';
import tr from './locales/tr.json';
import zhHans from './locales/zh-Hans.json';
import zhHant from './locales/zh-Hant.json';
@@ -38,6 +41,7 @@ const resources = {
de: { translation: de },
en: { translation: en },
es: { translation: es },
et: { translation: et },
eu: { translation: eu },
fa: { translation: fa },
fi: { translation: fi },
@@ -57,6 +61,8 @@ const resources = {
sr: { translation: sr },
sv: { translation: sv },
ta: { translation: ta },
th: { translation: th },
tl: { translation: tl },
tr: { translation: tr },
'zh-Hans': { translation: zhHans },
'zh-Hant': { translation: zhHant },
@@ -87,6 +93,10 @@ export const languages = [
label: 'Español',
value: 'es',
},
{
label: 'Eesti',
value: 'et',
},
{
label: 'Basque',
value: 'eu',
@@ -163,6 +173,14 @@ export const languages = [
label: 'Tamil',
value: 'ta',
},
{
label: 'Thai',
value: 'th',
},
{
label: 'Tagalog',
value: 'tl',
},
{
label: 'Türkçe',
value: 'tr',
@@ -203,25 +221,17 @@ const titleCasePostProcessor: PostProcessorModule = {
type: 'postProcessor',
};
const ignoreSentenceCaseLanguages = ['de'];
// const ignoreSentenceCaseLanguages = ['de'];
const sentenceCasePostProcessor: PostProcessorModule = {
name: 'sentenceCase',
process: (
value: string,
_key: string,
_options: TOptions<Record<string, string>>,
translator: any,
) => {
process: (value: string) => {
const sentences = value.split('. ');
return sentences
.map((sentence) => {
return (
sentence.charAt(0).toLocaleUpperCase() +
(!ignoreSentenceCaseLanguages.includes(translator.language)
? sentence.slice(1).toLocaleLowerCase()
: sentence.slice(1))
sentence.charAt(0).toLocaleUpperCase() + sentence.slice(1).toLocaleLowerCase()
);
})
.join('. ');
+354 -14
View File
@@ -2,26 +2,48 @@
"action": {
"addToFavorites": "إضافة الى $t(entity.favorite, {\"count\": 2})",
"addToPlaylist": "إضافة الى $t(entity.playlist, {\"count\": 1})",
"clearQueue": "مسح قائمة الإنتظار",
"clearQueue": "مسح قائمة التشغيل",
"createPlaylist": "إنشاء $t(entity.playlist, {\"count\": 1})",
"deletePlaylist": "حذف $t(entity.playlist, {\"count\": 1})",
"deselectAll": "إلغاء تحديد الكل",
"editPlaylist": "تعديل $t(entity.playlist, {\"count\": 1})",
"goToPage": "اذهب الى صفحة",
"moveToNext": "الذهاب الى التالي",
"moveToBottom": "الذهاب الى الأسفل",
"moveToTop": "الذهاب الى الأعلى",
"goToPage": "اذهب الى الصفحة",
"moveToNext": "نقل إلى التالي",
"moveToBottom": "نقل إلى الأسفل",
"moveToTop": "نقل إلى الأعلى",
"refresh": "$t(common.refresh)",
"removeFromFavorites": "حذف من $t(entity.favorite, {\"count\": 2})",
"removeFromPlaylist": "حذف من $t(entity.playlist, {\"count\": 1})",
"removeFromQueue": "حذف من قائمة الإنتظار",
"removeFromQueue": "حذف من قائمة التشغيل",
"setRating": "تحديد التقييم",
"toggleSmartPlaylistEditor": "تشغيل / إطفاء وضع التعديل لـ $t(entity.smartPlaylist)",
"viewPlaylists": "إظهار $t(entity.playlist, {\"count\": 2})",
"toggleSmartPlaylistEditor": "إظهار / إخفاء وضع التعديل لـ $t(entity.smartPlaylist)",
"viewPlaylists": "عرض $t(entity.playlist, {\"count\": 2})",
"openIn": {
"lastfm": "فتح في Last.fm",
"musicbrainz": "فتح في MusicBrainz"
}
"musicbrainz": "فتح في MusicBrainz",
"listenbrainz": "فتح في ListenBrainz",
"qobuz": "فتح في Qobuz",
"spotify": "فتح في Spotify"
},
"addOrRemoveFromSelection": "إضافة أو إزالة من الإختيارات",
"selectRangeOfItems": "اختر مجموعة من العناصر",
"goToCurrent": "الانتقال إلى العنصر الحالي",
"createRadioStation": "إنشاء $t(entity.radioStation, {\"count\": 1})",
"deleteRadioStation": "يمسح $t(entity.radioStation, {\"count\": 1})",
"selectAll": "تحديد الكل",
"shuffle": "لخبط",
"shuffleAll": "لخبط الكل",
"shuffleSelected": "لخبط المحدد",
"collapseAllFolders": "اطو جميع المجلدات",
"expandAllFolders": "بسط الملفات",
"downloadStarted": "بدأ تحميل {{count}} عنصر",
"moveUp": "نقل إلى فوق",
"moveDown": "نقل إلى تحت",
"holdToMoveToTop": "اضغط مطولاً للنقل إلى الأعلى",
"holdToMoveToBottom": "اضغط مطولاً للنقل إلى الأسفل",
"moveItems": "نقل العناصر",
"viewMore": "عرض المزيد",
"openApplicationDirectory": "فتح مجلد التطبيق"
},
"common": {
"action_zero": "عملية",
@@ -33,13 +55,13 @@
"add": "إضافة",
"additionalParticipants": "مشاركين إضافيين",
"newVersion": "تم تثبيت تحديث جديد {{version}}",
"viewReleaseNotes": "عرض معلومات الإصدار",
"viewReleaseNotes": "عرض ملاحظات الإصدار",
"albumGain": "مستوى صوت الألبوم",
"albumPeak": "اعلى مستوى للألبوم",
"areYouSure": "هل أنت متأكد؟",
"ascending": "تصاعدي",
"backward": "خلف",
"biography": "سيرة",
"biography": "السيرة",
"bitDepth": "عمق البت",
"bitrate": "معدل البت (البت ريت)",
"bpm": "نبضة في الدقيقة",
@@ -135,7 +157,35 @@
"unknown": "غير معروف",
"version": "الإصدار",
"year": "السنة",
"yes": "نعم"
"yes": "نعم",
"explicitStatus": "حالة المحتوى الصريح",
"countSelected": "{{count}} عنصر محدد",
"back": "للخلف",
"doNotShowAgain": "لا تظهر هذا مجدداً",
"view": "عرض",
"example": "مثال",
"externalLinks": "روابط الخارجية",
"openFolder": "فتح المجلد",
"faster": "أسرع",
"filter_single": "فردي",
"filter_multiple": "متعدد",
"grouping": "مجموعات",
"mood": "مزاج",
"numberOfResults": "{{numberOfResults}} نتيجة",
"noFilters": "لا توجد فلاتر معينة",
"private": "خاص",
"public": "عام",
"retry": "إعادة المحاولة",
"recordLabel": "شركة التسجيل",
"releaseType": "نوع الإصدار",
"rename": "إعادة تسمية",
"slower": "أبطأ",
"sort": "فرز",
"explicit": "صريح",
"clean": "نظيف",
"gridRows": "صفوف الشبكة",
"tableColumns": "أعمدة الجدول",
"newVersionAvailable": "هناك نسخة جديدة متاحة"
},
"entity": {
"album_zero": "الالبوم",
@@ -149,6 +199,296 @@
"albumArtist_two": "فنان الالبومين",
"albumArtist_few": "فنان الالبومات",
"albumArtist_many": "فنان الالبومات",
"albumArtist_other": "فنان الالبومات"
"albumArtist_other": "فنان الالبومات",
"albumArtistCount_zero": "{{count}} فنان الالبوم",
"albumArtistCount_one": "{{count}} فنان الالبوم",
"albumArtistCount_two": "{{count}} فنان الالبومين",
"albumArtistCount_few": "{{count}} فنان الالبومات",
"albumArtistCount_many": "{{count}} فنان الالبومات",
"albumArtistCount_other": "{{count}} فنان الالبومات",
"albumWithCount_zero": "{{count}} البوم",
"albumWithCount_one": "{{count}} البوم",
"albumWithCount_two": "{{count}} البومين",
"albumWithCount_few": "{{count}} البومات",
"albumWithCount_many": "{{count}} البومات",
"albumWithCount_other": "{{count}} البومات",
"radioStation_zero": "محطة راديو",
"radioStation_one": "محطة راديو",
"radioStation_two": "محطتان راديو",
"radioStation_few": "محطات راديو",
"radioStation_many": "محطات راديو",
"radioStation_other": "محطات راديو",
"radioStationWithCount_zero": "{{count}} محطة راديو",
"radioStationWithCount_one": "{{count}} محطة راديو",
"radioStationWithCount_two": "{{count}} محطتان راديو",
"radioStationWithCount_few": "{{count}} محطات راديو",
"radioStationWithCount_many": "{{count}} محطات راديو",
"radioStationWithCount_other": "{{count}} محطات راديو",
"artist_zero": "فنان",
"artist_one": "فنان",
"artist_two": "فنانان",
"artist_few": "فنانين",
"artist_many": "فنانين",
"artist_other": "فنانين",
"artistWithCount_zero": "{{count}} فنان",
"artistWithCount_one": "{{count}} فنان",
"artistWithCount_two": "{{count}} فنانان",
"artistWithCount_few": "{{count}} فنانين",
"artistWithCount_many": "{{count}} فنانين",
"artistWithCount_other": "{{count}} فنانين",
"favorite_zero": "مفضلة",
"favorite_one": "مفضلة",
"favorite_two": "مفضلتان",
"favorite_few": "مفضلات",
"favorite_many": "مفضلات",
"favorite_other": "مفضلات",
"folder_zero": "مجلد",
"folder_one": "مجلد",
"folder_two": "مجلدان",
"folder_few": "مجلدات",
"folder_many": "مجلدات",
"folder_other": "مجلدات",
"folderWithCount_zero": "{{count}} مجلد",
"folderWithCount_one": "{{count}} مجلد",
"folderWithCount_two": "{{count}} مجلدان",
"folderWithCount_few": "{{count}} مجلدات",
"folderWithCount_many": "{{count}} مجلدات",
"folderWithCount_other": "{{count}} مجلدات",
"genre_zero": "نوع",
"genre_one": "نوع",
"genre_two": "نوعان",
"genre_few": "أنواع",
"genre_many": "أنواع",
"genre_other": "أنواع",
"genreWithCount_zero": "{{count}} نوع",
"genreWithCount_one": "{{count}} نوع",
"genreWithCount_two": "{{count}} نوعان",
"genreWithCount_few": "{{count}} أنواع",
"genreWithCount_many": "{{count}} أنواع",
"genreWithCount_other": "{{count}} أنواع",
"playlist_zero": "قائمة تشغيل",
"playlist_one": "قائمة تشغيل",
"playlist_two": "قائمتان تشغيل",
"playlist_few": "قوائم تشغيل",
"playlist_many": "قوائم تشغيل",
"playlist_other": "قوائم تشغيل",
"play_zero": "{{count}} قائمة تشغيل",
"play_one": "{{count}} قائمة تشغيل",
"play_two": "{{count}} قائمتان تشغيل",
"play_few": "{{count}} قوائم تشغيل",
"play_many": "{{count}} قوائم تشغيل",
"play_other": "{{count}} قوائم تشغيل",
"playlistWithCount_zero": "{{count}} قائمة تشغيل",
"playlistWithCount_one": "{{count}} قائمة تشغيل",
"playlistWithCount_two": "{{count}} قائمتان تشغيل",
"playlistWithCount_few": "{{count}} قوائم تشغيل",
"playlistWithCount_many": "{{count}} قوائم تشغيل",
"playlistWithCount_other": "{{count}} قوائم تشغيل",
"smartPlaylist": "$t(entity.playlist, {\"count\": 1}) قائمة تشغيل ذكية",
"track_zero": "مقطع",
"track_one": "مقطع",
"track_two": "مقطعان",
"track_few": "مقاطع",
"track_many": "مقاطع",
"track_other": "مقاطع",
"song_zero": "أغنية",
"song_one": "أغنية",
"song_two": "أغنيتان",
"song_few": "أغاني",
"song_many": "أغاني",
"song_other": "أغاني",
"trackWithCount_zero": "{{count}} مقطع",
"trackWithCount_one": "{{count}} مقطع",
"trackWithCount_two": "{{count}} مقطعان",
"trackWithCount_few": "{{count}} مقاطع",
"trackWithCount_many": "{{count}} مقاطع",
"trackWithCount_other": "{{count}} مقاطع"
},
"error": {
"apiRouteError": "تعذّر توجيه الطلب",
"audioDeviceFetchError": "حصل خطأ أثناء محاولة الحصول على أجهزة الصوت",
"authenticationFailed": "فشلت المصادقة",
"badAlbum": "أنت ترى هذة الصفحة لأن هذه الأغنية ليست جزءاً من ألبوم. على الأرجح تظهر لك هذه المشكلة إذا كان لديك أغنية في المستوى الأعلى من مجلد الموسيقى. يقوم Jellyfin بتجميع الأغاني فقط إذا كانت داخل مجلد",
"credentialsRequired": "يتطلب بيانات اعتماد",
"genericError": "حدث خطأ",
"loginRateError": "تجاوزت الحد لمحاولات الدخول. حاول مجدداً بعد بضع ثوان",
"mpvRequired": "يتطلب MPV",
"multipleServerSaveQueueError": "قائمة التشغيل تحتوي على أغنية أو أكثر من خادم مختلف. هذا غير مدعوم",
"networkError": "حصل خطأ في الشبكة",
"noNetwork": "الخادم غير متوفر",
"noNetworkDescription": "تعذر الإتصال بالخادم",
"notificationDenied": "تم رفض أذن الإشعارات. هذا الإعداد لن يكون له أي تأثير",
"openError": "تعذر فتح الملف",
"playbackError": "حدث خطأ أثناء محاولة تشغيل الوسائط",
"playbackPausedDueToError": "تم ايقاف التشغيل بسبب خطأ",
"remoteDisableError": "حدث خطأ أثناء محاولة $t(common.disable) الخادم البعيد",
"remoteEnableError": "حدث خطأ أثناء محاولة $t(common.enable) الخادم البعيد",
"remotePortError": "حدث خطأ أثناء محاولة تعيين الخادم البعيد",
"remotePortWarning": "أعد تشغيل الخادم لتطبيق المنفذ الجديد",
"saveQueueFailed": "فشل حفظ قائمة التشغيل",
"serverLockSingleServer": "فقط خادم واحد متاح إذا الخادم مقفل",
"serverNotSelectedError": "لم يتم اختيار أي خادم",
"serverRequired": "يتطلب خادم",
"sessionExpiredError": "انتهت صلاحية جلستك",
"systemFontError": "حدث خطأ أثناء محاولة الحصول على خطوط النظام",
"settingsSyncError": "تم اكتشاف تعارضات بين إعدادات العارض والعملية الرئيسية. أعد تشغيل التطبيق لتطبيق التغييرات",
"invalidJson": "JSON غير صالح",
"invalidServer": "خادم غير صالح",
"localFontAccessDenied": "تم رفض الوصول إلى الخطوط المحلية"
},
"filter": {
"album": "$t(entity.album, {\"count\": 1})",
"albumArtist": "$t(entity.albumArtist, {\"count\": 1})",
"matchAnd": "و",
"matchOr": "أو",
"biography": "السيرة",
"bitrate": "معدل البت (البت ريت)",
"bpm": "نبضة في الدقيقة",
"comment": "تعليق",
"communityRating": "تقييم المجتمع",
"criticRating": "تقييم الناقد",
"dateAdded": "تاريخ الإضافة",
"disc": "قرص",
"duration": "المدة",
"favorited": "مفضل",
"fromYear": "من سنة",
"id": "معرف",
"isFavorited": "مفضل",
"isPublic": "عام",
"isRated": "مقيم",
"isRecentlyPlayed": "تم التشغيل حديثاً",
"lastPlayed": "أخر تشغيل",
"mostPlayed": "أكثر تشغيل",
"name": "الأسم",
"note": "الملاحظة",
"path": "المسار",
"playCount": "عدد التشغيلات",
"random": "عشوائي",
"rating": "التقييم",
"recentlyAdded": "مضاف حديثاً",
"recentlyPlayed": "تم التشغيل حديثاً",
"recentlyUpdated": "محدث حديثاً",
"releaseDate": "تاريخ الإصدار",
"releaseYear": "سنة الإصدار",
"search": "بحث",
"songCount": "عدد الأغاني",
"sortName": "أسم الفرز",
"title": "العنوان",
"toYear": "إلى سنة",
"trackNumber": "مقطع",
"isCompilation": "تجميعة"
},
"datetime": {
"minuteShort": "د",
"secondShort": "ث",
"hourShort": "س",
"dayShort": "ي"
},
"filterOperator": {
"after": "بعد",
"afterDate": "بعد (تاريخ)",
"before": "قبل",
"beforeDate": "قبل (تاريخ)",
"contains": "يحتوي على",
"endsWith": "ينتهي بـ",
"inPlaylist": "في",
"inTheLast": "في أخِر",
"inTheRange": "في مدى",
"inTheRangeDate": "في مدى (تاريخ)",
"is": "في",
"isNot": "ليس في",
"isGreaterThan": "أكبر من",
"isLessThan": "أقل من",
"matchesRegex": "يطابق التعبير النمطي",
"notContains": "لا يحتوي على",
"notInPlaylist": "ليس في",
"notInTheLast": "ليس في أخِر",
"startsWith": "يبدأ بـ"
},
"form": {
"addServer": {
"error_savePassword": "حدث خطأ أثناء محاولة حفظ كلمة السر",
"input_legacyAuthentication": "تفعيل المصادقة القديمة",
"input_name": "أسم الخادم",
"input_password": "كلمة السر",
"input_preferRemoteUrl": "تفضيل رابط عام",
"input_remoteUrl": "رابط عام",
"input_savePassword": "حفظ كلمة السر",
"input_url": "الرابط",
"input_username": "أسم المستخدم",
"success": "تمت إضافة الخادم بنجاح",
"title": "إضافة خادم",
"input_preferInstantMix": "تفضيل الميكس الفوري",
"input_preferInstantMixDescription": "استخدم الميكس الفوري فقط للحصول على أغاني مشابهة. مفيد إذا كان لديك إضافات تعدّل هذا السلوك",
"input_remoteUrlPlaceholder": "اختياري: عنوان URL عام للميزات الخارجية"
},
"largeFetchConfirmation": {
"title": "أضف العناصر إلى قائمة التشغيل",
"description": "سيقوم هذا الإجراء بإضافة جميع العناصر في العرض المفلتر الحالي"
},
"addToPlaylist": {
"input_skipDuplicates": "تخطي العناصر المكررة",
"title": "أضف إلى $t(entity.playlist, {\"count\": 1})",
"create": "إنشاء $t(entity.playlist, {\"count\": 1}) {{playlist}}"
},
"createPlaylist": {
"input_public": "عام"
},
"createRadioStation": {
"input_homepageUrl": "رابط الرئيسية",
"input_name": "الأسم",
"input_streamUrl": "رابط البث",
"success": "تم إنشاء محطة راديو جديدة بنجاح",
"title": "إنشاء محطة راديو"
},
"editRadioStation": {
"success": "تم تحديث محطة الراديو بنجاح"
},
"deletePlaylist": {
"input_confirm": "أكتب أسم $t(entity.playlist, {\"count\": 1}) للتأكيد",
"success": "تم حذف $t(entity.playlist, {\"count\": 1}) بنجاح",
"title": "حذف $t(entity.playlist, {\"count\": 1})"
},
"editPlaylist": {
"success": "تم تحديث $t(entity.playlist, {\"count\": 1}) بنجاح",
"title": "تعديل $t(entity.playlist, {\"count\": 1})",
"publicJellyfinNote": "لسبب ما، لا يكشف Jellyfin عما إذا كانت قائمة التشغيل عامة أم لا. إذا كنت ترغب في إبقائها عامة، يرجى التأكد من تحديد الخيار التالي"
},
"lyricsExport": {
"export": "تصدير الكلمات",
"input_synced": "تصدير الكلمات المتزامنة"
},
"lyricSearch": {
"title": "البحث بالكلمات"
},
"queryEditor": {
"input_optionMatchAll": "تطابق الجميع",
"input_optionMatchAny": "تطابق أي",
"title": "محرر الاستعلامات",
"addRuleGroup": "إضافة مجموعة قواعد",
"removeRuleGroup": "إزالة مجموعة قواعد",
"resetToDefault": "استعادة الإعدادات الافتراضية"
},
"shareItem": {
"allowDownloading": "السماح بالتحميل",
"description": "الوصف"
},
"shuffleAll": {
"title": "تشغيل عشوائي",
"input_kind_albums": "ألبومات",
"input_kind_songs": "أغاني",
"input_kind": "إختيارات عشوائية",
"input_minYear": "من سنة",
"input_maxYear": "إلى سنة"
},
"updateServer": {
"success": "تم تحديث الخادم بنجاح",
"title": "تحديث الخادم"
}
},
"page": {
"albumArtistDetail": {
"favoriteSongs": "الأغاني المفضلة"
}
}
}
+1027 -906
View File
File diff suppressed because it is too large Load Diff
+1013 -902
View File
File diff suppressed because it is too large Load Diff
+870 -872
View File
File diff suppressed because it is too large Load Diff
+627 -368
View File
File diff suppressed because it is too large Load Diff
Executable → Regular
+1015 -882
View File
File diff suppressed because it is too large Load Diff
+711 -564
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+817 -715
View File
File diff suppressed because it is too large Load Diff
+8 -8
View File
@@ -12,7 +12,7 @@
"unfavorite": "حذف از موردعلاقه‌ها",
"shuffle_off": "پخش تصادفی غیر فعال",
"skip_forward": "برو جلو",
"queue_moveToTop": "جابجا کردن انتخاب شده به پایین",
"queue_moveToTop": "جابجا کردن انتخاب شده به بالا",
"queue_clear": "خالی کردن صف",
"queue_remove": "حذف انتخاب شده",
"addLast": "افزودن به پایان",
@@ -24,7 +24,7 @@
"mute": "بی‌صدا کردن",
"playbackFetchCancel": "دارد طول می‌کشد... برای لفو کردن اعلان را ببندید",
"playbackFetchInProgress": "بارگذاری قطعه‌ها…",
"queue_moveToBottom": "جابجا کردن انتخاب شده به بالا",
"queue_moveToBottom": "جابجا کردن انتخاب شده به پایین",
"addNext": "افزودن به پسین",
"favorite": "مورد علاقه",
"playSimilarSongs": "پخش آهنگ‌های همگون",
@@ -70,7 +70,7 @@
"hotkey_rate1": "امتیاز ۱ ستاره",
"hotkey_skipForward": "برو جلو",
"disableLibraryUpdateOnStartup": "غیرفعال کردن بررسی آخرین نسخه در آغاز به کار برنامه",
"discordApplicationId_description": "the application id for {{discord}} rich presence (defaults to {{defaultId}})",
"discordApplicationId_description": "the application ID for {{discord}} Rich Presence (defaults to {{defaultId}})",
"playButtonBehavior_optionAddLast": "$t(player.addLast)",
"hotkey_playbackPlay": "پخش",
"hotkey_volumeDown": "کم کردن صدا",
@@ -109,7 +109,7 @@
"customFontPath": "مسیر قلم سفارشی",
"audioPlayer": "پخش‌کنندهٔ صدا",
"hotkey_rate0": "حذف امتیاز",
"discordApplicationId": "{{discord}} application id",
"discordApplicationId": "{{discord}} application ID",
"hotkey_volumeMute": "بستن صدا",
"showSkipButton": "نمایش دکمهٔ رد کردن",
"customFontPath_description": "مسیر قلم سفارشی را برای استفاده در اپلیکیشن مشخص کنید",
@@ -132,7 +132,7 @@
"buttonSize": "اندازه‌ی دکمه‌ی پخش نوار",
"contextMenu": "پیکربندی فهرست زمینه (کلیک راست)",
"buttonSize_description": "اندازه‌ی دکمه‌های پخش نوار",
"audioExclusiveMode_description": "حالت اختصاصی خروجی را فعال می‌کند. در این حالت، سامانه معمولاً قفل است و فقط mpv می‌تواند خروجی صدا دهد",
"audioExclusiveMode_description": "حالت اختصاصی خروجی را فعال می‌کند. در این حالت، سامانه معمولاً قفل است و فقط MPV می‌تواند خروجی صدا دهد",
"clearQueryCache_description": "یک 'پاک‌سازی نرم' از فیشین. این فهرست‌های پخش و فراداده‌ی قطعه‌ها را تازه می‌کند و متن شعرهای ذخیره شده را بازنشانی می‌کند. پیکربندی‌ها، اعتبارنامه‌های سرویس‌دهنده و نگاره‌های کَش شده حفظ می‌شوند",
"clearCache_description": "یک 'پاک‌سازی سخت' فیشین. افزون بر پاک‌سازی کَش فیشین، کَش مرورگر هم تهی می‌شود (نگاره‌های ذخیره شده و باقی دارایی‌ها). اعتبارنامه‌ها و پیکربندی‌ها حفظ می‌شوند",
"contextMenu_description": "به شما اجازه می‌دهد که آیتم‌های نمایش داده شده در فهرستی که وقتی روی یک آیتم کلیک راست می‌کنید پدیدار می‌شود، را پنهان کنید. آیتم‌هایی که منتخب نیستند پنهان می‌شوند",
@@ -176,7 +176,7 @@
"backward": "به عقب",
"increase": "افزایش",
"rating": "امتیاز",
"bpm": "bpm",
"bpm": "BPM",
"refresh": "تازه‌سازی",
"unknown": "ناشناخته",
"areYouSure": "مطمئنید؟",
@@ -313,9 +313,9 @@
"albumArtist": "$t(entity.albumArtist, {\"count\": 1})",
"isRecentlyPlayed": "به تازگی پخش شده است",
"isFavorited": "موردعلاقه است",
"bpm": "bpm",
"bpm": "BPM",
"releaseYear": "سال انتشار",
"id": "id",
"id": "ID",
"disc": "دیسک",
"biography": "زندگی‌نامه",
"songCount": "تعداد ترانه",
+801 -604
View File
File diff suppressed because it is too large Load Diff
+1139 -913
View File
File diff suppressed because it is too large Load Diff
+727 -729
View File
File diff suppressed because it is too large Load Diff
+952 -844
View File
File diff suppressed because it is too large Load Diff
+842 -596
View File
File diff suppressed because it is too large Load Diff
+392 -106
View File
@@ -7,7 +7,7 @@
"playRandom": "ランダム再生",
"skip": "スキップ",
"previous": "前へ",
"toggleFullscreenPlayer": "フルスクリーンプレーヤー切り替え",
"toggleFullscreenPlayer": "全画面プレーヤー切り替え",
"skip_back": "前へスキップ",
"favorite": "お気に入り",
"next": "次へ",
@@ -22,20 +22,35 @@
"queue_clear": "キューをクリア",
"muted": "ミュート中",
"unfavorite": "お気に入り解除",
"queue_moveToTop": "選択項目を一番下に移動",
"queue_moveToBottom": "選択項目を先頭に移動",
"queue_moveToTop": "選択項目を先頭に移動",
"queue_moveToBottom": "選択項目を一番下に移動",
"shuffle_off": "シャッフル無効",
"addLast": "最後",
"mute": "ミュート",
"skip_forward": "次へスキップ",
"pause": "一時停止",
"playSimilarSongs": "似たような曲を再生する",
"viewQueue": "キューを表示する",
"viewQueue": "キューを表示",
"lyrics": "歌詞",
"restoreQueueFromServer": "サーバーからキューを復元",
"saveQueueToServer": "サーバーにキューを保存",
"addLastShuffled": "最後 (シャッフル)",
"addNextShuffled": "次 (シャッフル)"
"addNextShuffled": "次 (シャッフル)",
"sleepTimer_minutes": "{{count}} 分",
"sleepTimer_hours": "{{count}} 時間",
"sleepTimer": "スリープタイマー",
"sleepTimer_endOfSong": "現在の曲の終わり",
"sleepTimer_custom": "カスタム",
"sleepTimer_off": "オフ",
"sleepTimer_timeRemaining": "残り {{time}}",
"sleepTimer_setCustom": "タイマーを設定",
"sleepTimer_cancel": "タイマーをキャンセル",
"holdToShuffle": "長押しでシャッフル",
"albumRadio": "アルバム・ラジオ",
"artistRadio": "アーティストラジオ",
"trackRadio": "ラジオを追跡する",
"scrobbleForceSubmit": "強制 Scrobble",
"sleepTimer_endOfAlbum": "現在のアルバムの終了"
},
"setting": {
"crossfadeStyle_description": "オーディオプレーヤーが使用するクロスフェードのスタイルを選択します",
@@ -43,11 +58,11 @@
"hotkey_skipBackward": "前にスキップ",
"replayGainMode_description": "ファイルのメタデータに保存されている {{ReplayGain}} 値に従って音量ゲインを調整します",
"volumeWheelStep_description": "音量スライダーでマウスホイールをスクロールしたときに変化する音量を設定します",
"audioDevice_description": "再生に使用するオーディオデバイスを選択します (Web プレーヤーのみ)",
"audioDevice_description": "再生に使用するオーディオデバイスを選択します",
"theme_description": "アプリケーションに使用するテーマを設定します",
"hotkey_playbackPause": "一時停止",
"replayGainFallback": "{{ReplayGain}} フォールバック",
"sidebarCollapsedNavigation_description": "折りたたサイドバーのナビゲーションを表示/非表示にします",
"sidebarCollapsedNavigation_description": "折りたたまれたサイドバーのナビゲーションを表示または非表示にします",
"hotkey_volumeUp": "音量を上げる",
"skipDuration": "スキップの長さ",
"discordIdleStatus_description": "有効にすると、プレーヤーがアイドル状態でもステータスを更新します",
@@ -62,7 +77,7 @@
"mpvExecutablePath_description": "MPV を実行するファイルパスを設定します。空のままにすると、デフォルトのパスが使用されます",
"replayGainClipping_description": "自動的にゲインを下げて {{ReplayGain}} によるクリッピングを防ぎます",
"replayGainPreamp": "{{ReplayGain}} プリアンプ (dB)",
"hotkey_favoriteCurrentSong": "$t(common.currentSong) をお気に入り",
"hotkey_favoriteCurrentSong": "$t(common.currentSong) をお気に入りに登録",
"sampleRate": "サンプルレート",
"sidePlayQueueStyle_optionAttached": "結合",
"sidebarConfiguration": "サイドバー設定",
@@ -72,24 +87,24 @@
"hotkey_zoomIn": "拡大",
"scrobble_description": "再生した音楽をメディアサーバーから Scrobble します",
"hotkey_browserForward": "ブラウザ 進む",
"audioExclusiveMode_description": "排他出力モードを有効にします。このモードでは、システムの他の出力がロックされ、MPV のみがオーディオを出力できるようになります",
"discordUpdateInterval": "{{discord}} Rich Presenceアップデート間隔",
"audioExclusiveMode_description": "排他出力モードを有効にします。このモードでは、システムの他の出力がロックされ、MPV のみがオーディオを出力できるようになります。このモードが有効になっている間は、ビジュアライザーやシステムオーディオのキャプチャ機能は動作しません",
"discordUpdateInterval": "{{discord}} Rich Presence の更新間隔",
"themeLight": "テーマ (ライト)",
"fontType_optionBuiltIn": "組み込みフォント",
"hotkey_playbackPlayPause": "再生 / 一時停止",
"hotkey_rate1": "1つ星で評価",
"hotkey_rate1": "1 つ星で評価",
"hotkey_skipForward": "次へスキップ",
"disableLibraryUpdateOnStartup": "起動時の新バージョンチェックを無効にします",
"discordApplicationId_description": "{{discord}} に Rich Presence ステータスを表示するためのアプリケーション ID (デフォルトは {{defaultId}} です)",
"sidePlayQueueStyle": "サイド再生キュースタイル",
"sidePlayQueueStyle": "サイド再生キューの形式",
"gaplessAudio": "ギャップレス再生",
"playButtonBehavior_optionAddLast": "$t(player.addLast)",
"zoom": "ズーム率",
"minimizeToTray_description": "最小化ボタンが押された際、システムトレイに格納します",
"hotkey_playbackPlay": "再生",
"hotkey_togglePreviousSongFavorite": "$t(common.previousSong) お気に入り登録/解除",
"hotkey_togglePreviousSongFavorite": "$t(common.previousSong) お気に入りを切り替え",
"hotkey_volumeDown": "音量を下げる",
"hotkey_unfavoritePreviousSong": "$t(common.previousSong) をお気に入り解除",
"hotkey_unfavoritePreviousSong": "$t(common.previousSong) をお気に入りから解除",
"audioPlayer_description": "再生に使用するオーディオプレーヤーを選択します",
"globalMediaHotkeys": "グローバルメディアホットキー",
"hotkey_globalSearch": "グローバル検索",
@@ -97,10 +112,10 @@
"remoteUsername_description": "リモートコントロール サーバーのユーザ名を設定します。 ユーザー名とパスワードの両方が空の場合、認証は無効になります",
"exitToTray_description": "アプリケーション終了ボタンが押された際、システムトレイに格納します",
"followLyric_description": "現在の再生位置に歌詞をスクロールします",
"hotkey_favoritePreviousSong": "$t(common.previousSong) をお気に入り",
"hotkey_favoritePreviousSong": "$t(common.previousSong) をお気に入りに登録",
"replayGainMode_optionAlbum": "$t(entity.album, {\"count\": 1})",
"lyricOffset": "歌詞のオフセット (ミリ秒)",
"discordUpdateInterval_description": "更新間隔 (秒単位, 最小15秒)",
"discordUpdateInterval_description": "更新間隔 (秒単位最小 15 秒)",
"fontType_optionCustom": "カスタムフォント",
"themeDark_description": "アプリケーションに使用するダークテーマを設定します",
"audioExclusiveMode": "オーディオ排他モード",
@@ -108,16 +123,16 @@
"lyricFetchProvider": "歌詞取得先",
"language_description": "アプリケーションの言語を設定します ($t(common.restartRequired))",
"playbackStyle_optionCrossFade": "クロスフェード",
"hotkey_rate3": "3つ星で評価",
"hotkey_rate3": "3 つ星で評価",
"font": "フォント",
"replayGainMode_optionTrack": "$t(entity.track, {\"count\": 1})",
"themeLight_description": "アプリケーションに使用するライトテーマを設定します",
"hotkey_toggleFullScreenPlayer": "フルスクリーンプレーヤー切り替え",
"hotkey_toggleFullScreenPlayer": "全画面プレーヤー切り替え",
"hotkey_localSearch": "ページ内検索",
"hotkey_toggleQueue": "キューの切り替え",
"zoom_description": "アプリケーションのズーム率を設定します",
"remotePassword_description": "リモートコントロール サーバーのパスワードを設定します。 ログイン情報はデフォルトでセキュアな通信がされないため、個人情報と関係ないランダムなパスワードを利用してください",
"hotkey_rate5": "5つ星で評価",
"hotkey_rate5": "5 つ星で評価",
"hotkey_playbackPrevious": "前のトラック",
"showSkipButtons_description": "プレーヤーバーのスキップボタンを表示または非表示にします",
"crossfadeDuration_description": "クロスフェード効果の時間を設定します",
@@ -128,11 +143,11 @@
"discordRichPresence_description": "{{discord}} Rich Presence で再生ステータスを有効にします。画像キー: {{icon}}, {{playing}}, {{paused}}",
"mpvExecutablePath": "MPV 実行ファイルパス",
"audioDevice": "オーディオデバイス",
"hotkey_rate2": "2つ星で評価",
"hotkey_rate2": "2 つ星で評価",
"playButtonBehavior_description": "キューに曲を追加するときの再生ボタンのデフォルトの動作を設定します",
"minimumScrobblePercentage_description": "Scrobble されるために必要な最短の再生時間 (%)",
"exitToTray": "終了時にシステムトレイに格納",
"hotkey_rate4": "4つ星で評価",
"hotkey_rate4": "4 つ星で評価",
"enableRemote": "リモートコントロール サーバーを有効化",
"showSkipButton_description": "プレーヤーバーのスキップボタンを表示または非表示にします",
"savePlayQueue": "再生キューを保存",
@@ -141,9 +156,9 @@
"fontType_description": "組み込みフォントの場合、Feishin が提供するフォントの中から 1 つ選択します。 システムフォントの場合、OS が提供する任意のフォントを選択できます。 カスタムフォントの場合、フォントファイルを自身で選択できます",
"playButtonBehavior": "再生ボタンの動作",
"volumeWheelStep": "音量ホイールステップ",
"sidebarPlaylistList_description": "サイドバープレイリストのリストを表示/非表示にします",
"sidebarPlaylistList_description": "サイドバープレイリストを表示または非表示にします",
"accentColor": "アクセントカラー",
"sidePlayQueueStyle_description": "サイド再生キューのスタイルを設定します",
"sidePlayQueueStyle_description": "サイド再生キューの形式を設定します",
"accentColor_description": "アプリケーションが利用するアクセントカラーを設定します",
"replayGainMode": "{{ReplayGain}} モード",
"playbackStyle_optionNormal": "通常",
@@ -152,7 +167,7 @@
"replayGainPreamp_description": "{{ReplayGain}} の値に適用されるプリアンプゲインを調整します",
"hotkey_toggleRepeat": "リピートの切り替え",
"lyricOffset_description": "歌詞のオフセットをミリ秒単位で指定します",
"sidebarConfiguration_description": "サイドバーに表示されるアイテムと並び順を選択します",
"sidebarConfiguration_description": "サイドバーに表示する項目と順序を選択します",
"fontType": "フォントタイプ",
"remotePort": "リモートコントロールサーバーのポート",
"applicationHotkeys": "アプリケーションホットキー",
@@ -169,16 +184,16 @@
"sidePlayQueueStyle_optionDetached": "分離",
"audioPlayer": "オーディオプレーヤー",
"hotkey_zoomOut": "縮小",
"hotkey_unfavoriteCurrentSong": "$t(common.currentSong) をお気に入り解除",
"hotkey_unfavoriteCurrentSong": "$t(common.currentSong) をお気に入りから解除",
"hotkey_rate0": "評価をクリア",
"discordApplicationId": "{{discord}} アプリケーション ID",
"applicationHotkeys_description": "アプリケーションのホットキーを設定します。チェックボックスを切り替えて、グローバルホットキーとして設定します (デスクトップのみ)",
"hotkey_volumeMute": "音量をミュート",
"hotkey_toggleCurrentSongFavorite": "$t(common.currentSong) お気に入り登録/解除",
"hotkey_toggleCurrentSongFavorite": "$t(common.currentSong) お気に入りを切り替え",
"remoteUsername": "リモートコントロールサーバーのユーザー名",
"hotkey_browserBack": "ブラウザ 戻る",
"showSkipButton": "スキップボタンを表示",
"sidebarPlaylistList": "サイドバー プレイリスト リスト",
"sidebarPlaylistList": "サイドバープレイリスト",
"minimizeToTray": "最小化時にシステムトレイに格納",
"skipPlaylistPage": "プレイリストページをスキップ",
"themeDark": "テーマ (ダーク)",
@@ -206,10 +221,10 @@
"trayEnabled": "トレイを表示する",
"volumeWidth_description": "音量スライダーの幅",
"volumeWidth": "音量スライダーの幅",
"webAudio_description": "Web Audio を使用します。これにより、リプレイゲインなどの高度な機能が有効になります。それ以外の場合は無効にしてください",
"webAudio_description": "Web Audio を使用します。これにより、リプレイゲインなどの高度な機能が有効になります。問題が発生した場合は無効にしてください",
"mpvExtraParameters_help": "1 行に 1 つずつ",
"musicbrainz_description": "MusicBrainz ID が存在するアーティスト/アルバムページに MusicBrainz へのリンクを表示します",
"musicbrainz": "MusicBrainz リンクを表示する",
"musicbrainz_description": "MusicBrainz ID が存在するアーティストアルバムページに MusicBrainz へのリンクを表示します",
"musicbrainz": "MusicBrainz リンクを表示",
"neteaseTranslation_description": "有効にすると、利用可能な場合は NetEase から翻訳された歌詞を取得して表示します",
"neteaseTranslation": "NetEase 翻訳歌詞を有効にする",
"passwordStore_description": "使用するパスワード / シークレットストア。パスワードの保存に問題がある場合はこれを変更してください",
@@ -225,8 +240,8 @@
"imageAspectRatio": "ネイティブのカバーアートの縦横比を使用する",
"language": "言語",
"imageAspectRatio_description": "有効にすると、カバーアートはネイティブの縦横比で表示されます。縦横比が 1:1 でない場合、残りのスペースは空白になります",
"lastfm_description": "アーティスト/アルバムページに Last.fm へのリンクを表示します",
"lastfm": "Last.fm リンクを表示する",
"lastfm_description": "アーティストアルバムページに Last.fm へのリンクを表示します",
"lastfm": "Last.fm リンクを表示",
"lastfmApiKey": "{{lastfm}} API キー",
"homeConfiguration_description": "ホーム画面に表示する項目と表示順序を設定します",
"homeConfiguration": "ホーム画面の設定",
@@ -246,8 +261,8 @@
"artistConfiguration_description": "アルバムアーティストページに表示するアイテムと順序を設定します",
"buttonSize_description": "プレーヤーバーのボタンのサイズ",
"buttonSize": "プレーヤーバーのボタンサイズ",
"clearCache_description": "Feishin の「ハードクリア」。Feishin のキャッシュをクリアするだけでなく、ブラウザのキャッシュ (保存された画像やその他のアセット) も空にします。サーバーの資格情報や設定は保持されます",
"clearCache": "ブラウザのキャッシュをクリアする",
"clearCache_description": "Feishin の「ハードクリア」。Feishin のキャッシュをクリアするだけでなく、ブラウザのキャッシュ (保存された画像やその他のアセット) も空にします。サーバーの資格情報や設定は保持されます",
"clearCache": "ブラウザのキャッシュをクリア",
"clearCacheSuccess": "キャッシュが正常にクリアされました",
"clearQueryCache_description": "Feishin の「ソフトクリア」。これにより、プレイリストとトラックのメタデータが更新され、保存された歌詞がリセットされます。設定、サーバーの資格情報、キャッシュされた画像は保持されます",
"clearQueryCache": "Feishin のキャッシュをクリアする",
@@ -258,15 +273,15 @@
"customCss": "カスタム CSS",
"customCssEnable_description": "カスタム CSS の記述を許可します",
"customCssEnable": "カスタム CSS を有効にする",
"customCssNotice": "警告: ある程度のサニタイズ (url() と content: の禁止) はありますが、カスタム CSS を使用するとインターフェースの変更によりリスクが生じる可能性があります",
"customCssNotice": "警告: ある程度のサニタイズ (URL() と content: の禁止) はありますが、カスタム CSS を使用するとインターフェースの変更によりリスクが生じる可能性があります",
"releaseChannel_optionBeta": "ベータ",
"releaseChannel_optionLatest": "最新",
"releaseChannel": "リリースチャンネル",
"releaseChannel_description": "自動更新のために安定版リリースまたはベータ版リリース選択してください",
"releaseChannel_description": "自動更新のために安定版、ベータ版、またはアルファ版 (nightly build) リリースから選択してください",
"discordDisplayType_artistname": "アーティスト名",
"discordDisplayType_songname": "曲名",
"discordLinkType_description": "{{discord}} Rich Presence において、曲とアーティストのフィールドに {{lastfm}} または {{musicbrainz}} への外部リンクを追加します。{{musicbrainz}} は最も正確ですが、タグが必要でアーティストリンクを提供しません。一方、{{lastfm}} は常にリンクを提供します。追加のネットワークリクエストは発生しません",
"discordPausedStatus": "一時停止時に Rich Presence を表示する",
"discordPausedStatus": "一時停止時に Rich Presence を表示",
"discordRichPresence": "{{discord}} Rich Presence",
"discordServeImage_description": "{{discord}} Rich Presence 用のカバーアートをサーバーから共有します。Jellyfin と Navidrome でのみ利用できます。{{discord}} は bot を使用して画像を取得するため、サーバーはパブリックインターネットからアクセスできる必要があります",
"exportImportSettings_control_exportText": "設定をエクスポート",
@@ -274,7 +289,7 @@
"exportImportSettings_control_title": "設定をインポート/エクスポート",
"exportImportSettings_control_description": "JSON 経由で設定をエクスポートおよびインポートする",
"exportImportSettings_destructiveWarning": "設定のインポートは破壊的です。下の「インポート」をクリックする前に、上記の内容を必ずご確認ください!",
"hotkey_navigateHome": "ホーム移動",
"hotkey_navigateHome": "ホーム画面へ移動",
"playButtonBehavior_optionPlayShuffled": "$t(player.shuffle)",
"playerbarOpenDrawer": "プレーヤーバーの全画面表示切り替え",
"transcode": "トランスコーディングを有効にする",
@@ -290,7 +305,7 @@
"discordDisplayType": "{{discord}} Presence 表示タイプ",
"discordLinkType_none": "$t(common.none)",
"discordListening_description": "Playing ではなく Listening としてステータスを表示します",
"discordListening": "ステータスを Listening として表示する",
"discordListening": "ステータスを Listening として表示",
"discordPausedStatus_description": "有効にすると、プレーヤーが一時停止されているときにもステータスを表示します",
"discordDisplayType_description": "ステータスで聴いている内容を変更します",
"discordLinkType": "{{discord}} Presence リンク",
@@ -301,7 +316,6 @@
"exportImportSettings_importSuccess": "設定が正常にインポートされました!",
"exportImportSettings_importModalTitle": "Feishin 設定をインポート",
"exportImportSettings_importBtn": "設定をインポート",
"autoDJ_description": "類似の曲を自動でキューに追加します",
"autoDJ": "自動 DJ",
"autoDJ_itemCount_description": "自動 DJ が有効なときにキューに追加しようとした曲数",
"autoDJ_itemCount": "曲数",
@@ -316,11 +330,11 @@
"followCurrentSong": "現在の曲をフォロー",
"followCurrentSong_description": "再生キューを現在再生中の曲まで自動的にスクロールします",
"logLevel": "ログレベル",
"logLevel_description": "表示するログの最小レベルを設定します。debug はすべてのログを表示し、error はエラーのみを表示します",
"logLevel_optionDebug": "debug",
"logLevel_optionError": "error",
"logLevel_optionInfo": "info",
"logLevel_optionWarn": "warn",
"logLevel_description": "表示するログの最小レベルを設定します。Debug はすべてのログを表示し、Error はエラーのみを表示します",
"logLevel_optionDebug": "Debug",
"logLevel_optionError": "Error",
"logLevel_optionInfo": "Info",
"logLevel_optionWarn": "Warn",
"playerFilters": "キューから曲をフィルタリング",
"playerFilters_description": "以下の基準に基づいて曲をキューに追加しないようにします",
"artistRadioCount": "アーティスト / トラックのラジオカウント",
@@ -328,7 +342,7 @@
"imageResolution": "画像の解像度",
"imageResolution_description": "アプリ内で使用される画像の解像度。値を 0 に設定すると、デフォルトでネイティブ画像解像度が適用されます",
"showLyricsInSidebar_description": "添付の再生キューに歌詞を表示するパネルが追加されます",
"showLyricsInSidebar": "プレーヤーのサイドバーに歌詞を表示する",
"showLyricsInSidebar": "サイドバーのプレーヤーに歌詞を表示",
"showRatings": "星評価を表示する",
"imageResolution_optionSidebar": "サイドバー",
"imageResolution_optionHeader": "ヘッダー",
@@ -339,12 +353,12 @@
"playerbarSliderType_optionWaveform": "波形",
"playerbarWaveformAlign": "波形アライメント",
"showRatings_description": "インターフェースに星評価機能を表示するかどうかを制御します",
"showVisualizerInSidebar": "プレーヤーのサイドバーにビジュアライザーを表示する",
"combinedLyricsAndVisualizer": "プレーヤーのサイドバーに歌詞とビジュアライザーを統合する",
"showVisualizerInSidebar": "サイドバーのプレーヤーにビジュアライザーを表示",
"combinedLyricsAndVisualizer": "サイドバーのプレーヤーに歌詞とビジュアライザーを統合",
"audioFadeOnStatusChange_description": "再生 / 一時停止の状態が変わったときにフェードアウトとフェードインを有効にします",
"audioFadeOnStatusChange": "ステータス変更時の音声フェード",
"combinedLyricsAndVisualizer_description": "歌詞とビジュアライザーを同じパネルに統合します",
"showVisualizerInSidebar_description": "プレーヤーのサイドバーにビジュアライザーを表示するパネルが追加されます",
"showVisualizerInSidebar_description": "サイドバーのプレーヤーにビジュアライザーを表示するパネルが追加されます",
"queryBuilderCustomFields": "カスタムフィールド",
"queryBuilderCustomFields_inputLabel": "ラベル",
"queryBuilderCustomFields_inputTag": "タグ",
@@ -359,12 +373,79 @@
"pathReplace": "ファイルパスの置換",
"pathReplace_description": "サーバーのデフォルトのファイルパスを置き換えます",
"pathReplace_optionRemovePrefix": "接頭辞を削除",
"pathReplace_optionAddPrefix": "接頭辞を追加"
"pathReplace_optionAddPrefix": "接頭辞を追加",
"analyticsEnable": "使用状況に基づく分析を送信する",
"analyticsEnable_description": "匿名化された利用データは、アプリケーションの改善のために開発者に送信されます",
"automaticUpdates": "自動更新",
"automaticUpdates_description": "更新を自動的に確認してインストールします",
"releaseChannel_optionAlpha": "アルファ (nightly)",
"discordStateIcon": "再生中アイコンを表示",
"discordStateIcon_description": "Rich Presence ステータスに小さな再生アイコンを表示します。「一時停止時に Rich Presence を表示」が有効になっている場合は、常に一時停止アイコンが表示されます",
"sidebarPlaylistListFilterRegex_description": "この正規表現に一致するプレイリストをサイドバーから非表示にします",
"sidebarPlaylistListFilterRegex_placeholder": "例: ^Daily Mix.*",
"sidebarPlaylistListFilterRegex": "プレイリストフィルターの正規表現",
"sidebarPlaylistSorting": "サイドバーでプレイリストを並べ替え",
"sidebarPlaylistSorting_description": "デフォルトのサーバー順ではなく、ドラッグアンドドロップを使用してサイドバーでプレイリストを手動で並べ替えることができます",
"playerItemConfiguration_description": "全画面プレーヤーに表示する項目と順序を設定します",
"playerItemConfiguration": "プレーヤーの項目設定",
"autosave": "再生キューを自動的に保存",
"autosave_description": "再生キューをサーバーに自動的に保存できるようにします。これは Navidrome/Subsonic を使用している場合にのみ可能であり、再生キューを混在させることはできません。",
"autosaveCount": "自動再生キューの保存頻度",
"autosaveCount_description": "キューが保存されるまでにトラックが変更される回数を設定します。1 (最小値) は曲が変わるたびに保存されることを意味します",
"useThemePrimaryShade_description": "選択したテーマで定義されたプライマリシェードをプライマリカラーのバリアントに使用します",
"useThemePrimaryShade": "テーマのプライマリシェードを使用",
"primaryShade": "プライマリシェード",
"primaryShade_description": "ボタン、リンク、およびその他の主要色要素に使用されるプライマリシェード (0–9) を上書きします",
"playerbarWaveformAlign_optionTop": "上部",
"playerbarWaveformAlign_optionCenter": "中央",
"playerbarWaveformAlign_optionBottom": "下部",
"imageResolution_optionTable": "表",
"imageResolution_optionItemCard": "アイテムカード",
"blurExplicitImages": "露骨な画像をぼかす",
"blurExplicitImages_description": "露骨な表現を含むタグが付けられたアルバムおよび楽曲のアートワークをぼかします",
"enableGridMultiSelect": "グリッドの複数選択を有効にする",
"enableGridMultiSelect_description": "有効にすると、グリッドビューで複数のアイテムを選択できます。無効にすると、グリッドアイテムの画像をクリックするとアイテムページに移動します",
"playerbarWaveformBarWidth": "波形バーの幅",
"playerbarWaveformGap": "波形ギャップ",
"playerbarWaveformRadius": "波形半径",
"hotkey_listNavigateToPage": "項目の詳細ページへ移動",
"hotkey_listPlayDefault": "リストを再生 (デフォルト)",
"hotkey_listPlayLast": "最後に再生",
"hotkey_listPlayNext": "次に再生",
"hotkey_listPlayNow": "今すぐ再生",
"spotify_description": "アーティストとアルバムページに Spotify へのリンクを表示します",
"spotify": "Spotify のリンクを表示",
"nativeSpotify_description": "ブラウザーの代わりに Spotify アプリで開きます",
"nativeSpotify": "Spotify アプリを使用",
"listenbrainz_description": "アーティストとアルバムページに ListenBrainz へのリンクを表示します",
"listenbrainz": "ListenBrainz のリンクを表示",
"qobuz_description": "アーティストとアルバムページに Qobuz へのリンクを表示します",
"qobuz": "Qobuz のリンクを表示",
"sidePlayQueueLayout": "サイド再生キューのレイアウト",
"sidePlayQueueLayout_description": "結合されたサイド再生キューのレイアウトを設定します",
"sidePlayQueueLayout_optionHorizontal": "水平",
"sidePlayQueueLayout_optionVertical": "垂直",
"waveformLoadingDelay": "波形読み込みの遅延",
"waveformLoadingDelay_description": "波形を読み込むまでの遅延時間(秒単位)を設定します。Web プレーヤー使用時にカクつきが発生する場合は、この値を増やしてください。",
"playerbarWaveformStretch": "波形伸縮",
"playerbarWaveformStretch_description": "波形を伸縮させて、利用可能なスペースを埋めます",
"preventSuspendOnPlayback_description": "音楽再生中にアプリケーションが停止しないようにします",
"preventSuspendOnPlayback": "再生の中断を防止する",
"hotkey_listShowPlayingSong": "再生中の曲をリストに表示",
"autoDJ_mode": "モード",
"autoDJ_mode_albums": "アルバム",
"autoDJ_mode_description": "キューに曲を追加するか、アルバム全体を追加するかを選択してください。",
"autoDJ_mode_songs": "曲",
"autoDJ_enabled": "Auto DJを有効にする",
"autoDJ_albumStrategy": "アルバム選択モード",
"autoDJ_songStrategy": "選曲モード",
"autoDJ_strategy_option_library_random": "ランダム",
"autoDJ_strategy_option_similar": "類似"
},
"action": {
"editPlaylist": "$t(entity.playlist, {\"count\": 1}) を編集",
"goToPage": "ページへ移動",
"moveToTop": "先頭に移動",
"moveToTop": "一番上へ移動",
"clearQueue": "キューをクリア",
"addToFavorites": "$t(entity.favorite, {\"count\": 2}) に追加",
"addToPlaylist": "$t(entity.playlist, {\"count\": 1}) に追加",
@@ -375,17 +456,20 @@
"deletePlaylist": "$t(entity.playlist, {\"count\": 1}) を削除",
"removeFromQueue": "キューから削除",
"deselectAll": "すべて選択解除",
"moveToBottom": "末尾に移動",
"setRating": "評価を設定する",
"toggleSmartPlaylistEditor": "$t(entity.smartPlaylist) エディタ切り替え",
"moveToBottom": "一番下へ移動",
"setRating": "評価を設定",
"toggleSmartPlaylistEditor": "$t(entity.smartPlaylist) エディターを切り替え",
"removeFromFavorites": "$t(entity.favorite, {\"count\": 2}) から削除",
"openIn": {
"lastfm": "Last.fm で開く",
"musicbrainz": "MusicBrainz で開く"
"musicbrainz": "MusicBrainz で開く",
"spotify": "Spotify で開く",
"listenbrainz": "ListenBrainz で開く",
"qobuz": "Qobuz で開く"
},
"moveToNext": "次",
"moveToNext": "次へ進む",
"downloadStarted": "{{count}} 曲のダウンロードを開始しました",
"moveItems": "を移動",
"moveItems": "項目を移動",
"shuffle": "シャッフル",
"shuffleAll": "すべてシャッフル",
"shuffleSelected": "選択した曲をシャッフル",
@@ -397,25 +481,28 @@
"moveDown": "下に移動",
"holdToMoveToTop": "押し続けると一番上に移動します",
"holdToMoveToBottom": "押し続けると一番下に移動します",
"openApplicationDirectory": "アプリケーションディレクトリを開く",
"openApplicationDirectory": "アプリディレクトリを開く",
"selectRangeOfItems": "項目の範囲を選択",
"addOrRemoveFromSelection": "選択に追加または削除"
"addOrRemoveFromSelection": "選択に追加または選択から除外",
"goToCurrent": "現在の項目へ移動",
"collapseAllFolders": "すべてのフォルダーを折りたたむ",
"expandAllFolders": "すべてのフォルダーを展開する"
},
"common": {
"backward": "戻る",
"backward": "逆行",
"increase": "増加",
"rating": "評価",
"bpm": "BPM",
"refresh": "再読み込み",
"unknown": "不明",
"areYouSure": "実行しすか?",
"areYouSure": "実行してもよろしいですか",
"edit": "編集",
"favorite": "お気に入り",
"left": "左側",
"save": "保存",
"right": "右側",
"currentSong": "現在の $t(entity.track, {\"count\": 1})",
"collapse": "折りたた",
"collapse": "折りたた",
"trackNumber": "トラック",
"descending": "降順",
"add": "追加",
@@ -431,7 +518,7 @@
"name": "名前",
"maximize": "最大化",
"decrease": "減少",
"ok": "OK",
"ok": "Ok",
"description": "説明",
"configure": "設定",
"path": "パス",
@@ -447,8 +534,8 @@
"setting_other": "設定",
"version": "バージョン",
"title": "タイトル",
"filter_other": "フィルタ",
"filters": "フィルタ",
"filter_other": "フィルタ",
"filters": "フィルタ",
"create": "作成",
"bitrate": "ビットレート",
"saveAndReplace": "保存して変更",
@@ -457,7 +544,7 @@
"confirm": "確認",
"resetToDefault": "デフォルトにリセット",
"home": "ホーム",
"comingSoon": "近日利用可能になる予定です…",
"comingSoon": "近日公開…",
"reset": "リセット",
"channel_other": "チャンネル",
"disable": "無効",
@@ -466,7 +553,7 @@
"menu": "メニュー",
"restartRequired": "再起動が必要です",
"previousSong": "前の $t(entity.track, {\"count\": 1})",
"noResultsFromQuery": "条件にマッチするものがありません",
"noResultsFromQuery": "クエリに一致する結果がありません",
"quit": "終了",
"expand": "展開",
"search": "検索",
@@ -476,11 +563,11 @@
"random": "ランダム",
"size": "サイズ",
"biography": "バイオグラフィー",
"note": "ノート",
"note": "注記",
"explicitStatus": "明示的なステータス",
"additionalParticipants": "追加参加者",
"newVersion": "新しいバージョン ({{version}}) がインストールされました",
"viewReleaseNotes": "リリースノートを表示する",
"viewReleaseNotes": "リリースノートを表示",
"bitDepth": "ビット深度",
"close": "閉じる",
"codec": "コーデック",
@@ -488,7 +575,7 @@
"sampleRate": "サンプルレート",
"preview": "プレビュー",
"private": "プライベート",
"public": "パブリック",
"public": "公開",
"share": "共有",
"tags": "タグ",
"trackGain": "トラックゲイン",
@@ -517,19 +604,25 @@
"clean": "クリーン",
"filter_single": "シングル",
"filter_multiple": "複数枚組",
"rename": "名前を変更"
"rename": "名前を変更",
"newVersionAvailable": "新しいバージョンが利用可能です",
"numberOfResults": "{{numberOfResults}} 件の結果",
"grouping": "グループ化",
"back": "戻る",
"openFolder": "フォルダーを開く"
},
"table": {
"config": {
"view": {
"table": "テーブル",
"table": "",
"grid": "グリッド",
"list": "リスト"
"list": "リスト",
"detail": "詳細"
},
"general": {
"displayType": "表示タイプ",
"gap": "$t(common.gap)",
"tableColumns": "テーブル カラム",
"tableColumns": "テーブル",
"autoFitColumns": "カラム長を自動調整",
"size": "$t(common.size)",
"itemSize": "項目のサイズ (px)",
@@ -549,7 +642,14 @@
"size_compact": "コンパクト",
"size_large": "大きい",
"pagination_itemsPerPage": "ページあたりの項目数",
"pagination_infinite": "無限"
"pagination_infinite": "無限",
"pagination": "ページネーション",
"pagination_paginate": "ページ分割",
"showHeader": "ヘッダーを表示",
"verticalBorders": "列の境界線",
"rowHoverHighlight": "行ホバーハイライト",
"alternateRowColors": "交互の行の色",
"horizontalBorders": "行の境界線"
},
"label": {
"releaseDate": "発売日",
@@ -586,7 +686,8 @@
"image": "画像",
"sampleRate": "$t(common.sampleRate)",
"composer": "作曲家",
"titleArtist": "$t(common.title) (アーティスト)"
"titleArtist": "$t(common.title) (アーティスト)",
"albumGroup": "アルバムグループ"
}
},
"column": {
@@ -595,7 +696,7 @@
"rating": "評価",
"favorite": "お気に入り",
"playCount": "再生回数",
"albumCount": "$t(entity.album, {\"count\": 2})",
"albumCount": "アルバム",
"releaseYear": "年",
"lastPlayed": "最後に再生",
"biography": "バイオグラフィー",
@@ -604,23 +705,23 @@
"title": "タイトル",
"bpm": "BPM",
"dateAdded": "追加日",
"artist": "$t(entity.artist, {\"count\": 1})",
"songCount": "$t(entity.track, {\"count\": 2})",
"artist": "アーティスト",
"songCount": "トラック",
"trackNumber": "トラック",
"genre": "$t(entity.genre, {\"count\": 1})",
"genre": "ジャンル",
"albumArtist": "アルバムアーティスト",
"path": "パス",
"discNumber": "ディスク",
"channels": "$t(common.channel, {\"count\": 2})",
"size": "$t(common.size)",
"codec": "$t(common.codec)",
"bitDepth": "$t(common.bitDepth)",
"sampleRate": "$t(common.sampleRate)",
"channels": "チャンネル",
"size": "サイズ",
"codec": "コーデック",
"bitDepth": "ビット深度",
"sampleRate": "サンプリング周波数",
"owner": "所有者"
}
},
"error": {
"remotePortWarning": "新たなポート設定を適用するためサーバーを再起動してください",
"remotePortWarning": "新しいポート設定を反映させるには、サーバーを再起動してください",
"systemFontError": "システムフォントを取得する際にエラーが発生しました",
"playbackError": "メディアの再生開始時にエラーが発生しました",
"remotePortError": "リモートサーバーのポート設定時にエラーが発生しました",
@@ -635,7 +736,7 @@
"serverNotSelectedError": "サーバーが選択されていません",
"remoteDisableError": "リモートサーバーを$t(common.disable)にする際にエラーが発生しました",
"mpvRequired": "MPV が必要です",
"audioDeviceFetchError": "オーディオデバイス取得にエラーが発生しました",
"audioDeviceFetchError": "オーディオデバイス取得しようとした際にエラーが発生しました",
"invalidServer": "無効なサーバー",
"loginRateError": "ログイン試行回数が多すぎます。数秒後に再試行してください",
"endpointNotImplementedError": "{{serverType}} にはエンドポイント {{endpoint}} が実装されていません",
@@ -643,12 +744,15 @@
"networkError": "ネットワークエラーが発生しました",
"notificationDenied": "通知の許可が拒否されました。この設定は効果がありません",
"openError": "ファイルを開けませんでした",
"badValue": "無効なオプション「{{value}}」。この値は存在しません",
"badValue": "無効なオプション「{{value}}」です。この値は存在しません",
"multipleServerSaveQueueError": "再生キューに現在のサーバーに存在しない曲が 1 曲以上あります。これはサポートされていません",
"noNetwork": "サーバーが利用できません",
"noNetworkDescription": "このサーバーに接続できませんでした",
"saveQueueFailed": "キューを保存できませんでした",
"settingsSyncError": "レンダラーとメインプロセスの設定に矛盾が見つかりました。変更を適用するにはアプリケーションを再起動してください"
"settingsSyncError": "レンダラーとメインプロセスの設定に矛盾が見つかりました。変更を適用するにはアプリケーションを再起動してください",
"invalidJson": "無効な JSON",
"serverLockSingleServer": "サーバーがロックされている場合、1 つのサーバーのみが許可されます",
"playbackPausedDueToError": "エラーのため再生が一時停止されました"
},
"filter": {
"mostPlayed": "最も多く再生",
@@ -694,7 +798,9 @@
"id": "ID",
"album": "$t(entity.album, {\"count\": 1})",
"explicitStatus": "$t(common.explicitStatus)",
"sortName": "ソート名"
"sortName": "ソート名",
"matchAnd": "すべて",
"matchOr": "いずれか"
},
"page": {
"sidebar": {
@@ -721,7 +827,7 @@
"dynamicBackground": "ダイナミック背景",
"synchronized": "同期",
"followCurrentLyric": "歌詞を再生位置に追従",
"opacity": "非透過率",
"opacity": "不透明度",
"lyricSize": "歌詞のサイズ",
"showLyricProvider": "歌詞の提供元を表示",
"unsynchronized": "非同期",
@@ -730,7 +836,9 @@
"lyricGap": "歌詞の間隔",
"dynamicImageBlur": "画像のぼかしサイズ",
"dynamicIsImage": "背景画像を有効にする",
"lyricOffset": "歌詞のオフセット (ms)"
"lyricOffset": "歌詞のオフセット (ms)",
"lyricOpacityNonActive": "非アクティブな歌詞の不透明度",
"lyricScaleNonActive": "非アクティブな歌詞のスケール"
},
"upNext": "次へ",
"lyrics": "歌詞",
@@ -745,7 +853,7 @@
"manageServers": "サーバーの管理",
"expandSidebar": "サイドバーを展開",
"collapseSidebar": "サイドバーを折りたたむ",
"openBrowserDevtools": "ブラウザの開発者ツールを開く",
"openBrowserDevtools": "ブラウザの開発者ツールを開く",
"quit": "$t(common.quit)",
"goBack": "戻る",
"goForward": "進む",
@@ -858,12 +966,16 @@
"recentReleases": "最近のリリース",
"viewDiscography": "ディスコグラフィーを見る",
"topSongs": "人気曲",
"topSongsFrom": "{{title}} からの人気曲",
"topSongsFrom": "{{title}} の人気曲",
"viewAll": "すべて表示",
"viewAllTracks": "$t(entity.track, {\"count\": 2}) をすべて表示",
"relatedArtists": "関連の $t(entity.artist, {\"count\": 2})",
"groupingTypeAll": "すべてのリリースタイプ",
"groupingTypePrimary": "主なリリースタイプ"
"groupingTypePrimary": "主なリリースタイプ",
"favoriteSongs": "お気に入りの曲",
"topSongsCommunity": "コミュニティ",
"favoriteSongsFrom": "{{title}} のお気に入りの曲",
"topSongsPersonal": "個人的"
},
"manageServers": {
"title": "サーバーの管理",
@@ -897,6 +1009,11 @@
"collections": {
"overrideExisting": "既存のものを上書き",
"saveAsCollection": "コレクションとして保存"
},
"releasenotes": {
"commitsSinceStable": "{{stable}} 以降のコミット",
"noNewCommits": "この範囲に新しいコミットはありません",
"noStableReleaseToCompare": "比較可能な安定版リリースはありません"
}
},
"form": {
@@ -937,11 +1054,12 @@
"input_skipDuplicates": "重複をスキップ",
"input_playlists": "$t(entity.playlist, {\"count\": 2})",
"create": "$t(entity.playlist, {\"count\": 1}) {{playlist}} を作成する",
"searchOrCreate": "$t(entity.playlist, {\"count\": 2}) を検索するか、入力して新しいプレイリストを作成してください"
"searchOrCreate": "$t(entity.playlist, {\"count\": 2}) を検索するか、入力して新しいプレイリストを作成してください",
"noneAdded": "$t(entity.playlist, {\"count\": 1}) {{playlist}} にトラックが追加されませんでした"
},
"updateServer": {
"title": "サーバーをアップデート",
"success": "サーバーがアップデートされました"
"success": "サーバーの更新に成功しました"
},
"queryEditor": {
"input_optionMatchAll": "すべて一致",
@@ -960,8 +1078,7 @@
"editPlaylist": {
"title": "$t(entity.playlist, {\"count\": 1}) を編集",
"publicJellyfinNote": "Jellyfin では、何らかの理由でプレイリストが公開されているかどうかが表示されません。公開されたままにしたい場合は、以下の項目を選択してください",
"success": "$t(entity.playlist, {\"count\": 1}) が正常に更新されました",
"editNote": "大規模なプレイリストの場合、手動編集は推奨されません。既存のプレイリストを上書きすることでデータ損失が発生するリスクを許容しますか?"
"success": "$t(entity.playlist, {\"count\": 1}) が正常に更新されました"
},
"shareItem": {
"allowDownloading": "ダウンロードを許可",
@@ -969,7 +1086,9 @@
"setExpiration": "有効期限を設定",
"success": "共有リンクがクリップボードにコピーされました (またはここをクリックして開きます)",
"expireInvalid": "有効期限は将来の日時である必要があります",
"createFailed": "共有リンクを作成できませんでした (共有は有効になっていますか?)"
"createFailed": "共有リンクを作成できませんでした (共有は有効になっていますか?)",
"copyToClipboard": "クリップボードにコピー: Ctrl+C、Enter",
"successMustClick": "共有リンクが正常に作成されました。開くにはここをクリックしてください"
},
"privateMode": {
"enabled": "プライベートモードが有効になりました。再生ステータスは外部連携から非表示になっています",
@@ -985,7 +1104,7 @@
"title": "ラジオ局を作成",
"input_homepageUrl": "ホームページ URL",
"input_name": "名前",
"input_streamUrl": "Stream URL"
"input_streamUrl": "ストリーム URL"
},
"lyricsExport": {
"export": "歌詞をエクスポート",
@@ -995,16 +1114,24 @@
"shuffleAll": {
"title": "ランダムに再生",
"input_genre": "$t(entity.genre, {\"count\": 1})",
"input_limit": "曲が多すぎます",
"input_limit": "何曲?",
"input_minYear": "年から",
"input_maxYear": "年まで",
"input_played_optionAll": "すべてのトラック",
"input_played_optionUnplayed": "未再生のトラックのみ",
"input_played_optionPlayed": "再生されたトラックのみ",
"input_played": "再生フィルター"
"input_played": "再生フィルター",
"input_kind_albums": "アルバム",
"input_kind_songs": "曲",
"input_kind": "ランダムピック",
"input_limit_albums": "アルバムは何枚ですか?",
"input_limit_songs": "何曲ですか?"
},
"saveQueue": {
"success": "プレイキューをサーバーに保存しました"
},
"editRadioStation": {
"success": "ラジオ局の更新に成功しました"
}
},
"entity": {
@@ -1046,9 +1173,15 @@
"audiobook": "オーディオブック",
"audioDrama": "オーディオドラマ",
"compilation": "コンピレーション",
"djMix": "DJ Mix",
"djMix": "DJ ミックス",
"demo": "デモ",
"soundtrack": "サウンドトラック"
"soundtrack": "サウンドトラック",
"fieldRecording": "フィールドレコーディング",
"interview": "インタビュー",
"live": "ライブ",
"mixtape": "ミックステープ",
"remix": "リミックス",
"spokenWord": "スポークン・ワード"
}
},
"datetime": {
@@ -1083,6 +1216,159 @@
"notInTheLast": "より前"
},
"visualizer": {
"visualizerType": "ビジュアライザーの種類"
"visualizerType": "ビジュアライザーの種類",
"colors": "色",
"cyclePresets": "サイクルプリセット",
"cycleTime": "サイクルタイム(秒)",
"includeAllPresets": "すべてのプリセットを含める",
"ignoredPresets": "無視されたプリセット",
"selectedPresets": "選択されたプリセット",
"randomizeNextPreset": "次のプリセットをランダム化",
"blendTime": "ブレンド時間",
"presets": "プリセット",
"selectPreset": "プリセットを選択",
"applyPreset": "プリセットを適用",
"saveAsPreset": "プリセットとして保存",
"updatePreset": "プリセットを更新",
"copyConfiguration": "設定をコピーする",
"pasteConfiguration": "設定を貼り付け",
"pasteConfigurationPlaceholder": "ここに JSON 設定を貼り付けてください...",
"pasteFromClipboard": "クリップボードから貼り付け",
"applyConfiguration": "設定を適用",
"configCopied": "設定をクリップボードにコピーしました",
"configCopyFailed": "設定のコピーに失敗しました",
"configPasted": "設定が正常に適用されました",
"configPasteFailed": "設定の適用に失敗しました。形式を確認してください。",
"configPasteReadFailed": "クリップボードからの読み取りに失敗しました",
"presetName": "プリセット名",
"presetNamePlaceholder": "プリセット名を入力",
"general": "全般",
"mode": "モード",
"mode1To8": "モード 1 - 8",
"mode10": "モード 10",
"barSpace": "バースペース",
"lineWidth": "線幅",
"fillAlpha": "アルファ塗りつぶしを設定",
"channelLayout": "チャンネルレイアウト",
"maxFPS": "最大フレームレート",
"opacity": "不透明度",
"customGradients": "カスタムグラデーション",
"addCustomGradient": "カスタムグラデーションを追加",
"gradientName": "グラデーション名",
"gradientNamePlaceholder": "グラデーション名",
"vertical": "垂直",
"horizontal": "水平",
"colorStops": "カラー停止点の数",
"addColor": "色を加える",
"position": "位置",
"level": "レベル",
"remove": "取り除く",
"pasteGradient": "グラデーションを貼り付け",
"pasteGradientPlaceholder": "グラデーションの JSON をここに貼り付けてください...",
"custom": "カスタム",
"builtIn": "組み込み",
"colorMode": "カラーモード",
"gradient": "勾配",
"gradientLeft": "左へのグラデーション",
"gradientRight": "右へのグラデーション",
"fft": "高速フーリエ変換",
"fftSize": "FFT サイズ",
"smoothing": "平滑化",
"frequencyRangeAndScaling": "周波数範囲とスケーリング",
"minimumFrequency": "最小周波数",
"maximumFrequency": "最大周波数",
"frequencyScale": "周波数スケール",
"sensitivity": "感度",
"weightingFilter": "重み付けフィルタ",
"minimumDecibels": "最小デシベル",
"maximumDecibels": "最大デシベル",
"linearAmplitude": "線形振幅",
"linearBoost": "リニアブースト",
"peakBehavior": "ピーク時の振る舞い",
"showPeaks": "ピークスを表示",
"fadePeaks": "フェードピークス",
"peakLine": "ピークライン",
"gravity": "重力",
"peakFadeTime": "ピークフェード時間(ミリ秒)",
"peakHoldTime": "ピークホールド時間(ミリ秒)",
"radialSpectrum": "放射状スペクトル",
"radial": "ラジアル",
"radialInvert": "放射状インバート",
"spinSpeed": "回転速度",
"radius": "半径",
"reflexMirror": "反射鏡",
"reflexFit": "リフレックス・フィット",
"reflexRatio": "反射比",
"reflexAlpha": "リフレックス・アルファ",
"reflexBrightness": "反射輝度",
"mirror": "鏡",
"miscellaneousSettings": "その他の設定",
"alphaBars": "アルファバー",
"ansiBands": "ANSI バンド",
"ledBars": "LED バー",
"trueLeds": "真の LED",
"lumiBars": "ルミ・バー",
"outlineBars": "アウトラインバー",
"roundBars": "丸棒",
"lowResolution": "低解像度",
"splitGradient": "分割グラデーション",
"showFPS": "FPS を表示",
"showScaleX": "X 軸スケールを表示",
"noteLabels": "注釈ラベル",
"showScaleY": "Y 軸スケールを表示",
"options": {
"mode": {
"0": "[0] 離散周波数",
"1": "[1] 1/24 オクターブ / 240 バンド",
"2": "[2] 1/12 オクターブ / 120 バンド",
"3": "[3] 1/8 オクターブ / 80 バンド",
"4": "[4] 1/6 オクターブ / 60 バンド",
"5": "[5] 1/4 オクターブ / 40 バンド",
"6": "[6] 1/3 オクターブ / 30 バンド",
"7": "[7] 半オクターブ / 20 バンド",
"8": "[8] フルオクターブ / 10 バンド",
"10": "[10] 折れ線グラフ / 面グラフ"
},
"colorMode": {
"gradient": "勾配",
"barIndex": "バー・インデックス",
"barLevel": "バーレベル"
},
"gradient": {
"classic": "クラシック",
"prism": "プリズム",
"rainbow": "虹",
"steelblue": "スチールブルー",
"orangered": "オレンジレッド"
},
"channelLayout": {
"single": "シングル",
"dualCombined": "デュアルコンバインド",
"dualHorizontal": "デュアル水平",
"dualVertical": "デュアルバーティカル"
},
"frequencyScale": {
"none": "なし",
"bark": "樹皮スケール",
"linear": "線形スケール",
"log": "対数スケール",
"mel": "メル尺度"
},
"weightingFilter": {
"none": "なし",
"a": "A",
"b": "B",
"c": "C",
"d": "D",
"z": "Z"
}
},
"systemAudioConsentAllow": "許可",
"systemAudioConsentBody": "ビジュアライザーを機能させるためには、システムオーディオへのアクセスが必要です",
"systemAudioConsentDecline": "拒否",
"systemAudioConsentTitle": "システムオーディオへのアクセスを許可しますか?",
"systemAudioCaptureFailed": "キャプチャを開始できませんでした: {{message}}",
"systemAudioNoAudioTrack": "音声トラックが返されませんでした。プロンプトが表示されたら、音声キャプチャが有効になっていることを確認してください。",
"systemAudioExclusiveModeNotSupported": "オーディオ排他モードが有効になっている間は、ビジュアライザーは利用できません。MPV の設定でオーディオ排他モードを無効にしてから、もう一度お試しください。"
}
}
+250 -30
View File
@@ -17,7 +17,10 @@
"removeFromPlaylist": "$t(entity.playlist, {\"count\": 1})에서 제거",
"openIn": {
"musicbrainz": "MusicBrainz에서 보기",
"lastfm": "Last.fm에서 보기"
"lastfm": "Last.fm에서 보기",
"listenbrainz": "ListenBrainz에서 열기",
"qobuz": "Qobuz에서 열기",
"spotify": "Spotify에서 열기"
},
"viewPlaylists": "$t(entity.playlist, {\"count\": 2}) 보기",
"setRating": "평점 지정",
@@ -37,7 +40,10 @@
"shuffleAll": "모두 섞기",
"shuffleSelected": "선택항목 섞기",
"viewMore": "더 보기",
"openApplicationDirectory": "앱 디렉토리 열기"
"openApplicationDirectory": "앱 디렉토리 열기",
"goToCurrent": "현재 항목으로 이동",
"collapseAllFolders": "모든 폴더 접기",
"expandAllFolders": "모든 폴더 확장"
},
"common": {
"translation": "번역",
@@ -106,7 +112,7 @@
"ascending": "오름차순",
"areYouSure": "확실한가요?",
"bitrate": "비트 전송률",
"bpm": "bpm",
"bpm": "BPM",
"biography": "바이오그래피",
"center": "중앙",
"channel_other": "채널",
@@ -127,7 +133,7 @@
"filters": "필터",
"noResultsFromQuery": "쿼리 결과가 없습니다",
"note": "노트",
"ok": "OK",
"ok": "Ok",
"owner": "소유자",
"sampleRate": "샘플레이트",
"tags": "태그",
@@ -149,7 +155,18 @@
"sort": "정렬",
"gridRows": "행 그리드",
"tableColumns": "테이블 열",
"itemsMore": "{{count}}개 더"
"itemsMore": "{{count}}개 더",
"back": "뒤로",
"example": "예",
"openFolder": "폴더 열기",
"filter_single": "미혼",
"filter_multiple": "다중",
"grouping": "그룹화",
"mood": "기분",
"numberOfResults": "결과 {{numberOfResults}}개",
"retry": "다시 해 보다",
"rename": "이름 변경",
"newVersionAvailable": "새로운 버전이 나왔습니다"
},
"entity": {
"albumWithCount_other": "{{count}} 앨범",
@@ -197,7 +214,15 @@
"localFontAccessDenied": "로컬 글꼴에 접근 거부되었습니다",
"apiRouteError": "요청 보내기 실패",
"badValue": "옵션이 없습니다 {{value}}. 이 값은 더이상 존재하지 않습니다",
"notificationDenied": "알림에 대한 권한이 거부되었습니다. 이 설정은 변경되지 않습니다"
"notificationDenied": "알림에 대한 권한이 거부되었습니다. 이 설정은 변경되지 않습니다",
"invalidJson": "유효하지 않은 JSON",
"multipleServerSaveQueueError": "재생 대기열에 현재 서버에 속하지 않은 곡이 하나 이상 포함되어 있습니다. 이는 지원되지 않습니다",
"noNetwork": "서버를 이용할 수 없음",
"noNetworkDescription": "이 서버에 연결할 수 없습니다",
"playbackPausedDueToError": "오류로 인해 재생이 일시 중지되었습니다",
"saveQueueFailed": "큐 저장 실패",
"serverLockSingleServer": "서버가 잠겨 있을 때는 서버를 하나만 허용합니다",
"settingsSyncError": "렌더러와 메인 프로세스의 설정 간에 불일치가 발견되었습니다. 변경 사항을 적용하려면 애플리케이션을 다시 시작하십시오"
},
"filter": {
"title": "곡명",
@@ -222,9 +247,9 @@
"disc": "디스크",
"bitrate": "비트 전송률",
"biography": "바이오그래피",
"channels": "$t(common.channel_other)",
"channels": "$t(common.channel, {\"count\": 2})",
"duration": "길이",
"bpm": "bpm",
"bpm": "BPM",
"albumCount": "$t(entity.album, {\"count\": 2}) 앨범수",
"comment": "코멘트",
"favorited": "즐겨찾기",
@@ -242,7 +267,10 @@
"songCount": "곡 갯수",
"toYear": "년도까지",
"trackNumber": "트랙",
"explicitStatus": "$t(common.explicitStatus)"
"explicitStatus": "$t(common.explicitStatus)",
"matchAnd": "그리고",
"matchOr": "또는",
"sortName": "이름 정렬"
},
"form": {
"addServer": {
@@ -251,14 +279,17 @@
"input_name": "서버 이름",
"input_password": "비밀번호",
"input_savePassword": "비밀번호 저장하기",
"input_url": "url",
"input_url": "URL",
"error_savePassword": "비밀번호를 저장하는 도중 오류가 발생했습니다",
"ignoreCors": "CORS 무시 ($t(common.restartRequired))",
"ignoreSsl": "SSL 무시 ($t(common.restartRequired))",
"input_legacyAuthentication": "레거시 인증 사용",
"input_username": "유저 이름",
"input_preferInstantMix": "즉석 믹스 선호",
"input_preferInstantMixDescription": "비슷한 곳을 찾기 위해 즉석 믹스를 사용합니다. 이 명령을 수정하기 위한 플러그인을 설치한 경우 유용합니다"
"input_preferInstantMixDescription": "비슷한 곳을 찾기 위해 즉석 믹스를 사용합니다. 이 명령을 수정하기 위한 플러그인을 설치한 경우 유용합니다",
"input_preferRemoteUrl": "공개 URL 선호",
"input_remoteUrl": "공개 URL",
"input_remoteUrlPlaceholder": "선택 사항: 외부 기능을 위한 공개 URL"
},
"addToPlaylist": {
"input_skipDuplicates": "중복 건너뛰기",
@@ -266,7 +297,8 @@
"input_playlists": "$t(entity.playlist, {\"count\": 2})",
"success": "$t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })에 $t(entity.trackWithCount, {\"count\": {{message}} })가 추가되었습니다",
"create": "$t(entity.playlist, {\"count\": 1}) {{playlist}} 생성",
"searchOrCreate": "$t(entity.playlist, {\"count\": 2}) 검색 또는 입력하여 새로 만들기"
"searchOrCreate": "$t(entity.playlist, {\"count\": 2}) 검색 또는 입력하여 새로 만들기",
"noneAdded": "$t(entity.playlist, {\"count\": 1}) '{{playlist}}'에 트랙이 추가되지 않았습니다"
},
"lyricSearch": {
"title": "가사 검색",
@@ -276,7 +308,11 @@
"queryEditor": {
"input_optionMatchAll": "모두 일치",
"input_optionMatchAny": "무엇이든 일치",
"title": "쿼리 편집기"
"title": "쿼리 편집기",
"addRuleGroup": "규칙 그룹 추가",
"removeRuleGroup": "규칙 그룹 제거",
"resetToDefault": "기본값으로 초기화",
"clearFilters": "필터 초기화"
},
"editPlaylist": {
"title": "$t(entity.playlist, {\"count\": 1}) 편집",
@@ -289,7 +325,9 @@
"success": "클립보드에 공유 링크를 복사했습니다 (또는 열어보려면 클릭하세요)",
"expireInvalid": "만료 날짜는 미래 날짜여야만 합니다",
"createFailed": "공유 링크를 생성하는데 실패하였습니다 (혹시 공유하기 설정되어 있나요?)",
"setExpiration": "만료 기간 설정하기"
"setExpiration": "만료 기간 설정하기",
"copyToClipboard": "클립보드로 복사: Ctrl+C, Enter",
"successMustClick": "공유가 성공적으로 생성되었습니다. 여기를 클릭하여 여세요"
},
"updateServer": {
"title": "서버 업데이트",
@@ -312,6 +350,44 @@
"enabled": "프라이빗 모드가 활성화되었습니다. 재생상태가 외부 서비스에 지금부터 노출되지 않습니다",
"disabled": "프라이빗 모드가 비활성화되었습니다. 재생상태가 외부서비스에서 지금부터 표시됩니다",
"title": "프라이빗 모드"
},
"largeFetchConfirmation": {
"title": "대기열에 항목을 추가하세요",
"description": "이 작업은 현재 필터링된 보기의 모든 항목을 추가합니다"
},
"createRadioStation": {
"success": "라디오 방송국이 성공적으로 생성되었습니다",
"title": "라디오 방송국 만들기",
"input_homepageUrl": "홈페이지 URL",
"input_name": "명의",
"input_streamUrl": "스트림 URL"
},
"editRadioStation": {
"success": "라디오 방송국이 성공적으로 업데이트되었습니다"
},
"lyricsExport": {
"export": "가사 내보내기",
"input_synced": "동기화된 가사 내보내기",
"input_offset": "$t(setting.lyricOffset)"
},
"saveQueue": {
"success": "재생 대기열을 서버에 저장했습니다"
},
"shuffleAll": {
"title": "무작위 재생",
"input_kind_albums": "앨범",
"input_kind_songs": "노래들",
"input_kind": "무작위 선택",
"input_limit_albums": "앨범이 몇 장인가요?",
"input_limit_songs": "몇 곡인가요?",
"input_genre": "$t(entity.genre, {\"count\": 1})",
"input_limit": "몇 곡인가요?",
"input_minYear": "연도부터",
"input_maxYear": "연도까지",
"input_played": "재생 필터",
"input_played_optionAll": "모든 트랙",
"input_played_optionUnplayed": "재생하지 않은 트랙만",
"input_played_optionPlayed": "재생된 트랙만"
}
},
"page": {
@@ -325,7 +401,13 @@
"collapseSidebar": "사이드바 줄이기",
"expandSidebar": "사이드바 확장",
"privateModeOff": "프라이빗 모드 끄기",
"privateModeOn": "프라이빗 모드 켜기"
"privateModeOn": "프라이빗 모드 켜기",
"commandPalette": "명령 팔레트 열기",
"quit": "$t(common.quit)",
"selectMusicFolder": "음악 폴더 선택",
"noMusicFolder": "음악 폴더가 선택되지 않았습니다",
"multipleMusicFolders": "{{count}}개의 음악 폴더가 선택되었습니다",
"settings": "$t(common.setting, {\"count\": 2})"
},
"manageServers": {
"title": "서버 설정하기",
@@ -350,7 +432,9 @@
"lyricGap": "가사 간격",
"lyricSize": "가사 크기",
"showLyricMatch": "가사 일치 표시",
"showLyricProvider": "가사 제공자 표시"
"showLyricProvider": "가사 제공자 표시",
"lyricOpacityNonActive": "비활성 가사 불투명도",
"lyricScaleNonActive": "비활성 서정적 척도"
},
"lyrics": "가사",
"related": "관련",
@@ -364,7 +448,27 @@
"shareItem": "공유",
"goToAlbum": "$t(entity.album, {\"count\": 1})으로 이동",
"goToAlbumArtist": "$t(entity.albumArtist, {\"count\": 1})으로 이동",
"showDetails": "추가정보"
"showDetails": "추가정보",
"addFavorite": "$t(action.addToFavorites)",
"addLast": "$t(player.addLast)",
"addNext": "$t(player.addNext)",
"addToFavorites": "$t(action.addToFavorites)",
"addToPlaylist": "$t(action.addToPlaylist)",
"createPlaylist": "$t(action.createPlaylist)",
"deletePlaylist": "$t(action.deletePlaylist)",
"deselectAll": "$t(action.deselectAll)",
"moveItems": "$t(action.moveItems)",
"moveToNext": "$t(action.moveToNext)",
"moveToBottom": "$t(action.moveToBottom)",
"moveToTop": "$t(action.moveToTop)",
"play": "$t(player.play)",
"playSimilarSongs": "$t(player.playSimilarSongs)",
"removeFromFavorites": "$t(action.removeFromFavorites)",
"removeFromPlaylist": "$t(action.removeFromPlaylist)",
"removeFromQueue": "$t(action.removeFromQueue)",
"setRating": "$t(action.setRating)",
"playShuffled": "$t(player.shuffle)",
"goTo": "이동"
},
"albumArtistDetail": {
"about": "{{artist}}에 대해",
@@ -375,7 +479,13 @@
"topSongs": "최고의 곡들",
"topSongsFrom": "{{title}}이 포함된 최고의 곡들",
"viewAll": "전부 보이기",
"viewAllTracks": "$t(entity.track, {\"count\": 2}) 전부 보이기"
"viewAllTracks": "$t(entity.track, {\"count\": 2}) 전부 보이기",
"favoriteSongs": "좋아하는 노래들",
"groupingTypeAll": "모든 릴리스 유형",
"groupingTypePrimary": "주요 릴리스 유형",
"topSongsCommunity": "공동체",
"topSongsPersonal": "개인의",
"favoriteSongsFrom": "{{title}}에서 가장 좋아하는 곡들"
},
"albumArtistList": {
"title": "$t(entity.albumArtist, {\"count\": 2})"
@@ -386,11 +496,14 @@
"released": "발매"
},
"albumList": {
"artistAlbums": "{{artist}}의 앨범"
"artistAlbums": "{{artist}}의 앨범",
"genreAlbums": "\"{{genre}}\" $t(entity.album, {\"count\": 2})",
"title": "$t(entity.album, {\"count\": 2})"
},
"genreList": {
"showAlbums": "$t(entity.genre, {\"count\": 1}) $t(entity.album, {\"count\": 2}) 표시",
"showTracks": "$t(entity.genre, {\"count\": 1}) $t(entity.track, {\"count\": 2}) 표시"
"showTracks": "$t(entity.genre, {\"count\": 1}) $t(entity.track, {\"count\": 2}) 표시",
"title": "$t(entity.genre, {\"count\": 2})"
},
"globalSearch": {
"commands": {
@@ -405,7 +518,9 @@
"mostPlayed": "자주 플레이된 곡",
"newlyAdded": "최근에 추가된 곡",
"recentlyPlayed": "최근에 플레이된 곡",
"recentlyReleased": "최근에 발매된 곡"
"recentlyReleased": "최근에 발매된 곡",
"genres": "$t(entity.genre, {\"count\": 2})",
"title": "$t(common.home)"
},
"itemDetail": {
"copyPath": "클립보드에 경로를 복사",
@@ -420,15 +535,71 @@
"generalTab": "일반",
"hotkeysTab": "단축키",
"playbackTab": "재생",
"windowTab": "윈도우"
"windowTab": "윈도우",
"analytics": "해석학",
"updates": "업데이트",
"cache": "은닉처",
"application": "애플리케이션",
"queryBuilder": "쿼리 빌더",
"theme": "테마",
"controls": "통제 수단",
"sidebar": "사이드바",
"exportImport": "가져오기/내보내기",
"audio": "오디오",
"lyrics": "가사",
"lyricsDisplay": "가사 표시",
"transcoding": "트랜스코딩",
"discord": "Discord",
"logger": "로거",
"playerFilters": "선수 필터"
},
"sidebar": {
"myLibrary": "내 라이브러리",
"nowPlaying": "재생중",
"shared": "공유 $t(entity.playlist, {\"count\": 2})"
"shared": "공유 $t(entity.playlist, {\"count\": 2})",
"albumArtists": "$t(entity.albumArtist, {\"count\": 2})",
"albums": "$t(entity.album, {\"count\": 2})",
"collections": "컬렉션",
"artists": "$t(entity.artist, {\"count\": 2})",
"favorites": "$t(entity.favorite, {\"count\": 2})",
"folders": "$t(entity.folder, {\"count\": 2})",
"genres": "$t(entity.genre, {\"count\": 2})",
"home": "$t(common.home)",
"radio": "$t(entity.radioStation, {\"count\": 2})",
"playlists": "$t(entity.playlist, {\"count\": 2})",
"search": "$t(common.search)",
"settings": "$t(common.setting, {\"count\": 2})",
"tracks": "$t(entity.track, {\"count\": 2})"
},
"trackList": {
"artistTracks": "{{artist}}의 음악"
"artistTracks": "{{artist}}의 음악",
"genreTracks": "\"{{genre}}\" $t(entity.track, {\"count\": 2})",
"title": "$t(entity.track, {\"count\": 2})"
},
"radioList": {
"title": "라디오 방송국"
},
"releasenotes": {
"commitsSinceStable": "{{stable}} 이후 커밋",
"noNewCommits": "이 범위에 새로운 커밋이 없습니다",
"noStableReleaseToCompare": "비교할 수 있는 안정화 릴리스가 없습니다"
},
"favorites": {
"title": "$t(entity.favorite, {\"count\": 2})"
},
"windowBar": {
"paused": "(일시 정지됨) ",
"privateMode": "(비공개 모드)"
},
"folderList": {
"title": "$t(entity.folder, {\"count\": 2})"
},
"playlistList": {
"title": "$t(entity.playlist, {\"count\": 2})"
},
"collections": {
"overrideExisting": "기존 항목 덮어쓰기",
"saveAsCollection": "컬렉션으로 저장"
}
},
"table": {
@@ -458,8 +629,8 @@
"playSimilarSongs": "비슷한 곡 재생",
"previous": "이전",
"queue_clear": "재생 대기열 지우기",
"queue_moveToBottom": "선택한 곡을 가장 로 이동",
"queue_moveToTop": "선택한 곡을 가장 아래로 이동",
"queue_moveToBottom": "선택한 곡을 가장 아래로 이동",
"queue_moveToTop": "선택한 곡을 가장 로 이동",
"queue_remove": "선택한 항목 삭제",
"repeat": "반복",
"repeat_all": "모두 반복하기",
@@ -473,7 +644,25 @@
"toggleFullscreenPlayer": "전체화면으로 전환",
"unfavorite": "즐겨찾기 취소",
"pause": "멈춤",
"viewQueue": "대기열 보기"
"viewQueue": "대기열 보기",
"addLastShuffled": "마지막 (섞인)",
"addNextShuffled": "다음 (무작위)",
"albumRadio": "앨범 라디오",
"artistRadio": "아티스트 라디오",
"holdToShuffle": "길게 눌러 섞기",
"lyrics": "가사",
"restoreQueueFromServer": "서버에서 큐 복원",
"saveQueueToServer": "대기열을 서버에 저장",
"trackRadio": "라디오 추적",
"sleepTimer": "취침 타이머",
"sleepTimer_endOfSong": "현재 곡 종료",
"sleepTimer_endOfAlbum": "현재 앨범의 끝",
"sleepTimer_minutes": "{{count}}분",
"sleepTimer_hours": "{{count}}시간",
"sleepTimer_off": "끄다",
"sleepTimer_timeRemaining": "{{time}} 남음",
"sleepTimer_setCustom": "타이머 설정",
"sleepTimer_cancel": "타이머 취소"
},
"setting": {
"accentColor_description": "앱의 강조색상 설정",
@@ -482,7 +671,7 @@
"albumBackground": "앨범 배경이미지",
"albumBackgroundBlur_description": "앨범 배경이미지의 흐려짐 정도 조정",
"albumBackgroundBlur": "앨범배경이미지 흐려짐 크기",
"applicationHotkeys_description": "앱의 단축키 설정. 앱 전체에 적용되는 단축키 설정하기 위해서는 체크박스에 체크하세요(PC만 가능)",
"applicationHotkeys_description": "애플리케이션 단축키 설정합니다. 체크박스를 전환하여 전역 단축키 설정하세요(데스크톱 전용)",
"applicationHotkeys": "앱 단축키",
"artistBackground": "아티스트 배경이미지",
"artistBackground_description": "아티스트 페이지에 아티스트가 포함된 배경이미지를 추가",
@@ -492,7 +681,7 @@
"artistConfiguration_description": "앨범아티스트 페이지에 표시할 정보 및 순서 설정",
"audioDevice_description": "음악재생에 사용할 장치 선택(웹플레이어만 가능)",
"audioDevice": "오디오 장치",
"audioExclusiveMode_description": "단독재생모드 켜기. 이 모드에서는 일반적으로 시스템의 재생장치가 고정되며 MPV로만 오디오가 재생됩니다",
"audioExclusiveMode_description": "독점 출력 모드를 활성화합니다. 이 모드에서는 일반적으로 시스템의 오디오 출력이 차단되며, 오직 mpv만이 오디오를 출력할 수 있습니다. 이 모드가 활성화된 동안에는 비주얼라이저의 시스템 오디오 캡처 기능이 작동하지 않습니다",
"audioExclusiveMode": "오디오 단독재생모드",
"audioPlayer_description": "재생을 위한 오디오 플레이어 선택",
"audioPlayer": "오디오 플레이어",
@@ -505,7 +694,8 @@
"broadcast": "방송",
"ep": "ep앨범",
"other": "기타",
"single": "싱글"
"single": "싱글",
"album": "$t(entity.album, {\"count\": 1})"
},
"secondary": {
"audiobook": "오디오북",
@@ -521,5 +711,35 @@
"soundtrack": "사운드트랙",
"spokenWord": "보컬사운드"
}
},
"datetime": {
"minuteShort": "분",
"secondShort": "초",
"hourShort": "시간",
"dayShort": "일"
},
"filterOperator": {
"after": "~ 뒤에 있나요",
"afterDate": "(날짜) 이후입니까",
"before": "~보다 앞서 있다",
"beforeDate": "(날짜) 이전인가요",
"contains": "포함",
"endsWith": "~로 끝남",
"inPlaylist": "~ 안에 있다",
"inTheLast": "마지막에 있습니다",
"inTheRange": "범위 내에 있습니다",
"inTheRangeDate": "범위 내에 있음 (날짜)",
"is": "~이다",
"isNot": "~이 아닙니까",
"isGreaterThan": "~보다 크다",
"isLessThan": "~보다 작다",
"matchesRegex": "정규식과 일치",
"notContains": "함유하지 않음",
"notInPlaylist": "~ 안에 있지 않다",
"notInTheLast": "마지막에 있지 않다",
"startsWith": "~로 시작함"
},
"queryBuilder": {
"customTags": "사용자 정의 태그"
}
}
File diff suppressed because it is too large Load Diff
+931 -863
View File
File diff suppressed because it is too large Load Diff
+235
View File
@@ -0,0 +1,235 @@
{
"action": {
"addToFavorites": "Legg til i $t(entity.favorite, {\"count\": 2})",
"addToPlaylist": "Legg til i $t(entity.playlist, {\"count\": 1})",
"addOrRemoveFromSelection": "Legg til eller fjern fra val",
"selectRangeOfItems": "Vel eit utval av element",
"clearQueue": "Tøm kø",
"goToCurrent": "Gå til noverande element",
"collapseAllFolders": "Lukk alle mapper",
"expandAllFolders": "Opne alle mapper",
"createPlaylist": "Lag $t(entity.playlist, {\"count\": 1})",
"createRadioStation": "Lag $t(entity.radioStation, {\"count\": 1})",
"deletePlaylist": "Slett $t(entity.playlist, {\"count\": 1})",
"deleteRadioStation": "Slett $t(entity.radioStation, {\"count\": 1})",
"selectAll": "Vel alle",
"deselectAll": "Opphev alle val",
"downloadStarted": "Starta nedlasting av {{count}} element",
"editPlaylist": "Rediger $t(entity.playlist, {\"count\": 1})",
"goToPage": "Gå til side",
"moveToNext": "Flytt til neste",
"moveToBottom": "Flytt til botnen",
"moveToTop": "Flytt til toppen",
"moveUp": "Flytt opp",
"moveDown": "Flytt ned",
"holdToMoveToTop": "Held inne for å flytte til toppen",
"holdToMoveToBottom": "Held inne for å flytte til botnen",
"moveItems": "Flytt element",
"shuffle": "Stokking",
"shuffleAll": "Stokk alle",
"shuffleSelected": "Stokk valde",
"refresh": "$t(common.refresh)",
"removeFromFavorites": "Fjern frå $t(entity.favorite, {\"count\": 2})",
"removeFromPlaylist": "Fjern frå $t(entity.playlist, {\"count\": 1})",
"removeFromQueue": "Fjern frå kø",
"setRating": "Set vurdering",
"toggleSmartPlaylistEditor": "Slå $t(entity.smartPlaylist) editor av/på",
"viewPlaylists": "Vis $t(entity.playlist, {\"count\": 2})",
"viewMore": "Vis fleire",
"openApplicationDirectory": "Opne applikasjonsmappa",
"openIn": {
"lastfm": "Opne i Last.fm",
"listenbrainz": "Opne i ListenBrainz",
"musicbrainz": "Opne i MusicBrainz",
"qobuz": "Opne i Qobuz",
"spotify": "Opne i Spotify"
}
},
"common": {
"countSelected": "{{count}} valt",
"explicitStatus": "Eksplisittstatus",
"action_one": "Handling",
"action_other": "Handlingar",
"add": "Legg til",
"additionalParticipants": "Ytterlegare deltakarar",
"newVersion": "Ein ny versjon vart installert ({{version}})",
"viewReleaseNotes": "Sjå utgivelsesnotata",
"albumGain": "Albumforsterkning",
"albumPeak": "Albumtopp",
"areYouSure": "Er du sikker?",
"ascending": "Stigande",
"back": "Tilbake",
"backward": "Bakover",
"biography": "Biografi",
"bitDepth": "Bit-dybde",
"bitrate": "Bitrate",
"bpm": "BPM",
"cancel": "Avbryt",
"center": "Sentrer",
"channel_one": "Kanal",
"channel_other": "Kanalar",
"clear": "Tøm",
"close": "Lukk",
"codec": "Codec",
"collapse": "Lukk",
"comingSoon": "Kjem snart…",
"configure": "Konfigurer",
"confirm": "Bekreft",
"create": "Lag",
"currentSong": "Noverande $t(entity.track, {\"count\": 1})",
"decrease": "Reduser",
"delete": "Slett",
"descending": "Søkkande",
"description": "Beskriving",
"disable": "Skru av",
"disc": "Disk",
"dismiss": "Avvis",
"doNotShowAgain": "Ikkje vis dette igjen",
"duration": "Varigheit",
"view": "Vis",
"edit": "Rediger",
"enable": "Skru på",
"expand": "Utvid",
"example": "Døme",
"externalLinks": "Eksterne lenker",
"openFolder": "Open mappe",
"faster": "Raskare",
"favorite": "Favoriser",
"filter_one": "Filter",
"filter_other": "Filter",
"filters": "Filter",
"filter_single": "Single",
"filter_multiple": "Multi",
"forceRestartRequired": "Start på nytt for at endringane vert teke i bruk… lukk varslina for å starte på nytt",
"forward": "Framover",
"gap": "Mellomrom",
"home": "Heim",
"increase": "Auk",
"left": "Venstre",
"limit": "Grense",
"manage": "Administrer",
"maximize": "Maksimer",
"menu": "Meny",
"minimize": "Minimer",
"modified": "Modifisert",
"mbid": "MusicBrainz ID",
"grouping": "Gruppering",
"mood": "Humør",
"name": "Namn",
"no": "Nei",
"none": "Ingen",
"noResultsFromQuery": "Søket gav ingen resultat",
"numberOfResults": "{{numberOfResults}} resultat",
"noFilters": "Ingen filter konfigurert",
"note": "Notat",
"ok": "Ok",
"owner": "Eigar",
"path": "Bane",
"playerMustBePaused": "Spelaren må vere på pause",
"preview": "Førehandsvisning",
"previousSong": "Forrige $t(entity.track, {\"count\": 1})",
"private": "Privat",
"public": "Offentleg",
"quit": "Lukk",
"random": "Tilfeldig",
"rating": "Vurdering",
"retry": "Prøv på nytt",
"recordLabel": "Plateselskap",
"releaseType": "Utgjevingstype",
"refresh": "Oppdater",
"reload": "Oppdater",
"rename": "Gje nytt namn",
"reset": "Tilbakestill",
"resetToDefault": "Tilbakestill til standard",
"restartRequired": "Omstart nødvendig",
"right": "Høgre",
"sampleRate": "Samplingsfrekvens",
"save": "Lagre",
"saveAndReplace": "Lagre og erstatt",
"saveAs": "Lagre som",
"search": "Søk",
"setting_one": "Instilling",
"setting_other": "Instillingar",
"slower": "Saktare",
"share": "Del",
"size": "Storleik",
"sort": "Sorter",
"sortOrder": "Rekkjefølgje",
"tags": "Taggar",
"title": "Tittel",
"trackNumber": "Spor",
"trackGain": "Sporforsterkning",
"trackPeak": "Sporetopp",
"translation": "Omsetjing",
"unknown": "Ukjend",
"version": "Versjon",
"year": "År",
"yes": "Ja",
"explicit": "Eksplisitt",
"clean": "Rein",
"gridRows": "Rutenettrader",
"tableColumns": "Tabellkolonnar",
"itemsMore": "{{count}} fleire",
"newVersionAvailable": "Ein ny versjon er tilgjengeleg"
},
"entity": {
"album_one": "Album",
"album_other": "Album",
"albumArtist_one": "Albumartist",
"albumArtist_other": "Albumartistar",
"albumArtistCount_one": "{{count}} albumartist",
"albumArtistCount_other": "{{count}} albumartistar",
"albumWithCount_one": "{{count}} album",
"albumWithCount_other": "{{count}} album",
"radioStation_one": "Radiostasjon",
"radioStation_other": "Radiostasjonar",
"radioStationWithCount_one": "{{count}} radiostasjon",
"radioStationWithCount_other": "{{count}} radiostasjonar",
"artist_one": "Artist",
"artist_other": "Artistar",
"artistWithCount_one": "{{count}} artist",
"artistWithCount_other": "{{count}} artistar",
"favorite_one": "Favoritt",
"favorite_other": "Favorittar",
"folder_one": "Mappe",
"folder_other": "Mapper",
"folderWithCount_one": "{{count}} mappe",
"folderWithCount_other": "{{count}} mapper",
"genre_one": "Sjanger",
"genre_other": "Sjangrar",
"genreWithCount_one": "{{count}} sjanger",
"genreWithCount_other": "{{count}} sjangrar",
"playlist_one": "Speleliste",
"playlist_other": "Spelelister",
"play_one": "{{count}} avspeling",
"play_other": "{{count}} avspelingar",
"playlistWithCount_one": "{{count}} speleliste",
"playlistWithCount_other": "{{count}} spelelister",
"smartPlaylist": "Smart $t(entity.playlist, {\"count\": 1})",
"track_one": "Spor",
"track_other": "Spor",
"song_one": "Song",
"song_other": "Songar",
"trackWithCount_one": "{{count}} spor",
"trackWithCount_other": "{{count}} spor"
},
"error": {
"apiRouteError": "Kunne ikkje rute førespurnaden",
"audioDeviceFetchError": "Det oppstod ein feil under forsøk på å hente lydeiningar",
"authenticationFailed": "Autentisering feila",
"badAlbum": "Du ser denne sida fordi denne songen ikkje er ein del av eit album. Mest sannsynleg ser du dette fordi du har songen på toppen av musikkmappa di. Jellyfin grupperar berre spor viss dei er i ei mappe",
"badValue": "Ugyldig val \"{{value}}\". Denne verdien finst ikkje lenger",
"credentialsRequired": "Legitimasjon krevjast",
"endpointNotImplementedError": "Endepunktet {{endpoint}} er ikkje implementert for {{serverType}}",
"genericError": "Ein feil skjedde",
"invalidJson": "Ugyldig JSON",
"invalidServer": "Ugyldig sørvar",
"localFontAccessDenied": "Ingen tilgang til lokale skrifttypar",
"loginRateError": "For mange innloggingsforsøk, venlegast prøv på nytt om nokon sekundar",
"mpvRequired": "MPV nødvendig",
"multipleServerSaveQueueError": "Spelekøen har ein eller fleire songar som ikkje er frå den noverande sørvaren. Dette er ikkje støtta",
"networkError": "Ein nettverksfeil skjedde",
"noNetwork": "Sørvar utilgjengeleg",
"noNetworkDescription": "Kunne ikkje kople til denne sørvaren"
}
}
+1016 -905
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+699 -367
View File
File diff suppressed because it is too large Load Diff
+13 -13
View File
@@ -1,19 +1,19 @@
{
"common": {
"confirm": "confirmă",
"create": "creează",
"biography": "biografie",
"areYouSure": "ești sigur?",
"no": "nu",
"name": "nume",
"ok": "ok",
"note": "notă",
"yes": "da",
"explicit": "explicit",
"year": "an",
"menu": "meniu"
"confirm": "Confirmă",
"create": "Creează",
"biography": "Biografie",
"areYouSure": "Ești sigur?",
"no": "Nu",
"name": "Nume",
"ok": "Ok",
"note": "Notă",
"yes": "Da",
"explicit": "Explicit",
"year": "An",
"menu": "Meniu"
},
"filter": {
"biography": "biografie"
"biography": "Biografie"
}
}
+1040 -712
View File
File diff suppressed because it is too large Load Diff
+579 -579
View File
File diff suppressed because it is too large Load Diff
+438 -438
View File
File diff suppressed because it is too large Load Diff
+429 -429
View File
File diff suppressed because it is too large Load Diff
+341 -341
View File
@@ -1,323 +1,323 @@
{
"action": {
"editPlaylist": "redigera $t(entity.playlist, {\"count\": 1})",
"goToPage": "gå till sida",
"moveToTop": "flytta till toppen",
"clearQueue": "rensa kö",
"addToFavorites": "lägg till $t(entity.favorite, {\"count\": 2})",
"addToPlaylist": "lägg till $t(entity.playlist, {\"count\": 1})",
"createPlaylist": "skapa $t(entity.playlist, {\"count\": 1})",
"removeFromPlaylist": "ta bort från $t(entity.playlist, {\"count\": 1})",
"viewPlaylists": "visa $t(entity.playlist, {\"count\": 2})",
"editPlaylist": "Redigera $t(entity.playlist, {\"count\": 1})",
"goToPage": "Gå till sida",
"moveToTop": "Flytta till toppen",
"clearQueue": "Rensa kö",
"addToFavorites": "Lägg till $t(entity.favorite, {\"count\": 2})",
"addToPlaylist": "Lägg till $t(entity.playlist, {\"count\": 1})",
"createPlaylist": "Skapa $t(entity.playlist, {\"count\": 1})",
"removeFromPlaylist": "Ta bort från $t(entity.playlist, {\"count\": 1})",
"viewPlaylists": "Visa $t(entity.playlist, {\"count\": 2})",
"refresh": "$t(common.refresh)",
"deletePlaylist": "ta bort $t(entity.playlist, {\"count\": 1})",
"removeFromQueue": "ta bort från kö",
"deselectAll": "avmarkera alla",
"moveToBottom": "flytta till botten",
"setRating": "sätt betyg",
"toggleSmartPlaylistEditor": "växla $t(entity.smartPlaylist) redigerare",
"removeFromFavorites": "ta bort från $t(entity.favorite, {\"count\": 2})",
"downloadStarted": "startade nedladdning av {{count}} objekt",
"moveToNext": "flytta till nästa",
"moveUp": "flytta upp",
"moveDown": "flytta ner",
"holdToMoveToTop": "håll för att flytta till toppen",
"holdToMoveToBottom": "håll för att flytta till botten",
"moveItems": "flytta objekt",
"shuffle": "slumpa",
"shuffleAll": "slumpa alla",
"shuffleSelected": "slumpa valda",
"viewMore": "visa mer",
"deletePlaylist": "Ta bort $t(entity.playlist, {\"count\": 1})",
"removeFromQueue": "Ta bort från kö",
"deselectAll": "Avmarkera alla",
"moveToBottom": "Flytta till botten",
"setRating": "Sätt betyg",
"toggleSmartPlaylistEditor": "Växla $t(entity.smartPlaylist) redigerare",
"removeFromFavorites": "Ta bort från $t(entity.favorite, {\"count\": 2})",
"downloadStarted": "Startade nedladdning av {{count}} objekt",
"moveToNext": "Flytta till nästa",
"moveUp": "Flytta upp",
"moveDown": "Flytta ner",
"holdToMoveToTop": "Håll för att flytta till toppen",
"holdToMoveToBottom": "Håll för att flytta till botten",
"moveItems": "Flytta objekt",
"shuffle": "Slumpa",
"shuffleAll": "Slumpa alla",
"shuffleSelected": "Slumpa valda",
"viewMore": "Visa mer",
"openIn": {
"lastfm": "Öppna i Last.fm",
"musicbrainz": "Öppna i MusicBrainz"
},
"createRadioStation": "skapa $t(entity.radioStation, {\"count\": 1})",
"deleteRadioStation": "ta bort $t(entity.radioStation, {\"count\": 1})",
"addOrRemoveFromSelection": "lägg till eller ta bort från markerade",
"selectRangeOfItems": "välj en mängd objekt",
"selectAll": "markera alla",
"openApplicationDirectory": "öppna applikationskatalog"
"createRadioStation": "Skapa $t(entity.radioStation, {\"count\": 1})",
"deleteRadioStation": "Ta bort $t(entity.radioStation, {\"count\": 1})",
"addOrRemoveFromSelection": "Lägg till eller ta bort från markerade",
"selectRangeOfItems": "Välj en mängd objekt",
"selectAll": "Markera alla",
"openApplicationDirectory": "Öppna applikationskatalog"
},
"common": {
"backward": "bakåt",
"increase": "öka",
"rating": "betyg",
"bpm": "bpm",
"refresh": "laddaom",
"unknown": "okänd",
"areYouSure": "är du säker?",
"edit": "redigera",
"favorite": "favorit",
"left": "vänster",
"save": "spara",
"right": "höger",
"currentSong": "aktuell $t(entity.track, {\"count\": 1})",
"collapse": "kollaps",
"trackNumber": "spår",
"descending": "fallande",
"add": "lägg till",
"gap": "avstånd",
"ascending": "stigande",
"dismiss": "avskeda",
"year": "år",
"manage": "hantera",
"limit": "gräns",
"minimize": "minimera",
"modified": "modifierad",
"duration": "längd",
"name": "namn",
"maximize": "maximera",
"decrease": "minska",
"ok": "ok",
"description": "beskrivning",
"configure": "konfigurera",
"path": "sökväg",
"no": "nej",
"owner": "ägare",
"enable": "aktivera",
"clear": "töm",
"forward": "framåt",
"delete": "ta bort",
"cancel": "avbryt",
"forceRestartRequired": "starta om för att tillämpa ändringar... Stäng meddelandet för att starta om",
"setting_one": "inställning",
"backward": "Bakåt",
"increase": "Öka",
"rating": "Betyg",
"bpm": "Bpm",
"refresh": "Laddaom",
"unknown": "Okänd",
"areYouSure": "Är du säker?",
"edit": "Redigera",
"favorite": "Favorit",
"left": "Vänster",
"save": "Spara",
"right": "Höger",
"currentSong": "Aktuell $t(entity.track, {\"count\": 1})",
"collapse": "Kollaps",
"trackNumber": "Spår",
"descending": "Fallande",
"add": "Lägg till",
"gap": "Avstånd",
"ascending": "Stigande",
"dismiss": "Avskeda",
"year": "År",
"manage": "Hantera",
"limit": "Gräns",
"minimize": "Minimera",
"modified": "Modifierad",
"duration": "Längd",
"name": "Namn",
"maximize": "Maximera",
"decrease": "Minska",
"ok": "Ok",
"description": "Beskrivning",
"configure": "Konfigurera",
"path": "Sökväg",
"no": "Nej",
"owner": "Ägare",
"enable": "Aktivera",
"clear": "Töm",
"forward": "Framåt",
"delete": "Ta bort",
"cancel": "Avbryt",
"forceRestartRequired": "Starta om för att tillämpa ändringar... Stäng meddelandet för att starta om",
"setting_one": "Inställning",
"setting_other": "",
"version": "version",
"title": "titel",
"filter_one": "filter",
"filter_other": "filter",
"filters": "filter",
"create": "skapa",
"bitrate": "bithastighet",
"saveAndReplace": "spara och skrivöver",
"action_one": "handling",
"action_other": "handlingar",
"playerMustBePaused": "spelaren måste pausas",
"confirm": "bekräfta",
"resetToDefault": "återställ till standard",
"home": "hem",
"comingSoon": "kommer snart…",
"reset": "nollställ",
"channel_one": "kanal",
"channel_other": "kanaler",
"disable": "inaktivera",
"sortOrder": "ordning",
"none": "ingen",
"menu": "meny",
"restartRequired": "omstart krävs",
"previousSong": "föregående $t(entity.track, {\"count\": 1})",
"noResultsFromQuery": "frågan returnerade inga resultat",
"quit": "avsluta",
"expand": "expandera",
"search": "sök",
"saveAs": "spara som",
"disc": "skiva",
"yes": "ja",
"random": "slumpmässig",
"size": "storlek",
"biography": "biografi",
"note": "anteckning",
"center": "center",
"explicitStatus": "olämplig status",
"additionalParticipants": "ytterligare medverkare",
"newVersion": "en ny version har installerats {{version}}",
"viewReleaseNotes": "se utgåveinformation",
"bitDepth": "bitdjup",
"close": "stäng",
"codec": "kodek",
"doNotShowAgain": "visa inte detta igen",
"view": "visa",
"externalLinks": "externa länkar",
"faster": "snabbare",
"version": "Version",
"title": "Titel",
"filter_one": "Filter",
"filter_other": "Filter",
"filters": "Filter",
"create": "Skapa",
"bitrate": "Bithastighet",
"saveAndReplace": "Spara och skrivöver",
"action_one": "Handling",
"action_other": "Handlingar",
"playerMustBePaused": "Spelaren måste pausas",
"confirm": "Bekräfta",
"resetToDefault": "Återställ till standard",
"home": "Hem",
"comingSoon": "Kommer snart…",
"reset": "Nollställ",
"channel_one": "Kanal",
"channel_other": "Kanaler",
"disable": "Inaktivera",
"sortOrder": "Ordning",
"none": "Ingen",
"menu": "Meny",
"restartRequired": "Omstart krävs",
"previousSong": "Föregående $t(entity.track, {\"count\": 1})",
"noResultsFromQuery": "Frågan returnerade inga resultat",
"quit": "Avsluta",
"expand": "Expandera",
"search": "Sök",
"saveAs": "Spara som",
"disc": "Skiva",
"yes": "Ja",
"random": "Slumpmässig",
"size": "Storlek",
"biography": "Biografi",
"note": "Anteckning",
"center": "Center",
"explicitStatus": "Olämplig status",
"additionalParticipants": "Ytterligare medverkare",
"newVersion": "En ny version har installerats {{version}}",
"viewReleaseNotes": "Se utgåveinformation",
"bitDepth": "Bitdjup",
"close": "Stäng",
"codec": "Kodek",
"doNotShowAgain": "Visa inte detta igen",
"view": "Visa",
"externalLinks": "Externa länkar",
"faster": "Snabbare",
"mbid": "MusicBrainz ID",
"noFilters": "inga filter konfigurerade",
"preview": "förhandsvisa",
"private": "privat",
"public": "allmän",
"recordLabel": "skivbolag",
"releaseType": "utgåvetyp",
"reload": "ladda om",
"sampleRate": "samplingstakt",
"slower": "långsammare",
"share": "dela",
"sort": "sortera",
"tags": "taggar",
"translation": "översättning",
"explicit": "olämplig",
"clean": "städad",
"gridRows": "rutnätsrader",
"tableColumns": "tabellkolumner",
"noFilters": "Inga filter konfigurerade",
"preview": "Förhandsvisa",
"private": "Privat",
"public": "Allmän",
"recordLabel": "Skivbolag",
"releaseType": "Utgåvetyp",
"reload": "Ladda om",
"sampleRate": "Samplingstakt",
"slower": "Långsammare",
"share": "Dela",
"sort": "Sortera",
"tags": "Taggar",
"translation": "Översättning",
"explicit": "Olämplig",
"clean": "Städad",
"gridRows": "Rutnätsrader",
"tableColumns": "Tabellkolumner",
"itemsMore": "{{count}} fler",
"countSelected": "{{count}} markerade"
},
"error": {
"remotePortWarning": "starta om servern för att tillämpa den nya porten",
"systemFontError": "ett fel uppstod vid försök att hämta systemteckensnitt",
"playbackError": "ett fel uppstod vid försök att spela upp media",
"endpointNotImplementedError": "endpoint {{endpoint}} är inte implementerad för {{serverType}}",
"remotePortError": "ett fel uppstod vid försök att ange serverporten",
"serverRequired": "server krävs",
"authenticationFailed": "autentiseringen misslyckades",
"apiRouteError": "det går inte att dirigera begäran",
"genericError": "ett fel uppstod",
"credentialsRequired": "autentiseringsuppgifter som krävs",
"sessionExpiredError": "din session har löpt ut",
"remotePortWarning": "Starta om servern för att tillämpa den nya porten",
"systemFontError": "Ett fel uppstod vid försök att hämta systemteckensnitt",
"playbackError": "Ett fel uppstod vid försök att spela upp media",
"endpointNotImplementedError": "Endpoint {{endpoint}} är inte implementerad för {{serverType}}",
"remotePortError": "Ett fel uppstod vid försök att ange serverporten",
"serverRequired": "Server krävs",
"authenticationFailed": "Autentiseringen misslyckades",
"apiRouteError": "Det går inte att dirigera begäran",
"genericError": "Ett fel uppstod",
"credentialsRequired": "Autentiseringsuppgifter som krävs",
"sessionExpiredError": "Din session har löpt ut",
"remoteEnableError": "Ett fel uppstod vid försök att $t(common.enable) servern",
"localFontAccessDenied": "åtkomst nekad till lokala teckensnitt",
"serverNotSelectedError": "ingen server vald",
"remoteDisableError": "ett fel uppstod vid försök av $t(common.disable) servern",
"localFontAccessDenied": "Åtkomst nekad till lokala teckensnitt",
"serverNotSelectedError": "Ingen server vald",
"remoteDisableError": "Ett fel uppstod vid försök av $t(common.disable) servern",
"mpvRequired": "MPV krävs",
"audioDeviceFetchError": "ett fel uppstod vid hämtning av ljudenheter",
"invalidServer": "ogiltig server",
"loginRateError": "för många inloggningsförsök, försök igen om några sekunder",
"badAlbum": "du ser denna sidan eftersom denna låten inte är en del av ett album. du ser troligtvis detta problemet för att du har en låt på toppnivån i din musikmapp. Jellyfin grupperar bara låtar om de finns i en mapp",
"badValue": "felaktigt alternativ \"{{value}}\". detta värde existerar inte längre",
"multipleServerSaveQueueError": "spelningskön har en eller flera låtar som inte är från den nuvarande valda servern. detta är inte stöttat",
"networkError": "en nätverksfel uppstod",
"notificationDenied": "åtkomst till notifieringarna var nekad. inställningen har ingen verkan",
"openError": "kunde inte öppna filen",
"settingsSyncError": "diskrepans hittades mellan inställningarna för renderingsprocessen och huvudprocessen. starta om applikationen för att ändringarna ska tillämpas"
"audioDeviceFetchError": "Ett fel uppstod vid hämtning av ljudenheter",
"invalidServer": "Ogiltig server",
"loginRateError": "För många inloggningsförsök, försök igen om några sekunder",
"badAlbum": "Du ser denna sidan eftersom denna låten inte är en del av ett album. du ser troligtvis detta problemet för att du har en låt på toppnivån i din musikmapp. Jellyfin grupperar bara låtar om de finns i en mapp",
"badValue": "Felaktigt alternativ \"{{value}}\". detta värde existerar inte längre",
"multipleServerSaveQueueError": "Spelningskön har en eller flera låtar som inte är från den nuvarande valda servern. detta är inte stöttat",
"networkError": "En nätverksfel uppstod",
"notificationDenied": "Åtkomst till notifieringarna var nekad. inställningen har ingen verkan",
"openError": "Kunde inte öppna filen",
"settingsSyncError": "Diskrepans hittades mellan inställningarna för renderingsprocessen och huvudprocessen. starta om applikationen för att ändringarna ska tillämpas"
},
"filter": {
"mostPlayed": "mest spelade",
"comment": "kommentar",
"playCount": "antal spelningar",
"recentlyUpdated": "nyligen uppdaterad",
"mostPlayed": "Mest spelade",
"comment": "Kommentar",
"playCount": "Antal spelningar",
"recentlyUpdated": "Nyligen uppdaterad",
"channels": "$t(common.channel_other)",
"isCompilation": "är kompilering",
"recentlyPlayed": "nyligen spelad",
"isRated": "är betygsatt",
"isCompilation": "Är kompilering",
"recentlyPlayed": "Nyligen spelad",
"isRated": "Är betygsatt",
"owner": "$t(common.owner)",
"title": "titel",
"rating": "betyg",
"search": "sök",
"bitrate": "bithastighet",
"title": "Titel",
"rating": "Betyg",
"search": "Sök",
"bitrate": "Bithastighet",
"genre": "$t(entity.genre, {\"count\": 1})",
"recentlyAdded": "nyligen tillagda",
"note": "anteckning",
"name": "namn",
"dateAdded": "datum tillagt",
"releaseDate": "utgivningsdag",
"communityRating": "betyg från communityn",
"path": "sökväg",
"favorited": "favoritmärkt",
"recentlyAdded": "Nyligen tillagda",
"note": "Anteckning",
"name": "Namn",
"dateAdded": "Datum tillagt",
"releaseDate": "Utgivningsdag",
"communityRating": "Betyg från communityn",
"path": "Sökväg",
"favorited": "Favoritmärkt",
"albumArtist": "$t(entity.albumArtist, {\"count\": 1})",
"isRecentlyPlayed": "spelas nyligen",
"isFavorited": "är favoritmärkt",
"bpm": "bpm",
"releaseYear": "utgivningsår",
"id": "id",
"disc": "skiva",
"biography": "biografi",
"isRecentlyPlayed": "Spelas nyligen",
"isFavorited": "Är favoritmärkt",
"bpm": "Bpm",
"releaseYear": "Utgivningsår",
"id": "Id",
"disc": "Skiva",
"biography": "Biografi",
"artist": "$t(entity.artist, {\"count\": 1})",
"duration": "längd",
"isPublic": "är offentlig",
"random": "slumpmässig",
"lastPlayed": "senast spelad",
"toYear": "till år",
"fromYear": "från år",
"duration": "Längd",
"isPublic": "Är offentlig",
"random": "Slumpmässig",
"lastPlayed": "Senast spelad",
"toYear": "Till år",
"fromYear": "Från år",
"album": "$t(entity.album, {\"count\": 1})",
"trackNumber": "spår",
"songCount": "sångräkning",
"criticRating": "kritikerbetyg",
"trackNumber": "Spår",
"songCount": "Sångräkning",
"criticRating": "Kritikerbetyg",
"albumCount": "$t(entity.album, {\"count\": 2}) antal",
"explicitStatus": "$t(common.explicitStatus)"
},
"form": {
"deletePlaylist": {
"title": "ta bort $t(entity.playlist, {\"count\": 1})",
"title": "Ta bort $t(entity.playlist, {\"count\": 1})",
"success": "$t(entity.playlist, {\"count\": 1}) har tagits bort",
"input_confirm": "Skriv namnet på $t(entity.playlist, {\"count\": 1}) för att bekräfta"
},
"createPlaylist": {
"input_description": "$t(common.description)",
"title": "skapa $t(entity.playlist, {\"count\": 1})",
"input_public": "offentlig",
"title": "Skapa $t(entity.playlist, {\"count\": 1})",
"input_public": "Offentlig",
"input_name": "$t(common.name)",
"success": "$t(entity.playlist, {\"count\": 1}) skapad",
"input_owner": "$t(common.owner)"
},
"addServer": {
"title": "lägg till server",
"input_username": "användarnamn",
"input_url": "länk",
"input_password": "lösenord",
"input_legacyAuthentication": "aktivera äldre autentisering",
"input_name": "server namn",
"success": "servern har lagts till",
"input_savePassword": "spara lösenord",
"ignoreSsl": "ignorera ssl ($t(common.restartRequired))",
"ignoreCors": "ignorera cors ($t(common.restartRequired))",
"error_savePassword": "ett fel uppstod när lösenordet skulle sparas",
"input_preferInstantMix": "föredra instant mixning",
"input_preferInstantMixDescription": "använd bara instant mixning för att få liknande låtar. användbar om du har plugin för att förändra detta beteendet"
"title": "Lägg till server",
"input_username": "Användarnamn",
"input_url": "Länk",
"input_password": "Lösenord",
"input_legacyAuthentication": "Aktivera äldre autentisering",
"input_name": "Server namn",
"success": "Servern har lagts till",
"input_savePassword": "Spara lösenord",
"ignoreSsl": "Ignorera ssl ($t(common.restartRequired))",
"ignoreCors": "Ignorera cors ($t(common.restartRequired))",
"error_savePassword": "Ett fel uppstod när lösenordet skulle sparas",
"input_preferInstantMix": "Föredra instant mixning",
"input_preferInstantMixDescription": "Använd bara instant mixning för att få liknande låtar. användbar om du har plugin för att förändra detta beteendet"
},
"addToPlaylist": {
"success": "lade till $t(entity.trackWithCount, {\"count\": {{message}} }) till $t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })",
"title": "lägg till i $t(entity.playlist, {\"count\": 1})",
"input_skipDuplicates": "hoppa över dubbletter",
"success": "Lade till $t(entity.trackWithCount, {\"count\": {{message}} }) till $t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })",
"title": "Lägg till i $t(entity.playlist, {\"count\": 1})",
"input_skipDuplicates": "Hoppa över dubbletter",
"input_playlists": "$t(entity.playlist, {\"count\": 2})",
"create": "skapa $t(entity.playlist, {\"count\": 1}) {{playlist}}",
"searchOrCreate": "sök $t(entity.playlist, {\"count\": 2}) eller skriv för att skapa en ny"
"create": "Skapa $t(entity.playlist, {\"count\": 1}) {{playlist}}",
"searchOrCreate": "Sök $t(entity.playlist, {\"count\": 2}) eller skriv för att skapa en ny"
},
"updateServer": {
"title": "uppdatera server",
"success": "servern har uppdaterats"
"title": "Uppdatera server",
"success": "Servern har uppdaterats"
},
"queryEditor": {
"input_optionMatchAll": "matcha alla",
"input_optionMatchAny": "matcha något"
"input_optionMatchAll": "Matcha alla",
"input_optionMatchAny": "Matcha något"
},
"lyricSearch": {
"input_name": "$t(common.name)",
"input_artist": "$t(entity.artist, {\"count\": 1})",
"title": "sångtext sök"
"title": "Sångtext sök"
},
"editPlaylist": {
"title": "redigera $t(entity.playlist, {\"count\": 1})",
"title": "Redigera $t(entity.playlist, {\"count\": 1})",
"publicJellyfinNote": "Jellyfin visar av någon anledning inte om en spellista är publik eller inte. Om du önskar att denna ska förbli publik, så får du ha följande indata markerade"
},
"largeFetchConfirmation": {
"title": "lägg till objekt till kön",
"title": "Lägg till objekt till kön",
"description": "Åtgärden kommer att lägga till alla objekt till den nuvarande filtrerade vyn"
},
"createRadioStation": {
"success": "radiostation skapades",
"title": "skapa radiostation",
"input_homepageUrl": "hemside-URL",
"input_name": "namn",
"input_streamUrl": "stream url"
"success": "Radiostation skapades",
"title": "Skapa radiostation",
"input_homepageUrl": "Hemside-URL",
"input_name": "Namn",
"input_streamUrl": "Stream url"
}
},
"page": {
"fullscreenPlayer": {
"config": {
"showLyricMatch": "Visa låttext matchning",
"dynamicBackground": "dynamisk bakgrund",
"followCurrentLyric": "följ aktuell låttext",
"opacity": "ogenomskinlighet",
"lyricSize": "låttext storlek",
"lyricAlignment": "låttext justering",
"lyricGap": "låttext mellanrum",
"synchronized": "synkroniserad",
"showLyricProvider": "visa sångtextleverantör",
"unsynchronized": "osynkroniserad"
"dynamicBackground": "Dynamisk bakgrund",
"followCurrentLyric": "Följ aktuell låttext",
"opacity": "Ogenomskinlighet",
"lyricSize": "Låttext storlek",
"lyricAlignment": "Låttext justering",
"lyricGap": "Låttext mellanrum",
"synchronized": "Synkroniserad",
"showLyricProvider": "Visa sångtextleverantör",
"unsynchronized": "Osynkroniserad"
},
"lyrics": "sångtext",
"related": "relaterad"
"lyrics": "Sångtext",
"related": "Relaterad"
},
"appMenu": {
"selectServer": "välj server",
"version": "version {{version}}",
"selectServer": "Välj server",
"version": "Version {{version}}",
"settings": "$t(common.setting, {\"count\": 2})",
"manageServers": "hantera servrar",
"expandSidebar": "expandera sidofältet",
"openBrowserDevtools": "öppna webbläsarens utvecklingsverktyg",
"manageServers": "Hantera servrar",
"expandSidebar": "Expandera sidofältet",
"openBrowserDevtools": "Öppna webbläsarens utvecklingsverktyg",
"quit": "$t(common.quit)",
"goBack": "gå tillbaka",
"goForward": "gå framåt",
"collapseSidebar": "växla sidofältet"
"goBack": "Gå tillbaka",
"goForward": "Gå framåt",
"collapseSidebar": "Växla sidofältet"
},
"contextMenu": {
"addToPlaylist": "$t(action.addToPlaylist)",
@@ -336,20 +336,20 @@
"play": "$t(player.play)",
"numberSelected": "{{count}} vald",
"removeFromQueue": "$t(action.removeFromQueue)",
"download": "ladda ner",
"download": "Ladda ner",
"moveItems": "$t(action.moveItems)",
"moveToNext": "$t(action.moveToNext)",
"playSimilarSongs": "$t(player.playSimilarSongs)",
"playShuffled": "$t(player.shuffle)",
"shareItem": "dela objekt",
"goTo": "gå till",
"goToAlbum": "gå till $t(entity.album, {\"count\": 1})",
"goToAlbumArtist": "gå till $t(entity.albumArtist, {\"count\": 1})",
"showDetails": "hämta information"
"shareItem": "Dela objekt",
"goTo": "Gå till",
"goToAlbum": "Gå till $t(entity.album, {\"count\": 1})",
"goToAlbumArtist": "Gå till $t(entity.albumArtist, {\"count\": 1})",
"showDetails": "Hämta information"
},
"albumDetail": {
"moreFromArtist": "mer från $t(entity.artist, {\"count\": 1})",
"moreFromGeneric": "mer från {{item}}"
"moreFromArtist": "Mer från $t(entity.artist, {\"count\": 1})",
"moreFromGeneric": "Mer från {{item}}"
},
"albumArtistList": {
"title": "$t(entity.albumArtist, {\"count\": 2})"
@@ -358,124 +358,124 @@
"title": "$t(entity.album, {\"count\": 2})"
},
"sidebar": {
"nowPlaying": "nu spelas"
"nowPlaying": "Nu spelas"
},
"home": {
"mostPlayed": "mest spelade",
"newlyAdded": "nytillkomna utgåvor",
"explore": "utforska från ditt bibliotek",
"recentlyPlayed": "nyligen spelat"
"mostPlayed": "Mest spelade",
"newlyAdded": "Nytillkomna utgåvor",
"explore": "Utforska från ditt bibliotek",
"recentlyPlayed": "Nyligen spelat"
},
"setting": {
"playbackTab": "uppspelning",
"generalTab": "allmänt",
"hotkeysTab": "snabbtangenter",
"windowTab": "fönster"
"playbackTab": "Uppspelning",
"generalTab": "Allmänt",
"hotkeysTab": "Snabbtangenter",
"windowTab": "Fönster"
},
"globalSearch": {
"commands": {
"serverCommands": "serverkommandon",
"goToPage": "gå till sidan",
"searchFor": "sök efter {{query}}"
"serverCommands": "Serverkommandon",
"goToPage": "Gå till sidan",
"searchFor": "Sök efter {{query}}"
},
"title": "kommandon"
"title": "Kommandon"
},
"manageServers": {
"url": "URL",
"username": "användarnamn",
"editServerDetailsTooltip": "redigera serverinställningar",
"removeServer": "ta bort server"
"username": "Användarnamn",
"editServerDetailsTooltip": "Redigera serverinställningar",
"removeServer": "Ta bort server"
}
},
"entity": {
"playlist_one": "spellista",
"playlist_other": "spellistor",
"artist_one": "artist",
"artist_other": "artister",
"albumArtist_one": "albumartist",
"albumArtist_other": "albumartister",
"albumArtistCount_one": "{{count}} Albumartist",
"albumArtistCount_other": "{{count}} Albumartister",
"playlist_one": "Spellista",
"playlist_other": "Spellistor",
"artist_one": "Artist",
"artist_other": "Artister",
"albumArtist_one": "Albumartist",
"albumArtist_other": "Albumartister",
"albumArtistCount_one": "{{count}} albumartist",
"albumArtistCount_other": "{{count}} albumartister",
"albumWithCount_one": "{{count}} album",
"albumWithCount_other": "{{count}} album",
"favorite_one": "favorit",
"favorite_other": "favoriter",
"folder_one": "mapp",
"folder_other": "mappar",
"album_one": "album",
"album_other": "album",
"favorite_one": "Favorit",
"favorite_other": "Favoriter",
"folder_one": "Mapp",
"folder_other": "Mappar",
"album_one": "Album",
"album_other": "Album",
"playlistWithCount_one": "{{count}} spellista",
"playlistWithCount_other": "{{count}} spellistor",
"folderWithCount_one": "{{count}} mapp",
"folderWithCount_other": "{{count}} mappar",
"track_one": "spår",
"track_other": "spår",
"track_one": "Spår",
"track_other": "Spår",
"trackWithCount_one": "{{count}} spår",
"trackWithCount_other": "{{count}} spår",
"artistWithCount_one": "{{count}} artist",
"artistWithCount_other": "{{count}} artister",
"genre_one": "genre",
"genre_other": "genrer",
"genre_one": "Genre",
"genre_other": "Genrer",
"genreWithCount_one": "{{count}} genre",
"genreWithCount_other": "{{count}} genrer",
"play_one": "{{count}} spelning",
"play_other": "{{count}} spelningar",
"smartPlaylist": "smart $t(entity.playlist, {\"count\": 1})",
"song_one": "låt",
"song_other": "låtar",
"radioStation_one": "radiostation",
"radioStation_other": "radiostationer",
"smartPlaylist": "Smart $t(entity.playlist, {\"count\": 1})",
"song_one": "Låt",
"song_other": "Låtar",
"radioStation_one": "Radiostation",
"radioStation_other": "Radiostationer",
"radioStationWithCount_one": "{{count}} radiostation",
"radioStationWithCount_other": "{{count}} radiostationer"
},
"player": {
"repeat_all": "repetera alla",
"repeat": "repetera",
"queue_remove": "ta bort markerad",
"playRandom": "spela slumpmässigt",
"previous": "föregående",
"favorite": "favorit",
"next": "nästa",
"shuffle": "blanda",
"playbackFetchNoResults": "inga låtar hittades",
"playbackFetchInProgress": "laddar låtar…",
"addNext": "lägg till nästa",
"playbackSpeed": "uppspelningshastighet",
"playbackFetchCancel": "det här tar ett tag... stäng aviseringen för att avbryta",
"play": "spela",
"repeat_off": "repetera inaktiverad",
"queue_clear": "rensa kö",
"muted": "mutad",
"queue_moveToTop": "flytta markerad till botten",
"queue_moveToBottom": "flytta markerad till toppen",
"addLast": "lägg till sist",
"mute": "muta"
"repeat_all": "Repetera alla",
"repeat": "Repetera",
"queue_remove": "Ta bort markerad",
"playRandom": "Spela slumpmässigt",
"previous": "Föregående",
"favorite": "Favorit",
"next": "Nästa",
"shuffle": "Blanda",
"playbackFetchNoResults": "Inga låtar hittades",
"playbackFetchInProgress": "Laddar låtar…",
"addNext": "Lägg till nästa",
"playbackSpeed": "Uppspelningshastighet",
"playbackFetchCancel": "Det här tar ett tag... stäng aviseringen för att avbryta",
"play": "Spela",
"repeat_off": "Repetera inaktiverad",
"queue_clear": "Rensa kö",
"muted": "Mutad",
"queue_moveToTop": "Flytta markerad till toppen",
"queue_moveToBottom": "Flytta markerad till botten",
"addLast": "Lägg till sist",
"mute": "Muta"
},
"datetime": {
"minuteShort": "min",
"secondShort": "sek",
"hourShort": "h",
"dayShort": "dag"
"minuteShort": "Min",
"secondShort": "Sek",
"hourShort": "H",
"dayShort": "Dag"
},
"filterOperator": {
"after": "är efter",
"afterDate": "är efter (datum)",
"before": "är före",
"beforeDate": "är före (datum)",
"contains": "innehåller",
"endsWith": "slutar med",
"inPlaylist": "är inom",
"inTheLast": "är i den sista",
"inTheRange": "är i spannet",
"inTheRangeDate": "är i spannet (datum)",
"is": "är",
"isNot": "är inte",
"isGreaterThan": "är större än",
"isLessThan": "är mindre än",
"matchesRegex": "matchar regex",
"notContains": "innehåller inte",
"notInPlaylist": "är inte inom",
"notInTheLast": "är inte inom den sista",
"startsWith": "startar med"
"after": "Är efter",
"afterDate": "Är efter (datum)",
"before": "Är före",
"beforeDate": "Är före (datum)",
"contains": "Innehåller",
"endsWith": "Slutar med",
"inPlaylist": "Är inom",
"inTheLast": "Är i den sista",
"inTheRange": "Är i spannet",
"inTheRangeDate": "Är i spannet (datum)",
"is": "Är",
"isNot": "Är inte",
"isGreaterThan": "Är större än",
"isLessThan": "Är mindre än",
"matchesRegex": "Matchar regex",
"notContains": "Innehåller inte",
"notInPlaylist": "Är inte inom",
"notInTheLast": "Är inte inom den sista",
"startsWith": "Startar med"
}
}
+594 -44
View File
@@ -21,7 +21,23 @@
"openIn": {
"lastfm": "Last.fm இல் திறந்திருக்கும்",
"musicbrainz": "மியூசிக் பிரைன்ச் திறந்திருக்கும்"
}
},
"addOrRemoveFromSelection": "தேர்வில் இருந்து சேர்க்கவும் அல்லது நீக்கவும்",
"selectRangeOfItems": "உருப்படிகளின் வரம்பைத் தேர்ந்தெடுக்கவும்",
"createRadioStation": "$t(entity.radioStation, {\"count\": 1}) உருவாக்கவும்",
"deleteRadioStation": "$t(entity.radioStation, {\"count\": 1}) நீக்கு",
"selectAll": "அனைத்தையும் தெரிவுசெய்",
"downloadStarted": "{{count}} உருப்படிகளின் பதிவிறக்கம் தொடங்கியது",
"moveUp": "மேலே செல்ல",
"moveDown": "கீழே நகர",
"holdToMoveToTop": "மேலே செல்ல அழுத்திப் பிடிக்கவும்",
"holdToMoveToBottom": "கீழே நகர்த்த பிடிக்கவும்",
"moveItems": "பொருட்களை நகர்த்த",
"shuffle": "கலக்கு",
"shuffleAll": "அனைத்தையும் கலக்கவும்",
"shuffleSelected": "கலக்கு தேர்ந்தெடுக்கப்பட்டது",
"viewMore": "மேலும் பார்க்க",
"openApplicationDirectory": "பயன்பாட்டு கோப்பகத்தைத் திறக்கவும்"
},
"common": {
"description": "விவரம்",
@@ -67,7 +83,7 @@
"expand": "விரிவாக்கு",
"favorite": "பிடித்த",
"filter_one": "வடிப்பி",
"filter_other": "வடிப்பான்கள்",
"filter_other": "வடிகட்டிகள்",
"filters": "வடிப்பான்கள்",
"forceRestartRequired": "மாற்றங்களைப் பயன்படுத்த மறுதொடக்கம் செய்… மறுதொடக்கம் செய்ய அறிவிப்பை மூடு",
"forward": "முன்னோக்கி",
@@ -101,7 +117,7 @@
"saveAndReplace": "சேமித்து மாற்றவும்",
"search": "தேடல்",
"setting_one": "அமைத்தல்",
"setting_other": "",
"setting_other": "அமைப்புகள்",
"share": "பங்கு",
"size": "அளவு",
"sortOrder": "ஒழுங்கு",
@@ -119,7 +135,31 @@
"viewReleaseNotes": "வெளியீட்டு குறிப்புகளைக் காண்க",
"bitDepth": "பிட் ஆழம்",
"sampleRate": "மாதிரி வீதம்",
"tags": "குறிச்சொற்கள்"
"tags": "குறிச்சொற்கள்",
"countSelected": "{{count}} தேர்ந்தெடுக்கப்பட்டது",
"explicitStatus": "வெளிப்படையான நிலை",
"doNotShowAgain": "இதை மீண்டும் காட்டாதே",
"view": "பார்வை",
"example": "சான்று",
"externalLinks": "வெளிப்புற இணைப்புகள்",
"faster": "வேகமாக",
"filter_single": "ஒற்றை",
"filter_multiple": "பல",
"mood": "மனநிலை",
"noFilters": "வடிப்பான்கள் எதுவும் கட்டமைக்கப்படவில்லை",
"private": "தனிப்பட்ட",
"public": "பொது",
"retry": "மீண்டும் முயற்சிக்கவும்",
"recordLabel": "பதிவு சிட்டை",
"releaseType": "வெளியீட்டு வகை",
"rename": "மறுபெயரிடுங்கள்",
"slower": "மெதுவாக",
"sort": "வரிசைப்படுத்து",
"explicit": "வெளிப்படையான",
"clean": "தூய்மையான",
"gridRows": "கட்டம் வரிசைகள்",
"tableColumns": "அட்டவணை நெடுவரிசைகள்",
"itemsMore": "மேலும் {{count}}"
},
"entity": {
"folderWithCount_one": "{{count}} கோப்புறை",
@@ -128,8 +168,8 @@
"genre_other": "வகைகள்",
"genreWithCount_one": "{{count}} வகை",
"genreWithCount_other": "{{count}} வகைகள்",
"album_one": "செருகேடு",
"album_other": "செருகேடுகள்",
"album_one": "ஆல்பம்",
"album_other": "ஆல்பம்",
"albumArtist_one": "ஆல்பம் கலைஞர்",
"albumArtist_other": "ஆல்பம் கலைஞர்கள்",
"albumArtistCount_one": "{{count}} ஆல்பம் கலைஞர்",
@@ -140,13 +180,13 @@
"artist_other": "கலைஞர்கள்",
"artistWithCount_one": "{{count}} கலைஞர்",
"artistWithCount_other": "{{count}} கலைஞர்கள்",
"favorite_one": "பிடித்த",
"favorite_one": "பிடித்தது",
"favorite_other": "பிடித்தவை",
"folder_one": "கோப்புறை",
"folder_other": "கோப்புறைகள்",
"playlist_one": "பிளேலிச்ட்",
"playlist_other": "பிளேலிச்ட்கள்",
"play_one": "{{count}} நாடகம்",
"play_one": "{{count}} விளையாடு",
"play_other": "{{count}} நாடகங்கள்",
"playlistWithCount_one": "{{count}} பிளேலிச்ட்",
"playlistWithCount_other": "{{count}} பிளேலிச்ட்கள்",
@@ -155,8 +195,12 @@
"track_other": "தடங்கள்",
"song_one": "பாடல்",
"song_other": "பாடல்கள்",
"trackWithCount_one": "{{count}} டிராக்",
"trackWithCount_other": "{{count}} தடங்கள்"
"trackWithCount_one": "{{count}} தடம்",
"trackWithCount_other": "{{count}} தடங்கள்",
"radioStation_one": "வானொலி நிலையம்",
"radioStation_other": "வானொலி நிலையங்கள்",
"radioStationWithCount_one": "{{count}} வானொலி நிலையம்",
"radioStationWithCount_other": "{{count}} வானொலி நிலையங்கள்"
},
"error": {
"mpvRequired": "MPV தேவை",
@@ -182,7 +226,14 @@
"sessionExpiredError": "உங்கள் அமர்வு காலாவதியானது",
"systemFontError": "கணினி எழுத்துருக்களைப் பெற முயற்சிக்கும்போது பிழை ஏற்பட்டது",
"badValue": "தவறான விருப்பம் \"{{value}}\". இந்த மதிப்பு இனி இல்லை",
"notificationDenied": "அறிவிப்புகளுக்கான அனுமதிகள் மறுக்கப்பட்டன. இந்த அமைப்பு எந்த விளைவையும் ஏற்படுத்தாது"
"notificationDenied": "அறிவிப்புகளுக்கான அனுமதிகள் மறுக்கப்பட்டன. இந்த அமைப்பு எந்த விளைவையும் ஏற்படுத்தாது",
"invalidJson": "தவறான சாதொபொகு",
"multipleServerSaveQueueError": "நாடக வரிசையில் ஒன்று அல்லது அதற்கு மேற்பட்ட பாடல்கள் உள்ளன, அவை தற்போதைய சேவையகத்திலிருந்து இல்லை. இது ஆதரிக்கப்படவில்லை",
"noNetwork": "சர்வர் கிடைக்கவில்லை",
"noNetworkDescription": "இந்த சேவையகத்துடன் இணைக்க முடியவில்லை",
"saveQueueFailed": "வரிசையைச் சேமிக்க முடியவில்லை",
"serverLockSingleServer": "சேவையகம் பூட்டப்பட்டிருக்கும் போது ஒரு சேவையகம் மட்டுமே அனுமதிக்கப்படும்",
"settingsSyncError": "ரெண்டரரில் உள்ள அமைப்புகளுக்கும் முக்கிய செயல்முறைக்கும் இடையே முரண்பாடுகள் கண்டறியப்பட்டன. மாற்றங்களைப் பயன்படுத்த பயன்பாட்டை மறுதொடக்கம் செய்யுங்கள்"
},
"filter": {
"albumArtist": "$t(entity.albumArtist, {\"count\": 1})",
@@ -191,7 +242,7 @@
"biography": "சுயசரிதை",
"bitrate": "பிட்ரேட்",
"bpm": "பிபிஎம்",
"channels": "$t(common.channel_other)",
"channels": "$t(common.channel, {\"count\": 2})",
"comment": "கருத்து",
"communityRating": "சமூக மதிப்பீடு",
"path": "பாதை",
@@ -226,7 +277,11 @@
"songCount": "பாடல் எண்ணிக்கை",
"title": "தலைப்பு",
"toYear": "ஆண்டு",
"trackNumber": "மின்தடம்"
"trackNumber": "மின்தடம்",
"matchAnd": "மற்றும்",
"matchOr": "அல்லது",
"sortName": "வரிசை பெயர்",
"explicitStatus": "$t(common.explicitStatus)"
},
"form": {
"addServer": {
@@ -240,7 +295,12 @@
"input_url": "முகவரி",
"input_username": "பயனர்பெயர்",
"success": "சேவையகம் வெற்றிகரமாக சேர்க்கப்பட்டது",
"title": "சேவையகத்தைச் சேர்க்கவும்"
"title": "சேவையகத்தைச் சேர்க்கவும்",
"input_preferInstantMix": "உடனடி கலவையை விரும்புகிறது",
"input_preferInstantMixDescription": "ஒரே மாதிரியான பாடல்களைப் பெற உடனடி கலவையை மட்டுமே பயன்படுத்தவும். இந்த நடத்தையை மாற்றும் செருகுநிரல்கள் உங்களிடம் இருந்தால் பயனுள்ளதாக இருக்கும்",
"input_preferRemoteUrl": "பொது முகவரி ஐ விரும்பு",
"input_remoteUrl": "பொது முகவரி",
"input_remoteUrlPlaceholder": "விருப்பத்தேர்வு: வெளிப்புற அம்சங்களுக்கான பொது முகவரி"
},
"deletePlaylist": {
"input_confirm": "உறுதிப்படுத்த $t(entity.playlist, {\"count\": 1}) பெயரைத் தட்டச்சு செய்க",
@@ -260,7 +320,11 @@
"queryEditor": {
"input_optionMatchAll": "அனைத்தையும் பொருத்துங்கள்",
"input_optionMatchAny": "எந்த பொருத்தவும்",
"title": "வினவல் ஆசிரியர்"
"title": "வினவல் ஆசிரியர்",
"addRuleGroup": "விதி குழுவைச் சேர்க்கவும்",
"removeRuleGroup": "விதி குழுவை அகற்று",
"resetToDefault": "இயல்புநிலைக்கு மீட்டமைக்கவும்",
"clearFilters": "தெளிவான வடிகட்டிகள்"
},
"shareItem": {
"description": "விவரம்",
@@ -268,7 +332,9 @@
"expireInvalid": "காலாவதி எதிர்காலத்தில் இருக்க வேண்டும்",
"allowDownloading": "பதிவிறக்க அனுமதிக்கவும்",
"success": "இடைநிலைப்பலகைக்கு நகலெடுக்கப்பட்ட இணைப்பைப் பகிரவும் (அல்லது திறக்க இங்கே சொடுக்கு செய்க)",
"createFailed": "பங்கை உருவாக்கத் தவறிவிட்டது (பகிர்வு இயக்கப்பட்டதா?)"
"createFailed": "பங்கை உருவாக்கத் தவறிவிட்டது (பகிர்வு இயக்கப்பட்டதா?)",
"copyToClipboard": "இடைநிலைப்பலகைக்கு நகலெடு: Ctrl+C, உள்ளிடவும்",
"successMustClick": "பகிர்வு வெற்றிகரமாக உருவாக்கப்பட்டது. திறக்க இங்கே சொடுக்கு செய்யவும்"
},
"createPlaylist": {
"success": "$t(entity.playlist, {\"count\": 1}) வெற்றிகரமாக உருவாக்கப்பட்டது",
@@ -282,11 +348,48 @@
"input_playlists": "$t(entity.playlist, {\"count\": 2})",
"input_skipDuplicates": "நகல்களைத் தவிர்க்கவும்",
"success": "$t(entity.trackWithCount, {\"count\": {{message}} }) இதற்கு $t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} }) சேர்க்கப்பட்டது",
"title": "$t(entity.playlist, {\"count\": 1}) இல் சேர்"
"title": "$t(entity.playlist, {\"count\": 1}) இல் சேர்",
"create": "$t(entity.playlist, {\"count\": 1}) {{playlist}} உருவாக்கு",
"searchOrCreate": "$t(entity.playlist, {\"count\": 2}) தேடவும் அல்லது புதிய ஒன்றை உருவாக்க தட்டச்சு செய்யவும்"
},
"updateServer": {
"success": "சேவையகம் வெற்றிகரமாக புதுப்பிக்கப்பட்டது",
"title": "புதுப்பிப்பு சேவையகம்"
},
"largeFetchConfirmation": {
"title": "பொருட்களை வரிசையில் சேர்க்கவும்",
"description": "இந்தச் செயல் தற்போதைய வடிகட்டப்பட்ட காட்சியில் உள்ள அனைத்து உருப்படிகளையும் சேர்க்கும்"
},
"createRadioStation": {
"success": "வானொலி நிலையம் வெற்றிகரமாக உருவாக்கப்பட்டது",
"title": "வானொலி நிலையத்தை உருவாக்குங்கள்",
"input_homepageUrl": "முகப்பு முகவரி",
"input_name": "பெயர்",
"input_streamUrl": "ச்ட்ரீம் முகவரி"
},
"lyricsExport": {
"export": "ஏற்றுமதி பாடல் வரிகள்",
"input_synced": "ஒத்திசைக்கப்பட்ட பாடல் வரிகளை ஏற்றுமதி செய்யவும்",
"input_offset": "$t(setting.lyricOffset)"
},
"saveQueue": {
"success": "சேவையகத்தில் விளையாடும் வரிசை சேமிக்கப்பட்டது"
},
"shuffleAll": {
"title": "சீரற்ற விளையாட",
"input_genre": "$t(entity.genre, {\"count\": 1})",
"input_limit": "எத்தனை பாடல்கள்?",
"input_minYear": "ஆண்டு முதல்",
"input_maxYear": "ஆண்டுக்கு",
"input_played": "விளையாடு வடிகட்டி",
"input_played_optionAll": "அனைத்து தடங்கள்",
"input_played_optionUnplayed": "இயக்கப்படாத தடங்கள் மட்டுமே",
"input_played_optionPlayed": "டிராக்குகளை மட்டுமே இயக்கியது"
},
"privateMode": {
"enabled": "தனிப்பட்ட பயன்முறை இயக்கப்பட்டது, பின்னணி நிலை இப்போது வெளிப்புற ஒருங்கிணைப்புகளிலிருந்து மறைக்கப்பட்டுள்ளது",
"disabled": "தனிப்பட்ட பயன்முறை முடக்கப்பட்டுள்ளது, இயக்கப்பட்ட வெளிப்புற ஒருங்கிணைப்புகளுக்கு இப்போது பின்னணி நிலை தெரியும்",
"title": "தனிப்பட்ட முறை"
}
},
"page": {
@@ -299,7 +402,13 @@
"viewAllTracks": "அனைத்தையும் காண்க $t(entity.track, {\"count\": 2})",
"relatedArtists": "தொடர்புடைய $t(entity.artist, {\"count\": 2})",
"topSongsFrom": "{{title}} இலிருந்து சிறந்த பாடல்கள்",
"viewAll": "அனைத்தையும் காண்க"
"viewAll": "அனைத்தையும் காண்க",
"favoriteSongs": "பிடித்த பாடல்கள்",
"groupingTypeAll": "அனைத்து வகையான வெளியீடுகள்",
"groupingTypePrimary": "முதன்மை வெளியீட்டு வகைகள்",
"topSongsCommunity": "சமூகம்",
"topSongsPersonal": "தனிப்பட்ட",
"favoriteSongsFrom": "{{title}} இலிருந்து பிடித்த பாடல்கள்"
},
"appMenu": {
"goBack": "திரும்பிச் செல்லுங்கள்",
@@ -311,7 +420,13 @@
"quit": "$t(common.quit)",
"selectServer": "சேவையகத்தைத் தேர்ந்தெடுக்கவும்",
"settings": "$t(common.setting, {\"count\": 2})",
"version": "பதிப்பு {{version}}"
"version": "பதிப்பு {{version}}",
"commandPalette": "கட்டளை தட்டு திறக்க",
"privateModeOff": "தனிப்பட்ட பயன்முறையை அணைக்கவும்",
"privateModeOn": "தனிப்பட்ட பயன்முறையை இயக்கவும்",
"selectMusicFolder": "இசை கோப்புறையைத் தேர்ந்தெடுக்கவும்",
"noMusicFolder": "இசை கோப்புறை எதுவும் தேர்ந்தெடுக்கப்படவில்லை",
"multipleMusicFolders": "{{count}} இசை கோப்புறைகள் தேர்ந்தெடுக்கப்பட்டன"
},
"manageServers": {
"url": "முகவரி",
@@ -343,7 +458,11 @@
"showDetails": "தகவலைப் பெறுங்கள்",
"addToFavorites": "$t(action.addToFavorites)",
"addToPlaylist": "$t(action.addToPlaylist)",
"createPlaylist": "$t(action.createPlaylist)"
"createPlaylist": "$t(action.createPlaylist)",
"moveItems": "$t(action.moveItems)",
"goTo": "செல்",
"goToAlbum": "$t(entity.album, {\"count\": 1}) க்குச் செல்",
"goToAlbumArtist": "$t(entity.albumArtist, {\"count\": 1}) க்குச் செல்"
},
"fullscreenPlayer": {
"config": {
@@ -386,7 +505,9 @@
"mostPlayed": "அதிகம் விளையாடியது",
"newlyAdded": "புதிதாக சேர்க்கப்பட்ட வெளியீடுகள்",
"recentlyPlayed": "அண்மைக் காலத்தில் விளையாடியது",
"title": "$t(common.home)"
"title": "$t(common.home)",
"genres": "$t(entity.genre, {\"count\": 2})",
"recentlyReleased": "அண்மைக் காலத்தில் வெளியானது"
},
"itemDetail": {
"copyPath": "இடைநிலைப்பலகைக்கு பாதையை நகலெடுக்கவும்",
@@ -404,7 +525,25 @@
"generalTab": "பொது",
"hotkeysTab": "ஆட்கீச்",
"playbackTab": "பின்னணி",
"windowTab": "சாளரம்"
"windowTab": "சாளரம்",
"analytics": "பகுப்பாய்வு",
"updates": "புதுப்பிப்பு",
"cache": "தற்காலிக சேமிப்பு",
"application": "விண்ணப்பம்",
"queryBuilder": "வினவல் கட்டுபவர்",
"theme": "கருப்பொருள்",
"controls": "கட்டுப்பாடுகள்",
"sidebar": "பக்கப்பட்டி",
"remote": "தொலைவில்",
"exportImport": "இறக்குமதி/ஏற்றுமதி",
"scrobble": "சுருள்",
"audio": "ஆடியோ",
"lyrics": "பாடல் வரிகள்",
"lyricsDisplay": "பாடல் வரிகள் காட்சி",
"transcoding": "டிரான்ச்கோடிங்",
"discord": "முரண்பாடு",
"logger": "மரம் வெட்டுபவர்",
"playerFilters": "பிளேயர் வடிப்பான்கள்"
},
"sidebar": {
"folders": "$t(entity.folder, {\"count\": 2})",
@@ -419,7 +558,10 @@
"artists": "$t(entity.artist, {\"count\": 2})",
"shared": "$t(entity.playlist, {\"count\": 2}) பகிரப்பட்டது",
"tracks": "$t(entity.track, {\"count\": 2})",
"myLibrary": "எனது நூலகம்"
"myLibrary": "எனது நூலகம்",
"collections": "சேகரிப்புகள்",
"favorites": "$t(entity.favorite, {\"count\": 2})",
"radio": "$t(entity.radioStation, {\"count\": 2})"
},
"trackList": {
"title": "$t(entity.track, {\"count\": 2})",
@@ -438,11 +580,33 @@
"artistAlbums": "ஆல்பங்கள் {{artist}}",
"genreAlbums": "\"{{genre}}\" $t(entity.album, {\"count\": 2})",
"title": "$t(entity.album, {\"count\": 2})"
},
"radioList": {
"title": "வானொலி நிலையங்கள்"
},
"releasenotes": {
"commitsSinceStable": "{{stable}} முதல் உறுதியளிக்கிறது",
"noNewCommits": "இந்த வரம்பில் புதிய பொறுப்புகள் எதுவும் இல்லை",
"noStableReleaseToCompare": "ஒப்பிடுவதற்கு நிலையான வெளியீடு இல்லை"
},
"favorites": {
"title": "$t(entity.favorite, {\"count\": 2})"
},
"windowBar": {
"paused": "(இடைநிறுத்தப்பட்டது) ",
"privateMode": "(தனிப்பட்ட முறை)"
},
"folderList": {
"title": "$t(entity.folder, {\"count\": 2})"
},
"collections": {
"overrideExisting": "ஏற்கனவே உள்ளதை மேலெழுதவும்",
"saveAsCollection": "சேகரிப்பாக சேமிக்கவும்"
}
},
"player": {
"addLast": "கடைசியாக சேர்க்கவும்",
"addNext": "அடுத்து சேர்க்கவும்",
"addLast": "கடைசி",
"addNext": "அடுத்து",
"favorite": "பிடித்த",
"mute": "ஒலிமுடக்கு",
"muted": "முடக்கிய",
@@ -455,7 +619,7 @@
"repeat": "மீண்டும்",
"repeat_all": "அனைத்தையும் மீண்டும் செய்யவும்",
"repeat_off": "முடக்கப்பட்டதை மீண்டும் செய்யவும்",
"shuffle": "விளையாட்டு மாற்றப்பட்டது",
"shuffle": "விளையாடு (குலைக்கப்பட்டது)",
"shuffle_off": "கலக்கு முடக்கப்பட்டது",
"skip": "தவிர்",
"playbackFetchCancel": "இது சிறிது நேரம் ஆகும்… ரத்து செய்ய அறிவிப்பை மூடு",
@@ -463,15 +627,33 @@
"playbackFetchNoResults": "பாடல்கள் எதுவும் கிடைக்கவில்லை",
"playbackSpeed": "பிளேபேக் விரைவு",
"playRandom": "சீரற்ற முறையில் விளையாடுங்கள்",
"queue_moveToBottom": "மேலே தேர்ந்தெடுக்கப்பட்ட நகர்த்த",
"queue_moveToTop": "தேர்ந்தெடுக்கப்பட்டதை கீழே நகர்த்தவும்",
"queue_moveToBottom": "தேர்ந்தெடுக்கப்பட்டதை கீழே நகர்த்தவும்",
"queue_moveToTop": "மேலே தேர்ந்தெடுக்கப்பட்ட நகர்த்த",
"skip_back": "பின்னோக்கி தவிர்க்கவும்",
"skip_forward": "முன்னோக்கி தவிர்க்கவும்",
"stop": "நிறுத்து",
"toggleFullscreenPlayer": "முழுத்திரை பிளேயரை மாற்றவும்",
"unfavorite": "மாறாத",
"pause": "இடைநிறுத்தம்",
"viewQueue": "வரிசையைக் காண்க"
"viewQueue": "வரிசையைக் காண்க",
"addLastShuffled": "கடைசியாக (குறைக்கப்பட்டது)",
"addNextShuffled": "அடுத்தது (குலைக்கப்பட்டது)",
"albumRadio": "ஆல்பம் வானொலி",
"artistRadio": "கலைஞர் வானொலி",
"holdToShuffle": "கலக்க பிடி",
"lyrics": "பாடல் வரிகள்",
"restoreQueueFromServer": "சேவையகத்திலிருந்து வரிசையை மீட்டமை",
"saveQueueToServer": "சேவையகத்தில் வரிசையைச் சேமிக்கவும்",
"trackRadio": "டிராக் ரேடியோ",
"sleepTimer": "தூக்க நேரம்",
"sleepTimer_endOfSong": "தற்போதைய பாடலின் முடிவு",
"sleepTimer_minutes": "{{count}} மணித்துளி",
"sleepTimer_hours": "{{count}} மணி",
"sleepTimer_custom": "தனிப்பயன்",
"sleepTimer_off": "அணை",
"sleepTimer_timeRemaining": "{{time}} மீதமுள்ளது",
"sleepTimer_setCustom": "டைமரை அமைக்கவும்",
"sleepTimer_cancel": "நேரங்குறிகருவி ரத்து"
},
"setting": {
"accentColor": "உச்சரிப்பு நிறம்",
@@ -480,7 +662,7 @@
"applicationHotkeys": "பயன்பாட்டு ஆட்கீச்",
"applicationHotkeys_description": "பயன்பாட்டு ஆட்கீசை உள்ளமைக்கவும். உலகளாவிய ஆட்ச்கியாக அமைக்க தேர்வுப்பெட்டியை மாற்றவும் (டெச்க்டாப் மட்டும்)",
"artistConfiguration": "ஆல்பம் கலைஞர் பக்க உள்ளமைவு",
"audioDevice_description": "பிளேபேக்கிற்கு பயன்படுத்த ஆடியோ சாதனத்தைத் தேர்ந்தெடுக்கவும் (வெப் பிளேயர் மட்டும்)",
"audioDevice_description": "பிளேபேக்கிற்குப் பயன்படுத்த ஆடியோ சாதனத்தைத் தேர்ந்தெடுக்கவும்",
"audioExclusiveMode": "ஆடியோ பிரத்தியேக பயன்முறை",
"audioPlayer": "ஆடியோ பிளேயர்",
"audioPlayer_description": "பிளேபேக்கிற்கு பயன்படுத்த ஆடியோ பிளேயரைத் தேர்ந்தெடுக்கவும்",
@@ -531,7 +713,7 @@
"lastfmApiKey": "{{lastfm}} பநிஇ key",
"lastfmApiKey_description": "{{lastfm}} க்கான பநிஇ விசை. கவர் கலைக்குத் தேவை",
"lyricFetch": "இணையத்திலிருந்து வரிகளை பெறுங்கள்",
"lyricFetchProvider_description": "பாடல் பெற வழங்குநர்களைத் தேர்ந்தெடுக்கவும். வழங்குநர்களின் வரிசை அவர்கள் வினவப்படும் ஒழுங்கு",
"lyricFetchProvider_description": "பாடல் வரிகளைப் பெற வழங்குநர்களைத் தேர்ந்தெடுக்கவும்",
"lyricOffset": "பாடல் ஆஃப்செட் (எம்.எச்)",
"minimizeToTray": "தட்டில் குறைக்கவும்",
"minimumScrobblePercentage": "குறைந்தபட்ச துணிச்சல் காலம் (சதவீதம்)",
@@ -618,7 +800,7 @@
"enableRemote": "ரிமோட் கண்ட்ரோல் சேவையகத்தை இயக்கவும்",
"enableRemote_description": "பயன்பாட்டைக் கட்டுப்படுத்த மற்ற சாதனங்களை அனுமதிக்க ரிமோட் கண்ட்ரோல் சேவையகத்தை இயக்குகிறது",
"externalLinks": "வெளிப்புற இணைப்புகளைக் காட்டு",
"externalLinks_description": "கலைஞர்/ஆல்பம் பக்கங்களில் வெளிப்புற இணைப்புகளை (last.fm, மியூசிக் ப்ரெய்ன்ச்) காண்பிக்க உதவுகிறது",
"externalLinks_description": "கலைஞர்/ஆல்பம் பக்கங்களில் வெளிப்புற இணைப்புகளை (Last.fm, மியூசிக் ப்ரெய்ன்ச்) காண்பிக்க உதவுகிறது",
"exitToTray": "தட்டில் வெளியேறவும்",
"globalMediaHotkeys": "உலகளாவிய மீடியா ஆட்கீச்",
"discordUpdateInterval": "{{discord}} பணக்கார இருப்பு புதுப்பிப்பு இடைவெளி",
@@ -687,17 +869,143 @@
"discordPausedStatus": "இடைநிறுத்தப்படும்போது பணக்கார இருப்பைக் காட்டுங்கள்",
"discordPausedStatus_description": "இயக்கப்பட்டால், பிளேயர் இடைநிறுத்தப்படும்போது நிலை காண்பிக்கப்படும்",
"discordServeImage": "சேவையகத்திலிருந்து {{discord}} படங்களை பரிமாறவும்",
"discordServeImage_description": "{{discord}} சேவையகத்திலிருந்தே பணக்கார இருப்புக்கான கவர் கலையைப் பகிரவும், செலிஃபின் மற்றும் நுடிட்ரோம மட்டுமே கிடைக்கும்",
"discordServeImage_description": "சேவையகத்திலிருந்தே {{discord}} சிறந்த இருப்புக்கான கவர் ஆர்ட்டைப் பகிரவும், செல்லிஃபின் மற்றும் நிட்ரோமுக்கு மட்டுமே கிடைக்கும். படங்களைப் பெற {{discord}} ஒரு போட்டைப் பயன்படுத்துகிறது, எனவே உங்கள் சர்வர் பொது இணையத்திலிருந்து அணுகக்கூடியதாக இருக்க வேண்டும்",
"preferLocalLyrics": "உள்ளக பாடல்களை விரும்புங்கள்",
"preferLocalLyrics_description": "கிடைக்கும்போது தொலைநிலை பாடல்களை விட உள்ளக பாடல்களை விரும்புங்கள்",
"lastfm": "last.fm இணைப்புகளைக் காட்டு",
"lastfm": "Last.fm இணைப்புகளைக் காட்டு",
"lastfm_description": "கலைஞர்/ஆல்பம் பக்கங்களில் Last.fm க்கான இணைப்புகளைக் காட்டு",
"musicbrainz": "மியூசிக் பிரேன்ச் இணைப்புகளைக் காட்டு",
"musicbrainz_description": "கலைஞர்/ஆல்பம் பக்கங்களில் மியூசிக் பிரைன்ச் இணைப்புகளைக் காட்டு, அங்கு மியூசிக் பிரைன்ச் ID உள்ளது",
"neteaseTranslation": "நெட்ச் மொழிபெயர்ப்புகளை இயக்கவும்",
"neteaseTranslation_description": "இயக்கப்பட்டால், கிடைத்தால் நெட்சிலிருந்து மொழிபெயர்க்கப்பட்ட பாடல்களைப் பெறுகிறது மற்றும் காட்சிப்படுத்துகிறது",
"preservePitch": "சுருதியைப் பாதுகாக்கவும்",
"preservePitch_description": "பின்னணி வேகத்தை மாற்றும்போது சுருதியைப் பாதுகாக்கிறது"
"preservePitch_description": "பின்னணி வேகத்தை மாற்றும்போது சுருதியைப் பாதுகாக்கிறது",
"autoDJ": "ஆட்டோ டி.சே",
"autoDJ_itemCount": "பொருள் எண்ணிக்கை",
"autoDJ_itemCount_description": "ஆட்டோ DJ இயக்கப்பட்டிருக்கும் போது, வரிசையில் சேர்க்க முயற்சிக்கும் உருப்படிகளின் எண்ணிக்கை",
"autoDJ_timing": "நேரவிவரம்",
"autoDJ_timing_description": "ஆட்டோ டிசேக்கு முன் வரிசையில் மீதமுள்ள பாடல்களின் எண்ணிக்கை தூண்டப்படுகிறது",
"useThemeAccentColor": "கருப்பொருள் உச்சரிப்பு நிறத்தைப் பயன்படுத்தவும்",
"useThemeAccentColor_description": "தனிப்பயன் உச்சரிப்பு நிறத்திற்குப் பதிலாக தேர்ந்தெடுக்கப்பட்ட தீமில் வரையறுக்கப்பட்ட முதன்மை வண்ணத்தைப் பயன்படுத்தவும்",
"analyticsDisable": "பயன்பாடு அடிப்படையிலான பகுப்பாய்வுகளில் இருந்து விலகுதல்",
"analyticsDisable_description": "பயன்பாட்டை மேம்படுத்த உதவ டெவெலப்பருக்கு அநாமதேய பயன்பாட்டுத் தரவு அனுப்பப்படுகிறது",
"analyticsEnable": "பயன்பாட்டு அடிப்படையிலான பகுப்பாய்வுகளை அனுப்பவும்",
"analyticsEnable_description": "பயன்பாட்டை மேம்படுத்த உதவ டெவெலப்பருக்கு அநாமதேய பயன்பாட்டுத் தரவு அனுப்பப்படுகிறது",
"artistBackground": "கலைஞர் பின்னணி படம்",
"artistBackground_description": "கலைஞர் கலையை உள்ளடக்கிய கலைஞர் பக்கங்களுக்கு பின்னணி படத்தை சேர்க்கிறது",
"artistBackgroundBlur": "கலைஞர் பின்னணி படம் மங்கலான அளவு",
"artistBackgroundBlur_description": "கலைஞரின் பின்னணி படத்தில் பயன்படுத்தப்படும் மங்கலின் அளவை சரிசெய்கிறது",
"artistReleaseTypeConfiguration": "கலைஞர் வெளியீட்டு வகை கட்டமைப்பு",
"artistReleaseTypeConfiguration_description": "ஆல்பம் கலைஞர் பக்கத்தில் என்ன வெளியீட்டு வகைகள் காட்டப்படுகின்றன, எந்த வரிசையில் உள்ளன என்பதை உள்ளமைக்கவும்",
"crossfadeStyle": "குறுக்குவழி பாணி",
"automaticUpdates": "தானியங்கி புதுப்பிப்புகள்",
"automaticUpdates_description": "புதுப்பிப்புகளை தானாக சரிபார்த்து நிறுவவும்",
"releaseChannel_optionAlpha": "ஆல்பா (இரவு)",
"releaseChannel_optionBeta": "பீட்டா",
"releaseChannel_optionLatest": "அண்மைக் கால",
"releaseChannel": "வெளியீடு சேனல்",
"releaseChannel_description": "தானியங்கி புதுப்பிப்புகளுக்கு நிலையான, பீட்டா அல்லது ஆல்பா (இரவு) வெளியீடுகளுக்கு இடையே தேர்வு செய்யவும்",
"discordDisplayType_artistname": "கலைஞர் பெயர்(கள்)",
"discordDisplayType_description": "உங்கள் நிலையில் நீங்கள் கேட்பதை மாற்றுகிறது",
"discordDisplayType_songname": "பாடல் பெயர்",
"discordDisplayType": "{{discord}} இருப்பு காட்சி வகை",
"discordLinkType_description": "{{discord}} சிறந்த முன்னிலையில் பாடல் மற்றும் கலைஞர் புலங்களுக்கு {{lastfm}} அல்லது {{musicbrainz}} வெளிப்புற இணைப்புகளைச் சேர்க்கிறது. {{musicbrainz}} மிகவும் துல்லியமானது ஆனால் குறிச்சொற்கள் தேவை மற்றும் கலைஞர் இணைப்புகளை வழங்காது, {{lastfm}} எப்போதும் இணைப்பை வழங்க வேண்டும். கூடுதல் பிணைய கோரிக்கைகளை செய்யாது",
"discordLinkType_mbz_lastfm": "{{musicbrainz}} உடன் {{lastfm}} ஃபால்பேக்",
"discordLinkType_none": "$t(common.none)",
"discordLinkType": "{{discord}} இருப்பு இணைப்புகள்",
"discordRichPresence": "{{discord}} பணக்கார இருப்பு",
"discordStateIcon": "விளையாடும் ஐகானைக் காட்டு",
"discordStateIcon_description": "பணக்கார இருப்பு நிலையில் சிறிய விளையாடும் ஐகானைக் காட்டு. இடைநிறுத்தப்பட்ட படவுரு எப்போதும் \"இடைநிறுத்தப்பட்ட போது பணக்கார இருப்பைக் காட்டு\" இயக்கப்பட்டிருக்கும் போது காண்பிக்கப்படும்",
"enableAutoTranslation_description": "பாடல் வரிகள் ஏற்றப்படும் போது தானாகவே மொழிபெயர்ப்பை இயக்கவும்",
"enableAutoTranslation": "தானியங்கு மொழிபெயர்ப்பை இயக்கு",
"exportImportSettings_control_description": "சாதொபொகு வழியாக ஏற்றுமதி மற்றும் இறக்குமதி அமைப்புகளை",
"exportImportSettings_control_exportText": "ஏற்றுமதி அமைப்புகள்",
"exportImportSettings_control_importText": "இறக்குமதி அமைப்புகள்",
"exportImportSettings_control_title": "இறக்குமதி / ஏற்றுமதி அமைப்புகள்",
"exportImportSettings_destructiveWarning": "அமைப்புகளை இறக்குமதி செய்வது அழிவுகரமானது, கீழே உள்ள \"இறக்குமதி\" என்பதைக் சொடுக்கு செய்வதற்கு முன் மேலே உள்ளவற்றை மதிப்பாய்வு செய்யவும்!",
"exportImportSettings_importBtn": "இறக்குமதி அமைப்புகள்",
"exportImportSettings_importModalTitle": "Feishin அமைப்புகளை இறக்குமதி செய்யவும்",
"exportImportSettings_importSuccess": "அமைப்புகள் வெற்றிகரமாக இறக்குமதி செய்யப்பட்டன!",
"exportImportSettings_notValidJSON": "அனுப்பப்பட்ட கோப்பு சாதொபொகு செல்லுபடியாகாது",
"exportImportSettings_offendingKeyError": "\"{{offendingKey}}\" தவறானது - {{reason}}",
"followCurrentSong_description": "தானாக விளையாடும் வரிசையை தற்போதைய பாடலுக்கு உருட்டும்",
"followCurrentSong": "தற்போதைய பாடலைப் பின்பற்றவும்",
"homeFeatureStyle_description": "வீட்டில் இடம்பெற்றுள்ள கொணர்வியின் பாணியைக் கட்டுப்படுத்துகிறது",
"homeFeatureStyle": "வீட்டில் இடம்பெற்றது கொணர்வி பாணி",
"homeFeatureStyle_optionMultiple": "பல",
"homeFeatureStyle_optionSingle": "ஒற்றை",
"hotkey_listNavigateToPage": "பட்டியல் உருப்படி பக்கத்திற்கு செல்லவும்",
"hotkey_listPlayDefault": "பட்டியல் நாடகம்",
"hotkey_listPlayLast": "பட்டியல் கடைசியாக விளையாடு",
"hotkey_listPlayNext": "பட்டியல் அடுத்து விளையாடு",
"hotkey_listPlayNow": "பட்டியல் விளையாட இப்போது",
"hotkey_navigateHome": "வீட்டிற்கு செல்லவும்",
"language": "மொழி",
"logLevel": "பதிவு நிலை",
"logLevel_description": "காண்பிக்க குறைந்தபட்ச பதிவு அளவை அமைக்கிறது. பிழைத்திருத்தம் அனைத்து பதிவுகளையும் காட்டுகிறது, பிழை பிழைகளை மட்டுமே காட்டுகிறது",
"logLevel_optionDebug": "பிழைத்திருத்தம்",
"logLevel_optionError": "பிழை",
"logLevel_optionInfo": "தகவல்",
"logLevel_optionWarn": "முன்னறிவிப்பு",
"mpvExtraParameters": "MPV கூடுதல் அளவுருக்கள்",
"mpvExtraParameters_description": "MPV க்கு அனுப்ப கூடுதல் வாதங்கள்",
"notify": "பாடல் அறிவிப்புகளை இயக்கவும்",
"notify_description": "தற்போதைய பாடலை மாற்றும்போது அறிவிப்புகளைக் காட்டு",
"pathReplace": "கோப்பு பாதை மாற்று",
"pathReplace_description": "உங்கள் சேவையகத்தின் இயல்புநிலை கோப்பு பாதையை மாற்றவும்",
"pathReplace_optionRemovePrefix": "முன்னொட்டை அகற்று",
"pathReplace_optionAddPrefix": "முன்னொட்டு சேர்க்கவும்",
"playerFilters": "வரிசையில் இருந்து பாடல்களை வடிகட்டவும்",
"playerFilters_description": "பின்வரும் அளவுகோல்களின் அடிப்படையில் பாடல்களை வரிசையில் சேர்க்காமல் தவிர்க்கவும்",
"artistRadioCount_description": "கலைஞர் வானொலி மற்றும் ட்ராக் வானொலிக்கான பாடல்களின் எண்ணிக்கையை அமைக்கிறது",
"artistRadioCount": "கலைஞர்/டிராக் ரேடியோ எண்ணிக்கை",
"imageResolution": "படத்தின் தீர்மானம்",
"imageResolution_description": "பயன்பாட்டைச் சுற்றிப் பயன்படுத்தப்படும் படங்களுக்கான தீர்மானம். 0 இன் மதிப்பைப் பயன்படுத்துவது இயல்பான படத் தீர்மானத்திற்கு இயல்புநிலையாக இருக்கும்",
"imageResolution_optionTable": "அட்டவணை",
"imageResolution_optionItemCard": "பொருள் அட்டை",
"imageResolution_optionSidebar": "பக்கப்பட்டி",
"imageResolution_optionHeader": "தலைப்பி",
"imageResolution_optionFullScreenPlayer": "முழுத்திரை பிளேயர்",
"playerbarSlider": "பிளேயர்பார் ச்லைடர்",
"playerbarSlider_description": "மெதுவான அல்லது மீட்டர் இணைய இணைப்பில் இருந்தால் அலைவடிவம் பரிந்துரைக்கப்படுவதில்லை",
"playerbarSliderType_optionSlider": "ச்லைடர்",
"playerbarSliderType_optionWaveform": "அலைவடிவம், அலைப்படம்",
"playerbarWaveformAlign": "அலை வடிவ சீரமைப்பு",
"playerbarWaveformAlign_optionTop": "மேலே",
"playerbarWaveformAlign_optionCenter": "நடுவண்",
"playerbarWaveformAlign_optionBottom": "கீழே",
"playerbarWaveformBarWidth": "அலைவடிவ பட்டை அகலம்",
"playerbarWaveformGap": "அலைவடிவ இடைவெளி",
"playerbarWaveformRadius": "அலைவடிவ ஆரம்",
"showLyricsInSidebar_description": "பாடல் வரிகளைக் காண்பிக்கும் இணைக்கப்பட்ட நாடக வரிசையில் ஒரு குழு சேர்க்கப்படும்",
"showLyricsInSidebar": "பிளேயர் பக்கப்பட்டியில் பாடல் வரிகளைக் காட்டு",
"showRatings_description": "நட்சத்திர மதிப்பீடு நற்பொருத்தம் இடைமுகத்தில் காட்டப்பட்டால் கட்டுப்படுத்துகிறது",
"showRatings": "நட்சத்திர மதிப்பீடுகளைக் காட்டு",
"blurExplicitImages": "வெளிப்படையான படங்களை மங்கலாக்கும்",
"blurExplicitImages_description": "வெளிப்படையாகக் குறியிடப்பட்ட ஆல்பம் மற்றும் பாடல் கலைப்படைப்புகள் மங்கலாக்கப்படும்",
"enableGridMultiSelect": "கட்டம் பல தேர்வை இயக்கவும்",
"enableGridMultiSelect_description": "இயக்கப்பட்டால், கட்டக் காட்சிகளில் பல உருப்படிகளைத் தேர்ந்தெடுக்க அனுமதிக்கிறது. முடக்கப்பட்டிருக்கும் போது, கிரிட் உருப்படி படங்களைக் சொடுக்கு செய்வதன் மூலம் உருப்படி பக்கத்திற்குச் செல்லும்",
"showVisualizerInSidebar_description": "விசுவலைசரைக் காட்டும் பிளேயர் பக்கப்பட்டியில் ஒரு பேனல் சேர்க்கப்படும்",
"showVisualizerInSidebar": "பிளேயர் பக்கப்பட்டியில் காட்சிப்படுத்தலைக் காட்டு",
"combinedLyricsAndVisualizer_description": "பாடல் வரிகளையும் காட்சிப்படுத்தலையும் ஒரே பேனலில் இணைக்கவும்",
"combinedLyricsAndVisualizer": "பிளேயர் பக்கப்பட்டியில் பாடல் வரிகள் மற்றும் காட்சிப்படுத்தல் ஆகியவற்றை இணைக்கவும்",
"audioFadeOnStatusChange": "நிலை மாறும்போது ஆடியோ மங்குகிறது",
"audioFadeOnStatusChange_description": "ப்ளே/இடைநிறுத்தம் நிலை மாறும்போது ஃபேட் அவுட் மற்றும் ஃபேட் இன் செயல்படுத்துகிறது",
"preventSleepOnPlayback_description": "இசை இயங்கும் போது காட்சி தூங்குவதைத் தடுக்கிறது",
"preventSleepOnPlayback": "பிளேபேக்கில் தூக்கத்தைத் தடுக்கவும்",
"sidebarPlaylistSorting_description": "இயல்புநிலை சர்வர் ஆர்டருக்குப் பதிலாக இழுத்து விடுவதைப் பயன்படுத்தி பக்கப்பட்டியில் கைமுறையாக பிளேலிச்ட்டை வரிசைப்படுத்த அனுமதிக்கிறது",
"sidebarPlaylistSorting": "பக்கப்பட்டி பிளேலிச்ட் வரிசையாக்கம்",
"sidebarPlaylistListFilterRegex_description": "இந்த வழக்கமான வெளிப்பாட்டுடன் பொருந்தக்கூடிய பிளேலிச்ட்களை பக்கப்பட்டியில் மறைக்கவும்",
"sidebarPlaylistListFilterRegex_placeholder": "எ.கா. ^தினசரி கலவை.*",
"sidebarPlaylistListFilterRegex": "பிளேலிச்ட் வடிகட்டி வழக்கவெளி",
"mediaSession_description": "மீடியா அமர்வு ஒருங்கிணைப்பை செயல்படுத்துகிறது, மீடியா கட்டுப்பாடுகள் மற்றும் மெட்டாடேட்டாவை கணினி தொகுதி மேலடுக்கு மற்றும் பூட்டுத் திரையில் காண்பிக்கும்",
"mediaSession": "ஊடக அமர்வை இயக்கவும்",
"transcode": "டிரான்ச்கோடிங்கை இயக்கவும்",
"queryBuilder": "வினவல் கட்டுபவர்",
"queryBuilderCustomFields_inputLabel": "சிட்டை",
"queryBuilderCustomFields_inputTag": "குறிச்சொல்",
"queryBuilderCustomFields": "விருப்ப புலங்கள்",
"queryBuilderCustomFields_description": "வினவல் பில்டர்களில் பயன்படுத்த தனிப்பயன் புலங்களைச் சேர்க்கவும்"
},
"table": {
"config": {
@@ -706,8 +1014,8 @@
"artist": "$t(entity.artist, {\"count\": 1})",
"biography": "$t(common.biography)",
"bitrate": "$t(common.bitrate)",
"bpm": "$t(common.bpm)",
"channels": "$t(common.channel_other)",
"bpm": "$t(common.BPM)",
"channels": "$t(common.channel, {\"count\": 2})",
"codec": "$t(common.codec)",
"dateAdded": "தேதி சேர்க்கப்பட்டது",
"rating": "$t(common.rating)",
@@ -719,22 +1027,31 @@
"lastPlayed": "கடைசியாக விளையாடியது",
"note": "$t(common.note)",
"owner": "$t(common.owner)",
"actions": "$t(common.action_other)",
"actions": "$t(common.action, {\"count\": 2})",
"albumArtist": "$t(entity.albumArtist, {\"count\": 1})",
"discNumber": "வட்டு எண்",
"duration": "$t(common.duration)",
"favorite": "$t(common.favorite)",
"favorite": "$t(common.favourite)",
"genre": "$t(entity.genre, {\"count\": 1})",
"path": "$t(common.path)",
"playCount": "விளையாட்டு எண்ணிக்கை",
"songCount": "$t(entity.track, {\"count\": 2})",
"title": "$t(common.title)",
"titleCombined": "$t(common.title) (இணைந்தது)"
"titleCombined": "$t(common.title) (இணைந்தது)",
"albumGroup": "ஆல்பம் குழு",
"albumCount": "$t(entity.album, {\"count\": 2})",
"bitDepth": "$t(common.bitDepth)",
"composer": "இசையமைப்பாளர்",
"genreBadge": "$t(entity.genre, {\"count\": 1}) (பேட்ச்கள்)",
"image": "படம்",
"sampleRate": "$t(common.sampleRate)",
"titleArtist": "$t(common.title) (கலைஞர்)"
},
"view": {
"table": "அட்டவணை",
"grid": "வலைவாய்",
"list": "பட்டியல்"
"list": "பட்டியல்",
"detail": "விவரம்"
},
"general": {
"autoFitColumns": "ஆட்டோ பொருத்தம் நெடுவரிசைகள்",
@@ -744,7 +1061,29 @@
"itemGap": "உருப்படி இடைவெளி (பிஎக்ச்)",
"itemSize": "உருப்படி அளவு (பிஎக்ச்)",
"size": "$t(common.size)",
"tableColumns": "அட்டவணை நெடுவரிசைகள்"
"tableColumns": "அட்டவணை நெடுவரிசைகள்",
"advancedSettings": "மேம்பட்ட அமைப்புகள்",
"autosize": "தானியங்கு அளவு",
"moveUp": "மேலே செல்ல",
"moveDown": "கீழே நகர",
"pinToLeft": "இடப்புறம் முள்",
"pinToRight": "வலதுபுறமாக முள்",
"alignLeft": "இடதுபுறம் சீரமைக்கவும்",
"alignCenter": "மையத்தை சீரமைக்கவும்",
"alignRight": "வலது சீரமை",
"itemsPerRow": "ஒரு வரிசைக்கு பொருட்கள்",
"size_default": "இயல்புநிலை",
"size_compact": "கச்சிதமான",
"size_large": "பெரிய",
"pagination": "பேசினேசன்",
"pagination_itemsPerPage": "ஒரு பக்கத்திற்கு உருப்படிகள்",
"pagination_infinite": "கந்தழி, முடிவிலி",
"pagination_paginate": "பக்கமாக",
"alternateRowColors": "மாற்று வரிசை வண்ணங்கள்",
"horizontalBorders": "வரிசை எல்லைகள்",
"rowHoverHighlight": "வரிசை மிதவை ஐலைட்",
"showHeader": "தலைப்பு நிகழ்ச்சி",
"verticalBorders": "நெடுவரிசை எல்லைகள்"
}
},
"column": {
@@ -755,7 +1094,7 @@
"biography": "சுயசரிதை",
"bitrate": "பிட்ரேட்",
"bpm": "பிபிஎம்",
"channels": "$t(common.channel_other)",
"channels": "$t(common.channel, {\"count\": 2})",
"codec": "$t(common.codec)",
"comment": "கருத்து",
"dateAdded": "தேதி சேர்க்கப்பட்டது",
@@ -771,7 +1110,218 @@
"size": "$t(common.size)",
"songCount": "$t(entity.track, {\"count\": 2})",
"title": "தலைப்பு",
"trackNumber": "மின்தடம்"
"trackNumber": "மின்தடம்",
"bitDepth": "$t(common.bitDepth)",
"sampleRate": "$t(common.sampleRate)",
"owner": "உரிமையாளர்"
}
},
"datetime": {
"minuteShort": "மீ",
"secondShort": "கள்",
"hourShort": "ம",
"dayShort": "டி"
},
"filterOperator": {
"after": "பிறகு உள்ளது",
"afterDate": "பிறகு (தேதி)",
"before": "முன்பு உள்ளது",
"beforeDate": "முன் (தேதி)",
"contains": "கொண்டுள்ளது",
"endsWith": "உடன் முடிகிறது",
"inPlaylist": "உள்ளது",
"inTheLast": "கடைசியில் உள்ளது",
"inTheRange": "வரம்பில் உள்ளது",
"inTheRangeDate": "வரம்பில் உள்ளது (தேதி)",
"is": "உள்ளது",
"isNot": "இல்லை",
"isGreaterThan": "விட அதிகமாக உள்ளது",
"isLessThan": "விட குறைவாக உள்ளது",
"matchesRegex": "ரெசெக்சுடன் பொருந்துகிறது",
"notContains": "கொண்டிருக்கவில்லை",
"notInPlaylist": "உள்ளே இல்லை",
"notInTheLast": "கடைசியில் இல்லை",
"startsWith": "உடன் தொடங்குகிறது"
},
"queryBuilder": {
"standardTags": "நிலையான குறிச்சொற்கள்",
"customTags": "விருப்ப குறிச்சொற்கள்"
},
"releaseType": {
"primary": {
"album": "$t(entity.album, {\"count\": 1})",
"broadcast": "ஒளிபரப்பு",
"ep": "எபி",
"other": "மற்றொன்று",
"single": "ஒற்றை"
},
"secondary": {
"audiobook": "ஒலிப்புத்தகம்",
"audioDrama": "ஆடியோ நாடகம்",
"compilation": "தொகுத்தல்",
"djMix": "dj கலவை",
"demo": "டெமோ",
"fieldRecording": "களப்பதிவு",
"interview": "நேர்காணல்",
"live": "வாழ்க",
"mixtape": "கலவை",
"remix": "ரீமிக்ச்",
"soundtrack": "ஒலிப்பதிவு",
"spokenWord": "பேசப்பட்ட சொல்"
}
},
"dragDropZone": {
"error_oneFileOnly": "1 கோப்பை மட்டும் தேர்ந்தெடுக்கவும்",
"error_readingFile": "கோப்பைப் படிப்பதில் சிக்கல் உள்ளது: {{errorMessage}}",
"mainText": "ஒரு கோப்பை இங்கே விடுங்கள்"
},
"visualizer": {
"visualizerType": "விசுவலைசர் வகை",
"cyclePresets": "சுழற்சி முன்னமைவுகள்",
"cycleTime": "சுழற்சி நேரம் (வினாடிகள்)",
"includeAllPresets": "அனைத்து முன்னமைவுகளையும் சேர்க்கவும்",
"ignoredPresets": "புறக்கணிக்கப்பட்ட முன்னமைவுகள்",
"selectedPresets": "தேர்ந்தெடுக்கப்பட்ட முன்னமைவுகள்",
"randomizeNextPreset": "அடுத்த முன்னமைவை சீரமைக்கவும்",
"blendTime": "கலப்பு நேரம்",
"presets": "முன்னமைவுகள்",
"selectPreset": "முன்னமைவைத் தேர்ந்தெடுக்கவும்",
"applyPreset": "முன்னமைவைப் பயன்படுத்தவும்",
"saveAsPreset": "முன்னமைவாக சேமிக்கவும்",
"updatePreset": "முன்னமைவைப் புதுப்பிக்கவும்",
"copyConfiguration": "நகல் கட்டமைப்பு",
"pasteConfiguration": "ஒட்டு கட்டமைப்பு",
"pasteConfigurationPlaceholder": "சாதொபொகு உள்ளமைவை இங்கே ஒட்டவும்...",
"pasteFromClipboard": "கிளிப்போர்டில் இருந்து ஒட்டவும்",
"applyConfiguration": "உள்ளமைவைப் பயன்படுத்து",
"configCopied": "உள்ளமைவு இடைநிலைப்பலகைக்கு நகலெடுக்கப்பட்டது",
"configCopyFailed": "உள்ளமைவை நகலெடுக்க முடியவில்லை",
"configPasted": "உள்ளமைவு வெற்றிகரமாக பயன்படுத்தப்பட்டது",
"configPasteFailed": "உள்ளமைவைப் பயன்படுத்துவதில் தோல்வி. தயவுசெய்து வடிவமைப்பைச் சரிபார்க்கவும்.",
"configPasteReadFailed": "கிளிப்போர்டில் இருந்து படிக்க முடியவில்லை",
"presetName": "முன்னமைக்கப்பட்ட பெயர்",
"presetNamePlaceholder": "முன்னமைக்கப்பட்ட பெயரை உள்ளிடவும்",
"general": "பொது",
"mode": "பயன்முறை",
"mode1To8": "முறை 1 - 8",
"mode10": "முறை 10",
"barSpace": "பார் இடம்",
"lineWidth": "வரி அகலம்",
"fillAlpha": "ஆல்ஃபாவை நிரப்பவும்",
"channelLayout": "சேனல் தளவமைப்பு",
"maxFPS": "அதிகபட்ச FPS",
"opacity": "ஒளிபுகாநிலை",
"customGradients": "தனிப்பயன் சாய்வு",
"addCustomGradient": "தனிப்பயன் சாய்வு சேர்க்கவும்",
"gradientName": "சாய்வு பெயர்",
"gradientNamePlaceholder": "சாய்வு பெயர்",
"vertical": "செங்குத்து",
"horizontal": "கிடைமட்ட",
"colorStops": "வண்ண நிறுத்தங்கள்",
"addColor": "வண்ணத்தைச் சேர்க்கவும்",
"position": "பதவி",
"level": "நிலை",
"remove": "அகற்று",
"pasteGradient": "சாய்வு ஒட்டவும்",
"pasteGradientPlaceholder": "இங்கே சாய்வு சாதொபொகு ஒட்டவும்...",
"custom": "தனிப்பயன்",
"builtIn": "உள்ளமைக்கப்பட்ட",
"colors": "நிறங்கள்",
"colorMode": "வண்ண முறை",
"gradient": "சரிவு",
"gradientLeft": "கிரேடியன்ட் இடது",
"gradientRight": "கிரேடியன்ட் ரைட்",
"fft": "FFT",
"fftSize": "FFT அளவு",
"smoothing": "மென்மையாக்கும்",
"frequencyRangeAndScaling": "அதிர்வெண் வரம்பு மற்றும் அளவிடுதல்",
"minimumFrequency": "குறைந்தபட்ச அதிர்வெண்",
"maximumFrequency": "அதிகபட்ச அதிர்வெண்",
"frequencyScale": "அதிர்வெண் அளவுகோல்",
"sensitivity": "உணர்திறன்",
"weightingFilter": "எடை வடிகட்டி",
"minimumDecibels": "குறைந்தபட்ச டெசிபல்கள்",
"maximumDecibels": "அதிகபட்ச டெசிபல்கள்",
"linearAmplitude": "நேரியல் அலைவீச்சு",
"linearBoost": "லீனியர் பூச்ட்",
"peakBehavior": "உச்ச நடத்தை",
"showPeaks": "சிகரங்களைக் காட்டு",
"fadePeaks": "மங்கலான சிகரங்கள்",
"peakLine": "உச்சக் கோடு",
"gravity": "புவியீர்ப்பு",
"peakFadeTime": "பீக் ஃபேட் நேரம் (மிவி)",
"peakHoldTime": "பீக் ஓல்ட் நேரம் (மிவி)",
"radialSpectrum": "ரேடியல் ச்பெக்ட்ரம்",
"radial": "ரேடியல்",
"radialInvert": "ரேடியல் தலைகீழ்",
"spinSpeed": "சுழல் விரைவு",
"radius": "ஆரம்",
"reflexMirror": "ரிஃப்ளெக்ச் மிரர்",
"reflexFit": "ரிஃப்ளெக்ச் ஃபிட்",
"reflexRatio": "பிரதிபலிப்பு விகிதம்",
"reflexAlpha": "ரிஃப்ளெக்ச் ஆல்பா",
"reflexBrightness": "ரிஃப்ளெக்ச் ஒளி",
"mirror": "கண்ணாடி",
"miscellaneousSettings": "இதர அமைப்புகள்",
"alphaBars": "ஆல்பா பார்கள்",
"ansiBands": "ANSI பட்டைகள்",
"ledBars": "LED பார்கள்",
"trueLeds": "உண்மையான எல்.ஈ",
"lumiBars": "லுமி பார்கள்",
"outlineBars": "அவுட்லைன் பார்கள்",
"roundBars": "சுற்று பார்கள்",
"lowResolution": "குறைந்த தெளிவுத்திறன்",
"splitGradient": "பிளவு சாய்வு",
"showFPS": "FPS ஐக் காட்டு",
"showScaleX": "ஃச் அளவைக் காட்டு",
"noteLabels": "குறிப்பு லேபிள்கள்",
"showScaleY": "ஒய் அளவைக் காட்டு",
"options": {
"mode": {
"0": "[0] தனித்துவமான அதிர்வெண்கள்",
"1": "[1] 1/24வது ஆக்டேவ் / 240 பட்டைகள்",
"2": "[2] 1/12வது ஆக்டேவ் / 120 பட்டைகள்",
"3": "[3] 1/8 ஆக்டேவ் / 80 பட்டைகள்",
"4": "[4] 1/6வது ஆக்டேவ் / 60 பட்டைகள்",
"5": "[5] 1/4வது ஆக்டேவ் / 40 பட்டைகள்",
"6": "[6] 1/3 ஆக்டேவ் / 30 பட்டைகள்",
"7": "[7] அரை ஆக்டேவ் / 20 பட்டைகள்",
"8": "[8] முழு ஆக்டேவ் / 10 பட்டைகள்",
"10": "[10] கோடு / பகுதி வரைபடம்"
},
"colorMode": {
"gradient": "சரிவு",
"barIndex": "பார்-இண்டெக்ச்",
"barLevel": "பட்டை-நிலை"
},
"gradient": {
"classic": "கிளாசிக்",
"prism": "அரியம், பட்டகம்",
"rainbow": "வானவில்",
"steelblue": "இரும்புநீலம்",
"orangered": "ஆரஞ்சுசிவப்பு"
},
"channelLayout": {
"single": "ஒற்றை",
"dualCombined": "இரட்டை-இணைந்த",
"dualHorizontal": "இரட்டை-கிடைமட்ட",
"dualVertical": "இரட்டை-செங்குத்து"
},
"frequencyScale": {
"none": "எதுவுமில்லை",
"bark": "பட்டை அளவு",
"linear": "நேரியல் அளவுகோல்",
"log": "பதிவு அளவுகோல்",
"mel": "மெல் அளவுகோல்"
},
"weightingFilter": {
"none": "எதுவுமில்லை",
"a": "ஏ",
"b": "பி",
"c": "சி",
"d": "டி",
"z": "சட்"
}
}
}
}
+1
View File
@@ -0,0 +1 @@
{}
+14
View File
@@ -0,0 +1,14 @@
{
"action": {
"addToFavorites": "Idagdag sa $t(entity.favorite, {\"count\": 2})",
"addToPlaylist": "Idagdag sa $t(entity.playlist, {\"count\": 1})",
"addOrRemoveFromSelection": "Idagdag o alisin sa pinili",
"collapseAllFolders": "Isara lahat ng mga folder",
"expandAllFolders": "Buksan lahat ng mga folder",
"createPlaylist": "Gumawa $t(entity.playlist, {\"count\": 1})",
"createRadioStation": "Gumawa $t(entity.radioStation, {\"count\": 1})",
"selectAll": "Piliin lahat",
"deselectAll": "Huwag piliin lahat",
"downloadStarted": "Nagsimulang mag-dowload ng {{count}} (mga) aytem"
}
}
+746 -570
View File
File diff suppressed because it is too large Load Diff
+639 -298
View File
File diff suppressed because it is too large Load Diff
+154 -58
View File
@@ -19,7 +19,10 @@
"goToPage": "前往页面",
"openIn": {
"lastfm": "在 Last.fm 中打开",
"musicbrainz": "在 MusicBrainz 中打开"
"musicbrainz": "在 MusicBrainz 中打开",
"listenbrainz": "在 ListenBrainz 中打开",
"qobuz": "在 Qobuz 中打开",
"spotify": "在 Spotify 中打开"
},
"moveToNext": "移至下一首",
"downloadStarted": "开始下载 {{count}} 个项目",
@@ -37,12 +40,13 @@
"selectAll": "全选",
"createRadioStation": "创建$t(entity.radioStation, {\"count\": 1})",
"deleteRadioStation": "删除$t(entity.radioStation, {\"count\": 1})",
"openApplicationDirectory": "打开应用程序目录"
"openApplicationDirectory": "打开应用程序目录",
"goToCurrent": "转到当前项目"
},
"common": {
"increase": "增高",
"rating": "评分",
"bpm": "bpm",
"bpm": "BPM",
"refresh": "刷新",
"unknown": "未知",
"edit": "编辑",
@@ -74,7 +78,7 @@
"forward": "前进",
"delete": "删除",
"cancel": "取消",
"forceRestartRequired": "重启应用使更改生效…关闭通知即可重启",
"forceRestartRequired": "重启应用使更改生效…关闭通知即可重启",
"setting_other": "设置",
"version": "版本",
"title": "标题",
@@ -107,7 +111,7 @@
"duration": "时长",
"ok": "好",
"no": "否",
"playerMustBePaused": "播放器必须暂停",
"playerMustBePaused": "播放器必须暂停",
"channel_other": "频道",
"none": "无",
"disc": "碟片",
@@ -155,7 +159,10 @@
"filter_single": "单项",
"mood": "氛围",
"rename": "重命名",
"filter_multiple": "多项"
"filter_multiple": "多项",
"newVersionAvailable": "新版本现已可用",
"numberOfResults": "{{numberOfResults}} 结果",
"grouping": "分组"
},
"entity": {
"albumArtist_other": "专辑艺术家",
@@ -201,8 +208,8 @@
"queue_clear": "清空播放队列",
"muted": "已静音",
"unfavorite": "取消收藏",
"queue_moveToTop": "将所选项移至部",
"queue_moveToBottom": "将所选项移至部",
"queue_moveToTop": "将所选项移至部",
"queue_moveToBottom": "将所选项移至部",
"shuffle_off": "禁用随机播放",
"addLast": "最后",
"mute": "静音",
@@ -218,17 +225,27 @@
"addNextShuffled": "下一个(随机)",
"artistRadio": "艺术家电台",
"holdToShuffle": "按住即可随机",
"trackRadio": "追踪广播"
"trackRadio": "追踪广播",
"sleepTimer": "睡眠定时器",
"sleepTimer_endOfSong": "当前歌曲结束时",
"sleepTimer_minutes": "{{count}} 分钟",
"sleepTimer_hours": "{{count}} 小时",
"sleepTimer_custom": "自定义",
"sleepTimer_off": "关闭",
"sleepTimer_timeRemaining": "剩余时间 {{time}}",
"sleepTimer_setCustom": "设置定时器",
"sleepTimer_cancel": "取消定时器",
"albumRadio": "专辑电台"
},
"setting": {
"crossfadeStyle_description": "选择用于音频播放器的淡入淡出风格",
"hotkey_favoriteCurrentSong": "收藏$t(common.currentSong)",
"audioExclusiveMode_description": "启用独占输出模式。在此模式下,系统通常被锁定为只有 mpv 能够输出音频",
"audioExclusiveMode_description": "启用独占输出模式。在此模式下,系统通常被锁定为只有 MPV 能够输出音频",
"disableLibraryUpdateOnStartup": "禁用启动时查询新版本",
"gaplessAudio": "无缝音频",
"audioPlayer_description": "选择用于播放的音频播放器",
"globalMediaHotkeys": "全局媒体快捷键",
"gaplessAudio_description": "调整 mpv 无缝音频设置",
"gaplessAudio_description": "调整 MPV 无缝音频设置",
"followLyric_description": "滚动歌词到当前播放位置",
"audioExclusiveMode": "音频独占模式",
"font": "字体",
@@ -244,12 +261,12 @@
"followLyric": "跟随当前歌词",
"crossfadeDuration": "淡入淡出持续时间",
"audioPlayer": "音频播放器",
"discordApplicationId": "{{discord}} 应用 id",
"discordApplicationId": "{{discord}} 应用 ID",
"applicationHotkeys_description": "配置应用快捷键。勾选设为全局快捷键(仅桌面端)",
"customFontPath_description": "设置应用使用的自定义字体路径",
"gaplessAudio_optionWeak": "弱(推荐)",
"font_description": "设置应用使用的字体",
"audioDevice_description": "选择用于播放的音频设备(仅 web 播放器)",
"audioDevice_description": "选择用于播放的音频设备",
"enableRemote_description": "启用远程控制服务器,以允许其他设备控制此应用",
"remotePort_description": "设置远程服务器端口",
"hotkey_skipBackward": "向后跳过",
@@ -268,7 +285,7 @@
"scrobble": "记录播放信息",
"skipDuration_description": "设置每次按下跳过按钮将会跳过的时长",
"fontType_optionSystem": "系统字体",
"mpvExecutablePath_description": "设置 mpv 可执行文件的路径。如果留空,则使用默认路径",
"mpvExecutablePath_description": "设置 MPV 可执行文件的路径。如果留空,则使用默认路径",
"sampleRate": "采样率",
"sidePlayQueueStyle_optionAttached": "吸附",
"sidebarConfiguration": "侧边栏设定",
@@ -317,7 +334,7 @@
"hotkey_toggleShuffle": "切换随机",
"theme": "主题",
"playbackStyle_description": "选择音频播放器的播放风格",
"mpvExecutablePath": "mpv 可执行文件路径",
"mpvExecutablePath": "MPV 可执行文件路径",
"hotkey_rate2": "评为 2 星",
"playButtonBehavior_description": "设置将歌曲添加到播放队列时播放按钮的默认行为",
"minimumScrobblePercentage_description": "歌曲被记录为已播放所需的最小播放百分比",
@@ -327,7 +344,7 @@
"savePlayQueue": "保存播放队列",
"minimumScrobbleSeconds_description": "歌曲被记录为已播放所需的最小播放时间",
"skipPlaylistPage_description": "打开歌单时,直接查看歌曲列表而非查看默认页面",
"fontType_description": "内置字体可以选择 feishin 提供的字体之一。系统字体允许您选择操作系统提供的任何字体。自定义选项允许您使用自己的字体",
"fontType_description": "内置字体可以选择 Feishin 提供的字体之一。系统字体允许您选择操作系统提供的任何字体。自定义选项允许您使用自己的字体",
"playButtonBehavior": "播放按钮行为",
"volumeWheelStep": "音量滚轮分度",
"sidebarPlaylistList_description": "显示或隐藏侧边栏歌单列表",
@@ -368,20 +385,20 @@
"replayGainClipping_description": "自动降低增益以防止{{ReplayGain}}造成削波",
"replayGainPreamp": "{{ReplayGain}}前置放大(分贝)",
"replayGainClipping": "{{ReplayGain}}削波",
"discordUpdateInterval": "{{discord}} rich presence 更新间隔",
"discordApplicationId_description": "{{discord}} rich presence 应用 id(默认为 {{defaultId}}",
"discordUpdateInterval": "{{discord}} Rich Presence 更新间隔",
"discordApplicationId_description": "{{discord}} Rich Presence 应用 ID(默认为 {{defaultId}}",
"discordUpdateInterval_description": "更新间隔秒数(至少 15 秒)",
"discordRichPresence_description": "在 {{discord}} rich presence 中显示播放状态。图片键为:{{icon}}、{{playing}} 和 {{paused}}",
"discordRichPresence_description": "在 {{discord}} Rich Presence 中显示播放状态。图片键为:{{icon}}、{{playing}} 和 {{paused}}",
"accentColor": "强调色",
"accentColor_description": "设置应用的强调色",
"replayGainPreamp_description": "调整应用在{{ReplayGain}}值上的前置放大增益",
"discordIdleStatus": "显示 rich presence 闲置状态",
"discordIdleStatus": "显示 Rich Presence 闲置状态",
"clearCache": "清除浏览器缓存",
"buttonSize": "播放器栏按钮大小",
"buttonSize_description": "播放器栏按钮大小",
"clearCache_description": "feishin的“硬清除”。除了清除feishin的缓存,清空浏览器缓存(保存的图像和其他资源)。服务器凭据和设置会被保留",
"clearQueryCache_description": "feishin的“软清除”。这将会刷新播放列表、元数据并重置保存的歌词。设置、服务器凭据和缓存图像会被保留",
"clearQueryCache": "清除feishin缓存",
"clearCache_description": "Feishin的“硬清除”。除了清除Feishin的缓存,清空浏览器缓存(保存的图像和其他资源)。服务器凭据和设置会被保留",
"clearQueryCache_description": "Feishin的“软清除”。这将会刷新播放列表、元数据并重置保存的歌词。设置、服务器凭据和缓存图像会被保留",
"clearQueryCache": "清除Feishin缓存",
"externalLinks": "显示外部链接",
"externalLinks_description": "允许在艺术家/专辑页面上显示外部链接(Last.fm、MusicBrainz",
"mpvExtraParameters_help": "每行一个",
@@ -403,10 +420,10 @@
"contextMenu_description": "允许您隐藏右键单击项目时显示在菜单中的项目。未选中的项目将被隐藏",
"customCssEnable_description": "允许编写自定义 css",
"customCss": "自定义css",
"customCss_description": "自定义css内容。注意:内容和远程url是不允许的属性。内容预览展示如下。出于安全考虑,您未设置的其它字段也会显示",
"customCss_description": "自定义css内容。注意:内容和远程URL是不允许的属性。内容预览展示如下。出于安全考虑,您未设置的其它字段也会显示",
"contextMenu": "上下文菜单(右键单击)配置",
"customCssEnable": "启用自定义 css",
"customCssNotice": "警告:虽然预设了一些安全限制(不允许 url() 和 content:),但使用自定义 css 仍然会因更改界面而带来风险",
"customCssNotice": "警告:虽然预设了一些安全限制(不允许 URL() 和 content:),但使用自定义 css 仍然会因更改界面而带来风险",
"transcode_description": "可以转码为不同的格式",
"transcodeBitrate": "转码比特率",
"albumBackground": "专辑背景图片",
@@ -434,14 +451,14 @@
"lastfmApiKey": "{{lastfm}} API 密钥",
"lastfmApiKey_description": "{{lastfm}} 的 API 密钥。封面艺术图所需",
"discordServeImage": "从服务器提供 {{discord}} 图像",
"discordServeImage_description": "从服务器本身分享 {{discord}} rich presence 的封面艺术,仅适用于 Jellyfin 和 Navidrome。 {{discord}} 使用机器人来获取图像,因此您的服务器必须可通过公共互联网访问",
"discordServeImage_description": "从服务器本身分享 {{discord}} Rich Presence 的封面艺术,仅适用于 Jellyfin 和 Navidrome。 {{discord}} 使用机器人来获取图像,因此您的服务器必须可通过公共互联网访问",
"musicbrainz": "显示 MusicBrainz 链接",
"musicbrainz_description": "在存在 MusicBrainz ID 的艺术家/专辑页面上显示 MusicBrainz 链接",
"lastfm": "显示 last.fm 链接",
"musicbrainz_description": "在艺术家/专辑页面上显示 MusicBrainz 链接(如果存在 MusicBrainz ID",
"lastfm": "显示 Last.fm 链接",
"lastfm_description": "在艺术家/专辑页面上显示 Last.fm 的链接",
"preferLocalLyrics_description": "优先选择本地歌词(如有),而不是远程歌词",
"preferLocalLyrics": "首选本地歌词",
"discordPausedStatus": "暂停时显示rich presence",
"discordPausedStatus": "暂停时显示Rich Presence",
"discordPausedStatus_description": "启用后将在播放器暂停时显示状态",
"preservePitch": "保持音高",
"preservePitch_description": "在调整播放速度时保持音高",
@@ -463,7 +480,7 @@
"releaseChannel_optionLatest": "最新的",
"releaseChannel_optionBeta": "测试版",
"releaseChannel": "发布通道",
"releaseChannel_description": "选择稳定版本或测试版以进行自动更新",
"releaseChannel_description": "选择稳定版测试版或 Alpha(夜间构建版)以启用自动更新",
"mediaSession": "启用媒体会话",
"mediaSession_description": "启用媒体会话集成,在系统音量叠加层和锁屏界面显示媒体控件和元数据",
"exportImportSettings_control_description": "通过 JSON 导出和导入设置",
@@ -472,7 +489,7 @@
"exportImportSettings_control_title": "导入/导出设置",
"exportImportSettings_destructiveWarning": "导入设置会破坏现有设置,请在点击下方“导入”按钮前仔细阅读以上内容!",
"exportImportSettings_importBtn": "导入设置",
"exportImportSettings_importModalTitle": "导入 feishin 设置",
"exportImportSettings_importModalTitle": "导入 Feishin 设置",
"exportImportSettings_importSuccess": "设置已成功导入!",
"exportImportSettings_notValidJSON": "传递的文件不是有效的 JSON 文件",
"exportImportSettings_offendingKeyError": "\"{{offendingKey}}\" 不正确 - {{reason}}",
@@ -491,16 +508,15 @@
"combinedLyricsAndVisualizer_description": "将歌词和可视化界面合并到同一面板中",
"queryBuilderCustomFields_description": "在查询构建器添加自定义字段",
"combinedLyricsAndVisualizer": "在播放器侧边栏合并歌词和可视化界面",
"autoDJ_description": "自动添加相似歌曲到队列中",
"notify_description": "歌曲变更时显示通知",
"mpvExtraParameters_description": "向mpv传递额外参数",
"mpvExtraParameters_description": "向MPV传递额外参数",
"audioFadeOnStatusChange": "音频改变时淡入淡出",
"showVisualizerInSidebar": "在播放器侧边栏显示可视化效果",
"showLyricsInSidebar": "在播放器侧边栏显示歌词",
"analyticsDisable": "退出使用情况的分析",
"artistReleaseTypeConfiguration": "艺术家发行类型设置",
"useThemeAccentColor": "使用主题强调色",
"mpvExtraParameters": "mpv额外参数",
"mpvExtraParameters": "MPV额外参数",
"showRatings": "显示星级评分",
"followCurrentSong": "跟随当前歌曲",
"logLevel": "日志等级",
@@ -535,7 +551,7 @@
"autoDJ_timing": "定时",
"autoDJ_timing_description": "自动 DJ 触发前队列中剩余的歌曲数量",
"crossfadeStyle": "交叉渐变风格",
"discordRichPresence": "{{discord}} rich presence",
"discordRichPresence": "{{discord}} Rich Presence",
"homeFeatureStyle_description": "控制首页特色轮播图的样式",
"homeFeatureStyle": "首页特色旋转样式",
"homeFeatureStyle_optionMultiple": "多样",
@@ -562,7 +578,40 @@
"sidebarPlaylistListFilterRegex_placeholder": "例如:^每日精选*",
"sidebarPlaylistListFilterRegex": "播放列表筛选正则表达式",
"queryBuilder": "查询构建器",
"queryBuilderCustomFields": "自定义字段"
"queryBuilderCustomFields": "自定义字段",
"analyticsEnable": "发送基于使用情况的分析",
"analyticsEnable_description": "发送匿名使用数据帮助开发者改进应用程序",
"automaticUpdates": "自动更新",
"automaticUpdates_description": "自动检查并安装更新",
"releaseChannel_optionAlpha": "alpha(每日构建版)",
"discordStateIcon": "显示播放图标",
"discordStateIcon_description": "在 Rich Presence 状态中显示一个小的播放图标。启用“暂停时显示 Rich Presence 在线状态”后,暂停图标始终显示",
"blurExplicitImages": "模糊显式图片",
"blurExplicitImages_description": "专辑和歌曲封面若被标记为不雅内容,将会进行模糊处理",
"autosave": "自动保存播放队列",
"autosave_description": "启用自动将播放队列保存到服务器的功能。此功能仅在使用 Navidrome/Subsonic 时可用,且不能使用混合播放队列。",
"autosaveCount": "自动播放队列保存频率",
"autosaveCount_description": "队列保存前需要更改多少首歌曲?1(最少)表示每次歌曲更改",
"useThemePrimaryShade": "使用主题主色调",
"useThemePrimaryShade_description": "对于主要颜色变体,请使用所选主题中定义的主色调",
"primaryShade": "主色调",
"primaryShade_description": "覆盖按钮、链接和其他主色元素使用的主色调(0-9)",
"playerItemConfiguration_description": "配置全屏播放器上显示的项目及其显示顺序",
"playerItemConfiguration": "播放器项目配置",
"listenbrainz_description": "在艺术家/专辑页面上显示 ListenBrainz 链接",
"listenbrainz": "显示 ListenBrainz 链接",
"qobuz_description": "在艺术家/专辑页面上显示 Qobuz 链接",
"qobuz": "显示 Qobuz 链接",
"spotify_description": "在艺术家/专辑页面上显示 Spotify 链接",
"spotify": "显示 Spotify 链接",
"nativeSpotify_description": "在 Spotify 应用中打开,而不是在浏览器中打开",
"nativeSpotify": "使用 Spotify 应用",
"sidePlayQueueLayout": "侧边播放队列布局",
"sidePlayQueueLayout_description": "设置附加侧边播放队列的布局",
"sidePlayQueueLayout_optionHorizontal": "水平",
"sidePlayQueueLayout_optionVertical": "垂直",
"waveformLoadingDelay": "波形加载延迟",
"waveformLoadingDelay_description": "加载波形前的延迟时间(秒)。如果在使用网页播放器时遇到卡顿现象,请增加此值。"
},
"error": {
"remotePortWarning": "重启服务器使新端口生效",
@@ -593,7 +642,10 @@
"noNetwork": "服务器不可用",
"noNetworkDescription": "无法连接到该服务器",
"saveQueueFailed": "播放列表保存失败",
"settingsSyncError": "渲染器设置与主进程中存在差异,请重启程序以应用更改"
"settingsSyncError": "渲染器设置与主进程中存在差异,请重启程序以应用更改",
"invalidJson": "无效的 JSON",
"serverLockSingleServer": "服务器锁定时,只允许一台服务器运行",
"playbackPausedDueToError": "发生错误,播放已暂停"
},
"filter": {
"mostPlayed": "最多播放过",
@@ -620,7 +672,7 @@
"fromYear": "起始年份",
"criticRating": "评论家评分",
"trackNumber": "曲目",
"bpm": "bpm",
"bpm": "BPM",
"artist": "$t(entity.artist, {\"count\": 1})",
"comment": "评论",
"isCompilation": "为合辑",
@@ -634,12 +686,14 @@
"genre": "$t(entity.genre, {\"count\": 1})",
"note": "注释",
"albumCount": "$t(entity.album, {\"count\": 2})数",
"id": "id",
"id": "ID",
"disc": "碟片",
"duration": "时长",
"album": "$t(entity.album, {\"count\": 1})",
"explicitStatus": "$t(common.explicitStatus)",
"sortName": "排序名称"
"sortName": "排序名称",
"matchAnd": "和",
"matchOr": "或"
},
"page": {
"sidebar": {
@@ -808,7 +862,11 @@
"appearsOn": "出现在",
"viewAll": "查看全部",
"groupingTypeAll": "所有发行类型",
"groupingTypePrimary": "首选发布类型"
"groupingTypePrimary": "首选发布类型",
"favoriteSongs": "收藏的歌曲",
"favoriteSongsFrom": "来自 {{title}} 收藏的歌曲",
"topSongsCommunity": "社区",
"topSongsPersonal": "个人"
},
"itemDetail": {
"copyPath": "将路径复制到剪贴板",
@@ -842,6 +900,11 @@
"collections": {
"overrideExisting": "覆盖现有",
"saveAsCollection": "保存为集合"
},
"releasenotes": {
"commitsSinceStable": "自 {{stable}} 以来的提交",
"noNewCommits": "此范围内没有新的提交",
"noStableReleaseToCompare": "目前没有稳定版本可供比较"
}
},
"form": {
@@ -861,12 +924,12 @@
"ignoreSsl": "忽略 ssl $t(common.restartRequired)",
"ignoreCors": "忽略 cors $t(common.restartRequired)",
"error_savePassword": "保存密码时出现错误",
"input_url": "url",
"input_url": "URL",
"input_preferInstantMixDescription": "仅使用即时混音来获取类似的歌曲。如果您有修改此行为的插件,则很有用",
"input_preferInstantMix": "首选即时混音",
"input_preferRemoteUrl": "首选公共 url",
"input_remoteUrl": "公共 url",
"input_remoteUrlPlaceholder": "可选:对外功能的公共 url"
"input_preferRemoteUrl": "首选公共 URL",
"input_remoteUrl": "公共 URL",
"input_remoteUrlPlaceholder": "可选:对外功能的公共 URL"
},
"addToPlaylist": {
"success": "添加$t(entity.trackWithCount, {\"count\": {{message}} })到$t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })",
@@ -900,8 +963,7 @@
"editPlaylist": {
"title": "编辑$t(entity.playlist, {\"count\": 1})",
"publicJellyfinNote": "Jellyfin 出于某种原因不会显示播放列表是否公开。如果您希望保持公开,请选择以下输入",
"success": "$t(entity.playlist, {\"count\": 1})更新成功",
"editNote": "不建议对大型播放列表进行手动编辑,你确定接受新播放列表覆盖已有播放列表可能导致的数据丢失风险吗?"
"success": "$t(entity.playlist, {\"count\": 1})更新成功"
},
"lyricSearch": {
"title": "搜索歌词",
@@ -914,7 +976,9 @@
"allowDownloading": "允许下载",
"description": "描述",
"setExpiration": "设置过期时间",
"success": "共享链接已复制到剪贴板(或单击此处打开)"
"success": "共享链接已复制到剪贴板(或单击此处打开)",
"copyToClipboard": "复制到剪贴板:Ctrl+CEnter",
"successMustClick": "分享创建成功。点击此处打开"
},
"privateMode": {
"enabled": "启用私人模式,播放状态现在对外部集成隐藏",
@@ -950,6 +1014,9 @@
"input_played_optionPlayed": "仅已播放的曲目",
"input_limit": "有多少首歌?",
"input_played": "播放筛选器"
},
"editRadioStation": {
"success": "电台更新成功"
}
},
"table": {
@@ -989,7 +1056,8 @@
"view": {
"table": "表格",
"grid": "网格",
"list": "列表"
"list": "列表",
"detail": "详情"
},
"label": {
"releaseDate": "发布日期",
@@ -997,7 +1065,7 @@
"duration": "$t(common.duration)",
"dateAdded": "添加日期",
"size": "$t(common.size)",
"bpm": "$t(common.bpm)",
"bpm": "$t(common.BPM)",
"lastPlayed": "最后播放",
"trackNumber": "音轨编号",
"rowIndex": "行索引",
@@ -1026,7 +1094,8 @@
"sampleRate": "$t(common.sampleRate)",
"genreBadge": "$t(entity.genre, {\"count\": 1})(徽章)",
"composer": "作曲家",
"titleArtist": "$t(common.title) (艺术家)"
"titleArtist": "$t(common.title) (艺术家)",
"albumGroup": "专辑分组"
}
},
"column": {
@@ -1042,7 +1111,7 @@
"releaseDate": "发布日期",
"bitrate": "比特率",
"title": "标题",
"bpm": "bpm",
"bpm": "BPM",
"dateAdded": "添加日期",
"artist": "$t(entity.artist, {\"count\": 1})",
"songCount": "$t(entity.track, {\"count\": 2})",
@@ -1162,21 +1231,41 @@
"miscellaneousSettings": "杂项设置",
"options": {
"channelLayout": {
"single": "单项"
"single": "单项",
"dualCombined": "双重组合",
"dualHorizontal": "双水平",
"dualVertical": "双垂直"
},
"mode": {
"0": "[0] 离散频率"
"0": "[0] 离散频率",
"1": "[1] 1/24倍频程 / 240频段",
"2": "[2] 1/12 倍频程 / 120 频段",
"3": "[3] 1/8倍频程 / 80频段",
"4": "[4] 1/6倍频程 / 60频段",
"5": "[5] 1/4倍频程 / 40频段",
"6": "[6] 1/3倍频程 / 30频段",
"7": "[7] 半倍频程 / 20 频段",
"8": "[8] 全倍频程 / 10 频段",
"10": "[10] 折线图 / 面积图"
},
"colorMode": {
"gradient": "渐变"
"gradient": "渐变",
"barIndex": "Bar-Index",
"barLevel": "Bar-Level"
},
"gradient": {
"classic": "经典",
"prism": "棱镜",
"rainbow": "彩虹"
"rainbow": "彩虹",
"steelblue": "钢蓝色",
"orangered": "橙红色"
},
"frequencyScale": {
"none": "无"
"none": "无",
"bark": "树皮鳞片",
"linear": "线性刻度",
"log": "对数刻度",
"mel": "梅尔刻度"
},
"weightingFilter": {
"none": "无",
@@ -1234,7 +1323,14 @@
"splitGradient": "渐变分割",
"showScaleX": "显示比例尺 X",
"noteLabels": "笔记标签",
"showScaleY": "显示比例尺 Y"
"showScaleY": "显示比例尺 Y",
"alphaBars": "Alpha 条",
"ansiBands": "ANSI 频段",
"ledBars": "LED 灯条",
"trueLeds": "真正的LED",
"lumiBars": "Lumi 条",
"outlineBars": "轮廓栏",
"roundBars": "圆条"
},
"queryBuilder": {
"standardTags": "标准标签",
+338 -191
View File
@@ -3,24 +3,24 @@
"backward": "返回",
"biography": "簡介",
"bitrate": "位元率",
"bpm": "bpm",
"bpm": "BPM",
"clear": "清空",
"collapse": "疊",
"collapse": "疊",
"comingSoon": "即將推出…",
"confirm": "確認",
"decrease": "降低",
"delete": "刪除",
"descending": "降冪",
"description": "描述",
"forceRestartRequired": "重新啟動應用程式使更改生效…關閉通知即可重啟",
"forceRestartRequired": "重啟以套用變更… 關閉通知即可重啟",
"menu": "選單",
"action_other": "操作",
"add": "新增",
"areYouSure": "你確定嗎?",
"ascending": "升冪",
"disable": "用",
"disable": "用",
"disc": "光碟",
"dismiss": "不再顯示",
"dismiss": "不理會",
"duration": "時長",
"edit": "編輯",
"enable": "啟用",
@@ -31,7 +31,7 @@
"forward": "前進",
"gap": "空隙",
"home": "首頁",
"increase": "增高",
"increase": "提升",
"left": "左",
"limit": "限制",
"manage": "管理",
@@ -39,15 +39,15 @@
"ok": "好",
"owner": "所有者",
"path": "路徑",
"playerMustBePaused": "播放器必須暫停",
"previousSong": "上一首$t(entity.track, {\"count\": 1})",
"playerMustBePaused": "播放器必須暫停",
"previousSong": "上一首 $t(entity.track, {\"count\": 1})",
"quit": "退出",
"random": "隨機",
"rating": "評分",
"refresh": "重新整理",
"reset": "重置",
"resetToDefault": "恢復為預設",
"restartRequired": "需要重新啟動應用程式",
"resetToDefault": "重置為預設",
"restartRequired": "需要重新啟動",
"right": "右",
"save": "儲存",
"saveAndReplace": "儲存並取代",
@@ -55,7 +55,7 @@
"search": "搜尋",
"sortOrder": "順序",
"title": "標題",
"trackNumber": "音軌編號",
"trackNumber": "曲目",
"unknown": "未知",
"size": "大小",
"version": "版本",
@@ -65,23 +65,23 @@
"center": "中央",
"channel_other": "聲道",
"configure": "配置",
"create": "建",
"currentSong": "目前$t(entity.track, {\"count\": 1})",
"create": "建",
"currentSong": "當前 $t(entity.track, {\"count\": 1})",
"minimize": "最小化",
"modified": "已修改",
"name": "名稱",
"no": "否",
"none": "無",
"noResultsFromQuery": "查詢到匹配結果",
"noResultsFromQuery": "查詢回傳了無結果",
"note": "注釋",
"additionalParticipants": "額外參與者",
"newVersion": "已安裝新版本 ({{version}})",
"newVersion": "新版本 ({{version}}) 已被安裝",
"viewReleaseNotes": "查看發行註記",
"albumGain": "專輯增益",
"albumPeak": "專輯peak",
"albumPeak": "專輯峰值",
"bitDepth": "位元深度",
"close": "關閉",
"codec": "編",
"codec": "編解碼器",
"mbid": "MusicBrainz ID",
"preview": "預覽",
"reload": "重新載入",
@@ -90,7 +90,7 @@
"share": "分享",
"tags": "標籤",
"trackGain": "曲目增益",
"trackPeak": "曲峰值",
"trackPeak": "曲峰值",
"translation": "翻譯",
"doNotShowAgain": "不再顯示",
"externalLinks": "外部連結",
@@ -103,11 +103,11 @@
"sort": "排序",
"tableColumns": "表格欄位",
"clean": "清除",
"explicitStatus": "Explicit狀態",
"explicit": "Explicit",
"gridRows": "網格",
"noFilters": "未設定任何過濾器",
"countSelected": "{{count}}個已選取",
"explicitStatus": "露骨狀態",
"explicit": "露骨",
"gridRows": "網格",
"noFilters": "未配置篩選器",
"countSelected": "{{count}} 個已選取",
"retry": "重試",
"example": "範例",
"mood": "情緒",
@@ -115,38 +115,46 @@
"rename": "重新命名",
"itemsMore": "{{count}} 更多",
"filter_single": "單選",
"filter_multiple": "複選"
"filter_multiple": "複選",
"newVersionAvailable": "有新版本可用",
"numberOfResults": "{{numberOfResults}} 項結果",
"grouping": "分組",
"back": "返回",
"openFolder": "開啟資料夾"
},
"error": {
"endpointNotImplementedError": "{{serverType}} 尚未實端點 {{endpoint}}",
"apiRouteError": "請求失敗:無法路由",
"audioDeviceFetchError": "無法取得音訊設備",
"endpointNotImplementedError": "{{serverType}} 尚未實端點 {{endpoint}}",
"apiRouteError": "無法路由請求",
"audioDeviceFetchError": "嘗試取得音訊裝置時發生了錯誤",
"authenticationFailed": "驗證失敗",
"credentialsRequired": "需要憑證",
"genericError": "發生了錯誤",
"invalidServer": "無效的服器",
"localFontAccessDenied": "無法取得本地字體",
"loginRateError": "登請求嘗試次數過多,請稍後再試",
"remoteDisableError": "$t(common.disable)遠端伺服器時出現錯誤",
"remoteEnableError": "$t(common.enable)遠端伺服器時出現錯誤",
"remotePortError": "設定遠端伺服器端口時發生錯誤",
"remotePortWarning": "重啟伺服器使新端口生效",
"invalidServer": "無效的服器",
"localFontAccessDenied": "存取本地字型被拒絕",
"loginRateError": "登請求嘗試次數過多,請稍後再試",
"remoteDisableError": "嘗試 $t(common.disable) 遠端伺服器時發生了錯誤",
"remoteEnableError": "嘗試 $t(common.enable) 遠端伺服器時發生了錯誤",
"remotePortError": "嘗試設定遠端伺服器連接埠時發生錯誤",
"remotePortWarning": "重啟伺服器以套用新連接埠",
"serverRequired": "需要伺服器",
"sessionExpiredError": "工作階段已過期",
"systemFontError": "嘗試取得系統字體時出現錯誤",
"sessionExpiredError": "您的工作階段已過期",
"systemFontError": "嘗試取得系統字型時發生了錯誤",
"serverNotSelectedError": "未選擇伺服器",
"mpvRequired": "需要 MPV",
"playbackError": "無法播放媒體",
"badAlbum": "您看到此頁面是因為這首歌不是專輯的一部分。如果您的音樂資料夾頂層有一首歌,則很可能會看到此問題。 Jellyfin 僅將資料夾中的曲目分組",
"badValue": "無效選項{{value}}。該值不再存在",
"networkError": "發生網路錯誤",
"notificationDenied": "通知權限被拒絕。此設定無",
"playbackError": "嘗試播放媒體時發生了錯誤",
"badAlbum": "您看到此頁面是因為這首歌不是專輯的一部分。如果您的音樂資料夾頂層有一首歌,則很可能會看到此問題。 Jellyfin 僅將資料夾中的曲目分組",
"badValue": "無效選項{{value}}。該值不再存在",
"networkError": "發生網路錯誤",
"notificationDenied": "通知權限被拒絕。此設定無影響",
"openError": "無法開啟檔案",
"multipleServerSaveQueueError": "播放佇列中包含不是來自前伺服器的歌曲此操作不受支援",
"multipleServerSaveQueueError": "播放佇列中包含了並非來自前伺服器的歌曲此操作不受支援",
"saveQueueFailed": "儲存播放佇列失敗",
"settingsSyncError": "偵測到渲染器與主程之間的設定不一致請重新啟動應用程式以套用變更",
"noNetwork": "伺服器無法連線",
"noNetworkDescription": "無法連接到此伺服器"
"settingsSyncError": "偵測到渲染器與主程之間的設定不一致請重新啟動應用程式以套用變更",
"noNetwork": "伺服器不可用",
"noNetworkDescription": "無法連線至此伺服器",
"invalidJson": "無效的 JSON",
"serverLockSingleServer": "當伺服器鎖定時只允許一個伺服器",
"playbackPausedDueToError": "播放因錯誤而暫停"
},
"page": {
"contextMenu": {
@@ -191,12 +199,12 @@
"title": "$t(common.home)",
"mostPlayed": "最多播放",
"newlyAdded": "最近新增的發行",
"recentlyReleased": "最近發",
"recentlyReleased": "最近發",
"genres": "$t(entity.genre, {\"count\": 2})"
},
"appMenu": {
"openBrowserDevtools": "開瀏覽器開發者工具",
"collapseSidebar": "疊側邊欄",
"openBrowserDevtools": "開瀏覽器開發者工具",
"collapseSidebar": "疊側邊欄",
"expandSidebar": "展開側邊欄",
"goBack": "返回",
"goForward": "前進",
@@ -215,7 +223,7 @@
"fullscreenPlayer": {
"config": {
"showLyricProvider": "顯示歌詞提供者",
"useImageAspectRatio": "使用圖片縱橫比",
"useImageAspectRatio": "使用圖片長寬比",
"dynamicBackground": "動態背景",
"followCurrentLyric": "跟隨目前歌詞",
"lyricAlignment": "歌詞對齊",
@@ -227,7 +235,9 @@
"showLyricMatch": "顯示匹配的歌詞",
"dynamicImageBlur": "圖片模糊大小",
"dynamicIsImage": "啟用背景圖片",
"lyricOffset": "歌詞偏移時間 (ms)"
"lyricOffset": "歌詞偏移時間 (ms)",
"lyricOpacityNonActive": "非活躍歌詞的不透明度",
"lyricScaleNonActive": "非活躍歌詞的比例"
},
"lyrics": "歌詞",
"related": "相關",
@@ -259,7 +269,7 @@
"transcoding": "轉碼",
"discord": "Discord",
"queryBuilder": "查詢建構器",
"playerFilters": "播放過濾器",
"playerFilters": "播放篩選器",
"logger": "日誌記錄器",
"lyricsDisplay": "歌詞顯示"
},
@@ -314,8 +324,8 @@
"topSongsFrom": "{{title}} 的熱門歌曲",
"viewAll": "檢視所有",
"viewAllTracks": "檢視所有$t(entity.track, {\"count\": 2})",
"groupingTypeAll": "所有發類型",
"groupingTypePrimary": "主要發類型",
"groupingTypeAll": "所有發類型",
"groupingTypePrimary": "主要發類型",
"favoriteSongs": "最愛歌曲",
"favoriteSongsFrom": "{{title}} 的最愛歌曲",
"topSongsCommunity": "社群",
@@ -371,7 +381,7 @@
"playbackSpeed": "播放速度",
"playRandom": "隨機播放",
"previous": "上一首",
"queue_clear": "清空播放佇列",
"queue_clear": "清空佇列",
"queue_remove": "移除所選",
"repeat": "循環",
"repeat_all": "全部循環",
@@ -388,8 +398,8 @@
"next": "下一首",
"play": "播放",
"playbackFetchCancel": "請稍等…關閉通知以取消",
"queue_moveToBottom": "使所選置",
"queue_moveToTop": "使所選置",
"queue_moveToBottom": "使所選置",
"queue_moveToTop": "使所選置",
"playSimilarSongs": "播放相似歌曲",
"viewQueue": "檢視佇列",
"addLastShuffled": "新增至尾端 (隨機)",
@@ -399,7 +409,19 @@
"restoreQueueFromServer": "從伺服器還原播放佇列",
"saveQueueToServer": "將播放佇列儲存至伺服器",
"artistRadio": "藝人電台",
"trackRadio": "曲目電台"
"trackRadio": "曲目電台",
"sleepTimer": "睡眠定時器",
"sleepTimer_endOfSong": "歌曲播完時",
"sleepTimer_minutes": "{{count}} 分鐘",
"sleepTimer_hours": "{{count}} 小時",
"sleepTimer_custom": "自訂",
"sleepTimer_off": "關閉",
"sleepTimer_timeRemaining": "剩餘 {{time}}",
"sleepTimer_setCustom": "設定定時器",
"sleepTimer_cancel": "取消定時器",
"albumRadio": "專輯電台",
"scrobbleForceSubmit": "強制紀錄",
"sleepTimer_endOfAlbum": "專輯播完時"
},
"setting": {
"audioPlayer_description": "選擇用於播放的音訊播放器",
@@ -408,42 +430,42 @@
"hotkey_volumeDown": "音量降低",
"hotkey_volumeMute": "靜音",
"minimumScrobblePercentage": "最小紀錄時長(百分比)",
"minimumScrobblePercentage_description": "歌曲被記錄為已播放(scrobble)所需的最小播放百分比",
"minimumScrobblePercentage_description": "歌曲被記錄為已播放(Scrobble)所需的最小播放百分比",
"theme_description": "設定應用程式的主題",
"accentColor": "強調色",
"accentColor_description": "設定應用程式的強調色",
"applicationHotkeys": "應用程式快捷鍵",
"applicationHotkeys_description": "設定應用程式快捷鍵。切換勾選框來設為全域快捷鍵(僅桌面端)",
"audioDevice": "音訊設備",
"audioDevice_description": "選擇用於播放的音訊設備(僅 web 播放器)",
"audioExclusiveMode": "音訊獨模式",
"audioExclusiveMode_description": "啟用獨輸出模式。在此模式下,系統通常被鎖定,只有 mpv 能夠輸出音訊",
"audioDevice_description": "選擇用於播放的音訊設備",
"audioExclusiveMode": "音訊獨模式",
"audioExclusiveMode_description": "啟用獨輸出模式。在此模式下,系統通常被鎖定,只有 MPV 能夠輸出音訊。視覺化音訊截取在此選項啟用時不會作用",
"audioPlayer": "音訊播放器",
"crossfadeDuration": "淡入淡出持續時間",
"crossfadeDuration_description": "設定淡入淡出持續時間",
"crossfadeStyle_description": "選擇用於音訊播放器的淡入淡出風格",
"customFontPath": "自定字體路徑",
"customFontPath_description": "設定應用程式使用的自定字體路徑",
"disableLibraryUpdateOnStartup": "用啟動時檢查新版本",
"discordApplicationId": "{{discord}} 應用程式 id",
"discordApplicationId_description": "{{discord}} rich presence 應用程式 id(預設為 {{defaultId}}",
"discordIdleStatus": "顯示 rich presence 閒置狀態",
"customFontPath": "自訂字型路徑",
"customFontPath_description": "設定應用程式使用的自訂字型路徑",
"disableLibraryUpdateOnStartup": "用啟動時檢查新版本",
"discordApplicationId": "{{discord}} 應用程式 ID",
"discordApplicationId_description": "{{discord}} Rich Presence 應用程式 ID(預設為 {{defaultId}}",
"discordIdleStatus": "顯示 Rich Presence 閒置狀態",
"discordIdleStatus_description": "啟用後將會在播放器閒置時更新狀態",
"discordRichPresence_description": "在 {{discord}} rich presence 中顯示播放狀態。圖片鍵為:{{icon}}、{{playing}} 和 {{paused}}",
"discordUpdateInterval": "{{discord}} rich presence 更新間隔",
"discordRichPresence_description": "在 {{discord}} Rich Presence 中顯示播放狀態。圖片鍵為:{{icon}}、{{playing}} 和 {{paused}}",
"discordUpdateInterval": "{{discord}} Rich Presence 更新間隔",
"discordUpdateInterval_description": "更新間隔秒數(至少 15 秒)",
"enableRemote": "啟用遠端控制伺服器",
"enableRemote_description": "啟用遠端控制伺服器,以允許其他設備控制此應用程式",
"exitToTray": "關閉時到將視窗最小化",
"followLyric": "跟隨目前歌詞",
"font_description": "設定應用程式使用的字",
"fontType": "字類型",
"fontType_description": "內建字可以選擇 feishin 提供的字之一。系統字允許您選擇作業系統提供的任何字。自選項允許您使用自己的字",
"fontType_optionBuiltIn": "內建字",
"fontType_optionCustom": "自定字體",
"fontType_optionSystem": "系統字",
"font_description": "設定應用程式使用的字",
"fontType": "字類型",
"fontType_description": "內建字可以選擇 Feishin 提供的字之一。系統字允許您選擇作業系統提供的任何字。自選項允許您使用自己的字",
"fontType_optionBuiltIn": "內建字",
"fontType_optionCustom": "自訂字型",
"fontType_optionSystem": "系統字",
"gaplessAudio": "無間隔音訊",
"gaplessAudio_description": "調整 mpv 無間隔音訊設定",
"gaplessAudio_description": "調整 MPV 無間隔音訊設定",
"gaplessAudio_optionWeak": "弱(建議)",
"globalMediaHotkeys": "全域媒體快捷鍵",
"hotkey_browserForward": "瀏覽器往前",
@@ -481,16 +503,16 @@
"lyricFetchProvider_description": "選擇歌詞來源",
"minimizeToTray": "最小化到系統匣",
"minimizeToTray_description": "將應用程式最小化到系統匣",
"minimumScrobbleSeconds": "最小紀錄時(秒)",
"minimumScrobbleSeconds_description": "歌曲被記錄為已播放(scrobble)所需的最小播放時間",
"mpvExecutablePath": "mpv 執行檔路徑",
"minimumScrobbleSeconds": "最小紀錄時(秒)",
"minimumScrobbleSeconds_description": "歌曲被記錄為已播放(Scrobble)所需的最小播放時間",
"mpvExecutablePath": "MPV 執行檔路徑",
"playbackStyle_optionCrossFade": "淡入淡出",
"playbackStyle_optionNormal": "一般",
"playButtonBehavior": "播放按鈕動作",
"playButtonBehavior_description": "設定歌曲新增到佇列時播放按鈕的預設動作",
"playButtonBehavior_optionAddLast": "$t(player.addLast)",
"playButtonBehavior_optionAddNext": "$t(player.addNext)",
"remotePort": "遠端控制伺服器端口",
"remotePort": "遠端控制伺服器連接埠",
"remoteUsername": "遠端控制伺服器使用者名稱",
"replayGainClipping": "{{ReplayGain}}削波",
"replayGainFallback": "{{ReplayGain}}後備替代",
@@ -504,25 +526,25 @@
"replayGainPreamp_description": "調整使用在{{ReplayGain}}值上的前置放大增益",
"savePlayQueue": "儲存播放佇列",
"sampleRate_description": "如果選擇的取樣率與目前媒體的取樣率不同,請選擇要使用的輸出取樣率。小於 8000 的值將使用預設頻率",
"savePlayQueue_description": "當應用程式關閉時儲存播放佇列,並在應用程式開時恢複它",
"savePlayQueue_description": "當應用程式關閉時儲存播放佇列,並在應用程式開時恢複它",
"scrobble": "記錄播放資訊(Scrobble",
"scrobble_description": "在你的媒體伺服器中記錄播放資訊",
"showSkipButton": "顯示跳過按鈕",
"showSkipButton_description": "在播放條上顯示/隱藏跳過按鈕",
"sidebarPlaylistList": "側邊欄播放清單列表",
"sidebarCollapsedNavigation": "側邊欄(已疊)導航",
"sidebarCollapsedNavigation_description": "在疊的側邊欄中顯示或隱藏導航",
"sidebarCollapsedNavigation": "側邊欄(已疊)導航",
"sidebarCollapsedNavigation_description": "在疊的側邊欄中顯示或隱藏導航",
"sidebarConfiguration": "側邊欄設定",
"sidebarConfiguration_description": "選擇側邊欄包含的項目與順序",
"sidebarPlaylistList_description": "顯示或隱藏側邊欄歌單清單",
"sidePlayQueueStyle": "側邊播放佇列樣式",
"sidePlayQueueStyle_description": "設側邊播放佇列樣式",
"sidePlayQueueStyle_description": "設側邊播放佇列樣式",
"sidePlayQueueStyle_optionAttached": "吸附",
"sidePlayQueueStyle_optionDetached": "分離",
"skipDuration": "跳過時長",
"skipDuration_description": "設每次按下跳過按鈕將會跳過的時長",
"skipDuration_description": "設每次按下跳過按鈕將會跳過的時長",
"skipPlaylistPage": "跳過播放清單頁面",
"skipPlaylistPage_description": "開播放清單時,直接查看歌曲列表而非查看預設頁面",
"skipPlaylistPage_description": "開播放清單時,直接查看歌曲列表而非查看預設頁面",
"theme": "主題",
"themeDark": "主題(深色)",
"useSystemTheme_description": "使用系統定義的淺色或深色主題",
@@ -539,43 +561,43 @@
"playbackStyle": "播放風格",
"exitToTray_description": "退出應用程式時最小化到系統匣而非關閉",
"followLyric_description": "滾動歌詞到目前播放位置",
"font": "字",
"globalMediaHotkeys_description": "啟用或用系統媒體快捷鍵以控制播放",
"font": "字",
"globalMediaHotkeys_description": "啟用或用系統媒體快捷鍵以控制播放",
"hotkey_browserBack": "瀏覽器返回",
"hotkey_favoriteCurrentSong": "收藏 $t(common.currentSong)",
"hotkey_playbackStop": "停止",
"hotkey_rate0": "清除評分",
"mpvExecutablePath_description": "設定 mpv 執行檔的路徑。如果留空,則使用預設路徑",
"mpvExecutablePath_description": "設定 MPV 執行檔的路徑。如果留空,則使用預設路徑",
"playbackStyle_description": "選擇播放器的播放風格",
"playButtonBehavior_optionPlay": "$t(player.play)",
"remotePassword": "遠端控制伺服器密碼",
"remotePassword_description": "設定遠端控制伺服器的密碼。這些憑證預設以不安全的方式傳輸,因此您應該使用一個您不在意的唯一密碼",
"remotePort_description": "設定遠端控制伺服器的端口",
"remoteUsername_description": "設定遠端控制伺服器的使用者名稱。如果使用者名稱和密碼都為空,則身驗證將被用",
"remotePort_description": "設定遠端控制伺服器的連接埠",
"remoteUsername_description": "設定遠端控制伺服器的使用者名稱。如果使用者名稱和密碼都為空,則身驗證將被用",
"replayGainClipping_description": "自動降低增益以防止{{ReplayGain}}造成削波",
"showSkipButtons": "顯示跳過按鈕",
"themeDark_description": "應用程式將使用深色主題",
"clearQueryCache_description": "Feishin的軟清除。這將會刷新播放清單、曲目標籤並重置儲存的歌詞。會保留設定、伺服器憑證和暫存圖片",
"clearQueryCache_description": "Feishin的軟清除。這將會刷新播放清單、曲目標籤並重置儲存的歌詞。會保留設定、伺服器憑證和暫存圖片",
"clearCache": "清除瀏覽器快取",
"clearCache_description": "Feishin的硬清除。除了清除Feishin的快取、清除瀏覽器快取(儲存的圖片和其他資源)。會保留伺服器憑證和設定",
"clearCache_description": "Feishin的硬清除。除了清除Feishin的快取、清除瀏覽器快取(儲存的圖片和其他資源)。會保留伺服器憑證和設定",
"clearQueryCache": "清除Feishin快取",
"buttonSize": "播放器欄按鈕大小",
"buttonSize_description": "播放器欄按鈕大小",
"albumBackground": "專輯背景圖片",
"albumBackground_description": "為包含專輯封面的專輯頁面新增背景圖片",
"albumBackgroundBlur": "專輯背景圖片模糊大小",
"albumBackgroundBlur_description": "調整應用於專輯背景圖片的模糊量",
"albumBackgroundBlur_description": "調整應用程式於專輯背景圖片的模糊量",
"artistConfiguration": "專輯藝人頁面設定",
"artistConfiguration_description": "設定專輯藝人頁面中顯示的項目及排序",
"clearCacheSuccess": "成功清除快取",
"contextMenu": "右鍵選單配置",
"contextMenu": "右鍵選單設定",
"contextMenu_description": "允許您隱藏在右鍵選單項目時顯示的項目。未選取的項目將被隱藏",
"customCssEnable": "啟用自訂CSS",
"customCssEnable_description": "允許撰寫自訂CSS",
"customCssNotice": "警告:即使已限制某些用法(不允許 url() 和 content:),但使用自訂 CSS 仍然會透過更改介面帶來風險",
"customCssNotice": "警告:即使已限制某些用法(不允許 URL() 和 content:),但使用自訂 CSS 仍然會透過更改介面帶來風險",
"customCss": "自訂CSS",
"customCss_description": "自訂 CSS 內容。注意:內容和遠端 URL 是不允許使用的屬性。您的內容預覽如下所示。由於需要進行清理,因此存在一些您未設定的其他欄位",
"discordPausedStatus": "暫停時顯示 rich presence",
"customCss_description": "自訂 CSS 內容。注意:內容和遠端 URL 是不允許使用的屬性。您的內容預覽如下所示。由於需要進行清理,因此存在一些您未設定的其他欄位。桌面端:feishin在應用程式配置目錄中讀取和寫入custom.css,並在檔案更改時重新載入",
"discordPausedStatus": "暫停時顯示 Rich Presence",
"discordPausedStatus_description": "啟用後,播放器暫停時將顯示狀態",
"discordListening": "將狀態設為\"正在聽\"",
"discordListening_description": "將狀態顯示為\"正在聽\"而不是\"正在玩\"",
@@ -585,19 +607,19 @@
"externalLinks_description": "在藝人/專輯頁面顯示外部連結(Last.fm, MusicBrainz)",
"preferLocalLyrics": "偏好本地歌詞",
"preferLocalLyrics_description": "優先選擇本地歌詞,而不是遠端歌詞(如果可用)",
"homeConfiguration": "首頁配置",
"homeConfiguration_description": "配置在首頁上顯示哪些項目以及顯示順序",
"homeConfiguration": "首頁設定",
"homeConfiguration_description": "設定在首頁上顯示哪些項目以及顯示順序",
"homeFeature": "首頁特色輪播",
"homeFeature_description": "控制是否在首頁上顯示大型特色輪播",
"imageAspectRatio": "使用原生封面照長寬比",
"imageAspectRatio_description": "如果啟用,封面照將使用其原始長寬比顯示。對於非 1:1 的封面,剩餘空間將為空",
"lastfm": "顯示 last.fm 連結",
"lastfm": "顯示 Last.fm 連結",
"lastfm_description": "在藝人/專輯頁面顯示 Last.fm 連結",
"lastfmApiKey": "{{lastfm}} API金鑰",
"lastfmApiKey_description": "{{lastfm}}的API金鑰。用於封面照",
"mpvExtraParameters_help": "一行一個",
"musicbrainz": "顯示 MusicBrainz 連結",
"musicbrainz_description": "在存在 MusicBrainz ID 的藝人/專輯頁面上顯示 MusicBrainz 的連結",
"musicbrainz_description": "在擁有 MusicBrainz ID 的藝人/專輯頁面上顯示 MusicBrainz 的連結",
"neteaseTranslation": "啟用網易翻譯",
"neteaseTranslation_description": "啟用後,將從網易取得並顯示翻譯的歌詞(如果有)",
"passwordStore": "密碼/secret儲存",
@@ -608,14 +630,14 @@
"startMinimized": "啟動時最小化",
"startMinimized_description": "在系統匣中啟動應用程式",
"transcode_description": "啟用轉碼到不同格式",
"transcodeBitrate": "轉碼的比特率",
"transcodeBitrate_description": "選擇要轉碼的比特率。 0 表示讓伺服器選擇",
"transcodeBitrate": "轉碼的位元率",
"transcodeBitrate_description": "選擇要轉碼的位元率。 0 表示讓伺服器選擇",
"transcodeFormat": "轉碼的格式",
"transcodeFormat_description": "選擇要轉碼的格式。留空來讓伺服器決定",
"translationApiProvider": "翻譯API提供者",
"translationApiProvider_description": "翻譯API的提供者",
"translationApiKey": "翻譯API金鑰",
"translationApiKey_description": "翻譯的API金鑰(僅限全域服端點)",
"translationApiKey_description": "翻譯的API金鑰(僅限全域服端點)",
"translationTargetLanguage": "目標翻譯語言",
"translationTargetLanguage_description": "翻譯的目標語言",
"trayEnabled": "顯示系統匣",
@@ -645,7 +667,7 @@
"preventSleepOnPlayback": "防止播放時進入睡眠狀態",
"preventSleepOnPlayback_description": "在音樂播放時防止螢幕進入睡眠狀態",
"mediaSession": "啟用 Media Session",
"mediaSession_description": "啟用 Media Session 整合功能,系統音量 Overlay 和鎖定畫面顯示媒體資料與控制面板",
"mediaSession_description": "啟用 Media Session 整合功能,系統音量疊加層和鎖定畫面顯示媒體控制項與中繼資料。此功能需要使用網頁播放器。",
"releaseChannel": "發佈通道",
"analyticsDisable": "選擇退出使用情況分析",
"analyticsDisable_description": "經過匿名處理的使用情況資料將傳送給開發者,以協助改進應用程式",
@@ -690,16 +712,15 @@
"queryBuilderCustomFields_description": "在查詢建構器中新增自訂欄位",
"followCurrentSong_description": "自動將播放佇列捲動至當前播放的歌曲",
"followCurrentSong": "跟隨當前歌曲",
"playerbarSlider_description": "不建議在網路速度緩慢或計費的網路下使用波形",
"playerFilters": "從佇列中過濾歌曲",
"playerbarSlider_description": "不建議在速度緩慢或計費的網路下使用波形",
"playerFilters": "從佇列中篩選歌曲",
"playerFilters_description": "根據以下條件,排除要新增至佇列中的歌曲",
"autoDJ": "Auto DJ",
"autoDJ_description": "自動將相似的歌曲加入到播放佇列",
"autoDJ_itemCount": "歌曲數量",
"autoDJ_itemCount_description": "在啟用Auto DJ時嘗試加入佇列的歌曲數量",
"autoDJ_itemCount": "項目數量",
"autoDJ_itemCount_description": "嘗試加入佇列的項目數量",
"autoDJ_timing_description": "佇列中剩餘多少歌曲時啟動 Auto DJ",
"autoDJ_timing": "觸發時機",
"logLevel": "log等級",
"logLevel": "Log等級",
"logLevel_description": "設定要顯示的最低日誌等級。Debug 會顯示所有日誌,Error 僅會顯示錯誤訊息",
"logLevel_optionDebug": "Debug",
"logLevel_optionError": "Error",
@@ -707,7 +728,7 @@
"logLevel_optionWarn": "Warn",
"useThemeAccentColor": "使用主題強調色",
"useThemeAccentColor_description": "使用所選主題中定義的主要顏色,而非自訂的強調色",
"artistRadioCount_description": "設定為藝人電台與曲目電台擷取的歌曲數量",
"artistRadioCount_description": "設定為藝人電台與曲目電台擷取的歌曲數量",
"imageResolution": "圖片解析度",
"imageResolution_description": "應用程式中所使用圖片的解析度。設定為 0 時,將使用圖片的原始解析度",
"imageResolution_optionTable": "表格",
@@ -742,11 +763,108 @@
"enableGridMultiSelect_description": "啟用時,允許在網格檢視中選擇多項。停用時,單擊網格項目圖片將導航到項目頁面",
"sidebarPlaylistSorting_description": "允許在側邊欄中使用拖放手動對播放清單進行排序,而不是預設的伺服器排序",
"sidebarPlaylistListFilterRegex_description": "在側邊欄中隱藏與此正規表達式匹配的播放清單",
"sidebarPlaylistListFilterRegex_placeholder": "範例: ^Daily Mix.*",
"sidebarPlaylistListFilterRegex": "播放清單過濾器正規表達式",
"sidebarPlaylistListFilterRegex_placeholder": "範例: ^daily mix.*",
"sidebarPlaylistListFilterRegex": "播放清單篩選器正規表達式",
"blurExplicitImages": "模糊露骨圖片",
"blurExplicitImages_description": "標記為露骨的專輯和歌曲封面將被模糊",
"releaseChannel_optionAlpha": "alpha (每日建構版)"
"releaseChannel_optionAlpha": "Alpha (每日建構版)",
"analyticsEnable": "傳送基於使用情況的分析報告",
"analyticsEnable_description": "匿名化的使用情況資料會傳送給開發者,以協助改進應用程式",
"automaticUpdates": "自動更新",
"automaticUpdates_description": "自動檢查並安裝更新",
"discordStateIcon": "顯示播放中圖示",
"discordStateIcon_description": "在 Rich Presence 狀態中顯示一個小的播放圖示。啟用「暫停時顯示 Rich Presence」時,會始終顯示暫停的圖示",
"useThemePrimaryShade": "套用主題主色調",
"useThemePrimaryShade_description": "使用所選主題中定義的主色調作為主色變體",
"primaryShade": "主要色調",
"primaryShade_description": "覆蓋按鈕、連結及其他主色調元素所使用的主色調(0–9)",
"playerItemConfiguration_description": "設定全螢幕播放器顯示的項目及排列順序",
"playerItemConfiguration": "播放器項目設定",
"autosave": "自動儲存播放佇列",
"autosave_description": "啟用自動將播放佇列儲存到您的伺服器。這只有在使用Navidrome/Subsonic時才可使用,並且您不能有混合播放佇列。",
"autosaveCount": "自動播放佇列儲存頻率",
"autosaveCount_description": "在儲存佇列之前,有多少曲目更改。1(最小)表示每次歌曲更改",
"spotify_description": "在藝人與專輯頁面顯示 Spotify 的連結",
"spotify": "顯示 Spotify 的連結",
"nativeSpotify_description": "在 Spotify 應用程式而非瀏覽器中開啟",
"nativeSpotify": "使用 Spotify 應用程式",
"sidePlayQueueLayout": "側邊播放佇列佈局",
"sidePlayQueueLayout_description": "設定吸附側邊播放佇列的佈局",
"sidePlayQueueLayout_optionHorizontal": "水平",
"sidePlayQueueLayout_optionVertical": "垂直",
"listenbrainz_description": "在藝人/專輯頁面上顯示 ListenBrainz 的連結",
"listenbrainz": "顯示 ListenBrainz 連結",
"qobuz_description": "在藝人/專輯頁面上顯示 Qobuz 的連結",
"qobuz": "顯示 Qobuz 連結",
"waveformLoadingDelay": "波形載入延遲",
"waveformLoadingDelay_description": "載入波形前的延遲(以秒為單位)。如果您在使用網頁播放器時遇到卡頓,請增加此值。",
"playerbarWaveformStretch": "波形拉伸",
"playerbarWaveformStretch_description": "拉伸波形來填補可用空間",
"preventSuspendOnPlayback_description": "音樂播放時防止應用程式進入休眠",
"preventSuspendOnPlayback": "在播放時防止應用程式暫停",
"hotkey_listShowPlayingSong": "在清單中顯示正在播放的歌曲",
"sidebarPlaylistFolders_description": "為名稱中包含配置分隔符的播放清單建立資料夾檢視",
"sidebarPlaylistFolders": "啟用資料夾",
"sidebarPlaylistFolderSeparator_description": "在播放清單名稱中分隔資料夾級別的字元(或字串)",
"sidebarPlaylistFolderSeparator": "資料夾分隔符",
"sidebarPlaylistFolderView_description": "資料夾在側邊欄中顯示的方式",
"sidebarPlaylistFolderView": "資料夾檢視",
"sidebarPlaylistFolderView_optionSingle": "單一資料夾",
"sidebarPlaylistFolderView_optionTree": "樹狀顯示",
"sidebarPlaylistFolderView_optionNavigation": "導覽視圖",
"sidebarPlaylistFolderTreeIndent_description": "每個樹狀層級縮排的像素",
"sidebarPlaylistFolderTreeIndent": "樹狀縮排",
"sidebarPlaylistFolderTreeLineColor_description": "樹狀連接線的顏色(留空則使用佈景主題預設值)",
"sidebarPlaylistFolderTreeLineColor": "樹狀線條顏色",
"sidebarPlaylistMode_description": "各播放清單在側邊欄列表中的顯示方式",
"sidebarPlaylistMode": "側邊欄播放清單模式",
"sidebarPlaylistMode_optionCompact": "緊湊",
"sidebarPlaylistMode_optionExpanded": "展開",
"autoDJ_mode": "模式",
"autoDJ_mode_albums": "專輯",
"autoDJ_mode_description": "選擇將歌曲或整張專輯加入佇列",
"autoDJ_mode_songs": "歌曲",
"autoDJ_enabled": "啟用Auto DJ",
"autoDJ_albumStrategy": "專輯選擇模式",
"autoDJ_songStrategy": "歌曲選擇模式",
"autoDJ_strategy_option_library_random": "隨機",
"autoDJ_strategy_option_similar": "相似",
"enableFurigana_description": "在日文歌詞漢字上方顯示發音標記(振假名)。",
"enableFurigana": "啟用振假名顯示",
"equalizer_descriptionMpv": "透過 FFmpeg lavfi (MPV) 使用參數等化器",
"equalizer_descriptionWebAudio": "透過 Web Audio API 使用參數等化器",
"equalizer": "等化器",
"equalizerBands_description": "各頻段增益。可上下拖曳或輸入數值。範圍:-12 至 +12 dB。",
"equalizerBands": "頻段",
"equalizerPreamp_description": "EQ 頻段之前的輸入增益。提升頻段時可設為負值以避免削波 (MPV)。",
"equalizerPreamp": "前級增益",
"equalizerPreset_description": "套用內建或已儲存的自訂 EQ 曲線",
"equalizerPreset": "預設",
"equalizerPresetDeletePlaceholder": "刪除自訂…",
"equalizerPresetGroupBuiltIn": "內建",
"equalizerPresetGroupCustom": "自訂",
"equalizerPresetNamePlaceholder": "預設名稱…",
"equalizerPresetSelectPlaceholder": "選擇預設",
"equalizerSavePreset_description": "將目前 EQ 設定儲存為具名預設",
"equalizerSavePreset": "儲存預設",
"compressor_descriptionMpv": "透過 FFmpeg acompressor (MPV) 使用動態範圍壓縮器",
"compressor_descriptionWebAudio": "透過 Web Audio API 使用動態範圍壓縮器",
"compressor": "壓縮器",
"compressorAttack_description": "訊號超過閾值後,壓縮器開始作用的速度。",
"compressorAttack": "啟動時間",
"compressorKnee_description": "柔性拐點寬度。數值越高,進入壓縮的過渡越平滑。",
"compressorKnee": "拐點",
"compressorMakeupGain_description": "壓縮後套用的輸出增益,用於恢復音量。",
"compressorMakeupGain": "補償增益",
"compressorPreset_description": "套用內建或已儲存的自訂壓縮器設定",
"compressorRatio_description": "壓縮比例,例如 4 表示 4:1。",
"compressorRatio": "比例",
"compressorRelease_description": "訊號低於閾值後,壓縮器解除作用的速度。",
"compressorRelease": "釋放時間",
"compressorReset_description": "將所有壓縮器參數恢復為預設值",
"compressorSavePreset_description": "將目前壓縮器設定儲存為具名預設",
"compressorThreshold_description": "開始進行壓縮的訊號電平。",
"compressorThreshold": "閥值"
},
"table": {
"config": {
@@ -755,7 +873,7 @@
"gap": "$t(common.gap)",
"size": "$t(common.size)",
"tableColumns": "列",
"autoFitColumns": "列寬自適應",
"autoFitColumns": "自動調整列寬",
"followCurrentSong": "跟隨目前歌曲",
"itemGap": "項目間隔 (px)",
"itemSize": "項目大小 (px)",
@@ -806,7 +924,7 @@
"size": "$t(common.size)",
"title": "$t(common.title)",
"titleCombined": "$t(common.title)(合併)",
"trackNumber": "曲目編號",
"trackNumber": "曲目",
"year": "$t(common.year)",
"rating": "$t(common.rating)",
"codec": "$t(common.codec)",
@@ -817,22 +935,24 @@
"bitDepth": "$t(common.bitDepth)",
"sampleRate": "$t(common.sampleRate)",
"composer": "作曲者",
"titleArtist": "$t(common.title) (藝人)"
"titleArtist": "$t(common.title) (藝人)",
"albumGroup": "專輯分組"
},
"view": {
"table": "表格",
"grid": "網格",
"list": "列表"
"list": "列表",
"detail": "詳情"
}
},
"column": {
"album": "專輯",
"albumArtist": "專輯藝人",
"albumCount": "$t(entity.album, {\"count\": 2})",
"artist": "$t(entity.artist, {\"count\": 1})",
"albumCount": "專輯",
"artist": "藝人",
"biography": "簡介",
"bitrate": "比特率",
"channels": "$t(common.channel, {\"count\": 2})",
"bitrate": "位元率",
"channels": "聲道",
"comment": "評論",
"dateAdded": "新增日期",
"discNumber": "光碟",
@@ -840,43 +960,46 @@
"lastPlayed": "最後播放",
"path": "路徑",
"playCount": "播放次數",
"rating": "評",
"releaseDate": "發日期",
"rating": "評",
"releaseDate": "發日期",
"releaseYear": "年份",
"genre": "$t(entity.genre, {\"count\": 1})",
"bpm": "bpm",
"songCount": "$t(entity.track, {\"count\": 2})",
"genre": "曲風",
"bpm": "BPM",
"songCount": "曲目",
"title": "標題",
"trackNumber": "曲目編號",
"size": "$t(common.size)",
"codec": "$t(common.codec)",
"trackNumber": "曲目",
"size": "大小",
"codec": "編解碼器",
"owner": "擁有者",
"bitDepth": "$t(common.bitDepth)",
"sampleRate": "$t(common.sampleRate)"
"bitDepth": "位元深度",
"sampleRate": "取樣率"
}
},
"action": {
"addToFavorites": "新增$t(entity.favorite, {\"count\": 2})",
"clearQueue": "清空播放佇列",
"createPlaylist": "建$t(entity.playlist, {\"count\": 1})",
"deletePlaylist": "刪除$t(entity.playlist, {\"count\": 1})",
"addToPlaylist": "新增$t(entity.playlist, {\"count\": 1})",
"addToFavorites": "新增$t(entity.favorite, {\"count\": 2})",
"clearQueue": "清空佇列",
"createPlaylist": "建$t(entity.playlist, {\"count\": 1})",
"deletePlaylist": "刪除 $t(entity.playlist, {\"count\": 1})",
"addToPlaylist": "新增$t(entity.playlist, {\"count\": 1})",
"deselectAll": "取消全選",
"editPlaylist": "編輯 $t(entity.playlist, {\"count\": 1})",
"goToPage": "前往頁面",
"moveToBottom": "移至底部",
"moveToTop": "移至頂部",
"refresh": "$t(common.refresh)",
"removeFromFavorites": "從$t(entity.favorite, {\"count\": 2})移除",
"removeFromPlaylist": "從$t(entity.playlist, {\"count\": 1})移除",
"removeFromQueue": "從播放佇列中移除",
"removeFromFavorites": "從 $t(entity.favorite, {\"count\": 2}) 移除",
"removeFromPlaylist": "從 $t(entity.playlist, {\"count\": 1}) 移除",
"removeFromQueue": "從佇列中移除",
"setRating": "評分",
"toggleSmartPlaylistEditor": "切換$t(entity.smartPlaylist)編輯器",
"viewPlaylists": "查看$t(entity.playlist, {\"count\": 2})",
"toggleSmartPlaylistEditor": "切換 $t(entity.smartPlaylist) 編輯器",
"viewPlaylists": "查看 $t(entity.playlist, {\"count\": 2})",
"moveToNext": "移至下一項",
"openIn": {
"lastfm": "在Last.fm開啟",
"musicbrainz": "在MusicBrainz開啟"
"lastfm": "在 Last.fm開啟",
"musicbrainz": "在 MusicBrainz 開啟",
"spotify": "在 Spotify 中開啟",
"listenbrainz": "在 ListenBrainz 中開啟",
"qobuz": "在 Qobuz 中開啟"
},
"downloadStarted": "已開始下載 {{count}} 項內容",
"moveItems": "移動項目",
@@ -888,12 +1011,15 @@
"moveDown": "向下移動",
"holdToMoveToTop": "按住以移動至頂部",
"holdToMoveToBottom": "按住以移動至底部",
"createRadioStation": "建 $t(entity.radioStation, {\"count\": 1})",
"createRadioStation": "建 $t(entity.radioStation, {\"count\": 1})",
"deleteRadioStation": "刪除 $t(entity.radioStation, {\"count\": 1})",
"openApplicationDirectory": "開啟應用程式目錄",
"addOrRemoveFromSelection": "新增或移除選取項目",
"selectAll": "全選",
"selectRangeOfItems": "批量選取"
"selectRangeOfItems": "批量選取",
"goToCurrent": "前往當前項目",
"expandAllFolders": "展開所有資料夾",
"collapseAllFolders": "摺疊所有資料夾"
},
"entity": {
"album_other": "專輯",
@@ -908,39 +1034,39 @@
"genreWithCount_other": "{{count}} 種曲風",
"playlist_other": "播放清單",
"playlistWithCount_other": "{{count}} 個播放清單",
"smartPlaylist": "智慧$t(entity.playlist, {\"count\": 1})",
"smartPlaylist": "智慧 $t(entity.playlist, {\"count\": 1})",
"track_other": "曲目",
"trackWithCount_other": "{{count}} 曲目",
"trackWithCount_other": "{{count}} 曲目",
"albumWithCount_other": "{{count}} 張專輯",
"play_other": "{{count}}次播放",
"play_other": "{{count}} 次播放",
"song_other": "歌曲",
"radioStation_other": "電台",
"radioStationWithCount_other": "{{count}} 個電台"
},
"filter": {
"albumCount": "$t(entity.album, {\"count\": 2})數",
"albumCount": "$t(entity.album, {\"count\": 2}) 數",
"artist": "$t(entity.artist, {\"count\": 1})",
"biography": "個人簡介",
"bitrate": "比特率",
"bpm": "bpm",
"biography": "簡介",
"bitrate": "位元率",
"bpm": "BPM",
"channels": "$t(common.channel, {\"count\": 2})",
"comment": "評論",
"communityRating": "社群評分",
"criticRating": "評論家評分",
"dateAdded": "新增日期",
"dateAdded": "新增日期",
"disc": "光碟",
"duration": "時長",
"id": "id",
"id": "ID",
"fromYear": "從年份",
"genre": "$t(entity.genre, {\"count\": 1})",
"isCompilation": "為合輯",
"isFavorited": "收藏",
"isPublic": "公開",
"isRated": "已評分",
"isCompilation": "是否為合輯",
"isFavorited": "是否為收藏",
"isPublic": "是否為公開",
"isRated": "是否已評分",
"name": "名稱",
"note": "注釋",
"isRecentlyPlayed": "最近播放過",
"lastPlayed": "上次播放",
"isRecentlyPlayed": "是否最近播放過",
"lastPlayed": "上次播放",
"mostPlayed": "播放最多",
"owner": "$t(common.owner)",
"path": "路徑",
@@ -949,19 +1075,21 @@
"rating": "評分",
"recentlyPlayed": "最近播放",
"recentlyUpdated": "最近更新",
"releaseDate": "發日期",
"releaseDate": "發日期",
"songCount": "曲目數",
"album": "$t(entity.album, {\"count\": 1})",
"albumArtist": "$t(entity.albumArtist, {\"count\": 1})",
"favorited": "已收藏",
"recentlyAdded": "最近新增",
"releaseYear": "發年份",
"releaseYear": "發年份",
"search": "搜尋",
"title": "標題",
"toYear": "年份",
"toYear": "年份",
"trackNumber": "曲目",
"explicitStatus": "$t(common.explicitStatus)",
"sortName": "排序名稱"
"sortName": "排序名稱",
"matchAnd": "和",
"matchOr": "或"
},
"form": {
"addServer": {
@@ -969,15 +1097,15 @@
"input_name": "伺服器名稱",
"input_password": "密碼",
"input_savePassword": "儲存密碼",
"input_url": "url",
"input_url": "URL",
"input_username": "使用者名稱",
"success": "伺服器新增成功",
"title": "新增伺服器",
"error_savePassword": "儲存密碼時出現錯誤",
"ignoreCors": "忽略 cors $t(common.restartRequired)",
"ignoreSsl": "忽略 ssl $t(common.restartRequired)",
"ignoreCors": "忽略 CORS $t(common.restartRequired)",
"ignoreSsl": "忽略 SSL $t(common.restartRequired)",
"input_preferInstantMix": "偏好即時混音",
"input_preferInstantMixDescription": "僅使用即時混音功能來取相似歌曲。若您擁有能修改此行為的外掛,此功能將相當實用",
"input_preferInstantMixDescription": "僅使用即時混音功能來取相似歌曲。若您擁有能修改此行為的外掛,此功能將相當實用",
"input_preferRemoteUrl": "優先使用公開網址",
"input_remoteUrl": "公開網址",
"input_remoteUrlPlaceholder": "選用:對外功能的公開網址"
@@ -987,16 +1115,17 @@
"input_skipDuplicates": "跳過重複",
"success": "新增 $t(entity.trackWithCount, {\"count\": {{message}} }) 到 $t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })",
"title": "新增到$t(entity.playlist, {\"count\": 1})",
"create": "建 $t(entity.playlist, {\"count\": 1}) {{playlist}}",
"searchOrCreate": "搜尋$t(entity.playlist, {\"count\": 2}) 或輸入內容以建立新項目"
"create": "建 $t(entity.playlist, {\"count\": 1}) {{playlist}}",
"searchOrCreate": "搜尋$t(entity.playlist, {\"count\": 2}) 或輸入內容以建立新項目",
"noneAdded": "沒有曲目新增到 $t(entity.playlist, {\"count\": 1}) '{{playlist}}'"
},
"createPlaylist": {
"input_description": "$t(common.description)",
"input_name": "$t(common.name)",
"input_owner": "$t(common.owner)",
"input_public": "公開",
"success": "已成功建 $t(entity.playlist, {\"count\": 1})",
"title": "建$t(entity.playlist, {\"count\": 1})"
"success": "已成功建 $t(entity.playlist, {\"count\": 1})",
"title": "建$t(entity.playlist, {\"count\": 1})"
},
"lyricSearch": {
"input_name": "$t(common.name)",
@@ -1009,7 +1138,7 @@
"title": "查詢編輯器",
"addRuleGroup": "新增規則群組",
"removeRuleGroup": "移除規則群組",
"resetToDefault": "恢復為預設",
"resetToDefault": "重置為預設",
"clearFilters": "清除篩選"
},
"updateServer": {
@@ -1024,8 +1153,7 @@
"editPlaylist": {
"title": "編輯$t(entity.playlist, {\"count\": 1})",
"publicJellyfinNote": "Jellyfin 出於某種原因,不會顯示播放清單是否公開。如果您希望保持公開狀態,請選擇以下輸入",
"success": "$t(entity.playlist, {\"count\": 1}) 更新成功",
"editNote": "不建議手動編輯大型播放清單,你確定要承擔覆寫現有播放清單可能造成的資料遺失風險嗎?"
"success": "$t(entity.playlist, {\"count\": 1}) 更新成功"
},
"shareItem": {
"allowDownloading": "允許下載",
@@ -1033,11 +1161,13 @@
"setExpiration": "設定過期時間",
"success": "分享連結已複製到剪貼簿(或點擊此處開啟)",
"expireInvalid": "到期日必須是未來",
"createFailed": "無法建立分享(分享是否啟用?)"
"createFailed": "無法建立分享(分享是否啟用?)",
"copyToClipboard": "複製到剪貼簿:Ctrl+C, Enter",
"successMustClick": "分享建立成功,點擊此處開啟"
},
"privateMode": {
"enabled": "已啟用私人模式,播放狀態將對外部整合隱藏",
"disabled": "已停用私人模式,播放狀態現對已啟用的外部整合可見",
"enabled": "已啟用私人模式,播放狀態現在將對外部整合功能隱藏",
"disabled": "已停用私人模式,啟用的外部整合功能現在可查看播放狀態",
"title": "私人模式"
},
"largeFetchConfirmation": {
@@ -1049,15 +1179,20 @@
"input_genre": "$t(entity.genre, {\"count\": 1})",
"input_limit": "多少曲目?",
"input_minYear": "起始年份",
"input_maxYear": "結束年份",
"input_played": "播放過濾器",
"input_maxYear": "年份",
"input_played": "播放篩選器",
"input_played_optionAll": "所有曲目",
"input_played_optionUnplayed": "僅未播放的曲目",
"input_played_optionPlayed": "僅播放過的曲目"
"input_played_optionPlayed": "僅播放過的曲目",
"input_kind_albums": "專輯",
"input_kind_songs": "歌曲",
"input_kind": "隨機選取",
"input_limit_albums": "專輯數量?",
"input_limit_songs": "歌曲數量?"
},
"createRadioStation": {
"success": "電台建成功",
"title": "建電台",
"success": "電台建成功",
"title": "建電台",
"input_homepageUrl": "首頁連結",
"input_name": "名稱",
"input_streamUrl": "串流網址"
@@ -1069,6 +1204,9 @@
"export": "匯出歌詞",
"input_synced": "匯出同步歌詞",
"input_offset": "$t(setting.lyricOffset)"
},
"editRadioStation": {
"success": "電台更新成功"
}
},
"releaseType": {
@@ -1087,7 +1225,7 @@
"fieldRecording": "現場錄音",
"demo": "Demo",
"interview": "訪談",
"live": "Live",
"live": "現場演出",
"mixtape": "混音帶",
"remix": "Remix",
"soundtrack": "原聲帶",
@@ -1122,7 +1260,9 @@
"notInPlaylist": "不在…之中",
"startsWith": "以…開頭",
"inTheLast": "在最後",
"notInTheLast": "不在最後"
"notInTheLast": "不在最後",
"isMissing": "不存在",
"isPresent": "存在"
},
"datetime": {
"minuteShort": "分",
@@ -1166,8 +1306,8 @@
"channelLayout": "聲道佈局",
"maxFPS": "最大幀率",
"opacity": "不透明度",
"customGradients": "自定義漸層",
"addCustomGradient": "新增自定義漸層",
"customGradients": "自漸層",
"addCustomGradient": "新增自漸層",
"gradientName": "漸層名稱",
"gradientNamePlaceholder": "漸層名稱",
"vertical": "垂直",
@@ -1277,6 +1417,13 @@
"d": "D",
"z": "Z"
}
}
},
"systemAudioCaptureFailed": "無法開始擷取:{{message}}",
"systemAudioNoAudioTrack": "沒有回傳任何曲目。確保在提示時啟用音訊擷取。",
"systemAudioConsentAllow": "允許",
"systemAudioConsentBody": "此視覺化器需要存取系統音訊才能運作",
"systemAudioConsentDecline": "拒絕",
"systemAudioConsentTitle": "允許存取系統音訊?",
"systemAudioExclusiveModeNotSupported": "啟用音訊獨佔模式時,視覺化不可用。 在MPV設定中停用音訊獨佔模式,然後再試一次。"
}
}
+15
View File
@@ -0,0 +1,15 @@
export const disableAutoUpdates = () => {
return process.env['DISABLE_AUTO_UPDATES'];
};
export const isMacOS = () => {
return process.platform === 'darwin';
};
export const isWindows = () => {
return process.platform === 'win32';
};
export const isLinux = () => {
return process.platform === 'linux';
};
+1
View File
@@ -4,3 +4,4 @@ import './player';
import './remote';
import './settings';
import './discord-rpc';
import './visualizer';
+37
View File
@@ -0,0 +1,37 @@
import Kuroshiro from 'kuroshiro';
import KuromojiAnalyzer from 'kuroshiro-analyzer-kuromoji';
// doc: https://kuroshiro.org
let kuroshiroInstance: any = null;
let initPromise: null | Promise<void> = null;
const getKuroshiro = async () => {
if (kuroshiroInstance) return kuroshiroInstance;
if (initPromise) {
await initPromise;
return kuroshiroInstance;
}
const KuroshiroClass = (Kuroshiro as any).default || Kuroshiro;
kuroshiroInstance = new KuroshiroClass();
initPromise = kuroshiroInstance.init(new KuromojiAnalyzer());
await initPromise;
return kuroshiroInstance;
};
export const convertFurigana = async (text: string): Promise<string> => {
const KuroshiroClass = (Kuroshiro as any).default || Kuroshiro;
// check if the text contains any Japanese kana (to distinguish Japanese from Chinese text, which shares Kanji)
// If no Japanese kana is detected, skip processing
if (!KuroshiroClass.Util.hasKana(text)) return text;
try {
const kuroshiro = await getKuroshiro();
return await kuroshiro.convert(text, { mode: 'furigana', to: 'hiragana' });
} catch (e) {
console.error('Furigana conversion error: ', e);
return text;
}
};

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