Compare commits
696 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 49c0ab45f6 | |||
| 8b913595da | |||
| 4e5867e8af | |||
| 7dd6d32710 | |||
| ac7dc37fd0 | |||
| 46b94a83f1 | |||
| 40a1d1438d | |||
| 905088cae7 | |||
| 705b375dab | |||
| 0b537b07ee | |||
| dfa6198bdd | |||
| b9312d86fd | |||
| 30a1bda93d | |||
| 0e24eeeb1c | |||
| 58d4dea09a | |||
| c4da44a443 | |||
| be3f959354 | |||
| deb69ef8ea | |||
| 5ac0aaeec0 | |||
| 515cadb916 | |||
| 4b4d64c7fc | |||
| f7e1198482 | |||
| 7243ed7f15 | |||
| 7e9a78898f | |||
| 6aab8d4121 | |||
| 70594a696b | |||
| 08b4c620f2 | |||
| 7a20cf3853 | |||
| dd186c570f | |||
| d5e9d491b6 | |||
| 28dc822e4f | |||
| def1b1e710 | |||
| 2ff9e4b0a2 | |||
| 49bfc907cd | |||
| 34314bdf46 | |||
| 9d53c53c54 | |||
| 8acd585630 | |||
| 1f5907716f | |||
| 99ae0c99c6 | |||
| a56253cd3a | |||
| a2cdce66bc | |||
| 7454832663 | |||
| 1ed185606d | |||
| d9da588c7c | |||
| e206136156 | |||
| 57b11e0dae | |||
| 2fc130d709 | |||
| 1aa6b88cfa | |||
| 329d028edd | |||
| 4955f30081 | |||
| bf7ca937ff | |||
| 2193fa4251 | |||
| 9124604b89 | |||
| 239ef4a4ec | |||
| f3b72504f1 | |||
| f098f848a3 | |||
| 22d37135ae | |||
| 61c6036d41 | |||
| 95ae474cc6 | |||
| 504bbeed91 | |||
| 0e5b3450dd | |||
| 650ae0b320 | |||
| 66cfab3b57 | |||
| 0455d5bfb8 | |||
| 112449576e | |||
| 3122f4121e | |||
| 28b8894b49 | |||
| 41d5694f1f | |||
| 7befd70e21 | |||
| 0de1e1aa3e | |||
| 6528859ea9 | |||
| 704745eb7c | |||
| 2759cfee97 | |||
| 755f0aab9d | |||
| 0e163543fc | |||
| fad2534d44 | |||
| edfc64d790 | |||
| 8f40894926 | |||
| 2befcb4e74 | |||
| 2d78c32a68 | |||
| 3d0500980a | |||
| 3551ee5077 | |||
| 4008c8dfdf | |||
| 64efbc5210 | |||
| 42e9394246 | |||
| afbe8fac52 | |||
| 2c1be99bd5 | |||
| ada94e5f5d | |||
| c8675ab600 | |||
| 37367a6741 | |||
| e7b65c8e86 | |||
| 3d1095dbd8 | |||
| da4284bac0 | |||
| f3c0b68a0f | |||
| 5a3f2fe96f | |||
| aec5e84758 | |||
| e85acee3e6 | |||
| 406cf470bc | |||
| 167ee03a1f | |||
| 61c8e996d3 | |||
| ed80f06e72 | |||
| adc9e30266 | |||
| fcd4c27fb8 | |||
| c4ef6f3799 | |||
| 073b482fed | |||
| 74939c6417 | |||
| 27a62a2a02 | |||
| ffe59b2c78 | |||
| 4226da94ec | |||
| 6e634972c9 | |||
| 984b85e0e9 | |||
| 9bb38e1df3 | |||
| 4ecd8271a2 | |||
| ce7a319d2f | |||
| 1616021451 | |||
| e2a1d813a9 | |||
| e49e488b4c | |||
| 5d4547080d | |||
| cc8910cfd6 | |||
| 9fb241dca2 | |||
| e3a0879301 | |||
| 953494e9d0 | |||
| f190626c8c | |||
| 324936e0c8 | |||
| 868ec15b16 | |||
| 775c4e68fa | |||
| 34e0c4bd4a | |||
| 323130a877 | |||
| 3b2aab74ac | |||
| bc7ef0624b | |||
| 304ce8b881 | |||
| 01011a49a2 | |||
| d24ca04878 | |||
| 640d38e5a9 | |||
| ac0c074d4b | |||
| 6be5818493 | |||
| 03edd5a639 | |||
| f5eb3f1488 | |||
| 8eab9edb15 | |||
| fcc69980e4 | |||
| 053b78a3fd | |||
| 42ded966e4 | |||
| ea9119431c | |||
| add0345f10 | |||
| e5a8324a79 | |||
| cc4e933c07 | |||
| 382d279dad | |||
| b99899f128 | |||
| f5839bf39c | |||
| 914ed5b8f3 | |||
| ca0a1569f8 | |||
| 9f10fe398a | |||
| 8869278898 | |||
| 16c9e6cc1b | |||
| 2a6e9b6ad3 | |||
| 167b42df2b | |||
| e6a2bc3acf | |||
| ca3c7015c6 | |||
| c7c15d917a | |||
| 6adb29bc38 | |||
| 2c3cd7af24 | |||
| 3c442a2d40 | |||
| d67c185c93 | |||
| ff96a5f121 | |||
| 6fc7b6b271 | |||
| 918f453066 | |||
| 4a986069f8 | |||
| 11d26af893 | |||
| ad13fea033 | |||
| 8a75ec2558 | |||
| 895cbb4d16 | |||
| 3f300c40cc | |||
| c8e8f58cce | |||
| 56cd50e0ed | |||
| 1b2a6dfc1f | |||
| 356f5487b0 | |||
| 37501f2983 | |||
| d61587b16f | |||
| 06b7b53dc9 | |||
| 6c2cd1c274 | |||
| ef129e4638 | |||
| a01b4e664d | |||
| 0b45ab7f36 | |||
| 031d365262 | |||
| 4fd56281d5 | |||
| 08ce8a4028 | |||
| e06877af76 | |||
| 84395ce5b4 | |||
| 94886a2d5a | |||
| 25bb7f7069 | |||
| 573fe5ee35 | |||
| a868d4d539 | |||
| 564ee721c4 | |||
| a8d990db23 | |||
| e21515f7fb | |||
| 3e5a8ac78d | |||
| 6c73d06dcf | |||
| a8954bfa2a | |||
| 19a1617a8d | |||
| 1abae986f8 | |||
| 43fa574dab | |||
| 99530c670e | |||
| 3a0dfe59ce | |||
| d60ed0a793 | |||
| a32fed3bcf | |||
| 132ac92984 | |||
| 141a20f042 | |||
| 1592204515 | |||
| b9f5459725 | |||
| d4e9b9b7a6 | |||
| ec9e4b1339 | |||
| f09109b887 | |||
| 1494c8e044 | |||
| f3a6027e6d | |||
| 3c42355c1e | |||
| feda1bb06f | |||
| 72f1d2f9f9 | |||
| ad11a9303c | |||
| db06e7f601 | |||
| fbf82c1ef0 | |||
| 92cea5dfda | |||
| 7442f9d3ca | |||
| 68dacea228 | |||
| 51425b5e86 | |||
| c60610cb42 | |||
| d3881ee3be | |||
| de403ea6ac | |||
| a30b1ec90b | |||
| 7982c0e1bd | |||
| baf4e7bc0b | |||
| 74c44558fe | |||
| 4033619421 | |||
| 5d206bbb1f | |||
| 3db801f2de | |||
| 0d3cf912d3 | |||
| d81f30a8b5 | |||
| a5c3b454f4 | |||
| 68e6e3cf65 | |||
| 86e6b88555 | |||
| 5cdc45836f | |||
| d438c802a4 | |||
| a838bdebb7 | |||
| 8ff2f4dfb4 | |||
| ede47fbf8f | |||
| 9eb64079f7 | |||
| 3b955bb319 | |||
| 816adfa6c7 | |||
| f91dcc6af6 | |||
| 6dc58a3ff8 | |||
| 09fa10a4e9 | |||
| 6f45e1a814 | |||
| 62ba721f26 | |||
| 67231753e4 | |||
| c16eccaecb | |||
| 0bdf1dcb75 | |||
| 598e9ca5c2 | |||
| 615f9c3515 | |||
| b7cbdb4d6c | |||
| 3c562c1398 | |||
| 3eafa73217 | |||
| 74864d9621 | |||
| cb5562d32e | |||
| e40a175e12 | |||
| f996b111b9 | |||
| 0cb5c49924 | |||
| c636029003 | |||
| db88a6bc22 | |||
| 8ccd97b574 | |||
| 3f99acf473 | |||
| 0cd37ce8ec | |||
| ee04878580 | |||
| e987049f20 | |||
| 122552287a | |||
| d318e6d341 | |||
| d96b282cae | |||
| f2ab01199f | |||
| 04b22431f4 | |||
| 31fce705ab | |||
| a28fab0ff3 | |||
| 0a1d4788ee | |||
| fafb9d4f56 | |||
| 4fdc38caee | |||
| 799cdb44d3 | |||
| 372892199f | |||
| d16184fb25 | |||
| b8564f6d41 | |||
| d474e60c51 | |||
| dfdac28f53 | |||
| 16b713bc85 | |||
| 81cd0722b1 | |||
| 1526f9b8d6 | |||
| 5b4da3bc29 | |||
| d78ea440cc | |||
| 1595805b83 | |||
| 00fa45f15d | |||
| ab05be30c0 | |||
| 3d407e5f24 | |||
| 60776b5f02 | |||
| 8699b1ffea | |||
| 16ac536f93 | |||
| f51d3d5711 | |||
| 17a4a14a4e | |||
| ecda918b46 | |||
| 93834788b5 | |||
| 66e7b44d75 | |||
| 8825fc1e84 | |||
| ac0cc19c04 | |||
| de29465b1f | |||
| 31a201ca32 | |||
| 3644ea2969 | |||
| e46c61e026 | |||
| 3873218e94 | |||
| b4a61cbd6e | |||
| accc6e53f0 | |||
| adf48decc4 | |||
| 49ff928414 | |||
| 71efd4a6d7 | |||
| 01e4907295 | |||
| 6a47e99680 | |||
| 078d8068e0 | |||
| 58ae76ce2a | |||
| bc6cd5b014 | |||
| 17deac8d65 | |||
| 7dbf8dd9fe | |||
| 27ab9f89c9 | |||
| 602808c742 | |||
| c1051956ad | |||
| 6d2c084355 | |||
| 6e3f0f2253 | |||
| d3d3688d60 | |||
| 49c28299af | |||
| 0bb6fea3db | |||
| 7027084394 | |||
| 7c4cbaad9a | |||
| e603048a80 | |||
| 9e08157517 | |||
| d4c2b1e914 | |||
| 65dd67ec96 | |||
| 76259309af | |||
| 3e5a9db279 | |||
| c155bbdb37 | |||
| ecbc03f052 | |||
| 6ef9efc8bf | |||
| 513e9e822d | |||
| dbc215c44f | |||
| 43c5cf4275 | |||
| 41f1f376bc | |||
| cad7fef454 | |||
| 93791aea15 | |||
| 884dcde289 | |||
| 21f993a951 | |||
| 4784228831 | |||
| c6e3e0c07e | |||
| 30685e7252 | |||
| 12a398a65c | |||
| 71360e37de | |||
| f99b8ea9ee | |||
| 2854b928f6 | |||
| 14e1f1d003 | |||
| 85c490bd06 | |||
| 96d78f8bda | |||
| 5f65aebe63 | |||
| cd96da9cd5 | |||
| 674b66b682 | |||
| 934851456b | |||
| afca396654 | |||
| b62f62671d | |||
| eb8913479b | |||
| 4918b412b2 | |||
| a78f5803a5 | |||
| 0d1799cbf7 | |||
| 438db40d0e | |||
| aca5e1fe87 | |||
| 8aaf24ff87 | |||
| 75dbea1ab7 | |||
| 61616dd2b9 | |||
| ceef7964af | |||
| ec12e89653 | |||
| 386ca41a5d | |||
| a8fd5a4f46 | |||
| 4590383a97 | |||
| 405208cf92 | |||
| f19c37276a | |||
| 3269034bfb | |||
| e5f99af43b | |||
| 2866ca9537 | |||
| a377eae2f4 | |||
| dbd8ce2380 | |||
| 0741351318 | |||
| ab9e02adfc | |||
| 12ff690619 | |||
| 5039012fcb | |||
| 75af57a7b3 | |||
| 9027eee99f | |||
| 50fe373f1e | |||
| 2c546867a8 | |||
| 9dad934a40 | |||
| 34dbb4c794 | |||
| 7472af66ef | |||
| f293fb287d | |||
| 7656e84c20 | |||
| c524e8d3b7 | |||
| 7f13ce491b | |||
| 6c16aabce0 | |||
| f5240b1766 | |||
| cc5a95d725 | |||
| 8ba63988d8 | |||
| 289f307a52 | |||
| 91ac36c835 | |||
| 503e4b2bac | |||
| c39ddc3b45 | |||
| 1163c4ad5e | |||
| e497734c07 | |||
| 77fef33cbf | |||
| 81189db1e1 | |||
| 054a3d005e | |||
| dfbff64430 | |||
| 2b4046a82e | |||
| 9eb879fc37 | |||
| 9e63ee2735 | |||
| 9950e51d45 | |||
| 70fdd4bdc3 | |||
| e855f7dd01 | |||
| 123842dfda | |||
| 1338513f82 | |||
| c9c88dd82d | |||
| 02a5395453 | |||
| 7ba2f6b827 | |||
| f1b5dc8ef3 | |||
| 78875572e9 | |||
| f487560ec5 | |||
| f752090c78 | |||
| 96f5b2b82a | |||
| 80292ae579 | |||
| 1d156ac506 | |||
| dc5586f859 | |||
| 1a9f36ce9e | |||
| 203c8a6588 | |||
| 2e6cf8d869 | |||
| b1827dd352 | |||
| 0d2dddddbc | |||
| 1d8e1957ba | |||
| dc957cb3cc | |||
| c314fa0bf3 | |||
| c5ebfac647 | |||
| 4adea11a93 | |||
| e6f49b9f1f | |||
| 9cde569c7d | |||
| 91e7c7434c | |||
| ffef5dfdee | |||
| 409dd69fcb | |||
| 064cf5103a | |||
| 7e3a613a93 | |||
| e7c49f6d67 | |||
| 022b83ab32 | |||
| 551d705ee1 | |||
| 83f73c7fa9 | |||
| cc8cb4f4f1 | |||
| 496eab7d09 | |||
| 5197c967c2 | |||
| 74b615dba7 | |||
| b67ee797cb | |||
| 4228084810 | |||
| b514c7972d | |||
| 83d9042a47 | |||
| a28c403093 | |||
| 2927fa5ff7 | |||
| f39a7f8d6f | |||
| 397610d8ab | |||
| fb170bb7c4 | |||
| d93f6e8720 | |||
| 668de93829 | |||
| 7cecd859ae | |||
| fea2966f62 | |||
| 6efa308e85 | |||
| 82b50a60bc | |||
| f52c4f7900 | |||
| 2fb621993d | |||
| cf663de2fc | |||
| 65c215fa9c | |||
| 8af972c20b | |||
| 027e4046a2 | |||
| 4c256348fc | |||
| 6e3275c05c | |||
| 3518a3f3b6 | |||
| 2b6b0cb38b | |||
| f56a836ffd | |||
| 2d963a9d23 | |||
| 4423b06807 | |||
| 1f9223b476 | |||
| b4ecf5d257 | |||
| 0dd13cbab1 | |||
| 48e50430fe | |||
| ac5611fdca | |||
| 50c3dbc0a0 | |||
| ddd840d2df | |||
| c0c9878fad | |||
| c4fc8a8aef | |||
| 0620b096db | |||
| f998491beb | |||
| 55a6ea4fca | |||
| 72fc5beb98 | |||
| a45b607fe7 | |||
| adfdf04240 | |||
| faa7281993 | |||
| 2d0f4e7881 | |||
| ce9183ffd6 | |||
| 3a5508653b | |||
| 7e4e28037c | |||
| d2d8ea8249 | |||
| ba835bec3e | |||
| 9850874dfd | |||
| 51a8285ba2 | |||
| e12150d026 | |||
| 54bc241984 | |||
| a698f83c45 | |||
| 854e7cc67e | |||
| c3920cbcc0 | |||
| 6a68cebc93 | |||
| ba474205c8 | |||
| dffe5bfffb | |||
| 7615c0d2ba | |||
| 216353837c | |||
| 7f180b2c50 | |||
| ce46e0f351 | |||
| 0999b93b47 | |||
| 63c21cf7c2 | |||
| 72ab1dc8a0 | |||
| 131e1ec11d | |||
| 4d60f5b8d9 | |||
| 6962a05c96 | |||
| 25ee57da1c | |||
| 37e41c9c8e | |||
| 69b6821deb | |||
| 8e6078515a | |||
| 73868dbcbf | |||
| 49ae774d48 | |||
| 5b3e2da95b | |||
| 1a5e513526 | |||
| ad83e95a46 | |||
| bdd5c78d39 | |||
| 6a0c2213a5 | |||
| 99515591f1 | |||
| b8228844df | |||
| 7613bc32c2 | |||
| 4d81dc49fa | |||
| 8c65775310 | |||
| 74c9d0ca6f | |||
| 871bb9da3a | |||
| 8ae1fb4fdb | |||
| 1a39182d80 | |||
| a1a837298f | |||
| 74b0e38f7e | |||
| c1f48b21a4 | |||
| a496c04701 | |||
| 590a7c7dfa | |||
| 796629b4e6 | |||
| ced3b491ff | |||
| 78aebd7c5d | |||
| 9532601efe | |||
| bd34a729b3 | |||
| 23990b581b | |||
| f786da52bb | |||
| ee145d6f65 | |||
| c310ad65ef | |||
| 26284e2412 | |||
| 6e4cd6912b | |||
| 974313c30b | |||
| 8ed586e2f3 | |||
| f016d2cdf4 | |||
| c79e041777 | |||
| a50984d2cb | |||
| 819945dcba | |||
| 9f81bff020 | |||
| b45594515e | |||
| 3a5d701195 | |||
| 34e037725c | |||
| b4fd7b6a66 | |||
| 81af324260 | |||
| a5541745c3 | |||
| 39d691d528 | |||
| 0c1537e5ef | |||
| 3405f853e3 | |||
| 8b0b53029c | |||
| f6012d3b03 | |||
| f4072c183b | |||
| 9a4a8eb742 | |||
| dbfb547af9 | |||
| 0492b867aa | |||
| b7cbb3055a | |||
| c3c18e22ea | |||
| 9318d00a5b | |||
| a5940a9124 | |||
| 9a8986834e | |||
| c5d2c60d70 | |||
| 52d2cf5cb4 | |||
| a63763bfe8 | |||
| 15633d07f0 | |||
| 04f7c7fdd4 | |||
| 1c6ee88912 | |||
| c53b2f8ed8 | |||
| 5c2c18268b | |||
| 5fd0ffaa4f | |||
| 4d0b0d0c8d | |||
| 45df497ee6 | |||
| 2dd83b111f | |||
| 6b599bf53d | |||
| d10e4a3d68 | |||
| 7f1c4a4d18 | |||
| c3d4f6cacd | |||
| dad3d10a83 | |||
| 5c06624f8c | |||
| cf428a14a3 | |||
| a0e09b80cf | |||
| 0e388dabf5 | |||
| 27a5153b8a | |||
| cad3b4c905 | |||
| bda82a8198 | |||
| b9d14e03f1 | |||
| ea46b98400 | |||
| 123f09da6c | |||
| 4155cd0963 | |||
| 27f82aef94 | |||
| 9f9d685353 | |||
| 9b97a3fa61 | |||
| 5b519320c2 | |||
| 790782b799 | |||
| 8c5188dfd0 | |||
| d793e67b56 | |||
| 9bccf7c405 | |||
| 291daa434c | |||
| ef5daad1dd | |||
| 6cb5c95c1f | |||
| 37068a3b89 | |||
| 5901748b76 | |||
| 945a4052e2 | |||
| cd887f8615 | |||
| 3f3540dd2b | |||
| b4b0c6cedd | |||
| afd91d2ae3 | |||
| e0e1799902 | |||
| e64d77feba | |||
| ac944c43bb | |||
| aec2f85165 | |||
| 85a7df29db | |||
| 18d56f32cf | |||
| d1aed5007f | |||
| e2b20eb89b | |||
| a5fa022eb6 | |||
| 79e7d7a010 | |||
| 431ff76e19 | |||
| dc5414284a | |||
| a59e57572c | |||
| 2827b2ae01 | |||
| fc5024be90 | |||
| dab1103279 | |||
| f5dabc134a | |||
| 9e57125c96 | |||
| 8a14327aaf | |||
| b9311e841c | |||
| 46b80b9a18 | |||
| b6a670689c | |||
| 1a3fbe0a7a | |||
| 66a2b4c225 | |||
| 83c47454c6 | |||
| 0947e209ce | |||
| 1f12ef2151 | |||
| 8de80c00a8 | |||
| b79ebdfbef | |||
| a8604dd150 | |||
| c676f5b91f | |||
| 41054ed819 | |||
| d95204513f | |||
| 1850cc68d8 | |||
| c1c07b861e | |||
| 244aebb0f5 | |||
| ae49e3cf2f | |||
| 40f04d6800 | |||
| bc0ba8c116 | |||
| 746951b55f | |||
| 89d4698155 | |||
| 415cc71f74 | |||
| 0e41144a10 | |||
| b5dbb30b02 | |||
| bc40123891 | |||
| f465e34ea3 | |||
| eca925a4eb | |||
| 6442728931 | |||
| 7e67d0dac6 | |||
| 2fdc214c21 | |||
| 652be94eb2 | |||
| 93a5bafc38 | |||
| c2de979527 | |||
| fd78bdf8af | |||
| e0e82e7246 | |||
| cb749480a4 |
@@ -5,6 +5,7 @@
|
||||
*.jpeg binary
|
||||
*.ico binary
|
||||
*.icns binary
|
||||
*.webp binary
|
||||
*.eot binary
|
||||
*.otf binary
|
||||
*.ttf binary
|
||||
|
||||
@@ -6,7 +6,7 @@ body:
|
||||
- type: checkboxes
|
||||
id: check-duplicate
|
||||
attributes:
|
||||
label: I have already checked through the existing bug reports and found no duplicates
|
||||
label: I have already checked through the existing (both open AND closed) bug reports and found no duplicates
|
||||
options:
|
||||
- label: 'Yes'
|
||||
required: true
|
||||
|
||||
@@ -0,0 +1,189 @@
|
||||
# Alpha builds published to Cloudflare R2 with date versioning (e.g. 1.0.0-alpha-20260205).
|
||||
# Required repo secrets: R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY (from R2 API token in Cloudflare dashboard).
|
||||
name: Publish Alpha
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
version:
|
||||
description: 'Semantic version number (e.g., 1.0.0) - alpha suffix will be added automatically'
|
||||
required: false
|
||||
type: string
|
||||
schedule:
|
||||
# Run at 3:00 AM PST daily (11:00 UTC; PST = UTC-8)
|
||||
- cron: '0 11 * * *'
|
||||
|
||||
jobs:
|
||||
check-new-commits:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
has_new_commits: ${{ steps.manual.outputs.has_new_commits || steps.check.outputs['has-new-commits'] }}
|
||||
steps:
|
||||
- name: Set has new commits (manual trigger)
|
||||
id: manual
|
||||
if: github.event_name == 'workflow_dispatch'
|
||||
run: echo "has_new_commits=true" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Check for new commits (24 hr interval)
|
||||
id: check
|
||||
if: github.event_name != 'workflow_dispatch'
|
||||
uses: adriangl/check-new-commits-action@v1
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
seconds: 86400
|
||||
|
||||
prepare:
|
||||
needs: check-new-commits
|
||||
if: needs.check-new-commits.outputs.has_new_commits == 'true'
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
version: ${{ steps.version.outputs.version }}
|
||||
steps:
|
||||
- name: Checkout git repo
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Install Node and PNPM
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 10
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
|
||||
- name: Set date-based alpha version
|
||||
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 (scheduled run or manual without input), auto-increment patch version
|
||||
Write-Host "No version provided, auto-incrementing patch version..."
|
||||
|
||||
$currentVersion = (Get-Content package.json | ConvertFrom-Json).version
|
||||
Write-Host "Current version: $currentVersion"
|
||||
|
||||
$cleanVersion = $currentVersion -replace '-.*$', ''
|
||||
$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]
|
||||
$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
|
||||
}
|
||||
}
|
||||
|
||||
# Date in YYYYMMDD (PST / America/Los_Angeles)
|
||||
$pst = [TimeZoneInfo]::FindSystemTimeZoneById('America/Los_Angeles')
|
||||
$dateInPst = [TimeZoneInfo]::ConvertTimeFromUtc([DateTime]::UtcNow, $pst)
|
||||
$dateStr = $dateInPst.ToString("yyyyMMdd")
|
||||
$alphaVersion = "$inputVersion-alpha-$dateStr"
|
||||
Write-Host "Alpha version: $alphaVersion"
|
||||
|
||||
# Update package.json
|
||||
$packageJson = Get-Content package.json | ConvertFrom-Json
|
||||
$packageJson.version = $alphaVersion
|
||||
$packageJson | ConvertTo-Json -Depth 10 | Set-Content package.json
|
||||
|
||||
echo "version=$alphaVersion" >> $env:GITHUB_OUTPUT
|
||||
|
||||
cleanup:
|
||||
needs: prepare
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
AWS_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
|
||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
|
||||
R2_ENDPOINT_URL: ${{ secrets.R2_ENDPOINT_URL }}
|
||||
steps:
|
||||
- name: Delete all objects in R2 bucket
|
||||
run: |
|
||||
aws s3 rm s3://feishin-nightly --recursive --endpoint-url $R2_ENDPOINT_URL
|
||||
|
||||
publish:
|
||||
needs: [prepare, cleanup]
|
||||
runs-on: ${{ matrix.os }}
|
||||
env:
|
||||
AWS_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
|
||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
os: [windows-latest, macos-26, ubuntu-latest]
|
||||
|
||||
steps:
|
||||
- name: Checkout git repo
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Install Node and PNPM
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 10
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
|
||||
- name: Set version from prepare job
|
||||
shell: pwsh
|
||||
run: |
|
||||
$version = "${{ needs.prepare.outputs.version }}"
|
||||
Write-Host "Setting version: $version"
|
||||
$packageJson = Get-Content package.json | ConvertFrom-Json
|
||||
$packageJson.version = $version
|
||||
$packageJson | ConvertTo-Json -Depth 10 | Set-Content package.json
|
||||
|
||||
- name: Build and Publish to R2 (Windows)
|
||||
if: matrix.os == 'windows-latest'
|
||||
uses: nick-invision/retry@v3.0.2
|
||||
with:
|
||||
timeout_minutes: 30
|
||||
max_attempts: 3
|
||||
retry_on: error
|
||||
command: |
|
||||
pnpm run publish:win:alpha
|
||||
on_retry_command: pnpm cache delete
|
||||
|
||||
- name: Build and Publish to R2 (macOS)
|
||||
if: matrix.os == 'macos-26'
|
||||
uses: nick-invision/retry@v3.0.2
|
||||
with:
|
||||
timeout_minutes: 30
|
||||
max_attempts: 3
|
||||
retry_on: error
|
||||
command: |
|
||||
pnpm run publish:mac:alpha
|
||||
on_retry_command: pnpm cache delete
|
||||
|
||||
- name: Build and Publish to R2 (Linux)
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
uses: nick-invision/retry@v3.0.2
|
||||
with:
|
||||
timeout_minutes: 30
|
||||
max_attempts: 3
|
||||
retry_on: error
|
||||
command: |
|
||||
pnpm run publish:linux:alpha
|
||||
on_retry_command: pnpm cache delete
|
||||
|
||||
- name: Build and Publish to R2 (Linux ARM64)
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
uses: nick-invision/retry@v3.0.2
|
||||
with:
|
||||
timeout_minutes: 30
|
||||
max_attempts: 3
|
||||
retry_on: error
|
||||
command: |
|
||||
pnpm run publish:linux-arm64:alpha
|
||||
on_retry_command: pnpm cache delete
|
||||
@@ -15,12 +15,12 @@ jobs:
|
||||
version: ${{ steps.version.outputs.version }}
|
||||
steps:
|
||||
- name: Checkout git repo
|
||||
uses: actions/checkout@v1
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Install Node and PNPM
|
||||
uses: pnpm/action-setup@v4.1.0
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 9
|
||||
version: 10
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
@@ -115,16 +115,16 @@ jobs:
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
os: [windows-latest, macos-latest, ubuntu-latest]
|
||||
os: [windows-latest, macos-26, ubuntu-latest]
|
||||
|
||||
steps:
|
||||
- name: Checkout git repo
|
||||
uses: actions/checkout@v1
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Install Node and PNPM
|
||||
uses: pnpm/action-setup@v4.1.0
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 9
|
||||
version: 10
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
@@ -146,7 +146,7 @@ jobs:
|
||||
if: matrix.os == 'windows-latest'
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
uses: nick-invision/retry@v2.8.2
|
||||
uses: nick-invision/retry@v3.0.2
|
||||
with:
|
||||
timeout_minutes: 30
|
||||
max_attempts: 3
|
||||
@@ -156,10 +156,10 @@ jobs:
|
||||
on_retry_command: pnpm cache delete
|
||||
|
||||
- name: Build and Publish releases (macOS)
|
||||
if: matrix.os == 'macos-latest'
|
||||
if: matrix.os == 'macos-26'
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
uses: nick-invision/retry@v2.8.2
|
||||
uses: nick-invision/retry@v3.0.2
|
||||
with:
|
||||
timeout_minutes: 30
|
||||
max_attempts: 3
|
||||
@@ -172,7 +172,7 @@ jobs:
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
uses: nick-invision/retry@v2.8.2
|
||||
uses: nick-invision/retry@v3.0.2
|
||||
with:
|
||||
timeout_minutes: 30
|
||||
max_attempts: 3
|
||||
@@ -185,7 +185,7 @@ jobs:
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
uses: nick-invision/retry@v2.8.2
|
||||
uses: nick-invision/retry@v3.0.2
|
||||
with:
|
||||
timeout_minutes: 30
|
||||
max_attempts: 3
|
||||
@@ -199,7 +199,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout git repo
|
||||
uses: actions/checkout@v1
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Edit release with commits and title
|
||||
shell: pwsh
|
||||
@@ -346,7 +346,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout git repo
|
||||
uses: actions/checkout@v1
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Delete existing prereleases
|
||||
shell: pwsh
|
||||
|
||||
@@ -4,6 +4,11 @@ permissions: write-all
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
tag:
|
||||
description: 'Docker image tag (e.g. 1.12.0 or latest)'
|
||||
required: true
|
||||
type: string
|
||||
push:
|
||||
tags:
|
||||
- 'v*.*.*'
|
||||
@@ -20,7 +25,7 @@ jobs:
|
||||
packages: write
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v6
|
||||
- name: Log in to the Container registry
|
||||
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
|
||||
with:
|
||||
@@ -33,11 +38,10 @@ jobs:
|
||||
with:
|
||||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||
tags: |
|
||||
type=ref,event=branch
|
||||
type=ref,event=pr
|
||||
type=semver,pattern={{version}}
|
||||
type=semver,pattern={{major}}.{{minor}}
|
||||
type=semver,pattern={{major}}
|
||||
type=raw,value=${{ inputs.tag }},enable=${{ github.event_name == 'workflow_dispatch' }}
|
||||
type=semver,pattern={{version}},enable=${{ github.event_name == 'push' }}
|
||||
type=semver,pattern={{major}}.{{minor}},enable=${{ github.event_name == 'push' }}
|
||||
type=semver,pattern={{major}},enable=${{ github.event_name == 'push' }}
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
- name: Setup Docker buildx
|
||||
@@ -51,5 +55,4 @@ jobs:
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
platforms: |
|
||||
linux/amd64
|
||||
linux/arm/v7
|
||||
linux/arm64/v8
|
||||
|
||||
@@ -15,7 +15,7 @@ jobs:
|
||||
packages: write
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v6
|
||||
- name: Log in to the Container registry
|
||||
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
|
||||
with:
|
||||
|
||||
@@ -12,12 +12,12 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout git repo
|
||||
uses: actions/checkout@v1
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Install Node and PNPM
|
||||
uses: pnpm/action-setup@v4.1.0
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 9
|
||||
version: 10
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
@@ -25,7 +25,7 @@ jobs:
|
||||
- name: Build and Publish releases
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
uses: nick-invision/retry@v2.8.2
|
||||
uses: nick-invision/retry@v3.0.2
|
||||
with:
|
||||
timeout_minutes: 30
|
||||
max_attempts: 3
|
||||
@@ -37,7 +37,7 @@ jobs:
|
||||
- name: Build and Publish releases (arm64)
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
uses: nick-invision/retry@v2.8.2
|
||||
uses: nick-invision/retry@v3.0.2
|
||||
with:
|
||||
timeout_minutes: 30
|
||||
max_attempts: 3
|
||||
|
||||
@@ -8,24 +8,25 @@ jobs:
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macos-latest]
|
||||
os: [macos-26]
|
||||
|
||||
steps:
|
||||
- name: Checkout git repo
|
||||
uses: actions/checkout@v1
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Install Node and PNPM
|
||||
uses: pnpm/action-setup@v4.1.0
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 9
|
||||
version: 10
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
|
||||
- name: Build and Publish releases
|
||||
env:
|
||||
NODE_OPTIONS: --max-old-space-size=4096
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
uses: nick-invision/retry@v2.8.2
|
||||
uses: nick-invision/retry@v3.0.2
|
||||
with:
|
||||
timeout_minutes: 30
|
||||
max_attempts: 3
|
||||
|
||||
@@ -1,14 +1,17 @@
|
||||
name: Publish (PR)
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
pull_request:
|
||||
branches:
|
||||
- development
|
||||
paths:
|
||||
- 'src/**'
|
||||
- 'electron-builder*.yml'
|
||||
|
||||
jobs:
|
||||
wait-for-lint:
|
||||
if: github.event_name == 'pull_request'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Wait for Test workflow to complete
|
||||
@@ -22,27 +25,28 @@ jobs:
|
||||
|
||||
publish:
|
||||
needs: wait-for-lint
|
||||
if: always() && (needs.wait-for-lint.result == 'success' || needs.wait-for-lint.result == 'skipped')
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macos-latest, ubuntu-latest, windows-latest]
|
||||
os: [macos-26, ubuntu-latest, windows-latest]
|
||||
|
||||
steps:
|
||||
- name: Checkout git repo
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Install Node and PNPM
|
||||
uses: pnpm/action-setup@v4.1.0
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 9
|
||||
version: 10
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
|
||||
- name: Build for Windows
|
||||
if: ${{ matrix.os == 'windows-latest' }}
|
||||
uses: nick-invision/retry@v2.8.2
|
||||
uses: nick-invision/retry@v3.0.2
|
||||
with:
|
||||
timeout_minutes: 30
|
||||
max_attempts: 3
|
||||
@@ -52,7 +56,7 @@ jobs:
|
||||
|
||||
- name: Build for Linux
|
||||
if: ${{ matrix.os == 'ubuntu-latest' }}
|
||||
uses: nick-invision/retry@v2.8.2
|
||||
uses: nick-invision/retry@v3.0.2
|
||||
with:
|
||||
timeout_minutes: 30
|
||||
max_attempts: 3
|
||||
@@ -61,8 +65,8 @@ jobs:
|
||||
pnpm run package:linux:pr
|
||||
|
||||
- name: Build for MacOS
|
||||
if: ${{ matrix.os == 'macos-latest' }}
|
||||
uses: nick-invision/retry@v2.8.2
|
||||
if: ${{ matrix.os == 'macos-26' }}
|
||||
uses: nick-invision/retry@v3.0.2
|
||||
with:
|
||||
timeout_minutes: 30
|
||||
max_attempts: 3
|
||||
@@ -82,27 +86,27 @@ jobs:
|
||||
zip -r dist/linux-binaries.zip dist/*.{AppImage,deb,rpm}
|
||||
|
||||
- name: Zip MacOS Binaries
|
||||
if: ${{ matrix.os == 'macos-latest' }}
|
||||
if: ${{ matrix.os == 'macos-26' }}
|
||||
run: |
|
||||
zip -r dist/macos-binaries.zip dist/*.dmg
|
||||
|
||||
- name: Upload Windows Binaries
|
||||
if: ${{ matrix.os == 'windows-latest' }}
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: windows-binaries
|
||||
path: dist/windows-binaries.zip
|
||||
|
||||
- name: Upload Linux Binaries
|
||||
if: ${{ matrix.os == 'ubuntu-latest' }}
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: linux-binaries
|
||||
path: dist/linux-binaries.zip
|
||||
|
||||
- name: Upload MacOS Binaries
|
||||
if: ${{ matrix.os == 'macos-latest' }}
|
||||
uses: actions/upload-artifact@v4
|
||||
if: ${{ matrix.os == 'macos-26' }}
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: macos-binaries
|
||||
path: dist/macos-binaries.zip
|
||||
|
||||
@@ -12,12 +12,12 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout git repo
|
||||
uses: actions/checkout@v1
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Install Node and PNPM
|
||||
uses: pnpm/action-setup@v4.1.0
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 9
|
||||
version: 10
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
@@ -25,7 +25,7 @@ jobs:
|
||||
- name: Build and Publish releases
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
uses: nick-invision/retry@v2.8.2
|
||||
uses: nick-invision/retry@v3.0.2
|
||||
with:
|
||||
timeout_minutes: 30
|
||||
max_attempts: 3
|
||||
|
||||
@@ -16,6 +16,5 @@ jobs:
|
||||
- uses: vedantmgoyal9/winget-releaser@main
|
||||
with:
|
||||
identifier: jeffvli.Feishin
|
||||
installers-regex: 'Feishin-*-win-x64\.exe'
|
||||
installers-regex: 'Feishin-*-win-(x64|arm64)\.exe'
|
||||
token: ${{ secrets.WINGET_ACC_TOKEN }}
|
||||
|
||||
|
||||
@@ -8,16 +8,16 @@ jobs:
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
os: [windows-latest, macos-latest, ubuntu-latest]
|
||||
os: [windows-latest, macos-26, ubuntu-latest]
|
||||
|
||||
steps:
|
||||
- name: Checkout git repo
|
||||
uses: actions/checkout@v1
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Install Node and PNPM
|
||||
uses: pnpm/action-setup@v4.1.0
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 9
|
||||
version: 10
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
@@ -26,7 +26,7 @@ jobs:
|
||||
if: matrix.os == 'windows-latest'
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
uses: nick-invision/retry@v2.8.2
|
||||
uses: nick-invision/retry@v3.0.2
|
||||
with:
|
||||
timeout_minutes: 30
|
||||
max_attempts: 3
|
||||
@@ -36,10 +36,10 @@ jobs:
|
||||
on_retry_command: pnpm cache delete
|
||||
|
||||
- name: Build and Publish releases (macOS)
|
||||
if: matrix.os == 'macos-latest'
|
||||
if: matrix.os == 'macos-26'
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
uses: nick-invision/retry@v2.8.2
|
||||
uses: nick-invision/retry@v3.0.2
|
||||
with:
|
||||
timeout_minutes: 30
|
||||
max_attempts: 3
|
||||
@@ -52,7 +52,7 @@ jobs:
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
uses: nick-invision/retry@v2.8.2
|
||||
uses: nick-invision/retry@v3.0.2
|
||||
with:
|
||||
timeout_minutes: 30
|
||||
max_attempts: 3
|
||||
@@ -65,7 +65,7 @@ jobs:
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
uses: nick-invision/retry@v2.8.2
|
||||
uses: nick-invision/retry@v3.0.2
|
||||
with:
|
||||
timeout_minutes: 30
|
||||
max_attempts: 3
|
||||
|
||||
@@ -12,7 +12,8 @@ jobs:
|
||||
pull-requests: write
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: dessant/lock-threads@v5
|
||||
- uses: dessant/lock-threads@v6
|
||||
|
||||
with:
|
||||
process-only: 'issues, prs'
|
||||
issue-inactive-days: 120
|
||||
@@ -29,15 +30,15 @@ jobs:
|
||||
days-before-pr-close: 30
|
||||
stale-issue-message: >
|
||||
This issue has been automatically marked as stale because it has not had recent activity. The resources of the Feishin team are limited, and so we are asking for your help.
|
||||
|
||||
|
||||
If this is a **bug** and you can still reproduce this error on the <code>development</code> branch, please reply with all of the information you have about it in order to keep the issue open.
|
||||
|
||||
|
||||
This issue will automatically be closed in the near future if no further activity occurs. Thank you for all your contributions.
|
||||
|
||||
|
||||
stale-pr-message: >
|
||||
This PR has been automatically marked as stale because it has not had recent activity. The resources of the Feishin team are limited, and so we are asking for your help.
|
||||
|
||||
|
||||
This PR will automatically be closed in the near future if no further activity occurs. Thank you for all your contributions.
|
||||
|
||||
|
||||
|
||||
@@ -8,12 +8,12 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Check out Git repository
|
||||
uses: actions/checkout@v1
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Install Node.js and PNPM
|
||||
uses: pnpm/action-setup@v4.1.0
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 9
|
||||
version: 10
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
# --- Builder stage
|
||||
FROM node:23-alpine as builder
|
||||
FROM node:23-alpine AS builder
|
||||
WORKDIR /app
|
||||
|
||||
# Copy package.json first to cache node_modules
|
||||
COPY package.json pnpm-lock.yaml .
|
||||
|
||||
RUN npm install -g pnpm
|
||||
# Match CI (pnpm/action-setup version: 10). Latest pnpm 11 fails install without approve-builds.
|
||||
RUN corepack enable && corepack prepare pnpm@10 --activate
|
||||
|
||||
RUN pnpm install
|
||||
|
||||
@@ -14,12 +15,14 @@ COPY . .
|
||||
RUN pnpm run build:web
|
||||
|
||||
# --- Production stage
|
||||
FROM nginx:alpine-slim
|
||||
FROM nginxinc/nginx-unprivileged:alpine-slim
|
||||
|
||||
COPY --chown=nginx:nginx --from=builder /app/out/web /usr/share/nginx/html
|
||||
COPY ./settings.js.template /etc/nginx/templates/settings.js.template
|
||||
COPY ng.conf.template /etc/nginx/templates/default.conf.template
|
||||
COPY --chown=nginx:nginx ./settings.js.template /etc/nginx/templates/settings.js.template
|
||||
COPY --chown=nginx:nginx ng.conf.template /etc/nginx/templates/default.conf.template
|
||||
|
||||
ENV SERVER_LOCK=false SERVER_NAME="" SERVER_TYPE="" SERVER_URL="" REMOTE_URL=""
|
||||
ENV LEGACY_AUTHENTICATION="" ANALYTICS_DISABLED="" PUBLIC_PATH="/"
|
||||
|
||||
ENV PUBLIC_PATH="/"
|
||||
EXPOSE 9180
|
||||
CMD ["nginx", "-g", "daemon off;"]
|
||||
|
||||
@@ -43,7 +43,7 @@ Rewrite of [Sonixd](https://github.com/jeffvli/sonixd).
|
||||
|
||||
## Screenshots
|
||||
|
||||
<a href="https://raw.githubusercontent.com/jeffvli/feishin/development/media/preview_full_screen_player.png"><img src="https://raw.githubusercontent.com/jeffvli/feishin/development/media/preview_full_screen_player.png" width="49.5%"/></a> <a href="https://raw.githubusercontent.com/jeffvli/feishin/development/media/preview_album_artist_detail.png"><img src="https://raw.githubusercontent.com/jeffvli/feishin/development/media/preview_album_artist_detail.png" width="49.5%"/></a> <a href="https://raw.githubusercontent.com/jeffvli/feishin/development/media/preview_album_detail.png"><img src="https://raw.githubusercontent.com/jeffvli/feishin/development/media/preview_album_detail.png" width="49.5%"/></a> <a href="https://raw.githubusercontent.com/jeffvli/feishin/development/media/preview_smart_playlist.png"><img src="https://raw.githubusercontent.com/jeffvli/feishin/development/media/preview_smart_playlist.png" width="49.5%"/></a>
|
||||
<a href="./media/preview_full_screen_player.png"><img src="./media/preview_full_screen_player.png" width="49.5%"/></a> <a href="./media/preview_album_artist_detail.png"><img src="./media/preview_album_artist_detail.png" width="49.5%"/></a> <a href="./media/preview_album_detail.png"><img src="./media/preview_album_detail.png" width="49.5%"/></a> <a href="./media/preview_smart_playlist.png"><img src="./media/preview_smart_playlist.png" width="49.5%"/></a>
|
||||
|
||||
## Getting Started
|
||||
|
||||
@@ -59,7 +59,11 @@ For media keys to work, you will be prompted to allow Feishin to be a Trusted Ac
|
||||
|
||||
#### Linux Notes
|
||||
|
||||
We provide a small install script to download the latest `.AppImage`, make it executable, and also download the icons required by Desktop Environments. Finally, it generates a `.desktop` file to add Feishin to your Application Launcher.
|
||||
Feishin is available in [Flathub](https://flathub.org/en/apps/org.jeffvli.feishin).
|
||||
|
||||
Alternatively, you can install it as an Appimage.
|
||||
We provide a small install script to download the latest `.AppImage`, make it executable, and also download the icons required by Desktop Environments.
|
||||
Finally, it generates a `.desktop` file to add Feishin to your Application Launcher.
|
||||
|
||||
Simply run the installer like this:
|
||||
|
||||
@@ -114,6 +118,7 @@ services:
|
||||
- SERVER_LOCK=true # When true AND name/type/url are set, only username/password can be toggled
|
||||
- SERVER_TYPE=jellyfin # the allowed types are: jellyfin, navidrome, subsonic. These values are case insensitive
|
||||
- SERVER_URL= # http://address:port or https://address:port
|
||||
- REMOTE_URL= # http://address or https://address
|
||||
- LEGACY_AUTHENTICATION=false # When SERVER_LOCK is true, sets the legacy (plaintext) authentication flag for Subsonic/OpenSubsonic servers
|
||||
- ANALYTICS_DISABLED=true # Set to true to disable Umami analytics tracking
|
||||
ports:
|
||||
@@ -134,7 +139,11 @@ services:
|
||||
|
||||
4. _Optional_ - To hard code the server url, pass the following environment variables: `SERVER_NAME`, `SERVER_TYPE` (one of `jellyfin` or `navidrome` or `subsonic`), `SERVER_URL`. To prevent users from changing these settings, pass `SERVER_LOCK=true`. This can only be set if all three of the previous values are set. When `SERVER_LOCK=true`, you can also set `LEGACY_AUTHENTICATION=true` or `LEGACY_AUTHENTICATION=false` to configure the legacy authentication flag for the server (only applicable for Subsonic/OpenSubsonic servers).
|
||||
|
||||
5. _Optional_ - To disable Umami analytics tracking in the Docker/web version, set the environment variable `ANALYTICS_DISABLED=true`. When enabled, the analytics script will not be loaded and all tracking will be disabled.
|
||||
5. _Optional_ - If your server uses a separate public-facing URL than what integrating applications use internally to communicate with your server, such as a separate Navidrome `ShareURL`, set `REMOTE_URL` to said public-facing URL.
|
||||
|
||||
6. _Optional_ - To disable Umami analytics tracking in the Docker/web version, set the environment variable `ANALYTICS_DISABLED=true`. When enabled, the analytics script will not be loaded and all tracking will be disabled.
|
||||
|
||||
7. _Optional_ - App settings (theme, language, sidebar options, etc.) can be overridden with environment variables on first run. The variables use the `FS_` prefix (e.g. `FS_GENERAL_THEME=defaultDark`, `FS_GENERAL_LANGUAGE=de`). See [the settings environment variable documentation](docs/ENV_SETTINGS.md) for the full list.
|
||||
|
||||
## FAQ
|
||||
|
||||
@@ -160,6 +169,10 @@ Feishin supports any music server that implements a [Navidrome](https://www.navi
|
||||
- [Qm-Music](https://github.com/chenqimiao/qm-music)
|
||||
- More (?)
|
||||
|
||||
- [Plex](https://www.plex.tv/media-server-downloads)
|
||||
- [Feishin fork by lux032](https://github.com/lux032/feishin) - Plex is not natively supported. Use the fork by lux032 to use Plex with Feishin.
|
||||
|
||||
|
||||
### I have the issue "The SUID sandbox helper binary was found, but is not configured correctly" on Linux
|
||||
|
||||
This happens when you have user (unprivileged) namespaces disabled (`sysctl kernel.unprivileged_userns_clone` returns 0). You can fix this by either enabling unprivileged namespaces, or by making the `chrome-sandbox` Setuid.
|
||||
|
||||
|
Before Width: | Height: | Size: 154 KiB After Width: | Height: | Size: 73 KiB |
|
Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 6.4 KiB |
|
After Width: | Height: | Size: 651 B |
|
After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 3.6 KiB |
|
After Width: | Height: | Size: 4.8 KiB |
|
After Width: | Height: | Size: 277 B |
|
After Width: | Height: | Size: 447 B |
|
Before Width: | Height: | Size: 176 KiB After Width: | Height: | Size: 422 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 32 KiB |
@@ -1,14 +1,16 @@
|
||||
services:
|
||||
feishin:
|
||||
container_name: feishin
|
||||
image: 'ghcr.io/jeffvli/feishin:latest'
|
||||
image: "ghcr.io/jeffvli/feishin:latest"
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- SERVER_NAME=jellyfin # pre-defined server name
|
||||
- SERVER_LOCK=true # When true AND name/type/url are set, only username/password can be toggled
|
||||
- SERVER_LOCK=false # When true AND name/type/url are set, only username/password can be toggled
|
||||
- SERVER_TYPE=jellyfin # the allowed types are: jellyfin, navidrome, subsonic. These values are case insensitive
|
||||
- SERVER_URL= # http://address:port or https://address:port
|
||||
- SERVER_URL=http://localhost:8096 # http://address:port or https://address:port
|
||||
# - REMOTE_URL=http://share.localhost # Used for compatibility with external functionality, such as custom sharing URLs on Navidrome
|
||||
- LEGACY_AUTHENTICATION=false # When SERVER_LOCK is true, sets the legacyauth flag for server authentication (true or false)
|
||||
- ANALYTICS_DISABLED=false # Set to true to disable Umami analytics tracking
|
||||
ports:
|
||||
- 9180:9180
|
||||
# Alternatively, to restrict to only localhost, - 127.0.0.1:9180:8190
|
||||
# Alternatively, to restrict to only localhost, - 127.0.0.1:9180:8190
|
||||
|
||||
@@ -0,0 +1,141 @@
|
||||
# Environment variables for settings (web / Docker)
|
||||
|
||||
These variables override app settings **on first run** when no persisted settings exist. They are injected via `settings.js` (from `settings.js.template`) and only apply to the **web** build.
|
||||
|
||||
**Format:** All values are strings; booleans use `true`/`false`, numbers are numeric strings. Leave unset or empty to use the default.
|
||||
|
||||
---
|
||||
|
||||
## General
|
||||
|
||||
| Setting | Default | Env variable | Available values / Description |
|
||||
|-------------|---------|--------------|--------------------------------|
|
||||
| `general.accent` | `rgb(53, 116, 252)` | `FS_GENERAL_ACCENT` | CSS `rgb(r, g, b)` string (e.g. `rgb(53, 116, 252)`). Invalid values are ignored. |
|
||||
| `general.albumBackground` | `false` | `FS_GENERAL_ALBUM_BACKGROUND` | `true` / `false` — Show album background image. |
|
||||
| `general.albumBackgroundBlur` | `3` | `FS_GENERAL_ALBUM_BACKGROUND_BLUR` | Blur amount for album background (number). |
|
||||
| `general.artistBackground` | `true` | `FS_GENERAL_ARTIST_BACKGROUND` | `true` / `false` — Show artist background image. |
|
||||
| `general.artistBackgroundBlur` | `3` | `FS_GENERAL_ARTIST_BACKGROUND_BLUR` | Blur amount for artist background (number). |
|
||||
| `general.blurExplicitImages` | `false` | `FS_GENERAL_BLUR_EXPLICIT_IMAGES` | `true` / `false` — Blur explicit images. |
|
||||
| `general.combinedLyricsAndVisualizer` | `false` | `FS_GENERAL_COMBINED_LYRICS_AND_VISUALIZER` | `true` / `false` — Combine lyrics and visualizer panel. |
|
||||
| `general.enableGridMultiSelect` | `false` | `FS_GENERAL_ENABLE_GRID_MULTI_SELECT` | `true` / `false` — Enable multi-select in grid views. |
|
||||
| `general.externalLinks` | `true` | `FS_GENERAL_EXTERNAL_LINKS` | `true` / `false` — Show external links in UI. |
|
||||
| `general.followCurrentSong` | `true` | `FS_GENERAL_FOLLOW_CURRENT_SONG` | `true` / `false` — Follow current song in list. |
|
||||
| `general.followSystemTheme` | `false` | `FS_GENERAL_FOLLOW_SYSTEM_THEME` | `true` / `false` — Use OS light/dark preference. |
|
||||
| `general.homeFeature` | `true` | `FS_GENERAL_HOME_FEATURE` | `true` / `false` — Show home featured carousel. |
|
||||
| `general.homeFeatureStyle` | `single` | `FS_GENERAL_HOME_FEATURE_STYLE` | `multiple` / `single` — Home featured carousel style. |
|
||||
| `general.language` | `en` | `FS_GENERAL_LANGUAGE` | UI language code (e.g. `en`, `de`, `fr`). |
|
||||
| `general.theme` | `defaultDark` | `FS_GENERAL_THEME` | One of: `ayuDark`, `ayuLight`, `catppuccinLatte`, `catppuccinMocha`, `defaultDark`, `defaultLight`, `dracula`, `githubDark`, `githubLight`, `glassyDark`, `gruvboxDark`, `gruvboxLight`, `highContrastDark`, `highContrastLight`, `materialDark`, `materialLight`, `monokai`, `nightOwl`, `nord`, `oneDark`, `rosePine`, `rosePineDawn`, `rosePineMoon`, `shadesOfPurple`, `solarizedDark`, `solarizedLight`, `tokyoNight`, `vscodeDarkPlus`, `vscodeLightPlus`. |
|
||||
| `general.themeDark` | `defaultDark` | `FS_GENERAL_THEME_DARK` | Same as theme (used when system is dark). |
|
||||
| `general.themeLight` | `defaultLight` | `FS_GENERAL_THEME_LIGHT` | Same as theme (used when system is light). |
|
||||
| `general.lastfmApiKey` | *(empty)* | `FS_GENERAL_LASTFM_API_KEY` | Last.fm API key. |
|
||||
| `general.lastFM` | `true` | `FS_GENERAL_LAST_FM` | `true` / `false` — Enable Last.fm. |
|
||||
| `general.listenBrainz` | `true` | `FS_GENERAL_LISTEN_BRAINZ` | `true` / `false` — ListenBrainz links. |
|
||||
| `general.musicBrainz` | `true` | `FS_GENERAL_MUSIC_BRAINZ` | `true` / `false` — MusicBrainz links. |
|
||||
| `general.nativeAspectRatio` | `false` | `FS_GENERAL_NATIVE_ASPECT_RATIO` | `true` / `false` — Use native cover art aspect ratio. |
|
||||
| `general.pathReplace` | *(empty)* | `FS_GENERAL_PATH_REPLACE` | Path pattern to replace (e.g. server path in Docker). |
|
||||
| `general.pathReplaceWith` | *(empty)* | `FS_GENERAL_PATH_REPLACE_WITH` | Replacement path. |
|
||||
| `general.playerbarOpenDrawer` | `false` | `FS_GENERAL_PLAYERBAR_OPEN_DRAWER` | `true` / `false` — Open queue/lyrics as drawer from player bar. |
|
||||
| `general.primaryShade` | `6` | `FS_GENERAL_PRIMARY_SHADE` | Mantine primary shade 0–9 (number). |
|
||||
| `general.qobuz` | `true` | `FS_GENERAL_QOBUZ` | `true` / `false` — Qobuz links. |
|
||||
| `general.resume` | `true` | `FS_GENERAL_RESUME` | `true` / `false` — Resume playback on load. |
|
||||
| `general.showLyricsInSidebar` | `true` | `FS_GENERAL_SHOW_LYRICS_IN_SIDEBAR` | `true` / `false` — Show lyrics in sidebar. |
|
||||
| `general.showRatings` | `true` | `FS_GENERAL_SHOW_RATINGS` | `true` / `false` — Show star ratings. |
|
||||
| `general.showVisualizerInSidebar` | `true` | `FS_GENERAL_SHOW_VISUALIZER_IN_SIDEBAR` | `true` / `false` — Show visualizer in sidebar. |
|
||||
| `general.sidebarCollapsedNavigation` | `true` | `FS_GENERAL_SIDEBAR_COLLAPSED_NAVIGATION` | `true` / `false` — Start with collapsed sidebar nav. |
|
||||
| `general.sidebarCollapseShared` | `false` | `FS_GENERAL_SIDEBAR_COLLAPSE_SHARED` | `true` / `false` — Share sidebar collapse state. |
|
||||
| `general.sidebarPlaylistFolders` | `true` | `FS_GENERAL_SIDEBAR_PLAYLIST_FOLDERS` | `true` / `false` — Group playlists into folders by name separator. |
|
||||
| `general.sidebarPlaylistFolderSeparator` | `/` | `FS_GENERAL_SIDEBAR_PLAYLIST_FOLDER_SEPARATOR` | Character or string that separates folder levels in a playlist name. Empty = use default. |
|
||||
| `general.sidebarPlaylistFolderTreeIndent` | `16` | `FS_GENERAL_SIDEBAR_PLAYLIST_FOLDER_TREE_INDENT` | Pixels each tree level is indented (0–64). |
|
||||
| `general.sidebarPlaylistFolderTreeLineColor` | *(empty)* | `FS_GENERAL_SIDEBAR_PLAYLIST_FOLDER_TREE_LINE_COLOR` | CSS color for tree connecting lines. Empty = theme default. |
|
||||
| `general.sidebarPlaylistFolderView` | `tree` | `FS_GENERAL_SIDEBAR_PLAYLIST_FOLDER_VIEW` | `single` / `tree` / `navigation` — How folders are displayed in the sidebar. |
|
||||
| `general.sidebarPlaylistList` | `true` | `FS_GENERAL_SIDEBAR_PLAYLIST_LIST` | `true` / `false` — Show playlist list in sidebar. |
|
||||
| `general.sidebarPlaylistMode` | `expanded` | `FS_GENERAL_SIDEBAR_PLAYLIST_MODE` | `compact` / `expanded` — Sidebar playlist row layout. |
|
||||
| `general.sidebarPlaylistSorting` | `false` | `FS_GENERAL_SIDEBAR_PLAYLIST_SORTING` | `true` / `false` — Enable playlist sorting in sidebar. |
|
||||
| `general.sideQueueType` | `sideQueue` | `FS_GENERAL_SIDE_QUEUE_TYPE` | `sideDrawerQueue` / `sideQueue` — Side play queue style. |
|
||||
| `general.sideQueueLayout` | `horizontal` | `FS_GENERAL_SIDE_QUEUE_LAYOUT` | `horizontal` / `vertical` — Attached side queue layout orientation. |
|
||||
| `general.useThemeAccentColor` | `false` | `FS_GENERAL_USE_THEME_ACCENT_COLOR` | `true` / `false` — Use theme’s accent color instead of custom. |
|
||||
| `general.useThemePrimaryShade` | `true` | `FS_GENERAL_USE_THEME_PRIMARY_SHADE` | `true` / `false` — Use theme’s primary shade. |
|
||||
| `general.zoomFactor` | `100` | `FS_GENERAL_ZOOM_FACTOR` | UI zoom percentage (number). |
|
||||
|
||||
---
|
||||
|
||||
## Playback
|
||||
|
||||
| Setting path | Default | Env variable | Available values / Description |
|
||||
|-------------|---------|--------------|--------------------------------|
|
||||
| `playback.mediaSession` | `false` | `FS_PLAYBACK_MEDIA_SESSION` | `true` / `false` — Media Session API (e.g. browser/media keys). |
|
||||
| `playback.webAudio` | `true` | `FS_PLAYBACK_WEB_AUDIO` | `true` / `false` — Use Web Audio for playback. |
|
||||
| `playback.audioFadeOnStatusChange` | `true` | `FS_PLAYBACK_AUDIO_FADE_ON_STATUS_CHANGE` | `true` / `false` — Fade on play/pause. |
|
||||
| `playback.preservePitch` | `true` | `FS_PLAYBACK_PRESERVE_PITCH` | `true` / `false` — Preserve pitch when changing speed. |
|
||||
| `playback.scrobble.enabled` | `true` | `FS_PLAYBACK_SCROBBLE_ENABLED` | `true` / `false` — Enable scrobbling. |
|
||||
| `playback.scrobble.notify` | `false` | `FS_PLAYBACK_SCROBBLE_NOTIFY` | `true` / `false` — Scrobble notifications. |
|
||||
| `playback.scrobble.scrobbleAtDuration` | `240` | `FS_PLAYBACK_SCROBBLE_AT_DURATION` | Seconds of playback before scrobble. |
|
||||
| `playback.scrobble.scrobbleAtPercentage` | `75` | `FS_PLAYBACK_SCROBBLE_AT_PERCENTAGE` | Percentage of track before scrobble. |
|
||||
| `playback.transcode.enabled` | `false` | `FS_PLAYBACK_TRANSCODE_ENABLED` | `true` / `false` — Enable transcoding. |
|
||||
| `playback.transcode.format` | *(unset)* | `FS_PLAYBACK_TRANSCODE_FORMAT` | Transcode format string (codec/container), e.g. server-specific value. Empty = use default. |
|
||||
| `playback.transcode.bitrate` | *(unset)* | `FS_PLAYBACK_TRANSCODE_BITRATE` | Transcode bitrate (number, kbps or as defined by server). |
|
||||
| `playback.filters` | `[]` | `FS_PLAYBACK_FILTERS` | JSON array of player filters: each object needs `id`, `field`, `operator`, `value`; optional `isEnabled`. Invalid JSON or shape is ignored. |
|
||||
|
||||
---
|
||||
|
||||
## Discord
|
||||
|
||||
| Setting path | Default | Env variable | Available values / Description |
|
||||
|-------------|---------|--------------|--------------------------------|
|
||||
| `discord.enabled` | `false` | `FS_DISCORD_ENABLED` | `true` / `false` — Discord rich presence. |
|
||||
| `discord.clientId` | *(built-in)* | `FS_DISCORD_CLIENT_ID` | Custom Discord application ID. |
|
||||
| `discord.displayType` | `feishin` | `FS_DISCORD_DISPLAY_TYPE` | `artist` / `feishin` / `song`. |
|
||||
| `discord.linkType` | `none` | `FS_DISCORD_LINK_TYPE` | `last_fm` / `musicbrainz` / `musicbrainz_last_fm` / `none`. |
|
||||
| `discord.showAsListening` | `false` | `FS_DISCORD_SHOW_AS_LISTENING` | `true` / `false`. |
|
||||
| `discord.showPaused` | `true` | `FS_DISCORD_SHOW_PAUSED` | `true` / `false` — Show paused state. |
|
||||
| `discord.showServerImage` | `false` | `FS_DISCORD_SHOW_SERVER_IMAGE` | `true` / `false`. |
|
||||
| `discord.showStateIcon` | `true` | `FS_DISCORD_SHOW_STATE_ICON` | `true` / `false`. |
|
||||
|
||||
---
|
||||
|
||||
## Lyrics
|
||||
|
||||
| Setting path | Default | Env variable | Available values / Description |
|
||||
|-------------|---------|--------------|--------------------------------|
|
||||
| `lyrics.fetch` | `true` | `FS_LYRICS_FETCH` | `true` / `false` — Fetch lyrics. |
|
||||
| `lyrics.follow` | `true` | `FS_LYRICS_FOLLOW` | `true` / `false` — Follow current line. |
|
||||
| `lyrics.delayMs` | `0` | `FS_LYRICS_DELAY_MS` | Sync delay in milliseconds. |
|
||||
| `lyrics.preferLocalLyrics` | `true` | `FS_LYRICS_PREFER_LOCAL` | `true` / `false` — Prefer local lyric files. |
|
||||
| `lyrics.showMatch` | `true` | `FS_LYRICS_SHOW_MATCH` | `true` / `false`. |
|
||||
| `lyrics.showProvider` | `true` | `FS_LYRICS_SHOW_PROVIDER` | `true` / `false`. |
|
||||
| `lyrics.enableAutoTranslation` | `false` | `FS_LYRICS_ENABLE_AUTO_TRANSLATION` | `true` / `false`. |
|
||||
| `lyrics.translationApiKey` | *(empty)* | `FS_LYRICS_TRANSLATION_API_KEY` | API key for lyric translation. |
|
||||
| `lyrics.translationTargetLanguage` | `en` | `FS_LYRICS_TRANSLATION_TARGET_LANGUAGE` | Target language code. |
|
||||
| `lyrics.alignment` | `center` | `FS_LYRICS_ALIGNMENT` | `center` / `left` / `right`. |
|
||||
|
||||
---
|
||||
|
||||
## Auto DJ
|
||||
|
||||
| Setting path | Default | Env variable | Available values / Description |
|
||||
|-------------|---------|--------------|--------------------------------|
|
||||
| `autoDJ.albumStrategy` | `similar` | `FS_AUTO_DJ_ALBUM_STRATEGY` | `similar` / `library_random`. |
|
||||
| `autoDJ.enabled` | `false` | `FS_AUTO_DJ_ENABLED` | `true` / `false`. |
|
||||
| `autoDJ.itemCount` | `5` | `FS_AUTO_DJ_ITEM_COUNT` | Number of items to add. |
|
||||
| `autoDJ.mode` | `songs` | `FS_AUTO_DJ_MODE` | `songs` / `albums`. |
|
||||
| `autoDJ.songStrategy` | `similar` | `FS_AUTO_DJ_SONG_STRATEGY` | `similar` / `library_random`. |
|
||||
| `autoDJ.timing` | `1` | `FS_AUTO_DJ_TIMING` | Timing value (number). |
|
||||
|
||||
---
|
||||
|
||||
## CSS
|
||||
|
||||
| Setting path | Default | Env variable | Available values / Description |
|
||||
|-------------|---------|--------------|--------------------------------|
|
||||
| `css.content` | *(empty)* | `FS_CSS_CONTENT` | Custom CSS string (sanitized like in-app custom CSS). Set `FS_CSS_ENABLED=true` to apply. |
|
||||
| `css.enabled` | `false` | `FS_CSS_ENABLED` | `true` / `false` — Enable custom CSS. |
|
||||
|
||||
---
|
||||
|
||||
## Font
|
||||
|
||||
| Setting path | Default | Env variable | Available values / Description |
|
||||
|-------------|---------|--------------|--------------------------------|
|
||||
| `font.type` | `builtIn` | `FS_FONT_TYPE` | `builtIn` / `system` / `custom`. |
|
||||
| `font.builtIn` | `Inter` | `FS_FONT_BUILT_IN` | Built-in font name. |
|
||||
| `font.system` | *(empty)* | `FS_FONT_SYSTEM` | System font name (when type is `system`). |
|
||||
@@ -0,0 +1,74 @@
|
||||
appId: org.jeffvli.feishin
|
||||
productName: Feishin
|
||||
artifactName: ${productName}-${version}-${os}-${arch}.${ext}
|
||||
electronVersion: 41.7.0
|
||||
directories:
|
||||
buildResources: assets
|
||||
files:
|
||||
- 'out/**/*'
|
||||
- 'package.json'
|
||||
extraResources:
|
||||
- assets/**
|
||||
asarUnpack:
|
||||
- resources/**
|
||||
win:
|
||||
target:
|
||||
- target: zip
|
||||
arch:
|
||||
- x64
|
||||
- arm64
|
||||
- target: nsis
|
||||
arch:
|
||||
- x64
|
||||
- arm64
|
||||
icon: assets/icons/icon.ico
|
||||
|
||||
nsis:
|
||||
allowToChangeInstallationDirectory: true
|
||||
oneClick: false
|
||||
shortcutName: ${productName}
|
||||
uninstallDisplayName: ${productName}
|
||||
createDesktopShortcut: always
|
||||
|
||||
mac:
|
||||
target:
|
||||
- target: dmg
|
||||
arch:
|
||||
- arm64
|
||||
- x64
|
||||
- target: zip
|
||||
arch:
|
||||
- arm64
|
||||
- x64
|
||||
icon: media/feishin.icon
|
||||
type: distribution
|
||||
hardenedRuntime: false
|
||||
identity: '-'
|
||||
gatekeeperAssess: false
|
||||
notarize: false
|
||||
extendInfo:
|
||||
NSAudioCaptureUsageDescription: 'System audio access is required for mpv visualizer capture in Feishin'
|
||||
NSLocalNetworkUsageDescription: 'Local network is necessary for accessing servers hosted on the same system as Feishin'
|
||||
|
||||
dmg:
|
||||
contents: [{ x: 130, y: 220 }, { x: 410, y: 220, type: link, path: /Applications }]
|
||||
|
||||
linux:
|
||||
target:
|
||||
- AppImage
|
||||
- deb
|
||||
- tar.xz
|
||||
category: AudioVideo;Audio;Player
|
||||
icon: assets/icons/icon.png
|
||||
artifactName: ${productName}-${os}-${arch}.${ext}
|
||||
|
||||
toolsets:
|
||||
appimage: '1.0.3'
|
||||
|
||||
npmRebuild: false
|
||||
|
||||
publish:
|
||||
provider: s3
|
||||
bucket: feishin-nightly
|
||||
channel: alpha
|
||||
endpoint: https://065f090c64de2dc707dd70ac72db9669.r2.cloudflarestorage.com
|
||||
@@ -1,7 +1,7 @@
|
||||
appId: org.jeffvli.feishin
|
||||
productName: Feishin
|
||||
artifactName: ${productName}-${version}-${os}-${arch}.${ext}
|
||||
electronVersion: 39.2.7
|
||||
electronVersion: 41.7.0
|
||||
directories:
|
||||
buildResources: assets
|
||||
files:
|
||||
@@ -13,9 +13,15 @@ asarUnpack:
|
||||
- resources/**
|
||||
win:
|
||||
target:
|
||||
- zip
|
||||
- nsis
|
||||
icon: assets/icons/icon.png
|
||||
- target: zip
|
||||
arch:
|
||||
- x64
|
||||
- arm64
|
||||
- target: nsis
|
||||
arch:
|
||||
- x64
|
||||
- arm64
|
||||
icon: assets/icons/icon.ico
|
||||
|
||||
nsis:
|
||||
allowToChangeInstallationDirectory: true
|
||||
@@ -26,17 +32,23 @@ nsis:
|
||||
|
||||
mac:
|
||||
target:
|
||||
target: default
|
||||
arch:
|
||||
- arm64
|
||||
- x64
|
||||
icon: assets/icons/icon.icns
|
||||
- target: dmg
|
||||
arch:
|
||||
- arm64
|
||||
- x64
|
||||
- target: zip
|
||||
arch:
|
||||
- arm64
|
||||
- x64
|
||||
icon: media/feishin.icon
|
||||
type: distribution
|
||||
hardenedRuntime: true
|
||||
entitlements: assets/entitlements.mac.plist
|
||||
entitlementsInherit: assets/entitlements.mac.plist
|
||||
hardenedRuntime: false
|
||||
identity: '-'
|
||||
gatekeeperAssess: false
|
||||
notarize: false
|
||||
extendInfo:
|
||||
NSAudioCaptureUsageDescription: 'System audio access is required for mpv visualizer capture in Feishin'
|
||||
NSLocalNetworkUsageDescription: 'Local network is necessary for accessing servers hosted on the same system as Feishin'
|
||||
|
||||
dmg:
|
||||
contents: [{ x: 130, y: 220 }, { x: 410, y: 220, type: link, path: /Applications }]
|
||||
@@ -50,6 +62,9 @@ linux:
|
||||
icon: assets/icons/icon.png
|
||||
artifactName: ${productName}-${os}-${arch}.${ext}
|
||||
|
||||
toolsets:
|
||||
appimage: '1.0.3'
|
||||
|
||||
npmRebuild: false
|
||||
publish:
|
||||
provider: github
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
appId: org.jeffvli.feishin
|
||||
productName: Feishin
|
||||
artifactName: ${productName}-${version}-${os}-${arch}.${ext}
|
||||
electronVersion: 39.2.7
|
||||
electronVersion: 41.7.0
|
||||
directories:
|
||||
buildResources: assets
|
||||
files:
|
||||
@@ -13,9 +13,15 @@ asarUnpack:
|
||||
- resources/**
|
||||
win:
|
||||
target:
|
||||
- zip
|
||||
- nsis
|
||||
icon: assets/icons/icon.png
|
||||
- target: zip
|
||||
arch:
|
||||
- x64
|
||||
- arm64
|
||||
- target: nsis
|
||||
arch:
|
||||
- x64
|
||||
- arm64
|
||||
icon: assets/icons/icon.ico
|
||||
|
||||
nsis:
|
||||
allowToChangeInstallationDirectory: true
|
||||
@@ -26,17 +32,23 @@ nsis:
|
||||
|
||||
mac:
|
||||
target:
|
||||
target: default
|
||||
arch:
|
||||
- arm64
|
||||
- x64
|
||||
icon: assets/icons/icon.icns
|
||||
- target: dmg
|
||||
arch:
|
||||
- arm64
|
||||
- x64
|
||||
- target: zip
|
||||
arch:
|
||||
- arm64
|
||||
- x64
|
||||
icon: media/feishin.icon
|
||||
type: distribution
|
||||
hardenedRuntime: true
|
||||
entitlements: assets/entitlements.mac.plist
|
||||
entitlementsInherit: assets/entitlements.mac.plist
|
||||
hardenedRuntime: false
|
||||
identity: '-'
|
||||
gatekeeperAssess: false
|
||||
notarize: false
|
||||
extendInfo:
|
||||
NSAudioCaptureUsageDescription: 'System audio access is required for mpv visualizer capture in Feishin'
|
||||
NSLocalNetworkUsageDescription: 'Local network is necessary for accessing servers hosted on the same system as Feishin'
|
||||
|
||||
dmg:
|
||||
contents: [{ x: 130, y: 220 }, { x: 410, y: 220, type: link, path: /Applications }]
|
||||
@@ -50,7 +62,11 @@ linux:
|
||||
icon: assets/icons/icon.png
|
||||
artifactName: ${productName}-${os}-${arch}.${ext}
|
||||
|
||||
toolsets:
|
||||
appimage: '1.0.3'
|
||||
|
||||
npmRebuild: false
|
||||
afterAllArtifactBuild: scripts/after-all-artifact-build.mjs
|
||||
publish:
|
||||
provider: github
|
||||
owner: jeffvli
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
import react from '@vitejs/plugin-react';
|
||||
import { externalizeDepsPlugin, UserConfig } from 'electron-vite';
|
||||
import { resolve } from 'path';
|
||||
import conditionalImportPlugin from 'vite-plugin-conditional-import';
|
||||
import dynamicImportPlugin from 'vite-plugin-dynamic-import';
|
||||
import { ViteEjsPlugin } from 'vite-plugin-ejs';
|
||||
|
||||
import { createReactPlugin } from './vite.react-plugin';
|
||||
|
||||
const currentOSEnv = process.platform;
|
||||
const electronRendererTarget = 'chrome87';
|
||||
|
||||
const config: UserConfig = {
|
||||
main: {
|
||||
@@ -36,6 +38,9 @@ const config: UserConfig = {
|
||||
},
|
||||
},
|
||||
preload: {
|
||||
build: {
|
||||
sourcemap: true,
|
||||
},
|
||||
plugins: [externalizeDepsPlugin()],
|
||||
resolve: {
|
||||
alias: {
|
||||
@@ -48,7 +53,11 @@ const config: UserConfig = {
|
||||
build: {
|
||||
cssMinify: 'esbuild',
|
||||
minify: 'esbuild',
|
||||
modulePreload: {
|
||||
polyfill: false,
|
||||
},
|
||||
sourcemap: true,
|
||||
target: electronRendererTarget,
|
||||
},
|
||||
css: {
|
||||
modules: {
|
||||
@@ -56,7 +65,7 @@ const config: UserConfig = {
|
||||
localsConvention: 'camelCase',
|
||||
},
|
||||
},
|
||||
plugins: [react(), ViteEjsPlugin({ web: false })],
|
||||
plugins: [createReactPlugin(), ViteEjsPlugin({ web: false })],
|
||||
resolve: {
|
||||
alias: {
|
||||
'/@/i18n': resolve('src/i18n'),
|
||||
|
||||
@@ -25,7 +25,7 @@ export default tseslint.config(
|
||||
'react-refresh': eslintPluginReactRefresh,
|
||||
},
|
||||
rules: {
|
||||
...eslintPluginReactHooks.configs.recommended.rules,
|
||||
...eslintPluginReactHooks.configs['recommended-latest'].rules,
|
||||
...eslintPluginReactRefresh.configs.vite.rules,
|
||||
'@typescript-eslint/explicit-function-return-type': 'off',
|
||||
'@typescript-eslint/no-duplicate-enum-values': 'off',
|
||||
|
||||
|
Before Width: | Height: | Size: 118 KiB |
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 77 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512"><g style="display:inline" transform="translate(-53.452 -43.352)scale(1.11813)"><circle cx="256" cy="240.312" r="21.5" style="opacity:1;fill:#000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.19597;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke;filter:url(#filter249)"/><path d="M220.85 277.951 183.5 315.6l36 36.1 20-19.7s5.856-6.2 16.5-6.2 16.5 6.2 16.5 6.2l20 19.7 36-36.1-37.35-37.649A51.5 51.5 0 0 1 256 291.812a51.5 51.5 0 0 1-35.15-13.86" style="opacity:1;fill:#000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter249)"/><path d="M256 145.4a25.7 25.7 0 0 0-18.229 7.551L66.97 323.47A25.42 25.42 0 0 0 59.5 341.5c0 14.083 11.417 25.5 25.5 25.5a25.42 25.42 0 0 0 18.031-7.469l103.895-103.597a51.5 51.5 0 0 1-2.426-15.621 51.5 51.5 0 0 1 51.5-51.5 51.5 51.5 0 0 1 51.5 51.5 51.5 51.5 0 0 1-2.426 15.62L408.97 359.532A25.42 25.42 0 0 0 427 367c14.083 0 25.5-11.417 25.5-25.5a25.42 25.42 0 0 0-7.469-18.031L274.23 152.95a25.7 25.7 0 0 0-18.229-7.55" style="display:inline;opacity:1;fill:#000;fill-opacity:1;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;paint-order:markers fill stroke;filter:url(#filter249)"/></g></svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
@@ -0,0 +1,202 @@
|
||||
{
|
||||
"fill-specializations" : [
|
||||
{
|
||||
"value" : {
|
||||
"linear-gradient" : [
|
||||
"display-p3:0.87416,0.87416,0.87416,1.00000",
|
||||
"display-p3:0.99575,0.99575,0.99575,1.00000"
|
||||
],
|
||||
"orientation" : {
|
||||
"start" : {
|
||||
"x" : 0.5,
|
||||
"y" : 1
|
||||
},
|
||||
"stop" : {
|
||||
"x" : 0.5,
|
||||
"y" : 0.3
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"appearance" : "dark",
|
||||
"value" : "system-dark"
|
||||
}
|
||||
],
|
||||
"groups" : [
|
||||
{
|
||||
"blend-mode-specializations" : [
|
||||
{
|
||||
"appearance" : "tinted",
|
||||
"value" : "normal"
|
||||
}
|
||||
],
|
||||
"blur-material-specializations" : [
|
||||
{
|
||||
"value" : 0.7
|
||||
},
|
||||
{
|
||||
"appearance" : "dark",
|
||||
"value" : 0.7
|
||||
},
|
||||
{
|
||||
"appearance" : "tinted",
|
||||
"value" : null
|
||||
}
|
||||
],
|
||||
"hidden" : false,
|
||||
"layers" : [
|
||||
{
|
||||
"blend-mode-specializations" : [
|
||||
{
|
||||
"appearance" : "tinted",
|
||||
"value" : "normal"
|
||||
}
|
||||
],
|
||||
"fill-specializations" : [
|
||||
{
|
||||
"value" : {
|
||||
"solid" : "extended-gray:0.00000,1.00000"
|
||||
}
|
||||
},
|
||||
{
|
||||
"appearance" : "dark",
|
||||
"value" : {
|
||||
"linear-gradient" : [
|
||||
"display-p3:0.78674,0.78674,0.78674,1.00000",
|
||||
"display-p3:0.87416,0.87416,0.87416,1.00000"
|
||||
],
|
||||
"orientation" : {
|
||||
"start" : {
|
||||
"x" : 0.5,
|
||||
"y" : 1
|
||||
},
|
||||
"stop" : {
|
||||
"x" : 0.5,
|
||||
"y" : 0
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"appearance" : "tinted",
|
||||
"value" : {
|
||||
"solid" : "gray:1.00000,1.00000"
|
||||
}
|
||||
}
|
||||
],
|
||||
"glass-specializations" : [
|
||||
{
|
||||
"value" : true
|
||||
},
|
||||
{
|
||||
"appearance" : "dark",
|
||||
"value" : true
|
||||
},
|
||||
{
|
||||
"appearance" : "tinted",
|
||||
"value" : true
|
||||
}
|
||||
],
|
||||
"hidden" : false,
|
||||
"image-name" : "feishin.svg",
|
||||
"name" : "feishin",
|
||||
"opacity-specializations" : [
|
||||
{
|
||||
"value" : 1
|
||||
},
|
||||
{
|
||||
"appearance" : "tinted",
|
||||
"value" : 1
|
||||
}
|
||||
],
|
||||
"position" : {
|
||||
"scale" : 0.79,
|
||||
"translation-in-points" : [
|
||||
18,
|
||||
-2
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"lighting-specializations" : [
|
||||
{
|
||||
"value" : "individual"
|
||||
},
|
||||
{
|
||||
"appearance" : "tinted",
|
||||
"value" : "combined"
|
||||
}
|
||||
],
|
||||
"position" : {
|
||||
"scale" : 2.2,
|
||||
"translation-in-points" : [
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"shadow-specializations" : [
|
||||
{
|
||||
"value" : {
|
||||
"kind" : "neutral",
|
||||
"opacity" : 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"appearance" : "dark",
|
||||
"value" : {
|
||||
"kind" : "layer-color",
|
||||
"opacity" : 0.5
|
||||
}
|
||||
},
|
||||
{
|
||||
"appearance" : "tinted",
|
||||
"value" : {
|
||||
"kind" : "neutral",
|
||||
"opacity" : 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"specular-specializations" : [
|
||||
{
|
||||
"value" : false
|
||||
},
|
||||
{
|
||||
"appearance" : "dark",
|
||||
"value" : false
|
||||
},
|
||||
{
|
||||
"appearance" : "tinted",
|
||||
"value" : true
|
||||
}
|
||||
],
|
||||
"translucency-specializations" : [
|
||||
{
|
||||
"value" : {
|
||||
"enabled" : true,
|
||||
"value" : 0.29
|
||||
}
|
||||
},
|
||||
{
|
||||
"appearance" : "dark",
|
||||
"value" : {
|
||||
"enabled" : false,
|
||||
"value" : 0.29
|
||||
}
|
||||
},
|
||||
{
|
||||
"appearance" : "tinted",
|
||||
"value" : {
|
||||
"enabled" : true,
|
||||
"value" : 0.5
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"supported-platforms" : {
|
||||
"squares" : [
|
||||
"macOS"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 214 KiB |
|
Before Width: | Height: | Size: 101 KiB |
@@ -0,0 +1,104 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="512"
|
||||
height="512"
|
||||
viewBox="0 0 512 512"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
xml:space="preserve"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||
id="defs1"><linearGradient
|
||||
id="linearGradient1"><stop
|
||||
style="stop-color:#dfdfdf;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop1" /><stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop2" /></linearGradient><filter
|
||||
style="color-interpolation-filters:sRGB"
|
||||
id="filter249"
|
||||
x="-0.61395349"
|
||||
y="-0.61395349"
|
||||
width="2.227907"
|
||||
height="2.5069767"><feFlood
|
||||
result="flood"
|
||||
in="SourceGraphic"
|
||||
flood-opacity="0.498039"
|
||||
flood-color="rgb(0,0,0)"
|
||||
id="feFlood247" /><feGaussianBlur
|
||||
result="blur"
|
||||
in="SourceGraphic"
|
||||
stdDeviation="1.000000"
|
||||
id="feGaussianBlur247" /><feOffset
|
||||
result="offset"
|
||||
in="blur"
|
||||
dx="0.000000"
|
||||
dy="2"
|
||||
id="feOffset247" /><feComposite
|
||||
result="comp1"
|
||||
operator="in"
|
||||
in="flood"
|
||||
in2="offset"
|
||||
id="feComposite248" /><feComposite
|
||||
result="fbSourceGraphic"
|
||||
operator="over"
|
||||
in="SourceGraphic"
|
||||
id="feComposite249"
|
||||
in2="comp1" /><feColorMatrix
|
||||
result="fbSourceGraphicAlpha"
|
||||
in="fbSourceGraphic"
|
||||
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
|
||||
id="feColorMatrix122" /><feFlood
|
||||
id="feFlood122"
|
||||
result="flood"
|
||||
in="fbSourceGraphic"
|
||||
flood-opacity="0.196078"
|
||||
flood-color="rgb(0,0,0)" /><feGaussianBlur
|
||||
id="feGaussianBlur122"
|
||||
result="blur"
|
||||
in="fbSourceGraphic"
|
||||
stdDeviation="10.000000" /><feOffset
|
||||
id="feOffset122"
|
||||
result="offset"
|
||||
in="blur"
|
||||
dx="0.000000"
|
||||
dy="10.000000" /><feComposite
|
||||
id="feComposite122"
|
||||
result="comp1"
|
||||
operator="in"
|
||||
in="flood"
|
||||
in2="offset" /><feComposite
|
||||
id="feComposite123"
|
||||
result="comp2"
|
||||
operator="over"
|
||||
in="fbSourceGraphic"
|
||||
in2="comp1" /></filter><linearGradient
|
||||
xlink:href="#linearGradient1"
|
||||
id="linearGradient2"
|
||||
x1="256"
|
||||
y1="0"
|
||||
x2="256"
|
||||
y2="512"
|
||||
gradientUnits="userSpaceOnUse" /></defs><g
|
||||
id="layer1"
|
||||
style="display:inline"><circle
|
||||
style="display:inline;fill:url(#linearGradient2);stroke-width:25;stroke-linecap:round;stroke-linejoin:round;paint-order:markers fill stroke"
|
||||
id="background"
|
||||
cx="256"
|
||||
cy="256"
|
||||
r="256" /><circle
|
||||
style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.19597;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke;filter:url(#filter249)"
|
||||
id="dot"
|
||||
cx="256"
|
||||
cy="240.31155"
|
||||
r="21.5" /><path
|
||||
id="bottom"
|
||||
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter249)"
|
||||
d="M 220.84961,277.95117 183.5,315.59961 219.5,351.69922 239.5,332 c 0,0 5.85615,-6.19922 16.5,-6.19922 10.64385,0 16.5,6.19922 16.5,6.19922 l 20,19.69922 36,-36.09961 -37.34961,-37.64844 A 51.5,51.5 0 0 1 256,291.8125 51.5,51.5 0 0 1 220.84961,277.95117 Z" /><path
|
||||
id="main"
|
||||
style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;paint-order:markers fill stroke;filter:url(#filter249)"
|
||||
d="m 256,145.40039 c -7.11895,0 -13.56326,2.88552 -18.22852,7.55078 L 66.96875,323.46875 C 62.354158,328.08334 59.5,334.45837 59.5,341.5 c 0,14.08326 11.416739,25.5 25.5,25.5 7.04163,0 13.41666,-2.85416 18.03125,-7.46875 L 206.92578,255.93359 A 51.5,51.5 0 0 1 204.5,240.3125 a 51.5,51.5 0 0 1 51.5,-51.5 51.5,51.5 0 0 1 51.5,51.5 51.5,51.5 0 0 1 -2.42578,15.62109 L 408.96875,359.53125 C 413.58334,364.14585 419.95837,367 427,367 c 14.08326,0 25.5,-11.41674 25.5,-25.5 0,-7.04163 -2.85415,-13.41666 -7.46875,-18.03125 L 274.22852,152.95117 C 269.56326,148.2859 263.11895,145.40039 256,145.40039 Z" /></g></svg>
|
||||
|
After Width: | Height: | Size: 4.4 KiB |
|
Before Width: | Height: | Size: 644 KiB After Width: | Height: | Size: 733 KiB |
|
Before Width: | Height: | Size: 186 KiB After Width: | Height: | Size: 371 KiB |
|
Before Width: | Height: | Size: 465 KiB After Width: | Height: | Size: 869 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 49 KiB |
|
Before Width: | Height: | Size: 887 KiB After Width: | Height: | Size: 990 KiB |
|
Before Width: | Height: | Size: 396 KiB After Width: | Height: | Size: 356 KiB |
@@ -1,5 +1,6 @@
|
||||
server {
|
||||
listen 9180;
|
||||
listen [::]:9180;
|
||||
sendfile on;
|
||||
default_type application/octet-stream;
|
||||
|
||||
@@ -19,9 +20,11 @@ server {
|
||||
|
||||
location ${PUBLIC_PATH}settings.js {
|
||||
alias /etc/nginx/conf.d/settings.js;
|
||||
add_header Cache-Control "no-store";
|
||||
}
|
||||
|
||||
location ${PUBLIC_PATH}/settings.js {
|
||||
alias /etc/nginx/conf.d/settings.js;
|
||||
add_header Cache-Control "no-store";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "feishin",
|
||||
"version": "1.2.0",
|
||||
"version": "1.13.0",
|
||||
"description": "A modern self-hosted music player.",
|
||||
"keywords": [
|
||||
"subsonic",
|
||||
@@ -30,29 +30,37 @@
|
||||
"dev:watch": "electron-vite dev --watch",
|
||||
"i18next": "i18next -c src/i18n/i18next-parser.config.js",
|
||||
"postinstall": "electron-builder install-app-deps",
|
||||
"lint": "pnpm run lint-code && pnpm run lint-styles",
|
||||
"lint": "pnpm run typecheck && pnpm run lint-code && pnpm run lint-styles",
|
||||
"lint:fix": "pnpm run lint-code:fix && pnpm run lint-styles:fix",
|
||||
"lint-code": "eslint --max-warnings=0 --cache .",
|
||||
"lint-code:fix": "eslint --cache --fix .",
|
||||
"lint-styles": "stylelint --max-warnings=0 'src/**/*.{css,scss}'",
|
||||
"lint-styles:fix": "stylelint 'src/**/*.{css,scss}' --fix",
|
||||
"lint:fix": "pnpm run lint-code:fix && pnpm run lint-styles:fix",
|
||||
"package": "pnpm run build && electron-builder",
|
||||
"package:dev": "pnpm run build && electron-builder --dir",
|
||||
"package:linux": "pnpm run build && electron-builder --linux",
|
||||
"package:linux-arm64:pr": "pnpm run build && electron-builder --linux --arm64 --publish never",
|
||||
"package:linux:pr": "pnpm run build && electron-builder --linux --publish never",
|
||||
"package:linux-arm64:pr": "pnpm run build && electron-builder --linux --arm64 --publish never",
|
||||
"package:mac": "pnpm run build && electron-builder --mac",
|
||||
"package:mac:pr": "pnpm run build && electron-builder --mac --publish never",
|
||||
"package:win": "pnpm run build && electron-builder --win",
|
||||
"package:win:pr": "pnpm run build && electron-builder --win --publish never",
|
||||
"package:win-arm64:pr": "pnpm run build && electron-builder --win --arm64 --publish never",
|
||||
"publish:linux": "pnpm run build && electron-builder --publish always --linux",
|
||||
"publish:linux-arm64": "pnpm run build && electron-builder --publish always --linux --arm64",
|
||||
"publish:linux-arm64:beta": "pnpm run build && electron-builder --config electron-builder-beta.yml --publish always --linux --arm64",
|
||||
"publish:linux:alpha": "pnpm run build && electron-builder --config electron-builder-alpha.yml --publish always --linux",
|
||||
"publish:linux:beta": "pnpm run build && electron-builder --config electron-builder-beta.yml --publish always --linux",
|
||||
"publish:linux-arm64": "pnpm run build && electron-builder --publish always --linux --arm64",
|
||||
"publish:linux-arm64:alpha": "pnpm run build && electron-builder --config electron-builder-alpha.yml --publish always --linux --arm64",
|
||||
"publish:linux-arm64:beta": "pnpm run build && electron-builder --config electron-builder-beta.yml --publish always --linux --arm64",
|
||||
"publish:mac": "pnpm run build && electron-builder --publish always --mac",
|
||||
"publish:mac:alpha": "pnpm run build && electron-builder --config electron-builder-alpha.yml --publish always --mac",
|
||||
"publish:mac:beta": "pnpm run build && electron-builder --config electron-builder-beta.yml --publish always --mac",
|
||||
"publish:win": "pnpm run build && electron-builder --publish always --win",
|
||||
"publish:win:alpha": "pnpm run build && electron-builder --config electron-builder-alpha.yml --publish always --win",
|
||||
"publish:win:beta": "pnpm run build && electron-builder --config electron-builder-beta.yml --publish always --win",
|
||||
"publish:win-arm64": "pnpm run build && electron-builder --publish always --win --arm64",
|
||||
"publish:win-arm64:alpha": "pnpm run build && electron-builder --config electron-builder-alpha.yml --publish always --win --arm64",
|
||||
"publish:win-arm64:beta": "pnpm run build && electron-builder --config electron-builder-beta.yml --publish always --win --arm64",
|
||||
"start": "electron-vite preview",
|
||||
"typecheck": "pnpm run typecheck:node && pnpm run typecheck:web",
|
||||
"typecheck:node": "tsc --noEmit -p tsconfig.node.json --composite false",
|
||||
@@ -60,125 +68,127 @@
|
||||
"version": "pnpm version --no-git-tag-version",
|
||||
"postversion": "node ./scripts/update-app-stream.mjs"
|
||||
},
|
||||
"resolutions": {
|
||||
"xml2js": "0.5.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@atlaskit/pragmatic-drag-and-drop": "1.7.7",
|
||||
"@atlaskit/pragmatic-drag-and-drop-auto-scroll": "^2.1.2",
|
||||
"@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.1.0",
|
||||
"@electron-toolkit/preload": "^3.0.1",
|
||||
"@atlaskit/pragmatic-drag-and-drop-auto-scroll": "^2.1.5",
|
||||
"@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.2.0",
|
||||
"@electron-toolkit/preload": "^3.0.2",
|
||||
"@electron-toolkit/utils": "^4.0.0",
|
||||
"@mantine/colors-generator": "^8.3.8",
|
||||
"@mantine/core": "^8.3.8",
|
||||
"@mantine/dates": "^8.3.8",
|
||||
"@mantine/form": "^8.3.8",
|
||||
"@mantine/hooks": "^8.3.8",
|
||||
"@mantine/modals": "^8.3.8",
|
||||
"@mantine/notifications": "^8.3.8",
|
||||
"@radix-ui/react-context-menu": "^2.2.16",
|
||||
"@tanstack/react-query": "^5.90.9",
|
||||
"@tanstack/react-query-devtools": "^5.90.2",
|
||||
"@tanstack/react-query-persist-client": "^5.90.11",
|
||||
"@mantine/colors-generator": "^9.3.0",
|
||||
"@mantine/core": "^9.3.0",
|
||||
"@mantine/dates": "^9.3.0",
|
||||
"@mantine/form": "^9.3.0",
|
||||
"@mantine/hooks": "^9.3.0",
|
||||
"@mantine/modals": "^9.3.0",
|
||||
"@mantine/notifications": "^9.3.0",
|
||||
"@radix-ui/react-context-menu": "^2.3.0",
|
||||
"@tanstack/react-query": "5.96.2",
|
||||
"@tanstack/react-query-devtools": "5.96.2",
|
||||
"@tanstack/react-query-persist-client": "5.96.2",
|
||||
"@ts-rest/core": "^3.52.1",
|
||||
"@wavesurfer/react": "^1.0.11",
|
||||
"@xhayper/discord-rpc": "^1.3.0",
|
||||
"audiomotion-analyzer": "^4.5.1",
|
||||
"axios": "^1.13.2",
|
||||
"butterchurn": "^3.0.0-beta.5",
|
||||
"butterchurn-presets": "^3.0.0-beta.4",
|
||||
"cheerio": "^1.1.2",
|
||||
"@wavesurfer/react": "^1.0.12",
|
||||
"@xhayper/discord-rpc": "^1.3.4",
|
||||
"audiomotion-analyzer": "^4.5.4",
|
||||
"axios": "^1.17.0",
|
||||
"butterchurn": "3.0.0-beta.5",
|
||||
"butterchurn-presets": "3.0.0-beta.4",
|
||||
"cheerio": "^1.2.0",
|
||||
"clsx": "^2.1.1",
|
||||
"cmdk": "^1.1.1",
|
||||
"dayjs": "^1.11.19",
|
||||
"dompurify": "^3.3.0",
|
||||
"dayjs": "^1.11.21",
|
||||
"dompurify": "^3.4.8",
|
||||
"electron-debug": "^3.2.0",
|
||||
"electron-localshortcut": "^3.2.1",
|
||||
"electron-log": "^5.4.3",
|
||||
"electron-log": "^5.4.4",
|
||||
"electron-store": "^8.2.0",
|
||||
"electron-updater": "^6.6.2",
|
||||
"fast-average-color": "^9.5.0",
|
||||
"fast-xml-parser": "^5.3.2",
|
||||
"electron-updater": "^6.8.9",
|
||||
"fast-average-color": "9.5.0",
|
||||
"fast-xml-parser": "^5.8.0",
|
||||
"format-duration": "^3.0.2",
|
||||
"fuse.js": "^7.1.0",
|
||||
"i18next": "^25.6.2",
|
||||
"fuse.js": "^7.4.2",
|
||||
"i18next": "^25.10.10",
|
||||
"icecast-metadata-stats": "^0.1.12",
|
||||
"idb-keyval": "^6.2.2",
|
||||
"idb-keyval": "^6.2.5",
|
||||
"immer": "^10.2.0",
|
||||
"is-electron": "^2.2.2",
|
||||
"lodash": "^4.17.21",
|
||||
"lodash": "^4.18.1",
|
||||
"md5": "^2.3.0",
|
||||
"motion": "^12.23.24",
|
||||
"motion": "^12.40.0",
|
||||
"mpris-service": "^2.1.2",
|
||||
"nanoid": "^3.3.11",
|
||||
"nanoid": "^3.3.12",
|
||||
"node-mpv": "github:jeffvli/Node-MPV#32b4d64395289ad710c41d481d2707a7acfc228f",
|
||||
"nuqs": "^2.7.1",
|
||||
"overlayscrollbars": "^2.11.1",
|
||||
"overlayscrollbars": "^2.16.0",
|
||||
"overlayscrollbars-react": "^0.5.6",
|
||||
"qs": "^6.14.1",
|
||||
"react": "^19.1.0",
|
||||
"react-call": "^1.8.1",
|
||||
"react-dom": "^19.1.0",
|
||||
"qs": "^6.15.2",
|
||||
"react": "^19.2.7",
|
||||
"react-call": "^1.8.2",
|
||||
"react-dom": "^19.2.7",
|
||||
"react-error-boundary": "^5.0.0",
|
||||
"react-i18next": "^16.3.3",
|
||||
"react-icons": "^5.5.0",
|
||||
"react-image": "^4.1.0",
|
||||
"react-loading-skeleton": "^3.5.0",
|
||||
"react-player": "^2.16.0",
|
||||
"react-router": "^7.9.6",
|
||||
"react-split-pane": "^3.0.4",
|
||||
"react-i18next": "^16.6.6",
|
||||
"react-icons": "^5.6.0",
|
||||
"react-player": "^2.16.1",
|
||||
"react-router": "^7.17.0",
|
||||
"react-split-pane": "^3.2.0",
|
||||
"react-virtualized-auto-sizer": "^1.0.26",
|
||||
"react-window": "1.8.11",
|
||||
"react-window-v2": "npm:react-window@^2.2.3",
|
||||
"semver": "^7.5.4",
|
||||
"react-window-v2": "npm:react-window@^2.2.7",
|
||||
"semver": "^7.8.2",
|
||||
"string-to-color": "^2.2.2",
|
||||
"wavesurfer.js": "^7.11.1",
|
||||
"ws": "^8.18.2",
|
||||
"zod": "^3.22.3",
|
||||
"zustand": "^5.0.5"
|
||||
"wavesurfer.js": "^7.12.7",
|
||||
"ws": "^8.21.0",
|
||||
"zod": "^3.25.76",
|
||||
"zustand": "^5.0.14"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@electron-toolkit/eslint-config-prettier": "^3.0.0",
|
||||
"@electron-toolkit/eslint-config-ts": "^3.0.0",
|
||||
"@electron-toolkit/eslint-config-ts": "^3.1.0",
|
||||
"@electron-toolkit/tsconfig": "^2.0.0",
|
||||
"@types/electron-localshortcut": "^3.1.0",
|
||||
"@types/lodash": "^4.17.18",
|
||||
"@types/md5": "^2.3.5",
|
||||
"@types/node": "^24.10.1",
|
||||
"@types/react": "^19.2.5",
|
||||
"@types/electron-localshortcut": "^3.1.3",
|
||||
"@types/lodash": "^4.17.24",
|
||||
"@types/md5": "^2.3.6",
|
||||
"@types/node": "^24.13.1",
|
||||
"@types/react": "^19.2.17",
|
||||
"@types/react-dom": "^19.2.3",
|
||||
"@types/react-window": "^1.8.8",
|
||||
"@types/source-map-support": "^0.5.10",
|
||||
"@types/ws": "^8.18.1",
|
||||
"@vitejs/plugin-react": "^5.1.1",
|
||||
"@vitejs/plugin-react": "^5.2.0",
|
||||
"babel-plugin-react-compiler": "^1.0.0",
|
||||
"concurrently": "^9.2.1",
|
||||
"cross-env": "^10.1.0",
|
||||
"electron": "^39.2.7",
|
||||
"electron-builder": "^26.0.12",
|
||||
"electron": "^41.7.1",
|
||||
"electron-builder": "^26.15.0",
|
||||
"electron-devtools-installer": "^4.0.0",
|
||||
"electron-vite": "^4.0.1",
|
||||
"eslint": "^9.24.0",
|
||||
"eslint-plugin-perfectionist": "^4.13.0",
|
||||
"eslint-plugin-prettier": "^5.4.0",
|
||||
"eslint": "^9.39.4",
|
||||
"eslint-plugin-perfectionist": "^4.15.1",
|
||||
"eslint-plugin-prettier": "^5.5.6",
|
||||
"eslint-plugin-react": "^7.37.5",
|
||||
"eslint-plugin-react-hooks": "^7.0.1",
|
||||
"eslint-plugin-react-refresh": "^0.4.24",
|
||||
"i18next-parser": "^9.3.0",
|
||||
"eslint-plugin-react-hooks": "^7.1.1",
|
||||
"eslint-plugin-react-refresh": "^0.4.26",
|
||||
"i18next-parser": "^9.4.0",
|
||||
"postcss-preset-mantine": "^1.18.0",
|
||||
"postcss-simple-vars": "^7.0.1",
|
||||
"prettier": "^3.6.2",
|
||||
"prettier-plugin-packagejson": "^2.5.19",
|
||||
"stylelint": "^16.25.0",
|
||||
"stylelint-config-css-modules": "^4.5.1",
|
||||
"stylelint-config-recess-order": "^7.4.0",
|
||||
"prettier": "^3.8.3",
|
||||
"prettier-plugin-packagejson": "^2.5.22",
|
||||
"stylelint": "^16.26.1",
|
||||
"stylelint-config-css-modules": "^4.6.0",
|
||||
"stylelint-config-recess-order": "^7.7.0",
|
||||
"stylelint-config-standard": "^39.0.1",
|
||||
"typescript": "^5.8.3",
|
||||
"vite": "^7.2.2",
|
||||
"typescript": "^5.9.3",
|
||||
"vite": "^7.3.5",
|
||||
"vite-plugin-conditional-import": "^0.1.7",
|
||||
"vite-plugin-dynamic-import": "^1.6.0",
|
||||
"vite-plugin-ejs": "^1.7.0",
|
||||
"vite-plugin-pwa": "^1.1.0"
|
||||
"vite-plugin-pwa": "^1.3.0"
|
||||
},
|
||||
"pnpm": {
|
||||
"onlyBuiltDependencies": [
|
||||
"electron",
|
||||
"electron-winstaller",
|
||||
"esbuild"
|
||||
]
|
||||
},
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import react from '@vitejs/plugin-react';
|
||||
import path from 'path';
|
||||
import { defineConfig, normalizePath } from 'vite';
|
||||
import { ViteEjsPlugin } from 'vite-plugin-ejs';
|
||||
|
||||
import { version } from './package.json';
|
||||
import { createReactPlugin } from './vite.react-plugin';
|
||||
|
||||
export default defineConfig({
|
||||
build: {
|
||||
@@ -23,6 +23,7 @@ export default defineConfig({
|
||||
assetFileNames: '[name].[ext]',
|
||||
chunkFileNames: '[name].js',
|
||||
entryFileNames: '[name].js',
|
||||
sourcemapExcludeSources: false,
|
||||
},
|
||||
},
|
||||
sourcemap: true,
|
||||
@@ -34,7 +35,7 @@ export default defineConfig({
|
||||
},
|
||||
},
|
||||
plugins: [
|
||||
react(),
|
||||
createReactPlugin(),
|
||||
ViteEjsPlugin({
|
||||
prod: process.env.NODE_ENV === 'production',
|
||||
root: normalizePath(path.resolve(__dirname, './src/remote')),
|
||||
|
||||
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 32 KiB |
@@ -0,0 +1,45 @@
|
||||
import { execSync } from 'child_process';
|
||||
import path from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = path.dirname(__filename);
|
||||
|
||||
/**
|
||||
* Electron-builder afterAllArtifactBuild hook
|
||||
* Runs the app stream update script only for Linux builds
|
||||
* Returns the metainfo file path to be included in published artifacts
|
||||
*/
|
||||
|
||||
// This is not a typescript file, and is called by electron-builder, so we cannot use typescript features here.
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export default async function afterAllArtifactBuild(buildResult) {
|
||||
// Check if this build includes Linux as a target
|
||||
const isLinux = Array.from(buildResult.platformToTargets.keys()).some(
|
||||
(platform) => platform.name === 'linux',
|
||||
);
|
||||
|
||||
if (isLinux) {
|
||||
const updateScriptPath = path.join(__dirname, 'update-app-stream.mjs');
|
||||
const projectRoot = path.resolve(__dirname, '..');
|
||||
const metainfoFile = path.resolve(projectRoot, 'org.jeffvli.feishin.metainfo.xml');
|
||||
|
||||
console.log('Running app stream update for Linux build...');
|
||||
|
||||
try {
|
||||
execSync(`node ${updateScriptPath} --replace-if-version-missing`, {
|
||||
cwd: projectRoot,
|
||||
stdio: 'inherit',
|
||||
});
|
||||
|
||||
// Return the metainfo file to be included in published artifacts
|
||||
return [metainfoFile];
|
||||
} catch (error) {
|
||||
console.error('Failed to update app stream:', error.message);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
// Return empty array if not a Linux build
|
||||
return [];
|
||||
}
|
||||
@@ -3,30 +3,51 @@ import fs from 'fs';
|
||||
import path from 'path';
|
||||
|
||||
const args = process.argv.slice(2);
|
||||
if (args.length > 3) {
|
||||
console.error('Usage: node update-app-stream.js [package-file] [date] [metainfo-file]');
|
||||
|
||||
// Parse flags and positional arguments
|
||||
const flags = args.filter((arg) => arg.startsWith('--'));
|
||||
const positionalArgs = args.filter((arg) => !arg.startsWith('--'));
|
||||
const replaceIfVersionMissing = flags.includes('--replace-if-version-missing');
|
||||
|
||||
if (positionalArgs.length > 3) {
|
||||
console.error(
|
||||
'Usage: node update-app-stream.js [package-file] [date] [metainfo-file] [--replace-if-version-missing]',
|
||||
);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const packageFile = args[0] || path.resolve(process.cwd(), 'package.json');
|
||||
const packageFile = positionalArgs[0] || path.resolve(process.cwd(), 'package.json');
|
||||
|
||||
const packageContent = fs.readFileSync(packageFile, 'utf8');
|
||||
const packageJson = JSON.parse(packageContent);
|
||||
const version = packageJson.version;
|
||||
|
||||
const time = Math.floor((Date.parse(args[1]) || Date.now()) / 1000);
|
||||
const metainfoFile = args[2] || path.resolve(process.cwd(), 'org.jeffvli.feishin.metainfo.xml');
|
||||
const time = Math.floor((Date.parse(positionalArgs[1]) || Date.now()) / 1000);
|
||||
const metainfoFile =
|
||||
positionalArgs[2] || path.resolve(process.cwd(), 'org.jeffvli.feishin.metainfo.xml');
|
||||
|
||||
const parser = new XMLParser({ ignoreAttributes: false });
|
||||
const metainfoContent = fs.readFileSync(metainfoFile, 'utf8');
|
||||
const metainfo = parser.parse(metainfoContent);
|
||||
|
||||
if (!metainfo.component.releases.release.find((release) => release['@_version'] === version)) {
|
||||
metainfo.component.releases.release.unshift({
|
||||
'@_date': new Date(time * 1000).toISOString().split('T')[0],
|
||||
'@_type': version.includes('-') ? 'development' : 'stable',
|
||||
'@_version': version,
|
||||
});
|
||||
const newRelease = {
|
||||
'@_date': new Date(time * 1000).toISOString().split('T')[0],
|
||||
'@_type': version.includes('-') ? 'development' : 'stable',
|
||||
'@_version': version,
|
||||
};
|
||||
|
||||
if (replaceIfVersionMissing) {
|
||||
// Replace all releases with only the current version
|
||||
metainfo.component.releases.release = [newRelease];
|
||||
} else {
|
||||
// Default behavior: add new release if it doesn't exist
|
||||
const releaseExists =
|
||||
metainfo.component.releases.release.findIndex(
|
||||
(release) => release['@_version'] === version,
|
||||
) !== -1;
|
||||
if (!releaseExists) {
|
||||
metainfo.component.releases.release.unshift(newRelease);
|
||||
}
|
||||
}
|
||||
|
||||
const builder = new XMLBuilder({ format: true, ignoreAttributes: false, indentBy: ' ' });
|
||||
|
||||
@@ -1 +1,102 @@
|
||||
"use strict";window.SERVER_URL="${SERVER_URL}";window.SERVER_NAME="${SERVER_NAME}";window.SERVER_TYPE="${SERVER_TYPE}";window.SERVER_LOCK=${SERVER_LOCK};window.LEGACY_AUTHENTICATION=${LEGACY_AUTHENTICATION};window.ANALYTICS_DISABLED="${ANALYTICS_DISABLED}";
|
||||
"use strict";
|
||||
|
||||
window.SERVER_URL = "${SERVER_URL}";
|
||||
window.REMOTE_URL = "${REMOTE_URL}";
|
||||
window.SERVER_NAME = "${SERVER_NAME}";
|
||||
window.SERVER_TYPE = "${SERVER_TYPE}";
|
||||
window.SERVER_LOCK = "${SERVER_LOCK}";
|
||||
window.LEGACY_AUTHENTICATION = "${LEGACY_AUTHENTICATION}";
|
||||
window.ANALYTICS_DISABLED = "${ANALYTICS_DISABLED}";
|
||||
|
||||
window.FS_GENERAL_ACCENT = "${FS_GENERAL_ACCENT}";
|
||||
window.FS_GENERAL_ALBUM_BACKGROUND = "${FS_GENERAL_ALBUM_BACKGROUND}";
|
||||
window.FS_GENERAL_ALBUM_BACKGROUND_BLUR = "${FS_GENERAL_ALBUM_BACKGROUND_BLUR}";
|
||||
window.FS_GENERAL_ARTIST_BACKGROUND = "${FS_GENERAL_ARTIST_BACKGROUND}";
|
||||
window.FS_GENERAL_ARTIST_BACKGROUND_BLUR = "${FS_GENERAL_ARTIST_BACKGROUND_BLUR}";
|
||||
window.FS_GENERAL_BLUR_EXPLICIT_IMAGES = "${FS_GENERAL_BLUR_EXPLICIT_IMAGES}";
|
||||
window.FS_GENERAL_COMBINED_LYRICS_AND_VISUALIZER = "${FS_GENERAL_COMBINED_LYRICS_AND_VISUALIZER}";
|
||||
window.FS_GENERAL_ENABLE_GRID_MULTI_SELECT = "${FS_GENERAL_ENABLE_GRID_MULTI_SELECT}";
|
||||
window.FS_GENERAL_EXTERNAL_LINKS = "${FS_GENERAL_EXTERNAL_LINKS}";
|
||||
window.FS_GENERAL_FOLLOW_CURRENT_SONG = "${FS_GENERAL_FOLLOW_CURRENT_SONG}";
|
||||
window.FS_GENERAL_FOLLOW_SYSTEM_THEME = "${FS_GENERAL_FOLLOW_SYSTEM_THEME}";
|
||||
window.FS_GENERAL_HOME_FEATURE = "${FS_GENERAL_HOME_FEATURE}";
|
||||
window.FS_GENERAL_HOME_FEATURE_STYLE = "${FS_GENERAL_HOME_FEATURE_STYLE}";
|
||||
window.FS_GENERAL_LANGUAGE = "${FS_GENERAL_LANGUAGE}";
|
||||
window.FS_GENERAL_LAST_FM = "${FS_GENERAL_LAST_FM}";
|
||||
window.FS_GENERAL_LASTFM_API_KEY = "${FS_GENERAL_LASTFM_API_KEY}";
|
||||
window.FS_GENERAL_LISTEN_BRAINZ = "${FS_GENERAL_LISTEN_BRAINZ}";
|
||||
window.FS_GENERAL_MUSIC_BRAINZ = "${FS_GENERAL_MUSIC_BRAINZ}";
|
||||
window.FS_GENERAL_NATIVE_ASPECT_RATIO = "${FS_GENERAL_NATIVE_ASPECT_RATIO}";
|
||||
window.FS_GENERAL_PATH_REPLACE = "${FS_GENERAL_PATH_REPLACE}";
|
||||
window.FS_GENERAL_PATH_REPLACE_WITH = "${FS_GENERAL_PATH_REPLACE_WITH}";
|
||||
window.FS_GENERAL_PLAYERBAR_OPEN_DRAWER = "${FS_GENERAL_PLAYERBAR_OPEN_DRAWER}";
|
||||
window.FS_GENERAL_PRIMARY_SHADE = "${FS_GENERAL_PRIMARY_SHADE}";
|
||||
window.FS_GENERAL_QOBUZ = "${FS_GENERAL_QOBUZ}";
|
||||
window.FS_GENERAL_RESUME = "${FS_GENERAL_RESUME}";
|
||||
window.FS_GENERAL_SHOW_LYRICS_IN_SIDEBAR = "${FS_GENERAL_SHOW_LYRICS_IN_SIDEBAR}";
|
||||
window.FS_GENERAL_SHOW_RATINGS = "${FS_GENERAL_SHOW_RATINGS}";
|
||||
window.FS_GENERAL_SHOW_VISUALIZER_IN_SIDEBAR = "${FS_GENERAL_SHOW_VISUALIZER_IN_SIDEBAR}";
|
||||
window.FS_GENERAL_SIDEBAR_COLLAPSED_NAVIGATION = "${FS_GENERAL_SIDEBAR_COLLAPSED_NAVIGATION}";
|
||||
window.FS_GENERAL_SIDEBAR_COLLAPSE_SHARED = "${FS_GENERAL_SIDEBAR_COLLAPSE_SHARED}";
|
||||
window.FS_GENERAL_SIDEBAR_PLAYLIST_FOLDERS = "${FS_GENERAL_SIDEBAR_PLAYLIST_FOLDERS}";
|
||||
window.FS_GENERAL_SIDEBAR_PLAYLIST_FOLDER_SEPARATOR = "${FS_GENERAL_SIDEBAR_PLAYLIST_FOLDER_SEPARATOR}";
|
||||
window.FS_GENERAL_SIDEBAR_PLAYLIST_FOLDER_TREE_INDENT = "${FS_GENERAL_SIDEBAR_PLAYLIST_FOLDER_TREE_INDENT}";
|
||||
window.FS_GENERAL_SIDEBAR_PLAYLIST_FOLDER_TREE_LINE_COLOR = "${FS_GENERAL_SIDEBAR_PLAYLIST_FOLDER_TREE_LINE_COLOR}";
|
||||
window.FS_GENERAL_SIDEBAR_PLAYLIST_FOLDER_VIEW = "${FS_GENERAL_SIDEBAR_PLAYLIST_FOLDER_VIEW}";
|
||||
window.FS_GENERAL_SIDEBAR_PLAYLIST_LIST = "${FS_GENERAL_SIDEBAR_PLAYLIST_LIST}";
|
||||
window.FS_GENERAL_SIDEBAR_PLAYLIST_MODE = "${FS_GENERAL_SIDEBAR_PLAYLIST_MODE}";
|
||||
window.FS_GENERAL_SIDEBAR_PLAYLIST_SORTING = "${FS_GENERAL_SIDEBAR_PLAYLIST_SORTING}";
|
||||
window.FS_GENERAL_SIDE_QUEUE_TYPE = "${FS_GENERAL_SIDE_QUEUE_TYPE}";
|
||||
window.FS_GENERAL_SIDE_QUEUE_LAYOUT = "${FS_GENERAL_SIDE_QUEUE_LAYOUT}";
|
||||
window.FS_GENERAL_THEME = "${FS_GENERAL_THEME}";
|
||||
window.FS_GENERAL_THEME_DARK = "${FS_GENERAL_THEME_DARK}";
|
||||
window.FS_GENERAL_THEME_LIGHT = "${FS_GENERAL_THEME_LIGHT}";
|
||||
window.FS_GENERAL_USE_THEME_ACCENT_COLOR = "${FS_GENERAL_USE_THEME_ACCENT_COLOR}";
|
||||
window.FS_GENERAL_USE_THEME_PRIMARY_SHADE = "${FS_GENERAL_USE_THEME_PRIMARY_SHADE}";
|
||||
window.FS_GENERAL_ZOOM_FACTOR = "${FS_GENERAL_ZOOM_FACTOR}";
|
||||
|
||||
window.FS_PLAYBACK_MEDIA_SESSION = "${FS_PLAYBACK_MEDIA_SESSION}";
|
||||
window.FS_PLAYBACK_WEB_AUDIO = "${FS_PLAYBACK_WEB_AUDIO}";
|
||||
window.FS_PLAYBACK_AUDIO_FADE_ON_STATUS_CHANGE = "${FS_PLAYBACK_AUDIO_FADE_ON_STATUS_CHANGE}";
|
||||
window.FS_PLAYBACK_PRESERVE_PITCH = "${FS_PLAYBACK_PRESERVE_PITCH}";
|
||||
window.FS_PLAYBACK_SCROBBLE_ENABLED = "${FS_PLAYBACK_SCROBBLE_ENABLED}";
|
||||
window.FS_PLAYBACK_SCROBBLE_NOTIFY = "${FS_PLAYBACK_SCROBBLE_NOTIFY}";
|
||||
window.FS_PLAYBACK_SCROBBLE_AT_DURATION = "${FS_PLAYBACK_SCROBBLE_AT_DURATION}";
|
||||
window.FS_PLAYBACK_SCROBBLE_AT_PERCENTAGE = "${FS_PLAYBACK_SCROBBLE_AT_PERCENTAGE}";
|
||||
window.FS_PLAYBACK_TRANSCODE_ENABLED = "${FS_PLAYBACK_TRANSCODE_ENABLED}";
|
||||
window.FS_PLAYBACK_TRANSCODE_FORMAT = "${FS_PLAYBACK_TRANSCODE_FORMAT}";
|
||||
window.FS_PLAYBACK_TRANSCODE_BITRATE = "${FS_PLAYBACK_TRANSCODE_BITRATE}";
|
||||
window.FS_PLAYBACK_FILTERS = "${FS_PLAYBACK_FILTERS}";
|
||||
|
||||
window.FS_DISCORD_ENABLED = "${FS_DISCORD_ENABLED}";
|
||||
window.FS_DISCORD_CLIENT_ID = "${FS_DISCORD_CLIENT_ID}";
|
||||
window.FS_DISCORD_DISPLAY_TYPE = "${FS_DISCORD_DISPLAY_TYPE}";
|
||||
window.FS_DISCORD_LINK_TYPE = "${FS_DISCORD_LINK_TYPE}";
|
||||
window.FS_DISCORD_SHOW_AS_LISTENING = "${FS_DISCORD_SHOW_AS_LISTENING}";
|
||||
window.FS_DISCORD_SHOW_PAUSED = "${FS_DISCORD_SHOW_PAUSED}";
|
||||
window.FS_DISCORD_SHOW_SERVER_IMAGE = "${FS_DISCORD_SHOW_SERVER_IMAGE}";
|
||||
window.FS_DISCORD_SHOW_STATE_ICON = "${FS_DISCORD_SHOW_STATE_ICON}";
|
||||
|
||||
window.FS_LYRICS_FETCH = "${FS_LYRICS_FETCH}";
|
||||
window.FS_LYRICS_FOLLOW = "${FS_LYRICS_FOLLOW}";
|
||||
window.FS_LYRICS_DELAY_MS = "${FS_LYRICS_DELAY_MS}";
|
||||
window.FS_LYRICS_PREFER_LOCAL = "${FS_LYRICS_PREFER_LOCAL}";
|
||||
window.FS_LYRICS_SHOW_MATCH = "${FS_LYRICS_SHOW_MATCH}";
|
||||
window.FS_LYRICS_SHOW_PROVIDER = "${FS_LYRICS_SHOW_PROVIDER}";
|
||||
window.FS_LYRICS_ENABLE_AUTO_TRANSLATION = "${FS_LYRICS_ENABLE_AUTO_TRANSLATION}";
|
||||
window.FS_LYRICS_TRANSLATION_API_KEY = "${FS_LYRICS_TRANSLATION_API_KEY}";
|
||||
window.FS_LYRICS_TRANSLATION_TARGET_LANGUAGE = "${FS_LYRICS_TRANSLATION_TARGET_LANGUAGE}";
|
||||
window.FS_LYRICS_ALIGNMENT = "${FS_LYRICS_ALIGNMENT}";
|
||||
|
||||
window.FS_AUTO_DJ_ALBUM_STRATEGY = "${FS_AUTO_DJ_ALBUM_STRATEGY}";
|
||||
window.FS_AUTO_DJ_ENABLED = "${FS_AUTO_DJ_ENABLED}";
|
||||
window.FS_AUTO_DJ_ITEM_COUNT = "${FS_AUTO_DJ_ITEM_COUNT}";
|
||||
window.FS_AUTO_DJ_MODE = "${FS_AUTO_DJ_MODE}";
|
||||
window.FS_AUTO_DJ_SONG_STRATEGY = "${FS_AUTO_DJ_SONG_STRATEGY}";
|
||||
window.FS_AUTO_DJ_TIMING = "${FS_AUTO_DJ_TIMING}";
|
||||
|
||||
window.FS_CSS_CONTENT = "${FS_CSS_CONTENT}";
|
||||
window.FS_CSS_ENABLED = "${FS_CSS_ENABLED}";
|
||||
window.FS_FONT_TYPE = "${FS_FONT_TYPE}";
|
||||
window.FS_FONT_BUILT_IN = "${FS_FONT_BUILT_IN}";
|
||||
window.FS_FONT_SYSTEM = "${FS_FONT_SYSTEM}";
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { PostProcessorModule, TOptions } from 'i18next';
|
||||
import { PostProcessorModule } from 'i18next';
|
||||
import i18n from 'i18next';
|
||||
import { initReactI18next } from 'react-i18next';
|
||||
|
||||
@@ -8,6 +8,7 @@ import cs from './locales/cs.json';
|
||||
import de from './locales/de.json';
|
||||
import en from './locales/en.json';
|
||||
import es from './locales/es.json';
|
||||
import et from './locales/et.json';
|
||||
import eu from './locales/eu.json';
|
||||
import fa from './locales/fa.json';
|
||||
import fi from './locales/fi.json';
|
||||
@@ -27,6 +28,8 @@ import sl from './locales/sl.json';
|
||||
import sr from './locales/sr.json';
|
||||
import sv from './locales/sv.json';
|
||||
import ta from './locales/ta.json';
|
||||
import th from './locales/th.json';
|
||||
import tl from './locales/tl.json';
|
||||
import tr from './locales/tr.json';
|
||||
import zhHans from './locales/zh-Hans.json';
|
||||
import zhHant from './locales/zh-Hant.json';
|
||||
@@ -38,6 +41,7 @@ const resources = {
|
||||
de: { translation: de },
|
||||
en: { translation: en },
|
||||
es: { translation: es },
|
||||
et: { translation: et },
|
||||
eu: { translation: eu },
|
||||
fa: { translation: fa },
|
||||
fi: { translation: fi },
|
||||
@@ -57,6 +61,8 @@ const resources = {
|
||||
sr: { translation: sr },
|
||||
sv: { translation: sv },
|
||||
ta: { translation: ta },
|
||||
th: { translation: th },
|
||||
tl: { translation: tl },
|
||||
tr: { translation: tr },
|
||||
'zh-Hans': { translation: zhHans },
|
||||
'zh-Hant': { translation: zhHant },
|
||||
@@ -87,6 +93,10 @@ export const languages = [
|
||||
label: 'Español',
|
||||
value: 'es',
|
||||
},
|
||||
{
|
||||
label: 'Eesti',
|
||||
value: 'et',
|
||||
},
|
||||
{
|
||||
label: 'Basque',
|
||||
value: 'eu',
|
||||
@@ -163,6 +173,14 @@ export const languages = [
|
||||
label: 'Tamil',
|
||||
value: 'ta',
|
||||
},
|
||||
{
|
||||
label: 'Thai',
|
||||
value: 'th',
|
||||
},
|
||||
{
|
||||
label: 'Tagalog',
|
||||
value: 'tl',
|
||||
},
|
||||
{
|
||||
label: 'Türkçe',
|
||||
value: 'tr',
|
||||
@@ -203,25 +221,17 @@ const titleCasePostProcessor: PostProcessorModule = {
|
||||
type: 'postProcessor',
|
||||
};
|
||||
|
||||
const ignoreSentenceCaseLanguages = ['de'];
|
||||
// const ignoreSentenceCaseLanguages = ['de'];
|
||||
|
||||
const sentenceCasePostProcessor: PostProcessorModule = {
|
||||
name: 'sentenceCase',
|
||||
process: (
|
||||
value: string,
|
||||
_key: string,
|
||||
_options: TOptions<Record<string, string>>,
|
||||
translator: any,
|
||||
) => {
|
||||
process: (value: string) => {
|
||||
const sentences = value.split('. ');
|
||||
|
||||
return sentences
|
||||
.map((sentence) => {
|
||||
return (
|
||||
sentence.charAt(0).toLocaleUpperCase() +
|
||||
(!ignoreSentenceCaseLanguages.includes(translator.language)
|
||||
? sentence.slice(1).toLocaleLowerCase()
|
||||
: sentence.slice(1))
|
||||
sentence.charAt(0).toLocaleUpperCase() + sentence.slice(1).toLocaleLowerCase()
|
||||
);
|
||||
})
|
||||
.join('. ');
|
||||
|
||||
@@ -1,27 +1,49 @@
|
||||
{
|
||||
"action": {
|
||||
"addToFavorites": "إضافة الى $t(entity.favorite_other)",
|
||||
"addToPlaylist": "إضافة الى $t(entity.playlist_one)",
|
||||
"clearQueue": "مسح قائمة الإنتظار",
|
||||
"createPlaylist": "إنشاء $t(entity.playlist_one)",
|
||||
"deletePlaylist": "حذف $t(entity.playlist_one)",
|
||||
"addToFavorites": "إضافة الى $t(entity.favorite, {\"count\": 2})",
|
||||
"addToPlaylist": "إضافة الى $t(entity.playlist, {\"count\": 1})",
|
||||
"clearQueue": "مسح قائمة التشغيل",
|
||||
"createPlaylist": "إنشاء $t(entity.playlist, {\"count\": 1})",
|
||||
"deletePlaylist": "حذف $t(entity.playlist, {\"count\": 1})",
|
||||
"deselectAll": "إلغاء تحديد الكل",
|
||||
"editPlaylist": "تعديل $t(entity.playlist_one)",
|
||||
"goToPage": "اذهب الى صفحة",
|
||||
"moveToNext": "الذهاب الى التالي",
|
||||
"moveToBottom": "الذهاب الى الأسفل",
|
||||
"moveToTop": "الذهاب الى الأعلى",
|
||||
"editPlaylist": "تعديل $t(entity.playlist, {\"count\": 1})",
|
||||
"goToPage": "اذهب الى الصفحة",
|
||||
"moveToNext": "نقل إلى التالي",
|
||||
"moveToBottom": "نقل إلى الأسفل",
|
||||
"moveToTop": "نقل إلى الأعلى",
|
||||
"refresh": "$t(common.refresh)",
|
||||
"removeFromFavorites": "حذف من $t(entity.favorite_other)",
|
||||
"removeFromPlaylist": "حذف من $t(entity.playlist_one)",
|
||||
"removeFromQueue": "حذف من قائمة الإنتظار",
|
||||
"removeFromFavorites": "حذف من $t(entity.favorite, {\"count\": 2})",
|
||||
"removeFromPlaylist": "حذف من $t(entity.playlist, {\"count\": 1})",
|
||||
"removeFromQueue": "حذف من قائمة التشغيل",
|
||||
"setRating": "تحديد التقييم",
|
||||
"toggleSmartPlaylistEditor": "تشغيل / إطفاء وضع التعديل لـ $t(entity.smartPlaylist)",
|
||||
"viewPlaylists": "إظهار $t(entity.playlist_other)",
|
||||
"toggleSmartPlaylistEditor": "إظهار / إخفاء وضع التعديل لـ $t(entity.smartPlaylist)",
|
||||
"viewPlaylists": "عرض $t(entity.playlist, {\"count\": 2})",
|
||||
"openIn": {
|
||||
"lastfm": "فتح في Last.fm",
|
||||
"musicbrainz": "فتح في MusicBrainz"
|
||||
}
|
||||
"musicbrainz": "فتح في MusicBrainz",
|
||||
"listenbrainz": "فتح في ListenBrainz",
|
||||
"qobuz": "فتح في Qobuz",
|
||||
"spotify": "فتح في Spotify"
|
||||
},
|
||||
"addOrRemoveFromSelection": "إضافة أو إزالة من الإختيارات",
|
||||
"selectRangeOfItems": "اختر مجموعة من العناصر",
|
||||
"goToCurrent": "الانتقال إلى العنصر الحالي",
|
||||
"createRadioStation": "إنشاء $t(entity.radioStation, {\"count\": 1})",
|
||||
"deleteRadioStation": "يمسح $t(entity.radioStation, {\"count\": 1})",
|
||||
"selectAll": "تحديد الكل",
|
||||
"shuffle": "لخبط",
|
||||
"shuffleAll": "لخبط الكل",
|
||||
"shuffleSelected": "لخبط المحدد",
|
||||
"collapseAllFolders": "اطو جميع المجلدات",
|
||||
"expandAllFolders": "بسط الملفات",
|
||||
"downloadStarted": "بدأ تحميل {{count}} عنصر",
|
||||
"moveUp": "نقل إلى فوق",
|
||||
"moveDown": "نقل إلى تحت",
|
||||
"holdToMoveToTop": "اضغط مطولاً للنقل إلى الأعلى",
|
||||
"holdToMoveToBottom": "اضغط مطولاً للنقل إلى الأسفل",
|
||||
"moveItems": "نقل العناصر",
|
||||
"viewMore": "عرض المزيد",
|
||||
"openApplicationDirectory": "فتح مجلد التطبيق"
|
||||
},
|
||||
"common": {
|
||||
"action_zero": "عملية",
|
||||
@@ -33,13 +55,13 @@
|
||||
"add": "إضافة",
|
||||
"additionalParticipants": "مشاركين إضافيين",
|
||||
"newVersion": "تم تثبيت تحديث جديد {{version}}",
|
||||
"viewReleaseNotes": "عرض معلومات الإصدار",
|
||||
"viewReleaseNotes": "عرض ملاحظات الإصدار",
|
||||
"albumGain": "مستوى صوت الألبوم",
|
||||
"albumPeak": "اعلى مستوى للألبوم",
|
||||
"areYouSure": "هل أنت متأكد؟",
|
||||
"ascending": "تصاعدي",
|
||||
"backward": "خلف",
|
||||
"biography": "سيرة",
|
||||
"biography": "السيرة",
|
||||
"bitDepth": "عمق البت",
|
||||
"bitrate": "معدل البت (البت ريت)",
|
||||
"bpm": "نبضة في الدقيقة",
|
||||
@@ -59,7 +81,7 @@
|
||||
"configure": "تعديل",
|
||||
"confirm": "تأكيد",
|
||||
"create": "إنشاء",
|
||||
"currentSong": "$t(entity.track_one) الحالي",
|
||||
"currentSong": "$t(entity.track, {\"count\": 1}) الحالي",
|
||||
"decrease": "تنقيص",
|
||||
"delete": "حذف",
|
||||
"descending": "تنازلي",
|
||||
@@ -102,7 +124,7 @@
|
||||
"path": "المسار",
|
||||
"playerMustBePaused": "يجب إيقاف المشغل",
|
||||
"preview": "معاينة",
|
||||
"previousSong": "$t(entity.track_one) السابق",
|
||||
"previousSong": "$t(entity.track, {\"count\": 1}) السابق",
|
||||
"quit": "خروج",
|
||||
"random": "عشوائي",
|
||||
"rating": "التقييم",
|
||||
@@ -117,7 +139,12 @@
|
||||
"saveAndReplace": "حفظ واستبدال",
|
||||
"saveAs": "حفظ بإسم",
|
||||
"search": "بحث",
|
||||
"setting": "إعداد",
|
||||
"setting_zero": "إعداد",
|
||||
"setting_one": "",
|
||||
"setting_two": "",
|
||||
"setting_few": "",
|
||||
"setting_many": "",
|
||||
"setting_other": "",
|
||||
"share": "نشر",
|
||||
"size": "حجم",
|
||||
"sortOrder": "الترتيب",
|
||||
@@ -130,7 +157,35 @@
|
||||
"unknown": "غير معروف",
|
||||
"version": "الإصدار",
|
||||
"year": "السنة",
|
||||
"yes": "نعم"
|
||||
"yes": "نعم",
|
||||
"explicitStatus": "حالة المحتوى الصريح",
|
||||
"countSelected": "{{count}} عنصر محدد",
|
||||
"back": "للخلف",
|
||||
"doNotShowAgain": "لا تظهر هذا مجدداً",
|
||||
"view": "عرض",
|
||||
"example": "مثال",
|
||||
"externalLinks": "روابط الخارجية",
|
||||
"openFolder": "فتح المجلد",
|
||||
"faster": "أسرع",
|
||||
"filter_single": "فردي",
|
||||
"filter_multiple": "متعدد",
|
||||
"grouping": "مجموعات",
|
||||
"mood": "مزاج",
|
||||
"numberOfResults": "{{numberOfResults}} نتيجة",
|
||||
"noFilters": "لا توجد فلاتر معينة",
|
||||
"private": "خاص",
|
||||
"public": "عام",
|
||||
"retry": "إعادة المحاولة",
|
||||
"recordLabel": "شركة التسجيل",
|
||||
"releaseType": "نوع الإصدار",
|
||||
"rename": "إعادة تسمية",
|
||||
"slower": "أبطأ",
|
||||
"sort": "فرز",
|
||||
"explicit": "صريح",
|
||||
"clean": "نظيف",
|
||||
"gridRows": "صفوف الشبكة",
|
||||
"tableColumns": "أعمدة الجدول",
|
||||
"newVersionAvailable": "هناك نسخة جديدة متاحة"
|
||||
},
|
||||
"entity": {
|
||||
"album_zero": "الالبوم",
|
||||
@@ -144,6 +199,296 @@
|
||||
"albumArtist_two": "فنان الالبومين",
|
||||
"albumArtist_few": "فنان الالبومات",
|
||||
"albumArtist_many": "فنان الالبومات",
|
||||
"albumArtist_other": "فنان الالبومات"
|
||||
"albumArtist_other": "فنان الالبومات",
|
||||
"albumArtistCount_zero": "{{count}} فنان الالبوم",
|
||||
"albumArtistCount_one": "{{count}} فنان الالبوم",
|
||||
"albumArtistCount_two": "{{count}} فنان الالبومين",
|
||||
"albumArtistCount_few": "{{count}} فنان الالبومات",
|
||||
"albumArtistCount_many": "{{count}} فنان الالبومات",
|
||||
"albumArtistCount_other": "{{count}} فنان الالبومات",
|
||||
"albumWithCount_zero": "{{count}} البوم",
|
||||
"albumWithCount_one": "{{count}} البوم",
|
||||
"albumWithCount_two": "{{count}} البومين",
|
||||
"albumWithCount_few": "{{count}} البومات",
|
||||
"albumWithCount_many": "{{count}} البومات",
|
||||
"albumWithCount_other": "{{count}} البومات",
|
||||
"radioStation_zero": "محطة راديو",
|
||||
"radioStation_one": "محطة راديو",
|
||||
"radioStation_two": "محطتان راديو",
|
||||
"radioStation_few": "محطات راديو",
|
||||
"radioStation_many": "محطات راديو",
|
||||
"radioStation_other": "محطات راديو",
|
||||
"radioStationWithCount_zero": "{{count}} محطة راديو",
|
||||
"radioStationWithCount_one": "{{count}} محطة راديو",
|
||||
"radioStationWithCount_two": "{{count}} محطتان راديو",
|
||||
"radioStationWithCount_few": "{{count}} محطات راديو",
|
||||
"radioStationWithCount_many": "{{count}} محطات راديو",
|
||||
"radioStationWithCount_other": "{{count}} محطات راديو",
|
||||
"artist_zero": "فنان",
|
||||
"artist_one": "فنان",
|
||||
"artist_two": "فنانان",
|
||||
"artist_few": "فنانين",
|
||||
"artist_many": "فنانين",
|
||||
"artist_other": "فنانين",
|
||||
"artistWithCount_zero": "{{count}} فنان",
|
||||
"artistWithCount_one": "{{count}} فنان",
|
||||
"artistWithCount_two": "{{count}} فنانان",
|
||||
"artistWithCount_few": "{{count}} فنانين",
|
||||
"artistWithCount_many": "{{count}} فنانين",
|
||||
"artistWithCount_other": "{{count}} فنانين",
|
||||
"favorite_zero": "مفضلة",
|
||||
"favorite_one": "مفضلة",
|
||||
"favorite_two": "مفضلتان",
|
||||
"favorite_few": "مفضلات",
|
||||
"favorite_many": "مفضلات",
|
||||
"favorite_other": "مفضلات",
|
||||
"folder_zero": "مجلد",
|
||||
"folder_one": "مجلد",
|
||||
"folder_two": "مجلدان",
|
||||
"folder_few": "مجلدات",
|
||||
"folder_many": "مجلدات",
|
||||
"folder_other": "مجلدات",
|
||||
"folderWithCount_zero": "{{count}} مجلد",
|
||||
"folderWithCount_one": "{{count}} مجلد",
|
||||
"folderWithCount_two": "{{count}} مجلدان",
|
||||
"folderWithCount_few": "{{count}} مجلدات",
|
||||
"folderWithCount_many": "{{count}} مجلدات",
|
||||
"folderWithCount_other": "{{count}} مجلدات",
|
||||
"genre_zero": "نوع",
|
||||
"genre_one": "نوع",
|
||||
"genre_two": "نوعان",
|
||||
"genre_few": "أنواع",
|
||||
"genre_many": "أنواع",
|
||||
"genre_other": "أنواع",
|
||||
"genreWithCount_zero": "{{count}} نوع",
|
||||
"genreWithCount_one": "{{count}} نوع",
|
||||
"genreWithCount_two": "{{count}} نوعان",
|
||||
"genreWithCount_few": "{{count}} أنواع",
|
||||
"genreWithCount_many": "{{count}} أنواع",
|
||||
"genreWithCount_other": "{{count}} أنواع",
|
||||
"playlist_zero": "قائمة تشغيل",
|
||||
"playlist_one": "قائمة تشغيل",
|
||||
"playlist_two": "قائمتان تشغيل",
|
||||
"playlist_few": "قوائم تشغيل",
|
||||
"playlist_many": "قوائم تشغيل",
|
||||
"playlist_other": "قوائم تشغيل",
|
||||
"play_zero": "{{count}} قائمة تشغيل",
|
||||
"play_one": "{{count}} قائمة تشغيل",
|
||||
"play_two": "{{count}} قائمتان تشغيل",
|
||||
"play_few": "{{count}} قوائم تشغيل",
|
||||
"play_many": "{{count}} قوائم تشغيل",
|
||||
"play_other": "{{count}} قوائم تشغيل",
|
||||
"playlistWithCount_zero": "{{count}} قائمة تشغيل",
|
||||
"playlistWithCount_one": "{{count}} قائمة تشغيل",
|
||||
"playlistWithCount_two": "{{count}} قائمتان تشغيل",
|
||||
"playlistWithCount_few": "{{count}} قوائم تشغيل",
|
||||
"playlistWithCount_many": "{{count}} قوائم تشغيل",
|
||||
"playlistWithCount_other": "{{count}} قوائم تشغيل",
|
||||
"smartPlaylist": "$t(entity.playlist, {\"count\": 1}) قائمة تشغيل ذكية",
|
||||
"track_zero": "مقطع",
|
||||
"track_one": "مقطع",
|
||||
"track_two": "مقطعان",
|
||||
"track_few": "مقاطع",
|
||||
"track_many": "مقاطع",
|
||||
"track_other": "مقاطع",
|
||||
"song_zero": "أغنية",
|
||||
"song_one": "أغنية",
|
||||
"song_two": "أغنيتان",
|
||||
"song_few": "أغاني",
|
||||
"song_many": "أغاني",
|
||||
"song_other": "أغاني",
|
||||
"trackWithCount_zero": "{{count}} مقطع",
|
||||
"trackWithCount_one": "{{count}} مقطع",
|
||||
"trackWithCount_two": "{{count}} مقطعان",
|
||||
"trackWithCount_few": "{{count}} مقاطع",
|
||||
"trackWithCount_many": "{{count}} مقاطع",
|
||||
"trackWithCount_other": "{{count}} مقاطع"
|
||||
},
|
||||
"error": {
|
||||
"apiRouteError": "تعذّر توجيه الطلب",
|
||||
"audioDeviceFetchError": "حصل خطأ أثناء محاولة الحصول على أجهزة الصوت",
|
||||
"authenticationFailed": "فشلت المصادقة",
|
||||
"badAlbum": "أنت ترى هذة الصفحة لأن هذه الأغنية ليست جزءاً من ألبوم. على الأرجح تظهر لك هذه المشكلة إذا كان لديك أغنية في المستوى الأعلى من مجلد الموسيقى. يقوم Jellyfin بتجميع الأغاني فقط إذا كانت داخل مجلد",
|
||||
"credentialsRequired": "يتطلب بيانات اعتماد",
|
||||
"genericError": "حدث خطأ",
|
||||
"loginRateError": "تجاوزت الحد لمحاولات الدخول. حاول مجدداً بعد بضع ثوان",
|
||||
"mpvRequired": "يتطلب MPV",
|
||||
"multipleServerSaveQueueError": "قائمة التشغيل تحتوي على أغنية أو أكثر من خادم مختلف. هذا غير مدعوم",
|
||||
"networkError": "حصل خطأ في الشبكة",
|
||||
"noNetwork": "الخادم غير متوفر",
|
||||
"noNetworkDescription": "تعذر الإتصال بالخادم",
|
||||
"notificationDenied": "تم رفض أذن الإشعارات. هذا الإعداد لن يكون له أي تأثير",
|
||||
"openError": "تعذر فتح الملف",
|
||||
"playbackError": "حدث خطأ أثناء محاولة تشغيل الوسائط",
|
||||
"playbackPausedDueToError": "تم ايقاف التشغيل بسبب خطأ",
|
||||
"remoteDisableError": "حدث خطأ أثناء محاولة $t(common.disable) الخادم البعيد",
|
||||
"remoteEnableError": "حدث خطأ أثناء محاولة $t(common.enable) الخادم البعيد",
|
||||
"remotePortError": "حدث خطأ أثناء محاولة تعيين الخادم البعيد",
|
||||
"remotePortWarning": "أعد تشغيل الخادم لتطبيق المنفذ الجديد",
|
||||
"saveQueueFailed": "فشل حفظ قائمة التشغيل",
|
||||
"serverLockSingleServer": "فقط خادم واحد متاح إذا الخادم مقفل",
|
||||
"serverNotSelectedError": "لم يتم اختيار أي خادم",
|
||||
"serverRequired": "يتطلب خادم",
|
||||
"sessionExpiredError": "انتهت صلاحية جلستك",
|
||||
"systemFontError": "حدث خطأ أثناء محاولة الحصول على خطوط النظام",
|
||||
"settingsSyncError": "تم اكتشاف تعارضات بين إعدادات العارض والعملية الرئيسية. أعد تشغيل التطبيق لتطبيق التغييرات",
|
||||
"invalidJson": "JSON غير صالح",
|
||||
"invalidServer": "خادم غير صالح",
|
||||
"localFontAccessDenied": "تم رفض الوصول إلى الخطوط المحلية"
|
||||
},
|
||||
"filter": {
|
||||
"album": "$t(entity.album, {\"count\": 1})",
|
||||
"albumArtist": "$t(entity.albumArtist, {\"count\": 1})",
|
||||
"matchAnd": "و",
|
||||
"matchOr": "أو",
|
||||
"biography": "السيرة",
|
||||
"bitrate": "معدل البت (البت ريت)",
|
||||
"bpm": "نبضة في الدقيقة",
|
||||
"comment": "تعليق",
|
||||
"communityRating": "تقييم المجتمع",
|
||||
"criticRating": "تقييم الناقد",
|
||||
"dateAdded": "تاريخ الإضافة",
|
||||
"disc": "قرص",
|
||||
"duration": "المدة",
|
||||
"favorited": "مفضل",
|
||||
"fromYear": "من سنة",
|
||||
"id": "معرف",
|
||||
"isFavorited": "مفضل",
|
||||
"isPublic": "عام",
|
||||
"isRated": "مقيم",
|
||||
"isRecentlyPlayed": "تم التشغيل حديثاً",
|
||||
"lastPlayed": "أخر تشغيل",
|
||||
"mostPlayed": "أكثر تشغيل",
|
||||
"name": "الأسم",
|
||||
"note": "الملاحظة",
|
||||
"path": "المسار",
|
||||
"playCount": "عدد التشغيلات",
|
||||
"random": "عشوائي",
|
||||
"rating": "التقييم",
|
||||
"recentlyAdded": "مضاف حديثاً",
|
||||
"recentlyPlayed": "تم التشغيل حديثاً",
|
||||
"recentlyUpdated": "محدث حديثاً",
|
||||
"releaseDate": "تاريخ الإصدار",
|
||||
"releaseYear": "سنة الإصدار",
|
||||
"search": "بحث",
|
||||
"songCount": "عدد الأغاني",
|
||||
"sortName": "أسم الفرز",
|
||||
"title": "العنوان",
|
||||
"toYear": "إلى سنة",
|
||||
"trackNumber": "مقطع",
|
||||
"isCompilation": "تجميعة"
|
||||
},
|
||||
"datetime": {
|
||||
"minuteShort": "د",
|
||||
"secondShort": "ث",
|
||||
"hourShort": "س",
|
||||
"dayShort": "ي"
|
||||
},
|
||||
"filterOperator": {
|
||||
"after": "بعد",
|
||||
"afterDate": "بعد (تاريخ)",
|
||||
"before": "قبل",
|
||||
"beforeDate": "قبل (تاريخ)",
|
||||
"contains": "يحتوي على",
|
||||
"endsWith": "ينتهي بـ",
|
||||
"inPlaylist": "في",
|
||||
"inTheLast": "في أخِر",
|
||||
"inTheRange": "في مدى",
|
||||
"inTheRangeDate": "في مدى (تاريخ)",
|
||||
"is": "في",
|
||||
"isNot": "ليس في",
|
||||
"isGreaterThan": "أكبر من",
|
||||
"isLessThan": "أقل من",
|
||||
"matchesRegex": "يطابق التعبير النمطي",
|
||||
"notContains": "لا يحتوي على",
|
||||
"notInPlaylist": "ليس في",
|
||||
"notInTheLast": "ليس في أخِر",
|
||||
"startsWith": "يبدأ بـ"
|
||||
},
|
||||
"form": {
|
||||
"addServer": {
|
||||
"error_savePassword": "حدث خطأ أثناء محاولة حفظ كلمة السر",
|
||||
"input_legacyAuthentication": "تفعيل المصادقة القديمة",
|
||||
"input_name": "أسم الخادم",
|
||||
"input_password": "كلمة السر",
|
||||
"input_preferRemoteUrl": "تفضيل رابط عام",
|
||||
"input_remoteUrl": "رابط عام",
|
||||
"input_savePassword": "حفظ كلمة السر",
|
||||
"input_url": "الرابط",
|
||||
"input_username": "أسم المستخدم",
|
||||
"success": "تمت إضافة الخادم بنجاح",
|
||||
"title": "إضافة خادم",
|
||||
"input_preferInstantMix": "تفضيل الميكس الفوري",
|
||||
"input_preferInstantMixDescription": "استخدم الميكس الفوري فقط للحصول على أغاني مشابهة. مفيد إذا كان لديك إضافات تعدّل هذا السلوك",
|
||||
"input_remoteUrlPlaceholder": "اختياري: عنوان URL عام للميزات الخارجية"
|
||||
},
|
||||
"largeFetchConfirmation": {
|
||||
"title": "أضف العناصر إلى قائمة التشغيل",
|
||||
"description": "سيقوم هذا الإجراء بإضافة جميع العناصر في العرض المفلتر الحالي"
|
||||
},
|
||||
"addToPlaylist": {
|
||||
"input_skipDuplicates": "تخطي العناصر المكررة",
|
||||
"title": "أضف إلى $t(entity.playlist, {\"count\": 1})",
|
||||
"create": "إنشاء $t(entity.playlist, {\"count\": 1}) {{playlist}}"
|
||||
},
|
||||
"createPlaylist": {
|
||||
"input_public": "عام"
|
||||
},
|
||||
"createRadioStation": {
|
||||
"input_homepageUrl": "رابط الرئيسية",
|
||||
"input_name": "الأسم",
|
||||
"input_streamUrl": "رابط البث",
|
||||
"success": "تم إنشاء محطة راديو جديدة بنجاح",
|
||||
"title": "إنشاء محطة راديو"
|
||||
},
|
||||
"editRadioStation": {
|
||||
"success": "تم تحديث محطة الراديو بنجاح"
|
||||
},
|
||||
"deletePlaylist": {
|
||||
"input_confirm": "أكتب أسم $t(entity.playlist, {\"count\": 1}) للتأكيد",
|
||||
"success": "تم حذف $t(entity.playlist, {\"count\": 1}) بنجاح",
|
||||
"title": "حذف $t(entity.playlist, {\"count\": 1})"
|
||||
},
|
||||
"editPlaylist": {
|
||||
"success": "تم تحديث $t(entity.playlist, {\"count\": 1}) بنجاح",
|
||||
"title": "تعديل $t(entity.playlist, {\"count\": 1})",
|
||||
"publicJellyfinNote": "لسبب ما، لا يكشف Jellyfin عما إذا كانت قائمة التشغيل عامة أم لا. إذا كنت ترغب في إبقائها عامة، يرجى التأكد من تحديد الخيار التالي"
|
||||
},
|
||||
"lyricsExport": {
|
||||
"export": "تصدير الكلمات",
|
||||
"input_synced": "تصدير الكلمات المتزامنة"
|
||||
},
|
||||
"lyricSearch": {
|
||||
"title": "البحث بالكلمات"
|
||||
},
|
||||
"queryEditor": {
|
||||
"input_optionMatchAll": "تطابق الجميع",
|
||||
"input_optionMatchAny": "تطابق أي",
|
||||
"title": "محرر الاستعلامات",
|
||||
"addRuleGroup": "إضافة مجموعة قواعد",
|
||||
"removeRuleGroup": "إزالة مجموعة قواعد",
|
||||
"resetToDefault": "استعادة الإعدادات الافتراضية"
|
||||
},
|
||||
"shareItem": {
|
||||
"allowDownloading": "السماح بالتحميل",
|
||||
"description": "الوصف"
|
||||
},
|
||||
"shuffleAll": {
|
||||
"title": "تشغيل عشوائي",
|
||||
"input_kind_albums": "ألبومات",
|
||||
"input_kind_songs": "أغاني",
|
||||
"input_kind": "إختيارات عشوائية",
|
||||
"input_minYear": "من سنة",
|
||||
"input_maxYear": "إلى سنة"
|
||||
},
|
||||
"updateServer": {
|
||||
"success": "تم تحديث الخادم بنجاح",
|
||||
"title": "تحديث الخادم"
|
||||
}
|
||||
},
|
||||
"page": {
|
||||
"albumArtistDetail": {
|
||||
"favoriteSongs": "الأغاني المفضلة"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,963 @@
|
||||
{
|
||||
"action": {
|
||||
"addToFavorites": "Lisa üksusesse $t(entity.favorite, {\"count\": 2})",
|
||||
"addToPlaylist": "Lisa üksusesse $t(entity.playlist, {\"count\": 1})",
|
||||
"addOrRemoveFromSelection": "Lisa või eemalda valikust",
|
||||
"selectRangeOfItems": "Vali mitu üksust korraga",
|
||||
"clearQueue": "Tühjenda järjekord",
|
||||
"goToCurrent": "Mine praeguse üksuse juurde",
|
||||
"collapseAllFolders": "Ahenda kõik kaustad",
|
||||
"expandAllFolders": "Laienda kõik kaustad",
|
||||
"createPlaylist": "Loo $t(entity.playlist, {\"count\": 1})",
|
||||
"createRadioStation": "Loo $t(entity.radioStation, {\"count\": 1})",
|
||||
"deletePlaylist": "Kustuta $t(entity.playlist, {\"count\": 1})",
|
||||
"deleteRadioStation": "Kustuta $t(entity.radioStation, {\"count\": 1})",
|
||||
"selectAll": "Vali kõik",
|
||||
"deselectAll": "Tühista kõigi valik",
|
||||
"downloadStarted": "{{count}} üksuse allalaadimine algas",
|
||||
"editPlaylist": "Muuda $t(entity.playlist, {\"count\": 1})",
|
||||
"goToPage": "Mine lehele",
|
||||
"moveToNext": "Järgmine",
|
||||
"moveToBottom": "Liiguta lõppu",
|
||||
"moveToTop": "Liiguta algusesse",
|
||||
"moveUp": "Liigu üles",
|
||||
"moveDown": "Liigu alla",
|
||||
"holdToMoveToTop": "Hoia algusesse liigutamiseks",
|
||||
"holdToMoveToBottom": "Hoia lõppu liigutamiseks",
|
||||
"moveItems": "Liiguta üksusi",
|
||||
"shuffle": "Sega",
|
||||
"shuffleAll": "Sega kõik",
|
||||
"shuffleSelected": "Sega valitud",
|
||||
"refresh": "$t(common.refresh)",
|
||||
"removeFromFavorites": "Eemalda üksusest $t(entity.favorite, {\"count\": 2})",
|
||||
"removeFromPlaylist": "Eemalda üksusest $t(entity.playlist, {\"count\": 1})",
|
||||
"removeFromQueue": "Eemalda järjekorrast",
|
||||
"setRating": "Hinda",
|
||||
"toggleSmartPlaylistEditor": "Lülita $t(entity.smartPlaylist) redaktor sisse/välja",
|
||||
"viewPlaylists": "Vaata $t(entity.playlist, {\"count\": 2})",
|
||||
"viewMore": "Vaata rohkem",
|
||||
"openApplicationDirectory": "Ava rakenduste kataloog",
|
||||
"openIn": {
|
||||
"lastfm": "Ava Last.fm-is",
|
||||
"listenbrainz": "Ava ListenBrainzis",
|
||||
"musicbrainz": "Ava MusicBrainzis",
|
||||
"qobuz": "Ava Qobuzis",
|
||||
"spotify": "Ava Spotifys"
|
||||
}
|
||||
},
|
||||
"common": {
|
||||
"countSelected": "{{count}} valitud",
|
||||
"explicitStatus": "Ebasündsa sisu olek",
|
||||
"action_one": "Toiming",
|
||||
"action_other": "Toimingud",
|
||||
"add": "Lisa",
|
||||
"additionalParticipants": "Teised osalejad",
|
||||
"newVersion": "Uus versioon on paigaldatud ({{version}})",
|
||||
"viewReleaseNotes": "Kuva väljalaskemärkmed",
|
||||
"albumGain": "Albumi helitugevus (gain)",
|
||||
"albumPeak": "Albumi tippnivoo",
|
||||
"areYouSure": "Kas oled kindel?",
|
||||
"ascending": "Kasvav",
|
||||
"back": "Tagasi",
|
||||
"backward": "Tagasi",
|
||||
"biography": "Biograafia",
|
||||
"bitDepth": "Bititihedus",
|
||||
"bitrate": "Bitikiirus",
|
||||
"bpm": "BPM",
|
||||
"cancel": "Tühista",
|
||||
"center": "Keskel",
|
||||
"channel_one": "Kanal",
|
||||
"channel_other": "Kanalid",
|
||||
"clear": "Tühjenda",
|
||||
"close": "Sulge",
|
||||
"codec": "Koodek",
|
||||
"collapse": "Ahenda",
|
||||
"comingSoon": "Tulekul…",
|
||||
"configure": "Seadista",
|
||||
"confirm": "Kinnita",
|
||||
"create": "Loo",
|
||||
"currentSong": "Praegune $t(entity.track, {\"count\": 1})",
|
||||
"decrease": "Vähenda",
|
||||
"delete": "Kustuta",
|
||||
"descending": "Kahanev",
|
||||
"description": "Kirjeldus",
|
||||
"disable": "Keela",
|
||||
"disc": "Plaat",
|
||||
"dismiss": "Peida",
|
||||
"doNotShowAgain": "Ära seda enam näita",
|
||||
"duration": "Kestus",
|
||||
"view": "Vaata",
|
||||
"edit": "Muuda",
|
||||
"enable": "Luba",
|
||||
"expand": "Laienda",
|
||||
"example": "Näide",
|
||||
"externalLinks": "Välised lingid",
|
||||
"openFolder": "Ava kaust",
|
||||
"faster": "Kiiremini",
|
||||
"favorite": "Lemmik",
|
||||
"filter_one": "Filter",
|
||||
"filter_other": "Filtrid",
|
||||
"filters": "Filtrid",
|
||||
"filter_multiple": "Mitu",
|
||||
"filter_single": "Üksik",
|
||||
"forceRestartRequired": "Muudatuste rakendamiseks taaskäivita… taaskäivitamiseks sule teavitus",
|
||||
"forward": "Edasi",
|
||||
"gap": "Vahe",
|
||||
"home": "Avaleht",
|
||||
"increase": "Suurenda",
|
||||
"left": "Vasak",
|
||||
"limit": "Limiit",
|
||||
"manage": "Halda",
|
||||
"maximize": "Maksimeeri",
|
||||
"menu": "Menüü",
|
||||
"minimize": "Minimeeri",
|
||||
"modified": "Muudetud",
|
||||
"mbid": "MusicBrainz ID",
|
||||
"grouping": "Rühmitamine",
|
||||
"mood": "Meeleolu",
|
||||
"name": "Nimi",
|
||||
"no": "Ei",
|
||||
"none": "Puudub",
|
||||
"noResultsFromQuery": "Päring ei andnud vasteid",
|
||||
"numberOfResults": "{{numberOfResults}} vastet",
|
||||
"noFilters": "Seadistatud filtreid pole",
|
||||
"note": "Märkus",
|
||||
"ok": "Ok",
|
||||
"owner": "Omanik",
|
||||
"playerMustBePaused": "Mängija peab olema pausil",
|
||||
"preview": "Eelvaade",
|
||||
"previousSong": "Eelmine $t(entity.track, {\"count\": 1})",
|
||||
"private": "Privaatne",
|
||||
"public": "Avalik",
|
||||
"quit": "Välju",
|
||||
"random": "Juhuslik",
|
||||
"rating": "Hinne",
|
||||
"retry": "Proovi uuesti",
|
||||
"recordLabel": "Plaadifirma",
|
||||
"releaseType": "Väljaande tüüp",
|
||||
"refresh": "Värskenda",
|
||||
"reload": "Laadi uuesti",
|
||||
"rename": "Nimeta ümber",
|
||||
"reset": "Lähtesta",
|
||||
"resetToDefault": "Taasta vaikeväärtused",
|
||||
"restartRequired": "Vajalik on taaskäivitamine",
|
||||
"right": "Parem",
|
||||
"sampleRate": "Diskreetimissagedus",
|
||||
"save": "Salvesta",
|
||||
"saveAndReplace": "Salvesta ja asenda",
|
||||
"saveAs": "Salvesta nimega",
|
||||
"search": "Otsi",
|
||||
"setting_one": "Säte",
|
||||
"setting_other": "Sätted",
|
||||
"slower": "Aeglasemalt",
|
||||
"share": "Jaga",
|
||||
"size": "Suurus",
|
||||
"sort": "Järjesta",
|
||||
"sortOrder": "Järjestus",
|
||||
"tags": "Sildid",
|
||||
"title": "Pealkiri",
|
||||
"trackNumber": "Pala",
|
||||
"trackGain": "Pala võimendus",
|
||||
"trackPeak": "Pala tippväärtus",
|
||||
"translation": "Tõlge",
|
||||
"unknown": "Tundmatu",
|
||||
"version": "Versioon",
|
||||
"year": "Aasta",
|
||||
"yes": "Jah",
|
||||
"explicit": "Ebatsensuurne",
|
||||
"clean": "Puhas",
|
||||
"gridRows": "Ruudustiku ridu",
|
||||
"tableColumns": "Tabeli veerge",
|
||||
"itemsMore": "{{count}} veel",
|
||||
"newVersionAvailable": "Saadaval on uus versioon",
|
||||
"path": "Asukoht"
|
||||
},
|
||||
"entity": {
|
||||
"album_one": "Album",
|
||||
"album_other": "Albumid",
|
||||
"albumArtist_one": "Albumi esitaja",
|
||||
"albumArtist_other": "Albumi esitajad",
|
||||
"albumArtistCount_one": "{{count}} albumi esitaja",
|
||||
"albumArtistCount_other": "{{count}} albumi esitajat",
|
||||
"albumWithCount_one": "{{count}} album",
|
||||
"albumWithCount_other": "{{count}} albumit",
|
||||
"radioStation_one": "Raadiojaam",
|
||||
"radioStation_other": "Raadiojaamad",
|
||||
"radioStationWithCount_one": "{{count}} raadiojaam",
|
||||
"radioStationWithCount_other": "{{count}} raadiojaama",
|
||||
"artist_one": "Esitaja",
|
||||
"artist_other": "Esitajad",
|
||||
"artistWithCount_one": "{{count}} esitaja",
|
||||
"artistWithCount_other": "{{count}} esitajat",
|
||||
"favorite_one": "Lemmik",
|
||||
"favorite_other": "Lemmikud",
|
||||
"folder_one": "Kaust",
|
||||
"folder_other": "Kaustad",
|
||||
"folderWithCount_one": "{{count}} kaust",
|
||||
"folderWithCount_other": "{{count}} kausta",
|
||||
"genre_one": "Žanr",
|
||||
"genre_other": "Žanrid",
|
||||
"genreWithCount_one": "{{count}} žanr",
|
||||
"genreWithCount_other": "{{count}} žanrit",
|
||||
"playlist_one": "Esitusloend",
|
||||
"playlist_other": "Esitusloendid",
|
||||
"play_one": "{{count}} esitus",
|
||||
"play_other": "{{count}} esitust",
|
||||
"playlistWithCount_one": "{{count}} esitusloend",
|
||||
"playlistWithCount_other": "{{count}} esitusloendit",
|
||||
"smartPlaylist": "Nutikas $t(entity.playlist, {\"count\": 1})",
|
||||
"track_one": "Rada",
|
||||
"track_other": "Rajad",
|
||||
"song_one": "Lugu",
|
||||
"song_other": "Lood",
|
||||
"trackWithCount_one": "{{count}} rada",
|
||||
"trackWithCount_other": "{{count}} rada"
|
||||
},
|
||||
"error": {
|
||||
"apiRouteError": "Päringut ei saanud edastada",
|
||||
"audioDeviceFetchError": "Heliseadmete hankimisel tekkis viga",
|
||||
"authenticationFailed": "Autentimine nurjus",
|
||||
"badAlbum": "Näed seda lehte, kuna see lugu ei kuulu ühegi albumi alla. Kõige sagedamini juhtub see siis, kui lugu asub sinu muusikakausta juurkataloogis (otse muusikakaustas). Jellyfin rühmitab lood albumiteks ainult siis, kui need asuvad eraldi kaustas",
|
||||
"badValue": "Kehtetu valik \"{{value}}\". Seda väärtust enam ei eksisteeri",
|
||||
"credentialsRequired": "Nõutav on autentimine",
|
||||
"endpointNotImplementedError": "Lõpp-punkt {{endpoint}} pole serveri {{serverType}} puhul toetatud",
|
||||
"genericError": "Tekkis viga",
|
||||
"invalidJson": "Vigane JSON",
|
||||
"invalidServer": "Vigane server",
|
||||
"localFontAccessDenied": "Juurdepääs kohalikele fontidele on keelatud",
|
||||
"loginRateError": "Liiga palju sisselogimiskatseid, proovi mõne sekundi pärast uuesti",
|
||||
"mpvRequired": "Vajalik on MPV",
|
||||
"multipleServerSaveQueueError": "Esitusjärjekorras on lugusi, mis ei pärine praegusest serverist. See pole toetatud",
|
||||
"networkError": "Tekkis võrguviga",
|
||||
"noNetwork": "Server pole saadaval",
|
||||
"noNetworkDescription": "Selle serveriga ei õnnestunud ühendust luua",
|
||||
"notificationDenied": "Märguanded on keelatud. Sellel seadel pole mõju",
|
||||
"openError": "Faili avamine nurjus",
|
||||
"playbackError": "Meedia esitamisel tekkis viga",
|
||||
"playbackPausedDueToError": "Taasesitus peatati vea tõttu",
|
||||
"remoteDisableError": "Kaugserveri toimingu $t(common.disable) käigus tekkis viga",
|
||||
"remoteEnableError": "Tõrge kaugserveri toimingul: $t(common.enable)",
|
||||
"remotePortError": "Kaugserveri pordi määramisel tekkis viga",
|
||||
"remotePortWarning": "Uue pordi rakendamiseks taaskäivita server",
|
||||
"saveQueueFailed": "Järjekorra salvestamine nurjus",
|
||||
"serverLockSingleServer": "Lukustatud serveri korral on lubatud ainult üks server",
|
||||
"serverNotSelectedError": "Serverit pole valitud",
|
||||
"serverRequired": "Vajalik on server",
|
||||
"sessionExpiredError": "Su seanss on aegunud",
|
||||
"systemFontError": "Süsteemifontide hankimisel ilmnes viga",
|
||||
"settingsSyncError": "Esitaja (renderer) ja peaprotsessi seadete vahel leiti lahknevusi. Muudatuste rakendamiseks taaskäivita rakendus"
|
||||
},
|
||||
"filter": {
|
||||
"album": "$t(entity.album, {\"count\": 1})",
|
||||
"albumArtist": "$t(entity.albumArtist, {\"count\": 1})",
|
||||
"matchAnd": "ja",
|
||||
"matchOr": "või",
|
||||
"albumCount": "$t(entity.album, {\"count\": 2}) arv",
|
||||
"artist": "$t(entity.artist, {\"count\": 1})",
|
||||
"biography": "Biograafia",
|
||||
"bitrate": "Bitikiirus",
|
||||
"bpm": "BPM",
|
||||
"channels": "$t(common.channel, {\"count\": 2})",
|
||||
"comment": "Kommentaar",
|
||||
"communityRating": "Kogukonna hinne",
|
||||
"criticRating": "Kriitikute hinne",
|
||||
"dateAdded": "Lisatud",
|
||||
"disc": "Plaat",
|
||||
"duration": "Kestus",
|
||||
"favorited": "Lemmikuks lisatud",
|
||||
"fromYear": "Aastast",
|
||||
"genre": "$t(entity.genre, {\"count\": 1})",
|
||||
"id": "ID",
|
||||
"isCompilation": "on kogumik",
|
||||
"isFavorited": "on lemmik",
|
||||
"isPublic": "on avalik",
|
||||
"isRated": "on hinnatud",
|
||||
"isRecentlyPlayed": "on hiljuti esitatud",
|
||||
"lastPlayed": "Viimati esitatud",
|
||||
"mostPlayed": "Enim esitatud",
|
||||
"name": "Nimi",
|
||||
"note": "Märkus",
|
||||
"owner": "$t(common.owner)",
|
||||
"path": "Asukoht",
|
||||
"playCount": "Esituskordi",
|
||||
"random": "Juhuslik",
|
||||
"rating": "Hinne",
|
||||
"recentlyAdded": "Viimati lisatud",
|
||||
"recentlyPlayed": "Hiljuti esitatud",
|
||||
"recentlyUpdated": "Hiljuti uuendatud",
|
||||
"releaseDate": "Ilmumiskuupäev",
|
||||
"releaseYear": "Ilmumisaasta",
|
||||
"search": "Otsing",
|
||||
"songCount": "Lugude arv",
|
||||
"explicitStatus": "$t(common.explicitStatus)",
|
||||
"title": "Pealkiri",
|
||||
"sortName": "Sortimisnimi",
|
||||
"trackNumber": "Lugu",
|
||||
"toYear": "Aastasse"
|
||||
},
|
||||
"filterOperator": {
|
||||
"contains": "Sisaldab",
|
||||
"endsWith": "Lõpeb",
|
||||
"is": "On",
|
||||
"isNot": "Ei ole",
|
||||
"isGreaterThan": "On suurem kui",
|
||||
"isLessThan": "On väiksem kui",
|
||||
"matchesRegex": "Vastab regulaaravaldisele",
|
||||
"notContains": "Ei sisalda",
|
||||
"inTheRangeDate": "Jääb vahemikku (kuupäev)",
|
||||
"inTheRange": "Jääb vahemikku",
|
||||
"inTheLast": "Viimase",
|
||||
"inPlaylist": "On",
|
||||
"beforeDate": "On enne (kuupäeva)",
|
||||
"before": "On enne",
|
||||
"afterDate": "On pärast (kuupäeva)",
|
||||
"after": "On pärast",
|
||||
"notInPlaylist": "Ei ole",
|
||||
"startsWith": "Algab",
|
||||
"notInTheLast": "Pole viimase"
|
||||
},
|
||||
"form": {
|
||||
"addServer": {
|
||||
"input_legacyAuthentication": "Luba pärandautentimine",
|
||||
"input_name": "Serveri nimi",
|
||||
"input_password": "Parool",
|
||||
"input_preferInstantMix": "Eelista kiirmiksi",
|
||||
"input_preferInstantMixDescription": "Kasuta kiirmiksi ainult sarnaste lugude saamiseks. Kasulik, kui on pluginaid, mis seda käitumist muudavad",
|
||||
"input_preferRemoteUrl": "Eelista avalikku URL-i",
|
||||
"input_remoteUrl": "Avalik URL",
|
||||
"input_remoteUrlPlaceholder": "Valikuline: avalik URL väliste funktsioonide jaoks",
|
||||
"input_savePassword": "Salvesta parool",
|
||||
"input_url": "URL",
|
||||
"input_username": "Kasutajanimi",
|
||||
"success": "Serveri lisamine õnnestus",
|
||||
"title": "Lisa server",
|
||||
"error_savePassword": "Parooli salvestamisel ilmnes viga",
|
||||
"ignoreCors": "Eira CORS-i ($t(common.restartRequired))",
|
||||
"ignoreSsl": "Eira SSL-i ($t(common.restartRequired))"
|
||||
},
|
||||
"largeFetchConfirmation": {
|
||||
"title": "Lisa üksused järjekorda",
|
||||
"description": "See toiming lisab kõik praeguse filtreeritud vaate üksused"
|
||||
},
|
||||
"addToPlaylist": {
|
||||
"create": "Loo $t(entity.playlist, {\"count\": 1}) {{playlist}}",
|
||||
"input_playlists": "$t(entity.playlist, {\"count\": 2})",
|
||||
"noneAdded": "$t(entity.playlist, {\"count\": 1}) '{{playlist}}' ei lisatud ühtegi lugu",
|
||||
"input_skipDuplicates": "Jäta duplikaadid vahele",
|
||||
"searchOrCreate": "Otsi $t(entity.playlist, {\"count\": 2}) või kirjuta uue loomiseks",
|
||||
"success": "$t(entity.trackWithCount, {\"count\": {{message}} }) lisati $t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })",
|
||||
"title": "Lisa esitusloendisse $t(entity.playlist, {\"count\": 1})"
|
||||
},
|
||||
"createPlaylist": {
|
||||
"input_description": "$t(common.description)",
|
||||
"input_name": "$t(common.name)",
|
||||
"input_owner": "$t(common.owner)",
|
||||
"input_public": "Avalik",
|
||||
"success": "$t(entity.playlist, {\"count\": 1}) loodi edukalt",
|
||||
"title": "Loo $t(entity.playlist, {\"count\": 1})"
|
||||
},
|
||||
"createRadioStation": {
|
||||
"success": "Raadiojaam loodi edukalt",
|
||||
"title": "Loo raadiojaam",
|
||||
"input_homepageUrl": "Avalehe URL",
|
||||
"input_name": "Nimi",
|
||||
"input_streamUrl": "Voo URL"
|
||||
},
|
||||
"editRadioStation": {
|
||||
"success": "Raadiojaam on edukalt uuendatud"
|
||||
},
|
||||
"deletePlaylist": {
|
||||
"input_confirm": "Kinnitamiseks sisesta $t(entity.playlist, {\"count\": 1}) nimi",
|
||||
"success": "$t(entity.playlist, {\"count\": 1}) edukalt kustutatud",
|
||||
"title": "Kustuta $t(entity.playlist, {\"count\": 1})"
|
||||
},
|
||||
"editPlaylist": {
|
||||
"success": "$t(entity.playlist, {\"count\": 1}) edukalt uuendatud",
|
||||
"title": "Muuda $t(entity.playlist, {\"count\": 1})",
|
||||
"publicJellyfinNote": "Jellyfin ei kuva mingil põhjusel, kas esitusloend on avalik või mitte. Kui soovid, et see jääks avalikuks, veendu, et järgmine valik oleks aktiivne"
|
||||
},
|
||||
"lyricsExport": {
|
||||
"export": "Ekspordi laulusõnad",
|
||||
"input_synced": "Ekspordi sünkroonitud laulusõnad",
|
||||
"input_offset": "$t(setting.lyricOffset)"
|
||||
},
|
||||
"lyricSearch": {
|
||||
"input_artist": "$t(entity.artist, {\"count\": 1})",
|
||||
"input_name": "$t(common.name)",
|
||||
"title": "Laulusõnade otsing"
|
||||
},
|
||||
"queryEditor": {
|
||||
"title": "Päringuredaktor",
|
||||
"input_optionMatchAll": "Vasta kõigile",
|
||||
"input_optionMatchAny": "Vasta mõnele",
|
||||
"addRuleGroup": "Lisa reeglite grupp",
|
||||
"removeRuleGroup": "Eemalda reeglite grupp",
|
||||
"resetToDefault": "Taasta vaikeväärtused",
|
||||
"clearFilters": "Tühjenda filtrid"
|
||||
},
|
||||
"saveQueue": {
|
||||
"success": "Esitusjärjekord salvestati serverisse"
|
||||
},
|
||||
"shareItem": {
|
||||
"allowDownloading": "Luba allalaadimine",
|
||||
"copyToClipboard": "Kopeeri lõikelauale: Ctrl+C, enter",
|
||||
"description": "Kirjeldus",
|
||||
"setExpiration": "Määra aegumisaeg",
|
||||
"success": "Jagamislink kopeeriti lõikelauale (või klõpsa avamiseks siia)",
|
||||
"successMustClick": "Jagamine on edukalt loodud. Klõpsa avamiseks siia",
|
||||
"expireInvalid": "Aegumisaeg peab olema tulevikus",
|
||||
"createFailed": "Jagamise loomine nurjus (kas jagamine on lubatud?)"
|
||||
},
|
||||
"shuffleAll": {
|
||||
"title": "Juhuesitus",
|
||||
"input_kind_albums": "Albumid",
|
||||
"input_kind_songs": "Lood",
|
||||
"input_kind": "Juhuvalikud",
|
||||
"input_limit_albums": "Mitu albumit?",
|
||||
"input_limit_songs": "Mitu lugu?",
|
||||
"input_genre": "$t(entity.genre, {\"count\": 1})",
|
||||
"input_limit": "Mitu lugu?",
|
||||
"input_minYear": "Aastast",
|
||||
"input_maxYear": "Aastani",
|
||||
"input_played": "Esita filter",
|
||||
"input_played_optionAll": "Kõik lood",
|
||||
"input_played_optionUnplayed": "Ainult esitamata lood",
|
||||
"input_played_optionPlayed": "Ainult esitatud lood"
|
||||
},
|
||||
"updateServer": {
|
||||
"success": "Serveri värskendamine õnnestus",
|
||||
"title": "Värskenda serverit"
|
||||
},
|
||||
"privateMode": {
|
||||
"enabled": "Privaatne režiim lülitati sisse, esituse olek on nüüd väliste allikate eest peidetud",
|
||||
"disabled": "Privaatne režiim lülitati välja, esituse olek on nüüd väliste allikate jaoks nähtav",
|
||||
"title": "Privaatne režiim"
|
||||
}
|
||||
},
|
||||
"page": {
|
||||
"albumArtistDetail": {
|
||||
"about": "{{artist}} teave",
|
||||
"appearsOn": "Osaleb",
|
||||
"favoriteSongs": "Lemmiklood",
|
||||
"groupingTypeAll": "Kõik väljaande tüübid",
|
||||
"groupingTypePrimary": "Peamised väljaande tüübid",
|
||||
"recentReleases": "Hiljutised väljaanded",
|
||||
"viewDiscography": "Vaata diskograafiat",
|
||||
"relatedArtists": "Seotud $t(entity.artist, {\"count\": 2})",
|
||||
"topSongs": "Populaarseimad lood",
|
||||
"topSongsCommunity": "Kogukond",
|
||||
"topSongsFrom": "Populaarseimad lood: {{title}}",
|
||||
"topSongsPersonal": "Isiklik",
|
||||
"favoriteSongsFrom": "Lemmiklood: {{title}}",
|
||||
"viewAll": "Kuva kõik",
|
||||
"viewAllTracks": "Kuva kõik $t(entity.track, {\"count\": 2})"
|
||||
},
|
||||
"albumArtistList": {
|
||||
"title": "$t(entity.albumArtist, {\"count\": 2})"
|
||||
},
|
||||
"albumDetail": {
|
||||
"moreFromArtist": "Veel esitajalt $t(entity.artist, {\"count\": 1})",
|
||||
"moreFromGeneric": "Veel: {{item}}",
|
||||
"released": "Avaldatud"
|
||||
},
|
||||
"albumList": {
|
||||
"artistAlbums": "{{artist}} albumid",
|
||||
"genreAlbums": "\"{{genre}}\" $t(entity.album, {\"count\": 2})",
|
||||
"title": "$t(entity.album, {\"count\": 2})"
|
||||
},
|
||||
"radioList": {
|
||||
"title": "Raadiojaamad"
|
||||
},
|
||||
"releasenotes": {
|
||||
"commitsSinceStable": "Muudatused alates {{stable}}",
|
||||
"noNewCommits": "Selles vahemikus pole uusi muudatusi",
|
||||
"noStableReleaseToCompare": "Võrdlemiseks pole saadaval ühtegi stabiilset versiooni"
|
||||
},
|
||||
"favorites": {
|
||||
"title": "$t(entity.favorite, {\"count\": 2})"
|
||||
},
|
||||
"windowBar": {
|
||||
"paused": "(Peatatud) ",
|
||||
"privateMode": "(Privaatne režiim)"
|
||||
},
|
||||
"appMenu": {
|
||||
"collapseSidebar": "Ahenda külgriba",
|
||||
"commandPalette": "Ava käsupalett",
|
||||
"expandSidebar": "Laienda külgriba",
|
||||
"goBack": "Mine tagasi",
|
||||
"goForward": "Mine edasi",
|
||||
"manageServers": "Halda servereid",
|
||||
"privateModeOff": "Lülita privaatne režiim välja",
|
||||
"privateModeOn": "Lülita privaatne režiim sisse",
|
||||
"openBrowserDevtools": "Ava brauseri arendajatööriistad",
|
||||
"quit": "$t(common.quit)",
|
||||
"selectServer": "Vali server",
|
||||
"selectMusicFolder": "Vali muusikakaust",
|
||||
"noMusicFolder": "Muusikakausta pole valitud",
|
||||
"multipleMusicFolders": "{{count}} muusikakausta valitud",
|
||||
"settings": "$t(common.setting, {\"count\": 2})",
|
||||
"version": "Versioon {{version}}"
|
||||
},
|
||||
"manageServers": {
|
||||
"title": "Halda servereid",
|
||||
"serverDetails": "Serveri üksikasjad",
|
||||
"url": "URL",
|
||||
"username": "Kasutajanimi",
|
||||
"editServerDetailsTooltip": "Muuda serveri üksikasju",
|
||||
"removeServer": "Eemalda 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": "Laadi alla",
|
||||
"moveItems": "$t(action.moveItems)",
|
||||
"moveToNext": "$t(action.moveToNext)",
|
||||
"moveToBottom": "$t(action.moveToBottom)",
|
||||
"moveToTop": "$t(action.moveToTop)",
|
||||
"numberSelected": "{{count}} valitud",
|
||||
"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": "Jaga üksust",
|
||||
"goTo": "Mine",
|
||||
"goToAlbum": "Mine: $t(entity.album, {\"count\": 1})",
|
||||
"goToAlbumArtist": "Mine: $t(entity.albumArtist, {\"count\": 1})",
|
||||
"showDetails": "Hangi teavet"
|
||||
},
|
||||
"fullscreenPlayer": {
|
||||
"config": {
|
||||
"dynamicBackground": "Dünaamiline taust",
|
||||
"dynamicImageBlur": "Pildi hägustamise suurus",
|
||||
"dynamicIsImage": "Luba taustapilt",
|
||||
"followCurrentLyric": "Jälgi esitatavat rida",
|
||||
"lyricAlignment": "Laulusõnade joondus",
|
||||
"lyricOffset": "Laulusõnade nihe (ms)",
|
||||
"lyricGap": "Ridade vahe",
|
||||
"lyricSize": "Teksti suurus",
|
||||
"lyricOpacityNonActive": "Mitteaktiivse rea läbipaistmatus",
|
||||
"lyricScaleNonActive": "Mitteaktiivse rea suurus",
|
||||
"opacity": "Läbipaistmatus",
|
||||
"showLyricMatch": "Kuva leitud vasted",
|
||||
"showLyricProvider": "Kuva laulusõnade allikas",
|
||||
"synchronized": "Sünkroniseeritud",
|
||||
"unsynchronized": "Sünkroniseerimata",
|
||||
"useImageAspectRatio": "Kasuta pildi kuvasuhet"
|
||||
},
|
||||
"lyrics": "Laulusõnad",
|
||||
"related": "Seotud",
|
||||
"upNext": "Järgmiseks",
|
||||
"visualizer": "Visuaal",
|
||||
"noLyrics": "Laulusõnu ei leitud"
|
||||
},
|
||||
"genreList": {
|
||||
"showAlbums": "Kuva $t(entity.genre, {\"count\": 1}) $t(entity.album, {\"count\": 2})",
|
||||
"showTracks": "Kuva $t(entity.genre, {\"count\": 1}) $t(entity.track, {\"count\": 2})",
|
||||
"title": "$t(entity.genre, {\"count\": 2})"
|
||||
},
|
||||
"folderList": {
|
||||
"title": "$t(entity.folder, {\"count\": 2})"
|
||||
},
|
||||
"globalSearch": {
|
||||
"commands": {
|
||||
"goToPage": "Mine lehele",
|
||||
"searchFor": "Otsi {{query}}",
|
||||
"serverCommands": "Serveri käsud"
|
||||
},
|
||||
"title": "Käsud"
|
||||
},
|
||||
"home": {
|
||||
"explore": "Avasta oma kogust",
|
||||
"genres": "$t(entity.genre, {\"count\": 2})",
|
||||
"mostPlayed": "Enim esitatud",
|
||||
"newlyAdded": "Hiljuti lisatud väljaanded",
|
||||
"recentlyPlayed": "Hiljuti esitatud",
|
||||
"recentlyReleased": "Hiljuti avaldatud",
|
||||
"title": "$t(common.home)"
|
||||
},
|
||||
"itemDetail": {
|
||||
"copyPath": "Kopeeri tee lõikelauale",
|
||||
"copiedPath": "Tee kopeeriti edukalt",
|
||||
"openFile": "Kuva lugu failihalduris"
|
||||
},
|
||||
"playlist": {
|
||||
"reorder": "Ümberreastamine on lubatud vaid ID järgi sorteerimisel"
|
||||
},
|
||||
"playlistList": {
|
||||
"title": "$t(entity.playlist, {\"count\": 2})"
|
||||
},
|
||||
"collections": {
|
||||
"overrideExisting": "Asenda olemasolev",
|
||||
"saveAsCollection": "Salvesta kogumikuna"
|
||||
},
|
||||
"setting": {
|
||||
"advanced": "Täpsem",
|
||||
"analytics": "Analüütika",
|
||||
"generalTab": "Üldine",
|
||||
"hotkeysTab": "Kiirklahvid",
|
||||
"playbackTab": "Taasesitus",
|
||||
"windowTab": "Aken",
|
||||
"updates": "Uuenda",
|
||||
"cache": "Vahemälu",
|
||||
"application": "Rakendus",
|
||||
"queryBuilder": "Päringu koostaja",
|
||||
"theme": "Teema",
|
||||
"controls": "Juhtnupud",
|
||||
"sidebar": "Külgriba",
|
||||
"exportImport": "Import/eksport",
|
||||
"scrobble": "Kraasi",
|
||||
"audio": "Heli",
|
||||
"lyrics": "Laulusõnad",
|
||||
"lyricsDisplay": "Laulusõnade kuvamine",
|
||||
"transcoding": "Transkoodimine",
|
||||
"discord": "Discord",
|
||||
"logger": "Logija",
|
||||
"playerFilters": "Mängija filtrid",
|
||||
"remote": "Kaugjuhtimine"
|
||||
},
|
||||
"sidebar": {
|
||||
"albumArtists": "$t(entity.albumArtist, {\"count\": 2})",
|
||||
"albums": "$t(entity.album, {\"count\": 2})",
|
||||
"collections": "Kogumikud",
|
||||
"artists": "$t(entity.artist, {\"count\": 2})",
|
||||
"favorites": "$t(entity.favorite, {\"count\": 2})",
|
||||
"folders": "$t(entity.folder, {\"count\": 2})",
|
||||
"genres": "$t(entity.genre, {\"count\": 2})",
|
||||
"home": "$t(common.home)",
|
||||
"radio": "$t(entity.radioStation, {\"count\": 2})",
|
||||
"myLibrary": "Muusikakogu",
|
||||
"nowPlaying": "Esitamisel",
|
||||
"playlists": "$t(entity.playlist, {\"count\": 2})",
|
||||
"search": "$t(common.search)",
|
||||
"settings": "$t(common.setting, {\"count\": 2})",
|
||||
"shared": "Shared $t(entity.playlist, {\"count\": 2})",
|
||||
"tracks": "$t(entity.track, {\"count\": 2})"
|
||||
},
|
||||
"trackList": {
|
||||
"artistTracks": "{{artist}} lood",
|
||||
"genreTracks": "\"{{genre}}\" $t(entity.track, {\"count\": 2})",
|
||||
"title": "$t(entity.track, {\"count\": 2})"
|
||||
}
|
||||
},
|
||||
"player": {
|
||||
"addLast": "Viimane",
|
||||
"addNext": "Järgmine",
|
||||
"addLastShuffled": "Viimane (juhuesitus)",
|
||||
"addNextShuffled": "Järgmine (juhuesitus)",
|
||||
"albumRadio": "Albumi raadio",
|
||||
"artistRadio": "Esitaja raadio",
|
||||
"holdToShuffle": "Hoia all segamiseks",
|
||||
"favorite": "Lemmik",
|
||||
"lyrics": "Laulusõnad",
|
||||
"mute": "Vaigista",
|
||||
"muted": "Vaigistatud",
|
||||
"next": "Järgmine",
|
||||
"play": "Esita",
|
||||
"playbackFetchCancel": "See võtab veidi aega… tühistamiseks sulge teavitus",
|
||||
"playbackFetchInProgress": "Lugude laadimine…",
|
||||
"playbackFetchNoResults": "Ühtegi lugu ei leitud",
|
||||
"playbackSpeed": "Taasesituse kiirus",
|
||||
"playRandom": "Esita juhuslikult",
|
||||
"playSimilarSongs": "Esita sarnaseid lugusid",
|
||||
"previous": "Eelmine",
|
||||
"queue_clear": "Tühjenda järjekord",
|
||||
"queue_moveToBottom": "Liiguta valitud lõppu",
|
||||
"queue_moveToTop": "Liiguta valitud algusesse",
|
||||
"queue_remove": "Eemalda valitud",
|
||||
"repeat": "Korda",
|
||||
"repeat_all": "Korda kõiki",
|
||||
"repeat_off": "Kordus keelatud",
|
||||
"restoreQueueFromServer": "Taasta järjekord serverist",
|
||||
"saveQueueToServer": "Salvesta järjekord serverisse",
|
||||
"shuffle": "Esita (juhuesitus)",
|
||||
"shuffle_off": "Juhuesitus keelatud",
|
||||
"skip": "Jäta vahele",
|
||||
"skip_back": "Hüppa tagasi",
|
||||
"skip_forward": "Hüppa edasi",
|
||||
"stop": "Peata",
|
||||
"toggleFullscreenPlayer": "Täisekraani lüliti",
|
||||
"trackRadio": "Pala raadio",
|
||||
"unfavorite": "Eemalda lemmikutest",
|
||||
"pause": "Paus",
|
||||
"viewQueue": "Kuva järjekord",
|
||||
"sleepTimer": "Unetaimer",
|
||||
"sleepTimer_endOfSong": "Praeguse loo lõpp",
|
||||
"sleepTimer_endOfAlbum": "Praeguse albumi lõpp",
|
||||
"sleepTimer_minutes": "{{count}} min",
|
||||
"sleepTimer_hours": "{{count}} t",
|
||||
"sleepTimer_custom": "Kohandatud",
|
||||
"sleepTimer_off": "Väljas",
|
||||
"sleepTimer_timeRemaining": "{{time}} jäänud",
|
||||
"sleepTimer_setCustom": "Sea taimer",
|
||||
"sleepTimer_cancel": "Tühista taimer",
|
||||
"scrobbleForceSubmit": "Sunnitud kraasimine"
|
||||
},
|
||||
"queryBuilder": {
|
||||
"standardTags": "Standardsildid",
|
||||
"customTags": "Kohandatud sildid"
|
||||
},
|
||||
"releaseType": {
|
||||
"primary": {
|
||||
"album": "$t(entity.album, {\"count\": 1})",
|
||||
"broadcast": "Saade",
|
||||
"ep": "EP",
|
||||
"other": "Muu",
|
||||
"single": "Singel"
|
||||
},
|
||||
"secondary": {
|
||||
"audiobook": "Heliraamat",
|
||||
"audioDrama": "Kuuldemäng",
|
||||
"compilation": "Kogumik",
|
||||
"djMix": "DJ miks",
|
||||
"demo": "Demo",
|
||||
"fieldRecording": "Välisalvestis",
|
||||
"interview": "Intervjuu",
|
||||
"live": "Live",
|
||||
"mixtape": "Mixtape",
|
||||
"remix": "Remiks",
|
||||
"soundtrack": "Filmimuusika",
|
||||
"spokenWord": "Luule ja kõne"
|
||||
}
|
||||
},
|
||||
"setting": {
|
||||
"autoDJ": "Automaatne DJ",
|
||||
"autoDJ_itemCount": "Üksuste arv",
|
||||
"autoDJ_itemCount_description": "Järjekorda lisatavate üksuste arv",
|
||||
"autoDJ_timing": "Ajastus",
|
||||
"autoDJ_timing_description": "Lugude arv järjekorras enne automaatse DJ käivitumist",
|
||||
"autoDJ_mode": "Režiim",
|
||||
"autoDJ_mode_albums": "Albumid",
|
||||
"autoDJ_mode_description": "Vali, kas lisada järjekorda üksikud lood või terved albumid",
|
||||
"autoDJ_mode_songs": "Lood",
|
||||
"autoDJ_enabled": "Luba automaatne DJ",
|
||||
"autoDJ_albumStrategy": "Albumi valiku režiim",
|
||||
"autoDJ_songStrategy": "Laulu valiku režiim",
|
||||
"autoDJ_strategy_option_library_random": "Juhuslik",
|
||||
"autoDJ_strategy_option_similar": "Sarnased",
|
||||
"autosave": "Salvesta esitusjärjekord automaatselt",
|
||||
"autosave_description": "Luba järjekorra automaatne salvestamine serverisse. See on võimalik ainult Navidrome/Subsonic serveri puhul ning esitusjärjekorras ei tohi olla erinevatest allikatest pärit lugusid.",
|
||||
"autosaveCount": "Järjekorra automaatse salvestamise sagedus",
|
||||
"autosaveCount_description": "Mitu loo vahetust tehakse enne järjekorra salvestamist. 1 (miinimum) tähendab, et salvestatakse igal loo vahetusel",
|
||||
"accentColor_description": "Määrab rakenduse rõhuvärvi",
|
||||
"accentColor": "Rõhuvärv",
|
||||
"useThemeAccentColor": "Kasuta teema rõhuvärvi",
|
||||
"useThemeAccentColor_description": "Kasuta kohandatud rõhuvärvi asemel valitud teema põhivärvi",
|
||||
"useThemePrimaryShade": "Kasuta teema põhitooni",
|
||||
"useThemePrimaryShade_description": "Kasuta valitud teemas määratletud põhitooni põhivärvi variantide jaoks",
|
||||
"primaryShade": "Põhitoon",
|
||||
"primaryShade_description": "Alista nuppude, linkide ja muude põhivärvi elementide jaoks kasutatud põhitoon (0–9)",
|
||||
"albumBackground_description": "Lisab albumi lehtedele albumikujundusega taustapildi",
|
||||
"albumBackground": "Albumi taustapilt",
|
||||
"albumBackgroundBlur_description": "Reguleerib albumi taustapildi hägustamise määra",
|
||||
"albumBackgroundBlur": "Albumi tausta hägustuse määr",
|
||||
"analyticsDisable": "Keeldu kasutusstatistika kogumisest",
|
||||
"analyticsDisable_description": "Arendajale saadetakse anonüümseid kasutusandmeid, et aidata rakendust paremaks muuta",
|
||||
"analyticsEnable": "Jaga kasutusstatistikat",
|
||||
"analyticsEnable_description": "Arendajale saadetakse anonüümseid kasutusandmeid, et aidata rakendust paremaks muuta",
|
||||
"applicationHotkeys_description": "Seadista rakenduse kiirklahve. Vali märkeruut, et määrata see globaalseks kiirklahviks (ainult töölaual)",
|
||||
"applicationHotkeys": "Rakenduse kiirklahvid",
|
||||
"artistBackground": "Esitaja taustapilt",
|
||||
"artistBackground_description": "Lisab esitaja lehtede taustaks esitaja pildi",
|
||||
"artistBackgroundBlur": "Esitaja taustapildi hägususe määr",
|
||||
"artistBackgroundBlur_description": "Reguleerib esitaja taustapildi hägususe määra",
|
||||
"customCss_description": "Kohandatud CSS-i sisu. Märkus: atribuudid 'content' ja välised lingid pole lubatud. Sisu eelvaade on kuvatud allpool. Täiendavad väljad, mida sa ei määranud, on lisatud koodi puhastamise tõttu. Töölaud: Feishin loeb ja kirjutab faili 'custom.css' rakenduse seadistuste kaustas ning laadib selle uuesti, kui fail muutub",
|
||||
"artistConfiguration": "Albumi esitaja lehe seadistamine",
|
||||
"artistConfiguration_description": "Seadista, milliseid elemente albumi esitaja lehel kuvatakse ja mis järjekorras",
|
||||
"artistReleaseTypeConfiguration": "Esitaja väljaandetüüpide seadistamine",
|
||||
"artistReleaseTypeConfiguration_description": "Seadista, milliseid väljaandetüüpe albumi esitaja lehel kuvatakse ja mis järjekorras",
|
||||
"audioDevice_description": "Vali taasesituseks kasutatav heliseade",
|
||||
"audioDevice": "Heliseade",
|
||||
"audioExclusiveMode_description": "Lülita sisse eksklusiivne väljundrežiim. Selles režiimis on süsteemi muud helid tavaliselt blokeeritud ja heli suudab edastada ainult mpv. Kui see on sisse lülitatud, siis visuaaliseerija helihõive ei tööta",
|
||||
"audioExclusiveMode": "Eksklusiivne helirežiim",
|
||||
"audioPlayer_description": "Vali taasesituseks kasutatav pleier",
|
||||
"audioPlayer": "Pleier",
|
||||
"buttonSize_description": "Juhtpaneeli nuppude suurus",
|
||||
"buttonSize": "Mängijariba nuppude suurus",
|
||||
"clearCache_description": "Feishini täielik puhastus. Lisaks Feishini vahemälule tühjendatakse ka brauseri vahemälu (salvestatud pildid ja muud failid). Serveri sisselogimisandmed ja seaded säilitatakse",
|
||||
"clearCache": "Tühjenda brauseri vahemälu",
|
||||
"clearCacheSuccess": "Vahemälu tühjendati edukalt",
|
||||
"clearQueryCache_description": "Feishini tavapuhastus. See värskendab esitusloendid ja lugude metaandmed ning lähtestab salvestatud laulusõnad. Seaded, serveri sisselogimisandmed ja vahemällu salvestatud pildid säilitatakse",
|
||||
"clearQueryCache": "Tühjenda Feishini vahemälu",
|
||||
"contextMenu_description": "Võimaldab peita elemente, mida kuvatakse menüüs, kui teed mistahes elemendil paremklõpsu. Märkimata elemendid peidetakse",
|
||||
"contextMenu": "Kontekstimenüü (paremklõps) seadistamine",
|
||||
"crossfadeDuration_description": "Määrab sujuva ülemineku kestuse",
|
||||
"crossfadeDuration": "Sujuva ülemineku kestus",
|
||||
"crossfadeStyle": "Sujuva ülemineku stiil",
|
||||
"crossfadeStyle_description": "Vali pleieri sujuva ülemineku stiil",
|
||||
"customCss": "Kohandatud CSS",
|
||||
"customCssEnable_description": "Luba kohandatud CSS-i kirjutamine",
|
||||
"customCssEnable": "Luba kohandatud CSS",
|
||||
"customCssNotice": "Hoiatus: kuigi sisendit kontrollitakse (funktsioonid URL() ja 'content:' pole lubatud), võib kohandatud CSS-i kasutamine liidese muutmise tõttu siiski riske kaasa tuua",
|
||||
"customFontPath_description": "Määrab rakenduses kasutatava kohandatud fondi asukoha",
|
||||
"customFontPath": "Kohandatud fondi asukoht",
|
||||
"automaticUpdates": "Automaatsed uuendused",
|
||||
"automaticUpdates_description": "Otsi ja paigalda uuendusi automaatselt",
|
||||
"releaseChannel_optionAlpha": "Alfa (öine)",
|
||||
"releaseChannel_optionBeta": "Beeta",
|
||||
"releaseChannel_optionLatest": "Uusim",
|
||||
"releaseChannel": "Uuenduskanal",
|
||||
"releaseChannel_description": "Vali automaatsete uuenduste jaoks stabiilne, beeta- või alfaversioon (öised versioonid)",
|
||||
"disableLibraryUpdateOnStartup": "Keela uuenduste otsimine rakenduse käivitumisel",
|
||||
"discordApplicationId_description": "Rakenduse ID {{discord}} olekuteabe (rich presence) jaoks (vaikimisi {{defaultId}})",
|
||||
"discordApplicationId": "{{discord}} rakenduse ID",
|
||||
"discordDisplayType_artistname": "Esitaja nimi",
|
||||
"discordDisplayType_description": "Muudab sinu olekus seda, mida sa parajasti kuulad",
|
||||
"discordDisplayType_songname": "Loo nimi",
|
||||
"discordDisplayType": "{{discord}} kohaloleku kuvamise tüüp",
|
||||
"discordIdleStatus_description": "Kui see on lubatud, uuendatakse olekut siis, kui pleier on tegevuseta",
|
||||
"discordIdleStatus": "Kuva tegevuseta olekut",
|
||||
"discordLinkType_description": "Lisab platvormide {{lastfm}} või {{musicbrainz}} välised lingid laulu ja esitaja väljadele keskkonnas {{discord}}. {{musicbrainz}} on kõige täpsem, kuid nõuab siltide olemasolu ega paku esitajate linke, samas kui {{lastfm}} peaks lingi alati tagama. Ei tee täiendavaid võrgupäringuid",
|
||||
"discordLinkType_mbz_lastfm": "{{musicbrainz}}, vajadusel varulahendusena {{lastfm}}",
|
||||
"discordLinkType_none": "$t(common.none)",
|
||||
"discordLinkType": "{{discord}} olekuteabe lingid",
|
||||
"discordListening_description": "Kuva olekuks „kuulab“, mitte „mängib“",
|
||||
"discordListening": "Kuva olekuks „kuulab\"",
|
||||
"discordPausedStatus_description": "Kui see on lubatud, kuvatakse olekut ka siis, kui pleier on pausil",
|
||||
"discordPausedStatus": "Kuva olekut pausi ajal",
|
||||
"discordRichPresence": "{{discord}} olekuteave",
|
||||
"discordRichPresence_description": "Luba esituse oleku kuvamine {{discord}} olekuteabes. Pildi võtmed on: {{icon}}, {{playing}} ja {{paused}}",
|
||||
"discordServeImage": "Laadi {{discord}} pildid serverist",
|
||||
"discordServeImage_description": "Jaga {{discord}} olekuteabe jaoks albumikaane pilte otse serverist endast; see funktsioon on saadaval ainult Jellyfini ja Navidrome puhul. {{discord}} kasutab piltide hankimiseks botti, mis tähendab, et sinu server peab olema avalikust internetist ligipääsetav",
|
||||
"discordStateIcon": "Kuva esituse ikoon",
|
||||
"discordStateIcon_description": "Näita olekuteabes väikest mängimise ikooni. Pausiikooni kuvatakse alati, kui funktsioon „Kuva olekut pausi ajal“ on sisse lülitatud",
|
||||
"discordUpdateInterval": "{{discord}} oleku uuendamise sagedus",
|
||||
"discordUpdateInterval_description": "Aeg sekundites iga värskenduse vahel (vähemalt 15 sekundit)",
|
||||
"enableAutoTranslation_description": "Tõlgi laulusõnad laadimisel automaatselt",
|
||||
"enableAutoTranslation": "Luba automaatne tõlge",
|
||||
"enableRemote_description": "Lülitab sisse kaugjuhtimisserveri, mis võimaldab teistel seadmetel seda rakendust juhtida",
|
||||
"enableRemote": "Luba kaugjuhtimisserver",
|
||||
"exitToTray_description": "Sulge rakendus süsteemisalve",
|
||||
"exitToTray": "Välju salve",
|
||||
"exportImportSettings_control_description": "Ekspordi ja impordi seaded JSON-failina",
|
||||
"exportImportSettings_control_exportText": "Ekspordi seaded",
|
||||
"exportImportSettings_control_importText": "Impordi seaded",
|
||||
"exportImportSettings_control_title": "Impordi / ekspordi seadeid",
|
||||
"exportImportSettings_destructiveWarning": "Seadete importimine kirjutab praegused andmed üle. Palun vaata ülalolev info üle enne, kui klõpsad allolevale nupule „Impordi“!",
|
||||
"exportImportSettings_importBtn": "Impordi seaded",
|
||||
"exportImportSettings_importModalTitle": "Impordi Feishini seaded",
|
||||
"exportImportSettings_importSuccess": "Seaded on edukalt imporditud!",
|
||||
"exportImportSettings_notValidJSON": "Edastatud fail ei ole korrektne JSON",
|
||||
"exportImportSettings_offendingKeyError": "\"{{offendingKey}}\" on vale - {{reason}}",
|
||||
"externalLinks_description": "Lubab esitaja ja albumi lehtedel näidata väliseid linke (Last.fm, MusicBrainz)",
|
||||
"externalLinks": "Kuva välised lingid",
|
||||
"followCurrentSong_description": "Keri esitusjärjekord automaatselt hetkel mängiva looni",
|
||||
"followCurrentSong": "Jälgi praegust lugu",
|
||||
"followLyric_description": "Keri laulusõnad praegusesse kohta",
|
||||
"followLyric": "Jälgi laulusõnu",
|
||||
"font_description": "Määrab rakenduses kasutatava fondi",
|
||||
"font": "Font",
|
||||
"fontType_description": "Sisseehitatud font valib ühe Feishini pakutavatest fontidest. Süsteemi font võimaldab valida suvalise operatsioonisüsteemi pakutava fondi. Kohandatud valik lubab sul sisestada oma fondi",
|
||||
"fontType_optionBuiltIn": "Sisseehitatud font",
|
||||
"fontType_optionCustom": "Kohandatud font",
|
||||
"fontType_optionSystem": "Süsteemi font",
|
||||
"fontType": "Fondi tüüp",
|
||||
"gaplessAudio_description": "Määrab mpv jaoks pausideta esituse seaded",
|
||||
"gaplessAudio_optionWeak": "Nõrk (soovitatav)",
|
||||
"gaplessAudio": "Pausideta esitus",
|
||||
"globalMediaHotkeys_description": "Luba või keela süsteemi meediaklahvide kasutamine esituse juhtimiseks",
|
||||
"globalMediaHotkeys": "Globaalsed meedia kiirklahvid",
|
||||
"homeConfiguration_description": "Seadista, milliseid elemente avalehel kuvatakse ja mis järjekorras",
|
||||
"homeConfiguration": "Avalehe seadistus",
|
||||
"homeFeature_description": "Määrab, kas avalehel kuvatakse suurt esitluskarusselli",
|
||||
"homeFeature": "Avalehe esitluskarussell",
|
||||
"homeFeatureStyle_description": "Määrab avalehe karusselli stiili",
|
||||
"homeFeatureStyle": "Avalehe karusselli stiil",
|
||||
"homeFeatureStyle_optionMultiple": "Mitu",
|
||||
"homeFeatureStyle_optionSingle": "Üks",
|
||||
"hotkey_browserBack": "Tagasi",
|
||||
"hotkey_browserForward": "Edasi",
|
||||
"hotkey_favoriteCurrentSong": "Lisa $t(common.currentSong) lemmikuks",
|
||||
"hotkey_favoritePreviousSong": "Lisa $t(common.previousSong) lemmikuks",
|
||||
"hotkey_globalSearch": "Globaalne otsing",
|
||||
"hotkey_localSearch": "Otsing lehelt",
|
||||
"hotkey_listNavigateToPage": "Liigu nimekirjast üksuse lehele",
|
||||
"hotkey_listPlayDefault": "Esita loendist",
|
||||
"hotkey_listPlayLast": "Lisa järjekorra lõppu",
|
||||
"hotkey_listPlayNext": "Esita järgmisena",
|
||||
"hotkey_listPlayNow": "Esita kohe",
|
||||
"hotkey_listShowPlayingSong": "Kuva esitatav lugu loendis",
|
||||
"hotkey_navigateHome": "Liigu avalehele",
|
||||
"hotkey_playbackNext": "Järgmine lugu",
|
||||
"hotkey_playbackPause": "Paus",
|
||||
"hotkey_playbackPlay": "Esita",
|
||||
"hotkey_playbackPlayPause": "Esita / peata",
|
||||
"hotkey_playbackPrevious": "Eelmine lugu",
|
||||
"hotkey_playbackStop": "Peata",
|
||||
"hotkey_rate0": "Eemalda hinne",
|
||||
"hotkey_rate1": "Hinne 1 tärn",
|
||||
"hotkey_rate2": "Hinne 2 tärni",
|
||||
"hotkey_rate3": "Hinne 3 tärni",
|
||||
"hotkey_rate4": "Hinne 4 tärni",
|
||||
"hotkey_rate5": "Hinne 5 tärni",
|
||||
"hotkey_skipBackward": "Hüppa tagasi",
|
||||
"hotkey_skipForward": "Hüppa edasi",
|
||||
"hotkey_toggleCurrentSongFavorite": "Muuda $t(common.currentSong) lemmikuks olekut",
|
||||
"hotkey_toggleFullScreenPlayer": "Lülita täisekraanil pleier sisse/välja",
|
||||
"hotkey_togglePreviousSongFavorite": "Muuda $t(common.previousSong) lemmikuks olekut",
|
||||
"hotkey_toggleQueue": "Lülita järjekord sisse/välja",
|
||||
"hotkey_toggleRepeat": "Lülita kordus sisse/välja",
|
||||
"hotkey_toggleShuffle": "Lülita juhuesitus sisse/välja",
|
||||
"hotkey_unfavoriteCurrentSong": "Eemalda $t(common.currentSong) lemmikutest",
|
||||
"hotkey_unfavoritePreviousSong": "Eemalda $t(common.previousSong) lemmikutest",
|
||||
"hotkey_volumeDown": "Heli vaiksemaks",
|
||||
"hotkey_volumeMute": "Vaigista",
|
||||
"hotkey_volumeUp": "Heli kõvemaks",
|
||||
"hotkey_zoomIn": "Suumi sisse",
|
||||
"hotkey_zoomOut": "Suumi välja",
|
||||
"imageAspectRatio_description": "Kui see on sisse lülitatud, kuvatakse albumipilte nende algse kuvasuhtega. Piltide puhul, mis pole 1:1 suhtega, jääb ülejäänud ala tühjaks",
|
||||
"imageAspectRatio": "Kuva kaanepilte algses kuvasuhtes",
|
||||
"language": "Keel",
|
||||
"language_description": "Määrab rakenduse keele ($t(common.restartRequired))",
|
||||
"lastfm_description": "Kuva esitaja/albumi lehtedel Last.fm linke",
|
||||
"lastfm": "Kuva Last.fm linke",
|
||||
"listenbrainz_description": "Kuva esitaja/albumi lehtedel ListenBrainz linke",
|
||||
"listenbrainz": "Kuva ListenBrainz linke",
|
||||
"lastfmApiKey_description": "{{lastfm}} API võti. Vajalik kaanepiltide jaoks",
|
||||
"lastfmApiKey": "{{lastfm}} API võti",
|
||||
"lyricFetch_description": "Hangi laulusõnad erinevatest veebiallikatest",
|
||||
"lyricFetch": "Hangi laulusõnad internetist",
|
||||
"lyricFetchProvider_description": "Vali laulusõnade allikad",
|
||||
"lyricFetchProvider": "Laulusõnade allikad",
|
||||
"lyricOffset_description": "Nihuta laulusõnu määratud millisekundite võrra",
|
||||
"lyricOffset": "Laulusõnade nihe (ms)",
|
||||
"logLevel": "Logimise tase",
|
||||
"logLevel_description": "Määrab kuvatava logimise miinimumtaseme. „Silumine“ näitab kõiki logisid, „viga“ ainult vigu",
|
||||
"logLevel_optionDebug": "Silumine",
|
||||
"logLevel_optionError": "Viga",
|
||||
"logLevel_optionInfo": "Info",
|
||||
"logLevel_optionWarn": "Hoiata",
|
||||
"minimizeToTray_description": "Minimeeri rakendus süsteemisalve",
|
||||
"minimizeToTray": "Minimeeri salve",
|
||||
"minimumScrobblePercentage_description": "Minimaalne laulu kuulamise protsent, mis peab olema läbitud, enne kui see kraasitakse",
|
||||
"minimumScrobblePercentage": "Minimaalne kestus kraasimiseks (protsent)",
|
||||
"minimumScrobbleSeconds_description": "Minimaalne kuulamise kestus sekundites, mis peab olema läbitud, enne kui see kraasitakse",
|
||||
"minimumScrobbleSeconds": "Minimaalne aeg kraasimiseks (sekundit)",
|
||||
"scrobble_description": "Kraasi esitused meediaserverisse",
|
||||
"scrobble": "Kraasi",
|
||||
"mpvExecutablePath_description": "Määrab mpv käivitusfaili asukoha. Kui väli jääb tühjaks, kasutatakse vaikeasukohta",
|
||||
"mpvExecutablePath": "mpv käivitusfaili asukoht",
|
||||
"mpvExtraParameters": "mpv lisaparameetrid",
|
||||
"mpvExtraParameters_description": "mpv-le edastatavad lisasätted",
|
||||
"mpvExtraParameters_help": "Üks igal real",
|
||||
"musicbrainz_description": "Kuva esitaja/albumi lehtedel linke MusicBrainzile, kui MusicBrainzi ID on olemas",
|
||||
"musicbrainz": "Kuva MusicBrainzi linke",
|
||||
"qobuz_description": "Kuva esitaja/albumi lehtedel Qobuz linke",
|
||||
"qobuz": "Kuva Qobuzi linke",
|
||||
"spotify_description": "Kuva artisti/albumi lehtedel Spotify linke"
|
||||
},
|
||||
"datetime": {
|
||||
"minuteShort": "m",
|
||||
"secondShort": "s",
|
||||
"hourShort": "t",
|
||||
"dayShort": "p"
|
||||
}
|
||||
}
|
||||
@@ -12,7 +12,7 @@
|
||||
"unfavorite": "حذف از موردعلاقهها",
|
||||
"shuffle_off": "پخش تصادفی غیر فعال",
|
||||
"skip_forward": "برو جلو",
|
||||
"queue_moveToTop": "جابجا کردن انتخاب شده به پایین",
|
||||
"queue_moveToTop": "جابجا کردن انتخاب شده به بالا",
|
||||
"queue_clear": "خالی کردن صف",
|
||||
"queue_remove": "حذف انتخاب شده",
|
||||
"addLast": "افزودن به پایان",
|
||||
@@ -24,7 +24,7 @@
|
||||
"mute": "بیصدا کردن",
|
||||
"playbackFetchCancel": "دارد طول میکشد... برای لفو کردن اعلان را ببندید",
|
||||
"playbackFetchInProgress": "بارگذاری قطعهها…",
|
||||
"queue_moveToBottom": "جابجا کردن انتخاب شده به بالا",
|
||||
"queue_moveToBottom": "جابجا کردن انتخاب شده به پایین",
|
||||
"addNext": "افزودن به پسین",
|
||||
"favorite": "مورد علاقه",
|
||||
"playSimilarSongs": "پخش آهنگهای همگون",
|
||||
@@ -33,23 +33,23 @@
|
||||
"muted": "بیصدا"
|
||||
},
|
||||
"action": {
|
||||
"editPlaylist": "ویرایش $t(entity.playlist_one)",
|
||||
"editPlaylist": "ویرایش $t(entity.playlist, {\"count\": 1})",
|
||||
"goToPage": "برو به صفحهٔ",
|
||||
"moveToTop": "انتقال به بالا",
|
||||
"clearQueue": "خالی کردن صف",
|
||||
"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)",
|
||||
"addToFavorites": "افزودن به $t(entity.favorite, {\"count\": 2})",
|
||||
"addToPlaylist": "افزودن به $t(entity.playlist, {\"count\": 1})",
|
||||
"createPlaylist": "ساخت $t(entity.playlist, {\"count\": 1})",
|
||||
"removeFromPlaylist": "حذف از $t(entity.playlist, {\"count\": 1})",
|
||||
"viewPlaylists": "نمایش $t(entity.playlist, {\"count\": 2})",
|
||||
"refresh": "$t(common.refresh)",
|
||||
"deletePlaylist": "حذف $t(entity.playlist_one)",
|
||||
"deletePlaylist": "حذف $t(entity.playlist, {\"count\": 1})",
|
||||
"removeFromQueue": "حذف از صف",
|
||||
"deselectAll": "لغو انتخاب همه",
|
||||
"moveToBottom": "انتقال به پایین",
|
||||
"setRating": "تعیین امتیاز",
|
||||
"toggleSmartPlaylistEditor": "تغییر ویرایشگر $t(entity.smartPlaylist)",
|
||||
"removeFromFavorites": "حذف از $t(entity.favorite_other)",
|
||||
"removeFromFavorites": "حذف از $t(entity.favorite, {\"count\": 2})",
|
||||
"openIn": {
|
||||
"lastfm": "باز کردن در Last.fm",
|
||||
"musicbrainz": "باز کردن در MusicBranz"
|
||||
@@ -70,22 +70,21 @@
|
||||
"hotkey_rate1": "امتیاز ۱ ستاره",
|
||||
"hotkey_skipForward": "برو جلو",
|
||||
"disableLibraryUpdateOnStartup": "غیرفعال کردن بررسی آخرین نسخه در آغاز به کار برنامه",
|
||||
"discordApplicationId_description": "the application id for {{discord}} rich presence (defaults to {{defaultId}})",
|
||||
"discordApplicationId_description": "the application ID for {{discord}} Rich Presence (defaults to {{defaultId}})",
|
||||
"playButtonBehavior_optionAddLast": "$t(player.addLast)",
|
||||
"hotkey_playbackPlay": "پخش",
|
||||
"hotkey_volumeDown": "کم کردن صدا",
|
||||
"audioPlayer_description": "پخشکنندهٔ صدا را برای پخش انتخاب کنید",
|
||||
"hotkey_globalSearch": "جست و جوی سراسری",
|
||||
"disableAutomaticUpdates": "غیرفعال کردن بهروزرسانی خودکار",
|
||||
"exitToTray_description": "خروج از اپلیکیشن به system tray",
|
||||
"replayGainMode_optionAlbum": "$t(entity.album_one)",
|
||||
"replayGainMode_optionAlbum": "$t(entity.album, {\"count\": 1})",
|
||||
"discordUpdateInterval_description": "فاصلهٔ بین هر به روزرسانی به ثانیه (حداقل ۱۵ ثانیه)",
|
||||
"audioExclusiveMode": "حالت اختصاصی صدا",
|
||||
"remotePassword": "رمز عبور کنترل از راه دور",
|
||||
"language_description": "زبان اپلیکیشن را معین میکند $t(common.restartRequired)",
|
||||
"hotkey_rate3": "امتیاز ۳ ستاره",
|
||||
"font": "قلم",
|
||||
"replayGainMode_optionTrack": "$t(entity.track_one)",
|
||||
"replayGainMode_optionTrack": "$t(entity.track, {\"count\": 1})",
|
||||
"hotkey_toggleFullScreenPlayer": "تغییر به پخشکنندهٔ تمامصفحه",
|
||||
"hotkey_localSearch": "جست و جو در صفحه",
|
||||
"hotkey_toggleQueue": "تغییر صف",
|
||||
@@ -110,7 +109,7 @@
|
||||
"customFontPath": "مسیر قلم سفارشی",
|
||||
"audioPlayer": "پخشکنندهٔ صدا",
|
||||
"hotkey_rate0": "حذف امتیاز",
|
||||
"discordApplicationId": "{{discord}} application id",
|
||||
"discordApplicationId": "{{discord}} application ID",
|
||||
"hotkey_volumeMute": "بستن صدا",
|
||||
"showSkipButton": "نمایش دکمهٔ رد کردن",
|
||||
"customFontPath_description": "مسیر قلم سفارشی را برای استفاده در اپلیکیشن مشخص کنید",
|
||||
@@ -133,7 +132,7 @@
|
||||
"buttonSize": "اندازهی دکمهی پخش نوار",
|
||||
"contextMenu": "پیکربندی فهرست زمینه (کلیک راست)",
|
||||
"buttonSize_description": "اندازهی دکمههای پخش نوار",
|
||||
"audioExclusiveMode_description": "حالت اختصاصی خروجی را فعال میکند. در این حالت، سامانه معمولاً قفل است و فقط mpv میتواند خروجی صدا دهد",
|
||||
"audioExclusiveMode_description": "حالت اختصاصی خروجی را فعال میکند. در این حالت، سامانه معمولاً قفل است و فقط MPV میتواند خروجی صدا دهد",
|
||||
"clearQueryCache_description": "یک 'پاکسازی نرم' از فیشین. این فهرستهای پخش و فرادادهی قطعهها را تازه میکند و متن شعرهای ذخیره شده را بازنشانی میکند. پیکربندیها، اعتبارنامههای سرویسدهنده و نگارههای کَش شده حفظ میشوند",
|
||||
"clearCache_description": "یک 'پاکسازی سخت' فیشین. افزون بر پاکسازی کَش فیشین، کَش مرورگر هم تهی میشود (نگارههای ذخیره شده و باقی داراییها). اعتبارنامهها و پیکربندیها حفظ میشوند",
|
||||
"contextMenu_description": "به شما اجازه میدهد که آیتمهای نمایش داده شده در فهرستی که وقتی روی یک آیتم کلیک راست میکنید پدیدار میشود، را پنهان کنید. آیتمهایی که منتخب نیستند پنهان میشوند",
|
||||
@@ -177,7 +176,7 @@
|
||||
"backward": "به عقب",
|
||||
"increase": "افزایش",
|
||||
"rating": "امتیاز",
|
||||
"bpm": "bpm",
|
||||
"bpm": "BPM",
|
||||
"refresh": "تازهسازی",
|
||||
"unknown": "ناشناخته",
|
||||
"areYouSure": "مطمئنید؟",
|
||||
@@ -186,7 +185,7 @@
|
||||
"left": "چپ",
|
||||
"save": "ذخیره",
|
||||
"right": "راست",
|
||||
"currentSong": "فعلی $t(entity.track_one)",
|
||||
"currentSong": "فعلی $t(entity.track, {\"count\": 1})",
|
||||
"collapse": "بستن",
|
||||
"trackNumber": "قطعه",
|
||||
"descending": "نزولی",
|
||||
@@ -239,7 +238,7 @@
|
||||
"none": "هیچ",
|
||||
"menu": "منو",
|
||||
"restartRequired": "راهاندازی دوباره لازم است",
|
||||
"previousSong": "$t(entity.track_one) پیشین",
|
||||
"previousSong": "$t(entity.track, {\"count\": 1}) پیشین",
|
||||
"noResultsFromQuery": "جستوجو نتیجهای نداشت",
|
||||
"quit": "خروج",
|
||||
"expand": "گسترش",
|
||||
@@ -256,7 +255,8 @@
|
||||
"albumPeak": "اوج آلبوم",
|
||||
"mbid": "شناسهی MusicBrainz",
|
||||
"reload": "بارگذاری مجدد",
|
||||
"setting": "پیکربندی",
|
||||
"setting_one": "پیکربندی",
|
||||
"setting_other": "",
|
||||
"trackGain": "گین قطعه",
|
||||
"trackPeak": "اوج قطعه",
|
||||
"translation": "ترجمه",
|
||||
@@ -301,25 +301,25 @@
|
||||
"rating": "امتیاز",
|
||||
"search": "جستوجو",
|
||||
"bitrate": "بیتریت",
|
||||
"genre": "$t(entity.genre_one)",
|
||||
"genre": "$t(entity.genre, {\"count\": 1})",
|
||||
"recentlyAdded": "به تازگی افزوده شده",
|
||||
"note": "توجه",
|
||||
"name": "نام",
|
||||
"dateAdded": "تاریخ افزوده شدن",
|
||||
"releaseDate": "تاریخ انتشار",
|
||||
"albumCount": "$t(entity.album_other) عدد",
|
||||
"albumCount": "$t(entity.album, {\"count\": 2}) عدد",
|
||||
"path": "مسیر",
|
||||
"favorited": "موردعلاقه",
|
||||
"albumArtist": "$t(entity.albumArtist_one)",
|
||||
"albumArtist": "$t(entity.albumArtist, {\"count\": 1})",
|
||||
"isRecentlyPlayed": "به تازگی پخش شده است",
|
||||
"isFavorited": "موردعلاقه است",
|
||||
"bpm": "bpm",
|
||||
"bpm": "BPM",
|
||||
"releaseYear": "سال انتشار",
|
||||
"id": "id",
|
||||
"id": "ID",
|
||||
"disc": "دیسک",
|
||||
"biography": "زندگینامه",
|
||||
"songCount": "تعداد ترانه",
|
||||
"artist": "$t(entity.artist_one)",
|
||||
"artist": "$t(entity.artist, {\"count\": 1})",
|
||||
"duration": "مدت",
|
||||
"isPublic": "عمومی است",
|
||||
"random": "تصادفی",
|
||||
@@ -327,23 +327,23 @@
|
||||
"toYear": "تا سال",
|
||||
"fromYear": "از سال",
|
||||
"criticRating": "امتیاز منتقدین",
|
||||
"album": "$t(entity.album_one)",
|
||||
"album": "$t(entity.album, {\"count\": 1})",
|
||||
"trackNumber": "قطعه",
|
||||
"communityRating": "رتبه بندی جامعه",
|
||||
"isCompilation": "مخلوط است"
|
||||
},
|
||||
"form": {
|
||||
"deletePlaylist": {
|
||||
"title": "حذف $t(entity.playlist_one)",
|
||||
"success": "$t(entity.playlist_one) حذف شد",
|
||||
"input_confirm": "برای تایید، نام $t(entity.playlist_one) را وارد کنید"
|
||||
"title": "حذف $t(entity.playlist, {\"count\": 1})",
|
||||
"success": "$t(entity.playlist, {\"count\": 1}) حذف شد",
|
||||
"input_confirm": "برای تایید، نام $t(entity.playlist, {\"count\": 1}) را وارد کنید"
|
||||
},
|
||||
"createPlaylist": {
|
||||
"input_description": "$t(common.description)",
|
||||
"title": "ساخت $t(entity.playlist_one)",
|
||||
"title": "ساخت $t(entity.playlist, {\"count\": 1})",
|
||||
"input_public": "عمومی",
|
||||
"input_name": "$t(common.name)",
|
||||
"success": "$t(entity.playlist_one) ساخته شد",
|
||||
"success": "$t(entity.playlist, {\"count\": 1}) ساخته شد",
|
||||
"input_owner": "$t(common.owner)"
|
||||
},
|
||||
"addServer": {
|
||||
@@ -360,19 +360,19 @@
|
||||
"ignoreSsl": "نادیده گرفتن ssl ($t(common.restartRequired))"
|
||||
},
|
||||
"addToPlaylist": {
|
||||
"success": "$t(entity.song_other) به {{numOfPlaylists}}$t(entity.playlist_other) افزوده شد",
|
||||
"title": "افزودن به $t(entity.playlist_one)",
|
||||
"input_playlists": "$t(entity.playlist_other)",
|
||||
"success": "$t(entity.song, {\"count\": 2}) به {{numOfPlaylists}}$t(entity.playlist, {\"count\": 2}) افزوده شد",
|
||||
"title": "افزودن به $t(entity.playlist, {\"count\": 1})",
|
||||
"input_playlists": "$t(entity.playlist, {\"count\": 2})",
|
||||
"input_skipDuplicates": "پرش از تکراریها"
|
||||
},
|
||||
"lyricSearch": {
|
||||
"input_name": "$t(common.name)",
|
||||
"input_artist": "$t(entity.artist_one)",
|
||||
"input_artist": "$t(entity.artist, {\"count\": 1})",
|
||||
"title": "جستوجو در متن شعر"
|
||||
},
|
||||
"editPlaylist": {
|
||||
"title": "ویرایش $t(entity.playlist_one)",
|
||||
"success": "$t(entity.playlist_one) با موفقیت بروزرسانی شد",
|
||||
"title": "ویرایش $t(entity.playlist, {\"count\": 1})",
|
||||
"success": "$t(entity.playlist, {\"count\": 1}) با موفقیت بروزرسانی شد",
|
||||
"publicJellyfinNote": "جلیفین به دلیلی اینکه فهرست پخش عمومیست یا خصوصی را فاش نمیکند. اگر میخواهید این عمومی باقی بماند، لطفاٌ ورودی پیشرو را منتخب داشته باشید"
|
||||
},
|
||||
"queryEditor": {
|
||||
@@ -417,7 +417,7 @@
|
||||
"artistWithCount_other": "{{count}} هنرمند",
|
||||
"folder_one": "پوشه",
|
||||
"folder_other": "پوشهها",
|
||||
"smartPlaylist": "$t(entity.playlist_one) هوشمند",
|
||||
"smartPlaylist": "$t(entity.playlist, {\"count\": 1}) هوشمند",
|
||||
"album_one": "آلبوم",
|
||||
"album_other": "آلبومها",
|
||||
"genreWithCount_one": "{{count}} ژانر",
|
||||
@@ -431,12 +431,12 @@
|
||||
},
|
||||
"page": {
|
||||
"albumList": {
|
||||
"title": "$t(entity.album_other)",
|
||||
"title": "$t(entity.album, {\"count\": 2})",
|
||||
"artistAlbums": "آلبومهای {{artist}}",
|
||||
"genreAlbums": "\"{{genre}}\" $t(entity.album_other)"
|
||||
"genreAlbums": "\"{{genre}}\" $t(entity.album, {\"count\": 2})"
|
||||
},
|
||||
"appMenu": {
|
||||
"settings": "$t(common.setting_other)",
|
||||
"settings": "$t(common.setting, {\"count\": 2})",
|
||||
"selectServer": "گزینش سرویسدهنده",
|
||||
"expandSidebar": "گسترش نوار کناری",
|
||||
"collapseSidebar": "فروکش نوار کناری",
|
||||
@@ -451,11 +451,11 @@
|
||||
"appearsOn": "مشاهده میشود در",
|
||||
"about": "دربارهی {{artist}}",
|
||||
"recentReleases": "عرضههای اخیر",
|
||||
"viewAllTracks": "نمایش همهی $t(entity.track_other)",
|
||||
"viewAllTracks": "نمایش همهی $t(entity.track, {\"count\": 2})",
|
||||
"topSongsFrom": "قطعههای برتر از {{title}}",
|
||||
"viewAll": "نمایش همه",
|
||||
"viewDiscography": "نمایش کاتالوگ",
|
||||
"relatedArtists": "$t(entity.artist_other) مربوطه",
|
||||
"relatedArtists": "$t(entity.artist, {\"count\": 2}) مربوطه",
|
||||
"topSongs": "قطعههای برتر"
|
||||
},
|
||||
"contextMenu": {
|
||||
@@ -523,21 +523,21 @@
|
||||
"playbackTab": "پخش"
|
||||
},
|
||||
"sidebar": {
|
||||
"genres": "$t(entity.genre_other)",
|
||||
"playlists": "$t(entity.playlist_other)",
|
||||
"genres": "$t(entity.genre, {\"count\": 2})",
|
||||
"playlists": "$t(entity.playlist, {\"count\": 2})",
|
||||
"search": "$t(common.search)",
|
||||
"albumArtists": "$t(entity.albumArtist_other)",
|
||||
"albums": "$t(entity.album_other)",
|
||||
"folders": "$t(entity.folder_other)",
|
||||
"artists": "$t(entity.artist_other)",
|
||||
"albumArtists": "$t(entity.albumArtist, {\"count\": 2})",
|
||||
"albums": "$t(entity.album, {\"count\": 2})",
|
||||
"folders": "$t(entity.folder, {\"count\": 2})",
|
||||
"artists": "$t(entity.artist, {\"count\": 2})",
|
||||
"home": "$t(common.home)",
|
||||
"nowPlaying": "پخش کنونی",
|
||||
"tracks": "$t(entity.track_other)",
|
||||
"settings": "$t(common.setting_other)",
|
||||
"shared": "$t(entity.playlist_other) اشتراکگذاری شده"
|
||||
"tracks": "$t(entity.track, {\"count\": 2})",
|
||||
"settings": "$t(common.setting, {\"count\": 2})",
|
||||
"shared": "$t(entity.playlist, {\"count\": 2}) اشتراکگذاری شده"
|
||||
},
|
||||
"albumDetail": {
|
||||
"moreFromArtist": "موارد بیشتر از این $t(entity.artist_one)",
|
||||
"moreFromArtist": "موارد بیشتر از این $t(entity.artist, {\"count\": 1})",
|
||||
"moreFromGeneric": "موارد بیشتر از {{item}}",
|
||||
"released": "عرضه شده"
|
||||
},
|
||||
@@ -550,9 +550,9 @@
|
||||
"editServerDetailsTooltip": "ویرایش ریزگان سرویسدهنده"
|
||||
},
|
||||
"genreList": {
|
||||
"showAlbums": "نمایش $t(entity.genre_one) $t(entity.album_other)",
|
||||
"title": "$t(entity.genre_other)",
|
||||
"showTracks": "نمایش $t(entity.genre_one) $t(entity.track_other)"
|
||||
"showAlbums": "نمایش $t(entity.genre, {\"count\": 1}) $t(entity.album, {\"count\": 2})",
|
||||
"title": "$t(entity.genre, {\"count\": 2})",
|
||||
"showTracks": "نمایش $t(entity.genre, {\"count\": 1}) $t(entity.track, {\"count\": 2})"
|
||||
},
|
||||
"globalSearch": {
|
||||
"commands": {
|
||||
@@ -563,15 +563,15 @@
|
||||
"title": "فرمانها"
|
||||
},
|
||||
"playlistList": {
|
||||
"title": "$t(entity.playlist_other)"
|
||||
"title": "$t(entity.playlist, {\"count\": 2})"
|
||||
},
|
||||
"trackList": {
|
||||
"title": "$t(entity.track_other)",
|
||||
"title": "$t(entity.track, {\"count\": 2})",
|
||||
"artistTracks": "قطعههای {{artist}}",
|
||||
"genreTracks": "$t(entity.track_other) \"{{genre}}\""
|
||||
"genreTracks": "$t(entity.track, {\"count\": 2}) \"{{genre}}\""
|
||||
},
|
||||
"albumArtistList": {
|
||||
"title": "$t(entity.albumArtist_other)"
|
||||
"title": "$t(entity.albumArtist, {\"count\": 2})"
|
||||
},
|
||||
"itemDetail": {
|
||||
"copyPath": "کپی کردن مسیر در کلیپبورد",
|
||||
@@ -584,11 +584,11 @@
|
||||
"size": "$t(common.size)",
|
||||
"lastPlayed": "آخرین بار پخش شده",
|
||||
"discNumber": "دیسک",
|
||||
"songCount": "$t(entity.track_other)",
|
||||
"songCount": "$t(entity.track, {\"count\": 2})",
|
||||
"title": "عنوان",
|
||||
"trackNumber": "قطعه",
|
||||
"favorite": "مورد علاقه",
|
||||
"genre": "$t(entity.genre_one)",
|
||||
"genre": "$t(entity.genre, {\"count\": 1})",
|
||||
"comment": "دیدگاه",
|
||||
"playCount": "تعداد پخش",
|
||||
"rating": "امتیاز",
|
||||
|
||||
@@ -1,31 +1,34 @@
|
||||
{
|
||||
"action": {
|
||||
"createPlaylist": "$t(entity.playlist_one) 생성",
|
||||
"addToFavorites": "$t(entity.favorite_other)에 추가",
|
||||
"addToPlaylist": "$t(entity.playlist_one)에 추가",
|
||||
"createPlaylist": "$t(entity.playlist, {\"count\": 1}) 생성",
|
||||
"addToFavorites": "$t(entity.favorite, {\"count\": 2})에 추가",
|
||||
"addToPlaylist": "$t(entity.playlist, {\"count\": 1})에 추가",
|
||||
"clearQueue": "대기열 지우기",
|
||||
"deletePlaylist": "$t(entity.playlist_one) 삭제",
|
||||
"deletePlaylist": "$t(entity.playlist, {\"count\": 1}) 삭제",
|
||||
"deselectAll": "모두 선택 해제",
|
||||
"editPlaylist": "$t(entity.playlist_one) 편집",
|
||||
"editPlaylist": "$t(entity.playlist, {\"count\": 1}) 편집",
|
||||
"goToPage": "페이지 이동",
|
||||
"moveToBottom": "맨 아래로 이동",
|
||||
"moveToTop": "맨 위로 이동",
|
||||
"moveToNext": "다음으로 이동",
|
||||
"removeFromQueue": "대기열에서 제거",
|
||||
"refresh": "$t(common.refresh)",
|
||||
"removeFromFavorites": "$t(entity.favorite_other)에서 제거",
|
||||
"removeFromPlaylist": "$t(entity.playlist_one)에서 제거",
|
||||
"removeFromFavorites": "$t(entity.favorite, {\"count\": 2})에서 제거",
|
||||
"removeFromPlaylist": "$t(entity.playlist, {\"count\": 1})에서 제거",
|
||||
"openIn": {
|
||||
"musicbrainz": "MusicBrainz에서 보기",
|
||||
"lastfm": "Last.fm에서 보기"
|
||||
"lastfm": "Last.fm에서 보기",
|
||||
"listenbrainz": "ListenBrainz에서 열기",
|
||||
"qobuz": "Qobuz에서 열기",
|
||||
"spotify": "Spotify에서 열기"
|
||||
},
|
||||
"viewPlaylists": "$t(entity.playlist_other) 보기",
|
||||
"viewPlaylists": "$t(entity.playlist, {\"count\": 2}) 보기",
|
||||
"setRating": "평점 지정",
|
||||
"toggleSmartPlaylistEditor": "$t(entity.smartPlaylist) 편집기 펼치기",
|
||||
"addOrRemoveFromSelection": "선택항목에서 추가 또는 제거",
|
||||
"selectRangeOfItems": "항목의 범위 선택",
|
||||
"createRadioStation": "$t(entity.radioStation_one) 생성",
|
||||
"deleteRadioStation": "$t(entity.radioStation_one) 삭제",
|
||||
"createRadioStation": "$t(entity.radioStation, {\"count\": 1}) 생성",
|
||||
"deleteRadioStation": "$t(entity.radioStation, {\"count\": 1}) 삭제",
|
||||
"selectAll": "전부 선택",
|
||||
"downloadStarted": "{{count}}개 항목 다운로드 시작했습니다",
|
||||
"moveUp": "위로 옮기기",
|
||||
@@ -37,7 +40,10 @@
|
||||
"shuffleAll": "모두 섞기",
|
||||
"shuffleSelected": "선택항목 섞기",
|
||||
"viewMore": "더 보기",
|
||||
"openApplicationDirectory": "앱 디렉토리 열기"
|
||||
"openApplicationDirectory": "앱 디렉토리 열기",
|
||||
"goToCurrent": "현재 항목으로 이동",
|
||||
"collapseAllFolders": "모든 폴더 접기",
|
||||
"expandAllFolders": "모든 폴더 확장"
|
||||
},
|
||||
"common": {
|
||||
"translation": "번역",
|
||||
@@ -59,7 +65,7 @@
|
||||
"backward": "뒤로",
|
||||
"saveAs": "(으)로 저장하기",
|
||||
"search": "검색",
|
||||
"setting": "설정",
|
||||
"setting_other": "설정",
|
||||
"share": "공유",
|
||||
"size": "크기",
|
||||
"sortOrder": "순서",
|
||||
@@ -74,7 +80,7 @@
|
||||
"comingSoon": "조만간…",
|
||||
"configure": "설정",
|
||||
"confirm": "확인",
|
||||
"currentSong": "현재 $t(entity.track_one)",
|
||||
"currentSong": "현재 $t(entity.track, {\"count\": 1})",
|
||||
"decrease": "감소",
|
||||
"delete": "삭제",
|
||||
"descending": "내림차순",
|
||||
@@ -96,7 +102,7 @@
|
||||
"path": "경로",
|
||||
"playerMustBePaused": "플레이어가 일시정지 되어야 합니다",
|
||||
"preview": "미리보기",
|
||||
"previousSong": "이전곡 $t(entity.track_one)",
|
||||
"previousSong": "이전곡 $t(entity.track, {\"count\": 1})",
|
||||
"quit": "종료",
|
||||
"refresh": "새로고침",
|
||||
"reload": "리로드",
|
||||
@@ -106,7 +112,7 @@
|
||||
"ascending": "오름차순",
|
||||
"areYouSure": "확실한가요?",
|
||||
"bitrate": "비트 전송률",
|
||||
"bpm": "bpm",
|
||||
"bpm": "BPM",
|
||||
"biography": "바이오그래피",
|
||||
"center": "중앙",
|
||||
"channel_other": "채널",
|
||||
@@ -127,7 +133,7 @@
|
||||
"filters": "필터",
|
||||
"noResultsFromQuery": "쿼리 결과가 없습니다",
|
||||
"note": "노트",
|
||||
"ok": "OK",
|
||||
"ok": "Ok",
|
||||
"owner": "소유자",
|
||||
"sampleRate": "샘플레이트",
|
||||
"tags": "태그",
|
||||
@@ -149,7 +155,18 @@
|
||||
"sort": "정렬",
|
||||
"gridRows": "행 그리드",
|
||||
"tableColumns": "테이블 열",
|
||||
"itemsMore": "{{count}}개 더"
|
||||
"itemsMore": "{{count}}개 더",
|
||||
"back": "뒤로",
|
||||
"example": "예",
|
||||
"openFolder": "폴더 열기",
|
||||
"filter_single": "미혼",
|
||||
"filter_multiple": "다중",
|
||||
"grouping": "그룹화",
|
||||
"mood": "기분",
|
||||
"numberOfResults": "결과 {{numberOfResults}}개",
|
||||
"retry": "다시 해 보다",
|
||||
"rename": "이름 변경",
|
||||
"newVersionAvailable": "새로운 버전이 나왔습니다"
|
||||
},
|
||||
"entity": {
|
||||
"albumWithCount_other": "{{count}} 앨범",
|
||||
@@ -168,7 +185,7 @@
|
||||
"song_other": "곡",
|
||||
"play_other": "{{count}} 재생",
|
||||
"playlistWithCount_other": "{{count}} 재생목록",
|
||||
"smartPlaylist": "스마트 $t(entity.playlist_one)",
|
||||
"smartPlaylist": "스마트 $t(entity.playlist, {\"count\": 1})",
|
||||
"track_other": "트랙",
|
||||
"radioStation_other": "라디오 방송국",
|
||||
"radioStationWithCount_other": "{{count}}개 라디오 방송국"
|
||||
@@ -197,7 +214,15 @@
|
||||
"localFontAccessDenied": "로컬 글꼴에 접근 거부되었습니다",
|
||||
"apiRouteError": "요청 보내기 실패",
|
||||
"badValue": "옵션이 없습니다 {{value}}. 이 값은 더이상 존재하지 않습니다",
|
||||
"notificationDenied": "알림에 대한 권한이 거부되었습니다. 이 설정은 변경되지 않습니다"
|
||||
"notificationDenied": "알림에 대한 권한이 거부되었습니다. 이 설정은 변경되지 않습니다",
|
||||
"invalidJson": "유효하지 않은 JSON",
|
||||
"multipleServerSaveQueueError": "재생 대기열에 현재 서버에 속하지 않은 곡이 하나 이상 포함되어 있습니다. 이는 지원되지 않습니다",
|
||||
"noNetwork": "서버를 이용할 수 없음",
|
||||
"noNetworkDescription": "이 서버에 연결할 수 없습니다",
|
||||
"playbackPausedDueToError": "오류로 인해 재생이 일시 중지되었습니다",
|
||||
"saveQueueFailed": "큐 저장 실패",
|
||||
"serverLockSingleServer": "서버가 잠겨 있을 때는 서버를 하나만 허용합니다",
|
||||
"settingsSyncError": "렌더러와 메인 프로세스의 설정 간에 불일치가 발견되었습니다. 변경 사항을 적용하려면 애플리케이션을 다시 시작하십시오"
|
||||
},
|
||||
"filter": {
|
||||
"title": "곡명",
|
||||
@@ -214,22 +239,22 @@
|
||||
"dateAdded": "추가된 날짜",
|
||||
"lastPlayed": "마지막으로 재생한",
|
||||
"mostPlayed": "가장 많이 재생한",
|
||||
"album": "$t(entity.album_one)",
|
||||
"albumArtist": "$t(entity.albumArtist_one)",
|
||||
"artist": "$t(entity.artist_one)",
|
||||
"album": "$t(entity.album, {\"count\": 1})",
|
||||
"albumArtist": "$t(entity.albumArtist, {\"count\": 1})",
|
||||
"artist": "$t(entity.artist, {\"count\": 1})",
|
||||
"communityRating": "커뮤니티 평점",
|
||||
"criticRating": "비평가 평점",
|
||||
"disc": "디스크",
|
||||
"bitrate": "비트 전송률",
|
||||
"biography": "바이오그래피",
|
||||
"channels": "$t(common.channel_other)",
|
||||
"channels": "$t(common.channel, {\"count\": 2})",
|
||||
"duration": "길이",
|
||||
"bpm": "bpm",
|
||||
"albumCount": "$t(entity.album_other) 앨범수",
|
||||
"bpm": "BPM",
|
||||
"albumCount": "$t(entity.album, {\"count\": 2}) 앨범수",
|
||||
"comment": "코멘트",
|
||||
"favorited": "즐겨찾기",
|
||||
"fromYear": "시작 년도",
|
||||
"genre": "$t(entity.genre_one)",
|
||||
"genre": "$t(entity.genre, {\"count\": 1})",
|
||||
"id": "아이디",
|
||||
"isCompilation": "편집앨범 여부",
|
||||
"isFavorited": "즐겨찾기 여부",
|
||||
@@ -242,7 +267,10 @@
|
||||
"songCount": "곡 갯수",
|
||||
"toYear": "년도까지",
|
||||
"trackNumber": "트랙",
|
||||
"explicitStatus": "$t(common.explicitStatus)"
|
||||
"explicitStatus": "$t(common.explicitStatus)",
|
||||
"matchAnd": "그리고",
|
||||
"matchOr": "또는",
|
||||
"sortName": "이름 정렬"
|
||||
},
|
||||
"form": {
|
||||
"addServer": {
|
||||
@@ -251,37 +279,45 @@
|
||||
"input_name": "서버 이름",
|
||||
"input_password": "비밀번호",
|
||||
"input_savePassword": "비밀번호 저장하기",
|
||||
"input_url": "url",
|
||||
"input_url": "URL",
|
||||
"error_savePassword": "비밀번호를 저장하는 도중 오류가 발생했습니다",
|
||||
"ignoreCors": "CORS 무시 ($t(common.restartRequired))",
|
||||
"ignoreSsl": "SSL 무시 ($t(common.restartRequired))",
|
||||
"input_legacyAuthentication": "레거시 인증 사용",
|
||||
"input_username": "유저 이름",
|
||||
"input_preferInstantMix": "즉석 믹스 선호",
|
||||
"input_preferInstantMixDescription": "비슷한 곳을 찾기 위해 즉석 믹스를 사용합니다. 이 명령을 수정하기 위한 플러그인을 설치한 경우 유용합니다"
|
||||
"input_preferInstantMixDescription": "비슷한 곳을 찾기 위해 즉석 믹스를 사용합니다. 이 명령을 수정하기 위한 플러그인을 설치한 경우 유용합니다",
|
||||
"input_preferRemoteUrl": "공개 URL 선호",
|
||||
"input_remoteUrl": "공개 URL",
|
||||
"input_remoteUrlPlaceholder": "선택 사항: 외부 기능을 위한 공개 URL"
|
||||
},
|
||||
"addToPlaylist": {
|
||||
"input_skipDuplicates": "중복 건너뛰기",
|
||||
"title": "$t(entity.playlist_one) 에 추가",
|
||||
"input_playlists": "$t(entity.playlist_other)",
|
||||
"title": "$t(entity.playlist, {\"count\": 1}) 에 추가",
|
||||
"input_playlists": "$t(entity.playlist, {\"count\": 2})",
|
||||
"success": "$t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })에 $t(entity.trackWithCount, {\"count\": {{message}} })가 추가되었습니다",
|
||||
"create": "$t(entity.playlist_one) {{playlist}} 생성",
|
||||
"searchOrCreate": "$t(entity.playlist_other) 검색 또는 입력하여 새로 만들기"
|
||||
"create": "$t(entity.playlist, {\"count\": 1}) {{playlist}} 생성",
|
||||
"searchOrCreate": "$t(entity.playlist, {\"count\": 2}) 검색 또는 입력하여 새로 만들기",
|
||||
"noneAdded": "$t(entity.playlist, {\"count\": 1}) '{{playlist}}'에 트랙이 추가되지 않았습니다"
|
||||
},
|
||||
"lyricSearch": {
|
||||
"title": "가사 검색",
|
||||
"input_name": "$t(common.name)",
|
||||
"input_artist": "$t(entity.artist_one)"
|
||||
"input_artist": "$t(entity.artist, {\"count\": 1})"
|
||||
},
|
||||
"queryEditor": {
|
||||
"input_optionMatchAll": "모두 일치",
|
||||
"input_optionMatchAny": "무엇이든 일치",
|
||||
"title": "쿼리 편집기"
|
||||
"title": "쿼리 편집기",
|
||||
"addRuleGroup": "규칙 그룹 추가",
|
||||
"removeRuleGroup": "규칙 그룹 제거",
|
||||
"resetToDefault": "기본값으로 초기화",
|
||||
"clearFilters": "필터 초기화"
|
||||
},
|
||||
"editPlaylist": {
|
||||
"title": "$t(entity.playlist_one) 편집",
|
||||
"title": "$t(entity.playlist, {\"count\": 1}) 편집",
|
||||
"publicJellyfinNote": "Jellyfin은 재생목록 공개 여부를 노출하지 않습니다. 만약 공개되길 원한다면 다음을 선택하세요",
|
||||
"success": "$t(entity.playlist_one) 업데이트 되었습니다"
|
||||
"success": "$t(entity.playlist, {\"count\": 1}) 업데이트 되었습니다"
|
||||
},
|
||||
"shareItem": {
|
||||
"allowDownloading": "다운로드 허용",
|
||||
@@ -289,7 +325,9 @@
|
||||
"success": "클립보드에 공유 링크를 복사했습니다 (또는 열어보려면 클릭하세요)",
|
||||
"expireInvalid": "만료 날짜는 미래 날짜여야만 합니다",
|
||||
"createFailed": "공유 링크를 생성하는데 실패하였습니다 (혹시 공유하기 설정되어 있나요?)",
|
||||
"setExpiration": "만료 기간 설정하기"
|
||||
"setExpiration": "만료 기간 설정하기",
|
||||
"copyToClipboard": "클립보드로 복사: Ctrl+C, Enter",
|
||||
"successMustClick": "공유가 성공적으로 생성되었습니다. 여기를 클릭하여 여세요"
|
||||
},
|
||||
"updateServer": {
|
||||
"title": "서버 업데이트",
|
||||
@@ -298,20 +336,58 @@
|
||||
"createPlaylist": {
|
||||
"input_description": "$t(common.description)",
|
||||
"input_name": "$t(common.name)",
|
||||
"success": "$t(entity.playlist_one)를 생성했습니다",
|
||||
"success": "$t(entity.playlist, {\"count\": 1})를 생성했습니다",
|
||||
"input_owner": "$t(common.owner)",
|
||||
"input_public": "공개",
|
||||
"title": "$t(entity.playlist_one) 생성"
|
||||
"title": "$t(entity.playlist, {\"count\": 1}) 생성"
|
||||
},
|
||||
"deletePlaylist": {
|
||||
"input_confirm": "확인을 위해 $t(entity.playlist_one)의 이름을 적어주세요",
|
||||
"success": "$t(entity.playlist_one)가 삭제되었습니다",
|
||||
"title": "$t(entity.playlist_one) 삭제"
|
||||
"input_confirm": "확인을 위해 $t(entity.playlist, {\"count\": 1})의 이름을 적어주세요",
|
||||
"success": "$t(entity.playlist, {\"count\": 1})가 삭제되었습니다",
|
||||
"title": "$t(entity.playlist, {\"count\": 1}) 삭제"
|
||||
},
|
||||
"privateMode": {
|
||||
"enabled": "프라이빗 모드가 활성화되었습니다. 재생상태가 외부 서비스에 지금부터 노출되지 않습니다",
|
||||
"disabled": "프라이빗 모드가 비활성화되었습니다. 재생상태가 외부서비스에서 지금부터 표시됩니다",
|
||||
"title": "프라이빗 모드"
|
||||
},
|
||||
"largeFetchConfirmation": {
|
||||
"title": "대기열에 항목을 추가하세요",
|
||||
"description": "이 작업은 현재 필터링된 보기의 모든 항목을 추가합니다"
|
||||
},
|
||||
"createRadioStation": {
|
||||
"success": "라디오 방송국이 성공적으로 생성되었습니다",
|
||||
"title": "라디오 방송국 만들기",
|
||||
"input_homepageUrl": "홈페이지 URL",
|
||||
"input_name": "명의",
|
||||
"input_streamUrl": "스트림 URL"
|
||||
},
|
||||
"editRadioStation": {
|
||||
"success": "라디오 방송국이 성공적으로 업데이트되었습니다"
|
||||
},
|
||||
"lyricsExport": {
|
||||
"export": "가사 내보내기",
|
||||
"input_synced": "동기화된 가사 내보내기",
|
||||
"input_offset": "$t(setting.lyricOffset)"
|
||||
},
|
||||
"saveQueue": {
|
||||
"success": "재생 대기열을 서버에 저장했습니다"
|
||||
},
|
||||
"shuffleAll": {
|
||||
"title": "무작위 재생",
|
||||
"input_kind_albums": "앨범",
|
||||
"input_kind_songs": "노래들",
|
||||
"input_kind": "무작위 선택",
|
||||
"input_limit_albums": "앨범이 몇 장인가요?",
|
||||
"input_limit_songs": "몇 곡인가요?",
|
||||
"input_genre": "$t(entity.genre, {\"count\": 1})",
|
||||
"input_limit": "몇 곡인가요?",
|
||||
"input_minYear": "연도부터",
|
||||
"input_maxYear": "연도까지",
|
||||
"input_played": "재생 필터",
|
||||
"input_played_optionAll": "모든 트랙",
|
||||
"input_played_optionUnplayed": "재생하지 않은 트랙만",
|
||||
"input_played_optionPlayed": "재생된 트랙만"
|
||||
}
|
||||
},
|
||||
"page": {
|
||||
@@ -325,7 +401,13 @@
|
||||
"collapseSidebar": "사이드바 줄이기",
|
||||
"expandSidebar": "사이드바 확장",
|
||||
"privateModeOff": "프라이빗 모드 끄기",
|
||||
"privateModeOn": "프라이빗 모드 켜기"
|
||||
"privateModeOn": "프라이빗 모드 켜기",
|
||||
"commandPalette": "명령 팔레트 열기",
|
||||
"quit": "$t(common.quit)",
|
||||
"selectMusicFolder": "음악 폴더 선택",
|
||||
"noMusicFolder": "음악 폴더가 선택되지 않았습니다",
|
||||
"multipleMusicFolders": "{{count}}개의 음악 폴더가 선택되었습니다",
|
||||
"settings": "$t(common.setting, {\"count\": 2})"
|
||||
},
|
||||
"manageServers": {
|
||||
"title": "서버 설정하기",
|
||||
@@ -350,7 +432,9 @@
|
||||
"lyricGap": "가사 간격",
|
||||
"lyricSize": "가사 크기",
|
||||
"showLyricMatch": "가사 일치 표시",
|
||||
"showLyricProvider": "가사 제공자 표시"
|
||||
"showLyricProvider": "가사 제공자 표시",
|
||||
"lyricOpacityNonActive": "비활성 가사 불투명도",
|
||||
"lyricScaleNonActive": "비활성 서정적 척도"
|
||||
},
|
||||
"lyrics": "가사",
|
||||
"related": "관련",
|
||||
@@ -362,35 +446,64 @@
|
||||
"download": "다운로드",
|
||||
"numberSelected": "{{count}}개 선택됨",
|
||||
"shareItem": "공유",
|
||||
"goToAlbum": "$t(entity.album_one)으로 이동",
|
||||
"goToAlbumArtist": "$t(entity.albumArtist_one)으로 이동",
|
||||
"showDetails": "추가정보"
|
||||
"goToAlbum": "$t(entity.album, {\"count\": 1})으로 이동",
|
||||
"goToAlbumArtist": "$t(entity.albumArtist, {\"count\": 1})으로 이동",
|
||||
"showDetails": "추가정보",
|
||||
"addFavorite": "$t(action.addToFavorites)",
|
||||
"addLast": "$t(player.addLast)",
|
||||
"addNext": "$t(player.addNext)",
|
||||
"addToFavorites": "$t(action.addToFavorites)",
|
||||
"addToPlaylist": "$t(action.addToPlaylist)",
|
||||
"createPlaylist": "$t(action.createPlaylist)",
|
||||
"deletePlaylist": "$t(action.deletePlaylist)",
|
||||
"deselectAll": "$t(action.deselectAll)",
|
||||
"moveItems": "$t(action.moveItems)",
|
||||
"moveToNext": "$t(action.moveToNext)",
|
||||
"moveToBottom": "$t(action.moveToBottom)",
|
||||
"moveToTop": "$t(action.moveToTop)",
|
||||
"play": "$t(player.play)",
|
||||
"playSimilarSongs": "$t(player.playSimilarSongs)",
|
||||
"removeFromFavorites": "$t(action.removeFromFavorites)",
|
||||
"removeFromPlaylist": "$t(action.removeFromPlaylist)",
|
||||
"removeFromQueue": "$t(action.removeFromQueue)",
|
||||
"setRating": "$t(action.setRating)",
|
||||
"playShuffled": "$t(player.shuffle)",
|
||||
"goTo": "이동"
|
||||
},
|
||||
"albumArtistDetail": {
|
||||
"about": "{{artist}}에 대해",
|
||||
"viewDiscography": "디스코그래피 보기",
|
||||
"appearsOn": "참여 앨범",
|
||||
"recentReleases": "최근 앨범",
|
||||
"relatedArtists": "연관 $t(entity.artist_other)",
|
||||
"relatedArtists": "연관 $t(entity.artist, {\"count\": 2})",
|
||||
"topSongs": "최고의 곡들",
|
||||
"topSongsFrom": "{{title}}이 포함된 최고의 곡들",
|
||||
"viewAll": "전부 보이기",
|
||||
"viewAllTracks": "$t(entity.track_other) 전부 보이기"
|
||||
"viewAllTracks": "$t(entity.track, {\"count\": 2}) 전부 보이기",
|
||||
"favoriteSongs": "좋아하는 노래들",
|
||||
"groupingTypeAll": "모든 릴리스 유형",
|
||||
"groupingTypePrimary": "주요 릴리스 유형",
|
||||
"topSongsCommunity": "공동체",
|
||||
"topSongsPersonal": "개인의",
|
||||
"favoriteSongsFrom": "{{title}}에서 가장 좋아하는 곡들"
|
||||
},
|
||||
"albumArtistList": {
|
||||
"title": "$t(entity.albumArtist_other)"
|
||||
"title": "$t(entity.albumArtist, {\"count\": 2})"
|
||||
},
|
||||
"albumDetail": {
|
||||
"moreFromArtist": "$t(entity.artist_one) 더 보기",
|
||||
"moreFromArtist": "$t(entity.artist, {\"count\": 1}) 더 보기",
|
||||
"moreFromGeneric": "{{item}} 더 보기",
|
||||
"released": "발매"
|
||||
},
|
||||
"albumList": {
|
||||
"artistAlbums": "{{artist}}의 앨범"
|
||||
"artistAlbums": "{{artist}}의 앨범",
|
||||
"genreAlbums": "\"{{genre}}\" $t(entity.album, {\"count\": 2})",
|
||||
"title": "$t(entity.album, {\"count\": 2})"
|
||||
},
|
||||
"genreList": {
|
||||
"showAlbums": "$t(entity.genre_one) $t(entity.album_other) 표시",
|
||||
"showTracks": "$t(entity.genre_one) $t(entity.track_other) 표시"
|
||||
"showAlbums": "$t(entity.genre, {\"count\": 1}) $t(entity.album, {\"count\": 2}) 표시",
|
||||
"showTracks": "$t(entity.genre, {\"count\": 1}) $t(entity.track, {\"count\": 2}) 표시",
|
||||
"title": "$t(entity.genre, {\"count\": 2})"
|
||||
},
|
||||
"globalSearch": {
|
||||
"commands": {
|
||||
@@ -405,7 +518,9 @@
|
||||
"mostPlayed": "자주 플레이된 곡",
|
||||
"newlyAdded": "최근에 추가된 곡",
|
||||
"recentlyPlayed": "최근에 플레이된 곡",
|
||||
"recentlyReleased": "최근에 발매된 곡"
|
||||
"recentlyReleased": "최근에 발매된 곡",
|
||||
"genres": "$t(entity.genre, {\"count\": 2})",
|
||||
"title": "$t(common.home)"
|
||||
},
|
||||
"itemDetail": {
|
||||
"copyPath": "클립보드에 경로를 복사",
|
||||
@@ -420,15 +535,71 @@
|
||||
"generalTab": "일반",
|
||||
"hotkeysTab": "단축키",
|
||||
"playbackTab": "재생",
|
||||
"windowTab": "윈도우"
|
||||
"windowTab": "윈도우",
|
||||
"analytics": "해석학",
|
||||
"updates": "업데이트",
|
||||
"cache": "은닉처",
|
||||
"application": "애플리케이션",
|
||||
"queryBuilder": "쿼리 빌더",
|
||||
"theme": "테마",
|
||||
"controls": "통제 수단",
|
||||
"sidebar": "사이드바",
|
||||
"exportImport": "가져오기/내보내기",
|
||||
"audio": "오디오",
|
||||
"lyrics": "가사",
|
||||
"lyricsDisplay": "가사 표시",
|
||||
"transcoding": "트랜스코딩",
|
||||
"discord": "Discord",
|
||||
"logger": "로거",
|
||||
"playerFilters": "선수 필터"
|
||||
},
|
||||
"sidebar": {
|
||||
"myLibrary": "내 라이브러리",
|
||||
"nowPlaying": "재생중",
|
||||
"shared": "공유 $t(entity.playlist_other)"
|
||||
"shared": "공유 $t(entity.playlist, {\"count\": 2})",
|
||||
"albumArtists": "$t(entity.albumArtist, {\"count\": 2})",
|
||||
"albums": "$t(entity.album, {\"count\": 2})",
|
||||
"collections": "컬렉션",
|
||||
"artists": "$t(entity.artist, {\"count\": 2})",
|
||||
"favorites": "$t(entity.favorite, {\"count\": 2})",
|
||||
"folders": "$t(entity.folder, {\"count\": 2})",
|
||||
"genres": "$t(entity.genre, {\"count\": 2})",
|
||||
"home": "$t(common.home)",
|
||||
"radio": "$t(entity.radioStation, {\"count\": 2})",
|
||||
"playlists": "$t(entity.playlist, {\"count\": 2})",
|
||||
"search": "$t(common.search)",
|
||||
"settings": "$t(common.setting, {\"count\": 2})",
|
||||
"tracks": "$t(entity.track, {\"count\": 2})"
|
||||
},
|
||||
"trackList": {
|
||||
"artistTracks": "{{artist}}의 음악"
|
||||
"artistTracks": "{{artist}}의 음악",
|
||||
"genreTracks": "\"{{genre}}\" $t(entity.track, {\"count\": 2})",
|
||||
"title": "$t(entity.track, {\"count\": 2})"
|
||||
},
|
||||
"radioList": {
|
||||
"title": "라디오 방송국"
|
||||
},
|
||||
"releasenotes": {
|
||||
"commitsSinceStable": "{{stable}} 이후 커밋",
|
||||
"noNewCommits": "이 범위에 새로운 커밋이 없습니다",
|
||||
"noStableReleaseToCompare": "비교할 수 있는 안정화 릴리스가 없습니다"
|
||||
},
|
||||
"favorites": {
|
||||
"title": "$t(entity.favorite, {\"count\": 2})"
|
||||
},
|
||||
"windowBar": {
|
||||
"paused": "(일시 정지됨) ",
|
||||
"privateMode": "(비공개 모드)"
|
||||
},
|
||||
"folderList": {
|
||||
"title": "$t(entity.folder, {\"count\": 2})"
|
||||
},
|
||||
"playlistList": {
|
||||
"title": "$t(entity.playlist, {\"count\": 2})"
|
||||
},
|
||||
"collections": {
|
||||
"overrideExisting": "기존 항목 덮어쓰기",
|
||||
"saveAsCollection": "컬렉션으로 저장"
|
||||
}
|
||||
},
|
||||
"table": {
|
||||
@@ -458,8 +629,8 @@
|
||||
"playSimilarSongs": "비슷한 곡 재생",
|
||||
"previous": "이전",
|
||||
"queue_clear": "재생 대기열 지우기",
|
||||
"queue_moveToBottom": "선택한 곡을 가장 위로 이동",
|
||||
"queue_moveToTop": "선택한 곡을 가장 아래로 이동",
|
||||
"queue_moveToBottom": "선택한 곡을 가장 아래로 이동",
|
||||
"queue_moveToTop": "선택한 곡을 가장 위로 이동",
|
||||
"queue_remove": "선택한 항목 삭제",
|
||||
"repeat": "반복",
|
||||
"repeat_all": "모두 반복하기",
|
||||
@@ -473,7 +644,25 @@
|
||||
"toggleFullscreenPlayer": "전체화면으로 전환",
|
||||
"unfavorite": "즐겨찾기 취소",
|
||||
"pause": "멈춤",
|
||||
"viewQueue": "대기열 보기"
|
||||
"viewQueue": "대기열 보기",
|
||||
"addLastShuffled": "마지막 (섞인)",
|
||||
"addNextShuffled": "다음 (무작위)",
|
||||
"albumRadio": "앨범 라디오",
|
||||
"artistRadio": "아티스트 라디오",
|
||||
"holdToShuffle": "길게 눌러 섞기",
|
||||
"lyrics": "가사",
|
||||
"restoreQueueFromServer": "서버에서 큐 복원",
|
||||
"saveQueueToServer": "대기열을 서버에 저장",
|
||||
"trackRadio": "라디오 추적",
|
||||
"sleepTimer": "취침 타이머",
|
||||
"sleepTimer_endOfSong": "현재 곡 종료",
|
||||
"sleepTimer_endOfAlbum": "현재 앨범의 끝",
|
||||
"sleepTimer_minutes": "{{count}}분",
|
||||
"sleepTimer_hours": "{{count}}시간",
|
||||
"sleepTimer_off": "끄다",
|
||||
"sleepTimer_timeRemaining": "{{time}} 남음",
|
||||
"sleepTimer_setCustom": "타이머 설정",
|
||||
"sleepTimer_cancel": "타이머 취소"
|
||||
},
|
||||
"setting": {
|
||||
"accentColor_description": "앱의 강조색상 설정",
|
||||
@@ -482,7 +671,7 @@
|
||||
"albumBackground": "앨범 배경이미지",
|
||||
"albumBackgroundBlur_description": "앨범 배경이미지의 흐려짐 정도 조정",
|
||||
"albumBackgroundBlur": "앨범배경이미지 흐려짐 크기",
|
||||
"applicationHotkeys_description": "앱의 단축키 설정. 앱 전체에 적용되는 단축키를 설정하기 위해서는 체크박스에 체크하세요(PC만 가능)",
|
||||
"applicationHotkeys_description": "애플리케이션 단축키를 설정합니다. 체크박스를 전환하여 전역 단축키로 설정하세요(데스크톱 전용)",
|
||||
"applicationHotkeys": "앱 단축키",
|
||||
"artistBackground": "아티스트 배경이미지",
|
||||
"artistBackground_description": "아티스트 페이지에 아티스트가 포함된 배경이미지를 추가",
|
||||
@@ -492,7 +681,7 @@
|
||||
"artistConfiguration_description": "앨범아티스트 페이지에 표시할 정보 및 순서 설정",
|
||||
"audioDevice_description": "음악재생에 사용할 장치 선택(웹플레이어만 가능)",
|
||||
"audioDevice": "오디오 장치",
|
||||
"audioExclusiveMode_description": "단독재생모드 켜기. 이 모드에서는 일반적으로 시스템의 재생장치가 고정되며 MPV로만 오디오가 재생됩니다",
|
||||
"audioExclusiveMode_description": "독점 출력 모드를 활성화합니다. 이 모드에서는 일반적으로 시스템의 오디오 출력이 차단되며, 오직 mpv만이 오디오를 출력할 수 있습니다. 이 모드가 활성화된 동안에는 비주얼라이저의 시스템 오디오 캡처 기능이 작동하지 않습니다",
|
||||
"audioExclusiveMode": "오디오 단독재생모드",
|
||||
"audioPlayer_description": "재생을 위한 오디오 플레이어 선택",
|
||||
"audioPlayer": "오디오 플레이어",
|
||||
@@ -505,7 +694,8 @@
|
||||
"broadcast": "방송",
|
||||
"ep": "ep앨범",
|
||||
"other": "기타",
|
||||
"single": "싱글"
|
||||
"single": "싱글",
|
||||
"album": "$t(entity.album, {\"count\": 1})"
|
||||
},
|
||||
"secondary": {
|
||||
"audiobook": "오디오북",
|
||||
@@ -521,5 +711,35 @@
|
||||
"soundtrack": "사운드트랙",
|
||||
"spokenWord": "보컬사운드"
|
||||
}
|
||||
},
|
||||
"datetime": {
|
||||
"minuteShort": "분",
|
||||
"secondShort": "초",
|
||||
"hourShort": "시간",
|
||||
"dayShort": "일"
|
||||
},
|
||||
"filterOperator": {
|
||||
"after": "~ 뒤에 있나요",
|
||||
"afterDate": "(날짜) 이후입니까",
|
||||
"before": "~보다 앞서 있다",
|
||||
"beforeDate": "(날짜) 이전인가요",
|
||||
"contains": "포함",
|
||||
"endsWith": "~로 끝남",
|
||||
"inPlaylist": "~ 안에 있다",
|
||||
"inTheLast": "마지막에 있습니다",
|
||||
"inTheRange": "범위 내에 있습니다",
|
||||
"inTheRangeDate": "범위 내에 있음 (날짜)",
|
||||
"is": "~이다",
|
||||
"isNot": "~이 아닙니까",
|
||||
"isGreaterThan": "~보다 크다",
|
||||
"isLessThan": "~보다 작다",
|
||||
"matchesRegex": "정규식과 일치",
|
||||
"notContains": "함유하지 않음",
|
||||
"notInPlaylist": "~ 안에 있지 않다",
|
||||
"notInTheLast": "마지막에 있지 않다",
|
||||
"startsWith": "~로 시작함"
|
||||
},
|
||||
"queryBuilder": {
|
||||
"customTags": "사용자 정의 태그"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
{
|
||||
"common": {
|
||||
"confirm": "confirmă",
|
||||
"create": "creează",
|
||||
"biography": "biografie",
|
||||
"areYouSure": "ești sigur?",
|
||||
"no": "nu",
|
||||
"name": "nume",
|
||||
"ok": "ok",
|
||||
"note": "notă",
|
||||
"yes": "da",
|
||||
"explicit": "explicit",
|
||||
"year": "an",
|
||||
"menu": "meniu"
|
||||
"confirm": "Confirmă",
|
||||
"create": "Creează",
|
||||
"biography": "Biografie",
|
||||
"areYouSure": "Ești sigur?",
|
||||
"no": "Nu",
|
||||
"name": "Nume",
|
||||
"ok": "Ok",
|
||||
"note": "Notă",
|
||||
"yes": "Da",
|
||||
"explicit": "Explicit",
|
||||
"year": "An",
|
||||
"menu": "Meniu"
|
||||
},
|
||||
"filter": {
|
||||
"biography": "biografie"
|
||||
"biography": "Biografie"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,322 +1,323 @@
|
||||
{
|
||||
"action": {
|
||||
"editPlaylist": "redigera $t(entity.playlist_one)",
|
||||
"goToPage": "gå till sida",
|
||||
"moveToTop": "flytta till toppen",
|
||||
"clearQueue": "rensa kö",
|
||||
"addToFavorites": "lägg till $t(entity.favorite_other)",
|
||||
"addToPlaylist": "lägg till $t(entity.playlist_one)",
|
||||
"createPlaylist": "skapa $t(entity.playlist_one)",
|
||||
"removeFromPlaylist": "ta bort från $t(entity.playlist_one)",
|
||||
"viewPlaylists": "visa $t(entity.playlist_other)",
|
||||
"editPlaylist": "Redigera $t(entity.playlist, {\"count\": 1})",
|
||||
"goToPage": "Gå till sida",
|
||||
"moveToTop": "Flytta till toppen",
|
||||
"clearQueue": "Rensa kö",
|
||||
"addToFavorites": "Lägg till $t(entity.favorite, {\"count\": 2})",
|
||||
"addToPlaylist": "Lägg till $t(entity.playlist, {\"count\": 1})",
|
||||
"createPlaylist": "Skapa $t(entity.playlist, {\"count\": 1})",
|
||||
"removeFromPlaylist": "Ta bort från $t(entity.playlist, {\"count\": 1})",
|
||||
"viewPlaylists": "Visa $t(entity.playlist, {\"count\": 2})",
|
||||
"refresh": "$t(common.refresh)",
|
||||
"deletePlaylist": "ta bort $t(entity.playlist_one)",
|
||||
"removeFromQueue": "ta bort från kö",
|
||||
"deselectAll": "avmarkera alla",
|
||||
"moveToBottom": "flytta till botten",
|
||||
"setRating": "sätt betyg",
|
||||
"toggleSmartPlaylistEditor": "växla $t(entity.smartPlaylist) redigerare",
|
||||
"removeFromFavorites": "ta bort från $t(entity.favorite_other)",
|
||||
"downloadStarted": "startade nedladdning av {{count}} objekt",
|
||||
"moveToNext": "flytta till nästa",
|
||||
"moveUp": "flytta upp",
|
||||
"moveDown": "flytta ner",
|
||||
"holdToMoveToTop": "håll för att flytta till toppen",
|
||||
"holdToMoveToBottom": "håll för att flytta till botten",
|
||||
"moveItems": "flytta objekt",
|
||||
"shuffle": "slumpa",
|
||||
"shuffleAll": "slumpa alla",
|
||||
"shuffleSelected": "slumpa valda",
|
||||
"viewMore": "visa mer",
|
||||
"deletePlaylist": "Ta bort $t(entity.playlist, {\"count\": 1})",
|
||||
"removeFromQueue": "Ta bort från kö",
|
||||
"deselectAll": "Avmarkera alla",
|
||||
"moveToBottom": "Flytta till botten",
|
||||
"setRating": "Sätt betyg",
|
||||
"toggleSmartPlaylistEditor": "Växla $t(entity.smartPlaylist) redigerare",
|
||||
"removeFromFavorites": "Ta bort från $t(entity.favorite, {\"count\": 2})",
|
||||
"downloadStarted": "Startade nedladdning av {{count}} objekt",
|
||||
"moveToNext": "Flytta till nästa",
|
||||
"moveUp": "Flytta upp",
|
||||
"moveDown": "Flytta ner",
|
||||
"holdToMoveToTop": "Håll för att flytta till toppen",
|
||||
"holdToMoveToBottom": "Håll för att flytta till botten",
|
||||
"moveItems": "Flytta objekt",
|
||||
"shuffle": "Slumpa",
|
||||
"shuffleAll": "Slumpa alla",
|
||||
"shuffleSelected": "Slumpa valda",
|
||||
"viewMore": "Visa mer",
|
||||
"openIn": {
|
||||
"lastfm": "Öppna i Last.fm",
|
||||
"musicbrainz": "Öppna i MusicBrainz"
|
||||
},
|
||||
"createRadioStation": "skapa $t(entity.radioStation_one)",
|
||||
"deleteRadioStation": "ta bort $t(entity.radioStation_one)",
|
||||
"addOrRemoveFromSelection": "lägg till eller ta bort från markerade",
|
||||
"selectRangeOfItems": "välj en mängd objekt",
|
||||
"selectAll": "markera alla",
|
||||
"openApplicationDirectory": "öppna applikationskatalog"
|
||||
"createRadioStation": "Skapa $t(entity.radioStation, {\"count\": 1})",
|
||||
"deleteRadioStation": "Ta bort $t(entity.radioStation, {\"count\": 1})",
|
||||
"addOrRemoveFromSelection": "Lägg till eller ta bort från markerade",
|
||||
"selectRangeOfItems": "Välj en mängd objekt",
|
||||
"selectAll": "Markera alla",
|
||||
"openApplicationDirectory": "Öppna applikationskatalog"
|
||||
},
|
||||
"common": {
|
||||
"backward": "bakåt",
|
||||
"increase": "öka",
|
||||
"rating": "betyg",
|
||||
"bpm": "bpm",
|
||||
"refresh": "laddaom",
|
||||
"unknown": "okänd",
|
||||
"areYouSure": "är du säker?",
|
||||
"edit": "redigera",
|
||||
"favorite": "favorit",
|
||||
"left": "vänster",
|
||||
"save": "spara",
|
||||
"right": "höger",
|
||||
"currentSong": "aktuell $t(entity.track_one)",
|
||||
"collapse": "kollaps",
|
||||
"trackNumber": "spår",
|
||||
"descending": "fallande",
|
||||
"add": "lägg till",
|
||||
"gap": "avstånd",
|
||||
"ascending": "stigande",
|
||||
"dismiss": "avskeda",
|
||||
"year": "år",
|
||||
"manage": "hantera",
|
||||
"limit": "gräns",
|
||||
"minimize": "minimera",
|
||||
"modified": "modifierad",
|
||||
"duration": "längd",
|
||||
"name": "namn",
|
||||
"maximize": "maximera",
|
||||
"decrease": "minska",
|
||||
"ok": "ok",
|
||||
"description": "beskrivning",
|
||||
"configure": "konfigurera",
|
||||
"path": "sökväg",
|
||||
"no": "nej",
|
||||
"owner": "ägare",
|
||||
"enable": "aktivera",
|
||||
"clear": "töm",
|
||||
"forward": "framåt",
|
||||
"delete": "ta bort",
|
||||
"cancel": "avbryt",
|
||||
"forceRestartRequired": "starta om för att tillämpa ändringar... Stäng meddelandet för att starta om",
|
||||
"setting": "inställning",
|
||||
"version": "version",
|
||||
"title": "titel",
|
||||
"filter_one": "filter",
|
||||
"filter_other": "filter",
|
||||
"filters": "filter",
|
||||
"create": "skapa",
|
||||
"bitrate": "bithastighet",
|
||||
"saveAndReplace": "spara och skrivöver",
|
||||
"action_one": "handling",
|
||||
"action_other": "handlingar",
|
||||
"playerMustBePaused": "spelaren måste pausas",
|
||||
"confirm": "bekräfta",
|
||||
"resetToDefault": "återställ till standard",
|
||||
"home": "hem",
|
||||
"comingSoon": "kommer snart…",
|
||||
"reset": "nollställ",
|
||||
"channel_one": "kanal",
|
||||
"channel_other": "kanaler",
|
||||
"disable": "inaktivera",
|
||||
"sortOrder": "ordning",
|
||||
"none": "ingen",
|
||||
"menu": "meny",
|
||||
"restartRequired": "omstart krävs",
|
||||
"previousSong": "föregående $t(entity.track_one)",
|
||||
"noResultsFromQuery": "frågan returnerade inga resultat",
|
||||
"quit": "avsluta",
|
||||
"expand": "expandera",
|
||||
"search": "sök",
|
||||
"saveAs": "spara som",
|
||||
"disc": "skiva",
|
||||
"yes": "ja",
|
||||
"random": "slumpmässig",
|
||||
"size": "storlek",
|
||||
"biography": "biografi",
|
||||
"note": "anteckning",
|
||||
"center": "center",
|
||||
"explicitStatus": "olämplig status",
|
||||
"additionalParticipants": "ytterligare medverkare",
|
||||
"newVersion": "en ny version har installerats {{version}}",
|
||||
"viewReleaseNotes": "se utgåveinformation",
|
||||
"bitDepth": "bitdjup",
|
||||
"close": "stäng",
|
||||
"codec": "kodek",
|
||||
"doNotShowAgain": "visa inte detta igen",
|
||||
"view": "visa",
|
||||
"externalLinks": "externa länkar",
|
||||
"faster": "snabbare",
|
||||
"backward": "Bakåt",
|
||||
"increase": "Öka",
|
||||
"rating": "Betyg",
|
||||
"bpm": "Bpm",
|
||||
"refresh": "Laddaom",
|
||||
"unknown": "Okänd",
|
||||
"areYouSure": "Är du säker?",
|
||||
"edit": "Redigera",
|
||||
"favorite": "Favorit",
|
||||
"left": "Vänster",
|
||||
"save": "Spara",
|
||||
"right": "Höger",
|
||||
"currentSong": "Aktuell $t(entity.track, {\"count\": 1})",
|
||||
"collapse": "Kollaps",
|
||||
"trackNumber": "Spår",
|
||||
"descending": "Fallande",
|
||||
"add": "Lägg till",
|
||||
"gap": "Avstånd",
|
||||
"ascending": "Stigande",
|
||||
"dismiss": "Avskeda",
|
||||
"year": "År",
|
||||
"manage": "Hantera",
|
||||
"limit": "Gräns",
|
||||
"minimize": "Minimera",
|
||||
"modified": "Modifierad",
|
||||
"duration": "Längd",
|
||||
"name": "Namn",
|
||||
"maximize": "Maximera",
|
||||
"decrease": "Minska",
|
||||
"ok": "Ok",
|
||||
"description": "Beskrivning",
|
||||
"configure": "Konfigurera",
|
||||
"path": "Sökväg",
|
||||
"no": "Nej",
|
||||
"owner": "Ägare",
|
||||
"enable": "Aktivera",
|
||||
"clear": "Töm",
|
||||
"forward": "Framåt",
|
||||
"delete": "Ta bort",
|
||||
"cancel": "Avbryt",
|
||||
"forceRestartRequired": "Starta om för att tillämpa ändringar... Stäng meddelandet för att starta om",
|
||||
"setting_one": "Inställning",
|
||||
"setting_other": "",
|
||||
"version": "Version",
|
||||
"title": "Titel",
|
||||
"filter_one": "Filter",
|
||||
"filter_other": "Filter",
|
||||
"filters": "Filter",
|
||||
"create": "Skapa",
|
||||
"bitrate": "Bithastighet",
|
||||
"saveAndReplace": "Spara och skrivöver",
|
||||
"action_one": "Handling",
|
||||
"action_other": "Handlingar",
|
||||
"playerMustBePaused": "Spelaren måste pausas",
|
||||
"confirm": "Bekräfta",
|
||||
"resetToDefault": "Återställ till standard",
|
||||
"home": "Hem",
|
||||
"comingSoon": "Kommer snart…",
|
||||
"reset": "Nollställ",
|
||||
"channel_one": "Kanal",
|
||||
"channel_other": "Kanaler",
|
||||
"disable": "Inaktivera",
|
||||
"sortOrder": "Ordning",
|
||||
"none": "Ingen",
|
||||
"menu": "Meny",
|
||||
"restartRequired": "Omstart krävs",
|
||||
"previousSong": "Föregående $t(entity.track, {\"count\": 1})",
|
||||
"noResultsFromQuery": "Frågan returnerade inga resultat",
|
||||
"quit": "Avsluta",
|
||||
"expand": "Expandera",
|
||||
"search": "Sök",
|
||||
"saveAs": "Spara som",
|
||||
"disc": "Skiva",
|
||||
"yes": "Ja",
|
||||
"random": "Slumpmässig",
|
||||
"size": "Storlek",
|
||||
"biography": "Biografi",
|
||||
"note": "Anteckning",
|
||||
"center": "Center",
|
||||
"explicitStatus": "Olämplig status",
|
||||
"additionalParticipants": "Ytterligare medverkare",
|
||||
"newVersion": "En ny version har installerats {{version}}",
|
||||
"viewReleaseNotes": "Se utgåveinformation",
|
||||
"bitDepth": "Bitdjup",
|
||||
"close": "Stäng",
|
||||
"codec": "Kodek",
|
||||
"doNotShowAgain": "Visa inte detta igen",
|
||||
"view": "Visa",
|
||||
"externalLinks": "Externa länkar",
|
||||
"faster": "Snabbare",
|
||||
"mbid": "MusicBrainz ID",
|
||||
"noFilters": "inga filter konfigurerade",
|
||||
"preview": "förhandsvisa",
|
||||
"private": "privat",
|
||||
"public": "allmän",
|
||||
"recordLabel": "skivbolag",
|
||||
"releaseType": "utgåvetyp",
|
||||
"reload": "ladda om",
|
||||
"sampleRate": "samplingstakt",
|
||||
"slower": "långsammare",
|
||||
"share": "dela",
|
||||
"sort": "sortera",
|
||||
"tags": "taggar",
|
||||
"translation": "översättning",
|
||||
"explicit": "olämplig",
|
||||
"clean": "städad",
|
||||
"gridRows": "rutnätsrader",
|
||||
"tableColumns": "tabellkolumner",
|
||||
"noFilters": "Inga filter konfigurerade",
|
||||
"preview": "Förhandsvisa",
|
||||
"private": "Privat",
|
||||
"public": "Allmän",
|
||||
"recordLabel": "Skivbolag",
|
||||
"releaseType": "Utgåvetyp",
|
||||
"reload": "Ladda om",
|
||||
"sampleRate": "Samplingstakt",
|
||||
"slower": "Långsammare",
|
||||
"share": "Dela",
|
||||
"sort": "Sortera",
|
||||
"tags": "Taggar",
|
||||
"translation": "Översättning",
|
||||
"explicit": "Olämplig",
|
||||
"clean": "Städad",
|
||||
"gridRows": "Rutnätsrader",
|
||||
"tableColumns": "Tabellkolumner",
|
||||
"itemsMore": "{{count}} fler",
|
||||
"countSelected": "{{count}} markerade"
|
||||
},
|
||||
"error": {
|
||||
"remotePortWarning": "starta om servern för att tillämpa den nya porten",
|
||||
"systemFontError": "ett fel uppstod vid försök att hämta systemteckensnitt",
|
||||
"playbackError": "ett fel uppstod vid försök att spela upp media",
|
||||
"endpointNotImplementedError": "endpoint {{endpoint}} är inte implementerad för {{serverType}}",
|
||||
"remotePortError": "ett fel uppstod vid försök att ange serverporten",
|
||||
"serverRequired": "server krävs",
|
||||
"authenticationFailed": "autentiseringen misslyckades",
|
||||
"apiRouteError": "det går inte att dirigera begäran",
|
||||
"genericError": "ett fel uppstod",
|
||||
"credentialsRequired": "autentiseringsuppgifter som krävs",
|
||||
"sessionExpiredError": "din session har löpt ut",
|
||||
"remotePortWarning": "Starta om servern för att tillämpa den nya porten",
|
||||
"systemFontError": "Ett fel uppstod vid försök att hämta systemteckensnitt",
|
||||
"playbackError": "Ett fel uppstod vid försök att spela upp media",
|
||||
"endpointNotImplementedError": "Endpoint {{endpoint}} är inte implementerad för {{serverType}}",
|
||||
"remotePortError": "Ett fel uppstod vid försök att ange serverporten",
|
||||
"serverRequired": "Server krävs",
|
||||
"authenticationFailed": "Autentiseringen misslyckades",
|
||||
"apiRouteError": "Det går inte att dirigera begäran",
|
||||
"genericError": "Ett fel uppstod",
|
||||
"credentialsRequired": "Autentiseringsuppgifter som krävs",
|
||||
"sessionExpiredError": "Din session har löpt ut",
|
||||
"remoteEnableError": "Ett fel uppstod vid försök att $t(common.enable) servern",
|
||||
"localFontAccessDenied": "åtkomst nekad till lokala teckensnitt",
|
||||
"serverNotSelectedError": "ingen server vald",
|
||||
"remoteDisableError": "ett fel uppstod vid försök av $t(common.disable) servern",
|
||||
"localFontAccessDenied": "Åtkomst nekad till lokala teckensnitt",
|
||||
"serverNotSelectedError": "Ingen server vald",
|
||||
"remoteDisableError": "Ett fel uppstod vid försök av $t(common.disable) servern",
|
||||
"mpvRequired": "MPV krävs",
|
||||
"audioDeviceFetchError": "ett fel uppstod vid hämtning av ljudenheter",
|
||||
"invalidServer": "ogiltig server",
|
||||
"loginRateError": "för många inloggningsförsök, försök igen om några sekunder",
|
||||
"badAlbum": "du ser denna sidan eftersom denna låten inte är en del av ett album. du ser troligtvis detta problemet för att du har en låt på toppnivån i din musikmapp. Jellyfin grupperar bara låtar om de finns i en mapp",
|
||||
"badValue": "felaktigt alternativ \"{{value}}\". detta värde existerar inte längre",
|
||||
"multipleServerSaveQueueError": "spelningskön har en eller flera låtar som inte är från den nuvarande valda servern. detta är inte stöttat",
|
||||
"networkError": "en nätverksfel uppstod",
|
||||
"notificationDenied": "åtkomst till notifieringarna var nekad. inställningen har ingen verkan",
|
||||
"openError": "kunde inte öppna filen",
|
||||
"settingsSyncError": "diskrepans hittades mellan inställningarna för renderingsprocessen och huvudprocessen. starta om applikationen för att ändringarna ska tillämpas"
|
||||
"audioDeviceFetchError": "Ett fel uppstod vid hämtning av ljudenheter",
|
||||
"invalidServer": "Ogiltig server",
|
||||
"loginRateError": "För många inloggningsförsök, försök igen om några sekunder",
|
||||
"badAlbum": "Du ser denna sidan eftersom denna låten inte är en del av ett album. du ser troligtvis detta problemet för att du har en låt på toppnivån i din musikmapp. Jellyfin grupperar bara låtar om de finns i en mapp",
|
||||
"badValue": "Felaktigt alternativ \"{{value}}\". detta värde existerar inte längre",
|
||||
"multipleServerSaveQueueError": "Spelningskön har en eller flera låtar som inte är från den nuvarande valda servern. detta är inte stöttat",
|
||||
"networkError": "En nätverksfel uppstod",
|
||||
"notificationDenied": "Åtkomst till notifieringarna var nekad. inställningen har ingen verkan",
|
||||
"openError": "Kunde inte öppna filen",
|
||||
"settingsSyncError": "Diskrepans hittades mellan inställningarna för renderingsprocessen och huvudprocessen. starta om applikationen för att ändringarna ska tillämpas"
|
||||
},
|
||||
"filter": {
|
||||
"mostPlayed": "mest spelade",
|
||||
"comment": "kommentar",
|
||||
"playCount": "antal spelningar",
|
||||
"recentlyUpdated": "nyligen uppdaterad",
|
||||
"mostPlayed": "Mest spelade",
|
||||
"comment": "Kommentar",
|
||||
"playCount": "Antal spelningar",
|
||||
"recentlyUpdated": "Nyligen uppdaterad",
|
||||
"channels": "$t(common.channel_other)",
|
||||
"isCompilation": "är kompilering",
|
||||
"recentlyPlayed": "nyligen spelad",
|
||||
"isRated": "är betygsatt",
|
||||
"isCompilation": "Är kompilering",
|
||||
"recentlyPlayed": "Nyligen spelad",
|
||||
"isRated": "Är betygsatt",
|
||||
"owner": "$t(common.owner)",
|
||||
"title": "titel",
|
||||
"rating": "betyg",
|
||||
"search": "sök",
|
||||
"bitrate": "bithastighet",
|
||||
"genre": "$t(entity.genre_one)",
|
||||
"recentlyAdded": "nyligen tillagda",
|
||||
"note": "anteckning",
|
||||
"name": "namn",
|
||||
"dateAdded": "datum tillagt",
|
||||
"releaseDate": "utgivningsdag",
|
||||
"communityRating": "betyg från communityn",
|
||||
"path": "sökväg",
|
||||
"favorited": "favoritmärkt",
|
||||
"albumArtist": "$t(entity.albumArtist_one)",
|
||||
"isRecentlyPlayed": "spelas nyligen",
|
||||
"isFavorited": "är favoritmärkt",
|
||||
"bpm": "bpm",
|
||||
"releaseYear": "utgivningsår",
|
||||
"id": "id",
|
||||
"disc": "skiva",
|
||||
"biography": "biografi",
|
||||
"artist": "$t(entity.artist_one)",
|
||||
"duration": "längd",
|
||||
"isPublic": "är offentlig",
|
||||
"random": "slumpmässig",
|
||||
"lastPlayed": "senast spelad",
|
||||
"toYear": "till år",
|
||||
"fromYear": "från år",
|
||||
"album": "$t(entity.album_one)",
|
||||
"trackNumber": "spår",
|
||||
"songCount": "sångräkning",
|
||||
"criticRating": "kritikerbetyg",
|
||||
"albumCount": "$t(entity.album_other) antal",
|
||||
"title": "Titel",
|
||||
"rating": "Betyg",
|
||||
"search": "Sök",
|
||||
"bitrate": "Bithastighet",
|
||||
"genre": "$t(entity.genre, {\"count\": 1})",
|
||||
"recentlyAdded": "Nyligen tillagda",
|
||||
"note": "Anteckning",
|
||||
"name": "Namn",
|
||||
"dateAdded": "Datum tillagt",
|
||||
"releaseDate": "Utgivningsdag",
|
||||
"communityRating": "Betyg från communityn",
|
||||
"path": "Sökväg",
|
||||
"favorited": "Favoritmärkt",
|
||||
"albumArtist": "$t(entity.albumArtist, {\"count\": 1})",
|
||||
"isRecentlyPlayed": "Spelas nyligen",
|
||||
"isFavorited": "Är favoritmärkt",
|
||||
"bpm": "Bpm",
|
||||
"releaseYear": "Utgivningsår",
|
||||
"id": "Id",
|
||||
"disc": "Skiva",
|
||||
"biography": "Biografi",
|
||||
"artist": "$t(entity.artist, {\"count\": 1})",
|
||||
"duration": "Längd",
|
||||
"isPublic": "Är offentlig",
|
||||
"random": "Slumpmässig",
|
||||
"lastPlayed": "Senast spelad",
|
||||
"toYear": "Till år",
|
||||
"fromYear": "Från år",
|
||||
"album": "$t(entity.album, {\"count\": 1})",
|
||||
"trackNumber": "Spår",
|
||||
"songCount": "Sångräkning",
|
||||
"criticRating": "Kritikerbetyg",
|
||||
"albumCount": "$t(entity.album, {\"count\": 2}) antal",
|
||||
"explicitStatus": "$t(common.explicitStatus)"
|
||||
},
|
||||
"form": {
|
||||
"deletePlaylist": {
|
||||
"title": "ta bort $t(entity.playlist_one)",
|
||||
"success": "$t(entity.playlist_one) har tagits bort",
|
||||
"input_confirm": "Skriv namnet på $t(entity.playlist_one) för att bekräfta"
|
||||
"title": "Ta bort $t(entity.playlist, {\"count\": 1})",
|
||||
"success": "$t(entity.playlist, {\"count\": 1}) har tagits bort",
|
||||
"input_confirm": "Skriv namnet på $t(entity.playlist, {\"count\": 1}) för att bekräfta"
|
||||
},
|
||||
"createPlaylist": {
|
||||
"input_description": "$t(common.description)",
|
||||
"title": "skapa $t(entity.playlist_one)",
|
||||
"input_public": "offentlig",
|
||||
"title": "Skapa $t(entity.playlist, {\"count\": 1})",
|
||||
"input_public": "Offentlig",
|
||||
"input_name": "$t(common.name)",
|
||||
"success": "$t(entity.playlist_one) skapad",
|
||||
"success": "$t(entity.playlist, {\"count\": 1}) skapad",
|
||||
"input_owner": "$t(common.owner)"
|
||||
},
|
||||
"addServer": {
|
||||
"title": "lägg till server",
|
||||
"input_username": "användarnamn",
|
||||
"input_url": "länk",
|
||||
"input_password": "lösenord",
|
||||
"input_legacyAuthentication": "aktivera äldre autentisering",
|
||||
"input_name": "server namn",
|
||||
"success": "servern har lagts till",
|
||||
"input_savePassword": "spara lösenord",
|
||||
"ignoreSsl": "ignorera ssl ($t(common.restartRequired))",
|
||||
"ignoreCors": "ignorera cors ($t(common.restartRequired))",
|
||||
"error_savePassword": "ett fel uppstod när lösenordet skulle sparas",
|
||||
"input_preferInstantMix": "föredra instant mixning",
|
||||
"input_preferInstantMixDescription": "använd bara instant mixning för att få liknande låtar. användbar om du har plugin för att förändra detta beteendet"
|
||||
"title": "Lägg till server",
|
||||
"input_username": "Användarnamn",
|
||||
"input_url": "Länk",
|
||||
"input_password": "Lösenord",
|
||||
"input_legacyAuthentication": "Aktivera äldre autentisering",
|
||||
"input_name": "Server namn",
|
||||
"success": "Servern har lagts till",
|
||||
"input_savePassword": "Spara lösenord",
|
||||
"ignoreSsl": "Ignorera ssl ($t(common.restartRequired))",
|
||||
"ignoreCors": "Ignorera cors ($t(common.restartRequired))",
|
||||
"error_savePassword": "Ett fel uppstod när lösenordet skulle sparas",
|
||||
"input_preferInstantMix": "Föredra instant mixning",
|
||||
"input_preferInstantMixDescription": "Använd bara instant mixning för att få liknande låtar. användbar om du har plugin för att förändra detta beteendet"
|
||||
},
|
||||
"addToPlaylist": {
|
||||
"success": "lade till $t(entity.trackWithCount, {\"count\": {{message}} }) till $t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })",
|
||||
"title": "lägg till i $t(entity.playlist_one)",
|
||||
"input_skipDuplicates": "hoppa över dubbletter",
|
||||
"input_playlists": "$t(entity.playlist_other)",
|
||||
"create": "skapa $t(entity.playlist_one) {{playlist}}",
|
||||
"searchOrCreate": "sök $t(entity.playlist_other) eller skriv för att skapa en ny"
|
||||
"success": "Lade till $t(entity.trackWithCount, {\"count\": {{message}} }) till $t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })",
|
||||
"title": "Lägg till i $t(entity.playlist, {\"count\": 1})",
|
||||
"input_skipDuplicates": "Hoppa över dubbletter",
|
||||
"input_playlists": "$t(entity.playlist, {\"count\": 2})",
|
||||
"create": "Skapa $t(entity.playlist, {\"count\": 1}) {{playlist}}",
|
||||
"searchOrCreate": "Sök $t(entity.playlist, {\"count\": 2}) eller skriv för att skapa en ny"
|
||||
},
|
||||
"updateServer": {
|
||||
"title": "uppdatera server",
|
||||
"success": "servern har uppdaterats"
|
||||
"title": "Uppdatera server",
|
||||
"success": "Servern har uppdaterats"
|
||||
},
|
||||
"queryEditor": {
|
||||
"input_optionMatchAll": "matcha alla",
|
||||
"input_optionMatchAny": "matcha något"
|
||||
"input_optionMatchAll": "Matcha alla",
|
||||
"input_optionMatchAny": "Matcha något"
|
||||
},
|
||||
"lyricSearch": {
|
||||
"input_name": "$t(common.name)",
|
||||
"input_artist": "$t(entity.artist_one)",
|
||||
"title": "sångtext sök"
|
||||
"input_artist": "$t(entity.artist, {\"count\": 1})",
|
||||
"title": "Sångtext sök"
|
||||
},
|
||||
"editPlaylist": {
|
||||
"title": "redigera $t(entity.playlist_one)",
|
||||
"title": "Redigera $t(entity.playlist, {\"count\": 1})",
|
||||
"publicJellyfinNote": "Jellyfin visar av någon anledning inte om en spellista är publik eller inte. Om du önskar att denna ska förbli publik, så får du ha följande indata markerade"
|
||||
},
|
||||
"largeFetchConfirmation": {
|
||||
"title": "lägg till objekt till kön",
|
||||
"title": "Lägg till objekt till kön",
|
||||
"description": "Åtgärden kommer att lägga till alla objekt till den nuvarande filtrerade vyn"
|
||||
},
|
||||
"createRadioStation": {
|
||||
"success": "radiostation skapades",
|
||||
"title": "skapa radiostation",
|
||||
"input_homepageUrl": "hemside-URL",
|
||||
"input_name": "namn",
|
||||
"input_streamUrl": "stream url"
|
||||
"success": "Radiostation skapades",
|
||||
"title": "Skapa radiostation",
|
||||
"input_homepageUrl": "Hemside-URL",
|
||||
"input_name": "Namn",
|
||||
"input_streamUrl": "Stream url"
|
||||
}
|
||||
},
|
||||
"page": {
|
||||
"fullscreenPlayer": {
|
||||
"config": {
|
||||
"showLyricMatch": "Visa låttext matchning",
|
||||
"dynamicBackground": "dynamisk bakgrund",
|
||||
"followCurrentLyric": "följ aktuell låttext",
|
||||
"opacity": "ogenomskinlighet",
|
||||
"lyricSize": "låttext storlek",
|
||||
"lyricAlignment": "låttext justering",
|
||||
"lyricGap": "låttext mellanrum",
|
||||
"synchronized": "synkroniserad",
|
||||
"showLyricProvider": "visa sångtextleverantör",
|
||||
"unsynchronized": "osynkroniserad"
|
||||
"dynamicBackground": "Dynamisk bakgrund",
|
||||
"followCurrentLyric": "Följ aktuell låttext",
|
||||
"opacity": "Ogenomskinlighet",
|
||||
"lyricSize": "Låttext storlek",
|
||||
"lyricAlignment": "Låttext justering",
|
||||
"lyricGap": "Låttext mellanrum",
|
||||
"synchronized": "Synkroniserad",
|
||||
"showLyricProvider": "Visa sångtextleverantör",
|
||||
"unsynchronized": "Osynkroniserad"
|
||||
},
|
||||
"lyrics": "sångtext",
|
||||
"related": "relaterad"
|
||||
"lyrics": "Sångtext",
|
||||
"related": "Relaterad"
|
||||
},
|
||||
"appMenu": {
|
||||
"selectServer": "välj server",
|
||||
"version": "version {{version}}",
|
||||
"settings": "$t(common.setting_other)",
|
||||
"manageServers": "hantera servrar",
|
||||
"expandSidebar": "expandera sidofältet",
|
||||
"openBrowserDevtools": "öppna webbläsarens utvecklingsverktyg",
|
||||
"selectServer": "Välj server",
|
||||
"version": "Version {{version}}",
|
||||
"settings": "$t(common.setting, {\"count\": 2})",
|
||||
"manageServers": "Hantera servrar",
|
||||
"expandSidebar": "Expandera sidofältet",
|
||||
"openBrowserDevtools": "Öppna webbläsarens utvecklingsverktyg",
|
||||
"quit": "$t(common.quit)",
|
||||
"goBack": "gå tillbaka",
|
||||
"goForward": "gå framåt",
|
||||
"collapseSidebar": "växla sidofältet"
|
||||
"goBack": "Gå tillbaka",
|
||||
"goForward": "Gå framåt",
|
||||
"collapseSidebar": "Växla sidofältet"
|
||||
},
|
||||
"contextMenu": {
|
||||
"addToPlaylist": "$t(action.addToPlaylist)",
|
||||
@@ -335,146 +336,146 @@
|
||||
"play": "$t(player.play)",
|
||||
"numberSelected": "{{count}} vald",
|
||||
"removeFromQueue": "$t(action.removeFromQueue)",
|
||||
"download": "ladda ner",
|
||||
"download": "Ladda ner",
|
||||
"moveItems": "$t(action.moveItems)",
|
||||
"moveToNext": "$t(action.moveToNext)",
|
||||
"playSimilarSongs": "$t(player.playSimilarSongs)",
|
||||
"playShuffled": "$t(player.shuffle)",
|
||||
"shareItem": "dela objekt",
|
||||
"goTo": "gå till",
|
||||
"goToAlbum": "gå till $t(entity.album_one)",
|
||||
"goToAlbumArtist": "gå till $t(entity.albumArtist_one)",
|
||||
"showDetails": "hämta information"
|
||||
"shareItem": "Dela objekt",
|
||||
"goTo": "Gå till",
|
||||
"goToAlbum": "Gå till $t(entity.album, {\"count\": 1})",
|
||||
"goToAlbumArtist": "Gå till $t(entity.albumArtist, {\"count\": 1})",
|
||||
"showDetails": "Hämta information"
|
||||
},
|
||||
"albumDetail": {
|
||||
"moreFromArtist": "mer från $t(entity.artist_one)",
|
||||
"moreFromGeneric": "mer från {{item}}"
|
||||
"moreFromArtist": "Mer från $t(entity.artist, {\"count\": 1})",
|
||||
"moreFromGeneric": "Mer från {{item}}"
|
||||
},
|
||||
"albumArtistList": {
|
||||
"title": "$t(entity.albumArtist_other)"
|
||||
"title": "$t(entity.albumArtist, {\"count\": 2})"
|
||||
},
|
||||
"albumList": {
|
||||
"title": "$t(entity.album_other)"
|
||||
"title": "$t(entity.album, {\"count\": 2})"
|
||||
},
|
||||
"sidebar": {
|
||||
"nowPlaying": "nu spelas"
|
||||
"nowPlaying": "Nu spelas"
|
||||
},
|
||||
"home": {
|
||||
"mostPlayed": "mest spelade",
|
||||
"newlyAdded": "nytillkomna utgåvor",
|
||||
"explore": "utforska från ditt bibliotek",
|
||||
"recentlyPlayed": "nyligen spelat"
|
||||
"mostPlayed": "Mest spelade",
|
||||
"newlyAdded": "Nytillkomna utgåvor",
|
||||
"explore": "Utforska från ditt bibliotek",
|
||||
"recentlyPlayed": "Nyligen spelat"
|
||||
},
|
||||
"setting": {
|
||||
"playbackTab": "uppspelning",
|
||||
"generalTab": "allmänt",
|
||||
"hotkeysTab": "snabbtangenter",
|
||||
"windowTab": "fönster"
|
||||
"playbackTab": "Uppspelning",
|
||||
"generalTab": "Allmänt",
|
||||
"hotkeysTab": "Snabbtangenter",
|
||||
"windowTab": "Fönster"
|
||||
},
|
||||
"globalSearch": {
|
||||
"commands": {
|
||||
"serverCommands": "serverkommandon",
|
||||
"goToPage": "gå till sidan",
|
||||
"searchFor": "sök efter {{query}}"
|
||||
"serverCommands": "Serverkommandon",
|
||||
"goToPage": "Gå till sidan",
|
||||
"searchFor": "Sök efter {{query}}"
|
||||
},
|
||||
"title": "kommandon"
|
||||
"title": "Kommandon"
|
||||
},
|
||||
"manageServers": {
|
||||
"url": "URL",
|
||||
"username": "användarnamn",
|
||||
"editServerDetailsTooltip": "redigera serverinställningar",
|
||||
"removeServer": "ta bort server"
|
||||
"username": "Användarnamn",
|
||||
"editServerDetailsTooltip": "Redigera serverinställningar",
|
||||
"removeServer": "Ta bort server"
|
||||
}
|
||||
},
|
||||
"entity": {
|
||||
"playlist_one": "spellista",
|
||||
"playlist_other": "spellistor",
|
||||
"artist_one": "artist",
|
||||
"artist_other": "artister",
|
||||
"albumArtist_one": "albumartist",
|
||||
"albumArtist_other": "albumartister",
|
||||
"albumArtistCount_one": "{{count}} Albumartist",
|
||||
"albumArtistCount_other": "{{count}} Albumartister",
|
||||
"playlist_one": "Spellista",
|
||||
"playlist_other": "Spellistor",
|
||||
"artist_one": "Artist",
|
||||
"artist_other": "Artister",
|
||||
"albumArtist_one": "Albumartist",
|
||||
"albumArtist_other": "Albumartister",
|
||||
"albumArtistCount_one": "{{count}} albumartist",
|
||||
"albumArtistCount_other": "{{count}} albumartister",
|
||||
"albumWithCount_one": "{{count}} album",
|
||||
"albumWithCount_other": "{{count}} album",
|
||||
"favorite_one": "favorit",
|
||||
"favorite_other": "favoriter",
|
||||
"folder_one": "mapp",
|
||||
"folder_other": "mappar",
|
||||
"album_one": "album",
|
||||
"album_other": "album",
|
||||
"favorite_one": "Favorit",
|
||||
"favorite_other": "Favoriter",
|
||||
"folder_one": "Mapp",
|
||||
"folder_other": "Mappar",
|
||||
"album_one": "Album",
|
||||
"album_other": "Album",
|
||||
"playlistWithCount_one": "{{count}} spellista",
|
||||
"playlistWithCount_other": "{{count}} spellistor",
|
||||
"folderWithCount_one": "{{count}} mapp",
|
||||
"folderWithCount_other": "{{count}} mappar",
|
||||
"track_one": "spår",
|
||||
"track_other": "spår",
|
||||
"track_one": "Spår",
|
||||
"track_other": "Spår",
|
||||
"trackWithCount_one": "{{count}} spår",
|
||||
"trackWithCount_other": "{{count}} spår",
|
||||
"artistWithCount_one": "{{count}} artist",
|
||||
"artistWithCount_other": "{{count}} artister",
|
||||
"genre_one": "genre",
|
||||
"genre_other": "genrer",
|
||||
"genre_one": "Genre",
|
||||
"genre_other": "Genrer",
|
||||
"genreWithCount_one": "{{count}} genre",
|
||||
"genreWithCount_other": "{{count}} genrer",
|
||||
"play_one": "{{count}} spelning",
|
||||
"play_other": "{{count}} spelningar",
|
||||
"smartPlaylist": "smart $t(entity.playlist_one)",
|
||||
"song_one": "låt",
|
||||
"song_other": "låtar",
|
||||
"radioStation_one": "radiostation",
|
||||
"radioStation_other": "radiostationer",
|
||||
"smartPlaylist": "Smart $t(entity.playlist, {\"count\": 1})",
|
||||
"song_one": "Låt",
|
||||
"song_other": "Låtar",
|
||||
"radioStation_one": "Radiostation",
|
||||
"radioStation_other": "Radiostationer",
|
||||
"radioStationWithCount_one": "{{count}} radiostation",
|
||||
"radioStationWithCount_other": "{{count}} radiostationer"
|
||||
},
|
||||
"player": {
|
||||
"repeat_all": "repetera alla",
|
||||
"repeat": "repetera",
|
||||
"queue_remove": "ta bort markerad",
|
||||
"playRandom": "spela slumpmässigt",
|
||||
"previous": "föregående",
|
||||
"favorite": "favorit",
|
||||
"next": "nästa",
|
||||
"shuffle": "blanda",
|
||||
"playbackFetchNoResults": "inga låtar hittades",
|
||||
"playbackFetchInProgress": "laddar låtar…",
|
||||
"addNext": "lägg till nästa",
|
||||
"playbackSpeed": "uppspelningshastighet",
|
||||
"playbackFetchCancel": "det här tar ett tag... stäng aviseringen för att avbryta",
|
||||
"play": "spela",
|
||||
"repeat_off": "repetera inaktiverad",
|
||||
"queue_clear": "rensa kö",
|
||||
"muted": "mutad",
|
||||
"queue_moveToTop": "flytta markerad till botten",
|
||||
"queue_moveToBottom": "flytta markerad till toppen",
|
||||
"addLast": "lägg till sist",
|
||||
"mute": "muta"
|
||||
"repeat_all": "Repetera alla",
|
||||
"repeat": "Repetera",
|
||||
"queue_remove": "Ta bort markerad",
|
||||
"playRandom": "Spela slumpmässigt",
|
||||
"previous": "Föregående",
|
||||
"favorite": "Favorit",
|
||||
"next": "Nästa",
|
||||
"shuffle": "Blanda",
|
||||
"playbackFetchNoResults": "Inga låtar hittades",
|
||||
"playbackFetchInProgress": "Laddar låtar…",
|
||||
"addNext": "Lägg till nästa",
|
||||
"playbackSpeed": "Uppspelningshastighet",
|
||||
"playbackFetchCancel": "Det här tar ett tag... stäng aviseringen för att avbryta",
|
||||
"play": "Spela",
|
||||
"repeat_off": "Repetera inaktiverad",
|
||||
"queue_clear": "Rensa kö",
|
||||
"muted": "Mutad",
|
||||
"queue_moveToTop": "Flytta markerad till toppen",
|
||||
"queue_moveToBottom": "Flytta markerad till botten",
|
||||
"addLast": "Lägg till sist",
|
||||
"mute": "Muta"
|
||||
},
|
||||
"datetime": {
|
||||
"minuteShort": "min",
|
||||
"secondShort": "sek",
|
||||
"hourShort": "h",
|
||||
"dayShort": "dag"
|
||||
"minuteShort": "Min",
|
||||
"secondShort": "Sek",
|
||||
"hourShort": "H",
|
||||
"dayShort": "Dag"
|
||||
},
|
||||
"filterOperator": {
|
||||
"after": "är efter",
|
||||
"afterDate": "är efter (datum)",
|
||||
"before": "är före",
|
||||
"beforeDate": "är före (datum)",
|
||||
"contains": "innehåller",
|
||||
"endsWith": "slutar med",
|
||||
"inPlaylist": "är inom",
|
||||
"inTheLast": "är i den sista",
|
||||
"inTheRange": "är i spannet",
|
||||
"inTheRangeDate": "är i spannet (datum)",
|
||||
"is": "är",
|
||||
"isNot": "är inte",
|
||||
"isGreaterThan": "är större än",
|
||||
"isLessThan": "är mindre än",
|
||||
"matchesRegex": "matchar regex",
|
||||
"notContains": "innehåller inte",
|
||||
"notInPlaylist": "är inte inom",
|
||||
"notInTheLast": "är inte inom den sista",
|
||||
"startsWith": "startar med"
|
||||
"after": "Är efter",
|
||||
"afterDate": "Är efter (datum)",
|
||||
"before": "Är före",
|
||||
"beforeDate": "Är före (datum)",
|
||||
"contains": "Innehåller",
|
||||
"endsWith": "Slutar med",
|
||||
"inPlaylist": "Är inom",
|
||||
"inTheLast": "Är i den sista",
|
||||
"inTheRange": "Är i spannet",
|
||||
"inTheRangeDate": "Är i spannet (datum)",
|
||||
"is": "Är",
|
||||
"isNot": "Är inte",
|
||||
"isGreaterThan": "Är större än",
|
||||
"isLessThan": "Är mindre än",
|
||||
"matchesRegex": "Matchar regex",
|
||||
"notContains": "Innehåller inte",
|
||||
"notInPlaylist": "Är inte inom",
|
||||
"notInTheLast": "Är inte inom den sista",
|
||||
"startsWith": "Startar med"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
{}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"action": {
|
||||
"addToFavorites": "Idagdag sa $t(entity.favorite, {\"count\": 2})",
|
||||
"addToPlaylist": "Idagdag sa $t(entity.playlist, {\"count\": 1})",
|
||||
"addOrRemoveFromSelection": "Idagdag o alisin sa pinili",
|
||||
"collapseAllFolders": "Isara lahat ng mga folder",
|
||||
"expandAllFolders": "Buksan lahat ng mga folder",
|
||||
"createPlaylist": "Gumawa $t(entity.playlist, {\"count\": 1})",
|
||||
"createRadioStation": "Gumawa $t(entity.radioStation, {\"count\": 1})",
|
||||
"selectAll": "Piliin lahat",
|
||||
"deselectAll": "Huwag piliin lahat",
|
||||
"downloadStarted": "Nagsimulang mag-dowload ng {{count}} (mga) aytem"
|
||||
}
|
||||
}
|
||||