Compare commits

..

307 Commits

Author SHA1 Message Date
jeffvli 20c585aa1c remove unneeded tag deletion 2025-10-11 19:43:08 -07:00
jeffvli 0248997a75 delete old tags in addition to release 2025-10-11 19:41:19 -07:00
jeffvli aaaeea1fa5 split workflow into separate jobs, fix release rename step 2025-10-11 19:39:52 -07:00
jeffvli 22504e9e84 simplify prerelease deletion 2025-10-11 19:28:16 -07:00
jeffvli 5fb2ae839f fix previous release parser 2025-10-11 19:23:05 -07:00
jeffvli 15b00910f3 rework nightly deploy again
- rename to beta
- autodelete previous beta releases
- rename release title to Beta
2025-10-11 19:09:56 -07:00
jeffvli 6cce72a22a rework nightly deploy
- rename to development
- only manual push
- allow input for semantic version number
- set release to github prerelease instead of draft
2025-10-11 19:02:45 -07:00
jeffvli d48fe81d7f re-add build in nightly 2025-10-11 17:14:04 -07:00
jeffvli f0d0f826fb remove duplicate build in nightly 2025-10-11 15:06:52 -07:00
jeffvli 4d12a4d6cb add release channel setting and implementation 2025-10-11 15:05:29 -07:00
jeffvli f14d1f3c5c convert version bump to use pwsh 2025-10-11 14:15:03 -07:00
jeffvli cc466cb0f4 remove exemption for enhancements for stale issues 2025-10-11 13:26:43 -07:00
jeffvli 20941c0405 add initial nightly release workflow 2025-10-11 13:06:51 -07:00
Kendall Garner d52c067dc7 allow customizing windows install 2025-10-11 12:40:27 -07:00
Kendall Garner fccbf83c12 bugfix: handle playlist with no tracks 2025-10-11 12:39:59 -07:00
Kendall Garner 7817059a9e update serve image docs 2025-10-11 08:07:40 -07:00
Luis Canada d3a986e93c Add PWA to web app (#1175)
* add PWA to web app

* Fix sw.js not registering and lint

* Change sw and manifest to live at root

* Revert "Change sw and manifest to live at root"

This reverts commit 4c27d92467.
2025-10-11 14:12:25 +00:00
Kendall Garner 6733047942 improve jellyfin participants 2025-10-10 19:32:11 -07:00
Kendall Garner 452803fc72 support artist art as artist background 2025-10-10 18:26:28 -07:00
jeffvli 4e4a0464d6 pin pnpm/action-setup to v4.1.0 2025-10-10 12:36:08 -07:00
Kendall Garner 4ff317eac9 fix nonexistent filter 2025-10-05 21:25:19 -07:00
Kendall Garner 306167fee3 playlist sort and refactoring 2025-10-05 19:13:35 -07:00
Kendall Garner 1cbb3e56bc add recently released to home page, refactor home route 2025-10-05 07:51:36 -07:00
Kendall Garner 7c24f7cba4 use margin bottom for notifications component to not disable center controls 2025-10-04 07:34:48 -07:00
Evelyn Gravett 1b278cb33a Feature: Add song and artist links to discord RPC (#1160)
* Add song and artist links to discord RPC

* use first artist name for artist link, full artist name for song link

* use first album artist for song link

* add discord rpc links setting

* simplify discord link settings

* fix setting description

* add musicbrainz links

* fix callback missing dependency

* use encodeURIComponent for lastfm links

Co-authored-by: Kendall Garner <17521368+kgarner7@users.noreply.github.com>

* split musicbrainz ids

* combine link settings

---------

Co-authored-by: Kendall Garner <17521368+kgarner7@users.noreply.github.com>
2025-10-04 03:27:59 +00:00
Kendall Garner f1a75d8e81 allow zero warnings on lint 2025-09-30 07:58:57 -07:00
Kendall Garner 4a48598260 add multiple genre support for nd albums/tracks 2025-09-28 19:59:20 -07:00
Kendall Garner 6df270ba34 server add/edit refactor, allow jellyfin prefer instant mix 2025-09-28 19:19:24 -07:00
Kendall Garner eb0ccec0bc Remove cached queries on editing server 2025-09-28 19:10:47 -07:00
Kendall Garner 8caf898172 have default background for artist top songs 2025-09-28 17:12:34 -07:00
Kendall Garner 508013958f ND >= 0.56.0: search songs by artist | album artist id 2025-09-27 20:00:34 -07:00
Kendall Garner c448352ec8 fix linter error 2025-09-26 17:30:20 -07:00
Henry e344adfeed Add autodiscovery for Jellyfin servers (#1146)
* Add autodiscovery for Jellyfin servers

* Remove debugging aids

you didn't see anything

* Fix linter errors

* Send a discovery packet to localhost too
2025-09-26 22:53:19 +00:00
Jeff bca4a14f2e adjust web playback error handler (#1150) 2025-09-24 18:09:30 -07:00
Kendall Garner f4be797f16 Add comment describing jellyfin image tag invalidation 2025-09-24 08:12:00 -07:00
Kendall Garner 2feef206fb add Navidrome/Jellyfin image cache invalidation 2025-09-24 08:05:22 -07:00
dependabot[bot] eea36f720a Bump axios in the npm_and_yarn group across 1 directory (#1145)
Bumps the npm_and_yarn group with 1 update in the / directory: [axios](https://github.com/axios/axios).


Updates `axios` from 1.9.0 to 1.12.0
- [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.9.0...v1.12.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.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>
2025-09-23 13:25:52 -07:00
dependabot[bot] 76350ed5af Bump vite in the npm_and_yarn group across 1 directory (#1115)
Bumps the npm_and_yarn group with 1 update in the / directory: [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite).


Updates `vite` from 6.3.5 to 6.3.6
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v6.3.6/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.3.6/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 6.3.6
  dependency-type: direct:development
  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>
2025-09-23 12:51:06 -07:00
Gabriele Mancini 4f38e16857 Feature: added playlist duration badge (#1130) 2025-09-23 12:45:08 -07:00
Malachi Soord 8a3edb71df feat: add semantic selectors for now-playing media (#1138)
* feat: add semantic selectors for now-playing media

This change adds unique class names to the elements that display the currently playing media information. This makes it easier for extension developers to parse the DOM and understand what media is playing.

The following classes have been added:
- `media-player`: The main player container.
- `player-cover-art`: The cover art of the playing track.
- `song-title`: The title of the playing track.
- `song-artist`: The artist of the playing track.
- `song-album`: The album of the playing track.
- `player-state-playing`/`player-state-paused`: The state of the player.
- `elapsed-time`: The elapsed time of the playing track.
- `total-duration`: The total duration of the playing track.

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2025-09-23 12:44:22 -07:00
jeffvli 55e35e9b24 set default body background to #000 2025-09-22 18:24:04 -07:00
Gabriele Mancini 6abdbd2f3e Feature: added silent song notification setting (#1129)
* feat: added silent song notification
2025-09-17 21:06:59 -07:00
Kendall Garner 1d46cd5ff9 client-side only sort for all playlists (#1125)
* initial client-side only sort for all playlists

* allow reordering jellyfin (assume it works properly) and navidrome

* on playlist page, add to queue by sort order
2025-09-17 21:06:30 -07:00
Kendall Garner d68165dab5 move title to default layout 2025-09-15 20:10:56 -07:00
Kendall Garner dad80adb8b raise window on mpris raise 2025-09-15 19:31:10 -07:00
jeffvli 4134af0340 update to v0.20.1 2025-09-10 21:28:13 -07:00
Hosted Weblate 29a43ca185 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (699 of 699 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: 無情天 <kofzhanganguo@126.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translation: feishin/Translation
2025-09-11 05:49:32 +02:00
Hosted Weblate e452f86170 Translated using Weblate (Slovak)
Currently translated at 100.0% (699 of 699 strings)

Translated using Weblate (Slovak)

Currently translated at 81.2% (568 of 699 strings)

Translated using Weblate (Slovak)

Currently translated at 78.3% (548 of 699 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: peter cerny <posli.to.semka@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/sk/
Translation: feishin/Translation
2025-09-11 05:49:32 +02:00
Hosted Weblate ec765dca6a Translated using Weblate (French)
Currently translated at 100.0% (699 of 699 strings)

Translated using Weblate (French)

Currently translated at 100.0% (699 of 699 strings)

Co-authored-by: Dylan MONTIGAUD <dylanmontigaud17@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/
Translation: feishin/Translation
2025-09-11 05:49:31 +02:00
Hosted Weblate 64a3752b54 Translated using Weblate (Italian)
Currently translated at 100.0% (699 of 699 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Marco Ciotola <github@ciotola.dev>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/it/
Translation: feishin/Translation
2025-09-11 05:49:30 +02:00
Hosted Weblate 24069d285f Translated using Weblate (Czech)
Currently translated at 100.0% (699 of 699 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/
Translation: feishin/Translation
2025-09-11 05:49:30 +02:00
Hosted Weblate 77fe886da4 Translated using Weblate (Catalan)
Currently translated at 100.0% (699 of 699 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Ondo <SparkyOndo@proton.me>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ca/
Translation: feishin/Translation
2025-09-11 05:49:29 +02:00
Hosted Weblate ef16e1403d Translated using Weblate (Turkish)
Currently translated at 100.0% (699 of 699 strings)

Co-authored-by: Mücahit Kaya <kaya-mucahit@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/tr/
Translation: feishin/Translation
2025-09-11 05:49:28 +02:00
jeffvli ff6dda7b06 prevent width overflow on lyrics container (#1106) 2025-09-10 20:49:15 -07:00
Jeff 479aa2e22d Merge pull request #1122 from jeffvli/properly-handle-context-menu-close
fix(context menu): Properly handle click outside, and show initial rating
2025-09-10 20:39:31 -07:00
jeffvli ab8c3ad0ec handle initial rating for multiple items in context menu 2025-09-10 20:32:34 -07:00
Kendall Garner dc03a432fe add initial rating when a single item is provided in context menu 2025-09-10 20:20:56 -07:00
Kendall Garner 751ad55d02 remove all node selectors in useClickOutside 2025-09-10 17:49:13 -07:00
Kendall Garner 78dc89303d show right control rating for subsonic servers 2025-09-10 17:27:07 -07:00
Jeff 4328d8860e Merge pull request #1113 from maximelafarie/fix/darwin-top-bar
fix: electron menu bar for darwin devices
2025-09-10 00:43:59 -07:00
Maxime LAFARIE 58a36b3bba fix: electron menu bar for darwin 2025-09-10 09:36:19 +02:00
Jeff 618e5d8da8 Merge pull request #1114 from maximelafarie/feature/one-click-context-menu
feat: add context menu on left controls and sidebar image
2025-09-09 19:19:09 -07:00
Jeff be6ec49cfa Merge pull request #1107 from mihawk90/now-playing-reformat
cleanup notification text
2025-09-09 19:00:19 -07:00
Maxime LAFARIE 65ecdc7666 feat: add context menu on left controls and sidebar image 2025-09-09 23:38:39 +02:00
Tarulia da42fd78d2 cleanup notification text 2025-09-08 17:20:03 +02:00
Kendall Garner c36735575f actually allow url('data:) in custom css 2025-09-06 19:28:15 -07:00
jeffvli 854222d2fa use consistent height calculation for sidebar scrollarea 2025-09-06 18:34:13 -07:00
jeffvli cd0a8d0fec revert min-height of library header
- causes issues with the positioning of the image at minimum size
2025-09-06 18:25:34 -07:00
jeffvli ed6376d99b update to 0.20.0 2025-09-06 17:24:12 -07:00
Hosted Weblate a6a51946f1 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (699 of 699 strings)

Co-authored-by: 無情天 <kofzhanganguo@126.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translation: feishin/Translation
2025-09-07 02:14:39 +02:00
Hosted Weblate 6e5acfa9da Translated using Weblate (Slovak)
Currently translated at 58.9% (412 of 699 strings)

Translated using Weblate (Slovak)

Currently translated at 57.0% (396 of 694 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: peter cerny <posli.to.semka@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/sk/
Translation: feishin/Translation
2025-09-07 02:14:39 +02:00
Hosted Weblate 2c7fda63d3 Translated using Weblate (French)
Currently translated at 100.0% (694 of 694 strings)

Co-authored-by: Dylan MONTIGAUD <dylanmontigaud17@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/
Translation: feishin/Translation
2025-09-07 02:14:39 +02:00
Hosted Weblate cf72016575 Translated using Weblate (Spanish)
Currently translated at 100.0% (699 of 699 strings)

Co-authored-by: Fordas <fordas15@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translation: feishin/Translation
2025-09-07 02:14:39 +02:00
jeffvli 6368137815 move inView ref to ImageContainer component
- the separate outer component is unneeded and affects the positioning of some components which rely on the ImageContainer's styling
2025-09-06 17:14:30 -07:00
jeffvli ea122f5a4f add theme stylesheet loader 2025-09-06 03:02:58 -07:00
jeffvli bb7d561d0f adjust min-height on library header to better match minimum size 2025-09-06 01:21:06 -07:00
jeffvli 6dea9196a4 fix various light theme issues 2025-09-06 01:19:16 -07:00
jeffvli 4a28e7230a add hotkey to navigate to home route (#1074) 2025-09-06 01:01:48 -07:00
jeffvli b00305cc86 add setting to prevent sleep on playback (#1072) 2025-09-06 00:56:06 -07:00
jeffvli 40fb5ba916 add show album / album artist context menu items (#1105) 2025-09-06 00:45:59 -07:00
Kendall Garner 2cf0027419 only show translation when api key and provider are picked, and fix eslint vscode 2025-09-05 19:55:58 -07:00
Kendall Garner c81bd93d04 remove unnecessary console log 2025-09-05 05:51:28 -07:00
jeffvli 229f9e984e fix position of sidebar image when using custom windowbar 2025-09-05 01:17:00 -07:00
jeffvli e1e0670350 remove unused file
- broke on electron v37 due to File.path deprecated
2025-09-05 01:00:51 -07:00
jeffvli 20debb099d remove electron file menu (#1041) 2025-09-05 00:16:49 -07:00
jeffvli 99f9cc5968 bump to electron v37 2025-09-04 21:52:17 -07:00
jeffvli 53b4a2ee8a bump to mantine v8.2.8 2025-09-04 21:42:13 -07:00
jeffvli 0b59a54f04 remove debug tools 2025-09-04 21:18:23 -07:00
jeffvli f85ce9703f add catalan language to config 2025-09-04 21:17:13 -07:00
jeffvli cf3fd53bc1 add portugese language to config 2025-09-04 21:17:13 -07:00
Kendall Garner 871923a977 Merge branch 'development' of github.com:jeffvli/feishin into development 2025-09-04 21:16:08 -07:00
Kendall Garner c21f7df7b2 fix share date setting, notification, lint fix 2025-09-04 21:15:42 -07:00
jeffvli c83f27ce14 add turkish language to config (#1087) 2025-09-04 21:14:54 -07:00
jeffvli 53499e2579 fix clickoutside on main context menu 2025-09-04 20:48:15 -07:00
jeffvli cbbf2db087 remove nested rating menu 2025-09-04 20:37:59 -07:00
Kendall Garner dd60634a40 exclude missing for more fields 2025-09-04 19:53:41 -07:00
jeffvli 54932fee86 fix context menu stuck on rating hover (#1079) 2025-09-04 19:49:25 -07:00
jeffvli 878e0007d9 fix typo 2025-09-04 19:38:17 -07:00
Jeff 2260c0c02b Merge pull request #1002 from jeffvli/react-image-lazy-loaded
Use lazy loading (react-intersection-observer) for image loading
2025-09-03 21:43:55 -07:00
Hosted Weblate dd3285544e Translated using Weblate (Norwegian Bokmål)
Currently translated at 54.8% (376 of 685 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: klodrik <klodrik@zoominn.no>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/nb_NO/
Translation: feishin/Translation
2025-09-04 03:29:47 +00:00
Hosted Weblate f3c674fb20 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (694 of 694 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: 無情天 <kofzhanganguo@126.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translation: feishin/Translation
2025-09-04 03:29:46 +00:00
Hosted Weblate 6e0ae3ba92 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (685 of 685 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: York <goog10216922@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/
Translation: feishin/Translation
2025-09-04 03:29:46 +00:00
Hosted Weblate c76cad9727 Translated using Weblate (Slovak)
Currently translated at 53.8% (374 of 694 strings)

Added translation using Weblate (Slovak)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: peter cerny <posli.to.semka@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/sk/
Translation: feishin/Translation
2025-09-04 03:29:45 +00:00
Hosted Weblate 3c29004e28 Translated using Weblate (Finnish)
Currently translated at 100.0% (685 of 685 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: jonoafi <joona@jonottaa.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fi/
Translation: feishin/Translation
2025-09-04 03:29:44 +00:00
Hosted Weblate b08050d9ff Translated using Weblate (French)
Currently translated at 100.0% (694 of 694 strings)

Translated using Weblate (French)

Currently translated at 100.0% (694 of 694 strings)

Translated using Weblate (French)

Currently translated at 100.0% (694 of 694 strings)

Translated using Weblate (French)

Currently translated at 100.0% (685 of 685 strings)

Co-authored-by: Dylan MONTIGAUD <dylanmontigaud17@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: KosmoMoustache <kosmomoustache@users.noreply.hosted.weblate.org>
Co-authored-by: mrchonks <chonkstv@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/
Translation: feishin/Translation
2025-09-04 03:29:44 +00:00
Hosted Weblate 908d5dde0f Translated using Weblate (Spanish)
Currently translated at 100.0% (694 of 694 strings)

Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translation: feishin/Translation
2025-09-04 03:29:43 +00:00
Hosted Weblate 0540b224ec Translated using Weblate (Dutch)
Currently translated at 36.3% (252 of 694 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Joren-vanGoethem <jorenvangoethem@hotmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/nl/
Translation: feishin/Translation
2025-09-04 03:29:42 +00:00
Hosted Weblate d0a2583edb Translated using Weblate (Polish)
Currently translated at 98.3% (674 of 685 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Piotr Łoboda <loboda4450@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/
Translation: feishin/Translation
2025-09-04 03:29:42 +00:00
Hosted Weblate 97ca234015 Translated using Weblate (Portuguese)
Currently translated at 61.1% (419 of 685 strings)

Added translation using Weblate (Portuguese)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: ssantos <ssantos@web.de>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pt/
Translation: feishin/Translation
2025-09-04 03:29:41 +00:00
Hosted Weblate b07395c12b Translated using Weblate (Czech)
Currently translated at 100.0% (694 of 694 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (685 of 685 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/
Translation: feishin/Translation
2025-09-04 03:29:40 +00:00
Hosted Weblate d8a10c8841 Translated using Weblate (Catalan)
Currently translated at 100.0% (694 of 694 strings)

Translated using Weblate (Catalan)

Currently translated at 100.0% (685 of 685 strings)

Translated using Weblate (Catalan)

Currently translated at 95.0% (651 of 685 strings)

Translated using Weblate (Catalan)

Currently translated at 88.7% (608 of 685 strings)

Translated using Weblate (Catalan)

Currently translated at 88.7% (608 of 685 strings)

Translated using Weblate (Catalan)

Currently translated at 49.0% (336 of 685 strings)

Translated using Weblate (Catalan)

Currently translated at 49.0% (336 of 685 strings)

Update translation files

Updated by "Remove blank strings" hook in Weblate.

Translated using Weblate (Catalan)

Currently translated at 47.4% (325 of 685 strings)

Added translation using Weblate (Catalan)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Isaac Miró <isaac.miro.garcia@gmail.com>
Co-authored-by: Ondo <SparkyOndo@proton.me>
Co-authored-by: Àlex Bravo <alexbravobosch@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ca/
Translation: feishin/Translation
2025-09-04 03:29:40 +00:00
Hosted Weblate e112d0acbf Translated using Weblate (German)
Currently translated at 87.7% (601 of 685 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Trrevvoorr <trevinofficial@hotmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/de/
Translation: feishin/Translation
2025-09-04 03:29:39 +00:00
Hosted Weblate 8ca0a207d4 Translated using Weblate (Tamil)
Currently translated at 100.0% (685 of 685 strings)

Translated using Weblate (Tamil)

Currently translated at 99.8% (684 of 685 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: தமிழ்நேரம் <anishprabu.t@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ta/
Translation: feishin/Translation
2025-09-04 03:29:38 +00:00
Hosted Weblate 4950ce1aed Translated using Weblate (Turkish)
Currently translated at 100.0% (685 of 685 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (685 of 685 strings)

Translated using Weblate (Turkish)

Currently translated at 54.8% (376 of 685 strings)

Translated using Weblate (Turkish)

Currently translated at 51.5% (353 of 685 strings)

Translated using Weblate (Turkish)

Currently translated at 31.5% (216 of 685 strings)

Added translation using Weblate (Turkish)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Mücahit Kaya <kaya-mucahit@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/tr/
Translation: feishin/Translation
2025-09-04 03:29:38 +00:00
Jeff 471d35dd70 Merge pull request #1055 from jeffvli/dependabot/npm_and_yarn/npm_and_yarn-5a0513363d
Bump tmp from 0.2.3 to 0.2.4 in the npm_and_yarn group across 1 directory
2025-09-03 20:29:31 -07:00
Kendall Garner f5af1c314c add image loader/unloader and only toggle source 2025-09-03 19:56:51 -07:00
Kendall Garner 1aac1a6361 Merge branch 'development' into react-image-lazy-loaded 2025-09-03 19:47:53 -07:00
Jeff 003e71d974 Merge pull request #1101 from ch-rit/fix-hiding-toast
fixed hiding the toast after content is loaded
2025-09-03 18:49:48 -07:00
Jeff 94b2668384 Merge pull request #1095 from johnson-dave/bad_encoding_autoplay
fix: ensure autoplay on metadata duration mismatch causing decoding error
2025-09-03 18:43:54 -07:00
ch-rit 039e553aa0 fixed hiding the toast after content is loaded 2025-09-03 19:04:36 +02:00
Jeff 755a09ceec Merge pull request #1092 from ch-rit/fix-genre-list
fixed the api call to get musicgenres
2025-09-03 01:30:53 -07:00
Jeff 60c94c2299 Merge pull request #1086 from hansyulian/feature/improve-add-to-playlist-ux
Feature: improve add to playlist UX
2025-09-03 01:25:41 -07:00
Dave Johnson 59e01f90e8 fix: ensure autoplay on bad encoding 2025-09-01 09:23:39 +01:00
Jeff 59065d24bc Merge pull request #1034 from Lyall-A/private-mode
add private mode toggle to app menu
2025-08-27 22:02:28 -07:00
Lyall 2271c211cb display private mode status 2025-08-28 05:48:21 +01:00
Jeff 7394d639e2 Merge pull request #1044 from Der-Penz/development
fix song getting added twice to queue when using tab navigation in command palette
2025-08-27 21:05:47 -07:00
Jeff 352a8e71e6 Merge pull request #1037 from vimaexd/discord-displaytype
implement discord status types
2025-08-27 21:00:52 -07:00
Christoph Ritzer 377a3ea8ab fixed the api call to get musicgenres 2025-08-26 17:14:17 +02:00
Hans Yulian 35b869ee7b feature: improve add to playlist UX 2025-08-23 06:00:17 +07:00
dependabot[bot] 618d27ffc1 Bump tmp in the npm_and_yarn group across 1 directory
Bumps the npm_and_yarn group with 1 update in the / directory: [tmp](https://github.com/raszi/node-tmp).


Updates `tmp` from 0.2.3 to 0.2.4
- [Changelog](https://github.com/raszi/node-tmp/blob/master/CHANGELOG.md)
- [Commits](https://github.com/raszi/node-tmp/compare/v0.2.3...v0.2.4)

---
updated-dependencies:
- dependency-name: tmp
  dependency-version: 0.2.4
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-06 17:36:57 +00:00
DerPenz 24b9bf210c fix song getting added twice to queue 2025-08-03 17:19:07 +02:00
mae taylor 76770de7d8 feat: discord presence display type 2025-08-01 16:43:34 +01:00
mae taylor 7ff74b8d5e bump @xhayper/discord-rpc to 1.3.0 2025-08-01 15:50:53 +01:00
Lyall 7423b71a65 change text 2025-07-31 16:26:05 +01:00
Lyall a44ad66d46 add private mode toggle to app menu 2025-07-31 16:12:03 +01:00
jeffvli 5ab0eba23e update to 0.19.0 2025-07-30 19:53:07 -07:00
jeffvli 08fc307516 attempt to catch network errors to prevent credential invalidation 2025-07-30 19:51:46 -07:00
Hosted Weblate e5adc0caa9 Translated using Weblate (Norwegian Bokmål)
Currently translated at 53.4% (365 of 683 strings)

Translated using Weblate (Norwegian Bokmål)

Currently translated at 53.4% (365 of 683 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: klodrik <klodrik@zoominn.no>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/nb_NO/
Translation: feishin/Translation
2025-07-31 04:11:35 +02:00
Hosted Weblate 7f0bdf20fc Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (685 of 685 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 100.0% (683 of 683 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: 無情天 <kofzhanganguo@126.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translation: feishin/Translation
2025-07-31 04:11:34 +02:00
Hosted Weblate deb89ef87d Translated using Weblate (French)
Currently translated at 100.0% (685 of 685 strings)

Translated using Weblate (French)

Currently translated at 100.0% (683 of 683 strings)

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/fr/
Translation: feishin/Translation
2025-07-31 04:11:34 +02:00
Hosted Weblate 9751e22db4 Translated using Weblate (Spanish)
Currently translated at 100.0% (685 of 685 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (683 of 683 strings)

Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translation: feishin/Translation
2025-07-31 04:11:33 +02:00
Hosted Weblate 6128470a47 Translated using Weblate (Czech)
Currently translated at 100.0% (685 of 685 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (683 of 683 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Fjuro <git@alius.cz>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/
Translation: feishin/Translation
2025-07-31 04:11:32 +02:00
Jeff ea79885ef5 Merge pull request #1030 from jeffvli/dependabot/npm_and_yarn/npm_and_yarn-373e2693b3
Bump @eslint/plugin-kit from 0.3.3 to 0.3.4 in the npm_and_yarn group across 1 directory
2025-07-30 21:11:24 -05:00
dependabot[bot] 84fd6e482d Bump @eslint/plugin-kit in the npm_and_yarn group across 1 directory
Bumps the npm_and_yarn group with 1 update in the / directory: [@eslint/plugin-kit](https://github.com/eslint/rewrite/tree/HEAD/packages/plugin-kit).


Updates `@eslint/plugin-kit` from 0.3.3 to 0.3.4
- [Release notes](https://github.com/eslint/rewrite/releases)
- [Changelog](https://github.com/eslint/rewrite/blob/main/packages/plugin-kit/CHANGELOG.md)
- [Commits](https://github.com/eslint/rewrite/commits/plugin-kit-v0.3.4/packages/plugin-kit)

---
updated-dependencies:
- dependency-name: "@eslint/plugin-kit"
  dependency-version: 0.3.4
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-30 02:24:51 +00:00
Jeff 904f05ff61 Merge pull request #1021 from jeffvli/dependabot/npm_and_yarn/npm_and_yarn-e04d5d616f
Bump form-data from 4.0.2 to 4.0.4 in the npm_and_yarn group across 1 directory
2025-07-29 21:23:23 -05:00
Jeff e78ec7688a Merge pull request #1024 from Der-Penz/development
Support tab navigation on ActionIcons in command palette
2025-07-29 21:22:47 -05:00
jeffvli f43de7f23c remove version from linux artifactName (#1020) 2025-07-29 19:18:27 -07:00
Jeff 07532ca55a Merge pull request #1018 from Lyall-A/fix-discord-disappearing
fix discord status clearing when song loops
2025-07-29 21:15:37 -05:00
Jeff 040a805f5f Merge pull request #1023 from chenqimiao/development
Add qm-music to an OpenSubsonic compatible server list
2025-07-29 21:04:39 -05:00
DerPenz 33af5e625b support tab navigation on ActionIcons in command palette 2025-07-26 14:01:05 +02:00
Qimiao Chen bdedcb883d introduce qm-music in readme 2025-07-25 18:22:34 +08:00
dependabot[bot] e842a75722 Bump form-data in the npm_and_yarn group across 1 directory
Bumps the npm_and_yarn group with 1 update in the / directory: [form-data](https://github.com/form-data/form-data).


Updates `form-data` from 4.0.2 to 4.0.4
- [Release notes](https://github.com/form-data/form-data/releases)
- [Changelog](https://github.com/form-data/form-data/blob/master/CHANGELOG.md)
- [Commits](https://github.com/form-data/form-data/compare/v4.0.2...v4.0.4)

---
updated-dependencies:
- dependency-name: form-data
  dependency-version: 4.0.4
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-25 03:38:33 +00:00
dependabot[bot] d28054cc7f Bump @eslint/plugin-kit in the npm_and_yarn group across 1 directory (#1014)
Bumps the npm_and_yarn group with 1 update in the / directory: [@eslint/plugin-kit](https://github.com/eslint/rewrite/tree/HEAD/packages/plugin-kit).


Updates `@eslint/plugin-kit` from 0.3.1 to 0.3.3
- [Release notes](https://github.com/eslint/rewrite/releases)
- [Changelog](https://github.com/eslint/rewrite/blob/main/packages/plugin-kit/CHANGELOG.md)
- [Commits](https://github.com/eslint/rewrite/commits/plugin-kit-v0.3.3/packages/plugin-kit)

---
updated-dependencies:
- dependency-name: "@eslint/plugin-kit"
  dependency-version: 0.3.3
  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>
2025-07-25 03:37:07 +00:00
Lyall 41f8c34f6e fix discord status clearing when song loops 2025-07-22 10:23:02 +01:00
Kendall Garner 4b4df28641 add bit depth, sample rate 2025-07-13 07:12:13 -07:00
jeffvli 8b141d652c disable single attribute per line 2025-07-12 11:17:54 -07:00
Kendall Garner 92ed8e20c9 fix custom path 2025-07-12 07:21:34 -07:00
Kendall Garner 746ab8c2d9 large notification z-index 2025-07-11 19:21:52 -07:00
Kendall Garner 69341f4492 More typechecks on scrobble, use timeout on notification (#1004) 2025-07-10 13:53:40 +00:00
Kendall Garner 56130d8503 fix subsonic login error: use status instead 2025-07-08 16:42:30 -07:00
Kendall Garner 4407c8d424 convert query="" to query= for subsonic 2025-07-08 14:42:49 -07:00
Kendall Garner 58bb8e716e undo that change, remove magic numbers 2025-07-08 11:26:07 -07:00
Kendall Garner 0becfd4b59 subsonic limit to 500 2025-07-08 08:30:31 -07:00
jeffvli c94029012f update to v0.18.0 2025-07-08 00:48:01 -07:00
jeffvli 2d9176cd21 fix click propagation on right controls 2025-07-08 00:46:50 -07:00
jeffvli e28dad3f84 add code to language select label 2025-07-08 00:11:37 -07:00
jeffvli 60d3eec8f7 add sl to i18n config 2025-07-08 00:11:20 -07:00
Hosted Weblate 62f9d064d9 Translated using Weblate (Slovenian)
Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 74.8% (509 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 9.1% (62 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 9.1% (62 of 680 strings)

Translated using Weblate (Slovenian)

Currently translated at 9.1% (62 of 680 strings)

Added translation using Weblate (Slovenian)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Martin Stojanoski <martin.stojanoski2000@gmail.com>
Co-authored-by: mytja <mamnju21@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/sl/
Translation: feishin/Translation
2025-07-08 08:39:51 +02:00
Hosted Weblate 196b9be65b Translated using Weblate (French)
Currently translated at 100.0% (680 of 680 strings)

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/fr/
Translation: feishin/Translation
2025-07-08 08:39:50 +02:00
Hosted Weblate 587ce68018 Translated using Weblate (Italian)
Currently translated at 100.0% (680 of 680 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (680 of 680 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (680 of 680 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (680 of 680 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (680 of 680 strings)

Co-authored-by: Daivy <reale805@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/it/
Translation: feishin/Translation
2025-07-08 08:39:49 +02:00
Hosted Weblate 1ec6176b77 Translated using Weblate (Portuguese (Brazil))
Currently translated at 61.6% (419 of 680 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Renan <renan1211@hotmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pt_BR/
Translation: feishin/Translation
2025-07-08 08:39:49 +02:00
jeffvli a5f28e49eb fix click propagation on PlayButton 2025-07-07 23:20:10 -07:00
Gemini Wen 0b7d4bfb6a macOS: change window close behavior, like other macOS App (#999) 2025-07-07 23:00:21 -07:00
jeffvli 2492456b93 fix search on filtered list pages 2025-07-07 21:28:34 -07:00
jeffvli 1c22c9506e remove stale lock comments 2025-07-07 21:14:18 -07:00
Kendall Garner 49bb42a298 Use lazy loading (react-intersection-observer) for image loading 2025-07-07 20:11:32 -07:00
Kendall Garner e00aeb2b67 enable notify, simplify use-scrobble with types, remove unused check 2025-07-07 19:25:25 -07:00
Kendall Garner b219c900ca fix readme logo rendering 2025-07-06 21:37:00 -07:00
Kendall Garner 5eacb4e3cb ...lodash random uses inclusive on both ends 2025-07-06 21:26:30 -07:00
Kendall Garner a86d44a29e fix(queue): random start index when play shuffled center control is enabled, play mode is now, no start specified 2025-07-06 21:24:45 -07:00
Jeff b7a0b7f997 handle undefined options in GenericCell (#998) 2025-07-06 03:33:11 -07:00
Lyall cd2d531c54 Automatically reconnect to Discord RPC at interval (#996)
* initialize before setActivity
2025-07-06 00:34:26 -07:00
ENDzZ 19c8980784 Translation Display Normalization (#982) 2025-07-05 16:41:42 -07:00
Lyall a2e5f86eac fix navidrome filter labels (#995) 2025-07-05 16:31:35 -07:00
dependabot[bot] d8c93cadce Bump brace-expansion in the npm_and_yarn group across 1 directory (#955)
Bumps the npm_and_yarn group with 1 update in the / directory: [brace-expansion](https://github.com/juliangruber/brace-expansion).


Updates `brace-expansion` from 1.1.11 to 1.1.12
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](https://github.com/juliangruber/brace-expansion/compare/1.1.11...v1.1.12)

---
updated-dependencies:
- dependency-name: brace-expansion
  dependency-version: 1.1.12
  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>
2025-07-05 00:47:48 -07:00
Kendall Garner 35f87c8552 Fix ContextMenu star menu clicking (#987)
Resolves #985.
Currently, attempting to click on one of the `set rating` buttons is a no-op.
This is because it is considered "outside" the `ContextMenu`, which immediately closes it.
Pass in the same merged ref into the body of the `DropDown` component so that it is also treated as "inside".
2025-07-05 00:33:37 -07:00
Kendall Garner 4f7b0983ec port over ND stalebot (#991) 2025-07-02 21:55:02 -07:00
Kendall Garner 055d9ac5c1 use initial index for shuffling when availabe 2025-07-02 20:48:45 -07:00
Kendall Garner 039d008223 use fr plural setting translation from navidrome 2025-07-02 20:10:49 -07:00
Kendall Garner 2b8db9cfc1 fix table albumCount translation 2025-07-02 19:52:13 -07:00
Kendall Garner caa9448200 don't set sink on closed context 2025-07-02 19:19:51 -07:00
Kendall Garner 176a95a946 Compilation support for Jellyfin artist albums, misc other album filter fixes
- Jellyfin will use `ContributingArtistsId` (compilation), `AlbumArtistIds` (compilation is false), or `ArtistIds` (unspecified; all)
- Jellyfin can filter by compilation _only_ on the artist discography page
- Navidrome album filter fix for `defaultValue` display and prevent showing `tagQuery` 0 when querying
- Subsonic can filter by one or more artists in the album page. Sort is also applied on these items
- Bump genre/tag cache/stale time to 2/1 minutes
- Fix various cases where the album filter would display as active when it wasn't
2025-07-02 07:44:57 -07:00
Kendall Garner 6f5dd4881a join path with library path 2025-07-01 21:51:09 -07:00
Kendall Garner ce6aaa709f bugfix: handle table update when column is missing 2025-07-01 19:03:54 -07:00
Kendall Garner 217a4d65fd Merge branch 'development' of github.com:jeffvli/feishin into development 2025-07-01 17:34:32 -07:00
Kendall Garner b88671161a actually actually fix album list count for subsonic artists 2025-06-30 07:19:34 -07:00
jeffvli dde48335cd fix word-break overflow for CJK characters on lyrics 2025-06-30 00:47:13 -07:00
jeffvli 8611f08f54 right-align is-updated dialog buttons 2025-06-30 00:43:59 -07:00
Kendall Garner cd18e683bf yesnofilter null when not provided 2025-06-29 22:34:39 -07:00
Kendall Garner 286441c1b1 Merge branch 'development' of github.com:jeffvli/feishin into development 2025-06-29 22:30:36 -07:00
Kendall Garner 5456c2c2b8 Improve Jellyfin/Navidrome Album/Song filter, Navidrome artist recent release
- Use `compilation=false` for Navidrome recent releases with artist credit
- Add `YesNoSelect` (yes, no, undefined) for `favorite` for Navidrome/Jellyfin `album`/`track`, and Navidrome `compilation`
- Fix folderButton translation
2025-06-29 22:14:06 -07:00
jeffvli 5cd4fc227e update to v0.17.0 2025-06-29 21:36:36 -07:00
Hosted Weblate 737d672918 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (680 of 680 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 100.0% (680 of 680 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 100.0% (676 of 676 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: 無情天 <kofzhanganguo@126.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translation: feishin/Translation
2025-06-30 05:35:41 +02:00
Hosted Weblate a6ac4c8f67 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 76.9% (523 of 680 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/
Translation: feishin/Translation
2025-06-30 05:35:41 +02:00
Hosted Weblate c9217827ab Translated using Weblate (Serbian)
Currently translated at 75.8% (516 of 680 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/sr/
Translation: feishin/Translation
2025-06-30 05:35:40 +02:00
Hosted Weblate 0ff8fad071 Translated using Weblate (Finnish)
Currently translated at 100.0% (680 of 680 strings)

Translated using Weblate (Finnish)

Currently translated at 100.0% (680 of 680 strings)

Translated using Weblate (Finnish)

Currently translated at 100.0% (680 of 680 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.com>
Co-authored-by: jonoafi <joona@jonottaa.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fi/
Translation: feishin/Translation
2025-06-30 05:35:39 +02:00
Hosted Weblate f3cb15eae2 Translated using Weblate (French)
Currently translated at 100.0% (680 of 680 strings)

Translated using Weblate (French)

Currently translated at 100.0% (680 of 680 strings)

Translated using Weblate (French)

Currently translated at 100.0% (676 of 676 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.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/fr/
Translation: feishin/Translation
2025-06-30 05:35:39 +02:00
Hosted Weblate 5b34b287e2 Translated using Weblate (Spanish)
Currently translated at 100.0% (680 of 680 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (680 of 680 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (676 of 676 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.com>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translation: feishin/Translation
2025-06-30 05:35:38 +02:00
Hosted Weblate dc461a253f Translated using Weblate (Indonesian)
Currently translated at 96.6% (657 of 680 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/id/
Translation: feishin/Translation
2025-06-30 05:35:37 +02:00
Hosted Weblate 958416af4c Translated using Weblate (Italian)
Currently translated at 75.7% (515 of 680 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/it/
Translation: feishin/Translation
2025-06-30 05:35:37 +02:00
Hosted Weblate 1dd8eec4a5 Translated using Weblate (Polish)
Currently translated at 96.6% (657 of 680 strings)

Translated using Weblate (Polish)

Currently translated at 96.6% (657 of 680 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/
Translation: feishin/Translation
2025-06-30 05:35:36 +02:00
Hosted Weblate b263db5483 Translated using Weblate (Hungarian)
Currently translated at 30.5% (208 of 680 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/hu/
Translation: feishin/Translation
2025-06-30 05:35:35 +02:00
Hosted Weblate 528f60c5f3 Translated using Weblate (Czech)
Currently translated at 100.0% (680 of 680 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (680 of 680 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (676 of 676 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.com>
Co-authored-by: Fjuro <git@alius.cz>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/
Translation: feishin/Translation
2025-06-30 05:35:35 +02:00
Hosted Weblate 007b0166ab Translated using Weblate (Japanese)
Currently translated at 75.7% (515 of 680 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ja/
Translation: feishin/Translation
2025-06-30 05:35:34 +02:00
Hosted Weblate d3fb2374ff Translated using Weblate (Russian)
Currently translated at 92.5% (629 of 680 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ru/
Translation: feishin/Translation
2025-06-30 05:35:34 +02:00
Hosted Weblate 676c091d28 Translated using Weblate (English)
Currently translated at 100.0% (680 of 680 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/en/
Translation: feishin/Translation
2025-06-30 05:35:33 +02:00
Hosted Weblate 58b7572a8b Translated using Weblate (German)
Currently translated at 86.0% (585 of 680 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/de/
Translation: feishin/Translation
2025-06-30 05:35:32 +02:00
Hosted Weblate fc77c32a0e Translated using Weblate (Tamil)
Currently translated at 96.6% (657 of 680 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ta/
Translation: feishin/Translation
2025-06-30 05:35:32 +02:00
Kendall Garner b5bdea1845 actually fix subsonic album count 2025-06-29 20:35:06 -07:00
jeffvli 8eb591bd08 properly handle overflow on sidebar items (#971) 2025-06-29 18:56:46 -07:00
jeffvli 88be98f703 cleanup unneeded div wrapper on lyric lines 2025-06-29 18:31:43 -07:00
jeffvli df6b6d514d update netease translation lyric line handling (#979)
- lyric should be appended to the original lyric line with a custom splitter
- the custom splitter is now handled in LyricLine
2025-06-29 18:29:59 -07:00
Lyall b6d902e425 fix: discord presence not clearing after pausing player (#973)
* add show rich presence when paused option
2025-06-28 13:46:12 -07:00
jeffvli d922d8b034 fix sidebar height when using custom window bar 2025-06-28 13:42:33 -07:00
jeffvli f4db8fdb84 fix background color of collapsed sidebar 2025-06-28 13:34:16 -07:00
Lyall 81ca6937bc add preserve pitch option (#972) 2025-06-28 13:18:08 -07:00
Kendall Garner c382e01f64 fix regex in proxy 2025-06-28 07:29:42 -07:00
Kendall Garner fb80b66310 update remote regex 2025-06-28 06:48:04 -07:00
Kendall Garner 63e3b97bca log -> error, remove unnecesary logs 2025-06-26 21:17:59 -07:00
Kendall Garner fb584b35a9 handle Navidrome login loop error 2025-06-26 21:14:20 -07:00
jeffvli bdc372636b update issue templates 2025-06-26 09:52:11 -07:00
jeffvli 2c5671cf38 update to v0.16.0 2025-06-26 01:39:47 -07:00
Hosted Weblate bd12fbecac Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (674 of 674 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: 無情天 <kofzhanganguo@126.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translation: feishin/Translation
2025-06-26 10:37:11 +02:00
Hosted Weblate c1d88ada91 Translated using Weblate (Finnish)
Currently translated at 100.0% (676 of 676 strings)

Co-authored-by: jonoafi <joona@jonottaa.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fi/
Translation: feishin/Translation
2025-06-26 10:37:11 +02:00
Hosted Weblate d6a3e1d90b Translated using Weblate (French)
Currently translated at 100.0% (674 of 674 strings)

Translated using Weblate (French)

Currently translated at 99.2% (669 of 674 strings)

Translated using Weblate (French)

Currently translated at 99.2% (669 of 674 strings)

Co-authored-by: Dylan MONTIGAUD <dylanmontigaud17@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/fr/
Translation: feishin/Translation
2025-06-26 10:37:11 +02:00
Hosted Weblate 789c7f3d81 Translated using Weblate (Spanish)
Currently translated at 100.0% (674 of 674 strings)

Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translation: feishin/Translation
2025-06-26 10:37:11 +02:00
Hosted Weblate f3c785d0fa Translated using Weblate (German)
Currently translated at 86.7% (585 of 674 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Slincess <kisacikdevran0@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/de/
Translation: feishin/Translation
2025-06-26 10:37:10 +02:00
jeffvli 062c1c2b61 decrease brightness of header overlay on dark 2025-06-26 01:36:54 -07:00
jeffvli eb078d62cd more adjustments to styles on the fullscreen player 2025-06-26 01:36:42 -07:00
jeffvli c429ac9223 move fonts to assets folder 2025-06-26 01:36:16 -07:00
jeffvli bd26967ff2 fix word breaks on lyrics (#969) 2025-06-26 01:11:46 -07:00
jeffvli 620b810191 add option to set local lyric priority 2025-06-25 21:25:29 -07:00
jeffvli 64866c59bd adjust styles on fullscreen player image section
- fix image transition
- fix image aspect ratio
- adjust text sizes and shadow
2025-06-25 20:40:45 -07:00
jeffvli 0afbe4c0a2 improve visibility of fullscreen player buttons 2025-06-25 19:53:49 -07:00
jeffvli 6782cd0dcc re-add presence animation when collapsing sidebar image 2025-06-25 19:48:59 -07:00
jeffvli 8f585a5be9 adjust styles to better support light theme 2025-06-25 19:44:28 -07:00
jeffvli ac0c396712 fix sidebar image height when using Windows or macOS window bar 2025-06-25 09:02:22 -07:00
Kendall Garner b989a66991 only show owned playlists on playlist sidebar 2025-06-25 08:19:22 -07:00
Kendall Garner 2814b623e7 fix player button light theme and tooltip 2025-06-25 08:05:57 -07:00
jeffvli 7d29a692ef remove unused import 2025-06-24 22:34:06 -07:00
jeffvli 3f9eb446f7 update to v0.15.1 2025-06-24 22:27:12 -07:00
jeffvli d8f7b49ab6 increase size of play button icon 2025-06-24 22:22:15 -07:00
jeffvli 35e70a3eff fix synchronized lyric styles not applying 2025-06-24 22:20:26 -07:00
jeffvli ef9c16e940 attempt fix on docker build 2025-06-24 22:16:16 -07:00
Kendall Garner 0b39c35132 make item modal links have heavier font width 2025-06-24 21:39:47 -07:00
Kendall Garner 9f5b4e5410 remove unused length in visualizer 2025-06-24 21:20:41 -07:00
jeffvli dbf840b185 fix actionbar not growing to width of container 2025-06-24 20:33:50 -07:00
jeffvli e0f0524eb9 adjust button styles on playerbar 2025-06-24 20:31:33 -07:00
jeffvli 8598313d12 fix styling on web titlebar style 2025-06-24 20:14:15 -07:00
jeffvli c84dd648ea various clean up and fixes 2025-06-24 18:43:37 -07:00
jeffvli 01885c1a9b decrease spacing on playerbar details 2025-06-24 18:38:10 -07:00
jeffvli 5121f57171 use native img for sidebar image 2025-06-24 18:38:10 -07:00
jeffvli 3d7ee10328 add standalone fast-average-color function 2025-06-24 18:38:10 -07:00
jeffvli 4db47b4d37 switch image loading to lazy by default 2025-06-24 18:38:10 -07:00
jeffvli 786a693526 add animation presets 2025-06-24 18:38:10 -07:00
jeffvli 1faef6a1a7 fix unused var on visualizer 2025-06-24 18:38:10 -07:00
jeffvli 1598642389 re-add page fade in 2025-06-24 18:38:10 -07:00
Kendall Garner 8c4a7f4f91 only show lastfm/listenbrainz if configured 2025-06-24 17:58:43 -07:00
jeffvli 5878f89339 set sidebar items open by default 2025-06-24 15:04:22 -07:00
jeffvli 4acbb1820d set fullscreen player badges to transparent 2025-06-24 14:52:40 -07:00
jeffvli 01f5745629 update visualizer sizing and z-index 2025-06-24 14:52:27 -07:00
jeffvli 73dd781a88 fix regression on image blur in fullscreen player 2025-06-24 14:47:50 -07:00
jeffvli d777be6251 increase minRows on custom css input 2025-06-24 14:42:16 -07:00
jeffvli 6689e84f67 fix and update remote design 2025-06-24 14:36:14 -07:00
jeffvli ad533a1d9c update to v0.15.0 2025-06-24 00:07:51 -07:00
Hosted Weblate b691891e62 Translated using Weblate (Finnish)
Currently translated at 100.0% (668 of 668 strings)

Co-authored-by: jonoafi <joona@jonottaa.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fi/
Translation: feishin/Translation
2025-06-24 09:06:37 +02:00
Hosted Weblate 53fa265af9 Translated using Weblate (Spanish)
Currently translated at 100.0% (668 of 668 strings)

Co-authored-by: Fordas <fordas15@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translation: feishin/Translation
2025-06-24 09:06:36 +02:00
Hosted Weblate 55f6a382d4 Translated using Weblate (Czech)
Currently translated at 100.0% (668 of 668 strings)

Co-authored-by: Fjuro <git@alius.cz>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/
Translation: feishin/Translation
2025-06-24 09:06:36 +02:00
Hosted Weblate 9c30acdd56 Translated using Weblate (Portuguese (Brazil))
Currently translated at 62.1% (414 of 666 strings)

Co-authored-by: Brunno Hofmann <brunno.hofmann@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pt_BR/
Translation: feishin/Translation
2025-06-24 09:06:35 +02:00
jeffvli b29d3e7f78 disable netease translation by default 2025-06-24 00:06:19 -07:00
Jeff c1330d92b2 Migrate to Mantine v8 and Design Changes (#961)
* mantine v8 migration

* various design changes and improvements
2025-06-24 00:04:36 -07:00
Benjamin bea55d48a8 discord rpc changes (#958) 2025-06-21 12:38:06 -07:00
et21ff ae41fe99bb lyrics: add translation lyrics for netease.ts (#951)
* lyrics: add translation lyrics for netease.ts
2025-06-21 12:19:23 -07:00
Pyx e3751229b6 update readme because subsonic is supported now (#960)
* Update README.md
2025-06-20 18:53:44 -07:00
Kendall Garner 87c9963354 fix subsonic album artist and album list count 2025-06-20 18:35:11 -07:00
Kendall Garner b7fb7c7f94 improve library header loading 2025-06-20 17:57:15 -07:00
Hosted Weblate b8ceb174b3 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (666 of 666 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: 無情天 <kofzhanganguo@126.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translation: feishin/Translation
2025-06-11 02:38:13 +02:00
Hosted Weblate 48f085b0ac Translated using Weblate (Finnish)
Currently translated at 100.0% (666 of 666 strings)

Co-authored-by: jonoafi <joona@jonottaa.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fi/
Translation: feishin/Translation
2025-06-11 02:38:13 +02:00
Hosted Weblate dfc0639f95 Translated using Weblate (French)
Currently translated at 100.0% (666 of 666 strings)

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/fr/
Translation: feishin/Translation
2025-06-11 02:38:13 +02:00
Hosted Weblate 80ffd1a925 Translated using Weblate (Spanish)
Currently translated at 100.0% (666 of 666 strings)

Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translation: feishin/Translation
2025-06-11 02:38:13 +02:00
Hosted Weblate c87bb65023 Translated using Weblate (Czech)
Currently translated at 100.0% (666 of 666 strings)

Co-authored-by: Fjuro <git@alius.cz>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/
Translation: feishin/Translation
2025-06-11 02:38:13 +02:00
jeffvli 5ae21bd224 fix icon alignment for context menu items 2025-06-10 17:37:43 -07:00
jeffvli 12d293a74c remove trailing space 2025-06-10 17:34:00 -07:00
et21ff 62f4bb0d7b fix(player): Improve MPV stability and seek performance (#953) 2025-06-10 17:22:40 -07:00
Pyx 9f11061433 disable visualizer background (#949)
* disable visualizer background
2025-06-09 18:14:59 -07:00
Hans Yulian aba64b10d0 Feature: Shuffle Button (#941) 2025-06-09 02:02:03 -07:00
jeffvli c20e30e387 include sourcemap in vite build 2025-06-09 01:28:27 -07:00
jeffvli c4b4300845 fix lyrics offset type conversion (#948) 2025-06-09 01:28:27 -07:00
Kendall Garner f1e5ed41bc also gate by external link 2025-06-07 20:54:23 -07:00
Kendall Garner 9b79502022 config option for listenbrainz/lastfm links 2025-06-07 20:36:41 -07:00
jeffvli 636c227a83 replace and fix position of current track play icon 2025-06-03 01:05:19 -07:00
jeffvli e8a94a0b1c bump to node 23 image 2025-06-02 21:39:12 -07:00
jeffvli fa93dfd771 add pnpm install to alpine image 2025-06-02 21:37:27 -07:00
jeffvli 8629994eb6 fix docker build issues
- pnpm-lock instead of package-lock
- fix build out directory
2025-06-02 21:32:00 -07:00
jeffvli c54423a667 fix wrong lockfile copy 2025-06-02 21:30:57 -07:00
jeffvli d28fc9f630 allow workflow_dispath on docker deploy 2025-06-02 21:23:07 -07:00
jeffvli bd2b39fdfb re-add ng.conf.template file 2025-06-02 21:20:57 -07:00
589 changed files with 23527 additions and 15198 deletions
@@ -0,0 +1,33 @@
name: Feature request
description: Request a feature to be added to Feishin
title: '[Feature]: '
labels: ['enhancement']
body:
- type: checkboxes
id: check-duplicate
attributes:
label: I have already checked through the existing feature requests and found no duplicates
options:
- label: 'Yes'
required: true
- type: dropdown
id: server-specific
attributes:
label: Is this a server-specific feature?
options:
- Not server-specific
- OpenSubsonic
- Jellyfin
- Navidrome
default: 0
validations:
required: true
- type: textarea
id: solution
attributes:
label: What do you want to be added?
placeholder: I would like to see [...]
validations:
required: true
+74
View File
@@ -0,0 +1,74 @@
name: Bug report
description: You're having technical issues.
title: '[Bug]: '
labels: ['bug']
body:
- type: checkboxes
id: check-duplicate
attributes:
label: I have already checked through the existing bug reports and found no duplicates
options:
- label: 'Yes'
required: true
- type: input
id: version
attributes:
label: App Version
description: What version of the app are you running?
placeholder: ex. 1.0.0
validations:
required: true
- type: input
id: server-version
attributes:
label: Music Server and Version
description: What music server are you using?
placeholder: ex. Navidrome v0.55.0, LMS v3.67.0, Jellyfin v10.10.7, etc.
validations:
required: true
- type: dropdown
id: environments
attributes:
label: What local environments are you seeing the problem on?
multiple: true
options:
- Desktop Windows
- Desktop macOS
- Desktop Linux
- Web Firefox
- Web Chrome
- Web Safari
- Web Microsoft Edge
- Other (please specify in the next field)
- type: textarea
id: what-happened
attributes:
label: What happened?
description: Also tell us, what did you expect to happen?
placeholder: Include screenshots and error logs if possible. The browser devtools can be opened using CTRL + SHIFT + I (Windows/Linux) or CMD + SHIFT + I (macOS).
validations:
required: true
- type: textarea
id: reproduction
attributes:
label: Steps to reproduce
description: How can we reproduce this issue? Are there any specific settings that are enabled that could be the cause?
placeholder: |
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
validations:
required: true
- type: textarea
id: logs
attributes:
label: Relevant log output
description: Please copy and paste any relevant log output. This will be automatically formatted into code.
render: shell
-63
View File
@@ -1,63 +0,0 @@
name: Bug report
description: You're having technical issues. 🐞
labels: ['bug']
body:
- type: textarea
attributes:
label: Expected Behavior
description: What should have happened?
validations:
required: true
- type: textarea
attributes:
label: Current Behavior
description: What went wrong? Add screenshots to help explain your problem. (Open the browser dev tools in the menu or using CTRL + SHIFT + I)
validations:
required: true
- type: textarea
attributes:
label: Steps to Reproduce
placeholder: |
<!-- Add relevant code and/or a live example -->
<!-- Add stack traces -->
1.
2.
3.
4.
validations:
required: true
- type: textarea
attributes:
label: Possible Solution
description: Suggest a reason for the bug or how to fix it.
validations:
required: false
- type: textarea
attributes:
label: Context
description: How has this issue affected you? What are you trying to accomplish?
validations:
required: false
- type: input
attributes:
label: Application version
placeholder: (e.g. v0.1.0)
validations:
required: true
- type: input
attributes:
label: Operating System and version
placeholder: (e.g. Windows 11 desktop, Webapp in Firefox)
validations:
required: true
- type: input
attributes:
label: Server and Version
placeholder: (e.g. Navidrome v0.48.0)
validations:
required: true
- type: input
attributes:
label: Node Version (if developing locally)
validations:
required: false
+9 -3
View File
@@ -1,5 +1,11 @@
blank_issues_enabled: true
blank_issues_enabled: false
contact_links:
- name: Question
- name: Questions or help
url: https://github.com/jeffvli/feishin/discussions
about: Please ask and answer questions here.
about: Ask questions or get help in the discussions section
- name: Discord Community
url: https://discord.gg/FVKpcMDy5f
about: The discord/matrix servers are bridged so you can join whichever you prefer
- name: Matrix Community
url: https://matrix.to/#/#sonixd:matrix.org
about: The discord/matrix servers are bridged so you can join whichever you prefer
@@ -1,20 +0,0 @@
name: Feature request - NOT ACCEPTING NEW FEATURE REQUESTS
description: Feature requests are currently closed. The application is actively being rewritten https://github.com/audioling/audioling.
labels: ['enhancement']
body:
- type: textarea
attributes:
label: What do you want to be added?
validations:
required: true
- type: textarea
attributes:
label: Additional context
validations:
required: false
- type: checkboxes
attributes:
label: Is this a server-specific feature? (e.g. Jellyfin only)
options:
- label: 'Yes'
required: false
+233
View File
@@ -0,0 +1,233 @@
name: Publish Beta (Manual)
on:
workflow_dispatch:
inputs:
version:
description: 'Semantic version number (e.g., 1.0.0) - beta suffix will be added automatically'
required: false
type: string
jobs:
prepare:
runs-on: ubuntu-latest
outputs:
version: ${{ steps.version.outputs.version }}
steps:
- name: Checkout git repo
uses: actions/checkout@v1
- name: Install Node and PNPM
uses: pnpm/action-setup@v4.1.0
with:
version: 9
- name: Install dependencies
run: pnpm install
- name: Validate and set version with beta suffix
id: version
shell: pwsh
run: |
$inputVersion = "${{ github.event.inputs.version }}"
Write-Host "Input version: $inputVersion"
if ($inputVersion -eq "" -or $inputVersion -eq "null") {
# No input version provided, auto-increment patch version
Write-Host "No version provided, auto-incrementing patch version..."
# Get current version from package.json
$currentVersion = (Get-Content package.json | ConvertFrom-Json).version
Write-Host "Current version: $currentVersion"
# Remove any existing suffix (like -beta) to get clean semantic version
$cleanVersion = $currentVersion -replace '-.*$', ''
# Extract major, minor, patch components
$versionParts = $cleanVersion.Split('.')
if ($versionParts.Length -ne 3) {
Write-Error "Current version format is invalid: $cleanVersion"
exit 1
}
$major = [int]$versionParts[0]
$minor = [int]$versionParts[1]
$patch = [int]$versionParts[2]
# Increment patch version
$newPatch = $patch + 1
$inputVersion = "$major.$minor.$newPatch"
Write-Host "Auto-generated version: $inputVersion"
} else {
# Validate semantic version format (major.minor.patch)
$versionPattern = '^\d+\.\d+\.\d+$'
if ($inputVersion -notmatch $versionPattern) {
Write-Error "Invalid version format. Expected semantic version (e.g., 1.0.0), got: $inputVersion"
exit 1
}
}
# Add beta suffix
$versionWithBeta = "$inputVersion-beta"
Write-Host "Setting version to: $versionWithBeta"
# Update package.json
$packageJson = Get-Content package.json | ConvertFrom-Json
$packageJson.version = $versionWithBeta
$packageJson | ConvertTo-Json -Depth 10 | Set-Content package.json
Write-Host "Updated package.json version to: $versionWithBeta"
# Set output for other jobs
echo "version=$versionWithBeta" >> $env:GITHUB_OUTPUT
- name: Delete existing releases and tags
shell: pwsh
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
# Get the version that was set in the previous step
$versionWithBeta = "${{ steps.version.outputs.version }}"
Write-Host "Checking for existing releases with tag: $versionWithBeta"
# Find and delete any releases with isPrerelease "true"
Write-Host "Deleting existing prereleases..."
Write-Host "Searching for releases with isPrerelease 'true'..."
$betaReleases = gh release list --limit 100 --json tagName,isPrerelease,name | ConvertFrom-Json | Where-Object { $_.isPrerelease -eq $true }
if ($betaReleases) {
Write-Host "Found $($betaReleases.Count) release(s) with isPrerelease 'true':"
foreach ($release in $betaReleases) {
Write-Host " - Tag: $($release.tagName), Title: $($release.name)"
gh release delete $release.tagName --yes --cleanup-tag
Write-Host " Deleted release with tag: $($release.tagName)"
}
} else {
Write-Host "No releases found with isPrerelease 'true'"
}
publish:
needs: prepare
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [windows-latest, macos-latest, ubuntu-latest]
steps:
- name: Checkout git repo
uses: actions/checkout@v1
- name: Install Node and PNPM
uses: pnpm/action-setup@v4.1.0
with:
version: 9
- name: Install dependencies
run: pnpm install
- name: Set version from prepare job
shell: pwsh
run: |
$versionWithBeta = "${{ needs.prepare.outputs.version }}"
Write-Host "Setting version from prepare job: $versionWithBeta"
# Update package.json with the version from prepare job
$packageJson = Get-Content package.json | ConvertFrom-Json
$packageJson.version = $versionWithBeta
$packageJson | ConvertTo-Json -Depth 10 | Set-Content package.json
Write-Host "Updated package.json version to: $versionWithBeta"
- name: Build and Publish releases (Windows)
if: matrix.os == 'windows-latest'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
EP_PRE_RELEASE: true
uses: nick-invision/retry@v2.8.2
with:
timeout_minutes: 30
max_attempts: 3
retry_on: error
command: |
pnpm run package:win
pnpm run publish:win
on_retry_command: pnpm cache delete
- name: Build and Publish releases (macOS)
if: matrix.os == 'macos-latest'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
EP_PRE_RELEASE: true
uses: nick-invision/retry@v2.8.2
with:
timeout_minutes: 30
max_attempts: 3
retry_on: error
command: |
pnpm run package:mac
pnpm run publish:mac
on_retry_command: pnpm cache delete
- name: Build and Publish releases (Linux)
if: matrix.os == 'ubuntu-latest'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
EP_PRE_RELEASE: true
uses: nick-invision/retry@v2.8.2
with:
timeout_minutes: 30
max_attempts: 3
retry_on: error
command: |
pnpm run package:linux
pnpm run publish:linux
on_retry_command: pnpm cache delete
- name: Build and Publish releases (Linux ARM64)
if: matrix.os == 'ubuntu-latest'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
EP_PRE_RELEASE: true
uses: nick-invision/retry@v2.8.2
with:
timeout_minutes: 30
max_attempts: 3
retry_on: error
command: |
pnpm run package:linux-arm64
pnpm run publish:linux-arm64
on_retry_command: pnpm cache delete
rename-release:
needs: [prepare, publish]
runs-on: ubuntu-latest
steps:
- name: Checkout git repo
uses: actions/checkout@v1
- name: Rename release title to Beta
shell: pwsh
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
# Get the version from the prepare job
$versionWithBeta = "${{ needs.prepare.outputs.version }}"
$tagVersion = "v" + $versionWithBeta
Write-Host "Renaming release title for tag: $tagVersion"
# Check if release exists
$releaseExists = gh release view $tagVersion 2>$null
if ($LASTEXITCODE -eq 0) {
Write-Host "Found release with tag $tagVersion, renaming title to 'Beta'..."
# Get current release notes
$releaseNotes = gh release view $tagVersion --json body --jq '.body'
# Update the release with new title
gh release edit $tagVersion --title "Beta" --notes "$releaseNotes"
Write-Host "Successfully renamed release title to 'Beta'"
} else {
Write-Host "No release found with tag $tagVersion"
}
+4 -3
View File
@@ -3,6 +3,7 @@ name: Publish Docker to GHCR
permissions: write-all
on:
workflow_dispatch:
push:
tags:
- 'v*.*.*'
@@ -49,6 +50,6 @@ jobs:
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
platforms: |
linux/amd64
linux/arm/v7
linux/arm64/v8
linux/amd64
linux/arm/v7
linux/arm64/v8
+4 -6
View File
@@ -24,11 +24,9 @@ jobs:
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=raw,value=latest,enable={{is_default_branch}}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Setup Docker buildx
@@ -41,6 +39,6 @@ jobs:
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
platforms: |
linux/amd64
linux/arm/v7
linux/arm64/v8
linux/amd64
linux/arm/v7
linux/arm64/v8
+1 -1
View File
@@ -15,7 +15,7 @@ jobs:
uses: actions/checkout@v1
- name: Install Node and PNPM
uses: pnpm/action-setup@v4
uses: pnpm/action-setup@v4.1.0
with:
version: 9
+1 -1
View File
@@ -15,7 +15,7 @@ jobs:
uses: actions/checkout@v1
- name: Install Node and PNPM
uses: pnpm/action-setup@v4
uses: pnpm/action-setup@v4.1.0
with:
version: 9
+1 -1
View File
@@ -18,7 +18,7 @@ jobs:
uses: actions/checkout@v3
- name: Install Node and PNPM
uses: pnpm/action-setup@v4
uses: pnpm/action-setup@v4.1.0
with:
version: 9
+1 -1
View File
@@ -15,7 +15,7 @@ jobs:
uses: actions/checkout@v1
- name: Install Node and PNPM
uses: pnpm/action-setup@v4
uses: pnpm/action-setup@v4.1.0
with:
version: 9
+47
View File
@@ -0,0 +1,47 @@
name: 'Close stale issues and PRs'
on:
workflow_dispatch:
schedule:
- cron: '30 1 * * *'
permissions:
contents: read
jobs:
stale:
permissions:
issues: write
pull-requests: write
runs-on: ubuntu-latest
steps:
- uses: dessant/lock-threads@v5
with:
process-only: 'issues, prs'
issue-inactive-days: 120
pr-inactive-days: 120
log-output: true
add-issue-labels: 'frozen-due-to-age'
add-pr-labels: 'frozen-due-to-age'
- uses: actions/stale@v9
with:
operations-per-run: 999
days-before-issue-stale: 180
days-before-pr-stale: 180
days-before-issue-close: 30
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'
stale-pr-label: 'stale'
exempt-pr-labels: 'keep,security'
+1 -1
View File
@@ -15,7 +15,7 @@ jobs:
uses: actions/checkout@v1
- name: Install Node.js and PNPM
uses: pnpm/action-setup@v4
uses: pnpm/action-setup@v4.1.0
with:
version: 9
+1 -1
View File
@@ -8,7 +8,7 @@ arrowParens: always
proseWrap: never
htmlWhitespaceSensitivity: strict
endOfLine: lf
singleAttributePerLine: true
singleAttributePerLine: false
bracketSpacing: true
plugins:
- prettier-plugin-packagejson
+9 -7
View File
@@ -1,17 +1,19 @@
{
"customSyntax": "postcss-styled-syntax",
"extends": [
"stylelint-config-standard",
"stylelint-config-styled-components",
"stylelint-config-css-modules",
"stylelint-config-recess-order"
],
"rules": {
"declaration-empty-line-before": null,
"declaration-block-no-redundant-longhand-properties": null,
"selector-class-pattern": null,
"block-no-empty": null,
"selector-type-case": ["lower", { "ignoreTypes": ["/^\\$\\w+/"] }],
"selector-type-no-unknown": [true, { "ignoreTypes": ["/-styled-mixin/", "/^\\$\\w+/"] }],
"declaration-colon-newline-after": null,
"property-no-vendor-prefix": null
"declaration-block-no-shorthand-property-overrides": null,
"declaration-block-no-redundant-longhand-properties": null,
"at-rule-no-unknown": [true, { "ignoreAtRules": ["mixin", "value"] }],
"function-no-unknown": [true, { "ignoreFunctions": ["darken", "alpha", "lighten"] }],
"declaration-property-value-no-unknown": null,
"no-descending-specificity": null,
"no-empty-source": null
}
}
+10 -9
View File
@@ -13,10 +13,9 @@
".prettierrc": "jsonc",
".eslintignore": "ignore"
},
"eslint.validate": ["typescript"],
"eslint.validate": ["typescript", "typescriptreact"],
"eslint.workingDirectories": [
{ "directory": "./", "changeProcessCWD": true },
{ "directory": "./server", "changeProcessCWD": true }
],
"typescript.tsserver.experimental.enableProjectDiagnostics": false,
"editor.codeActionsOnSave": {
@@ -26,10 +25,6 @@
"source.formatDocument": "explicit"
},
"css.validate": true,
"less.validate": false,
"scss.validate": true,
"scss.lint.unknownAtRules": "warning",
"scss.lint.unknownProperties": "warning",
"javascript.validate.enable": false,
"javascript.format.enable": false,
"typescript.format.enable": false,
@@ -49,8 +44,14 @@
"i18n-ally.localesPaths": ["src/i18n", "src/i18n/locales"],
"typescript.tsdk": "node_modules\\typescript\\lib",
"typescript.preferences.importModuleSpecifier": "non-relative",
"stylelint.validate": ["css", "scss", "typescript", "typescriptreact"],
"stylelint.config": null,
"stylelint.validate": ["css", "postcss"],
"typescript.updateImportsOnFileMove.enabled": "always",
"typescript.preferences.autoImportFileExcludePatterns": [
"@mantine/core",
"@mantine/modals",
"@mantine/dates"
],
"[typescriptreact]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
"typescript.format.insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces": true,
"folderTemplates.structures": [
@@ -63,14 +64,14 @@
"template": "Functional Component with CSS Modules"
},
{
"fileName": "<FTName | kebabcase>.module.scss"
"fileName": "<FTName | kebabcase>.module.css"
}
]
}
],
"folderTemplates.fileTemplates": {
"Functional Component with CSS Modules": [
"import styles from './<FTName | kebabcase>.module.scss';",
"import styles from './<FTName | kebabcase>.module.css';",
"",
"interface <FTName | pascalcase>Props {}",
"",
+5 -3
View File
@@ -1,9 +1,11 @@
# --- Builder stage
FROM node:18-alpine as builder
FROM node:23-alpine as builder
WORKDIR /app
# Copy package.json first to cache node_modules
COPY package.json package-lock.json .
COPY package.json pnpm-lock.yaml .
RUN npm install -g pnpm
RUN pnpm install
@@ -14,7 +16,7 @@ RUN pnpm run build:web
# --- Production stage
FROM nginx:alpine-slim
COPY --chown=nginx:nginx --from=builder /app/release/app/dist/web /usr/share/nginx/html
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
+4 -3
View File
@@ -1,4 +1,4 @@
<img src="assets/icons/icon.png" alt="logo" title="feishin" align="right" height="60px" />
<img src="assets/icons/icon.png" alt="logo" title="feishin" align="right" height="60px" width="60px" />
# Feishin
@@ -116,11 +116,11 @@ First thing to do is check that your MPV binary path is correct. Navigate to the
### What music servers does Feishin support?
Feishin supports any music server that implements a [Navidrome](https://www.navidrome.org/) or [Jellyfin](https://jellyfin.org/) API. **Subsonic API is not currently supported**. This will likely be added in [later when the new Subsonic API is decided on](https://support.symfonium.app/t/subsonic-servers-participation/1233).
Feishin supports any music server that implements a [Navidrome](https://www.navidrome.org/), [Jellyfin](https://jellyfin.org/), or [OpenSubsonic compatible](https://opensubsonic.netlify.app/) API.
- [Navidrome](https://github.com/navidrome/navidrome)
- [Jellyfin](https://github.com/jellyfin/jellyfin)
- Subsonic-compatible servers
- [OpenSubsonic](https://opensubsonic.netlify.app/) compatible servers, such as...
- [Airsonic-Advanced](https://github.com/airsonic-advanced/airsonic-advanced)
- [Ampache](https://ampache.org)
- [Astiga](https://asti.ga/)
@@ -129,6 +129,7 @@ Feishin supports any music server that implements a [Navidrome](https://www.navi
- [LMS](https://github.com/epoupon/lms)
- [Nextcloud Music](https://apps.nextcloud.com/apps/music)
- [Supysonic](https://github.com/spl0k/supysonic)
- [Qm-Music](https://github.com/chenqimiao/qm-music)
- More (?)
### I have the issue "The SUID sandbox helper binary was found, but is not configured correctly" on Linux
Binary file not shown.
+4 -27
View File
@@ -17,6 +17,8 @@ win:
- nsis
icon: assets/icons/icon.png
nsis:
allowToChangeInstallationDirectory: true
oneClick: false
shortcutName: ${productName}
uninstallDisplayName: ${productName}
createDesktopShortcut: always
@@ -35,41 +37,16 @@ mac:
notarize: false
dmg:
contents: [{ x: 130, y: 220 }, { x: 410, y: 220, type: link, path: /Applications }]
deb:
depends:
- libgssapi_krb5.so.2
- libavahi-common.so.3
- libavahi-client.so.3
- libkrb5.so.3
- libkrb5support.so.0
- libkeyutils.so.1
- libcups.so.2
rpm:
depends:
- libgssapi_krb5.so.2
- libavahi-common.so.3
- libavahi-client.so.3
- libkrb5.so.3
- libkrb5support.so.0
- libkeyutils.so.1
- libcups.so.2
freebsd:
depends:
- libgssapi_krb5.so.2
- libavahi-common.so.3
- libavahi-client.so.3
- libkrb5.so.3
- libkrb5support.so.0
- libkeyutils.so.1
- libcups.so.2
linux:
target:
- AppImage
- tar.xz
category: AudioVideo;Audio;Player
icon: assets/icons/icon.png
artifactName: ${productName}-${os}-${arch}.${ext}
npmRebuild: false
publish:
provider: github
owner: jeffvli
repo: feishin
generateUpdatesFilesForAllChannels: true
+2 -1
View File
@@ -13,6 +13,7 @@ const config: UserConfig = {
rollupOptions: {
external: ['source-map-support'],
},
sourcemap: true,
},
define: {
'import.meta.env.IS_LINUX': JSON.stringify(currentOSEnv === 'linux'),
@@ -46,7 +47,7 @@ const config: UserConfig = {
renderer: {
css: {
modules: {
generateScopedName: '[name]__[local]__[hash:base64:5]',
generateScopedName: 'fs-[name]-[local]',
localsConvention: 'camelCase',
},
},
+1
View File
@@ -46,6 +46,7 @@ export default tseslint.config(
'react-refresh/only-export-components': 'off',
'react/display-name': 'off',
semi: ['error', 'always'],
'single-attribute-per-line': 'off',
},
},
eslintConfigPrettier,
+27
View File
@@ -0,0 +1,27 @@
server {
listen 9180;
sendfile on;
default_type application/octet-stream;
gzip on;
gzip_http_version 1.1;
gzip_disable "MSIE [1-6]\.";
gzip_min_length 256;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_comp_level 9;
location ${PUBLIC_PATH} {
alias /usr/share/nginx/html/;
try_files $uri $uri/ /index.html =404;
}
location ${PUBLIC_PATH}settings.js {
alias /etc/nginx/conf.d/settings.js;
}
location ${PUBLIC_PATH}/settings.js {
alias /etc/nginx/conf.d/settings.js;
}
}
+43 -37
View File
@@ -1,6 +1,6 @@
{
"name": "feishin",
"version": "0.14.0",
"version": "0.20.1",
"description": "A modern self-hosted music player.",
"keywords": [
"subsonic",
@@ -25,11 +25,16 @@
"build:remote": "vite build --config remote.vite.config.ts",
"build:web": "vite build --config web.vite.config.ts",
"dev": "electron-vite dev",
"dev:remote": "vite dev --config remote.vite.config.ts",
"dev:watch": "electron-vite dev --watch",
"i18next": "i18next -c src/i18n/i18next-parser.config.js",
"postinstall": "electron-builder install-app-deps",
"lint": "eslint --cache .",
"lint:fix": "eslint --cache --fix .",
"lint": "pnpm run lint-code && pnpm run lint-styles",
"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",
@@ -54,24 +59,26 @@
"@ag-grid-community/infinite-row-model": "^28.2.1",
"@ag-grid-community/react": "^28.2.1",
"@ag-grid-community/styles": "^28.2.1",
"@atlaskit/pragmatic-drag-and-drop": "1.4.0",
"@atlaskit/pragmatic-drag-and-drop-auto-scroll": "^2.1.0",
"@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.0.3",
"@electron-toolkit/preload": "^3.0.1",
"@electron-toolkit/utils": "^4.0.0",
"@emotion/react": "^11.10.4",
"@mantine/core": "^6.0.22",
"@mantine/dates": "^6.0.22",
"@mantine/form": "^6.0.22",
"@mantine/hooks": "^6.0.22",
"@mantine/modals": "^6.0.22",
"@mantine/notifications": "^6.0.22",
"@mantine/utils": "^6.0.22",
"@mantine/colors-generator": "^8.2.8",
"@mantine/core": "^8.2.8",
"@mantine/dates": "^8.2.8",
"@mantine/form": "^8.2.8",
"@mantine/hooks": "^8.2.8",
"@mantine/modals": "^8.2.8",
"@mantine/notifications": "^8.2.8",
"@tanstack/react-query": "^4.32.1",
"@tanstack/react-query-devtools": "^4.32.1",
"@tanstack/react-query-persist-client": "^4.32.1",
"@ts-rest/core": "^3.23.0",
"@xhayper/discord-rpc": "^1.0.24",
"@xhayper/discord-rpc": "^1.3.0",
"audiomotion-analyzer": "^4.5.0",
"auto-text-size": "^0.2.3",
"axios": "^1.6.0",
"axios": "^1.12.0",
"cheerio": "^1.0.0",
"clsx": "^2.0.0",
"cmdk": "^0.2.0",
@@ -84,7 +91,6 @@
"electron-updater": "^6.3.9",
"fast-average-color": "^9.3.0",
"format-duration": "^2.0.0",
"framer-motion": "^11.0.0",
"fuse.js": "^6.6.2",
"i18next": "^21.10.0",
"idb-keyval": "^6.2.1",
@@ -93,48 +99,52 @@
"lodash": "^4.17.21",
"md5": "^2.3.0",
"memoize-one": "^6.0.0",
"motion": "^12.18.1",
"mpris-service": "^2.1.2",
"nanoid": "^3.3.3",
"node-mpv": "github:jeffvli/Node-MPV#32b4d64395289ad710c41d481d2707a7acfc228f",
"overlayscrollbars": "^2.11.1",
"overlayscrollbars-react": "^0.5.6",
"qs": "^6.14.0",
"react": "^19.1.0",
"react-dom": "^19.1.0",
"react-error-boundary": "^3.1.4",
"react-i18next": "^11.18.6",
"react-icons": "^4.10.1",
"react-icons": "^5.5.0",
"react-image": "^4.1.0",
"react-intersection-observer": "^9.16.0",
"react-loading-skeleton": "^3.5.0",
"react-player": "^2.11.0",
"react-router": "^6.16.0",
"react-router-dom": "^6.16.0",
"react-simple-img": "^3.0.0",
"react-virtualized-auto-sizer": "^1.0.17",
"react-window": "^1.8.9",
"react-window-infinite-loader": "^1.0.9",
"semver": "^7.5.4",
"styled-components": "^6.0.8",
"swiper": "^9.3.1",
"use-sync-external-store": "^1.5.0",
"ws": "^8.18.2",
"zod": "^3.22.3",
"zustand": "^4.3.9"
"zustand": "^5.0.5"
},
"devDependencies": {
"@electron-toolkit/eslint-config-prettier": "^3.0.0",
"@electron-toolkit/eslint-config-ts": "^3.0.0",
"@electron-toolkit/tsconfig": "^1.0.1",
"@types/electron-localshortcut": "^3.1.0",
"@types/lodash": "^4.14.188",
"@types/md5": "^2.3.2",
"@types/node": "^22.14.1",
"@types/react": "^18.3.1",
"@types/react-dom": "^18.3.1",
"@types/lodash": "^4.17.18",
"@types/md5": "^2.3.5",
"@types/node": "^22.15.32",
"@types/react": "^18.3.23",
"@types/react-dom": "^18.3.7",
"@types/react-window": "^1.8.5",
"@types/react-window-infinite-loader": "^1.0.6",
"@types/source-map-support": "^0.5.10",
"@types/styled-components": "^5.1.26",
"@types/ws": "^8.18.1",
"@vitejs/plugin-react": "^4.3.4",
"concurrently": "^7.1.0",
"cross-env": "^7.0.3",
"electron": "^35.1.5",
"electron": "^37.4.0",
"electron-builder": "^26.0.12",
"electron-devtools-installer": "^3.2.0",
"electron-vite": "^3.1.0",
@@ -145,24 +155,20 @@
"eslint-plugin-react-hooks": "^5.2.0",
"eslint-plugin-react-refresh": "^0.4.19",
"i18next-parser": "^9.0.2",
"postcss-styled-syntax": "^0.5.0",
"postcss-preset-mantine": "^1.17.0",
"prettier": "^3.5.3",
"prettier-plugin-packagejson": "^2.5.14",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"sass-embedded": "^1.89.0",
"stylelint": "^15.10.3",
"stylelint-config-css-modules": "^4.3.0",
"stylelint-config-recess-order": "^4.3.0",
"stylelint-config-standard": "^34.0.0",
"stylelint-config-standard-scss": "^4.0.0",
"stylelint-config-styled-components": "^0.1.1",
"stylelint": "^16.14.1",
"stylelint-config-css-modules": "^4.4.0",
"stylelint-config-recess-order": "^7.1.0",
"stylelint-config-standard": "^38.0.0",
"typescript": "^5.8.3",
"typescript-plugin-styled-components": "^3.0.0",
"vite": "^6.3.5",
"vite": "^6.3.6",
"vite-plugin-conditional-import": "^0.1.7",
"vite-plugin-dynamic-import": "^1.6.0",
"vite-plugin-ejs": "^1.7.0"
"vite-plugin-ejs": "^1.7.0",
"vite-plugin-pwa": "^1.0.3"
},
"pnpm": {
"onlyBuiltDependencies": [
+3020 -1509
View File
File diff suppressed because it is too large Load Diff
+5
View File
@@ -0,0 +1,5 @@
module.exports = {
plugins: {
'postcss-preset-mantine': {},
},
};
+7
View File
@@ -23,6 +23,13 @@ export default defineConfig({
entryFileNames: '[name].js',
},
},
sourcemap: true,
},
css: {
modules: {
generateScopedName: 'fs-[name]-[local]',
localsConvention: 'camelCase',
},
},
plugins: [
react(),
+24
View File
@@ -2,6 +2,7 @@ import { PostProcessorModule, StringMap, TOptions } from 'i18next';
import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
import ca from './locales/ca.json';
import cs from './locales/cs.json';
import de from './locales/de.json';
import en from './locales/en.json';
@@ -18,14 +19,18 @@ import nbNO from './locales/nb-NO.json';
import nl from './locales/nl.json';
import pl from './locales/pl.json';
import ptBr from './locales/pt-BR.json';
import pt from './locales/pt.json';
import ru from './locales/ru.json';
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 tr from './locales/tr.json';
import zhHans from './locales/zh-Hans.json';
import zhHant from './locales/zh-Hant.json';
const resources = {
ca: { translation: ca },
cs: { translation: cs },
de: { translation: de },
en: { translation: en },
@@ -41,11 +46,14 @@ const resources = {
'nb-NO': { translation: nbNO },
nl: { translation: nl },
pl: { translation: pl },
pt: { translation: pt },
'pt-BR': { translation: ptBr },
ru: { translation: ru },
sl: { translation: sl },
sr: { translation: sr },
sv: { translation: sv },
ta: { translation: ta },
tr: { translation: tr },
'zh-Hans': { translation: zhHans },
'zh-Hant': { translation: zhHant },
};
@@ -55,6 +63,10 @@ export const languages = [
label: 'English',
value: 'en',
},
{
label: 'Català',
value: 'ca',
},
{
label: 'Čeština',
value: 'cs',
@@ -107,6 +119,10 @@ export const languages = [
label: 'فارسی',
value: 'fa',
},
{
label: 'Português',
value: 'pt',
},
{
label: 'Português (Brasil)',
value: 'pt-BR',
@@ -119,6 +135,10 @@ export const languages = [
label: 'Русский',
value: 'ru',
},
{
label: 'Slovenščina',
value: 'sl',
},
{
label: 'Srpski',
value: 'sr',
@@ -131,6 +151,10 @@ export const languages = [
label: 'Tamil',
value: 'ta',
},
{
label: 'Türkçe',
value: 'tr',
},
{
label: '简体中文',
value: 'zh-Hans',
+831
View File
@@ -0,0 +1,831 @@
{
"page": {
"sidebar": {
"myLibrary": "La meva llibreria",
"albumArtists": "$t(entity.albumArtist_other)",
"albums": "$t(entity.album_other)",
"artists": "$t(entity.artist_other)",
"folders": "$t(entity.folder_other)",
"genres": "$t(entity.genre_other)",
"home": "$t(common.home)",
"playlists": "$t(entity.playlist_other)",
"search": "$t(common.search)",
"settings": "$t(common.setting_other)",
"tracks": "$t(entity.track_other)",
"nowPlaying": "ara sona",
"shared": "$t(entity.playlist_other) compartida"
},
"albumArtistDetail": {
"relatedArtists": "$t(entity.artist_other) similars",
"viewAllTracks": "veure totes les $t(entity.track_other)",
"about": "Sobre {{artist}}",
"appearsOn": "apareix a",
"recentReleases": "Llançaments recents",
"viewDiscography": "Mosta la discografia",
"topSongs": "millos cançons",
"topSongsFrom": "les millors cançons de {{title}}",
"viewAll": "mostra-ho tot"
},
"albumArtistList": {
"title": "$t(entity.albumArtist_other)"
},
"albumDetail": {
"moreFromArtist": "més d'aquest $t(entity.artist_one)",
"moreFromGeneric": "més de {{item}}",
"released": "publicat"
},
"albumList": {
"title": "$t(entity.album_other)",
"artistAlbums": "àlbums de {{artist}}",
"genreAlbums": "\"{{genre}}\" $t(entity.album_other)"
},
"appMenu": {
"quit": "$t(common.quit)",
"settings": "$t(common.setting_other)",
"goBack": "torna enrere",
"goForward": "avança",
"collapseSidebar": "replega la barra lateral",
"expandSidebar": "expandeix la barra lateral",
"manageServers": "gestionar servidors",
"selectServer": "seleccionar servidor",
"version": "versió {{version}}",
"openBrowserDevtools": "obre les eines de desenvolupament del navegador",
"privateModeOff": "desactiva el mode privat",
"privateModeOn": "activa el mode privat"
},
"contextMenu": {
"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)",
"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)",
"download": "descarregar",
"showDetails": "informació",
"numberSelected": "{{count}} seleccionat",
"shareItem": "comparteix l'element",
"goToAlbumArtist": "Ves a $t(entity.albumArtist_one)",
"goToAlbum": "ves a $t(entity.album_one)"
},
"genreList": {
"title": "$t(entity.genre_other)",
"showAlbums": "mostra $t(entity.album_other) $t(entity.genre_one)",
"showTracks": "mostra $t(entity.track_other) $t(entity.genre_one)"
},
"home": {
"title": "$t(common.home)",
"explore": "explora la teva biblioteca",
"newlyAdded": "afegits recentment",
"mostPlayed": "els més reproduïts",
"recentlyPlayed": "reproduït recentment"
},
"playlistList": {
"title": "$t(entity.playlist_other)"
},
"trackList": {
"title": "$t(entity.track_other)",
"artistTracks": "pistes de {{artist}}",
"genreTracks": "\"{{genre}}\" $t(entity.track_other)"
},
"manageServers": {
"username": "nom d'usuari",
"title": "gestionar servidors",
"serverDetails": "detalls del servidor",
"editServerDetailsTooltip": "editar els detalls del servidor",
"removeServer": "eliminar el servidor",
"url": "URL"
},
"fullscreenPlayer": {
"config": {
"opacity": "opacitat",
"synchronized": "sincronitzat",
"unsynchronized": "no sincronitzat",
"useImageAspectRatio": "utilitza la relació d'aspecte de la imatge",
"dynamicBackground": "fons dinàmic",
"dynamicIsImage": "activar la imatge de fons",
"followCurrentLyric": "seguir la lletra actual",
"lyricAlignment": "alineació de la lletra",
"lyricSize": "tamany de la lletra",
"dynamicImageBlur": "mida del desenfocament de la imatge",
"lyricOffset": "demora de la lletra (ms)",
"showLyricMatch": "mosta coincidències de lletres",
"showLyricProvider": "mostra el proveïdor de la lletra",
"lyricGap": "espera entre lletres"
},
"lyrics": "lletres",
"visualizer": "visualitzador",
"noLyrics": "no s'ha trobat cap lletra",
"related": "relacionat",
"upNext": "a continuació"
},
"setting": {
"advanced": "avançat",
"generalTab": "general",
"hotkeysTab": "tecles d'accés ràpid",
"playbackTab": "reproducció",
"windowTab": "finestra"
},
"globalSearch": {
"commands": {
"goToPage": "anar a la pàgina",
"searchFor": "cerca {{query}}",
"serverCommands": "ordres del servidor"
},
"title": "ordres"
},
"itemDetail": {
"copyPath": "copia ruta al porta-retalls",
"copiedPath": "ruta copiada correctament",
"openFile": "mostra la pista al gestor d'arxius"
},
"playlist": {
"reorder": "el reordenament només s'activa quan s'ordena per id"
}
},
"common": {
"home": "inici",
"year": "any",
"add": "afegir",
"ascending": "ascendent",
"biography": "biografia",
"bitrate": "taxa de bits",
"bpm": "bpm",
"cancel": "cancel·lar",
"center": "centrar",
"close": "tancar",
"codec": "còdec",
"configure": "configurar",
"confirm": "confirmar",
"create": "crear",
"decrease": "disminuir",
"delete": "eliminar",
"descending": "descendent",
"description": "descripció",
"disable": "desactivar",
"disc": "disc",
"dismiss": "descartar",
"duration": "duració",
"edit": "editar",
"enable": "activar",
"expand": "expandir",
"filters": "filtres",
"increase": "incrementar",
"left": "esquerra",
"maximize": "maximitzar",
"menu": "menú",
"minimize": "minimitzar",
"modified": "modificació",
"name": "nom",
"no": "no",
"none": "cap",
"note": "nota",
"ok": "bé",
"preview": "vista prèvia",
"quit": "sortir",
"random": "aleatori",
"rating": "valoració",
"reload": "torna a carregar",
"reset": "restablir",
"right": "dreta",
"save": "desar",
"search": "cercar",
"share": "compartir",
"size": "mida",
"sortOrder": "ordenar",
"tags": "etiquetes",
"title": "títol",
"translation": "traducció",
"unknown": "desconegut",
"version": "versió",
"yes": "sí",
"additionalParticipants": "participants addicionals",
"channel_one": "canal",
"channel_many": "canals",
"channel_other": "canals",
"filter_one": "filtre",
"filter_many": "filtres",
"filter_other": "filtres",
"saveAs": "desar com",
"action_one": "acció",
"action_many": "accions",
"action_other": "accions",
"newVersion": "s'ha instal·lat una nova versió ({{version}})",
"viewReleaseNotes": "veure les notes de la versió",
"currentSong": "$t(entity.track_one) actual",
"limit": "límit",
"previousSong": "$t(entity.track_one) anterior",
"trackNumber": "pista",
"albumGain": "guany de l'àlbum",
"albumPeak": "pic de l'àlbum",
"areYouSure": "estàs segur?",
"backward": "enrere",
"clear": "neteja",
"collapse": "col·lapsa",
"comingSoon": "aviat disponible…",
"favorite": "preferit",
"forceRestartRequired": "reinicia per aplicar els canvis… tanca la notificació per reiniciar",
"owner": "propietari",
"refresh": "actualitzar",
"resetToDefault": "restablir els valors predeterminats",
"saveAndReplace": "desar i substituir",
"bitDepth": "profunditat de bits",
"forward": "endavant",
"manage": "gestiona",
"mbid": "ID de MusicBrainz",
"noResultsFromQuery": "la petició no ha produït resultats",
"path": "ruta",
"playerMustBePaused": "cal pausar el reproductor",
"restartRequired": "cal reiniciar",
"sampleRate": "freqüència de mostreig",
"setting": "configuració",
"trackGain": "guany de pista",
"trackPeak": "pic de pista",
"gap": "espera"
},
"entity": {
"album_one": "àlbum",
"album_many": "àlbums",
"album_other": "àlbums",
"albumWithCount_one": "{{count}} àlbum",
"albumWithCount_many": "{{count}} àlbums",
"albumWithCount_other": "{{count}} àlbums",
"albumArtist_one": "artista de l'àlbum",
"albumArtist_many": "artistes de l'àlbum",
"albumArtist_other": "artistes de l'àlbum",
"albumArtistCount_one": "{{count}} artista de l'àlbum",
"albumArtistCount_many": "{{count}} artistes de l'àlbum",
"albumArtistCount_other": "{{count}} artistes de l'àlbum",
"artist_one": "artista",
"artist_many": "artistes",
"artist_other": "artistes",
"artistWithCount_one": "{{count}} artista",
"artistWithCount_many": "{{count}} artistes",
"artistWithCount_other": "{{count}} artistes",
"playlist_one": "llista de reproducció",
"playlist_many": "llistes de reproducció",
"playlist_other": "llistes de reproducció",
"playlistWithCount_one": "{{count}} llista de reproducció",
"playlistWithCount_many": "{{count}} llistes de reproducció",
"playlistWithCount_other": "{{count}} llistes de reproducció",
"smartPlaylist": "$t(entity.playlist_one) intel·ligent",
"play_one": "{{count}} reproducció",
"play_many": "{{count}} reproduccions",
"play_other": "{{count}} reproduccions",
"folderWithCount_one": "{{count}} carpeta",
"folderWithCount_many": "{{count}} carpetes",
"folderWithCount_other": "{{count}} carpetes",
"genreWithCount_one": "{{count}} gènere",
"genreWithCount_many": "{{count}} gèneres",
"genreWithCount_other": "{{count}} gèneres",
"track_one": "pista",
"track_many": "pistes",
"track_other": "pistes",
"trackWithCount_one": "{{count}} pista",
"trackWithCount_many": "{{count}} pistes",
"trackWithCount_other": "{{count}} pistes",
"folder_one": "carpeta",
"folder_many": "carpetes",
"folder_other": "carpetes",
"genre_one": "gènere",
"genre_many": "gèneres",
"genre_other": "gèneres",
"song_one": "cançó",
"song_many": "cançons",
"song_other": "cançons",
"favorite_one": "preferit",
"favorite_many": "preferits",
"favorite_other": "preferits"
},
"form": {
"addToPlaylist": {
"input_playlists": "$t(entity.playlist_other)",
"title": "afegir a una $t(entity.playlist_one)",
"input_skipDuplicates": "salta't els duplicats",
"success": "s'ha afegit $t(entity.trackWithCount, {\"count\": {{message}} }) a $t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })"
},
"createPlaylist": {
"input_description": "$t(common.description)",
"input_name": "$t(common.name)",
"input_owner": "$t(common.owner)",
"success": "$t(entity.playlist_one) s'ha creat amb èxit",
"title": "crear una $t(entity.playlist_one)",
"input_public": "públic"
},
"deletePlaylist": {
"success": "$t(entity.playlist_one) s'ha eliminat amb èxit",
"title": "elimina la $t(entity.playlist_one)",
"input_confirm": "escriviu el nom de la $t(entity.playlist_one) per confirmar"
},
"editPlaylist": {
"success": "$t(entity.playlist_one) s'ha actualitzat amb èxit",
"title": "editar la $t(entity.playlist_one)",
"publicJellyfinNote": "Per algun motiu, Jellyfin no exposa si una llista de reproducció és pública o no. Si voleu que es mantingui pública, seleccioneu la següent entrada"
},
"lyricSearch": {
"input_artist": "$t(entity.artist_one)",
"input_name": "$t(common.name)",
"title": "cerca de lletres"
},
"addServer": {
"input_password": "contrasenya",
"input_username": "nom d'usuari",
"error_savePassword": "hi ha hagut un error en intentar desar la contrasenya",
"ignoreCors": "ignora el cors ($t(common.restartRequired))",
"ignoreSsl": "ignora l'ssl ($t(common.restartRequired))",
"input_legacyAuthentication": "activa l'autenticació antiga",
"input_name": "nom del servidor",
"input_savePassword": "desa la contrasenya",
"input_url": "url",
"success": "servidor afegit correctament",
"title": "afegeix un servidor"
},
"shareItem": {
"description": "descripció",
"allowDownloading": "permetre descàrrega",
"setExpiration": "estableix expiració",
"success": "s'ha copiat l'enllaç de compartició al porta-retalls (o feu clic aquí per obrir-lo)",
"expireInvalid": "la data d'expiració ha de ser al futur",
"createFailed": "no s'ha pogut crear el recurs compartit (està habilitat, l'ús compartit?)"
},
"updateServer": {
"success": "s'ha actualitzat el servidor amb èxit",
"title": "actualitzar el servidor"
},
"queryEditor": {
"title": "editor de consultes",
"input_optionMatchAll": "coincidències totals",
"input_optionMatchAny": "coincidències parcials"
},
"privateMode": {
"enabled": "mode privat actiu; l'estat de reproducció ara està ocult d'integracions externes",
"disabled": "mode privat inactiu; l'estat de reproducció ara és visible per les integracions externes",
"title": "mode privat"
}
},
"action": {
"addToFavorites": "afegir als $t(entity.favorite_other)",
"addToPlaylist": "afegir a $t(entity.playlist_one)",
"createPlaylist": "crear $t(entity.playlist_one)",
"deletePlaylist": "elimina la $t(entity.playlist_one)",
"editPlaylist": "edita la $t(entity.playlist_one)",
"refresh": "$t(common.refresh)",
"removeFromFavorites": "elimina dels $t(entity.favorite_other)",
"removeFromPlaylist": "elimina de $t(entity.playlist_one)",
"clearQueue": "buidar la cua",
"removeFromQueue": "treure de la cua",
"goToPage": "anar a la pàgina",
"openIn": {
"lastfm": "Obrir a Last.fm",
"musicbrainz": "Obrir a MusicBrainz"
},
"deselectAll": "deselecciona-ho tot",
"viewPlaylists": "veure$t(entity.playlist_other)",
"moveToNext": "passar al següent",
"moveToBottom": "anar al final",
"moveToTop": "anar al principi",
"setRating": "Qualifica",
"toggleSmartPlaylistEditor": "canvia l'editor $t(entity.smartPlaylist)"
},
"setting": {
"language_description": "estableix l'idioma de l'aplicació ($t(common.restartRequired))",
"playButtonBehavior_optionAddLast": "$t(player.addLast)",
"playButtonBehavior_optionAddNext": "$t(player.addNext)",
"playButtonBehavior_optionPlay": "$t(player.play)",
"playButtonBehavior_optionPlayShuffled": "$t(player.shuffle)",
"replayGainMode_optionAlbum": "$t(entity.album_one)",
"replayGainMode_optionNone": "$t(common.none)",
"replayGainMode_optionTrack": "$t(entity.track_one)",
"font": "tipus de lletra",
"fontType": "selecció de tipus de lletra",
"fontType_optionBuiltIn": "tipus de lletra integrats",
"fontType_optionCustom": "tipus de lletra personalitzats",
"fontType_optionSystem": "tipus de lletra del sistema",
"disableAutomaticUpdates": "desactivar les actualitzacions automàtiques",
"disableLibraryUpdateOnStartup": "desactiva la comprovació de noves versions a l'inici",
"homeConfiguration": "configuració de la pàgina d'inici",
"sidebarConfiguration": "configuració de la barra lateral",
"contextMenu": "configuració del menú contextual (clic amb el botó dret)",
"hotkey_playbackNext": "pista següent",
"hotkey_playbackPrevious": "pista anterior",
"sidePlayQueueStyle_optionAttached": "unida",
"sidePlayQueueStyle_optionDetached": "separada",
"audioDevice": "dispositiu d'àudio",
"audioDevice_description": "seleccioneu el dispositiu d'àudio que voleu utilitzar per a la reproducció (només pel reproductor web)",
"audioPlayer": "reproductor d'àudio",
"audioPlayer_description": "seleccioneu el reproductor d'àudio que voleu utilitzar per a la reproducció",
"sidebarConfiguration_description": "selecciona els elements i l'ordre en què apareixen a la barra lateral",
"sidebarPlaylistList_description": "mostra o amaga les llistes de reproducció a la barra lateral",
"accentColor": "color de ressaltat",
"accentColor_description": "estableix el color de ressaltat de l'aplicació",
"useSystemTheme_description": "seguir la preferència de d'aspecte clar o fosc definida pel sistema",
"themeDark": "aspecte fosc",
"theme": "aspecte",
"themeLight": "aspecte clar",
"useSystemTheme": "utilitzar l'aspecte del sistema",
"discordUpdateInterval_description": "el temps en segons entre cada actualització (mínim 15 segons)",
"enableRemote": "activar el servidor de control remot",
"enableRemote_description": "el servidor de control remot permet que altres dispositius controlin l'aplicació",
"notify": "activa les notificacions de cançons",
"transcode": "activa la transcodificació",
"transcode_description": "permet la transcodificació a diferents formats",
"albumBackground": "imatge de fons de l'àlbum",
"albumBackground_description": "afegeix una imatge de fons per les pàgines d'àlbum amb caràtula",
"albumBackgroundBlur": "mida del desenfocament de la imatge de fons de l'àlbum",
"albumBackgroundBlur_description": "ajusa la quantitat de desenfocament que s'aplica a la imatge de fons de l'àlbum",
"applicationHotkeys": "tecles de drecera de l'aplicació",
"applicationHotkeys_description": "configura les tecles de drecera de l'aplicació. marca la casella per configurar-les com a derecres globals (només per ordinador)",
"artistConfiguration": "configuració de la pàgina de l'artista de l'àlbum",
"artistConfiguration_description": "configura quins elements es mostren i el seu ordre de la pàgina de l'artista de l'àlbum",
"audioExclusiveMode": "mode d'àudio exclusiu",
"audioExclusiveMode_description": "activa el mode d'àudio exclusiu. En aquest mode, el sistema normalment estarà bloquejat i només mpv podrà emetre àudio",
"buttonSize": "mida dels botons de la barra de reproducció",
"buttonSize_description": "la mida dels botons de la barra de reproducció",
"clearCache": "neteja la memòria del navegador",
"clearCache_description": "una \"neteja profunda\" del feishin. a més de netejar la memòria del feishin, buida la memòria del navegador (com les imatges desades i altres recursos). la configuració i les credencials del servidor es mantenen",
"clearQueryCache": "buida la memòria de feishin",
"clearQueryCache_description": "una neteja superficial de feishin. això refrescarà les llistes de reproducció, les metadades de les pistes i reestablirà les lletres desades. la configuració, les credencials del servidor i les imatges desades es mantindran",
"clearCacheSuccess": "memòria netejada correctament",
"contextMenu_description": "us permet amagar els elements que es mostren al menú quan fas clic dret sobre un element. els elements no seleccionats estaran amagats",
"crossfadeDuration": "duracció de la fosa encadenada",
"crossfadeDuration_description": "estableix la duració de l'efecte de fosa encadenada",
"crossfadeStyle": "estil de fosa encadenada",
"crossfadeStyle_description": "selecciona l'estil de fosa encadenada que s'utilitzarà pel reproductor d'àudio",
"customCssEnable": "activa el css personalitzat",
"customCssEnable_description": "permet escriure CSS personalitzat.",
"customCssNotice": "Atenció: tot i que hi ha un filtre (no es permet ni url() ni content:), l'ús de CSS personalitzat pot presentar riscs si canvieu la interfície.",
"customCss": "css personalitzat",
"customCss_description": "contingut del css personalitzat. Nota: la propietat \"content\" i els urls remots no es permeten. A sota hi teniu una previsualització. Els camps addicionals que no establiu hi apareixin pel filtre.",
"customFontPath": "ruta de font personalitzada",
"customFontPath_description": "estableix la ruta a una font personalitzada per utilitzar-la a l'aplicació",
"discordApplicationId": "id d'aplicació de {{discord}}",
"discordApplicationId_description": "l'id d'aplicació per l'estat d'activitat de {{discord}} (per defecte, {{defaultId}})",
"discordPausedStatus": "mosta l'estat d'activitat quan està en pausa",
"discordPausedStatus_description": "si està activat, l'estat es mostrarà quan el reproductor estigui pausat",
"discordIdleStatus": "mosta l'estat d'activitat en inactivitat",
"discordIdleStatus_description": "si està activat, s'actualitzarà l'estat mentre el reproductor estigui inactiu",
"discordListening": "mosta l'estat com escoltant",
"discordListening_description": "mosta l'estat com escoltant en comptes de jugant",
"discordRichPresence": "estat d'activitat de {{discord}}",
"discordRichPresence_description": "activa l'estat de reproducció a l'activitat de {{discord}}. Les tecles d'imatge són: {{icon}}, {{playing}} i {{paused}}",
"discordServeImage": "serveix imatges de {{discord}} des del servidor",
"discordServeImage_description": "comparteix la caràtula per l'estat d'activitat de {{discord}} des del servidor; només disponible per jellyfin i navidrome",
"discordUpdateInterval": "interval d'actualització de l'estat d'activitat de {{discord}}",
"doubleClickBehavior": "posa en cua totes les pistes cercades en fer doble clic",
"doubleClickBehavior_description": "si està actiu, totes les pistes coincidents en una cerca de pistes es posaran a la cua. altrament, només la que seleccioneu s'afegirà a la cua",
"externalLinks": "mostra enllaços externs",
"externalLinks_description": "permet mostrar enllaços externs (Last.fm, MusicBrainz) a les pàgines d'artista/àlbum",
"exitToTray": "surt a la safata",
"exitToTray_description": "en sortir de l'aplicació, minimitza-la a la safa del sistema",
"floatingQueueArea": "mostra la zona flotant de la cua",
"floatingQueueArea_description": "mostra una icona flotant al costat dret de la pantalla per veure la cua de reproducció",
"followLyric": "segueix la lletra actual",
"followLyric_description": "desplaça la lletra a la posició de reproducció actual",
"preferLocalLyrics": "prefereix les lletres locals",
"preferLocalLyrics_description": "prefereix les lletres locals per sobre de les remotes, si estan disponibles",
"font_description": "estableix la font utilitzada a l'aplicació",
"fontType_description": "\"font incorporada\" selecciona una de les fonts proporcionades per Feishin. \"font del sistema\" us permet seleccionar qualsevol font proporcionada pel sistema operatiu. \"personalitzada\" us permet proporcionar la vostra pròpia font",
"gaplessAudio": "àudio sense pauses",
"gaplessAudio_description": "estableix la configuració d'àudio sense pauses per mpv",
"gaplessAudio_optionWeak": "feble (recomanat)",
"genreBehavior": "comportament predeterminat per les pàgines de gènere",
"genreBehavior_description": "determina si clicar sobre un gènere obre per defecte la llista de pistes o d'àlbums",
"globalMediaHotkeys": "tecles de drecera globals",
"globalMediaHotkeys_description": "activa o desactiva l'ús de les tecles multimèdia del sistema per controlar la reproducció",
"homeConfiguration_description": "configura quins objectes es mostren, i en quin ordre, a la pàgina d'inici",
"homeFeature": "carrusel de destacats d'inici",
"homeFeature_description": "controla si es mostra el gran carrusel d'elements destacats a la pàgina d'inici",
"hotkey_browserBack": "anar enrere",
"hotkey_browserForward": "anar endavant",
"hotkey_favoriteCurrentSong": "marca $t(common.currentSong) com a preferida",
"hotkey_favoritePreviousSong": "marca $t(common.previousSong) com a preferida",
"hotkey_globalSearch": "cerca global",
"hotkey_localSearch": "cerca a la pàgina",
"hotkey_playbackPause": "pausa",
"hotkey_playbackPlay": "reprodueix",
"hotkey_playbackPlayPause": "reprodueix / pausa",
"hotkey_playbackStop": "atura",
"hotkey_rate0": "neteja la qualificació",
"hotkey_rate1": "qualifica amb 1 estrella",
"hotkey_rate2": "qualifica amb 2 estrelles",
"hotkey_rate3": "qualifica amb 3 estrelles",
"hotkey_rate4": "qualifica amb 4 estrelles",
"hotkey_rate5": "qualifica amb 5 estrelles",
"hotkey_skipBackward": "salta enrere",
"hotkey_skipForward": "salta endavant",
"hotkey_toggleCurrentSongFavorite": "canvia si $t(common.currentSong) és preferida",
"hotkey_toggleFullScreenPlayer": "activa o desactiva el reproductor a pantalla completa",
"hotkey_togglePreviousSongFavorite": "canvia si $t(common.previousSong) és preferida",
"hotkey_toggleQueue": "activa o desactiva la cua",
"hotkey_toggleRepeat": "activa o desactiva la repetició",
"hotkey_toggleShuffle": "activa o desactiva la reproducció a l'atzar",
"hotkey_unfavoriteCurrentSong": "elimina $t(common.currentSong) dels preferits",
"hotkey_unfavoritePreviousSong": "elimina $t(common.previousSong) dels preferits",
"hotkey_volumeDown": "redueix el volum",
"hotkey_volumeMute": "silencia el volum",
"hotkey_volumeUp": "augmenta el volum",
"hotkey_zoomIn": "amplia",
"hotkey_zoomOut": "redueix",
"imageAspectRatio": "utilitza la relació d'aspecte predeterminada de la caràtula",
"imageAspectRatio_description": "si està activat, la caràtula es mostrarà amb la relació d'aspecte predeterminada. per caràtules que no siguin 1:1, l'espai restant estarà buit",
"language": "llengua",
"lastfm": "mostra els enllaços last.fm",
"lastfm_description": "mosta enllaços a last.fm a les pàgines d'artista/àlbum",
"lastfmApiKey": "clau d'API per {{lastfm}}",
"lastfmApiKey_description": "la clau d'API per {{lastfm}}. necessària per la caràtula",
"lyricFetch": "extreu la lletra d'internet",
"lyricFetch_description": "extreu la lletra de diverses fonts d'internet",
"lyricFetchProvider": "proveïdors de lletres",
"lyricFetchProvider_description": "selecciona els proveïdors de lletres. l'ordre en què apareixen és l'ordre en què es consultaran",
"lyricOffset": "desfasament de la lletra (ms)",
"lyricOffset_description": "desplaça la lletra els mil·lisegons especificats",
"notify_description": "mostra notificacions en canvia la cançó actual",
"minimizeToTray": "minimitza a la safata",
"minimizeToTray_description": "minimitza l'aplicació a la safata del sistema",
"minimumScrobblePercentage": "duració mínima de l'scrobble (percentatge)",
"minimumScrobblePercentage_description": "el percentatge mínim de la cançó que cal reproduir abans d'activar l'scrobble",
"minimumScrobbleSeconds": "scrobble mínim (segons)",
"minimumScrobbleSeconds_description": "la duració mínima en segons durant la qual cal reproduir la cançó abans d'activar l'scrobble",
"mpvExecutablePath": "ruta de l'executable de l'mpv",
"mpvExecutablePath_description": "estableix la ruta de l'executable de l'mpv. si el deixeu buit, s'utilitzarà la ruta predeterminada",
"mpvExtraParameters": "paràmetres de l'mpv",
"mpvExtraParameters_help": "un per línia",
"musicbrainz": "mostra els enllaços de musicbrainz",
"musicbrainz_description": "mostra enllaços a les pàgines d'artista/àlbum a musicbrainz si hi ha mbid",
"neteaseTranslation": "activeu les traduccions NetEase",
"neteaseTranslation_description": "Si ho activeu, cerca i mostra lletres traduïdes de NetEase si estan disponibles.",
"passwordStore": "contrasenyes/emmagatzematge secret",
"passwordStore_description": "quina contrasenya/emmagatzematge secret s'utilitza. canvieu-ho si teniu problemes per desar contrasenyes.",
"playbackStyle": "estil de reproducció",
"playbackStyle_description": "selecciona l'estil de reproducció a utilitzar pel reproductor d'àudio",
"playbackStyle_optionCrossFade": "fosa encadenada",
"playbackStyle_optionNormal": "normal",
"playButtonBehavior": "comportament del botó de reproducció",
"playButtonBehavior_description": "estableix el comportament predeterminat del botó de reproducció quan s'afegeixen cançons a la cua",
"playerAlbumArtResolution": "resolució de la caràtula de l'àlbum al reproductor",
"playerAlbumArtResolution_description": "la resolució de la previsualització gran de la caràtula al reproductor. si és més alta, serà més nítida, però es carregarà més lent. el valor predeterminat 0 vol dir automàtic",
"playerbarOpenDrawer": "activa el reproductor en pantalla completa",
"playerbarOpenDrawer_description": "permet fer clic a la barra de reproducció per obrir el reproductor de pantalla completa",
"remotePassword": "contrasenya del servidor de control remot",
"remotePassword_description": "estableix la contrasenya pel servidor de control remot. Aquestes credencials es transfereixen de forma no segura per defecte, de manera que hauríeu d'utilitzar una contrasenya única no relacionada amb res més",
"remotePort": "port del servidor de control remot",
"remotePort_description": "estableix el port pel servidor de control remot",
"remoteUsername": "nom d'usuari pel servidor de control remot",
"remoteUsername_description": "estableix el nom d'usuari pel servidor de control remot. si tant el nom d'usuari com la contrasenya són buits, l'autenticació estarà desactivada",
"replayGainPreamp_description": "ajusta el guany del preamplificador aplicat als valors de {{ReplayGain}}",
"sampleRate": "ràtio de mostratge",
"sampleRate_description": "selecciona el ràtio de mostratge de sortida que s'ha d'utilitzar si la freqüència de mostratge seleccionada és diferent a la del mitjà actual. un valor inferior a 8000 utilitzarà la freqüència predeterminada",
"savePlayQueue": "desa la cua de reproducció",
"savePlayQueue_description": "desa la cua de reproducció quan l'aplicació es tanca i la restaura quan s'obre",
"scrobble": "scrobble",
"scrobble_description": "fa scrobble de les reproduccions al vostre servidor multimèdia",
"showSkipButton": "mostra els botons de saltar",
"showSkipButton_description": "mostra o amaga els botons de saltar a la barra de reproducció",
"showSkipButtons": "mostra els botons de saltar",
"showSkipButtons_description": "mostra o amaga els botons de saltar a la barra de reproducció",
"sidebarCollapsedNavigation": "navegació de la barra lateral (plegada)",
"sidebarCollapsedNavigation_description": "mostra o amaga la navegació a la barra lateral plegada",
"sidebarPlaylistList": "llista de reproducció lateral",
"sidePlayQueueStyle": "estil de la cua de reproducció lateral",
"sidePlayQueueStyle_description": "estableix l'estil de la cua de reproducció lateral",
"skipDuration": "interval de salt",
"skipDuration_description": "estableix l'interval de temps que se saltarà en fer servir els botons de saltar a la barra de reproducció",
"skipPlaylistPage": "salta la pàgina de la llista de reproducció",
"skipPlaylistPage_description": "en navegar a una llista de reproducció, obre la pàgina de cançons de la llista de reproducció en comptes de la pàgina predeterminada",
"startMinimized": "obre minimitzada",
"startMinimized_description": "obre l'aplicació a la safata del sistema",
"theme_description": "estableix el tema visual per l'aplicació",
"themeDark_description": "estableix el tema fosc per l'aplicació",
"themeLight_description": "estableix el tema clar per l'aplicació",
"transcodeNote": "tindrà efecte després d'1 (web) o 2 (mpv) cançons",
"transcodeBitrate": "taxa de bits per transcodificar",
"transcodeBitrate_description": "selecciona la taxa de bits per transcodificar. 0 significa deixar que el servidor triï",
"transcodeFormat": "format per transcodificar",
"transcodeFormat_description": "selecciona el format per transcodificar. deixeu-ho buit per deixar que el servidor decideixi",
"translationApiProvider": "proveïdor d'api de traducció",
"translationApiProvider_description": "proveïdor de l'api de traducció",
"translationApiKey": "clau de l'api de traducció",
"translationTargetLanguage": "llengua meta de traducció",
"translationTargetLanguage_description": "llengua meta per la traducció",
"trayEnabled": "mostra a la safata",
"trayEnabled_description": "mostra/oculta la icona/menú de la safata. si està desactivat, també desactiva la funcionalitat de minimitzar/sortir a la safata",
"volumeWheelStep": "increment de volum de la roda",
"volumeWheelStep_description": "la quantitat de volum a canviar quan utilitzeu la roda del ratolí sobre el controlador de volum",
"volumeWidth": "amplada del controlador de volum",
"volumeWidth_description": "l'amplada del controlador de volum",
"webAudio": "utilitza l'àudio web",
"webAudio_description": "utilitza l'àudio web. això habilita funcions avançades com Replaygain. desactiveu-ho si teniu una experiència diferent",
"replayGainClipping": "saturació de {{ReplayGain}}",
"replayGainClipping_description": "rebaixa automàticament el guany per evitar la saturació causada pel {{ReplayGain}}",
"replayGainFallback": "alternativa per {{ReplayGain}}",
"replayGainFallback_description": "guany en db que s'ha d'aplicar si el fitxer no té etiquetes de {{ReplayGain}}",
"replayGainMode": "mode de {{ReplayGain}}",
"replayGainMode_description": "ajuda el volum del guany segons els vlors de {{ReplayGain}} desats a les metadades del fitxer",
"replayGainPreamp": "preamplificador de {{ReplayGain}} (dB)",
"translationApiKey_description": "clau api per la traducció (només per serveis globals)",
"preservePitch": "mantén el to",
"preservePitch_description": "manté el to quan s'altera la velocitat de reproducció",
"windowBarStyle": "estil de la barra de la finestra",
"windowBarStyle_description": "selecciona l'estil de la barra de la finestra",
"zoom": "percentatge de zoom",
"zoom_description": "estableix el percentatge de zoom de l'aplicació",
"discordDisplayType": "tipus de pantalla d'activitat de {{discord}}",
"discordDisplayType_description": "canvia què escolteu al vostre estat",
"discordDisplayType_songname": "nom de la cançó",
"discordDisplayType_artistname": "nom de l'artista",
"hotkey_navigateHome": "ves a l'inici",
"preventSleepOnPlayback": "evitar entrar en repòs durant la reproducció",
"preventSleepOnPlayback_description": "evita que la pantalla s'adormi mentre la música es reprodueix"
},
"table": {
"column": {
"albumCount": "$t(entity.album_other)",
"artist": "$t(entity.artist_one)",
"channels": "$t(common.channel_other)",
"codec": "$t(common.codec)",
"genre": "$t(entity.genre_one)",
"size": "$t(common.size)",
"songCount": "$t(entity.track_other)",
"releaseYear": "any",
"playCount": "reproduccions",
"releaseDate": "data de llançament",
"album": "àlbum",
"albumArtist": "artista de l'àlbum",
"biography": "biografia",
"bitrate": "taxa de bits",
"bpm": "bpm",
"dateAdded": "data d'addició",
"discNumber": "disc",
"trackNumber": "pista",
"comment": "comentari",
"favorite": "preferit",
"lastPlayed": "última reproducció",
"path": "ruta",
"rating": "qualificació",
"title": "títol"
},
"config": {
"general": {
"gap": "$t(common.gap)",
"size": "$t(common.size)",
"autoFitColumns": "ajusta les columnes automàticament",
"followCurrentSong": "segueix la cançó actual",
"displayType": "tipus de visualització",
"itemGap": "espai entre elements (px)",
"itemSize": "mida dels elements (px)",
"tableColumns": "columnes de la taula"
},
"label": {
"actions": "$t(common.action_other)",
"album": "$t(entity.album_one)",
"albumArtist": "$t(entity.albumArtist_one)",
"artist": "$t(entity.artist_one)",
"biography": "$t(common.biography)",
"bitrate": "$t(common.bitrate)",
"bpm": "$t(common.bpm)",
"channels": "$t(common.channel_other)",
"codec": "$t(common.codec)",
"duration": "$t(common.duration)",
"favorite": "$t(common.favorite)",
"genre": "$t(entity.genre_one)",
"note": "$t(common.note)",
"owner": "$t(common.owner)",
"path": "$t(common.path)",
"rating": "$t(common.rating)",
"size": "$t(common.size)",
"songCount": "$t(entity.track_other)",
"title": "$t(common.title)",
"year": "$t(common.year)",
"playCount": "compte de reproduccions",
"releaseDate": "data de llançament",
"dateAdded": "data d'addició",
"trackNumber": "número de pista",
"discNumber": "número de disc",
"lastPlayed": "última reproducció",
"rowIndex": "índex de files",
"titleCombined": "$t(common.title) (combinat)"
},
"view": {
"table": "taula",
"card": "targeta",
"grid": "quadrícula",
"list": "llista",
"poster": "pòster"
}
}
},
"filter": {
"fromYear": "des de l'any",
"releaseYear": "any de llançament",
"toYear": "fins a l'any",
"album": "$t(entity.album_one)",
"albumArtist": "$t(entity.albumArtist_one)",
"artist": "$t(entity.artist_one)",
"biography": "biografia",
"bitrate": "taxa de bits",
"bpm": "bpm",
"channels": "$t(common.channel_other)",
"comment": "comentari",
"disc": "disc",
"duration": "durada",
"genre": "$t(entity.genre_one)",
"id": "identificador",
"name": "nom",
"note": "nota",
"owner": "$t(common.owner)",
"random": "aleatori",
"rating": "valoració",
"search": "cercar",
"title": "títol",
"playCount": "compte de reproduccions",
"releaseDate": "data de llançament",
"mostPlayed": "els més reproduïts",
"dateAdded": "data d'addició",
"trackNumber": "pista",
"communityRating": "valoració de la comunitat",
"criticRating": "valoració dels crítics",
"recentlyAdded": "afegit recentment",
"recentlyPlayed": "reproduït recentment",
"recentlyUpdated": "actualitzat recentment",
"albumCount": "nombre de $t(entity.album_other)",
"favorited": "preferits",
"isCompilation": "és una compilació",
"isFavorited": "és un preferit",
"isPublic": "és públic",
"isRated": "està qualificat",
"isRecentlyPlayed": "s'ha reproduït fa poc",
"lastPlayed": "última reproducció",
"path": "ruta",
"songCount": "nombre de cançons"
},
"player": {
"muted": "silenciat",
"repeat": "repetició d'una pista",
"skip": "saltar",
"stop": "parar",
"queue_clear": "buidar la cua",
"viewQueue": "veure la cua",
"playbackFetchInProgress": "carregant cançons…",
"playbackFetchNoResults": "no s'han trobat cançons",
"playbackSpeed": "velocitat de reproducció",
"playSimilarSongs": "reproduir cançons similars",
"repeat_off": "repetició desactivada",
"repeat_all": "repetició",
"shuffle": "reproducció aleatòria",
"shuffle_off": "reproducció aleatòria desactivada",
"addLast": "afegeix al final",
"addNext": "afegeix a continuació",
"favorite": "marcar com a preferida",
"mute": "silencia",
"next": "següent",
"play": "reprodueix",
"playbackFetchCancel": "està trigant bastant... tanqueu la notificació per cancel·lar",
"playRandom": "reproducció a l'atzar",
"previous": "anterior",
"queue_moveToBottom": "mou la selecció a l'inici",
"queue_moveToTop": "mou la selecció al final",
"queue_remove": "elimina la selecció",
"skip_back": "salta enrere",
"skip_forward": "salta endavant",
"toggleFullscreenPlayer": "activa el reproductor de pantalla completa",
"unfavorite": "elimina de preferits",
"pause": "pausa"
},
"error": {
"credentialsRequired": "credencials requerides",
"genericError": "s'ha produït un error",
"invalidServer": "servidor no vàlid",
"localFontAccessDenied": "accés denegat als tipus de lletra locals",
"networkError": "s'ha produït un error de xarxa",
"openError": "no s'ha pogut obrir el fitxer",
"remotePortError": "s'ha produït un error en intentar configurar el port del servidor remot",
"serverNotSelectedError": "no s'ha seleccionat cap servidor",
"sessionExpiredError": "la sessió ha caducat",
"systemFontError": "s'ha produït un error en intentar obtenir els tipus de lletra del sistema",
"remoteEnableError": "s'ha produït un error en intentar $t(common.enable) el servidor remot",
"remotePortWarning": "reiniciar el servidor per aplicar el nou port",
"serverRequired": "servidor requerit",
"apiRouteError": "no es pot encaminar la sol·licitud",
"audioDeviceFetchError": "hi ha hagut un error en obtenir els dispositius d'àudio",
"authenticationFailed": "autenticació fallida",
"badAlbum": "esteu veient aquesta pàgina perquè aquesta cançó no és part de cap àlbum. aquest problema pot passar si teniu una cançó al nivell superior de la vostra carpeta de música. jellyfin només agrupa pistes si són en una carpeta.",
"badValue": "l'opció \"{{value}}\"és invàlida. aquest valor ja no existeix",
"loginRateError": "massa intents d'inici de sessió, intenteu-ho de nou d'aquí uns segons",
"mpvRequired": "Cal l'MPV",
"notificationDenied": "s'han negat els permisos per enviar notificacions. aquesta opció no té cap efecte",
"playbackError": "hi ha hagut un error en intentar reproduir el mitjà",
"remoteDisableError": "hi ha hagut un error en intentar $t(common.disable) el servidor remot",
"endpointNotImplementedError": "el punt final {{endpoint}} no està implementat per {{serverType}}"
}
}
+51 -12
View File
@@ -4,7 +4,7 @@
"stop": "zastavit",
"repeat": "opakovat",
"queue_remove": "odebrat vybrané",
"playRandom": "přehrát náhodné",
"playRandom": "přehrát náhodně",
"skip": "přeskočit",
"previous": "předchozí",
"toggleFullscreenPlayer": "přepnout celoobrazovkový přehrávač",
@@ -124,7 +124,7 @@
"hotkey_toggleShuffle": "přepnutí náhodného přehrávání",
"theme": "motiv",
"playbackStyle_description": "nastavení způsobu přehrávání pro přehrávač zvuku",
"discordRichPresence_description": "povolit stav přehrávání v {{discord}} rich presence. Klíče obrázků jsou: {{icon}}, {{playing}}, {{paused}} ",
"discordRichPresence_description": "povolit stav přehrávání v {{discord}} rich presence. Klíče obrázků jsou: {{icon}}, {{playing}}, {{paused}}",
"mpvExecutablePath": "cesta ke spustitelnému souboru mpv",
"audioDevice": "zvukové zařízení",
"hotkey_rate2": "hodnocení 2 hvězdami",
@@ -171,7 +171,7 @@
"hotkey_zoomOut": "oddálení",
"hotkey_unfavoriteCurrentSong": "zrušení oblíbení u $t(common.currentSong)",
"hotkey_rate0": "vymazání hodnocení",
"discordApplicationId": "aplikační id pro {{discord}}",
"discordApplicationId": "id aplikace pro {{discord}}",
"applicationHotkeys_description": "nastavení klávesových zkratek aplikace. přepněte pole pro nastavení jako globální zkratku (pouze na počítači)",
"floatingQueueArea_description": "zobrazit ikonu přejetí myší na pravé straně obrazovky pro zobrazení fronty",
"hotkey_volumeMute": "ztlumení",
@@ -259,7 +259,28 @@
"lastfmApiKey": "klíč API {{lastfm}}",
"lastfmApiKey_description": "klíč API pro {{lastfm}}. vyžadováno pro obaly alb",
"discordServeImage": "načítat obrázky {{discord}} ze serveru",
"discordServeImage_description": "sdílet obaly alb pro {{discord}} rich presence ze samotného serveru, dostupné pouze pro jellyfin a navidrome"
"discordServeImage_description": "sdílet obaly alb pro {{discord}} rich presence ze samotného serveru, dostupné pouze pro jellyfin a navidrome",
"lastfm": "zobrazit odkazy na last.fm",
"lastfm_description": "na stránkách umělců a alb zobrazit odkazy na last.fm",
"musicbrainz": "zobrazit odkazy na musicbrainz",
"musicbrainz_description": "na stránkách umělců a alb, kde existuje mbid, zobrazit odkazy na musicbrainz",
"neteaseTranslation": "Povolit překlady NetEase",
"neteaseTranslation_description": "Pokud je povoleno, načte a zobrazí přeložené texty ze služby NetEase, pokud jsou dostupné.",
"preferLocalLyrics": "preferovat místní texty",
"preferLocalLyrics_description": "preferovat místní texty před vzdálenými, pokud jsou dostupné",
"discordPausedStatus": "zobrazit rich presence při pozastavení",
"discordPausedStatus_description": "pokud je povoleno, bude při pozastavení přehrávače zobrazen stav",
"preservePitch": "zachovat výšku",
"preservePitch_description": "zachová výšku při úpravě rychlosti přehrávání",
"notify": "povolit oznámení o skladbách",
"notify_description": "zobrazit oznámení při změně aktuální skladby",
"discordDisplayType": "typ zobrazení stavu {{discord}}",
"discordDisplayType_description": "změní, co posloucháte, ve vašem stavu",
"discordDisplayType_songname": "název skladby",
"discordDisplayType_artistname": "jména umělců",
"hotkey_navigateHome": "přejít domů",
"preventSleepOnPlayback": "zabránit uspání při přehrávání",
"preventSleepOnPlayback_description": "zabránit uspání displeje během přehrávání hudby"
},
"action": {
"editPlaylist": "upravit $t(entity.playlist_one)",
@@ -367,7 +388,7 @@
"size": "velikost",
"biography": "biografie",
"note": "poznámka",
"albumGain": "zisk (gain) alba",
"albumGain": "gain alba",
"albumPeak": "vrchol alba",
"close": "zavřít",
"mbid": "ID MusicBrainz",
@@ -379,14 +400,20 @@
"preview": "náhled",
"translation": "překlad",
"additionalParticipants": "další přispívající",
"tags": "štítky"
"tags": "štítky",
"viewReleaseNotes": "zobrazit seznam změn",
"newVersion": "byla nainstalována nová verze ({{version}})",
"bitDepth": "bitová hloubka",
"sampleRate": "vzorkovací frekvence"
},
"table": {
"config": {
"view": {
"card": "karta",
"table": "tabulka",
"poster": "plakát"
"poster": "plakát",
"list": "seznam",
"grid": "mřížka"
},
"general": {
"displayType": "typ zobrazení",
@@ -479,7 +506,8 @@
"badAlbum": "tuto stránku vidíte, protože tato skladba není součástí alba. tento problém může nastat, pokud máte skladbu na nejvyšší úrovni vaší složky s hudbou. jellyfin seskupuje skladby pouze, pokud se nacházejí ve složce.",
"networkError": "vyskytla se chyba sítě",
"openError": "nepodařilo se otevřít soubor",
"badValue": "neplatná možnost „{{value}}“. tato možnost již neexistuje"
"badValue": "neplatná možnost „{{value}}“. tato možnost již neexistuje",
"notificationDenied": "oprávnění k posílání oznámení byla zamítnuta. toto nastavení nemá žádný vliv"
},
"filter": {
"mostPlayed": "nejvíce přehráváno",
@@ -538,7 +566,8 @@
"home": "$t(common.home)",
"artists": "$t(entity.artist_other)",
"albumArtists": "$t(entity.albumArtist_other)",
"shared": "$t(entity.playlist_other) sdíleny"
"shared": "$t(entity.playlist_other) sdíleny",
"myLibrary": "moje knihovna"
},
"fullscreenPlayer": {
"config": {
@@ -573,7 +602,9 @@
"openBrowserDevtools": "otevřít vývojářské nástroje",
"quit": "$t(common.quit)",
"goBack": "přejít zpět",
"goForward": "přejít vpřed"
"goForward": "přejít vpřed",
"privateModeOff": "vypnout soukromý režim",
"privateModeOn": "zapnout soukromý režim"
},
"contextMenu": {
"addToPlaylist": "$t(action.addToPlaylist)",
@@ -597,7 +628,9 @@
"playSimilarSongs": "$t(player.playSimilarSongs)",
"download": "stáhnout",
"playShuffled": "$t(player.shuffle)",
"moveToNext": "$t(action.moveToNext)"
"moveToNext": "$t(action.moveToNext)",
"goToAlbum": "přejít na $t(entity.album_one)",
"goToAlbumArtist": "přejít na $t(entity.albumArtist_one)"
},
"home": {
"mostPlayed": "nejpřehrávanější",
@@ -714,7 +747,8 @@
},
"queryEditor": {
"input_optionMatchAll": "shoda všeho",
"input_optionMatchAny": "shoda libovolného"
"input_optionMatchAny": "shoda libovolného",
"title": "editor dotazů"
},
"lyricSearch": {
"input_name": "$t(common.name)",
@@ -733,6 +767,11 @@
"expireInvalid": "čas vypršení musí být v budoucnosti",
"setExpiration": "nastavit vypršení",
"createFailed": "nepodařilo se vytvořit sdílení (je sdílení povoleno?)"
},
"privateMode": {
"enabled": "soukromý režim povolen, stav přehrávání je nyní skryt před externími integracemi",
"disabled": "soukromý režim povolen, stav přehrávání je nyní viditelný pro externími integrace",
"title": "soukromý režim"
}
},
"entity": {
+45 -12
View File
@@ -20,7 +20,8 @@
"openIn": {
"lastfm": "In Last.fm öffnen",
"musicbrainz": "In MusicBrainz öffnen"
}
},
"moveToNext": "nach unten verschieben"
},
"common": {
"backward": "rückwärts",
@@ -113,7 +114,12 @@
"trackPeak": "Track-Spitzenpegel",
"codec": "Codec",
"albumPeak": "Album-Spitzenpegel",
"albumGain": "Album-Pegelverstärkung"
"albumGain": "Album-Pegelverstärkung",
"tags": "tags",
"viewReleaseNotes": "Release Notes anzeigen",
"newVersion": "eine neue Version wurde installiert ({{version}})",
"bitDepth": "Bittiefe",
"sampleRate": "Abtastrate"
},
"error": {
"remotePortWarning": "Starten Sie den Server neu, um den neuen Port anzuwenden",
@@ -137,7 +143,9 @@
"loginRateError": "Zu viele Anmeldeversuche, bitte versuche es in einigen Sekunden erneut",
"badAlbum": "Sie sehen diese Seite, weil dieses Lied nicht Teil eines Albums ist. Wahrscheinlich sehen Sie dieses Problem, wenn Sie einen Song in Ihrem Musikordner auf oberster Ebene haben. Jellyfin gruppiert nur Songs, wenn sie sich in einem Ordner befinden.",
"networkError": "ein Netzwerkfehler ist aufgetreten",
"openError": "datei kann nicht geöffnet werden"
"openError": "datei kann nicht geöffnet werden",
"badValue": "ungültige option \"{{value}}\". Dieser Wert existiert nicht mehr",
"notificationDenied": "Berechtigungen über Benachrichtigungen wurden verweigert. Diese Einstellung hat keinen Effekt"
},
"filter": {
"mostPlayed": "Meistgespielt",
@@ -237,7 +245,8 @@
"description": "Beschreibung",
"setExpiration": "Ablaufdatum setzen",
"expireInvalid": "Ablaufdatum muss in der Zukunft liegen",
"allowDownloading": "Herunterladen zulassen"
"allowDownloading": "Herunterladen zulassen",
"success": "Link in die Zwischenablage kopiert (oder hier klicken um zu öffnen)"
}
},
"entity": {
@@ -357,12 +366,15 @@
"lyricAlignment": "Songtext-Ausrichtung",
"useImageAspectRatio": "Bildseitenverhältnis verwenden",
"lyricGap": "Songtext-Lücke",
"dynamicIsImage": "Hintergrundbild aktivieren"
"dynamicIsImage": "Hintergrundbild aktivieren",
"dynamicImageBlur": "Größe der Bildunschärfe",
"lyricOffset": "Zeitversetzung des Liedtexts (ms)"
},
"upNext": "als nächstes",
"lyrics": "Songtexte",
"related": "Ähnliche",
"noLyrics": "Keine Liedtexte gefunden"
"noLyrics": "Keine Liedtexte gefunden",
"visualizer": "visualizer"
},
"appMenu": {
"selectServer": "Server auswählen",
@@ -415,7 +427,8 @@
"removeFromQueue": "$t(action.removeFromQueue)",
"playShuffled": "$t(player.shuffle)",
"download": "Download",
"playSimilarSongs": "$t(player.playSimilarSongs)"
"playSimilarSongs": "$t(player.playSimilarSongs)",
"moveToNext": "$t(action.moveToNext)"
},
"sidebar": {
"nowPlaying": "läuft gerade",
@@ -429,7 +442,8 @@
"home": "$t(common.home)",
"artists": "$t(entity.artist_other)",
"albumArtists": "$t(entity.albumArtist_other)",
"shared": "$t(entity.playlist_other) geteilt"
"shared": "$t(entity.playlist_other) geteilt",
"myLibrary": "meine bibliothek"
},
"setting": {
"playbackTab": "Wiedergabe",
@@ -513,10 +527,11 @@
"unfavorite": "Aus Favoriten entfernen",
"skip_forward": "Vorspulen",
"skip": "Überspringen",
"playSimilarSongs": "Ähnliche Lieder abspielen"
"playSimilarSongs": "Ähnliche Lieder abspielen",
"viewQueue": "Warteschlange anzeigen"
},
"setting": {
"audioDevice_description": "Wählen Sie das Audiogerät aus, das für die Wiedergabe verwendet werden soll (nur Webplayer).",
"audioDevice_description": "Wählen Sie das Audiogerät aus, das für die Wiedergabe verwendet werden soll (nur Webplayer)",
"audioExclusiveMode": "Audio-Exklusivmodus",
"audioDevice": "Audiogerät",
"accentColor": "Akzentfarbe",
@@ -670,12 +685,30 @@
"windowBarStyle_description": "Wähle den Stil der Windows-Leiste",
"hotkey_toggleCurrentSongFavorite": "$t(common.currentSong) zu Favoriten hinzufügen",
"clearQueryCache_description": "\"Weiches\" Zurücksetzen. Dies wird Playlisten, Musik-Metadaten und gespeicherte Liedtexte zurücksetzen, Zugangsinformationen und zwischengespeicherte Bilder werden behalten",
"discordRichPresence_description": "Zeige deinen Wiedergabe-Status in {{discord}} als rich presence an. Angezeigte Bilder sind: {{icon}}, {{playing}}, und {{paused}} ",
"discordRichPresence_description": "Zeige deinen Wiedergabe-Status in {{discord}} als rich presence an. Angezeigte Bilder sind: {{icon}}, {{playing}}, und {{paused}}",
"clearCache": "Browser-Zwischenspeicher löschen",
"clearQueryCache": "feishins Zwischenspeicher leeren",
"clearCache_description": "Hartes Zurücksetzen. Neben feishins Zwischenspeicher wird auch der des Browsers gelöscht (Bilder und andere Daten). Zugangsinformationen und Einstellungen werden behalten",
"sidePlayQueueStyle": "Wiedergabelistenstil in der Seitenleiste",
"zoom_description": "Setzt den Zoom (in %) für das Programm",
"zoom": "Zoom"
"zoom": "Zoom",
"albumBackground": "Album Hintergrund",
"customCss": "Benutzerdefiniert css",
"homeConfiguration": "Startseite Konfiguration",
"lastfmApiKey": "{{lastfm}} API-Schlüssel",
"lastfmApiKey_description": "Der API-Schlüssel für {{lastfm}}. wird für benötigt",
"discordListening": "Status als hört zu anzeigen",
"discordListening_description": "Status als hört zu statt als spielt anzeigen",
"lastfm": "zeige last.fm links",
"lastfm_description": "zeige links zu last.fm auf dem Künstler/Album-Seiten",
"musicbrainz": "Zeig musicbrainz links",
"customCssEnable": "aktiviere Benutzerdefinierte css",
"albumBackground_description": "fügt ein Hintergrundbild für die Albumseiten hinzu, welche das Albumcover zeigen",
"albumBackgroundBlur": "Größe der Album-Bildunschärfe",
"albumBackgroundBlur_description": "passt die Stärke der Unschärfe an, welche auf das Hintergrundbild des Albums angewandt wird",
"clearCacheSuccess": "Cache erfolgreich geleert",
"contextMenu": "Kontextmenü-Einstellungen (Rechtsklick)",
"customCssEnable_description": "ermöglicht das Schreiben benutzerdefinierten CSS.",
"doubleClickBehavior": "bei Doppelklick alle gesuchten Tracks zur Warteschlange hinzufügen"
}
}
+56 -2
View File
@@ -28,12 +28,15 @@
"action_other": "actions",
"add": "add",
"additionalParticipants": "additional participants",
"newVersion": "a new version has been installed ({{version}})",
"viewReleaseNotes": "view release notes",
"albumGain": "album gain",
"albumPeak": "album peak",
"areYouSure": "are you sure?",
"ascending": "ascending",
"backward": "backward",
"biography": "biography",
"bitDepth": "bit depth",
"bitrate": "bitrate",
"bpm": "bpm",
"cancel": "cancel",
@@ -97,6 +100,7 @@
"resetToDefault": "reset to default",
"restartRequired": "restart required",
"right": "right",
"sampleRate": "sample rate",
"save": "save",
"saveAndReplace": "save and replace",
"saveAs": "save as",
@@ -169,6 +173,7 @@
"loginRateError": "too many login attempts, please try again in a few seconds",
"mpvRequired": "MPV required",
"networkError": "a network error occurred",
"notificationDenied": "permissions for notifications were denied. this setting has no effect",
"openError": "could not open file",
"playbackError": "an error occurred when trying to play the media",
"remoteDisableError": "an error occurred when trying to $t(common.disable) the remote server",
@@ -232,6 +237,8 @@
"input_legacyAuthentication": "enable legacy authentication",
"input_name": "server name",
"input_password": "password",
"input_preferInstantMix": "prefer instant mix",
"input_preferInstantMixDescription": "only use instant mix to get similar songs. useful if you have plugins that modify this behavior",
"input_savePassword": "save password",
"input_url": "url",
"input_username": "username",
@@ -268,6 +275,7 @@
"title": "lyric search"
},
"queryEditor": {
"title": "query editor",
"input_optionMatchAll": "match all",
"input_optionMatchAny": "match any"
},
@@ -282,6 +290,11 @@
"updateServer": {
"success": "server updated successfully",
"title": "update server"
},
"privateMode": {
"enabled": "private mode enabled, playback status is now hidden from external integrations",
"disabled": "private mode disabled, playback status is now visible to enabled external integrations",
"title": "private mode"
}
},
"page": {
@@ -315,6 +328,8 @@
"goBack": "go back",
"goForward": "go forward",
"manageServers": "manage servers",
"privateModeOff": "turn off private mode",
"privateModeOn": "turn on private mode",
"openBrowserDevtools": "open browser devtools",
"quit": "$t(common.quit)",
"selectServer": "select server",
@@ -351,6 +366,8 @@
"setRating": "$t(action.setRating)",
"playShuffled": "$t(player.shuffle)",
"shareItem": "share item",
"goToAlbum": "go to $t(entity.album_one)",
"goToAlbumArtist": "go to $t(entity.albumArtist_one)",
"showDetails": "get info"
},
"fullscreenPlayer": {
@@ -394,6 +411,7 @@
"mostPlayed": "most played",
"newlyAdded": "newly added releases",
"recentlyPlayed": "recently played",
"recentlyReleased": "recently released",
"title": "$t(common.home)"
},
"itemDetail": {
@@ -421,6 +439,7 @@
"folders": "$t(entity.folder_other)",
"genres": "$t(entity.genre_other)",
"home": "$t(common.home)",
"myLibrary": "my library",
"nowPlaying": "now playing",
"playlists": "$t(entity.playlist_other)",
"search": "$t(common.search)",
@@ -478,6 +497,10 @@
"albumBackgroundBlur_description": "adjusts the amount of blur applied to the album background image",
"applicationHotkeys": "application hotkeys",
"applicationHotkeys_description": "configure application hotkeys. toggle the checkbox to set as a global hotkey (desktop only)",
"artistBackground": "artist background image",
"artistBackground_description": "adds a background image for artist pages containing the artist art",
"artistBackgroundBlur": "artist background image blur size",
"artistBackgroundBlur_description": "adjusts the amount of blur applied to the artist background image",
"artistConfiguration": "album artist page configuration",
"artistConfiguration_description": "configure what items are shown, and in what order, on the album artist page",
"audioDevice": "audio device",
@@ -507,19 +530,33 @@
"customFontPath": "custom font path",
"customFontPath_description": "sets the path to the custom font to use for the application",
"disableAutomaticUpdates": "disable automatic updates",
"releaseChannel_optionLatest": "latest",
"releaseChannel_optionBeta": "beta",
"releaseChannel": "release channel",
"releaseChannel_description": "choose between stable releases or beta releases for automatic updates",
"disableLibraryUpdateOnStartup": "disable checking for new versions on startup",
"discordApplicationId": "{{discord}} application id",
"discordApplicationId_description": "the application id for {{discord}} rich presence (defaults to {{defaultId}})",
"discordPausedStatus": "show rich presence when paused",
"discordPausedStatus_description": "when enabled, status will show when player is paused",
"discordIdleStatus": "show rich presence idle status",
"discordIdleStatus_description": "when enabled, update status while player is idle",
"discordListening": "show status as listening",
"discordListening_description": "show status as listening instead of playing",
"discordRichPresence": "{{discord}} rich presence",
"discordRichPresence_description": "enable playback status in {{discord}} rich presence. Image keys are: {{icon}}, {{playing}}, and {{paused}} ",
"discordRichPresence_description": "enable playback status in {{discord}} rich presence. Image keys are: {{icon}}, {{playing}}, and {{paused}}",
"discordServeImage": "serve {{discord}} images from server",
"discordServeImage_description": "share cover art for {{discord}} rich presence from server itself, only available for jellyfin and navidrome",
"discordServeImage_description": "share cover art for {{discord}} rich presence from server itself, only available for jellyfin and navidrome. {{discord}} uses a bot to fetch images, so your server must be reachable from the public internet.",
"discordUpdateInterval": "{{discord}} rich presence update interval",
"discordUpdateInterval_description": "the time in seconds between each update (minimum 15 seconds)",
"discordDisplayType": "{{discord}} presence display type",
"discordDisplayType_description": "changes what you are listening to in your status",
"discordDisplayType_songname": "song name",
"discordDisplayType_artistname": "artist name(s)",
"discordLinkType": "{{discord}} presence links",
"discordLinkType_description": "adds external links to {{lastfm}} or {{musicbrainz}} to the song and artist fields in {{discord}} rich presence. {{musicbrainz}} is the most accurate but requires tags and doesn't provide artist links while {{lastfm}} should always provide a link. makes no extra network requests",
"discordLinkType_none": "$t(common.none)",
"discordLinkType_mbz_lastfm": "{{musicbrainz}} with {{lastfm}} fallback",
"doubleClickBehavior": "queue all searched tracks when double clicking",
"doubleClickBehavior_description": "if true, all matching tracks in a track search will be queued. otherwise, only the clicked one will be queued",
"enableRemote": "enable remote control server",
@@ -532,6 +569,8 @@
"floatingQueueArea_description": "display a hover icon on the right side of the screen to view the play queue",
"followLyric": "follow current lyric",
"followLyric_description": "scroll the lyric to the current playing position",
"preferLocalLyrics": "prefer local lyrics",
"preferLocalLyrics_description": "prefer local lyrics over remote lyrics when available",
"font": "font",
"font_description": "sets the font to use for the application",
"fontType": "font type",
@@ -556,6 +595,7 @@
"hotkey_favoritePreviousSong": "favorite $t(common.previousSong)",
"hotkey_globalSearch": "global search",
"hotkey_localSearch": "in-page search",
"hotkey_navigateHome": "navigate to home",
"hotkey_playbackNext": "next track",
"hotkey_playbackPause": "pause",
"hotkey_playbackPlay": "play",
@@ -587,6 +627,8 @@
"imageAspectRatio_description": "if enabled, cover art will be shown using their native aspect ratio. for art that is not 1:1, the remaining space will be empty",
"language": "language",
"language_description": "sets the language for the application ($t(common.restartRequired))",
"lastfm": "show last.fm links",
"lastfm_description": "show links to last.fm on artist/album pages",
"lastfmApiKey": "{{lastfm}} API key",
"lastfmApiKey_description": "the API key for {{lastfm}}. required for cover art",
"lyricFetch": "fetch lyrics from the internet",
@@ -595,6 +637,8 @@
"lyricFetchProvider_description": "select the providers to fetch lyrics from. the order of the providers is the order in which they will be queried",
"lyricOffset": "lyric offset (ms)",
"lyricOffset_description": "offset the lyric by the specified amount of milliseconds",
"notify": "enable song notifications",
"notify_description": "show notifications when changing the current song",
"minimizeToTray": "minimize to tray",
"minimizeToTray_description": "minimize the application to the system tray",
"minimumScrobblePercentage": "minimum scrobble duration (percentage)",
@@ -605,6 +649,10 @@
"mpvExecutablePath_description": "sets the path to the mpv executable. if left empty, the default path will be used",
"mpvExtraParameters": "mpv parameters",
"mpvExtraParameters_help": "one per line",
"musicbrainz": "show musicbrainz links",
"musicbrainz_description": "show links to musicbrainz on artist/album pages, where mbid exists",
"neteaseTranslation": "Enable NetEase translations",
"neteaseTranslation_description": "When enabled, fetches and displays translated lyrics from NetEase if available.",
"passwordStore": "passwords/secret store",
"passwordStore_description": "what password/secret store to use. change this if you are having issues storing passwords.",
"playbackStyle": "playback style",
@@ -664,6 +712,8 @@
"skipPlaylistPage_description": "when navigating to a playlist, go to the playlist song list page instead of the default page",
"startMinimized": "start minimized",
"startMinimized_description": "start the application in system tray",
"preventSleepOnPlayback": "prevent sleep on playback",
"preventSleepOnPlayback_description": "prevent the display from sleeping while music is playing",
"theme": "theme",
"theme_description": "sets the theme to use for the application",
"themeDark": "theme (dark)",
@@ -693,6 +743,8 @@
"volumeWidth_description": "the width of the volume slider",
"webAudio": "use web audio",
"webAudio_description": "use web audio. this enables advanced features like replaygain. disable if you experience otherwise",
"preservePitch": "preserve pitch",
"preservePitch_description": "preserves pitch when modifying playback speed",
"windowBarStyle": "window bar style",
"windowBarStyle_description": "select the style of the window bar",
"zoom": "zoom percentage",
@@ -768,6 +820,8 @@
},
"view": {
"card": "card",
"grid": "grid",
"list": "list",
"poster": "poster",
"table": "table"
}
+48 -9
View File
@@ -120,7 +120,7 @@
"hotkey_toggleShuffle": "alterna aleatorio",
"theme": "tema",
"playbackStyle_description": "selecciona el estilo de reproducción a usar por el reproductor de audio",
"discordRichPresence_description": "activa el estado de reproducción en el estado de actividad de {{discord}}. Las teclas de imagen son: {{icon}}, {{playing}}, y {{paused}} ",
"discordRichPresence_description": "activa el estado de reproducción en el estado de actividad de {{discord}}. Las teclas de imagen son: {{icon}}, {{playing}}, y {{paused}}",
"mpvExecutablePath": "ruta del ejecutable mpv",
"audioDevice": "dispositivo de audio",
"hotkey_rate2": "calificar con 2 estrellas",
@@ -259,7 +259,28 @@
"lastfmApiKey_description": "la clave API para {{lastfm}}. Requerida para la portada",
"lastfmApiKey": "Clave API para {{lastfm}}",
"discordServeImage": "Servir imágenes de {{discord}} desde el servidor",
"discordServeImage_description": "Comparte el arte de la portada para el estado de actividad de {{discord}} desde el propio servidor, solo disponible para Jellyfin y Navidrome"
"discordServeImage_description": "Comparte el arte de la portada para el estado de actividad de {{discord}} desde el propio servidor, solo disponible para Jellyfin y Navidrome",
"lastfm": "Mostrar enlaces de last.fm",
"lastfm_description": "Muestra enlaces a last.fm en las páginas de artistas/álbumes",
"musicbrainz": "Mostrar enlaces de MusicBrainz",
"musicbrainz_description": "Muestra enlaces a MusicBrainz en las páginas de artistas/álbumes, donde exista mbid",
"neteaseTranslation": "Activar traducciones de NetEase",
"neteaseTranslation_description": "Cuando se habilita, busca y muestra letras traducidas desde NetEase si está disponible.",
"preferLocalLyrics_description": "Prefiere letras locales sobre letras remotas cuando esté disponible",
"preferLocalLyrics": "Preferir letras locales",
"discordPausedStatus": "Mostrar estado de actividad cuando esté en pausa",
"discordPausedStatus_description": "Cuando está activado, el estado mostrará cuando el reproductor esté en pausa",
"preservePitch": "Mantener el tono",
"preservePitch_description": "Mantiene el tono cuando se modifica la velocidad de reproducción",
"notify": "Activar notificaciones de canciones",
"notify_description": "Muestra notificaciones cuando se cambia la canción actual",
"discordDisplayType_songname": "Nombre de la canción",
"discordDisplayType_artistname": "Nombre(s) del artista(s)",
"discordDisplayType_description": "Cambia qué estás escuchando en tu estado",
"discordDisplayType": "Tipo de pantalla de actividad de {{discord}}",
"hotkey_navigateHome": "Navegar a inicio",
"preventSleepOnPlayback": "Evitar entrar en reposo durante la reproducción",
"preventSleepOnPlayback_description": "Evita que la pantalla entre en reposo mientras se está reproduciendo música"
},
"action": {
"editPlaylist": "editar $t(entity.playlist_one)",
@@ -379,7 +400,11 @@
"preview": "Vista previa",
"translation": "traducción",
"additionalParticipants": "Participantes adicionales",
"tags": "Etiquetas"
"tags": "Etiquetas",
"newVersion": "Una nueva versión ha sido instalada ({{version}})",
"viewReleaseNotes": "Ver notas de lanzamiento",
"bitDepth": "Profundidad de bit",
"sampleRate": "Frecuencia de muestreo"
},
"error": {
"remotePortWarning": "reiniciar el servidor para aplicar el nuevo puerto",
@@ -404,7 +429,8 @@
"badAlbum": "Estás viendo esta página porque esta canción no forma parte de un álbum. Este problema puede ocurrir si tienes una canción en el nivel superior de tu carpeta de música. Jellyfin solo agrupa pistas si están en una carpeta.",
"networkError": "Ocurrió un error de red",
"openError": "No se pudo abrir el archivo",
"badValue": "Opción inválida \"{{value}}\". Este valor ya no existe"
"badValue": "Opción inválida \"{{value}}\". Este valor ya no existe",
"notificationDenied": "Se denegaron los permisos para notificaciones. Esta configuración no tiene efecto"
},
"filter": {
"mostPlayed": "más reproducido",
@@ -463,7 +489,8 @@
"home": "$t(common.home)",
"artists": "$t(entity.artist_other)",
"albumArtists": "$t(entity.albumArtist_other)",
"shared": "compartido $t(entity.playlist_other)"
"shared": "compartido $t(entity.playlist_other)",
"myLibrary": "Mi biblioteca"
},
"appMenu": {
"selectServer": "seleccionar servidor",
@@ -475,7 +502,9 @@
"openBrowserDevtools": "abrir herramientas de desarrollador del navegador",
"quit": "$t(common.quit)",
"goBack": "retroceder",
"goForward": "avanzar"
"goForward": "avanzar",
"privateModeOff": "Apagar modo privado",
"privateModeOn": "Encender modo privado"
},
"contextMenu": {
"addToPlaylist": "$t(action.addToPlaylist)",
@@ -499,7 +528,9 @@
"playSimilarSongs": "$t(player.playSimilarSongs)",
"download": "descargar",
"playShuffled": "$t(player.shuffle)",
"moveToNext": "$t(action.moveToNext)"
"moveToNext": "$t(action.moveToNext)",
"goToAlbum": "Ir a $t(entity.album_one)",
"goToAlbumArtist": "Ir a $t(entity.albumArtist_one)"
},
"home": {
"mostPlayed": "más reproducidos",
@@ -649,7 +680,8 @@
},
"queryEditor": {
"input_optionMatchAll": "coincidir todos",
"input_optionMatchAny": "coincidir cualquiera"
"input_optionMatchAny": "coincidir cualquiera",
"title": "Editor de consultas"
},
"shareItem": {
"createFailed": "No se pudo crear el recurso compartido (¿está habilitado el uso compartido?)",
@@ -658,6 +690,11 @@
"setExpiration": "Establecer expiración",
"success": "Enlace de compartición copiado al portapapeles (o pulsa aquí para abrir)",
"expireInvalid": "La expiración debe ser en el futuro"
},
"privateMode": {
"enabled": "Modo privado activado, el estado de reproducción ahora está oculto de integraciones externas",
"disabled": "Modo privado desactivado, el estado de reproducción ahora es visible a las integraciones externas habilitadas",
"title": "Modo privado"
}
},
"table": {
@@ -731,7 +768,9 @@
"view": {
"card": "tarjeta",
"table": "tabla",
"poster": "cartel"
"poster": "cartel",
"list": "Lista",
"grid": "Cuadrícula"
}
}
},
+33 -7
View File
@@ -88,7 +88,13 @@
"albumGain": "albumin vahvistus (gain)",
"albumPeak": "albumin huippu (peak)",
"trackGain": "raidan vahvistus (gain)",
"trackPeak": "kappaleen huippu (peak)"
"trackPeak": "kappaleen huippu (peak)",
"additionalParticipants": "muut osallistujat",
"tags": "tägit",
"newVersion": "uusi versio on asennettu ({{version}})",
"viewReleaseNotes": "katsele julkaisutietoja",
"bitDepth": "bittisyvyys",
"sampleRate": "näytteenottotaajuus"
},
"entity": {
"album_one": "albumi",
@@ -173,7 +179,9 @@
"localFontAccessDenied": "paikallisiin fontteihin pääsy on kielletty",
"playbackError": "mediaa toistaessa tapahtui virhe",
"remotePortWarning": "käynnistä palvelin uudestaan ottaaksesi uuden portin käyttöön",
"endpointNotImplementedError": "päätepiste {{endpoint}} ei ole toteutettu {{serverType}} varten"
"endpointNotImplementedError": "päätepiste {{endpoint}} ei ole toteutettu {{serverType}} varten",
"badValue": "kelpaamaton optio \"{{value}}\". tätä arvoa ei ole enää olemassa",
"notificationDenied": "luvat ilmouilmoituksia varten evättiin. tällä asetuksella ei ole vaikutusta"
},
"filter": {
"album": "$t(entity.album_one)",
@@ -276,7 +284,8 @@
},
"queryEditor": {
"input_optionMatchAny": "sovita joku",
"input_optionMatchAll": "sovita kaikki"
"input_optionMatchAll": "sovita kaikki",
"title": "kyselyeditori"
}
},
"setting": {
@@ -356,7 +365,7 @@
"doubleClickBehavior": "lisää kaikki haetut kappaleet soittojonoon tuplaklikkauksella",
"discordUpdateInterval_description": "päivitysväli sekunnteina (vähintään 15 sekunttia)",
"discordRichPresence": "{{discord}} rich presence",
"discordRichPresence_description": "ota toiston tila käyttöön {{discord}}n rich presence-toiminnossa. Kuvakkeiden avaimet ovat {{icon}}, {{playing}} ja {{paused}}. ",
"discordRichPresence_description": "ota toiston tila käyttöön {{discord}}n rich presence-toiminnossa. Kuvakkeiden avaimet ovat {{icon}}, {{playing}} ja {{paused}}",
"discordUpdateInterval": "{{discord}} rich presencen päivitysväli",
"enableRemote": "aktivoi etäohjauspalvelin",
"externalLinks_description": "ottaa ulkoiset linkit (Last.fm, MusicBrainz) artistien/albumien sivuilla",
@@ -506,7 +515,21 @@
"useSystemTheme": "käytä järjestelmän teemaa",
"volumeWheelStep": "äänenvoimakkuusrullan askel",
"discordServeImage": "jaa {{discord}} kuvat palvelimelta",
"discordServeImage_description": "jaa kansikuvat {{discord}}n rich presenceä varten suoraan palvelimelta. saatavilla vain jellyfinille ja navidromelle"
"discordServeImage_description": "jaa kansikuvat {{discord}}n rich presenceä varten suoraan palvelimelta. saatavilla vain jellyfinille ja navidromelle",
"musicbrainz_description": "näytä linkit musicbrainz sivulle artistin/albumin sivuilla, jos musicbrainz-id löytyy",
"lastfm": "näytä last.fm linkit",
"lastfm_description": "näytä linkit last.fm sivulle artistin/albumin sivuilla",
"musicbrainz": "näytä musicbrainz linkit",
"neteaseTranslation": "Ota NetEasen käännökset käyttöön",
"neteaseTranslation_description": "Käytöss ollessa noutaa ja näyttää käännetyt sanat NetEasesta, jos ne ovat saatavilla.",
"preferLocalLyrics_description": "suosi paikallisia sanoituksia ulkoisten sijasta, kun saatavilla",
"preferLocalLyrics": "suosi paikallisia sanoituksia",
"discordPausedStatus": "näytä rich presence tauotettuna",
"discordPausedStatus_description": "ollessak käytössä, status näyttää milloin soitin on tautotettuna",
"preservePitch": "säilytä sävelkorkeus",
"preservePitch_description": "säilytä sävelkorkeus toistonopeutta muokatessa",
"notify": "käytä kappaleen ilmoituksia",
"notify_description": "näytä limoituksia, kun vaihdetaan nykyistä kappaletta"
},
"page": {
"itemDetail": {
@@ -575,7 +598,8 @@
"home": "$t(common.home)",
"nowPlaying": "nyt soi",
"playlists": "$t(entity.playlist_other)",
"search": "$t(common.search)"
"search": "$t(common.search)",
"myLibrary": "oma kirjasto"
},
"setting": {
"generalTab": "yleinen",
@@ -736,7 +760,9 @@
"view": {
"table": "taulukko",
"card": "kortti",
"poster": "juliste"
"poster": "juliste",
"grid": "ruudukko",
"list": "lista"
}
},
"column": {
+90 -48
View File
@@ -12,8 +12,8 @@
"favorite": "favori",
"next": "suivant",
"shuffle": "lecture aléatoire",
"playbackFetchNoResults": "aucune chansons trouvées",
"playbackFetchInProgress": "chargement des chansons…",
"playbackFetchNoResults": "aucun titre trouvé",
"playbackFetchInProgress": "chargement des titres…",
"addNext": "ajouter ensuite",
"playbackSpeed": "vitesse de lecture",
"playbackFetchCancel": "cela prend du temps… fermez la notification pour annuler",
@@ -29,7 +29,7 @@
"skip_forward": "avancer",
"pause": "pause",
"unfavorite": "retirer des favoris",
"playSimilarSongs": "jouer des chansons similaires",
"playSimilarSongs": "jouer des titres similaires",
"viewQueue": "voir la file d'attente"
},
"action": {
@@ -60,7 +60,7 @@
"backward": "en arrière",
"increase": "augmenter",
"rating": "note",
"bpm": "bpm",
"bpm": "BPM",
"refresh": "rafraichir",
"unknown": "inconnu",
"areYouSure": "êtes-vous sûr?",
@@ -81,7 +81,7 @@
"manage": "gérer",
"limit": "limite",
"minimize": "minimiser",
"modified": "modifier",
"modified": "modifié",
"duration": "durée",
"name": "nom",
"maximize": "agrandir",
@@ -100,6 +100,9 @@
"cancel": "annuler",
"forceRestartRequired": "redémarrer pour appliquer les changements… fermer la notification pour redémarrer",
"setting": "paramètre",
"setting_one": "paramètre",
"setting_many": "",
"setting_other": "paramètres",
"version": "version",
"title": "titre",
"filter_one": "filtre",
@@ -150,7 +153,11 @@
"codec": "codec",
"translation": "traduction",
"additionalParticipants": "participants additionnels",
"tags": "tags"
"tags": "tags",
"newVersion": "une nouvelle version vient d'être installée ({{version}})",
"viewReleaseNotes": "voir la note de version",
"sampleRate": "taux d'échantillonnage",
"bitDepth": "bit par échantillon"
},
"error": {
"remotePortWarning": "redémarrer le serveur pour appliquer le nouveau port",
@@ -175,7 +182,8 @@
"openError": "impossible d'ouvrir le fichier",
"networkError": "une erreur de réseau est survenue",
"badAlbum": "vous voyez cette page parce que cette chanson ne fait pas parti d'un album. vous rencontrez probablement cette erreur si vous avez une chanson qui n'est pas dans votre répertoire de musique. jellyfin gère les chansons uniquement si elles sont dans un sous-dossier, qui est lui-même dans un dossier \"Musique(s)\".",
"badValue": "option {{value}} invalide. Cette valeur n'existe plus"
"badValue": "option {{value}} invalide. Cette valeur n'existe plus",
"notificationDenied": "les autorisations pour les notifications ont été refusées. ce paramètre n'a aucun effet"
},
"filter": {
"mostPlayed": "plus joués",
@@ -197,7 +205,7 @@
"favorited": "favoris",
"isRecentlyPlayed": "est récemment joué",
"isFavorited": "est favori",
"bpm": "bpm",
"bpm": "BPM",
"releaseYear": "année de sortie",
"disc": "disque",
"biography": "biographie",
@@ -234,7 +242,8 @@
"home": "$t(common.home)",
"artists": "$t(entity.artist_other)",
"albumArtists": "$t(entity.albumArtist_other)",
"shared": "partagé $t(entity.playlist_other)"
"shared": "partagé $t(entity.playlist_other)",
"myLibrary": "Bibliothèque"
},
"fullscreenPlayer": {
"config": {
@@ -269,13 +278,15 @@
"goForward": "avancer",
"version": "version {{version}}",
"settings": "$t(common.setting_other)",
"quit": "$t(common.quit)"
"quit": "$t(common.quit)",
"privateModeOff": "désactiver le mode privé",
"privateModeOn": "activer le mode privé"
},
"home": {
"mostPlayed": "plus joués",
"newlyAdded": "versions récemment ajoutés",
"explore": "explorer depuis votre bibliothèque",
"recentlyPlayed": "récemment joué",
"mostPlayed": "Les plus joués",
"newlyAdded": "Ajoutés récemment",
"explore": "explorer depuis la bibliothèque",
"recentlyPlayed": "Joués récemment",
"title": "$t(common.home)"
},
"albumDetail": {
@@ -320,7 +331,9 @@
"showDetails": "obtenir des informations",
"download": "télécharger",
"playShuffled": "$t(player.shuffle)",
"moveToNext": "$t(action.moveToNext)"
"moveToNext": "$t(action.moveToNext)",
"goToAlbumArtist": "aller à l'$t(entity.albumArtist_one)",
"goToAlbum": "aller à l'$t(entity.album_one)"
},
"albumArtistList": {
"title": "$t(entity.albumArtist_other)"
@@ -346,13 +359,13 @@
"albumArtistDetail": {
"about": "À propos de {{artist}}",
"appearsOn": "apparaît sur",
"topSongsFrom": "meilleures chansons de {{title}}",
"topSongsFrom": "meilleurs titres de {{title}}",
"viewAll": "voir tout",
"viewAllTracks": "voir tout $t(entity.track_other)",
"recentReleases": "sorties récentes",
"viewDiscography": "voir la discographie",
"relatedArtists": "en rapport avec $t(entity.artist_other)",
"topSongs": "meilleures chansons"
"topSongs": "meilleurs titres"
},
"itemDetail": {
"copyPath": "copier le chemin dans le presse-papiers",
@@ -360,11 +373,11 @@
"copiedPath": "chemin copié avec succès"
},
"playlist": {
"reorder": "le tri n'est possible que lorsque l'on trie par identifiant"
"reorder": "le tri n'est possible que lors du tri par identifiant"
},
"manageServers": {
"serverDetails": "détails du serveur",
"removeServer": "supprimer le serveur",
"removeServer": "retirer le serveur",
"url": "URL du serveur",
"title": "gérer les serveurs",
"username": "nom d'utilisateur",
@@ -395,7 +408,7 @@
"discordIdleStatus_description": "quand activé, mettre à jour le status pendant que le lecteur est inactif",
"showSkipButtons": "affiche les boutons suivants et précédents",
"minimumScrobblePercentage": "durée minimal du scobble (pourcentage)",
"lyricFetch": "récupère les paroles depuis internet",
"lyricFetch": "récupérer les paroles depuis internet",
"scrobble": "scrobble",
"enableRemote_description": "activer le serveur de contrôle à distance, qui permet à d'autres appareils de contrôler l'application",
"fontType_optionSystem": "police système",
@@ -446,17 +459,17 @@
"playbackStyle": "style de lecture",
"hotkey_toggleShuffle": "basculer la lecture aléatoire",
"playbackStyle_description": "sélectionnez le style de lecture à utiliser pour le lecteur audio",
"discordRichPresence_description": "active l'état de lecteur dans le status d'activité {{discord}}. Les images clés sont: {{icon}}, {{playing}}, et {{paused}} ",
"discordRichPresence_description": "active l'état de lecteur dans le status d'activité {{discord}}. Les images clés sont : {{icon}}, {{playing}}, et {{paused}}",
"mpvExecutablePath": "chemin de l'exécutable mpv",
"hotkey_rate2": "noter 2 étoiles",
"playButtonBehavior_description": "définit le comportement par défaut du bouton play, lors de l'ajout de chanson à la file d'attente",
"minimumScrobblePercentage_description": "le pourcentage minimum de la chanson qui doit être joué avant qu'elle ne soit scrobbleée",
"playButtonBehavior_description": "définit le comportement par défaut du bouton Jouer/Pause, lors de l'ajout de titres à la file d'attente",
"minimumScrobblePercentage_description": "le pourcentage minimum de la chanson qui doit être joué avant qu'elle ne soit scrobblée",
"exitToTray": "quitter vers la barre des tâches",
"hotkey_rate4": "noter 4 étoiles",
"enableRemote": "activer le serveur de contrôle à distance",
"showSkipButton_description": "affiche ou cache les boutons suivants et précédents de la barre de lecture",
"savePlayQueue": "sauvegarder la liste de lecture",
"minimumScrobbleSeconds_description": "la durée minimale en secondes de la chanson qui doit être jouée avant qu'elle ne soit scrobbleée",
"minimumScrobbleSeconds_description": "la durée minimale en secondes de la chanson qui doit être jouée avant qu'elle ne soit scrobblée",
"fontType_description": "police intégré vous permet de sélectionner une des polices fourni par Feishin. Police système vous permet de sélectionner une des polices fourni par votre système d'éxploitation. personnalisé vous permet de fournir votre propre police",
"playButtonBehavior": "comportement du bouton play",
"playbackStyle_optionNormal": "normale",
@@ -488,12 +501,12 @@
"sidebarCollapsedNavigation_description": "affiche ou cache la navigation dans la barre latérale réduite",
"sidebarConfiguration": "configuration de la barre latérale",
"sidebarConfiguration_description": "sélectionnez les éléments et l'ordre dans lequel ils seront affichés dans la barre latérale",
"sidebarPlaylistList": "liste de playlist de la barre latérale",
"sidebarPlaylistList": "liste des listes de lecture de la barre latérale",
"sidebarCollapsedNavigation": "navigation de la barre latéral (réduite)",
"skipDuration": "durée de l'avance rapide",
"sidePlayQueueStyle_optionAttached": "attaché",
"sidePlayQueueStyle": "style de la liste de lecture latérale",
"sidebarPlaylistList_description": "affiche ou cache la liste de playlist de la barre latérale",
"sidebarPlaylistList_description": "affiche ou cache le menu de listes de lecture de la barre latérale",
"sidePlayQueueStyle_description": "définit le style de la liste de lecture latérale",
"sidePlayQueueStyle_optionDetached": "détaché",
"volumeWheelStep_description": "la valeur de volume à modifier lors du défilement de la molette de la souris sur le curseur de volume",
@@ -505,11 +518,11 @@
"themeLight_description": "définit le thème clair à utiliser pour l'application",
"zoom_description": "définit le pourcentage de zoom de l'application",
"theme": "thème",
"skipPlaylistPage_description": "lors de la navigation dans une playlist, aller directement vers la liste des morceaux, au lieu de la page par défaut",
"skipPlaylistPage_description": "lors de la navigation dans une liste de lecture, aller directement vers la liste des titres, au lieu de la page par défaut",
"volumeWheelStep": "valeur du pas de volume",
"windowBarStyle": "style de la barre de la fenêtre",
"useSystemTheme_description": "suivre les préférences du système (mode clair ou sombre)",
"skipPlaylistPage": "sauter la page de playlist",
"skipPlaylistPage": "sauter la page de listes de lecture",
"themeDark": "thème (sombre)",
"windowBarStyle_description": "ajuster le style de la barre de la fenêtre",
"useSystemTheme": "utiliser le thème du système",
@@ -525,17 +538,17 @@
"replayGainMode_optionTrack": "$t(entity.track_one)",
"playButtonBehavior_optionAddNext": "$t(player.addNext)",
"replayGainMode_description": "ajuste le gain de volume accordement à la valeur de {{ReplayGain}} sauvegardé dans les métadonnées du fichier",
"replayGainFallback": "{{ReplayGain}} fallback",
"replayGainFallback": "valeur de repli {{ReplayGain}}",
"replayGainClipping_description": "Prévient le clipping causé par {{ReplayGain}} en baissant automatiquement le gain",
"replayGainPreamp": "préamplificateur (dB) de {{ReplayGain}}",
"replayGainClipping": "{{ReplayGain}} clipping",
"replayGainClipping": "écrêtage {{ReplayGain}}",
"replayGainMode": "mode de {{ReplayGain}}",
"replayGainFallback_description": "gain en dB à appliquer si le fichier n'a pas de tag {{ReplayGain}}",
"replayGainPreamp_description": "ajuste le gain de préampli appliqué a la valeur de {{ReplayGain}}",
"clearQueryCache": "vide le cache de feishin",
"clearCache": "vider le cache navigateur",
"buttonSize_description": "la taille des boutons de la barre de lecture",
"clearQueryCache_description": "un 'soft clear' de feishin. cela actualisera les playlists, les métadonnées des pistes, et réinitialisera les paroles enregistrées. les paramètres, identifiants serveurs et les images mises en cache sont conservés",
"clearQueryCache_description": "un 'soft clear' de Feishin. cela actualisera les liste de lecture, les métadonnées des titres, et réinitialisera les paroles enregistrées. les paramètres, identifiants du serveur et images mises en cache seront conservés",
"clearCache_description": "un 'hard clear' de feishin. en plus de vider le cache de feishin, vide le cache du navigateur (images sauvegardées et autres ressources). les identifiants serveurs et paramètres sont conservés",
"buttonSize": "taille des boutons du lecteur",
"clearCacheSuccess": "le cache a été vidé",
@@ -573,7 +586,7 @@
"artistConfiguration": "page de configuration de l'artiste de l'album",
"artistConfiguration_description": "configurer les éléments et l'ordre à afficher, sur la page de l'artiste de l'album",
"doubleClickBehavior": "mettre en file d'attente toutes les pistes recherchées lors d'un double clic",
"contextMenu": "configuration du menu contexte (clic droit)",
"contextMenu": "configuration du menu contextuel (clic droit)",
"contextMenu_description": "permet de masquer les éléments qui s'affichent dans le menu lorsque vous cliquez avec le bouton droit de la souris sur un élément. les éléments qui ne sont pas cochés seront masqués",
"albumBackground": "image d'arrière-plan de l'album",
"albumBackground_description": "ajoute une image d'arrière-plan pour les pages de l'album contenant les illustrations de l'album",
@@ -591,14 +604,35 @@
"customCss_description": "contenu css personnalisé. Remarque : le contenu et les URL distantes sont des propriétés non autorisées. Un aperçu de votre contenu est affiché ci-dessous. Des champs supplémentaires que vous n'avez pas définis sont présents en raison de la vérification.",
"translationApiKey": "clé api de traduction",
"translationTargetLanguage_description": "langue cible pour la traduction des paroles",
"transcodeNote": "prend effet après 1 (web) - 2 (mpv) chansons",
"transcodeNote": "prend effet après 1 (web) - 2 (mpv) titres",
"trayEnabled_description": "afficher ou masquer l'icône et le menu de la barre d'état système. si désactivé, désactive également la réduction et la sortie vers la barre d'état système",
"doubleClickBehavior_description": "si vrai, toutes les pistes correspondantes dans une recherche de piste seront mises en file d'attente. sinon, seule celle sur laquelle vous avez cliqué sera mise en file d'attente",
"albumBackgroundBlur": "taille du flou de l'image d'arrière-plan de l'album",
"lastfmApiKey": "clé API {{lastfm}}",
"lastfmApiKey_description": "la clé API pour {{lastfm}} . requise pour la pochette d'album",
"discordServeImage": "servir l'image {{discord}} depuis le serveur",
"discordServeImage_description": "partage pochette du status d'activité {{discord}} depuis le serveur lui même, disponible uniquement pour jellyfin et navidrome"
"discordServeImage_description": "partage pochette du status d'activité {{discord}} depuis le serveur lui même, disponible uniquement pour jellyfin et navidrome",
"lastfm": "affiche les liens de last.fm",
"musicbrainz_description": "affiches les liens vers musicbrainz sur les pages des artistes/albums, quand mbid existes",
"lastfm_description": "affiche les liens vers last.fm sur les pages des artistes/albums",
"musicbrainz": "affiches les liens musicbrainz",
"neteaseTranslation": "Activer les traductions NetEase",
"neteaseTranslation_description": "Lorsque cette option est activée, récupère et affiche les paroles traduites de NetEase si elles sont disponibles.",
"preferLocalLyrics_description": "privilégier les paroles locales aux paroles distantes lorsqu'elles sont disponibles",
"preferLocalLyrics": "privilégier les paroles locales",
"discordPausedStatus_description": "quand activé, le status s'affichera lorsque le lecteur est en pause",
"discordPausedStatus": "afficher le status d'activité en pause",
"preservePitch": "préserver la hauteur",
"preservePitch_description": "préserver la hauteur lors du changement de la vitesse de lecture",
"notify": "activer les notifications des chansons",
"notify_description": "affiche une notification lors du changement de chanson",
"discordDisplayType": "type d'affichage du status {{discord}}",
"discordDisplayType_description": "change ce que vous écoutez dans votre statut",
"discordDisplayType_songname": "nom du morceau",
"discordDisplayType_artistname": "nom(s) dartiste",
"hotkey_navigateHome": "aller à l'accueil",
"preventSleepOnPlayback_description": "Empêche la mise en veille du lecteur lorsque la musique est en cours de lecture",
"preventSleepOnPlayback": "Empêche la mise en veille lors de la lecture"
},
"form": {
"deletePlaylist": {
@@ -626,7 +660,7 @@
"input_playlists": "$t(entity.playlist_other)"
},
"createPlaylist": {
"title": "créer $t(entity.playlist_one)",
"title": "créer une $t(entity.playlist_one)",
"input_public": "publique",
"success": "$t(entity.playlist_one) créée avec succès",
"input_description": "$t(common.description)",
@@ -639,11 +673,12 @@
},
"queryEditor": {
"input_optionMatchAll": "correspondre à tous",
"input_optionMatchAny": "correspondre à n'importe quel"
"input_optionMatchAny": "correspondre à n'importe quel",
"title": "éditeur de requête"
},
"editPlaylist": {
"title": "modifier $t(entity.playlist_one)",
"publicJellyfinNote": "Jellyfin n'indique pas si une playlist est publique ou non. Si vous souhaitez que cette playlist reste publique, veuillez sélectionner l'entrée suivante",
"publicJellyfinNote": "Jellyfin n'indique pas si une liste de lecture est publique ou non. Si vous souhaitez que cette liste de lecture reste publique, veuillez sélectionner l'entrée suivante",
"success": "$t(entity.playlist_one) mis à jour avec succès"
},
"lyricSearch": {
@@ -658,18 +693,23 @@
"success": "lien de partage copié dans le presse-papier (ou cliquez ici pour ouvrir)",
"expireInvalid": "l'expiration doit être définie à une date ultérieure",
"createFailed": "échec de la création du lien de partage (le partage est-il activé ?)"
},
"privateMode": {
"enabled": "le mode privé est activé, le statut de lecture est maintenant caché des intégrations externes",
"disabled": "le mode privé est désactivé, le statut de lecture est maintenant visible des intégrations externes",
"title": "mode privé"
}
},
"entity": {
"genre_one": "genre",
"genre_many": "genres",
"genre_other": "genres",
"playlistWithCount_one": "{{count}} playlist",
"playlistWithCount_many": "{{count}} playlists",
"playlistWithCount_other": "{{count}} playlists",
"playlist_one": "playlist",
"playlist_many": "playlists",
"playlist_other": "playlists",
"playlistWithCount_one": "{{count}} liste de lecture",
"playlistWithCount_many": "{{count}} listes de lecture",
"playlistWithCount_other": "{{count}} listes de lecture",
"playlist_one": "liste de lecture",
"playlist_many": "listes de lecture",
"playlist_other": "listes de lecture",
"artist_one": "artiste",
"artist_many": "artistes",
"artist_other": "artistes",
@@ -710,9 +750,9 @@
"play_one": "{{count}} écouter",
"play_many": "{{count}} écoute",
"play_other": "{{count}} écoute",
"song_one": "chanson",
"song_many": "chansons",
"song_other": "chansons"
"song_one": "titre",
"song_many": "titres",
"song_other": "titres"
},
"table": {
"config": {
@@ -728,8 +768,10 @@
},
"view": {
"table": "liste",
"poster": "poster",
"card": "Carte"
"poster": "affiche",
"card": "Carte",
"grid": "grille",
"list": "liste"
},
"label": {
"releaseDate": "date de sortie",
+1 -1
View File
@@ -163,7 +163,7 @@
"remotePortWarning": "indítsd újra a szervert az új PORT használatához",
"genericError": "hiba történt",
"endpointNotImplementedError": "a(z) {{endpoint}} végpont nincs implementálva a következőhöz: {{serverType}}",
"badAlbum": "azért látod ezt az oldalt mert ez a zeneszám nem része egy albumnak. ez általában akkor történik amikor egy szám a zenekönyvtárad gyökerébe kerül. a Jellyfin csak mappákba rendezett számokat csoportosít",
"badAlbum": "azért látod ezt az oldalt mert ez a zeneszám nem része egy albumnak. ez általában akkor történik amikor egy szám a zenekönyvtárad gyökerébe kerül. a Jellyfin csak mappákba rendezett számokat csoportosít.",
"loginRateError": "túl sok bejelentkezési kísérlet, kérlek próbáld újra pár másodperc múlva",
"mpvRequired": "MPV szükséges",
"invalidServer": "érvénytelen szerver",
+1 -1
View File
@@ -491,7 +491,7 @@
"discordListening": "Tampilkan status sebagai mendengarkan",
"discordListening_description": "tampilkan status sebagai mendengarkan alih-alih bermain",
"discordRichPresence": "status aktivitas {{discord}}",
"discordRichPresence_description": "aktifkan status pemutaran di status aktivitas {{discord}}. Gambar tombol adalah: {{icon}}, {{playing}}, dan {{paused}} ",
"discordRichPresence_description": "aktifkan status pemutaran di status aktivitas {{discord}}. Gambar tombol adalah: {{icon}}, {{playing}}, dan {{paused}}",
"discordUpdateInterval": "interval pembaruan status aktivitas {{discord}}",
"discordUpdateInterval_description": "waktu dalam detik antara setiap pembaruan (minimal 15 detik)",
"doubleClickBehavior": "masukkan semua lagu yang dicari saat mengklik dua kali",
+227 -28
View File
@@ -16,7 +16,12 @@
"toggleSmartPlaylistEditor": "attiva/disattiva editor $t(entity.smartPlaylist)",
"removeFromFavorites": "rimuovi da $t(entity.favorite_other)",
"moveToTop": "sposta in cima",
"moveToBottom": "sposta in fondo"
"moveToBottom": "sposta in fondo",
"moveToNext": "passa al successivo",
"openIn": {
"lastfm": "Apri in Last.fm",
"musicbrainz": "Apri in MusicBrainz"
}
},
"common": {
"backward": "indietro",
@@ -99,7 +104,24 @@
"yes": "si",
"random": "casuale",
"size": "dimensione",
"note": "nota"
"note": "nota",
"additionalParticipants": "partecipanti aggiuntivi",
"newVersion": "è stata installata una nuova versione ({{version}})",
"viewReleaseNotes": "mostra le note di rilascio",
"albumGain": "guadagno (gain) dell'album",
"albumPeak": "picco di volume dell'album",
"close": "chiudi",
"codec": "codec",
"mbid": "MusicBrainz ID",
"preview": "anteprima",
"reload": "aggiorna",
"share": "condividi",
"tags": "tags",
"trackGain": "normalizzazione (gain) del brano",
"trackPeak": "picco di volume del brano",
"translation": "traduzione",
"bitDepth": "bit depth (profondità di bit)",
"sampleRate": "sample rate (frequenza di campionamento)"
},
"player": {
"repeat_all": "ripeti coda",
@@ -113,7 +135,7 @@
"skip_back": "salta indietro",
"favorite": "preferito",
"next": "successivo",
"shuffle": "mescola",
"shuffle": "riproduzione casuale",
"playbackFetchNoResults": "nessuna canzone trovata",
"playbackFetchInProgress": "caricamento canzoni…",
"addNext": "aggiungi successivo",
@@ -130,7 +152,9 @@
"shuffle_off": "non mescolare",
"addLast": "aggiungi in coda",
"mute": "silenzia",
"skip_forward": "salta avanti"
"skip_forward": "salta avanti",
"playSimilarSongs": "riproduci brani simili",
"viewQueue": "visualizza coda"
},
"setting": {
"crossfadeStyle_description": "seleziona lo stile dissolvenza da usare per il player audio",
@@ -150,7 +174,7 @@
"skipDuration_description": "imposta la durata da saltare quando vengono usati i pulsanti di salto nella barra del player",
"enableRemote_description": "abilita il controllo remoto del server per permettere ad altri dispositivi di controllare l'applicazione",
"fontType_optionSystem": "font di sistema",
"mpvExecutablePath_description": "imposta il percorso dell'eseguibile di mpv",
"mpvExecutablePath_description": "imposta il percorso dell'eseguibile mpv. se lasciato vuoto, verrà utilizzato il percorso predefinito",
"hotkey_favoriteCurrentSong": "$t(common.currentSong) preferita",
"crossfadeStyle": "stile dissolvenza",
"sidebarConfiguration": "configurazione barra laterale",
@@ -209,7 +233,7 @@
"hotkey_toggleShuffle": "attiva/disattiva mescolamento",
"theme": "tema",
"playbackStyle_description": "selezione lo stile di riproduzione da usare per il player audio",
"discordRichPresence_description": "abilita lo status del playback nello stato attività di {{discord}}. Le chiavi immagine sono: {{icon}}, {{playing}} e {{paused}} ",
"discordRichPresence_description": "abilita lo stato di riproduzione nello stato attività di {{discord}}. Le chiavi immagine sono: {{icon}}, {{playing}} e {{paused}}",
"mpvExecutablePath": "percorso eseguibile mpv",
"audioDevice": "device audio",
"hotkey_rate2": "voto 2 stelle",
@@ -244,7 +268,7 @@
"customFontPath": "percorso font personalizzato",
"followLyric": "segui testo corrente",
"crossfadeDuration": "durata dissolvenza",
"discordIdleStatus": "visualizza lo stato attività in stato inattivo",
"discordIdleStatus": "mostra lo stato attività di Discord quando non stai riproducendo",
"audioPlayer": "player audio",
"hotkey_zoomOut": "rimpicciolisci layout",
"hotkey_rate0": "rimuovi voto",
@@ -268,7 +292,7 @@
"replayGainMode_description": "aggiusta il volume secondo i valori {{ReplayGain}} salvati nei metadati del file",
"showSkipButtons": "mostra pulsanti per saltare",
"sampleRate": "frequenza di campionamento",
"sampleRate_description": "seleziona la frequenza di campionamento di output da usare se la frequenza di campionamento selezionata è diversa da quella della del media attuale",
"sampleRate_description": "seleziona la frequenza di campionamento di output da utilizzare se quella selezionata è diversa da quella del file sorgente in riproduzione. Un valore inferiore a 8000 utilizzerà la frequenza predefinita",
"hotkey_togglePreviousSongFavorite": "imposta/rimuovi $t(common.previousSong) favorito",
"hotkey_unfavoritePreviousSong": "rimuovi $t(common.previousSong) dai preferiti",
"showSkipButton_description": "mostra o nascondi i pulsanti per saltare nella barra del player",
@@ -293,7 +317,94 @@
"clearQueryCache": "pulisci cache di feishin",
"buttonSize_description": "Dimensione bottoni nella barra di riproduzione",
"clearCache": "pulisci la cache del browser",
"clearQueryCache_description": "\"leggera\" pulizia di feishin. verranno aggiornate le playlist, metadata delle tracce e i testi salvati. impostazioni, credenziali del server e le immagini salvate saranno mantenute"
"clearQueryCache_description": "\"leggera\" pulizia di feishin. verranno aggiornate le playlist, metadata delle tracce e i testi salvati. impostazioni, credenziali del server e le immagini salvate saranno mantenute",
"albumBackground": "immagine di sfondo dell'album",
"albumBackground_description": "aggiunge un'immagine di sfondo per le pagine degli album contenenti l'album art",
"albumBackgroundBlur": "intensità sfocatura immagine di sfondo dell'album",
"albumBackgroundBlur_description": "regola la quantità di sfocatura applicata all'immagine di sfondo dell'album",
"artistConfiguration": "configurazione della pagina artista dellalbum",
"artistConfiguration_description": "configurare quali elementi vengono visualizzati, e in quale ordine, nella pagina dell'artista dell'album",
"buttonSize": "dimensione del bottone nella barra di riproduzione",
"clearCacheSuccess": "cache pulita correttamente",
"contextMenu": "configurazione menu contestuale (clic destro)",
"contextMenu_description": "consente di nascondere gli elementi che vengono visualizzati nel menu quando si fa clic destro su un elemento. gli oggetti non selezionati saranno nascosti",
"customCssEnable": "abilita css personalizzato",
"customCssEnable_description": "consente di scrivere css personalizzati.",
"customCssNotice": "Attenzione: sebbene ci sia una certa sanitizzazione (vengono bloccati url() e content:), luso di CSS personalizzati può comunque comportare dei rischi modificando linterfaccia.",
"customCss": "css personalizzato",
"customCss_description": "contenuto CSS personalizzato. Nota: le proprietà content e gli URL remoti non sono consentiti. Di seguito è mostrata unanteprima del tuo contenuto. Sono presenti anche altri campi non impostati da te a causa della sanitizzazione.",
"discordPausedStatus": "mostra lo stato attività di Discord quando la riproduzione è in pausa",
"discordPausedStatus_description": "quando abilitato, verrà mostrato lo stato del lettore in standby/pausa (nessun brano in riproduzione)",
"discordListening": "mostra stato come in ascolto",
"discordListening_description": "mostra lo stato come in ascolto invece che in riproduzione",
"discordServeImage": "recupera le immagini di {{discord}} dal server",
"discordServeImage_description": "condividi la copertina per lo stato attività di {{discord}} direttamente dal server, disponibile solo per Jellyfin e Navidrome",
"doubleClickBehavior": "aggiungi alla coda tutte le tracce cercate, con un doppio clic",
"doubleClickBehavior_description": "se attivato, tutte le tracce corrispondenti alla ricerca verranno aggiunte alla coda. altrimenti, verrà aggiunta alla coda solo la traccia selezionata",
"externalLinks": "mostra link esterni",
"externalLinks_description": "consente di visualizzare link esterni (Last.fm, MusicBrainz) sulle pagine di artista/album",
"preferLocalLyrics": "utilizza i testi locali",
"preferLocalLyrics_description": "usa i testi locali anziché quelli online, quando disponibili",
"genreBehavior": "comportamento predefinito della pagina genere",
"genreBehavior_description": "determina se cliccando su un genere si apre di default la lista dei brani o degli album",
"homeConfiguration": "configurazione della home page",
"homeConfiguration_description": "configura quali elementi vengono mostrati e in quale ordine nella home page",
"homeFeature": "carosello in evidenza nella home page",
"homeFeature_description": "controlla se mostrare il grande carosello in evidenza nella pagina principale",
"imageAspectRatio": "usa dimensioni originali(aspect ratio) della copertina",
"imageAspectRatio_description": "se abilitato, la copertina verrà mostrata utilizzando le dimesioni originali. per le immagini con rapporto diverso da 1:1, lo spazio residuo resterà vuoto",
"lastfm": "mostra links last.fm",
"lastfm_description": "mostra i link per last.fm sulle pagine di artista/album",
"lastfmApiKey": "{{lastfm}} chiave API",
"lastfmApiKey_description": "chiave API per {{lastfm}}. necessaria per visualizzare le copertine",
"mpvExtraParameters_help": "uno per linea",
"musicbrainz": "mostra links musicbrainz",
"musicbrainz_description": "mostra link a musicbrainz sulle pagine degli artisti/album, se è disponibile un mbid",
"neteaseTranslation": "Abilita traduzioni di NetEase",
"neteaseTranslation_description": "Se abilitato, recupera e mostra i testi tradotti da NetEase, se disponibili.",
"passwordStore": "Archivio di password/segreti",
"passwordStore_description": "specifica quale archivio di password e segreti utilizzare. modificalo in caso di problemi nel salvataggio delle credenziali.",
"playButtonBehavior_optionPlayShuffled": "$t(player.shuffle)",
"playerAlbumArtResolution": "risoluzione della copertina nel lettore",
"playerAlbumArtResolution_description": "la risoluzione dellanteprima della copertina nel lettore in formato grande. valori più alti la rendono più nitida, ma possono rallentare il caricamento. Il valore predefinito è 0, che indica la modalità automatica",
"sidePlayQueueStyle_optionAttached": "fissata",
"sidePlayQueueStyle_optionDetached": "sganciata",
"startMinimized": "avvia minimizzato",
"startMinimized_description": "avvia l'app nella barra di sistema",
"transcodeNote": "ha effetto dopo 1 brano (web) - 2 brani (mpv)",
"transcode": "abilita la transcodifica",
"transcode_description": "abilita la transcodifica in formati diversi",
"playerbarOpenDrawer": "attiva/disattiva schermo intero",
"playerbarOpenDrawer_description": "consente di cliccare sulla barra del lettore per aprire il lettore a schermo intero",
"replayGainClipping": "clipping di {{ReplayGain}}",
"replayGainFallback": "metodo alternativo di {{ReplayGain}}",
"transcodeBitrate": "bitrate per la transcodifica",
"transcodeBitrate_description": "seleziona il bitrate per la transcodifica. 0 significa lasciare che sia il server a scegliere",
"transcodeFormat": "formato per la transcodifica",
"transcodeFormat_description": "seleziona il formato per la transcodifica. se vuoto viene decisco dal server",
"translationApiProvider": "translation api provider",
"translationApiProvider_description": "api provider for translation",
"translationApiKey": "chiave api translation",
"translationApiKey_description": "chiave api per la traduzione (supporta solo endpoint di servizio globali)",
"translationTargetLanguage": "lingua di destinazione della traduzione",
"translationTargetLanguage_description": "lingua di destinazione per la traduzione",
"trayEnabled": "Mostra icona app nella barra di sistema",
"trayEnabled_description": "mostra/nascondi icona app nella barra si sistema. se disabilitato, disattiva anche minimizza/chiudi nella barra di sistema",
"volumeWidth": "larghezza della barra del volume",
"webAudio": "use audio web",
"webAudio_description": "usa audio web. abilita funzionalità avanzate come ReplayGain. disabilita se riscontri problemi",
"preservePitch": "mantieni tono (pitch)",
"preservePitch_description": "mantiene il tono (pitch) durante la modifica della velocità di riproduzione",
"volumeWidth_description": "larghezza del cursore del volume",
"discordDisplayType_description": "modifica cosa stai ascoltando nel tuo stato",
"discordDisplayType_songname": "titolo traccia",
"discordDisplayType_artistname": "nome artisti",
"hotkey_navigateHome": "vai alla schermata iniziale",
"notify": "abilita notifiche delle tracce",
"notify_description": "mostra una notifica quando cambia la traccia riprodotta",
"preventSleepOnPlayback": "non sospendere in riproduzione",
"preventSleepOnPlayback_description": "non sospendere il sistema quando la riproduzione è attiva",
"discordDisplayType": "stile dello stato su {{discord}}"
},
"error": {
"remotePortWarning": "riavvia il server per applicare la nuova porta",
@@ -314,7 +425,12 @@
"mpvRequired": "MPV richiesto",
"audioDeviceFetchError": "si è verificato un errore nel provare ad ottenre i device audio",
"invalidServer": "server non valido",
"loginRateError": "troppi tentativi di accesso, per favore riprova tra qualche secondo"
"loginRateError": "troppi tentativi di accesso, per favore riprova tra qualche secondo",
"badAlbum": "stai visualizzando questa pagina perché questa canzone non fa parte di un album. probabilmente vedi questo messaggio perché hai una canzone posizionata direttamente nella cartella principale della tua libreria musicale. jellyfin raggruppa le tracce solo se si trovano allinterno di una cartella.",
"badValue": "opzione non valida \"{{value}}\". valore inesistente",
"networkError": "si è verificato un errore di rete",
"openError": "impossibile aprire il file",
"notificationDenied": "i permessi per le notifiche non sono stati concessi. questa configurazione non ha effetto"
},
"filter": {
"mostPlayed": "più riprodotti",
@@ -372,7 +488,9 @@
"settings": "$t(common.setting_other)",
"home": "$t(common.home)",
"artists": "$t(entity.artist_other)",
"albumArtists": "$t(entity.albumArtist_other)"
"albumArtists": "$t(entity.albumArtist_other)",
"myLibrary": "la mia libreria",
"shared": "condivisa $t(entity.playlist_other)"
},
"fullscreenPlayer": {
"config": {
@@ -386,11 +504,16 @@
"unsynchronized": "non sinncronizzato",
"lyricAlignment": "allineamento testo",
"useImageAspectRatio": "usa le proporzioni dell'immagine",
"lyricGap": "gap testo"
"lyricGap": "gap testo",
"dynamicImageBlur": "intensità sfocatura immagine",
"dynamicIsImage": "abilita immagine di sfondo",
"lyricOffset": "ritardo testi (ms)"
},
"upNext": "successivamente",
"lyrics": "testi",
"related": "correlati"
"related": "correlati",
"visualizer": "visualizzatore audio",
"noLyrics": "nessun testo trovato"
},
"appMenu": {
"selectServer": "seleziona server",
@@ -402,7 +525,9 @@
"openBrowserDevtools": "apri devtools browser",
"quit": "$t(common.quit)",
"goBack": "torna indietro",
"goForward": "vai avanti"
"goForward": "vai avanti",
"privateModeOff": "disabilita modalità privata",
"privateModeOn": "abilita modalità privata"
},
"contextMenu": {
"addToPlaylist": "$t(action.addToPlaylist)",
@@ -420,7 +545,15 @@
"addFavorite": "$t(action.addToFavorites)",
"play": "$t(player.play)",
"numberSelected": "{{count}} selezionati",
"removeFromQueue": "$t(action.removeFromQueue)"
"removeFromQueue": "$t(action.removeFromQueue)",
"download": "download",
"moveToNext": "$t(action.moveToNext)",
"playSimilarSongs": "$t(player.playSimilarSongs)",
"playShuffled": "$t(player.shuffle)",
"shareItem": "condividi elemento",
"showDetails": "mostra info",
"goToAlbum": "vai a $t(entity.album_one)",
"goToAlbumArtist": "vai a $t(entity.albumArtist_one)"
},
"home": {
"mostPlayed": "più riprodotti",
@@ -431,22 +564,28 @@
},
"albumDetail": {
"moreFromArtist": "di più da questo $t(entity.artist_one)",
"moreFromGeneric": "di più da {{item}}"
"moreFromGeneric": "di più da {{item}}",
"released": "rilasciato"
},
"setting": {
"playbackTab": "riproduzione",
"generalTab": "generale",
"hotkeysTab": "tasti a scelta rapida",
"windowTab": "finestra"
"windowTab": "finestra",
"advanced": "avanzate"
},
"albumArtistList": {
"title": "$t(entity.albumArtist_other)"
},
"genreList": {
"title": "$t(entity.genre_other)"
"title": "$t(entity.genre_other)",
"showAlbums": "mostra $t(entity.genre_one) $t(entity.album_other)",
"showTracks": "mostra $t(entity.genre_one) $t(entity.track_other)"
},
"trackList": {
"title": "$t(entity.track_other)"
"title": "$t(entity.track_other)",
"artistTracks": "tracce di {{artist}}",
"genreTracks": "\"{{genre}}\" $t(entity.track_other)"
},
"globalSearch": {
"commands": {
@@ -460,7 +599,36 @@
"title": "$t(entity.playlist_other)"
},
"albumList": {
"title": "$t(entity.album_other)"
"title": "$t(entity.album_other)",
"artistAlbums": "albums di {{artist}}",
"genreAlbums": "\"{{genre}}\" $t(entity.album_other)"
},
"albumArtistDetail": {
"about": "Info {{artist}}",
"appearsOn": "compare su",
"recentReleases": "uscite recenti",
"viewDiscography": "mostra discografia",
"relatedArtists": "correlati $t(entity.artist_other)",
"topSongs": "brani migliori",
"topSongsFrom": "brani migliori da {{title}}",
"viewAll": "mostra tutto",
"viewAllTracks": "mostra tutto $t(entity.track_other)"
},
"manageServers": {
"title": "gestisci servers",
"serverDetails": "dettagli server",
"url": "URL",
"username": "nome utente",
"editServerDetailsTooltip": "modifica dettagli server",
"removeServer": "rimuovi server"
},
"itemDetail": {
"copyPath": "copia percorso negli appunti",
"copiedPath": "percorso copiato con successo",
"openFile": "mostra traccia nel gestore file"
},
"playlist": {
"reorder": "riordino abilitato solo quando si ordina per id"
}
},
"form": {
@@ -491,7 +659,7 @@
"error_savePassword": "si è verificato un errore quando si è provato a salvare la password"
},
"addToPlaylist": {
"success": "aggiunto {{message}} $t(entity.track_other) a {{numOfPlaylists}} $t(entity.playlist_other)",
"success": "aggiunto $t(entity.trackWithCount, {\"count\": {{message}} }) a $t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })",
"title": "aggiungi a $t(entity.playlist_one)",
"input_skipDuplicates": "salta duplicati",
"input_playlists": "$t(entity.playlist_other)"
@@ -502,7 +670,8 @@
},
"queryEditor": {
"input_optionMatchAll": "soddisfa tutti",
"input_optionMatchAny": "soddisfa qualsiasi"
"input_optionMatchAny": "soddisfa qualsiasi",
"title": "editor di query"
},
"lyricSearch": {
"input_name": "$t(common.name)",
@@ -510,7 +679,22 @@
"title": "cerca testi"
},
"editPlaylist": {
"title": "modifica $t(entity.playlist_one)"
"title": "modifica $t(entity.playlist_one)",
"publicJellyfinNote": "Jellyfin non mostra se una playlist è pubblica o meno. Se vuoi che rimanga pubblica, assicurati di selezionare lopzione seguente",
"success": "$t(entity.playlist_one) aggiornato con successo"
},
"shareItem": {
"allowDownloading": "consentire il download",
"description": "descrizione",
"setExpiration": "imposta scadenza",
"success": "link di condivisione copiato negli appunti (o clicca qui per aprirlo)",
"expireInvalid": "la scadenza deve essere nel futuro",
"createFailed": "condivisione fallita (è abilitata la condivisione?)"
},
"privateMode": {
"enabled": "la modalità privata è abilitata: lo stato di riproduzione viene ora nascosto alle integrazioni esterne",
"disabled": "la modalità privata è disabilitata: lo stato di riproduzione è ora visibile alle integrazioni esterne abilitate",
"title": "modalità privata"
}
},
"table": {
@@ -520,11 +704,17 @@
"gap": "$t(common.gap)",
"tableColumns": "tabella colonne",
"autoFitColumns": "adatta colonne automaticamente",
"size": "$t(common.size)"
"size": "$t(common.size)",
"followCurrentSong": "segui il brano corrente",
"itemGap": "spaziatura tra gli elementi (px)",
"itemSize": "dimensione dellelemento (px)"
},
"view": {
"table": "tabella",
"card": "Scheda"
"card": "Scheda",
"grid": "griglia",
"list": "lista",
"poster": "poster"
},
"label": {
"releaseDate": "data rilascio",
@@ -552,7 +742,9 @@
"discNumber": "numero disco",
"favorite": "$t(common.favorite)",
"year": "$t(common.year)",
"albumArtist": "$t(entity.albumArtist_one)"
"albumArtist": "$t(entity.albumArtist_one)",
"codec": "$t(common.codec)",
"songCount": "$t(entity.track_other)"
}
},
"column": {
@@ -578,7 +770,8 @@
"path": "percorso",
"discNumber": "disco",
"channels": "$t(common.channel_other)",
"size": "$t(common.size)"
"size": "$t(common.size)",
"codec": "$t(common.codec)"
}
},
"entity": {
@@ -627,6 +820,12 @@
"genreWithCount_other": "{{count}} generi",
"trackWithCount_one": "{{count}} traccia",
"trackWithCount_many": "{{count}} tracce",
"trackWithCount_other": "{{count}} tracce"
"trackWithCount_other": "{{count}} tracce",
"play_one": "{{count}} riproduzione",
"play_many": "{{count}} riproduzioni",
"play_other": "{{count}} riproduzioni",
"song_one": "traccia",
"song_many": "tracce",
"song_other": "tracce"
}
}
+1 -1
View File
@@ -122,7 +122,7 @@
"hotkey_toggleShuffle": "シャッフルの切り替え",
"theme": "テーマ",
"playbackStyle_description": "オーディオプレーヤーに使用する再生スタイルを選択します",
"discordRichPresence_description": "{{discord}} のRich Presenceに再生ステータスを表示するようにします。画像キー: {{icon}}, {{playing}}, {{paused}} ",
"discordRichPresence_description": "{{discord}} のRich Presenceに再生ステータスを表示するようにします。画像キー: {{icon}}, {{playing}}, {{paused}}",
"mpvExecutablePath": "mpv 実行ファイルパス",
"audioDevice": "オーディオデバイス",
"hotkey_rate2": "2つ星で評価",
+91 -9
View File
@@ -104,13 +104,21 @@
"year": "år",
"yes": "ja",
"descending": "synkende",
"dismiss": "avkreft",
"dismiss": "lukk",
"delete": "slett",
"description": "beskrivelse",
"manage": "håndtere",
"maximize": "maksimer",
"right": "høyre",
"sortOrder": "rekkefølge"
"sortOrder": "rekkefølge",
"tags": "tagger",
"newVersion": "en ny versjon har blitt installert ({{version}})",
"viewReleaseNotes": "se utgivelsesnotater",
"additionalParticipants": "ytterligere deltakere",
"albumGain": "gjennomsnittlig lydnivå for album",
"albumPeak": "høyeste lydnivå for album",
"bitDepth": "bitdybde",
"sampleRate": "samplingsfrekvens"
},
"entity": {
"smartPlaylist": "smart $t(entity.playlist_one)",
@@ -153,7 +161,7 @@
"apiRouteError": "kan ikke behandle forespørselen",
"mpvRequired": "MPV er påkrevd",
"authenticationFailed": "autentisering feilet",
"badAlbum": "du ser denne siden fordi sangen ikke er med i et album. Mest sannsynlig opplever du dette problemet fordi du har en sang helt øverst i musikkmappen. jellyfin gruperer kun spor som ligger i en mappe.",
"badAlbum": "du ser denne siden fordi sangen ikke er med i et album. Mest sannsynlig opplever du dette problemet fordi du har en sang helt øverst i musikkmappen. Jellyfin grupperer kun spor som ligger i en mappe.",
"endpointNotImplementedError": "endepunkt {{endpoint}} er ikke implementert for {{serverType}}",
"credentialsRequired": "innloggingsdetaljer er påkrevd",
"genericError": "en feil har oppstått",
@@ -171,7 +179,9 @@
"sessionExpiredError": "sesjonen din har utløpt",
"remotePortWarning": "ta omstart av serveren for å aktivere ny port",
"remoteDisableError": "en problem oppstod ved å $t(common.disable) serveren",
"remoteEnableError": "et problem oppstod ved å $t(common.enable) serveren"
"remoteEnableError": "et problem oppstod ved å $t(common.enable) serveren",
"notificationDenied": "tillatelser for varsler ble avvist. Denne innstillingen har ingen effekt",
"badValue": "ugyldig alternativ \"{{value}}\". Denne verdien eksisterer ikke lenger"
},
"filter": {
"bpm": "bpm",
@@ -214,7 +224,8 @@
"recentlyAdded": "nylig lagt til",
"channels": "$t(common.channel_other)",
"genre": "$t(entity.genre_one)",
"trackNumber": "spor"
"trackNumber": "spor",
"albumCount": "$t(entity.album_other) opptelling"
},
"form": {
"createPlaylist": {
@@ -233,7 +244,7 @@
"addServer": {
"ignoreCors": "ignorer cors ($t(common.restartRequired))",
"ignoreSsl": "ignorer ssl ($t(common.restartRequired))",
"error_savePassword": "en problem oppstod ved lagring av passord",
"error_savePassword": "et problem oppstod ved lagring av passord",
"input_savePassword": "lagre passord",
"input_url": "lenke",
"input_username": "brukernavn",
@@ -269,6 +280,11 @@
"updateServer": {
"success": "vellykket oppdatering av serveren",
"title": "oppdater server"
},
"queryEditor": {
"input_optionMatchAll": "match alle",
"input_optionMatchAny": "matche hvilken som helst",
"title": "redigeringsverktøy for spørringer"
}
},
"page": {
@@ -338,7 +354,7 @@
"lyricGap": "sangtekstavstand",
"dynamicImageBlur": "bilduskarphetstørrelse",
"lyricAlignment": "sangtekstjustering",
"lyricOffset": "sangtekstjustering (ms)",
"lyricOffset": "sangtekstforskyvning (ms)",
"lyricSize": "sangtekststørrelse",
"opacity": "absorpsjon",
"showLyricMatch": "vis sangteksttreff",
@@ -405,7 +421,8 @@
"search": "$t(common.search)",
"settings": "$t(common.setting_other)",
"shared": "delt $t(entity.playlist_other)",
"artists": "$t(entity.artist_other)"
"artists": "$t(entity.artist_other)",
"myLibrary": "mitt bibliotek"
},
"setting": {
"generalTab": "generelt",
@@ -416,6 +433,9 @@
},
"playlistList": {
"title": "$t(entity.playlist_other)"
},
"playlist": {
"reorder": "omorganisering kun mulig ved sortering på id"
}
},
"player": {
@@ -439,6 +459,68 @@
"queue_moveToTop": "flytt valgte til bunnen",
"playbackFetchNoResults": "ingen sanger funnet",
"playbackSpeed": "avspillingshastighet",
"playSimilarSongs": "spill lignende sanger"
"playSimilarSongs": "spill lignende sanger",
"skip": "hopp over",
"shuffle": "spill i tilfeldig rekkefølge",
"shuffle_off": "tilfeldig rekkefølge skrudd av",
"skip_back": "hopp bakover",
"skip_forward": "hopp fremover",
"stop": "stopp",
"toggleFullscreenPlayer": "bytt til fullskjermspiller",
"pause": "sett på pause",
"viewQueue": "se kø",
"unfavorite": "fjern fra favoritter"
},
"setting": {
"accentColor": "aksentfarge",
"accentColor_description": "setter aksentfarge i applikasjonen",
"albumBackground": "album bakgrunnsbilde",
"albumBackgroundBlur": "album bakgrunnsbilde uskarphetsstørrelse",
"albumBackgroundBlur_description": "justerer grad av uskarphet lagt til på album bakgrunnsbilde",
"audioDevice": "lydenhet",
"zoom": "zoomprosent",
"zoom_description": "angir zoomprosent for applikasjonen"
},
"table": {
"config": {
"label": {
"playCount": "antall avspillinger",
"releaseDate": "utgivelsesdato",
"trackNumber": "spornummer",
"rowIndex": "radindeks",
"dateAdded": "dato lagt til",
"discNumber": "skivenummer",
"lastPlayed": "sist avspilt"
},
"view": {
"table": "tabell",
"card": "kort",
"grid": "rutenett",
"list": "liste",
"poster": "plakat"
},
"general": {
"autoFitColumns": "automatisk kolonnetilpasning",
"displayType": "visningstype",
"followCurrentSong": "følg gjeldende sang"
}
},
"column": {
"releaseYear": "år",
"comment": "kommentar",
"biography": "biografi",
"album": "album",
"albumArtist": "albumartist",
"dateAdded": "dato lagt til",
"discNumber": "skive",
"favorite": "favoritt",
"lastPlayed": "sist avspilt",
"path": "sti",
"playCount": "avspillinger",
"rating": "vurdering",
"releaseDate": "utgivelsesdato",
"title": "tittel",
"trackNumber": "spor"
}
}
}
+11 -3
View File
@@ -20,7 +20,8 @@
"openIn": {
"lastfm": "Open in Last.fm",
"musicbrainz": "Open in MusicBrainz"
}
},
"moveToNext": "ga naar volgende"
},
"common": {
"backward": "achteruit",
@@ -102,7 +103,12 @@
"size": "grootte",
"reload": "herlaad",
"setting": "instelling",
"close": "sluiten"
"close": "sluiten",
"additionalParticipants": "andere deelnemers",
"newVersion": "een nieuwe versie is geinstalleerd ({{version}})",
"viewReleaseNotes": "zie release notes",
"albumGain": "album gain",
"translation": "vertaling"
},
"filter": {
"rating": "rating",
@@ -252,7 +258,9 @@
"genreWithCount_one": "{{count}} genre",
"genreWithCount_other": "{{count}} genres",
"trackWithCount_one": "{{count}} track",
"trackWithCount_other": "{{count}} tracks"
"trackWithCount_other": "{{count}} tracks",
"song_one": "lied",
"song_other": "liedjes"
},
"table": {
"column": {
+23 -6
View File
@@ -115,7 +115,13 @@
"codec": "kodek",
"preview": "podgląd",
"close": "zamknij",
"translation": "tłumaczenie"
"translation": "tłumaczenie",
"additionalParticipants": "dodatkowi uczestnicy",
"newVersion": "nowa wersja została zaintalowana ({{version}})",
"viewReleaseNotes": "zobacz notatki dotyczące wydania",
"bitDepth": "głębia bitowa",
"sampleRate": "częstotliwość próbkowania",
"tags": "tagi"
},
"entity": {
"genre_one": "gatunek",
@@ -193,7 +199,8 @@
"loginRateError": "zbyt dużo prób logowania, poczekaj chwilę i spróbuj ponownie",
"badAlbum": "ta strona jest wyświetlana, ponieważ ten utwór nie jest częścią albumu. najprawdopodobniej ten problem występuje, jeśli utwór znajduje się w nadrzędnym folderze plików z muzyką. jellyfin grupuje utwory tylko wtedy, gdy znajdują się one w folderze.",
"networkError": "wystąpił błąd sieciowy",
"openError": "nie można otworzyć pliku"
"openError": "nie można otworzyć pliku",
"badValue": "niewłaściwa opcja \"{{value}}\". ta wartość już nie istnieje"
},
"filter": {
"mostPlayed": "najczęściej odtwarzane",
@@ -278,7 +285,8 @@
},
"queryEditor": {
"input_optionMatchAll": "dopasuj wszystkie",
"input_optionMatchAny": "dopasuj dowolne"
"input_optionMatchAny": "dopasuj dowolne",
"title": "edytor zapytań"
},
"lyricSearch": {
"input_name": "$t(common.name)",
@@ -389,7 +397,8 @@
"home": "$t(common.home)",
"artists": "$t(entity.artist_other)",
"albumArtists": "$t(entity.albumArtist_other)",
"shared": "udostępnione $t(entity.playlist_other)"
"shared": "udostępnione $t(entity.playlist_other)",
"myLibrary": "Moja biblioteka"
},
"home": {
"mostPlayed": "najczęściej odtwarzane",
@@ -533,7 +542,7 @@
"crossfadeDuration_description": "ustaw czas trwania efektu przenikania",
"language": "język",
"hotkey_toggleShuffle": "przełącz kolejność losową",
"discordRichPresence_description": "włącz status odtwarzania w {{discord}} (rich presence). Dzięki temu będą wyświetlane informacje takie jak: {{icon}}, {{playing}} i {{paused}}. ",
"discordRichPresence_description": "włącz status odtwarzania w {{discord}} (rich presence). Dzięki temu będą wyświetlane informacje takie jak: {{icon}}, {{playing}} i {{paused}}",
"audioDevice": "urządzenia dźwiękowe",
"hotkey_rate2": "oceń na 2 gwiazdki",
"exitToTray": "zamknij do zasobnika",
@@ -707,7 +716,15 @@
"doubleClickBehavior_description": "jeżeli włączone, wszystkie pasujące utwory w wyszukiwaniu zostaną zakolejkowane. w przeciwnym wypadku, tylko kliknięty będzie zakolejkowany",
"lastfmApiKey": "klucz API {{lastfm}}",
"lastfmApiKey_description": "klucz API dla {{lastfm}}. wymagany dla okładek",
"translationTargetLanguage": "docelowy język tłumaczenia"
"translationTargetLanguage": "docelowy język tłumaczenia",
"discordPausedStatus_description": "jeżeli włączone, status będzie pokazywany kiedy odtwarzanie jest wstrzymane",
"preferLocalLyrics": "preferuj lokalne teksty",
"preferLocalLyrics_description": "jeśli to możliwe, preferuj lokalne teksty zamiast tekstów zdalnych",
"lastfm": "pokazuj linki do last.fm",
"lastfm_description": "pokazuj linki do last.fm na stronach artystów/albumów",
"notify": "włącz powiadomienia o piosenkach",
"musicbrainz": "pokazuj linki do musicbrainz",
"musicbrainz_description": "pokazuj linki do musicbrainz na stronach artystów/albumów, gdzie istnieje mbid"
},
"table": {
"config": {
+21 -4
View File
@@ -91,7 +91,11 @@
"albumGain": "ganho do álbum",
"trackPeak": "pico da faixa",
"albumPeak": "pico do álbum",
"trackGain": "ganho da faixa"
"trackGain": "ganho da faixa",
"additionalParticipants": "participantes adicionais",
"tags": "tags",
"newVersion": "uma nova versão foi instalada ({{version}})",
"viewReleaseNotes": "ver notas de lançamento"
},
"action": {
"goToPage": "vá para página",
@@ -205,7 +209,18 @@
"buttonSize_description": "o tamanho dos botões da barra de reprodução",
"albumBackgroundBlur": "tamanho de desfoque da imagem de fundo do álbum",
"albumBackgroundBlur_description": "ajusta a quantidade de desfoque aplicada para a imagem de fundo do álbum",
"albumBackground": "imagem de fundo do álbum"
"albumBackground": "imagem de fundo do álbum",
"contextMenu_description": "permite esconder itens exibidos no menu quando você clica em um item com o botão direito. itens não selecionados serão escondidos",
"customCssEnable": "habilitar css customizado",
"customCssEnable_description": "permite escrever css customizado.",
"crossfadeDuration": "duraçao de crossfade",
"customCss": "css customizado",
"crossfadeDuration_description": "define a duração do efeito crossfade",
"customCssNotice": "Aviso: apesar de existir alguma higienização (url() e content: não são permitidas), o uso de CSS personalizado ainda pode representar riscos ao alterar a interface.",
"crossfadeStyle": "estilo do crossfade",
"crossfadeStyle_description": "seleciona qual estilo de crossfade usado no player de áudio",
"disableAutomaticUpdates": "desabilitar atualizações automáticas",
"disableLibraryUpdateOnStartup": "desabilitar a verificação de novas versões na inicialização"
},
"table": {
"config": {
@@ -262,7 +277,8 @@
"nowPlaying": "tocando agora",
"playlists": "$t(entity.playlist_other)",
"search": "$t(common.search)",
"settings": "$t(common.setting_other)"
"settings": "$t(common.setting_other)",
"myLibrary": "minha biblioteca"
},
"playlistList": {
"title": "$t(entity.playlist_other)"
@@ -524,6 +540,7 @@
"loginRateError": "muitas tentativas de login, tente novamente em alguns segundos",
"badAlbum": "você está vendo este erro por que está música não é parte de algum album. um motivo comum para você estar vendo este erro é se a sua música estiver na raiz da sua pasta de músicas. o jellyfin apenas agrupa as músicas se elas estiveram na mesma pasta.",
"networkError": "ocorreu um erro na internet",
"openError": "não foi possível abrir o arquivo"
"openError": "não foi possível abrir o arquivo",
"badValue": "opção inválida \"{{value}}\". este valor não existe no momento"
}
}
+545
View File
@@ -0,0 +1,545 @@
{
"action": {
"addToFavorites": "adicionar a $t(entity.favorite_other)",
"addToPlaylist": "adicionar a $t(entity.playlist_one)",
"clearQueue": "limpar fila",
"createPlaylist": "criar $t(entity.playlist_one)",
"deletePlaylist": "apagar $t(entity.playlist_one)",
"deselectAll": "desmarcar todos",
"editPlaylist": "editar $t(entity.playlist_one)",
"goToPage": "vá para página",
"moveToNext": "mover para o próximo",
"moveToBottom": "mover para baixo",
"moveToTop": "mover para o topo",
"refresh": "$t(common.refresh)",
"removeFromFavorites": "remover de $t(entity.favorite_other)",
"removeFromPlaylist": "remover da $t(entity.playlist_one)",
"removeFromQueue": "remover da fila",
"setRating": "definir classificação",
"toggleSmartPlaylistEditor": "alternar editor $t(entity.smartPlaylist)",
"viewPlaylists": "ver $t(entity.playlist_other)",
"openIn": {
"lastfm": "Abrir em Last.fm",
"musicbrainz": "Abrir em MusicBrainz"
}
},
"common": {
"action_one": "ação",
"action_many": "ações",
"action_other": "ações",
"add": "adicionar",
"additionalParticipants": "participantes adicionais",
"newVersion": "uma nova versão foi instalada ({{version}})",
"viewReleaseNotes": "ver notas de lançamento",
"albumGain": "ganho do álbum",
"albumPeak": "pico do álbum",
"areYouSure": "tem certeza?",
"ascending": "ascendente",
"backward": "para trás",
"biography": "biografia",
"bitrate": "taxa de bits",
"bpm": "bpm",
"cancel": "cancelar",
"center": "centro",
"channel_one": "canal",
"channel_many": "canais",
"channel_other": "canais",
"clear": "limpar",
"close": "fechar",
"codec": "codec",
"collapse": "minimizar",
"comingSoon": "em breve…",
"configure": "configurar",
"confirm": "confirmar",
"create": "criar",
"currentSong": "$t(entity.track_one) atual",
"decrease": "diminuir",
"delete": "apagar",
"descending": "abaixar",
"description": "descrição",
"disable": "desativar",
"disc": "disco",
"dismiss": "liberar",
"duration": "duração",
"edit": "editar",
"enable": "ativar",
"expand": "expandir",
"favorite": "favorito",
"filter_one": "filtro",
"filter_many": "filtros",
"filter_other": "filtros",
"filters": "filtros",
"forceRestartRequired": "reinicie para aplicar as alterações… feche a notificação para reiniciar",
"forward": "para frente",
"gap": "intervalo",
"home": "início",
"increase": "incrementar",
"left": "esquerda",
"limit": "limite",
"manage": "gerir",
"maximize": "maximizar",
"menu": "menu",
"minimize": "minimizar",
"modified": "modificado",
"mbid": "ID no MusicBrainz",
"name": "nome",
"no": "não",
"none": "nenhum",
"noResultsFromQuery": "a consulta não retornou resultados",
"note": "observação",
"ok": "ok",
"owner": "dono",
"path": "caminho",
"playerMustBePaused": "o player deve estar pausado",
"preview": "pré-visualizar",
"previousSong": "anterior $t(entity.track_one)",
"quit": "sair",
"random": "aleatório",
"rating": "classificação",
"refresh": "atualizar",
"reload": "recarregar",
"reset": "reiniciar",
"resetToDefault": "restaurar ao padrão",
"restartRequired": "é necessário reiniciar",
"right": "direita",
"save": "gravar",
"saveAndReplace": "gravar e substituir",
"saveAs": "gravar como",
"search": "procurar",
"setting": "configuração",
"share": "partilhar",
"size": "tamanho",
"sortOrder": "ordem",
"tags": "tags",
"title": "titulo",
"trackNumber": "faixa",
"trackGain": "ganho da faixa",
"trackPeak": "pico da faixa",
"translation": "tradução",
"unknown": "desconhecido",
"version": "versão",
"year": "ano",
"yes": "sim"
},
"entity": {
"album_one": "álbum",
"album_many": "álbuns",
"album_other": "álbuns",
"albumArtist_one": "artista do álbum",
"albumArtist_many": "artistas do álbum",
"albumArtist_other": "artistas do álbum",
"albumArtistCount_one": "{{count}} artista do álbum",
"albumArtistCount_many": "{{count}} artistas do álbum",
"albumArtistCount_other": "{{count}} artistas do álbum",
"albumWithCount_one": "{{count}} álbum",
"albumWithCount_many": "{{count}} álbuns",
"albumWithCount_other": "{{count}} álbuns",
"artist_one": "artista",
"artist_many": "artistas",
"artist_other": "artistas",
"artistWithCount_one": "{{count}} artista",
"artistWithCount_many": "{{count}} artistas",
"artistWithCount_other": "{{count}} artistas",
"favorite_one": "favorito",
"favorite_many": "favoritos",
"favorite_other": "favoritos",
"folder_one": "pasta",
"folder_many": "pastas",
"folder_other": "pastas",
"folderWithCount_one": "{{count}} pasta",
"folderWithCount_many": "{{count}} pastas",
"folderWithCount_other": "{{count}} pastas",
"genre_one": "gênero",
"genre_many": "gêneros",
"genre_other": "gêneros",
"genreWithCount_one": "{{count}} gênero",
"genreWithCount_many": "{{count}} gêneros",
"genreWithCount_other": "{{count}} gêneros",
"playlist_one": "playlist",
"playlist_many": "playlists",
"playlist_other": "playlists",
"play_one": "{{count}} reprodução",
"play_many": "{{count}} reproduções",
"play_other": "{{count}} reproduções",
"playlistWithCount_one": "{{count}} playlist",
"playlistWithCount_many": "{{count}} playlists",
"playlistWithCount_other": "{{count}} playlists",
"smartPlaylist": "$t(entity.playlist_one) inteligente",
"track_one": "faixa",
"track_many": "faixas",
"track_other": "faixas",
"song_one": "música",
"song_many": "músicas",
"song_other": "músicas",
"trackWithCount_one": "{{count}} faixa",
"trackWithCount_many": "{{count}} faixas",
"trackWithCount_other": "{{count}} faixas"
},
"error": {
"apiRouteError": "não é possível encaminhar a solicitação",
"audioDeviceFetchError": "ocorreu um erro ao tentar obter dispositivos de áudio",
"authenticationFailed": "falha na autenticação",
"badAlbum": "está a ver este erro por que está música não é parte de algum album. um motivo comum para si estar a ver este erro é se a sua música estiver na raiz da sua pasta de músicas. o jellyfin apenas agrupa as músicas se elas estiveram na mesma pasta.",
"badValue": "opção inválida \"{{value}}\". este valor não existe no momento",
"credentialsRequired": "credenciais necessárias",
"endpointNotImplementedError": "endpoint {{endpoint}} não está implementado para {{serverType}}",
"genericError": "um erro ocorreu",
"invalidServer": "servidor inválido",
"localFontAccessDenied": "acesso a fontes locais rejeitado",
"loginRateError": "muitas tentativas de login, tente novamente em alguns segundos",
"mpvRequired": "MPV necessário",
"networkError": "ocorreu um erro na internet",
"openError": "não foi possível abrir o ficheiro",
"playbackError": "ocorreu um erro ao tentar reproduzir a média",
"remoteDisableError": "ocorreu um erro ao tentar $t(common.disable) o servidor remoto",
"remoteEnableError": "ocorreu um erro ao tentar $t(common.enable) o servidor remoto",
"remotePortError": "ocorreu um erro ao tentar definir a porta do servidor remoto",
"remotePortWarning": "reinicie o servidor para aplicar a nova porta",
"serverNotSelectedError": "nenhum servidor selecionado",
"serverRequired": "servidor necessário",
"sessionExpiredError": "a sua sessão expirou",
"systemFontError": "ocorreu um erro ao tentar obter fontes do sistema"
},
"filter": {
"album": "$t(entity.album_one)",
"albumArtist": "$t(entity.albumArtist_one)",
"albumCount": "número de $t(entity.album_other)",
"artist": "$t(entity.artist_one)",
"biography": "bibliografia",
"bitrate": "bitrate",
"bpm": "bpm",
"channels": "$t(common.channel_other)",
"comment": "comentário",
"communityRating": "Nota da comunidade",
"criticRating": "avaliação da crítica",
"dateAdded": "data de adição",
"disc": "disco",
"duration": "duração",
"favorited": "favoritado",
"fromYear": "a partir do ano",
"genre": "$t(entity.genre_one)",
"id": "id",
"isCompilation": "é compilação",
"isFavorited": "é favoritado",
"isPublic": "é público",
"isRated": "possui avaliação",
"isRecentlyPlayed": "foi tocado recentemente",
"lastPlayed": "última tocada",
"mostPlayed": "mais tocado",
"name": "nome",
"note": "nota",
"owner": "$t(common.owner)",
"path": "caminho",
"playCount": "contador de reproduções",
"random": "aleatório",
"rating": "avaliação",
"recentlyAdded": "adicionado recentemente",
"recentlyPlayed": "tocado recentemente",
"recentlyUpdated": "atualizado recentemente",
"releaseDate": "data de lançamento",
"releaseYear": "ano de lançamento",
"search": "buscar",
"songCount": "contador de músicas",
"title": "titulo",
"toYear": "até o ano",
"trackNumber": "faixa"
},
"form": {
"addServer": {
"error_savePassword": "um erro ocorreu ao tentar gravar a palavra-passe",
"ignoreCors": "ignorar CORS ($t(common.restartRequired))",
"ignoreSsl": "ignorar ssl ($t(common.restartRequired))",
"input_legacyAuthentication": "ativar autenticação legada",
"input_name": "nome do servidor",
"input_password": "palavra-passe",
"input_savePassword": "gravar palavra-passe",
"input_url": "url",
"input_username": "nome de utilizador",
"success": "servidor adicionado com sucesso",
"title": "adicionar servidor"
},
"addToPlaylist": {
"input_playlists": "$t(entity.playlist_other)",
"input_skipDuplicates": "pular duplicadas",
"success": "adicionado $t(entity.trackWithCount, {\"count\": {{message}} }) para $t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })",
"title": "adicionar à $t(entity.playlist_one)"
},
"createPlaylist": {
"input_description": "$t(common.description)",
"input_name": "$t(common.name)",
"input_owner": "$t(common.owner)",
"input_public": "público",
"success": "$t(entity.playlist_one) criada com sucesso",
"title": "criar $t(entity.playlist_one)"
},
"deletePlaylist": {
"input_confirm": "escreva o nome da $t(entity.playlist_one) para confirmar",
"success": "$t(entity.playlist_one) apagada com sucesso",
"title": "apagar $t(entity.playlist_one)"
},
"editPlaylist": {
"publicJellyfinNote": "O Jellyfin por algum motivo não expõe se uma playlist é pública ou não. Se deseja que ela permaneça pública, por favor selecione a seguinte entrada",
"success": "$t(entity.playlist_one) atualizada com sucesso",
"title": "editar $t(entity.playlist_one)"
},
"lyricSearch": {
"input_artist": "$t(entity.artist_one)",
"input_name": "$t(common.name)",
"title": "pesquisa de letras"
},
"queryEditor": {
"input_optionMatchAll": "corresponder todos",
"input_optionMatchAny": "corresponder qualquer um"
},
"shareItem": {
"allowDownloading": "permitir descargas",
"description": "descrição",
"setExpiration": "definir expiração",
"success": "ligação de compartilhamento copiado para a área de transferência (ou clique aqui para abrir)",
"expireInvalid": "a expiração deve ser uma data futura",
"createFailed": "falha ao criar compartilhamento (o compartilhamento está ativado?)"
},
"updateServer": {
"success": "servidor atualizado com sucesso",
"title": "atualizar servidor"
}
},
"page": {
"albumArtistDetail": {
"about": "Sobre {{artist}}",
"appearsOn": "aparece em",
"recentReleases": "lançamentos recentes",
"viewDiscography": "ver discografia",
"relatedArtists": "$t(entity.artist_other) relacionados",
"topSongs": "músicas mais tocadas",
"topSongsFrom": "músicas mais tocadas de {{title}}",
"viewAll": "ver tudo",
"viewAllTracks": "ver todas as $t(entity.track_other)"
},
"albumArtistList": {
"title": "$t(entity.albumArtist_other)"
},
"albumDetail": {
"moreFromArtist": "mais deste $t(entity.artist_one)",
"moreFromGeneric": "mais que {{elemento}}",
"released": "lançado"
},
"albumList": {
"artistAlbums": "álbuns de {{artist}}",
"genreAlbums": "\"{{genre}}\" $t(entity.album_other)",
"title": "$t(entity.album_other)"
},
"appMenu": {
"collapseSidebar": "recolher barra lateral",
"expandSidebar": "expandir barra lateral",
"goBack": "voltar",
"goForward": "avançar",
"manageServers": "gerir servidores",
"openBrowserDevtools": "abrir ferramentas do programador",
"quit": "$t(common.quit)",
"selectServer": "selecionar servidor",
"settings": "$t(common.setting_other)",
"version": "versão {{version}}"
},
"manageServers": {
"title": "gerir servidores",
"serverDetails": "pormenores do servidor",
"url": "URL",
"username": "nome de utilizador",
"editServerDetailsTooltip": "editar pormenores do servidor",
"removeServer": "remover servidor"
},
"contextMenu": {
"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)",
"download": "descarregar",
"moveToNext": "$t(action.moveToNext)",
"moveToBottom": "$t(action.moveToBottom)",
"moveToTop": "$t(action.moveToTop)",
"numberSelected": "{{count}} selecionado",
"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)",
"shareItem": "partilhar elemento",
"showDetails": "obter informações"
},
"fullscreenPlayer": {
"config": {
"dynamicBackground": "fundo dinâmico",
"dynamicImageBlur": "tamanho do desfoque da imagem",
"dynamicIsImage": "ativar imagem de fundo",
"followCurrentLyric": "acompanhar letra",
"lyricAlignment": "alinhamento da letra",
"lyricOffset": "deslocamento da letra (ms)",
"lyricGap": "espaçamento da letra",
"lyricSize": "tamanho da letra",
"opacity": "opacidade",
"showLyricMatch": "exibir correspondência da letra",
"showLyricProvider": "exibir origem da letra",
"synchronized": "sincronizado",
"unsynchronized": "não sincronizado",
"useImageAspectRatio": "usar proporção da imagem"
},
"lyrics": "letra",
"related": "relacionado",
"upNext": "a seguir",
"visualizer": "visualizador",
"noLyrics": "nenhuma letra encontrada"
},
"genreList": {
"showAlbums": "mostrar $t(entity.genre_one) $t(entity.album_other)",
"showTracks": "mostrar $t(entity.genre_one) $t(entity.track_other)",
"title": "$t(entity.genre_other)"
},
"globalSearch": {
"commands": {
"goToPage": "ir à página",
"searchFor": "procurar {{query}}",
"serverCommands": "comandos do servidor"
},
"title": "comandos"
},
"home": {
"explore": "explore a sua biblioteca",
"mostPlayed": "mais tocado",
"newlyAdded": "lançamentos recém-adicionados",
"recentlyPlayed": "tocado recentemente",
"title": "$t(common.home)"
},
"itemDetail": {
"copyPath": "copiar caminho para a área de transferência",
"copiedPath": "caminho copiado com sucesso",
"openFile": "mostrar faixa no gestor de ficheiros"
},
"playlist": {
"reorder": "reordenar apenas disponível quando ordenado pelo id"
},
"playlistList": {
"title": "$t(entity.playlist_other)"
},
"setting": {
"advanced": "avançado",
"generalTab": "geral",
"hotkeysTab": "teclas de atalho",
"playbackTab": "reprodução",
"windowTab": "janela"
},
"sidebar": {
"albumArtists": "$t(entity.albumArtist_other)",
"albums": "$t(entity.album_other)",
"artists": "$t(entity.artist_other)",
"folders": "$t(entity.folder_other)",
"genres": "$t(entity.genre_other)",
"home": "$t(common.home)",
"myLibrary": "a minha biblioteca",
"nowPlaying": "agora a tocar",
"playlists": "$t(entity.playlist_other)",
"search": "$t(common.search)",
"settings": "$t(common.setting_other)",
"shared": "$t(entity.playlist_other) partilhada",
"tracks": "$t(entity.track_other)"
},
"trackList": {
"artistTracks": "faixas de {{artist}}",
"genreTracks": "\"{{genre}}\" $t(entity.track_other)",
"title": "$t(entity.track_other)"
}
},
"player": {
"addLast": "adicionar no final",
"addNext": "adicionar a seguir",
"favorite": "favorito",
"mute": "mudo",
"muted": "mudo",
"next": "próximo",
"play": "tocar",
"playbackFetchCancel": "isto demora um pouco... feche a notificação para cancelar",
"playbackFetchInProgress": "a carregar músicas…",
"playbackFetchNoResults": "nenhuma música encontrada",
"playbackSpeed": "velocidade de reprodução",
"playRandom": "tocar aleatório",
"playSimilarSongs": "tocar músicas similares",
"previous": "anterior",
"queue_clear": "limpar fila",
"queue_moveToBottom": "mover selecionados para o topo",
"queue_moveToTop": "mover selecionados para o fim",
"queue_remove": "remover selecionados",
"repeat": "repetir",
"repeat_all": "repetir tudo",
"repeat_off": "repetição desativada",
"shuffle": "tocar aleatório",
"shuffle_off": "aleatório desativado",
"skip": "pular",
"skip_back": "retroceder",
"skip_forward": "avançar",
"stop": "parar",
"toggleFullscreenPlayer": "alternar player de ecrã cheio",
"unfavorite": "remover favorito",
"pause": "pausar",
"viewQueue": "ver fila"
},
"setting": {
"accentColor": "cor de realce",
"accentColor_description": "define a cor de realce para a aplicação",
"albumBackground": "imagem de fundo do álbum",
"albumBackground_description": "adiciona uma imagem de fundo contendo a arte do álbum para a página de álbum",
"albumBackgroundBlur": "tamanho de desfoque da imagem de fundo do álbum",
"albumBackgroundBlur_description": "ajusta a quantidade de desfoque aplicada para a imagem de fundo do álbum",
"applicationHotkeys": "teclas de atalho da aplicação",
"applicationHotkeys_description": "configure as teclas de atalho da aplicação. clique na caixa de seleção para definir como tecla de atalho global (somente desktop)",
"artistConfiguration": "configuração da página de artista de álbum",
"artistConfiguration_description": "configure quais elementos serão mostrados, e em qual ordem, na página de artista de álbum",
"audioDevice": "dispositivo de áudio",
"audioDevice_description": "selecione o dispositivo de áudio usado para reprodução (somente player web)",
"audioExclusiveMode": "modo de áudio exclusivo",
"audioExclusiveMode_description": "ativar modo de saída exclusiva. Neste modo, o sistema é geralmente bloqueado, e apenas mpv terá saída de áudio",
"audioPlayer": "player de áudio",
"audioPlayer_description": "selecione o player de áudio usado para reprodução",
"buttonSize": "tamanho do botão da barra de reprodução",
"buttonSize_description": "o tamanho dos botões da barra de reprodução",
"clearCache": "limpar cache do navegador",
"clearCache_description": "uma 'limpeza geral' do feishin. em adição a limpar o cache do feishin, limpa o cache do navegador (imagens gravadas e outros recursos). as credenciais de servidor e as configurações serão mantidas",
"clearQueryCache": "limpar cache do feishin",
"clearQueryCache_description": "uma 'limpeza leve' do feishin. isto irá renovar playlists, metadados de faixas, e resetar letras gravadas. as configurações, as credenciais de servidor e o cache de imagens serão mantidos",
"clearCacheSuccess": "cache limpo com sucesso",
"contextMenu": "configuração do menu de contexto (clique do botão direito do rato)",
"contextMenu_description": "permite esconder elementos exibidos no menu quando clica num elemento com o botão direito. elementos não selecionados serão escondidos",
"crossfadeDuration": "duraçao de crossfade",
"crossfadeDuration_description": "define a duração do efeito crossfade",
"crossfadeStyle": "estilo do crossfade",
"crossfadeStyle_description": "seleciona qual estilo de crossfade usado no player de áudio",
"customCssEnable": "ativar css customizado",
"customCssEnable_description": "permite escrever css customizado.",
"customCssNotice": "Aviso: apesar de existir alguma higienização (url() e content: não são permitidas), o uso de CSS personalizado ainda pode representar riscos ao alterar a interface.",
"customCss": "css customizado",
"disableAutomaticUpdates": "desativar atualizações automáticas",
"disableLibraryUpdateOnStartup": "desativar a verificação de novas versões na inicialização",
"discordApplicationId": "{{discord}} ID da aplicação",
"discordIdleStatus_description": "quando ativado, atualiza o estado enquanto o player está ocioso",
"discordUpdateInterval_description": "o tempo em segundos entre cada atualização (mínimo 15 segundos)",
"playButtonBehavior_description": "define o comportamento padrão do botão play ao adicionar músicas à fila"
},
"table": {
"column": {
"discNumber": "disco",
"size": "$t(common.size)",
"title": "titulo"
},
"config": {
"label": {
"discNumber": "numero do disco",
"titleCombined": "$t(common.title) (combinado)"
}
}
}
}
+3 -3
View File
@@ -86,7 +86,7 @@
"confirm": "подтвердить",
"resetToDefault": "сбросить настройки",
"home": "главная",
"comingSoon": "скоро...",
"comingSoon": "скоро",
"reset": "сбросить",
"channel_one": "канал",
"channel_few": "канала",
@@ -333,7 +333,7 @@
"next": "следующий",
"shuffle": "перемешать",
"playbackFetchNoResults": "песни не найдены",
"playbackFetchInProgress": "загрузка песен..",
"playbackFetchInProgress": "загрузка песен",
"addNext": "воспроизвести следующим",
"playbackSpeed": "скорость воспроизведения",
"playbackFetchCancel": "пожалуйста, подождите немного... закройте уведомление для отмены",
@@ -759,7 +759,7 @@
"artistConfiguration": "конфигурация страницы альбомов исполнителей",
"artistConfiguration_description": "позволяет настроить видимость и порядок элементов на странице альбомов исполнителей",
"fontType_description": "встроенный позволяет выбрать один из шрифтов, предоставляемых Feishin. системный позволяет выбрать любой шрифт, предоставляемый вашей операционной системой. пользовательский позволяет выбрать свой собственный шрифт",
"discordRichPresence_description": "включить статус воспроизведения в статус профиля в {{discord}}. Ключи изображений: {{icon}}, {{playing}} и {{paused}} ",
"discordRichPresence_description": "включить статус воспроизведения в статус профиля в {{discord}}. Ключи изображений: {{icon}}, {{playing}} и {{paused}}",
"lyricOffset": "синхронизация текста треков (мс)"
}
}
+831
View File
@@ -0,0 +1,831 @@
{
"action": {
"addToFavorites": "pridať do $t(entity.favorite_other)",
"addToPlaylist": "pridať do $t(entity.playlist_one)",
"clearQueue": "vymazať frontu",
"createPlaylist": "vytvoriť $t(entity.playlist_one)",
"deletePlaylist": "odstrániť $t(entity.playlist_one)",
"deselectAll": "odznačiť všetko",
"editPlaylist": "upraviť $t(entity.playlist_one)",
"goToPage": "ísť na stránku",
"moveToNext": "prejsť na ďalší",
"moveToBottom": "presunúť sa na spodok",
"moveToTop": "presunúť sa navrch",
"refresh": "$t(common.refresh)",
"removeFromFavorites": "odstrániť z $t(entity.favorite_other)",
"removeFromPlaylist": "odstrániť z $t(entity.playlist_one)",
"removeFromQueue": "odstrániť z fronty",
"setRating": "ohodnotiť",
"toggleSmartPlaylistEditor": "prepnúť $t(entity.smartPlaylist) editor",
"viewPlaylists": "zobraziť $t(entity.playlist_other)",
"openIn": {
"lastfm": "Otvoriť v Last.fm",
"musicbrainz": "Otvoriť v MusicBrainz"
}
},
"common": {
"action_one": "akcia",
"action_few": "akcie",
"action_other": "akcií",
"add": "pridať",
"additionalParticipants": "ďalší účastníci",
"newVersion": "bola nainštalovaná nová verzia ({{version}})",
"viewReleaseNotes": "zobraziť poznámky k vydaniu",
"albumGain": "hranosť albumu",
"albumPeak": "vrchol albumu",
"areYouSure": "ste si istý?",
"ascending": "vzostupne",
"backward": "dozadu",
"biography": "životopis",
"bitDepth": "bitová hĺbka",
"bitrate": "bitrate",
"bpm": "bpm",
"cancel": "zrušiť",
"center": "uprostred",
"channel_one": "kanál",
"channel_few": "kanály",
"channel_other": "kanálov",
"clear": "vyčistiť",
"close": "zavrieť",
"codec": "kodek",
"collapse": "zbaliť",
"comingSoon": "čoskoro…",
"configure": "nastaviť",
"confirm": "potvrdiť",
"create": "vytvoriť",
"currentSong": "aktuálne $t(entity.track_one)",
"decrease": "znížiť",
"delete": "zmazať",
"descending": "zostupne",
"description": "popis",
"disable": "zakázať",
"disc": "disk",
"dismiss": "zamietnuť",
"duration": "dĺžka",
"edit": "zmeniť",
"enable": "povoliť",
"expand": "rozbaliť",
"favorite": "obľúbené",
"filter_one": "filter",
"filter_few": "filtre",
"filter_other": "filtrov",
"filters": "filtre",
"forceRestartRequired": "zmeny vyžadujú reštart... zavretím upozornenia sa aplikácia reštartuje",
"forward": "dopredu",
"gap": "medzera",
"home": "domov",
"increase": "zvýšiť",
"left": "vľavo",
"limit": "limit",
"manage": "spravovať",
"maximize": "maximalizovať",
"menu": "ponuka",
"minimize": "minimalizovať",
"modified": "zmenené",
"mbid": "MusicBrainz ID",
"name": "meno",
"no": "nie",
"none": "žiadny",
"noResultsFromQuery": "dopyt nevrátil žiadne výsledky",
"note": "poznámka",
"ok": "ok",
"owner": "majiteľ",
"path": "cesta",
"playerMustBePaused": "prehrávač musí byť pozastavený",
"preview": "náhľad",
"previousSong": "predchádzajúca $t(entity.track_one)",
"quit": "ukončiť",
"random": "náhodne",
"rating": "hodnotenie",
"refresh": "obnoviť",
"reload": "znovu načítať",
"reset": "resetovať",
"resetToDefault": "resetovať na predvolené",
"restartRequired": "vyžaduje sa reštart",
"right": "vpravo",
"sampleRate": "vzorkovacia frekvencia",
"save": "uložiť",
"saveAndReplace": "uložiť a nahradiť",
"saveAs": "uložiť ako",
"search": "vyhľadať",
"setting": "nastavenie",
"share": "zdieľať",
"size": "veľkosť",
"sortOrder": "poradie",
"tags": "štítky",
"title": "názov",
"trackNumber": "skladba",
"trackGain": "hranosť skladby",
"trackPeak": "vrchol skladby",
"translation": "preklad",
"unknown": "neznámy",
"version": "verzia",
"year": "rok",
"yes": "áno"
},
"filter": {
"name": "meno",
"album": "$t(entity.album_one)",
"albumArtist": "$t(entity.albumArtist_one)",
"albumCount": "$t(entity.album_other) počet",
"artist": "$t(entity.artist_one)",
"biography": "životopis",
"bitrate": "bitrate",
"bpm": "bpm",
"channels": "$t(common.channel_other)",
"comment": "komentár",
"communityRating": "hodnotenie komunity",
"criticRating": "hodnotenie kritiky",
"dateAdded": "dátum pridania",
"disc": "disk",
"duration": "dĺžka",
"favorited": "obľúbené",
"fromYear": "od roku",
"genre": "$t(entity.genre_one)",
"id": "id",
"isCompilation": "je kompilácia",
"isFavorited": "je obľúbený",
"isPublic": "je verejný",
"isRated": "je hodnotený",
"isRecentlyPlayed": "je nedávno hraný",
"lastPlayed": "posledne hraný",
"mostPlayed": "najhranejší",
"note": "poznámka",
"owner": "$t(common.owner)",
"path": "cesta",
"playCount": "počet prehraní",
"random": "náhodne",
"rating": "hodnotenie",
"recentlyAdded": "nedávno pridané",
"recentlyPlayed": "nedávno hrané",
"recentlyUpdated": "nedávno aktualizované",
"releaseDate": "dátum vydania",
"releaseYear": "rok vydania",
"search": "vyhľadať",
"songCount": "počet skladieb",
"title": "názov",
"toYear": "do roku",
"trackNumber": "stopa"
},
"form": {
"addServer": {
"input_name": "názov servera",
"input_username": "užívateľské meno",
"error_savePassword": "pri pokuse o uloženie hesla sa vyskytla chyba",
"ignoreCors": "ignorovať cors ($t(common.restartRequired)",
"ignoreSsl": "ignorovať ssl ($t(common.restartRequired))",
"input_legacyAuthentication": "povoliť zastarané overenie",
"input_password": "heslo",
"input_savePassword": "uložiť heslo",
"input_url": "url",
"success": "server úspešne pridaný",
"title": "pridať server"
},
"addToPlaylist": {
"input_playlists": "$t(entity.playlist_other)",
"input_skipDuplicates": "preskočiť duplicity",
"success": "$t(entity.trackWithCount, {\"count\": {{message}} }) pridané do $t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })",
"title": "pridať do $t(entity.playlist_one)"
},
"createPlaylist": {
"input_description": "$t(common.description)",
"input_name": "$t(common.name)",
"input_owner": "$t(common.owner)",
"input_public": "verejný",
"success": "$t(entity.playlist_one) úspešne vytvorený",
"title": "vytvoriť $t(entity.playlist_one)"
},
"deletePlaylist": {
"input_confirm": "pre potvrdenie zadajte názov $t(entity.playlist_one)",
"success": "$t(entity.playlist_one) bol úspešne odstránený",
"title": "odstrániť $t(entity.playlist_one)"
},
"editPlaylist": {
"publicJellyfinNote": "Jellyfin z nejakého dôvodu neinformuje, či je playlist verejný alebo nie. Ak si ho želáte ponechať ako verejný, ponechajte nasledujúci vstup ako povolený",
"success": "$t(entity.playlist_one) úspešne aktualizovaný",
"title": "upraviť $t(entity.playlist_one)"
},
"lyricSearch": {
"input_artist": "$t(entity.artist_one)",
"input_name": "$t(common.name)",
"title": "vyhľadať text skladby"
},
"queryEditor": {
"title": "editor dopytov",
"input_optionMatchAll": "zhoda na všetkých",
"input_optionMatchAny": "zhoda na ľubovoľnom"
},
"shareItem": {
"allowDownloading": "povoliť sťahovanie",
"description": "popis",
"setExpiration": "nastaviť vypršanie platnosti",
"success": "zdieľať link skopírovaný do schránky (alebo klinutím otvoriť tu)",
"expireInvalid": "vypršanie platnosti musí byť v budúcnosti",
"createFailed": "nepodarilo sa nazdielať (je zdieľanie povolené)"
},
"updateServer": {
"success": "server bol úspešne aktualizovaný",
"title": "aktualizovať server"
},
"privateMode": {
"enabled": "je zapnutý súkromný režim, status prehrávania je pre vonkajšie integrácie skrytý",
"disabled": "súkromný režim je vypnutý, status prehrávania je teraz pre vonkajšie integrácie povolený",
"title": "súkromný režim"
}
},
"entity": {
"album_one": "album",
"album_few": "albumy",
"album_other": "albumov",
"albumArtist_one": "interpret albumu",
"albumArtist_few": "interpreti albumu",
"albumArtist_other": "interpretov albumu",
"albumArtistCount_one": "{{count}} interpret albumu",
"albumArtistCount_few": "{{count}} interpreti albumu",
"albumArtistCount_other": "{{count}} interpretov albumu",
"albumWithCount_one": "{{count}} album",
"albumWithCount_few": "{{count}} albumy",
"albumWithCount_other": "{{count}} albumov",
"artist_one": "interpret",
"artist_few": "interpreti",
"artist_other": "interpretov",
"artistWithCount_one": "{{count}} interpret",
"artistWithCount_few": "{{count}} interpreti",
"artistWithCount_other": "{{count}} interpretov",
"favorite_one": "obľúbený",
"favorite_few": "obľúbení",
"favorite_other": "obľúbených",
"folder_one": "priečinok",
"folder_few": "priečinky",
"folder_other": "priečinkov",
"folderWithCount_one": "{{count}} priečinok",
"folderWithCount_few": "{{count}} priečinky",
"folderWithCount_other": "{{count}} priečinkov",
"genre_one": "žáner",
"genre_few": "žánre",
"genre_other": "žánrov",
"genreWithCount_one": "{{count}} žáner",
"genreWithCount_few": "{{count}} žánre",
"genreWithCount_other": "{{count}} žánrov",
"playlist_one": "playlist",
"playlist_few": "playlisty",
"playlist_other": "playlistov",
"play_one": "{{count}} prehranie",
"play_few": "{{count}} prehrania",
"play_other": "{{count}} prehraní",
"playlistWithCount_one": "{{count}} playlist",
"playlistWithCount_few": "{{count}} playlisty",
"playlistWithCount_other": "{{count}} playlistov",
"smartPlaylist": "smart $t(entity.playlist_one)",
"track_one": "stopa",
"track_few": "stopy",
"track_other": "stôp",
"song_one": "skladba",
"song_few": "skladby",
"song_other": "skladieb",
"trackWithCount_one": "{{count}} stopa",
"trackWithCount_few": "{{count}} stopy",
"trackWithCount_other": "{{count}} stôp"
},
"error": {
"apiRouteError": "nie je možné zaslať požiadavku",
"audioDeviceFetchError": "pri vyhľadávaní zvukových zariadení sa vyskytla chyba",
"authenticationFailed": "overenie zlyhalo",
"badAlbum": "túto stránku vidíte, pretože táto skladba nie je súčasťou albumu. najčastejšou príčinou tohto problému býva umiestnenie skladby priamo v priečinku hudobnej knižnice. jellyfin navzájom prepája iba skladby, ktoré sú spolu v jednom priečinku.",
"badValue": "neplatná možnosť \"{{value}}\". táto hodnota už neexistuje",
"credentialsRequired": "vyžadujú sa prihlasovacie údaje",
"endpointNotImplementedError": "koncový bod {{endpoint}} nie je implementovaný v {{serverType}}",
"genericError": "vyskyla sa chyba",
"invalidServer": "neplatný server",
"localFontAccessDenied": "prístup k lokálnym fontom bol odmietnutý",
"loginRateError": "príliš veľa pokusov o prihlásenie, skúste to znova o pár sekúnd",
"mpvRequired": "vyžaduje sa MPV",
"networkError": "vyskytla sa chyba siete",
"notificationDenied": "povolenia na oznámenia boli odmietnuté. toto nastavenie nemá žiadny účinok",
"openError": "súbor nebolo možné otvoriť",
"playbackError": "pri prehrávaní média sa vyskytla chyba",
"remoteDisableError": "pri pokuse o $t(common.disable) vzdialeného severa sa vyskytla chyba",
"remoteEnableError": "pri pokuse o $t(common.enable) vzdialeného servera sa vyskytla chyba",
"remotePortError": "pri nastavovaní portu vzdialeného servera sa vyskytla chyba",
"remotePortWarning": "pre použitie nového portu reštartujte server",
"serverNotSelectedError": "nebol vybraný žiadny server",
"serverRequired": "vyžaduje sa server",
"sessionExpiredError": "vaša relácia vypršala",
"systemFontError": "pri pokuse o získanie systémových fontov sa vyskytla chyba"
},
"page": {
"albumArtistDetail": {
"about": "O {{artist}}",
"appearsOn": "vyskytuje sa na",
"recentReleases": "posledné vydania",
"viewDiscography": "zobraziť diskografiu",
"relatedArtists": "súvisiaci s $t(entity.artist_other)",
"topSongs": "top skladby",
"topSongsFrom": "top skladby z {{title}}",
"viewAll": "zobraziť všetko",
"viewAllTracks": "zobraziť všetky $t(entity.track_other)"
},
"albumArtistList": {
"title": "$t(entity.albumArtist_other)"
},
"albumDetail": {
"moreFromArtist": "viac od $t(entity.artist_one)",
"moreFromGeneric": "viac z {{item}}",
"released": "vydané"
},
"albumList": {
"artistAlbums": "albumy {{artist}}",
"genreAlbums": "\"{{genre}}\" $t(entity.album_other)",
"title": "$t(entity.album_other)"
},
"appMenu": {
"collapseSidebar": "zbaliť bočnú lištu",
"expandSidebar": "rozbaliť bočnú lištu",
"goBack": "ísť naspäť",
"goForward": "ísť dopredu",
"manageServers": "spravovať servery",
"privateModeOff": "vypnúť súkromný režim",
"privateModeOn": "zapnúť súkromný režim",
"openBrowserDevtools": "otvoriť vývojárske nástroje prehliadača",
"quit": "$t(common.quit)",
"selectServer": "vybrať server",
"settings": "$t(common.setting_other)",
"version": "verzia {{version}}"
},
"manageServers": {
"title": "spravovať servery",
"serverDetails": "podrobnosti servera",
"url": "URL",
"username": "užívateľské meno",
"editServerDetailsTooltip": "zmeniť podrobnosti servera",
"removeServer": "odstrániť server"
},
"contextMenu": {
"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)",
"download": "stiahnuť",
"moveToNext": "$t(action.moveToNext)",
"moveToBottom": "$t(action.moveToBottom)",
"moveToTop": "$t(action.moveToTop)",
"numberSelected": "{{count}} vybrané",
"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)",
"shareItem": "zdieľať položku",
"showDetails": "získať informácie",
"goToAlbum": "choď na $t(entity.album_one)",
"goToAlbumArtist": "choď na $t(entity.albumArtist_one)"
},
"fullscreenPlayer": {
"config": {
"dynamicBackground": "dynamické pozadie",
"dynamicImageBlur": "veľkosť rozostrenia obrázku",
"dynamicIsImage": "povoliť obrázok pozadia",
"followCurrentLyric": "nasleduj aktuálny text skladby",
"lyricAlignment": "zarovnanie textov skladieb",
"lyricOffset": "posunutie textov skladieb (ms)",
"lyricGap": "medzera textov skladieb",
"lyricSize": "veľkosť textov skladieb",
"opacity": "opacita",
"showLyricMatch": "zobraziť zhodu textu skladby",
"showLyricProvider": "zobraziť poskytovateľa textov skladieb",
"synchronized": "synchronizované",
"unsynchronized": "nesynchronizované",
"useImageAspectRatio": "použiť pomer strán obrázka"
},
"lyrics": "texty skladieb",
"related": "súvisiace",
"upNext": "ďalšia nahor",
"visualizer": "vizualizátor",
"noLyrics": "nenašli sa žiadne texty"
},
"genreList": {
"showAlbums": "zobraziť $t(entity.genre_one) $t(entity.album_other)",
"showTracks": "zobraziť $t(entity.genre_one) $t(entity.track_other)",
"title": "$t(entity.genre_other)"
},
"globalSearch": {
"commands": {
"goToPage": "ísť na stránku",
"searchFor": "hľadať {{query}}",
"serverCommands": "príkazy servera"
},
"title": "príkazy"
},
"home": {
"explore": "preskúmať tvoju knižnicu",
"mostPlayed": "najhranejší",
"newlyAdded": "novopridané vydania",
"recentlyPlayed": "nedávno hrané",
"title": "$t(common.home)"
},
"itemDetail": {
"copyPath": "skopírovať cestu do schránky",
"copiedPath": "cesta úspešne skopírovaná",
"openFile": "zobraziť stopu v správcovi súborov"
},
"playlist": {
"reorder": "zmena poradia povolená len pri zoradení podľa id"
},
"playlistList": {
"title": "$t(entity.playlist_other)"
},
"setting": {
"advanced": "pokročilé",
"generalTab": "všeobecné",
"hotkeysTab": "klávesové skratky",
"playbackTab": "prehrávanie",
"windowTab": "okno"
},
"sidebar": {
"albumArtists": "$t(entity.albumArtist_other)",
"albums": "$t(entity.album_other)",
"artists": "$t(entity.artist_other)",
"folders": "$t(entity.folder_other)",
"genres": "$t(entity.genre_other)",
"home": "$t(common.home)",
"myLibrary": "moja knižnica",
"nowPlaying": "teraz hrá",
"playlists": "$t(entity.playlist_other)",
"search": "$t(common.search)",
"settings": "$t(common.setting_other)",
"shared": "zdieľaný $t(entity.playlist_other)",
"tracks": "$t(entity.track_other)"
},
"trackList": {
"artistTracks": "skladby {{artist}}",
"genreTracks": "\"{{genre}}\" $t(entity.track_other)",
"title": "$t(entity.track_other)"
}
},
"player": {
"addLast": "pridať posledné",
"addNext": "pridať nasledujúce",
"favorite": "obľúbené",
"mute": "stíšiť",
"muted": "stíšené",
"next": "nasledujúci",
"play": "prehrať",
"playbackFetchCancel": "toto chvíľu trvá... ak to chcete zrušiť, zavrite notifikáciu",
"playbackFetchInProgress": "načítanie skladieb…",
"playbackFetchNoResults": "neboli nájdené žiadne skladby",
"playbackSpeed": "rýchlosť prehrávania",
"playRandom": "prehrávať náhodne",
"playSimilarSongs": "prehrávať podobné skladby",
"previous": "predchádzajúce",
"queue_clear": "vymazať frontu",
"queue_moveToBottom": "presunúť vybrané navrch",
"queue_moveToTop": "presunúť vybrané naspodok",
"queue_remove": "odstrániť vybrané",
"repeat": "opakovať",
"repeat_all": "opakovať všetky",
"repeat_off": "opakovanie vypnuté",
"shuffle": "prehrávať náhodne",
"shuffle_off": "náhodné prehrávanie vypnuté",
"skip": "preskočiť",
"skip_back": "preskočiť dozadu",
"skip_forward": "preskočiť dopredu",
"stop": "zastaviť",
"toggleFullscreenPlayer": "prepnúť prehrávač na celú obrazovku",
"unfavorite": "odstrániť z obľúbených",
"pause": "pozastaviť",
"viewQueue": "zobraziť frontu"
},
"setting": {
"accentColor": "odtieň farby",
"accentColor_description": "nastaviť odtieň farby aplikácie",
"albumBackground": "obrázok pozadia albumu",
"albumBackground_description": "pridáva obrázky albumov na pozadia na jednotlivých stránok albumov",
"albumBackgroundBlur": "veľkosť rozmazania obrázku pozadia albumu",
"albumBackgroundBlur_description": "upravuje mieru rozmazania obrázku pozadia albumu",
"applicationHotkeys": "klávesové skratky aplikácie",
"applicationHotkeys_description": "nastaviť klávesové skratky aplukácie. zaškrtni políčko, ak chceš nastaviť skratku ako globálnu (len desktop)",
"artistConfiguration": "nastavenie stránky interpreta albumu",
"artistConfiguration_description": "konfigurovať aké položky sa zobrazujú, a v akom poradí, na stránke interpreta albumu",
"audioDevice": "zvukové zariadenie",
"audioDevice_description": "vybrať zvukové zariadenie na prehrávanie (len webový prehrávač)",
"audioExclusiveMode": "exkluzívny zvukový režim",
"audioExclusiveMode_description": "povoliť exkluzívny režim výstupu. V tomto režime je systém zvyčajne zamknutý a len mpv je schopný poskytovať zvukový výstup",
"audioPlayer": "audioprehrávač",
"audioPlayer_description": "vybrať zvukové zariadenie, ktoré bude použité na prehrávanie",
"buttonSize": "veľkosť tlačidiel na paneli prehrávania",
"buttonSize_description": "veľkosť tlačidiel na paneli prehrávania",
"clearCache": "vyčistiť dočasnú pamäť prehliadača",
"imageAspectRatio_description": "ak je povolené, obrázok albumu sa zobrazí s originálnym pomerom strán. pre obrázky s pomerom iným ako 1:1 zostane nevyplnený priestor prázdny",
"clearCache_description": "'hard' vyčistenie feishin-u. okrem vyrovnávacej pamäte feishin-u sa vymaže aj vyrovnávacia pamäť prehliadača (uložené obrázky a iné súbory). prihlasovacie údaje k serveru a iné nastavenia zostávajú zachované",
"clearQueryCache": "vymazať vyrovnávaciu pamäť feishin-u",
"clearQueryCache_description": "'soft' vyčistenie feishin-u. obnovia sa playlisty, metadáta skladieb a resetujú sa uložené texty skladieb. nastavenia, prihlasovacie údaje k serveru a obrázky vo vyrovnávacej pamäti zostávajú zachované",
"clearCacheSuccess": "vyrovnávacia pamäť úspešne vymazaná",
"contextMenu": "konfigurácia kontextovej ponuky (pravé tlačítko myši)",
"contextMenu_description": "umožňuje vám skryť položky nachádzajúce v menu, ktoré sa zobrazí po kliknutí pravým tlačítkom myši. nezakliknuté položky budú skryté",
"crossfadeDuration": "dĺžka crossfade",
"crossfadeDuration_description": "nastavuje dĺžku trvania crossfade efektu",
"crossfadeStyle": "štýl crossfade",
"crossfadeStyle_description": "vybrať štýl crossfade efektu pre prehrávač",
"customCssEnable": "povoliť vlastné css",
"customCssEnable_description": "umožňuje písať vlastné css.",
"customCssNotice": "Varovanie: hoci sa využíva istá miera sanitizaácie (deaktivácia url() a obsahu:), používanie vlastných CSS pri zmene rozhrania stále predstavuje riziko.",
"customCss": "vlastné css",
"customCss_description": "vlastný css obsah. Poznámka: obsah a vzdialené url linky sú defaultne deaktivované.Náhľad vášho obsahu je zobrazený nižšie. Pridané polia, ktoré ste nenastavovali boli pridané pri sanitizácii.",
"customFontPath": "cesta k vlastným fontom",
"customFontPath_description": "Nastaví cestu k vlastným fontom na použitie aplikáciou",
"disableAutomaticUpdates": "vypnúť automatické aktualizácie",
"disableLibraryUpdateOnStartup": "vypnúť kontrolu nových verzií pri štarte",
"discordApplicationId": "id aplikácie {{discord}}",
"discordApplicationId_description": "aplikačné id pre plnohodnotné prepojenie s {{discord}} (predvolená hodnota {{defaultId}})",
"discordPausedStatus": "pri pozastavení prehrávania zobrazuje 'rich presence'",
"discordPausedStatus_description": "pri povolení bude status zobrazovaný aj pri pozastavenom prehrávaní",
"discordIdleStatus": "zobraziť 'rich presence idle status'",
"discordIdleStatus_description": "pri povolení bude 'rich presense' status zobrazený aj pri nečinnosti",
"discordListening": "zobraziť status počúvanie",
"discordListening_description": "zobraziť status počúvanie namiesto prehrávanie",
"discordRichPresence": "{{discord}} rich resence",
"discordRichPresence_description": "povoliť status prehrávania v {{discord}} rich presence. Obrázky kláves sú: {{icon}}, {{playing}} a {{paused}}",
"discordServeImage": "poskytuje {{discord}} obrázky zo servera",
"discordServeImage_description": "zdieľať obrázok albumu na {{discord}} rich presence priamo zo servera, dostupné iba pre jellyfin a navidrome",
"discordUpdateInterval": "interval aktualizácií {{discord}} rich presence",
"discordUpdateInterval_description": "čas v sekundách medzi dvomi nasledujúcimi aktualizáciami (minimálne 15 sekúnd)",
"discordDisplayType": "typ zobrazenia {{discord}} presence",
"discordDisplayType_description": "mení vo vašom statuse info, čo počúvate",
"discordDisplayType_songname": "názov skladby",
"discordDisplayType_artistname": "názov interpreta(-ov)",
"doubleClickBehavior": "po dvojkliku zaradí do fronty všetky vyhľadané skladby",
"doubleClickBehavior_description": "ak je povolené, všetky nájdené skladby budú zaradené do fronty. inak budú skladby zaradené iba po kliknutí",
"enableRemote": "povoliť vzdialené ovládanie servera",
"enableRemote_description": "pomocou vzdialeného servera umožňuje ovládanie aplikácie prostredníctvom iných zariadení",
"externalLinks": "zobraziť externé odkazy",
"externalLinks_description": "umožňuje zobrazovať externé odkazy (Last.fm, MusicBrainz) na stránkach umelca/albumu",
"exitToTray": "ukončiť do lišty",
"exitToTray_description": "po zavretí sa aplikácia minimalizuje do lišty a beží ďalej",
"floatingQueueArea": "zobraziť ikonu výsuvnej fronty prehrávania",
"floatingQueueArea_description": "zobraziť ikonu výsuvnej fronty prehrávania na pravej strane obrazovky",
"followLyric": "nasleduj aktuálny text skladby",
"followLyric_description": "posunúť sa v texte skladby na aktuálne prehrávanú pozíciu",
"preferLocalLyrics": "uprednostniť lokálne texty skladieb",
"preferLocalLyrics_description": "uprednostniť miestne skladby textov, ak sú dostupné, pred vzdialenými",
"font": "font",
"font_description": "nastaví font písma pre aplikáciu",
"fontType": "typ písma",
"fontType_description": "vstavané písmo vyberie jeden z fontov poskytovaných Feishin-om. systémové písmo umožňuje vybrať ľubovoľný font poskytovaný vaším operačným systémom. vlastné umožňuje poskytnúť váš vlastný font",
"fontType_optionBuiltIn": "vstavané písmo",
"fontType_optionCustom": "vlastné písmo",
"fontType_optionSystem": "systémové písmo",
"gaplessAudio": "prehrávanie bez prerušení",
"gaplessAudio_description": "nastaví prehrávanie bez prerušení pre mpv",
"gaplessAudio_optionWeak": "slabo (odporúčané)",
"genreBehavior": "predvolené správanie stránky žánru",
"genreBehavior_description": "určuje, či kliknutie na žáner otvorí zoznam skladieb alebo zoznam albumov",
"globalMediaHotkeys": "globálne klávesové skratky médií",
"globalMediaHotkeys_description": "povoliť alebo zakázať použitie vašich klávesových skratiek médií na ovládanie prehrávania",
"homeConfiguration": "konfigurácia domovskej stránky",
"homeConfiguration_description": "konfigurovať, aké položky sú zobrazené a v akom poradí na domovskej stránke",
"homeFeature": "carousel odporúčania na domovskej stránke",
"homeFeature_description": "povoľuje zobrazenie veľkoformátového odporúčaného carouselu na domovskej stránke",
"hotkey_browserBack": "naspäť v prehliadači",
"hotkey_browserForward": "dopredu v prehliadači",
"hotkey_favoriteCurrentSong": "obľúbené $t(common.currentSong)",
"hotkey_favoritePreviousSong": "obľúbené $t(common.previousSong)",
"hotkey_globalSearch": "globálne vyhľadávanie",
"hotkey_localSearch": "vyhľadávanie na stránke",
"hotkey_navigateHome": "navigovať domov",
"hotkey_playbackNext": "nasledujúca skladba",
"hotkey_playbackPause": "pozastaviť",
"hotkey_playbackPlay": "prehrať",
"hotkey_playbackPlayPause": "hrať / pozastaviť",
"hotkey_playbackPrevious": "predchádzajúca skladba",
"hotkey_playbackStop": "zastaviť",
"hotkey_rate0": "bez hodnotenia",
"hotkey_rate1": "hodnotené 1 hviezdou",
"hotkey_rate2": "hodnotené 2 hviezdami",
"hotkey_rate3": "hodnotené 3 hviezdami",
"hotkey_rate4": "hodotené 4 hviezdami",
"hotkey_rate5": "hodnotené 5 hviezdami",
"hotkey_skipBackward": "preskočiť dozadu",
"hotkey_skipForward": "preskočiť dopredu",
"hotkey_toggleCurrentSongFavorite": "prepnúť $t(common.currentSong) obľúbené",
"hotkey_toggleFullScreenPlayer": "prepnúť prehrávač na celú obrazovku",
"hotkey_togglePreviousSongFavorite": "prepnúť $t(common.previousSong) obľúbené",
"hotkey_toggleQueue": "prepnúť frontu",
"hotkey_toggleRepeat": "prepnúť opakovanie",
"hotkey_toggleShuffle": "prepnúť náhodné prehrávanie",
"hotkey_unfavoriteCurrentSong": "odobrať z obľúbených $t(common.currentSong)",
"hotkey_unfavoritePreviousSong": "odobrať z obľúbených $t(common.previousSong)",
"hotkey_volumeDown": "znížiť hlasitosť",
"hotkey_volumeMute": "stíšiť hlasitosť",
"hotkey_volumeUp": "zvýšiť hlasitosť",
"hotkey_zoomIn": "priblížiť",
"hotkey_zoomOut": "vzdialiť",
"imageAspectRatio": "použiť pôvodný pomer strán obalu albumu",
"language": "jazyk",
"language_description": "nastaví jazyk aplikácie ($t(common.restartRequired))",
"lastfm": "zobraziť last.fm odkazy",
"lastfm_description": "zobraziť last.fm odkazy na stránky interpreta/albumu",
"lastfmApiKey": "{{lastfm}} API kľúč",
"lastfmApiKey_description": "API kľúč pre {{lastfm}}. vyžaduje sa obálky albumov",
"lyricFetch": "stiahnuť texty skladieb z internetu",
"lyricFetch_description": "stiahnuť texty skladieb z rôznych internetových zdrojov",
"lyricFetchProvider": "poskytovatelia pre sťahovanie textov skladieb",
"lyricFetchProvider_description": "vybrať poskytovateľov pre sťahovanie textov skladieb. poradie poskytovateľov určuje poradie, v ktorom sa budú používať",
"lyricOffset": "posunutie textu skladieb (ms)",
"lyricOffset_description": "posunutie textu voči skladbe vyjadrené v milisekundách",
"notify": "povoliť notifikácie o skladbách",
"notify_description": "zobraziť notifikácie pri zmene aktuálnej skladby",
"minimizeToTray": "minimalizovať do lišty",
"minimizeToTray_description": "minimalizovať aplikáciu do systémovej lišty",
"minimumScrobblePercentage": "minimálna dĺžka pre skroblovanie (percentá)",
"minimumScrobblePercentage_description": "minimálna časť skladby v percentách, ktorá musí byť prehraná pred tým, než je skroblovaná",
"minimumScrobbleSeconds": "minimálna dĺžka skroblovania (sekundy)",
"minimumScrobbleSeconds_description": "minimálna dĺžka časti skladby, ktorá musí byť prehraná pred tým, než je skladba skroblovaná",
"mpvExecutablePath": "cesta k spustiteľnému súboru mpv",
"mpvExecutablePath_description": "nastavuje cestu k spustiteľnému súboru mpv. ak je prázdna, použije sa predvolená cesta",
"mpvExtraParameters": "parametre mpv",
"mpvExtraParameters_help": "jeden na riadok",
"musicbrainz": "zobraziť linky na musicbrainz",
"musicbrainz_description": "zobrazí linky na stránky interpreta/albumu na musicbrainz, ak je vyplnené mbid",
"neteaseTranslation": "Povoliť NetEasy preklady",
"neteaseTranslation_description": "Ak sú povolené, aplikácia stiahne a zobrazí preložené texty skladieb z NetEasy, ak sú dostupné.",
"passwordStore": "ukladanie hesiel/utajených údajov",
"passwordStore_description": "aký spôsob ukladania hesiel/utajených údajov použiť. ak máte problém s ukladaním hesiel, skúste zmeniť nastavenie.",
"playbackStyle": "štýl prehrávania",
"playbackStyle_description": "vyberte štýl prehrávania pre prehrávač skladieb",
"playbackStyle_optionCrossFade": "crossfade",
"playbackStyle_optionNormal": "normálny",
"playButtonBehavior": "správanie sa tlačidla prehrávania",
"playButtonBehavior_description": "nastaví predvolené správanie sa tlačidla prehrávania pri pridávaní skladieb do fronty",
"playButtonBehavior_optionAddLast": "$t(player.addLast)",
"playButtonBehavior_optionAddNext": "$t(player.addNext)",
"playButtonBehavior_optionPlay": "$t(player.play)",
"playButtonBehavior_optionPlayShuffled": "$t(player.shuffle)",
"playerAlbumArtResolution": "rozlíšenie obrázka albumu",
"playerAlbumArtResolution_description": "rozlíšenie zobrazenia náhľadu veľkých obrázkov albumov. pri väčšom rozlíšení budú krajšie, ale môže sa spomaliť ich načítavanie. predvolené je 0, čo znamená automatické",
"playerbarOpenDrawer": "zobrazenie na celú obrazovku panelom prehrávača",
"playerbarOpenDrawer_description": "umožní kliknutím na panel prehrávača prepnúť zobrazenie prehrávača na celú obrazovku",
"remotePassword": "heslo servera vzdialeného ovládania",
"remotePassword_description": "nastaví heslo pre server diaľkového ovládania. Jeho obsah je odosielaný bez zabezpečenia, preto by ste si mali zvoliť jedinečné heslo, ktoré pre vás nie je dôležité",
"remotePort": "port servera diaľkového ovládania",
"remotePort_description": "nastaví port servera diaľkového ovládania",
"remoteUsername": "používateľské meno servera diaľkového ovládania",
"remoteUsername_description": "nasstaví používateľské meno servera diaľkového ovládania. v prípade, ak sú používateľské meno aj heslo prázdne, je overovanie pri prihlásení vypnuté",
"replayGainClipping": "clipping {{ReplayGain}}",
"replayGainClipping_description": "Zabraňuje clipping-u spôsobenému {{ReplayGain}} automatickým znížením zosilenia",
"replayGainFallback": "fallback {{ReplayGain}}",
"replayGainFallback_description": "zosilenie v db, ktoré sa aplikuje, ak súbor nemá {{ReplayGain}} štítky",
"replayGainMode": "{{ReplayGain}} režim",
"replayGainMode_description": "pozmení zosilenie hlasitosti podľa hodnôt {{ReplayGain}} uložených v metadátach súboru",
"replayGainMode_optionAlbum": "$t(entity.album_one)",
"replayGainMode_optionNone": "$t(common.none)",
"replayGainMode_optionTrack": "$t(entity.track_one)",
"replayGainPreamp": "predzosilenie {{ReplayGain}} dB",
"replayGainPreamp_description": "pozmení predzosilenie použité na hodnoty {{ReplayGain}}",
"sampleRate": "vzorkovacia frekvencia",
"sidePlayQueueStyle_optionAttached": "pripojené",
"sidePlayQueueStyle_optionDetached": "odpojené",
"skipDuration": "dĺžka preskočenia",
"skipDuration_description": "určuje časovú dĺžku posunu pri stlačení tlačidla preskočiť na lište prehrávača",
"skipPlaylistPage": "preskočiť stránku playlistu",
"skipPlaylistPage_description": "pri navigácii v playliste, idete na výber stránky playlistu namiesto predvolenej stránky",
"startMinimized": "spistiť mnimalizované",
"startMinimized_description": "spustí aplikáciu minimalizovanú do systémovej lišty",
"preventSleepOnPlayback": "zabrániť spánku pri prehrávaní",
"preventSleepOnPlayback_description": "pri prehávaní hudby zabráni obrazovke v prechode do spánku",
"theme": "téma",
"theme_description": "nastaví tému aplikácie",
"themeDark": "téma (tmavá)",
"themeDark_description": "nastaví tmavú tému aplikácie",
"themeLight": "téma (svetlá)",
"themeLight_description": "nastaví svetlú tému aplikácie",
"transcodeNote": "zmena sa prejaví po 1 (web) - 2 (mpv) skladbách",
"transcode": "povoliť prekódovanie",
"transcode_description": "umožňuje prekódovanie do rôznych formátov",
"transcodeBitrate": "bitová frekvencia prekódovania",
"transcodeBitrate_description": "určuje bitovú frekvenciu, pri ktorej sa použije prekódovanie. 0 znamená ponechať rozhodnutie na server",
"transcodeFormat": "formát prekódovania",
"transcodeFormat_description": "učuje výstupný formát prekódovania. ak chcete ponechať rozhodnutie na server, nechajte políčko prázdne",
"translationApiProvider": "api poskytovateľa prekladu",
"translationApiProvider_description": "api poskytovateľa prekladu",
"translationApiKey": "api kľúč prekladu",
"translationApiKey_description": "api kľúč pre preklad (Podporuje iba koncové body globálnych služieb)",
"translationTargetLanguage": "cieľový jazyk prekladu",
"translationTargetLanguage_description": "cieľový jazyk, do ktorého sa prekladá",
"trayEnabled": "zobraziť lištu",
"trayEnabled_description": "zobraziť/skryť ikonu/ponuku lišty. ak nie je povolené, taktiež vypne minimalizovanie/zavretie do lišty",
"useSystemTheme": "použiť systémovú tému",
"useSystemTheme_description": "prispôsobiť výber svetlej, či tmavej témy aktuálnej systémovej téme",
"volumeWheelStep": "krok zmeny hlasitosti",
"volumeWheelStep_description": "veľkosť zmeny hlasitosti pri otočení kolieskom myši o jeden krok na ovládači hlasitosti",
"volumeWidth": "šírka posuvného ovládača hlasitosti",
"volumeWidth_description": "šírka ovládača hlasitosti",
"webAudio": "používať webový výstup",
"webAudio_description": "bude sa používať webový výstup, čím povolíte pokročilé funkcie ako replaygain. v prípade problémov voľbu vypnite",
"preservePitch": "zachovať výšku",
"preservePitch_description": "pri zmene rýchlosti prehrávania zostane výška zachovaná",
"windowBarStyle": "štýl okna",
"windowBarStyle_description": "vyberte štýl okna",
"zoom": "percento priblíženia",
"zoom_description": "nastaví percento priblíženia pre aplikáciu",
"sampleRate_description": "vyberte výstupnú vzorkovaciu frekvenciu, ktorá sa použije v prípade, ak je vybraná vzorkovacia frekvencia iná ako je u aktuálnej skladby. pri hodnote menšej ako 8000 sa použije predvolená frekvencia",
"savePlayQueue": "uložiť frontu prehrávania",
"savePlayQueue_description": "uloží frontu prehrávania pri ukončení aplikácie a obnoví ju opäť po jej otvorení",
"scrobble": "skroblovať",
"scrobble_description": "scroblovať vaše prehrávanie na medálny server",
"showSkipButton": "zobraziť tlačítka preskočenia",
"showSkipButton_description": "zobrazí alebo skryje tlačítka preskočenia na lište prehrávača",
"showSkipButtons": "zobraziť tlačítka preskočenia",
"showSkipButtons_description": "zobraziť alebo skryť tlačítka preskočenia na lište prehrávača",
"sidebarCollapsedNavigation": "navigácia bočnej lišty (zasunutá)",
"sidebarCollapsedNavigation_description": "zobraziť alebo skryť navigovanie na zasunutej bočnej lište",
"sidebarConfiguration": "nastavenie bočnej lišty",
"sidebarConfiguration_description": "zvoľte položky a ich poradie, v akom sa zabrazia na bočnej lište",
"sidebarPlaylistList": "playlist bočnej lišty",
"sidebarPlaylistList_description": "zobraziť alebo skryť playlist na bočnej lište",
"sidePlayQueueStyle": "štýl bočnej fronty prehrávania",
"sidePlayQueueStyle_description": "nastaví štýl bočnej fronty prehrávania"
},
"table": {
"column": {
"album": "album",
"albumArtist": "interpret albumu",
"albumCount": "$t(entity.album_other)",
"artist": "$t(entity.artist_one)",
"biography": "životopis",
"bitrate": "bitrate",
"bpm": "bpm",
"channels": "$t(common.channel_other)",
"codec": "$t(common.codec)",
"comment": "komentár",
"dateAdded": "dátum pridania",
"discNumber": "disk",
"favorite": "obľúbené",
"genre": "$t(entity.genre_one)",
"lastPlayed": "posledne hraný",
"path": "cesta",
"playCount": "prehratí",
"rating": "hodnotenie",
"releaseDate": "dátum vydania",
"releaseYear": "rok",
"size": "$t(common.size)",
"songCount": "$t(entity.track_other)",
"title": "názov",
"trackNumber": "skladba"
},
"config": {
"general": {
"autoFitColumns": "automatická šírka stĺpcov",
"followCurrentSong": "nasledovať aktuálnu skladbu",
"displayType": "typ zobrazenia",
"gap": "$t(common.gap)",
"itemGap": "medzera položky (px)",
"itemSize": "veľkosť položky (px)",
"size": "$t(common.size)",
"tableColumns": "stĺpce tabuľky"
},
"label": {
"actions": "$t(common.action_other)",
"album": "$t(entity.album_one)",
"albumArtist": "$t(entity.albumArtist_one)",
"artist": "$t(entity.artist_one)",
"biography": "$t(common.biography)",
"bitrate": "$t(common.bitrate)",
"bpm": "$t(common.bpm)",
"channels": "$t(common.channel_other)",
"codec": "$t(common.codec)",
"dateAdded": "dátum pridania",
"discNumber": "číslo disku",
"duration": "$t(common.duration)",
"favorite": "$t(common.favorite)",
"genre": "$t(entity.genre_one)",
"lastPlayed": "posledne prehraté",
"note": "$t(common.note)",
"owner": "$t(common.owner)",
"path": "$t(common.path)",
"playCount": "počet prehraní",
"rating": "$t(common.rating)",
"releaseDate": "dátum vydania",
"rowIndex": "číslo riadku",
"size": "$t(common.size)",
"songCount": "$t(entity.track_other)",
"title": "$t(common.title)",
"titleCombined": "$t(common.title) (kombinovaný)",
"trackNumber": "číslo skladby",
"year": "$t(common.year)"
},
"view": {
"card": "karta",
"grid": "mriežka",
"list": "zoznam",
"poster": "plagát",
"table": "tabuľka"
}
}
}
}
+647
View File
@@ -0,0 +1,647 @@
{
"action": {
"addToFavorites": "dodaj na $t(entity.favorite_other)",
"addToPlaylist": "dodaj na $t(entity.playlist_one)",
"clearQueue": "počisti čakalno vrsto",
"createPlaylist": "ustvari $t(entity.playlist_one)",
"deletePlaylist": "izbriši $t(entity.playlist_one)",
"deselectAll": "odizberi vse",
"editPlaylist": "uredi $t(entity.playlist_one)",
"goToPage": "pojdi na stran",
"moveToNext": "pojdi na naslednjo",
"moveToBottom": "pojdi na dno",
"moveToTop": "pojdi na vrh",
"refresh": "$t(common.refresh)",
"removeFromFavorites": "odstrani iz $t(entity.favorite_other)",
"removeFromPlaylist": "odstrani iz seznama predvajanja",
"removeFromQueue": "odstrani iz čakalne vrste",
"setRating": "nastavi oceno",
"toggleSmartPlaylistEditor": "preklopi urejevalnik $t(entity.smartPlaylist)",
"viewPlaylists": "poglej $t(entity.playlist_other)",
"openIn": {
"lastfm": "Odpri v Last.fm",
"musicbrainz": "Odpri v MusicBrainz"
}
},
"common": {
"action_one": "dejanje",
"action_two": "dejanji",
"action_few": "dejanja",
"action_other": "dejanj",
"add": "dodaj",
"additionalParticipants": "dodatni udeleženci",
"newVersion": "nova verzija je bila nameščena ({{version}})",
"viewReleaseNotes": "poglej zapiske o različici",
"albumGain": "ojačitev albuma",
"albumPeak": "vrh albuma",
"areYouSure": "ali si prepričan?",
"ascending": "naraščajoče",
"backward": "nazaj",
"biography": "biografija",
"bitrate": "bitna hitrost",
"bpm": "unm",
"cancel": "prekliči",
"center": "center",
"channel_one": "kanal",
"channel_two": "kanala",
"channel_few": "kanali",
"channel_other": "kanalov",
"clear": "počisti",
"close": "zapri",
"codec": "kodek",
"collapse": "strni",
"comingSoon": "prihaja kmalu …",
"configure": "prilagodi",
"confirm": "potrdi",
"create": "ustvari",
"currentSong": "trenutna $t(entity.track_one)",
"decrease": "zmanjšaj",
"delete": "izbriši",
"descending": "padajoče",
"description": "opis",
"disable": "onemogoči",
"disc": "disk",
"dismiss": "spreglej",
"duration": "trajanje",
"edit": "uredi",
"enable": "omogoči",
"expand": "razširi",
"favorite": "najljubša",
"filter_one": "filter",
"filter_two": "filtra",
"filter_few": "filtri",
"filter_other": "filtrov",
"filters": "filtri",
"forceRestartRequired": "znova zaženi, da potrdiš spremembe ... zapri obvestilo, da znova zaženeš",
"forward": "naprej",
"gap": "reža",
"home": "domov",
"increase": "povišaj",
"limit": "omeji",
"manage": "upravljaj",
"maximize": "maksimiziraj",
"menu": "meni",
"minimize": "pomanjšaj",
"modified": "spremenjeno",
"mbid": "MusicBrainz identifikator (ID)",
"left": "levo",
"no": "ne",
"none": "noben",
"noResultsFromQuery": "poizvedba ni vrnila rezultatov",
"note": "opomba",
"ok": "ok",
"owner": "lastnik",
"path": "pot",
"playerMustBePaused": "predvajalnik mora biti ustavljen",
"preview": "predogled",
"previousSong": "prejšnja $t(entity.track_one)",
"quit": "izhod",
"random": "naključno",
"rating": "ocena",
"refresh": "osveži",
"reload": "ponovno naloži",
"reset": "ponastavi",
"resetToDefault": "ponastavi na privzeto",
"restartRequired": "zahtevan je ponovni zagon",
"right": "desno",
"save": "shrani",
"saveAndReplace": "shrani in zamenjaj",
"saveAs": "shrani kot",
"search": "išči",
"setting": "nastavitev",
"share": "deli",
"size": "velikost",
"sortOrder": "vrstni red",
"tags": "oznake",
"title": "naslov",
"trackNumber": "skladba",
"trackGain": "glasnost skladbe",
"trackPeak": "vrhunec skladbe",
"translation": "prevod",
"unknown": "neznan",
"version": "verzija",
"year": "leto",
"yes": "da",
"name": "ime"
},
"entity": {
"album_one": "album",
"album_two": "albuma",
"album_few": "albumi",
"album_other": "albumov",
"albumArtist_one": "izvajalec albuma",
"albumArtist_two": "izvajalec albumov",
"albumArtist_few": "izvajalec albumov",
"albumArtist_other": "izvajalec albumov",
"albumArtistCount_one": "{{count}} izvajalec albuma",
"albumArtistCount_two": "{{count}} izvajalca albuma",
"albumArtistCount_few": "{{count}} izvajalci albuma",
"albumArtistCount_other": "{{count}} izvajalcev albuma",
"albumWithCount_one": "{{count}} album",
"albumWithCount_two": "{{count}} albuma",
"albumWithCount_few": "{{count}} albumi",
"albumWithCount_other": "{{count}} albumov",
"artist_one": "izvajalec",
"artist_two": "izvajalca",
"artist_few": "izvajalci",
"artist_other": "izvajalcev",
"artistWithCount_one": "{{count}} izvajalec",
"artistWithCount_two": "{{count}} izvajalca",
"artistWithCount_few": "{{count}} izvajalci",
"artistWithCount_other": "{{count}} izvajalcev",
"favorite_one": "priljubljen",
"favorite_two": "priljubljena",
"favorite_few": "priljubljeni",
"favorite_other": "priljubljenih",
"folder_one": "mapa",
"folder_two": "mapi",
"folder_few": "mape",
"folder_other": "map",
"folderWithCount_one": "{{count}} mapa",
"folderWithCount_two": "{{count}} mapi",
"folderWithCount_few": "{{count}} mape",
"folderWithCount_other": "{{count}} map",
"genre_one": "zvrst",
"genre_two": "zvrsti",
"genre_few": "zvrsti",
"genre_other": "zvrsti",
"genreWithCount_one": "{{count}} zvrst",
"genreWithCount_two": "{{count}} zvrsti",
"genreWithCount_few": "{{count}} zvrsti",
"genreWithCount_other": "{{count}} zvrsti",
"playlist_one": "seznam predvajanja",
"playlist_two": "seznama predvajanja",
"playlist_few": "seznami predvajanja",
"playlist_other": "seznamov predvajanja",
"play_one": "{{count}} predvajanje",
"play_two": "{{count}} predvajanji",
"play_few": "{{count}} predvajanja",
"play_other": "{{count}} predvajanj",
"playlistWithCount_one": "{{count}} seznam predvajanja",
"playlistWithCount_two": "{{count}} seznama predvajanja",
"playlistWithCount_few": "{{count}} seznami predvajanja",
"playlistWithCount_other": "{{count}} seznamov predvajanja",
"smartPlaylist": "pametni $t(entity.playlist_one)",
"track_one": "skladba",
"track_two": "skladbi",
"track_few": "skladbe",
"track_other": "skladb",
"song_one": "pesem",
"song_two": "pesmi",
"song_few": "pesmi",
"song_other": "pesmi",
"trackWithCount_one": "{{count}} skladba",
"trackWithCount_two": "{{count}} skladbi",
"trackWithCount_few": "{{count}} skladbe",
"trackWithCount_other": "{{count}} skladb"
},
"error": {
"apiRouteError": "preusmeritev zahteve ni bila mogoča",
"audioDeviceFetchError": "napaka pri poskusu pridobivanja avdio naprav",
"authenticationFailed": "napaka pri avtentikaciji",
"badAlbum": "ta stran je prikazana ker skladba ne pripada nobenemu albumu. skladba se verjetno nahaja na vrhu datotečne strukture direktorija z glasbo. jellyfin razporedi skladbe v skupine samo v primeru, ko se nahajajo v direktoriju.",
"badValue": "neveljavna možnost \"{{value}}\". ta vrednost ne obstaja več",
"credentialsRequired": "zahtevana prijava",
"endpointNotImplementedError": "{{serverType}} ne implementira končne točke {{endpoint}}",
"genericError": "prišlo je do napake",
"invalidServer": "neveljaven strežnik",
"localFontAccessDenied": "dostop do lokalnih pisav je bil zavrnjen",
"loginRateError": "preveč poskusov prijave, prosimo, poskusite čez nekaj sekund",
"mpvRequired": "obvezen MPV",
"networkError": "prišlo je do mrežne napake",
"openError": "datoteke ni mogoče odpreti",
"playbackError": "prišlo je do napake pri poskusu predvajanja skladbe",
"remoteDisableError": "oddaljenega strežnika ni bilo mogoče $t(common.disable)ti",
"remoteEnableError": "oddaljenega strežnika ni bilo mogoče $t(common.enable)ti",
"remotePortError": "pri nastavljanju vrat oddaljenega strežnika je prišlo do napake",
"remotePortWarning": "ponovno zaženite strežnik da aplicirate spremembo strežniških vrat",
"serverNotSelectedError": "izbran ni bil noben strežnik",
"serverRequired": "strežnik zahtevan",
"sessionExpiredError": "vaša seja se je iztekla",
"systemFontError": "napaka pri pridobivanju sistemskih pisav"
},
"filter": {
"album": "$t(entity.album_one)",
"albumArtist": "$t(entity.albumArtist_one)",
"albumCount": "število $t(entity.album_other)",
"artist": "$t(entity.artist_one)",
"biography": "biografija",
"bitrate": "bitna hitrost",
"bpm": "bpm",
"channels": "$t(common.channel_other)",
"comment": "komentar",
"communityRating": "ocena skupnosti",
"criticRating": "ocena kritikov",
"dateAdded": "dodano",
"disc": "disk",
"duration": "trajanje",
"favorited": "priljubljeno",
"fromYear": "od leta",
"genre": "$t(entity.genre_one)",
"id": "identifikator",
"isCompilation": "je kompilacija",
"isFavorited": "je dodan med priljubljene",
"isPublic": "je javno",
"isRated": "je ocenjen",
"isRecentlyPlayed": "je bil nedavno predvajan",
"lastPlayed": "zadnje predvajano",
"mostPlayed": "najpogosteje predvajano",
"name": "ime",
"note": "opomba",
"owner": "$t(common.owner)",
"path": "pot",
"playCount": "število predvajanj",
"random": "naključno",
"rating": "ocena",
"recentlyAdded": "nedavno dodano",
"recentlyPlayed": "nedavno predvajano",
"recentlyUpdated": "nedavno posodobljeno",
"releaseDate": "datum izida",
"releaseYear": "leto izida",
"search": "išči",
"songCount": "število pesmi",
"title": "naslov",
"toYear": "do leta",
"trackNumber": "skladba"
},
"form": {
"addServer": {
"error_savePassword": "pri shranjevanju gesla je prišlo do napake",
"ignoreCors": "ignoriraj cors $t(common.restartRequired)",
"ignoreSsl": "ignoriraj ssl $t(common.restartRequired)",
"input_legacyAuthentication": "omogoči legacy avtentikacijo",
"input_name": "ime strežnika",
"input_password": "geslo",
"input_savePassword": "shrani geslo",
"input_url": "url",
"input_username": "uporabniško ime",
"success": "dodajanje strežnika uspešno",
"title": "dodaj strežnik"
},
"addToPlaylist": {
"input_playlists": "$t(entity.playlist_other)",
"input_skipDuplicates": "preskoči duplikate",
"success": "$t(entity.trackWithCount, {\"count\": {{message}} }) dodan v $t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })",
"title": "dodaj v $t(entity.playlist_one)"
},
"createPlaylist": {
"input_description": "$t(common.description)",
"input_name": "$t(common.name)",
"input_owner": "$t(common.owner)",
"input_public": "javno",
"success": "$t(entity.playlist_one) je bil uspešno ustvarjen",
"title": "ustvari $t(entity.playlist_one)"
},
"deletePlaylist": {
"input_confirm": "vpišite ime $t(entity.playlist_one) za potrditev",
"success": "$t(entity.playlist_one) uspešno izbrisan",
"title": "izbriši $t(entity.playlist_one)"
},
"editPlaylist": {
"publicJellyfinNote": "Jellyfin ne poda informacij o tem, ali gre za javni ali zasebni seznam predvajanja. Če želite, da seznam predvajanja ostane javen, izberite naslednji vnos",
"success": "$t(entity.playlist_one) uspešno posodobljen",
"title": "uredi $t(entity.playlist_one)"
},
"lyricSearch": {
"input_artist": "$t(entity.artist_one)",
"input_name": "$t(common.name)",
"title": "iskanje po besedilu"
},
"queryEditor": {
"title": "urejevalnik poizvedb",
"input_optionMatchAll": "ujemanje vseh",
"input_optionMatchAny": "ujemanje z najmanj enim"
},
"shareItem": {
"allowDownloading": "dovoli prenašanje",
"description": "opis",
"setExpiration": "nastavi datum poteka veljavnosti",
"success": "deli povezavo v odložišču (ali klikni tukaj za odpiranje)",
"expireInvalid": "datum poteka veljavnosti mora biti v prihodnosti",
"createFailed": "deljenje ni uspelo (je deljenje omogočeno?)"
},
"updateServer": {
"success": "strežnik uspešno posodobljen",
"title": "posodobi strežnik"
}
},
"page": {
"albumArtistDetail": {
"about": "O izvajalcu",
"appearsOn": "se pojavi na",
"recentReleases": "zadnje izdaje",
"viewDiscography": "poglej diskografijo",
"relatedArtists": "sorodni $t(entity.artist_other)",
"topSongs": "najboljše skladbe",
"topSongsFrom": "najboljše skladbe iz {{title}}",
"viewAll": "poglej vse",
"viewAllTracks": "poglej vse $t(entity.track_other)"
},
"albumArtistList": {
"title": "$t(entity.albumArtist_other)"
},
"albumDetail": {
"moreFromArtist": "več od $t(entity.artist_one)",
"moreFromGeneric": "več iz {{item}}",
"released": "izdano"
},
"albumList": {
"artistAlbums": "albumi izvajalca {{artist}}",
"genreAlbums": "\"{{genre}}\" $t(entity.album_other)",
"title": "$t(entity.album_other)"
},
"appMenu": {
"collapseSidebar": "skrij stransko vrstico",
"expandSidebar": "razširi stransko vrstico",
"goBack": "nazaj",
"goForward": "naprej",
"manageServers": "urejanje strežnikov",
"openBrowserDevtools": "odpri orodja za razvijalce brskalnika",
"quit": "$t(common.quit)",
"selectServer": "izberi strežnik",
"settings": "$t(common.setting_other)",
"version": "verzija {{version}}"
},
"manageServers": {
"title": "urejanje strežnikov",
"serverDetails": "podrobosti o strežniku",
"url": "URL",
"username": "uporabniško ime",
"editServerDetailsTooltip": "urejanje podrobnosti strežnika",
"removeServer": "odstrani strežnik"
},
"contextMenu": {
"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)",
"download": "prenesi",
"moveToNext": "$t(action.moveToNext)",
"moveToBottom": "$t(action.moveToBottom)",
"moveToTop": "$t(action.moveToTop)",
"numberSelected": "{{count}} izbranih",
"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)",
"shareItem": "deli",
"showDetails": "pridobi informacije"
},
"fullscreenPlayer": {
"config": {
"dynamicBackground": "dinamično ozadje",
"dynamicImageBlur": "velikost zameglitve slike",
"dynamicIsImage": "omogoči sliko v ozadju",
"followCurrentLyric": "sledi besedilu",
"lyricAlignment": "poravnava besedila",
"lyricOffset": "zamik besedila (ms)",
"lyricGap": "razmik besedila",
"lyricSize": "velikost besedila",
"opacity": "prosojnost",
"showLyricMatch": "prikaži ujemanje besedila",
"showLyricProvider": "pokaži ponudnika besedila",
"synchronized": "sinhronizirano",
"unsynchronized": "nesinhronizirano",
"useImageAspectRatio": "uporabi razmerje stranic slike"
},
"lyrics": "besedilo",
"related": "sorodno",
"upNext": "sledi",
"visualizer": "vizualizator",
"noLyrics": "ni bilo najdenih besedil"
},
"genreList": {
"showAlbums": "prikaži $t(entity.genre_one) $t(entity.album_other)",
"showTracks": "prikaži $t(entity.genre_one) $t(entity.track_other)",
"title": "$t(entity.genre_other)"
},
"globalSearch": {
"commands": {
"goToPage": "pojdi na stran",
"searchFor": "išči {{query}}",
"serverCommands": "strežniški ukazi"
},
"title": "ukazi"
},
"home": {
"explore": "razišči knjižnico",
"mostPlayed": "najpogosteje predvajano",
"newlyAdded": "zadnje dodane izdaje",
"recentlyPlayed": "nedavno predvajano",
"title": "$t(common.home)"
},
"itemDetail": {
"copyPath": "kopiraj v odložišče",
"copiedPath": "kopiranje poti uspešno",
"openFile": "prikaži skladbo v upravitelju datotek"
},
"playlist": {
"reorder": "preurejanje je omogočeno samo pri razvrščanju po identifikatorju"
},
"playlistList": {
"title": "$t(entity.playlist_other)"
},
"setting": {
"advanced": "napredno",
"generalTab": "splošno",
"hotkeysTab": "blžnjice",
"playbackTab": "predvajanje",
"windowTab": "okno"
},
"sidebar": {
"albumArtists": "$t(entity.albumArtist_other)",
"albums": "$t(entity.album_other)",
"artists": "$t(entity.artist_other)",
"folders": "$t(entity.folder_other)",
"genres": "$t(entity.genre_other)",
"home": "$t(common.home)",
"myLibrary": "moja knjižnica",
"nowPlaying": "trenutno se predvaja",
"playlists": "$t(entity.playlist_other)",
"search": "$t(common.search)",
"settings": "$t(common.setting_other)",
"shared": "deljen $t(entity.playlist_other)",
"tracks": "$t(entity.track_other)"
},
"trackList": {
"artistTracks": "skladbe po {{artist}}",
"genreTracks": "\"{{genre}}\" $t(entity.track_other)",
"title": "$t(entity.track_other)"
}
},
"player": {
"addLast": "dodaj zadnje",
"addNext": "dodaj naslednje",
"favorite": "dodaj med priljubljene",
"mute": "utišaj",
"muted": "utišano",
"next": "naslednje",
"play": "predvajaj",
"playbackFetchCancel": "akcija traja dlje časa... zaprite obvestilo za preklic",
"playbackFetchInProgress": "nalaganje pesmi…",
"playbackFetchNoResults": "nobena pesem ni bila najdena",
"playbackSpeed": "hitrost predvajanja",
"playRandom": "predvajaj naključno",
"playSimilarSongs": "predvajaj sorodne pesmi",
"previous": "prejšnje",
"queue_clear": "počisti čakalno vrsto",
"queue_moveToBottom": "premakni izbrano na vrh",
"queue_moveToTop": "premakni izbrano na dno",
"queue_remove": "odstrani izbrano",
"repeat": "ponovi",
"repeat_all": "ponovi vse",
"repeat_off": "ne ponavljaj",
"shuffle": "predvajaj v naključnem vrstnem redu",
"shuffle_off": "prevajanje v naključnem vrstnem redu izključeno",
"skip": "preskoči",
"skip_back": "preskoči nazaj",
"skip_forward": "preskoči naprej",
"stop": "ustavi",
"toggleFullscreenPlayer": "preklopi predvajalnik v celozaslonski način",
"unfavorite": "odstrani iz priljubljenih",
"pause": "premor",
"viewQueue": "poglej čakalno vrsto"
},
"setting": {
"accentColor": "barva poudarka",
"accentColor_description": "nastavi barva poudarka aplikacije",
"albumBackground": "slika ozadja albuma",
"albumBackground_description": "doda sliko ozadja za strani albuma",
"albumBackgroundBlur": "velikost zameglitve slike ozadja albuma",
"albumBackgroundBlur_description": "spremeni moč zameglitve slike ozadja albuma",
"applicationHotkeys": "bližnjične tipke aplikacije",
"applicationHotkeys_description": "konfigurira bližnjične tipke aplikacije. obkljukajte da nastavite globalne bližnjico na tipkovnici (samo na namizju)",
"artistConfiguration": "konfiguracija strani izvajalca albuma",
"artistConfiguration_description": "konfiguriranje vsebine in vrstnega reda prikaza na strani izvajalca albuma",
"audioDevice": "avdio naprava",
"audioDevice_description": "izberite avdio napravo za predvajanje (samo v spletnem predvajalniku)",
"audioExclusiveMode": "avdio način",
"audioExclusiveMode_description": "omogoči način ekskluzivnega predvajanja. V tem načinu je sistem običajno zaklenjen in samo mpv lahko oddaja zvok",
"audioPlayer": "avdio predvajalnik",
"audioPlayer_description": "izberite avdio predvajalnik za predvajanje",
"buttonSize": "velikost gumbov vrstice predvajalnika",
"buttonSize_description": "velikost gumbov v vrstici predvajalnika",
"clearCache": "izbriši začasni pomnilnik",
"clearCache_description": "poleg brisanja feishinovega začasnega pomnilnika bo izbrisan tudi začasni pomnilnik brskalnika. nastavitve in prijavni podatki strežnikov se ohranijo",
"clearQueryCache": "počisti feishinov začasni pomnilnik",
"clearQueryCache_description": "osveži sezname predvajanja, metapodatke in ponastavi shranjena besedila. nastavitve, prijavni podatki za strežnike in slike se ohranijo",
"clearCacheSuccess": "začasni pomnilnik uspešno izbrisan",
"contextMenu": "konfiguracija kontekstnega menija (desni klik)",
"contextMenu_description": "omogoči skrivanje vrstic v meniju, prikazanem ob desnem kliku. odznačeni predmeti bodo skriti",
"crossfadeDuration": "trajanje prehoda",
"crossfadeDuration_description": "nastavi čas trajanja prehoda med pesmimi",
"crossfadeStyle": "tip prehoda",
"crossfadeStyle_description": "izbira tipa efekta prehoda",
"customCssEnable": "omogoči css po meri",
"customCssEnable_description": "omogoča urejanje css-ja po meri.",
"customCssNotice": "Opozorilo: kljub določenim varnostnim ukrepom (prepoved url() in content:) lahko uporaba CSS po meri s spreminjanjem vmesnika še vedno predstavlja tveganje.",
"customCss": "css po meri",
"customCss_description": "vsebina css po meri. Opomba: vsebina in oddaljeni url-ji so prepovedane lastnosti. Spodaj je prikazan predogled vaše vsebine. Dodatna polja, ki jih niste nastavili, so prisotna zaradi prečiščevanja.",
"customFontPath": "pot za pisavo po meri",
"customFontPath_description": "nastavi pot do pisave po meri",
"disableAutomaticUpdates": "onemogoči samodejne posodobitve",
"disableLibraryUpdateOnStartup": "onemogoči prevejranje novih verzij ob zagonu",
"discordApplicationId": "{{discord}} identifikator aplikacije",
"discordApplicationId_description": "identifikator aplikacije za {{discord}} bogato prezenco (privzeto {{defaultId}})",
"discordPausedStatus": "prikaži bogato prezenco med ustavljenim predvajanjem",
"discordPausedStatus_description": "ko je nastavitev omogočena, se bo status prikazal tudi ko je predvajanje začasno zaustavljeno",
"discordIdleStatus": "prikaže stanje mirovanja v bogati prezenci",
"discordIdleStatus_description": "ko je nastavitev omogočena, se bo status posodabljal ko predvajalnik miruje",
"discordListening": "prikaži status poslušanja",
"discordListening_description": "prikaži status poslušanja namesto predvajanja",
"discordRichPresence": "{{discord}} bogata prezenca",
"discordRichPresence_description": "omogoči prikaz statusa predvajanja v {{discord}} bogati prezenci. Oznake slike so: {{icon}}, {{playing}} in {{paused}}",
"discordServeImage": "pošiljaj {{discord}} u slike iz strežnika",
"discordServeImage_description": "deli naslovne slike za {{discord}} bogato prisotnost iz samega strežnika, na voljo samo za jellyfin in navidrome",
"discordUpdateInterval": "interval posodabljanja {{discord}} bogate prezence",
"discordUpdateInterval_description": "čas v sekundah med posameznimi posodobitvami (najmanj 15 sekund)",
"doubleClickBehavior": "dvojni klik doda vse iskane skladbe v čakalno vrsto",
"doubleClickBehavior_description": "če je nastavitev vklopljena se bodo v čakalno vrsto dodale vse skladbe, ki ustrezajo iskanju. v nasprotnem primeru se v čakalno vrsto doda samo izbrana skladba",
"enableRemote": "omogoči oddaljeno upravljanje strežnika",
"enableRemote_description": "omogoči oddaljeno nadzorovanje strežnika in s tem dovoli drugim napravam da upravljajo aplikacijo",
"externalLinks": "prikaži zunanje povezave",
"externalLinks_description": "omogoči prikaz zunanjih povezav (Last.fm, MusicBrainz) na straneh albumov,izvajalcev",
"exitToTray": "minimiziraj",
"exitToTray_description": "ob izhodu se aplikacija minimizira v opravilno vrstico",
"floatingQueueArea": "prikaži območje plavajoče čakalne vrste",
"floatingQueueArea_description": "na desni strani zaslona prikažite ikono za ogled čakalne vrste predvajanja",
"followLyric": "sledenje besedilu",
"followLyric_description": "pomaknite besedilo pesmi do trenutnega položaja predvajanja",
"preferLocalLyrics": "prioritiziraj lokalna besedila",
"preferLocalLyrics_description": "prioritiziraj lokalna besedila pred oddaljenimi, kadar so na voljo",
"font": "pisava",
"font_description": "nastavi pisavo, ki jo bo aplikacija uporabljala",
"fontType": "tip pisave",
"fontType_description": "vgrajena pisava izbere eno od pisav, ki jih ponuja Feishin. sistemska pisava vam omogoča, da izberete katero koli pisavo, ki jo ponuja vaš operacijski sistem. po meri lahko izberete svojo pisavo",
"fontType_optionBuiltIn": "vgrajena pisava",
"fontType_optionCustom": "pisava po meri",
"fontType_optionSystem": "sistemska pisava",
"gaplessAudio": "neprekinjen avdio",
"gaplessAudio_description": "nastavi neprekinjen avdio za mpv",
"gaplessAudio_optionWeak": "šibko (priporočeno)",
"genreBehavior": "privzeto vedenje strani z zvrstmi",
"genreBehavior_description": "določa, ali se ob kliku na zvrst privzeto odpre seznam skladb ali albumov",
"globalMediaHotkeys": "globalne bližnjične tipke za vsebino",
"globalMediaHotkeys_description": "omogočite ali onemogočite uporabo bližnjic za sistemske medije za nadzor predvajanja",
"homeConfiguration": "konfiguracija domače strani",
"homeConfiguration_description": "konfigurirajte, kateri elementi so prikazani na domači strani in v kakšnem vrstnem redu",
"homeFeature": "tekoči trak na domači strani",
"homeFeature_description": "nadzoruje, ali naj se na domači strani prikaže velik tekoči trak",
"hotkey_browserBack": "nazaj (brskalnik)",
"hotkey_browserForward": "naprej (brskalnik)",
"hotkey_favoriteCurrentSong": "dodaj $t(common.currentSong) med priljubljene",
"hotkey_favoritePreviousSong": "dodaj $t(common.previousSong) med priljubljene",
"hotkey_globalSearch": "globalno iskanje",
"hotkey_localSearch": "iskanje na strani",
"hotkey_playbackNext": "naslednja skladba",
"hotkey_playbackPause": "pavza",
"hotkey_playbackPlay": "predvajaj",
"hotkey_playbackPlayPause": "predvajaj / pavza",
"hotkey_playbackPrevious": "prejšnja skladba",
"hotkey_playbackStop": "ustavi",
"hotkey_rate0": "počisti oceno",
"hotkey_rate1": "oceni z 1 zvezdico",
"hotkey_rate2": "oceni z 2 zvezdicama",
"hotkey_rate3": "oceni s 3 zvezdicami",
"hotkey_rate4": "oceni s 4 zvezdicami",
"hotkey_rate5": "oceni s 5 zvezdicami",
"hotkey_skipBackward": "preskoči nazaj",
"hotkey_skipForward": "preskoči naprej",
"hotkey_toggleCurrentSongFavorite": "dodaj/odstrani $t(common.currentSong) iz seznama priljubljenih",
"hotkey_toggleFullScreenPlayer": "preklopi predvajalnik na celozaslonski način",
"hotkey_togglePreviousSongFavorite": "dodaj/odstrani $t(common.previousSong) iz seznama priljubljenih",
"hotkey_toggleQueue": "preklopi čakalno vrsto",
"hotkey_toggleRepeat": "preklopi ponovitve",
"hotkey_toggleShuffle": "preklopi naključni vrstni red predvajanja",
"hotkey_unfavoriteCurrentSong": "odstrani $t(common.currentSong) iz seznama priljubljenih",
"hotkey_unfavoritePreviousSong": "odstrani $t(common.previousSong) iz seznama priljubljenih",
"hotkey_volumeDown": "znižaj glasnost",
"hotkey_volumeMute": "utišaj",
"hotkey_volumeUp": "povišaj glasnost",
"hotkey_zoomIn": "povečaj",
"hotkey_zoomOut": "pomanjšaj",
"imageAspectRatio": "uporabi razmerje stranic izvorne naslovnice",
"imageAspectRatio_description": "če je omogočeno, bo naslovnica prikazana z izvornim razmerjem stranic. za slike, ki niso 1:1, bo preostali prostor prazen",
"language": "jezik",
"language_description": "nastavi jezik aplikacije ($t(common.restartRequired))",
"lastfm": "prikaži last.fm povezave",
"lastfm_description": "prikaži povezave do last.fm na straneh izvajalcev/albumov",
"lastfmApiKey": "API ključ {{lastfm}}",
"lastfmApiKey_description": "API ključ za {{lastfm}}. potreben za naslovnico albuma",
"lyricFetch": "pridobi besedila iz interneta",
"lyricFetch_description": "pridobivanje besedil iz različnih internetnih virov",
"lyricFetchProvider": "ponudniki za pridobivanje besedil",
"lyricFetchProvider_description": "izberite ponudnike, od katerih želite pridobiti besedila. vrstni red ponudnikov je vrstni red, v katerem bodo poizvedovani",
"lyricOffset": "zamik besedila (ms)",
"lyricOffset_description": "zamakni besedilo za določeno število milisekund",
"minimizeToTray": "minimiziraj v sistemsko vrstico",
"minimizeToTray_description": "minimizirajte aplikacijo v sistemsko vrstico"
}
}
+3 -3
View File
@@ -112,7 +112,7 @@
"hotkey_localSearch": "pretraživanje na stranici",
"hotkey_toggleQueue": "promeni listu za reprodukciju",
"zoom_description": "postavlja stepen zumiranja za aplikaciju",
"remotePassword_description": "postavlja lozinku za daljinsku kontrolu servera. Ove informacije se prenose nezaštićeno, pa biste trebali koristiti jedinstvenu lozinku koja vam nije važna.",
"remotePassword_description": "postavlja lozinku za daljinsku kontrolu servera. Ove informacije se prenose nezaštićeno, pa biste trebali koristiti jedinstvenu lozinku koja vam nije važna",
"hotkey_rate5": "oceni sa 5 zvezdica",
"hotkey_playbackPrevious": "prethodna pesma",
"showSkipButtons_description": "prikaži ili sakrij dugmad za preskakanje na traci za reprodukciju",
@@ -122,7 +122,7 @@
"hotkey_toggleShuffle": "promeni slučajan redosled",
"theme": "tema",
"playbackStyle_description": "izaberite stil reprodukcije za audio plejer",
"discordRichPresence_description": "omogućava status reprodukcije u {{discord}} bogatom prikazu. Ključevi slika su: {{icon}}, {{playing}}, i {{paused}} ",
"discordRichPresence_description": "omogućava status reprodukcije u {{discord}} bogatom prikazu. Ključevi slika su: {{icon}}, {{playing}}, i {{paused}}",
"mpvExecutablePath": "putanja do mpv izvršne datoteke",
"audioDevice": "audio uređaj",
"hotkey_rate2": "oceni sa 2 zvezdice",
@@ -158,7 +158,7 @@
"useSystemTheme_description": "prati sistemski određene postavke za svetlu ili tamnu temu",
"playButtonBehavior_optionAddNext": "$t(player.addNext)",
"lyricFetch_description": "preuzimanje tekstova sa različitih izvora na internetu",
"lyricFetchProvider_description": "izaberite pružatelje tekstova za preuzimanje. Redosled pružatelja je redosled upita.",
"lyricFetchProvider_description": "izaberite pružatelje tekstova za preuzimanje. Redosled pružatelja je redosled upita",
"globalMediaHotkeys_description": "omogućava ili onemogućava korišćenje medijskih tastera sistema za kontrolu reprodukcije",
"customFontPath": "prilagođena putanja fonta",
"followLyric": "prati trenutni tekst pesme",
+172 -144
View File
@@ -1,22 +1,22 @@
{
"action": {
"addToFavorites": "$ t இல் சேர்க்கவும் (entity.foavorite_other)",
"addToFavorites": "$t(entity.favorite_other) இல் சேர்க்கவும்",
"clearQueue": "தெளிவான வரிசை",
"goToPage": "பக்கத்திற்குச் செல்லுங்கள்",
"moveToBottom": "கீழே செல்லுங்கள்",
"moveToTop": "மேலே செல்லுங்கள்",
"refresh": "$ t (காமன்.ரெஃப்ரெச்)",
"removeFromFavorites": "$ t இலிருந்து அகற்று (entity.foavorite_other)",
"removeFromPlaylist": "$ t இலிருந்து அகற்று (entity.playlist_one)",
"refresh": "$t(common.refresh)",
"removeFromFavorites": "$t(entity.favorite_other)இலிருந்து அகற்று",
"removeFromPlaylist": "$t(entity.playlist_one) இலிருந்து அகற்று",
"removeFromQueue": "வரிசையிலிருந்து அகற்று",
"setRating": "மதிப்பீட்டை அமைக்கவும்",
"toggleSmartPlaylistEditor": "மாற்று $ t (entity.smartplaylist) ஆசிரியர்",
"viewPlaylists": "$ t (entity.playlist_other) காண்க",
"addToPlaylist": "$ t இல் சேர்க்கவும் (entity.playlist_one)",
"createPlaylist": "$ t ஐ உருவாக்கவும் (entity.playlist_one)",
"deletePlaylist": "$ t (entity.playlist_one) ஐ நீக்கு",
"toggleSmartPlaylistEditor": "மாற்று $t(entity.smartPlaylist) ஆசிரியர்",
"viewPlaylists": "$t(entity.playlist_other) காண்க",
"addToPlaylist": "$t(entity.playlist_one)இல் சேர்க்கவும்",
"createPlaylist": "$t(entity.playlist_one)ஐ உருவாக்கவும்",
"deletePlaylist": "$t(entity.playlist_one)ஐ நீக்கு",
"deselectAll": "அனைத்தையும் தேர்வு செய்யுங்கள்",
"editPlaylist": "திருத்து $ t (entity.playlist_one)",
"editPlaylist": "திருத்து $t(entity.playlist_one)",
"moveToNext": "அடுத்து செல்லுங்கள்",
"openIn": {
"lastfm": "Last.fm இல் திறந்திருக்கும்",
@@ -33,7 +33,7 @@
"configure": "உள்ளமைக்கவும்",
"confirm": "உறுதிப்படுத்தவும்",
"create": "உருவாக்கு",
"currentSong": "தற்போதைய $ t (entity.track_one)",
"currentSong": "தற்போதைய $t(entity.track_one)",
"decrease": "குறைவு",
"action_one": "செயல்",
"action_other": "செயல்கள்",
@@ -69,7 +69,7 @@
"filter_one": "வடிப்பி",
"filter_other": "வடிப்பான்கள்",
"filters": "வடிப்பான்கள்",
"forceRestartRequired": "மாற்றங்களைப் பயன்படுத்த மறுதொடக்கம்… மறுதொடக்கம் செய்ய அறிவிப்பை மூடு",
"forceRestartRequired": "மாற்றங்களைப் பயன்படுத்த மறுதொடக்கம் செய்… மறுதொடக்கம் செய்ய அறிவிப்பை மூடு",
"forward": "முன்னோக்கி",
"gap": "இடைவெளி",
"home": "வீடு",
@@ -87,7 +87,7 @@
"path": "பாதை",
"playerMustBePaused": "வீரர் இடைநிறுத்தப்பட வேண்டும்",
"preview": "முன்னோட்டம்",
"previousSong": "முந்தைய $ t (entity.track_one)",
"previousSong": "முந்தைய $t(entity.track_one)",
"quit": "வெளியேறு",
"random": "சீரற்ற",
"rating": "செயல்வரம்பு",
@@ -112,7 +112,13 @@
"trackNumber": "மின்தடம்",
"trackGain": "தடமறிதல்",
"trackPeak": "ட்ராக் பீக்",
"translation": "மொழிபெயர்ப்பு"
"translation": "மொழிபெயர்ப்பு",
"additionalParticipants": "கூடுதல் பங்கேற்பாளர்கள்",
"newVersion": "புதிய பதிப்பு நிறுவப்பட்டுள்ளது ({{version}})",
"viewReleaseNotes": "வெளியீட்டு குறிப்புகளைக் காண்க",
"bitDepth": "பிட் ஆழம்",
"sampleRate": "மாதிரி வீதம்",
"tags": "குறிச்சொற்கள்"
},
"entity": {
"folderWithCount_one": "{{count}} கோப்புறை",
@@ -121,8 +127,8 @@
"genre_other": "வகைகள்",
"genreWithCount_one": "{{count}} வகை",
"genreWithCount_other": "{{count}} வகைகள்",
"album_one": "ஆல்பம்",
"album_other": "ஆல்பம்",
"album_one": "செருகேடு",
"album_other": "செருகேடுகள்",
"albumArtist_one": "ஆல்பம் கலைஞர்",
"albumArtist_other": "ஆல்பம் கலைஞர்கள்",
"albumArtistCount_one": "{{count}} ஆல்பம் கலைஞர்",
@@ -139,11 +145,11 @@
"folder_other": "கோப்புறைகள்",
"playlist_one": "பிளேலிச்ட்",
"playlist_other": "பிளேலிச்ட்கள்",
"play_one": "{{count}} play",
"play_one": "{{count}} நாடகம்",
"play_other": "{{count}} நாடகங்கள்",
"playlistWithCount_one": "{{count}} பிளேலிச்ட்",
"playlistWithCount_other": "{{count}} பிளேலிச்ட்கள்",
"smartPlaylist": "அறிவுள்ள $ t (entity.playlist_one)",
"smartPlaylist": "அறிவுள்ள $t(entity.playlist_one)",
"track_one": "மின்தடம்",
"track_other": "தடங்கள்",
"song_one": "பாடல்",
@@ -157,13 +163,13 @@
"remotePortWarning": "புதிய துறைமுகத்தைப் பயன்படுத்த சேவையகத்தை மறுதொடக்கம் செய்யுங்கள்",
"serverNotSelectedError": "சேவையகம் எதுவும் தேர்ந்தெடுக்கப்படவில்லை",
"serverRequired": "சேவையகம் தேவை",
"remoteEnableError": "தொலைநிலை சேவையகத்தை $ t (பொதுவானது) முயற்சிக்கும்போது பிழை ஏற்பட்டது",
"remoteEnableError": "தொலைநிலை சேவையகத்தை $t(common.enable) முயற்சிக்கும்போது பிழை ஏற்பட்டது",
"apiRouteError": "பாதை கோரிக்கை செய்ய முடியவில்லை",
"audioDeviceFetchError": "ஆடியோ சாதனங்களைப் பெற முயற்சிக்கும்போது பிழை ஏற்பட்டது",
"authenticationFailed": "ஏற்பு தோல்வியடைந்தது",
"badAlbum": "இந்த பாடல் ஆல்பத்தின் பகுதியாக இல்லாததால் இந்தப் பக்கத்தைப் பார்க்கிறீர்கள். உங்கள் இசை கோப்புறையின் மேல் மட்டத்தில் ஒரு பாடல் இருந்தால் இந்த சிக்கலைப் பார்க்கிறீர்கள். செல்லிஃபின் ஒரு கோப்புறையில் இருந்தால் தடங்களை மட்டுமே குழுக்கள்.",
"credentialsRequired": "நற்சான்றிதழ்கள் தேவை",
"endpointNotImplementedError": "Endpoint {{endpoint}} {{serverType} க்கு க்கு செயல்படுத்தப்படவில்லை",
"endpointNotImplementedError": "Endpoint {{endpoint}} {{serverType}} க்கு செயல்படுத்தப்படவில்லை",
"genericError": "பிழை ஏற்பட்டது",
"invalidServer": "தவறான சேவையகம்",
"localFontAccessDenied": "உள்ளக எழுத்துருக்களுக்கு மறுக்கப்பட்டது",
@@ -171,32 +177,34 @@
"networkError": "பிணைய பிழை ஏற்பட்டது",
"openError": "கோப்பைத் திறக்க முடியவில்லை",
"playbackError": "ஊடகங்களை விளையாட முயற்சிக்கும்போது பிழை ஏற்பட்டது",
"remoteDisableError": "தொலைநிலை சேவையகத்தை $ t (பொதுவானது. குறைக்கக்கூடிய) முயற்சிக்கும்போது பிழை ஏற்பட்டது",
"remoteDisableError": "தொலைநிலை சேவையகத்தை $t(common.disable) முயற்சிக்கும்போது பிழை ஏற்பட்டது",
"sessionExpiredError": "உங்கள் அமர்வு காலாவதியானது",
"systemFontError": "கணினி எழுத்துருக்களைப் பெற முயற்சிக்கும்போது பிழை ஏற்பட்டது"
"systemFontError": "கணினி எழுத்துருக்களைப் பெற முயற்சிக்கும்போது பிழை ஏற்பட்டது",
"badValue": "தவறான விருப்பம் \"{{value}}\". இந்த மதிப்பு இனி இல்லை",
"notificationDenied": "அறிவிப்புகளுக்கான அனுமதிகள் மறுக்கப்பட்டன. இந்த அமைப்பு எந்த விளைவையும் ஏற்படுத்தாது"
},
"filter": {
"albumArtist": "$ t (entity.albumartist_one)",
"albumCount": "$ t (entity.album_other) எண்ணிக்கை",
"artist": "$ t (entity.artist_one)",
"albumArtist": "$t(entity.albumArtist_one)",
"albumCount": "$t(entity.album_other) எண்ணிக்கை",
"artist": "$t(entity.artist_one)",
"biography": "சுயசரிதை",
"bitrate": "பிட்ரேட்",
"bpm": "பிபிஎம்",
"channels": "$ t (common.channel_other)",
"channels": "$t(common.channel_other)",
"comment": "கருத்து",
"communityRating": "சமூக மதிப்பீடு",
"path": "பாதை",
"playCount": "விளையாட்டு எண்ணிக்கை",
"random": "சீரற்ற",
"rating": "செயல்வரம்பு",
"album": "$ t (entity.album_one)",
"album": "$t(entity.album_one)",
"criticRating": "விமர்சகர் மதிப்பீடு",
"dateAdded": "தேதி சேர்க்கப்பட்டது",
"disc": "வட்டு",
"duration": "காலம்",
"favorited": "பிடித்தது",
"fromYear": "ஆண்டு முதல்",
"genre": "$ t (entity.genre_one)",
"genre": "$t(entity.genre_one)",
"id": "ஐடி",
"isCompilation": "தொகுப்பு",
"isFavorited": "பிடித்தது",
@@ -207,7 +215,7 @@
"mostPlayed": "அதிகம் விளையாடியது",
"name": "பெயர்",
"note": "குறிப்பு",
"owner": "$ t (பொதுவானவர்)",
"owner": "$t(common.owner)",
"recentlyAdded": "அண்மைக் காலத்தில் சேர்க்கப்பட்டது",
"recentlyPlayed": "அண்மைக் காலத்தில் விளையாடியது",
"recentlyUpdated": "அண்மைக் காலத்தில் புதுப்பிக்கப்பட்டது",
@@ -223,8 +231,8 @@
"addServer": {
"input_password": "கடவுச்சொல்",
"error_savePassword": "கடவுச்சொல்லை சேமிக்க முயற்சிக்கும்போது பிழை ஏற்பட்டது",
"ignoreCors": "CORS ஐ புறக்கணிக்கவும் ($ t (Common.RestartRequired))",
"ignoreSsl": "SSL ஐ புறக்கணிக்கவும் ($ t (பொதுவானது.",
"ignoreCors": "CORS ஐ புறக்கணிக்கவும் ($t(common.restartRequired))",
"ignoreSsl": "SSL ஐ புறக்கணிக்கவும் ($t(common.restartRequired))",
"input_legacyAuthentication": "மரபு அங்கீகாரத்தை இயக்கவும்",
"input_name": "சேவையக பெயர்",
"input_savePassword": "கடவுச்சொல்லைச் சேமிக்கவும்",
@@ -234,23 +242,24 @@
"title": "சேவையகத்தைச் சேர்க்கவும்"
},
"deletePlaylist": {
"input_confirm": "உறுதிப்படுத்த $ t (entity.playlist_one) பெயரைத் தட்டச்சு செய்க",
"success": "$ t (entity.playlist_one) வெற்றிகரமாக நீக்கப்பட்டது",
"title": "$ t (entity.playlist_one) ஐ நீக்கு"
"input_confirm": "உறுதிப்படுத்த $t(entity.playlist_one) பெயரைத் தட்டச்சு செய்க",
"success": "$t(entity.playlist_one) வெற்றிகரமாக நீக்கப்பட்டது",
"title": "$t(entity.playlist_one)ஐ நீக்கு"
},
"editPlaylist": {
"title": "திருத்து $ t (entity.playlist_one)",
"title": "திருத்து $t(entity.playlist_one)",
"publicJellyfinNote": "சில காரணங்களால் செல்லிஃபின் ஒரு பிளேலிச்ட் பொதுவில் இல்லையா என்பதை அம்பலப்படுத்தவில்லை. இது பொதுவில் இருக்க விரும்பினால், தயவுசெய்து பின்வரும் உள்ளீட்டைத் தேர்ந்தெடுக்கவும்",
"success": "$ t (entity.playlist_one) வெற்றிகரமாக புதுப்பிக்கப்பட்டது"
"success": "$t(entity.playlist_one) வெற்றிகரமாகப் புதுப்பிக்கப்பட்டது"
},
"lyricSearch": {
"input_artist": "$ t (entity.artist_one)",
"input_name": "$ t (common.name)",
"input_artist": "$t(entity.artist_one)",
"input_name": "$t(common.name)",
"title": "பாடல் தேடல்"
},
"queryEditor": {
"input_optionMatchAll": "அனைத்தையும் பொருத்துங்கள்",
"input_optionMatchAny": "எந்த பொருத்தவும்"
"input_optionMatchAny": "எந்த பொருத்தவும்",
"title": "வினவல் ஆசிரியர்"
},
"shareItem": {
"description": "விவரம்",
@@ -261,18 +270,18 @@
"createFailed": "பங்கை உருவாக்கத் தவறிவிட்டது (பகிர்வு இயக்கப்பட்டதா?)"
},
"createPlaylist": {
"success": "$ t (entity.playlist_one) வெற்றிகரமாக உருவாக்கப்பட்டது",
"title": "$ t (entity.playlist_one) ஐ உருவாக்கவும்",
"input_description": "$ t (common.description)",
"input_name": "$ t (common.name)",
"input_owner": "$ t (பொதுவானவர்)",
"success": "$t(entity.playlist_one) வெற்றிகரமாக உருவாக்கப்பட்டது",
"title": "$t(entity.playlist_one) ஐ உருவாக்கவும்",
"input_description": "$t(common.description)",
"input_name": "$t(common.name)",
"input_owner": "$t(common.owner)",
"input_public": "பொது"
},
"addToPlaylist": {
"input_playlists": "$ t (entity.playlist_other)",
"input_playlists": "$t(entity.playlist_other)",
"input_skipDuplicates": "நகல்களைத் தவிர்க்கவும்",
"success": "$ t (entity.trackwithCount, {\"count\": {{message}}}) $ t (entity.playlistwithCount, {\"count\": {{numOfPlaylists}}})",
"title": "$ t இல் சேர்க்கவும் (entity.playlist_one)"
"success": "$t(entity.trackWithCount, {\"count\": {{message}} }) இதற்கு $t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} }) சேர்க்கப்பட்டது",
"title": "$t(entity.playlist_one) இல் சேர்"
},
"updateServer": {
"success": "சேவையகம் வெற்றிகரமாக புதுப்பிக்கப்பட்டது",
@@ -286,8 +295,8 @@
"recentReleases": "அண்மைக் கால வெளியீடுகள்",
"viewDiscography": "டிச்கோகிராஃபி காண்க",
"topSongs": "சிறந்த பாடல்கள்",
"viewAllTracks": "அனைத்தையும் காண்க (entity.track_other)",
"relatedArtists": "தொடர்புடைய $ t (entity.artist_other)",
"viewAllTracks": "அனைத்தையும் காண்க $t(entity.track_other)",
"relatedArtists": "தொடர்புடைய $t(entity.artist_other)",
"topSongsFrom": "{{title}} இலிருந்து சிறந்த பாடல்கள்",
"viewAll": "அனைத்தையும் காண்க"
},
@@ -298,9 +307,9 @@
"goForward": "முன்னோக்கிச் செல்லுங்கள்",
"manageServers": "சேவையகங்களை நிர்வகிக்கவும்",
"openBrowserDevtools": "திறந்த உலாவி தேவ்டூல்கள்",
"quit": "$ t (common.quit)",
"quit": "$t(common.quit)",
"selectServer": "சேவையகத்தைத் தேர்ந்தெடுக்கவும்",
"settings": "$ t (common.setting_other)",
"settings": "$t(common.setting_other)",
"version": "பதிப்பு {{version}}"
},
"manageServers": {
@@ -312,28 +321,28 @@
"removeServer": "சேவையகத்தை அகற்று"
},
"contextMenu": {
"addNext": "$ t (player.addnext)",
"deletePlaylist": "$ t (action.deleteplaylist)",
"deselectAll": "$ t (action.deselectall)",
"addNext": "$t(player.addNext)",
"deletePlaylist": "$t(action.deletePlaylist)",
"deselectAll": "$t(action.deselectAll)",
"download": "பதிவிறக்கம்",
"moveToBottom": "$ t (action.movetobottom)",
"moveToTop": "$ t (action.movetotop)",
"moveToBottom": "$t(action.moveToBottom)",
"moveToTop": "$t(action.moveToTop)",
"numberSelected": "{{count}} தேர்ந்தெடுக்கப்பட்டது",
"playSimilarSongs": "$ t (player.playsimilarsongs)",
"removeFromFavorites": "$ t (action.removefromfoavites)",
"removeFromPlaylist": "$ t (action.RemoveFrollayList)",
"removeFromQueue": "$ t (action.RemoveFromQueue)",
"setRating": "$ t (action.setrating)",
"playShuffled": "$ t (player.shuffle)",
"addFavorite": "$ t (action.addtofoaverites)",
"addLast": "$ t (player.addlast)",
"moveToNext": "$ t (action.movetonext)",
"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)",
"addFavorite": "$t(action.addToFavorites)",
"addLast": "$t(player.addLast)",
"moveToNext": "$t(action.moveToNext)",
"play": "$t(player.play)",
"shareItem": "உருப்படியைப் பகிரவும்",
"showDetails": "தகவலைப் பெறுங்கள்",
"addToFavorites": "$ t (action.addtofoaverites)",
"addToPlaylist": "$ t (action.addtoplailist)",
"createPlaylist": "$ t (action.createplaylist)"
"addToFavorites": "$t(action.addToFavorites)",
"addToPlaylist": "$t(action.addToPlaylist)",
"createPlaylist": "$t(action.createPlaylist)"
},
"fullscreenPlayer": {
"config": {
@@ -359,9 +368,9 @@
"related": "தொடர்புடைய"
},
"genreList": {
"showAlbums": "$ t (entity.genre_one) $ t (entity.album_other)",
"showTracks": "$ t (entity.genre_one) $ t (entity.track_other)",
"title": "$ t (entity.genre_other)"
"showAlbums": "காட்டு $t(entity.genre_one) $t(entity.album_other)",
"showTracks": "காட்டு $t(entity.genre_one) $t(entity.track_other)",
"title": "$t(entity.genre_other)"
},
"globalSearch": {
"commands": {
@@ -376,7 +385,7 @@
"mostPlayed": "அதிகம் விளையாடியது",
"newlyAdded": "புதிதாக சேர்க்கப்பட்ட வெளியீடுகள்",
"recentlyPlayed": "அண்மைக் காலத்தில் விளையாடியது",
"title": "$ t (காமன்.ஓம்)"
"title": "$t(common.home)"
},
"itemDetail": {
"copyPath": "இடைநிலைப்பலகைக்கு பாதையை நகலெடுக்கவும்",
@@ -387,7 +396,7 @@
"reorder": "ஐடியால் வரிசைப்படுத்தும்போது மட்டுமே மறுசீரமைப்பு இயக்கப்பட்டது"
},
"playlistList": {
"title": "$ t (entity.playlist_other)"
"title": "$t(entity.playlist_other)"
},
"setting": {
"advanced": "மேம்பட்ட",
@@ -397,43 +406,44 @@
"windowTab": "சாளரம்"
},
"sidebar": {
"folders": "$ t (entity.folder_other)",
"genres": "$ t (entity.genre_other)",
"home": "$ t (காமன்.ஓம்)",
"folders": "$t(entity.folder_other)",
"genres": "$t(entity.genre_other)",
"home": "$t(common.home)",
"nowPlaying": "இப்போது விளையாடுகிறது",
"playlists": "$ t (entity.playlist_other)",
"search": "$ t (பொதுவானது. தேடல்)",
"settings": "$ t (common.setting_other)",
"albumArtists": "$ t (entity.albumartist_other)",
"albums": "$ t (entity.album_other)",
"artists": "$ t (entity.artist_other)",
"shared": "பகிரப்பட்ட $ t (entity.playlist_other)",
"tracks": "$ t (entity.track_other)"
"playlists": "$t(entity.playlist_other)",
"search": "$t(common.search)",
"settings": "$t(common.setting_other)",
"albumArtists": "$t(entity.albumArtist_other)",
"albums": "$t(entity.album_other)",
"artists": "$t(entity.artist_other)",
"shared": "$t(entity.playlist_other) பகிரப்பட்டது",
"tracks": "$t(entity.track_other)",
"myLibrary": "எனது நூலகம்"
},
"trackList": {
"title": "$ t (entity.track_other)",
"genreTracks": "\"{{genre}}\" $ t (entity.track_other)",
"title": "$t(entity.track_other)",
"genreTracks": "\"{{genre}}\" $t(entity.track_other)",
"artistTracks": "{{artist}}"
},
"albumArtistList": {
"title": "$ t (entity.albumartist_other)"
"title": "$t(entity.albumArtist_other)"
},
"albumDetail": {
"moreFromArtist": "இந்த $ t (entity.artist_one) இலிருந்து மேலும்",
"moreFromGeneric": "{{item} இருந்து இலிருந்து மேலும்",
"moreFromArtist": "இந்த $t(entity.artist_one) இலிருந்து மேலும்",
"moreFromGeneric": "{{item}} இலிருந்து மேலும்",
"released": "வெளியிடப்பட்டது"
},
"albumList": {
"artistAlbums": "ஆல்பங்கள் {{artist}}",
"genreAlbums": "\"{{genre}}\" $ t (entity.album_other)",
"title": "$ t (entity.album_other)"
"genreAlbums": "\"{{genre}}\" $t(entity.album_other)",
"title": "$t(entity.album_other)"
}
},
"player": {
"addLast": "கடைசியாக சேர்க்கவும்",
"addNext": "அடுத்து சேர்க்கவும்",
"favorite": "பிடித்த",
"mute": "முடக்கு",
"mute": "ஒலிமுடக்கு",
"muted": "முடக்கிய",
"next": "அடுத்தது",
"play": "விளையாடுங்கள்",
@@ -500,7 +510,7 @@
"globalMediaHotkeys_description": "பிளேபேக்கைக் கட்டுப்படுத்த உங்கள் கணினி மீடியா ஆட்கீசின் பயன்பாட்டை இயக்கவும் அல்லது முடக்கவும்",
"homeConfiguration": "முகப்பு பக்க உள்ளமைவு",
"homeFeature": "வீட்டில் கொணர்வி இடம்பெற்றது",
"hotkey_favoriteCurrentSong": "பிடித்த $ t (common.curressong)",
"hotkey_favoriteCurrentSong": "பிடித்த $t(common.currentSong)",
"hotkey_globalSearch": "உலக தேடல்",
"hotkey_playbackPrevious": "முந்தைய பாடல்",
"hotkey_playbackStop": "நிறுத்து",
@@ -511,19 +521,19 @@
"hotkey_rate4": "மதிப்பீடு 4 நட்சத்திரங்கள்",
"hotkey_rate5": "மதிப்பீடு 5 நட்சத்திரங்கள்",
"hotkey_toggleFullScreenPlayer": "முழு திரை பிளேயரை மாற்றவும்",
"hotkey_togglePreviousSongFavorite": "மாற்றவும் (பொதுவானது. ப்ரீவியச்ங்) பிடித்தது",
"hotkey_togglePreviousSongFavorite": "மாற்றவும் $t(common.previousSong) பிடித்தது",
"hotkey_toggleQueue": "வரிசையை மாற்றவும்",
"hotkey_toggleRepeat": "மீண்டும் மீண்டும்",
"hotkey_toggleRepeat": "மாற்று மறுநிகழ்வு",
"hotkey_toggleShuffle": "கலக்கு மாற்று",
"hotkey_unfavoriteCurrentSong": "சாதகமற்ற $ t (common.curressong)",
"hotkey_unfavoritePreviousSong": "சாதகமற்ற $ t (காமன்.பிரெவியச்ங்)",
"hotkey_unfavoriteCurrentSong": "பிடிக்காத $t(common.currentSong)",
"hotkey_unfavoritePreviousSong": "பிடிக்காத $t(common.previousSong)",
"hotkey_volumeDown": "தொகுதி கீழே",
"hotkey_volumeMute": "தொகுதி முடக்கு",
"hotkey_volumeUp": "தொகுதி",
"language": "மொழி",
"language_description": "பயன்பாட்டிற்கான மொழியை அமைக்கிறது ($ t (பொதுவானது.",
"language_description": "பயன்பாட்டிற்கான மொழியை அமைக்கிறது ($t(common.restartRequired))",
"lastfmApiKey": "{{lastfm}} பநிஇ key",
"lastfmApiKey_description": "{{lastfm} க்கு க்கான பநிஇ விசை. கவர் கலைக்கு தேவை",
"lastfmApiKey_description": "{{lastfm}} க்கான பநிஇ விசை. கவர் கலைக்குத் தேவை",
"lyricFetch": "இணையத்திலிருந்து வரிகளை பெறுங்கள்",
"lyricFetchProvider_description": "பாடல் பெற வழங்குநர்களைத் தேர்ந்தெடுக்கவும். வழங்குநர்களின் வரிசை அவர்கள் வினவப்படும் ஒழுங்கு",
"lyricOffset": "பாடல் ஆஃப்செட் (எம்.எச்)",
@@ -544,8 +554,8 @@
"playbackStyle_optionNormal": "சாதாரண",
"playButtonBehavior": "பொத்தான் நடத்தை விளையாடுங்கள்",
"playButtonBehavior_description": "வரிசையில் பாடல்களைச் சேர்க்கும்போது ப்ளே பொத்தானின் இயல்புநிலை நடத்தை அமைக்கிறது",
"playButtonBehavior_optionAddLast": "$ t (player.addlast)",
"playButtonBehavior_optionAddNext": "$ t (player.addnext)",
"playButtonBehavior_optionAddLast": "$t(player.addLast)",
"playButtonBehavior_optionAddNext": "$t(player.addNext)",
"playerAlbumArtResolution": "பிளேயர் ஆல்பம் கலைத் தீர்மானம்",
"playerAlbumArtResolution_description": "பெரிய வீரரின் ஆல்பம் கலை முன்னோட்டத்திற்கான தீர்மானம். பெரியது இது மிகவும் மிருதுவானதாக தோற்றமளிக்கிறது, ஆனால் மெதுவாக ஏற்றுவதை மெதுவாகக் கொண்டிருக்கலாம். இயல்புநிலை 0 க்கு, அதாவது ஆட்டோ",
"playerbarOpenDrawer": "பிளேயர்பார் முழுத்திரை மாற்று",
@@ -557,14 +567,14 @@
"remoteUsername": "ரிமோட் கண்ட்ரோல் சர்வர் பயனர்பெயர்",
"remoteUsername_description": "ரிமோட் கண்ட்ரோல் சேவையகத்திற்கான பயனர்பெயரை அமைக்கிறது. பயனர்பெயர் மற்றும் கடவுச்சொல் இரண்டும் காலியாக இருந்தால், ஏற்பு முடக்கப்படும்",
"replayGainClipping": "{{ReplayGain}} கிளிப்பிங்",
"replayGainClipping_description": "ஆதாயத்தை தானாகவே குறைப்பதன் மூலம் {{ReplayGain} by காரணமாக ஏற்படும் கிளிப்பிங்கைத் தடுக்கவும்",
"replayGainFallback": "{{{ReplayGain}}} falback",
"replayGainClipping_description": "ஆதாயத்தைத் தானாகவே குறைப்பதன் மூலம் {{ReplayGain}} காரணமாக ஏற்படும் கிளிப்பிங்கைத் தடுக்கவும்",
"replayGainFallback": "{{ReplayGain}} பின்னடைவு",
"replayGainFallback_description": "கோப்பில் {{ReplayGain}} குறிச்சொற்கள் இல்லையென்றால் விண்ணப்பிக்க DB இல் ஆதாயம்",
"replayGainMode": "{{ReplayGain}} பயன்முறை",
"replayGainMode_description": "{{ReplayGain}}} மதிப்புகளின் படி தொகுதி ஆதாயத்தை சரிசெய்யவும் மேனிலை தரவு கோப்பு",
"replayGainMode_optionAlbum": "$ t (entity.album_one)",
"replayGainMode_optionNone": "$ t (common.none)",
"replayGainMode_optionTrack": "$ t (entity.track_one)",
"replayGainMode_optionAlbum": "$t(entity.album_one)",
"replayGainMode_optionNone": "$t(common.none)",
"replayGainMode_optionTrack": "$t(entity.track_one)",
"replayGainPreamp": "{{ReplayGain}} preamp (db)",
"replayGainPreamp_description": "{{ReplayGain}}} மதிப்புகளுக்கு பயன்படுத்தப்படும் Preamp ஆதாயத்தை சரிசெய்யவும்",
"sampleRate": "மாதிரி வீதம்",
@@ -615,7 +625,7 @@
"discordIdleStatus_description": "இயக்கப்பட்டால், பிளேயர் சும்மா இருக்கும்போது நிலையைப் புதுப்பிக்கவும்",
"discordListening_description": "விளையாடுவதற்குப் பதிலாக கேட்பது என்று அந்த நிலையைக் காட்டுங்கள்",
"discordRichPresence": "{{discord}} பணக்கார இருப்பு",
"discordRichPresence_description": "{{discord}} பணக்கார இருப்பில் பின்னணி நிலையை இயக்கவும். பட விசைகள்: {{icon}}, {{playing}}, மற்றும் {{paused}} ",
"discordRichPresence_description": "{{discord}} பணக்கார இருப்பில் பின்னணி நிலையை இயக்கவும். பட விசைகள்: {{icon}}, {{playing}}, மற்றும் {{paused}}",
"customCss_description": "தனிப்பயன் சிஎச்எச் உள்ளடக்கம். குறிப்பு: உள்ளடக்கம் மற்றும் தொலைநிலை முகவரி கள் அனுமதிக்கப்படாத பண்புகள். உங்கள் உள்ளடக்கத்தின் முன்னோட்டம் கீழே காட்டப்பட்டுள்ளது. நீங்கள் அமைக்காத கூடுதல் புலங்கள் சுத்திகரிப்பு காரணமாக உள்ளன.",
"doubleClickBehavior": "இரட்டை சொடுக்கு செய்யும் போது தேடப்பட்ட அனைத்து தடங்களையும் வரிசைப்படுத்தவும்",
"doubleClickBehavior_description": "உண்மை என்றால், தட தேடலில் பொருந்தக்கூடிய அனைத்து தடங்களும் வரிசையில் நிற்கப்படும். இல்லையெனில், சொடுக்கு செய்யப்பட்ட ஒன்று மட்டுமே வரிசையில் நிற்கப்படும்",
@@ -631,7 +641,7 @@
"homeFeature_description": "முகப்பு பக்கத்தில் பெரிய பிரத்யேக கொணர்வி காட்ட வேண்டுமா என்பதைக் கட்டுப்படுத்துகிறது",
"hotkey_browserBack": "உலாவி மீண்டும்",
"hotkey_browserForward": "முன்னோக்கி உலாவி",
"hotkey_favoritePreviousSong": "பிடித்த $ t (காமன்.பிரெவியச்ங்)",
"hotkey_favoritePreviousSong": "பிடித்த $t(common.previousSong)",
"hotkey_localSearch": "பக்க தேடல்",
"hotkey_playbackNext": "அடுத்த பாடல்",
"hotkey_playbackPause": "இடைநிறுத்தம்",
@@ -646,10 +656,10 @@
"lyricFetchProvider": "பாடல் பெற வழங்குநர்கள்",
"lyricOffset_description": "குறிப்பிட்ட அளவு மில்லி விநாடிகளால் பாடலை ஈடுசெய்யவும்",
"hotkey_skipForward": "முன்னோக்கி செல்லுங்கள்",
"hotkey_toggleCurrentSongFavorite": "மாற்று $ t (common.curressong) பிடித்தது",
"hotkey_toggleCurrentSongFavorite": "மாற்று $t(common.currentSong) பிடித்தது",
"minimizeToTray_description": "கணினி தட்டில் பயன்பாட்டைக் குறைக்கவும்",
"playButtonBehavior_optionPlay": "$ t (player.play)",
"playButtonBehavior_optionPlayShuffled": "$ t (player.shuffle)",
"playButtonBehavior_optionPlay": "$t(player.play)",
"playButtonBehavior_optionPlayShuffled": "$t(player.shuffle)",
"savePlayQueue": "விளையாட்டு வரிசையை சேமிக்கவும்",
"savePlayQueue_description": "பயன்பாடு மூடப்படும் போது ப்ளே வரிசையை சேமித்து, பயன்பாடு திறக்கப்படும் போது அதை மீட்டெடுக்கவும்",
"scrobble": "ச்க்ரோபில்",
@@ -687,79 +697,97 @@
"useSystemTheme": "கணினி கருப்பொருளைப் பயன்படுத்தவும்",
"useSystemTheme_description": "கணினி வரையறுக்கப்பட்ட ஒளி அல்லது இருண்ட விருப்பத்தைப் பின்பற்றவும்",
"zoom": "சூம் விழுக்காடு",
"zoom_description": "பயன்பாட்டிற்கான சூம் சதவீதத்தை அமைக்கிறது"
"zoom_description": "பயன்பாட்டிற்கான சூம் சதவீதத்தை அமைக்கிறது",
"discordPausedStatus": "இடைநிறுத்தப்படும்போது பணக்கார இருப்பைக் காட்டுங்கள்",
"discordPausedStatus_description": "இயக்கப்பட்டால், பிளேயர் இடைநிறுத்தப்படும்போது நிலை காண்பிக்கப்படும்",
"discordServeImage": "சேவையகத்திலிருந்து {{discord}} படங்களை பரிமாறவும்",
"discordServeImage_description": "{{discord}} சேவையகத்திலிருந்தே பணக்கார இருப்புக்கான கவர் கலையைப் பகிரவும், செலிஃபின் மற்றும் நுடிட்ரோம் மட்டுமே கிடைக்கும்",
"preferLocalLyrics": "உள்ளக பாடல்களை விரும்புங்கள்",
"preferLocalLyrics_description": "கிடைக்கும்போது தொலைநிலை பாடல்களை விட உள்ளக பாடல்களை விரும்புங்கள்",
"lastfm": "last.fm இணைப்புகளைக் காட்டு",
"lastfm_description": "கலைஞர்/ஆல்பம் பக்கங்களில் Last.fm க்கான இணைப்புகளைக் காட்டு",
"notify": "பாடல் அறிவிப்புகளை இயக்கவும்",
"notify_description": "தற்போதைய பாடலை மாற்றும்போது அறிவிப்புகளைக் காட்டு",
"musicbrainz": "மியூசிக் பிரேன்ச் இணைப்புகளைக் காட்டு",
"musicbrainz_description": "கலைஞர்/ஆல்பம் பக்கங்களில் மியூசிக் பிரைன்ச் இணைப்புகளைக் காட்டு, அங்கு MBID உள்ளது",
"neteaseTranslation": "நெட்ச் மொழிபெயர்ப்புகளை இயக்கவும்",
"neteaseTranslation_description": "இயக்கப்பட்டால், கிடைத்தால் நெட்சிலிருந்து மொழிபெயர்க்கப்பட்ட பாடல்களைப் பெறுகிறது மற்றும் காட்சிப்படுத்துகிறது.",
"preservePitch": "சுருதியைப் பாதுகாக்கவும்",
"preservePitch_description": "பின்னணி வேகத்தை மாற்றும்போது சுருதியைப் பாதுகாக்கிறது"
},
"table": {
"config": {
"label": {
"album": "$ t (entity.album_one)",
"artist": "$ t (entity.artist_one)",
"biography": "$ t (காமன். -புவியியல்)",
"bitrate": "$ t (common.bitrate)",
"bpm": "$ t (common.bpm)",
"channels": "$ t (common.channel_other)",
"codec": "$ t (common.codec)",
"album": "$t(entity.album_one)",
"artist": "$t(entity.artist_one)",
"biography": "$t(common.biography)",
"bitrate": "$t(common.bitrate)",
"bpm": "$t(common.bpm)",
"channels": "$t(common.channel_other)",
"codec": "$t(common.codec)",
"dateAdded": "தேதி சேர்க்கப்பட்டது",
"rating": "$ t (பொதுவானது. ரேட்டிங்)",
"rating": "$t(common.rating)",
"releaseDate": "வெளியீட்டு தேதி",
"rowIndex": "வரிசை அட்டவணை",
"size": "$ t (common.size)",
"size": "$t(common.size)",
"trackNumber": "ட்ராக் எண்",
"year": "$ t (பொதுவானது.",
"year": "$t(common.year)",
"lastPlayed": "கடைசியாக விளையாடியது",
"note": "$ t (பொதுவானது. குறிப்பு)",
"owner": "$ t (பொதுவானவர்)",
"actions": "$ t (common.action_other)",
"albumArtist": "$ t (entity.albumartist_one)",
"note": "$t(common.note)",
"owner": "$t(common.owner)",
"actions": "$t(common.action_other)",
"albumArtist": "$t(entity.albumArtist_one)",
"discNumber": "வட்டு எண்",
"duration": "$ t (பொதுவானது.",
"favorite": "$ t (common.foavorite)",
"genre": "$ t (entity.genre_one)",
"path": "$ t (common.path)",
"duration": "$t(common.duration)",
"favorite": "$t(common.favorite)",
"genre": "$t(entity.genre_one)",
"path": "$t(common.path)",
"playCount": "விளையாட்டு எண்ணிக்கை",
"songCount": "$ t (entity.track_other)",
"title": "$ t (common.title)",
"titleCombined": "$ t (common.title) (ஒருங்கிணைந்த)"
"songCount": "$t(entity.track_other)",
"title": "$t(common.title)",
"titleCombined": "$t(common.title) (ணைந்தது)"
},
"view": {
"card": "அட்டை",
"table": "அட்டவணை",
"poster": "சுவரொட்டி"
"poster": "சுவரொட்டி",
"grid": "வலைவாய்",
"list": "பட்டியல்"
},
"general": {
"autoFitColumns": "ஆட்டோ பொருத்தம் நெடுவரிசைகள்",
"followCurrentSong": "தற்போதைய பாடலைப் பின்தொடரவும்",
"displayType": "காட்சி வகை",
"gap": "$ t (comman.gap)",
"gap": "$t(common.gap)",
"itemGap": "உருப்படி இடைவெளி (பிஎக்ச்)",
"itemSize": "உருப்படி அளவு (பிஎக்ச்)",
"size": "$ t (common.size)",
"size": "$t(common.size)",
"tableColumns": "அட்டவணை நெடுவரிசைகள்"
}
},
"column": {
"album": "ஆல்பம்",
"albumArtist": "ஆல்பம் கலைஞர்",
"albumCount": "$ t (entity.album_other)",
"artist": "$ t (entity.artist_one)",
"albumCount": "$t(entity.album_other)",
"artist": "$t(entity.artist_one)",
"biography": "சுயசரிதை",
"bitrate": "பிட்ரேட்",
"bpm": "பிபிஎம்",
"channels": "$ t (common.channel_other)",
"codec": "$ t (common.codec)",
"channels": "$t(common.channel_other)",
"codec": "$t(common.codec)",
"comment": "கருத்து",
"dateAdded": "தேதி சேர்க்கப்பட்டது",
"discNumber": "வட்டு",
"favorite": "பிடித்த",
"genre": "$ t (entity.genre_one)",
"genre": "$t(entity.genre_one)",
"lastPlayed": "கடைசியாக விளையாடியது",
"path": "பாதை",
"playCount": "நாடகங்கள்",
"rating": "செயல்வரம்பு",
"releaseDate": "வெளியீட்டு தேதி",
"releaseYear": "ஆண்டு",
"size": "$ t (common.size)",
"songCount": "$ t (entity.track_other)",
"size": "$t(common.size)",
"songCount": "$t(entity.track_other)",
"title": "தலைப்பு",
"trackNumber": "மின்தடம்"
}
+811
View File
@@ -0,0 +1,811 @@
{
"action": {
"moveToBottom": "alttakine geç",
"moveToTop": "başa dön",
"removeFromFavorites": "$t(entity.favorite_other)lerden kaldır",
"removeFromPlaylist": "$t(entity.playlist_one) listesinden kaldır",
"removeFromQueue": "sıradan kaldır",
"setRating": "oyla",
"viewPlaylists": "$t(entity.playlist_other) listesini görüntüle",
"openIn": {
"lastfm": "Last.fm'de aç",
"musicbrainz": "MusicBrainz'da aç"
},
"addToFavorites": "$t(entity.favorite_other) listesine ekle",
"addToPlaylist": "$t(entity.playlist_one) listesine ekle",
"clearQueue": "sırayı temizle",
"createPlaylist": "$t(entity.playlist_one) listesini oluştur",
"deletePlaylist": "$t(entity.playlist_one) listesini sil",
"deselectAll": "seçimleri kaldır",
"editPlaylist": "$t(entity.playlist_one) listesini düzenle",
"goToPage": "sayfaya git",
"moveToNext": "sonrakine geç",
"refresh": "$t(common.refresh)",
"toggleSmartPlaylistEditor": "$t(entity.smartPlaylist) düzenleyiciye geç"
},
"common": {
"action_one": "eylem",
"action_other": "eylemler",
"add": "ekle",
"additionalParticipants": "ek katılımcılar",
"newVersion": "yeni bir sürüm ({{version}}) yüklendi",
"viewReleaseNotes": "sürüm notlarını görüntüle",
"areYouSure": "emin misin?",
"backward": "geri",
"biography": "biyografi",
"bitDepth": "bit derinliği",
"bitrate": "bit hızı",
"bpm": "bpm",
"cancel": "iptal et",
"center": "merkez",
"channel_one": "kanal",
"channel_other": "kanallar",
"clear": "temizle",
"close": "kapat",
"codec": "codec",
"comingSoon": "çok yakında…",
"configure": "yapılandır",
"confirm": "onayla",
"create": "oluştur",
"currentSong": "şu anki parça $t(entity.track_one)",
"decrease": "azalt",
"delete": "sil",
"descending": "azalan",
"description": "açıklama",
"disable": "devre dışı",
"disc": "disk",
"duration": "süre",
"edit": "düzenle",
"enable": "etkinleştir",
"expand": "genişlet",
"favorite": "favori",
"filter_one": "filtre",
"filter_other": "filtreler",
"filters": "filtreler",
"forceRestartRequired": "değişiklikleri uygulamak için yeniden başlatın... yeniden başlatmak için bildirimi kapatın",
"forward": "ileri",
"gap": "boşluk",
"home": "ana sayfa",
"left": "sol",
"manage": "yönet",
"increase": "arttır",
"limit": "sınır",
"maximize": "ekranı kapla",
"menu": "menü",
"minimize": "simge durumuna küçült",
"modified": "değiştirilmiş",
"mbid": "MusicBrainz ID",
"name": "isim",
"no": "hayır",
"none": "hiçbiri",
"noResultsFromQuery": "arama sorguları için sonuç bulunamadı",
"note": "not",
"ok": "tamam",
"owner": "sahip",
"path": "yol",
"playerMustBePaused": "oynatıcı duraklatılmalı",
"preview": "önizleme",
"previousSong": "önceki $t(entity.track_one)",
"quit": "çık",
"random": "rastgele",
"rating": "oylama",
"refresh": "yenile",
"reload": "yeniden yükle",
"reset": "sıfırla",
"resetToDefault": "varsayılana sıfırla",
"restartRequired": "yeniden başlatma gerekli",
"right": "sağ",
"sampleRate": "örnekleme hızı",
"save": "kaydet",
"saveAndReplace": "kaydet ve değiştir",
"saveAs": "farklı kaydet",
"search": "arama",
"setting": "ayarlar",
"share": "paylaş",
"size": "boyut",
"sortOrder": "sıralama düzeni",
"tags": "etiketler",
"title": "başlık",
"trackNumber": "parça",
"albumGain": "albüm kazancı",
"albumPeak": "albüm zirvesi",
"ascending": "artan",
"collapse": "daralt",
"dismiss": "kapat",
"translation": "çeviri",
"unknown": "bilinmeyen",
"version": "sürüm",
"year": "yıl",
"yes": "evet",
"trackGain": "parça kazancı",
"trackPeak": "parça zirvesi"
},
"entity": {
"album_one": "albüm",
"album_other": "albümler",
"albumArtist_one": "albüm sanatçısı",
"albumArtist_other": "albüm sanatçıları",
"albumArtistCount_one": "{{count}} albüm sanatçısı",
"albumArtistCount_other": "{{count}} albüm sanatçıları",
"albumWithCount_one": "{{count}} albüm",
"albumWithCount_other": "{{count}} albüm",
"artist_one": "sanatçı",
"artist_other": "sanatçılar",
"artistWithCount_one": "{{count}} sanatçı",
"artistWithCount_other": "{{count}} sanatçı",
"favorite_one": "favori",
"favorite_other": "favoriler",
"folder_one": "klasör",
"folder_other": "klasörler",
"folderWithCount_one": "{{count}} klasör",
"folderWithCount_other": "{{count}} klasör",
"genre_one": "tür",
"genre_other": "türler",
"genreWithCount_one": "{{count}} tür",
"genreWithCount_other": "{{count}} türler",
"playlist_one": "çalma listesi",
"playlist_other": "çalma listeleri",
"play_one": "{{count}} oynat",
"play_other": "{{count}} oynatma",
"playlistWithCount_one": "{{count}} oynatma listesi",
"playlistWithCount_other": "{{count}} oynatma listesi",
"smartPlaylist": "akıllı $t(entity.playlist_one)",
"track_one": "parça",
"track_other": "parçalar",
"song_one": "şarkı",
"song_other": "şarkılar",
"trackWithCount_one": "{{count}} parça",
"trackWithCount_other": "{{count}} parça"
},
"error": {
"apiRouteError": "istek yönlendirilemiyor",
"audioDeviceFetchError": "ses aygıtları alınmaya çalışılırken bir hata oluştu",
"authenticationFailed": "kimlik doğrulaması başarısız",
"badAlbum": "bu sayfayı görüyorsunuz çünkü bu şarkı bir albümün parçası değil. büyük olasılıkla müzik klasörünüzün en üst seviyesinde bir şarkınız varsa bu sorunu görüyorsunuz. jellyfin yalnızca bir klasör içindeyse parçaları gruplandırır.",
"badValue": "geçersiz seçenek \"{{value}}\". bu değer artık mevcut değil",
"remotePortError": "uzak sunucu bağlantı noktası ayarlanmaya çalışılırken bir hata oluştu",
"remotePortWarning": "yeni bağlantı noktasını uygulamak için sunucuyu yeniden başlatın",
"serverNotSelectedError": "sunucu seçili değil",
"serverRequired": "sunucu gerekli",
"sessionExpiredError": "oturumunuzun süresi doldu",
"systemFontError": "sistem fontlarını almaya çalışırken bir hata oluştu",
"endpointNotImplementedError": "{{endpoint}} uç noktası bu {{serverType}} için uygulanamaz",
"genericError": "bir hata oluştu",
"invalidServer": "geçersiz sunucu",
"localFontAccessDenied": "yerel fontlara erişim reddedildi",
"loginRateError": "çok fazla giriş denemesi, lütfen birkaç saniye içinde tekrar deneyin",
"mpvRequired": "MPV gerekli",
"networkError": "bir ağ hatası meydana geldi",
"notificationDenied": "bildirimler için izinler reddedildi. bu ayarın hiçbir etkisi yoktur",
"openError": "dosya açılamadı",
"playbackError": "medya oynatmayı çalışırken bir hata meydana geldi",
"credentialsRequired": "ki̇mli̇k bi̇lgi̇leri̇ gerekli",
"remoteDisableError": "uzak sunucuyu $t(common.disable) yapmaya çalışırken bir hata oluştu",
"remoteEnableError": "uzak sunucuyu $t(common.enable) yapmaya çalışırken bir hata oluştu"
},
"filter": {
"albumCount": "$t(entity.album_other) sayısı",
"biography": "biyografi",
"bitrate": "bit hızı",
"bpm": "bpm",
"comment": "yorum",
"communityRating": "topluluk derecelendirmesi",
"criticRating": "eleştirmen derecelendirmesi",
"dateAdded": "tarih eklendi",
"disc": "disk",
"duration": "süre",
"favorited": "favorilendi",
"fromYear": "yılından itibaren",
"id": "kimlik",
"isCompilation": "derleme",
"isFavorited": "favorilendi",
"isPublic": "herkese açık",
"isRated": "oylandı",
"isRecentlyPlayed": "yakın zamanda çalındı",
"lastPlayed": "son çalınan",
"mostPlayed": "en çok çalınan",
"name": "isim",
"note": "not",
"owner": "$t(common.owner)",
"path": "yol",
"playCount": "çalma sayısı",
"random": "rastgele",
"rating": "oylama",
"recentlyAdded": "yakın zamanda eklendi",
"recentlyPlayed": "yakın zamanda oynadı",
"recentlyUpdated": "yakın zamanda güncellendi",
"releaseDate": "çıkış tarihi",
"releaseYear": "çıkış yılı",
"search": "arama",
"songCount": "şarkı sayısı",
"title": "başlık",
"toYear": "yılına kadar",
"trackNumber": "parça",
"genre": "$t(entity.genre_one)",
"album": "$t(entity.album_one)",
"albumArtist": "$t(entity.albumArtist_one)",
"artist": "$t(entity.artist_one)",
"channels": "$t(common.channel_other)"
},
"form": {
"addServer": {
"error_savePassword": "şifreyi kaydetmeye çalışırken bir hata oluştu",
"ignoreCors": "cors'u $t(common.restartRequired) görmezden gel",
"ignoreSsl": "ssl bağlantısını görmezden gel $t(common.restartRequired)",
"input_legacyAuthentication": "eski kimlik doğrulamayı etkinleştir",
"input_name": "sucunu ismi",
"input_password": "şifre",
"input_savePassword": "şifreyi kaydet",
"input_url": "URL",
"input_username": "kullanıcı ismi",
"success": "sunucu başarıyla eklendi",
"title": "sunucu ekle"
},
"addToPlaylist": {
"input_playlists": "$t(entity.playlist_other)",
"input_skipDuplicates": "kopyaları atla",
"title": "$t(entity.playlist_one) listesine ekle",
"success": "$t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} }) $t(entity.trackWithCount, {\"count\": {{message}} }) eklendi"
},
"createPlaylist": {
"input_description": "$t(common.description)",
"input_name": "$t(common.name)",
"input_owner": "$t(common.owner)",
"input_public": "herkese açık",
"success": "$t(entity.playlist_one) listesi başarıyla oluşturuldu",
"title": "$t(entity.playlist_one) listesini oluştur"
},
"deletePlaylist": {
"input_confirm": "onaylamak için $t(entity.playlist_one) listesinin adını yazın",
"success": "$t(entity.playlist_one) listesi başarıyla silindi",
"title": "$t(entity.playlist_one) listesini sil"
},
"editPlaylist": {
"publicJellyfinNote": "Jellyfin bazı nedenlerden dolayı bir çalma listesinin herkese açık olup olmadığını göstermez. Bunun herkese açık kalmasını istiyorsanız, lütfen aşağıdaki girdiyi seçin",
"success": "$t(entity.playlist_one) listesi başarıyla güncellendi",
"title": "$t(entity.playlist_one) listesini düzenle"
},
"lyricSearch": {
"input_artist": "$t(entity.artist_one)",
"input_name": "$t(common.name)",
"title": "şarkı sözü arama"
},
"queryEditor": {
"title": "sorgu düzenleyici",
"input_optionMatchAll": "hepsini eşleştir",
"input_optionMatchAny": "herhangi biriyle eşleştir"
},
"shareItem": {
"allowDownloading": "indirmeye izin ver",
"description": "açıklama",
"setExpiration": "sona erme tarihi ayarla",
"success": "paylaşma bağlantısı panoya kopyalandı (veya açmak için buraya tıklayın)",
"expireInvalid": "son kullanma tarihi gelecekte olmalı",
"createFailed": "paylaşım oluşturulamadı (paylaşım etkin mi?)"
},
"updateServer": {
"success": "sunucu başarıyla güncellendi",
"title": "sunucuyu güncelle"
},
"privateMode": {
"enabled": "gizli mod etkinleştirildi, oynatma durumu artık harici eklentilerden gizlendi",
"disabled": "gizli mod devre dışı bırakıldı, oynatma durumu artık etkinleştirilmiş harici eklentiler tarafından görülebilir",
"title": "gizli mod"
}
},
"page": {
"albumArtistDetail": {
"about": "{{artist}} hakkında",
"appearsOn": "üzerinde görünür",
"recentReleases": "son sürümler",
"viewDiscography": "diskografiyi görüntüle",
"relatedArtists": "$t(entity.artist_other) ile benzer",
"topSongs": "en iyi şarkılar",
"viewAll": "tümünü görüntüle",
"viewAllTracks": "tüm $t(entity.track_other) görüntüle",
"topSongsFrom": "{{title}} tarafından en iyi şarkılar"
},
"contextMenu": {
"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)",
"download": "indir",
"moveToNext": "$t(action.moveToNext)",
"moveToBottom": "$t(action.moveToBottom)",
"moveToTop": "$t(action.moveToTop)",
"numberSelected": "{{count}} seçildi",
"play": "$t(player.play)",
"playSimilarSongs": "$t(player.playSimilarSongs)",
"removeFromFavorites": "$t(action.removeFromFavorites)",
"removeFromPlaylist": "$t(action.removeFromPlaylist)",
"removeFromQueue": "$t(action.removeFromQueue)",
"setRating": "$t(action.setRating)",
"addFavorite": "$t(action.addToFavorites)",
"playShuffled": "$t(player.shuffle)",
"shareItem": "öğeyi paylaş",
"showDetails": "bilgi al",
"goToAlbum": "$t(entity.album_one) sayfasına git",
"goToAlbumArtist": "$t(entity.albumArtist_one) sayfasına git"
},
"manageServers": {
"url": "URL",
"username": "kullanıcıadı",
"editServerDetailsTooltip": "sunucu ayrıntılarını düzenle",
"removeServer": "sunucuyu kaldır",
"title": "sunucuları yönet",
"serverDetails": "sunucu detayları"
},
"fullscreenPlayer": {
"config": {
"dynamicBackground": "dinamik arka plan",
"dynamicImageBlur": "görüntü bulanıklık boyutu",
"dynamicIsImage": "arka plan resmini etkinleştir",
"followCurrentLyric": "şu anki şarkı sözlerini takip et",
"lyricAlignment": "şarkı sözü hizalama",
"lyricOffset": "şarkı sözü ofseti (ms)",
"lyricGap": "şarkı sözü boşluğu",
"lyricSize": "şarkı sözü boyutu",
"opacity": "opaklık",
"showLyricMatch": "şarkı sözü eşleşmesini göster",
"showLyricProvider": "şarkı sözü sağlayıcısını göster",
"synchronized": "eşitlenmiş",
"unsynchronized": "eşitlenmemiş",
"useImageAspectRatio": "görüntü en boy oranını kullanın"
},
"lyrics": "şarkı sözleri",
"related": "i̇lgili",
"upNext": "sıradaki",
"visualizer": "görselleştirici",
"noLyrics": "şarkı sözü bulunamadı"
},
"genreList": {
"showAlbums": "$t(entity.genre_one) $t(entity.album_other) göster",
"showTracks": "$t(entity.genre_one)$t(entity.track_other) göster",
"title": "$t(entity.genre_other)"
},
"globalSearch": {
"commands": {
"goToPage": "sayfaya git",
"searchFor": "{{query}} için ara",
"serverCommands": "sunucu komutları"
},
"title": "komutlar"
},
"home": {
"explore": "kütüphanenizden keşfedin",
"mostPlayed": "en çok çalınan",
"newlyAdded": "yeni eklenenler",
"recentlyPlayed": "yakınlarda çalınanlar",
"title": "$t(common.home)"
},
"itemDetail": {
"copyPath": "yolu panoya kopyala",
"copiedPath": "yol başarıyla kopyalandı",
"openFile": "dosya yöneticisinde parçayı göster"
},
"playlist": {
"reorder": "yeniden sıralama yalnızca kimliğe göre sıralama yapıldığında etkinleştirilir"
},
"playlistList": {
"title": "$t(entity.playlist_other)"
},
"setting": {
"advanced": "gelişmiş",
"generalTab": "genel",
"hotkeysTab": "kısayol tuşları",
"playbackTab": "oynatma",
"windowTab": "pencere"
},
"sidebar": {
"albumArtists": "$t(entity.albumArtist_other)",
"albums": "$t(entity.album_other)",
"artists": "$t(entity.artist_other)",
"folders": "$t(entity.folder_other)",
"genres": "$t(entity.genre_other)",
"home": "$t(common.home)",
"myLibrary": "kütüphanem",
"nowPlaying": "şimdi oynatılıyor",
"playlists": "$t(entity.playlist_other)",
"search": "$t(common.search)",
"settings": "$t(common.setting_other)",
"shared": "paylaşılan $t(entity.playlist_other)",
"tracks": "$t(entity.track_other)"
},
"trackList": {
"artistTracks": "{{artist}} parçaları",
"genreTracks": "\"{{genre}}\" $t(entity.track_other)",
"title": "$t(entity.track_other)"
},
"albumArtistList": {
"title": "$t(entity.albumArtist_other)"
},
"albumDetail": {
"moreFromArtist": "$t(entity.artist_one) sanatçısından daha fazla",
"moreFromGeneric": "{{item}} tarafından daha fazla",
"released": "yayınlandı"
},
"albumList": {
"title": "$t(entity.album_other)",
"genreAlbums": "\"{{genre}}\" $t(entity.album_other)",
"artistAlbums": "{{artist}} albümleri"
},
"appMenu": {
"collapseSidebar": "kenar çubuğunu daralt",
"expandSidebar": "kenar çubuğunu genişlet",
"goBack": "geri dön",
"goForward": "i̇leriye git",
"manageServers": "sunucuları yönet",
"openBrowserDevtools": "tarayıcı geliştirici araçlarını aç",
"quit": "$t(common.quit)",
"selectServer": "sunucu seç",
"settings": "$t(common.setting_other)",
"version": "{{version}} sürümü",
"privateModeOff": "gizli modu kapat",
"privateModeOn": "gizli modu aç"
}
},
"player": {
"addLast": "sona ekle",
"addNext": "sonrakine ekle",
"favorite": "favori",
"mute": "sessiz",
"muted": "sessiz",
"next": "sonraki",
"play": "çal",
"playbackFetchCancel": "bu biraz zaman alıyor... iptal etmek için bildirimi kapatın",
"playbackFetchInProgress": "şarkılar yükleniyor…",
"playbackFetchNoResults": "hiçbir şarkı bulunamadı",
"playbackSpeed": "oynatma hızı",
"playRandom": "rastgele çal",
"playSimilarSongs": "benzer şarkılar çal",
"previous": "önceki",
"queue_clear": "sırayı temizle",
"queue_moveToBottom": "seçileni üste taşı",
"queue_moveToTop": "seçileni alta taşı",
"queue_remove": "seçileni kaldır",
"repeat": "birini tekrarla",
"repeat_all": "tümünü tekrarla",
"repeat_off": "tekrarlama devre dışı",
"shuffle": "karışık çal",
"shuffle_off": "karışık çalmayı devre dışı bırak",
"skip": "atla",
"skip_back": "geriye atla",
"skip_forward": "ileri atla",
"stop": "durdur",
"toggleFullscreenPlayer": "tam ekran oynatıcıya geç",
"unfavorite": "favoriden kaldır",
"pause": "durdur",
"viewQueue": "kuyruğu görüntüle"
},
"setting": {
"accentColor": "vurgu rengi",
"accentColor_description": "uygulama için vurgu rengini ayarlar",
"albumBackground": "albüm arka plan resmi",
"albumBackground_description": "albüm resmini içeren albüm sayfaları için bir arka plan resmi ekler",
"albumBackgroundBlur": "albüm arka plan resmi bulanıklaştırma boyutu",
"albumBackgroundBlur_description": "albüm arka plan görüntüsüne uygulanan bulanıklık miktarını ayarlar",
"applicationHotkeys": "uygulama kısayol tuşları",
"applicationHotkeys_description": "uygulama kısayol tuşlarını yapılandırın. genel kısayol tuşu olarak ayarlamak için onay kutusunu değiştirin (yalnızca masaüstü)",
"artistConfiguration": "albüm sanatçı sayfası yapılandırması",
"artistConfiguration_description": "albüm sanatçısı sayfasında hangi öğelerin ve hangi sırayla gösterileceğini yapılandır",
"audioDevice": "ses aygıtı",
"audioDevice_description": "oynatma için kullanılacak ses cihazını seçin (yalnızca web oynatıcı)",
"audioExclusiveMode": "ses özel modu",
"audioExclusiveMode_description": "özel çıkış modunu etkinleştirin. Bu modda, sistem genellikle kilitlenir ve yalnızca mpv ses çıkışı yapabilir",
"audioPlayer": "ses oynatıcı",
"audioPlayer_description": "oynatma için kullanılacak ses oynatıcısını seçin",
"buttonSize": "oynatma çubuğu düğme boyutu",
"buttonSize_description": "oynatma çubuğu düğmelerinin boyutu",
"clearCache": "tarayıcı önbelleğini temizle",
"clearCache_description": "feishin'in 'zor temizliği'. feishin'in önbelleğini temizlemeye ek olarak, tarayıcı önbelleğini de boşaltın (kayıtlı resimler ve diğer varlıklar). sunucu kimlik bilgileri ve ayarları korunur",
"clearQueryCache": "feishin önbelleğini temizle",
"clearQueryCache_description": "feishin'in 'yumuşak temizliği'. bu işlem çalma listelerini, parça meta verilerini yeniler ve kayıtlı şarkı sözlerini sıfırlar. ayarlar, sunucu kimlik bilgileri ve önbelleğe alınmış görüntüler korunur",
"clearCacheSuccess": "önbellek başarıyla temizlendi",
"contextMenu": "içerik menüsü (sağ tıklama) yapılandırması",
"contextMenu_description": "bir öğeye sağ tıkladığınızda menüde gösterilen öğeleri gizlemenizi sağlar. işaretli olmayan öğeler gizlenecektir",
"crossfadeDuration": "çapraz geçiş süresi",
"crossfadeDuration_description": "çapraz geçiş efektinin süresini ayarlar",
"crossfadeStyle": "çapraz geçiş stili",
"crossfadeStyle_description": "ses oynatıcı için kullanılacak çapraz geçiş stilini seçin",
"customCssEnable": "özel css etkinleştir",
"customCssEnable_description": "özel css yazmaya izin verir.",
"customCssNotice": "Uyarı: bazı sterillemeler (url() ve içeriğe izin verilmemesi) olsa da, özel CSS kullanmak arayüzü değiştirmede hala risk oluşturabilir.",
"customCss": "özel css",
"customCss_description": "özel css içeriği. Not: içerik ve uzaktan URL'ler izin verilmeyen özelliklerdir. İçeriğinizin önizlemesi aşağıda gösterilmektedir. Ayarlamadığınız ek alanlar sterilleme nedeniyle mevcuttur.",
"customFontPath": "özel yazı tipi yolu",
"customFontPath_description": "uygulama için kullanılacak özel yazı tipinin yolunu ayarlar",
"disableAutomaticUpdates": "otomatik güncellemeleri devre dışı bırak",
"disableLibraryUpdateOnStartup": "başlangıçta yeni sürümler için denetimi devre dışı bırak",
"discordApplicationId": "{{discord}} uygulama kimliği",
"discordApplicationId_description": "{{discord}} \"Rich Presence\" için uygulama kimliği (varsayılan olarak {{defaultId}})",
"discordPausedStatus": "duraklatıldığında \"Rich Presence\"da göster",
"discordPausedStatus_description": "etkinleştirildiğinde, oynatıcı duraklatıldığında durum gösterilir",
"discordIdleStatus": "\"Rich presence\" boşta durumunu göster",
"discordIdleStatus_description": "etkinleştirildiğinde, oynatıcı boştayken durumu günceller",
"discordListening": "durumu dinleme olarak göster",
"discordListening_description": "durumu çalma yerine dinleme olarak göster",
"discordRichPresence": "{{discord}} Rich Presence",
"discordRichPresence_description": "{{discord}} \"Rich Presence\" oynatma durumunu etkinleştirin. Görüntü tuşları şunlardır: {{icon}}, {{playing}} ve {{paused}}",
"discordServeImage": "sunucudan {{discord}} resimleri servis et",
"discordServeImage_description": "sunucudan {{discord}} Rich Presence için kapak resmi paylaşın, yalnızca jellyfin ve navidrome için kullanılabilir",
"discordUpdateInterval": "{{discord}} Rich Presence güncelleme aralığı",
"discordUpdateInterval_description": "her güncelleme arasındaki saniye cinsinden süre (minimum 15 saniye)",
"doubleClickBehavior": "çift tıklandığında aranan tüm parçaları sıraya koyma",
"gaplessAudio": "aralıksız ses",
"gaplessAudio_description": "mpv için aralıksız ses ayarını belirler",
"gaplessAudio_optionWeak": "zayıf (tavsiye edilen)",
"genreBehavior": "tür sayfası varsayılan davranışı",
"genreBehavior_description": "bir türe tıklandığında varsayılan olarak parça mı yoksa albüm listesinde mi açılacağını belirler",
"globalMediaHotkeys": "evrensel medya kısayol tuşları",
"globalMediaHotkeys_description": "oynatmayı kontrol etmek için sistem medya kısayol tuşlarınızın kullanımını etkinleştirin veya devre dışı bırakın",
"homeConfiguration": "ana sayfa yapılandırma",
"homeConfiguration_description": "ana sayfada hangi öğelerin ve hangi sırayla gösterileceğini yapılandır",
"homeFeature": "ana sayfa öne çıkan görselleri",
"homeFeature_description": "ana sayfada büyük özellikli görsellerin gösterilip gösterilmeyeceğini kontrol eder",
"hotkey_rate0": "derecelendirme temizle",
"hotkey_rate1": "derecelendirme 1 yıldız",
"hotkey_rate2": "derecelendirme 2 yıldız",
"hotkey_rate3": "derecelendirme 3 yıldız",
"hotkey_rate4": "derecelendirme 4 yıldız",
"hotkey_rate5": "derecelendirme 5 yıldız",
"hotkey_skipBackward": "geri atla",
"hotkey_skipForward": "ileri atla",
"hotkey_toggleCurrentSongFavorite": "$t(common.currentSong) beğenilenlere ekle",
"hotkey_toggleFullScreenPlayer": "tam ekran oynatıcı tuşu",
"hotkey_togglePreviousSongFavorite": "$t(common.previousSong) beğenilenlere ekle",
"hotkey_toggleQueue": "kuyruğu aç",
"hotkey_toggleRepeat": "tekrarlamayı aç",
"hotkey_toggleShuffle": "karıştırmayı değiştir",
"hotkey_unfavoriteCurrentSong": "$t(common.currentSong) beğenilerden kaldır",
"hotkey_unfavoritePreviousSong": "$t(common.previousSong) beğenilerden kaldır",
"hotkey_volumeDown": "ses kısma",
"hotkey_volumeMute": "sessize alma",
"hotkey_volumeUp": "sesi yükselt",
"hotkey_zoomIn": "yakınlaştır",
"hotkey_zoomOut": "uzaklaştır",
"imageAspectRatio": "doğal kapak resmi en boy oranını kullanın",
"imageAspectRatio_description": "etkinleştirilirse, kapak resmi kendi doğal en boy oranı kullanılarak gösterilecektir. 1:1 olmayan resimler için kalan alan boş olacaktır",
"language": "dil",
"language_description": "uygulama için dili ayarlar ($t(common.restartRequired))",
"lastfm": "last.fm bağlantılarını göster",
"lastfm_description": "sanatçı/albüm sayfalarında last.fm bağlantılarını göster",
"lastfmApiKey": "{{lastfm}} API anahtarı",
"lastfmApiKey_description": "{{lastfm}} için API anahtarı. kapak resmi için gereklidir",
"lyricFetch": "internetten şarkı sözü getirme",
"lyricFetch_description": "çeşitli internet kaynaklarından şarkı sözleri getirme",
"lyricFetchProvider": "şarkı sözlerini almak için sağlayıcılar",
"lyricFetchProvider_description": "şarkı sözlerinin getirileceği sağlayıcıları seçin. sağlayıcıların sırası, sorgulanacakları sıradır",
"lyricOffset": "şarkı sözü kaydırma (ms)",
"lyricOffset_description": "şarkı sözünü belirtilen milisaniye miktarı kadar kaydırır",
"notify": "şarkı bildirimlerini etkinleştir",
"notify_description": "geçerli şarkıyı değiştirirken bildirimleri göster",
"minimizeToTray": "tepsiye yerleştir",
"minimizeToTray_description": "uygulamayı sistem tepsisine küçültme",
"minimumScrobblePercentage": "minimum \"scrobble\" (dinleme sayımı) süresi (yüzde)",
"minimumScrobblePercentage_description": "'scrobble' yapılmadan önce çalınması gereken minimum şarkı yüzdesi",
"minimumScrobbleSeconds": "minimum 'scrobble' (saniye)",
"minimumScrobbleSeconds_description": "'scrobble' yapılmadan önce çalınması gereken şarkının saniye cinsinden minimum süresi",
"mpvExecutablePath": "mpv çalıştırma yolu",
"mpvExecutablePath_description": "mpv çalıştırma yolunu ayarlar. boş bırakılırsa, varsayılan yol kullanılır",
"mpvExtraParameters": "mpv parametreleri",
"mpvExtraParameters_help": "her satır için tek",
"musicbrainz": "musicbrainz bağlantılarını göster",
"musicbrainz_description": "mbid'in bulunduğu sanatçı/albüm sayfalarında musicbrainz bağlantılarını göster",
"neteaseTranslation": "NetEase çevirilerini etkinleştirin",
"neteaseTranslation_description": "etkinleştirildiğinde, varsa NetEase platformunda çevrilmiş şarkı sözlerini alır ve görüntüler.",
"passwordStore": "passwords/secret store",
"passwordStore_description": "hangi parola/gizli deponun kullanılacağıdır. parolaları saklama konusunda sorun yaşıyorsanız bunu değiştirin.",
"playbackStyle": "oynatma stili",
"playbackStyle_description": "ses oynatıcı için kullanılacak oynatma stilini seçin",
"playbackStyle_optionCrossFade": "çapraz geçiş",
"playbackStyle_optionNormal": "normal",
"playButtonBehavior": "oynat düğmesi davranışı",
"playButtonBehavior_description": "kuyruğa şarkı eklerken oynat düğmesinin varsayılan davranışını ayarlar",
"playButtonBehavior_optionAddLast": "$t(player.addLast)",
"playButtonBehavior_optionAddNext": "$t(player.addNext)",
"playButtonBehavior_optionPlay": "$t(player.play)",
"playButtonBehavior_optionPlayShuffled": "$t(player.shuffle)",
"playerAlbumArtResolution": "oynatıcı albüm resmi çözünürlüğü",
"playerAlbumArtResolution_description": "büyük oynatıcının albüm resmi önizlemesi için çözünürlük. daha büyük değerler daha net görünmesini sağlar, ancak yüklemeyi yavaşlatabilir. varsayılan değer 0, otomatik olarak çalışır",
"playerbarOpenDrawer": "oynatma çubuğu tam ekran geçişi",
"playerbarOpenDrawer_description": "tam ekran oynatıcıyı açmak için oynatma çubuğuna tıklamaya izin verir",
"remotePassword": "uzaktan kontrol sunucusu şifresi",
"remotePassword_description": "uzaktan kumanda sunucusu için parolayı ayarlar. Bu kimlik bilgileri varsayılan olarak güvensiz bir şekilde aktarılır, bu nedenle önemsemediğiniz benzersiz bir parola kullanmalısınız",
"remotePort": "uzaktan kontrol sunucusu bağlantı noktası",
"remotePort_description": "uzaktan kumanda sunucusu için bağlantı noktasını ayarlar",
"remoteUsername": "uzaktan kontrol sunucusu kullanıcı adı",
"remoteUsername_description": "uzaktan kontrol sunucusu için kullanıcı adını ayarlar. hem kullanıcı adı hem de parola boşsa, kimlik doğrulama devre dışı bırakılır",
"replayGainClipping": "{{ReplayGain}} kırpma",
"replayGainClipping_description": "Kazancı otomatik olarak düşürerek {{ReplayGain}}'in neden olduğu kırpılmayı önleyin",
"replayGainFallback": "{{ReplayGain}} geri dönüş",
"replayGainFallback_description": "dosyada {{ReplayGain}} etiketi yoksa db'e uygulanacak kazanç",
"replayGainMode": "{{ReplayGain}} modu",
"replayGainMode_description": "ses seviyesi kazancını dosya meta verilerinde saklanan {{ReplayGain}} değerlerine göre ayarlayın",
"replayGainMode_optionAlbum": "$t(entity.album_one)",
"replayGainMode_optionNone": "$t(common.none)",
"replayGainMode_optionTrack": "$t(entity.track_one)",
"replayGainPreamp": "{{ReplayGain}} preamp (dB)",
"replayGainPreamp_description": "{{ReplayGain}} değerlerine uygulanan preamp kazancını ayarlar",
"sampleRate": "örnekleme hızı",
"sampleRate_description": "seçilen örnekleme frekansı mevcut ortamınkinden farklıysa kullanılacak çıkış örnekleme oranını seçin. 8000'den küçük değerler için varsayılan frekans kullanacaktır",
"savePlayQueue": "oynatma kuyruğunu kaydet",
"savePlayQueue_description": "uygulama kapatıldığında oynatma kuyruğunu kaydedin ve uygulama açıldığında geri yükleyin",
"scrobble": "scrobble",
"scrobble_description": "scrobble medya sunucunuzda oynatılır",
"showSkipButton": "atlama düğmelerini göster",
"showSkipButton_description": "oynatıcı çubuğundaki atlama düğmelerini göster veya gizle",
"showSkipButtons": "atlama düğmelerini göster",
"showSkipButtons_description": "oynatıcı çubuğundaki atlama düğmelerini göster veya gizle",
"sidebarCollapsedNavigation": "kenar çubuğu (daraltılmış) navigasyon",
"sidebarCollapsedNavigation_description": "daraltılmış kenar çubuğunda gezinmeyi göster veya gizle",
"sidebarConfiguration": "kenar çubuğu yapılandırması",
"sidebarConfiguration_description": "öğeleri ve bunların kenar çubuğunda görünme sırasını seçme",
"sidebarPlaylistList": "kenar çubuğu çalma listesi",
"sidebarPlaylistList_description": "kenar çubuğunda çalma listesi listesini gösterme veya gizleme",
"sidePlayQueueStyle": "yan oynatma kuyruğu stili",
"sidePlayQueueStyle_description": "yan oynatma kuyruğunun stilini ayarlar",
"sidePlayQueueStyle_optionAttached": "ekli",
"sidePlayQueueStyle_optionDetached": "ayrılmış",
"skipDuration": "atlama süresi",
"skipDuration_description": "oynatıcı çubuğundaki atlama düğmeleri kullanılırken atlanacak süreyi ayarlar",
"translationApiKey_description": "çeviri için api anahtarı (Yalnızca global hizmet uç noktasını destekler)",
"translationTargetLanguage": "çeviri hedef dili",
"translationTargetLanguage_description": "çeviri için hedef dil",
"trayEnabled": "tepsiyi göster",
"trayEnabled_description": "tepsi simgesini/menüsünü göster/gizle. devre dışı bırakılırsa, tepsiye küçültme/çıkış da devre dışı bırakır",
"useSystemTheme": "sistem temasını kullan",
"useSystemTheme_description": "sistem tarafından tanımlanan açık veya koyu mod tercihini takip et",
"volumeWheelStep": "ses tekerleği adımı",
"volumeWheelStep_description": "ses seviyesi kaydırıcısı üzerinde fare tekerleğini kaydırırken değiştirilecek ses seviyesi miktarı",
"volumeWidth": "ses kaydırıcı genişliği",
"volumeWidth_description": "ses seviyesi kaydırıcısının genişliği",
"webAudio": "ağ sesini kullanın",
"webAudio_description": "ağ sesi kullanın. bu, replaygain gibi gelişmiş özellikleri etkinleştirir. aksi bir durumla karşılaşırsanız devre dışı bırakın",
"preservePitch": "perdeyi koru",
"preservePitch_description": "oynatma hızını değiştirirken perdeyi korur",
"windowBarStyle": "pencere çubuğu stili",
"windowBarStyle_description": "pencere çubuğunun stilini seçin",
"zoom": "yakınlaştırma yüzdesi",
"zoom_description": "uygulama için yakınlaştırma yüzdesini ayarlar",
"doubleClickBehavior_description": "evet ise, bir parça aramasında eşleşen tüm parçalar sıraya alınır. aksi takdirde, yalnızca tıklanan parça sıraya alınır",
"enableRemote": "uzaktan kontrol sunucusunu etkinleştir",
"enableRemote_description": "uzaktan kumanda sunucusunun diğer cihazların uygulamayı kontrol etmesine izin vermesini sağlar",
"externalLinks": "harici bağlantıları göster",
"externalLinks_description": "sanatçı/albüm sayfalarında dış bağlantıların (Last.fm, MusicBrainz) gösterilmesini sağlar",
"exitToTray": "tepsiye çıkış",
"exitToTray_description": "uygulamadan sistem tepsisine çıkma",
"floatingQueueArea": "kayan liste üzerine gelinen alanı göster",
"floatingQueueArea_description": "oynatma kuyruğunu görüntülemek için ekranın sağ tarafında fareyle üzerine gelinen bir simge görüntüleyin",
"followLyric": "güncel şarkı sözlerini takip et",
"followLyric_description": "şarkı sözünü geçerli çalma konumuna kaydırma",
"preferLocalLyrics": "yerel sözleri tercih edin",
"preferLocalLyrics_description": "mümkün olduğunda uzak (remote) şarkı sözleri yerine yerel olarak depolanan şarkı sözlerini tercih edin",
"font": "font",
"font_description": "uygulama için kullanılacak yazı tipini ayarlar",
"fontType": "yazı tipi",
"fontType_description": "yerleşik yazı tipi Feishin tarafından sağlanan yazı tiplerinden birini seçer. sistem yazı tipi işletim sisteminiz tarafından sağlanan herhangi bir yazı tipini seçmenize izin verir. özel kendi yazı tipinizi sağlamanıza izin verir",
"fontType_optionBuiltIn": "yerleşik yazı tipi",
"fontType_optionCustom": "özel yazı tipi",
"fontType_optionSystem": "sistem yazı tipi",
"hotkey_browserBack": "tarayıcı geri",
"hotkey_browserForward": "tarayıcı ileri",
"hotkey_favoriteCurrentSong": "$t(common.currentSong) favorilere ekle",
"hotkey_favoritePreviousSong": "$t(common.previousSong) favorilere ekle",
"hotkey_globalSearch": "genel arama",
"hotkey_localSearch": "sayfa içi arama",
"hotkey_playbackNext": "sonraki parça",
"hotkey_playbackPause": "durdur",
"hotkey_playbackPlay": "çal",
"hotkey_playbackPlayPause": "çal / duraklat",
"translationApiKey": "çeviri api anahtarı",
"translationApiProvider_description": "çeviri için api sağlayıcısı",
"translationApiProvider": "çeviri api sağlayıcısı",
"transcodeFormat_description": "dönüştürülecek formatı seçer. sunucunun karar vermesi için boş bırakın",
"transcodeFormat": "dönüştürülecek format",
"transcodeBitrate_description": "kod dönüştürmek için bit hızını seçer. 0, sunucunun seçmesine izin ver anlamına gelir",
"transcodeBitrate": "kod dönüştürmek için bit hızı",
"transcode_description": "farklı formatlara kod dönüştürme sağlar",
"hotkey_playbackStop": "dur",
"hotkey_playbackPrevious": "önceki parça",
"skipPlaylistPage": "çalma listesi sayfasını atla",
"skipPlaylistPage_description": "bir çalma listesine giderken, varsayılan sayfa yerine çalma listesi şarkı listesi sayfasına gitme",
"startMinimized": "küçültülmüş olarak başlat",
"startMinimized_description": "uygulamayı sistem tepsisinde başlat",
"theme": "tema",
"theme_description": "uygulama için kullanılacak temayı ayarlar",
"themeDark": "tema (koyu)",
"themeDark_description": "uygulama için kullanılacak koyu temayı ayarlar",
"themeLight": "tema (açık)",
"themeLight_description": "uygulama için kullanılacak açık temayı ayarlar",
"transcodeNote": "1 (web) - 2 (mpv) şarkıdan sonra etkili olur",
"transcode": "kod dönüştürmeyi etkinleştir",
"discordDisplayType": "{{discord}} varlık gösterge türü",
"discordDisplayType_description": "durumunuzda dinlediğiniz şarkı olarak değiştirir",
"discordDisplayType_songname": "şarkı ismi",
"discordDisplayType_artistname": "Sanatçı adı(ları)",
"hotkey_navigateHome": "ana sayfaya git",
"preventSleepOnPlayback": "oynatma sırasında uykuyu önle",
"preventSleepOnPlayback_description": "müzik çalarken ekranın uyku moduna geçmesini önle"
},
"table": {
"column": {
"album": "albüm",
"albumArtist": "albüm sanatçısı",
"albumCount": "$t(entity.album_other)",
"artist": "$t(entity.artist_one)",
"biography": "biyografi",
"bitrate": "bit hızı",
"bpm": "bpm (dakika başına vuruş)",
"channels": "$t(common.channel_other)",
"codec": "$t(common.codec)",
"comment": "yorum",
"dateAdded": "tarih eklendi",
"discNumber": "disk",
"favorite": "favori",
"genre": "$t(entity.genre_one)",
"lastPlayed": "son çalınan",
"path": "yol",
"playCount": "oynatılıyor",
"rating": "derecelendirme",
"releaseDate": "çıkış tarihi",
"releaseYear": "yıl",
"size": "$t(common.size)",
"songCount": "$t(entity.track_other)",
"title": "başlık",
"trackNumber": "parça"
},
"config": {
"general": {
"autoFitColumns": "sütunları otomatik sığdır",
"followCurrentSong": "güncel şarkıyı takip et",
"displayType": "görüntüleme türü",
"gap": "$t(common.gap)",
"itemGap": "öğe boşluğu (px)",
"itemSize": "öğe boyutu (px)",
"size": "$t(common.size)",
"tableColumns": "tablo sütunları"
},
"label": {
"actions": "$t(common.action_other)",
"album": "$t(entity.album_one)",
"albumArtist": "$t(entity.albumArtist_one)",
"artist": "$t(entity.artist_one)",
"biography": "$t(common.biography)",
"bitrate": "$t(common.bitrate)",
"bpm": "$t(common.bpm)",
"channels": "$t(common.channel_other)",
"codec": "$t(common.codec)",
"dateAdded": "tarih eklendi",
"discNumber": "disk numarası",
"duration": "$t(common.duration)",
"favorite": "$t(common.favorite)",
"genre": "$t(entity.genre_one)",
"lastPlayed": "son çalınan",
"note": "$t(common.note)",
"owner": "$t(common.owner)",
"path": "$t(common.path)",
"playCount": "çalma sayısı",
"rating": "$t(common.rating)",
"releaseDate": "çıkış tarihi",
"rowIndex": "satır indeksi",
"size": "$t(common.size)",
"songCount": "$t(entity.track_other)",
"title": "$t(common.title)",
"titleCombined": "$t(common.title) (birleşik)",
"trackNumber": "parça numarası",
"year": "$t(common.year)"
},
"view": {
"card": "kart",
"grid": "ızgara",
"list": "liste",
"poster": "poster",
"table": "tablo"
}
}
}
}
+57 -18
View File
@@ -3,8 +3,8 @@
"editPlaylist": "编辑$t(entity.playlist_one)",
"moveToTop": "移至顶部",
"clearQueue": "清空播放队列",
"addToFavorites": "添加到$t(entity.favorite_other)",
"addToPlaylist": "添加到$t(entity.playlist_one)",
"addToFavorites": "添加到 $t(entity.favorite_other)",
"addToPlaylist": "添加到 $t(entity.playlist_one)",
"createPlaylist": "创建$t(entity.playlist_one)",
"removeFromPlaylist": "从$t(entity.playlist_one)移除",
"viewPlaylists": "查看$t(entity.playlist_other)",
@@ -111,7 +111,11 @@
"preview": "预览",
"translation": "翻译",
"additionalParticipants": "其他参与者",
"tags": "标签"
"tags": "标签",
"viewReleaseNotes": "查看发行说明",
"newVersion": "已安装新版本 ({{version}})",
"bitDepth": "位深度",
"sampleRate": "采样率"
},
"entity": {
"albumArtist_other": "专辑艺术家",
@@ -123,13 +127,13 @@
"playlist_other": "播放列表",
"artist_other": "艺术家",
"folderWithCount_other": "{{count}} 个文件夹",
"track_other": "曲",
"track_other": "曲",
"favorite_other": "收藏",
"artistWithCount_other": "{{count}} 位艺术家",
"folder_other": "文件夹",
"smartPlaylist": "智能$t(entity.playlist_one)",
"genreWithCount_other": "{{count}} 种流派",
"trackWithCount_other": "{{count}} 首曲",
"trackWithCount_other": "{{count}} 首曲",
"play_other": "{{count}} 次播放",
"song_other": "歌曲"
},
@@ -163,7 +167,7 @@
"skip_forward": "向前跳过",
"playbackSpeed": "播放速度",
"pause": "暂停",
"playSimilarSongs": "播放类似的曲",
"playSimilarSongs": "播放类似的曲",
"viewQueue": "查看播放队列"
},
"setting": {
@@ -180,6 +184,8 @@
"followLyric_description": "滚动歌词到当前播放位置",
"audioExclusiveMode": "音频独占模式",
"font": "字体",
"neteaseTranslation": "启用网易云歌词翻译",
"neteaseTranslation_description": "启用后,在获取歌词时将包含并显示网易云音乐提供的翻译(如果存在)。",
"crossfadeDuration_description": "设置淡入淡出持续时间",
"audioDevice": "音频设备",
"enableRemote": "启用远程控制服务器",
@@ -199,7 +205,7 @@
"enableRemote_description": "启用远程控制服务器,以允许其他设备控制此应用",
"remotePort_description": "设置远程服务器端口",
"hotkey_skipBackward": "向后跳过",
"replayGainMode_description": "根据乐曲元数据中存储的{{ReplayGain}}值调整音量增益",
"replayGainMode_description": "根据文件元数据中存储的 {{ReplayGain}} 值调整音量增益",
"volumeWheelStep_description": "在音量滑块上滚动鼠标滚轮时要更改的音量大小",
"theme_description": "设置应用的主题",
"hotkey_playbackPause": "暂停",
@@ -284,7 +290,7 @@
"playbackStyle_optionNormal": "正常",
"windowBarStyle": "窗口顶栏风格",
"floatingQueueArea": "显示浮动队列悬停区域",
"replayGainFallback_description": "乐曲没有{{ReplayGain}}标签应用增益(以分贝为单位)",
"replayGainFallback_description": "如果文件没有 {{ReplayGain}} 标签,则在数据库中应用增益",
"hotkey_toggleRepeat": "切换循环",
"lyricOffset_description": "将歌词偏移指定的毫秒数",
"sidebarConfiguration_description": "选择侧边栏包含的项目与顺序",
@@ -321,7 +327,7 @@
"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}}值上的前置放大增益",
@@ -393,7 +399,26 @@
"lastfmApiKey": "{{lastfm}} API 密钥",
"lastfmApiKey_description": "{{lastfm}} 的 API 密钥。封面艺术图所需",
"discordServeImage": "从服务器提供 {{discord}} 图像",
"discordServeImage_description": "分享 {{discord}} 封面艺术图,来自 rich presence 服务器,仅适用于 jellyfin 和 navidrome"
"discordServeImage_description": "分享 {{discord}} 封面艺术图,来自 rich presence 服务器,仅适用于 jellyfin 和 navidrome",
"musicbrainz": "显示 musicbrainz 链接",
"musicbrainz_description": "在 mbid 的艺术家/专辑页面上显示 musicbrainz 的链接",
"lastfm": "显示 last.fm 链接",
"lastfm_description": "在艺术家/专辑页面上显示 last.fm 的链接",
"preferLocalLyrics_description": "优先选择本地歌词(如有),而不是远程歌词",
"preferLocalLyrics": "首选本地歌词",
"discordPausedStatus": "暂停时显示rich presence",
"discordPausedStatus_description": "启用后将在播放器暂停时显示状态",
"preservePitch": "保持音高",
"preservePitch_description": "在调整播放速度时保持音高",
"notify": "启用歌曲通知",
"notify_description": "更改当前歌曲时显示通知",
"discordDisplayType": "{{discord}} 存在显示类型",
"discordDisplayType_description": "改变您在状态中收听的内容",
"discordDisplayType_songname": "歌曲名称",
"discordDisplayType_artistname": "艺术家名称",
"hotkey_navigateHome": "导航到主页",
"preventSleepOnPlayback": "防止播放时进入睡眠状态",
"preventSleepOnPlayback_description": "播放音乐时防止显示器进入睡眠状态"
},
"error": {
"remotePortWarning": "重启服务器使新端口生效",
@@ -418,7 +443,8 @@
"badAlbum": "您看到此页面是因为这首歌不是专辑的一部分。如果您的音乐文件夹顶层有一首歌曲,您很可能会遇到此问题。jellyfin 仅对位于文件夹中的曲目进行分组。",
"networkError": "发生网络错误",
"openError": "无法打开文件",
"badValue": "无效的选项 \"{{value}}\". 此值不再存在"
"badValue": "无效的选项 \"{{value}}\". 此值不再存在",
"notificationDenied": "通知权限被拒绝。此设置无效"
},
"filter": {
"mostPlayed": "最多播放过",
@@ -438,7 +464,7 @@
"albumArtist": "$t(entity.albumArtist_one)",
"releaseYear": "发布年份",
"biography": "个人简介",
"songCount": "曲数量",
"songCount": "曲数量",
"random": "随机",
"lastPlayed": "上次播放过",
"toYear": "从年份",
@@ -477,7 +503,8 @@
"home": "$t(common.home)",
"artists": "$t(entity.artist_other)",
"albumArtists": "$t(entity.albumArtist_other)",
"shared": "共享$t(entity.playlist_other)"
"shared": "共享$t(entity.playlist_other)",
"myLibrary": "我的媒体库"
},
"fullscreenPlayer": {
"config": {
@@ -512,7 +539,9 @@
"goBack": "返回",
"goForward": "前进",
"settings": "$t(common.setting_other)",
"quit": "$t(common.quit)"
"quit": "$t(common.quit)",
"privateModeOff": "关闭私人模式",
"privateModeOn": "开启私人模式"
},
"home": {
"mostPlayed": "最多播放",
@@ -563,12 +592,14 @@
"playSimilarSongs": "$t(player.playSimilarSongs)",
"download": "下载",
"playShuffled": "$t(player.shuffle)",
"moveToNext": "$t(action.moveToNext)"
"moveToNext": "$t(action.moveToNext)",
"goToAlbum": "转到 $t(entity.album_one)",
"goToAlbumArtist": "转到 $t(entity.albumArtist_one)"
},
"trackList": {
"title": "$t(entity.track_other)",
"genreTracks": "\"{{genre}}\" $t(entity.track_other)",
"artistTracks": "{{artist}}的曲目"
"artistTracks": "{{artist}} 的曲目"
},
"albumArtistList": {
"title": "$t(entity.albumArtist_other)"
@@ -653,7 +684,8 @@
},
"queryEditor": {
"input_optionMatchAll": "匹配全部",
"input_optionMatchAny": "匹配任何"
"input_optionMatchAny": "匹配任何",
"title": "查询编辑器"
},
"editPlaylist": {
"title": "编辑$t(entity.playlist_one)",
@@ -672,6 +704,11 @@
"description": "描述",
"setExpiration": "设置过期时间",
"success": "共享链接已复制到剪贴板(或单击此处打开)"
},
"privateMode": {
"enabled": "启用私人模式,播放状态现在对外部集成隐藏",
"disabled": "私人模式已禁用,播放状态现在对启用的外部集成可见",
"title": "私人模式"
}
},
"table": {
@@ -689,7 +726,9 @@
"view": {
"table": "表格",
"poster": "海报",
"card": "卡片"
"card": "卡片",
"grid": "网格",
"list": "列表"
},
"label": {
"releaseDate": "发布日期",
+388 -214
View File
@@ -2,24 +2,24 @@
"common": {
"backward": "返回",
"biography": "簡介",
"bitrate": "比特率",
"bitrate": "位元率",
"bpm": "bpm",
"clear": "清空",
"collapse": "折疊",
"comingSoon": "即將上線…",
"comingSoon": "即將推出…",
"confirm": "確認",
"decrease": "降低",
"delete": "刪除",
"descending": "降",
"descending": "降",
"description": "描述",
"forceRestartRequired": "重啓應用使更改生效…關閉通知即可重",
"menu": "單",
"forceRestartRequired": "重新啟動應用程式使更改生效…關閉通知即可重",
"menu": "單",
"action_other": "操作",
"add": "添加",
"areYouSure": "是否繼續",
"ascending": "升",
"add": "新增",
"areYouSure": "你確定嗎",
"ascending": "升",
"disable": "禁用",
"disc": "",
"disc": "光碟",
"dismiss": "忽略",
"duration": "時長",
"edit": "編輯",
@@ -30,7 +30,7 @@
"filters": "篩選",
"forward": "前進",
"gap": "空隙",
"home": "頁",
"home": "頁",
"increase": "增高",
"left": "左",
"limit": "限制",
@@ -39,20 +39,20 @@
"ok": "好",
"owner": "所有者",
"path": "路徑",
"playerMustBePaused": "播放器須被暫停",
"previousSong": "上首$t(entity.track_one)",
"playerMustBePaused": "播放器須被暫停",
"previousSong": "上首$t(entity.track_one)",
"quit": "退出",
"random": "隨機",
"rating": "評分",
"refresh": "刷新",
"refresh": "重新整理",
"reset": "重置",
"resetToDefault": "重置爲默認",
"restartRequired": "需要重啓應用",
"resetToDefault": "恢復為預設值",
"restartRequired": "需要重新啟動應用程式",
"right": "右",
"save": "存",
"saveAndReplace": "存並替換",
"saveAs": "保存爲",
"search": "搜",
"save": "存",
"saveAndReplace": "存並取代",
"saveAs": "儲存為",
"search": "搜",
"sortOrder": "順序",
"title": "標題",
"trackNumber": "音軌編號",
@@ -63,38 +63,61 @@
"yes": "是",
"cancel": "取消",
"center": "中央",
"channel_other": "道",
"channel_other": "道",
"configure": "配置",
"create": "創建",
"currentSong": "前$t(entity.track_one)",
"currentSong": "前$t(entity.track_one)",
"minimize": "最小化",
"modified": "已修改",
"name": "名稱",
"no": "否",
"none": "無",
"noResultsFromQuery": "未查詢到匹配結果",
"note": "注釋"
"note": "注釋",
"additionalParticipants": "額外參與者",
"newVersion": "已安裝新版本 ({{version}})",
"viewReleaseNotes": "查看發行註記",
"albumGain": "專輯增益",
"albumPeak": "專輯peak",
"bitDepth": "位元深度",
"close": "關閉",
"codec": "編碼",
"mbid": "MusicBrainz ID",
"preview": "預覽",
"reload": "重新載入",
"sampleRate": "取樣率",
"setting": "設定",
"share": "分享",
"tags": "標籤",
"trackGain": "曲目增益",
"trackPeak": "歌曲峰值",
"translation": "翻譯"
},
"error": {
"endpointNotImplementedError": "{{serverType}} 尚未實現端點 {{endpoint}}",
"apiRouteError": "請求失敗:無法路由",
"audioDeviceFetchError": "無法獲取音頻設備",
"authenticationFailed": "證失敗",
"audioDeviceFetchError": "無法取得音訊設備",
"authenticationFailed": "證失敗",
"credentialsRequired": "需要憑證",
"genericError": "發生了錯誤",
"invalidServer": "無效的服務器",
"localFontAccessDenied": "無法取本地字體",
"localFontAccessDenied": "無法取本地字體",
"loginRateError": "登錄請求嘗試次數過多,請稍後再試",
"remoteDisableError": "$t(common.disable)遠程服務器時出現錯誤",
"remoteEnableError": "$t(common.enable)遠程服務器時出現錯誤",
"remotePortError": "設置遠程服務器端口時發生錯誤",
"remotePortWarning": "重啓服務器使新端口生效",
"serverRequired": "需要服器",
"sessionExpiredError": "會話已過期",
"systemFontError": "獲取系統字體時出現錯誤",
"serverNotSelectedError": "未選擇服器",
"remoteDisableError": "$t(common.disable)遠端伺服器時出現錯誤",
"remoteEnableError": "$t(common.enable)遠端伺服器時出現錯誤",
"remotePortError": "設定遠端伺服器端口時發生錯誤",
"remotePortWarning": "重啟伺服器使新端口生效",
"serverRequired": "需要服器",
"sessionExpiredError": "工作階段已過期",
"systemFontError": "嘗試取得系統字體時出現錯誤",
"serverNotSelectedError": "未選擇服器",
"mpvRequired": "需要 MPV",
"playbackError": "無法播放媒體"
"playbackError": "無法播放媒體",
"badAlbum": "您看到此頁面是因為這首歌不是專輯的一部分。如果您的音樂資料夾頂層有一首歌,則很可能會看到此問題。 Jellyfin 僅將資料夾中的曲目分組。",
"badValue": "無效選項“{{value}}”。該值不再存在",
"networkError": "發生網路錯誤",
"notificationDenied": "通知權限被拒絕。此設定無效",
"openError": "無法開啟檔案"
},
"page": {
"contextMenu": {
@@ -112,53 +135,64 @@
"moveToBottom": "$t(action.moveToBottom)",
"setRating": "$t(action.setRating)",
"moveToTop": "$t(action.moveToTop)",
"numberSelected": "{{count}} 已選擇",
"play": "$t(player.play)"
"numberSelected": "已選取 {{count}}",
"play": "$t(player.play)",
"download": "下載",
"moveToNext": "$t(action.moveToNext)",
"playSimilarSongs": "$t(player.playSimilarSongs)",
"playShuffled": "$t(player.shuffle)",
"shareItem": "分享項目",
"showDetails": "取得資訊"
},
"globalSearch": {
"title": "令",
"title": "令",
"commands": {
"goToPage": "跳至頁面",
"searchFor": "搜 {{query}}",
"serverCommands": "服務器命令"
"searchFor": "搜 {{query}}",
"serverCommands": "伺服器指令"
}
},
"home": {
"explore": "從庫中搜",
"explore": "從資料庫中搜",
"recentlyPlayed": "最近播放",
"title": "$t(common.home)",
"mostPlayed": "最多播放",
"newlyAdded": "最近添加的發"
"newlyAdded": "最近新增的發"
},
"appMenu": {
"openBrowserDevtools": "打開覽器開發者工具",
"openBrowserDevtools": "打開覽器開發者工具",
"collapseSidebar": "折疊側邊欄",
"expandSidebar": "展開側邊欄",
"goBack": "返回",
"goForward": "前進",
"quit": "$t(common.quit)",
"selectServer": "選擇服器",
"selectServer": "選擇服器",
"settings": "$t(common.setting_other)",
"version": "版本 {{version}}",
"manageServers": "管理服器"
"manageServers": "管理服器"
},
"fullscreenPlayer": {
"config": {
"showLyricProvider": "顯示歌詞提供者",
"useImageAspectRatio": "使用圖片縱橫比",
"dynamicBackground": "動態背景",
"followCurrentLyric": "跟隨前歌詞",
"followCurrentLyric": "跟隨前歌詞",
"lyricAlignment": "歌詞對齊",
"lyricGap": "歌詞間距",
"lyricSize": "歌詞字體大小",
"synchronized": "已同步",
"unsynchronized": "未同步",
"opacity": "透明度",
"showLyricMatch": "顯示匹配的歌詞"
"showLyricMatch": "顯示匹配的歌詞",
"dynamicImageBlur": "圖片模糊大小",
"dynamicIsImage": "啟用背景圖片",
"lyricOffset": "歌詞偏移時間 (ms)"
},
"lyrics": "歌詞",
"related": "相關",
"upNext": "即將播放"
"upNext": "即將播放",
"visualizer": "視覺化",
"noLyrics": "未找到歌詞"
},
"playlistList": {
"title": "$t(entity.playlist_other)"
@@ -166,21 +200,27 @@
"setting": {
"hotkeysTab": "快捷鍵",
"playbackTab": "播放",
"windowTab": "窗",
"generalTab": "通用"
"windowTab": "窗",
"generalTab": "一般",
"advanced": "進階"
},
"albumArtistList": {
"title": "$t(entity.albumArtist_other)"
},
"albumDetail": {
"moreFromArtist": "更多$t(entity.artist_one)作品",
"moreFromGeneric": "更多{{item}}作品"
"moreFromArtist": "更多來自 $t(entity.artist_one)作品",
"moreFromGeneric": "更多{{item}}作品",
"released": "發行"
},
"albumList": {
"title": "$t(entity.album_other)"
"title": "$t(entity.album_other)",
"artistAlbums": "{{artist}} 的專輯",
"genreAlbums": "\"{{genre}}\" $t(entity.album_other)"
},
"genreList": {
"title": "$t(entity.genre_other)"
"title": "$t(entity.genre_other)",
"showAlbums": "顯示 $t(entity.genre_one) $t(entity.album_other)",
"showTracks": "顯示 $t(entity.genre_one) $t(entity.track_other)"
},
"sidebar": {
"albumArtists": "$t(entity.albumArtist_other)",
@@ -193,112 +233,145 @@
"genres": "$t(entity.genre_other)",
"home": "$t(common.home)",
"nowPlaying": "正在播放",
"playlists": "$t(entity.playlist_other)"
"playlists": "$t(entity.playlist_other)",
"myLibrary": "我的資料庫",
"shared": "已分享 $t(entity.playlist_other)"
},
"trackList": {
"title": "$t(entity.track_other)"
"title": "$t(entity.track_other)",
"artistTracks": "{{artist}} 的歌曲",
"genreTracks": "\"{{genre}}\" $t(entity.track_other)"
},
"albumArtistDetail": {
"about": "關於{{artist}}",
"appearsOn": "出現在",
"recentReleases": "最近發行",
"viewDiscography": "查看音樂作品",
"relatedArtists": "關聯$t(entity.artist_other)",
"topSongs": "熱門歌曲",
"topSongsFrom": "{{title}} 的熱門歌曲",
"viewAll": "檢視所有",
"viewAllTracks": "檢視所有$t(entity.track_other)"
},
"manageServers": {
"title": "管理伺服器",
"serverDetails": "伺服器詳細資訊",
"url": "URL",
"username": "使用者名稱",
"editServerDetailsTooltip": "編輯伺服器詳細資訊",
"removeServer": "移除伺服器"
},
"itemDetail": {
"copyPath": "複製路徑至剪貼簿",
"copiedPath": "成功複製路徑",
"openFile": "在檔案管理器中顯示曲目"
},
"playlist": {
"reorder": "僅當按 ID 排序時才啟用重新排序"
}
},
"player": {
"playbackFetchInProgress": "正在載歌曲…",
"addLast": "添加到播放列表末尾",
"addNext": "添加爲播放列表下壹首",
"playbackFetchInProgress": "正在載歌曲…",
"addLast": "新增到尾端",
"addNext": "新增到下一首",
"favorite": "收藏",
"mute": "靜音",
"muted": "已靜音",
"playbackFetchNoResults": "未找到歌曲",
"playbackSpeed": "播放速度",
"playRandom": "隨機播放",
"previous": "上首",
"queue_clear": "清空播放列",
"previous": "上首",
"queue_clear": "清空播放列",
"queue_remove": "移除所選",
"repeat": "循環",
"repeat_all": "全部循環",
"repeat_off": "不循環",
"shuffle": "隨機播放",
"shuffle_off": "未用隨機播放",
"shuffle_off": "未用隨機播放",
"skip": "跳過",
"skip_back": "向後跳過",
"skip_forward": "向前跳過",
"stop": "停止",
"toggleFullscreenPlayer": "全屏",
"toggleFullscreenPlayer": "切換全螢幕播放器",
"unfavorite": "取消收藏",
"pause": "暫停",
"next": "下首",
"next": "下首",
"play": "播放",
"playbackFetchCancel": "請稍等…關閉通知以取消操作",
"playbackFetchCancel": "請稍等…關閉通知以取消",
"queue_moveToBottom": "使所選置頂",
"queue_moveToTop": "使所選置底"
"queue_moveToTop": "使所選置底",
"playSimilarSongs": "播放相似歌曲",
"viewQueue": "檢視佇列"
},
"setting": {
"audioPlayer_description": "選擇用播放的音播放器",
"audioPlayer_description": "選擇用播放的音播放器",
"themeLight": "主題(淺色)",
"themeLight_description": "應用將使用淺色主題",
"themeLight_description": "應用程式將使用淺色主題",
"discordRichPresence": "{{discord}} rich presence",
"hotkey_volumeDown": "音量降低",
"hotkey_volumeMute": "靜音",
"minimumScrobblePercentage": "最小 scrobble 時長(百分比)",
"minimumScrobblePercentage_description": "歌曲被記錄已播放(scrobble)所需的最小播放百分比",
"theme_description": "設應用的主題",
"minimumScrobblePercentage": "最小紀錄時長(百分比)",
"minimumScrobblePercentage_description": "歌曲被記錄已播放(scrobble)所需的最小播放百分比",
"theme_description": "設應用程式的主題",
"accentColor": "強調色",
"accentColor_description": "設應用的強調色",
"applicationHotkeys": "應用快捷鍵",
"applicationHotkeys_description": "配置應用快捷鍵。勾選設爲全局快捷鍵(僅桌面端)",
"audioDevice": "音設備",
"audioDevice_description": "選擇用播放的音設備(僅 web 播放器)",
"audioExclusiveMode": "音獨占模式",
"audioExclusiveMode_description": "用獨占輸出模式。在此模式下,系統通常被鎖定,只有 mpv 能夠輸出音",
"audioPlayer": "音播放器",
"accentColor_description": "設應用程式的強調色",
"applicationHotkeys": "應用程式快捷鍵",
"applicationHotkeys_description": "設定應用程式快捷鍵。切換勾選框來設為全局快捷鍵(僅桌面端)",
"audioDevice": "音設備",
"audioDevice_description": "選擇用播放的音設備(僅 web 播放器)",
"audioExclusiveMode": "音獨占模式",
"audioExclusiveMode_description": "用獨占輸出模式。在此模式下,系統通常被鎖定,只有 mpv 能夠輸出音",
"audioPlayer": "音播放器",
"crossfadeDuration": "淡入淡出持續時間",
"crossfadeDuration_description": "設淡入淡出持續時間",
"crossfadeDuration_description": "設淡入淡出持續時間",
"crossfadeStyle": "淡入淡出風格",
"crossfadeStyle_description": "選擇用于音頻播放器的淡入淡出風格",
"customFontPath": "自定字體路徑",
"customFontPath_description": "設應用使用的自定字體路徑",
"crossfadeStyle_description": "選擇用於音訊播放器的淡入淡出風格",
"customFontPath": "自定字體路徑",
"customFontPath_description": "設應用程式使用的自定字體路徑",
"disableAutomaticUpdates": "禁用自動更新",
"disableLibraryUpdateOnStartup": "禁用動時查新版本",
"discordApplicationId": "{{discord}} 應用 id",
"discordApplicationId_description": "{{discord}} rich presence 應用 id默認爲 {{defaultId}}",
"discordIdleStatus": "顯示 rich presence 置狀態",
"discordIdleStatus_description": "用後將會在播放器置時更新狀態",
"discordRichPresence_description": "在 {{discord}} rich presence 中顯示播放狀態。圖片鍵{{icon}}、{{playing}} 和 {{paused}} ",
"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 更新間隔",
"discordUpdateInterval_description": "更新間隔秒數(至少 15 秒)",
"enableRemote": "用遠控制服器",
"enableRemote_description": "用遠控制服器,以允許其他設備控制此應用",
"enableRemote": "用遠控制服器",
"enableRemote_description": "用遠控制服器,以允許其他設備控制此應用程式",
"exitToTray": "退出時最小化到托盤",
"floatingQueueArea_description": "在幕右側顯示個懸停圖,以查看播放隊列",
"followLyric": "跟隨前歌詞",
"font_description": "設應用使用的字體",
"floatingQueueArea_description": "在幕右側顯示個懸停圖,以查看列",
"followLyric": "跟隨前歌詞",
"font_description": "設應用程式使用的字體",
"fontType": "字體類型",
"fontType_description": "內字體可以選擇 Feishin 提供的字體之。系統字體允許您選擇作系統提供的任何字體。自定選項允許您使用自己的字體",
"fontType_optionBuiltIn": "內字體",
"fontType_optionCustom": "自定字體",
"fontType_description": "內字體可以選擇 Feishin 提供的字體之。系統字體允許您選擇作系統提供的任何字體。自定選項允許您使用自己的字體",
"fontType_optionBuiltIn": "內字體",
"fontType_optionCustom": "自定字體",
"fontType_optionSystem": "系統字體",
"gaplessAudio": "無縫音頻",
"gaplessAudio_description": "調整 mpv 無縫音頻設置",
"gaplessAudio_optionWeak": "弱(推薦",
"gaplessAudio": "無間隔音訊",
"gaplessAudio_description": "調整 mpv 無間隔音訊設定",
"gaplessAudio_optionWeak": "弱(建議",
"globalMediaHotkeys": "全局媒體快捷鍵",
"hotkey_browserForward": "覽器前",
"hotkey_browserForward": "覽器前",
"hotkey_favoritePreviousSong": "收藏 $t(common.previousSong)",
"hotkey_globalSearch": "全局搜",
"hotkey_localSearch": "頁面內搜",
"hotkey_playbackNext": "下壹曲",
"hotkey_globalSearch": "全局搜",
"hotkey_localSearch": "頁面內搜",
"hotkey_playbackNext": "下一首",
"hotkey_playbackPause": "暫停",
"hotkey_playbackPlay": "播放",
"hotkey_playbackPlayPause": "播放/暫停",
"hotkey_playbackPrevious": "上壹曲",
"hotkey_rate2": "評 2 星",
"hotkey_rate1": "評 1 星",
"hotkey_rate3": "評 3 星",
"hotkey_rate4": "評 4 星",
"hotkey_rate5": "評 5 星",
"hotkey_skipBackward": "向回跳過",
"hotkey_skipForward": "向後跳過",
"hotkey_playbackPrevious": "上一首",
"hotkey_rate2": "評 2 星",
"hotkey_rate1": "評 1 星",
"hotkey_rate3": "評 3 星",
"hotkey_rate4": "評 4 星",
"hotkey_rate5": "評 5 星",
"hotkey_skipBackward": "退進",
"hotkey_skipForward": "快進",
"hotkey_toggleCurrentSongFavorite": "收藏 / 取消收藏$t(common.currentSong)",
"hotkey_toggleFullScreenPlayer": "全屏播放",
"hotkey_toggleFullScreenPlayer": "切換全螢幕播放",
"hotkey_togglePreviousSongFavorite": "收藏 / 取消收藏$t(common.previousSong)",
"hotkey_toggleQueue": "顯示 / 隱藏播放隊列",
"hotkey_toggleQueue": "顯示 / 隱藏列",
"hotkey_toggleRepeat": "切換循環播放設定",
"hotkey_toggleShuffle": "切換隨機播放設定",
"hotkey_unfavoriteCurrentSong": "取消收藏$t(common.currentSong)",
@@ -306,97 +379,172 @@
"hotkey_zoomIn": "放大",
"hotkey_zoomOut": "縮小",
"language": "語言",
"language_description": "設應用的語言($t(common.restartRequired)",
"lyricFetch": "從互聯網獲取歌詞",
"lyricFetch_description": "從多個互聯網源獲取歌詞",
"language_description": "設應用程式的語言($t(common.restartRequired)",
"lyricFetch": "從網路取得歌詞",
"lyricFetch_description": "從多個網路源取得歌詞",
"lyricFetchProvider": "歌詞源",
"lyricOffset": "歌詞偏移(毫秒)",
"lyricOffset_description": "將歌詞偏移指定的毫秒數",
"lyricFetchProvider_description": "選擇歌詞源。 歌詞源順序與查詢順序致",
"lyricFetchProvider_description": "選擇歌詞源。 歌詞源順序與搜尋順序致",
"minimizeToTray": "最小化到托盤",
"minimizeToTray_description": "將應用程最小化到系統托盤",
"minimumScrobbleSeconds": "最小 scrobble 時間(秒)",
"minimumScrobbleSeconds_description": "歌曲被記錄已播放(scrobble)所需的最小播放時間",
"mpvExecutablePath": "mpv 二進制文件路徑",
"playbackStyle_optionCrossFade": "交叉淡入淡出",
"playbackStyle_optionNormal": "通常",
"playButtonBehavior": "播放按鈕行爲",
"playButtonBehavior_description": "設置將歌曲添加到隊列時播放按鈕的默認行爲",
"minimizeToTray_description": "將應用程最小化到系統托盤",
"minimumScrobbleSeconds": "最小紀錄時間(秒)",
"minimumScrobbleSeconds_description": "歌曲被記錄已播放(scrobble)所需的最小播放時間",
"mpvExecutablePath": "mpv 執行檔路徑",
"playbackStyle_optionCrossFade": "淡入淡出",
"playbackStyle_optionNormal": "一般",
"playButtonBehavior": "播放按鈕動作",
"playButtonBehavior_description": "設定歌曲新增到佇列時播放按鈕的預設動作",
"playButtonBehavior_optionAddLast": "$t(player.addLast)",
"playButtonBehavior_optionAddNext": "$t(player.addNext)",
"remotePort": "遠程服務器端口",
"remoteUsername": "遠程服務器用戶名",
"remotePort": "遠端控制伺服器端口",
"remoteUsername": "遠端控制伺服器使用者名稱",
"replayGainClipping": "{{ReplayGain}}削波",
"replayGainFallback": "{{ReplayGain}}後備替代",
"replayGainFallback_description": "曲沒有{{ReplayGain}}標簽時用的增益(以分貝單位)",
"replayGainFallback_description": "曲沒有{{ReplayGain}}標簽時使用的增益(以分貝單位)",
"replayGainMode": "{{ReplayGain}}模式",
"replayGainMode_description": "根據樂曲元數據中存儲的{{ReplayGain}}值調整音量增益",
"replayGainMode_description": "根據歌曲標籤中儲存的{{ReplayGain}}值調整音量增益",
"replayGainMode_optionAlbum": "$t(entity.album_one)",
"replayGainMode_optionNone": "$t(common.none)",
"replayGainMode_optionTrack": "$t(entity.track_one)",
"replayGainPreamp": "{{ReplayGain}}前置放大(分貝)",
"replayGainPreamp_description": "調整用在{{ReplayGain}}值上的前置放大增益",
"savePlayQueue": "存播放列",
"sampleRate_description": "如果選擇的采樣頻率與前媒體的采樣頻率不同,請選擇要使用的輸出樣率。小 8000 的值將使用默認頻率",
"savePlayQueue_description": "當應用程關閉時存播放列,並在應用程打開時恢複它",
"scrobble": "記錄播放信息Scrobble",
"scrobble_description": "在妳的社交媒體中記錄播放信息",
"replayGainPreamp_description": "調整使用在{{ReplayGain}}值上的前置放大增益",
"savePlayQueue": "存播放列",
"sampleRate_description": "如果選擇的取樣率與前媒體的取樣率不同,請選擇要使用的輸出樣率。小 8000 的值將使用預設頻率",
"savePlayQueue_description": "當應用程關閉時存播放列,並在應用程打開時恢複它",
"scrobble": "記錄播放資訊Scrobble",
"scrobble_description": "在你的媒體伺服器中記錄播放資訊",
"showSkipButton": "顯示跳過按鈕",
"showSkipButton_description": "在播放條上顯示/隱藏跳過按鈕",
"sidebarPlaylistList": "側邊欄歌單列表",
"sidebarPlaylistList": "側邊欄歌單清單",
"sidebarCollapsedNavigation": "側邊欄(已折疊)導航",
"sidebarCollapsedNavigation_description": "在折疊的側邊欄中顯示或隱藏導航",
"sidebarConfiguration": "側邊欄設定",
"sidebarConfiguration_description": "選擇側邊欄包含的項目與順序",
"sidebarPlaylistList_description": "顯示或隱藏側邊欄歌單列表",
"sidePlayQueueStyle": "側邊播放列表樣式",
"sidePlayQueueStyle_description": "設置側邊播放列表樣式",
"sidebarPlaylistList_description": "顯示或隱藏側邊欄歌單清單",
"sidePlayQueueStyle": "側邊播放清單樣式",
"sidePlayQueueStyle_description": "設置側邊播放清單樣式",
"sidePlayQueueStyle_optionAttached": "吸附",
"sidePlayQueueStyle_optionDetached": "不吸附",
"skipDuration": "跳過時長",
"skipDuration_description": "設置每次按下跳過按鈕將會跳過的時長",
"skipPlaylistPage": "跳過單頁面",
"skipPlaylistPage_description": "打開單時,直接查看歌曲列表而非查看默認頁面",
"skipPlaylistPage": "跳過播放清單頁面",
"skipPlaylistPage_description": "打開播放清單時,直接查看歌曲列表而非查看預設頁面",
"theme": "主題",
"themeDark": "主題(深色)",
"useSystemTheme_description": "使用系統定義的淺色或深色主題",
"useSystemTheme": "跟隨系統",
"volumeWheelStep": "音量滾輪步",
"volumeWheelStep_description": "在音量滑塊上滾動鼠滾輪時要更改的音量大小",
"windowBarStyle": "窗頂欄風格",
"windowBarStyle_description": "選擇窗頂欄的風格",
"zoom": "縮放",
"zoom_description": "設應用程的縮放",
"volumeWheelStep": "音量滾輪步",
"volumeWheelStep_description": "在音量上滾動鼠滾輪時要更改的音量大小",
"windowBarStyle": "窗頂欄風格",
"windowBarStyle_description": "選擇窗頂欄的風格",
"zoom": "縮放比例",
"zoom_description": "設應用程的縮放比例",
"hotkey_volumeUp": "音量增高",
"sampleRate": "樣率",
"sampleRate": "樣率",
"showSkipButtons_description": "在播放條顯示/隱藏播放按鈕",
"playbackStyle": "播放風格",
"exitToTray_description": "退出應用時最小化到系統托盤而非關閉",
"floatingQueueArea": "顯示浮動列懸停區域",
"followLyric_description": "滾動歌詞到前播放位置",
"exitToTray_description": "退出應用程式時最小化到系統托盤而非關閉",
"floatingQueueArea": "顯示浮動列懸停區域",
"followLyric_description": "滾動歌詞到前播放位置",
"font": "字體",
"globalMediaHotkeys_description": "用或禁用系統媒體快捷鍵以控制播放",
"hotkey_browserBack": "覽器後退",
"globalMediaHotkeys_description": "用或禁用系統媒體快捷鍵以控制播放",
"hotkey_browserBack": "覽器返回",
"hotkey_favoriteCurrentSong": "收藏 $t(common.currentSong)",
"hotkey_playbackStop": "停止",
"hotkey_rate0": "清除評分",
"mpvExecutablePath_description": "設 mpv 二進制文件的路徑。如果留空,則使用默認路徑",
"mpvExecutablePath_description": "設 mpv 執行檔的路徑。如果留空,則使用預設路徑",
"mpvExtraParameters": "mpv 參數",
"playbackStyle_description": "選擇播放器的播放風格",
"playButtonBehavior_optionPlay": "$t(player.play)",
"remotePassword": "遠控制服器密碼",
"remotePassword_description": "設置遠程控制服務器的密碼。這些憑據默認以不安全的方式傳輸,因此您應該使用個您不在意的唯密碼",
"remotePort_description": "設置遠程服務器端口",
"remoteUsername_description": "設置遠程控制服務器的用戶名。如果用戶名和密碼都空,則身份驗證將被禁用",
"remotePassword": "遠控制服器密碼",
"remotePassword_description": "設定遠端控制伺服器的密碼。這些憑證預設以不安全的方式傳輸,因此您應該使用個您不在意的唯密碼",
"remotePort_description": "設定遠端控制伺服器的端口",
"remoteUsername_description": "設定遠端控制伺服器的使用者名稱。如果使用者名稱和密碼都空,則身份驗證將被禁用",
"replayGainClipping_description": "自動降低增益以防止{{ReplayGain}}造成削波",
"showSkipButtons": "顯示跳過按鈕",
"themeDark_description": "應用將使用深色主題",
"clearQueryCache_description": "feishin的“軟清除”。這將會刷新播放列表、元數據並重置存的歌詞。會保留設置、服務器憑據和緩存圖",
"clearCache": "清除覽器緩存",
"clearCache_description": "feishin的“硬清除”。除了清除feishin的緩存,清空浏覽器緩存(保存的圖和其他資源)。會保留服器憑和設",
"clearQueryCache": "清除feishin緩存",
"themeDark_description": "應用程式將使用深色主題",
"clearQueryCache_description": "Feishin的“軟清除”。這將會刷新播放清單、曲目標籤並重置存的歌詞。會保留設定、伺服器憑證和暫存圖",
"clearCache": "清除覽器快取",
"clearCache_description": "Feishin的“硬清除”。除了清除Feishin的快取、清除瀏覽器快取(儲存的圖和其他資源)。會保留服器憑和設",
"clearQueryCache": "清除Feishin快取",
"buttonSize": "播放器欄按鈕大小",
"buttonSize_description": "播放器欄按鈕大小"
"buttonSize_description": "播放器欄按鈕大小",
"albumBackground": "專輯背景圖片",
"albumBackground_description": "為包含專輯封面的專輯頁面新增背景圖片",
"albumBackgroundBlur": "專輯背景圖片模糊大小",
"albumBackgroundBlur_description": "調整應用於專輯背景圖片的模糊量",
"artistConfiguration": "專輯藝術家頁面設定",
"artistConfiguration_description": "設定專輯藝術家頁面上顯示的項目及其顯示順序",
"clearCacheSuccess": "成功清除快取",
"contextMenu": "右鍵選單配置",
"contextMenu_description": "允許您隱藏在右鍵選單項目時顯示的項目。未選取的項目將被隱藏",
"customCssEnable": "啟用自訂CSS",
"customCssEnable_description": "允許撰寫自訂CSS。",
"customCssNotice": "警告:雖然有一些清理措施(不允許 url() 和 content:),但使用自訂 CSS 仍然會透過更改介面帶來風險。",
"customCss": "自訂CSS",
"customCss_description": "自訂 CSS 內容。注意:內容和遠端 URL 是不允許使用的屬性。您的內容預覽如下所示。由於需要進行清理,因此存在一些您未設定的其他欄位。",
"discordPausedStatus": "暫停時顯示 rich presence",
"discordPausedStatus_description": "啟用後,播放器暫停時將顯示狀態",
"discordListening": "將狀態設為\"正在聽\"",
"discordListening_description": "將狀態顯示為\"正在聽\"而不是\"正在玩\"",
"discordServeImage": "從伺服器提供{{discord}}圖片",
"discordServeImage_description": "從伺服器本身為 {{discord}} rich presence 分享封面圖片,只在jellyfin和navidrome可用",
"doubleClickBehavior": "雙擊時將所有搜尋到的曲目加入佇列",
"doubleClickBehavior_description": "如果為 true,則歌曲搜尋中所有符合的歌曲都會被加入佇列。否則,只有被點擊的歌曲才會被加入佇列",
"externalLinks": "顯示外部連結",
"externalLinks_description": "在藝術家/專輯頁面顯示外部連結(Last.fm, MusicBrainz)",
"preferLocalLyrics": "偏好本地歌詞",
"preferLocalLyrics_description": "優先選擇本地歌詞,而不是遠端歌詞(如果可用)",
"genreBehavior": "曲風頁面預設動作",
"genreBehavior_description": "決定點擊某個曲風時是否預設開啟曲目或專輯列表",
"homeConfiguration": "首頁配置",
"homeConfiguration_description": "配置在首頁上顯示哪些項目以及顯示順序",
"homeFeature": "首頁特色輪播",
"homeFeature_description": "控制是否在首頁上顯示大型特色輪播",
"imageAspectRatio": "使用原生封面照長寬比",
"imageAspectRatio_description": "如果啟用,封面照將使用其原始長寬比顯示。對於非 1:1 的封面,剩餘空間將為空",
"lastfm": "顯示 last.fm 連結",
"lastfm_description": "在藝術家/專輯頁面顯示 last.fm 連結",
"lastfmApiKey": "{{lastfm}} API金鑰",
"lastfmApiKey_description": "{{lastfm}}的API金鑰。用於封面照",
"notify": "啟用歌曲通知",
"notify_description": "當切換目前歌曲時顯示通知",
"mpvExtraParameters_help": "一行一個",
"musicbrainz": "顯示 musicbrainz 連結",
"musicbrainz_description": "在存在 mbid 的藝術家/專輯頁面上顯示 musicbrainz 的鏈接",
"neteaseTranslation": "啟用網易翻譯",
"neteaseTranslation_description": "啟用後,將從網易取得並顯示翻譯的歌詞(如果有)。",
"passwordStore": "密碼/secret儲存",
"passwordStore_description": "使用什麼密碼/secret儲存。如果您在儲存密碼時遇到問題,請變更此項目。",
"playButtonBehavior_optionPlayShuffled": "$t(player.shuffle)",
"playerAlbumArtResolution": "播放器專輯封面解析度",
"playerAlbumArtResolution_description": "大型播放器專輯封面預覽的解析度。較大的解析度使其看起來更清晰,但可能會減慢載入速度。預設為 0,表示自動",
"playerbarOpenDrawer": "播放器列全螢幕切換",
"playerbarOpenDrawer_description": "允許點擊播放器列以開啟全螢幕播放器",
"startMinimized": "最小化啟動",
"startMinimized_description": "在系統托盤中啟動應用程式",
"transcodeNote": "將在播放1 (web) - 2 (mpv)首歌後生效",
"transcode": "啟用轉碼",
"transcode_description": "啟用轉碼到不同格式",
"transcodeBitrate": "要轉碼的比特率",
"transcodeBitrate_description": "選擇要轉碼的比特率。 0 表示讓伺服器選擇",
"transcodeFormat": "轉碼的格式",
"transcodeFormat_description": "選擇要轉碼的格式。留空來讓伺服器決定",
"translationApiProvider": "翻譯API提供者",
"translationApiProvider_description": "翻譯API的提供者",
"translationApiKey": "翻譯API金鑰",
"translationApiKey_description": "翻譯的API金鑰(僅支援全域服務端點)",
"translationTargetLanguage": "目標翻譯語言",
"translationTargetLanguage_description": "翻譯的目標語言",
"trayEnabled": "顯示托盤",
"trayEnabled_description": "顯示/隱藏托盤圖示/選單。如果停用,則也會停用最小化/退出到托盤",
"volumeWidth": "音量條寬度",
"volumeWidth_description": "音量條的寬度",
"webAudio": "使用網頁音訊",
"webAudio_description": "使用網頁音訊。這將啟用重播增益等進階功能。如果您遇到其他問題,請停用",
"preservePitch": "保持音高",
"preservePitch_description": "修改播放速度時保留音調"
},
"table": {
"config": {
@@ -405,7 +553,10 @@
"gap": "$t(common.gap)",
"size": "$t(common.size)",
"tableColumns": "列",
"autoFitColumns": "列寬自適應"
"autoFitColumns": "列寬自適應",
"followCurrentSong": "跟隨目前歌曲",
"itemGap": "項目間隔 (px)",
"itemSize": "項目大小 (px)"
},
"label": {
"actions": "$t(common.action_other)",
@@ -416,8 +567,8 @@
"biography": "$t(common.biography)",
"bitrate": "$t(common.bitrate)",
"channels": "$t(common.channel_other)",
"dateAdded": "添加日期",
"discNumber": "碟編號",
"dateAdded": "新增日期",
"discNumber": "碟編號",
"duration": "$t(common.duration)",
"favorite": "$t(common.favorite)",
"genre": "$t(entity.genre_one)",
@@ -425,20 +576,24 @@
"note": "$t(common.note)",
"owner": "$t(common.owner)",
"path": "$t(common.path)",
"playCount": "播放數",
"playCount": "播放數",
"releaseDate": "發布日期",
"rowIndex": "行號",
"size": "$t(common.size)",
"title": "$t(common.title)",
"titleCombined": "$t(common.title)(合",
"trackNumber": "音軌編號",
"titleCombined": "$t(common.title)(合",
"trackNumber": "曲目編號",
"year": "$t(common.year)",
"rating": "$t(common.rating)"
"rating": "$t(common.rating)",
"codec": "$t(common.codec)",
"songCount": "$t(entity.track_other)"
},
"view": {
"card": "卡片",
"poster": "海報",
"table": "表格"
"table": "表格",
"grid": "網格",
"list": "列表"
}
},
"column": {
@@ -450,8 +605,8 @@
"bitrate": "比特率",
"channels": "$t(common.channel_other)",
"comment": "評論",
"dateAdded": "添加日期",
"discNumber": "",
"dateAdded": "新增日期",
"discNumber": "光碟",
"favorite": "收藏",
"lastPlayed": "最後播放",
"path": "路徑",
@@ -463,28 +618,34 @@
"bpm": "bpm",
"songCount": "$t(entity.track_other)",
"title": "標題",
"trackNumber": "音軌編號",
"size": "$t(common.size)"
"trackNumber": "曲目編號",
"size": "$t(common.size)",
"codec": "$t(common.codec)"
}
},
"action": {
"addToFavorites": "添加到$t(entity.favorite_other)",
"clearQueue": "清空播放列",
"addToFavorites": "新增到$t(entity.favorite_other)",
"clearQueue": "清空播放列",
"createPlaylist": "創建$t(entity.playlist_one)",
"deletePlaylist": "刪除$t(entity.playlist_one)",
"addToPlaylist": "添加到$t(entity.playlist_one)",
"addToPlaylist": "新增到$t(entity.playlist_one)",
"deselectAll": "取消全選",
"editPlaylist": "編輯 $t(entity.playlist_one)",
"goToPage": "轉到頁面",
"moveToBottom": "至底部",
"moveToTop": "至頂部",
"goToPage": "前往頁面",
"moveToBottom": "至底部",
"moveToTop": "至頂部",
"refresh": "$t(common.refresh)",
"removeFromFavorites": "從$t(entity.favorite_other)移除",
"removeFromPlaylist": "從$t(entity.playlist_one)移除",
"removeFromQueue": "從播放列中移除",
"removeFromQueue": "從播放列中移除",
"setRating": "評分",
"toggleSmartPlaylistEditor": "切換$t(entity.smartPlaylist)編輯器",
"viewPlaylists": "查看$t(entity.playlist_other)"
"viewPlaylists": "查看$t(entity.playlist_other)",
"moveToNext": "移至下一項",
"openIn": {
"lastfm": "在Last.fm開啟",
"musicbrainz": "在MusicBrainz開啟"
}
},
"entity": {
"album_other": "專輯",
@@ -493,16 +654,18 @@
"artist_other": "藝術家",
"artistWithCount_other": "{{count}} 位藝術家",
"favorite_other": "收藏",
"folder_other": "文件夾",
"folderWithCount_other": "{{count}} 個文件夾",
"genre_other": "流派",
"genreWithCount_other": "{{count}} 種流派",
"playlist_other": "播放列表",
"playlistWithCount_other": "{{count}} 個播放列表",
"smartPlaylist": "智$t(entity.playlist_one)",
"track_other": "曲",
"trackWithCount_other": "{{count}} 首曲",
"albumWithCount_other": "{{count}} 張專輯"
"folder_other": "資料夾",
"folderWithCount_other": "{{count}} 個資料夾",
"genre_other": "曲風",
"genreWithCount_other": "{{count}} 種曲風",
"playlist_other": "播放清單",
"playlistWithCount_other": "{{count}} 個播放清單",
"smartPlaylist": "智$t(entity.playlist_one)",
"track_other": "曲",
"trackWithCount_other": "{{count}} 首曲",
"albumWithCount_other": "{{count}} 張專輯",
"play_other": "{{count}}次播放",
"song_other": "歌曲"
},
"filter": {
"albumCount": "$t(entity.album_other)數",
@@ -512,15 +675,15 @@
"bpm": "bpm",
"channels": "$t(common.channel_other)",
"comment": "評論",
"communityRating": "社評分",
"communityRating": "社評分",
"criticRating": "評論家評分",
"dateAdded": "已添加日期",
"disc": "",
"dateAdded": "已新增日期",
"disc": "光碟",
"duration": "時長",
"id": "id",
"fromYear": "從年份",
"genre": "$t(entity.genre_one)",
"isCompilation": "合輯",
"isCompilation": "合輯",
"isFavorited": "已收藏",
"isPublic": "已公開",
"isRated": "已評分",
@@ -541,32 +704,32 @@
"album": "$t(entity.album_one)",
"albumArtist": "$t(entity.albumArtist_one)",
"favorited": "已收藏",
"recentlyAdded": "最近添加",
"recentlyAdded": "最近新增",
"releaseYear": "發布年份",
"search": "搜",
"search": "搜",
"title": "標題",
"toYear": "從年份",
"trackNumber": "曲目"
},
"form": {
"addServer": {
"input_legacyAuthentication": "用舊版認證方式",
"input_name": "服器名",
"input_legacyAuthentication": "用舊版認證方式",
"input_name": "服器名",
"input_password": "密碼",
"input_savePassword": "存密碼",
"input_savePassword": "存密碼",
"input_url": "url",
"input_username": "用戶名",
"success": "服務器添加成功",
"title": "添加服務器",
"error_savePassword": "存密碼時出現錯誤",
"input_username": "使用者名稱",
"success": "伺服器新增成功",
"title": "新增伺服器",
"error_savePassword": "存密碼時出現錯誤",
"ignoreCors": "忽略 cors $t(common.restartRequired)",
"ignoreSsl": "忽略 ssl $t(common.restartRequired)"
},
"addToPlaylist": {
"input_playlists": "$t(entity.playlist_other)",
"input_skipDuplicates": "跳過重複",
"success": "添加 $t(entity.trackWithCount, {\"count\": {{message}} }) 到 $t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })",
"title": "添加到$t(entity.playlist_one)"
"success": "新增 $t(entity.trackWithCount, {\"count\": {{message}} }) 到 $t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })",
"title": "新增到$t(entity.playlist_one)"
},
"createPlaylist": {
"input_description": "$t(common.description)",
@@ -578,16 +741,17 @@
},
"lyricSearch": {
"input_name": "$t(common.name)",
"title": "搜歌詞",
"title": "搜歌詞",
"input_artist": "$t(entity.artist_one)"
},
"queryEditor": {
"input_optionMatchAll": "匹配全部",
"input_optionMatchAny": "匹配任何"
"input_optionMatchAny": "匹配任何",
"title": "查詢編輯器"
},
"updateServer": {
"success": "服器已更新成功",
"title": "更新服器"
"success": "服器已更新成功",
"title": "更新服器"
},
"deletePlaylist": {
"input_confirm": "輸入$t(entity.playlist_one)的名稱進行確認",
@@ -595,7 +759,17 @@
"success": "$t(entity.playlist_one)已成功刪除"
},
"editPlaylist": {
"title": "編輯$t(entity.playlist_one)"
"title": "編輯$t(entity.playlist_one)",
"publicJellyfinNote": "Jellyfin 出於某種原因,不會顯示播放清單是否公開。如果您希望保持公開狀態,請選擇以下輸入",
"success": "$t(entity.playlist_one) 更新成功"
},
"shareItem": {
"allowDownloading": "允許下載",
"description": "描述",
"setExpiration": "設定過期時間",
"success": "分享連結已複製到剪貼簿(或點擊此處開啟)",
"expireInvalid": "到期日必須是未來",
"createFailed": "無法建立分享(分享是否啟用?)"
}
}
}
@@ -0,0 +1,55 @@
import { createSocket } from 'dgram';
import { ipcMain } from 'electron';
import { DiscoveredServerItem, ServerType } from '/@/shared/types/types';
type JellyfinResponse = {
Address: string;
Id: string;
Name: string;
};
function discoverAll(reply: (server: DiscoveredServerItem) => void) {
return Promise.all([discoverJellyfin(reply)]);
}
function discoverJellyfin(reply: (server: DiscoveredServerItem) => void) {
const sock = createSocket('udp4');
sock.on('message', (msg) => {
try {
const response: JellyfinResponse = JSON.parse(msg.toString('utf-8'));
reply({
name: response.Name,
type: ServerType.JELLYFIN,
url: response.Address,
});
} catch (e) {
// Got a spurious response, ignore?
console.error(e);
}
});
sock.bind(() => {
sock.setBroadcast(true);
// Send a broadcast packet to both loopback and default route, allowing discovery of same-machine instances
sock.send('who is JellyfinServer?', 7359, '127.255.255.255');
sock.send('who is JellyfinServer?', 7359, '255.255.255.255');
});
return new Promise<void>((resolve) => {
setTimeout(() => {
sock.close();
resolve();
}, 3000);
});
}
ipcMain.on('autodiscover-ping', (ev) => {
if (ev.ports.length === 0) throw new Error('Expected a port to stream autodiscovery results');
const port = ev.ports[0];
discoverAll((result) => port.postMessage(result))
.then(() => port.close())
.catch((err) => console.error(err));
});
+13 -4
View File
@@ -5,16 +5,20 @@ const FEISHIN_DISCORD_APPLICATION_ID = '1165957668758900787';
let client: Client | null = null;
const createClient = (clientId?: string) => {
const createClient = async (clientId?: string) => {
client = new Client({
clientId: clientId || FEISHIN_DISCORD_APPLICATION_ID,
});
client.login();
await client.login();
return client;
};
const isConnected = () => {
return client?.isConnected;
};
const setActivity = (activity: SetActivity) => {
if (client) {
client.user?.setActivity({
@@ -35,8 +39,12 @@ const quit = () => {
}
};
ipcMain.handle('discord-rpc-initialize', (_event, clientId?: string) => {
createClient(clientId);
ipcMain.handle('discord-rpc-initialize', async (_event, clientId?: string) => {
await createClient(clientId);
});
ipcMain.handle('discord-rpc-is-connected', () => {
return isConnected();
});
ipcMain.handle('discord-rpc-set-activity', (_event, activity: SetActivity) => {
@@ -58,6 +66,7 @@ ipcMain.handle('discord-rpc-quit', () => {
export const discordRpc = {
clearActivity,
createClient,
isConnected,
quit,
setActivity,
};
+1
View File
@@ -1,3 +1,4 @@
import './autodiscover';
import './lyrics';
import './player';
import './remote';
+58 -2
View File
@@ -6,6 +6,7 @@ import {
LyricSearchQuery,
LyricSource,
} from '.';
import { store } from '../settings';
import { orderSearchResults } from './shared';
const SEARCH_URL = 'https://music.163.com/api/search/get';
@@ -76,14 +77,20 @@ export async function getLyricsBySongId(songId: string): Promise<null | string>
id: songId,
kv: '-1',
lv: '-1',
tv: '-1',
},
});
} catch (e) {
console.error('NetEase lyrics request got an error!', e);
return null;
}
return result.data.klyric?.lyric || result.data.lrc?.lyric;
const enableTranslation = store.get('enableNeteaseTranslation', false) as boolean;
const originalLrc = result.data.lrc?.lyric;
if (!enableTranslation) {
return originalLrc || null;
}
const translatedLrc = result.data.tlyric?.lyric;
return mergeLyrics(originalLrc, translatedLrc);
}
export async function getSearchResults(
@@ -166,3 +173,52 @@ async function getMatchedLyrics(
return firstMatch;
}
function mergeLyrics(original: string | undefined, translated: string | undefined): null | string {
if (!original) {
return null;
}
if (!translated) {
return original;
}
const lrcLineRegex = /\[(\d{2}:\d{2}\.\d{2,3})\](.*)/;
const translatedMap = new Map<string, string>();
// Parse the translated LRC and store it in a Map for efficient timestamp-based lookups.
translated.split('\n').forEach((line) => {
const match = line.match(lrcLineRegex);
if (match) {
const timestamp = match[1];
const text = match[2].trim();
if (text) {
translatedMap.set(timestamp, text);
}
}
});
if (translatedMap.size === 0) {
return original;
}
// Iterate through each line of the original LRC. If a translation exists for the same timestamp, append the translated text after the original text.
const finalLines = original.split('\n').map((line) => {
const match = line.match(lrcLineRegex);
if (match) {
const timestamp = match[1];
const originalText = match[2].trim();
const translatedText = translatedMap.get(timestamp);
if (translatedText && originalText) {
// Append and add a break delimiter to separate the original and translated text
return [`[${timestamp}]${originalText}`, translatedText].join('_BREAK_');
}
}
// If no match or no translation is found, return the original line unchanged.
return line;
});
return finalLines.join('\n');
}
+1 -1
View File
@@ -105,7 +105,7 @@ const createMpv = async (data: {
try {
await mpv.start();
} catch (error: any) {
console.log('mpv failed to start', error);
console.error('mpv failed to start', error);
} finally {
await mpv.setMultipleProperties(properties || {});
}
+1 -1
View File
@@ -405,7 +405,7 @@ const enableServer = (config: RemoteConfig): Promise<void> => {
}
case 'proxy': {
const toFetch = currentState.song?.imageUrl?.replaceAll(
/&(size|width|height=\d+)/g,
/&(size|width|height)=\d+/g,
'',
);
+5 -1
View File
@@ -107,6 +107,10 @@ mprisPlayer.on('seek', (event: number) => {
});
});
mprisPlayer.on('raise', () => {
getMainWindow()?.show();
});
ipcMain.on('update-position', (_event, arg: number) => {
mprisPlayer.getPosition = () => arg * 1e6;
});
@@ -177,7 +181,7 @@ ipcMain.on('update-song', (_event, song: QueueSong | undefined) => {
'xesam:userRating': song.userRating ? song.userRating / 5 : null,
};
} catch (err) {
console.log(err);
console.error(err);
}
});
+41 -7
View File
@@ -9,6 +9,7 @@ import {
nativeImage,
nativeTheme,
net,
powerSaveBlocker,
protocol,
Rectangle,
screen,
@@ -43,13 +44,17 @@ export default class AppUpdater {
log.transports.file.level = 'info';
autoUpdater.logger = autoUpdaterLogInterface;
autoUpdater.checkForUpdatesAndNotify();
if (store.get('release_channel') === 'beta') {
autoUpdater.channel = 'beta';
}
}
}
protocol.registerSchemesAsPrivileged([{ privileges: { bypassCSP: true }, scheme: 'feishin' }]);
process.on('uncaughtException', (error: any) => {
console.log('Error in main process', error);
console.error('Error in main process', error);
});
if (store.get('ignore_ssl')) {
@@ -66,6 +71,7 @@ let mainWindow: BrowserWindow | null = null;
let tray: null | Tray = null;
let exitFromTray = false;
let forceQuit = false;
let powerSaveBlockerId: null | number = null;
if (process.env.NODE_ENV === 'production') {
import('source-map-support').then((sourceMapSupport) => {
@@ -421,9 +427,6 @@ async function createWindow(first = true): Promise<void> {
store.set('fullscreen', mainWindow?.isFullScreen());
if (!exitFromTray && store.get('window_exit_to_tray')) {
if (isMacOS() && !forceQuit) {
exitFromTray = true;
}
event.preventDefault();
mainWindow?.hide();
}
@@ -432,8 +435,6 @@ async function createWindow(first = true): Promise<void> {
event.preventDefault();
saved = true;
getMainWindow()?.webContents.send('renderer-save-queue');
ipcMain.once('player-save-queue', async (_event, data: Record<string, any>) => {
const queueLocation = join(app.getPath('userData'), 'queue');
const serialized = JSON.stringify(data);
@@ -457,12 +458,19 @@ async function createWindow(first = true): Promise<void> {
} catch (error) {
console.error('error saving queue state: ', error);
} finally {
mainWindow?.close();
if (!isMacOS()) {
mainWindow?.close();
}
if (forceQuit) {
app.exit();
}
}
});
getMainWindow()?.webContents.send('renderer-save-queue');
} else {
if (forceQuit) {
app.exit();
}
}
});
@@ -486,6 +494,10 @@ async function createWindow(first = true): Promise<void> {
const menuBuilder = new MenuBuilder(mainWindow);
menuBuilder.buildMenu();
if (process.platform !== 'darwin') {
Menu.setApplicationMenu(null);
}
// Open URLs in the user's browser
mainWindow.webContents.setWindowOpenHandler((edata) => {
shell.openExternal(edata.url);
@@ -613,6 +625,28 @@ ipcMain.on(
},
);
ipcMain.handle('power-save-blocker-start', () => {
if (powerSaveBlockerId !== null) {
return powerSaveBlockerId;
}
powerSaveBlockerId = powerSaveBlocker.start('prevent-display-sleep');
return powerSaveBlockerId;
});
ipcMain.handle('power-save-blocker-stop', () => {
if (powerSaveBlockerId !== null) {
const stopped = powerSaveBlocker.stop(powerSaveBlockerId);
powerSaveBlockerId = null;
return stopped;
}
return false;
});
ipcMain.handle('power-save-blocker-is-started', () => {
return powerSaveBlockerId !== null && powerSaveBlocker.isStarted(powerSaveBlockerId);
});
app.on('window-all-closed', () => {
globalShortcut.unregisterAll();
// Respect the OSX convention of having the application in memory even
+23
View File
@@ -0,0 +1,23 @@
import { ipcRenderer } from 'electron';
import { DiscoveredServerItem } from '../shared/types/types';
const discover = (onReply: (server: DiscoveredServerItem) => void): Promise<void> => {
const { port1: local, port2: remote } = new MessageChannel();
ipcRenderer.postMessage('autodiscover-ping', {}, [remote]);
local.onmessage = (ev) => {
onReply(ev.data);
};
return new Promise<void>((resolve) => {
local.addEventListener('close', () => resolve());
});
};
export const autodiscover = {
discover,
};
export type AutoDiscover = typeof autodiscover;
+6
View File
@@ -6,6 +6,11 @@ const initialize = (clientId: string) => {
return client;
};
const isConnected = () => {
const isConnected = ipcRenderer.invoke('discord-rpc-is-connected');
return isConnected;
};
const clearActivity = () => {
ipcRenderer.invoke('discord-rpc-clear-activity');
};
@@ -21,6 +26,7 @@ const quit = () => {
export const discordRpc = {
clearActivity,
initialize,
isConnected,
quit,
setActivity,
};
+2
View File
@@ -1,6 +1,7 @@
import { electronAPI } from '@electron-toolkit/preload';
import { contextBridge } from 'electron';
import { autodiscover } from './autodiscover';
import { browser } from './browser';
import { discordRpc } from './discord-rpc';
import { ipc } from './ipc';
@@ -13,6 +14,7 @@ import { utils } from './utils';
// Custom APIs for renderer
const api = {
autodiscover,
browser,
discordRpc,
ipc,
+5
View File
@@ -8,7 +8,12 @@ const send = (channel: string, ...args: any[]) => {
ipcRenderer.send(channel, ...args);
};
const invoke = (channel: string, ...args: any[]) => {
return ipcRenderer.invoke(channel, ...args);
};
export const ipc = {
invoke,
removeAllListeners,
send,
};
+10 -67
View File
@@ -1,10 +1,15 @@
import { MantineProvider } from '@mantine/core';
import { useEffect } from 'react';
import '@mantine/core/styles.css';
import '@mantine/notifications/styles.css';
import './styles/global.scss';
import '/@/shared/styles/global.css';
import { useEffect } from 'react';
import { Shell } from '/@/remote/components/shell';
import { useIsDark, useReconnect } from '/@/remote/store';
import { useAppTheme } from '/@/renderer/themes/use-app-theme';
import { AppTheme } from '/@/shared/themes/app-theme-types';
export const App = () => {
const isDark = useIsDark();
@@ -14,72 +19,10 @@ export const App = () => {
reconnect();
}, [reconnect]);
const { mode, theme } = useAppTheme(isDark ? AppTheme.DEFAULT_DARK : AppTheme.DEFAULT_LIGHT);
return (
<MantineProvider
theme={{
colorScheme: isDark ? 'dark' : 'light',
components: {
AppShell: {
styles: {
body: {
height: '100vh',
overflow: 'scroll',
},
},
},
Modal: {
styles: {
body: {
background: 'var(--modal-bg)',
height: '100vh',
},
close: { marginRight: '0.5rem' },
content: { borderRadius: '5px' },
header: {
background: 'var(--modal-header-bg)',
paddingBottom: '1rem',
},
title: { fontSize: 'medium', fontWeight: 500 },
},
},
},
defaultRadius: 'xs',
dir: 'ltr',
focusRing: 'auto',
focusRingStyles: {
inputStyles: () => ({
border: '1px solid var(--primary-color)',
}),
resetStyles: () => ({ outline: 'none' }),
styles: () => ({
outline: '1px solid var(--primary-color)',
outlineOffset: '-1px',
}),
},
fontFamily: 'var(--content-font-family)',
fontSizes: {
lg: '1.1rem',
md: '1rem',
sm: '0.9rem',
xl: '1.5rem',
xs: '0.8rem',
},
headings: {
fontFamily: 'var(--content-font-family)',
fontWeight: 700,
},
other: {},
spacing: {
lg: '2rem',
md: '1rem',
sm: '0.5rem',
xl: '4rem',
xs: '0rem',
},
}}
withGlobalStyles
withNormalizeCSS
>
<MantineProvider defaultColorScheme={mode} theme={theme}>
<Shell />
</MantineProvider>
);
@@ -1,21 +1,21 @@
import { CiImageOff, CiImageOn } from 'react-icons/ci';
import { RemoteButton } from '/@/remote/components/buttons/remote-button';
import { useShowImage, useToggleShowImage } from '/@/remote/store';
import { ActionIcon } from '/@/shared/components/action-icon/action-icon';
export const ImageButton = () => {
const showImage = useShowImage();
const toggleImage = useToggleShowImage();
return (
<RemoteButton
mr={5}
<ActionIcon
onClick={() => toggleImage()}
size="xl"
tooltip={showImage ? 'Hide Image' : 'Show Image'}
tooltip={{
label: showImage ? 'Hide Image' : 'Show Image',
}}
variant="default"
>
{showImage ? <CiImageOff size={30} /> : <CiImageOn size={30} />}
</RemoteButton>
</ActionIcon>
);
};
@@ -1,22 +1,24 @@
import { RiRestartLine } from 'react-icons/ri';
import { RemoteButton } from '/@/remote/components/buttons/remote-button';
import { useConnected, useReconnect } from '/@/remote/store';
import { ActionIcon } from '/@/shared/components/action-icon/action-icon';
export const ReconnectButton = () => {
const connected = useConnected();
const reconnect = useReconnect();
return (
<RemoteButton
$active={!connected}
mr={5}
<ActionIcon
onClick={() => reconnect()}
size="xl"
tooltip={connected ? 'Reconnect' : 'Not connected. Reconnect.'}
tooltip={{
label: connected ? 'Reconnect' : 'Not connected. Reconnect.',
}}
variant="default"
>
<RiRestartLine size={30} />
</RemoteButton>
<RiRestartLine
color={connected ? 'var(--theme-colors-primary)' : 'var(--theme-colors-foreground)'}
size={30}
/>
</ActionIcon>
);
};
@@ -1,53 +0,0 @@
import { Button, type ButtonProps as MantineButtonProps, Tooltip } from '@mantine/core';
import { forwardRef, MouseEvent, ReactNode, Ref } from 'react';
import styled from 'styled-components';
export interface ButtonProps extends StyledButtonProps {
tooltip: string;
}
interface StyledButtonProps extends MantineButtonProps {
$active?: boolean;
children: ReactNode;
onClick?: (e: MouseEvent<HTMLButtonElement, MouseEvent>) => void;
onMouseDown?: (e: MouseEvent<HTMLButtonElement, MouseEvent>) => void;
ref: Ref<HTMLButtonElement>;
}
const StyledButton = styled(Button)<StyledButtonProps>`
svg {
display: flex;
fill: ${({ $active: active }) =>
active ? 'var(--primary-color)' : 'var(--playerbar-btn-fg)'};
stroke: var(--playerbar-btn-fg);
}
&:hover {
background: var(--playerbar-btn-bg-hover);
svg {
fill: ${({ $active: active }) =>
active
? 'var(--primary-color) !important'
: 'var(--playerbar-btn-fg-hover) !important'};
}
}
`;
export const RemoteButton = forwardRef<HTMLButtonElement, any>(
({ children, tooltip, ...props }: any, ref) => {
return (
<Tooltip
label={tooltip}
withinPortal
>
<StyledButton
{...props}
ref={ref}
>
{children}
</StyledButton>
</Tooltip>
);
},
);
+12 -16
View File
@@ -1,28 +1,24 @@
import { useEffect } from 'react';
import { RiMoonLine, RiSunLine } from 'react-icons/ri';
import { RemoteButton } from '/@/remote/components/buttons/remote-button';
import { useIsDark, useToggleDark } from '/@/remote/store';
import { AppTheme } from '/@/shared/types/domain-types';
import { ActionIcon } from '/@/shared/components/action-icon/action-icon';
import { Icon } from '/@/shared/components/icon/icon';
export const ThemeButton = () => {
const isDark = useIsDark();
const toggleDark = useToggleDark();
useEffect(() => {
const targetTheme: AppTheme = isDark ? AppTheme.DEFAULT_DARK : AppTheme.DEFAULT_LIGHT;
document.body.setAttribute('data-theme', targetTheme);
}, [isDark]);
const handleToggleTheme = () => {
toggleDark();
};
return (
<RemoteButton
mr={5}
onClick={() => toggleDark()}
size="xl"
tooltip="Toggle Theme"
<ActionIcon
onClick={handleToggleTheme}
tooltip={{
label: 'Toggle Theme',
}}
variant="default"
>
{isDark ? <RiSunLine size={30} /> : <RiMoonLine size={30} />}
</RemoteButton>
{isDark ? <Icon icon="themeLight" size={30} /> : <Icon icon="themeDark" size={30} />}
</ActionIcon>
);
};
@@ -0,0 +1,7 @@
.container {
width: 100%;
height: 40vh;
aspect-ratio: 1/1;
object-fit: var(--theme-image-fit);
border-radius: var(--theme-radius-md);
}
+18
View File
@@ -0,0 +1,18 @@
import styles from './player-image.module.css';
import { useSend } from '/@/remote/store';
interface PlayerImageProps {
src?: null | string;
}
export const PlayerImage = ({ src }: PlayerImageProps) => {
const send = useSend();
return (
<img
className={styles.container}
onError={() => send({ event: 'proxy' })}
src={src?.replaceAll(/&(size|width|height)=\d+/g, '')}
/>
);
};
+173 -137
View File
@@ -1,22 +1,18 @@
import { Group, Image, Rating, Text, Title, Tooltip } from '@mantine/core';
import formatDuration from 'format-duration';
import debounce from 'lodash/debounce';
import { useCallback } from 'react';
import {
RiHeartLine,
RiPauseFill,
RiPlayFill,
RiRepeat2Line,
RiRepeatOneLine,
RiShuffleFill,
RiSkipBackFill,
RiSkipForwardFill,
RiVolumeUpFill,
} from 'react-icons/ri';
import { RiPauseFill, RiPlayFill, RiVolumeUpFill } from 'react-icons/ri';
import { RemoteButton } from '/@/remote/components/buttons/remote-button';
import { WrapperSlider } from '/@/remote/components/wrapped-slider';
import { PlayerImage } from '/@/remote/components/player-image';
import { WrappedSlider } from '/@/remote/components/wrapped-slider';
import { useInfo, useSend, useShowImage } from '/@/remote/store';
import { ActionIcon } from '/@/shared/components/action-icon/action-icon';
import { Flex } from '/@/shared/components/flex/flex';
import { Group } from '/@/shared/components/group/group';
import { Rating } from '/@/shared/components/rating/rating';
import { Stack } from '/@/shared/components/stack/stack';
import { Text } from '/@/shared/components/text/text';
import { Tooltip } from '/@/shared/components/tooltip/tooltip';
import { PlayerRepeat, PlayerStatus } from '/@/shared/types/types';
export const RemoteContainer = () => {
@@ -36,38 +32,98 @@ export const RemoteContainer = () => {
const debouncedSetRating = debounce(setRating, 400);
return (
<>
{id && (
<>
<Title order={1}>{song.name}</Title>
<Group align="flex-end">
<Title order={2}>Album: {song.album}</Title>
<Title order={2}>Artist: {song.artistName}</Title>
</Group>
<Group position="apart">
<Title order={3}>Duration: {formatDuration(song.duration)}</Title>
{song.releaseDate && (
<Title order={3}>
Released: {new Date(song.releaseDate).toLocaleDateString()}
</Title>
)}
<Title order={3}>Plays: {song.playCount}</Title>
</Group>
</>
<Stack gap="md" h="100dvh" w="100%">
{showImage && (
<Flex align="center" justify="center" w="100%">
<PlayerImage src={song?.imageUrl} />
</Flex>
)}
<Group
grow
spacing={0}
>
<RemoteButton
{id && (
<Stack gap="xs">
<Text
fw={700}
size="xl"
style={{
overflow: 'hidden',
textOverflow: 'ellipsis',
whiteSpace: 'nowrap',
}}
>
{song.name}
</Text>
<Text
isMuted
style={{
overflow: 'hidden',
textOverflow: 'ellipsis',
whiteSpace: 'nowrap',
}}
>
{song.album}
</Text>
<Text
isMuted
style={{
overflow: 'hidden',
textOverflow: 'ellipsis',
whiteSpace: 'nowrap',
}}
>
{song.artistName}
</Text>
<Group justify="space-between">
{song.releaseDate && (
<Text isMuted>{new Date(song.releaseDate).toLocaleDateString()}</Text>
)}
<Text isMuted>Plays: {song.playCount}</Text>
</Group>
</Stack>
)}
<Group gap={0} grow>
<ActionIcon
disabled={!id}
icon="favorite"
iconProps={{
fill: song?.userFavorite ? 'primary' : 'default',
}}
onClick={() => {
if (!id) return;
send({ event: 'favorite', favorite: !song.userFavorite, id });
}}
tooltip={{
label: song?.userFavorite ? 'Unfavorite' : 'Favorite',
}}
variant="transparent"
/>
{(song?.serverType === 'navidrome' || song?.serverType === 'subsonic') && (
<div style={{ margin: 'auto' }}>
<Tooltip label="Double click to clear" openDelay={1000}>
<Rating
onChange={debouncedSetRating}
onDoubleClick={() => debouncedSetRating(0)}
style={{ margin: 'auto' }}
value={song.userRating ?? 0}
/>
</Tooltip>
</div>
)}
</Group>
<Group gap="xs" grow>
<ActionIcon
disabled={!id}
icon="mediaPrevious"
iconProps={{
fill: 'default',
size: 'lg',
}}
onClick={() => send({ event: 'previous' })}
tooltip="Previous track"
tooltip={{
label: 'Previous track',
}}
variant="default"
>
<RiSkipBackFill size={25} />
</RemoteButton>
<RemoteButton
/>
<ActionIcon
disabled={!id}
onClick={() => {
if (status === PlayerStatus.PLAYING) {
@@ -76,7 +132,9 @@ export const RemoteContainer = () => {
send({ event: 'play' });
}
}}
tooltip={id && status === PlayerStatus.PLAYING ? 'Pause' : 'Play'}
tooltip={{
label: id && status === PlayerStatus.PLAYING ? 'Pause' : 'Play',
}}
variant="default"
>
{id && status === PlayerStatus.PLAYING ? (
@@ -84,105 +142,83 @@ export const RemoteContainer = () => {
) : (
<RiPlayFill size={25} />
)}
</RemoteButton>
<RemoteButton
</ActionIcon>
<ActionIcon
disabled={!id}
onClick={() => send({ event: 'next' })}
tooltip="Next track"
variant="default"
>
<RiSkipForwardFill size={25} />
</RemoteButton>
</Group>
<Group
grow
spacing={0}
>
<RemoteButton
$active={shuffle || false}
onClick={() => send({ event: 'shuffle' })}
tooltip={shuffle ? 'Shuffle tracks' : 'Shuffle disabled'}
variant="default"
>
<RiShuffleFill size={25} />
</RemoteButton>
<RemoteButton
$active={repeat !== undefined && repeat !== PlayerRepeat.NONE}
onClick={() => send({ event: 'repeat' })}
tooltip={`Repeat ${
repeat === PlayerRepeat.ONE
? 'One'
: repeat === PlayerRepeat.ALL
? 'all'
: 'none'
}`}
variant="default"
>
{repeat === undefined || repeat === PlayerRepeat.ONE ? (
<RiRepeatOneLine size={25} />
) : (
<RiRepeat2Line size={25} />
)}
</RemoteButton>
<RemoteButton
$active={song?.userFavorite}
disabled={!id}
onClick={() => {
if (!id) return;
send({ event: 'favorite', favorite: !song.userFavorite, id });
icon="mediaNext"
iconProps={{
fill: 'default',
size: 'lg',
}}
onClick={() => send({ event: 'next' })}
tooltip={{
label: 'Next track',
}}
tooltip={song?.userFavorite ? 'Unfavorite' : 'Favorite'}
variant="default"
>
<RiHeartLine size={25} />
</RemoteButton>
{(song?.serverType === 'navidrome' || song?.serverType === 'subsonic') && (
<div style={{ margin: 'auto' }}>
<Tooltip
label="Double click to clear"
openDelay={1000}
>
<Rating
onChange={debouncedSetRating}
onDoubleClick={() => debouncedSetRating(0)}
sx={{ margin: 'auto' }}
value={song.userRating ?? 0}
/>
</Tooltip>
</div>
)}
/>
</Group>
{id && position !== undefined && (
<WrapperSlider
label={(value) => formatDuration(value * 1e3)}
leftLabel={formatDuration(position * 1e3)}
max={song.duration / 1e3}
onChangeEnd={(e) => send({ event: 'position', position: e })}
rightLabel={formatDuration(song.duration)}
value={position}
<Group gap="xs" grow>
<ActionIcon
icon="mediaShuffle"
iconProps={{
fill: shuffle ? 'primary' : 'default',
size: 'lg',
}}
onClick={() => send({ event: 'shuffle' })}
tooltip={{
label: shuffle ? 'Shuffle tracks' : 'Shuffle disabled',
}}
variant="default"
/>
)}
<WrapperSlider
leftLabel={<RiVolumeUpFill size={20} />}
max={100}
onChangeEnd={(e) => send({ event: 'volume', volume: e })}
rightLabel={
<Text
size="xs"
weight={600}
>
{volume ?? 0}
</Text>
}
value={volume ?? 0}
/>
{showImage && (
<Image
onError={() => send({ event: 'proxy' })}
src={song?.imageUrl?.replaceAll(/&(size|width|height=\d+)/g, '')}
<ActionIcon
icon={
repeat === undefined || repeat === PlayerRepeat.ONE
? 'mediaRepeatOne'
: 'mediaRepeat'
}
iconProps={{
fill:
repeat !== undefined && repeat !== PlayerRepeat.NONE
? 'primary'
: 'default',
size: 'lg',
}}
onClick={() => send({ event: 'repeat' })}
tooltip={{
label: `Repeat ${
repeat === PlayerRepeat.ONE
? 'One'
: repeat === PlayerRepeat.ALL
? 'all'
: 'none'
}`,
}}
variant="default"
/>
)}
</>
</Group>
<Stack gap="lg">
{id && position !== undefined && (
<WrappedSlider
label={(value) => formatDuration(value * 1e3)}
leftLabel={formatDuration(position * 1e3)}
max={song.duration / 1e3}
onChangeEnd={(e) => send({ event: 'position', position: e })}
rightLabel={formatDuration(song.duration)}
value={position}
/>
)}
<WrappedSlider
leftLabel={<RiVolumeUpFill size={20} />}
max={100}
onChangeEnd={(e) => send({ event: 'volume', volume: e })}
rightLabel={
<Text fw={600} size="xs">
{volume ?? 0}
</Text>
}
value={volume ?? 0}
/>
</Stack>
</Stack>
);
};
+33 -57
View File
@@ -1,76 +1,52 @@
import {
AppShell,
Container,
Flex,
Grid,
Header,
Image,
MediaQuery,
Skeleton,
Title,
} from '@mantine/core';
import { AppShell, Flex, Grid, Image } from '@mantine/core';
import { ImageButton } from '/@/remote/components/buttons/image-button';
import { ReconnectButton } from '/@/remote/components/buttons/reconnect-button';
import { ThemeButton } from '/@/remote/components/buttons/theme-button';
import { RemoteContainer } from '/@/remote/components/remote-container';
import { useConnected } from '/@/remote/store';
import { Center } from '/@/shared/components/center/center';
import { Group } from '/@/shared/components/group/group';
import { Spinner } from '/@/shared/components/spinner/spinner';
export const Shell = () => {
const connected = useConnected();
return (
<AppShell
header={
<Header height={60}>
<Grid>
<Grid.Col span="auto">
<div>
<Image
fit="contain"
height={60}
src="/favicon.ico"
width={60}
/>
</div>
</Grid.Col>
<MediaQuery
smallerThan="sm"
styles={{ display: 'none' }}
<AppShell h="100vh" padding="md" w="100vw">
<AppShell.Header style={{ background: 'var(--theme-colors-surface)' }}>
<Grid px="md" py="sm">
<Grid.Col span={4}>
<Flex
align="center"
direction="row"
h="100%"
justify="flex-start"
style={{
justifySelf: 'flex-start',
}}
>
<Grid.Col
sm={6}
xs={0}
>
<Title ta="center">Feishin Remote</Title>
</Grid.Col>
</MediaQuery>
<Grid.Col span="auto">
<Flex
direction="row"
justify="right"
>
<ReconnectButton />
<ImageButton />
<ThemeButton />
</Flex>
</Grid.Col>
</Grid>
</Header>
}
padding="md"
>
<Container>
<Image fit="contain" height={32} src="/favicon.ico" width={32} />
</Flex>
</Grid.Col>
<Grid.Col span={8}>
<Group gap="sm" justify="flex-end" wrap="nowrap">
<ReconnectButton />
<ImageButton />
<ThemeButton />
</Group>
</Grid.Col>
</Grid>
</AppShell.Header>
<AppShell.Main pt="60px">
{connected ? (
<RemoteContainer />
) : (
<Skeleton
height={300}
width="100%"
/>
<Center h="100vh" w="100vw">
<Spinner />
</Center>
)}
</Container>
</AppShell.Main>
</AppShell>
);
};
+23 -48
View File
@@ -1,40 +1,17 @@
import { rem, Slider, SliderProps } from '@mantine/core';
import { ReactNode, useState } from 'react';
import styled from 'styled-components';
const SliderContainer = styled.div`
display: flex;
width: 95%;
height: 20px;
margin: 10px 0;
`;
const SliderValueWrapper = styled.div<{ $position: 'left' | 'right' }>`
display: flex;
flex: 1;
align-self: flex-end;
justify-content: center;
max-width: 50px;
`;
const SliderWrapper = styled.div`
display: flex;
flex: 6;
align-items: center;
height: 100%;
`;
import { Group } from '/@/shared/components/group/group';
import { Text } from '/@/shared/components/text/text';
const PlayerbarSlider = ({ ...props }: SliderProps) => {
return (
<Slider
styles={{
bar: {
backgroundColor: 'var(--playerbar-slider-track-progress-bg)',
transition: 'background-color 0.2s ease',
},
label: {
backgroundColor: 'var(--tooltip-bg)',
color: 'var(--tooltip-fg)',
fontSize: '1.1rem',
fontWeight: 600,
padding: '0 1rem',
@@ -59,9 +36,9 @@ const PlayerbarSlider = ({ ...props }: SliderProps) => {
},
track: {
'&::before': {
backgroundColor: 'var(--playerbar-slider-track-bg)',
right: 'calc(0.1rem * -1)',
},
height: '1rem',
},
}}
{...props}
@@ -79,31 +56,29 @@ export interface WrappedProps extends Omit<SliderProps, 'onChangeEnd'> {
value: number;
}
export const WrapperSlider = ({ leftLabel, rightLabel, value, ...props }: WrappedProps) => {
export const WrappedSlider = ({ leftLabel, rightLabel, value, ...props }: WrappedProps) => {
const [isSeeking, setIsSeeking] = useState(false);
const [seek, setSeek] = useState(0);
return (
<SliderContainer>
{leftLabel && <SliderValueWrapper $position="left">{leftLabel}</SliderValueWrapper>}
<SliderWrapper>
<PlayerbarSlider
{...props}
min={0}
onChange={(e) => {
setIsSeeking(true);
setSeek(e);
}}
onChangeEnd={(e) => {
props.onChangeEnd(e);
setIsSeeking(false);
}}
size={6}
value={!isSeeking ? (value ?? 0) : seek}
w="100%"
/>
</SliderWrapper>
{rightLabel && <SliderValueWrapper $position="right">{rightLabel}</SliderValueWrapper>}
</SliderContainer>
<Group align="center" wrap="nowrap">
{leftLabel && <Text size="sm">{leftLabel}</Text>}
<PlayerbarSlider
{...props}
min={0}
onChange={(e) => {
setIsSeeking(true);
setSeek(e);
}}
onChangeEnd={(e) => {
props.onChangeEnd(e);
setIsSeeking(false);
}}
size={6}
value={!isSeeking ? (value ?? 0) : seek}
w="100%"
/>
{rightLabel && <Text size="sm">{rightLabel}</Text>}
</Group>
);
};
+3
View File
@@ -5,6 +5,9 @@
<meta charset="utf-8" />
<meta http-equiv="Content-Security-Policy" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />
<title>Feishin Remote</title>
<link rel="manifest" href="manifest.json">
<script>
+1 -10
View File
@@ -1,4 +1,3 @@
import { Notifications } from '@mantine/notifications';
import { createRoot } from 'react-dom/client';
import { App } from '/@/remote/app';
@@ -6,12 +5,4 @@ import { App } from '/@/remote/app';
const container = document.getElementById('root')! as HTMLElement;
const root = createRoot(container);
root.render(
<>
<Notifications
containerWidth="300px"
position="bottom-center"
/>
<App />
</>,
);
root.render(<App />);
+3 -53
View File
@@ -1,11 +1,9 @@
import type { NotificationProps as MantineNotificationProps } from '@mantine/notifications';
import { hideNotification, showNotification } from '@mantine/notifications';
import merge from 'lodash/merge';
import { create } from 'zustand';
import { devtools, persist } from 'zustand/middleware';
import { immer } from 'zustand/middleware/immer';
import { createWithEqualityFn } from 'zustand/traditional';
import { toast } from '/@/shared/components/toast/toast';
import { ClientEvent, ServerEvent, SongUpdateSocket } from '/@/shared/types/remote-types';
export interface SettingsSlice extends SettingsState {
@@ -36,55 +34,7 @@ const initialState: SettingsState = {
showImage: true,
};
interface NotificationProps extends MantineNotificationProps {
type?: 'error' | 'warning';
}
const showToast = ({ type, ...props }: NotificationProps) => {
const color = type === 'warning' ? 'var(--warning-color)' : 'var(--danger-color)';
const defaultTitle = type === 'warning' ? 'Warning' : 'Error';
const defaultDuration = type === 'error' ? 2000 : 1000;
return showNotification({
autoClose: defaultDuration,
styles: () => ({
closeButton: {
'&:hover': {
background: 'transparent',
},
},
description: {
color: 'var(--toast-description-fg)',
fontSize: '1rem',
},
loader: {
margin: '1rem',
},
root: {
'&::before': { backgroundColor: color },
background: 'var(--toast-bg)',
border: '2px solid var(--generic-border-color)',
bottom: '90px',
},
title: {
color: 'var(--toast-title-fg)',
fontSize: '1.3rem',
},
}),
title: defaultTitle,
...props,
});
};
const toast = {
error: (props: NotificationProps) => showToast({ type: 'error', ...props }),
hide: hideNotification,
warn: (props: NotificationProps) => showToast({ type: 'warning', ...props }),
};
export const useRemoteStore = create<SettingsSlice>()(
export const useRemoteStore = createWithEqualityFn<SettingsSlice>()(
persist(
devtools(
immer((set, get) => ({
-127
View File
@@ -1,127 +0,0 @@
@use '../../renderer/themes/default.scss';
@use '../../renderer/themes/dark.scss';
@use '../../renderer/themes/light.scss';
@use '../../renderer/styles/ag-grid.scss';
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body,
html {
position: absolute;
display: block;
width: 100%;
height: 100%;
overflow-x: hidden;
overflow-y: hidden;
color: var(--content-text-color);
background: var(--content-bg);
font-family: var(--content-font-family);
font-size: var(--root-font-size);
user-select: none;
}
@media only screen and (max-width: 639px) {
body,
html {
overflow-x: auto;
}
}
#app {
height: inherit;
}
*,
*:before,
*:after {
box-sizing: border-box;
text-rendering: optimizeLegibility;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-webkit-text-size-adjust: none;
outline: none;
}
::-webkit-scrollbar {
width: 12px;
height: 12px;
}
::-webkit-scrollbar-corner {
background: var(--scrollbar-track-bg);
}
::-webkit-scrollbar-track {
background: var(--scrollbar-track-bg);
}
::-webkit-scrollbar-thumb {
background: var(--scrollbar-thumb-bg);
}
::-webkit-scrollbar-thumb:hover {
background: var(--scrollbar-thumb-bg-hover);
}
a {
text-decoration: none;
}
button {
-webkit-app-region: no-drag;
}
.overlay-scrollbar {
overflow-y: overlay !important;
overflow-x: overlay !important;
}
.hide-scrollbar {
scrollbar-width: thin;
scrollbar-color: transparent transparent;
&::-webkit-scrollbar {
width: 1px;
}
&::-webkit-scrollbar-track {
background: transparent;
}
&::-webkit-scrollbar-thumb {
background-color: transparent;
}
}
.hide-scrollbar::-webkit-scrollbar {
display: none; /* Safari and Chrome */
}
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@keyframes fadeOut {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
.mantine-ScrollArea-thumb[data-state='visible'] {
animation: fadeIn 0.3s forwards;
}
.mantine-ScrollArea-scrollbar[data-state='hidden'] {
animation: fadeOut 0.2s forwards;
}
+1 -1
View File
@@ -2,8 +2,8 @@ import i18n from '/@/i18n/i18n';
import { JellyfinController } from '/@/renderer/api/jellyfin/jellyfin-controller';
import { NavidromeController } from '/@/renderer/api/navidrome/navidrome-controller';
import { SubsonicController } from '/@/renderer/api/subsonic/subsonic-controller';
import { toast } from '/@/renderer/components/toast/index';
import { useAuthStore } from '/@/renderer/store';
import { toast } from '/@/shared/components/toast/toast';
import {
AuthenticationResponse,
ControllerEndpoint,
+1 -1
View File
@@ -118,7 +118,7 @@ export const contract = c.router({
},
getGenreList: {
method: 'GET',
path: 'genres',
path: 'musicgenres',
query: jfType._parameters.genreList,
responses: {
200: jfType._response.genreList,
@@ -290,19 +290,32 @@ export const JellyfinController: ControllerEndpoint = {
const yearsFilter = yearsGroup.length ? yearsGroup.join(',') : undefined;
let artistQuery:
| Omit<z.infer<typeof jfType._parameters.albumList>, 'IncludeItemTypes'>
| undefined;
if (query.artistIds) {
// Based mostly off of observation, this is the behavior I've seen:
// ContributingArtistIds is the _closest_ to where the album is a compilation and the artist is involved
// AlbumArtistIds is where the artist is an album artist
// ArtistIds is all credits
if (query.compilation) {
artistQuery = {
ContributingArtistIds: formatCommaDelimitedString(query.artistIds),
};
} else if (query.compilation === false) {
artistQuery = { AlbumArtistIds: formatCommaDelimitedString(query.artistIds) };
} else {
artistQuery = { ArtistIds: formatCommaDelimitedString(query.artistIds) };
}
}
const res = await jfApiClient(apiClientProps).getAlbumList({
params: {
userId: apiClientProps.server?.userId,
},
query: {
...(!query.compilation &&
query.artistIds && {
AlbumArtistIds: formatCommaDelimitedString(query.artistIds),
}),
...(query.compilation &&
query.artistIds && {
ContributingArtistIds: query.artistIds[0],
}),
...artistQuery,
Fields: 'People, Tags',
GenreIds: query.genres ? query.genres.join(',') : undefined,
IncludeItemTypes: 'MusicAlbum',
@@ -529,10 +542,6 @@ export const JellyfinController: ControllerEndpoint = {
query: {
Fields: 'Genres, DateCreated, MediaSources, UserData, ParentId, People, Tags',
IncludeItemTypes: 'Audio',
Limit: query.limit,
SortBy: query.sortBy ? songListSortMap.jellyfin[query.sortBy] : undefined,
SortOrder: query.sortOrder ? sortOrderMap.jellyfin[query.sortOrder] : undefined,
StartIndex: query.startIndex,
UserId: apiClientProps.server?.userId,
},
});
@@ -543,7 +552,7 @@ export const JellyfinController: ControllerEndpoint = {
return {
items: res.body.Items.map((item) => jfNormalize.song(item, apiClientProps.server, '')),
startIndex: query.startIndex,
startIndex: 0,
totalRecordCount: res.body.TotalRecordCount,
};
},
@@ -618,30 +627,34 @@ export const JellyfinController: ControllerEndpoint = {
getSimilarSongs: async (args) => {
const { apiClientProps, query } = args;
// Prefer getSimilarSongs, where possible. Fallback to InstantMix
// where no similar songs were found.
const res = await jfApiClient(apiClientProps).getSimilarSongs({
params: {
itemId: query.songId,
},
query: {
Fields: 'Genres, DateCreated, MediaSources, ParentId',
Limit: query.count,
UserId: apiClientProps.server?.userId || undefined,
},
});
if (apiClientProps.server?.preferInstantMix !== true) {
// Prefer getSimilarSongs, where possible, and not overridden.
// InstantMix can be overridden by plugins, so this may be preferred by the user.
// Otherwise, similarSongs may have a better output than InstantMix, if sufficient
// data exists from the server.
const res = await jfApiClient(apiClientProps).getSimilarSongs({
params: {
itemId: query.songId,
},
query: {
Fields: 'Genres, DateCreated, MediaSources, ParentId',
Limit: query.count,
UserId: apiClientProps.server?.userId || undefined,
},
});
if (res.status === 200 && res.body.Items.length) {
const results = res.body.Items.reduce<Song[]>((acc, song) => {
if (song.Id !== query.songId) {
acc.push(jfNormalize.song(song, apiClientProps.server, ''));
if (res.status === 200 && res.body.Items.length) {
const results = res.body.Items.reduce<Song[]>((acc, song) => {
if (song.Id !== query.songId) {
acc.push(jfNormalize.song(song, apiClientProps.server, ''));
}
return acc;
}, []);
if (results.length > 0) {
return results;
}
return acc;
}, []);
if (results.length > 0) {
return results;
}
}
+14 -3
View File
@@ -7,10 +7,10 @@ import qs from 'qs';
import i18n from '/@/i18n/i18n';
import { authenticationFailure } from '/@/renderer/api/utils';
import { toast } from '/@/renderer/components';
import { useAuthStore } from '/@/renderer/store';
import { ndType } from '/@/shared/api/navidrome/navidrome-types';
import { resultWithHeaders } from '/@/shared/api/utils';
import { toast } from '/@/shared/components/toast/toast';
import { ServerListItem } from '/@/shared/types/domain-types';
const localSettings = isElectron() ? window.api.localSettings : null;
@@ -349,7 +349,14 @@ axiosClient.interceptors.response.use(
.catch((newError: any) => {
if (newError !== TIMEOUT_ERROR) {
console.error('Error when trying to reauthenticate: ', newError);
limitedFail(currentServer);
if (isAxiosError(newError) && newError.code === 'ERR_NETWORK') {
console.log(
'Network error during reauthentication - preserving credentials',
);
} else {
limitedFail(currentServer);
}
}
// make sure to pass the error so axios will error later on
@@ -360,7 +367,11 @@ axiosClient.interceptors.response.use(
});
}
limitedFail(currentServer);
if (isAxiosError(error) && error.code === 'ERR_NETWORK') {
console.log('Network error during authentication - preserving credentials');
} else {
limitedFail(currentServer);
}
}
return Promise.reject(error);
@@ -3,9 +3,7 @@ import { ssApiClient } from '/@/renderer/api/subsonic/subsonic-api';
import { SubsonicController } from '/@/renderer/api/subsonic/subsonic-controller';
import { NDSongListSort } from '/@/shared/api/navidrome.types';
import { ndNormalize } from '/@/shared/api/navidrome/navidrome-normalize';
import { ndType } from '/@/shared/api/navidrome/navidrome-types';
import { ssNormalize } from '/@/shared/api/subsonic/subsonic-normalize';
import { SubsonicExtensions } from '/@/shared/api/subsonic/subsonic-types';
import { getFeatures, hasFeature, VersionInfo } from '/@/shared/api/utils';
import {
albumArtistListSortMap,
@@ -22,10 +20,11 @@ import {
sortOrderMap,
userListSortMap,
} from '/@/shared/types/domain-types';
import { ServerFeature, ServerFeatures } from '/@/shared/types/features-types';
import { ServerFeature } from '/@/shared/types/features-types';
const VERSION_INFO: VersionInfo = [
['0.55.0', { [ServerFeature.BFR]: [1] }],
['0.56.0', { [ServerFeature.TRACK_ALBUM_ARTIST_SEARCH]: [1] }],
['0.55.0', { [ServerFeature.BFR]: [1], [ServerFeature.TAGS]: [1] }],
['0.49.3', { [ServerFeature.SHARING_ALBUM_SONG]: [1] }],
['0.48.0', { [ServerFeature.PLAYLISTS_SMART]: [1] }],
];
@@ -56,6 +55,9 @@ const excludeMissing = (server: null | ServerListItem) => {
return undefined;
};
const getArtistSongKey = (server: null | ServerListItem) =>
hasFeature(server, ServerFeature.TRACK_ALBUM_ARTIST_SEARCH) ? 'artists_id' : 'album_artist_id';
export const NavidromeController: ControllerEndpoint = {
addToPlaylist: async (args) => {
const { apiClientProps, body, query } = args;
@@ -187,6 +189,7 @@ export const NavidromeController: ControllerEndpoint = {
name: query.searchTerm,
...query._custom?.navidrome,
role: hasFeature(apiClientProps.server, ServerFeature.BFR) ? 'albumartist' : '',
...excludeMissing(apiClientProps.server),
},
});
@@ -232,6 +235,7 @@ export const NavidromeController: ControllerEndpoint = {
_sort: NDSongListSort.ALBUM,
_start: 0,
album_id: [query.id],
...excludeMissing(apiClientProps.server),
},
});
@@ -267,6 +271,10 @@ export const NavidromeController: ControllerEndpoint = {
getAlbumList: async (args) => {
const { apiClientProps, query } = args;
const genres = hasFeature(apiClientProps.server, ServerFeature.BFR)
? query.genres
: query.genres?.[0];
const res = await ndApiClient(apiClientProps).getAlbumList({
query: {
_end: query.startIndex + (query.limit || 0),
@@ -275,7 +283,7 @@ export const NavidromeController: ControllerEndpoint = {
_start: query.startIndex,
artist_id: query.artistIds?.[0],
compilation: query.compilation,
genre_id: query.genres?.[0],
genre_id: genres,
name: query.searchTerm,
...query._custom?.navidrome,
starred: query.favorite,
@@ -310,6 +318,7 @@ export const NavidromeController: ControllerEndpoint = {
name: query.searchTerm,
...query._custom?.navidrome,
role: query.role || undefined,
...excludeMissing(apiClientProps.server),
},
});
@@ -427,12 +436,10 @@ export const NavidromeController: ControllerEndpoint = {
id: query.id,
},
query: {
_end: query.startIndex + (query.limit || -1),
_order: query.sortOrder ? sortOrderMap.navidrome[query.sortOrder] : 'ASC',
_sort: query.sortBy
? songListSortMap.navidrome[query.sortBy]
: ndType._enum.songList.ID,
_start: query.startIndex,
_end: -1,
_order: 'ASC',
_start: 0,
...excludeMissing(apiClientProps.server),
},
});
@@ -442,7 +449,7 @@ export const NavidromeController: ControllerEndpoint = {
return {
items: res.body.data.map((item) => ndNormalize.song(item, apiClientProps.server)),
startIndex: query?.startIndex || 0,
startIndex: 0,
totalRecordCount: Number(res.body.headers.get('x-total-count') || 0),
};
},
@@ -463,38 +470,20 @@ export const NavidromeController: ControllerEndpoint = {
ping.body.serverVersion = '0.55.0';
}
const navidromeFeatures: Record<string, number[]> = getFeatures(
VERSION_INFO,
ping.body.serverVersion!,
);
const navidromeFeatures = getFeatures(VERSION_INFO, ping.body.serverVersion!);
const subsonicArgs = await SubsonicController.getServerInfo(args);
if (ping.body.openSubsonic) {
const res = await ssApiClient(apiClientProps).getServerInfo();
if (res.status !== 200) {
throw new Error('Failed to get server extensions');
}
// The type here isn't necessarily an array (even though it's supposed to be). This is
// an implementation detail of Navidrome 0.50. Do a type check to make sure it's actually
// an array, and not an empty object.
if (Array.isArray(res.body.openSubsonicExtensions)) {
for (const extension of res.body.openSubsonicExtensions) {
navidromeFeatures[extension.name] = extension.versions;
}
}
}
const features: ServerFeatures = {
bfr: navidromeFeatures[ServerFeature.BFR],
lyricsMultipleStructured: navidromeFeatures[SubsonicExtensions.SONG_LYRICS],
playlistsSmart: navidromeFeatures[ServerFeature.PLAYLISTS_SMART],
const features = {
...navidromeFeatures,
...subsonicArgs.features,
publicPlaylist: [1],
sharingAlbumSong: navidromeFeatures[ServerFeature.SHARING_ALBUM_SONG],
tags: navidromeFeatures[ServerFeature.BFR],
};
return { features, id: apiClientProps.server?.id, version: ping.body.serverVersion! };
return {
features,
id: apiClientProps.server?.id,
version: ping.body.serverVersion!,
};
},
getSimilarSongs: async (args) => {
const { apiClientProps, query } = args;
@@ -531,7 +520,8 @@ export const NavidromeController: ControllerEndpoint = {
_order: 'ASC',
_sort: NDSongListSort.RANDOM,
_start: 0,
album_artist_id: query.albumArtistIds,
[getArtistSongKey(apiClientProps.server)]: query.albumArtistIds,
...excludeMissing(apiClientProps.server),
},
});
@@ -571,10 +561,9 @@ export const NavidromeController: ControllerEndpoint = {
_order: sortOrderMap.navidrome[query.sortOrder],
_sort: songListSortMap.navidrome[query.sortBy],
_start: query.startIndex,
album_artist_id: query.albumArtistIds,
album_id: query.albumIds,
artist_id: query.artistIds,
genre_id: query.genreIds,
[getArtistSongKey(apiClientProps.server)]: query.artistIds ?? query.albumArtistIds,
starred: query.favorite,
title: query.searchTerm,
...query._custom?.navidrome,

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