Compare commits

...
Author SHA1 Message Date
advplyr 7d10b8fc4a Version bump v2.37.0 2026-09-28 16:46:32 -05:00
advplyr 14bec248f1 Merge pull request #5577 from weblate/weblate-audiobookshelf-abs-web-client
Translations update from Hosted Weblate
2026-09-28 16:38:13 -05:00
Juan Benites ff57368f37 Translated using Weblate (Spanish)
Currently translated at 100.0% (1167 of 1167 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/es/
2026-09-27 01:06:47 +02:00
Mediokris f589397008 Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (1167 of 1167 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/nb_NO/
2026-09-27 01:06:47 +02:00
Danol fa4f6b58f3 Translated using Weblate (Czech)
Currently translated at 99.9% (1166 of 1167 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/cs/
2026-09-27 01:06:47 +02:00
Daniel Nylander 1acfd2ae54 Translated using Weblate (Swedish)
Currently translated at 100.0% (1167 of 1167 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sv/
2026-09-27 01:06:47 +02:00
advplyr 91717e3b96 Merge pull request #4974 from Vito0912/feat/addAPISocket
Add support that API-Keys authenticate sockets
2026-09-26 18:06:38 -05:00
advplyr 282d8b8bf6 Update TokenManager test 2026-09-26 18:03:39 -05:00
advplyr fb4c3ba984 Merge master 2026-09-26 18:00:58 -05:00
advplyr 72a1c656f9 Update jwt verify for sockets to ignore expiration 2026-09-26 17:52:08 -05:00
advplyr d22c468215 Merge pull request #5575 from SharonZhu0122/fix-5535-explicit-flag-from-provider
Set explicit flag from Audible match results
2026-09-23 17:41:50 -05:00
advplyr c654de4630 Fix server crash decoding invalid filter groups 2026-09-22 18:00:08 -05:00
advplyr aef33df8d3 Update get series for library endpoint to ensure series belongs to library 2026-09-22 17:49:53 -05:00
advplyr 63a883e595 Merge branch 'master' of https://github.com/advplyr/audiobookshelf 2026-09-21 17:02:46 -05:00
advplyr b8b069eca6 Fix server crash when collapse sub series and sort by author name #4993 & add whitelist for collapse subseries sort 2026-09-21 17:02:34 -05:00
advplyr 0fd0483021 Merge commit from fork
Add UUID check for cache manager
2026-09-21 16:10:29 -05:00
advplyr 8463b8426a Update library item cover PATCH endpoint to require the cover path to be in the library item libraryFiles array 2026-09-21 16:07:41 -05:00
advplyr e874d31e64 Merge pull request #5578 from nichwall/upgrade-to-node24
Upgrade to node24
2026-09-20 16:49:09 -05:00
advplyr 557f56ff21 Add npm run lint to unit-tests gh workflow 2026-09-20 16:45:33 -05:00
advplyr 7f296a5135 Update @types/node to 24, update readme node version 2026-09-20 16:38:40 -05:00
advplyr b5134a3287 Cleanup prober.js and fix redeclare 2026-09-20 15:36:15 -05:00
advplyr 8fb7a856d5 Fix LibraryItem dupe class member hasAudioFiles 2026-09-20 15:32:20 -05:00
advplyr ad8b235058 Add eslint for server 2026-09-20 15:25:30 -05:00
advplyr 186733f6af Remove duplicate podcastEpisodeModel get in Database 2026-09-20 14:44:21 -05:00
advplyr 1e5443f054 Clean up invalid where objects in LibraryScanner 2026-09-20 14:43:39 -05:00
advplyr 18e32410ad Merge pull request #5586 from binyaminyblatt/missing_declaration
fix: resolve ReferenceErrors in scandir.js under strict mode
2026-09-19 16:59:43 -05:00
advplyr 5077f87e0c Fix undefined variable in podcastUtils 2026-09-19 16:59:02 -05:00
advplyr 608d3ddde8 Fix undefined binaryPath in BinaryManager 2026-09-19 16:57:01 -05:00
advplyr 4c27a7b68e Merge branch 'missing_declaration' of https://github.com/binyaminyblatt/audiobookshelf into missing_declaration 2026-09-19 16:48:50 -05:00
advplyr a3b150d049 Fix undefined var in nodeFfprobe 2026-09-19 16:48:45 -05:00
advplyr 088c4f542f Cleanup scandir variables 2026-09-19 16:47:40 -05:00
Binyamin Blatt 6acb4b9005 fix no-undef in BackupManager 2026-09-20 00:45:24 +03:00
Binyamin Blatt 8781930ced Fix undeclared variables 2026-09-20 00:01:56 +03:00
Finn Dittmar 4236eef5c4 Add UUID check for cache manager 2026-09-19 17:23:40 +02:00
Nicholas Wallace b14224a6d8 Update remaining workflows to node 24 2026-09-18 14:52:42 -07:00
Nicholas Wallace a6128a6c98 Remove socket warning from web client 2026-09-18 14:38:01 -07:00
Nicholas Wallace 8a2a45751e Update dockerfile to use node 24 2026-09-18 11:09:13 -07:00
Nicholas Wallace 83e9a82f8f Update build scripts to target node 24 2026-09-18 10:32:21 -07:00
zsh bf4f74cb93 Set explicit flag from Audible match results 2026-09-19 01:54:54 +12:00
advplyr 1e88ff01e7 Update Dockerfile fix tsc not work on arm64 2026-09-17 17:23:34 -05:00
advplyr 5ec4a8a46e Merge pull request #5510 from nichwall/typescript-migration-begin
Typescript initial migration framework
2026-09-17 17:11:58 -05:00
advplyr 99e2c45482 Remove buildServer and update docker and workflows 2026-09-17 17:09:00 -05:00
advplyr 3c5d191c33 Fix MigrationManager undefined var 2026-09-17 16:57:58 -05:00
advplyr b67cbffbf9 Update tsconfig to use allowJs to skip buildServer.js step 2026-09-17 16:54:31 -05:00
advplyr eeaa408a2d Merge pull request #5526 from mikiher/fix-logging-error
AudioMetadataManager: Fix logging error
2026-09-17 15:20:18 -05:00
advplyr 4b67c170ce Version bump v2.36.1 2026-09-16 16:51:44 -05:00
advplyr d21aec237c Merge pull request #5570 from weblate/weblate-audiobookshelf-abs-web-client
Translations update from Hosted Weblate
2026-09-16 16:41:36 -05:00
Marcin 632ccd5cbf Translated using Weblate (Polish)
Currently translated at 100.0% (1167 of 1167 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/pl/
2026-09-16 23:26:39 +02:00
Martynas 62efd5c583 Translated using Weblate (Lithuanian)
Currently translated at 60.1% (702 of 1167 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/lt/
2026-09-16 23:26:39 +02:00
Kim Josefsen 9244f9ea5a Translated using Weblate (Danish)
Currently translated at 99.0% (1156 of 1167 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/da/
2026-09-16 23:26:39 +02:00
advplyr 7e76eed8bb Update library item updateMedia endpoint to no longer accept ebookFile, chapters and audioFiles in req body 2026-09-16 16:26:26 -05:00
advplyrandFinn Dittmar e4e212cca7 Update comic book extractor file path sanitization
Co-authored-by: Finn Dittmar <finn@dittmar-ldk.de>
2026-09-16 16:07:33 -05:00
advplyr fb43db4f75 Fix library narrator update/delete endpoint to be library scoped 2026-09-15 16:21:22 -05:00
advplyr 3b4895b1b0 Update author middleware check user can access library 2026-09-15 16:12:26 -05:00
advplyr a06639886b Fix share endpoints not sending 404 status 2026-09-14 17:31:47 -05:00
advplyr 37d7ee20ed Add try/catch on ensureDir in upload endpoint 2026-09-14 17:25:37 -05:00
advplyr eb8ed7f5b6 Add html sanitize to authLoginCustomMessage on auth-settings PATCH 2026-09-14 17:23:15 -05:00
advplyr 3d62a103ae Update settings PATCH endpoint to only accept a fixed set of general settings (auth settings must go through the auth-settings endpoint) 2026-09-14 17:21:40 -05:00
advplyr 42bf9512b0 Update cover endpoints to only allow webp, jpeg and png as optional format param 2026-09-14 17:05:07 -05:00
advplyr 5cb75a85ec Merge pull request #5558 from nichwall/weblate-credits-workflow
Add workflow to parse weblate commits
2026-09-11 16:02:19 -05:00
Nicholas Wallace 3c1bbc7f8e Update workflow to cehck for new languages 2026-09-11 13:45:30 -07:00
Nicholas Wallace b204395b8e Update name to translate-credits 2026-09-11 12:50:14 -07:00
Nicholas Wallace e4c69fe68b Update to latest version 2026-09-11 12:47:46 -07:00
Nicholas Wallace def8fca33a initial translatior credit workflow 2026-09-11 09:52:22 -07:00
advplyr e8ed987034 Merge pull request #5411 from weblate/weblate-audiobookshelf-abs-web-client
Translations update from Hosted Weblate
2026-09-11 06:37:14 -05:00
J. Lavoie d5be05b11e Translated using Weblate (Greek)
Currently translated at 29.5% (345 of 1167 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/el/
2026-09-10 22:51:44 +02:00
J. Lavoie 580f9fb649 Translated using Weblate (Italian)
Currently translated at 100.0% (1167 of 1167 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/it/
2026-09-10 22:51:41 +02:00
J. Lavoie 7aecf129ac Translated using Weblate (French)
Currently translated at 100.0% (1167 of 1167 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/fr/
2026-09-10 22:51:38 +02:00
J. Lavoie 4056f37390 Translated using Weblate (German)
Currently translated at 100.0% (1167 of 1167 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/de/
2026-09-10 22:51:36 +02:00
samia shanta 6bc2a89827 Translated using Weblate (Bengali)
Currently translated at 100.0% (1167 of 1167 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/bn/
2026-09-10 22:51:32 +02:00
mikiher eba1909c9c AudioMetadataManager: Fix logging error 2026-09-03 09:45:15 +03:00
Lorenz Schuster 010a73a16a Translated using Weblate (Italian)
Currently translated at 99.8% (1165 of 1167 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/it/
2026-08-28 23:10:44 +00:00
J. Lavoie ed6663054f Translated using Weblate (Greek)
Currently translated at 29.3% (342 of 1167 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/el/
2026-08-28 23:10:43 +00:00
Mario 01263e9379 Translated using Weblate (Finnish)
Currently translated at 100.0% (1167 of 1167 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/fi/
2026-08-28 23:10:43 +00:00
Mario 1ab6120596 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 69.0% (806 of 1167 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/zh_Hant/
2026-08-28 23:10:41 +00:00
J. Lavoie c097655c5c Translated using Weblate (French)
Currently translated at 100.0% (1167 of 1167 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/fr/
2026-08-28 23:10:41 +00:00
Gabriel 9f541063db Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1167 of 1167 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/pt_BR/
2026-08-28 23:10:40 +00:00
Martynas 3f2da7febc Translated using Weblate (Lithuanian)
Currently translated at 60.1% (702 of 1167 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/lt/
2026-08-28 23:10:40 +00:00
kuci-JK 24c68507e7 Translated using Weblate (Czech)
Currently translated at 99.8% (1165 of 1167 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/cs/
2026-08-28 23:10:39 +00:00
PovilasID b325d0ee1d Translated using Weblate (Lithuanian)
Currently translated at 59.8% (699 of 1167 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/lt/
2026-08-28 23:10:39 +00:00
ugyes 5f6fa4adbf Translated using Weblate (Hungarian)
Currently translated at 100.0% (1167 of 1167 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/hu/
2026-08-28 23:10:38 +00:00
Jan Paulzen 78130a7823 Translated using Weblate (German)
Currently translated at 100.0% (1167 of 1167 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/de/
2026-08-28 23:10:38 +00:00
violawang0401-cloud e4556b0307 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 69.0% (806 of 1167 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/zh_Hant/
2026-08-28 23:10:37 +00:00
violawang0401-cloud 6f57182da0 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 65.1% (760 of 1167 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/zh_Hant/
2026-08-28 23:10:36 +00:00
Vladimir Makeev 1aef21169c Translated using Weblate (Russian)
Currently translated at 100.0% (1167 of 1167 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ru/
2026-08-28 23:10:35 +00:00
Mateusz Lesiak e02c859437 Translated using Weblate (Polish)
Currently translated at 100.0% (1167 of 1167 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/pl/
2026-08-28 23:10:34 +00:00
Pavel Miniutka 9f475ef3d5 Translated using Weblate (Belarusian)
Currently translated at 100.0% (1167 of 1167 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/be/
2026-08-28 23:10:34 +00:00
FiendFEARing 5ad5768308 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1167 of 1167 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/zh_Hans/
2026-08-28 23:10:33 +00:00
Kwinten Cockhuyt d38bf9e868 Translated using Weblate (Dutch)
Currently translated at 100.0% (1167 of 1167 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/nl/
2026-08-28 23:10:33 +00:00
Igor Dobrača 1027b85e68 Translated using Weblate (Croatian)
Currently translated at 100.0% (1167 of 1167 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/hr/
2026-08-28 23:10:33 +00:00
Charlie 67992540c0 Translated using Weblate (French)
Currently translated at 100.0% (1167 of 1167 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/fr/
2026-08-28 23:10:32 +00:00
Zarakkas 733c795989 Translated using Weblate (German)
Currently translated at 100.0% (1167 of 1167 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/de/
2026-08-28 23:10:32 +00:00
advplyr 0a797ab8be Merge pull request #5507 from mikiher/next-client-base-path
Restore the mount prefix when handing requests to Next
2026-08-28 18:10:14 -05:00
nichwall fbfb24c264 Fix: new packaging warnings 2026-08-27 23:53:57 -07:00
nichwall 2440fb37c4 Ensure client is included in packaging after directory change 2026-08-27 23:42:06 -07:00
nichwall 65c075283c Fix appRoot directory 2026-08-27 23:30:22 -07:00
nichwall 198b2c27b8 Remove test files from docker image 2026-08-27 22:46:04 -07:00
nichwall d6398e54dd Fix: docker build 2026-08-27 21:40:09 -07:00
mikiher c0b9110e4e Make sure Next has basePath before remounting baseUrl 2026-08-27 12:17:10 +03:00
mikiherandCursor 13432209ee Restore the mount prefix when handing requests to Next
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-27 11:19:39 +03:00
nichwall 0571747fab Remove deprecated npm ci flags 2026-08-23 21:56:29 -07:00
nichwall ec2738cb0f Fix: linux packager building client as typescript 2026-08-23 15:49:15 -07:00
nichwall a7ebb3e1af Add: typescript compile step and update packaging 2026-08-23 15:34:08 -07:00
advplyr 513a0679f5 Merge pull request #5280 from schummar/fix/collapsed-series-with-filters
fix: collapsed series with filters
2026-08-16 17:13:48 -05:00
advplyr 1b46d68027 Merge pull request #5429 from Vito0912/fix/npmv12
add npmv12 compatibility
2026-08-03 17:14:55 -05:00
Finn Dittmar d511612f21 add npmv12 compatibility 2026-08-03 21:08:18 +02:00
advplyr 6caa1aa2da Merge pull request #5409 from mikiher/podcast-scanner-stale-episodes
Fix podcast rescan emitting stale episodes on item_updated
2026-07-28 18:15:19 -04:00
mikiher 32fae4a7c6 Fix podcast rescan emitting stale episodes on item_updated 2026-07-28 12:26:32 +03:00
advplyr 96d4021a3c Version bump v2.36.0 2026-07-27 17:31:12 -05:00
advplyr 49826f5163 Merge pull request #5406 from weblate/weblate-audiobookshelf-abs-web-client
Translations update from Hosted Weblate
2026-07-27 18:26:57 -04:00
FiendFEARing 76e33a2a4e Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1167 of 1167 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/zh_Hans/
2026-07-27 11:54:06 +02:00
FiendFEARing 1a440811c5 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1166 of 1166 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/zh_Hans/
2026-07-27 11:54:06 +02:00
advplyr 529a16b718 Merge pull request #5407 from nichwall/readme-update
Readme update
2026-07-27 05:53:49 -04:00
Nicholas Wallace 032f0b6b51 Fix installation link 2026-07-26 21:41:51 -07:00
Nicholas Wallace f5bfa1edd6 Add note about frontend rewrite 2026-07-26 21:40:59 -07:00
advplyr 4dfad46722 Merge pull request #5405 from advplyr/auth_sessions_enhancements
Delete auth session endpoint & paginate sessions
2026-07-26 18:49:25 -04:00
advplyr c86f336536 Update delete session to return status 200 instead of json 2026-07-26 17:40:14 -05:00
advplyr 1876bfbfe7 Add delete auth session endpoint to logout individual session 2026-07-26 17:36:36 -05:00
advplyr a7b380cd7a Add pagination to /me/sessions endpoint & sessions account page table 2026-07-26 17:11:03 -05:00
advplyr 71c5d27ea5 Merge pull request #5269 from weblate/weblate-audiobookshelf-abs-web-client
Translations update from Hosted Weblate
2026-07-26 08:45:00 -04:00
FiendFEARing 83707e08bf Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1164 of 1164 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/zh_Hans/
2026-07-25 22:44:45 +00:00
Igor Dobrača e8d1b58bd2 Translated using Weblate (Croatian)
Currently translated at 100.0% (1164 of 1164 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/hr/
2026-07-25 22:44:44 +00:00
FiendFEARing aff79b5579 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1164 of 1164 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/zh_Hans/
2026-07-25 22:44:43 +00:00
Mona Lisa 321d8bfda1 Translated using Weblate (Swedish)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sv/
2026-07-25 22:44:42 +00:00
Axel Björnsson a3ff41f90e Translated using Weblate (Icelandic)
Currently translated at 2.5% (30 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/is/
2026-07-25 22:44:40 +00:00
Mona Lisa 60f9ac93f7 Translated using Weblate (Swedish)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sv/
2026-07-25 22:44:38 +00:00
Mona Lisa bd61a43458 Translated using Weblate (Swedish)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sv/
2026-07-25 22:44:36 +00:00
FiendFEARing df6ec07f18 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/zh_Hans/
2026-07-25 22:44:35 +00:00
FiendFEARing 6d02aa3aa0 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/zh_Hans/
2026-07-25 22:44:33 +00:00
FiendFEARing 144fe743c6 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/zh_Hans/
2026-07-25 22:44:31 +00:00
FiendFEARing 0851b346d0 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/zh_Hans/
2026-07-25 22:44:29 +00:00
FiendFEARing 53e904314e Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/zh_Hans/
2026-07-25 22:44:25 +00:00
FiendFEARing 84f80f1903 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/zh_Hans/
2026-07-25 22:44:20 +00:00
FiendFEARing 98b1f4abad Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/zh_Hans/
2026-07-25 22:44:18 +00:00
FiendFEARing ec0d147d6d Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/zh_Hans/
2026-07-25 22:44:16 +00:00
FiendFEARing a7825bb461 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/zh_Hans/
2026-07-25 22:44:15 +00:00
தமிழ்நேரம் 09be7799f6 Translated using Weblate (Tamil)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ta/
2026-07-25 22:44:14 +00:00
தமிழ்நேரம் dc6a8a7292 Translated using Weblate (Tamil)
Currently translated at 16.7% (195 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ta/
2026-07-25 22:44:12 +00:00
Gabriel 0c075674a0 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/pt_BR/
2026-07-25 22:44:11 +00:00
advplyr 5b13820cb4 Added translation using Weblate (Tamil) 2026-07-25 22:44:10 +00:00
Hans Henrik Juhl d5b4d57fe3 Translated using Weblate (Danish)
Currently translated at 99.3% (1156 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/da/
2026-07-25 22:44:07 +00:00
Mikkel Dupont Olesen f12b64495a Translated using Weblate (Danish)
Currently translated at 99.7% (1160 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/da/
2026-07-25 22:44:05 +00:00
Hans Henrik Juhl 43f3150a52 Translated using Weblate (Danish)
Currently translated at 99.7% (1160 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/da/
2026-07-25 22:44:01 +00:00
Mikkel Dupont Olesen 65d3a668e3 Translated using Weblate (Danish)
Currently translated at 99.7% (1160 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/da/
2026-07-25 22:43:58 +00:00
Mikkel Dupont Olesen 2b5297bee8 Translated using Weblate (Danish)
Currently translated at 99.7% (1160 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/da/
2026-07-25 22:43:57 +00:00
no1ta 08caeb5975 Translated using Weblate (Greek)
Currently translated at 29.2% (340 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/el/
2026-07-25 22:43:55 +00:00
Igor Dobrača 6c170a5064 Translated using Weblate (Croatian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/hr/
2026-07-25 22:43:52 +00:00
advplyr 4b62f90964 Added translation using Weblate (Uzbek) 2026-07-25 22:43:50 +00:00
advplyr e9ea511c90 Merge pull request #5400 from advplyr/account_sessions_table
Account sessions table
2026-07-25 18:43:26 -04:00
advplyr c6afeb7dc9 Fix logout button logging out all devices 2026-07-25 17:20:32 -05:00
advplyr 35a2c5e87c Add /me/sessions endpoint and show sessions table on account page 2026-07-25 17:18:38 -05:00
advplyr 4c71a076e7 Merge pull request #5395 from advplyr/logout_all_devices
Add logout all devices button and extend auth logout endpoint
2026-07-24 18:51:35 -04:00
advplyr e56c1099e6 Add logout all devices button and extend auth logout endpoint 2026-07-24 17:44:03 -05:00
advplyr dc0b24a03f Merge pull request #5393 from advplyr/pw_change_invalidates_sessions
User password changes invalidate sessions
2026-07-23 18:40:30 -04:00
advplyr c900676be7 User password changes invalidate sessions 2026-07-23 17:21:25 -05:00
advplyr a6cde926ee Merge pull request #5336 from francisrath/fix-broken-help-links
Update outdated in-app help links to new docs site structure
2026-07-22 18:07:58 -04:00
advplyr e8db14fe33 Update collection help docs link 2026-07-22 17:07:32 -05:00
advplyr e9b533637f Merge pull request #5376 from DanielAshley/contrib/refresh-grace-period
Make refresh-token grace period configurable (default 10 min)
2026-07-22 18:01:32 -04:00
advplyr 8b97da500d Remove TokenManager test 2026-07-22 16:58:03 -05:00
advplyr 37b42601ef Merge pull request #5363 from Vito0912/feat/newEndpoints
add progress and bookmarks specific endpoints
2026-07-22 17:10:51 -04:00
advplyr 5da4ec51ce Remove MeController test 2026-07-22 16:05:59 -05:00
advplyr 4c65a87d5c Update bookmarks endpoints to use json object as root 2026-07-22 16:05:37 -05:00
Finn Dittmarandadvplyr 0e5618dcd8 Apply suggestions from code review
Co-authored-by: advplyr <dev@advplyr.com>
2026-07-22 10:20:41 +02:00
advplyr d063d851e1 Merge pull request #5388 from mikiher/fix/bulk-download-permissions
Enforce per-item access checks on bulk library download
2026-07-21 18:34:13 -04:00
advplyr 6458e6d3d2 Merge pull request #5387 from mikiher/fix/refresh-token-auth
Reject refresh tokens on API and WebSocket authentication
2026-07-21 18:20:57 -04:00
advplyr 70953d8c82 Slim down TokenManager test 2026-07-21 17:18:58 -05:00
advplyr 2d9f63963e Merge pull request #5370 from mikiher/fix/root-user-delete-protection
Prevent admin users from deleting the root account
2026-07-20 18:35:32 -04:00
advplyr f12abca3fc Simplify user delete checks 2026-07-20 17:33:15 -05:00
advplyr bced308462 Trim down UserController test 2026-07-20 17:31:03 -05:00
advplyr 528d03fef3 Merge pull request #5386 from mikiher/fix/oidc-url-validation
Fix oidc url validation
2026-07-20 18:08:51 -04:00
advplyr b93c3133a9 Update x-forwarded-proto to check comma separated value 2026-07-20 17:06:21 -05:00
mikiher 8d9db8d103 fix OidcAuthStrategy test module load order 2026-07-20 18:43:15 +03:00
advplyr 08bbf9cd9d Update server settings to include host timezone for use in cron scheduler next run dates 2026-07-19 17:31:00 -05:00
Daniel 95af4812cd Make the refresh-token grace period configurable (default 10 min)
When /auth/refresh rotates the refresh token, the previous token is kept
valid for a short grace period so a client that never received the
rotation response (e.g. a dropped or suspended mobile request) can retry
with the old token and get back the already-rotated current token
instead of a 401.

That window was hardcoded to 60 seconds, which is too short for real
mobile conditions: iOS backgrounding, VPN/proxy timeouts, or network
handoff can delay the retry past a minute, permanently locking the
session out (#5281).

Make it configurable via REFRESH_TOKEN_GRACE_PERIOD (seconds), following
the existing REFRESH_TOKEN_EXPIRY / ACCESS_TOKEN_EXPIRY pattern, and
raise the default to 10 minutes. Adds unit tests for the new config.

Fixes #5281
2026-07-18 21:42:06 -04:00
mikiher 8ec547e302 fix(auth): refresh tokens authentication in API and WebSocket requests 2026-07-16 18:58:44 +03:00
mikiher 32e4da8c92 fix(permissions): enforce per-item access on bulk library download 2026-07-16 18:11:19 +03:00
mikiher 0ce37004af fix(auth): harden OIDC web callback URL validation 2026-07-16 17:11:11 +03:00
mikiher 527745b54e refactor(server): centralize request HTTPS and origin detection 2026-07-16 17:10:42 +03:00
mikiher 3c016314e6 fix(auth): prevent admin users from deleting the root account 2026-07-15 20:34:02 +03:00
advplyr 59c7d0275c Merge pull request #5354 from mikiher/scan-author-events
Emit author socket events when book scans create or link authors
2026-07-13 19:27:31 -04:00
Finn Dittmar 4883d0f60c add progress and bookmarks specific endpoints 2026-07-13 11:41:49 +02:00
mikiher 9d9ab49664 Batch author numBooks updates at scan end via authors_num_books_updated 2026-07-10 17:37:31 +03:00
advplyr 82aec5f60c Merge pull request #5341 from mikiher/expanded-minified-superset
Add all minified fields to expanded library item JSON
2026-07-09 16:56:45 -05:00
mikiher 7ee5e1bdf6 Emit author socket events when book scans create or link authors 2026-07-09 10:35:18 +03:00
mikiher 3bb53d939d Add all minified fields to expanded library item JSON so socket updates remain a strict superset of shelf payloads 2026-07-01 22:30:21 +03:00
advplyr 6f03467f35 Update links in the README 2026-06-29 16:46:33 -05:00
advplyr b2f593f1c4 Update readme organizing docs link & remove api docs link 2026-06-29 16:43:24 -05:00
advplyr 58dcda36a5 Cleanup readme and link to contributing docs 2026-06-29 16:37:54 -05:00
advplyr 354e0bf793 Update readme remove reverse proxy set up and link to docs page 2026-06-29 16:32:41 -05:00
Francis Rath 0784373b61 Update outdated in-app help links to new docs site structure
The help (?) links throughout the client pointed to the old
www.audiobookshelf.org/guides/* pages, which no longer exist and
resolve to a 404. Update all of them to the current
audiobookshelf.org/docs/documentation/* locations.
2026-06-29 03:02:19 +02:00
advplyr 2f219ea3cc Merge pull request #5325 from mikiher/file-upload-internal-api
Let next.js handle file uploads through internal-api routes
2026-06-25 17:03:34 -05:00
mikiher 56e60b8420 Server.js: Let next.js handle file uploads through internal-api routes 2026-06-23 14:08:16 +03:00
advplyr 9b92b5de34 Merge pull request #5318 from mikiher/match-update-episode-enclosure
Enhance PodcastController to handle enclosure updates
2026-06-20 17:06:32 -05:00
mikiher 3417c0c721 Enhance PodcastController to handle enclosure updates, allowing for null values and object structure validation for enclosure properties. 2026-06-18 12:39:50 +03:00
advplyr cbda0360aa Merge pull request #5291 from mikiher/allowed-dev-origins
Read AllowedDevOrigins from dev.js into ALLOWED_DEV_ORIGINS env var
2026-06-04 15:13:34 -05:00
mikiher 036bc081f0 index.js: Read AllowedDevOrigins from dev,js into ALLOWED_DEV_ORIGINS env var 2026-06-04 14:03:59 +03:00
Marco Schumacher 42947e2e64 Revert "fix: series book count with active filters"
This reverts commit c4e7172c2f.
2026-06-01 10:44:35 +02:00
Marco Schumacher c4e7172c2f fix: series book count with active filters 2026-06-01 10:26:45 +02:00
Marco Schumacher 4502d37d4f fix: collapsed series query with active filters 2026-06-01 10:26:29 +02:00
advplyr e70e4b9d40 Fix typo on onTest notification body 2026-05-30 15:43:50 -05:00
advplyr aacdcc47ec Version bump v2.35.1 2026-05-28 15:22:55 -05:00
advplyr 499b52b4dd Update Sequelize where query for User username/email case insensitive 2026-05-28 14:49:49 -05:00
advplyr 1bad2d9072 Cleanup abmetadata file parsing & fix server crash #5268 #4287 #5142 2026-05-27 17:33:14 -05:00
advplyr c009db9f28 Merge pull request #5256 from nichwall/fix-bookauthor-collision-on-rename
Fix duplicate bookAuthor creation when renaming authors
2026-05-22 15:43:13 -05:00
advplyr 325469c5a5 Merge pull request #5255 from nichwall/refresh-token-uniqueness
Add unique UUID to access and refresh tokens
2026-05-22 15:39:01 -05:00
Nicholas Wallace c97b36e11c Add ignoreDuplicates for bookAuthor when renaming to respect unique index 2026-05-21 21:06:17 -07:00
Nicholas Wallace e944b2a2f5 Add unique UUID to access and refresh tokens 2026-05-21 17:08:39 -07:00
advplyr 2d0a5462d2 Merge branch 'master' of https://github.com/advplyr/audiobookshelf 2026-05-17 14:31:45 -05:00
advplyr 72dc75482f Version bump v2.35.0 2026-05-17 14:31:41 -05:00
advplyr cac74f3477 Merge pull request #5004 from nichwall/token_refresh_race_condition
Access token refresh grace period
2026-05-17 14:16:58 -05:00
advplyr 1ad11b2b9e Merge pull request #5216 from weblate/weblate-audiobookshelf-abs-web-client
Translations update from Hosted Weblate
2026-05-17 14:16:24 -05:00
Pavel Miniutka 50eeca2e0f Translated using Weblate (Belarusian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/be/
2026-05-15 18:13:27 +00:00
EteranlK 4f21fc023c Translated using Weblate (Arabic)
Currently translated at 96.3% (1120 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ar/
2026-05-15 18:13:26 +00:00
advplyr 52a485d135 Added translation using Weblate (Latvian) 2026-05-15 18:13:25 +00:00
d0nizam 3b025076e8 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/bg/
2026-05-15 18:13:23 +00:00
Mateusz Lesiak 6d5d89429d Translated using Weblate (Polish)
Currently translated at 99.8% (1161 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/pl/
2026-05-15 18:13:22 +00:00
advplyr c010f0e1eb Fix android device sdkVersion not handling it using number type, causing android session device names to show as iOS 2026-05-15 13:13:14 -05:00
advplyr eee377e081 Cleanup TokenManager logs 2026-05-13 16:23:26 -05:00
advplyr b0aaa24660 Update socket events to check client is admin & validate log level 2026-05-12 16:57:28 -05:00
advplyr 47ea6b5092 Update book/podcast scanner to sanitize description pulled from metadata 2026-05-05 17:18:49 -05:00
advplyr 4b060febc2 Merge pull request #5221 from brandonfhall/fix/rss-feed-m4b-content-type
Fix: RSS feed serves m4b files with correct Content-Type: audio/mp4
2026-05-03 14:40:43 -05:00
Brandon 40869bcf39 fix: set correct Content-Type for RSS feed audio files
Express's mime package does not recognize .m4b, causing it to fall back
to application/octet-stream. This reuses the existing
getAudioMimeTypeFromExtname utility (already applied to the download
endpoint) to set the correct audio/mp4 header before sendFile.

Fixes #5041
2026-05-02 22:13:35 -04:00
advplyr 3942805129 Cleanup rotateTokensForSession 2026-04-30 16:25:43 -05:00
advplyr dc446862c1 Rename migration to v2.35.0 & merge master 2026-04-30 16:08:24 -05:00
advplyr 379f6c716a Merge branch 'master' into token_refresh_race_condition 2026-04-30 15:59:22 -05:00
advplyr 47457ee1e7 Version bump v2.34.0 2026-04-27 16:51:34 -05:00
advplyr cb6ff9eedf Merge pull request #5204 from weblate/weblate-audiobookshelf-abs-web-client
Translations update from Hosted Weblate
2026-04-27 16:45:57 -05:00
LvanAlphen 5dc01261c1 Translated using Weblate (Dutch)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/nl/
2026-04-26 21:51:49 +00:00
Naoto Ishikawa cbc103cf05 Translated using Weblate (Japanese)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ja/
2026-04-26 21:51:49 +00:00
Pavel Miniutka e79256d0fb Translated using Weblate (Belarusian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/be/
2026-04-26 21:51:48 +00:00
ugyes f8ef56c6bc Translated using Weblate (Hungarian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/hu/
2026-04-26 21:51:48 +00:00
advplyr 62d7097e23 Add ApiCacheManager test for should remove recent-episodes cache entries 2026-04-26 16:51:39 -05:00
advplyr 92df92ec99 Fix recent episodes endpoint cache not being cleared when updating media progress #5159 2026-04-26 16:51:08 -05:00
advplyr 1c229e0627 Merge pull request #5211 from na3shkw/add-i18n-japanese
Add Japanese (ja) language and Japan podcast search region
2026-04-26 16:19:37 -05:00
advplyr f8a71cc514 Merge pull request #5089 from meek2100/pass_managers
feat: add autocomplete attributes for password manager support
2026-04-26 16:16:42 -05:00
Naoto Ishikawa 63de5bb2d5 Merge branch 'advplyr:master' into add-i18n-japanese 2026-04-26 15:23:22 +09:00
advplyr 2c3108a1fa Merge pull request #5163 from pjkottke/master
The timestamp in the share URL should override the saved position for the user.
2026-04-25 17:15:23 -05:00
advplyr 928051744a ShareController check ?t param is less than duration, revert frontend mounted usage of param 2026-04-25 17:13:22 -05:00
advplyr 3ccdcaec1a Implement SSRF filter for podcast episode downloads 2026-04-25 16:46:54 -05:00
na3shkw f47bbc7886 Add Japanese language and Japan podcast search region 2026-04-25 15:56:16 +00:00
advplyr 7c0ca44727 Update podcast create/update endpoints to validate autoDownloadSchedule cron expression, validate cron expression before starting in CronManager 2026-04-24 16:55:42 -05:00
advplyr d6a2e5596b Fix undefined variable in error log for when podcast cron is invalid 2026-04-24 16:18:56 -05:00
advplyr a5362de9cc Update podcast createFromRequest to sanitize html description 2026-04-23 14:34:59 -05:00
advplyr 9ab35ef418 Update playlist endpoints to check user still has library access 2026-04-22 16:42:58 -05:00
advplyr 79cc9765cf Update collection endpoints to check user library access 2026-04-22 16:29:47 -05:00
advplyr 5b2a788cfc Update LibraryItemController test with 403 tests 2026-04-21 17:13:52 -05:00
advplyr 80b39abaa2 Update library item batch api endpoints check users per-item access & return 403 2026-04-21 17:13:06 -05:00
advplyr b41db23994 Version bump v2.33.2 2026-04-19 16:46:10 -05:00
advplyr 125f265f55 Merge pull request #5141 from weblate/weblate-audiobookshelf-abs-web-client
Translations update from Hosted Weblate
2026-04-19 16:21:40 -05:00
Gernomaly aa4a191567 Translated using Weblate (German)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/de/
2026-04-19 21:20:46 +00:00
Jan e431ea0472 Translated using Weblate (German)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/de/
2026-04-19 21:20:45 +00:00
Laurin Sorgend e3388d4446 Translated using Weblate (German)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/de/
2026-04-19 21:20:45 +00:00
Mario 88879f1409 Translated using Weblate (German)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/de/
2026-04-19 21:20:44 +00:00
Pavel Miniutka 3e0099e8d9 Translated using Weblate (Belarusian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/be/
2026-04-19 21:20:44 +00:00
tizio04 f558182d94 Translated using Weblate (Italian)
Currently translated at 99.9% (1162 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/it/
2026-04-19 21:20:43 +00:00
Владимир Макеев a30fe15b10 Translated using Weblate (Russian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ru/
2026-04-19 21:20:43 +00:00
A L 0bbf8bde5c Translated using Weblate (Bulgarian)
Currently translated at 91.2% (1061 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/bg/
2026-04-19 21:20:42 +00:00
Alex 0e2cdde731 Translated using Weblate (Slovak)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sk/
2026-04-19 21:20:41 +00:00
tfr tint bc6bfbe804 Translated using Weblate (Italian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/it/
2026-04-19 21:20:41 +00:00
Vadzim Kurdzesau 2755204168 Translated using Weblate (Russian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ru/
2026-04-19 21:20:40 +00:00
Francisco Serrador 2d4df273f0 Translated using Weblate (Spanish)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/es/
2026-04-19 21:20:40 +00:00
Pavel Miniutka d73b64a19c Translated using Weblate (Belarusian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/be/
2026-04-19 21:20:39 +00:00
advplyr b7e8a0474a Update bulk download endpoint ensure items are from the same library requested 2026-04-19 16:20:31 -05:00
advplyr 39adefb632 Update backup load & upload to remove tempfile on failed backups, validate details filesize & close zip 2026-04-18 17:03:37 -05:00
advplyr 24cab79c66 Update filesystem/pathexists endpoint to use existing isSameOrSubPath func 2026-04-18 16:24:48 -05:00
advplyr b27f21fd95 Update podcastUtils to sanitize episode subtitle from rss feed 2026-04-17 16:59:22 -05:00
advplyr 09fa0b38f5 Update podcast create path validation & fix relPath 2026-04-17 16:51:22 -05:00
advplyr 455e605162 Update author & library item image endpoints to clamp width/height query params 2026-04-17 16:30:08 -05:00
advplyr 88667d00a1 Merge pull request #5115 from rktjmp/fix-mka-opus-desktop-streaming
Force AAC transcode when streaming mka+opus to desktop client
2026-04-10 16:54:18 -05:00
advplyr 94c426bd97 Update comments on matroska 2026-04-10 16:42:39 -05:00
Oliver Marriott 522b9735e2 Add audio/(x-)matroska to client player MIME types to avoid transcode
Firefox, at least, supports playing `matroska/audio` containers natively but
the client was not checking for support. Clients  that do not support
playing `matroska/audio` containers will fallback to transcoding.
2026-04-09 21:07:14 +10:00
peter.kottke 5a6b3d8e61 updates to allow share t argument to over-ride server stored position 2026-04-01 21:05:48 -04:00
advplyr 64cbf59609 Merge pull request #5160 from mikiher/fix-item-removed-payload
Fix item_removed payload to include libraryId
2026-03-31 16:43:51 -05:00
mikiher fda1a6ea9b Fix item_removed payload to include libraryId 2026-03-31 22:02:52 +03:00
advplyr c4c8b8d0f2 Merge pull request #5158 from mikiher/book-update-author-events
Emit proper author_updated/added events when updating book media
2026-03-30 16:26:47 -05:00
advplyr ab3bd6f4a1 Update JS docs 2026-03-30 16:22:27 -05:00
mikiher 093124aac6 Emit proper author_updated/added events when updating book media 2026-03-30 22:02:56 +03:00
advplyr 5de92d08f9 Fix share playback session not including coverAspectRatio 2026-03-29 15:36:07 -05:00
advplyr 8b89b27654 Version bump v2.33.1 2026-03-19 17:09:14 -05:00
advplyr 3faa6f3e7d Update playlist create/update endpoint to strip all html tags 2026-03-19 16:57:22 -05:00
advplyr 9821c31f8e Update collection create/update endpoints to strip html tags from collection name 2026-03-19 16:53:21 -05:00
advplyr efe2a22674 Merge pull request #5122 from weblate/weblate-audiobookshelf-abs-web-client
Translations update from Hosted Weblate
2026-03-19 16:41:19 -05:00
Francisco Serrador 9634c46bc5 Translated using Weblate (Spanish)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/es/
2026-03-18 23:01:31 +01:00
Francisco Serrador 5f8db24b96 Translated using Weblate (Spanish)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/es/
2026-03-18 23:01:30 +01:00
Francisco Serrador e781ff5eae Translated using Weblate (Spanish)
Currently translated at 99.7% (1160 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/es/
2026-03-18 23:01:30 +01:00
Francisco Serrador 32a17c0044 Translated using Weblate (Spanish)
Currently translated at 99.7% (1160 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/es/
2026-03-18 23:01:29 +01:00
Fabian Jülich f84831d6f1 Translated using Weblate (German)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/de/
2026-03-18 23:01:29 +01:00
Pavel Miniutka dc54d42dcf Translated using Weblate (Belarusian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/be/
2026-03-18 23:01:28 +01:00
Pavel Miniutka 15af7407ff Translated using Weblate (Belarusian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/be/
2026-03-18 23:01:27 +01:00
Charlie 5d9682410a Translated using Weblate (French)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/fr/
2026-03-18 23:01:27 +01:00
advplyr 4bdd76d94c Update podcast episode update endpoint to sanitize subtitle 2026-03-18 17:01:19 -05:00
advplyr 7c0d9efe91 Update Confirm component to support allowHtml prompt option 2026-03-18 16:51:51 -05:00
advplyr 874e9e1856 Update API Key jwtAuthCheck to check user active status 2026-03-18 16:17:45 -05:00
advplyr 6d3773a0b8 Version bump v2.33.0 2026-03-12 17:01:54 -05:00
advplyr a47c869d0b Update migration file to v2.33.0 2026-03-12 16:45:08 -05:00
advplyr eb0383d37a Merge pull request #5073 from kevingatera/perf/minimal-upstream-patchset
Improve personalized/discover query performance and cache invalidation behavior
2026-03-12 16:38:26 -05:00
advplyr e66ffb9c23 Add indexes to MediaProgress and BookSeries models 2026-03-12 16:37:59 -05:00
advplyr 972193b193 Update server settings authLoginCustomMessage to sanitize on save and load 2026-03-11 17:18:05 -05:00
advplyr 690a7e0da9 Update session DeviceInfo with sanitize on clientDeviceInfo 2026-03-11 17:03:07 -05:00
Oliver Marriott d9355ac3aa Force AAC transcode when streaming mka+opus to desktop client
Matroska audio containers (aka mka files) with Opus codec streams inside
were unplayable on the desktop client because hls.js was unable to
decode the stream, resulting in an infinitely "spinning" play button.

When configuring a stream, we now check for the opus codec and force AAC
transcoding.

Matroska containers support other codecs besides Opus, eg: mp3, which do
not require transcoding and work fine before this patch, which is why we
check for opus in codecsToForceAAC instead of AudioMimeType.MKA in
mimeTypesToForceAAC.

The AudioMimeType.OPUS mimetype is already marked as requiring
transcoding but since its inside a container this check does not
evaluate to true, we must check the codec explicitly.
2026-03-11 00:35:12 +11:00
advplyr fbe1d1eed6 Merge pull request #5030 from weblate/weblate-audiobookshelf-abs-web-client
Translations update from Hosted Weblate
2026-03-08 17:30:54 -05:00
Grzegorz Orlowski e83aca572e Translated using Weblate (Polish)
Currently translated at 95.7% (1113 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/pl/
2026-03-08 23:26:10 +01:00
Artur 367826ce64 Translated using Weblate (Polish)
Currently translated at 95.7% (1113 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/pl/
2026-03-08 23:26:10 +01:00
Torstein Eide 6e6c43c53c Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/nb_NO/
2026-03-08 23:26:10 +01:00
weblate.user.1274 6479cdb66d Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/nb_NO/
2026-03-08 23:26:10 +01:00
Øystein S. Hegnander 635e132325 Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/nb_NO/
2026-03-08 23:26:10 +01:00
thehijacker 45dd843ce1 Translated using Weblate (Slovenian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sl/
2026-03-08 23:26:10 +01:00
Torstein Eide 7c956b1582 Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/nb_NO/
2026-03-08 23:26:10 +01:00
Pavel Miniutka 9afa39e29e Translated using Weblate (Belarusian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/be/
2026-03-08 23:26:10 +01:00
Pavel Miniutka 5f8450602e Translated using Weblate (Belarusian)
Currently translated at 92.1% (1072 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/be/
2026-03-08 23:26:10 +01:00
Pavel Miniutka fa6dae1a53 Translated using Weblate (Belarusian)
Currently translated at 79.8% (929 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/be/
2026-03-08 23:26:10 +01:00
lambolighting a1d439b8d5 Translated using Weblate (Greek)
Currently translated at 27.6% (322 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/el/
2026-03-08 23:26:10 +01:00
peter cerny 2f32673991 Translated using Weblate (Slovak)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sk/
2026-03-08 23:26:10 +01:00
herny ucet c1a6b51d78 Translated using Weblate (Slovak)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sk/
2026-03-08 23:26:09 +01:00
Gneb 6c2e13fb4e Translated using Weblate (Slovak)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sk/
2026-03-08 23:26:09 +01:00
Plazec 210fa55b6a Translated using Weblate (Czech)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/cs/
2026-03-08 23:26:09 +01:00
Silviu Bajenaru fb8ca043ad Translated using Weblate (Romanian)
Currently translated at 55.1% (641 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ro/
2026-03-08 23:26:09 +01:00
Karl Bernstål 69d7c399b8 Translated using Weblate (Swedish)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sv/
2026-03-08 23:26:09 +01:00
Igor Dobrača a35ba05600 Translated using Weblate (Croatian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/hr/
2026-03-08 23:26:09 +01:00
B0rax 40f42b2ab6 Translated using Weblate (German)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/de/
2026-03-08 23:26:09 +01:00
Maxklos cf4b9e938d Translated using Weblate (German)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/de/
2026-03-08 23:26:09 +01:00
ugyes 31120ad111 Translated using Weblate (Hungarian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/hu/
2026-03-08 23:26:09 +01:00
Yusuke Sakai cd8640f00e Translated using Weblate (Japanese)
Currently translated at 23.1% (269 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ja/
2026-03-08 23:26:09 +01:00
Luis Landeiro d0ba455ed6 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/pt_BR/
2026-03-08 23:26:09 +01:00
advplyr e5b7aea46c Merge pull request #5063 from mandreko/idor-fixes
IDOR fixes
2026-03-08 17:26:03 -05:00
advplyr 2f2d026b06 Auto format 2026-03-08 17:25:52 -05:00
advplyr c156b063f5 Merge pull request #5036 from kctdfh/Slightly-better-subtitle-parsing-logic
Improved subtitle parsing to account for bare colon in title
2026-03-08 17:12:55 -05:00
advplyr e6d49a2d53 Fix home page check current user for hide from continue listening 2026-03-04 16:50:36 -06:00
advplyr 6d3404272c Fix Match click to use current label string 2026-02-28 11:32:28 -06:00
meek2100 a9e12657f5 Add autocomplete attributes to login and setup fields for password manager support 2026-02-26 14:29:28 -08:00
Kevin Gatera c0319ebbac Adjust discover/search changes for API compatibility 2026-02-23 19:22:45 -05:00
advplyr 1d0b7e383a Merge pull request #5071 from pavel-miniutka/master
Add Belarusian language option & Belarus podcast region
2026-02-22 16:19:19 -06:00
advplyr 9f5d8386f3 Merge pull request #5077 from belpe/add-slovak-language
Add Slovak (sk) language to language selector
2026-02-22 16:15:55 -06:00
advplyr 6e0da3bf7a Fix updating author name merging with same name authors in a different library #4628 2026-02-21 16:00:38 -06:00
Peter BelákandClaude Opus 4.6 ee6016f70e Add Slovak (sk) language to the language selector
The Slovak translation file (client/strings/sk.json) already exists
with a complete translation but was missing from the languageCodeMap
in i18n.js, making it inaccessible from the language dropdown.

Also adds Slovakia to the podcast search region map.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 09:11:50 +01:00
Kevin Gatera f1a2e56054 Add database indexes for discover query performance 2026-02-19 20:11:49 -05:00
Kevin Gatera d2915e689f Speed up personalized shelves and reduce search payload size 2026-02-19 20:11:38 -05:00
Kevin Gatera 05d9ab81f9 Improve API cache invalidation for high-churn models 2026-02-19 20:11:24 -05:00
pavel-miniutka 75eed9d09a Add Belarusian language option & Belarus podcast region 2026-02-19 10:36:28 +03:00
Matt Andreko e5af2f336b Move file to correct folder... 2026-02-15 22:06:20 -05:00
Matt Andreko ade1752e97 Fix IDOR bugs 2026-02-15 22:01:36 -05:00
advplyr fa5fa7b788 Fix server crash on /me/progress/:libraryItemId/:episodeId? when episodeId is not passed in for a podcast library item #5058 2026-02-14 17:17:12 -06:00
advplyr b01facc034 Merge pull request #5042 from openam/open-api-spec-fixes
Fix OpenAPI spec description
2026-02-08 17:23:18 -06:00
Michael Tuttle dd4fc09909 Fix OpenAPI spec description 2026-02-08 00:19:23 -07:00
Khashayar Toodehfallah c15cb48def Improved subtitle parsing to account for bare colon in title 2026-02-06 14:31:09 -05:00
advplyr fe13456a2b Merge pull request #4936 from weblate/weblate-audiobookshelf-abs-web-client
Translations update from Hosted Weblate
2026-02-03 17:26:42 -06:00
Lluís Forns 2ee893062f Translated using Weblate (Catalan)
Currently translated at 92.2% (1073 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ca/
2026-02-03 20:10:06 +01:00
dapitch666 31630f50a5 Translated using Weblate (French)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/fr/
2026-02-03 20:10:06 +01:00
Delta Umhöfer edfce46058 Translated using Weblate (German)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/de/
2026-02-02 08:02:28 +00:00
Jan-Eric Myhrgren cc5244c596 Translated using Weblate (Swedish)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sv/
2026-02-02 08:02:27 +00:00
enosh b8942c5931 Translated using Weblate (Hebrew)
Currently translated at 81.4% (947 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/he/
2026-02-02 08:02:26 +00:00
FiendFEARing 6e5feee78a Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/zh_Hans/
2026-02-02 08:02:25 +00:00
Dawid Kuźnicki e7cb0466e6 Translated using Weblate (Polish)
Currently translated at 94.5% (1100 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/pl/
2026-02-02 08:02:24 +00:00
dv4yGY2U 6c7221d37d Translated using Weblate (Turkish)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/tr/
2026-02-02 08:02:24 +00:00
Samuel Guerrero 1f3fa80ddd Translated using Weblate (Spanish)
Currently translated at 97.5% (1134 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/es/
2026-02-02 08:02:23 +00:00
Mantas 87f3766299 Translated using Weblate (Lithuanian)
Currently translated at 59.9% (697 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/lt/
2026-02-02 08:02:22 +00:00
Bartłomiej d08cef11ed Translated using Weblate (Polish)
Currently translated at 94.5% (1100 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/pl/
2026-02-02 08:02:21 +00:00
Kabika82 7201cced42 Translated using Weblate (Hungarian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/hu/
2026-02-02 08:02:20 +00:00
N Visi 4f8fbbc979 Translated using Weblate (Japanese)
Currently translated at 22.8% (266 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ja/
2026-02-02 08:02:19 +00:00
Henrik Lynge e55fed4a33 Translated using Weblate (Danish)
Currently translated at 99.9% (1162 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/da/
2026-02-02 08:02:19 +00:00
herny ucet dcbeecff7a Translated using Weblate (Slovak)
Currently translated at 99.7% (1160 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sk/
2026-02-02 08:02:18 +00:00
xxzp3 32276aacd9 Translated using Weblate (Danish)
Currently translated at 99.8% (1161 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/da/
2026-02-02 08:02:17 +00:00
J. Lavoie b921a08809 Translated using Weblate (French)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/fr/
2026-02-02 08:02:16 +00:00
J. Lavoie c089336e41 Translated using Weblate (Italian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/it/
2026-02-02 08:02:15 +00:00
Charlie 5107b0307c Translated using Weblate (French)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/fr/
2026-02-02 08:02:14 +00:00
advplyr 8498378bca Merge pull request #4952 from sir-wilhelm/use-localized-text-for-selected-filter
Display localized/styled text for selected filter.
2026-01-31 17:56:07 -06:00
advplyr b61e2c30f2 Merge pull request #4973 from KiwiHour/jump-backwards-label-fix
Fix screen reader compatability issue for the "jump backwards" button for media controls
2026-01-31 17:50:41 -06:00
Nicholas Wallace cfeb6bd502 Fix: grace period enable statement 2026-01-24 18:57:40 -07:00
Nicholas Wallace 077b523bd6 Fix JS Doc deletion 2026-01-24 18:42:50 -07:00
Nicholas Wallace b8a2d113f0 Allow rotation without grace period for invalidating all user sessions 2026-01-24 18:26:11 -07:00
Nicholas Wallace e1ae4f2d31 Fix: race condition in rotation 2026-01-24 18:10:38 -07:00
Nicholas Wallace 7aa2f84daa Revert default token expiry 2026-01-24 17:00:07 -07:00
Nicholas Wallace da0a64daed Add: 10 second grace period to access token cycle 2026-01-24 16:57:25 -07:00
Finn Dittmar dfce15a74c Add support that API-Keys authenticate sockets 2026-01-09 20:45:48 +01:00
KiwiHour 3e4225bced Fix aria-label for jumpBackward button 2026-01-09 14:26:56 +00:00
sir-wilhelm e6d99d07f0 Display localized/styled text for selected filter.
The selected filter was using the id before.
2025-12-28 11:28:36 -06:00
advplyr 122fc34a75 Fix server crash filtering by decade with collapsed series 2025-12-24 17:07:05 -06:00
advplyr e5c0a9d22c Version bump v2.32.1 2025-12-23 16:51:54 -06:00
advplyr 3bf136a20b Merge pull request #4933 from weblate/weblate-audiobookshelf-abs-web-client
Translations update from Hosted Weblate
2025-12-23 16:49:04 -06:00
Marcin b387d9484a Translated using Weblate (Polish)
Currently translated at 89.2% (1038 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/pl/
2025-12-23 23:44:39 +01:00
bittin1ddc447d824349b2 e8668d9f22 Translated using Weblate (Swedish)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sv/
2025-12-23 23:44:38 +01:00
Petri Hämäläinen f3e90bd420 Translated using Weblate (Finnish)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/fi/
2025-12-23 23:44:37 +01:00
Ivan Smoliakov 4bf15bbffd Translated using Weblate (Russian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ru/
2025-12-23 23:44:37 +01:00
advplyr 04eb3bc437 Fix server crash on audible match #4931 2025-12-23 16:44:29 -06:00
advplyr 81e96df9c5 Version bump v2.32.0 2025-12-21 15:54:07 -06:00
advplyr 44aff23e1b Merge pull request #4921 from weblate/weblate-audiobookshelf-abs-web-client
Translations update from Hosted Weblate
2025-12-21 15:44:28 -06:00
lambolighting cc48d9f26d Translated using Weblate (Greek)
Currently translated at 26.9% (313 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/el/
2025-12-21 21:38:43 +00:00
Ahetek ac08e897ee Translated using Weblate (Polish)
Currently translated at 89.2% (1038 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/pl/
2025-12-21 21:38:43 +00:00
FiendFEARing 3c2eec8279 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/zh_Hans/
2025-12-21 21:38:42 +00:00
advplyr 7b37c98e88 Book tags genres dedupe (#4927)
* Update Audible provider dedupe genres/tags and return tags as array

* Update custom metadata provider to dedupe tags/genres and return tags as array
2025-12-21 15:38:34 -06:00
advplyr 088353ae26 Merge pull request #4649 from votex001/multi-select-item-fix
[fix] prevent duplicates in multi-selects
2025-12-21 14:58:04 -06:00
advplyr e003544edd Merge pull request #4766 from TN-SKYC/Authors-bug
Bug in matching author of a book when this author already exists in the db.
2025-12-21 14:49:37 -06:00
advplyr 076ece6fe7 Auto-formatting 2025-12-21 14:45:04 -06:00
advplyr 14f72ab7d4 Merge pull request #4740 from Yetangitu/fix_debian_user_exists
fix #1617 (useradd: user 'audiobookshelf' already exists)
2025-12-21 14:08:10 -06:00
advplyr ebcb122eb8 Merge pull request #4906 from sir-wilhelm/playlist-sorted
When adding items to playlist, sort the playlist sections alphabetically.
2025-12-21 14:01:08 -06:00
advplyr 626596b192 Merge pull request #4890 from weblate/weblate-audiobookshelf-abs-web-client
Translations update from Hosted Weblate
2025-12-14 16:35:16 -06:00
lambolighting 10a4777ddf Translated using Weblate (Greek)
Currently translated at 9.0% (105 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/el/
2025-12-14 23:00:22 +01:00
MODI NAVON 0ecbb1c3f4 Translated using Weblate (Hebrew)
Currently translated at 73.0% (850 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/he/
2025-12-12 23:24:22 +00:00
Lucas Jaksys dc2398a072 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/pt_BR/
2025-12-12 23:24:21 +00:00
lambolighting c1e21d31ee Translated using Weblate (Greek)
Currently translated at 1.1% (13 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/el/
2025-12-12 23:24:21 +00:00
Mario 70e6efc3d0 Translated using Weblate (German)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/de/
2025-12-12 23:24:20 +00:00
Alberto Coronado 092c504eb1 Translated using Weblate (Spanish)
Currently translated at 97.5% (1134 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/es/
2025-12-12 23:24:19 +00:00
A L f7d7c9a4f5 Translated using Weblate (Bulgarian)
Currently translated at 88.2% (1026 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/bg/
2025-12-12 23:24:19 +00:00
kfctatertot 8bdcabf973 Translated using Weblate (Spanish)
Currently translated at 96.8% (1126 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/es/
2025-12-12 23:24:18 +00:00
kfctatertot 646c861bcc Translated using Weblate (Arabic)
Currently translated at 95.9% (1116 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ar/
2025-12-12 23:24:17 +00:00
zard Kim ee60169995 Translated using Weblate (Korean)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ko/
2025-12-12 23:24:17 +00:00
advplyr afb4108c30 Added translation using Weblate (Greek) 2025-12-12 23:24:16 +00:00
Igor Dobrača 2e2d857ce0 Translated using Weblate (Croatian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/hr/
2025-12-12 23:24:15 +00:00
Alessandro Burzio ed5766b4ab Translated using Weblate (Italian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/it/
2025-12-12 23:24:14 +00:00
Petri Hämäläinen a33e87db99 Translated using Weblate (Finnish)
Currently translated at 97.6% (1136 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/fi/
2025-12-12 23:24:14 +00:00
Napitauki 5de942aefb Translated using Weblate (Finnish)
Currently translated at 97.6% (1136 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/fi/
2025-12-12 23:24:13 +00:00
thehijacker bcfe1e9647 Translated using Weblate (Slovenian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sl/
2025-12-12 23:24:12 +00:00
advplyr 503f4611b2 Update tooltip with plaintext prop 2025-12-12 17:24:01 -06:00
sir-wilhelm 648983708e Sort the playlist sections alphabetically. 2025-12-12 04:18:29 +00:00
advplyr 991d25f628 Version bump v2.31.0 2025-12-01 17:13:15 -06:00
advplyr d2a7c3c381 Merge pull request #4879 from weblate/weblate-audiobookshelf-abs-web-client
Translations update from Hosted Weblate
2025-12-01 17:09:02 -06:00
Netleak 219a9fc6d5 Translated using Weblate (Czech)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/cs/
2025-12-01 16:59:30 +00:00
advplyr ba2259d174 Merge pull request #4881 from mikiher/wrap-ensure-dir
Wrap ensureDir in try-catch blocks in manager classes
2025-12-01 10:59:21 -06:00
mikiher d7bfccdc4a BackupManager: Remove backup fallback logic 2025-12-01 18:54:43 +02:00
mikiher 5f1edcb609 Wrap ensureDir in try-catch blocks 2025-12-01 18:00:34 +02:00
advplyr 329e3c7179 Add Korean language option 2025-11-29 16:32:57 -06:00
advplyr 919ea32416 Merge pull request #4848 from weblate/weblate-audiobookshelf-abs-web-client
Translations update from Hosted Weblate
2025-11-29 16:27:45 -06:00
J. Lavoie 3b6419bc1b Translated using Weblate (French)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/fr/
2025-11-29 23:26:56 +01:00
J. Lavoie d4fdb47c7f Translated using Weblate (German)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/de/
2025-11-29 23:26:55 +01:00
Petri Hämäläinen cee9b9d8e3 Translated using Weblate (Finnish)
Currently translated at 97.5% (1134 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/fi/
2025-11-29 23:26:54 +01:00
advplyr 9441346b0a Added translation using Weblate (Icelandic) 2025-11-29 23:26:53 +01:00
Ivan Smoliakov 6b8464c270 Translated using Weblate (Russian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ru/
2025-11-29 23:26:52 +01:00
Artur d12f727603 Translated using Weblate (Polish)
Currently translated at 89.2% (1038 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/pl/
2025-11-29 23:26:51 +01:00
Renaldas Repečka 1552c250df Translated using Weblate (Lithuanian)
Currently translated at 59.8% (696 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/lt/
2025-11-29 23:26:50 +01:00
zard Kim 623c2fba12 Translated using Weblate (Korean)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ko/
2025-11-29 23:26:50 +01:00
Plazec be27908d44 Translated using Weblate (Czech)
Currently translated at 99.5% (1158 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/cs/
2025-11-29 23:26:48 +01:00
Grzegorz Orlowski 7a39d581a1 Translated using Weblate (Polish)
Currently translated at 88.9% (1035 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/pl/
2025-11-29 23:26:47 +01:00
Artur 53a416fd28 Translated using Weblate (Polish)
Currently translated at 88.9% (1035 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/pl/
2025-11-29 23:26:47 +01:00
B0rax 7393c03218 Translated using Weblate (German)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/de/
2025-11-29 23:26:46 +01:00
ugyes 594589da3d Translated using Weblate (Hungarian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/hu/
2025-11-29 23:26:45 +01:00
FiendFEARing 44d7deae99 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/zh_Hans/
2025-11-29 23:26:44 +01:00
Jan-Eric Myhrgren ff9e87c4d5 Translated using Weblate (Swedish)
Currently translated at 99.9% (1162 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sv/
2025-11-29 23:26:43 +01:00
Cèlia Garriga c2fd87d55c Translated using Weblate (Catalan)
Currently translated at 91.8% (1068 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ca/
2025-11-29 23:26:42 +01:00
Максим Горпиніч 27843c3f9b Translated using Weblate (Ukrainian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/uk/
2025-11-29 23:26:41 +01:00
Vito0912 0ec2ced011 Translated using Weblate (German)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/de/
2025-11-29 23:26:40 +01:00
ugyes 552ed43243 Translated using Weblate (Hungarian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/hu/
2025-11-29 23:26:39 +01:00
advplyr 0606738b38 Merge pull request #4873 from Vito0912/feat/fixUploadLookup
Fix Upload Lookup
2025-11-29 16:26:26 -06:00
Finn Dittmar a5d2c1bd64 Fix Upload Lookup 2025-11-29 11:02:42 +01:00
advplyr d8e272e091 Merge pull request #4870 from Vito0912/patch-1
Fix region parameter extraction in findChapters
2025-11-27 16:20:34 -06:00
Finn Dittmar 3e9ca51088 Fix region parameter extraction in findChapters 2025-11-27 21:40:29 +01:00
advplyr 8758c62ae2 Merge pull request #4702 from Vito0912/feat/uploadProgress
feat: Added progress indicator to upload
2025-11-24 17:08:03 -06:00
advplyr db9019a94f Merge pull request #4770 from jamerst/days-in-a-row-today-optional
Don't require listening today for 'Days in a row' stat
2025-11-20 16:59:17 -06:00
advplyr 39b8b9df4f Auto formatting 2025-11-20 16:58:43 -06:00
advplyr a36f097095 Merge pull request #4768 from weblate/weblate-audiobookshelf-abs-web-client
Translations update from Hosted Weblate
2025-11-19 08:06:42 -06:00
advplyr ae0ccb1b47 Added translation using Weblate (Korean) 2025-11-19 15:03:59 +01:00
Jan-Eric Myhrgren f178841e57 Translated using Weblate (Swedish)
Currently translated at 99.8% (1161 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sv/
2025-11-19 05:41:52 +01:00
Mikael Engström 568b154e8a Translated using Weblate (Swedish)
Currently translated at 99.8% (1161 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sv/
2025-11-17 21:51:27 +01:00
dapitch666 8c5678b573 Translated using Weblate (French)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/fr/
2025-11-17 21:51:19 +01:00
Jan Schoenfeld e51c7b2be1 Translated using Weblate (German)
Currently translated at 99.9% (1162 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/de/
2025-11-17 21:51:17 +01:00
Milo Ivir d460757df4 Translated using Weblate (Croatian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/hr/
2025-11-14 23:51:49 +00:00
thehijacker cd295c03ca Translated using Weblate (Slovenian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sl/
2025-11-12 10:53:50 +00:00
FiendFEARing 38dd1beff7 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/zh_Hans/
2025-11-12 10:53:37 +00:00
Максим Горпиніч 61b72aff9d Translated using Weblate (Ukrainian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/uk/
2025-11-12 10:53:35 +00:00
Lucas Jaksys 9eda4e36fa Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/pt_BR/
2025-11-12 10:53:14 +00:00
biuklija a05cb170a2 Translated using Weblate (Croatian)
Currently translated at 99.9% (1162 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/hr/
2025-11-12 10:52:18 +00:00
Dinu Bălan c75d976320 Translated using Weblate (Romanian)
Currently translated at 17.3% (202 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ro/
2025-11-10 23:37:16 +01:00
Petri Hämäläinen ab9b798bfa Translated using Weblate (Finnish)
Currently translated at 97.2% (1131 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/fi/
2025-11-10 23:37:16 +01:00
Charlie 40783c8644 Translated using Weblate (French)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/fr/
2025-11-10 23:37:16 +01:00
phewi a0137fcb42 Translated using Weblate (Finnish)
Currently translated at 95.5% (1111 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/fi/
2025-11-10 23:37:16 +01:00
Lucas Gonçalves Jaksys 9fdda6be62 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/pt_BR/
2025-11-10 23:37:16 +01:00
Lucas Gonçalves Jaksys b0c073dd7e Translated using Weblate (Hungarian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/hu/
2025-11-10 23:37:16 +01:00
Sami Tauseef b83e2836f6 Translated using Weblate (Bengali)
Currently translated at 92.6% (1078 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/bn/
2025-11-10 23:37:16 +01:00
Lucas Gonçalves Jaksys f91be18527 Translated using Weblate (Portuguese (Brazil))
Currently translated at 93.1% (1083 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/pt_BR/
2025-11-10 23:37:16 +01:00
dapitch666 c1f4e4120e Translated using Weblate (French)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/fr/
2025-11-10 23:37:16 +01:00
Petri Hämäläinen b42c7421b0 Translated using Weblate (Finnish)
Currently translated at 95.5% (1111 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/fi/
2025-11-10 23:37:16 +01:00
pryszczoskor 82f512d405 Translated using Weblate (Polish)
Currently translated at 88.3% (1027 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/pl/
2025-11-10 23:37:16 +01:00
Aleksandr Zakirov 01a833ea59 Translated using Weblate (Estonian)
Currently translated at 64.2% (747 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/et/
2025-11-10 23:37:16 +01:00
advplyr f1c39e8587 Merge pull request #4815 from mikiher/fix-4095
Update wording for library watcher settings and scan note
2025-11-10 16:37:10 -06:00
mikiher 5e68936c20 Update English strings for library watcher settings and scan notes #4095 2025-11-10 09:14:46 +02:00
advplyr a4c9b062c1 Merge pull request #4808 from Vito0912/feat/eac3
Support eac3 and ac3 in transcodes
2025-11-08 17:13:06 -06:00
advplyr 763d8810e3 Update Stream ac3/eac3 check 2025-11-08 17:08:43 -06:00
Finn Dittmar 3316505d1c Really makes sure nothing can break 2025-11-07 19:12:38 +01:00
Finn Dittmar 2cf6e8a5fe Support eac3 2025-11-07 19:02:32 +01:00
Tomasz N. 961d066bdd Wrong branch. 2025-10-31 15:39:12 +01:00
Tomasz N. 372c9a5322 Increasing the timeout for bookfinder - some metadata providers heavily throttle the requests, original 10s is not enough. 2025-10-31 15:36:47 +01:00
James Tattersall f77de1743e Don't require listening today for 'Days in a row' stat 2025-10-23 21:31:37 +01:00
Tomasz N. a5750deaaf The key change: Move the Database.bookAuthorModel.create() block outside the if (!author) check,
so it runs whether the author was just created OR already existed in the database.

This bug was visible when using "Match Books" for a library and the outcome was books had no author(s) assigned
despite the custom providers correctly providing those values.
2025-10-22 23:02:49 +02:00
advplyr 0c7b738b7c Merge pull request #4730 from weblate/weblate-audiobookshelf-abs-web-client
Translations update from Hosted Weblate
2025-10-21 17:26:49 -05:00
burghy86 c3c9e7731d Translated using Weblate (Italian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/it/
2025-10-22 00:24:25 +02:00
Petri Hämäläinen d3b5612fc0 Translated using Weblate (Finnish)
Currently translated at 95.3% (1109 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/fi/
2025-10-22 00:24:24 +02:00
Blubberland 96ef0129ed Translated using Weblate (German)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/de/
2025-10-22 00:24:23 +02:00
nlqog 85546b7dd7 Translated using Weblate (Portuguese (Brazil))
Currently translated at 76.6% (892 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/pt_BR/
2025-10-22 00:24:22 +02:00
pmangro d59714d804 Translated using Weblate (Portuguese (Brazil))
Currently translated at 74.2% (863 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/pt_BR/
2025-10-22 00:24:22 +02:00
Coxe 96693659bf Translated using Weblate (Danish)
Currently translated at 96.9% (1127 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/da/
2025-10-22 00:24:21 +02:00
pryszczoskor ee2d8d1f71 Translated using Weblate (Polish)
Currently translated at 88.2% (1026 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/pl/
2025-10-22 00:24:20 +02:00
Hezha f03b0915eb Translated using Weblate (Arabic)
Currently translated at 95.9% (1116 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ar/
2025-10-22 00:24:20 +02:00
advplyr a92ba564bd Merge pull request #4750 from mikiher/providers-api
Add metadata providers API and use them on web client
2025-10-21 17:24:11 -05:00
advplyr e684a8dc43 Update JSDocs & auto-formatting of PodcastFinder 2025-10-21 17:22:10 -05:00
mikiher 6db6b862e6 Upgrade codeql-actions to v3 2025-10-21 17:33:53 +03:00
mikiher 57c7b123f0 Fix codeQL error: Return json error object 2025-10-21 11:00:29 +03:00
mikiher fd593caafc SearchController: simplify query param validation logic 2025-10-21 09:38:35 +03:00
advplyr d0a3f74710 Merge pull request #4756 from Vito0912/tokenExpiry
Change token expiry
2025-10-20 17:19:54 -05:00
advplyr b1921e7034 Fix podcast failed to parse rss feed when feed is not using CData in content:encoded #4757 2025-10-19 17:25:18 -05:00
mikiher 538a5065a4 Update providers users to fetch providers on demand 2025-10-19 18:57:27 +03:00
mikiher 166e0442a0 Remove providers prefetch, refresh on custom provider add/remove 2025-10-19 11:47:17 +03:00
mikiher 816a47a4ba Remove custom providers from library fetch action 2025-10-19 11:40:40 +03:00
mikiher 141211590f Merge provider actions and mutations, add loaded state 2025-10-19 11:39:10 +03:00
mikiher b01e7570d3 Remove custom providers from library filterdata request 2025-10-19 10:54:26 +03:00
mikiher 0a8662d198 Merge providers API into a single endpoint 2025-10-19 10:53:27 +03:00
Finn Dittmar 0a4de61eff Chnage Auth Expiry 2025-10-19 09:22:12 +02:00
mikiher 0a82d6a41b CoverSearchManager: Fix broken podcast cover search 2025-10-17 08:11:03 +03:00
mikiher 3f6162f53c CodeQL fix: limit parameter sizes 2025-10-15 18:54:29 +03:00
mikiher 888190a6be Fix codeQL failures 2025-10-15 18:28:15 +03:00
mikiher ce4ff4f894 Client: Use new server providers API 2025-10-15 09:52:15 +03:00
mikiher 1da3ab7fdc ApiRouter: New provider API routes 2025-10-14 18:10:12 +03:00
mikiher 4f30cbf2f6 SearchController: New providers API, query param validation 2025-10-14 18:09:32 +03:00
advplyr a87ea32715 Fix admin user unable to close sessions of other users #4746 2025-10-13 09:50:01 -05:00
advplyr feed827223 Update settings update endpoint to validate allowedOrigins is array 2025-10-10 18:00:37 -05:00
Frank de Lange 797dba2448 fix #1617 (useradd: user 'audiobookshelf' already exists)
This change fixes the problem of failing upgrades on dpkg-based systems
by reworking the check for whether the `audiobookshelf` user/group already
exists.
2025-10-10 22:30:38 +02:00
advplyr f0acbb2e81 Merge pull request #4737 from Yetangitu/explicit_oidc_autolaunch
Explicitly launch OpenID Connect authentication with ?autoLaunch=1
2025-10-09 17:08:51 -05:00
Frank de Lange fc06aa2c78 Explicitly launch OpenID Connect authentication with ?autoLaunch=1
This change extends OIDC authentication by enabling explicit redirection
to the OAuth provider when navigating to the login page with the manual
override parameter (/login?autoLaunch=1).

Use case: directly launch audiobookshelf from within e.g. Nextcloud using the
external sites app (use something like https://abs.example.org/login?autoLaunch=1
as URL) while keeping the possibility to launch audiobookshelf using its built-in
authentication mechanism. Assuming the username or mail address used in Nextcloud
and audiobookshelf are identical the user will be logged in to his or her account
no matter which method is used.
2025-10-09 16:02:02 +02:00
Finn Dittmar 4224f44259 Remove duplicate (and also wrong byte conversion) 2025-10-09 08:49:13 +02:00
advplyr 2592467d09 Fix: Always re-load libraries when changing users #4694 2025-10-08 15:32:37 -05:00
advplyr 37beb7b37c Disable chapter editor chapter play button when time is invalid #4691 2025-10-08 15:03:33 -05:00
advplyr cafd92e206 Fix item edit modal show next/prev arrows when opening from Files or Match context menu item #4718 2025-10-08 14:52:14 -05:00
advplyr 3e876e3383 Add Turkish to the language option 2025-10-08 14:24:50 -05:00
advplyr 29752798f3 Version bump v2.30.0 2025-10-08 10:34:34 -05:00
advplyr 8c86ca4ea5 Merge pull request #4729 from mikiher/build-win-no-compress
Add a script to build an uncompressed windows executable
2025-10-08 10:08:21 -05:00
mikiher 00c62fa494 Add a script to build an uncompressed windows executable 2025-10-08 17:42:00 +03:00
advplyr 6c7f3c7e77 Merge pull request #4695 from weblate/weblate-audiobookshelf-abs-web-client
Translations update from Hosted Weblate
2025-10-07 16:25:14 -05:00
Jan-Eric Myhrgren aec8acbdd7 Translated using Weblate (Swedish)
Currently translated at 97.2% (1131 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sv/
2025-10-07 12:02:09 +02:00
Юра Климович 6e19ad7777 Translated using Weblate (Russian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ru/
2025-10-07 12:02:08 +02:00
Grzegorz Orlowski 3aa95fec11 Translated using Weblate (Polish)
Currently translated at 88.2% (1026 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/pl/
2025-10-07 12:02:05 +02:00
Ahetek 37dd46d31f Translated using Weblate (Polish)
Currently translated at 88.2% (1026 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/pl/
2025-10-07 12:02:03 +02:00
Petter Schaug-Pettersen 54a996634e Translated using Weblate (Norwegian Bokmål)
Currently translated at 90.4% (1052 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/nb_NO/
2025-10-07 12:02:02 +02:00
Oğuz Ersen 54a5e368c2 Translated using Weblate (Turkish)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/tr/
2025-10-05 17:02:05 +02:00
FiendFEARing 2d313851d2 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/zh_Hans/
2025-10-05 17:02:04 +02:00
Максим Горпиніч eb00b19457 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/uk/
2025-10-05 17:02:03 +02:00
Kabika82 bbae9acc2d Translated using Weblate (Hungarian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/hu/
2025-10-05 17:02:02 +02:00
Milo Ivir a4e8f01f0e Translated using Weblate (Croatian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/hr/
2025-10-05 17:02:01 +02:00
SmileFate 6bdf402da8 Translated using Weblate (Turkish)
Currently translated at 100.0% (1161 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/tr/
2025-10-03 21:43:22 +00:00
DR 80b0e3546e Translated using Weblate (Hebrew)
Currently translated at 72.9% (847 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/he/
2025-10-03 21:43:21 +00:00
B0rax 161f3cb177 Translated using Weblate (German)
Currently translated at 100.0% (1161 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/de/
2025-10-03 21:43:21 +00:00
Jan 4a4d4a8f17 Translated using Weblate (German)
Currently translated at 100.0% (1161 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/de/
2025-10-03 21:43:20 +00:00
Petri Hämäläinen b21046027c Translated using Weblate (Finnish)
Currently translated at 95.5% (1109 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/fi/
2025-10-03 21:43:19 +00:00
max grakov 3a163e1746 Translated using Weblate (Russian)
Currently translated at 100.0% (1161 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ru/
2025-10-03 21:43:18 +00:00
Amirhossein Ghorbanmehr 3c4e80f1c1 Translated using Weblate (Persian)
Currently translated at 2.2% (26 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/fa/
2025-10-03 21:43:18 +00:00
SmileFate 2f3036faba Translated using Weblate (Turkish)
Currently translated at 100.0% (1161 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/tr/
2025-10-03 21:43:17 +00:00
advplyr 3934461c46 Added translation using Weblate (Persian) 2025-10-03 21:43:16 +00:00
advplyr 123351e08a Merge pull request #4716 from mikiher/async-cover-search
Async Cover Search
2025-10-03 16:43:05 -05:00
advplyr 1280ddfe74 ui/ux disable inputs while cover search in progress, add padding on empty state texts 2025-10-03 16:39:36 -05:00
mikiher 7e89b97a6d Tidy up cover search console logging and error toasts 2025-10-03 09:08:17 +03:00
mikiher 20de2ea388 Add "Best" option to book cover search 2025-10-03 08:23:53 +03:00
mikiher dbb5ee79ac Revert removal of audiobookcovers provider 2025-10-03 08:20:56 +03:00
mikiher c6dabd2620 Shorten timeout and error message for remaining providers 2025-10-02 22:23:12 +03:00
mikiher 26f949b9ba Remove audiobookcovers from provider list 2025-10-02 22:14:48 +03:00
mikiher 7630dbdcb7 Replace cover search with streaming version 2025-10-02 13:30:03 +03:00
mikiher a164c17d38 Reduce provider timout to 10 secs, Shorten error message 2025-10-02 13:26:05 +03:00
advplyr 03da194953 Update for nextjs client, pass all remaining requests through to nextjs 2025-09-28 09:41:15 -05:00
Vito0912 9ce6de3100 Added progress to upload 2025-09-27 17:00:57 +02:00
advplyr e040396b20 Merge pull request #4656 from weblate/weblate-audiobookshelf-abs-web-client
Translations update from Hosted Weblate
2025-09-22 09:41:08 -05:00
Phil Jope bcbec67fec Translated using Weblate (German)
Currently translated at 100.0% (1161 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/de/
2025-09-20 23:02:02 +02:00
Vito0912 1543021685 Translated using Weblate (German)
Currently translated at 100.0% (1161 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/de/
2025-09-20 23:02:01 +02:00
Salmanegr 577e6aaec9 Translated using Weblate (Arabic)
Currently translated at 95.4% (1108 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ar/
2025-09-19 08:02:02 +00:00
Milo Ivir 77579acfd4 Translated using Weblate (Croatian)
Currently translated at 100.0% (1161 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/hr/
2025-09-10 22:24:06 +00:00
Yuta Imada 9ca98ca750 Translated using Weblate (Japanese)
Currently translated at 15.5% (180 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ja/
2025-09-10 22:24:05 +00:00
Satanowski feb225d3a6 Translated using Weblate (Polish)
Currently translated at 82.3% (956 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/pl/
2025-09-10 22:24:05 +00:00
Yuta Imada e501aa4f1e Translated using Weblate (Japanese)
Currently translated at 15.4% (179 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ja/
2025-09-10 22:24:04 +00:00
peter cerny 104f6e6c58 Translated using Weblate (Slovak)
Currently translated at 99.9% (1160 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sk/
2025-09-10 22:24:03 +00:00
jhonthan 552d8ae3b8 Translated using Weblate (Portuguese (Brazil))
Currently translated at 67.7% (787 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/pt_BR/
2025-09-10 22:24:03 +00:00
advplyr a41e9bae5d Merge pull request #4664 from advplyr/episode_download_fallback
Fix issue with episode downloads without streams
2025-09-10 17:23:53 -05:00
advplyr a456865ec0 Fix issue with episode downloads without streams, fallback to regular dl on ffprobe fail 2025-09-10 17:10:00 -05:00
advplyr 85d5531bc1 Update chapter editor remove redirect on save or delete all #4650 2025-09-07 17:50:59 -05:00
advplyr 4b840f9c97 Merge pull request #4627 from weblate/weblate-audiobookshelf-abs-web-client
Translations update from Hosted Weblate
2025-09-05 17:24:15 -05:00
peter cerny b9510a69fe Translated using Weblate (Slovak)
Currently translated at 97.7% (1135 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sk/
2025-09-06 00:22:25 +02:00
Losicek d737a66af2 Translated using Weblate (Czech)
Currently translated at 100.0% (1161 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/cs/
2025-09-06 00:22:24 +02:00
Plazec 576d18d8d6 Translated using Weblate (Czech)
Currently translated at 100.0% (1161 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/cs/
2025-09-06 00:22:23 +02:00
petr-prikryl d238b02bd2 Translated using Weblate (Czech)
Currently translated at 100.0% (1161 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/cs/
2025-09-06 00:22:23 +02:00
kuci-JK c6cb13ed39 Translated using Weblate (Czech)
Currently translated at 100.0% (1161 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/cs/
2025-09-06 00:22:22 +02:00
Jon Erling Hustadnes 44c5dce8aa Translated using Weblate (Norwegian Bokmål)
Currently translated at 90.5% (1051 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/nb_NO/
2025-09-06 00:22:21 +02:00
Darius M b726bee4e5 Translated using Weblate (Romanian)
Currently translated at 17.0% (198 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ro/
2025-09-06 00:22:20 +02:00
Hnatiucb b07e449043 Translated using Weblate (Romanian)
Currently translated at 17.0% (198 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ro/
2025-09-06 00:22:19 +02:00
icutehunter 9273e61f1e Translated using Weblate (Turkish)
Currently translated at 28.5% (332 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/tr/
2025-09-06 00:22:18 +02:00
ugyes 1b4a7acf13 Translated using Weblate (Hungarian)
Currently translated at 100.0% (1161 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/hu/
2025-09-06 00:22:18 +02:00
kuci-JK 68c1395bdf Translated using Weblate (Czech)
Currently translated at 98.1% (1140 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/cs/
2025-09-06 00:22:17 +02:00
Hnatiucb a007a9ec98 Translated using Weblate (Romanian)
Currently translated at 3.7% (44 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ro/
2025-09-06 00:22:16 +02:00
tngch 8b33b5e383 Translated using Weblate (Japanese)
Currently translated at 14.2% (166 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ja/
2025-09-06 00:22:15 +02:00
Jan-Eric Myhrgren c81b762d52 Translated using Weblate (Swedish)
Currently translated at 97.2% (1129 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sv/
2025-09-06 00:22:15 +02:00
Hnatiucb c53a5c5a0b Translated using Weblate (Romanian)
Currently translated at 3.3% (39 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ro/
2025-09-06 00:22:14 +02:00
thehijacker 83af75a582 Translated using Weblate (Slovenian)
Currently translated at 100.0% (1161 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sl/
2025-09-06 00:22:13 +02:00
Jan-Eric Myhrgren 60389a3bf3 Translated using Weblate (Swedish)
Currently translated at 97.2% (1129 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sv/
2025-09-06 00:22:13 +02:00
biuklija 20cceb3a8f Translated using Weblate (Croatian)
Currently translated at 100.0% (1161 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/hr/
2025-09-06 00:22:11 +02:00
lolly76 7562fb2c21 Translated using Weblate (French)
Currently translated at 100.0% (1161 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/fr/
2025-09-06 00:22:11 +02:00
Matej Krajčovič c7647aafd7 Translated using Weblate (Slovak)
Currently translated at 96.2% (1117 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sk/
2025-09-06 00:22:10 +02:00
FiendFEARing 4a73247e5c Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1161 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/zh_Hans/
2025-09-06 00:22:09 +02:00
Максим Горпиніч 326086c197 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (1161 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/uk/
2025-09-06 00:22:08 +02:00
Jan-Eric Myhrgren 5ff5245476 Translated using Weblate (Swedish)
Currently translated at 97.2% (1129 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sv/
2025-09-06 00:22:08 +02:00
advplyr 856cf180a5 Fix chapter editor overflow, set custom wrap breakpoint #4652 2025-09-05 17:21:55 -05:00
votex001 fbe9971a8b [fix] prevent duplicates in multi-selects 2025-09-03 18:19:52 +03:00
advplyr 6ea70608a1 Merge pull request #4636 from nichwall/multiselect_duplicate_entries
Fix: MultiSelect causes web client to become unresponsive if duplicate keys exist
2025-09-02 18:37:07 -04:00
advplyr ba7160c305 Add index to removeItem on multiselect keydown 2025-09-02 17:31:48 -05:00
advplyr 7d048b7a50 Merge pull request #4635 from Vito0912/feat/OIDCfix
Fix Invalid callback URL - must be same-origin for NPM users
2025-09-02 18:18:52 -04:00
Nicholas Wallace afab429c75 Fix: ensure all keys are unique in MultiSelect 2025-08-30 10:01:25 -07:00
Vito0912 50e2fe7fd2 Fix http/https error 2025-08-30 17:47:21 +02:00
advplyr c7c21cc137 Version bump v2.29.0 2025-08-25 17:10:29 -05:00
advplyr 7e4c7a7e3b Merge pull request #4618 from weblate/weblate-audiobookshelf-abs-web-client
Translations update from Hosted Weblate
2025-08-25 17:50:57 -04:00
FiendFEARing 40babc9650 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1161 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/zh_Hans/
2025-08-25 21:50:34 +00:00
Максим Горпиніч 7a94f014ea Translated using Weblate (Ukrainian)
Currently translated at 100.0% (1161 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/uk/
2025-08-25 21:50:33 +00:00
Jan-Eric Myhrgren 32adb1bafd Translated using Weblate (Swedish)
Currently translated at 97.5% (1132 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sv/
2025-08-25 21:50:32 +00:00
Yurt Page f9a6239049 Translated using Weblate (Russian)
Currently translated at 100.0% (1161 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ru/
2025-08-25 21:50:32 +00:00
Mathias Franco 8dee1ec942 Translated using Weblate (Dutch)
Currently translated at 100.0% (1161 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/nl/
2025-08-25 21:50:31 +00:00
laxandrea 58e43cc6a7 Translated using Weblate (Italian)
Currently translated at 99.6% (1157 of 1161 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/it/
2025-08-25 21:50:30 +00:00
Jan-Eric Myhrgren b8999fbc37 Translated using Weblate (Swedish)
Currently translated at 97.3% (1126 of 1157 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sv/
2025-08-25 21:50:29 +00:00
advplyr 0dda4b6b27 Added translation using Weblate (Basque) 2025-08-25 21:50:29 +00:00
Kabika82 817f2f6915 Translated using Weblate (Hungarian)
Currently translated at 100.0% (1157 of 1157 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/hu/
2025-08-25 21:50:28 +00:00
idojius86 77fc6bba1a Translated using Weblate (Spanish)
Currently translated at 97.1% (1124 of 1157 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/es/
2025-08-25 21:50:28 +00:00
Jan-Eric Myhrgren c66d652a53 Translated using Weblate (Swedish)
Currently translated at 97.3% (1126 of 1157 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sv/
2025-08-25 21:50:27 +00:00
thehijacker 86bddba5c3 Translated using Weblate (Slovenian)
Currently translated at 100.0% (1157 of 1157 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sl/
2025-08-25 21:50:26 +00:00
Jan-Eric Myhrgren 7779fd2972 Translated using Weblate (Swedish)
Currently translated at 96.8% (1121 of 1157 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sv/
2025-08-25 21:50:26 +00:00
Yurt Page 05a4577792 Translated using Weblate (Russian)
Currently translated at 100.0% (1157 of 1157 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ru/
2025-08-25 21:50:25 +00:00
laxandrea 56dc042282 Translated using Weblate (Italian)
Currently translated at 99.3% (1149 of 1157 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/it/
2025-08-25 21:50:24 +00:00
advplyr 95973243a6 Update book library progress sort labels as per discord vote 2025-08-25 16:50:10 -05:00
Johnandadvplyr 18ad23d016 Issue 4540 New SortBy Options: Started Date & Finished Date (#4575)
---------

Co-authored-by: advplyr <advplyr@protonmail.com>
2025-08-24 16:54:38 -05:00
advplyr e258f122f1 Update weblate readme widget to use vertical bar chart 2025-08-24 08:41:31 -05:00
advplyr 18200a8f01 Merge pull request #4533 from sir-wilhelm/wmic_replacement
Use PowerShell to get windows drive paths.
2025-08-23 17:55:50 -04:00
advplyr 9c47f404c9 Fix current author not showing in podcast match #4617 2025-08-23 16:55:32 -05:00
advplyr 2f6de71a3a Fix match tab local storage book provider being updated by podcast matching #4615 2025-08-22 08:35:11 -05:00
advplyr deb121c523 Fix podcast itunesId not set on create or update from match #4614 2025-08-22 08:20:49 -05:00
advplyr 320e4dfb47 Merge pull request #4586 from weblate/weblate-audiobookshelf-abs-web-client
Translations update from Hosted Weblate
2025-08-20 18:47:09 -04:00
FiendFEARing 6194c48549 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1157 of 1157 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/zh_Hans/
2025-08-20 22:45:34 +00:00
Максим Горпиніч 6aa9ecaaba Translated using Weblate (Ukrainian)
Currently translated at 100.0% (1157 of 1157 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/uk/
2025-08-20 22:45:33 +00:00
Jan-Eric Myhrgren b3d020b89f Translated using Weblate (Swedish)
Currently translated at 96.8% (1121 of 1157 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sv/
2025-08-20 22:45:33 +00:00
owlcollector e196a6e5ca Translated using Weblate (Japanese)
Currently translated at 9.7% (113 of 1156 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ja/
2025-08-20 22:45:32 +00:00
Jan-Eric Myhrgren 73cf22b499 Translated using Weblate (Swedish)
Currently translated at 96.7% (1118 of 1156 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sv/
2025-08-20 22:45:32 +00:00
ugyes ac7464ce7e Translated using Weblate (Hungarian)
Currently translated at 99.8% (1154 of 1156 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/hu/
2025-08-20 22:45:31 +00:00
B0rax 84e742f2a5 Translated using Weblate (German)
Currently translated at 100.0% (1156 of 1156 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/de/
2025-08-20 22:45:30 +00:00
Daniel Schosser a1e882cbf1 Translated using Weblate (German)
Currently translated at 100.0% (1156 of 1156 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/de/
2025-08-20 22:45:29 +00:00
Zhelyan Radoev 09121acbd5 Translated using Weblate (Bulgarian)
Currently translated at 87.3% (1010 of 1156 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/bg/
2025-08-20 22:45:28 +00:00
owlcollector 5b9df84ba3 Translated using Weblate (Japanese)
Currently translated at 8.5% (99 of 1156 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ja/
2025-08-20 22:45:28 +00:00
Zhelyan Radoev 266db491aa Translated using Weblate (Bulgarian)
Currently translated at 83.9% (971 of 1156 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/bg/
2025-08-20 22:45:27 +00:00
FiendFEARing c7a317a87b Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1156 of 1156 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/zh_Hans/
2025-08-20 22:45:26 +00:00
Максим Горпиніч b027f3bda1 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (1156 of 1156 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/uk/
2025-08-20 22:45:26 +00:00
vanapro1 cea991b82f Translated using Weblate (Russian)
Currently translated at 100.0% (1156 of 1156 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ru/
2025-08-20 22:45:25 +00:00
biuklija 7e2b51e6d2 Translated using Weblate (Croatian)
Currently translated at 100.0% (1156 of 1156 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/hr/
2025-08-20 22:45:24 +00:00
Hang Pham 8f310b6bf0 Translated using Weblate (Vietnamese)
Currently translated at 62.2% (708 of 1138 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/vi/
2025-08-20 22:45:24 +00:00
Sneaky b2a5fb46f1 Translated using Weblate (Swedish)
Currently translated at 96.6% (1100 of 1138 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sv/
2025-08-20 22:45:23 +00:00
Jan-Eric Myhrgren 6d7639853b Translated using Weblate (Swedish)
Currently translated at 96.6% (1100 of 1138 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sv/
2025-08-20 22:45:22 +00:00
ugyes 3a16acbba4 Translated using Weblate (Hungarian)
Currently translated at 99.8% (1136 of 1138 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/hu/
2025-08-20 22:45:22 +00:00
Troj@ 027e1efaca Translated using Weblate (Belarusian)
Currently translated at 66.5% (757 of 1138 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/be/
2025-08-20 22:45:21 +00:00
Ivan Smoliakov d1fabba86b Translated using Weblate (Russian)
Currently translated at 100.0% (1138 of 1138 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ru/
2025-08-20 22:45:20 +00:00
Mathias Franco b290a4ada3 Translated using Weblate (Dutch)
Currently translated at 100.0% (1138 of 1138 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/nl/
2025-08-20 22:45:19 +00:00
Paolo Ricci bb477c617e Translated using Weblate (Italian)
Currently translated at 99.7% (1135 of 1138 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/it/
2025-08-20 22:45:19 +00:00
Michael Förster 9238c38842 Translated using Weblate (German)
Currently translated at 100.0% (1138 of 1138 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/de/
2025-08-20 22:45:18 +00:00
Daniel Schosser d268516fcb Translated using Weblate (German)
Currently translated at 100.0% (1138 of 1138 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/de/
2025-08-20 22:45:17 +00:00
Vito0912 d353cff1ae Translated using Weblate (German)
Currently translated at 100.0% (1138 of 1138 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/de/
2025-08-20 22:45:17 +00:00
kuci-JK 604f17f60b Translated using Weblate (Czech)
Currently translated at 98.6% (1123 of 1138 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/cs/
2025-08-20 22:45:16 +00:00
advplyr 3911a7273b Merge pull request #4595 from renesat/fix/listening-ipv6-url
Fix listening url log with ipv6 host
2025-08-20 18:45:04 -04:00
advplyr 138bb563b8 Update ipv6 server listening log 2025-08-20 17:42:22 -05:00
advplyr 3801ef062a Merge pull request #4596 from renesat/fix/redirect-url
Fix freeze on some audio sources
2025-08-19 18:11:13 -04:00
advplyr e4b9ac5446 Add episode updated translation for podcast match #4606 2025-08-19 16:52:50 -05:00
advplyr 9987d219f8 Remove success toast on podcast episodes removed #4606 2025-08-19 16:50:43 -05:00
advplyr dc7045c562 Merge pull request #4608 from laxandrea/remove-token-from-hls-url
Remove token from hls url
2025-08-19 17:29:10 -04:00
laxandrea 2cc6e56bd1 remove token from hls url
- following PR #4263
2025-08-19 15:29:49 +02:00
advplyr a89a24e48e Merge pull request #4598 from advplyr/episode_meta_tagging
Update podcast episode downloads to always attempt embedding meta tags
2025-08-17 10:20:54 -04:00
advplyr a968aca304 Update podcast episode downloads to always attempt embedding meta tags regardless of format 2025-08-17 09:05:29 -05:00
renesat 8d1f460640 Fix freeze on some audio sources 2025-08-16 18:56:23 +02:00
renesat 553ffd1934 Fix listening url log with ipv6 host 2025-08-16 18:24:31 +02:00
advplyr fd4932cdbb Add additional debug logs for OIDC login 2025-08-15 17:23:20 -05:00
advplyr dcaca43817 Merge pull request #4384 from josh-vin/feat/ChaptersEnhancments
Enhancement: Improves chapter editing and adds bulk import
2025-08-14 17:38:56 -04:00
advplyr 0eed4e82f9 Fix bulk add chapter icon button tooltip 2025-08-14 16:35:28 -05:00
advplyr 2ed2328401 Remove negative chapter end check & tooltip 2025-08-14 16:18:33 -05:00
advplyr 8b260c8bc6 Update bulk chapter modal styles, decreased text and button sizes 2025-08-14 16:16:34 -05:00
advplyr 7dcb9b98a0 Chapter lookup modal add back button to clear lookup results 2025-08-14 16:03:32 -05:00
advplyr 311ac7104e Merge pull request #4590 from advplyr/fix_authorize_race_condition
Fix authorize race condition by not updating the user on token refresh
2025-08-13 09:36:17 -04:00
advplyr 2c45b28d48 Fix authorize race condition by not updating the user on token refresh #4567 2025-08-13 08:31:01 -05:00
advplyr b53613f82c Merge pull request #4552 from Toby222/master
Replace some SVG icons with material-symbols
2025-08-12 18:55:50 -04:00
advplyr 751371abb8 Update ReadIcon svg with material-symbols 2025-08-12 17:46:01 -05:00
advplyr 6365c02875 Update explicit material symbols icon to fill 2025-08-12 17:40:48 -05:00
advplyr fb3834156b Version bump v2.28.0 2025-08-10 17:42:32 -05:00
advplyr c03f3f722d Merge pull request #4559 from weblate/weblate-audiobookshelf-abs-web-client
Translations update from Hosted Weblate
2025-08-10 18:31:40 -04:00
FiendFEARing a06f48ca29 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1138 of 1138 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/zh_Hans/
2025-08-10 22:26:37 +00:00
NickSkier 9d79552dda Translated using Weblate (Russian)
Currently translated at 100.0% (1138 of 1138 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ru/
2025-08-10 22:26:36 +00:00
Laurin Sorgend ed98614b6f Translated using Weblate (German)
Currently translated at 99.9% (1137 of 1138 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/de/
2025-08-10 22:26:36 +00:00
owlcollector 09dd2cc79c Translated using Weblate (Japanese)
Currently translated at 6.0% (69 of 1138 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ja/
2025-08-10 22:26:35 +00:00
weblate.user.1274 e87237048a Translated using Weblate (Norwegian Bokmål)
Currently translated at 92.1% (1049 of 1138 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/nb_NO/
2025-08-10 22:26:35 +00:00
Kent Henriksen d71968fd80 Translated using Weblate (Norwegian Bokmål)
Currently translated at 92.1% (1049 of 1138 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/nb_NO/
2025-08-10 22:26:34 +00:00
Thomas f83c605ae1 Translated using Weblate (French)
Currently translated at 99.1% (1128 of 1138 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/fr/
2025-08-10 22:26:34 +00:00
J. Lavoie 4325f470dd Translated using Weblate (German)
Currently translated at 99.8% (1136 of 1138 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/de/
2025-08-10 22:26:33 +00:00
numerfolt 800ecf8e82 Translated using Weblate (German)
Currently translated at 99.8% (1136 of 1138 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/de/
2025-08-10 22:26:32 +00:00
Vito0912 5cb143d50b Translated using Weblate (German)
Currently translated at 99.8% (1136 of 1138 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/de/
2025-08-10 22:26:32 +00:00
Troj@ 798c73c66c Translated using Weblate (Belarusian)
Currently translated at 64.6% (736 of 1138 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/be/
2025-08-10 22:26:31 +00:00
Максим Горпиніч 0fa7c46274 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (1138 of 1138 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/uk/
2025-08-10 22:26:31 +00:00
Kent Henriksen c2d420ec70 Translated using Weblate (Norwegian Bokmål)
Currently translated at 91.0% (1036 of 1138 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/nb_NO/
2025-08-10 22:26:30 +00:00
biuklija 152daf7bf3 Translated using Weblate (Croatian)
Currently translated at 100.0% (1138 of 1138 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/hr/
2025-08-10 22:26:29 +00:00
Ashish Wadekar 8d99249e50 Translated using Weblate (Hindi)
Currently translated at 8.7% (100 of 1138 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/hi/
2025-08-10 22:26:29 +00:00
Camille de Lune c6724ba353 Translated using Weblate (French)
Currently translated at 99.1% (1128 of 1138 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/fr/
2025-08-10 22:26:28 +00:00
Aleksandr Zakirov a519d44666 Translated using Weblate (Estonian)
Currently translated at 65.4% (745 of 1138 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/et/
2025-08-10 22:26:27 +00:00
Grzegorz Orlowski 7e8bf977cc Translated using Weblate (Polish)
Currently translated at 82.9% (942 of 1135 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/pl/
2025-08-10 22:26:27 +00:00
advplyr 4018be6330 Fix oidc auto-register not cleaning up new user on errors #4563 2025-08-10 17:26:15 -05:00
advplyr 99a3867ce9 Update callback url check
Co-authored-by: Denis Arnst <git@sapd.eu>
2025-08-10 17:08:25 -05:00
advplyr 2116f60133 Merge pull request #4565 from advplyr/redirect_transcode_requests
Fix server crash when transcode requests are made to the direct play endpoint
2025-08-07 18:31:45 -04:00
advplyr 794f0ef42a Fix server crash when transcode requests are made to the direct play endpoint #4555 2025-08-07 17:21:05 -05:00
Josh Vincent 3e423839a1 Fixes UI for Bulk Chapter adder, and changes logic around locking 2025-08-04 18:33:06 -06:00
Josh Vincent 2773c8c4a9 Merge remote-tracking branch 'josh-vin/master' into feat/ChaptersEnhancments 2025-08-04 18:32:28 -06:00
Tobias Berger 5ef632a7eb Replace some SVG icons with material-symbols 2025-08-01 09:20:34 +02:00
Josh Vincent 77d7a50b99 Merge remote-tracking branch 'josh-vin/master' into feat/ChaptersEnhancments 2025-07-30 16:51:12 -06:00
sir-wilhelm cae1560344 Use PowerShell to get windows drive paths.
wmic has been deprecated on newer versions of Windows 11 and is not installed.

resolves #4531
2025-07-25 12:34:29 -05:00
Josh Vincent 9da0be6d36 Allow clicking on elapsedTime to adjust chapter start 2025-06-08 13:18:41 -06:00
Josh Vincent c41bdb951c Moves the lock button and fixes padding on bulk add feature.
Moves the lock button the right of the Title text box.

Enhances the bulk chapter add feature by preserving zero-padding in chapter titles and prevents editing of locked chapters. Also allows Enter to be pressed in the Add Multiple Chapters modal.

Adds a warning toast when attempting to modify locked chapters.

Fixes sizing of boxes on smaller windows
2025-06-07 14:48:05 -06:00
Josh Vincent 54815ea9c7 Add a second to bulk chapters so its valid
This will enable users to go in and fix the chapter timing later but still save easily with the bulk import.
2025-06-06 13:25:20 -06:00
Josh Vincent 679ffed0ea Alphabetizes strings 2025-06-06 11:50:44 -06:00
Josh Vincent 09397cf3de Improves chapter editing and adds bulk import
Adds chapter locking functionality, allowing users to lock individual chapters or all chapters at once to prevent accidental edits.

Implements time increment buttons to precisely adjust chapter start times.

Introduces bulk chapter import functionality, allowing users to quickly add multiple chapters using a detected numbering pattern.

Adds elapsed time display during chapter playback for better user feedback.

Updates UI tooltips and icons for improved clarity and user experience.
2025-06-06 11:22:38 -06:00
228 changed files with 15672 additions and 3484 deletions

No files matched your search

+3 -3
View File
@@ -47,7 +47,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
@@ -60,7 +60,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v2
uses: github/codeql-action/autobuild@v3
# ℹ️ Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
@@ -73,6 +73,6 @@ jobs:
# ./location_of_script_within_repo/buildscript.sh
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
uses: github/codeql-action/analyze@v3
with:
category: '/language:${{matrix.language}}'
+1 -1
View File
@@ -34,7 +34,7 @@ jobs:
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20
node-version: 24
cache: 'npm'
- name: Install dependencies
+2
View File
@@ -19,6 +19,8 @@ on:
- server/**
- index.js
- package.json
- tsconfig.server.json
- Dockerfile
jobs:
build:
+1 -1
View File
@@ -20,7 +20,7 @@ jobs:
- name: Set up node
uses: actions/setup-node@v4
with:
node-version: 20
node-version: 24
cache: 'npm'
# The only argument is the `directory`, which is where the i18n files are
+6 -5
View File
@@ -12,6 +12,7 @@ on:
- test/**
- index.js
- package.json
- tsconfig.server.json
jobs:
build:
@@ -23,10 +24,10 @@ jobs:
- name: setup node
uses: actions/setup-node@v4
with:
node-version: 20
node-version: 24
cache: 'npm'
- name: install pkg (using yao-pkg fork for targeting node20)
- name: install pkg (using yao-pkg fork for targeting node24)
run: npm install -g @yao-pkg/pkg
- name: get client dependencies
@@ -37,11 +38,11 @@ jobs:
working-directory: client
run: npm run generate
- name: get server dependencies
run: npm ci --only=production
- name: get server dependencies and compile server
run: npm ci && npm run build:server && npm prune --omit=dev
- name: build binary
run: pkg -t node20-linux-x64 -o audiobookshelf .
run: pkg --config package.json -t node24-linux-x64 -o audiobookshelf dist-server/index.js
- name: run audiobookshelf
run: |
+1 -1
View File
@@ -23,7 +23,7 @@ jobs:
- name: Set up node
uses: actions/setup-node@v4
with:
node-version: 20
node-version: 24
cache: 'npm'
# Install Redocly CLI
+25
View File
@@ -0,0 +1,25 @@
name: Prepare translation credits
on:
push:
branches:
- master
workflow_dispatch:
jobs:
release-notes:
if: github.event_name == 'workflow_dispatch' || contains(github.event.head_commit.message, 'weblate')
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- id: translator-credits
uses: audiobookshelf/get-translator-credits@v1.1.0
- name: Show translator credits
run: |
printf '%s\n' "${{ steps.translator-credits.outputs.credits }}"
+4 -1
View File
@@ -28,11 +28,14 @@ jobs:
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20
node-version: 24
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Run lint
run: npm run lint
- name: Run tests
run: npm test
+1
View File
@@ -11,6 +11,7 @@
/client/.nuxt/
/client/dist/
/dist/
/dist-server/
/deploy/
/coverage/
/.nyc_output/
+16 -7
View File
@@ -2,15 +2,23 @@ ARG NUSQLITE3_DIR="/usr/local/lib/nusqlite3"
ARG NUSQLITE3_PATH="${NUSQLITE3_DIR}/libnusqlite3.so"
### STAGE 0: Build client ###
FROM node:20-alpine AS build-client
FROM node:24-alpine AS build-client
WORKDIR /client
COPY /client /client
RUN npm ci && npm cache clean --force
RUN npm run generate
### STAGE 1: Build server ###
FROM node:20-alpine AS build-server
### STAGE 1: Compile server on the builder CPU (avoid QEMU SIGILL from tsc on arm64) ###
FROM --platform=$BUILDPLATFORM node:24-alpine AS compile-server
WORKDIR /server
COPY index.js package* tsconfig.server.json /server
COPY /server /server/server
RUN npm ci --include=dev --ignore-scripts && npm run build:server
### STAGE 2: Install native server deps for the target arch ###
FROM node:24-alpine AS build-server
ARG NUSQLITE3_DIR
ARG TARGETPLATFORM
@@ -27,6 +35,7 @@ RUN apk add --no-cache --update \
WORKDIR /server
COPY index.js package* /server
COPY /server /server/server
COPY --from=compile-server /server/dist-server /server/dist-server
RUN case "$TARGETPLATFORM" in \
"linux/amd64") \
@@ -38,10 +47,10 @@ RUN case "$TARGETPLATFORM" in \
unzip /tmp/library.zip -d $NUSQLITE3_DIR && \
rm /tmp/library.zip
RUN npm ci --only=production
RUN npm ci --omit=dev
### STAGE 2: Create minimal runtime image ###
FROM node:20-alpine
### STAGE 3: Create minimal runtime image ###
FROM node:24-alpine
ARG NUSQLITE3_DIR
ARG NUSQLITE3_PATH
@@ -70,4 +79,4 @@ ENV NUSQLITE3_DIR=${NUSQLITE3_DIR}
ENV NUSQLITE3_PATH=${NUSQLITE3_PATH}
ENTRYPOINT ["tini", "--"]
CMD ["node", "index.js"]
CMD ["node", "dist-server/index.js"]
+2 -2
View File
@@ -22,7 +22,7 @@ add_user() {
declare -r descr="${4:-No description}"
declare -r shell="${5:-/bin/false}"
if ! getent passwd | grep -q "^$user:"; then
if ! getent passwd "$user" 2>&1 >/dev/null; then
echo "Creating system user: $user in $group with $descr and shell $shell"
useradd $uid_flags --gid $group --no-create-home --system --shell $shell -c "$descr" $user
fi
@@ -39,7 +39,7 @@ add_group() {
declare -r gid_flags="--gid $gid"
fi
if ! getent group | grep -q "^$group:" ; then
if ! getent group "$group" 2>&1 >/dev/null; then
echo "Creating system group: $group"
groupadd $gid_flags --system $group
fi
+4 -3
View File
@@ -16,7 +16,7 @@ echo "--------------------"
cd client
rm -rf node_modules
npm ci --unsafe-perm=true --allow-root
npm ci
npm run generate
cd ..
@@ -24,7 +24,8 @@ echo ">>> Building Server"
echo "--------------------"
rm -rf node_modules
npm ci --unsafe-perm=true --allow-root
npm ci
npm run build:server
echo ">>> Packaging"
echo "--------------------"
@@ -48,7 +49,7 @@ Description: $DESCRIPTION"
echo "$controlfile" > dist/debian/DEBIAN/control;
# Package debian
pkg -t node20-linux-x64 -o dist/debian/usr/share/audiobookshelf/audiobookshelf .
pkg --config package.json -t node24-linux-x64 -o dist/debian/usr/share/audiobookshelf/audiobookshelf dist-server/index.js
fakeroot dpkg-deb -Zxz --build dist/debian
+1
View File
@@ -196,6 +196,7 @@ export default {
requestBatchQuickEmbed() {
const payload = {
message: this.$strings.MessageConfirmQuickEmbed,
allowHtml: true,
callback: (confirmed) => {
if (confirmed) {
this.$axios
@@ -300,6 +300,8 @@ export default {
})
},
userUpdated(user) {
if (user.id !== this.$store.state.user.user.id) return
if (user.seriesHideFromContinueListening && user.seriesHideFromContinueListening.length) {
this.removeAllSeriesFromContinueSeries(user.seriesHideFromContinueListening)
}
+2 -2
View File
@@ -93,10 +93,10 @@ export default {
editAuthor(author) {
this.$store.commit('globals/showEditAuthorModal', author)
},
editItem(libraryItem) {
editItem(libraryItem, tab = 'details') {
var itemIds = this.shelf.entities.map((e) => e.id)
this.$store.commit('setBookshelfBookIds', itemIds)
this.$store.commit('showEditModal', libraryItem)
this.$store.commit('showEditModalOnTab', { libraryItem, tab: tab || 'details' })
},
editEpisode({ libraryItem, episode }) {
this.$store.commit('setEpisodeTableEpisodeIds', [episode.id])
+4 -15
View File
@@ -3,24 +3,18 @@
<div class="flex md:hidden h-10 items-center">
<nuxt-link :to="`/library/${currentLibraryId}`" class="grow h-full flex justify-center items-center" :class="isHomePage ? 'bg-primary/80' : 'bg-primary/40'">
<p v-if="isHomePage || isPodcastLibrary" class="text-sm">{{ $strings.ButtonHome }}</p>
<svg v-else xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" />
</svg>
<span v-else class="material-symbols text-lg">home</span>
</nuxt-link>
<nuxt-link :to="`/library/${currentLibraryId}/bookshelf`" class="grow h-full flex justify-center items-center" :class="isLibraryPage ? 'bg-primary/80' : 'bg-primary/40'">
<p v-if="isLibraryPage || isPodcastLibrary" class="text-sm">{{ $strings.ButtonLibrary }}</p>
<svg v-else xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.747 0 3.332.477 4.5 1.253v13C19.832 18.477 18.247 18 16.5 18c-1.746 0-3.332.477-4.5 1.253" />
</svg>
<span v-else class="material-symbols text-lg">import_contacts</span>
</nuxt-link>
<nuxt-link v-if="isPodcastLibrary" :to="`/library/${currentLibraryId}/podcast/latest`" class="grow h-full flex justify-center items-center" :class="isPodcastLatestPage ? 'bg-primary/80' : 'bg-primary/40'">
<p class="text-sm">{{ $strings.ButtonLatest }}</p>
</nuxt-link>
<nuxt-link v-if="isBookLibrary" :to="`/library/${currentLibraryId}/bookshelf/series`" class="grow h-full flex justify-center items-center" :class="isSeriesPage ? 'bg-primary/80' : 'bg-primary/40'">
<p v-if="isSeriesPage" class="text-sm">{{ $strings.ButtonSeries }}</p>
<svg v-else xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 17V7m0 10a2 2 0 01-2 2H5a2 2 0 01-2-2V7a2 2 0 012-2h2a2 2 0 012 2m0 10a2 2 0 002 2h2a2 2 0 002-2M9 7a2 2 0 012-2h2a2 2 0 012 2m0 10V7m0 10a2 2 0 002 2h2a2 2 0 002-2V7a2 2 0 00-2-2h-2a2 2 0 00-2 2" />
</svg>
<span v-else class="material-symbols text-lg">view_column</span>
</nuxt-link>
<nuxt-link v-if="showPlaylists" :to="`/library/${currentLibraryId}/bookshelf/playlists`" class="grow h-full flex justify-center items-center" :class="isPlaylistsPage ? 'bg-primary/80' : 'bg-primary/40'">
<p v-if="isPlaylistsPage || isPodcastLibrary" class="text-sm">{{ $strings.ButtonPlaylists }}</p>
@@ -32,12 +26,7 @@
</nuxt-link>
<nuxt-link v-if="isBookLibrary" :to="`/library/${currentLibraryId}/bookshelf/authors`" class="grow h-full flex justify-center items-center" :class="isAuthorsPage ? 'bg-primary/80' : 'bg-primary/40'">
<p v-if="isAuthorsPage" class="text-sm">{{ $strings.ButtonAuthors }}</p>
<svg v-else class="w-5 h-5" viewBox="0 0 24 24">
<path
fill="currentColor"
d="M12,5.5A3.5,3.5 0 0,1 15.5,9A3.5,3.5 0 0,1 12,12.5A3.5,3.5 0 0,1 8.5,9A3.5,3.5 0 0,1 12,5.5M5,8C5.56,8 6.08,8.15 6.53,8.42C6.38,9.85 6.8,11.27 7.66,12.38C7.16,13.34 6.16,14 5,14A3,3 0 0,1 2,11A3,3 0 0,1 5,8M19,8A3,3 0 0,1 22,11A3,3 0 0,1 19,14C17.84,14 16.84,13.34 16.34,12.38C17.2,11.27 17.62,9.85 17.47,8.42C17.92,8.15 18.44,8 19,8M5.5,18.25C5.5,16.18 8.41,14.5 12,14.5C15.59,14.5 18.5,16.18 18.5,18.25V20H5.5V18.25M0,20V18.5C0,17.11 1.89,15.94 4.45,15.6C3.86,16.28 3.5,17.22 3.5,18.25V20H0M24,20H20.5V18.25C20.5,17.22 20.14,16.28 19.55,15.6C22.11,15.94 24,17.11 24,18.5V20Z"
/>
</svg>
<span v-else class="material-symbols text-lg">groups</span>
</nuxt-link>
<nuxt-link v-if="isPodcastLibrary && userIsAdminOrUp" :to="`/library/${currentLibraryId}/podcast/search`" class="grow h-full flex justify-center items-center" :class="isPodcastSearchPage ? 'bg-primary/80' : 'bg-primary/40'">
<p class="text-sm">{{ $strings.ButtonAdd }}</p>
+3 -3
View File
@@ -22,7 +22,7 @@
<div v-if="entityName === 'collections' || entityName === 'playlists'" class="flex justify-center mt-4">
{{ emptyMessageHelp }}
<ui-tooltip :text="$strings.LabelClickForMoreInfo" class="inline-flex ml-2">
<a href="https://www.audiobookshelf.org/guides/collections" target="_blank" class="inline-flex">
<a href="https://audiobookshelf.org/docs/documentation/libraries/common-content/playlists" target="_blank" class="inline-flex">
<span class="material-symbols text-xl w-5 text-gray-200">help_outline</span>
</a>
</ui-tooltip>
@@ -232,11 +232,11 @@ export default {
clearFilter() {
this.$store.dispatch('user/updateUserSettings', { filterBy: 'all' })
},
editEntity(entity) {
editEntity(entity, tab = 'details') {
if (this.entityName === 'items' || this.entityName === 'series-books') {
const bookIds = this.entities.map((e) => e.id)
this.$store.commit('setBookshelfBookIds', bookIds)
this.$store.commit('showEditModal', entity)
this.$store.commit('showEditModalOnTab', { libraryItem: entity, tab: tab || 'details' })
} else if (this.entityName === 'collections') {
this.$store.commit('globals/setEditCollection', entity)
} else if (this.entityName === 'playlists') {
+4 -15
View File
@@ -5,9 +5,7 @@
<div id="siderail-buttons-container" role="navigation" aria-label="Library Navigation" :class="{ 'player-open': streamLibraryItem }" class="w-full overflow-y-auto overflow-x-hidden">
<nuxt-link :to="`/library/${currentLibraryId}`" class="w-full h-20 flex flex-col items-center justify-center text-white border-b border-primary/70 hover:bg-primary cursor-pointer relative" :class="homePage ? 'bg-primary/80' : 'bg-bg/60'">
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" />
</svg>
<span class="material-symbols text-2xl">home</span>
<p class="pt-1.5 text-center leading-4" style="font-size: 0.9rem">{{ $strings.ButtonHome }}</p>
@@ -23,9 +21,7 @@
</nuxt-link>
<nuxt-link :to="`/library/${currentLibraryId}/bookshelf`" class="w-full h-20 flex flex-col items-center justify-center text-white border-b border-primary/70 hover:bg-primary cursor-pointer relative" :class="showLibrary ? 'bg-primary/80' : 'bg-bg/60'">
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.747 0 3.332.477 4.5 1.253v13C19.832 18.477 18.247 18 16.5 18c-1.746 0-3.332.477-4.5 1.253" />
</svg>
<span class="material-symbols text-2xl">import_contacts</span>
<p class="pt-1.5 text-center leading-4" style="font-size: 0.9rem">{{ $strings.ButtonLibrary }}</p>
@@ -33,9 +29,7 @@
</nuxt-link>
<nuxt-link v-if="isBookLibrary" :to="`/library/${currentLibraryId}/bookshelf/series`" class="w-full h-20 flex flex-col items-center justify-center text-white/80 border-b border-primary/70 hover:bg-primary cursor-pointer relative" :class="isSeriesPage ? 'bg-primary/80' : 'bg-bg/60'">
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 17V7m0 10a2 2 0 01-2 2H5a2 2 0 01-2-2V7a2 2 0 012-2h2a2 2 0 012 2m0 10a2 2 0 002 2h2a2 2 0 002-2M9 7a2 2 0 012-2h2a2 2 0 012 2m0 10V7m0 10a2 2 0 002 2h2a2 2 0 002-2V7a2 2 0 00-2-2h-2a2 2 0 00-2 2" />
</svg>
<span class="material-symbols text-2xl">view_column</span>
<p class="pt-1.5 text-center leading-4" style="font-size: 0.9rem">{{ $strings.ButtonSeries }}</p>
@@ -59,12 +53,7 @@
</nuxt-link>
<nuxt-link v-if="isBookLibrary" :to="`/library/${currentLibraryId}/bookshelf/authors`" class="w-full h-20 flex flex-col items-center justify-center text-white/80 border-b border-primary/70 hover:bg-primary cursor-pointer relative" :class="isAuthorsPage ? 'bg-primary/80' : 'bg-bg/60'">
<svg class="w-6 h-6" viewBox="0 0 24 24">
<path
fill="currentColor"
d="M12,5.5A3.5,3.5 0 0,1 15.5,9A3.5,3.5 0 0,1 12,12.5A3.5,3.5 0 0,1 8.5,9A3.5,3.5 0 0,1 12,5.5M5,8C5.56,8 6.08,8.15 6.53,8.42C6.38,9.85 6.8,11.27 7.66,12.38C7.16,13.34 6.16,14 5,14A3,3 0 0,1 2,11A3,3 0 0,1 5,8M19,8A3,3 0 0,1 22,11A3,3 0 0,1 19,14C17.84,14 16.84,13.34 16.34,12.38C17.2,11.27 17.62,9.85 17.47,8.42C17.92,8.15 18.44,8 19,8M5.5,18.25C5.5,16.18 8.41,14.5 12,14.5C15.59,14.5 18.5,16.18 18.5,18.25V20H5.5V18.25M0,20V18.5C0,17.11 1.89,15.94 4.45,15.6C3.86,16.28 3.5,17.22 3.5,18.25V20H0M24,20H20.5V18.25C20.5,17.22 20.14,16.28 19.55,15.6C22.11,15.94 24,17.11 24,18.5V20Z"
/>
</svg>
<span class="material-symbols text-2xl">groups</span>
<p class="pt-1 text-center leading-4" style="font-size: 0.9rem">{{ $strings.ButtonAuthors }}</p>
+47 -2
View File
@@ -62,7 +62,24 @@
</widgets-alert>
<div v-if="isNonInteractable" class="absolute top-0 left-0 w-full h-full bg-black/50 flex items-center justify-center z-20">
<ui-loading-indicator :text="nonInteractionLabel" />
<ui-loading-indicator>
<div class="mb-4">
<span class="text-lg font-medium text-white">
{{ nonInteractionLabel }}
</span>
</div>
<div v-if="isUploading" class="w-64 mx-auto mb-2">
<div class="flex items-center justify-center mb-2">
<span class="text-sm font-medium text-white/60 text-center w-full">
{{ uploadProgressText }}
</span>
</div>
<div class="w-full bg-primary/20 rounded-full h-2.5">
<div class="bg-green-500 h-2.5 rounded-full transition-all duration-300 ease-out" :style="{ width: uploadProgressPercent + '%' }"></div>
</div>
</div>
</ui-loading-indicator>
</div>
</div>
</template>
@@ -91,7 +108,11 @@ export default {
isUploading: false,
uploadFailed: false,
uploadSuccess: false,
isFetchingMetadata: false
isFetchingMetadata: false,
uploadProgress: {
loaded: 0,
total: 0
}
}
},
computed: {
@@ -116,6 +137,15 @@ export default {
} else if (this.isFetchingMetadata) {
return this.$strings.LabelFetchingMetadata
}
},
uploadProgressPercent() {
if (this.uploadProgress.total === 0) return 0
return Math.min(100, Math.round((this.uploadProgress.loaded / this.uploadProgress.total) * 100))
},
uploadProgressText() {
const loaded = this.$bytesPretty(this.uploadProgress.loaded)
const total = this.$bytesPretty(this.uploadProgress.total)
return `${this.uploadProgressPercent}% (${loaded} / ${total})`
}
},
methods: {
@@ -123,6 +153,21 @@ export default {
this.isUploading = status === 'uploading'
this.uploadFailed = status === 'failed'
this.uploadSuccess = status === 'success'
if (status !== 'uploading') {
this.uploadProgress = {
loaded: 0,
total: 0
}
}
},
setUploadProgress(progress) {
if (this.isUploading && progress) {
this.uploadProgress = {
loaded: progress.loaded || 0,
total: progress.total || 0
}
}
},
titleUpdated() {
this.error = ''
+21 -5
View File
@@ -78,7 +78,7 @@
</div>
<!-- Error widget -->
<ui-tooltip cy-id="ErrorTooltip" v-if="showError" :text="errorText" class="absolute bottom-4e left-0 z-10">
<ui-tooltip cy-id="ErrorTooltip" v-if="showError" :text="errorText" plaintext class="absolute bottom-4e left-0 z-10">
<div :style="{ height: 1.5 + 'em', width: 2.5 + 'em' }" class="bg-error rounded-r-full shadow-md flex items-center justify-end border-r border-b border-red-300">
<span class="material-symbols text-red-100 pr-1e" :style="{ fontSize: 0.875 + 'em' }">priority_high</span>
</div>
@@ -121,12 +121,12 @@
<!-- Alternative bookshelf title/author/sort -->
<div cy-id="detailBottom" :id="`description-area-${index}`" v-if="isAlternativeBookshelfView || isAuthorBookshelfView" dir="auto" class="relative mt-2e mb-2e left-0 z-50 w-full">
<div :style="{ fontSize: 0.9 + 'em' }">
<ui-tooltip v-if="displayTitle" :text="displayTitle" :disabled="!displayTitleTruncated" direction="bottom" :delayOnShow="500" class="flex items-center">
<ui-tooltip v-if="displayTitle" :text="displayTitle" plaintext :disabled="!displayTitleTruncated" direction="bottom" :delayOnShow="500" class="flex items-center">
<p cy-id="title" ref="displayTitle" class="truncate">{{ displayTitle }}</p>
<widgets-explicit-indicator cy-id="explicitIndicator" v-if="isExplicit" />
</ui-tooltip>
</div>
<ui-tooltip v-if="showSubtitles" :text="displaySubtitle" :disabled="!displaySubtitleTruncated" direction="bottom" :delayOnShow="500" class="flex items-center">
<ui-tooltip v-if="showSubtitles" :text="displaySubtitle" plaintext :disabled="!displaySubtitleTruncated" direction="bottom" :delayOnShow="500" class="flex items-center">
<p cy-id="subtitle" class="truncate" ref="displaySubtitle" :style="{ fontSize: 0.6 + 'em' }">{{ displaySubtitle }}</p>
</ui-tooltip>
<p cy-id="line2" class="truncate text-gray-400" :style="{ fontSize: 0.8 + 'em' }">{{ displayLineTwo || '&nbsp;' }}</p>
@@ -353,6 +353,14 @@ export default {
if (!this.userProgressLastUpdated) return '\u00A0'
return this.$getString('LabelLastProgressDate', [this.$formatDatetime(this.userProgressLastUpdated, this.dateFormat, this.timeFormat)])
}
if (this.orderBy === 'progress.createdAt') {
if (!this.userProgressStartedDate) return '\u00A0'
return this.$getString('LabelStartedDate', [this.$formatDatetime(this.userProgressStartedDate, this.dateFormat, this.timeFormat)])
}
if (this.orderBy === 'progress.finishedAt') {
if (!this.userProgressFinishedDate) return '\u00A0'
return this.$getString('LabelFinishedDate', [this.$formatDatetime(this.userProgressFinishedDate, this.dateFormat, this.timeFormat)])
}
return null
},
episodeProgress() {
@@ -389,6 +397,14 @@ export default {
if (!this.userProgress) return null
return this.userProgress.lastUpdate
},
userProgressStartedDate() {
if (!this.userProgress) return null
return this.userProgress.startedAt
},
userProgressFinishedDate() {
if (!this.userProgress) return null
return this.userProgress.finishedAt
},
itemIsFinished() {
if (this.booksInSeries) return this.seriesIsFinished
return this.userProgress ? !!this.userProgress.isFinished : false
@@ -772,11 +788,11 @@ export default {
},
showEditModalFiles() {
// More menu func
this.store.commit('showEditModalOnTab', { libraryItem: this.libraryItem, tab: 'files' })
this.$emit('edit', this.libraryItem, 'files')
},
showEditModalMatch() {
// More menu func
this.store.commit('showEditModalOnTab', { libraryItem: this.libraryItem, tab: 'match' })
this.$emit('edit', this.libraryItem, 'match')
},
sendToDevice(deviceName) {
// More menu func
@@ -338,6 +338,18 @@ export default {
const series = this.series.find((se) => se.id == decoded)
if (series) filterValue = series.name
}
} else if (parts[0] === 'progress') {
const item = this.progress.find((p) => p.id == decoded)
if (item) filterValue = item.name
} else if (parts[0] === 'tracks') {
const item = this.tracks.find((t) => t.id == decoded)
if (item) filterValue = item.name
} else if (parts[0] === 'ebooks') {
const item = this.ebooks.find((e) => e.id == decoded)
if (item) filterValue = item.name
} else if (parts[0] === 'missing') {
const item = this.missing.find((m) => m.id == decoded)
if (item) filterValue = item.name
} else {
filterValue = decoded
}
@@ -134,6 +134,14 @@ export default {
text: this.$strings.LabelLibrarySortByProgress,
value: 'progress'
},
{
text: this.$strings.LabelLibrarySortByProgressStarted,
value: 'progress.createdAt'
},
{
text: this.$strings.LabelLibrarySortByProgressFinished,
value: 'progress.finishedAt'
},
{
text: this.$strings.LabelRandomly,
value: 'random'
@@ -200,4 +208,4 @@ export default {
.librarySortMenu {
max-height: calc(100vh - 125px);
}
</style>
</style>
@@ -88,7 +88,7 @@ export default {
},
providers() {
if (this.isPodcast) return this.$store.state.scanners.podcastProviders
return this.$store.state.scanners.providers
return this.$store.state.scanners.bookProviders
},
libraryProvider() {
return this.$store.getters['libraries/getLibraryProvider'](this.currentLibraryId) || 'google'
@@ -96,6 +96,9 @@ export default {
},
methods: {
init() {
// Fetch providers when modal is shown
this.$store.dispatch('scanners/fetchProviders')
// If we don't have a set provider (first open of dialog) or we've switched library, set
// the selected provider to the current library default provider
if (!this.options.provider || this.lastUsedLibrary != this.currentLibraryId) {
@@ -127,8 +130,7 @@ export default {
this.show = false
})
}
},
mounted() {}
}
}
</script>
+1 -1
View File
@@ -8,7 +8,7 @@
<div class="px-6 py-8 w-full text-sm rounded-lg bg-bg shadow-lg border border-black-300 overflow-y-auto overflow-x-hidden" style="max-height: 80vh">
<div class="absolute top-0 right-0 p-4">
<ui-tooltip :text="$strings.LabelClickForMoreInfo" class="inline-flex ml-2">
<a href="https://www.audiobookshelf.org/guides/media-item-shares" target="_blank" class="inline-flex">
<a href="https://audiobookshelf.org/docs/documentation/libraries/common-content/public-shares#media-item-shares" target="_blank" class="inline-flex">
<span class="material-symbols text-xl w-5 text-gray-200">help_outline</span>
</a>
</ui-tooltip>
@@ -25,7 +25,7 @@
<div class="text-sm flex items-center justify-center text-gray-200">
<p>{{ $strings.MessageBookshelfNoCollectionsHelp }}</p>
<ui-tooltip :text="$strings.LabelClickForMoreInfo" class="inline-flex ml-2">
<a href="https://www.audiobookshelf.org/guides/collections" target="_blank" class="inline-flex">
<a href="https://audiobookshelf.org/docs/documentation/libraries/common-content/playlists" target="_blank" class="inline-flex">
<span class="material-symbols text-xl w-5 text-gray-200">help_outline</span>
</a>
</ui-tooltip>
@@ -227,7 +227,7 @@ export default {
.catch((error) => {
console.error('Failed to create collection', error)
var errMsg = error.response ? error.response.data || '' : ''
this.$toast.error(this.$strings.ToastCollectionCreateFailed + ': ' + errMsg)
this.$toast.error(errMsg)
this.processing = false
})
}
+148 -20
View File
@@ -51,19 +51,21 @@
<form @submit.prevent="submitSearchForm">
<div class="flex flex-wrap sm:flex-nowrap items-center justify-start -mx-1">
<div class="w-48 grow p-1">
<ui-dropdown v-model="provider" :items="providers" :label="$strings.LabelProvider" small />
<ui-dropdown v-model="provider" :items="providers" :disabled="searchInProgress" :label="$strings.LabelProvider" small />
</div>
<div class="w-72 grow p-1">
<ui-text-input-with-label v-model="searchTitle" :label="searchTitleLabel" :placeholder="$strings.PlaceholderSearch" />
<ui-text-input-with-label v-model="searchTitle" :disabled="searchInProgress" :label="searchTitleLabel" :placeholder="$strings.PlaceholderSearch" />
</div>
<div v-show="provider != 'itunes' && provider != 'audiobookcovers'" class="w-72 grow p-1">
<ui-text-input-with-label v-model="searchAuthor" :label="$strings.LabelAuthor" />
<ui-text-input-with-label v-model="searchAuthor" :disabled="searchInProgress" :label="$strings.LabelAuthor" />
</div>
<ui-btn class="mt-5 ml-1 md:min-w-24" :padding-x="4" type="submit">{{ $strings.ButtonSearch }}</ui-btn>
<ui-btn v-if="!searchInProgress" class="mt-5 ml-1 md:min-w-24" :padding-x="4" type="submit">{{ $strings.ButtonSearch }}</ui-btn>
<ui-btn v-else class="mt-5 ml-1 md:min-w-24" :padding-x="4" type="button" color="bg-error" @click.prevent="cancelCurrentSearch">{{ $strings.ButtonCancel }}</ui-btn>
</div>
</form>
<div v-if="hasSearched" class="flex items-center flex-wrap justify-center sm:max-h-80 sm:overflow-y-scroll mt-2 max-w-full">
<p v-if="!coversFound.length">{{ $strings.MessageNoCoversFound }}</p>
<p v-if="searchInProgress && !coversFound.length" class="text-gray-300 py-4">{{ $strings.MessageLoading }}</p>
<p v-else-if="!searchInProgress && !coversFound.length" class="text-gray-300 py-4">{{ $strings.MessageNoCoversFound }}</p>
<template v-for="cover in coversFound">
<div :key="cover" class="m-0.5 mb-5 border-2 border-transparent hover:border-yellow-300 cursor-pointer" :class="cover === coverPath ? 'border-yellow-300' : ''" @click="updateCover(cover)">
<covers-preview-cover :src="cover" :width="80" show-open-new-tab :book-cover-aspect-ratio="bookCoverAspectRatio" />
@@ -105,7 +107,10 @@ export default {
showLocalCovers: false,
previewUpload: null,
selectedFile: null,
provider: 'google'
provider: 'google',
currentSearchRequestId: null,
searchInProgress: false,
socketListenersActive: false
}
},
watch: {
@@ -128,8 +133,8 @@ export default {
}
},
providers() {
if (this.isPodcast) return this.$store.state.scanners.podcastProviders
return [{ text: 'All', value: 'all' }, ...this.$store.state.scanners.providers, ...this.$store.state.scanners.coverOnlyProviders]
if (this.isPodcast) return this.$store.state.scanners.podcastCoverProviders
return this.$store.state.scanners.bookCoverProviders
},
searchTitleLabel() {
if (this.provider.startsWith('audible')) return this.$strings.LabelSearchTitleOrASIN
@@ -186,6 +191,9 @@ export default {
_file.localPath = `${process.env.serverUrl}/api/items/${this.libraryItemId}/file/${file.ino}?token=${this.userToken}`
return _file
})
},
socket() {
return this.$root.socket
}
},
methods: {
@@ -235,7 +243,19 @@ export default {
this.searchTitle = this.mediaMetadata.title || ''
this.searchAuthor = this.mediaMetadata.authorName || ''
if (this.isPodcast) this.provider = 'itunes'
else this.provider = localStorage.getItem('book-cover-provider') || localStorage.getItem('book-provider') || 'google'
else {
// Migrate from 'all' to 'best' (only once)
const migrationKey = 'book-cover-provider-migrated'
const currentProvider = localStorage.getItem('book-cover-provider') || localStorage.getItem('book-provider') || 'google'
if (!localStorage.getItem(migrationKey) && currentProvider === 'all') {
localStorage.setItem('book-cover-provider', 'best')
localStorage.setItem(migrationKey, 'true')
this.provider = 'best'
} else {
this.provider = currentProvider
}
}
},
removeCover() {
if (!this.coverPath) {
@@ -291,22 +311,116 @@ export default {
console.error('PersistProvider', error)
}
},
generateRequestId() {
return `cover-search-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`
},
addSocketListeners() {
if (!this.socket || this.socketListenersActive) return
this.socket.on('cover_search_result', this.handleSearchResult)
this.socket.on('cover_search_complete', this.handleSearchComplete)
this.socket.on('cover_search_error', this.handleSearchError)
this.socket.on('cover_search_provider_error', this.handleProviderError)
this.socket.on('cover_search_cancelled', this.handleSearchCancelled)
this.socket.on('disconnect', this.handleSocketDisconnect)
this.socketListenersActive = true
},
removeSocketListeners() {
if (!this.socket || !this.socketListenersActive) return
this.socket.off('cover_search_result', this.handleSearchResult)
this.socket.off('cover_search_complete', this.handleSearchComplete)
this.socket.off('cover_search_error', this.handleSearchError)
this.socket.off('cover_search_provider_error', this.handleProviderError)
this.socket.off('cover_search_cancelled', this.handleSearchCancelled)
this.socket.off('disconnect', this.handleSocketDisconnect)
this.socketListenersActive = false
},
handleSearchResult(data) {
if (data.requestId !== this.currentSearchRequestId) return
// Add new covers to the list (avoiding duplicates)
const newCovers = data.covers.filter((cover) => !this.coversFound.includes(cover))
this.coversFound.push(...newCovers)
},
handleSearchComplete(data) {
if (data.requestId !== this.currentSearchRequestId) return
this.searchInProgress = false
this.currentSearchRequestId = null
},
handleSearchError(data) {
if (data.requestId !== this.currentSearchRequestId) return
console.error('[Cover Search] Search error:', data.error)
this.$toast.error(this.$strings.ToastCoverSearchFailed)
this.searchInProgress = false
this.currentSearchRequestId = null
},
handleProviderError(data) {
if (data.requestId !== this.currentSearchRequestId) return
console.warn(`[Cover Search] Provider ${data.provider} failed:`, data.error)
},
handleSearchCancelled(data) {
if (data.requestId !== this.currentSearchRequestId) return
this.searchInProgress = false
this.currentSearchRequestId = null
},
handleSocketDisconnect() {
// If we were in the middle of a search, cancel it (server can't send results anymore)
if (this.searchInProgress && this.currentSearchRequestId) {
this.searchInProgress = false
this.currentSearchRequestId = null
}
},
cancelCurrentSearch() {
if (!this.currentSearchRequestId || !this.socket?.connected) {
console.error('[Cover Search] Socket not connected')
this.$toast.error(this.$strings.ToastConnectionNotAvailable)
return
}
this.socket.emit('cancel_cover_search', this.currentSearchRequestId)
this.currentSearchRequestId = null
this.searchInProgress = false
},
async submitSearchForm() {
if (!this.socket?.connected) {
console.error('[Cover Search] Socket not connected')
this.$toast.error(this.$strings.ToastConnectionNotAvailable)
return
}
// Cancel any existing search
if (this.searchInProgress) {
this.cancelCurrentSearch()
}
// Store provider in local storage
this.persistProvider()
this.isProcessing = true
const searchQuery = this.getSearchQuery()
const results = await this.$axios
.$get(`/api/search/covers?${searchQuery}`)
.then((res) => res.results)
.catch((error) => {
console.error('Failed', error)
return []
})
this.coversFound = results
this.isProcessing = false
// Setup socket listeners if not already done
this.addSocketListeners()
// Clear previous results
this.coversFound = []
this.hasSearched = true
this.searchInProgress = true
// Generate unique request ID
const requestId = this.generateRequestId()
this.currentSearchRequestId = requestId
// Emit search request via WebSocket
this.socket.emit('search_covers', {
requestId,
title: this.searchTitle,
author: this.searchAuthor || '',
provider: this.provider,
podcast: this.isPodcast
})
},
setCover(coverFile) {
this.isProcessing = true
@@ -320,6 +434,20 @@ export default {
this.isProcessing = false
})
}
},
mounted() {
// Setup socket listeners when component is mounted
this.addSocketListeners()
// Fetch providers if not already loaded
this.$store.dispatch('scanners/fetchProviders')
},
beforeDestroy() {
// Cancel any ongoing search when component is destroyed
if (this.searchInProgress) {
this.cancelCurrentSearch()
}
// Remove socket listeners
this.removeSocketListeners()
}
}
</script>
+50 -21
View File
@@ -2,7 +2,7 @@
<div id="match-wrapper" class="w-full h-full overflow-hidden px-2 md:px-4 py-4 md:py-6 relative">
<form @submit.prevent="submitSearch">
<div class="flex flex-wrap md:flex-nowrap items-center justify-start -mx-1">
<div class="w-36 px-1">
<div v-if="providersLoaded" class="w-36 px-1">
<ui-dropdown v-model="provider" :items="providers" :label="$strings.LabelProvider" small />
</div>
<div class="grow md:w-72 px-1">
@@ -77,8 +77,8 @@
<ui-checkbox v-model="selectedMatchUsage.author" checkbox-bg="bg" @input="checkboxToggled" />
<div class="grow ml-4">
<ui-text-input-with-label v-model="selectedMatch.author" :disabled="!selectedMatchUsage.author" :label="$strings.LabelAuthor" />
<p v-if="mediaMetadata.authorName" class="text-xs ml-1 text-white/60">
{{ $strings.LabelCurrently }} <a title="$strings.LabelClickToUseCurrentValue" class="cursor-pointer hover:underline" @click.stop="setMatchFieldValue('author', mediaMetadata.authorName)">{{ mediaMetadata.authorName }}</a>
<p v-if="mediaMetadata.authorName || (isPodcast && mediaMetadata.author)" class="text-xs ml-1 text-white/60">
{{ $strings.LabelCurrently }} <a :title="$strings.LabelClickToUseCurrentValue" class="cursor-pointer hover:underline" @click.stop="setMatchFieldValue('author', isPodcast ? mediaMetadata.author : mediaMetadata.authorName)">{{ isPodcast ? mediaMetadata.author : mediaMetadata.authorName }}</a>
</p>
</div>
</div>
@@ -87,7 +87,7 @@
<div class="grow ml-4">
<ui-multi-select v-model="selectedMatch.narrator" :items="narrators" :disabled="!selectedMatchUsage.narrator" :label="$strings.LabelNarrators" />
<p v-if="mediaMetadata.narratorName" class="text-xs ml-1 text-white/60">
{{ $strings.LabelCurrently }} <a title="$strings.LabelClickToUseCurrentValue" class="cursor-pointer hover:underline" @click.stop="setMatchFieldValue('narrator', mediaMetadata.narrators)">{{ mediaMetadata.narratorName }}</a>
{{ $strings.LabelCurrently }} <a :title="$strings.LabelClickToUseCurrentValue" class="cursor-pointer hover:underline" @click.stop="setMatchFieldValue('narrator', mediaMetadata.narrators)">{{ mediaMetadata.narratorName }}</a>
</p>
</div>
</div>
@@ -96,7 +96,7 @@
<div class="grow ml-4">
<ui-rich-text-editor v-model="selectedMatch.description" :disabled="!selectedMatchUsage.description" :label="$strings.LabelDescription" />
<p v-if="mediaMetadata.description" class="text-xs ml-1 text-white/60">
{{ $strings.LabelCurrently }} <a title="$strings.LabelClickToUseCurrentValue" class="cursor-pointer hover:underline" @click.stop="setMatchFieldValue('description', mediaMetadata.description)">{{ mediaMetadata.descriptionPlain.substr(0, 100) + (mediaMetadata.descriptionPlain.length > 100 ? '...' : '') }}</a>
{{ $strings.LabelCurrently }} <a :title="$strings.LabelClickToUseCurrentValue" class="cursor-pointer hover:underline" @click.stop="setMatchFieldValue('description', mediaMetadata.description)">{{ mediaMetadata.descriptionPlain.substr(0, 100) + (mediaMetadata.descriptionPlain.length > 100 ? '...' : '') }}</a>
</p>
</div>
</div>
@@ -105,7 +105,7 @@
<div class="grow ml-4">
<ui-text-input-with-label v-model="selectedMatch.publisher" :disabled="!selectedMatchUsage.publisher" :label="$strings.LabelPublisher" />
<p v-if="mediaMetadata.publisher" class="text-xs ml-1 text-white/60">
{{ $strings.LabelCurrently }} <a title="$strings.LabelClickToUseCurrentValue" class="cursor-pointer hover:underline" @click.stop="setMatchFieldValue('publisher', mediaMetadata.publisher)">{{ mediaMetadata.publisher }}</a>
{{ $strings.LabelCurrently }} <a :title="$strings.LabelClickToUseCurrentValue" class="cursor-pointer hover:underline" @click.stop="setMatchFieldValue('publisher', mediaMetadata.publisher)">{{ mediaMetadata.publisher }}</a>
</p>
</div>
</div>
@@ -114,7 +114,7 @@
<div class="grow ml-4">
<ui-text-input-with-label v-model="selectedMatch.publishedYear" :disabled="!selectedMatchUsage.publishedYear" :label="$strings.LabelPublishYear" />
<p v-if="mediaMetadata.publishedYear" class="text-xs ml-1 text-white/60">
{{ $strings.LabelCurrently }} <a title="$strings.LabelClickToUseCurrentValue" class="cursor-pointer hover:underline" @click.stop="setMatchFieldValue('publishedYear', mediaMetadata.publishedYear)">{{ mediaMetadata.publishedYear }}</a>
{{ $strings.LabelCurrently }} <a :title="$strings.LabelClickToUseCurrentValue" class="cursor-pointer hover:underline" @click.stop="setMatchFieldValue('publishedYear', mediaMetadata.publishedYear)">{{ mediaMetadata.publishedYear }}</a>
</p>
</div>
</div>
@@ -253,6 +253,7 @@ export default {
hasSearched: false,
selectedMatch: null,
selectedMatchOrig: null,
waitingForProviders: false,
selectedMatchUsage: {
title: true,
subtitle: true,
@@ -285,9 +286,19 @@ export default {
handler(newVal) {
if (newVal) this.init()
}
},
providersLoaded(isLoaded) {
// Complete initialization once providers are loaded
if (isLoaded && this.waitingForProviders) {
this.waitingForProviders = false
this.initProviderAndSearch()
}
}
},
computed: {
providersLoaded() {
return this.$store.getters['scanners/areProvidersLoaded']
},
isProcessing: {
get() {
return this.processing
@@ -319,7 +330,7 @@ export default {
},
providers() {
if (this.isPodcast) return this.$store.state.scanners.podcastProviders
return this.$store.state.scanners.providers
return this.$store.state.scanners.bookProviders
},
searchTitleLabel() {
if (this.provider.startsWith('audible')) return this.$strings.LabelSearchTitleOrASIN
@@ -400,7 +411,9 @@ export default {
this.$toast.warning(this.$strings.ToastTitleRequired)
return
}
this.persistProvider()
if (!this.isPodcast) {
this.persistProvider()
}
this.runSearch()
},
async runSearch() {
@@ -476,6 +489,24 @@ export default {
this.checkboxToggled()
},
initProviderAndSearch() {
// Set provider based on media type
if (this.isPodcast) {
this.provider = 'itunes'
} else {
this.provider = this.getDefaultBookProvider()
}
// Prefer using ASIN if set and using audible provider
if (this.provider.startsWith('audible') && this.libraryItem.media.metadata.asin) {
this.searchTitle = this.libraryItem.media.metadata.asin
this.searchAuthor = ''
}
if (this.searchTitle) {
this.submitSearch()
}
},
init() {
this.clearSelectedMatch()
this.initSelectedMatchUsage()
@@ -493,19 +524,13 @@ export default {
}
this.searchTitle = this.libraryItem.media.metadata.title
this.searchAuthor = this.libraryItem.media.metadata.authorName || ''
if (this.isPodcast) this.provider = 'itunes'
else {
this.provider = this.getDefaultBookProvider()
}
// Prefer using ASIN if set and using audible provider
if (this.provider.startsWith('audible') && this.libraryItem.media.metadata.asin) {
this.searchTitle = this.libraryItem.media.metadata.asin
this.searchAuthor = ''
}
if (this.searchTitle) {
this.submitSearch()
// Wait for providers to be loaded before setting provider and searching
if (this.providersLoaded || this.isPodcast) {
this.waitingForProviders = false
this.initProviderAndSearch()
} else {
this.waitingForProviders = true
}
},
selectMatch(match) {
@@ -635,6 +660,10 @@ export default {
this.selectedMatch = null
this.selectedMatchOrig = null
}
},
mounted() {
// Fetch providers if not already loaded
this.$store.dispatch('scanners/fetchProviders')
}
}
</script>
@@ -158,6 +158,8 @@ export default {
this.isProcessing = true
var updateResult = await this.$axios.$patch(`/api/items/${this.libraryItemId}/media`, updatePayload).catch((error) => {
console.error('Failed to update', error)
const errorMessage = typeof error?.response?.data === 'string' ? error?.response?.data : null
this.$toast.error(errorMessage || this.$strings.ToastFailedToUpdate)
return false
})
this.isProcessing = false
@@ -107,6 +107,7 @@ export default {
quickEmbed() {
const payload = {
message: this.$strings.MessageConfirmQuickEmbed,
allowHtml: true,
callback: (confirmed) => {
if (confirmed) {
this.$axios
@@ -74,7 +74,7 @@ export default {
},
providers() {
if (this.mediaType === 'podcast') return this.$store.state.scanners.podcastProviders
return this.$store.state.scanners.providers
return this.$store.state.scanners.bookProviders
}
},
methods: {
@@ -156,6 +156,8 @@ export default {
},
mounted() {
this.init()
// Fetch providers if not already loaded
this.$store.dispatch('scanners/fetchProviders')
}
}
</script>
@@ -8,7 +8,7 @@
<div class="flex items-center justify-between md:justify-start mb-4">
<p class="text-sm text-gray-300 pr-2">{{ $strings.LabelMetadataOrderOfPrecedenceDescription }}</p>
<ui-tooltip :text="$strings.LabelClickForMoreInfo" class="inline-flex">
<a href="https://www.audiobookshelf.org/guides/book-scanner" target="_blank" class="inline-flex">
<a href="https://audiobookshelf.org/docs/documentation/libraries/book-library/book-metadata" target="_blank" class="inline-flex">
<span class="material-symbols text-xl w-5">help_outline</span>
</a>
</ui-tooltip>
@@ -104,7 +104,6 @@ export default {
},
data() {
return {
provider: null,
useSquareBookCovers: false,
enableWatcher: false,
skipMatchingMediaWithAsin: false,
@@ -134,10 +133,6 @@ export default {
isPodcastLibrary() {
return this.mediaType === 'podcast'
},
providers() {
if (this.mediaType === 'podcast') return this.$store.state.scanners.podcastProviders
return this.$store.state.scanners.providers
},
maskAsFinishedWhenItems() {
return [
{
@@ -25,7 +25,7 @@
<div class="text-sm flex items-center justify-center text-gray-200">
<p>{{ $strings.MessageNoUserPlaylistsHelp }}</p>
<ui-tooltip :text="$strings.LabelClickForMoreInfo" class="inline-flex ml-2">
<a href="https://www.audiobookshelf.org/guides/collections" target="_blank" class="inline-flex">
<a href="https://audiobookshelf.org/docs/documentation/libraries/common-content/playlists" target="_blank" class="inline-flex">
<span class="material-symbols text-xl w-5 text-gray-200">help_outline</span>
</a>
</ui-tooltip>
@@ -97,7 +97,10 @@ export default {
...playlist
}
})
.sort((a, b) => (a.isItemIncluded ? -1 : 1))
.sort((a, b) => {
if (a.isItemIncluded !== b.isItemIncluded) return a.isItemIncluded ? -1 : 1
return a.name.localeCompare(b.name)
})
},
isBatch() {
return this.selectedPlaylistItems.length > 1
@@ -94,7 +94,6 @@ export default {
}
this.processing = false
this.$toast.success(`${this.episodes.length} episode${this.episodes.length > 1 ? 's' : ''} removed`)
this.show = false
this.$emit('clearSelected')
}
@@ -114,7 +114,7 @@ export default {
.$patch(`/api/podcasts/${this.libraryItem.id}/episode/${this.episodeId}`, updatePayload)
.then(() => {
this.isProcessing = false
this.$toast.success('Podcast episode updated')
this.$toast.success(this.$strings.ToastPodcastEpisodeUpdated)
this.$emit('selectTab', 'details')
})
.catch((error) => {
@@ -8,7 +8,7 @@
</button>
</ui-tooltip>
<ui-tooltip direction="top" :text="jumpBackwardText">
<button :aria-label="jumpForwardText" class="text-gray-300" @mousedown.prevent @mouseup.prevent @click.stop="jumpBackward">
<button :aria-label="jumpBackwardText" class="text-gray-300" @mousedown.prevent @mouseup.prevent @click.stop="jumpBackward">
<span class="material-symbols text-2xl sm:text-3xl">replay</span>
</button>
</ui-tooltip>
+21 -1
View File
@@ -3,7 +3,8 @@
<div class="absolute top-0 left-0 right-0 w-full h-36 bg-linear-to-t from-transparent via-black-500 to-black-700 opacity-90 pointer-events-none" />
<div ref="content" class="relative text-white" :style="{ height: modalHeight, width: modalWidth }" v-click-outside="clickedOutside">
<div class="px-4 w-full text-sm py-6 rounded-lg bg-bg shadow-lg border border-black-300">
<p id="confirm-prompt-message" class="text-lg mb-6 mt-2 px-1" v-html="message" />
<p v-if="allowHtmlMessage" id="confirm-prompt-message" class="text-lg mb-6 mt-2 px-1" v-html="sanitizedMessage" />
<p v-else id="confirm-prompt-message" class="text-lg mb-6 mt-2 px-1">{{ message }}</p>
<ui-checkbox v-if="checkboxLabel" v-model="checkboxValue" checkbox-bg="bg" :label="checkboxLabel" label-class="pl-2 text-base" class="mb-6 px-1" />
@@ -52,6 +53,17 @@ export default {
message() {
return this.confirmPromptOptions.message || ''
},
allowHtmlMessage() {
return !!this.confirmPromptOptions.allowHtml
},
sanitizedMessage() {
if (!this.allowHtmlMessage) return this.message
return this.escapeHtml(this.message)
.replace(/&lt;br\s*\/?&gt;/gi, '<br>')
.replace(/&lt;code&gt;/gi, '<code>')
.replace(/&lt;\/code&gt;/gi, '</code>')
},
callback() {
return this.confirmPromptOptions.callback
},
@@ -103,6 +115,14 @@ export default {
if (this.callback) this.callback(true, this.checkboxValue)
this.show = false
},
escapeHtml(value) {
return String(value)
.replace(/&/g, '&amp;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/"/g, '&quot;')
.replace(/'/g, '&#39;')
},
setShow() {
this.checkboxValue = this.checkboxDefaultValue
this.$eventBus.$emit('showing-prompt', true)
@@ -14,7 +14,7 @@
<div :key="n" class="absolute pointer-events-none left-0 h-px bg-white/10" :style="{ top: n * lineSpacing - lineSpacing / 2 + 'px', width: '360px', marginLeft: '24px' }" />
<div :key="`dot-${n}`" class="absolute z-10" :style="{ left: points[n - 1].x + 'px', bottom: points[n - 1].y + 'px' }">
<ui-tooltip :text="last7DaysOfListening[n - 1].minutesListening" direction="top">
<ui-tooltip :text="last7DaysOfListening[n - 1].minutesListening" plaintext direction="top">
<div class="h-2 w-2 bg-yellow-400 hover:bg-yellow-300 rounded-full transform duration-150 transition-transform hover:scale-125" />
</ui-tooltip>
</div>
@@ -186,10 +186,16 @@ export default {
daysInARow() {
var count = 0
while (true) {
var _date = this.$addDaysToToday(count * -1)
var datestr = this.$formatJsDate(_date, 'yyyy-MM-dd')
const _date = this.$addDaysToToday(count * -1 - 1)
const datestr = this.$formatJsDate(_date, 'yyyy-MM-dd')
if (!this.listeningStatsDays[datestr] || this.listeningStatsDays[datestr] === 0) {
// don't require listening today to count towards days in a row, but do count it if already listened today
const today = this.$formatJsDate(new Date(), 'yyyy-MM-dd')
if (this.listeningStatsDays[today]) {
count++
}
return count
}
count++
+2 -6
View File
@@ -1,9 +1,7 @@
<template>
<div class="flex flex-wrap justify-center mt-6">
<div class="flex p-2">
<svg class="h-14 w-14" viewBox="0 0 24 24">
<path fill="currentColor" d="M9 3V18H12V3H9M12 5L16 18L19 17L15 4L12 5M5 5V18H8V5H5M3 19V21H21V19H3Z" />
</svg>
<span class="material-symbols text-5xl py-1">newsstand</span>
<div class="px-1">
<p class="text-4.5xl leading-none font-bold">{{ $formatNumber(totalItems) }}</p>
<p class="text-xs md:text-sm text-white/80">{{ $strings.LabelStatsItemsInLibrary }}</p>
@@ -19,9 +17,7 @@
</div>
<div v-if="isBookLibrary" class="flex p-2">
<svg class="h-14 w-14" viewBox="0 0 24 24">
<path fill="currentColor" d="M12,4A4,4 0 0,1 16,8A4,4 0 0,1 12,12A4,4 0 0,1 8,8A4,4 0 0,1 12,4M12,6A2,2 0 0,0 10,8A2,2 0 0,0 12,10A2,2 0 0,0 14,8A2,2 0 0,0 12,6M12,13C14.67,13 20,14.33 20,17V20H4V17C4,14.33 9.33,13 12,13M12,14.9C9.03,14.9 5.9,16.36 5.9,17V18.1H18.1V17C18.1,16.36 14.97,14.9 12,14.9Z" />
</svg>
<span class="material-symbols text-5xl py-1">person</span>
<div class="px-1">
<p class="text-4.5xl leading-none font-bold">{{ $formatNumber(totalAuthors) }}</p>
<p class="text-xs md:text-sm text-white/80">{{ $strings.LabelStatsAuthors }}</p>
+7 -2
View File
@@ -1,5 +1,5 @@
<template>
<div class="w-40">
<div :class="hasSlotContent ? 'w-auto' : 'w-40'">
<div class="bg-bg border border-gray-500 py-2 px-5 rounded-lg flex items-center flex-col box-shadow-md">
<div class="loader-dots block relative w-20 h-5 mt-2">
<div class="absolute top-0 mt-1 w-3 h-3 rounded-full bg-green-500"></div>
@@ -7,7 +7,9 @@
<div class="absolute top-0 mt-1 w-3 h-3 rounded-full bg-green-500"></div>
<div class="absolute top-0 mt-1 w-3 h-3 rounded-full bg-green-500"></div>
</div>
<div class="text-gray-200 text-xs font-light mt-2 text-center">{{ message }}</div>
<slot>
<div class="text-gray-200 text-xs font-light mt-2 text-center">{{ message }}</div>
</slot>
</div>
</div>
</template>
@@ -23,6 +25,9 @@ export default {
computed: {
message() {
return this.text || this.$strings.MessagePleaseWait
},
hasSlotContent() {
return this.$slots.default && this.$slots.default.length > 0
}
}
}
+7 -5
View File
@@ -4,10 +4,11 @@
<div ref="wrapper" class="relative">
<form @submit.prevent="submitForm">
<div ref="inputWrapper" role="list" style="min-height: 36px" class="flex-wrap relative w-full shadow-xs flex items-center border border-gray-600 rounded-sm px-2 py-1" :class="wrapperClass" @click.stop.prevent="clickWrapper" @mouseup.stop.prevent @mousedown.prevent>
<div v-for="item in selected" :key="item" role="listitem" class="rounded-full px-2 py-1 mx-0.5 my-0.5 text-xs bg-bg flex flex-nowrap break-all items-center relative">
<!-- Use index in v-for and key in case the same key exists multiple times -->
<div v-for="(item, idx) in selected" :key="item + '-' + idx" role="listitem" class="rounded-full px-2 py-1 mx-0.5 my-0.5 text-xs bg-bg flex flex-nowrap break-all items-center relative">
<div v-if="!disabled" class="w-full h-full rounded-full absolute top-0 left-0 px-1 bg-bg/75 flex items-center justify-end opacity-0 hover:opacity-100" :class="{ 'opacity-100': inputFocused }">
<button v-if="showEdit" type="button" :aria-label="$strings.ButtonEdit" class="material-symbols text-white hover:text-warning cursor-pointer" style="font-size: 1.1rem" @click.stop="editItem(item)">edit</button>
<button type="button" :aria-label="$strings.ButtonRemove" class="material-symbols text-white hover:text-error focus:text-error cursor-pointer" style="font-size: 1.1rem" @click.stop="removeItem(item)" @keydown.enter.stop.prevent="removeItem(item)" @focus="setInputFocused(true)" @blur="setInputFocused(false)" tabindex="0">close</button>
<button type="button" :aria-label="$strings.ButtonRemove" class="material-symbols text-white hover:text-error focus:text-error cursor-pointer" style="font-size: 1.1rem" @click.stop="removeItem(item, idx)" @keydown.enter.stop.prevent="removeItem(item, idx)" @focus="setInputFocused(true)" @blur="setInputFocused(false)" tabindex="0">close</button>
</div>
{{ item }}
</div>
@@ -259,8 +260,9 @@ export default {
}
this.focus()
},
removeItem(item) {
var remaining = this.selected.filter((i) => i !== item)
removeItem(item, idx) {
var remaining = this.selected.slice()
remaining.splice(idx, 1)
this.$emit('input', remaining)
this.$emit('removedItem', item)
this.$nextTick(() => {
@@ -276,7 +278,7 @@ export default {
})
},
insertNewItem(item) {
this.selected.push(item)
if (!this.selected.includes(item)) this.selected.push(item)
this.$emit('input', this.selected)
this.$emit('newItem', item)
this.textInput = null
@@ -287,7 +287,7 @@ export default {
})
},
insertNewItem(item) {
this.selected.push(item)
if (!this.selected.find((i) => i.name === item.name)) this.selected.push(item)
this.$emit('input', this.selected)
this.$emit('newItem', item)
this.textInput = null
+3 -7
View File
@@ -1,12 +1,8 @@
<template>
<button :aria-label="isRead ? $strings.MessageMarkAsNotFinished : $strings.MessageMarkAsFinished" class="icon-btn rounded-md flex items-center justify-center h-9 w-9 relative" :class="borderless ? '' : 'bg-primary border border-gray-600'" @click="clickBtn">
<div class="w-5 h-5 text-white relative">
<svg v-if="isRead" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="rgb(63, 181, 68)">
<path d="M19 1H5c-1.1 0-1.99.9-1.99 2L3 15.93c0 .69.35 1.3.88 1.66L12 23l8.11-5.41c.53-.36.88-.97.88-1.66L21 3c0-1.1-.9-2-2-2zm-9 15l-5-5 1.41-1.41L10 13.17l7.59-7.59L19 7l-9 9z" />
</svg>
<svg v-else xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">
<path d="M19 1H5c-1.1 0-1.99.9-1.99 2L3 15.93c0 .69.35 1.3.88 1.66L12 23l8.11-5.41c.53-.36.88-.97.88-1.66L21 3c0-1.1-.9-2-2-2zm-7 19.6l-7-4.66V3h14v12.93l-7 4.67zm-2.01-7.42l-2.58-2.59L6 12l4 4 8-8-1.42-1.42z" />
</svg>
<div class="w-5 h-5 relative">
<span v-if="isRead" class="material-symbols fill text-xl text-success">beenhere</span>
<span v-else class="material-symbols text-xl text-white">beenhere</span>
</div>
</button>
</template>
+3 -2
View File
@@ -1,6 +1,6 @@
<template>
<div ref="wrapper" class="relative">
<input :id="inputId" :name="inputName" ref="input" v-model="inputValue" :type="actualType" :step="step" :min="min" :readonly="readonly" :disabled="disabled" :placeholder="placeholder" dir="auto" class="rounded-sm bg-primary text-gray-200 focus:bg-bg focus:outline-hidden border h-full w-full" :class="classList" @keyup="keyup" @change="change" @focus="focused" @blur="blurred" />
<input :id="inputId" :name="inputName" ref="input" v-model="inputValue" :type="actualType" :step="step" :min="min" :readonly="readonly" :disabled="disabled" :placeholder="placeholder" :autocomplete="autocomplete" dir="auto" class="rounded-sm bg-primary text-gray-200 focus:bg-bg focus:outline-hidden border h-full w-full" :class="classList" @keyup="keyup" @change="change" @focus="focused" @blur="blurred" />
<div v-if="clearable && inputValue" class="absolute top-0 right-0 h-full px-2 flex items-center justify-center">
<span class="material-symbols text-gray-300 cursor-pointer" style="font-size: 1.1rem" @click.stop.prevent="clear">close</span>
</div>
@@ -41,7 +41,8 @@ export default {
step: [String, Number],
min: [String, Number],
customInputClass: String,
trimWhitespace: Boolean
trimWhitespace: Boolean,
autocomplete: String
},
data() {
return {
+3 -2
View File
@@ -6,7 +6,7 @@
<em v-if="note" class="font-normal text-xs pl-2">{{ note }}</em>
</label>
</slot>
<ui-text-input :placeholder="placeholder || label" :inputId="identifier" ref="input" v-model="inputValue" :disabled="disabled" :readonly="readonly" :type="type" :min="min" :show-copy="showCopy" class="w-full" :class="inputClass" :trim-whitespace="trimWhitespace" @blur="inputBlurred" />
<ui-text-input :placeholder="placeholder || label" :inputId="identifier" ref="input" v-model="inputValue" :disabled="disabled" :readonly="readonly" :type="type" :min="min" :show-copy="showCopy" :autocomplete="autocomplete" class="w-full" :class="inputClass" :trim-whitespace="trimWhitespace" @blur="inputBlurred" />
</div>
</template>
@@ -26,7 +26,8 @@ export default {
disabled: Boolean,
inputClass: String,
showCopy: Boolean,
trimWhitespace: Boolean
trimWhitespace: Boolean,
autocomplete: String
},
data() {
return {}
+12 -3
View File
@@ -22,7 +22,8 @@ export default {
type: Number,
default: 0
},
disabled: Boolean
disabled: Boolean,
plaintext: Boolean
},
data() {
return {
@@ -46,7 +47,11 @@ export default {
methods: {
updateText() {
if (this.tooltip) {
this.tooltip.innerHTML = this.text
if (this.plaintext) {
this.tooltip.textContent = this.text
} else {
this.tooltip.innerHTML = this.text
}
this.setTooltipPosition(this.tooltip)
}
},
@@ -58,7 +63,11 @@ export default {
tooltip.className = 'tooltip-wrapper absolute px-2 py-1 text-white text-xs rounded-sm shadow-lg max-w-xs text-center hidden sm:block'
tooltip.style.zIndex = 100
tooltip.style.backgroundColor = 'rgba(0,0,0,0.85)'
tooltip.innerHTML = this.text
if (this.plaintext) {
tooltip.textContent = this.text
} else {
tooltip.innerHTML = this.text
}
tooltip.addEventListener('mouseover', this.cancelHide)
tooltip.addEventListener('mouseleave', this.hideTooltip)
@@ -1,40 +1,6 @@
<template>
<ui-tooltip :text="$strings.LabelExplicit" direction="top">
<svg xmlns="http://www.w3.org/2000/svg" width="12px" height="12px" viewBox="0 0 512 512" class="ml-1">
<path
fill="white"
d="M 89.00,40.12
C 89.00,40.12 127.00,40.12 127.00,40.12
127.00,40.12 198.00,40.12 198.00,40.12
198.00,40.12 416.00,40.12 416.00,40.12
446.58,40.05 472.95,66.42 473.00,97.00
473.00,97.00 473.00,303.00 473.00,303.00
473.00,303.00 473.00,418.00 473.00,418.00
472.65,447.55 445.06,472.95 416.00,473.00
416.00,473.00 210.00,473.00 210.00,473.00
210.00,473.00 95.00,473.00 95.00,473.00
65.45,472.65 40.05,445.06 40.00,416.00
40.00,416.00 40.00,136.00 40.00,136.00
40.00,136.00 40.00,109.00 40.00,109.00
40.00,109.00 40.00,96.00 40.00,96.00
40.07,81.58 46.89,67.14 57.01,57.01
61.17,52.86 64.86,50.13 70.00,47.31
77.25,43.33 81.02,42.18 89.00,40.12 Z
M 337.00,121.00
C 337.00,121.00 175.00,121.00 175.00,121.00
175.00,121.00 175.00,392.00 175.00,392.00
175.00,392.00 337.00,392.00 337.00,392.00
337.00,392.00 337.00,349.00 337.00,349.00
337.00,349.00 226.00,349.00 226.00,349.00
226.00,349.00 226.00,274.00 226.00,274.00
226.00,274.00 332.00,274.00 332.00,274.00
332.00,274.00 332.00,232.00 332.00,232.00
332.00,232.00 226.00,232.00 226.00,232.00
226.00,232.00 226.00,164.00 226.00,164.00
226.00,164.00 337.00,164.00 337.00,164.00
337.00,164.00 337.00,121.00 337.00,121.00 Z"
/>
</svg>
<span class="material-symbols fill text-sm ml-1 !block">explicit</span>
</ui-tooltip>
</template>
+2 -2
View File
@@ -132,10 +132,10 @@ export default {
editAuthor(author) {
this.$store.commit('globals/showEditAuthorModal', author)
},
editItem(libraryItem) {
editItem(libraryItem, tab = 'details') {
var itemIds = this.items.map((e) => e.id)
this.$store.commit('setBookshelfBookIds', itemIds)
this.$store.commit('showEditModal', libraryItem)
this.$store.commit('showEditModalOnTab', { libraryItem, tab: tab || 'details' })
},
selectItem(payload) {
this.$emit('selectEntity', payload)
+5 -3
View File
@@ -199,7 +199,7 @@ export default {
}
} else {
console.error('User has no more accessible libraries')
this.$store.commit('libraries/setCurrentLibrary', null)
this.$store.commit('libraries/setCurrentLibrary', { id: null })
}
}
},
@@ -371,11 +371,13 @@ export default {
},
customMetadataProviderAdded(provider) {
if (!provider?.id) return
this.$store.commit('scanners/addCustomMetadataProvider', provider)
// Refresh providers cache
this.$store.dispatch('scanners/refreshProviders')
},
customMetadataProviderRemoved(provider) {
if (!provider?.id) return
this.$store.commit('scanners/removeCustomMetadataProvider', provider)
// Refresh providers cache
this.$store.dispatch('scanners/refreshProviders')
},
initializeSocket() {
if (this.$root.socket) {
+2 -2
View File
@@ -118,8 +118,8 @@ export default {
propsData: props,
parent: this,
created() {
this.$on('edit', (entity) => {
if (_this.editEntity) _this.editEntity(entity)
this.$on('edit', (entity, tab) => {
if (_this.editEntity) _this.editEntity(entity, tab)
})
this.$on('select', ({ entity, shiftKey }) => {
if (_this.selectEntity) _this.selectEntity(entity, shiftKey)
+1
View File
@@ -60,6 +60,7 @@ module.exports = {
proxy,
io: {
server: false,
sockets: [
{
name: 'dev',
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "audiobookshelf-client",
"version": "2.27.0",
"version": "2.37.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "audiobookshelf-client",
"version": "2.27.0",
"version": "2.37.0",
"license": "ISC",
"dependencies": {
"@nuxtjs/axios": "^5.13.6",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "audiobookshelf-client",
"version": "2.27.0",
"version": "2.37.0",
"buildNumber": 1,
"description": "Self-hosted audiobook and podcast client",
"main": "index.js",
+142 -5
View File
@@ -1,6 +1,6 @@
<template>
<div id="page-wrapper" class="page p-6 overflow-y-auto relative" :class="streamLibraryItem ? 'streaming' : ''">
<div class="w-full max-w-xl mx-auto">
<div class="w-full max-w-2xl mx-auto">
<h1 class="text-2xl">{{ $strings.HeaderAccount }}</h1>
<div class="my-4">
@@ -69,8 +69,52 @@
</app-settings-content>
</div>
<div class="py-4 mt-8 flex">
<ui-btn color="bg-primary flex items-center text-lg" @click="logout"><span class="material-symbols mr-4 icon-text">logout</span>{{ $strings.ButtonLogout }}</ui-btn>
<div v-if="!isGuest">
<div class="w-full h-px bg-white/10 my-4" />
<app-settings-content :header-text="$strings.HeaderSessions">
<table v-if="authSessions.length" class="tracksTable mt-4 table-fixed w-full">
<tr>
<th class="text-left">{{ $strings.LabelDeviceInfo }}</th>
<th class="text-left hidden sm:table-cell w-36">{{ $strings.LabelIpAddress }}</th>
<th class="text-left w-30 sm:w-40">{{ $strings.LabelLastUpdate }}</th>
<th class="w-12"></th>
</tr>
<tr v-for="session in authSessions" :key="session.id">
<td class="max-w-0">
<div class="flex items-center gap-0.5 min-w-0">
<span class="text-sm text-gray-100 truncate min-w-0" :title="session.userAgent">{{ getSessionDeviceLabel(session) }}</span>
<ui-tooltip v-if="session.current" direction="top" :text="$strings.LabelCurrent" class="inline-flex shrink-0">
<span class="material-symbols text-success text-sm leading-none">check</span>
</ui-tooltip>
</div>
</td>
<td class="hidden sm:table-cell w-36">
<p class="text-sm text-gray-100 truncate" :title="session.ipAddress">{{ session.ipAddress || '-' }}</p>
</td>
<td class="w-30 sm:w-40">
<ui-tooltip v-if="session.updatedAt" direction="top" :text="$formatDatetime(session.updatedAt, dateFormat, timeFormat)">
<p class="text-xs sm:text-sm text-gray-100">{{ $dateDistanceFromNow(session.updatedAt) }}</p>
</ui-tooltip>
</td>
<td class="w-12">
<div class="flex justify-end items-center h-10">
<ui-icon-btn icon="delete" borderless :size="8" icon-font-size="1.1rem" :disabled="deletingSessionId === session.id || loadingAuthSessions" @click="deleteAuthSessionClick(session)" />
</div>
</td>
</tr>
</table>
<div v-if="authSessionsNumPages > 1" class="flex items-center justify-end py-1">
<ui-icon-btn icon="arrow_back_ios_new" :size="7" icon-font-size="1rem" class="mx-1" :disabled="loadingAuthSessions || authSessionsPage === 0" @click="prevAuthSessionsPage" />
<p class="text-sm mx-1">{{ $getString('LabelPaginationPageXOfY', [authSessionsPage + 1, authSessionsNumPages]) }}</p>
<ui-icon-btn icon="arrow_forward_ios" :size="7" icon-font-size="1rem" class="mx-1" :disabled="loadingAuthSessions || authSessionsPage >= authSessionsNumPages - 1" @click="nextAuthSessionsPage" />
</div>
</app-settings-content>
</div>
<div class="py-4 mt-8 flex flex-wrap gap-2">
<ui-btn v-if="!isGuest" color="bg-primary flex items-center text-lg" :disabled="loggingOut" @click="logout(true)"> <span class="material-symbols mr-4 icon-text">devices</span>{{ $strings.ButtonLogoutAllDevices }} </ui-btn>
<ui-btn color="bg-primary flex items-center text-lg" :disabled="loggingOut" @click="logout(false)"><span class="material-symbols mr-4 icon-text">logout</span>{{ $strings.ButtonLogout }}</ui-btn>
</div>
<modals-emails-user-e-reader-device-modal v-model="showEReaderDeviceModal" :existing-devices="revisedEreaderDevices" :ereader-device="selectedEReaderDevice" @update="ereaderDevicesUpdated" />
@@ -87,6 +131,13 @@ export default {
newPassword: null,
confirmPassword: null,
changingPassword: false,
loggingOut: false,
authSessions: [],
authSessionsPage: 0,
authSessionsNumPages: 0,
authSessionsItemsPerPage: 10,
loadingAuthSessions: false,
deletingSessionId: null,
selectedLanguage: '',
newEReaderDevice: {
name: '',
@@ -129,13 +180,19 @@ export default {
},
revisedEreaderDevices() {
return this.ereaderDevices.filter((device) => device.users?.length === 1)
},
dateFormat() {
return this.$store.getters['getServerSetting']('dateFormat')
},
timeFormat() {
return this.$store.getters['getServerSetting']('timeFormat')
}
},
methods: {
updateLocalLanguage(lang) {
this.$setLanguageCode(lang)
},
logout() {
logout(allDevices = false) {
// Disconnect from socket
if (this.$root.socket) {
console.log('Disconnecting from socket', this.$root.socket.id)
@@ -149,8 +206,10 @@ export default {
this.$store.commit('libraries/setUserPlaylists', [])
this.$store.commit('libraries/setCollections', [])
this.loggingOut = true
const url = allDevices ? '/logout?allDevices=1' : '/logout'
this.$axios
.$post('/logout')
.$post(url)
.then((logoutPayload) => {
const redirect_url = logoutPayload.redirect_url
@@ -163,6 +222,9 @@ export default {
.catch((error) => {
console.error(error)
})
.finally(() => {
this.loggingOut = false
})
},
resetForm() {
this.password = null
@@ -238,11 +300,86 @@ export default {
},
ereaderDevicesUpdated(ereaderDevices) {
this.ereaderDevices = ereaderDevices
},
loadAuthSessions(page = 0) {
if (this.loadingAuthSessions) return
if (page < 0) return
if (this.authSessionsNumPages > 0 && page > this.authSessionsNumPages - 1) return
this.loadingAuthSessions = true
this.$axios
.$get(`/api/me/sessions?page=${page}&itemsPerPage=${this.authSessionsItemsPerPage}`)
.then((data) => {
this.authSessions = data.sessions || []
this.authSessionsPage = data.page ?? page
this.authSessionsNumPages = data.numPages ?? 0
})
.catch((error) => {
console.error('Failed to load sessions', error)
})
.finally(() => {
this.loadingAuthSessions = false
})
},
prevAuthSessionsPage() {
if (this.authSessionsPage <= 0) return
this.loadAuthSessions(this.authSessionsPage - 1)
},
nextAuthSessionsPage() {
if (this.authSessionsPage >= this.authSessionsNumPages - 1) return
this.loadAuthSessions(this.authSessionsPage + 1)
},
deleteAuthSessionClick(session) {
this.$store.commit('globals/setConfirmPrompt', {
message: this.$getString('MessageConfirmLogoutDevice', [this.getSessionDeviceLabel(session)]),
callback: (confirmed) => {
if (confirmed) this.deleteAuthSession(session)
},
type: 'yesNo'
})
},
deleteAuthSession(session) {
// Call logout instead for current session
if (session.current) {
this.logout(false)
return
}
this.deletingSessionId = session.id
this.$axios
.$delete(`/api/me/sessions/${session.id}`)
.then(() => {
if (this.authSessions.length === 1 && this.authSessionsPage > 0) {
this.loadAuthSessions(this.authSessionsPage - 1)
} else {
this.loadAuthSessions(this.authSessionsPage)
}
})
.catch((error) => {
console.error('Failed to delete session', error)
this.$toast.error(this.$strings.ToastFailedToDelete)
})
.finally(() => {
this.deletingSessionId = null
})
},
getSessionDeviceLabel(session) {
const deviceInfo = session.deviceInfo
if (!deviceInfo) return session.userAgent || '-'
const parts = []
if (deviceInfo.model) parts.push(deviceInfo.model)
if (deviceInfo.osName) parts.push(`${deviceInfo.osName}${deviceInfo.osVersion ? ` ${deviceInfo.osVersion}` : ''}`)
if (deviceInfo.browserName) parts.push(deviceInfo.browserName)
return parts.join(' / ') || session.userAgent || '-'
}
},
mounted() {
this.selectedLanguage = this.$languageCodes.current
this.ereaderDevices = this.$store.state.libraries.ereaderDevices || []
if (!this.isGuest) {
this.loadAuthSessions()
}
}
}
</script>
+398 -91
View File
@@ -12,24 +12,24 @@
<p class="text-base font-mono ml-4 hidden md:block">{{ $secondsToTimestamp(mediaDurationRounded) }}</p>
</div>
<div class="flex flex-wrap-reverse lg:flex-nowrap justify-center py-4 px-4">
<div class="flex flex-wrap-reverse min-[1120px]:flex-nowrap justify-center py-4 px-4">
<div class="w-full max-w-3xl py-4">
<div class="flex items-center">
<div class="w-12 hidden lg:block" />
<div class="w-12 hidden min-w-[1120px]:block" />
<p class="text-lg mb-4 font-semibold">{{ $strings.HeaderChapters }}</p>
<div class="grow" />
<ui-checkbox v-model="showSecondInputs" checkbox-bg="primary" small label-class="text-sm text-gray-200 pl-1" :label="$strings.LabelShowSeconds" class="mx-2" />
<div class="w-32 hidden lg:block" />
<div class="w-32 hidden min-[1120px]:block" />
</div>
<div class="flex items-center mb-3 py-1 -mx-1">
<div class="w-12 hidden lg:block" />
<div class="w-12 hidden min-[1120px]:block" />
<ui-btn v-if="chapters.length" color="bg-primary" small class="mx-1 whitespace-nowrap" @click.stop="removeAllChaptersClick">{{ $strings.ButtonRemoveAll }}</ui-btn>
<ui-btn v-if="newChapters.length > 1" :color="showShiftTimes ? 'bg-bg' : 'bg-primary'" class="mx-1 whitespace-nowrap" small @click="showShiftTimes = !showShiftTimes">{{ $strings.ButtonShiftTimes }}</ui-btn>
<ui-btn color="bg-primary" small :class="{ 'mx-1': newChapters.length > 1 }" @click="showFindChaptersModal = true">{{ $strings.ButtonLookup }}</ui-btn>
<div class="grow" />
<ui-btn v-if="hasChanges" small class="mx-1" @click.stop="resetChapters">{{ $strings.ButtonReset }}</ui-btn>
<ui-btn v-if="hasChanges" color="bg-success" class="mx-1" :disabled="!hasChanges" small @click="saveChapters">{{ $strings.ButtonSave }}</ui-btn>
<div class="w-32 hidden lg:block" />
<div class="w-32 hidden min-[1120px]:block" />
</div>
<div class="overflow-hidden">
@@ -53,54 +53,104 @@
<div class="flex text-xs uppercase text-gray-300 font-semibold mb-2">
<div class="w-8 min-w-8 md:w-12 md:min-w-12"></div>
<div class="w-24 min-w-24 md:w-32 md:min-w-32 px-2">{{ $strings.LabelStart }}</div>
<div class="grow px-2">{{ $strings.LabelTitle }}</div>
<div class="w-38 min-w-38 md:w-40 md:min-w-40 px-1 pl-8">{{ $strings.LabelStart }}</div>
<div class="grow px-1 min-w-54">{{ $strings.LabelTitle }}</div>
<div class="w-7 min-w-7 px-1 flex items-center justify-center">
<ui-tooltip :text="allChaptersLocked ? $strings.TooltipUnlockAllChapters : $strings.TooltipLockAllChapters" direction="bottom">
<button class="w-7 h-7 rounded-full flex items-center justify-center cursor-pointer transition-colors duration-150" :class="allChaptersLocked ? 'text-orange-400 hover:text-orange-300' : 'text-gray-300 hover:text-white'" @click="toggleAllChaptersLock">
<span class="material-symbols text-xl">{{ allChaptersLocked ? 'lock' : 'lock_open' }}</span>
</button>
</ui-tooltip>
</div>
<div class="w-32"></div>
</div>
<template v-for="chapter in newChapters">
<div :key="chapter.id" class="flex py-1">
<div class="w-8 min-w-8 md:w-12 md:min-w-12">#{{ chapter.id + 1 }}</div>
<div class="w-24 min-w-24 md:w-32 md:min-w-32 px-1">
<ui-text-input v-if="showSecondInputs" v-model="chapter.start" type="number" class="text-xs" @change="checkChapters" />
<ui-time-picker v-else class="text-xs" v-model="chapter.start" :show-three-digit-hour="mediaDuration >= 360000" @change="checkChapters" />
</div>
<div class="grow px-1">
<ui-text-input v-model="chapter.title" @change="checkChapters" class="text-xs min-w-52" />
</div>
<div class="w-32 min-w-32 px-2 py-1">
<div class="flex items-center">
<ui-tooltip :text="$strings.MessageRemoveChapter" direction="bottom">
<button v-if="newChapters.length > 1" class="w-7 h-7 rounded-full flex items-center justify-center text-gray-300 hover:text-error transform hover:scale-110 duration-150" @click="removeChapter(chapter)">
<span class="material-symbols text-base">remove</span>
</button>
</ui-tooltip>
<div v-for="chapter in newChapters" :key="chapter.id" class="flex py-1">
<div class="w-8 min-w-8 md:w-12 md:min-w-12">#{{ chapter.id + 1 }}</div>
<div class="w-38 min-w-38 md:w-40 md:min-w-40 px-1">
<div class="flex items-center gap-1">
<ui-tooltip :text="$strings.TooltipSubtractOneSecond" direction="bottom">
<button
class="w-6 h-6 rounded-full flex items-center justify-center text-gray-300 hover:text-white transform hover:scale-110 duration-150 flex-shrink-0"
:class="{ 'opacity-50 cursor-not-allowed': chapter.id === 0 && chapter.start - timeIncrementAmount < 0 }"
@click="incrementChapterTime(chapter, -timeIncrementAmount)"
:disabled="chapter.id === 0 && chapter.start - timeIncrementAmount < 0"
>
<span class="material-symbols text-sm">remove</span>
</button>
</ui-tooltip>
<ui-tooltip :text="$strings.MessageInsertChapterBelow" direction="bottom">
<button class="w-7 h-7 rounded-full flex items-center justify-center text-gray-300 hover:text-success transform hover:scale-110 duration-150" @click="addChapter(chapter)">
<span class="material-symbols text-lg">add</span>
</button>
</ui-tooltip>
<ui-tooltip :text="selectedChapterId === chapter.id && isPlayingChapter ? $strings.MessagePauseChapter : $strings.MessagePlayChapter" direction="bottom">
<button class="w-7 h-7 rounded-full flex items-center justify-center text-gray-300 hover:text-white transform hover:scale-110 duration-150" @click="playChapter(chapter)">
<widgets-loading-spinner v-if="selectedChapterId === chapter.id && isLoadingChapter" />
<span v-else-if="selectedChapterId === chapter.id && isPlayingChapter" class="material-symbols text-base">pause</span>
<span v-else class="material-symbols text-base">play_arrow</span>
</button>
</ui-tooltip>
<ui-tooltip v-if="chapter.error" :text="chapter.error" direction="left">
<button class="w-7 h-7 rounded-full flex items-center justify-center text-error">
<span class="material-symbols text-lg">error_outline</span>
</button>
</ui-tooltip>
<div class="flex-1 min-w-0">
<ui-text-input v-if="showSecondInputs" v-model="chapter.start" type="number" class="text-xs" @change="checkChapters" />
<ui-time-picker v-else class="text-xs" v-model="chapter.start" :show-three-digit-hour="mediaDuration >= 360000" @change="checkChapters" />
</div>
<ui-tooltip :text="$strings.TooltipAddOneSecond" direction="bottom">
<button class="w-6 h-6 rounded-full flex items-center justify-center text-gray-300 hover:text-white transform hover:scale-110 duration-150 flex-shrink-0" :class="{ 'opacity-50 cursor-not-allowed': chapter.start + timeIncrementAmount >= mediaDuration }" @click="incrementChapterTime(chapter, timeIncrementAmount)" :disabled="chapter.start + timeIncrementAmount >= mediaDuration">
<span class="material-symbols text-sm">add</span>
</button>
</ui-tooltip>
</div>
</div>
</template>
<div class="grow px-1">
<ui-text-input v-model="chapter.title" @change="checkChapters" class="text-xs min-w-52" />
</div>
<div class="w-7 min-w-7 px-1 py-1">
<div class="flex items-center justify-center">
<ui-tooltip :text="lockedChapters.has(chapter.id) ? $strings.TooltipUnlockChapter : $strings.TooltipLockChapter" direction="bottom">
<button class="w-7 h-7 rounded-full flex items-center justify-center transform hover:scale-110 duration-150 flex-shrink-0" :class="lockedChapters.has(chapter.id) ? 'text-orange-400 hover:text-orange-300' : 'text-gray-300 hover:text-white'" @click="toggleChapterLock(chapter, $event)">
<span class="material-symbols text-base">{{ lockedChapters.has(chapter.id) ? 'lock' : 'lock_open' }}</span>
</button>
</ui-tooltip>
</div>
</div>
<div class="w-32 min-w-32 px-2 py-1">
<div class="flex items-center">
<ui-tooltip :text="$strings.MessageRemoveChapter" direction="bottom">
<button v-if="newChapters.length > 1" class="w-7 h-7 rounded-full flex items-center justify-center text-gray-300 hover:text-error transform hover:scale-110 duration-150" @click="removeChapter(chapter)">
<span class="material-symbols text-base">delete</span>
</button>
</ui-tooltip>
<ui-tooltip :text="$strings.MessageInsertChapterBelow" direction="bottom">
<button class="w-7 h-7 rounded-full flex items-center justify-center text-gray-300 hover:text-success transform hover:scale-110 duration-150" @click="addChapter(chapter)">
<span class="material-symbols text-lg">add_row_below</span>
</button>
</ui-tooltip>
<ui-tooltip :text="selectedChapterId === chapter.id && isPlayingChapter ? $strings.MessagePauseChapter : $strings.MessagePlayChapter" direction="bottom">
<button :disabled="!getAudioTrackForTime(chapter.start)" class="w-7 h-7 rounded-full flex items-center justify-center text-gray-300 hover:text-white transform hover:scale-110 duration-150 disabled:opacity-50 disabled:cursor-not-allowed" @click="playChapter(chapter)">
<widgets-loading-spinner v-if="selectedChapterId === chapter.id && isLoadingChapter" />
<span v-else-if="selectedChapterId === chapter.id && isPlayingChapter" class="material-symbols text-base">pause</span>
<span v-else class="material-symbols text-xl">play_arrow</span>
</button>
</ui-tooltip>
<ui-tooltip v-if="selectedChapterId === chapter.id && (isPlayingChapter || isLoadingChapter)" :text="$strings.TooltipAdjustChapterStart" direction="bottom">
<div class="ml-2 text-xs text-gray-300 font-mono min-w-10 cursor-pointer hover:text-white transition-colors duration-150" @click="adjustChapterStartTime(chapter)">{{ elapsedTime }}s</div>
</ui-tooltip>
<ui-tooltip v-if="chapter.error" :text="chapter.error" plaintext direction="left">
<button class="w-7 h-7 rounded-full flex items-center justify-center text-error">
<span class="material-symbols text-lg">error_outline</span>
</button>
</ui-tooltip>
</div>
</div>
</div>
<div class="flex items-center mt-4 mb-2">
<div class="w-8 min-w-8 md:w-12 md:min-w-12"></div>
<div class="w-38 min-w-38 md:w-40 md:min-w-40 px-1"></div>
<div class="flex items-center gap-2 grow px-1">
<ui-text-input v-model="bulkChapterInput" :placeholder="$strings.PlaceholderBulkChapterInput" class="text-xs grow min-w-52" @keyup.enter="handleBulkChapterAdd" />
</div>
<div class="w-39 min-w-39 px-1 py-1">
<ui-tooltip :text="$strings.TooltipAddChapters" direction="bottom" class="inline-block align-middle">
<button class="w-5 h-5 rounded-full flex items-center justify-center text-gray-300 hover:text-success transform hover:scale-110 duration-150 flex-shrink-0" :aria-label="$strings.TooltipAddChapters" :class="{ 'opacity-50 cursor-not-allowed': !bulkChapterInput.trim() }" :disabled="!bulkChapterInput.trim()" @click="handleBulkChapterAdd">
<span class="material-symbols text-lg">add</span>
</button>
</ui-tooltip>
</div>
</div>
</div>
<div class="w-full max-w-xl py-4 px-2">
<div class="w-full max-w-3xl min-[1120px]:max-w-xl py-4 px-2">
<div class="flex items-center mb-4 py-1">
<p class="text-lg font-semibold">{{ $strings.HeaderAudioTracks }}</p>
<div class="grow" />
@@ -110,23 +160,19 @@
</ui-tooltip>
</div>
<div class="flex text-xs uppercase text-gray-300 font-semibold mb-2">
<div class="grow">{{ $strings.LabelFilename }}</div>
<div class="grow min-[1120px]:max-w-64 xl:max-w-sm">{{ $strings.LabelFilename }}</div>
<div class="w-20">{{ $strings.LabelDuration }}</div>
<div class="w-20 hidden md:block text-center">{{ $strings.HeaderChapters }}</div>
</div>
<template v-for="track in audioTracks">
<div :key="track.ino" class="flex items-center py-2" :class="currentTrackIndex === track.index && isPlayingChapter ? 'bg-success/10' : ''">
<div class="grow max-w-[calc(100%-80px)] pr-2">
<p class="text-xs truncate max-w-sm">{{ track.metadata.filename }}</p>
</div>
<div class="w-20" style="min-width: 80px">
<p class="text-xs font-mono text-gray-200">{{ $secondsToTimestamp(Math.round(track.duration), false, true) }}</p>
</div>
<div class="w-20 hidden md:flex justify-center" style="min-width: 80px">
<span v-if="(track.chapters || []).length" class="material-symbols text-success text-sm">check</span>
</div>
<div v-for="track in audioTracks" :key="track.ino" class="flex items-center py-2" :class="currentTrackIndex === track.index && isPlayingChapter ? 'bg-success/10' : ''">
<div class="pr-2 grow min-[1120px]:max-w-64 xl:max-w-sm">
<p class="text-xs truncate">{{ track.metadata.filename }}</p>
</div>
</template>
<div class="w-20" style="min-width: 80px">
<p class="text-xs font-mono text-gray-200">{{ $secondsToTimestamp(Math.round(track.duration), false, true) }}</p>
</div>
<div class="w-20 hidden md:flex justify-center" style="min-width: 80px"><span v-if="(track.chapters || []).length" class="material-symbols text-success text-sm">check</span></div>
</div>
</div>
</div>
@@ -134,6 +180,7 @@
<ui-loading-indicator />
</div>
<!-- audible chapter lookup modal -->
<modals-modal v-model="showFindChaptersModal" name="edit-book" :width="500" :processing="findingChapters">
<template #outer>
<div class="absolute top-0 left-0 p-5 w-2/3 overflow-hidden pointer-events-none">
@@ -159,12 +206,16 @@
</div>
</div>
<div v-else class="w-full p-4">
<div class="flex justify-between mb-4">
<div class="flex mb-4">
<button class="w-7 h-7 rounded-full flex items-center justify-center text-gray-300 hover:text-white flex-shrink-0" :aria-label="$strings.ButtonBack" @click="resetChapterLookupData">
<span class="material-symbols text-lg">arrow_back</span>
</button>
<p>
{{ $strings.LabelDurationFound }} <span class="font-semibold">{{ $secondsToTimestamp(chapterData.runtimeLengthSec) }}</span
><br />
{{ $strings.LabelDurationFound }} <span class="font-semibold">{{ $secondsToTimestamp(chapterData.runtimeLengthSec) }}</span>
<br />
<span class="font-semibold" :class="{ 'text-warning': chapters.length !== chapterData.chapters.length }">{{ chapterData.chapters.length }}</span> {{ $strings.LabelChaptersFound }}
</p>
<div class="grow" />
<p>
{{ $strings.LabelYourAudiobookDuration }}: <span class="font-semibold">{{ $secondsToTimestamp(mediaDurationRounded) }}</span
><br />
@@ -198,17 +249,49 @@
<p class="pl-2">{{ $strings.MessageChapterStartIsAfter }}</p>
</div>
</div>
<div class="flex items-center pt-2">
<ui-btn small color="bg-primary" class="mr-1" @click="applyChapterNamesOnly">{{ $strings.ButtonMapChapterTitles }}</ui-btn>
<ui-tooltip :text="$strings.MessageMapChapterTitles" direction="top" class="flex items-center">
<span class="material-symbols text-xl text-gray-200">info</span>
</ui-tooltip>
<div class="grow" />
<div class="flex items-center pt-2 justify-between">
<div class="flex items-center gap-2">
<ui-btn small color="bg-primary" @click="applyChapterNamesOnly">{{ $strings.ButtonMapChapterTitles }}</ui-btn>
<ui-tooltip :text="$strings.MessageMapChapterTitles" direction="top" class="flex items-center">
<span class="material-symbols text-xl text-gray-200">info</span>
</ui-tooltip>
</div>
<ui-btn small color="bg-success" @click="applyChapterData">{{ $strings.ButtonApplyChapters }}</ui-btn>
</div>
</div>
</div>
</modals-modal>
<!-- create bulk chapters modal -->
<modals-modal v-model="showBulkChapterModal" name="bulk-chapters" :width="400">
<template #outer>
<div class="absolute top-0 left-0 p-5 w-2/3 overflow-hidden pointer-events-none">
<p class="text-3xl text-white truncate pointer-events-none">{{ $strings.HeaderBulkChapterModal }}</p>
</div>
</template>
<div class="w-full h-full max-h-full text-sm rounded-lg bg-bg shadow-lg border border-black-300 relative p-6">
<div class="flex flex-col space-y-8">
<p class="text-base">{{ $strings.MessageBulkChapterPattern }}</p>
<div v-if="detectedPattern" class="text-sm text-gray-400 bg-gray-800 p-2 rounded">
<strong>{{ $strings.LabelDetectedPattern }}</strong> "{{ detectedPattern.before }}{{ formatNumberWithPadding(detectedPattern.startingNumber, detectedPattern) }}{{ detectedPattern.after }}"
<br />
<strong>{{ $strings.LabelNextChapters }}</strong>
"{{ detectedPattern.before }}{{ formatNumberWithPadding(detectedPattern.startingNumber + 1, detectedPattern) }}{{ detectedPattern.after }}", "{{ detectedPattern.before }}{{ formatNumberWithPadding(detectedPattern.startingNumber + 2, detectedPattern) }}{{ detectedPattern.after }}", etc.
</div>
<div class="flex px-1 items-center">
<label class="text-base font-medium">{{ $strings.LabelNumberOfChapters }}</label>
<div class="grow" />
<ui-text-input v-model="bulkChapterCount" type="number" min="1" max="50" class="w-14" :style="{ height: `2em` }" @keyup.enter="addBulkChapters" />
</div>
<div class="flex px-1 items-center">
<ui-btn small @click="showBulkChapterModal = false">{{ $strings.ButtonCancel }}</ui-btn>
<div class="grow" />
<ui-btn small color="bg-success" @click="addBulkChapters">{{ $strings.ButtonAddChapters }}</ui-btn>
</div>
</div>
</div>
</modals-modal>
</div>
</template>
@@ -265,7 +348,17 @@ export default {
removeBranding: false,
showSecondInputs: false,
audibleRegions: ['US', 'CA', 'UK', 'AU', 'FR', 'DE', 'JP', 'IT', 'IN', 'ES'],
hasChanges: false
hasChanges: false,
timeIncrementAmount: 1,
elapsedTime: 0,
playStartTime: null,
elapsedTimeInterval: null,
lockedChapters: new Set(),
lastSelectedLockIndex: null,
bulkChapterInput: '',
showBulkChapterModal: false,
bulkChapterCount: 1,
detectedPattern: null
}
},
computed: {
@@ -304,9 +397,18 @@ export default {
},
selectedChapterId() {
return this.selectedChapter ? this.selectedChapter.id : null
},
allChaptersLocked() {
return this.newChapters.length > 0 && this.newChapters.every((chapter) => this.lockedChapters.has(chapter.id))
}
},
methods: {
formatNumberWithPadding(number, pattern) {
if (!pattern || !pattern.hasLeadingZeros || !pattern.originalPadding) {
return number.toString()
}
return number.toString().padStart(pattern.originalPadding, '0')
},
setChaptersFromTracks() {
let currentStartTime = 0
let index = 0
@@ -321,7 +423,7 @@ export default {
currentStartTime += track.duration
}
this.newChapters = chapters
this.lockedChapters = new Set()
this.checkChapters()
},
toggleRemoveBranding() {
@@ -334,19 +436,22 @@ export default {
const amount = Number(this.shiftAmount)
const lastChapter = this.newChapters[this.newChapters.length - 1]
if (lastChapter.start + amount > this.mediaDurationRounded) {
this.$toast.error(this.$strings.ToastChaptersInvalidShiftAmountLast)
return
}
// Check if any unlocked chapters would be affected negatively
const unlockedChapters = this.newChapters.filter((chap) => !this.lockedChapters.has(chap.id))
if (this.newChapters[1].start + amount <= 0) {
this.$toast.error(this.$strings.ToastChaptersInvalidShiftAmountStart)
if (unlockedChapters.length === 0) {
this.$toast.warning(this.$strings.ToastChaptersAllLocked)
return
}
for (let i = 0; i < this.newChapters.length; i++) {
const chap = this.newChapters[i]
// Skip locked chapters
if (this.lockedChapters.has(chap.id)) {
continue
}
chap.end = Math.min(chap.end + amount, this.mediaDuration)
if (i > 0) {
chap.start = Math.max(0, chap.start + amount)
@@ -354,6 +459,83 @@ export default {
}
this.checkChapters()
},
incrementChapterTime(chapter, amount) {
if (chapter.id === 0 && chapter.start + amount < 0) {
return
}
if (chapter.start + amount >= this.mediaDuration) {
return
}
chapter.start = Math.max(0, chapter.start + amount)
this.checkChapters()
},
adjustChapterStartTime(chapter) {
const newStartTime = chapter.start + this.elapsedTime
chapter.start = newStartTime
this.checkChapters()
this.$toast.success(this.$strings.ToastChapterStartTimeAdjusted.replace('{0}', this.elapsedTime))
this.destroyAudioEl()
},
startElapsedTimeTracking() {
this.elapsedTime = 0
this.playStartTime = Date.now()
this.elapsedTimeInterval = setInterval(() => {
this.elapsedTime = Math.floor((Date.now() - this.playStartTime) / 1000)
}, 100)
},
stopElapsedTimeTracking() {
if (this.elapsedTimeInterval) {
clearInterval(this.elapsedTimeInterval)
this.elapsedTimeInterval = null
}
this.elapsedTime = 0
this.playStartTime = null
},
toggleChapterLock(chapter, event) {
const chapterId = chapter.id
if (event.shiftKey && this.lastSelectedLockIndex !== null) {
const startIndex = Math.min(this.lastSelectedLockIndex, chapterId)
const endIndex = Math.max(this.lastSelectedLockIndex, chapterId)
const shouldLock = !this.lockedChapters.has(chapterId)
for (let i = startIndex; i <= endIndex; i++) {
if (shouldLock) {
this.lockedChapters.add(i)
} else {
this.lockedChapters.delete(i)
}
}
} else {
if (this.lockedChapters.has(chapterId)) {
this.lockedChapters.delete(chapterId)
} else {
this.lockedChapters.add(chapterId)
}
}
this.lastSelectedLockIndex = chapterId
this.lockedChapters = new Set(this.lockedChapters)
},
lockAllChapters() {
this.newChapters.forEach((chapter) => {
this.lockedChapters.add(chapter.id)
})
this.lockedChapters = new Set(this.lockedChapters)
},
unlockAllChapters() {
this.lockedChapters.clear()
this.lockedChapters = new Set(this.lockedChapters)
},
toggleAllChaptersLock() {
if (this.allChaptersLocked) {
this.unlockAllChapters()
} else {
this.lockAllChapters()
}
},
editItem() {
this.$store.commit('showEditModal', this.libraryItem)
},
@@ -368,6 +550,10 @@ export default {
this.checkChapters()
},
removeChapter(chapter) {
if (this.lockedChapters.has(chapter.id)) {
this.$toast.warning(this.$strings.ToastChapterLocked)
return
}
this.newChapters = this.newChapters.filter((ch) => ch.id !== chapter.id)
this.checkChapters()
},
@@ -408,6 +594,14 @@ export default {
this.hasChanges = hasChanges
},
getAudioTrackForTime(time) {
if (typeof time !== 'number') {
return null
}
return this.tracks.find((at) => {
return time >= at.startOffset && time < at.startOffset + at.duration
})
},
playChapter(chapter) {
console.log('Play Chapter', chapter.id)
if (this.selectedChapterId === chapter.id) {
@@ -422,9 +616,12 @@ export default {
this.destroyAudioEl()
}
const audioTrack = this.tracks.find((at) => {
return chapter.start >= at.startOffset && chapter.start < at.startOffset + at.duration
})
const audioTrack = this.getAudioTrackForTime(chapter.start)
if (!audioTrack) {
console.error('No audio track found for chapter', chapter)
return
}
this.selectedChapter = chapter
this.isLoadingChapter = true
@@ -451,6 +648,7 @@ export default {
console.log('Audio playing')
this.isLoadingChapter = false
this.isPlayingChapter = true
this.startElapsedTimeTracking()
})
audioEl.addEventListener('ended', () => {
console.log('Audio ended')
@@ -473,6 +671,10 @@ export default {
this.selectedChapter = null
this.isPlayingChapter = false
this.isLoadingChapter = false
this.stopElapsedTimeTracking()
},
resetChapterLookupData() {
this.chapterData = null
},
saveChapters() {
this.checkChapters()
@@ -506,11 +708,7 @@ export default {
this.saving = false
if (data.updated) {
this.$toast.success(this.$strings.ToastChaptersUpdated)
if (this.previousRoute) {
this.$router.push(this.previousRoute)
} else {
this.$router.push(`/item/${this.libraryItem.id}`)
}
this.reloadLibraryItem()
} else {
this.$toast.info(this.$strings.MessageNoUpdatesWereNecessary)
}
@@ -523,7 +721,7 @@ export default {
},
applyChapterNamesOnly() {
this.newChapters.forEach((chapter, index) => {
if (this.chapterData.chapters[index]) {
if (this.chapterData.chapters[index] && !this.lockedChapters.has(chapter.id)) {
chapter.title = this.chapterData.chapters[index].title
}
})
@@ -535,7 +733,7 @@ export default {
},
applyChapterData() {
let index = 0
this.newChapters = this.chapterData.chapters
const audibleChapters = this.chapterData.chapters
.filter((chap) => chap.startOffsetSec < this.mediaDuration)
.map((chap) => {
return {
@@ -545,6 +743,21 @@ export default {
title: chap.title
}
})
const merged = []
let audibleIdx = 0
for (let i = 0; i < Math.max(this.newChapters.length, audibleChapters.length); i++) {
const isLocked = this.lockedChapters.has(i)
if (isLocked && this.newChapters[i]) {
merged.push({ ...this.newChapters[i], id: i })
} else if (audibleChapters[audibleIdx]) {
merged.push({ ...audibleChapters[audibleIdx], id: i })
audibleIdx++
} else if (this.newChapters[i]) {
merged.push({ ...this.newChapters[i], id: i })
}
}
this.newChapters = merged
this.showFindChaptersModal = false
this.chapterData = null
@@ -643,6 +856,7 @@ export default {
}
]
}
this.lockedChapters = new Set()
this.checkChapters()
},
removeAllChaptersClick() {
@@ -667,11 +881,7 @@ export default {
.then((data) => {
if (data.updated) {
this.$toast.success(this.$strings.ToastChaptersRemoved)
if (this.previousRoute) {
this.$router.push(this.previousRoute)
} else {
this.$router.push(`/item/${this.libraryItem.id}`)
}
this.reloadLibraryItem()
} else {
this.$toast.info(this.$strings.MessageNoUpdatesWereNecessary)
}
@@ -684,6 +894,91 @@ export default {
this.saving = false
})
},
handleBulkChapterAdd() {
const input = this.bulkChapterInput.trim()
if (!input) return
const numberMatch = input.match(/(\d+)/)
if (numberMatch) {
// Extract the base pattern and number, preserving zero-padding
const originalNumberString = numberMatch[1]
const foundNumber = parseInt(originalNumberString)
const numberIndex = numberMatch.index
const beforeNumber = input.substring(0, numberIndex)
const afterNumber = input.substring(numberIndex + originalNumberString.length)
this.detectedPattern = {
before: beforeNumber,
after: afterNumber,
startingNumber: foundNumber,
originalPadding: originalNumberString.length,
hasLeadingZeros: originalNumberString.length > 1 && originalNumberString.startsWith('0')
}
this.bulkChapterCount = 1
this.showBulkChapterModal = true
} else {
this.addSingleChapterFromInput(input)
}
},
addSingleChapterFromInput(title) {
// Find the last chapter to determine where to add the new one
const lastChapter = this.newChapters[this.newChapters.length - 1]
const newStart = lastChapter ? lastChapter.end : 0
const newEnd = Math.min(newStart + 300, this.mediaDuration)
const newChapter = {
id: this.newChapters.length,
start: newStart,
end: newEnd,
title: title
}
this.newChapters.push(newChapter)
this.bulkChapterInput = ''
this.checkChapters()
},
addBulkChapters() {
const count = parseInt(this.bulkChapterCount)
if (!count || count < 1 || count > 150) {
this.$toast.error(this.$strings.ToastBulkChapterInvalidCount)
return
}
const { before, after, startingNumber, originalPadding, hasLeadingZeros } = this.detectedPattern
const lastChapter = this.newChapters[this.newChapters.length - 1]
const baseStart = lastChapter ? lastChapter.start + 1 : 0
// Add multiple chapters with the detected pattern
for (let i = 0; i < count; i++) {
const chapterNumber = startingNumber + i
let formattedNumber = chapterNumber.toString()
// Apply zero-padding if the original had leading zeros
if (hasLeadingZeros && originalPadding > 1) {
formattedNumber = chapterNumber.toString().padStart(originalPadding, '0')
}
const newStart = baseStart + i
const newEnd = Math.min(newStart + i + i, this.mediaDuration)
const newChapter = {
id: this.newChapters.length,
start: newStart,
end: newEnd,
title: `${before}${formattedNumber}${after}`
}
this.newChapters.push(newChapter)
}
this.bulkChapterInput = ''
this.showBulkChapterModal = false
this.detectedPattern = null
this.checkChapters()
},
libraryItemUpdated(libraryItem) {
if (libraryItem.id === this.libraryItem.id) {
if (!!libraryItem.media.metadata.asin && this.mediaMetadata.asin !== libraryItem.media.metadata.asin) {
@@ -691,6 +986,18 @@ export default {
}
this.libraryItem = libraryItem
}
},
reloadLibraryItem() {
this.$axios
.$get(`/api/items/${this.libraryItem.id}?expanded=1`)
.then((data) => {
this.libraryItem = data
this.initChapters()
})
.catch((error) => {
console.error('Failed to reload library item', error)
this.$toast.error(this.$strings.ToastFailedToLoadData)
})
}
},
mounted() {
+1 -1
View File
@@ -7,7 +7,7 @@
</div>
<ui-tooltip :text="$strings.LabelClickForMoreInfo" class="inline-flex ml-2">
<a href="https://www.audiobookshelf.org/guides/api-keys" target="_blank" class="inline-flex">
<a href="https://audiobookshelf.org/docs/documentation/server-management/api-keys" target="_blank" class="inline-flex">
<span class="material-symbols text-xl w-5 text-gray-200">help_outline</span>
</a>
</ui-tooltip>
+1 -1
View File
@@ -24,7 +24,7 @@
<ui-checkbox v-model="enableOpenIDAuth" checkbox-bg="bg" />
<p class="text-lg pl-4">{{ $strings.HeaderOpenIDConnectAuthentication }}</p>
<ui-tooltip :text="$strings.LabelClickForMoreInfo" class="inline-flex ml-2">
<a href="https://www.audiobookshelf.org/guides/oidc_authentication" target="_blank" class="inline-flex">
<a href="https://audiobookshelf.org/docs/documentation/server-management/oidc-authentication" target="_blank" class="inline-flex">
<span class="material-symbols text-xl w-5 text-gray-200">help_outline</span>
</a>
</ui-tooltip>
+1 -1
View File
@@ -3,7 +3,7 @@
<app-settings-content :header-text="$strings.HeaderEmailSettings" :description="''">
<template #header-items>
<ui-tooltip :text="$strings.LabelClickForMoreInfo" class="inline-flex ml-2">
<a href="https://www.audiobookshelf.org/guides/send_to_ereader" target="_blank" class="inline-flex">
<a href="https://audiobookshelf.org/docs/documentation/libraries/book-library/ebooks" target="_blank" class="inline-flex">
<span class="material-symbols text-xl w-5 text-gray-200">help_outline</span>
</a>
</ui-tooltip>
+5 -2
View File
@@ -247,7 +247,8 @@ export default {
return this.$store.state.serverSettings
},
providers() {
return this.$store.state.scanners.providers
// Use book cover providers for the cover provider dropdown
return this.$store.state.scanners.bookCoverProviders || []
},
dateFormats() {
return this.$store.state.globals.dateFormats
@@ -389,8 +390,8 @@ export default {
},
purgeItemsCache() {
const payload = {
// message: `This will delete the entire folder at <code>/metadata/cache/items</code>.<br />Are you sure you want to purge items cache?`,
message: this.$strings.MessageConfirmPurgeItemsCache,
allowHtml: true,
callback: (confirmed) => {
if (confirmed) {
this.sendPurgeItemsCache()
@@ -416,6 +417,8 @@ export default {
},
mounted() {
this.initServerSettings()
// Fetch providers if not already loaded (for cover provider dropdown)
this.$store.dispatch('scanners/fetchProviders')
}
}
</script>
@@ -8,7 +8,7 @@
</template>
<template #header-items>
<ui-tooltip :text="$strings.LabelClickForMoreInfo" class="inline-flex ml-2">
<a href="https://www.audiobookshelf.org/guides/custom-metadata-providers" target="_blank" class="inline-flex">
<a href="https://audiobookshelf.org/docs/documentation/community/community-providers" target="_blank" class="inline-flex">
<span class="material-symbols text-xl w-5 text-gray-200">help_outline</span>
</a>
</ui-tooltip>
@@ -90,9 +90,9 @@ export default {
let message = this.$getString('MessageConfirmRenameGenre', [this.editingGenre, this.newGenreName])
if (genreNameExists) {
message += `<br><span class="text-sm">${this.$strings.MessageConfirmRenameGenreMergeNote}</span>`
message += ` ${this.$strings.MessageConfirmRenameGenreMergeNote}`
} else if (genreNameExistsOfDifferentCase) {
message += `<br><span class="text-warning text-sm">${this.$getString('MessageConfirmRenameGenreWarning', [genreNameExistsOfDifferentCase])}</span>`
message += ` ${this.$getString('MessageConfirmRenameGenreWarning', [genreNameExistsOfDifferentCase])}`
}
const payload = {
@@ -86,9 +86,9 @@ export default {
let message = this.$getString('MessageConfirmRenameTag', [this.editingTag, this.newTagName])
if (tagNameExists) {
message += `<br><span class="text-sm">${this.$strings.MessageConfirmRenameTagMergeNote}</span>`
message += ` ${this.$strings.MessageConfirmRenameTagMergeNote}`
} else if (tagNameExistsOfDifferentCase) {
message += `<br><span class="text-warning text-sm">${this.$getString('MessageConfirmRenameTagWarning', [tagNameExistsOfDifferentCase])}</span>`
message += ` ${this.$getString('MessageConfirmRenameTagWarning', [tagNameExistsOfDifferentCase])}`
}
const payload = {
+1 -1
View File
@@ -3,7 +3,7 @@
<app-settings-content :header-text="$strings.HeaderLibraries">
<template #header-items>
<ui-tooltip :text="$strings.LabelClickForMoreInfo" class="inline-flex ml-2">
<a href="https://www.audiobookshelf.org/guides/library_creation" target="_blank" class="inline-flex">
<a href="https://audiobookshelf.org/docs/documentation/libraries/common-content/overview" target="_blank" class="inline-flex">
<span class="material-symbols text-xl w-5 text-gray-200">help_outline</span>
</a>
</ui-tooltip>
+1 -1
View File
@@ -3,7 +3,7 @@
<app-settings-content :header-text="$strings.HeaderLogs" :description="$strings.MessageLogsDescription">
<template #header-items>
<ui-tooltip :text="$strings.LabelClickForMoreInfo" class="inline-flex ml-2">
<a href="https://www.audiobookshelf.org/guides/server_logs" target="_blank" class="inline-flex">
<a href="https://audiobookshelf.org/docs/documentation/server-management/server-logs" target="_blank" class="inline-flex">
<span class="material-symbols text-xl w-5 text-gray-200">help_outline</span>
</a>
</ui-tooltip>
+1 -1
View File
@@ -3,7 +3,7 @@
<app-settings-content :header-text="$strings.HeaderRSSFeeds">
<template #header-items>
<ui-tooltip :text="$strings.LabelClickForMoreInfo" class="inline-flex ml-2">
<a href="https://www.audiobookshelf.org/guides/rss_feeds" target="_blank" class="inline-flex">
<a href="https://audiobookshelf.org/docs/documentation/libraries/common-content/public-shares#rss-feed" target="_blank" class="inline-flex">
<span class="material-symbols text-xl w-5 text-gray-200">help_outline</span>
</a>
</ui-tooltip>
+19 -7
View File
@@ -66,7 +66,11 @@
<p class="text-xs">{{ getPlayMethodName(session.playMethod) }}</p>
</td>
<td class="hidden sm:table-cell max-w-32 min-w-32">
<p class="text-xs truncate" v-html="getDeviceInfoString(session.deviceInfo)" />
<p class="text-xs truncate">
<template v-for="(line, index) in getDeviceInfoLines(session.deviceInfo)">
<br v-if="index > 0" :key="'br-' + index" />{{ line }}
</template>
</p>
</td>
<td class="text-center w-24 min-w-24 sm:w-32 sm:min-w-32">
<p class="text-xs font-mono">{{ $elapsedPrettyLocalized(session.timeListening) }}</p>
@@ -130,7 +134,11 @@
<p class="text-xs">{{ getPlayMethodName(session.playMethod) }}</p>
</td>
<td class="hidden sm:table-cell max-w-32 min-w-32">
<p class="text-xs truncate" v-html="getDeviceInfoString(session.deviceInfo)" />
<p class="text-xs truncate">
<template v-for="(line, index) in getDeviceInfoLines(session.deviceInfo)">
<br v-if="index > 0" :key="'br-' + index" />{{ line }}
</template>
</p>
</td>
<td class="text-center">
<p class="text-xs font-mono">{{ $elapsedPretty(session.timeListening) }}</p>
@@ -172,7 +180,11 @@
<p class="text-xs">{{ getPlayMethodName(session.playMethod) }}</p>
</td>
<td class="hidden sm:table-cell max-w-32 min-w-32">
<p class="text-xs truncate" v-html="getDeviceInfoString(session.deviceInfo)" />
<p class="text-xs truncate">
<template v-for="(line, index) in getDeviceInfoLines(session.deviceInfo)">
<br v-if="index > 0" :key="'br-' + index" />{{ line }}
</template>
</p>
</td>
<td class="text-center hover:underline" @click.stop="clickCurrentTime(session)">
<p class="text-xs font-mono">{{ $secondsToTimestamp(session.currentTime) }}</p>
@@ -433,16 +445,16 @@ export default {
this.selectedSession = session
this.showSessionModal = true
},
getDeviceInfoString(deviceInfo) {
if (!deviceInfo) return ''
var lines = []
getDeviceInfoLines(deviceInfo) {
if (!deviceInfo) return []
const lines = []
if (deviceInfo.clientName) lines.push(`${deviceInfo.clientName} ${deviceInfo.clientVersion || ''}`)
if (deviceInfo.osName) lines.push(`${deviceInfo.osName} ${deviceInfo.osVersion}`)
if (deviceInfo.browserName) lines.push(deviceInfo.browserName)
if (deviceInfo.manufacturer && deviceInfo.model) lines.push(`${deviceInfo.manufacturer} ${deviceInfo.model}`)
if (deviceInfo.sdkVersion) lines.push(`SDK Version: ${deviceInfo.sdkVersion}`)
return lines.join('<br>')
return lines
},
getPlayMethodName(playMethod) {
if (playMethod === this.$constants.PlayMethod.DIRECTPLAY) return 'Direct Play'
+10 -6
View File
@@ -38,8 +38,12 @@
<p class="text-xs">{{ getPlayMethodName(session.playMethod) }}</p>
</td>
<td class="hidden sm:table-cell min-w-32 max-w-32">
<p class="text-xs truncate" v-html="getDeviceInfoString(session.deviceInfo)" />
</td>
<p class="text-xs truncate">
<template v-for="(line, index) in getDeviceInfoLines(session.deviceInfo)">
<br v-if="index > 0" :key="'br-' + index" />{{ line }}
</template>
</p>
</td>
<td class="text-center">
<p class="text-xs font-mono">{{ $elapsedPrettyLocalized(session.timeListening) }}</p>
</td>
@@ -193,16 +197,16 @@ export default {
this.selectedSession = session
this.showSessionModal = true
},
getDeviceInfoString(deviceInfo) {
if (!deviceInfo) return ''
var lines = []
getDeviceInfoLines(deviceInfo) {
if (!deviceInfo) return []
const lines = []
if (deviceInfo.clientName) lines.push(`${deviceInfo.clientName} ${deviceInfo.clientVersion || ''}`)
if (deviceInfo.osName) lines.push(`${deviceInfo.osName} ${deviceInfo.osVersion}`)
if (deviceInfo.browserName) lines.push(deviceInfo.browserName)
if (deviceInfo.manufacturer && deviceInfo.model) lines.push(`${deviceInfo.manufacturer} ${deviceInfo.model}`)
if (deviceInfo.sdkVersion) lines.push(`SDK Version: ${deviceInfo.sdkVersion}`)
return lines.join('<br>')
return lines
},
getPlayMethodName(playMethod) {
if (playMethod === this.$constants.PlayMethod.DIRECTPLAY) return 'Direct Play'
+1 -1
View File
@@ -7,7 +7,7 @@
</div>
<ui-tooltip :text="$strings.LabelClickForMoreInfo" class="inline-flex ml-2">
<a href="https://www.audiobookshelf.org/guides/users" target="_blank" class="inline-flex">
<a href="https://audiobookshelf.org/docs/documentation/server-management/user-management" target="_blank" class="inline-flex">
<span class="material-symbols text-xl w-5 text-gray-200">help_outline</span>
</a>
</ui-tooltip>
+9 -8
View File
@@ -17,9 +17,9 @@
<form @submit.prevent="submitServerSetup">
<p class="text-lg font-semibold mb-2 pl-1 text-center">Create Root User</p>
<ui-text-input-with-label v-model.trim="newRoot.username" label="Username" :disabled="processing" class="w-full mb-3 text-sm" />
<ui-text-input-with-label v-model="newRoot.password" label="Password" type="password" :disabled="processing" class="w-full mb-3 text-sm" />
<ui-text-input-with-label v-model="confirmPassword" label="Confirm Password" type="password" :disabled="processing" class="w-full mb-3 text-sm" />
<ui-text-input-with-label v-model.trim="newRoot.username" label="Username" autocomplete="username" :disabled="processing" class="w-full mb-3 text-sm" />
<ui-text-input-with-label v-model="newRoot.password" label="Password" type="password" autocomplete="new-password" :disabled="processing" class="w-full mb-3 text-sm" />
<ui-text-input-with-label v-model="confirmPassword" label="Confirm Password" type="password" autocomplete="new-password" :disabled="processing" class="w-full mb-3 text-sm" />
<p class="text-lg font-semibold mt-6 mb-2 pl-1 text-center">Directory Paths</p>
<ui-text-input-with-label v-model="ConfigPath" label="Config Path" disabled class="w-full mb-3 text-sm" />
@@ -51,10 +51,10 @@
<form v-show="login_local" @submit.prevent="submitForm">
<label class="text-xs text-gray-300 uppercase">{{ $strings.LabelUsername }}</label>
<ui-text-input v-model.trim="username" :disabled="processing" class="mb-3 w-full" inputName="username" />
<ui-text-input v-model.trim="username" autocomplete="username" :disabled="processing" class="mb-3 w-full" inputName="username" />
<label class="text-xs text-gray-300 uppercase">{{ $strings.LabelPassword }}</label>
<ui-text-input v-model.trim="password" type="password" :disabled="processing" class="w-full mb-3" inputName="password" />
<ui-text-input v-model.trim="password" type="password" autocomplete="current-password" :disabled="processing" class="w-full mb-3" inputName="password" />
<div class="w-full flex justify-end py-3">
<ui-btn type="submit" :disabled="processing" color="bg-primary" class="leading-none">{{ processing ? 'Checking...' : $strings.ButtonSubmit }}</ui-btn>
</div>
@@ -189,7 +189,8 @@ export default {
require('@/plugins/chromecast.js').default(this)
}
this.$store.commit('libraries/setCurrentLibrary', userDefaultLibraryId)
this.$store.commit('libraries/setLastLoad', 0) // Ensure libraries get loaded again when switching users
this.$store.commit('libraries/setCurrentLibrary', { id: userDefaultLibraryId })
this.$store.commit('user/setUser', user)
// Access token only returned from login, not authorize
if (user.accessToken) {
@@ -298,8 +299,8 @@ export default {
}
if (authMethods.includes('openid')) {
// Auto redirect unless query string ?autoLaunch=0
if (this.authFormData?.authOpenIDAutoLaunch && this.$route.query?.autoLaunch !== '0') {
// Auto redirect unless query string ?autoLaunch=0 OR when explicity requested through ?autoLaunch=1
if ((this.authFormData?.authOpenIDAutoLaunch && this.$route.query?.autoLaunch !== '0') || this.$route.query?.autoLaunch == '1') {
window.location.href = this.openidAuthUri
}
+1
View File
@@ -364,6 +364,7 @@ export default {
}
const startTime = this.playbackSession.currentTime || 0
this.localAudioPlayer.set(null, this.audioTracks, false, startTime, false)
this.localAudioPlayer.on('stateChange', this.playerStateChange.bind(this))
this.localAudioPlayer.on('timeupdate', this.playerTimeUpdate.bind(this))
+25 -2
View File
@@ -155,7 +155,7 @@ export default {
},
providers() {
if (this.selectedLibraryIsPodcast) return this.$store.state.scanners.podcastProviders
return this.$store.state.scanners.providers
return this.$store.state.scanners.bookProviders
},
canFetchMetadata() {
return !this.selectedLibraryIsPodcast && this.fetchMetadata.enabled
@@ -297,6 +297,15 @@ export default {
ref.setUploadStatus(status)
}
},
updateItemCardProgress(index, progress) {
var ref = this.$refs[`itemCard-${index}`]
if (ref && ref.length) ref = ref[0]
if (!ref) {
console.error('Book card ref not found', index, this.$refs)
} else {
ref.setUploadProgress(progress)
}
},
async uploadItem(item) {
var form = new FormData()
form.set('title', item.title)
@@ -312,8 +321,20 @@ export default {
form.set(`${index++}`, file)
})
const config = {
onUploadProgress: (progressEvent) => {
if (progressEvent.lengthComputable) {
const progress = {
loaded: progressEvent.loaded,
total: progressEvent.total
}
this.updateItemCardProgress(item.index, progress)
}
}
}
return this.$axios
.$post('/api/upload', form)
.$post('/api/upload', form, config)
.then(() => true)
.catch((error) => {
console.error('Failed to upload item', error)
@@ -394,6 +415,8 @@ export default {
this.setMetadataProvider()
this.setDefaultFolder()
// Fetch providers if not already loaded
this.$store.dispatch('scanners/fetchProviders')
window.addEventListener('dragenter', this.dragenter)
window.addEventListener('dragleave', this.dragleave)
window.addEventListener('dragover', this.dragover)
+14 -1
View File
@@ -46,7 +46,20 @@ export default class LocalAudioPlayer extends EventEmitter {
this.player.addEventListener('loadedmetadata', this.evtLoadedMetadata.bind(this))
this.player.addEventListener('timeupdate', this.evtTimeupdate.bind(this))
var mimeTypes = ['audio/flac', 'audio/mpeg', 'audio/mp4', 'audio/ogg', 'audio/aac', 'audio/x-ms-wma', 'audio/x-aiff', 'audio/webm']
var mimeTypes = [
'audio/flac',
'audio/mpeg',
'audio/mp4',
'audio/ogg',
'audio/aac',
'audio/x-ms-wma',
'audio/x-aiff',
'audio/webm',
// `audio/matroska` is the correct mimetype, but the server still uses `audio/x-matroska`
// ref: https://www.iana.org/assignments/media-types/media-types.xhtml
'audio/matroska',
'audio/x-matroska'
]
var mimeTypeCanPlayMap = {}
mimeTypes.forEach((mt) => {
var canPlay = this.player.canPlayType(mt)
+8
View File
@@ -6,6 +6,7 @@ const defaultCode = 'en-us'
const languageCodeMap = {
ar: { label: 'عربي', dateFnsLocale: 'ar' },
be: { label: 'Беларуская', dateFnsLocale: 'be' },
bg: { label: 'Български', dateFnsLocale: 'bg' },
bn: { label: 'বাংলা', dateFnsLocale: 'bn' },
ca: { label: 'Català', dateFnsLocale: 'ca' },
@@ -20,15 +21,19 @@ const languageCodeMap = {
he: { label: 'עברית', dateFnsLocale: 'he' },
hr: { label: 'Hrvatski', dateFnsLocale: 'hr' },
it: { label: 'Italiano', dateFnsLocale: 'it' },
ja: { label: '日本語', dateFnsLocale: 'ja' },
lt: { label: 'Lietuvių', dateFnsLocale: 'lt' },
hu: { label: 'Magyar', dateFnsLocale: 'hu' },
ko: { label: '한국어', dateFnsLocale: 'ko' },
nl: { label: 'Nederlands', dateFnsLocale: 'nl' },
no: { label: 'Norsk', dateFnsLocale: 'no' },
pl: { label: 'Polski', dateFnsLocale: 'pl' },
'pt-br': { label: 'Português (Brasil)', dateFnsLocale: 'ptBR' },
ru: { label: 'Русский', dateFnsLocale: 'ru' },
sk: { label: 'Slovenčina', dateFnsLocale: 'sk' },
sl: { label: 'Slovenščina', dateFnsLocale: 'sl' },
sv: { label: 'Svenska', dateFnsLocale: 'sv' },
tr: { label: 'Türkçe', dateFnsLocale: 'tr' },
uk: { label: 'Українська', dateFnsLocale: 'uk' },
'vi-vn': { label: 'Tiếng Việt', dateFnsLocale: 'vi' },
'zh-cn': { label: '简体中文 (Simplified Chinese)', dateFnsLocale: 'zhCN' },
@@ -46,6 +51,7 @@ const podcastSearchRegionMap = {
au: { label: 'Australia' },
br: { label: 'Brasil' },
be: { label: 'België / Belgique / Belgien' },
by: { label: 'Беларусь' },
cz: { label: 'Česko' },
dk: { label: 'Danmark' },
de: { label: 'Deutschland' },
@@ -55,6 +61,7 @@ const podcastSearchRegionMap = {
hr: { label: 'Hrvatska' },
il: { label: 'ישראל / إسرائيل' },
it: { label: 'Italia' },
jp: { label: '日本' },
lu: { label: 'Luxembourg / Luxemburg / Lëtezebuerg' },
hu: { label: 'Magyarország' },
nl: { label: 'Nederland' },
@@ -65,6 +72,7 @@ const podcastSearchRegionMap = {
pt: { label: 'Portugal' },
ru: { label: 'Россия' },
ch: { label: 'Schweiz / Suisse / Svizzera' },
sk: { label: 'Slovensko' },
se: { label: 'Sverige' },
vn: { label: 'Việt Nam' },
ua: { label: 'Україна' },
+6 -9
View File
@@ -117,7 +117,6 @@ export const actions = {
const library = data.library
const filterData = data.filterdata
const issues = data.issues || 0
const customMetadataProviders = data.customMetadataProviders || []
const numUserPlaylists = data.numUserPlaylists
dispatch('user/checkUpdateLibrarySortFilter', library.mediaType, { root: true })
@@ -131,9 +130,7 @@ export const actions = {
commit('setLibraryIssues', issues)
commit('setLibraryFilterData', filterData)
commit('setNumUserPlaylists', numUserPlaylists)
commit('scanners/setCustomMetadataProviders', customMetadataProviders, { root: true })
commit('setCurrentLibrary', libraryId)
commit('setCurrentLibrary', { id: libraryId })
return data
})
.catch((error) => {
@@ -159,7 +156,7 @@ export const actions = {
.$get(`/api/libraries`)
.then((data) => {
commit('set', data.libraries)
commit('setLastLoad')
commit('setLastLoad', new Date())
})
.catch((error) => {
console.error('Failed', error)
@@ -176,14 +173,14 @@ export const mutations = {
setFoldersLastUpdate(state) {
state.folderLastUpdate = Date.now()
},
setLastLoad(state) {
state.lastLoad = Date.now()
setLastLoad(state, date) {
state.lastLoad = date
},
setLibraryIssues(state, val) {
state.issues = val
},
setCurrentLibrary(state, val) {
state.currentLibraryId = val
setCurrentLibrary(state, { id }) {
state.currentLibraryId = id
},
set(state, libraries) {
state.libraries = libraries
+50 -116
View File
@@ -1,126 +1,60 @@
export const state = () => ({
providers: [
{
text: 'Google Books',
value: 'google'
},
{
text: 'Open Library',
value: 'openlibrary'
},
{
text: 'iTunes',
value: 'itunes'
},
{
text: 'Audible.com',
value: 'audible'
},
{
text: 'Audible.ca',
value: 'audible.ca'
},
{
text: 'Audible.co.uk',
value: 'audible.uk'
},
{
text: 'Audible.com.au',
value: 'audible.au'
},
{
text: 'Audible.fr',
value: 'audible.fr'
},
{
text: 'Audible.de',
value: 'audible.de'
},
{
text: 'Audible.co.jp',
value: 'audible.jp'
},
{
text: 'Audible.it',
value: 'audible.it'
},
{
text: 'Audible.co.in',
value: 'audible.in'
},
{
text: 'Audible.es',
value: 'audible.es'
},
{
text: 'FantLab.ru',
value: 'fantlab'
}
],
podcastProviders: [
{
text: 'iTunes',
value: 'itunes'
}
],
coverOnlyProviders: [
{
text: 'AudiobookCovers.com',
value: 'audiobookcovers'
}
]
bookProviders: [],
podcastProviders: [],
bookCoverProviders: [],
podcastCoverProviders: [],
providersLoaded: false
})
export const getters = {
checkBookProviderExists: state => (providerValue) => {
return state.providers.some(p => p.value === providerValue)
checkBookProviderExists: (state) => (providerValue) => {
return state.bookProviders.some((p) => p.value === providerValue)
},
checkPodcastProviderExists: state => (providerValue) => {
return state.podcastProviders.some(p => p.value === providerValue)
checkPodcastProviderExists: (state) => (providerValue) => {
return state.podcastProviders.some((p) => p.value === providerValue)
},
areProvidersLoaded: (state) => state.providersLoaded
}
export const actions = {
async fetchProviders({ commit, state }) {
// Only fetch if not already loaded
if (state.providersLoaded) {
return
}
try {
const response = await this.$axios.$get('/api/search/providers')
if (response?.providers) {
commit('setAllProviders', response.providers)
}
} catch (error) {
console.error('Failed to fetch providers', error)
}
},
async refreshProviders({ commit, state }) {
// if providers are not loaded, do nothing - they will be fetched when required (
if (!state.providersLoaded) {
return
}
try {
const response = await this.$axios.$get('/api/search/providers')
if (response?.providers) {
commit('setAllProviders', response.providers)
}
} catch (error) {
console.error('Failed to refresh providers', error)
}
}
}
export const actions = {}
export const mutations = {
addCustomMetadataProvider(state, provider) {
if (provider.mediaType === 'book') {
if (state.providers.some(p => p.value === provider.slug)) return
state.providers.push({
text: provider.name,
value: provider.slug
})
} else {
if (state.podcastProviders.some(p => p.value === provider.slug)) return
state.podcastProviders.push({
text: provider.name,
value: provider.slug
})
}
},
removeCustomMetadataProvider(state, provider) {
if (provider.mediaType === 'book') {
state.providers = state.providers.filter(p => p.value !== provider.slug)
} else {
state.podcastProviders = state.podcastProviders.filter(p => p.value !== provider.slug)
}
},
setCustomMetadataProviders(state, providers) {
if (!providers?.length) return
const mediaType = providers[0].mediaType
if (mediaType === 'book') {
// clear previous values, and add new values to the end
state.providers = state.providers.filter((p) => !p.value.startsWith('custom-'))
state.providers = [
...state.providers,
...providers.map((p) => ({
text: p.name,
value: p.slug
}))
]
} else {
// Podcast providers not supported yet
}
setAllProviders(state, providers) {
state.bookProviders = providers.books || []
state.podcastProviders = providers.podcasts || []
state.bookCoverProviders = providers.booksCovers || []
state.podcastCoverProviders = providers.podcasts || [] // Use same as bookCovers since podcasts use iTunes only
state.providersLoaded = true
}
}
}
-1
View File
@@ -152,7 +152,6 @@ export const actions = {
.$post('/auth/refresh')
.then(async (response) => {
const newAccessToken = response.user.accessToken
commit('setUser', response.user)
commit('setAccessToken', newAccessToken)
// Emit event used to re-authenticate socket in default.vue since $root is not available here
if (this.$eventBus) {
+20 -5
View File
@@ -1,5 +1,6 @@
{
"ButtonAdd": "إضافة",
"ButtonAddApiKey": "إضافة مفتاح واجهة برمجة التطبيقات",
"ButtonAddChapters": "إضافة الفصول",
"ButtonAddDevice": "إضافة جهاز",
"ButtonAddLibrary": "إضافة مكتبة",
@@ -20,7 +21,8 @@
"ButtonChooseAFolder": "اختر المجلد",
"ButtonChooseFiles": "اختر الملفات",
"ButtonClearFilter": "تصفية الفرز",
"ButtonCloseFeed": "إغلاق",
"ButtonClose": "إغلاق",
"ButtonCloseFeed": "إغلاق الموجز",
"ButtonCloseSession": "إغلاق الجلسة المفتوحة",
"ButtonCollections": "المجموعات",
"ButtonConfigureScanner": "إعدادات الماسح الضوئي",
@@ -119,11 +121,13 @@
"HeaderAccount": "الحساب",
"HeaderAddCustomMetadataProvider": "إضافة موفر بيانات تعريفية مخصص",
"HeaderAdvanced": "متقدم",
"HeaderApiKeys": "مفاتيح API",
"HeaderAppriseNotificationSettings": "إعدادات الإشعارات",
"HeaderAudioTracks": "المقاطع الصوتية",
"HeaderAudiobookTools": "أدوات إدارة ملفات الكتب الصوتية",
"HeaderAuthentication": "المصادقة",
"HeaderBackups": "النسخ الاحتياطية",
"HeaderBulkChapterModal": "أضف فصولاً متعددة",
"HeaderChangePassword": "تغيير كلمة المرور",
"HeaderChapters": "الفصول",
"HeaderChooseAFolder": "اختيار المجلد",
@@ -162,6 +166,7 @@
"HeaderMetadataOrderOfPrecedence": "ترتيب أولوية البيانات الوصفية",
"HeaderMetadataToEmbed": "البيانات الوصفية المراد تضمينها",
"HeaderNewAccount": "حساب جديد",
"HeaderNewApiKey": "مفتاح API جديد",
"HeaderNewLibrary": "مكتبة جديدة",
"HeaderNotificationCreate": "إنشاء إشعار",
"HeaderNotificationUpdate": "تحديث إشعار",
@@ -195,6 +200,7 @@
"HeaderSettingsExperimental": "ميزات تجريبية",
"HeaderSettingsGeneral": "عام",
"HeaderSettingsScanner": "إعدادات المسح",
"HeaderSettingsSecurity": "الأمان",
"HeaderSettingsWebClient": "عميل الويب",
"HeaderSleepTimer": "مؤقت النوم",
"HeaderStatsLargestItems": "أكبر العناصر حجماً",
@@ -206,6 +212,7 @@
"HeaderTableOfContents": "جدول المحتويات",
"HeaderTools": "أدوات",
"HeaderUpdateAccount": "تحديث الحساب",
"HeaderUpdateApiKey": "تحديث مفتاح API",
"HeaderUpdateAuthor": "تحديث المؤلف",
"HeaderUpdateDetails": "تحديث التفاصيل",
"HeaderUpdateLibrary": "تحديث المكتبة",
@@ -235,6 +242,10 @@
"LabelAllUsersExcludingGuests": "جميع المستخدمين باستثناء الضيوف",
"LabelAllUsersIncludingGuests": "جميع المستخدمين بما في ذلك الضيوف",
"LabelAlreadyInYourLibrary": "موجود بالفعل في مكتبتك",
"LabelApiKeyCreated": "تم إنشاء مفتاح API \"{0}\" بنجاح.",
"LabelApiKeyCreatedDescription": "تأكد من نسخ مفتاح API الآن، لن تتمكن من رؤيته مرة أخرى.",
"LabelApiKeyUser": "التصرف بالنيابة عن مستخدم",
"LabelApiKeyUserDescription": "مفتاح API سيمتلك نفس صلاحيات المستخدم الذي ينوب عنه ، سيظهر بالسجلات وكأن المستخدم قام بالطلب.",
"LabelApiToken": "رمز API",
"LabelAppend": "إلحاق",
"LabelAudioBitrate": "معدل بت الصوت (على سبيل المثال 128 كيلو بايت)",
@@ -284,6 +295,7 @@
"LabelContinueListening": "استمرار الاستماع",
"LabelContinueReading": "استمرار القراءة",
"LabelContinueSeries": "استمرار المسلسلات",
"LabelCorsAllowed": "CORS Origins مسموح",
"LabelCover": "الغلاف",
"LabelCoverImageURL": "رابط صورة الغلاف",
"LabelCoverProvider": "مزود الغلاف",
@@ -346,7 +358,7 @@
"LabelExample": "مثال",
"LabelExpandSeries": "توسيع السلاسل",
"LabelExpandSubSeries": "توسيع السلاسل الفرعية",
"LabelExplicit": "صريح",
"LabelExplicit": "محتوى صريح",
"LabelExplicitChecked": "صريح (محدد)",
"LabelExplicitUnchecked": "غير صريح (غير محدد)",
"LabelExportOPML": "تصدير OPML",
@@ -365,7 +377,7 @@
"LabelFolders": "مجلدات",
"LabelFontBold": "عريض",
"LabelFontBoldness": "تعريض الخط",
"LabelFontFamily": "عائلة الخط",
"LabelFontFamily": "عائلة الخطوط",
"LabelFontItalic": "مائل",
"LabelFontScale": "نطاق الخط",
"LabelFontStrikethrough": "يتوسطه خط",
@@ -417,6 +429,9 @@
"LabelLibraryFilterSublistEmpty": "لا يوجد {0}",
"LabelLibraryItem": "عنصر المكتبة",
"LabelLibraryName": "اسم المكتبة",
"LabelLibrarySortByProgress": "المرحلة: الأحدث",
"LabelLibrarySortByProgressFinished": "المرحلة: تم الانتهاء",
"LabelLibrarySortByProgressStarted": "المرحلة: تم البدء",
"LabelLimit": "حد",
"LabelLineSpacing": "تباعد الأسطر",
"LabelListenAgain": "الاستماع مجدداً",
@@ -561,7 +576,7 @@
"LabelSettingsBookshelfViewHelp": "تصميم يحاكي الواقع مع رفوف خشبية",
"LabelSettingsChromecastSupport": "دعم Chromecast",
"LabelSettingsDateFormat": "تنسيق التاريخ",
"LabelSettingsEnableWatcher": "فحص المكتبات تلقائيًا بحثًا عن تغييرات",
"LabelSettingsEnableWatcher": "مراقبة المكتبات تلقائياً بحثاً عن تغييرات",
"LabelSettingsEnableWatcherForLibrary": "فحص المكتبة تلقائيًا بحثًا عن تغييرات",
"LabelSettingsEnableWatcherHelp": "يمكّن الإضافة/التحديث التلقائي للعناصر عند اكتشاف تغييرات في الملفات. *يتطلب إعادة تشغيل الخادم",
"LabelSettingsEpubsAllowScriptedContent": "السماح بالمحتوى النصي في ملفات epub",
@@ -852,7 +867,7 @@
"MessageResetChaptersConfirm": "هل أنت متأكد أنك تريد إعادة تعيين الفصول والتراجع عن التغييرات التي أجريتها؟",
"MessageRestoreBackupConfirm": "هل أنت متأكد أنك تريد استعادة النسخ الاحتياطي الذي تم إنشاؤه في",
"MessageRestoreBackupWarning": "ستؤدي استعادة النسخ الاحتياطي إلى الكتابة فوق قاعدة البيانات بأكملها الموجودة في /config وصور الأغلفة في /metadata/items و /metadata/authors.<br /><br /> لا تعدل النسخ الاحتياطية أي ملفات في مجلدات مكتبتك. إذا قمت بتمكين إعدادات الخادم لتخزين صور الأغلفة والبيانات الوصفية في مجلدات مكتبتك، فلن يتم نسخها احتياطيًا أو الكتابة فوقها.<br /><br /> سيتم تحديث جميع العملاء الذين يستخدمون الخادم الخاص بك تلقائيًا.",
"MessageScheduleLibraryScanNote": "بالنسبة لمعظم المستخدمين، يوصى بترك هذه الميزة معطلة وإبقاء إعداد مراقب المجلدات ممكّنًا. سيكتشف مراقب المجلدات تلقائيًا التغييرات في مجلدات مكتبتك. لا يعمل مراقب المجلدات مع كل نظام ملفات (مثل NFS)، لذا يمكن استخدام عمليات فحص المكتبة المجدولة بدلاً من ذلك.",
"MessageScheduleLibraryScanNote": "لمعظم المستخدمين، موصى بترك هذه الميزة معطلة وإبقاء ممكّنة الأعداد، ”قم بمراقبة المكتبة تلقائاً للتغييرات“. سوف يقم بالكشف التلقائي عن تغييرات في مجلدات مكتبتك. لو لم يعمل الإعداد، \"قم بمراقبة المكتبة تلقائاً للتغييرات،“مع نظمة ملفاتك المستخدمة (مثل NFS على سبيل المثال)، فأمكِن هذه الميزة.",
"MessageScheduleRunEveryWeekdayAtTime": "تشغيل كل {0} في الساعة {1}",
"MessageSearchResultsFor": "نتائج البحث عن",
"MessageSelected": "تم تحديد {0}",
+663 -217
View File
File diff suppressed because it is too large. Load diff
+267 -10
View File
@@ -1,5 +1,6 @@
{
"ButtonAdd": "Създай",
"ButtonAddApiKey": "Добави API ключ",
"ButtonAddChapters": "Добави Глави",
"ButtonAddDevice": "Добави Устройство",
"ButtonAddLibrary": "Добави Библиотека",
@@ -20,6 +21,7 @@
"ButtonChooseAFolder": "Избери Папка",
"ButtonChooseFiles": "Избери Файлове",
"ButtonClearFilter": "Изчисти филтър",
"ButtonClose": "Затвори",
"ButtonCloseFeed": "Затвори стената",
"ButtonCloseSession": "Затвори отворената сесия",
"ButtonCollections": "Колекции",
@@ -119,11 +121,13 @@
"HeaderAccount": "Профил",
"HeaderAddCustomMetadataProvider": "Добави персонализиран доставчик на метаданни",
"HeaderAdvanced": "Разширени настройки",
"HeaderApiKeys": "API ключове",
"HeaderAppriseNotificationSettings": "Apprise Notification Опции",
"HeaderAudioTracks": "Песни",
"HeaderAudiobookTools": "Инструмент за Менижиране на Аудиокниги",
"HeaderAuthentication": "Аутентикация",
"HeaderBackups": "Архив",
"HeaderBulkChapterModal": "Добави няколко глави",
"HeaderChangePassword": "Промяна на Парола",
"HeaderChapters": "Глави",
"HeaderChooseAFolder": "Избети Папка",
@@ -162,6 +166,7 @@
"HeaderMetadataOrderOfPrecedence": "Предимство на Метаданни",
"HeaderMetadataToEmbed": "Метаданни за Вграждане",
"HeaderNewAccount": "Нов Профил",
"HeaderNewApiKey": "Нов API ключ",
"HeaderNewLibrary": "Нова Библиотека",
"HeaderNotificationCreate": "Създай нотификация",
"HeaderNotificationUpdate": "Обнови нотификация",
@@ -195,6 +200,7 @@
"HeaderSettingsExperimental": "Експериментални Функции",
"HeaderSettingsGeneral": "Общи",
"HeaderSettingsScanner": "Скенер",
"HeaderSettingsSecurity": "Сигурност",
"HeaderSettingsWebClient": "Уеб клиент",
"HeaderSleepTimer": "Таймер за заспиване",
"HeaderStatsLargestItems": "Най-Големите Елементи",
@@ -206,6 +212,7 @@
"HeaderTableOfContents": "Съдържание",
"HeaderTools": "Инструменти",
"HeaderUpdateAccount": "Обнови Профил",
"HeaderUpdateApiKey": "Обнови API ключ",
"HeaderUpdateAuthor": "Обнови Автор",
"HeaderUpdateDetails": "Обнови Детайли",
"HeaderUpdateLibrary": "Обнови Библиотека",
@@ -230,10 +237,15 @@
"LabelAddedDate": "Добавено",
"LabelAdminUsersOnly": "Само за Администратори",
"LabelAll": "Всичко",
"LabelAllEpisodesDownloaded": "Всички епизоди са изтеглени",
"LabelAllUsers": "Всички Потребители",
"LabelAllUsersExcludingGuests": "Всички потребители без гости",
"LabelAllUsersIncludingGuests": "Всички потребители включително гости",
"LabelAlreadyInYourLibrary": "Вече е в твоята библиотека",
"LabelApiKeyCreated": "API ключ \"{0}\" успешно създатен.",
"LabelApiKeyCreatedDescription": "Погрижете се да копирате API ключът сега, защото повече няма да можете да го виждате онново.",
"LabelApiKeyUser": "Действай от името на потребителя",
"LabelApiKeyUserDescription": "Този API ключ ще има същите права като на потребителя за чието име действа. В логовете ще изглежда все едно потребителя прави заявката.",
"LabelApiToken": "АПИ Токен",
"LabelAppend": "Добави",
"LabelAudioBitrate": "Аудио битрейт (напр. 128k)",
@@ -253,7 +265,7 @@
"LabelBackToUser": "Обратно към Потребител",
"LabelBackupAudioFiles": "Създай резервно копие на аудио файлове",
"LabelBackupLocation": "Местоположение на Архив",
"LabelBackupsEnableAutomaticBackups": "Включи автоматично архивиране",
"LabelBackupsEnableAutomaticBackups": "Автоматично архивиране",
"LabelBackupsEnableAutomaticBackupsHelp": "Архиви запазени в /metadata/backups",
"LabelBackupsMaxBackupSize": "Максимален размер на архива (в GB) (0 за неограничен)",
"LabelBackupsMaxBackupSizeHelp": "За защита срещу грешки в конфигурацията, архивите ще се провалят ако надхвърлят конфигурирания размер.",
@@ -272,7 +284,7 @@
"LabelChaptersFound": "намерени глави",
"LabelClickForMoreInfo": "Кликни за повече информация",
"LabelClickToUseCurrentValue": "Натисни да ползваш сегашната стойност",
"LabelClosePlayer": "Затвори",
"LabelClosePlayer": "Затвори плейъра",
"LabelCodec": "Кодек",
"LabelCollapseSeries": "Скрий сериите",
"LabelCollapseSubSeries": "Свий подсерии",
@@ -283,6 +295,7 @@
"LabelContinueListening": "Продължи слушане",
"LabelContinueReading": "Продължи четене",
"LabelContinueSeries": "Продължи серии",
"LabelCorsAllowed": "Разрешени CORS Origins",
"LabelCover": "Корица",
"LabelCoverImageURL": "URL на Корица",
"LabelCoverProvider": "Източник за обложки",
@@ -296,6 +309,7 @@
"LabelDeleteFromFileSystemCheckbox": "Изтрий от файловата система (отмени за да бъдат премахни само от базата данни)",
"LabelDescription": "Описание",
"LabelDeselectAll": "Премахни всички",
"LabelDetectedPattern": "Намерен образец:",
"LabelDevice": "Устройство",
"LabelDeviceInfo": "Информация за Устройство",
"LabelDeviceIsAvailableTo": "Устройството е достъпно за ...",
@@ -345,7 +359,11 @@
"LabelExample": "Пример",
"LabelExpandSeries": "Покажи сериите",
"LabelExpandSubSeries": "Покажи съб сериите",
"LabelExplicit": "С нецензурно съдържание",
"LabelExpired": "Изтекъл",
"LabelExpiresAt": "Изтича на",
"LabelExpiresInSeconds": "Изтича след (секунди)",
"LabelExpiresNever": "Никога",
"LabelExplicit": "Експлицитно",
"LabelExplicitChecked": "С нецензурно съдържание (проверено)",
"LabelExplicitUnchecked": "Без нецензурно съдържание (непроверено)",
"LabelExportOPML": "Експортирай OPML",
@@ -360,6 +378,7 @@
"LabelFilterByUser": "Филтриране по Потребител",
"LabelFindEpisodes": "Намери Епизоди",
"LabelFinished": "Дата на приключване",
"LabelFinishedDate": "Приключено на {0}",
"LabelFolder": "Папка",
"LabelFolders": "Папки",
"LabelFontBold": "Получерно",
@@ -404,6 +423,7 @@
"LabelLanguages": "Езици",
"LabelLastBookAdded": "Последно Добавена Книга",
"LabelLastBookUpdated": "Последно Обновена Книга",
"LabelLastProgressDate": "Последен прогрес: {0}",
"LabelLastSeen": "Последно Видян",
"LabelLastTime": "Последно Време",
"LabelLastUpdate": "Последно Обновяване",
@@ -416,6 +436,9 @@
"LabelLibraryFilterSublistEmpty": "Не {0}",
"LabelLibraryItem": "Елемент на Библиотека",
"LabelLibraryName": "Име на Библиотека",
"LabelLibrarySortByProgress": "Прогрес: Последно обновление",
"LabelLibrarySortByProgressFinished": "Прогрес: Приключено",
"LabelLibrarySortByProgressStarted": "Прогрес: Започнато",
"LabelLimit": "Лимит",
"LabelLineSpacing": "Междуредие",
"LabelListenAgain": "Слушай отново",
@@ -424,6 +447,7 @@
"LabelLogLevelWarn": "Предупреждение",
"LabelLookForNewEpisodesAfterDate": "Търси нови епизоди след дата",
"LabelLowestPriority": "Най-нисък Приоритет",
"LabelMatchConfidence": "Увереност",
"LabelMatchExistingUsersBy": "Съпостави съществуващи потребители по",
"LabelMatchExistingUsersByDescription": "Използва се за свързване на съществуващи потребители. След свързване потребителите ще бъдат съпоставени по уникален идентификатор от вашия доставчик на SSO",
"LabelMaxEpisodesToDownload": "Максимален брой епизоди за сваляне. Използвай 0 за неограничен.",
@@ -453,7 +477,9 @@
"LabelNewestAuthors": "Най-новите автори",
"LabelNewestEpisodes": "Най-новите епизоди",
"LabelNextBackupDate": "Следваща Дата на Архивиране",
"LabelNextChapters": "Следващите глави ще бъдат:",
"LabelNextScheduledRun": "Следващо Планирано Изпълнение",
"LabelNoApiKeys": "Няма API ключове",
"LabelNoCustomMetadataProviders": "Няма потребителски доставчици на метаданни",
"LabelNoEpisodesSelected": "Няма избрани епизоди",
"LabelNotFinished": "Не е приключено",
@@ -469,6 +495,7 @@
"LabelNotificationsMaxQueueSize": "Максимален размер на опашката за известия",
"LabelNotificationsMaxQueueSizeHelp": "Събитията са ограничени до изстрелване на 1 на секунда. Събитията ще бъдат игнорирани ако опашката е на максимален размер. Това предотвратява спамирането на известия.",
"LabelNumberOfBooks": "Брой на Книги",
"LabelNumberOfChapters": "Брой глави:",
"LabelNumberOfEpisodes": "Брой епизоди",
"LabelOpenIDAdvancedPermsClaimDescription": "Име на OpenID твърдението, което съдържа разширени права за достъп до потребителски действия в приложението, които ще се прилагат за роли, различни от администраторските (<b>ако е конфигурирано</b>). Ако твърдението липсва в отговора, достъпът до ABS ще бъде отказан. Ако липсва една опция, тя ще се третира като <code>false</code>. Уверете се, че твърдението на доставчика на идентичност съответства на очакваната структура:",
"LabelOpenIDClaims": "Оставете следните опции празни, за да деактивирате разширеното присвояване на групи, като автоматично ще бъде присвоена групата 'Потребител'.",
@@ -513,7 +540,7 @@
"LabelPublishers": "Издателство",
"LabelRSSFeedCustomOwnerEmail": "Персонализиран имейл на собственика",
"LabelRSSFeedCustomOwnerName": "Персонализирано име на собственика",
"LabelRSSFeedOpen": "RSS Feed Оптворен",
"LabelRSSFeedOpen": "RSS Feed е отворен",
"LabelRSSFeedPreventIndexing": "Предотвратете индексиране",
"LabelRSSFeedSlug": "идентификатор на RSS емисия",
"LabelRSSFeedURL": "URL на RSS емисия",
@@ -543,6 +570,7 @@
"LabelSelectAll": "Избери всичко",
"LabelSelectAllEpisodes": "Избери всички епизоди",
"LabelSelectEpisodesShowing": "Избери {0} епизоди показани",
"LabelSelectUser": "Избери потребител",
"LabelSelectUsers": "Избери Потребители",
"LabelSendEbookToDevice": "Изпрати електронна книга до ...",
"LabelSequence": "Последователност",
@@ -560,8 +588,8 @@
"LabelSettingsBookshelfViewHelp": "Скеуморфен дизайн с дървени рафтове",
"LabelSettingsChromecastSupport": "Chromecast поддръжка",
"LabelSettingsDateFormat": "Формат на Дата",
"LabelSettingsEnableWatcher": "Автоматично сканиране на библиотеките за промени",
"LabelSettingsEnableWatcherForLibrary": "Автоматично сканиране на библиотеката за промени",
"LabelSettingsEnableWatcher": "Автоматично преглеждане на библиотеките за промени",
"LabelSettingsEnableWatcherForLibrary": "Автоматично преглеждане на библиотеката за промени",
"LabelSettingsEnableWatcherHelp": "Включва автоматичното добавяне/обновяване на елементи, когато се открият промени във файловете. *Изисква рестарт на сървъра",
"LabelSettingsEpubsAllowScriptedContent": "Позволи скриптово съдържание в epub-и",
"LabelSettingsEpubsAllowScriptedContentHelp": "Позволи epub файловете да изпълняват скриптове. Препоръчително е да бъде изключено освен ако не се доверявате на източника на epub файловете.",
@@ -610,6 +638,7 @@
"LabelStartTime": "Начално Време",
"LabelStarted": "Стартирано",
"LabelStartedAt": "Стартирано на",
"LabelStartedDate": "Започнато {0}",
"LabelStatsAudioTracks": "Аудио Канали",
"LabelStatsAuthors": "Автори",
"LabelStatsBestDay": "Най-добър ден",
@@ -639,6 +668,7 @@
"LabelTheme": "Тема",
"LabelThemeDark": "Тъмна",
"LabelThemeLight": "Светла",
"LabelThemeSepia": "Сепия",
"LabelTimeBase": "Времева Основа",
"LabelTimeDurationXHours": "{0} часа",
"LabelTimeDurationXMinutes": "{0} минути",
@@ -693,7 +723,11 @@
"LabelViewPlayerSettings": "Виж настройки на плеъра",
"LabelViewQueue": "Виж Опашка",
"LabelVolume": "Сила на Звука",
"LabelWebRedirectURLsDescription": "Разрешете тези URL-и във вашият OAuth доставчик, за да позволите пренасочването обратно към уеб приложението след вход:",
"LabelWebRedirectURLsSubfolder": "Подпапка за URL адреси за пренасочване",
"LabelWeekdaysToRun": "Делници за изпълнение",
"LabelXBooks": "{0} книги",
"LabelXItems": "{0} елемента",
"LabelYearReviewHide": "Скрий ревю на годината ти",
"LabelYearReviewShow": "Виж ревю на годината ти",
"LabelYourAudiobookDuration": "Продължителност на вашата аудиокнига",
@@ -702,41 +736,64 @@
"LabelYourProgress": "Твоят прогрес",
"MessageAddToPlayerQueue": "Добави към опашката на плейъра",
"MessageAppriseDescription": "За да ползвате тази функция трябва да имате активна инстанция на <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> или на друго АПИ което да обработва тези заявки. <br />The Apprise API Url-а трябва дае пълния URL път за изпращане на известията, например, ако вашето АПИ ве подава от <code>http://192.168.1.1:8337</code> трябва да сложитев <code>http://192.168.1.1:8337/notify</code>.",
"MessageAsinCheck": "Уверете се, че използвате ASIN от правилния Audible регион, а не от Amazon.",
"MessageAuthenticationLegacyTokenWarning": "Остарелите API токени ще бъдат премахнати в бъдеще. Вместо това използвайте <a href=\"/config/api-keys\">API ключове</a>.",
"MessageAuthenticationOIDCChangesRestart": "Рестартирайте сървърът след записването на настройките, за да активирате OIDC промените.",
"MessageAuthenticationSecurityMessage": "За осигуряването на по-добра сигурност, автентикацията беше подобрена. Всеки потребител ще трябва да се автентикира наново.",
"MessageBackupsDescription": "Резервните копия включват потребители, напредък на потребителите, подробности за елементите в библиотеката, настройки на сървъра и изображения, съхранени в <code>/metadata/items</code> и <code>/metadata/authors</code>. Резервните копия <strong>не</strong> включват никакви файлове, съхранени в папките на вашата библиотека.",
"MessageBackupsLocationEditNote": "Забележка: Актуализирането на местоположението за архивиране няма да премести или промени съществуващите архиви",
"MessageBackupsLocationNoEditNote": "Забележка: Местоположението за архивиране се задава с помощта на променлива на средата и не може бъде променена от тук.",
"MessageBackupsLocationPathEmpty": "Пътят към местоположението за архивиране не може да бъде празен",
"MessageBatchEditPopulateMapDetailsAllHelp": "Популирайте активираните полета с данни от всички елементи. Полетата със няколко стоайности ще бъдат обединени",
"MessageBatchEditPopulateMapDetailsItemHelp": "Попълнете активираните полета с информация за картата с данни от този елемент",
"MessageBatchQuickMatchDescription": "Бързото Съпоставяне ще опита да добави липсващи корици и метаданни за избраните елементи. Активирайте опциите по-долу, за да позволите на Бързото съпоставяне да презапише съществуващите корици и/или метаданни.",
"MessageBookshelfNoCollections": "Все още нямате създадени колекции",
"MessageBookshelfNoCollectionsHelp": "Колекциите са публични. Всички потребители с достъп до библиотеката ще могат да ги виждат.",
"MessageBookshelfNoRSSFeeds": "Няма отворени RSS feed-ове",
"MessageBookshelfNoResultsForFilter": "Няма резултат за филтер \"{0}: {1}\"",
"MessageBookshelfNoResultsForQuery": "Няма резултати от заявката",
"MessageBookshelfNoSeries": "Нямаш сеЗЙ",
"MessageBookshelfNoSeries": "Нямате поредица",
"MessageBulkChapterPattern": "Колко глави искате да добавите, използвайки тази схема за номериране?",
"MessageChapterEndIsAfter": "Краят на главата е след края на вашата аудиокнига",
"MessageChapterErrorFirstNotZero": "Първата глава трябва да започва от 0",
"MessageChapterErrorStartGteDuration": "Началото на главата трябва да бъде по-малко от продължителността на аудиокнигата",
"MessageChapterErrorStartLtPrev": "Началото на главата трябва да бъде по-голямо или равно на края на предишната глава",
"MessageChapterStartIsAfter": "Началото на главата е след края на вашата аудиокнига",
"MessageChaptersNotFound": "Главите не са намерени",
"MessageCheckingCron": "Проверяване на cron...",
"MessageConfirmCloseFeed": "Сигурни ли сте, че искате да затворите този feed?",
"MessageConfirmDeleteApiKey": "Сигурни ли сте, че искате да изтриете API ключ \"{0}\"?",
"MessageConfirmDeleteBackup": "Сигурни ли сте, че искате да изтриете този архив {0}?",
"MessageConfirmDeleteDevice": "Сигурни ли сте, че искате да изтриете е-четец \"{0}\"?",
"MessageConfirmDeleteFile": "Това ще изтрие файла от файловата Ви система. Сигурни ли сте?",
"MessageConfirmDeleteLibrary": "Сигурни ли сте, че искате да изтриете за винаги библиотека \"{0}\"?",
"MessageConfirmDeleteLibraryItem": "Това ще изтрие елемента от базата данни и файловата Ви система. Сигурни ли сте?",
"MessageConfirmDeleteLibraryItems": "Това ще изтрие {0} елемента от базата данни и файловата Ви система. Сигурни ли сте?",
"MessageConfirmDeleteMetadataProvider": "Сигурни ли сте, че искате да изтриете доставчика нa метаданни \"{0}\"?",
"MessageConfirmDeleteNotification": "Сигурни ли сте, че искате да изтриете това уведомление?",
"MessageConfirmDeleteSession": "Сигурни ли сте, че искате да изтриете тази сесия?",
"MessageConfirmEmbedMetadataInAudioFiles": "Сигурнли ли сте, че искате да вградите метаданните в {0} аудио файла?",
"MessageConfirmForceReScan": "Сигурни ли сте, че искате да принудите повторно сканиране?",
"MessageConfirmMarkAllEpisodesFinished": "Сигурни ли сте, че искате да маркирате всички епизоди като завършени?",
"MessageConfirmMarkAllEpisodesNotFinished": "Сигурни ли сте, че искате да маркирате всички епизоди като незавършени?",
"MessageConfirmMarkItemFinished": "Сигурни ли сте, че искате да маркирате \"{0}\" като приключено?",
"MessageConfirmMarkItemNotFinished": "Сигурни ли сте, че искате да маркирате \"{0}\" като неприключено?",
"MessageConfirmMarkSeriesFinished": "Сигурни ли сте, че искате да маркирате всички книги в тази серия като завършени?",
"MessageConfirmMarkSeriesNotFinished": "Сигурни ли сте, че искате да маркирате всички книги в тази серия като незавършени?",
"MessageConfirmNotificationTestTrigger": "Пуснете това уведомление с тестови данни?",
"MessageConfirmPurgeCache": "Изчистването на кеша ще изтрие цялата директория в <code>/metadata/cache</code>. <br /><br />Сигурни ли сте, че искате да премахнете директорията на кеша?",
"MessageConfirmPurgeItemsCache": "Изчистването на кеша на елементите ще изтрие цялата директория в <code>/metadata/cache/items</code>. <br />Сигурни ли сте?",
"MessageConfirmQuickEmbed": "Внимание! Бързото вграждане няма да архивира вашите аудио файлове. Уверете се, че имате резервно копие на вашите аудио файлове. <br><br>Искате ли да продължите?",
"MessageConfirmQuickMatchEpisodes": "Бързото сравняване на епизоди ще презапише детайлите, ако се намери съвпадение. Само не съвпаднали епизоди ще бъдат обновени. Сигурни ли сте?",
"MessageConfirmReScanLibraryItems": "Сигурни ли сте, че искате да сканирате отново {0} елемента?",
"MessageConfirmRemoveAllChapters": "Сигурни ли сте, че искате да премахнете всички глави?",
"MessageConfirmRemoveAuthor": "Сигурни ли сте, че искате да премахнете автор \"{0}\"?",
"MessageConfirmRemoveCollection": "Сигурни ли сте, че искате да премахнете колекция \"{0}\"?",
"MessageConfirmRemoveEpisode": "Сигурни ли сте, че искате да премахнете епизод \"{0}\"?",
"MessageConfirmRemoveEpisodeNote": "Забележка: Това няма да доведе до изтриване на аудио файла, освен ако не активирате опцията \"Твърдо изтриване на файла\"",
"MessageConfirmRemoveEpisodes": "Сигурни ли сте, че искате да премахнете {0} епизода?",
"MessageConfirmRemoveListeningSessions": "Сигурни ли сте, че искате да премахнете {0} слушателски сесии?",
"MessageConfirmRemoveMetadataFiles": "Сигурни ли сте, че искате да премахнете всичките метаданни. {0} файлове във папките на Вашата библиотека?",
"MessageConfirmRemoveNarrator": "Сигурни ли сте, че искате да премахнете разказвач \"{0}\"?",
"MessageConfirmRemovePlaylist": "Сигурни ли сте, че искате да премахнете плейлиста \"{0}\"?",
"MessageConfirmRenameGenre": "Сигурни ли сте, че искате да преименувате жанра \"{0}\" на \"{1}\" за всички елементи?",
@@ -745,19 +802,27 @@
"MessageConfirmRenameTag": "Сигурни ли сте, че искате да преименувате таг \"{0}\" на \"{1}\" за всички елементи?",
"MessageConfirmRenameTagMergeNote": "Забележка: Този таг вече съществува и ще бъде слято.",
"MessageConfirmRenameTagWarning": "Внимание! Вече съществува подобен таг с различно писане \"{0}\".",
"MessageConfirmResetProgress": "Сигурни ли сте, че искате да нулирате прогреса си?",
"MessageConfirmSendEbookToDevice": "Сигурни ли сте, че искате да изпратите {0} електронна книга \"{1}\" до устройство \"{2}\"?",
"MessageConfirmUnlinkOpenId": "Сигурни ли сте, че искате да отвържете този потребител от OpenID?",
"MessageDaysListenedInTheLastYear": "{0} дни слушане през последната година",
"MessageDownloadingEpisode": "Сваля епизод",
"MessageDragFilesIntoTrackOrder": "Плъзнете файлове в правилния ред на каналите",
"MessageEmbedFailed": "Вграждането беше неуспешно!",
"MessageEmbedFinished": "Вграждането завърши!",
"MessageEmbedQueue": "Поставено в опашката за вграждане на метаданни ({0} в опашката)",
"MessageEpisodesQueuedForDownload": "{0} Епизод(и) са сложени за сваляне",
"MessageEreaderDevices": "За да осигурите доставката на е-книги, може да се наложи да добавите горепосочения имейл адрес като валиден подател за всяко устройство, изброено по-долу.",
"MessageFeedURLWillBe": "Адресът на емисията ще бъде {0}",
"MessageFetching": "Извличане...",
"MessageForceReScanDescription": "ще сканира всички файлове отново като прясно сканиране. Аудио файлове ID3 тагове, OPF файлове и текстови файлове ще бъдат сканирани като нови.",
"MessageHeatmapListeningTimeTooltip": "<strong>{0} слушане</strong> на {1}",
"MessageHeatmapNoListeningSessions": "Няма сесии за слушане на {0}",
"MessageImportantNotice": "Важно Съобщение!",
"MessageInsertChapterBelow": "Вмъкни глава под",
"MessageItemsSelected": "{0} избрани",
"MessageItemsUpdated": "{0} елемента обновени",
"MessageInvalidAsin": "Невалиден ASIN",
"MessageItemsSelected": "{0} избрани елемента",
"MessageItemsUpdated": "{0} обновени елемента",
"MessageJoinUsOn": "Присъединете се към нас",
"MessageLoading": "Зарежда...",
"MessageLoadingFolders": "Зареждане на Папки...",
@@ -778,6 +843,7 @@
"MessageNoCollections": "Няма колекции",
"MessageNoCoversFound": "Не са намерени корици",
"MessageNoDescription": "Няма описание",
"MessageNoDevices": "Няма устройства",
"MessageNoDownloadsInProgress": "Няма изтегляния в прогрес",
"MessageNoDownloadsQueued": "Няма изтегляния в опашка",
"MessageNoEpisodeMatchesFound": "Няма намерени съвпадения за епизоди",
@@ -791,6 +857,7 @@
"MessageNoLogs": "Няма логове",
"MessageNoMediaProgress": "Няма прогрес на медията",
"MessageNoNotifications": "Няма известия",
"MessageNoPodcastFeed": "Невалиден подкаст: Няма канал",
"MessageNoPodcastsFound": "Няма намерени подкасти",
"MessageNoResults": "Няма резултати",
"MessageNoSearchResultsFor": "Няма резултати за \"{0}\"",
@@ -799,13 +866,19 @@
"MessageNoTasksRunning": "Няма вършещи се задачи",
"MessageNoUpdatesWereNecessary": "Няма нужда от обновяване",
"MessageNoUserPlaylists": "Нямате създадени плейлисти",
"MessageNoUserPlaylistsHelp": "Плейлистите за частни. Само създалият ги потребител ще може да ги вижда.",
"MessageNotYetImplemented": "Още не е изпълнено",
"MessageOpmlPreviewNote": "Забележка: Това е преглед на анализирания OPML файл. Действителното заглавие на подкаста ще бъде взето от RSS фийда.",
"MessageOr": "или",
"MessagePauseChapter": "Пауза на глава",
"MessagePlayChapter": "Пусни налчалото на глава",
"MessagePlaylistCreateFromCollection": "Създай плейлист от колекция",
"MessagePleaseWait": "Моля изчакайте...",
"MessagePodcastHasNoRSSFeedForMatching": "Подкастът няма URL адрес на RSS feed за използване за съпоставяне",
"MessagePodcastSearchField": "Въведи какво да търся или RSS емисия адрес",
"MessageQuickEmbedInProgress": "Бързото вграждане е в процес на изпълнение",
"MessageQuickEmbedQueue": "Поставено в опашката за бързо вграждане ({0} в опашката)",
"MessageQuickMatchAllEpisodes": "Бързо Сравняване на Всички Епизоди",
"MessageQuickMatchDescription": "Попълни празните детайли и корици с първия резултат от '{0}'. Не презаписва детайлите, освен ако не е активирана настройката 'Предпочети съвпадащи метаданни' на сървъра.",
"MessageRemoveChapter": "Премахни глава",
"MessageRemoveEpisodes": "Премахни {0} епизод(и)",
@@ -815,11 +888,52 @@
"MessageResetChaptersConfirm": "Сигурни ли сте, че искате да нулирате главите и да отмените промените, които сте направили?",
"MessageRestoreBackupConfirm": "Сигурни ли сте, че искате да възстановите архива създаден на",
"MessageRestoreBackupWarning": "Възстановяването на архив ще презапише цялата база данни, намираща се в /config и кориците в /metadata/items & /metadata/authors.<br /><br />Архивите не променят файловете в папките на вашата библиотека. Ако сте активирали настройките на сървъра за съхранение на корици и метаданни в папките на вашата библиотека, те няма да бъдат архивирани или презаписани.<br /><br />Всички клиенти, използващи вашия сървър, ще бъдат автоматично обновени.",
"MessageScheduleLibraryScanNote": "За повече потребители се препоръчва да оставят този фийчър изключен и да оставят настройката \"Автоматично преглеждане за промени в библиотеката\" включена - тя автоматично ще засече промени в папките на вашата библиотека. Включете тази настройка ако \"Автоматично преглеждане за промени в библиотеката\" не рабови на вашата файлова система (например NFS).",
"MessageScheduleRunEveryWeekdayAtTime": "Изпълни всеки {0} в {1}",
"MessageSearchResultsFor": "Резултати от търсенето за",
"MessageSelected": "{0} избрани",
"MessageSeriesSequenceCannotContainSpaces": "Подредбата в серия не може да съдържа шпации",
"MessageServerCouldNotBeReached": "Сървърът не може да бъде достигнат",
"MessageSetChaptersFromTracksDescription": "Задайте глави, като използвате всеки аудио файл като глава и заглавие на главата като име на аудио файла",
"MessageShareExpirationWillBe": "Изтичането ще бъде на <strong>{0}</strong>",
"MessageShareExpiresIn": "Изтича след {0}",
"MessageShareURLWillBe": "URL за споделяне ще бъде <strong>{0}</strong>",
"MessageStartPlaybackAtTime": "Започни възпроизвеждане на \"{0}\" в {1}?",
"MessageTaskAudioFileNotWritable": "На Аудио файл \"{0}\" не може да се записва",
"MessageTaskCanceledByUser": "Задачата е отказана от потребител",
"MessageTaskDownloadingEpisodeDescription": "Изтегляне на епизод \"{0}\"",
"MessageTaskEmbeddingMetadata": "Вграждане на метаданни",
"MessageTaskEmbeddingMetadataDescription": "Вграждане на метаданни в аудиокнига \"{0}\"",
"MessageTaskEncodingM4b": "Кодиране M4B",
"MessageTaskEncodingM4bDescription": "Кодиране на аудиокнига \"{0}\" в единичен m4b файл",
"MessageTaskFailed": "Неуспешно",
"MessageTaskFailedToBackupAudioFile": "Неуспешно създаване на разервно копие на аудио файл \"{0}\"",
"MessageTaskFailedToCreateCacheDirectory": "Неуспешно създаване на директория за кеширане",
"MessageTaskFailedToEmbedMetadataInFile": "Неуспешно вграждане на метаданни във файл \"{0}\"",
"MessageTaskFailedToMergeAudioFiles": "Неуспешно сливане на аудио файловете",
"MessageTaskFailedToMoveM4bFile": "Неуспешно преместване на m4b файл",
"MessageTaskFailedToWriteMetadataFile": "Неуспешно записване на файла за метаданни",
"MessageTaskMatchingBooksInLibrary": "Съответстващи книги в библиотека \"{0}\"",
"MessageTaskNoFilesToScan": "Няма файлове за сканиране",
"MessageTaskOpmlImport": "OPML импортиране",
"MessageTaskOpmlImportDescription": "Създаване на подкасти от {0} RSS хранилки",
"MessageTaskOpmlImportFeed": "OPML импортиран фийд",
"MessageTaskOpmlImportFeedDescription": "Импортиране на RSS хранилка \"{0}\"",
"MessageTaskOpmlImportFeedFailed": "Неуспешно взимане на подкаст фийд",
"MessageTaskOpmlImportFeedPodcastDescription": "Създаване на подкаст \"{0}\"",
"MessageTaskOpmlImportFeedPodcastExists": "На този път вече съществува подкаст",
"MessageTaskOpmlImportFeedPodcastFailed": "Неуспешно създаване на подкаст",
"MessageTaskOpmlImportFinished": "Добавени {0} подкаста",
"MessageTaskOpmlParseFailed": "Неуспешно анализиране на OPML файла",
"MessageTaskOpmlParseFastFail": "Невалиден OPML файл, не беше намерен нито <opml> таг нито <outline> таг",
"MessageTaskOpmlParseNoneFound": "Няма намерени канали във OPML файла",
"MessageTaskScanItemsAdded": "{0} добавени",
"MessageTaskScanItemsMissing": "{0} липсващи",
"MessageTaskScanItemsUpdated": "{0} обновени",
"MessageTaskScanNoChangesNeeded": "Не са нужни промени",
"MessageTaskScanningFileChanges": "Проверка за промени във файловете в \"{0}\"",
"MessageTaskScanningLibrary": "Сканиране на \"{0}\" библиотека",
"MessageTaskTargetDirectoryNotWritable": "Целевата директория не е достъпна за запис",
"MessageThinking": "Мисля...",
"MessageUploaderItemFailed": "Неуспешно качване",
"MessageUploaderItemSuccess": "Успешно качване!",
@@ -837,43 +951,117 @@
"NoteUploaderFoldersWithMediaFiles": "Папките с медийни файлове ще бъдат обработени като отделни елементи на библиотеката.",
"NoteUploaderOnlyAudioFiles": "Ако качвате само аудио файлове, то всеки аудио файл ще бъде обработен като отделна аудиокнига.",
"NoteUploaderUnsupportedFiles": "Неподдържаните файлове се игнорират. При избор или пускане на папка, други файлове, които не са в папка на елемент, се игнорират.",
"NotificationOnBackupCompletedDescription": "Изпълнява се при завършване на създаване на резервно копие",
"NotificationOnBackupFailedDescription": "Изпълнява се при неуспешено създаване на резервно копие",
"NotificationOnEpisodeDownloadedDescription": "Изпълнява се при автоматично изтегляне на подкаст епизод",
"NotificationOnRSSFeedDisabledDescription": "Изпълнява се, когато автоматичното изтегляне на епизодите е деактивирано, поради твърде много неуспешни опити",
"NotificationOnRSSFeedFailedDescription": "Пуска се когато заявката за RSS фийд е неуспешна за автоматично сваляне на епизод",
"NotificationOnTestDescription": "Event за тестване на системата за нотификации",
"PlaceholderBulkChapterInput": "Въведете име на глава или използвайте номериране (прим. 'Епизод 1', 'Глава 10', '1.')",
"PlaceholderNewCollection": "Ново име на колекцията",
"PlaceholderNewFolderPath": "Нов път на папката",
"PlaceholderNewPlaylist": "Ново име на плейлиста",
"PlaceholderSearch": "Търсене...",
"PlaceholderSearchEpisode": "Търсене на Епизоди...",
"StatsAuthorsAdded": "добаврени автори",
"StatsBooksAdded": "добавени книги",
"StatsBooksAdditional": "Някой от вкючените добавки…",
"StatsBooksFinished": "завършени книги",
"StatsBooksFinishedThisYear": "Някой от книгите приключени тази година…",
"StatsBooksListenedTo": "слушани книги",
"StatsCollectionGrewTo": "Твоята книжна колекция израсна до…",
"StatsSessions": "сесии",
"StatsSpentListening": "прекарано в слушане",
"StatsTopAuthor": "ТОП АВТОР",
"StatsTopAuthors": "ТОП АВТОРИ",
"StatsTopGenre": "ТОП ЖАНР",
"StatsTopGenres": "ТОП ЖАНРА",
"StatsTopMonth": "ТОП МЕСЕЦ",
"StatsTopNarrator": "ТОП РАЗКАЗВАЧ",
"StatsTopNarrators": "ТОП РАЗКАЗВАЧИ",
"StatsTotalDuration": "С пълно времетраене…",
"StatsYearInReview": "ГОДИНАТА В ПРЕГЛЕД",
"ToastAccountUpdateSuccess": "Успешно обновяване на акаунта",
"ToastAppriseUrlRequired": "Трябва да въведете Apprise URL",
"ToastAsinRequired": "ASIN-а е задължителен",
"ToastAuthorImageRemoveSuccess": "Авторската снимка е премахната",
"ToastAuthorNotFound": "Автор \"{0}\" не е намерен",
"ToastAuthorRemoveSuccess": "Арторът е премахнат",
"ToastAuthorSearchNotFound": "Авторът не е намерен",
"ToastAuthorUpdateMerged": "Обновяване на автора сливано",
"ToastAuthorUpdateSuccess": "Автора обновен",
"ToastAuthorUpdateSuccessNoImageFound": "Автор обновен (не е намерена снимка)",
"ToastBackupAppliedSuccess": "Архивът е приложен",
"ToastBackupCreateFailed": "Неуспешно създаване на архив",
"ToastBackupCreateSuccess": "Архивът е създаден",
"ToastBackupDeleteFailed": "Неуспешно изтриване на архив",
"ToastBackupDeleteSuccess": "Архивът е изтрит",
"ToastBackupInvalidMaxKeep": "Невалиден брой за архиви за запазване",
"ToastBackupInvalidMaxSize": "Невалиден максимален рамер на архив",
"ToastBackupRestoreFailed": "Неуспешно възстановяване на архив",
"ToastBackupUploadFailed": "Неуспешно качване на архив",
"ToastBackupUploadSuccess": "Архивът е качен",
"ToastBatchApplyDetailsToItemsSuccess": "Детайли приложени на предмети",
"ToastBatchDeleteFailed": "Груповото изтриване се провали",
"ToastBatchDeleteSuccess": "Успешно групово изтриване",
"ToastBatchQuickMatchFailed": "Груповото Бързо Съвпадение се провали!",
"ToastBatchQuickMatchStarted": "Груповото Бързо Съвпадение на {0} книги започна!",
"ToastBatchUpdateFailed": "Неуспешно групово актуализиране",
"ToastBatchUpdateSuccess": "Успешно групово актуализиране",
"ToastBookmarkCreateFailed": "Неуспешно създаване на отметка",
"ToastBookmarkCreateSuccess": "Отметката е създадена",
"ToastBookmarkRemoveSuccess": "Отметката е премахната",
"ToastBulkChapterInvalidCount": "Въведете число между 1 и 150",
"ToastCachePurgeFailed": "Неуспешно изчистване на кеша",
"ToastCachePurgeSuccess": "Успешно изчистване на кеша",
"ToastChapterLocked": "Главата е заключена.",
"ToastChapterStartTimeAdjusted": "Начално време на главате е настоено с {0} секунди",
"ToastChaptersAllLocked": "Всички глави са заключени. Оключете някой глави за да преместите техните времена.",
"ToastChaptersHaveErrors": "Главите имат грешки",
"ToastChaptersInvalidShiftAmountLast": "Невалидно време за преместване. Началният час на последната глава ще превиши общата продължителност на аудиокнигата.",
"ToastChaptersInvalidShiftAmountStart": "Невалидно време за преместване. Първата глава ще има нулева или отрицателна дължина и ще бъде презаписана от втората глава. Увеличете началното време на втората глава.",
"ToastChaptersMustHaveTitles": "Главите трябва да имат заглавия",
"ToastChaptersRemoved": "Главите са премахнати",
"ToastChaptersUpdated": "Главите са актуализирани",
"ToastCollectionItemsAddFailed": "Неуспешно добавяне на елемент(и) към колекцията",
"ToastCollectionRemoveSuccess": "Колекцията е премахната",
"ToastCollectionUpdateSuccess": "Колекцията е обновена",
"ToastConnectionNotAvailable": "Няма връзка. Моля, опитайте отново по-късно",
"ToastCoverSearchFailed": "Търсенето на корица е неуспешно",
"ToastCoverUpdateFailed": "Обновяването на корицата е неуспешно",
"ToastDateTimeInvalidOrIncomplete": "Датата и часът са невалидни или непълни",
"ToastDeleteFileFailed": "Неуспешно изтриване на файла",
"ToastDeleteFileSuccess": "Успешно изтриване на файла",
"ToastDeviceAddFailed": "Неуспешно добавяне на устройство",
"ToastDeviceNameAlreadyExists": "Вече съществува четец с това име",
"ToastDeviceTestEmailFailed": "Неуспешно изпращане на тестов имейл",
"ToastDeviceTestEmailSuccess": "Тестовият имейл е изпратен",
"ToastEmailSettingsUpdateSuccess": "Имейл настройките са актуализирани",
"ToastEncodeCancelFailed": "Неуспешно отменяне на кодирането",
"ToastEncodeCancelSucces": "Кодирането е отменено",
"ToastEpisodeDownloadQueueClearFailed": "Неуспешно изчистване на опашката",
"ToastEpisodeDownloadQueueClearSuccess": "Опашката за изтегляне на епизоди е изчистена",
"ToastEpisodeUpdateSuccess": "{0} епизода са актуализирани",
"ToastErrorCannotShare": "Не може да се споделя директно от това устройство",
"ToastFailedToCreate": "Неуспешно създаване",
"ToastFailedToDelete": "Неуспешно изтриване",
"ToastFailedToLoadData": "Неуспешно зареждане на данни",
"ToastFailedToMatch": "Неуспешно съвпадение",
"ToastFailedToShare": "Неуспешно споделяне",
"ToastFailedToUpdate": "Неуспешно актуализиране",
"ToastInvalidImageUrl": "Невалиден URL адрес на изображение",
"ToastInvalidMaxEpisodesToDownload": "Невалиден максимален брой епизоди за изтегляне",
"ToastInvalidUrl": "Невалиден URL адрес",
"ToastInvalidUrls": "Един или повече URL адреси са невалидни",
"ToastItemCoverUpdateSuccess": "Корицата на елемента е обновена",
"ToastItemDeletedFailed": "Неуспешно изтриване на елемента",
"ToastItemDeletedSuccess": "Елементът е изтрит",
"ToastItemDetailsUpdateSuccess": "Детайлите на елемента са обновени",
"ToastItemMarkedAsFinishedFailed": "Неуспешно маркиране като Завършено",
"ToastItemMarkedAsFinishedSuccess": "Елементът е маркиран като завършен",
"ToastItemMarkedAsNotFinishedFailed": "Неуспешно маркиране като Незавършено",
"ToastItemMarkedAsNotFinishedSuccess": "Елементът е маркиран като незавършен",
"ToastItemUpdateSuccess": "Елементът е актуализиран",
"ToastLibraryCreateFailed": "Неуспешно създаване на библиотека",
"ToastLibraryCreateSuccess": "Библиотеката \"{0}\" е създадена",
"ToastLibraryDeleteFailed": "Неуспешно изтриване на библиотека",
@@ -881,28 +1069,97 @@
"ToastLibraryScanFailedToStart": "Неуспешно стартиране на сканиране",
"ToastLibraryScanStarted": "Сканирането на библиотеката е стартирано",
"ToastLibraryUpdateSuccess": "Библиотеката \"{0}\" е обновена",
"ToastMatchAllAuthorsFailed": "Неуспешно съвпадение на всички автори",
"ToastMetadataFilesRemovedError": "Грешка при премахване на metadata.{0} файлове",
"ToastMetadataFilesRemovedNoneFound": "Не са намерени metadata.{0} файлове в библиотеката",
"ToastMetadataFilesRemovedNoneRemoved": "Не са премахнати metadata.{0} файлове",
"ToastMetadataFilesRemovedSuccess": "Премахнати са {0} файла metadata.{1}",
"ToastMustHaveAtLeastOnePath": "Трябва да има поне един път",
"ToastNameEmailRequired": "Изискват се име и имейл",
"ToastNameRequired": "Изисква се име",
"ToastNewApiKeyUserError": "Трябва да изберете потребител",
"ToastNewEpisodesFound": "Намерени са {0} нови епизода",
"ToastNewUserCreatedFailed": "Неуспешно създаване на акаунт: „{0}“",
"ToastNewUserCreatedSuccess": "Създаден е нов акаунт",
"ToastNewUserLibraryError": "Трябва да изберете поне една библиотека",
"ToastNewUserPasswordError": "Трябва да има парола; само root потребителят може да бъде с празна парола",
"ToastNewUserTagError": "Трябва да изберете поне един етикет",
"ToastNewUserUsernameError": "Въведете потребителско име",
"ToastNoNewEpisodesFound": "Не са намерени нови епизоди",
"ToastNoRSSFeed": "Подкастът няма RSS емисия",
"ToastNoUpdatesNecessary": "Не са необходими актуализации",
"ToastNotificationCreateFailed": "Неуспешно създаване на известие",
"ToastNotificationDeleteFailed": "Неуспешно изтриване на известието",
"ToastNotificationFailedMaximum": "Максималният брой неуспешни опити трябва да бъде >= 0",
"ToastNotificationQueueMaximum": "Максималната опашка за известия трябва да бъде >= 0",
"ToastNotificationSettingsUpdateSuccess": "Настройките за известия са актуализирани",
"ToastNotificationTestTriggerFailed": "Неуспешно задействане на тестово известие",
"ToastNotificationTestTriggerSuccess": "Тестовото известие е задействано",
"ToastNotificationUpdateSuccess": "Известието е актуализирано",
"ToastPlaylistCreateFailed": "Неуспешно създаване на плейлист",
"ToastPlaylistCreateSuccess": "Плейлистът е създаден",
"ToastPlaylistRemoveSuccess": "Плейлистът е премахнат",
"ToastPlaylistUpdateSuccess": "Плейлистът е обновен",
"ToastPodcastCreateFailed": "Неуспешно създаване на подкаст",
"ToastPodcastCreateSuccess": "Подкаст успешно създаден",
"ToastPodcastEpisodeUpdated": "Епизодът е актуализиран",
"ToastPodcastGetFeedFailed": "Неуспешно извличане на емисията на подкаста",
"ToastPodcastNoEpisodesInFeed": "Не са намерени епизоди в RSS емисията",
"ToastPodcastNoRssFeed": "Подкастът няма RSS емисия",
"ToastProgressIsNotBeingSynced": "Напредъкът не се синхронизира, рестартирайте възпроизвеждането",
"ToastProviderCreatedFailed": "Неуспешно добавяне на доставчик",
"ToastProviderCreatedSuccess": "Добавен е нов доставчик",
"ToastProviderNameAndUrlRequired": "Изискват се име и URL адрес",
"ToastProviderRemoveSuccess": "Доставчикът е премахнат",
"ToastRSSFeedCloseFailed": "Неуспешно затваряне на RSS емисията",
"ToastRSSFeedCloseSuccess": "RSS емисията е затворена",
"ToastRemoveFailed": "Неуспешно премахване",
"ToastRemoveItemFromCollectionFailed": "Неуспешно премахване на елемент от колекция",
"ToastRemoveItemFromCollectionSuccess": "Елементът е премахнат от колекция",
"ToastRemoveItemsWithIssuesFailed": "Неуспешно премахване на елементите от библиотеката с проблеми",
"ToastRemoveItemsWithIssuesSuccess": "Елементите от библиотеката с проблеми са премахнати",
"ToastRenameFailed": "Неуспешно преименуване",
"ToastRescanFailed": "Повторното сканиране е неуспешно за {0}",
"ToastRescanRemoved": "Повторното сканиране завърши: елементът е премахнат",
"ToastRescanUpToDate": "Повторното сканиране завърши: елементът вече е актуален",
"ToastRescanUpdated": "Повторното сканиране завърши: елементът е актуализиран",
"ToastScanFailed": "Неуспешно сканиране на елемент от библиотеката",
"ToastSelectAtLeastOneUser": "Изберете поне един потребител",
"ToastSendEbookToDeviceFailed": "Неуспешно изпращане на електронна книга до устройство",
"ToastSendEbookToDeviceSuccess": "Електронната книга е изпратена до устройство \"{0}\"",
"ToastSeriesSubmitFailedSameName": "Не могат да бъдат добавени два сериала с едно и също име",
"ToastSeriesUpdateFailed": "Неуспешно обновяване на серия",
"ToastSeriesUpdateSuccess": "Серията е обновена",
"ToastServerSettingsUpdateSuccess": "Настройките на сървъра са актуализирани",
"ToastSessionCloseFailed": "Неуспешно затваряне на сесията",
"ToastSessionDeleteFailed": "Неуспешно изтриване на сесия",
"ToastSessionDeleteSuccess": "Сесията е изтрита",
"ToastSleepTimerDone": "Таймерът за заспиване приключи... zZzzZz",
"ToastSlugMustChange": "Краткият URL (slug) съдържа невалидни символи",
"ToastSlugRequired": "Изисква се кратък URL (slug)",
"ToastSocketConnected": "Свързан сокет",
"ToastSocketDisconnected": "Сокетът е прекъснат",
"ToastSocketFailedToConnect": "Неуспешно свързване на сокет",
"ToastSortingPrefixesEmptyError": "Трябва да има поне 1 префикс за сортиране",
"ToastSortingPrefixesUpdateSuccess": "Префиксите за сортиране са актуализирани ({0} елемента)",
"ToastTitleRequired": "Изисква се заглавие",
"ToastUnknownError": "Неизвестна грешка",
"ToastUnlinkOpenIdFailed": "Неуспешно прекъсване на връзката на потребителя с OpenID",
"ToastUnlinkOpenIdSuccess": "Връзката на потребителя с OpenID е прекъсната",
"ToastUploaderFilepathExistsError": "Файловият път „{0}“ вече съществува на сървъра",
"ToastUploaderItemExistsInSubdirectoryError": "Елементът „{0}“ използва поддиректория на пътя за качване.",
"ToastUserDeleteFailed": "Неуспешно изтриване на потребител",
"ToastUserDeleteSuccess": "Потребителят е изтрит"
"ToastUserDeleteSuccess": "Потребителят е изтрит",
"ToastUserPasswordChangeSuccess": "Паролата е променена успешно",
"ToastUserPasswordMismatch": "Паролите не съвпадат",
"ToastUserPasswordMustChange": "Новата парола не може да бъде същата като старата",
"ToastUserRootRequireName": "Трябва да въведете root потребителско име",
"TooltipAddChapters": "Добавяне на глава(и)",
"TooltipAddOneSecond": "Добавяне на 1 секунда",
"TooltipAdjustChapterStart": "Кликнете за коригиране на началния час",
"TooltipLockAllChapters": "Заключване на всички глави",
"TooltipLockChapter": "Заключване на глава (Shift+клик за диапазон)",
"TooltipSubtractOneSecond": "Изваждане на 1 секунда",
"TooltipUnlockAllChapters": "Отключване на всички глави",
"TooltipUnlockChapter": "Отключване на глава (Shift+клик за диапазон)"
}
+103 -9
View File
@@ -1,5 +1,6 @@
{
"ButtonAdd": "যোগ করুন",
"ButtonAddApiKey": "এপিআই কী যোগ করুন",
"ButtonAddChapters": "অধ্যায় যোগ করুন",
"ButtonAddDevice": "ডিভাইস যোগ করুন",
"ButtonAddLibrary": "লাইব্রেরি যোগ করুন",
@@ -10,6 +11,8 @@
"ButtonApplyChapters": "অধ্যায় প্রয়োগ করুন",
"ButtonAuthors": "লেখকগণ",
"ButtonBack": "পেছনে যান",
"ButtonBatchEditPopulateFromExisting": "বিদ্যমান থেকে পূরণ করুন",
"ButtonBatchEditPopulateMapDetails": "ম্যাপ থেকে পূরণ করুন",
"ButtonBrowseForFolder": "ফোল্ডারের জন্য ব্রাউজ করুন",
"ButtonCancel": "বাতিল করুন",
"ButtonCancelEncode": "এনকোড বাতিল করুন",
@@ -18,6 +21,7 @@
"ButtonChooseAFolder": "একটি ফোল্ডার চয়ন করুন",
"ButtonChooseFiles": "ফাইল চয়ন করুন",
"ButtonClearFilter": "ফিল্টার পরিষ্কার করুন",
"ButtonClose": "বন্ধ করুন",
"ButtonCloseFeed": "ফিড বন্ধ করুন",
"ButtonCloseSession": "খোলা সেশন বন্ধ করুন",
"ButtonCollections": "সংগ্রহ",
@@ -42,6 +46,7 @@
"ButtonLatest": "সর্বশেষ",
"ButtonLibrary": "লাইব্রেরি",
"ButtonLogout": "লগআউট",
"ButtonLogoutAllDevices": "সব ডিভাইস থেকে লগআউট করুন",
"ButtonLookup": "সন্ধান",
"ButtonManageTracks": "ট্র্যাকগুলি পরিচালনা করুন",
"ButtonMapChapterTitles": "অধ্যায়ের শিরোনাম ম্যাপ করুন",
@@ -72,7 +77,7 @@
"ButtonReScan": "পুনরায় স্ক্যান",
"ButtonRead": "পড়ুন",
"ButtonReadLess": "সংক্ষিপ্ত",
"ButtonReadMore": "বিস্তারিত পড়ুন",
"ButtonReadMore": "আরও পড়ুন",
"ButtonRefresh": "রিফ্রেশ",
"ButtonRemove": "মুছে ফেলুন",
"ButtonRemoveAll": "সব মুছে ফেলুন",
@@ -117,11 +122,13 @@
"HeaderAccount": "অ্যাকাউন্ট",
"HeaderAddCustomMetadataProvider": "কাস্টম মেটাডেটা সরবরাহকারী যোগ করুন",
"HeaderAdvanced": "অ্যাডভান্সড",
"HeaderApiKeys": "এপিআই কী সমূহ",
"HeaderAppriseNotificationSettings": "বিজ্ঞপ্তি সেটিংস অবহিত করুন",
"HeaderAudioTracks": "অডিও ট্র্যাকসগুলো",
"HeaderAudiobookTools": "অডিওবই ফাইল ম্যানেজমেন্ট টুলস",
"HeaderAuthentication": "প্রমাণীকরণ",
"HeaderBackups": "ব্যাকআপ",
"HeaderBulkChapterModal": "একাধিক অধ্যায় যোগ করুন",
"HeaderChangePassword": "পাসওয়ার্ড পরিবর্তন করুন",
"HeaderChapters": "অধ্যায়",
"HeaderChooseAFolder": "একটি ফোল্ডার চয়ন করুন",
@@ -160,6 +167,7 @@
"HeaderMetadataOrderOfPrecedence": "মেটাডেটা অগ্রাধিকারের ক্রম",
"HeaderMetadataToEmbed": "এম্বেড করার জন্য মেটাডেটা",
"HeaderNewAccount": "নতুন অ্যাকাউন্ট",
"HeaderNewApiKey": "নতুন API কী",
"HeaderNewLibrary": "নতুন লাইব্রেরি",
"HeaderNotificationCreate": "বিজ্ঞপ্তি তৈরি করুন",
"HeaderNotificationUpdate": "বিজ্ঞপ্তি আপডেট করুন",
@@ -175,6 +183,7 @@
"HeaderPlaylist": "প্লেলিস্ট",
"HeaderPlaylistItems": "প্লেলিস্ট আইটেম",
"HeaderPodcastsToAdd": "যোগ করার জন্য পডকাস্ট",
"HeaderPresets": "প্রিসেট",
"HeaderPreviewCover": "কভার ্দেখুন",
"HeaderRSSFeedGeneral": "আরএসএস বিবরণ",
"HeaderRSSFeedIsOpen": "আরএসএস ফিড খোলা আছে",
@@ -186,12 +195,14 @@
"HeaderScheduleEpisodeDownloads": "স্বয়ংক্রিয় পর্ব ডাউনলোডের সময়সূচী নির্ধারন করুন",
"HeaderScheduleLibraryScans": "স্বয়ংক্রিয় লাইব্রেরি স্ক্যানের সময়সূচী",
"HeaderSession": "সেশন",
"HeaderSessions": "সেশনসমূহ",
"HeaderSetBackupSchedule": "ব্যাকআপ সময়সূচী সেট করুন",
"HeaderSettings": "সেটিংস",
"HeaderSettingsDisplay": "প্রদর্শন",
"HeaderSettingsExperimental": "পরীক্ষামূলক ফিচার",
"HeaderSettingsGeneral": "সাধারণ",
"HeaderSettingsScanner": "স্ক্যানার",
"HeaderSettingsSecurity": "নিরাপত্তা",
"HeaderSettingsWebClient": "ওয়েব ক্লায়েন্ট",
"HeaderSleepTimer": "স্লিপ টাইমার",
"HeaderStatsLargestItems": "সবচেয়ে বড় আইটেম",
@@ -203,6 +214,7 @@
"HeaderTableOfContents": "বিষয়বস্তুর সারণী",
"HeaderTools": "টুলস",
"HeaderUpdateAccount": "অ্যাকাউন্ট আপডেট করুন",
"HeaderUpdateApiKey": "API কী আপডেট করুন",
"HeaderUpdateAuthor": "লেখক আপডেট করুন",
"HeaderUpdateDetails": "বিশদ আপডেট করুন",
"HeaderUpdateLibrary": "লাইব্রেরি আপডেট করুন",
@@ -217,6 +229,7 @@
"LabelAccountTypeAdmin": "প্রশাসন",
"LabelAccountTypeGuest": "অতিথি",
"LabelAccountTypeUser": "ব্যবহারকারী",
"LabelActivities": "কার্যকলাপ",
"LabelActivity": "ক্রিয়াকলাপ",
"LabelAddToCollection": "সংগ্রহে যোগ করুন",
"LabelAddToCollectionBatch": "সংগ্রহে {0}টি বই যোগ করুন",
@@ -226,10 +239,15 @@
"LabelAddedDate": "যোগ করা হয়েছে {0}",
"LabelAdminUsersOnly": "শুধু অ্যাডমিন ব্যবহারকারী",
"LabelAll": "সব",
"LabelAllEpisodesDownloaded": "সব পর্ব ডাউনলোড করা হয়েছে",
"LabelAllUsers": "সমস্ত ব্যবহারকারী",
"LabelAllUsersExcludingGuests": "অতিথি ব্যতীত সকল ব্যবহারকারী",
"LabelAllUsersIncludingGuests": "অতিথি সহ সকল ব্যবহারকারী",
"LabelAlreadyInYourLibrary": "ইতিমধ্যেই আপনার লাইব্রেরিতে রয়েছে",
"LabelApiKeyCreated": "API কী \"{0}\" সফলভাবে তৈরি করা হয়েছে।",
"LabelApiKeyCreatedDescription": "API কীটি এখনই কপি করে রাখুন, কারণ এটি পরে আর দেখতে পারবেন না।",
"LabelApiKeyUser": "ব্যবহারকারীর পক্ষ থেকে কাজ করুন",
"LabelApiKeyUserDescription": "এই API কীটি যে ব্যবহারকারীর পক্ষ থেকে কাজ করবে, সেই ব্যবহারকারীর মতোই একই অনুমতি পাবে। লগে এটি এমনভাবে দেখাবে যেন ব্যবহারকারী নিজেই অনুরোধটি করেছেন।",
"LabelApiToken": "API টোকেন",
"LabelAppend": "সংযোজন",
"LabelAudioBitrate": "অডিও বিটরেট (যেমন- 128k)",
@@ -259,7 +277,7 @@
"LabelBonus": "উপরিলাভ",
"LabelBooks": "বইগুলো",
"LabelButtonText": "ঘর পাঠ্য",
"LabelByAuthor": "দ্বারা {0}",
"LabelByAuthor": "{0} অবশ্যই একদম অপরিবর্তিত রাখবে",
"LabelChangePassword": "পাসওয়ার্ড পরিবর্তন করুন",
"LabelChannels": "চ্যানেল",
"LabelChapterCount": "{0} অধ্যায়",
@@ -279,8 +297,10 @@
"LabelContinueListening": "শোনা চালিয়ে যান",
"LabelContinueReading": "পড়া চালিয়ে যান",
"LabelContinueSeries": "সিরিজ চালিয়ে যান",
"LabelCorsAllowed": "অনুমোদিত CORS অরিজিনসমূহ",
"LabelCover": "কভার",
"LabelCoverImageURL": "ছবির কভারের URL",
"LabelCoverProvider": "কভার প্রদানকারী",
"LabelCreatedAt": "তৈরি করা হয়েছে",
"LabelCronExpression": "Cron এক্সপ্রেশন",
"LabelCurrent": "বর্তমান",
@@ -291,6 +311,7 @@
"LabelDeleteFromFileSystemCheckbox": "ফাইল সিস্টেম থেকে মুছে ফেলুন (শুধু ডাটাবেস থেকে সরাতে টিক চিহ্ন মুক্ত করুন)",
"LabelDescription": "বিবরণ",
"LabelDeselectAll": "সমস্ত অনির্বাচিত করুন",
"LabelDetectedPattern": "শনাক্ত করা প্যাটার্ন:",
"LabelDevice": "ডিভাইস",
"LabelDeviceInfo": "ডিভাইস তথ্য",
"LabelDeviceIsAvailableTo": "ডিভাইস এর জন্য উপলব্ধ...",
@@ -340,7 +361,11 @@
"LabelExample": "উদাহরণ",
"LabelExpandSeries": "সিরিজ প্রসারিত করুন",
"LabelExpandSubSeries": "সাব সিরিজ প্রসারিত করুন",
"LabelExplicit": "বিশদ",
"LabelExpired": "মেয়াদ শেষ হয়েছে",
"LabelExpiresAt": "মেয়াদ শেষ হওয়ার সময়",
"LabelExpiresInSeconds": "মেয়াদ শেষ হবে (সেকেন্ডে)",
"LabelExpiresNever": "কখনোই নয়",
"LabelExplicit": "অশ্লীল ভাষা",
"LabelExplicitChecked": "সুস্পষ্ট (পরীক্ষিত)",
"LabelExplicitUnchecked": "অস্পষ্ট (অপরিক্ষীত)",
"LabelExportOPML": "OPML এক্সপোর্ট করুন",
@@ -355,11 +380,12 @@
"LabelFilterByUser": "ব্যবহারকারী দ্বারা ফিল্টারকৃত",
"LabelFindEpisodes": "পর্বগুলো খুঁজুন",
"LabelFinished": "সমাপ্ত",
"LabelFinishedDate": "{0} সম্পন্ন হয়েছে",
"LabelFolder": "ফোল্ডার",
"LabelFolders": "ফোল্ডারগুলো",
"LabelFontBold": "বোল্ড",
"LabelFontBoldness": "হরফ বোল্ডনেস",
"LabelFontFamily": "হরফ পরিবার",
"LabelFontFamily": "ফন্টের ধরন",
"LabelFontItalic": "ইটালিক",
"LabelFontScale": "ফন্ট স্কেল",
"LabelFontStrikethrough": "অবচ্ছেদন রেখা",
@@ -389,7 +415,9 @@
"LabelIntervalEvery6Hours": "প্রতি ৬ ঘন্টায়",
"LabelIntervalEveryDay": "প্রতিদিন",
"LabelIntervalEveryHour": "প্রতি ঘন্টা",
"LabelIntervalEveryMinute": "প্রতি মিনিটে",
"LabelInvert": "উল্টানো",
"LabelIpAddress": "IP ঠিকানা",
"LabelItem": "আইটেম",
"LabelJumpBackwardAmount": "পিছন দিকে ঝাঁপের পরিমাণ",
"LabelJumpForwardAmount": "সামনের দিকে ঝাঁপের পরিমাণ",
@@ -398,6 +426,7 @@
"LabelLanguages": "ভাষাসমূহ",
"LabelLastBookAdded": "শেষ বই যোগ করা হয়েছে",
"LabelLastBookUpdated": "শেষ বই আপডেট করা হয়েছে",
"LabelLastProgressDate": "সর্বশেষ অগ্রগতি: {0}",
"LabelLastSeen": "শেষ দেখা",
"LabelLastTime": "শেষ বার",
"LabelLastUpdate": "শেষ আপডেট",
@@ -410,6 +439,9 @@
"LabelLibraryFilterSublistEmpty": "না {0}",
"LabelLibraryItem": "লাইব্রেরি আইটেম",
"LabelLibraryName": "লাইব্রেরির নাম",
"LabelLibrarySortByProgress": "অগ্রগতি: সর্বশেষ আপডেট",
"LabelLibrarySortByProgressFinished": "অগ্রগতি: সম্পন্ন",
"LabelLibrarySortByProgressStarted": "অগ্রগতি: শুরু হয়েছে",
"LabelLimit": "সীমা",
"LabelLineSpacing": "লাইন স্পেসিং",
"LabelListenAgain": "আবার শুনুন",
@@ -418,6 +450,7 @@
"LabelLogLevelWarn": "সতর্ক",
"LabelLookForNewEpisodesAfterDate": "এই তারিখের পরে নতুন পর্বগুলি সন্ধান করুন",
"LabelLowestPriority": "সর্বনিম্ন অগ্রাধিকার",
"LabelMatchConfidence": "নিশ্চয়তার মাত্রা",
"LabelMatchExistingUsersBy": "বিদ্যমান ব্যবহারকারীদের দ্বারা মিলিত করুন",
"LabelMatchExistingUsersByDescription": "বিদ্যমান ব্যবহারকারীদের সংযোগ করার জন্য ব্যবহৃত হয়। একবার সংযুক্ত হলে, ব্যবহারকারীদের আপনার SSO প্রদানকারীর থেকে একটি অনন্য আইডি দ্বারা মিলিত হবে",
"LabelMaxEpisodesToDownload": "সর্বাধিক # টি পর্ব ডাউনলোড করা হবে। অসীমের জন্য 0 ব্যবহার করুন।",
@@ -432,7 +465,7 @@
"LabelMetadataProvider": "মেটাডেটা প্রদানকারী",
"LabelMinute": "মিনিট",
"LabelMinutes": "মিনিটস",
"LabelMissing": "নিখোঁজ",
"LabelMissing": "অনুপস্থিত",
"LabelMissingEbook": "কোনও ই-বই নেই",
"LabelMissingSupplementaryEbook": "কোনও সম্পূরক ই-বই নেই",
"LabelMobileRedirectURIs": "অনুমোদিত মোবাইল রিডাইরেক্ট URIs",
@@ -447,7 +480,9 @@
"LabelNewestAuthors": "নতুন লেখক",
"LabelNewestEpisodes": "নতুনতম পর্ব",
"LabelNextBackupDate": "পরবর্তী ব্যাকআপ তারিখ",
"LabelNextChapters": "পরবর্তী অধ্যায়গুলো হবে:",
"LabelNextScheduledRun": "পরবর্তী নির্ধারিত দৌড়",
"LabelNoApiKeys": "কোনো API কী নেই",
"LabelNoCustomMetadataProviders": "কোনো কাস্টম মেটাডেটা প্রদানকারী নেই",
"LabelNoEpisodesSelected": "কোন পর্ব নির্বাচন করা হয়নি",
"LabelNotFinished": "সমাপ্ত হয়নি",
@@ -463,7 +498,8 @@
"LabelNotificationsMaxQueueSize": "বিজ্ঞপ্তি ইভেন্টের জন্য সর্বোচ্চ সারির আকার",
"LabelNotificationsMaxQueueSizeHelp": "ইভেন্টগুলি প্রতি সেকেন্ডে ১ বার ইন্ধন করার মধ্যে সীমাবদ্ধ। সারি সর্বাধিক আকারে থাকলে ইভেন্টগুলি উপেক্ষা করা হবে। এটি বিজ্ঞপ্তি স্প্যামিং প্রতিরোধ করে।",
"LabelNumberOfBooks": "বইয়ের সংখ্যা",
"LabelNumberOfEpisodes": "# টি পর্ব",
"LabelNumberOfChapters": "অধ্যায়ের সংখ্যা:",
"LabelNumberOfEpisodes": "পর্বের সংখ্যা",
"LabelOpenIDAdvancedPermsClaimDescription": "ওপেনআইডি দাবির নাম যাতে অ্যাপ্লিকেশনের মধ্যে ব্যবহারকারীর ক্রিয়াকলাপের জন্য উন্নত অনুমতি রয়েছে যা অ-প্রশাসক ভূমিকাগুলিতে প্রযোজ্য হবে (<b>যদি কনফিগার করা হয়</b>)। প্রতিক্রিয়া থেকে দাবিটি অনুপস্থিত থাকলে, অ্যাক্সেস করুন ABS-তে অস্বীকার করা হবে। যদি একটি একক বিকল্প অনুপস্থিত থাকে, তাহলে এটিকে <code>false</code> হিসাবে গণ্য করা হবে। নিশ্চিত করুন যে পরিচয় প্রদানকারীর দাবি প্রত্যাশিত কাঠামোর সাথে মেলে:",
"LabelOpenIDClaims": "অ্যাডভান্সড গ্রুপ এবং পারমিশন অ্যাসাইনমেন্ট নিষ্ক্রিয় করতে নিম্নলিখিত বিকল্পগুলিকে খালি ছেড়ে দিন, তারপর স্বয়ংক্রিয়ভাবে 'ব্যবহারকারী' গ্রুপকে বরাদ্দ করা হবে।",
"LabelOpenIDGroupClaimDescription": "ওপেনআইডি দাবির নাম যাতে ব্যবহারকারীর গোষ্ঠীর একটি তালিকা থাকে। সাধারণত <code>গ্রুপ</code> হিসাবে উল্লেখ করা হয়। <b>কনফিগার করা থাকলে</b>, অ্যাপ্লিকেশনটি স্বয়ংক্রিয়ভাবে এর উপর ভিত্তি করে ব্যবহারকারীর গোষ্ঠীর সদস্যপদ নির্ধারণ করবে, শর্ত এই যে এই গোষ্ঠীগুলি কেস-অসংবেদনশীলভাবে দাবিতে 'অ্যাডমিন', 'ব্যবহারকারী' বা 'অতিথি' নাম দেওয়া হয়৷ দাবিতে একটি তালিকা থাকা উচিত এবং যদি একজন ব্যবহারকারী একাধিক গোষ্ঠীর অন্তর্গত হয় তবে অ্যাপ্লিকেশনটি বরাদ্দ করবে সর্বোচ্চ স্তরের অ্যাক্সেসের সাথে সঙ্গতিপূর্ণ ভূমিকা৷ যদি কোনও গোষ্ঠীর সাথে মেলে না, তবে অ্যাক্সেস অস্বীকার করা হবে।",
@@ -484,6 +520,7 @@
"LabelPersonalYearReview": "আপনার বছরের পর্যালোচনা ({0})",
"LabelPhotoPathURL": "ছবি পথ/ইউআরএল",
"LabelPlayMethod": "প্লে পদ্ধতি",
"LabelPlaybackRateIncrementDecrement": "প্লেব্যাকের গতি বাড়ানো/কমানোর পরিমাণ",
"LabelPlayerChapterNumberMarker": "{1} এর মধ্যে {0}",
"LabelPlaylists": "প্লেলিস্ট",
"LabelPodcast": "পডকাস্ট",
@@ -506,7 +543,7 @@
"LabelPublishers": "প্রকাশকরা",
"LabelRSSFeedCustomOwnerEmail": "কাস্টম মালিকের ইমেইল",
"LabelRSSFeedCustomOwnerName": "কাস্টম মালিকের নাম",
"LabelRSSFeedOpen": "আরএসএস ফিড খুলুন",
"LabelRSSFeedOpen": "RSS ফিড খোলা আছে",
"LabelRSSFeedPreventIndexing": "সূচীকরণ প্রতিরোধ করুন",
"LabelRSSFeedSlug": "আরএসএস ফিড স্লাগ",
"LabelRSSFeedURL": "আরএসএস ফিড ইউআরএল",
@@ -523,6 +560,7 @@
"LabelReleaseDate": "উন্মোচনের তারিখ",
"LabelRemoveAllMetadataAbs": "সমস্ত metadata.abs ফাইল সরান",
"LabelRemoveAllMetadataJson": "সমস্ত metadata.json ফাইল সরান",
"LabelRemoveAudibleBranding": "অধ্যায়গুলো থেকে Audible-এর ইন্ট্রো ও আউট্রো সরান",
"LabelRemoveCover": "কভার সরান",
"LabelRemoveMetadataFile": "লাইব্রেরি আইটেম ফোল্ডারে মেটাডেটা ফাইল সরান",
"LabelRemoveMetadataFileHelp": "আপনার {0} ফোল্ডারের সমস্ত metadata.json এবং metadata.abs ফাইলগুলি সরান।",
@@ -535,6 +573,7 @@
"LabelSelectAll": "সব নির্বাচন করুন",
"LabelSelectAllEpisodes": "সমস্ত পর্ব নির্বাচন করুন",
"LabelSelectEpisodesShowing": "দেখানো {0}টি পর্ব নির্বাচন করুন",
"LabelSelectUser": "ব্যবহারকারী নির্বাচন করুন",
"LabelSelectUsers": "ব্যবহারকারী নির্বাচন করুন",
"LabelSendEbookToDevice": "ই-বই পাঠান...",
"LabelSequence": "ক্রম",
@@ -552,6 +591,8 @@
"LabelSettingsBookshelfViewHelp": "কাঠের তাক সহ স্কুমরফিক ডিজাইন",
"LabelSettingsChromecastSupport": "ক্রোমকাস্ট সমর্থন",
"LabelSettingsDateFormat": "তারিখ বিন্যাস",
"LabelSettingsEnableWatcher": "পরিবর্তনের জন্য লাইব্রেরিগুলো স্বয়ংক্রিয়ভাবে পর্যবেক্ষণ করুন",
"LabelSettingsEnableWatcherForLibrary": "লাইব্রেরির জন্য ফোল্ডার প্রহরী সক্ষম করুন",
"LabelSettingsEnableWatcherHelp": "ফাইলের পরিবর্তন শনাক্ত হলে আইটেমগুলির স্বয়ংক্রিয় যোগ/আপডেট সক্ষম করবে। *সার্ভার পুনরায় চালু করতে হবে",
"LabelSettingsEpubsAllowScriptedContent": "ইপাবে স্ক্রিপ্ট করা বিষয়বস্তুর অনুমতি দিন",
"LabelSettingsEpubsAllowScriptedContentHelp": "ইপাব ফাইলগুলিকে স্ক্রিপ্ট চালানোর অনুমতি দিন। আপনি ইপাব ফাইলগুলির উৎসকে বিশ্বাস না করলে এই সেটিংটি নিষ্ক্রিয় রাখার সুপারিশ করা হলো।",
@@ -569,7 +610,7 @@
"LabelSettingsOnlyShowLaterBooksInContinueSeries": "কন্টিনিউ সিরিজে আগের বইগুলো এড়িয়ে যান",
"LabelSettingsOnlyShowLaterBooksInContinueSeriesHelp": "কন্টিনিউ সিরিজের নীড় পেজ শেল্ফ দেখায় যে সিরিজে শুরু হয়নি এমন প্রথম বই যার অন্তত একটি বই শেষ হয়েছে এবং কোনো বই চলছে না। এই সেটিংটি সক্ষম করলে শুরু না হওয়া প্রথম বইটির পরিবর্তে সবচেয়ে দূরের সম্পূর্ণ বই থেকে সিরিজ চলতে থাকবে।",
"LabelSettingsParseSubtitles": "সাবটাইটেল পার্স করুন",
"LabelSettingsParseSubtitlesHelp": "অডিওবুক ফোল্ডারের নাম থেকে সাবটাইটেল বের করুন৷<br>সাবটাইটেল অবশ্যই \" - \"<br>অর্থাৎ \"বুকের শিরোনাম - এখানে একটি সাবটাইটেল\" এর সাবটাইটেল আছে \"এখানে একটি সাবটাইটেল\"",
"LabelSettingsParseSubtitlesHelp": "অডিওবুক ফোল্ডারের নাম থেকে সাবটাইটেল শনাক্ত করুন।<br>সাবটাইটেল অবশ্যই \" - \" দিয়ে আলাদা করা থাকতে হবে।<br>যেমন, \"বইয়ের নাম - একটি সাবটাইটেল\" হলে সাবটাইটেল হবে \"একটি সাবটাইটেল\"",
"LabelSettingsPreferMatchedMetadata": "মিলিত মেটাডেটা পছন্দ করুন",
"LabelSettingsPreferMatchedMetadataHelp": "দ্রুত ম্যাচ ব্যবহার করার সময় মিলে যাওয়া ডেটা আইটেমের বিবরণকে ওভাররাইড করবে। ডিফল্টরূপে দ্রুত ম্যাচ শুধুমাত্র অনুপস্থিত বিশদগুলি পূরণ করবে।",
"LabelSettingsSkipMatchingBooksWithASIN": "এমন বইগুলি এড়িয়ে যান যেগুলির মধ্যে ইতিমধ্যে একটি ASIN আছে",
@@ -595,10 +636,12 @@
"LabelSlug": "স্লাগ",
"LabelSortAscending": "আরোহী",
"LabelSortDescending": "অবরোহী",
"LabelSortPubDate": "প্রকাশের তারিখ অনুযায়ী সাজান",
"LabelStart": "শুরু",
"LabelStartTime": "শুরুর সময়",
"LabelStarted": "শুরু হয়েছে",
"LabelStartedAt": "এতে শুরু হয়েছে",
"LabelStartedDate": "{0} শুরু হয়েছে",
"LabelStatsAudioTracks": "অডিও ট্র্যাক",
"LabelStatsAuthors": "লেখক",
"LabelStatsBestDay": "সেরা দিন",
@@ -628,6 +671,7 @@
"LabelTheme": "থিম",
"LabelThemeDark": "অন্ধকার",
"LabelThemeLight": "আলো",
"LabelThemeSepia": "সেপিয়া",
"LabelTimeBase": "সময় বেস",
"LabelTimeDurationXHours": "{0} ঘণ্টা",
"LabelTimeDurationXMinutes": "{0} মিনিট",
@@ -695,23 +739,33 @@
"LabelYourProgress": "আপনার অগ্রগতি",
"MessageAddToPlayerQueue": "প্লেয়ার সারিতে যোগ করুন",
"MessageAppriseDescription": "এই বৈশিষ্ট্যটি ব্যবহার করার জন্য আপনাকে <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> চালানোর একটি উদাহরণ বা একটি এপিআই পরিচালনা করতে হবে যে একই অনুরোধ পরিচালনা করবে। <br />অ্যাপ্রাইজ এপিআই ইউআরএলটি বিজ্ঞপ্তি পাঠানোর জন্য সম্পূর্ণ ইউআরএল পথ হওয়া উচিত, যেমন, যদি আপনার API ইনস্ট্যান্স <code>http://192.168.1.1:8337</code> এ পরিবেশিত হয় তাহলে আপনি <code> রাখবেন >http://192.168.1.1:8337/notify</code>।",
"MessageAsinCheck": "নিশ্চিত করুন যে আপনি Amazon-এর নয়, সঠিক Audible অঞ্চলের ASIN ব্যবহার করছেন।",
"MessageAuthenticationLegacyTokenWarning": "পুরোনো API টোকেনগুলো ভবিষ্যতে সরিয়ে দেওয়া হবে। এর পরিবর্তে <a href=\"/config/api-keys\">API কী</a> ব্যবহার করুন।",
"MessageAuthenticationOIDCChangesRestart": "OIDC-এর পরিবর্তনগুলো কার্যকর করতে সেভ করার পর সার্ভারটি পুনরায় চালু করুন।",
"MessageAuthenticationSecurityMessage": "নিরাপত্তার জন্য অথেনটিকেশন ব্যবস্থা উন্নত করা হয়েছে। সকল ব্যবহারকারীকে আবার লগইন করতে হবে।",
"MessageBackupsDescription": "ব্যাকআপের মধ্যে রয়েছে ব্যবহারকারী, ব্যবহারকারীর অগ্রগতি, লাইব্রেরি আইটেমের বিবরণ, সার্ভার সেটিংস এবং <code>/metadata/items</code> & <code>/metadata/authors</code>-এ সংরক্ষিত ছবি। ব্যাকআপগুলি <strong> আপনার লাইব্রেরি ফোল্ডারে সঞ্চিত কোনো ফাইল >অন্তর্ভুক্ত করবেন না</strong>।",
"MessageBackupsLocationEditNote": "দ্রষ্টব্য: ব্যাকআপ অবস্থান আপডেট করলে বিদ্যমান ব্যাকআপগুলি সরানো বা সংশোধন করা হবে না",
"MessageBackupsLocationNoEditNote": "দ্রষ্টব্য: ব্যাকআপ অবস্থান একটি পরিবেশ পরিবর্তনশীল মাধ্যমে স্থির করা হয়েছে এবং এখানে পরিবর্তন করা যাবে না।",
"MessageBackupsLocationPathEmpty": "ব্যাকআপ অবস্থানের পথ খালি থাকতে পারবে না",
"MessageBatchEditPopulateMapDetailsAllHelp": "সক্রিয় ফিল্ডগুলো সব আইটেমের তথ্য দিয়ে পূরণ করুন। একাধিক মান থাকা ফিল্ডগুলোর মান একত্রিত করা হবে",
"MessageBatchEditPopulateMapDetailsItemHelp": "সক্রিয় ম্যাপের বিস্তারিত ফিল্ডগুলো এই আইটেমের তথ্য দিয়ে পূরণ করুন",
"MessageBatchQuickMatchDescription": "কুইক ম্যাচ নির্বাচিত আইটেমগুলির জন্য অনুপস্থিত কভার এবং মেটাডেটা যোগ করার চেষ্টা করবে। বিদ্যমান কভার এবং/অথবা মেটাডেটা ওভাররাইট করার জন্য দ্রুত ম্যাচকে অনুমতি দিতে নীচের বিকল্পগুলি সক্ষম করুন।",
"MessageBookshelfNoCollections": "আপনি এখনও কোনো সংগ্রহ করেননি",
"MessageBookshelfNoCollectionsHelp": "কালেকশনগুলো সবার জন্য উন্মুক্ত। লাইব্রেরিতে অ্যাক্সেস থাকা সকল ব্যবহারকারী এগুলো দেখতে পারবেন।",
"MessageBookshelfNoRSSFeeds": "কোনও RSS ফিড খোলা নেই",
"MessageBookshelfNoResultsForFilter": "ফিল্টার \"{0}: {1}\" এর জন্য কোন ফলাফল নেই",
"MessageBookshelfNoResultsForQuery": "প্রশ্নের জন্য কোন ফলাফল নেই",
"MessageBookshelfNoSeries": "আপনার কোনো সিরিজ নেই",
"MessageBulkChapterPattern": "এই নম্বর দেওয়ার ধরন অনুযায়ী আপনি কতটি অধ্যায় যোগ করতে চান?",
"MessageChapterEndIsAfter": "অধ্যায়ের সমাপ্তি আপনার অডিওবুকের শেষে",
"MessageChapterErrorFirstNotZero": "প্রথম অধ্যায় 0 এ শুরু হতে হবে",
"MessageChapterErrorStartGteDuration": "অবৈধ শুরুর সময় অবশ্যই অডিওবুকের সময়কালের কম হতে হবে",
"MessageChapterErrorStartLtPrev": "অবৈধ শুরুর সময় অবশ্যই আগের অধ্যায় শুরুর সময়ের চেয়ে বেশি বা সমান হতে হবে",
"MessageChapterStartIsAfter": "আপনার অডিওবুক শেষ হওয়ার পরে অধ্যায় শুরু হয়",
"MessageChaptersNotFound": "কোনো অধ্যায় পাওয়া যায়নি",
"MessageCheckingCron": "ক্রন পরীক্ষা করা হচ্ছে...",
"MessageConfirmCloseFeed": "আপনি কি নিশ্চিত যে আপনি এই ফিডটি বন্ধ করতে চান?",
"MessageConfirmDeleteApiKey": "আপনি কি নিশ্চিত যে API কী \"{0}\" মুছে ফেলতে চান?",
"MessageConfirmDeleteBackup": "আপনি কি নিশ্চিত যে আপনি {0} এর ব্যাকআপ মুছে ফেলতে চান?",
"MessageConfirmDeleteDevice": "আপনি কি নিশ্চিতভাবে ই-রিডার ডিভাইস \"{0}\" মুছতে চান?",
"MessageConfirmDeleteFile": "এটি আপনার ফাইল সিস্টেম থেকে ফাইলটি মুছে দেবে। আপনি কি নিশ্চিত?",
@@ -723,6 +777,7 @@
"MessageConfirmDeleteSession": "আপনি কি নিশ্চিত আপনি এই অধিবেশন মুছে দিতে চান?",
"MessageConfirmEmbedMetadataInAudioFiles": "আপনি কি {0}টি অডিও ফাইলে মেটাডেটা এম্বেড করার বিষয়ে নিশ্চিত?",
"MessageConfirmForceReScan": "আপনি কি নিশ্চিত যে আপনি জোর করে পুনরায় স্ক্যান করতে চান?",
"MessageConfirmLogoutDevice": "আপনি কি নিশ্চিত যে \"{0}\" থেকে লগআউট করতে চান?",
"MessageConfirmMarkAllEpisodesFinished": "আপনি কি নিশ্চিত যে আপনি সমস্ত পর্ব সমাপ্ত হিসাবে চিহ্নিত করতে চান?",
"MessageConfirmMarkAllEpisodesNotFinished": "আপনি কি নিশ্চিত যে আপনি সমস্ত পর্বকে শেষ হয়নি বলে চিহ্নিত করতে চান?",
"MessageConfirmMarkItemFinished": "আপনি কি \"{0}\" কে সমাপ্ত হিসাবে চিহ্নিত করার বিষয়ে নিশ্চিত?",
@@ -739,6 +794,7 @@
"MessageConfirmRemoveAuthor": "আপনি কি নিশ্চিত যে আপনি লেখক \"{0}\" অপসারণ করতে চান?",
"MessageConfirmRemoveCollection": "আপনি কি নিশ্চিত যে আপনি সংগ্রহ \"{0}\" সরাতে চান?",
"MessageConfirmRemoveEpisode": "আপনি কি নিশ্চিত আপনি \"{0}\" পর্বটি সরাতে চান?",
"MessageConfirmRemoveEpisodeNote": "দ্রষ্টব্য: \"Hard delete file\" চালু না করলে অডিও ফাইলটি মুছে ফেলা হবে না",
"MessageConfirmRemoveEpisodes": "আপনি কি নিশ্চিত যে আপনি {0}টি পর্ব সরাতে চান?",
"MessageConfirmRemoveListeningSessions": "আপনি কি নিশ্চিত যে আপনি {0}টি শোনার সেশন সরাতে চান?",
"MessageConfirmRemoveMetadataFiles": "আপনি কি আপনার লাইব্রেরি আইটেম ফোল্ডারে থাকা সমস্ত মেটাডেটা {0} ফাইল মুছে ফেলার বিষয়ে নিশ্চিত?",
@@ -753,6 +809,7 @@
"MessageConfirmResetProgress": "আপনি কি আপনার অগ্রগতি রিসেট করার বিষয়ে নিশ্চিত?",
"MessageConfirmSendEbookToDevice": "আপনি কি নিশ্চিত যে আপনি \"{2}\" ডিভাইসে {0} ইবুক \"{1}\" পাঠাতে চান?",
"MessageConfirmUnlinkOpenId": "আপনি কি এই ব্যবহারকারীকে ওপেনআইডি থেকে লিঙ্কমুক্ত করার বিষয়ে নিশ্চিত?",
"MessageDaysListenedInTheLastYear": "গত এক বছরে {0} দিন শোনা হয়েছে",
"MessageDownloadingEpisode": "ডাউনলোডিং পর্ব",
"MessageDragFilesIntoTrackOrder": "সঠিক ট্র্যাক অর্ডারে ফাইল টেনে আনুন",
"MessageEmbedFailed": "এম্বেড ব্যর্থ হয়েছে!",
@@ -763,8 +820,11 @@
"MessageFeedURLWillBe": "ফিড URL হবে {0}",
"MessageFetching": "আনয় হচ্ছে.।",
"MessageForceReScanDescription": "সকল ফাইল আবার নতুন স্ক্যানের মত স্ক্যান করবে। অডিও ফাইল ID3 ট্যাগ, OPF ফাইল, এবং টেক্সট ফাইলগুলি নতুন হিসাবে স্ক্যান করা হবে।",
"MessageHeatmapListeningTimeTooltip": "{1}-এ <strong>{0} জন শুনছেন</strong>",
"MessageHeatmapNoListeningSessions": "{0}-এ কোনো শোনার সেশন নেই",
"MessageImportantNotice": "গুরুত্বপূর্ণ বিজ্ঞপ্তি!",
"MessageInsertChapterBelow": "নীচে অধ্যায় ঢোকান",
"MessageInvalidAsin": "অবৈধ ASIN",
"MessageItemsSelected": "{0}টি আইটেম নির্বাচিত",
"MessageItemsUpdated": "{0}টি আইটেম আপডেট করা হয়েছে",
"MessageJoinUsOn": "আমাদের সাথে যোগ দিন",
@@ -810,6 +870,7 @@
"MessageNoTasksRunning": "কোন টাস্ক চলছে না",
"MessageNoUpdatesWereNecessary": "কোন আপডেটের প্রয়োজন ছিল না",
"MessageNoUserPlaylists": "আপনার কোনো প্লেলিস্ট নেই",
"MessageNoUserPlaylistsHelp": "প্লেলিস্টগুলো ব্যক্তিগত। শুধুমাত্র যে ব্যবহারকারী এগুলো তৈরি করেছেন তিনিই সেগুলো দেখতে পারবেন।",
"MessageNotYetImplemented": "এখনও বাস্তবায়িত হয়নি",
"MessageOpmlPreviewNote": "দ্রষ্টব্য: এটি পার্স করা OPML ফাইলের একটি পূর্বরূপ। প্রকৃত পডকাস্ট শিরোনাম RSS ফিড থেকে নেওয়া হবে।",
"MessageOr": "বা",
@@ -831,8 +892,11 @@
"MessageResetChaptersConfirm": "আপনি কি নিশ্চিত যে আপনি অধ্যায়গুলি পুনরায় সেট করতে চান এবং আপনার করা পরিবর্তনগুলি পূর্বাবস্থায় ফেরাতে চান?",
"MessageRestoreBackupConfirm": "আপনি কি নিশ্চিত যে আপনি তৈরি করা ব্যাকআপ পুনরুদ্ধার করতে চান",
"MessageRestoreBackupWarning": "একটি ব্যাকআপ পুনরুদ্ধার করা হলে তা /config-এ অবস্থিত সমগ্র ডাটাবেস ওভাররাইট করবে এবং /metadata/items & /metadata/authors-এ থাকা ছবিগুলিকে কভার করবে৷<br /><br />ব্যাকআপগুলি আপনার লাইব্রেরি ফোল্ডারে কোনো ফাইল পরিবর্তন করে না৷ আপনি যদি আপনার লাইব্রেরি ফোল্ডারে কভার আর্ট এবং মেটাডেটা সংরক্ষণ করতে সার্ভার সেটিংস সক্ষম করে থাকেন তবে সেগুলি ব্যাক আপ বা ওভাররাইট করা হয় না৷<br /><br />আপনার সার্ভার ব্যবহারকারী সমস্ত ক্লায়েন্ট স্বয়ংক্রিয়ভাবে রিফ্রেশ হবে৷",
"MessageScheduleLibraryScanNote": "বেশিরভাগ ব্যবহারকারীর জন্য এই ফিচারটি বন্ধ রেখে \"Automatically watch library for changes\" সেটিংটি চালু রাখার পরামর্শ দেওয়া হয়—এটি আপনার লাইব্রেরি ফোল্ডারের পরিবর্তনগুলো স্বয়ংক্রিয়ভাবে শনাক্ত করবে। আপনার ফাইল সিস্টেমে (যেমন NFS) \"Automatically watch library for changes\" কাজ না করলে এই ফিচারটি চালু করুন।",
"MessageScheduleRunEveryWeekdayAtTime": "প্রতি {0} অন্তর {1}-এ চালান",
"MessageSearchResultsFor": "এর জন্য অনুসন্ধান ফলাফল",
"MessageSelected": "{0}টি নির্বাচিত",
"MessageSeriesSequenceCannotContainSpaces": "সিরিজের ক্রমে স্পেস থাকতে পারবে না",
"MessageServerCouldNotBeReached": "সার্ভারে পৌঁছানো যায়নি",
"MessageSetChaptersFromTracksDescription": "প্রতিটি অডিও ফাইলকে অধ্যায় হিসেবে ব্যবহার করে অধ্যায় সেট করুন এবং অডিও ফাইলের নাম হিসেবে অধ্যায়ের শিরোনাম করুন",
"MessageShareExpirationWillBe": "মেয়াদ শেষ হবে <strong>{0}</strong>",
@@ -894,7 +958,10 @@
"NotificationOnBackupCompletedDescription": "ব্যাকআপ সম্পূর্ণ হলে ট্রিগার হবে",
"NotificationOnBackupFailedDescription": "ব্যাকআপ ব্যর্থ হলে ট্রিগার হবে",
"NotificationOnEpisodeDownloadedDescription": "একটি পডকাস্ট পর্ব স্বয়ংক্রিয়ভাবে ডাউনলোড হলে ট্রিগার হবে",
"NotificationOnRSSFeedDisabledDescription": "অনেকবার ডাউনলোডের চেষ্টা ব্যর্থ হওয়ার কারণে স্বয়ংক্রিয় পর্ব ডাউনলোড বন্ধ হয়ে গেলে এটি ট্রিগার হয়",
"NotificationOnRSSFeedFailedDescription": "স্বয়ংক্রিয় পর্ব ডাউনলোডের জন্য RSS ফিডের অনুরোধ ব্যর্থ হলে এটি ট্রিগার হয়",
"NotificationOnTestDescription": "বিজ্ঞপ্তি সিস্টেম পরীক্ষার জন্য ইভেন্ট",
"PlaceholderBulkChapterInput": "অধ্যায়ের শিরোনাম লিখুন অথবা নম্বর ব্যবহার করুন (যেমন, 'পর্ব 1', 'অধ্যায় 10', '1.')",
"PlaceholderNewCollection": "নতুন সংগ্রহের নাম",
"PlaceholderNewFolderPath": "নতুন ফোল্ডার পথ",
"PlaceholderNewPlaylist": "নতুন প্লেলিস্টের নাম",
@@ -938,6 +1005,7 @@
"ToastBackupRestoreFailed": "ব্যাকআপ পুনরুদ্ধার করতে ব্যর্থ",
"ToastBackupUploadFailed": "ব্যাকআপ আপলোড করতে ব্যর্থ",
"ToastBackupUploadSuccess": "ব্যাকআপ আপলোড হয়েছে",
"ToastBatchApplyDetailsToItemsSuccess": "আইটেমগুলোতে বিস্তারিত তথ্য প্রয়োগ করা হয়েছে",
"ToastBatchDeleteFailed": "ব্যাচ মুছে ফেলতে ব্যর্থ হয়েছে",
"ToastBatchDeleteSuccess": "ব্যাচ মুছে ফেলা সফল হয়েছে",
"ToastBatchQuickMatchFailed": "ব্যাচ কুইক ম্যাচ ব্যর্থ!",
@@ -947,16 +1015,25 @@
"ToastBookmarkCreateFailed": "বুকমার্ক তৈরি করতে ব্যর্থ",
"ToastBookmarkCreateSuccess": "বুকমার্ক যোগ করা হয়েছে",
"ToastBookmarkRemoveSuccess": "বুকমার্ক সরানো হয়েছে",
"ToastBulkChapterInvalidCount": "১ থেকে ১৫০-এর মধ্যে একটি সংখ্যা লিখুন",
"ToastCachePurgeFailed": "ক্যাশে পরিষ্কার করতে ব্যর্থ হয়েছে",
"ToastCachePurgeSuccess": "ক্যাশে সফলভাবে পরিষ্কার করা হয়েছে",
"ToastChapterLocked": "অধ্যায়টি লক করা আছে।",
"ToastChapterStartTimeAdjusted": "অধ্যায়ের শুরুর সময় {0} সেকেন্ড সমন্বয় করা হয়েছে",
"ToastChaptersAllLocked": "সব অধ্যায় লক করা আছে। সময় পরিবর্তন করতে কিছু অধ্যায় আনলক করুন।",
"ToastChaptersHaveErrors": "অধ্যায়ে ত্রুটি আছে",
"ToastChaptersInvalidShiftAmountLast": "সময় সরানোর পরিমাণ সঠিক নয়। এতে শেষ অধ্যায়ের শুরুর সময় এই অডিওবুকের মোট সময়সীমা ছাড়িয়ে যাবে।",
"ToastChaptersInvalidShiftAmountStart": "সময় সরানোর পরিমাণ সঠিক নয়। প্রথম অধ্যায়ের দৈর্ঘ্য শূন্য বা ঋণাত্মক হয়ে যাবে এবং দ্বিতীয় অধ্যায়টি এটিকে ওভাররাইট করবে। দ্বিতীয় অধ্যায়ের শুরুর সময় বাড়ান।",
"ToastChaptersMustHaveTitles": "অধ্যায়ের শিরোনাম থাকতে হবে",
"ToastChaptersRemoved": "অধ্যায়গুলো মুছে ফেলা হয়েছে",
"ToastChaptersUpdated": "অধ্যায় আপডেট করা হয়েছে",
"ToastCollectionItemsAddFailed": "আইটেম(গুলি) সংগ্রহে যোগ করা ব্যর্থ হয়েছে",
"ToastCollectionRemoveSuccess": "সংগ্রহ সরানো হয়েছে",
"ToastCollectionUpdateSuccess": "সংগ্রহ আপডেট করা হয়েছে",
"ToastConnectionNotAvailable": "সংযোগ পাওয়া যাচ্ছে না। অনুগ্রহ করে পরে আবার চেষ্টা করুন",
"ToastCoverSearchFailed": "কভার অনুসন্ধান ব্যর্থ হয়েছে",
"ToastCoverUpdateFailed": "কভার আপডেট ব্যর্থ হয়েছে",
"ToastDateTimeInvalidOrIncomplete": "তারিখ ও সময় সঠিক নয় অথবা অসম্পূর্ণ",
"ToastDeleteFileFailed": "ফাইল মুছে ফেলতে ব্যর্থ হয়েছে",
"ToastDeleteFileSuccess": "ফাইল মুছে ফেলা হয়েছে",
"ToastDeviceAddFailed": "ডিভাইস যোগ করতে ব্যর্থ হয়েছে",
@@ -970,6 +1047,8 @@
"ToastEpisodeDownloadQueueClearSuccess": "পর্ব ডাউনলোড সারি পরিষ্কার করা হয়েছে",
"ToastEpisodeUpdateSuccess": "{0}টি পর্ব আপডেট করা হয়েছে",
"ToastErrorCannotShare": "এই ডিভাইসে স্থানীয়ভাবে শেয়ার করা যাবে না",
"ToastFailedToCreate": "তৈরি করা যায়নি",
"ToastFailedToDelete": "মুছে ফেলা যায়নি",
"ToastFailedToLoadData": "ডেটা লোড করা যায়নি",
"ToastFailedToMatch": "মেলাতে ব্যর্থ হয়েছে",
"ToastFailedToShare": "শেয়ার করতে ব্যর্থ",
@@ -977,6 +1056,7 @@
"ToastInvalidImageUrl": "অকার্যকর ছবির ইউআরএল",
"ToastInvalidMaxEpisodesToDownload": "ডাউনলোড করার জন্য অবৈধ সর্বোচ্চ পর্ব",
"ToastInvalidUrl": "অকার্যকর ইউআরএল",
"ToastInvalidUrls": "এক বা একাধিক URL সঠিক নয়",
"ToastItemCoverUpdateSuccess": "আইটেম কভার আপডেট করা হয়েছে",
"ToastItemDeletedFailed": "আইটেম মুছে ফেলতে ব্যর্থ",
"ToastItemDeletedSuccess": "মুছে ফেলা আইটেম",
@@ -1001,6 +1081,7 @@
"ToastMustHaveAtLeastOnePath": "অন্তত একটি পথ থাকতে হবে",
"ToastNameEmailRequired": "নাম এবং ইমেইল আবশ্যক",
"ToastNameRequired": "নাম আবশ্যক",
"ToastNewApiKeyUserError": "একজন ব্যবহারকারী নির্বাচন করতে হবে",
"ToastNewEpisodesFound": "{0}টি নতুন পর্ব পাওয়া গেছে",
"ToastNewUserCreatedFailed": "অ্যাকাউন্ট তৈরি করতে ব্যর্থ: \"{0}\"",
"ToastNewUserCreatedSuccess": "নতুন একাউন্ট তৈরি হয়েছে",
@@ -1009,6 +1090,7 @@
"ToastNewUserTagError": "অন্তত একটি ট্যাগ নির্বাচন করতে হবে",
"ToastNewUserUsernameError": "একটি ব্যবহারকারীর নাম লিখুন",
"ToastNoNewEpisodesFound": "কোন নতুন পর্ব পাওয়া যায়নি",
"ToastNoRSSFeed": "ডকাস্টটির কোনো RSS ফিড নেই",
"ToastNoUpdatesNecessary": "কোন আপডেটের প্রয়োজন নেই",
"ToastNotificationCreateFailed": "বিজ্ঞপ্তি তৈরি করতে ব্যর্থ",
"ToastNotificationDeleteFailed": "বিজ্ঞপ্তি মুছে ফেলতে ব্যর্থ",
@@ -1024,6 +1106,7 @@
"ToastPlaylistUpdateSuccess": "প্লেলিস্ট আপডেট করা হয়েছে",
"ToastPodcastCreateFailed": "পডকাস্ট তৈরি করতে ব্যর্থ",
"ToastPodcastCreateSuccess": "পডকাস্ট সফলভাবে তৈরি করা হয়েছে",
"ToastPodcastEpisodeUpdated": "পর্ব আপডেট করা হয়েছে",
"ToastPodcastGetFeedFailed": "পডকাস্ট ফিড পেতে ব্যর্থ হয়েছে",
"ToastPodcastNoEpisodesInFeed": "আরএসএস ফিডে কোনো পর্ব পাওয়া যায়নি",
"ToastPodcastNoRssFeed": "পডকাস্টের কোন আরএসএস ফিড নেই",
@@ -1048,6 +1131,7 @@
"ToastSelectAtLeastOneUser": "অন্তত একজন ব্যবহারকারী নির্বাচন করুন",
"ToastSendEbookToDeviceFailed": "ডিভাইসে ইবুক পাঠাতে ব্যর্থ",
"ToastSendEbookToDeviceSuccess": "ইবুক \"{0}\" ডিভাইসে পাঠানো হয়েছে",
"ToastSeriesSubmitFailedSameName": "একই নামে দুটি সিরিজ যোগ করা যাবে না",
"ToastSeriesUpdateFailed": "সিরিজ আপডেট ব্যর্থ হয়েছে",
"ToastSeriesUpdateSuccess": "সিরিজ আপডেট সাফল্য",
"ToastServerSettingsUpdateSuccess": "সার্ভার সেটিংস আপডেট করা হয়েছে",
@@ -1066,10 +1150,20 @@
"ToastUnknownError": "অজানা ত্রুটি",
"ToastUnlinkOpenIdFailed": "OpenID থেকে ব্যবহারকারীকে আনলিঙ্ক করতে ব্যর্থ হয়েছে",
"ToastUnlinkOpenIdSuccess": "OpenID থেকে ব্যবহারকারীকে লিঙ্কমুক্ত করা হয়েছে",
"ToastUploaderFilepathExistsError": "ফাইল পাথ \"{0}\" ইতিমধ্যে সার্ভারে বিদ্যমান",
"ToastUploaderItemExistsInSubdirectoryError": "আইটেম \"{0}\" আপলোড পাথের একটি সাবডিরেক্টরি ব্যবহার করছে।",
"ToastUserDeleteFailed": "ব্যবহারকারী মুছতে ব্যর্থ",
"ToastUserDeleteSuccess": "ব্যবহারকারী মুছে ফেলা হয়েছে",
"ToastUserPasswordChangeSuccess": "পাসওয়ার্ড সফলভাবে পরিবর্তন করা হয়েছে",
"ToastUserPasswordMismatch": "পাসওয়ার্ড মিলছে না",
"ToastUserPasswordMustChange": "নতুন পাসওয়ার্ড পুরানো পাসওয়ার্ডের সাথে মিলতে পারবে না",
"ToastUserRootRequireName": "একটি রুট ব্যবহারকারীর নাম লিখতে হবে"
"ToastUserRootRequireName": "একটি রুট ব্যবহারকারীর নাম লিখতে হবে",
"TooltipAddChapters": "অধ্যায় যোগ করুন",
"TooltipAddOneSecond": "১ সেকেন্ড যোগ করুন",
"TooltipAdjustChapterStart": "শুরুর সময় সমন্বয় করতে ক্লিক করুন",
"TooltipLockAllChapters": "সব অধ্যায় লক করুন",
"TooltipLockChapter": "অধ্যায় লক করুন (একাধিক অধ্যায়ের পরিসর নির্বাচন করতে Shift+ক্লিক করুন)",
"TooltipSubtractOneSecond": "১ সেকেন্ড কমান",
"TooltipUnlockAllChapters": "সব অধ্যায় আনলক করুন",
"TooltipUnlockChapter": "অধ্যায় আনলক করুন (একাধিক অধ্যায়ের পরিসর নির্বাচন করতে Shift+ক্লিক করুন)"
}
+10 -1
View File
@@ -1,5 +1,6 @@
{
"ButtonAdd": "Afegeix",
"ButtonAddApiKey": "Afegeix clau API",
"ButtonAddChapters": "Afegeix capítols",
"ButtonAddDevice": "Afegeix un aparell",
"ButtonAddLibrary": "Afegeix una biblioteca",
@@ -20,6 +21,7 @@
"ButtonChooseAFolder": "Trieu una carpeta",
"ButtonChooseFiles": "Trieu fitxers",
"ButtonClearFilter": "Neteja el filtre",
"ButtonClose": "Tanca",
"ButtonCloseFeed": "Tanca el canal",
"ButtonCloseSession": "Tanca la sessió oberta",
"ButtonCollections": "Col·leccions",
@@ -119,11 +121,13 @@
"HeaderAccount": "Compte",
"HeaderAddCustomMetadataProvider": "Afegeix un proveïdor de metadades personalitzat",
"HeaderAdvanced": "Avançat",
"HeaderApiKeys": "Claus API",
"HeaderAppriseNotificationSettings": "Paràmetres de notificacions Apprise",
"HeaderAudioTracks": "Pistes d'àudio",
"HeaderAudiobookTools": "Eines de gestió de fitxers de l'audiollibre",
"HeaderAuthentication": "Autenticació",
"HeaderBackups": "Còpies de Seguretat",
"HeaderBulkChapterModal": "Afegeix capítols múltiples",
"HeaderChangePassword": "Canvia Contrasenya",
"HeaderChapters": "Capítols",
"HeaderChooseAFolder": "Tria una Carpeta",
@@ -162,6 +166,7 @@
"HeaderMetadataOrderOfPrecedence": "Ordre de Precedència de Metadades",
"HeaderMetadataToEmbed": "Metadades a Inserir",
"HeaderNewAccount": "Nou Compte",
"HeaderNewApiKey": "Nova clau API",
"HeaderNewLibrary": "Nova Biblioteca",
"HeaderNotificationCreate": "Crea Notificació",
"HeaderNotificationUpdate": "Actualització de Notificació",
@@ -195,6 +200,7 @@
"HeaderSettingsExperimental": "Funcionalitats experimentals",
"HeaderSettingsGeneral": "Generals",
"HeaderSettingsScanner": "Escàner",
"HeaderSettingsSecurity": "Seguretat",
"HeaderSettingsWebClient": "Client web",
"HeaderSleepTimer": "Temporitzador de son",
"HeaderStatsLargestItems": "Elements més grans",
@@ -417,6 +423,9 @@
"LabelLibraryFilterSublistEmpty": "Sense {0}",
"LabelLibraryItem": "Element de Biblioteca",
"LabelLibraryName": "Nom de Biblioteca",
"LabelLibrarySortByProgress": "Progrés: Última actualització",
"LabelLibrarySortByProgressFinished": "Progrés: Finalitzat",
"LabelLibrarySortByProgressStarted": "Progrés: Començat",
"LabelLimit": "Límits",
"LabelLineSpacing": "Interlineat",
"LabelListenAgain": "Escoltar de nou",
@@ -439,7 +448,7 @@
"LabelMetadataProvider": "Proveïdor de metadades",
"LabelMinute": "Minut",
"LabelMinutes": "Minuts",
"LabelMissing": "Absent",
"LabelMissing": "Falta",
"LabelMissingEbook": "No té llibre electrònic",
"LabelMissingSupplementaryEbook": "No té ebook complementari",
"LabelMobileRedirectURIs": "URI de redirecció mòbil permeses",
+58 -20
View File
@@ -11,7 +11,7 @@
"ButtonApplyChapters": "Aplikovat kapitoly",
"ButtonAuthors": "Autoři",
"ButtonBack": "Zpět",
"ButtonBatchEditPopulateFromExisting": "Vytvořit z existujících",
"ButtonBatchEditPopulateFromExisting": "Předvyplnit z existujících",
"ButtonBatchEditPopulateMapDetails": "Předvyplnit podrobnosti mapování",
"ButtonBrowseForFolder": "Vyhledat složku",
"ButtonCancel": "Zrušit",
@@ -46,6 +46,7 @@
"ButtonLatest": "Nejnovější",
"ButtonLibrary": "Knihovna",
"ButtonLogout": "Odhlásit",
"ButtonLogoutAllDevices": "Odhlásit ze všech zařízení",
"ButtonLookup": "Vyhledat",
"ButtonManageTracks": "Správa stop",
"ButtonMapChapterTitles": "Mapovat názvy kapitol",
@@ -61,7 +62,7 @@
"ButtonPause": "Pozastavit",
"ButtonPlay": "Přehrát",
"ButtonPlayAll": "Přehrát vše",
"ButtonPlaying": "Hraje",
"ButtonPlaying": "Přehrává",
"ButtonPlaylists": "Seznamy skladeb",
"ButtonPrevious": "Předchozí",
"ButtonPreviousChapter": "Předchozí Kapitola",
@@ -71,7 +72,7 @@
"ButtonQueueAddItem": "Přidat do fronty",
"ButtonQueueRemoveItem": "Odstranit z fronty",
"ButtonQuickEmbed": "Rychle Zapsat",
"ButtonQuickEmbedMetadata": "Rychle zapsat Metadata",
"ButtonQuickEmbedMetadata": "Rychle Vložit Metadata",
"ButtonQuickMatch": "Rychlé přiřazení",
"ButtonReScan": "Znovu prohledat",
"ButtonRead": "Číst",
@@ -127,6 +128,7 @@
"HeaderAudiobookTools": "Nástroje pro správu souborů audioknih",
"HeaderAuthentication": "Autentizace",
"HeaderBackups": "Zálohy",
"HeaderBulkChapterModal": "Přidat více kapitol",
"HeaderChangePassword": "Změnit heslo",
"HeaderChapters": "Kapitoly",
"HeaderChooseAFolder": "Zvolte složku",
@@ -193,18 +195,20 @@
"HeaderScheduleEpisodeDownloads": "Naplánovat automatické stahování epizod",
"HeaderScheduleLibraryScans": "Naplánovat automatické prohledávání knihoven",
"HeaderSession": "Relace",
"HeaderSessions": "Relace",
"HeaderSetBackupSchedule": "Nastavit plán zálohování",
"HeaderSettings": "Nastavení",
"HeaderSettingsDisplay": "Zobrazit",
"HeaderSettingsExperimental": "Experimentální funkce",
"HeaderSettingsGeneral": "Obecné",
"HeaderSettingsScanner": "Skener",
"HeaderSettingsSecurity": "Zabezpečení",
"HeaderSettingsWebClient": "Webový klient",
"HeaderSleepTimer": "Časovač vypnutí",
"HeaderStatsLargestItems": "Největší položky",
"HeaderStatsLongestItems": "Nejdelší položky (hod.)",
"HeaderStatsMinutesListeningChart": "Poslech za posledních 7 dní (min)",
"HeaderStatsRecentSessions": "Poslední relace",
"HeaderStatsRecentSessions": "Nedávné relace",
"HeaderStatsTop10Authors": "Top 10 autorů",
"HeaderStatsTop5Genres": "Top 5 žánrů",
"HeaderTableOfContents": "Obsah",
@@ -293,6 +297,7 @@
"LabelContinueListening": "Pokračovat v poslechu",
"LabelContinueReading": "Pokračovat ve čtení",
"LabelContinueSeries": "Pokračovat v sérii",
"LabelCorsAllowed": "Povolené CORS Origins",
"LabelCover": "Obálka",
"LabelCoverImageURL": "URL obrázku obálky",
"LabelCoverProvider": "Poskytovatel obálky",
@@ -306,6 +311,7 @@
"LabelDeleteFromFileSystemCheckbox": "Smazat ze souborového systému (zrušte zaškrtnutí pro odstranění pouze z databáze)",
"LabelDescription": "Popis",
"LabelDeselectAll": "Odznačit vše",
"LabelDetectedPattern": "Detekovaný vzor:",
"LabelDevice": "Zařízení",
"LabelDeviceInfo": "Informace o zařízení",
"LabelDeviceIsAvailableTo": "Zařízení je dostupné pro...",
@@ -359,7 +365,7 @@
"LabelExpiresAt": "Expiruje v",
"LabelExpiresInSeconds": "Expiruje za (sekundy)",
"LabelExpiresNever": "Nikdy",
"LabelExplicit": "Explicitně",
"LabelExplicit": "Explicitní",
"LabelExplicitChecked": "Explicitní (zaškrtnuto)",
"LabelExplicitUnchecked": "Není explicitní (nezaškrtnuto)",
"LabelExportOPML": "Export OPML",
@@ -374,21 +380,22 @@
"LabelFilterByUser": "Filtrovat podle uživatele",
"LabelFindEpisodes": "Najít epizody",
"LabelFinished": "Dokončeno",
"LabelFinishedDate": "Dokončeno {0}",
"LabelFolder": "Složka",
"LabelFolders": "Složky",
"LabelFontBold": "Tučně",
"LabelFontBoldness": "Výraznost písma",
"LabelFontFamily": "Rodina písem",
"LabelFontItalic": "Kurzíva",
"LabelFontScale": "Měřítko písma",
"LabelFontScale": "Velikost písma",
"LabelFontStrikethrough": "Přeškrtnutí",
"LabelFormat": "Formát",
"LabelFull": "Plné",
"LabelGenre": "Žánr",
"LabelGenres": "Žánry",
"LabelHardDeleteFile": "Trvale smazat soubor",
"LabelHasEbook": "Obsahuje elektronickou knihu",
"LabelHasSupplementaryEbook": "Obsahuje doplňkovou elektronickou knihu",
"LabelHasEbook": "Má e-knihu",
"LabelHasSupplementaryEbook": "Obsahuje doplňkovou e-knihu",
"LabelHideSubtitles": "Skrýt titulky",
"LabelHighestPriority": "Nejvyšší priorita",
"LabelHost": "Hostitel",
@@ -410,6 +417,7 @@
"LabelIntervalEveryHour": "Každou hodinu",
"LabelIntervalEveryMinute": "Každou minutu",
"LabelInvert": "Invertovat",
"LabelIpAddress": "IP Adresa",
"LabelItem": "Položka",
"LabelJumpBackwardAmount": "Přeskočit zpět o",
"LabelJumpForwardAmount": "Přeskočit dopředu o",
@@ -418,6 +426,7 @@
"LabelLanguages": "Jazyky",
"LabelLastBookAdded": "Poslední kniha přidána",
"LabelLastBookUpdated": "Poslední kniha aktualizována",
"LabelLastProgressDate": "Poslední pokrok: {0}",
"LabelLastSeen": "Naposledy viděno",
"LabelLastTime": "Naposledy",
"LabelLastUpdate": "Poslední aktualizace",
@@ -430,6 +439,9 @@
"LabelLibraryFilterSublistEmpty": "Žádné {0}",
"LabelLibraryItem": "Položka knihovny",
"LabelLibraryName": "Název knihovny",
"LabelLibrarySortByProgress": "Pokrok: naposledy aktualizováno",
"LabelLibrarySortByProgressFinished": "Pokrok: dokončeno",
"LabelLibrarySortByProgressStarted": "Pokrok: začato",
"LabelLimit": "Omezit",
"LabelLineSpacing": "Řádkování",
"LabelListenAgain": "Poslouchat znovu",
@@ -438,10 +450,11 @@
"LabelLogLevelWarn": "Varovat",
"LabelLookForNewEpisodesAfterDate": "Hledat nové epizody po tomto datu",
"LabelLowestPriority": "Nejnižší priorita",
"LabelMatchConfidence": "Jistota",
"LabelMatchExistingUsersBy": "Přiřadit stávající uživatele podle",
"LabelMatchExistingUsersByDescription": "Slouží k propojení stávajících uživatelů. Po propojení budou uživatelé přiřazeni k jedinečnému ID od poskytovatele SSO",
"LabelMaxEpisodesToDownload": "Maximální # epizod pro stažení. Použijte 0 pro bez omezení.",
"LabelMaxEpisodesToDownloadPerCheck": "Maximální počet nových epizod ke stažení při jedné kontrole",
"LabelMaxEpisodesToDownloadPerCheck": "Maximální # nových epizod ke stažení při jedné kontrole",
"LabelMaxEpisodesToKeep": "Maximální počet epizod k zachování",
"LabelMaxEpisodesToKeepHelp": "Hodnotou 0 není nastaven žádný maximální limit. Po automatickém stažení nové epizody se odstraní nejstarší epizoda, pokud máte více než X epizod. Při každém novém stažení se odstraní pouze 1 epizoda.",
"LabelMediaPlayer": "Přehrávač médií",
@@ -467,6 +480,7 @@
"LabelNewestAuthors": "Nejnovější autoři",
"LabelNewestEpisodes": "Nejnovější epizody",
"LabelNextBackupDate": "Datum příští zálohy",
"LabelNextChapters": "Další kapitola bude:",
"LabelNextScheduledRun": "Další naplánované spuštění",
"LabelNoApiKeys": "Žádné API klíče",
"LabelNoCustomMetadataProviders": "Žádní vlastní poskytovatelé metadat",
@@ -484,6 +498,7 @@
"LabelNotificationsMaxQueueSize": "Maximální velikost fronty pro oznamovací události",
"LabelNotificationsMaxQueueSizeHelp": "Události jsou omezeny na 1 za sekundu. Události budou ignorovány, pokud je fronta v maximální velikosti. Tím se zabrání spamování oznámení.",
"LabelNumberOfBooks": "Počet knih",
"LabelNumberOfChapters": "Počet kapitol:",
"LabelNumberOfEpisodes": "Počet epizod",
"LabelOpenIDAdvancedPermsClaimDescription": "Název požadavku OpenID, který obsahuje rozšířená oprávnění pro akce uživatele v rámci aplikace, která se budou vztahovat na role, které nejsou administrátory (<b>pokud jsou nakonfigurovány</b>). Pokud požadavek v odpovědi chybí, přístup do systému ABS bude zamítnut. Pokud chybí jediná možnost, bude považována za <code>false</code>. Ujistěte se, že deklarace poskytovatele identity odpovídá očekávané struktuře:",
"LabelOpenIDClaims": "Následující možnosti ponechte prázdné, abyste zakázali pokročilé přiřazování skupin a oprávnění a automatické přiřazení skupiny \"User\".",
@@ -577,7 +592,7 @@
"LabelSettingsChromecastSupport": "Podpora Chromecastu",
"LabelSettingsDateFormat": "Formát data",
"LabelSettingsEnableWatcher": "Automaticky skenovat změny v knihovnách",
"LabelSettingsEnableWatcherForLibrary": "Automaticky skenovat změny v knihovně",
"LabelSettingsEnableWatcherForLibrary": "Automaticky sledovat změny v knihovně",
"LabelSettingsEnableWatcherHelp": "Povoluje automatické přidávání/aktualizaci položek, když jsou zjištěny změny souborů. *Vyžaduje restart serveru",
"LabelSettingsEpubsAllowScriptedContent": "Povolení skriptovaného obsahu v epubu",
"LabelSettingsEpubsAllowScriptedContentHelp": "Povolení spouštění skriptů v souborech epub. Doporučujeme toto nastavení vypnout, pokud nedůvěřujete zdroji souborů epub.",
@@ -626,6 +641,7 @@
"LabelStartTime": "Čas Spuštění",
"LabelStarted": "Spuštěno",
"LabelStartedAt": "Spuštěno v",
"LabelStartedDate": "Spuštěno {0}",
"LabelStatsAudioTracks": "Zvukové stopy",
"LabelStatsAuthors": "Autoři",
"LabelStatsBestDay": "Nejlepší den",
@@ -655,6 +671,7 @@
"LabelTheme": "Téma",
"LabelThemeDark": "Tmavé",
"LabelThemeLight": "Světlé",
"LabelThemeSepia": "Hnědé",
"LabelTimeBase": "Časová základna",
"LabelTimeDurationXHours": "{0} hodin",
"LabelTimeDurationXMinutes": "{0} minut",
@@ -739,6 +756,7 @@
"MessageBookshelfNoResultsForFilter": "Filtr \"{0}: {1}\"",
"MessageBookshelfNoResultsForQuery": "Žádné výsledky pro dotaz",
"MessageBookshelfNoSeries": "Nemáte žádnou sérii",
"MessageBulkChapterPattern": "Kolik kapitol chcete přidat s tímto vzorem číslování?",
"MessageChapterEndIsAfter": "Konec kapitoly přesahuje konec audioknihy",
"MessageChapterErrorFirstNotZero": "První kapitola musí začínat na 0",
"MessageChapterErrorStartGteDuration": "Neplatný čas začátku, musí být kratší než doba trvání audioknihy",
@@ -759,13 +777,14 @@
"MessageConfirmDeleteSession": "Opravdu chcete smazat tuto relaci?",
"MessageConfirmEmbedMetadataInAudioFiles": "Jste si jisti, že chcete vložit metadata do {0} zvukových souborů?",
"MessageConfirmForceReScan": "Opravdu chcete vynutit opětovné prohledání?",
"MessageConfirmLogoutDevice": "Opravdu se chcete odhlásit z \"{0}\"?",
"MessageConfirmMarkAllEpisodesFinished": "Opravdu chcete označit všechny epizody jako dokončené?",
"MessageConfirmMarkAllEpisodesNotFinished": "Opravdu chcete označit všechny epizody jako nedokončené?",
"MessageConfirmMarkItemFinished": "Opravdu chcete označit \"{0}\" jako dokončené?",
"MessageConfirmMarkItemNotFinished": "Opravdu chcete označit \"{0}\" jako nedokončené?",
"MessageConfirmMarkSeriesFinished": "Opravdu chcete označit všechny knihy z této série jako dokončené?",
"MessageConfirmMarkSeriesNotFinished": "Opravdu chcete označit všechny knihy z této série jako nedokončené?",
"MessageConfirmNotificationTestTrigger": "Spustit toto oznámení s testovacími daty?",
"MessageConfirmNotificationTestTrigger": "Vyvolat tuto notifikaci s testovacími daty?",
"MessageConfirmPurgeCache": "Vyčistit mezipaměť odstraní celý adresář na adrese <code>/metadata/cache</code>. <br /><br />Určitě chcete odstranit adresář mezipaměti?",
"MessageConfirmPurgeItemsCache": "Vyčištění mezipaměti položek odstraní celý adresář <code>/metadata/cache/items</code>.<br />Jste si jistí?",
"MessageConfirmQuickEmbed": "Varování! Rychlé vložení nezálohuje vaše zvukové soubory. Ujistěte se, že máte zálohu zvukových souborů. <br><br>Chcete pokračovat?",
@@ -801,6 +820,8 @@
"MessageFeedURLWillBe": "URL zdroje bude {0}",
"MessageFetching": "Načítání...",
"MessageForceReScanDescription": "znovu prohledá všechny soubory jako při novém skenování. ID3 tagy zvukových souborů OPF soubory a textové soubory budou skenovány jako nové.",
"MessageHeatmapListeningTimeTooltip": "<strong>{0} poslechnuto</strong> na {1}",
"MessageHeatmapNoListeningSessions": "Žádné relace poslouchání na {0}",
"MessageImportantNotice": "Důležité upozornění!",
"MessageInsertChapterBelow": "Vložit kapitolu níže",
"MessageInvalidAsin": "Neplatný ASIN",
@@ -837,7 +858,7 @@
"MessageNoItems": "Žádné položky",
"MessageNoItemsFound": "Nebyly nalezeny žádné položky",
"MessageNoListeningSessions": "Žádné poslechové relace",
"MessageNoLogs": "Žádné logy",
"MessageNoLogs": "Žádné záznamy událostí",
"MessageNoMediaProgress": "Žádný průběh médií",
"MessageNoNotifications": "Žádná oznámení",
"MessageNoPodcastFeed": "Neplatný podcast: Žádný kanál",
@@ -867,7 +888,7 @@
"MessageRemoveEpisodes": "Odstranit {0} epizodu",
"MessageRemoveFromPlayerQueue": "Odstranit z fronty přehrávače",
"MessageRemoveUserWarning": "Opravdu chcete trvale smazat uživatele \"{0}\"?",
"MessageReportBugsAndContribute": "Hlásit chyby, žádat o funkce a přispívat",
"MessageReportBugsAndContribute": "Nahlašte chyby, vyžádejte si funkce a přispěte na",
"MessageResetChaptersConfirm": "Opravdu chcete resetovat kapitoly a vrátit zpět provedené změny?",
"MessageRestoreBackupConfirm": "Opravdu chcete obnovit zálohu vytvořenou dne",
"MessageRestoreBackupWarning": "Obnovení zálohy přepíše celou databázi umístěnou v /config a obálku obrázků v /metadata/items & /metadata/authors.<br /><br />Backups nezmění žádné soubory ve složkách knihovny. Pokud jste povolili nastavení serveru pro ukládání obrázků obalu a metadat do složek knihovny, nebudou zálohovány ani přepsány.<br /><br />Všichni klienti používající váš server budou automaticky obnoveni.",
@@ -900,7 +921,7 @@
"MessageTaskNoFilesToScan": "Žádné soubory k prohledání",
"MessageTaskOpmlImport": "Import OPML",
"MessageTaskOpmlImportDescription": "Vytváření podcastů z {0} RSS feedů",
"MessageTaskOpmlImportFeed": "Importní zdroj OPML",
"MessageTaskOpmlImportFeed": "Import OPML feedu",
"MessageTaskOpmlImportFeedDescription": "Importování RSS feedu \"{0}\"",
"MessageTaskOpmlImportFeedFailed": "Nepodařilo se získat kanál podcastu",
"MessageTaskOpmlImportFeedPodcastDescription": "Vytváření podcastu \"{0}\"",
@@ -940,6 +961,7 @@
"NotificationOnRSSFeedDisabledDescription": "Aktivováno když je automatické stahování pozastaveno z důvodu příliš mnoho neůspěšných pokusů",
"NotificationOnRSSFeedFailedDescription": "Aktivováno když selže RSS kanál pro stahování epizod",
"NotificationOnTestDescription": "Akce pro otestování upozorňovacího systému",
"PlaceholderBulkChapterInput": "Zadejte název kapitoly nebo použije číslování (např. 'Epizoda 1', 'Kapitola 10', '1.')",
"PlaceholderNewCollection": "Nový název kolekce",
"PlaceholderNewFolderPath": "Nová cesta ke složce",
"PlaceholderNewPlaylist": "Nový název seznamu přehrávání",
@@ -952,7 +974,7 @@
"StatsBooksFinishedThisYear": "Některé knihy dokončené tento rok…",
"StatsBooksListenedTo": "knih poslechnuto",
"StatsCollectionGrewTo": "Vaše kolekce knih se rozrostla na…",
"StatsSessions": "sezóna",
"StatsSessions": "relace",
"StatsSpentListening": "stráveno posloucháním",
"StatsTopAuthor": "TOP AUTOR",
"StatsTopAuthors": "TOP AUTOŘI",
@@ -993,8 +1015,12 @@
"ToastBookmarkCreateFailed": "Vytvoření záložky se nezdařilo",
"ToastBookmarkCreateSuccess": "Přidána záložka",
"ToastBookmarkRemoveSuccess": "Záložka odstraněna",
"ToastBulkChapterInvalidCount": "Zadejte číslo mezi 1 a 150",
"ToastCachePurgeFailed": "Nepodařilo se vyčistit mezipaměť",
"ToastCachePurgeSuccess": "Vyrovnávací paměť úspěšně vyčištěna",
"ToastChapterLocked": "Kapitola je uzamčena.",
"ToastChapterStartTimeAdjusted": "Začátek kapitoly posunut o {0} sekund",
"ToastChaptersAllLocked": "Všechny kapitoly jsou uzamčeny. Pro posun kapitol některé odemkněte.",
"ToastChaptersHaveErrors": "Kapitoly obsahují chyby",
"ToastChaptersInvalidShiftAmountLast": "Nesprávná délka posunu. Čas začátku poslední kapitoly by přesáhl dobu trvání této audioknihy.",
"ToastChaptersInvalidShiftAmountStart": "Nesprávná délka posunu. První kapitola by měla nulovou nebo zápornou délku a byla by přepsána druhou kapitolou. Zvětšete čas začátku druhé kapitoly.",
@@ -1004,6 +1030,8 @@
"ToastCollectionItemsAddFailed": "Přidávání položek do kolekce selhalo",
"ToastCollectionRemoveSuccess": "Kolekce odstraněna",
"ToastCollectionUpdateSuccess": "Kolekce aktualizována",
"ToastConnectionNotAvailable": "Připojení není k dispozici. Zkuste to prosím znovu později",
"ToastCoverSearchFailed": "Hledání obálky se nezdařilo",
"ToastCoverUpdateFailed": "Aktualizace obálky selhala",
"ToastDateTimeInvalidOrIncomplete": "Datum a čas jsou chybné nebo nekompletní",
"ToastDeleteFileFailed": "Nepodařilo se smazat soubor",
@@ -1013,7 +1041,7 @@
"ToastDeviceTestEmailFailed": "Odeslání testovacího emailu selhalo",
"ToastDeviceTestEmailSuccess": "Testovací email byl odeslán",
"ToastEmailSettingsUpdateSuccess": "Nastavení emailu aktualizována",
"ToastEncodeCancelFailed": "Chyba zrušení kódování",
"ToastEncodeCancelFailed": "Zrušení encodování selhalo",
"ToastEncodeCancelSucces": "Kódování zrušeno",
"ToastEpisodeDownloadQueueClearFailed": "Vyčištění fronty selhalo",
"ToastEpisodeDownloadQueueClearSuccess": "Fronta stahování epizod je prázdná",
@@ -1028,6 +1056,7 @@
"ToastInvalidImageUrl": "Neplatná URL obrázku",
"ToastInvalidMaxEpisodesToDownload": "Neplatný maximální počet epizod ke stažení",
"ToastInvalidUrl": "Neplatná URL",
"ToastInvalidUrls": "Alespoň jedna URL je neplatná",
"ToastItemCoverUpdateSuccess": "Obálka předmětu byl aktualizována",
"ToastItemDeletedFailed": "Smazání položky selhalo",
"ToastItemDeletedSuccess": "Položka smazána",
@@ -1077,6 +1106,7 @@
"ToastPlaylistUpdateSuccess": "Seznam přehrávání aktualizován",
"ToastPodcastCreateFailed": "Vytvoření podcastu se nezdařilo",
"ToastPodcastCreateSuccess": "Podcast byl úspěšně vytvořen",
"ToastPodcastEpisodeUpdated": "Epizoda aktualizována",
"ToastPodcastGetFeedFailed": "Chyba při získání podcastového feedu",
"ToastPodcastNoEpisodesInFeed": "Žádné epizody nenalezeny v RSS feedu",
"ToastPodcastNoRssFeed": "Podcast nemá RSS feed",
@@ -1105,12 +1135,12 @@
"ToastSeriesUpdateFailed": "Aktualizace série se nezdařila",
"ToastSeriesUpdateSuccess": "Aktualizace série byla úspěšná",
"ToastServerSettingsUpdateSuccess": "Nastavení serveru aktualizováno",
"ToastSessionCloseFailed": "Chyba při ukončení",
"ToastSessionCloseFailed": "Nepodařilo se ukončit relaci",
"ToastSessionDeleteFailed": "Nepodařilo se smazat relaci",
"ToastSessionDeleteSuccess": "Relace smazána",
"ToastSleepTimerDone": "Uspání knížky ... zZzzZz",
"ToastSlugMustChange": "Slug (URL) obsahuje chybné znaky",
"ToastSlugRequired": "Slug (URL) je vyžadována",
"ToastSlugMustChange": "Slug obsahuje chybné znaky",
"ToastSlugRequired": "Slug (URL) je vyžadován",
"ToastSocketConnected": "Socket připojen",
"ToastSocketDisconnected": "Socket odpojen",
"ToastSocketFailedToConnect": "Socket se nepodařilo připojit",
@@ -1127,5 +1157,13 @@
"ToastUserPasswordChangeSuccess": "Heslo bylo změněno úspěšně",
"ToastUserPasswordMismatch": "Hesla se neschodují",
"ToastUserPasswordMustChange": "Nové heslo se musí lišit od předchozího",
"ToastUserRootRequireName": "Musíte zadat uživatelské jméno root"
"ToastUserRootRequireName": "Musíte zadat uživatelské jméno root",
"TooltipAddChapters": "Přidat kapitolu/y",
"TooltipAddOneSecond": "Přidat 1 sekundu",
"TooltipAdjustChapterStart": "Kliknutím upravte začátek",
"TooltipLockAllChapters": "Uzamknout všechny kapitoly",
"TooltipLockChapter": "Uzamknout kapitolu (Shift+klik pro rozsah)",
"TooltipSubtractOneSecond": "Odečíst 1 sekundu",
"TooltipUnlockAllChapters": "Odemknout všechny kapitoly",
"TooltipUnlockChapter": "Odemknout kapitolu (Shift+klik pro rozsah)"
}
+304 -265
View File
@@ -3,7 +3,7 @@
"ButtonAddApiKey": "Tilføj API-nøgle",
"ButtonAddChapters": "Tilføj kapitler",
"ButtonAddDevice": "Tilføj enhed",
"ButtonAddLibrary": "Tilføj Bibliotek",
"ButtonAddLibrary": "Tilføj bibliotek",
"ButtonAddPodcasts": "Tilføj podcasts",
"ButtonAddUser": "Tilføj bruger",
"ButtonAddYourFirstLibrary": "Tilføj dit første bibliotek",
@@ -11,21 +11,21 @@
"ButtonApplyChapters": "Anvend kapitler",
"ButtonAuthors": "Forfattere",
"ButtonBack": "Tilbage",
"ButtonBatchEditPopulateFromExisting": "Opret fra eksisterende",
"ButtonBatchEditPopulateMapDetails": "Opret fra kortlægnings detaljer",
"ButtonBatchEditPopulateFromExisting": "Kopiér fra eksisterende",
"ButtonBatchEditPopulateMapDetails": "Kopiér til masseredigering",
"ButtonBrowseForFolder": "Gennemse mappe",
"ButtonCancel": "Annuller",
"ButtonCancelEncode": "Annuller kodning",
"ButtonChangeRootPassword": "Ændr rodadgangskode",
"ButtonCheckAndDownloadNewEpisodes": "Tjek og download nye episoder",
"ButtonCheckAndDownloadNewEpisodes": "Tjek og hent nye afsnit",
"ButtonChooseAFolder": "Vælg en mappe",
"ButtonChooseFiles": "Vælg filer",
"ButtonClearFilter": "Ryd filter",
"ButtonClose": "Luk",
"ButtonCloseFeed": "Luk feed",
"ButtonCloseSession": "Luk Åben Session",
"ButtonCloseSession": "Luk åben session",
"ButtonCollections": "Samlinger",
"ButtonConfigureScanner": "Konfigurer scanner",
"ButtonConfigureScanner": "Konfigurer skanner",
"ButtonCreate": "Opret",
"ButtonCreateBackup": "Opret sikkerhedskopi",
"ButtonDelete": "Slet",
@@ -33,10 +33,10 @@
"ButtonEdit": "Rediger",
"ButtonEditChapters": "Rediger kapitler",
"ButtonEditPodcast": "Rediger podcast",
"ButtonEnable": "Aktiver",
"ButtonEnable": "Aktivér",
"ButtonFireAndFail": "Affyring Og Fejl",
"ButtonFireOnTest": "Affyring vedTest begivenhed",
"ButtonForceReScan": "Tving genindlæsning",
"ButtonFireOnTest": "Udløs onTest-hændelse",
"ButtonForceReScan": "Tving genskanning",
"ButtonFullPath": "Fuld sti",
"ButtonHide": "Skjul",
"ButtonHome": "Hjem",
@@ -53,317 +53,321 @@
"ButtonMatchBooks": "Match bøger",
"ButtonNevermind": "Glem det",
"ButtonNext": "Næste",
"ButtonNextChapter": "Næste Kapitel",
"ButtonNextItemInQueue": "Næste Element i Køen",
"ButtonNextChapter": "Næste kapitel",
"ButtonNextItemInQueue": "Næste element i køen",
"ButtonOk": "Ok",
"ButtonOpenFeed": "Åbn feed",
"ButtonOpenManager": "Åbn manager",
"ButtonPause": "Pause",
"ButtonPlay": "Afspil",
"ButtonPlayAll": "Afspil Alle",
"ButtonPlayAll": "Afspil alle",
"ButtonPlaying": "Afspiller",
"ButtonPlaylists": "Afspilningslister",
"ButtonPrevious": "Sidste",
"ButtonPreviousChapter": "Sidste Kapitel",
"ButtonProbeAudioFile": "Undersøg Lydfil",
"ButtonPurgeAllCache": "Ryd al cache",
"ButtonPurgeItemsCache": "Ryd elementcache",
"ButtonQueueAddItem": "Tilføj til kø",
"ButtonPlaylists": "Playlister",
"ButtonPrevious": "Forrige",
"ButtonPreviousChapter": "Forrige kapitel",
"ButtonProbeAudioFile": "Undersøg lydfil",
"ButtonPurgeAllCache": "Ryd alle mellemlagre",
"ButtonPurgeItemsCache": "Ryd mediemellemlager",
"ButtonQueueAddItem": "Sæt i kø",
"ButtonQueueRemoveItem": "Fjern fra kø",
"ButtonQuickEmbed": "Hurtig Indlejring",
"ButtonQuickEmbedMetadata": "Hurtig Indlejring af Metadata",
"ButtonQuickEmbed": "Hurtig indlejring",
"ButtonQuickEmbedMetadata": "Hurtig indlejring af metadata",
"ButtonQuickMatch": "Hurtig Match",
"ButtonReScan": "Gen-scan",
"ButtonReScan": "Skan igen",
"ButtonRead": "Læs",
"ButtonReadLess": "Se mindre",
"ButtonReadMore": "Se mere",
"ButtonRefresh": "Genindlæs",
"ButtonRemove": "Fjern",
"ButtonRemoveAll": "Fjern Alle",
"ButtonRemoveAllLibraryItems": "Fjern Alle Bibliotekselementer",
"ButtonRemoveFromContinueListening": "Fjern fra Fortsæt Lytning",
"ButtonRemoveFromContinueReading": "Fjern fra Fortsæt Læsning",
"ButtonRemoveSeriesFromContinueSeries": "Fjern Serie fra Fortsæt Serie",
"ButtonRemoveAll": "Fjern alle",
"ButtonRemoveAllLibraryItems": "Fjern alle bibliotekselementer",
"ButtonRemoveFromContinueListening": "Fjern fra »Fortsæt med at lytte«",
"ButtonRemoveFromContinueReading": "Fjern fra »Fortsæt med at læse«",
"ButtonRemoveSeriesFromContinueSeries": "Fjern Serie fra »Fortsæt serie«",
"ButtonReset": "Nulstil",
"ButtonResetToDefault": "Nulstil til standard",
"ButtonRestore": "Gendan",
"ButtonSave": "Gem",
"ButtonSaveAndClose": "Gem & Luk",
"ButtonSaveTracklist": "Gem Sporliste",
"ButtonScan": "Scan",
"ButtonScanLibrary": "Scan Bibliotek",
"ButtonScrollLeft": "Rul til Venstre",
"ButtonScrollRight": "Rul til Højre",
"ButtonSaveAndClose": "Gem og luk",
"ButtonSaveTracklist": "Gem sporliste",
"ButtonScan": "Skan",
"ButtonScanLibrary": "Skan bibliotek",
"ButtonScrollLeft": "Rul til venstre",
"ButtonScrollRight": "Rul til højre",
"ButtonSearch": "Søg",
"ButtonSelectFolderPath": "Vælg Mappe Sti",
"ButtonSelectFolderPath": "Vælg mappesti",
"ButtonSeries": "Serier",
"ButtonSetChaptersFromTracks": "Sæt kapitler fra spor",
"ButtonShare": "Del",
"ButtonShiftTimes": "Skift Tider",
"ButtonShiftTimes": "Forskyd tider",
"ButtonShow": "Vis",
"ButtonStartM4BEncode": "Start M4B Kode",
"ButtonStartMetadataEmbed": "Start Metadata Indlejring",
"ButtonStartM4BEncode": "Start konvertering til M4B",
"ButtonStartMetadataEmbed": "Start metadataindlejring",
"ButtonStats": "Statistik",
"ButtonSubmit": "Send",
"ButtonTest": "Test",
"ButtonUnlinkOpenId": "Afkobl OpenID",
"ButtonUpload": "Upload",
"ButtonUploadBackup": "Upload Backup",
"ButtonUploadCover": "Upload Omslag",
"ButtonUploadOPMLFile": "Upload OPML Fil",
"ButtonUpload": "Overfør",
"ButtonUploadBackup": "Overfør sikkerhedskopi",
"ButtonUploadCover": "Overfør omslag",
"ButtonUploadOPMLFile": "Overfør OPML-fil",
"ButtonUserDelete": "Slet bruger {0}",
"ButtonUserEdit": "Rediger bruger {0}",
"ButtonViewAll": "Vis Alle",
"ButtonViewAll": "Vis alle",
"ButtonYes": "Ja",
"ErrorUploadFetchMetadataAPI": "Fejl henter metadata",
"ErrorUploadFetchMetadataNoResults": "Kunne ikke hente metadata - prøv at uploade title og/eller forfatter",
"ErrorUploadLacksTitle": "Skal have en title",
"ErrorUploadFetchMetadataAPI": "Fejl ved hentning af metadata",
"ErrorUploadFetchMetadataNoResults": "Kunne ikke hente metadata - prøv at ændre titel og/eller forfatter",
"ErrorUploadLacksTitle": "Titel kræves",
"HeaderAccount": "Konto",
"HeaderAddCustomMetadataProvider": "Tilføj Brugerdefineret Metadataudbyder",
"HeaderAddCustomMetadataProvider": "Tilføj brugerdefineret metadataudbyder",
"HeaderAdvanced": "Avanceret",
"HeaderApiKeys": "API-nøgler",
"HeaderAppriseNotificationSettings": "Apprise Notifikationsindstillinger",
"HeaderAppriseNotificationSettings": "Apprise-notifikationsindstillinger",
"HeaderAudioTracks": "Lydspor",
"HeaderAudiobookTools": "Audiobog Filhåndteringsværktøjer",
"HeaderAuthentication": "Autentificering",
"HeaderAudiobookTools": "Håndtering af lydbogsfiler",
"HeaderAuthentication": "Loginindstillinger",
"HeaderBackups": "Sikkerhedskopier",
"HeaderChangePassword": "Skift Adgangskode",
"HeaderBulkChapterModal": "Tilføj flere kapitler",
"HeaderChangePassword": "Skift adgangskode",
"HeaderChapters": "Kapitler",
"HeaderChooseAFolder": "Vælg en Mappe",
"HeaderChooseAFolder": "Vælg en mappe",
"HeaderCollection": "Samling",
"HeaderCollectionItems": "Samlingselementer",
"HeaderCollectionItems": "Bøger i samlingen",
"HeaderCover": "Omslag",
"HeaderCurrentDownloads": "Nuværende Downloads",
"HeaderCustomMessageOnLogin": "Brugerdefineret Besked ved Login",
"HeaderCustomMetadataProviders": "Brugerdefineret Metadataudbyder",
"HeaderCurrentDownloads": "Aktuelle downloads",
"HeaderCustomMessageOnLogin": "Brugerdefineret besked ved logind",
"HeaderCustomMetadataProviders": "Brugerdefineret metadataudbyder",
"HeaderDetails": "Detaljer",
"HeaderDownloadQueue": "Download Kø",
"HeaderDownloadQueue": "Downloadkø",
"HeaderEbookFiles": "E-bogsfiler",
"HeaderEmail": "Email",
"HeaderEmailSettings": "Email Indstillinger",
"HeaderEpisodes": "Episoder",
"HeaderEreaderDevices": "E-læser Enheder",
"HeaderEreaderSettings": "E-læser Indstillinger",
"HeaderEmailSettings": "Emailindstillinger",
"HeaderEpisodes": "Afsnit",
"HeaderEreaderDevices": "E-bogslæsere",
"HeaderEreaderSettings": "Indstillinger for e-bogslæsere",
"HeaderFiles": "Filer",
"HeaderFindChapters": "Find Kapitler",
"HeaderIgnoredFiles": "Ignorerede Filer",
"HeaderItemFiles": "Emnefiler",
"HeaderItemMetadataUtils": "Emne Metadata Værktøjer",
"HeaderLastListeningSession": "Seneste Lyttesession",
"HeaderLatestEpisodes": "Seneste episoder",
"HeaderFindChapters": "Find kapitler",
"HeaderIgnoredFiles": "Ignorerede filer",
"HeaderItemFiles": "Filer",
"HeaderItemMetadataUtils": "Metadata-værktøjer",
"HeaderLastListeningSession": "Seneste lyttesession",
"HeaderLatestEpisodes": "Nyeste afsnit",
"HeaderLibraries": "Biblioteker",
"HeaderLibraryFiles": "Biblioteksfiler",
"HeaderLibraryStats": "Biblioteksstatistik",
"HeaderListeningSessions": "Lyttesessioner",
"HeaderListeningStats": "Lyttestatistik",
"HeaderLogin": "Log ind",
"HeaderLogs": "Logs",
"HeaderManageGenres": "Administrer Genrer",
"HeaderManageTags": "Administrer Tags",
"HeaderMapDetails": "Kort Detaljer",
"HeaderMatch": "Match",
"HeaderLogs": "Logfiler",
"HeaderManageGenres": "Administrer genrer",
"HeaderManageTags": "Administrer emneord",
"HeaderMapDetails": "Masseredigering",
"HeaderMatch": "Find match",
"HeaderMetadataOrderOfPrecedence": "Metadata-prioritet",
"HeaderMetadataToEmbed": "Metadata til indlejring",
"HeaderNewAccount": "Ny Konto",
"HeaderNewAccount": "Ny konto",
"HeaderNewApiKey": "Ny API-nøgle",
"HeaderNewLibrary": "Nyt Bibliotek",
"HeaderNotificationCreate": "Opret Notifikation",
"HeaderNewLibrary": "Nyt bibliotek",
"HeaderNotificationCreate": "Opret notifikation",
"HeaderNotificationUpdate": "Updater Notifikation",
"HeaderNotifications": "Meddelelser",
"HeaderOpenIDConnectAuthentication": "OpenID Connect-autentificering",
"HeaderOpenIDConnectAuthentication": "Log ind med OpenID Connect",
"HeaderOpenListeningSessions": "Åbne lyttesessioner",
"HeaderOpenRSSFeed": "Åbn RSS Feed",
"HeaderOtherFiles": "Andre Filer",
"HeaderPasswordAuthentication": "Adgangskodeautentificering",
"HeaderOpenRSSFeed": "Åbn RSS-feed",
"HeaderOtherFiles": "Andre filer",
"HeaderPasswordAuthentication": "Log ind med adgangskode",
"HeaderPermissions": "Tilladelser",
"HeaderPlayerQueue": "Afspilningskø",
"HeaderPlayerSettings": "Afspiller Indstillinger",
"HeaderPlaylist": "Afspilningsliste",
"HeaderPlaylistItems": "Afspilningsliste Elementer",
"HeaderPodcastsToAdd": "Podcasts til Tilføjelse",
"HeaderPlayerSettings": "Afspilningsindstillinger",
"HeaderPlaylist": "Playliste",
"HeaderPlaylistItems": "Elementer i playlisten",
"HeaderPodcastsToAdd": "Podcasts som skal tilføjes",
"HeaderPresets": "Forudindstillinger",
"HeaderPreviewCover": "Forhåndsvis Omslag",
"HeaderRSSFeedGeneral": "RSS Detaljer",
"HeaderRSSFeedIsOpen": "RSS Feed er Åben",
"HeaderRSSFeeds": "RSS-Feeds",
"HeaderRemoveEpisode": "Fjern Episode",
"HeaderRemoveEpisodes": "Fjern {0} Episoder",
"HeaderSavedMediaProgress": "Gemt Medieforløb",
"HeaderPreviewCover": "Forhåndsvis omslag",
"HeaderRSSFeedGeneral": "RSS-detaljer",
"HeaderRSSFeedIsOpen": "RSS-feedet er åbent",
"HeaderRSSFeeds": "RSS-feeds",
"HeaderRemoveEpisode": "Fjern afsnit",
"HeaderRemoveEpisodes": "Fjern {0} afsnit",
"HeaderSavedMediaProgress": "Gemt lyttefremgang",
"HeaderSchedule": "Planlæg",
"HeaderScheduleEpisodeDownloads": "Planlæg Automatisk Episode-Download",
"HeaderScheduleLibraryScans": "Planlæg Automatiske Biblioteksscanninger",
"HeaderScheduleEpisodeDownloads": "Planlæg automatisk hentning af afsnit",
"HeaderScheduleLibraryScans": "Planlæg automatisk biblioteksskanning",
"HeaderSession": "Session",
"HeaderSetBackupSchedule": "Indstil Sikkerhedskopieringsplan",
"HeaderSetBackupSchedule": "Indstil tidsplan for sikkerhedskopiering",
"HeaderSettings": "Indstillinger",
"HeaderSettingsDisplay": "Skærm",
"HeaderSettingsExperimental": "Eksperimentelle Funktioner",
"HeaderSettingsDisplay": "Visning",
"HeaderSettingsExperimental": "Eksperimentelle funktioner",
"HeaderSettingsGeneral": "Generelt",
"HeaderSettingsScanner": "Scanner",
"HeaderSettingsScanner": "Skanner",
"HeaderSettingsSecurity": "Sikkerhed",
"HeaderSettingsWebClient": "Webklient",
"HeaderSleepTimer": "Søvntimer",
"HeaderStatsLargestItems": "Største Elementer",
"HeaderStatsLongestItems": "Længste Elementer (timer)",
"HeaderStatsMinutesListeningChart": "Minutter Lyttet (sidste 7 dage)",
"HeaderStatsRecentSessions": "Seneste Sessions",
"HeaderStatsTop10Authors": "Top 10 Forfattere",
"HeaderStatsTop5Genres": "Top 5 Genrer",
"HeaderSleepTimer": "Sovefunktion",
"HeaderStatsLargestItems": "Største bøger",
"HeaderStatsLongestItems": "Længste bøger (timer)",
"HeaderStatsMinutesListeningChart": "Minutter lyttet (sidste 7 dage)",
"HeaderStatsRecentSessions": "Seneste sessioner",
"HeaderStatsTop10Authors": "Top 10 forfattere",
"HeaderStatsTop5Genres": "Top 5 genrer",
"HeaderTableOfContents": "Indholdsfortegnelse",
"HeaderTools": "Værktøjer",
"HeaderUpdateAccount": "Opdater Konto",
"HeaderUpdateAccount": "Opdater konto",
"HeaderUpdateApiKey": "Opdater API-nøgle",
"HeaderUpdateAuthor": "Opdater Forfatter",
"HeaderUpdateDetails": "Opdater Detaljer",
"HeaderUpdateLibrary": "Opdater Bibliotek",
"HeaderUpdateAuthor": "Opdater forfatter",
"HeaderUpdateDetails": "Opdater detaljer",
"HeaderUpdateLibrary": "Opdater bibliotek",
"HeaderUsers": "Brugere",
"HeaderYearReview": "Gennemgang af År {0}",
"HeaderYourStats": "Dine Statistikker",
"LabelAbridged": "Forkortet",
"LabelAbridgedChecked": "Forkortet (kontrolleret)",
"LabelAbridgedUnchecked": "Uforkortet (ikke kontrolleret)",
"LabelAccessibleBy": "Tilgængelig af",
"LabelAccountType": "Brugertype",
"HeaderYearReview": "Året {0} opsummeret",
"HeaderYourStats": "Din statistik",
"LabelAbridged": "Forkortet udgave",
"LabelAbridgedChecked": "Forkortet udgave (bekræftet)",
"LabelAbridgedUnchecked": "Uforkortet udgave (ikke bekræftet)",
"LabelAccessibleBy": "Tilgængelig for",
"LabelAccountType": "Kontotype",
"LabelAccountTypeAdmin": "Administrator",
"LabelAccountTypeGuest": "Gæst",
"LabelAccountTypeUser": "Bruger",
"LabelActivities": "Aktiviteter",
"LabelActivity": "Aktivitet",
"LabelAddToCollection": "Tilføj til Samling",
"LabelAddToCollectionBatch": "Tilføj {0} Bøger til Samling",
"LabelAddToPlaylist": "Tilføj til Afspilningsliste",
"LabelAddToPlaylistBatch": "Tilføj {0} Elementer til Afspilningsliste",
"LabelAddToCollection": "Tilføj til samling",
"LabelAddToCollectionBatch": "Tilføj {0} bøger til samling",
"LabelAddToPlaylist": "Tilføj til playliste",
"LabelAddToPlaylistBatch": "Tilføj {0} elementer til afspilningsliste",
"LabelAddedAt": "Tilføjet",
"LabelAddedDate": "Tilføjet {0}",
"LabelAdminUsersOnly": "Kun Administratorer",
"LabelAddedDate": "Tilføjede {0}",
"LabelAdminUsersOnly": "Kun administratorer",
"LabelAll": "Alle",
"LabelAllEpisodesDownloaded": "Alle episoder hentet",
"LabelAllUsers": "Alle Brugere",
"LabelAllUsersExcludingGuests": "Alle bruger eksklusiv gæster",
"LabelAllUsersIncludingGuests": "Alle bruger inklusiv gæster",
"LabelAllEpisodesDownloaded": "Alle afsnit hentet",
"LabelAllUsers": "Alle brugere",
"LabelAllUsersExcludingGuests": "Alle brugere, bortset fra gæster",
"LabelAllUsersIncludingGuests": "Alle brugere, også gæster",
"LabelAlreadyInYourLibrary": "Allerede i dit bibliotek",
"LabelApiKeyCreated": "API-nøgle\"{0}\" oprettet succesfuldt.",
"LabelApiKeyCreated": "API-nøglen \"{0}\" blev oprettet.",
"LabelApiKeyCreatedDescription": "Sørg for at kopiere API-nøglen nu, da du ikke vil kunne se den igen.",
"LabelApiKeyUser": "Ret på vegne af brugeren",
"LabelApiKeyUserDescription": "Denne API-nøgle vil have de samme tilladelser som den bruger, den handler på vegne af. Dette vil fremgå på samme måde i logfiler, som hvis brugeren foretog anmodningen.",
"LabelApiToken": "API Token",
"LabelAppend": "Tilføj",
"LabelApiKeyUser": "Handl på vegne af bruger",
"LabelApiKeyUserDescription": "Denne API-nøgle vil have de samme tilladelser som den bruger, den handler på vegne af. Dette vil fremgå på samme måde i logfiler, som hvis brugeren selv foretog anmodningen.",
"LabelApiToken": "API-nøgle",
"LabelAppend": "Vedhæft",
"LabelAudioBitrate": "Lydbitrate (f.eks. 128k)",
"LabelAudioChannels": "Lydkanaler (1 eller 2)",
"LabelAudioCodec": "Lydkodek",
"LabelAudioCodec": "Lyd-codec",
"LabelAuthor": "Forfatter",
"LabelAuthorFirstLast": "Forfatter (Fornavn Efternavn)",
"LabelAuthorLastFirst": "Forfatter (Efternavn, Fornavn)",
"LabelAuthors": "Forfattere",
"LabelAutoDownloadEpisodes": "Auto Download Episoder",
"LabelAutoFetchMetadata": "Automatisk Hent Metadata",
"LabelAutoFetchMetadataHelp": "Henter metadata for titler, forfatter og serier for at strømligne uploading. Ekstra metadata har måske brug for at blive matchet efter upload.",
"LabelAutoLaunch": "Åben Automatisk",
"LabelAutoDownloadEpisodes": "Hent automatisk afsnit",
"LabelAutoFetchMetadata": "Hent automatisk metadata",
"LabelAutoFetchMetadataHelp": "Henter metadata for titler, forfatter og serie for at strømline uploading. Ekstra metadata har måske brug for at blive matchet efter upload.",
"LabelAutoLaunch": "Automatisk start",
"LabelAutoLaunchDescription": "Viderestil automatisk til login-udbyderen ved navigation til login-siden (manuel overstyring via <code>/login?autoLaunch=0</code>)",
"LabelAutoRegister": "Registrer Automatisk",
"LabelAutoRegister": "Registrer automatisk",
"LabelAutoRegisterDescription": "Automatisk oprettelse af nye brugere efter login",
"LabelBackToUser": "Tilbage til Bruger",
"LabelBackupAudioFiles": "Sikkerhedskopier lydfiler",
"LabelBackupLocation": "Backup Placering",
"LabelBackToUser": "Tilbage til bruger",
"LabelBackupAudioFiles": "Sikkerhedskopiér lydfiler",
"LabelBackupLocation": "Placering af sikkerhedskopi",
"LabelBackupsEnableAutomaticBackups": "Automatisk sikkerhedskopiering",
"LabelBackupsEnableAutomaticBackupsHelp": "Sikkerhedskopier gemt i /metadata/backups",
"LabelBackupsMaxBackupSize": "Maksimal sikkerhedskopistørrelse (i GB) (0 for ubegrænset)",
"LabelBackupsMaxBackupSizeHelp": "Som en beskyttelse mod fejlkonfiguration fejler sikkerhedskopier, hvis de overstiger den konfigurerede størrelse.",
"LabelBackupsNumberToKeep": "Antal sikkerhedskopier at beholde",
"LabelBackupsNumberToKeepHelp": "Kun 1 sikkerhedskopi fjernes ad gangen, så hvis du allerede har flere sikkerhedskopier end dette, skal du fjerne dem manuelt.",
"LabelBackupsNumberToKeep": "Antal sikkerhedskopier som skal beholdes",
"LabelBackupsNumberToKeepHelp": "Kun én sikkerhedskopi fjernes ad gangen, så hvis du allerede har flere sikkerhedskopier end dette, skal du fjerne dem manuelt.",
"LabelBitrate": "Bitrate",
"LabelBonus": "Bonus",
"LabelBooks": "Bøger",
"LabelButtonText": "Knap tekst",
"LabelButtonText": "Tekst på knap",
"LabelByAuthor": "af {0}",
"LabelChangePassword": "Ændre Adgangskode",
"LabelChangePassword": "Ændr adgangskode",
"LabelChannels": "Kanaler",
"LabelChapterCount": "{0} Kapitler",
"LabelChapterTitle": "Kapitel Titel",
"LabelChapterCount": "{0} kapitler",
"LabelChapterTitle": "Kapiteltitel",
"LabelChapters": "Kapitler",
"LabelChaptersFound": "fundne kapitler",
"LabelChaptersFound": "kapitler fundet",
"LabelClickForMoreInfo": "Klik for mere info",
"LabelClickToUseCurrentValue": "Klik for at bruge nuværende værdi",
"LabelClosePlayer": "Luk afspiller",
"LabelCodec": "Kodeks",
"LabelCollapseSeries": "Fold Serier Sammen",
"LabelCodec": "Codec",
"LabelCollapseSeries": "Fold serier sammen",
"LabelCollapseSubSeries": "Fold underserie sammen",
"LabelCollection": "Samling",
"LabelCollections": "Samlinger",
"LabelComplete": "Fuldfør",
"LabelConfirmPassword": "Bekræft Adgangskode",
"LabelComplete": "Afsluttet",
"LabelConfirmPassword": "Bekræft adgangskode",
"LabelContinueListening": "Fortsæt med at lytte",
"LabelContinueReading": "Fortsæt med at læse",
"LabelContinueSeries": "Fortsæt Serien",
"LabelContinueSeries": "Fortsæt serien",
"LabelCorsAllowed": "Tilladte CORS-oprindelser",
"LabelCover": "Omslag",
"LabelCoverImageURL": "Omslagsbillede URL",
"LabelCoverProvider": "Cover billede udbyder",
"LabelCreatedAt": "Oprettet d.",
"LabelCronExpression": "Cron Udtryk",
"LabelCoverImageURL": "Omslagsbilledes-URL",
"LabelCoverProvider": "Kilde til omslagsbillede",
"LabelCreatedAt": "Oprettet",
"LabelCronExpression": "Cron-kommando",
"LabelCurrent": "Aktuel",
"LabelCurrently": "Aktuelt:",
"LabelCustomCronExpression": "Brugerdefineret Cron Udtryk:",
"LabelDatetime": "Dato og Tid",
"LabelCurrently": "Nuværende:",
"LabelCustomCronExpression": "Brugerdefineret Cron-kommando:",
"LabelDatetime": "Dato og tid",
"LabelDays": "Dage",
"LabelDeleteFromFileSystemCheckbox": "Slet fra filsystem (afmarker kun for at fjerne fra databasen)",
"LabelDeleteFromFileSystemCheckbox": "Slet fra filsystem (afmarkér for udelukkende at fjerne fra databasen)",
"LabelDescription": "Beskrivelse",
"LabelDeselectAll": "Fravælg Alle",
"LabelDevice": "Enheds",
"LabelDeselectAll": "Fravælg alle",
"LabelDetectedPattern": "Identificeret mønster:",
"LabelDevice": "Enhed",
"LabelDeviceInfo": "Enhedsinformation",
"LabelDeviceIsAvailableTo": "Enhed er tilgængelig for...",
"LabelDeviceIsAvailableTo": "Enheden er tilgængelig for...",
"LabelDirectory": "Mappe",
"LabelDiscFromFilename": "Disk fra Filnavn",
"LabelDiscFromMetadata": "Disk fra Metadata",
"LabelDiscFromFilename": "Disk fra filnavn",
"LabelDiscFromMetadata": "Disk fra metadata",
"LabelDiscover": "Opdag",
"LabelDownload": "Download",
"LabelDownloadNEpisodes": "Download {0} episoder",
"LabelDownloadable": "Downloadbar",
"LabelDownload": "Hent",
"LabelDownloadNEpisodes": "Hent {0} afsnit",
"LabelDownloadable": "Kan hentes",
"LabelDuration": "Varighed",
"LabelDurationComparisonExactMatch": "(præcis match)",
"LabelDurationComparisonExactMatch": "(præcist match)",
"LabelDurationComparisonLonger": "({0} længere)",
"LabelDurationComparisonShorter": "({0} kortere)",
"LabelDurationFound": "Fundet varighed:",
"LabelEbook": "E-bog",
"LabelEbooks": "E-bøger",
"LabelEdit": "Rediger",
"LabelEmail": "E-mail",
"LabelEmailSettingsFromAddress": "Fra Adresse",
"LabelEmailSettingsRejectUnauthorized": "Afvis uautoriserede certifikater",
"LabelEmailSettingsRejectUnauthorizedHelp": "Deaktivering af SSL certifikat validering kan udsætte din forbindelse for sikkerhedsrisici, eksempelvis man-in-the-middle angreb. Deaktiver kun denne indstilling hvis du forstår de potentielle implikationer og stoler på den mailserver du forbinder til.",
"LabelEmailSettingsSecure": "Sikker",
"LabelEmailSettingsSecureHelp": "Hvis sandt, vil forbindelsen bruge TLS ved tilslutning til serveren. Hvis falsk, bruges TLS, hvis serveren understøtter STARTTLS-udvidelsen. I de fleste tilfælde skal denne værdi sættes til sandt, hvis du tilslutter til port 465. Til port 587 eller 25 skal du holde det falsk. (fra nodemailer.com/smtp/#authentication)",
"LabelEmailSettingsTestAddress": "Test Adresse",
"LabelEmbeddedCover": "Indlejret Omslag",
"LabelEmail": "Email",
"LabelEmailSettingsFromAddress": "Afsenderadresse",
"LabelEmailSettingsRejectUnauthorized": "Afvis ukendte sikkerhedscertifikater",
"LabelEmailSettingsRejectUnauthorizedHelp": "Hvis du slår SSL-certifikatkontrollen fra, risikerer du at uvedkommende kan opsnappe dine data. Slå kun dette fra, hvis du er helt tryg ved situationen og har fuld tillid til den mailserver, du forbinder til.",
"LabelEmailSettingsSecure": "Sikker forbindelse",
"LabelEmailSettingsSecureHelp": "Når denne er slået til, bruger forbindelsen altid fuld kryptering (TLS). Hvis den er slået fra, bruges kryptering kun, hvis serveren tillader det (via STARTTLS). Lad dette være slået til, hvis du bruger port 465. Slå det fra, hvis du bruger port 587 eller 25",
"LabelEmailSettingsTestAddress": "Modtageradresse til test",
"LabelEmbeddedCover": "Indlejret omslag",
"LabelEnable": "Aktivér",
"LabelEncodingBackupLocation": "En sikkerhedskopi af dine originale lydfiler vil blive gemt under:",
"LabelEncodingChaptersNotEmbedded": "Kapitler er ikke indlejret i multi spors lydbøger.",
"LabelEncodingClearItemCache": "Sørg for periodisk at rense indholdscachen.",
"LabelEncodingFinishedM4B": "Færdiggjort M4B som vil blive placeret i din lydbogsmappe ved:",
"LabelEncodingInfoEmbedded": "Metadata vil blive indlejret i lydfiler i lydbogsmappen.",
"LabelEncodingStartedNavigation": "Når opgaven er startet kan du navigere væk fra denne side.",
"LabelEncodingTimeWarning": "Indkodning kan tage op til 30 minutter.",
"LabelEncodingWarningAdvancedSettings": "Advarsel: Opdater ikke disse indstillinger med mindre du kender til ffmpeg indkodningsindstillinger.",
"LabelEncodingWatcherDisabled": "Hvis du har watcheren deaktiveret skal du gen-scanne denne lydbog bagefter.",
"LabelEncodingBackupLocation": "En sikkerhedskopi af dine originale lydfiler vil blive gemt i mappen:",
"LabelEncodingChaptersNotEmbedded": "Kapitler bliver ikke indlejret i lydbøger som består af flere lydfiler.",
"LabelEncodingClearItemCache": "Sørg for jævnligt at rense mellemlageret.",
"LabelEncodingFinishedM4B": "Den færdige M4B-fil vil blive placeret i lydbogsmappen:",
"LabelEncodingInfoEmbedded": "Metadata vil blive indlejret i lydfilerne i lydbogsmappen.",
"LabelEncodingStartedNavigation": "Når opgaven er sat i gang kan du navigere væk fra denne side.",
"LabelEncodingTimeWarning": "Omkodningen kan tage op til 30 minutter.",
"LabelEncodingWarningAdvancedSettings": "Advarsel: Ændr ikke disse indstillinger med mindre du kender til ffmpeg-indkodningsindstillinger.",
"LabelEncodingWatcherDisabled": "Hvis du har slået automatisk biblioteksovervågning fra skal du genskanne denne lydbog bagefter.",
"LabelEnd": "Slut",
"LabelEndOfChapter": "Slutningen af kapitel",
"LabelEpisode": "Afsnit",
"LabelEpisodeNotLinkedToRssFeed": "Afsnit er ikke koblet til RSS feed",
"LabelEpisodeNotLinkedToRssFeed": "Afsnit er ikke koblet til RSS-feed",
"LabelEpisodeNumber": "Afsnit #{0}",
"LabelEpisodeTitle": "Episodetitel",
"LabelEpisodeType": "Episodetype",
"LabelEpisodeUrlFromRssFeed": "Afsnit URL fra RSS feed",
"LabelEpisodeTitle": "Afsnitstitel",
"LabelEpisodeType": "Afsnitstype",
"LabelEpisodeUrlFromRssFeed": "Afsnits-URL fra RSS-feed",
"LabelEpisodes": "Afsnit",
"LabelEpisodic": "Afsnit",
"LabelEpisodic": "Episodisk",
"LabelExample": "Eksempel",
"LabelExpandSeries": "Udfold serie",
"LabelExpandSubSeries": "Udfold underserie",
"LabelExpandSeries": "Fold serie ud",
"LabelExpandSubSeries": "Fold underserie ud",
"LabelExpired": "Udløbet",
"LabelExpiresAt": "Udløbsdato",
"LabelExpiresInSeconds": "Udløber om (seconds)",
"LabelExpiresNever": "Aldrig",
"LabelExplicit": "Eksplisit",
"LabelExplicitChecked": "Eksplicit (markeret)",
"LabelExplicitUnchecked": "Ikke eksplicit (ikke markeret)",
"LabelExplicit": "Voksenindhold",
"LabelExplicitChecked": "Voksenindhold (markeret)",
"LabelExplicitUnchecked": "Ikke voksenindhold (ikke markeret)",
"LabelExportOPML": "Eksport OPML",
"LabelFeedURL": "Feed URL",
"LabelFeedURL": "Feed-URL",
"LabelFetchingMetadata": "Henter metadata",
"LabelFile": "Fil",
"LabelFileBirthtime": "Oprettelsestidspunkt for fil",
@@ -374,11 +378,12 @@
"LabelFilterByUser": "Filtrér efter bruger",
"LabelFindEpisodes": "Find episoder",
"LabelFinished": "Færdig",
"LabelFinishedDate": "Færdig {0}",
"LabelFolder": "Mappe",
"LabelFolders": "Mapper",
"LabelFontBold": "Fed",
"LabelFontBoldness": "Skrift tykkelse",
"LabelFontFamily": "Fontfamilie",
"LabelFontFamily": "Skrifttypefamilie",
"LabelFontItalic": "Kursiv",
"LabelFontScale": "Skriftstørrelse",
"LabelFontStrikethrough": "Gennemstreget",
@@ -386,7 +391,7 @@
"LabelFull": "Fuld",
"LabelGenre": "Genre",
"LabelGenres": "Genrer",
"LabelHardDeleteFile": "Permanent slet fil",
"LabelHardDeleteFile": "Slet fil permanent",
"LabelHasEbook": "Har e-bog",
"LabelHasSupplementaryEbook": "Har supplerende e-bog",
"LabelHideSubtitles": "Skjul undertitler",
@@ -395,7 +400,7 @@
"LabelHour": "Time",
"LabelHours": "Timer",
"LabelIcon": "Ikon",
"LabelImageURLFromTheWeb": "Billede URL fra nettet",
"LabelImageURLFromTheWeb": "Billede-URL fra nettet",
"LabelInProgress": "I gang",
"LabelIncludeInTracklist": "Inkluder i afspilningsliste",
"LabelIncomplete": "Ufuldstændig",
@@ -409,40 +414,45 @@
"LabelIntervalEveryDay": "Hver dag",
"LabelIntervalEveryHour": "Hver time",
"LabelIntervalEveryMinute": "Hvert minut",
"LabelInvert": "Inverter",
"LabelInvert": "Omvendt begrænsning",
"LabelItem": "Element",
"LabelJumpBackwardAmount": "Spring bagud mængde",
"LabelJumpForwardAmount": "Spring fremad mængde",
"LabelJumpBackwardAmount": "Tilbagespolingstid",
"LabelJumpForwardAmount": "Fremadspolingstid",
"LabelLanguage": "Sprog",
"LabelLanguageDefaultServer": "Standard server sprog",
"LabelLanguageDefaultServer": "Serverens standardsprog",
"LabelLanguages": "Sprog",
"LabelLastBookAdded": "Senest tilføjede bog",
"LabelLastBookUpdated": "Senest opdaterede bog",
"LabelLastProgressDate": "Seneste fremgang: {0}",
"LabelLastSeen": "Sidst set",
"LabelLastTime": "Sidste gang",
"LabelLastUpdate": "Seneste opdatering",
"LabelLayout": "Layout",
"LabelLastTime": "Sidst lyttet",
"LabelLastUpdate": "Sidst ændret",
"LabelLayout": "Udseende",
"LabelLayoutSinglePage": "Enkeltside",
"LabelLayoutSplitPage": "Opdelt side",
"LabelLayoutSplitPage": "Opdelte sider",
"LabelLess": "Mindre",
"LabelLibrariesAccessibleToUser": "Biblioteker tilgængelige for bruger",
"LabelLibrary": "Bibliotek",
"LabelLibraryFilterSublistEmpty": "Nej {0}",
"LabelLibraryItem": "Bibliotekselement",
"LabelLibraryName": "Biblioteksnavn",
"LabelLibrarySortByProgress": "Fremgang: Sidst opdateret",
"LabelLibrarySortByProgressFinished": "Fremgang: Afsluttet",
"LabelLibrarySortByProgressStarted": "Fremgang: Startet",
"LabelLimit": "Grænse",
"LabelLineSpacing": "Linjeafstand",
"LabelListenAgain": "Lyt igen",
"LabelLogLevelDebug": "Fejlsøgning",
"LabelLogLevelInfo": "Information",
"LabelLogLevelWarn": "Advarsel",
"LabelLookForNewEpisodesAfterDate": "Søg efter nye episoder efter denne dato",
"LabelLookForNewEpisodesAfterDate": "Søg efter nye afsnit efter denne dato",
"LabelLowestPriority": "Laveste prioritet",
"LabelMatchExistingUsersBy": "Match eksisterende brugere ved",
"LabelMatchExistingUsersByDescription": "Anvendt for at forbinde brugere. Når forbundet, brugere vil blive matchet ved unikt id fra din SSO udbyder",
"LabelMaxEpisodesToDownload": "Max # afsnit for at downloade. Anvend 0 for ubegrænset.",
"LabelMaxEpisodesToDownloadPerCheck": "Max # afsnit til at downloade per check",
"LabelMaxEpisodesToKeep": "Max # afsnit at beholde",
"LabelMatchConfidence": "Nøjagtighed",
"LabelMatchExistingUsersBy": "Forbind eksisterende brugere med",
"LabelMatchExistingUsersByDescription": "Anvendes til at tilslutte eksisterende brugere. Ved tilslutningen kobles brugeren til et unikt ID fra din SSO-udbyder",
"LabelMaxEpisodesToDownload": "Maksimalt antal afsnit som skal hentes. Anvend 0 for ubegrænset.",
"LabelMaxEpisodesToDownloadPerCheck": "Maksimalt antal afsnit som skal hentes per tjek",
"LabelMaxEpisodesToKeep": "Maksimalt antal afsnit som skal beholdes",
"LabelMaxEpisodesToKeepHelp": "Værdi af 0 sætter intet maks begrænsning. After et nyt afsnit er automatisk downloaded vil det ældste afsnit blive slettet hvis du har mere end X afsnit. Dette vil kun slette 1 afsnit for hvert nye download.",
"LabelMediaPlayer": "Medieafspiller",
"LabelMediaType": "Medietype",
@@ -453,20 +463,21 @@
"LabelMinute": "Minut",
"LabelMinutes": "Minutter",
"LabelMissing": "Mangler",
"LabelMissingEbook": "Har ingen ebog",
"LabelMissingSupplementaryEbook": "Har ingen tillægsbog",
"LabelMissingEbook": "Har ingen e-bog",
"LabelMissingSupplementaryEbook": "Har ingen supplerende e-bog",
"LabelMobileRedirectURIs": "Godkendte mobil redirect URI'er",
"LabelMobileRedirectURIsDescription": "Dete vil whiteliste en gyldig omdirigerings URL for mobile apps. Den standarde er <code>audiobookshelf://oauth</code> som du kan fjerne eller supplere med flere URI'er for tredjeparts app integration. Anvend en stjerne (<code>*</code>) som den eneste indstilling for at tilade en hvilkensomhelst URI.",
"LabelMore": "Mere",
"LabelMoreInfo": "Mere info",
"LabelName": "Navn",
"LabelNarrator": "Fortæller",
"LabelNarrators": "Fortællere",
"LabelNarrator": "Oplæser",
"LabelNarrators": "Oplæsere",
"LabelNew": "Ny",
"LabelNewPassword": "Ny adgangskode",
"LabelNewestAuthors": "Nyeste forfattere",
"LabelNewestEpisodes": "Nyeste episoder",
"LabelNextBackupDate": "Næste sikkerhedskopi dato",
"LabelNewestEpisodes": "Nyeste afsnit",
"LabelNextBackupDate": "Dato for næste sikkerhedskopi",
"LabelNextChapters": "Næste kapitler vil være:",
"LabelNextScheduledRun": "Næste planlagte kørsel",
"LabelNoApiKeys": "Ingen API-nøgler",
"LabelNoCustomMetadataProviders": "Ingen brugerdefinerede metadata udbydere",
@@ -484,6 +495,7 @@
"LabelNotificationsMaxQueueSize": "Maksimal køstørrelse for meddelelseshændelser",
"LabelNotificationsMaxQueueSizeHelp": "Hændelser begrænses til at udløse en gang pr. sekund. Hændelser ignoreres, hvis køen er fyldt. Dette forhindrer meddelelsesspam.",
"LabelNumberOfBooks": "Antal bøger",
"LabelNumberOfChapters": "Antal kapitler:",
"LabelNumberOfEpisodes": "# afsnit",
"LabelOpenIDAdvancedPermsClaimDescription": "Navnet af OpenID claimet som indeholder avancerede brugerhandlinger inden i applikationen som vil gælde for ikke administrative roller (<b>hvis konfigureret</b>). Hvis et claim mangler fra svaret vil adgang til ABS blive nægtet. Hvis en enkelt indstilling/option mangler, vil det bliver behandlet som <code>false</code>. Sørg for at identity provider's claim matcher den forventede struktur:",
"LabelOpenIDClaims": "Efterlad de følgende indstillinger tomme for at deaktivere avanceret gruppe og adgangsindstilling, ved automatisk at assigne 'Bruger' grupper.",
@@ -514,28 +526,28 @@
"LabelPodcasts": "Podcast",
"LabelPort": "Port",
"LabelPrefixesToIgnore": "Præfikser der skal ignoreres (skal ikke skelne mellem store og små bogstaver)",
"LabelPreventIndexing": "Forhindrer, at dit feed bliver indekseret af iTunes og Google podcastkataloger",
"LabelPreventIndexing": "Forhindrer at dit feed bliver indekseret af iTunes- og Google-podcastkataloger",
"LabelPrimaryEbook": "Primær e-bog",
"LabelProgress": "Fremskridt",
"LabelProvider": "Udbyder",
"LabelProviderAuthorizationValue": "Authorization Header værdi",
"LabelPubDate": "Udgivelsesdato",
"LabelPublishYear": "Udgivelsesår",
"LabelPublishedDate": "Publiceret {0}",
"LabelPublishedDecade": "Publiceret årti",
"LabelPublishedDecades": "Publiceret årtier",
"LabelPublishedDate": "Udgivet {0}",
"LabelPublishedDecade": "Udgivelsesårti",
"LabelPublishedDecades": "Udgivelsesårtier",
"LabelPublisher": "Forlag",
"LabelPublishers": "Forlag",
"LabelRSSFeedCustomOwnerEmail": "Brugerdefineret ejerens e-mail",
"LabelRSSFeedCustomOwnerName": "Brugerdefineret ejerens navn",
"LabelRSSFeedOpen": "RSS-feed åbent",
"LabelRSSFeedPreventIndexing": "Forhindrer indeksering",
"LabelRSSFeedPreventIndexing": "Forhindr indeksering",
"LabelRSSFeedSlug": "RSS-feed-slug",
"LabelRSSFeedURL": "RSS-feed-URL",
"LabelRandomly": "Tilfældigt",
"LabelReAddSeriesToContinueListening": "Gentilføj serier til Fortsæt Lytning",
"LabelReAddSeriesToContinueListening": "Gentilføj serier til »Fortsæt med at lytte«",
"LabelRead": "Læst",
"LabelReadAgain": "Læs Igen",
"LabelReadAgain": "Læs igen",
"LabelReadEbookWithoutProgress": "Læs e-bog uden at følge fremskridt",
"LabelRecentSeries": "Seneste serier",
"LabelRecentlyAdded": "Senest tilføjet",
@@ -543,9 +555,9 @@
"LabelRedo": "Gøre igen",
"LabelRegion": "Region",
"LabelReleaseDate": "Udgivelsesdato",
"LabelRemoveAllMetadataAbs": "Fjern alle metadata.abs filer",
"LabelRemoveAllMetadataJson": "Fjern alle metadata.json filer",
"LabelRemoveAudibleBranding": "Fjern Audible intro og outro fra kapitler",
"LabelRemoveAllMetadataAbs": "Fjern alle \"metadata.abs\"-filer",
"LabelRemoveAllMetadataJson": "Fjern alle \"metadata.json\"-filer",
"LabelRemoveAudibleBranding": "Fjern Audible-intro og -outro fra kapitler",
"LabelRemoveCover": "Fjern omslag",
"LabelRemoveMetadataFile": "Fjern alle metadata filer i biblioteksmapper",
"LabelRemoveMetadataFileHelp": "Fjern alle metadata.json og metadata.abs filer i dine {0} mapper.",
@@ -559,7 +571,7 @@
"LabelSelectAllEpisodes": "Vælg alle episoder",
"LabelSelectEpisodesShowing": "Vælg {0} episoder vist",
"LabelSelectUser": "Vælg bruger",
"LabelSelectUsers": "Valgte brugere",
"LabelSelectUsers": "Vælg brugere",
"LabelSendEbookToDevice": "Send e-bog til...",
"LabelSequence": "Sekvens",
"LabelSerial": "Seriel",
@@ -570,21 +582,21 @@
"LabelServerYearReview": "Server år i review ({0})",
"LabelSetEbookAsPrimary": "Indstil som primær",
"LabelSetEbookAsSupplementary": "Indstil som supplerende",
"LabelSettingsAllowIframe": "Tillad embedding i en iframe",
"LabelSettingsAllowIframe": "Tillad indlejring i en iframe",
"LabelSettingsAudiobooksOnly": "Kun lydbøger",
"LabelSettingsAudiobooksOnlyHelp": "Aktivering af denne indstilling vil ignorere e-bogsfiler, medmindre de er inde i en lydbogmappe, hvor de vil blive indstillet som supplerende e-bøger",
"LabelSettingsBookshelfViewHelp": "Skeumorfisk design med træhylder",
"LabelSettingsChromecastSupport": "Chromecast-understøttelse",
"LabelSettingsDateFormat": "Datoformat",
"LabelSettingsEnableWatcher": "Scan automatisk bibliotek for ændringer",
"LabelSettingsEnableWatcherForLibrary": "Scan automatisk bibliotek for ændringer",
"LabelSettingsEnableWatcherHelp": "Aktiverer automatisk tilføjelse/opdatering af elementer, når filændringer registreres. *Kræver servergenstart",
"LabelSettingsEnableWatcher": "Automatisk biblioteksovervågning",
"LabelSettingsEnableWatcherForLibrary": "Automatisk biblioteksovervåger",
"LabelSettingsEnableWatcherHelp": "Aktiverer automatisk opdatering af kataloget, når filændringer registreres. *Kræver genstart af serveren",
"LabelSettingsEpubsAllowScriptedContent": "Tillad scriptet indhold i epub",
"LabelSettingsEpubsAllowScriptedContentHelp": "Tillad epub filer at køre scripts. Det anbefales at holde denne indstilling deaktiveret med mindre du stoler på kilderne af epub filerne.",
"LabelSettingsExperimentalFeatures": "Eksperimentelle funktioner",
"LabelSettingsExperimentalFeaturesHelp": "Funktioner under udvikling, der kunne bruge din feedback og hjælp til test. Klik for at åbne Github-diskussionen.",
"LabelSettingsFindCovers": "Find omslag",
"LabelSettingsFindCoversHelp": "Hvis din lydbog ikke har et indlejret omslag eller et omslagsbillede i mappen, vil skanneren forsøge at finde et omslag.<br>Bemærk: Dette vil forlænge scanntiden",
"LabelSettingsFindCoversHelp": "Hvis din lydbog ikke har et indlejret omslag eller et omslagsbillede i mappen, vil skanneren forsøge at finde et omslag.<br>Bemærk: Dette vil forlænge skanningens varighed",
"LabelSettingsHideSingleBookSeries": "Skjul enkeltbogsserier",
"LabelSettingsHideSingleBookSeriesHelp": "Serier med en enkelt bog vil blive skjult fra serie-siden og hjemmesidehylder.",
"LabelSettingsHomePageBookshelfView": "Brug bogreolvisning på startside",
@@ -595,7 +607,7 @@
"LabelSettingsOnlyShowLaterBooksInContinueSeries": "Spring tidligere bøger i Fortsæt serie over",
"LabelSettingsOnlyShowLaterBooksInContinueSeriesHelp": "Fortsæt Serien siden viser den første bog som ikke er startet i serier med mindst en bog som ikke er startet og hvor ingen bøger i gang. Aktivering af denne indstilling vil fortsætte serien fra den sidst gennemførte bog i stedet for fra den første ikke startede bog.",
"LabelSettingsParseSubtitles": "Fortolk undertitler",
"LabelSettingsParseSubtitlesHelp": "Udtræk undertekster fra lydbogsmappenavne.<br>Undertitler skal adskilles af \" - \"<br>f.eks. \"Bogtitel - En undertitel her\" har undertitlen \"En undertitel her\"",
"LabelSettingsParseSubtitlesHelp": "Udtræk undertitler fra lydbogsmappenavne.<br>Undertitler skal adskilles af \" - \"<br>f.eks. \"Bogtitel - En undertitel her\" har undertitlen \"En undertitel her\"",
"LabelSettingsPreferMatchedMetadata": "Foretræk matchede metadata",
"LabelSettingsPreferMatchedMetadataHelp": "Matchede data vil tilsidesætte elementdetaljer ved brug af Hurtig Match. Som standard udfylder Hurtig Match kun manglende detaljer.",
"LabelSettingsSkipMatchingBooksWithASIN": "Ignorer matchende bøger, der allerede har en ASIN",
@@ -626,6 +638,7 @@
"LabelStartTime": "Starttid",
"LabelStarted": "Startet",
"LabelStartedAt": "Startet klokken",
"LabelStartedDate": "Startet {0}",
"LabelStatsAudioTracks": "Lydspor",
"LabelStatsAuthors": "Forfattere",
"LabelStatsBestDay": "Bedste dag",
@@ -634,14 +647,14 @@
"LabelStatsDaysListened": "Dage hørt",
"LabelStatsHours": "Timer",
"LabelStatsInARow": "i træk",
"LabelStatsItemsFinished": "Elementer færdige",
"LabelStatsItemsInLibrary": "Elementer i biblioteket",
"LabelStatsItemsFinished": "færdiglæste bøger",
"LabelStatsItemsInLibrary": "bøger i biblioteket",
"LabelStatsMinutes": "minutter",
"LabelStatsMinutesListening": "Minutter hørt",
"LabelStatsOverallDays": "Samlede dage",
"LabelStatsOverallHours": "Samlede timer",
"LabelStatsWeekListening": "Ugens lytning",
"LabelSubtitle": "Undertekst",
"LabelSubtitle": "Undertitel",
"LabelSupportedFileTypes": "Understøttede filtyper",
"LabelTag": "Mærke",
"LabelTags": "Mærker",
@@ -650,11 +663,12 @@
"LabelTasks": "Kører opgaver",
"LabelTextEditorBulletedList": "Punktopstilling",
"LabelTextEditorLink": "Link",
"LabelTextEditorNumberedList": "Nummeropstilling",
"LabelTextEditorNumberedList": "Nummereret liste",
"LabelTextEditorUnlink": "Aflink",
"LabelTheme": "Tema",
"LabelThemeDark": "Mørk",
"LabelThemeLight": "Lys",
"LabelThemeSepia": "Sepia",
"LabelTimeBase": "Tidsbase",
"LabelTimeDurationXHours": "{0} timer",
"LabelTimeDurationXMinutes": "{0} minutter",
@@ -721,17 +735,17 @@
"LabelYourPlaylists": "Dine spillelister",
"LabelYourProgress": "Din fremgang",
"MessageAddToPlayerQueue": "Tilføj til afspilningskø",
"MessageAppriseDescription": "For at bruge denne funktion skal du have en instans af <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> kørende eller en API, der håndterer de samme anmodninger. <br /> Apprise API-webadressen skal være den fulde URL-sti for at sende underretningen, f.eks. hvis din API-instans er tilgængelig på <code>http://192.168.1.1:8337</code>, så skal du bruge <code>http://192.168.1.1:8337/notify</code>.",
"MessageAppriseDescription": "For at bruge denne funktion skal du have en instans af <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> kørende eller en API, der kan håndtere de samme anmodninger. <br />Apprise API-webadressen skal være den fulde URL-sti for at sende underretningen, f.eks. hvis din API-instans er tilgængelig på <code>http://192.168.1.1:8337</code>, så skal du bruge <code>http://192.168.1.1:8337/notify</code>.",
"MessageAsinCheck": "Sikr dig at du bruger ASIN fra den korrekte Audible region, ikke Amazon.",
"MessageAuthenticationLegacyTokenWarning": "Ældre API tokens vil blive fjernet i fremtiden. Brug <a href=\"/config/api-keys\">API-nøgler</a> i stedet.",
"MessageAuthenticationOIDCChangesRestart": "Genstart sin server efter du har gemt for at bekræfte OIDC ændringer.",
"MessageAuthenticationSecurityMessage": "Autentificeringen er blevet forbedret af sikkerhedsmæssige årsager. Alle brugere skal logge ind igen.",
"MessageAuthenticationSecurityMessage": "Brugerlogin er blevet forbedret af sikkerhedsmæssige årsager. Alle brugere skal logge ind igen.",
"MessageBackupsDescription": "Backups inkluderer brugere, brugerfremskridt, biblioteksvareoplysninger, serverindstillinger og billeder gemt i <code>/metadata/items</code> og <code>/metadata/authors</code>. Backups inkluderer <strong>ikke</strong> nogen filer gemt i dine biblioteksmapper.",
"MessageBackupsLocationEditNote": "Note: Opdatering af backup sti vil ikke fjerne eller modificere eksisterende backups",
"MessageBackupsLocationNoEditNote": "Note: Backup sti er sat igennem miljøvariabel og kan ikke ændres her.",
"MessageBackupsLocationPathEmpty": "Backup sti kan ikke være tom",
"MessageBatchEditPopulateMapDetailsAllHelp": "Opret felter slået til med data fra alle genstande. Felter med flere værdier vil blive sammenflettet",
"MessageBatchEditPopulateMapDetailsItemHelp": "Opret kort med værdier der er slået til fra felter med data fra denne genstand",
"MessageBatchEditPopulateMapDetailsAllHelp": "Udfyld valgte felter med data fra alle bøger. Felter med flere værdier vil blive sammenflettet",
"MessageBatchEditPopulateMapDetailsItemHelp": "Udfyld de felter, som er tilvalgt i masseredigering med data fra denne bog",
"MessageBatchQuickMatchDescription": "Quick Match vil forsøge at tilføje manglende omslag og metadata til de valgte elementer. Aktivér indstillingerne nedenfor for at tillade Quick Match at overskrive eksisterende omslag og/eller metadata.",
"MessageBookshelfNoCollections": "Du har ikke oprettet nogen samlinger endnu",
"MessageBookshelfNoCollectionsHelp": "Samlinger er offentlige. Alle brugere med adgang til biblioteket kan se dem.",
@@ -739,6 +753,7 @@
"MessageBookshelfNoResultsForFilter": "Ingen resultater for filter \"{0}: {1}\"",
"MessageBookshelfNoResultsForQuery": "Intet resultat for query",
"MessageBookshelfNoSeries": "Du har ingen serier",
"MessageBulkChapterPattern": "Hvor mange kapitler vil du tilføje med dette nummereringsmønster?",
"MessageChapterEndIsAfter": "Kapitelslutningen er efter slutningen af din lydbog",
"MessageChapterErrorFirstNotZero": "Første kapitel skal starte ved 0",
"MessageChapterErrorStartGteDuration": "Ugyldig starttid skal være mindre end lydbogens varighed",
@@ -775,6 +790,7 @@
"MessageConfirmRemoveAuthor": "Er du sikker på, at du vil fjerne forfatteren \"{0}\"?",
"MessageConfirmRemoveCollection": "Er du sikker på, at du vil fjerne samlingen \"{0}\"?",
"MessageConfirmRemoveEpisode": "Er du sikker på, at du vil fjerne episoden \"{0}\"?",
"MessageConfirmRemoveEpisodeNote": "Obs: Dette sletter ikke lydfilen medmindre \"Permanent sletning af fil\" er aktiveret",
"MessageConfirmRemoveEpisodes": "Er du sikker på, at du vil fjerne {0} episoder?",
"MessageConfirmRemoveListeningSessions": "Er du sikker på at du vil fjerne {0} lytte sessioner?",
"MessageConfirmRemoveMetadataFiles": "Er du sikker på at du vil fjerne alle metadata.{0} filer i dine biblioteksfoldere?",
@@ -800,6 +816,8 @@
"MessageFeedURLWillBe": "Feed-URL vil være {0}",
"MessageFetching": "Henter...",
"MessageForceReScanDescription": "vil scanne alle filer igen som en frisk scanning. Lydfilens ID3-tags, OPF-filer og tekstfiler scannes som nye.",
"MessageHeatmapListeningTimeTooltip": "<strong>{0} lytter</strong> på {1}",
"MessageHeatmapNoListeningSessions": "Ingen lyttesessioner på {0}",
"MessageImportantNotice": "Vigtig besked!",
"MessageInsertChapterBelow": "Indsæt kapitel nedenfor",
"MessageInvalidAsin": "Ugyldig ASIN",
@@ -870,7 +888,7 @@
"MessageResetChaptersConfirm": "Er du sikker på, at du vil nulstille kapitler og annullere ændringerne, du har foretaget?",
"MessageRestoreBackupConfirm": "Er du sikker på, at du vil gendanne sikkerhedskopien oprettet den",
"MessageRestoreBackupWarning": "Gendannelse af en sikkerhedskopi vil overskrive hele databasen, som er placeret på /config, og omslagsbilleder i /metadata/items & /metadata/authors.<br /><br />Sikkerhedskopier ændrer ikke nogen filer i dine biblioteksmapper. Hvis du har aktiveret serverindstillinger for at gemme omslagskunst og metadata i dine biblioteksmapper, sikkerhedskopieres eller overskrives disse ikke.<br /><br />Alle klienter, der bruger din server, opdateres automatisk.",
"MessageScheduleLibraryScanNote": "For de fleste brugere, er det anbefalet at efterlade denne funktion deaktiveret for at holde mappe lurer indstilling aktiveret. Mappe lureren vil automatisk opdage ændringer i biblioteksmapper. Mappe lureren virker ikke for alle filsystemer (så som NFS) så schedulerede biblioteksscans vil blive anvendt.",
"MessageScheduleLibraryScanNote": "For de fleste brugere er det anbefalet, at lade denne funktion være deaktiveret, og lade biblioteksovervågning være aktiveret - den vil automatisk opdage ændringer i dine biblioteksmapper. Aktiver denne funktion, hvis biblioteksovervågning ikke virker med dit filsystem (f. eks. NFS).",
"MessageScheduleRunEveryWeekdayAtTime": "Kør hvert {0} af {1}",
"MessageSearchResultsFor": "Søgeresultater for",
"MessageSelected": "{0} valgt",
@@ -897,7 +915,7 @@
"MessageTaskFailedToWriteMetadataFile": "Fejlede i at skrive metadata fil",
"MessageTaskMatchingBooksInLibrary": "Matchede bøger i bibliotek \"{0}\"",
"MessageTaskNoFilesToScan": "Ingen filer at scanne",
"MessageTaskOpmlImport": "OPML import",
"MessageTaskOpmlImport": "OPML-import",
"MessageTaskOpmlImportDescription": "Oprettelse af podcasts fra {0} RSS feeds",
"MessageTaskOpmlImportFeed": "OPML importering fejlede",
"MessageTaskOpmlImportFeedDescription": "Importering af RSS feed \"{0}\"",
@@ -921,13 +939,13 @@
"MessageUploaderItemSuccess": "Uploadet med succes!",
"MessageUploading": "Uploader...",
"MessageValidCronExpression": "Gyldigt cron-udtryk",
"MessageWatcherIsDisabledGlobally": "Watcher er deaktiveret globalt i serverindstillinger",
"MessageWatcherIsDisabledGlobally": "Automatisk biblioteksovervågning er deaktiveret globalt i serverens indstillinger",
"MessageXLibraryIsEmpty": "{0} bibliotek er tomt!",
"MessageYourAudiobookDurationIsLonger": "Din lydbogsvarighed er længere end den fundne varighed",
"MessageYourAudiobookDurationIsShorter": "Din lydbogsvarighed er kortere end den fundne varighed",
"NoteChangeRootPassword": "Root-brugeren er den eneste bruger, der kan have en tom adgangskode",
"NoteChapterEditorTimes": "Bemærk: Første kapitel starttidspunkt skal forblive kl. 0:00, og det sidste kapitel starttidspunkt må ikke overstige denne lydbogs varighed.",
"NoteFolderPicker": "Bemærk: Mapper, der allerede er mappet, vises ikke",
"NoteFolderPicker": "Bemærk: Allerede kortlagte mapper vises ikke",
"NoteRSSFeedPodcastAppsHttps": "Advarsel: De fleste podcast-apps kræver, at RSS-feedets URL bruger HTTPS",
"NoteRSSFeedPodcastAppsPubDate": "Advarsel: En eller flere af dine episoder har ikke en Pub Date. Nogle podcast-apps kræver dette.",
"NoteUploaderFoldersWithMediaFiles": "Mapper med mediefiler håndteres som separate bibliotekselementer.",
@@ -939,6 +957,7 @@
"NotificationOnRSSFeedDisabledDescription": "Aktiveret når automatiske episode-downloads er slået fra, på grund af for mange forsøg",
"NotificationOnRSSFeedFailedDescription": "Aktiveret når anmodning om RSS-feedet fejler for en automatisk episode-download",
"NotificationOnTestDescription": "Event for test af notifikationssystemet",
"PlaceholderBulkChapterInput": "Indtast kapiteltitel eller brug nummerering (f.eks. 'Episode 1', 'Kapitel 10', '1.')",
"PlaceholderNewCollection": "Nyt samlingnavn",
"PlaceholderNewFolderPath": "Ny mappes sti",
"PlaceholderNewPlaylist": "Nyt afspilningslistnavn",
@@ -992,22 +1011,30 @@
"ToastBookmarkCreateFailed": "Mislykkedes oprettelse af bogmærke",
"ToastBookmarkCreateSuccess": "Bogmærke tilføjet",
"ToastBookmarkRemoveSuccess": "Bogmærke fjernet",
"ToastBulkChapterInvalidCount": "Indtast et tal mellem 1 og 150",
"ToastCachePurgeFailed": "Fejlede at opryde cache",
"ToastCachePurgeSuccess": "Cache ryddet op i succesfuldt",
"ToastChapterLocked": "Kapitel er låst.",
"ToastChapterStartTimeAdjusted": "Kapitelstarttid justeret med {0} sekunder",
"ToastChaptersAllLocked": "Alle kapitler er låst. Lås op for nogle kapitler for at ændre deres tider.",
"ToastChaptersHaveErrors": "Kapitler har fejl",
"ToastChaptersInvalidShiftAmountLast": "Forskydningen er ikke mulig. Det sidste kapitels starttidspunkt ville strække sig ud over denne lydbogs varighed.",
"ToastChaptersInvalidShiftAmountStart": "Forskydningen er ikke mulig. Det første kapitel ville have en længde på nul eller negativ længde og ville blive overskrevet af det andet kapitel. Øg startvarigheden af det andet kapitel.",
"ToastChaptersMustHaveTitles": "Kapitler skal have titler",
"ToastChaptersRemoved": "Kapitler fjernet",
"ToastChaptersUpdated": "Kapitler opdateret",
"ToastCollectionItemsAddFailed": "Genstand(e) tilføjet til kollektion fejlet",
"ToastCollectionRemoveSuccess": "Samling fjernet",
"ToastCollectionUpdateSuccess": "Samling opdateret",
"ToastConnectionNotAvailable": "Forbindelse mislykkedes. Prøv igen senere",
"ToastCoverSearchFailed": "Cover-søgning mislykkedes",
"ToastCoverUpdateFailed": "Cover opdatering fejlede",
"ToastDateTimeInvalidOrIncomplete": "Dato og tid er forkert eller ufærdig",
"ToastDeleteFileFailed": "Slet fil fejlede",
"ToastDateTimeInvalidOrIncomplete": "Dato og tid er ugyldig eller ufærdig",
"ToastDeleteFileFailed": "Sletning af fil fejlede",
"ToastDeleteFileSuccess": "Fil slettet",
"ToastDeviceAddFailed": "Fejlede at tilføje enhed",
"ToastDeviceNameAlreadyExists": "Elæser enhed med det navn eksistere allerede",
"ToastDeviceTestEmailFailed": "Fejlede at sende test mail",
"ToastDeviceAddFailed": "Tilføjelse af enhed Fejlede",
"ToastDeviceNameAlreadyExists": "E-læser enhed med det navn eksistere allerede",
"ToastDeviceTestEmailFailed": "Afsendelse af test mail fejlede",
"ToastDeviceTestEmailSuccess": "Test mail sendt",
"ToastEmailSettingsUpdateSuccess": "Mail indstillinger opdateret",
"ToastEncodeCancelFailed": "Fejlede at afbryde indkodning",
@@ -1017,21 +1044,23 @@
"ToastEpisodeUpdateSuccess": "{0} afsnit opdateret",
"ToastErrorCannotShare": "Kan ikke dele på denne enhed",
"ToastFailedToCreate": "Oprettelsen mislykkedes",
"ToastFailedToLoadData": "Fejlede at indlæse data",
"ToastFailedToDelete": "Kunne ikke slette",
"ToastFailedToLoadData": "Indlæsning af data fejlede",
"ToastFailedToMatch": "Fejlet match",
"ToastFailedToShare": "Fejlet deling",
"ToastFailedToShare": "Deling fejlede",
"ToastFailedToUpdate": "Fejlet opdatering",
"ToastInvalidImageUrl": "Forkert billede URL",
"ToastInvalidMaxEpisodesToDownload": "Forkert maks afsnit at hente",
"ToastInvalidUrl": "Forkert URL",
"ToastItemCoverUpdateSuccess": "Varens omslag opdateret",
"ToastItemDeletedFailed": "Fejlede at slette genstand",
"ToastInvalidImageUrl": "Ugyldig billede URL",
"ToastInvalidMaxEpisodesToDownload": "Ugyldigt maks afsnit at hente",
"ToastInvalidUrl": "Ugyldig URL",
"ToastInvalidUrls": "En eller flere URLer er ugyldige",
"ToastItemCoverUpdateSuccess": "Omslag opdateret",
"ToastItemDeletedFailed": "Sletning af genstand fejlede",
"ToastItemDeletedSuccess": "Genstand slettet",
"ToastItemDetailsUpdateSuccess": "Varedetaljer opdateret",
"ToastItemMarkedAsFinishedFailed": "Mislykkedes markering som afsluttet",
"ToastItemMarkedAsFinishedSuccess": "Vare markeret som afsluttet",
"ToastItemMarkedAsNotFinishedFailed": "Mislykkedes markering som ikke afsluttet",
"ToastItemMarkedAsNotFinishedSuccess": "Vare markeret som ikke afsluttet",
"ToastItemDetailsUpdateSuccess": "Detaljer opdateret",
"ToastItemMarkedAsFinishedFailed": "Markering som afsluttet mislykkedes",
"ToastItemMarkedAsFinishedSuccess": "Element markeret som afsluttet",
"ToastItemMarkedAsNotFinishedFailed": "Markering som ikke afsluttet mislykkedes",
"ToastItemMarkedAsNotFinishedSuccess": "Element markeret som ikke afsluttet",
"ToastItemUpdateSuccess": "Genstand opdateret",
"ToastLibraryCreateFailed": "Oprettelse af bibliotek mislykkedes",
"ToastLibraryCreateSuccess": "Bibliotek \"{0}\" oprettet",
@@ -1048,6 +1077,7 @@
"ToastMustHaveAtLeastOnePath": "Skal have mindst en sti",
"ToastNameEmailRequired": "Navn og email påkrævet",
"ToastNameRequired": "Navn påkrævet",
"ToastNewApiKeyUserError": "En bruger skal vælges",
"ToastNewEpisodesFound": "{0} nye afsnit fundet",
"ToastNewUserCreatedFailed": "Fejlede at oprette konto: \"{0}\"",
"ToastNewUserCreatedSuccess": "Ny konto oprettet",
@@ -1072,13 +1102,14 @@
"ToastPlaylistUpdateSuccess": "Afspilningsliste opdateret",
"ToastPodcastCreateFailed": "Mislykkedes oprettelse af podcast",
"ToastPodcastCreateSuccess": "Podcast oprettet med succes",
"ToastPodcastEpisodeUpdated": "Episode opdateret",
"ToastPodcastGetFeedFailed": "Fejlede at hente podcast feed",
"ToastPodcastNoEpisodesInFeed": "Ingen nye afsnit fundet i RSS feed",
"ToastPodcastNoRssFeed": "Podcast har ingen RSS feed",
"ToastProgressIsNotBeingSynced": "Fremskridt ikke synkroniseret, genstart afspilning",
"ToastProviderCreatedFailed": "Fejlede at tilføje udbyder",
"ToastProviderCreatedSuccess": "Ny udbyder tilføjet",
"ToastProviderNameAndUrlRequired": "Navn og URL påkrævet",
"ToastProviderNameAndUrlRequired": "Navn og URL kræves",
"ToastProviderRemoveSuccess": "Udbyder fjernet",
"ToastRSSFeedCloseFailed": "Mislykkedes lukning af RSS-feed",
"ToastRSSFeedCloseSuccess": "RSS-feed lukket",
@@ -1122,5 +1153,13 @@
"ToastUserPasswordChangeSuccess": "Password ændret",
"ToastUserPasswordMismatch": "Passwords passer ikke sammen",
"ToastUserPasswordMustChange": "Nyt password må ikke være det gamle",
"ToastUserRootRequireName": "Skal indholde et root brugernavn"
"ToastUserRootRequireName": "Skal indholde et root brugernavn",
"TooltipAddChapters": "Tilføj kapitler",
"TooltipAddOneSecond": "Tilføj 1 sekund",
"TooltipAdjustChapterStart": "Klik for at ændre starttiden",
"TooltipLockAllChapters": "Lås alle kapitler",
"TooltipLockChapter": "Lås kapitel (Shift+click for at markere flere)",
"TooltipSubtractOneSecond": "Fratag 1 sekund",
"TooltipUnlockAllChapters": "Lås alle kapitaler op",
"TooltipUnlockChapter": "Lås kapitel op (Shift+click for at markere flere)"
}
+57 -21
View File
@@ -13,7 +13,7 @@
"ButtonBack": "Zurück",
"ButtonBatchEditPopulateFromExisting": "Auffüllen aus vorhandenem",
"ButtonBatchEditPopulateMapDetails": "Kartendetails auffüllen",
"ButtonBrowseForFolder": "Ordnersuche",
"ButtonBrowseForFolder": "Ordner auswählen",
"ButtonCancel": "Abbrechen",
"ButtonCancelEncode": "Konvertierung abbrechen",
"ButtonChangeRootPassword": "Hauptpasswort ändern",
@@ -46,6 +46,7 @@
"ButtonLatest": "Neueste",
"ButtonLibrary": "Bibliothek",
"ButtonLogout": "Abmelden",
"ButtonLogoutAllDevices": "Von allen Geräte abmelden",
"ButtonLookup": "Online-Suche",
"ButtonManageTracks": "Tracks verwalten",
"ButtonMapChapterTitles": "Kapitelüberschriften zuordnen",
@@ -55,7 +56,7 @@
"ButtonNext": "Vor",
"ButtonNextChapter": "Nächstes Kapitel",
"ButtonNextItemInQueue": "Das nächste Element in der Warteschlange",
"ButtonOk": "Ok",
"ButtonOk": "OK",
"ButtonOpenFeed": "Feed öffnen",
"ButtonOpenManager": "Manager öffnen",
"ButtonPause": "Pausieren",
@@ -75,7 +76,7 @@
"ButtonQuickMatch": "Schnellabgleich",
"ButtonReScan": "Neu scannen",
"ButtonRead": "Lesen",
"ButtonReadLess": "weniger Anzeigen",
"ButtonReadLess": "Weniger Anzeigen",
"ButtonReadMore": "Mehr Anzeigen",
"ButtonRefresh": "Neu Laden",
"ButtonRemove": "Entfernen",
@@ -104,7 +105,7 @@
"ButtonStartM4BEncode": "M4B-Kodierung starten",
"ButtonStartMetadataEmbed": "Metadateneinbettung starten",
"ButtonStats": "Statistiken",
"ButtonSubmit": "Ok",
"ButtonSubmit": "Absenden",
"ButtonTest": "Test",
"ButtonUnlinkOpenId": "OpenID trennen",
"ButtonUpload": "Hochladen",
@@ -116,7 +117,7 @@
"ButtonViewAll": "Alles anzeigen",
"ButtonYes": "Ja",
"ErrorUploadFetchMetadataAPI": "Fehler beim Abrufen der Metadaten",
"ErrorUploadFetchMetadataNoResults": "Metadaten konnten nicht abgerufen werden. Versuche den Titel und oder den Autor zu aktualisieren",
"ErrorUploadFetchMetadataNoResults": "Metadaten konnten nicht abgerufen werden - versuche den Titel und/oder den Autor zu aktualisieren",
"ErrorUploadLacksTitle": "Es muss ein Titel eingegeben werden",
"HeaderAccount": "Konto",
"HeaderAddCustomMetadataProvider": "Benutzerdefinierten Metadatenanbieter hinzufügen",
@@ -127,6 +128,7 @@
"HeaderAudiobookTools": "Hörbuch-Dateiverwaltungswerkzeuge",
"HeaderAuthentication": "Authentifizierung",
"HeaderBackups": "Sicherungen",
"HeaderBulkChapterModal": "Mehrere Kapitel hinzufügen",
"HeaderChangePassword": "Passwort ändern",
"HeaderChapters": "Kapitel",
"HeaderChooseAFolder": "Wähle einen Ordner",
@@ -137,13 +139,13 @@
"HeaderCustomMessageOnLogin": "Benutzerdefinierte Nachricht für die Anmeldung",
"HeaderCustomMetadataProviders": "Benutzerdefinierte Metadatenanbieter",
"HeaderDetails": "Details",
"HeaderDownloadQueue": "Download Warteschlange",
"HeaderEbookFiles": "E-Buch-Dateien",
"HeaderDownloadQueue": "Download-Warteschlange",
"HeaderEbookFiles": "Buch-Dateien",
"HeaderEmail": "E-Mail",
"HeaderEmailSettings": "E-Mail-Einstellungen",
"HeaderEpisodes": "Episoden",
"HeaderEreaderDevices": "E-Reader Geräte",
"HeaderEreaderSettings": "Einstellungen zum Lesen",
"HeaderEreaderSettings": "E-Reader Einstellungen",
"HeaderFiles": "Dateien",
"HeaderFindChapters": "Kapitel suchen",
"HeaderIgnoredFiles": "Ignorierte Dateien",
@@ -193,12 +195,14 @@
"HeaderScheduleEpisodeDownloads": "Automatische Episoden-Downloads planen",
"HeaderScheduleLibraryScans": "Automatische Bibliotheksscans",
"HeaderSession": "Sitzung",
"HeaderSessions": "Sitzungen",
"HeaderSetBackupSchedule": "Zeitplan für die Datensicherung festlegen",
"HeaderSettings": "Einstellungen",
"HeaderSettingsDisplay": "Anzeige",
"HeaderSettingsExperimental": "Experimentelle Funktionen",
"HeaderSettingsGeneral": "Allgemein",
"HeaderSettingsScanner": "Scanner",
"HeaderSettingsSecurity": "Sicherheit",
"HeaderSettingsWebClient": "Web-Client",
"HeaderSleepTimer": "Sleep-Timer",
"HeaderStatsLargestItems": "Größte Medien",
@@ -293,6 +297,7 @@
"LabelContinueListening": "Weiterhören",
"LabelContinueReading": "Weiterlesen",
"LabelContinueSeries": "Serien fortsetzen",
"LabelCorsAllowed": "Erlaubte CORS Quellen",
"LabelCover": "Titelbild",
"LabelCoverImageURL": "URL des Titelbildes",
"LabelCoverProvider": "Titelbildanbieter",
@@ -306,6 +311,7 @@
"LabelDeleteFromFileSystemCheckbox": "Löschen von der Festplatte + Datenbank (deaktivieren um nur aus der Datenbank zu entfernen)",
"LabelDescription": "Beschreibung",
"LabelDeselectAll": "Alles abwählen",
"LabelDetectedPattern": "Erkanntes Muster:",
"LabelDevice": "Gerät",
"LabelDeviceInfo": "Geräteinformationen",
"LabelDeviceIsAvailableTo": "Dem Gerät ist es möglich zu ...",
@@ -327,7 +333,7 @@
"LabelEmail": "E-Mail",
"LabelEmailSettingsFromAddress": "Sender",
"LabelEmailSettingsRejectUnauthorized": "Nicht autorisierte Zertifikate ablehnen",
"LabelEmailSettingsRejectUnauthorizedHelp": "Durch das Deaktivieren der SSL-Zertifikatsüberprüfung kann deine Verbindung Sicherheitsrisiken wie Man-in-the-Middle-Angriffen ausgesetzt sein. Deaktiviere diese Option nur, wenn due die Auswirkungen verstehst und dem E-Mail-Server vertraust, mit dem eine Verbindung hergestellt wird.",
"LabelEmailSettingsRejectUnauthorizedHelp": "Durch das Deaktivieren der SSL-Zertifikatsüberprüfung kann deine Verbindung Sicherheitsrisiken wie Man-in-the-Middle-Angriffen ausgesetzt sein. Deaktiviere diese Option nur, wenn du die Auswirkungen verstehst und dem E-Mail-Server vertraust, mit dem eine Verbindung hergestellt wird.",
"LabelEmailSettingsSecure": "Sicher",
"LabelEmailSettingsSecureHelp": "Wenn an, verwendet die Verbindung TLS, wenn du eine Verbindung zum Server herstellst. Bei „aus“ wird TLS verwendet, wenn der Server die STARTTLS-Erweiterung unterstützt. In den meisten Fällen solltest du diesen Wert auf „an“ schalten, wenn du eine Verbindung zu Port 465 herstellst. Für Port 587 oder 25 behalte den Wert „aus“ bei. (von nodemailer.com/smtp/#authentication)",
"LabelEmailSettingsTestAddress": "Test-Adresse",
@@ -374,6 +380,7 @@
"LabelFilterByUser": "Nach Benutzern filtern",
"LabelFindEpisodes": "Episoden suchen",
"LabelFinished": "Beendet",
"LabelFinishedDate": "Beendet {0}",
"LabelFolder": "Ordner",
"LabelFolders": "Verzeichnisse",
"LabelFontBold": "Fett",
@@ -410,6 +417,7 @@
"LabelIntervalEveryHour": "Jede Stunde",
"LabelIntervalEveryMinute": "Jede Minute",
"LabelInvert": "Umkehren",
"LabelIpAddress": "IP-Adresse",
"LabelItem": "Medium",
"LabelJumpBackwardAmount": "Zurückspringen Zeit",
"LabelJumpForwardAmount": "Vorwärtsspringen Zeit",
@@ -418,6 +426,7 @@
"LabelLanguages": "Sprachen",
"LabelLastBookAdded": "Zuletzt hinzugefügtes Buch",
"LabelLastBookUpdated": "Zuletzt aktualisiertes Buch",
"LabelLastProgressDate": "Letzter Fortschritt: {0}",
"LabelLastSeen": "Zuletzt gesehen",
"LabelLastTime": "Letztes Mal",
"LabelLastUpdate": "Letzte Aktualisierung",
@@ -430,6 +439,9 @@
"LabelLibraryFilterSublistEmpty": "Keine {0}",
"LabelLibraryItem": "Bibliothekseintrag",
"LabelLibraryName": "Bibliotheksname",
"LabelLibrarySortByProgress": "Fortschritt: Letzte Aktualisierung",
"LabelLibrarySortByProgressFinished": "Fortschritt: Beendet",
"LabelLibrarySortByProgressStarted": "Fortschritt: Gestartet",
"LabelLimit": "Begrenzung",
"LabelLineSpacing": "Zeilenabstand",
"LabelListenAgain": "Erneut anhören",
@@ -468,6 +480,7 @@
"LabelNewestAuthors": "Neueste Autoren",
"LabelNewestEpisodes": "Neueste Episoden",
"LabelNextBackupDate": "Nächstes Sicherungsdatum",
"LabelNextChapters": "Das nächste Kapitel ist:",
"LabelNextScheduledRun": "Nächster planmäßiger Durchlauf",
"LabelNoApiKeys": "Keine API-Schlüssel vorhanden",
"LabelNoCustomMetadataProviders": "Keine benutzerdefinierten Metadata Anbieter",
@@ -485,6 +498,7 @@
"LabelNotificationsMaxQueueSize": "Maximale Größe der Warteschlange für die Benachrichtigungsereignisse",
"LabelNotificationsMaxQueueSizeHelp": "Es wird nur 1 Ereignis pro Sekunde ausgelöst. Ereignisse werden ignoriert, wenn die Warteschlange die maximale Größe erreicht hat. Dies verhindert Benachrichtigungsspamming.",
"LabelNumberOfBooks": "Anzahl der Hörbücher",
"LabelNumberOfChapters": "Anzahl an Kapiteln:",
"LabelNumberOfEpisodes": "Anzahl der Episoden",
"LabelOpenIDAdvancedPermsClaimDescription": "Name des OpenID-Claims, der erweiterte Berechtigungen für Benutzeraktionen innerhalb der Anwendung enthält, die auf Nicht-Admin-Rollen angewendet werden (<b>wenn konfiguriert</b>). Wenn der Claim in der Antwort fehlt, wird der Zugang zu ABS verweigert. Fehlt eine einzelne Option, wird sie als <code>false</code> behandelt. Stelle sicher, dass der Claim des Identitätsanbieters der erwarteten Struktur entspricht:",
"LabelOpenIDClaims": "Lass die folgenden Optionen leer, um die erweiterte Zuweisung von Gruppen und Berechtigungen zu deaktivieren und automatisch die 'User'-Gruppe zuzuweisen.",
@@ -529,7 +543,7 @@
"LabelPublishers": "Herausgeber",
"LabelRSSFeedCustomOwnerEmail": "Benutzerdefinierte Eigentümer-E-Mail",
"LabelRSSFeedCustomOwnerName": "Benutzerdefinierter Name des Eigentümers",
"LabelRSSFeedOpen": "RSS Feed offen",
"LabelRSSFeedOpen": "RSS-Feed offen",
"LabelRSSFeedPreventIndexing": "Indizierung verhindern",
"LabelRSSFeedSlug": "RSS-Feed-Schlagwort",
"LabelRSSFeedURL": "RSS-Feed-URL",
@@ -577,8 +591,8 @@
"LabelSettingsBookshelfViewHelp": "Skeumorphes Design mit Holzeinlegeböden",
"LabelSettingsChromecastSupport": "Chromecastunterstützung",
"LabelSettingsDateFormat": "Datumsformat",
"LabelSettingsEnableWatcher": "Bibliotheken automatisch nach Änderungen durchsuchen",
"LabelSettingsEnableWatcherForLibrary": "Bibliothek automatisch nach Änderungen durchsuchen",
"LabelSettingsEnableWatcher": "Bibliotheken automatisch nach Änderungen überwachen",
"LabelSettingsEnableWatcherForLibrary": "Bibliothek automatisch auf Änderungen überwachen",
"LabelSettingsEnableWatcherHelp": "Aktiviert das automatische Hinzufügen/Aktualisieren von Elementen, wenn Dateiänderungen erkannt werden. *Erfordert einen Server-Neustart",
"LabelSettingsEpubsAllowScriptedContent": "Skriptinhalte in Epubs zulassen",
"LabelSettingsEpubsAllowScriptedContentHelp": "Erlaube Epub-Dateien, Skripte auszuführen. Es wird empfohlen, diese Einstellung deaktiviert zu lassen, es sei denn, du vertraust der Quelle der Epub-Dateien.",
@@ -611,7 +625,7 @@
"LabelSettingsStoreMetadataWithItemHelp": "Standardmäßig werden die Metadaten in /metadata/items gespeichert. Wenn diese Option aktiviert ist, werden die Metadaten als OPF-Datei (Textdatei) in dem gleichen Ordner gespeichert in welchem sich auch das Medium befindet",
"LabelSettingsTimeFormat": "Zeitformat",
"LabelShare": "Freigeben",
"LabelShareDownloadableHelp": "Erlaubt es einem Nutzer, mit dem Link, die Dateien des Mediums als ZIP herunterzuladen.",
"LabelShareDownloadableHelp": "Erlaubt es einem Nutzer, mit dem Link die Dateien des Mediums als ZIP herunterzuladen.",
"LabelShareOpen": "Freigeben",
"LabelShareURL": "Freigabe URL",
"LabelShowAll": "Alles anzeigen",
@@ -627,6 +641,7 @@
"LabelStartTime": "Startzeit",
"LabelStarted": "Gestartet",
"LabelStartedAt": "Gestartet am",
"LabelStartedDate": "Angefangen am {0}",
"LabelStatsAudioTracks": "Audiodateien",
"LabelStatsAuthors": "Autoren",
"LabelStatsBestDay": "Bester Tag",
@@ -698,7 +713,7 @@
"LabelUploaderDragAndDropFilesOnly": "Dateien per Drag & Drop hierher ziehen",
"LabelUploaderDropFiles": "Dateien löschen",
"LabelUploaderItemFetchMetadataHelp": "Automatisches Aktualisieren von Titel, Autor und Serie",
"LabelUseAdvancedOptions": "Nutze Erweiterte Optionen",
"LabelUseAdvancedOptions": "Erweiterte Optionen verwenden",
"LabelUseChapterTrack": "Kapiteldatei verwenden",
"LabelUseFullTrack": "Gesamte Datei verwenden",
"LabelUseZeroForUnlimited": "0 für unbegrenzt",
@@ -724,8 +739,8 @@
"LabelYourProgress": "Fortschritt",
"MessageAddToPlayerQueue": "Zur Abspielwarteliste hinzufügen",
"MessageAppriseDescription": "Um diese Funktion nutzen zu können, musst du eine Instanz von <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> laufen haben oder eine API verwenden welche dieselbe Anfragen bearbeiten kann. <br />Die Apprise API Url muss der vollständige URL-Pfad sein, an den die Benachrichtigung gesendet werden soll, z.B. wenn Ihre API-Instanz unter <code>http://192.168.1.1:8337</code> läuft, würdest du <code>http://192.168.1.1:8337/notify</code> eingeben.",
"MessageAsinCheck": "Stellen Sie sicher, dass Sie die ASIN aus der richtigen Audible Region verwenden, nicht Amazon.",
"MessageAuthenticationLegacyTokenWarning": "Alte API tokens werden in Zukunft entfernt. Benutze stattdessen <a href=\"/config/api-keys\">API Keys</a>.",
"MessageAsinCheck": "Stelle sicher, dass die ASIN aus der richtigen Audible Region verwendet wird, nicht Amazon.",
"MessageAuthenticationLegacyTokenWarning": "Nicht mehr unterstützte API tokens werden in der Zukunft entfernt. Nutze stattdessen <a href=\"/config/api-keys\">API Schlüssel</a>.",
"MessageAuthenticationOIDCChangesRestart": "Nach dem Speichern muss der Server neugestartet werden um die OIDC Änderungen zu übernehmen.",
"MessageAuthenticationSecurityMessage": "Die Anmeldung wurde abgesichert. Benutzersitzungen werden getrennt, alle Benutzer müssen sich erneut anmelden.",
"MessageBackupsDescription": "In einer Sicherung werden Benutzer, Benutzerfortschritte, Details zu den Bibliotheksobjekten, Servereinstellungen und Bilder welche in <code>/metadata/items</code> & <code>/metadata/authors</code> gespeichert sind gespeichert. Sicherungen enthalten keine Dateien welche in den einzelnen Bibliotheksordnern (Medien-Ordnern) gespeichert sind.",
@@ -741,6 +756,7 @@
"MessageBookshelfNoResultsForFilter": "Keine Ergebnisse für Filter \"{0}: {1}\"",
"MessageBookshelfNoResultsForQuery": "Keine Ergebnisse für die Abfrage",
"MessageBookshelfNoSeries": "Keine Serien vorhanden",
"MessageBulkChapterPattern": "Wie viele Kapitel mit diesem Nummerierungs-Muster sollen hinzugefügt werden?",
"MessageChapterEndIsAfter": "Ungültige Kapitelendzeit: Kapitelende > Mediumende (Kapitelende liegt nach dem Ende des Mediums)",
"MessageChapterErrorFirstNotZero": "Ungültige Kapitelstartzeit: Das erste Kapitel muss bei 0 beginnen",
"MessageChapterErrorStartGteDuration": "Ungültige Kapitelstartzeit: Kapitelanfang > Mediumlänge (Kapitelanfang liegt zeitlich nach dem Ende des Mediums -> Lösung: Kapitelanfang < Mediumlänge)",
@@ -761,6 +777,7 @@
"MessageConfirmDeleteSession": "Sitzung wird gelöscht! Bist du dir sicher?",
"MessageConfirmEmbedMetadataInAudioFiles": "Bist du dir sicher, dass die Metadaten in {0} Audiodateien eingebettet werden sollen?",
"MessageConfirmForceReScan": "Scanvorgang erzwingen! Bist du dir sicher?",
"MessageConfirmLogoutDevice": "Bist du sicher, dass du dich von \"{0}\" abmelden willst?",
"MessageConfirmMarkAllEpisodesFinished": "Alle Episoden werden als abgeschlossen markiert! Bist du dir sicher?",
"MessageConfirmMarkAllEpisodesNotFinished": "Alle Episoden werden als nicht abgeschlossen markiert! Bist du dir sicher?",
"MessageConfirmMarkItemFinished": "Möchtest du \"{0}\" wirklich als fertig markieren?",
@@ -803,6 +820,8 @@
"MessageFeedURLWillBe": "Feed-URL wird {0} sein",
"MessageFetching": "Wird abgerufen …",
"MessageForceReScanDescription": "Durchsucht alle Dateien erneut, wie bei einem frischen Scan. ID3-Tags von Audiodateien, OPF-Dateien und Textdateien werden neu durchsucht.",
"MessageHeatmapListeningTimeTooltip": "<strong>{0} gehört</strong> auf {1}",
"MessageHeatmapNoListeningSessions": "Keine Hörsitzungen am {0}",
"MessageImportantNotice": "Wichtiger Hinweis!",
"MessageInsertChapterBelow": "Kapitel unten einfügen",
"MessageInvalidAsin": "Ungültige ASIN",
@@ -873,7 +892,7 @@
"MessageResetChaptersConfirm": "Kapitel und vorgenommenen Änderungen werden zurückgesetzt und rückgängig gemacht! Bist du dir sicher?",
"MessageRestoreBackupConfirm": "Bist du dir sicher, dass du die Sicherung wiederherstellen willst, welche am",
"MessageRestoreBackupWarning": "Bei der Wiederherstellung einer Sicherung wird die gesamte Datenbank unter /config und die Titelbilder in /metadata/items und /metadata/authors überschrieben.<br /><br />Bei der Sicherung werden keine Dateien in deinen Bibliotheksordnern verändert. Wenn du die Servereinstellungen aktiviert hast, um Cover und Metadaten in deinen Bibliotheksordnern zu speichern, werden diese nicht gesichert oder überschrieben.<br /><br />Alle Clients, die Ihren Server nutzen, werden automatisch aktualisiert.",
"MessageScheduleLibraryScanNote": "Für die meisten Anwender wird empfohlen, diese Funktion deaktiviert und die Ordnerüberwachung aktiviert zu lassen. Die Ordnerüberwachung wird Änderungen in den Bibliotheksordnern automatisch erkennen. Die Ordnerüberwachung funktioniert nicht mit allen Dateisystemen (wie NFS), hier kann stattdessen die automatischen Bibliothekssuchen verwendet werden.",
"MessageScheduleLibraryScanNote": "Für die meisten Benutzer wird empfohlen, diese Funktion deaktiviert und die Einstellung „Bibliothek automatisch auf Änderungen überwachen“ aktiviert zu lassen – dadurch werden Änderungen in Ihren Bibliotheksordnern automatisch erkannt. Aktivieren Sie diese Funktion, wenn „Bibliothek automatisch auf Änderungen überwachen“ für Ihr Dateisystem (wie NFS) nicht funktioniert.",
"MessageScheduleRunEveryWeekdayAtTime": "Immer {0} um {1} ausführen",
"MessageSearchResultsFor": "Suchergebnisse für",
"MessageSelected": "{0} ausgewählt",
@@ -942,6 +961,7 @@
"NotificationOnRSSFeedDisabledDescription": "Wird ausgeführt wenn automatische Downloads von Episoden wegen zu vielen fehlgeschlagenen Versuchen deaktiviert sind",
"NotificationOnRSSFeedFailedDescription": "Wird ausgelöst, wenn die RSS-Feed-Anforderung für einen automatischen Episoden-Download fehlschlägt",
"NotificationOnTestDescription": "Wird ausgeführt wenn das Benachrichtigungssystem getestet wird",
"PlaceholderBulkChapterInput": "Kapitelbezeichnung eingeben oder Nummerierung verwenden (z.B. 'Episode 1', 'Kapitel 10', '1.')",
"PlaceholderNewCollection": "Neuer Sammlungsname",
"PlaceholderNewFolderPath": "Neuer Ordnerpfad",
"PlaceholderNewPlaylist": "Neuer Wiedergabelistenname",
@@ -995,17 +1015,23 @@
"ToastBookmarkCreateFailed": "Lesezeichen konnte nicht erstellt werden",
"ToastBookmarkCreateSuccess": "Lesezeichen hinzugefügt",
"ToastBookmarkRemoveSuccess": "Lesezeichen entfernt",
"ToastBulkChapterInvalidCount": "Gebe eine Zahl zwischen 1 und 150 ein",
"ToastCachePurgeFailed": "Cache leeren fehlgeschlagen",
"ToastCachePurgeSuccess": "Cache geleert",
"ToastChapterLocked": "Kapitel ist freigegeben.",
"ToastChapterStartTimeAdjusted": "Kapitelbeginn um {0} Sekunden angepasst",
"ToastChaptersAllLocked": "Alle Kapitel sind gesperrt. Gebe einige Kapitel frei um die Zeiten anzupassen.",
"ToastChaptersHaveErrors": "Kapitel sind fehlerhaft",
"ToastChaptersInvalidShiftAmountLast": "Die Verschiebung ist nicht möglich, da die Startzeit des letzten Kapitels über die Gesamtdauer dieses Hörbuchs hinausgehen würde.",
"ToastChaptersInvalidShiftAmountStart": "Ungültige Höhe der Verschiebung. Das erste Kapitel hätte eine Länge von Null oder eine negative Länge und würde vom zweiten Kapitel überschrieben werden. Erhöhen Sie die Startdauer des zweiten Kapitels.",
"ToastChaptersInvalidShiftAmountStart": "Ungültige Höhe der Verschiebung. Das erste Kapitel hätte eine Länge von Null oder eine negative Länge und würde vom zweiten Kapitel überschrieben werden. Erhöhe die Startdauer des zweiten Kapitels.",
"ToastChaptersMustHaveTitles": "Kapitel benötigen eindeutige Namen",
"ToastChaptersRemoved": "Kapitel entfernt",
"ToastChaptersUpdated": "Kapitel aktualisiert",
"ToastCollectionItemsAddFailed": "Das Hinzufügen von Element(en) zur Sammlung ist fehlgeschlagen",
"ToastCollectionRemoveSuccess": "Sammlung entfernt",
"ToastCollectionUpdateSuccess": "Sammlung aktualisiert",
"ToastConnectionNotAvailable": "Verbindung nicht möglich. Bitte später erneut versuchen",
"ToastCoverSearchFailed": "Cover-Suche fehlgeschlagen",
"ToastCoverUpdateFailed": "Cover-Update fehlgeschlagen",
"ToastDateTimeInvalidOrIncomplete": "Datum und Zeit sind ungültig oder unvollständig",
"ToastDeleteFileFailed": "Die Datei konnte nicht gelöscht werden",
@@ -1030,6 +1056,7 @@
"ToastInvalidImageUrl": "Ungültiger Bild URL",
"ToastInvalidMaxEpisodesToDownload": "Ungültige Max. Anzahl an Episoden zum Herunterladen",
"ToastInvalidUrl": "Ungültiger URL",
"ToastInvalidUrls": "Eine oder mehrere URLs sind ungültig",
"ToastItemCoverUpdateSuccess": "Titelbild aktualisiert",
"ToastItemDeletedFailed": "Fehler beim löschen des Artikels",
"ToastItemDeletedSuccess": "Artikel gelöscht",
@@ -1079,11 +1106,12 @@
"ToastPlaylistUpdateSuccess": "Wiedergabeliste aktualisiert",
"ToastPodcastCreateFailed": "Podcast konnte nicht erstellt werden",
"ToastPodcastCreateSuccess": "Podcast erstellt",
"ToastPodcastGetFeedFailed": "Fehler beim abrufen des Podcast Feeds",
"ToastPodcastEpisodeUpdated": "Podcast-Folge aktualisiert",
"ToastPodcastGetFeedFailed": "Fehler beim Abrufen des Podcast Feeds",
"ToastPodcastNoEpisodesInFeed": "Keine Episoden in RSS Feed gefunden",
"ToastPodcastNoRssFeed": "Podcast enthält keinen RSS Feed",
"ToastProgressIsNotBeingSynced": "Fortschritt wird nicht synchronisiert, Wiedergabe wird neu gestartet",
"ToastProviderCreatedFailed": "Fehler beim hinzufügen des Anbieters",
"ToastProviderCreatedFailed": "Fehler beim Hinzufügen des Anbieters",
"ToastProviderCreatedSuccess": "Neuer Anbieter hinzugefügt",
"ToastProviderNameAndUrlRequired": "Name und URL notwendig",
"ToastProviderRemoveSuccess": "Anbieter entfernt",
@@ -1129,5 +1157,13 @@
"ToastUserPasswordChangeSuccess": "Passwort erfolgreich verändert",
"ToastUserPasswordMismatch": "Passwörter stimmen nicht überein",
"ToastUserPasswordMustChange": "Neues Passwort muss sich von altem Passwort unterscheiden",
"ToastUserRootRequireName": "Root Benutzername muss angegeben werden"
"ToastUserRootRequireName": "Root Benutzername muss angegeben werden",
"TooltipAddChapters": "Kapitel hinzufügen",
"TooltipAddOneSecond": "1 Sekunde hinzufügen",
"TooltipAdjustChapterStart": "Klicke um die Startzeit anzupassen",
"TooltipLockAllChapters": "Alle Kapitel sperren",
"TooltipLockChapter": "Kapitel sperren (Shift+Klick für mehrere)",
"TooltipSubtractOneSecond": "1 Sekunde abziehen",
"TooltipUnlockAllChapters": "Alle Kapitel freigeben",
"TooltipUnlockChapter": "Kapitel freigeben (Shift+Klick für mehrere)"
}
+348
View File
@@ -0,0 +1,348 @@
{
"ButtonAdd": "Προσθήκη",
"ButtonAddApiKey": "Προσθήκη Κλειδιού API",
"ButtonAddChapters": "Προσθήκη Κεφαλαίων",
"ButtonAddDevice": "Προσθήκη Συσκευής",
"ButtonAddLibrary": "Προσθήκη Βιβλιοθήκης",
"ButtonAddPodcasts": "Προσθήκη Podcasts",
"ButtonAddUser": "Προσθήκη Χρήστη",
"ButtonAddYourFirstLibrary": "Πρόσθεσε την πρώτη σου βιβλιοθήκη",
"ButtonApply": "Εφαρμογή",
"ButtonApplyChapters": "Εφαρμογή Κεφαλαίων",
"ButtonAuthors": "Συγγραφείς",
"ButtonBack": "Πίσω",
"ButtonBatchEditPopulateFromExisting": "Συμπλήρωση από υπάρχοντα",
"ButtonBatchEditPopulateMapDetails": "Συμπλήρωση λεπτομερειών χάρτη",
"ButtonBrowseForFolder": "Περιήγηση για Φάκελο",
"ButtonCancel": "Ακύρωση",
"ButtonCancelEncode": "Ακύρωση Κωδικοποίησης",
"ButtonChangeRootPassword": "Αλλαγή Κωδικού Πρόσβασης Root",
"ButtonCheckAndDownloadNewEpisodes": "Έλεγχος και Κατέβασμα Νέων Επεισοδίων",
"ButtonChooseAFolder": "Επιλογή φακέλου",
"ButtonChooseFiles": "Επιλογή αρχείων",
"ButtonClearFilter": "Διαγραφή Φίλτρου",
"ButtonClose": "Κλείσιμο",
"ButtonCloseFeed": "Κλείσιμο Τροφοδοσίας",
"ButtonCloseSession": "Κλείσιμο Ανοιχτής Συνεδρίας",
"ButtonCollections": "Συλλογές",
"ButtonConfigureScanner": "Ρύθμιση Παραμέτρων Σαρωτή",
"ButtonCreate": "Δημιουργία",
"ButtonCreateBackup": "Δημιουργία Αντιγράφου Ασφαλείας",
"ButtonDelete": "Διαγραφή",
"ButtonDownloadQueue": "Ουρά",
"ButtonEdit": "Επεξεργασία",
"ButtonEditChapters": "Επεξεργασία Κεφαλαίων",
"ButtonEditPodcast": "Επεξεργασία Podcast",
"ButtonEnable": "Ενεργοποίηση",
"ButtonForceReScan": "Αναγκαστική Επανάληψη Σάρωσης",
"ButtonFullPath": "Πλήρης Διαδρομή",
"ButtonHide": "Απόκρυψη",
"ButtonHome": "Αρχική",
"ButtonIssues": "Θέματα",
"ButtonJumpBackward": "Μεταπήδηση Πίσω",
"ButtonJumpForward": "Μεταπήδηση Μπροστά",
"ButtonLatest": "Τελευταία",
"ButtonLibrary": "Βιβλιοθήκη",
"ButtonLogout": "Αποσύνδεση",
"ButtonLookup": "Εύρεση",
"ButtonManageTracks": "Διαχείριση Κομματιών",
"ButtonMapChapterTitles": "Χαρτογράφηση Τίτλων Κεφαλαίων",
"ButtonMatchAllAuthors": "Αντιστοίχιση Όλων των Συγγραφέων",
"ButtonMatchBooks": "Αντιστοίχιση Βιβλίων",
"ButtonNevermind": "Άστο",
"ButtonNext": "Επόμενο",
"ButtonNextChapter": "Επόμενο Κεφάλαιο",
"ButtonNextItemInQueue": "Επόμενο Αντικείμενο στην Ουρά",
"ButtonOk": "Εντάξει",
"ButtonOpenFeed": "Άνοιγμα Τροφοδοσίας",
"ButtonOpenManager": "Άνοιγμα Διαχειριστή",
"ButtonPause": "Παύση",
"ButtonPlay": "Αναπαραγωγή",
"ButtonPlayAll": "Αναπαραγωγή Όλων",
"ButtonPlaying": "Αναπαράγεται",
"ButtonPlaylists": "Λίστες Αναπαραγωγής",
"ButtonPrevious": "Προηγούμενο",
"ButtonPreviousChapter": "Προηγούμενο Κεφάλαιο",
"ButtonProbeAudioFile": "Ανάλυση Αρχείου Ήχου",
"ButtonPurgeAllCache": "Εκκαθάριση Όλης της Προσωρινής Μνήμης",
"ButtonPurgeItemsCache": "Εκκαθάριση της Μνήμης Αντικειμένων",
"ButtonQueueAddItem": "Προσθήκη στην ουρά",
"ButtonQueueRemoveItem": "Αφαίρεση απ'την ουρά",
"ButtonQuickEmbed": "Γρήγορη Ενσωμάτωση",
"ButtonQuickEmbedMetadata": "Γρήγορη Ενσωμάτωση Μεταδεδομένων",
"ButtonQuickMatch": "Γρήγορη Αντιστοίχηση",
"ButtonReScan": "Επανασάρωση",
"ButtonRead": "Ανάγνωση",
"ButtonReadLess": "Ανάγνωση λιγότερων",
"ButtonReadMore": "Διάβασε περισσότερα",
"ButtonRefresh": "Ανανέωση",
"ButtonRemove": "Αφαίρεση",
"ButtonRemoveAll": "Αφαίρεση Όλων",
"ButtonRemoveAllLibraryItems": "Αφαίρεση Όλων των Αντικειμέων Βιβλιοθήκης",
"ButtonRemoveFromContinueListening": "Αφαίρεση από τη Συνέχεια Ακρόασης",
"ButtonRemoveFromContinueReading": "Αφαίρεση από τη Συνέχεια Ανάγνωσης",
"ButtonRemoveSeriesFromContinueSeries": "Αφαίρεση Σειράς από τη Συνέχεια Σειράς",
"ButtonReset": "Επαναφορά",
"ButtonResetToDefault": "Επαναφορά στις προεπιλογές",
"ButtonRestore": "Επαναφορά",
"ButtonSave": "Αποθήκευση",
"ButtonSaveAndClose": "Αποθήκευση και Κλείσιμο",
"ButtonSaveTracklist": "Αποθήκευση Λίστας Κομματιών",
"ButtonScan": "Σάρψση",
"ButtonScanLibrary": "Σάρωση Βιβλιοθήκης",
"ButtonScrollLeft": "Κύλιση Αριστερά",
"ButtonScrollRight": "Κύλιση Δεξιά",
"ButtonSearch": "Αναζήτηση",
"ButtonSelectFolderPath": "Επιλογή Διαδρομής Φακέλου",
"ButtonSeries": "Σειρά",
"ButtonSetChaptersFromTracks": "Ορισμός κεφαλαίων από τα κομμάτια",
"ButtonShare": "Κοινοποίηση",
"ButtonShiftTimes": "Χρόνοι Μετακίνησης",
"ButtonShow": "Εμφάνιση",
"ButtonStartM4BEncode": "Έναρξη Κωδικοποίησης M4B",
"ButtonStartMetadataEmbed": "Έναρξη Ενσωμάτωσης Μεταδεδομένων",
"ButtonStats": "Στατιστικά",
"ButtonSubmit": "Υποβολή",
"ButtonTest": "Δοκιμή",
"ButtonUnlinkOpenId": "Αποσύνδεση OpenID",
"ButtonUpload": "Μεταφόρτωση",
"ButtonUploadBackup": "Μεταφόρτωση Αντιγράφου Ασφαλείας",
"ButtonUploadCover": "Μεταφόρτωση Εξωφύλλου",
"ButtonUploadOPMLFile": "Μεταφόρτωση Αρχείου OPML",
"ButtonUserDelete": "Διαγραφή Χρήστη {0}",
"ButtonUserEdit": "Επεξεργασίας χρήστη {0}",
"ButtonViewAll": "Εμφάνιση Όλων",
"ButtonYes": "Ναι",
"ErrorUploadFetchMetadataAPI": "Σφάλμα κατά την ανάκτηση μεταδεδομένων",
"ErrorUploadFetchMetadataNoResults": "Δεν ήταν δυνατή η ανάκτηση των μεταδεδομένων - δοκιμάστε να ενημερώσετε τον τίτλο και/ή τον συγγραφέα",
"ErrorUploadLacksTitle": "Πρέπει να έχει τίτλο",
"HeaderAccount": "Λογαριασμός",
"HeaderAddCustomMetadataProvider": "Προσθήκη Προσαρμοσμένου Παρόχου Μεταδεδομένων",
"HeaderAdvanced": "Για Προχωρημένους",
"HeaderApiKeys": "Κλειδιά API",
"HeaderAppriseNotificationSettings": "Ρυθμίσεις Ειδοποιήσεων Apprise",
"HeaderAudioTracks": "Κομμάτια Ήχου",
"HeaderAudiobookTools": "Εργαλεία Διαχείρισης Αρχείων Audiobooks",
"HeaderAuthentication": "Αυθεντικοποίηση",
"HeaderBackups": "Αντίγραφα Ασφαλείας",
"HeaderBulkChapterModal": "Προσθήκη Πολλαπλών Κεφαλαίων",
"HeaderChangePassword": "Αλλαγή Κωδικού Πρόσβασης",
"HeaderChapters": "Κεφάλαια",
"HeaderChooseAFolder": "Επιλογή Φακέλου",
"HeaderCollection": "Συλλογή",
"HeaderCollectionItems": "Αντικείμενα Συλλογής",
"HeaderCover": "Εξώφυλλο",
"HeaderCurrentDownloads": "Τρέχουσες Λήψεις",
"HeaderDetails": "Λεπτομέρειες",
"HeaderDownloadQueue": "Ουρά Λήψης",
"HeaderEbookFiles": "Αρχεία του βιβλίου",
"HeaderEmail": "Ηλεκτρονικό ταχυδρομείο",
"HeaderEmailSettings": "Ρυθμίσεις ηλεκτρονικού ταχυδρομείου",
"HeaderEpisodes": "Επεισόδια",
"HeaderEreaderSettings": "Ρυθμίσεις Ereader",
"HeaderFiles": "Αρχεία",
"HeaderFindChapters": "Εύρεση Κεφαλαίων",
"HeaderItemFiles": "Αρχεία Αντικειμένων",
"HeaderLastListeningSession": "Τελευταία Συνεδρία Ακρόασης",
"HeaderLatestEpisodes": "Τελευταία Επεισόδια",
"HeaderLibraries": "Βιβλιοθήκες",
"HeaderLibraryFiles": "Αρχεία Βιβλιοθήκης",
"HeaderLibraryStats": "Στατιστικά Βιβλιοθήκης",
"HeaderListeningSessions": "Συνεδρίες Ακρόασης",
"HeaderListeningStats": "Στατιστικά Ακρόασης",
"HeaderLogin": "Σύνδεση",
"HeaderMatch": "Ταύτιση",
"HeaderNewAccount": "Νέος Λογαριασμός",
"HeaderNewApiKey": "Νέο Κλειδί API",
"HeaderNewLibrary": "Νέα Βιβλιοθήκη",
"HeaderNotificationCreate": "Δημιουργία Ειδοποίησης",
"HeaderNotificationUpdate": "Ενημέρωση Ειδοποίησης",
"HeaderNotifications": "Ειδοποιήσεις",
"HeaderOpenRSSFeed": "Άνοιγμα Τροφοδοσίας RSS",
"HeaderOtherFiles": "Άλλα Αρχεία",
"HeaderPermissions": "Δικαιώματα",
"HeaderPlayerSettings": "Ρυθμίσεις Αναπαραγωγής",
"HeaderPlaylist": "Λίστα Αναπαραγωγής",
"HeaderPlaylistItems": "Αντικείμενα Λίστας Αναπαραγωγής",
"HeaderPresets": "Προεπιλογές",
"HeaderRSSFeedGeneral": "Λεπτομέρειες RSS",
"HeaderRSSFeedIsOpen": "Η Τροφοδοσία RSS είναι Ανοιχτή",
"HeaderRemoveEpisode": "Αφαίρεση Επεισοδίου",
"HeaderSession": "Συνεδρία",
"HeaderSetBackupSchedule": "Ορισμός Προγράμματος Αντιγράφων Ασφαλείας",
"HeaderSettings": "Ρυθμίσεις",
"HeaderSettingsDisplay": "Προβολή",
"HeaderSettingsGeneral": "Γενικά",
"HeaderSettingsSecurity": "Ασφάλεια",
"HeaderSleepTimer": "Χρονοδιακόπτης Ύπνου",
"HeaderStatsLargestItems": "Μεγαλύτερα Αντικείμενα",
"HeaderStatsLongestItems": "Μεγαλύτερα Αντικείμενα (ώρες)",
"HeaderStatsMinutesListeningChart": "Λεπτά Ακρόασης (τελευταίες 7 ημέρες)",
"HeaderStatsRecentSessions": "Πρόσφατες Συνεδρίες",
"HeaderStatsTop10Authors": "10 Κορυφαίου Συγγραφείς",
"HeaderStatsTop5Genres": "5 Κορυφαία Είδη",
"HeaderTableOfContents": "Πίνακας Περιεχομένων",
"HeaderTools": "Εργαλεία",
"HeaderUpdateAccount": "Ενημέρωση Λογαριασμού",
"HeaderUpdateApiKey": "Ενημέρωση Κλειδιού API",
"HeaderUpdateAuthor": "Ενημέρωση Συγγραφέα",
"HeaderUpdateDetails": "Ενημέρωση Λεπτομερειεών",
"HeaderUpdateLibrary": "Ενημέρωση Βιβλιοθήκης",
"HeaderUsers": "Χρήστες",
"HeaderYourStats": "Τα Στατιστικά Σας",
"LabelAbridged": "Συνοπτικό",
"LabelAccessibleBy": "Προσβάσιμο από",
"LabelAccountType": "Τύπος Λογαριασμού",
"LabelAccountTypeAdmin": "Διαχειριστής",
"LabelAccountTypeGuest": "Επισκέπτης",
"LabelAccountTypeUser": "Χρήστης",
"LabelAddToCollection": "Προσθήκη σε Συλλογή",
"LabelAddToCollectionBatch": "Προσθήκη {0} Βιβλίων στην Συλλογή",
"LabelAddToPlaylist": "Προσθήκη στην Λίστα Αναπαραγωγής",
"LabelAddedAt": "Προστέθηκε Στις",
"LabelAddedDate": "Προστέθηκε {0}",
"LabelAll": "Όλα",
"LabelAllEpisodesDownloaded": "Όλα τα επεισόδια λήφθηκαν",
"LabelAllUsers": "Όλοι οι Χρήστες",
"LabelAlreadyInYourLibrary": "Υπάρχει ήδη στην βιβλιοθήκη",
"LabelAudioChannels": "Κανάλια Ήχου (1 ή 2)",
"LabelAuthor": "Συγγραφέας",
"LabelAuthorFirstLast": "Συγγραφέας (Όνομα Επώνυμο)",
"LabelAuthorLastFirst": "Συγγραφέας (Επώνυμο, Όνομα)",
"LabelAuthors": "Συγγραφείς",
"LabelAutoDownloadEpisodes": "Αυτόματο Κατέβασμα Επεισοδίων",
"LabelAutoLaunch": "Αυτόματη Εκκίνηση",
"LabelBackupLocation": "Τοποθεσία Αντιγράφου Ασφαλείας",
"LabelBackupsEnableAutomaticBackups": "Αυτόματα αντίγραφα ασφαλείας",
"LabelBackupsNumberToKeep": "Αριθμός αντιγράφων ασφαλείας προς διατήρηση",
"LabelBooks": "Βιβλία",
"LabelButtonText": "Κείμενο Κουμπιού",
"LabelByAuthor": "κατά {0}",
"LabelChangePassword": "Αλλαγή Κωδικού Πρόσβασης",
"LabelChannels": "Κανάλια",
"LabelChapterCount": "{0} Κεφάλαια",
"LabelChapterTitle": "Τίτλος Κεφαλαίου",
"LabelChapters": "Κεφάλαια",
"LabelChaptersFound": "κεφάλαια βρέθηκαν",
"LabelClosePlayer": "Κλείσιμο αναπαραγωγής",
"LabelCollapseSeries": "Σύμπτυξη Σειράς",
"LabelCollection": "Συλλογή",
"LabelCollections": "Συλλογές",
"LabelComplete": "Ολοκλήρωση",
"LabelConfirmPassword": "Επιβεβαίωση Κωδικού Πρόσβασης",
"LabelContinueListening": "Συνέχεια Ακρόασης",
"LabelContinueReading": "Συνέχεια Ανάγνωσης",
"LabelContinueSeries": "Συνέχεια Σειράς",
"LabelCover": "Εξώφυλλο",
"LabelCoverImageURL": "URL Εικόνας Εξωφύλλου",
"LabelCoverProvider": "Πάροχος Εξωφύλλου",
"LabelCreatedAt": "Δημιουρήθηκε Στις",
"LabelCurrent": "Τρέχων",
"LabelCurrently": "Τρέχων:",
"LabelDays": "Ημέρες",
"LabelDescription": "Περιγραφή",
"LabelDevice": "Συσκευή",
"LabelDeviceInfo": "Πληροφορίες Συσκευής",
"LabelDiscover": "Ανακάλυψη",
"LabelDownload": "Λήψη",
"LabelDownloadNEpisodes": "Λήψη {0} επεισοδίων",
"LabelDuration": "Διάρκεια",
"LabelDurationComparisonExactMatch": "(ακριβής ταύτιση)",
"LabelEbook": "Ηλεκτρονικό βιβλίο",
"LabelEbooks": "Ηλεκτρονικά βιβλία",
"LabelEdit": "Επεξεργασία",
"LabelEmail": "Ηλεκτρονικό ταχυδρομείο",
"LabelEmailSettingsFromAddress": "Από διεύθυνση",
"LabelEmailSettingsSecure": "Ασφαλές",
"LabelEmailSettingsTestAddress": "Δοκιμή διεύθυνσης",
"LabelEmbeddedCover": "Ενσωματωμένο Εξώφυλλο",
"LabelEnable": "Ενεργοποίηση",
"LabelEnd": "Τέλος",
"LabelEndOfChapter": "Τέλος Κεφαλαίου",
"LabelEpisode": "Επεισόδιο",
"LabelExplicit": "Άσεμνο περιεχόμενο",
"LabelFeedURL": "URL ροής",
"LabelFile": "Αρχείο",
"LabelFileBirthtime": "Ώρα δημιουργίας αρχείου",
"LabelFileModified": "Τροποποιημένο αρχείο",
"LabelFilename": "Όνομα Αρχείου",
"LabelFinished": "Ολοκληρώθηκε",
"LabelFolder": "Φάκελος",
"LabelFontBoldness": "Ένταση γραμματοσειράς",
"LabelFontFamily": "Οικογένεια Γραμματοσειράς",
"LabelFontScale": "Μέγεθος γραμματοσειράς",
"LabelGenre": "Λογοτεχνικό Είδος",
"LabelGenres": "Λογοτεχνικά Είδη",
"LabelHasEbook": "Έχει βιβλίο",
"LabelHasSupplementaryEbook": "Διαθέτει συμπληρωματικό ηλεκτρονικό βιβλίο",
"LabelHost": "Διακομιστής",
"LabelInProgress": "Σε Εξέλιξη",
"LabelIncomplete": "Ελειπής",
"LabelLanguage": "Γλώσσα",
"LabelLayout": "Διάταξη",
"LabelLayoutSinglePage": "Μονή Σελίδα",
"LabelLibrarySortByProgress": "Πρόοδος: Τελευταία ενημέρωση",
"LabelLibrarySortByProgressFinished": "Πρόοδος: Ολοκληρώθηκε",
"LabelLibrarySortByProgressStarted": "Πρόοδος: Έναρξη",
"LabelLineSpacing": "Διάστημα γραμμών",
"LabelListenAgain": "Επανάληψη Ακρόασης",
"LabelMediaType": "Τύπος Πολυμέσων",
"LabelMissing": "Λείπει η ετικέτα",
"LabelMore": "Περισσότερα",
"LabelMoreInfo": "Περισσότερες Πληροφορίες",
"LabelName": "Όνομα",
"LabelNarrator": "Αφηγητής",
"LabelNarrators": "Αφηγητές",
"LabelNewestAuthors": "Πρόσφατοι Συγγραφείς",
"LabelNewestEpisodes": "Πρόσφατα Επεισόδια",
"LabelNotFinished": "Δεν έχει ολοκληρωθεί",
"LabelNotStarted": "Δεν Έχει Ξεκινήσει",
"LabelNumberOfEpisodes": "# Επεισοδίων",
"LabelPassword": "Κωδικός Πρόσβασης",
"LabelPath": "Διαδρομή",
"LabelPodcast": "Πόντκαστ",
"LabelPodcasts": "Πόντκαστ",
"LabelProgress": "Πρόοδος",
"LabelPubDate": "Ημερομηνία έκδοσης",
"LabelPublishYear": "Χρονολογία Έκδοσης",
"LabelPublishedDate": "Εκδόθηκε {0}",
"LabelRandomly": "Τυχαία",
"LabelRead": "Ανάγνωση",
"LabelReadAgain": "Ανάγνωση Ξανά",
"LabelRecentSeries": "Πρόσφατη Σειρά",
"LabelRecentlyAdded": "Προστέθηκαν Πρόσφατα",
"LabelSeries": "Σειρά",
"LabelSetEbookAsPrimary": "Ορισμός ως πρωτεύων",
"LabelShowAll": "Εμφάνιση Όλων",
"LabelSize": "Μέγεθος",
"LabelSleepTimer": "Χρονοδιακόπτης Ύπνου",
"LabelStart": "Έναρξη",
"LabelStatsBestDay": "Καλύτερη Ημέρα",
"LabelStatsDailyAverage": "Ημερήσιος Μέσος Όρος",
"LabelStatsDays": "Ημέρες",
"LabelStatsDaysListened": "Ημέρες Ακρόασης",
"LabelStatsInARow": "Σε σειρά",
"LabelStatsItemsFinished": "Ολοκληρωμένα Αντικείμενα",
"LabelStatsMinutes": "λεπτά",
"LabelStatsMinutesListening": "Λεπτά Ακρόασης",
"LabelStatsWeekListening": "Εβδομαδιαία Ακρόαση",
"LabelTheme": "Θέμα",
"LabelThemeDark": "Σκοτεινό",
"LabelThemeLight": "Φωτεινό",
"LabelTimeRemaining": "{0} απομένουν",
"LabelTitle": "Τίτλος",
"LabelTracks": "Κομμάτια",
"LabelType": "Τύπος",
"LabelUnknown": "Άγνωστο",
"LabelUser": "Χρήστης",
"LabelUsername": "Όνομα Χρήστη",
"LabelYourProgress": "Η Πρόοδος Σας",
"MessageDownloadingEpisode": "Λήψη επεισοδίου",
"MessageEreaderDevices": "Για να διασφαλίσετε την παράδοση των ηλεκτρονικών βιβλίων, ίσως χρειαστεί να προσθέσετε την παραπάνω διεύθυνση ηλεκτρονικού ταχυδρομείου ως έγκυρο αποστολέα για κάθε συσκευή που αναγράφεται παρακάτω.",
"MessageLoading": "Φόρτωση...",
"MessageMarkAsFinished": "Σήμανση ως Ολοκληρωμένο",
"MessageNoItemsFound": "Δεν βρέθηκαν αντικείμενα",
"MessageNoUserPlaylists": "Δεν έχετε λίστες αναπαραγωγής",
"ToastEmailSettingsUpdateSuccess": "Ενημερώθηκαν οι ρυθμίσεις ηλεκτρονικού ταχυδρομείου",
"ToastNameEmailRequired": "Το όνομα και η διεύθυνση ηλεκτρονικού ταχυδρομείου είναι υποχρεωτικά"
}
+34 -5
View File
@@ -46,6 +46,7 @@
"ButtonLatest": "Latest",
"ButtonLibrary": "Library",
"ButtonLogout": "Logout",
"ButtonLogoutAllDevices": "Logout All Devices",
"ButtonLookup": "Lookup",
"ButtonManageTracks": "Manage Tracks",
"ButtonMapChapterTitles": "Map Chapter Titles",
@@ -127,6 +128,7 @@
"HeaderAudiobookTools": "Audiobook File Management Tools",
"HeaderAuthentication": "Authentication",
"HeaderBackups": "Backups",
"HeaderBulkChapterModal": "Add Multiple Chapters",
"HeaderChangePassword": "Change Password",
"HeaderChapters": "Chapters",
"HeaderChooseAFolder": "Choose a Folder",
@@ -193,6 +195,7 @@
"HeaderScheduleEpisodeDownloads": "Schedule Automatic Episode Downloads",
"HeaderScheduleLibraryScans": "Schedule Automatic Library Scans",
"HeaderSession": "Session",
"HeaderSessions": "Sessions",
"HeaderSetBackupSchedule": "Set Backup Schedule",
"HeaderSettings": "Settings",
"HeaderSettingsDisplay": "Display",
@@ -308,6 +311,7 @@
"LabelDeleteFromFileSystemCheckbox": "Delete from file system (uncheck to only remove from database)",
"LabelDescription": "Description",
"LabelDeselectAll": "Deselect All",
"LabelDetectedPattern": "Detected pattern:",
"LabelDevice": "Device",
"LabelDeviceInfo": "Device Info",
"LabelDeviceIsAvailableTo": "Device is available to...",
@@ -376,6 +380,7 @@
"LabelFilterByUser": "Filter by User",
"LabelFindEpisodes": "Find Episodes",
"LabelFinished": "Finished",
"LabelFinishedDate": "Finished {0}",
"LabelFolder": "Folder",
"LabelFolders": "Folders",
"LabelFontBold": "Bold",
@@ -412,6 +417,7 @@
"LabelIntervalEveryHour": "Every hour",
"LabelIntervalEveryMinute": "Every minute",
"LabelInvert": "Invert",
"LabelIpAddress": "IP Address",
"LabelItem": "Item",
"LabelJumpBackwardAmount": "Jump backward amount",
"LabelJumpForwardAmount": "Jump forward amount",
@@ -433,7 +439,9 @@
"LabelLibraryFilterSublistEmpty": "No {0}",
"LabelLibraryItem": "Library Item",
"LabelLibraryName": "Library Name",
"LabelLibrarySortByProgress": "Progress Updated",
"LabelLibrarySortByProgress": "Progress: Last Updated",
"LabelLibrarySortByProgressFinished": "Progress: Finished",
"LabelLibrarySortByProgressStarted": "Progress: Started",
"LabelLimit": "Limit",
"LabelLineSpacing": "Line spacing",
"LabelListenAgain": "Listen Again",
@@ -472,6 +480,7 @@
"LabelNewestAuthors": "Newest Authors",
"LabelNewestEpisodes": "Newest Episodes",
"LabelNextBackupDate": "Next backup date",
"LabelNextChapters": "Next chapters will be:",
"LabelNextScheduledRun": "Next scheduled run",
"LabelNoApiKeys": "No API keys",
"LabelNoCustomMetadataProviders": "No custom metadata providers",
@@ -489,6 +498,7 @@
"LabelNotificationsMaxQueueSize": "Max queue size for notification events",
"LabelNotificationsMaxQueueSizeHelp": "Events are limited to firing 1 per second. Events will be ignored if the queue is at max size. This prevents notification spamming.",
"LabelNumberOfBooks": "Number of Books",
"LabelNumberOfChapters": "Number of chapters:",
"LabelNumberOfEpisodes": "# of Episodes",
"LabelOpenIDAdvancedPermsClaimDescription": "Name of the OpenID claim that contains advanced permissions for user actions within the application which will apply to non-admin roles (<b>if configured</b>). If the claim is missing from the response, access to ABS will be denied. If a single option is missing, it will be treated as <code>false</code>. Ensure the identity provider's claim matches the expected structure:",
"LabelOpenIDClaims": "Leave the following options empty to disable advanced group and permissions assignment, automatically assigning 'User' group then.",
@@ -581,8 +591,8 @@
"LabelSettingsBookshelfViewHelp": "Skeumorphic design with wooden shelves",
"LabelSettingsChromecastSupport": "Chromecast support",
"LabelSettingsDateFormat": "Date Format",
"LabelSettingsEnableWatcher": "Automatically scan libraries for changes",
"LabelSettingsEnableWatcherForLibrary": "Automatically scan library for changes",
"LabelSettingsEnableWatcher": "Automatically watch libraries for changes",
"LabelSettingsEnableWatcherForLibrary": "Automatically watch library for changes",
"LabelSettingsEnableWatcherHelp": "Enables the automatic adding/updating of items when file changes are detected. *Requires server restart",
"LabelSettingsEpubsAllowScriptedContent": "Allow scripted content in epubs",
"LabelSettingsEpubsAllowScriptedContentHelp": "Allow epub files to execute scripts. It is recommended to keep this setting disabled unless you trust the source of the epub files.",
@@ -631,6 +641,7 @@
"LabelStartTime": "Start Time",
"LabelStarted": "Started",
"LabelStartedAt": "Started At",
"LabelStartedDate": "Started {0}",
"LabelStatsAudioTracks": "Audio Tracks",
"LabelStatsAuthors": "Authors",
"LabelStatsBestDay": "Best Day",
@@ -745,6 +756,7 @@
"MessageBookshelfNoResultsForFilter": "No results for filter \"{0}: {1}\"",
"MessageBookshelfNoResultsForQuery": "No results for query",
"MessageBookshelfNoSeries": "You have no series",
"MessageBulkChapterPattern": "How many chapters would you like to add with this numbering pattern?",
"MessageChapterEndIsAfter": "Chapter end is after the end of your audiobook",
"MessageChapterErrorFirstNotZero": "First chapter must start at 0",
"MessageChapterErrorStartGteDuration": "Invalid start time must be less than audiobook duration",
@@ -765,6 +777,7 @@
"MessageConfirmDeleteSession": "Are you sure you want to delete this session?",
"MessageConfirmEmbedMetadataInAudioFiles": "Are you sure you want to embed metadata in {0} audio files?",
"MessageConfirmForceReScan": "Are you sure you want to force re-scan?",
"MessageConfirmLogoutDevice": "Are you sure you want to log out of \"{0}\"?",
"MessageConfirmMarkAllEpisodesFinished": "Are you sure you want to mark all episodes as finished?",
"MessageConfirmMarkAllEpisodesNotFinished": "Are you sure you want to mark all episodes as not finished?",
"MessageConfirmMarkItemFinished": "Are you sure you want to mark \"{0}\" as finished?",
@@ -879,7 +892,7 @@
"MessageResetChaptersConfirm": "Are you sure you want to reset chapters and undo the changes you made?",
"MessageRestoreBackupConfirm": "Are you sure you want to restore the backup created on",
"MessageRestoreBackupWarning": "Restoring a backup will overwrite the entire database located at /config and cover images in /metadata/items & /metadata/authors.<br /><br />Backups do not modify any files in your library folders. If you have enabled server settings to store cover art and metadata in your library folders then those are not backed up or overwritten.<br /><br />All clients using your server will be automatically refreshed.",
"MessageScheduleLibraryScanNote": "For most users, it is recommended to leave this feature disabled and keep the folder watcher setting enabled. The folder watcher will automatically detect changes in your library folders. The folder watcher doesn't work for every file system (like NFS) so scheduled library scans can be used instead.",
"MessageScheduleLibraryScanNote": "For most users, it is recommended to leave this feature disabled and keep the \"Automatically watch library for changes\" setting enabled - it will automatically detect changes in your library folders. Enable this feature if \"Automatically watch library for changes\" does not work for your file system (like NFS).",
"MessageScheduleRunEveryWeekdayAtTime": "Run every {0} at {1}",
"MessageSearchResultsFor": "Search results for",
"MessageSelected": "{0} selected",
@@ -948,6 +961,7 @@
"NotificationOnRSSFeedDisabledDescription": "Triggered when automatic episode downloads are disabled due to too many failed attempts",
"NotificationOnRSSFeedFailedDescription": "Triggered when the RSS feed request fails for an automatic episode download",
"NotificationOnTestDescription": "Event for testing the notification system",
"PlaceholderBulkChapterInput": "Enter chapter title or use numbering (e.g., 'Episode 1', 'Chapter 10', '1.')",
"PlaceholderNewCollection": "New collection name",
"PlaceholderNewFolderPath": "New folder path",
"PlaceholderNewPlaylist": "New playlist name",
@@ -1001,8 +1015,12 @@
"ToastBookmarkCreateFailed": "Failed to create bookmark",
"ToastBookmarkCreateSuccess": "Bookmark added",
"ToastBookmarkRemoveSuccess": "Bookmark removed",
"ToastBulkChapterInvalidCount": "Enter a number between 1 and 150",
"ToastCachePurgeFailed": "Failed to purge cache",
"ToastCachePurgeSuccess": "Cache purged successfully",
"ToastChapterLocked": "Chapter is locked.",
"ToastChapterStartTimeAdjusted": "Chapter start time adjusted by {0} seconds",
"ToastChaptersAllLocked": "All chapters are locked. Unlock some chapters to shift their times.",
"ToastChaptersHaveErrors": "Chapters have errors",
"ToastChaptersInvalidShiftAmountLast": "Invalid shift amount. The last chapter start time would extend beyond the duration of this audiobook.",
"ToastChaptersInvalidShiftAmountStart": "Invalid shift amount. The first chapter would have zero or negative length and would be overwritten by the second chapter. Increase the start duration of second chapter.",
@@ -1012,6 +1030,8 @@
"ToastCollectionItemsAddFailed": "Item(s) added to collection failed",
"ToastCollectionRemoveSuccess": "Collection removed",
"ToastCollectionUpdateSuccess": "Collection updated",
"ToastConnectionNotAvailable": "Connection not available. Please try again later",
"ToastCoverSearchFailed": "Cover search failed",
"ToastCoverUpdateFailed": "Cover update failed",
"ToastDateTimeInvalidOrIncomplete": "Date and time is invalid or incomplete",
"ToastDeleteFileFailed": "Failed to delete file",
@@ -1086,6 +1106,7 @@
"ToastPlaylistUpdateSuccess": "Playlist updated",
"ToastPodcastCreateFailed": "Failed to create podcast",
"ToastPodcastCreateSuccess": "Podcast created successfully",
"ToastPodcastEpisodeUpdated": "Episode updated",
"ToastPodcastGetFeedFailed": "Failed to get podcast feed",
"ToastPodcastNoEpisodesInFeed": "No episodes found in RSS feed",
"ToastPodcastNoRssFeed": "Podcast does not have an RSS feed",
@@ -1136,5 +1157,13 @@
"ToastUserPasswordChangeSuccess": "Password changed successfully",
"ToastUserPasswordMismatch": "Passwords do not match",
"ToastUserPasswordMustChange": "New password cannot match old password",
"ToastUserRootRequireName": "Must enter a root username"
"ToastUserRootRequireName": "Must enter a root username",
"TooltipAddChapters": "Add chapter(s)",
"TooltipAddOneSecond": "Add 1 second",
"TooltipAdjustChapterStart": "Click to adjust start time",
"TooltipLockAllChapters": "Lock all chapters",
"TooltipLockChapter": "Lock chapter (Shift+click for range)",
"TooltipSubtractOneSecond": "Subtract 1 second",
"TooltipUnlockAllChapters": "Unlock all chapters",
"TooltipUnlockChapter": "Unlock chapter (Shift+click for range)"
}
+160 -98
View File
@@ -1,5 +1,6 @@
{
"ButtonAdd": "Añadir",
"ButtonAddApiKey": "Añadir clave API",
"ButtonAddChapters": "Añadir capítulos",
"ButtonAddDevice": "Añadir dispositivo",
"ButtonAddLibrary": "Añadir biblioteca",
@@ -19,9 +20,10 @@
"ButtonCheckAndDownloadNewEpisodes": "Comprobar y descargar episodios nuevos",
"ButtonChooseAFolder": "Elegir una carpeta",
"ButtonChooseFiles": "Elegir archivos",
"ButtonClearFilter": "Quitar filtros",
"ButtonClearFilter": "Vaciar filtro",
"ButtonClose": "Cerrar",
"ButtonCloseFeed": "Cerrar suministro",
"ButtonCloseSession": "Cerrar la sesión abierta",
"ButtonCloseSession": "Cerrar sesión abierta",
"ButtonCollections": "Colecciones",
"ButtonConfigureScanner": "Configurar Escáner",
"ButtonCreate": "Crear",
@@ -31,27 +33,28 @@
"ButtonEdit": "Editar",
"ButtonEditChapters": "Editar capítulos",
"ButtonEditPodcast": "Editar pódcast",
"ButtonEnable": "Permitir",
"ButtonEnable": "Habilitar",
"ButtonFireAndFail": "Ejecutado y fallido",
"ButtonFireOnTest": "Activar evento de prueba",
"ButtonForceReScan": "Forzar Re-Escaneo",
"ButtonFullPath": "Ruta completa",
"ButtonHide": "Ocultar",
"ButtonHome": "Inicio",
"ButtonIssues": "Problemas",
"ButtonIssues": "Incidencias",
"ButtonJumpBackward": "Retroceder",
"ButtonJumpForward": "Adelantar",
"ButtonLatest": "Más recientes",
"ButtonLibrary": "Biblioteca",
"ButtonLogout": "Salir",
"ButtonLookup": "Buscar",
"ButtonLogout": "Cerrar Sesión",
"ButtonLogoutAllDevices": "Cerrar sesión en todos los dispositivos",
"ButtonLookup": "Averiguar",
"ButtonManageTracks": "Gestionar pistas",
"ButtonMapChapterTitles": "Asignar Títulos a Capítulos",
"ButtonMatchAllAuthors": "Encontrar Todos los Autores",
"ButtonMatchBooks": "Encontrar Libros",
"ButtonMatchBooks": "Cotejar Libros",
"ButtonNevermind": "Olvidar",
"ButtonNext": "Siguiente",
"ButtonNextChapter": "Siguiente Capítulo",
"ButtonNextChapter": "Siguiente capítulo",
"ButtonNextItemInQueue": "El siguiente elemento en cola",
"ButtonOk": "Aceptar",
"ButtonOpenFeed": "Abrir suministro",
@@ -62,26 +65,26 @@
"ButtonPlaying": "Reproduciendo",
"ButtonPlaylists": "Listas de reproducción",
"ButtonPrevious": "Anterior",
"ButtonPreviousChapter": "Capítulo Anterior",
"ButtonProbeAudioFile": "Examinar archivo de audio",
"ButtonPurgeAllCache": "Purgar toda la antememoria",
"ButtonPurgeItemsCache": "Purgar antememoria de elementos",
"ButtonQueueAddItem": "Añadir a la cola",
"ButtonQueueRemoveItem": "Quitar de la cola",
"ButtonPreviousChapter": "Capítulo anterior",
"ButtonProbeAudioFile": "Sonda del archivo de audio",
"ButtonPurgeAllCache": "Purgar toda la caché",
"ButtonPurgeItemsCache": "Purgar caché de elementos",
"ButtonQueueAddItem": "Añadir a cola",
"ButtonQueueRemoveItem": "Quitar de cola",
"ButtonQuickEmbed": "Inserción rápida",
"ButtonQuickEmbedMetadata": "Agregue metadatos rápidamente",
"ButtonQuickMatch": "Encontrar Rápido",
"ButtonQuickEmbedMetadata": "Empotrar metadatos rápidamente",
"ButtonQuickMatch": "Cotejo Rápido",
"ButtonReScan": "Re-Escanear",
"ButtonRead": "Leer",
"ButtonReadLess": "Leer menos",
"ButtonReadMore": "Leer más",
"ButtonRefresh": "Actualizar",
"ButtonRefresh": "Recargar",
"ButtonRemove": "Quitar",
"ButtonRemoveAll": "Quitar todo",
"ButtonRemoveAllLibraryItems": "Quitar todos los elementos de la biblioteca",
"ButtonRemoveFromContinueListening": "Quitar de Continuar escuchando",
"ButtonRemoveFromContinueReading": "Quitar de Continuar leyendo",
"ButtonRemoveSeriesFromContinueSeries": "Quitar serie de Continuar serie",
"ButtonRemoveFromContinueListening": "Quitar desde Escucha Continua",
"ButtonRemoveFromContinueReading": "Quitar desde Continuar Leyendo",
"ButtonRemoveSeriesFromContinueSeries": "Quitar Series desde Series Continuas",
"ButtonReset": "Restablecer",
"ButtonResetToDefault": "Restaurar valores predeterminados",
"ButtonRestore": "Restaurar",
@@ -90,45 +93,47 @@
"ButtonSaveTracklist": "Guardar lista de pistas",
"ButtonScan": "Escanear",
"ButtonScanLibrary": "Escanear biblioteca",
"ButtonScrollLeft": "Desplazarse hacia la izquierda",
"ButtonScrollRight": "Desplazarse hacia la derecha",
"ButtonScrollLeft": "Desplazarse a la izquierda",
"ButtonScrollRight": "Desplazarse a la derecha",
"ButtonSearch": "Buscar",
"ButtonSelectFolderPath": "Seleccionar ruta de carpeta",
"ButtonSeries": "Series",
"ButtonSetChaptersFromTracks": "Seleccionar Capítulos Según las Pistas",
"ButtonSetChaptersFromTracks": "Establecer capítulos según las pistas",
"ButtonShare": "Compartir",
"ButtonShiftTimes": "Desplazar Tiempos",
"ButtonShiftTimes": "Veces de Desplazo",
"ButtonShow": "Mostrar",
"ButtonStartM4BEncode": "Iniciar Codificación M4B",
"ButtonStartMetadataEmbed": "Iniciar la Inserción de Metadata",
"ButtonStartMetadataEmbed": "Iniciar Inserción de Metadatos",
"ButtonStats": "Estadísticas",
"ButtonSubmit": "Enviar",
"ButtonSubmit": "Entregar",
"ButtonTest": "Prueba",
"ButtonUnlinkOpenId": "Desvincular OpenID",
"ButtonUpload": "Cargar",
"ButtonUploadBackup": "Cargar respaldo",
"ButtonUploadCover": "Cargar cubierta",
"ButtonUploadOPMLFile": "Cargar archivo OPML",
"ButtonUnlinkOpenId": "Desenlazar OpenID",
"ButtonUpload": "Subir",
"ButtonUploadBackup": "Subir Respaldo",
"ButtonUploadCover": "Subir Cubierta",
"ButtonUploadOPMLFile": "Subir archivo OPML",
"ButtonUserDelete": "Eliminar usuario {0}",
"ButtonUserEdit": "Editar usuario {0}",
"ButtonViewAll": "Ver todo",
"ButtonYes": "Sí",
"ErrorUploadFetchMetadataAPI": "Error al recuperar los metadatos",
"ErrorUploadFetchMetadataNoResults": "No se pudieron recuperar los metadatos; pruebe a actualizar el título o autor",
"ErrorUploadLacksTitle": "Debe tener título",
"ErrorUploadFetchMetadataNoResults": "No se pudieron recuperar los metadatos; pruebe a actualizar el título y/o autor",
"ErrorUploadLacksTitle": "Debe tener un título",
"HeaderAccount": "Cuenta",
"HeaderAddCustomMetadataProvider": "Añadir proveedor de metadatos personalizado",
"HeaderAdvanced": "Avanzado",
"HeaderAppriseNotificationSettings": "Configuración de notificaciones de Apprise",
"HeaderAudioTracks": "Pistas de audio",
"HeaderApiKeys": "Claves API",
"HeaderAppriseNotificationSettings": "Ajustes de notificaciones de Apprise",
"HeaderAudioTracks": "Pistas de Audio",
"HeaderAudiobookTools": "Herramientas de Gestión de Archivos de Audiolibro",
"HeaderAuthentication": "Autenticación",
"HeaderBackups": "Respaldos",
"HeaderChangePassword": "Cambiar contraseña",
"HeaderBulkChapterModal": "Añadir Múltiples Capítulos",
"HeaderChangePassword": "Cambiar Contraseña",
"HeaderChapters": "Capítulos",
"HeaderChooseAFolder": "Escoger una Carpeta",
"HeaderCollection": "Colección",
"HeaderCollectionItems": "Elementos en la colección",
"HeaderCollectionItems": "Elementos de colección",
"HeaderCover": "Cubierta",
"HeaderCurrentDownloads": "Descargas actuales",
"HeaderCustomMessageOnLogin": "Mensaje personalizado al acceder",
@@ -136,48 +141,49 @@
"HeaderDetails": "Detalles",
"HeaderDownloadQueue": "Cola de descargas",
"HeaderEbookFiles": "Archivos de libros digitales",
"HeaderEmail": "Correo electrónico",
"HeaderEmailSettings": "Configuración de correo electrónico",
"HeaderEmail": "Correo-e",
"HeaderEmailSettings": "Ajustes de correo-e",
"HeaderEpisodes": "Episodios",
"HeaderEreaderDevices": "Dispositivos Ereader",
"HeaderEreaderSettings": "Configuración del lector",
"HeaderEreaderDevices": "Dispositivos Lector-e",
"HeaderEreaderSettings": "Ajustes del Lector-e",
"HeaderFiles": "Archivos",
"HeaderFindChapters": "Buscar capítulos",
"HeaderIgnoredFiles": "Archivos ignorados",
"HeaderItemFiles": "Archivos de elementos",
"HeaderItemMetadataUtils": "Utilidades de metadatos de elementos",
"HeaderItemFiles": "Archivos del elemento",
"HeaderItemMetadataUtils": "Utilidades de metadatos del elemento",
"HeaderLastListeningSession": "Última sesión de escucha",
"HeaderLatestEpisodes": "Episodios más recientes",
"HeaderLibraries": "Bibliotecas",
"HeaderLibraryFiles": "Archivos de biblioteca",
"HeaderLibraryStats": "Estadísticas de biblioteca",
"HeaderListeningSessions": "Sesión",
"HeaderListeningSessions": "Sesiones Listadas",
"HeaderListeningStats": "Estadísticas de Tiempo Escuchado",
"HeaderLogin": "Acceder",
"HeaderLogs": "Registros",
"HeaderLogin": "Inicio de Sesión",
"HeaderLogs": "Bitácoras",
"HeaderManageGenres": "Gestionar géneros",
"HeaderManageTags": "Gestionar etiquetas",
"HeaderMapDetails": "Asignar Detalles",
"HeaderMatch": "Encontrar",
"HeaderMatch": "Coincidir",
"HeaderMetadataOrderOfPrecedence": "Orden de precedencia de metadatos",
"HeaderMetadataToEmbed": "Metadatos para Insertar",
"HeaderNewAccount": "Cuenta nueva",
"HeaderMetadataToEmbed": "Metadatos para empotrar",
"HeaderNewAccount": "Crear Cuenta",
"HeaderNewApiKey": "Nueva clave API",
"HeaderNewLibrary": "Biblioteca nueva",
"HeaderNotificationCreate": "Crear notificación",
"HeaderNotificationUpdate": "Notificación de actualización",
"HeaderNotificationCreate": "Crear Notificación",
"HeaderNotificationUpdate": "Notificación de Actualización",
"HeaderNotifications": "Notificaciones",
"HeaderOpenIDConnectAuthentication": "Autenticación OpenID Connect",
"HeaderOpenListeningSessions": "Sesiones públicas de escucha",
"HeaderOpenListeningSessions": "Abrir escucha de sesiones",
"HeaderOpenRSSFeed": "Abrir suministro RSS",
"HeaderOtherFiles": "Otros archivos",
"HeaderPasswordAuthentication": "Autenticación por contraseña",
"HeaderPermissions": "Permisos",
"HeaderPlayerQueue": "Cola del reproductor",
"HeaderPlayerSettings": "Configuración del reproductor",
"HeaderPlayerSettings": "Ajustes del reproductor",
"HeaderPlaylist": "Lista de reproducción",
"HeaderPlaylistItems": "Elementos de lista de reproducción",
"HeaderPodcastsToAdd": "Pódcast para añadir",
"HeaderPresets": "Preconfiguraciones",
"HeaderPresets": "Preajustes",
"HeaderPreviewCover": "Previsualizar cubierta",
"HeaderRSSFeedGeneral": "Detalles de RSS",
"HeaderRSSFeedIsOpen": "El suministro RSS está abierto",
@@ -186,17 +192,19 @@
"HeaderRemoveEpisodes": "Quitar {0} episodios",
"HeaderSavedMediaProgress": "Guardar Progreso de Multimedia",
"HeaderSchedule": "Horario",
"HeaderScheduleEpisodeDownloads": "Programar descargas automáticas de episodios",
"HeaderScheduleLibraryScans": "Programar Escaneo Automático de Biblioteca",
"HeaderScheduleEpisodeDownloads": "Planificador de auto‐descargas de episodios",
"HeaderScheduleLibraryScans": "Planificar Auto‐Escaneo de Biblioteca",
"HeaderSession": "Sesión",
"HeaderSetBackupSchedule": "Programar Respaldo",
"HeaderSettings": "Configuración",
"HeaderSessions": "Sesiones",
"HeaderSetBackupSchedule": "Establecer Planificación de Respaldo",
"HeaderSettings": "Ajustes",
"HeaderSettingsDisplay": "Interfaz",
"HeaderSettingsExperimental": "Funcionalidades experimentales",
"HeaderSettingsExperimental": "Características experimentales",
"HeaderSettingsGeneral": "Generales",
"HeaderSettingsScanner": "Escáner",
"HeaderSettingsSecurity": "Seguridad",
"HeaderSettingsWebClient": "Cliente web",
"HeaderSleepTimer": "Temporizador de apagado",
"HeaderSleepTimer": "Cronómetro de dormida",
"HeaderStatsLargestItems": "Elementos más grandes",
"HeaderStatsLongestItems": "Elementos más extensos (h)",
"HeaderStatsMinutesListeningChart": "Minutos escuchando (últimos 7 días)",
@@ -206,6 +214,7 @@
"HeaderTableOfContents": "Sumario",
"HeaderTools": "Herramientas",
"HeaderUpdateAccount": "Actualizar cuenta",
"HeaderUpdateApiKey": "Actualizar clave API",
"HeaderUpdateAuthor": "Actualizar autor",
"HeaderUpdateDetails": "Actualizar detalles",
"HeaderUpdateLibrary": "Actualizar biblioteca",
@@ -226,25 +235,29 @@
"LabelAddToCollectionBatch": "Añadir {0} libros a colección",
"LabelAddToPlaylist": "Añadir a lista de reproducción",
"LabelAddToPlaylistBatch": "Añadir {0} elementos a lista de reproducción",
"LabelAddedAt": "Añadido",
"LabelAddedDate": "{0} Añadido",
"LabelAddedAt": "Añadido en",
"LabelAddedDate": "Añadido {0}",
"LabelAdminUsersOnly": "Solamente usuarios administradores",
"LabelAll": "Todos",
"LabelAllEpisodesDownloaded": "Todos los episodios descargados",
"LabelAllUsers": "Todos los usuarios",
"LabelAllUsersExcludingGuests": "Todos los usuarios excepto invitados",
"LabelAllUsersIncludingGuests": "Todos los usuarios e invitados",
"LabelAlreadyInYourLibrary": "Ya existe en la Biblioteca",
"LabelApiToken": "Token de la API",
"LabelAlreadyInYourLibrary": "Ya dentro de tu biblioteca",
"LabelApiKeyCreated": "La clave de API “{0}” se ha creado correctamente.",
"LabelApiKeyCreatedDescription": "Asegúrate de copiar la clave de API ahora, no la volverás a ver otra vez.",
"LabelApiKeyUser": "Actuar en nombre del usuario",
"LabelApiKeyUserDescription": "Esta clave de API tendrá los mismos permisos que el usuario al que representa. En los registros se verá como si la solicitud la hubiera hecho el usuario directamente.",
"LabelApiToken": "Vale del API",
"LabelAppend": "Adjuntar",
"LabelAudioBitrate": "Tasa de bits del audio (por ejemplo, 128k)",
"LabelAudioBitrate": "Tasa de bit del audio (p.ej., 128k)",
"LabelAudioChannels": "Canales de audio (1 o 2)",
"LabelAudioCodec": "Códec de audio",
"LabelAuthor": "Autor",
"LabelAuthorFirstLast": "Autor (Nombre Apellido)",
"LabelAuthorLastFirst": "Autor (Apellido, Nombre)",
"LabelAuthors": "Autores",
"LabelAutoDownloadEpisodes": "Descargar episodios automáticamente",
"LabelAutoDownloadEpisodes": "Auto‐Descargar episodios",
"LabelAutoFetchMetadata": "Recuperar metadatos automáticamente",
"LabelAutoFetchMetadataHelp": "Obtiene metadatos de título, autor y serie para agilizar la carga. Es posible que haya que cotejar metadatos adicionales después de la carga.",
"LabelAutoLaunch": "Lanzamiento automático",
@@ -275,15 +288,16 @@
"LabelClickToUseCurrentValue": "Pulse para utilizar el valor actual",
"LabelClosePlayer": "Cerrar reproductor",
"LabelCodec": "Codec",
"LabelCollapseSeries": "Colapsar serie",
"LabelCollapseSeries": "Colapsar Series",
"LabelCollapseSubSeries": "Contraer la subserie",
"LabelCollection": "Colección",
"LabelCollections": "Colecciones",
"LabelComplete": "Completo",
"LabelConfirmPassword": "Confirmar contraseña",
"LabelContinueListening": "Seguir escuchando",
"LabelContinueListening": "Seguir Escuchando",
"LabelContinueReading": "Continuar leyendo",
"LabelContinueSeries": "Continuar series",
"LabelCorsAllowed": "Orígenes CORS Permitidos",
"LabelCover": "Cubierta",
"LabelCoverImageURL": "URL de imagen de cubierta",
"LabelCoverProvider": "Proveedor de cubiertas",
@@ -297,6 +311,7 @@
"LabelDeleteFromFileSystemCheckbox": "Eliminar del sistema de archivos (desmarque para quitar de la base de datos solamente)",
"LabelDescription": "Descripción",
"LabelDeselectAll": "Deseleccionar Todos",
"LabelDetectedPattern": "Patrón detectado:",
"LabelDevice": "Dispositivo",
"LabelDeviceInfo": "Información del dispositivo",
"LabelDeviceIsAvailableTo": "El dispositivo está disponible para...",
@@ -312,14 +327,14 @@
"LabelDurationComparisonLonger": "({0} más largo)",
"LabelDurationComparisonShorter": "({0} más corto)",
"LabelDurationFound": "Duración Comprobada:",
"LabelEbook": "Libro electrónico",
"LabelEbooks": "Libros electrónicos",
"LabelEbook": "Libro-e",
"LabelEbooks": "Libros-e",
"LabelEdit": "Editar",
"LabelEmail": "Correo electrónico",
"LabelEmailSettingsFromAddress": "Remitente",
"LabelEmailSettingsRejectUnauthorized": "Rechazar certificados no autorizados",
"LabelEmailSettingsRejectUnauthorizedHelp": "Desactivar la validación de certificados SSL puede exponer su conexión a riesgos de seguridad, como los ataques por intermediario. Desactive esta opción solo si conoce las implicaciones y confía en el servidor de correo al que se conecta.",
"LabelEmailSettingsSecure": "Seguridad",
"LabelEmailSettingsSecure": "Seguro",
"LabelEmailSettingsSecureHelp": "Si está activado, se usará TLS para conectarse al servidor. Si está apagado, se usará TLS si su servidor tiene soporte para la extensión STARTTLS. En la mayoría de los casos, puede dejar esta opción activada si se está conectando al puerto 465. Apáguela en el caso de usar los puertos 587 o 25. (de nodemailer.com/smtp/#authentication)",
"LabelEmailSettingsTestAddress": "Probar dirección",
"LabelEmbeddedCover": "Cubierta incrustada",
@@ -346,6 +361,10 @@
"LabelExample": "Ejemplo",
"LabelExpandSeries": "Ampliar serie",
"LabelExpandSubSeries": "Expandir la subserie",
"LabelExpired": "Expirado",
"LabelExpiresAt": "Expira El",
"LabelExpiresInSeconds": "Expira en (segundos)",
"LabelExpiresNever": "Nunca",
"LabelExplicit": "Explícito",
"LabelExplicitChecked": "Explícito (marcado)",
"LabelExplicitUnchecked": "No Explícito (sin marcar)",
@@ -360,11 +379,12 @@
"LabelFilename": "Nombre del archivo",
"LabelFilterByUser": "Filtrar por Usuario",
"LabelFindEpisodes": "Buscar Episodio",
"LabelFinished": "Terminado",
"LabelFinished": "Finalizado",
"LabelFinishedDate": "Finalizado {0}",
"LabelFolder": "Carpeta",
"LabelFolders": "Carpetas",
"LabelFontBold": "Negrilla",
"LabelFontBoldness": "Peso tipográfico",
"LabelFontBoldness": "Tipográfico sin Negrita",
"LabelFontFamily": "Familia tipográfica",
"LabelFontItalic": "Itálica",
"LabelFontScale": "Escala de letra",
@@ -374,8 +394,8 @@
"LabelGenre": "Género",
"LabelGenres": "Géneros",
"LabelHardDeleteFile": "Eliminar Definitivamente",
"LabelHasEbook": "Tiene un libro",
"LabelHasSupplementaryEbook": "Tiene un libro complementario",
"LabelHasEbook": "Tiene libro-e",
"LabelHasSupplementaryEbook": "Tiene un libro-e suplementario",
"LabelHideSubtitles": "Ocultar subtítulos",
"LabelHighestPriority": "Mayor prioridad",
"LabelHost": "Anfitrión",
@@ -397,6 +417,7 @@
"LabelIntervalEveryHour": "Cada hora",
"LabelIntervalEveryMinute": "Cada minuto",
"LabelInvert": "Invertir",
"LabelIpAddress": "Dirección IP",
"LabelItem": "Elemento",
"LabelJumpBackwardAmount": "Cantidad de saltos hacia atrás",
"LabelJumpForwardAmount": "Cantidad de saltos hacia adelante",
@@ -405,6 +426,7 @@
"LabelLanguages": "Idiomas",
"LabelLastBookAdded": "Último libro añadido",
"LabelLastBookUpdated": "Último libro actualizado",
"LabelLastProgressDate": "Último progreso: {0}",
"LabelLastSeen": "Última Vez Visto",
"LabelLastTime": "Última Vez",
"LabelLastUpdate": "Última Actualización",
@@ -417,6 +439,9 @@
"LabelLibraryFilterSublistEmpty": "Sin {0}",
"LabelLibraryItem": "Elemento de Biblioteca",
"LabelLibraryName": "Nombre de Biblioteca",
"LabelLibrarySortByProgress": "Progreso: Último actualizado",
"LabelLibrarySortByProgressFinished": "Progreso: Finalizado",
"LabelLibrarySortByProgressStarted": "Progreso: Iniciado",
"LabelLimit": "Limites",
"LabelLineSpacing": "Interlineado",
"LabelListenAgain": "Volver a escuchar",
@@ -425,6 +450,7 @@
"LabelLogLevelWarn": "Advertencia",
"LabelLookForNewEpisodesAfterDate": "Buscar Nuevos Episodios a partir de esta Fecha",
"LabelLowestPriority": "Menor prioridad",
"LabelMatchConfidence": "Confidencia",
"LabelMatchExistingUsersBy": "Emparejar a los usuarios existentes por",
"LabelMatchExistingUsersByDescription": "Se utiliza para conectar usuarios existentes. Una vez conectados, los usuarios serán emparejados por un identificador único de su proveedor de SSO",
"LabelMaxEpisodesToDownload": "Número máximo # de episodios para descargar. Usa 0 para descargar una cantidad ilimitada.",
@@ -443,7 +469,7 @@
"LabelMissingEbook": "No tiene libro electrónico",
"LabelMissingSupplementaryEbook": "No tiene libro electrónico suplementario",
"LabelMobileRedirectURIs": "URIs de redirección a móviles permitidos",
"LabelMobileRedirectURIsDescription": "Esta es una lista blanca de URI de redireccionamiento válidos para aplicaciones móviles. El predeterminado es <code> audiobookshelf</code> , que puede eliminar o complementar con URI adicionales para la integración de aplicaciones de terceros. Usando un asterisco (<code> *</code> ) como única entrada que permite cualquier URI.",
"LabelMobileRedirectURIsDescription": "Esta es una lista en blanco de las URI de re‐direccionamiento válidos para aplicaciones móviles. El predeterminado es <code>audiobookshelf</code> , que puede retirar o sustituir con las URI adicionales para la integración de aplicaciones de terceros. Usando un asterisco (<code>*</code> ) como única entrada que permite cualquier URI.",
"LabelMore": "Más",
"LabelMoreInfo": "Más información",
"LabelName": "Nombre",
@@ -454,10 +480,12 @@
"LabelNewestAuthors": "Autores más nuevos",
"LabelNewestEpisodes": "Episodios más nuevos",
"LabelNextBackupDate": "Fecha del siguiente respaldo",
"LabelNextChapters": "Los próximos capítulos serán:",
"LabelNextScheduledRun": "Próxima ejecución programada",
"LabelNoApiKeys": "Sin claves API",
"LabelNoCustomMetadataProviders": "Sin proveedores de metadatos personalizados",
"LabelNoEpisodesSelected": "Ningún Episodio Seleccionado",
"LabelNotFinished": "No terminado",
"LabelNotFinished": "No finalizado",
"LabelNotStarted": "Sin iniciar",
"LabelNotes": "Notas",
"LabelNotificationAppriseURL": "URL(s) de Apprise",
@@ -470,7 +498,8 @@
"LabelNotificationsMaxQueueSize": "Tamaño máximo de la cola de notificaciones",
"LabelNotificationsMaxQueueSizeHelp": "Las notificaciones están limitadas a 1 por segundo. Las notificaciones serán ignoradas si llegan al numero máximo de cola para prevenir spam de eventos.",
"LabelNumberOfBooks": "Número de libros",
"LabelNumberOfEpisodes": "N.º de episodios",
"LabelNumberOfChapters": "Número de capítulos:",
"LabelNumberOfEpisodes": "Nº de episodios",
"LabelOpenIDAdvancedPermsClaimDescription": "Nombre de la notificación de OpenID que contiene permisos avanzados para acciones de usuario dentro de la aplicación que se aplicarán a roles que no sean de administrador (<b>si están configurados</b>). Si el reclamo no aparece en la respuesta, se denegará el acceso a ABS. Si falta una sola opción, se tratará como <code>falsa</code>. Asegúrese de que la notificación del proveedor de identidades coincida con la estructura esperada:",
"LabelOpenIDClaims": "Deje las siguientes opciones vacías para desactivar la asignación avanzada de grupos y permisos, lo que asignaría de manera automática al grupo «Usuario».",
"LabelOpenIDGroupClaimDescription": "Nombre de la declaración OpenID que contiene una lista de grupos del usuario. Comúnmente conocidos como <code>grupos</code>. <b>Si se configura</b>, la aplicación asignará automáticamente roles en función de la pertenencia a grupos del usuario, siempre que estos grupos se denominen \"admin\", \"user\" o \"guest\" en la notificación. La solicitud debe contener una lista, y si un usuario pertenece a varios grupos, la aplicación asignará el rol correspondiente al mayor nivel de acceso. Si ningún grupo coincide, se denegará el acceso.",
@@ -500,7 +529,7 @@
"LabelPodcasts": "Pódcast",
"LabelPort": "Puerto",
"LabelPrefixesToIgnore": "Prefijos para ignorar (no distingue entre mayúsculas y minúsculas)",
"LabelPreventIndexing": "Evite que los directorios de pódcast de iTunes y Google indicen su suministro",
"LabelPreventIndexing": "Evite que los directorios de pódcast de iTunes y Google indexen su suministro",
"LabelPrimaryEbook": "Libro electrónico principal",
"LabelProgress": "Progreso",
"LabelProvider": "Proveedor",
@@ -512,11 +541,11 @@
"LabelPublishedDecades": "Décadas publicadas",
"LabelPublisher": "Editor",
"LabelPublishers": "Editores",
"LabelRSSFeedCustomOwnerEmail": "Correo electrónico de dueño personalizado",
"LabelRSSFeedCustomOwnerName": "Nombre de dueño personalizado",
"LabelRSSFeedOpen": "Suministro RSS abierto",
"LabelRSSFeedCustomOwnerEmail": "Correo-e de propietario personalizado",
"LabelRSSFeedCustomOwnerName": "Nombre de propietario personalizado",
"LabelRSSFeedOpen": "Fuente RSS Abierta",
"LabelRSSFeedPreventIndexing": "Evitar indización",
"LabelRSSFeedSlug": "«Slug» de suministro RSS",
"LabelRSSFeedSlug": "Ficha de suministro RSS",
"LabelRSSFeedURL": "URL de suministro RSS",
"LabelRandomly": "Aleatorio",
"LabelReAddSeriesToContinueListening": "Volver a agregar la serie para continuar escuchándola",
@@ -544,11 +573,12 @@
"LabelSelectAll": "Seleccionar todo",
"LabelSelectAllEpisodes": "Seleccionar todos los episodios",
"LabelSelectEpisodesShowing": "Seleccionar los {0} episodios visibles",
"LabelSelectUser": "Seleccionar usuario",
"LabelSelectUsers": "Seleccionar usuarios",
"LabelSendEbookToDevice": "Enviar libro electrónico a...",
"LabelSequence": "Secuencia",
"LabelSerial": "En serie",
"LabelSeries": "Serie",
"LabelSeries": "Series",
"LabelSeriesName": "Nombre de la serie",
"LabelSeriesProgress": "Progreso de la serie",
"LabelServerLogLevel": "Nivel de registro del servidor",
@@ -561,8 +591,8 @@
"LabelSettingsBookshelfViewHelp": "Diseño Esqueuomorfo con Estantes de Madera",
"LabelSettingsChromecastSupport": "Compatibilidad con Chromecast",
"LabelSettingsDateFormat": "Formato de Fecha",
"LabelSettingsEnableWatcher": "Buscar cambios automáticamente en las bibliotecas",
"LabelSettingsEnableWatcherForLibrary": "Buscar cambios automáticamente en la biblioteca",
"LabelSettingsEnableWatcher": "Vigilar automáticamente los cambios en bibliotecas",
"LabelSettingsEnableWatcherForLibrary": "Vigilar automáticamente los cambios de biblioteca",
"LabelSettingsEnableWatcherHelp": "Permite agregar/actualizar elementos automáticamente cuando se detectan cambios en los archivos. *Requiere reiniciar el servidor",
"LabelSettingsEpubsAllowScriptedContent": "Permitir scripts en epubs",
"LabelSettingsEpubsAllowScriptedContentHelp": "Permitir que los archivos epub ejecuten scripts. Se recomienda mantener esta opción desactivada a menos que confíe en el origen de los archivos epub.",
@@ -595,14 +625,14 @@
"LabelSettingsStoreMetadataWithItemHelp": "Por defecto, los archivos de metadatos se almacenan en /metadata/items. Si habilita esta opción, los archivos de metadatos se guardarán en la carpeta de elementos de su biblioteca",
"LabelSettingsTimeFormat": "Formato de Tiempo",
"LabelShare": "Compartir",
"LabelShareDownloadableHelp": "Permite a quienes posean el enlace de compartición descargar un archivo ZIP del elemento de la biblioteca.",
"LabelShareDownloadableHelp": "Permite a quienes posean el enlace de compartición descargar un archivo zip del elemento de la biblioteca.",
"LabelShareOpen": "abrir un recurso compartido",
"LabelShareURL": "Compartir la URL",
"LabelShowAll": "Mostrar todo",
"LabelShowSeconds": "Mostrar segundos",
"LabelShowSubtitles": "Mostrar subtítulos",
"LabelSize": "Tamaño",
"LabelSleepTimer": "Temporizador de apagado",
"LabelSleepTimer": "Temporizador de dormida",
"LabelSlug": "Slug",
"LabelSortAscending": "Ascendente",
"LabelSortDescending": "Descendente",
@@ -611,6 +641,7 @@
"LabelStartTime": "Tiempo de Inicio",
"LabelStarted": "Iniciado",
"LabelStartedAt": "Iniciado En",
"LabelStartedDate": "Iniciado {0}",
"LabelStatsAudioTracks": "Pistas de Audio",
"LabelStatsAuthors": "Autores",
"LabelStatsBestDay": "Mejor día",
@@ -640,6 +671,7 @@
"LabelTheme": "Tema",
"LabelThemeDark": "Oscuro",
"LabelThemeLight": "Claro",
"LabelThemeSepia": "Sepia",
"LabelTimeBase": "Tiempo Base",
"LabelTimeDurationXHours": "{0} horas",
"LabelTimeDurationXMinutes": "{0} minutos",
@@ -708,8 +740,10 @@
"MessageAddToPlayerQueue": "Agregar a fila del Reproductor",
"MessageAppriseDescription": "Para usar esta función deberás tener <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">la API de Apprise</a> corriendo o una API que maneje los mismos resultados. <br/>La URL de la API de Apprise debe tener la misma ruta de archivos que donde se envían las notificaciones. Por ejemplo: si su API esta en <code>http://192.168.1.1:8337</code> entonces pondría <code>http://192.168.1.1:8337/notify</code>.",
"MessageAsinCheck": "Cerciórese de usar el ASIN de la región correcta de Audible, no de Amazon.",
"MessageAuthenticationLegacyTokenWarning": "Los vales de API heredados serán retirados en el futuro. Utilice las <a href=\"/config/api-keys\">claves de API</a> en su lugar.",
"MessageAuthenticationOIDCChangesRestart": "Reinicie el servidor tras el guardado para aplicar los cambios de OIDC.",
"MessageBackupsDescription": "Los respaldos incluyen: usuarios, el progreso del los usuarios, los detalles de los elementos de la biblioteca, la configuración del servidor y las imágenes en <code>/metadata/items</code> y <code>/metadata/authors</code>. Los Respaldos <strong>NO</strong> incluyen ningún archivo guardado en la carpeta de tu biblioteca.",
"MessageAuthenticationSecurityMessage": "La autenticación ha sido mejorada para seguridad. Todos los usuarios requieren reiniciar sesión.",
"MessageBackupsDescription": "Los respaldos incluyen: usuarios, el progreso del los usuarios, los detalles de los elementos de la biblioteca, la configuración del servidor y las imágenes en <code>/metadata/items</code> y <code>/metadata/authors</code>. Los Respaldos <strong>no</strong> incluyen ningún archivo guardado en la carpeta de tu biblioteca.",
"MessageBackupsLocationEditNote": "Nota: actualizar la ubicación de la copia de respaldo no moverá ni modificará los respaldos existentes",
"MessageBackupsLocationNoEditNote": "Nota: la ubicación de la copia de respaldo se establece a través de una variable de entorno y no se puede cambiar aquí.",
"MessageBackupsLocationPathEmpty": "La ruta de la copia de seguridad no puede estar vacía",
@@ -722,6 +756,7 @@
"MessageBookshelfNoResultsForFilter": "El filtro «{0}: {1}» no produjo ningún resultado",
"MessageBookshelfNoResultsForQuery": "No hay resultados para la consulta",
"MessageBookshelfNoSeries": "No tiene ninguna serie",
"MessageBulkChapterPattern": "¿Cuántos capítulos desea añadir con este patrón de numeración?",
"MessageChapterEndIsAfter": "El final del capítulo es después del final de tu audiolibro",
"MessageChapterErrorFirstNotZero": "El primer capítulo debe iniciar en 0",
"MessageChapterErrorStartGteDuration": "El tiempo de inicio no es válido: debe ser inferior a la duración del audiolibro",
@@ -730,6 +765,7 @@
"MessageChaptersNotFound": "Capítulos no encontrados",
"MessageCheckingCron": "Revisando cron...",
"MessageConfirmCloseFeed": "¿Confirma que quiere cerrar este suministro?",
"MessageConfirmDeleteApiKey": "¿Está seguro que desea eliminar la clave API «{0}»?",
"MessageConfirmDeleteBackup": "¿Confirma que quiere eliminar el respaldo de {0}?",
"MessageConfirmDeleteDevice": "¿Confirma que quiere eliminar el lector electrónico «{0}»?",
"MessageConfirmDeleteFile": "Esto eliminará el archivo del sistema de archivos. ¿Quiere continuar?",
@@ -741,6 +777,7 @@
"MessageConfirmDeleteSession": "¿Confirma que quiere eliminar esta sesión?",
"MessageConfirmEmbedMetadataInAudioFiles": "¿Confirma que quiere incrustar metadatos en {0} archivos de audio?",
"MessageConfirmForceReScan": "¿Confirma que quiere forzar un reescaneo?",
"MessageConfirmLogoutDevice": "¿Seguro que quieres cerrar la sesión de «{0}»?",
"MessageConfirmMarkAllEpisodesFinished": "¿Confirma que quiere marcar todos los episodios como terminados?",
"MessageConfirmMarkAllEpisodesNotFinished": "¿Confirma que quiere marcar todos los episodios como no terminados?",
"MessageConfirmMarkItemFinished": "¿Confirma que quiere marcar «{0}» como terminado?",
@@ -748,8 +785,8 @@
"MessageConfirmMarkSeriesFinished": "¿Confirma que quiere marcar todos los libros de esta serie como terminados?",
"MessageConfirmMarkSeriesNotFinished": "¿Confirma que quiere marcar todos los libros de esta serie como no terminados?",
"MessageConfirmNotificationTestTrigger": "¿Activar esta notificación con datos de prueba?",
"MessageConfirmPurgeCache": "Purgar la antememoria eliminará el directorio completo ubicado en <code>/metadata/cache</code>. <br /><br />¿Confirma que quiere eliminar el directorio de antememoria?",
"MessageConfirmPurgeItemsCache": "Purgar la antememoria de elementos eliminará el directorio completo ubicado en <code>/metadata/cache/items</code>.<br />¿Lo confirma?",
"MessageConfirmPurgeCache": "La purga del caché eliminará el directorio completo en <code>/metadata/cache</code>. <br /><br />¿Confirma que desea quitar el directorio de caché?",
"MessageConfirmPurgeItemsCache": "Purgar el caché de elementos eliminará el directorio completo ubicado en <code>/metadata/cache/items</code>.<br />¿Lo confirma?",
"MessageConfirmQuickEmbed": "Atención: la incrustación rápida no realiza copias de respaldo a ninguno de sus archivos de audio. Cerciórese de haber realizado una copia de los mismos previamente. <br><br>¿Quiere continuar?",
"MessageConfirmQuickMatchEpisodes": "El reconocimiento rápido de extensiones sobrescribirá los detalles si se encuentra una coincidencia. Se actualizarán las extensiones no reconocidas. ¿Quiere continuar?",
"MessageConfirmReScanLibraryItems": "¿Confirma que quiere volver a analizar {0} elementos?",
@@ -757,6 +794,7 @@
"MessageConfirmRemoveAuthor": "¿Confirma que quiere quitar el autor «{0}»?",
"MessageConfirmRemoveCollection": "¿Confirma que quiere quitar la colección «{0}»?",
"MessageConfirmRemoveEpisode": "¿Confirma que quiere quitar el episodio «{0}»?",
"MessageConfirmRemoveEpisodeNote": "Nota: Esto no borra el archivo de audio a menos que se active la opción \"Borrado definitivo del archivo\"",
"MessageConfirmRemoveEpisodes": "¿Confirma que quiere quitar {0} episodios?",
"MessageConfirmRemoveListeningSessions": "¿Confirma que quiere quitar {0} sesiones de escucha?",
"MessageConfirmRemoveMetadataFiles": "¿Confirma que quiere quitar todos los archivos metadata.{0} en las carpetas de elementos de su biblioteca?",
@@ -774,14 +812,16 @@
"MessageDaysListenedInTheLastYear": "{0} días escuchados el año pasado",
"MessageDownloadingEpisode": "Descargando episodio",
"MessageDragFilesIntoTrackOrder": "Arrastre los archivos al orden correcto de las pistas",
"MessageEmbedFailed": "Falló la incrustación.",
"MessageEmbedFinished": "Finalizó la incrustación.",
"MessageEmbedFailed": "Incorporación incorrecta.",
"MessageEmbedFinished": "Incorporación finalizada.",
"MessageEmbedQueue": "En cola para incrustar metadatos ({0} en cola)",
"MessageEpisodesQueuedForDownload": "{0} episodio(s) en cola para descargar",
"MessageEreaderDevices": "Para garantizar la entrega de libros electrónicos, es posible que tenga que agregar la dirección de correo electrónico anterior como remitente válido para cada dispositivo enumerado a continuación.",
"MessageFeedURLWillBe": "El URL del suministro será {0}",
"MessageFetching": "Recuperando...",
"MessageForceReScanDescription": "Escaneará todos los archivos como un nuevo escaneo. Archivos de audio con etiquetas ID3, archivos OPF y archivos de texto serán escaneados como nuevos.",
"MessageHeatmapListeningTimeTooltip": "<strong>{0} escuchando</strong> en {1}",
"MessageHeatmapNoListeningSessions": "No enumera sesiones en {0}",
"MessageImportantNotice": "¡Notificación importante!",
"MessageInsertChapterBelow": "Insertar capítulo debajo",
"MessageInvalidAsin": "ASIN no válido",
@@ -814,7 +854,7 @@
"MessageNoEpisodes": "Ningún episodio",
"MessageNoFoldersAvailable": "Ninguna carpeta disponible",
"MessageNoGenres": "Ningún género",
"MessageNoIssues": "Ningún número",
"MessageNoIssues": "Sin incidencias",
"MessageNoItems": "Ningún elemento",
"MessageNoItemsFound": "Ningún elemento encontrado",
"MessageNoListeningSessions": "Ninguna sesión de escucha",
@@ -852,7 +892,7 @@
"MessageResetChaptersConfirm": "¿Confirma que quiere deshacer los cambios y restablecer los capítulos a su estado original?",
"MessageRestoreBackupConfirm": "¿Confirma que quiere restaurar el respaldo creado el",
"MessageRestoreBackupWarning": "Restaurar sobrescribirá toda la base de datos localizada en /config y las imágenes de portadas en /metadata/items y /metadata/authors.<br /><br />El respaldo no modifica ningún archivo en las carpetas de su biblioteca. Si ha habilitado la opción del servidor para almacenar portadas y metadata en las carpetas de su biblioteca, esos archivos no se respaldan o sobrescriben.<br /><br />Todos los clientes que usen su servidor se actualizarán automáticamente.",
"MessageScheduleLibraryScanNote": "Para la mayoría de los usuarios, se recomienda dejar esta función desactivada y mantener activada la configuración del observador de carpetas. El observador de carpetas detectará automáticamente los cambios en las carpetas de la biblioteca. El observador de carpetas no funciona para todos los sistemas de archivos (como NFS), por lo que se pueden utilizar exploraciones programadas de la biblioteca en su lugar.",
"MessageScheduleLibraryScanNote": "Para muchos usuarios, es recomendado dejar esta característica inhabilitada y mantener habilitados los ajustes de la «Vigía automática de cambio de biblioteca»: detectará automáticamente los cambios en sus carpetas de bibliotecas. Habilitar esta características si «Vigía automática de cambio de biblioteca» no funciona en su sistema de archivo (como NFS).",
"MessageScheduleRunEveryWeekdayAtTime": "Ejecutar cada {0} a las {1}",
"MessageSearchResultsFor": "Resultados de la búsqueda de",
"MessageSelected": "{0} seleccionado(s)",
@@ -918,7 +958,10 @@
"NotificationOnBackupCompletedDescription": "Se activa cuando se completa una copia de seguridad",
"NotificationOnBackupFailedDescription": "Se activa cuando falla una copia de seguridad",
"NotificationOnEpisodeDownloadedDescription": "Se activa cuando se descarga automáticamente un episodio de un podcast",
"NotificationOnRSSFeedDisabledDescription": "Se activa cuando las descargas automáticas de episodios se desactivan debido a varios intentos fallidos",
"NotificationOnRSSFeedFailedDescription": "Se activa cuando la solicitud a la fuente RSS falla durante una descarga automática de episodio",
"NotificationOnTestDescription": "Evento para probar el sistema de notificaciones",
"PlaceholderBulkChapterInput": "Ingrese título de capítulo o use numeración (ej. 'Episodio 1', 'Capítulo 10', '1.')",
"PlaceholderNewCollection": "Nuevo nombre de la colección",
"PlaceholderNewFolderPath": "Nueva ruta de carpeta",
"PlaceholderNewPlaylist": "Nuevo nombre de la lista de reproducción",
@@ -972,8 +1015,12 @@
"ToastBookmarkCreateFailed": "No se pudo crear el marcador",
"ToastBookmarkCreateSuccess": "Marcador añadido",
"ToastBookmarkRemoveSuccess": "Marcador eliminado",
"ToastBulkChapterInvalidCount": "Por favor ingrese un número válido entre 1 y 150",
"ToastCachePurgeFailed": "No se pudo purgar la antememoria",
"ToastCachePurgeSuccess": "Se purgó la antememoria correctamente",
"ToastChapterLocked": "El capítulo está bloqueado.",
"ToastChapterStartTimeAdjusted": "El capítulo inicia el tiempo ajustado en {0} segundos",
"ToastChaptersAllLocked": "Todos los capítulos están bloqueados. Desbloquee algunos capítulos para cambiar sus tiempos.",
"ToastChaptersHaveErrors": "Los capítulos tienen errores",
"ToastChaptersInvalidShiftAmountLast": "Cantidad de desplazamiento no válida. La hora de inicio del último capítulo se extendería más allá de la duración de este audiolibro.",
"ToastChaptersInvalidShiftAmountStart": "Cantidad de desplazamiento no válida. El primer capítulo tendría una duración cero o negativa y lo sobrescribiría el segundo capítulo. Aumente la duración inicial del segundo capítulo.",
@@ -983,6 +1030,8 @@
"ToastCollectionItemsAddFailed": "Artículo(s) añadido(s) a la colección fallido(s)",
"ToastCollectionRemoveSuccess": "Colección quitada",
"ToastCollectionUpdateSuccess": "Colección actualizada",
"ToastConnectionNotAvailable": "Conexión no disponible. Intenta de nuevo más tarde",
"ToastCoverSearchFailed": "Cobertura de búsqueda incorrecta",
"ToastCoverUpdateFailed": "Error al actualizar la cubierta",
"ToastDateTimeInvalidOrIncomplete": "Fecha y hora no válidas o incompletas",
"ToastDeleteFileFailed": "Falló la eliminación del archivo",
@@ -998,6 +1047,8 @@
"ToastEpisodeDownloadQueueClearSuccess": "Se borró la cola de descargas de los episodios",
"ToastEpisodeUpdateSuccess": "{0} episodio(s) actualizado(s)",
"ToastErrorCannotShare": "No se puede compartir de forma nativa en este dispositivo",
"ToastFailedToCreate": "Ha fallado al crear",
"ToastFailedToDelete": "Ha fallado al eliminar",
"ToastFailedToLoadData": "Error al cargar data",
"ToastFailedToMatch": "Error al emparejar",
"ToastFailedToShare": "Error al compartir",
@@ -1005,6 +1056,7 @@
"ToastInvalidImageUrl": "URL de la imagen no válida",
"ToastInvalidMaxEpisodesToDownload": "Número máximo de episodios para descargar no válidos",
"ToastInvalidUrl": "URL no válida",
"ToastInvalidUrls": "Una o más URL son inválidas",
"ToastItemCoverUpdateSuccess": "Cubierta del elemento actualizada",
"ToastItemDeletedFailed": "Error al eliminar el elemento",
"ToastItemDeletedSuccess": "Elemento borrado",
@@ -1029,6 +1081,7 @@
"ToastMustHaveAtLeastOnePath": "Debe tener al menos una ruta",
"ToastNameEmailRequired": "Son obligatorios el nombre y el correo electrónico",
"ToastNameRequired": "Nombre obligatorio",
"ToastNewApiKeyUserError": "Debe seleccionar un usuario",
"ToastNewEpisodesFound": "{0} nuevo(s) episodio(s) encontrado(s)",
"ToastNewUserCreatedFailed": "No se pudo crear la cuenta: «{0}»",
"ToastNewUserCreatedSuccess": "Nueva cuenta creada",
@@ -1053,6 +1106,7 @@
"ToastPlaylistUpdateSuccess": "Lista de reproducción actualizada",
"ToastPodcastCreateFailed": "No se pudo crear el pódcast",
"ToastPodcastCreateSuccess": "Se creó el pódcast correctamente",
"ToastPodcastEpisodeUpdated": "Episodio actualizado",
"ToastPodcastGetFeedFailed": "No se puede obtener el podcast",
"ToastPodcastNoEpisodesInFeed": "No se han encontrado episodios en el feed del RSS",
"ToastPodcastNoRssFeed": "El pódcast no tiene suministro RSS",
@@ -1066,8 +1120,8 @@
"ToastRemoveFailed": "Error al eliminar",
"ToastRemoveItemFromCollectionFailed": "Error al eliminar el elemento de la colección",
"ToastRemoveItemFromCollectionSuccess": "Elemento eliminado de la colección",
"ToastRemoveItemsWithIssuesFailed": "Error en la eliminación de artículos de biblioteca incorrectos",
"ToastRemoveItemsWithIssuesSuccess": "Se eliminaron artículos de biblioteca incorrectos",
"ToastRemoveItemsWithIssuesFailed": "Error en la eliminación de artículos de biblioteca con incidencias",
"ToastRemoveItemsWithIssuesSuccess": "Se eliminaron artículos de biblioteca con incidencias",
"ToastRenameFailed": "Error al cambiar el nombre",
"ToastRescanFailed": "Error al volver a escanear para {0}",
"ToastRescanRemoved": "Se eliminó el elemento reescaneado",
@@ -1103,5 +1157,13 @@
"ToastUserPasswordChangeSuccess": "Contraseña modificada correctamente",
"ToastUserPasswordMismatch": "No coinciden las contraseñas",
"ToastUserPasswordMustChange": "La nueva contraseña no puede ser igual que la anterior",
"ToastUserRootRequireName": "Debe introducir un nombre de usuario administrativo"
"ToastUserRootRequireName": "Debe introducir un nombre de usuario administrativo",
"TooltipAddChapters": "Añadir capítulo(s)",
"TooltipAddOneSecond": "Añadir 1 segundo",
"TooltipAdjustChapterStart": "Pulse para ajustar la hora de inicio",
"TooltipLockAllChapters": "Bloquear todos los capítulos",
"TooltipLockChapter": "Bloquear capítulo (Mayús+clic para rango)",
"TooltipSubtractOneSecond": "Restar 1 segundo",
"TooltipUnlockAllChapters": "Desbloquear todos los capítulos",
"TooltipUnlockChapter": "Desbloquear capítulo (Mayús+clic para rango)"
}
+46 -38
View File
@@ -11,7 +11,7 @@
"ButtonAuthors": "Autorid",
"ButtonBack": "Tagasi",
"ButtonBrowseForFolder": "Sirvi kausta",
"ButtonCancel": "Tühista",
"ButtonCancel": "Katkesta",
"ButtonCancelEncode": "Tühista kodeerimine",
"ButtonChangeRootPassword": "Muuda põhiparooli",
"ButtonCheckAndDownloadNewEpisodes": "Kontrolli ja laadi alla uued episoodid",
@@ -20,9 +20,9 @@
"ButtonClearFilter": "Tühista filter",
"ButtonCloseFeed": "Sulge voog",
"ButtonCloseSession": "Sulge avatud sessioon",
"ButtonCollections": "Kogud",
"ButtonCollections": "Kollektsioonid",
"ButtonConfigureScanner": "Konfigureeri skanner",
"ButtonCreate": "Loo",
"ButtonCreate": "Loo uus",
"ButtonCreateBackup": "Loo varundus",
"ButtonDelete": "Kustuta",
"ButtonDownloadQueue": "Järjekord",
@@ -37,7 +37,7 @@
"ButtonIssues": "Probleemid",
"ButtonJumpBackward": "Hüppa tagasi",
"ButtonJumpForward": "Hüppa edasi",
"ButtonLatest": "Uusim",
"ButtonLatest": "Viimased",
"ButtonLibrary": "Raamatukogu",
"ButtonLogout": "Logi välja",
"ButtonLookup": "Otsi",
@@ -52,11 +52,11 @@
"ButtonOk": "Ok",
"ButtonOpenFeed": "Ava voog",
"ButtonOpenManager": "Ava haldur",
"ButtonPause": "Peata",
"ButtonPlay": "Mängi",
"ButtonPause": "Paus",
"ButtonPlay": "Play",
"ButtonPlayAll": "Mängi kõik",
"ButtonPlaying": "Mängib",
"ButtonPlaylists": "Esitusloendid",
"ButtonPlaylists": "Playlist",
"ButtonPrevious": "Eelmine",
"ButtonPreviousChapter": "Eelmine peatükk",
"ButtonPurgeAllCache": "Tühjenda kogu vahemälu",
@@ -69,7 +69,7 @@
"ButtonReadLess": "Loe vähem",
"ButtonReadMore": "Loe rohkem",
"ButtonRefresh": "Värskenda",
"ButtonRemove": "Eemalda",
"ButtonRemove": "Kustuta",
"ButtonRemoveAll": "Eemalda kõik",
"ButtonRemoveAllLibraryItems": "Eemalda kõik raamatukogu esemed",
"ButtonRemoveFromContinueListening": "Eemalda jätkake kuulamisest",
@@ -120,12 +120,12 @@
"HeaderCustomMetadataProviders": "Kohandatud metaandmete pakkujad",
"HeaderDetails": "Detailid",
"HeaderDownloadQueue": "Allalaadimise järjekord",
"HeaderEbookFiles": "E-raamatute failid",
"HeaderEbookFiles": "E-raamatu failid",
"HeaderEmail": "E-post",
"HeaderEmailSettings": "E-posti seaded",
"HeaderEpisodes": "Episoodid",
"HeaderEreaderDevices": "E-lugerite seadmed",
"HeaderEreaderSettings": "E-lugerite seadistused",
"HeaderEreaderSettings": "E-lugeja sätted",
"HeaderFiles": "Failid",
"HeaderFindChapters": "Leia peatükid",
"HeaderIgnoredFiles": "Ignoreeritud failid",
@@ -155,8 +155,8 @@
"HeaderPasswordAuthentication": "Parooli autentimine",
"HeaderPermissions": "Õigused",
"HeaderPlayerQueue": "Mängija järjekord",
"HeaderPlaylist": "Mänguloend",
"HeaderPlaylistItems": "Mänguloendi esemed",
"HeaderPlaylist": "Playlist",
"HeaderPlaylistItems": "Playlisti esemed",
"HeaderPodcastsToAdd": "Lisatavad podcastid",
"HeaderPreviewCover": "Eelvaate kaas",
"HeaderRSSFeedGeneral": "RSS-i üksikasjad",
@@ -174,7 +174,7 @@
"HeaderSettingsExperimental": "Katsetusfunktsioonid",
"HeaderSettingsGeneral": "Üldised",
"HeaderSettingsScanner": "Skanner",
"HeaderSleepTimer": "Uinaku taimer",
"HeaderSleepTimer": "Unetaimer",
"HeaderStatsLargestItems": "Suurimad esemed",
"HeaderStatsLongestItems": "Kõige pikemad esemed (tunnid)",
"HeaderStatsMinutesListeningChart": "Kuulamise minutid (viimased 7 päeva)",
@@ -197,9 +197,10 @@
"LabelActivity": "Tegevus",
"LabelAddToCollection": "Lisa kogusse",
"LabelAddToCollectionBatch": "Lisa {0} raamatut kogusse",
"LabelAddToPlaylist": "Lisa mänguloendisse",
"LabelAddToPlaylist": "Lisa playlisti",
"LabelAddToPlaylistBatch": "Lisa {0} eset mänguloendisse",
"LabelAddedAt": "Lisatud",
"LabelAddedDate": "Lisatud {0}",
"LabelAdminUsersOnly": "Ainult administraatorid",
"LabelAll": "Kõik",
"LabelAllUsers": "Kõik kasutajad",
@@ -208,10 +209,10 @@
"LabelAlreadyInYourLibrary": "Juba teie raamatukogus",
"LabelAppend": "Lisa",
"LabelAuthor": "Autor",
"LabelAuthorFirstLast": "Autor (Eesnimi Perekonnanimi)",
"LabelAuthorLastFirst": "Autor (Perekonnanimi, Eesnimi)",
"LabelAuthorFirstLast": "Autor (eesnimi perekonnanimi)",
"LabelAuthorLastFirst": "Autor (perekonnanimi, eesnimi)",
"LabelAuthors": "Autorid",
"LabelAutoDownloadEpisodes": "Automaatne episoodide allalaadimine",
"LabelAutoDownloadEpisodes": "Episoodide automaatne allalaadimine",
"LabelAutoFetchMetadata": "Automaatne metaandmete hankimine",
"LabelAutoFetchMetadataHelp": "Toob tiitli, autori ja seeria metaandmed üleslaadimise hõlbustamiseks. Lisametaandmed võivad pärast üleslaadimist vajada vastavust.",
"LabelAutoLaunch": "Automaatne käivitamine",
@@ -265,7 +266,7 @@
"LabelDiscover": "Avasta",
"LabelDownload": "Lae alla",
"LabelDownloadNEpisodes": "Lae alla {0} episoodi",
"LabelDuration": "Kestus",
"LabelDuration": "Kestvus",
"LabelDurationFound": "Leitud kestus:",
"LabelEbook": "E-raamat",
"LabelEbooks": "E-raamatud",
@@ -278,6 +279,7 @@
"LabelEmbeddedCover": "Manustatud kaas",
"LabelEnable": "Luba",
"LabelEnd": "Lõpp",
"LabelEndOfChapter": "Peatükki lõpp",
"LabelEpisode": "Episood",
"LabelEpisodeTitle": "Episoodi pealkiri",
"LabelEpisodeType": "Episoodi tüüp",
@@ -288,13 +290,14 @@
"LabelFile": "Fail",
"LabelFileBirthtime": "Faili sünniaeg",
"LabelFileModified": "Faili muudetud",
"LabelFilename": "Failinimi",
"LabelFilename": "Faili nimi",
"LabelFilterByUser": "Filtri alusel kasutaja järgi",
"LabelFindEpisodes": "Otsi episoodid",
"LabelFinished": "Lõpetatud",
"LabelFolder": "Kaust",
"LabelFolders": "Kataloogid",
"LabelFontBold": "Paks",
"LabelFontBoldness": "Fondi paksus",
"LabelFontFamily": "Fondi pere",
"LabelFontItalic": "Kaldkiri",
"LabelFontScale": "Fondi suurus",
@@ -303,7 +306,7 @@
"LabelGenre": "Žanr",
"LabelGenres": "Žanrid",
"LabelHardDeleteFile": "Faili lõplik kustutamine",
"LabelHasEbook": "On e-raamat",
"LabelHasEbook": "E-raamat olemas",
"LabelHasSupplementaryEbook": "On täiendav e-raamat",
"LabelHighestPriority": "Kõrgeim prioriteet",
"LabelHour": "Tund",
@@ -311,7 +314,7 @@
"LabelImageURLFromTheWeb": "Pildi URL veebist",
"LabelInProgress": "Pooleli",
"LabelIncludeInTracklist": "Kaasa jälgimisloendis",
"LabelIncomplete": "Puudulik",
"LabelIncomplete": "Lõpetamata",
"LabelInterval": "Intervall",
"LabelIntervalCustomDailyWeekly": "Kohandatud päevane/nädalane",
"LabelIntervalEvery12Hours": "Iga 12 tunni tagant",
@@ -365,12 +368,12 @@
"LabelNarrators": "Jutustajad",
"LabelNew": "Uus",
"LabelNewPassword": "Uus parool",
"LabelNewestAuthors": "Uusimad autorid",
"LabelNewestEpisodes": "Uusimad episoodid",
"LabelNewestAuthors": "Uuemad autorid",
"LabelNewestEpisodes": "Uuemad episoodid",
"LabelNextBackupDate": "Järgmine varukoopia kuupäev",
"LabelNextScheduledRun": "Järgmine ajakava järgmine",
"LabelNoEpisodesSelected": "Episoodid pole valitud",
"LabelNotFinished": "Ei ole lõpetatud",
"LabelNotFinished": "Lõpetamata",
"LabelNotStarted": "Pole alustatud",
"LabelNotes": "Märkused",
"LabelNotificationAppriseURL": "Apprise URL-id",
@@ -383,7 +386,7 @@
"LabelNotificationsMaxQueueSize": "Teavituste sündmuste maksimaalne järjekorra suurus",
"LabelNotificationsMaxQueueSizeHelp": "Sündmused on piiratud 1 sekundiga. Sündmusi ignoreeritakse, kui järjekord on maksimumsuuruses. See takistab teavituste rämpsposti.",
"LabelNumberOfBooks": "Raamatute arv",
"LabelNumberOfEpisodes": "Episoodide arv",
"LabelNumberOfEpisodes": "# episoode",
"LabelOpenRSSFeed": "Ava RSS voog",
"LabelOverwrite": "Kirjuta üle",
"LabelPassword": "Parool",
@@ -398,16 +401,18 @@
"LabelPhotoPathURL": "Foto tee/URL",
"LabelPlayMethod": "Esitusmeetod",
"LabelPlaylists": "Mänguloendid",
"LabelPodcast": "Podcast",
"LabelPodcastSearchRegion": "Podcasti otsingu piirkond",
"LabelPodcastType": "Podcasti tüüp",
"LabelPodcasts": "Podcastid",
"LabelPrefixesToIgnore": "Eiramiseks eesliited (tõstutundetu)",
"LabelPreventIndexing": "Vältige oma voogu indekseerimist iTunes'i ja Google podcasti kataloogides",
"LabelPrimaryEbook": "Esmane e-raamat",
"LabelProgress": "Edenemine",
"LabelProgress": "Progress",
"LabelProvider": "Pakkuja",
"LabelPubDate": "Avaldamise kuupäev",
"LabelPublishYear": "Aasta avaldamine",
"LabelPubDate": "Publitseerimise kuupäev",
"LabelPublishYear": "Publitseerimise aasta",
"LabelPublishedDate": "Publitseeritud {0}",
"LabelPublisher": "Kirjastaja",
"LabelRSSFeedCustomOwnerEmail": "Kohandatud omaniku e-post",
"LabelRSSFeedCustomOwnerName": "Kohandatud omaniku nimi",
@@ -415,7 +420,8 @@
"LabelRSSFeedPreventIndexing": "Vältige indekseerimist",
"LabelRSSFeedSlug": "RSS voog Slug",
"LabelRSSFeedURL": "RSS voog URL",
"LabelRead": "Lugenud",
"LabelRandomly": "Juhuslikus järjekorras",
"LabelRead": "Loetud läbi",
"LabelReadAgain": "Loe uuesti",
"LabelReadEbookWithoutProgress": "Lugege e-raamatut ilma edenemist säilitamata",
"LabelRecentSeries": "Hiljutised seeriad",
@@ -469,9 +475,9 @@
"LabelSettingsStoreMetadataWithItem": "Salvesta metaandmed üksusega",
"LabelSettingsStoreMetadataWithItemHelp": "Vaikimisi salvestatakse metaandmed /metadata/items kausta. Selle seadistuse lubamine salvestab metaandmed teie raamatukogu üksuse kaustadesse",
"LabelSettingsTimeFormat": "Kellaaja vorming",
"LabelShowAll": "Näita kõiki",
"LabelShowAll": "Näita kõik",
"LabelSize": "Suurus",
"LabelSleepTimer": "Uinaku taimer",
"LabelSleepTimer": "Unetaimer",
"LabelStart": "Alusta",
"LabelStartTime": "Alustamise aeg",
"LabelStarted": "Alustatud",
@@ -480,17 +486,17 @@
"LabelStatsAuthors": "Autorid",
"LabelStatsBestDay": "Parim päev",
"LabelStatsDailyAverage": "Päevane keskmine",
"LabelStatsDays": "Päevad",
"LabelStatsDays": "Päevi",
"LabelStatsDaysListened": "Kuulatud päevad",
"LabelStatsHours": "Tunnid",
"LabelStatsInARow": "järjest",
"LabelStatsItemsFinished": "Lõpetatud üksused",
"LabelStatsItemsFinished": "Lõpetatud raamatud",
"LabelStatsItemsInLibrary": "Üksused raamatukogus",
"LabelStatsMinutes": "minutit",
"LabelStatsMinutes": "minuteid",
"LabelStatsMinutesListening": "Kuulamise minutid",
"LabelStatsOverallDays": "Kokku päevad",
"LabelStatsOverallHours": "Kokku tunnid",
"LabelStatsWeekListening": "Nädala kuulamine",
"LabelStatsWeekListening": "Nädala keskmine",
"LabelSubtitle": "Alapealkiri",
"LabelSupportedFileTypes": "Toetatud failitüübid",
"LabelTag": "Silt",
@@ -502,7 +508,7 @@
"LabelTextEditorNumberedList": "Numberloend",
"LabelTextEditorUnlink": "Eemalda link",
"LabelTheme": "Teema",
"LabelThemeDark": "Tume",
"LabelThemeDark": "Pime",
"LabelThemeLight": "Hele",
"LabelTimeBase": "Aja alus",
"LabelTimeListened": "Kuulatud aeg",
@@ -527,7 +533,7 @@
"LabelType": "Tüüp",
"LabelUnabridged": "Täismahus",
"LabelUndo": "Võta tagasi",
"LabelUnknown": "Tundmatu",
"LabelUnknown": "Teadmata",
"LabelUpdateCover": "Uuenda kaant",
"LabelUpdateCoverHelp": "Luba üle kirjutamine olemasolevate kaante jaoks valitud raamatutele, kui leitakse sobivus",
"LabelUpdateDetails": "Uuenda üksikasju",
@@ -555,7 +561,8 @@
"MessageAppriseDescription": "Selle funktsiooni kasutamiseks peate käivitama <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> eksemplari või API, mis töötleb samu päringuid. <br />Apprise API URL peaks olema täielik URL-rada teatise saatmiseks, näiteks kui teie API eksemplar töötab aadressil <code>http://192.168.1.1:8337</code>, siis peaksite sisestama <code>http://192.168.1.1:8337/notify</code>.",
"MessageBackupsDescription": "Varukoopiad hõlmavad kasutajaid, kasutajate edenemist, raamatukogu üksikasju, serveri seadeid ja kaustades <code>/metadata/items</code> ja <code>/metadata/authors</code> salvestatud pilte. Varukoopiad ei hõlma ühtegi teie raamatukogu kaustades olevat faili.",
"MessageBatchQuickMatchDescription": "Kiire sobitamine üritab lisada valitud üksustele puuduvad kaaned ja metaandmed. Luba allpool olevad valikud, et lubada Kiire sobitamine'il üle kirjutada olemasolevaid kaasi ja/või metaandmeid.",
"MessageBookshelfNoCollections": "Te pole veel ühtegi kogumit teinud",
"MessageBookshelfNoCollections": "Te pole veel ühtegi kollektsiooni teinud",
"MessageBookshelfNoCollectionsHelp": "Kollektsioonid on avalikud. Kõik kasutajad kellel on olemas ligipääs raamatukogule saavad neid näha.",
"MessageBookshelfNoRSSFeeds": "Ühtegi RSS-i voogu pole avatud",
"MessageBookshelfNoResultsForFilter": "Filtrile \"{0}: {1}\" pole tulemusi",
"MessageBookshelfNoSeries": "Teil pole ühtegi seeriat",
@@ -594,6 +601,7 @@
"MessageConfirmRenameTagMergeNote": "Märkus: See silt on juba olemas, nii et need ühendatakse.",
"MessageConfirmRenameTagWarning": "Hoiatus! Sarnane silt erineva puhvriga on juba olemas \"{0}\".",
"MessageConfirmSendEbookToDevice": "Olete kindel, et soovite saata {0} e-raamatu \"{1}\" seadmesse \"{2}\"?",
"MessageDaysListenedInTheLastYear": "{0} päeva kuuldud viimase aasta jooksul",
"MessageDownloadingEpisode": "Episoodi allalaadimine",
"MessageDragFilesIntoTrackOrder": "Lohistage failid õigesse järjekorda",
"MessageEmbedFinished": "Manustamine lõpetatud!",
+1
View File
@@ -0,0 +1 @@
{}
+28
View File
@@ -0,0 +1,28 @@
{
"ButtonAdd": "افزودن",
"ButtonAuthors": "ناشر",
"ButtonBack": "بازگشت",
"ButtonCancel": "انصراف",
"ButtonClearFilter": "حذف صافی",
"ButtonCloseFeed": "بستن فید",
"ButtonCollections": "مجموعه ها",
"ButtonCreate": "ساختن",
"ButtonDelete": "حذف",
"ButtonHome": "خانه",
"ButtonIssues": "مشکلات",
"ButtonLatest": "جدیدترین",
"ButtonLibrary": "کتابخانه",
"ButtonOk": "تایید",
"ButtonOpenFeed": "باز کردن فید",
"ButtonPause": "توقف",
"ButtonPlay": "پخش",
"ButtonPlaylists": "لیست پخش",
"ButtonRead": "خواندن",
"ButtonReadLess": "خواندن کمتر",
"ButtonReadMore": "خواندن بیشتر",
"ButtonRemove": "حذف",
"ButtonSave": "ذخیره",
"ButtonSearch": "جستجو",
"ButtonSeries": "مجموعه",
"ButtonSubmit": "ثبت"
}
+79 -11
View File
@@ -1,5 +1,6 @@
{
"ButtonAdd": "Lisää",
"ButtonAddApiKey": "Lisää API avain",
"ButtonAddChapters": "Lisää lukuja",
"ButtonAddDevice": "Lisää laite",
"ButtonAddLibrary": "Lisää kirjasto",
@@ -20,6 +21,7 @@
"ButtonChooseAFolder": "Valitse kansio",
"ButtonChooseFiles": "Valitse tiedostot",
"ButtonClearFilter": "Poista suodatus",
"ButtonClose": "Sulje",
"ButtonCloseFeed": "Sulje syöte",
"ButtonCloseSession": "Sulje Avoin Sessio",
"ButtonCollections": "Kokoelmat",
@@ -44,6 +46,7 @@
"ButtonLatest": "Viimeisimmät",
"ButtonLibrary": "Kirjasto",
"ButtonLogout": "Kirjaudu ulos",
"ButtonLogoutAllDevices": "Kirjaudu ulos kaikista laitteista",
"ButtonLookup": "Hae",
"ButtonManageTracks": "Hallitse raitoja",
"ButtonMapChapterTitles": "Kartoita lukujen nimet",
@@ -119,11 +122,13 @@
"HeaderAccount": "Tili",
"HeaderAddCustomMetadataProvider": "Lisää mukautettu metadata tarjoaja",
"HeaderAdvanced": "Edistynyt",
"HeaderApiKeys": "API avaimet",
"HeaderAppriseNotificationSettings": "Apprise-ilmoitusasetukset",
"HeaderAudioTracks": "Ääniraidat",
"HeaderAudiobookTools": "Äänikirjojen tiedostonhallintatyökalut",
"HeaderAuthentication": "Todennus",
"HeaderBackups": "Varmuuskopiot",
"HeaderBulkChapterModal": "Lisää useita kappaleita",
"HeaderChangePassword": "Vaihda salasana",
"HeaderChapters": "Luvut",
"HeaderChooseAFolder": "Valitse kansio",
@@ -162,6 +167,7 @@
"HeaderMetadataOrderOfPrecedence": "Metadatan tärkeysjärjestys",
"HeaderMetadataToEmbed": "Sisällytettävä metadata",
"HeaderNewAccount": "Uusi tili",
"HeaderNewApiKey": "Uusi API avain",
"HeaderNewLibrary": "Uusi kirjasto",
"HeaderNotificationCreate": "Luo ilmoitus",
"HeaderNotificationUpdate": "Päivitä ilmoitus",
@@ -177,6 +183,7 @@
"HeaderPlaylist": "Soittolista",
"HeaderPlaylistItems": "Soittolistan kohteet",
"HeaderPodcastsToAdd": "Lisättävät podcastit",
"HeaderPresets": "Esivalinnat",
"HeaderPreviewCover": "Esikatsele kansikuvaa",
"HeaderRSSFeedGeneral": "RSS yksityiskohdat",
"HeaderRSSFeedIsOpen": "RSS syöte on avoinna",
@@ -188,12 +195,14 @@
"HeaderScheduleEpisodeDownloads": "Ajoita automaattiset jaksolataukset",
"HeaderScheduleLibraryScans": "Ajoita automaattiset kirjastoskannaukset",
"HeaderSession": "Istunto",
"HeaderSessions": "Istunnot",
"HeaderSetBackupSchedule": "Aseta varmuuskopiointiaikataulu",
"HeaderSettings": "Asetukset",
"HeaderSettingsDisplay": "Näyttö",
"HeaderSettingsExperimental": "Kokeelliset ominaisuudet",
"HeaderSettingsGeneral": "Yleiset",
"HeaderSettingsScanner": "Skannaaja",
"HeaderSettingsSecurity": "Turvallisuus",
"HeaderSettingsWebClient": "Webasiakasohjelma",
"HeaderSleepTimer": "Uniajastin",
"HeaderStatsLargestItems": "Suurimmat kohteet",
@@ -205,6 +214,7 @@
"HeaderTableOfContents": "Sisällysluettelo",
"HeaderTools": "Työkalut",
"HeaderUpdateAccount": "Päivitä tili",
"HeaderUpdateApiKey": "Päivitä API avain",
"HeaderUpdateAuthor": "Päivitä tekijä",
"HeaderUpdateDetails": "Päivitä yksityiskohdat",
"HeaderUpdateLibrary": "Päivitä kirjasto",
@@ -214,7 +224,7 @@
"LabelAbridged": "Lyhennetty",
"LabelAbridgedChecked": "Lyhennetty (tarkistettu)",
"LabelAbridgedUnchecked": "Lyhentämätön (tarkistamaton)",
"LabelAccessibleBy": "Saavutettavissa:",
"LabelAccessibleBy": "Saavutettavissa",
"LabelAccountType": "Tilin tyyppi",
"LabelAccountTypeAdmin": "Järjestelmänvalvoja",
"LabelAccountTypeGuest": "Vieras",
@@ -234,6 +244,10 @@
"LabelAllUsersExcludingGuests": "Kaikki käyttäjät vieraita lukuun ottamatta",
"LabelAllUsersIncludingGuests": "Kaikki käyttäjät mukaan lukien vieraat",
"LabelAlreadyInYourLibrary": "Jo kirjastossasi",
"LabelApiKeyCreated": "API avain \"{0}\" luotu onnistuneesti.",
"LabelApiKeyCreatedDescription": "Varmista, että kopioit API avaimen. Sitä ei näytetä enää tämän jälkeen.",
"LabelApiKeyUser": "Toimi käyttäjän puolesta",
"LabelApiKeyUserDescription": "Tällä API-avaimella on samat käyttöoikeudet kuin käyttäjällä, jonka puolesta se toimii. Tämä näkyy lokeissa samalla tavalla kuin jos käyttäjä itse tekisi pyynnön.",
"LabelApiToken": "Sovellusliittymätunnus",
"LabelAppend": "Lisää loppuun",
"LabelAudioBitrate": "Äänen bittinopeus (esim. 128k)",
@@ -263,7 +277,7 @@
"LabelBonus": "Bonus",
"LabelBooks": "Kirjat",
"LabelButtonText": "Painikkeen teksti",
"LabelByAuthor": "tekijältä {0}",
"LabelByAuthor": "Tekijältä: {0}",
"LabelChangePassword": "Vaihda salasana",
"LabelChannels": "Kanavat",
"LabelChapterCount": "{0} lukua",
@@ -283,6 +297,7 @@
"LabelContinueListening": "Jatka kuuntelua",
"LabelContinueReading": "Jatka lukemista",
"LabelContinueSeries": "Jatka sarjoja",
"LabelCorsAllowed": "Salli CORS Origins",
"LabelCover": "Kansikuva",
"LabelCoverImageURL": "Kansikuvan URL-osoite",
"LabelCoverProvider": "Kansikuvan tarjoaja",
@@ -296,6 +311,7 @@
"LabelDeleteFromFileSystemCheckbox": "Poista tiedostojärjestelmästä (poista merkintä, jos haluat poistaa vain tietokannasta)",
"LabelDescription": "Kuvaus",
"LabelDeselectAll": "Poista valinta kaikista",
"LabelDetectedPattern": "Tunnista malli:",
"LabelDevice": "Laite",
"LabelDeviceInfo": "Laitteen tiedot",
"LabelDeviceIsAvailableTo": "Laite on saatavilla...",
@@ -345,7 +361,11 @@
"LabelExample": "Esimerkki",
"LabelExpandSeries": "Laajenna sarja",
"LabelExpandSubSeries": "Laajenna alisarja",
"LabelExplicit": "Yksiselitteinen",
"LabelExpired": "Vanhentunut",
"LabelExpiresAt": "Vanhentuu",
"LabelExpiresInSeconds": "Vanhentuu (sekunnissa)",
"LabelExpiresNever": "Ei koskaan",
"LabelExplicit": "Sopimaton",
"LabelExplicitChecked": "Yksiselitteinen (valittu)",
"LabelExplicitUnchecked": "Ei yksiselitteinen (ei valittu)",
"LabelExportOPML": "Vie OPML",
@@ -360,11 +380,12 @@
"LabelFilterByUser": "Suodata käyttäjien perusteella",
"LabelFindEpisodes": "Etsi jaksoja",
"LabelFinished": "Valmis",
"LabelFinishedDate": "Valmis {0}",
"LabelFolder": "Kansio",
"LabelFolders": "Kansiot",
"LabelFontBold": "Lihavoitu",
"LabelFontBoldness": "Kirjasintyyppien lihavointi",
"LabelFontFamily": "Kirjasinperhe",
"LabelFontFamily": "Fonttiperhe",
"LabelFontItalic": "Kursiivi",
"LabelFontScale": "Kirjasintyyppien skaalautuminen",
"LabelFontStrikethrough": "Yliviivattu",
@@ -396,6 +417,7 @@
"LabelIntervalEveryHour": "Joka tunti",
"LabelIntervalEveryMinute": "Joka minuutti",
"LabelInvert": "Saa käänteiseksi",
"LabelIpAddress": "IP-osoite",
"LabelItem": "Kohde",
"LabelJumpBackwardAmount": "Taaksepäin-hyppyjen määrä",
"LabelJumpForwardAmount": "Eteenpäin-hyppyjen määrä",
@@ -404,6 +426,7 @@
"LabelLanguages": "Kielet",
"LabelLastBookAdded": "Viimeisin lisätty kirja",
"LabelLastBookUpdated": "Viimeisin päivitetty kirja",
"LabelLastProgressDate": "Viimeisin edistyminen {0}",
"LabelLastSeen": "Nähty viimeksi",
"LabelLastTime": "Viimeinen kerta",
"LabelLastUpdate": "Viimeisin päivitys",
@@ -416,6 +439,9 @@
"LabelLibraryFilterSublistEmpty": "Ei {0}",
"LabelLibraryItem": "Kirjaston kohde",
"LabelLibraryName": "Kirjaston nimi",
"LabelLibrarySortByProgress": "Edistyminen: Viimeksi päivitetty",
"LabelLibrarySortByProgressFinished": "Edistyminen: Valmis",
"LabelLibrarySortByProgressStarted": "Edistyminen: Aloitettu",
"LabelLimit": "Raja",
"LabelLineSpacing": "Riviväli",
"LabelListenAgain": "Kuuntele uudelleen",
@@ -424,6 +450,7 @@
"LabelLogLevelWarn": "Varoitus",
"LabelLookForNewEpisodesAfterDate": "Etsi uusia jaksoja tämän päivämäärän jälkeen",
"LabelLowestPriority": "Vähiten tärkeä",
"LabelMatchConfidence": "Varmuus",
"LabelMatchExistingUsersBy": "Vastaa olemassa olevia käyttäjiä mukaan",
"LabelMatchExistingUsersByDescription": "Käytetään olemassa olevien käyttäjien yhdistämiseen. Kun yhteys on muodostettu, käyttäjät saavat yksilöllisen tunnuksen SSO-palveluntarjoajaltasi",
"LabelMaxEpisodesToDownload": "Jaksojen maksimilatausmäärä. 0 poistaa rajoituksen.",
@@ -453,7 +480,9 @@
"LabelNewestAuthors": "Uusimmat tekijät",
"LabelNewestEpisodes": "Uusimmat jaksot",
"LabelNextBackupDate": "Seuraava varmuuskopiointipäivämäärä",
"LabelNextChapters": "Seuraavat luvut:",
"LabelNextScheduledRun": "Seuraava ajastettu suorittaminen",
"LabelNoApiKeys": "Ei API-avaimia",
"LabelNoCustomMetadataProviders": "Ei mukautettuja kuvailutietojen toimittajia",
"LabelNoEpisodesSelected": "Jaksoja ei ole valittu",
"LabelNotFinished": "Ei valmis",
@@ -469,6 +498,7 @@
"LabelNotificationsMaxQueueSize": "Ilmoitustapahtumajonon enimmäispituus",
"LabelNotificationsMaxQueueSizeHelp": "Tapahtumat on rajoitettu ampumaan yksi sekunnissa. Tapahtumat ohitetaan, jos jono on enimmäiskoko. Tämä estää ilmoitusten roskapostin.",
"LabelNumberOfBooks": "Kirjojen määrä",
"LabelNumberOfChapters": "Lukujen lukumäärä:",
"LabelNumberOfEpisodes": "# jaksoja",
"LabelOpenIDAdvancedPermsClaimDescription": "OpenID-vaatimuksen nimi, joka sisältää lisäoikeudet sovelluksen käyttäjän toimiin, joita sovelletaan muihin kuin järjestelmänvalvojan rooleihin (<b>jos määritetty</b>). Jos vaatimus puuttuu vastauksesta, pääsy ABS:iin evätään. Jos yksittäinen vaihtoehto puuttuu, sitä käsitellään <code>false</code>-arvona. Varmista, että identiteetin tarjoajan vaatimus vastaa odotettua rakennetta:",
"LabelOpenIDClaims": "Jätä seuraavat vaihtoehdot tyhjiksi, jos haluat poistaa edistyneen ryhmän ja lupien määrityksen käytöstä ja määrittää sitten automaattisesti käyttäjäryhmän.",
@@ -513,7 +543,7 @@
"LabelPublishers": "Julkaisijat",
"LabelRSSFeedCustomOwnerEmail": "Mukautettu omistajan sähköposti",
"LabelRSSFeedCustomOwnerName": "Mukautettu omistajan nimi",
"LabelRSSFeedOpen": "RSS-syöte avoin",
"LabelRSSFeedOpen": "RSS Syöte Avoin",
"LabelRSSFeedPreventIndexing": "Estä indeksointi",
"LabelRSSFeedSlug": "RSS-syöte Slug",
"LabelRSSFeedURL": "RSS-syötteen URL-osoite",
@@ -523,7 +553,7 @@
"LabelReadAgain": "Lue uudelleen",
"LabelReadEbookWithoutProgress": "Lue s-kirja tallentamatta edistymistietoja",
"LabelRecentSeries": "Viimeisimmät sarjat",
"LabelRecentlyAdded": "Viimeeksi lisätyt",
"LabelRecentlyAdded": "Viimeksi lisätyt",
"LabelRecommended": "Suositeltu",
"LabelRedo": "Tee uudelleen",
"LabelRegion": "Alue",
@@ -543,6 +573,7 @@
"LabelSelectAll": "Valitse kaikki",
"LabelSelectAllEpisodes": "Valitse kaikki jaksot",
"LabelSelectEpisodesShowing": "Valitse {0} näytettävää jaksoa",
"LabelSelectUser": "Valitse käyttäjä",
"LabelSelectUsers": "Valitse käyttäjät",
"LabelSendEbookToDevice": "Lähetä s-kirja kohteeseen...",
"LabelSequence": "Sekvenssi",
@@ -560,8 +591,8 @@
"LabelSettingsBookshelfViewHelp": "Skeuomorfinen muotoilu puisilla hyllyillä",
"LabelSettingsChromecastSupport": "Chromecast-tuki",
"LabelSettingsDateFormat": "Päivämäärän muoto",
"LabelSettingsEnableWatcher": "Skannaa kirjastot automaattisesti muutoksien varalta",
"LabelSettingsEnableWatcherForLibrary": "Skannaa kirjastot automaattisesti muutoksien varalta",
"LabelSettingsEnableWatcher": "Vahdi kirjastoja automaattisesti muutoksien varalta",
"LabelSettingsEnableWatcherForLibrary": "Vahdi kirjastoja automaattisesti muutoksien varalta",
"LabelSettingsEnableWatcherHelp": "Ottaa käyttöön kohteiden automaattisen lisäämisen ja päivityksen kun tiedostomuutoksia havaitaan. *Tarvitsee palvelimen uudelleenkäynnistyksen",
"LabelSettingsEpubsAllowScriptedContent": "Salli komentosarjamuotoinen sisältö epubissa",
"LabelSettingsEpubsAllowScriptedContentHelp": "Salli epub-tiedostojen suorittaa komentosarjoja. On suositeltavaa pitää tämä asetus pois käytöstä, ellet luota epub-tiedostojen lähteeseen.",
@@ -610,6 +641,7 @@
"LabelStartTime": "Aloitusaika",
"LabelStarted": "Aloitettu",
"LabelStartedAt": "Aloitettu",
"LabelStartedDate": "Aloitettu {0}",
"LabelStatsAudioTracks": "Ääniraidat",
"LabelStatsAuthors": "Tekijät",
"LabelStatsBestDay": "Paras päivä",
@@ -639,6 +671,7 @@
"LabelTheme": "Teema",
"LabelThemeDark": "Tumma",
"LabelThemeLight": "Kirkas",
"LabelThemeSepia": "Seepia",
"LabelTimeBase": "Aika-alusta",
"LabelTimeDurationXHours": "{0} tuntia",
"LabelTimeDurationXMinutes": "{0} minuuttia",
@@ -706,6 +739,10 @@
"LabelYourProgress": "Edistymisesi",
"MessageAddToPlayerQueue": "Lisää soittimen jonoon",
"MessageAppriseDescription": "Käyttääksesi tätä toimintoa tarvitset <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> -instanssin tai rajapinnan joka käsittelee samoja pyyntöjä. <br />Apprise rajapinnan osoite tulee olla täysi URL polku ilmoituksen lähetykseen, esim. jos rajapinta on osoitteessa <code>http://192.168.1.1:8337</code>,niin arvoksi tulee antaa <code>http://192.168.1.1:8337/notify</code>.",
"MessageAsinCheck": "Varmista, että käytät ASIN-tunnusta oikealta Audible-alueelta, ei Amazonista.",
"MessageAuthenticationLegacyTokenWarning": "Vanhat API-tunnukset poistetaan tulevaisuudessa. Käytä sen sijaan <a href=\"/config/api-keys\">API-avaimia</a>.",
"MessageAuthenticationOIDCChangesRestart": "Käynnistä palvelin uudelleen tallennuksen jälkeen ottaaksesi OIDC-muutokset käyttöön.",
"MessageAuthenticationSecurityMessage": "Tunnistautumisen tietoturvaa on parannettu. Kaikkien käyttäjien tulee kirjautua sisään uudelleen.",
"MessageBackupsDescription": "Varmuuskopiot sisältävät käyttäjät, käyttäjien edistymisen, kirjastokohteiden tiedot, palvelinasetukset ja <code>/metadata/items</code>- ja <code>/metadata/authors</code> -kansioihin tallennetut kuvat. Varmuuskopiot <strong>eivät sisällä</strong> kirjastosi kansioihin tallennettuja tiedostoja.",
"MessageBackupsLocationEditNote": "Huomautus: Varmuuskopion sijainnin päivittäminen ei siirrä tai muokkaa olemassa olevia varmuuskopioita",
"MessageBackupsLocationNoEditNote": "Huomautus: Varmuuskopion sijainti asetetaan ympäristömuuttujan kautta, eikä sitä voi muuttaa tässä.",
@@ -719,6 +756,7 @@
"MessageBookshelfNoResultsForFilter": "Ei tuloksia suodattimelle \"{0}: {1}\"",
"MessageBookshelfNoResultsForQuery": "Ei tuloksia kyselylle",
"MessageBookshelfNoSeries": "Sinulla ei ole sarjoja",
"MessageBulkChapterPattern": "Kuinka monta lukua haluaisit lisätä tällä numerointimallilla?",
"MessageChapterEndIsAfter": "Luvun loppu sijaitsee äänikirjan lopun jälkeen",
"MessageChapterErrorFirstNotZero": "Ensimmäisen luvun tulee alkaa nollasta",
"MessageChapterErrorStartGteDuration": "Epäkelvollinen aloitusaika; on oltava lyhyempi kuin äänikirjan kesto",
@@ -727,6 +765,7 @@
"MessageChaptersNotFound": "Kappaleita ei löydy",
"MessageCheckingCron": "Tarkistetaan cronia...",
"MessageConfirmCloseFeed": "Oletko varma, että haluat sulkea tämän syötteen?",
"MessageConfirmDeleteApiKey": "Haluatko varmasti poistaa API-avaimen \"{0}\"?",
"MessageConfirmDeleteBackup": "Oletko varma, että haluat poistaa varmuuskopion {0}:lle?",
"MessageConfirmDeleteDevice": "Oletko varma, että haluat poistaa s-lukulaitteen \"{0}\"?",
"MessageConfirmDeleteFile": "Tämä poistaa tiedoston tiedostojärjestelmästäsi. Oletko varma?",
@@ -738,6 +777,7 @@
"MessageConfirmDeleteSession": "Oletko varma, että haluat poistaa tämän istunnon?",
"MessageConfirmEmbedMetadataInAudioFiles": "Oletko varma, että haluat upottaa metatiedot {0} äänitiedostoihin?",
"MessageConfirmForceReScan": "Oletko varma, että haluat pakottaa uudelleenskannauksen?",
"MessageConfirmLogoutDevice": "Haluatko varmasti kirjautua ulos palvelusta \"{0}\"?",
"MessageConfirmMarkAllEpisodesFinished": "Oletko varma, että haluat merkitä kaikki jaksot päättyneiksi?",
"MessageConfirmMarkAllEpisodesNotFinished": "Oletko varma, että haluat merkitä kaikki jaksot ei-valmiiksi?",
"MessageConfirmMarkItemFinished": "Oletko varma, että haluat merkitä \"{0}\":n valmiiksi?",
@@ -754,6 +794,7 @@
"MessageConfirmRemoveAuthor": "Oletko varma, että haluat poistaa tekijän \"{0}\"?",
"MessageConfirmRemoveCollection": "Oletko varma, että haluat poistaa kokoelman \"{0}\"?",
"MessageConfirmRemoveEpisode": "Oletko varma, että haluat poistaa jakson \"{0}\"?",
"MessageConfirmRemoveEpisodeNote": "Huomioi: Tämä ei poista äänitiedostoa, ellei \"Poista tiedosto pysyvästi\" -asetusta ole valittuna",
"MessageConfirmRemoveEpisodes": "Oletko varma, että haluat poistaa {0} jaksoa?",
"MessageConfirmRemoveListeningSessions": "Oletko varma, että haluat poistaa {0} kuuntelukertaa?",
"MessageConfirmRemoveMetadataFiles": "Oletko varma, että haluat poistaa kaikki metadata.{0}-tiedostot kirjaston kohdekansioista?",
@@ -779,6 +820,8 @@
"MessageFeedURLWillBe": "Syötteen URL tulee olemaan {0}",
"MessageFetching": "Haetaan...",
"MessageForceReScanDescription": "skannaa kaikki tiedostot uudelleen kuten uusi tarkistus. Äänitiedoston ID3-tunnisteet, OPF-tiedostot ja tekstitiedostot skannataan uusina.",
"MessageHeatmapListeningTimeTooltip": "<strong>{0} kuunnellaan</strong> on {1}",
"MessageHeatmapNoListeningSessions": "Ei kuuntelujaksoja {0}",
"MessageImportantNotice": "Tärkeä huomautus!",
"MessageInsertChapterBelow": "Syötä luku alle",
"MessageInvalidAsin": "Virheellinen ASIN",
@@ -849,10 +892,11 @@
"MessageResetChaptersConfirm": "Oletko varma, että haluat nollata luvut ja kumota tekemäsi muutokset?",
"MessageRestoreBackupConfirm": "Oletko varma, että haluat palauttaa varmuuskopion, joka on luotu",
"MessageRestoreBackupWarning": "Varmuuskopion palauttaminen korvaa koko /config:ssa sijaitsevan tietokannan, ja kansikuvat /metadata/items & /metadata/authors:ssa.<br /><br />Varmuuskopiot eivät muuta kirjastokansioissasi olevia tiedostoja. Jos olet ottanut käyttöön palvelinasetuksissa kansikuvien ja metatietojen tallentamisen kirjaston kansioihin, niitä ei varmuuskopioida tai korvata.<br /><br />Kaikki palvelintasi käyttävät asiakkaat virkistetään automaattisesti.",
"MessageScheduleLibraryScanNote": "Suurimmalle osaa käyttäjistä on suositeltavaa jättää tämä ominaisuus pois päältä ja säilyttää kansiotarkkailu päällä. Kansiotarkkailu havaitsee automaattisesti tiedostomuutokset kirjaston kansioissa. Kansiotarkkailu ei toimi kaikille tiedostojärjestelmille (kuten NFS), jolloin voidaan käyttää ajastettuja kirjastoskannauksia.",
"MessageScheduleLibraryScanNote": "Suurimmalle osaa käyttäjistä on suositeltavaa jättää tämä ominaisuus pois päältä ja \"Tarkkaile kirjaston muutoksia automaattisesti\" -asetus pidetään käytössä - se havaitsee muutokset kirjastokansioissasi automaattisesti. Ota tämä ominaisuus käyttöön, jos \"Tarkkaile kirjaston muutoksia automaattisesti\" ei toimi tiedostojärjestelmässäsi (kuten NFS).",
"MessageScheduleRunEveryWeekdayAtTime": "Suorita joka {0} klo {1}",
"MessageSearchResultsFor": "Hakutulokset haulle",
"MessageSelected": "{0} valittuna",
"MessageSeriesSequenceCannotContainSpaces": "Sarjan sekvenssi ei voi sisältää välilyöntejä",
"MessageServerCouldNotBeReached": "Palvelimelle ei saatu yhteyttä",
"MessageSetChaptersFromTracksDescription": "Aseta luvut käyttämällä kutakin äänitiedostoa lukuna ja luvun otsikkoa äänitiedoston nimenä",
"MessageShareExpirationWillBe": "Umpeutuminen on <strong>{0}</strong>",
@@ -894,7 +938,7 @@
"MessageTaskScanningFileChanges": "Tarkastetaan tiedoston muutoksia \"{0}\":sta",
"MessageTaskScanningLibrary": "Tarkastetaan kirjastoa \"{0}\"",
"MessageTaskTargetDirectoryNotWritable": "Kohdehakemisto ei ole kirjoitettava",
"MessageThinking": "Ajattellaan...",
"MessageThinking": "Ajatellaan...",
"MessageUploaderItemFailed": "Lataaminen ulospäin epäonnistui",
"MessageUploaderItemSuccess": "Onnistuneesti ladattu! ulospäin!",
"MessageUploading": "Ladataan! ulospäin...",
@@ -914,7 +958,10 @@
"NotificationOnBackupCompletedDescription": "Laukaistu, kun varmuuskopiointi on valmis",
"NotificationOnBackupFailedDescription": "Laukaistu, kun varmuuskopiointi epäonnistuu",
"NotificationOnEpisodeDownloadedDescription": "Laukaistu, kun podcast-jakso ladataan automaattisesti",
"NotificationOnRSSFeedDisabledDescription": "Laukaistaan, kun automaattiset jaksolataukset poistetaan käytöstä liian monen epäonnistuneen yrityksen vuoksi",
"NotificationOnRSSFeedFailedDescription": "Laukaistaan, kun RRS-syötteen pyyntö epäonnistuu automaattisessa jaksolatauksessa",
"NotificationOnTestDescription": "Tapahtuma ilmoitusjärjestelmän testaamista varten",
"PlaceholderBulkChapterInput": "Syötä luvun otsikko tai käytä numerointia (esim. 'Episodi 1', 'Luku 10', '1.')",
"PlaceholderNewCollection": "Uusi kokoelman nimi",
"PlaceholderNewFolderPath": "Uusi kansion polku",
"PlaceholderNewPlaylist": "Uusi soittolistan nimi",
@@ -968,15 +1015,23 @@
"ToastBookmarkCreateFailed": "Kirjanmerkin luominen epäonnistui",
"ToastBookmarkCreateSuccess": "Kirjanmerkki lisätty",
"ToastBookmarkRemoveSuccess": "Kirjanmerkki poistettu",
"ToastBulkChapterInvalidCount": "Syötä numero 1 ja 150 välillä",
"ToastCachePurgeFailed": "Välimuistin tyhjentäminen epäonnistui",
"ToastCachePurgeSuccess": "Välimuisti tyhjennetty onnistuneesti",
"ToastChapterLocked": "Luku on lukittu.",
"ToastChapterStartTimeAdjusted": "Luvun aloitusaikaa on säädetty {0} sekunnilla",
"ToastChaptersAllLocked": "Kaikki luvut ovat lukittuina. Avaa lukuja vaihtaaksesi niiden aikoja.",
"ToastChaptersHaveErrors": "Luvuissa on virheitä",
"ToastChaptersInvalidShiftAmountLast": "Virheellinen siirtomäärä. Viimeisen luvun aloitusaika ylittäisi tämän äänikirjan keston.",
"ToastChaptersInvalidShiftAmountStart": "Virheellinen siirtomäärä. Ensimmäisen luvun pituudeksi tulisi nolla tai negatiivinen arvo, ja toinen luku kirjoittaisi sen päälle. Kasvata toisen luvun aloitusaikaa.",
"ToastChaptersMustHaveTitles": "Lukuilla on oltava otsikot",
"ToastChaptersRemoved": "Luvut poistettu",
"ToastChaptersUpdated": "Luvut päivitetty",
"ToastCollectionItemsAddFailed": "Kohteen/kohteiden lisääminen kokoelmaan epäonnistui",
"ToastCollectionRemoveSuccess": "Kokoelma poistettu",
"ToastCollectionUpdateSuccess": "Kokoelma päivitetty",
"ToastConnectionNotAvailable": "Verkkoyhteyttä ei saatavilla. Yritä hetken päästä uudelleen",
"ToastCoverSearchFailed": "Kansikuvan haku epäonnistui",
"ToastCoverUpdateFailed": "Kansikuvan päivitys epäonnistui",
"ToastDateTimeInvalidOrIncomplete": "Päivämäärä ja aika ovat epäkelvolliset tai puutteelliset",
"ToastDeleteFileFailed": "Tiedoston poistaminen epäonnistui",
@@ -992,6 +1047,8 @@
"ToastEpisodeDownloadQueueClearSuccess": "Jakson latausjono tyhjennetty",
"ToastEpisodeUpdateSuccess": "{0} jaksoa päivitetty",
"ToastErrorCannotShare": "Ei voi jakaa alkuperäisesti tällä laitteella",
"ToastFailedToCreate": "Luonti epäonnistui",
"ToastFailedToDelete": "Poisto epäonnistui",
"ToastFailedToLoadData": "Tietojen lataaminen epäonnistui",
"ToastFailedToMatch": "Vastaaminen epäonnistui",
"ToastFailedToShare": "Jakaminen epäonnistui",
@@ -999,6 +1056,7 @@
"ToastInvalidImageUrl": "Epäkelvollinen kuvan URL-osoite",
"ToastInvalidMaxEpisodesToDownload": "Ladattavien jaksojen enimmäismäärä on epäkelvollinen",
"ToastInvalidUrl": "Epäkelvollinen URL-osoite",
"ToastInvalidUrls": "Yksi tai useampi URL on virheellinen",
"ToastItemCoverUpdateSuccess": "Kohteen kansikuva päivitetty",
"ToastItemDeletedFailed": "Kohteen poistaminen epäonnistui",
"ToastItemDeletedSuccess": "Poistettu kohde",
@@ -1023,6 +1081,7 @@
"ToastMustHaveAtLeastOnePath": "On oltava vähintään yksi polku",
"ToastNameEmailRequired": "Nimi ja sähköpostiosoite vaaditaan",
"ToastNameRequired": "Nimi vaaditaan",
"ToastNewApiKeyUserError": "Täytyy valita käyttäjä",
"ToastNewEpisodesFound": "{0} uutta jaksoa löydetty",
"ToastNewUserCreatedFailed": "Tilin \"{0}\" luominen epäonnistui",
"ToastNewUserCreatedSuccess": "Uusi tili luotu",
@@ -1047,6 +1106,7 @@
"ToastPlaylistUpdateSuccess": "Soittolista päivitetty",
"ToastPodcastCreateFailed": "Podcastin luominen epäonnistui",
"ToastPodcastCreateSuccess": "Podcastin luominen onnistui",
"ToastPodcastEpisodeUpdated": "Episodi päivitetty",
"ToastPodcastGetFeedFailed": "Podcast-syötteen saaminen epäonnistui",
"ToastPodcastNoEpisodesInFeed": "RSS-syötteestä ei löytynyt jaksoja",
"ToastPodcastNoRssFeed": "Podcastilla ei ole RSS-syötettä",
@@ -1097,5 +1157,13 @@
"ToastUserPasswordChangeSuccess": "Salasana vaihdettu onnistuneesti",
"ToastUserPasswordMismatch": "Salasanat eivät täsmää",
"ToastUserPasswordMustChange": "Uusi salasana ei voi olla sama kuin vanha salasana",
"ToastUserRootRequireName": "Pääkäyttäjän nimi on pakollinen"
"ToastUserRootRequireName": "Pääkäyttäjän nimi on pakollinen",
"TooltipAddChapters": "Lisää luku tai lukuja",
"TooltipAddOneSecond": "Lisää 1 sekunti",
"TooltipAdjustChapterStart": "Napauta säätääksesi aloitusaikaa",
"TooltipLockAllChapters": "Lukitse kaikki luvut",
"TooltipLockChapter": "Lukitse luku (Shift+napauta valitaksesi alueen)",
"TooltipSubtractOneSecond": "Vähennä 1 sekunti",
"TooltipUnlockAllChapters": "Avaa kaikki luvut",
"TooltipUnlockChapter": "Avaa luku (Shift+napauta valitaksesi alueen)"
}
+60 -22
View File
@@ -46,6 +46,7 @@
"ButtonLatest": "Dernière version",
"ButtonLibrary": "Bibliothèque",
"ButtonLogout": "Déconnexion",
"ButtonLogoutAllDevices": "Se déconnecter de tous les appareils",
"ButtonLookup": "Chercher",
"ButtonManageTracks": "Gérer les pistes",
"ButtonMapChapterTitles": "Correspondance des titres de chapitres",
@@ -76,7 +77,7 @@
"ButtonReScan": "Nouvelle analyse",
"ButtonRead": "Lire",
"ButtonReadLess": "Lire moins",
"ButtonReadMore": "Lire la suite",
"ButtonReadMore": "Lire plus",
"ButtonRefresh": "Rafraîchir",
"ButtonRemove": "Retirer",
"ButtonRemoveAll": "Supprimer tout",
@@ -127,6 +128,7 @@
"HeaderAudiobookTools": "Outils de gestion de fichiers de livres audio",
"HeaderAuthentication": "Authentification",
"HeaderBackups": "Sauvegardes",
"HeaderBulkChapterModal": "Ajouter Plusieurs Chapitres",
"HeaderChangePassword": "Modifier le mot de passe",
"HeaderChapters": "Chapitres",
"HeaderChooseAFolder": "Sélectionner un dossier",
@@ -138,7 +140,7 @@
"HeaderCustomMetadataProviders": "Fournisseurs de métadonnées personnalisés",
"HeaderDetails": "Détails",
"HeaderDownloadQueue": "File d’attente de téléchargements",
"HeaderEbookFiles": "Fichiers des livres numériques",
"HeaderEbookFiles": "Fichiers du livre",
"HeaderEmail": "Courriel",
"HeaderEmailSettings": "Configuration de l’envoie des courriels",
"HeaderEpisodes": "Épisodes",
@@ -171,7 +173,7 @@
"HeaderNotificationUpdate": "Mise à jour de la notification",
"HeaderNotifications": "Notifications",
"HeaderOpenIDConnectAuthentication": "Authentification via OpenID Connect",
"HeaderOpenListeningSessions": "Ouvrir les sessions d'écoutes",
"HeaderOpenListeningSessions": "Sessions d'écoute ouvertes",
"HeaderOpenRSSFeed": "Ouvrir le flux RSS",
"HeaderOtherFiles": "Autres fichiers",
"HeaderPasswordAuthentication": "Authentification par mot de passe",
@@ -193,12 +195,14 @@
"HeaderScheduleEpisodeDownloads": "Programmer des téléchargements automatiques d'épisodes",
"HeaderScheduleLibraryScans": "Analyse automatique de la bibliothèque",
"HeaderSession": "Session",
"HeaderSessions": "Sessions",
"HeaderSetBackupSchedule": "Activer la sauvegarde automatique",
"HeaderSettings": "Paramètres",
"HeaderSettingsDisplay": "Affichage",
"HeaderSettingsExperimental": "Fonctionnalités expérimentales",
"HeaderSettingsGeneral": "Général",
"HeaderSettingsScanner": "Analyseur",
"HeaderSettingsSecurity": "Sécurité",
"HeaderSettingsWebClient": "Client Web",
"HeaderSleepTimer": "Minuterie",
"HeaderStatsLargestItems": "Éléments les plus grands",
@@ -206,7 +210,7 @@
"HeaderStatsMinutesListeningChart": "Minutes d’écoute (7 derniers jours)",
"HeaderStatsRecentSessions": "Sessions récentes",
"HeaderStatsTop10Authors": "Top 10 Auteurs",
"HeaderStatsTop5Genres": "Top 5 Genres",
"HeaderStatsTop5Genres": "Top 5 des genres",
"HeaderTableOfContents": "Table des matières",
"HeaderTools": "Outils",
"HeaderUpdateAccount": "Mettre à jour le compte",
@@ -273,7 +277,7 @@
"LabelBonus": "Bonus",
"LabelBooks": "Livres",
"LabelButtonText": "Texte du bouton",
"LabelByAuthor": "par {0}",
"LabelByAuthor": "de {0}",
"LabelChangePassword": "Modifier le mot de passe",
"LabelChannels": "Canaux",
"LabelChapterCount": "{0} Chapitres",
@@ -293,6 +297,7 @@
"LabelContinueListening": "Continuer l'écoute",
"LabelContinueReading": "Continuer la lecture",
"LabelContinueSeries": "Continuer les séries",
"LabelCorsAllowed": "Origines autorisées pour les requêtes CORS",
"LabelCover": "Couverture",
"LabelCoverImageURL": "URL vers l’image de couverture",
"LabelCoverProvider": "Source des couvertures",
@@ -306,6 +311,7 @@
"LabelDeleteFromFileSystemCheckbox": "Supprimer du système de fichiers (décocher pour ne supprimer que de la base de données)",
"LabelDescription": "Description",
"LabelDeselectAll": "Tout déselectionner",
"LabelDetectedPattern": "Motif détecté :",
"LabelDevice": "Appareil",
"LabelDeviceInfo": "Détail de l’appareil",
"LabelDeviceIsAvailableTo": "L’appareil est disponible pour…",
@@ -359,7 +365,7 @@
"LabelExpiresAt": "Expire à",
"LabelExpiresInSeconds": "Expire dans (secondes)",
"LabelExpiresNever": "Jamais",
"LabelExplicit": "Restriction",
"LabelExplicit": "Contenu explicite",
"LabelExplicitChecked": "Explicite (vérifié)",
"LabelExplicitUnchecked": "Non explicite (non vérifié)",
"LabelExportOPML": "Exporter OPML",
@@ -374,13 +380,14 @@
"LabelFilterByUser": "Filtrer par utilisateur",
"LabelFindEpisodes": "Trouver des épisodes",
"LabelFinished": "Terminé le",
"LabelFinishedDate": "Terminé {0}",
"LabelFolder": "Dossier",
"LabelFolders": "Dossiers",
"LabelFontBold": "Gras",
"LabelFontBoldness": "Graisse de la police",
"LabelFontFamily": "Polices de caractères",
"LabelFontFamily": "Famille de caractères",
"LabelFontItalic": "Italique",
"LabelFontScale": "Taille de la police de caractère",
"LabelFontScale": "Taille de la police",
"LabelFontStrikethrough": "Barrer",
"LabelFormat": "Format",
"LabelFull": "Complet",
@@ -410,6 +417,7 @@
"LabelIntervalEveryHour": "Toutes les heures",
"LabelIntervalEveryMinute": "Toutes les minutes",
"LabelInvert": "Inverser",
"LabelIpAddress": "Adresse IP",
"LabelItem": "Élément",
"LabelJumpBackwardAmount": "Dans le lecteur, reculer de",
"LabelJumpForwardAmount": "Dans le lecteur, avancer de",
@@ -418,6 +426,7 @@
"LabelLanguages": "Langues",
"LabelLastBookAdded": "Dernier livre ajouté",
"LabelLastBookUpdated": "Dernier livre mis à jour",
"LabelLastProgressDate": "Dernière position : {0}",
"LabelLastSeen": "Vu dernièrement",
"LabelLastTime": "Progression",
"LabelLastUpdate": "Dernière mise à jour",
@@ -430,14 +439,18 @@
"LabelLibraryFilterSublistEmpty": "Aucun {0}",
"LabelLibraryItem": "Élément de bibliothèque",
"LabelLibraryName": "Nom de la bibliothèque",
"LabelLibrarySortByProgress": "Progression : Mise à jour",
"LabelLibrarySortByProgressFinished": "Progression : Terminé",
"LabelLibrarySortByProgressStarted": "Progression : En cours",
"LabelLimit": "Limite",
"LabelLineSpacing": "Espacement des lignes",
"LabelLineSpacing": "Interligne",
"LabelListenAgain": "Écouter à nouveau",
"LabelLogLevelDebug": "Débogage",
"LabelLogLevelInfo": "Info",
"LabelLogLevelWarn": "Warn",
"LabelLogLevelWarn": "Attention",
"LabelLookForNewEpisodesAfterDate": "Rechercher les nouveaux épisodes après cette date",
"LabelLowestPriority": "Priorité la plus basse",
"LabelMatchConfidence": "Confiance",
"LabelMatchExistingUsersBy": "Correspondance avec les utilisateurs existants",
"LabelMatchExistingUsersByDescription": "Utilisé pour connecter les utilisateurs existants. Une fois connectés, les utilisateurs seront associés à un identifiant unique provenant de votre fournisseur SSO",
"LabelMaxEpisodesToDownload": "Nombre maximum d’épisodes à télécharger. 0 pour illimité.",
@@ -467,6 +480,7 @@
"LabelNewestAuthors": "Auteurs récents",
"LabelNewestEpisodes": "Épisodes récents",
"LabelNextBackupDate": "Date de la prochaine sauvegarde",
"LabelNextChapters": "Les prochains chapitres seront :",
"LabelNextScheduledRun": "Prochain lancement prévu",
"LabelNoApiKeys": "Aucune clé API",
"LabelNoCustomMetadataProviders": "Aucun fournisseurs de métadonnées personnalisés",
@@ -484,6 +498,7 @@
"LabelNotificationsMaxQueueSize": "Nombres de notifications maximum à mettre en attente",
"LabelNotificationsMaxQueueSizeHelp": "La limite de notification est de un évènement par seconde. Les notifications seront ignorées si la file d’attente est à son maximum. Cela empêche un flot trop important.",
"LabelNumberOfBooks": "Nombre de livres",
"LabelNumberOfChapters": "Nombre de chapitres :",
"LabelNumberOfEpisodes": "Nombre d'épisodes",
"LabelOpenIDAdvancedPermsClaimDescription": "Nom de la demande OpenID qui contient des autorisations avancées pour les actions de l’utilisateur dans l’application, qui s’appliqueront à des rôles autres que celui d’administrateur (<b>s’il est configuré</b>). Si la demande est absente de la réponse, l’accès à ABS sera refusé. Si une seule option est manquante, elle sera considérée comme <code>false</code>. Assurez-vous que la demande du fournisseur d’identité correspond à la structure attendue :",
"LabelOpenIDClaims": "Laissez les options suivantes vides pour désactiver l’attribution avancée de groupes et d’autorisations, en attribuant alors automatiquement le groupe « Utilisateur ».",
@@ -526,7 +541,7 @@
"LabelPublishedDecades": "Décennies de publication",
"LabelPublisher": "Éditeur",
"LabelPublishers": "Éditeurs",
"LabelRSSFeedCustomOwnerEmail": "Courriel personnalisée du propriétaire",
"LabelRSSFeedCustomOwnerEmail": "Courriel personnalisé du propriétaire",
"LabelRSSFeedCustomOwnerName": "Nom propriétaire personnalisé",
"LabelRSSFeedOpen": "Flux RSS ouvert",
"LabelRSSFeedPreventIndexing": "Empêcher l’indexation",
@@ -576,8 +591,8 @@
"LabelSettingsBookshelfViewHelp": "Interface skeumorphique avec étagères en bois",
"LabelSettingsChromecastSupport": "Support du Chromecast",
"LabelSettingsDateFormat": "Format de date",
"LabelSettingsEnableWatcher": "Analyser automatiquement les bibliothèques pour détecter les modifications",
"LabelSettingsEnableWatcherForLibrary": "Analyser automatiquement la bibliothèque pour détecter les modifications",
"LabelSettingsEnableWatcher": "Surveiller automatiquement les bibliothèques pour détecter les modifications",
"LabelSettingsEnableWatcherForLibrary": "Surveiller automatiquement la bibliothèque pour détecter les modifications",
"LabelSettingsEnableWatcherHelp": "Active la mise à jour automatique d'éléments lorsque des modifications de fichiers sont détectées. * Nécessite le redémarrage du serveur",
"LabelSettingsEpubsAllowScriptedContent": "Autoriser le contenu scénarisé pour les fichiers EPUB",
"LabelSettingsEpubsAllowScriptedContentHelp": "Autoriser les fichiers EPUB à exécuter des scripts. Il est recommandé de laisser ce paramètre désactivé, sauf si vous faites confiance à la source des fichiers EPUB.",
@@ -610,11 +625,11 @@
"LabelSettingsStoreMetadataWithItemHelp": "Par défaut, les fichiers de métadonnées sont stockés dans /metadata/items. En activant ce paramètre, les fichiers de métadonnées seront stockés dans les dossiers des éléments de votre bibliothèque",
"LabelSettingsTimeFormat": "Format d’heure",
"LabelShare": "Partager",
"LabelShareDownloadableHelp": "Permet aux utilisateurs de télécharger un fichier ZIP de l'élément de la bibliothèque.",
"LabelShareDownloadableHelp": "Permet aux utilisateurs disposant du lien de partage de télécharger un fichier zip contenant l'élément de la bibliothèque.",
"LabelShareOpen": "Ouvrir le partage",
"LabelShareURL": "Partager l’URL",
"LabelShowAll": "Tout afficher",
"LabelShowSeconds": "Afficher les seondes",
"LabelShowSeconds": "Afficher les secondes",
"LabelShowSubtitles": "Afficher les sous-titres",
"LabelSize": "Taille",
"LabelSleepTimer": "Minuterie de mise en veille",
@@ -626,6 +641,7 @@
"LabelStartTime": "Heure de démarrage",
"LabelStarted": "Démarré",
"LabelStartedAt": "Démarré à",
"LabelStartedDate": "Commencé {0}",
"LabelStatsAudioTracks": "Pistes audio",
"LabelStatsAuthors": "Auteurs",
"LabelStatsBestDay": "Meilleur jour",
@@ -655,6 +671,7 @@
"LabelTheme": "Thème",
"LabelThemeDark": "Sombre",
"LabelThemeLight": "Clair",
"LabelThemeSepia": "Sépia",
"LabelTimeBase": "Base de temps",
"LabelTimeDurationXHours": "{0} heures",
"LabelTimeDurationXMinutes": "{0} minutes",
@@ -730,7 +747,7 @@
"MessageBackupsLocationEditNote": "Remarque : Mettre à jour l'emplacement de sauvegarde ne déplacera pas ou ne modifiera pas les sauvegardes existantes",
"MessageBackupsLocationNoEditNote": "Remarque : l’emplacement de sauvegarde est défini via une variable d’environnement et ne peut pas être modifié ici.",
"MessageBackupsLocationPathEmpty": "L'emplacement de secours ne peut pas être vide",
"MessageBatchEditPopulateMapDetailsAllHelp": "Remplir les champs disponibles avec les données de tous les éléments. Les champs avec des valeurs multiples seront fusionnés.",
"MessageBatchEditPopulateMapDetailsAllHelp": "Renseignez les champs activés avec les données de tous les éléments. Les champs comportant plusieurs valeurs seront fusionnés.",
"MessageBatchEditPopulateMapDetailsItemHelp": "Renseigner les champs de la carte active avec les informations de cet élément",
"MessageBatchQuickMatchDescription": "La recherche par correspondance rapide tentera d’ajouter les couvertures et métadonnées manquantes pour les éléments sélectionnés. Activez les options ci-dessous pour permettre la Recherche par correspondance d’écraser les couvertures et/ou métadonnées existantes.",
"MessageBookshelfNoCollections": "Vous n’avez pas encore de collections",
@@ -739,6 +756,7 @@
"MessageBookshelfNoResultsForFilter": "Aucun résultat pour le filtre « {0} : {1} »",
"MessageBookshelfNoResultsForQuery": "Aucun résultat pour la requête",
"MessageBookshelfNoSeries": "Vous n’avez aucune série",
"MessageBulkChapterPattern": "Combien de chapitres souhaitez-vous ajouter avec ce motif de numérotation ?",
"MessageChapterEndIsAfter": "La fin du chapitre se situe après la fin de votre livre audio",
"MessageChapterErrorFirstNotZero": "Le premier capitre doit débuter à 0",
"MessageChapterErrorStartGteDuration": "Horodatage invalide car il doit débuter avant la fin du livre",
@@ -759,6 +777,7 @@
"MessageConfirmDeleteSession": "Êtes-vous sûr·e de vouloir supprimer cette session ?",
"MessageConfirmEmbedMetadataInAudioFiles": "Êtes-vous sûr·e de vouloir intégrer des métadonnées dans {0} fichiers audio ?",
"MessageConfirmForceReScan": "Êtes-vous sûr·e de vouloir lancer une analyse forcée ?",
"MessageConfirmLogoutDevice": "Êtes-vous sûr·e de vouloir vous déconnecter de « {0} » ?",
"MessageConfirmMarkAllEpisodesFinished": "Êtes-vous sûr·e de marquer tous les épisodes comme terminés ?",
"MessageConfirmMarkAllEpisodesNotFinished": "Êtes-vous sûr·e de vouloir marquer tous les épisodes comme non terminés ?",
"MessageConfirmMarkItemFinished": "Êtes-vous sûr·e de vouloir marquer {0} comme terminé ?",
@@ -801,6 +820,8 @@
"MessageFeedURLWillBe": "L’URL du flux sera {0}",
"MessageFetching": "Récupération…",
"MessageForceReScanDescription": "analysera de nouveau tous les fichiers. Les étiquettes ID3 des fichiers audio, les fichiers OPF et les fichiers texte seront analysés comme s’ils étaient nouveaux.",
"MessageHeatmapListeningTimeTooltip": "<strong>{0} À l’écoute</strong> sur {1}",
"MessageHeatmapNoListeningSessions": "Aucune session en cours sur {0}",
"MessageImportantNotice": "Information importante !",
"MessageInsertChapterBelow": "Insérer le chapitre ci-dessous",
"MessageInvalidAsin": "ASIN invalide",
@@ -837,7 +858,7 @@
"MessageNoItems": "Aucun élément",
"MessageNoItemsFound": "Aucun élément trouvé",
"MessageNoListeningSessions": "Aucune session d’écoute en cours",
"MessageNoLogs": "Aucun journaux",
"MessageNoLogs": "Aucun journal",
"MessageNoMediaProgress": "Aucun média en cours",
"MessageNoNotifications": "Aucune notification",
"MessageNoPodcastFeed": "Podcast invalide : pas de flux",
@@ -858,7 +879,7 @@
"MessagePlaylistCreateFromCollection": "Créer une liste de lecture depuis la collection",
"MessagePleaseWait": "Merci de patienter…",
"MessagePodcastHasNoRSSFeedForMatching": "Le Podcast n’a pas d’URL de flux RSS à utiliser pour la correspondance",
"MessagePodcastSearchField": "Saisissez le terme de recherche ou l'URL du flux RSS",
"MessagePodcastSearchField": "Saisir un terme de recherche ou l'URL d'un flux RSS",
"MessageQuickEmbedInProgress": "Intégration rapide en cours",
"MessageQuickEmbedQueue": "En file d'attente pour une intégration rapide ({0} dans la file d'attente)",
"MessageQuickMatchAllEpisodes": "Associer rapidement tous les épisodes",
@@ -871,7 +892,7 @@
"MessageResetChaptersConfirm": "Êtes-vous sûr·e de vouloir réinitialiser les chapitres et annuler les changements effectués ?",
"MessageRestoreBackupConfirm": "Êtes-vous sûr·e de vouloir restaurer la sauvegarde créée le",
"MessageRestoreBackupWarning": "Restaurer la sauvegarde écrasera la base de donnée située dans le dossier /config ainsi que les images sur /metadata/items et /metadata/authors.<br><br>Les sauvegardes ne touchent pas aux fichiers de la bibliothèque. Si vous avez activé le paramètre pour sauvegarder les métadonnées et les images de couverture dans le même dossier que les fichiers, ceux-ci ne ni sauvegardés, ni écrasés lors de la restauration.<br><br>Tous les clients utilisant votre serveur seront automatiquement mis à jour.",
"MessageScheduleLibraryScanNote": "Pour la plupart des utilisateurs, il est recommandé de laisser cette fonctionnalité désactivée et de maintenir le réglage du moniteur de dossier activé. Le moniteur de dossier détectera automatiquement les changements dans vos dossiers de bibliothèque. Le moniteur de dossier ne fonctionne pas pour chaque système de fichiers (comme NFS) afin que les scans de bibliothèques programmés puissent être utilisés à la place.",
"MessageScheduleLibraryScanNote": "Pour la plupart des utilisateurs, il est recommandé de laisser cette fonctionnalité désactivée et de maintenir le paramètre « Surveiller automatiquement la bibliothèque pour détecter les modifications » activé – il détectera automatiquement les modifications dans les dossiers de votre bibliothèque. Activez cette fonctionnalité si l'option « Surveiller automatiquement la bibliothèque pour détecter les modifications » ne fonctionne pas pour votre système de fichiers (comme NFS).",
"MessageScheduleRunEveryWeekdayAtTime": "Exécuté tous les {0} à {1}",
"MessageSearchResultsFor": "Résultats de recherche pour",
"MessageSelected": "{0} sélectionnés",
@@ -940,11 +961,12 @@
"NotificationOnRSSFeedDisabledDescription": "Déclenché lorsque les téléchargements automatiques d’épisodes sont désactivés en raison d’un trop grand nombre de tentatives infructueuses",
"NotificationOnRSSFeedFailedDescription": "Déclenché lorsque la demande de flux RSS échoue pour un téléchargement automatique d’épisode",
"NotificationOnTestDescription": "Événement pour tester le système de notification",
"PlaceholderBulkChapterInput": "Entrez le titre du chapitre ou utilisez la numérotation (ex. 'Épisode 1', 'Chapitre 10', '1.')",
"PlaceholderNewCollection": "Nom de la nouvelle collection",
"PlaceholderNewFolderPath": "Nouveau chemin de dossier",
"PlaceholderNewPlaylist": "Nouveau nom de liste de lecture",
"PlaceholderSearch": "Recherche…",
"PlaceholderSearchEpisode": "Recherche d’épisode…",
"PlaceholderSearch": "Recherche...",
"PlaceholderSearchEpisode": "Rechercher un épisode…",
"StatsAuthorsAdded": "auteurs ajoutés",
"StatsBooksAdded": "livres ajoutés",
"StatsBooksAdditional": "Les ajouts comprennent…",
@@ -993,8 +1015,12 @@
"ToastBookmarkCreateFailed": "Échec de la création de signet",
"ToastBookmarkCreateSuccess": "Signet ajouté",
"ToastBookmarkRemoveSuccess": "Signet supprimé",
"ToastBulkChapterInvalidCount": "Veuillez entrer un nombre valide entre 1 et 150",
"ToastCachePurgeFailed": "Échec de la purge du cache",
"ToastCachePurgeSuccess": "Cache purgé avec succès",
"ToastChapterLocked": "Le chapitre est verrouillé.",
"ToastChapterStartTimeAdjusted": "Début du chapitre ajusté de {0} secondes",
"ToastChaptersAllLocked": "Tous les chapitres sont verrouillés. Déverrouillez certains chapitres pour décaler leurs temps.",
"ToastChaptersHaveErrors": "Les chapitres contiennent des erreurs",
"ToastChaptersInvalidShiftAmountLast": "Durée de décalage non valide. L’heure de début du dernier chapitre pourrait dépasser la durée de ce livre audio.",
"ToastChaptersInvalidShiftAmountStart": "Durée de décalage non valide. Le premier chapitre aurait une longueur nulle ou négative et serait écrasé par le second. Augmentez la durée de début du second chapitre.",
@@ -1004,6 +1030,8 @@
"ToastCollectionItemsAddFailed": "Échec de l’ajout de(s) élément(s) à la collection",
"ToastCollectionRemoveSuccess": "Collection supprimée",
"ToastCollectionUpdateSuccess": "Collection mise à jour",
"ToastConnectionNotAvailable": "Connexion indisponible. Veuillez réessayer plus tard.",
"ToastCoverSearchFailed": "La recherche de la couverture a échoué",
"ToastCoverUpdateFailed": "Échec de la mise à jour de la couverture",
"ToastDateTimeInvalidOrIncomplete": "La date et l'heure sont invalides ou incomplètes",
"ToastDeleteFileFailed": "Échec de la suppression du fichier",
@@ -1028,6 +1056,7 @@
"ToastInvalidImageUrl": "URL de l'image invalide",
"ToastInvalidMaxEpisodesToDownload": "Nombre maximum d’épisodes à télécharger non valide",
"ToastInvalidUrl": "URL invalide",
"ToastInvalidUrls": "Une ou plusieurs URL sont invalides",
"ToastItemCoverUpdateSuccess": "Couverture mise à jour",
"ToastItemDeletedFailed": "La suppression de l'élément à échouée",
"ToastItemDeletedSuccess": "Élément supprimé",
@@ -1077,6 +1106,7 @@
"ToastPlaylistUpdateSuccess": "Liste de lecture mise à jour",
"ToastPodcastCreateFailed": "Échec de la création du podcast",
"ToastPodcastCreateSuccess": "Podcast créé avec succès",
"ToastPodcastEpisodeUpdated": "Épisode mis à jour",
"ToastPodcastGetFeedFailed": "Échec de la récupération du flux du podcast",
"ToastPodcastNoEpisodesInFeed": "Aucun épisode trouvé dans le flux RSS",
"ToastPodcastNoRssFeed": "Le podcast n’a pas de flux RSS",
@@ -1127,5 +1157,13 @@
"ToastUserPasswordChangeSuccess": "Mot de passe modifié avec succès",
"ToastUserPasswordMismatch": "Les mots de passe ne correspondent pas",
"ToastUserPasswordMustChange": "Le nouveau mot de passe ne peut pas être identique à l’ancien",
"ToastUserRootRequireName": "Vous devez entrer un nom d’utilisateur root"
"ToastUserRootRequireName": "Vous devez entrer un nom d’utilisateur root",
"TooltipAddChapters": "Ajouter chapitre(s)",
"TooltipAddOneSecond": "Ajouter 1 seconde",
"TooltipAdjustChapterStart": "Cliquez pour régler l'heure de début",
"TooltipLockAllChapters": "Verrouiller tous les chapitres",
"TooltipLockChapter": "Verrouiller le chapitre (Maj+clic pour plage)",
"TooltipSubtractOneSecond": "Soustraire 1 seconde",
"TooltipUnlockAllChapters": "Déverrouiller tous les chapitres",
"TooltipUnlockChapter": "Déverrouiller le chapitre (Maj+clic pour plage)"
}
+104 -3
View File
@@ -81,7 +81,7 @@
"ButtonRemove": "הסר",
"ButtonRemoveAll": "הסר הכל",
"ButtonRemoveAllLibraryItems": "הסר את כל פריטי הספרייה",
"ButtonRemoveFromContinueListening": "הסר מ- המשך האזנה",
"ButtonRemoveFromContinueListening": "הסר מ״המשך האזנה״",
"ButtonRemoveFromContinueReading": "הסר מ- המשך קריאה",
"ButtonRemoveSeriesFromContinueSeries": "הסר סדרה מ- המשך סדרה",
"ButtonReset": "איפוס",
@@ -121,11 +121,13 @@
"HeaderAccount": "חשבון",
"HeaderAddCustomMetadataProvider": "הוסף ספק מטא-נתונים מותאם אישית",
"HeaderAdvanced": "מתקדם",
"HeaderApiKeys": "מפתחות API",
"HeaderAppriseNotificationSettings": "הגדרות התראות של Apprise",
"HeaderAudioTracks": "רצועות קול",
"HeaderAudiobookTools": "כלים לניהול קבצי ספרים קוליים",
"HeaderAuthentication": "אימות",
"HeaderBackups": "גיבויים",
"HeaderBulkChapterModal": "הוסף מספר פרקים",
"HeaderChangePassword": "שנה סיסמה",
"HeaderChapters": "פרקים",
"HeaderChooseAFolder": "בחר תיקייה",
@@ -164,6 +166,7 @@
"HeaderMetadataOrderOfPrecedence": "סדר העדפת מטא-נתונים",
"HeaderMetadataToEmbed": "מטא-נתונים להטמעה",
"HeaderNewAccount": "חשבון חדש",
"HeaderNewApiKey": "מפתח API חדש",
"HeaderNewLibrary": "ספרייה חדשה",
"HeaderNotificationCreate": "צור התראה",
"HeaderNotificationUpdate": "עדכון התראה",
@@ -197,6 +200,7 @@
"HeaderSettingsExperimental": "תכונות ניסיוניות",
"HeaderSettingsGeneral": "כללי",
"HeaderSettingsScanner": "סורק",
"HeaderSettingsSecurity": "אבטחה",
"HeaderSettingsWebClient": "מערך",
"HeaderSleepTimer": "טיימר שינה",
"HeaderStatsLargestItems": "הפריטים הגדולים ביותר",
@@ -208,6 +212,7 @@
"HeaderTableOfContents": "תוכן עניינים",
"HeaderTools": "כלים",
"HeaderUpdateAccount": "עדכן חשבון",
"HeaderUpdateApiKey": "עדכן מפתח API",
"HeaderUpdateAuthor": "עדכן יוצר",
"HeaderUpdateDetails": "עדכן פרטים",
"HeaderUpdateLibrary": "עדכן ספרייה",
@@ -237,6 +242,10 @@
"LabelAllUsersExcludingGuests": "כל המשתמשים, ללא אורחים",
"LabelAllUsersIncludingGuests": "כל המשתמשים כולל אורחים",
"LabelAlreadyInYourLibrary": "כבר קיים בספרייה שלך",
"LabelApiKeyCreated": "מפתח API ״{0}״ נוצר בהצלחה.",
"LabelApiKeyCreatedDescription": "אנא העתק את מפתח ה־API כעת, לא ניתן יהיה להציגו שוב.",
"LabelApiKeyUser": "פעל בשם המשתמש",
"LabelApiKeyUserDescription": "למפתח ה־API יהיו הרשאות זהות למשתמש שעל שמו הוא פועל. ביומני הרישום (logs), הפעולות יופיעו כאילו בוצעו על ידי המשתמש עצמו.",
"LabelApiToken": "טוקן API",
"LabelAppend": "הוסף לסוף",
"LabelAudioBitrate": "קצב סיביות (לדוגמא 128k)",
@@ -286,6 +295,7 @@
"LabelContinueListening": "המשך האזנה",
"LabelContinueReading": "המשך קריאה",
"LabelContinueSeries": "המשך סדרה",
"LabelCorsAllowed": "מקורות CORS מורשים",
"LabelCover": "כריכה",
"LabelCoverImageURL": "כתובת התמונה ברשת",
"LabelCoverProvider": "ספק כריכה",
@@ -299,6 +309,7 @@
"LabelDeleteFromFileSystemCheckbox": "מחיקה מהמערכת הקבצים (הסר סימון למחיקה רק ממסד הנתונים)",
"LabelDescription": "תיאור",
"LabelDeselectAll": "הסר בחירת כל הפריטים",
"LabelDetectedPattern": "תבנית שזוהתה:",
"LabelDevice": "התקן",
"LabelDeviceInfo": "מידע על התקן",
"LabelDeviceIsAvailableTo": "התקן זמין ל...",
@@ -348,7 +359,11 @@
"LabelExample": "דוגמה",
"LabelExpandSeries": "הרחב סדרה",
"LabelExpandSubSeries": "הרחב תת סדרה",
"LabelExplicit": "בוטה",
"LabelExpired": "פג תוקף",
"LabelExpiresAt": "יפוג בתאריך",
"LabelExpiresInSeconds": "יפוג בעוד (שניות)",
"LabelExpiresNever": "ללא הגבלת זמן",
"LabelExplicit": "מפורש",
"LabelExplicitChecked": "בוטה (מסומן)",
"LabelExplicitUnchecked": "לא בוטה (לא מסומן)",
"LabelExportOPML": "ייצוא OPML",
@@ -363,6 +378,7 @@
"LabelFilterByUser": "סינון לפי משתמש",
"LabelFindEpisodes": "מצא פרקים",
"LabelFinished": "הושלם",
"LabelFinishedDate": "הושלם {0}",
"LabelFolder": "תיקייה",
"LabelFolders": "תיקיות",
"LabelFontBold": "מודגש",
@@ -407,6 +423,7 @@
"LabelLanguages": "שפות",
"LabelLastBookAdded": "הספר האחרון שנוסף",
"LabelLastBookUpdated": "הספר האחרון שעודכן",
"LabelLastProgressDate": "התקדמות אחרונה: {0}",
"LabelLastSeen": "נראה לאחרונה",
"LabelLastTime": "הזמן האחרון",
"LabelLastUpdate": "עדכון אחרון",
@@ -419,6 +436,9 @@
"LabelLibraryFilterSublistEmpty": "לא {0}",
"LabelLibraryItem": "פריט ספרייה",
"LabelLibraryName": "שם הספרייה",
"LabelLibrarySortByProgress": "התקדמות: עודכן לאחרונה",
"LabelLibrarySortByProgressFinished": "התקדמות: הושלם",
"LabelLibrarySortByProgressStarted": "התקדמות: הותחל",
"LabelLimit": "מגבלה",
"LabelLineSpacing": "מרווח שורה",
"LabelListenAgain": "האזן שוב",
@@ -427,6 +447,7 @@
"LabelLogLevelWarn": "אזהרה",
"LabelLookForNewEpisodesAfterDate": "חפש פרקים חדשים לאחר תאריך זה",
"LabelLowestPriority": "העדיפות הנמוכה ביותר",
"LabelMatchConfidence": "רמת ודאות",
"LabelMatchExistingUsersBy": "התאם משתמשים קיימים לפי",
"LabelMatchExistingUsersByDescription": "משמש לחיבור משתמשים קיימים. לאחר החיבור, המשתמשים יותאמו לפי זיהוי ייחודי מספק ה-SSO שלך",
"LabelMaxEpisodesToDownload": "מספר פרקים מקסימלי להורדה. 0 - ללא הגבלה.",
@@ -456,7 +477,9 @@
"LabelNewestAuthors": "הסופרים האחרונים",
"LabelNewestEpisodes": "הפרקים החדשים ביותר",
"LabelNextBackupDate": "תאריך הגיבוי הבא",
"LabelNextChapters": "הפרקים הבא יהיו:",
"LabelNextScheduledRun": "הרצה מתוזמנת הבאה",
"LabelNoApiKeys": "אין מפתחות API",
"LabelNoCustomMetadataProviders": "אין ספקי מטא-נתונים מותאמים אישית",
"LabelNoEpisodesSelected": "לא נבחרו פרקים",
"LabelNotFinished": "לא הושלם",
@@ -472,16 +495,21 @@
"LabelNotificationsMaxQueueSize": "גודל התור המרבי לאירועי התראה",
"LabelNotificationsMaxQueueSizeHelp": "האירועים מוגבלים לשליחה אחת לשנייה. האירועים יתעלמו אם התור מלא. הגדרה זו נועדה למנוע ספאם התראות.",
"LabelNumberOfBooks": "מספר הספרים",
"LabelNumberOfChapters": "מספר הפרקים:",
"LabelNumberOfEpisodes": "# פרקים",
"LabelOpenIDAdvancedPermsClaimDescription": "שם OpenID claim המכילה הרשאות מתקדמות לפעולות משתמש בתוך האפליקציה, אשר יחולו על תפקידים שאינם מנהלי מערכת (<b>אם הוגדרה</b>). אם התביעה חסרה בתגובה, הגישה ל-ABS תידחה. אם אפשרות אחת חסרה, היא תטופל כ-<code>false</code> יש לוודא שטענת ספק הזהויות תואמת את המבנה הצפוי:",
"LabelOpenIDClaims": "השאר את האפשרויות הבאות ריקות כדי להשבית הקצאת קבוצות והרשאות מתקדמת, ולאחר מכן להקצות אוטומטית את קבוצת 'משתמש'.",
"LabelOpenIDGroupClaimDescription": "שם ה־OpenID claim המכיל את רשימת הקבוצות של המשתמש. בדרך כלל נקרא <code>groups</code>. <b>אם הוגדרה</b>, האפליקציה תקצה תפקידים באופן אוטומטי על סמך השיוך לקבוצות, בתנאי ששמות הקבוצות ב־claim הם 'admin', 'user' או 'guest' (ללא רגישות לרישיות - Case-insensitive). ה־claim צריך להכיל רשימה; אם המשתמש משויך למספר קבוצות, האפליקציה תקצה את התפקיד בעל רמת הגישה הגבוהה ביותר. במידה ולא נמצאה קבוצה תואמת, הגישה תיחסם.",
"LabelOpenRSSFeed": "פתח ערוץ RSS",
"LabelOverwrite": "לשכפל",
"LabelPaginationPageXOfY": "עמוד {0} מתוך {1}",
"LabelPassword": "סיסמה",
"LabelPath": "נתיב",
"LabelPermanent": "קבוע",
"LabelPermissionsAccessAllLibraries": "ניתן לגשת לכל הספריות",
"LabelPermissionsAccessAllTags": "ניתן לגשת לכל התגיות",
"LabelPermissionsAccessExplicitContent": "ניתן לגשת לתוכן בוטה",
"LabelPermissionsCreateEreader": "ניתן ליצור קורא ספרים דיגיטלי",
"LabelPermissionsDelete": "מותר למחוק",
"LabelPermissionsDownload": "מותר להוריד",
"LabelPermissionsUpdate": "מותר לעדכן",
@@ -489,6 +517,8 @@
"LabelPersonalYearReview": "השנה שלך בסקירה ({0})",
"LabelPhotoPathURL": "נתיב/URL לתמונה",
"LabelPlayMethod": "שיטת הפעלה",
"LabelPlaybackRateIncrementDecrement": "שיעור הגדלה/הפחתה של מהירות ההשמעה",
"LabelPlayerChapterNumberMarker": "{0} מתוך {1}",
"LabelPlaylists": "רשימות השמעה",
"LabelPodcast": "פודקאסט",
"LabelPodcastSearchRegion": "אזור חיפוש פודקאסט",
@@ -500,10 +530,14 @@
"LabelPrimaryEbook": "ספר אלקטרוני ראשי",
"LabelProgress": "התקדמות",
"LabelProvider": "ספק",
"LabelProviderAuthorizationValue": "ערך כותרת האימות (Authorization Header)",
"LabelPubDate": "תאריך פרסום",
"LabelPublishYear": "שנת הפרסום",
"LabelPublishedDate": "פורסם {0}",
"LabelPublishedDecade": "עשור פרסום",
"LabelPublishedDecades": "עשורי פרסום",
"LabelPublisher": "מוציא לאור",
"LabelPublishers": "מוצאים לאור",
"LabelRSSFeedCustomOwnerEmail": "אימייל בעלים מותאם אישית",
"LabelRSSFeedCustomOwnerName": "שם בעלים מותאם אישית",
"LabelRSSFeedOpen": "ערוץ RSS פתוח",
@@ -511,6 +545,7 @@
"LabelRSSFeedSlug": "Slug של ערוץ ה-RSS",
"LabelRSSFeedURL": "כתובת ערוץ ה-RSS",
"LabelRandomly": "באופן אקראי",
"LabelReAddSeriesToContinueListening": "הוסף סדרה בחזרה אל ״המשך האזנה״",
"LabelRead": "קריאה",
"LabelReadAgain": "קרא שוב",
"LabelReadEbookWithoutProgress": "קרא/י ספר אלקטרוני ללא שמירת התקדמות",
@@ -520,29 +555,44 @@
"LabelRedo": "עשה שוב",
"LabelRegion": "אזור",
"LabelReleaseDate": "תאריך הוצאה לאור",
"LabelRemoveAllMetadataAbs": "הסר את כל קבצי metadata.abs",
"LabelRemoveAllMetadataJson": "הסר את כל קבצי metadata.json",
"LabelRemoveAudibleBranding": "הסר פתיח וסיום של Audible מהפרקים",
"LabelRemoveCover": "הסר כריכה",
"LabelRemoveMetadataFile": "הסר קבצי מטא־נתונים מתיקיות הפריטים בספרייה",
"LabelRemoveMetadataFileHelp": "הסר את כל קבצי metadata.json ו־metadata.abs מתיקיות {0}.",
"LabelRowsPerPage": "שורות לעמוד",
"LabelSearchTerm": "מונח חיפוש",
"LabelSearchTitle": "כותרת חיפוש",
"LabelSearchTitleOrASIN": "כותרת חיפוש או ASIN",
"LabelSeason": "עונה",
"LabelSeasonNumber": "עונה #{0}",
"LabelSelectAll": "בחר הכל",
"LabelSelectAllEpisodes": "בחר את כל הפרקים",
"LabelSelectEpisodesShowing": "בחר {0} פרקים המוצגים",
"LabelSelectUser": "בחר משתמש",
"LabelSelectUsers": "בחר משתמשים",
"LabelSendEbookToDevice": "שלח ספר אלקטרוני ל...",
"LabelSequence": "רצף",
"LabelSerial": "מספר סידורי",
"LabelSeries": "סדרה",
"LabelSeriesName": "שם הסדרה",
"LabelSeriesProgress": "התקדמות בסדרה",
"LabelServerLogLevel": "רמת פירוט יומני הרישום",
"LabelServerYearReview": "השנה בסקירה של השרת ({0})",
"LabelSetEbookAsPrimary": "קבע כראשי",
"LabelSetEbookAsSupplementary": "קבע כמשלים",
"LabelSettingsAllowIframe": "אפשר הטמעה בתוך iframe",
"LabelSettingsAudiobooksOnly": "רק ספרי קול",
"LabelSettingsAudiobooksOnlyHelp": "הפעלת ההגדרה הזו תתעלם מקבצי ספרים אלקטרוניים אלא אם כן הם נמצאים בתיקיית ספרי קול, שבמקרה זה יקבעו כספרים אלקטרוניים נלווים",
"LabelSettingsBookshelfViewHelp": "עיצוב סקאומורפי עם מדפי עץ",
"LabelSettingsChromecastSupport": "תמיכה ב-Chromecast",
"LabelSettingsDateFormat": "פורמט תאריך",
"LabelSettingsEnableWatcher": "הפעל מעקב שינויים בספריות",
"LabelSettingsEnableWatcherForLibrary": "הפעל מעקב שינויים בספרייה",
"LabelSettingsEnableWatcherHelp": "מאפשר הוספת/עדכון אוטומטי של פריטים כאשר שינויי קבצים זוהים. *דורש איתחול שרת",
"LabelSettingsEpubsAllowScriptedContent": "אפשור תוכן הכולל סקריפטים ב־ePubs",
"LabelSettingsEpubsAllowScriptedContentHelp": "אפשר לקובצי EPUB להריץ סקריפטים. מומלץ להשאיר את ההגדרה כבויה, אלא אם כן מקור קובצי ה־ePub מהימן.",
"LabelSettingsExperimentalFeatures": "תכונות ניסיוניות",
"LabelSettingsExperimentalFeaturesHelp": "תכונות בפיתוח שדורשות משובך ובדיקה. לחץ לפתיחת דיון ב-GitHub.",
"LabelSettingsFindCovers": "מצא כריכות",
@@ -551,7 +601,8 @@
"LabelSettingsHideSingleBookSeriesHelp": "סדרות הכוללות ספר אחד יוסתרו מדף הסדרות ומדף הבית.",
"LabelSettingsHomePageBookshelfView": "השתמש בתצוגת מדף בדף הבית",
"LabelSettingsLibraryBookshelfView": "השתמש בתצוגת מדף בספרייה",
"LabelSettingsOnlyShowLaterBooksInContinueSeries": "דלג על ספרים קודמים ב-המשך סדרה",
"LabelSettingsLibraryMarkAsFinishedWhen": "סמן פריט מדיה כהושלם כאשר",
"LabelSettingsOnlyShowLaterBooksInContinueSeries": "דלג על ספרים קודמים ב״המשך סדרה״",
"LabelSettingsOnlyShowLaterBooksInContinueSeriesHelp": "מדף המשך סדרות מציג את הספר הראשון שלא הושמע בסדרה שיש בה לפחות ספר אחד שהושלם ואין ספרים שכבר באמצע שמיעה. הפעלת הגדרה זו תמשיך סדרות מהספר שהושלם הכי מתקדם בסדרה במקום מהספר הראשון שלא הושמע.",
"LabelSettingsParseSubtitles": "פענח כתוביות",
"LabelSettingsParseSubtitlesHelp": "העתק כותרת משנה משם תיקיית הספר.<br>כותרת המשנה חייבת להיות מופרדת עם התו ״-״<br>לדוגמא, כותרת המשנה לספר ״שם הספר - כותרת משנה״, היא ״כותרת משנה״",
@@ -568,13 +619,22 @@
"LabelSettingsStoreMetadataWithItem": "אחסן מטה-נתונים עם הפריט",
"LabelSettingsStoreMetadataWithItemHelp": "כברירת מחדל, קבצי מטה-נתונים מאוחסנים ב- /metadata/items, הפעלת ההגדרה תאחסן קבצי מטה-נתונים בתיקיית פריט שלך בספרייה",
"LabelSettingsTimeFormat": "פורמט זמן",
"LabelShare": "שתף",
"LabelShareDownloadableHelp": "אפשר למי שיש ברשותו קישור שיתוף להוריד קובץ ZIP של פריט הספרייה.",
"LabelShareURL": "שתף קישור",
"LabelShowAll": "הצג הכל",
"LabelShowSeconds": "הצג שניות",
"LabelShowSubtitles": "הצג כתוביות",
"LabelSize": "גודל",
"LabelSleepTimer": "טיימר שינה",
"LabelSortAscending": "סדר עולה",
"LabelSortDescending": "סדר יורד",
"LabelSortPubDate": "מיין לפי תאריך פרסום",
"LabelStart": "התחל",
"LabelStartTime": "זמן התחלה",
"LabelStarted": "התחיל",
"LabelStartedAt": "התחיל ב",
"LabelStartedDate": "הותחל {0}",
"LabelStatsAudioTracks": "רצועות שמע",
"LabelStatsAuthors": "מחברים",
"LabelStatsBestDay": "היום הטוב ביותר",
@@ -604,7 +664,13 @@
"LabelTheme": "ערכת נושא",
"LabelThemeDark": "כהה",
"LabelThemeLight": "בהיר",
"LabelThemeSepia": "ספיה",
"LabelTimeBase": "בסיס זמן",
"LabelTimeDurationXHours": "{0} שעות",
"LabelTimeDurationXMinutes": "{0} דקות",
"LabelTimeDurationXSeconds": "{0} שניות",
"LabelTimeInMinutes": "זמן בשניות",
"LabelTimeLeft": "נותרו {0}",
"LabelTimeListened": "זמן האזנה",
"LabelTimeListenedToday": "זמן האזנה היום",
"LabelTimeRemaining": "{0} נותרו",
@@ -612,6 +678,7 @@
"LabelTitle": "כותרת",
"LabelToolsEmbedMetadata": "הטמעת מטה-נתונים",
"LabelToolsEmbedMetadataDescription": "הטמעת מטה-נתונים לקבצי שמע כולל תמונות כריכה ופרקים.",
"LabelToolsM4bEncoder": "מקודד M4B",
"LabelToolsMakeM4b": "יצירת קובץ אודיו M4B",
"LabelToolsMakeM4bDescription": "יצירת קובץ אודיו .M4B עם מטה-נתונים מוטמעים, תמונת שער ופרקים.",
"LabelToolsSplitM4b": "פיצול M4B ל-MP3",
@@ -624,29 +691,39 @@
"LabelTracksMultiTrack": "רב-ערוצי",
"LabelTracksNone": "אין ערוצים",
"LabelTracksSingleTrack": "רצועה יחידה",
"LabelTrailer": "קדימון",
"LabelType": "סוג",
"LabelUnabridged": "לא מקוצר",
"LabelUndo": "בטל",
"LabelUnknown": "לא ידוע",
"LabelUnknownPublishDate": "תאריך הוצאה לאור לא ידוע",
"LabelUpdateCover": "עדכן כריכה",
"LabelUpdateCoverHelp": "אפשר החלפה של כריכות קיימות עבור הספרים הנבחרים כאשר נמצאה התאמה",
"LabelUpdateDetails": "עדכון פרטים",
"LabelUpdateDetailsHelp": "אפשר החלפה של פרטים קיימים עבור הספרים הנבחרים כאשר נמצאה התאמה",
"LabelUpdatedAt": "עודכן ב-",
"LabelUploaderDragAndDrop": "גרור ושחרר קבצים או תיקיות",
"LabelUploaderDragAndDropFilesOnly": "גרור ושחרר קבצים",
"LabelUploaderDropFiles": "שחרר קבצים",
"LabelUploaderItemFetchMetadataHelp": "משיכת כותרת, סופר וסדרה באופן אוטומטי",
"LabelUseAdvancedOptions": "השתמש באפשרויות מתקדמות",
"LabelUseChapterTrack": "השתמש ברצועות הפרקים",
"LabelUseFullTrack": "השתמש ברצועה המלאה",
"LabelUseZeroForUnlimited": "השתמש ב־0 מתוך אין־סוף",
"LabelUser": "משתמש",
"LabelUsername": "שם משתמש",
"LabelValue": "ערך",
"LabelVersion": "גרסה",
"LabelViewBookmarks": "הצג סימניות",
"LabelViewChapters": "הצג פרקים",
"LabelViewPlayerSettings": "הצג הגדרות נגן",
"LabelViewQueue": "הצג תור נגן",
"LabelVolume": "עוצמת קול",
"LabelWebRedirectURLsDescription": "יש לאשר את הכתובות הבאות אצל ספק ה־OAuth כדי לאפשר הפניה חזרה לאפליקציית הדפדפן לאחר ההתחברות:",
"LabelWebRedirectURLsSubfolder": "תיקיית משנה לכתובות הפניה",
"LabelWeekdaysToRun": "ימי השבוע להרצה",
"LabelXBooks": "{0} ספרים",
"LabelXItems": "{0} פריטים",
"LabelYearReviewHide": "הסתר סקירת שנה",
"LabelYearReviewShow": "הצג סקירת שנה",
"LabelYourAudiobookDuration": "משך הספר הקולי שלך",
@@ -655,31 +732,55 @@
"LabelYourProgress": "ההתקדמות שלך",
"MessageAddToPlayerQueue": "הוסף לתור הנגן",
"MessageAppriseDescription": "כדי להשתמש בתכונה זו יש לך להריץ מופע של <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">ממשק התכנית האפליקציה</a> או API שיטפל בבקשות אלו. <br /> כתובת URL של ממשק ה-Apprise API צריכה להיות הנתיב המלא לשליחת ההתראה, לדוגמה, אם המופע של ה-API שלך מוצע ב-<code>http://192.168.1.1:8337</code> אז עליך לשים <code>http://192.168.1.1:8337/notify</code>.",
"MessageAsinCheck": "יש לוודא שימוש ב־ASIN מאזור ה־Audible הנכון, ולא מ־Amazon.",
"MessageAuthenticationLegacyTokenWarning": "אסימוני API ישנים יוסרו בעתיד. יש להשתמש ב <a href=\"/config/api-keys\">מפתחות API</a> במקום.",
"MessageAuthenticationOIDCChangesRestart": "יש להפעיל מחדש את השרת לאחר השמירה כדי להחיל את שינויי ה־OIDC.",
"MessageAuthenticationSecurityMessage": "האימות שופר מטעמי אבטחה. כל המשתמשים נדרשים להתחבר מחדש.",
"MessageBackupsDescription": "גיבויים כוללים משתמשים, התקדמות משתמש, פרטי פריטי ספרייה, הגדרות שרת ותמונות השמורות ב-<code>/metadata/items</code> & <code>/metadata/authors</code>. גיבויים <strong>לא</strong> כוללים קבצים שמורים בתיקיות הספרייה שלך.",
"MessageBackupsLocationEditNote": "הערה: שינוי מיקום הגיבוי לא יגרום להעברה או לשינוי של גיבויים קיימים",
"MessageBackupsLocationNoEditNote": "הערה: מיקום הגיבוי מוגדר באמצעות משתנה סביבה ולא ניתן לשנותו כאן.",
"MessageBackupsLocationPathEmpty": "נתיב מיקום הגיבוי אינו יכול להיות ריק",
"MessageBatchEditPopulateMapDetailsAllHelp": "מלא את השדות הפעילים בנתונים מכל הפריטים. שדות בעלי ערכים מרובים ימוזגו",
"MessageBatchEditPopulateMapDetailsItemHelp": "מלא את שדות פרטי המיפוי הפעילים בנתונים מפריט זה",
"MessageBatchQuickMatchDescription": "התאמה מהירה תנסה להוסיף כריכות ומטה-נתונים חסרים עבור הפריטים הנבחרים. הפעל את האפשרויות למטה כדי לאפשר להתאמה מהירה להחליף כריכות קיימות ו/או מטה-נתונים.",
"MessageBookshelfNoCollections": "עדיין לא יצרת אוספים",
"MessageBookshelfNoCollectionsHelp": "האוספים ציבוריים. כל המשתמשים בעלי גישה לספרייה יכולים לראות אותם.",
"MessageBookshelfNoRSSFeeds": "אין ערוצי RSS פתוחים",
"MessageBookshelfNoResultsForFilter": "אין תוצאות עבור סינון \"{0}: {1}\"",
"MessageBookshelfNoResultsForQuery": "אין תוצאות עבור השאילתה",
"MessageBookshelfNoSeries": "אין לך סדרות",
"MessageBulkChapterPattern": "כמה פרקים להוסיף לפי תבנית מספור זו?",
"MessageChapterEndIsAfter": "זמן סיום הפרק אחרי סיום הספר הקולי שלך",
"MessageChapterErrorFirstNotZero": "הפרק הראשון חייב להתחיל ב-0",
"MessageChapterErrorStartGteDuration": "זמן התחלה לא תקין, חייב להיות פחות ממשך הספר הקולי",
"MessageChapterErrorStartLtPrev": "זמן התחלה לא תקין, חייב להיות גדול או שווה לזמן ההתחלה של הפרק הקודם",
"MessageChapterStartIsAfter": "התחלת הפרק אחרי סיום הספר הקולי שלך",
"MessageChaptersNotFound": "לא נמצאו פרקים",
"MessageCheckingCron": "בודק את תזמון העבודה...",
"MessageConfirmCloseFeed": "האם אתה בטוח שאתה רוצה לסגור את הערוץ הזה?",
"MessageConfirmDeleteApiKey": "האם למחוק את מפתח ה־API \"{0}\"?",
"MessageConfirmDeleteBackup": "האם אתה בטוח שברצונך למחוק גיבוי עבור {0}?",
"MessageConfirmDeleteDevice": "האם למחוק את הקורא האלקטרוני \"{0}\"?",
"MessageConfirmDeleteFile": "הקובץ ימחק לצמיתות מהמערכת שלך. האם אתה בטוח?",
"MessageConfirmDeleteLibrary": "האם אתה בטוח שברצונך למחוק לצמיתות את הספרייה \"{0}\"?",
"MessageConfirmDeleteLibraryItem": "פריט הספרייה יימחק לצמיתות ממסד הנתונים ומהמערכת שלך. האם אתה בטוח?",
"MessageConfirmDeleteLibraryItems": "פריטי הספרייה {0} יימחקו ממסד הנתונים ומהמערכת שלך. האם אתה בטוח?",
"MessageConfirmDeleteMetadataProvider": "האם למחוק את ספק המטא־נתונים המותאם \"{0}\"?",
"MessageConfirmDeleteNotification": "האם למחוק התראה זו?",
"MessageConfirmDeleteSession": "האם אתה בטוח שאתה רוצה למחוק את ההפעלה הזו?",
"MessageConfirmEmbedMetadataInAudioFiles": "האם להטמיע מטא־נתונים ב־{0} קובצי שמע?",
"MessageConfirmForceReScan": "האם אתה בטוח שאתה רוצה להכריח סריקה מחדש?",
"MessageConfirmMarkAllEpisodesFinished": "האם אתה בטוח שברצונך לסמן את כל הפרקים כהסתיימו?",
"MessageConfirmMarkAllEpisodesNotFinished": "האם אתה בטוח שברצונך לסמן את כל הפרקים כלא הסתיימו?",
"MessageConfirmMarkItemFinished": "האם לסמן את \"{0}\" כהושלם?",
"MessageConfirmMarkItemNotFinished": "האם לסמן את \"{0}\" כלא הושלם?",
"MessageConfirmMarkSeriesFinished": "האם אתה בטוח שברצונך לסמן את כל הספרים בסדרה זו כהסתיימו?",
"MessageConfirmMarkSeriesNotFinished": "האם אתה בטוח שברצונך לסמן את כל הספרים בסדרה זו כלא הסתיימו?",
"MessageConfirmNotificationTestTrigger": "האם להפעיל התראה זו עם נתוני בדיקה?",
"MessageConfirmPurgeCache": "ניקוי המטמון ימחק את כל התיקייה ב־<code>/metadata/cache</code>.<br /><br />האם למחוק את תיקיית המטמון?",
"MessageConfirmPurgeItemsCache": "ניקוי מטמון הפריטים ימחק את כל התיקייה ב־<code>metadata/cache/items/</code>.<br />האם למחוק?",
"MessageConfirmQuickEmbed": "אזהרה! הטמעה מהירה לא תגבה גיבוי של קבצי האודיו שלך. וודא שיש לך גיבוי של קבצי האודיו שלך. <br><br>האם ברצונך להמשיך?",
"MessageConfirmQuickMatchEpisodes": "התאמה מהירה תדרוס פרטים עבור פרקים תואמים. רק פרקים ללא התאמה יעודכנו. האם להמשיך?",
"MessageConfirmReScanLibraryItems": "האם אתה בטוח שברצונך לסרוק מחדש {0} פריטים?",
"MessageConfirmRemoveAllChapters": "האם אתה בטוח שברצונך להסיר את כל הפרקים?",
"MessageConfirmRemoveAuthor": "האם אתה בטוח שברצונך להסיר את המחבר \"{0}\"?",
+9
View File
@@ -1,12 +1,18 @@
{
"ButtonAdd": "जोड़ें",
"ButtonAddApiKey": "एपीआई कुंजी जोड़ें",
"ButtonAddChapters": "अध्याय जोड़ें",
"ButtonAddDevice": "उपकरण जोड़ें",
"ButtonAddLibrary": "संग्रह जोड़ें",
"ButtonAddPodcasts": "पॉडकास्ट जोड़ें",
"ButtonAddUser": "उपयोगकर्ता जोड़ें",
"ButtonAddYourFirstLibrary": "अपनी पहली पुस्तकालय जोड़ें",
"ButtonApply": "लागू करें",
"ButtonApplyChapters": "अध्यायों में परिवर्तन लागू करें",
"ButtonAuthors": "लेखक",
"ButtonBack": "पीछे",
"ButtonBatchEditPopulateFromExisting": "मौजूदा से आबाद करें",
"ButtonBatchEditPopulateMapDetails": "मानचित्र विवरण भरें",
"ButtonBrowseForFolder": "फ़ोल्डर खोजें",
"ButtonCancel": "रद्द करें",
"ButtonCancelEncode": "एनकोड रद्द करें",
@@ -15,7 +21,9 @@
"ButtonChooseAFolder": "एक फ़ोल्डर चुनें",
"ButtonChooseFiles": "फ़ाइलें चुनें",
"ButtonClearFilter": "लागू फ़िल्टर साफ़ करें",
"ButtonClose": "बंद करें",
"ButtonCloseFeed": "फ़ीड बंद करें",
"ButtonCloseSession": "वर्तमान सत्र बंद करें",
"ButtonCollections": "संग्रह",
"ButtonConfigureScanner": "स्कैनर सेटिंग्स बदलें",
"ButtonCreate": "बनाएं",
@@ -25,6 +33,7 @@
"ButtonEdit": "संपादित करें",
"ButtonEditChapters": "अध्याय संपादित करें",
"ButtonEditPodcast": "पॉडकास्ट संपादित करें",
"ButtonEnable": "सक्षम करें",
"ButtonForceReScan": "बलपूर्वक पुन: स्कैन करें",
"ButtonFullPath": "पूर्ण पथ",
"ButtonHide": "छुपाएं",
+156 -118
View File
@@ -11,8 +11,8 @@
"ButtonApplyChapters": "Primijeni poglavlja",
"ButtonAuthors": "Autori",
"ButtonBack": "Natrag",
"ButtonBatchEditPopulateFromExisting": "Popuni iz postojećeg",
"ButtonBatchEditPopulateMapDetails": "Popuni mapirane pojedinosti",
"ButtonBatchEditPopulateFromExisting": "Popuni iz postojećih",
"ButtonBatchEditPopulateMapDetails": "Popuni detalje karte",
"ButtonBrowseForFolder": "Pronađi mapu",
"ButtonCancel": "Odustani",
"ButtonCancelEncode": "Otkaži kodiranje",
@@ -46,6 +46,7 @@
"ButtonLatest": "Najnovije",
"ButtonLibrary": "Knjižnica",
"ButtonLogout": "Odjavi se",
"ButtonLogoutAllDevices": "Odjava sa svih uređaja",
"ButtonLookup": "Potraži",
"ButtonManageTracks": "Upravljanje zvučnim zapisima",
"ButtonMapChapterTitles": "Mapiraj naslove poglavlja",
@@ -83,7 +84,7 @@
"ButtonRemoveAllLibraryItems": "Ukloni sve stavke iz knjižnice",
"ButtonRemoveFromContinueListening": "Ukloni iz Nastavi slušati",
"ButtonRemoveFromContinueReading": "Ukloni iz Nastavi čitati",
"ButtonRemoveSeriesFromContinueSeries": "Ukloni seriju iz Nastavi seriju",
"ButtonRemoveSeriesFromContinueSeries": "Ukloni serijal iz popisa „Nastavi serijal”",
"ButtonReset": "Poništi",
"ButtonResetToDefault": "Vrati na početne postavke",
"ButtonRestore": "Vraćanje",
@@ -107,17 +108,17 @@
"ButtonSubmit": "Pošalji",
"ButtonTest": "Test",
"ButtonUnlinkOpenId": "Prekini vezu s OpenID-jem",
"ButtonUpload": "Učitaj",
"ButtonUploadBackup": "Učitaj sigurnosnu kopiju",
"ButtonUploadCover": "Učitaj naslovnicu",
"ButtonUploadOPMLFile": "Učitaj OPML datoteku",
"ButtonUpload": "Prenesi",
"ButtonUploadBackup": "Prenesi sigurnosnu kopiju",
"ButtonUploadCover": "Prenesi naslovnicu",
"ButtonUploadOPMLFile": "Prenesi OPML datoteku",
"ButtonUserDelete": "Izbriši korisnika {0}",
"ButtonUserEdit": "Uredi korisnika {0}",
"ButtonViewAll": "Prikaži sve",
"ButtonYes": "Da",
"ErrorUploadFetchMetadataAPI": "Pogreška pri dohvatu meta-podataka",
"ErrorUploadFetchMetadataNoResults": "Dohvat meta-podataka nije uspio - pokušajte ispraviti naslov i/ili autora",
"ErrorUploadLacksTitle": "Naslov je obavezan",
"ErrorUploadFetchMetadataAPI": "Pogreška pri dohvaćanju meta-podataka",
"ErrorUploadFetchMetadataNoResults": "Nije bilo moguće dohvatiti meta-podatake – pokušajte aktualizirati naslov i/ili autora",
"ErrorUploadLacksTitle": "Mora imati naslov",
"HeaderAccount": "Korisnički račun",
"HeaderAddCustomMetadataProvider": "Dodaj prilagođenog pružatelja meta-podataka",
"HeaderAdvanced": "Napredno",
@@ -127,13 +128,14 @@
"HeaderAudiobookTools": "Alati za upravljanje datotekama zvučnih knjiga",
"HeaderAuthentication": "Provjera autentičnosti",
"HeaderBackups": "Sigurnosne kopije",
"HeaderBulkChapterModal": "Dodaj više poglavlja",
"HeaderChangePassword": "Promjena zaporke",
"HeaderChapters": "Poglavlja",
"HeaderChooseAFolder": "Odaberi mapu",
"HeaderCollection": "Zbirka",
"HeaderCollectionItems": "Stavke u zbirci",
"HeaderCover": "Naslovnica",
"HeaderCurrentDownloads": "Preuzimanja u tijeku",
"HeaderCurrentDownloads": "Trenutačna preuzimanja",
"HeaderCustomMessageOnLogin": "Prilagođena poruka prilikom prijave",
"HeaderCustomMetadataProviders": "Prilagođeni pružatelji meta-podataka",
"HeaderDetails": "Pojedinosti",
@@ -153,7 +155,7 @@
"HeaderLatestEpisodes": "Najnoviji nastavci",
"HeaderLibraries": "Knjižnice",
"HeaderLibraryFiles": "Datoteke knjižnice",
"HeaderLibraryStats": "Statistika knjižnice",
"HeaderLibraryStats": "Knjižnična statistika",
"HeaderListeningSessions": "Sesije slušanja",
"HeaderListeningStats": "Statistika slušanja",
"HeaderLogin": "Prijava",
@@ -193,12 +195,14 @@
"HeaderScheduleEpisodeDownloads": "Zakazivanje automatskog preuzimanja nastavaka",
"HeaderScheduleLibraryScans": "Zakaži automatsko skeniranje knjižnice",
"HeaderSession": "Sesija",
"HeaderSessions": "Sesije",
"HeaderSetBackupSchedule": "Zakazivanje sigurnosne pohrane",
"HeaderSettings": "Postavke",
"HeaderSettingsDisplay": "Prikaz",
"HeaderSettingsExperimental": "Eksperimentalne značajke",
"HeaderSettingsGeneral": "Općenito",
"HeaderSettingsScanner": "Skener",
"HeaderSettingsSecurity": "Sigurnost",
"HeaderSettingsWebClient": "Web klijent",
"HeaderSleepTimer": "Timer za spavanje",
"HeaderStatsLargestItems": "Najveće stavke",
@@ -255,7 +259,7 @@
"LabelAuthors": "Autori",
"LabelAutoDownloadEpisodes": "Automatski preuzmi nastavke",
"LabelAutoFetchMetadata": "Automatski dohvati meta-podatke",
"LabelAutoFetchMetadataHelp": "Dohvaća meta-podatke o naslovu, autoru i serijalu kako bi pojednostavnio učitavanje. Dodatni meta-podatci će se možda morati dohvatiti nakon učitavanja.",
"LabelAutoFetchMetadataHelp": "Dohvaća meta-podatke o naslovu, autoru i serijalu kako bi pojednostavnio prijenos. Dodatni meta-podatci će se možda morati usporediti nakon prijenosa.",
"LabelAutoLaunch": "Automatsko pokretanje",
"LabelAutoLaunchDescription": "Automatski preusmjeri na pružatelja autentifikacijskih usluga prilikom otvaranja stranice za prijavu (putanja za ručno zaobilaženje opcije <code>/login?autoLaunch=0</code>)",
"LabelAutoRegister": "Automatska registracija",
@@ -284,8 +288,8 @@
"LabelClickToUseCurrentValue": "Kliknite za trenutnu vrijednost",
"LabelClosePlayer": "Zatvori reproduktor",
"LabelCodec": "Kodek",
"LabelCollapseSeries": "Serijale prikaži sažeto",
"LabelCollapseSubSeries": "Podserijale prikaži sažeto",
"LabelCollapseSeries": "Sažmi serijal",
"LabelCollapseSubSeries": "Sažmi podserijale",
"LabelCollection": "Zbirka",
"LabelCollections": "Zbirke",
"LabelComplete": "Potpuno",
@@ -293,6 +297,7 @@
"LabelContinueListening": "Nastavi slušati",
"LabelContinueReading": "Nastavi čitati",
"LabelContinueSeries": "Nastavi serijal",
"LabelCorsAllowed": "Dozvoljena CORS ishodišta",
"LabelCover": "Naslovnica",
"LabelCoverImageURL": "URL naslovnice",
"LabelCoverProvider": "Pružatelj naslovnica",
@@ -300,15 +305,16 @@
"LabelCronExpression": "Cron izraz",
"LabelCurrent": "Trenutan",
"LabelCurrently": "Trenutno:",
"LabelCustomCronExpression": "Prilagođeni CRON izraz:",
"LabelCustomCronExpression": "Prilagođeni cron izraz:",
"LabelDatetime": "Datum i vrijeme",
"LabelDays": "Dani",
"LabelDeleteFromFileSystemCheckbox": "Izbriši datoteke (uklonite kvačicu ako stavku želite izbrisati samo iz baze podataka)",
"LabelDescription": "Opis",
"LabelDeselectAll": "Odznači sve",
"LabelDetectedPattern": "Prepoznat obrazac:",
"LabelDevice": "Uređaj",
"LabelDeviceInfo": "O uređaju",
"LabelDeviceIsAvailableTo": "Uređaj je dostupan...",
"LabelDeviceIsAvailableTo": "Uređaj je dostupan za...",
"LabelDirectory": "Direktorij",
"LabelDiscFromFilename": "Disk iz imena datoteke",
"LabelDiscFromMetadata": "Disk iz metapodataka",
@@ -336,7 +342,7 @@
"LabelEncodingBackupLocation": "Sigurnosna kopija vaših izvornih zvučnih datoteka čuvat će se u mapi:",
"LabelEncodingChaptersNotEmbedded": "Poglavlja se ne ugrađuju u zvučne knjige koje se sastoje od više zvučnih zapisa.",
"LabelEncodingClearItemCache": "Svakako redovito praznite predmemoriju stavki.",
"LabelEncodingFinishedM4B": "Stvorene M4B datoteke spremit će se u vašu mapu sa zvučnim knjigama:",
"LabelEncodingFinishedM4B": "Gotove M4B datoteke spremit će se u vašu mapu sa zvučnim knjigama:",
"LabelEncodingInfoEmbedded": "Meta-podatci će se ugraditi u zvučne zapise u vašoj mapi sa zvučnim knjigama.",
"LabelEncodingStartedNavigation": "Nakon pokretanja zadatka možete napustiti ovu stranicu.",
"LabelEncodingTimeWarning": "Kodiranje može potrajati do 30 minuta.",
@@ -353,8 +359,8 @@
"LabelEpisodes": "Nastavci",
"LabelEpisodic": "U nastavcima",
"LabelExample": "Primjer",
"LabelExpandSeries": "Serijal prikaži prošireno",
"LabelExpandSubSeries": "Podserijal prikaži prošireno",
"LabelExpandSeries": "Proširi serijal",
"LabelExpandSubSeries": "Proširi podserijal",
"LabelExpired": "Istekao",
"LabelExpiresAt": "Istječe",
"LabelExpiresInSeconds": "Istječe za (sekundi)",
@@ -370,15 +376,16 @@
"LabelFileBornDate": "Stvoreno {0}",
"LabelFileModified": "Datoteka izmijenjena",
"LabelFileModifiedDate": "Izmijenjeno {0}",
"LabelFilename": "Naziv datoteke",
"LabelFilename": "Ime datoteke",
"LabelFilterByUser": "Filtriraj po korisniku",
"LabelFindEpisodes": "Pronađi nastavke",
"LabelFinished": "Dovršeno",
"LabelFinished": "Završeno",
"LabelFinishedDate": "Završeno {0}",
"LabelFolder": "Mapa",
"LabelFolders": "Mape",
"LabelFontBold": "Podebljano",
"LabelFontBoldness": "Debljina slova",
"LabelFontFamily": "Skupina fontova",
"LabelFontFamily": "Skup pisma",
"LabelFontItalic": "Kurziv",
"LabelFontScale": "Veličina slova",
"LabelFontStrikethrough": "Precrtano",
@@ -389,7 +396,7 @@
"LabelHardDeleteFile": "Izbriši datoteku zauvijek",
"LabelHasEbook": "Ima e-knjigu",
"LabelHasSupplementaryEbook": "Ima dopunsku e-knjigu",
"LabelHideSubtitles": "Skrij podnaslove",
"LabelHideSubtitles": "Sakrij podnaslove",
"LabelHighestPriority": "Najviši prioritet",
"LabelHost": "Poslužitelj",
"LabelHour": "Sat",
@@ -397,7 +404,7 @@
"LabelIcon": "Ikona",
"LabelImageURLFromTheWeb": "URL slike s weba",
"LabelInProgress": "U tijeku",
"LabelIncludeInTracklist": "Uključi u popisu zvučnih zapisa",
"LabelIncludeInTracklist": "Uključi u popis zvučnih zapisa",
"LabelIncomplete": "Nepotpuno",
"LabelInterval": "Interval",
"LabelIntervalCustomDailyWeekly": "Prilagođeno dnevno/tjedno",
@@ -410,6 +417,7 @@
"LabelIntervalEveryHour": "Svaki sat",
"LabelIntervalEveryMinute": "Svaku minutu",
"LabelInvert": "Obrni",
"LabelIpAddress": "IP adresa",
"LabelItem": "Stavka",
"LabelJumpBackwardAmount": "Dužina skoka unatrag",
"LabelJumpForwardAmount": "Dužina skoka unaprijed",
@@ -418,6 +426,7 @@
"LabelLanguages": "Jezici",
"LabelLastBookAdded": "Zadnja dodana knjiga",
"LabelLastBookUpdated": "Zadnja ažurirana knjiga",
"LabelLastProgressDate": "Zadnji napredak: {0}",
"LabelLastSeen": "Zadnji puta viđen",
"LabelLastTime": "Zadnje doslušano vrijeme",
"LabelLastUpdate": "Zadnje ažuriranje",
@@ -430,19 +439,23 @@
"LabelLibraryFilterSublistEmpty": "Br {0}",
"LabelLibraryItem": "Stavka knjižnice",
"LabelLibraryName": "Ime knjižnice",
"LabelLibrarySortByProgress": "Napredak: Zadnje ažuriranje",
"LabelLibrarySortByProgressFinished": "Napredak: Završeno",
"LabelLibrarySortByProgressStarted": "Napredak: Započeto",
"LabelLimit": "Ograničenje",
"LabelLineSpacing": "Razmak između redaka",
"LabelListenAgain": "Ponovno poslušaj",
"LabelLogLevelDebug": "Debug",
"LabelLogLevelInfo": "Info",
"LabelLogLevelWarn": "Warn",
"LabelLogLevelWarn": "Upozorenje",
"LabelLookForNewEpisodesAfterDate": "Traži nove nastavke nakon ovog datuma",
"LabelLowestPriority": "Najniži prioritet",
"LabelMatchConfidence": "Pouzdanost",
"LabelMatchExistingUsersBy": "Prepoznaj postojeće korisnike pomoću",
"LabelMatchExistingUsersByDescription": "Rabi se za povezivanje postojećih korisnika. Nakon što se spoje, korisnike se prepoznaje temeljem jedinstvene oznake vašeg pružatelja SSO usluga",
"LabelMaxEpisodesToDownload": "Najveći broj nastavaka za preuzimanje. 0 za neograničeno.",
"LabelMaxEpisodesToDownloadPerCheck": "Najviše novih nastavaka za preuzimanje po provjeri",
"LabelMaxEpisodesToKeep": "Najviše nastavaka za čuvanje",
"LabelMaxEpisodesToDownloadPerCheck": "Najveći broj novih nastavaka za preuzimanje po provjeri",
"LabelMaxEpisodesToKeep": "Najveći # nastavaka za čuvanje",
"LabelMaxEpisodesToKeepHelp": "Ako je vrijednost 0, nema ograničenja broja. Nakon automatskog preuzimanja novog nastavka ova funkcija briše najstariji nastavak ako ih ima više od zadanog broja. Ovo briše samo jedan nastavak po novom preuzetom nastavku.",
"LabelMediaPlayer": "Reproduktor medijskih sadržaja",
"LabelMediaType": "Vrsta medija",
@@ -467,11 +480,12 @@
"LabelNewestAuthors": "Najnoviji autori",
"LabelNewestEpisodes": "Najnoviji nastavci",
"LabelNextBackupDate": "Sljedeća izrada sigurnosne kopije",
"LabelNextChapters": "Sljedeća poglavlja bit će:",
"LabelNextScheduledRun": "Sljedeće zakazano izvođenje",
"LabelNoApiKeys": "Nema API ključeva",
"LabelNoCustomMetadataProviders": "Nema prilagođenih pružatelja meta-podataka",
"LabelNoEpisodesSelected": "Nema odabranih nastavaka",
"LabelNotFinished": "Nije dovršeno",
"LabelNotFinished": "Nezavršeno",
"LabelNotStarted": "Nije započeto",
"LabelNotes": "Bilješke",
"LabelNotificationAppriseURL": "Apprise URL(ovi)",
@@ -484,10 +498,11 @@
"LabelNotificationsMaxQueueSize": "Najveći broj događaja za obavijest u redu čekanja",
"LabelNotificationsMaxQueueSizeHelp": "Događaji se mogu okinuti samo jednom u sekundi. Događaji će se zanemariti ako je red čekanja pun. Ovo sprečava prekomjerno slanje obavijesti.",
"LabelNumberOfBooks": "Broj knjiga",
"LabelNumberOfChapters": "Broj poglavljâ:",
"LabelNumberOfEpisodes": "broj nastavaka",
"LabelOpenIDAdvancedPermsClaimDescription": "Naziv OpenID zahtjeva koji sadrži napredna dopuštenja za korisničke radnje u aplikaciji koje će se primijeniti na ne-administratorske uloge (<b>ako su konfigurirane</b>). Ako zahtjev nedostaje u odgovoru, pristup ABS-u neće se odobriti. Ako i jedna opcija nedostaje, smatrat će se da je <code>false</code>. Pripazite da zahtjev pružatelja identiteta uvijek odgovara očekivanoj strukturi:",
"LabelOpenIDAdvancedPermsClaimDescription": "Ime OpenID zahtjeva koji sadrži napredna dopuštenja za korisničke radnje u aplikaciji koje će se primijeniti na ne-administratorske uloge (<b>ako su konfigurirane</b>). Ako zahtjev nedostaje u odgovoru, pristup ABS-u će se odbiti. Ako jedna opcija nedostaje, smatrat će se da je <code>false</code>. Pripazite da zahtjev pružatelja identiteta uvijek odgovara očekivanoj strukturi:",
"LabelOpenIDClaims": "Sljedeće opcije ostavite praznima ako želite onemogućiti napredno dodjeljivanje grupa i dozvola, odnosno ako želite automatski dodijeliti grupu 'korisnik'.",
"LabelOpenIDGroupClaimDescription": "Naziv OpenID zahtjeva koji sadrži popis korisnikovih grupa. Često se naziva <code>groups</code>. <b>Ako se konfigurira</b>, aplikacija će automatski dodijeliti uloge temeljem korisnikovih članstava u grupama, pod uvjetom da se iste zovu 'admin', 'user' ili 'guest' u zahtjevu (ne razlikuju se velika i mala slova). Zahtjev treba sadržavati popis i ako je korisnik član više grupa, aplikacija će dodijeliti ulogu koja odgovara najvišoj razini pristupa. Ukoliko se niti jedna grupa ne podudara, pristup će biti onemogućen.",
"LabelOpenIDGroupClaimDescription": "Ime OpenID zahtjeva koji sadrži popis grupa korisnika. Često se zove <code>groups</code>. <b>Ako se konfigurira</b>, aplikacija će automatski dodijeliti uloge temeljem korisničkih članstava u grupama, pod uvjetom da se iste zovu 'admin', 'user' ili 'guest' u zahtjevu (ne razlikuju se velika i mala slova). Zahtjev treba sadržavati popis i ako je korisnik član više grupa, aplikacija će dodijeliti ulogu koja odgovara najvišoj razini pristupa. Ukoliko se niti jedna grupa ne podudara, pristup će se odbiti.",
"LabelOpenRSSFeed": "Otvori RSS Feed",
"LabelOverwrite": "Prepiši",
"LabelPaginationPageXOfY": "Stranica {0} od {1}",
@@ -501,7 +516,7 @@
"LabelPermissionsDelete": "Smije brisati",
"LabelPermissionsDownload": "Smije preuzimati",
"LabelPermissionsUpdate": "Smije ažurirati",
"LabelPermissionsUpload": "Smije učitavati",
"LabelPermissionsUpload": "Smije prenositi",
"LabelPersonalYearReview": "Vaš godišnji pregled ({0})",
"LabelPhotoPathURL": "Putanja ili URL fotografije",
"LabelPlayMethod": "Način reprodukcije",
@@ -533,11 +548,11 @@
"LabelRSSFeedSlug": "Slug RSS izvora",
"LabelRSSFeedURL": "URL RSS izvora",
"LabelRandomly": "Nasumično",
"LabelReAddSeriesToContinueListening": "Ponovno dodaj serijal u Nastavi slušati",
"LabelReAddSeriesToContinueListening": "Ponovo dodaj serijal u „Nastavi slušati”",
"LabelRead": "Čitaj",
"LabelReadAgain": "Ponovno čitaj",
"LabelReadEbookWithoutProgress": "Čitaj e-knjige bez praćenja napretka",
"LabelRecentSeries": "Najnoviji serijali",
"LabelRecentSeries": "Nedavni serijali",
"LabelRecentlyAdded": "Nedavno dodano",
"LabelRecommended": "Preporučeno",
"LabelRedo": "Ponovi",
@@ -560,7 +575,7 @@
"LabelSelectEpisodesShowing": "Prikazujem {0} odabranih nastavaka",
"LabelSelectUser": "Odaberite korisnika",
"LabelSelectUsers": "Označi korisnike",
"LabelSendEbookToDevice": "Pošalji e-knjigu …",
"LabelSendEbookToDevice": "Pošalji e-knjigu na…",
"LabelSequence": "Slijed",
"LabelSerial": "Serijal",
"LabelSeries": "Serijal",
@@ -576,36 +591,36 @@
"LabelSettingsBookshelfViewHelp": "Skeumorfni dizajn sa drvenim policama",
"LabelSettingsChromecastSupport": "Podrška za Chromecast",
"LabelSettingsDateFormat": "Format datuma",
"LabelSettingsEnableWatcher": "Automatski pretražuj ima li promjena u knjižnicama",
"LabelSettingsEnableWatcherForLibrary": "Automatski traži promjene u knjižnicama",
"LabelSettingsEnableWatcher": "Automatski prati promjene u knjižnicama",
"LabelSettingsEnableWatcherForLibrary": "Automatski prati promjene u knjižnici",
"LabelSettingsEnableWatcherHelp": "Omogućuje automatsko dodavanje/ažuriranje stavki kada se uoče izmjene datoteka. *Potrebno je ponovno pokretanje poslužitelja",
"LabelSettingsEpubsAllowScriptedContent": "Omogući skripte u epub datotekama",
"LabelSettingsEpubsAllowScriptedContentHelp": "Omogućuje epub datotekama izvođenje skripti. Preporučamo isključiti ovu mogućnost ukoliko nemate povjerenja u izvore epub datoteka.",
"LabelSettingsExperimentalFeatures": "Eksperimentalne značajke",
"LabelSettingsExperimentalFeaturesHelp": "Značajke u razvoju za koje trebamo vaše povratne informacije i pomoć u testiranju. Kliknite za otvaranje rasprave na githubu.",
"LabelSettingsExperimentalFeatures": "Eksperimentalne funkcije",
"LabelSettingsExperimentalFeaturesHelp": "Funkcije u razvoju za koje trebamo vaše povratne informacije i pomoć u testiranju. Kliknite za otvaranje rasprave na githubu.",
"LabelSettingsFindCovers": "Pronađi naslovnice",
"LabelSettingsFindCoversHelp": "Ako vaša zvučna knjiga nema ugrađenu naslovnicu ili sliku naslovnice u mapi, skener će pokušati pronaći naslovnicu.<br>Napomena: ovo će produžiti trajanje skeniranja",
"LabelSettingsHideSingleBookSeries": "Skrij serijale sa samo jednom knjigom",
"LabelSettingsHideSingleBookSeries": "Sakrij serijale sa samo jednom knjigom",
"LabelSettingsHideSingleBookSeriesHelp": "Serijali koji se sastoje od samo jedne knjige neće se prikazivati na stranici serijala i na policama početne stranice.",
"LabelSettingsHomePageBookshelfView": "Prikaži početnu stranicu kao policu s knjigama",
"LabelSettingsLibraryBookshelfView": "Prikaži knjižnicu kao policu s knjigama",
"LabelSettingsLibraryMarkAsFinishedPercentComplete": "Postotak dovršenosti veći od",
"LabelSettingsLibraryMarkAsFinishedTimeRemaining": "Preostalo vrijeme je manje od (sekundi)",
"LabelSettingsLibraryMarkAsFinishedWhen": "Označi medij dovršenim kada",
"LabelSettingsLibraryMarkAsFinishedPercentComplete": "Postotak završenosti je veći od",
"LabelSettingsLibraryMarkAsFinishedTimeRemaining": "Preostalo vrijeme je manje od (sekunde)",
"LabelSettingsLibraryMarkAsFinishedWhen": "Označi medij kao završen kada",
"LabelSettingsOnlyShowLaterBooksInContinueSeries": "Preskoči ranije knjige u funkciji Nastavi serijal",
"LabelSettingsOnlyShowLaterBooksInContinueSeriesHelp": "Na polici početne stranice Nastavi serijal prikazuje se prva nezapočeta knjiga serijala koji imaju barem jednu dovršenu knjigu i nijednu započetu knjigu. Ako se ova opcija uključi serijal će nastaviti od zadnje dovršene knjige umjesto od prve nezapočete knjige.",
"LabelSettingsOnlyShowLaterBooksInContinueSeriesHelp": "Na polici početne stranice Nastavi serijal prikazuje se prva nezapočeta knjiga serijala koji imaju barem jednu završenu knjigu i nijednu započetu knjigu. Ako se ova opcija uključi serijal će nastaviti od zadnje završene knjige umjesto od prve nezapočete knjige.",
"LabelSettingsParseSubtitles": "Raščlani podnaslove",
"LabelSettingsParseSubtitlesHelp": "Iz naziva mape zvučne knjige raščlanjuje podnaslov.<br>Podnaslov mora biti odvojen s \" - \"<br>npr. \"Naslov knjige - Ovo je podnaslov\" imat će podnaslov \"Ovo je podnaslov\"",
"LabelSettingsParseSubtitlesHelp": "Raščlani podnaslove iz imena mape zvučne knjige.<br>Podnaslov mora biti odvojen sa \" - \"<br>npr. \"Naslov knjige - Ovo je podnaslov\" imat će podnaslov \"Ovo je podnaslov\"",
"LabelSettingsPreferMatchedMetadata": "Daj prednost meta-podatcima prepoznatih stavki",
"LabelSettingsPreferMatchedMetadataHelp": "Podatci prepoznatog naslova nadjačat će postojeće informacije kod korištenja funkcije Brzog prepoznavanja. Zadana funkcionalnost je da Brzo prepoznavanje samo dopuni podatke koji nedostaju.",
"LabelSettingsPreferMatchedMetadataHelp": "Podatci prepoznatog naslova će nadjačati postojeće informacije pri korištenju funkcije „Brzo prepoznavanje”. Zadana funkcionalnost je da „Brzo prepoznavanje” samo doda nedostajuće podatke.",
"LabelSettingsSkipMatchingBooksWithASIN": "Preskoči prepoznavanje knjiga koje već imaju ASIN",
"LabelSettingsSkipMatchingBooksWithISBN": "Preskoči prepoznavanje knjiga koje već imaju ISBN",
"LabelSettingsSortingIgnorePrefixes": "Zanemari prefikse kod sortiranja",
"LabelSettingsSortingIgnorePrefixesHelp": "npr. za prefiks \"the\" naslov knjige \"The Book Title\" sortirat će se \"Book Title, The\"",
"LabelSettingsSquareBookCovers": "Koristi pravokutne naslovnice knjiga",
"LabelSettingsSquareBookCoversHelp": "Koristi pravokutne naslovnice umjesto uobičajenih naslovnica omjera 1,6:1",
"LabelSettingsStoreCoversWithItem": "Spremi naslovnice uz stavke",
"LabelSettingsStoreCoversWithItemHelp": "Naslovnice se obično spremaju u /metadata/items, ako uključite ovu opciju naslovnice će se spremati u mapu knjižničke stavke. Čuva se samo jedna datoteka naziva \"cover\"",
"LabelSettingsStoreCoversWithItem": "Spremi naslovnice sa stavkom",
"LabelSettingsStoreCoversWithItemHelp": "Naslovnice se obično spremaju u /metadata/items. Uključivanjem ove opcije naslovnice će se spremati u mapu stavki vaše knjižnice. Čuva se samo jedna datoteka s imenom \"cover\"",
"LabelSettingsStoreMetadataWithItem": "Spremi metapodatke uz stavku",
"LabelSettingsStoreMetadataWithItemHelp": "Meta-podatci se obično spremaju u /metadata/items; ako uključite ovu postavku meta-podatci će se čuvati u mapama knjižničkih stavki",
"LabelSettingsTimeFormat": "Format vremena",
@@ -626,6 +641,7 @@
"LabelStartTime": "Vrijeme početka",
"LabelStarted": "Započeto",
"LabelStartedAt": "Započeto",
"LabelStartedDate": "Započeto {0}",
"LabelStatsAudioTracks": "Zvučni zapisi",
"LabelStatsAuthors": "Autori",
"LabelStatsBestDay": "Najbolji dan",
@@ -634,7 +650,7 @@
"LabelStatsDaysListened": "Dana slušano",
"LabelStatsHours": "Sati",
"LabelStatsInARow": "uzastopno",
"LabelStatsItemsFinished": "Dovršenih stavki",
"LabelStatsItemsFinished": "Završene stavke",
"LabelStatsItemsInLibrary": "Stavke u knjižnici",
"LabelStatsMinutes": "minute",
"LabelStatsMinutesListening": "Minuta odslušano",
@@ -655,6 +671,7 @@
"LabelTheme": "Tema",
"LabelThemeDark": "Tamna",
"LabelThemeLight": "Svijetla",
"LabelThemeSepia": "Sepija",
"LabelTimeBase": "Baza vremena",
"LabelTimeDurationXHours": "{0} sati",
"LabelTimeDurationXMinutes": "{0} minuta",
@@ -692,12 +709,12 @@
"LabelUpdateDetails": "Ažuriraj pojedinosti",
"LabelUpdateDetailsHelp": "Dopusti prepisivanje postojećih podataka za odabrane knjige kada se prepoznaju",
"LabelUpdatedAt": "Ažurirano",
"LabelUploaderDragAndDrop": "Pritisni i prevuci datoteke ili mape",
"LabelUploaderDragAndDropFilesOnly": "Pritisni i prevuci datoteke",
"LabelUploaderDragAndDrop": "Povuci i ispusti datoteke ili mape",
"LabelUploaderDragAndDropFilesOnly": "Povuci i ispusti datoteke",
"LabelUploaderDropFiles": "Ispusti datoteke",
"LabelUploaderItemFetchMetadataHelp": "Automatski dohvati naslov, autora i serijal",
"LabelUseAdvancedOptions": "Koristi se naprednim opcijama",
"LabelUseChapterTrack": "Upravljaj trakom poglavlja",
"LabelUseAdvancedOptions": "Koristi napredne opcije",
"LabelUseChapterTrack": "Koristi zvučni zapis poglavlja",
"LabelUseFullTrack": "Koristi cijeli zvučni zapis",
"LabelUseZeroForUnlimited": "0 za neograničeno",
"LabelUser": "Korisnik",
@@ -721,12 +738,12 @@
"LabelYourPlaylists": "Vaši popisi za izvođenje",
"LabelYourProgress": "Vaš napredak",
"MessageAddToPlayerQueue": "Dodaj u redoslijed izvođenja",
"MessageAppriseDescription": "Da biste se koristili ovom značajkom, treba vam instanca <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API-ja</a> ili API koji može rukovati istom vrstom zahtjeva.<br />The Adresa Apprise API-ja treba biti puna URL putanja za slanje obavijesti, npr. ako vam se API instanca poslužuje na adresi <code>http://192.168.1.1:8337</code> trebate upisati <code>http://192.168.1.1:8337/notify</code>.",
"MessageAppriseDescription": "Za korištnje ove funkcije, treba vam instanca <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API-ja</a> ili API koji može rukovati istom vrstom zahtjeva.<br />URL Apprise API-ja mora biti potpuna URL putanja za slanje obavijesti, npr. ako vam se API instanca poslužuje na adresi <code>http://192.168.1.1:8337</code> morate upisati <code>http://192.168.1.1:8337/notify</code>.",
"MessageAsinCheck": "Upišite ASIN iz odgovarajuće Audibleove regije, ne s Amazonov.",
"MessageAuthenticationLegacyTokenWarning": "Starije API tokene ćemo ukloniti. Umjesto njih, koristite se <a href=\"/config/api-keys\">API ključevima</a> .",
"MessageAuthenticationOIDCChangesRestart": "Ponovno pokrenite poslužitelj da biste primijenili OIDC promjene.",
"MessageAuthenticationSecurityMessage": "Provjera autentičnosti poboljšana je radi sigurnosti. Svi se korisnici moraju ponovno prijaviti.",
"MessageBackupsDescription": "Sigurnosne kopije sadrže korisnike, korisnikov napredak medija, pojedinosti knjižničke građe, postavke poslužitelja i slike koje se spremaju u <code>/metadata/items</code> & <code>/metadata/authors</code>. Sigurnosne kopije ne sadrže niti jednu datoteku iz mapa knjižnice.",
"MessageBackupsDescription": "Sigurnosne kopije sadrže korisnike, napredak korisnika, pojedinosti knjižničke građe, postavke poslužitelja i slike koje se spremaju u <code>/metadata/items</code> i <code>/metadata/authors</code>. Sigurnosne kopije ne sadrže niti jednu datoteku iz mapa knjižnice.",
"MessageBackupsLocationEditNote": "Napomena: Uređivanje lokacije za sigurnosne kopije ne premješta ili mijenja postojeće sigurnosne kopije",
"MessageBackupsLocationNoEditNote": "Napomena: Lokacija za sigurnosne kopije zadana je kroz varijablu okoline i ovdje se ne može izmijeniti.",
"MessageBackupsLocationPathEmpty": "Putanja do lokacije za sigurnosne kopije ne može ostati prazna",
@@ -739,13 +756,14 @@
"MessageBookshelfNoResultsForFilter": "Nema rezultata za filter \"{0}: {1}\"",
"MessageBookshelfNoResultsForQuery": "Vaš upit nema rezultata",
"MessageBookshelfNoSeries": "Nemate niti jedan serijal",
"MessageBulkChapterPattern": "Koliko poglavlja želite dodati s ovim obrascem numeracije?",
"MessageChapterEndIsAfter": "Kraj poglavlja je nakon kraja zvučne knjige",
"MessageChapterErrorFirstNotZero": "Prvo poglavlje mora započeti u 0",
"MessageChapterErrorStartGteDuration": "Netočno vrijeme početka, mora biti manje od trajanja zvučne knjige",
"MessageChapterErrorStartLtPrev": "Netočno vrijeme početka, mora biti veće ili jednako vremenu početka prethodnog poglavlja",
"MessageChapterStartIsAfter": "Početak poglavlja je nakon kraja zvučne knjige",
"MessageChaptersNotFound": "Poglavlja nisu pronađena",
"MessageCheckingCron": "Provjeravam cron...",
"MessageCheckingCron": "Provjeravanje cron izraza...",
"MessageConfirmCloseFeed": "Sigurno želite zatvoriti ovaj izvor?",
"MessageConfirmDeleteApiKey": "Sigurno želite izbrisati API ključ \"{0}\"?",
"MessageConfirmDeleteBackup": "Sigurno želite izbrisati sigurnosnu kopiju za {0}?",
@@ -759,12 +777,13 @@
"MessageConfirmDeleteSession": "Sigurno želite izbrisati ovu sesiju?",
"MessageConfirmEmbedMetadataInAudioFiles": "Sigurno želite ugraditi meta-podatke u {0} zvučnih datoteka?",
"MessageConfirmForceReScan": "Sigurno želite ponovno pokrenuti skeniranje?",
"MessageConfirmMarkAllEpisodesFinished": "Sigurno želite označiti sve nastavke dovršenima?",
"MessageConfirmMarkAllEpisodesNotFinished": "Sigurno želite označiti sve nastavke nedovršenima?",
"MessageConfirmMarkItemFinished": "Sigurno želite označiti \"{0}\" dovršenim?",
"MessageConfirmMarkItemNotFinished": "Sigurno želite označiti \"{0}\" nedovršenim?",
"MessageConfirmMarkSeriesFinished": "Sigurno želite označiti sve knjige u ovom serijalu dovršenima?",
"MessageConfirmMarkSeriesNotFinished": "Sigurno želite označiti sve knjige u ovom serijalu nedovršenima?",
"MessageConfirmLogoutDevice": "Sigurno se želiš odjaviti iz \"{0}\"?",
"MessageConfirmMarkAllEpisodesFinished": "Sigurno želite označiti sve nastavke kao završene?",
"MessageConfirmMarkAllEpisodesNotFinished": "Sigurno želite označiti sve nastavke kao nezavršene?",
"MessageConfirmMarkItemFinished": "Sigurno želite označiti stavku \"{0}\" kao završenu?",
"MessageConfirmMarkItemNotFinished": "Sigurno želite označiti stavku \"{0}\" kao nezavršenu?",
"MessageConfirmMarkSeriesFinished": "Sigurno želite označiti sve knjige u ovom serijalu kao završene?",
"MessageConfirmMarkSeriesNotFinished": "Sigurno želite označiti sve knjige u ovom serijalu kao nezavršene?",
"MessageConfirmNotificationTestTrigger": "Želite li okinuti ovu obavijest s probnim podatcima?",
"MessageConfirmPurgeCache": "Brisanje predmemorije izbrisat će cijelu mapu <code>/metadata/cache</code>. <br /><br />Sigurno želite izbrisati mapu predmemorije?",
"MessageConfirmPurgeItemsCache": "Brisanje predmemorije stavki izbrisat će cijelu mapu <code>/metadata/cache/items</code>.<br />Jeste li sigurni?",
@@ -792,42 +811,44 @@
"MessageConfirmUnlinkOpenId": "Sigurno želite odspojiti ovog korisnika s OpenID-ja?",
"MessageDaysListenedInTheLastYear": "{0} dana slušanja u posljednjih godinu dana",
"MessageDownloadingEpisode": "Preuzimam nastavak",
"MessageDragFilesIntoTrackOrder": "Prevlačenjem datoteka složite pravilan redoslijed",
"MessageDragFilesIntoTrackOrder": "Povlači datoteke u ispravan redoslijed",
"MessageEmbedFailed": "Ugrađivanje nije uspjelo!",
"MessageEmbedFinished": "Ugrađivanje je dovršeno!",
"MessageEmbedFinished": "Ugrađivanje je završeno!",
"MessageEmbedQueue": "Ugrađivanje meta-podataka dodano u red obrade ({0} u redu)",
"MessageEpisodesQueuedForDownload": "{0} nastavak(a) u redu za preuzimanje",
"MessageEreaderDevices": "Da biste osigurali isporuku e-knjiga, možda ćete morati gornju adresu e-pošte dodati kao dopuštenog pošiljatelja za svaki od donjih uređaja.",
"MessageFeedURLWillBe": "URL izvora bit će {0}",
"MessageFetching": "Dohvaćam...",
"MessageFetching": "Dohvaćanje...",
"MessageForceReScanDescription": "će ponovno skenirati sve datoteke kao nove datoteke. ID3 tagovi zvučnih datoteka, OPF datoteke i tekstualne datoteke skenirat će se kao da su nove.",
"MessageHeatmapListeningTimeTooltip": "<strong>{0} sluša</strong> na {1}",
"MessageHeatmapNoListeningSessions": "Nema sesija slušanja na {0}",
"MessageImportantNotice": "Važna obavijest!",
"MessageInsertChapterBelow": "Unesi poglavlje ispod",
"MessageInvalidAsin": "Nevažeći ASIN",
"MessageItemsSelected": "{0} odabranih stavki",
"MessageItemsUpdated": "{0} stavki ažurirano",
"MessageJoinUsOn": "Pridruži nam se na",
"MessageLoading": "Učitavam...",
"MessageLoadingFolders": "Učitavam mape...",
"MessageLoading": "Učitavanje...",
"MessageLoadingFolders": "Učitavanje mape...",
"MessageLogsDescription": "Zapisnici se čuvaju u <code>/metadata/logs</code> u obliku JSON datoteka. Zapisnici pada sustava čuvaju se u datoteci <code>/metadata/logs/crash_logs.txt</code>.",
"MessageM4BFailed": "M4B neuspješan!",
"MessageM4BFinished": "M4B završio!",
"MessageMapChapterTitles": "Mapiraj nazive poglavlja postojećim poglavljima zvučne knjige bez uređivanja vremenskih identifikatora",
"MessageMarkAllEpisodesFinished": "Označi sve nastavke dovršenima",
"MessageMarkAllEpisodesNotFinished": "Označi sve nastavke nedovršenima",
"MessageMarkAsFinished": "Označi kao dovršeno",
"MessageMarkAsNotFinished": "Označi kao nedovršeno",
"MessageMatchBooksDescription": "će pokušati prepoznati knjige iz knjižnice u katalogu odabranog pružatelja podatka te nadopuniti podatke koji nedostaju i naslovnice. Ne prepisuje preko postojećih podataka.",
"MessageM4BFailed": "M4B datoteka neuspjela!",
"MessageM4BFinished": "M4B datoteka je završena!",
"MessageMapChapterTitles": "Mapiraj imana poglavlja s vašim postojećim poglavljima zvučne knjige bez podešavanja vremenskih identifikatora",
"MessageMarkAllEpisodesFinished": "Označi sve nastavke kao završene",
"MessageMarkAllEpisodesNotFinished": "Označi sve nastavke kao nezavršene",
"MessageMarkAsFinished": "Označi kao završeno",
"MessageMarkAsNotFinished": "Označi kao nezavršeno",
"MessageMatchBooksDescription": "će pokušati prepoznati knjige iz knjižnice u katalogu odabranog pružatelja podatka te nadopuniti podatke koji nedostaju i naslovnice. Ne prepisuje postojeće podatke.",
"MessageNoAudioTracks": "Nema zvučnih zapisa",
"MessageNoAuthors": "Nema autora",
"MessageNoBackups": "Nema sigurnosnih kopija",
"MessageNoBookmarks": "Nema knjižnih oznaka",
"MessageNoChapters": "Nema poglavlja",
"MessageNoCollections": "Nema zbirki",
"MessageNoCoversFound": "Naslovnice nisu pronađene",
"MessageNoCoversFound": "Nije pronađena nijedna naslovnica",
"MessageNoDescription": "Nema opisa",
"MessageNoDevices": "Nema uređaja",
"MessageNoDownloadsInProgress": "Nema preuzimanja u tijeku",
"MessageNoDownloadsInProgress": "Trenutačno nema preuzimanja u tijeku",
"MessageNoDownloadsQueued": "Nema preuzimanja u redu",
"MessageNoEpisodeMatchesFound": "Nije pronađen ni jedan odgovarajući nastavak",
"MessageNoEpisodes": "Nema nastavaka",
@@ -856,28 +877,28 @@
"MessagePauseChapter": "Pauziraj reprodukciju poglavlja",
"MessagePlayChapter": "Slušaj početak poglavlja",
"MessagePlaylistCreateFromCollection": "Stvori popis za izvođenje od zbirke",
"MessagePleaseWait": "Molimo pričekajte...",
"MessagePleaseWait": "Pričekajte...",
"MessagePodcastHasNoRSSFeedForMatching": "Podcast nema adresu RSS izvora za prepoznavanje",
"MessagePodcastSearchField": "Upišite izraz za pretraživanje ili URL RSS izvora",
"MessageQuickEmbedInProgress": "Brzo ugrađivanje u tijeku",
"MessageQuickEmbedQueue": "Dodano u red za brzo ugrađivanje ({0} u redu izvođenja)",
"MessageQuickMatchAllEpisodes": "Brzo prepoznavanje svih nastavaka",
"MessageQuickMatchDescription": "Popuni pojedinosti i naslovnice koji nedostaju prvim pronađenim rezultatom za '{0}'. Ne prepisuje podatke osim ako ne uključite mogućnost 'Daj prednost meta-podatcima prepoznatih stavki'.",
"MessageQuickMatchDescription": "Popuni pojedinosti i naslovnice koji nedostaju prvim pronađenim rezultatom za '{0}'. Ne prepisuje podatke osim ako je postavka poslužitelja „Daj prednost meta-podatcima prepoznatih stavki” uključena.",
"MessageRemoveChapter": "Ukloni poglavlje",
"MessageRemoveEpisodes": "Ukloni {0} nastavaka",
"MessageRemoveFromPlayerQueue": "Ukloni iz redoslijeda izvođenja",
"MessageRemoveUserWarning": "Sigurno želite trajno izbrisati korisnika \"{0}\"?",
"MessageReportBugsAndContribute": "Prijavite pogreške, zatražite funkcionalnosti i doprinesite na",
"MessageReportBugsAndContribute": "Prijavite pogreške, zatražite funkcije i doprinesite na",
"MessageResetChaptersConfirm": "Sigurno želite vratiti poglavlja na prethodno stanje i poništiti učinjene promjene?",
"MessageRestoreBackupConfirm": "Sigurno želite vratiti sigurnosnu kopiju izrađenu",
"MessageRestoreBackupWarning": "Vraćanjem sigurnosne kopije prepisat ćete cijelu bazu podataka koja se nalazi u /config i slike naslovnice u /metadata/items i /metadata/authors.<br /><br />Sigurnosne kopije ne mijenjaju datoteke koje se nalaze u mapama vaših knjižnica. Ako ste u postavkama poslužitelja uključili mogućnost spremanja naslovnica i meta-podataka u mape knjižnice, te se datoteke neće niti sigurnosno pohraniti niti prepisati. <br /><br />Svi klijenti koji se spajaju na vaš poslužitelj automatski će se osvježiti.",
"MessageScheduleLibraryScanNote": "Za većinu korisnika se preporučuje ostaviti ovu funkciju deaktiviranom i ostaviti postavku promatrača mape aktiviranom. Promatrač mapa će automatski otkriti promjene u mapama vaše knjižnice. Promatrač mapa ne radi na svakom datotečnom sustavu (kao što je NFS) pa se umjesto njega mogu koristiti planirana pretraživanja knjižnice.",
"MessageScheduleLibraryScanNote": "Za većinu korisnika se preporučuje ostaviti ovu funkciju deaktiviranom kao i fukciju „Automatski prati promjene u knjižnici” koja automatski otkriva promjene u mapama vaše knjižnice. Fukcija „Automatski prati promjene u knjižnici” ne radi na svakom datotečnom sustavu (kao što je NFS).",
"MessageScheduleRunEveryWeekdayAtTime": "Pokreni svaki {0} u {1}",
"MessageSearchResultsFor": "Rezultati pretrage za",
"MessageSelected": "{0} odabrano",
"MessageSeriesSequenceCannotContainSpaces": "Slijed serijala ne može sadržavati praznine",
"MessageServerCouldNotBeReached": "Nije moguće pristupiti poslužitelju",
"MessageSetChaptersFromTracksDescription": "Postavi poglavlja koristeći se zvučnom datotekom kao poglavljem i nazivom datoteke kao naslovom poglavlja",
"MessageServerCouldNotBeReached": "Nije bilo moguće pristupiti poslužitelju",
"MessageSetChaptersFromTracksDescription": "Postavi poglavlja koristeći svaku zvučnu datoteku kao poglavlje, a naslov poglavlja kao ime datoteke",
"MessageShareExpirationWillBe": "Vrijeme isteka će biti <strong>{0}</strong>",
"MessageShareExpiresIn": "Istječe za {0}",
"MessageShareURLWillBe": "URL za dijeljenje bit će <strong>{0}</strong>",
@@ -906,7 +927,7 @@
"MessageTaskOpmlImportFeedPodcastDescription": "Stvaranje podcasta \"{0}\"",
"MessageTaskOpmlImportFeedPodcastExists": "Podcast već postoji u putanji",
"MessageTaskOpmlImportFeedPodcastFailed": "Stvaranje podcasta nije uspjelo",
"MessageTaskOpmlImportFinished": "Dodano {0} podcasta",
"MessageTaskOpmlImportFinished": "Broj dodanih podcasta: {0}",
"MessageTaskOpmlParseFailed": "Raščlanjivanje OPML datoteke nije uspjelo",
"MessageTaskOpmlParseFastFail": "Neispravna OPML datoteka, oznaka <opml> nije pronađena ILI oznaka <outline> nije pronađena",
"MessageTaskOpmlParseNoneFound": "U OPML datoteci nisu pronađeni izvori",
@@ -917,10 +938,10 @@
"MessageTaskScanningFileChanges": "Skeniranje izmijenjenih datoteka u \"{0}\"",
"MessageTaskScanningLibrary": "Skeniranje knjižnice \"{0}\"",
"MessageTaskTargetDirectoryNotWritable": "U odredišnu mapu nije moguće pisati",
"MessageThinking": "Razmišljam...",
"MessageUploaderItemFailed": "Učitavanje nije uspjelo",
"MessageUploaderItemSuccess": "Uspješno učitano!",
"MessageUploading": "Učitavam...",
"MessageThinking": "Razmišljanje...",
"MessageUploaderItemFailed": "Prijenos nije uspio",
"MessageUploaderItemSuccess": "Uspješno preneseno!",
"MessageUploading": "Prijenos...",
"MessageValidCronExpression": "Ispravan cron izraz",
"MessageWatcherIsDisabledGlobally": "Praćenje datotečnog sustava globalno je isključen u postavkama poslužitelja",
"MessageXLibraryIsEmpty": "{0} Knjižnica je prazna!",
@@ -932,24 +953,25 @@
"NoteRSSFeedPodcastAppsHttps": "Pripazite: Većina aplikacija za podcaste iziskuje URL RSS izvora koji se koristi HTTPS protokolom",
"NoteRSSFeedPodcastAppsPubDate": "Upozorenje: jedan ili više vaših nastavaka nemaju datum objavljivanja. To je obavezno kod nekih aplikacija za podcaste.",
"NoteUploaderFoldersWithMediaFiles": "Mape s medijskim datotekama smatrat će se zasebnim stavkama knjižnice.",
"NoteUploaderOnlyAudioFiles": "Ako učitavate samo zvučne datoteke svaka će se zvučna datoteka uvesti kao zasebna zvučna knjiga.",
"NoteUploaderUnsupportedFiles": "Nepodržane vrste datoteka zanemaruju se. Kada odabirete datoteke ili ispuštate mapu, sve datoteke koje nisu u mapi stavke zanemarit će se.",
"NoteUploaderOnlyAudioFiles": "Ako prenosite samo zvučne datoteke svaka će se zvučna datoteka uvesti kao zasebna zvučna knjiga.",
"NoteUploaderUnsupportedFiles": "Nepodržane vrste datoteka se zanemaruju. Kada birate datoteke ili ispuštate mapu, sve datoteke koje nisu u mapi stavke će se zanemariti.",
"NotificationOnBackupCompletedDescription": "Pokreće se po završetku sigurnosnog kopiranja",
"NotificationOnBackupFailedDescription": "Pokreće se kada sigurnosno kopiranje ne uspije",
"NotificationOnEpisodeDownloadedDescription": "Pokreće se kada se nastavak podcasta automatski preuzme",
"NotificationOnRSSFeedDisabledDescription": "Pokreće se kada su automatska preuzimanja nastavaka onemogućena zbog previše neuspjelih pokušaja",
"NotificationOnRSSFeedFailedDescription": "Pokreće se u slučaju pogreške pri pokušaju automatskog preuzimanja nastavka s RSS izvora",
"NotificationOnTestDescription": "Događaj za testiranje sustava obavijesti",
"PlaceholderBulkChapterInput": "Upišite naslov poglavlja ili ga numerirajte (npr. '1. nastavak', 'Poglavlje 10', '1.')",
"PlaceholderNewCollection": "Ime nove zbirke",
"PlaceholderNewFolderPath": "Nova putanja mape",
"PlaceholderNewPlaylist": "Naziv novog popisa za izvođenje",
"PlaceholderNewPlaylist": "Ime novog popisa za izvođenje",
"PlaceholderSearch": "Traži...",
"PlaceholderSearchEpisode": "Traži nastavak...",
"StatsAuthorsAdded": "autora dodano",
"StatsBooksAdded": "knjiga dodano",
"StatsBooksAdditional": "Novi naslovi uključuju…",
"StatsBooksFinished": "knjiga dovršeno",
"StatsBooksFinishedThisYear": "Neke knjige dovršene ove godine…",
"StatsBooksFinished": "završene knjige",
"StatsBooksFinishedThisYear": "Neke završene knjige ove godine…",
"StatsBooksListenedTo": "knjiga slušano",
"StatsCollectionGrewTo": "Vaša je zbirka knjiga narasla na…",
"StatsSessions": "sesija",
@@ -981,8 +1003,8 @@
"ToastBackupInvalidMaxKeep": "Neispravan broj sigurnosnih kopija za čuvanje",
"ToastBackupInvalidMaxSize": "Neispravna najveća veličina sigurnosne kopije",
"ToastBackupRestoreFailed": "Vraćanje sigurnosne kopije nije uspjelo",
"ToastBackupUploadFailed": "Učitavanje sigurnosne kopije nije uspjelo",
"ToastBackupUploadSuccess": "Sigurnosna kopija učitana",
"ToastBackupUploadFailed": "Prijenos sigurnosne kopije nije uspio",
"ToastBackupUploadSuccess": "Sigurnosna kopija je prenesea",
"ToastBatchApplyDetailsToItemsSuccess": "Pojedinosti primijenjene stavkama",
"ToastBatchDeleteFailed": "Grupno brisanje nije uspjelo",
"ToastBatchDeleteSuccess": "Grupno brisanje je uspjelo",
@@ -993,29 +1015,35 @@
"ToastBookmarkCreateFailed": "Izrada knjižne oznake nije uspjela",
"ToastBookmarkCreateSuccess": "Knjižna oznaka dodana",
"ToastBookmarkRemoveSuccess": "Knjižna oznaka uklonjena",
"ToastBulkChapterInvalidCount": "Upišite broj od 1 i 150",
"ToastCachePurgeFailed": "Čišćenje predmemorije nije uspjelo",
"ToastCachePurgeSuccess": "Predmemorija uspješno očišćena",
"ToastChapterLocked": "Poglavlje je zaključano.",
"ToastChapterStartTimeAdjusted": "Vrijeme početka poglavlja prilagođeno za {0} sekundi",
"ToastChaptersAllLocked": "Sva su poglavlja zaključana. Otključajte neka poglavlja za pomicanje njihovog vremena.",
"ToastChaptersHaveErrors": "Poglavlja imaju pogreške",
"ToastChaptersInvalidShiftAmountLast": "Neispravna vrijednost pomaka. Početak zadnjeg poglavlja bio bi nakon duljine trajanja ove zvučne knjige.",
"ToastChaptersInvalidShiftAmountStart": "Neispravna vrijednost pomaka. Trajanje prvog poglavlja bilo bi nula ili negativno i drugo poglavlje bi ga prepisalo. Povećajte vrijeme početka drugog poglavlja.",
"ToastChaptersMustHaveTitles": "Poglavlja moraju imati naslove",
"ToastChaptersRemoved": "Poglavlja uklonjena",
"ToastChaptersUpdated": "Poglavlja su ažurirana",
"ToastCollectionItemsAddFailed": "Neuspješno dodavanje stavki u zbirku",
"ToastCollectionItemsAddFailed": "Neuspjelo dodavanje stavki u zbirku",
"ToastCollectionRemoveSuccess": "Zbirka izbrisana",
"ToastCollectionUpdateSuccess": "Zbirka ažurirana",
"ToastConnectionNotAvailable": "Veza nije dostupna. Pokušaj ponovo kasnije",
"ToastCoverSearchFailed": "Pretraga naslovnice neuspjela",
"ToastCoverUpdateFailed": "Ažuriranje naslovnice nije uspjelo",
"ToastDateTimeInvalidOrIncomplete": "Datum i vrijeme su neispravni ili nepotpuni",
"ToastDeleteFileFailed": "Brisanje datoteke nije uspjelo",
"ToastDeleteFileSuccess": "Datoteka izbrisana",
"ToastDeviceAddFailed": "Dodavanje uređaja nije uspjelo",
"ToastDeviceNameAlreadyExists": "E-čitač s tim nazivom već postoji",
"ToastDeviceNameAlreadyExists": "E-čitač s tim imenom već postoji",
"ToastDeviceTestEmailFailed": "Slanje probne poruke e-pošte nije uspjelo",
"ToastDeviceTestEmailSuccess": "Probna poruka e-pošte poslana",
"ToastEmailSettingsUpdateSuccess": "Postavke e-pošte ažurirane",
"ToastEncodeCancelFailed": "Kodiranje nije uspješno otkazano",
"ToastEncodeCancelFailed": "Prekidanje kodiranja nije uspjelo",
"ToastEncodeCancelSucces": "Kodiranje otkazano",
"ToastEpisodeDownloadQueueClearFailed": "Redoslijed izvođenja nije uspješno očišćen",
"ToastEpisodeDownloadQueueClearFailed": "Brisanje redoslijeda izvođenja nije uspjelo",
"ToastEpisodeDownloadQueueClearSuccess": "Redoslijed preuzimanja nastavaka očišćen",
"ToastEpisodeUpdateSuccess": "{0} nastavak/a ažurirano",
"ToastErrorCannotShare": "Dijeljenje na ovaj uređaj nije moguće",
@@ -1028,14 +1056,15 @@
"ToastInvalidImageUrl": "Neispravan URL slike",
"ToastInvalidMaxEpisodesToDownload": "Neispravan unos maksimalnog broja nastavaka",
"ToastInvalidUrl": "Neispravan URL",
"ToastInvalidUrls": "Jedan ili više URL-ova nisu ispravni",
"ToastItemCoverUpdateSuccess": "Naslovnica stavke ažurirana",
"ToastItemDeletedFailed": "Brisanje stavke nije uspjelo",
"ToastItemDeletedSuccess": "Stavka je izbrisana",
"ToastItemDetailsUpdateSuccess": "Pojedinosti stavke su ažurirane",
"ToastItemMarkedAsFinishedFailed": "Označavanje kao Dovršeno nije uspjelo",
"ToastItemMarkedAsFinishedSuccess": "Stavka označena kao dovršena",
"ToastItemMarkedAsNotFinishedFailed": "Označavanje kao Nije dovršeno nije uspjelo",
"ToastItemMarkedAsNotFinishedSuccess": "Stavka označena kao nedovršena",
"ToastItemMarkedAsFinishedFailed": "Označavanje kao „Završeno” nije uspjelo",
"ToastItemMarkedAsFinishedSuccess": "Stavka je označena kao završena",
"ToastItemMarkedAsNotFinishedFailed": "Označavanje kao „Nezavršeno” nije uspjelo",
"ToastItemMarkedAsNotFinishedSuccess": "Stavka je označena kao nezavršena",
"ToastItemUpdateSuccess": "Stavka ažurirana",
"ToastLibraryCreateFailed": "Stvaranje knjižnice nije uspjelo",
"ToastLibraryCreateSuccess": "Knjižnica \"{0}\" stvorena",
@@ -1044,17 +1073,17 @@
"ToastLibraryScanFailedToStart": "Skeniranje nije uspjelo",
"ToastLibraryScanStarted": "Skeniranje knjižnice započelo",
"ToastLibraryUpdateSuccess": "Knjižnica \"{0}\" ažurirana",
"ToastMatchAllAuthorsFailed": "Nisu prepoznati svi autori",
"ToastMatchAllAuthorsFailed": "Prepoznavanje svih autora nije uspjelo",
"ToastMetadataFilesRemovedError": "Pogreška kod uklanjanja datoteka metadata.{0}",
"ToastMetadataFilesRemovedNoneFound": "U knjižnici nisu pronađene datoteke metadata.{0}",
"ToastMetadataFilesRemovedNoneRemoved": "Datoteke metadata.{0} nisu uklonjenje",
"ToastMetadataFilesRemovedSuccess": "uklonjeno {0} datoteka metadata.{1}",
"ToastMustHaveAtLeastOnePath": "Mora postojati barem jedna putanja",
"ToastMetadataFilesRemovedNoneRemoved": "Nijedna datoteka metadata.{0} nije uklonjenja",
"ToastMetadataFilesRemovedSuccess": "Broj uklonjenih datoteka metadata.{1}: {0}",
"ToastMustHaveAtLeastOnePath": "Mora imati barem jednu putanju",
"ToastNameEmailRequired": "Ime i adresa e-pošte su obavezni",
"ToastNameRequired": "Ime je obavezno",
"ToastNewApiKeyUserError": "Morate odabrati korisnika",
"ToastNewEpisodesFound": "pronađeno {0} novih nastavaka",
"ToastNewUserCreatedFailed": "Račun \"{0}\" nije uspješno izrađen",
"ToastNewUserCreatedFailed": "Stvaranje računa nije uspjelo: \"{0}\"",
"ToastNewUserCreatedSuccess": "Novi račun izrađen",
"ToastNewUserLibraryError": "Treba odabrati barem jednu knjižnicu",
"ToastNewUserPasswordError": "Mora imati zaporku, samo korisnik root može imati praznu zaporku",
@@ -1065,19 +1094,20 @@
"ToastNoUpdatesNecessary": "Ažuriranja nisu potrebna",
"ToastNotificationCreateFailed": "Stvaranje obavijesti nije uspjelo",
"ToastNotificationDeleteFailed": "Brisanje obavijesti nije uspjelo",
"ToastNotificationFailedMaximum": "Najveći broj neuspješnih pokušaja mora biti >= 0",
"ToastNotificationFailedMaximum": "Najveći broj neuspjelih pokušaja mora biti >= 0",
"ToastNotificationQueueMaximum": "Najveći broj obavijesti u redu mora biti >= 0",
"ToastNotificationSettingsUpdateSuccess": "Postavke obavijesti ažurirane",
"ToastNotificationTestTriggerFailed": "Okidanje probne obavijesti nije uspjelo",
"ToastNotificationTestTriggerSuccess": "Okinuta je probna obavijest",
"ToastNotificationUpdateSuccess": "Obavijest ažurirana",
"ToastPlaylistCreateFailed": "Popis za izvođenje nije izrađen",
"ToastPlaylistCreateFailed": "Izrada popisa za izvođenje nije uspjela",
"ToastPlaylistCreateSuccess": "Popis za izvođenje izrađen",
"ToastPlaylistRemoveSuccess": "Popis za izvođenje uklonjen",
"ToastPlaylistUpdateSuccess": "Popis za izvođenje ažuriran",
"ToastPodcastCreateFailed": "Podcast nije izrađen",
"ToastPodcastCreateFailed": "Stvaranje podcasta nije uspjelo",
"ToastPodcastCreateSuccess": "Podcast uspješno izrađen",
"ToastPodcastGetFeedFailed": "Dohvat izvora podcasta nije uspio",
"ToastPodcastEpisodeUpdated": "Nastavak ažuriran",
"ToastPodcastGetFeedFailed": "Dohvaćanje izvora podcasta nije uspjelo",
"ToastPodcastNoEpisodesInFeed": "U RSS izvoru nisu pronađeni nastavci",
"ToastPodcastNoRssFeed": "Podcast nema RSS izvor",
"ToastProgressIsNotBeingSynced": "Napredak se ne sinkronizira, ponovno pokrenite reprodukciju",
@@ -1085,7 +1115,7 @@
"ToastProviderCreatedSuccess": "Novi pružatelj dodan",
"ToastProviderNameAndUrlRequired": "Ime i URL su obavezni",
"ToastProviderRemoveSuccess": "Pružatelj uklonjen",
"ToastRSSFeedCloseFailed": "RSS izvor nije uspješno zatvoren",
"ToastRSSFeedCloseFailed": "Zatvaranje RSS izvora nije uspjelo",
"ToastRSSFeedCloseSuccess": "RSS izvor zatvoren",
"ToastRemoveFailed": "Uklanjanje nije uspjelo",
"ToastRemoveItemFromCollectionFailed": "Uklanjanje stavke iz zbirke nije uspjelo",
@@ -1093,7 +1123,7 @@
"ToastRemoveItemsWithIssuesFailed": "Uklanjanje knjižničkih stavki s problemima nije uspjelo",
"ToastRemoveItemsWithIssuesSuccess": "Uspješno uklonjene knjižničke stavke s problemima",
"ToastRenameFailed": "Preimenovanje nije uspjelo",
"ToastRescanFailed": "Ponovno skeniranje {0} nije uspjelo",
"ToastRescanFailed": "Ponovno skeniranje nije uspjelo za {0}",
"ToastRescanRemoved": "Ponovno skeniranje dovršene stavke je uklonjeno",
"ToastRescanUpToDate": "Ponovno skeniranje dovršene stavke bilo je ažurno",
"ToastRescanUpdated": "Ponovno skeniranje dovršene stavke je ažurirano",
@@ -1108,7 +1138,7 @@
"ToastSessionCloseFailed": "Zatvaranje sesije nije uspjelo",
"ToastSessionDeleteFailed": "Brisanje sesije nije uspjelo",
"ToastSessionDeleteSuccess": "Sesija izbrisana",
"ToastSleepTimerDone": "Timer za spavanje istječe... zZzzZz",
"ToastSleepTimerDone": "Timer za spavanje gotov... zZzzZz",
"ToastSlugMustChange": "Slug sadrži nedozvoljene znakove",
"ToastSlugRequired": "Slug je obavezan",
"ToastSocketConnected": "Socket priključen",
@@ -1120,12 +1150,20 @@
"ToastUnknownError": "Nepoznata pogreška",
"ToastUnlinkOpenIdFailed": "Uklanjanje OpenID veze korisnika nije uspjelo",
"ToastUnlinkOpenIdSuccess": "Korisnik odspojen od OpenID-ja",
"ToastUploaderFilepathExistsError": "Putanja \"{0}\" već postoji na poslužitelju",
"ToastUploaderItemExistsInSubdirectoryError": "Stavka \"{0}\" koristi se podmapom u putanje za učitavanje.",
"ToastUploaderFilepathExistsError": "Datotečna putanja \"{0}\" već postoji na poslužitelju",
"ToastUploaderItemExistsInSubdirectoryError": "Stavka \"{0}\" koristi podmapu putanje za prijenos.",
"ToastUserDeleteFailed": "Brisanje korisnika nije uspjelo",
"ToastUserDeleteSuccess": "Korisnik izbrisan",
"ToastUserPasswordChangeSuccess": "Zaporka je uspješno promijenjena",
"ToastUserPasswordMismatch": "Zaporke se ne podudaraju",
"ToastUserPasswordMustChange": "Nova zaporka ne smije biti jednaka staroj",
"ToastUserRootRequireName": "Obavezan je unos korisničkog imena root korisnika"
"ToastUserRootRequireName": "Obavezan je unos korisničkog imena root korisnika",
"TooltipAddChapters": "Dodavanje poglavlja",
"TooltipAddOneSecond": "Dodaj 1 sekundu",
"TooltipAdjustChapterStart": "Kliknite za uređivanje početnog vremena",
"TooltipLockAllChapters": "Zaključaj sva poglavlja",
"TooltipLockChapter": "Zaključaj poglavlje (Shift + klik za raspon)",
"TooltipSubtractOneSecond": "Oduzmi 1 sekundu",
"TooltipUnlockAllChapters": "Otključaj sva poglavlja",
"TooltipUnlockChapter": "Otključaj poglavlje (Shift+klik za raspon)"
}
+46 -12
View File
@@ -16,7 +16,7 @@
"ButtonBrowseForFolder": "Mappa keresése",
"ButtonCancel": "Mégse",
"ButtonCancelEncode": "Kódolás megszakítása",
"ButtonChangeRootPassword": "Gyökérjelszó megváltoztatása",
"ButtonChangeRootPassword": "Root jelszó megváltoztatása",
"ButtonCheckAndDownloadNewEpisodes": "Új epizódok ellenőrzése és letöltése",
"ButtonChooseAFolder": "Válassz egy mappát",
"ButtonChooseFiles": "Fájlok kiválasztása",
@@ -46,6 +46,7 @@
"ButtonLatest": "Legújabb",
"ButtonLibrary": "Könyvtár",
"ButtonLogout": "Kijelentkezés",
"ButtonLogoutAllDevices": "Kijelentkezés az összes eszközről",
"ButtonLookup": "Keresés",
"ButtonManageTracks": "Sávok kezelése",
"ButtonMapChapterTitles": "Fejezetcímek hozzárendelése",
@@ -127,6 +128,7 @@
"HeaderAudiobookTools": "Hangoskönyv fájlkezelő eszközök",
"HeaderAuthentication": "Hitelesítés",
"HeaderBackups": "Biztonsági másolatok",
"HeaderBulkChapterModal": "Több fejezet hozzáadása",
"HeaderChangePassword": "Jelszó megváltoztatása",
"HeaderChapters": "Fejezetek",
"HeaderChooseAFolder": "Válasszon egy mappát",
@@ -193,17 +195,19 @@
"HeaderScheduleEpisodeDownloads": "Automatikus epizódletöltés ütemezése",
"HeaderScheduleLibraryScans": "Könyvtárak automatikus szkennelésének ütemezése",
"HeaderSession": "Munkamenet",
"HeaderSessions": "Munkamenet",
"HeaderSetBackupSchedule": "Biztonsági másolatok ütemezésének beállítása",
"HeaderSettings": "Beállítások",
"HeaderSettingsDisplay": "Kijelző",
"HeaderSettingsExperimental": "Kísérleti funkciók",
"HeaderSettingsGeneral": "Általános",
"HeaderSettingsScanner": "Szkenner",
"HeaderSettingsSecurity": "Biztonság",
"HeaderSettingsWebClient": "Webkliens",
"HeaderSleepTimer": "Alvásidőzítő",
"HeaderStatsLargestItems": "Legnagyobb elemek",
"HeaderStatsLongestItems": "Leghosszabb elemek (órában)",
"HeaderStatsMinutesListeningChart": "Hallgatási grafikon percekben (az elmúlt 7 napból)",
"HeaderStatsMinutesListeningChart": "Hallgatási grafikon percben (az elmúlt 7 napból)",
"HeaderStatsRecentSessions": "Legutóbbi munkamenetek",
"HeaderStatsTop10Authors": "Top 10 szerző",
"HeaderStatsTop5Genres": "Top 5 műfaj",
@@ -284,7 +288,7 @@
"LabelClickToUseCurrentValue": "Kattintson az aktuális érték használatához",
"LabelClosePlayer": "Lejátszó bezárása",
"LabelCodec": "Kodek",
"LabelCollapseSeries": "Sorozat összecsukása",
"LabelCollapseSeries": "Sorozatok összecsukása",
"LabelCollapseSubSeries": "Alszéria összecsukása",
"LabelCollection": "Gyűjtemény",
"LabelCollections": "Gyűjtemények",
@@ -293,6 +297,7 @@
"LabelContinueListening": "Hallgatás folytatása",
"LabelContinueReading": "Olvasás folytatása",
"LabelContinueSeries": "Sorozat folytatása",
"LabelCorsAllowed": "Megengedett CORS Originek",
"LabelCover": "Borító",
"LabelCoverImageURL": "Borítókép URL",
"LabelCoverProvider": "Borító Szolgáltató",
@@ -306,6 +311,7 @@
"LabelDeleteFromFileSystemCheckbox": "Törlés a fájlrendszerről (ne jelölje be, ha csak az adatbázisból szeretné eltávolítani)",
"LabelDescription": "Leírás",
"LabelDeselectAll": "Minden kijelölés megszüntetése",
"LabelDetectedPattern": "Észlelt minta:",
"LabelDevice": "Eszköz",
"LabelDeviceInfo": "Eszköz információ",
"LabelDeviceIsAvailableTo": "Eszköz elérhető a következő számára...",
@@ -374,11 +380,12 @@
"LabelFilterByUser": "Szűrés felhasználó szerint",
"LabelFindEpisodes": "Epizódok keresése",
"LabelFinished": "Befejezett",
"LabelFinishedDate": "Befejezve {0}",
"LabelFolder": "Mappa",
"LabelFolders": "Mappák",
"LabelFontBold": "Félkövér",
"LabelFontBoldness": "Betű vastagság",
"LabelFontFamily": "Betűtípus család",
"LabelFontFamily": "Betűcsalád",
"LabelFontItalic": "Dőlt",
"LabelFontScale": "Betűméret skála",
"LabelFontStrikethrough": "Áthúzott",
@@ -410,6 +417,7 @@
"LabelIntervalEveryHour": "Minden órában",
"LabelIntervalEveryMinute": "Minden percben",
"LabelInvert": "Inverz",
"LabelIpAddress": "IP-cím",
"LabelItem": "Elem",
"LabelJumpBackwardAmount": "Visszafelé ugrás mennyisége",
"LabelJumpForwardAmount": "Előre ugrás mennyisége",
@@ -431,7 +439,9 @@
"LabelLibraryFilterSublistEmpty": "Nem {0}",
"LabelLibraryItem": "Könyvtári elem",
"LabelLibraryName": "Könyvtár neve",
"LabelLibrarySortByProgress": "Haladás frissítve",
"LabelLibrarySortByProgress": "Folyamat: Legutóbbi frissítés",
"LabelLibrarySortByProgressFinished": "Folyamat: Befejezve",
"LabelLibrarySortByProgressStarted": "Folyamat: Elindult",
"LabelLimit": "Korlát",
"LabelLineSpacing": "Sorköz",
"LabelListenAgain": "Újrahallgatás",
@@ -470,6 +480,7 @@
"LabelNewestAuthors": "A legújabb szerzők",
"LabelNewestEpisodes": "Legújabb epizódok",
"LabelNextBackupDate": "Következő biztonsági másolat dátuma",
"LabelNextChapters": "A következő fejezetek:",
"LabelNextScheduledRun": "Következő ütemezett futtatás",
"LabelNoApiKeys": "Nincs API kulcs",
"LabelNoCustomMetadataProviders": "Nincsenek egyedi metaadat szolgáltatók",
@@ -487,10 +498,11 @@
"LabelNotificationsMaxQueueSize": "Maximális értesítési események sorának mérete",
"LabelNotificationsMaxQueueSizeHelp": "Az események korlátozva vannak, hogy másodpercenként 1-szer történjenek. Ha a sor maximális méretű, akkor az események figyelmen kívül lesznek hagyva. Ez megakadályozza az értesítések spamelését.",
"LabelNumberOfBooks": "Könyvek száma",
"LabelNumberOfChapters": "Fejezetek száma:",
"LabelNumberOfEpisodes": "Epizódok száma",
"LabelOpenIDAdvancedPermsClaimDescription": "Az OpenID-igény neve, amely a felhasználói műveletekre vonatkozó haladó jogosultságokat tartalmazza az alkalmazáson belül, és amely a nem adminisztrátori szerepkörökre vonatkozik (<b>ha konfigurálva van</b>). Ha az igény hiányzik a válaszból, az ABS-hez való hozzáférés megtagadásra kerül. Ha egyetlen opció hiányzik, azt <code>false</code>-ként fogja kezelni. Győződj meg arról, hogy az identitásszolgáltató igénye megfelel a várt struktúrának:",
"LabelOpenIDClaims": "Hagyd üresen a következő opciókat, hogy letiltsd a haladó csoport- és jogosultság-hozzárendelést, ekkor automatikusan a ‘Felhasználó’ csoport kerül hozzárendelésre.",
"LabelOpenIDGroupClaimDescription": "Az OpenID-igény neve, amely a felhasználó csoportjainak listáját tartalmazza. Általában <code>groups<code> néven hivatkoznak rá. <b>Ha konfigurálva van<b>, az alkalmazás automatikusan hozzárendeli a szerepköröket a felhasználó csoporttagságai alapján, feltéve, hogy ezek a csoportok az igényben kis- és nagybetűkre érzéketlenül ‘admin’, ‘user’ vagy ‘guest’ néven szerepelnek. Az igénynek egy listát kell tartalmaznia, és ha egy felhasználó több csoport tagja, az alkalmazás a legmagasabb szintű hozzáféréssel rendelkező szerepkört rendeli hozzá. Ha egyetlen csoport sem felel meg, a hozzáférés megtagadásra kerül.",
"LabelOpenIDGroupClaimDescription": "Az OpenID-igény neve, amely a felhasználó csoportjainak listáját tartalmazza. Általában <code>groups</code> néven hivatkoznak rá. <b>Ha konfigurálva van</b>, az alkalmazás automatikusan hozzárendeli a szerepköröket a felhasználó csoporttagságai alapján, feltéve, hogy ezek a csoportok az igényben kis- és nagybetűkre érzéketlenül ‘admin’, ‘user’ vagy ‘guest’ néven szerepelnek. Az igénynek egy listát kell tartalmaznia, és ha egy felhasználó több csoport tagja, az alkalmazás a legmagasabb szintű hozzáféréssel rendelkező szerepkört rendeli hozzá. Ha egyetlen csoport sem felel meg, a hozzáférés megtagadásra kerül.",
"LabelOpenRSSFeed": "RSS hírcsatorna megnyitása",
"LabelOverwrite": "Felülírás",
"LabelPaginationPageXOfY": "{0} oldal {1}-ból/ből",
@@ -579,8 +591,8 @@
"LabelSettingsBookshelfViewHelp": "Skeuomorfikus dizájn fa polcokkal",
"LabelSettingsChromecastSupport": "Chromecast támogatás",
"LabelSettingsDateFormat": "Dátumformátum",
"LabelSettingsEnableWatcher": "Változások automatikus vizsgálata a könyvtárakban",
"LabelSettingsEnableWatcherForLibrary": "Változások automatikus vizsgálata a könyvtárban",
"LabelSettingsEnableWatcher": "Változások automatikus figyelése a könyvtárakban",
"LabelSettingsEnableWatcherForLibrary": "Változások automatikus figyelése a könyvtárban",
"LabelSettingsEnableWatcherHelp": "Engedélyezi az automatikus elem hozzáadás/frissítés funkciót, amikor fájlváltozásokat észlel. *Szerver újraindítása szükséges",
"LabelSettingsEpubsAllowScriptedContent": "Szkriptelt tartalmak engedélyezése epub-okban",
"LabelSettingsEpubsAllowScriptedContentHelp": "Megengedi, hogy az epub fájlok szkripteket hajtsanak végre. Ezt a beállítást kikapcsolva ajánlott tartani, kivéve, ha megbízik az epub fájlok forrásában.",
@@ -629,12 +641,13 @@
"LabelStartTime": "Kezdési idő",
"LabelStarted": "Elkezdődött",
"LabelStartedAt": "Kezdés ideje",
"LabelStartedDate": "Elindítva {0}",
"LabelStatsAudioTracks": "Audiósáv",
"LabelStatsAuthors": "Szerző",
"LabelStatsBestDay": "Legjobb nap",
"LabelStatsDailyAverage": "Napi átlag",
"LabelStatsDays": "Napok",
"LabelStatsDaysListened": "Hallgatással töltött napok",
"LabelStatsDays": "Nap",
"LabelStatsDaysListened": "Hallgatással töltött nap",
"LabelStatsHours": "Órák",
"LabelStatsInARow": "egymás után",
"LabelStatsItemsFinished": "Befejezett elem",
@@ -743,6 +756,7 @@
"MessageBookshelfNoResultsForFilter": "Nincs eredmény a \"{0}: {1}\" szűrőre",
"MessageBookshelfNoResultsForQuery": "Nincs eredmény a lekérdezéshez",
"MessageBookshelfNoSeries": "Nincsenek sorozatai",
"MessageBulkChapterPattern": "Hány fejezetet szeretne hozzáadni ezzel a számozási mintával?",
"MessageChapterEndIsAfter": "A fejezet vége a hangoskönyv végét követi",
"MessageChapterErrorFirstNotZero": "Az első fejezetnek 0:00-kor kell kezdődnie",
"MessageChapterErrorStartGteDuration": "Érvénytelen kezdési idő, kevesebbnek kell lennie, mint a hangoskönyv időtartama",
@@ -763,6 +777,7 @@
"MessageConfirmDeleteSession": "Biztosan törölni szeretné ezt a munkamenetet?",
"MessageConfirmEmbedMetadataInAudioFiles": "Biztos, hogy metaadatokat szeretne beágyazni {0} hangfájlba?",
"MessageConfirmForceReScan": "Biztosan kényszeríteni szeretné az újraszkennelést?",
"MessageConfirmLogoutDevice": "Biztosan ki szeretne jelentkezni a „{0}”-ból?",
"MessageConfirmMarkAllEpisodesFinished": "Biztosan meg szeretné jelölni az összes epizódot befejezettnek?",
"MessageConfirmMarkAllEpisodesNotFinished": "Biztosan meg szeretné jelölni az összes epizódot nem befejezettnek?",
"MessageConfirmMarkItemFinished": "Biztos, hogy a „{0}”-t befejezettnek akarja jelölni?",
@@ -805,6 +820,8 @@
"MessageFeedURLWillBe": "A hírcsatorna URL-je {0} lesz",
"MessageFetching": "Lekérdezés...",
"MessageForceReScanDescription": "minden fájlt újra szkennel, mint egy friss szkennelés. Az audiofájlok ID3 címkéi, OPF fájlok és szövegfájlok újként lesznek szkennelve.",
"MessageHeatmapListeningTimeTooltip": "<strong>{0} hallgatja</strong> ezen {1}",
"MessageHeatmapNoListeningSessions": "Nincs hallgatás folyamatban ezen: {0}",
"MessageImportantNotice": "Fontos közlemény!",
"MessageInsertChapterBelow": "Fejezet beszúrása alulra",
"MessageInvalidAsin": "Érvénytelen ASIN",
@@ -875,7 +892,7 @@
"MessageResetChaptersConfirm": "Biztosan alaphelyzetbe szeretné állítani a fejezeteket és visszavonni a módosításokat?",
"MessageRestoreBackupConfirm": "Biztosan vissza szeretné állítani a biztonsági másolatot, amely ekkor készült:",
"MessageRestoreBackupWarning": "A biztonsági mentés visszaállítása felülírja az egész adatbázist, amely a /config mappában található, valamint a borítóképeket a /metadata/items és /metadata/authors mappákban.<br /><br />A biztonsági mentések nem módosítják a könyvtár mappáiban található fájlokat. Ha engedélyezte a szerverbeállításokat a borítóképek és a metaadatok könyvtármappákban való tárolására, akkor ezek nem kerülnek biztonsági mentésre vagy felülírásra.<br /><br />A szerver használó összes kliens automatikusan frissül.",
"MessageScheduleLibraryScanNote": "A legtöbb felhasználó számára ajánlott ezt a funkciót kikapcsolva hagyni, és engedélyezni a mappafigyelő beállítást. A mappafigyelő automatikusan észleli a könyvtári mappák változásait. A mappafigyelő nem működik minden fájlrendszernél (mint például az NFS), ezért helyette ütemezett könyvtárellenőrzéseket lehet használni.",
"MessageScheduleLibraryScanNote": "A legtöbb felhasználó számára ajánlott ezt a funkciót kikapcsolva hagyni, és engedélyezni a mappafigyelő beállítást. A mappafigyelő automatikusan észleli a könyvtári mappák változásait. Kapcsolja be ezt a funkciót, ha az „Automatikus könyvtárfigyelés” nem működik a fájlrendszerén (például NFS).",
"MessageScheduleRunEveryWeekdayAtTime": "Futás minden {1} óra {0}-kor",
"MessageSearchResultsFor": "Keresési eredmények",
"MessageSelected": "{0} kiválasztva",
@@ -944,6 +961,7 @@
"NotificationOnRSSFeedDisabledDescription": "Akkor lép működésbe, ha az automatikus epizódletöltés a túl sok sikertelen próbálkozás miatt letiltásra kerül",
"NotificationOnRSSFeedFailedDescription": "Akkor aktiválódik, ha az RSS feed kérés sikertelen az automatikus epizódletöltésnél",
"NotificationOnTestDescription": "Esemény az értesítési rendszer teszteléséhez",
"PlaceholderBulkChapterInput": "Írja be a fejezet címét vagy használjon számozást (pl. „1. epizód”, „10. fejezet”, „1.”)",
"PlaceholderNewCollection": "Új gyűjtemény neve",
"PlaceholderNewFolderPath": "Új mappa útvonala",
"PlaceholderNewPlaylist": "Új lejátszási lista neve",
@@ -997,8 +1015,12 @@
"ToastBookmarkCreateFailed": "Könyvjelző létrehozása sikertelen",
"ToastBookmarkCreateSuccess": "Könyvjelző hozzáadva",
"ToastBookmarkRemoveSuccess": "Könyvjelző eltávolítva",
"ToastBulkChapterInvalidCount": "Írjon be egy számot 1 és 150 között",
"ToastCachePurgeFailed": "A gyorsítótár törlése sikertelen",
"ToastCachePurgeSuccess": "A gyorsítótár sikeresen törölve",
"ToastChapterLocked": "A fejezet zárolt.",
"ToastChapterStartTimeAdjusted": "A fejezet kezdési ideje {0} másodperccel módosítva",
"ToastChaptersAllLocked": "Minden fejezet zárolt. Nyisson meg néhány fejezetet, hogy módosítsa azok idejét.",
"ToastChaptersHaveErrors": "A fejezetek hibákat tartalmaznak",
"ToastChaptersInvalidShiftAmountLast": "Érvénytelen eltolási érték. Az utolsó fejezet kezdési időpontja túlnyúlna a hangoskönyv időtartamán.",
"ToastChaptersInvalidShiftAmountStart": "Érvénytelen eltolási érték. Az első fejezet hossza nulla vagy negatív lenne, és a második fejezet felülírná. Növelje a második fejezet kezdő időtartamát.",
@@ -1008,6 +1030,8 @@
"ToastCollectionItemsAddFailed": "A tétel(ek) hozzáadása gyűjteményhez sikertelen",
"ToastCollectionRemoveSuccess": "Gyűjtemény eltávolítva",
"ToastCollectionUpdateSuccess": "Gyűjtemény frissítve",
"ToastConnectionNotAvailable": "A kapcsolat nem elérhető. Kérem, próbálkozzon később",
"ToastCoverSearchFailed": "A borítók keresése sikertelen",
"ToastCoverUpdateFailed": "A borító frissítése nem sikerült",
"ToastDateTimeInvalidOrIncomplete": "A dátum és az időpont érvénytelen vagy hiányos",
"ToastDeleteFileFailed": "Nem sikerült törölni a fájlt",
@@ -1032,6 +1056,7 @@
"ToastInvalidImageUrl": "Érvénytelen a kép URL címe",
"ToastInvalidMaxEpisodesToDownload": "A letölthető epizódok száma érvénytelen",
"ToastInvalidUrl": "Érvénytelen URL",
"ToastInvalidUrls": "Egy vagy több URL érvénytelen",
"ToastItemCoverUpdateSuccess": "Elem borítója frissítve",
"ToastItemDeletedFailed": "Nem sikerült törölni az elemet",
"ToastItemDeletedSuccess": "Elem törölve",
@@ -1081,6 +1106,7 @@
"ToastPlaylistUpdateSuccess": "Lejátszási lista frissítve",
"ToastPodcastCreateFailed": "Podcast létrehozása sikertelen",
"ToastPodcastCreateSuccess": "A podcast sikeresen létrehozva",
"ToastPodcastEpisodeUpdated": "Epizód frissítve",
"ToastPodcastGetFeedFailed": "Nem sikerült podcast feedet kapni",
"ToastPodcastNoEpisodesInFeed": "Nincsenek epizódok az RSS hírcsatornában",
"ToastPodcastNoRssFeed": "A podcastnak nincs RSS-hírcsatornája",
@@ -1131,5 +1157,13 @@
"ToastUserPasswordChangeSuccess": "Jelszó sikeresen megváltoztatva",
"ToastUserPasswordMismatch": "A jelszavak nem egyeznek",
"ToastUserPasswordMustChange": "Az új jelszó nem egyezik a régi jelszóval",
"ToastUserRootRequireName": "Egy root felhasználónevet kell megadnia"
"ToastUserRootRequireName": "Egy root felhasználónevet kell megadnia",
"TooltipAddChapters": "Fejezet(ek) hozzáadása",
"TooltipAddOneSecond": "1 másodperc hozzáadása",
"TooltipAdjustChapterStart": "Kattintson a kezdési idő beállításához",
"TooltipLockAllChapters": "Az összes fejezet zárolása",
"TooltipLockChapter": "Fejezet zárolása (Shift+kattintás a tartományhoz)",
"TooltipSubtractOneSecond": "1 másodperc levonása",
"TooltipUnlockAllChapters": "Az összes fejezet feloldása",
"TooltipUnlockChapter": "Fejezet feloldása (Shift+kattintás a tartományhoz)"
}
+32
View File
@@ -0,0 +1,32 @@
{
"ButtonAdd": "Bæta við",
"ButtonAddApiKey": "Bæta við API-lykli",
"ButtonAddChapters": "Bæta við köflum",
"ButtonAddDevice": "Bæta við tæki",
"ButtonAddLibrary": "Bæta við bókasafni",
"ButtonAddPodcasts": "Bæta við hlaðvörpum",
"ButtonAddUser": "Bæta við notanda",
"ButtonAddYourFirstLibrary": "Bættu fyrsta bókasafninu þínu við",
"ButtonApply": "Nota",
"ButtonApplyChapters": "Skrá kafla",
"ButtonAuthors": "Rithöfundar",
"ButtonBack": "Bakka",
"ButtonBatchEditPopulateFromExisting": "Afrita frá núverandi",
"ButtonBatchEditPopulateMapDetails": "Bæta við upplýsingum",
"ButtonBrowseForFolder": "Skoða möppu",
"ButtonCancel": "Hætta við",
"ButtonCancelEncode": "Hætta við Encoding",
"ButtonChangeRootPassword": "Breyta Root lykilorði",
"ButtonCheckAndDownloadNewEpisodes": "Skoða og sækja nýja þætti",
"ButtonChooseAFolder": "Velja möppu",
"ButtonChooseFiles": "Velja skrár",
"ButtonClearFilter": "Hreinsa síu",
"ButtonClose": "Loka",
"ButtonCloseSession": "Loka opnu sessioni",
"ButtonCollections": "Söfn",
"ButtonConfigureScanner": "Stilla skannara",
"ButtonCreate": "Stofna",
"ButtonCreateBackup": "Búa til backup",
"ButtonDelete": "Eyða",
"ButtonDownloadQueue": "Röð"
}
+76 -18
View File
@@ -1,6 +1,6 @@
{
"ButtonAdd": "Aggiungi",
"ButtonAddApiKey": "Aggiungi chiave API",
"ButtonAddApiKey": "Aggiungi la chiave API",
"ButtonAddChapters": "Aggiungi Capitoli",
"ButtonAddDevice": "Aggiungi Dispositivo",
"ButtonAddLibrary": "Aggiungi Libreria",
@@ -34,7 +34,7 @@
"ButtonEditChapters": "Modifica Capitoli",
"ButtonEditPodcast": "Modifica Podcast",
"ButtonEnable": "Abilita",
"ButtonFireAndFail": "Fire and Fail",
"ButtonFireAndFail": "Centro e fallimento",
"ButtonFireOnTest": "Fire onTest event",
"ButtonForceReScan": "Forza Re-Scan",
"ButtonFullPath": "Percorso Completo",
@@ -46,6 +46,7 @@
"ButtonLatest": "Ultimi",
"ButtonLibrary": "Biblioteca",
"ButtonLogout": "Disconnetti",
"ButtonLogoutAllDevices": "Disconnetti su tutti i dispositivi",
"ButtonLookup": "Consulta",
"ButtonManageTracks": "Gestisci le Tracce",
"ButtonMapChapterTitles": "Titoli dei Capitoli",
@@ -121,11 +122,13 @@
"HeaderAccount": "Account",
"HeaderAddCustomMetadataProvider": "Aggiungi fornitori di metadati personalizzati",
"HeaderAdvanced": "Avanzate",
"HeaderApiKeys": "Le chiavi API",
"HeaderAppriseNotificationSettings": "Apprendi le impostazioni di Notifica",
"HeaderAudioTracks": "Tracce audio",
"HeaderAudiobookTools": "Strumenti di gestione file audiolibri",
"HeaderAuthentication": "Authenticazione",
"HeaderBackups": "Backup",
"HeaderBulkChapterModal": "Aggiungere più capitoli",
"HeaderChangePassword": "Cambia la password",
"HeaderChapters": "Capitoli",
"HeaderChooseAFolder": "Seleziona la cartella",
@@ -137,7 +140,7 @@
"HeaderCustomMetadataProviders": "Metadata Providers Personalizzato",
"HeaderDetails": "Dettagli",
"HeaderDownloadQueue": "Download coda",
"HeaderEbookFiles": "File dei libri",
"HeaderEbookFiles": "File del libro",
"HeaderEmail": "E-mail",
"HeaderEmailSettings": "Impostazioni e-mail",
"HeaderEpisodes": "Episodi",
@@ -164,6 +167,7 @@
"HeaderMetadataOrderOfPrecedence": "Priorità ordine Metadata",
"HeaderMetadataToEmbed": "Metadata da incorporare",
"HeaderNewAccount": "Nuovo Account",
"HeaderNewApiKey": "Nuova chiave API",
"HeaderNewLibrary": "Nuova Libreria",
"HeaderNotificationCreate": "Crea una notifica",
"HeaderNotificationUpdate": "Aggiornamento della notifica",
@@ -179,7 +183,7 @@
"HeaderPlaylist": "Playlist",
"HeaderPlaylistItems": "Elementi della playlist",
"HeaderPodcastsToAdd": "Podcasts da Aggiungere",
"HeaderPresets": "Presets",
"HeaderPresets": "Preimpostazioni",
"HeaderPreviewCover": "Anteprima Cover",
"HeaderRSSFeedGeneral": "Dettagli RSS",
"HeaderRSSFeedIsOpen": "RSS Feed è aperto",
@@ -191,12 +195,14 @@
"HeaderScheduleEpisodeDownloads": "Imposta il download automatico degli episodi",
"HeaderScheduleLibraryScans": "Schedula la scansione della libreria",
"HeaderSession": "Sessione",
"HeaderSessions": "Sessioni",
"HeaderSetBackupSchedule": "Imposta programmazione Backup",
"HeaderSettings": "Impostazioni",
"HeaderSettingsDisplay": "Visualizzazione",
"HeaderSettingsExperimental": "Opzioni Sperimentali",
"HeaderSettingsGeneral": "Generale",
"HeaderSettingsScanner": "Scanner",
"HeaderSettingsSecurity": "Sicurezza",
"HeaderSettingsWebClient": "Web Client",
"HeaderSleepTimer": "Sveglia",
"HeaderStatsLargestItems": "File pesanti",
@@ -208,6 +214,7 @@
"HeaderTableOfContents": "Indice",
"HeaderTools": "Strumenti",
"HeaderUpdateAccount": "Aggiorna Account",
"HeaderUpdateApiKey": "Aggiornamento chiave API",
"HeaderUpdateAuthor": "Aggiorna Autore",
"HeaderUpdateDetails": "Aggiorna Dettagli",
"HeaderUpdateLibrary": "Aggiorna Libreria",
@@ -237,6 +244,10 @@
"LabelAllUsersExcludingGuests": "Tutti gli Utenti Esclusi gli ospiti",
"LabelAllUsersIncludingGuests": "Tutti gli Utenti Inclusi gli ospiti",
"LabelAlreadyInYourLibrary": "Già esistente nella libreria",
"LabelApiKeyCreated": "API Key \"{0}\" creato con successo.",
"LabelApiKeyCreatedDescription": "Assicurarsi di copiare la chiave API ora poiché non si potrà rivederla.",
"LabelApiKeyUser": "Agisce per conto dell'utente",
"LabelApiKeyUserDescription": "Questa chiave API avrà le stesse autorizzazioni dell'utente per conto del quale agisce. Apparirà nei registri come se l'utente stesse facendo la richiesta.",
"LabelApiToken": "API Token",
"LabelAppend": "Appese",
"LabelAudioBitrate": "Audio Bitrate (es. 128k)",
@@ -266,7 +277,7 @@
"LabelBonus": "Bonus",
"LabelBooks": "Libri",
"LabelButtonText": "Buttone Testo",
"LabelByAuthor": "da {0}",
"LabelByAuthor": "di {0}",
"LabelChangePassword": "Cambia Password",
"LabelChannels": "Canali",
"LabelChapterCount": "{0} Capitoli",
@@ -286,6 +297,7 @@
"LabelContinueListening": "Continua l'ascolto",
"LabelContinueReading": "Continua la lettura",
"LabelContinueSeries": "Continua serie",
"LabelCorsAllowed": "CORS consentiti Origine",
"LabelCover": "Copertina",
"LabelCoverImageURL": "Indirizzo della cover URL",
"LabelCoverProvider": "Cover Sorgente",
@@ -296,9 +308,10 @@
"LabelCustomCronExpression": "Espressione Cron personalizzata:",
"LabelDatetime": "Data & Ora",
"LabelDays": "Giorni",
"LabelDeleteFromFileSystemCheckbox": "Elimina dal file system (togli la spunta per eliminarla solo dal DB)",
"LabelDeleteFromFileSystemCheckbox": "Elimina dal file system (despunta per rimuoverla solo dal database)",
"LabelDescription": "Descrizione",
"LabelDeselectAll": "Deseleziona Tutto",
"LabelDetectedPattern": "Trovato pattern:",
"LabelDevice": "Dispositivo",
"LabelDeviceInfo": "Info dispositivo",
"LabelDeviceIsAvailableTo": "Il dispositivo e disponibile su…",
@@ -348,6 +361,10 @@
"LabelExample": "Esempio",
"LabelExpandSeries": "Espandi Serie",
"LabelExpandSubSeries": "Espandi Sub Serie",
"LabelExpired": "Scadenza",
"LabelExpiresAt": "Scade a",
"LabelExpiresInSeconds": "Scade in (secondi)",
"LabelExpiresNever": "Mai",
"LabelExplicit": "Esplicito",
"LabelExplicitChecked": "Esplicito (selezionato)",
"LabelExplicitUnchecked": "Non Esplicito (selezionato)",
@@ -363,11 +380,12 @@
"LabelFilterByUser": "Filtro per Utente",
"LabelFindEpisodes": "Trova Episodi",
"LabelFinished": "Finita",
"LabelFinishedDate": "Finito {0}",
"LabelFolder": "Cartella",
"LabelFolders": "Cartelle",
"LabelFontBold": "Grassetto",
"LabelFontBoldness": "Grassetto",
"LabelFontFamily": "Famiglia di caratteri",
"LabelFontFamily": "Famiglia caratteri",
"LabelFontItalic": "Corsivo",
"LabelFontScale": "Dimensione font",
"LabelFontStrikethrough": "Barrato",
@@ -399,6 +417,7 @@
"LabelIntervalEveryHour": "Ogni ora",
"LabelIntervalEveryMinute": "Ogni minuto",
"LabelInvert": "Inverti",
"LabelIpAddress": "Indirizzo Ip",
"LabelItem": "Oggetti",
"LabelJumpBackwardAmount": "secondi di avvolgimento",
"LabelJumpForwardAmount": "Secondi di Avvolgimento",
@@ -407,6 +426,7 @@
"LabelLanguages": "Lingua",
"LabelLastBookAdded": "Ultimo Libro Aggiunto",
"LabelLastBookUpdated": "Ultimo Libro Aggiornato",
"LabelLastProgressDate": "Ultimi progressi: Si'",
"LabelLastSeen": "Ultimi Visti",
"LabelLastTime": "Ultima Volta",
"LabelLastUpdate": "Ultimo Aggiornamento",
@@ -419,6 +439,9 @@
"LabelLibraryFilterSublistEmpty": "Nessuno {0}",
"LabelLibraryItem": "Elementi della biblioteca",
"LabelLibraryName": "Nome della biblioteca",
"LabelLibrarySortByProgress": "Progresso: ultimo aggiornamento",
"LabelLibrarySortByProgressFinished": "Progresso: finito",
"LabelLibrarySortByProgressStarted": "Progresso: iniziato",
"LabelLimit": "Limiti",
"LabelLineSpacing": "Interlinea",
"LabelListenAgain": "Ascolta ancora",
@@ -427,6 +450,7 @@
"LabelLogLevelWarn": "Allarme",
"LabelLookForNewEpisodesAfterDate": "Cerca nuovi episodi dopo questa data",
"LabelLowestPriority": "Priorità Minima",
"LabelMatchConfidence": "Fiducia",
"LabelMatchExistingUsersBy": "Abbina gli utenti esistenti per",
"LabelMatchExistingUsersByDescription": "Utilizzato per connettere gli utenti esistenti. Una volta connessi, gli utenti verranno abbinati a un ID univoco dal tuo provider SSO",
"LabelMaxEpisodesToDownload": "Max # di episodi da scaricare. Usa 0 per illimitati.",
@@ -456,7 +480,9 @@
"LabelNewestAuthors": "Nuovi autori",
"LabelNewestEpisodes": "Nuovi episodi",
"LabelNextBackupDate": "Data Prossimo Backup",
"LabelNextChapters": "I prossimi capitoli saranno:",
"LabelNextScheduledRun": "Data prossima esecuzione schedulata",
"LabelNoApiKeys": "Nessuna chiave API",
"LabelNoCustomMetadataProviders": "Nessun provider di metadati personalizzato",
"LabelNoEpisodesSelected": "Nessun Episodio Selezionato",
"LabelNotFinished": "Da completare",
@@ -472,8 +498,9 @@
"LabelNotificationsMaxQueueSize": "Coda Massima di notifiche eventi",
"LabelNotificationsMaxQueueSizeHelp": "Le notifiche sono limitate per 1 al secondo, per evitare lo spamming le notifiche verrano ignorare se superano la coda.",
"LabelNumberOfBooks": "Numero di libri",
"LabelNumberOfChapters": "Numero di capitoli:",
"LabelNumberOfEpisodes": "Numero di episodi",
"LabelOpenIDAdvancedPermsClaimDescription": "Nome dell'attestazione OpenID che contiene autorizzazioni avanzate per le azioni dell'utente all'interno dell'applicazione che verranno applicate ai ruoli non amministratori (<b>se configurato</b>). Se il reclamo manca nella risposta, l'accesso ad ABS verrà negato. Se manca una singola opzione, verrà trattata come<code>falsa</code>. Assicurati che l'attestazione del provider di identità corrisponda alla struttura prevista:",
"LabelOpenIDAdvancedPermsClaimDescription": "Nome dell'attestazione OpenID che contiene autorizzazioni avanzate per le azioni dell'utente all'interno dell'applicazione che verranno applicate ai ruoli non amministrativi (<b>se configurato</b>). Se il reclamo manca nella risposta, l'accesso ad ABS verrà negato. Se manca una singola opzione, verrà trattata come <code>falso</code>. Assicurati che l'attestazione del provider di identità corrisponda alla struttura prevista:",
"LabelOpenIDClaims": "Lasciare vuote le seguenti opzioni per disabilitare l'assegnazione avanzata di gruppi e autorizzazioni, assegnando quindi automaticamente il gruppo \"Utente\".",
"LabelOpenIDGroupClaimDescription": "Nome dell'attestazione OpenID che contiene un elenco dei gruppi dell'utente. Comunemente indicato come <code>gruppo</code>. <b>se configurato</b>, l'applicazione assegnerà automaticamente i ruoli in base alle appartenenze ai gruppi dell'utente, a condizione che tali gruppi siano denominati \"admin\", \"utente\" o \"ospite\" senza distinzione tra maiuscole e minuscole nell'attestazione. L'attestazione deve contenere un elenco e, se un utente appartiene a più gruppi, l'applicazione assegnerà il ruolo corrispondente al livello di accesso più alto. Se nessun gruppo corrisponde, l'accesso verrà negato.",
"LabelOpenRSSFeed": "Apri RSS Feed",
@@ -506,7 +533,7 @@
"LabelPrimaryEbook": "Libro principale",
"LabelProgress": "Cominciati",
"LabelProvider": "Fornitore",
"LabelProviderAuthorizationValue": "Authorization Header Value",
"LabelProviderAuthorizationValue": "Valore intestazione di autorizzazione",
"LabelPubDate": "Data di pubblicazione",
"LabelPublishYear": "Anno di pubblicazione",
"LabelPublishedDate": "Pubblicati {0}",
@@ -546,6 +573,7 @@
"LabelSelectAll": "Seleziona tutto",
"LabelSelectAllEpisodes": "Seleziona tutti gli Episodi",
"LabelSelectEpisodesShowing": "Selezionati {0} episodi da visualizzare",
"LabelSelectUser": "Seleziona l'utente",
"LabelSelectUsers": "Selezione Utenti",
"LabelSendEbookToDevice": "Invia il libro a...",
"LabelSequence": "Sequenza",
@@ -563,8 +591,8 @@
"LabelSettingsBookshelfViewHelp": "Design con scaffali in legno",
"LabelSettingsChromecastSupport": "Supporto a Chromecast",
"LabelSettingsDateFormat": "Formato Data",
"LabelSettingsEnableWatcher": "Scansiona le librerie Automaticamente per trovare modifiche",
"LabelSettingsEnableWatcherForLibrary": "Scansiona la libreria Automaticamente per trovare modifiche",
"LabelSettingsEnableWatcher": "Controlla automaticamente le modifiche alle librerie",
"LabelSettingsEnableWatcherForLibrary": "Controlla automaticamente le modifiche alle librerie",
"LabelSettingsEnableWatcherHelp": "Abilita l'aggiunta/aggiornamento automatico degli elementi quando vengono rilevate modifiche ai file. *Richiede il riavvio del Server",
"LabelSettingsEpubsAllowScriptedContent": "Consenti contenuti con script negli epub",
"LabelSettingsEpubsAllowScriptedContentHelp": "Consenti ai file epub di eseguire script. Si consiglia di mantenere questa impostazione disabilitata a meno che non si ritenga attendibile l'origine dei file epub.",
@@ -613,6 +641,7 @@
"LabelStartTime": "Tempo di inizio",
"LabelStarted": "Iniziato",
"LabelStartedAt": "Iniziato al",
"LabelStartedDate": "Iniziati {0}",
"LabelStatsAudioTracks": "Tracce Audio",
"LabelStatsAuthors": "Autori",
"LabelStatsBestDay": "Giorno migliore",
@@ -642,12 +671,13 @@
"LabelTheme": "Tema",
"LabelThemeDark": "Scuro",
"LabelThemeLight": "Chiaro",
"LabelThemeSepia": "Seppia",
"LabelTimeBase": "Tempo base",
"LabelTimeDurationXHours": "{0} Ore",
"LabelTimeDurationXMinutes": "{0} minuti",
"LabelTimeDurationXSeconds": "{0} secondi",
"LabelTimeInMinutes": "Tempo in minuti",
"LabelTimeLeft": "{0} sinistra",
"LabelTimeLeft": "{0} rimasti",
"LabelTimeListened": "Tempo di Ascolto",
"LabelTimeListenedToday": "Tempo di Ascolto Oggi",
"LabelTimeRemaining": "{0} rimanente",
@@ -655,7 +685,7 @@
"LabelTitle": "Titolo",
"LabelToolsEmbedMetadata": "Incorpora Metadata",
"LabelToolsEmbedMetadataDescription": "Incorpora i metadati nei file audio, inclusi l'immagine di copertina e i capitoli.",
"LabelToolsM4bEncoder": "M4B Encoder",
"LabelToolsM4bEncoder": "Codificatore M4B",
"LabelToolsMakeM4b": "Crea un file M4B",
"LabelToolsMakeM4bDescription": "Genera un file audiolibro M4B con metadati incorporati, immagine di copertina e capitoli.",
"LabelToolsSplitM4b": "Converti M4B in MP3",
@@ -710,7 +740,9 @@
"MessageAddToPlayerQueue": "Aggiungi alla coda di riproduzione",
"MessageAppriseDescription": "Per utilizzare questa funzione è necessario disporre di un'istanza di <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> in esecuzione o un'API che gestirà quelle stesse richieste. <br />L'API Url dovrebbe essere il percorso URL completo per inviare la notifica, ad esempio se la tua istanza API è servita cosi .<code>http://192.168.1.1:8337</code> Allora dovrai mettere <code>http://192.168.1.1:8337/notify</code>.",
"MessageAsinCheck": "Assicurati di utilizzare l'ASIN della regione Audible corretta, non di Amazon.",
"MessageAuthenticationLegacyTokenWarning": "I token API legacy verranno rimossi in futuro. Utilizzare piuttosto le <a href=\"/config/api-keys\">chiavi API</a>.",
"MessageAuthenticationOIDCChangesRestart": "Riavvia il tuo server dopo aver salvato per applicare le modifiche OIDC.",
"MessageAuthenticationSecurityMessage": "L'autenticazione è stata migliorata per incrementare la sicurezza. Tutti gli utenti sono tenuti a rieffettuare il login.",
"MessageBackupsDescription": "I backup includono utenti, progressi degli utenti, dettagli sugli elementi della libreria, impostazioni del server e immagini archiviate in <code>/metadata/items</code> & <code>/metadata/authors</code>. I backup non includono i file archiviati nelle cartelle della libreria.",
"MessageBackupsLocationEditNote": "Nota: l'aggiornamento della posizione di backup non sposterà o modificherà i backup esistenti",
"MessageBackupsLocationNoEditNote": "Nota: la posizione del backup viene impostata tramite una variabile di ambiente e non può essere modificata qui.",
@@ -724,6 +756,7 @@
"MessageBookshelfNoResultsForFilter": "Nessun risultato per il filtro \"{0}: {1}\"",
"MessageBookshelfNoResultsForQuery": "Nessun risultato per la query",
"MessageBookshelfNoSeries": "Non c'è nessuna Serie",
"MessageBulkChapterPattern": "Quanti capitoli vuoi aggiungere con questo motivo di numerazione?",
"MessageChapterEndIsAfter": "La fine del capitolo è dopo la fine del tuo audiolibro",
"MessageChapterErrorFirstNotZero": "Il primo capitolo deve iniziare da 0",
"MessageChapterErrorStartGteDuration": "L'ora di inizio non valida deve essere inferiore alla durata dell'audiolibro",
@@ -732,6 +765,7 @@
"MessageChaptersNotFound": "Capitoli non trovati",
"MessageCheckingCron": "Controllo cron...",
"MessageConfirmCloseFeed": "Sei sicuro di voler chiudere questo feed?",
"MessageConfirmDeleteApiKey": "Sei sicuro di voler eliminare la chiave API \"{0}\"?",
"MessageConfirmDeleteBackup": "Sei sicuro di voler eliminare il backup {0}?",
"MessageConfirmDeleteDevice": "Sei sicuro/sicura di voler eliminare il lettore di libri {0}?",
"MessageConfirmDeleteFile": "Questo eliminerà il file dal tuo file system. Sei sicuro?",
@@ -743,6 +777,7 @@
"MessageConfirmDeleteSession": "Sei sicuro di voler eliminare questa sessione?",
"MessageConfirmEmbedMetadataInAudioFiles": "Sei sicuro di voler incorporare i metadati nei file audio {0}?",
"MessageConfirmForceReScan": "Sei sicuro di voler forzare una nuova scansione?",
"MessageConfirmLogoutDevice": "Sei sicuro/a di volerti disconnettere da «{0}»?",
"MessageConfirmMarkAllEpisodesFinished": "Sei sicuro di voler contrassegnare tutti gli episodi come finiti?",
"MessageConfirmMarkAllEpisodesNotFinished": "Sei sicuro di voler contrassegnare tutti gli episodi come non completati?",
"MessageConfirmMarkItemFinished": "Sei sicuro/sicura di voler segnare {0} come finito?",
@@ -759,6 +794,7 @@
"MessageConfirmRemoveAuthor": "Sei sicuro di voler rimuovere l'autore? \"{0}\"?",
"MessageConfirmRemoveCollection": "Sei sicuro di voler rimuovere la Raccolta \"{0}\"?",
"MessageConfirmRemoveEpisode": "Sei sicuro di voler rimuovere l'episodio \"{0}\"?",
"MessageConfirmRemoveEpisodeNote": "Nota: Questo non cancella il file audio a meno che non toggling \"Hard delete file\"",
"MessageConfirmRemoveEpisodes": "Sei sicuro di voler rimuovere {0} episodi?",
"MessageConfirmRemoveListeningSessions": "Sei sicuro di voler rimuovere {0} sessioni di Ascolto?",
"MessageConfirmRemoveMetadataFiles": "Vuoi davvero rimuovere tutti i metadati.{0} file nelle cartelle degli elementi della tua libreria?",
@@ -784,6 +820,8 @@
"MessageFeedURLWillBe": "l’URL del flusso sarà {0}",
"MessageFetching": "Recupero info…",
"MessageForceReScanDescription": "eseguirà nuovamente la scansione di tutti i file come una nuova scansione. I tag ID3 dei file audio, i file OPF e i file di testo verranno scansionati come nuovi.",
"MessageHeatmapListeningTimeTooltip": "<strong>{0} in ascolto</strong> su {1}",
"MessageHeatmapNoListeningSessions": "Nessuna sessione di ascolto su {0}",
"MessageImportantNotice": "Avviso Importante!",
"MessageInsertChapterBelow": "Inserisci capitolo sotto",
"MessageInvalidAsin": "ASIN non Valido",
@@ -820,7 +858,7 @@
"MessageNoItems": "Nessun oggetto",
"MessageNoItemsFound": "Nessun oggetto trovato",
"MessageNoListeningSessions": "Nessuna sessione di ascolto",
"MessageNoLogs": "Nessun Log",
"MessageNoLogs": "Nessun rapporto",
"MessageNoMediaProgress": "Nessun progresso multimediale",
"MessageNoNotifications": "Nessuna notifica",
"MessageNoPodcastFeed": "Podcast non valido: nessun feed",
@@ -854,7 +892,7 @@
"MessageResetChaptersConfirm": "Sei sicuro di voler reimpostare i capitoli e annullare le modifiche ?",
"MessageRestoreBackupConfirm": "Sei sicuro di voler ripristinare il backup creato su",
"MessageRestoreBackupWarning": "Il ripristino di un backup sovrascriverà l'intero database situato in /config e sovrascrive le immagini in /metadata/items & /metadata/authors.<br /><br />I backup non modificano alcun file nelle cartelle della libreria. Se hai abilitato le impostazioni del server per archiviare copertine e metadati nelle cartelle della libreria, questi non vengono sottoposti a backup o sovrascritti.<br /><br />Tutti i client che utilizzano il tuo server verranno aggiornati automaticamente.",
"MessageScheduleLibraryScanNote": "Per la maggior parte degli utenti, si consiglia di lasciare questa funzionalità disabilitata e di mantenere abilitata l'impostazione di folder watcher. Il folder watcher rileverà automaticamente le modifiche nelle cartelle della libreria. Il folder watcher non funziona per ogni file system (come NFS), quindi è possibile utilizzare le scansioni pianificate della libreria.",
"MessageScheduleLibraryScanNote": "Per la maggior parte degli utenti, si consiglia di lasciare questa funzione disabilitata e mantenere abilitata l'impostazione “Controlla automaticamente le modifiche nella libreria”: in questo modo verranno rilevate automaticamente le modifiche nelle cartelle della libreria. Abilita questa funzione se “Controlla automaticamente le modifiche nella libreria” non funziona con il tuo file system (come NFS).",
"MessageScheduleRunEveryWeekdayAtTime": "Esegui ogni {0} alle {1}",
"MessageSearchResultsFor": "cerca risultati per",
"MessageSelected": "{0} selezionati",
@@ -923,6 +961,7 @@
"NotificationOnRSSFeedDisabledDescription": "Attivato quando i download automatici degli episodi vengono disabilitati a causa di troppi tentativi falliti",
"NotificationOnRSSFeedFailedDescription": "Attivato quando la richiesta del feed RSS per il download automatico di un episodio fallisce",
"NotificationOnTestDescription": "test il sistema di notifica",
"PlaceholderBulkChapterInput": "Inserire il titolo del capitolo o utilizzate la numerazione (es. 'Episodio 1', 'Capitolo 10', '1.')",
"PlaceholderNewCollection": "Nome Nuova Raccolta",
"PlaceholderNewFolderPath": "Nuovo Percorso Cartella",
"PlaceholderNewPlaylist": "Nome nuova playlist",
@@ -976,8 +1015,12 @@
"ToastBookmarkCreateFailed": "Creazione segnalibro fallita",
"ToastBookmarkCreateSuccess": "Segnalibro creato",
"ToastBookmarkRemoveSuccess": "Segnalibro Rimosso",
"ToastBulkChapterInvalidCount": "Inserire un numero tra 1 e 150",
"ToastCachePurgeFailed": "Impossibile eliminare la cache",
"ToastCachePurgeSuccess": "Cache eliminata correttamente",
"ToastChapterLocked": "Il capitolo è bloccato.",
"ToastChapterStartTimeAdjusted": "Tempo di inizio del capitolo modificato di {0} secondi",
"ToastChaptersAllLocked": "Tutti i capitoli sono bloccati. Sblocca alcuni capitoli per modificarne i tempi.",
"ToastChaptersHaveErrors": "I capitoli contengono errori",
"ToastChaptersInvalidShiftAmountLast": "Quantità di spostamento non valida. L'orario di inizio dell'ultimo capitolo si estenderebbe oltre la durata di questo audiolibro.",
"ToastChaptersInvalidShiftAmountStart": "Quantità di spostamento non valida. Il primo capitolo avrebbe una lunghezza pari a zero o negativa e verrebbe sovrascritto dal secondo capitolo. Aumentare la durata iniziale del secondo capitolo.",
@@ -987,6 +1030,8 @@
"ToastCollectionItemsAddFailed": "l'aggiunta dell'elemento(i) alla raccolta non è riuscito",
"ToastCollectionRemoveSuccess": "Collezione rimossa",
"ToastCollectionUpdateSuccess": "Raccolta aggiornata",
"ToastConnectionNotAvailable": "Connessione non disponibile. Provare più tardi",
"ToastCoverSearchFailed": "Ricerca Cover fallita",
"ToastCoverUpdateFailed": "Aggiornamento cover fallito",
"ToastDateTimeInvalidOrIncomplete": "Data e ora non sono valide o incomplete",
"ToastDeleteFileFailed": "Impossibile eliminare il file",
@@ -1002,6 +1047,8 @@
"ToastEpisodeDownloadQueueClearSuccess": "Coda di download degli episodi cancellata",
"ToastEpisodeUpdateSuccess": "{0} episodi aggiornati",
"ToastErrorCannotShare": "Impossibile condividere in modo nativo su questo dispositivo",
"ToastFailedToCreate": "Non creato",
"ToastFailedToDelete": "Non eliminata",
"ToastFailedToLoadData": "Impossibile caricare i dati",
"ToastFailedToMatch": "Impossibile abbinare",
"ToastFailedToShare": "Impossibile condividere",
@@ -1009,6 +1056,7 @@
"ToastInvalidImageUrl": "URL dell'immagine non valido",
"ToastInvalidMaxEpisodesToDownload": "Numero massimo di episodi non valido da scaricare",
"ToastInvalidUrl": "URL non valido",
"ToastInvalidUrls": "Uno o più URL sono invalidi",
"ToastItemCoverUpdateSuccess": "Cover aggiornata",
"ToastItemDeletedFailed": "Impossibile eliminare l'elemento",
"ToastItemDeletedSuccess": "Elemento eliminato",
@@ -1031,8 +1079,9 @@
"ToastMetadataFilesRemovedNoneRemoved": "Nessun metadato. {0} file rimossi",
"ToastMetadataFilesRemovedSuccess": "{0} metadati.{1} file rimossi",
"ToastMustHaveAtLeastOnePath": "Deve avere almeno un percorso",
"ToastNameEmailRequired": "Nome ed email sono obbligatori",
"ToastNameEmailRequired": "Nome ed e-mail sono obbligatori",
"ToastNameRequired": "Il nome è obbligatorio",
"ToastNewApiKeyUserError": "Deve selezionare un utente",
"ToastNewEpisodesFound": "{0} nuovi episodi trovati",
"ToastNewUserCreatedFailed": "Impossibile creare l'account: \"{0}\"",
"ToastNewUserCreatedSuccess": "Nuovo account creato",
@@ -1057,13 +1106,14 @@
"ToastPlaylistUpdateSuccess": "Playlist Aggiornata",
"ToastPodcastCreateFailed": "Errore creazione podcast",
"ToastPodcastCreateSuccess": "Podcast creato correttamente",
"ToastPodcastEpisodeUpdated": "Episodio aggiornato",
"ToastPodcastGetFeedFailed": "Impossibile ottenere il feed del podcast",
"ToastPodcastNoEpisodesInFeed": "Nessun episodio trovato nel feed RSS",
"ToastPodcastNoRssFeed": "Il podcast non ha un feed RSS",
"ToastProgressIsNotBeingSynced": "L'avanzamento non è sincronizzato, riavviare la riproduzione",
"ToastProviderCreatedFailed": "Impossibile aggiungere il provider",
"ToastProviderCreatedSuccess": "Aggiunto nuovo provider",
"ToastProviderNameAndUrlRequired": "Nome e URL richiesti",
"ToastProviderNameAndUrlRequired": "Nome e Url richiesti",
"ToastProviderRemoveSuccess": "Provider rimosso",
"ToastRSSFeedCloseFailed": "Errore chiusura flusso RSS",
"ToastRSSFeedCloseSuccess": "Flusso RSS chiuso",
@@ -1107,5 +1157,13 @@
"ToastUserPasswordChangeSuccess": "Password modificata con successo",
"ToastUserPasswordMismatch": "Le password non corrispondono",
"ToastUserPasswordMustChange": "La nuova password non può corrispondere alla vecchia password",
"ToastUserRootRequireName": "È necessario immettere un nome utente root"
"ToastUserRootRequireName": "È necessario immettere un nome utente root",
"TooltipAddChapters": "Aggiungere capitolo/i",
"TooltipAddOneSecond": "Aggiungere 1 secondo",
"TooltipAdjustChapterStart": "Clicca per modificare il tempo di inizio",
"TooltipLockAllChapters": "Bloccare tutti i capitoli",
"TooltipLockChapter": "Bloccare capitolo (Shift+click per intervallo)",
"TooltipSubtractOneSecond": "Sottrarre 1 secondo",
"TooltipUnlockAllChapters": "Sbloccare tutti i capitoli",
"TooltipUnlockChapter": "Sbloccare capitolo (Shift+click per intervallo)"
}
+1151 -7
View File
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
Loaded 100 of 228 files, more files were not shown because too many files have changed in this diff. Show more