Compare commits
666 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 5bab80b89b | |||
| 066e5188f2 | |||
| 456f4d7f65 | |||
| 02f5a1bd94 | |||
| 4424e9ae33 | |||
| 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 | |||
| 5ec8f1a904 | |||
| 83b20d9086 | |||
| 211f09fe19 | |||
| 03c1fb0ff2 | |||
| 834412ad31 | |||
| 7ae0aa198e | |||
| 5d24d90a7c | |||
| b5923539c2 | |||
| 3a9d49549c | |||
| ff272a5385 | |||
| 327875df6a | |||
| 9bbb213bc2 | |||
| 3122c1a058 | |||
| af055ab6dd | |||
| e34d84deee | |||
| 0596faf51e | |||
| 5f1867c14f | |||
| 1c6b204e80 | |||
| 29957780cb | |||
| fd0d783e7d | |||
| 5ec025a70e | |||
| dc0c6401de | |||
| 06fc7b391f | |||
| 8c91f1c52d | |||
| 968d991a1a | |||
| f4f75f342c | |||
| ba32832619 | |||
| 186811156e | |||
| 261c5541cd | |||
| 5c14d20f78 | |||
| c67731f852 | |||
| 0336f4afea | |||
| ace4c77bdc | |||
| ffe3f08705 | |||
| d06d1674d1 | |||
| a66c67e86d | |||
| 0cfc4119ba | |||
| af0354a4d5 | |||
| e696c0c636 | |||
| 6aeec1e89c | |||
| e406b27170 | |||
| 55cead87c8 | |||
| aaf840d358 | |||
| af8470e254 | |||
| c7809c62ce | |||
| cb47883328 | |||
| 588e0609fd | |||
| 091d2efb2e | |||
| e5c5985f0f | |||
| b7627fd469 | |||
| 22c0f8f8c6 | |||
| a7d2a427ec | |||
| 14cc4079a3 | |||
| bb93b0895e | |||
| 1a3e2eec70 | |||
| 926b77c770 | |||
| a4472bb449 | |||
| cd04d7a760 | |||
| 6356c55c81 | |||
| 37ed99d0fb | |||
| 72475fbcc2 | |||
| 0096aeeb1b | |||
| 91ccc71fcd | |||
| b00f9795bf | |||
| 255b9a9c2d | |||
| 8eab4933ae | |||
| 031f443238 | |||
| 72d0fca28b | |||
| 7aeadb531f | |||
| 4e213ea79e | |||
| b99ea61115 | |||
| 4a025f82e4 | |||
| 6ddaf0366c | |||
| 62183ecb58 | |||
| 3ee92b068b | |||
| 4dc3a0e8d1 | |||
| 43652ce65d | |||
| b08c8a1719 | |||
| 0385f13928 | |||
| 3bf2c585b8 | |||
| 7d05e4536b | |||
| 0553f3b5a2 | |||
| c01a0d79e1 | |||
| adc094005f | |||
| 5b7557bd45 | |||
| 6aa3905922 | |||
| aa75aaaffb | |||
| 62ab4b7a00 | |||
| 145dc5c99e | |||
| 82a566aee1 | |||
| 42058ff6d6 | |||
| 9841cfba38 | |||
| 6c8099efe5 | |||
| 8ba87d57cd |
@@ -5,6 +5,7 @@
|
|||||||
*.jpeg binary
|
*.jpeg binary
|
||||||
*.ico binary
|
*.ico binary
|
||||||
*.icns binary
|
*.icns binary
|
||||||
|
*.webp binary
|
||||||
*.eot binary
|
*.eot binary
|
||||||
*.otf binary
|
*.otf binary
|
||||||
*.ttf binary
|
*.ttf binary
|
||||||
|
|||||||
@@ -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 }}
|
version: ${{ steps.version.outputs.version }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout git repo
|
- name: Checkout git repo
|
||||||
uses: actions/checkout@v1
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Install Node and PNPM
|
- name: Install Node and PNPM
|
||||||
uses: pnpm/action-setup@v4.1.0
|
uses: pnpm/action-setup@v4
|
||||||
with:
|
with:
|
||||||
version: 9
|
version: 10
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install
|
run: pnpm install
|
||||||
@@ -115,16 +115,16 @@ jobs:
|
|||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os: [windows-latest, macos-latest, ubuntu-latest]
|
os: [windows-latest, macos-26, ubuntu-latest]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout git repo
|
- name: Checkout git repo
|
||||||
uses: actions/checkout@v1
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Install Node and PNPM
|
- name: Install Node and PNPM
|
||||||
uses: pnpm/action-setup@v4.1.0
|
uses: pnpm/action-setup@v4
|
||||||
with:
|
with:
|
||||||
version: 9
|
version: 10
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install
|
run: pnpm install
|
||||||
@@ -146,7 +146,7 @@ jobs:
|
|||||||
if: matrix.os == 'windows-latest'
|
if: matrix.os == 'windows-latest'
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
uses: nick-invision/retry@v2.8.2
|
uses: nick-invision/retry@v3.0.2
|
||||||
with:
|
with:
|
||||||
timeout_minutes: 30
|
timeout_minutes: 30
|
||||||
max_attempts: 3
|
max_attempts: 3
|
||||||
@@ -156,10 +156,10 @@ jobs:
|
|||||||
on_retry_command: pnpm cache delete
|
on_retry_command: pnpm cache delete
|
||||||
|
|
||||||
- name: Build and Publish releases (macOS)
|
- name: Build and Publish releases (macOS)
|
||||||
if: matrix.os == 'macos-latest'
|
if: matrix.os == 'macos-26'
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
uses: nick-invision/retry@v2.8.2
|
uses: nick-invision/retry@v3.0.2
|
||||||
with:
|
with:
|
||||||
timeout_minutes: 30
|
timeout_minutes: 30
|
||||||
max_attempts: 3
|
max_attempts: 3
|
||||||
@@ -172,7 +172,7 @@ jobs:
|
|||||||
if: matrix.os == 'ubuntu-latest'
|
if: matrix.os == 'ubuntu-latest'
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
uses: nick-invision/retry@v2.8.2
|
uses: nick-invision/retry@v3.0.2
|
||||||
with:
|
with:
|
||||||
timeout_minutes: 30
|
timeout_minutes: 30
|
||||||
max_attempts: 3
|
max_attempts: 3
|
||||||
@@ -185,7 +185,7 @@ jobs:
|
|||||||
if: matrix.os == 'ubuntu-latest'
|
if: matrix.os == 'ubuntu-latest'
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
uses: nick-invision/retry@v2.8.2
|
uses: nick-invision/retry@v3.0.2
|
||||||
with:
|
with:
|
||||||
timeout_minutes: 30
|
timeout_minutes: 30
|
||||||
max_attempts: 3
|
max_attempts: 3
|
||||||
@@ -199,7 +199,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout git repo
|
- name: Checkout git repo
|
||||||
uses: actions/checkout@v1
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Edit release with commits and title
|
- name: Edit release with commits and title
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
@@ -346,7 +346,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout git repo
|
- name: Checkout git repo
|
||||||
uses: actions/checkout@v1
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Delete existing prereleases
|
- name: Delete existing prereleases
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ jobs:
|
|||||||
packages: write
|
packages: write
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
- name: Log in to the Container registry
|
- name: Log in to the Container registry
|
||||||
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
|
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
|
||||||
with:
|
with:
|
||||||
@@ -51,5 +51,4 @@ jobs:
|
|||||||
labels: ${{ steps.meta.outputs.labels }}
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
platforms: |
|
platforms: |
|
||||||
linux/amd64
|
linux/amd64
|
||||||
linux/arm/v7
|
|
||||||
linux/arm64/v8
|
linux/arm64/v8
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ jobs:
|
|||||||
packages: write
|
packages: write
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
- name: Log in to the Container registry
|
- name: Log in to the Container registry
|
||||||
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
|
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
|
||||||
with:
|
with:
|
||||||
|
|||||||
@@ -12,12 +12,12 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout git repo
|
- name: Checkout git repo
|
||||||
uses: actions/checkout@v1
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Install Node and PNPM
|
- name: Install Node and PNPM
|
||||||
uses: pnpm/action-setup@v4.1.0
|
uses: pnpm/action-setup@v4
|
||||||
with:
|
with:
|
||||||
version: 9
|
version: 10
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install
|
run: pnpm install
|
||||||
@@ -25,7 +25,7 @@ jobs:
|
|||||||
- name: Build and Publish releases
|
- name: Build and Publish releases
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
uses: nick-invision/retry@v2.8.2
|
uses: nick-invision/retry@v3.0.2
|
||||||
with:
|
with:
|
||||||
timeout_minutes: 30
|
timeout_minutes: 30
|
||||||
max_attempts: 3
|
max_attempts: 3
|
||||||
@@ -37,7 +37,7 @@ jobs:
|
|||||||
- name: Build and Publish releases (arm64)
|
- name: Build and Publish releases (arm64)
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
uses: nick-invision/retry@v2.8.2
|
uses: nick-invision/retry@v3.0.2
|
||||||
with:
|
with:
|
||||||
timeout_minutes: 30
|
timeout_minutes: 30
|
||||||
max_attempts: 3
|
max_attempts: 3
|
||||||
|
|||||||
@@ -8,24 +8,25 @@ jobs:
|
|||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os: [macos-latest]
|
os: [macos-26]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout git repo
|
- name: Checkout git repo
|
||||||
uses: actions/checkout@v1
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Install Node and PNPM
|
- name: Install Node and PNPM
|
||||||
uses: pnpm/action-setup@v4.1.0
|
uses: pnpm/action-setup@v4
|
||||||
with:
|
with:
|
||||||
version: 9
|
version: 10
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install
|
run: pnpm install
|
||||||
|
|
||||||
- name: Build and Publish releases
|
- name: Build and Publish releases
|
||||||
env:
|
env:
|
||||||
|
NODE_OPTIONS: --max-old-space-size=4096
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
uses: nick-invision/retry@v2.8.2
|
uses: nick-invision/retry@v3.0.2
|
||||||
with:
|
with:
|
||||||
timeout_minutes: 30
|
timeout_minutes: 30
|
||||||
max_attempts: 3
|
max_attempts: 3
|
||||||
|
|||||||
@@ -1,14 +1,17 @@
|
|||||||
name: Publish (PR)
|
name: Publish (PR)
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- development
|
- development
|
||||||
paths:
|
paths:
|
||||||
- 'src/**'
|
- 'src/**'
|
||||||
|
- 'electron-builder*.yml'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
wait-for-lint:
|
wait-for-lint:
|
||||||
|
if: github.event_name == 'pull_request'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Wait for Test workflow to complete
|
- name: Wait for Test workflow to complete
|
||||||
@@ -22,27 +25,28 @@ jobs:
|
|||||||
|
|
||||||
publish:
|
publish:
|
||||||
needs: wait-for-lint
|
needs: wait-for-lint
|
||||||
|
if: always() && (needs.wait-for-lint.result == 'success' || needs.wait-for-lint.result == 'skipped')
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os: [macos-latest, ubuntu-latest, windows-latest]
|
os: [macos-26, ubuntu-latest, windows-latest]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout git repo
|
- name: Checkout git repo
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Install Node and PNPM
|
- name: Install Node and PNPM
|
||||||
uses: pnpm/action-setup@v4.1.0
|
uses: pnpm/action-setup@v4
|
||||||
with:
|
with:
|
||||||
version: 9
|
version: 10
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install
|
run: pnpm install
|
||||||
|
|
||||||
- name: Build for Windows
|
- name: Build for Windows
|
||||||
if: ${{ matrix.os == 'windows-latest' }}
|
if: ${{ matrix.os == 'windows-latest' }}
|
||||||
uses: nick-invision/retry@v2.8.2
|
uses: nick-invision/retry@v3.0.2
|
||||||
with:
|
with:
|
||||||
timeout_minutes: 30
|
timeout_minutes: 30
|
||||||
max_attempts: 3
|
max_attempts: 3
|
||||||
@@ -52,7 +56,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Build for Linux
|
- name: Build for Linux
|
||||||
if: ${{ matrix.os == 'ubuntu-latest' }}
|
if: ${{ matrix.os == 'ubuntu-latest' }}
|
||||||
uses: nick-invision/retry@v2.8.2
|
uses: nick-invision/retry@v3.0.2
|
||||||
with:
|
with:
|
||||||
timeout_minutes: 30
|
timeout_minutes: 30
|
||||||
max_attempts: 3
|
max_attempts: 3
|
||||||
@@ -61,8 +65,8 @@ jobs:
|
|||||||
pnpm run package:linux:pr
|
pnpm run package:linux:pr
|
||||||
|
|
||||||
- name: Build for MacOS
|
- name: Build for MacOS
|
||||||
if: ${{ matrix.os == 'macos-latest' }}
|
if: ${{ matrix.os == 'macos-26' }}
|
||||||
uses: nick-invision/retry@v2.8.2
|
uses: nick-invision/retry@v3.0.2
|
||||||
with:
|
with:
|
||||||
timeout_minutes: 30
|
timeout_minutes: 30
|
||||||
max_attempts: 3
|
max_attempts: 3
|
||||||
@@ -82,27 +86,27 @@ jobs:
|
|||||||
zip -r dist/linux-binaries.zip dist/*.{AppImage,deb,rpm}
|
zip -r dist/linux-binaries.zip dist/*.{AppImage,deb,rpm}
|
||||||
|
|
||||||
- name: Zip MacOS Binaries
|
- name: Zip MacOS Binaries
|
||||||
if: ${{ matrix.os == 'macos-latest' }}
|
if: ${{ matrix.os == 'macos-26' }}
|
||||||
run: |
|
run: |
|
||||||
zip -r dist/macos-binaries.zip dist/*.dmg
|
zip -r dist/macos-binaries.zip dist/*.dmg
|
||||||
|
|
||||||
- name: Upload Windows Binaries
|
- name: Upload Windows Binaries
|
||||||
if: ${{ matrix.os == 'windows-latest' }}
|
if: ${{ matrix.os == 'windows-latest' }}
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: windows-binaries
|
name: windows-binaries
|
||||||
path: dist/windows-binaries.zip
|
path: dist/windows-binaries.zip
|
||||||
|
|
||||||
- name: Upload Linux Binaries
|
- name: Upload Linux Binaries
|
||||||
if: ${{ matrix.os == 'ubuntu-latest' }}
|
if: ${{ matrix.os == 'ubuntu-latest' }}
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: linux-binaries
|
name: linux-binaries
|
||||||
path: dist/linux-binaries.zip
|
path: dist/linux-binaries.zip
|
||||||
|
|
||||||
- name: Upload MacOS Binaries
|
- name: Upload MacOS Binaries
|
||||||
if: ${{ matrix.os == 'macos-latest' }}
|
if: ${{ matrix.os == 'macos-26' }}
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: macos-binaries
|
name: macos-binaries
|
||||||
path: dist/macos-binaries.zip
|
path: dist/macos-binaries.zip
|
||||||
|
|||||||
@@ -12,12 +12,12 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout git repo
|
- name: Checkout git repo
|
||||||
uses: actions/checkout@v1
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Install Node and PNPM
|
- name: Install Node and PNPM
|
||||||
uses: pnpm/action-setup@v4.1.0
|
uses: pnpm/action-setup@v4
|
||||||
with:
|
with:
|
||||||
version: 9
|
version: 10
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install
|
run: pnpm install
|
||||||
@@ -25,7 +25,7 @@ jobs:
|
|||||||
- name: Build and Publish releases
|
- name: Build and Publish releases
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
uses: nick-invision/retry@v2.8.2
|
uses: nick-invision/retry@v3.0.2
|
||||||
with:
|
with:
|
||||||
timeout_minutes: 30
|
timeout_minutes: 30
|
||||||
max_attempts: 3
|
max_attempts: 3
|
||||||
|
|||||||
@@ -16,6 +16,5 @@ jobs:
|
|||||||
- uses: vedantmgoyal9/winget-releaser@main
|
- uses: vedantmgoyal9/winget-releaser@main
|
||||||
with:
|
with:
|
||||||
identifier: jeffvli.Feishin
|
identifier: jeffvli.Feishin
|
||||||
installers-regex: 'Feishin-*-win-x64\.exe'
|
installers-regex: 'Feishin-*-win-(x64|arm64)\.exe'
|
||||||
token: ${{ secrets.WINGET_ACC_TOKEN }}
|
token: ${{ secrets.WINGET_ACC_TOKEN }}
|
||||||
|
|
||||||
|
|||||||
@@ -8,16 +8,16 @@ jobs:
|
|||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os: [windows-latest, macos-latest, ubuntu-latest]
|
os: [windows-latest, macos-26, ubuntu-latest]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout git repo
|
- name: Checkout git repo
|
||||||
uses: actions/checkout@v1
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Install Node and PNPM
|
- name: Install Node and PNPM
|
||||||
uses: pnpm/action-setup@v4.1.0
|
uses: pnpm/action-setup@v4
|
||||||
with:
|
with:
|
||||||
version: 9
|
version: 10
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install
|
run: pnpm install
|
||||||
@@ -26,7 +26,7 @@ jobs:
|
|||||||
if: matrix.os == 'windows-latest'
|
if: matrix.os == 'windows-latest'
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
uses: nick-invision/retry@v2.8.2
|
uses: nick-invision/retry@v3.0.2
|
||||||
with:
|
with:
|
||||||
timeout_minutes: 30
|
timeout_minutes: 30
|
||||||
max_attempts: 3
|
max_attempts: 3
|
||||||
@@ -36,10 +36,10 @@ jobs:
|
|||||||
on_retry_command: pnpm cache delete
|
on_retry_command: pnpm cache delete
|
||||||
|
|
||||||
- name: Build and Publish releases (macOS)
|
- name: Build and Publish releases (macOS)
|
||||||
if: matrix.os == 'macos-latest'
|
if: matrix.os == 'macos-26'
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
uses: nick-invision/retry@v2.8.2
|
uses: nick-invision/retry@v3.0.2
|
||||||
with:
|
with:
|
||||||
timeout_minutes: 30
|
timeout_minutes: 30
|
||||||
max_attempts: 3
|
max_attempts: 3
|
||||||
@@ -52,7 +52,7 @@ jobs:
|
|||||||
if: matrix.os == 'ubuntu-latest'
|
if: matrix.os == 'ubuntu-latest'
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
uses: nick-invision/retry@v2.8.2
|
uses: nick-invision/retry@v3.0.2
|
||||||
with:
|
with:
|
||||||
timeout_minutes: 30
|
timeout_minutes: 30
|
||||||
max_attempts: 3
|
max_attempts: 3
|
||||||
@@ -65,7 +65,7 @@ jobs:
|
|||||||
if: matrix.os == 'ubuntu-latest'
|
if: matrix.os == 'ubuntu-latest'
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
uses: nick-invision/retry@v2.8.2
|
uses: nick-invision/retry@v3.0.2
|
||||||
with:
|
with:
|
||||||
timeout_minutes: 30
|
timeout_minutes: 30
|
||||||
max_attempts: 3
|
max_attempts: 3
|
||||||
|
|||||||
@@ -8,12 +8,12 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Check out Git repository
|
- name: Check out Git repository
|
||||||
uses: actions/checkout@v1
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Install Node.js and PNPM
|
- name: Install Node.js and PNPM
|
||||||
uses: pnpm/action-setup@v4.1.0
|
uses: pnpm/action-setup@v4
|
||||||
with:
|
with:
|
||||||
version: 9
|
version: 10
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install
|
run: pnpm install
|
||||||
|
|||||||
@@ -1,2 +1 @@
|
|||||||
legacy-peer-deps=true
|
legacy-peer-deps=true
|
||||||
only-built-dependencies=electron,esbuild
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# --- Builder stage
|
# --- Builder stage
|
||||||
FROM node:23-alpine as builder
|
FROM node:23-alpine AS builder
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
# Copy package.json first to cache node_modules
|
# Copy package.json first to cache node_modules
|
||||||
@@ -14,12 +14,14 @@ COPY . .
|
|||||||
RUN pnpm run build:web
|
RUN pnpm run build:web
|
||||||
|
|
||||||
# --- Production stage
|
# --- 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 --chown=nginx:nginx --from=builder /app/out/web /usr/share/nginx/html
|
||||||
COPY ./settings.js.template /etc/nginx/templates/settings.js.template
|
COPY --chown=nginx:nginx ./settings.js.template /etc/nginx/templates/settings.js.template
|
||||||
COPY ng.conf.template /etc/nginx/templates/default.conf.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
|
EXPOSE 9180
|
||||||
CMD ["nginx", "-g", "daemon off;"]
|
CMD ["nginx", "-g", "daemon off;"]
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ Rewrite of [Sonixd](https://github.com/jeffvli/sonixd).
|
|||||||
|
|
||||||
## Screenshots
|
## 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
|
## Getting Started
|
||||||
|
|
||||||
@@ -59,21 +59,28 @@ For media keys to work, you will be prompted to allow Feishin to be a Trusted Ac
|
|||||||
|
|
||||||
#### Linux Notes
|
#### 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:
|
Simply run the installer like this:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
dir=/your/application/directory
|
dir=/your/application/directory
|
||||||
curl 'https://raw.githubusercontent.com/jeffvli/feishin/refs/heads/development/install-feishin-appimage' | sh -s -- "$dir"
|
curl 'https://raw.githubusercontent.com/jeffvli/feishin/refs/heads/development/install-feishin-appimage' | sh -s -- "$dir"
|
||||||
```
|
```
|
||||||
|
|
||||||
The script also has an option to add launch arguments to run Feishin in native Wayland mode. Note that this is experimental in Electron and therefore not officially supported. If you want to use it, run this instead:
|
The script also has an option to add launch arguments to run Feishin in native Wayland mode. Note that this is experimental in Electron and therefore not officially supported. If you want to use it, run this instead:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
dir=/your/application/directory
|
dir=/your/application/directory
|
||||||
curl 'https://raw.githubusercontent.com/jeffvli/feishin/refs/heads/development/install-feishin-appimage' | sh -s -- "$dir" wayland-native
|
curl 'https://raw.githubusercontent.com/jeffvli/feishin/refs/heads/development/install-feishin-appimage' | sh -s -- "$dir" wayland-native
|
||||||
```
|
```
|
||||||
|
|
||||||
It also provides a simple uninstall routine, removing the downloaded files:
|
It also provides a simple uninstall routine, removing the downloaded files:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
dir=/your/application/directory
|
dir=/your/application/directory
|
||||||
curl 'https://raw.githubusercontent.com/jeffvli/feishin/refs/heads/development/install-feishin-appimage' | sh -s -- "$dir" remove
|
curl 'https://raw.githubusercontent.com/jeffvli/feishin/refs/heads/development/install-feishin-appimage' | sh -s -- "$dir" remove
|
||||||
@@ -111,6 +118,9 @@ services:
|
|||||||
- SERVER_LOCK=true # When true AND name/type/url are set, only username/password can be toggled
|
- 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_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://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:
|
ports:
|
||||||
- 9180:9180
|
- 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
|
||||||
@@ -127,7 +137,13 @@ services:
|
|||||||
|
|
||||||
3. _Optional_ - If you want to host Feishin on a subpath (not `/`), then pass in the following environment variable: `PUBLIC_PATH=PATH`. For example, to host on `/feishin`, pass in `PUBLIC_PATH=/feishin`.
|
3. _Optional_ - If you want to host Feishin on a subpath (not `/`), then pass in the following environment variable: `PUBLIC_PATH=PATH`. For example, to host on `/feishin`, pass in `PUBLIC_PATH=/feishin`.
|
||||||
|
|
||||||
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.
|
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_ - 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
|
## FAQ
|
||||||
|
|
||||||
@@ -153,6 +169,10 @@ Feishin supports any music server that implements a [Navidrome](https://www.navi
|
|||||||
- [Qm-Music](https://github.com/chenqimiao/qm-music)
|
- [Qm-Music](https://github.com/chenqimiao/qm-music)
|
||||||
- More (?)
|
- 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
|
### 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.
|
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,13 +1,16 @@
|
|||||||
services:
|
services:
|
||||||
feishin:
|
feishin:
|
||||||
container_name: feishin
|
container_name: feishin
|
||||||
image: 'ghcr.io/jeffvli/feishin:latest'
|
image: "ghcr.io/jeffvli/feishin:latest"
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
- SERVER_NAME=jellyfin # pre-defined server name
|
- 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_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:
|
ports:
|
||||||
- 9180:9180
|
- 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,129 @@
|
|||||||
|
# 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.sidebarPlaylistList` | `true` | `FS_GENERAL_SIDEBAR_PLAYLIST_LIST` | `true` / `false` — Show playlist list in sidebar. |
|
||||||
|
| `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. |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 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.enabled` | `false` | `FS_AUTO_DJ_ENABLED` | `true` / `false`. |
|
||||||
|
| `autoDJ.itemCount` | `5` | `FS_AUTO_DJ_ITEM_COUNT` | Number of items to add. |
|
||||||
|
| `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: 39.4.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.2'
|
||||||
|
|
||||||
|
npmRebuild: false
|
||||||
|
|
||||||
|
publish:
|
||||||
|
provider: s3
|
||||||
|
bucket: feishin-nightly
|
||||||
|
channel: alpha
|
||||||
|
endpoint: https://065f090c64de2dc707dd70ac72db9669.r2.cloudflarestorage.com
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
appId: org.jeffvli.feishin
|
appId: org.jeffvli.feishin
|
||||||
productName: Feishin
|
productName: Feishin
|
||||||
artifactName: ${productName}-${version}-${os}-${arch}.${ext}
|
artifactName: ${productName}-${version}-${os}-${arch}.${ext}
|
||||||
electronVersion: 38.5.0
|
electronVersion: 39.4.0
|
||||||
directories:
|
directories:
|
||||||
buildResources: assets
|
buildResources: assets
|
||||||
files:
|
files:
|
||||||
@@ -13,9 +13,15 @@ asarUnpack:
|
|||||||
- resources/**
|
- resources/**
|
||||||
win:
|
win:
|
||||||
target:
|
target:
|
||||||
- zip
|
- target: zip
|
||||||
- nsis
|
arch:
|
||||||
icon: assets/icons/icon.png
|
- x64
|
||||||
|
- arm64
|
||||||
|
- target: nsis
|
||||||
|
arch:
|
||||||
|
- x64
|
||||||
|
- arm64
|
||||||
|
icon: assets/icons/icon.ico
|
||||||
|
|
||||||
nsis:
|
nsis:
|
||||||
allowToChangeInstallationDirectory: true
|
allowToChangeInstallationDirectory: true
|
||||||
@@ -26,17 +32,23 @@ nsis:
|
|||||||
|
|
||||||
mac:
|
mac:
|
||||||
target:
|
target:
|
||||||
target: default
|
- target: dmg
|
||||||
arch:
|
arch:
|
||||||
- arm64
|
- arm64
|
||||||
- x64
|
- x64
|
||||||
icon: assets/icons/icon.icns
|
- target: zip
|
||||||
|
arch:
|
||||||
|
- arm64
|
||||||
|
- x64
|
||||||
|
icon: media/feishin.icon
|
||||||
type: distribution
|
type: distribution
|
||||||
hardenedRuntime: true
|
hardenedRuntime: false
|
||||||
entitlements: assets/entitlements.mac.plist
|
identity: '-'
|
||||||
entitlementsInherit: assets/entitlements.mac.plist
|
|
||||||
gatekeeperAssess: false
|
gatekeeperAssess: false
|
||||||
notarize: 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:
|
dmg:
|
||||||
contents: [{ x: 130, y: 220 }, { x: 410, y: 220, type: link, path: /Applications }]
|
contents: [{ x: 130, y: 220 }, { x: 410, y: 220, type: link, path: /Applications }]
|
||||||
@@ -50,6 +62,9 @@ linux:
|
|||||||
icon: assets/icons/icon.png
|
icon: assets/icons/icon.png
|
||||||
artifactName: ${productName}-${os}-${arch}.${ext}
|
artifactName: ${productName}-${os}-${arch}.${ext}
|
||||||
|
|
||||||
|
toolsets:
|
||||||
|
appimage: '1.0.2'
|
||||||
|
|
||||||
npmRebuild: false
|
npmRebuild: false
|
||||||
publish:
|
publish:
|
||||||
provider: github
|
provider: github
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
appId: org.jeffvli.feishin
|
appId: org.jeffvli.feishin
|
||||||
productName: Feishin
|
productName: Feishin
|
||||||
artifactName: ${productName}-${version}-${os}-${arch}.${ext}
|
artifactName: ${productName}-${version}-${os}-${arch}.${ext}
|
||||||
electronVersion: 38.5.0
|
electronVersion: 39.4.0
|
||||||
directories:
|
directories:
|
||||||
buildResources: assets
|
buildResources: assets
|
||||||
files:
|
files:
|
||||||
@@ -13,9 +13,15 @@ asarUnpack:
|
|||||||
- resources/**
|
- resources/**
|
||||||
win:
|
win:
|
||||||
target:
|
target:
|
||||||
- zip
|
- target: zip
|
||||||
- nsis
|
arch:
|
||||||
icon: assets/icons/icon.png
|
- x64
|
||||||
|
- arm64
|
||||||
|
- target: nsis
|
||||||
|
arch:
|
||||||
|
- x64
|
||||||
|
- arm64
|
||||||
|
icon: assets/icons/icon.ico
|
||||||
|
|
||||||
nsis:
|
nsis:
|
||||||
allowToChangeInstallationDirectory: true
|
allowToChangeInstallationDirectory: true
|
||||||
@@ -26,17 +32,23 @@ nsis:
|
|||||||
|
|
||||||
mac:
|
mac:
|
||||||
target:
|
target:
|
||||||
target: default
|
- target: dmg
|
||||||
arch:
|
arch:
|
||||||
- arm64
|
- arm64
|
||||||
- x64
|
- x64
|
||||||
icon: assets/icons/icon.icns
|
- target: zip
|
||||||
|
arch:
|
||||||
|
- arm64
|
||||||
|
- x64
|
||||||
|
icon: media/feishin.icon
|
||||||
type: distribution
|
type: distribution
|
||||||
hardenedRuntime: true
|
hardenedRuntime: false
|
||||||
entitlements: assets/entitlements.mac.plist
|
identity: '-'
|
||||||
entitlementsInherit: assets/entitlements.mac.plist
|
|
||||||
gatekeeperAssess: false
|
gatekeeperAssess: false
|
||||||
notarize: 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:
|
dmg:
|
||||||
contents: [{ x: 130, y: 220 }, { x: 410, y: 220, type: link, path: /Applications }]
|
contents: [{ x: 130, y: 220 }, { x: 410, y: 220, type: link, path: /Applications }]
|
||||||
@@ -50,7 +62,11 @@ linux:
|
|||||||
icon: assets/icons/icon.png
|
icon: assets/icons/icon.png
|
||||||
artifactName: ${productName}-${os}-${arch}.${ext}
|
artifactName: ${productName}-${os}-${arch}.${ext}
|
||||||
|
|
||||||
|
toolsets:
|
||||||
|
appimage: '1.0.2'
|
||||||
|
|
||||||
npmRebuild: false
|
npmRebuild: false
|
||||||
|
afterAllArtifactBuild: scripts/after-all-artifact-build.mjs
|
||||||
publish:
|
publish:
|
||||||
provider: github
|
provider: github
|
||||||
owner: jeffvli
|
owner: jeffvli
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
import react from '@vitejs/plugin-react';
|
|
||||||
import { externalizeDepsPlugin, UserConfig } from 'electron-vite';
|
import { externalizeDepsPlugin, UserConfig } from 'electron-vite';
|
||||||
import { resolve } from 'path';
|
import { resolve } from 'path';
|
||||||
import conditionalImportPlugin from 'vite-plugin-conditional-import';
|
import conditionalImportPlugin from 'vite-plugin-conditional-import';
|
||||||
import dynamicImportPlugin from 'vite-plugin-dynamic-import';
|
import dynamicImportPlugin from 'vite-plugin-dynamic-import';
|
||||||
import { ViteEjsPlugin } from 'vite-plugin-ejs';
|
import { ViteEjsPlugin } from 'vite-plugin-ejs';
|
||||||
|
|
||||||
|
import { createReactPlugin } from './vite.react-plugin';
|
||||||
|
|
||||||
const currentOSEnv = process.platform;
|
const currentOSEnv = process.platform;
|
||||||
|
const electronRendererTarget = 'chrome87';
|
||||||
|
|
||||||
const config: UserConfig = {
|
const config: UserConfig = {
|
||||||
main: {
|
main: {
|
||||||
@@ -36,6 +38,9 @@ const config: UserConfig = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
preload: {
|
preload: {
|
||||||
|
build: {
|
||||||
|
sourcemap: true,
|
||||||
|
},
|
||||||
plugins: [externalizeDepsPlugin()],
|
plugins: [externalizeDepsPlugin()],
|
||||||
resolve: {
|
resolve: {
|
||||||
alias: {
|
alias: {
|
||||||
@@ -48,7 +53,11 @@ const config: UserConfig = {
|
|||||||
build: {
|
build: {
|
||||||
cssMinify: 'esbuild',
|
cssMinify: 'esbuild',
|
||||||
minify: 'esbuild',
|
minify: 'esbuild',
|
||||||
|
modulePreload: {
|
||||||
|
polyfill: false,
|
||||||
|
},
|
||||||
sourcemap: true,
|
sourcemap: true,
|
||||||
|
target: electronRendererTarget,
|
||||||
},
|
},
|
||||||
css: {
|
css: {
|
||||||
modules: {
|
modules: {
|
||||||
@@ -56,7 +65,7 @@ const config: UserConfig = {
|
|||||||
localsConvention: 'camelCase',
|
localsConvention: 'camelCase',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
plugins: [react(), ViteEjsPlugin({ web: false })],
|
plugins: [createReactPlugin(), ViteEjsPlugin({ web: false })],
|
||||||
resolve: {
|
resolve: {
|
||||||
alias: {
|
alias: {
|
||||||
'/@/i18n': resolve('src/i18n'),
|
'/@/i18n': resolve('src/i18n'),
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ export default tseslint.config(
|
|||||||
'react-refresh': eslintPluginReactRefresh,
|
'react-refresh': eslintPluginReactRefresh,
|
||||||
},
|
},
|
||||||
rules: {
|
rules: {
|
||||||
...eslintPluginReactHooks.configs.recommended.rules,
|
...eslintPluginReactHooks.configs['recommended-latest'].rules,
|
||||||
...eslintPluginReactRefresh.configs.vite.rules,
|
...eslintPluginReactRefresh.configs.vite.rules,
|
||||||
'@typescript-eslint/explicit-function-return-type': 'off',
|
'@typescript-eslint/explicit-function-return-type': 'off',
|
||||||
'@typescript-eslint/no-duplicate-enum-values': '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 {
|
server {
|
||||||
listen 9180;
|
listen 9180;
|
||||||
|
listen [::]:9180;
|
||||||
sendfile on;
|
sendfile on;
|
||||||
default_type application/octet-stream;
|
default_type application/octet-stream;
|
||||||
|
|
||||||
@@ -19,9 +20,11 @@ server {
|
|||||||
|
|
||||||
location ${PUBLIC_PATH}settings.js {
|
location ${PUBLIC_PATH}settings.js {
|
||||||
alias /etc/nginx/conf.d/settings.js;
|
alias /etc/nginx/conf.d/settings.js;
|
||||||
|
add_header Cache-Control "no-store";
|
||||||
}
|
}
|
||||||
|
|
||||||
location ${PUBLIC_PATH}/settings.js {
|
location ${PUBLIC_PATH}/settings.js {
|
||||||
alias /etc/nginx/conf.d/settings.js;
|
alias /etc/nginx/conf.d/settings.js;
|
||||||
|
add_header Cache-Control "no-store";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "feishin",
|
"name": "feishin",
|
||||||
"version": "1.0.1",
|
"version": "1.11.0",
|
||||||
"description": "A modern self-hosted music player.",
|
"description": "A modern self-hosted music player.",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"subsonic",
|
"subsonic",
|
||||||
@@ -30,29 +30,37 @@
|
|||||||
"dev:watch": "electron-vite dev --watch",
|
"dev:watch": "electron-vite dev --watch",
|
||||||
"i18next": "i18next -c src/i18n/i18next-parser.config.js",
|
"i18next": "i18next -c src/i18n/i18next-parser.config.js",
|
||||||
"postinstall": "electron-builder install-app-deps",
|
"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": "eslint --max-warnings=0 --cache .",
|
||||||
"lint-code:fix": "eslint --cache --fix .",
|
"lint-code:fix": "eslint --cache --fix .",
|
||||||
"lint-styles": "stylelint --max-warnings=0 'src/**/*.{css,scss}'",
|
"lint-styles": "stylelint --max-warnings=0 'src/**/*.{css,scss}'",
|
||||||
"lint-styles:fix": "stylelint 'src/**/*.{css,scss}' --fix",
|
"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": "pnpm run build && electron-builder",
|
||||||
"package:dev": "pnpm run build && electron-builder --dir",
|
"package:dev": "pnpm run build && electron-builder --dir",
|
||||||
"package:linux": "pnpm run build && electron-builder --linux",
|
"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: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": "pnpm run build && electron-builder --mac",
|
||||||
"package:mac:pr": "pnpm run build && electron-builder --mac --publish never",
|
"package:mac:pr": "pnpm run build && electron-builder --mac --publish never",
|
||||||
"package:win": "pnpm run build && electron-builder --win",
|
"package:win": "pnpm run build && electron-builder --win",
|
||||||
"package:win:pr": "pnpm run build && electron-builder --win --publish never",
|
"package:win:pr": "pnpm run build && electron-builder --win --publish never",
|
||||||
|
"package:win-arm64:pr": "pnpm run build && electron-builder --win --arm64 --publish never",
|
||||||
"publish:linux": "pnpm run build && electron-builder --publish always --linux",
|
"publish:linux": "pnpm run build && electron-builder --publish always --linux",
|
||||||
"publish:linux-arm64": "pnpm run build && electron-builder --publish always --linux --arm64",
|
"publish:linux:alpha": "pnpm run build && electron-builder --config electron-builder-alpha.yml --publish always --linux",
|
||||||
"publish:linux-arm64:beta": "pnpm run build && electron-builder --config electron-builder-beta.yml --publish always --linux --arm64",
|
|
||||||
"publish:linux:beta": "pnpm run build && electron-builder --config electron-builder-beta.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": "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: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": "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: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",
|
"start": "electron-vite preview",
|
||||||
"typecheck": "pnpm run typecheck:node && pnpm run typecheck:web",
|
"typecheck": "pnpm run typecheck:node && pnpm run typecheck:web",
|
||||||
"typecheck:node": "tsc --noEmit -p tsconfig.node.json --composite false",
|
"typecheck:node": "tsc --noEmit -p tsconfig.node.json --composite false",
|
||||||
@@ -60,121 +68,123 @@
|
|||||||
"version": "pnpm version --no-git-tag-version",
|
"version": "pnpm version --no-git-tag-version",
|
||||||
"postversion": "node ./scripts/update-app-stream.mjs"
|
"postversion": "node ./scripts/update-app-stream.mjs"
|
||||||
},
|
},
|
||||||
|
"resolutions": {
|
||||||
|
"react-router": "7.14.0",
|
||||||
|
"xml2js": "0.5.0"
|
||||||
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@atlaskit/pragmatic-drag-and-drop": "1.7.7",
|
"@atlaskit/pragmatic-drag-and-drop": "1.7.7",
|
||||||
"@atlaskit/pragmatic-drag-and-drop-auto-scroll": "^2.1.2",
|
"@atlaskit/pragmatic-drag-and-drop-auto-scroll": "^2.1.5",
|
||||||
"@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.1.0",
|
"@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.1.0",
|
||||||
"@electron-toolkit/preload": "^3.0.1",
|
"@electron-toolkit/preload": "^3.0.2",
|
||||||
"@electron-toolkit/utils": "^4.0.0",
|
"@electron-toolkit/utils": "^4.0.0",
|
||||||
"@mantine/colors-generator": "^8.3.8",
|
"@mantine/colors-generator": "^9.1.1",
|
||||||
"@mantine/core": "^8.3.8",
|
"@mantine/core": "^9.1.1",
|
||||||
"@mantine/dates": "^8.3.8",
|
"@mantine/dates": "^9.1.1",
|
||||||
"@mantine/form": "^8.3.8",
|
"@mantine/form": "^9.1.1",
|
||||||
"@mantine/hooks": "^8.3.8",
|
"@mantine/hooks": "^9.1.1",
|
||||||
"@mantine/modals": "^8.3.8",
|
"@mantine/modals": "^9.1.1",
|
||||||
"@mantine/notifications": "^8.3.8",
|
"@mantine/notifications": "^9.1.1",
|
||||||
"@radix-ui/react-context-menu": "^2.2.16",
|
"@radix-ui/react-context-menu": "^2.2.16",
|
||||||
"@tanstack/react-query": "^5.90.9",
|
"@tanstack/react-query": "^5.96.2",
|
||||||
"@tanstack/react-query-devtools": "^5.90.2",
|
"@tanstack/react-query-devtools": "^5.96.2",
|
||||||
"@tanstack/react-query-persist-client": "^5.90.11",
|
"@tanstack/react-query-persist-client": "^5.96.2",
|
||||||
"@ts-rest/core": "^3.52.1",
|
"@ts-rest/core": "^3.52.1",
|
||||||
"@wavesurfer/react": "^1.0.11",
|
"@wavesurfer/react": "^1.0.12",
|
||||||
"@xhayper/discord-rpc": "^1.3.0",
|
"@xhayper/discord-rpc": "^1.3.3",
|
||||||
"audiomotion-analyzer": "^4.5.1",
|
"audiomotion-analyzer": "^4.5.4",
|
||||||
"axios": "^1.13.2",
|
"axios": "^1.14.0",
|
||||||
"butterchurn": "^2.6.7",
|
"butterchurn": "3.0.0-beta.5",
|
||||||
"butterchurn-presets": "^2.4.7",
|
"butterchurn-presets": "3.0.0-beta.4",
|
||||||
"cheerio": "^1.1.2",
|
"cheerio": "^1.2.0",
|
||||||
"clsx": "^2.1.1",
|
"clsx": "^2.1.1",
|
||||||
"cmdk": "^1.1.1",
|
"cmdk": "^1.1.1",
|
||||||
"dayjs": "^1.11.19",
|
"dayjs": "^1.11.20",
|
||||||
"dompurify": "^3.3.0",
|
"dompurify": "^3.3.3",
|
||||||
"electron-debug": "^3.2.0",
|
"electron-debug": "^3.2.0",
|
||||||
"electron-localshortcut": "^3.2.1",
|
"electron-localshortcut": "^3.2.1",
|
||||||
"electron-log": "^5.4.3",
|
"electron-log": "^5.4.3",
|
||||||
"electron-store": "^8.2.0",
|
"electron-store": "^8.2.0",
|
||||||
"electron-updater": "^6.6.2",
|
"electron-updater": "^6.8.3",
|
||||||
"fast-average-color": "^9.5.0",
|
"fast-average-color": "9.5.0",
|
||||||
"fast-xml-parser": "^5.3.2",
|
"fast-xml-parser": "^5.5.10",
|
||||||
"format-duration": "^3.0.2",
|
"format-duration": "^3.0.2",
|
||||||
"fuse.js": "^7.1.0",
|
"fuse.js": "^7.2.0",
|
||||||
"i18next": "^25.6.2",
|
"i18next": "^25.10.10",
|
||||||
"icecast-metadata-stats": "^0.1.12",
|
"icecast-metadata-stats": "^0.1.12",
|
||||||
"idb-keyval": "^6.2.2",
|
"idb-keyval": "^6.2.2",
|
||||||
"immer": "^10.2.0",
|
"immer": "^10.2.0",
|
||||||
"is-electron": "^2.2.2",
|
"is-electron": "^2.2.2",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.18.1",
|
||||||
"md5": "^2.3.0",
|
"md5": "^2.3.0",
|
||||||
"motion": "^12.23.24",
|
"motion": "^12.38.0",
|
||||||
"mpris-service": "^2.1.2",
|
"mpris-service": "^2.1.2",
|
||||||
"nanoid": "^3.3.11",
|
"nanoid": "^3.3.11",
|
||||||
"node-mpv": "github:jeffvli/Node-MPV#32b4d64395289ad710c41d481d2707a7acfc228f",
|
"node-mpv": "github:jeffvli/Node-MPV#32b4d64395289ad710c41d481d2707a7acfc228f",
|
||||||
"nuqs": "^2.7.1",
|
"overlayscrollbars": "^2.14.0",
|
||||||
"overlayscrollbars": "^2.11.1",
|
|
||||||
"overlayscrollbars-react": "^0.5.6",
|
"overlayscrollbars-react": "^0.5.6",
|
||||||
"qs": "^6.14.0",
|
"qs": "^6.15.0",
|
||||||
"react": "^19.1.0",
|
"react": "^19.2.4",
|
||||||
"react-call": "^1.8.1",
|
"react-call": "^1.8.2",
|
||||||
"react-dom": "^19.1.0",
|
"react-dom": "^19.2.4",
|
||||||
"react-error-boundary": "^5.0.0",
|
"react-error-boundary": "^5.0.0",
|
||||||
"react-i18next": "^16.3.3",
|
"react-i18next": "^16.6.6",
|
||||||
"react-icons": "^5.5.0",
|
"react-icons": "^5.6.0",
|
||||||
"react-image": "^4.1.0",
|
"react-player": "^2.16.1",
|
||||||
"react-loading-skeleton": "^3.5.0",
|
"react-router": "^7.14.0",
|
||||||
"react-player": "^2.16.0",
|
"react-split-pane": "^3.2.0",
|
||||||
"react-router": "^7.9.6",
|
|
||||||
"react-split-pane": "^3.0.4",
|
|
||||||
"react-virtualized-auto-sizer": "^1.0.26",
|
"react-virtualized-auto-sizer": "^1.0.26",
|
||||||
"react-window": "1.8.11",
|
"react-window": "1.8.11",
|
||||||
"react-window-v2": "npm:react-window@^2.2.3",
|
"react-window-v2": "npm:react-window@^2.2.7",
|
||||||
"semver": "^7.5.4",
|
"semver": "^7.7.4",
|
||||||
"string-to-color": "^2.2.2",
|
"string-to-color": "^2.2.2",
|
||||||
"wavesurfer.js": "^7.11.1",
|
"wavesurfer.js": "^7.12.5",
|
||||||
"ws": "^8.18.2",
|
"ws": "^8.20.0",
|
||||||
"zod": "^3.22.3",
|
"zod": "^3.25.76",
|
||||||
"zustand": "^5.0.5"
|
"zustand": "^5.0.12"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@electron-toolkit/eslint-config-prettier": "^3.0.0",
|
"@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",
|
"@electron-toolkit/tsconfig": "^2.0.0",
|
||||||
"@types/electron-localshortcut": "^3.1.0",
|
"@types/electron-localshortcut": "^3.1.3",
|
||||||
"@types/lodash": "^4.17.18",
|
"@types/lodash": "^4.17.24",
|
||||||
"@types/md5": "^2.3.5",
|
"@types/md5": "^2.3.6",
|
||||||
"@types/node": "^24.10.1",
|
"@types/node": "^24.12.2",
|
||||||
"@types/react": "^19.2.5",
|
"@types/react": "^19.2.14",
|
||||||
"@types/react-dom": "^19.2.3",
|
"@types/react-dom": "^19.2.3",
|
||||||
"@types/react-window": "^1.8.8",
|
"@types/react-window": "^1.8.8",
|
||||||
"@types/source-map-support": "^0.5.10",
|
"@types/source-map-support": "^0.5.10",
|
||||||
"@types/ws": "^8.18.1",
|
"@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",
|
"concurrently": "^9.2.1",
|
||||||
"cross-env": "^10.1.0",
|
"cross-env": "^10.1.0",
|
||||||
"electron": "^38.5.0",
|
"electron": "^39.8.6",
|
||||||
"electron-builder": "^26.0.12",
|
"electron-builder": "^26.8.2",
|
||||||
"electron-devtools-installer": "^4.0.0",
|
"electron-devtools-installer": "^4.0.0",
|
||||||
"electron-vite": "^4.0.1",
|
"electron-vite": "^4.0.1",
|
||||||
"eslint": "^9.24.0",
|
"eslint": "^9.39.4",
|
||||||
"eslint-plugin-perfectionist": "^4.13.0",
|
"eslint-plugin-perfectionist": "^4.15.1",
|
||||||
"eslint-plugin-prettier": "^5.4.0",
|
"eslint-plugin-prettier": "^5.5.5",
|
||||||
"eslint-plugin-react": "^7.37.5",
|
"eslint-plugin-react": "^7.37.5",
|
||||||
"eslint-plugin-react-hooks": "^7.0.1",
|
"eslint-plugin-react-hooks": "^7.0.1",
|
||||||
"eslint-plugin-react-refresh": "^0.4.24",
|
"eslint-plugin-react-refresh": "^0.4.26",
|
||||||
"i18next-parser": "^9.3.0",
|
"i18next-parser": "^9.4.0",
|
||||||
"postcss-preset-mantine": "^1.18.0",
|
"postcss-preset-mantine": "^1.18.0",
|
||||||
"postcss-simple-vars": "^7.0.1",
|
"postcss-simple-vars": "^7.0.1",
|
||||||
"prettier": "^3.6.2",
|
"prettier": "^3.8.1",
|
||||||
"prettier-plugin-packagejson": "^2.5.19",
|
"prettier-plugin-packagejson": "^2.5.22",
|
||||||
"stylelint": "^16.25.0",
|
"stylelint": "^16.26.1",
|
||||||
"stylelint-config-css-modules": "^4.5.1",
|
"stylelint-config-css-modules": "^4.6.0",
|
||||||
"stylelint-config-recess-order": "^7.4.0",
|
"stylelint-config-recess-order": "^7.7.0",
|
||||||
"stylelint-config-standard": "^39.0.1",
|
"stylelint-config-standard": "^39.0.1",
|
||||||
"typescript": "^5.8.3",
|
"typescript": "^5.9.3",
|
||||||
"vite": "^7.2.2",
|
"vite": "^7.3.1",
|
||||||
"vite-plugin-conditional-import": "^0.1.7",
|
"vite-plugin-conditional-import": "^0.1.7",
|
||||||
"vite-plugin-dynamic-import": "^1.6.0",
|
"vite-plugin-dynamic-import": "^1.6.0",
|
||||||
"vite-plugin-ejs": "^1.7.0",
|
"vite-plugin-ejs": "^1.7.0",
|
||||||
"vite-plugin-pwa": "^1.1.0"
|
"vite-plugin-pwa": "^1.2.0"
|
||||||
},
|
},
|
||||||
"pnpm": {
|
"pnpm": {
|
||||||
"onlyBuiltDependencies": [
|
"onlyBuiltDependencies": [
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import react from '@vitejs/plugin-react';
|
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import { defineConfig, normalizePath } from 'vite';
|
import { defineConfig, normalizePath } from 'vite';
|
||||||
import { ViteEjsPlugin } from 'vite-plugin-ejs';
|
import { ViteEjsPlugin } from 'vite-plugin-ejs';
|
||||||
|
|
||||||
import { version } from './package.json';
|
import { version } from './package.json';
|
||||||
|
import { createReactPlugin } from './vite.react-plugin';
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
build: {
|
build: {
|
||||||
@@ -23,6 +23,7 @@ export default defineConfig({
|
|||||||
assetFileNames: '[name].[ext]',
|
assetFileNames: '[name].[ext]',
|
||||||
chunkFileNames: '[name].js',
|
chunkFileNames: '[name].js',
|
||||||
entryFileNames: '[name].js',
|
entryFileNames: '[name].js',
|
||||||
|
sourcemapExcludeSources: false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
sourcemap: true,
|
sourcemap: true,
|
||||||
@@ -34,7 +35,7 @@ export default defineConfig({
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
plugins: [
|
plugins: [
|
||||||
react(),
|
createReactPlugin(),
|
||||||
ViteEjsPlugin({
|
ViteEjsPlugin({
|
||||||
prod: process.env.NODE_ENV === 'production',
|
prod: process.env.NODE_ENV === 'production',
|
||||||
root: normalizePath(path.resolve(__dirname, './src/remote')),
|
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';
|
import path from 'path';
|
||||||
|
|
||||||
const args = process.argv.slice(2);
|
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);
|
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 packageContent = fs.readFileSync(packageFile, 'utf8');
|
||||||
const packageJson = JSON.parse(packageContent);
|
const packageJson = JSON.parse(packageContent);
|
||||||
const version = packageJson.version;
|
const version = packageJson.version;
|
||||||
|
|
||||||
const time = Math.floor((Date.parse(args[1]) || Date.now()) / 1000);
|
const time = Math.floor((Date.parse(positionalArgs[1]) || Date.now()) / 1000);
|
||||||
const metainfoFile = args[2] || path.resolve(process.cwd(), 'org.jeffvli.feishin.metainfo.xml');
|
const metainfoFile =
|
||||||
|
positionalArgs[2] || path.resolve(process.cwd(), 'org.jeffvli.feishin.metainfo.xml');
|
||||||
|
|
||||||
const parser = new XMLParser({ ignoreAttributes: false });
|
const parser = new XMLParser({ ignoreAttributes: false });
|
||||||
const metainfoContent = fs.readFileSync(metainfoFile, 'utf8');
|
const metainfoContent = fs.readFileSync(metainfoFile, 'utf8');
|
||||||
const metainfo = parser.parse(metainfoContent);
|
const metainfo = parser.parse(metainfoContent);
|
||||||
|
|
||||||
if (!metainfo.component.releases.release.find((release) => release['@_version'] === version)) {
|
const newRelease = {
|
||||||
metainfo.component.releases.release.unshift({
|
'@_date': new Date(time * 1000).toISOString().split('T')[0],
|
||||||
'@_date': new Date(time * 1000).toISOString().split('T')[0],
|
'@_type': version.includes('-') ? 'development' : 'stable',
|
||||||
'@_type': version.includes('-') ? 'development' : 'stable',
|
'@_version': version,
|
||||||
'@_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: ' ' });
|
const builder = new XMLBuilder({ format: true, ignoreAttributes: false, indentBy: ' ' });
|
||||||
|
|||||||
@@ -1 +1,90 @@
|
|||||||
"use strict";window.SERVER_URL="${SERVER_URL}";window.SERVER_NAME="${SERVER_NAME}";window.SERVER_TYPE="${SERVER_TYPE}";window.SERVER_LOCK=${SERVER_LOCK};
|
"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_LIST = "${FS_GENERAL_SIDEBAR_PLAYLIST_LIST}";
|
||||||
|
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_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_ENABLED = "${FS_AUTO_DJ_ENABLED}";
|
||||||
|
window.FS_AUTO_DJ_ITEM_COUNT = "${FS_AUTO_DJ_ITEM_COUNT}";
|
||||||
|
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 i18n from 'i18next';
|
||||||
import { initReactI18next } from 'react-i18next';
|
import { initReactI18next } from 'react-i18next';
|
||||||
|
|
||||||
@@ -203,25 +203,17 @@ const titleCasePostProcessor: PostProcessorModule = {
|
|||||||
type: 'postProcessor',
|
type: 'postProcessor',
|
||||||
};
|
};
|
||||||
|
|
||||||
const ignoreSentenceCaseLanguages = ['de'];
|
// const ignoreSentenceCaseLanguages = ['de'];
|
||||||
|
|
||||||
const sentenceCasePostProcessor: PostProcessorModule = {
|
const sentenceCasePostProcessor: PostProcessorModule = {
|
||||||
name: 'sentenceCase',
|
name: 'sentenceCase',
|
||||||
process: (
|
process: (value: string) => {
|
||||||
value: string,
|
|
||||||
_key: string,
|
|
||||||
_options: TOptions<Record<string, string>>,
|
|
||||||
translator: any,
|
|
||||||
) => {
|
|
||||||
const sentences = value.split('. ');
|
const sentences = value.split('. ');
|
||||||
|
|
||||||
return sentences
|
return sentences
|
||||||
.map((sentence) => {
|
.map((sentence) => {
|
||||||
return (
|
return (
|
||||||
sentence.charAt(0).toLocaleUpperCase() +
|
sentence.charAt(0).toLocaleUpperCase() + sentence.slice(1).toLocaleLowerCase()
|
||||||
(!ignoreSentenceCaseLanguages.includes(translator.language)
|
|
||||||
? sentence.slice(1).toLocaleLowerCase()
|
|
||||||
: sentence.slice(1))
|
|
||||||
);
|
);
|
||||||
})
|
})
|
||||||
.join('. ');
|
.join('. ');
|
||||||
|
|||||||
@@ -1,27 +1,33 @@
|
|||||||
{
|
{
|
||||||
"action": {
|
"action": {
|
||||||
"addToFavorites": "إضافة الى $t(entity.favorite_other)",
|
"addToFavorites": "إضافة الى $t(entity.favorite, {\"count\": 2})",
|
||||||
"addToPlaylist": "إضافة الى $t(entity.playlist_one)",
|
"addToPlaylist": "إضافة الى $t(entity.playlist, {\"count\": 1})",
|
||||||
"clearQueue": "مسح قائمة الإنتظار",
|
"clearQueue": "مسح قائمة الإنتظار",
|
||||||
"createPlaylist": "إنشاء $t(entity.playlist_one)",
|
"createPlaylist": "إنشاء $t(entity.playlist, {\"count\": 1})",
|
||||||
"deletePlaylist": "حذف $t(entity.playlist_one)",
|
"deletePlaylist": "حذف $t(entity.playlist, {\"count\": 1})",
|
||||||
"deselectAll": "إلغاء تحديد الكل",
|
"deselectAll": "إلغاء تحديد الكل",
|
||||||
"editPlaylist": "تعديل $t(entity.playlist_one)",
|
"editPlaylist": "تعديل $t(entity.playlist, {\"count\": 1})",
|
||||||
"goToPage": "اذهب الى صفحة",
|
"goToPage": "اذهب الى صفحة",
|
||||||
"moveToNext": "الذهاب الى التالي",
|
"moveToNext": "الذهاب الى التالي",
|
||||||
"moveToBottom": "الذهاب الى الأسفل",
|
"moveToBottom": "الذهاب الى الأسفل",
|
||||||
"moveToTop": "الذهاب الى الأعلى",
|
"moveToTop": "الذهاب الى الأعلى",
|
||||||
"refresh": "$t(common.refresh)",
|
"refresh": "$t(common.refresh)",
|
||||||
"removeFromFavorites": "حذف من $t(entity.favorite_other)",
|
"removeFromFavorites": "حذف من $t(entity.favorite, {\"count\": 2})",
|
||||||
"removeFromPlaylist": "حذف من $t(entity.playlist_one)",
|
"removeFromPlaylist": "حذف من $t(entity.playlist, {\"count\": 1})",
|
||||||
"removeFromQueue": "حذف من قائمة الإنتظار",
|
"removeFromQueue": "حذف من قائمة الإنتظار",
|
||||||
"setRating": "تحديد التقييم",
|
"setRating": "تحديد التقييم",
|
||||||
"toggleSmartPlaylistEditor": "تشغيل / إطفاء وضع التعديل لـ $t(entity.smartPlaylist)",
|
"toggleSmartPlaylistEditor": "تشغيل / إطفاء وضع التعديل لـ $t(entity.smartPlaylist)",
|
||||||
"viewPlaylists": "إظهار $t(entity.playlist_other)",
|
"viewPlaylists": "إظهار $t(entity.playlist, {\"count\": 2})",
|
||||||
"openIn": {
|
"openIn": {
|
||||||
"lastfm": "فتح في Last.fm",
|
"lastfm": "فتح في Last.fm",
|
||||||
"musicbrainz": "فتح في MusicBrainz"
|
"musicbrainz": "فتح في MusicBrainz"
|
||||||
}
|
},
|
||||||
|
"addOrRemoveFromSelection": "إضافة أو إزالة من الإختيارات",
|
||||||
|
"selectRangeOfItems": "اختر مجموعة من العناصر",
|
||||||
|
"goToCurrent": "الانتقال إلى العنصر الحالي",
|
||||||
|
"createRadioStation": "يخلق $t(entity.radioStation, {\"count\": 1})",
|
||||||
|
"deleteRadioStation": "يمسح $t(entity.radioStation, {\"count\": 1})",
|
||||||
|
"selectAll": "تحديد الكل"
|
||||||
},
|
},
|
||||||
"common": {
|
"common": {
|
||||||
"action_zero": "عملية",
|
"action_zero": "عملية",
|
||||||
@@ -59,7 +65,7 @@
|
|||||||
"configure": "تعديل",
|
"configure": "تعديل",
|
||||||
"confirm": "تأكيد",
|
"confirm": "تأكيد",
|
||||||
"create": "إنشاء",
|
"create": "إنشاء",
|
||||||
"currentSong": "$t(entity.track_one) الحالي",
|
"currentSong": "$t(entity.track, {\"count\": 1}) الحالي",
|
||||||
"decrease": "تنقيص",
|
"decrease": "تنقيص",
|
||||||
"delete": "حذف",
|
"delete": "حذف",
|
||||||
"descending": "تنازلي",
|
"descending": "تنازلي",
|
||||||
@@ -102,7 +108,7 @@
|
|||||||
"path": "المسار",
|
"path": "المسار",
|
||||||
"playerMustBePaused": "يجب إيقاف المشغل",
|
"playerMustBePaused": "يجب إيقاف المشغل",
|
||||||
"preview": "معاينة",
|
"preview": "معاينة",
|
||||||
"previousSong": "$t(entity.track_one) السابق",
|
"previousSong": "$t(entity.track, {\"count\": 1}) السابق",
|
||||||
"quit": "خروج",
|
"quit": "خروج",
|
||||||
"random": "عشوائي",
|
"random": "عشوائي",
|
||||||
"rating": "التقييم",
|
"rating": "التقييم",
|
||||||
@@ -117,7 +123,12 @@
|
|||||||
"saveAndReplace": "حفظ واستبدال",
|
"saveAndReplace": "حفظ واستبدال",
|
||||||
"saveAs": "حفظ بإسم",
|
"saveAs": "حفظ بإسم",
|
||||||
"search": "بحث",
|
"search": "بحث",
|
||||||
"setting": "إعداد",
|
"setting_zero": "إعداد",
|
||||||
|
"setting_one": "",
|
||||||
|
"setting_two": "",
|
||||||
|
"setting_few": "",
|
||||||
|
"setting_many": "",
|
||||||
|
"setting_other": "",
|
||||||
"share": "نشر",
|
"share": "نشر",
|
||||||
"size": "حجم",
|
"size": "حجم",
|
||||||
"sortOrder": "الترتيب",
|
"sortOrder": "الترتيب",
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
"unfavorite": "حذف از موردعلاقهها",
|
"unfavorite": "حذف از موردعلاقهها",
|
||||||
"shuffle_off": "پخش تصادفی غیر فعال",
|
"shuffle_off": "پخش تصادفی غیر فعال",
|
||||||
"skip_forward": "برو جلو",
|
"skip_forward": "برو جلو",
|
||||||
"queue_moveToTop": "جابجا کردن انتخاب شده به پایین",
|
"queue_moveToTop": "جابجا کردن انتخاب شده به بالا",
|
||||||
"queue_clear": "خالی کردن صف",
|
"queue_clear": "خالی کردن صف",
|
||||||
"queue_remove": "حذف انتخاب شده",
|
"queue_remove": "حذف انتخاب شده",
|
||||||
"addLast": "افزودن به پایان",
|
"addLast": "افزودن به پایان",
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
"mute": "بیصدا کردن",
|
"mute": "بیصدا کردن",
|
||||||
"playbackFetchCancel": "دارد طول میکشد... برای لفو کردن اعلان را ببندید",
|
"playbackFetchCancel": "دارد طول میکشد... برای لفو کردن اعلان را ببندید",
|
||||||
"playbackFetchInProgress": "بارگذاری قطعهها…",
|
"playbackFetchInProgress": "بارگذاری قطعهها…",
|
||||||
"queue_moveToBottom": "جابجا کردن انتخاب شده به بالا",
|
"queue_moveToBottom": "جابجا کردن انتخاب شده به پایین",
|
||||||
"addNext": "افزودن به پسین",
|
"addNext": "افزودن به پسین",
|
||||||
"favorite": "مورد علاقه",
|
"favorite": "مورد علاقه",
|
||||||
"playSimilarSongs": "پخش آهنگهای همگون",
|
"playSimilarSongs": "پخش آهنگهای همگون",
|
||||||
@@ -33,23 +33,23 @@
|
|||||||
"muted": "بیصدا"
|
"muted": "بیصدا"
|
||||||
},
|
},
|
||||||
"action": {
|
"action": {
|
||||||
"editPlaylist": "ویرایش $t(entity.playlist_one)",
|
"editPlaylist": "ویرایش $t(entity.playlist, {\"count\": 1})",
|
||||||
"goToPage": "برو به صفحهٔ",
|
"goToPage": "برو به صفحهٔ",
|
||||||
"moveToTop": "انتقال به بالا",
|
"moveToTop": "انتقال به بالا",
|
||||||
"clearQueue": "خالی کردن صف",
|
"clearQueue": "خالی کردن صف",
|
||||||
"addToFavorites": "افزودن به $t(entity.favorite_other)",
|
"addToFavorites": "افزودن به $t(entity.favorite, {\"count\": 2})",
|
||||||
"addToPlaylist": "افزودن به $t(entity.playlist_one)",
|
"addToPlaylist": "افزودن به $t(entity.playlist, {\"count\": 1})",
|
||||||
"createPlaylist": "ساخت $t(entity.playlist_one)",
|
"createPlaylist": "ساخت $t(entity.playlist, {\"count\": 1})",
|
||||||
"removeFromPlaylist": "حذف از $t(entity.playlist_one)",
|
"removeFromPlaylist": "حذف از $t(entity.playlist, {\"count\": 1})",
|
||||||
"viewPlaylists": "نمایش $t(entity.playlist_other)",
|
"viewPlaylists": "نمایش $t(entity.playlist, {\"count\": 2})",
|
||||||
"refresh": "$t(common.refresh)",
|
"refresh": "$t(common.refresh)",
|
||||||
"deletePlaylist": "حذف $t(entity.playlist_one)",
|
"deletePlaylist": "حذف $t(entity.playlist, {\"count\": 1})",
|
||||||
"removeFromQueue": "حذف از صف",
|
"removeFromQueue": "حذف از صف",
|
||||||
"deselectAll": "لغو انتخاب همه",
|
"deselectAll": "لغو انتخاب همه",
|
||||||
"moveToBottom": "انتقال به پایین",
|
"moveToBottom": "انتقال به پایین",
|
||||||
"setRating": "تعیین امتیاز",
|
"setRating": "تعیین امتیاز",
|
||||||
"toggleSmartPlaylistEditor": "تغییر ویرایشگر $t(entity.smartPlaylist)",
|
"toggleSmartPlaylistEditor": "تغییر ویرایشگر $t(entity.smartPlaylist)",
|
||||||
"removeFromFavorites": "حذف از $t(entity.favorite_other)",
|
"removeFromFavorites": "حذف از $t(entity.favorite, {\"count\": 2})",
|
||||||
"openIn": {
|
"openIn": {
|
||||||
"lastfm": "باز کردن در Last.fm",
|
"lastfm": "باز کردن در Last.fm",
|
||||||
"musicbrainz": "باز کردن در MusicBranz"
|
"musicbrainz": "باز کردن در MusicBranz"
|
||||||
@@ -70,22 +70,21 @@
|
|||||||
"hotkey_rate1": "امتیاز ۱ ستاره",
|
"hotkey_rate1": "امتیاز ۱ ستاره",
|
||||||
"hotkey_skipForward": "برو جلو",
|
"hotkey_skipForward": "برو جلو",
|
||||||
"disableLibraryUpdateOnStartup": "غیرفعال کردن بررسی آخرین نسخه در آغاز به کار برنامه",
|
"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)",
|
"playButtonBehavior_optionAddLast": "$t(player.addLast)",
|
||||||
"hotkey_playbackPlay": "پخش",
|
"hotkey_playbackPlay": "پخش",
|
||||||
"hotkey_volumeDown": "کم کردن صدا",
|
"hotkey_volumeDown": "کم کردن صدا",
|
||||||
"audioPlayer_description": "پخشکنندهٔ صدا را برای پخش انتخاب کنید",
|
"audioPlayer_description": "پخشکنندهٔ صدا را برای پخش انتخاب کنید",
|
||||||
"hotkey_globalSearch": "جست و جوی سراسری",
|
"hotkey_globalSearch": "جست و جوی سراسری",
|
||||||
"disableAutomaticUpdates": "غیرفعال کردن بهروزرسانی خودکار",
|
|
||||||
"exitToTray_description": "خروج از اپلیکیشن به system tray",
|
"exitToTray_description": "خروج از اپلیکیشن به system tray",
|
||||||
"replayGainMode_optionAlbum": "$t(entity.album_one)",
|
"replayGainMode_optionAlbum": "$t(entity.album, {\"count\": 1})",
|
||||||
"discordUpdateInterval_description": "فاصلهٔ بین هر به روزرسانی به ثانیه (حداقل ۱۵ ثانیه)",
|
"discordUpdateInterval_description": "فاصلهٔ بین هر به روزرسانی به ثانیه (حداقل ۱۵ ثانیه)",
|
||||||
"audioExclusiveMode": "حالت اختصاصی صدا",
|
"audioExclusiveMode": "حالت اختصاصی صدا",
|
||||||
"remotePassword": "رمز عبور کنترل از راه دور",
|
"remotePassword": "رمز عبور کنترل از راه دور",
|
||||||
"language_description": "زبان اپلیکیشن را معین میکند $t(common.restartRequired)",
|
"language_description": "زبان اپلیکیشن را معین میکند $t(common.restartRequired)",
|
||||||
"hotkey_rate3": "امتیاز ۳ ستاره",
|
"hotkey_rate3": "امتیاز ۳ ستاره",
|
||||||
"font": "قلم",
|
"font": "قلم",
|
||||||
"replayGainMode_optionTrack": "$t(entity.track_one)",
|
"replayGainMode_optionTrack": "$t(entity.track, {\"count\": 1})",
|
||||||
"hotkey_toggleFullScreenPlayer": "تغییر به پخشکنندهٔ تمامصفحه",
|
"hotkey_toggleFullScreenPlayer": "تغییر به پخشکنندهٔ تمامصفحه",
|
||||||
"hotkey_localSearch": "جست و جو در صفحه",
|
"hotkey_localSearch": "جست و جو در صفحه",
|
||||||
"hotkey_toggleQueue": "تغییر صف",
|
"hotkey_toggleQueue": "تغییر صف",
|
||||||
@@ -110,7 +109,7 @@
|
|||||||
"customFontPath": "مسیر قلم سفارشی",
|
"customFontPath": "مسیر قلم سفارشی",
|
||||||
"audioPlayer": "پخشکنندهٔ صدا",
|
"audioPlayer": "پخشکنندهٔ صدا",
|
||||||
"hotkey_rate0": "حذف امتیاز",
|
"hotkey_rate0": "حذف امتیاز",
|
||||||
"discordApplicationId": "{{discord}} application id",
|
"discordApplicationId": "{{discord}} application ID",
|
||||||
"hotkey_volumeMute": "بستن صدا",
|
"hotkey_volumeMute": "بستن صدا",
|
||||||
"showSkipButton": "نمایش دکمهٔ رد کردن",
|
"showSkipButton": "نمایش دکمهٔ رد کردن",
|
||||||
"customFontPath_description": "مسیر قلم سفارشی را برای استفاده در اپلیکیشن مشخص کنید",
|
"customFontPath_description": "مسیر قلم سفارشی را برای استفاده در اپلیکیشن مشخص کنید",
|
||||||
@@ -133,7 +132,7 @@
|
|||||||
"buttonSize": "اندازهی دکمهی پخش نوار",
|
"buttonSize": "اندازهی دکمهی پخش نوار",
|
||||||
"contextMenu": "پیکربندی فهرست زمینه (کلیک راست)",
|
"contextMenu": "پیکربندی فهرست زمینه (کلیک راست)",
|
||||||
"buttonSize_description": "اندازهی دکمههای پخش نوار",
|
"buttonSize_description": "اندازهی دکمههای پخش نوار",
|
||||||
"audioExclusiveMode_description": "حالت اختصاصی خروجی را فعال میکند. در این حالت، سامانه معمولاً قفل است و فقط mpv میتواند خروجی صدا دهد",
|
"audioExclusiveMode_description": "حالت اختصاصی خروجی را فعال میکند. در این حالت، سامانه معمولاً قفل است و فقط MPV میتواند خروجی صدا دهد",
|
||||||
"clearQueryCache_description": "یک 'پاکسازی نرم' از فیشین. این فهرستهای پخش و فرادادهی قطعهها را تازه میکند و متن شعرهای ذخیره شده را بازنشانی میکند. پیکربندیها، اعتبارنامههای سرویسدهنده و نگارههای کَش شده حفظ میشوند",
|
"clearQueryCache_description": "یک 'پاکسازی نرم' از فیشین. این فهرستهای پخش و فرادادهی قطعهها را تازه میکند و متن شعرهای ذخیره شده را بازنشانی میکند. پیکربندیها، اعتبارنامههای سرویسدهنده و نگارههای کَش شده حفظ میشوند",
|
||||||
"clearCache_description": "یک 'پاکسازی سخت' فیشین. افزون بر پاکسازی کَش فیشین، کَش مرورگر هم تهی میشود (نگارههای ذخیره شده و باقی داراییها). اعتبارنامهها و پیکربندیها حفظ میشوند",
|
"clearCache_description": "یک 'پاکسازی سخت' فیشین. افزون بر پاکسازی کَش فیشین، کَش مرورگر هم تهی میشود (نگارههای ذخیره شده و باقی داراییها). اعتبارنامهها و پیکربندیها حفظ میشوند",
|
||||||
"contextMenu_description": "به شما اجازه میدهد که آیتمهای نمایش داده شده در فهرستی که وقتی روی یک آیتم کلیک راست میکنید پدیدار میشود، را پنهان کنید. آیتمهایی که منتخب نیستند پنهان میشوند",
|
"contextMenu_description": "به شما اجازه میدهد که آیتمهای نمایش داده شده در فهرستی که وقتی روی یک آیتم کلیک راست میکنید پدیدار میشود، را پنهان کنید. آیتمهایی که منتخب نیستند پنهان میشوند",
|
||||||
@@ -177,7 +176,7 @@
|
|||||||
"backward": "به عقب",
|
"backward": "به عقب",
|
||||||
"increase": "افزایش",
|
"increase": "افزایش",
|
||||||
"rating": "امتیاز",
|
"rating": "امتیاز",
|
||||||
"bpm": "bpm",
|
"bpm": "BPM",
|
||||||
"refresh": "تازهسازی",
|
"refresh": "تازهسازی",
|
||||||
"unknown": "ناشناخته",
|
"unknown": "ناشناخته",
|
||||||
"areYouSure": "مطمئنید؟",
|
"areYouSure": "مطمئنید؟",
|
||||||
@@ -186,7 +185,7 @@
|
|||||||
"left": "چپ",
|
"left": "چپ",
|
||||||
"save": "ذخیره",
|
"save": "ذخیره",
|
||||||
"right": "راست",
|
"right": "راست",
|
||||||
"currentSong": "فعلی $t(entity.track_one)",
|
"currentSong": "فعلی $t(entity.track, {\"count\": 1})",
|
||||||
"collapse": "بستن",
|
"collapse": "بستن",
|
||||||
"trackNumber": "قطعه",
|
"trackNumber": "قطعه",
|
||||||
"descending": "نزولی",
|
"descending": "نزولی",
|
||||||
@@ -239,7 +238,7 @@
|
|||||||
"none": "هیچ",
|
"none": "هیچ",
|
||||||
"menu": "منو",
|
"menu": "منو",
|
||||||
"restartRequired": "راهاندازی دوباره لازم است",
|
"restartRequired": "راهاندازی دوباره لازم است",
|
||||||
"previousSong": "$t(entity.track_one) پیشین",
|
"previousSong": "$t(entity.track, {\"count\": 1}) پیشین",
|
||||||
"noResultsFromQuery": "جستوجو نتیجهای نداشت",
|
"noResultsFromQuery": "جستوجو نتیجهای نداشت",
|
||||||
"quit": "خروج",
|
"quit": "خروج",
|
||||||
"expand": "گسترش",
|
"expand": "گسترش",
|
||||||
@@ -256,7 +255,8 @@
|
|||||||
"albumPeak": "اوج آلبوم",
|
"albumPeak": "اوج آلبوم",
|
||||||
"mbid": "شناسهی MusicBrainz",
|
"mbid": "شناسهی MusicBrainz",
|
||||||
"reload": "بارگذاری مجدد",
|
"reload": "بارگذاری مجدد",
|
||||||
"setting": "پیکربندی",
|
"setting_one": "پیکربندی",
|
||||||
|
"setting_other": "",
|
||||||
"trackGain": "گین قطعه",
|
"trackGain": "گین قطعه",
|
||||||
"trackPeak": "اوج قطعه",
|
"trackPeak": "اوج قطعه",
|
||||||
"translation": "ترجمه",
|
"translation": "ترجمه",
|
||||||
@@ -301,25 +301,25 @@
|
|||||||
"rating": "امتیاز",
|
"rating": "امتیاز",
|
||||||
"search": "جستوجو",
|
"search": "جستوجو",
|
||||||
"bitrate": "بیتریت",
|
"bitrate": "بیتریت",
|
||||||
"genre": "$t(entity.genre_one)",
|
"genre": "$t(entity.genre, {\"count\": 1})",
|
||||||
"recentlyAdded": "به تازگی افزوده شده",
|
"recentlyAdded": "به تازگی افزوده شده",
|
||||||
"note": "توجه",
|
"note": "توجه",
|
||||||
"name": "نام",
|
"name": "نام",
|
||||||
"dateAdded": "تاریخ افزوده شدن",
|
"dateAdded": "تاریخ افزوده شدن",
|
||||||
"releaseDate": "تاریخ انتشار",
|
"releaseDate": "تاریخ انتشار",
|
||||||
"albumCount": "$t(entity.album_other) عدد",
|
"albumCount": "$t(entity.album, {\"count\": 2}) عدد",
|
||||||
"path": "مسیر",
|
"path": "مسیر",
|
||||||
"favorited": "موردعلاقه",
|
"favorited": "موردعلاقه",
|
||||||
"albumArtist": "$t(entity.albumArtist_one)",
|
"albumArtist": "$t(entity.albumArtist, {\"count\": 1})",
|
||||||
"isRecentlyPlayed": "به تازگی پخش شده است",
|
"isRecentlyPlayed": "به تازگی پخش شده است",
|
||||||
"isFavorited": "موردعلاقه است",
|
"isFavorited": "موردعلاقه است",
|
||||||
"bpm": "bpm",
|
"bpm": "BPM",
|
||||||
"releaseYear": "سال انتشار",
|
"releaseYear": "سال انتشار",
|
||||||
"id": "id",
|
"id": "ID",
|
||||||
"disc": "دیسک",
|
"disc": "دیسک",
|
||||||
"biography": "زندگینامه",
|
"biography": "زندگینامه",
|
||||||
"songCount": "تعداد ترانه",
|
"songCount": "تعداد ترانه",
|
||||||
"artist": "$t(entity.artist_one)",
|
"artist": "$t(entity.artist, {\"count\": 1})",
|
||||||
"duration": "مدت",
|
"duration": "مدت",
|
||||||
"isPublic": "عمومی است",
|
"isPublic": "عمومی است",
|
||||||
"random": "تصادفی",
|
"random": "تصادفی",
|
||||||
@@ -327,23 +327,23 @@
|
|||||||
"toYear": "تا سال",
|
"toYear": "تا سال",
|
||||||
"fromYear": "از سال",
|
"fromYear": "از سال",
|
||||||
"criticRating": "امتیاز منتقدین",
|
"criticRating": "امتیاز منتقدین",
|
||||||
"album": "$t(entity.album_one)",
|
"album": "$t(entity.album, {\"count\": 1})",
|
||||||
"trackNumber": "قطعه",
|
"trackNumber": "قطعه",
|
||||||
"communityRating": "رتبه بندی جامعه",
|
"communityRating": "رتبه بندی جامعه",
|
||||||
"isCompilation": "مخلوط است"
|
"isCompilation": "مخلوط است"
|
||||||
},
|
},
|
||||||
"form": {
|
"form": {
|
||||||
"deletePlaylist": {
|
"deletePlaylist": {
|
||||||
"title": "حذف $t(entity.playlist_one)",
|
"title": "حذف $t(entity.playlist, {\"count\": 1})",
|
||||||
"success": "$t(entity.playlist_one) حذف شد",
|
"success": "$t(entity.playlist, {\"count\": 1}) حذف شد",
|
||||||
"input_confirm": "برای تایید، نام $t(entity.playlist_one) را وارد کنید"
|
"input_confirm": "برای تایید، نام $t(entity.playlist, {\"count\": 1}) را وارد کنید"
|
||||||
},
|
},
|
||||||
"createPlaylist": {
|
"createPlaylist": {
|
||||||
"input_description": "$t(common.description)",
|
"input_description": "$t(common.description)",
|
||||||
"title": "ساخت $t(entity.playlist_one)",
|
"title": "ساخت $t(entity.playlist, {\"count\": 1})",
|
||||||
"input_public": "عمومی",
|
"input_public": "عمومی",
|
||||||
"input_name": "$t(common.name)",
|
"input_name": "$t(common.name)",
|
||||||
"success": "$t(entity.playlist_one) ساخته شد",
|
"success": "$t(entity.playlist, {\"count\": 1}) ساخته شد",
|
||||||
"input_owner": "$t(common.owner)"
|
"input_owner": "$t(common.owner)"
|
||||||
},
|
},
|
||||||
"addServer": {
|
"addServer": {
|
||||||
@@ -360,19 +360,19 @@
|
|||||||
"ignoreSsl": "نادیده گرفتن ssl ($t(common.restartRequired))"
|
"ignoreSsl": "نادیده گرفتن ssl ($t(common.restartRequired))"
|
||||||
},
|
},
|
||||||
"addToPlaylist": {
|
"addToPlaylist": {
|
||||||
"success": "$t(entity.song_other) به {{numOfPlaylists}}$t(entity.playlist_other) افزوده شد",
|
"success": "$t(entity.song, {\"count\": 2}) به {{numOfPlaylists}}$t(entity.playlist, {\"count\": 2}) افزوده شد",
|
||||||
"title": "افزودن به $t(entity.playlist_one)",
|
"title": "افزودن به $t(entity.playlist, {\"count\": 1})",
|
||||||
"input_playlists": "$t(entity.playlist_other)",
|
"input_playlists": "$t(entity.playlist, {\"count\": 2})",
|
||||||
"input_skipDuplicates": "پرش از تکراریها"
|
"input_skipDuplicates": "پرش از تکراریها"
|
||||||
},
|
},
|
||||||
"lyricSearch": {
|
"lyricSearch": {
|
||||||
"input_name": "$t(common.name)",
|
"input_name": "$t(common.name)",
|
||||||
"input_artist": "$t(entity.artist_one)",
|
"input_artist": "$t(entity.artist, {\"count\": 1})",
|
||||||
"title": "جستوجو در متن شعر"
|
"title": "جستوجو در متن شعر"
|
||||||
},
|
},
|
||||||
"editPlaylist": {
|
"editPlaylist": {
|
||||||
"title": "ویرایش $t(entity.playlist_one)",
|
"title": "ویرایش $t(entity.playlist, {\"count\": 1})",
|
||||||
"success": "$t(entity.playlist_one) با موفقیت بروزرسانی شد",
|
"success": "$t(entity.playlist, {\"count\": 1}) با موفقیت بروزرسانی شد",
|
||||||
"publicJellyfinNote": "جلیفین به دلیلی اینکه فهرست پخش عمومیست یا خصوصی را فاش نمیکند. اگر میخواهید این عمومی باقی بماند، لطفاٌ ورودی پیشرو را منتخب داشته باشید"
|
"publicJellyfinNote": "جلیفین به دلیلی اینکه فهرست پخش عمومیست یا خصوصی را فاش نمیکند. اگر میخواهید این عمومی باقی بماند، لطفاٌ ورودی پیشرو را منتخب داشته باشید"
|
||||||
},
|
},
|
||||||
"queryEditor": {
|
"queryEditor": {
|
||||||
@@ -417,7 +417,7 @@
|
|||||||
"artistWithCount_other": "{{count}} هنرمند",
|
"artistWithCount_other": "{{count}} هنرمند",
|
||||||
"folder_one": "پوشه",
|
"folder_one": "پوشه",
|
||||||
"folder_other": "پوشهها",
|
"folder_other": "پوشهها",
|
||||||
"smartPlaylist": "$t(entity.playlist_one) هوشمند",
|
"smartPlaylist": "$t(entity.playlist, {\"count\": 1}) هوشمند",
|
||||||
"album_one": "آلبوم",
|
"album_one": "آلبوم",
|
||||||
"album_other": "آلبومها",
|
"album_other": "آلبومها",
|
||||||
"genreWithCount_one": "{{count}} ژانر",
|
"genreWithCount_one": "{{count}} ژانر",
|
||||||
@@ -431,12 +431,12 @@
|
|||||||
},
|
},
|
||||||
"page": {
|
"page": {
|
||||||
"albumList": {
|
"albumList": {
|
||||||
"title": "$t(entity.album_other)",
|
"title": "$t(entity.album, {\"count\": 2})",
|
||||||
"artistAlbums": "آلبومهای {{artist}}",
|
"artistAlbums": "آلبومهای {{artist}}",
|
||||||
"genreAlbums": "\"{{genre}}\" $t(entity.album_other)"
|
"genreAlbums": "\"{{genre}}\" $t(entity.album, {\"count\": 2})"
|
||||||
},
|
},
|
||||||
"appMenu": {
|
"appMenu": {
|
||||||
"settings": "$t(common.setting_other)",
|
"settings": "$t(common.setting, {\"count\": 2})",
|
||||||
"selectServer": "گزینش سرویسدهنده",
|
"selectServer": "گزینش سرویسدهنده",
|
||||||
"expandSidebar": "گسترش نوار کناری",
|
"expandSidebar": "گسترش نوار کناری",
|
||||||
"collapseSidebar": "فروکش نوار کناری",
|
"collapseSidebar": "فروکش نوار کناری",
|
||||||
@@ -451,11 +451,11 @@
|
|||||||
"appearsOn": "مشاهده میشود در",
|
"appearsOn": "مشاهده میشود در",
|
||||||
"about": "دربارهی {{artist}}",
|
"about": "دربارهی {{artist}}",
|
||||||
"recentReleases": "عرضههای اخیر",
|
"recentReleases": "عرضههای اخیر",
|
||||||
"viewAllTracks": "نمایش همهی $t(entity.track_other)",
|
"viewAllTracks": "نمایش همهی $t(entity.track, {\"count\": 2})",
|
||||||
"topSongsFrom": "قطعههای برتر از {{title}}",
|
"topSongsFrom": "قطعههای برتر از {{title}}",
|
||||||
"viewAll": "نمایش همه",
|
"viewAll": "نمایش همه",
|
||||||
"viewDiscography": "نمایش کاتالوگ",
|
"viewDiscography": "نمایش کاتالوگ",
|
||||||
"relatedArtists": "$t(entity.artist_other) مربوطه",
|
"relatedArtists": "$t(entity.artist, {\"count\": 2}) مربوطه",
|
||||||
"topSongs": "قطعههای برتر"
|
"topSongs": "قطعههای برتر"
|
||||||
},
|
},
|
||||||
"contextMenu": {
|
"contextMenu": {
|
||||||
@@ -523,21 +523,21 @@
|
|||||||
"playbackTab": "پخش"
|
"playbackTab": "پخش"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"genres": "$t(entity.genre_other)",
|
"genres": "$t(entity.genre, {\"count\": 2})",
|
||||||
"playlists": "$t(entity.playlist_other)",
|
"playlists": "$t(entity.playlist, {\"count\": 2})",
|
||||||
"search": "$t(common.search)",
|
"search": "$t(common.search)",
|
||||||
"albumArtists": "$t(entity.albumArtist_other)",
|
"albumArtists": "$t(entity.albumArtist, {\"count\": 2})",
|
||||||
"albums": "$t(entity.album_other)",
|
"albums": "$t(entity.album, {\"count\": 2})",
|
||||||
"folders": "$t(entity.folder_other)",
|
"folders": "$t(entity.folder, {\"count\": 2})",
|
||||||
"artists": "$t(entity.artist_other)",
|
"artists": "$t(entity.artist, {\"count\": 2})",
|
||||||
"home": "$t(common.home)",
|
"home": "$t(common.home)",
|
||||||
"nowPlaying": "پخش کنونی",
|
"nowPlaying": "پخش کنونی",
|
||||||
"tracks": "$t(entity.track_other)",
|
"tracks": "$t(entity.track, {\"count\": 2})",
|
||||||
"settings": "$t(common.setting_other)",
|
"settings": "$t(common.setting, {\"count\": 2})",
|
||||||
"shared": "$t(entity.playlist_other) اشتراکگذاری شده"
|
"shared": "$t(entity.playlist, {\"count\": 2}) اشتراکگذاری شده"
|
||||||
},
|
},
|
||||||
"albumDetail": {
|
"albumDetail": {
|
||||||
"moreFromArtist": "موارد بیشتر از این $t(entity.artist_one)",
|
"moreFromArtist": "موارد بیشتر از این $t(entity.artist, {\"count\": 1})",
|
||||||
"moreFromGeneric": "موارد بیشتر از {{item}}",
|
"moreFromGeneric": "موارد بیشتر از {{item}}",
|
||||||
"released": "عرضه شده"
|
"released": "عرضه شده"
|
||||||
},
|
},
|
||||||
@@ -550,9 +550,9 @@
|
|||||||
"editServerDetailsTooltip": "ویرایش ریزگان سرویسدهنده"
|
"editServerDetailsTooltip": "ویرایش ریزگان سرویسدهنده"
|
||||||
},
|
},
|
||||||
"genreList": {
|
"genreList": {
|
||||||
"showAlbums": "نمایش $t(entity.genre_one) $t(entity.album_other)",
|
"showAlbums": "نمایش $t(entity.genre, {\"count\": 1}) $t(entity.album, {\"count\": 2})",
|
||||||
"title": "$t(entity.genre_other)",
|
"title": "$t(entity.genre, {\"count\": 2})",
|
||||||
"showTracks": "نمایش $t(entity.genre_one) $t(entity.track_other)"
|
"showTracks": "نمایش $t(entity.genre, {\"count\": 1}) $t(entity.track, {\"count\": 2})"
|
||||||
},
|
},
|
||||||
"globalSearch": {
|
"globalSearch": {
|
||||||
"commands": {
|
"commands": {
|
||||||
@@ -563,15 +563,15 @@
|
|||||||
"title": "فرمانها"
|
"title": "فرمانها"
|
||||||
},
|
},
|
||||||
"playlistList": {
|
"playlistList": {
|
||||||
"title": "$t(entity.playlist_other)"
|
"title": "$t(entity.playlist, {\"count\": 2})"
|
||||||
},
|
},
|
||||||
"trackList": {
|
"trackList": {
|
||||||
"title": "$t(entity.track_other)",
|
"title": "$t(entity.track, {\"count\": 2})",
|
||||||
"artistTracks": "قطعههای {{artist}}",
|
"artistTracks": "قطعههای {{artist}}",
|
||||||
"genreTracks": "$t(entity.track_other) \"{{genre}}\""
|
"genreTracks": "$t(entity.track, {\"count\": 2}) \"{{genre}}\""
|
||||||
},
|
},
|
||||||
"albumArtistList": {
|
"albumArtistList": {
|
||||||
"title": "$t(entity.albumArtist_other)"
|
"title": "$t(entity.albumArtist, {\"count\": 2})"
|
||||||
},
|
},
|
||||||
"itemDetail": {
|
"itemDetail": {
|
||||||
"copyPath": "کپی کردن مسیر در کلیپبورد",
|
"copyPath": "کپی کردن مسیر در کلیپبورد",
|
||||||
@@ -584,11 +584,11 @@
|
|||||||
"size": "$t(common.size)",
|
"size": "$t(common.size)",
|
||||||
"lastPlayed": "آخرین بار پخش شده",
|
"lastPlayed": "آخرین بار پخش شده",
|
||||||
"discNumber": "دیسک",
|
"discNumber": "دیسک",
|
||||||
"songCount": "$t(entity.track_other)",
|
"songCount": "$t(entity.track, {\"count\": 2})",
|
||||||
"title": "عنوان",
|
"title": "عنوان",
|
||||||
"trackNumber": "قطعه",
|
"trackNumber": "قطعه",
|
||||||
"favorite": "مورد علاقه",
|
"favorite": "مورد علاقه",
|
||||||
"genre": "$t(entity.genre_one)",
|
"genre": "$t(entity.genre, {\"count\": 1})",
|
||||||
"comment": "دیدگاه",
|
"comment": "دیدگاه",
|
||||||
"playCount": "تعداد پخش",
|
"playCount": "تعداد پخش",
|
||||||
"rating": "امتیاز",
|
"rating": "امتیاز",
|
||||||
|
|||||||
@@ -1,31 +1,31 @@
|
|||||||
{
|
{
|
||||||
"action": {
|
"action": {
|
||||||
"createPlaylist": "$t(entity.playlist_one) 생성",
|
"createPlaylist": "$t(entity.playlist, {\"count\": 1}) 생성",
|
||||||
"addToFavorites": "$t(entity.favorite_other)에 추가",
|
"addToFavorites": "$t(entity.favorite, {\"count\": 2})에 추가",
|
||||||
"addToPlaylist": "$t(entity.playlist_one)에 추가",
|
"addToPlaylist": "$t(entity.playlist, {\"count\": 1})에 추가",
|
||||||
"clearQueue": "대기열 지우기",
|
"clearQueue": "대기열 지우기",
|
||||||
"deletePlaylist": "$t(entity.playlist_one) 삭제",
|
"deletePlaylist": "$t(entity.playlist, {\"count\": 1}) 삭제",
|
||||||
"deselectAll": "모두 선택 해제",
|
"deselectAll": "모두 선택 해제",
|
||||||
"editPlaylist": "$t(entity.playlist_one) 편집",
|
"editPlaylist": "$t(entity.playlist, {\"count\": 1}) 편집",
|
||||||
"goToPage": "페이지 이동",
|
"goToPage": "페이지 이동",
|
||||||
"moveToBottom": "맨 아래로 이동",
|
"moveToBottom": "맨 아래로 이동",
|
||||||
"moveToTop": "맨 위로 이동",
|
"moveToTop": "맨 위로 이동",
|
||||||
"moveToNext": "다음으로 이동",
|
"moveToNext": "다음으로 이동",
|
||||||
"removeFromQueue": "대기열에서 제거",
|
"removeFromQueue": "대기열에서 제거",
|
||||||
"refresh": "$t(common.refresh)",
|
"refresh": "$t(common.refresh)",
|
||||||
"removeFromFavorites": "$t(entity.favorite_other)에서 제거",
|
"removeFromFavorites": "$t(entity.favorite, {\"count\": 2})에서 제거",
|
||||||
"removeFromPlaylist": "$t(entity.playlist_one)에서 제거",
|
"removeFromPlaylist": "$t(entity.playlist, {\"count\": 1})에서 제거",
|
||||||
"openIn": {
|
"openIn": {
|
||||||
"musicbrainz": "MusicBrainz에서 보기",
|
"musicbrainz": "MusicBrainz에서 보기",
|
||||||
"lastfm": "Last.fm에서 보기"
|
"lastfm": "Last.fm에서 보기"
|
||||||
},
|
},
|
||||||
"viewPlaylists": "$t(entity.playlist_other) 보기",
|
"viewPlaylists": "$t(entity.playlist, {\"count\": 2}) 보기",
|
||||||
"setRating": "평점 지정",
|
"setRating": "평점 지정",
|
||||||
"toggleSmartPlaylistEditor": "$t(entity.smartPlaylist) 편집기 펼치기",
|
"toggleSmartPlaylistEditor": "$t(entity.smartPlaylist) 편집기 펼치기",
|
||||||
"addOrRemoveFromSelection": "선택항목에서 추가 또는 제거",
|
"addOrRemoveFromSelection": "선택항목에서 추가 또는 제거",
|
||||||
"selectRangeOfItems": "항목의 범위 선택",
|
"selectRangeOfItems": "항목의 범위 선택",
|
||||||
"createRadioStation": "$t(entity.radioStation_one) 생성",
|
"createRadioStation": "$t(entity.radioStation, {\"count\": 1}) 생성",
|
||||||
"deleteRadioStation": "$t(entity.radioStation_one) 삭제",
|
"deleteRadioStation": "$t(entity.radioStation, {\"count\": 1}) 삭제",
|
||||||
"selectAll": "전부 선택",
|
"selectAll": "전부 선택",
|
||||||
"downloadStarted": "{{count}}개 항목 다운로드 시작했습니다",
|
"downloadStarted": "{{count}}개 항목 다운로드 시작했습니다",
|
||||||
"moveUp": "위로 옮기기",
|
"moveUp": "위로 옮기기",
|
||||||
@@ -59,7 +59,7 @@
|
|||||||
"backward": "뒤로",
|
"backward": "뒤로",
|
||||||
"saveAs": "(으)로 저장하기",
|
"saveAs": "(으)로 저장하기",
|
||||||
"search": "검색",
|
"search": "검색",
|
||||||
"setting": "설정",
|
"setting_other": "설정",
|
||||||
"share": "공유",
|
"share": "공유",
|
||||||
"size": "크기",
|
"size": "크기",
|
||||||
"sortOrder": "순서",
|
"sortOrder": "순서",
|
||||||
@@ -74,7 +74,7 @@
|
|||||||
"comingSoon": "조만간…",
|
"comingSoon": "조만간…",
|
||||||
"configure": "설정",
|
"configure": "설정",
|
||||||
"confirm": "확인",
|
"confirm": "확인",
|
||||||
"currentSong": "현재 $t(entity.track_one)",
|
"currentSong": "현재 $t(entity.track, {\"count\": 1})",
|
||||||
"decrease": "감소",
|
"decrease": "감소",
|
||||||
"delete": "삭제",
|
"delete": "삭제",
|
||||||
"descending": "내림차순",
|
"descending": "내림차순",
|
||||||
@@ -96,7 +96,7 @@
|
|||||||
"path": "경로",
|
"path": "경로",
|
||||||
"playerMustBePaused": "플레이어가 일시정지 되어야 합니다",
|
"playerMustBePaused": "플레이어가 일시정지 되어야 합니다",
|
||||||
"preview": "미리보기",
|
"preview": "미리보기",
|
||||||
"previousSong": "이전곡 $t(entity.track_one)",
|
"previousSong": "이전곡 $t(entity.track, {\"count\": 1})",
|
||||||
"quit": "종료",
|
"quit": "종료",
|
||||||
"refresh": "새로고침",
|
"refresh": "새로고침",
|
||||||
"reload": "리로드",
|
"reload": "리로드",
|
||||||
@@ -106,7 +106,7 @@
|
|||||||
"ascending": "오름차순",
|
"ascending": "오름차순",
|
||||||
"areYouSure": "확실한가요?",
|
"areYouSure": "확실한가요?",
|
||||||
"bitrate": "비트 전송률",
|
"bitrate": "비트 전송률",
|
||||||
"bpm": "bpm",
|
"bpm": "BPM",
|
||||||
"biography": "바이오그래피",
|
"biography": "바이오그래피",
|
||||||
"center": "중앙",
|
"center": "중앙",
|
||||||
"channel_other": "채널",
|
"channel_other": "채널",
|
||||||
@@ -127,7 +127,7 @@
|
|||||||
"filters": "필터",
|
"filters": "필터",
|
||||||
"noResultsFromQuery": "쿼리 결과가 없습니다",
|
"noResultsFromQuery": "쿼리 결과가 없습니다",
|
||||||
"note": "노트",
|
"note": "노트",
|
||||||
"ok": "OK",
|
"ok": "Ok",
|
||||||
"owner": "소유자",
|
"owner": "소유자",
|
||||||
"sampleRate": "샘플레이트",
|
"sampleRate": "샘플레이트",
|
||||||
"tags": "태그",
|
"tags": "태그",
|
||||||
@@ -168,7 +168,7 @@
|
|||||||
"song_other": "곡",
|
"song_other": "곡",
|
||||||
"play_other": "{{count}} 재생",
|
"play_other": "{{count}} 재생",
|
||||||
"playlistWithCount_other": "{{count}} 재생목록",
|
"playlistWithCount_other": "{{count}} 재생목록",
|
||||||
"smartPlaylist": "스마트 $t(entity.playlist_one)",
|
"smartPlaylist": "스마트 $t(entity.playlist, {\"count\": 1})",
|
||||||
"track_other": "트랙",
|
"track_other": "트랙",
|
||||||
"radioStation_other": "라디오 방송국",
|
"radioStation_other": "라디오 방송국",
|
||||||
"radioStationWithCount_other": "{{count}}개 라디오 방송국"
|
"radioStationWithCount_other": "{{count}}개 라디오 방송국"
|
||||||
@@ -214,9 +214,9 @@
|
|||||||
"dateAdded": "추가된 날짜",
|
"dateAdded": "추가된 날짜",
|
||||||
"lastPlayed": "마지막으로 재생한",
|
"lastPlayed": "마지막으로 재생한",
|
||||||
"mostPlayed": "가장 많이 재생한",
|
"mostPlayed": "가장 많이 재생한",
|
||||||
"album": "$t(entity.album_one)",
|
"album": "$t(entity.album, {\"count\": 1})",
|
||||||
"albumArtist": "$t(entity.albumArtist_one)",
|
"albumArtist": "$t(entity.albumArtist, {\"count\": 1})",
|
||||||
"artist": "$t(entity.artist_one)",
|
"artist": "$t(entity.artist, {\"count\": 1})",
|
||||||
"communityRating": "커뮤니티 평점",
|
"communityRating": "커뮤니티 평점",
|
||||||
"criticRating": "비평가 평점",
|
"criticRating": "비평가 평점",
|
||||||
"disc": "디스크",
|
"disc": "디스크",
|
||||||
@@ -224,12 +224,12 @@
|
|||||||
"biography": "바이오그래피",
|
"biography": "바이오그래피",
|
||||||
"channels": "$t(common.channel_other)",
|
"channels": "$t(common.channel_other)",
|
||||||
"duration": "길이",
|
"duration": "길이",
|
||||||
"bpm": "bpm",
|
"bpm": "BPM",
|
||||||
"albumCount": "$t(entity.album_other) 앨범수",
|
"albumCount": "$t(entity.album, {\"count\": 2}) 앨범수",
|
||||||
"comment": "코멘트",
|
"comment": "코멘트",
|
||||||
"favorited": "즐겨찾기",
|
"favorited": "즐겨찾기",
|
||||||
"fromYear": "시작 년도",
|
"fromYear": "시작 년도",
|
||||||
"genre": "$t(entity.genre_one)",
|
"genre": "$t(entity.genre, {\"count\": 1})",
|
||||||
"id": "아이디",
|
"id": "아이디",
|
||||||
"isCompilation": "편집앨범 여부",
|
"isCompilation": "편집앨범 여부",
|
||||||
"isFavorited": "즐겨찾기 여부",
|
"isFavorited": "즐겨찾기 여부",
|
||||||
@@ -251,7 +251,7 @@
|
|||||||
"input_name": "서버 이름",
|
"input_name": "서버 이름",
|
||||||
"input_password": "비밀번호",
|
"input_password": "비밀번호",
|
||||||
"input_savePassword": "비밀번호 저장하기",
|
"input_savePassword": "비밀번호 저장하기",
|
||||||
"input_url": "url",
|
"input_url": "URL",
|
||||||
"error_savePassword": "비밀번호를 저장하는 도중 오류가 발생했습니다",
|
"error_savePassword": "비밀번호를 저장하는 도중 오류가 발생했습니다",
|
||||||
"ignoreCors": "CORS 무시 ($t(common.restartRequired))",
|
"ignoreCors": "CORS 무시 ($t(common.restartRequired))",
|
||||||
"ignoreSsl": "SSL 무시 ($t(common.restartRequired))",
|
"ignoreSsl": "SSL 무시 ($t(common.restartRequired))",
|
||||||
@@ -262,16 +262,16 @@
|
|||||||
},
|
},
|
||||||
"addToPlaylist": {
|
"addToPlaylist": {
|
||||||
"input_skipDuplicates": "중복 건너뛰기",
|
"input_skipDuplicates": "중복 건너뛰기",
|
||||||
"title": "$t(entity.playlist_one) 에 추가",
|
"title": "$t(entity.playlist, {\"count\": 1}) 에 추가",
|
||||||
"input_playlists": "$t(entity.playlist_other)",
|
"input_playlists": "$t(entity.playlist, {\"count\": 2})",
|
||||||
"success": "$t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })에 $t(entity.trackWithCount, {\"count\": {{message}} })가 추가되었습니다",
|
"success": "$t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })에 $t(entity.trackWithCount, {\"count\": {{message}} })가 추가되었습니다",
|
||||||
"create": "$t(entity.playlist_one) {{playlist}} 생성",
|
"create": "$t(entity.playlist, {\"count\": 1}) {{playlist}} 생성",
|
||||||
"searchOrCreate": "$t(entity.playlist_other) 검색 또는 입력하여 새로 만들기"
|
"searchOrCreate": "$t(entity.playlist, {\"count\": 2}) 검색 또는 입력하여 새로 만들기"
|
||||||
},
|
},
|
||||||
"lyricSearch": {
|
"lyricSearch": {
|
||||||
"title": "가사 검색",
|
"title": "가사 검색",
|
||||||
"input_name": "$t(common.name)",
|
"input_name": "$t(common.name)",
|
||||||
"input_artist": "$t(entity.artist_one)"
|
"input_artist": "$t(entity.artist, {\"count\": 1})"
|
||||||
},
|
},
|
||||||
"queryEditor": {
|
"queryEditor": {
|
||||||
"input_optionMatchAll": "모두 일치",
|
"input_optionMatchAll": "모두 일치",
|
||||||
@@ -279,9 +279,9 @@
|
|||||||
"title": "쿼리 편집기"
|
"title": "쿼리 편집기"
|
||||||
},
|
},
|
||||||
"editPlaylist": {
|
"editPlaylist": {
|
||||||
"title": "$t(entity.playlist_one) 편집",
|
"title": "$t(entity.playlist, {\"count\": 1}) 편집",
|
||||||
"publicJellyfinNote": "Jellyfin은 재생목록 공개 여부를 노출하지 않습니다. 만약 공개되길 원한다면 다음을 선택하세요",
|
"publicJellyfinNote": "Jellyfin은 재생목록 공개 여부를 노출하지 않습니다. 만약 공개되길 원한다면 다음을 선택하세요",
|
||||||
"success": "$t(entity.playlist_one) 업데이트 되었습니다"
|
"success": "$t(entity.playlist, {\"count\": 1}) 업데이트 되었습니다"
|
||||||
},
|
},
|
||||||
"shareItem": {
|
"shareItem": {
|
||||||
"allowDownloading": "다운로드 허용",
|
"allowDownloading": "다운로드 허용",
|
||||||
@@ -298,15 +298,15 @@
|
|||||||
"createPlaylist": {
|
"createPlaylist": {
|
||||||
"input_description": "$t(common.description)",
|
"input_description": "$t(common.description)",
|
||||||
"input_name": "$t(common.name)",
|
"input_name": "$t(common.name)",
|
||||||
"success": "$t(entity.playlist_one)를 생성했습니다",
|
"success": "$t(entity.playlist, {\"count\": 1})를 생성했습니다",
|
||||||
"input_owner": "$t(common.owner)",
|
"input_owner": "$t(common.owner)",
|
||||||
"input_public": "공개",
|
"input_public": "공개",
|
||||||
"title": "$t(entity.playlist_one) 생성"
|
"title": "$t(entity.playlist, {\"count\": 1}) 생성"
|
||||||
},
|
},
|
||||||
"deletePlaylist": {
|
"deletePlaylist": {
|
||||||
"input_confirm": "확인을 위해 $t(entity.playlist_one)의 이름을 적어주세요",
|
"input_confirm": "확인을 위해 $t(entity.playlist, {\"count\": 1})의 이름을 적어주세요",
|
||||||
"success": "$t(entity.playlist_one)가 삭제되었습니다",
|
"success": "$t(entity.playlist, {\"count\": 1})가 삭제되었습니다",
|
||||||
"title": "$t(entity.playlist_one) 삭제"
|
"title": "$t(entity.playlist, {\"count\": 1}) 삭제"
|
||||||
},
|
},
|
||||||
"privateMode": {
|
"privateMode": {
|
||||||
"enabled": "프라이빗 모드가 활성화되었습니다. 재생상태가 외부 서비스에 지금부터 노출되지 않습니다",
|
"enabled": "프라이빗 모드가 활성화되었습니다. 재생상태가 외부 서비스에 지금부터 노출되지 않습니다",
|
||||||
@@ -362,8 +362,8 @@
|
|||||||
"download": "다운로드",
|
"download": "다운로드",
|
||||||
"numberSelected": "{{count}}개 선택됨",
|
"numberSelected": "{{count}}개 선택됨",
|
||||||
"shareItem": "공유",
|
"shareItem": "공유",
|
||||||
"goToAlbum": "$t(entity.album_one)으로 이동",
|
"goToAlbum": "$t(entity.album, {\"count\": 1})으로 이동",
|
||||||
"goToAlbumArtist": "$t(entity.albumArtist_one)으로 이동",
|
"goToAlbumArtist": "$t(entity.albumArtist, {\"count\": 1})으로 이동",
|
||||||
"showDetails": "추가정보"
|
"showDetails": "추가정보"
|
||||||
},
|
},
|
||||||
"albumArtistDetail": {
|
"albumArtistDetail": {
|
||||||
@@ -371,17 +371,17 @@
|
|||||||
"viewDiscography": "디스코그래피 보기",
|
"viewDiscography": "디스코그래피 보기",
|
||||||
"appearsOn": "참여 앨범",
|
"appearsOn": "참여 앨범",
|
||||||
"recentReleases": "최근 앨범",
|
"recentReleases": "최근 앨범",
|
||||||
"relatedArtists": "연관 $t(entity.artist_other)",
|
"relatedArtists": "연관 $t(entity.artist, {\"count\": 2})",
|
||||||
"topSongs": "최고의 곡들",
|
"topSongs": "최고의 곡들",
|
||||||
"topSongsFrom": "{{title}}이 포함된 최고의 곡들",
|
"topSongsFrom": "{{title}}이 포함된 최고의 곡들",
|
||||||
"viewAll": "전부 보이기",
|
"viewAll": "전부 보이기",
|
||||||
"viewAllTracks": "$t(entity.track_other) 전부 보이기"
|
"viewAllTracks": "$t(entity.track, {\"count\": 2}) 전부 보이기"
|
||||||
},
|
},
|
||||||
"albumArtistList": {
|
"albumArtistList": {
|
||||||
"title": "$t(entity.albumArtist_other)"
|
"title": "$t(entity.albumArtist, {\"count\": 2})"
|
||||||
},
|
},
|
||||||
"albumDetail": {
|
"albumDetail": {
|
||||||
"moreFromArtist": "$t(entity.artist_one) 더 보기",
|
"moreFromArtist": "$t(entity.artist, {\"count\": 1}) 더 보기",
|
||||||
"moreFromGeneric": "{{item}} 더 보기",
|
"moreFromGeneric": "{{item}} 더 보기",
|
||||||
"released": "발매"
|
"released": "발매"
|
||||||
},
|
},
|
||||||
@@ -389,8 +389,8 @@
|
|||||||
"artistAlbums": "{{artist}}의 앨범"
|
"artistAlbums": "{{artist}}의 앨범"
|
||||||
},
|
},
|
||||||
"genreList": {
|
"genreList": {
|
||||||
"showAlbums": "$t(entity.genre_one) $t(entity.album_other) 표시",
|
"showAlbums": "$t(entity.genre, {\"count\": 1}) $t(entity.album, {\"count\": 2}) 표시",
|
||||||
"showTracks": "$t(entity.genre_one) $t(entity.track_other) 표시"
|
"showTracks": "$t(entity.genre, {\"count\": 1}) $t(entity.track, {\"count\": 2}) 표시"
|
||||||
},
|
},
|
||||||
"globalSearch": {
|
"globalSearch": {
|
||||||
"commands": {
|
"commands": {
|
||||||
@@ -425,7 +425,7 @@
|
|||||||
"sidebar": {
|
"sidebar": {
|
||||||
"myLibrary": "내 라이브러리",
|
"myLibrary": "내 라이브러리",
|
||||||
"nowPlaying": "재생중",
|
"nowPlaying": "재생중",
|
||||||
"shared": "공유 $t(entity.playlist_other)"
|
"shared": "공유 $t(entity.playlist, {\"count\": 2})"
|
||||||
},
|
},
|
||||||
"trackList": {
|
"trackList": {
|
||||||
"artistTracks": "{{artist}}의 음악"
|
"artistTracks": "{{artist}}의 음악"
|
||||||
@@ -458,8 +458,8 @@
|
|||||||
"playSimilarSongs": "비슷한 곡 재생",
|
"playSimilarSongs": "비슷한 곡 재생",
|
||||||
"previous": "이전",
|
"previous": "이전",
|
||||||
"queue_clear": "재생 대기열 지우기",
|
"queue_clear": "재생 대기열 지우기",
|
||||||
"queue_moveToBottom": "선택한 곡을 가장 위로 이동",
|
"queue_moveToBottom": "선택한 곡을 가장 아래로 이동",
|
||||||
"queue_moveToTop": "선택한 곡을 가장 아래로 이동",
|
"queue_moveToTop": "선택한 곡을 가장 위로 이동",
|
||||||
"queue_remove": "선택한 항목 삭제",
|
"queue_remove": "선택한 항목 삭제",
|
||||||
"repeat": "반복",
|
"repeat": "반복",
|
||||||
"repeat_all": "모두 반복하기",
|
"repeat_all": "모두 반복하기",
|
||||||
|
|||||||
@@ -1,353 +1,356 @@
|
|||||||
{
|
{
|
||||||
"action": {
|
"action": {
|
||||||
"addToFavorites": "adicionar a $t(entity.favorite_other)",
|
"addToFavorites": "Adicionar a $t(entity.favorite, {\"count\": 2})",
|
||||||
"addToPlaylist": "adicionar a $t(entity.playlist_one)",
|
"addToPlaylist": "Adicionar a $t(entity.playlist, {\"count\": 1})",
|
||||||
"clearQueue": "limpar fila",
|
"clearQueue": "Limpar fila",
|
||||||
"createPlaylist": "criar $t(entity.playlist_one)",
|
"createPlaylist": "Criar $t(entity.playlist, {\"count\": 1})",
|
||||||
"deletePlaylist": "apagar $t(entity.playlist_one)",
|
"deletePlaylist": "Apagar $t(entity.playlist, {\"count\": 1})",
|
||||||
"deselectAll": "desmarcar todos",
|
"deselectAll": "Desmarcar todos",
|
||||||
"editPlaylist": "editar $t(entity.playlist_one)",
|
"editPlaylist": "Editar $t(entity.playlist, {\"count\": 1})",
|
||||||
"goToPage": "vá para página",
|
"goToPage": "Vá para página",
|
||||||
"moveToNext": "mover para o próximo",
|
"moveToNext": "Mover para o próximo",
|
||||||
"moveToBottom": "mover para baixo",
|
"moveToBottom": "Mover para baixo",
|
||||||
"moveToTop": "mover para o topo",
|
"moveToTop": "Mover para o topo",
|
||||||
"refresh": "$t(common.refresh)",
|
"refresh": "$t(common.refresh)",
|
||||||
"removeFromFavorites": "remover de $t(entity.favorite_other)",
|
"removeFromFavorites": "Remover de $t(entity.favorite, {\"count\": 2})",
|
||||||
"removeFromPlaylist": "remover da $t(entity.playlist_one)",
|
"removeFromPlaylist": "Remover da $t(entity.playlist, {\"count\": 1})",
|
||||||
"removeFromQueue": "remover da fila",
|
"removeFromQueue": "Remover da fila",
|
||||||
"setRating": "definir classificação",
|
"setRating": "Definir classificação",
|
||||||
"toggleSmartPlaylistEditor": "alternar editor $t(entity.smartPlaylist)",
|
"toggleSmartPlaylistEditor": "Alternar editor $t(entity.smartPlaylist)",
|
||||||
"viewPlaylists": "ver $t(entity.playlist_other)",
|
"viewPlaylists": "Ver $t(entity.playlist, {\"count\": 2})",
|
||||||
"openIn": {
|
"openIn": {
|
||||||
"lastfm": "Abrir em Last.fm",
|
"lastfm": "Abrir em Last.fm",
|
||||||
"musicbrainz": "Abrir em MusicBrainz"
|
"musicbrainz": "Abrir em MusicBrainz"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"common": {
|
"common": {
|
||||||
"action_one": "ação",
|
"action_one": "Ação",
|
||||||
"action_many": "ações",
|
"action_many": "ações",
|
||||||
"action_other": "ações",
|
"action_other": "Ações",
|
||||||
"add": "adicionar",
|
"add": "Adicionar",
|
||||||
"additionalParticipants": "participantes adicionais",
|
"additionalParticipants": "Participantes adicionais",
|
||||||
"newVersion": "uma nova versão foi instalada ({{version}})",
|
"newVersion": "Uma nova versão foi instalada ({{version}})",
|
||||||
"viewReleaseNotes": "ver notas de lançamento",
|
"viewReleaseNotes": "Ver notas de lançamento",
|
||||||
"albumGain": "ganho do álbum",
|
"albumGain": "Ganho do álbum",
|
||||||
"albumPeak": "pico do álbum",
|
"albumPeak": "Pico do álbum",
|
||||||
"areYouSure": "tem certeza?",
|
"areYouSure": "Tem certeza?",
|
||||||
"ascending": "ascendente",
|
"ascending": "Ascendente",
|
||||||
"backward": "para trás",
|
"backward": "Para trás",
|
||||||
"biography": "biografia",
|
"biography": "Biografia",
|
||||||
"bitrate": "taxa de bits",
|
"bitrate": "Taxa de bits",
|
||||||
"bpm": "bpm",
|
"bpm": "Bpm",
|
||||||
"cancel": "cancelar",
|
"cancel": "Cancelar",
|
||||||
"center": "centro",
|
"center": "Centro",
|
||||||
"channel_one": "canal",
|
"channel_one": "Canal",
|
||||||
"channel_many": "canais",
|
"channel_many": "canais",
|
||||||
"channel_other": "canais",
|
"channel_other": "Canais",
|
||||||
"clear": "limpar",
|
"clear": "Limpar",
|
||||||
"close": "fechar",
|
"close": "Fechar",
|
||||||
"codec": "codec",
|
"codec": "Codec",
|
||||||
"collapse": "minimizar",
|
"collapse": "Minimizar",
|
||||||
"comingSoon": "em breve…",
|
"comingSoon": "Em breve…",
|
||||||
"configure": "configurar",
|
"configure": "Configurar",
|
||||||
"confirm": "confirmar",
|
"confirm": "Confirmar",
|
||||||
"create": "criar",
|
"create": "Criar",
|
||||||
"currentSong": "$t(entity.track_one) atual",
|
"currentSong": "$t(entity.track, {\"count\": 1}) atual",
|
||||||
"decrease": "diminuir",
|
"decrease": "Diminuir",
|
||||||
"delete": "apagar",
|
"delete": "Apagar",
|
||||||
"descending": "abaixar",
|
"descending": "Abaixar",
|
||||||
"description": "descrição",
|
"description": "Descrição",
|
||||||
"disable": "desativar",
|
"disable": "Desativar",
|
||||||
"disc": "disco",
|
"disc": "Disco",
|
||||||
"dismiss": "liberar",
|
"dismiss": "Liberar",
|
||||||
"duration": "duração",
|
"duration": "Duração",
|
||||||
"edit": "editar",
|
"edit": "Editar",
|
||||||
"enable": "ativar",
|
"enable": "Ativar",
|
||||||
"expand": "expandir",
|
"expand": "Expandir",
|
||||||
"favorite": "favorito",
|
"favorite": "Favorito",
|
||||||
"filter_one": "filtro",
|
"filter_one": "Filtro",
|
||||||
"filter_many": "filtros",
|
"filter_many": "filtros",
|
||||||
"filter_other": "filtros",
|
"filter_other": "Filtros",
|
||||||
"filters": "filtros",
|
"filters": "Filtros",
|
||||||
"forceRestartRequired": "reinicie para aplicar as alterações… feche a notificação para reiniciar",
|
"forceRestartRequired": "Reinicie para aplicar as alterações… feche a notificação para reiniciar",
|
||||||
"forward": "para frente",
|
"forward": "Para frente",
|
||||||
"gap": "intervalo",
|
"gap": "Intervalo",
|
||||||
"home": "início",
|
"grouping": "Agrupamento",
|
||||||
"increase": "incrementar",
|
"home": "Início",
|
||||||
"left": "esquerda",
|
"increase": "Incrementar",
|
||||||
"limit": "limite",
|
"left": "Esquerda",
|
||||||
"manage": "gerir",
|
"limit": "Limite",
|
||||||
"maximize": "maximizar",
|
"manage": "Gerir",
|
||||||
"menu": "menu",
|
"maximize": "Maximizar",
|
||||||
"minimize": "minimizar",
|
"menu": "Menu",
|
||||||
"modified": "modificado",
|
"minimize": "Minimizar",
|
||||||
|
"modified": "Modificado",
|
||||||
"mbid": "ID no MusicBrainz",
|
"mbid": "ID no MusicBrainz",
|
||||||
"name": "nome",
|
"name": "Nome",
|
||||||
"no": "não",
|
"no": "Não",
|
||||||
"none": "nenhum",
|
"none": "Nenhum",
|
||||||
"noResultsFromQuery": "a consulta não retornou resultados",
|
"noResultsFromQuery": "A consulta não retornou resultados",
|
||||||
"note": "observação",
|
"note": "Observação",
|
||||||
"ok": "ok",
|
"ok": "Ok",
|
||||||
"owner": "dono",
|
"owner": "Dono",
|
||||||
"path": "caminho",
|
"path": "Caminho",
|
||||||
"playerMustBePaused": "o player deve estar pausado",
|
"playerMustBePaused": "O player deve estar pausado",
|
||||||
"preview": "pré-visualizar",
|
"preview": "Pré-visualizar",
|
||||||
"previousSong": "anterior $t(entity.track_one)",
|
"previousSong": "Anterior $t(entity.track, {\"count\": 1})",
|
||||||
"quit": "sair",
|
"quit": "Sair",
|
||||||
"random": "aleatório",
|
"random": "Aleatório",
|
||||||
"rating": "classificação",
|
"rating": "Classificação",
|
||||||
"refresh": "atualizar",
|
"refresh": "Atualizar",
|
||||||
"reload": "recarregar",
|
"reload": "Recarregar",
|
||||||
"reset": "reiniciar",
|
"reset": "Reiniciar",
|
||||||
"resetToDefault": "restaurar ao padrão",
|
"resetToDefault": "Restaurar ao padrão",
|
||||||
"restartRequired": "é necessário reiniciar",
|
"restartRequired": "É necessário reiniciar",
|
||||||
"right": "direita",
|
"right": "Direita",
|
||||||
"save": "gravar",
|
"save": "Gravar",
|
||||||
"saveAndReplace": "gravar e substituir",
|
"saveAndReplace": "Gravar e substituir",
|
||||||
"saveAs": "gravar como",
|
"saveAs": "Gravar como",
|
||||||
"search": "procurar",
|
"search": "Procurar",
|
||||||
"setting": "configuração",
|
"setting_one": "Configuração",
|
||||||
"share": "partilhar",
|
"setting_many": "",
|
||||||
"size": "tamanho",
|
"setting_other": "",
|
||||||
"sortOrder": "ordem",
|
"share": "Partilhar",
|
||||||
"tags": "tags",
|
"size": "Tamanho",
|
||||||
"title": "titulo",
|
"sortOrder": "Ordem",
|
||||||
"trackNumber": "faixa",
|
"tags": "Tags",
|
||||||
"trackGain": "ganho da faixa",
|
"title": "Titulo",
|
||||||
"trackPeak": "pico da faixa",
|
"trackNumber": "Faixa",
|
||||||
"translation": "tradução",
|
"trackGain": "Ganho da faixa",
|
||||||
"unknown": "desconhecido",
|
"trackPeak": "Pico da faixa",
|
||||||
"version": "versão",
|
"translation": "Tradução",
|
||||||
"year": "ano",
|
"unknown": "Desconhecido",
|
||||||
"yes": "sim"
|
"version": "Versão",
|
||||||
|
"year": "Ano",
|
||||||
|
"yes": "Sim"
|
||||||
},
|
},
|
||||||
"entity": {
|
"entity": {
|
||||||
"album_one": "álbum",
|
"album_one": "Álbum",
|
||||||
"album_many": "álbuns",
|
"album_many": "álbuns",
|
||||||
"album_other": "álbuns",
|
"album_other": "Álbuns",
|
||||||
"albumArtist_one": "artista do álbum",
|
"albumArtist_one": "Artista do álbum",
|
||||||
"albumArtist_many": "artistas do álbum",
|
"albumArtist_many": "artistas do álbum",
|
||||||
"albumArtist_other": "artistas do álbum",
|
"albumArtist_other": "Artistas do álbum",
|
||||||
"albumArtistCount_one": "{{count}} artista do álbum",
|
"albumArtistCount_one": "{{count}} artista do álbum",
|
||||||
"albumArtistCount_many": "{{count}} artistas do álbum",
|
"albumArtistCount_many": "{{count}} artistas do álbum",
|
||||||
"albumArtistCount_other": "{{count}} artistas do álbum",
|
"albumArtistCount_other": "{{count}} artistas do álbum",
|
||||||
"albumWithCount_one": "{{count}} álbum",
|
"albumWithCount_one": "{{count}} álbum",
|
||||||
"albumWithCount_many": "{{count}} álbuns",
|
"albumWithCount_many": "{{count}} álbuns",
|
||||||
"albumWithCount_other": "{{count}} álbuns",
|
"albumWithCount_other": "{{count}} álbuns",
|
||||||
"artist_one": "artista",
|
"artist_one": "Artista",
|
||||||
"artist_many": "artistas",
|
"artist_many": "artistas",
|
||||||
"artist_other": "artistas",
|
"artist_other": "Artistas",
|
||||||
"artistWithCount_one": "{{count}} artista",
|
"artistWithCount_one": "{{count}} artista",
|
||||||
"artistWithCount_many": "{{count}} artistas",
|
"artistWithCount_many": "{{count}} artistas",
|
||||||
"artistWithCount_other": "{{count}} artistas",
|
"artistWithCount_other": "{{count}} artistas",
|
||||||
"favorite_one": "favorito",
|
"favorite_one": "Favorito",
|
||||||
"favorite_many": "favoritos",
|
"favorite_many": "favoritos",
|
||||||
"favorite_other": "favoritos",
|
"favorite_other": "Favoritos",
|
||||||
"folder_one": "pasta",
|
"folder_one": "Pasta",
|
||||||
"folder_many": "pastas",
|
"folder_many": "pastas",
|
||||||
"folder_other": "pastas",
|
"folder_other": "Pastas",
|
||||||
"folderWithCount_one": "{{count}} pasta",
|
"folderWithCount_one": "{{count}} pasta",
|
||||||
"folderWithCount_many": "{{count}} pastas",
|
"folderWithCount_many": "{{count}} pastas",
|
||||||
"folderWithCount_other": "{{count}} pastas",
|
"folderWithCount_other": "{{count}} pastas",
|
||||||
"genre_one": "gênero",
|
"genre_one": "Gênero",
|
||||||
"genre_many": "gêneros",
|
"genre_many": "gêneros",
|
||||||
"genre_other": "gêneros",
|
"genre_other": "Gêneros",
|
||||||
"genreWithCount_one": "{{count}} gênero",
|
"genreWithCount_one": "{{count}} gênero",
|
||||||
"genreWithCount_many": "{{count}} gêneros",
|
"genreWithCount_many": "{{count}} gêneros",
|
||||||
"genreWithCount_other": "{{count}} gêneros",
|
"genreWithCount_other": "{{count}} gêneros",
|
||||||
"playlist_one": "playlist",
|
"playlist_one": "Playlist",
|
||||||
"playlist_many": "playlists",
|
"playlist_many": "playlists",
|
||||||
"playlist_other": "playlists",
|
"playlist_other": "Playlists",
|
||||||
"play_one": "{{count}} reprodução",
|
"play_one": "{{count}} reprodução",
|
||||||
"play_many": "{{count}} reproduções",
|
"play_many": "{{count}} reproduções",
|
||||||
"play_other": "{{count}} reproduções",
|
"play_other": "{{count}} reproduções",
|
||||||
"playlistWithCount_one": "{{count}} playlist",
|
"playlistWithCount_one": "{{count}} playlist",
|
||||||
"playlistWithCount_many": "{{count}} playlists",
|
"playlistWithCount_many": "{{count}} playlists",
|
||||||
"playlistWithCount_other": "{{count}} playlists",
|
"playlistWithCount_other": "{{count}} playlists",
|
||||||
"smartPlaylist": "$t(entity.playlist_one) inteligente",
|
"smartPlaylist": "$t(entity.playlist, {\"count\": 1}) inteligente",
|
||||||
"track_one": "faixa",
|
"track_one": "Faixa",
|
||||||
"track_many": "faixas",
|
"track_many": "faixas",
|
||||||
"track_other": "faixas",
|
"track_other": "Faixas",
|
||||||
"song_one": "música",
|
"song_one": "Música",
|
||||||
"song_many": "músicas",
|
"song_many": "músicas",
|
||||||
"song_other": "músicas",
|
"song_other": "Músicas",
|
||||||
"trackWithCount_one": "{{count}} faixa",
|
"trackWithCount_one": "{{count}} faixa",
|
||||||
"trackWithCount_many": "{{count}} faixas",
|
"trackWithCount_many": "{{count}} faixas",
|
||||||
"trackWithCount_other": "{{count}} faixas"
|
"trackWithCount_other": "{{count}} faixas"
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"apiRouteError": "não é possível encaminhar a solicitação",
|
"apiRouteError": "Não é possível encaminhar a solicitação",
|
||||||
"audioDeviceFetchError": "ocorreu um erro ao tentar obter dispositivos de áudio",
|
"audioDeviceFetchError": "Ocorreu um erro ao tentar obter dispositivos de áudio",
|
||||||
"authenticationFailed": "falha na autenticação",
|
"authenticationFailed": "Falha na autenticação",
|
||||||
"badAlbum": "está a ver este erro por que está música não é parte de algum album. um motivo comum para si estar a ver este erro é se a sua música estiver na raiz da sua pasta de músicas. o Jellyfin apenas agrupa as músicas se elas estiveram na mesma pasta",
|
"badAlbum": "Está a ver este erro por que está música não é parte de algum album. um motivo comum para si estar a ver este erro é se a sua música estiver na raiz da sua pasta de músicas. o Jellyfin apenas agrupa as músicas se elas estiveram na mesma pasta",
|
||||||
"badValue": "opção inválida \"{{value}}\". este valor não existe no momento",
|
"badValue": "Opção inválida \"{{value}}\". este valor não existe no momento",
|
||||||
"credentialsRequired": "credenciais necessárias",
|
"credentialsRequired": "Credenciais necessárias",
|
||||||
"endpointNotImplementedError": "endpoint {{endpoint}} não está implementado para {{serverType}}",
|
"endpointNotImplementedError": "Endpoint {{endpoint}} não está implementado para {{serverType}}",
|
||||||
"genericError": "um erro ocorreu",
|
"genericError": "Um erro ocorreu",
|
||||||
"invalidServer": "servidor inválido",
|
"invalidServer": "Servidor inválido",
|
||||||
"localFontAccessDenied": "acesso a fontes locais rejeitado",
|
"localFontAccessDenied": "Acesso a fontes locais rejeitado",
|
||||||
"loginRateError": "muitas tentativas de login, tente novamente em alguns segundos",
|
"loginRateError": "Muitas tentativas de login, tente novamente em alguns segundos",
|
||||||
"mpvRequired": "MPV necessário",
|
"mpvRequired": "MPV necessário",
|
||||||
"networkError": "ocorreu um erro na internet",
|
"networkError": "Ocorreu um erro na internet",
|
||||||
"openError": "não foi possível abrir o ficheiro",
|
"openError": "Não foi possível abrir o ficheiro",
|
||||||
"playbackError": "ocorreu um erro ao tentar reproduzir a média",
|
"playbackError": "Ocorreu um erro ao tentar reproduzir a média",
|
||||||
"remoteDisableError": "ocorreu um erro ao tentar $t(common.disable) o servidor remoto",
|
"remoteDisableError": "Ocorreu um erro ao tentar $t(common.disable) o servidor remoto",
|
||||||
"remoteEnableError": "ocorreu um erro ao tentar $t(common.enable) o servidor remoto",
|
"remoteEnableError": "Ocorreu um erro ao tentar $t(common.enable) o servidor remoto",
|
||||||
"remotePortError": "ocorreu um erro ao tentar definir a porta do servidor remoto",
|
"remotePortError": "Ocorreu um erro ao tentar definir a porta do servidor remoto",
|
||||||
"remotePortWarning": "reinicie o servidor para aplicar a nova porta",
|
"remotePortWarning": "Reinicie o servidor para aplicar a nova porta",
|
||||||
"serverNotSelectedError": "nenhum servidor selecionado",
|
"serverNotSelectedError": "Nenhum servidor selecionado",
|
||||||
"serverRequired": "servidor necessário",
|
"serverRequired": "Servidor necessário",
|
||||||
"sessionExpiredError": "a sua sessão expirou",
|
"sessionExpiredError": "A sua sessão expirou",
|
||||||
"systemFontError": "ocorreu um erro ao tentar obter fontes do sistema"
|
"systemFontError": "Ocorreu um erro ao tentar obter fontes do sistema"
|
||||||
},
|
},
|
||||||
"filter": {
|
"filter": {
|
||||||
"album": "$t(entity.album_one)",
|
"album": "$t(entity.album, {\"count\": 1})",
|
||||||
"albumArtist": "$t(entity.albumArtist_one)",
|
"albumArtist": "$t(entity.albumArtist, {\"count\": 1})",
|
||||||
"albumCount": "número de $t(entity.album_other)",
|
"albumCount": "Número de $t(entity.album, {\"count\": 2})",
|
||||||
"artist": "$t(entity.artist_one)",
|
"artist": "$t(entity.artist, {\"count\": 1})",
|
||||||
"biography": "bibliografia",
|
"biography": "Bibliografia",
|
||||||
"bitrate": "bitrate",
|
"bitrate": "Bitrate",
|
||||||
"bpm": "bpm",
|
"bpm": "Bpm",
|
||||||
"channels": "$t(common.channel_other)",
|
"channels": "$t(common.channel_other)",
|
||||||
"comment": "comentário",
|
"comment": "Comentário",
|
||||||
"communityRating": "Nota da comunidade",
|
"communityRating": "Nota da comunidade",
|
||||||
"criticRating": "avaliação da crítica",
|
"criticRating": "Avaliação da crítica",
|
||||||
"dateAdded": "data de adição",
|
"dateAdded": "Data de adição",
|
||||||
"disc": "disco",
|
"disc": "Disco",
|
||||||
"duration": "duração",
|
"duration": "Duração",
|
||||||
"favorited": "favoritado",
|
"favorited": "Favoritado",
|
||||||
"fromYear": "a partir do ano",
|
"fromYear": "A partir do ano",
|
||||||
"genre": "$t(entity.genre_one)",
|
"genre": "$t(entity.genre, {\"count\": 1})",
|
||||||
"id": "id",
|
"id": "Id",
|
||||||
"isCompilation": "é compilação",
|
"isCompilation": "É compilação",
|
||||||
"isFavorited": "é favoritado",
|
"isFavorited": "É favoritado",
|
||||||
"isPublic": "é público",
|
"isPublic": "É público",
|
||||||
"isRated": "possui avaliação",
|
"isRated": "Possui avaliação",
|
||||||
"isRecentlyPlayed": "foi tocado recentemente",
|
"isRecentlyPlayed": "Foi tocado recentemente",
|
||||||
"lastPlayed": "última tocada",
|
"lastPlayed": "Última tocada",
|
||||||
"mostPlayed": "mais tocado",
|
"mostPlayed": "Mais tocado",
|
||||||
"name": "nome",
|
"name": "Nome",
|
||||||
"note": "nota",
|
"note": "Nota",
|
||||||
"owner": "$t(common.owner)",
|
"owner": "$t(common.owner)",
|
||||||
"path": "caminho",
|
"path": "Caminho",
|
||||||
"playCount": "contador de reproduções",
|
"playCount": "Contador de reproduções",
|
||||||
"random": "aleatório",
|
"random": "Aleatório",
|
||||||
"rating": "avaliação",
|
"rating": "Avaliação",
|
||||||
"recentlyAdded": "adicionado recentemente",
|
"recentlyAdded": "Adicionado recentemente",
|
||||||
"recentlyPlayed": "tocado recentemente",
|
"recentlyPlayed": "Tocado recentemente",
|
||||||
"recentlyUpdated": "atualizado recentemente",
|
"recentlyUpdated": "Atualizado recentemente",
|
||||||
"releaseDate": "data de lançamento",
|
"releaseDate": "Data de lançamento",
|
||||||
"releaseYear": "ano de lançamento",
|
"releaseYear": "Ano de lançamento",
|
||||||
"search": "buscar",
|
"search": "Buscar",
|
||||||
"songCount": "contador de músicas",
|
"songCount": "Contador de músicas",
|
||||||
"title": "titulo",
|
"title": "Titulo",
|
||||||
"toYear": "até o ano",
|
"toYear": "Até o ano",
|
||||||
"trackNumber": "faixa"
|
"trackNumber": "Faixa"
|
||||||
},
|
},
|
||||||
"form": {
|
"form": {
|
||||||
"addServer": {
|
"addServer": {
|
||||||
"error_savePassword": "um erro ocorreu ao tentar gravar a palavra-passe",
|
"error_savePassword": "Um erro ocorreu ao tentar gravar a palavra-passe",
|
||||||
"ignoreCors": "ignorar CORS ($t(common.restartRequired))",
|
"ignoreCors": "Ignorar CORS ($t(common.restartRequired))",
|
||||||
"ignoreSsl": "ignorar ssl ($t(common.restartRequired))",
|
"ignoreSsl": "Ignorar ssl ($t(common.restartRequired))",
|
||||||
"input_legacyAuthentication": "ativar autenticação legada",
|
"input_legacyAuthentication": "Ativar autenticação legada",
|
||||||
"input_name": "nome do servidor",
|
"input_name": "Nome do servidor",
|
||||||
"input_password": "palavra-passe",
|
"input_password": "Palavra-passe",
|
||||||
"input_savePassword": "gravar palavra-passe",
|
"input_savePassword": "Gravar palavra-passe",
|
||||||
"input_url": "url",
|
"input_url": "Url",
|
||||||
"input_username": "nome de utilizador",
|
"input_username": "Nome de utilizador",
|
||||||
"success": "servidor adicionado com sucesso",
|
"success": "Servidor adicionado com sucesso",
|
||||||
"title": "adicionar servidor"
|
"title": "Adicionar servidor"
|
||||||
},
|
},
|
||||||
"addToPlaylist": {
|
"addToPlaylist": {
|
||||||
"input_playlists": "$t(entity.playlist_other)",
|
"input_playlists": "$t(entity.playlist, {\"count\": 2})",
|
||||||
"input_skipDuplicates": "pular duplicadas",
|
"input_skipDuplicates": "Pular duplicadas",
|
||||||
"success": "adicionado $t(entity.trackWithCount, {\"count\": {{message}} }) para $t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })",
|
"success": "Adicionado $t(entity.trackWithCount, {\"count\": {{message}} }) para $t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })",
|
||||||
"title": "adicionar à $t(entity.playlist_one)"
|
"title": "Adicionar à $t(entity.playlist, {\"count\": 1})"
|
||||||
},
|
},
|
||||||
"createPlaylist": {
|
"createPlaylist": {
|
||||||
"input_description": "$t(common.description)",
|
"input_description": "$t(common.description)",
|
||||||
"input_name": "$t(common.name)",
|
"input_name": "$t(common.name)",
|
||||||
"input_owner": "$t(common.owner)",
|
"input_owner": "$t(common.owner)",
|
||||||
"input_public": "público",
|
"input_public": "Público",
|
||||||
"success": "$t(entity.playlist_one) criada com sucesso",
|
"success": "$t(entity.playlist, {\"count\": 1}) criada com sucesso",
|
||||||
"title": "criar $t(entity.playlist_one)"
|
"title": "Criar $t(entity.playlist, {\"count\": 1})"
|
||||||
},
|
},
|
||||||
"deletePlaylist": {
|
"deletePlaylist": {
|
||||||
"input_confirm": "escreva o nome da $t(entity.playlist_one) para confirmar",
|
"input_confirm": "Escreva o nome da $t(entity.playlist, {\"count\": 1}) para confirmar",
|
||||||
"success": "$t(entity.playlist_one) apagada com sucesso",
|
"success": "$t(entity.playlist, {\"count\": 1}) apagada com sucesso",
|
||||||
"title": "apagar $t(entity.playlist_one)"
|
"title": "Apagar $t(entity.playlist, {\"count\": 1})"
|
||||||
},
|
},
|
||||||
"editPlaylist": {
|
"editPlaylist": {
|
||||||
"publicJellyfinNote": "O Jellyfin por algum motivo não expõe se uma playlist é pública ou não. Se deseja que ela permaneça pública, por favor selecione a seguinte entrada",
|
"publicJellyfinNote": "O Jellyfin por algum motivo não expõe se uma playlist é pública ou não. Se deseja que ela permaneça pública, por favor selecione a seguinte entrada",
|
||||||
"success": "$t(entity.playlist_one) atualizada com sucesso",
|
"success": "$t(entity.playlist, {\"count\": 1}) atualizada com sucesso",
|
||||||
"title": "editar $t(entity.playlist_one)"
|
"title": "Editar $t(entity.playlist, {\"count\": 1})"
|
||||||
},
|
},
|
||||||
"lyricSearch": {
|
"lyricSearch": {
|
||||||
"input_artist": "$t(entity.artist_one)",
|
"input_artist": "$t(entity.artist, {\"count\": 1})",
|
||||||
"input_name": "$t(common.name)",
|
"input_name": "$t(common.name)",
|
||||||
"title": "pesquisa de letras"
|
"title": "Pesquisa de letras"
|
||||||
},
|
},
|
||||||
"queryEditor": {
|
"queryEditor": {
|
||||||
"input_optionMatchAll": "corresponder todos",
|
"input_optionMatchAll": "Corresponder todos",
|
||||||
"input_optionMatchAny": "corresponder qualquer um"
|
"input_optionMatchAny": "Corresponder qualquer um"
|
||||||
},
|
},
|
||||||
"shareItem": {
|
"shareItem": {
|
||||||
"allowDownloading": "permitir descargas",
|
"allowDownloading": "Permitir descargas",
|
||||||
"description": "descrição",
|
"description": "Descrição",
|
||||||
"setExpiration": "definir expiração",
|
"setExpiration": "Definir expiração",
|
||||||
"success": "ligação de compartilhamento copiado para a área de transferência (ou clique aqui para abrir)",
|
"success": "Ligação de compartilhamento copiado para a área de transferência (ou clique aqui para abrir)",
|
||||||
"expireInvalid": "a expiração deve ser uma data futura",
|
"expireInvalid": "A expiração deve ser uma data futura",
|
||||||
"createFailed": "falha ao criar compartilhamento (o compartilhamento está ativado?)"
|
"createFailed": "Falha ao criar compartilhamento (o compartilhamento está ativado?)"
|
||||||
},
|
},
|
||||||
"updateServer": {
|
"updateServer": {
|
||||||
"success": "servidor atualizado com sucesso",
|
"success": "Servidor atualizado com sucesso",
|
||||||
"title": "atualizar servidor"
|
"title": "Atualizar servidor"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"page": {
|
"page": {
|
||||||
"albumArtistDetail": {
|
"albumArtistDetail": {
|
||||||
"about": "Sobre {{artist}}",
|
"about": "Sobre {{artist}}",
|
||||||
"appearsOn": "aparece em",
|
"appearsOn": "Aparece em",
|
||||||
"recentReleases": "lançamentos recentes",
|
"recentReleases": "Lançamentos recentes",
|
||||||
"viewDiscography": "ver discografia",
|
"viewDiscography": "Ver discografia",
|
||||||
"relatedArtists": "$t(entity.artist_other) relacionados",
|
"relatedArtists": "$t(entity.artist, {\"count\": 2}) relacionados",
|
||||||
"topSongs": "músicas mais tocadas",
|
"topSongs": "Músicas mais tocadas",
|
||||||
"topSongsFrom": "músicas mais tocadas de {{title}}",
|
"topSongsFrom": "Músicas mais tocadas de {{title}}",
|
||||||
"viewAll": "ver tudo",
|
"viewAll": "Ver tudo",
|
||||||
"viewAllTracks": "ver todas as $t(entity.track_other)"
|
"viewAllTracks": "Ver todas as $t(entity.track, {\"count\": 2})"
|
||||||
},
|
},
|
||||||
"albumArtistList": {
|
"albumArtistList": {
|
||||||
"title": "$t(entity.albumArtist_other)"
|
"title": "$t(entity.albumArtist, {\"count\": 2})"
|
||||||
},
|
},
|
||||||
"albumDetail": {
|
"albumDetail": {
|
||||||
"moreFromArtist": "mais deste $t(entity.artist_one)",
|
"moreFromArtist": "Mais deste $t(entity.artist, {\"count\": 1})",
|
||||||
"moreFromGeneric": "mais que {{item}}",
|
"moreFromGeneric": "Mais que {{item}}",
|
||||||
"released": "lançado"
|
"released": "Lançado"
|
||||||
},
|
},
|
||||||
"albumList": {
|
"albumList": {
|
||||||
"artistAlbums": "álbuns de {{artist}}",
|
"artistAlbums": "Álbuns de {{artist}}",
|
||||||
"genreAlbums": "\"{{genre}}\" $t(entity.album_other)",
|
"genreAlbums": "\"{{genre}}\" $t(entity.album, {\"count\": 2})",
|
||||||
"title": "$t(entity.album_other)"
|
"title": "$t(entity.album, {\"count\": 2})"
|
||||||
},
|
},
|
||||||
"appMenu": {
|
"appMenu": {
|
||||||
"collapseSidebar": "recolher barra lateral",
|
"collapseSidebar": "Recolher barra lateral",
|
||||||
"expandSidebar": "expandir barra lateral",
|
"expandSidebar": "Expandir barra lateral",
|
||||||
"goBack": "voltar",
|
"goBack": "Voltar",
|
||||||
"goForward": "avançar",
|
"goForward": "Avançar",
|
||||||
"manageServers": "gerir servidores",
|
"manageServers": "Gerir servidores",
|
||||||
"openBrowserDevtools": "abrir ferramentas do programador",
|
"openBrowserDevtools": "Abrir ferramentas do programador",
|
||||||
"quit": "$t(common.quit)",
|
"quit": "$t(common.quit)",
|
||||||
"selectServer": "selecionar servidor",
|
"selectServer": "Selecionar servidor",
|
||||||
"settings": "$t(common.setting_other)",
|
"settings": "$t(common.setting, {\"count\": 2})",
|
||||||
"version": "versão {{version}}"
|
"version": "Versão {{version}}"
|
||||||
},
|
},
|
||||||
"manageServers": {
|
"manageServers": {
|
||||||
"title": "gerir servidores",
|
"title": "Gerir servidores",
|
||||||
"serverDetails": "pormenores do servidor",
|
"serverDetails": "Pormenores do servidor",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"username": "nome de utilizador",
|
"username": "Nome de utilizador",
|
||||||
"editServerDetailsTooltip": "editar pormenores do servidor",
|
"editServerDetailsTooltip": "Editar pormenores do servidor",
|
||||||
"removeServer": "remover servidor"
|
"removeServer": "Remover servidor"
|
||||||
},
|
},
|
||||||
"contextMenu": {
|
"contextMenu": {
|
||||||
"addFavorite": "$t(action.addToFavorites)",
|
"addFavorite": "$t(action.addToFavorites)",
|
||||||
@@ -358,7 +361,7 @@
|
|||||||
"createPlaylist": "$t(action.createPlaylist)",
|
"createPlaylist": "$t(action.createPlaylist)",
|
||||||
"deletePlaylist": "$t(action.deletePlaylist)",
|
"deletePlaylist": "$t(action.deletePlaylist)",
|
||||||
"deselectAll": "$t(action.deselectAll)",
|
"deselectAll": "$t(action.deselectAll)",
|
||||||
"download": "descarregar",
|
"download": "Descarregar",
|
||||||
"moveToNext": "$t(action.moveToNext)",
|
"moveToNext": "$t(action.moveToNext)",
|
||||||
"moveToBottom": "$t(action.moveToBottom)",
|
"moveToBottom": "$t(action.moveToBottom)",
|
||||||
"moveToTop": "$t(action.moveToTop)",
|
"moveToTop": "$t(action.moveToTop)",
|
||||||
@@ -370,173 +373,172 @@
|
|||||||
"removeFromQueue": "$t(action.removeFromQueue)",
|
"removeFromQueue": "$t(action.removeFromQueue)",
|
||||||
"setRating": "$t(action.setRating)",
|
"setRating": "$t(action.setRating)",
|
||||||
"playShuffled": "$t(player.shuffle)",
|
"playShuffled": "$t(player.shuffle)",
|
||||||
"shareItem": "partilhar elemento",
|
"shareItem": "Partilhar elemento",
|
||||||
"showDetails": "obter informações"
|
"showDetails": "Obter informações"
|
||||||
},
|
},
|
||||||
"fullscreenPlayer": {
|
"fullscreenPlayer": {
|
||||||
"config": {
|
"config": {
|
||||||
"dynamicBackground": "fundo dinâmico",
|
"dynamicBackground": "Fundo dinâmico",
|
||||||
"dynamicImageBlur": "tamanho do desfoque da imagem",
|
"dynamicImageBlur": "Tamanho do desfoque da imagem",
|
||||||
"dynamicIsImage": "ativar imagem de fundo",
|
"dynamicIsImage": "Ativar imagem de fundo",
|
||||||
"followCurrentLyric": "acompanhar letra",
|
"followCurrentLyric": "Acompanhar letra",
|
||||||
"lyricAlignment": "alinhamento da letra",
|
"lyricAlignment": "Alinhamento da letra",
|
||||||
"lyricOffset": "deslocamento da letra (ms)",
|
"lyricOffset": "Deslocamento da letra (ms)",
|
||||||
"lyricGap": "espaçamento da letra",
|
"lyricGap": "Espaçamento da letra",
|
||||||
"lyricSize": "tamanho da letra",
|
"lyricSize": "Tamanho da letra",
|
||||||
"opacity": "opacidade",
|
"opacity": "Opacidade",
|
||||||
"showLyricMatch": "exibir correspondência da letra",
|
"showLyricMatch": "Exibir correspondência da letra",
|
||||||
"showLyricProvider": "exibir origem da letra",
|
"showLyricProvider": "Exibir origem da letra",
|
||||||
"synchronized": "sincronizado",
|
"synchronized": "Sincronizado",
|
||||||
"unsynchronized": "não sincronizado",
|
"unsynchronized": "Não sincronizado",
|
||||||
"useImageAspectRatio": "usar proporção da imagem"
|
"useImageAspectRatio": "Usar proporção da imagem"
|
||||||
},
|
},
|
||||||
"lyrics": "letra",
|
"lyrics": "Letra",
|
||||||
"related": "relacionado",
|
"related": "Relacionado",
|
||||||
"upNext": "a seguir",
|
"upNext": "A seguir",
|
||||||
"visualizer": "visualizador",
|
"visualizer": "Visualizador",
|
||||||
"noLyrics": "nenhuma letra encontrada"
|
"noLyrics": "Nenhuma letra encontrada"
|
||||||
},
|
},
|
||||||
"genreList": {
|
"genreList": {
|
||||||
"showAlbums": "mostrar $t(entity.genre_one) $t(entity.album_other)",
|
"showAlbums": "Mostrar $t(entity.genre, {\"count\": 1}) $t(entity.album, {\"count\": 2})",
|
||||||
"showTracks": "mostrar $t(entity.genre_one) $t(entity.track_other)",
|
"showTracks": "Mostrar $t(entity.genre, {\"count\": 1}) $t(entity.track, {\"count\": 2})",
|
||||||
"title": "$t(entity.genre_other)"
|
"title": "$t(entity.genre, {\"count\": 2})"
|
||||||
},
|
},
|
||||||
"globalSearch": {
|
"globalSearch": {
|
||||||
"commands": {
|
"commands": {
|
||||||
"goToPage": "ir à página",
|
"goToPage": "Ir à página",
|
||||||
"searchFor": "procurar {{query}}",
|
"searchFor": "Procurar {{query}}",
|
||||||
"serverCommands": "comandos do servidor"
|
"serverCommands": "Comandos do servidor"
|
||||||
},
|
},
|
||||||
"title": "comandos"
|
"title": "Comandos"
|
||||||
},
|
},
|
||||||
"home": {
|
"home": {
|
||||||
"explore": "explore a sua biblioteca",
|
"explore": "Explore a sua biblioteca",
|
||||||
"mostPlayed": "mais tocado",
|
"mostPlayed": "Mais tocado",
|
||||||
"newlyAdded": "lançamentos recém-adicionados",
|
"newlyAdded": "Lançamentos recém-adicionados",
|
||||||
"recentlyPlayed": "tocado recentemente",
|
"recentlyPlayed": "Tocado recentemente",
|
||||||
"title": "$t(common.home)"
|
"title": "$t(common.home)"
|
||||||
},
|
},
|
||||||
"itemDetail": {
|
"itemDetail": {
|
||||||
"copyPath": "copiar caminho para a área de transferência",
|
"copyPath": "Copiar caminho para a área de transferência",
|
||||||
"copiedPath": "caminho copiado com sucesso",
|
"copiedPath": "Caminho copiado com sucesso",
|
||||||
"openFile": "mostrar faixa no gestor de ficheiros"
|
"openFile": "Mostrar faixa no gestor de ficheiros"
|
||||||
},
|
},
|
||||||
"playlist": {
|
"playlist": {
|
||||||
"reorder": "reordenar apenas disponível quando ordenado pelo id"
|
"reorder": "Reordenar apenas disponível quando ordenado pelo ID"
|
||||||
},
|
},
|
||||||
"playlistList": {
|
"playlistList": {
|
||||||
"title": "$t(entity.playlist_other)"
|
"title": "$t(entity.playlist, {\"count\": 2})"
|
||||||
},
|
},
|
||||||
"setting": {
|
"setting": {
|
||||||
"advanced": "avançado",
|
"advanced": "Avançado",
|
||||||
"generalTab": "geral",
|
"generalTab": "Geral",
|
||||||
"hotkeysTab": "teclas de atalho",
|
"hotkeysTab": "Teclas de atalho",
|
||||||
"playbackTab": "reprodução",
|
"playbackTab": "Reprodução",
|
||||||
"windowTab": "janela"
|
"windowTab": "Janela"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"albumArtists": "$t(entity.albumArtist_other)",
|
"albumArtists": "$t(entity.albumArtist, {\"count\": 2})",
|
||||||
"albums": "$t(entity.album_other)",
|
"albums": "$t(entity.album, {\"count\": 2})",
|
||||||
"artists": "$t(entity.artist_other)",
|
"artists": "$t(entity.artist, {\"count\": 2})",
|
||||||
"folders": "$t(entity.folder_other)",
|
"folders": "$t(entity.folder, {\"count\": 2})",
|
||||||
"genres": "$t(entity.genre_other)",
|
"genres": "$t(entity.genre, {\"count\": 2})",
|
||||||
"home": "$t(common.home)",
|
"home": "$t(common.home)",
|
||||||
"myLibrary": "a minha biblioteca",
|
"myLibrary": "A minha biblioteca",
|
||||||
"nowPlaying": "agora a tocar",
|
"nowPlaying": "Agora a tocar",
|
||||||
"playlists": "$t(entity.playlist_other)",
|
"playlists": "$t(entity.playlist, {\"count\": 2})",
|
||||||
"search": "$t(common.search)",
|
"search": "$t(common.search)",
|
||||||
"settings": "$t(common.setting_other)",
|
"settings": "$t(common.setting, {\"count\": 2})",
|
||||||
"shared": "$t(entity.playlist_other) partilhada",
|
"shared": "$t(entity.playlist, {\"count\": 2}) partilhada",
|
||||||
"tracks": "$t(entity.track_other)"
|
"tracks": "$t(entity.track, {\"count\": 2})"
|
||||||
},
|
},
|
||||||
"trackList": {
|
"trackList": {
|
||||||
"artistTracks": "faixas de {{artist}}",
|
"artistTracks": "Faixas de {{artist}}",
|
||||||
"genreTracks": "\"{{genre}}\" $t(entity.track_other)",
|
"genreTracks": "\"{{genre}}\" $t(entity.track, {\"count\": 2})",
|
||||||
"title": "$t(entity.track_other)"
|
"title": "$t(entity.track, {\"count\": 2})"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"player": {
|
"player": {
|
||||||
"addLast": "adicionar no final",
|
"addLast": "Adicionar no final",
|
||||||
"addNext": "adicionar a seguir",
|
"addNext": "Adicionar a seguir",
|
||||||
"favorite": "favorito",
|
"favorite": "Favorito",
|
||||||
"mute": "mudo",
|
"mute": "Mudo",
|
||||||
"muted": "mudo",
|
"muted": "Mudo",
|
||||||
"next": "próximo",
|
"next": "Próximo",
|
||||||
"play": "tocar",
|
"play": "Tocar",
|
||||||
"playbackFetchCancel": "isto demora um pouco... feche a notificação para cancelar",
|
"playbackFetchCancel": "Isto demora um pouco... feche a notificação para cancelar",
|
||||||
"playbackFetchInProgress": "a carregar músicas…",
|
"playbackFetchInProgress": "A carregar músicas…",
|
||||||
"playbackFetchNoResults": "nenhuma música encontrada",
|
"playbackFetchNoResults": "Nenhuma música encontrada",
|
||||||
"playbackSpeed": "velocidade de reprodução",
|
"playbackSpeed": "Velocidade de reprodução",
|
||||||
"playRandom": "tocar aleatório",
|
"playRandom": "Tocar aleatório",
|
||||||
"playSimilarSongs": "tocar músicas similares",
|
"playSimilarSongs": "Tocar músicas similares",
|
||||||
"previous": "anterior",
|
"previous": "Anterior",
|
||||||
"queue_clear": "limpar fila",
|
"queue_clear": "Limpar fila",
|
||||||
"queue_moveToBottom": "mover selecionados para o topo",
|
"queue_moveToBottom": "Mover selecionados para o fim",
|
||||||
"queue_moveToTop": "mover selecionados para o fim",
|
"queue_moveToTop": "Mover selecionados para o topo",
|
||||||
"queue_remove": "remover selecionados",
|
"queue_remove": "Remover selecionados",
|
||||||
"repeat": "repetir",
|
"repeat": "Repetir",
|
||||||
"repeat_all": "repetir tudo",
|
"repeat_all": "Repetir tudo",
|
||||||
"repeat_off": "repetição desativada",
|
"repeat_off": "Repetição desativada",
|
||||||
"shuffle": "tocar aleatório",
|
"shuffle": "Tocar aleatório",
|
||||||
"shuffle_off": "aleatório desativado",
|
"shuffle_off": "Aleatório desativado",
|
||||||
"skip": "pular",
|
"skip": "Pular",
|
||||||
"skip_back": "retroceder",
|
"skip_back": "Retroceder",
|
||||||
"skip_forward": "avançar",
|
"skip_forward": "Avançar",
|
||||||
"stop": "parar",
|
"stop": "Parar",
|
||||||
"toggleFullscreenPlayer": "alternar player de ecrã cheio",
|
"toggleFullscreenPlayer": "Alternar player de ecrã cheio",
|
||||||
"unfavorite": "remover favorito",
|
"unfavorite": "Remover favorito",
|
||||||
"pause": "pausar",
|
"pause": "Pausar",
|
||||||
"viewQueue": "ver fila"
|
"viewQueue": "Ver fila"
|
||||||
},
|
},
|
||||||
"setting": {
|
"setting": {
|
||||||
"accentColor": "cor de realce",
|
"accentColor": "Cor de realce",
|
||||||
"accentColor_description": "define a cor de realce para a aplicação",
|
"accentColor_description": "Define a cor de realce para a aplicação",
|
||||||
"albumBackground": "imagem de fundo do álbum",
|
"albumBackground": "Imagem de fundo do álbum",
|
||||||
"albumBackground_description": "adiciona uma imagem de fundo contendo a arte do álbum para a página de álbum",
|
"albumBackground_description": "Adiciona uma imagem de fundo contendo a arte do álbum para a página de álbum",
|
||||||
"albumBackgroundBlur": "tamanho de desfoque da imagem de fundo do álbum",
|
"albumBackgroundBlur": "Tamanho de desfoque da imagem de fundo do álbum",
|
||||||
"albumBackgroundBlur_description": "ajusta a quantidade de desfoque aplicada para a imagem de fundo do álbum",
|
"albumBackgroundBlur_description": "Ajusta a quantidade de desfoque aplicada para a imagem de fundo do álbum",
|
||||||
"applicationHotkeys": "teclas de atalho da aplicação",
|
"applicationHotkeys": "Teclas de atalho da aplicação",
|
||||||
"applicationHotkeys_description": "configure as teclas de atalho da aplicação. clique na caixa de seleção para definir como tecla de atalho global (somente desktop)",
|
"applicationHotkeys_description": "Configure as teclas de atalho da aplicação. clique na caixa de seleção para definir como tecla de atalho global (somente desktop)",
|
||||||
"artistConfiguration": "configuração da página de artista de álbum",
|
"artistConfiguration": "Configuração da página de artista de álbum",
|
||||||
"artistConfiguration_description": "configure quais elementos serão mostrados, e em qual ordem, na página de artista de álbum",
|
"artistConfiguration_description": "Configure quais elementos serão mostrados, e em qual ordem, na página de artista de álbum",
|
||||||
"audioDevice": "dispositivo de áudio",
|
"audioDevice": "Dispositivo de áudio",
|
||||||
"audioDevice_description": "selecione o dispositivo de áudio usado para reprodução (somente player web)",
|
"audioDevice_description": "Selecione o dispositivo de áudio usado para reprodução (somente player web)",
|
||||||
"audioExclusiveMode": "modo de áudio exclusivo",
|
"audioExclusiveMode": "Modo de áudio exclusivo",
|
||||||
"audioExclusiveMode_description": "ativar modo de saída exclusiva. Neste modo, o sistema é geralmente bloqueado, e apenas mpv terá saída de áudio",
|
"audioExclusiveMode_description": "Ativar modo de saída exclusiva. Neste modo, o sistema é geralmente bloqueado, e apenas mpv terá saída de áudio",
|
||||||
"audioPlayer": "player de áudio",
|
"audioPlayer": "Player de áudio",
|
||||||
"audioPlayer_description": "selecione o player de áudio usado para reprodução",
|
"audioPlayer_description": "Selecione o player de áudio usado para reprodução",
|
||||||
"buttonSize": "tamanho do botão da barra de reprodução",
|
"buttonSize": "Tamanho do botão da barra de reprodução",
|
||||||
"buttonSize_description": "o tamanho dos botões da barra de reprodução",
|
"buttonSize_description": "O tamanho dos botões da barra de reprodução",
|
||||||
"clearCache": "limpar cache do navegador",
|
"clearCache": "Limpar cache do navegador",
|
||||||
"clearCache_description": "uma 'limpeza geral' do feishin. em adição a limpar o cache do feishin, limpa o cache do navegador (imagens gravadas e outros recursos). as credenciais de servidor e as configurações serão mantidas",
|
"clearCache_description": "Uma 'limpeza geral' do Feishin. Em adição a limpar o cache do Feishin, limpa o cache do navegador (imagens gravadas e outros recursos). As credenciais de servidor e as configurações serão mantidas",
|
||||||
"clearQueryCache": "limpar cache do feishin",
|
"clearQueryCache": "Limpar cache do Feishin",
|
||||||
"clearQueryCache_description": "uma 'limpeza leve' do feishin. isto irá renovar playlists, metadados de faixas, e resetar letras gravadas. as configurações, as credenciais de servidor e o cache de imagens serão mantidos",
|
"clearQueryCache_description": "Uma 'limpeza leve' do Feishin. Isto irá renovar playlists, metadados de faixas, e resetar letras gravadas. As configurações, as credenciais de servidor e o cache de imagens serão mantidos",
|
||||||
"clearCacheSuccess": "cache limpo com sucesso",
|
"clearCacheSuccess": "Cache limpo com sucesso",
|
||||||
"contextMenu": "configuração do menu de contexto (clique do botão direito do rato)",
|
"contextMenu": "Configuração do menu de contexto (clique do botão direito do rato)",
|
||||||
"contextMenu_description": "permite esconder elementos exibidos no menu quando clica num elemento com o botão direito. elementos não selecionados serão escondidos",
|
"contextMenu_description": "Permite esconder elementos exibidos no menu quando clica num elemento com o botão direito. elementos não selecionados serão escondidos",
|
||||||
"crossfadeDuration": "duraçao de crossfade",
|
"crossfadeDuration": "Duraçao de crossfade",
|
||||||
"crossfadeDuration_description": "define a duração do efeito crossfade",
|
"crossfadeDuration_description": "Define a duração do efeito crossfade",
|
||||||
"crossfadeStyle_description": "seleciona qual estilo de crossfade usado no player de áudio",
|
"crossfadeStyle_description": "Seleciona qual estilo de crossfade usado no player de áudio",
|
||||||
"customCssEnable": "ativar css customizado",
|
"customCssEnable": "Ativar CSS customizado",
|
||||||
"customCssEnable_description": "permite escrever css customizado",
|
"customCssEnable_description": "Permite escrever CSS customizado",
|
||||||
"customCssNotice": "Aviso: apesar de existir alguma higienização (url() e content: não são permitidas), o uso de css personalizado ainda pode representar riscos ao alterar a interface",
|
"customCssNotice": "Aviso: apesar de existir alguma higienização (URL() e content: não são permitidas), o uso de CSS personalizado ainda pode representar riscos ao alterar a interface",
|
||||||
"customCss": "css customizado",
|
"customCss": "Css customizado",
|
||||||
"disableAutomaticUpdates": "desativar atualizações automáticas",
|
"disableLibraryUpdateOnStartup": "Desativar a verificação de novas versões na inicialização",
|
||||||
"disableLibraryUpdateOnStartup": "desativar a verificação de novas versões na inicialização",
|
|
||||||
"discordApplicationId": "{{discord}} ID da aplicação",
|
"discordApplicationId": "{{discord}} ID da aplicação",
|
||||||
"discordIdleStatus_description": "quando ativado, atualiza o estado enquanto o player está ocioso",
|
"discordIdleStatus_description": "Quando ativado, atualiza o estado enquanto o player está ocioso",
|
||||||
"discordUpdateInterval_description": "o tempo em segundos entre cada atualização (mínimo 15 segundos)",
|
"discordUpdateInterval_description": "O tempo em segundos entre cada atualização (mínimo 15 segundos)",
|
||||||
"playButtonBehavior_description": "define o comportamento padrão do botão play ao adicionar músicas à fila"
|
"playButtonBehavior_description": "Define o comportamento padrão do botão play ao adicionar músicas à fila"
|
||||||
},
|
},
|
||||||
"table": {
|
"table": {
|
||||||
"column": {
|
"column": {
|
||||||
"discNumber": "disco",
|
"discNumber": "Disco",
|
||||||
"size": "$t(common.size)",
|
"size": "$t(common.size)",
|
||||||
"title": "titulo"
|
"title": "Titulo"
|
||||||
},
|
},
|
||||||
"config": {
|
"config": {
|
||||||
"label": {
|
"label": {
|
||||||
"discNumber": "numero do disco",
|
"discNumber": "Numero do disco",
|
||||||
"titleCombined": "$t(common.title) (combinado)"
|
"titleCombined": "$t(common.title) (combinado)"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,19 +1,19 @@
|
|||||||
{
|
{
|
||||||
"common": {
|
"common": {
|
||||||
"confirm": "confirmă",
|
"confirm": "Confirmă",
|
||||||
"create": "creează",
|
"create": "Creează",
|
||||||
"biography": "biografie",
|
"biography": "Biografie",
|
||||||
"areYouSure": "ești sigur?",
|
"areYouSure": "Ești sigur?",
|
||||||
"no": "nu",
|
"no": "Nu",
|
||||||
"name": "nume",
|
"name": "Nume",
|
||||||
"ok": "ok",
|
"ok": "Ok",
|
||||||
"note": "notă",
|
"note": "Notă",
|
||||||
"yes": "da",
|
"yes": "Da",
|
||||||
"explicit": "explicit",
|
"explicit": "Explicit",
|
||||||
"year": "an",
|
"year": "An",
|
||||||
"menu": "meniu"
|
"menu": "Meniu"
|
||||||
},
|
},
|
||||||
"filter": {
|
"filter": {
|
||||||
"biography": "biografie"
|
"biography": "Biografie"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,322 +1,323 @@
|
|||||||
{
|
{
|
||||||
"action": {
|
"action": {
|
||||||
"editPlaylist": "redigera $t(entity.playlist_one)",
|
"editPlaylist": "Redigera $t(entity.playlist, {\"count\": 1})",
|
||||||
"goToPage": "gå till sida",
|
"goToPage": "Gå till sida",
|
||||||
"moveToTop": "flytta till toppen",
|
"moveToTop": "Flytta till toppen",
|
||||||
"clearQueue": "rensa kö",
|
"clearQueue": "Rensa kö",
|
||||||
"addToFavorites": "lägg till $t(entity.favorite_other)",
|
"addToFavorites": "Lägg till $t(entity.favorite, {\"count\": 2})",
|
||||||
"addToPlaylist": "lägg till $t(entity.playlist_one)",
|
"addToPlaylist": "Lägg till $t(entity.playlist, {\"count\": 1})",
|
||||||
"createPlaylist": "skapa $t(entity.playlist_one)",
|
"createPlaylist": "Skapa $t(entity.playlist, {\"count\": 1})",
|
||||||
"removeFromPlaylist": "ta bort från $t(entity.playlist_one)",
|
"removeFromPlaylist": "Ta bort från $t(entity.playlist, {\"count\": 1})",
|
||||||
"viewPlaylists": "visa $t(entity.playlist_other)",
|
"viewPlaylists": "Visa $t(entity.playlist, {\"count\": 2})",
|
||||||
"refresh": "$t(common.refresh)",
|
"refresh": "$t(common.refresh)",
|
||||||
"deletePlaylist": "ta bort $t(entity.playlist_one)",
|
"deletePlaylist": "Ta bort $t(entity.playlist, {\"count\": 1})",
|
||||||
"removeFromQueue": "ta bort från kö",
|
"removeFromQueue": "Ta bort från kö",
|
||||||
"deselectAll": "avmarkera alla",
|
"deselectAll": "Avmarkera alla",
|
||||||
"moveToBottom": "flytta till botten",
|
"moveToBottom": "Flytta till botten",
|
||||||
"setRating": "sätt betyg",
|
"setRating": "Sätt betyg",
|
||||||
"toggleSmartPlaylistEditor": "växla $t(entity.smartPlaylist) redigerare",
|
"toggleSmartPlaylistEditor": "Växla $t(entity.smartPlaylist) redigerare",
|
||||||
"removeFromFavorites": "ta bort från $t(entity.favorite_other)",
|
"removeFromFavorites": "Ta bort från $t(entity.favorite, {\"count\": 2})",
|
||||||
"downloadStarted": "startade nedladdning av {{count}} objekt",
|
"downloadStarted": "Startade nedladdning av {{count}} objekt",
|
||||||
"moveToNext": "flytta till nästa",
|
"moveToNext": "Flytta till nästa",
|
||||||
"moveUp": "flytta upp",
|
"moveUp": "Flytta upp",
|
||||||
"moveDown": "flytta ner",
|
"moveDown": "Flytta ner",
|
||||||
"holdToMoveToTop": "håll för att flytta till toppen",
|
"holdToMoveToTop": "Håll för att flytta till toppen",
|
||||||
"holdToMoveToBottom": "håll för att flytta till botten",
|
"holdToMoveToBottom": "Håll för att flytta till botten",
|
||||||
"moveItems": "flytta objekt",
|
"moveItems": "Flytta objekt",
|
||||||
"shuffle": "slumpa",
|
"shuffle": "Slumpa",
|
||||||
"shuffleAll": "slumpa alla",
|
"shuffleAll": "Slumpa alla",
|
||||||
"shuffleSelected": "slumpa valda",
|
"shuffleSelected": "Slumpa valda",
|
||||||
"viewMore": "visa mer",
|
"viewMore": "Visa mer",
|
||||||
"openIn": {
|
"openIn": {
|
||||||
"lastfm": "Öppna i Last.fm",
|
"lastfm": "Öppna i Last.fm",
|
||||||
"musicbrainz": "Öppna i MusicBrainz"
|
"musicbrainz": "Öppna i MusicBrainz"
|
||||||
},
|
},
|
||||||
"createRadioStation": "skapa $t(entity.radioStation_one)",
|
"createRadioStation": "Skapa $t(entity.radioStation, {\"count\": 1})",
|
||||||
"deleteRadioStation": "ta bort $t(entity.radioStation_one)",
|
"deleteRadioStation": "Ta bort $t(entity.radioStation, {\"count\": 1})",
|
||||||
"addOrRemoveFromSelection": "lägg till eller ta bort från markerade",
|
"addOrRemoveFromSelection": "Lägg till eller ta bort från markerade",
|
||||||
"selectRangeOfItems": "välj en mängd objekt",
|
"selectRangeOfItems": "Välj en mängd objekt",
|
||||||
"selectAll": "markera alla",
|
"selectAll": "Markera alla",
|
||||||
"openApplicationDirectory": "öppna applikationskatalog"
|
"openApplicationDirectory": "Öppna applikationskatalog"
|
||||||
},
|
},
|
||||||
"common": {
|
"common": {
|
||||||
"backward": "bakåt",
|
"backward": "Bakåt",
|
||||||
"increase": "öka",
|
"increase": "Öka",
|
||||||
"rating": "betyg",
|
"rating": "Betyg",
|
||||||
"bpm": "bpm",
|
"bpm": "Bpm",
|
||||||
"refresh": "laddaom",
|
"refresh": "Laddaom",
|
||||||
"unknown": "okänd",
|
"unknown": "Okänd",
|
||||||
"areYouSure": "är du säker?",
|
"areYouSure": "Är du säker?",
|
||||||
"edit": "redigera",
|
"edit": "Redigera",
|
||||||
"favorite": "favorit",
|
"favorite": "Favorit",
|
||||||
"left": "vänster",
|
"left": "Vänster",
|
||||||
"save": "spara",
|
"save": "Spara",
|
||||||
"right": "höger",
|
"right": "Höger",
|
||||||
"currentSong": "aktuell $t(entity.track_one)",
|
"currentSong": "Aktuell $t(entity.track, {\"count\": 1})",
|
||||||
"collapse": "kollaps",
|
"collapse": "Kollaps",
|
||||||
"trackNumber": "spår",
|
"trackNumber": "Spår",
|
||||||
"descending": "fallande",
|
"descending": "Fallande",
|
||||||
"add": "lägg till",
|
"add": "Lägg till",
|
||||||
"gap": "avstånd",
|
"gap": "Avstånd",
|
||||||
"ascending": "stigande",
|
"ascending": "Stigande",
|
||||||
"dismiss": "avskeda",
|
"dismiss": "Avskeda",
|
||||||
"year": "år",
|
"year": "År",
|
||||||
"manage": "hantera",
|
"manage": "Hantera",
|
||||||
"limit": "gräns",
|
"limit": "Gräns",
|
||||||
"minimize": "minimera",
|
"minimize": "Minimera",
|
||||||
"modified": "modifierad",
|
"modified": "Modifierad",
|
||||||
"duration": "längd",
|
"duration": "Längd",
|
||||||
"name": "namn",
|
"name": "Namn",
|
||||||
"maximize": "maximera",
|
"maximize": "Maximera",
|
||||||
"decrease": "minska",
|
"decrease": "Minska",
|
||||||
"ok": "ok",
|
"ok": "Ok",
|
||||||
"description": "beskrivning",
|
"description": "Beskrivning",
|
||||||
"configure": "konfigurera",
|
"configure": "Konfigurera",
|
||||||
"path": "sökväg",
|
"path": "Sökväg",
|
||||||
"no": "nej",
|
"no": "Nej",
|
||||||
"owner": "ägare",
|
"owner": "Ägare",
|
||||||
"enable": "aktivera",
|
"enable": "Aktivera",
|
||||||
"clear": "töm",
|
"clear": "Töm",
|
||||||
"forward": "framåt",
|
"forward": "Framåt",
|
||||||
"delete": "ta bort",
|
"delete": "Ta bort",
|
||||||
"cancel": "avbryt",
|
"cancel": "Avbryt",
|
||||||
"forceRestartRequired": "starta om för att tillämpa ändringar... Stäng meddelandet för att starta om",
|
"forceRestartRequired": "Starta om för att tillämpa ändringar... Stäng meddelandet för att starta om",
|
||||||
"setting": "inställning",
|
"setting_one": "Inställning",
|
||||||
"version": "version",
|
"setting_other": "",
|
||||||
"title": "titel",
|
"version": "Version",
|
||||||
"filter_one": "filter",
|
"title": "Titel",
|
||||||
"filter_other": "filter",
|
"filter_one": "Filter",
|
||||||
"filters": "filter",
|
"filter_other": "Filter",
|
||||||
"create": "skapa",
|
"filters": "Filter",
|
||||||
"bitrate": "bithastighet",
|
"create": "Skapa",
|
||||||
"saveAndReplace": "spara och skrivöver",
|
"bitrate": "Bithastighet",
|
||||||
"action_one": "handling",
|
"saveAndReplace": "Spara och skrivöver",
|
||||||
"action_other": "handlingar",
|
"action_one": "Handling",
|
||||||
"playerMustBePaused": "spelaren måste pausas",
|
"action_other": "Handlingar",
|
||||||
"confirm": "bekräfta",
|
"playerMustBePaused": "Spelaren måste pausas",
|
||||||
"resetToDefault": "återställ till standard",
|
"confirm": "Bekräfta",
|
||||||
"home": "hem",
|
"resetToDefault": "Återställ till standard",
|
||||||
"comingSoon": "kommer snart…",
|
"home": "Hem",
|
||||||
"reset": "nollställ",
|
"comingSoon": "Kommer snart…",
|
||||||
"channel_one": "kanal",
|
"reset": "Nollställ",
|
||||||
"channel_other": "kanaler",
|
"channel_one": "Kanal",
|
||||||
"disable": "inaktivera",
|
"channel_other": "Kanaler",
|
||||||
"sortOrder": "ordning",
|
"disable": "Inaktivera",
|
||||||
"none": "ingen",
|
"sortOrder": "Ordning",
|
||||||
"menu": "meny",
|
"none": "Ingen",
|
||||||
"restartRequired": "omstart krävs",
|
"menu": "Meny",
|
||||||
"previousSong": "föregående $t(entity.track_one)",
|
"restartRequired": "Omstart krävs",
|
||||||
"noResultsFromQuery": "frågan returnerade inga resultat",
|
"previousSong": "Föregående $t(entity.track, {\"count\": 1})",
|
||||||
"quit": "avsluta",
|
"noResultsFromQuery": "Frågan returnerade inga resultat",
|
||||||
"expand": "expandera",
|
"quit": "Avsluta",
|
||||||
"search": "sök",
|
"expand": "Expandera",
|
||||||
"saveAs": "spara som",
|
"search": "Sök",
|
||||||
"disc": "skiva",
|
"saveAs": "Spara som",
|
||||||
"yes": "ja",
|
"disc": "Skiva",
|
||||||
"random": "slumpmässig",
|
"yes": "Ja",
|
||||||
"size": "storlek",
|
"random": "Slumpmässig",
|
||||||
"biography": "biografi",
|
"size": "Storlek",
|
||||||
"note": "anteckning",
|
"biography": "Biografi",
|
||||||
"center": "center",
|
"note": "Anteckning",
|
||||||
"explicitStatus": "olämplig status",
|
"center": "Center",
|
||||||
"additionalParticipants": "ytterligare medverkare",
|
"explicitStatus": "Olämplig status",
|
||||||
"newVersion": "en ny version har installerats {{version}}",
|
"additionalParticipants": "Ytterligare medverkare",
|
||||||
"viewReleaseNotes": "se utgåveinformation",
|
"newVersion": "En ny version har installerats {{version}}",
|
||||||
"bitDepth": "bitdjup",
|
"viewReleaseNotes": "Se utgåveinformation",
|
||||||
"close": "stäng",
|
"bitDepth": "Bitdjup",
|
||||||
"codec": "kodek",
|
"close": "Stäng",
|
||||||
"doNotShowAgain": "visa inte detta igen",
|
"codec": "Kodek",
|
||||||
"view": "visa",
|
"doNotShowAgain": "Visa inte detta igen",
|
||||||
"externalLinks": "externa länkar",
|
"view": "Visa",
|
||||||
"faster": "snabbare",
|
"externalLinks": "Externa länkar",
|
||||||
|
"faster": "Snabbare",
|
||||||
"mbid": "MusicBrainz ID",
|
"mbid": "MusicBrainz ID",
|
||||||
"noFilters": "inga filter konfigurerade",
|
"noFilters": "Inga filter konfigurerade",
|
||||||
"preview": "förhandsvisa",
|
"preview": "Förhandsvisa",
|
||||||
"private": "privat",
|
"private": "Privat",
|
||||||
"public": "allmän",
|
"public": "Allmän",
|
||||||
"recordLabel": "skivbolag",
|
"recordLabel": "Skivbolag",
|
||||||
"releaseType": "utgåvetyp",
|
"releaseType": "Utgåvetyp",
|
||||||
"reload": "ladda om",
|
"reload": "Ladda om",
|
||||||
"sampleRate": "samplingstakt",
|
"sampleRate": "Samplingstakt",
|
||||||
"slower": "långsammare",
|
"slower": "Långsammare",
|
||||||
"share": "dela",
|
"share": "Dela",
|
||||||
"sort": "sortera",
|
"sort": "Sortera",
|
||||||
"tags": "taggar",
|
"tags": "Taggar",
|
||||||
"translation": "översättning",
|
"translation": "Översättning",
|
||||||
"explicit": "olämplig",
|
"explicit": "Olämplig",
|
||||||
"clean": "städad",
|
"clean": "Städad",
|
||||||
"gridRows": "rutnätsrader",
|
"gridRows": "Rutnätsrader",
|
||||||
"tableColumns": "tabellkolumner",
|
"tableColumns": "Tabellkolumner",
|
||||||
"itemsMore": "{{count}} fler",
|
"itemsMore": "{{count}} fler",
|
||||||
"countSelected": "{{count}} markerade"
|
"countSelected": "{{count}} markerade"
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"remotePortWarning": "starta om servern för att tillämpa den nya porten",
|
"remotePortWarning": "Starta om servern för att tillämpa den nya porten",
|
||||||
"systemFontError": "ett fel uppstod vid försök att hämta systemteckensnitt",
|
"systemFontError": "Ett fel uppstod vid försök att hämta systemteckensnitt",
|
||||||
"playbackError": "ett fel uppstod vid försök att spela upp media",
|
"playbackError": "Ett fel uppstod vid försök att spela upp media",
|
||||||
"endpointNotImplementedError": "endpoint {{endpoint}} är inte implementerad för {{serverType}}",
|
"endpointNotImplementedError": "Endpoint {{endpoint}} är inte implementerad för {{serverType}}",
|
||||||
"remotePortError": "ett fel uppstod vid försök att ange serverporten",
|
"remotePortError": "Ett fel uppstod vid försök att ange serverporten",
|
||||||
"serverRequired": "server krävs",
|
"serverRequired": "Server krävs",
|
||||||
"authenticationFailed": "autentiseringen misslyckades",
|
"authenticationFailed": "Autentiseringen misslyckades",
|
||||||
"apiRouteError": "det går inte att dirigera begäran",
|
"apiRouteError": "Det går inte att dirigera begäran",
|
||||||
"genericError": "ett fel uppstod",
|
"genericError": "Ett fel uppstod",
|
||||||
"credentialsRequired": "autentiseringsuppgifter som krävs",
|
"credentialsRequired": "Autentiseringsuppgifter som krävs",
|
||||||
"sessionExpiredError": "din session har löpt ut",
|
"sessionExpiredError": "Din session har löpt ut",
|
||||||
"remoteEnableError": "Ett fel uppstod vid försök att $t(common.enable) servern",
|
"remoteEnableError": "Ett fel uppstod vid försök att $t(common.enable) servern",
|
||||||
"localFontAccessDenied": "åtkomst nekad till lokala teckensnitt",
|
"localFontAccessDenied": "Åtkomst nekad till lokala teckensnitt",
|
||||||
"serverNotSelectedError": "ingen server vald",
|
"serverNotSelectedError": "Ingen server vald",
|
||||||
"remoteDisableError": "ett fel uppstod vid försök av $t(common.disable) servern",
|
"remoteDisableError": "Ett fel uppstod vid försök av $t(common.disable) servern",
|
||||||
"mpvRequired": "MPV krävs",
|
"mpvRequired": "MPV krävs",
|
||||||
"audioDeviceFetchError": "ett fel uppstod vid hämtning av ljudenheter",
|
"audioDeviceFetchError": "Ett fel uppstod vid hämtning av ljudenheter",
|
||||||
"invalidServer": "ogiltig server",
|
"invalidServer": "Ogiltig server",
|
||||||
"loginRateError": "för många inloggningsförsök, försök igen om några sekunder",
|
"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",
|
"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",
|
"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",
|
"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",
|
"networkError": "En nätverksfel uppstod",
|
||||||
"notificationDenied": "åtkomst till notifieringarna var nekad. inställningen har ingen verkan",
|
"notificationDenied": "Åtkomst till notifieringarna var nekad. inställningen har ingen verkan",
|
||||||
"openError": "kunde inte öppna filen",
|
"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"
|
"settingsSyncError": "Diskrepans hittades mellan inställningarna för renderingsprocessen och huvudprocessen. starta om applikationen för att ändringarna ska tillämpas"
|
||||||
},
|
},
|
||||||
"filter": {
|
"filter": {
|
||||||
"mostPlayed": "mest spelade",
|
"mostPlayed": "Mest spelade",
|
||||||
"comment": "kommentar",
|
"comment": "Kommentar",
|
||||||
"playCount": "antal spelningar",
|
"playCount": "Antal spelningar",
|
||||||
"recentlyUpdated": "nyligen uppdaterad",
|
"recentlyUpdated": "Nyligen uppdaterad",
|
||||||
"channels": "$t(common.channel_other)",
|
"channels": "$t(common.channel_other)",
|
||||||
"isCompilation": "är kompilering",
|
"isCompilation": "Är kompilering",
|
||||||
"recentlyPlayed": "nyligen spelad",
|
"recentlyPlayed": "Nyligen spelad",
|
||||||
"isRated": "är betygsatt",
|
"isRated": "Är betygsatt",
|
||||||
"owner": "$t(common.owner)",
|
"owner": "$t(common.owner)",
|
||||||
"title": "titel",
|
"title": "Titel",
|
||||||
"rating": "betyg",
|
"rating": "Betyg",
|
||||||
"search": "sök",
|
"search": "Sök",
|
||||||
"bitrate": "bithastighet",
|
"bitrate": "Bithastighet",
|
||||||
"genre": "$t(entity.genre_one)",
|
"genre": "$t(entity.genre, {\"count\": 1})",
|
||||||
"recentlyAdded": "nyligen tillagda",
|
"recentlyAdded": "Nyligen tillagda",
|
||||||
"note": "anteckning",
|
"note": "Anteckning",
|
||||||
"name": "namn",
|
"name": "Namn",
|
||||||
"dateAdded": "datum tillagt",
|
"dateAdded": "Datum tillagt",
|
||||||
"releaseDate": "utgivningsdag",
|
"releaseDate": "Utgivningsdag",
|
||||||
"communityRating": "betyg från communityn",
|
"communityRating": "Betyg från communityn",
|
||||||
"path": "sökväg",
|
"path": "Sökväg",
|
||||||
"favorited": "favoritmärkt",
|
"favorited": "Favoritmärkt",
|
||||||
"albumArtist": "$t(entity.albumArtist_one)",
|
"albumArtist": "$t(entity.albumArtist, {\"count\": 1})",
|
||||||
"isRecentlyPlayed": "spelas nyligen",
|
"isRecentlyPlayed": "Spelas nyligen",
|
||||||
"isFavorited": "är favoritmärkt",
|
"isFavorited": "Är favoritmärkt",
|
||||||
"bpm": "bpm",
|
"bpm": "Bpm",
|
||||||
"releaseYear": "utgivningsår",
|
"releaseYear": "Utgivningsår",
|
||||||
"id": "id",
|
"id": "Id",
|
||||||
"disc": "skiva",
|
"disc": "Skiva",
|
||||||
"biography": "biografi",
|
"biography": "Biografi",
|
||||||
"artist": "$t(entity.artist_one)",
|
"artist": "$t(entity.artist, {\"count\": 1})",
|
||||||
"duration": "längd",
|
"duration": "Längd",
|
||||||
"isPublic": "är offentlig",
|
"isPublic": "Är offentlig",
|
||||||
"random": "slumpmässig",
|
"random": "Slumpmässig",
|
||||||
"lastPlayed": "senast spelad",
|
"lastPlayed": "Senast spelad",
|
||||||
"toYear": "till år",
|
"toYear": "Till år",
|
||||||
"fromYear": "från år",
|
"fromYear": "Från år",
|
||||||
"album": "$t(entity.album_one)",
|
"album": "$t(entity.album, {\"count\": 1})",
|
||||||
"trackNumber": "spår",
|
"trackNumber": "Spår",
|
||||||
"songCount": "sångräkning",
|
"songCount": "Sångräkning",
|
||||||
"criticRating": "kritikerbetyg",
|
"criticRating": "Kritikerbetyg",
|
||||||
"albumCount": "$t(entity.album_other) antal",
|
"albumCount": "$t(entity.album, {\"count\": 2}) antal",
|
||||||
"explicitStatus": "$t(common.explicitStatus)"
|
"explicitStatus": "$t(common.explicitStatus)"
|
||||||
},
|
},
|
||||||
"form": {
|
"form": {
|
||||||
"deletePlaylist": {
|
"deletePlaylist": {
|
||||||
"title": "ta bort $t(entity.playlist_one)",
|
"title": "Ta bort $t(entity.playlist, {\"count\": 1})",
|
||||||
"success": "$t(entity.playlist_one) har tagits bort",
|
"success": "$t(entity.playlist, {\"count\": 1}) har tagits bort",
|
||||||
"input_confirm": "Skriv namnet på $t(entity.playlist_one) för att bekräfta"
|
"input_confirm": "Skriv namnet på $t(entity.playlist, {\"count\": 1}) för att bekräfta"
|
||||||
},
|
},
|
||||||
"createPlaylist": {
|
"createPlaylist": {
|
||||||
"input_description": "$t(common.description)",
|
"input_description": "$t(common.description)",
|
||||||
"title": "skapa $t(entity.playlist_one)",
|
"title": "Skapa $t(entity.playlist, {\"count\": 1})",
|
||||||
"input_public": "offentlig",
|
"input_public": "Offentlig",
|
||||||
"input_name": "$t(common.name)",
|
"input_name": "$t(common.name)",
|
||||||
"success": "$t(entity.playlist_one) skapad",
|
"success": "$t(entity.playlist, {\"count\": 1}) skapad",
|
||||||
"input_owner": "$t(common.owner)"
|
"input_owner": "$t(common.owner)"
|
||||||
},
|
},
|
||||||
"addServer": {
|
"addServer": {
|
||||||
"title": "lägg till server",
|
"title": "Lägg till server",
|
||||||
"input_username": "användarnamn",
|
"input_username": "Användarnamn",
|
||||||
"input_url": "länk",
|
"input_url": "Länk",
|
||||||
"input_password": "lösenord",
|
"input_password": "Lösenord",
|
||||||
"input_legacyAuthentication": "aktivera äldre autentisering",
|
"input_legacyAuthentication": "Aktivera äldre autentisering",
|
||||||
"input_name": "server namn",
|
"input_name": "Server namn",
|
||||||
"success": "servern har lagts till",
|
"success": "Servern har lagts till",
|
||||||
"input_savePassword": "spara lösenord",
|
"input_savePassword": "Spara lösenord",
|
||||||
"ignoreSsl": "ignorera ssl ($t(common.restartRequired))",
|
"ignoreSsl": "Ignorera ssl ($t(common.restartRequired))",
|
||||||
"ignoreCors": "ignorera cors ($t(common.restartRequired))",
|
"ignoreCors": "Ignorera cors ($t(common.restartRequired))",
|
||||||
"error_savePassword": "ett fel uppstod när lösenordet skulle sparas",
|
"error_savePassword": "Ett fel uppstod när lösenordet skulle sparas",
|
||||||
"input_preferInstantMix": "föredra instant mixning",
|
"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"
|
"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": {
|
"addToPlaylist": {
|
||||||
"success": "lade till $t(entity.trackWithCount, {\"count\": {{message}} }) till $t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })",
|
"success": "Lade till $t(entity.trackWithCount, {\"count\": {{message}} }) till $t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })",
|
||||||
"title": "lägg till i $t(entity.playlist_one)",
|
"title": "Lägg till i $t(entity.playlist, {\"count\": 1})",
|
||||||
"input_skipDuplicates": "hoppa över dubbletter",
|
"input_skipDuplicates": "Hoppa över dubbletter",
|
||||||
"input_playlists": "$t(entity.playlist_other)",
|
"input_playlists": "$t(entity.playlist, {\"count\": 2})",
|
||||||
"create": "skapa $t(entity.playlist_one) {{playlist}}",
|
"create": "Skapa $t(entity.playlist, {\"count\": 1}) {{playlist}}",
|
||||||
"searchOrCreate": "sök $t(entity.playlist_other) eller skriv för att skapa en ny"
|
"searchOrCreate": "Sök $t(entity.playlist, {\"count\": 2}) eller skriv för att skapa en ny"
|
||||||
},
|
},
|
||||||
"updateServer": {
|
"updateServer": {
|
||||||
"title": "uppdatera server",
|
"title": "Uppdatera server",
|
||||||
"success": "servern har uppdaterats"
|
"success": "Servern har uppdaterats"
|
||||||
},
|
},
|
||||||
"queryEditor": {
|
"queryEditor": {
|
||||||
"input_optionMatchAll": "matcha alla",
|
"input_optionMatchAll": "Matcha alla",
|
||||||
"input_optionMatchAny": "matcha något"
|
"input_optionMatchAny": "Matcha något"
|
||||||
},
|
},
|
||||||
"lyricSearch": {
|
"lyricSearch": {
|
||||||
"input_name": "$t(common.name)",
|
"input_name": "$t(common.name)",
|
||||||
"input_artist": "$t(entity.artist_one)",
|
"input_artist": "$t(entity.artist, {\"count\": 1})",
|
||||||
"title": "sångtext sök"
|
"title": "Sångtext sök"
|
||||||
},
|
},
|
||||||
"editPlaylist": {
|
"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"
|
"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": {
|
"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"
|
"description": "Åtgärden kommer att lägga till alla objekt till den nuvarande filtrerade vyn"
|
||||||
},
|
},
|
||||||
"createRadioStation": {
|
"createRadioStation": {
|
||||||
"success": "radiostation skapades",
|
"success": "Radiostation skapades",
|
||||||
"title": "skapa radiostation",
|
"title": "Skapa radiostation",
|
||||||
"input_homepageUrl": "hemside-URL",
|
"input_homepageUrl": "Hemside-URL",
|
||||||
"input_name": "namn",
|
"input_name": "Namn",
|
||||||
"input_streamUrl": "stream url"
|
"input_streamUrl": "Stream url"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"page": {
|
"page": {
|
||||||
"fullscreenPlayer": {
|
"fullscreenPlayer": {
|
||||||
"config": {
|
"config": {
|
||||||
"showLyricMatch": "Visa låttext matchning",
|
"showLyricMatch": "Visa låttext matchning",
|
||||||
"dynamicBackground": "dynamisk bakgrund",
|
"dynamicBackground": "Dynamisk bakgrund",
|
||||||
"followCurrentLyric": "följ aktuell låttext",
|
"followCurrentLyric": "Följ aktuell låttext",
|
||||||
"opacity": "ogenomskinlighet",
|
"opacity": "Ogenomskinlighet",
|
||||||
"lyricSize": "låttext storlek",
|
"lyricSize": "Låttext storlek",
|
||||||
"lyricAlignment": "låttext justering",
|
"lyricAlignment": "Låttext justering",
|
||||||
"lyricGap": "låttext mellanrum",
|
"lyricGap": "Låttext mellanrum",
|
||||||
"synchronized": "synkroniserad",
|
"synchronized": "Synkroniserad",
|
||||||
"showLyricProvider": "visa sångtextleverantör",
|
"showLyricProvider": "Visa sångtextleverantör",
|
||||||
"unsynchronized": "osynkroniserad"
|
"unsynchronized": "Osynkroniserad"
|
||||||
},
|
},
|
||||||
"lyrics": "sångtext",
|
"lyrics": "Sångtext",
|
||||||
"related": "relaterad"
|
"related": "Relaterad"
|
||||||
},
|
},
|
||||||
"appMenu": {
|
"appMenu": {
|
||||||
"selectServer": "välj server",
|
"selectServer": "Välj server",
|
||||||
"version": "version {{version}}",
|
"version": "Version {{version}}",
|
||||||
"settings": "$t(common.setting_other)",
|
"settings": "$t(common.setting, {\"count\": 2})",
|
||||||
"manageServers": "hantera servrar",
|
"manageServers": "Hantera servrar",
|
||||||
"expandSidebar": "expandera sidofältet",
|
"expandSidebar": "Expandera sidofältet",
|
||||||
"openBrowserDevtools": "öppna webbläsarens utvecklingsverktyg",
|
"openBrowserDevtools": "Öppna webbläsarens utvecklingsverktyg",
|
||||||
"quit": "$t(common.quit)",
|
"quit": "$t(common.quit)",
|
||||||
"goBack": "gå tillbaka",
|
"goBack": "Gå tillbaka",
|
||||||
"goForward": "gå framåt",
|
"goForward": "Gå framåt",
|
||||||
"collapseSidebar": "växla sidofältet"
|
"collapseSidebar": "Växla sidofältet"
|
||||||
},
|
},
|
||||||
"contextMenu": {
|
"contextMenu": {
|
||||||
"addToPlaylist": "$t(action.addToPlaylist)",
|
"addToPlaylist": "$t(action.addToPlaylist)",
|
||||||
@@ -335,146 +336,146 @@
|
|||||||
"play": "$t(player.play)",
|
"play": "$t(player.play)",
|
||||||
"numberSelected": "{{count}} vald",
|
"numberSelected": "{{count}} vald",
|
||||||
"removeFromQueue": "$t(action.removeFromQueue)",
|
"removeFromQueue": "$t(action.removeFromQueue)",
|
||||||
"download": "ladda ner",
|
"download": "Ladda ner",
|
||||||
"moveItems": "$t(action.moveItems)",
|
"moveItems": "$t(action.moveItems)",
|
||||||
"moveToNext": "$t(action.moveToNext)",
|
"moveToNext": "$t(action.moveToNext)",
|
||||||
"playSimilarSongs": "$t(player.playSimilarSongs)",
|
"playSimilarSongs": "$t(player.playSimilarSongs)",
|
||||||
"playShuffled": "$t(player.shuffle)",
|
"playShuffled": "$t(player.shuffle)",
|
||||||
"shareItem": "dela objekt",
|
"shareItem": "Dela objekt",
|
||||||
"goTo": "gå till",
|
"goTo": "Gå till",
|
||||||
"goToAlbum": "gå till $t(entity.album_one)",
|
"goToAlbum": "Gå till $t(entity.album, {\"count\": 1})",
|
||||||
"goToAlbumArtist": "gå till $t(entity.albumArtist_one)",
|
"goToAlbumArtist": "Gå till $t(entity.albumArtist, {\"count\": 1})",
|
||||||
"showDetails": "hämta information"
|
"showDetails": "Hämta information"
|
||||||
},
|
},
|
||||||
"albumDetail": {
|
"albumDetail": {
|
||||||
"moreFromArtist": "mer från $t(entity.artist_one)",
|
"moreFromArtist": "Mer från $t(entity.artist, {\"count\": 1})",
|
||||||
"moreFromGeneric": "mer från {{item}}"
|
"moreFromGeneric": "Mer från {{item}}"
|
||||||
},
|
},
|
||||||
"albumArtistList": {
|
"albumArtistList": {
|
||||||
"title": "$t(entity.albumArtist_other)"
|
"title": "$t(entity.albumArtist, {\"count\": 2})"
|
||||||
},
|
},
|
||||||
"albumList": {
|
"albumList": {
|
||||||
"title": "$t(entity.album_other)"
|
"title": "$t(entity.album, {\"count\": 2})"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"nowPlaying": "nu spelas"
|
"nowPlaying": "Nu spelas"
|
||||||
},
|
},
|
||||||
"home": {
|
"home": {
|
||||||
"mostPlayed": "mest spelade",
|
"mostPlayed": "Mest spelade",
|
||||||
"newlyAdded": "nytillkomna utgåvor",
|
"newlyAdded": "Nytillkomna utgåvor",
|
||||||
"explore": "utforska från ditt bibliotek",
|
"explore": "Utforska från ditt bibliotek",
|
||||||
"recentlyPlayed": "nyligen spelat"
|
"recentlyPlayed": "Nyligen spelat"
|
||||||
},
|
},
|
||||||
"setting": {
|
"setting": {
|
||||||
"playbackTab": "uppspelning",
|
"playbackTab": "Uppspelning",
|
||||||
"generalTab": "allmänt",
|
"generalTab": "Allmänt",
|
||||||
"hotkeysTab": "snabbtangenter",
|
"hotkeysTab": "Snabbtangenter",
|
||||||
"windowTab": "fönster"
|
"windowTab": "Fönster"
|
||||||
},
|
},
|
||||||
"globalSearch": {
|
"globalSearch": {
|
||||||
"commands": {
|
"commands": {
|
||||||
"serverCommands": "serverkommandon",
|
"serverCommands": "Serverkommandon",
|
||||||
"goToPage": "gå till sidan",
|
"goToPage": "Gå till sidan",
|
||||||
"searchFor": "sök efter {{query}}"
|
"searchFor": "Sök efter {{query}}"
|
||||||
},
|
},
|
||||||
"title": "kommandon"
|
"title": "Kommandon"
|
||||||
},
|
},
|
||||||
"manageServers": {
|
"manageServers": {
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"username": "användarnamn",
|
"username": "Användarnamn",
|
||||||
"editServerDetailsTooltip": "redigera serverinställningar",
|
"editServerDetailsTooltip": "Redigera serverinställningar",
|
||||||
"removeServer": "ta bort server"
|
"removeServer": "Ta bort server"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"entity": {
|
"entity": {
|
||||||
"playlist_one": "spellista",
|
"playlist_one": "Spellista",
|
||||||
"playlist_other": "spellistor",
|
"playlist_other": "Spellistor",
|
||||||
"artist_one": "artist",
|
"artist_one": "Artist",
|
||||||
"artist_other": "artister",
|
"artist_other": "Artister",
|
||||||
"albumArtist_one": "albumartist",
|
"albumArtist_one": "Albumartist",
|
||||||
"albumArtist_other": "albumartister",
|
"albumArtist_other": "Albumartister",
|
||||||
"albumArtistCount_one": "{{count}} Albumartist",
|
"albumArtistCount_one": "{{count}} albumartist",
|
||||||
"albumArtistCount_other": "{{count}} Albumartister",
|
"albumArtistCount_other": "{{count}} albumartister",
|
||||||
"albumWithCount_one": "{{count}} album",
|
"albumWithCount_one": "{{count}} album",
|
||||||
"albumWithCount_other": "{{count}} album",
|
"albumWithCount_other": "{{count}} album",
|
||||||
"favorite_one": "favorit",
|
"favorite_one": "Favorit",
|
||||||
"favorite_other": "favoriter",
|
"favorite_other": "Favoriter",
|
||||||
"folder_one": "mapp",
|
"folder_one": "Mapp",
|
||||||
"folder_other": "mappar",
|
"folder_other": "Mappar",
|
||||||
"album_one": "album",
|
"album_one": "Album",
|
||||||
"album_other": "album",
|
"album_other": "Album",
|
||||||
"playlistWithCount_one": "{{count}} spellista",
|
"playlistWithCount_one": "{{count}} spellista",
|
||||||
"playlistWithCount_other": "{{count}} spellistor",
|
"playlistWithCount_other": "{{count}} spellistor",
|
||||||
"folderWithCount_one": "{{count}} mapp",
|
"folderWithCount_one": "{{count}} mapp",
|
||||||
"folderWithCount_other": "{{count}} mappar",
|
"folderWithCount_other": "{{count}} mappar",
|
||||||
"track_one": "spår",
|
"track_one": "Spår",
|
||||||
"track_other": "spår",
|
"track_other": "Spår",
|
||||||
"trackWithCount_one": "{{count}} spår",
|
"trackWithCount_one": "{{count}} spår",
|
||||||
"trackWithCount_other": "{{count}} spår",
|
"trackWithCount_other": "{{count}} spår",
|
||||||
"artistWithCount_one": "{{count}} artist",
|
"artistWithCount_one": "{{count}} artist",
|
||||||
"artistWithCount_other": "{{count}} artister",
|
"artistWithCount_other": "{{count}} artister",
|
||||||
"genre_one": "genre",
|
"genre_one": "Genre",
|
||||||
"genre_other": "genrer",
|
"genre_other": "Genrer",
|
||||||
"genreWithCount_one": "{{count}} genre",
|
"genreWithCount_one": "{{count}} genre",
|
||||||
"genreWithCount_other": "{{count}} genrer",
|
"genreWithCount_other": "{{count}} genrer",
|
||||||
"play_one": "{{count}} spelning",
|
"play_one": "{{count}} spelning",
|
||||||
"play_other": "{{count}} spelningar",
|
"play_other": "{{count}} spelningar",
|
||||||
"smartPlaylist": "smart $t(entity.playlist_one)",
|
"smartPlaylist": "Smart $t(entity.playlist, {\"count\": 1})",
|
||||||
"song_one": "låt",
|
"song_one": "Låt",
|
||||||
"song_other": "låtar",
|
"song_other": "Låtar",
|
||||||
"radioStation_one": "radiostation",
|
"radioStation_one": "Radiostation",
|
||||||
"radioStation_other": "radiostationer",
|
"radioStation_other": "Radiostationer",
|
||||||
"radioStationWithCount_one": "{{count}} radiostation",
|
"radioStationWithCount_one": "{{count}} radiostation",
|
||||||
"radioStationWithCount_other": "{{count}} radiostationer"
|
"radioStationWithCount_other": "{{count}} radiostationer"
|
||||||
},
|
},
|
||||||
"player": {
|
"player": {
|
||||||
"repeat_all": "repetera alla",
|
"repeat_all": "Repetera alla",
|
||||||
"repeat": "repetera",
|
"repeat": "Repetera",
|
||||||
"queue_remove": "ta bort markerad",
|
"queue_remove": "Ta bort markerad",
|
||||||
"playRandom": "spela slumpmässigt",
|
"playRandom": "Spela slumpmässigt",
|
||||||
"previous": "föregående",
|
"previous": "Föregående",
|
||||||
"favorite": "favorit",
|
"favorite": "Favorit",
|
||||||
"next": "nästa",
|
"next": "Nästa",
|
||||||
"shuffle": "blanda",
|
"shuffle": "Blanda",
|
||||||
"playbackFetchNoResults": "inga låtar hittades",
|
"playbackFetchNoResults": "Inga låtar hittades",
|
||||||
"playbackFetchInProgress": "laddar låtar…",
|
"playbackFetchInProgress": "Laddar låtar…",
|
||||||
"addNext": "lägg till nästa",
|
"addNext": "Lägg till nästa",
|
||||||
"playbackSpeed": "uppspelningshastighet",
|
"playbackSpeed": "Uppspelningshastighet",
|
||||||
"playbackFetchCancel": "det här tar ett tag... stäng aviseringen för att avbryta",
|
"playbackFetchCancel": "Det här tar ett tag... stäng aviseringen för att avbryta",
|
||||||
"play": "spela",
|
"play": "Spela",
|
||||||
"repeat_off": "repetera inaktiverad",
|
"repeat_off": "Repetera inaktiverad",
|
||||||
"queue_clear": "rensa kö",
|
"queue_clear": "Rensa kö",
|
||||||
"muted": "mutad",
|
"muted": "Mutad",
|
||||||
"queue_moveToTop": "flytta markerad till botten",
|
"queue_moveToTop": "Flytta markerad till toppen",
|
||||||
"queue_moveToBottom": "flytta markerad till toppen",
|
"queue_moveToBottom": "Flytta markerad till botten",
|
||||||
"addLast": "lägg till sist",
|
"addLast": "Lägg till sist",
|
||||||
"mute": "muta"
|
"mute": "Muta"
|
||||||
},
|
},
|
||||||
"datetime": {
|
"datetime": {
|
||||||
"minuteShort": "min",
|
"minuteShort": "Min",
|
||||||
"secondShort": "sek",
|
"secondShort": "Sek",
|
||||||
"hourShort": "h",
|
"hourShort": "H",
|
||||||
"dayShort": "dag"
|
"dayShort": "Dag"
|
||||||
},
|
},
|
||||||
"filterOperator": {
|
"filterOperator": {
|
||||||
"after": "är efter",
|
"after": "Är efter",
|
||||||
"afterDate": "är efter (datum)",
|
"afterDate": "Är efter (datum)",
|
||||||
"before": "är före",
|
"before": "Är före",
|
||||||
"beforeDate": "är före (datum)",
|
"beforeDate": "Är före (datum)",
|
||||||
"contains": "innehåller",
|
"contains": "Innehåller",
|
||||||
"endsWith": "slutar med",
|
"endsWith": "Slutar med",
|
||||||
"inPlaylist": "är inom",
|
"inPlaylist": "Är inom",
|
||||||
"inTheLast": "är i den sista",
|
"inTheLast": "Är i den sista",
|
||||||
"inTheRange": "är i spannet",
|
"inTheRange": "Är i spannet",
|
||||||
"inTheRangeDate": "är i spannet (datum)",
|
"inTheRangeDate": "Är i spannet (datum)",
|
||||||
"is": "är",
|
"is": "Är",
|
||||||
"isNot": "är inte",
|
"isNot": "Är inte",
|
||||||
"isGreaterThan": "är större än",
|
"isGreaterThan": "Är större än",
|
||||||
"isLessThan": "är mindre än",
|
"isLessThan": "Är mindre än",
|
||||||
"matchesRegex": "matchar regex",
|
"matchesRegex": "Matchar regex",
|
||||||
"notContains": "innehåller inte",
|
"notContains": "Innehåller inte",
|
||||||
"notInPlaylist": "är inte inom",
|
"notInPlaylist": "Är inte inom",
|
||||||
"notInTheLast": "är inte inom den sista",
|
"notInTheLast": "Är inte inom den sista",
|
||||||
"startsWith": "startar med"
|
"startsWith": "Startar med"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1 +1,604 @@
|
|||||||
{}
|
{
|
||||||
|
"action": {
|
||||||
|
"addToFavorites": "Додати до $t(entity.favorite, {\"count\": 2})",
|
||||||
|
"addOrRemoveFromSelection": "Додати або видалити з вибору",
|
||||||
|
"selectRangeOfItems": "Вибрати діапазон елементів",
|
||||||
|
"addToPlaylist": "Додати до $t(entity.playlist, {\"count\": 1})",
|
||||||
|
"clearQueue": "Очистити чергу",
|
||||||
|
"createPlaylist": "Створити $t(entity.playlist, {\"count\": 1})",
|
||||||
|
"createRadioStation": "Створити $t(entity.radioStation, {\"count\": 1})",
|
||||||
|
"deletePlaylist": "Видалити $t(entity.playlist, {\"count\": 1})",
|
||||||
|
"deleteRadioStation": "Видалити $t(entity.radioStation, {\"count\": 1})",
|
||||||
|
"selectAll": "Вибрати все",
|
||||||
|
"deselectAll": "Скасувати вибір усього",
|
||||||
|
"downloadStarted": "Почато завантаження {{count}} елементів",
|
||||||
|
"editPlaylist": "Редагувати $t(entity.playlist, {\"count\": 1})",
|
||||||
|
"goToPage": "Перейти на сторінку",
|
||||||
|
"moveToNext": "Перейти до наступного",
|
||||||
|
"moveToBottom": "Перемістити вниз",
|
||||||
|
"moveToTop": "Перемістити вгору",
|
||||||
|
"moveUp": "Перемістити вище",
|
||||||
|
"moveDown": "Перемістити нижче",
|
||||||
|
"holdToMoveToTop": "Утримуйте, щоб перемістити вгору",
|
||||||
|
"holdToMoveToBottom": "Утримувати, щоб перемістити вниз",
|
||||||
|
"moveItems": "Перемістити елементи",
|
||||||
|
"shuffle": "Перемішати",
|
||||||
|
"shuffleAll": "Все випадково",
|
||||||
|
"shuffleSelected": "Вибране випадково",
|
||||||
|
"refresh": "$t(common.refresh)",
|
||||||
|
"removeFromFavorites": "Видалити з $t(entity.favorite, {\"count\": 2})",
|
||||||
|
"removeFromPlaylist": "Видалити з $t(entity.playlist, {\"count\": 1})",
|
||||||
|
"removeFromQueue": "Видалити з черги",
|
||||||
|
"setRating": "Встановити рейтинг",
|
||||||
|
"toggleSmartPlaylistEditor": "Перемикати редактор $t(entity.smartPlaylist)",
|
||||||
|
"viewPlaylists": "Показати $t(entity.playlist, {\"count\": 2})",
|
||||||
|
"viewMore": "Переглянути більше",
|
||||||
|
"openApplicationDirectory": "Відкрити каталог додатків",
|
||||||
|
"openIn": {
|
||||||
|
"lastfm": "Відкрити в Last.fm",
|
||||||
|
"musicbrainz": "Відкрити в MusicBrainz",
|
||||||
|
"listenbrainz": "Відкрити у ListenBrainz",
|
||||||
|
"qobuz": "Відкрити у Qobuz",
|
||||||
|
"spotify": "Відкрити у Spotify"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"common": {
|
||||||
|
"countSelected": "Вибрано {{count}}",
|
||||||
|
"explicitStatus": "Явний статус",
|
||||||
|
"action_one": "Дія",
|
||||||
|
"action_few": "дії",
|
||||||
|
"action_many": "дій",
|
||||||
|
"add": "Додати",
|
||||||
|
"additionalParticipants": "Додаткові учасники",
|
||||||
|
"newVersion": "Встановлено нову версію ({{version}})",
|
||||||
|
"viewReleaseNotes": "Переглянути список змін",
|
||||||
|
"albumGain": "Підсилення альбому",
|
||||||
|
"albumPeak": "Піковий рівень альбому",
|
||||||
|
"areYouSure": "Ви впевнені?",
|
||||||
|
"ascending": "Зростаючи",
|
||||||
|
"backward": "Назад",
|
||||||
|
"biography": "Біографія",
|
||||||
|
"bitDepth": "Розрядність",
|
||||||
|
"bitrate": "Бітрейт",
|
||||||
|
"bpm": "Уд/хв",
|
||||||
|
"cancel": "Скасувати",
|
||||||
|
"center": "Посередині",
|
||||||
|
"channel_one": "Канал",
|
||||||
|
"channel_few": "канали",
|
||||||
|
"channel_many": "каналів",
|
||||||
|
"clear": "Очистити",
|
||||||
|
"close": "Закрити",
|
||||||
|
"codec": "Кодек",
|
||||||
|
"collapse": "Згорнути",
|
||||||
|
"comingSoon": "Скоро…",
|
||||||
|
"configure": "Налаштувати",
|
||||||
|
"confirm": "Підтвердити",
|
||||||
|
"create": "Створити",
|
||||||
|
"currentSong": "Поточний $t(entity.track, {\"count\": 1})",
|
||||||
|
"decrease": "Знизити",
|
||||||
|
"delete": "Видалити",
|
||||||
|
"descending": "За спаданням",
|
||||||
|
"description": "Опис",
|
||||||
|
"disable": "Вимкнути",
|
||||||
|
"disc": "Диск",
|
||||||
|
"dismiss": "Відхилити",
|
||||||
|
"doNotShowAgain": "Не показувати це знову",
|
||||||
|
"duration": "Тривалість",
|
||||||
|
"view": "Показати",
|
||||||
|
"edit": "Змінити",
|
||||||
|
"enable": "Увімкнути",
|
||||||
|
"expand": "Розширити",
|
||||||
|
"example": "Приклад",
|
||||||
|
"externalLinks": "Зовнішні посилання",
|
||||||
|
"faster": "Швидше",
|
||||||
|
"favorite": "Улюблений",
|
||||||
|
"filter_one": "Фільтр",
|
||||||
|
"filter_few": "фільтри",
|
||||||
|
"filter_many": "фільтрів",
|
||||||
|
"filters": "Фільтри",
|
||||||
|
"filter_single": "Одиночний",
|
||||||
|
"filter_multiple": "Кілька",
|
||||||
|
"forceRestartRequired": "Перезапустіть, щоб застосувати зміни… закрийте повідомлення, щоб перезапустити",
|
||||||
|
"forward": "Уперед",
|
||||||
|
"gap": "Прогалина",
|
||||||
|
"grouping": "Групування",
|
||||||
|
"home": "Додому",
|
||||||
|
"increase": "Збільшити",
|
||||||
|
"left": "Ліво",
|
||||||
|
"limit": "Ліміт",
|
||||||
|
"manage": "Управління",
|
||||||
|
"maximize": "Максимізувати",
|
||||||
|
"menu": "Меню",
|
||||||
|
"minimize": "Мінімізувати",
|
||||||
|
"modified": "Відредаговано",
|
||||||
|
"mbid": "MusicBrainz ID",
|
||||||
|
"mood": "Настрій",
|
||||||
|
"name": "Назва",
|
||||||
|
"no": "Ні",
|
||||||
|
"none": "Жоден",
|
||||||
|
"noResultsFromQuery": "Запит не дав результатів",
|
||||||
|
"noFilters": "Фільтри не налаштовані",
|
||||||
|
"note": "Примітка",
|
||||||
|
"ok": "Ок",
|
||||||
|
"owner": "Власник",
|
||||||
|
"path": "Шлях",
|
||||||
|
"playerMustBePaused": "Плеєр повинен бути призупинений",
|
||||||
|
"preview": "Перегляд",
|
||||||
|
"previousSong": "Минулий $t(entity.track, {\"count\": 1})",
|
||||||
|
"private": "Приватний",
|
||||||
|
"public": "Публічний",
|
||||||
|
"quit": "Вийти",
|
||||||
|
"random": "Випадково",
|
||||||
|
"rating": "Рейтинг",
|
||||||
|
"retry": "Повторити спробу",
|
||||||
|
"recordLabel": "Лейбл звукозапису",
|
||||||
|
"releaseType": "Тип випуску",
|
||||||
|
"refresh": "Оновити",
|
||||||
|
"reload": "Перезавантажити",
|
||||||
|
"rename": "Перейменувати",
|
||||||
|
"reset": "Скинути",
|
||||||
|
"resetToDefault": "Скинути до заводських налаштувань",
|
||||||
|
"restartRequired": "Необхідний перезапуск",
|
||||||
|
"right": "Право",
|
||||||
|
"clean": "Чистo",
|
||||||
|
"sampleRate": "Частота дискретизації",
|
||||||
|
"save": "Зберегти",
|
||||||
|
"saveAndReplace": "Зберегти та замінити",
|
||||||
|
"saveAs": "Зберегти як",
|
||||||
|
"search": "Пошук",
|
||||||
|
"setting_one": "Налаштування",
|
||||||
|
"setting_few": "налаштування",
|
||||||
|
"setting_many": "налаштувань",
|
||||||
|
"slower": "Повільніше",
|
||||||
|
"share": "Поділитися",
|
||||||
|
"size": "Розмір",
|
||||||
|
"sort": "Впорядкувати",
|
||||||
|
"sortOrder": "Порядок",
|
||||||
|
"tags": "Теги",
|
||||||
|
"title": "Назва",
|
||||||
|
"trackNumber": "Трек",
|
||||||
|
"trackGain": "Підсилення треку",
|
||||||
|
"trackPeak": "Піковий рівень треку",
|
||||||
|
"translation": "Переклад",
|
||||||
|
"unknown": "Невідомий",
|
||||||
|
"version": "Версія",
|
||||||
|
"year": "Рік",
|
||||||
|
"yes": "Так",
|
||||||
|
"explicit": "Експліцитний зміст",
|
||||||
|
"gridRows": "Рядки сітки",
|
||||||
|
"tableColumns": "Стовпці таблиці",
|
||||||
|
"itemsMore": "{{count}} більше",
|
||||||
|
"numberOfResults": "{{numberOfResults}} результатів",
|
||||||
|
"newVersionAvailable": "Доступна нова версія"
|
||||||
|
},
|
||||||
|
"entity": {
|
||||||
|
"album_one": "Альбом",
|
||||||
|
"album_few": "альбоми",
|
||||||
|
"album_many": "альбомів",
|
||||||
|
"albumArtist_one": "Виконавець альбому",
|
||||||
|
"albumArtist_few": "виконавці альбому",
|
||||||
|
"albumArtist_many": "виконавців альбому",
|
||||||
|
"albumArtistCount_one": "{{count}} виконавець альбому",
|
||||||
|
"albumArtistCount_few": "{{count}} виконавці альбому",
|
||||||
|
"albumArtistCount_many": "{{count}} виконавців альбому",
|
||||||
|
"albumWithCount_one": "{{count}} альбом",
|
||||||
|
"albumWithCount_few": "{{count}} альбоми",
|
||||||
|
"albumWithCount_many": "{{count}} альбомів",
|
||||||
|
"radioStation_one": "Радіостанція",
|
||||||
|
"radioStation_few": "радіостанції",
|
||||||
|
"radioStation_many": "радіостанцій",
|
||||||
|
"radioStationWithCount_one": "{{count}} радіостанція",
|
||||||
|
"radioStationWithCount_few": "{{count}} радіостанції",
|
||||||
|
"radioStationWithCount_many": "{{count}} радіостанцій",
|
||||||
|
"artist_one": "Виконавець",
|
||||||
|
"artist_few": "виконавці",
|
||||||
|
"artist_many": "виконавців",
|
||||||
|
"artistWithCount_one": "{{count}} виконавець",
|
||||||
|
"artistWithCount_few": "{{count}} виконавці",
|
||||||
|
"artistWithCount_many": "{{count}} виконавців",
|
||||||
|
"favorite_one": "Улюблений",
|
||||||
|
"favorite_few": "улюблені",
|
||||||
|
"favorite_many": "улюблених",
|
||||||
|
"folder_one": "Папка",
|
||||||
|
"folder_few": "папки",
|
||||||
|
"folder_many": "папок",
|
||||||
|
"folderWithCount_one": "{{count}} папка",
|
||||||
|
"folderWithCount_few": "{{count}} папки",
|
||||||
|
"folderWithCount_many": "{{count}} папок",
|
||||||
|
"genre_one": "Жанр",
|
||||||
|
"genre_few": "жанри",
|
||||||
|
"genre_many": "жанрів",
|
||||||
|
"genreWithCount_one": "{{count}} жанр",
|
||||||
|
"genreWithCount_few": "{{count}} жанри",
|
||||||
|
"genreWithCount_many": "{{count}} жанрів",
|
||||||
|
"playlist_one": "Плейлист",
|
||||||
|
"playlist_few": "плейлисти",
|
||||||
|
"playlist_many": "плейлистів",
|
||||||
|
"play_one": "{{count}} відтворення",
|
||||||
|
"play_few": "{{count}} відтворення",
|
||||||
|
"play_many": "{{count}} відтворень",
|
||||||
|
"playlistWithCount_one": "{{count}} плейлист",
|
||||||
|
"playlistWithCount_few": "{{count}} плейлисти",
|
||||||
|
"playlistWithCount_many": "{{count}} плейлистів",
|
||||||
|
"smartPlaylist": "Розумний $t(entity.playlist, {\"count\": 1})",
|
||||||
|
"track_one": "Трек",
|
||||||
|
"track_few": "треки",
|
||||||
|
"track_many": "треків",
|
||||||
|
"song_one": "Пісня",
|
||||||
|
"song_few": "пісні",
|
||||||
|
"song_many": "пісень",
|
||||||
|
"trackWithCount_one": "{{count}} трек",
|
||||||
|
"trackWithCount_few": "{{count}} треки",
|
||||||
|
"trackWithCount_many": "{{count}} треків"
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"apiRouteError": "Неможливо виконати запит",
|
||||||
|
"audioDeviceFetchError": "Сталася помилка під час спроби отримати аудіопристрої",
|
||||||
|
"authenticationFailed": "Аутентифікація не вдалася",
|
||||||
|
"badAlbum": "Ви бачите цю сторінку, тому що ця пісня не входить до альбому. найімовірніше, ця проблема виникає, якщо у верхньому рівні вашої музичної папки знаходиться пісня. Jellyfin групує треки тільки в тому випадку, якщо вони знаходяться в папці",
|
||||||
|
"badValue": "Недійсний параметр \"{{value}}\". це значення більше не існує",
|
||||||
|
"credentialsRequired": "Необхідні дані для входу",
|
||||||
|
"endpointNotImplementedError": "Кінцева точка {{endpoint}} не реалізована для {{serverType}}",
|
||||||
|
"genericError": "Сталася помилка",
|
||||||
|
"invalidServer": "Недійсний сервер",
|
||||||
|
"localFontAccessDenied": "Відмова в доступі до локальних шрифтів",
|
||||||
|
"loginRateError": "Занадто багато спроб входу, спробуйте ще раз через кілька секунд",
|
||||||
|
"mpvRequired": "Необхідний MPV",
|
||||||
|
"multipleServerSaveQueueError": "У черзі відтворення є одна або кілька пісень, які не належать до поточного сервера. це не підтримується",
|
||||||
|
"networkError": "Сталася мережева помилка",
|
||||||
|
"noNetwork": "Сервер недоступний",
|
||||||
|
"noNetworkDescription": "Не вдалося підключитися до цього сервера",
|
||||||
|
"notificationDenied": "Дозвіл на сповіщення було відхилено. це налаштування не має впливу",
|
||||||
|
"openError": "Не вдалося відкрити файл",
|
||||||
|
"playbackError": "Сталася помилка під час спроби відтворити медіафайл",
|
||||||
|
"remoteDisableError": "Сталася помилка під час спроби $t(common.disable) віддаленого сервера",
|
||||||
|
"remoteEnableError": "Сталася помилка під час спроби $t(common.enable) віддаленого сервера",
|
||||||
|
"remotePortError": "Сталася помилка під час спроби налаштувати порт віддаленого сервера",
|
||||||
|
"remotePortWarning": "Перезапустіть сервер щоб застосувати новий порт",
|
||||||
|
"saveQueueFailed": "Не вдалося зберегти чергу",
|
||||||
|
"serverNotSelectedError": "Не вибрано жодного сервера",
|
||||||
|
"serverRequired": "Потрібен сервер",
|
||||||
|
"sessionExpiredError": "Ваша сесія закінчилася",
|
||||||
|
"systemFontError": "Сталася помилка під час спроби отримати системні шрифти",
|
||||||
|
"settingsSyncError": "Виявлено розбіжності між налаштуваннями в рендерері та основним процесом. перезапустіть програму, щоб застосувати зміни",
|
||||||
|
"invalidJson": "Недійсний JSON",
|
||||||
|
"playbackPausedDueToError": "Відтворення було призупинено через помилку"
|
||||||
|
},
|
||||||
|
"filter": {
|
||||||
|
"album": "$t(entity.album, {\"count\": 1})",
|
||||||
|
"albumArtist": "$t(entity.albumArtist, {\"count\": 1})",
|
||||||
|
"albumCount": "Кількість $t(entity.album, {\"count\": 2})",
|
||||||
|
"artist": "$t(entity.artist, {\"count\": 1})",
|
||||||
|
"biography": "Біографія",
|
||||||
|
"bitrate": "Бітрейт",
|
||||||
|
"bpm": "Уд/хв",
|
||||||
|
"channels": "$t(common.channel, {\"count\": 2})",
|
||||||
|
"comment": "Коментар",
|
||||||
|
"communityRating": "Рейтинг спільноти",
|
||||||
|
"criticRating": "Рейтинг критиків",
|
||||||
|
"dateAdded": "Дата додавання",
|
||||||
|
"disc": "Диск",
|
||||||
|
"duration": "Тривалість",
|
||||||
|
"favorited": "Улюблене",
|
||||||
|
"fromYear": "З року",
|
||||||
|
"genre": "$t(entity.genre, {\"count\": 1})",
|
||||||
|
"id": "Id",
|
||||||
|
"isCompilation": "Є компіляцією",
|
||||||
|
"isFavorited": "Є улюбленим",
|
||||||
|
"isPublic": "Є публічним",
|
||||||
|
"isRated": "Є оціненим",
|
||||||
|
"isRecentlyPlayed": "Нещодавно відтворено",
|
||||||
|
"lastPlayed": "Останнє відтворене",
|
||||||
|
"mostPlayed": "Найбільш відтворювані",
|
||||||
|
"name": "Назва",
|
||||||
|
"note": "Примітка",
|
||||||
|
"owner": "$t(common.owner)",
|
||||||
|
"path": "Шлях",
|
||||||
|
"playCount": "Кількість відтворень",
|
||||||
|
"random": "Випадково",
|
||||||
|
"rating": "Рейтинг",
|
||||||
|
"recentlyAdded": "Нещодавно додано",
|
||||||
|
"recentlyPlayed": "Нещодавно відтворено",
|
||||||
|
"recentlyUpdated": "Нещодавно оновлено",
|
||||||
|
"releaseDate": "Дата випуску",
|
||||||
|
"releaseYear": "Рік випуску",
|
||||||
|
"search": "Шукати",
|
||||||
|
"songCount": "Кількість пісень",
|
||||||
|
"sortName": "Сортування за назвою",
|
||||||
|
"title": "Назва",
|
||||||
|
"toYear": "До року",
|
||||||
|
"trackNumber": "Трек",
|
||||||
|
"explicitStatus": "$t(common.explicitStatus)",
|
||||||
|
"matchAnd": "І",
|
||||||
|
"matchOr": "Або"
|
||||||
|
},
|
||||||
|
"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": "Сталася помилка під час спроби зберегти пароль",
|
||||||
|
"ignoreCors": "Ігнорувати cors ($t(common.restartRequired))",
|
||||||
|
"ignoreSsl": "Ігнорувати ssl ($t(common.restartRequired)}",
|
||||||
|
"input_legacyAuthentication": "Увімкнути застарілу автентифікацію",
|
||||||
|
"input_name": "Назва сервера",
|
||||||
|
"input_password": "Пароль",
|
||||||
|
"input_preferInstantMix": "Віддавати перевагу миттєвому міксу",
|
||||||
|
"input_preferInstantMixDescription": "Використовувати тільки миттєвий мікс щоб отримати подібні пісні. корисно, коли у вас є плагіни, які змінюють цю поведінку",
|
||||||
|
"input_preferRemoteUrl": "Віддавати перевагу публічній URL-адресі",
|
||||||
|
"input_remoteUrl": "Публічна URL-адреса",
|
||||||
|
"input_remoteUrlPlaceholder": "Опціонально: публічна URL-адреса для зовнішніх функцій",
|
||||||
|
"input_savePassword": "Зберегти пароль",
|
||||||
|
"input_url": "URL-адреса",
|
||||||
|
"input_username": "Ім'я користувача",
|
||||||
|
"success": "Сервер додано успішно",
|
||||||
|
"title": "Додати сервер"
|
||||||
|
},
|
||||||
|
"largeFetchConfirmation": {
|
||||||
|
"title": "Додати елементи до черги",
|
||||||
|
"description": "Ця дія додасть усі елементи в поточний відфільтрований перегляд"
|
||||||
|
},
|
||||||
|
"addToPlaylist": {
|
||||||
|
"create": "Створити $t(entity.playlist, {\"count\": 1}) {{playlist}}",
|
||||||
|
"input_playlists": "$t(entity.playlist, {\"count\": 2})",
|
||||||
|
"input_skipDuplicates": "Пропустити дублікати",
|
||||||
|
"searchOrCreate": "Шукайте $t(entity.playlist, {\"count\": 2}) або пишіть, щоб створити новий",
|
||||||
|
"success": "Додано $t(entity.trackWithCount, {\"count\": {{message}} }) до $t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })",
|
||||||
|
"title": "Додати до $t(entity.playlist, {\"count\": 1})"
|
||||||
|
},
|
||||||
|
"createPlaylist": {
|
||||||
|
"input_description": "$t(common.description)",
|
||||||
|
"input_name": "$t(common.name)",
|
||||||
|
"input_owner": "$t(common.owner)",
|
||||||
|
"input_public": "Публічний",
|
||||||
|
"success": "$t(entity.playlist, {\"count\": 1}) стрворено успішно",
|
||||||
|
"title": "Створити $t(entity.playlist, {\"count\": 1})"
|
||||||
|
},
|
||||||
|
"createRadioStation": {
|
||||||
|
"success": "Радіостанція створена успішно",
|
||||||
|
"title": "Створити радіостанцію",
|
||||||
|
"input_homepageUrl": "Адреса домашньої сторінки",
|
||||||
|
"input_name": "Назва",
|
||||||
|
"input_streamUrl": "URL-адреса потоку"
|
||||||
|
},
|
||||||
|
"deletePlaylist": {
|
||||||
|
"input_confirm": "Введіть ім'я $t(entity.playlist, {\"count\": 1}) для підтвердження",
|
||||||
|
"success": "$t(entity.playlist, {\"count\": 1}) успішно видалено",
|
||||||
|
"title": "Видалити $t(entity.playlist, {\"count\": 1})"
|
||||||
|
},
|
||||||
|
"editPlaylist": {
|
||||||
|
"publicJellyfinNote": "Jellyfin з якоїсь причини не показує, чи є плейлист публічним чи ні. Якщо ви хочете, щоб він залишався публічним, виберіть варіант нижче",
|
||||||
|
"success": "$t(entity.playlist, {\"count\": 1}) успішно оновлено",
|
||||||
|
"title": "Змінити $t(entity.playlist, {\"count\": 1})"
|
||||||
|
},
|
||||||
|
"lyricsExport": {
|
||||||
|
"export": "Експортувати тексти пісень",
|
||||||
|
"input_synced": "Експортувати синхронізовані тексти пісень",
|
||||||
|
"input_offset": "$t(setting.lyricOffset)"
|
||||||
|
},
|
||||||
|
"lyricSearch": {
|
||||||
|
"input_artist": "$t(entity.artist, {\"count\": 1})",
|
||||||
|
"input_name": "$t(common.name)",
|
||||||
|
"title": "Шукати тексти пісень"
|
||||||
|
},
|
||||||
|
"queryEditor": {
|
||||||
|
"title": "Редактор запитів",
|
||||||
|
"input_optionMatchAll": "Збіг за всіма",
|
||||||
|
"input_optionMatchAny": "Збіг за будь-яким",
|
||||||
|
"addRuleGroup": "Додати групу правил",
|
||||||
|
"removeRuleGroup": "Видалити групу правил",
|
||||||
|
"resetToDefault": "Скинути до заводських налаштувань",
|
||||||
|
"clearFilters": "Очистити фільтри"
|
||||||
|
},
|
||||||
|
"saveQueue": {
|
||||||
|
"success": "Черга відтворення збережена на сервері"
|
||||||
|
},
|
||||||
|
"shareItem": {
|
||||||
|
"allowDownloading": "Дозволити завантаження",
|
||||||
|
"description": "Опис",
|
||||||
|
"setExpiration": "Встановити термін дії",
|
||||||
|
"success": "Посилання для спільного використання скопійовано в буфер обміну (натисніть тут, щоб відкрити)",
|
||||||
|
"expireInvalid": "Термін дії повинен бути в майбутньому",
|
||||||
|
"createFailed": "Не вдалося створити спільний доступ (чи ввімкнено спільний доступ?)",
|
||||||
|
"copyToClipboard": "Скопіювати до буфера обміну: Ctrl+C, enter",
|
||||||
|
"successMustClick": "Посилання успішно створено, натисніть сюди, щоб відкрити"
|
||||||
|
},
|
||||||
|
"shuffleAll": {
|
||||||
|
"title": "Відтворити випадково",
|
||||||
|
"input_genre": "$t(entity.genre, {\"count\": 1})",
|
||||||
|
"input_limit": "Скільки пісень?",
|
||||||
|
"input_minYear": "Від року",
|
||||||
|
"input_maxYear": "До року",
|
||||||
|
"input_played": "Відтворити фільтр",
|
||||||
|
"input_played_optionAll": "Всі треки",
|
||||||
|
"input_played_optionUnplayed": "Тільки не відтворені треки",
|
||||||
|
"input_played_optionPlayed": "Тільки відтворені треки"
|
||||||
|
},
|
||||||
|
"updateServer": {
|
||||||
|
"success": "Сервер успішно оновлено",
|
||||||
|
"title": "Оновити сервер"
|
||||||
|
},
|
||||||
|
"privateMode": {
|
||||||
|
"enabled": "Приватний режим увімкнено, стан відтворення тепер приховано від зовнішніх інтеграцій",
|
||||||
|
"disabled": "Приватний режим вимкнено, стан відтворення тепер видно для увімкнених зовнішніх інтеграцій",
|
||||||
|
"title": "Приватний режим"
|
||||||
|
},
|
||||||
|
"editRadioStation": {
|
||||||
|
"success": "Радіо станція успішно оновлена"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"player": {
|
||||||
|
"skip": "Пропустити"
|
||||||
|
},
|
||||||
|
"page": {
|
||||||
|
"albumArtistDetail": {
|
||||||
|
"about": "Про {{artist}}",
|
||||||
|
"appearsOn": "З'являється на",
|
||||||
|
"favoriteSongs": "Улюблені пісні",
|
||||||
|
"groupingTypeAll": "Всі типи випуску",
|
||||||
|
"groupingTypePrimary": "Основні типи випуску",
|
||||||
|
"recentReleases": "Останні випуски",
|
||||||
|
"viewDiscography": "Переглянути дискографію",
|
||||||
|
"relatedArtists": "Подібні $t(entity.artist, {\"count\": 2})",
|
||||||
|
"topSongs": "Найкращі пісні",
|
||||||
|
"topSongsCommunity": "Спільнота",
|
||||||
|
"topSongsFrom": "Найкращі пісні від {{title}}",
|
||||||
|
"topSongsPersonal": "Особисте",
|
||||||
|
"favoriteSongsFrom": "Улюблені пісні від {{title}}",
|
||||||
|
"viewAll": "Показати все",
|
||||||
|
"viewAllTracks": "Показати усі $t(entity.track, {\"count\": 2})"
|
||||||
|
},
|
||||||
|
"albumArtistList": {
|
||||||
|
"title": "$t(entity.albumArtist, {\"count\": 2})"
|
||||||
|
},
|
||||||
|
"albumDetail": {
|
||||||
|
"moreFromArtist": "Більше від цього $t(entity.artist, {\"count\": 1})",
|
||||||
|
"moreFromGeneric": "Більше від {{item}}",
|
||||||
|
"released": "Видано"
|
||||||
|
},
|
||||||
|
"albumList": {
|
||||||
|
"artistAlbums": "Альбоми виконавця {{artist}}",
|
||||||
|
"genreAlbums": "\"{{genre}}\" $t(entity.album, {\"count\": 2})",
|
||||||
|
"title": "$t(entity.album, {\"count\": 2})"
|
||||||
|
},
|
||||||
|
"radioList": {
|
||||||
|
"title": "Радіостанції"
|
||||||
|
},
|
||||||
|
"releasenotes": {
|
||||||
|
"commitsSinceStable": "Комміти від {{stable}}",
|
||||||
|
"noNewCommits": "Немає нових коммітів у цьому періоді",
|
||||||
|
"noStableReleaseToCompare": "Немає доступної стабільної версії для порівняння"
|
||||||
|
},
|
||||||
|
"favorites": {
|
||||||
|
"title": "$t(entity.favorite, {\"count\": 2})"
|
||||||
|
},
|
||||||
|
"windowBar": {
|
||||||
|
"paused": "(Призупинено) ",
|
||||||
|
"privateMode": "(Приватний режим)"
|
||||||
|
},
|
||||||
|
"appMenu": {
|
||||||
|
"collapseSidebar": "Згорнути бічну панель",
|
||||||
|
"commandPalette": "Відкрити палітру команд",
|
||||||
|
"expandSidebar": "Розгорнути бічну панель",
|
||||||
|
"goBack": "Повернутися назад",
|
||||||
|
"goForward": "Перейти вперед",
|
||||||
|
"manageServers": "Управління серверами",
|
||||||
|
"privateModeOff": "Вимкнути приватний режим",
|
||||||
|
"privateModeOn": "Увімкнути приватний режим",
|
||||||
|
"openBrowserDevtools": "Відкрити інструменти розробника",
|
||||||
|
"quit": "$t(common.quit)",
|
||||||
|
"selectServer": "Вибрати сервер",
|
||||||
|
"selectMusicFolder": "Вибрати папку з музикою",
|
||||||
|
"noMusicFolder": "Не вибрано папку з музикою",
|
||||||
|
"multipleMusicFolders": "Вибрано {{count}} папок з музикою",
|
||||||
|
"settings": "$t(common.setting, {\"count\": 2})",
|
||||||
|
"version": "Версія {{version}}"
|
||||||
|
},
|
||||||
|
"manageServers": {
|
||||||
|
"title": "Управління серверами",
|
||||||
|
"serverDetails": "Інформація про сервер",
|
||||||
|
"url": "URL-адреса",
|
||||||
|
"username": "Ім'я користувача",
|
||||||
|
"editServerDetailsTooltip": "Редагувати дані сервера",
|
||||||
|
"removeServer": "Видалити сервер"
|
||||||
|
},
|
||||||
|
"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": "Завантажити",
|
||||||
|
"moveItems": "$t(action.moveItems)",
|
||||||
|
"moveToNext": "$t(action.moveToNext)",
|
||||||
|
"moveToBottom": "$t(action.moveToBottom)",
|
||||||
|
"moveToTop": "$t(action.moveToTop)",
|
||||||
|
"numberSelected": "{{count}} вибрано",
|
||||||
|
"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": "Поділитися елементом",
|
||||||
|
"goTo": "Перейти до",
|
||||||
|
"goToAlbum": "Перейти до $t(entity.album, {\"count\": 1})",
|
||||||
|
"goToAlbumArtist": "Перейти до $t(entity.albumArtist, {\"count\": 1})",
|
||||||
|
"showDetails": "Отримати інформацію"
|
||||||
|
},
|
||||||
|
"fullscreenPlayer": {
|
||||||
|
"config": {
|
||||||
|
"dynamicBackground": "Динамічний фон",
|
||||||
|
"dynamicImageBlur": "Розмір розмиття зображення",
|
||||||
|
"dynamicIsImage": "Включити фонове зображення",
|
||||||
|
"followCurrentLyric": "Слідкувати за поточним рядком",
|
||||||
|
"lyricAlignment": "Вирівнювання тексту",
|
||||||
|
"lyricOffset": "Затримка тексту (мс)",
|
||||||
|
"lyricGap": "Розмір між рядками",
|
||||||
|
"lyricSize": "Розмір тексту",
|
||||||
|
"opacity": "Непрозорість",
|
||||||
|
"showLyricMatch": "Показувати збіг тексту пісень",
|
||||||
|
"showLyricProvider": "Показувати джерело тексту пісень",
|
||||||
|
"synchronized": "Синхронізовано",
|
||||||
|
"unsynchronized": "Несинхронізовано",
|
||||||
|
"useImageAspectRatio": "Використовувати співвідношення сторін зображення"
|
||||||
|
},
|
||||||
|
"lyrics": "Текст пісні",
|
||||||
|
"related": "Пов'язані",
|
||||||
|
"upNext": "Далі",
|
||||||
|
"visualizer": "Візуалізатор",
|
||||||
|
"noLyrics": "Текст пісні не знайдено"
|
||||||
|
},
|
||||||
|
"genreList": {
|
||||||
|
"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})"
|
||||||
|
},
|
||||||
|
"folderList": {
|
||||||
|
"title": "$t(entity.folder, {\"count\": 2})"
|
||||||
|
},
|
||||||
|
"globalSearch": {
|
||||||
|
"commands": {
|
||||||
|
"goToPage": "Перейти до сторінки",
|
||||||
|
"searchFor": "Шукати на {{query}}",
|
||||||
|
"serverCommands": "Команди сервера"
|
||||||
|
},
|
||||||
|
"title": "Команди"
|
||||||
|
},
|
||||||
|
"home": {
|
||||||
|
"explore": "Дослідити з вашої бібліотеки",
|
||||||
|
"genres": "$t(entity.genre, {\"count\": 2})",
|
||||||
|
"mostPlayed": "Найбільш відтворені",
|
||||||
|
"newlyAdded": "Нещодавно додані релізи",
|
||||||
|
"recentlyPlayed": "Нещодавно відтворені"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||