Compare commits

...

323 Commits

Author SHA1 Message Date
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ák 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
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
Vito0912 9ce6de3100 Added progress to upload 2025-09-27 17:00:57 +02:00
votex001 fbe9971a8b [fix] prevent duplicates in multi-selects 2025-09-03 18:19:52 +03:00
143 changed files with 7663 additions and 1314 deletions
+3 -3
View File
@@ -47,7 +47,7 @@ jobs:
# Initializes the CodeQL tools for scanning. # Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL - name: Initialize CodeQL
uses: github/codeql-action/init@v2 uses: github/codeql-action/init@v3
with: with:
languages: ${{ matrix.language }} languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file. # 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). # 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) # If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild - name: Autobuild
uses: github/codeql-action/autobuild@v2 uses: github/codeql-action/autobuild@v3
# ️ Command-line programs to run using the OS shell. # ️ 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 # 📚 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 # ./location_of_script_within_repo/buildscript.sh
- name: Perform CodeQL Analysis - name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2 uses: github/codeql-action/analyze@v3
with: with:
category: '/language:${{matrix.language}}' category: '/language:${{matrix.language}}'
+2 -2
View File
@@ -22,7 +22,7 @@ add_user() {
declare -r descr="${4:-No description}" declare -r descr="${4:-No description}"
declare -r shell="${5:-/bin/false}" 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" 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 useradd $uid_flags --gid $group --no-create-home --system --shell $shell -c "$descr" $user
fi fi
@@ -39,7 +39,7 @@ add_group() {
declare -r gid_flags="--gid $gid" declare -r gid_flags="--gid $gid"
fi fi
if ! getent group | grep -q "^$group:" ; then if ! getent group "$group" 2>&1 >/dev/null; then
echo "Creating system group: $group" echo "Creating system group: $group"
groupadd $gid_flags --system $group groupadd $gid_flags --system $group
fi fi
+1
View File
@@ -196,6 +196,7 @@ export default {
requestBatchQuickEmbed() { requestBatchQuickEmbed() {
const payload = { const payload = {
message: this.$strings.MessageConfirmQuickEmbed, message: this.$strings.MessageConfirmQuickEmbed,
allowHtml: true,
callback: (confirmed) => { callback: (confirmed) => {
if (confirmed) { if (confirmed) {
this.$axios this.$axios
@@ -300,6 +300,8 @@ export default {
}) })
}, },
userUpdated(user) { userUpdated(user) {
if (user.id !== this.$store.state.user.user.id) return
if (user.seriesHideFromContinueListening && user.seriesHideFromContinueListening.length) { if (user.seriesHideFromContinueListening && user.seriesHideFromContinueListening.length) {
this.removeAllSeriesFromContinueSeries(user.seriesHideFromContinueListening) this.removeAllSeriesFromContinueSeries(user.seriesHideFromContinueListening)
} }
+2 -2
View File
@@ -93,10 +93,10 @@ export default {
editAuthor(author) { editAuthor(author) {
this.$store.commit('globals/showEditAuthorModal', author) this.$store.commit('globals/showEditAuthorModal', author)
}, },
editItem(libraryItem) { editItem(libraryItem, tab = 'details') {
var itemIds = this.shelf.entities.map((e) => e.id) var itemIds = this.shelf.entities.map((e) => e.id)
this.$store.commit('setBookshelfBookIds', itemIds) this.$store.commit('setBookshelfBookIds', itemIds)
this.$store.commit('showEditModal', libraryItem) this.$store.commit('showEditModalOnTab', { libraryItem, tab: tab || 'details' })
}, },
editEpisode({ libraryItem, episode }) { editEpisode({ libraryItem, episode }) {
this.$store.commit('setEpisodeTableEpisodeIds', [episode.id]) this.$store.commit('setEpisodeTableEpisodeIds', [episode.id])
+2 -2
View File
@@ -232,11 +232,11 @@ export default {
clearFilter() { clearFilter() {
this.$store.dispatch('user/updateUserSettings', { filterBy: 'all' }) this.$store.dispatch('user/updateUserSettings', { filterBy: 'all' })
}, },
editEntity(entity) { editEntity(entity, tab = 'details') {
if (this.entityName === 'items' || this.entityName === 'series-books') { if (this.entityName === 'items' || this.entityName === 'series-books') {
const bookIds = this.entities.map((e) => e.id) const bookIds = this.entities.map((e) => e.id)
this.$store.commit('setBookshelfBookIds', bookIds) this.$store.commit('setBookshelfBookIds', bookIds)
this.$store.commit('showEditModal', entity) this.$store.commit('showEditModalOnTab', { libraryItem: entity, tab: tab || 'details' })
} else if (this.entityName === 'collections') { } else if (this.entityName === 'collections') {
this.$store.commit('globals/setEditCollection', entity) this.$store.commit('globals/setEditCollection', entity)
} else if (this.entityName === 'playlists') { } else if (this.entityName === 'playlists') {
+47 -2
View File
@@ -62,7 +62,24 @@
</widgets-alert> </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"> <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>
</div> </div>
</template> </template>
@@ -91,7 +108,11 @@ export default {
isUploading: false, isUploading: false,
uploadFailed: false, uploadFailed: false,
uploadSuccess: false, uploadSuccess: false,
isFetchingMetadata: false isFetchingMetadata: false,
uploadProgress: {
loaded: 0,
total: 0
}
} }
}, },
computed: { computed: {
@@ -116,6 +137,15 @@ export default {
} else if (this.isFetchingMetadata) { } else if (this.isFetchingMetadata) {
return this.$strings.LabelFetchingMetadata 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: { methods: {
@@ -123,6 +153,21 @@ export default {
this.isUploading = status === 'uploading' this.isUploading = status === 'uploading'
this.uploadFailed = status === 'failed' this.uploadFailed = status === 'failed'
this.uploadSuccess = status === 'success' 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() { titleUpdated() {
this.error = '' this.error = ''
+5 -5
View File
@@ -78,7 +78,7 @@
</div> </div>
<!-- Error widget --> <!-- 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"> <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> <span class="material-symbols text-red-100 pr-1e" :style="{ fontSize: 0.875 + 'em' }">priority_high</span>
</div> </div>
@@ -121,12 +121,12 @@
<!-- Alternative bookshelf title/author/sort --> <!-- 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 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' }"> <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> <p cy-id="title" ref="displayTitle" class="truncate">{{ displayTitle }}</p>
<widgets-explicit-indicator cy-id="explicitIndicator" v-if="isExplicit" /> <widgets-explicit-indicator cy-id="explicitIndicator" v-if="isExplicit" />
</ui-tooltip> </ui-tooltip>
</div> </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> <p cy-id="subtitle" class="truncate" ref="displaySubtitle" :style="{ fontSize: 0.6 + 'em' }">{{ displaySubtitle }}</p>
</ui-tooltip> </ui-tooltip>
<p cy-id="line2" class="truncate text-gray-400" :style="{ fontSize: 0.8 + 'em' }">{{ displayLineTwo || '&nbsp;' }}</p> <p cy-id="line2" class="truncate text-gray-400" :style="{ fontSize: 0.8 + 'em' }">{{ displayLineTwo || '&nbsp;' }}</p>
@@ -788,11 +788,11 @@ export default {
}, },
showEditModalFiles() { showEditModalFiles() {
// More menu func // More menu func
this.store.commit('showEditModalOnTab', { libraryItem: this.libraryItem, tab: 'files' }) this.$emit('edit', this.libraryItem, 'files')
}, },
showEditModalMatch() { showEditModalMatch() {
// More menu func // More menu func
this.store.commit('showEditModalOnTab', { libraryItem: this.libraryItem, tab: 'match' }) this.$emit('edit', this.libraryItem, 'match')
}, },
sendToDevice(deviceName) { sendToDevice(deviceName) {
// More menu func // More menu func
@@ -338,6 +338,18 @@ export default {
const series = this.series.find((se) => se.id == decoded) const series = this.series.find((se) => se.id == decoded)
if (series) filterValue = series.name 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 { } else {
filterValue = decoded filterValue = decoded
} }
@@ -88,7 +88,7 @@ export default {
}, },
providers() { providers() {
if (this.isPodcast) return this.$store.state.scanners.podcastProviders if (this.isPodcast) return this.$store.state.scanners.podcastProviders
return this.$store.state.scanners.providers return this.$store.state.scanners.bookProviders
}, },
libraryProvider() { libraryProvider() {
return this.$store.getters['libraries/getLibraryProvider'](this.currentLibraryId) || 'google' return this.$store.getters['libraries/getLibraryProvider'](this.currentLibraryId) || 'google'
@@ -96,6 +96,9 @@ export default {
}, },
methods: { methods: {
init() { 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 // 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 // the selected provider to the current library default provider
if (!this.options.provider || this.lastUsedLibrary != this.currentLibraryId) { if (!this.options.provider || this.lastUsedLibrary != this.currentLibraryId) {
@@ -127,8 +130,7 @@ export default {
this.show = false this.show = false
}) })
} }
}, }
mounted() {}
} }
</script> </script>
@@ -227,7 +227,7 @@ export default {
.catch((error) => { .catch((error) => {
console.error('Failed to create collection', error) console.error('Failed to create collection', error)
var errMsg = error.response ? error.response.data || '' : '' var errMsg = error.response ? error.response.data || '' : ''
this.$toast.error(this.$strings.ToastCollectionCreateFailed + ': ' + errMsg) this.$toast.error(errMsg)
this.processing = false this.processing = false
}) })
} }
+4 -2
View File
@@ -133,8 +133,8 @@ export default {
} }
}, },
providers() { providers() {
if (this.isPodcast) return this.$store.state.scanners.podcastProviders if (this.isPodcast) return this.$store.state.scanners.podcastCoverProviders
return [{ text: 'Best', value: 'best' }, ...this.$store.state.scanners.providers, ...this.$store.state.scanners.coverOnlyProviders, { text: 'All', value: 'all' }] return this.$store.state.scanners.bookCoverProviders
}, },
searchTitleLabel() { searchTitleLabel() {
if (this.provider.startsWith('audible')) return this.$strings.LabelSearchTitleOrASIN if (this.provider.startsWith('audible')) return this.$strings.LabelSearchTitleOrASIN
@@ -438,6 +438,8 @@ export default {
mounted() { mounted() {
// Setup socket listeners when component is mounted // Setup socket listeners when component is mounted
this.addSocketListeners() this.addSocketListeners()
// Fetch providers if not already loaded
this.$store.dispatch('scanners/fetchProviders')
}, },
beforeDestroy() { beforeDestroy() {
// Cancel any ongoing search when component is destroyed // Cancel any ongoing search when component is destroyed
+46 -19
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"> <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"> <form @submit.prevent="submitSearch">
<div class="flex flex-wrap md:flex-nowrap items-center justify-start -mx-1"> <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 /> <ui-dropdown v-model="provider" :items="providers" :label="$strings.LabelProvider" small />
</div> </div>
<div class="grow md:w-72 px-1"> <div class="grow md:w-72 px-1">
@@ -78,7 +78,7 @@
<div class="grow ml-4"> <div class="grow ml-4">
<ui-text-input-with-label v-model="selectedMatch.author" :disabled="!selectedMatchUsage.author" :label="$strings.LabelAuthor" /> <ui-text-input-with-label v-model="selectedMatch.author" :disabled="!selectedMatchUsage.author" :label="$strings.LabelAuthor" />
<p v-if="mediaMetadata.authorName || (isPodcast && mediaMetadata.author)" class="text-xs ml-1 text-white/60"> <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> {{ $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> </p>
</div> </div>
</div> </div>
@@ -87,7 +87,7 @@
<div class="grow ml-4"> <div class="grow ml-4">
<ui-multi-select v-model="selectedMatch.narrator" :items="narrators" :disabled="!selectedMatchUsage.narrator" :label="$strings.LabelNarrators" /> <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"> <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> </p>
</div> </div>
</div> </div>
@@ -96,7 +96,7 @@
<div class="grow ml-4"> <div class="grow ml-4">
<ui-rich-text-editor v-model="selectedMatch.description" :disabled="!selectedMatchUsage.description" :label="$strings.LabelDescription" /> <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"> <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> </p>
</div> </div>
</div> </div>
@@ -105,7 +105,7 @@
<div class="grow ml-4"> <div class="grow ml-4">
<ui-text-input-with-label v-model="selectedMatch.publisher" :disabled="!selectedMatchUsage.publisher" :label="$strings.LabelPublisher" /> <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"> <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> </p>
</div> </div>
</div> </div>
@@ -114,7 +114,7 @@
<div class="grow ml-4"> <div class="grow ml-4">
<ui-text-input-with-label v-model="selectedMatch.publishedYear" :disabled="!selectedMatchUsage.publishedYear" :label="$strings.LabelPublishYear" /> <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"> <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> </p>
</div> </div>
</div> </div>
@@ -253,6 +253,7 @@ export default {
hasSearched: false, hasSearched: false,
selectedMatch: null, selectedMatch: null,
selectedMatchOrig: null, selectedMatchOrig: null,
waitingForProviders: false,
selectedMatchUsage: { selectedMatchUsage: {
title: true, title: true,
subtitle: true, subtitle: true,
@@ -285,9 +286,19 @@ export default {
handler(newVal) { handler(newVal) {
if (newVal) this.init() if (newVal) this.init()
} }
},
providersLoaded(isLoaded) {
// Complete initialization once providers are loaded
if (isLoaded && this.waitingForProviders) {
this.waitingForProviders = false
this.initProviderAndSearch()
}
} }
}, },
computed: { computed: {
providersLoaded() {
return this.$store.getters['scanners/areProvidersLoaded']
},
isProcessing: { isProcessing: {
get() { get() {
return this.processing return this.processing
@@ -319,7 +330,7 @@ export default {
}, },
providers() { providers() {
if (this.isPodcast) return this.$store.state.scanners.podcastProviders if (this.isPodcast) return this.$store.state.scanners.podcastProviders
return this.$store.state.scanners.providers return this.$store.state.scanners.bookProviders
}, },
searchTitleLabel() { searchTitleLabel() {
if (this.provider.startsWith('audible')) return this.$strings.LabelSearchTitleOrASIN if (this.provider.startsWith('audible')) return this.$strings.LabelSearchTitleOrASIN
@@ -478,6 +489,24 @@ export default {
this.checkboxToggled() 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() { init() {
this.clearSelectedMatch() this.clearSelectedMatch()
this.initSelectedMatchUsage() this.initSelectedMatchUsage()
@@ -495,19 +524,13 @@ export default {
} }
this.searchTitle = this.libraryItem.media.metadata.title this.searchTitle = this.libraryItem.media.metadata.title
this.searchAuthor = this.libraryItem.media.metadata.authorName || '' 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 // Wait for providers to be loaded before setting provider and searching
if (this.provider.startsWith('audible') && this.libraryItem.media.metadata.asin) { if (this.providersLoaded || this.isPodcast) {
this.searchTitle = this.libraryItem.media.metadata.asin this.waitingForProviders = false
this.searchAuthor = '' this.initProviderAndSearch()
} } else {
this.waitingForProviders = true
if (this.searchTitle) {
this.submitSearch()
} }
}, },
selectMatch(match) { selectMatch(match) {
@@ -637,6 +660,10 @@ export default {
this.selectedMatch = null this.selectedMatch = null
this.selectedMatchOrig = null this.selectedMatchOrig = null
} }
},
mounted() {
// Fetch providers if not already loaded
this.$store.dispatch('scanners/fetchProviders')
} }
} }
</script> </script>
@@ -158,6 +158,8 @@ export default {
this.isProcessing = true this.isProcessing = true
var updateResult = await this.$axios.$patch(`/api/items/${this.libraryItemId}/media`, updatePayload).catch((error) => { var updateResult = await this.$axios.$patch(`/api/items/${this.libraryItemId}/media`, updatePayload).catch((error) => {
console.error('Failed to update', 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 return false
}) })
this.isProcessing = false this.isProcessing = false
@@ -107,6 +107,7 @@ export default {
quickEmbed() { quickEmbed() {
const payload = { const payload = {
message: this.$strings.MessageConfirmQuickEmbed, message: this.$strings.MessageConfirmQuickEmbed,
allowHtml: true,
callback: (confirmed) => { callback: (confirmed) => {
if (confirmed) { if (confirmed) {
this.$axios this.$axios
@@ -74,7 +74,7 @@ export default {
}, },
providers() { providers() {
if (this.mediaType === 'podcast') return this.$store.state.scanners.podcastProviders if (this.mediaType === 'podcast') return this.$store.state.scanners.podcastProviders
return this.$store.state.scanners.providers return this.$store.state.scanners.bookProviders
} }
}, },
methods: { methods: {
@@ -156,6 +156,8 @@ export default {
}, },
mounted() { mounted() {
this.init() this.init()
// Fetch providers if not already loaded
this.$store.dispatch('scanners/fetchProviders')
} }
} }
</script> </script>
@@ -104,7 +104,6 @@ export default {
}, },
data() { data() {
return { return {
provider: null,
useSquareBookCovers: false, useSquareBookCovers: false,
enableWatcher: false, enableWatcher: false,
skipMatchingMediaWithAsin: false, skipMatchingMediaWithAsin: false,
@@ -134,10 +133,6 @@ export default {
isPodcastLibrary() { isPodcastLibrary() {
return this.mediaType === 'podcast' return this.mediaType === 'podcast'
}, },
providers() {
if (this.mediaType === 'podcast') return this.$store.state.scanners.podcastProviders
return this.$store.state.scanners.providers
},
maskAsFinishedWhenItems() { maskAsFinishedWhenItems() {
return [ return [
{ {
@@ -97,7 +97,10 @@ export default {
...playlist ...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() { isBatch() {
return this.selectedPlaylistItems.length > 1 return this.selectedPlaylistItems.length > 1
@@ -8,7 +8,7 @@
</button> </button>
</ui-tooltip> </ui-tooltip>
<ui-tooltip direction="top" :text="jumpBackwardText"> <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> <span class="material-symbols text-2xl sm:text-3xl">replay</span>
</button> </button>
</ui-tooltip> </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 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 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"> <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" /> <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() { message() {
return this.confirmPromptOptions.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() { callback() {
return this.confirmPromptOptions.callback return this.confirmPromptOptions.callback
}, },
@@ -103,6 +115,14 @@ export default {
if (this.callback) this.callback(true, this.checkboxValue) if (this.callback) this.callback(true, this.checkboxValue)
this.show = false this.show = false
}, },
escapeHtml(value) {
return String(value)
.replace(/&/g, '&amp;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/"/g, '&quot;')
.replace(/'/g, '&#39;')
},
setShow() { setShow() {
this.checkboxValue = this.checkboxDefaultValue this.checkboxValue = this.checkboxDefaultValue
this.$eventBus.$emit('showing-prompt', true) 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="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' }"> <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" /> <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> </ui-tooltip>
</div> </div>
@@ -186,10 +186,16 @@ export default {
daysInARow() { daysInARow() {
var count = 0 var count = 0
while (true) { while (true) {
var _date = this.$addDaysToToday(count * -1) const _date = this.$addDaysToToday(count * -1 - 1)
var datestr = this.$formatJsDate(_date, 'yyyy-MM-dd') const datestr = this.$formatJsDate(_date, 'yyyy-MM-dd')
if (!this.listeningStatsDays[datestr] || this.listeningStatsDays[datestr] === 0) { 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 return count
} }
count++ count++
+7 -2
View File
@@ -1,5 +1,5 @@
<template> <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="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="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> <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 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>
<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>
</div> </div>
</template> </template>
@@ -23,6 +25,9 @@ export default {
computed: { computed: {
message() { message() {
return this.text || this.$strings.MessagePleaseWait return this.text || this.$strings.MessagePleaseWait
},
hasSlotContent() {
return this.$slots.default && this.$slots.default.length > 0
} }
} }
} }
+1 -1
View File
@@ -278,7 +278,7 @@ export default {
}) })
}, },
insertNewItem(item) { insertNewItem(item) {
this.selected.push(item) if (!this.selected.includes(item)) this.selected.push(item)
this.$emit('input', this.selected) this.$emit('input', this.selected)
this.$emit('newItem', item) this.$emit('newItem', item)
this.textInput = null this.textInput = null
@@ -287,7 +287,7 @@ export default {
}) })
}, },
insertNewItem(item) { 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('input', this.selected)
this.$emit('newItem', item) this.$emit('newItem', item)
this.textInput = null this.textInput = null
+3 -2
View File
@@ -1,6 +1,6 @@
<template> <template>
<div ref="wrapper" class="relative"> <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"> <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> <span class="material-symbols text-gray-300 cursor-pointer" style="font-size: 1.1rem" @click.stop.prevent="clear">close</span>
</div> </div>
@@ -41,7 +41,8 @@ export default {
step: [String, Number], step: [String, Number],
min: [String, Number], min: [String, Number],
customInputClass: String, customInputClass: String,
trimWhitespace: Boolean trimWhitespace: Boolean,
autocomplete: String
}, },
data() { data() {
return { return {
+3 -2
View File
@@ -6,7 +6,7 @@
<em v-if="note" class="font-normal text-xs pl-2">{{ note }}</em> <em v-if="note" class="font-normal text-xs pl-2">{{ note }}</em>
</label> </label>
</slot> </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> </div>
</template> </template>
@@ -26,7 +26,8 @@ export default {
disabled: Boolean, disabled: Boolean,
inputClass: String, inputClass: String,
showCopy: Boolean, showCopy: Boolean,
trimWhitespace: Boolean trimWhitespace: Boolean,
autocomplete: String
}, },
data() { data() {
return {} return {}
+12 -3
View File
@@ -22,7 +22,8 @@ export default {
type: Number, type: Number,
default: 0 default: 0
}, },
disabled: Boolean disabled: Boolean,
plaintext: Boolean
}, },
data() { data() {
return { return {
@@ -46,7 +47,11 @@ export default {
methods: { methods: {
updateText() { updateText() {
if (this.tooltip) { 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) 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.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.zIndex = 100
tooltip.style.backgroundColor = 'rgba(0,0,0,0.85)' 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('mouseover', this.cancelHide)
tooltip.addEventListener('mouseleave', this.hideTooltip) tooltip.addEventListener('mouseleave', this.hideTooltip)
+2 -2
View File
@@ -132,10 +132,10 @@ export default {
editAuthor(author) { editAuthor(author) {
this.$store.commit('globals/showEditAuthorModal', author) this.$store.commit('globals/showEditAuthorModal', author)
}, },
editItem(libraryItem) { editItem(libraryItem, tab = 'details') {
var itemIds = this.items.map((e) => e.id) var itemIds = this.items.map((e) => e.id)
this.$store.commit('setBookshelfBookIds', itemIds) this.$store.commit('setBookshelfBookIds', itemIds)
this.$store.commit('showEditModal', libraryItem) this.$store.commit('showEditModalOnTab', { libraryItem, tab: tab || 'details' })
}, },
selectItem(payload) { selectItem(payload) {
this.$emit('selectEntity', payload) this.$emit('selectEntity', payload)
+4 -2
View File
@@ -371,11 +371,13 @@ export default {
}, },
customMetadataProviderAdded(provider) { customMetadataProviderAdded(provider) {
if (!provider?.id) return if (!provider?.id) return
this.$store.commit('scanners/addCustomMetadataProvider', provider) // Refresh providers cache
this.$store.dispatch('scanners/refreshProviders')
}, },
customMetadataProviderRemoved(provider) { customMetadataProviderRemoved(provider) {
if (!provider?.id) return if (!provider?.id) return
this.$store.commit('scanners/removeCustomMetadataProvider', provider) // Refresh providers cache
this.$store.dispatch('scanners/refreshProviders')
}, },
initializeSocket() { initializeSocket() {
if (this.$root.socket) { if (this.$root.socket) {
+2 -2
View File
@@ -118,8 +118,8 @@ export default {
propsData: props, propsData: props,
parent: this, parent: this,
created() { created() {
this.$on('edit', (entity) => { this.$on('edit', (entity, tab) => {
if (_this.editEntity) _this.editEntity(entity) if (_this.editEntity) _this.editEntity(entity, tab)
}) })
this.$on('select', ({ entity, shiftKey }) => { this.$on('select', ({ entity, shiftKey }) => {
if (_this.selectEntity) _this.selectEntity(entity, shiftKey) if (_this.selectEntity) _this.selectEntity(entity, shiftKey)
+2 -2
View File
@@ -1,12 +1,12 @@
{ {
"name": "audiobookshelf-client", "name": "audiobookshelf-client",
"version": "2.30.0", "version": "2.35.1",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "audiobookshelf-client", "name": "audiobookshelf-client",
"version": "2.30.0", "version": "2.35.1",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"@nuxtjs/axios": "^5.13.6", "@nuxtjs/axios": "^5.13.6",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "audiobookshelf-client", "name": "audiobookshelf-client",
"version": "2.30.0", "version": "2.35.1",
"buildNumber": 1, "buildNumber": 1,
"description": "Self-hosted audiobook and podcast client", "description": "Self-hosted audiobook and podcast client",
"main": "index.js", "main": "index.js",
+17 -6
View File
@@ -117,16 +117,16 @@
</button> </button>
</ui-tooltip> </ui-tooltip>
<ui-tooltip :text="selectedChapterId === chapter.id && isPlayingChapter ? $strings.MessagePauseChapter : $strings.MessagePlayChapter" direction="bottom"> <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)"> <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" /> <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-if="selectedChapterId === chapter.id && isPlayingChapter" class="material-symbols text-base">pause</span>
<span v-else class="material-symbols text-base">play_arrow</span> <span v-else class="material-symbols text-xl">play_arrow</span>
</button> </button>
</ui-tooltip> </ui-tooltip>
<ui-tooltip v-if="selectedChapterId === chapter.id && (isPlayingChapter || isLoadingChapter)" :text="$strings.TooltipAdjustChapterStart" direction="bottom"> <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> <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>
<ui-tooltip v-if="chapter.error" :text="chapter.error" direction="left"> <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"> <button class="w-7 h-7 rounded-full flex items-center justify-center text-error">
<span class="material-symbols text-lg">error_outline</span> <span class="material-symbols text-lg">error_outline</span>
</button> </button>
@@ -594,6 +594,14 @@ export default {
this.hasChanges = hasChanges 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) { playChapter(chapter) {
console.log('Play Chapter', chapter.id) console.log('Play Chapter', chapter.id)
if (this.selectedChapterId === chapter.id) { if (this.selectedChapterId === chapter.id) {
@@ -608,9 +616,12 @@ export default {
this.destroyAudioEl() this.destroyAudioEl()
} }
const audioTrack = this.tracks.find((at) => { const audioTrack = this.getAudioTrackForTime(chapter.start)
return chapter.start >= at.startOffset && chapter.start < at.startOffset + at.duration if (!audioTrack) {
}) console.error('No audio track found for chapter', chapter)
return
}
this.selectedChapter = chapter this.selectedChapter = chapter
this.isLoadingChapter = true this.isLoadingChapter = true
+5 -2
View File
@@ -247,7 +247,8 @@ export default {
return this.$store.state.serverSettings return this.$store.state.serverSettings
}, },
providers() { providers() {
return this.$store.state.scanners.providers // Use book cover providers for the cover provider dropdown
return this.$store.state.scanners.bookCoverProviders || []
}, },
dateFormats() { dateFormats() {
return this.$store.state.globals.dateFormats return this.$store.state.globals.dateFormats
@@ -389,8 +390,8 @@ export default {
}, },
purgeItemsCache() { purgeItemsCache() {
const payload = { 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, message: this.$strings.MessageConfirmPurgeItemsCache,
allowHtml: true,
callback: (confirmed) => { callback: (confirmed) => {
if (confirmed) { if (confirmed) {
this.sendPurgeItemsCache() this.sendPurgeItemsCache()
@@ -416,6 +417,8 @@ export default {
}, },
mounted() { mounted() {
this.initServerSettings() this.initServerSettings()
// Fetch providers if not already loaded (for cover provider dropdown)
this.$store.dispatch('scanners/fetchProviders')
} }
} }
</script> </script>
@@ -90,9 +90,9 @@ export default {
let message = this.$getString('MessageConfirmRenameGenre', [this.editingGenre, this.newGenreName]) let message = this.$getString('MessageConfirmRenameGenre', [this.editingGenre, this.newGenreName])
if (genreNameExists) { if (genreNameExists) {
message += `<br><span class="text-sm">${this.$strings.MessageConfirmRenameGenreMergeNote}</span>` message += ` ${this.$strings.MessageConfirmRenameGenreMergeNote}`
} else if (genreNameExistsOfDifferentCase) { } else if (genreNameExistsOfDifferentCase) {
message += `<br><span class="text-warning text-sm">${this.$getString('MessageConfirmRenameGenreWarning', [genreNameExistsOfDifferentCase])}</span>` message += ` ${this.$getString('MessageConfirmRenameGenreWarning', [genreNameExistsOfDifferentCase])}`
} }
const payload = { const payload = {
@@ -86,9 +86,9 @@ export default {
let message = this.$getString('MessageConfirmRenameTag', [this.editingTag, this.newTagName]) let message = this.$getString('MessageConfirmRenameTag', [this.editingTag, this.newTagName])
if (tagNameExists) { if (tagNameExists) {
message += `<br><span class="text-sm">${this.$strings.MessageConfirmRenameTagMergeNote}</span>` message += ` ${this.$strings.MessageConfirmRenameTagMergeNote}`
} else if (tagNameExistsOfDifferentCase) { } else if (tagNameExistsOfDifferentCase) {
message += `<br><span class="text-warning text-sm">${this.$getString('MessageConfirmRenameTagWarning', [tagNameExistsOfDifferentCase])}</span>` message += ` ${this.$getString('MessageConfirmRenameTagWarning', [tagNameExistsOfDifferentCase])}`
} }
const payload = { const payload = {
+19 -7
View File
@@ -66,7 +66,11 @@
<p class="text-xs">{{ getPlayMethodName(session.playMethod) }}</p> <p class="text-xs">{{ getPlayMethodName(session.playMethod) }}</p>
</td> </td>
<td class="hidden sm:table-cell max-w-32 min-w-32"> <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>
<td class="text-center w-24 min-w-24 sm:w-32 sm:min-w-32"> <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> <p class="text-xs font-mono">{{ $elapsedPrettyLocalized(session.timeListening) }}</p>
@@ -130,7 +134,11 @@
<p class="text-xs">{{ getPlayMethodName(session.playMethod) }}</p> <p class="text-xs">{{ getPlayMethodName(session.playMethod) }}</p>
</td> </td>
<td class="hidden sm:table-cell max-w-32 min-w-32"> <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>
<td class="text-center"> <td class="text-center">
<p class="text-xs font-mono">{{ $elapsedPretty(session.timeListening) }}</p> <p class="text-xs font-mono">{{ $elapsedPretty(session.timeListening) }}</p>
@@ -172,7 +180,11 @@
<p class="text-xs">{{ getPlayMethodName(session.playMethod) }}</p> <p class="text-xs">{{ getPlayMethodName(session.playMethod) }}</p>
</td> </td>
<td class="hidden sm:table-cell max-w-32 min-w-32"> <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>
<td class="text-center hover:underline" @click.stop="clickCurrentTime(session)"> <td class="text-center hover:underline" @click.stop="clickCurrentTime(session)">
<p class="text-xs font-mono">{{ $secondsToTimestamp(session.currentTime) }}</p> <p class="text-xs font-mono">{{ $secondsToTimestamp(session.currentTime) }}</p>
@@ -433,16 +445,16 @@ export default {
this.selectedSession = session this.selectedSession = session
this.showSessionModal = true this.showSessionModal = true
}, },
getDeviceInfoString(deviceInfo) { getDeviceInfoLines(deviceInfo) {
if (!deviceInfo) return '' if (!deviceInfo) return []
var lines = [] const lines = []
if (deviceInfo.clientName) lines.push(`${deviceInfo.clientName} ${deviceInfo.clientVersion || ''}`) if (deviceInfo.clientName) lines.push(`${deviceInfo.clientName} ${deviceInfo.clientVersion || ''}`)
if (deviceInfo.osName) lines.push(`${deviceInfo.osName} ${deviceInfo.osVersion}`) if (deviceInfo.osName) lines.push(`${deviceInfo.osName} ${deviceInfo.osVersion}`)
if (deviceInfo.browserName) lines.push(deviceInfo.browserName) if (deviceInfo.browserName) lines.push(deviceInfo.browserName)
if (deviceInfo.manufacturer && deviceInfo.model) lines.push(`${deviceInfo.manufacturer} ${deviceInfo.model}`) if (deviceInfo.manufacturer && deviceInfo.model) lines.push(`${deviceInfo.manufacturer} ${deviceInfo.model}`)
if (deviceInfo.sdkVersion) lines.push(`SDK Version: ${deviceInfo.sdkVersion}`) if (deviceInfo.sdkVersion) lines.push(`SDK Version: ${deviceInfo.sdkVersion}`)
return lines.join('<br>') return lines
}, },
getPlayMethodName(playMethod) { getPlayMethodName(playMethod) {
if (playMethod === this.$constants.PlayMethod.DIRECTPLAY) return 'Direct Play' 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> <p class="text-xs">{{ getPlayMethodName(session.playMethod) }}</p>
</td> </td>
<td class="hidden sm:table-cell min-w-32 max-w-32"> <td class="hidden sm:table-cell min-w-32 max-w-32">
<p class="text-xs truncate" v-html="getDeviceInfoString(session.deviceInfo)" /> <p class="text-xs truncate">
</td> <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"> <td class="text-center">
<p class="text-xs font-mono">{{ $elapsedPrettyLocalized(session.timeListening) }}</p> <p class="text-xs font-mono">{{ $elapsedPrettyLocalized(session.timeListening) }}</p>
</td> </td>
@@ -193,16 +197,16 @@ export default {
this.selectedSession = session this.selectedSession = session
this.showSessionModal = true this.showSessionModal = true
}, },
getDeviceInfoString(deviceInfo) { getDeviceInfoLines(deviceInfo) {
if (!deviceInfo) return '' if (!deviceInfo) return []
var lines = [] const lines = []
if (deviceInfo.clientName) lines.push(`${deviceInfo.clientName} ${deviceInfo.clientVersion || ''}`) if (deviceInfo.clientName) lines.push(`${deviceInfo.clientName} ${deviceInfo.clientVersion || ''}`)
if (deviceInfo.osName) lines.push(`${deviceInfo.osName} ${deviceInfo.osVersion}`) if (deviceInfo.osName) lines.push(`${deviceInfo.osName} ${deviceInfo.osVersion}`)
if (deviceInfo.browserName) lines.push(deviceInfo.browserName) if (deviceInfo.browserName) lines.push(deviceInfo.browserName)
if (deviceInfo.manufacturer && deviceInfo.model) lines.push(`${deviceInfo.manufacturer} ${deviceInfo.model}`) if (deviceInfo.manufacturer && deviceInfo.model) lines.push(`${deviceInfo.manufacturer} ${deviceInfo.model}`)
if (deviceInfo.sdkVersion) lines.push(`SDK Version: ${deviceInfo.sdkVersion}`) if (deviceInfo.sdkVersion) lines.push(`SDK Version: ${deviceInfo.sdkVersion}`)
return lines.join('<br>') return lines
}, },
getPlayMethodName(playMethod) { getPlayMethodName(playMethod) {
if (playMethod === this.$constants.PlayMethod.DIRECTPLAY) return 'Direct Play' if (playMethod === this.$constants.PlayMethod.DIRECTPLAY) return 'Direct Play'
+8 -7
View File
@@ -17,9 +17,9 @@
<form @submit.prevent="submitServerSetup"> <form @submit.prevent="submitServerSetup">
<p class="text-lg font-semibold mb-2 pl-1 text-center">Create Root User</p> <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.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" :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" :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> <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" /> <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"> <form v-show="login_local" @submit.prevent="submitForm">
<label class="text-xs text-gray-300 uppercase">{{ $strings.LabelUsername }}</label> <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> <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"> <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> <ui-btn type="submit" :disabled="processing" color="bg-primary" class="leading-none">{{ processing ? 'Checking...' : $strings.ButtonSubmit }}</ui-btn>
</div> </div>
@@ -189,6 +189,7 @@ export default {
require('@/plugins/chromecast.js').default(this) require('@/plugins/chromecast.js').default(this)
} }
this.$store.commit('libraries/setLastLoad', 0) // Ensure libraries get loaded again when switching users
this.$store.commit('libraries/setCurrentLibrary', { id: userDefaultLibraryId }) this.$store.commit('libraries/setCurrentLibrary', { id: userDefaultLibraryId })
this.$store.commit('user/setUser', user) this.$store.commit('user/setUser', user)
// Access token only returned from login, not authorize // Access token only returned from login, not authorize
@@ -298,8 +299,8 @@ export default {
} }
if (authMethods.includes('openid')) { if (authMethods.includes('openid')) {
// Auto redirect unless query string ?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') { if ((this.authFormData?.authOpenIDAutoLaunch && this.$route.query?.autoLaunch !== '0') || this.$route.query?.autoLaunch == '1') {
window.location.href = this.openidAuthUri window.location.href = this.openidAuthUri
} }
+1
View File
@@ -364,6 +364,7 @@ export default {
} }
const startTime = this.playbackSession.currentTime || 0 const startTime = this.playbackSession.currentTime || 0
this.localAudioPlayer.set(null, this.audioTracks, false, startTime, false) this.localAudioPlayer.set(null, this.audioTracks, false, startTime, false)
this.localAudioPlayer.on('stateChange', this.playerStateChange.bind(this)) this.localAudioPlayer.on('stateChange', this.playerStateChange.bind(this))
this.localAudioPlayer.on('timeupdate', this.playerTimeUpdate.bind(this)) this.localAudioPlayer.on('timeupdate', this.playerTimeUpdate.bind(this))
+25 -2
View File
@@ -155,7 +155,7 @@ export default {
}, },
providers() { providers() {
if (this.selectedLibraryIsPodcast) return this.$store.state.scanners.podcastProviders if (this.selectedLibraryIsPodcast) return this.$store.state.scanners.podcastProviders
return this.$store.state.scanners.providers return this.$store.state.scanners.bookProviders
}, },
canFetchMetadata() { canFetchMetadata() {
return !this.selectedLibraryIsPodcast && this.fetchMetadata.enabled return !this.selectedLibraryIsPodcast && this.fetchMetadata.enabled
@@ -297,6 +297,15 @@ export default {
ref.setUploadStatus(status) 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) { async uploadItem(item) {
var form = new FormData() var form = new FormData()
form.set('title', item.title) form.set('title', item.title)
@@ -312,8 +321,20 @@ export default {
form.set(`${index++}`, file) 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 return this.$axios
.$post('/api/upload', form) .$post('/api/upload', form, config)
.then(() => true) .then(() => true)
.catch((error) => { .catch((error) => {
console.error('Failed to upload item', error) console.error('Failed to upload item', error)
@@ -394,6 +415,8 @@ export default {
this.setMetadataProvider() this.setMetadataProvider()
this.setDefaultFolder() this.setDefaultFolder()
// Fetch providers if not already loaded
this.$store.dispatch('scanners/fetchProviders')
window.addEventListener('dragenter', this.dragenter) window.addEventListener('dragenter', this.dragenter)
window.addEventListener('dragleave', this.dragleave) window.addEventListener('dragleave', this.dragleave)
window.addEventListener('dragover', this.dragover) 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('loadedmetadata', this.evtLoadedMetadata.bind(this))
this.player.addEventListener('timeupdate', this.evtTimeupdate.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 = {} var mimeTypeCanPlayMap = {}
mimeTypes.forEach((mt) => { mimeTypes.forEach((mt) => {
var canPlay = this.player.canPlayType(mt) var canPlay = this.player.canPlayType(mt)
+8
View File
@@ -6,6 +6,7 @@ const defaultCode = 'en-us'
const languageCodeMap = { const languageCodeMap = {
ar: { label: 'عربي', dateFnsLocale: 'ar' }, ar: { label: 'عربي', dateFnsLocale: 'ar' },
be: { label: 'Беларуская', dateFnsLocale: 'be' },
bg: { label: 'Български', dateFnsLocale: 'bg' }, bg: { label: 'Български', dateFnsLocale: 'bg' },
bn: { label: 'বাংলা', dateFnsLocale: 'bn' }, bn: { label: 'বাংলা', dateFnsLocale: 'bn' },
ca: { label: 'Català', dateFnsLocale: 'ca' }, ca: { label: 'Català', dateFnsLocale: 'ca' },
@@ -20,15 +21,19 @@ const languageCodeMap = {
he: { label: 'עברית', dateFnsLocale: 'he' }, he: { label: 'עברית', dateFnsLocale: 'he' },
hr: { label: 'Hrvatski', dateFnsLocale: 'hr' }, hr: { label: 'Hrvatski', dateFnsLocale: 'hr' },
it: { label: 'Italiano', dateFnsLocale: 'it' }, it: { label: 'Italiano', dateFnsLocale: 'it' },
ja: { label: '日本語', dateFnsLocale: 'ja' },
lt: { label: 'Lietuvių', dateFnsLocale: 'lt' }, lt: { label: 'Lietuvių', dateFnsLocale: 'lt' },
hu: { label: 'Magyar', dateFnsLocale: 'hu' }, hu: { label: 'Magyar', dateFnsLocale: 'hu' },
ko: { label: '한국어', dateFnsLocale: 'ko' },
nl: { label: 'Nederlands', dateFnsLocale: 'nl' }, nl: { label: 'Nederlands', dateFnsLocale: 'nl' },
no: { label: 'Norsk', dateFnsLocale: 'no' }, no: { label: 'Norsk', dateFnsLocale: 'no' },
pl: { label: 'Polski', dateFnsLocale: 'pl' }, pl: { label: 'Polski', dateFnsLocale: 'pl' },
'pt-br': { label: 'Português (Brasil)', dateFnsLocale: 'ptBR' }, 'pt-br': { label: 'Português (Brasil)', dateFnsLocale: 'ptBR' },
ru: { label: 'Русский', dateFnsLocale: 'ru' }, ru: { label: 'Русский', dateFnsLocale: 'ru' },
sk: { label: 'Slovenčina', dateFnsLocale: 'sk' },
sl: { label: 'Slovenščina', dateFnsLocale: 'sl' }, sl: { label: 'Slovenščina', dateFnsLocale: 'sl' },
sv: { label: 'Svenska', dateFnsLocale: 'sv' }, sv: { label: 'Svenska', dateFnsLocale: 'sv' },
tr: { label: 'Türkçe', dateFnsLocale: 'tr' },
uk: { label: 'Українська', dateFnsLocale: 'uk' }, uk: { label: 'Українська', dateFnsLocale: 'uk' },
'vi-vn': { label: 'Tiếng Việt', dateFnsLocale: 'vi' }, 'vi-vn': { label: 'Tiếng Việt', dateFnsLocale: 'vi' },
'zh-cn': { label: '简体中文 (Simplified Chinese)', dateFnsLocale: 'zhCN' }, 'zh-cn': { label: '简体中文 (Simplified Chinese)', dateFnsLocale: 'zhCN' },
@@ -46,6 +51,7 @@ const podcastSearchRegionMap = {
au: { label: 'Australia' }, au: { label: 'Australia' },
br: { label: 'Brasil' }, br: { label: 'Brasil' },
be: { label: 'België / Belgique / Belgien' }, be: { label: 'België / Belgique / Belgien' },
by: { label: 'Беларусь' },
cz: { label: 'Česko' }, cz: { label: 'Česko' },
dk: { label: 'Danmark' }, dk: { label: 'Danmark' },
de: { label: 'Deutschland' }, de: { label: 'Deutschland' },
@@ -55,6 +61,7 @@ const podcastSearchRegionMap = {
hr: { label: 'Hrvatska' }, hr: { label: 'Hrvatska' },
il: { label: 'ישראל / إسرائيل' }, il: { label: 'ישראל / إسرائيل' },
it: { label: 'Italia' }, it: { label: 'Italia' },
jp: { label: '日本' },
lu: { label: 'Luxembourg / Luxemburg / Lëtezebuerg' }, lu: { label: 'Luxembourg / Luxemburg / Lëtezebuerg' },
hu: { label: 'Magyarország' }, hu: { label: 'Magyarország' },
nl: { label: 'Nederland' }, nl: { label: 'Nederland' },
@@ -65,6 +72,7 @@ const podcastSearchRegionMap = {
pt: { label: 'Portugal' }, pt: { label: 'Portugal' },
ru: { label: 'Россия' }, ru: { label: 'Россия' },
ch: { label: 'Schweiz / Suisse / Svizzera' }, ch: { label: 'Schweiz / Suisse / Svizzera' },
sk: { label: 'Slovensko' },
se: { label: 'Sverige' }, se: { label: 'Sverige' },
vn: { label: 'Việt Nam' }, vn: { label: 'Việt Nam' },
ua: { label: 'Україна' }, ua: { label: 'Україна' },
+3 -6
View File
@@ -117,7 +117,6 @@ export const actions = {
const library = data.library const library = data.library
const filterData = data.filterdata const filterData = data.filterdata
const issues = data.issues || 0 const issues = data.issues || 0
const customMetadataProviders = data.customMetadataProviders || []
const numUserPlaylists = data.numUserPlaylists const numUserPlaylists = data.numUserPlaylists
dispatch('user/checkUpdateLibrarySortFilter', library.mediaType, { root: true }) dispatch('user/checkUpdateLibrarySortFilter', library.mediaType, { root: true })
@@ -131,8 +130,6 @@ export const actions = {
commit('setLibraryIssues', issues) commit('setLibraryIssues', issues)
commit('setLibraryFilterData', filterData) commit('setLibraryFilterData', filterData)
commit('setNumUserPlaylists', numUserPlaylists) commit('setNumUserPlaylists', numUserPlaylists)
commit('scanners/setCustomMetadataProviders', customMetadataProviders, { root: true })
commit('setCurrentLibrary', { id: libraryId }) commit('setCurrentLibrary', { id: libraryId })
return data return data
}) })
@@ -159,7 +156,7 @@ export const actions = {
.$get(`/api/libraries`) .$get(`/api/libraries`)
.then((data) => { .then((data) => {
commit('set', data.libraries) commit('set', data.libraries)
commit('setLastLoad') commit('setLastLoad', new Date())
}) })
.catch((error) => { .catch((error) => {
console.error('Failed', error) console.error('Failed', error)
@@ -176,8 +173,8 @@ export const mutations = {
setFoldersLastUpdate(state) { setFoldersLastUpdate(state) {
state.folderLastUpdate = Date.now() state.folderLastUpdate = Date.now()
}, },
setLastLoad(state) { setLastLoad(state, date) {
state.lastLoad = Date.now() state.lastLoad = date
}, },
setLibraryIssues(state, val) { setLibraryIssues(state, val) {
state.issues = val state.issues = val
+49 -115
View File
@@ -1,126 +1,60 @@
export const state = () => ({ export const state = () => ({
providers: [ bookProviders: [],
{ podcastProviders: [],
text: 'Google Books', bookCoverProviders: [],
value: 'google' podcastCoverProviders: [],
}, providersLoaded: false
{
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'
}
]
}) })
export const getters = { export const getters = {
checkBookProviderExists: state => (providerValue) => { checkBookProviderExists: (state) => (providerValue) => {
return state.providers.some(p => p.value === providerValue) return state.bookProviders.some((p) => p.value === providerValue)
}, },
checkPodcastProviderExists: state => (providerValue) => { checkPodcastProviderExists: (state) => (providerValue) => {
return state.podcastProviders.some(p => p.value === providerValue) return state.podcastProviders.some((p) => p.value === providerValue)
} },
areProvidersLoaded: (state) => state.providersLoaded
} }
export const actions = {} 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 mutations = { export const mutations = {
addCustomMetadataProvider(state, provider) { setAllProviders(state, providers) {
if (provider.mediaType === 'book') { state.bookProviders = providers.books || []
if (state.providers.some(p => p.value === provider.slug)) return state.podcastProviders = providers.podcasts || []
state.providers.push({ state.bookCoverProviders = providers.booksCovers || []
text: provider.name, state.podcastCoverProviders = providers.podcasts || [] // Use same as bookCovers since podcasts use iTunes only
value: provider.slug state.providersLoaded = true
})
} 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
}
} }
} }
+19 -5
View File
@@ -21,7 +21,8 @@
"ButtonChooseAFolder": "اختر المجلد", "ButtonChooseAFolder": "اختر المجلد",
"ButtonChooseFiles": "اختر الملفات", "ButtonChooseFiles": "اختر الملفات",
"ButtonClearFilter": "تصفية الفرز", "ButtonClearFilter": "تصفية الفرز",
"ButtonCloseFeed": "إغلاق", "ButtonClose": "إغلاق",
"ButtonCloseFeed": "إغلاق الموجز",
"ButtonCloseSession": "إغلاق الجلسة المفتوحة", "ButtonCloseSession": "إغلاق الجلسة المفتوحة",
"ButtonCollections": "المجموعات", "ButtonCollections": "المجموعات",
"ButtonConfigureScanner": "إعدادات الماسح الضوئي", "ButtonConfigureScanner": "إعدادات الماسح الضوئي",
@@ -120,11 +121,13 @@
"HeaderAccount": "الحساب", "HeaderAccount": "الحساب",
"HeaderAddCustomMetadataProvider": "إضافة موفر بيانات تعريفية مخصص", "HeaderAddCustomMetadataProvider": "إضافة موفر بيانات تعريفية مخصص",
"HeaderAdvanced": "متقدم", "HeaderAdvanced": "متقدم",
"HeaderApiKeys": "مفاتيح API",
"HeaderAppriseNotificationSettings": "إعدادات الإشعارات", "HeaderAppriseNotificationSettings": "إعدادات الإشعارات",
"HeaderAudioTracks": "المقاطع الصوتية", "HeaderAudioTracks": "المقاطع الصوتية",
"HeaderAudiobookTools": "أدوات إدارة ملفات الكتب الصوتية", "HeaderAudiobookTools": "أدوات إدارة ملفات الكتب الصوتية",
"HeaderAuthentication": "المصادقة", "HeaderAuthentication": "المصادقة",
"HeaderBackups": "النسخ الاحتياطية", "HeaderBackups": "النسخ الاحتياطية",
"HeaderBulkChapterModal": "أضف فصولاً متعددة",
"HeaderChangePassword": "تغيير كلمة المرور", "HeaderChangePassword": "تغيير كلمة المرور",
"HeaderChapters": "الفصول", "HeaderChapters": "الفصول",
"HeaderChooseAFolder": "اختيار المجلد", "HeaderChooseAFolder": "اختيار المجلد",
@@ -163,6 +166,7 @@
"HeaderMetadataOrderOfPrecedence": "ترتيب أولوية البيانات الوصفية", "HeaderMetadataOrderOfPrecedence": "ترتيب أولوية البيانات الوصفية",
"HeaderMetadataToEmbed": "البيانات الوصفية المراد تضمينها", "HeaderMetadataToEmbed": "البيانات الوصفية المراد تضمينها",
"HeaderNewAccount": "حساب جديد", "HeaderNewAccount": "حساب جديد",
"HeaderNewApiKey": "مفتاح API جديد",
"HeaderNewLibrary": "مكتبة جديدة", "HeaderNewLibrary": "مكتبة جديدة",
"HeaderNotificationCreate": "إنشاء إشعار", "HeaderNotificationCreate": "إنشاء إشعار",
"HeaderNotificationUpdate": "تحديث إشعار", "HeaderNotificationUpdate": "تحديث إشعار",
@@ -196,6 +200,7 @@
"HeaderSettingsExperimental": "ميزات تجريبية", "HeaderSettingsExperimental": "ميزات تجريبية",
"HeaderSettingsGeneral": "عام", "HeaderSettingsGeneral": "عام",
"HeaderSettingsScanner": "إعدادات المسح", "HeaderSettingsScanner": "إعدادات المسح",
"HeaderSettingsSecurity": "الأمان",
"HeaderSettingsWebClient": "عميل الويب", "HeaderSettingsWebClient": "عميل الويب",
"HeaderSleepTimer": "مؤقت النوم", "HeaderSleepTimer": "مؤقت النوم",
"HeaderStatsLargestItems": "أكبر العناصر حجماً", "HeaderStatsLargestItems": "أكبر العناصر حجماً",
@@ -207,6 +212,7 @@
"HeaderTableOfContents": "جدول المحتويات", "HeaderTableOfContents": "جدول المحتويات",
"HeaderTools": "أدوات", "HeaderTools": "أدوات",
"HeaderUpdateAccount": "تحديث الحساب", "HeaderUpdateAccount": "تحديث الحساب",
"HeaderUpdateApiKey": "تحديث مفتاح API",
"HeaderUpdateAuthor": "تحديث المؤلف", "HeaderUpdateAuthor": "تحديث المؤلف",
"HeaderUpdateDetails": "تحديث التفاصيل", "HeaderUpdateDetails": "تحديث التفاصيل",
"HeaderUpdateLibrary": "تحديث المكتبة", "HeaderUpdateLibrary": "تحديث المكتبة",
@@ -236,6 +242,10 @@
"LabelAllUsersExcludingGuests": "جميع المستخدمين باستثناء الضيوف", "LabelAllUsersExcludingGuests": "جميع المستخدمين باستثناء الضيوف",
"LabelAllUsersIncludingGuests": "جميع المستخدمين بما في ذلك الضيوف", "LabelAllUsersIncludingGuests": "جميع المستخدمين بما في ذلك الضيوف",
"LabelAlreadyInYourLibrary": "موجود بالفعل في مكتبتك", "LabelAlreadyInYourLibrary": "موجود بالفعل في مكتبتك",
"LabelApiKeyCreated": "تم إنشاء مفتاح API \"{0}\" بنجاح.",
"LabelApiKeyCreatedDescription": "تأكد من نسخ مفتاح API الآن، لن تتمكن من رؤيته مرة أخرى.",
"LabelApiKeyUser": "التصرف بالنيابة عن مستخدم",
"LabelApiKeyUserDescription": "مفتاح API سيمتلك نفس صلاحيات المستخدم الذي ينوب عنه ، سيظهر بالسجلات وكأن المستخدم قام بالطلب.",
"LabelApiToken": "رمز API", "LabelApiToken": "رمز API",
"LabelAppend": "إلحاق", "LabelAppend": "إلحاق",
"LabelAudioBitrate": "معدل بت الصوت (على سبيل المثال 128 كيلو بايت)", "LabelAudioBitrate": "معدل بت الصوت (على سبيل المثال 128 كيلو بايت)",
@@ -285,6 +295,7 @@
"LabelContinueListening": "استمرار الاستماع", "LabelContinueListening": "استمرار الاستماع",
"LabelContinueReading": "استمرار القراءة", "LabelContinueReading": "استمرار القراءة",
"LabelContinueSeries": "استمرار المسلسلات", "LabelContinueSeries": "استمرار المسلسلات",
"LabelCorsAllowed": "CORS Origins مسموح",
"LabelCover": "الغلاف", "LabelCover": "الغلاف",
"LabelCoverImageURL": "رابط صورة الغلاف", "LabelCoverImageURL": "رابط صورة الغلاف",
"LabelCoverProvider": "مزود الغلاف", "LabelCoverProvider": "مزود الغلاف",
@@ -347,7 +358,7 @@
"LabelExample": "مثال", "LabelExample": "مثال",
"LabelExpandSeries": "توسيع السلاسل", "LabelExpandSeries": "توسيع السلاسل",
"LabelExpandSubSeries": "توسيع السلاسل الفرعية", "LabelExpandSubSeries": "توسيع السلاسل الفرعية",
"LabelExplicit": "صريح", "LabelExplicit": "محتوى صريح",
"LabelExplicitChecked": "صريح (محدد)", "LabelExplicitChecked": "صريح (محدد)",
"LabelExplicitUnchecked": "غير صريح (غير محدد)", "LabelExplicitUnchecked": "غير صريح (غير محدد)",
"LabelExportOPML": "تصدير OPML", "LabelExportOPML": "تصدير OPML",
@@ -366,7 +377,7 @@
"LabelFolders": "مجلدات", "LabelFolders": "مجلدات",
"LabelFontBold": "عريض", "LabelFontBold": "عريض",
"LabelFontBoldness": "تعريض الخط", "LabelFontBoldness": "تعريض الخط",
"LabelFontFamily": "عائلة الخط", "LabelFontFamily": "عائلة الخطوط",
"LabelFontItalic": "مائل", "LabelFontItalic": "مائل",
"LabelFontScale": "نطاق الخط", "LabelFontScale": "نطاق الخط",
"LabelFontStrikethrough": "يتوسطه خط", "LabelFontStrikethrough": "يتوسطه خط",
@@ -418,6 +429,9 @@
"LabelLibraryFilterSublistEmpty": "لا يوجد {0}", "LabelLibraryFilterSublistEmpty": "لا يوجد {0}",
"LabelLibraryItem": "عنصر المكتبة", "LabelLibraryItem": "عنصر المكتبة",
"LabelLibraryName": "اسم المكتبة", "LabelLibraryName": "اسم المكتبة",
"LabelLibrarySortByProgress": "المرحلة: الأحدث",
"LabelLibrarySortByProgressFinished": "المرحلة: تم الانتهاء",
"LabelLibrarySortByProgressStarted": "المرحلة: تم البدء",
"LabelLimit": "حد", "LabelLimit": "حد",
"LabelLineSpacing": "تباعد الأسطر", "LabelLineSpacing": "تباعد الأسطر",
"LabelListenAgain": "الاستماع مجدداً", "LabelListenAgain": "الاستماع مجدداً",
@@ -562,7 +576,7 @@
"LabelSettingsBookshelfViewHelp": "تصميم يحاكي الواقع مع رفوف خشبية", "LabelSettingsBookshelfViewHelp": "تصميم يحاكي الواقع مع رفوف خشبية",
"LabelSettingsChromecastSupport": "دعم Chromecast", "LabelSettingsChromecastSupport": "دعم Chromecast",
"LabelSettingsDateFormat": "تنسيق التاريخ", "LabelSettingsDateFormat": "تنسيق التاريخ",
"LabelSettingsEnableWatcher": "فحص المكتبات تلقائيًا بحثًا عن تغييرات", "LabelSettingsEnableWatcher": "مراقبة المكتبات تلقائياً بحثاً عن تغييرات",
"LabelSettingsEnableWatcherForLibrary": "فحص المكتبة تلقائيًا بحثًا عن تغييرات", "LabelSettingsEnableWatcherForLibrary": "فحص المكتبة تلقائيًا بحثًا عن تغييرات",
"LabelSettingsEnableWatcherHelp": "يمكّن الإضافة/التحديث التلقائي للعناصر عند اكتشاف تغييرات في الملفات. *يتطلب إعادة تشغيل الخادم", "LabelSettingsEnableWatcherHelp": "يمكّن الإضافة/التحديث التلقائي للعناصر عند اكتشاف تغييرات في الملفات. *يتطلب إعادة تشغيل الخادم",
"LabelSettingsEpubsAllowScriptedContent": "السماح بالمحتوى النصي في ملفات epub", "LabelSettingsEpubsAllowScriptedContent": "السماح بالمحتوى النصي في ملفات epub",
@@ -853,7 +867,7 @@
"MessageResetChaptersConfirm": "هل أنت متأكد أنك تريد إعادة تعيين الفصول والتراجع عن التغييرات التي أجريتها؟", "MessageResetChaptersConfirm": "هل أنت متأكد أنك تريد إعادة تعيين الفصول والتراجع عن التغييرات التي أجريتها؟",
"MessageRestoreBackupConfirm": "هل أنت متأكد أنك تريد استعادة النسخ الاحتياطي الذي تم إنشاؤه في", "MessageRestoreBackupConfirm": "هل أنت متأكد أنك تريد استعادة النسخ الاحتياطي الذي تم إنشاؤه في",
"MessageRestoreBackupWarning": "ستؤدي استعادة النسخ الاحتياطي إلى الكتابة فوق قاعدة البيانات بأكملها الموجودة في /config وصور الأغلفة في /metadata/items و /metadata/authors.<br /><br /> لا تعدل النسخ الاحتياطية أي ملفات في مجلدات مكتبتك. إذا قمت بتمكين إعدادات الخادم لتخزين صور الأغلفة والبيانات الوصفية في مجلدات مكتبتك، فلن يتم نسخها احتياطيًا أو الكتابة فوقها.<br /><br /> سيتم تحديث جميع العملاء الذين يستخدمون الخادم الخاص بك تلقائيًا.", "MessageRestoreBackupWarning": "ستؤدي استعادة النسخ الاحتياطي إلى الكتابة فوق قاعدة البيانات بأكملها الموجودة في /config وصور الأغلفة في /metadata/items و /metadata/authors.<br /><br /> لا تعدل النسخ الاحتياطية أي ملفات في مجلدات مكتبتك. إذا قمت بتمكين إعدادات الخادم لتخزين صور الأغلفة والبيانات الوصفية في مجلدات مكتبتك، فلن يتم نسخها احتياطيًا أو الكتابة فوقها.<br /><br /> سيتم تحديث جميع العملاء الذين يستخدمون الخادم الخاص بك تلقائيًا.",
"MessageScheduleLibraryScanNote": "بالنسبة لمعظم المستخدمين، يوصى بترك هذه الميزة معطلة وإبقاء إعداد مراقب المجلدات ممكّنًا. سيكتشف مراقب المجلدات تلقائيًا التغييرات في مجلدات مكتبتك. لا يعمل مراقب المجلدات مع كل نظام ملفات (مثل NFS)، لذا يمكن استخدام عمليات فحص المكتبة المجدولة بدلاً من ذلك.", "MessageScheduleLibraryScanNote": "لمعظم المستخدمين، موصى بترك هذه الميزة معطلة وإبقاء ممكّنة الأعداد، ”قم بمراقبة المكتبة تلقائاً للتغييرات“. سوف يقم بالكشف التلقائي عن تغييرات في مجلدات مكتبتك. لو لم يعمل الإعداد، \"قم بمراقبة المكتبة تلقائاً للتغييرات،“مع نظمة ملفاتك المستخدمة (مثل NFS على سبيل المثال)، فأمكِن هذه الميزة.",
"MessageScheduleRunEveryWeekdayAtTime": "تشغيل كل {0} في الساعة {1}", "MessageScheduleRunEveryWeekdayAtTime": "تشغيل كل {0} في الساعة {1}",
"MessageSearchResultsFor": "نتائج البحث عن", "MessageSearchResultsFor": "نتائج البحث عن",
"MessageSelected": "تم تحديد {0}", "MessageSelected": "تم تحديد {0}",
+631 -225
View File
File diff suppressed because it is too large Load Diff
+158 -5
View File
@@ -378,6 +378,7 @@
"LabelFilterByUser": "Филтриране по Потребител", "LabelFilterByUser": "Филтриране по Потребител",
"LabelFindEpisodes": "Намери Епизоди", "LabelFindEpisodes": "Намери Епизоди",
"LabelFinished": "Дата на приключване", "LabelFinished": "Дата на приключване",
"LabelFinishedDate": "Приключено на {0}",
"LabelFolder": "Папка", "LabelFolder": "Папка",
"LabelFolders": "Папки", "LabelFolders": "Папки",
"LabelFontBold": "Получерно", "LabelFontBold": "Получерно",
@@ -435,7 +436,9 @@
"LabelLibraryFilterSublistEmpty": "Не {0}", "LabelLibraryFilterSublistEmpty": "Не {0}",
"LabelLibraryItem": "Елемент на Библиотека", "LabelLibraryItem": "Елемент на Библиотека",
"LabelLibraryName": "Име на Библиотека", "LabelLibraryName": "Име на Библиотека",
"LabelLibrarySortByProgress": "Прогресът е обновен", "LabelLibrarySortByProgress": "Прогрес: Последно обновление",
"LabelLibrarySortByProgressFinished": "Прогрес: Приключено",
"LabelLibrarySortByProgressStarted": "Прогрес: Започнато",
"LabelLimit": "Лимит", "LabelLimit": "Лимит",
"LabelLineSpacing": "Междуредие", "LabelLineSpacing": "Междуредие",
"LabelListenAgain": "Слушай отново", "LabelListenAgain": "Слушай отново",
@@ -585,8 +588,8 @@
"LabelSettingsBookshelfViewHelp": "Скеуморфен дизайн с дървени рафтове", "LabelSettingsBookshelfViewHelp": "Скеуморфен дизайн с дървени рафтове",
"LabelSettingsChromecastSupport": "Chromecast поддръжка", "LabelSettingsChromecastSupport": "Chromecast поддръжка",
"LabelSettingsDateFormat": "Формат на Дата", "LabelSettingsDateFormat": "Формат на Дата",
"LabelSettingsEnableWatcher": "Автоматично сканиране на библиотеките за промени", "LabelSettingsEnableWatcher": "Автоматично преглеждане на библиотеките за промени",
"LabelSettingsEnableWatcherForLibrary": "Автоматично сканиране на библиотеката за промени", "LabelSettingsEnableWatcherForLibrary": "Автоматично преглеждане на библиотеката за промени",
"LabelSettingsEnableWatcherHelp": "Включва автоматичното добавяне/обновяване на елементи, когато се открият промени във файловете. *Изисква рестарт на сървъра", "LabelSettingsEnableWatcherHelp": "Включва автоматичното добавяне/обновяване на елементи, когато се открият промени във файловете. *Изисква рестарт на сървъра",
"LabelSettingsEpubsAllowScriptedContent": "Позволи скриптово съдържание в epub-и", "LabelSettingsEpubsAllowScriptedContent": "Позволи скриптово съдържание в epub-и",
"LabelSettingsEpubsAllowScriptedContentHelp": "Позволи epub файловете да изпълняват скриптове. Препоръчително е да бъде изключено освен ако не се доверявате на източника на epub файловете.", "LabelSettingsEpubsAllowScriptedContentHelp": "Позволи epub файловете да изпълняват скриптове. Препоръчително е да бъде изключено освен ако не се доверявате на източника на epub файловете.",
@@ -635,6 +638,7 @@
"LabelStartTime": "Начално Време", "LabelStartTime": "Начално Време",
"LabelStarted": "Стартирано", "LabelStarted": "Стартирано",
"LabelStartedAt": "Стартирано на", "LabelStartedAt": "Стартирано на",
"LabelStartedDate": "Започнато {0}",
"LabelStatsAudioTracks": "Аудио Канали", "LabelStatsAudioTracks": "Аудио Канали",
"LabelStatsAuthors": "Автори", "LabelStatsAuthors": "Автори",
"LabelStatsBestDay": "Най-добър ден", "LabelStatsBestDay": "Най-добър ден",
@@ -748,7 +752,7 @@
"MessageBookshelfNoRSSFeeds": "Няма отворени RSS feed-ове", "MessageBookshelfNoRSSFeeds": "Няма отворени RSS feed-ове",
"MessageBookshelfNoResultsForFilter": "Няма резултат за филтер \"{0}: {1}\"", "MessageBookshelfNoResultsForFilter": "Няма резултат за филтер \"{0}: {1}\"",
"MessageBookshelfNoResultsForQuery": "Няма резултати от заявката", "MessageBookshelfNoResultsForQuery": "Няма резултати от заявката",
"MessageBookshelfNoSeries": "Нямаш сеЗЙ", "MessageBookshelfNoSeries": "Нямате поредица",
"MessageBulkChapterPattern": "Колко глави искате да добавите, използвайки тази схема за номериране?", "MessageBulkChapterPattern": "Колко глави искате да добавите, използвайки тази схема за номериране?",
"MessageChapterEndIsAfter": "Краят на главата е след края на вашата аудиокнига", "MessageChapterEndIsAfter": "Краят на главата е след края на вашата аудиокнига",
"MessageChapterErrorFirstNotZero": "Първата глава трябва да започва от 0", "MessageChapterErrorFirstNotZero": "Първата глава трябва да започва от 0",
@@ -780,6 +784,7 @@
"MessageConfirmPurgeCache": "Изчистването на кеша ще изтрие цялата директория в <code>/metadata/cache</code>. <br /><br />Сигурни ли сте, че искате да премахнете директорията на кеша?", "MessageConfirmPurgeCache": "Изчистването на кеша ще изтрие цялата директория в <code>/metadata/cache</code>. <br /><br />Сигурни ли сте, че искате да премахнете директорията на кеша?",
"MessageConfirmPurgeItemsCache": "Изчистването на кеша на елементите ще изтрие цялата директория в <code>/metadata/cache/items</code>. <br />Сигурни ли сте?", "MessageConfirmPurgeItemsCache": "Изчистването на кеша на елементите ще изтрие цялата директория в <code>/metadata/cache/items</code>. <br />Сигурни ли сте?",
"MessageConfirmQuickEmbed": "Внимание! Бързото вграждане няма да архивира вашите аудио файлове. Уверете се, че имате резервно копие на вашите аудио файлове. <br><br>Искате ли да продължите?", "MessageConfirmQuickEmbed": "Внимание! Бързото вграждане няма да архивира вашите аудио файлове. Уверете се, че имате резервно копие на вашите аудио файлове. <br><br>Искате ли да продължите?",
"MessageConfirmQuickMatchEpisodes": "Бързото сравняване на епизоди ще презапише детайлите, ако се намери съвпадение. Само не съвпаднали епизоди ще бъдат обновени. Сигурни ли сте?",
"MessageConfirmReScanLibraryItems": "Сигурни ли сте, че искате да сканирате отново {0} елемента?", "MessageConfirmReScanLibraryItems": "Сигурни ли сте, че искате да сканирате отново {0} елемента?",
"MessageConfirmRemoveAllChapters": "Сигурни ли сте, че искате да премахнете всички глави?", "MessageConfirmRemoveAllChapters": "Сигурни ли сте, че искате да премахнете всички глави?",
"MessageConfirmRemoveAuthor": "Сигурни ли сте, че искате да премахнете автор \"{0}\"?", "MessageConfirmRemoveAuthor": "Сигурни ли сте, че искате да премахнете автор \"{0}\"?",
@@ -788,6 +793,7 @@
"MessageConfirmRemoveEpisodeNote": "Забележка: Това няма да доведе до изтриване на аудио файла, освен ако не активирате опцията \"Твърдо изтриване на файла\"", "MessageConfirmRemoveEpisodeNote": "Забележка: Това няма да доведе до изтриване на аудио файла, освен ако не активирате опцията \"Твърдо изтриване на файла\"",
"MessageConfirmRemoveEpisodes": "Сигурни ли сте, че искате да премахнете {0} епизода?", "MessageConfirmRemoveEpisodes": "Сигурни ли сте, че искате да премахнете {0} епизода?",
"MessageConfirmRemoveListeningSessions": "Сигурни ли сте, че искате да премахнете {0} слушателски сесии?", "MessageConfirmRemoveListeningSessions": "Сигурни ли сте, че искате да премахнете {0} слушателски сесии?",
"MessageConfirmRemoveMetadataFiles": "Сигурни ли сте, че искате да премахнете всичките метаданни. {0} файлове във папките на Вашата библиотека?",
"MessageConfirmRemoveNarrator": "Сигурни ли сте, че искате да премахнете разказвач \"{0}\"?", "MessageConfirmRemoveNarrator": "Сигурни ли сте, че искате да премахнете разказвач \"{0}\"?",
"MessageConfirmRemovePlaylist": "Сигурни ли сте, че искате да премахнете плейлиста \"{0}\"?", "MessageConfirmRemovePlaylist": "Сигурни ли сте, че искате да премахнете плейлиста \"{0}\"?",
"MessageConfirmRenameGenre": "Сигурни ли сте, че искате да преименувате жанра \"{0}\" на \"{1}\" за всички елементи?", "MessageConfirmRenameGenre": "Сигурни ли сте, че искате да преименувате жанра \"{0}\" на \"{1}\" за всички елементи?",
@@ -862,6 +868,7 @@
"MessageNoUserPlaylists": "Нямате създадени плейлисти", "MessageNoUserPlaylists": "Нямате създадени плейлисти",
"MessageNoUserPlaylistsHelp": "Плейлистите за частни. Само създалият ги потребител ще може да ги вижда.", "MessageNoUserPlaylistsHelp": "Плейлистите за частни. Само създалият ги потребител ще може да ги вижда.",
"MessageNotYetImplemented": "Още не е изпълнено", "MessageNotYetImplemented": "Още не е изпълнено",
"MessageOpmlPreviewNote": "Забележка: Това е преглед на анализирания OPML файл. Действителното заглавие на подкаста ще бъде взето от RSS фийда.",
"MessageOr": "или", "MessageOr": "или",
"MessagePauseChapter": "Пауза на глава", "MessagePauseChapter": "Пауза на глава",
"MessagePlayChapter": "Пусни налчалото на глава", "MessagePlayChapter": "Пусни налчалото на глава",
@@ -871,6 +878,7 @@
"MessagePodcastSearchField": "Въведи какво да търся или RSS емисия адрес", "MessagePodcastSearchField": "Въведи какво да търся или RSS емисия адрес",
"MessageQuickEmbedInProgress": "Бързото вграждане е в процес на изпълнение", "MessageQuickEmbedInProgress": "Бързото вграждане е в процес на изпълнение",
"MessageQuickEmbedQueue": "Поставено в опашката за бързо вграждане ({0} в опашката)", "MessageQuickEmbedQueue": "Поставено в опашката за бързо вграждане ({0} в опашката)",
"MessageQuickMatchAllEpisodes": "Бързо Сравняване на Всички Епизоди",
"MessageQuickMatchDescription": "Попълни празните детайли и корици с първия резултат от '{0}'. Не презаписва детайлите, освен ако не е активирана настройката 'Предпочети съвпадащи метаданни' на сървъра.", "MessageQuickMatchDescription": "Попълни празните детайли и корици с първия резултат от '{0}'. Не презаписва детайлите, освен ако не е активирана настройката 'Предпочети съвпадащи метаданни' на сървъра.",
"MessageRemoveChapter": "Премахни глава", "MessageRemoveChapter": "Премахни глава",
"MessageRemoveEpisodes": "Премахни {0} епизод(и)", "MessageRemoveEpisodes": "Премахни {0} епизод(и)",
@@ -880,16 +888,23 @@
"MessageResetChaptersConfirm": "Сигурни ли сте, че искате да нулирате главите и да отмените промените, които сте направили?", "MessageResetChaptersConfirm": "Сигурни ли сте, че искате да нулирате главите и да отмените промените, които сте направили?",
"MessageRestoreBackupConfirm": "Сигурни ли сте, че искате да възстановите архива създаден на", "MessageRestoreBackupConfirm": "Сигурни ли сте, че искате да възстановите архива създаден на",
"MessageRestoreBackupWarning": "Възстановяването на архив ще презапише цялата база данни, намираща се в /config и кориците в /metadata/items & /metadata/authors.<br /><br />Архивите не променят файловете в папките на вашата библиотека. Ако сте активирали настройките на сървъра за съхранение на корици и метаданни в папките на вашата библиотека, те няма да бъдат архивирани или презаписани.<br /><br />Всички клиенти, използващи вашия сървър, ще бъдат автоматично обновени.", "MessageRestoreBackupWarning": "Възстановяването на архив ще презапише цялата база данни, намираща се в /config и кориците в /metadata/items & /metadata/authors.<br /><br />Архивите не променят файловете в папките на вашата библиотека. Ако сте активирали настройките на сървъра за съхранение на корици и метаданни в папките на вашата библиотека, те няма да бъдат архивирани или презаписани.<br /><br />Всички клиенти, използващи вашия сървър, ще бъдат автоматично обновени.",
"MessageScheduleLibraryScanNote": "За повече потребители се препоръчва да оставят този фийчър изключен и да оставят настройката \"Автоматично преглеждане за промени в библиотеката\" включена - тя автоматично ще засече промени в папките на вашата библиотека. Включете тази настройка ако \"Автоматично преглеждане за промени в библиотеката\" не рабови на вашата файлова система (например NFS).",
"MessageScheduleRunEveryWeekdayAtTime": "Изпълни всеки {0} в {1}", "MessageScheduleRunEveryWeekdayAtTime": "Изпълни всеки {0} в {1}",
"MessageSearchResultsFor": "Резултати от търсенето за", "MessageSearchResultsFor": "Резултати от търсенето за",
"MessageSelected": "{0} избрани", "MessageSelected": "{0} избрани",
"MessageSeriesSequenceCannotContainSpaces": "Подредбата в серия не може да съдържа шпации",
"MessageServerCouldNotBeReached": "Сървърът не може да бъде достигнат", "MessageServerCouldNotBeReached": "Сървърът не може да бъде достигнат",
"MessageSetChaptersFromTracksDescription": "Задайте глави, като използвате всеки аудио файл като глава и заглавие на главата като име на аудио файла", "MessageSetChaptersFromTracksDescription": "Задайте глави, като използвате всеки аудио файл като глава и заглавие на главата като име на аудио файла",
"MessageShareExpirationWillBe": "Изтичането ще бъде на <strong>{0}</strong>",
"MessageShareExpiresIn": "Изтича след {0}", "MessageShareExpiresIn": "Изтича след {0}",
"MessageShareURLWillBe": "URL за споделяне ще бъде <strong>{0}</strong>",
"MessageStartPlaybackAtTime": "Започни възпроизвеждане на \"{0}\" в {1}?", "MessageStartPlaybackAtTime": "Започни възпроизвеждане на \"{0}\" в {1}?",
"MessageTaskAudioFileNotWritable": "На Аудио файл \"{0}\" не може да се записва",
"MessageTaskCanceledByUser": "Задачата е отказана от потребител",
"MessageTaskDownloadingEpisodeDescription": "Изтегляне на епизод \"{0}\"", "MessageTaskDownloadingEpisodeDescription": "Изтегляне на епизод \"{0}\"",
"MessageTaskEmbeddingMetadata": "Вграждане на метаданни", "MessageTaskEmbeddingMetadata": "Вграждане на метаданни",
"MessageTaskEmbeddingMetadataDescription": "Вграждане на метаданни в аудиокнига \"{0}\"", "MessageTaskEmbeddingMetadataDescription": "Вграждане на метаданни в аудиокнига \"{0}\"",
"MessageTaskEncodingM4b": "Кодиране M4B",
"MessageTaskEncodingM4bDescription": "Кодиране на аудиокнига \"{0}\" в единичен m4b файл", "MessageTaskEncodingM4bDescription": "Кодиране на аудиокнига \"{0}\" в единичен m4b файл",
"MessageTaskFailed": "Неуспешно", "MessageTaskFailed": "Неуспешно",
"MessageTaskFailedToBackupAudioFile": "Неуспешно създаване на разервно копие на аудио файл \"{0}\"", "MessageTaskFailedToBackupAudioFile": "Неуспешно създаване на разервно копие на аудио файл \"{0}\"",
@@ -902,7 +917,9 @@
"MessageTaskNoFilesToScan": "Няма файлове за сканиране", "MessageTaskNoFilesToScan": "Няма файлове за сканиране",
"MessageTaskOpmlImport": "OPML импортиране", "MessageTaskOpmlImport": "OPML импортиране",
"MessageTaskOpmlImportDescription": "Създаване на подкасти от {0} RSS хранилки", "MessageTaskOpmlImportDescription": "Създаване на подкасти от {0} RSS хранилки",
"MessageTaskOpmlImportFeed": "OPML импортиран фийд",
"MessageTaskOpmlImportFeedDescription": "Импортиране на RSS хранилка \"{0}\"", "MessageTaskOpmlImportFeedDescription": "Импортиране на RSS хранилка \"{0}\"",
"MessageTaskOpmlImportFeedFailed": "Неуспешно взимане на подкаст фийд",
"MessageTaskOpmlImportFeedPodcastDescription": "Създаване на подкаст \"{0}\"", "MessageTaskOpmlImportFeedPodcastDescription": "Създаване на подкаст \"{0}\"",
"MessageTaskOpmlImportFeedPodcastExists": "На този път вече съществува подкаст", "MessageTaskOpmlImportFeedPodcastExists": "На този път вече съществува подкаст",
"MessageTaskOpmlImportFeedPodcastFailed": "Неуспешно създаване на подкаст", "MessageTaskOpmlImportFeedPodcastFailed": "Неуспешно създаване на подкаст",
@@ -938,6 +955,9 @@
"NotificationOnBackupFailedDescription": "Изпълнява се при неуспешено създаване на резервно копие", "NotificationOnBackupFailedDescription": "Изпълнява се при неуспешено създаване на резервно копие",
"NotificationOnEpisodeDownloadedDescription": "Изпълнява се при автоматично изтегляне на подкаст епизод", "NotificationOnEpisodeDownloadedDescription": "Изпълнява се при автоматично изтегляне на подкаст епизод",
"NotificationOnRSSFeedDisabledDescription": "Изпълнява се, когато автоматичното изтегляне на епизодите е деактивирано, поради твърде много неуспешни опити", "NotificationOnRSSFeedDisabledDescription": "Изпълнява се, когато автоматичното изтегляне на епизодите е деактивирано, поради твърде много неуспешни опити",
"NotificationOnRSSFeedFailedDescription": "Пуска се когато заявката за RSS фийд е неуспешна за автоматично сваляне на епизод",
"NotificationOnTestDescription": "Event за тестване на системата за нотификации",
"PlaceholderBulkChapterInput": "Въведете име на глава или използвайте номериране (прим. 'Епизод 1', 'Глава 10', '1.')",
"PlaceholderNewCollection": "Ново име на колекцията", "PlaceholderNewCollection": "Ново име на колекцията",
"PlaceholderNewFolderPath": "Нов път на папката", "PlaceholderNewFolderPath": "Нов път на папката",
"PlaceholderNewPlaylist": "Ново име на плейлиста", "PlaceholderNewPlaylist": "Ново име на плейлиста",
@@ -945,39 +965,103 @@
"PlaceholderSearchEpisode": "Търсене на Епизоди...", "PlaceholderSearchEpisode": "Търсене на Епизоди...",
"StatsAuthorsAdded": "добаврени автори", "StatsAuthorsAdded": "добаврени автори",
"StatsBooksAdded": "добавени книги", "StatsBooksAdded": "добавени книги",
"StatsBooksAdditional": "Някой от вкючените добавки…",
"StatsBooksFinished": "завършени книги", "StatsBooksFinished": "завършени книги",
"StatsBooksFinishedThisYear": "Някой от книгите приключени тази година…",
"StatsBooksListenedTo": "слушани книги",
"StatsCollectionGrewTo": "Твоята книжна колекция израсна до…",
"StatsSessions": "сесии",
"StatsSpentListening": "прекарано в слушане",
"StatsTopAuthor": "ТОП АВТОР",
"StatsTopAuthors": "ТОП АВТОРИ",
"StatsTopGenre": "ТОП ЖАНР",
"StatsTopGenres": "ТОП ЖАНРА",
"StatsTopMonth": "ТОП МЕСЕЦ",
"StatsTopNarrator": "ТОП РАЗКАЗВАЧ",
"StatsTopNarrators": "ТОП РАЗКАЗВАЧИ",
"StatsTotalDuration": "С пълно времетраене…",
"StatsYearInReview": "ГОДИНАТА В ПРЕГЛЕД",
"ToastAccountUpdateSuccess": "Успешно обновяване на акаунта", "ToastAccountUpdateSuccess": "Успешно обновяване на акаунта",
"ToastAppriseUrlRequired": "Трябва да въведете Apprise URL",
"ToastAsinRequired": "ASIN-а е задължителен",
"ToastAuthorImageRemoveSuccess": "Авторската снимка е премахната", "ToastAuthorImageRemoveSuccess": "Авторската снимка е премахната",
"ToastAuthorNotFound": "Автор \"{0}\" не е намерен",
"ToastAuthorRemoveSuccess": "Арторът е премахнат",
"ToastAuthorSearchNotFound": "Авторът не е намерен",
"ToastAuthorUpdateMerged": "Обновяване на автора сливано", "ToastAuthorUpdateMerged": "Обновяване на автора сливано",
"ToastAuthorUpdateSuccess": "Автора обновен", "ToastAuthorUpdateSuccess": "Автора обновен",
"ToastAuthorUpdateSuccessNoImageFound": "Автор обновен (не е намерена снимка)", "ToastAuthorUpdateSuccessNoImageFound": "Автор обновен (не е намерена снимка)",
"ToastBackupAppliedSuccess": "Архивът е приложен",
"ToastBackupCreateFailed": "Неуспешно създаване на архив", "ToastBackupCreateFailed": "Неуспешно създаване на архив",
"ToastBackupCreateSuccess": "Архивът е създаден", "ToastBackupCreateSuccess": "Архивът е създаден",
"ToastBackupDeleteFailed": "Неуспешно изтриване на архив", "ToastBackupDeleteFailed": "Неуспешно изтриване на архив",
"ToastBackupDeleteSuccess": "Архивът е изтрит", "ToastBackupDeleteSuccess": "Архивът е изтрит",
"ToastBackupInvalidMaxKeep": "Невалиден брой за архиви за запазване",
"ToastBackupInvalidMaxSize": "Невалиден максимален рамер на архив",
"ToastBackupRestoreFailed": "Неуспешно възстановяване на архив", "ToastBackupRestoreFailed": "Неуспешно възстановяване на архив",
"ToastBackupUploadFailed": "Неуспешно качване на архив", "ToastBackupUploadFailed": "Неуспешно качване на архив",
"ToastBackupUploadSuccess": "Архивът е качен", "ToastBackupUploadSuccess": "Архивът е качен",
"ToastBatchApplyDetailsToItemsSuccess": "Детайли приложени на предмети",
"ToastBatchDeleteFailed": "Груповото изтриване се провали",
"ToastBatchDeleteSuccess": "Успешно групово изтриване",
"ToastBatchQuickMatchFailed": "Груповото Бързо Съвпадение се провали!",
"ToastBatchQuickMatchStarted": "Груповото Бързо Съвпадение на {0} книги започна!",
"ToastBatchUpdateFailed": "Неуспешно групово актуализиране", "ToastBatchUpdateFailed": "Неуспешно групово актуализиране",
"ToastBatchUpdateSuccess": "Успешно групово актуализиране", "ToastBatchUpdateSuccess": "Успешно групово актуализиране",
"ToastBookmarkCreateFailed": "Неуспешно създаване на отметка", "ToastBookmarkCreateFailed": "Неуспешно създаване на отметка",
"ToastBookmarkCreateSuccess": "Отметката е създадена", "ToastBookmarkCreateSuccess": "Отметката е създадена",
"ToastBookmarkRemoveSuccess": "Отметката е премахната", "ToastBookmarkRemoveSuccess": "Отметката е премахната",
"ToastBulkChapterInvalidCount": "Въведете число между 1 и 150",
"ToastCachePurgeFailed": "Неуспешно изчистване на кеша", "ToastCachePurgeFailed": "Неуспешно изчистване на кеша",
"ToastCachePurgeSuccess": "Успешно изчистване на кеша", "ToastCachePurgeSuccess": "Успешно изчистване на кеша",
"ToastChapterLocked": "Главата е заключена.",
"ToastChapterStartTimeAdjusted": "Начално време на главате е настоено с {0} секунди",
"ToastChaptersAllLocked": "Всички глави са заключени. Оключете някой глави за да преместите техните времена.",
"ToastChaptersHaveErrors": "Главите имат грешки", "ToastChaptersHaveErrors": "Главите имат грешки",
"ToastChaptersInvalidShiftAmountLast": "Невалидно време за преместване. Началният час на последната глава ще превиши общата продължителност на аудиокнигата.",
"ToastChaptersInvalidShiftAmountStart": "Невалидно време за преместване. Първата глава ще има нулева или отрицателна дължина и ще бъде презаписана от втората глава. Увеличете началното време на втората глава.",
"ToastChaptersMustHaveTitles": "Главите трябва да имат заглавия", "ToastChaptersMustHaveTitles": "Главите трябва да имат заглавия",
"ToastChaptersRemoved": "Главите са премахнати",
"ToastChaptersUpdated": "Главите са актуализирани",
"ToastCollectionItemsAddFailed": "Неуспешно добавяне на елемент(и) към колекцията",
"ToastCollectionRemoveSuccess": "Колекцията е премахната", "ToastCollectionRemoveSuccess": "Колекцията е премахната",
"ToastCollectionUpdateSuccess": "Колекцията е обновена", "ToastCollectionUpdateSuccess": "Колекцията е обновена",
"ToastConnectionNotAvailable": "Няма връзка. Моля, опитайте отново по-късно",
"ToastCoverSearchFailed": "Търсенето на корица е неуспешно",
"ToastCoverUpdateFailed": "Обновяването на корицата е неуспешно",
"ToastDateTimeInvalidOrIncomplete": "Датата и часът са невалидни или непълни",
"ToastDeleteFileFailed": "Неуспешно изтриване на файла", "ToastDeleteFileFailed": "Неуспешно изтриване на файла",
"ToastDeleteFileSuccess": "Успешно изтриване на файла", "ToastDeleteFileSuccess": "Успешно изтриване на файла",
"ToastDeviceAddFailed": "Неуспешно добавяне на устройство",
"ToastDeviceNameAlreadyExists": "Вече съществува четец с това име",
"ToastDeviceTestEmailFailed": "Неуспешно изпращане на тестов имейл",
"ToastDeviceTestEmailSuccess": "Тестовият имейл е изпратен",
"ToastEmailSettingsUpdateSuccess": "Имейл настройките са актуализирани",
"ToastEncodeCancelFailed": "Неуспешно отменяне на кодирането",
"ToastEncodeCancelSucces": "Кодирането е отменено",
"ToastEpisodeDownloadQueueClearFailed": "Неуспешно изчистване на опашката",
"ToastEpisodeDownloadQueueClearSuccess": "Опашката за изтегляне на епизоди е изчистена",
"ToastEpisodeUpdateSuccess": "{0} епизода са актуализирани",
"ToastErrorCannotShare": "Не може да се споделя директно от това устройство",
"ToastFailedToCreate": "Неуспешно създаване",
"ToastFailedToDelete": "Неуспешно изтриване",
"ToastFailedToLoadData": "Неуспешно зареждане на данни", "ToastFailedToLoadData": "Неуспешно зареждане на данни",
"ToastFailedToMatch": "Неуспешно съвпадение",
"ToastFailedToShare": "Неуспешно споделяне",
"ToastFailedToUpdate": "Неуспешно актуализиране",
"ToastInvalidImageUrl": "Невалиден URL адрес на изображение",
"ToastInvalidMaxEpisodesToDownload": "Невалиден максимален брой епизоди за изтегляне",
"ToastInvalidUrl": "Невалиден URL адрес",
"ToastInvalidUrls": "Един или повече URL адреси са невалидни",
"ToastItemCoverUpdateSuccess": "Корицата на елемента е обновена", "ToastItemCoverUpdateSuccess": "Корицата на елемента е обновена",
"ToastItemDeletedFailed": "Неуспешно изтриване на елемента",
"ToastItemDeletedSuccess": "Елементът е изтрит",
"ToastItemDetailsUpdateSuccess": "Детайлите на елемента са обновени", "ToastItemDetailsUpdateSuccess": "Детайлите на елемента са обновени",
"ToastItemMarkedAsFinishedFailed": "Неуспешно маркиране като Завършено", "ToastItemMarkedAsFinishedFailed": "Неуспешно маркиране като Завършено",
"ToastItemMarkedAsFinishedSuccess": "Елементът е маркиран като завършен", "ToastItemMarkedAsFinishedSuccess": "Елементът е маркиран като завършен",
"ToastItemMarkedAsNotFinishedFailed": "Неуспешно маркиране като Незавършено", "ToastItemMarkedAsNotFinishedFailed": "Неуспешно маркиране като Незавършено",
"ToastItemMarkedAsNotFinishedSuccess": "Елементът е маркиран като незавършен", "ToastItemMarkedAsNotFinishedSuccess": "Елементът е маркиран като незавършен",
"ToastItemUpdateSuccess": "Елементът е актуализиран",
"ToastLibraryCreateFailed": "Неуспешно създаване на библиотека", "ToastLibraryCreateFailed": "Неуспешно създаване на библиотека",
"ToastLibraryCreateSuccess": "Библиотеката \"{0}\" е създадена", "ToastLibraryCreateSuccess": "Библиотеката \"{0}\" е създадена",
"ToastLibraryDeleteFailed": "Неуспешно изтриване на библиотека", "ToastLibraryDeleteFailed": "Неуспешно изтриване на библиотека",
@@ -985,28 +1069,97 @@
"ToastLibraryScanFailedToStart": "Неуспешно стартиране на сканиране", "ToastLibraryScanFailedToStart": "Неуспешно стартиране на сканиране",
"ToastLibraryScanStarted": "Сканирането на библиотеката е стартирано", "ToastLibraryScanStarted": "Сканирането на библиотеката е стартирано",
"ToastLibraryUpdateSuccess": "Библиотеката \"{0}\" е обновена", "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": "Неуспешно създаване на плейлист", "ToastPlaylistCreateFailed": "Неуспешно създаване на плейлист",
"ToastPlaylistCreateSuccess": "Плейлистът е създаден", "ToastPlaylistCreateSuccess": "Плейлистът е създаден",
"ToastPlaylistRemoveSuccess": "Плейлистът е премахнат", "ToastPlaylistRemoveSuccess": "Плейлистът е премахнат",
"ToastPlaylistUpdateSuccess": "Плейлистът е обновен", "ToastPlaylistUpdateSuccess": "Плейлистът е обновен",
"ToastPodcastCreateFailed": "Неуспешно създаване на подкаст", "ToastPodcastCreateFailed": "Неуспешно създаване на подкаст",
"ToastPodcastCreateSuccess": "Подкаст успешно създаден", "ToastPodcastCreateSuccess": "Подкаст успешно създаден",
"ToastPodcastEpisodeUpdated": "Епизодът е актуализиран",
"ToastPodcastGetFeedFailed": "Неуспешно извличане на емисията на подкаста",
"ToastPodcastNoEpisodesInFeed": "Не са намерени епизоди в RSS емисията",
"ToastPodcastNoRssFeed": "Подкастът няма RSS емисия",
"ToastProgressIsNotBeingSynced": "Напредъкът не се синхронизира, рестартирайте възпроизвеждането",
"ToastProviderCreatedFailed": "Неуспешно добавяне на доставчик",
"ToastProviderCreatedSuccess": "Добавен е нов доставчик",
"ToastProviderNameAndUrlRequired": "Изискват се име и URL адрес",
"ToastProviderRemoveSuccess": "Доставчикът е премахнат",
"ToastRSSFeedCloseFailed": "Неуспешно затваряне на RSS емисията", "ToastRSSFeedCloseFailed": "Неуспешно затваряне на RSS емисията",
"ToastRSSFeedCloseSuccess": "RSS емисията е затворена", "ToastRSSFeedCloseSuccess": "RSS емисията е затворена",
"ToastRemoveFailed": "Неуспешно премахване",
"ToastRemoveItemFromCollectionFailed": "Неуспешно премахване на елемент от колекция", "ToastRemoveItemFromCollectionFailed": "Неуспешно премахване на елемент от колекция",
"ToastRemoveItemFromCollectionSuccess": "Елементът е премахнат от колекция", "ToastRemoveItemFromCollectionSuccess": "Елементът е премахнат от колекция",
"ToastRemoveItemsWithIssuesFailed": "Неуспешно премахване на елементите от библиотеката с проблеми",
"ToastRemoveItemsWithIssuesSuccess": "Елементите от библиотеката с проблеми са премахнати",
"ToastRenameFailed": "Неуспешно преименуване",
"ToastRescanFailed": "Повторното сканиране е неуспешно за {0}",
"ToastRescanRemoved": "Повторното сканиране завърши: елементът е премахнат",
"ToastRescanUpToDate": "Повторното сканиране завърши: елементът вече е актуален",
"ToastRescanUpdated": "Повторното сканиране завърши: елементът е актуализиран",
"ToastScanFailed": "Неуспешно сканиране на елемент от библиотеката",
"ToastSelectAtLeastOneUser": "Изберете поне един потребител",
"ToastSendEbookToDeviceFailed": "Неуспешно изпращане на електронна книга до устройство", "ToastSendEbookToDeviceFailed": "Неуспешно изпращане на електронна книга до устройство",
"ToastSendEbookToDeviceSuccess": "Електронната книга е изпратена до устройство \"{0}\"", "ToastSendEbookToDeviceSuccess": "Електронната книга е изпратена до устройство \"{0}\"",
"ToastSeriesSubmitFailedSameName": "Не могат да бъдат добавени два сериала с едно и също име",
"ToastSeriesUpdateFailed": "Неуспешно обновяване на серия", "ToastSeriesUpdateFailed": "Неуспешно обновяване на серия",
"ToastSeriesUpdateSuccess": "Серията е обновена", "ToastSeriesUpdateSuccess": "Серията е обновена",
"ToastServerSettingsUpdateSuccess": "Настройките на сървъра са актуализирани", "ToastServerSettingsUpdateSuccess": "Настройките на сървъра са актуализирани",
"ToastSessionCloseFailed": "Неуспешно затваряне на сесията",
"ToastSessionDeleteFailed": "Неуспешно изтриване на сесия", "ToastSessionDeleteFailed": "Неуспешно изтриване на сесия",
"ToastSessionDeleteSuccess": "Сесията е изтрита", "ToastSessionDeleteSuccess": "Сесията е изтрита",
"ToastSleepTimerDone": "Таймерът за заспиване приключи... zZzzZz",
"ToastSlugMustChange": "Краткият URL (slug) съдържа невалидни символи",
"ToastSlugRequired": "Изисква се кратък URL (slug)",
"ToastSocketConnected": "Свързан сокет", "ToastSocketConnected": "Свързан сокет",
"ToastSocketDisconnected": "Сокетът е прекъснат", "ToastSocketDisconnected": "Сокетът е прекъснат",
"ToastSocketFailedToConnect": "Неуспешно свързване на сокет", "ToastSocketFailedToConnect": "Неуспешно свързване на сокет",
"ToastSortingPrefixesEmptyError": "Трябва да има поне 1 префикс за сортиране", "ToastSortingPrefixesEmptyError": "Трябва да има поне 1 префикс за сортиране",
"ToastSortingPrefixesUpdateSuccess": "Префиксите за сортиране са актуализирани ({0} елемента)", "ToastSortingPrefixesUpdateSuccess": "Префиксите за сортиране са актуализирани ({0} елемента)",
"ToastTitleRequired": "Изисква се заглавие",
"ToastUnknownError": "Неизвестна грешка",
"ToastUnlinkOpenIdFailed": "Неуспешно прекъсване на връзката на потребителя с OpenID",
"ToastUnlinkOpenIdSuccess": "Връзката на потребителя с OpenID е прекъсната",
"ToastUploaderFilepathExistsError": "Файловият път „{0}“ вече съществува на сървъра",
"ToastUploaderItemExistsInSubdirectoryError": "Елементът „{0}“ използва поддиректория на пътя за качване.",
"ToastUserDeleteFailed": "Неуспешно изтриване на потребител", "ToastUserDeleteFailed": "Неуспешно изтриване на потребител",
"ToastUserDeleteSuccess": "Потребителят е изтрит" "ToastUserDeleteSuccess": "Потребителят е изтрит",
"ToastUserPasswordChangeSuccess": "Паролата е променена успешно",
"ToastUserPasswordMismatch": "Паролите не съвпадат",
"ToastUserPasswordMustChange": "Новата парола не може да бъде същата като старата",
"ToastUserRootRequireName": "Трябва да въведете root потребителско име",
"TooltipAddChapters": "Добавяне на глава(и)",
"TooltipAddOneSecond": "Добавяне на 1 секунда",
"TooltipAdjustChapterStart": "Кликнете за коригиране на началния час",
"TooltipLockAllChapters": "Заключване на всички глави",
"TooltipLockChapter": "Заключване на глава (Shift+клик за диапазон)",
"TooltipSubtractOneSecond": "Изваждане на 1 секунда",
"TooltipUnlockAllChapters": "Отключване на всички глави",
"TooltipUnlockChapter": "Отключване на глава (Shift+клик за диапазон)"
} }
+9
View File
@@ -1,5 +1,6 @@
{ {
"ButtonAdd": "যোগ করুন", "ButtonAdd": "যোগ করুন",
"ButtonAddApiKey": "এপিআই কী যোগ করুন",
"ButtonAddChapters": "অধ্যায় যোগ করুন", "ButtonAddChapters": "অধ্যায় যোগ করুন",
"ButtonAddDevice": "ডিভাইস যোগ করুন", "ButtonAddDevice": "ডিভাইস যোগ করুন",
"ButtonAddLibrary": "লাইব্রেরি যোগ করুন", "ButtonAddLibrary": "লাইব্রেরি যোগ করুন",
@@ -10,6 +11,8 @@
"ButtonApplyChapters": "অধ্যায় প্রয়োগ করুন", "ButtonApplyChapters": "অধ্যায় প্রয়োগ করুন",
"ButtonAuthors": "লেখকগণ", "ButtonAuthors": "লেখকগণ",
"ButtonBack": "পেছনে যান", "ButtonBack": "পেছনে যান",
"ButtonBatchEditPopulateFromExisting": "বিদ্যমান থেকে পূরণ করুন",
"ButtonBatchEditPopulateMapDetails": "ম্যাপ থেকে পূরণ করুন",
"ButtonBrowseForFolder": "ফোল্ডারের জন্য ব্রাউজ করুন", "ButtonBrowseForFolder": "ফোল্ডারের জন্য ব্রাউজ করুন",
"ButtonCancel": "বাতিল করুন", "ButtonCancel": "বাতিল করুন",
"ButtonCancelEncode": "এনকোড বাতিল করুন", "ButtonCancelEncode": "এনকোড বাতিল করুন",
@@ -18,6 +21,7 @@
"ButtonChooseAFolder": "একটি ফোল্ডার চয়ন করুন", "ButtonChooseAFolder": "একটি ফোল্ডার চয়ন করুন",
"ButtonChooseFiles": "ফাইল চয়ন করুন", "ButtonChooseFiles": "ফাইল চয়ন করুন",
"ButtonClearFilter": "ফিল্টার পরিষ্কার করুন", "ButtonClearFilter": "ফিল্টার পরিষ্কার করুন",
"ButtonClose": "বন্ধ করুন",
"ButtonCloseFeed": "ফিড বন্ধ করুন", "ButtonCloseFeed": "ফিড বন্ধ করুন",
"ButtonCloseSession": "খোলা সেশন বন্ধ করুন", "ButtonCloseSession": "খোলা সেশন বন্ধ করুন",
"ButtonCollections": "সংগ্রহ", "ButtonCollections": "সংগ্রহ",
@@ -117,11 +121,13 @@
"HeaderAccount": "অ্যাকাউন্ট", "HeaderAccount": "অ্যাকাউন্ট",
"HeaderAddCustomMetadataProvider": "কাস্টম মেটাডেটা সরবরাহকারী যোগ করুন", "HeaderAddCustomMetadataProvider": "কাস্টম মেটাডেটা সরবরাহকারী যোগ করুন",
"HeaderAdvanced": "অ্যাডভান্সড", "HeaderAdvanced": "অ্যাডভান্সড",
"HeaderApiKeys": "এপিআই কী সমূহ",
"HeaderAppriseNotificationSettings": "বিজ্ঞপ্তি সেটিংস অবহিত করুন", "HeaderAppriseNotificationSettings": "বিজ্ঞপ্তি সেটিংস অবহিত করুন",
"HeaderAudioTracks": "অডিও ট্র্যাকসগুলো", "HeaderAudioTracks": "অডিও ট্র্যাকসগুলো",
"HeaderAudiobookTools": "অডিওবই ফাইল ম্যানেজমেন্ট টুলস", "HeaderAudiobookTools": "অডিওবই ফাইল ম্যানেজমেন্ট টুলস",
"HeaderAuthentication": "প্রমাণীকরণ", "HeaderAuthentication": "প্রমাণীকরণ",
"HeaderBackups": "ব্যাকআপ", "HeaderBackups": "ব্যাকআপ",
"HeaderBulkChapterModal": "একাধিক অধ্যায় যোগ করুন",
"HeaderChangePassword": "পাসওয়ার্ড পরিবর্তন করুন", "HeaderChangePassword": "পাসওয়ার্ড পরিবর্তন করুন",
"HeaderChapters": "অধ্যায়", "HeaderChapters": "অধ্যায়",
"HeaderChooseAFolder": "একটি ফোল্ডার চয়ন করুন", "HeaderChooseAFolder": "একটি ফোল্ডার চয়ন করুন",
@@ -160,6 +166,7 @@
"HeaderMetadataOrderOfPrecedence": "মেটাডেটা অগ্রাধিকারের ক্রম", "HeaderMetadataOrderOfPrecedence": "মেটাডেটা অগ্রাধিকারের ক্রম",
"HeaderMetadataToEmbed": "এম্বেড করার জন্য মেটাডেটা", "HeaderMetadataToEmbed": "এম্বেড করার জন্য মেটাডেটা",
"HeaderNewAccount": "নতুন অ্যাকাউন্ট", "HeaderNewAccount": "নতুন অ্যাকাউন্ট",
"HeaderNewApiKey": "নতুন API কী",
"HeaderNewLibrary": "নতুন লাইব্রেরি", "HeaderNewLibrary": "নতুন লাইব্রেরি",
"HeaderNotificationCreate": "বিজ্ঞপ্তি তৈরি করুন", "HeaderNotificationCreate": "বিজ্ঞপ্তি তৈরি করুন",
"HeaderNotificationUpdate": "বিজ্ঞপ্তি আপডেট করুন", "HeaderNotificationUpdate": "বিজ্ঞপ্তি আপডেট করুন",
@@ -175,6 +182,7 @@
"HeaderPlaylist": "প্লেলিস্ট", "HeaderPlaylist": "প্লেলিস্ট",
"HeaderPlaylistItems": "প্লেলিস্ট আইটেম", "HeaderPlaylistItems": "প্লেলিস্ট আইটেম",
"HeaderPodcastsToAdd": "যোগ করার জন্য পডকাস্ট", "HeaderPodcastsToAdd": "যোগ করার জন্য পডকাস্ট",
"HeaderPresets": "প্রিসেট",
"HeaderPreviewCover": "কভার ্দেখুন", "HeaderPreviewCover": "কভার ্দেখুন",
"HeaderRSSFeedGeneral": "আরএসএস বিবরণ", "HeaderRSSFeedGeneral": "আরএসএস বিবরণ",
"HeaderRSSFeedIsOpen": "আরএসএস ফিড খোলা আছে", "HeaderRSSFeedIsOpen": "আরএসএস ফিড খোলা আছে",
@@ -192,6 +200,7 @@
"HeaderSettingsExperimental": "পরীক্ষামূলক ফিচার", "HeaderSettingsExperimental": "পরীক্ষামূলক ফিচার",
"HeaderSettingsGeneral": "সাধারণ", "HeaderSettingsGeneral": "সাধারণ",
"HeaderSettingsScanner": "স্ক্যানার", "HeaderSettingsScanner": "স্ক্যানার",
"HeaderSettingsSecurity": "নিরাপত্তা",
"HeaderSettingsWebClient": "ওয়েব ক্লায়েন্ট", "HeaderSettingsWebClient": "ওয়েব ক্লায়েন্ট",
"HeaderSleepTimer": "স্লিপ টাইমার", "HeaderSleepTimer": "স্লিপ টাইমার",
"HeaderStatsLargestItems": "সবচেয়ে বড় আইটেম", "HeaderStatsLargestItems": "সবচেয়ে বড় আইটেম",
+10 -1
View File
@@ -1,5 +1,6 @@
{ {
"ButtonAdd": "Afegeix", "ButtonAdd": "Afegeix",
"ButtonAddApiKey": "Afegeix clau API",
"ButtonAddChapters": "Afegeix capítols", "ButtonAddChapters": "Afegeix capítols",
"ButtonAddDevice": "Afegeix un aparell", "ButtonAddDevice": "Afegeix un aparell",
"ButtonAddLibrary": "Afegeix una biblioteca", "ButtonAddLibrary": "Afegeix una biblioteca",
@@ -20,6 +21,7 @@
"ButtonChooseAFolder": "Trieu una carpeta", "ButtonChooseAFolder": "Trieu una carpeta",
"ButtonChooseFiles": "Trieu fitxers", "ButtonChooseFiles": "Trieu fitxers",
"ButtonClearFilter": "Neteja el filtre", "ButtonClearFilter": "Neteja el filtre",
"ButtonClose": "Tanca",
"ButtonCloseFeed": "Tanca el canal", "ButtonCloseFeed": "Tanca el canal",
"ButtonCloseSession": "Tanca la sessió oberta", "ButtonCloseSession": "Tanca la sessió oberta",
"ButtonCollections": "Col·leccions", "ButtonCollections": "Col·leccions",
@@ -119,11 +121,13 @@
"HeaderAccount": "Compte", "HeaderAccount": "Compte",
"HeaderAddCustomMetadataProvider": "Afegeix un proveïdor de metadades personalitzat", "HeaderAddCustomMetadataProvider": "Afegeix un proveïdor de metadades personalitzat",
"HeaderAdvanced": "Avançat", "HeaderAdvanced": "Avançat",
"HeaderApiKeys": "Claus API",
"HeaderAppriseNotificationSettings": "Paràmetres de notificacions Apprise", "HeaderAppriseNotificationSettings": "Paràmetres de notificacions Apprise",
"HeaderAudioTracks": "Pistes d'àudio", "HeaderAudioTracks": "Pistes d'àudio",
"HeaderAudiobookTools": "Eines de gestió de fitxers de l'audiollibre", "HeaderAudiobookTools": "Eines de gestió de fitxers de l'audiollibre",
"HeaderAuthentication": "Autenticació", "HeaderAuthentication": "Autenticació",
"HeaderBackups": "Còpies de Seguretat", "HeaderBackups": "Còpies de Seguretat",
"HeaderBulkChapterModal": "Afegeix capítols múltiples",
"HeaderChangePassword": "Canvia Contrasenya", "HeaderChangePassword": "Canvia Contrasenya",
"HeaderChapters": "Capítols", "HeaderChapters": "Capítols",
"HeaderChooseAFolder": "Tria una Carpeta", "HeaderChooseAFolder": "Tria una Carpeta",
@@ -162,6 +166,7 @@
"HeaderMetadataOrderOfPrecedence": "Ordre de Precedència de Metadades", "HeaderMetadataOrderOfPrecedence": "Ordre de Precedència de Metadades",
"HeaderMetadataToEmbed": "Metadades a Inserir", "HeaderMetadataToEmbed": "Metadades a Inserir",
"HeaderNewAccount": "Nou Compte", "HeaderNewAccount": "Nou Compte",
"HeaderNewApiKey": "Nova clau API",
"HeaderNewLibrary": "Nova Biblioteca", "HeaderNewLibrary": "Nova Biblioteca",
"HeaderNotificationCreate": "Crea Notificació", "HeaderNotificationCreate": "Crea Notificació",
"HeaderNotificationUpdate": "Actualització de Notificació", "HeaderNotificationUpdate": "Actualització de Notificació",
@@ -195,6 +200,7 @@
"HeaderSettingsExperimental": "Funcionalitats experimentals", "HeaderSettingsExperimental": "Funcionalitats experimentals",
"HeaderSettingsGeneral": "Generals", "HeaderSettingsGeneral": "Generals",
"HeaderSettingsScanner": "Escàner", "HeaderSettingsScanner": "Escàner",
"HeaderSettingsSecurity": "Seguretat",
"HeaderSettingsWebClient": "Client web", "HeaderSettingsWebClient": "Client web",
"HeaderSleepTimer": "Temporitzador de son", "HeaderSleepTimer": "Temporitzador de son",
"HeaderStatsLargestItems": "Elements més grans", "HeaderStatsLargestItems": "Elements més grans",
@@ -417,6 +423,9 @@
"LabelLibraryFilterSublistEmpty": "Sense {0}", "LabelLibraryFilterSublistEmpty": "Sense {0}",
"LabelLibraryItem": "Element de Biblioteca", "LabelLibraryItem": "Element de Biblioteca",
"LabelLibraryName": "Nom de Biblioteca", "LabelLibraryName": "Nom de Biblioteca",
"LabelLibrarySortByProgress": "Progrés: Última actualització",
"LabelLibrarySortByProgressFinished": "Progrés: Finalitzat",
"LabelLibrarySortByProgressStarted": "Progrés: Començat",
"LabelLimit": "Límits", "LabelLimit": "Límits",
"LabelLineSpacing": "Interlineat", "LabelLineSpacing": "Interlineat",
"LabelListenAgain": "Escoltar de nou", "LabelListenAgain": "Escoltar de nou",
@@ -439,7 +448,7 @@
"LabelMetadataProvider": "Proveïdor de metadades", "LabelMetadataProvider": "Proveïdor de metadades",
"LabelMinute": "Minut", "LabelMinute": "Minut",
"LabelMinutes": "Minuts", "LabelMinutes": "Minuts",
"LabelMissing": "Absent", "LabelMissing": "Falta",
"LabelMissingEbook": "No té llibre electrònic", "LabelMissingEbook": "No té llibre electrònic",
"LabelMissingSupplementaryEbook": "No té ebook complementari", "LabelMissingSupplementaryEbook": "No té ebook complementari",
"LabelMobileRedirectURIs": "URI de redirecció mòbil permeses", "LabelMobileRedirectURIs": "URI de redirecció mòbil permeses",
+5 -3
View File
@@ -385,14 +385,14 @@
"LabelFontBoldness": "Výraznost písma", "LabelFontBoldness": "Výraznost písma",
"LabelFontFamily": "Rodina písem", "LabelFontFamily": "Rodina písem",
"LabelFontItalic": "Kurzíva", "LabelFontItalic": "Kurzíva",
"LabelFontScale": "Měřítko písma", "LabelFontScale": "Velikost písma",
"LabelFontStrikethrough": "Přeškrtnutí", "LabelFontStrikethrough": "Přeškrtnutí",
"LabelFormat": "Formát", "LabelFormat": "Formát",
"LabelFull": "Plné", "LabelFull": "Plné",
"LabelGenre": "Žánr", "LabelGenre": "Žánr",
"LabelGenres": "Žánry", "LabelGenres": "Žánry",
"LabelHardDeleteFile": "Trvale smazat soubor", "LabelHardDeleteFile": "Trvale smazat soubor",
"LabelHasEbook": "Obsahuje elektronickou knihu", "LabelHasEbook": "Má e-knihu",
"LabelHasSupplementaryEbook": "Obsahuje doplňkovou e-knihu", "LabelHasSupplementaryEbook": "Obsahuje doplňkovou e-knihu",
"LabelHideSubtitles": "Skrýt titulky", "LabelHideSubtitles": "Skrýt titulky",
"LabelHighestPriority": "Nejvyšší priorita", "LabelHighestPriority": "Nejvyšší priorita",
@@ -589,7 +589,7 @@
"LabelSettingsChromecastSupport": "Podpora Chromecastu", "LabelSettingsChromecastSupport": "Podpora Chromecastu",
"LabelSettingsDateFormat": "Formát data", "LabelSettingsDateFormat": "Formát data",
"LabelSettingsEnableWatcher": "Automaticky skenovat změny v knihovnách", "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", "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", "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.", "LabelSettingsEpubsAllowScriptedContentHelp": "Povolení spouštění skriptů v souborech epub. Doporučujeme toto nastavení vypnout, pokud nedůvěřujete zdroji souborů epub.",
@@ -1026,6 +1026,8 @@
"ToastCollectionItemsAddFailed": "Přidávání položek do kolekce selhalo", "ToastCollectionItemsAddFailed": "Přidávání položek do kolekce selhalo",
"ToastCollectionRemoveSuccess": "Kolekce odstraněna", "ToastCollectionRemoveSuccess": "Kolekce odstraněna",
"ToastCollectionUpdateSuccess": "Kolekce aktualizová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", "ToastCoverUpdateFailed": "Aktualizace obálky selhala",
"ToastDateTimeInvalidOrIncomplete": "Datum a čas jsou chybné nebo nekompletní", "ToastDateTimeInvalidOrIncomplete": "Datum a čas jsou chybné nebo nekompletní",
"ToastDeleteFileFailed": "Nepodařilo se smazat soubor", "ToastDeleteFileFailed": "Nepodařilo se smazat soubor",
+62 -23
View File
@@ -127,6 +127,7 @@
"HeaderAudiobookTools": "Audiobog Filhåndteringsværktøjer", "HeaderAudiobookTools": "Audiobog Filhåndteringsværktøjer",
"HeaderAuthentication": "Autentificering", "HeaderAuthentication": "Autentificering",
"HeaderBackups": "Sikkerhedskopier", "HeaderBackups": "Sikkerhedskopier",
"HeaderBulkChapterModal": "Tilføj flere kapitler",
"HeaderChangePassword": "Skift Adgangskode", "HeaderChangePassword": "Skift Adgangskode",
"HeaderChapters": "Kapitler", "HeaderChapters": "Kapitler",
"HeaderChooseAFolder": "Vælg en Mappe", "HeaderChooseAFolder": "Vælg en Mappe",
@@ -199,6 +200,7 @@
"HeaderSettingsExperimental": "Eksperimentelle Funktioner", "HeaderSettingsExperimental": "Eksperimentelle Funktioner",
"HeaderSettingsGeneral": "Generelt", "HeaderSettingsGeneral": "Generelt",
"HeaderSettingsScanner": "Scanner", "HeaderSettingsScanner": "Scanner",
"HeaderSettingsSecurity": "Sikkerhed",
"HeaderSettingsWebClient": "Webklient", "HeaderSettingsWebClient": "Webklient",
"HeaderSleepTimer": "Søvntimer", "HeaderSleepTimer": "Søvntimer",
"HeaderStatsLargestItems": "Største Elementer", "HeaderStatsLargestItems": "Største Elementer",
@@ -273,7 +275,7 @@
"LabelBonus": "Bonus", "LabelBonus": "Bonus",
"LabelBooks": "Bøger", "LabelBooks": "Bøger",
"LabelButtonText": "Knap tekst", "LabelButtonText": "Knap tekst",
"LabelByAuthor": "af {0}", "LabelByAuthor": "Efter Forfatter",
"LabelChangePassword": "Ændre Adgangskode", "LabelChangePassword": "Ændre Adgangskode",
"LabelChannels": "Kanaler", "LabelChannels": "Kanaler",
"LabelChapterCount": "{0} Kapitler", "LabelChapterCount": "{0} Kapitler",
@@ -293,6 +295,7 @@
"LabelContinueListening": "Fortsæt med at lytte", "LabelContinueListening": "Fortsæt med at lytte",
"LabelContinueReading": "Fortsæt med at læse", "LabelContinueReading": "Fortsæt med at læse",
"LabelContinueSeries": "Fortsæt Serien", "LabelContinueSeries": "Fortsæt Serien",
"LabelCorsAllowed": "Tilladte CORS-oprindelser",
"LabelCover": "Omslag", "LabelCover": "Omslag",
"LabelCoverImageURL": "Omslagsbillede URL", "LabelCoverImageURL": "Omslagsbillede URL",
"LabelCoverProvider": "Cover billede udbyder", "LabelCoverProvider": "Cover billede udbyder",
@@ -306,6 +309,7 @@
"LabelDeleteFromFileSystemCheckbox": "Slet fra filsystem (afmarker kun for at fjerne fra databasen)", "LabelDeleteFromFileSystemCheckbox": "Slet fra filsystem (afmarker kun for at fjerne fra databasen)",
"LabelDescription": "Beskrivelse", "LabelDescription": "Beskrivelse",
"LabelDeselectAll": "Fravælg Alle", "LabelDeselectAll": "Fravælg Alle",
"LabelDetectedPattern": "Identificeret mønster:",
"LabelDevice": "Enheds", "LabelDevice": "Enheds",
"LabelDeviceInfo": "Enhedsinformation", "LabelDeviceInfo": "Enhedsinformation",
"LabelDeviceIsAvailableTo": "Enhed er tilgængelig for...", "LabelDeviceIsAvailableTo": "Enhed er tilgængelig for...",
@@ -374,11 +378,12 @@
"LabelFilterByUser": "Filtrér efter bruger", "LabelFilterByUser": "Filtrér efter bruger",
"LabelFindEpisodes": "Find episoder", "LabelFindEpisodes": "Find episoder",
"LabelFinished": "Færdig", "LabelFinished": "Færdig",
"LabelFinishedDate": "Færdig {0}",
"LabelFolder": "Mappe", "LabelFolder": "Mappe",
"LabelFolders": "Mapper", "LabelFolders": "Mapper",
"LabelFontBold": "Fed", "LabelFontBold": "Fed",
"LabelFontBoldness": "Skrift tykkelse", "LabelFontBoldness": "Skrift tykkelse",
"LabelFontFamily": "Fontfamilie", "LabelFontFamily": "Skrifttypefamilie",
"LabelFontItalic": "Kursiv", "LabelFontItalic": "Kursiv",
"LabelFontScale": "Skriftstørrelse", "LabelFontScale": "Skriftstørrelse",
"LabelFontStrikethrough": "Gennemstreget", "LabelFontStrikethrough": "Gennemstreget",
@@ -418,6 +423,7 @@
"LabelLanguages": "Sprog", "LabelLanguages": "Sprog",
"LabelLastBookAdded": "Senest tilføjede bog", "LabelLastBookAdded": "Senest tilføjede bog",
"LabelLastBookUpdated": "Senest opdaterede bog", "LabelLastBookUpdated": "Senest opdaterede bog",
"LabelLastProgressDate": "Sidste fremgang: {0}",
"LabelLastSeen": "Sidst set", "LabelLastSeen": "Sidst set",
"LabelLastTime": "Sidste gang", "LabelLastTime": "Sidste gang",
"LabelLastUpdate": "Seneste opdatering", "LabelLastUpdate": "Seneste opdatering",
@@ -430,6 +436,9 @@
"LabelLibraryFilterSublistEmpty": "Nej {0}", "LabelLibraryFilterSublistEmpty": "Nej {0}",
"LabelLibraryItem": "Bibliotekselement", "LabelLibraryItem": "Bibliotekselement",
"LabelLibraryName": "Biblioteksnavn", "LabelLibraryName": "Biblioteksnavn",
"LabelLibrarySortByProgress": "Fremgang: Sidst opdateret",
"LabelLibrarySortByProgressFinished": "Fremgang: Afsluttet",
"LabelLibrarySortByProgressStarted": "Fremgang: Startet",
"LabelLimit": "Grænse", "LabelLimit": "Grænse",
"LabelLineSpacing": "Linjeafstand", "LabelLineSpacing": "Linjeafstand",
"LabelListenAgain": "Lyt igen", "LabelListenAgain": "Lyt igen",
@@ -438,6 +447,7 @@
"LabelLogLevelWarn": "Advarsel", "LabelLogLevelWarn": "Advarsel",
"LabelLookForNewEpisodesAfterDate": "Søg efter nye episoder efter denne dato", "LabelLookForNewEpisodesAfterDate": "Søg efter nye episoder efter denne dato",
"LabelLowestPriority": "Laveste prioritet", "LabelLowestPriority": "Laveste prioritet",
"LabelMatchConfidence": "Confidens",
"LabelMatchExistingUsersBy": "Match eksisterende brugere ved", "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", "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.", "LabelMaxEpisodesToDownload": "Max # afsnit for at downloade. Anvend 0 for ubegrænset.",
@@ -467,6 +477,7 @@
"LabelNewestAuthors": "Nyeste forfattere", "LabelNewestAuthors": "Nyeste forfattere",
"LabelNewestEpisodes": "Nyeste episoder", "LabelNewestEpisodes": "Nyeste episoder",
"LabelNextBackupDate": "Næste sikkerhedskopi dato", "LabelNextBackupDate": "Næste sikkerhedskopi dato",
"LabelNextChapters": "Næste kapitler vil være:",
"LabelNextScheduledRun": "Næste planlagte kørsel", "LabelNextScheduledRun": "Næste planlagte kørsel",
"LabelNoApiKeys": "Ingen API-nøgler", "LabelNoApiKeys": "Ingen API-nøgler",
"LabelNoCustomMetadataProviders": "Ingen brugerdefinerede metadata udbydere", "LabelNoCustomMetadataProviders": "Ingen brugerdefinerede metadata udbydere",
@@ -484,6 +495,7 @@
"LabelNotificationsMaxQueueSize": "Maksimal køstørrelse for meddelelseshændelser", "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.", "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", "LabelNumberOfBooks": "Antal bøger",
"LabelNumberOfChapters": "Antal kapitler:",
"LabelNumberOfEpisodes": "# afsnit", "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:", "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.", "LabelOpenIDClaims": "Efterlad de følgende indstillinger tomme for at deaktivere avanceret gruppe og adgangsindstilling, ved automatisk at assigne 'Bruger' grupper.",
@@ -576,8 +588,8 @@
"LabelSettingsBookshelfViewHelp": "Skeumorfisk design med træhylder", "LabelSettingsBookshelfViewHelp": "Skeumorfisk design med træhylder",
"LabelSettingsChromecastSupport": "Chromecast-understøttelse", "LabelSettingsChromecastSupport": "Chromecast-understøttelse",
"LabelSettingsDateFormat": "Datoformat", "LabelSettingsDateFormat": "Datoformat",
"LabelSettingsEnableWatcher": "Scan automatisk bibliotek for ændringer", "LabelSettingsEnableWatcher": "Automatisk biblioteksovervåger",
"LabelSettingsEnableWatcherForLibrary": "Scan automatisk bibliotek for ændringer", "LabelSettingsEnableWatcherForLibrary": "Automatisk biblioteksovervåger",
"LabelSettingsEnableWatcherHelp": "Aktiverer automatisk tilføjelse/opdatering af elementer, når filændringer registreres. *Kræver servergenstart", "LabelSettingsEnableWatcherHelp": "Aktiverer automatisk tilføjelse/opdatering af elementer, når filændringer registreres. *Kræver servergenstart",
"LabelSettingsEpubsAllowScriptedContent": "Tillad scriptet indhold i epub", "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.", "LabelSettingsEpubsAllowScriptedContentHelp": "Tillad epub filer at køre scripts. Det anbefales at holde denne indstilling deaktiveret med mindre du stoler på kilderne af epub filerne.",
@@ -626,6 +638,7 @@
"LabelStartTime": "Starttid", "LabelStartTime": "Starttid",
"LabelStarted": "Startet", "LabelStarted": "Startet",
"LabelStartedAt": "Startet klokken", "LabelStartedAt": "Startet klokken",
"LabelStartedDate": "Startet {0}",
"LabelStatsAudioTracks": "Lydspor", "LabelStatsAudioTracks": "Lydspor",
"LabelStatsAuthors": "Forfattere", "LabelStatsAuthors": "Forfattere",
"LabelStatsBestDay": "Bedste dag", "LabelStatsBestDay": "Bedste dag",
@@ -655,6 +668,7 @@
"LabelTheme": "Tema", "LabelTheme": "Tema",
"LabelThemeDark": "Mørk", "LabelThemeDark": "Mørk",
"LabelThemeLight": "Lys", "LabelThemeLight": "Lys",
"LabelThemeSepia": "Sepia",
"LabelTimeBase": "Tidsbase", "LabelTimeBase": "Tidsbase",
"LabelTimeDurationXHours": "{0} timer", "LabelTimeDurationXHours": "{0} timer",
"LabelTimeDurationXMinutes": "{0} minutter", "LabelTimeDurationXMinutes": "{0} minutter",
@@ -739,6 +753,7 @@
"MessageBookshelfNoResultsForFilter": "Ingen resultater for filter \"{0}: {1}\"", "MessageBookshelfNoResultsForFilter": "Ingen resultater for filter \"{0}: {1}\"",
"MessageBookshelfNoResultsForQuery": "Intet resultat for query", "MessageBookshelfNoResultsForQuery": "Intet resultat for query",
"MessageBookshelfNoSeries": "Du har ingen serier", "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", "MessageChapterEndIsAfter": "Kapitelslutningen er efter slutningen af din lydbog",
"MessageChapterErrorFirstNotZero": "Første kapitel skal starte ved 0", "MessageChapterErrorFirstNotZero": "Første kapitel skal starte ved 0",
"MessageChapterErrorStartGteDuration": "Ugyldig starttid skal være mindre end lydbogens varighed", "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}\"?", "MessageConfirmRemoveAuthor": "Er du sikker på, at du vil fjerne forfatteren \"{0}\"?",
"MessageConfirmRemoveCollection": "Er du sikker på, at du vil fjerne samlingen \"{0}\"?", "MessageConfirmRemoveCollection": "Er du sikker på, at du vil fjerne samlingen \"{0}\"?",
"MessageConfirmRemoveEpisode": "Er du sikker på, at du vil fjerne episoden \"{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?", "MessageConfirmRemoveEpisodes": "Er du sikker på, at du vil fjerne {0} episoder?",
"MessageConfirmRemoveListeningSessions": "Er du sikker på at du vil fjerne {0} lytte sessioner?", "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?", "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}", "MessageFeedURLWillBe": "Feed-URL vil være {0}",
"MessageFetching": "Henter...", "MessageFetching": "Henter...",
"MessageForceReScanDescription": "vil scanne alle filer igen som en frisk scanning. Lydfilens ID3-tags, OPF-filer og tekstfiler scannes som nye.", "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!", "MessageImportantNotice": "Vigtig besked!",
"MessageInsertChapterBelow": "Indsæt kapitel nedenfor", "MessageInsertChapterBelow": "Indsæt kapitel nedenfor",
"MessageInvalidAsin": "Ugyldig ASIN", "MessageInvalidAsin": "Ugyldig ASIN",
@@ -870,7 +888,7 @@
"MessageResetChaptersConfirm": "Er du sikker på, at du vil nulstille kapitler og annullere ændringerne, du har foretaget?", "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", "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.", "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 efterlade denne funktion deaktiveret, og lade biblioteksovervågeren være aktiveret - den vil automatisk opdage ændringer i dine biblioteksmapper. Aktiver denne funktion, hvis biblioteksovervågeren ikke virker med dit filsystem (f. eks. NFS).",
"MessageScheduleRunEveryWeekdayAtTime": "Kør hvert {0} af {1}", "MessageScheduleRunEveryWeekdayAtTime": "Kør hvert {0} af {1}",
"MessageSearchResultsFor": "Søgeresultater for", "MessageSearchResultsFor": "Søgeresultater for",
"MessageSelected": "{0} valgt", "MessageSelected": "{0} valgt",
@@ -939,6 +957,7 @@
"NotificationOnRSSFeedDisabledDescription": "Aktiveret når automatiske episode-downloads er slået fra, på grund af for mange forsøg", "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", "NotificationOnRSSFeedFailedDescription": "Aktiveret når anmodning om RSS-feedet fejler for en automatisk episode-download",
"NotificationOnTestDescription": "Event for test af notifikationssystemet", "NotificationOnTestDescription": "Event for test af notifikationssystemet",
"PlaceholderBulkChapterInput": "Indtast kapiteltitel eller brug nummerering (f.eks. 'Episode 1', 'Kapitel 10', '1.')",
"PlaceholderNewCollection": "Nyt samlingnavn", "PlaceholderNewCollection": "Nyt samlingnavn",
"PlaceholderNewFolderPath": "Ny mappes sti", "PlaceholderNewFolderPath": "Ny mappes sti",
"PlaceholderNewPlaylist": "Nyt afspilningslistnavn", "PlaceholderNewPlaylist": "Nyt afspilningslistnavn",
@@ -992,22 +1011,30 @@
"ToastBookmarkCreateFailed": "Mislykkedes oprettelse af bogmærke", "ToastBookmarkCreateFailed": "Mislykkedes oprettelse af bogmærke",
"ToastBookmarkCreateSuccess": "Bogmærke tilføjet", "ToastBookmarkCreateSuccess": "Bogmærke tilføjet",
"ToastBookmarkRemoveSuccess": "Bogmærke fjernet", "ToastBookmarkRemoveSuccess": "Bogmærke fjernet",
"ToastBulkChapterInvalidCount": "Indtast et tal mellem 1 og 150",
"ToastCachePurgeFailed": "Fejlede at opryde cache", "ToastCachePurgeFailed": "Fejlede at opryde cache",
"ToastCachePurgeSuccess": "Cache ryddet op i succesfuldt", "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", "ToastChaptersHaveErrors": "Kapitler har fejl",
"ToastChaptersInvalidShiftAmountLast": "Ugyldig ændring. Det sidste kapitels starttid ville fortsætte længere end varigheden på denne lydbog.",
"ToastChaptersInvalidShiftAmountStart": "Ugyldig ændring. Første kapitel ville have en længde på nul eller negativt og ville blive overskrevet af andet kapitel. Udvid startvarigheden på andet kapitel.",
"ToastChaptersMustHaveTitles": "Kapitler skal have titler", "ToastChaptersMustHaveTitles": "Kapitler skal have titler",
"ToastChaptersRemoved": "Kapitler fjernet", "ToastChaptersRemoved": "Kapitler fjernet",
"ToastChaptersUpdated": "Kapitler opdateret", "ToastChaptersUpdated": "Kapitler opdateret",
"ToastCollectionItemsAddFailed": "Genstand(e) tilføjet til kollektion fejlet", "ToastCollectionItemsAddFailed": "Genstand(e) tilføjet til kollektion fejlet",
"ToastCollectionRemoveSuccess": "Samling fjernet", "ToastCollectionRemoveSuccess": "Samling fjernet",
"ToastCollectionUpdateSuccess": "Samling opdateret", "ToastCollectionUpdateSuccess": "Samling opdateret",
"ToastConnectionNotAvailable": "Forbindelse mislykkedes. Prøv igen senere",
"ToastCoverSearchFailed": "Cover-søgning mislykkedes",
"ToastCoverUpdateFailed": "Cover opdatering fejlede", "ToastCoverUpdateFailed": "Cover opdatering fejlede",
"ToastDateTimeInvalidOrIncomplete": "Dato og tid er forkert eller ufærdig", "ToastDateTimeInvalidOrIncomplete": "Dato og tid er ugyldig eller ufærdig",
"ToastDeleteFileFailed": "Slet fil fejlede", "ToastDeleteFileFailed": "Sletning af fil fejlede",
"ToastDeleteFileSuccess": "Fil slettet", "ToastDeleteFileSuccess": "Fil slettet",
"ToastDeviceAddFailed": "Fejlede at tilføje enhed", "ToastDeviceAddFailed": "Tilføjelse af enhed Fejlede",
"ToastDeviceNameAlreadyExists": "Elæser enhed med det navn eksistere allerede", "ToastDeviceNameAlreadyExists": "E-læser enhed med det navn eksistere allerede",
"ToastDeviceTestEmailFailed": "Fejlede at sende test mail", "ToastDeviceTestEmailFailed": "Afsendelse af test mail fejlede",
"ToastDeviceTestEmailSuccess": "Test mail sendt", "ToastDeviceTestEmailSuccess": "Test mail sendt",
"ToastEmailSettingsUpdateSuccess": "Mail indstillinger opdateret", "ToastEmailSettingsUpdateSuccess": "Mail indstillinger opdateret",
"ToastEncodeCancelFailed": "Fejlede at afbryde indkodning", "ToastEncodeCancelFailed": "Fejlede at afbryde indkodning",
@@ -1017,21 +1044,23 @@
"ToastEpisodeUpdateSuccess": "{0} afsnit opdateret", "ToastEpisodeUpdateSuccess": "{0} afsnit opdateret",
"ToastErrorCannotShare": "Kan ikke dele på denne enhed", "ToastErrorCannotShare": "Kan ikke dele på denne enhed",
"ToastFailedToCreate": "Oprettelsen mislykkedes", "ToastFailedToCreate": "Oprettelsen mislykkedes",
"ToastFailedToLoadData": "Fejlede at indlæse data", "ToastFailedToDelete": "Sletning fejlede",
"ToastFailedToLoadData": "Indlæsning af data fejlede",
"ToastFailedToMatch": "Fejlet match", "ToastFailedToMatch": "Fejlet match",
"ToastFailedToShare": "Fejlet deling", "ToastFailedToShare": "Deling fejlede",
"ToastFailedToUpdate": "Fejlet opdatering", "ToastFailedToUpdate": "Fejlet opdatering",
"ToastInvalidImageUrl": "Forkert billede URL", "ToastInvalidImageUrl": "Ugyldig billede URL",
"ToastInvalidMaxEpisodesToDownload": "Forkert maks afsnit at hente", "ToastInvalidMaxEpisodesToDownload": "Ugyldigt maks afsnit at hente",
"ToastInvalidUrl": "Forkert URL", "ToastInvalidUrl": "Ugyldig URL",
"ToastItemCoverUpdateSuccess": "Varens omslag opdateret", "ToastInvalidUrls": "En eller flere URLer er ugyldige",
"ToastItemDeletedFailed": "Fejlede at slette genstand", "ToastItemCoverUpdateSuccess": "Omslag opdateret",
"ToastItemDeletedFailed": "Sletning af genstand fejlede",
"ToastItemDeletedSuccess": "Genstand slettet", "ToastItemDeletedSuccess": "Genstand slettet",
"ToastItemDetailsUpdateSuccess": "Varedetaljer opdateret", "ToastItemDetailsUpdateSuccess": "Detaljer opdateret",
"ToastItemMarkedAsFinishedFailed": "Mislykkedes markering som afsluttet", "ToastItemMarkedAsFinishedFailed": "Markering som afsluttet mislykkedes",
"ToastItemMarkedAsFinishedSuccess": "Vare markeret som afsluttet", "ToastItemMarkedAsFinishedSuccess": "Element markeret som afsluttet",
"ToastItemMarkedAsNotFinishedFailed": "Mislykkedes markering som ikke afsluttet", "ToastItemMarkedAsNotFinishedFailed": "Markering som ikke afsluttet mislykkedes",
"ToastItemMarkedAsNotFinishedSuccess": "Vare markeret som ikke afsluttet", "ToastItemMarkedAsNotFinishedSuccess": "Element markeret som ikke afsluttet",
"ToastItemUpdateSuccess": "Genstand opdateret", "ToastItemUpdateSuccess": "Genstand opdateret",
"ToastLibraryCreateFailed": "Oprettelse af bibliotek mislykkedes", "ToastLibraryCreateFailed": "Oprettelse af bibliotek mislykkedes",
"ToastLibraryCreateSuccess": "Bibliotek \"{0}\" oprettet", "ToastLibraryCreateSuccess": "Bibliotek \"{0}\" oprettet",
@@ -1048,6 +1077,7 @@
"ToastMustHaveAtLeastOnePath": "Skal have mindst en sti", "ToastMustHaveAtLeastOnePath": "Skal have mindst en sti",
"ToastNameEmailRequired": "Navn og email påkrævet", "ToastNameEmailRequired": "Navn og email påkrævet",
"ToastNameRequired": "Navn påkrævet", "ToastNameRequired": "Navn påkrævet",
"ToastNewApiKeyUserError": "En bruger skal vælges",
"ToastNewEpisodesFound": "{0} nye afsnit fundet", "ToastNewEpisodesFound": "{0} nye afsnit fundet",
"ToastNewUserCreatedFailed": "Fejlede at oprette konto: \"{0}\"", "ToastNewUserCreatedFailed": "Fejlede at oprette konto: \"{0}\"",
"ToastNewUserCreatedSuccess": "Ny konto oprettet", "ToastNewUserCreatedSuccess": "Ny konto oprettet",
@@ -1072,6 +1102,7 @@
"ToastPlaylistUpdateSuccess": "Afspilningsliste opdateret", "ToastPlaylistUpdateSuccess": "Afspilningsliste opdateret",
"ToastPodcastCreateFailed": "Mislykkedes oprettelse af podcast", "ToastPodcastCreateFailed": "Mislykkedes oprettelse af podcast",
"ToastPodcastCreateSuccess": "Podcast oprettet med succes", "ToastPodcastCreateSuccess": "Podcast oprettet med succes",
"ToastPodcastEpisodeUpdated": "Episode opdateret",
"ToastPodcastGetFeedFailed": "Fejlede at hente podcast feed", "ToastPodcastGetFeedFailed": "Fejlede at hente podcast feed",
"ToastPodcastNoEpisodesInFeed": "Ingen nye afsnit fundet i RSS feed", "ToastPodcastNoEpisodesInFeed": "Ingen nye afsnit fundet i RSS feed",
"ToastPodcastNoRssFeed": "Podcast har ingen RSS feed", "ToastPodcastNoRssFeed": "Podcast har ingen RSS feed",
@@ -1122,5 +1153,13 @@
"ToastUserPasswordChangeSuccess": "Password ændret", "ToastUserPasswordChangeSuccess": "Password ændret",
"ToastUserPasswordMismatch": "Passwords passer ikke sammen", "ToastUserPasswordMismatch": "Passwords passer ikke sammen",
"ToastUserPasswordMustChange": "Nyt password må ikke være det gamle", "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)"
} }
+15 -13
View File
@@ -13,7 +13,7 @@
"ButtonBack": "Zurück", "ButtonBack": "Zurück",
"ButtonBatchEditPopulateFromExisting": "Auffüllen aus vorhandenem", "ButtonBatchEditPopulateFromExisting": "Auffüllen aus vorhandenem",
"ButtonBatchEditPopulateMapDetails": "Kartendetails auffüllen", "ButtonBatchEditPopulateMapDetails": "Kartendetails auffüllen",
"ButtonBrowseForFolder": "Ordnersuche", "ButtonBrowseForFolder": "Ordner auswählen",
"ButtonCancel": "Abbrechen", "ButtonCancel": "Abbrechen",
"ButtonCancelEncode": "Konvertierung abbrechen", "ButtonCancelEncode": "Konvertierung abbrechen",
"ButtonChangeRootPassword": "Hauptpasswort ändern", "ButtonChangeRootPassword": "Hauptpasswort ändern",
@@ -116,7 +116,7 @@
"ButtonViewAll": "Alles anzeigen", "ButtonViewAll": "Alles anzeigen",
"ButtonYes": "Ja", "ButtonYes": "Ja",
"ErrorUploadFetchMetadataAPI": "Fehler beim Abrufen der Metadaten", "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", "ErrorUploadLacksTitle": "Es muss ein Titel eingegeben werden",
"HeaderAccount": "Konto", "HeaderAccount": "Konto",
"HeaderAddCustomMetadataProvider": "Benutzerdefinierten Metadatenanbieter hinzufügen", "HeaderAddCustomMetadataProvider": "Benutzerdefinierten Metadatenanbieter hinzufügen",
@@ -331,7 +331,7 @@
"LabelEmail": "E-Mail", "LabelEmail": "E-Mail",
"LabelEmailSettingsFromAddress": "Sender", "LabelEmailSettingsFromAddress": "Sender",
"LabelEmailSettingsRejectUnauthorized": "Nicht autorisierte Zertifikate ablehnen", "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", "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)", "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", "LabelEmailSettingsTestAddress": "Test-Adresse",
@@ -436,7 +436,7 @@
"LabelLibraryFilterSublistEmpty": "Keine {0}", "LabelLibraryFilterSublistEmpty": "Keine {0}",
"LabelLibraryItem": "Bibliothekseintrag", "LabelLibraryItem": "Bibliothekseintrag",
"LabelLibraryName": "Bibliotheksname", "LabelLibraryName": "Bibliotheksname",
"LabelLibrarySortByProgress": "Fortschritt: Zuletzt aktualisiert", "LabelLibrarySortByProgress": "Fortschritt: Letzte Aktualisierung",
"LabelLibrarySortByProgressFinished": "Fortschritt: Beendet", "LabelLibrarySortByProgressFinished": "Fortschritt: Beendet",
"LabelLibrarySortByProgressStarted": "Fortschritt: Gestartet", "LabelLibrarySortByProgressStarted": "Fortschritt: Gestartet",
"LabelLimit": "Begrenzung", "LabelLimit": "Begrenzung",
@@ -588,8 +588,8 @@
"LabelSettingsBookshelfViewHelp": "Skeumorphes Design mit Holzeinlegeböden", "LabelSettingsBookshelfViewHelp": "Skeumorphes Design mit Holzeinlegeböden",
"LabelSettingsChromecastSupport": "Chromecastunterstützung", "LabelSettingsChromecastSupport": "Chromecastunterstützung",
"LabelSettingsDateFormat": "Datumsformat", "LabelSettingsDateFormat": "Datumsformat",
"LabelSettingsEnableWatcher": "Bibliotheken automatisch nach Änderungen durchsuchen", "LabelSettingsEnableWatcher": "Bibliotheken automatisch nach Änderungen überwachen",
"LabelSettingsEnableWatcherForLibrary": "Bibliothek automatisch nach Änderungen durchsuchen", "LabelSettingsEnableWatcherForLibrary": "Bibliothek automatisch auf Änderungen überwachen",
"LabelSettingsEnableWatcherHelp": "Aktiviert das automatische Hinzufügen/Aktualisieren von Elementen, wenn Dateiänderungen erkannt werden. *Erfordert einen Server-Neustart", "LabelSettingsEnableWatcherHelp": "Aktiviert das automatische Hinzufügen/Aktualisieren von Elementen, wenn Dateiänderungen erkannt werden. *Erfordert einen Server-Neustart",
"LabelSettingsEpubsAllowScriptedContent": "Skriptinhalte in Epubs zulassen", "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.", "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.",
@@ -622,7 +622,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", "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", "LabelSettingsTimeFormat": "Zeitformat",
"LabelShare": "Freigeben", "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", "LabelShareOpen": "Freigeben",
"LabelShareURL": "Freigabe URL", "LabelShareURL": "Freigabe URL",
"LabelShowAll": "Alles anzeigen", "LabelShowAll": "Alles anzeigen",
@@ -710,7 +710,7 @@
"LabelUploaderDragAndDropFilesOnly": "Dateien per Drag & Drop hierher ziehen", "LabelUploaderDragAndDropFilesOnly": "Dateien per Drag & Drop hierher ziehen",
"LabelUploaderDropFiles": "Dateien löschen", "LabelUploaderDropFiles": "Dateien löschen",
"LabelUploaderItemFetchMetadataHelp": "Automatisches Aktualisieren von Titel, Autor und Serie", "LabelUploaderItemFetchMetadataHelp": "Automatisches Aktualisieren von Titel, Autor und Serie",
"LabelUseAdvancedOptions": "Nutze Erweiterte Optionen", "LabelUseAdvancedOptions": "Erweiterte Optionen verwenden",
"LabelUseChapterTrack": "Kapiteldatei verwenden", "LabelUseChapterTrack": "Kapiteldatei verwenden",
"LabelUseFullTrack": "Gesamte Datei verwenden", "LabelUseFullTrack": "Gesamte Datei verwenden",
"LabelUseZeroForUnlimited": "0 für unbegrenzt", "LabelUseZeroForUnlimited": "0 für unbegrenzt",
@@ -737,7 +737,7 @@
"MessageAddToPlayerQueue": "Zur Abspielwarteliste hinzufügen", "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.", "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": "Stelle sicher, dass die ASIN aus der richtigen Audible Region verwendet wird, nicht Amazon.", "MessageAsinCheck": "Stelle sicher, dass die ASIN aus der richtigen Audible Region verwendet wird, nicht Amazon.",
"MessageAuthenticationLegacyTokenWarning": "Alte API tokens werden in Zukunft entfernt. Benutze stattdessen <a href=\"/config/api-keys\">API Keys</a>.", "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.", "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.", "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.", "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.",
@@ -816,7 +816,7 @@
"MessageFeedURLWillBe": "Feed-URL wird {0} sein", "MessageFeedURLWillBe": "Feed-URL wird {0} sein",
"MessageFetching": "Wird abgerufen …", "MessageFetching": "Wird abgerufen …",
"MessageForceReScanDescription": "Durchsucht alle Dateien erneut, wie bei einem frischen Scan. ID3-Tags von Audiodateien, OPF-Dateien und Textdateien werden neu durchsucht.", "MessageForceReScanDescription": "Durchsucht alle Dateien erneut, wie bei einem frischen Scan. ID3-Tags von Audiodateien, OPF-Dateien und Textdateien werden neu durchsucht.",
"MessageHeatmapListeningTimeTooltip": "<strong>{0} </strong> auf {1} gehört", "MessageHeatmapListeningTimeTooltip": "<strong>{0} gehört</strong> auf {1}",
"MessageHeatmapNoListeningSessions": "Keine Hörsitzungen am {0}", "MessageHeatmapNoListeningSessions": "Keine Hörsitzungen am {0}",
"MessageImportantNotice": "Wichtiger Hinweis!", "MessageImportantNotice": "Wichtiger Hinweis!",
"MessageInsertChapterBelow": "Kapitel unten einfügen", "MessageInsertChapterBelow": "Kapitel unten einfügen",
@@ -888,7 +888,7 @@
"MessageResetChaptersConfirm": "Kapitel und vorgenommenen Änderungen werden zurückgesetzt und rückgängig gemacht! Bist du dir sicher?", "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", "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.", "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", "MessageScheduleRunEveryWeekdayAtTime": "Immer {0} um {1} ausführen",
"MessageSearchResultsFor": "Suchergebnisse für", "MessageSearchResultsFor": "Suchergebnisse für",
"MessageSelected": "{0} ausgewählt", "MessageSelected": "{0} ausgewählt",
@@ -1026,6 +1026,8 @@
"ToastCollectionItemsAddFailed": "Das Hinzufügen von Element(en) zur Sammlung ist fehlgeschlagen", "ToastCollectionItemsAddFailed": "Das Hinzufügen von Element(en) zur Sammlung ist fehlgeschlagen",
"ToastCollectionRemoveSuccess": "Sammlung entfernt", "ToastCollectionRemoveSuccess": "Sammlung entfernt",
"ToastCollectionUpdateSuccess": "Sammlung aktualisiert", "ToastCollectionUpdateSuccess": "Sammlung aktualisiert",
"ToastConnectionNotAvailable": "Verbindung nicht möglich. Bitte später erneut versuchen",
"ToastCoverSearchFailed": "Cover-Suche fehlgeschlagen",
"ToastCoverUpdateFailed": "Cover-Update fehlgeschlagen", "ToastCoverUpdateFailed": "Cover-Update fehlgeschlagen",
"ToastDateTimeInvalidOrIncomplete": "Datum und Zeit sind ungültig oder unvollständig", "ToastDateTimeInvalidOrIncomplete": "Datum und Zeit sind ungültig oder unvollständig",
"ToastDeleteFileFailed": "Die Datei konnte nicht gelöscht werden", "ToastDeleteFileFailed": "Die Datei konnte nicht gelöscht werden",
@@ -1101,11 +1103,11 @@
"ToastPodcastCreateFailed": "Podcast konnte nicht erstellt werden", "ToastPodcastCreateFailed": "Podcast konnte nicht erstellt werden",
"ToastPodcastCreateSuccess": "Podcast erstellt", "ToastPodcastCreateSuccess": "Podcast erstellt",
"ToastPodcastEpisodeUpdated": "Podcast-Folge aktualisiert", "ToastPodcastEpisodeUpdated": "Podcast-Folge aktualisiert",
"ToastPodcastGetFeedFailed": "Fehler beim abrufen des Podcast Feeds", "ToastPodcastGetFeedFailed": "Fehler beim Abrufen des Podcast Feeds",
"ToastPodcastNoEpisodesInFeed": "Keine Episoden in RSS Feed gefunden", "ToastPodcastNoEpisodesInFeed": "Keine Episoden in RSS Feed gefunden",
"ToastPodcastNoRssFeed": "Podcast enthält keinen RSS Feed", "ToastPodcastNoRssFeed": "Podcast enthält keinen RSS Feed",
"ToastProgressIsNotBeingSynced": "Fortschritt wird nicht synchronisiert, Wiedergabe wird neu gestartet", "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", "ToastProviderCreatedSuccess": "Neuer Anbieter hinzugefügt",
"ToastProviderNameAndUrlRequired": "Name und URL notwendig", "ToastProviderNameAndUrlRequired": "Name und URL notwendig",
"ToastProviderRemoveSuccess": "Anbieter entfernt", "ToastProviderRemoveSuccess": "Anbieter entfernt",
+324
View File
@@ -0,0 +1,324 @@
{
"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": "Αρχεία Ebook",
"HeaderEmail": "Ηλεκτρονικό Ταχυδρομίο",
"HeaderEmailSettings": "Ρυθμίσεις Ηλεκτρονικού Ταχυδρομίου",
"HeaderEpisodes": "Επεισόδια",
"HeaderEreaderSettings": "Ρυθμίσεις Ereader",
"HeaderFiles": "Αρχεία",
"HeaderFindChapters": "Εύρεση Κεφαλαίων",
"HeaderItemFiles": "Αρχεία Αντικειμένων",
"HeaderLastListeningSession": "Τελευταία Συνεδρία Ακρόασης",
"HeaderLatestEpisodes": "Τελευταία Επεισόδια",
"HeaderLibraries": "Βιβλιοθήκες",
"HeaderLibraryFiles": "Αρχεία Βιβλιοθήκης",
"HeaderLibraryStats": "Στατιστικά Βιβλιοθήκης",
"HeaderListeningSessions": "Συνεδρίες Ακρόασης",
"HeaderListeningStats": "Στατιστικά Ακρόασης",
"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": "Πληροφορίες Συσκευής",
"LabelDownload": "Λήψη",
"LabelDownloadNEpisodes": "Λήψη {0} επεισοδίων",
"LabelDuration": "Διάρκεια",
"LabelDurationComparisonExactMatch": "(ακριβής ταύτιση)",
"LabelEbook": "Ebook",
"LabelEbooks": "Ebooks",
"LabelEdit": "Επεξεργασία",
"LabelEmail": "Ηλεκτρονικό Ταχυδρομίο",
"LabelEmailSettingsFromAddress": "Από Διεύθυνση",
"LabelEmailSettingsSecure": "Ασφαλές",
"LabelEmailSettingsTestAddress": "Δοκιμή Διεύθυνσης",
"LabelEmbeddedCover": "Ενσωματωμένο Εξώφυλλο",
"LabelEnable": "Ενεργοποίηση",
"LabelEnd": "Τέλος",
"LabelEndOfChapter": "Τέλος Κεφαλαίου",
"LabelEpisode": "Επεισόδιο",
"LabelFile": "Αρχείο",
"LabelFilename": "Όνομα Αρχείου",
"LabelFinished": "Ολοκληρώθηκε",
"LabelFolder": "Φάκελος",
"LabelFontFamily": "Οικογένεια Γραμματοσειράς",
"LabelGenre": "Είδος",
"LabelGenres": "Είδη",
"LabelHost": "Διακομιστής",
"LabelInProgress": "Σε Εξέλιξη",
"LabelLanguage": "Γλώσσα",
"LabelLayoutSinglePage": "Μονή Σελίδα",
"LabelListenAgain": "Επανάληψη Ακρόασης",
"LabelMediaType": "Τύπος Πολυμέσων",
"LabelMore": "Περισσότερα",
"LabelMoreInfo": "Περισσότερες Πληροφορίες",
"LabelName": "Όνομα",
"LabelNarrator": "Αφηγητής",
"LabelNarrators": "Αφηγητές",
"LabelNewestAuthors": "Πρόσφατοι Συγγραφείς",
"LabelNewestEpisodes": "Πρόσφατα Επεισόδια",
"LabelNotStarted": "Δεν Έχει Ξεκινήσει",
"LabelNumberOfEpisodes": "# Επεισοδίων",
"LabelPassword": "Κωδικός Πρόσβασης",
"LabelPath": "Διαδρομή",
"LabelProgress": "Πρόοδος",
"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": "Λήψη επεισοδίου",
"MessageLoading": "Φόρτωση...",
"MessageMarkAsFinished": "Σήμανση ως Ολοκληρωμένο",
"MessageNoItemsFound": "Δεν βρέθηκαν αντικείμενα",
"MessageNoUserPlaylists": "Δεν έχετε λίστες αναπαραγωγής"
}
+3 -3
View File
@@ -588,8 +588,8 @@
"LabelSettingsBookshelfViewHelp": "Skeumorphic design with wooden shelves", "LabelSettingsBookshelfViewHelp": "Skeumorphic design with wooden shelves",
"LabelSettingsChromecastSupport": "Chromecast support", "LabelSettingsChromecastSupport": "Chromecast support",
"LabelSettingsDateFormat": "Date Format", "LabelSettingsDateFormat": "Date Format",
"LabelSettingsEnableWatcher": "Automatically scan libraries for changes", "LabelSettingsEnableWatcher": "Automatically watch libraries for changes",
"LabelSettingsEnableWatcherForLibrary": "Automatically scan library for changes", "LabelSettingsEnableWatcherForLibrary": "Automatically watch library for changes",
"LabelSettingsEnableWatcherHelp": "Enables the automatic adding/updating of items when file changes are detected. *Requires server restart", "LabelSettingsEnableWatcherHelp": "Enables the automatic adding/updating of items when file changes are detected. *Requires server restart",
"LabelSettingsEpubsAllowScriptedContent": "Allow scripted content in epubs", "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.", "LabelSettingsEpubsAllowScriptedContentHelp": "Allow epub files to execute scripts. It is recommended to keep this setting disabled unless you trust the source of the epub files.",
@@ -888,7 +888,7 @@
"MessageResetChaptersConfirm": "Are you sure you want to reset chapters and undo the changes you made?", "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", "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.", "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}", "MessageScheduleRunEveryWeekdayAtTime": "Run every {0} at {1}",
"MessageSearchResultsFor": "Search results for", "MessageSearchResultsFor": "Search results for",
"MessageSelected": "{0} selected", "MessageSelected": "{0} selected",
+134 -97
View File
@@ -20,10 +20,10 @@
"ButtonCheckAndDownloadNewEpisodes": "Comprobar y descargar episodios nuevos", "ButtonCheckAndDownloadNewEpisodes": "Comprobar y descargar episodios nuevos",
"ButtonChooseAFolder": "Elegir una carpeta", "ButtonChooseAFolder": "Elegir una carpeta",
"ButtonChooseFiles": "Elegir archivos", "ButtonChooseFiles": "Elegir archivos",
"ButtonClearFilter": "Quitar filtros", "ButtonClearFilter": "Vaciar filtro",
"ButtonClose": "Cerrar", "ButtonClose": "Cerrar",
"ButtonCloseFeed": "Cerrar suministro", "ButtonCloseFeed": "Cerrar suministro",
"ButtonCloseSession": "Cerrar la sesión abierta", "ButtonCloseSession": "Cerrar sesión abierta",
"ButtonCollections": "Colecciones", "ButtonCollections": "Colecciones",
"ButtonConfigureScanner": "Configurar Escáner", "ButtonConfigureScanner": "Configurar Escáner",
"ButtonCreate": "Crear", "ButtonCreate": "Crear",
@@ -33,27 +33,27 @@
"ButtonEdit": "Editar", "ButtonEdit": "Editar",
"ButtonEditChapters": "Editar capítulos", "ButtonEditChapters": "Editar capítulos",
"ButtonEditPodcast": "Editar pódcast", "ButtonEditPodcast": "Editar pódcast",
"ButtonEnable": "Permitir", "ButtonEnable": "Habilitar",
"ButtonFireAndFail": "Ejecutado y fallido", "ButtonFireAndFail": "Ejecutado y fallido",
"ButtonFireOnTest": "Activar evento de prueba", "ButtonFireOnTest": "Activar evento de prueba",
"ButtonForceReScan": "Forzar Re-Escaneo", "ButtonForceReScan": "Forzar Re-Escaneo",
"ButtonFullPath": "Ruta completa", "ButtonFullPath": "Ruta completa",
"ButtonHide": "Ocultar", "ButtonHide": "Ocultar",
"ButtonHome": "Inicio", "ButtonHome": "Inicio",
"ButtonIssues": "Problemas", "ButtonIssues": "Incidencias",
"ButtonJumpBackward": "Retroceder", "ButtonJumpBackward": "Retroceder",
"ButtonJumpForward": "Adelantar", "ButtonJumpForward": "Adelantar",
"ButtonLatest": "Más recientes", "ButtonLatest": "Más recientes",
"ButtonLibrary": "Biblioteca", "ButtonLibrary": "Biblioteca",
"ButtonLogout": "Salir", "ButtonLogout": "Cerrar Sesión",
"ButtonLookup": "Buscar", "ButtonLookup": "Averiguar",
"ButtonManageTracks": "Gestionar pistas", "ButtonManageTracks": "Gestionar pistas",
"ButtonMapChapterTitles": "Asignar Títulos a Capítulos", "ButtonMapChapterTitles": "Asignar Títulos a Capítulos",
"ButtonMatchAllAuthors": "Encontrar Todos los Autores", "ButtonMatchAllAuthors": "Encontrar Todos los Autores",
"ButtonMatchBooks": "Encontrar Libros", "ButtonMatchBooks": "Cotejar Libros",
"ButtonNevermind": "Olvidar", "ButtonNevermind": "Olvidar",
"ButtonNext": "Siguiente", "ButtonNext": "Siguiente",
"ButtonNextChapter": "Siguiente Capítulo", "ButtonNextChapter": "Siguiente capítulo",
"ButtonNextItemInQueue": "El siguiente elemento en cola", "ButtonNextItemInQueue": "El siguiente elemento en cola",
"ButtonOk": "Aceptar", "ButtonOk": "Aceptar",
"ButtonOpenFeed": "Abrir suministro", "ButtonOpenFeed": "Abrir suministro",
@@ -64,26 +64,26 @@
"ButtonPlaying": "Reproduciendo", "ButtonPlaying": "Reproduciendo",
"ButtonPlaylists": "Listas de reproducción", "ButtonPlaylists": "Listas de reproducción",
"ButtonPrevious": "Anterior", "ButtonPrevious": "Anterior",
"ButtonPreviousChapter": "Capítulo Anterior", "ButtonPreviousChapter": "Capítulo anterior",
"ButtonProbeAudioFile": "Examinar archivo de audio", "ButtonProbeAudioFile": "Sonda del archivo de audio",
"ButtonPurgeAllCache": "Purgar toda la antememoria", "ButtonPurgeAllCache": "Purgar toda la caché",
"ButtonPurgeItemsCache": "Purgar antememoria de elementos", "ButtonPurgeItemsCache": "Purgar caché de elementos",
"ButtonQueueAddItem": "Añadir a la cola", "ButtonQueueAddItem": "Añadir a cola",
"ButtonQueueRemoveItem": "Quitar de la cola", "ButtonQueueRemoveItem": "Quitar de cola",
"ButtonQuickEmbed": "Inserción rápida", "ButtonQuickEmbed": "Inserción rápida",
"ButtonQuickEmbedMetadata": "Agregue metadatos rápidamente", "ButtonQuickEmbedMetadata": "Empotrar metadatos rápidamente",
"ButtonQuickMatch": "Encontrar Rápido", "ButtonQuickMatch": "Cotejo Rápido",
"ButtonReScan": "Re-Escanear", "ButtonReScan": "Re-Escanear",
"ButtonRead": "Leer", "ButtonRead": "Leer",
"ButtonReadLess": "Leer menos", "ButtonReadLess": "Leer menos",
"ButtonReadMore": "Leer más", "ButtonReadMore": "Leer más",
"ButtonRefresh": "Actualizar", "ButtonRefresh": "Recargar",
"ButtonRemove": "Quitar", "ButtonRemove": "Quitar",
"ButtonRemoveAll": "Quitar todo", "ButtonRemoveAll": "Quitar todo",
"ButtonRemoveAllLibraryItems": "Quitar todos los elementos de la biblioteca", "ButtonRemoveAllLibraryItems": "Quitar todos los elementos de la biblioteca",
"ButtonRemoveFromContinueListening": "Quitar de Continuar escuchando", "ButtonRemoveFromContinueListening": "Quitar desde Escucha Continua",
"ButtonRemoveFromContinueReading": "Quitar de Continuar leyendo", "ButtonRemoveFromContinueReading": "Quitar desde Continuar Leyendo",
"ButtonRemoveSeriesFromContinueSeries": "Quitar serie de Continuar serie", "ButtonRemoveSeriesFromContinueSeries": "Quitar Series desde Series Continuas",
"ButtonReset": "Restablecer", "ButtonReset": "Restablecer",
"ButtonResetToDefault": "Restaurar valores predeterminados", "ButtonResetToDefault": "Restaurar valores predeterminados",
"ButtonRestore": "Restaurar", "ButtonRestore": "Restaurar",
@@ -92,47 +92,47 @@
"ButtonSaveTracklist": "Guardar lista de pistas", "ButtonSaveTracklist": "Guardar lista de pistas",
"ButtonScan": "Escanear", "ButtonScan": "Escanear",
"ButtonScanLibrary": "Escanear biblioteca", "ButtonScanLibrary": "Escanear biblioteca",
"ButtonScrollLeft": "Desplazarse hacia la izquierda", "ButtonScrollLeft": "Desplazarse a la izquierda",
"ButtonScrollRight": "Desplazarse hacia la derecha", "ButtonScrollRight": "Desplazarse a la derecha",
"ButtonSearch": "Buscar", "ButtonSearch": "Buscar",
"ButtonSelectFolderPath": "Seleccionar ruta de carpeta", "ButtonSelectFolderPath": "Seleccionar ruta de carpeta",
"ButtonSeries": "Series", "ButtonSeries": "Series",
"ButtonSetChaptersFromTracks": "Seleccionar Capítulos Según las Pistas", "ButtonSetChaptersFromTracks": "Establecer capítulos según las pistas",
"ButtonShare": "Compartir", "ButtonShare": "Compartir",
"ButtonShiftTimes": "Desplazar Tiempos", "ButtonShiftTimes": "Veces de Desplazo",
"ButtonShow": "Mostrar", "ButtonShow": "Mostrar",
"ButtonStartM4BEncode": "Iniciar Codificación M4B", "ButtonStartM4BEncode": "Iniciar Codificación M4B",
"ButtonStartMetadataEmbed": "Iniciar la Inserción de Metadata", "ButtonStartMetadataEmbed": "Iniciar Inserción de Metadatos",
"ButtonStats": "Estadísticas", "ButtonStats": "Estadísticas",
"ButtonSubmit": "Enviar", "ButtonSubmit": "Entregar",
"ButtonTest": "Prueba", "ButtonTest": "Prueba",
"ButtonUnlinkOpenId": "Desvincular OpenID", "ButtonUnlinkOpenId": "Desenlazar OpenID",
"ButtonUpload": "Cargar", "ButtonUpload": "Subir",
"ButtonUploadBackup": "Cargar respaldo", "ButtonUploadBackup": "Subir Respaldo",
"ButtonUploadCover": "Cargar cubierta", "ButtonUploadCover": "Subir Cubierta",
"ButtonUploadOPMLFile": "Cargar archivo OPML", "ButtonUploadOPMLFile": "Subir archivo OPML",
"ButtonUserDelete": "Eliminar usuario {0}", "ButtonUserDelete": "Eliminar usuario {0}",
"ButtonUserEdit": "Editar usuario {0}", "ButtonUserEdit": "Editar usuario {0}",
"ButtonViewAll": "Ver todo", "ButtonViewAll": "Ver todo",
"ButtonYes": "Sí", "ButtonYes": "Sí",
"ErrorUploadFetchMetadataAPI": "Error al recuperar los metadatos", "ErrorUploadFetchMetadataAPI": "Error al recuperar los metadatos",
"ErrorUploadFetchMetadataNoResults": "No se pudieron recuperar los metadatos; pruebe a actualizar el título o autor", "ErrorUploadFetchMetadataNoResults": "No se pudieron recuperar los metadatos; pruebe a actualizar el título y/o autor",
"ErrorUploadLacksTitle": "Debe tener título", "ErrorUploadLacksTitle": "Debe tener un título",
"HeaderAccount": "Cuenta", "HeaderAccount": "Cuenta",
"HeaderAddCustomMetadataProvider": "Añadir proveedor de metadatos personalizado", "HeaderAddCustomMetadataProvider": "Añadir proveedor de metadatos personalizado",
"HeaderAdvanced": "Avanzado", "HeaderAdvanced": "Avanzado",
"HeaderApiKeys": "Claves API", "HeaderApiKeys": "Claves API",
"HeaderAppriseNotificationSettings": "Configuración de notificaciones de Apprise", "HeaderAppriseNotificationSettings": "Ajustes de notificaciones de Apprise",
"HeaderAudioTracks": "Pistas de audio", "HeaderAudioTracks": "Pistas de Audio",
"HeaderAudiobookTools": "Herramientas de Gestión de Archivos de Audiolibro", "HeaderAudiobookTools": "Herramientas de Gestión de Archivos de Audiolibro",
"HeaderAuthentication": "Autenticación", "HeaderAuthentication": "Autenticación",
"HeaderBackups": "Respaldos", "HeaderBackups": "Respaldos",
"HeaderBulkChapterModal": "Añadir Múltiples Capítulos", "HeaderBulkChapterModal": "Añadir Múltiples Capítulos",
"HeaderChangePassword": "Cambiar contraseña", "HeaderChangePassword": "Cambiar Contraseña",
"HeaderChapters": "Capítulos", "HeaderChapters": "Capítulos",
"HeaderChooseAFolder": "Escoger una Carpeta", "HeaderChooseAFolder": "Escoger una Carpeta",
"HeaderCollection": "Colección", "HeaderCollection": "Colección",
"HeaderCollectionItems": "Elementos en la colección", "HeaderCollectionItems": "Elementos de colección",
"HeaderCover": "Cubierta", "HeaderCover": "Cubierta",
"HeaderCurrentDownloads": "Descargas actuales", "HeaderCurrentDownloads": "Descargas actuales",
"HeaderCustomMessageOnLogin": "Mensaje personalizado al acceder", "HeaderCustomMessageOnLogin": "Mensaje personalizado al acceder",
@@ -140,49 +140,49 @@
"HeaderDetails": "Detalles", "HeaderDetails": "Detalles",
"HeaderDownloadQueue": "Cola de descargas", "HeaderDownloadQueue": "Cola de descargas",
"HeaderEbookFiles": "Archivos de libros digitales", "HeaderEbookFiles": "Archivos de libros digitales",
"HeaderEmail": "Correo electrónico", "HeaderEmail": "Correo-e",
"HeaderEmailSettings": "Configuración de correo electrónico", "HeaderEmailSettings": "Ajustes de correo-e",
"HeaderEpisodes": "Episodios", "HeaderEpisodes": "Episodios",
"HeaderEreaderDevices": "Dispositivos Ereader", "HeaderEreaderDevices": "Dispositivos Lector-e",
"HeaderEreaderSettings": "Configuración del lector", "HeaderEreaderSettings": "Ajustes del Lector-e",
"HeaderFiles": "Archivos", "HeaderFiles": "Archivos",
"HeaderFindChapters": "Buscar capítulos", "HeaderFindChapters": "Buscar capítulos",
"HeaderIgnoredFiles": "Archivos ignorados", "HeaderIgnoredFiles": "Archivos ignorados",
"HeaderItemFiles": "Archivos de elementos", "HeaderItemFiles": "Archivos del elemento",
"HeaderItemMetadataUtils": "Utilidades de metadatos de elementos", "HeaderItemMetadataUtils": "Utilidades de metadatos del elemento",
"HeaderLastListeningSession": "Última sesión de escucha", "HeaderLastListeningSession": "Última sesión de escucha",
"HeaderLatestEpisodes": "Episodios más recientes", "HeaderLatestEpisodes": "Episodios más recientes",
"HeaderLibraries": "Bibliotecas", "HeaderLibraries": "Bibliotecas",
"HeaderLibraryFiles": "Archivos de biblioteca", "HeaderLibraryFiles": "Archivos de biblioteca",
"HeaderLibraryStats": "Estadísticas de biblioteca", "HeaderLibraryStats": "Estadísticas de biblioteca",
"HeaderListeningSessions": "Sesión", "HeaderListeningSessions": "Sesiones Listadas",
"HeaderListeningStats": "Estadísticas de Tiempo Escuchado", "HeaderListeningStats": "Estadísticas de Tiempo Escuchado",
"HeaderLogin": "Acceder", "HeaderLogin": "Inicio de Sesión",
"HeaderLogs": "Registros", "HeaderLogs": "Bitácoras",
"HeaderManageGenres": "Gestionar géneros", "HeaderManageGenres": "Gestionar géneros",
"HeaderManageTags": "Gestionar etiquetas", "HeaderManageTags": "Gestionar etiquetas",
"HeaderMapDetails": "Asignar Detalles", "HeaderMapDetails": "Asignar Detalles",
"HeaderMatch": "Encontrar", "HeaderMatch": "Coincidir",
"HeaderMetadataOrderOfPrecedence": "Orden de precedencia de metadatos", "HeaderMetadataOrderOfPrecedence": "Orden de precedencia de metadatos",
"HeaderMetadataToEmbed": "Metadatos para Insertar", "HeaderMetadataToEmbed": "Metadatos para empotrar",
"HeaderNewAccount": "Cuenta nueva", "HeaderNewAccount": "Crear Cuenta",
"HeaderNewApiKey": "Nueva clave API", "HeaderNewApiKey": "Nueva clave API",
"HeaderNewLibrary": "Biblioteca nueva", "HeaderNewLibrary": "Biblioteca nueva",
"HeaderNotificationCreate": "Crear notificación", "HeaderNotificationCreate": "Crear Notificación",
"HeaderNotificationUpdate": "Notificación de actualización", "HeaderNotificationUpdate": "Notificación de Actualización",
"HeaderNotifications": "Notificaciones", "HeaderNotifications": "Notificaciones",
"HeaderOpenIDConnectAuthentication": "Autenticación OpenID Connect", "HeaderOpenIDConnectAuthentication": "Autenticación OpenID Connect",
"HeaderOpenListeningSessions": "Sesiones públicas de escucha", "HeaderOpenListeningSessions": "Abrir escucha de sesiones",
"HeaderOpenRSSFeed": "Abrir suministro RSS", "HeaderOpenRSSFeed": "Abrir suministro RSS",
"HeaderOtherFiles": "Otros archivos", "HeaderOtherFiles": "Otros archivos",
"HeaderPasswordAuthentication": "Autenticación por contraseña", "HeaderPasswordAuthentication": "Autenticación por contraseña",
"HeaderPermissions": "Permisos", "HeaderPermissions": "Permisos",
"HeaderPlayerQueue": "Cola del reproductor", "HeaderPlayerQueue": "Cola del reproductor",
"HeaderPlayerSettings": "Configuración del reproductor", "HeaderPlayerSettings": "Ajustes del reproductor",
"HeaderPlaylist": "Lista de reproducción", "HeaderPlaylist": "Lista de reproducción",
"HeaderPlaylistItems": "Elementos de lista de reproducción", "HeaderPlaylistItems": "Elementos de lista de reproducción",
"HeaderPodcastsToAdd": "Pódcast para añadir", "HeaderPodcastsToAdd": "Pódcast para añadir",
"HeaderPresets": "Preconfiguraciones", "HeaderPresets": "Preajustes",
"HeaderPreviewCover": "Previsualizar cubierta", "HeaderPreviewCover": "Previsualizar cubierta",
"HeaderRSSFeedGeneral": "Detalles de RSS", "HeaderRSSFeedGeneral": "Detalles de RSS",
"HeaderRSSFeedIsOpen": "El suministro RSS está abierto", "HeaderRSSFeedIsOpen": "El suministro RSS está abierto",
@@ -191,18 +191,18 @@
"HeaderRemoveEpisodes": "Quitar {0} episodios", "HeaderRemoveEpisodes": "Quitar {0} episodios",
"HeaderSavedMediaProgress": "Guardar Progreso de Multimedia", "HeaderSavedMediaProgress": "Guardar Progreso de Multimedia",
"HeaderSchedule": "Horario", "HeaderSchedule": "Horario",
"HeaderScheduleEpisodeDownloads": "Programar descargas automáticas de episodios", "HeaderScheduleEpisodeDownloads": "Planificador de autodescargas de episodios",
"HeaderScheduleLibraryScans": "Programar Escaneo Automático de Biblioteca", "HeaderScheduleLibraryScans": "Planificar AutoEscaneo de Biblioteca",
"HeaderSession": "Sesión", "HeaderSession": "Sesión",
"HeaderSetBackupSchedule": "Programar Respaldo", "HeaderSetBackupSchedule": "Establecer Planificación de Respaldo",
"HeaderSettings": "Configuración", "HeaderSettings": "Ajustes",
"HeaderSettingsDisplay": "Interfaz", "HeaderSettingsDisplay": "Interfaz",
"HeaderSettingsExperimental": "Funcionalidades experimentales", "HeaderSettingsExperimental": "Características experimentales",
"HeaderSettingsGeneral": "Generales", "HeaderSettingsGeneral": "Generales",
"HeaderSettingsScanner": "Escáner", "HeaderSettingsScanner": "Escáner",
"HeaderSettingsSecurity": "Seguridad", "HeaderSettingsSecurity": "Seguridad",
"HeaderSettingsWebClient": "Cliente web", "HeaderSettingsWebClient": "Cliente web",
"HeaderSleepTimer": "Temporizador de apagado", "HeaderSleepTimer": "Cronómetro de dormida",
"HeaderStatsLargestItems": "Elementos más grandes", "HeaderStatsLargestItems": "Elementos más grandes",
"HeaderStatsLongestItems": "Elementos más extensos (h)", "HeaderStatsLongestItems": "Elementos más extensos (h)",
"HeaderStatsMinutesListeningChart": "Minutos escuchando (últimos 7 días)", "HeaderStatsMinutesListeningChart": "Minutos escuchando (últimos 7 días)",
@@ -233,25 +233,29 @@
"LabelAddToCollectionBatch": "Añadir {0} libros a colección", "LabelAddToCollectionBatch": "Añadir {0} libros a colección",
"LabelAddToPlaylist": "Añadir a lista de reproducción", "LabelAddToPlaylist": "Añadir a lista de reproducción",
"LabelAddToPlaylistBatch": "Añadir {0} elementos a lista de reproducción", "LabelAddToPlaylistBatch": "Añadir {0} elementos a lista de reproducción",
"LabelAddedAt": "Añadido", "LabelAddedAt": "Añadido en",
"LabelAddedDate": "{0} Añadido", "LabelAddedDate": "Añadido {0}",
"LabelAdminUsersOnly": "Solamente usuarios administradores", "LabelAdminUsersOnly": "Solamente usuarios administradores",
"LabelAll": "Todos", "LabelAll": "Todos",
"LabelAllEpisodesDownloaded": "Todos los episodios descargados", "LabelAllEpisodesDownloaded": "Todos los episodios descargados",
"LabelAllUsers": "Todos los usuarios", "LabelAllUsers": "Todos los usuarios",
"LabelAllUsersExcludingGuests": "Todos los usuarios excepto invitados", "LabelAllUsersExcludingGuests": "Todos los usuarios excepto invitados",
"LabelAllUsersIncludingGuests": "Todos los usuarios e invitados", "LabelAllUsersIncludingGuests": "Todos los usuarios e invitados",
"LabelAlreadyInYourLibrary": "Ya existe en la Biblioteca", "LabelAlreadyInYourLibrary": "Ya dentro de tu biblioteca",
"LabelApiToken": "Token de la API", "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", "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)", "LabelAudioChannels": "Canales de audio (1 o 2)",
"LabelAudioCodec": "Códec de audio", "LabelAudioCodec": "Códec de audio",
"LabelAuthor": "Autor", "LabelAuthor": "Autor",
"LabelAuthorFirstLast": "Autor (Nombre Apellido)", "LabelAuthorFirstLast": "Autor (Nombre Apellido)",
"LabelAuthorLastFirst": "Autor (Apellido, Nombre)", "LabelAuthorLastFirst": "Autor (Apellido, Nombre)",
"LabelAuthors": "Autores", "LabelAuthors": "Autores",
"LabelAutoDownloadEpisodes": "Descargar episodios automáticamente", "LabelAutoDownloadEpisodes": "AutoDescargar episodios",
"LabelAutoFetchMetadata": "Recuperar metadatos automáticamente", "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.", "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", "LabelAutoLaunch": "Lanzamiento automático",
@@ -282,15 +286,16 @@
"LabelClickToUseCurrentValue": "Pulse para utilizar el valor actual", "LabelClickToUseCurrentValue": "Pulse para utilizar el valor actual",
"LabelClosePlayer": "Cerrar reproductor", "LabelClosePlayer": "Cerrar reproductor",
"LabelCodec": "Codec", "LabelCodec": "Codec",
"LabelCollapseSeries": "Colapsar serie", "LabelCollapseSeries": "Colapsar Series",
"LabelCollapseSubSeries": "Contraer la subserie", "LabelCollapseSubSeries": "Contraer la subserie",
"LabelCollection": "Colección", "LabelCollection": "Colección",
"LabelCollections": "Colecciones", "LabelCollections": "Colecciones",
"LabelComplete": "Completo", "LabelComplete": "Completo",
"LabelConfirmPassword": "Confirmar contraseña", "LabelConfirmPassword": "Confirmar contraseña",
"LabelContinueListening": "Seguir escuchando", "LabelContinueListening": "Seguir Escuchando",
"LabelContinueReading": "Continuar leyendo", "LabelContinueReading": "Continuar leyendo",
"LabelContinueSeries": "Continuar series", "LabelContinueSeries": "Continuar series",
"LabelCorsAllowed": "Orígenes CORS Permitidos",
"LabelCover": "Cubierta", "LabelCover": "Cubierta",
"LabelCoverImageURL": "URL de imagen de cubierta", "LabelCoverImageURL": "URL de imagen de cubierta",
"LabelCoverProvider": "Proveedor de cubiertas", "LabelCoverProvider": "Proveedor de cubiertas",
@@ -320,14 +325,14 @@
"LabelDurationComparisonLonger": "({0} más largo)", "LabelDurationComparisonLonger": "({0} más largo)",
"LabelDurationComparisonShorter": "({0} más corto)", "LabelDurationComparisonShorter": "({0} más corto)",
"LabelDurationFound": "Duración Comprobada:", "LabelDurationFound": "Duración Comprobada:",
"LabelEbook": "Libro electrónico", "LabelEbook": "Libro-e",
"LabelEbooks": "Libros electrónicos", "LabelEbooks": "Libros-e",
"LabelEdit": "Editar", "LabelEdit": "Editar",
"LabelEmail": "Correo electrónico", "LabelEmail": "Correo electrónico",
"LabelEmailSettingsFromAddress": "Remitente", "LabelEmailSettingsFromAddress": "Remitente",
"LabelEmailSettingsRejectUnauthorized": "Rechazar certificados no autorizados", "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.", "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)", "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", "LabelEmailSettingsTestAddress": "Probar dirección",
"LabelEmbeddedCover": "Cubierta incrustada", "LabelEmbeddedCover": "Cubierta incrustada",
@@ -354,6 +359,10 @@
"LabelExample": "Ejemplo", "LabelExample": "Ejemplo",
"LabelExpandSeries": "Ampliar serie", "LabelExpandSeries": "Ampliar serie",
"LabelExpandSubSeries": "Expandir la subserie", "LabelExpandSubSeries": "Expandir la subserie",
"LabelExpired": "Expirado",
"LabelExpiresAt": "Expira El",
"LabelExpiresInSeconds": "Expira en (segundos)",
"LabelExpiresNever": "Nunca",
"LabelExplicit": "Explícito", "LabelExplicit": "Explícito",
"LabelExplicitChecked": "Explícito (marcado)", "LabelExplicitChecked": "Explícito (marcado)",
"LabelExplicitUnchecked": "No Explícito (sin marcar)", "LabelExplicitUnchecked": "No Explícito (sin marcar)",
@@ -368,11 +377,12 @@
"LabelFilename": "Nombre del archivo", "LabelFilename": "Nombre del archivo",
"LabelFilterByUser": "Filtrar por Usuario", "LabelFilterByUser": "Filtrar por Usuario",
"LabelFindEpisodes": "Buscar Episodio", "LabelFindEpisodes": "Buscar Episodio",
"LabelFinished": "Terminado", "LabelFinished": "Finalizado",
"LabelFinishedDate": "Finalizado {0}",
"LabelFolder": "Carpeta", "LabelFolder": "Carpeta",
"LabelFolders": "Carpetas", "LabelFolders": "Carpetas",
"LabelFontBold": "Negrilla", "LabelFontBold": "Negrilla",
"LabelFontBoldness": "Peso tipográfico", "LabelFontBoldness": "Tipográfico sin Negrita",
"LabelFontFamily": "Familia tipográfica", "LabelFontFamily": "Familia tipográfica",
"LabelFontItalic": "Itálica", "LabelFontItalic": "Itálica",
"LabelFontScale": "Escala de letra", "LabelFontScale": "Escala de letra",
@@ -382,8 +392,8 @@
"LabelGenre": "Género", "LabelGenre": "Género",
"LabelGenres": "Géneros", "LabelGenres": "Géneros",
"LabelHardDeleteFile": "Eliminar Definitivamente", "LabelHardDeleteFile": "Eliminar Definitivamente",
"LabelHasEbook": "Tiene un libro", "LabelHasEbook": "Tiene libro-e",
"LabelHasSupplementaryEbook": "Tiene un libro complementario", "LabelHasSupplementaryEbook": "Tiene un libro-e suplementario",
"LabelHideSubtitles": "Ocultar subtítulos", "LabelHideSubtitles": "Ocultar subtítulos",
"LabelHighestPriority": "Mayor prioridad", "LabelHighestPriority": "Mayor prioridad",
"LabelHost": "Anfitrión", "LabelHost": "Anfitrión",
@@ -413,6 +423,7 @@
"LabelLanguages": "Idiomas", "LabelLanguages": "Idiomas",
"LabelLastBookAdded": "Último libro añadido", "LabelLastBookAdded": "Último libro añadido",
"LabelLastBookUpdated": "Último libro actualizado", "LabelLastBookUpdated": "Último libro actualizado",
"LabelLastProgressDate": "Último progreso: {0}",
"LabelLastSeen": "Última Vez Visto", "LabelLastSeen": "Última Vez Visto",
"LabelLastTime": "Última Vez", "LabelLastTime": "Última Vez",
"LabelLastUpdate": "Última Actualización", "LabelLastUpdate": "Última Actualización",
@@ -425,6 +436,9 @@
"LabelLibraryFilterSublistEmpty": "Sin {0}", "LabelLibraryFilterSublistEmpty": "Sin {0}",
"LabelLibraryItem": "Elemento de Biblioteca", "LabelLibraryItem": "Elemento de Biblioteca",
"LabelLibraryName": "Nombre de Biblioteca", "LabelLibraryName": "Nombre de Biblioteca",
"LabelLibrarySortByProgress": "Progreso: Último actualizado",
"LabelLibrarySortByProgressFinished": "Progreso: Finalizado",
"LabelLibrarySortByProgressStarted": "Progreso: Iniciado",
"LabelLimit": "Limites", "LabelLimit": "Limites",
"LabelLineSpacing": "Interlineado", "LabelLineSpacing": "Interlineado",
"LabelListenAgain": "Volver a escuchar", "LabelListenAgain": "Volver a escuchar",
@@ -433,6 +447,7 @@
"LabelLogLevelWarn": "Advertencia", "LabelLogLevelWarn": "Advertencia",
"LabelLookForNewEpisodesAfterDate": "Buscar Nuevos Episodios a partir de esta Fecha", "LabelLookForNewEpisodesAfterDate": "Buscar Nuevos Episodios a partir de esta Fecha",
"LabelLowestPriority": "Menor prioridad", "LabelLowestPriority": "Menor prioridad",
"LabelMatchConfidence": "Confidencia",
"LabelMatchExistingUsersBy": "Emparejar a los usuarios existentes por", "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", "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.", "LabelMaxEpisodesToDownload": "Número máximo # de episodios para descargar. Usa 0 para descargar una cantidad ilimitada.",
@@ -451,7 +466,7 @@
"LabelMissingEbook": "No tiene libro electrónico", "LabelMissingEbook": "No tiene libro electrónico",
"LabelMissingSupplementaryEbook": "No tiene libro electrónico suplementario", "LabelMissingSupplementaryEbook": "No tiene libro electrónico suplementario",
"LabelMobileRedirectURIs": "URIs de redirección a móviles permitidos", "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 redireccionamiento 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", "LabelMore": "Más",
"LabelMoreInfo": "Más información", "LabelMoreInfo": "Más información",
"LabelName": "Nombre", "LabelName": "Nombre",
@@ -464,9 +479,10 @@
"LabelNextBackupDate": "Fecha del siguiente respaldo", "LabelNextBackupDate": "Fecha del siguiente respaldo",
"LabelNextChapters": "Los próximos capítulos serán:", "LabelNextChapters": "Los próximos capítulos serán:",
"LabelNextScheduledRun": "Próxima ejecución programada", "LabelNextScheduledRun": "Próxima ejecución programada",
"LabelNoApiKeys": "Sin claves API",
"LabelNoCustomMetadataProviders": "Sin proveedores de metadatos personalizados", "LabelNoCustomMetadataProviders": "Sin proveedores de metadatos personalizados",
"LabelNoEpisodesSelected": "Ningún Episodio Seleccionado", "LabelNoEpisodesSelected": "Ningún Episodio Seleccionado",
"LabelNotFinished": "No terminado", "LabelNotFinished": "No finalizado",
"LabelNotStarted": "Sin iniciar", "LabelNotStarted": "Sin iniciar",
"LabelNotes": "Notas", "LabelNotes": "Notas",
"LabelNotificationAppriseURL": "URL(s) de Apprise", "LabelNotificationAppriseURL": "URL(s) de Apprise",
@@ -480,7 +496,7 @@
"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.", "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", "LabelNumberOfBooks": "Número de libros",
"LabelNumberOfChapters": "Número de capítulos:", "LabelNumberOfChapters": "Número de capítulos:",
"LabelNumberOfEpisodes": "N.º de episodios", "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:", "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».", "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.", "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.",
@@ -510,7 +526,7 @@
"LabelPodcasts": "Pódcast", "LabelPodcasts": "Pódcast",
"LabelPort": "Puerto", "LabelPort": "Puerto",
"LabelPrefixesToIgnore": "Prefijos para ignorar (no distingue entre mayúsculas y minúsculas)", "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", "LabelPrimaryEbook": "Libro electrónico principal",
"LabelProgress": "Progreso", "LabelProgress": "Progreso",
"LabelProvider": "Proveedor", "LabelProvider": "Proveedor",
@@ -522,11 +538,11 @@
"LabelPublishedDecades": "Décadas publicadas", "LabelPublishedDecades": "Décadas publicadas",
"LabelPublisher": "Editor", "LabelPublisher": "Editor",
"LabelPublishers": "Editores", "LabelPublishers": "Editores",
"LabelRSSFeedCustomOwnerEmail": "Correo electrónico de dueño personalizado", "LabelRSSFeedCustomOwnerEmail": "Correo-e de propietario personalizado",
"LabelRSSFeedCustomOwnerName": "Nombre de dueño personalizado", "LabelRSSFeedCustomOwnerName": "Nombre de propietario personalizado",
"LabelRSSFeedOpen": "Suministro RSS abierto", "LabelRSSFeedOpen": "Fuente RSS Abierta",
"LabelRSSFeedPreventIndexing": "Evitar indización", "LabelRSSFeedPreventIndexing": "Evitar indización",
"LabelRSSFeedSlug": "«Slug» de suministro RSS", "LabelRSSFeedSlug": "Ficha de suministro RSS",
"LabelRSSFeedURL": "URL de suministro RSS", "LabelRSSFeedURL": "URL de suministro RSS",
"LabelRandomly": "Aleatorio", "LabelRandomly": "Aleatorio",
"LabelReAddSeriesToContinueListening": "Volver a agregar la serie para continuar escuchándola", "LabelReAddSeriesToContinueListening": "Volver a agregar la serie para continuar escuchándola",
@@ -554,11 +570,12 @@
"LabelSelectAll": "Seleccionar todo", "LabelSelectAll": "Seleccionar todo",
"LabelSelectAllEpisodes": "Seleccionar todos los episodios", "LabelSelectAllEpisodes": "Seleccionar todos los episodios",
"LabelSelectEpisodesShowing": "Seleccionar los {0} episodios visibles", "LabelSelectEpisodesShowing": "Seleccionar los {0} episodios visibles",
"LabelSelectUser": "Seleccionar usuario",
"LabelSelectUsers": "Seleccionar usuarios", "LabelSelectUsers": "Seleccionar usuarios",
"LabelSendEbookToDevice": "Enviar libro electrónico a...", "LabelSendEbookToDevice": "Enviar libro electrónico a...",
"LabelSequence": "Secuencia", "LabelSequence": "Secuencia",
"LabelSerial": "En serie", "LabelSerial": "En serie",
"LabelSeries": "Serie", "LabelSeries": "Series",
"LabelSeriesName": "Nombre de la serie", "LabelSeriesName": "Nombre de la serie",
"LabelSeriesProgress": "Progreso de la serie", "LabelSeriesProgress": "Progreso de la serie",
"LabelServerLogLevel": "Nivel de registro del servidor", "LabelServerLogLevel": "Nivel de registro del servidor",
@@ -571,8 +588,8 @@
"LabelSettingsBookshelfViewHelp": "Diseño Esqueuomorfo con Estantes de Madera", "LabelSettingsBookshelfViewHelp": "Diseño Esqueuomorfo con Estantes de Madera",
"LabelSettingsChromecastSupport": "Compatibilidad con Chromecast", "LabelSettingsChromecastSupport": "Compatibilidad con Chromecast",
"LabelSettingsDateFormat": "Formato de Fecha", "LabelSettingsDateFormat": "Formato de Fecha",
"LabelSettingsEnableWatcher": "Buscar cambios automáticamente en las bibliotecas", "LabelSettingsEnableWatcher": "Vigilar automáticamente los cambios en bibliotecas",
"LabelSettingsEnableWatcherForLibrary": "Buscar cambios automáticamente en la biblioteca", "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", "LabelSettingsEnableWatcherHelp": "Permite agregar/actualizar elementos automáticamente cuando se detectan cambios en los archivos. *Requiere reiniciar el servidor",
"LabelSettingsEpubsAllowScriptedContent": "Permitir scripts en epubs", "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.", "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.",
@@ -605,14 +622,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", "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", "LabelSettingsTimeFormat": "Formato de Tiempo",
"LabelShare": "Compartir", "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", "LabelShareOpen": "abrir un recurso compartido",
"LabelShareURL": "Compartir la URL", "LabelShareURL": "Compartir la URL",
"LabelShowAll": "Mostrar todo", "LabelShowAll": "Mostrar todo",
"LabelShowSeconds": "Mostrar segundos", "LabelShowSeconds": "Mostrar segundos",
"LabelShowSubtitles": "Mostrar subtítulos", "LabelShowSubtitles": "Mostrar subtítulos",
"LabelSize": "Tamaño", "LabelSize": "Tamaño",
"LabelSleepTimer": "Temporizador de apagado", "LabelSleepTimer": "Temporizador de dormida",
"LabelSlug": "Slug", "LabelSlug": "Slug",
"LabelSortAscending": "Ascendente", "LabelSortAscending": "Ascendente",
"LabelSortDescending": "Descendente", "LabelSortDescending": "Descendente",
@@ -621,6 +638,7 @@
"LabelStartTime": "Tiempo de Inicio", "LabelStartTime": "Tiempo de Inicio",
"LabelStarted": "Iniciado", "LabelStarted": "Iniciado",
"LabelStartedAt": "Iniciado En", "LabelStartedAt": "Iniciado En",
"LabelStartedDate": "Iniciado {0}",
"LabelStatsAudioTracks": "Pistas de Audio", "LabelStatsAudioTracks": "Pistas de Audio",
"LabelStatsAuthors": "Autores", "LabelStatsAuthors": "Autores",
"LabelStatsBestDay": "Mejor día", "LabelStatsBestDay": "Mejor día",
@@ -650,6 +668,7 @@
"LabelTheme": "Tema", "LabelTheme": "Tema",
"LabelThemeDark": "Oscuro", "LabelThemeDark": "Oscuro",
"LabelThemeLight": "Claro", "LabelThemeLight": "Claro",
"LabelThemeSepia": "Sepia",
"LabelTimeBase": "Tiempo Base", "LabelTimeBase": "Tiempo Base",
"LabelTimeDurationXHours": "{0} horas", "LabelTimeDurationXHours": "{0} horas",
"LabelTimeDurationXMinutes": "{0} minutos", "LabelTimeDurationXMinutes": "{0} minutos",
@@ -718,8 +737,10 @@
"MessageAddToPlayerQueue": "Agregar a fila del Reproductor", "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>.", "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.", "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.", "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", "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í.", "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", "MessageBackupsLocationPathEmpty": "La ruta de la copia de seguridad no puede estar vacía",
@@ -741,6 +762,7 @@
"MessageChaptersNotFound": "Capítulos no encontrados", "MessageChaptersNotFound": "Capítulos no encontrados",
"MessageCheckingCron": "Revisando cron...", "MessageCheckingCron": "Revisando cron...",
"MessageConfirmCloseFeed": "¿Confirma que quiere cerrar este suministro?", "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}?", "MessageConfirmDeleteBackup": "¿Confirma que quiere eliminar el respaldo de {0}?",
"MessageConfirmDeleteDevice": "¿Confirma que quiere eliminar el lector electrónico «{0}»?", "MessageConfirmDeleteDevice": "¿Confirma que quiere eliminar el lector electrónico «{0}»?",
"MessageConfirmDeleteFile": "Esto eliminará el archivo del sistema de archivos. ¿Quiere continuar?", "MessageConfirmDeleteFile": "Esto eliminará el archivo del sistema de archivos. ¿Quiere continuar?",
@@ -759,8 +781,8 @@
"MessageConfirmMarkSeriesFinished": "¿Confirma que quiere marcar todos los libros de esta serie como terminados?", "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?", "MessageConfirmMarkSeriesNotFinished": "¿Confirma que quiere marcar todos los libros de esta serie como no terminados?",
"MessageConfirmNotificationTestTrigger": "¿Activar esta notificación con datos de prueba?", "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?", "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 la antememoria de elementos eliminará el directorio completo ubicado en <code>/metadata/cache/items</code>.<br />¿Lo confirma?", "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?", "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?", "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?", "MessageConfirmReScanLibraryItems": "¿Confirma que quiere volver a analizar {0} elementos?",
@@ -768,6 +790,7 @@
"MessageConfirmRemoveAuthor": "¿Confirma que quiere quitar el autor «{0}»?", "MessageConfirmRemoveAuthor": "¿Confirma que quiere quitar el autor «{0}»?",
"MessageConfirmRemoveCollection": "¿Confirma que quiere quitar la colección «{0}»?", "MessageConfirmRemoveCollection": "¿Confirma que quiere quitar la colección «{0}»?",
"MessageConfirmRemoveEpisode": "¿Confirma que quiere quitar el episodio «{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?", "MessageConfirmRemoveEpisodes": "¿Confirma que quiere quitar {0} episodios?",
"MessageConfirmRemoveListeningSessions": "¿Confirma que quiere quitar {0} sesiones de escucha?", "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?", "MessageConfirmRemoveMetadataFiles": "¿Confirma que quiere quitar todos los archivos metadata.{0} en las carpetas de elementos de su biblioteca?",
@@ -785,14 +808,16 @@
"MessageDaysListenedInTheLastYear": "{0} días escuchados el año pasado", "MessageDaysListenedInTheLastYear": "{0} días escuchados el año pasado",
"MessageDownloadingEpisode": "Descargando episodio", "MessageDownloadingEpisode": "Descargando episodio",
"MessageDragFilesIntoTrackOrder": "Arrastre los archivos al orden correcto de las pistas", "MessageDragFilesIntoTrackOrder": "Arrastre los archivos al orden correcto de las pistas",
"MessageEmbedFailed": "Falló la incrustación.", "MessageEmbedFailed": "Incorporación incorrecta.",
"MessageEmbedFinished": "Finalizó la incrustación.", "MessageEmbedFinished": "Incorporación finalizada.",
"MessageEmbedQueue": "En cola para incrustar metadatos ({0} en cola)", "MessageEmbedQueue": "En cola para incrustar metadatos ({0} en cola)",
"MessageEpisodesQueuedForDownload": "{0} episodio(s) en cola para descargar", "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.", "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}", "MessageFeedURLWillBe": "El URL del suministro será {0}",
"MessageFetching": "Recuperando...", "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.", "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!", "MessageImportantNotice": "¡Notificación importante!",
"MessageInsertChapterBelow": "Insertar capítulo debajo", "MessageInsertChapterBelow": "Insertar capítulo debajo",
"MessageInvalidAsin": "ASIN no válido", "MessageInvalidAsin": "ASIN no válido",
@@ -825,7 +850,7 @@
"MessageNoEpisodes": "Ningún episodio", "MessageNoEpisodes": "Ningún episodio",
"MessageNoFoldersAvailable": "Ninguna carpeta disponible", "MessageNoFoldersAvailable": "Ninguna carpeta disponible",
"MessageNoGenres": "Ningún género", "MessageNoGenres": "Ningún género",
"MessageNoIssues": "Ningún número", "MessageNoIssues": "Sin incidencias",
"MessageNoItems": "Ningún elemento", "MessageNoItems": "Ningún elemento",
"MessageNoItemsFound": "Ningún elemento encontrado", "MessageNoItemsFound": "Ningún elemento encontrado",
"MessageNoListeningSessions": "Ninguna sesión de escucha", "MessageNoListeningSessions": "Ninguna sesión de escucha",
@@ -863,7 +888,7 @@
"MessageResetChaptersConfirm": "¿Confirma que quiere deshacer los cambios y restablecer los capítulos a su estado original?", "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", "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.", "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}", "MessageScheduleRunEveryWeekdayAtTime": "Ejecutar cada {0} a las {1}",
"MessageSearchResultsFor": "Resultados de la búsqueda de", "MessageSearchResultsFor": "Resultados de la búsqueda de",
"MessageSelected": "{0} seleccionado(s)", "MessageSelected": "{0} seleccionado(s)",
@@ -929,6 +954,8 @@
"NotificationOnBackupCompletedDescription": "Se activa cuando se completa una copia de seguridad", "NotificationOnBackupCompletedDescription": "Se activa cuando se completa una copia de seguridad",
"NotificationOnBackupFailedDescription": "Se activa cuando falla 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", "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", "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.')", "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", "PlaceholderNewCollection": "Nuevo nombre de la colección",
@@ -987,6 +1014,8 @@
"ToastBulkChapterInvalidCount": "Por favor ingrese un número válido entre 1 y 150", "ToastBulkChapterInvalidCount": "Por favor ingrese un número válido entre 1 y 150",
"ToastCachePurgeFailed": "No se pudo purgar la antememoria", "ToastCachePurgeFailed": "No se pudo purgar la antememoria",
"ToastCachePurgeSuccess": "Se purgó la antememoria correctamente", "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.", "ToastChaptersAllLocked": "Todos los capítulos están bloqueados. Desbloquee algunos capítulos para cambiar sus tiempos.",
"ToastChaptersHaveErrors": "Los capítulos tienen errores", "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.", "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.",
@@ -997,6 +1026,8 @@
"ToastCollectionItemsAddFailed": "Artículo(s) añadido(s) a la colección fallido(s)", "ToastCollectionItemsAddFailed": "Artículo(s) añadido(s) a la colección fallido(s)",
"ToastCollectionRemoveSuccess": "Colección quitada", "ToastCollectionRemoveSuccess": "Colección quitada",
"ToastCollectionUpdateSuccess": "Colección actualizada", "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", "ToastCoverUpdateFailed": "Error al actualizar la cubierta",
"ToastDateTimeInvalidOrIncomplete": "Fecha y hora no válidas o incompletas", "ToastDateTimeInvalidOrIncomplete": "Fecha y hora no válidas o incompletas",
"ToastDeleteFileFailed": "Falló la eliminación del archivo", "ToastDeleteFileFailed": "Falló la eliminación del archivo",
@@ -1012,6 +1043,8 @@
"ToastEpisodeDownloadQueueClearSuccess": "Se borró la cola de descargas de los episodios", "ToastEpisodeDownloadQueueClearSuccess": "Se borró la cola de descargas de los episodios",
"ToastEpisodeUpdateSuccess": "{0} episodio(s) actualizado(s)", "ToastEpisodeUpdateSuccess": "{0} episodio(s) actualizado(s)",
"ToastErrorCannotShare": "No se puede compartir de forma nativa en este dispositivo", "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", "ToastFailedToLoadData": "Error al cargar data",
"ToastFailedToMatch": "Error al emparejar", "ToastFailedToMatch": "Error al emparejar",
"ToastFailedToShare": "Error al compartir", "ToastFailedToShare": "Error al compartir",
@@ -1019,6 +1052,7 @@
"ToastInvalidImageUrl": "URL de la imagen no válida", "ToastInvalidImageUrl": "URL de la imagen no válida",
"ToastInvalidMaxEpisodesToDownload": "Número máximo de episodios para descargar no válidos", "ToastInvalidMaxEpisodesToDownload": "Número máximo de episodios para descargar no válidos",
"ToastInvalidUrl": "URL no válida", "ToastInvalidUrl": "URL no válida",
"ToastInvalidUrls": "Una o más URL son inválidas",
"ToastItemCoverUpdateSuccess": "Cubierta del elemento actualizada", "ToastItemCoverUpdateSuccess": "Cubierta del elemento actualizada",
"ToastItemDeletedFailed": "Error al eliminar el elemento", "ToastItemDeletedFailed": "Error al eliminar el elemento",
"ToastItemDeletedSuccess": "Elemento borrado", "ToastItemDeletedSuccess": "Elemento borrado",
@@ -1043,6 +1077,7 @@
"ToastMustHaveAtLeastOnePath": "Debe tener al menos una ruta", "ToastMustHaveAtLeastOnePath": "Debe tener al menos una ruta",
"ToastNameEmailRequired": "Son obligatorios el nombre y el correo electrónico", "ToastNameEmailRequired": "Son obligatorios el nombre y el correo electrónico",
"ToastNameRequired": "Nombre obligatorio", "ToastNameRequired": "Nombre obligatorio",
"ToastNewApiKeyUserError": "Debe seleccionar un usuario",
"ToastNewEpisodesFound": "{0} nuevo(s) episodio(s) encontrado(s)", "ToastNewEpisodesFound": "{0} nuevo(s) episodio(s) encontrado(s)",
"ToastNewUserCreatedFailed": "No se pudo crear la cuenta: «{0}»", "ToastNewUserCreatedFailed": "No se pudo crear la cuenta: «{0}»",
"ToastNewUserCreatedSuccess": "Nueva cuenta creada", "ToastNewUserCreatedSuccess": "Nueva cuenta creada",
@@ -1067,6 +1102,7 @@
"ToastPlaylistUpdateSuccess": "Lista de reproducción actualizada", "ToastPlaylistUpdateSuccess": "Lista de reproducción actualizada",
"ToastPodcastCreateFailed": "No se pudo crear el pódcast", "ToastPodcastCreateFailed": "No se pudo crear el pódcast",
"ToastPodcastCreateSuccess": "Se creó el pódcast correctamente", "ToastPodcastCreateSuccess": "Se creó el pódcast correctamente",
"ToastPodcastEpisodeUpdated": "Episodio actualizado",
"ToastPodcastGetFeedFailed": "No se puede obtener el podcast", "ToastPodcastGetFeedFailed": "No se puede obtener el podcast",
"ToastPodcastNoEpisodesInFeed": "No se han encontrado episodios en el feed del RSS", "ToastPodcastNoEpisodesInFeed": "No se han encontrado episodios en el feed del RSS",
"ToastPodcastNoRssFeed": "El pódcast no tiene suministro RSS", "ToastPodcastNoRssFeed": "El pódcast no tiene suministro RSS",
@@ -1080,8 +1116,8 @@
"ToastRemoveFailed": "Error al eliminar", "ToastRemoveFailed": "Error al eliminar",
"ToastRemoveItemFromCollectionFailed": "Error al eliminar el elemento de la colección", "ToastRemoveItemFromCollectionFailed": "Error al eliminar el elemento de la colección",
"ToastRemoveItemFromCollectionSuccess": "Elemento eliminado de la colección", "ToastRemoveItemFromCollectionSuccess": "Elemento eliminado de la colección",
"ToastRemoveItemsWithIssuesFailed": "Error en la eliminación de 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 incorrectos", "ToastRemoveItemsWithIssuesSuccess": "Se eliminaron artículos de biblioteca con incidencias",
"ToastRenameFailed": "Error al cambiar el nombre", "ToastRenameFailed": "Error al cambiar el nombre",
"ToastRescanFailed": "Error al volver a escanear para {0}", "ToastRescanFailed": "Error al volver a escanear para {0}",
"ToastRescanRemoved": "Se eliminó el elemento reescaneado", "ToastRescanRemoved": "Se eliminó el elemento reescaneado",
@@ -1120,6 +1156,7 @@
"ToastUserRootRequireName": "Debe introducir un nombre de usuario administrativo", "ToastUserRootRequireName": "Debe introducir un nombre de usuario administrativo",
"TooltipAddChapters": "Añadir capítulo(s)", "TooltipAddChapters": "Añadir capítulo(s)",
"TooltipAddOneSecond": "Añadir 1 segundo", "TooltipAddOneSecond": "Añadir 1 segundo",
"TooltipAdjustChapterStart": "Pulse para ajustar la hora de inicio",
"TooltipLockAllChapters": "Bloquear todos los capítulos", "TooltipLockAllChapters": "Bloquear todos los capítulos",
"TooltipLockChapter": "Bloquear capítulo (Mayús+clic para rango)", "TooltipLockChapter": "Bloquear capítulo (Mayús+clic para rango)",
"TooltipSubtractOneSecond": "Restar 1 segundo", "TooltipSubtractOneSecond": "Restar 1 segundo",
+5 -3
View File
@@ -490,13 +490,13 @@
"LabelStatsDaysListened": "Kuulatud päevad", "LabelStatsDaysListened": "Kuulatud päevad",
"LabelStatsHours": "Tunnid", "LabelStatsHours": "Tunnid",
"LabelStatsInARow": "järjest", "LabelStatsInARow": "järjest",
"LabelStatsItemsFinished": "Lõpetatud üksused", "LabelStatsItemsFinished": "Lõpetatud raamatud",
"LabelStatsItemsInLibrary": "Üksused raamatukogus", "LabelStatsItemsInLibrary": "Üksused raamatukogus",
"LabelStatsMinutes": "minuteid", "LabelStatsMinutes": "minuteid",
"LabelStatsMinutesListening": "Kuulamise minutid", "LabelStatsMinutesListening": "Kuulamise minutid",
"LabelStatsOverallDays": "Kokku päevad", "LabelStatsOverallDays": "Kokku päevad",
"LabelStatsOverallHours": "Kokku tunnid", "LabelStatsOverallHours": "Kokku tunnid",
"LabelStatsWeekListening": "Nädala kuulamine", "LabelStatsWeekListening": "Nädala keskmine",
"LabelSubtitle": "Alapealkiri", "LabelSubtitle": "Alapealkiri",
"LabelSupportedFileTypes": "Toetatud failitüübid", "LabelSupportedFileTypes": "Toetatud failitüübid",
"LabelTag": "Silt", "LabelTag": "Silt",
@@ -561,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>.", "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.", "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.", "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", "MessageBookshelfNoRSSFeeds": "Ühtegi RSS-i voogu pole avatud",
"MessageBookshelfNoResultsForFilter": "Filtrile \"{0}: {1}\" pole tulemusi", "MessageBookshelfNoResultsForFilter": "Filtrile \"{0}: {1}\" pole tulemusi",
"MessageBookshelfNoSeries": "Teil pole ühtegi seeriat", "MessageBookshelfNoSeries": "Teil pole ühtegi seeriat",
@@ -600,6 +601,7 @@
"MessageConfirmRenameTagMergeNote": "Märkus: See silt on juba olemas, nii et need ühendatakse.", "MessageConfirmRenameTagMergeNote": "Märkus: See silt on juba olemas, nii et need ühendatakse.",
"MessageConfirmRenameTagWarning": "Hoiatus! Sarnane silt erineva puhvriga on juba olemas \"{0}\".", "MessageConfirmRenameTagWarning": "Hoiatus! Sarnane silt erineva puhvriga on juba olemas \"{0}\".",
"MessageConfirmSendEbookToDevice": "Olete kindel, et soovite saata {0} e-raamatu \"{1}\" seadmesse \"{2}\"?", "MessageConfirmSendEbookToDevice": "Olete kindel, et soovite saata {0} e-raamatu \"{1}\" seadmesse \"{2}\"?",
"MessageDaysListenedInTheLastYear": "{0} päeva kuuldud viimase aasta jooksul",
"MessageDownloadingEpisode": "Episoodi allalaadimine", "MessageDownloadingEpisode": "Episoodi allalaadimine",
"MessageDragFilesIntoTrackOrder": "Lohistage failid õigesse järjekorda", "MessageDragFilesIntoTrackOrder": "Lohistage failid õigesse järjekorda",
"MessageEmbedFinished": "Manustamine lõpetatud!", "MessageEmbedFinished": "Manustamine lõpetatud!",
+65 -11
View File
@@ -182,6 +182,7 @@
"HeaderPlaylist": "Soittolista", "HeaderPlaylist": "Soittolista",
"HeaderPlaylistItems": "Soittolistan kohteet", "HeaderPlaylistItems": "Soittolistan kohteet",
"HeaderPodcastsToAdd": "Lisättävät podcastit", "HeaderPodcastsToAdd": "Lisättävät podcastit",
"HeaderPresets": "Esivalinnat",
"HeaderPreviewCover": "Esikatsele kansikuvaa", "HeaderPreviewCover": "Esikatsele kansikuvaa",
"HeaderRSSFeedGeneral": "RSS yksityiskohdat", "HeaderRSSFeedGeneral": "RSS yksityiskohdat",
"HeaderRSSFeedIsOpen": "RSS syöte on avoinna", "HeaderRSSFeedIsOpen": "RSS syöte on avoinna",
@@ -221,7 +222,7 @@
"LabelAbridged": "Lyhennetty", "LabelAbridged": "Lyhennetty",
"LabelAbridgedChecked": "Lyhennetty (tarkistettu)", "LabelAbridgedChecked": "Lyhennetty (tarkistettu)",
"LabelAbridgedUnchecked": "Lyhentämätön (tarkistamaton)", "LabelAbridgedUnchecked": "Lyhentämätön (tarkistamaton)",
"LabelAccessibleBy": "Saavutettavissa:", "LabelAccessibleBy": "Saavutettavissa",
"LabelAccountType": "Tilin tyyppi", "LabelAccountType": "Tilin tyyppi",
"LabelAccountTypeAdmin": "Järjestelmänvalvoja", "LabelAccountTypeAdmin": "Järjestelmänvalvoja",
"LabelAccountTypeGuest": "Vieras", "LabelAccountTypeGuest": "Vieras",
@@ -243,6 +244,8 @@
"LabelAlreadyInYourLibrary": "Jo kirjastossasi", "LabelAlreadyInYourLibrary": "Jo kirjastossasi",
"LabelApiKeyCreated": "API avain \"{0}\" luotu onnistuneesti.", "LabelApiKeyCreated": "API avain \"{0}\" luotu onnistuneesti.",
"LabelApiKeyCreatedDescription": "Varmista, että kopioit API avaimen. Sitä ei näytetä enää tämän jälkeen.", "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", "LabelApiToken": "Sovellusliittymätunnus",
"LabelAppend": "Lisää loppuun", "LabelAppend": "Lisää loppuun",
"LabelAudioBitrate": "Äänen bittinopeus (esim. 128k)", "LabelAudioBitrate": "Äänen bittinopeus (esim. 128k)",
@@ -272,7 +275,7 @@
"LabelBonus": "Bonus", "LabelBonus": "Bonus",
"LabelBooks": "Kirjat", "LabelBooks": "Kirjat",
"LabelButtonText": "Painikkeen teksti", "LabelButtonText": "Painikkeen teksti",
"LabelByAuthor": "tekijältä {0}", "LabelByAuthor": "Tekijältä: {0}",
"LabelChangePassword": "Vaihda salasana", "LabelChangePassword": "Vaihda salasana",
"LabelChannels": "Kanavat", "LabelChannels": "Kanavat",
"LabelChapterCount": "{0} lukua", "LabelChapterCount": "{0} lukua",
@@ -306,6 +309,7 @@
"LabelDeleteFromFileSystemCheckbox": "Poista tiedostojärjestelmästä (poista merkintä, jos haluat poistaa vain tietokannasta)", "LabelDeleteFromFileSystemCheckbox": "Poista tiedostojärjestelmästä (poista merkintä, jos haluat poistaa vain tietokannasta)",
"LabelDescription": "Kuvaus", "LabelDescription": "Kuvaus",
"LabelDeselectAll": "Poista valinta kaikista", "LabelDeselectAll": "Poista valinta kaikista",
"LabelDetectedPattern": "Tunnista malli:",
"LabelDevice": "Laite", "LabelDevice": "Laite",
"LabelDeviceInfo": "Laitteen tiedot", "LabelDeviceInfo": "Laitteen tiedot",
"LabelDeviceIsAvailableTo": "Laite on saatavilla...", "LabelDeviceIsAvailableTo": "Laite on saatavilla...",
@@ -355,7 +359,11 @@
"LabelExample": "Esimerkki", "LabelExample": "Esimerkki",
"LabelExpandSeries": "Laajenna sarja", "LabelExpandSeries": "Laajenna sarja",
"LabelExpandSubSeries": "Laajenna alisarja", "LabelExpandSubSeries": "Laajenna alisarja",
"LabelExplicit": "Yksiselitteinen", "LabelExpired": "Vanhentunut",
"LabelExpiresAt": "Vanhentuu",
"LabelExpiresInSeconds": "Vanhentuu (sekunnissa)",
"LabelExpiresNever": "Ei koskaan",
"LabelExplicit": "Sopimaton",
"LabelExplicitChecked": "Yksiselitteinen (valittu)", "LabelExplicitChecked": "Yksiselitteinen (valittu)",
"LabelExplicitUnchecked": "Ei yksiselitteinen (ei valittu)", "LabelExplicitUnchecked": "Ei yksiselitteinen (ei valittu)",
"LabelExportOPML": "Vie OPML", "LabelExportOPML": "Vie OPML",
@@ -370,11 +378,12 @@
"LabelFilterByUser": "Suodata käyttäjien perusteella", "LabelFilterByUser": "Suodata käyttäjien perusteella",
"LabelFindEpisodes": "Etsi jaksoja", "LabelFindEpisodes": "Etsi jaksoja",
"LabelFinished": "Valmis", "LabelFinished": "Valmis",
"LabelFinishedDate": "Valmis {0}",
"LabelFolder": "Kansio", "LabelFolder": "Kansio",
"LabelFolders": "Kansiot", "LabelFolders": "Kansiot",
"LabelFontBold": "Lihavoitu", "LabelFontBold": "Lihavoitu",
"LabelFontBoldness": "Kirjasintyyppien lihavointi", "LabelFontBoldness": "Kirjasintyyppien lihavointi",
"LabelFontFamily": "Kirjasinperhe", "LabelFontFamily": "Fonttiperhe",
"LabelFontItalic": "Kursiivi", "LabelFontItalic": "Kursiivi",
"LabelFontScale": "Kirjasintyyppien skaalautuminen", "LabelFontScale": "Kirjasintyyppien skaalautuminen",
"LabelFontStrikethrough": "Yliviivattu", "LabelFontStrikethrough": "Yliviivattu",
@@ -414,6 +423,7 @@
"LabelLanguages": "Kielet", "LabelLanguages": "Kielet",
"LabelLastBookAdded": "Viimeisin lisätty kirja", "LabelLastBookAdded": "Viimeisin lisätty kirja",
"LabelLastBookUpdated": "Viimeisin päivitetty kirja", "LabelLastBookUpdated": "Viimeisin päivitetty kirja",
"LabelLastProgressDate": "Viimeisin edistyminen {0}",
"LabelLastSeen": "Nähty viimeksi", "LabelLastSeen": "Nähty viimeksi",
"LabelLastTime": "Viimeinen kerta", "LabelLastTime": "Viimeinen kerta",
"LabelLastUpdate": "Viimeisin päivitys", "LabelLastUpdate": "Viimeisin päivitys",
@@ -426,6 +436,9 @@
"LabelLibraryFilterSublistEmpty": "Ei {0}", "LabelLibraryFilterSublistEmpty": "Ei {0}",
"LabelLibraryItem": "Kirjaston kohde", "LabelLibraryItem": "Kirjaston kohde",
"LabelLibraryName": "Kirjaston nimi", "LabelLibraryName": "Kirjaston nimi",
"LabelLibrarySortByProgress": "Edistyminen: Viimeksi päivitetty",
"LabelLibrarySortByProgressFinished": "Edistyminen: Valmis",
"LabelLibrarySortByProgressStarted": "Edistyminen: Aloitettu",
"LabelLimit": "Raja", "LabelLimit": "Raja",
"LabelLineSpacing": "Riviväli", "LabelLineSpacing": "Riviväli",
"LabelListenAgain": "Kuuntele uudelleen", "LabelListenAgain": "Kuuntele uudelleen",
@@ -434,6 +447,7 @@
"LabelLogLevelWarn": "Varoitus", "LabelLogLevelWarn": "Varoitus",
"LabelLookForNewEpisodesAfterDate": "Etsi uusia jaksoja tämän päivämäärän jälkeen", "LabelLookForNewEpisodesAfterDate": "Etsi uusia jaksoja tämän päivämäärän jälkeen",
"LabelLowestPriority": "Vähiten tärkeä", "LabelLowestPriority": "Vähiten tärkeä",
"LabelMatchConfidence": "Varmuus",
"LabelMatchExistingUsersBy": "Vastaa olemassa olevia käyttäjiä mukaan", "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", "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.", "LabelMaxEpisodesToDownload": "Jaksojen maksimilatausmäärä. 0 poistaa rajoituksen.",
@@ -463,7 +477,9 @@
"LabelNewestAuthors": "Uusimmat tekijät", "LabelNewestAuthors": "Uusimmat tekijät",
"LabelNewestEpisodes": "Uusimmat jaksot", "LabelNewestEpisodes": "Uusimmat jaksot",
"LabelNextBackupDate": "Seuraava varmuuskopiointipäivämäärä", "LabelNextBackupDate": "Seuraava varmuuskopiointipäivämäärä",
"LabelNextChapters": "Seuraavat luvut:",
"LabelNextScheduledRun": "Seuraava ajastettu suorittaminen", "LabelNextScheduledRun": "Seuraava ajastettu suorittaminen",
"LabelNoApiKeys": "Ei API-avaimia",
"LabelNoCustomMetadataProviders": "Ei mukautettuja kuvailutietojen toimittajia", "LabelNoCustomMetadataProviders": "Ei mukautettuja kuvailutietojen toimittajia",
"LabelNoEpisodesSelected": "Jaksoja ei ole valittu", "LabelNoEpisodesSelected": "Jaksoja ei ole valittu",
"LabelNotFinished": "Ei valmis", "LabelNotFinished": "Ei valmis",
@@ -479,6 +495,7 @@
"LabelNotificationsMaxQueueSize": "Ilmoitustapahtumajonon enimmäispituus", "LabelNotificationsMaxQueueSize": "Ilmoitustapahtumajonon enimmäispituus",
"LabelNotificationsMaxQueueSizeHelp": "Tapahtumat on rajoitettu ampumaan yksi sekunnissa. Tapahtumat ohitetaan, jos jono on enimmäiskoko. Tämä estää ilmoitusten roskapostin.", "LabelNotificationsMaxQueueSizeHelp": "Tapahtumat on rajoitettu ampumaan yksi sekunnissa. Tapahtumat ohitetaan, jos jono on enimmäiskoko. Tämä estää ilmoitusten roskapostin.",
"LabelNumberOfBooks": "Kirjojen määrä", "LabelNumberOfBooks": "Kirjojen määrä",
"LabelNumberOfChapters": "Lukujen lukumäärä:",
"LabelNumberOfEpisodes": "# jaksoja", "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:", "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.", "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.",
@@ -523,7 +540,7 @@
"LabelPublishers": "Julkaisijat", "LabelPublishers": "Julkaisijat",
"LabelRSSFeedCustomOwnerEmail": "Mukautettu omistajan sähköposti", "LabelRSSFeedCustomOwnerEmail": "Mukautettu omistajan sähköposti",
"LabelRSSFeedCustomOwnerName": "Mukautettu omistajan nimi", "LabelRSSFeedCustomOwnerName": "Mukautettu omistajan nimi",
"LabelRSSFeedOpen": "RSS-syöte avoin", "LabelRSSFeedOpen": "RSS Syöte Avoin",
"LabelRSSFeedPreventIndexing": "Estä indeksointi", "LabelRSSFeedPreventIndexing": "Estä indeksointi",
"LabelRSSFeedSlug": "RSS-syöte Slug", "LabelRSSFeedSlug": "RSS-syöte Slug",
"LabelRSSFeedURL": "RSS-syötteen URL-osoite", "LabelRSSFeedURL": "RSS-syötteen URL-osoite",
@@ -533,7 +550,7 @@
"LabelReadAgain": "Lue uudelleen", "LabelReadAgain": "Lue uudelleen",
"LabelReadEbookWithoutProgress": "Lue s-kirja tallentamatta edistymistietoja", "LabelReadEbookWithoutProgress": "Lue s-kirja tallentamatta edistymistietoja",
"LabelRecentSeries": "Viimeisimmät sarjat", "LabelRecentSeries": "Viimeisimmät sarjat",
"LabelRecentlyAdded": "Viimeeksi lisätyt", "LabelRecentlyAdded": "Viimeksi lisätyt",
"LabelRecommended": "Suositeltu", "LabelRecommended": "Suositeltu",
"LabelRedo": "Tee uudelleen", "LabelRedo": "Tee uudelleen",
"LabelRegion": "Alue", "LabelRegion": "Alue",
@@ -553,6 +570,7 @@
"LabelSelectAll": "Valitse kaikki", "LabelSelectAll": "Valitse kaikki",
"LabelSelectAllEpisodes": "Valitse kaikki jaksot", "LabelSelectAllEpisodes": "Valitse kaikki jaksot",
"LabelSelectEpisodesShowing": "Valitse {0} näytettävää jaksoa", "LabelSelectEpisodesShowing": "Valitse {0} näytettävää jaksoa",
"LabelSelectUser": "Valitse käyttäjä",
"LabelSelectUsers": "Valitse käyttäjät", "LabelSelectUsers": "Valitse käyttäjät",
"LabelSendEbookToDevice": "Lähetä s-kirja kohteeseen...", "LabelSendEbookToDevice": "Lähetä s-kirja kohteeseen...",
"LabelSequence": "Sekvenssi", "LabelSequence": "Sekvenssi",
@@ -570,8 +588,8 @@
"LabelSettingsBookshelfViewHelp": "Skeuomorfinen muotoilu puisilla hyllyillä", "LabelSettingsBookshelfViewHelp": "Skeuomorfinen muotoilu puisilla hyllyillä",
"LabelSettingsChromecastSupport": "Chromecast-tuki", "LabelSettingsChromecastSupport": "Chromecast-tuki",
"LabelSettingsDateFormat": "Päivämäärän muoto", "LabelSettingsDateFormat": "Päivämäärän muoto",
"LabelSettingsEnableWatcher": "Skannaa kirjastot automaattisesti muutoksien varalta", "LabelSettingsEnableWatcher": "Vahdi kirjastoja automaattisesti muutoksien varalta",
"LabelSettingsEnableWatcherForLibrary": "Skannaa kirjastot 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", "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", "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.", "LabelSettingsEpubsAllowScriptedContentHelp": "Salli epub-tiedostojen suorittaa komentosarjoja. On suositeltavaa pitää tämä asetus pois käytöstä, ellet luota epub-tiedostojen lähteeseen.",
@@ -620,6 +638,7 @@
"LabelStartTime": "Aloitusaika", "LabelStartTime": "Aloitusaika",
"LabelStarted": "Aloitettu", "LabelStarted": "Aloitettu",
"LabelStartedAt": "Aloitettu", "LabelStartedAt": "Aloitettu",
"LabelStartedDate": "Aloitettu {0}",
"LabelStatsAudioTracks": "Ääniraidat", "LabelStatsAudioTracks": "Ääniraidat",
"LabelStatsAuthors": "Tekijät", "LabelStatsAuthors": "Tekijät",
"LabelStatsBestDay": "Paras päivä", "LabelStatsBestDay": "Paras päivä",
@@ -649,6 +668,7 @@
"LabelTheme": "Teema", "LabelTheme": "Teema",
"LabelThemeDark": "Tumma", "LabelThemeDark": "Tumma",
"LabelThemeLight": "Kirkas", "LabelThemeLight": "Kirkas",
"LabelThemeSepia": "Seepia",
"LabelTimeBase": "Aika-alusta", "LabelTimeBase": "Aika-alusta",
"LabelTimeDurationXHours": "{0} tuntia", "LabelTimeDurationXHours": "{0} tuntia",
"LabelTimeDurationXMinutes": "{0} minuuttia", "LabelTimeDurationXMinutes": "{0} minuuttia",
@@ -716,6 +736,10 @@
"LabelYourProgress": "Edistymisesi", "LabelYourProgress": "Edistymisesi",
"MessageAddToPlayerQueue": "Lisää soittimen jonoon", "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>.", "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.", "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", "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ä.", "MessageBackupsLocationNoEditNote": "Huomautus: Varmuuskopion sijainti asetetaan ympäristömuuttujan kautta, eikä sitä voi muuttaa tässä.",
@@ -729,6 +753,7 @@
"MessageBookshelfNoResultsForFilter": "Ei tuloksia suodattimelle \"{0}: {1}\"", "MessageBookshelfNoResultsForFilter": "Ei tuloksia suodattimelle \"{0}: {1}\"",
"MessageBookshelfNoResultsForQuery": "Ei tuloksia kyselylle", "MessageBookshelfNoResultsForQuery": "Ei tuloksia kyselylle",
"MessageBookshelfNoSeries": "Sinulla ei ole sarjoja", "MessageBookshelfNoSeries": "Sinulla ei ole sarjoja",
"MessageBulkChapterPattern": "Kuinka monta lukua haluaisit lisätä tällä numerointimallilla?",
"MessageChapterEndIsAfter": "Luvun loppu sijaitsee äänikirjan lopun jälkeen", "MessageChapterEndIsAfter": "Luvun loppu sijaitsee äänikirjan lopun jälkeen",
"MessageChapterErrorFirstNotZero": "Ensimmäisen luvun tulee alkaa nollasta", "MessageChapterErrorFirstNotZero": "Ensimmäisen luvun tulee alkaa nollasta",
"MessageChapterErrorStartGteDuration": "Epäkelvollinen aloitusaika; on oltava lyhyempi kuin äänikirjan kesto", "MessageChapterErrorStartGteDuration": "Epäkelvollinen aloitusaika; on oltava lyhyempi kuin äänikirjan kesto",
@@ -737,6 +762,7 @@
"MessageChaptersNotFound": "Kappaleita ei löydy", "MessageChaptersNotFound": "Kappaleita ei löydy",
"MessageCheckingCron": "Tarkistetaan cronia...", "MessageCheckingCron": "Tarkistetaan cronia...",
"MessageConfirmCloseFeed": "Oletko varma, että haluat sulkea tämän syötteen?", "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?", "MessageConfirmDeleteBackup": "Oletko varma, että haluat poistaa varmuuskopion {0}:lle?",
"MessageConfirmDeleteDevice": "Oletko varma, että haluat poistaa s-lukulaitteen \"{0}\"?", "MessageConfirmDeleteDevice": "Oletko varma, että haluat poistaa s-lukulaitteen \"{0}\"?",
"MessageConfirmDeleteFile": "Tämä poistaa tiedoston tiedostojärjestelmästäsi. Oletko varma?", "MessageConfirmDeleteFile": "Tämä poistaa tiedoston tiedostojärjestelmästäsi. Oletko varma?",
@@ -764,6 +790,7 @@
"MessageConfirmRemoveAuthor": "Oletko varma, että haluat poistaa tekijän \"{0}\"?", "MessageConfirmRemoveAuthor": "Oletko varma, että haluat poistaa tekijän \"{0}\"?",
"MessageConfirmRemoveCollection": "Oletko varma, että haluat poistaa kokoelman \"{0}\"?", "MessageConfirmRemoveCollection": "Oletko varma, että haluat poistaa kokoelman \"{0}\"?",
"MessageConfirmRemoveEpisode": "Oletko varma, että haluat poistaa jakson \"{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?", "MessageConfirmRemoveEpisodes": "Oletko varma, että haluat poistaa {0} jaksoa?",
"MessageConfirmRemoveListeningSessions": "Oletko varma, että haluat poistaa {0} kuuntelukertaa?", "MessageConfirmRemoveListeningSessions": "Oletko varma, että haluat poistaa {0} kuuntelukertaa?",
"MessageConfirmRemoveMetadataFiles": "Oletko varma, että haluat poistaa kaikki metadata.{0}-tiedostot kirjaston kohdekansioista?", "MessageConfirmRemoveMetadataFiles": "Oletko varma, että haluat poistaa kaikki metadata.{0}-tiedostot kirjaston kohdekansioista?",
@@ -789,6 +816,8 @@
"MessageFeedURLWillBe": "Syötteen URL tulee olemaan {0}", "MessageFeedURLWillBe": "Syötteen URL tulee olemaan {0}",
"MessageFetching": "Haetaan...", "MessageFetching": "Haetaan...",
"MessageForceReScanDescription": "skannaa kaikki tiedostot uudelleen kuten uusi tarkistus. Äänitiedoston ID3-tunnisteet, OPF-tiedostot ja tekstitiedostot skannataan uusina.", "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!", "MessageImportantNotice": "Tärkeä huomautus!",
"MessageInsertChapterBelow": "Syötä luku alle", "MessageInsertChapterBelow": "Syötä luku alle",
"MessageInvalidAsin": "Virheellinen ASIN", "MessageInvalidAsin": "Virheellinen ASIN",
@@ -859,10 +888,11 @@
"MessageResetChaptersConfirm": "Oletko varma, että haluat nollata luvut ja kumota tekemäsi muutokset?", "MessageResetChaptersConfirm": "Oletko varma, että haluat nollata luvut ja kumota tekemäsi muutokset?",
"MessageRestoreBackupConfirm": "Oletko varma, että haluat palauttaa varmuuskopion, joka on luotu", "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.", "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}", "MessageScheduleRunEveryWeekdayAtTime": "Suorita joka {0} klo {1}",
"MessageSearchResultsFor": "Hakutulokset haulle", "MessageSearchResultsFor": "Hakutulokset haulle",
"MessageSelected": "{0} valittuna", "MessageSelected": "{0} valittuna",
"MessageSeriesSequenceCannotContainSpaces": "Sarjan sekvenssi ei voi sisältää välilyöntejä",
"MessageServerCouldNotBeReached": "Palvelimelle ei saatu yhteyttä", "MessageServerCouldNotBeReached": "Palvelimelle ei saatu yhteyttä",
"MessageSetChaptersFromTracksDescription": "Aseta luvut käyttämällä kutakin äänitiedostoa lukuna ja luvun otsikkoa äänitiedoston nimenä", "MessageSetChaptersFromTracksDescription": "Aseta luvut käyttämällä kutakin äänitiedostoa lukuna ja luvun otsikkoa äänitiedoston nimenä",
"MessageShareExpirationWillBe": "Umpeutuminen on <strong>{0}</strong>", "MessageShareExpirationWillBe": "Umpeutuminen on <strong>{0}</strong>",
@@ -904,7 +934,7 @@
"MessageTaskScanningFileChanges": "Tarkastetaan tiedoston muutoksia \"{0}\":sta", "MessageTaskScanningFileChanges": "Tarkastetaan tiedoston muutoksia \"{0}\":sta",
"MessageTaskScanningLibrary": "Tarkastetaan kirjastoa \"{0}\"", "MessageTaskScanningLibrary": "Tarkastetaan kirjastoa \"{0}\"",
"MessageTaskTargetDirectoryNotWritable": "Kohdehakemisto ei ole kirjoitettava", "MessageTaskTargetDirectoryNotWritable": "Kohdehakemisto ei ole kirjoitettava",
"MessageThinking": "Ajattellaan...", "MessageThinking": "Ajatellaan...",
"MessageUploaderItemFailed": "Lataaminen ulospäin epäonnistui", "MessageUploaderItemFailed": "Lataaminen ulospäin epäonnistui",
"MessageUploaderItemSuccess": "Onnistuneesti ladattu! ulospäin!", "MessageUploaderItemSuccess": "Onnistuneesti ladattu! ulospäin!",
"MessageUploading": "Ladataan! ulospäin...", "MessageUploading": "Ladataan! ulospäin...",
@@ -924,7 +954,10 @@
"NotificationOnBackupCompletedDescription": "Laukaistu, kun varmuuskopiointi on valmis", "NotificationOnBackupCompletedDescription": "Laukaistu, kun varmuuskopiointi on valmis",
"NotificationOnBackupFailedDescription": "Laukaistu, kun varmuuskopiointi epäonnistuu", "NotificationOnBackupFailedDescription": "Laukaistu, kun varmuuskopiointi epäonnistuu",
"NotificationOnEpisodeDownloadedDescription": "Laukaistu, kun podcast-jakso ladataan automaattisesti", "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", "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", "PlaceholderNewCollection": "Uusi kokoelman nimi",
"PlaceholderNewFolderPath": "Uusi kansion polku", "PlaceholderNewFolderPath": "Uusi kansion polku",
"PlaceholderNewPlaylist": "Uusi soittolistan nimi", "PlaceholderNewPlaylist": "Uusi soittolistan nimi",
@@ -978,15 +1011,23 @@
"ToastBookmarkCreateFailed": "Kirjanmerkin luominen epäonnistui", "ToastBookmarkCreateFailed": "Kirjanmerkin luominen epäonnistui",
"ToastBookmarkCreateSuccess": "Kirjanmerkki lisätty", "ToastBookmarkCreateSuccess": "Kirjanmerkki lisätty",
"ToastBookmarkRemoveSuccess": "Kirjanmerkki poistettu", "ToastBookmarkRemoveSuccess": "Kirjanmerkki poistettu",
"ToastBulkChapterInvalidCount": "Syötä numero 1 ja 150 välillä",
"ToastCachePurgeFailed": "Välimuistin tyhjentäminen epäonnistui", "ToastCachePurgeFailed": "Välimuistin tyhjentäminen epäonnistui",
"ToastCachePurgeSuccess": "Välimuisti tyhjennetty onnistuneesti", "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ä", "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", "ToastChaptersMustHaveTitles": "Lukuilla on oltava otsikot",
"ToastChaptersRemoved": "Luvut poistettu", "ToastChaptersRemoved": "Luvut poistettu",
"ToastChaptersUpdated": "Luvut päivitetty", "ToastChaptersUpdated": "Luvut päivitetty",
"ToastCollectionItemsAddFailed": "Kohteen/kohteiden lisääminen kokoelmaan epäonnistui", "ToastCollectionItemsAddFailed": "Kohteen/kohteiden lisääminen kokoelmaan epäonnistui",
"ToastCollectionRemoveSuccess": "Kokoelma poistettu", "ToastCollectionRemoveSuccess": "Kokoelma poistettu",
"ToastCollectionUpdateSuccess": "Kokoelma päivitetty", "ToastCollectionUpdateSuccess": "Kokoelma päivitetty",
"ToastConnectionNotAvailable": "Verkkoyhteyttä ei saatavilla. Yritä hetken päästä uudelleen",
"ToastCoverSearchFailed": "Kansikuvan haku epäonnistui",
"ToastCoverUpdateFailed": "Kansikuvan päivitys epäonnistui", "ToastCoverUpdateFailed": "Kansikuvan päivitys epäonnistui",
"ToastDateTimeInvalidOrIncomplete": "Päivämäärä ja aika ovat epäkelvolliset tai puutteelliset", "ToastDateTimeInvalidOrIncomplete": "Päivämäärä ja aika ovat epäkelvolliset tai puutteelliset",
"ToastDeleteFileFailed": "Tiedoston poistaminen epäonnistui", "ToastDeleteFileFailed": "Tiedoston poistaminen epäonnistui",
@@ -1002,6 +1043,8 @@
"ToastEpisodeDownloadQueueClearSuccess": "Jakson latausjono tyhjennetty", "ToastEpisodeDownloadQueueClearSuccess": "Jakson latausjono tyhjennetty",
"ToastEpisodeUpdateSuccess": "{0} jaksoa päivitetty", "ToastEpisodeUpdateSuccess": "{0} jaksoa päivitetty",
"ToastErrorCannotShare": "Ei voi jakaa alkuperäisesti tällä laitteella", "ToastErrorCannotShare": "Ei voi jakaa alkuperäisesti tällä laitteella",
"ToastFailedToCreate": "Luonti epäonnistui",
"ToastFailedToDelete": "Poisto epäonnistui",
"ToastFailedToLoadData": "Tietojen lataaminen epäonnistui", "ToastFailedToLoadData": "Tietojen lataaminen epäonnistui",
"ToastFailedToMatch": "Vastaaminen epäonnistui", "ToastFailedToMatch": "Vastaaminen epäonnistui",
"ToastFailedToShare": "Jakaminen epäonnistui", "ToastFailedToShare": "Jakaminen epäonnistui",
@@ -1009,6 +1052,7 @@
"ToastInvalidImageUrl": "Epäkelvollinen kuvan URL-osoite", "ToastInvalidImageUrl": "Epäkelvollinen kuvan URL-osoite",
"ToastInvalidMaxEpisodesToDownload": "Ladattavien jaksojen enimmäismäärä on epäkelvollinen", "ToastInvalidMaxEpisodesToDownload": "Ladattavien jaksojen enimmäismäärä on epäkelvollinen",
"ToastInvalidUrl": "Epäkelvollinen URL-osoite", "ToastInvalidUrl": "Epäkelvollinen URL-osoite",
"ToastInvalidUrls": "Yksi tai useampi URL on virheellinen",
"ToastItemCoverUpdateSuccess": "Kohteen kansikuva päivitetty", "ToastItemCoverUpdateSuccess": "Kohteen kansikuva päivitetty",
"ToastItemDeletedFailed": "Kohteen poistaminen epäonnistui", "ToastItemDeletedFailed": "Kohteen poistaminen epäonnistui",
"ToastItemDeletedSuccess": "Poistettu kohde", "ToastItemDeletedSuccess": "Poistettu kohde",
@@ -1033,6 +1077,7 @@
"ToastMustHaveAtLeastOnePath": "On oltava vähintään yksi polku", "ToastMustHaveAtLeastOnePath": "On oltava vähintään yksi polku",
"ToastNameEmailRequired": "Nimi ja sähköpostiosoite vaaditaan", "ToastNameEmailRequired": "Nimi ja sähköpostiosoite vaaditaan",
"ToastNameRequired": "Nimi vaaditaan", "ToastNameRequired": "Nimi vaaditaan",
"ToastNewApiKeyUserError": "Täytyy valita käyttäjä",
"ToastNewEpisodesFound": "{0} uutta jaksoa löydetty", "ToastNewEpisodesFound": "{0} uutta jaksoa löydetty",
"ToastNewUserCreatedFailed": "Tilin \"{0}\" luominen epäonnistui", "ToastNewUserCreatedFailed": "Tilin \"{0}\" luominen epäonnistui",
"ToastNewUserCreatedSuccess": "Uusi tili luotu", "ToastNewUserCreatedSuccess": "Uusi tili luotu",
@@ -1057,6 +1102,7 @@
"ToastPlaylistUpdateSuccess": "Soittolista päivitetty", "ToastPlaylistUpdateSuccess": "Soittolista päivitetty",
"ToastPodcastCreateFailed": "Podcastin luominen epäonnistui", "ToastPodcastCreateFailed": "Podcastin luominen epäonnistui",
"ToastPodcastCreateSuccess": "Podcastin luominen onnistui", "ToastPodcastCreateSuccess": "Podcastin luominen onnistui",
"ToastPodcastEpisodeUpdated": "Episodi päivitetty",
"ToastPodcastGetFeedFailed": "Podcast-syötteen saaminen epäonnistui", "ToastPodcastGetFeedFailed": "Podcast-syötteen saaminen epäonnistui",
"ToastPodcastNoEpisodesInFeed": "RSS-syötteestä ei löytynyt jaksoja", "ToastPodcastNoEpisodesInFeed": "RSS-syötteestä ei löytynyt jaksoja",
"ToastPodcastNoRssFeed": "Podcastilla ei ole RSS-syötettä", "ToastPodcastNoRssFeed": "Podcastilla ei ole RSS-syötettä",
@@ -1107,5 +1153,13 @@
"ToastUserPasswordChangeSuccess": "Salasana vaihdettu onnistuneesti", "ToastUserPasswordChangeSuccess": "Salasana vaihdettu onnistuneesti",
"ToastUserPasswordMismatch": "Salasanat eivät täsmää", "ToastUserPasswordMismatch": "Salasanat eivät täsmää",
"ToastUserPasswordMustChange": "Uusi salasana ei voi olla sama kuin vanha salasana", "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)"
} }
+16 -14
View File
@@ -172,7 +172,7 @@
"HeaderNotificationUpdate": "Mise à jour de la notification", "HeaderNotificationUpdate": "Mise à jour de la notification",
"HeaderNotifications": "Notifications", "HeaderNotifications": "Notifications",
"HeaderOpenIDConnectAuthentication": "Authentification via OpenID Connect", "HeaderOpenIDConnectAuthentication": "Authentification via OpenID Connect",
"HeaderOpenListeningSessions": "Ouvrir les sessions d'écoutes", "HeaderOpenListeningSessions": "Sessions d'écoute ouvertes",
"HeaderOpenRSSFeed": "Ouvrir le flux RSS", "HeaderOpenRSSFeed": "Ouvrir le flux RSS",
"HeaderOtherFiles": "Autres fichiers", "HeaderOtherFiles": "Autres fichiers",
"HeaderPasswordAuthentication": "Authentification par mot de passe", "HeaderPasswordAuthentication": "Authentification par mot de passe",
@@ -275,7 +275,7 @@
"LabelBonus": "Bonus", "LabelBonus": "Bonus",
"LabelBooks": "Livres", "LabelBooks": "Livres",
"LabelButtonText": "Texte du bouton", "LabelButtonText": "Texte du bouton",
"LabelByAuthor": "par {0}", "LabelByAuthor": "de {0}",
"LabelChangePassword": "Modifier le mot de passe", "LabelChangePassword": "Modifier le mot de passe",
"LabelChannels": "Canaux", "LabelChannels": "Canaux",
"LabelChapterCount": "{0} Chapitres", "LabelChapterCount": "{0} Chapitres",
@@ -383,9 +383,9 @@
"LabelFolders": "Dossiers", "LabelFolders": "Dossiers",
"LabelFontBold": "Gras", "LabelFontBold": "Gras",
"LabelFontBoldness": "Graisse de la police", "LabelFontBoldness": "Graisse de la police",
"LabelFontFamily": "Polices de caractères", "LabelFontFamily": "Famille de caractères",
"LabelFontItalic": "Italique", "LabelFontItalic": "Italique",
"LabelFontScale": "Taille de la police de caractère", "LabelFontScale": "Taille de la police",
"LabelFontStrikethrough": "Barrer", "LabelFontStrikethrough": "Barrer",
"LabelFormat": "Format", "LabelFormat": "Format",
"LabelFull": "Complet", "LabelFull": "Complet",
@@ -436,11 +436,11 @@
"LabelLibraryFilterSublistEmpty": "Aucun {0}", "LabelLibraryFilterSublistEmpty": "Aucun {0}",
"LabelLibraryItem": "Élément de bibliothèque", "LabelLibraryItem": "Élément de bibliothèque",
"LabelLibraryName": "Nom de la bibliothèque", "LabelLibraryName": "Nom de la bibliothèque",
"LabelLibrarySortByProgress": "Progression : dernière mise à jour", "LabelLibrarySortByProgress": "Progression : Mise à jour",
"LabelLibrarySortByProgressFinished": "Progression : Terminé", "LabelLibrarySortByProgressFinished": "Progression : Terminé",
"LabelLibrarySortByProgressStarted": "Progression : Commencé", "LabelLibrarySortByProgressStarted": "Progression : En cours",
"LabelLimit": "Limite", "LabelLimit": "Limite",
"LabelLineSpacing": "Espacement des lignes", "LabelLineSpacing": "Interligne",
"LabelListenAgain": "Écouter à nouveau", "LabelListenAgain": "Écouter à nouveau",
"LabelLogLevelDebug": "Débogage", "LabelLogLevelDebug": "Débogage",
"LabelLogLevelInfo": "Info", "LabelLogLevelInfo": "Info",
@@ -588,8 +588,8 @@
"LabelSettingsBookshelfViewHelp": "Interface skeumorphique avec étagères en bois", "LabelSettingsBookshelfViewHelp": "Interface skeumorphique avec étagères en bois",
"LabelSettingsChromecastSupport": "Support du Chromecast", "LabelSettingsChromecastSupport": "Support du Chromecast",
"LabelSettingsDateFormat": "Format de date", "LabelSettingsDateFormat": "Format de date",
"LabelSettingsEnableWatcher": "Analyser automatiquement les bibliothèques pour détecter les modifications", "LabelSettingsEnableWatcher": "Surveiller automatiquement les bibliothèques pour détecter les modifications",
"LabelSettingsEnableWatcherForLibrary": "Analyser automatiquement la bibliothèque 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", "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", "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.", "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.",
@@ -622,7 +622,7 @@
"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", "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 dheure", "LabelSettingsTimeFormat": "Format dheure",
"LabelShare": "Partager", "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", "LabelShareOpen": "Ouvrir le partage",
"LabelShareURL": "Partager lURL", "LabelShareURL": "Partager lURL",
"LabelShowAll": "Tout afficher", "LabelShowAll": "Tout afficher",
@@ -744,7 +744,7 @@
"MessageBackupsLocationEditNote": "Remarque: Mettre à jour l'emplacement de sauvegarde ne déplacera pas ou ne modifiera pas les sauvegardes existantes", "MessageBackupsLocationEditNote": "Remarque: Mettre à jour l'emplacement de sauvegarde ne déplacera pas ou ne modifiera pas les sauvegardes existantes",
"MessageBackupsLocationNoEditNote": "Remarque: lemplacement de sauvegarde est défini via une variable denvironnement et ne peut pas être modifié ici.", "MessageBackupsLocationNoEditNote": "Remarque: lemplacement de sauvegarde est défini via une variable denvironnement et ne peut pas être modifié ici.",
"MessageBackupsLocationPathEmpty": "L'emplacement de secours ne peut pas être vide", "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", "MessageBatchEditPopulateMapDetailsItemHelp": "Renseigner les champs de la carte active avec les informations de cet élément",
"MessageBatchQuickMatchDescription": "La recherche par correspondance rapide tentera dajouter 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.", "MessageBatchQuickMatchDescription": "La recherche par correspondance rapide tentera dajouter 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 navez pas encore de collections", "MessageBookshelfNoCollections": "Vous navez pas encore de collections",
@@ -888,7 +888,7 @@
"MessageResetChaptersConfirm": "Êtes-vous sûr·e de vouloir réinitialiser les chapitres et annuler les changements effectués?", "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", "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.", "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}", "MessageScheduleRunEveryWeekdayAtTime": "Exécuté tous les {0} à {1}",
"MessageSearchResultsFor": "Résultats de recherche pour", "MessageSearchResultsFor": "Résultats de recherche pour",
"MessageSelected": "{0} sélectionnés", "MessageSelected": "{0} sélectionnés",
@@ -961,8 +961,8 @@
"PlaceholderNewCollection": "Nom de la nouvelle collection", "PlaceholderNewCollection": "Nom de la nouvelle collection",
"PlaceholderNewFolderPath": "Nouveau chemin de dossier", "PlaceholderNewFolderPath": "Nouveau chemin de dossier",
"PlaceholderNewPlaylist": "Nouveau nom de liste de lecture", "PlaceholderNewPlaylist": "Nouveau nom de liste de lecture",
"PlaceholderSearch": "Recherche", "PlaceholderSearch": "Recherche...",
"PlaceholderSearchEpisode": "Rechercher un épisode..", "PlaceholderSearchEpisode": "Rechercher un épisode",
"StatsAuthorsAdded": "auteurs ajoutés", "StatsAuthorsAdded": "auteurs ajoutés",
"StatsBooksAdded": "livres ajoutés", "StatsBooksAdded": "livres ajoutés",
"StatsBooksAdditional": "Les ajouts comprennent…", "StatsBooksAdditional": "Les ajouts comprennent…",
@@ -1026,6 +1026,8 @@
"ToastCollectionItemsAddFailed": "Échec de lajout de(s) élément(s) à la collection", "ToastCollectionItemsAddFailed": "Échec de lajout de(s) élément(s) à la collection",
"ToastCollectionRemoveSuccess": "Collection supprimée", "ToastCollectionRemoveSuccess": "Collection supprimée",
"ToastCollectionUpdateSuccess": "Collection mise à jour", "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", "ToastCoverUpdateFailed": "Échec de la mise à jour de la couverture",
"ToastDateTimeInvalidOrIncomplete": "La date et l'heure sont invalides ou incomplètes", "ToastDateTimeInvalidOrIncomplete": "La date et l'heure sont invalides ou incomplètes",
"ToastDeleteFileFailed": "Échec de la suppression du fichier", "ToastDeleteFileFailed": "Échec de la suppression du fichier",
+103 -2
View File
@@ -81,7 +81,7 @@
"ButtonRemove": "הסר", "ButtonRemove": "הסר",
"ButtonRemoveAll": "הסר הכל", "ButtonRemoveAll": "הסר הכל",
"ButtonRemoveAllLibraryItems": "הסר את כל פריטי הספרייה", "ButtonRemoveAllLibraryItems": "הסר את כל פריטי הספרייה",
"ButtonRemoveFromContinueListening": "הסר מ- המשך האזנה", "ButtonRemoveFromContinueListening": "הסר מ״המשך האזנה״",
"ButtonRemoveFromContinueReading": "הסר מ- המשך קריאה", "ButtonRemoveFromContinueReading": "הסר מ- המשך קריאה",
"ButtonRemoveSeriesFromContinueSeries": "הסר סדרה מ- המשך סדרה", "ButtonRemoveSeriesFromContinueSeries": "הסר סדרה מ- המשך סדרה",
"ButtonReset": "איפוס", "ButtonReset": "איפוס",
@@ -121,11 +121,13 @@
"HeaderAccount": "חשבון", "HeaderAccount": "חשבון",
"HeaderAddCustomMetadataProvider": "הוסף ספק מטא-נתונים מותאם אישית", "HeaderAddCustomMetadataProvider": "הוסף ספק מטא-נתונים מותאם אישית",
"HeaderAdvanced": "מתקדם", "HeaderAdvanced": "מתקדם",
"HeaderApiKeys": "מפתחות API",
"HeaderAppriseNotificationSettings": "הגדרות התראות של Apprise", "HeaderAppriseNotificationSettings": "הגדרות התראות של Apprise",
"HeaderAudioTracks": "רצועות קול", "HeaderAudioTracks": "רצועות קול",
"HeaderAudiobookTools": "כלים לניהול קבצי ספרים קוליים", "HeaderAudiobookTools": "כלים לניהול קבצי ספרים קוליים",
"HeaderAuthentication": "אימות", "HeaderAuthentication": "אימות",
"HeaderBackups": "גיבויים", "HeaderBackups": "גיבויים",
"HeaderBulkChapterModal": "הוסף מספר פרקים",
"HeaderChangePassword": "שנה סיסמה", "HeaderChangePassword": "שנה סיסמה",
"HeaderChapters": "פרקים", "HeaderChapters": "פרקים",
"HeaderChooseAFolder": "בחר תיקייה", "HeaderChooseAFolder": "בחר תיקייה",
@@ -164,6 +166,7 @@
"HeaderMetadataOrderOfPrecedence": "סדר העדפת מטא-נתונים", "HeaderMetadataOrderOfPrecedence": "סדר העדפת מטא-נתונים",
"HeaderMetadataToEmbed": "מטא-נתונים להטמעה", "HeaderMetadataToEmbed": "מטא-נתונים להטמעה",
"HeaderNewAccount": "חשבון חדש", "HeaderNewAccount": "חשבון חדש",
"HeaderNewApiKey": "מפתח API חדש",
"HeaderNewLibrary": "ספרייה חדשה", "HeaderNewLibrary": "ספרייה חדשה",
"HeaderNotificationCreate": "צור התראה", "HeaderNotificationCreate": "צור התראה",
"HeaderNotificationUpdate": "עדכון התראה", "HeaderNotificationUpdate": "עדכון התראה",
@@ -197,6 +200,7 @@
"HeaderSettingsExperimental": "תכונות ניסיוניות", "HeaderSettingsExperimental": "תכונות ניסיוניות",
"HeaderSettingsGeneral": "כללי", "HeaderSettingsGeneral": "כללי",
"HeaderSettingsScanner": "סורק", "HeaderSettingsScanner": "סורק",
"HeaderSettingsSecurity": "אבטחה",
"HeaderSettingsWebClient": "מערך", "HeaderSettingsWebClient": "מערך",
"HeaderSleepTimer": "טיימר שינה", "HeaderSleepTimer": "טיימר שינה",
"HeaderStatsLargestItems": "הפריטים הגדולים ביותר", "HeaderStatsLargestItems": "הפריטים הגדולים ביותר",
@@ -208,6 +212,7 @@
"HeaderTableOfContents": "תוכן עניינים", "HeaderTableOfContents": "תוכן עניינים",
"HeaderTools": "כלים", "HeaderTools": "כלים",
"HeaderUpdateAccount": "עדכן חשבון", "HeaderUpdateAccount": "עדכן חשבון",
"HeaderUpdateApiKey": "עדכן מפתח API",
"HeaderUpdateAuthor": "עדכן יוצר", "HeaderUpdateAuthor": "עדכן יוצר",
"HeaderUpdateDetails": "עדכן פרטים", "HeaderUpdateDetails": "עדכן פרטים",
"HeaderUpdateLibrary": "עדכן ספרייה", "HeaderUpdateLibrary": "עדכן ספרייה",
@@ -237,6 +242,10 @@
"LabelAllUsersExcludingGuests": "כל המשתמשים, ללא אורחים", "LabelAllUsersExcludingGuests": "כל המשתמשים, ללא אורחים",
"LabelAllUsersIncludingGuests": "כל המשתמשים כולל אורחים", "LabelAllUsersIncludingGuests": "כל המשתמשים כולל אורחים",
"LabelAlreadyInYourLibrary": "כבר קיים בספרייה שלך", "LabelAlreadyInYourLibrary": "כבר קיים בספרייה שלך",
"LabelApiKeyCreated": "מפתח API ״{0}״ נוצר בהצלחה.",
"LabelApiKeyCreatedDescription": "אנא העתק את מפתח ה־API כעת, לא ניתן יהיה להציגו שוב.",
"LabelApiKeyUser": "פעל בשם המשתמש",
"LabelApiKeyUserDescription": "למפתח ה־API יהיו הרשאות זהות למשתמש שעל שמו הוא פועל. ביומני הרישום (logs), הפעולות יופיעו כאילו בוצעו על ידי המשתמש עצמו.",
"LabelApiToken": "טוקן API", "LabelApiToken": "טוקן API",
"LabelAppend": "הוסף לסוף", "LabelAppend": "הוסף לסוף",
"LabelAudioBitrate": "קצב סיביות (לדוגמא 128k)", "LabelAudioBitrate": "קצב סיביות (לדוגמא 128k)",
@@ -286,6 +295,7 @@
"LabelContinueListening": "המשך האזנה", "LabelContinueListening": "המשך האזנה",
"LabelContinueReading": "המשך קריאה", "LabelContinueReading": "המשך קריאה",
"LabelContinueSeries": "המשך סדרה", "LabelContinueSeries": "המשך סדרה",
"LabelCorsAllowed": "מקורות CORS מורשים",
"LabelCover": "כריכה", "LabelCover": "כריכה",
"LabelCoverImageURL": "כתובת התמונה ברשת", "LabelCoverImageURL": "כתובת התמונה ברשת",
"LabelCoverProvider": "ספק כריכה", "LabelCoverProvider": "ספק כריכה",
@@ -299,6 +309,7 @@
"LabelDeleteFromFileSystemCheckbox": "מחיקה מהמערכת הקבצים (הסר סימון למחיקה רק ממסד הנתונים)", "LabelDeleteFromFileSystemCheckbox": "מחיקה מהמערכת הקבצים (הסר סימון למחיקה רק ממסד הנתונים)",
"LabelDescription": "תיאור", "LabelDescription": "תיאור",
"LabelDeselectAll": "הסר בחירת כל הפריטים", "LabelDeselectAll": "הסר בחירת כל הפריטים",
"LabelDetectedPattern": "תבנית שזוהתה:",
"LabelDevice": "התקן", "LabelDevice": "התקן",
"LabelDeviceInfo": "מידע על התקן", "LabelDeviceInfo": "מידע על התקן",
"LabelDeviceIsAvailableTo": "התקן זמין ל...", "LabelDeviceIsAvailableTo": "התקן זמין ל...",
@@ -348,6 +359,10 @@
"LabelExample": "דוגמה", "LabelExample": "דוגמה",
"LabelExpandSeries": "הרחב סדרה", "LabelExpandSeries": "הרחב סדרה",
"LabelExpandSubSeries": "הרחב תת סדרה", "LabelExpandSubSeries": "הרחב תת סדרה",
"LabelExpired": "פג תוקף",
"LabelExpiresAt": "יפוג בתאריך",
"LabelExpiresInSeconds": "יפוג בעוד (שניות)",
"LabelExpiresNever": "ללא הגבלת זמן",
"LabelExplicit": "מפורש", "LabelExplicit": "מפורש",
"LabelExplicitChecked": "בוטה (מסומן)", "LabelExplicitChecked": "בוטה (מסומן)",
"LabelExplicitUnchecked": "לא בוטה (לא מסומן)", "LabelExplicitUnchecked": "לא בוטה (לא מסומן)",
@@ -363,6 +378,7 @@
"LabelFilterByUser": "סינון לפי משתמש", "LabelFilterByUser": "סינון לפי משתמש",
"LabelFindEpisodes": "מצא פרקים", "LabelFindEpisodes": "מצא פרקים",
"LabelFinished": "הושלם", "LabelFinished": "הושלם",
"LabelFinishedDate": "הושלם {0}",
"LabelFolder": "תיקייה", "LabelFolder": "תיקייה",
"LabelFolders": "תיקיות", "LabelFolders": "תיקיות",
"LabelFontBold": "מודגש", "LabelFontBold": "מודגש",
@@ -407,6 +423,7 @@
"LabelLanguages": "שפות", "LabelLanguages": "שפות",
"LabelLastBookAdded": "הספר האחרון שנוסף", "LabelLastBookAdded": "הספר האחרון שנוסף",
"LabelLastBookUpdated": "הספר האחרון שעודכן", "LabelLastBookUpdated": "הספר האחרון שעודכן",
"LabelLastProgressDate": "התקדמות אחרונה: {0}",
"LabelLastSeen": "נראה לאחרונה", "LabelLastSeen": "נראה לאחרונה",
"LabelLastTime": "הזמן האחרון", "LabelLastTime": "הזמן האחרון",
"LabelLastUpdate": "עדכון אחרון", "LabelLastUpdate": "עדכון אחרון",
@@ -419,6 +436,9 @@
"LabelLibraryFilterSublistEmpty": "לא {0}", "LabelLibraryFilterSublistEmpty": "לא {0}",
"LabelLibraryItem": "פריט ספרייה", "LabelLibraryItem": "פריט ספרייה",
"LabelLibraryName": "שם הספרייה", "LabelLibraryName": "שם הספרייה",
"LabelLibrarySortByProgress": "התקדמות: עודכן לאחרונה",
"LabelLibrarySortByProgressFinished": "התקדמות: הושלם",
"LabelLibrarySortByProgressStarted": "התקדמות: הותחל",
"LabelLimit": "מגבלה", "LabelLimit": "מגבלה",
"LabelLineSpacing": "מרווח שורה", "LabelLineSpacing": "מרווח שורה",
"LabelListenAgain": "האזן שוב", "LabelListenAgain": "האזן שוב",
@@ -427,6 +447,7 @@
"LabelLogLevelWarn": "אזהרה", "LabelLogLevelWarn": "אזהרה",
"LabelLookForNewEpisodesAfterDate": "חפש פרקים חדשים לאחר תאריך זה", "LabelLookForNewEpisodesAfterDate": "חפש פרקים חדשים לאחר תאריך זה",
"LabelLowestPriority": "העדיפות הנמוכה ביותר", "LabelLowestPriority": "העדיפות הנמוכה ביותר",
"LabelMatchConfidence": "רמת ודאות",
"LabelMatchExistingUsersBy": "התאם משתמשים קיימים לפי", "LabelMatchExistingUsersBy": "התאם משתמשים קיימים לפי",
"LabelMatchExistingUsersByDescription": "משמש לחיבור משתמשים קיימים. לאחר החיבור, המשתמשים יותאמו לפי זיהוי ייחודי מספק ה-SSO שלך", "LabelMatchExistingUsersByDescription": "משמש לחיבור משתמשים קיימים. לאחר החיבור, המשתמשים יותאמו לפי זיהוי ייחודי מספק ה-SSO שלך",
"LabelMaxEpisodesToDownload": "מספר פרקים מקסימלי להורדה. 0 - ללא הגבלה.", "LabelMaxEpisodesToDownload": "מספר פרקים מקסימלי להורדה. 0 - ללא הגבלה.",
@@ -456,7 +477,9 @@
"LabelNewestAuthors": "הסופרים האחרונים", "LabelNewestAuthors": "הסופרים האחרונים",
"LabelNewestEpisodes": "הפרקים החדשים ביותר", "LabelNewestEpisodes": "הפרקים החדשים ביותר",
"LabelNextBackupDate": "תאריך הגיבוי הבא", "LabelNextBackupDate": "תאריך הגיבוי הבא",
"LabelNextChapters": "הפרקים הבא יהיו:",
"LabelNextScheduledRun": "הרצה מתוזמנת הבאה", "LabelNextScheduledRun": "הרצה מתוזמנת הבאה",
"LabelNoApiKeys": "אין מפתחות API",
"LabelNoCustomMetadataProviders": "אין ספקי מטא-נתונים מותאמים אישית", "LabelNoCustomMetadataProviders": "אין ספקי מטא-נתונים מותאמים אישית",
"LabelNoEpisodesSelected": "לא נבחרו פרקים", "LabelNoEpisodesSelected": "לא נבחרו פרקים",
"LabelNotFinished": "לא הושלם", "LabelNotFinished": "לא הושלם",
@@ -472,16 +495,21 @@
"LabelNotificationsMaxQueueSize": "גודל התור המרבי לאירועי התראה", "LabelNotificationsMaxQueueSize": "גודל התור המרבי לאירועי התראה",
"LabelNotificationsMaxQueueSizeHelp": "האירועים מוגבלים לשליחה אחת לשנייה. האירועים יתעלמו אם התור מלא. הגדרה זו נועדה למנוע ספאם התראות.", "LabelNotificationsMaxQueueSizeHelp": "האירועים מוגבלים לשליחה אחת לשנייה. האירועים יתעלמו אם התור מלא. הגדרה זו נועדה למנוע ספאם התראות.",
"LabelNumberOfBooks": "מספר הספרים", "LabelNumberOfBooks": "מספר הספרים",
"LabelNumberOfChapters": "מספר הפרקים:",
"LabelNumberOfEpisodes": "# פרקים", "LabelNumberOfEpisodes": "# פרקים",
"LabelOpenIDAdvancedPermsClaimDescription": "שם OpenID claim המכילה הרשאות מתקדמות לפעולות משתמש בתוך האפליקציה, אשר יחולו על תפקידים שאינם מנהלי מערכת (<b>אם הוגדרה</b>). אם התביעה חסרה בתגובה, הגישה ל-ABS תידחה. אם אפשרות אחת חסרה, היא תטופל כ-<code>false</code> יש לוודא שטענת ספק הזהויות תואמת את המבנה הצפוי:", "LabelOpenIDAdvancedPermsClaimDescription": "שם OpenID claim המכילה הרשאות מתקדמות לפעולות משתמש בתוך האפליקציה, אשר יחולו על תפקידים שאינם מנהלי מערכת (<b>אם הוגדרה</b>). אם התביעה חסרה בתגובה, הגישה ל-ABS תידחה. אם אפשרות אחת חסרה, היא תטופל כ-<code>false</code> יש לוודא שטענת ספק הזהויות תואמת את המבנה הצפוי:",
"LabelOpenIDClaims": "השאר את האפשרויות הבאות ריקות כדי להשבית הקצאת קבוצות והרשאות מתקדמת, ולאחר מכן להקצות אוטומטית את קבוצת 'משתמש'.", "LabelOpenIDClaims": "השאר את האפשרויות הבאות ריקות כדי להשבית הקצאת קבוצות והרשאות מתקדמת, ולאחר מכן להקצות אוטומטית את קבוצת 'משתמש'.",
"LabelOpenIDGroupClaimDescription": "שם ה־OpenID claim המכיל את רשימת הקבוצות של המשתמש. בדרך כלל נקרא <code>groups</code>. <b>אם הוגדרה</b>, האפליקציה תקצה תפקידים באופן אוטומטי על סמך השיוך לקבוצות, בתנאי ששמות הקבוצות ב־claim הם 'admin', 'user' או 'guest' (ללא רגישות לרישיות - Case-insensitive). ה־claim צריך להכיל רשימה; אם המשתמש משויך למספר קבוצות, האפליקציה תקצה את התפקיד בעל רמת הגישה הגבוהה ביותר. במידה ולא נמצאה קבוצה תואמת, הגישה תיחסם.",
"LabelOpenRSSFeed": "פתח ערוץ RSS", "LabelOpenRSSFeed": "פתח ערוץ RSS",
"LabelOverwrite": "לשכפל", "LabelOverwrite": "לשכפל",
"LabelPaginationPageXOfY": "עמוד {0} מתוך {1}",
"LabelPassword": "סיסמה", "LabelPassword": "סיסמה",
"LabelPath": "נתיב", "LabelPath": "נתיב",
"LabelPermanent": "קבוע",
"LabelPermissionsAccessAllLibraries": "ניתן לגשת לכל הספריות", "LabelPermissionsAccessAllLibraries": "ניתן לגשת לכל הספריות",
"LabelPermissionsAccessAllTags": "ניתן לגשת לכל התגיות", "LabelPermissionsAccessAllTags": "ניתן לגשת לכל התגיות",
"LabelPermissionsAccessExplicitContent": "ניתן לגשת לתוכן בוטה", "LabelPermissionsAccessExplicitContent": "ניתן לגשת לתוכן בוטה",
"LabelPermissionsCreateEreader": "ניתן ליצור קורא ספרים דיגיטלי",
"LabelPermissionsDelete": "מותר למחוק", "LabelPermissionsDelete": "מותר למחוק",
"LabelPermissionsDownload": "מותר להוריד", "LabelPermissionsDownload": "מותר להוריד",
"LabelPermissionsUpdate": "מותר לעדכן", "LabelPermissionsUpdate": "מותר לעדכן",
@@ -489,6 +517,8 @@
"LabelPersonalYearReview": "השנה שלך בסקירה ({0})", "LabelPersonalYearReview": "השנה שלך בסקירה ({0})",
"LabelPhotoPathURL": "נתיב/URL לתמונה", "LabelPhotoPathURL": "נתיב/URL לתמונה",
"LabelPlayMethod": "שיטת הפעלה", "LabelPlayMethod": "שיטת הפעלה",
"LabelPlaybackRateIncrementDecrement": "שיעור הגדלה/הפחתה של מהירות ההשמעה",
"LabelPlayerChapterNumberMarker": "{0} מתוך {1}",
"LabelPlaylists": "רשימות השמעה", "LabelPlaylists": "רשימות השמעה",
"LabelPodcast": "פודקאסט", "LabelPodcast": "פודקאסט",
"LabelPodcastSearchRegion": "אזור חיפוש פודקאסט", "LabelPodcastSearchRegion": "אזור חיפוש פודקאסט",
@@ -500,10 +530,14 @@
"LabelPrimaryEbook": "ספר אלקטרוני ראשי", "LabelPrimaryEbook": "ספר אלקטרוני ראשי",
"LabelProgress": "התקדמות", "LabelProgress": "התקדמות",
"LabelProvider": "ספק", "LabelProvider": "ספק",
"LabelProviderAuthorizationValue": "ערך כותרת האימות (Authorization Header)",
"LabelPubDate": "תאריך פרסום", "LabelPubDate": "תאריך פרסום",
"LabelPublishYear": "שנת הפרסום", "LabelPublishYear": "שנת הפרסום",
"LabelPublishedDate": "פורסם {0}", "LabelPublishedDate": "פורסם {0}",
"LabelPublishedDecade": "עשור פרסום",
"LabelPublishedDecades": "עשורי פרסום",
"LabelPublisher": "מוציא לאור", "LabelPublisher": "מוציא לאור",
"LabelPublishers": "מוצאים לאור",
"LabelRSSFeedCustomOwnerEmail": "אימייל בעלים מותאם אישית", "LabelRSSFeedCustomOwnerEmail": "אימייל בעלים מותאם אישית",
"LabelRSSFeedCustomOwnerName": "שם בעלים מותאם אישית", "LabelRSSFeedCustomOwnerName": "שם בעלים מותאם אישית",
"LabelRSSFeedOpen": "ערוץ RSS פתוח", "LabelRSSFeedOpen": "ערוץ RSS פתוח",
@@ -511,6 +545,7 @@
"LabelRSSFeedSlug": "Slug של ערוץ ה-RSS", "LabelRSSFeedSlug": "Slug של ערוץ ה-RSS",
"LabelRSSFeedURL": "כתובת ערוץ ה-RSS", "LabelRSSFeedURL": "כתובת ערוץ ה-RSS",
"LabelRandomly": "באופן אקראי", "LabelRandomly": "באופן אקראי",
"LabelReAddSeriesToContinueListening": "הוסף סדרה בחזרה אל ״המשך האזנה״",
"LabelRead": "קריאה", "LabelRead": "קריאה",
"LabelReadAgain": "קרא שוב", "LabelReadAgain": "קרא שוב",
"LabelReadEbookWithoutProgress": "קרא/י ספר אלקטרוני ללא שמירת התקדמות", "LabelReadEbookWithoutProgress": "קרא/י ספר אלקטרוני ללא שמירת התקדמות",
@@ -520,29 +555,44 @@
"LabelRedo": "עשה שוב", "LabelRedo": "עשה שוב",
"LabelRegion": "אזור", "LabelRegion": "אזור",
"LabelReleaseDate": "תאריך הוצאה לאור", "LabelReleaseDate": "תאריך הוצאה לאור",
"LabelRemoveAllMetadataAbs": "הסר את כל קבצי metadata.abs",
"LabelRemoveAllMetadataJson": "הסר את כל קבצי metadata.json",
"LabelRemoveAudibleBranding": "הסר פתיח וסיום של Audible מהפרקים",
"LabelRemoveCover": "הסר כריכה", "LabelRemoveCover": "הסר כריכה",
"LabelRemoveMetadataFile": "הסר קבצי מטא־נתונים מתיקיות הפריטים בספרייה",
"LabelRemoveMetadataFileHelp": "הסר את כל קבצי metadata.json ו־metadata.abs מתיקיות {0}.",
"LabelRowsPerPage": "שורות לעמוד", "LabelRowsPerPage": "שורות לעמוד",
"LabelSearchTerm": "מונח חיפוש", "LabelSearchTerm": "מונח חיפוש",
"LabelSearchTitle": "כותרת חיפוש", "LabelSearchTitle": "כותרת חיפוש",
"LabelSearchTitleOrASIN": "כותרת חיפוש או ASIN", "LabelSearchTitleOrASIN": "כותרת חיפוש או ASIN",
"LabelSeason": "עונה", "LabelSeason": "עונה",
"LabelSeasonNumber": "עונה #{0}",
"LabelSelectAll": "בחר הכל",
"LabelSelectAllEpisodes": "בחר את כל הפרקים", "LabelSelectAllEpisodes": "בחר את כל הפרקים",
"LabelSelectEpisodesShowing": "בחר {0} פרקים המוצגים", "LabelSelectEpisodesShowing": "בחר {0} פרקים המוצגים",
"LabelSelectUser": "בחר משתמש",
"LabelSelectUsers": "בחר משתמשים", "LabelSelectUsers": "בחר משתמשים",
"LabelSendEbookToDevice": "שלח ספר אלקטרוני ל...", "LabelSendEbookToDevice": "שלח ספר אלקטרוני ל...",
"LabelSequence": "רצף", "LabelSequence": "רצף",
"LabelSerial": "מספר סידורי",
"LabelSeries": "סדרה", "LabelSeries": "סדרה",
"LabelSeriesName": "שם הסדרה", "LabelSeriesName": "שם הסדרה",
"LabelSeriesProgress": "התקדמות בסדרה", "LabelSeriesProgress": "התקדמות בסדרה",
"LabelServerLogLevel": "רמת פירוט יומני הרישום",
"LabelServerYearReview": "השנה בסקירה של השרת ({0})", "LabelServerYearReview": "השנה בסקירה של השרת ({0})",
"LabelSetEbookAsPrimary": "קבע כראשי", "LabelSetEbookAsPrimary": "קבע כראשי",
"LabelSetEbookAsSupplementary": "קבע כמשלים", "LabelSetEbookAsSupplementary": "קבע כמשלים",
"LabelSettingsAllowIframe": "אפשר הטמעה בתוך iframe",
"LabelSettingsAudiobooksOnly": "רק ספרי קול", "LabelSettingsAudiobooksOnly": "רק ספרי קול",
"LabelSettingsAudiobooksOnlyHelp": "הפעלת ההגדרה הזו תתעלם מקבצי ספרים אלקטרוניים אלא אם כן הם נמצאים בתיקיית ספרי קול, שבמקרה זה יקבעו כספרים אלקטרוניים נלווים", "LabelSettingsAudiobooksOnlyHelp": "הפעלת ההגדרה הזו תתעלם מקבצי ספרים אלקטרוניים אלא אם כן הם נמצאים בתיקיית ספרי קול, שבמקרה זה יקבעו כספרים אלקטרוניים נלווים",
"LabelSettingsBookshelfViewHelp": "עיצוב סקאומורפי עם מדפי עץ", "LabelSettingsBookshelfViewHelp": "עיצוב סקאומורפי עם מדפי עץ",
"LabelSettingsChromecastSupport": "תמיכה ב-Chromecast", "LabelSettingsChromecastSupport": "תמיכה ב-Chromecast",
"LabelSettingsDateFormat": "פורמט תאריך", "LabelSettingsDateFormat": "פורמט תאריך",
"LabelSettingsEnableWatcher": "הפעל מעקב שינויים בספריות",
"LabelSettingsEnableWatcherForLibrary": "הפעל מעקב שינויים בספרייה",
"LabelSettingsEnableWatcherHelp": "מאפשר הוספת/עדכון אוטומטי של פריטים כאשר שינויי קבצים זוהים. *דורש איתחול שרת", "LabelSettingsEnableWatcherHelp": "מאפשר הוספת/עדכון אוטומטי של פריטים כאשר שינויי קבצים זוהים. *דורש איתחול שרת",
"LabelSettingsEpubsAllowScriptedContent": "אפשור תוכן הכולל סקריפטים ב־ePubs",
"LabelSettingsEpubsAllowScriptedContentHelp": "אפשר לקובצי EPUB להריץ סקריפטים. מומלץ להשאיר את ההגדרה כבויה, אלא אם כן מקור קובצי ה־ePub מהימן.",
"LabelSettingsExperimentalFeatures": "תכונות ניסיוניות", "LabelSettingsExperimentalFeatures": "תכונות ניסיוניות",
"LabelSettingsExperimentalFeaturesHelp": "תכונות בפיתוח שדורשות משובך ובדיקה. לחץ לפתיחת דיון ב-GitHub.", "LabelSettingsExperimentalFeaturesHelp": "תכונות בפיתוח שדורשות משובך ובדיקה. לחץ לפתיחת דיון ב-GitHub.",
"LabelSettingsFindCovers": "מצא כריכות", "LabelSettingsFindCovers": "מצא כריכות",
@@ -551,7 +601,8 @@
"LabelSettingsHideSingleBookSeriesHelp": "סדרות הכוללות ספר אחד יוסתרו מדף הסדרות ומדף הבית.", "LabelSettingsHideSingleBookSeriesHelp": "סדרות הכוללות ספר אחד יוסתרו מדף הסדרות ומדף הבית.",
"LabelSettingsHomePageBookshelfView": "השתמש בתצוגת מדף בדף הבית", "LabelSettingsHomePageBookshelfView": "השתמש בתצוגת מדף בדף הבית",
"LabelSettingsLibraryBookshelfView": "השתמש בתצוגת מדף בספרייה", "LabelSettingsLibraryBookshelfView": "השתמש בתצוגת מדף בספרייה",
"LabelSettingsOnlyShowLaterBooksInContinueSeries": "דלג על ספרים קודמים ב-המשך סדרה", "LabelSettingsLibraryMarkAsFinishedWhen": "סמן פריט מדיה כהושלם כאשר",
"LabelSettingsOnlyShowLaterBooksInContinueSeries": "דלג על ספרים קודמים ב״המשך סדרה״",
"LabelSettingsOnlyShowLaterBooksInContinueSeriesHelp": "מדף המשך סדרות מציג את הספר הראשון שלא הושמע בסדרה שיש בה לפחות ספר אחד שהושלם ואין ספרים שכבר באמצע שמיעה. הפעלת הגדרה זו תמשיך סדרות מהספר שהושלם הכי מתקדם בסדרה במקום מהספר הראשון שלא הושמע.", "LabelSettingsOnlyShowLaterBooksInContinueSeriesHelp": "מדף המשך סדרות מציג את הספר הראשון שלא הושמע בסדרה שיש בה לפחות ספר אחד שהושלם ואין ספרים שכבר באמצע שמיעה. הפעלת הגדרה זו תמשיך סדרות מהספר שהושלם הכי מתקדם בסדרה במקום מהספר הראשון שלא הושמע.",
"LabelSettingsParseSubtitles": "פענח כתוביות", "LabelSettingsParseSubtitles": "פענח כתוביות",
"LabelSettingsParseSubtitlesHelp": "העתק כותרת משנה משם תיקיית הספר.<br>כותרת המשנה חייבת להיות מופרדת עם התו ״-״<br>לדוגמא, כותרת המשנה לספר ״שם הספר - כותרת משנה״, היא ״כותרת משנה״", "LabelSettingsParseSubtitlesHelp": "העתק כותרת משנה משם תיקיית הספר.<br>כותרת המשנה חייבת להיות מופרדת עם התו ״-״<br>לדוגמא, כותרת המשנה לספר ״שם הספר - כותרת משנה״, היא ״כותרת משנה״",
@@ -568,13 +619,22 @@
"LabelSettingsStoreMetadataWithItem": "אחסן מטה-נתונים עם הפריט", "LabelSettingsStoreMetadataWithItem": "אחסן מטה-נתונים עם הפריט",
"LabelSettingsStoreMetadataWithItemHelp": "כברירת מחדל, קבצי מטה-נתונים מאוחסנים ב- /metadata/items, הפעלת ההגדרה תאחסן קבצי מטה-נתונים בתיקיית פריט שלך בספרייה", "LabelSettingsStoreMetadataWithItemHelp": "כברירת מחדל, קבצי מטה-נתונים מאוחסנים ב- /metadata/items, הפעלת ההגדרה תאחסן קבצי מטה-נתונים בתיקיית פריט שלך בספרייה",
"LabelSettingsTimeFormat": "פורמט זמן", "LabelSettingsTimeFormat": "פורמט זמן",
"LabelShare": "שתף",
"LabelShareDownloadableHelp": "אפשר למי שיש ברשותו קישור שיתוף להוריד קובץ ZIP של פריט הספרייה.",
"LabelShareURL": "שתף קישור",
"LabelShowAll": "הצג הכל", "LabelShowAll": "הצג הכל",
"LabelShowSeconds": "הצג שניות",
"LabelShowSubtitles": "הצג כתוביות",
"LabelSize": "גודל", "LabelSize": "גודל",
"LabelSleepTimer": "טיימר שינה", "LabelSleepTimer": "טיימר שינה",
"LabelSortAscending": "סדר עולה",
"LabelSortDescending": "סדר יורד",
"LabelSortPubDate": "מיין לפי תאריך פרסום",
"LabelStart": "התחל", "LabelStart": "התחל",
"LabelStartTime": "זמן התחלה", "LabelStartTime": "זמן התחלה",
"LabelStarted": "התחיל", "LabelStarted": "התחיל",
"LabelStartedAt": "התחיל ב", "LabelStartedAt": "התחיל ב",
"LabelStartedDate": "הותחל {0}",
"LabelStatsAudioTracks": "רצועות שמע", "LabelStatsAudioTracks": "רצועות שמע",
"LabelStatsAuthors": "מחברים", "LabelStatsAuthors": "מחברים",
"LabelStatsBestDay": "היום הטוב ביותר", "LabelStatsBestDay": "היום הטוב ביותר",
@@ -604,7 +664,13 @@
"LabelTheme": "ערכת נושא", "LabelTheme": "ערכת נושא",
"LabelThemeDark": "כהה", "LabelThemeDark": "כהה",
"LabelThemeLight": "בהיר", "LabelThemeLight": "בהיר",
"LabelThemeSepia": "ספיה",
"LabelTimeBase": "בסיס זמן", "LabelTimeBase": "בסיס זמן",
"LabelTimeDurationXHours": "{0} שעות",
"LabelTimeDurationXMinutes": "{0} דקות",
"LabelTimeDurationXSeconds": "{0} שניות",
"LabelTimeInMinutes": "זמן בשניות",
"LabelTimeLeft": "נותרו {0}",
"LabelTimeListened": "זמן האזנה", "LabelTimeListened": "זמן האזנה",
"LabelTimeListenedToday": "זמן האזנה היום", "LabelTimeListenedToday": "זמן האזנה היום",
"LabelTimeRemaining": "{0} נותרו", "LabelTimeRemaining": "{0} נותרו",
@@ -612,6 +678,7 @@
"LabelTitle": "כותרת", "LabelTitle": "כותרת",
"LabelToolsEmbedMetadata": "הטמעת מטה-נתונים", "LabelToolsEmbedMetadata": "הטמעת מטה-נתונים",
"LabelToolsEmbedMetadataDescription": "הטמעת מטה-נתונים לקבצי שמע כולל תמונות כריכה ופרקים.", "LabelToolsEmbedMetadataDescription": "הטמעת מטה-נתונים לקבצי שמע כולל תמונות כריכה ופרקים.",
"LabelToolsM4bEncoder": "מקודד M4B",
"LabelToolsMakeM4b": "יצירת קובץ אודיו M4B", "LabelToolsMakeM4b": "יצירת קובץ אודיו M4B",
"LabelToolsMakeM4bDescription": "יצירת קובץ אודיו .M4B עם מטה-נתונים מוטמעים, תמונת שער ופרקים.", "LabelToolsMakeM4bDescription": "יצירת קובץ אודיו .M4B עם מטה-נתונים מוטמעים, תמונת שער ופרקים.",
"LabelToolsSplitM4b": "פיצול M4B ל-MP3", "LabelToolsSplitM4b": "פיצול M4B ל-MP3",
@@ -624,29 +691,39 @@
"LabelTracksMultiTrack": "רב-ערוצי", "LabelTracksMultiTrack": "רב-ערוצי",
"LabelTracksNone": "אין ערוצים", "LabelTracksNone": "אין ערוצים",
"LabelTracksSingleTrack": "רצועה יחידה", "LabelTracksSingleTrack": "רצועה יחידה",
"LabelTrailer": "קדימון",
"LabelType": "סוג", "LabelType": "סוג",
"LabelUnabridged": "לא מקוצר", "LabelUnabridged": "לא מקוצר",
"LabelUndo": "בטל", "LabelUndo": "בטל",
"LabelUnknown": "לא ידוע", "LabelUnknown": "לא ידוע",
"LabelUnknownPublishDate": "תאריך הוצאה לאור לא ידוע",
"LabelUpdateCover": "עדכן כריכה", "LabelUpdateCover": "עדכן כריכה",
"LabelUpdateCoverHelp": "אפשר החלפה של כריכות קיימות עבור הספרים הנבחרים כאשר נמצאה התאמה", "LabelUpdateCoverHelp": "אפשר החלפה של כריכות קיימות עבור הספרים הנבחרים כאשר נמצאה התאמה",
"LabelUpdateDetails": "עדכון פרטים", "LabelUpdateDetails": "עדכון פרטים",
"LabelUpdateDetailsHelp": "אפשר החלפה של פרטים קיימים עבור הספרים הנבחרים כאשר נמצאה התאמה", "LabelUpdateDetailsHelp": "אפשר החלפה של פרטים קיימים עבור הספרים הנבחרים כאשר נמצאה התאמה",
"LabelUpdatedAt": "עודכן ב-", "LabelUpdatedAt": "עודכן ב-",
"LabelUploaderDragAndDrop": "גרור ושחרר קבצים או תיקיות", "LabelUploaderDragAndDrop": "גרור ושחרר קבצים או תיקיות",
"LabelUploaderDragAndDropFilesOnly": "גרור ושחרר קבצים",
"LabelUploaderDropFiles": "שחרר קבצים", "LabelUploaderDropFiles": "שחרר קבצים",
"LabelUploaderItemFetchMetadataHelp": "משיכת כותרת, סופר וסדרה באופן אוטומטי", "LabelUploaderItemFetchMetadataHelp": "משיכת כותרת, סופר וסדרה באופן אוטומטי",
"LabelUseAdvancedOptions": "השתמש באפשרויות מתקדמות",
"LabelUseChapterTrack": "השתמש ברצועות הפרקים", "LabelUseChapterTrack": "השתמש ברצועות הפרקים",
"LabelUseFullTrack": "השתמש ברצועה המלאה", "LabelUseFullTrack": "השתמש ברצועה המלאה",
"LabelUseZeroForUnlimited": "השתמש ב־0 מתוך אין־סוף",
"LabelUser": "משתמש", "LabelUser": "משתמש",
"LabelUsername": "שם משתמש", "LabelUsername": "שם משתמש",
"LabelValue": "ערך", "LabelValue": "ערך",
"LabelVersion": "גרסה", "LabelVersion": "גרסה",
"LabelViewBookmarks": "הצג סימניות", "LabelViewBookmarks": "הצג סימניות",
"LabelViewChapters": "הצג פרקים", "LabelViewChapters": "הצג פרקים",
"LabelViewPlayerSettings": "הצג הגדרות נגן",
"LabelViewQueue": "הצג תור נגן", "LabelViewQueue": "הצג תור נגן",
"LabelVolume": "עוצמת קול", "LabelVolume": "עוצמת קול",
"LabelWebRedirectURLsDescription": "יש לאשר את הכתובות הבאות אצל ספק ה־OAuth כדי לאפשר הפניה חזרה לאפליקציית הדפדפן לאחר ההתחברות:",
"LabelWebRedirectURLsSubfolder": "תיקיית משנה לכתובות הפניה",
"LabelWeekdaysToRun": "ימי השבוע להרצה", "LabelWeekdaysToRun": "ימי השבוע להרצה",
"LabelXBooks": "{0} ספרים",
"LabelXItems": "{0} פריטים",
"LabelYearReviewHide": "הסתר סקירת שנה", "LabelYearReviewHide": "הסתר סקירת שנה",
"LabelYearReviewShow": "הצג סקירת שנה", "LabelYearReviewShow": "הצג סקירת שנה",
"LabelYourAudiobookDuration": "משך הספר הקולי שלך", "LabelYourAudiobookDuration": "משך הספר הקולי שלך",
@@ -655,31 +732,55 @@
"LabelYourProgress": "ההתקדמות שלך", "LabelYourProgress": "ההתקדמות שלך",
"MessageAddToPlayerQueue": "הוסף לתור הנגן", "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>.", "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> כוללים קבצים שמורים בתיקיות הספרייה שלך.", "MessageBackupsDescription": "גיבויים כוללים משתמשים, התקדמות משתמש, פרטי פריטי ספרייה, הגדרות שרת ותמונות השמורות ב-<code>/metadata/items</code> & <code>/metadata/authors</code>. גיבויים <strong>לא</strong> כוללים קבצים שמורים בתיקיות הספרייה שלך.",
"MessageBackupsLocationEditNote": "הערה: שינוי מיקום הגיבוי לא יגרום להעברה או לשינוי של גיבויים קיימים",
"MessageBackupsLocationNoEditNote": "הערה: מיקום הגיבוי מוגדר באמצעות משתנה סביבה ולא ניתן לשנותו כאן.",
"MessageBackupsLocationPathEmpty": "נתיב מיקום הגיבוי אינו יכול להיות ריק",
"MessageBatchEditPopulateMapDetailsAllHelp": "מלא את השדות הפעילים בנתונים מכל הפריטים. שדות בעלי ערכים מרובים ימוזגו",
"MessageBatchEditPopulateMapDetailsItemHelp": "מלא את שדות פרטי המיפוי הפעילים בנתונים מפריט זה",
"MessageBatchQuickMatchDescription": "התאמה מהירה תנסה להוסיף כריכות ומטה-נתונים חסרים עבור הפריטים הנבחרים. הפעל את האפשרויות למטה כדי לאפשר להתאמה מהירה להחליף כריכות קיימות ו/או מטה-נתונים.", "MessageBatchQuickMatchDescription": "התאמה מהירה תנסה להוסיף כריכות ומטה-נתונים חסרים עבור הפריטים הנבחרים. הפעל את האפשרויות למטה כדי לאפשר להתאמה מהירה להחליף כריכות קיימות ו/או מטה-נתונים.",
"MessageBookshelfNoCollections": "עדיין לא יצרת אוספים", "MessageBookshelfNoCollections": "עדיין לא יצרת אוספים",
"MessageBookshelfNoCollectionsHelp": "האוספים ציבוריים. כל המשתמשים בעלי גישה לספרייה יכולים לראות אותם.",
"MessageBookshelfNoRSSFeeds": "אין ערוצי RSS פתוחים", "MessageBookshelfNoRSSFeeds": "אין ערוצי RSS פתוחים",
"MessageBookshelfNoResultsForFilter": "אין תוצאות עבור סינון \"{0}: {1}\"", "MessageBookshelfNoResultsForFilter": "אין תוצאות עבור סינון \"{0}: {1}\"",
"MessageBookshelfNoResultsForQuery": "אין תוצאות עבור השאילתה",
"MessageBookshelfNoSeries": "אין לך סדרות", "MessageBookshelfNoSeries": "אין לך סדרות",
"MessageBulkChapterPattern": "כמה פרקים להוסיף לפי תבנית מספור זו?",
"MessageChapterEndIsAfter": "זמן סיום הפרק אחרי סיום הספר הקולי שלך", "MessageChapterEndIsAfter": "זמן סיום הפרק אחרי סיום הספר הקולי שלך",
"MessageChapterErrorFirstNotZero": "הפרק הראשון חייב להתחיל ב-0", "MessageChapterErrorFirstNotZero": "הפרק הראשון חייב להתחיל ב-0",
"MessageChapterErrorStartGteDuration": "זמן התחלה לא תקין, חייב להיות פחות ממשך הספר הקולי", "MessageChapterErrorStartGteDuration": "זמן התחלה לא תקין, חייב להיות פחות ממשך הספר הקולי",
"MessageChapterErrorStartLtPrev": "זמן התחלה לא תקין, חייב להיות גדול או שווה לזמן ההתחלה של הפרק הקודם", "MessageChapterErrorStartLtPrev": "זמן התחלה לא תקין, חייב להיות גדול או שווה לזמן ההתחלה של הפרק הקודם",
"MessageChapterStartIsAfter": "התחלת הפרק אחרי סיום הספר הקולי שלך", "MessageChapterStartIsAfter": "התחלת הפרק אחרי סיום הספר הקולי שלך",
"MessageChaptersNotFound": "לא נמצאו פרקים",
"MessageCheckingCron": "בודק את תזמון העבודה...", "MessageCheckingCron": "בודק את תזמון העבודה...",
"MessageConfirmCloseFeed": "האם אתה בטוח שאתה רוצה לסגור את הערוץ הזה?", "MessageConfirmCloseFeed": "האם אתה בטוח שאתה רוצה לסגור את הערוץ הזה?",
"MessageConfirmDeleteApiKey": "האם למחוק את מפתח ה־API \"{0}\"?",
"MessageConfirmDeleteBackup": "האם אתה בטוח שברצונך למחוק גיבוי עבור {0}?", "MessageConfirmDeleteBackup": "האם אתה בטוח שברצונך למחוק גיבוי עבור {0}?",
"MessageConfirmDeleteDevice": "האם למחוק את הקורא האלקטרוני \"{0}\"?",
"MessageConfirmDeleteFile": "הקובץ ימחק לצמיתות מהמערכת שלך. האם אתה בטוח?", "MessageConfirmDeleteFile": "הקובץ ימחק לצמיתות מהמערכת שלך. האם אתה בטוח?",
"MessageConfirmDeleteLibrary": "האם אתה בטוח שברצונך למחוק לצמיתות את הספרייה \"{0}\"?", "MessageConfirmDeleteLibrary": "האם אתה בטוח שברצונך למחוק לצמיתות את הספרייה \"{0}\"?",
"MessageConfirmDeleteLibraryItem": "פריט הספרייה יימחק לצמיתות ממסד הנתונים ומהמערכת שלך. האם אתה בטוח?", "MessageConfirmDeleteLibraryItem": "פריט הספרייה יימחק לצמיתות ממסד הנתונים ומהמערכת שלך. האם אתה בטוח?",
"MessageConfirmDeleteLibraryItems": "פריטי הספרייה {0} יימחקו ממסד הנתונים ומהמערכת שלך. האם אתה בטוח?", "MessageConfirmDeleteLibraryItems": "פריטי הספרייה {0} יימחקו ממסד הנתונים ומהמערכת שלך. האם אתה בטוח?",
"MessageConfirmDeleteMetadataProvider": "האם למחוק את ספק המטא־נתונים המותאם \"{0}\"?",
"MessageConfirmDeleteNotification": "האם למחוק התראה זו?",
"MessageConfirmDeleteSession": "האם אתה בטוח שאתה רוצה למחוק את ההפעלה הזו?", "MessageConfirmDeleteSession": "האם אתה בטוח שאתה רוצה למחוק את ההפעלה הזו?",
"MessageConfirmEmbedMetadataInAudioFiles": "האם להטמיע מטא־נתונים ב־{0} קובצי שמע?",
"MessageConfirmForceReScan": "האם אתה בטוח שאתה רוצה להכריח סריקה מחדש?", "MessageConfirmForceReScan": "האם אתה בטוח שאתה רוצה להכריח סריקה מחדש?",
"MessageConfirmMarkAllEpisodesFinished": "האם אתה בטוח שברצונך לסמן את כל הפרקים כהסתיימו?", "MessageConfirmMarkAllEpisodesFinished": "האם אתה בטוח שברצונך לסמן את כל הפרקים כהסתיימו?",
"MessageConfirmMarkAllEpisodesNotFinished": "האם אתה בטוח שברצונך לסמן את כל הפרקים כלא הסתיימו?", "MessageConfirmMarkAllEpisodesNotFinished": "האם אתה בטוח שברצונך לסמן את כל הפרקים כלא הסתיימו?",
"MessageConfirmMarkItemFinished": "האם לסמן את \"{0}\" כהושלם?",
"MessageConfirmMarkItemNotFinished": "האם לסמן את \"{0}\" כלא הושלם?",
"MessageConfirmMarkSeriesFinished": "האם אתה בטוח שברצונך לסמן את כל הספרים בסדרה זו כהסתיימו?", "MessageConfirmMarkSeriesFinished": "האם אתה בטוח שברצונך לסמן את כל הספרים בסדרה זו כהסתיימו?",
"MessageConfirmMarkSeriesNotFinished": "האם אתה בטוח שברצונך לסמן את כל הספרים בסדרה זו כלא הסתיימו?", "MessageConfirmMarkSeriesNotFinished": "האם אתה בטוח שברצונך לסמן את כל הספרים בסדרה זו כלא הסתיימו?",
"MessageConfirmNotificationTestTrigger": "האם להפעיל התראה זו עם נתוני בדיקה?",
"MessageConfirmPurgeCache": "ניקוי המטמון ימחק את כל התיקייה ב־<code>/metadata/cache</code>.<br /><br />האם למחוק את תיקיית המטמון?",
"MessageConfirmPurgeItemsCache": "ניקוי מטמון הפריטים ימחק את כל התיקייה ב־<code>metadata/cache/items/</code>.<br />האם למחוק?",
"MessageConfirmQuickEmbed": "אזהרה! הטמעה מהירה לא תגבה גיבוי של קבצי האודיו שלך. וודא שיש לך גיבוי של קבצי האודיו שלך. <br><br>האם ברצונך להמשיך?", "MessageConfirmQuickEmbed": "אזהרה! הטמעה מהירה לא תגבה גיבוי של קבצי האודיו שלך. וודא שיש לך גיבוי של קבצי האודיו שלך. <br><br>האם ברצונך להמשיך?",
"MessageConfirmQuickMatchEpisodes": "התאמה מהירה תדרוס פרטים עבור פרקים תואמים. רק פרקים ללא התאמה יעודכנו. האם להמשיך?",
"MessageConfirmReScanLibraryItems": "האם אתה בטוח שברצונך לסרוק מחדש {0} פריטים?", "MessageConfirmReScanLibraryItems": "האם אתה בטוח שברצונך לסרוק מחדש {0} פריטים?",
"MessageConfirmRemoveAllChapters": "האם אתה בטוח שברצונך להסיר את כל הפרקים?", "MessageConfirmRemoveAllChapters": "האם אתה בטוח שברצונך להסיר את כל הפרקים?",
"MessageConfirmRemoveAuthor": "האם אתה בטוח שברצונך להסיר את המחבר \"{0}\"?", "MessageConfirmRemoveAuthor": "האם אתה בטוח שברצונך להסיר את המחבר \"{0}\"?",
+118 -118
View File
@@ -11,8 +11,8 @@
"ButtonApplyChapters": "Primijeni poglavlja", "ButtonApplyChapters": "Primijeni poglavlja",
"ButtonAuthors": "Autori", "ButtonAuthors": "Autori",
"ButtonBack": "Natrag", "ButtonBack": "Natrag",
"ButtonBatchEditPopulateFromExisting": "Popuni iz postojećeg", "ButtonBatchEditPopulateFromExisting": "Popuni iz postojećih",
"ButtonBatchEditPopulateMapDetails": "Popuni mapirane pojedinosti", "ButtonBatchEditPopulateMapDetails": "Popuni detalje karte",
"ButtonBrowseForFolder": "Pronađi mapu", "ButtonBrowseForFolder": "Pronađi mapu",
"ButtonCancel": "Odustani", "ButtonCancel": "Odustani",
"ButtonCancelEncode": "Otkaži kodiranje", "ButtonCancelEncode": "Otkaži kodiranje",
@@ -83,7 +83,7 @@
"ButtonRemoveAllLibraryItems": "Ukloni sve stavke iz knjižnice", "ButtonRemoveAllLibraryItems": "Ukloni sve stavke iz knjižnice",
"ButtonRemoveFromContinueListening": "Ukloni iz Nastavi slušati", "ButtonRemoveFromContinueListening": "Ukloni iz Nastavi slušati",
"ButtonRemoveFromContinueReading": "Ukloni iz Nastavi čitati", "ButtonRemoveFromContinueReading": "Ukloni iz Nastavi čitati",
"ButtonRemoveSeriesFromContinueSeries": "Ukloni seriju iz Nastavi seriju", "ButtonRemoveSeriesFromContinueSeries": "Ukloni serijal iz popisa „Nastavi serijal”",
"ButtonReset": "Poništi", "ButtonReset": "Poništi",
"ButtonResetToDefault": "Vrati na početne postavke", "ButtonResetToDefault": "Vrati na početne postavke",
"ButtonRestore": "Vraćanje", "ButtonRestore": "Vraćanje",
@@ -107,17 +107,17 @@
"ButtonSubmit": "Pošalji", "ButtonSubmit": "Pošalji",
"ButtonTest": "Test", "ButtonTest": "Test",
"ButtonUnlinkOpenId": "Prekini vezu s OpenID-jem", "ButtonUnlinkOpenId": "Prekini vezu s OpenID-jem",
"ButtonUpload": "Učitaj", "ButtonUpload": "Prenesi",
"ButtonUploadBackup": "Učitaj sigurnosnu kopiju", "ButtonUploadBackup": "Prenesi sigurnosnu kopiju",
"ButtonUploadCover": "Učitaj naslovnicu", "ButtonUploadCover": "Prenesi naslovnicu",
"ButtonUploadOPMLFile": "Učitaj OPML datoteku", "ButtonUploadOPMLFile": "Prenesi OPML datoteku",
"ButtonUserDelete": "Izbriši korisnika {0}", "ButtonUserDelete": "Izbriši korisnika {0}",
"ButtonUserEdit": "Uredi korisnika {0}", "ButtonUserEdit": "Uredi korisnika {0}",
"ButtonViewAll": "Prikaži sve", "ButtonViewAll": "Prikaži sve",
"ButtonYes": "Da", "ButtonYes": "Da",
"ErrorUploadFetchMetadataAPI": "Pogreška pri dohvatu meta-podataka", "ErrorUploadFetchMetadataAPI": "Pogreška pri dohvaćanju meta-podataka",
"ErrorUploadFetchMetadataNoResults": "Dohvat meta-podataka nije uspio - pokušajte ispraviti naslov i/ili autora", "ErrorUploadFetchMetadataNoResults": "Nije bilo moguće dohvatiti meta-podatake pokušajte aktualizirati naslov i/ili autora",
"ErrorUploadLacksTitle": "Naslov je obavezan", "ErrorUploadLacksTitle": "Mora imati naslov",
"HeaderAccount": "Korisnički račun", "HeaderAccount": "Korisnički račun",
"HeaderAddCustomMetadataProvider": "Dodaj prilagođenog pružatelja meta-podataka", "HeaderAddCustomMetadataProvider": "Dodaj prilagođenog pružatelja meta-podataka",
"HeaderAdvanced": "Napredno", "HeaderAdvanced": "Napredno",
@@ -134,7 +134,7 @@
"HeaderCollection": "Zbirka", "HeaderCollection": "Zbirka",
"HeaderCollectionItems": "Stavke u zbirci", "HeaderCollectionItems": "Stavke u zbirci",
"HeaderCover": "Naslovnica", "HeaderCover": "Naslovnica",
"HeaderCurrentDownloads": "Preuzimanja u tijeku", "HeaderCurrentDownloads": "Trenutačna preuzimanja",
"HeaderCustomMessageOnLogin": "Prilagođena poruka prilikom prijave", "HeaderCustomMessageOnLogin": "Prilagođena poruka prilikom prijave",
"HeaderCustomMetadataProviders": "Prilagođeni pružatelji meta-podataka", "HeaderCustomMetadataProviders": "Prilagođeni pružatelji meta-podataka",
"HeaderDetails": "Pojedinosti", "HeaderDetails": "Pojedinosti",
@@ -257,7 +257,7 @@
"LabelAuthors": "Autori", "LabelAuthors": "Autori",
"LabelAutoDownloadEpisodes": "Automatski preuzmi nastavke", "LabelAutoDownloadEpisodes": "Automatski preuzmi nastavke",
"LabelAutoFetchMetadata": "Automatski dohvati meta-podatke", "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", "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>)", "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", "LabelAutoRegister": "Automatska registracija",
@@ -286,8 +286,8 @@
"LabelClickToUseCurrentValue": "Kliknite za trenutnu vrijednost", "LabelClickToUseCurrentValue": "Kliknite za trenutnu vrijednost",
"LabelClosePlayer": "Zatvori reproduktor", "LabelClosePlayer": "Zatvori reproduktor",
"LabelCodec": "Kodek", "LabelCodec": "Kodek",
"LabelCollapseSeries": "Serijale prikaži sažeto", "LabelCollapseSeries": "Sažmi serijal",
"LabelCollapseSubSeries": "Podserijale prikaži sažeto", "LabelCollapseSubSeries": "Sažmi podserijale",
"LabelCollection": "Zbirka", "LabelCollection": "Zbirka",
"LabelCollections": "Zbirke", "LabelCollections": "Zbirke",
"LabelComplete": "Potpuno", "LabelComplete": "Potpuno",
@@ -303,7 +303,7 @@
"LabelCronExpression": "Cron izraz", "LabelCronExpression": "Cron izraz",
"LabelCurrent": "Trenutan", "LabelCurrent": "Trenutan",
"LabelCurrently": "Trenutno:", "LabelCurrently": "Trenutno:",
"LabelCustomCronExpression": "Prilagođeni CRON izraz:", "LabelCustomCronExpression": "Prilagođeni cron izraz:",
"LabelDatetime": "Datum i vrijeme", "LabelDatetime": "Datum i vrijeme",
"LabelDays": "Dani", "LabelDays": "Dani",
"LabelDeleteFromFileSystemCheckbox": "Izbriši datoteke (uklonite kvačicu ako stavku želite izbrisati samo iz baze podataka)", "LabelDeleteFromFileSystemCheckbox": "Izbriši datoteke (uklonite kvačicu ako stavku želite izbrisati samo iz baze podataka)",
@@ -312,7 +312,7 @@
"LabelDetectedPattern": "Prepoznat obrazac:", "LabelDetectedPattern": "Prepoznat obrazac:",
"LabelDevice": "Uređaj", "LabelDevice": "Uređaj",
"LabelDeviceInfo": "O uređaju", "LabelDeviceInfo": "O uređaju",
"LabelDeviceIsAvailableTo": "Uređaj je dostupan...", "LabelDeviceIsAvailableTo": "Uređaj je dostupan za...",
"LabelDirectory": "Direktorij", "LabelDirectory": "Direktorij",
"LabelDiscFromFilename": "Disk iz imena datoteke", "LabelDiscFromFilename": "Disk iz imena datoteke",
"LabelDiscFromMetadata": "Disk iz metapodataka", "LabelDiscFromMetadata": "Disk iz metapodataka",
@@ -340,7 +340,7 @@
"LabelEncodingBackupLocation": "Sigurnosna kopija vaših izvornih zvučnih datoteka čuvat će se u mapi:", "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.", "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.", "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.", "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.", "LabelEncodingStartedNavigation": "Nakon pokretanja zadatka možete napustiti ovu stranicu.",
"LabelEncodingTimeWarning": "Kodiranje može potrajati do 30 minuta.", "LabelEncodingTimeWarning": "Kodiranje može potrajati do 30 minuta.",
@@ -357,8 +357,8 @@
"LabelEpisodes": "Nastavci", "LabelEpisodes": "Nastavci",
"LabelEpisodic": "U nastavcima", "LabelEpisodic": "U nastavcima",
"LabelExample": "Primjer", "LabelExample": "Primjer",
"LabelExpandSeries": "Serijal prikaži prošireno", "LabelExpandSeries": "Proširi serijal",
"LabelExpandSubSeries": "Podserijal prikaži prošireno", "LabelExpandSubSeries": "Proširi podserijal",
"LabelExpired": "Istekao", "LabelExpired": "Istekao",
"LabelExpiresAt": "Istječe", "LabelExpiresAt": "Istječe",
"LabelExpiresInSeconds": "Istječe za (sekundi)", "LabelExpiresInSeconds": "Istječe za (sekundi)",
@@ -374,7 +374,7 @@
"LabelFileBornDate": "Stvoreno {0}", "LabelFileBornDate": "Stvoreno {0}",
"LabelFileModified": "Datoteka izmijenjena", "LabelFileModified": "Datoteka izmijenjena",
"LabelFileModifiedDate": "Izmijenjeno {0}", "LabelFileModifiedDate": "Izmijenjeno {0}",
"LabelFilename": "Naziv datoteke", "LabelFilename": "Ime datoteke",
"LabelFilterByUser": "Filtriraj po korisniku", "LabelFilterByUser": "Filtriraj po korisniku",
"LabelFindEpisodes": "Pronađi nastavke", "LabelFindEpisodes": "Pronađi nastavke",
"LabelFinished": "Završeno", "LabelFinished": "Završeno",
@@ -383,7 +383,7 @@
"LabelFolders": "Mape", "LabelFolders": "Mape",
"LabelFontBold": "Podebljano", "LabelFontBold": "Podebljano",
"LabelFontBoldness": "Debljina slova", "LabelFontBoldness": "Debljina slova",
"LabelFontFamily": "Skupina fontova", "LabelFontFamily": "Skup pisma",
"LabelFontItalic": "Kurziv", "LabelFontItalic": "Kurziv",
"LabelFontScale": "Veličina slova", "LabelFontScale": "Veličina slova",
"LabelFontStrikethrough": "Precrtano", "LabelFontStrikethrough": "Precrtano",
@@ -394,7 +394,7 @@
"LabelHardDeleteFile": "Izbriši datoteku zauvijek", "LabelHardDeleteFile": "Izbriši datoteku zauvijek",
"LabelHasEbook": "Ima e-knjigu", "LabelHasEbook": "Ima e-knjigu",
"LabelHasSupplementaryEbook": "Ima dopunsku e-knjigu", "LabelHasSupplementaryEbook": "Ima dopunsku e-knjigu",
"LabelHideSubtitles": "Skrij podnaslove", "LabelHideSubtitles": "Sakrij podnaslove",
"LabelHighestPriority": "Najviši prioritet", "LabelHighestPriority": "Najviši prioritet",
"LabelHost": "Poslužitelj", "LabelHost": "Poslužitelj",
"LabelHour": "Sat", "LabelHour": "Sat",
@@ -402,7 +402,7 @@
"LabelIcon": "Ikona", "LabelIcon": "Ikona",
"LabelImageURLFromTheWeb": "URL slike s weba", "LabelImageURLFromTheWeb": "URL slike s weba",
"LabelInProgress": "U tijeku", "LabelInProgress": "U tijeku",
"LabelIncludeInTracklist": "Uključi u popisu zvučnih zapisa", "LabelIncludeInTracklist": "Uključi u popis zvučnih zapisa",
"LabelIncomplete": "Nepotpuno", "LabelIncomplete": "Nepotpuno",
"LabelInterval": "Interval", "LabelInterval": "Interval",
"LabelIntervalCustomDailyWeekly": "Prilagođeno dnevno/tjedno", "LabelIntervalCustomDailyWeekly": "Prilagođeno dnevno/tjedno",
@@ -436,23 +436,23 @@
"LabelLibraryFilterSublistEmpty": "Br {0}", "LabelLibraryFilterSublistEmpty": "Br {0}",
"LabelLibraryItem": "Stavka knjižnice", "LabelLibraryItem": "Stavka knjižnice",
"LabelLibraryName": "Ime knjižnice", "LabelLibraryName": "Ime knjižnice",
"LabelLibrarySortByProgress": "Napredak: zadnje ažurirano", "LabelLibrarySortByProgress": "Napredak: Zadnje ažuriranje",
"LabelLibrarySortByProgressFinished": "Napredak: dovršeno", "LabelLibrarySortByProgressFinished": "Napredak: Završeno",
"LabelLibrarySortByProgressStarted": "Napredak: započeto", "LabelLibrarySortByProgressStarted": "Napredak: Započeto",
"LabelLimit": "Ograničenje", "LabelLimit": "Ograničenje",
"LabelLineSpacing": "Razmak između redaka", "LabelLineSpacing": "Razmak između redaka",
"LabelListenAgain": "Ponovno poslušaj", "LabelListenAgain": "Ponovno poslušaj",
"LabelLogLevelDebug": "Debug", "LabelLogLevelDebug": "Debug",
"LabelLogLevelInfo": "Info", "LabelLogLevelInfo": "Info",
"LabelLogLevelWarn": "Warn", "LabelLogLevelWarn": "Upozorenje",
"LabelLookForNewEpisodesAfterDate": "Traži nove nastavke nakon ovog datuma", "LabelLookForNewEpisodesAfterDate": "Traži nove nastavke nakon ovog datuma",
"LabelLowestPriority": "Najniži prioritet", "LabelLowestPriority": "Najniži prioritet",
"LabelMatchConfidence": "Pouzdanost", "LabelMatchConfidence": "Pouzdanost",
"LabelMatchExistingUsersBy": "Prepoznaj postojeće korisnike pomoću", "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", "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.", "LabelMaxEpisodesToDownload": "Najveći broj nastavaka za preuzimanje. 0 za neograničeno.",
"LabelMaxEpisodesToDownloadPerCheck": "Najviše novih nastavaka za preuzimanje po provjeri", "LabelMaxEpisodesToDownloadPerCheck": "Najveći broj novih nastavaka za preuzimanje po provjeri",
"LabelMaxEpisodesToKeep": "Najviše nastavaka za čuvanje", "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.", "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", "LabelMediaPlayer": "Reproduktor medijskih sadržaja",
"LabelMediaType": "Vrsta medija", "LabelMediaType": "Vrsta medija",
@@ -482,7 +482,7 @@
"LabelNoApiKeys": "Nema API ključeva", "LabelNoApiKeys": "Nema API ključeva",
"LabelNoCustomMetadataProviders": "Nema prilagođenih pružatelja meta-podataka", "LabelNoCustomMetadataProviders": "Nema prilagođenih pružatelja meta-podataka",
"LabelNoEpisodesSelected": "Nema odabranih nastavaka", "LabelNoEpisodesSelected": "Nema odabranih nastavaka",
"LabelNotFinished": "Nije dovršeno", "LabelNotFinished": "Nezavršeno",
"LabelNotStarted": "Nije započeto", "LabelNotStarted": "Nije započeto",
"LabelNotes": "Bilješke", "LabelNotes": "Bilješke",
"LabelNotificationAppriseURL": "Apprise URL(ovi)", "LabelNotificationAppriseURL": "Apprise URL(ovi)",
@@ -497,9 +497,9 @@
"LabelNumberOfBooks": "Broj knjiga", "LabelNumberOfBooks": "Broj knjiga",
"LabelNumberOfChapters": "Broj poglavljâ:", "LabelNumberOfChapters": "Broj poglavljâ:",
"LabelNumberOfEpisodes": "broj nastavaka", "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'.", "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", "LabelOpenRSSFeed": "Otvori RSS Feed",
"LabelOverwrite": "Prepiši", "LabelOverwrite": "Prepiši",
"LabelPaginationPageXOfY": "Stranica {0} od {1}", "LabelPaginationPageXOfY": "Stranica {0} od {1}",
@@ -513,7 +513,7 @@
"LabelPermissionsDelete": "Smije brisati", "LabelPermissionsDelete": "Smije brisati",
"LabelPermissionsDownload": "Smije preuzimati", "LabelPermissionsDownload": "Smije preuzimati",
"LabelPermissionsUpdate": "Smije ažurirati", "LabelPermissionsUpdate": "Smije ažurirati",
"LabelPermissionsUpload": "Smije učitavati", "LabelPermissionsUpload": "Smije prenositi",
"LabelPersonalYearReview": "Vaš godišnji pregled ({0})", "LabelPersonalYearReview": "Vaš godišnji pregled ({0})",
"LabelPhotoPathURL": "Putanja ili URL fotografije", "LabelPhotoPathURL": "Putanja ili URL fotografije",
"LabelPlayMethod": "Način reprodukcije", "LabelPlayMethod": "Način reprodukcije",
@@ -545,11 +545,11 @@
"LabelRSSFeedSlug": "Slug RSS izvora", "LabelRSSFeedSlug": "Slug RSS izvora",
"LabelRSSFeedURL": "URL RSS izvora", "LabelRSSFeedURL": "URL RSS izvora",
"LabelRandomly": "Nasumično", "LabelRandomly": "Nasumično",
"LabelReAddSeriesToContinueListening": "Ponovno dodaj serijal u Nastavi slušati", "LabelReAddSeriesToContinueListening": "Ponovo dodaj serijal u Nastavi slušati",
"LabelRead": "Čitaj", "LabelRead": "Čitaj",
"LabelReadAgain": "Ponovno čitaj", "LabelReadAgain": "Ponovno čitaj",
"LabelReadEbookWithoutProgress": "Čitaj e-knjige bez praćenja napretka", "LabelReadEbookWithoutProgress": "Čitaj e-knjige bez praćenja napretka",
"LabelRecentSeries": "Najnoviji serijali", "LabelRecentSeries": "Nedavni serijali",
"LabelRecentlyAdded": "Nedavno dodano", "LabelRecentlyAdded": "Nedavno dodano",
"LabelRecommended": "Preporučeno", "LabelRecommended": "Preporučeno",
"LabelRedo": "Ponovi", "LabelRedo": "Ponovi",
@@ -572,7 +572,7 @@
"LabelSelectEpisodesShowing": "Prikazujem {0} odabranih nastavaka", "LabelSelectEpisodesShowing": "Prikazujem {0} odabranih nastavaka",
"LabelSelectUser": "Odaberite korisnika", "LabelSelectUser": "Odaberite korisnika",
"LabelSelectUsers": "Označi korisnike", "LabelSelectUsers": "Označi korisnike",
"LabelSendEbookToDevice": "Pošalji e-knjigu …", "LabelSendEbookToDevice": "Pošalji e-knjigu na…",
"LabelSequence": "Slijed", "LabelSequence": "Slijed",
"LabelSerial": "Serijal", "LabelSerial": "Serijal",
"LabelSeries": "Serijal", "LabelSeries": "Serijal",
@@ -588,36 +588,36 @@
"LabelSettingsBookshelfViewHelp": "Skeumorfni dizajn sa drvenim policama", "LabelSettingsBookshelfViewHelp": "Skeumorfni dizajn sa drvenim policama",
"LabelSettingsChromecastSupport": "Podrška za Chromecast", "LabelSettingsChromecastSupport": "Podrška za Chromecast",
"LabelSettingsDateFormat": "Format datuma", "LabelSettingsDateFormat": "Format datuma",
"LabelSettingsEnableWatcher": "Automatski pretražuj ima li promjena u knjižnicama", "LabelSettingsEnableWatcher": "Automatski prati promjene u knjižnicama",
"LabelSettingsEnableWatcherForLibrary": "Automatski traži 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", "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", "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.", "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", "LabelSettingsExperimentalFeatures": "Eksperimentalne funkcije",
"LabelSettingsExperimentalFeaturesHelp": "Značajke u razvoju za koje trebamo vaše povratne informacije i pomoć u testiranju. Kliknite za otvaranje rasprave na githubu.", "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", "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", "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.", "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", "LabelSettingsHomePageBookshelfView": "Prikaži početnu stranicu kao policu s knjigama",
"LabelSettingsLibraryBookshelfView": "Prikaži knjižnicu kao policu s knjigama", "LabelSettingsLibraryBookshelfView": "Prikaži knjižnicu kao policu s knjigama",
"LabelSettingsLibraryMarkAsFinishedPercentComplete": "Postotak dovršenosti veći od", "LabelSettingsLibraryMarkAsFinishedPercentComplete": "Postotak završenosti je veći od",
"LabelSettingsLibraryMarkAsFinishedTimeRemaining": "Preostalo vrijeme je manje od (sekundi)", "LabelSettingsLibraryMarkAsFinishedTimeRemaining": "Preostalo vrijeme je manje od (sekunde)",
"LabelSettingsLibraryMarkAsFinishedWhen": "Označi medij dovršenim kada", "LabelSettingsLibraryMarkAsFinishedWhen": "Označi medij kao završen kada",
"LabelSettingsOnlyShowLaterBooksInContinueSeries": "Preskoči ranije knjige u funkciji Nastavi serijal", "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", "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", "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", "LabelSettingsSkipMatchingBooksWithASIN": "Preskoči prepoznavanje knjiga koje već imaju ASIN",
"LabelSettingsSkipMatchingBooksWithISBN": "Preskoči prepoznavanje knjiga koje već imaju ISBN", "LabelSettingsSkipMatchingBooksWithISBN": "Preskoči prepoznavanje knjiga koje već imaju ISBN",
"LabelSettingsSortingIgnorePrefixes": "Zanemari prefikse kod sortiranja", "LabelSettingsSortingIgnorePrefixes": "Zanemari prefikse kod sortiranja",
"LabelSettingsSortingIgnorePrefixesHelp": "npr. za prefiks \"the\" naslov knjige \"The Book Title\" sortirat će se \"Book Title, The\"", "LabelSettingsSortingIgnorePrefixesHelp": "npr. za prefiks \"the\" naslov knjige \"The Book Title\" sortirat će se \"Book Title, The\"",
"LabelSettingsSquareBookCovers": "Koristi pravokutne naslovnice knjiga", "LabelSettingsSquareBookCovers": "Koristi pravokutne naslovnice knjiga",
"LabelSettingsSquareBookCoversHelp": "Koristi pravokutne naslovnice umjesto uobičajenih naslovnica omjera 1,6:1", "LabelSettingsSquareBookCoversHelp": "Koristi pravokutne naslovnice umjesto uobičajenih naslovnica omjera 1,6:1",
"LabelSettingsStoreCoversWithItem": "Spremi naslovnice uz stavke", "LabelSettingsStoreCoversWithItem": "Spremi naslovnice sa stavkom",
"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\"", "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", "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", "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", "LabelSettingsTimeFormat": "Format vremena",
@@ -647,7 +647,7 @@
"LabelStatsDaysListened": "Dana slušano", "LabelStatsDaysListened": "Dana slušano",
"LabelStatsHours": "Sati", "LabelStatsHours": "Sati",
"LabelStatsInARow": "uzastopno", "LabelStatsInARow": "uzastopno",
"LabelStatsItemsFinished": "Dovršenih stavki", "LabelStatsItemsFinished": "Završene stavke",
"LabelStatsItemsInLibrary": "Stavke u knjižnici", "LabelStatsItemsInLibrary": "Stavke u knjižnici",
"LabelStatsMinutes": "minute", "LabelStatsMinutes": "minute",
"LabelStatsMinutesListening": "Minuta odslušano", "LabelStatsMinutesListening": "Minuta odslušano",
@@ -706,12 +706,12 @@
"LabelUpdateDetails": "Ažuriraj pojedinosti", "LabelUpdateDetails": "Ažuriraj pojedinosti",
"LabelUpdateDetailsHelp": "Dopusti prepisivanje postojećih podataka za odabrane knjige kada se prepoznaju", "LabelUpdateDetailsHelp": "Dopusti prepisivanje postojećih podataka za odabrane knjige kada se prepoznaju",
"LabelUpdatedAt": "Ažurirano", "LabelUpdatedAt": "Ažurirano",
"LabelUploaderDragAndDrop": "Pritisni i prevuci datoteke ili mape", "LabelUploaderDragAndDrop": "Povuci i ispusti datoteke ili mape",
"LabelUploaderDragAndDropFilesOnly": "Pritisni i prevuci datoteke", "LabelUploaderDragAndDropFilesOnly": "Povuci i ispusti datoteke",
"LabelUploaderDropFiles": "Ispusti datoteke", "LabelUploaderDropFiles": "Ispusti datoteke",
"LabelUploaderItemFetchMetadataHelp": "Automatski dohvati naslov, autora i serijal", "LabelUploaderItemFetchMetadataHelp": "Automatski dohvati naslov, autora i serijal",
"LabelUseAdvancedOptions": "Koristi se naprednim opcijama", "LabelUseAdvancedOptions": "Koristi napredne opcije",
"LabelUseChapterTrack": "Upravljaj trakom poglavlja", "LabelUseChapterTrack": "Koristi zvučni zapis poglavlja",
"LabelUseFullTrack": "Koristi cijeli zvučni zapis", "LabelUseFullTrack": "Koristi cijeli zvučni zapis",
"LabelUseZeroForUnlimited": "0 za neograničeno", "LabelUseZeroForUnlimited": "0 za neograničeno",
"LabelUser": "Korisnik", "LabelUser": "Korisnik",
@@ -735,12 +735,12 @@
"LabelYourPlaylists": "Vaši popisi za izvođenje", "LabelYourPlaylists": "Vaši popisi za izvođenje",
"LabelYourProgress": "Vaš napredak", "LabelYourProgress": "Vaš napredak",
"MessageAddToPlayerQueue": "Dodaj u redoslijed izvođenja", "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.", "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> .", "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.", "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.", "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", "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.", "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", "MessageBackupsLocationPathEmpty": "Putanja do lokacije za sigurnosne kopije ne može ostati prazna",
@@ -760,7 +760,7 @@
"MessageChapterErrorStartLtPrev": "Netočno vrijeme početka, mora biti veće ili jednako vremenu početka prethodnog poglavlja", "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", "MessageChapterStartIsAfter": "Početak poglavlja je nakon kraja zvučne knjige",
"MessageChaptersNotFound": "Poglavlja nisu pronađena", "MessageChaptersNotFound": "Poglavlja nisu pronađena",
"MessageCheckingCron": "Provjeravam cron...", "MessageCheckingCron": "Provjeravanje cron izraza...",
"MessageConfirmCloseFeed": "Sigurno želite zatvoriti ovaj izvor?", "MessageConfirmCloseFeed": "Sigurno želite zatvoriti ovaj izvor?",
"MessageConfirmDeleteApiKey": "Sigurno želite izbrisati API ključ \"{0}\"?", "MessageConfirmDeleteApiKey": "Sigurno želite izbrisati API ključ \"{0}\"?",
"MessageConfirmDeleteBackup": "Sigurno želite izbrisati sigurnosnu kopiju za {0}?", "MessageConfirmDeleteBackup": "Sigurno želite izbrisati sigurnosnu kopiju za {0}?",
@@ -774,12 +774,12 @@
"MessageConfirmDeleteSession": "Sigurno želite izbrisati ovu sesiju?", "MessageConfirmDeleteSession": "Sigurno želite izbrisati ovu sesiju?",
"MessageConfirmEmbedMetadataInAudioFiles": "Sigurno želite ugraditi meta-podatke u {0} zvučnih datoteka?", "MessageConfirmEmbedMetadataInAudioFiles": "Sigurno želite ugraditi meta-podatke u {0} zvučnih datoteka?",
"MessageConfirmForceReScan": "Sigurno želite ponovno pokrenuti skeniranje?", "MessageConfirmForceReScan": "Sigurno želite ponovno pokrenuti skeniranje?",
"MessageConfirmMarkAllEpisodesFinished": "Sigurno želite označiti sve nastavke dovršenima?", "MessageConfirmMarkAllEpisodesFinished": "Sigurno želite označiti sve nastavke kao završene?",
"MessageConfirmMarkAllEpisodesNotFinished": "Sigurno želite označiti sve nastavke nedovršenima?", "MessageConfirmMarkAllEpisodesNotFinished": "Sigurno želite označiti sve nastavke kao nezavršene?",
"MessageConfirmMarkItemFinished": "Sigurno želite označiti \"{0}\" dovršenim?", "MessageConfirmMarkItemFinished": "Sigurno želite označiti stavku \"{0}\" kao završenu?",
"MessageConfirmMarkItemNotFinished": "Sigurno želite označiti \"{0}\" nedovršenim?", "MessageConfirmMarkItemNotFinished": "Sigurno želite označiti stavku \"{0}\" kao nezavršenu?",
"MessageConfirmMarkSeriesFinished": "Sigurno želite označiti sve knjige u ovom serijalu dovršenima?", "MessageConfirmMarkSeriesFinished": "Sigurno želite označiti sve knjige u ovom serijalu kao završene?",
"MessageConfirmMarkSeriesNotFinished": "Sigurno želite označiti sve knjige u ovom serijalu nedovršenima?", "MessageConfirmMarkSeriesNotFinished": "Sigurno želite označiti sve knjige u ovom serijalu kao nezavršene?",
"MessageConfirmNotificationTestTrigger": "Želite li okinuti ovu obavijest s probnim podatcima?", "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?", "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?", "MessageConfirmPurgeItemsCache": "Brisanje predmemorije stavki izbrisat će cijelu mapu <code>/metadata/cache/items</code>.<br />Jeste li sigurni?",
@@ -807,14 +807,14 @@
"MessageConfirmUnlinkOpenId": "Sigurno želite odspojiti ovog korisnika s OpenID-ja?", "MessageConfirmUnlinkOpenId": "Sigurno želite odspojiti ovog korisnika s OpenID-ja?",
"MessageDaysListenedInTheLastYear": "{0} dana slušanja u posljednjih godinu dana", "MessageDaysListenedInTheLastYear": "{0} dana slušanja u posljednjih godinu dana",
"MessageDownloadingEpisode": "Preuzimam nastavak", "MessageDownloadingEpisode": "Preuzimam nastavak",
"MessageDragFilesIntoTrackOrder": "Prevlačenjem datoteka složite pravilan redoslijed", "MessageDragFilesIntoTrackOrder": "Povlači datoteke u ispravan redoslijed",
"MessageEmbedFailed": "Ugrađivanje nije uspjelo!", "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)", "MessageEmbedQueue": "Ugrađivanje meta-podataka dodano u red obrade ({0} u redu)",
"MessageEpisodesQueuedForDownload": "{0} nastavak(a) u redu za preuzimanje", "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.", "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}", "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.", "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}", "MessageHeatmapListeningTimeTooltip": "<strong>{0} sluša</strong> na {1}",
"MessageHeatmapNoListeningSessions": "Nema sesija slušanja na {0}", "MessageHeatmapNoListeningSessions": "Nema sesija slušanja na {0}",
@@ -824,27 +824,27 @@
"MessageItemsSelected": "{0} odabranih stavki", "MessageItemsSelected": "{0} odabranih stavki",
"MessageItemsUpdated": "{0} stavki ažurirano", "MessageItemsUpdated": "{0} stavki ažurirano",
"MessageJoinUsOn": "Pridruži nam se na", "MessageJoinUsOn": "Pridruži nam se na",
"MessageLoading": "Učitavam...", "MessageLoading": "Učitavanje...",
"MessageLoadingFolders": "Učitavam mape...", "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>.", "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!", "MessageM4BFailed": "M4B datoteka neuspjela!",
"MessageM4BFinished": "M4B završio!", "MessageM4BFinished": "M4B datoteka je završena!",
"MessageMapChapterTitles": "Mapiraj nazive poglavlja postojećim poglavljima zvučne knjige bez uređivanja vremenskih identifikatora", "MessageMapChapterTitles": "Mapiraj imana poglavlja s vašim postojećim poglavljima zvučne knjige bez podešavanja vremenskih identifikatora",
"MessageMarkAllEpisodesFinished": "Označi sve nastavke dovršenima", "MessageMarkAllEpisodesFinished": "Označi sve nastavke kao završene",
"MessageMarkAllEpisodesNotFinished": "Označi sve nastavke nedovršenima", "MessageMarkAllEpisodesNotFinished": "Označi sve nastavke kao nezavršene",
"MessageMarkAsFinished": "Označi kao dovršeno", "MessageMarkAsFinished": "Označi kao završeno",
"MessageMarkAsNotFinished": "Označi kao nedovrš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 preko postojećih podataka.", "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", "MessageNoAudioTracks": "Nema zvučnih zapisa",
"MessageNoAuthors": "Nema autora", "MessageNoAuthors": "Nema autora",
"MessageNoBackups": "Nema sigurnosnih kopija", "MessageNoBackups": "Nema sigurnosnih kopija",
"MessageNoBookmarks": "Nema knjižnih oznaka", "MessageNoBookmarks": "Nema knjižnih oznaka",
"MessageNoChapters": "Nema poglavlja", "MessageNoChapters": "Nema poglavlja",
"MessageNoCollections": "Nema zbirki", "MessageNoCollections": "Nema zbirki",
"MessageNoCoversFound": "Naslovnice nisu pronađene", "MessageNoCoversFound": "Nije pronađena nijedna naslovnica",
"MessageNoDescription": "Nema opisa", "MessageNoDescription": "Nema opisa",
"MessageNoDevices": "Nema uređaja", "MessageNoDevices": "Nema uređaja",
"MessageNoDownloadsInProgress": "Nema preuzimanja u tijeku", "MessageNoDownloadsInProgress": "Trenutačno nema preuzimanja u tijeku",
"MessageNoDownloadsQueued": "Nema preuzimanja u redu", "MessageNoDownloadsQueued": "Nema preuzimanja u redu",
"MessageNoEpisodeMatchesFound": "Nije pronađen ni jedan odgovarajući nastavak", "MessageNoEpisodeMatchesFound": "Nije pronađen ni jedan odgovarajući nastavak",
"MessageNoEpisodes": "Nema nastavaka", "MessageNoEpisodes": "Nema nastavaka",
@@ -873,28 +873,28 @@
"MessagePauseChapter": "Pauziraj reprodukciju poglavlja", "MessagePauseChapter": "Pauziraj reprodukciju poglavlja",
"MessagePlayChapter": "Slušaj početak poglavlja", "MessagePlayChapter": "Slušaj početak poglavlja",
"MessagePlaylistCreateFromCollection": "Stvori popis za izvođenje od zbirke", "MessagePlaylistCreateFromCollection": "Stvori popis za izvođenje od zbirke",
"MessagePleaseWait": "Molimo pričekajte...", "MessagePleaseWait": "Pričekajte...",
"MessagePodcastHasNoRSSFeedForMatching": "Podcast nema adresu RSS izvora za prepoznavanje", "MessagePodcastHasNoRSSFeedForMatching": "Podcast nema adresu RSS izvora za prepoznavanje",
"MessagePodcastSearchField": "Upišite izraz za pretraživanje ili URL RSS izvora", "MessagePodcastSearchField": "Upišite izraz za pretraživanje ili URL RSS izvora",
"MessageQuickEmbedInProgress": "Brzo ugrađivanje u tijeku", "MessageQuickEmbedInProgress": "Brzo ugrađivanje u tijeku",
"MessageQuickEmbedQueue": "Dodano u red za brzo ugrađivanje ({0} u redu izvođenja)", "MessageQuickEmbedQueue": "Dodano u red za brzo ugrađivanje ({0} u redu izvođenja)",
"MessageQuickMatchAllEpisodes": "Brzo prepoznavanje svih nastavaka", "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", "MessageRemoveChapter": "Ukloni poglavlje",
"MessageRemoveEpisodes": "Ukloni {0} nastavaka", "MessageRemoveEpisodes": "Ukloni {0} nastavaka",
"MessageRemoveFromPlayerQueue": "Ukloni iz redoslijeda izvođenja", "MessageRemoveFromPlayerQueue": "Ukloni iz redoslijeda izvođenja",
"MessageRemoveUserWarning": "Sigurno želite trajno izbrisati korisnika \"{0}\"?", "MessageRemoveUserWarning": "Sigurno želite trajno izbrisati korisnika \"{0}\"?",
"MessageReportBugsAndContribute": "Prijavite pogreške, zatražite značajke 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?", "MessageResetChaptersConfirm": "Sigurno želite vratiti poglavlja na prethodno stanje i poništiti učinjene promjene?",
"MessageRestoreBackupConfirm": "Sigurno želite vratiti sigurnosnu kopiju izrađenu", "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.", "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}", "MessageScheduleRunEveryWeekdayAtTime": "Pokreni svaki {0} u {1}",
"MessageSearchResultsFor": "Rezultati pretrage za", "MessageSearchResultsFor": "Rezultati pretrage za",
"MessageSelected": "{0} odabrano", "MessageSelected": "{0} odabrano",
"MessageSeriesSequenceCannotContainSpaces": "Slijed serijala ne može sadržavati praznine", "MessageSeriesSequenceCannotContainSpaces": "Slijed serijala ne može sadržavati praznine",
"MessageServerCouldNotBeReached": "Nije moguće pristupiti poslužitelju", "MessageServerCouldNotBeReached": "Nije bilo moguće pristupiti poslužitelju",
"MessageSetChaptersFromTracksDescription": "Postavi poglavlja koristeći se zvučnom datotekom kao poglavljem i nazivom datoteke kao naslovom poglavlja", "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>", "MessageShareExpirationWillBe": "Vrijeme isteka će biti <strong>{0}</strong>",
"MessageShareExpiresIn": "Istječe za {0}", "MessageShareExpiresIn": "Istječe za {0}",
"MessageShareURLWillBe": "URL za dijeljenje bit će <strong>{0}</strong>", "MessageShareURLWillBe": "URL za dijeljenje bit će <strong>{0}</strong>",
@@ -923,7 +923,7 @@
"MessageTaskOpmlImportFeedPodcastDescription": "Stvaranje podcasta \"{0}\"", "MessageTaskOpmlImportFeedPodcastDescription": "Stvaranje podcasta \"{0}\"",
"MessageTaskOpmlImportFeedPodcastExists": "Podcast već postoji u putanji", "MessageTaskOpmlImportFeedPodcastExists": "Podcast već postoji u putanji",
"MessageTaskOpmlImportFeedPodcastFailed": "Stvaranje podcasta nije uspjelo", "MessageTaskOpmlImportFeedPodcastFailed": "Stvaranje podcasta nije uspjelo",
"MessageTaskOpmlImportFinished": "Dodano {0} podcasta", "MessageTaskOpmlImportFinished": "Broj dodanih podcasta: {0}",
"MessageTaskOpmlParseFailed": "Raščlanjivanje OPML datoteke nije uspjelo", "MessageTaskOpmlParseFailed": "Raščlanjivanje OPML datoteke nije uspjelo",
"MessageTaskOpmlParseFastFail": "Neispravna OPML datoteka, oznaka <opml> nije pronađena ILI oznaka <outline> nije pronađena", "MessageTaskOpmlParseFastFail": "Neispravna OPML datoteka, oznaka <opml> nije pronađena ILI oznaka <outline> nije pronađena",
"MessageTaskOpmlParseNoneFound": "U OPML datoteci nisu pronađeni izvori", "MessageTaskOpmlParseNoneFound": "U OPML datoteci nisu pronađeni izvori",
@@ -934,10 +934,10 @@
"MessageTaskScanningFileChanges": "Skeniranje izmijenjenih datoteka u \"{0}\"", "MessageTaskScanningFileChanges": "Skeniranje izmijenjenih datoteka u \"{0}\"",
"MessageTaskScanningLibrary": "Skeniranje knjižnice \"{0}\"", "MessageTaskScanningLibrary": "Skeniranje knjižnice \"{0}\"",
"MessageTaskTargetDirectoryNotWritable": "U odredišnu mapu nije moguće pisati", "MessageTaskTargetDirectoryNotWritable": "U odredišnu mapu nije moguće pisati",
"MessageThinking": "Razmišljam...", "MessageThinking": "Razmišljanje...",
"MessageUploaderItemFailed": "Učitavanje nije uspjelo", "MessageUploaderItemFailed": "Prijenos nije uspio",
"MessageUploaderItemSuccess": "Uspješno učitano!", "MessageUploaderItemSuccess": "Uspješno preneseno!",
"MessageUploading": "Učitavam...", "MessageUploading": "Prijenos...",
"MessageValidCronExpression": "Ispravan cron izraz", "MessageValidCronExpression": "Ispravan cron izraz",
"MessageWatcherIsDisabledGlobally": "Praćenje datotečnog sustava globalno je isključen u postavkama poslužitelja", "MessageWatcherIsDisabledGlobally": "Praćenje datotečnog sustava globalno je isključen u postavkama poslužitelja",
"MessageXLibraryIsEmpty": "{0} Knjižnica je prazna!", "MessageXLibraryIsEmpty": "{0} Knjižnica je prazna!",
@@ -949,8 +949,8 @@
"NoteRSSFeedPodcastAppsHttps": "Pripazite: Većina aplikacija za podcaste iziskuje URL RSS izvora koji se koristi HTTPS protokolom", "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.", "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.", "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.", "NoteUploaderOnlyAudioFiles": "Ako prenosite 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.", "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", "NotificationOnBackupCompletedDescription": "Pokreće se po završetku sigurnosnog kopiranja",
"NotificationOnBackupFailedDescription": "Pokreće se kada sigurnosno kopiranje ne uspije", "NotificationOnBackupFailedDescription": "Pokreće se kada sigurnosno kopiranje ne uspije",
"NotificationOnEpisodeDownloadedDescription": "Pokreće se kada se nastavak podcasta automatski preuzme", "NotificationOnEpisodeDownloadedDescription": "Pokreće se kada se nastavak podcasta automatski preuzme",
@@ -960,14 +960,14 @@
"PlaceholderBulkChapterInput": "Upišite naslov poglavlja ili ga numerirajte (npr. '1. nastavak', 'Poglavlje 10', '1.')", "PlaceholderBulkChapterInput": "Upišite naslov poglavlja ili ga numerirajte (npr. '1. nastavak', 'Poglavlje 10', '1.')",
"PlaceholderNewCollection": "Ime nove zbirke", "PlaceholderNewCollection": "Ime nove zbirke",
"PlaceholderNewFolderPath": "Nova putanja mape", "PlaceholderNewFolderPath": "Nova putanja mape",
"PlaceholderNewPlaylist": "Naziv novog popisa za izvođenje", "PlaceholderNewPlaylist": "Ime novog popisa za izvođenje",
"PlaceholderSearch": "Traži...", "PlaceholderSearch": "Traži...",
"PlaceholderSearchEpisode": "Traži nastavak...", "PlaceholderSearchEpisode": "Traži nastavak...",
"StatsAuthorsAdded": "autora dodano", "StatsAuthorsAdded": "autora dodano",
"StatsBooksAdded": "knjiga dodano", "StatsBooksAdded": "knjiga dodano",
"StatsBooksAdditional": "Novi naslovi uključuju…", "StatsBooksAdditional": "Novi naslovi uključuju…",
"StatsBooksFinished": "knjiga dovršeno", "StatsBooksFinished": "završene knjige",
"StatsBooksFinishedThisYear": "Neke knjige dovršene ove godine…", "StatsBooksFinishedThisYear": "Neke završene knjige ove godine…",
"StatsBooksListenedTo": "knjiga slušano", "StatsBooksListenedTo": "knjiga slušano",
"StatsCollectionGrewTo": "Vaša je zbirka knjiga narasla na…", "StatsCollectionGrewTo": "Vaša je zbirka knjiga narasla na…",
"StatsSessions": "sesija", "StatsSessions": "sesija",
@@ -999,8 +999,8 @@
"ToastBackupInvalidMaxKeep": "Neispravan broj sigurnosnih kopija za čuvanje", "ToastBackupInvalidMaxKeep": "Neispravan broj sigurnosnih kopija za čuvanje",
"ToastBackupInvalidMaxSize": "Neispravna najveća veličina sigurnosne kopije", "ToastBackupInvalidMaxSize": "Neispravna najveća veličina sigurnosne kopije",
"ToastBackupRestoreFailed": "Vraćanje sigurnosne kopije nije uspjelo", "ToastBackupRestoreFailed": "Vraćanje sigurnosne kopije nije uspjelo",
"ToastBackupUploadFailed": "Učitavanje sigurnosne kopije nije uspjelo", "ToastBackupUploadFailed": "Prijenos sigurnosne kopije nije uspio",
"ToastBackupUploadSuccess": "Sigurnosna kopija učitana", "ToastBackupUploadSuccess": "Sigurnosna kopija je prenesea",
"ToastBatchApplyDetailsToItemsSuccess": "Pojedinosti primijenjene stavkama", "ToastBatchApplyDetailsToItemsSuccess": "Pojedinosti primijenjene stavkama",
"ToastBatchDeleteFailed": "Grupno brisanje nije uspjelo", "ToastBatchDeleteFailed": "Grupno brisanje nije uspjelo",
"ToastBatchDeleteSuccess": "Grupno brisanje je uspjelo", "ToastBatchDeleteSuccess": "Grupno brisanje je uspjelo",
@@ -1023,7 +1023,7 @@
"ToastChaptersMustHaveTitles": "Poglavlja moraju imati naslove", "ToastChaptersMustHaveTitles": "Poglavlja moraju imati naslove",
"ToastChaptersRemoved": "Poglavlja uklonjena", "ToastChaptersRemoved": "Poglavlja uklonjena",
"ToastChaptersUpdated": "Poglavlja su ažurirana", "ToastChaptersUpdated": "Poglavlja su ažurirana",
"ToastCollectionItemsAddFailed": "Neuspješno dodavanje stavki u zbirku", "ToastCollectionItemsAddFailed": "Neuspjelo dodavanje stavki u zbirku",
"ToastCollectionRemoveSuccess": "Zbirka izbrisana", "ToastCollectionRemoveSuccess": "Zbirka izbrisana",
"ToastCollectionUpdateSuccess": "Zbirka ažurirana", "ToastCollectionUpdateSuccess": "Zbirka ažurirana",
"ToastConnectionNotAvailable": "Veza nije dostupna. Pokušaj ponovo kasnije", "ToastConnectionNotAvailable": "Veza nije dostupna. Pokušaj ponovo kasnije",
@@ -1033,13 +1033,13 @@
"ToastDeleteFileFailed": "Brisanje datoteke nije uspjelo", "ToastDeleteFileFailed": "Brisanje datoteke nije uspjelo",
"ToastDeleteFileSuccess": "Datoteka izbrisana", "ToastDeleteFileSuccess": "Datoteka izbrisana",
"ToastDeviceAddFailed": "Dodavanje uređaja nije uspjelo", "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", "ToastDeviceTestEmailFailed": "Slanje probne poruke e-pošte nije uspjelo",
"ToastDeviceTestEmailSuccess": "Probna poruka e-pošte poslana", "ToastDeviceTestEmailSuccess": "Probna poruka e-pošte poslana",
"ToastEmailSettingsUpdateSuccess": "Postavke e-pošte ažurirane", "ToastEmailSettingsUpdateSuccess": "Postavke e-pošte ažurirane",
"ToastEncodeCancelFailed": "Kodiranje nije uspješno otkazano", "ToastEncodeCancelFailed": "Prekidanje kodiranja nije uspjelo",
"ToastEncodeCancelSucces": "Kodiranje otkazano", "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", "ToastEpisodeDownloadQueueClearSuccess": "Redoslijed preuzimanja nastavaka očišćen",
"ToastEpisodeUpdateSuccess": "{0} nastavak/a ažurirano", "ToastEpisodeUpdateSuccess": "{0} nastavak/a ažurirano",
"ToastErrorCannotShare": "Dijeljenje na ovaj uređaj nije moguće", "ToastErrorCannotShare": "Dijeljenje na ovaj uređaj nije moguće",
@@ -1057,10 +1057,10 @@
"ToastItemDeletedFailed": "Brisanje stavke nije uspjelo", "ToastItemDeletedFailed": "Brisanje stavke nije uspjelo",
"ToastItemDeletedSuccess": "Stavka je izbrisana", "ToastItemDeletedSuccess": "Stavka je izbrisana",
"ToastItemDetailsUpdateSuccess": "Pojedinosti stavke su ažurirane", "ToastItemDetailsUpdateSuccess": "Pojedinosti stavke su ažurirane",
"ToastItemMarkedAsFinishedFailed": "Označavanje kao Dovršeno nije uspjelo", "ToastItemMarkedAsFinishedFailed": "Označavanje kao „Završeno nije uspjelo",
"ToastItemMarkedAsFinishedSuccess": "Stavka označena kao dovršena", "ToastItemMarkedAsFinishedSuccess": "Stavka je označena kao završena",
"ToastItemMarkedAsNotFinishedFailed": "Označavanje kao Nije dovršeno nije uspjelo", "ToastItemMarkedAsNotFinishedFailed": "Označavanje kao „Nezavršeno nije uspjelo",
"ToastItemMarkedAsNotFinishedSuccess": "Stavka označena kao nedovršena", "ToastItemMarkedAsNotFinishedSuccess": "Stavka je označena kao nezavršena",
"ToastItemUpdateSuccess": "Stavka ažurirana", "ToastItemUpdateSuccess": "Stavka ažurirana",
"ToastLibraryCreateFailed": "Stvaranje knjižnice nije uspjelo", "ToastLibraryCreateFailed": "Stvaranje knjižnice nije uspjelo",
"ToastLibraryCreateSuccess": "Knjižnica \"{0}\" stvorena", "ToastLibraryCreateSuccess": "Knjižnica \"{0}\" stvorena",
@@ -1069,17 +1069,17 @@
"ToastLibraryScanFailedToStart": "Skeniranje nije uspjelo", "ToastLibraryScanFailedToStart": "Skeniranje nije uspjelo",
"ToastLibraryScanStarted": "Skeniranje knjižnice započelo", "ToastLibraryScanStarted": "Skeniranje knjižnice započelo",
"ToastLibraryUpdateSuccess": "Knjižnica \"{0}\" ažurirana", "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}", "ToastMetadataFilesRemovedError": "Pogreška kod uklanjanja datoteka metadata.{0}",
"ToastMetadataFilesRemovedNoneFound": "U knjižnici nisu pronađene datoteke metadata.{0}", "ToastMetadataFilesRemovedNoneFound": "U knjižnici nisu pronađene datoteke metadata.{0}",
"ToastMetadataFilesRemovedNoneRemoved": "Datoteke metadata.{0} nisu uklonjenje", "ToastMetadataFilesRemovedNoneRemoved": "Nijedna datoteka metadata.{0} nije uklonjenja",
"ToastMetadataFilesRemovedSuccess": "uklonjeno {0} datoteka metadata.{1}", "ToastMetadataFilesRemovedSuccess": "Broj uklonjenih datoteka metadata.{1}: {0}",
"ToastMustHaveAtLeastOnePath": "Mora postojati barem jedna putanja", "ToastMustHaveAtLeastOnePath": "Mora imati barem jednu putanju",
"ToastNameEmailRequired": "Ime i adresa e-pošte su obavezni", "ToastNameEmailRequired": "Ime i adresa e-pošte su obavezni",
"ToastNameRequired": "Ime je obavezno", "ToastNameRequired": "Ime je obavezno",
"ToastNewApiKeyUserError": "Morate odabrati korisnika", "ToastNewApiKeyUserError": "Morate odabrati korisnika",
"ToastNewEpisodesFound": "pronađeno {0} novih nastavaka", "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", "ToastNewUserCreatedSuccess": "Novi račun izrađen",
"ToastNewUserLibraryError": "Treba odabrati barem jednu knjižnicu", "ToastNewUserLibraryError": "Treba odabrati barem jednu knjižnicu",
"ToastNewUserPasswordError": "Mora imati zaporku, samo korisnik root može imati praznu zaporku", "ToastNewUserPasswordError": "Mora imati zaporku, samo korisnik root može imati praznu zaporku",
@@ -1090,20 +1090,20 @@
"ToastNoUpdatesNecessary": "Ažuriranja nisu potrebna", "ToastNoUpdatesNecessary": "Ažuriranja nisu potrebna",
"ToastNotificationCreateFailed": "Stvaranje obavijesti nije uspjelo", "ToastNotificationCreateFailed": "Stvaranje obavijesti nije uspjelo",
"ToastNotificationDeleteFailed": "Brisanje 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", "ToastNotificationQueueMaximum": "Najveći broj obavijesti u redu mora biti >= 0",
"ToastNotificationSettingsUpdateSuccess": "Postavke obavijesti ažurirane", "ToastNotificationSettingsUpdateSuccess": "Postavke obavijesti ažurirane",
"ToastNotificationTestTriggerFailed": "Okidanje probne obavijesti nije uspjelo", "ToastNotificationTestTriggerFailed": "Okidanje probne obavijesti nije uspjelo",
"ToastNotificationTestTriggerSuccess": "Okinuta je probna obavijest", "ToastNotificationTestTriggerSuccess": "Okinuta je probna obavijest",
"ToastNotificationUpdateSuccess": "Obavijest ažurirana", "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", "ToastPlaylistCreateSuccess": "Popis za izvođenje izrađen",
"ToastPlaylistRemoveSuccess": "Popis za izvođenje uklonjen", "ToastPlaylistRemoveSuccess": "Popis za izvođenje uklonjen",
"ToastPlaylistUpdateSuccess": "Popis za izvođenje ažuriran", "ToastPlaylistUpdateSuccess": "Popis za izvođenje ažuriran",
"ToastPodcastCreateFailed": "Podcast nije izrađen", "ToastPodcastCreateFailed": "Stvaranje podcasta nije uspjelo",
"ToastPodcastCreateSuccess": "Podcast uspješno izrađen", "ToastPodcastCreateSuccess": "Podcast uspješno izrađen",
"ToastPodcastEpisodeUpdated": "Nastavak ažuriran", "ToastPodcastEpisodeUpdated": "Nastavak ažuriran",
"ToastPodcastGetFeedFailed": "Dohvat izvora podcasta nije uspio", "ToastPodcastGetFeedFailed": "Dohvaćanje izvora podcasta nije uspjelo",
"ToastPodcastNoEpisodesInFeed": "U RSS izvoru nisu pronađeni nastavci", "ToastPodcastNoEpisodesInFeed": "U RSS izvoru nisu pronađeni nastavci",
"ToastPodcastNoRssFeed": "Podcast nema RSS izvor", "ToastPodcastNoRssFeed": "Podcast nema RSS izvor",
"ToastProgressIsNotBeingSynced": "Napredak se ne sinkronizira, ponovno pokrenite reprodukciju", "ToastProgressIsNotBeingSynced": "Napredak se ne sinkronizira, ponovno pokrenite reprodukciju",
@@ -1111,7 +1111,7 @@
"ToastProviderCreatedSuccess": "Novi pružatelj dodan", "ToastProviderCreatedSuccess": "Novi pružatelj dodan",
"ToastProviderNameAndUrlRequired": "Ime i URL su obavezni", "ToastProviderNameAndUrlRequired": "Ime i URL su obavezni",
"ToastProviderRemoveSuccess": "Pružatelj uklonjen", "ToastProviderRemoveSuccess": "Pružatelj uklonjen",
"ToastRSSFeedCloseFailed": "RSS izvor nije uspješno zatvoren", "ToastRSSFeedCloseFailed": "Zatvaranje RSS izvora nije uspjelo",
"ToastRSSFeedCloseSuccess": "RSS izvor zatvoren", "ToastRSSFeedCloseSuccess": "RSS izvor zatvoren",
"ToastRemoveFailed": "Uklanjanje nije uspjelo", "ToastRemoveFailed": "Uklanjanje nije uspjelo",
"ToastRemoveItemFromCollectionFailed": "Uklanjanje stavke iz zbirke nije uspjelo", "ToastRemoveItemFromCollectionFailed": "Uklanjanje stavke iz zbirke nije uspjelo",
@@ -1119,7 +1119,7 @@
"ToastRemoveItemsWithIssuesFailed": "Uklanjanje knjižničkih stavki s problemima nije uspjelo", "ToastRemoveItemsWithIssuesFailed": "Uklanjanje knjižničkih stavki s problemima nije uspjelo",
"ToastRemoveItemsWithIssuesSuccess": "Uspješno uklonjene knjižničke stavke s problemima", "ToastRemoveItemsWithIssuesSuccess": "Uspješno uklonjene knjižničke stavke s problemima",
"ToastRenameFailed": "Preimenovanje nije uspjelo", "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", "ToastRescanRemoved": "Ponovno skeniranje dovršene stavke je uklonjeno",
"ToastRescanUpToDate": "Ponovno skeniranje dovršene stavke bilo je ažurno", "ToastRescanUpToDate": "Ponovno skeniranje dovršene stavke bilo je ažurno",
"ToastRescanUpdated": "Ponovno skeniranje dovršene stavke je ažurirano", "ToastRescanUpdated": "Ponovno skeniranje dovršene stavke je ažurirano",
@@ -1134,7 +1134,7 @@
"ToastSessionCloseFailed": "Zatvaranje sesije nije uspjelo", "ToastSessionCloseFailed": "Zatvaranje sesije nije uspjelo",
"ToastSessionDeleteFailed": "Brisanje sesije nije uspjelo", "ToastSessionDeleteFailed": "Brisanje sesije nije uspjelo",
"ToastSessionDeleteSuccess": "Sesija izbrisana", "ToastSessionDeleteSuccess": "Sesija izbrisana",
"ToastSleepTimerDone": "Timer za spavanje istječe... zZzzZz", "ToastSleepTimerDone": "Timer za spavanje gotov... zZzzZz",
"ToastSlugMustChange": "Slug sadrži nedozvoljene znakove", "ToastSlugMustChange": "Slug sadrži nedozvoljene znakove",
"ToastSlugRequired": "Slug je obavezan", "ToastSlugRequired": "Slug je obavezan",
"ToastSocketConnected": "Socket priključen", "ToastSocketConnected": "Socket priključen",
@@ -1146,8 +1146,8 @@
"ToastUnknownError": "Nepoznata pogreška", "ToastUnknownError": "Nepoznata pogreška",
"ToastUnlinkOpenIdFailed": "Uklanjanje OpenID veze korisnika nije uspjelo", "ToastUnlinkOpenIdFailed": "Uklanjanje OpenID veze korisnika nije uspjelo",
"ToastUnlinkOpenIdSuccess": "Korisnik odspojen od OpenID-ja", "ToastUnlinkOpenIdSuccess": "Korisnik odspojen od OpenID-ja",
"ToastUploaderFilepathExistsError": "Putanja \"{0}\" već postoji na poslužitelju", "ToastUploaderFilepathExistsError": "Datotečna putanja \"{0}\" već postoji na poslužitelju",
"ToastUploaderItemExistsInSubdirectoryError": "Stavka \"{0}\" koristi se podmapom u putanje za učitavanje.", "ToastUploaderItemExistsInSubdirectoryError": "Stavka \"{0}\" koristi podmapu putanje za prijenos.",
"ToastUserDeleteFailed": "Brisanje korisnika nije uspjelo", "ToastUserDeleteFailed": "Brisanje korisnika nije uspjelo",
"ToastUserDeleteSuccess": "Korisnik izbrisan", "ToastUserDeleteSuccess": "Korisnik izbrisan",
"ToastUserPasswordChangeSuccess": "Zaporka je uspješno promijenjena", "ToastUserPasswordChangeSuccess": "Zaporka je uspješno promijenjena",
+10 -10
View File
@@ -16,7 +16,7 @@
"ButtonBrowseForFolder": "Mappa keresése", "ButtonBrowseForFolder": "Mappa keresése",
"ButtonCancel": "Mégse", "ButtonCancel": "Mégse",
"ButtonCancelEncode": "Kódolás megszakítása", "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", "ButtonCheckAndDownloadNewEpisodes": "Új epizódok ellenőrzése és letöltése",
"ButtonChooseAFolder": "Válassz egy mappát", "ButtonChooseAFolder": "Válassz egy mappát",
"ButtonChooseFiles": "Fájlok kiválasztása", "ButtonChooseFiles": "Fájlok kiválasztása",
@@ -205,7 +205,7 @@
"HeaderSleepTimer": "Alvásidőzítő", "HeaderSleepTimer": "Alvásidőzítő",
"HeaderStatsLargestItems": "Legnagyobb elemek", "HeaderStatsLargestItems": "Legnagyobb elemek",
"HeaderStatsLongestItems": "Leghosszabb elemek (órában)", "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", "HeaderStatsRecentSessions": "Legutóbbi munkamenetek",
"HeaderStatsTop10Authors": "Top 10 szerző", "HeaderStatsTop10Authors": "Top 10 szerző",
"HeaderStatsTop5Genres": "Top 5 műfaj", "HeaderStatsTop5Genres": "Top 5 műfaj",
@@ -286,7 +286,7 @@
"LabelClickToUseCurrentValue": "Kattintson az aktuális érték használatához", "LabelClickToUseCurrentValue": "Kattintson az aktuális érték használatához",
"LabelClosePlayer": "Lejátszó bezárása", "LabelClosePlayer": "Lejátszó bezárása",
"LabelCodec": "Kodek", "LabelCodec": "Kodek",
"LabelCollapseSeries": "Sorozat összecsukása", "LabelCollapseSeries": "Sorozatok összecsukása",
"LabelCollapseSubSeries": "Alszéria összecsukása", "LabelCollapseSubSeries": "Alszéria összecsukása",
"LabelCollection": "Gyűjtemény", "LabelCollection": "Gyűjtemény",
"LabelCollections": "Gyűjtemények", "LabelCollections": "Gyűjtemények",
@@ -383,7 +383,7 @@
"LabelFolders": "Mappák", "LabelFolders": "Mappák",
"LabelFontBold": "Félkövér", "LabelFontBold": "Félkövér",
"LabelFontBoldness": "Betű vastagság", "LabelFontBoldness": "Betű vastagság",
"LabelFontFamily": "Betűtípus család", "LabelFontFamily": "Betűcsalád",
"LabelFontItalic": "Dőlt", "LabelFontItalic": "Dőlt",
"LabelFontScale": "Betűméret skála", "LabelFontScale": "Betűméret skála",
"LabelFontStrikethrough": "Áthúzott", "LabelFontStrikethrough": "Áthúzott",
@@ -499,7 +499,7 @@
"LabelNumberOfEpisodes": "Epizódok 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:", "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.", "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", "LabelOpenRSSFeed": "RSS hírcsatorna megnyitása",
"LabelOverwrite": "Felülírás", "LabelOverwrite": "Felülírás",
"LabelPaginationPageXOfY": "{0} oldal {1}-ból/ből", "LabelPaginationPageXOfY": "{0} oldal {1}-ból/ből",
@@ -588,8 +588,8 @@
"LabelSettingsBookshelfViewHelp": "Skeuomorfikus dizájn fa polcokkal", "LabelSettingsBookshelfViewHelp": "Skeuomorfikus dizájn fa polcokkal",
"LabelSettingsChromecastSupport": "Chromecast támogatás", "LabelSettingsChromecastSupport": "Chromecast támogatás",
"LabelSettingsDateFormat": "Dátumformátum", "LabelSettingsDateFormat": "Dátumformátum",
"LabelSettingsEnableWatcher": "Változások automatikus vizsgálata a könyvtárakban", "LabelSettingsEnableWatcher": "Változások automatikus figyelése a könyvtárakban",
"LabelSettingsEnableWatcherForLibrary": "Változások automatikus vizsgálata a könyvtárban", "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", "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", "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.", "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.",
@@ -643,8 +643,8 @@
"LabelStatsAuthors": "Szerző", "LabelStatsAuthors": "Szerző",
"LabelStatsBestDay": "Legjobb nap", "LabelStatsBestDay": "Legjobb nap",
"LabelStatsDailyAverage": "Napi átlag", "LabelStatsDailyAverage": "Napi átlag",
"LabelStatsDays": "Napok", "LabelStatsDays": "Nap",
"LabelStatsDaysListened": "Hallgatással töltött napok", "LabelStatsDaysListened": "Hallgatással töltött nap",
"LabelStatsHours": "Órák", "LabelStatsHours": "Órák",
"LabelStatsInARow": "egymás után", "LabelStatsInARow": "egymás után",
"LabelStatsItemsFinished": "Befejezett elem", "LabelStatsItemsFinished": "Befejezett elem",
@@ -888,7 +888,7 @@
"MessageResetChaptersConfirm": "Biztosan alaphelyzetbe szeretné állítani a fejezeteket és visszavonni a módosításokat?", "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:", "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.", "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", "MessageScheduleRunEveryWeekdayAtTime": "Futás minden {1} óra {0}-kor",
"MessageSearchResultsFor": "Keresési eredmények", "MessageSearchResultsFor": "Keresési eredmények",
"MessageSelected": "{0} kiválasztva", "MessageSelected": "{0} kiválasztva",
+1
View File
@@ -0,0 +1 @@
{}
+22 -16
View File
@@ -34,7 +34,7 @@
"ButtonEditChapters": "Modifica Capitoli", "ButtonEditChapters": "Modifica Capitoli",
"ButtonEditPodcast": "Modifica Podcast", "ButtonEditPodcast": "Modifica Podcast",
"ButtonEnable": "Abilita", "ButtonEnable": "Abilita",
"ButtonFireAndFail": "Fire and Fail", "ButtonFireAndFail": "Centro e fallimento",
"ButtonFireOnTest": "Fire onTest event", "ButtonFireOnTest": "Fire onTest event",
"ButtonForceReScan": "Forza Re-Scan", "ButtonForceReScan": "Forza Re-Scan",
"ButtonFullPath": "Percorso Completo", "ButtonFullPath": "Percorso Completo",
@@ -182,7 +182,7 @@
"HeaderPlaylist": "Playlist", "HeaderPlaylist": "Playlist",
"HeaderPlaylistItems": "Elementi della playlist", "HeaderPlaylistItems": "Elementi della playlist",
"HeaderPodcastsToAdd": "Podcasts da Aggiungere", "HeaderPodcastsToAdd": "Podcasts da Aggiungere",
"HeaderPresets": "Presets", "HeaderPresets": "Preimpostazioni",
"HeaderPreviewCover": "Anteprima Cover", "HeaderPreviewCover": "Anteprima Cover",
"HeaderRSSFeedGeneral": "Dettagli RSS", "HeaderRSSFeedGeneral": "Dettagli RSS",
"HeaderRSSFeedIsOpen": "RSS Feed è aperto", "HeaderRSSFeedIsOpen": "RSS Feed è aperto",
@@ -275,7 +275,7 @@
"LabelBonus": "Bonus", "LabelBonus": "Bonus",
"LabelBooks": "Libri", "LabelBooks": "Libri",
"LabelButtonText": "Buttone Testo", "LabelButtonText": "Buttone Testo",
"LabelByAuthor": "da {0}", "LabelByAuthor": "di {0}",
"LabelChangePassword": "Cambia Password", "LabelChangePassword": "Cambia Password",
"LabelChannels": "Canali", "LabelChannels": "Canali",
"LabelChapterCount": "{0} Capitoli", "LabelChapterCount": "{0} Capitoli",
@@ -306,9 +306,10 @@
"LabelCustomCronExpression": "Espressione Cron personalizzata:", "LabelCustomCronExpression": "Espressione Cron personalizzata:",
"LabelDatetime": "Data & Ora", "LabelDatetime": "Data & Ora",
"LabelDays": "Giorni", "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", "LabelDescription": "Descrizione",
"LabelDeselectAll": "Deseleziona Tutto", "LabelDeselectAll": "Deseleziona Tutto",
"LabelDetectedPattern": "Trovato pattern:",
"LabelDevice": "Dispositivo", "LabelDevice": "Dispositivo",
"LabelDeviceInfo": "Info dispositivo", "LabelDeviceInfo": "Info dispositivo",
"LabelDeviceIsAvailableTo": "Il dispositivo e disponibile su…", "LabelDeviceIsAvailableTo": "Il dispositivo e disponibile su…",
@@ -377,11 +378,12 @@
"LabelFilterByUser": "Filtro per Utente", "LabelFilterByUser": "Filtro per Utente",
"LabelFindEpisodes": "Trova Episodi", "LabelFindEpisodes": "Trova Episodi",
"LabelFinished": "Finita", "LabelFinished": "Finita",
"LabelFinishedDate": "Finito {0}",
"LabelFolder": "Cartella", "LabelFolder": "Cartella",
"LabelFolders": "Cartelle", "LabelFolders": "Cartelle",
"LabelFontBold": "Grassetto", "LabelFontBold": "Grassetto",
"LabelFontBoldness": "Grassetto", "LabelFontBoldness": "Grassetto",
"LabelFontFamily": "Famiglia di caratteri", "LabelFontFamily": "Famiglia caratteri",
"LabelFontItalic": "Corsivo", "LabelFontItalic": "Corsivo",
"LabelFontScale": "Dimensione font", "LabelFontScale": "Dimensione font",
"LabelFontStrikethrough": "Barrato", "LabelFontStrikethrough": "Barrato",
@@ -434,8 +436,9 @@
"LabelLibraryFilterSublistEmpty": "Nessuno {0}", "LabelLibraryFilterSublistEmpty": "Nessuno {0}",
"LabelLibraryItem": "Elementi della biblioteca", "LabelLibraryItem": "Elementi della biblioteca",
"LabelLibraryName": "Nome della biblioteca", "LabelLibraryName": "Nome della biblioteca",
"LabelLibrarySortByProgress": "Aggiornamento dei progressi", "LabelLibrarySortByProgress": "Progresso: ultimo aggiornamento",
"LabelLibrarySortByProgressStarted": "Data di inizio", "LabelLibrarySortByProgressFinished": "Progresso: finito",
"LabelLibrarySortByProgressStarted": "Progresso: iniziato",
"LabelLimit": "Limiti", "LabelLimit": "Limiti",
"LabelLineSpacing": "Interlinea", "LabelLineSpacing": "Interlinea",
"LabelListenAgain": "Ascolta ancora", "LabelListenAgain": "Ascolta ancora",
@@ -494,7 +497,7 @@
"LabelNumberOfBooks": "Numero di libri", "LabelNumberOfBooks": "Numero di libri",
"LabelNumberOfChapters": "Numero di capitoli:", "LabelNumberOfChapters": "Numero di capitoli:",
"LabelNumberOfEpisodes": "Numero di episodi", "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\".", "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.", "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", "LabelOpenRSSFeed": "Apri RSS Feed",
@@ -527,7 +530,7 @@
"LabelPrimaryEbook": "Libro principale", "LabelPrimaryEbook": "Libro principale",
"LabelProgress": "Cominciati", "LabelProgress": "Cominciati",
"LabelProvider": "Fornitore", "LabelProvider": "Fornitore",
"LabelProviderAuthorizationValue": "Authorization Header Value", "LabelProviderAuthorizationValue": "Valore intestazione di autorizzazione",
"LabelPubDate": "Data di pubblicazione", "LabelPubDate": "Data di pubblicazione",
"LabelPublishYear": "Anno di pubblicazione", "LabelPublishYear": "Anno di pubblicazione",
"LabelPublishedDate": "Pubblicati {0}", "LabelPublishedDate": "Pubblicati {0}",
@@ -585,8 +588,8 @@
"LabelSettingsBookshelfViewHelp": "Design con scaffali in legno", "LabelSettingsBookshelfViewHelp": "Design con scaffali in legno",
"LabelSettingsChromecastSupport": "Supporto a Chromecast", "LabelSettingsChromecastSupport": "Supporto a Chromecast",
"LabelSettingsDateFormat": "Formato Data", "LabelSettingsDateFormat": "Formato Data",
"LabelSettingsEnableWatcher": "Scansiona le librerie Automaticamente per trovare modifiche", "LabelSettingsEnableWatcher": "Controlla automaticamente le modifiche alle librerie",
"LabelSettingsEnableWatcherForLibrary": "Scansiona la libreria Automaticamente per trovare modifiche", "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", "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", "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.", "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.",
@@ -635,6 +638,7 @@
"LabelStartTime": "Tempo di inizio", "LabelStartTime": "Tempo di inizio",
"LabelStarted": "Iniziato", "LabelStarted": "Iniziato",
"LabelStartedAt": "Iniziato al", "LabelStartedAt": "Iniziato al",
"LabelStartedDate": "Iniziati {0}",
"LabelStatsAudioTracks": "Tracce Audio", "LabelStatsAudioTracks": "Tracce Audio",
"LabelStatsAuthors": "Autori", "LabelStatsAuthors": "Autori",
"LabelStatsBestDay": "Giorno migliore", "LabelStatsBestDay": "Giorno migliore",
@@ -670,7 +674,7 @@
"LabelTimeDurationXMinutes": "{0} minuti", "LabelTimeDurationXMinutes": "{0} minuti",
"LabelTimeDurationXSeconds": "{0} secondi", "LabelTimeDurationXSeconds": "{0} secondi",
"LabelTimeInMinutes": "Tempo in minuti", "LabelTimeInMinutes": "Tempo in minuti",
"LabelTimeLeft": "{0} sinistra", "LabelTimeLeft": "{0} rimasti",
"LabelTimeListened": "Tempo di Ascolto", "LabelTimeListened": "Tempo di Ascolto",
"LabelTimeListenedToday": "Tempo di Ascolto Oggi", "LabelTimeListenedToday": "Tempo di Ascolto Oggi",
"LabelTimeRemaining": "{0} rimanente", "LabelTimeRemaining": "{0} rimanente",
@@ -678,7 +682,7 @@
"LabelTitle": "Titolo", "LabelTitle": "Titolo",
"LabelToolsEmbedMetadata": "Incorpora Metadata", "LabelToolsEmbedMetadata": "Incorpora Metadata",
"LabelToolsEmbedMetadataDescription": "Incorpora i metadati nei file audio, inclusi l'immagine di copertina e i capitoli.", "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", "LabelToolsMakeM4b": "Crea un file M4B",
"LabelToolsMakeM4bDescription": "Genera un file audiolibro M4B con metadati incorporati, immagine di copertina e capitoli.", "LabelToolsMakeM4bDescription": "Genera un file audiolibro M4B con metadati incorporati, immagine di copertina e capitoli.",
"LabelToolsSplitM4b": "Converti M4B in MP3", "LabelToolsSplitM4b": "Converti M4B in MP3",
@@ -850,7 +854,7 @@
"MessageNoItems": "Nessun oggetto", "MessageNoItems": "Nessun oggetto",
"MessageNoItemsFound": "Nessun oggetto trovato", "MessageNoItemsFound": "Nessun oggetto trovato",
"MessageNoListeningSessions": "Nessuna sessione di ascolto", "MessageNoListeningSessions": "Nessuna sessione di ascolto",
"MessageNoLogs": "Nessun Log", "MessageNoLogs": "Nessun rapporto",
"MessageNoMediaProgress": "Nessun progresso multimediale", "MessageNoMediaProgress": "Nessun progresso multimediale",
"MessageNoNotifications": "Nessuna notifica", "MessageNoNotifications": "Nessuna notifica",
"MessageNoPodcastFeed": "Podcast non valido: nessun feed", "MessageNoPodcastFeed": "Podcast non valido: nessun feed",
@@ -884,7 +888,7 @@
"MessageResetChaptersConfirm": "Sei sicuro di voler reimpostare i capitoli e annullare le modifiche ?", "MessageResetChaptersConfirm": "Sei sicuro di voler reimpostare i capitoli e annullare le modifiche ?",
"MessageRestoreBackupConfirm": "Sei sicuro di voler ripristinare il backup creato su", "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.", "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}", "MessageScheduleRunEveryWeekdayAtTime": "Esegui ogni {0} alle {1}",
"MessageSearchResultsFor": "cerca risultati per", "MessageSearchResultsFor": "cerca risultati per",
"MessageSelected": "{0} selezionati", "MessageSelected": "{0} selezionati",
@@ -1022,6 +1026,8 @@
"ToastCollectionItemsAddFailed": "l'aggiunta dell'elemento(i) alla raccolta non è riuscito", "ToastCollectionItemsAddFailed": "l'aggiunta dell'elemento(i) alla raccolta non è riuscito",
"ToastCollectionRemoveSuccess": "Collezione rimossa", "ToastCollectionRemoveSuccess": "Collezione rimossa",
"ToastCollectionUpdateSuccess": "Raccolta aggiornata", "ToastCollectionUpdateSuccess": "Raccolta aggiornata",
"ToastConnectionNotAvailable": "Connessione non disponibile. Provare più tardi",
"ToastCoverSearchFailed": "Ricerca Cover fallita",
"ToastCoverUpdateFailed": "Aggiornamento cover fallito", "ToastCoverUpdateFailed": "Aggiornamento cover fallito",
"ToastDateTimeInvalidOrIncomplete": "Data e ora non sono valide o incomplete", "ToastDateTimeInvalidOrIncomplete": "Data e ora non sono valide o incomplete",
"ToastDeleteFileFailed": "Impossibile eliminare il file", "ToastDeleteFileFailed": "Impossibile eliminare il file",
@@ -1103,7 +1109,7 @@
"ToastProgressIsNotBeingSynced": "L'avanzamento non è sincronizzato, riavviare la riproduzione", "ToastProgressIsNotBeingSynced": "L'avanzamento non è sincronizzato, riavviare la riproduzione",
"ToastProviderCreatedFailed": "Impossibile aggiungere il provider", "ToastProviderCreatedFailed": "Impossibile aggiungere il provider",
"ToastProviderCreatedSuccess": "Aggiunto nuovo provider", "ToastProviderCreatedSuccess": "Aggiunto nuovo provider",
"ToastProviderNameAndUrlRequired": "Nome e URL richiesti", "ToastProviderNameAndUrlRequired": "Nome e Url richiesti",
"ToastProviderRemoveSuccess": "Provider rimosso", "ToastProviderRemoveSuccess": "Provider rimosso",
"ToastRSSFeedCloseFailed": "Errore chiusura flusso RSS", "ToastRSSFeedCloseFailed": "Errore chiusura flusso RSS",
"ToastRSSFeedCloseSuccess": "Flusso RSS chiuso", "ToastRSSFeedCloseSuccess": "Flusso RSS chiuso",
+1008 -25
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+6 -3
View File
@@ -1,5 +1,6 @@
{ {
"ButtonAdd": "Pridėti", "ButtonAdd": "Pridėti",
"ButtonAddApiKey": "Pridėti API raktą",
"ButtonAddChapters": "Pridėti skyrius", "ButtonAddChapters": "Pridėti skyrius",
"ButtonAddDevice": "Pridėti įrenginį", "ButtonAddDevice": "Pridėti įrenginį",
"ButtonAddLibrary": "Pridėti Biblioteką", "ButtonAddLibrary": "Pridėti Biblioteką",
@@ -18,6 +19,7 @@
"ButtonChooseAFolder": "Pasirinkite aplanką", "ButtonChooseAFolder": "Pasirinkite aplanką",
"ButtonChooseFiles": "Pasirinkite failus", "ButtonChooseFiles": "Pasirinkite failus",
"ButtonClearFilter": "Valyti filtrą", "ButtonClearFilter": "Valyti filtrą",
"ButtonClose": "Uždaryti",
"ButtonCloseFeed": "Uždaryti srautą", "ButtonCloseFeed": "Uždaryti srautą",
"ButtonCloseSession": "Uždaryti Atidarytą sesiją", "ButtonCloseSession": "Uždaryti Atidarytą sesiją",
"ButtonCollections": "Kolekcijos", "ButtonCollections": "Kolekcijos",
@@ -251,7 +253,7 @@
"LabelDuration": "Trukmė", "LabelDuration": "Trukmė",
"LabelDurationFound": "Rasta trukmė:", "LabelDurationFound": "Rasta trukmė:",
"LabelEbook": "Elektroninė knyga", "LabelEbook": "Elektroninė knyga",
"LabelEbooks": "Elektroninės knygos", "LabelEbooks": "El. knygos",
"LabelEdit": "Redaguoti", "LabelEdit": "Redaguoti",
"LabelEmail": "El. paštas", "LabelEmail": "El. paštas",
"LabelEmailSettingsFromAddress": "Siuntėjo adresas", "LabelEmailSettingsFromAddress": "Siuntėjo adresas",
@@ -261,6 +263,7 @@
"LabelEmbeddedCover": "Įterptas viršelis", "LabelEmbeddedCover": "Įterptas viršelis",
"LabelEnable": "Įjungti", "LabelEnable": "Įjungti",
"LabelEnd": "Pabaiga", "LabelEnd": "Pabaiga",
"LabelEndOfChapter": "Skyriaus pabaiga",
"LabelEpisode": "Epizodas", "LabelEpisode": "Epizodas",
"LabelEpisodeTitle": "Epizodo pavadinimas", "LabelEpisodeTitle": "Epizodo pavadinimas",
"LabelEpisodeType": "Epizodo tipas", "LabelEpisodeType": "Epizodo tipas",
@@ -282,8 +285,8 @@
"LabelGenre": "Žanras", "LabelGenre": "Žanras",
"LabelGenres": "Žanrai", "LabelGenres": "Žanrai",
"LabelHardDeleteFile": "Galutinai ištrinti failą", "LabelHardDeleteFile": "Galutinai ištrinti failą",
"LabelHasEbook": "Turi e-knygą", "LabelHasEbook": "Turi el. knygą",
"LabelHasSupplementaryEbook": "Turi papildomą e-knygą", "LabelHasSupplementaryEbook": "Turi papildomą el. knygą",
"LabelHost": "Serveris", "LabelHost": "Serveris",
"LabelHour": "Valanda", "LabelHour": "Valanda",
"LabelIcon": "Piktograma", "LabelIcon": "Piktograma",
+1
View File
@@ -0,0 +1 @@
{}
+12 -10
View File
@@ -2,7 +2,7 @@
"ButtonAdd": "Toevoegen", "ButtonAdd": "Toevoegen",
"ButtonAddApiKey": "API Key toevoegen", "ButtonAddApiKey": "API Key toevoegen",
"ButtonAddChapters": "Hoofdstukken toevoegen", "ButtonAddChapters": "Hoofdstukken toevoegen",
"ButtonAddDevice": "Toestel toevoegen", "ButtonAddDevice": "Apparaat toevoegen",
"ButtonAddLibrary": "Bibliotheek toevoegen", "ButtonAddLibrary": "Bibliotheek toevoegen",
"ButtonAddPodcasts": "Podcasts toevoegen", "ButtonAddPodcasts": "Podcasts toevoegen",
"ButtonAddUser": "Gebruiker toevoegen", "ButtonAddUser": "Gebruiker toevoegen",
@@ -139,7 +139,7 @@
"HeaderCustomMetadataProviders": "Aangepaste Metadata Providers", "HeaderCustomMetadataProviders": "Aangepaste Metadata Providers",
"HeaderDetails": "Details", "HeaderDetails": "Details",
"HeaderDownloadQueue": "Download-wachtrij", "HeaderDownloadQueue": "Download-wachtrij",
"HeaderEbookFiles": "Ebook bestanden", "HeaderEbookFiles": "E-book bestanden",
"HeaderEmail": "E-mail", "HeaderEmail": "E-mail",
"HeaderEmailSettings": "E-mail instellingen", "HeaderEmailSettings": "E-mail instellingen",
"HeaderEpisodes": "Afleveringen", "HeaderEpisodes": "Afleveringen",
@@ -275,7 +275,7 @@
"LabelBonus": "Bonus", "LabelBonus": "Bonus",
"LabelBooks": "Boeken", "LabelBooks": "Boeken",
"LabelButtonText": "Knop Tekst", "LabelButtonText": "Knop Tekst",
"LabelByAuthor": "Door {0}", "LabelByAuthor": "door {0}",
"LabelChangePassword": "Wachtwoord wijzigen", "LabelChangePassword": "Wachtwoord wijzigen",
"LabelChannels": "Kanalen", "LabelChannels": "Kanalen",
"LabelChapterCount": "{0} Hoofdstukken", "LabelChapterCount": "{0} Hoofdstukken",
@@ -383,7 +383,7 @@
"LabelFolders": "Mappen", "LabelFolders": "Mappen",
"LabelFontBold": "Vetgedrukt", "LabelFontBold": "Vetgedrukt",
"LabelFontBoldness": "Lettertype Dikte", "LabelFontBoldness": "Lettertype Dikte",
"LabelFontFamily": "Lettertypefamilie", "LabelFontFamily": "Letterfamilie",
"LabelFontItalic": "Cursief", "LabelFontItalic": "Cursief",
"LabelFontScale": "Lettertype schaal", "LabelFontScale": "Lettertype schaal",
"LabelFontStrikethrough": "Doorgestreept", "LabelFontStrikethrough": "Doorgestreept",
@@ -436,9 +436,9 @@
"LabelLibraryFilterSublistEmpty": "Nee {0}", "LabelLibraryFilterSublistEmpty": "Nee {0}",
"LabelLibraryItem": "Bibliotheekonderdeel", "LabelLibraryItem": "Bibliotheekonderdeel",
"LabelLibraryName": "Bibliotheeknaam", "LabelLibraryName": "Bibliotheeknaam",
"LabelLibrarySortByProgress": "Voortuigang geüpdatet", "LabelLibrarySortByProgress": "Voortgang: Laatst geüpdatet",
"LabelLibrarySortByProgressFinished": "Datum voltooid", "LabelLibrarySortByProgressFinished": "Voortgang: Voltooid",
"LabelLibrarySortByProgressStarted": "Datum gestart", "LabelLibrarySortByProgressStarted": "Voortgang: Gestart",
"LabelLimit": "Limiet", "LabelLimit": "Limiet",
"LabelLineSpacing": "Regelruimte", "LabelLineSpacing": "Regelruimte",
"LabelListenAgain": "Opnieuw Beluisteren", "LabelListenAgain": "Opnieuw Beluisteren",
@@ -588,8 +588,8 @@
"LabelSettingsBookshelfViewHelp": "Skeumorphisch design met houten planken", "LabelSettingsBookshelfViewHelp": "Skeumorphisch design met houten planken",
"LabelSettingsChromecastSupport": "Chromecast ondersteuning", "LabelSettingsChromecastSupport": "Chromecast ondersteuning",
"LabelSettingsDateFormat": "Datumnotatie", "LabelSettingsDateFormat": "Datumnotatie",
"LabelSettingsEnableWatcher": "Bibliotheken automatisch scannen op wijzigingen", "LabelSettingsEnableWatcher": "Bibliotheken automatisch monitoren op wijzigingen",
"LabelSettingsEnableWatcherForLibrary": "Bibliotheek automatisch scannen op wijzigingen", "LabelSettingsEnableWatcherForLibrary": "Bibliotheek automatisch monitoren op wijzigingen",
"LabelSettingsEnableWatcherHelp": "Zorgt voor het automatisch toevoegen/bijwerken van onderdelen als bestandswijzigingen worden gedetecteerd. *Vereist herstarten van server", "LabelSettingsEnableWatcherHelp": "Zorgt voor het automatisch toevoegen/bijwerken van onderdelen als bestandswijzigingen worden gedetecteerd. *Vereist herstarten van server",
"LabelSettingsEpubsAllowScriptedContent": "Sta scripted content toe in epubs", "LabelSettingsEpubsAllowScriptedContent": "Sta scripted content toe in epubs",
"LabelSettingsEpubsAllowScriptedContentHelp": "Sta toe dat epub-bestanden scripts uitvoeren. Het wordt aanbevolen om deze instelling uitgeschakeld te houden, tenzij u de bron van de epub-bestanden vertrouwt.", "LabelSettingsEpubsAllowScriptedContentHelp": "Sta toe dat epub-bestanden scripts uitvoeren. Het wordt aanbevolen om deze instelling uitgeschakeld te houden, tenzij u de bron van de epub-bestanden vertrouwt.",
@@ -888,7 +888,7 @@
"MessageResetChaptersConfirm": "Weet je zeker dat je de hoofdstukken wil resetten en de wijzigingen die je gemaakt hebt ongedaan wil maken?", "MessageResetChaptersConfirm": "Weet je zeker dat je de hoofdstukken wil resetten en de wijzigingen die je gemaakt hebt ongedaan wil maken?",
"MessageRestoreBackupConfirm": "Weet je zeker dat je wil herstellen met behulp van de back-up gemaakt op", "MessageRestoreBackupConfirm": "Weet je zeker dat je wil herstellen met behulp van de back-up gemaakt op",
"MessageRestoreBackupWarning": "Een back-up herstellen zal de volledige database in /config en de omslagen in /metadata/items & /metadata/authors overschrijven.<br /><br />Back-ups wijzigen geen bestanden in je bibliotheekmappen. Als je de serverinstelling gebruikt om omslagen en metadata in je bibliotheekmappen te bewaren dan worden deze niet geback-upt of overschreven.<br /><br />Alle apparaten die je server gebruiken, worden automatisch ververst.", "MessageRestoreBackupWarning": "Een back-up herstellen zal de volledige database in /config en de omslagen in /metadata/items & /metadata/authors overschrijven.<br /><br />Back-ups wijzigen geen bestanden in je bibliotheekmappen. Als je de serverinstelling gebruikt om omslagen en metadata in je bibliotheekmappen te bewaren dan worden deze niet geback-upt of overschreven.<br /><br />Alle apparaten die je server gebruiken, worden automatisch ververst.",
"MessageScheduleLibraryScanNote": "Voor de meeste gebruikers is het raadzaam om deze functie uitgeschakeld te laten en de folder watcher-instelling ingeschakeld te houden. De folder watcher detecteert automatisch wijzigingen in uw bibliotheekmappen. De folder watcher werkt niet voor elk bestandssysteem (zoals NFS), dus geplande bibliotheekscans kunnen in plaats daarvan worden gebruikt.", "MessageScheduleLibraryScanNote": "Voor de meeste gebruikers is het aangeraden om deze functie uitgeschakeld te laten en de \"Bibliotheek automatisch monitoren op wijzigingen\" instelling ingeschakeld te houden - deze detecteert automatisch wijzigingen in uw bibliotheekmappen. Activeer deze instelling als \"Bibliotheek automatisch monitoren op wijzigingen\" niet werkt voor uw bestandssysteem (zoals NFS).",
"MessageScheduleRunEveryWeekdayAtTime": "Elke {0} uitvoeren op {1}", "MessageScheduleRunEveryWeekdayAtTime": "Elke {0} uitvoeren op {1}",
"MessageSearchResultsFor": "Zoekresultaten voor", "MessageSearchResultsFor": "Zoekresultaten voor",
"MessageSelected": "{0} geselecteerd", "MessageSelected": "{0} geselecteerd",
@@ -1026,6 +1026,8 @@
"ToastCollectionItemsAddFailed": "Item(s) toegevoegd aan collectie mislukt", "ToastCollectionItemsAddFailed": "Item(s) toegevoegd aan collectie mislukt",
"ToastCollectionRemoveSuccess": "Collectie verwijderd", "ToastCollectionRemoveSuccess": "Collectie verwijderd",
"ToastCollectionUpdateSuccess": "Collectie bijgewerkt", "ToastCollectionUpdateSuccess": "Collectie bijgewerkt",
"ToastConnectionNotAvailable": "Verbinding niet beschikbaar. Gelieve later opnieuw te proberen",
"ToastCoverSearchFailed": "Omslag zoeken mislukt",
"ToastCoverUpdateFailed": "Omslag bijwerken mislukt", "ToastCoverUpdateFailed": "Omslag bijwerken mislukt",
"ToastDateTimeInvalidOrIncomplete": "Datum en tijd ongeldig of onvolledig", "ToastDateTimeInvalidOrIncomplete": "Datum en tijd ongeldig of onvolledig",
"ToastDeleteFileFailed": "Bestand verwijderen mislukt", "ToastDeleteFileFailed": "Bestand verwijderen mislukt",
+115 -10
View File
@@ -34,7 +34,7 @@
"ButtonEditChapters": "Rediger kapittel", "ButtonEditChapters": "Rediger kapittel",
"ButtonEditPodcast": "Rediger podcast", "ButtonEditPodcast": "Rediger podcast",
"ButtonEnable": "Aktiver", "ButtonEnable": "Aktiver",
"ButtonFireAndFail": "Kjør ved feil", "ButtonFireAndFail": "Utfør og feil",
"ButtonFireOnTest": "Kjør onTest-kommando", "ButtonFireOnTest": "Kjør onTest-kommando",
"ButtonForceReScan": "Tving skann", "ButtonForceReScan": "Tving skann",
"ButtonFullPath": "Full sti", "ButtonFullPath": "Full sti",
@@ -113,7 +113,7 @@
"ButtonUploadOPMLFile": "Last opp OPML fil", "ButtonUploadOPMLFile": "Last opp OPML fil",
"ButtonUserDelete": "Slett bruker {0}", "ButtonUserDelete": "Slett bruker {0}",
"ButtonUserEdit": "Rediger bruker {0}", "ButtonUserEdit": "Rediger bruker {0}",
"ButtonViewAll": "Vis alle", "ButtonViewAll": "Vis alt",
"ButtonYes": "Ja", "ButtonYes": "Ja",
"ErrorUploadFetchMetadataAPI": "Feil ved innhenting av metadata", "ErrorUploadFetchMetadataAPI": "Feil ved innhenting av metadata",
"ErrorUploadFetchMetadataNoResults": "Kunne ikke hente metadata - forsøk å oppdatere tittel og/eller forfatter", "ErrorUploadFetchMetadataNoResults": "Kunne ikke hente metadata - forsøk å oppdatere tittel og/eller forfatter",
@@ -309,6 +309,7 @@
"LabelDeleteFromFileSystemCheckbox": "Slett fra filsystemet (fjern haken for kun å ta bort fra databasen)", "LabelDeleteFromFileSystemCheckbox": "Slett fra filsystemet (fjern haken for kun å ta bort fra databasen)",
"LabelDescription": "Beskrivelse", "LabelDescription": "Beskrivelse",
"LabelDeselectAll": "Fjern valg", "LabelDeselectAll": "Fjern valg",
"LabelDetectedPattern": "Oppdaget mønster:",
"LabelDevice": "Enhet", "LabelDevice": "Enhet",
"LabelDeviceInfo": "Enhetsinformasjon", "LabelDeviceInfo": "Enhetsinformasjon",
"LabelDeviceIsAvailableTo": "Enheten er tilgjengelig for...", "LabelDeviceIsAvailableTo": "Enheten er tilgjengelig for...",
@@ -377,11 +378,12 @@
"LabelFilterByUser": "Filtrer etter bruker", "LabelFilterByUser": "Filtrer etter bruker",
"LabelFindEpisodes": "Finn episoder", "LabelFindEpisodes": "Finn episoder",
"LabelFinished": "Fullført", "LabelFinished": "Fullført",
"LabelFinishedDate": "Fullført {0}",
"LabelFolder": "Mappe", "LabelFolder": "Mappe",
"LabelFolders": "Mapper", "LabelFolders": "Mapper",
"LabelFontBold": "Fet", "LabelFontBold": "Fet",
"LabelFontBoldness": "Skrifttykkelse", "LabelFontBoldness": "Skrifttykkelse",
"LabelFontFamily": "Fontfamilie", "LabelFontFamily": "Skriftfamilie",
"LabelFontItalic": "Kursiv", "LabelFontItalic": "Kursiv",
"LabelFontScale": "Font størrelse", "LabelFontScale": "Font størrelse",
"LabelFontStrikethrough": "Gjennomstreking", "LabelFontStrikethrough": "Gjennomstreking",
@@ -434,7 +436,9 @@
"LabelLibraryFilterSublistEmpty": "Ingen {0}", "LabelLibraryFilterSublistEmpty": "Ingen {0}",
"LabelLibraryItem": "Bibliotek enhet", "LabelLibraryItem": "Bibliotek enhet",
"LabelLibraryName": "Bibliotek navn", "LabelLibraryName": "Bibliotek navn",
"LabelLibrarySortByProgress": "Fremgang: Sist oppdatert", "LabelLibrarySortByProgress": "Fremdrift: Sist oppdatert",
"LabelLibrarySortByProgressFinished": "Fremdrift: Fullført",
"LabelLibrarySortByProgressStarted": "Fremdrift: Startet",
"LabelLimit": "Begrensning", "LabelLimit": "Begrensning",
"LabelLineSpacing": "Linjemellomrom", "LabelLineSpacing": "Linjemellomrom",
"LabelListenAgain": "Lytt igjen", "LabelListenAgain": "Lytt igjen",
@@ -443,8 +447,9 @@
"LabelLogLevelWarn": "Varsel", "LabelLogLevelWarn": "Varsel",
"LabelLookForNewEpisodesAfterDate": "Se etter nye episoder etter denne datoen", "LabelLookForNewEpisodesAfterDate": "Se etter nye episoder etter denne datoen",
"LabelLowestPriority": "Laveste prioritet", "LabelLowestPriority": "Laveste prioritet",
"LabelMatchConfidence": "Konfidens",
"LabelMatchExistingUsersBy": "Knytt sammen eksisterende brukere basert på", "LabelMatchExistingUsersBy": "Knytt sammen eksisterende brukere basert på",
"LabelMatchExistingUsersByDescription": "Brukes for å koble til eksisterende brukere. Når koblingen er i orden vil brukerne bli identifisert med en unik id fra SSO-tilbyderen.", "LabelMatchExistingUsersByDescription": "Brukes for å koble til eksisterende brukere. Når koblingen er i orden vil brukerne bli identifisert med en unik id fra SSO-tilbyderen",
"LabelMaxEpisodesToDownload": "Maksimalt antall episoder som skal lastes ned. Bruk 0 for ubegrenset.", "LabelMaxEpisodesToDownload": "Maksimalt antall episoder som skal lastes ned. Bruk 0 for ubegrenset.",
"LabelMaxEpisodesToDownloadPerCheck": "Maksimalt antall nye episoder som skal lastes ned per sjekk", "LabelMaxEpisodesToDownloadPerCheck": "Maksimalt antall nye episoder som skal lastes ned per sjekk",
"LabelMaxEpisodesToKeep": "Maksimalt antall episoder som skal beholdes", "LabelMaxEpisodesToKeep": "Maksimalt antall episoder som skal beholdes",
@@ -453,7 +458,7 @@
"LabelMediaType": "Medie type", "LabelMediaType": "Medie type",
"LabelMetaTag": "Meta tag", "LabelMetaTag": "Meta tag",
"LabelMetaTags": "Meta tags", "LabelMetaTags": "Meta tags",
"LabelMetadataOrderOfPrecedenceDescription": "Høyere prioritert kilder for metadata overstyrer laverer prioriterte kilder for metadata.", "LabelMetadataOrderOfPrecedenceDescription": "Høyere prioritert kilder for metadata overstyrer laverer prioriterte kilder for metadata",
"LabelMetadataProvider": "Metadata Leverandør", "LabelMetadataProvider": "Metadata Leverandør",
"LabelMinute": "Minutt", "LabelMinute": "Minutt",
"LabelMinutes": "Minutter", "LabelMinutes": "Minutter",
@@ -472,7 +477,9 @@
"LabelNewestAuthors": "Nyeste forfattere", "LabelNewestAuthors": "Nyeste forfattere",
"LabelNewestEpisodes": "Nyeste episoder", "LabelNewestEpisodes": "Nyeste episoder",
"LabelNextBackupDate": "Neste sikkerhetskopi dato", "LabelNextBackupDate": "Neste sikkerhetskopi dato",
"LabelNextChapters": "Neste kapitler blir:",
"LabelNextScheduledRun": "Neste planlagte kjøring", "LabelNextScheduledRun": "Neste planlagte kjøring",
"LabelNoApiKeys": "Ingen API-nøkler",
"LabelNoCustomMetadataProviders": "Ingen egendefinerte tilbydere for metadata", "LabelNoCustomMetadataProviders": "Ingen egendefinerte tilbydere for metadata",
"LabelNoEpisodesSelected": "Ingen episoder valgt", "LabelNoEpisodesSelected": "Ingen episoder valgt",
"LabelNotFinished": "Ikke fullført", "LabelNotFinished": "Ikke fullført",
@@ -488,10 +495,11 @@
"LabelNotificationsMaxQueueSize": "Maksimalt antall varslinger i kø", "LabelNotificationsMaxQueueSize": "Maksimalt antall varslinger i kø",
"LabelNotificationsMaxQueueSizeHelp": "Hendelser er begrenset til avfyre én gang per sekund. Hendelser blir ignorert om køen er full. Dette forhindrer overflod av varslinger.", "LabelNotificationsMaxQueueSizeHelp": "Hendelser er begrenset til avfyre én gang per sekund. Hendelser blir ignorert om køen er full. Dette forhindrer overflod av varslinger.",
"LabelNumberOfBooks": "Antall bøker", "LabelNumberOfBooks": "Antall bøker",
"LabelNumberOfChapters": "Antall kapitler:",
"LabelNumberOfEpisodes": "# episoder", "LabelNumberOfEpisodes": "# episoder",
"LabelOpenIDAdvancedPermsClaimDescription": "Navnet på OpenID claim'et som inneholder avanserte tilganger for brukerhandlinger i applikasjonen som vil brukes for ikke-administratorroller (<b>hvis konfigurert</b>). Hvis claim'et mangler fra responsen, nektes tilgang til ABS. Hvis en enkelt opsjon mangler, blir behandlet som <code>false</code>. Påse at identitetstilbyderens claim stemmer overens med den forventede strukturen:", "LabelOpenIDAdvancedPermsClaimDescription": "Navnet på OpenID claim'et som inneholder avanserte tilganger for brukerhandlinger i applikasjonen som vil brukes for ikke-administratorroller (<b>hvis konfigurert</b>). Hvis claim'et mangler fra responsen, nektes tilgang til ABS. Hvis en enkelt opsjon mangler, blir behandlet som <code>false</code>. Påse at identitetstilbyderens claim stemmer overens med den forventede strukturen:",
"LabelOpenIDClaims": "La følge valg være tomme for å slå av avanserte gruppe og tillatelser. Gruppen \"Bruker\" vil da også automatisk legges til.", "LabelOpenIDClaims": "La følge valg være tomme for å slå av avanserte gruppe og tillatelser. Gruppen \"Bruker\" vil da også automatisk legges til.",
"LabelOpenIDGroupClaimDescription": "Navn på OpenID-forespørsel som inneholder en lite over brukerens grupper. Vanligvis kalt <code>grupper</code>. <b>Om konfigurert</b>, vil applikasjonen tildele roller baseret på brukerens gruppemedlemsskaper, gitt disse grupper er navngitt (uten forbehold for store og små bokstaver) 'admin', 'user' eller 'guest' i forespørsel. Forespørselen burde inneholde en liste (og hvis brukeren tilhører flere grupper), applikasjonen vil tildele rolle med høyeste adgangsnivå. Hvis ingen grupper matcher vil adgang bli nektet.", "LabelOpenIDGroupClaimDescription": "Navn på OpenID-forespørsel som inneholder en lite over brukerens grupper. Vanligvis kalt <code>grupper</code>. <b>Om konfigurert</b>, vil applikasjonen tildele roller baseret på brukerens gruppemedlemsskaper, gitt disse grupper er navngitt (uten forbehold for store og små bokstaver) 'admin', 'user' eller 'guest' i forespørsel. Forespørselen burde inneholde en liste (og hvis brukeren tilhører flere grupper), applikasjonen vil tildele rolle med høyeste adgangsnivå. Hvis ingen grupper matcher vil adgang bli nektet.",
"LabelOpenRSSFeed": "Åpne RSS Feed", "LabelOpenRSSFeed": "Åpne RSS Feed",
"LabelOverwrite": "Overskriv", "LabelOverwrite": "Overskriv",
"LabelPaginationPageXOfY": "Side {0} av {1}", "LabelPaginationPageXOfY": "Side {0} av {1}",
@@ -509,6 +517,7 @@
"LabelPersonalYearReview": "Oppsummering av året ditt ({0})", "LabelPersonalYearReview": "Oppsummering av året ditt ({0})",
"LabelPhotoPathURL": "Bilde sti/URL", "LabelPhotoPathURL": "Bilde sti/URL",
"LabelPlayMethod": "Avspillingsmetode", "LabelPlayMethod": "Avspillingsmetode",
"LabelPlaybackRateIncrementDecrement": "Trinnstørrelse for økning/senking av avspillingshastighet",
"LabelPlayerChapterNumberMarker": "{0} av {1}", "LabelPlayerChapterNumberMarker": "{0} av {1}",
"LabelPlaylists": "Spilleliste", "LabelPlaylists": "Spilleliste",
"LabelPodcast": "Podcast", "LabelPodcast": "Podcast",
@@ -561,6 +570,7 @@
"LabelSelectAll": "Velg alt", "LabelSelectAll": "Velg alt",
"LabelSelectAllEpisodes": "Velg alle episoder", "LabelSelectAllEpisodes": "Velg alle episoder",
"LabelSelectEpisodesShowing": "Velg {0} episoder vist", "LabelSelectEpisodesShowing": "Velg {0} episoder vist",
"LabelSelectUser": "Velg bruker",
"LabelSelectUsers": "Velg brukere", "LabelSelectUsers": "Velg brukere",
"LabelSendEbookToDevice": "Send Ebok til...", "LabelSendEbookToDevice": "Send Ebok til...",
"LabelSequence": "Sekvens", "LabelSequence": "Sekvens",
@@ -628,6 +638,7 @@
"LabelStartTime": "Start Tid", "LabelStartTime": "Start Tid",
"LabelStarted": "Startet", "LabelStarted": "Startet",
"LabelStartedAt": "Startet", "LabelStartedAt": "Startet",
"LabelStartedDate": "Startet {0}",
"LabelStatsAudioTracks": "Lydspor", "LabelStatsAudioTracks": "Lydspor",
"LabelStatsAuthors": "Forfattere", "LabelStatsAuthors": "Forfattere",
"LabelStatsBestDay": "Beste dag", "LabelStatsBestDay": "Beste dag",
@@ -657,6 +668,7 @@
"LabelTheme": "Tema", "LabelTheme": "Tema",
"LabelThemeDark": "Mørk", "LabelThemeDark": "Mørk",
"LabelThemeLight": "Lys", "LabelThemeLight": "Lys",
"LabelThemeSepia": "Sepia",
"LabelTimeBase": "Tidsbase", "LabelTimeBase": "Tidsbase",
"LabelTimeDurationXHours": "{0} timer", "LabelTimeDurationXHours": "{0} timer",
"LabelTimeDurationXMinutes": "{0} minutter", "LabelTimeDurationXMinutes": "{0} minutter",
@@ -725,24 +737,32 @@
"MessageAddToPlayerQueue": "Legg til i kø", "MessageAddToPlayerQueue": "Legg til i kø",
"MessageAppriseDescription": "For å bruke denne funksjonen trenger du en instans av <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> kjørende eller et API som håndterer disse forespørslene. <br />Apprise API URL skal være hele URL-en til varslingen, f.eks., hvis din API-instans er på <code>http://192.168.1.1:8337</code> så skal du bruke <code>http://192.168.1.1:8337/notify</code>.", "MessageAppriseDescription": "For å bruke denne funksjonen trenger du en instans av <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> kjørende eller et API som håndterer disse forespørslene. <br />Apprise API URL skal være hele URL-en til varslingen, f.eks., hvis din API-instans er på <code>http://192.168.1.1:8337</code> så skal du bruke <code>http://192.168.1.1:8337/notify</code>.",
"MessageAsinCheck": "Påse at du bruker ASIN fra den riktige Audible-regionen, ikke Amazon.", "MessageAsinCheck": "Påse at du bruker ASIN fra den riktige Audible-regionen, ikke Amazon.",
"MessageAuthenticationLegacyTokenWarning": "Eldre API-tokener vil bli fjernet i fremtiden. Bruk <a href=\"/config/api-keys\">API-nøkler</a> i stedet.",
"MessageAuthenticationOIDCChangesRestart": "Etter å ha lagret, start serveren din på nytt for at OIDC-endringene skal tre i kraft.", "MessageAuthenticationOIDCChangesRestart": "Etter å ha lagret, start serveren din på nytt for at OIDC-endringene skal tre i kraft.",
"MessageAuthenticationSecurityMessage": "Autentisering er forbedret av sikkerhetshensyn. Alle brukere må logge inn på nytt.",
"MessageBackupsDescription": "Sikkerhetskopier inkluderer, brukerfremgang, detaljer om bibliotekgjenstander, tjener instillinger og bilder lagret under <code>/metadata/items</code> og <code>/metadata/authors</code>. Sikkerhetskopier <strong>vil ikke</strong> inkludere filer som er lagret i bibliotek mappene.", "MessageBackupsDescription": "Sikkerhetskopier inkluderer, brukerfremgang, detaljer om bibliotekgjenstander, tjener instillinger og bilder lagret under <code>/metadata/items</code> og <code>/metadata/authors</code>. Sikkerhetskopier <strong>vil ikke</strong> inkludere filer som er lagret i bibliotek mappene.",
"MessageBackupsLocationEditNote": "Viktig: Endring av mappen for sikkerhetskopi hverken endrer eller flytter eksisterende sikkerhetskopier!", "MessageBackupsLocationEditNote": "Viktig: Endring av mappen for sikkerhetskopi hverken endrer eller flytter eksisterende sikkerhetskopier!",
"MessageBackupsLocationNoEditNote": "NB: Mappen for sikkerhetskopi settes i en miljøvariabel og kan ikke endres her.", "MessageBackupsLocationNoEditNote": "Viktig: Mappen for sikkerhetskopi satt i en miljøvariabel og kan ikke endres her.",
"MessageBackupsLocationPathEmpty": "Mappen for sikkerhetskopiering må angis", "MessageBackupsLocationPathEmpty": "Mappen for sikkerhetskopiering må angis",
"MessageBatchEditPopulateMapDetailsAllHelp": "Fyll aktiverte felt med data fra alle elementer. Felt med flere verdier blir slått sammen",
"MessageBatchEditPopulateMapDetailsItemHelp": "Fyll aktiverte kartdetaljfelt med data fra dette elementet",
"MessageBatchQuickMatchDescription": "Kjapt søk vil forsøke å legge til manglende omslag og metadata for de valgte gjenstandene. Aktiver dette valget for å tillate Kjapt søk til å overskrive eksisterende omslag og/eller metadata.", "MessageBatchQuickMatchDescription": "Kjapt søk vil forsøke å legge til manglende omslag og metadata for de valgte gjenstandene. Aktiver dette valget for å tillate Kjapt søk til å overskrive eksisterende omslag og/eller metadata.",
"MessageBookshelfNoCollections": "Du har ikke laget noen samlinger ennå", "MessageBookshelfNoCollections": "Du har ikke laget noen samlinger ennå",
"MessageBookshelfNoCollectionsHelp": "Samlinger er offentlige. Alle brukere med tilgang til biblioteket kan se dem.",
"MessageBookshelfNoRSSFeeds": "Ingen RSS feed er åpen", "MessageBookshelfNoRSSFeeds": "Ingen RSS feed er åpen",
"MessageBookshelfNoResultsForFilter": "Ingen resultat for filter \"{0}: {1}\"", "MessageBookshelfNoResultsForFilter": "Ingen resultat for filter \"{0}: {1}\"",
"MessageBookshelfNoResultsForQuery": "Ingen resultater for søket", "MessageBookshelfNoResultsForQuery": "Ingen resultater for søket",
"MessageBookshelfNoSeries": "Du har ingen serier", "MessageBookshelfNoSeries": "Du har ingen serier",
"MessageBulkChapterPattern": "Hvor mange kapitler vil du legge til med dette nummereringsmønsteret?",
"MessageChapterEndIsAfter": "Kapittel slutt er etter slutt av lydboken", "MessageChapterEndIsAfter": "Kapittel slutt er etter slutt av lydboken",
"MessageChapterErrorFirstNotZero": "Første kapittel starter på 0", "MessageChapterErrorFirstNotZero": "Første kapittel starter på 0",
"MessageChapterErrorStartGteDuration": "Feil start tid, må være mindre enn lengde på lydbok", "MessageChapterErrorStartGteDuration": "Feil start tid, må være mindre enn lengde på lydbok",
"MessageChapterErrorStartLtPrev": "Feil start tid, må være større eller det samme som forrige kapittel start tid", "MessageChapterErrorStartLtPrev": "Feil start tid, må være større eller det samme som forrige kapittel start tid",
"MessageChapterStartIsAfter": "Kapittel start er etter slutten av din lydbok", "MessageChapterStartIsAfter": "Kapittel start er etter slutten av din lydbok",
"MessageChaptersNotFound": "Fant ikke kapitler",
"MessageCheckingCron": "Sjekker cron...", "MessageCheckingCron": "Sjekker cron...",
"MessageConfirmCloseFeed": "Er du sikker på at du vil lukke denne feeden?", "MessageConfirmCloseFeed": "Er du sikker på at du vil lukke denne feeden?",
"MessageConfirmDeleteApiKey": "Er du sikker på at du vil slette API-nøkkelen \"{0}\"?",
"MessageConfirmDeleteBackup": "Er du sikker på at du vil slette sikkerhetskopi for {0}?", "MessageConfirmDeleteBackup": "Er du sikker på at du vil slette sikkerhetskopi for {0}?",
"MessageConfirmDeleteDevice": "Er du sikker på at du vil slette e-leser enheten \"{0}\"?", "MessageConfirmDeleteDevice": "Er du sikker på at du vil slette e-leser enheten \"{0}\"?",
"MessageConfirmDeleteFile": "Dette vil slette filen fra filsystemet. Er du sikker?", "MessageConfirmDeleteFile": "Dette vil slette filen fra filsystemet. Er du sikker?",
@@ -761,7 +781,7 @@
"MessageConfirmMarkSeriesFinished": "Er du sikker på at du vil markere alle bøkene i serien som fullført?", "MessageConfirmMarkSeriesFinished": "Er du sikker på at du vil markere alle bøkene i serien som fullført?",
"MessageConfirmMarkSeriesNotFinished": "Er du sikker på at du vil markere alle bøkene i serien som ikke fullført?", "MessageConfirmMarkSeriesNotFinished": "Er du sikker på at du vil markere alle bøkene i serien som ikke fullført?",
"MessageConfirmNotificationTestTrigger": "Utløs dette varselet med test-data?", "MessageConfirmNotificationTestTrigger": "Utløs dette varselet med test-data?",
"MessageConfirmPurgeCache": "Tømming av mellomlagring vil slette hele mappen <code>/metadata/cache</code>. <br /><br />Er du sikker på at du du vil slette mappen?", "MessageConfirmPurgeCache": "Tømming av mellomlagring vil slette hele mappen <code>/metadata/cache</code>. <br /><br />Er du sikker på at du vil slette mappen?",
"MessageConfirmPurgeItemsCache": "(Purge items cache) Dette vil sletter hele mappen <code>/metadata/cache/items</code>.<br />Er du sikker?", "MessageConfirmPurgeItemsCache": "(Purge items cache) Dette vil sletter hele mappen <code>/metadata/cache/items</code>.<br />Er du sikker?",
"MessageConfirmQuickEmbed": "Advarsel! Rask innbygging av metadata tar ikke backup av lyd-filene først. Forsikre deg om at du har sikkerhetskopi av filene. <br><br> Fortsett?", "MessageConfirmQuickEmbed": "Advarsel! Rask innbygging av metadata tar ikke backup av lyd-filene først. Forsikre deg om at du har sikkerhetskopi av filene. <br><br> Fortsett?",
"MessageConfirmQuickMatchEpisodes": "Hurtig gjenkjenning av episoder overskriver detaljene hvis en match blir funnet. Kun episoder som ikke allerede er matchet blir oppdatert. Er du sikker?", "MessageConfirmQuickMatchEpisodes": "Hurtig gjenkjenning av episoder overskriver detaljene hvis en match blir funnet. Kun episoder som ikke allerede er matchet blir oppdatert. Er du sikker?",
@@ -770,6 +790,7 @@
"MessageConfirmRemoveAuthor": "Er du sikker på at du vil fjerne forfatteren \"{0}\"?", "MessageConfirmRemoveAuthor": "Er du sikker på at du vil fjerne forfatteren \"{0}\"?",
"MessageConfirmRemoveCollection": "Er du sikker på at du vil fjerne samling\"{0}\"?", "MessageConfirmRemoveCollection": "Er du sikker på at du vil fjerne samling\"{0}\"?",
"MessageConfirmRemoveEpisode": "Er du sikker på at du vil fjerne episode \"{0}\"?", "MessageConfirmRemoveEpisode": "Er du sikker på at du vil fjerne episode \"{0}\"?",
"MessageConfirmRemoveEpisodeNote": "Merk: Dette sletter ikke lydfilen med mindre du slår på \"Hard delete file\"",
"MessageConfirmRemoveEpisodes": "Er du sikker på at du vil fjerne {0} episoder?", "MessageConfirmRemoveEpisodes": "Er du sikker på at du vil fjerne {0} episoder?",
"MessageConfirmRemoveListeningSessions": "Er du sikker på at du vil fjerne {0} lytte-sesjoner?", "MessageConfirmRemoveListeningSessions": "Er du sikker på at du vil fjerne {0} lytte-sesjoner?",
"MessageConfirmRemoveMetadataFiles": "Er du sikker på at du vil fjerne alle metadata.{0}-filer i mappene for biblioteks-elementer?", "MessageConfirmRemoveMetadataFiles": "Er du sikker på at du vil fjerne alle metadata.{0}-filer i mappene for biblioteks-elementer?",
@@ -795,8 +816,11 @@
"MessageFeedURLWillBe": "Feed URL vil bli {0}", "MessageFeedURLWillBe": "Feed URL vil bli {0}",
"MessageFetching": "Henter...", "MessageFetching": "Henter...",
"MessageForceReScanDescription": "vil skanne alle filene igjen som en ny skann. Lyd fil ID3 tagger, OPF filer og tekstfiler vil bli skannet som nye.", "MessageForceReScanDescription": "vil skanne alle filene igjen som en ny skann. Lyd fil ID3 tagger, OPF filer og tekstfiler vil bli skannet som nye.",
"MessageHeatmapListeningTimeTooltip": "<strong>{0} lytter</strong> på {1}",
"MessageHeatmapNoListeningSessions": "Ingen lytteøkter på {0}",
"MessageImportantNotice": "Viktig varsel!", "MessageImportantNotice": "Viktig varsel!",
"MessageInsertChapterBelow": "Sett inn kapittel under", "MessageInsertChapterBelow": "Sett inn kapittel under",
"MessageInvalidAsin": "Ugyldig ASIN",
"MessageItemsSelected": "{0} Gjenstander valgt", "MessageItemsSelected": "{0} Gjenstander valgt",
"MessageItemsUpdated": "{0} Gjenstander oppdatert", "MessageItemsUpdated": "{0} Gjenstander oppdatert",
"MessageJoinUsOn": "Følg oss nå", "MessageJoinUsOn": "Følg oss nå",
@@ -842,6 +866,7 @@
"MessageNoTasksRunning": "Ingen oppgaver kjører", "MessageNoTasksRunning": "Ingen oppgaver kjører",
"MessageNoUpdatesWereNecessary": "Ingen oppdatering var nødvendig", "MessageNoUpdatesWereNecessary": "Ingen oppdatering var nødvendig",
"MessageNoUserPlaylists": "Du har ingen spillelister", "MessageNoUserPlaylists": "Du har ingen spillelister",
"MessageNoUserPlaylistsHelp": "Spillelister er private. Bare brukeren som oppretter dem kan se dem.",
"MessageNotYetImplemented": "Ikke implementert ennå", "MessageNotYetImplemented": "Ikke implementert ennå",
"MessageOpmlPreviewNote": "PS: Dette er en forhåndvisning av en OPML-fil. Den faktiske podcast-tittelen hentes direkte fra RSS-feeden.", "MessageOpmlPreviewNote": "PS: Dette er en forhåndvisning av en OPML-fil. Den faktiske podcast-tittelen hentes direkte fra RSS-feeden.",
"MessageOr": "eller", "MessageOr": "eller",
@@ -864,8 +889,10 @@
"MessageRestoreBackupConfirm": "Er du sikker på at du vil gjenopprette sikkerhetskopien som var laget", "MessageRestoreBackupConfirm": "Er du sikker på at du vil gjenopprette sikkerhetskopien som var laget",
"MessageRestoreBackupWarning": "gjenoppretting av sikkerhetskopi vil overskrive hele databasen under /config og omslagsbilde under /metadata/items og /metadata/authors.<br /><br />Sikkerhetskopier endrer ikke noen filer under dine bibliotekmapper. Hvis du har aktivert tjenerinstillingen for å lagre omslagsbilder og metadata i bibliotekmapper så vil ikke de filene bli tatt sikkerhetskopi eller overskrevet.<br /><br />Alle klientene som bruker din tjener vil bli fornyet automatisk.", "MessageRestoreBackupWarning": "gjenoppretting av sikkerhetskopi vil overskrive hele databasen under /config og omslagsbilde under /metadata/items og /metadata/authors.<br /><br />Sikkerhetskopier endrer ikke noen filer under dine bibliotekmapper. Hvis du har aktivert tjenerinstillingen for å lagre omslagsbilder og metadata i bibliotekmapper så vil ikke de filene bli tatt sikkerhetskopi eller overskrevet.<br /><br />Alle klientene som bruker din tjener vil bli fornyet automatisk.",
"MessageScheduleLibraryScanNote": "For de fleste brukere er det anbefalt å la denne funksjonen være slått av, og la mappeovervåkeren stå på. Mappeovervåkeren oppdager automatisk endringer i biblioteksmappene. Mappeovervåkeren fungerer ikke med alle filsystemer (f.eks. NFS) og da kan planlagt skanning av bibliotekene brukes i steden for.", "MessageScheduleLibraryScanNote": "For de fleste brukere er det anbefalt å la denne funksjonen være slått av, og la mappeovervåkeren stå på. Mappeovervåkeren oppdager automatisk endringer i biblioteksmappene. Mappeovervåkeren fungerer ikke med alle filsystemer (f.eks. NFS) og da kan planlagt skanning av bibliotekene brukes i steden for.",
"MessageScheduleRunEveryWeekdayAtTime": "Kjør hver {0} kl. {1}",
"MessageSearchResultsFor": "Søk resultat for", "MessageSearchResultsFor": "Søk resultat for",
"MessageSelected": "{0} valgt", "MessageSelected": "{0} valgt",
"MessageSeriesSequenceCannotContainSpaces": "Serienummer kan ikke inneholde mellomrom",
"MessageServerCouldNotBeReached": "Tjener kunne ikke bli nådd", "MessageServerCouldNotBeReached": "Tjener kunne ikke bli nådd",
"MessageSetChaptersFromTracksDescription": "Sett kapitler ved å bruke hver lydfil som kapittel og kapitteltittel som lydfilnavnet", "MessageSetChaptersFromTracksDescription": "Sett kapitler ved å bruke hver lydfil som kapittel og kapitteltittel som lydfilnavnet",
"MessageShareExpirationWillBe": "Utløp vil være <strong>{0}</strong>", "MessageShareExpirationWillBe": "Utløp vil være <strong>{0}</strong>",
@@ -886,6 +913,27 @@
"MessageTaskFailedToMergeAudioFiles": "Kunne ikke slå sammen lydfiler", "MessageTaskFailedToMergeAudioFiles": "Kunne ikke slå sammen lydfiler",
"MessageTaskFailedToMoveM4bFile": "Kunne ikke flytte M4B-fil", "MessageTaskFailedToMoveM4bFile": "Kunne ikke flytte M4B-fil",
"MessageTaskFailedToWriteMetadataFile": "Kunne ikke lagre metadata-fil", "MessageTaskFailedToWriteMetadataFile": "Kunne ikke lagre metadata-fil",
"MessageTaskMatchingBooksInLibrary": "Samsvarende bøker i biblioteket \"{0}\"",
"MessageTaskNoFilesToScan": "Ingen filer å skanne",
"MessageTaskOpmlImport": "OPML-import",
"MessageTaskOpmlImportDescription": "Oppretter podkaster fra {0} RSS-feeder",
"MessageTaskOpmlImportFeed": "OPML-importfeed",
"MessageTaskOpmlImportFeedDescription": "Importerer RSS-feed \"{0}\"",
"MessageTaskOpmlImportFeedFailed": "Kunne ikke hente podcast-feed",
"MessageTaskOpmlImportFeedPodcastDescription": "Oppretter podkast \"{0}\"",
"MessageTaskOpmlImportFeedPodcastExists": "Podkast finnes allerede på stien",
"MessageTaskOpmlImportFeedPodcastFailed": "Misslykkes å opprette podcast",
"MessageTaskOpmlImportFinished": "La til {0} podkaster",
"MessageTaskOpmlParseFailed": "Klarte ikke å tolke OPML-fil",
"MessageTaskOpmlParseFastFail": "Ugyldig OPML-fil: <opml>-tagg ble ikke funnet ELLER en <outline>-tagg ble ikke funnet",
"MessageTaskOpmlParseNoneFound": "Fant ingen feeder i OPML-filen",
"MessageTaskScanItemsAdded": "{0} lagt til",
"MessageTaskScanItemsMissing": "{0} mangler",
"MessageTaskScanItemsUpdated": "{0} oppdatert",
"MessageTaskScanNoChangesNeeded": "Ingen endringer nødvendig",
"MessageTaskScanningFileChanges": "Skanner filendringer i \"{0}\"",
"MessageTaskScanningLibrary": "Skanner biblioteket \"{0}\"",
"MessageTaskTargetDirectoryNotWritable": "Målkatalogen er ikke skrivbar",
"MessageThinking": "Tenker...", "MessageThinking": "Tenker...",
"MessageUploaderItemFailed": "Opplastning mislykkes", "MessageUploaderItemFailed": "Opplastning mislykkes",
"MessageUploaderItemSuccess": "Opplastning fullført!", "MessageUploaderItemSuccess": "Opplastning fullført!",
@@ -903,13 +951,43 @@
"NoteUploaderFoldersWithMediaFiles": "Mapper med mediefiler vil bli behandlet som separate bibliotekgjenstander.", "NoteUploaderFoldersWithMediaFiles": "Mapper med mediefiler vil bli behandlet som separate bibliotekgjenstander.",
"NoteUploaderOnlyAudioFiles": "Om man laster opp kun lydfiler så vil hver lydfil bli behandlet som en separat lydbok.", "NoteUploaderOnlyAudioFiles": "Om man laster opp kun lydfiler så vil hver lydfil bli behandlet som en separat lydbok.",
"NoteUploaderUnsupportedFiles": "Filer som ikke er støttet vil bli ignorert. Når man velger eller slipper en mappe, filer som ikke er en mappe vil bli ignorert.", "NoteUploaderUnsupportedFiles": "Filer som ikke er støttet vil bli ignorert. Når man velger eller slipper en mappe, filer som ikke er en mappe vil bli ignorert.",
"NotificationOnBackupCompletedDescription": "Utløses når en sikkerhetskopi er fullført",
"NotificationOnBackupFailedDescription": "Utløses når en sikkerhetskopi mislykkes",
"NotificationOnEpisodeDownloadedDescription": "Utløses når en podkastepisode lastes ned automatisk",
"NotificationOnRSSFeedDisabledDescription": "Utløses når automatiske episodenedlastinger deaktiveres på grunn av for mange mislykkede forsøk",
"NotificationOnRSSFeedFailedDescription": "Utløses når RSS-feedforespørselen mislykkes for en automatisk episodenedlasting",
"NotificationOnTestDescription": "Hendelse for testing av varslingssystemet",
"PlaceholderBulkChapterInput": "Skriv inn kapitteltittel eller bruk nummerering (f.eks. 'Episode 1', 'Kapittel 10', '1.')",
"PlaceholderNewCollection": "Ny samlingsnavn", "PlaceholderNewCollection": "Ny samlingsnavn",
"PlaceholderNewFolderPath": "Ny mappesti", "PlaceholderNewFolderPath": "Ny mappesti",
"PlaceholderNewPlaylist": "Ny spillelistenavn", "PlaceholderNewPlaylist": "Ny spillelistenavn",
"PlaceholderSearch": "Søk..", "PlaceholderSearch": "Søk..",
"PlaceholderSearchEpisode": "Søk episode..", "PlaceholderSearchEpisode": "Søk episode..",
"StatsAuthorsAdded": "forfattere lagt til",
"StatsBooksAdded": "bøker lagt til",
"StatsBooksAdditional": "Noen av tilleggene inkluderer…",
"StatsBooksFinished": "bøker fullført",
"StatsBooksFinishedThisYear": "Noen bøker fullført i år…",
"StatsBooksListenedTo": "bøker lyttet til",
"StatsCollectionGrewTo": "Boksamlingen din vokste til…",
"StatsSessions": "økter",
"StatsSpentListening": "brukt på lytting",
"StatsTopAuthor": "BESTE FORFATTER",
"StatsTopAuthors": "BESTE FORFATTERE",
"StatsTopGenre": "BESTE SJANGER",
"StatsTopGenres": "BESTE SJANGRE",
"StatsTopMonth": "BESTE MÅNED",
"StatsTopNarrator": "BESTE FORTELLER",
"StatsTopNarrators": "BESTE FORTELLERE",
"StatsTotalDuration": "Med en total varighet på…",
"StatsYearInReview": "ÅRET SOM GIKK",
"ToastAccountUpdateSuccess": "Konto oppdatert", "ToastAccountUpdateSuccess": "Konto oppdatert",
"ToastAppriseUrlRequired": "Du må angi en Apprise-URL",
"ToastAsinRequired": "ASIN er påkrevd",
"ToastAuthorImageRemoveSuccess": "Forfatter bilde fjernet", "ToastAuthorImageRemoveSuccess": "Forfatter bilde fjernet",
"ToastAuthorNotFound": "Fant ikke forfatter \"{0}\"",
"ToastAuthorRemoveSuccess": "Forfatter fjernet",
"ToastAuthorSearchNotFound": "Fant ikke forfatter",
"ToastAuthorUpdateMerged": "Forfatter slått sammen", "ToastAuthorUpdateMerged": "Forfatter slått sammen",
"ToastAuthorUpdateSuccess": "Forfatter oppdatert", "ToastAuthorUpdateSuccess": "Forfatter oppdatert",
"ToastAuthorUpdateSuccessNoImageFound": "Forfatter oppdater (ingen bilde funnet)", "ToastAuthorUpdateSuccessNoImageFound": "Forfatter oppdater (ingen bilde funnet)",
@@ -923,6 +1001,7 @@
"ToastBackupRestoreFailed": "Misslykkes å gjenopprette sikkerhetskopi", "ToastBackupRestoreFailed": "Misslykkes å gjenopprette sikkerhetskopi",
"ToastBackupUploadFailed": "Misslykkes å laste opp sikkerhetskopi", "ToastBackupUploadFailed": "Misslykkes å laste opp sikkerhetskopi",
"ToastBackupUploadSuccess": "Sikkerhetskopi lastet opp", "ToastBackupUploadSuccess": "Sikkerhetskopi lastet opp",
"ToastBatchApplyDetailsToItemsSuccess": "Detaljer brukt på elementene",
"ToastBatchDeleteFailed": "Sletting feilet på utvalget", "ToastBatchDeleteFailed": "Sletting feilet på utvalget",
"ToastBatchDeleteSuccess": "Sletting av samling utført", "ToastBatchDeleteSuccess": "Sletting av samling utført",
"ToastBatchQuickMatchFailed": "Feil ved rask integrering av metadata!", "ToastBatchQuickMatchFailed": "Feil ved rask integrering av metadata!",
@@ -932,17 +1011,25 @@
"ToastBookmarkCreateFailed": "Misslykkes å opprette bokmerke", "ToastBookmarkCreateFailed": "Misslykkes å opprette bokmerke",
"ToastBookmarkCreateSuccess": "Bokmerke lagt til", "ToastBookmarkCreateSuccess": "Bokmerke lagt til",
"ToastBookmarkRemoveSuccess": "Bokmerke fjernet", "ToastBookmarkRemoveSuccess": "Bokmerke fjernet",
"ToastBulkChapterInvalidCount": "Skriv inn et tall mellom 1 og 150",
"ToastCachePurgeFailed": "Kunne ikke å slette mellomlager", "ToastCachePurgeFailed": "Kunne ikke å slette mellomlager",
"ToastCachePurgeSuccess": "Mellomlager slettet", "ToastCachePurgeSuccess": "Mellomlager slettet",
"ToastChapterLocked": "Kapittelet er låst.",
"ToastChapterStartTimeAdjusted": "Kapittelstart ble justert med {0} sekunder",
"ToastChaptersAllLocked": "Alle kapitler er låst. Lås opp noen kapitler for å flytte tidene.",
"ToastChaptersHaveErrors": "Kapittel har feil", "ToastChaptersHaveErrors": "Kapittel har feil",
"ToastChaptersInvalidShiftAmountLast": "Ugyldig forskyvningsverdi. Starttid for siste kapittel vil gå utover varigheten til denne lydboken.",
"ToastChaptersInvalidShiftAmountStart": "Ugyldig forskyvningsverdi. Det første kapitlet ville fått null eller negativ lengde og blitt overskrevet av det andre kapitlet. Øk starttiden til det andre kapitlet.",
"ToastChaptersMustHaveTitles": "Kapittel må ha titler", "ToastChaptersMustHaveTitles": "Kapittel må ha titler",
"ToastChaptersRemoved": "Kapitler fjernet", "ToastChaptersRemoved": "Kapitler fjernet",
"ToastChaptersUpdated": "Kapitler oppdatert", "ToastChaptersUpdated": "Kapitler oppdatert",
"ToastCollectionItemsAddFailed": "Feil med å legge til element(er)", "ToastCollectionItemsAddFailed": "Feil med å legge til element(er)",
"ToastCollectionRemoveSuccess": "Samling fjernet", "ToastCollectionRemoveSuccess": "Samling fjernet",
"ToastCollectionUpdateSuccess": "samlingupdated", "ToastCollectionUpdateSuccess": "samlingupdated",
"ToastConnectionNotAvailable": "Tilkobling er ikke tilgjengelig. Prøv igjen senere",
"ToastCoverSearchFailed": "Finner ikke bokomslag", "ToastCoverSearchFailed": "Finner ikke bokomslag",
"ToastCoverUpdateFailed": "Oppdatering av bilde feilet", "ToastCoverUpdateFailed": "Oppdatering av bilde feilet",
"ToastDateTimeInvalidOrIncomplete": "Dato og klokkeslett er ugyldig eller ufullstendig",
"ToastDeleteFileFailed": "Kunne ikke slette fil", "ToastDeleteFileFailed": "Kunne ikke slette fil",
"ToastDeleteFileSuccess": "Fil slettet", "ToastDeleteFileSuccess": "Fil slettet",
"ToastDeviceAddFailed": "Kunne ikke legge til enhet", "ToastDeviceAddFailed": "Kunne ikke legge til enhet",
@@ -955,6 +1042,9 @@
"ToastEpisodeDownloadQueueClearFailed": "Kunne ikke tømme køen", "ToastEpisodeDownloadQueueClearFailed": "Kunne ikke tømme køen",
"ToastEpisodeDownloadQueueClearSuccess": "Nedlastingskø for eposider tømt", "ToastEpisodeDownloadQueueClearSuccess": "Nedlastingskø for eposider tømt",
"ToastEpisodeUpdateSuccess": "{0} episoder oppdatert", "ToastEpisodeUpdateSuccess": "{0} episoder oppdatert",
"ToastErrorCannotShare": "Kan ikke dele direkte på denne enheten",
"ToastFailedToCreate": "Kunne ikke opprette",
"ToastFailedToDelete": "Kunne ikke slette",
"ToastFailedToLoadData": "Kunne ikke laste inn data", "ToastFailedToLoadData": "Kunne ikke laste inn data",
"ToastFailedToMatch": "Kunne ikke matche", "ToastFailedToMatch": "Kunne ikke matche",
"ToastFailedToShare": "Deling feilet", "ToastFailedToShare": "Deling feilet",
@@ -962,6 +1052,7 @@
"ToastInvalidImageUrl": "Ugyldig URL for bilde", "ToastInvalidImageUrl": "Ugyldig URL for bilde",
"ToastInvalidMaxEpisodesToDownload": "Ugyldig maksimalt antall for nedlasting av episoder", "ToastInvalidMaxEpisodesToDownload": "Ugyldig maksimalt antall for nedlasting av episoder",
"ToastInvalidUrl": "Ugyldig URL", "ToastInvalidUrl": "Ugyldig URL",
"ToastInvalidUrls": "Én eller flere URL-er er ugyldige",
"ToastItemCoverUpdateSuccess": "Omslag oppdatert", "ToastItemCoverUpdateSuccess": "Omslag oppdatert",
"ToastItemDeletedFailed": "Kunne ikke slette element", "ToastItemDeletedFailed": "Kunne ikke slette element",
"ToastItemDeletedSuccess": "Element slettet", "ToastItemDeletedSuccess": "Element slettet",
@@ -986,6 +1077,7 @@
"ToastMustHaveAtLeastOnePath": "Påkrevd med minst én mappe", "ToastMustHaveAtLeastOnePath": "Påkrevd med minst én mappe",
"ToastNameEmailRequired": "Navn og e-post påkrevd", "ToastNameEmailRequired": "Navn og e-post påkrevd",
"ToastNameRequired": "Navn er påkrevd", "ToastNameRequired": "Navn er påkrevd",
"ToastNewApiKeyUserError": "Du må velge en bruker",
"ToastNewEpisodesFound": "{0} nye episoder funnet", "ToastNewEpisodesFound": "{0} nye episoder funnet",
"ToastNewUserCreatedFailed": "Kunne ikke opprette konto: \"{0}\"", "ToastNewUserCreatedFailed": "Kunne ikke opprette konto: \"{0}\"",
"ToastNewUserCreatedSuccess": "Ny konto opprettet", "ToastNewUserCreatedSuccess": "Ny konto opprettet",
@@ -994,6 +1086,7 @@
"ToastNewUserTagError": "Velg minst en tag", "ToastNewUserTagError": "Velg minst en tag",
"ToastNewUserUsernameError": "Skriv inn brukernavn", "ToastNewUserUsernameError": "Skriv inn brukernavn",
"ToastNoNewEpisodesFound": "Ingen nye episoder funnet", "ToastNoNewEpisodesFound": "Ingen nye episoder funnet",
"ToastNoRSSFeed": "Podkasten har ikke en RSS-feed",
"ToastNoUpdatesNecessary": "Ingen oppdateringer nødvendig", "ToastNoUpdatesNecessary": "Ingen oppdateringer nødvendig",
"ToastNotificationCreateFailed": "Kunne ikke opprette varsling", "ToastNotificationCreateFailed": "Kunne ikke opprette varsling",
"ToastNotificationDeleteFailed": "Kunne ikke slette varsling", "ToastNotificationDeleteFailed": "Kunne ikke slette varsling",
@@ -1009,6 +1102,7 @@
"ToastPlaylistUpdateSuccess": "Spilleliste oppdatert", "ToastPlaylistUpdateSuccess": "Spilleliste oppdatert",
"ToastPodcastCreateFailed": "Misslykkes å opprette podcast", "ToastPodcastCreateFailed": "Misslykkes å opprette podcast",
"ToastPodcastCreateSuccess": "Podcast opprettet", "ToastPodcastCreateSuccess": "Podcast opprettet",
"ToastPodcastEpisodeUpdated": "Episode oppdatert",
"ToastPodcastGetFeedFailed": "Kunne ikke hente podcast-feed", "ToastPodcastGetFeedFailed": "Kunne ikke hente podcast-feed",
"ToastPodcastNoEpisodesInFeed": "Ingen episoder funnet i RSS-feed", "ToastPodcastNoEpisodesInFeed": "Ingen episoder funnet i RSS-feed",
"ToastPodcastNoRssFeed": "Podcast har ingen RSS-feed", "ToastPodcastNoRssFeed": "Podcast har ingen RSS-feed",
@@ -1033,6 +1127,7 @@
"ToastSelectAtLeastOneUser": "Velg minst én bruker", "ToastSelectAtLeastOneUser": "Velg minst én bruker",
"ToastSendEbookToDeviceFailed": "Misslykkes å sende ebok", "ToastSendEbookToDeviceFailed": "Misslykkes å sende ebok",
"ToastSendEbookToDeviceSuccess": "Ebok sendt til \"{0}\"", "ToastSendEbookToDeviceSuccess": "Ebok sendt til \"{0}\"",
"ToastSeriesSubmitFailedSameName": "Kan ikke legge til to serier med samme navn",
"ToastSeriesUpdateFailed": "Misslykkes å oppdatere serie", "ToastSeriesUpdateFailed": "Misslykkes å oppdatere serie",
"ToastSeriesUpdateSuccess": "Serie oppdatert", "ToastSeriesUpdateSuccess": "Serie oppdatert",
"ToastServerSettingsUpdateSuccess": "Server-innstillinger oppdatert", "ToastServerSettingsUpdateSuccess": "Server-innstillinger oppdatert",
@@ -1051,10 +1146,20 @@
"ToastUnknownError": "Ukjent feil", "ToastUnknownError": "Ukjent feil",
"ToastUnlinkOpenIdFailed": "Kunne ikke koble bruker fra OpenID", "ToastUnlinkOpenIdFailed": "Kunne ikke koble bruker fra OpenID",
"ToastUnlinkOpenIdSuccess": "Bruker koblet fra OpenID", "ToastUnlinkOpenIdSuccess": "Bruker koblet fra OpenID",
"ToastUploaderFilepathExistsError": "Filstien \"{0}\" finnes allerede på serveren",
"ToastUploaderItemExistsInSubdirectoryError": "Elementet \"{0}\" bruker en underkatalog av opplastingsstien.",
"ToastUserDeleteFailed": "Misslykkes å slette bruker", "ToastUserDeleteFailed": "Misslykkes å slette bruker",
"ToastUserDeleteSuccess": "Bruker slettet", "ToastUserDeleteSuccess": "Bruker slettet",
"ToastUserPasswordChangeSuccess": "Passord ble endret", "ToastUserPasswordChangeSuccess": "Passord ble endret",
"ToastUserPasswordMismatch": "Passord må stemme overens", "ToastUserPasswordMismatch": "Passord må stemme overens",
"ToastUserPasswordMustChange": "Nytt passord kan ikke være identisk med gammelt passord", "ToastUserPasswordMustChange": "Nytt passord kan ikke være identisk med gammelt passord",
"ToastUserRootRequireName": "Root-brukernavn er påkrevd" "ToastUserRootRequireName": "Root-brukernavn er påkrevd",
"TooltipAddChapters": "Legg til kapittel(er)",
"TooltipAddOneSecond": "Legg til 1 sekund",
"TooltipAdjustChapterStart": "Klikk for å justere starttid",
"TooltipLockAllChapters": "Lås alle kapitler",
"TooltipLockChapter": "Lås kapittel (Shift+klikk for område)",
"TooltipSubtractOneSecond": "Trekk fra 1 sekund",
"TooltipUnlockAllChapters": "Lås opp alle kapitler",
"TooltipUnlockChapter": "Lås opp kapittel (Shift+klikk for område)"
} }
+168 -33
View File
@@ -11,7 +11,7 @@
"ButtonApplyChapters": "Zatwierdź rozdziały", "ButtonApplyChapters": "Zatwierdź rozdziały",
"ButtonAuthors": "Autorzy", "ButtonAuthors": "Autorzy",
"ButtonBack": "Wstecz", "ButtonBack": "Wstecz",
"ButtonBatchEditPopulateFromExisting": "Powiel z poprzednich", "ButtonBatchEditPopulateFromExisting": "Uzupełnij na podstawie istniejących",
"ButtonBatchEditPopulateMapDetails": "Powiel szczegóły mapy", "ButtonBatchEditPopulateMapDetails": "Powiel szczegóły mapy",
"ButtonBrowseForFolder": "Wyszukaj folder", "ButtonBrowseForFolder": "Wyszukaj folder",
"ButtonCancel": "Anuluj", "ButtonCancel": "Anuluj",
@@ -55,7 +55,7 @@
"ButtonNext": "Następny", "ButtonNext": "Następny",
"ButtonNextChapter": "Następny rozdział", "ButtonNextChapter": "Następny rozdział",
"ButtonNextItemInQueue": "Następny element w kolejce", "ButtonNextItemInQueue": "Następny element w kolejce",
"ButtonOk": "Ok", "ButtonOk": "OK",
"ButtonOpenFeed": "Otwórz feed", "ButtonOpenFeed": "Otwórz feed",
"ButtonOpenManager": "Otwórz menadżera", "ButtonOpenManager": "Otwórz menadżera",
"ButtonPause": "Wstrzymaj", "ButtonPause": "Wstrzymaj",
@@ -76,7 +76,7 @@
"ButtonReScan": "Ponowne skanowanie", "ButtonReScan": "Ponowne skanowanie",
"ButtonRead": "Czytaj", "ButtonRead": "Czytaj",
"ButtonReadLess": "Pokaż mniej", "ButtonReadLess": "Pokaż mniej",
"ButtonReadMore": "Pokaż więcej", "ButtonReadMore": "Czytaj więcej",
"ButtonRefresh": "Odśwież", "ButtonRefresh": "Odśwież",
"ButtonRemove": "Usuń", "ButtonRemove": "Usuń",
"ButtonRemoveAll": "Usuń wszystko", "ButtonRemoveAll": "Usuń wszystko",
@@ -96,7 +96,7 @@
"ButtonScrollRight": "Przewiń w prawo", "ButtonScrollRight": "Przewiń w prawo",
"ButtonSearch": "Szukaj", "ButtonSearch": "Szukaj",
"ButtonSelectFolderPath": "Wybierz ścieżkę folderu", "ButtonSelectFolderPath": "Wybierz ścieżkę folderu",
"ButtonSeries": "Seria", "ButtonSeries": "Serie",
"ButtonSetChaptersFromTracks": "Ustawiaj rozdziały na podstawie utworów", "ButtonSetChaptersFromTracks": "Ustawiaj rozdziały na podstawie utworów",
"ButtonShare": "Udostępnij", "ButtonShare": "Udostępnij",
"ButtonShiftTimes": "Przesunięcie czasowe", "ButtonShiftTimes": "Przesunięcie czasowe",
@@ -127,7 +127,7 @@
"HeaderAudiobookTools": "Narzędzia do zarządzania audiobookami", "HeaderAudiobookTools": "Narzędzia do zarządzania audiobookami",
"HeaderAuthentication": "Uwierzytelnianie", "HeaderAuthentication": "Uwierzytelnianie",
"HeaderBackups": "Kopie zapasowe", "HeaderBackups": "Kopie zapasowe",
"HeaderBulkChapterModal": "Dodaj wiele rozdziałów", "HeaderBulkChapterModal": "Dodaj kilka rozdziałów",
"HeaderChangePassword": "Zmień hasło", "HeaderChangePassword": "Zmień hasło",
"HeaderChapters": "Rozdziały", "HeaderChapters": "Rozdziały",
"HeaderChooseAFolder": "Wybierz folder", "HeaderChooseAFolder": "Wybierz folder",
@@ -275,7 +275,7 @@
"LabelBonus": "Bonus", "LabelBonus": "Bonus",
"LabelBooks": "Książki", "LabelBooks": "Książki",
"LabelButtonText": "Tekst przycisku", "LabelButtonText": "Tekst przycisku",
"LabelByAuthor": "autorstwa {0}", "LabelByAuthor": "Autor {0}",
"LabelChangePassword": "Zmień hasło", "LabelChangePassword": "Zmień hasło",
"LabelChannels": "Kanały", "LabelChannels": "Kanały",
"LabelChapterCount": "{0} rozdziałów", "LabelChapterCount": "{0} rozdziałów",
@@ -286,7 +286,7 @@
"LabelClickToUseCurrentValue": "Kliknij by zastosować aktualną wartość", "LabelClickToUseCurrentValue": "Kliknij by zastosować aktualną wartość",
"LabelClosePlayer": "Zamknij odtwarzacz", "LabelClosePlayer": "Zamknij odtwarzacz",
"LabelCodec": "Kodek", "LabelCodec": "Kodek",
"LabelCollapseSeries": "Podsumuj serię", "LabelCollapseSeries": "Zwiń serię",
"LabelCollapseSubSeries": "Zwiń podserie", "LabelCollapseSubSeries": "Zwiń podserie",
"LabelCollection": "Kolekcja", "LabelCollection": "Kolekcja",
"LabelCollections": "Kolekcje", "LabelCollections": "Kolekcje",
@@ -295,11 +295,12 @@
"LabelContinueListening": "Kontynuuj słuchanie", "LabelContinueListening": "Kontynuuj słuchanie",
"LabelContinueReading": "Kontynuuj czytanie", "LabelContinueReading": "Kontynuuj czytanie",
"LabelContinueSeries": "Kontynuuj serię", "LabelContinueSeries": "Kontynuuj serię",
"LabelCorsAllowed": "Dozwolone źródła CORS",
"LabelCover": "Okładka", "LabelCover": "Okładka",
"LabelCoverImageURL": "URL okładki", "LabelCoverImageURL": "URL okładki",
"LabelCoverProvider": "Dostawca okładki", "LabelCoverProvider": "Dostawca okładki",
"LabelCreatedAt": "Utworzone", "LabelCreatedAt": "Utworzone",
"LabelCronExpression": "Wyrażenie CRON", "LabelCronExpression": "Wyrażenie harmonogramowania zadań cron",
"LabelCurrent": "Aktualny", "LabelCurrent": "Aktualny",
"LabelCurrently": "Obecnie:", "LabelCurrently": "Obecnie:",
"LabelCustomCronExpression": "Niestandardowe wyrażenie Cron:", "LabelCustomCronExpression": "Niestandardowe wyrażenie Cron:",
@@ -338,11 +339,11 @@
"LabelEnable": "Włącz", "LabelEnable": "Włącz",
"LabelEncodingBackupLocation": "Kopia zapasowa twoich oryginalnych plików audio będzie się znajdować w:", "LabelEncodingBackupLocation": "Kopia zapasowa twoich oryginalnych plików audio będzie się znajdować w:",
"LabelEncodingChaptersNotEmbedded": "W audiobookach wielościeżkowych rozdziały nie są osadzone.", "LabelEncodingChaptersNotEmbedded": "W audiobookach wielościeżkowych rozdziały nie są osadzone.",
"LabelEncodingClearItemCache": "Pamiętaj o okresowym czyszczeniu pamięci podręcznej elementów.", "LabelEncodingClearItemCache": "Pamiętaj, aby okresowo czyścić pamięć podręczną elementów.",
"LabelEncodingFinishedM4B": "Ukończony plik M4B zostanie umieszczony w folderze audiobooka pod adresem:", "LabelEncodingFinishedM4B": "Ukończony plik M4B zostanie umieszczony w folderze audiobooka pod adresem:",
"LabelEncodingInfoEmbedded": "Metadane zostaną osadzone w ścieżkach audio w folderze z audiobookiem.", "LabelEncodingInfoEmbedded": "Metadane zostaną osadzone w ścieżkach audio w folderze z audiobookiem.",
"LabelEncodingStartedNavigation": "Po uruchomieniu zadania możesz opuścić tę stronę.", "LabelEncodingStartedNavigation": "Po uruchomieniu zadania możesz opuścić tę stronę.",
"LabelEncodingTimeWarning": "Konwersja może potrwać do 30 minut.", "LabelEncodingTimeWarning": "Kodowanie może potrwać do 30 minut.",
"LabelEncodingWarningAdvancedSettings": "Ostrzeżenie: Nie aktualizuj tych ustawień, jeśli nie jesteś zaznajomiony ze sposobem działania ffmpeg i opcji konwersji.", "LabelEncodingWarningAdvancedSettings": "Ostrzeżenie: Nie aktualizuj tych ustawień, jeśli nie jesteś zaznajomiony ze sposobem działania ffmpeg i opcji konwersji.",
"LabelEncodingWatcherDisabled": "Jeśli monitorowanie folderów jest wyłączone, należy ponownie przeskanować audiobooka.", "LabelEncodingWatcherDisabled": "Jeśli monitorowanie folderów jest wyłączone, należy ponownie przeskanować audiobooka.",
"LabelEnd": "Zakończ", "LabelEnd": "Zakończ",
@@ -358,11 +359,11 @@
"LabelExample": "Przykład", "LabelExample": "Przykład",
"LabelExpandSeries": "Rozwiń serie", "LabelExpandSeries": "Rozwiń serie",
"LabelExpandSubSeries": "Rozwiń podserie", "LabelExpandSubSeries": "Rozwiń podserie",
"LabelExpired": "Przeterminowane", "LabelExpired": "Wygasły",
"LabelExpiresAt": "Wygasa w", "LabelExpiresAt": "Wygasa o",
"LabelExpiresInSeconds": "Wygasa za (sekund)", "LabelExpiresInSeconds": "Wygasa za (sekund)",
"LabelExpiresNever": "Nigdy", "LabelExpiresNever": "Nigdy",
"LabelExplicit": "Nieprzyzwoite", "LabelExplicit": "18+",
"LabelExplicitChecked": "Nieprzyzwoite (sprawdzone)", "LabelExplicitChecked": "Nieprzyzwoite (sprawdzone)",
"LabelExplicitUnchecked": "Przyzwoite (niesprawdzone)", "LabelExplicitUnchecked": "Przyzwoite (niesprawdzone)",
"LabelExportOPML": "Wyeksportuj OPML", "LabelExportOPML": "Wyeksportuj OPML",
@@ -382,7 +383,7 @@
"LabelFolders": "Foldery", "LabelFolders": "Foldery",
"LabelFontBold": "Pogrubiony", "LabelFontBold": "Pogrubiony",
"LabelFontBoldness": "Grubość czcionki", "LabelFontBoldness": "Grubość czcionki",
"LabelFontFamily": "Rodzina czcionek", "LabelFontFamily": "Krój pisma",
"LabelFontItalic": "Kursywa", "LabelFontItalic": "Kursywa",
"LabelFontScale": "Rozmiar czcionki", "LabelFontScale": "Rozmiar czcionki",
"LabelFontStrikethrough": "Przekreślony", "LabelFontStrikethrough": "Przekreślony",
@@ -400,7 +401,7 @@
"LabelHours": "Godziny", "LabelHours": "Godziny",
"LabelIcon": "Ikona", "LabelIcon": "Ikona",
"LabelImageURLFromTheWeb": "Link do obrazu w sieci", "LabelImageURLFromTheWeb": "Link do obrazu w sieci",
"LabelInProgress": "W trakcie", "LabelInProgress": "W toku",
"LabelIncludeInTracklist": "Dołącz do listy odtwarzania", "LabelIncludeInTracklist": "Dołącz do listy odtwarzania",
"LabelIncomplete": "Nieukończone", "LabelIncomplete": "Nieukończone",
"LabelInterval": "Interwał", "LabelInterval": "Interwał",
@@ -435,9 +436,9 @@
"LabelLibraryFilterSublistEmpty": "Brak {0}", "LabelLibraryFilterSublistEmpty": "Brak {0}",
"LabelLibraryItem": "Element biblioteki", "LabelLibraryItem": "Element biblioteki",
"LabelLibraryName": "Nazwa biblioteki", "LabelLibraryName": "Nazwa biblioteki",
"LabelLibrarySortByProgress": "Postęp: Ostatnio zaktualizowane", "LabelLibrarySortByProgress": "Postęp: Ostatnia aktualizacja",
"LabelLibrarySortByProgressFinished": "Postęp: Ukończone", "LabelLibrarySortByProgressFinished": "Postęp: Ukończony",
"LabelLibrarySortByProgressStarted": "Postęp: Rozpoczęte", "LabelLibrarySortByProgressStarted": "Postęp: Rozpoczęty",
"LabelLimit": "Limit", "LabelLimit": "Limit",
"LabelLineSpacing": "Odstęp między wierszami", "LabelLineSpacing": "Odstęp między wierszami",
"LabelListenAgain": "Słuchaj ponownie", "LabelListenAgain": "Słuchaj ponownie",
@@ -449,7 +450,7 @@
"LabelMatchConfidence": "Zaufanie", "LabelMatchConfidence": "Zaufanie",
"LabelMatchExistingUsersBy": "Dopasuje istniejących użytkowników poprzez", "LabelMatchExistingUsersBy": "Dopasuje istniejących użytkowników poprzez",
"LabelMatchExistingUsersByDescription": "Służy do łączenia istniejących użytkowników. Po połączeniu użytkownicy zostaną dopasowani za pomocą unikalnego identyfikatora od dostawcy SSO", "LabelMatchExistingUsersByDescription": "Służy do łączenia istniejących użytkowników. Po połączeniu użytkownicy zostaną dopasowani za pomocą unikalnego identyfikatora od dostawcy SSO",
"LabelMaxEpisodesToDownload": "Maksymalna liczba odcinków do pobrania. Użyj 0, aby wyłączyć ograniczenie.", "LabelMaxEpisodesToDownload": "Maksymalna liczba odcinków do pobrania. Użyj 0, aby uzyskać nieograniczoną liczbę.",
"LabelMaxEpisodesToDownloadPerCheck": "Maksymalna liczba nowych odcinków do pobrania na jedno sprawdzenie", "LabelMaxEpisodesToDownloadPerCheck": "Maksymalna liczba nowych odcinków do pobrania na jedno sprawdzenie",
"LabelMaxEpisodesToKeep": "Maksymalna liczba odcinków do zachowania", "LabelMaxEpisodesToKeep": "Maksymalna liczba odcinków do zachowania",
"LabelMaxEpisodesToKeepHelp": "Wartość 0 wyłącza maksymalny limit. Po automatycznym pobraniu nowego odcinka, najstarszy odcinek zostanie usunięty, jeśli masz ich więcej niż X. Spowoduje to usunięcie tylko 1 odcinka na nowe pobieranie.", "LabelMaxEpisodesToKeepHelp": "Wartość 0 wyłącza maksymalny limit. Po automatycznym pobraniu nowego odcinka, najstarszy odcinek zostanie usunięty, jeśli masz ich więcej niż X. Spowoduje to usunięcie tylko 1 odcinka na nowe pobieranie.",
@@ -497,7 +498,8 @@
"LabelNumberOfChapters": "Liczba rozdziałów:", "LabelNumberOfChapters": "Liczba rozdziałów:",
"LabelNumberOfEpisodes": "# Odcinków", "LabelNumberOfEpisodes": "# Odcinków",
"LabelOpenIDAdvancedPermsClaimDescription": "Nazwa deklaracji OpenID zawierającej zaawansowane uprawnienia do działań użytkownika w aplikacji, które będą miały zastosowanie do ról innych niż administracyjne (<b>jeśli skonfigurowano</b>). Jeśli deklaracja nie zostanie uwzględniona w odpowiedzi, dostęp do ABS zostanie zablokowany. Brak jednej opcji zostanie uznany za <code>fałsz</code>. Upewnij się, że deklaracja dostawcy tożsamości jest zgodna z oczekiwaną strukturą:", "LabelOpenIDAdvancedPermsClaimDescription": "Nazwa deklaracji OpenID zawierającej zaawansowane uprawnienia do działań użytkownika w aplikacji, które będą miały zastosowanie do ról innych niż administracyjne (<b>jeśli skonfigurowano</b>). Jeśli deklaracja nie zostanie uwzględniona w odpowiedzi, dostęp do ABS zostanie zablokowany. Brak jednej opcji zostanie uznany za <code>fałsz</code>. Upewnij się, że deklaracja dostawcy tożsamości jest zgodna z oczekiwaną strukturą:",
"LabelOpenIDClaims": "Pozostaw poniższe opcje puste, aby wyłączyć zaawansowane przypisywanie grup i uprawnień. Automatycznie zostanie przypisana grupa „Użytkownik”.", "LabelOpenIDClaims": "Pozostaw poniższe opcje puste, aby wyłączyć zaawansowane przypisywanie grup i uprawnień. Wówczas automatycznie zostanie przypisana grupa „Użytkownik”.",
"LabelOpenIDGroupClaimDescription": "Nazwa roszczenia OpenID zawierającego listę grup użytkownika. Powszechnie nazywane <code>grupami</code>. <b>Jeśli skonfigurowano</b>, aplikacja automatycznie przypisze role na podstawie przynależności użytkownika do grup, pod warunkiem, że te grupy są nazwane bez uwzględniania wielkości liter „admin”, „user” lub „guest” w roszczeniu. Roszczenie powinno zawierać listę, a jeśli użytkownik należy do wielu grup, aplikacja przypisze rolę odpowiadającą najwyższemu poziomowi dostępu. Jeśli żadna grupa nie będzie pasować, dostęp zostanie odrzucony.",
"LabelOpenRSSFeed": "Otwórz kanał RSS", "LabelOpenRSSFeed": "Otwórz kanał RSS",
"LabelOverwrite": "Nadpisz", "LabelOverwrite": "Nadpisz",
"LabelPaginationPageXOfY": "Strona {0} z {1}", "LabelPaginationPageXOfY": "Strona {0} z {1}",
@@ -572,11 +574,11 @@
"LabelSelectUsers": "Wybór użytkowników", "LabelSelectUsers": "Wybór użytkowników",
"LabelSendEbookToDevice": "Wyślij ebook do...", "LabelSendEbookToDevice": "Wyślij ebook do...",
"LabelSequence": "Kolejność", "LabelSequence": "Kolejność",
"LabelSerial": "Seria", "LabelSerial": "Numer serii",
"LabelSeries": "Serie", "LabelSeries": "Serie",
"LabelSeriesName": "Nazwy serii", "LabelSeriesName": "Nazwy serii",
"LabelSeriesProgress": "Postęp w serii", "LabelSeriesProgress": "Postęp w serii",
"LabelServerLogLevel": "Poziom logowania servera", "LabelServerLogLevel": "Poziom logów servera",
"LabelServerYearReview": "Podsumowanie serwera w roku ({0})", "LabelServerYearReview": "Podsumowanie serwera w roku ({0})",
"LabelSetEbookAsPrimary": "Ustaw jako pierwszy", "LabelSetEbookAsPrimary": "Ustaw jako pierwszy",
"LabelSetEbookAsSupplementary": "Ustaw jako dodatkowy", "LabelSetEbookAsSupplementary": "Ustaw jako dodatkowy",
@@ -586,8 +588,8 @@
"LabelSettingsBookshelfViewHelp": "Widok półki z książkami", "LabelSettingsBookshelfViewHelp": "Widok półki z książkami",
"LabelSettingsChromecastSupport": "Wsparcie Chromecast", "LabelSettingsChromecastSupport": "Wsparcie Chromecast",
"LabelSettingsDateFormat": "Format daty", "LabelSettingsDateFormat": "Format daty",
"LabelSettingsEnableWatcher": "Automatyczne skanowanie bibliotek w poszukiwaniu zmian", "LabelSettingsEnableWatcher": "Automatyczne monitorowanie bibliotek w poszukiwaniu zmian",
"LabelSettingsEnableWatcherForLibrary": "Automatyczne skanowanie biblioteki w poszukiwaniu zmian", "LabelSettingsEnableWatcherForLibrary": "Automatyczne monitorowanie biblioteki w poszukiwaniu zmian",
"LabelSettingsEnableWatcherHelp": "Włącza automatyczne dodawanie/aktualizację pozycji gdy wykryte zostaną zmiany w plikach. Wymaga restartu serwera", "LabelSettingsEnableWatcherHelp": "Włącza automatyczne dodawanie/aktualizację pozycji gdy wykryte zostaną zmiany w plikach. Wymaga restartu serwera",
"LabelSettingsEpubsAllowScriptedContent": "Zezwalanie na skrypty w plikach epub", "LabelSettingsEpubsAllowScriptedContent": "Zezwalanie na skrypty w plikach epub",
"LabelSettingsEpubsAllowScriptedContentHelp": "Zezwala plikom epub na wykonywanie skryptów. Zaleca się mieć to ustawienie wyłączone, chyba że ma się zaufanie do źródła plików epub.", "LabelSettingsEpubsAllowScriptedContentHelp": "Zezwala plikom epub na wykonywanie skryptów. Zaleca się mieć to ustawienie wyłączone, chyba że ma się zaufanie do źródła plików epub.",
@@ -620,7 +622,7 @@
"LabelSettingsStoreMetadataWithItemHelp": "Domyślnie metadane są przechowywane w folderze /metadata/items, włączenie tej opcji spowoduje, że okładka będzie przechowywana w folderze ksiązki. Tylko jedna okładka o nazwie pliku \"cover\" będzie przechowywana", "LabelSettingsStoreMetadataWithItemHelp": "Domyślnie metadane są przechowywane w folderze /metadata/items, włączenie tej opcji spowoduje, że okładka będzie przechowywana w folderze ksiązki. Tylko jedna okładka o nazwie pliku \"cover\" będzie przechowywana",
"LabelSettingsTimeFormat": "Format czasu", "LabelSettingsTimeFormat": "Format czasu",
"LabelShare": "Udostępnij", "LabelShare": "Udostępnij",
"LabelShareDownloadableHelp": "Użytkownicy mogą przy pomocy linka ściągnąć archiwum ZIP pozycji biblioteki", "LabelShareDownloadableHelp": "Zezwala użytkownikom z linkiem udostępniania na pobranie pliku zip elementu biblioteki.",
"LabelShareOpen": "Otwórz udział", "LabelShareOpen": "Otwórz udział",
"LabelShareURL": "Link do udziału", "LabelShareURL": "Link do udziału",
"LabelShowAll": "Pokaż wszystko", "LabelShowAll": "Pokaż wszystko",
@@ -628,6 +630,7 @@
"LabelShowSubtitles": "Pokaż Napisy", "LabelShowSubtitles": "Pokaż Napisy",
"LabelSize": "Rozmiar", "LabelSize": "Rozmiar",
"LabelSleepTimer": "Wyłącznik czasowy", "LabelSleepTimer": "Wyłącznik czasowy",
"LabelSlug": "slug (części URL która identyfikuje konkretny zasób)",
"LabelSortAscending": "Rosnąco", "LabelSortAscending": "Rosnąco",
"LabelSortDescending": "Malejąco", "LabelSortDescending": "Malejąco",
"LabelSortPubDate": "Sortuj według daty publikacji", "LabelSortPubDate": "Sortuj według daty publikacji",
@@ -658,14 +661,15 @@
"LabelTagsAccessibleToUser": "Tagi dostępne dla użytkownika", "LabelTagsAccessibleToUser": "Tagi dostępne dla użytkownika",
"LabelTagsNotAccessibleToUser": "Znaczniki niedostępne dla użytkownika", "LabelTagsNotAccessibleToUser": "Znaczniki niedostępne dla użytkownika",
"LabelTasks": "Uruchomione zadania", "LabelTasks": "Uruchomione zadania",
"LabelTextEditorBulletedList": "Lista punktowana", "LabelTextEditorBulletedList": "Lista wypunktowana",
"LabelTextEditorLink": "Link", "LabelTextEditorLink": "Link",
"LabelTextEditorNumberedList": "Lista numerowana", "LabelTextEditorNumberedList": "Lista numerowana",
"LabelTextEditorUnlink": "Usuń link", "LabelTextEditorUnlink": "Usuń link",
"LabelTheme": "Kompozycja", "LabelTheme": "Motyw",
"LabelThemeDark": "Ciemny", "LabelThemeDark": "Ciemny",
"LabelThemeLight": "Jasny", "LabelThemeLight": "Jasny",
"LabelThemeSepia": "Sepia", "LabelThemeSepia": "Sepia",
"LabelTimeBase": "Podstawa czasu",
"LabelTimeDurationXHours": "{0} godzin", "LabelTimeDurationXHours": "{0} godzin",
"LabelTimeDurationXMinutes": "{0} minuty", "LabelTimeDurationXMinutes": "{0} minuty",
"LabelTimeDurationXSeconds": "{0} sekundy", "LabelTimeDurationXSeconds": "{0} sekundy",
@@ -683,13 +687,13 @@
"LabelToolsMakeM4bDescription": "Tworzy plik w formacie .M4B, który zawiera metadane, okładkę oraz rozdziały.", "LabelToolsMakeM4bDescription": "Tworzy plik w formacie .M4B, który zawiera metadane, okładkę oraz rozdziały.",
"LabelToolsSplitM4b": "Podziel plik .M4B na pliki .MP3", "LabelToolsSplitM4b": "Podziel plik .M4B na pliki .MP3",
"LabelToolsSplitM4bDescription": "Podziel plik .M4B na pliki .MP3 na rozdziały z załączonymi metadanymi oraz okładką.", "LabelToolsSplitM4bDescription": "Podziel plik .M4B na pliki .MP3 na rozdziały z załączonymi metadanymi oraz okładką.",
"LabelTotalDuration": "TCałkowita długość", "LabelTotalDuration": "Całkowita długość",
"LabelTotalTimeListened": "Całkowity czas odtwarzania", "LabelTotalTimeListened": "Całkowity czas odtwarzania",
"LabelTrackFromFilename": "Ścieżka z nazwy pliku", "LabelTrackFromFilename": "Ścieżka z nazwy pliku",
"LabelTrackFromMetadata": "Ścieżka z metadanych", "LabelTrackFromMetadata": "Ścieżka z metadanych",
"LabelTracks": "Ścieżki", "LabelTracks": "Ścieżki",
"LabelTracksMultiTrack": "Wielościeżkowy", "LabelTracksMultiTrack": "Wielościeżkowy",
"LabelTracksNone": "Brak ścieżek", "LabelTracksNone": "Brak utworów",
"LabelTracksSingleTrack": "Pojedyncza ścieżka", "LabelTracksSingleTrack": "Pojedyncza ścieżka",
"LabelTrailer": "Zwiastun", "LabelTrailer": "Zwiastun",
"LabelType": "Typ", "LabelType": "Typ",
@@ -706,7 +710,7 @@
"LabelUploaderDragAndDropFilesOnly": "Przeciągnij i upuść pliki", "LabelUploaderDragAndDropFilesOnly": "Przeciągnij i upuść pliki",
"LabelUploaderDropFiles": "Puść pliki", "LabelUploaderDropFiles": "Puść pliki",
"LabelUploaderItemFetchMetadataHelp": "Automatycznie pobierz tytuł, autora i serie", "LabelUploaderItemFetchMetadataHelp": "Automatycznie pobierz tytuł, autora i serie",
"LabelUseAdvancedOptions": "Opcje zaawansowane", "LabelUseAdvancedOptions": "Użyj ustawień zaawansowanych",
"LabelUseChapterTrack": "Użyj ścieżki rozdziału", "LabelUseChapterTrack": "Użyj ścieżki rozdziału",
"LabelUseFullTrack": "Użycie ścieżki rozdziału", "LabelUseFullTrack": "Użycie ścieżki rozdziału",
"LabelUseZeroForUnlimited": "Użyj 0, aby wyłączyć ograniczenia", "LabelUseZeroForUnlimited": "Użyj 0, aby wyłączyć ograniczenia",
@@ -719,6 +723,8 @@
"LabelViewPlayerSettings": "Zobacz ustawienia odtwarzacza", "LabelViewPlayerSettings": "Zobacz ustawienia odtwarzacza",
"LabelViewQueue": "Wyświetlaj kolejkę odtwarzania", "LabelViewQueue": "Wyświetlaj kolejkę odtwarzania",
"LabelVolume": "Głośność", "LabelVolume": "Głośność",
"LabelWebRedirectURLsDescription": "Zezwól na te adresy URL w swoim dostawcy OAuth, aby umożliwić przekierowanie z powrotem do aplikacji internetowej po zalogowaniu:",
"LabelWebRedirectURLsSubfolder": "Podfolder dla adresów URL przekierowań",
"LabelWeekdaysToRun": "Dni tygodnia", "LabelWeekdaysToRun": "Dni tygodnia",
"LabelXBooks": "{0} książek", "LabelXBooks": "{0} książek",
"LabelXItems": "{0} elementów", "LabelXItems": "{0} elementów",
@@ -739,6 +745,7 @@
"MessageBackupsLocationNoEditNote": "Uwaga: Lokalizacja kopii zapasowej jest ustawiona poprzez zmienną środowiskową i nie może być tutaj zmieniona.", "MessageBackupsLocationNoEditNote": "Uwaga: Lokalizacja kopii zapasowej jest ustawiona poprzez zmienną środowiskową i nie może być tutaj zmieniona.",
"MessageBackupsLocationPathEmpty": "Ścieżka do kopii zapasowej nie może być pusta", "MessageBackupsLocationPathEmpty": "Ścieżka do kopii zapasowej nie może być pusta",
"MessageBatchEditPopulateMapDetailsAllHelp": "Wypełnij włączone pola danymi ze wszystkich elementów. Pola z wieloma wartościami zostaną scalone.", "MessageBatchEditPopulateMapDetailsAllHelp": "Wypełnij włączone pola danymi ze wszystkich elementów. Pola z wieloma wartościami zostaną scalone.",
"MessageBatchEditPopulateMapDetailsItemHelp": "Wypełnia włączone pola szczegółów mapy danymi z tego elementu",
"MessageBatchQuickMatchDescription": "Quick Match będzie próbował dodać brakujące okładki i metadane dla wybranych elementów. Włącz poniższe opcje, aby umożliwić Quick Match nadpisanie istniejących okładek i/lub metadanych.", "MessageBatchQuickMatchDescription": "Quick Match będzie próbował dodać brakujące okładki i metadane dla wybranych elementów. Włącz poniższe opcje, aby umożliwić Quick Match nadpisanie istniejących okładek i/lub metadanych.",
"MessageBookshelfNoCollections": "Nie posiadasz jeszcze żadnych kolekcji", "MessageBookshelfNoCollections": "Nie posiadasz jeszcze żadnych kolekcji",
"MessageBookshelfNoCollectionsHelp": "Kolekcje są publiczne. Wszyscy użytkownicy mający dostęp do biblioteki mogą je zobaczyć.", "MessageBookshelfNoCollectionsHelp": "Kolekcje są publiczne. Wszyscy użytkownicy mający dostęp do biblioteki mogą je zobaczyć.",
@@ -810,6 +817,7 @@
"MessageFetching": "Pobieranie...", "MessageFetching": "Pobieranie...",
"MessageForceReScanDescription": "przeskanuje wszystkie pliki ponownie, jak przy świeżym skanowaniu. Tagi ID3 plików audio, pliki OPF i pliki tekstowe będą skanowane jak nowe.", "MessageForceReScanDescription": "przeskanuje wszystkie pliki ponownie, jak przy świeżym skanowaniu. Tagi ID3 plików audio, pliki OPF i pliki tekstowe będą skanowane jak nowe.",
"MessageHeatmapListeningTimeTooltip": "<strong>{0} słucha</strong> na {1}", "MessageHeatmapListeningTimeTooltip": "<strong>{0} słucha</strong> na {1}",
"MessageHeatmapNoListeningSessions": "Brak sesji słuchania na {0}",
"MessageImportantNotice": "Ważna informacja!", "MessageImportantNotice": "Ważna informacja!",
"MessageInsertChapterBelow": "Wstaw rozdział poniżej", "MessageInsertChapterBelow": "Wstaw rozdział poniżej",
"MessageInvalidAsin": "Nieprawidłowy ASIN", "MessageInvalidAsin": "Nieprawidłowy ASIN",
@@ -884,6 +892,7 @@
"MessageScheduleRunEveryWeekdayAtTime": "Uruchom w każdy {0} o {1}", "MessageScheduleRunEveryWeekdayAtTime": "Uruchom w każdy {0} o {1}",
"MessageSearchResultsFor": "Wyniki wyszukiwania dla", "MessageSearchResultsFor": "Wyniki wyszukiwania dla",
"MessageSelected": "{0} wybranych", "MessageSelected": "{0} wybranych",
"MessageSeriesSequenceCannotContainSpaces": "Sekwencja serii nie może zawierać spacji",
"MessageServerCouldNotBeReached": "Nie udało się uzyskać połączenia z serwerem", "MessageServerCouldNotBeReached": "Nie udało się uzyskać połączenia z serwerem",
"MessageSetChaptersFromTracksDescription": "Ustaw rozdziały, używając każdego pliku audio jako rozdziału, a tytuł rozdziału jako nazwy pliku audio.", "MessageSetChaptersFromTracksDescription": "Ustaw rozdziały, używając każdego pliku audio jako rozdziału, a tytuł rozdziału jako nazwy pliku audio.",
"MessageShareExpirationWillBe": "Czas udostępniania <strong>{0}</strong>", "MessageShareExpirationWillBe": "Czas udostępniania <strong>{0}</strong>",
@@ -901,12 +910,29 @@
"MessageTaskFailedToBackupAudioFile": "Nieudana próba wykonania kopii zapasowego pliku audio \"{0}\"", "MessageTaskFailedToBackupAudioFile": "Nieudana próba wykonania kopii zapasowego pliku audio \"{0}\"",
"MessageTaskFailedToCreateCacheDirectory": "Nie udało się utworzyć katalogu cache", "MessageTaskFailedToCreateCacheDirectory": "Nie udało się utworzyć katalogu cache",
"MessageTaskFailedToEmbedMetadataInFile": "Nie udało się wbudować metadanych do pliku \"{0}\"", "MessageTaskFailedToEmbedMetadataInFile": "Nie udało się wbudować metadanych do pliku \"{0}\"",
"MessageTaskFailedToMergeAudioFiles": "Nie udało się połączyć plików audio",
"MessageTaskFailedToMoveM4bFile": "Nie udało się przenieść pliku m4b",
"MessageTaskFailedToWriteMetadataFile": "Niepowodzenie zapisania pliku metadanych", "MessageTaskFailedToWriteMetadataFile": "Niepowodzenie zapisania pliku metadanych",
"MessageTaskMatchingBooksInLibrary": "Pasujące książki w bibliotece \"{0}\"",
"MessageTaskNoFilesToScan": "Brak plików do skanowania", "MessageTaskNoFilesToScan": "Brak plików do skanowania",
"MessageTaskOpmlImport": "Importuj OPML",
"MessageTaskOpmlImportDescription": "Tworzenie {0} podcastów z kanałów RSS",
"MessageTaskOpmlImportFeed": "Importuje plik OPML",
"MessageTaskOpmlImportFeedDescription": "Importowanie kanału RSS „{0}”",
"MessageTaskOpmlImportFeedFailed": "Nie udało się pobrać kanału podcastowego",
"MessageTaskOpmlImportFeedPodcastDescription": "Tworzenie podcastu \"{0}\"",
"MessageTaskOpmlImportFeedPodcastExists": "Podcast już istnieje pod podaną ścieżką",
"MessageTaskOpmlImportFeedPodcastFailed": "Nie udało się utworzyć podcastu",
"MessageTaskOpmlImportFinished": "Dodano {0} podcastów",
"MessageTaskOpmlParseFailed": "Błąd parsowania pliku OPML",
"MessageTaskOpmlParseFastFail": "Nieprawidłowy plik OPML. Nie znaleziono tagu <opml> LUB nie znaleziono tagu <outline>.",
"MessageTaskOpmlParseNoneFound": "Nie znaleziono kanałów w pliku OPML",
"MessageTaskScanItemsAdded": "Dodano {0}", "MessageTaskScanItemsAdded": "Dodano {0}",
"MessageTaskScanItemsMissing": "Brakuje {0}", "MessageTaskScanItemsMissing": "Brakuje {0}",
"MessageTaskScanItemsUpdated": "Zaktualizowano {0}", "MessageTaskScanItemsUpdated": "Zaktualizowano {0}",
"MessageTaskScanNoChangesNeeded": "Brak zmian", "MessageTaskScanNoChangesNeeded": "Brak zmian",
"MessageTaskScanningFileChanges": "Skanowanie zmian w plikach w „{0}”",
"MessageTaskScanningLibrary": "Skanowanie biblioteki \"{0}\"",
"MessageTaskTargetDirectoryNotWritable": "Brak prawa zapisu do folderu docelowego", "MessageTaskTargetDirectoryNotWritable": "Brak prawa zapisu do folderu docelowego",
"MessageThinking": "Myślę...", "MessageThinking": "Myślę...",
"MessageUploaderItemFailed": "Nie udało się przesłać", "MessageUploaderItemFailed": "Nie udało się przesłać",
@@ -925,6 +951,13 @@
"NoteUploaderFoldersWithMediaFiles": "Foldery z plikami multimedialnymi będą traktowane jako osobne elementy w bibliotece.", "NoteUploaderFoldersWithMediaFiles": "Foldery z plikami multimedialnymi będą traktowane jako osobne elementy w bibliotece.",
"NoteUploaderOnlyAudioFiles": "Jeśli przesyłasz tylko pliki audio, każdy plik audio będzie traktowany jako osobny audiobook.", "NoteUploaderOnlyAudioFiles": "Jeśli przesyłasz tylko pliki audio, każdy plik audio będzie traktowany jako osobny audiobook.",
"NoteUploaderUnsupportedFiles": "Nieobsługiwane pliki są ignorowane. Podczas dodawania folderu, inne pliki, które nie znajdują się w folderze elementu, są ignorowane.", "NoteUploaderUnsupportedFiles": "Nieobsługiwane pliki są ignorowane. Podczas dodawania folderu, inne pliki, które nie znajdują się w folderze elementu, są ignorowane.",
"NotificationOnBackupCompletedDescription": "Wyzwalane po zakończeniu tworzenia kopii zapasowej",
"NotificationOnBackupFailedDescription": "Wyzwalane w przypadku gdy stworzenie kopii zapasowej rzuci błąd",
"NotificationOnEpisodeDownloadedDescription": "Wyzwalane, gdy odcinek podcastu zostanie automatycznie pobrany",
"NotificationOnRSSFeedDisabledDescription": "Wyzwalane, gdy automatyczne pobieranie odcinków jest wyłączone z powodu zbyt wielu nieudanych prób",
"NotificationOnRSSFeedFailedDescription": "Wyzwalane, gdy żądanie kanału RSS dotyczące automatycznego pobrania odcinka nie powiedzie się",
"NotificationOnTestDescription": "Zdarzenie używane do testowania systemu powiadomień",
"PlaceholderBulkChapterInput": "Wpisz tytuł rozdziału lub użyj numeracji (np. „Odcinek 1”, „Rozdział 10”, „1.”)",
"PlaceholderNewCollection": "Nowa nazwa kolekcji", "PlaceholderNewCollection": "Nowa nazwa kolekcji",
"PlaceholderNewFolderPath": "Nowa ścieżka folderu", "PlaceholderNewFolderPath": "Nowa ścieżka folderu",
"PlaceholderNewPlaylist": "Nowa nazwa playlisty", "PlaceholderNewPlaylist": "Nowa nazwa playlisty",
@@ -932,6 +965,7 @@
"PlaceholderSearchEpisode": "Szukanie odcinka..", "PlaceholderSearchEpisode": "Szukanie odcinka..",
"StatsAuthorsAdded": "dodano autorów", "StatsAuthorsAdded": "dodano autorów",
"StatsBooksAdded": "dodano książki", "StatsBooksAdded": "dodano książki",
"StatsBooksAdditional": "Niektóre dodatki obejmują…",
"StatsBooksFinished": "ukończone książki", "StatsBooksFinished": "ukończone książki",
"StatsBooksFinishedThisYear": "Wybrane książki ukończone w tym roku…", "StatsBooksFinishedThisYear": "Wybrane książki ukończone w tym roku…",
"StatsBooksListenedTo": "książki wysłuchane", "StatsBooksListenedTo": "książki wysłuchane",
@@ -945,26 +979,54 @@
"StatsTopMonth": "TOPOWY MIESIĄC", "StatsTopMonth": "TOPOWY MIESIĄC",
"StatsTopNarrator": "TOPOWY NARRATOR", "StatsTopNarrator": "TOPOWY NARRATOR",
"StatsTopNarrators": "TOPOWI NARRATORZY", "StatsTopNarrators": "TOPOWI NARRATORZY",
"StatsTotalDuration": "O sumarycznej długości…",
"StatsYearInReview": "PRZEGLĄD ROKU", "StatsYearInReview": "PRZEGLĄD ROKU",
"ToastAccountUpdateSuccess": "Zaktualizowano konto", "ToastAccountUpdateSuccess": "Zaktualizowano konto",
"ToastAppriseUrlRequired": "Należy wprowadzić adres URL Apprise",
"ToastAsinRequired": "ASIN jest wymagany",
"ToastAuthorImageRemoveSuccess": "Zdjęcie autora usunięte", "ToastAuthorImageRemoveSuccess": "Zdjęcie autora usunięte",
"ToastAuthorNotFound": "Autor \"{0}\" nie został znaleziony",
"ToastAuthorRemoveSuccess": "Autor usunięty",
"ToastAuthorSearchNotFound": "Autor nie odnaleziony",
"ToastAuthorUpdateMerged": "Autor scalony", "ToastAuthorUpdateMerged": "Autor scalony",
"ToastAuthorUpdateSuccess": "Autor zaktualizowany", "ToastAuthorUpdateSuccess": "Autor zaktualizowany",
"ToastAuthorUpdateSuccessNoImageFound": "Autor zaktualizowany (nie znaleziono obrazu)", "ToastAuthorUpdateSuccessNoImageFound": "Autor zaktualizowany (nie znaleziono obrazu)",
"ToastBackupAppliedSuccess": "Kopia zapasowa została przywrócona",
"ToastBackupCreateFailed": "Nie udało się utworzyć kopii zapasowej", "ToastBackupCreateFailed": "Nie udało się utworzyć kopii zapasowej",
"ToastBackupCreateSuccess": "Utworzono kopię zapasową", "ToastBackupCreateSuccess": "Utworzono kopię zapasową",
"ToastBackupDeleteFailed": "Nie udało się usunąć kopii zapasowej", "ToastBackupDeleteFailed": "Nie udało się usunąć kopii zapasowej",
"ToastBackupDeleteSuccess": "Udało się usunąć kopie zapasowej", "ToastBackupDeleteSuccess": "Udało się usunąć kopie zapasowej",
"ToastBackupInvalidMaxKeep": "Nieprawidłowa ilość kopii zapasowych do przechowania",
"ToastBackupInvalidMaxSize": "Nieprawidłowy rozmiar maksymalny kopii zapasowej",
"ToastBackupRestoreFailed": "Nie udało się przywrócić kopii zapasowej", "ToastBackupRestoreFailed": "Nie udało się przywrócić kopii zapasowej",
"ToastBackupUploadFailed": "Nie udało się przesłać kopii zapasowej", "ToastBackupUploadFailed": "Nie udało się przesłać kopii zapasowej",
"ToastBackupUploadSuccess": "Kopia zapasowa została przesłana", "ToastBackupUploadSuccess": "Kopia zapasowa została przesłana",
"ToastBatchUpdateFailed": "Aktualizacja wsadowa nie powiodła się", "ToastBatchApplyDetailsToItemsSuccess": "Szczegóły zastosowane do elementów",
"ToastBatchUpdateSuccess": "Aktualizacja wsadowa powiodła się", "ToastBatchDeleteFailed": "Usuwanie zbiorcze nie powiodło się",
"ToastBatchDeleteSuccess": "Usuwanie zbiorcze powiodło się",
"ToastBatchQuickMatchFailed": "Szybkie dopasowanie partii nie powiodło się!",
"ToastBatchQuickMatchStarted": "Rozpoczęto partię szybkiego dopasowania {0} książek!",
"ToastBatchUpdateFailed": "Aktualizacja zbiorcza nie powiodła się",
"ToastBatchUpdateSuccess": "Aktualizacja zbiorcza powiodła się",
"ToastBookmarkCreateFailed": "Nie udało się utworzyć zakładki", "ToastBookmarkCreateFailed": "Nie udało się utworzyć zakładki",
"ToastBookmarkCreateSuccess": "Dodano zakładkę", "ToastBookmarkCreateSuccess": "Dodano zakładkę",
"ToastBookmarkRemoveSuccess": "Zakładka została usunięta", "ToastBookmarkRemoveSuccess": "Zakładka została usunięta",
"ToastBulkChapterInvalidCount": "Wprowadź liczbę z przedziału od 1 do 150",
"ToastCachePurgeFailed": "Nie udało się wyczyścić pamięci cache",
"ToastCachePurgeSuccess": "Wyczyszczono pamięć cache",
"ToastChapterLocked": "Rozdział jest zablokowany.",
"ToastChapterStartTimeAdjusted": "Czas rozpoczęcia rozdziału przesunięty o \"{0}\" sekund",
"ToastChaptersAllLocked": "Wszystkie rozdziały są zablokowane. Odblokuj edycję, aby użyć przesunięcia czasowego.",
"ToastChaptersHaveErrors": "Rozdziały posiadają błędy",
"ToastChaptersInvalidShiftAmountLast": "Niepoprawna wartość przesunięcia. Czas rozpoczęcia ostatniego rozdziału wykroczyłby poza długość tego audiobooka.",
"ToastChaptersInvalidShiftAmountStart": "Niepoprawna wartość przesunięcia. Pierwszy rozdział miałby długość mniejszą lub równą zeru oraz on zostałby nadpisany przez rozdział drugi. Ustaw późniejszy czas rozpoczęcia drugiego rozdziału.",
"ToastChaptersMustHaveTitles": "Rozdziały muszą posiadać tytuł",
"ToastChaptersRemoved": "Rozdziały usunięte",
"ToastChaptersUpdated": "Rozdziały zaktualizowane",
"ToastCollectionItemsAddFailed": "Dodanie elementów do kolekcji nie powiodło się",
"ToastCollectionRemoveSuccess": "Kolekcja usunięta", "ToastCollectionRemoveSuccess": "Kolekcja usunięta",
"ToastCollectionUpdateSuccess": "Zaktualizowano kolekcję", "ToastCollectionUpdateSuccess": "Zaktualizowano kolekcję",
"ToastConnectionNotAvailable": "Brak połączenia. Spróbuj ponownie później",
"ToastCoverSearchFailed": "Nieudane wyszukiwanie okładki", "ToastCoverSearchFailed": "Nieudane wyszukiwanie okładki",
"ToastCoverUpdateFailed": "Nieudana aktualizacja okładki", "ToastCoverUpdateFailed": "Nieudana aktualizacja okładki",
"ToastDateTimeInvalidOrIncomplete": "Niepoprawna data i czas", "ToastDateTimeInvalidOrIncomplete": "Niepoprawna data i czas",
@@ -975,17 +1037,31 @@
"ToastDeviceTestEmailFailed": "NIeudana próba wysłania testowego maila", "ToastDeviceTestEmailFailed": "NIeudana próba wysłania testowego maila",
"ToastDeviceTestEmailSuccess": "Testowy email został wysłany", "ToastDeviceTestEmailSuccess": "Testowy email został wysłany",
"ToastEmailSettingsUpdateSuccess": "Ustawienia email zaktualizowane", "ToastEmailSettingsUpdateSuccess": "Ustawienia email zaktualizowane",
"ToastEncodeCancelFailed": "Nie udało się anulować kodowania",
"ToastEncodeCancelSucces": "Kodowanie anulowane",
"ToastEpisodeDownloadQueueClearFailed": "Nie udało się wyczyścić kolejki",
"ToastEpisodeDownloadQueueClearSuccess": "Wyczyszczono kolejkę epizodów do ściągnięcia", "ToastEpisodeDownloadQueueClearSuccess": "Wyczyszczono kolejkę epizodów do ściągnięcia",
"ToastEpisodeUpdateSuccess": "Zaktualizowano {0} odcinków", "ToastEpisodeUpdateSuccess": "Zaktualizowano {0} odcinków",
"ToastErrorCannotShare": "Nie można udostępniać natywnie na tym urządzeniu.",
"ToastFailedToCreate": "Nie udało się utworzyć",
"ToastFailedToDelete": "Nie udało się usunąć",
"ToastFailedToLoadData": "Nie udało się załadować danych",
"ToastFailedToMatch": "Nie udało się dopasować",
"ToastFailedToShare": "Nie udało się udostępnić",
"ToastFailedToUpdate": "Nie udało się zaktualizować",
"ToastInvalidImageUrl": "Nieprawidłowy URL obrazu", "ToastInvalidImageUrl": "Nieprawidłowy URL obrazu",
"ToastInvalidMaxEpisodesToDownload": "Nieprawidłowa maksymalna liczba odcinków do pobrania",
"ToastInvalidUrl": "Nieprawidłowy URL", "ToastInvalidUrl": "Nieprawidłowy URL",
"ToastInvalidUrls": "Jeden lub więcej URL-i są nieprawidłowe", "ToastInvalidUrls": "Jeden lub więcej URL-i są nieprawidłowe",
"ToastItemCoverUpdateSuccess": "Zaktualizowano okładkę", "ToastItemCoverUpdateSuccess": "Zaktualizowano okładkę",
"ToastItemDeletedFailed": "Nie udało się usunąć elementu",
"ToastItemDeletedSuccess": "Element usunięty",
"ToastItemDetailsUpdateSuccess": "Zaktualizowano szczegóły", "ToastItemDetailsUpdateSuccess": "Zaktualizowano szczegóły",
"ToastItemMarkedAsFinishedFailed": "Nie udało się oznaczyć jako ukończone", "ToastItemMarkedAsFinishedFailed": "Nie udało się oznaczyć jako ukończone",
"ToastItemMarkedAsFinishedSuccess": "Pozycja oznaczona jako ukończona", "ToastItemMarkedAsFinishedSuccess": "Pozycja oznaczona jako ukończona",
"ToastItemMarkedAsNotFinishedFailed": "Oznaczenie pozycji jako ukończonej nie powiodło się", "ToastItemMarkedAsNotFinishedFailed": "Oznaczenie pozycji jako ukończonej nie powiodło się",
"ToastItemMarkedAsNotFinishedSuccess": "Pozycja oznaczona jako nieukończona", "ToastItemMarkedAsNotFinishedSuccess": "Pozycja oznaczona jako nieukończona",
"ToastItemUpdateSuccess": "Element zaktualizowany",
"ToastLibraryCreateFailed": "Nie udało się utworzyć biblioteki", "ToastLibraryCreateFailed": "Nie udało się utworzyć biblioteki",
"ToastLibraryCreateSuccess": "Biblioteka \"{0}\" stworzona", "ToastLibraryCreateSuccess": "Biblioteka \"{0}\" stworzona",
"ToastLibraryDeleteFailed": "Nie udało się usunąć biblioteki", "ToastLibraryDeleteFailed": "Nie udało się usunąć biblioteki",
@@ -994,6 +1070,10 @@
"ToastLibraryScanStarted": "Rozpoczęto skanowanie biblioteki", "ToastLibraryScanStarted": "Rozpoczęto skanowanie biblioteki",
"ToastLibraryUpdateSuccess": "Zaktualizowano \"{0}\" pozycji", "ToastLibraryUpdateSuccess": "Zaktualizowano \"{0}\" pozycji",
"ToastMatchAllAuthorsFailed": "Nie udało się dopasować wszystkich autorów", "ToastMatchAllAuthorsFailed": "Nie udało się dopasować wszystkich autorów",
"ToastMetadataFilesRemovedError": "Błąd podczas usuwania metadata.{0} plików",
"ToastMetadataFilesRemovedNoneFound": "Nie znaleziono metadata.{0} plików w bibliotece",
"ToastMetadataFilesRemovedNoneRemoved": "Nie usunięto żadnego metadata.{0} pliku",
"ToastMetadataFilesRemovedSuccess": "{0} metadata.{0} plików usunięto",
"ToastMustHaveAtLeastOnePath": "Musi mieć przynajmniej jedną ścieżkę", "ToastMustHaveAtLeastOnePath": "Musi mieć przynajmniej jedną ścieżkę",
"ToastNameEmailRequired": "Nazwa i email są wymagane", "ToastNameEmailRequired": "Nazwa i email są wymagane",
"ToastNameRequired": "Imię jest wymagane", "ToastNameRequired": "Imię jest wymagane",
@@ -1007,7 +1087,15 @@
"ToastNewUserUsernameError": "Wprowadź nazwę użytkownika", "ToastNewUserUsernameError": "Wprowadź nazwę użytkownika",
"ToastNoNewEpisodesFound": "Nie znaleziono nowych odcinków", "ToastNoNewEpisodesFound": "Nie znaleziono nowych odcinków",
"ToastNoRSSFeed": "Podcast nie posiada RSS Feed", "ToastNoRSSFeed": "Podcast nie posiada RSS Feed",
"ToastNoUpdatesNecessary": "Brak konieczności aktualizacji",
"ToastNotificationCreateFailed": "Nie udało się utworzyć powiadomienia",
"ToastNotificationDeleteFailed": "Nie udało się usunąć powiadomienia",
"ToastNotificationFailedMaximum": "Maks. ilość nieudanych prób musi być >= 0", "ToastNotificationFailedMaximum": "Maks. ilość nieudanych prób musi być >= 0",
"ToastNotificationQueueMaximum": "Maksymalna liczba powiadomień w kolejce musi być >= 0",
"ToastNotificationSettingsUpdateSuccess": "Zaktualizowano ustawienia powiadomień",
"ToastNotificationTestTriggerFailed": "Nie udało się wywołać powiadomienia testowego",
"ToastNotificationTestTriggerSuccess": "Wyzwolono powiadomienie testowe",
"ToastNotificationUpdateSuccess": "Powiadomienie zaktualizowane",
"ToastPlaylistCreateFailed": "Nie udało się utworzyć playlisty", "ToastPlaylistCreateFailed": "Nie udało się utworzyć playlisty",
"ToastPlaylistCreateSuccess": "Playlista utworzona", "ToastPlaylistCreateSuccess": "Playlista utworzona",
"ToastPlaylistRemoveSuccess": "Playlista usunięta", "ToastPlaylistRemoveSuccess": "Playlista usunięta",
@@ -1015,16 +1103,63 @@
"ToastPodcastCreateFailed": "Nie udało się utworzyć podcastu", "ToastPodcastCreateFailed": "Nie udało się utworzyć podcastu",
"ToastPodcastCreateSuccess": "Podcast został pomyślnie utworzony", "ToastPodcastCreateSuccess": "Podcast został pomyślnie utworzony",
"ToastPodcastEpisodeUpdated": "Zaktualizowano odcinki", "ToastPodcastEpisodeUpdated": "Zaktualizowano odcinki",
"ToastPodcastGetFeedFailed": "Nie udało się pobrać kanału podcastu",
"ToastPodcastNoEpisodesInFeed": "Nie znaleziono żadnych odcinków w kanale RSS",
"ToastPodcastNoRssFeed": "Podcast nie ma kanału RSS",
"ToastProgressIsNotBeingSynced": "Postęp nie jest synchronizowany, uruchom ponownie odtwarzanie",
"ToastProviderCreatedFailed": "Nie udało się dodać dostawcy",
"ToastProviderCreatedSuccess": "Dodano nowego dostawcę",
"ToastProviderNameAndUrlRequired": "Wymagane jest podanie nazwy i adresu URL",
"ToastProviderRemoveSuccess": "Dostawca usunięty",
"ToastRSSFeedCloseFailed": "Zamknięcie kanału RSS nie powiodło się", "ToastRSSFeedCloseFailed": "Zamknięcie kanału RSS nie powiodło się",
"ToastRSSFeedCloseSuccess": "Zamknięcie kanału RSS powiodło się", "ToastRSSFeedCloseSuccess": "Zamknięcie kanału RSS powiodło się",
"ToastRemoveFailed": "Nie udało się usunąć",
"ToastRemoveItemFromCollectionFailed": "Nie udało się usunąć elementu z kolekcji", "ToastRemoveItemFromCollectionFailed": "Nie udało się usunąć elementu z kolekcji",
"ToastRemoveItemFromCollectionSuccess": "Pozycja usunięta z kolekcji", "ToastRemoveItemFromCollectionSuccess": "Pozycja usunięta z kolekcji",
"ToastRemoveItemsWithIssuesFailed": "Nie udało się usunąć wadliwych elementów z biblioteki",
"ToastRemoveItemsWithIssuesSuccess": "Usunięto wadliwe elementy z biblioteki",
"ToastRenameFailed": "Nie udało się zmienić nazwy",
"ToastRescanFailed": "Ponowne skanowanie nie powiodło się dla {0}",
"ToastRescanRemoved": "Ponowne skanowanie powiodło się element został usunięty",
"ToastRescanUpToDate": "Ponowne skanowanie powiodło się element był aktualny",
"ToastRescanUpdated": "Ponowne skanowanie powiodło się element został zaktualizowany",
"ToastScanFailed": "Nie powiódł się skan elementu biblioteki",
"ToastSelectAtLeastOneUser": "Zaznacz co najmniej jednego użytkownika",
"ToastSendEbookToDeviceFailed": "Failed to Send Ebook to device", "ToastSendEbookToDeviceFailed": "Failed to Send Ebook to device",
"ToastSendEbookToDeviceSuccess": "Ebook wysłany na urządzenie \"{0}\"",
"ToastSeriesSubmitFailedSameName": "Nie można dodać dwóch serii pod tą samą nazwą",
"ToastSeriesUpdateFailed": "Aktualizacja serii nie powiodła się",
"ToastSeriesUpdateSuccess": "Aktualizacja serii powiodła się",
"ToastServerSettingsUpdateSuccess": "Zaktualizowano ustawienia serwera",
"ToastSessionCloseFailed": "Nie udało się zamknąć sesji",
"ToastSessionDeleteFailed": "Nie udało się usunąć sesji", "ToastSessionDeleteFailed": "Nie udało się usunąć sesji",
"ToastSessionDeleteSuccess": "Sesja usunięta", "ToastSessionDeleteSuccess": "Sesja usunięta",
"ToastSleepTimerDone": "Słodkich snów... zZzzZz",
"ToastSlugMustChange": "Slug zawiera nieprawidłowe znaki",
"ToastSlugRequired": "Slug jest wymagany",
"ToastSocketConnected": "Nawiązano połączenie z serwerem", "ToastSocketConnected": "Nawiązano połączenie z serwerem",
"ToastSocketDisconnected": "Połączenie z serwerem zostało zamknięte", "ToastSocketDisconnected": "Połączenie z serwerem zostało zamknięte",
"ToastSocketFailedToConnect": "Poączenie z serwerem nie powiodło się", "ToastSocketFailedToConnect": "Poączenie z serwerem nie powiodło się",
"ToastSortingPrefixesEmptyError": "Musi mieć co najmniej 1 prefiks sortowania",
"ToastSortingPrefixesUpdateSuccess": "Zaktualizowano prefiksy sortowania ({0} elementów)",
"ToastTitleRequired": "Tytuł jest wymagany",
"ToastUnknownError": "Nieznany błąd",
"ToastUnlinkOpenIdFailed": "Nie udało się odpiąć użytkownika z OpenID",
"ToastUnlinkOpenIdSuccess": "Użytkownik odpięty z OpenID",
"ToastUploaderFilepathExistsError": "Ścieżka \"{0}\" już istnieje na serwerze",
"ToastUploaderItemExistsInSubdirectoryError": "Element \"{0}\" używa podkatalogu ścieżki przesyłania.",
"ToastUserDeleteFailed": "Nie udało się usunąć użytkownika", "ToastUserDeleteFailed": "Nie udało się usunąć użytkownika",
"ToastUserDeleteSuccess": "Użytkownik usunięty" "ToastUserDeleteSuccess": "Użytkownik usunięty",
"ToastUserPasswordChangeSuccess": "Hasło zostało pomyślnie zmienione",
"ToastUserPasswordMismatch": "Hasła nie są zgodne",
"ToastUserPasswordMustChange": "Nowe hasło nie może być takie samo jak stare hasło",
"ToastUserRootRequireName": "Należy wprowadzić nazwę użytkownika root",
"TooltipAddChapters": "Dodaj rozdział(y)",
"TooltipAddOneSecond": "Dodaj sekundę",
"TooltipAdjustChapterStart": "Kliknij, aby skorygować czas początkowy",
"TooltipLockAllChapters": "Zablokuj wszystkie rozdziały",
"TooltipLockChapter": "Zablokuj rozdział (przytrzymaj Shift i kliknij, aby zaznaczyć zakres)",
"TooltipSubtractOneSecond": "Odejmij sekundę",
"TooltipUnlockAllChapters": "Odblokuj wszystkie rozdziały",
"TooltipUnlockChapter": "Odblokuj rozdział (przytrzymaj Shift i kliknij, aby zaznaczyć zakres)"
} }
+385 -14
View File
@@ -1,6 +1,6 @@
{ {
"ButtonAdd": "Adicionar", "ButtonAdd": "Adicionar",
"ButtonAddApiKey": "Adicionar Chave API", "ButtonAddApiKey": "Adicionar chave de API",
"ButtonAddChapters": "Adicionar Capítulos", "ButtonAddChapters": "Adicionar Capítulos",
"ButtonAddDevice": "Adicionar Dispositivo", "ButtonAddDevice": "Adicionar Dispositivo",
"ButtonAddLibrary": "Adicionar Biblioteca", "ButtonAddLibrary": "Adicionar Biblioteca",
@@ -21,6 +21,7 @@
"ButtonChooseAFolder": "Escolha uma pasta", "ButtonChooseAFolder": "Escolha uma pasta",
"ButtonChooseFiles": "Escolha arquivos", "ButtonChooseFiles": "Escolha arquivos",
"ButtonClearFilter": "Limpar Filtro", "ButtonClearFilter": "Limpar Filtro",
"ButtonClose": "Fechar",
"ButtonCloseFeed": "Fechar Feed", "ButtonCloseFeed": "Fechar Feed",
"ButtonCloseSession": "Fechar Sessão Aberta", "ButtonCloseSession": "Fechar Sessão Aberta",
"ButtonCollections": "Coleções", "ButtonCollections": "Coleções",
@@ -53,7 +54,7 @@
"ButtonNevermind": "Cancelar", "ButtonNevermind": "Cancelar",
"ButtonNext": "Próximo", "ButtonNext": "Próximo",
"ButtonNextChapter": "Próximo Capítulo", "ButtonNextChapter": "Próximo Capítulo",
"ButtonNextItemInQueue": "Próximo Item da Fila", "ButtonNextItemInQueue": "Próximo Item na Fila",
"ButtonOk": "Ok", "ButtonOk": "Ok",
"ButtonOpenFeed": "Abrir Feed", "ButtonOpenFeed": "Abrir Feed",
"ButtonOpenManager": "Abrir Gerenciador", "ButtonOpenManager": "Abrir Gerenciador",
@@ -120,10 +121,13 @@
"HeaderAccount": "Conta", "HeaderAccount": "Conta",
"HeaderAddCustomMetadataProvider": "Adicionar Provedor de Metadados Personalizado", "HeaderAddCustomMetadataProvider": "Adicionar Provedor de Metadados Personalizado",
"HeaderAdvanced": "Avançado", "HeaderAdvanced": "Avançado",
"HeaderApiKeys": "Chaves de API",
"HeaderAppriseNotificationSettings": "Configuração de notificações Apprise", "HeaderAppriseNotificationSettings": "Configuração de notificações Apprise",
"HeaderAudioTracks": "Trilhas de áudio", "HeaderAudioTracks": "Trilhas de áudio",
"HeaderAudiobookTools": "Ferramentas de Gerenciamento de Arquivos de Audiobooks", "HeaderAudiobookTools": "Ferramentas de Gerenciamento de Arquivos de Audiobooks",
"HeaderAuthentication": "Autenticação", "HeaderAuthentication": "Autenticação",
"HeaderBackups": "Backups",
"HeaderBulkChapterModal": "Adicionar vários capítulos",
"HeaderChangePassword": "Trocar Senha", "HeaderChangePassword": "Trocar Senha",
"HeaderChapters": "Capítulos", "HeaderChapters": "Capítulos",
"HeaderChooseAFolder": "Escolha uma Pasta", "HeaderChooseAFolder": "Escolha uma Pasta",
@@ -136,10 +140,11 @@
"HeaderDetails": "Detalhes", "HeaderDetails": "Detalhes",
"HeaderDownloadQueue": "Fila de Download", "HeaderDownloadQueue": "Fila de Download",
"HeaderEbookFiles": "Arquivos Ebook", "HeaderEbookFiles": "Arquivos Ebook",
"HeaderEmail": "Email",
"HeaderEmailSettings": "Configurações de Email", "HeaderEmailSettings": "Configurações de Email",
"HeaderEpisodes": "Episódios", "HeaderEpisodes": "Episódios",
"HeaderEreaderDevices": "Dispositivos Ereader", "HeaderEreaderDevices": "Dispositivos leitores de ebook",
"HeaderEreaderSettings": "Configurações Ereader", "HeaderEreaderSettings": "Configurações do leitor de ebook",
"HeaderFiles": "Arquivos", "HeaderFiles": "Arquivos",
"HeaderFindChapters": "Localizar Capítulos", "HeaderFindChapters": "Localizar Capítulos",
"HeaderIgnoredFiles": "Arquivos Ignorados", "HeaderIgnoredFiles": "Arquivos Ignorados",
@@ -152,6 +157,8 @@
"HeaderLibraryStats": "Estatísticas da Biblioteca", "HeaderLibraryStats": "Estatísticas da Biblioteca",
"HeaderListeningSessions": "Sessões", "HeaderListeningSessions": "Sessões",
"HeaderListeningStats": "Estatísticas", "HeaderListeningStats": "Estatísticas",
"HeaderLogin": "Login",
"HeaderLogs": "Logs",
"HeaderManageGenres": "Gerenciar Gêneros", "HeaderManageGenres": "Gerenciar Gêneros",
"HeaderManageTags": "Gerenciar Etiquetas", "HeaderManageTags": "Gerenciar Etiquetas",
"HeaderMapDetails": "Designar Detalhes", "HeaderMapDetails": "Designar Detalhes",
@@ -159,17 +166,23 @@
"HeaderMetadataOrderOfPrecedence": "Ordem de Prioridade dos Metadados", "HeaderMetadataOrderOfPrecedence": "Ordem de Prioridade dos Metadados",
"HeaderMetadataToEmbed": "Metadados a Serem Incluídos", "HeaderMetadataToEmbed": "Metadados a Serem Incluídos",
"HeaderNewAccount": "Nova Conta", "HeaderNewAccount": "Nova Conta",
"HeaderNewApiKey": "Nova chave de API",
"HeaderNewLibrary": "Nova Biblioteca", "HeaderNewLibrary": "Nova Biblioteca",
"HeaderNotificationCreate": "Criar Notificação",
"HeaderNotificationUpdate": "Atualizar Notificação",
"HeaderNotifications": "Notificações", "HeaderNotifications": "Notificações",
"HeaderOpenIDConnectAuthentication": "Autenticação via OpenID Connect", "HeaderOpenIDConnectAuthentication": "Autenticação via OpenID Connect",
"HeaderOpenListeningSessions": "Abrir Sessões de Escuta",
"HeaderOpenRSSFeed": "Abrir Feed RSS", "HeaderOpenRSSFeed": "Abrir Feed RSS",
"HeaderOtherFiles": "Outros Arquivos", "HeaderOtherFiles": "Outros Arquivos",
"HeaderPasswordAuthentication": "Autenticação por Senha", "HeaderPasswordAuthentication": "Autenticação por Senha",
"HeaderPermissions": "Permissões", "HeaderPermissions": "Permissões",
"HeaderPlayerQueue": "Fila do reprodutor", "HeaderPlayerQueue": "Fila do reprodutor",
"HeaderPlayerSettings": "Configurações do Reprodutor",
"HeaderPlaylist": "Lista de Reprodução", "HeaderPlaylist": "Lista de Reprodução",
"HeaderPlaylistItems": "Itens da lista de reprodução", "HeaderPlaylistItems": "Itens da lista de reprodução",
"HeaderPodcastsToAdd": "Podcasts para Adicionar", "HeaderPodcastsToAdd": "Podcasts para Adicionar",
"HeaderPresets": "Valores predefinidos",
"HeaderPreviewCover": "Visualização da Capa", "HeaderPreviewCover": "Visualização da Capa",
"HeaderRSSFeedGeneral": "Detalhes RSS", "HeaderRSSFeedGeneral": "Detalhes RSS",
"HeaderRSSFeedIsOpen": "Feed RSS está Aberto", "HeaderRSSFeedIsOpen": "Feed RSS está Aberto",
@@ -178,6 +191,7 @@
"HeaderRemoveEpisodes": "Remover {0} Episódios", "HeaderRemoveEpisodes": "Remover {0} Episódios",
"HeaderSavedMediaProgress": "Progresso da gravação das mídias", "HeaderSavedMediaProgress": "Progresso da gravação das mídias",
"HeaderSchedule": "Programação", "HeaderSchedule": "Programação",
"HeaderScheduleEpisodeDownloads": "Programar Download Automático de Episódios",
"HeaderScheduleLibraryScans": "Programar Verificação Automática da Biblioteca", "HeaderScheduleLibraryScans": "Programar Verificação Automática da Biblioteca",
"HeaderSession": "Sessão", "HeaderSession": "Sessão",
"HeaderSetBackupSchedule": "Definir Programação de Backup", "HeaderSetBackupSchedule": "Definir Programação de Backup",
@@ -186,6 +200,8 @@
"HeaderSettingsExperimental": "Funcionalidades experimentais", "HeaderSettingsExperimental": "Funcionalidades experimentais",
"HeaderSettingsGeneral": "Geral", "HeaderSettingsGeneral": "Geral",
"HeaderSettingsScanner": "Verificador", "HeaderSettingsScanner": "Verificador",
"HeaderSettingsSecurity": "Segurança",
"HeaderSettingsWebClient": "Cliente Web",
"HeaderSleepTimer": "Timer", "HeaderSleepTimer": "Timer",
"HeaderStatsLargestItems": "Maiores Itens", "HeaderStatsLargestItems": "Maiores Itens",
"HeaderStatsLongestItems": "Itens mais longos (hrs)", "HeaderStatsLongestItems": "Itens mais longos (hrs)",
@@ -196,6 +212,7 @@
"HeaderTableOfContents": "Sumário", "HeaderTableOfContents": "Sumário",
"HeaderTools": "Ferramentas", "HeaderTools": "Ferramentas",
"HeaderUpdateAccount": "Atualizar Conta", "HeaderUpdateAccount": "Atualizar Conta",
"HeaderUpdateApiKey": "Atualizar Chave de API",
"HeaderUpdateAuthor": "Atualizar Autor", "HeaderUpdateAuthor": "Atualizar Autor",
"HeaderUpdateDetails": "Atualizar Detalhes", "HeaderUpdateDetails": "Atualizar Detalhes",
"HeaderUpdateLibrary": "Atualizar Biblioteca", "HeaderUpdateLibrary": "Atualizar Biblioteca",
@@ -210,6 +227,7 @@
"LabelAccountTypeAdmin": "Administrador", "LabelAccountTypeAdmin": "Administrador",
"LabelAccountTypeGuest": "Convidado", "LabelAccountTypeGuest": "Convidado",
"LabelAccountTypeUser": "Usuário", "LabelAccountTypeUser": "Usuário",
"LabelActivities": "Atividades",
"LabelActivity": "Atividade", "LabelActivity": "Atividade",
"LabelAddToCollection": "Adicionar à Coleção", "LabelAddToCollection": "Adicionar à Coleção",
"LabelAddToCollectionBatch": "Adicionar {0} Livros à Coleção", "LabelAddToCollectionBatch": "Adicionar {0} Livros à Coleção",
@@ -219,11 +237,20 @@
"LabelAddedDate": "Adicionado {0}", "LabelAddedDate": "Adicionado {0}",
"LabelAdminUsersOnly": "Apenas usuários administradores", "LabelAdminUsersOnly": "Apenas usuários administradores",
"LabelAll": "Todos", "LabelAll": "Todos",
"LabelAllEpisodesDownloaded": "Todos os episódios baixados",
"LabelAllUsers": "Todos Usuários", "LabelAllUsers": "Todos Usuários",
"LabelAllUsersExcludingGuests": "Todos usuários exceto convidados", "LabelAllUsersExcludingGuests": "Todos usuários exceto convidados",
"LabelAllUsersIncludingGuests": "Todos usuários incluindo convidados", "LabelAllUsersIncludingGuests": "Todos usuários incluindo convidados",
"LabelAlreadyInYourLibrary": "Já na sua biblioteca", "LabelAlreadyInYourLibrary": "Já na sua biblioteca",
"LabelApiKeyCreated": "Chave de API \"{0}\" criada com sucesso.",
"LabelApiKeyCreatedDescription": "Certifique-se de copiar a chave de API agora pois não será possível vê-la novamente.",
"LabelApiKeyUser": "Agir em nome do usuário",
"LabelApiKeyUserDescription": "Esta chave de API terá as mesmas permissões que o usuário em nome de quem ela está agindo. Isso aparecerá nos logs como se o usuário estivesse fazendo a solicitação.",
"LabelApiToken": "Token de API",
"LabelAppend": "Acrescentar", "LabelAppend": "Acrescentar",
"LabelAudioBitrate": "Bitrate de áudio (por exemplo, 128k)",
"LabelAudioChannels": "Canais de áudio (1 ou 2)",
"LabelAudioCodec": "Codec de áudio",
"LabelAuthor": "Autor", "LabelAuthor": "Autor",
"LabelAuthorFirstLast": "Autor (Nome Sobrenome)", "LabelAuthorFirstLast": "Autor (Nome Sobrenome)",
"LabelAuthorLastFirst": "Autor (Sobrenome, Nome)", "LabelAuthorLastFirst": "Autor (Sobrenome, Nome)",
@@ -236,24 +263,31 @@
"LabelAutoRegister": "Registrar Automaticamente", "LabelAutoRegister": "Registrar Automaticamente",
"LabelAutoRegisterDescription": "Registra automaticamente novos usuários após login", "LabelAutoRegisterDescription": "Registra automaticamente novos usuários após login",
"LabelBackToUser": "Voltar para Usuário", "LabelBackToUser": "Voltar para Usuário",
"LabelBackupAudioFiles": "Backup dos Arquivos de Áudio",
"LabelBackupLocation": "Localização do Backup", "LabelBackupLocation": "Localização do Backup",
"LabelBackupsEnableAutomaticBackups": "Ativar backups automáticos", "LabelBackupsEnableAutomaticBackups": "Backups automáticos",
"LabelBackupsEnableAutomaticBackupsHelp": "Backups salvos em /metadata/backups", "LabelBackupsEnableAutomaticBackupsHelp": "Backups salvos em /metadata/backups",
"LabelBackupsMaxBackupSize": "Tamanho máximo do backup (em GB)", "LabelBackupsMaxBackupSize": "Tamanho máximo do backup (em GB) (0 para ilimitado)",
"LabelBackupsMaxBackupSizeHelp": "Como proteção contra uma configuração incorreta, backups darão erro se excederem o tamanho configurado.", "LabelBackupsMaxBackupSizeHelp": "Como proteção contra uma configuração incorreta, backups darão erro se excederem o tamanho configurado.",
"LabelBackupsNumberToKeep": "Número de backups para guardar", "LabelBackupsNumberToKeep": "Número de backups para guardar",
"LabelBackupsNumberToKeepHelp": "Apenas 1 backup será removido por vez, então, se já existem mais backups, você deve apagá-los manualmente.", "LabelBackupsNumberToKeepHelp": "Apenas 1 backup será removido por vez, então, se já existem mais backups, você deve apagá-los manualmente.",
"LabelBitrate": "Bitrate",
"LabelBonus": "Bônus",
"LabelBooks": "Livros", "LabelBooks": "Livros",
"LabelButtonText": "Texto do botão", "LabelButtonText": "Texto do botão",
"LabelByAuthor": "por {0}", "LabelByAuthor": "por {0}",
"LabelChangePassword": "Trocar Senha", "LabelChangePassword": "Trocar Senha",
"LabelChannels": "Canais", "LabelChannels": "Canais",
"LabelChapterCount": "{0} Capítulos",
"LabelChapterTitle": "Título do Capítulo", "LabelChapterTitle": "Título do Capítulo",
"LabelChapters": "Capítulos", "LabelChapters": "Capítulos",
"LabelChaptersFound": "capítulos encontrados", "LabelChaptersFound": "capítulos encontrados",
"LabelClickForMoreInfo": "Clique para mais informações", "LabelClickForMoreInfo": "Clique para mais informações",
"LabelClickToUseCurrentValue": "Clique para usar o valor atual",
"LabelClosePlayer": "Fechar Reprodutor", "LabelClosePlayer": "Fechar Reprodutor",
"LabelCodec": "Codec",
"LabelCollapseSeries": "Fechar Série", "LabelCollapseSeries": "Fechar Série",
"LabelCollapseSubSeries": "Fechar Sub Séries",
"LabelCollection": "Coleção", "LabelCollection": "Coleção",
"LabelCollections": "Coleções", "LabelCollections": "Coleções",
"LabelComplete": "Concluído", "LabelComplete": "Concluído",
@@ -261,17 +295,21 @@
"LabelContinueListening": "Continuar Escutando", "LabelContinueListening": "Continuar Escutando",
"LabelContinueReading": "Continuar Lendo", "LabelContinueReading": "Continuar Lendo",
"LabelContinueSeries": "Continuar Série", "LabelContinueSeries": "Continuar Série",
"LabelCorsAllowed": "Origens Permitidas para CORS",
"LabelCover": "Capa", "LabelCover": "Capa",
"LabelCoverImageURL": "URL da Imagem da Capa", "LabelCoverImageURL": "URL da Imagem da Capa",
"LabelCoverProvider": "Provedor de Capas",
"LabelCreatedAt": "Criado em", "LabelCreatedAt": "Criado em",
"LabelCronExpression": "Expressão para o Cron", "LabelCronExpression": "Expressão para o Cron",
"LabelCurrent": "Atual", "LabelCurrent": "Atual",
"LabelCurrently": "Atualmente:", "LabelCurrently": "Atualmente:",
"LabelCustomCronExpression": "Expressão personalizada para o Cron:", "LabelCustomCronExpression": "Expressão personalizada para o Cron:",
"LabelDatetime": "Data e Hora", "LabelDatetime": "Data e Hora",
"LabelDays": "Dias",
"LabelDeleteFromFileSystemCheckbox": "Apagar do sistema de arquivos (desmarcar para remover apenas da base de dados)", "LabelDeleteFromFileSystemCheckbox": "Apagar do sistema de arquivos (desmarcar para remover apenas da base de dados)",
"LabelDescription": "Descrição", "LabelDescription": "Descrição",
"LabelDeselectAll": "Desmarcar tudo", "LabelDeselectAll": "Desmarcar tudo",
"LabelDetectedPattern": "Padrão detectado:",
"LabelDevice": "Dispositivo", "LabelDevice": "Dispositivo",
"LabelDeviceInfo": "Informação do Dispositivo", "LabelDeviceInfo": "Informação do Dispositivo",
"LabelDeviceIsAvailableTo": "Dispositivo está disponível para...", "LabelDeviceIsAvailableTo": "Dispositivo está disponível para...",
@@ -281,6 +319,7 @@
"LabelDiscover": "Descobrir", "LabelDiscover": "Descobrir",
"LabelDownload": "Download", "LabelDownload": "Download",
"LabelDownloadNEpisodes": "Download de {0} Episódios", "LabelDownloadNEpisodes": "Download de {0} Episódios",
"LabelDownloadable": "Baixável",
"LabelDuration": "Duração", "LabelDuration": "Duração",
"LabelDurationComparisonExactMatch": "(exato)", "LabelDurationComparisonExactMatch": "(exato)",
"LabelDurationComparisonLonger": "({0} maior)", "LabelDurationComparisonLonger": "({0} maior)",
@@ -289,6 +328,7 @@
"LabelEbook": "Ebook", "LabelEbook": "Ebook",
"LabelEbooks": "Ebooks", "LabelEbooks": "Ebooks",
"LabelEdit": "Editar", "LabelEdit": "Editar",
"LabelEmail": "Email",
"LabelEmailSettingsFromAddress": "Remetente", "LabelEmailSettingsFromAddress": "Remetente",
"LabelEmailSettingsRejectUnauthorized": "Rejeitar certificados não autorizados", "LabelEmailSettingsRejectUnauthorized": "Rejeitar certificados não autorizados",
"LabelEmailSettingsRejectUnauthorizedHelp": "Desativar a validação de certificados SSL pode expor sua conexão a riscos de segurança, como ataques \"man-in-the-middle\". Desative essa opção apenas se entender suas consequências e se puder confiar no servidor de email ao qual você está se conectando.", "LabelEmailSettingsRejectUnauthorizedHelp": "Desativar a validação de certificados SSL pode expor sua conexão a riscos de segurança, como ataques \"man-in-the-middle\". Desative essa opção apenas se entender suas consequências e se puder confiar no servidor de email ao qual você está se conectando.",
@@ -297,39 +337,68 @@
"LabelEmailSettingsTestAddress": "Endereço de teste", "LabelEmailSettingsTestAddress": "Endereço de teste",
"LabelEmbeddedCover": "Capa Integrada", "LabelEmbeddedCover": "Capa Integrada",
"LabelEnable": "Habilitar", "LabelEnable": "Habilitar",
"LabelEncodingBackupLocation": "Um backup dos seus arquivos de áudio original será gravado em:",
"LabelEncodingChaptersNotEmbedded": "Capítulos não são integrados em audiobooks com várias trilhas.",
"LabelEncodingClearItemCache": "Certifique-se de, periodicamente, apagar os itens do cache.",
"LabelEncodingFinishedM4B": "O arquivo M4B final será colocado na sua pasta de audiobooks em:",
"LabelEncodingInfoEmbedded": "Os metadados serão integrados nas trilhas de áudio dentro da sua pasta de audiobooks.",
"LabelEncodingStartedNavigation": "Assim que a tarefa for iniciada você pode sair dessa página.",
"LabelEncodingTimeWarning": "A codificação pode durar até 30 minutos.",
"LabelEncodingWarningAdvancedSettings": "Aviso: não atualize essas configurações se não estiver familiarizado com as opções de codificação do ffmpeg.",
"LabelEncodingWatcherDisabled": "Se você desabilitou o monitoramento, será necessário fazer uma nova verificação deste audiobook depois.",
"LabelEnd": "Fim", "LabelEnd": "Fim",
"LabelEndOfChapter": "Fim do Capítulo",
"LabelEpisode": "Episódio", "LabelEpisode": "Episódio",
"LabelEpisodeNotLinkedToRssFeed": "Episódio não vinculado ao feed RSS",
"LabelEpisodeNumber": "Episódio #{0}",
"LabelEpisodeTitle": "Título do Episódio", "LabelEpisodeTitle": "Título do Episódio",
"LabelEpisodeType": "Tipo do Episódio", "LabelEpisodeType": "Tipo do Episódio",
"LabelEpisodeUrlFromRssFeed": "URL do episódio a partir do feed RSS",
"LabelEpisodes": "Episódios",
"LabelEpisodic": "Episódico",
"LabelExample": "Exemplo", "LabelExample": "Exemplo",
"LabelExpandSeries": "Expandir Série",
"LabelExpandSubSeries": "Expandir Subséries",
"LabelExpired": "Expirado",
"LabelExpiresAt": "Expira às",
"LabelExpiresInSeconds": "Expira em (segundos)",
"LabelExpiresNever": "Nunca",
"LabelExplicit": "Explícito", "LabelExplicit": "Explícito",
"LabelExplicitChecked": "Explícito (verificado)", "LabelExplicitChecked": "Explícito (verificado)",
"LabelExplicitUnchecked": "Não explícito (não verificado)", "LabelExplicitUnchecked": "Não explícito (não verificado)",
"LabelExportOPML": "Exportar OPML",
"LabelFeedURL": "URL do Feed", "LabelFeedURL": "URL do Feed",
"LabelFetchingMetadata": "Buscando Metadados", "LabelFetchingMetadata": "Buscando Metadados",
"LabelFile": "Arquivo", "LabelFile": "Arquivo",
"LabelFileBirthtime": "Criação do Arquivo", "LabelFileBirthtime": "Criação do Arquivo",
"LabelFileBornDate": "Criado {0}",
"LabelFileModified": "Modificação do Arquivo", "LabelFileModified": "Modificação do Arquivo",
"LabelFileModifiedDate": "Modificado {0}",
"LabelFilename": "Nome do Arquivo", "LabelFilename": "Nome do Arquivo",
"LabelFilterByUser": "Filtrar por Usuário", "LabelFilterByUser": "Filtrar por Usuário",
"LabelFindEpisodes": "Localizar Episódios", "LabelFindEpisodes": "Localizar Episódios",
"LabelFinished": "Concluído", "LabelFinished": "Concluído",
"LabelFinishedDate": "Concluído {0}",
"LabelFolder": "Pasta", "LabelFolder": "Pasta",
"LabelFolders": "Pastas", "LabelFolders": "Pastas",
"LabelFontBold": "Negrito", "LabelFontBold": "Negrito",
"LabelFontBoldness": "Intensidade do negrito", "LabelFontBoldness": "Intensidade do negrito",
"LabelFontFamily": "Família de fonte", "LabelFontFamily": "Família de fontes",
"LabelFontItalic": "Itálico", "LabelFontItalic": "Itálico",
"LabelFontScale": "Escala de fonte", "LabelFontScale": "Escala de fonte",
"LabelFontStrikethrough": "Tachado", "LabelFontStrikethrough": "Tachado",
"LabelFormat": "Formato", "LabelFormat": "Formato",
"LabelFull": "Cheio",
"LabelGenre": "Gênero", "LabelGenre": "Gênero",
"LabelGenres": "Gêneros", "LabelGenres": "Gêneros",
"LabelHardDeleteFile": "Apagar definitivamente", "LabelHardDeleteFile": "Apagar definitivamente",
"LabelHasEbook": "Tem ebook", "LabelHasEbook": "Tem ebook",
"LabelHasSupplementaryEbook": "Tem ebook complementar", "LabelHasSupplementaryEbook": "Tem ebook complementar",
"LabelHideSubtitles": "Esconder Legendas",
"LabelHighestPriority": "Prioridade mais alta", "LabelHighestPriority": "Prioridade mais alta",
"LabelHost": "Host",
"LabelHour": "Hora", "LabelHour": "Hora",
"LabelHours": "Horas",
"LabelIcon": "Ícone", "LabelIcon": "Ícone",
"LabelImageURLFromTheWeb": "URL da imagem na internet", "LabelImageURLFromTheWeb": "URL da imagem na internet",
"LabelInProgress": "Em Andamento", "LabelInProgress": "Em Andamento",
@@ -344,30 +413,47 @@
"LabelIntervalEvery6Hours": "A cada 6 horas", "LabelIntervalEvery6Hours": "A cada 6 horas",
"LabelIntervalEveryDay": "Todo dia", "LabelIntervalEveryDay": "Todo dia",
"LabelIntervalEveryHour": "Toda hora", "LabelIntervalEveryHour": "Toda hora",
"LabelIntervalEveryMinute": "A cada minuto",
"LabelInvert": "Inverter", "LabelInvert": "Inverter",
"LabelItem": "Item",
"LabelJumpBackwardAmount": "Tempo de retrocesso",
"LabelJumpForwardAmount": "Tempo de avanço",
"LabelLanguage": "Idioma", "LabelLanguage": "Idioma",
"LabelLanguageDefaultServer": "Idioma Padrão do Servidor", "LabelLanguageDefaultServer": "Idioma Padrão do Servidor",
"LabelLanguages": "Idiomas", "LabelLanguages": "Idiomas",
"LabelLastBookAdded": "Último Livro Acrescentado", "LabelLastBookAdded": "Último Livro Acrescentado",
"LabelLastBookUpdated": "Último Livro Atualizado", "LabelLastBookUpdated": "Último Livro Atualizado",
"LabelLastProgressDate": "Último progresso: {0}",
"LabelLastSeen": "Visto pela Última Vez", "LabelLastSeen": "Visto pela Última Vez",
"LabelLastTime": "Progresso", "LabelLastTime": "Progresso",
"LabelLastUpdate": "Última Atualização", "LabelLastUpdate": "Última Atualização",
"LabelLayout": "Layout",
"LabelLayoutSinglePage": "Uma página", "LabelLayoutSinglePage": "Uma página",
"LabelLayoutSplitPage": "Página dividida", "LabelLayoutSplitPage": "Página dividida",
"LabelLess": "Menos", "LabelLess": "Menos",
"LabelLibrariesAccessibleToUser": "Bibliotecas Acessíveis ao Usuário", "LabelLibrariesAccessibleToUser": "Bibliotecas Acessíveis ao Usuário",
"LabelLibrary": "Biblioteca", "LabelLibrary": "Biblioteca",
"LabelLibraryFilterSublistEmpty": "Sem {0}",
"LabelLibraryItem": "Item da Biblioteca", "LabelLibraryItem": "Item da Biblioteca",
"LabelLibraryName": "Nome da Biblioteca", "LabelLibraryName": "Nome da Biblioteca",
"LabelLibrarySortByProgress": "Progresso: Ultima Atualização",
"LabelLibrarySortByProgressFinished": "Progresso: Terminado",
"LabelLibrarySortByProgressStarted": "Progresso: Iniciado",
"LabelLimit": "Limite", "LabelLimit": "Limite",
"LabelLineSpacing": "Espaçamento entre linhas", "LabelLineSpacing": "Espaçamento entre linhas",
"LabelListenAgain": "Escutar novamente", "LabelListenAgain": "Escutar novamente",
"LabelLogLevelDebug": "Debug",
"LabelLogLevelInfo": "Info",
"LabelLogLevelWarn": "Atenção", "LabelLogLevelWarn": "Atenção",
"LabelLookForNewEpisodesAfterDate": "Procurar por novos Episódios após essa data", "LabelLookForNewEpisodesAfterDate": "Procurar por novos Episódios após essa data",
"LabelLowestPriority": "Prioridade mais baixa", "LabelLowestPriority": "Prioridade mais baixa",
"LabelMatchConfidence": "Confiabilidade",
"LabelMatchExistingUsersBy": "Consultar usuários existentes usando", "LabelMatchExistingUsersBy": "Consultar usuários existentes usando",
"LabelMatchExistingUsersByDescription": "Utilizado para conectar usuários já existentes. Uma vez conectados, usuários serão consultados utilizando uma identificação única do seu provedor de SSO", "LabelMatchExistingUsersByDescription": "Utilizado para conectar usuários já existentes. Uma vez conectados, usuários serão consultados utilizando uma identificação única do seu provedor de SSO",
"LabelMaxEpisodesToDownload": "Número máximo de episódios para baixar. Use 0 para download ilimitado.",
"LabelMaxEpisodesToDownloadPerCheck": "Número máximo de novos episódios para baixar por verificação",
"LabelMaxEpisodesToKeep": "Número máximo de episódios para manter",
"LabelMaxEpisodesToKeepHelp": "O valor 0 define que não há limite máximo. Após um novo episódio ser baixado automaticamente, o episódio mais antigo será excluído caso você tenha mais de X episódios. Apenas um episódio será excluído a cada novo download.",
"LabelMediaPlayer": "Reprodutor de mídia", "LabelMediaPlayer": "Reprodutor de mídia",
"LabelMediaType": "Tipo de Mídia", "LabelMediaType": "Tipo de Mídia",
"LabelMetaTag": "Etiqueta Meta", "LabelMetaTag": "Etiqueta Meta",
@@ -375,6 +461,7 @@
"LabelMetadataOrderOfPrecedenceDescription": "Fontes de metadados de alta prioridade terão preferência sobre as fontes de metadados de prioridade baixa", "LabelMetadataOrderOfPrecedenceDescription": "Fontes de metadados de alta prioridade terão preferência sobre as fontes de metadados de prioridade baixa",
"LabelMetadataProvider": "Fonte de Metadados", "LabelMetadataProvider": "Fonte de Metadados",
"LabelMinute": "Minuto", "LabelMinute": "Minuto",
"LabelMinutes": "Minutos",
"LabelMissing": "Ausente", "LabelMissing": "Ausente",
"LabelMissingEbook": "Ebook não existe", "LabelMissingEbook": "Ebook não existe",
"LabelMissingSupplementaryEbook": "Ebook complementar não existe", "LabelMissingSupplementaryEbook": "Ebook complementar não existe",
@@ -390,7 +477,9 @@
"LabelNewestAuthors": "Novos Autores", "LabelNewestAuthors": "Novos Autores",
"LabelNewestEpisodes": "Episódios mais recentes", "LabelNewestEpisodes": "Episódios mais recentes",
"LabelNextBackupDate": "Data do próximo backup", "LabelNextBackupDate": "Data do próximo backup",
"LabelNextChapters": "Próximo capítulo será:",
"LabelNextScheduledRun": "Próxima execução programada", "LabelNextScheduledRun": "Próxima execução programada",
"LabelNoApiKeys": "Sem chaves de API",
"LabelNoCustomMetadataProviders": "Não existem fontes de metadados customizados", "LabelNoCustomMetadataProviders": "Não existem fontes de metadados customizados",
"LabelNoEpisodesSelected": "Nenhum episódio selecionado", "LabelNoEpisodesSelected": "Nenhum episódio selecionado",
"LabelNotFinished": "Não concluído", "LabelNotFinished": "Não concluído",
@@ -406,17 +495,21 @@
"LabelNotificationsMaxQueueSize": "Tamanho máximo da fila de eventos de notificação", "LabelNotificationsMaxQueueSize": "Tamanho máximo da fila de eventos de notificação",
"LabelNotificationsMaxQueueSizeHelp": "Eventos estão limitados a um disparo por segundo. Eventos serão ignorados se a fila estiver no tamanho máximo. Isso evita o excesso de notificações.", "LabelNotificationsMaxQueueSizeHelp": "Eventos estão limitados a um disparo por segundo. Eventos serão ignorados se a fila estiver no tamanho máximo. Isso evita o excesso de notificações.",
"LabelNumberOfBooks": "Número de Livros", "LabelNumberOfBooks": "Número de Livros",
"LabelNumberOfChapters": "Número de capítulos:",
"LabelNumberOfEpisodes": "# de Episódios", "LabelNumberOfEpisodes": "# de Episódios",
"LabelOpenIDAdvancedPermsClaimDescription": "Nome do claim OpenID contendo as permissões avançadas para ações do usuário na aplicação para serem aplicadas aos perfis não-administradores (<b>se configurados</b>). Se o claim não estiver presente na resposta, acesso ao ABS será negado. Se apenas uma opção estiver ausente, ela será tratada como <code>false</code>. Garanta que o claim do provedor de identidade segue a estrutura esperada:", "LabelOpenIDAdvancedPermsClaimDescription": "Nome do claim OpenID contendo as permissões avançadas para ações do usuário na aplicação para serem aplicadas aos perfis não-administradores (<b>se configurados</b>). Se o claim não estiver presente na resposta, acesso ao ABS será negado. Se apenas uma opção estiver ausente, ela será tratada como <code>false</code>. Garanta que o claim do provedor de identidade segue a estrutura esperada:",
"LabelOpenIDClaims": "Deixe as opções a seguir em branco para desativar a atribuição de grupos e permissões avançadas; nesse caso, o grupo 'Usuário' será atribuído automaticamente.", "LabelOpenIDClaims": "Deixe as opções a seguir em branco para desativar a atribuição de grupos e permissões avançadas; nesse caso, o grupo 'Usuário' será atribuído automaticamente.",
"LabelOpenIDGroupClaimDescription": "Nome do claim OpenID contendo a lista de grupos do usuário, normalmente chamada de <code>groups</code>. <b>Se configurada</b>, a aplicação atribuirá automaticamente os perfis com base na participação do usuário nos grupos, contanto que os nomes desses grupos no claim, sem distinção entre maiúsculas e minúsculas, sejam 'admin', 'user' ou 'guest'. O claim deve conter uma lista e, se o usuário pertencer a múltiplos grupos, a aplicação atribuirá o perfil correspondendo ao maior nível de acesso. Se não houver correspondência a qualquer grupo, o acesso será negado.", "LabelOpenIDGroupClaimDescription": "Nome do claim OpenID contendo a lista de grupos do usuário, normalmente chamada de <code>groups</code>. <b>Se configurada</b>, a aplicação atribuirá automaticamente os perfis com base na participação do usuário nos grupos, contanto que os nomes desses grupos no claim, sem distinção entre maiúsculas e minúsculas, sejam 'admin', 'user' ou 'guest'. O claim deve conter uma lista e, se o usuário pertencer a múltiplos grupos, a aplicação atribuirá o perfil correspondendo ao maior nível de acesso. Se não houver correspondência a qualquer grupo, o acesso será negado.",
"LabelOpenRSSFeed": "Abrir Feed RSS", "LabelOpenRSSFeed": "Abrir Feed RSS",
"LabelOverwrite": "Sobrescrever", "LabelOverwrite": "Sobrescrever",
"LabelPaginationPageXOfY": "Página {0} de {1}",
"LabelPassword": "Senha", "LabelPassword": "Senha",
"LabelPath": "Caminho", "LabelPath": "Caminho",
"LabelPermanent": "Permanente",
"LabelPermissionsAccessAllLibraries": "Pode Acessar Todas Bibliotecas", "LabelPermissionsAccessAllLibraries": "Pode Acessar Todas Bibliotecas",
"LabelPermissionsAccessAllTags": "Pode Acessar Todas as Etiquetas", "LabelPermissionsAccessAllTags": "Pode Acessar Todas as Etiquetas",
"LabelPermissionsAccessExplicitContent": "Pode Acessar Conteúdos Explícitos", "LabelPermissionsAccessExplicitContent": "Pode Acessar Conteúdos Explícitos",
"LabelPermissionsCreateEreader": "Pode criar leitor de ebooks",
"LabelPermissionsDelete": "Pode Apagar", "LabelPermissionsDelete": "Pode Apagar",
"LabelPermissionsDownload": "Pode Fazer Download", "LabelPermissionsDownload": "Pode Fazer Download",
"LabelPermissionsUpdate": "Pode Atualizar", "LabelPermissionsUpdate": "Pode Atualizar",
@@ -424,25 +517,35 @@
"LabelPersonalYearReview": "Sua Retrospectiva Anual ({0})", "LabelPersonalYearReview": "Sua Retrospectiva Anual ({0})",
"LabelPhotoPathURL": "Caminho/URL para Foto", "LabelPhotoPathURL": "Caminho/URL para Foto",
"LabelPlayMethod": "Método de Reprodução", "LabelPlayMethod": "Método de Reprodução",
"LabelPlaybackRateIncrementDecrement": "Valor de incremento/decremento da taxa de reprodução",
"LabelPlayerChapterNumberMarker": "{0} de {1}",
"LabelPlaylists": "Listas de Reprodução", "LabelPlaylists": "Listas de Reprodução",
"LabelPodcast": "Podcast",
"LabelPodcastSearchRegion": "Região de busca do podcast", "LabelPodcastSearchRegion": "Região de busca do podcast",
"LabelPodcastType": "Tipo de Podcast", "LabelPodcastType": "Tipo de Podcast",
"LabelPodcasts": "Podcasts",
"LabelPort": "Porta", "LabelPort": "Porta",
"LabelPrefixesToIgnore": "Prefixos para Ignorar (sem distinção entre maiúsculas e minúsculas)", "LabelPrefixesToIgnore": "Prefixos para Ignorar (sem distinção entre maiúsculas e minúsculas)",
"LabelPreventIndexing": "Evitar que o seu feed seja indexado pelos diretórios de podcast do iTunes e Google", "LabelPreventIndexing": "Evitar que o seu feed seja indexado pelos diretórios de podcast do iTunes e Google",
"LabelPrimaryEbook": "Ebook principal", "LabelPrimaryEbook": "Ebook principal",
"LabelProgress": "Progresso", "LabelProgress": "Progresso",
"LabelProvider": "Fonte", "LabelProvider": "Fonte",
"LabelProviderAuthorizationValue": "Valor do Cabeçalho de Autorização",
"LabelPubDate": "Data de Publicação", "LabelPubDate": "Data de Publicação",
"LabelPublishYear": "Ano de Publicação", "LabelPublishYear": "Ano de Publicação",
"LabelPublishedDate": "Publicado {0}",
"LabelPublishedDecade": "Década de Publicação",
"LabelPublishedDecades": "Décadas de Publicação",
"LabelPublisher": "Editora", "LabelPublisher": "Editora",
"LabelPublishers": "Editoras", "LabelPublishers": "Editoras",
"LabelRSSFeedCustomOwnerEmail": "E-mail do dono personalizado", "LabelRSSFeedCustomOwnerEmail": "E-mail do dono personalizado",
"LabelRSSFeedCustomOwnerName": "Nome do dono personalizado", "LabelRSSFeedCustomOwnerName": "Nome do dono personalizado",
"LabelRSSFeedOpen": "Feed RSS Aberto", "LabelRSSFeedOpen": "Feed de RSS Aberto",
"LabelRSSFeedPreventIndexing": "Impedir Indexação", "LabelRSSFeedPreventIndexing": "Impedir Indexação",
"LabelRSSFeedSlug": "Slug do Feed RSS", "LabelRSSFeedSlug": "Slug do Feed RSS",
"LabelRSSFeedURL": "URL do Feed RSS", "LabelRSSFeedURL": "URL do Feed RSS",
"LabelRandomly": "Aleatoriamente",
"LabelReAddSeriesToContinueListening": "Adicionar novamente a série à \"Continuar ouvindo\"",
"LabelRead": "Lido", "LabelRead": "Lido",
"LabelReadAgain": "Ler novamente", "LabelReadAgain": "Ler novamente",
"LabelReadEbookWithoutProgress": "Ler ebook sem armazenar progresso", "LabelReadEbookWithoutProgress": "Ler ebook sem armazenar progresso",
@@ -452,29 +555,41 @@
"LabelRedo": "Refazer", "LabelRedo": "Refazer",
"LabelRegion": "Região", "LabelRegion": "Região",
"LabelReleaseDate": "Data de Lançamento", "LabelReleaseDate": "Data de Lançamento",
"LabelRemoveAllMetadataAbs": "Remover todos os arquivos metadata.abs",
"LabelRemoveAllMetadataJson": "Remover todos os arquivos metadata.json",
"LabelRemoveAudibleBranding": "Remover introdução e encerramento da Audible dos capítulos",
"LabelRemoveCover": "Remover capa", "LabelRemoveCover": "Remover capa",
"LabelRemoveMetadataFile": "Remover arquivos de metadados nas pastas da biblioteca",
"LabelRemoveMetadataFileHelp": "Remover todos os arquivos metadata.json e metadata.abs em suas {0} pastas.",
"LabelRowsPerPage": "Linhas por Página", "LabelRowsPerPage": "Linhas por Página",
"LabelSearchTerm": "Busca por Termo", "LabelSearchTerm": "Busca por Termo",
"LabelSearchTitle": "Busca por Título", "LabelSearchTitle": "Busca por Título",
"LabelSearchTitleOrASIN": "Busca por Título ou ASIN", "LabelSearchTitleOrASIN": "Busca por Título ou ASIN",
"LabelSeason": "Temporada", "LabelSeason": "Temporada",
"LabelSeasonNumber": "Temporada #{0}",
"LabelSelectAll": "Selecionar todos", "LabelSelectAll": "Selecionar todos",
"LabelSelectAllEpisodes": "Selecionar todos os Episódios", "LabelSelectAllEpisodes": "Selecionar todos os Episódios",
"LabelSelectEpisodesShowing": "Selecionar os {0} Episódios Visíveis", "LabelSelectEpisodesShowing": "Selecionar os {0} Episódios Visíveis",
"LabelSelectUser": "Selecionar usuário",
"LabelSelectUsers": "Selecionar usuários", "LabelSelectUsers": "Selecionar usuários",
"LabelSendEbookToDevice": "Enviar Ebook para...", "LabelSendEbookToDevice": "Enviar Ebook para...",
"LabelSequence": "Sequência", "LabelSequence": "Sequência",
"LabelSerial": "Serial",
"LabelSeries": "Série", "LabelSeries": "Série",
"LabelSeriesName": "Nome da Série", "LabelSeriesName": "Nome da Série",
"LabelSeriesProgress": "Progresso da Série", "LabelSeriesProgress": "Progresso da Série",
"LabelServerLogLevel": "Nível de Logs do Servidor",
"LabelServerYearReview": "Retrospectiva Anual do Servidor ({0})", "LabelServerYearReview": "Retrospectiva Anual do Servidor ({0})",
"LabelSetEbookAsPrimary": "Definir como principal", "LabelSetEbookAsPrimary": "Definir como principal",
"LabelSetEbookAsSupplementary": "Definir como complementar", "LabelSetEbookAsSupplementary": "Definir como complementar",
"LabelSettingsAllowIframe": "Permitir incorporação em iframe",
"LabelSettingsAudiobooksOnly": "Apenas Audiobooks", "LabelSettingsAudiobooksOnly": "Apenas Audiobooks",
"LabelSettingsAudiobooksOnlyHelp": "Ao ativar essa configuração os arquivos de ebooks serão ignorados a não ser que estejam dentro de uma pasta com um audiobook. Nesse caso eles serão definidos como ebooks complementares", "LabelSettingsAudiobooksOnlyHelp": "Ao ativar essa configuração os arquivos de ebooks serão ignorados a não ser que estejam dentro de uma pasta com um audiobook. Nesse caso eles serão definidos como ebooks complementares",
"LabelSettingsBookshelfViewHelp": "Aparência esqueomorfa com prateleiras de madeira", "LabelSettingsBookshelfViewHelp": "Aparência esqueomorfa com prateleiras de madeira",
"LabelSettingsChromecastSupport": "Suporte ao Chromecast", "LabelSettingsChromecastSupport": "Suporte ao Chromecast",
"LabelSettingsDateFormat": "Formato de data", "LabelSettingsDateFormat": "Formato de data",
"LabelSettingsEnableWatcher": "Monitorar automaticamente alterações nas bibliotecas",
"LabelSettingsEnableWatcherForLibrary": "Monitorar automaticamente alterações na biblioteca",
"LabelSettingsEnableWatcherHelp": "Ativa o acréscimo/atualização de itens quando forem detectadas mudanças no arquivo. *Requer reiniciar o servidor", "LabelSettingsEnableWatcherHelp": "Ativa o acréscimo/atualização de itens quando forem detectadas mudanças no arquivo. *Requer reiniciar o servidor",
"LabelSettingsEpubsAllowScriptedContent": "Permitir scripts em epubs", "LabelSettingsEpubsAllowScriptedContent": "Permitir scripts em epubs",
"LabelSettingsEpubsAllowScriptedContentHelp": "Permitir que arquivos epub executem scripts. É recomendado manter essa configuração desativada, a não ser que confie na fonte dos arquivos epub.", "LabelSettingsEpubsAllowScriptedContentHelp": "Permitir que arquivos epub executem scripts. É recomendado manter essa configuração desativada, a não ser que confie na fonte dos arquivos epub.",
@@ -486,6 +601,9 @@
"LabelSettingsHideSingleBookSeriesHelp": "Séries com um só livro serão ocultadas na página de séries e na prateleira de séries na página principal.", "LabelSettingsHideSingleBookSeriesHelp": "Séries com um só livro serão ocultadas na página de séries e na prateleira de séries na página principal.",
"LabelSettingsHomePageBookshelfView": "Usar visão estante na página principal", "LabelSettingsHomePageBookshelfView": "Usar visão estante na página principal",
"LabelSettingsLibraryBookshelfView": "Usar visão estante na página da biblioteca", "LabelSettingsLibraryBookshelfView": "Usar visão estante na página da biblioteca",
"LabelSettingsLibraryMarkAsFinishedPercentComplete": "O percentual de conclusão é maior que",
"LabelSettingsLibraryMarkAsFinishedTimeRemaining": "O tempo restante é inferior a (segundos)",
"LabelSettingsLibraryMarkAsFinishedWhen": "Marcar o item de mídia como concluído quando",
"LabelSettingsOnlyShowLaterBooksInContinueSeries": "Pular livros anteriores em Continuar Série", "LabelSettingsOnlyShowLaterBooksInContinueSeries": "Pular livros anteriores em Continuar Série",
"LabelSettingsOnlyShowLaterBooksInContinueSeriesHelp": "A prateleira Continuar Série na página principal de exibe o primeiro livro não iniciado em uma série que tem pelo menos um livro concluído e nenhum livro em andamento. Ativar essa configuração irá continuar a série a partir do livro mais recentemente concluído ao invés do primeiro livro não iniciado.", "LabelSettingsOnlyShowLaterBooksInContinueSeriesHelp": "A prateleira Continuar Série na página principal de exibe o primeiro livro não iniciado em uma série que tem pelo menos um livro concluído e nenhum livro em andamento. Ativar essa configuração irá continuar a série a partir do livro mais recentemente concluído ao invés do primeiro livro não iniciado.",
"LabelSettingsParseSubtitles": "Analisar subtítulos", "LabelSettingsParseSubtitles": "Analisar subtítulos",
@@ -503,14 +621,24 @@
"LabelSettingsStoreMetadataWithItem": "Armazenar metadados com o item", "LabelSettingsStoreMetadataWithItem": "Armazenar metadados com o item",
"LabelSettingsStoreMetadataWithItemHelp": "Por padrão os arquivos de metadados são armazenados em /metadata/items. Ao ativar essa configuração os arquivos de metadados serão armazenadas nas pastas dos itens na sua biblioteca", "LabelSettingsStoreMetadataWithItemHelp": "Por padrão os arquivos de metadados são armazenados em /metadata/items. Ao ativar essa configuração os arquivos de metadados serão armazenadas nas pastas dos itens na sua biblioteca",
"LabelSettingsTimeFormat": "Formato da Tempo", "LabelSettingsTimeFormat": "Formato da Tempo",
"LabelShare": "Compartilhar",
"LabelShareDownloadableHelp": "Permitir que os usuários com o link de compartilhamento baixem um arquivo zip do item da biblioteca.",
"LabelShareOpen": "Abrir compartilhamento",
"LabelShareURL": "Compartilhar URL",
"LabelShowAll": "Exibir Todos", "LabelShowAll": "Exibir Todos",
"LabelShowSeconds": "Exibir segundos", "LabelShowSeconds": "Exibir segundos",
"LabelShowSubtitles": "Mostrar Legendas",
"LabelSize": "Tamanho", "LabelSize": "Tamanho",
"LabelSleepTimer": "Timer", "LabelSleepTimer": "Timer",
"LabelSlug": "Slug",
"LabelSortAscending": "Crescente",
"LabelSortDescending": "Decrescente",
"LabelSortPubDate": "Ordenar por data de publicação",
"LabelStart": "Iniciar", "LabelStart": "Iniciar",
"LabelStartTime": "Horário do Início", "LabelStartTime": "Horário do Início",
"LabelStarted": "Iniciado", "LabelStarted": "Iniciado",
"LabelStartedAt": "Iniciado Em", "LabelStartedAt": "Iniciado Em",
"LabelStartedDate": "Iniciado {0}",
"LabelStatsAudioTracks": "Trilhas de Áudio", "LabelStatsAudioTracks": "Trilhas de Áudio",
"LabelStatsAuthors": "Autores", "LabelStatsAuthors": "Autores",
"LabelStatsBestDay": "Melhor Dia", "LabelStatsBestDay": "Melhor Dia",
@@ -534,12 +662,19 @@
"LabelTagsNotAccessibleToUser": "Etiquetas não Acessíveis Usuário", "LabelTagsNotAccessibleToUser": "Etiquetas não Acessíveis Usuário",
"LabelTasks": "Tarefas em Execuçào", "LabelTasks": "Tarefas em Execuçào",
"LabelTextEditorBulletedList": "Lista com marcadores", "LabelTextEditorBulletedList": "Lista com marcadores",
"LabelTextEditorLink": "Link",
"LabelTextEditorNumberedList": "Lista numerada", "LabelTextEditorNumberedList": "Lista numerada",
"LabelTextEditorUnlink": "Remover link", "LabelTextEditorUnlink": "Remover link",
"LabelTheme": "Tema", "LabelTheme": "Tema",
"LabelThemeDark": "Escuro", "LabelThemeDark": "Escuro",
"LabelThemeLight": "Claro", "LabelThemeLight": "Claro",
"LabelThemeSepia": "Sépia",
"LabelTimeBase": "Base de tempo", "LabelTimeBase": "Base de tempo",
"LabelTimeDurationXHours": "{0} horas",
"LabelTimeDurationXMinutes": "{0} minutos",
"LabelTimeDurationXSeconds": "{0} segundos",
"LabelTimeInMinutes": "Tempo em minutos",
"LabelTimeLeft": "{0} restante",
"LabelTimeListened": "Tempo de escuta", "LabelTimeListened": "Tempo de escuta",
"LabelTimeListenedToday": "Tempo de escuta hoje", "LabelTimeListenedToday": "Tempo de escuta hoje",
"LabelTimeRemaining": "{0} restantes", "LabelTimeRemaining": "{0} restantes",
@@ -547,6 +682,7 @@
"LabelTitle": "Título", "LabelTitle": "Título",
"LabelToolsEmbedMetadata": "Incluir Metadados", "LabelToolsEmbedMetadata": "Incluir Metadados",
"LabelToolsEmbedMetadataDescription": "Incluir metadados no arquivo de áudio, com imagem da capa e capítulos.", "LabelToolsEmbedMetadataDescription": "Incluir metadados no arquivo de áudio, com imagem da capa e capítulos.",
"LabelToolsM4bEncoder": "Codificador M4B",
"LabelToolsMakeM4b": "Gerar audiobook no formato M4B", "LabelToolsMakeM4b": "Gerar audiobook no formato M4B",
"LabelToolsMakeM4bDescription": "Gerar um arquivo de audiobook no formato .M4B com metadados, imagem da capa e capítulos.", "LabelToolsMakeM4bDescription": "Gerar um arquivo de audiobook no formato .M4B com metadados, imagem da capa e capítulos.",
"LabelToolsSplitM4b": "Dividir um M4B em MP3s", "LabelToolsSplitM4b": "Dividir um M4B em MP3s",
@@ -559,71 +695,105 @@
"LabelTracksMultiTrack": "Várias trilhas", "LabelTracksMultiTrack": "Várias trilhas",
"LabelTracksNone": "Sem trilha", "LabelTracksNone": "Sem trilha",
"LabelTracksSingleTrack": "Trilha única", "LabelTracksSingleTrack": "Trilha única",
"LabelTrailer": "Trailer",
"LabelType": "Tipo", "LabelType": "Tipo",
"LabelUnabridged": "Não Abreviada", "LabelUnabridged": "Não Abreviada",
"LabelUndo": "Desfazer", "LabelUndo": "Desfazer",
"LabelUnknown": "Desconhecido", "LabelUnknown": "Desconhecido",
"LabelUnknownPublishDate": "Data de publicação desconhecida",
"LabelUpdateCover": "Atualizar Capa", "LabelUpdateCover": "Atualizar Capa",
"LabelUpdateCoverHelp": "Permite sobrescrever capas existentes para os livros selecionados quando uma consulta for localizada", "LabelUpdateCoverHelp": "Permite sobrescrever capas existentes para os livros selecionados quando uma consulta for localizada",
"LabelUpdateDetails": "Atualizar Detalhes", "LabelUpdateDetails": "Atualizar Detalhes",
"LabelUpdateDetailsHelp": "Permite sobrescrever detalhes existentes para os livros selecionados quando uma consulta for localizada", "LabelUpdateDetailsHelp": "Permite sobrescrever detalhes existentes para os livros selecionados quando uma consulta for localizada",
"LabelUpdatedAt": "Atualizado em", "LabelUpdatedAt": "Atualizado em",
"LabelUploaderDragAndDrop": "Arraste e solte arquivos ou pastas", "LabelUploaderDragAndDrop": "Arraste e solte arquivos ou pastas",
"LabelUploaderDragAndDropFilesOnly": "Arraste e solte arquivos",
"LabelUploaderDropFiles": "Solte os arquivos", "LabelUploaderDropFiles": "Solte os arquivos",
"LabelUploaderItemFetchMetadataHelp": "Busca título, autor e série automaticamente", "LabelUploaderItemFetchMetadataHelp": "Busca título, autor e série automaticamente",
"LabelUseAdvancedOptions": "Usar Opções Avançadas",
"LabelUseChapterTrack": "Usar a trilha do capítulo", "LabelUseChapterTrack": "Usar a trilha do capítulo",
"LabelUseFullTrack": "Usar a trilha toda", "LabelUseFullTrack": "Usar a trilha toda",
"LabelUseZeroForUnlimited": "Use 0 para ilimitado",
"LabelUser": "Usuário", "LabelUser": "Usuário",
"LabelUsername": "Nome do usuário", "LabelUsername": "Nome do usuário",
"LabelValue": "Valor", "LabelValue": "Valor",
"LabelVersion": "Versão", "LabelVersion": "Versão",
"LabelViewBookmarks": "Ver marcadores", "LabelViewBookmarks": "Ver marcadores",
"LabelViewChapters": "Ver capítulos", "LabelViewChapters": "Ver capítulos",
"LabelViewPlayerSettings": "Ver configurações do reprodutor",
"LabelViewQueue": "Ver fila do reprodutor", "LabelViewQueue": "Ver fila do reprodutor",
"LabelVolume": "Volume",
"LabelWebRedirectURLsDescription": "Autorize esses URLs em seu provedor OAuth para permitir o redirecionamento de volta ao aplicativo web após o login:",
"LabelWebRedirectURLsSubfolder": "Subpasta de URLs de redirecionamento",
"LabelWeekdaysToRun": "Dias da semana para executar", "LabelWeekdaysToRun": "Dias da semana para executar",
"LabelYearReviewHide": "Ocultar Retrospectiva Anual", "LabelXBooks": "{0} livros",
"LabelYearReviewShow": "Exibir Retrospectiva Anual", "LabelXItems": "{0} itens",
"LabelYearReviewHide": "Ocultar Retrospectiva",
"LabelYearReviewShow": "Exibir Retrospectiva",
"LabelYourAudiobookDuration": "Duração do seu audiobook", "LabelYourAudiobookDuration": "Duração do seu audiobook",
"LabelYourBookmarks": "Seus Marcadores", "LabelYourBookmarks": "Seus Marcadores",
"LabelYourPlaylists": "Suas Listas de Reprodução", "LabelYourPlaylists": "Suas Listas de Reprodução",
"LabelYourProgress": "Seu Progresso", "LabelYourProgress": "Seu Progresso",
"MessageAddToPlayerQueue": "Adicionar à lista do reprodutor", "MessageAddToPlayerQueue": "Adicionar à lista do reprodutor",
"MessageAppriseDescription": "Para utilizar essa funcionalidade é preciso ter uma instância da <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">API do Apprise</a> em execução ou uma api que possa tratar esses mesmos chamados. <br />A URL da API do Apprise deve conter o caminho completo da URL para enviar as notificações. Ex: se a sua instância da API estiver em <code>http://192.168.1.1:8337</code> você deve utilizar <code>http://192.168.1.1:8337/notify</code>.", "MessageAppriseDescription": "Para utilizar essa funcionalidade é preciso ter uma instância da <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">API do Apprise</a> em execução ou uma API que possa tratar esses mesmos chamados. <br />A URL da API do Apprise deve conter o caminho completo da URL para enviar as notificações. Ex: se a sua instância da API estiver em <code>http://192.168.1.1:8337</code> você deve utilizar <code>http://192.168.1.1:8337/notify</code>.",
"MessageAsinCheck": "Certifique-se de estar usando o ASIN da região correta da Audible, e não da Amazon.",
"MessageAuthenticationLegacyTokenWarning": "Os tokens de API legados serão removidos no futuro. Use <a href=\"/config/api-keys\">Chaves de API</a> em vez disso.",
"MessageAuthenticationOIDCChangesRestart": "Reinicie o servidor após salvar para aplicar as alterações do OIDC.",
"MessageAuthenticationSecurityMessage": "A autenticação foi aprimorada para maior segurança. Todos os usuários precisam fazer login novamente.",
"MessageBackupsDescription": "Backups incluem usuários, progresso dos usuários, detalhes dos itens da biblioteca, configurações do servidor e imagens armazenadas em <code>/metadata/items</code> & <code>/metadata/authors</code>. Backups <strong>não</strong> incluem quaisquer arquivos armazenados nas pastas da sua biblioteca.", "MessageBackupsDescription": "Backups incluem usuários, progresso dos usuários, detalhes dos itens da biblioteca, configurações do servidor e imagens armazenadas em <code>/metadata/items</code> & <code>/metadata/authors</code>. Backups <strong>não</strong> incluem quaisquer arquivos armazenados nas pastas da sua biblioteca.",
"MessageBackupsLocationEditNote": "Observação: Atualizar o local de backup não moverá nem modificará os backups existentes",
"MessageBackupsLocationNoEditNote": "Observação: o local de backup é definido por meio de uma variável de ambiente e não pode ser alterado aqui.",
"MessageBackupsLocationPathEmpty": "O caminho do local de backup não pode ser vazio",
"MessageBatchEditPopulateMapDetailsAllHelp": "Preencha os campos habilitados com dados de todos os itens. Os campos com múltiplos valores serão mesclados",
"MessageBatchEditPopulateMapDetailsItemHelp": "Preencha os campos de detalhes do mapa habilitados com dados deste item",
"MessageBatchQuickMatchDescription": "Consulta Rápida tentará adicionar capas e metadados ausentes para os itens selecionados. Ative as opções abaixo para permitir que a Consulta Rápida sobrescreva capas e/ou metadados existentes.", "MessageBatchQuickMatchDescription": "Consulta Rápida tentará adicionar capas e metadados ausentes para os itens selecionados. Ative as opções abaixo para permitir que a Consulta Rápida sobrescreva capas e/ou metadados existentes.",
"MessageBookshelfNoCollections": "Você ainda não criou coleções", "MessageBookshelfNoCollections": "Você ainda não criou coleções",
"MessageBookshelfNoCollectionsHelp": "As coleções são públicas. Todos os usuários com acesso à biblioteca podem vê-las.",
"MessageBookshelfNoRSSFeeds": "Não existem feeds RSS abertos", "MessageBookshelfNoRSSFeeds": "Não existem feeds RSS abertos",
"MessageBookshelfNoResultsForFilter": "Sem Resultados para o filtro \"{0}: {1}\"", "MessageBookshelfNoResultsForFilter": "Sem Resultados para o filtro \"{0}: {1}\"",
"MessageBookshelfNoResultsForQuery": "Sem resultados para a consulta", "MessageBookshelfNoResultsForQuery": "Sem resultados para a consulta",
"MessageBookshelfNoSeries": "Você não tem séries", "MessageBookshelfNoSeries": "Você não tem séries",
"MessageBulkChapterPattern": "Quantos capítulos você gostaria de adicionar seguindo esse padrão de numeração?",
"MessageChapterEndIsAfter": "O final do capítulo está além do final do seu audiobook", "MessageChapterEndIsAfter": "O final do capítulo está além do final do seu audiobook",
"MessageChapterErrorFirstNotZero": "O primeiro capítulo precisa começar no 0", "MessageChapterErrorFirstNotZero": "O primeiro capítulo precisa começar no 0",
"MessageChapterErrorStartGteDuration": "Tempo de início não é válido pois precisa ser menor do que a duração do audioboook", "MessageChapterErrorStartGteDuration": "Tempo de início não é válido pois precisa ser menor do que a duração do audioboook",
"MessageChapterErrorStartLtPrev": "Tempo de início não é válido pois precisa ser igual ou maior que o tempo de início do capítulo anterior", "MessageChapterErrorStartLtPrev": "Tempo de início não é válido pois precisa ser igual ou maior que o tempo de início do capítulo anterior",
"MessageChapterStartIsAfter": "Início do capítulo está além do final do seu audiobook", "MessageChapterStartIsAfter": "Início do capítulo está além do final do seu audiobook",
"MessageChaptersNotFound": "Capítulos não encontrados",
"MessageCheckingCron": "Verificando o cron...", "MessageCheckingCron": "Verificando o cron...",
"MessageConfirmCloseFeed": "Tem certeza de que deseja fechar esse feed?", "MessageConfirmCloseFeed": "Tem certeza de que deseja fechar esse feed?",
"MessageConfirmDeleteApiKey": "Tem certeza de que deseja excluir a chave de API \"{0}\"?",
"MessageConfirmDeleteBackup": "Tem certeza de que deseja apagar o backup {0}?", "MessageConfirmDeleteBackup": "Tem certeza de que deseja apagar o backup {0}?",
"MessageConfirmDeleteDevice": "Tem certeza de que deseja excluir o leitor de ebook \"{0}\"?",
"MessageConfirmDeleteFile": "Essa ação apagará o arquivo do seu sistema de arquivos. Tem certeza?", "MessageConfirmDeleteFile": "Essa ação apagará o arquivo do seu sistema de arquivos. Tem certeza?",
"MessageConfirmDeleteLibrary": "Tem certeza de que deseja apagar a biblioteca \"{0}\" definitivamente?", "MessageConfirmDeleteLibrary": "Tem certeza de que deseja apagar a biblioteca \"{0}\" definitivamente?",
"MessageConfirmDeleteLibraryItem": "Essa ação apagará o item da biblioteca do banco de dados e do seu sistema de arquivos. Tem certeza?", "MessageConfirmDeleteLibraryItem": "Essa ação apagará o item da biblioteca do banco de dados e do seu sistema de arquivos. Tem certeza?",
"MessageConfirmDeleteLibraryItems": "Essa ação apagará {0} itens da biblioteca do banco de dados e do seu sistema de arquivos. Tem certeza?", "MessageConfirmDeleteLibraryItems": "Essa ação apagará {0} itens da biblioteca do banco de dados e do seu sistema de arquivos. Tem certeza?",
"MessageConfirmDeleteMetadataProvider": "Tem certeza de que deseja excluir o provedor de metadados personalizado \"{0}\"?",
"MessageConfirmDeleteNotification": "Tem certeza de que deseja excluir esta notificação?",
"MessageConfirmDeleteSession": "Tem certeza de que deseja apagar essa sessão?", "MessageConfirmDeleteSession": "Tem certeza de que deseja apagar essa sessão?",
"MessageConfirmEmbedMetadataInAudioFiles": "Tem certeza de que deseja incorporar metadados em arquivos de áudio {0}?",
"MessageConfirmForceReScan": "Tem certeza de que deseja forçar a nova verificação?", "MessageConfirmForceReScan": "Tem certeza de que deseja forçar a nova verificação?",
"MessageConfirmMarkAllEpisodesFinished": "Tem certeza de que deseja marcar todos os episódios como concluídos?", "MessageConfirmMarkAllEpisodesFinished": "Tem certeza de que deseja marcar todos os episódios como concluídos?",
"MessageConfirmMarkAllEpisodesNotFinished": "Tem certeza de que deseja marcar todos os episódios como não concluídos?", "MessageConfirmMarkAllEpisodesNotFinished": "Tem certeza de que deseja marcar todos os episódios como não concluídos?",
"MessageConfirmMarkItemFinished": "Tem certeza de que deseja marcar \"{0}\" como concluído?",
"MessageConfirmMarkItemNotFinished": "Tem certeza de que deseja marcar \"{0}\" como não concluído?",
"MessageConfirmMarkSeriesFinished": "Tem certeza de que deseja marcar todos os livros nesta série como concluídos?", "MessageConfirmMarkSeriesFinished": "Tem certeza de que deseja marcar todos os livros nesta série como concluídos?",
"MessageConfirmMarkSeriesNotFinished": "Tem certeza de que deseja marcar todos os livros nesta série como não concluídos?", "MessageConfirmMarkSeriesNotFinished": "Tem certeza de que deseja marcar todos os livros nesta série como não concluídos?",
"MessageConfirmNotificationTestTrigger": "Acionar esta notificação com dados de teste?",
"MessageConfirmPurgeCache": "Apagar o cache irá apagar o diretório todo localizado em <code>/metadata/cache</code>. <br /><br />Tem certeza que deseja apagar o diretório de cache?", "MessageConfirmPurgeCache": "Apagar o cache irá apagar o diretório todo localizado em <code>/metadata/cache</code>. <br /><br />Tem certeza que deseja apagar o diretório de cache?",
"MessageConfirmPurgeItemsCache": "Apagar o cache de itens irá apagar todo conteúdo da pasta <code>/metadata/cache/items</code>.<br />Tem certeza?", "MessageConfirmPurgeItemsCache": "Apagar o cache de itens irá apagar todo conteúdo da pasta <code>/metadata/cache/items</code>.<br />Tem certeza?",
"MessageConfirmQuickEmbed": "Aviso! Inclusão rápida não fará backup dos seus arquivos de áudio. Verifique se tem um backup dos seus arquivos de áudio. <br><br>Quer continuar?", "MessageConfirmQuickEmbed": "Aviso! Inclusão rápida não fará backup dos seus arquivos de áudio. Verifique se tem um backup dos seus arquivos de áudio. <br><br>Quer continuar?",
"MessageConfirmQuickMatchEpisodes": "A correspondência rápida de episódios sobrescreverá os detalhes se uma correspondência for encontrada. Somente os episódios sem correspondência serão atualizados. Tem certeza?",
"MessageConfirmReScanLibraryItems": "Tem certeza de que deseja uma nova verificação de {0} itens?", "MessageConfirmReScanLibraryItems": "Tem certeza de que deseja uma nova verificação de {0} itens?",
"MessageConfirmRemoveAllChapters": "Tem certeza de que deseja remover todos os capítulos?", "MessageConfirmRemoveAllChapters": "Tem certeza de que deseja remover todos os capítulos?",
"MessageConfirmRemoveAuthor": "Tem certeza de que deseja remover o autor \"{0}\"?", "MessageConfirmRemoveAuthor": "Tem certeza de que deseja remover o autor \"{0}\"?",
"MessageConfirmRemoveCollection": "Tem certeza de que deseja remover a coleção \"{0}\"?", "MessageConfirmRemoveCollection": "Tem certeza de que deseja remover a coleção \"{0}\"?",
"MessageConfirmRemoveEpisode": "Tem certeza de que deseja remover o episódio \"{0}\"?", "MessageConfirmRemoveEpisode": "Tem certeza de que deseja remover o episódio \"{0}\"?",
"MessageConfirmRemoveEpisodeNote": "Observação: Isso não exclui o arquivo de áudio, a menos que você ative a opção \"Excluir arquivo permanentemente\"",
"MessageConfirmRemoveEpisodes": "Tem certeza de que deseja remover os {0} episódios?", "MessageConfirmRemoveEpisodes": "Tem certeza de que deseja remover os {0} episódios?",
"MessageConfirmRemoveListeningSessions": "Tem certeza de que deseja remover as {0} sessões de escuta?", "MessageConfirmRemoveListeningSessions": "Tem certeza de que deseja remover as {0} sessões de escuta?",
"MessageConfirmRemoveMetadataFiles": "Tem certeza de que deseja remover todos os arquivos metadata.{0} nas pastas dos itens da sua biblioteca?",
"MessageConfirmRemoveNarrator": "Tem certeza de que deseja remover o narrador \"{0}\"?", "MessageConfirmRemoveNarrator": "Tem certeza de que deseja remover o narrador \"{0}\"?",
"MessageConfirmRemovePlaylist": "Tem certeza de que deseja remover a sua lista de reprodução \"{0}\"?", "MessageConfirmRemovePlaylist": "Tem certeza de que deseja remover a sua lista de reprodução \"{0}\"?",
"MessageConfirmRenameGenre": "Tem certeza de que deseja renomear o gênero \"{0}\" para \"{1}\" em todos os itens?", "MessageConfirmRenameGenre": "Tem certeza de que deseja renomear o gênero \"{0}\" para \"{1}\" em todos os itens?",
@@ -632,19 +802,27 @@
"MessageConfirmRenameTag": "Tem certeza de que deseja renomear a etiqueta \"{0}\" para \"{1}\" em todos os itens?", "MessageConfirmRenameTag": "Tem certeza de que deseja renomear a etiqueta \"{0}\" para \"{1}\" em todos os itens?",
"MessageConfirmRenameTagMergeNote": "Aviso: Esta etiqueta já existe então elas serão combinadas.", "MessageConfirmRenameTagMergeNote": "Aviso: Esta etiqueta já existe então elas serão combinadas.",
"MessageConfirmRenameTagWarning": "Atenção! Uma etiqueta com um nome semelhante já existe \"{0}\".", "MessageConfirmRenameTagWarning": "Atenção! Uma etiqueta com um nome semelhante já existe \"{0}\".",
"MessageConfirmResetProgress": "Tem certeza de que deseja redefinir seu progresso?",
"MessageConfirmSendEbookToDevice": "Tem certeza de que deseja enviar {0} ebook(s) \"{1}\" para o dispositivo \"{2}\"?", "MessageConfirmSendEbookToDevice": "Tem certeza de que deseja enviar {0} ebook(s) \"{1}\" para o dispositivo \"{2}\"?",
"MessageConfirmUnlinkOpenId": "Tem certeza de que deseja desvincular este usuário do OpenID?",
"MessageDaysListenedInTheLastYear": "{0} dias ouvidos no último ano",
"MessageDownloadingEpisode": "Realizando o download do episódio", "MessageDownloadingEpisode": "Realizando o download do episódio",
"MessageDragFilesIntoTrackOrder": "Arraste os arquivos para ordenar as trilhas corretamente", "MessageDragFilesIntoTrackOrder": "Arraste os arquivos para ordenar as trilhas corretamente",
"MessageEmbedFailed": "Falha ao incorporar!",
"MessageEmbedFinished": "Inclusão Concluída!", "MessageEmbedFinished": "Inclusão Concluída!",
"MessageEmbedQueue": "Enfileirado para incorporação de metadados ({0} na fila)",
"MessageEpisodesQueuedForDownload": "{0} Episódio(s) na fila de download", "MessageEpisodesQueuedForDownload": "{0} Episódio(s) na fila de download",
"MessageEreaderDevices": "Para garantir a entrega dos ebooks, você pode precisar adicionar o endereço de email acima como um remetente válido para cada um dos dispositivos listados abaixo.", "MessageEreaderDevices": "Para garantir a entrega dos ebooks, você pode precisar adicionar o endereço de email acima como um remetente válido para cada um dos dispositivos listados abaixo.",
"MessageFeedURLWillBe": "URL do Feed será {0}", "MessageFeedURLWillBe": "URL do Feed será {0}",
"MessageFetching": "Buscando...", "MessageFetching": "Buscando...",
"MessageForceReScanDescription": "verificará todos os arquivos, como uma verificação nova. Etiquetas ID3 de arquivos de áudio, arquivos OPF e arquivos de texto serão tratados como novos.", "MessageForceReScanDescription": "verificará todos os arquivos, como uma verificação nova. Etiquetas ID3 de arquivos de áudio, arquivos OPF e arquivos de texto serão tratados como novos.",
"MessageHeatmapListeningTimeTooltip": "<strong>{0} ouvindo</strong> em {1}",
"MessageHeatmapNoListeningSessions": "Nenhuma sessão de reprodução em {0}",
"MessageImportantNotice": "Aviso Importante!", "MessageImportantNotice": "Aviso Importante!",
"MessageInsertChapterBelow": "Inserir capítulo abaixo", "MessageInsertChapterBelow": "Inserir capítulo abaixo",
"MessageItemsSelected": "{0} Itens Selecionados", "MessageInvalidAsin": "ASIN inválido",
"MessageItemsUpdated": "{0} Itens Atualizados", "MessageItemsSelected": "{0} itens selecionados",
"MessageItemsUpdated": "{0} itens atualizados",
"MessageJoinUsOn": "Junte-se a nós", "MessageJoinUsOn": "Junte-se a nós",
"MessageLoading": "Carregando...", "MessageLoading": "Carregando...",
"MessageLoadingFolders": "Carregando pastas...", "MessageLoadingFolders": "Carregando pastas...",
@@ -665,6 +843,7 @@
"MessageNoCollections": "Sem Coleções", "MessageNoCollections": "Sem Coleções",
"MessageNoCoversFound": "Nenhuma Capa Encontrada", "MessageNoCoversFound": "Nenhuma Capa Encontrada",
"MessageNoDescription": "Sem Descrições", "MessageNoDescription": "Sem Descrições",
"MessageNoDevices": "Nenhum dispositivo",
"MessageNoDownloadsInProgress": "Não existem downloads em andamento", "MessageNoDownloadsInProgress": "Não existem downloads em andamento",
"MessageNoDownloadsQueued": "Não existem itens na fila de download", "MessageNoDownloadsQueued": "Não existem itens na fila de download",
"MessageNoEpisodeMatchesFound": "Não existem episódios correspondentes", "MessageNoEpisodeMatchesFound": "Não existem episódios correspondentes",
@@ -678,6 +857,7 @@
"MessageNoLogs": "Sem Logs", "MessageNoLogs": "Sem Logs",
"MessageNoMediaProgress": "Sem Progresso de Mídia", "MessageNoMediaProgress": "Sem Progresso de Mídia",
"MessageNoNotifications": "Sem Notificações", "MessageNoNotifications": "Sem Notificações",
"MessageNoPodcastFeed": "Podcast inválido: Sem feed",
"MessageNoPodcastsFound": "Nenhum podcast encontrado", "MessageNoPodcastsFound": "Nenhum podcast encontrado",
"MessageNoResults": "Sem resultados", "MessageNoResults": "Sem resultados",
"MessageNoSearchResultsFor": "Sem resultados para \"{0}\"", "MessageNoSearchResultsFor": "Sem resultados para \"{0}\"",
@@ -686,12 +866,19 @@
"MessageNoTasksRunning": "Sem Tarefas em Execução", "MessageNoTasksRunning": "Sem Tarefas em Execução",
"MessageNoUpdatesWereNecessary": "Nenhuma atualização é necessária", "MessageNoUpdatesWereNecessary": "Nenhuma atualização é necessária",
"MessageNoUserPlaylists": "Você não tem listas de reprodução", "MessageNoUserPlaylists": "Você não tem listas de reprodução",
"MessageNoUserPlaylistsHelp": "As listas de reprodução são privadas. Somente o usuário que as criou pode vê-las.",
"MessageNotYetImplemented": "Ainda não implementado", "MessageNotYetImplemented": "Ainda não implementado",
"MessageOpmlPreviewNote": "Nota: esta é uma visualização do arquivo OPML processado. O título verdadeiro do podcast será recuperado do feed RSS.",
"MessageOr": "ou", "MessageOr": "ou",
"MessagePauseChapter": "Pausar reprodução do capítulo", "MessagePauseChapter": "Pausar reprodução do capítulo",
"MessagePlayChapter": "Escutar o início do capítulo", "MessagePlayChapter": "Escutar o início do capítulo",
"MessagePlaylistCreateFromCollection": "Criar uma lista de reprodução a partir da coleção", "MessagePlaylistCreateFromCollection": "Criar uma lista de reprodução a partir da coleção",
"MessagePleaseWait": "Por favor, aguarde...",
"MessagePodcastHasNoRSSFeedForMatching": "Podcast não tem uma URL do feed RSS para ser usada na consulta", "MessagePodcastHasNoRSSFeedForMatching": "Podcast não tem uma URL do feed RSS para ser usada na consulta",
"MessagePodcastSearchField": "Digite um termo para a busca ou a URL de um feed RSS",
"MessageQuickEmbedInProgress": "Incorporação rápida em andamento",
"MessageQuickEmbedQueue": "Enfileirado para incorporação rápida ({0} na fila)",
"MessageQuickMatchAllEpisodes": "Correspondência Rápida de Todos os Episódios",
"MessageQuickMatchDescription": "Preenche detalhes vazios do item & capa com o primeiro resultado de '{0}'. Não sobrescreve detalhes a não ser que a configuração 'Preferir metadados consultados' do servidor esteja ativa.", "MessageQuickMatchDescription": "Preenche detalhes vazios do item & capa com o primeiro resultado de '{0}'. Não sobrescreve detalhes a não ser que a configuração 'Preferir metadados consultados' do servidor esteja ativa.",
"MessageRemoveChapter": "Remover capítulo", "MessageRemoveChapter": "Remover capítulo",
"MessageRemoveEpisodes": "Remover {0} episódio(s)", "MessageRemoveEpisodes": "Remover {0} episódio(s)",
@@ -701,11 +888,52 @@
"MessageResetChaptersConfirm": "Tem certeza de que deseja resetar os capítulos e desfazer as alterações realizadas?", "MessageResetChaptersConfirm": "Tem certeza de que deseja resetar os capítulos e desfazer as alterações realizadas?",
"MessageRestoreBackupConfirm": "Tem certeza de que deseja restaurar o backup criado em", "MessageRestoreBackupConfirm": "Tem certeza de que deseja restaurar o backup criado em",
"MessageRestoreBackupWarning": "Restaurar um backup sobrescreverá totalmente o banco de dados localizado em /config e as imagens de capa em /metadata/items & /metadata/authors.<br /><br />Backups não alteram quaisquer arquivos nas pastas da sua biblioteca. Se a configuração do servidor de armazenar a arte da capa e os metadados nas pastas da sua biblioteca estiver ativa, esses itens não estão no backup e não serão sobrescritos.<br /><br />Todos os clientes usando o seu servidor serão atualizados automaticamente.", "MessageRestoreBackupWarning": "Restaurar um backup sobrescreverá totalmente o banco de dados localizado em /config e as imagens de capa em /metadata/items & /metadata/authors.<br /><br />Backups não alteram quaisquer arquivos nas pastas da sua biblioteca. Se a configuração do servidor de armazenar a arte da capa e os metadados nas pastas da sua biblioteca estiver ativa, esses itens não estão no backup e não serão sobrescritos.<br /><br />Todos os clientes usando o seu servidor serão atualizados automaticamente.",
"MessageScheduleLibraryScanNote": "Para a maioria dos usuários, é recomendável deixar este recurso desativado e manter a configuração \"Monitorar automaticamente alterações na biblioteca\" ativada. Dessa forma alterações nas pastas da sua biblioteca serão automáticamente detectadas. Habilite essa opção se \"Monitorar automaticamente alterações na biblioteca\" não fucnionara para o seu sistema de arquivos (Como NFS).",
"MessageScheduleRunEveryWeekdayAtTime": "Executar a cada {0} às {1}",
"MessageSearchResultsFor": "Resultado da busca por", "MessageSearchResultsFor": "Resultado da busca por",
"MessageSelected": "{0} selecionado(s)", "MessageSelected": "{0} selecionado(s)",
"MessageSeriesSequenceCannotContainSpaces": "O identificador da série não pode conter espaços",
"MessageServerCouldNotBeReached": "Não foi possível estabelecer conexão com o servidor", "MessageServerCouldNotBeReached": "Não foi possível estabelecer conexão com o servidor",
"MessageSetChaptersFromTracksDescription": "Definir os capítulos usando cada arquivo de áudio como um capítulo e o nome do arquivo como o título do capítulo", "MessageSetChaptersFromTracksDescription": "Definir os capítulos usando cada arquivo de áudio como um capítulo e o nome do arquivo como o título do capítulo",
"MessageShareExpirationWillBe": "Válido até <strong>{0}</strong>",
"MessageShareExpiresIn": "Expira em {0}",
"MessageShareURLWillBe": "A URL de compartilhamento será <strong>{0}</strong>",
"MessageStartPlaybackAtTime": "Iniciar a reprodução de \"{0}\" em {1}?", "MessageStartPlaybackAtTime": "Iniciar a reprodução de \"{0}\" em {1}?",
"MessageTaskAudioFileNotWritable": "O arquivo de áudio \"{0}\" não pode ser gravado",
"MessageTaskCanceledByUser": "Tarefa cancelada pelo usuário",
"MessageTaskDownloadingEpisodeDescription": "Baixando episódio \"{0}\"",
"MessageTaskEmbeddingMetadata": "Incorporação de metadados",
"MessageTaskEmbeddingMetadataDescription": "Incorporando metadados no audiolivro \"{0}\"",
"MessageTaskEncodingM4b": "Codificação M4B",
"MessageTaskEncodingM4bDescription": "Codificação do audiolivro \"{0}\" em um único arquivo m4b",
"MessageTaskFailed": "Falhou",
"MessageTaskFailedToBackupAudioFile": "Falha ao fazer backup do arquivo de áudio \"{0}\"",
"MessageTaskFailedToCreateCacheDirectory": "Falha ao criar o diretório de cache",
"MessageTaskFailedToEmbedMetadataInFile": "Falha ao incorporar metadados no arquivo \"{0}\"",
"MessageTaskFailedToMergeAudioFiles": "Falha ao mesclar arquivos de áudio",
"MessageTaskFailedToMoveM4bFile": "Falha ao mover o arquivo m4b",
"MessageTaskFailedToWriteMetadataFile": "Falha ao gravar o arquivo de metadados",
"MessageTaskMatchingBooksInLibrary": "Livros correspondentes na biblioteca \"{0}\"",
"MessageTaskNoFilesToScan": "Não há arquivos para verificar",
"MessageTaskOpmlImport": "Importação OPML",
"MessageTaskOpmlImportDescription": "Criando podcasts a partir de feeds RSS {0}",
"MessageTaskOpmlImportFeed": "Feed de importação OPML",
"MessageTaskOpmlImportFeedDescription": "Importando o feed RSS \"{0}\"",
"MessageTaskOpmlImportFeedFailed": "Não foi possível obter o feed do podcast",
"MessageTaskOpmlImportFeedPodcastDescription": "Criando podcast \"{0}\"",
"MessageTaskOpmlImportFeedPodcastExists": "O podcast já existe no caminho",
"MessageTaskOpmlImportFeedPodcastFailed": "Falha ao criar o podcast",
"MessageTaskOpmlImportFinished": "Adicionados {0} podcasts",
"MessageTaskOpmlParseFailed": "Falha ao analisar o arquivo OPML",
"MessageTaskOpmlParseFastFail": "Arquivo OPML inválido. Tag <opml> não encontrada OU tag <outline> não encontrada",
"MessageTaskOpmlParseNoneFound": "Nenhum feed encontrado no arquivo OPML",
"MessageTaskScanItemsAdded": "{0} adicionado",
"MessageTaskScanItemsMissing": "{0} não encontrado",
"MessageTaskScanItemsUpdated": "{0} atualizado",
"MessageTaskScanNoChangesNeeded": "Nenhuma alteração necessária",
"MessageTaskScanningFileChanges": "Verificando alterações de arquivo em \"{0}\"",
"MessageTaskScanningLibrary": "Analisando a biblioteca \"{0}\"",
"MessageTaskTargetDirectoryNotWritable": "Diretório de destino sem permissão de escrita",
"MessageThinking": "Pensando...", "MessageThinking": "Pensando...",
"MessageUploaderItemFailed": "Falha no upload", "MessageUploaderItemFailed": "Falha no upload",
"MessageUploaderItemSuccess": "Upload realizado!", "MessageUploaderItemSuccess": "Upload realizado!",
@@ -723,43 +951,117 @@
"NoteUploaderFoldersWithMediaFiles": "Pastas com arquivos de mídia serão tratadas como itens de biblioteca distintos.", "NoteUploaderFoldersWithMediaFiles": "Pastas com arquivos de mídia serão tratadas como itens de biblioteca distintos.",
"NoteUploaderOnlyAudioFiles": "Ao subir apenas arquivos de áudio, cada arquivo será tratado como um audiobook distinto.", "NoteUploaderOnlyAudioFiles": "Ao subir apenas arquivos de áudio, cada arquivo será tratado como um audiobook distinto.",
"NoteUploaderUnsupportedFiles": "Arquivos não suportados serão ignorados. Ao escolher ou arrastar uma pasta, outros arquivos que não estão em uma pasta dentro do item serão ignorados.", "NoteUploaderUnsupportedFiles": "Arquivos não suportados serão ignorados. Ao escolher ou arrastar uma pasta, outros arquivos que não estão em uma pasta dentro do item serão ignorados.",
"NotificationOnBackupCompletedDescription": "Acionado quando um backup é concluído",
"NotificationOnBackupFailedDescription": "Acionado quando um backup falha",
"NotificationOnEpisodeDownloadedDescription": "Acionado quando um episódio de podcast é baixado automaticamente",
"NotificationOnRSSFeedDisabledDescription": "Acionado quando os downloads automáticos de episódios são desativados devido a muitas tentativas falhas",
"NotificationOnRSSFeedFailedDescription": "Acionado quando a solicitação do feed RSS falha durante o download automático de um episódio",
"NotificationOnTestDescription": "Evento para testar o sistema de notificação",
"PlaceholderBulkChapterInput": "Digite o título de um capítulo ou use uma numeração (por exemplo, 'Episódio 1', 'Capítulo 10', '1.')",
"PlaceholderNewCollection": "Novo nome da coleção", "PlaceholderNewCollection": "Novo nome da coleção",
"PlaceholderNewFolderPath": "Novo caminho para a pasta", "PlaceholderNewFolderPath": "Novo caminho para a pasta",
"PlaceholderNewPlaylist": "Novo nome da lista de reprodução", "PlaceholderNewPlaylist": "Novo nome da lista de reprodução",
"PlaceholderSearch": "Buscar..", "PlaceholderSearch": "Buscar..",
"PlaceholderSearchEpisode": "Buscar Episódio..", "PlaceholderSearchEpisode": "Buscar Episódio..",
"StatsAuthorsAdded": "autores adicionados",
"StatsBooksAdded": "livros adicionados",
"StatsBooksAdditional": "Algumas adições incluem…",
"StatsBooksFinished": "livros concluídos",
"StatsBooksFinishedThisYear": "Alguns livros foram finalizados este ano…",
"StatsBooksListenedTo": "livros ouvidos",
"StatsCollectionGrewTo": "Sua coleção de livros cresceu para…",
"StatsSessions": "sessões",
"StatsSpentListening": "tempo gasto ouvindo",
"StatsTopAuthor": "TOP AUTOR",
"StatsTopAuthors": "TOP AUTORES",
"StatsTopGenre": "PRINCIPAL GÊNERO",
"StatsTopGenres": "PRINCIPAL GÊNEROS",
"StatsTopMonth": "PRINCIPAL MÊS",
"StatsTopNarrator": "PRINCIPAL NARRADOR",
"StatsTopNarrators": "PRINCIPAIS NARRADORES",
"StatsTotalDuration": "Com duração total de…",
"StatsYearInReview": "RESUMO DO ANO",
"ToastAccountUpdateSuccess": "Conta atualizada", "ToastAccountUpdateSuccess": "Conta atualizada",
"ToastAppriseUrlRequired": "É preciso digitar uma URL Apprise",
"ToastAsinRequired": "É necessário o ASIN",
"ToastAuthorImageRemoveSuccess": "Imagem do autor removida", "ToastAuthorImageRemoveSuccess": "Imagem do autor removida",
"ToastAuthorNotFound": "Autor \"{0}\" não encontrado",
"ToastAuthorRemoveSuccess": "Autor removido",
"ToastAuthorSearchNotFound": "Autor não encontrado",
"ToastAuthorUpdateMerged": "Autor combinado", "ToastAuthorUpdateMerged": "Autor combinado",
"ToastAuthorUpdateSuccess": "Autor atualizado", "ToastAuthorUpdateSuccess": "Autor atualizado",
"ToastAuthorUpdateSuccessNoImageFound": "Autor atualizado (nenhuma imagem encontrada)", "ToastAuthorUpdateSuccessNoImageFound": "Autor atualizado (nenhuma imagem encontrada)",
"ToastBackupAppliedSuccess": "Backup aplicado",
"ToastBackupCreateFailed": "Falha ao criar backup", "ToastBackupCreateFailed": "Falha ao criar backup",
"ToastBackupCreateSuccess": "Backup criado", "ToastBackupCreateSuccess": "Backup criado",
"ToastBackupDeleteFailed": "Falha ao apagar backup", "ToastBackupDeleteFailed": "Falha ao apagar backup",
"ToastBackupDeleteSuccess": "Backup apagado", "ToastBackupDeleteSuccess": "Backup apagado",
"ToastBackupInvalidMaxKeep": "Número inválido de backups a serem mantidos",
"ToastBackupInvalidMaxSize": "Tamanho máximo de backup inválido",
"ToastBackupRestoreFailed": "Falha ao restaurar backup", "ToastBackupRestoreFailed": "Falha ao restaurar backup",
"ToastBackupUploadFailed": "Falha no upload do backup", "ToastBackupUploadFailed": "Falha no upload do backup",
"ToastBackupUploadSuccess": "Upload do backup realizado", "ToastBackupUploadSuccess": "Upload do backup realizado",
"ToastBatchApplyDetailsToItemsSuccess": "Detalhes aplicados aos itens",
"ToastBatchDeleteFailed": "A exclusão em lote falhou",
"ToastBatchDeleteSuccess": "Exclusão em lote concluída com sucesso",
"ToastBatchQuickMatchFailed": "A correspondência rápida em lote falhou!",
"ToastBatchQuickMatchStarted": "Correspondência rápida em lote de {0} livros iniciada!",
"ToastBatchUpdateFailed": "Falha na atualização em lote", "ToastBatchUpdateFailed": "Falha na atualização em lote",
"ToastBatchUpdateSuccess": "Atualização em lote realizada", "ToastBatchUpdateSuccess": "Atualização em lote realizada",
"ToastBookmarkCreateFailed": "Falha ao criar marcador", "ToastBookmarkCreateFailed": "Falha ao criar marcador",
"ToastBookmarkCreateSuccess": "Marcador adicionado", "ToastBookmarkCreateSuccess": "Marcador adicionado",
"ToastBookmarkRemoveSuccess": "Marcador removido", "ToastBookmarkRemoveSuccess": "Marcador removido",
"ToastBulkChapterInvalidCount": "Digite um número entre 1 e 150",
"ToastCachePurgeFailed": "Falha ao apagar o cache", "ToastCachePurgeFailed": "Falha ao apagar o cache",
"ToastCachePurgeSuccess": "Cache apagado com sucesso", "ToastCachePurgeSuccess": "Cache apagado com sucesso",
"ToastChapterLocked": "Capítulo bloqueado.",
"ToastChapterStartTimeAdjusted": "O horário de início do capítulo foi ajustado em {0} segundos",
"ToastChaptersAllLocked": "Todos os capítulos estão bloqueados. Desbloqueie alguns capítulos para alterar seus horários.",
"ToastChaptersHaveErrors": "Capítulos com erro", "ToastChaptersHaveErrors": "Capítulos com erro",
"ToastChaptersInvalidShiftAmountLast": "Quantidade de deslocamento inválida. O horário de início do último capítulo ultrapassaria a duração deste audiolivro.",
"ToastChaptersInvalidShiftAmountStart": "Valor de deslocamento inválido. O primeiro capítulo teria duração zero ou negativa e seria sobrescrito pelo segundo capítulo. Aumente a duração inicial do segundo capítulo.",
"ToastChaptersMustHaveTitles": "Capítulos precisam ter títulos", "ToastChaptersMustHaveTitles": "Capítulos precisam ter títulos",
"ToastChaptersRemoved": "Capítulos removidos",
"ToastChaptersUpdated": "Capítulos atualizados",
"ToastCollectionItemsAddFailed": "Falha ao adicionar itens à coleção",
"ToastCollectionRemoveSuccess": "Coleção removida", "ToastCollectionRemoveSuccess": "Coleção removida",
"ToastCollectionUpdateSuccess": "Coleção atualizada", "ToastCollectionUpdateSuccess": "Coleção atualizada",
"ToastConnectionNotAvailable": "Conexão indisponível. Tente novamente mais tarde",
"ToastCoverSearchFailed": "A busca pela capa falhou",
"ToastCoverUpdateFailed": "Falha na atualização da capa",
"ToastDateTimeInvalidOrIncomplete": "A data e a hora são inválidas ou estão incompletas",
"ToastDeleteFileFailed": "Falha ao apagar arquivo", "ToastDeleteFileFailed": "Falha ao apagar arquivo",
"ToastDeleteFileSuccess": "Arquivo apagado", "ToastDeleteFileSuccess": "Arquivo apagado",
"ToastDeviceAddFailed": "Falha ao adicionar dispositivo",
"ToastDeviceNameAlreadyExists": "Já existe um leitor de ebook com esse nome",
"ToastDeviceTestEmailFailed": "Falha ao enviar o e-mail de teste",
"ToastDeviceTestEmailSuccess": "E-mail de teste enviado",
"ToastEmailSettingsUpdateSuccess": "Configurações de e-mail atualizadas",
"ToastEncodeCancelFailed": "Falha ao cancelar a codificação",
"ToastEncodeCancelSucces": "Codificação cancelada",
"ToastEpisodeDownloadQueueClearFailed": "Falha ao limpar a fila",
"ToastEpisodeDownloadQueueClearSuccess": "Fila de downloads de episódios limpa",
"ToastEpisodeUpdateSuccess": "{0} episódios atualizados",
"ToastErrorCannotShare": "Não é possível compartilhar nativamente neste dispositivo",
"ToastFailedToCreate": "Falha ao criar",
"ToastFailedToDelete": "Falha ao excluir",
"ToastFailedToLoadData": "Falha ao carregar dados", "ToastFailedToLoadData": "Falha ao carregar dados",
"ToastFailedToMatch": "Não foi possível encontrar correspondência",
"ToastFailedToShare": "Não foi possível compartilhar",
"ToastFailedToUpdate": "Falha ao atualizar",
"ToastInvalidImageUrl": "URL de imagem inválida",
"ToastInvalidMaxEpisodesToDownload": "Número máximo de episódios para baixar inválido",
"ToastInvalidUrl": "URL inválida",
"ToastInvalidUrls": "Um ou mais URLs são inválidos",
"ToastItemCoverUpdateSuccess": "Capa do item atualizada", "ToastItemCoverUpdateSuccess": "Capa do item atualizada",
"ToastItemDeletedFailed": "Falha ao excluir o item",
"ToastItemDeletedSuccess": "Item excluído",
"ToastItemDetailsUpdateSuccess": "Detalhes do item atualizados", "ToastItemDetailsUpdateSuccess": "Detalhes do item atualizados",
"ToastItemMarkedAsFinishedFailed": "Falha ao marcar como Concluído", "ToastItemMarkedAsFinishedFailed": "Falha ao marcar como Concluído",
"ToastItemMarkedAsFinishedSuccess": "Item marcado como Concluído", "ToastItemMarkedAsFinishedSuccess": "Item marcado como Concluído",
"ToastItemMarkedAsNotFinishedFailed": "Falha ao marcar como Não Concluído", "ToastItemMarkedAsNotFinishedFailed": "Falha ao marcar como Não Concluído",
"ToastItemMarkedAsNotFinishedSuccess": "Item marcado como Não Concluído", "ToastItemMarkedAsNotFinishedSuccess": "Item marcado como Não Concluído",
"ToastItemUpdateSuccess": "Item atualizado",
"ToastLibraryCreateFailed": "Falha ao criar biblioteca", "ToastLibraryCreateFailed": "Falha ao criar biblioteca",
"ToastLibraryCreateSuccess": "Biblioteca \"{0}\" criada", "ToastLibraryCreateSuccess": "Biblioteca \"{0}\" criada",
"ToastLibraryDeleteFailed": "Falha ao apagar biblioteca", "ToastLibraryDeleteFailed": "Falha ao apagar biblioteca",
@@ -767,28 +1069,97 @@
"ToastLibraryScanFailedToStart": "Falha ao iniciar verificação", "ToastLibraryScanFailedToStart": "Falha ao iniciar verificação",
"ToastLibraryScanStarted": "Verificação da biblioteca iniciada", "ToastLibraryScanStarted": "Verificação da biblioteca iniciada",
"ToastLibraryUpdateSuccess": "Biblioteca \"{0}\" atualizada", "ToastLibraryUpdateSuccess": "Biblioteca \"{0}\" atualizada",
"ToastMatchAllAuthorsFailed": "Não foi possível encontrar correspondência para todos os autores",
"ToastMetadataFilesRemovedError": "Erro ao remover arquivos de metadados.{0}",
"ToastMetadataFilesRemovedNoneFound": "Nenhum arquivo metadados.{0} encontrado na biblioteca",
"ToastMetadataFilesRemovedNoneRemoved": "Nenhum arquivo metadados.{0} removido",
"ToastMetadataFilesRemovedSuccess": "{0} arquivos metadados.{1} removidos",
"ToastMustHaveAtLeastOnePath": "Deve ter pelo menos um caminho",
"ToastNameEmailRequired": "Nome e e-mail são obrigatórios",
"ToastNameRequired": "O nome é obrigatório",
"ToastNewApiKeyUserError": "É necessário selecionar um usuário",
"ToastNewEpisodesFound": "{0} novos episódios encontrados",
"ToastNewUserCreatedFailed": "Falha ao criar a conta: \"{0}\"",
"ToastNewUserCreatedSuccess": "Nova conta criada",
"ToastNewUserLibraryError": "É necessário selecionar pelo menos uma biblioteca",
"ToastNewUserPasswordError": "É obrigatória a criação de uma senha; somente o usuário root pode ter uma senha vazia",
"ToastNewUserTagError": "É necessário selecionar pelo menos uma etiqueta",
"ToastNewUserUsernameError": "Digite um nome de usuário",
"ToastNoNewEpisodesFound": "Nenhum episódio novo encontrado",
"ToastNoRSSFeed": "O Podcast não possui um feed RSS",
"ToastNoUpdatesNecessary": "Nenhuma atualização necessária",
"ToastNotificationCreateFailed": "Falha ao criar notificação",
"ToastNotificationDeleteFailed": "Falha ao excluir a notificação",
"ToastNotificationFailedMaximum": "O número máximo de tentativas falhas deve ser >= 0",
"ToastNotificationQueueMaximum": "A fila máxima de notificações deve ser >= 0",
"ToastNotificationSettingsUpdateSuccess": "Configurações de notificação atualizadas",
"ToastNotificationTestTriggerFailed": "Falha ao acionar a notificação de teste",
"ToastNotificationTestTriggerSuccess": "Notificação de teste acionada",
"ToastNotificationUpdateSuccess": "Notificação atualizada",
"ToastPlaylistCreateFailed": "Falha ao criar lista de reprodução", "ToastPlaylistCreateFailed": "Falha ao criar lista de reprodução",
"ToastPlaylistCreateSuccess": "Lista de reprodução criada", "ToastPlaylistCreateSuccess": "Lista de reprodução criada",
"ToastPlaylistRemoveSuccess": "Lista de reprodução removida", "ToastPlaylistRemoveSuccess": "Lista de reprodução removida",
"ToastPlaylistUpdateSuccess": "Lista de reprodução atualizada", "ToastPlaylistUpdateSuccess": "Lista de reprodução atualizada",
"ToastPodcastCreateFailed": "Falha ao criar podcast", "ToastPodcastCreateFailed": "Falha ao criar podcast",
"ToastPodcastCreateSuccess": "Podcast criado", "ToastPodcastCreateSuccess": "Podcast criado",
"ToastPodcastEpisodeUpdated": "Episódio atualizado",
"ToastPodcastGetFeedFailed": "Não foi possível obter o feed do podcast",
"ToastPodcastNoEpisodesInFeed": "Nenhum episódio encontrado no feed RSS",
"ToastPodcastNoRssFeed": "O podcast não possui um feed RSS",
"ToastProgressIsNotBeingSynced": "O progresso não está sendo sincronizado, reinicie a reprodução",
"ToastProviderCreatedFailed": "Falha ao adicionar o provedor",
"ToastProviderCreatedSuccess": "Novo provedor adicionado",
"ToastProviderNameAndUrlRequired": "Nome e URL obrigatórios",
"ToastProviderRemoveSuccess": "Fornecedor removido",
"ToastRSSFeedCloseFailed": "Falha ao fechar feed RSS", "ToastRSSFeedCloseFailed": "Falha ao fechar feed RSS",
"ToastRSSFeedCloseSuccess": "Feed RSS fechado", "ToastRSSFeedCloseSuccess": "Feed RSS fechado",
"ToastRemoveFailed": "Falha ao remover",
"ToastRemoveItemFromCollectionFailed": "Falha ao remover item da coleção", "ToastRemoveItemFromCollectionFailed": "Falha ao remover item da coleção",
"ToastRemoveItemFromCollectionSuccess": "Item removido da coleção", "ToastRemoveItemFromCollectionSuccess": "Item removido da coleção",
"ToastRemoveItemsWithIssuesFailed": "Falha ao remover itens da biblioteca com problemas",
"ToastRemoveItemsWithIssuesSuccess": "Itens da biblioteca com problemas foram removidos",
"ToastRenameFailed": "Falha ao renomear",
"ToastRescanFailed": "Falha na nova verificação para {0}",
"ToastRescanRemoved": "O item foi removido após a digitalização ser concluída",
"ToastRescanUpToDate": "A nova verificação completou o item, que estava atualizado",
"ToastRescanUpdated": "O item foi atualizado após a digitalização",
"ToastScanFailed": "Falha ao digitalizar o item da biblioteca",
"ToastSelectAtLeastOneUser": "Selecione pelo menos um usuário",
"ToastSendEbookToDeviceFailed": "Falha ao enviar ebook para dispositivo", "ToastSendEbookToDeviceFailed": "Falha ao enviar ebook para dispositivo",
"ToastSendEbookToDeviceSuccess": "Ebook enviado para o dispositivo \"{0}\"", "ToastSendEbookToDeviceSuccess": "Ebook enviado para o dispositivo \"{0}\"",
"ToastSeriesSubmitFailedSameName": "Não é possível adicionar duas séries com o mesmo nome",
"ToastSeriesUpdateFailed": "Falha ao atualizar série", "ToastSeriesUpdateFailed": "Falha ao atualizar série",
"ToastSeriesUpdateSuccess": "Série atualizada", "ToastSeriesUpdateSuccess": "Série atualizada",
"ToastServerSettingsUpdateSuccess": "Configurações do servidor atualizadas", "ToastServerSettingsUpdateSuccess": "Configurações do servidor atualizadas",
"ToastSessionCloseFailed": "Falha ao encerrar a sessão",
"ToastSessionDeleteFailed": "Falha ao apagar sessão", "ToastSessionDeleteFailed": "Falha ao apagar sessão",
"ToastSessionDeleteSuccess": "Sessão apagada", "ToastSessionDeleteSuccess": "Sessão apagada",
"ToastSleepTimerDone": "Temporizador de sono concluído... zZzzZz",
"ToastSlugMustChange": "O slug possui caracteres inválidos",
"ToastSlugRequired": "Slug é necessário",
"ToastSocketConnected": "Socket conectado", "ToastSocketConnected": "Socket conectado",
"ToastSocketDisconnected": "Socket desconectado", "ToastSocketDisconnected": "Socket desconectado",
"ToastSocketFailedToConnect": "Falha na conexão do socket", "ToastSocketFailedToConnect": "Falha na conexão do socket",
"ToastSortingPrefixesEmptyError": "É preciso ter pelo menos um prefixo de ordenação", "ToastSortingPrefixesEmptyError": "É preciso ter pelo menos um prefixo de ordenação",
"ToastSortingPrefixesUpdateSuccess": "Prefixos de ordenação atualizados ({0} item(ns))", "ToastSortingPrefixesUpdateSuccess": "Prefixos de ordenação atualizados ({0} item(ns))",
"ToastTitleRequired": "É necessário ter um título",
"ToastUnknownError": "Erro desconhecido",
"ToastUnlinkOpenIdFailed": "Falha ao desvincular o usuário do OpenID",
"ToastUnlinkOpenIdSuccess": "Usuário desvinculado do OpenID",
"ToastUploaderFilepathExistsError": "O caminho de arquivo \"{0}\" já existe no servidor",
"ToastUploaderItemExistsInSubdirectoryError": "O item \"{0}\" está usando um subdiretório do caminho de upload.",
"ToastUserDeleteFailed": "Falha ao apagar usuário", "ToastUserDeleteFailed": "Falha ao apagar usuário",
"ToastUserDeleteSuccess": "Usuário apagado" "ToastUserDeleteSuccess": "Usuário apagado",
"ToastUserPasswordChangeSuccess": "Senha alterada com sucesso",
"ToastUserPasswordMismatch": "As senhas não coincidem",
"ToastUserPasswordMustChange": "A nova senha não pode ser igual à senha antiga",
"ToastUserRootRequireName": "É preciso entrar com um nome de usuário root",
"TooltipAddChapters": "Adicionar capítulo(s)",
"TooltipAddOneSecond": "Adicionar 1 segundo",
"TooltipAdjustChapterStart": "Clique para ajustar a hora de início",
"TooltipLockAllChapters": "Bloquear todos os capítulos",
"TooltipLockChapter": "Bloquear capítulo (Shift+clique para selecionar o intervalo)",
"TooltipSubtractOneSecond": "Subtrair 1 segundo",
"TooltipUnlockAllChapters": "Desbloqueie todos os capítulos",
"TooltipUnlockChapter": "Desbloquear capítulo (Shift + clique para selecionar o intervalo)"
} }
+448 -3
View File
@@ -4,143 +4,588 @@
"ButtonAddChapters": "Adaugă Capitole", "ButtonAddChapters": "Adaugă Capitole",
"ButtonAddDevice": "Adaugă Dispozitiv", "ButtonAddDevice": "Adaugă Dispozitiv",
"ButtonAddLibrary": "Adaugă Librărie", "ButtonAddLibrary": "Adaugă Librărie",
"ButtonAddPodcasts": "Adaugă Podcasturi",
"ButtonAddUser": "Adaugă Utilizator", "ButtonAddUser": "Adaugă Utilizator",
"ButtonAddYourFirstLibrary": "Adaugă prima librărie",
"ButtonApply": "Aplică",
"ButtonApplyChapters": "Aplică Capitole",
"ButtonAuthors": "Autori", "ButtonAuthors": "Autori",
"ButtonBack": "Înapoi", "ButtonBack": "Înapoi",
"ButtonBatchEditPopulateFromExisting": "Populează din existente",
"ButtonBatchEditPopulateMapDetails": "Populează detaliile hărții",
"ButtonBrowseForFolder": "Caută un dosar",
"ButtonCancel": "Anulează", "ButtonCancel": "Anulează",
"ButtonCancelEncode": "Anulare codificare",
"ButtonChangeRootPassword": "Schimbare parolă de root",
"ButtonCheckAndDownloadNewEpisodes": "Verifică și descarcă episoade noi",
"ButtonChooseAFolder": "Alege un dosar",
"ButtonChooseFiles": "Alege fișiere",
"ButtonClearFilter": "Șterge filtrul", "ButtonClearFilter": "Șterge filtrul",
"ButtonClose": "Închide", "ButtonClose": "Închide",
"ButtonCloseFeed": "Închide sursa", "ButtonCloseFeed": "Închide sursa",
"ButtonCloseSession": "Închide Sesiunea Curentă", "ButtonCloseSession": "Închide Sesiunea Curentă",
"ButtonCollections": "Colecții", "ButtonCollections": "Colecții",
"ButtonConfigureScanner": "Configurare scaner",
"ButtonCreate": "Creează", "ButtonCreate": "Creează",
"ButtonCreateBackup": "Creează backup",
"ButtonDelete": "Șterge", "ButtonDelete": "Șterge",
"ButtonDownloadQueue": "Coadă",
"ButtonEdit": "Editare",
"ButtonEditChapters": "Editare capitole",
"ButtonEditPodcast": "Editare podcast",
"ButtonEnable": "Activează",
"ButtonForceReScan": "Forțează rescanare",
"ButtonFullPath": "Calea completă",
"ButtonHide": "Ascunde", "ButtonHide": "Ascunde",
"ButtonHome": "Acasă", "ButtonHome": "Acasă",
"ButtonIssues": "Erori", "ButtonIssues": "Probleme",
"ButtonJumpBackward": "Sari înapoi",
"ButtonJumpForward": "Sari înainte",
"ButtonLatest": "Noutăți", "ButtonLatest": "Noutăți",
"ButtonLibrary": "Bibliotecă", "ButtonLibrary": "Bibliotecă",
"ButtonLogout": "Deconectare",
"ButtonLookup": "Căutare",
"ButtonManageTracks": "Gestionează pista",
"ButtonMapChapterTitles": "Maparea titlurilor capitolelor",
"ButtonMatchAllAuthors": "Potriviește toți autorii",
"ButtonMatchBooks": "Potrivește Cărți",
"ButtonNevermind": "Anulează",
"ButtonNext": "Următorul",
"ButtonNextChapter": "Următorul Capitol",
"ButtonNextItemInQueue": "Următorul Articol în Coadă",
"ButtonOk": "OK", "ButtonOk": "OK",
"ButtonOpenFeed": "Vezi noutățile", "ButtonOpenFeed": "Vezi noutățile",
"ButtonOpenManager": "Deschide Managerul",
"ButtonPause": "Pauză", "ButtonPause": "Pauză",
"ButtonPlay": "Redă", "ButtonPlay": "Redă",
"ButtonPlayAll": "Redă tot",
"ButtonPlaying": "Redare",
"ButtonPlaylists": "Liste", "ButtonPlaylists": "Liste",
"ButtonPrevious": "Anterior",
"ButtonPreviousChapter": "Capitolul Anterior",
"ButtonProbeAudioFile": "Analizare Fișier Audio",
"ButtonPurgeAllCache": "Golire Cache Completă",
"ButtonPurgeItemsCache": "Golire Cache Articole",
"ButtonQueueAddItem": "Adaugă la Coadă",
"ButtonQueueRemoveItem": "Sterge din Coadă",
"ButtonQuickEmbed": "Încorporare Rapidă",
"ButtonQuickEmbedMetadata": "Metadate pentru Încorporare Rapidă",
"ButtonQuickMatch": "Potrivire Rapidă",
"ButtonReScan": "Rescanare",
"ButtonRead": "Citește", "ButtonRead": "Citește",
"ButtonReadLess": "Mai puțin", "ButtonReadLess": "Citește Mai Puțin",
"ButtonReadMore": "Afișează mai mult", "ButtonReadMore": "Afișează mai mult",
"ButtonRefresh": "Reîmprospătare",
"ButtonRemove": "Elimină", "ButtonRemove": "Elimină",
"ButtonRemoveAll": "Eliminați Tot",
"ButtonRemoveAllLibraryItems": "Ștergerea tuturor Articolelor din Librărie",
"ButtonRemoveFromContinueListening": "Ștergere din \"Continuă să Asculți\"",
"ButtonRemoveFromContinueReading": "Ștergere din \"Continuă să citești\"",
"ButtonRemoveSeriesFromContinueSeries": "Ștergere Serie din \"Continuă Seria\"",
"ButtonReset": "Resetează",
"ButtonResetToDefault": "Resetează la valorile implicite",
"ButtonRestore": "Restaurare",
"ButtonSave": "Salvează", "ButtonSave": "Salvează",
"ButtonSaveAndClose": "Salvează și Închide",
"ButtonSaveTracklist": "Salvare Pistă",
"ButtonScan": "Scanează",
"ButtonScanLibrary": "Scanează Librăria",
"ButtonScrollLeft": "Derulează spre stânga",
"ButtonScrollRight": "Derulează spre Dreapta",
"ButtonSearch": "Caută", "ButtonSearch": "Caută",
"ButtonSelectFolderPath": "Selectează Calea către Dosar",
"ButtonSeries": "Serii", "ButtonSeries": "Serii",
"ButtonSetChaptersFromTracks": "Setează capitole din piste",
"ButtonShare": "Distribuie",
"ButtonShiftTimes": "Aliniează timpi",
"ButtonShow": "Arată",
"ButtonStartM4BEncode": "Începe Codarea M4B",
"ButtonStartMetadataEmbed": "Începe Încorporarea Metadatelor",
"ButtonStats": "Statistici",
"ButtonSubmit": "Trimite", "ButtonSubmit": "Trimite",
"ButtonTest": "Testează",
"ButtonUnlinkOpenId": "Deconectare OpenID",
"ButtonUpload": "Încarcă",
"ButtonUploadBackup": "Încarcă Backup",
"ButtonUploadCover": "Încarcă Copertă",
"ButtonUploadOPMLFile": "Încarcă Fișier OPML",
"ButtonUserDelete": "Șterge userul {0}",
"ButtonUserEdit": "Editează userul {0}",
"ButtonViewAll": "Vizualizează tot",
"ButtonYes": "Da", "ButtonYes": "Da",
"ErrorUploadFetchMetadataAPI": "Eroare în descărcarea metadatelor",
"ErrorUploadFetchMetadataNoResults": "Nu s-au putut prelua metadatele - încearcă să editezi titlul și/sau autorul",
"ErrorUploadLacksTitle": "Trebuie să aibă un titlu",
"HeaderAccount": "Cont", "HeaderAccount": "Cont",
"HeaderAddCustomMetadataProvider": "Adaugă Furnizor de Metadate Personalizat",
"HeaderAdvanced": "Avansat", "HeaderAdvanced": "Avansat",
"HeaderApiKeys": "Chei API",
"HeaderAppriseNotificationSettings": "Setări Notificări Apprise",
"HeaderAudioTracks": "Înregistrări audio", "HeaderAudioTracks": "Înregistrări audio",
"HeaderAudiobookTools": "Instrumente pentru Gestionarea Fișierelor Audiobook",
"HeaderAuthentication": "Autentificare",
"HeaderBackups": "Copii de siguranță",
"HeaderBulkChapterModal": "Adaugă Multiple Capitole",
"HeaderChangePassword": "Schimbă Parola",
"HeaderChapters": "Capitole", "HeaderChapters": "Capitole",
"HeaderChooseAFolder": "Alege Dosar",
"HeaderCollection": "Colecție", "HeaderCollection": "Colecție",
"HeaderCollectionItems": "Conținutul colecției", "HeaderCollectionItems": "Conținutul colecției",
"HeaderCover": "Copertă",
"HeaderCurrentDownloads": "Descărcări Curente",
"HeaderCustomMessageOnLogin": "Mesaj Personalizat la Autentificare",
"HeaderCustomMetadataProviders": "Furnizor de Metadate Personalizat",
"HeaderDetails": "Detalii", "HeaderDetails": "Detalii",
"HeaderDownloadQueue": "Coadă de Descărcare",
"HeaderEbookFiles": "Ebook-uri", "HeaderEbookFiles": "Ebook-uri",
"HeaderEmail": "Email",
"HeaderEmailSettings": "Setări Email",
"HeaderEpisodes": "Episoade", "HeaderEpisodes": "Episoade",
"HeaderEreaderDevices": "Dispozitive eReader",
"HeaderEreaderSettings": "Setări eReader", "HeaderEreaderSettings": "Setări eReader",
"HeaderFiles": "Fișiere",
"HeaderFindChapters": "Caută Capitol",
"HeaderIgnoredFiles": "Fișiere Ignorate",
"HeaderItemFiles": "Fișiere Articol",
"HeaderLastListeningSession": "Ultima Sesiune de Ascultare",
"HeaderLatestEpisodes": "Episoade recente", "HeaderLatestEpisodes": "Episoade recente",
"HeaderLibraries": "Biblioteci", "HeaderLibraries": "Biblioteci",
"HeaderLibraryFiles": "Fișiere in Librărie",
"HeaderLibraryStats": "Statistici Librărie",
"HeaderListeningSessions": "Sesiuni de Ascultare",
"HeaderListeningStats": "Statistici Ascultare",
"HeaderLogin": "Autentifică",
"HeaderLogs": "Loguri",
"HeaderManageGenres": "Gestionează Genuri",
"HeaderManageTags": "Gestionează Etichete",
"HeaderMapDetails": "Detaliile Hărții",
"HeaderMatch": "Potrivește",
"HeaderMetadataOrderOfPrecedence": "Prioritatea Metadatelor",
"HeaderMetadataToEmbed": "Metadate pentru Încorporare",
"HeaderNewAccount": "Cont nou",
"HeaderNewApiKey": "Cheie API Nouă",
"HeaderNewLibrary": "Librărie Nouă",
"HeaderNotificationCreate": "Creează Notificare",
"HeaderNotificationUpdate": "Actualizare Notificare",
"HeaderNotifications": "Notificări",
"HeaderOpenIDConnectAuthentication": "Autentificare prin OpenID",
"HeaderOpenListeningSessions": "Deschide Sesiuni de Ascultare",
"HeaderOpenRSSFeed": "Deschide flux RSS", "HeaderOpenRSSFeed": "Deschide flux RSS",
"HeaderOtherFiles": "Alte Fișiere",
"HeaderPasswordAuthentication": "Autentificare cu Parolă",
"HeaderPermissions": "Permisiuni",
"HeaderPlayerQueue": "Coadă Player",
"HeaderPlayerSettings": "Setări Player",
"HeaderPlaylist": "Listă de redare", "HeaderPlaylist": "Listă de redare",
"HeaderPlaylistItems": "Conținut listă", "HeaderPlaylistItems": "Conținut listă",
"HeaderPodcastsToAdd": "Podcast de Adăugat",
"HeaderPresets": "Presetări",
"HeaderPreviewCover": "Previzualizare Copertă",
"HeaderRSSFeedGeneral": "Date RSS", "HeaderRSSFeedGeneral": "Date RSS",
"HeaderRSSFeedIsOpen": "RSS activ", "HeaderRSSFeedIsOpen": "RSS activ",
"HeaderRSSFeeds": "Fluxuri RSS",
"HeaderRemoveEpisode": "Elimină Episod",
"HeaderRemoveEpisodes": "Elimină {0} Episoade",
"HeaderSavedMediaProgress": "Progres Media Salvat",
"HeaderSchedule": "Planifică",
"HeaderScheduleEpisodeDownloads": "Planifică Descărcare Automată a Episoadelor",
"HeaderScheduleLibraryScans": "Planifică Scanarea Automată a Librăriei",
"HeaderSession": "Sesiuni",
"HeaderSetBackupSchedule": "Planifică Backup",
"HeaderSettings": "Setări", "HeaderSettings": "Setări",
"HeaderSettingsDisplay": "Afișaj",
"HeaderSettingsExperimental": "Caracteristici Experimentale",
"HeaderSettingsGeneral": "General",
"HeaderSettingsScanner": "Scaner",
"HeaderSettingsSecurity": "Securitate",
"HeaderSettingsWebClient": "Client Web",
"HeaderSleepTimer": "Timer de somn", "HeaderSleepTimer": "Timer de somn",
"HeaderStatsLargestItems": "Cele mai mari articole",
"HeaderStatsLongestItems": "Cele mai lungi articole (ore)",
"HeaderStatsMinutesListeningChart": "Minute ascultate (ultimele 7 zile)", "HeaderStatsMinutesListeningChart": "Minute ascultate (ultimele 7 zile)",
"HeaderStatsRecentSessions": "Sesiuni recente", "HeaderStatsRecentSessions": "Sesiuni recente",
"HeaderStatsTop10Authors": "Top 10 Autori",
"HeaderStatsTop5Genres": "Top 5 Genuri",
"HeaderTableOfContents": "Cuprins", "HeaderTableOfContents": "Cuprins",
"HeaderTools": "Unelte",
"HeaderUpdateAccount": "Actualizare Cont",
"HeaderUpdateApiKey": "Actualizare Cheie API",
"HeaderUpdateAuthor": "Actualizare Autor",
"HeaderUpdateDetails": "Actualizare Detalii",
"HeaderUpdateLibrary": "Actualizare Librărie",
"HeaderUsers": "Utilizatori",
"HeaderYearReview": "Trecere în revistă a anului {0}",
"HeaderYourStats": "Progresul tău", "HeaderYourStats": "Progresul tău",
"LabelAbridged": "Abreviat",
"LabelAbridgedChecked": "Abreviat (verificat)",
"LabelAbridgedUnchecked": "Neprescurtat (neverificat)",
"LabelAccessibleBy": "Accesibil prin",
"LabelAccountType": "Tip de Cont",
"LabelAccountTypeAdmin": "Administrator",
"LabelAccountTypeGuest": "Oaspete",
"LabelAccountTypeUser": "Utilizator",
"LabelActivities": "Activități",
"LabelActivity": "Activitate",
"LabelAddToCollection": "Adaugă la Colecție",
"LabelAddToCollectionBatch": "Adaugare {0} Cărți la Colecție",
"LabelAddToPlaylist": "Adaugă în listă", "LabelAddToPlaylist": "Adaugă în listă",
"LabelAddToPlaylistBatch": "Adaugare {0} Articole la Listă",
"LabelAddedAt": "Adăugat la", "LabelAddedAt": "Adăugat la",
"LabelAddedDate": "Adăugat {0}", "LabelAddedDate": "Adăugat {0}",
"LabelAdminUsersOnly": "Doar Administratori",
"LabelAll": "Toate", "LabelAll": "Toate",
"LabelAllEpisodesDownloaded": "Toate episoadele descărcate",
"LabelAllUsers": "Toți Utilizatorii",
"LabelAllUsersExcludingGuests": "Toți utilizatorii cu excepția oaspeților",
"LabelAllUsersIncludingGuests": "Toți utilizatorii inclusiv oaspeții",
"LabelAlreadyInYourLibrary": "Deja în bibliotecă",
"LabelApiKeyCreated": "Cheia API \"{0}\" creată cu succes.",
"LabelApiKeyCreatedDescription": "Copiază cheia API acum deoarece nu va mai fi disponibilă pentru vizualizare.",
"LabelApiKeyUser": "Acționează în numele utilizatorului",
"LabelApiKeyUserDescription": "Această cheie API va avea aceleași permisiuni ca utilizatorul în numele căruia acționează. In loguri va părea că utilizatorul lansa cererile.",
"LabelApiToken": "Token API",
"LabelAppend": "Atașează",
"LabelAudioBitrate": "Rata de Biți Audio (e.g. 128k)",
"LabelAudioChannels": "Canale Audio (1 sau 2)",
"LabelAudioCodec": "Codec Audio",
"LabelAuthor": "Autor", "LabelAuthor": "Autor",
"LabelAuthorFirstLast": "Autor (Prenume Nume)", "LabelAuthorFirstLast": "Autor (Prenume Nume)",
"LabelAuthorLastFirst": "Autor (Nume, Prenume)", "LabelAuthorLastFirst": "Autor (Nume, Prenume)",
"LabelAuthors": "Autori", "LabelAuthors": "Autori",
"LabelAutoDownloadEpisodes": "Descarcă automat episoadele", "LabelAutoDownloadEpisodes": "Descarcă automat episoadele",
"LabelAutoFetchMetadata": "Descarcă Automat Metadate",
"LabelAutoFetchMetadataHelp": "Descarcă metadate pentru titlu, autor si serii pentru eficientizarea încărcării. Metadatele suplimentare s-ar putea să trebuiască potrivite după încărcare.",
"LabelAutoLaunch": "Lansare automată",
"LabelAutoLaunchDescription": "Redirecționează automat către furnizorul de autentificare când navighez la pagina de autentificare (cale de suprascriere manuală <code>/login?autoLaunch=0</code>)",
"LabelAutoRegister": "Înregistrare Automată",
"LabelAutoRegisterDescription": "Creează utilizatori automat dupa autentificare",
"LabelBackToUser": "Înapoi la Utilizator",
"LabelBackupAudioFiles": "Copii de rezervă a Fișierelor Audio",
"LabelBackupLocation": "Locația Copiilor de Rezervă",
"LabelBackupsEnableAutomaticBackups": "Copii de Rezervă Automate",
"LabelBackupsEnableAutomaticBackupsHelp": "Copiile de Rezervă au fost salvate în /metadata/backups",
"LabelBackupsMaxBackupSize": "Dimensiunea maximă a copiilor de rezervă (în GB) (0 pentru nelimitat)",
"LabelBackupsMaxBackupSizeHelp": "Ca protecție împotriva configurațiilor greșite, backup-ul va eșua dacă trece de limita de dimensiune configurată.",
"LabelBackupsNumberToKeep": "Numărul copiilor de siguranță de păstrat",
"LabelBackupsNumberToKeepHelp": "Doar 1 copie de siguranță va fi ștearsă odata deci dacă există mai multe copii de siguranță vor trebui șterse manual.",
"LabelBitrate": "Rată de biți",
"LabelBonus": "Bonus",
"LabelBooks": "Cărți", "LabelBooks": "Cărți",
"LabelButtonText": "Textul Butonului",
"LabelByAuthor": "de {0}",
"LabelChangePassword": "Schimbare Parolă",
"LabelChannels": "Canale",
"LabelChapterCount": "{0} Capitole",
"LabelChapterTitle": "Titlul Capitolului",
"LabelChapters": "Capitole", "LabelChapters": "Capitole",
"LabelChaptersFound": "capitole găsite",
"LabelClickForMoreInfo": "Click pentru mai multe informații",
"LabelClickToUseCurrentValue": "Click pentru a folosi valoarea curentă",
"LabelClosePlayer": "Închide playerul", "LabelClosePlayer": "Închide playerul",
"LabelCodec": "Codec",
"LabelCollapseSeries": "Restrânge seriile", "LabelCollapseSeries": "Restrânge seriile",
"LabelCollapseSubSeries": "Restrânge Sub-Seriile",
"LabelCollection": "Colecție",
"LabelCollections": "Colecții",
"LabelComplete": "Finalizat", "LabelComplete": "Finalizat",
"LabelConfirmPassword": "Confirmare Parolă",
"LabelContinueListening": "Ascultă în continuare", "LabelContinueListening": "Ascultă în continuare",
"LabelContinueReading": "Continuă lectura", "LabelContinueReading": "Continuă lectura",
"LabelContinueSeries": "Continuă seria", "LabelContinueSeries": "Continuă seria",
"LabelCorsAllowed": "Origini CORS Permise",
"LabelCover": "Copertă",
"LabelCoverImageURL": "URL-ul Imaginii de Copertă",
"LabelCoverProvider": "Furnizor Copertă",
"LabelCreatedAt": "Creat la",
"LabelCronExpression": "Expresie Cron",
"LabelCurrent": "Curent",
"LabelCurrently": "Acum:",
"LabelCustomCronExpression": "Expresie Cron Personalizată:",
"LabelDatetime": "Data și ora",
"LabelDays": "Zile",
"LabelDeleteFromFileSystemCheckbox": "Șterge fișierele din sistem (debifeaza pentru a șterge doar din baza de date)",
"LabelDescription": "Descriere", "LabelDescription": "Descriere",
"LabelDeselectAll": "Deselectați Tot",
"LabelDetectedPattern": "Tipar Identificat:",
"LabelDevice": "Dispozitiv",
"LabelDeviceInfo": "Informații Dispozitiv",
"LabelDeviceIsAvailableTo": "Dispozitiv accesibil lui...",
"LabelDirectory": "Dosar",
"LabelDiscFromFilename": "Disc din Numele Fișierului",
"LabelDiscFromMetadata": "Disc din Metadate",
"LabelDiscover": "Descoperă", "LabelDiscover": "Descoperă",
"LabelDownload": "Descarcă", "LabelDownload": "Descarcă",
"LabelDownloadNEpisodes": "Descarcă {0} episoade",
"LabelDownloadable": "Descărcabil",
"LabelDuration": "Durată", "LabelDuration": "Durată",
"LabelDurationComparisonExactMatch": "(potrivire exactă)",
"LabelDurationComparisonLonger": "({0} mai lung)",
"LabelDurationComparisonShorter": "({0} mai scurt)",
"LabelDurationFound": "Durată identificată:",
"LabelEbook": "Carte electronică", "LabelEbook": "Carte electronică",
"LabelEbooks": "Cărți electronice", "LabelEbooks": "Cărți electronice",
"LabelEdit": "Editare",
"LabelEmail": "Email",
"LabelEmailSettingsFromAddress": "De la Adresa",
"LabelEmailSettingsRejectUnauthorized": "Respingere certificate neautorizate",
"LabelEmailSettingsRejectUnauthorizedHelp": "Dezactivarea verificării certificatelor SSL vă poate expune conexiunea la riscuri de securitate, cum ar fi atacuri de tip man-in-the-middle. Dezactivați această opțiune dacă înțelegeti implicațiile și aveți încredere în serverul de mail la care vă conectați.",
"LabelEmailSettingsSecure": "Sigur",
"LabelEmailSettingsSecureHelp": "Dacă e adevărat, conexiunea se va realiza prin TLS către server. Dacă e fals, TLS este folosit dacă serverul suporta extensia STARTTLS. În majoritatea cazurilor setati adevărat dacă folosiți portul 465. Pentru portul 587 sau 25 setati fals. (referinta nodemailer.com/smtp/#authentication)",
"LabelEmailSettingsTestAddress": "Adresă de Test",
"LabelEmbeddedCover": "Încorporează Copertă",
"LabelEnable": "Activează", "LabelEnable": "Activează",
"LabelEncodingBackupLocation": "O copie de siguranță a fișierului audio original va fi salvată în:",
"LabelEncodingChaptersNotEmbedded": "Capitolele nu sunt încorporate în cărțile audio cu mai multe track-uri.",
"LabelEncodingClearItemCache": "Asigurați-vă că ștergeți articolele din cache periodic.",
"LabelEncodingFinishedM4B": "Fișierul M4B va fi adaugat în dosarul dvs. de cărți audio când codificarea e terminată:",
"LabelEncodingInfoEmbedded": "Metadatele vor fi încorporate în fișierele audio din interiorul dosarului dvs. cu cărți audio.",
"LabelEncodingStartedNavigation": "Odată pornită sarcina poti naviga din această pagină.",
"LabelEncodingTimeWarning": "Codificarea poate dura până la 30 de minute.",
"LabelEncodingWarningAdvancedSettings": "Avertizare: Nu modificați aceste setări dacă nu sunteți familiar cu opțiunile de codare ffmpeg .",
"LabelEncodingWatcherDisabled": "Dacă ați dezactivat funcția de urmările va trebui sa rescanați acestă carte audio la ulterior.",
"LabelEnd": "Sfârșit", "LabelEnd": "Sfârșit",
"LabelEndOfChapter": "Sfârșitul capitolului", "LabelEndOfChapter": "Sfârșitul capitolului",
"LabelEpisode": "Episod", "LabelEpisode": "Episod",
"LabelEpisodeNotLinkedToRssFeed": "Episoade nelegate de un flux RSS",
"LabelEpisodeNumber": "Episodul #{0}",
"LabelEpisodeTitle": "Titlul Episodului",
"LabelEpisodeType": "Tipul Episodului",
"LabelEpisodeUrlFromRssFeed": "URL-ul Episodului din Fluxul RSS",
"LabelEpisodes": "Episoade",
"LabelEpisodic": "Episodic",
"LabelExample": "Exemplu",
"LabelExpandSeries": "Extinde Seriile",
"LabelExpandSubSeries": "Extinde Sub-Seriile",
"LabelExpired": "Expirat",
"LabelExpiresAt": "Expiră La",
"LabelExpiresInSeconds": "Expiră în (secunde)",
"LabelExpiresNever": "Niciodată",
"LabelExplicit": "Explicit", "LabelExplicit": "Explicit",
"LabelFeedURL": "URL flux", "LabelExplicitChecked": "Explicit (verificat)",
"LabelExplicitUnchecked": "Neexplicit (neverificat)",
"LabelExportOPML": "Exportă OPML",
"LabelFeedURL": "Flux URL",
"LabelFetchingMetadata": "Aducere Metadate",
"LabelFile": "Fișier", "LabelFile": "Fișier",
"LabelFileBirthtime": "Data creării fișierului", "LabelFileBirthtime": "Data creării fișierului",
"LabelFileBornDate": "Creat {0}",
"LabelFileModified": "Fișier modificat", "LabelFileModified": "Fișier modificat",
"LabelFileModifiedDate": "Modificat {0}",
"LabelFilename": "Nume fișier", "LabelFilename": "Nume fișier",
"LabelFilterByUser": "Filtrare după Utilizator",
"LabelFindEpisodes": "Găsire Episoade",
"LabelFinished": "Finalizat", "LabelFinished": "Finalizat",
"LabelFinishedDate": "Finalizat {0}",
"LabelFolder": "Dosar", "LabelFolder": "Dosar",
"LabelFolders": "Dosare",
"LabelFontBold": "Îngroșat",
"LabelFontBoldness": "Grosimea fontului", "LabelFontBoldness": "Grosimea fontului",
"LabelFontFamily": "Familia Fontului",
"LabelFontItalic": "Cursiv",
"LabelFontScale": "Mărimea fontului", "LabelFontScale": "Mărimea fontului",
"LabelFontStrikethrough": "Tăiat cu o linie",
"LabelFormat": "Format",
"LabelFull": "Întreg",
"LabelGenre": "Gen", "LabelGenre": "Gen",
"LabelGenres": "Genuri", "LabelGenres": "Genuri",
"LabelHardDeleteFile": "Ștergere definitivă a fișierului",
"LabelHasEbook": "Are carte electronică", "LabelHasEbook": "Are carte electronică",
"LabelHasSupplementaryEbook": "Are carte electronică suplimentară", "LabelHasSupplementaryEbook": "Are carte electronică suplimentară",
"LabelHideSubtitles": "Ascunde Subtitrări",
"LabelHighestPriority": "Prioritatea cea mai ridicată",
"LabelHost": "Gazdă", "LabelHost": "Gazdă",
"LabelHour": "Ora",
"LabelHours": "Ore",
"LabelIcon": "Pictogramă",
"LabelImageURLFromTheWeb": "URL-ul imaginii de pe web",
"LabelInProgress": "În desfășurare", "LabelInProgress": "În desfășurare",
"LabelIncludeInTracklist": "Include în Lista de Melodii",
"LabelIncomplete": "Incomplet", "LabelIncomplete": "Incomplet",
"LabelInterval": "Interval",
"LabelIntervalCustomDailyWeekly": "Personalizat zilnic/saptămânal",
"LabelIntervalEvery12Hours": "La fiecare 12 ore",
"LabelIntervalEvery15Minutes": "La fiecare 15 minute",
"LabelIntervalEvery2Hours": "La fiecare 2 ore",
"LabelIntervalEvery30Minutes": "La fiecare 30 minute",
"LabelIntervalEvery6Hours": "La fiecare 6 ore",
"LabelIntervalEveryDay": "În fiecare zi",
"LabelIntervalEveryHour": "În fiecare oră",
"LabelIntervalEveryMinute": "La fiecare minut",
"LabelInvert": "Inversează",
"LabelItem": "Articol",
"LabelJumpBackwardAmount": "Sari înapoi cu",
"LabelJumpForwardAmount": "Sari înainte cu",
"LabelLanguage": "Limbă", "LabelLanguage": "Limbă",
"LabelLanguageDefaultServer": "Limba Prestabilită a Serverului",
"LabelLanguages": "Limbi",
"LabelLastBookAdded": "Ultima Carte Adăugată",
"LabelLastBookUpdated": "Ultima Carte Actualizată",
"LabelLastProgressDate": "Ultimul progres: {0}",
"LabelLastSeen": "Ultima dată văzut",
"LabelLastTime": "Ultima dată",
"LabelLastUpdate": "Ultima actualizare",
"LabelLayout": "Aspect", "LabelLayout": "Aspect",
"LabelLayoutSinglePage": "Pagină unică", "LabelLayoutSinglePage": "Pagină unică",
"LabelLayoutSplitPage": "Pagină împărțită",
"LabelLess": "Mai puțin",
"LabelLibrariesAccessibleToUser": "Biblioteci Accesibile Utilizatorului",
"LabelLibrary": "Bibliotecă",
"LabelLibraryFilterSublistEmpty": "Numărul {0}",
"LabelLibraryItem": "Articol din Bibliotecă",
"LabelLibraryName": "Numele Bibliotecii",
"LabelLibrarySortByProgress": "Progres: Ultima Actualizare",
"LabelLibrarySortByProgressFinished": "Progres: Finalizat",
"LabelLibrarySortByProgressStarted": "Progres: Început",
"LabelLimit": "Limită",
"LabelLineSpacing": "Spațiere între rânduri", "LabelLineSpacing": "Spațiere între rânduri",
"LabelListenAgain": "Ascultă din nou", "LabelListenAgain": "Ascultă din nou",
"LabelLogLevelDebug": "Depanare",
"LabelLogLevelInfo": "Informații",
"LabelLogLevelWarn": "Avertizare",
"LabelLookForNewEpisodesAfterDate": "Caută episoade noi după această dată",
"LabelLowestPriority": "Cea Mai Scăzută Prioritate",
"LabelMatchConfidence": "Încredere",
"LabelMatchExistingUsersBy": "Potrivire utilizatori existenți prin",
"LabelMatchExistingUsersByDescription": "Folosit pentru a conecta utilizatorii existenți. Odata conectați, utilizatorii vor fi potriviți după un ID unic trimis de furnizorul SSO",
"LabelMaxEpisodesToDownload": "Numarul maxim # de episoade de descărcat. Folosiți 0 pentru nelimitat.",
"LabelMaxEpisodesToDownloadPerCheck": "Numărul maxim # de episoade de descărcat per verificare",
"LabelMaxEpisodesToKeep": "Numarul maxim # de episoade păstrate",
"LabelMaxEpisodesToKeepHelp": "Valorea 0 nu stabilește o limită maximă. După ce un episod nou a fost descărcat automat, cel mai vechi episod va fi șters dacă aveți mai mult de X episoade. Se va șterge câte un episod vechi pentru fiecare episod nou descărcat.",
"LabelMediaPlayer": "Player Media",
"LabelMediaType": "Tip media", "LabelMediaType": "Tip media",
"LabelMetaTag": "Etichetă Meta",
"LabelMetaTags": "Etichete Meta",
"LabelMetadataOrderOfPrecedenceDescription": "Sursele de metadate cu prioritate mai mare o să suprascrie sursele de metadate cu prioritate mai mică",
"LabelMetadataProvider": "Furnizor Metadate",
"LabelMinute": "Minut",
"LabelMinutes": "Minute",
"LabelMissing": "Lipsă", "LabelMissing": "Lipsă",
"LabelMissingEbook": "Nu are carte electronică",
"LabelMissingSupplementaryEbook": "Nu are carte electronică adițională",
"LabelMobileRedirectURIs": "URL-uri de redirecționare Mobile Permise",
"LabelMobileRedirectURIsDescription": "Aceasta este o listă cu URI-uri valide pentru redirectionare a aplicațiilor mobile. URI-ul predefinit este <code>audiobookshelf://oauth</code>,, care poate fi sters sau suplimentat cu URI-uri adiționale pentru integrarea cu alte aplicații. Folosirea unui asterisc (<code>*</code>) ca singur element permite orice URI.",
"LabelMore": "Mai multe", "LabelMore": "Mai multe",
"LabelMoreInfo": "Mai multe informații", "LabelMoreInfo": "Mai multe informații",
"LabelName": "Nume", "LabelName": "Nume",
"LabelNarrator": "Narator", "LabelNarrator": "Narator",
"LabelNarrators": "Naratori", "LabelNarrators": "Naratori",
"LabelNew": "Nou",
"LabelNewPassword": "Parolă Nouă",
"LabelNewestAuthors": "Autori noi", "LabelNewestAuthors": "Autori noi",
"LabelNewestEpisodes": "Episoade noi", "LabelNewestEpisodes": "Episoade noi",
"LabelNextBackupDate": "Următoarea dată a copiilor de siguranță",
"LabelNextChapters": "Următoarele capitole vor fi:",
"LabelNextScheduledRun": "Urmatoarea rulare programată",
"LabelNoApiKeys": "Nu exista chei API",
"LabelNoCustomMetadataProviders": "Nu există furnizori de metadate personalizați",
"LabelNoEpisodesSelected": "Nici un episod selectat",
"LabelNotFinished": "Nefinalizat", "LabelNotFinished": "Nefinalizat",
"LabelNotStarted": "Neînceput", "LabelNotStarted": "Neînceput",
"LabelNotes": "Note",
"LabelNotificationAppriseURL": "URL-ul(urile) Apprise",
"LabelNotificationAvailableVariables": "Variabile disponibile",
"LabelNotificationBodyTemplate": "Corpul Șablonului",
"LabelNotificationEvent": "Eveniment de notificare",
"LabelNotificationTitleTemplate": "Titlul Șablonului",
"LabelNotificationsMaxFailedAttempts": "Număr de încercări eșuate maxim",
"LabelNotificationsMaxFailedAttemptsHelp": "Notificările sunt dezactivate dacă nu reușesc să fie trimise de acest număr de ori",
"LabelNotificationsMaxQueueSize": "Dimensiunea maximă a cozii pentru evenimentele de notificare",
"LabelNotificationsMaxQueueSizeHelp": "Evenimentele sunt limitate la 1 per secunda. Evenimentele vor fi ignorate dacă coada este plină. Previne spamarea cu notificări.",
"LabelNumberOfBooks": "Numărul de Cărți",
"LabelNumberOfChapters": "Număr de capitole:",
"LabelNumberOfEpisodes": "# de Episoade", "LabelNumberOfEpisodes": "# de Episoade",
"LabelOpenIDAdvancedPermsClaimDescription": "Numele revendicării OpenID care conține permisiuni avansate pentru acțiunile utilizatorului în interiorul aplicației care vor fi aplicate rolurilor non-administrator (<b>dacă e configurat</b>). Dacă revendicarea nu e prezentă în răspunsul primit, accesul către ABS e refuzat. Dacă o singură opțiune lipsește, va fi tratată ca <code>falsă</code>. Asigurați-vă că revendicările furnizorului de securitate corespund structurii așteptate:",
"LabelOpenIDClaims": "Lăsați urmatoarele opțiuni goale pentru a dezactiva atribuirea avansată de grupuri și permisiuni, asignând grupul \"Utilizatori\" automat.",
"LabelOpenRSSFeed": "Flux Open RSS",
"LabelOverwrite": "Suprascrie",
"LabelPaginationPageXOfY": "Pagina {0} din {1}",
"LabelPassword": "Parolă", "LabelPassword": "Parolă",
"LabelPath": "Cale", "LabelPath": "Cale",
"LabelPermanent": "Permanent",
"LabelPermissionsAccessAllLibraries": "Poate accesa toate bibliotecile",
"LabelPermissionsAccessAllTags": "Poate accesa toate etichetele",
"LabelPermissionsAccessExplicitContent": "Poate Accesa Conținut Explicit",
"LabelPermissionsCreateEreader": "Poate Crea Cititoare Electronice",
"LabelPermissionsDelete": "Poate Șterge",
"LabelPermissionsDownload": "Poate Descărca",
"LabelPermissionsUpdate": "Poate Actualiza",
"LabelPermissionsUpload": "Poate Încărca",
"LabelPersonalYearReview": "Recapitularea Anului tău ({0})",
"LabelPhotoPathURL": "Calea/URL-ul Fotografiei",
"LabelPlayMethod": "Metoda de Redare",
"LabelPlaybackRateIncrementDecrement": "Incrementare/Decrementare a Ratei de Redare cu",
"LabelPlayerChapterNumberMarker": "{0} din {1}",
"LabelPlaylists": "Liste de redare",
"LabelPodcast": "Podcast", "LabelPodcast": "Podcast",
"LabelPodcastSearchRegion": "Regiunea căutării podcastului",
"LabelPodcastType": "Tipul Podcastului",
"LabelPodcasts": "Podcasturi", "LabelPodcasts": "Podcasturi",
"LabelPort": "Portul",
"LabelPrefixesToIgnore": "Prefix de ignorat (fără a ține cont de majuscule)",
"LabelPreventIndexing": "Împiedică indexarea fluxului în directoarele iTunes și Google Podcasts", "LabelPreventIndexing": "Împiedică indexarea fluxului în directoarele iTunes și Google Podcasts",
"LabelPrimaryEbook": "eCarte Principală",
"LabelProgress": "Progres", "LabelProgress": "Progres",
"LabelProvider": "Furnizor",
"LabelProviderAuthorizationValue": "Valoarea Antetului de Autorizare",
"LabelPubDate": "Data publicării", "LabelPubDate": "Data publicării",
"LabelPublishYear": "Anul publicării", "LabelPublishYear": "Anul publicării",
"LabelPublishedDate": "Publicat la {0}", "LabelPublishedDate": "Publicat la {0}",
"LabelPublishedDecade": "Deceniul Publicării",
"LabelPublishedDecades": "Deceniile Publicării",
"LabelPublisher": "Editor",
"LabelPublishers": "Editori",
"LabelRSSFeedCustomOwnerEmail": "Email personalizat al proprietarului", "LabelRSSFeedCustomOwnerEmail": "Email personalizat al proprietarului",
"LabelRSSFeedCustomOwnerName": "Nume personalizat al proprietarului", "LabelRSSFeedCustomOwnerName": "Nume personalizat al proprietarului",
"LabelRSSFeedOpen": "Flux RSS deschis", "LabelRSSFeedOpen": "Flux RSS deschis",
"LabelRSSFeedPreventIndexing": "Previne indexarea", "LabelRSSFeedPreventIndexing": "Previne indexarea",
"LabelRSSFeedSlug": "Identificator flux RSS", "LabelRSSFeedSlug": "Identificator flux RSS",
"LabelRSSFeedURL": "URL-ul Fluxului RSS",
"LabelRandomly": "Aleatoriu", "LabelRandomly": "Aleatoriu",
"LabelReAddSeriesToContinueListening": "Readăugare serie la \"Continuă să asculți\"",
"LabelRead": "Citește", "LabelRead": "Citește",
"LabelReadAgain": "Citește din nou", "LabelReadAgain": "Citește din nou",
"LabelReadEbookWithoutProgress": "Citire eCarte fără a memora progresul",
"LabelRecentSeries": "Serii recente", "LabelRecentSeries": "Serii recente",
"LabelRecentlyAdded": "Adăugate recent", "LabelRecentlyAdded": "Adăugate recent",
"LabelRecommended": "Recomandat",
"LabelRedo": "Refă",
"LabelRegion": "Regiune",
"LabelReleaseDate": "Data Lansării",
"LabelRemoveAllMetadataAbs": "Ștergerea tuturor fișierelor metadata.abs",
"LabelRemoveAllMetadataJson": "Ștergerea tuturor fișierelor metadata.json",
"LabelRemoveAudibleBranding": "Ștergerea Audible intro și outro din capitole",
"LabelRemoveCover": "Șterge coperta",
"LabelRemoveMetadataFile": "Șterge fisierele metadate din dosarele bibliotecii",
"LabelRemoveMetadataFileHelp": "Șterge toate fișierele metadata.json și metadata.abs din {0} dosare.",
"LabelRowsPerPage": "Rânduri pe pagină",
"LabelSearchTerm": "Termen de căutat",
"LabelSearchTitle": "Titlu de căutat",
"LabelSearchTitleOrASIN": "Titlu de căutat sau ASN",
"LabelSeason": "Sezon", "LabelSeason": "Sezon",
"LabelSeasonNumber": "Sezonul #{0}",
"LabelSelectAll": "Selectează tot",
"LabelSelectAllEpisodes": "Selectează toate episoadele",
"LabelSelectEpisodesShowing": "Selectează {0} episoade dintre cele afișate",
"LabelSelectUser": "Selectare utilizator",
"LabelSelectUsers": "Selectare utilizatori",
"LabelSendEbookToDevice": "Trimite eCarte către...",
"LabelSequence": "Secvență",
"LabelSerial": "Serie",
"LabelSeries": "Serii", "LabelSeries": "Serii",
"LabelSeriesName": "Numele Seriilor",
"LabelSeriesProgress": "Progresul Seriilor",
"LabelServerLogLevel": "Nivelul de Jurnal al Serverului",
"LabelServerYearReview": "Anul Serverului în Retrospectivă ({0})",
"LabelSetEbookAsPrimary": "Setează ca principală", "LabelSetEbookAsPrimary": "Setează ca principală",
"LabelSetEbookAsSupplementary": "Setează ca suplimentară", "LabelSetEbookAsSupplementary": "Setează ca suplimentară",
"LabelSettingsAllowIframe": "Permite încorporarea intr-un iframe",
"LabelSettingsAudiobooksOnly": "Doar cărți audio",
"LabelSettingsAudiobooksOnlyHelp": "Activarea acestei set[ri va ignora fișierele eBook daca acestea nu se află într-un dosar al unei cărți audio, caz în care vor fi setate ca eBook suplimentar",
"LabelSettingsBookshelfViewHelp": "Design scheumorf cu rafturi de lemn",
"LabelSettingsChromecastSupport": "Suport Chromecast",
"LabelSettingsDateFormat": "Formatul Datei",
"LabelSettingsEnableWatcher": "Urmărește în mod automat bibliotecile pentru schimbări",
"LabelSettingsEnableWatcherForLibrary": "Urmărește în mod automat biblioteca pentru schimbări",
"LabelShowAll": "Afișează tot", "LabelShowAll": "Afișează tot",
"LabelSize": "Dimensiune", "LabelSize": "Dimensiune",
"LabelSleepTimer": "Timer de somn", "LabelSleepTimer": "Timer de somn",
+8 -8
View File
@@ -275,7 +275,7 @@
"LabelBonus": "Бонус", "LabelBonus": "Бонус",
"LabelBooks": "Книги", "LabelBooks": "Книги",
"LabelButtonText": "Текст кнопки", "LabelButtonText": "Текст кнопки",
"LabelByAuthor": "{0}", "LabelByAuthor": "от {0}",
"LabelChangePassword": "Изменить пароль", "LabelChangePassword": "Изменить пароль",
"LabelChannels": "Ленты", "LabelChannels": "Ленты",
"LabelChapterCount": "{0} Главы", "LabelChapterCount": "{0} Главы",
@@ -383,7 +383,7 @@
"LabelFolders": "Папки", "LabelFolders": "Папки",
"LabelFontBold": "Жирный", "LabelFontBold": "Жирный",
"LabelFontBoldness": "Жирность шрифта", "LabelFontBoldness": "Жирность шрифта",
"LabelFontFamily": "Семейство шрифтов", "LabelFontFamily": "Семейство шрифта",
"LabelFontItalic": "Курсив", "LabelFontItalic": "Курсив",
"LabelFontScale": "Масштаб шрифта", "LabelFontScale": "Масштаб шрифта",
"LabelFontStrikethrough": "Зачеркнутый", "LabelFontStrikethrough": "Зачеркнутый",
@@ -392,7 +392,7 @@
"LabelGenre": "Жанр", "LabelGenre": "Жанр",
"LabelGenres": "Жанры", "LabelGenres": "Жанры",
"LabelHardDeleteFile": "Жесткое удаление файла", "LabelHardDeleteFile": "Жесткое удаление файла",
"LabelHasEbook": "Есть e-книга", "LabelHasEbook": "Есть электронная книга",
"LabelHasSupplementaryEbook": "Есть дополнительная e-книга", "LabelHasSupplementaryEbook": "Есть дополнительная e-книга",
"LabelHideSubtitles": "Скрыть серии", "LabelHideSubtitles": "Скрыть серии",
"LabelHighestPriority": "Наивысший приоритет", "LabelHighestPriority": "Наивысший приоритет",
@@ -437,8 +437,8 @@
"LabelLibraryItem": "Элемент библиотеки", "LabelLibraryItem": "Элемент библиотеки",
"LabelLibraryName": "Имя библиотеки", "LabelLibraryName": "Имя библиотеки",
"LabelLibrarySortByProgress": "Прогресс: Последнее обновление", "LabelLibrarySortByProgress": "Прогресс: Последнее обновление",
"LabelLibrarySortByProgressFinished": "Прогресс: Завершено", "LabelLibrarySortByProgressFinished": "Прогресс: Закончена",
"LabelLibrarySortByProgressStarted": "Прогресс: Начато", "LabelLibrarySortByProgressStarted": "Прогресс: Начата",
"LabelLimit": "Лимит", "LabelLimit": "Лимит",
"LabelLineSpacing": "Межстрочный интервал", "LabelLineSpacing": "Межстрочный интервал",
"LabelListenAgain": "Послушать снова", "LabelListenAgain": "Послушать снова",
@@ -588,8 +588,8 @@
"LabelSettingsBookshelfViewHelp": "Конструкция с деревянными полками", "LabelSettingsBookshelfViewHelp": "Конструкция с деревянными полками",
"LabelSettingsChromecastSupport": "Поддержка Chromecast", "LabelSettingsChromecastSupport": "Поддержка Chromecast",
"LabelSettingsDateFormat": "Формат даты", "LabelSettingsDateFormat": "Формат даты",
"LabelSettingsEnableWatcher": "Автоматическое сканирование библиотек на изменение", "LabelSettingsEnableWatcher": "Автоматически отслеживать изменения в библиотеках",
"LabelSettingsEnableWatcherForLibrary": "Автоматическое сканирование библиотеки на изменение", "LabelSettingsEnableWatcherForLibrary": "Автоматический просмотр библиотеки на изменение",
"LabelSettingsEnableWatcherHelp": "Включает автоматическое добавление/обновление элементов при обнаружении изменений файлов. *Требуется перезапуск сервера", "LabelSettingsEnableWatcherHelp": "Включает автоматическое добавление/обновление элементов при обнаружении изменений файлов. *Требуется перезапуск сервера",
"LabelSettingsEpubsAllowScriptedContent": "Разрешение содержимого epub с скриптами", "LabelSettingsEpubsAllowScriptedContent": "Разрешение содержимого epub с скриптами",
"LabelSettingsEpubsAllowScriptedContentHelp": "Разрешить файлам epub выполнять скрипты. Рекомендуется отключать этот параметр, если вы не доверяете источнику файлов epub.", "LabelSettingsEpubsAllowScriptedContentHelp": "Разрешить файлам epub выполнять скрипты. Рекомендуется отключать этот параметр, если вы не доверяете источнику файлов epub.",
@@ -888,7 +888,7 @@
"MessageResetChaptersConfirm": "Вы уверены, что хотите сбросить главы и отменить внесенные изменения?", "MessageResetChaptersConfirm": "Вы уверены, что хотите сбросить главы и отменить внесенные изменения?",
"MessageRestoreBackupConfirm": "Вы уверены, что хотите восстановить резервную копию, созданную", "MessageRestoreBackupConfirm": "Вы уверены, что хотите восстановить резервную копию, созданную",
"MessageRestoreBackupWarning": "Восстановление резервной копии перезапишет всю базу данных, расположенную в /config, и обложки изображений в /metadata/items и /metadata/authors.<br/><br/>Бэкапы не изменяют файлы в папках библиотеки. Если вы включили параметры сервера для хранения обложек и метаданных в папках библиотеки, то они не резервируются и не перезаписываются.<br/><br/>Все клиенты, использующие ваш сервер, будут автоматически обновлены.", "MessageRestoreBackupWarning": "Восстановление резервной копии перезапишет всю базу данных, расположенную в /config, и обложки изображений в /metadata/items и /metadata/authors.<br/><br/>Бэкапы не изменяют файлы в папках библиотеки. Если вы включили параметры сервера для хранения обложек и метаданных в папках библиотеки, то они не резервируются и не перезаписываются.<br/><br/>Все клиенты, использующие ваш сервер, будут автоматически обновлены.",
"MessageScheduleLibraryScanNote": "Большинству пользователей рекомендуется отключить эту функцию и включить функцию просмотра папок. Программа просмотра папок автоматически обнаружит изменения в папках вашей библиотеки. Программа просмотра папок работает не для каждой файловой системы (например, NFS), поэтому вместо этого можно использовать запланированные проверки библиотеки.", "MessageScheduleLibraryScanNote": "Большинству пользователей рекомендуется отключить эту функцию и оставить включённой функцию \"Автоматически отслеживать изменения в библиотеках\" - она будет автоматически обнаруживать изменения в папках вашей библиотеки. Включите эту функцию если \"Автоматически отслеживать изменения в библиотеках\" не работает для вашей файловой системы (например, NFS).",
"MessageScheduleRunEveryWeekdayAtTime": "Запуск каждые {0} по {1}", "MessageScheduleRunEveryWeekdayAtTime": "Запуск каждые {0} по {1}",
"MessageSearchResultsFor": "Результаты поиска для", "MessageSearchResultsFor": "Результаты поиска для",
"MessageSelected": "{0} выбрано", "MessageSelected": "{0} выбрано",
+22 -20
View File
@@ -23,7 +23,7 @@
"ButtonClearFilter": "Zrušiť filter", "ButtonClearFilter": "Zrušiť filter",
"ButtonClose": "Uzavrieť", "ButtonClose": "Uzavrieť",
"ButtonCloseFeed": "Zatvoriť zdroj", "ButtonCloseFeed": "Zatvoriť zdroj",
"ButtonCloseSession": "Ukončiť otvorené pripojenie", "ButtonCloseSession": "Ukončiť aktívne relácie",
"ButtonCollections": "Kolekcie", "ButtonCollections": "Kolekcie",
"ButtonConfigureScanner": "Nastaviť skener", "ButtonConfigureScanner": "Nastaviť skener",
"ButtonCreate": "Vytvoriť", "ButtonCreate": "Vytvoriť",
@@ -150,12 +150,12 @@
"HeaderIgnoredFiles": "Ignorované súbory", "HeaderIgnoredFiles": "Ignorované súbory",
"HeaderItemFiles": "Položka Súbory", "HeaderItemFiles": "Položka Súbory",
"HeaderItemMetadataUtils": "Položka Nástroje metadát", "HeaderItemMetadataUtils": "Položka Nástroje metadát",
"HeaderLastListeningSession": "Posledné pripojenie", "HeaderLastListeningSession": "Posledná relácia",
"HeaderLatestEpisodes": "Posledné epizódy", "HeaderLatestEpisodes": "Posledné epizódy",
"HeaderLibraries": "Knižnice", "HeaderLibraries": "Knižnice",
"HeaderLibraryFiles": "Súbory knižnice", "HeaderLibraryFiles": "Súbory knižnice",
"HeaderLibraryStats": "Štatistiky knižnice", "HeaderLibraryStats": "Štatistiky knižnice",
"HeaderListeningSessions": "Pripojenia", "HeaderListeningSessions": "Relácie",
"HeaderListeningStats": "Štatistiky počúvania", "HeaderListeningStats": "Štatistiky počúvania",
"HeaderLogin": "Prihlásenie", "HeaderLogin": "Prihlásenie",
"HeaderLogs": "Záznamy udalostí", "HeaderLogs": "Záznamy udalostí",
@@ -172,7 +172,7 @@
"HeaderNotificationUpdate": "Aktualizovať notifikáciu", "HeaderNotificationUpdate": "Aktualizovať notifikáciu",
"HeaderNotifications": "Notifikácie", "HeaderNotifications": "Notifikácie",
"HeaderOpenIDConnectAuthentication": "Overenie pripojenia OpenID", "HeaderOpenIDConnectAuthentication": "Overenie pripojenia OpenID",
"HeaderOpenListeningSessions": "Aktívne pripojenia", "HeaderOpenListeningSessions": "Aktívne relácie",
"HeaderOpenRSSFeed": "Otvoriť RSS zdroj", "HeaderOpenRSSFeed": "Otvoriť RSS zdroj",
"HeaderOtherFiles": "Ostatné súbory", "HeaderOtherFiles": "Ostatné súbory",
"HeaderPasswordAuthentication": "Overenie heslom", "HeaderPasswordAuthentication": "Overenie heslom",
@@ -189,7 +189,7 @@
"HeaderRSSFeeds": "RSS zdroje", "HeaderRSSFeeds": "RSS zdroje",
"HeaderRemoveEpisode": "Odstrániť epizódu", "HeaderRemoveEpisode": "Odstrániť epizódu",
"HeaderRemoveEpisodes": "Odstrániť {0} epizód", "HeaderRemoveEpisodes": "Odstrániť {0} epizód",
"HeaderSavedMediaProgress": "Priebeh uložených médií", "HeaderSavedMediaProgress": "Stav uložených médií",
"HeaderSchedule": "Plán", "HeaderSchedule": "Plán",
"HeaderScheduleEpisodeDownloads": "Naplánovať automatické sťahovanie epizód", "HeaderScheduleEpisodeDownloads": "Naplánovať automatické sťahovanie epizód",
"HeaderScheduleLibraryScans": "Naplánovanovať automatické skenovanie knižnice", "HeaderScheduleLibraryScans": "Naplánovanovať automatické skenovanie knižnice",
@@ -222,7 +222,7 @@
"LabelAbridged": "Skrátená verzia", "LabelAbridged": "Skrátená verzia",
"LabelAbridgedChecked": "Skrátená verzia (zaškrtnuté)", "LabelAbridgedChecked": "Skrátená verzia (zaškrtnuté)",
"LabelAbridgedUnchecked": "Neskrátená verzia (nezaškrtnuté)", "LabelAbridgedUnchecked": "Neskrátená verzia (nezaškrtnuté)",
"LabelAccessibleBy": "Prístupné pre", "LabelAccessibleBy": "Dostupné pre",
"LabelAccountType": "Typ účtu", "LabelAccountType": "Typ účtu",
"LabelAccountTypeAdmin": "Administrátor", "LabelAccountTypeAdmin": "Administrátor",
"LabelAccountTypeGuest": "Hosť", "LabelAccountTypeGuest": "Hosť",
@@ -230,7 +230,7 @@
"LabelActivities": "Aktivity", "LabelActivities": "Aktivity",
"LabelActivity": "Aktivita", "LabelActivity": "Aktivita",
"LabelAddToCollection": "Pridať do zbierky", "LabelAddToCollection": "Pridať do zbierky",
"LabelAddToCollectionBatch": "Pridať {0} kníh do kolekcie", "LabelAddToCollectionBatch": "Pridať {0} kníh do zbierky",
"LabelAddToPlaylist": "Pridať do playlistu", "LabelAddToPlaylist": "Pridať do playlistu",
"LabelAddToPlaylistBatch": "Pridať {0} položie do playlistu", "LabelAddToPlaylistBatch": "Pridať {0} položie do playlistu",
"LabelAddedAt": "Pridané", "LabelAddedAt": "Pridané",
@@ -288,8 +288,8 @@
"LabelCodec": "Kodek", "LabelCodec": "Kodek",
"LabelCollapseSeries": "Zbaliť série", "LabelCollapseSeries": "Zbaliť série",
"LabelCollapseSubSeries": "Zbaliť podsérie", "LabelCollapseSubSeries": "Zbaliť podsérie",
"LabelCollection": "Kolekcia", "LabelCollection": "Zbierka",
"LabelCollections": "Kolekcie", "LabelCollections": "Zbierky",
"LabelComplete": "Hotovo", "LabelComplete": "Hotovo",
"LabelConfirmPassword": "Potvrdiť heslo", "LabelConfirmPassword": "Potvrdiť heslo",
"LabelContinueListening": "Pokračovať v počúvaní", "LabelContinueListening": "Pokračovať v počúvaní",
@@ -383,7 +383,7 @@
"LabelFolders": "Priečinky", "LabelFolders": "Priečinky",
"LabelFontBold": "Tučné", "LabelFontBold": "Tučné",
"LabelFontBoldness": "Hrúbka písma", "LabelFontBoldness": "Hrúbka písma",
"LabelFontFamily": "Rodina písiem", "LabelFontFamily": "písmo",
"LabelFontItalic": "Kurzíva", "LabelFontItalic": "Kurzíva",
"LabelFontScale": "Veľkosť písma", "LabelFontScale": "Veľkosť písma",
"LabelFontStrikethrough": "Preškrtnuté", "LabelFontStrikethrough": "Preškrtnuté",
@@ -436,9 +436,9 @@
"LabelLibraryFilterSublistEmpty": "Žiadne {0}", "LabelLibraryFilterSublistEmpty": "Žiadne {0}",
"LabelLibraryItem": "Položka knižnice", "LabelLibraryItem": "Položka knižnice",
"LabelLibraryName": "Názov knižnice", "LabelLibraryName": "Názov knižnice",
"LabelLibrarySortByProgress": "Pokrok: Aktualizované", "LabelLibrarySortByProgress": "Stav: Naposledy aktualizované",
"LabelLibrarySortByProgressFinished": "Pokrok: Dokončené", "LabelLibrarySortByProgressFinished": "Stav: Dokončené",
"LabelLibrarySortByProgressStarted": "Pokrok: Začiatok", "LabelLibrarySortByProgressStarted": "Stav: Začal",
"LabelLimit": "Limit", "LabelLimit": "Limit",
"LabelLineSpacing": "Riadkovanie", "LabelLineSpacing": "Riadkovanie",
"LabelListenAgain": "Počúvať znova", "LabelListenAgain": "Počúvať znova",
@@ -528,7 +528,7 @@
"LabelPrefixesToIgnore": "Ignorované predpony (bez ohľadu na veľkosť písmen)", "LabelPrefixesToIgnore": "Ignorované predpony (bez ohľadu na veľkosť písmen)",
"LabelPreventIndexing": "Zabráni indexácii vašich zdrojov službami iTunes a Google podcast directories", "LabelPreventIndexing": "Zabráni indexácii vašich zdrojov službami iTunes a Google podcast directories",
"LabelPrimaryEbook": "Primárny e-book", "LabelPrimaryEbook": "Primárny e-book",
"LabelProgress": "Stav", "LabelProgress": "Aktuálny stav",
"LabelProvider": "Poskytovateľ", "LabelProvider": "Poskytovateľ",
"LabelProviderAuthorizationValue": "Obsah hlavičky autorizácie", "LabelProviderAuthorizationValue": "Obsah hlavičky autorizácie",
"LabelPubDate": "Dátum publikovania", "LabelPubDate": "Dátum publikovania",
@@ -548,7 +548,7 @@
"LabelReAddSeriesToContinueListening": "Znova pridať série do pokračujúceho počúvania", "LabelReAddSeriesToContinueListening": "Znova pridať série do pokračujúceho počúvania",
"LabelRead": "Načítať", "LabelRead": "Načítať",
"LabelReadAgain": "Čítať znova", "LabelReadAgain": "Čítať znova",
"LabelReadEbookWithoutProgress": "Čítať e-knihu bez sledovania pokroku", "LabelReadEbookWithoutProgress": "Čítať e-knihu bez zmeny stavu",
"LabelRecentSeries": "Posledné série", "LabelRecentSeries": "Posledné série",
"LabelRecentlyAdded": "Posledné pridané", "LabelRecentlyAdded": "Posledné pridané",
"LabelRecommended": "Odporúčané", "LabelRecommended": "Odporúčané",
@@ -577,7 +577,7 @@
"LabelSerial": "Na pokračovanie", "LabelSerial": "Na pokračovanie",
"LabelSeries": "Série", "LabelSeries": "Série",
"LabelSeriesName": "Názov série", "LabelSeriesName": "Názov série",
"LabelSeriesProgress": "Pokrok série", "LabelSeriesProgress": "Aktuálny stav série",
"LabelServerLogLevel": "Úroveň logovania servera", "LabelServerLogLevel": "Úroveň logovania servera",
"LabelServerYearReview": "Rok servera v prehľade ({0})", "LabelServerYearReview": "Rok servera v prehľade ({0})",
"LabelSetEbookAsPrimary": "Nastaviť ako primárny", "LabelSetEbookAsPrimary": "Nastaviť ako primárny",
@@ -588,8 +588,8 @@
"LabelSettingsBookshelfViewHelp": "Skeuomorfný dizajn s drevenými poličkami", "LabelSettingsBookshelfViewHelp": "Skeuomorfný dizajn s drevenými poličkami",
"LabelSettingsChromecastSupport": "Podpora chromecastu", "LabelSettingsChromecastSupport": "Podpora chromecastu",
"LabelSettingsDateFormat": "Formát dátumu", "LabelSettingsDateFormat": "Formát dátumu",
"LabelSettingsEnableWatcher": "Automatické skenovanie knižníc pre zmeny", "LabelSettingsEnableWatcher": "Automatické sledovanie zmien v knižniciach",
"LabelSettingsEnableWatcherForLibrary": "Automaticky skenovať knižnicu pre zmeny", "LabelSettingsEnableWatcherForLibrary": "Automatické sledovanie zmien v knižnici",
"LabelSettingsEnableWatcherHelp": "Povoliť automatické pridávanie/aktualizácie položiek pri zmene súborov. *Vyžaduje reštart servera", "LabelSettingsEnableWatcherHelp": "Povoliť automatické pridávanie/aktualizácie položiek pri zmene súborov. *Vyžaduje reštart servera",
"LabelSettingsEpubsAllowScriptedContent": "Povoliť v e-knihách skriptovaný obsah", "LabelSettingsEpubsAllowScriptedContent": "Povoliť v e-knihách skriptovaný obsah",
"LabelSettingsEpubsAllowScriptedContentHelp": "Povoliť e-knihám spúšťanie skriptov. Odporúča sa túto voľbu nepovolovať, pokiaľ plne nedôverujete zdrojom súborov e-kníh.", "LabelSettingsEpubsAllowScriptedContentHelp": "Povoliť e-knihám spúšťanie skriptov. Odporúča sa túto voľbu nepovolovať, pokiaľ plne nedôverujete zdrojom súborov e-kníh.",
@@ -888,7 +888,7 @@
"MessageResetChaptersConfirm": "Ste si istý, že chcete resetnúť kapitoly a zahodiť zmeny, ktoré ste vykonali?", "MessageResetChaptersConfirm": "Ste si istý, že chcete resetnúť kapitoly a zahodiť zmeny, ktoré ste vykonali?",
"MessageRestoreBackupConfirm": "Ste si istí, že chcete obnoviť zálohu vytvorenú", "MessageRestoreBackupConfirm": "Ste si istí, že chcete obnoviť zálohu vytvorenú",
"MessageRestoreBackupWarning": "Obnovenie zálohy spôsobí kompletný prepis databázy umiestnenej v /config a obrázkov prebalov a autorov v /metadata/items a /metadata/authors.<br /><br />Zálohy nemenia žiadne súbory v priečinkoch vašej knižnice. Ak ste povolili v nastaveniach servera ukladanie obrázkov prebalov a metadát v priečinkoch knižnice, tieto nie sú zálohované a teda ani prepisované.<br /><br />Všetky klienti používajúci váš server budú automaticky obnovené.", "MessageRestoreBackupWarning": "Obnovenie zálohy spôsobí kompletný prepis databázy umiestnenej v /config a obrázkov prebalov a autorov v /metadata/items a /metadata/authors.<br /><br />Zálohy nemenia žiadne súbory v priečinkoch vašej knižnice. Ak ste povolili v nastaveniach servera ukladanie obrázkov prebalov a metadát v priečinkoch knižnice, tieto nie sú zálohované a teda ani prepisované.<br /><br />Všetky klienti používajúci váš server budú automaticky obnovené.",
"MessageScheduleLibraryScanNote": "Pre väčšinu používateľov sa odporúča ponechať túto funkciu vypnutú a povoliť nastavenia funkcie sledovania obsahu priečinku. Funkcia sledovania priečinku bude automaticky detekovať zmeny v priečinkoch knižnice. Táto funkcia však nefunguje pre všetky súborové systémy (ako napr. NFS), v tom prípade využite funkciu plánovaného skenovania knižnice.", "MessageScheduleLibraryScanNote": "Pre väčšinu používateľov sa odporúča nechať túto funkciu vypnutú a ponechať zapnuté nastavenie „Automatické sledovanie zmien v knižnici“ táto funkcia automaticky zistí zmeny vo vašich priečinkoch knižnice. Túto funkciu zapnite, ak „Automatické sledovanie zmien v knižnici“ nefunguje vo vašom súborovom systéme (napr. NFS).",
"MessageScheduleRunEveryWeekdayAtTime": "Spustiť každú {0} o {1}", "MessageScheduleRunEveryWeekdayAtTime": "Spustiť každú {0} o {1}",
"MessageSearchResultsFor": "Výsledky vyhľadávania pre", "MessageSearchResultsFor": "Výsledky vyhľadávania pre",
"MessageSelected": "{0} vybrané", "MessageSelected": "{0} vybrané",
@@ -1015,7 +1015,7 @@
"ToastCachePurgeFailed": "Vyčistenie vyrovnávacej pamäte zlyhalo", "ToastCachePurgeFailed": "Vyčistenie vyrovnávacej pamäte zlyhalo",
"ToastCachePurgeSuccess": "Vyrovnávacia pamäť vyčistená", "ToastCachePurgeSuccess": "Vyrovnávacia pamäť vyčistená",
"ToastChapterLocked": "Kapitola je zamknutá.", "ToastChapterLocked": "Kapitola je zamknutá.",
"ToastChapterStartTimeAdjusted": "Čas začiatku kapitoly upravený o {0} sek.", "ToastChapterStartTimeAdjusted": "Čas začiatku kapitoly upravený o {0} sekúnd",
"ToastChaptersAllLocked": "Všetky kapitoly sú zamknuté. Odomknite niektoré kapitoly, aby ste posunuli ich časy.", "ToastChaptersAllLocked": "Všetky kapitoly sú zamknuté. Odomknite niektoré kapitoly, aby ste posunuli ich časy.",
"ToastChaptersHaveErrors": "Kapitoly obsahujú chyby", "ToastChaptersHaveErrors": "Kapitoly obsahujú chyby",
"ToastChaptersInvalidShiftAmountLast": "Neplatná hodnota veľkosti posunutia. Začiatok poslednej kapitoly by ležal za koncom audioknihy.", "ToastChaptersInvalidShiftAmountLast": "Neplatná hodnota veľkosti posunutia. Začiatok poslednej kapitoly by ležal za koncom audioknihy.",
@@ -1026,6 +1026,8 @@
"ToastCollectionItemsAddFailed": "Pridanie položky/-iek do zbierky zlyhalo", "ToastCollectionItemsAddFailed": "Pridanie položky/-iek do zbierky zlyhalo",
"ToastCollectionRemoveSuccess": "Zbierka odstránená", "ToastCollectionRemoveSuccess": "Zbierka odstránená",
"ToastCollectionUpdateSuccess": "Zbierka aktualizovaná", "ToastCollectionUpdateSuccess": "Zbierka aktualizovaná",
"ToastConnectionNotAvailable": "Pripojenie je nedostupné. Skúste to neskôr",
"ToastCoverSearchFailed": "Vyhľadanie obalu sa nepodarilo",
"ToastCoverUpdateFailed": "Aktualizácia prebalu zlyhala", "ToastCoverUpdateFailed": "Aktualizácia prebalu zlyhala",
"ToastDateTimeInvalidOrIncomplete": "Dátum a čas sú neplatné alebo neúplné", "ToastDateTimeInvalidOrIncomplete": "Dátum a čas sú neplatné alebo neúplné",
"ToastDeleteFileFailed": "Odstránenie súboru zlyhalo", "ToastDeleteFileFailed": "Odstránenie súboru zlyhalo",
+10 -8
View File
@@ -104,7 +104,7 @@
"ButtonStartM4BEncode": "Zaženi M4B prekodiranje", "ButtonStartM4BEncode": "Zaženi M4B prekodiranje",
"ButtonStartMetadataEmbed": "Začni vdelavo metapodatkov", "ButtonStartMetadataEmbed": "Začni vdelavo metapodatkov",
"ButtonStats": "Statistika", "ButtonStats": "Statistika",
"ButtonSubmit": "Potrdi", "ButtonSubmit": "Pošlji",
"ButtonTest": "Test", "ButtonTest": "Test",
"ButtonUnlinkOpenId": "Prekini povezavo OpenID", "ButtonUnlinkOpenId": "Prekini povezavo OpenID",
"ButtonUpload": "Naloži", "ButtonUpload": "Naloži",
@@ -383,7 +383,7 @@
"LabelFolders": "Mape", "LabelFolders": "Mape",
"LabelFontBold": "Krepko", "LabelFontBold": "Krepko",
"LabelFontBoldness": "Krepkost pisave", "LabelFontBoldness": "Krepkost pisave",
"LabelFontFamily": "Družina pisave", "LabelFontFamily": "Družina pisav",
"LabelFontItalic": "Ležeče", "LabelFontItalic": "Ležeče",
"LabelFontScale": "Merilo pisave", "LabelFontScale": "Merilo pisave",
"LabelFontStrikethrough": "Prečrtano", "LabelFontStrikethrough": "Prečrtano",
@@ -436,9 +436,9 @@
"LabelLibraryFilterSublistEmpty": "Ne {0}", "LabelLibraryFilterSublistEmpty": "Ne {0}",
"LabelLibraryItem": "Element knjižnice", "LabelLibraryItem": "Element knjižnice",
"LabelLibraryName": "Ime knjižnice", "LabelLibraryName": "Ime knjižnice",
"LabelLibrarySortByProgress": "Napredek: Nazadnje posodobljen", "LabelLibrarySortByProgress": "Napredek: Zadnja posodobitev",
"LabelLibrarySortByProgressFinished": "Napredej: Končano", "LabelLibrarySortByProgressFinished": "Napredek: Končano",
"LabelLibrarySortByProgressStarted": "Napredek: Začeto", "LabelLibrarySortByProgressStarted": "Napredek: Začelo se je",
"LabelLimit": "Omejitev", "LabelLimit": "Omejitev",
"LabelLineSpacing": "Vrstični razmak", "LabelLineSpacing": "Vrstični razmak",
"LabelListenAgain": "Poslušaj znova", "LabelListenAgain": "Poslušaj znova",
@@ -588,8 +588,8 @@
"LabelSettingsBookshelfViewHelp": "Skeuomorfna oblika z lesenimi policami", "LabelSettingsBookshelfViewHelp": "Skeuomorfna oblika z lesenimi policami",
"LabelSettingsChromecastSupport": "Podpora za Chromecast", "LabelSettingsChromecastSupport": "Podpora za Chromecast",
"LabelSettingsDateFormat": "Oblika datuma", "LabelSettingsDateFormat": "Oblika datuma",
"LabelSettingsEnableWatcher": "Samodejno preglej knjižnice za spremembe", "LabelSettingsEnableWatcher": "Samodejno preišči knjižnice za spremembe",
"LabelSettingsEnableWatcherForLibrary": "Samodejno preglej knjižnico za spremembe", "LabelSettingsEnableWatcherForLibrary": "Samodejno preišči knjižnico za spremembe",
"LabelSettingsEnableWatcherHelp": "Omogoča samodejno dodajanje/posodabljanje elementov, ko so zaznane spremembe datoteke. *Potreben je ponovni zagon strežnika", "LabelSettingsEnableWatcherHelp": "Omogoča samodejno dodajanje/posodabljanje elementov, ko so zaznane spremembe datoteke. *Potreben je ponovni zagon strežnika",
"LabelSettingsEpubsAllowScriptedContent": "Dovoli skriptirano vsebino v epubih", "LabelSettingsEpubsAllowScriptedContent": "Dovoli skriptirano vsebino v epubih",
"LabelSettingsEpubsAllowScriptedContentHelp": "Dovoli datotekam epub izvajanje skript. Priporočljivo je, da to nastavitev pustite onemogočeno, razen če zaupate viru datotek epub.", "LabelSettingsEpubsAllowScriptedContentHelp": "Dovoli datotekam epub izvajanje skript. Priporočljivo je, da to nastavitev pustite onemogočeno, razen če zaupate viru datotek epub.",
@@ -888,7 +888,7 @@
"MessageResetChaptersConfirm": "Ali ste prepričani, da želite ponastaviti poglavja in razveljaviti spremembe, ki ste jih naredili?", "MessageResetChaptersConfirm": "Ali ste prepričani, da želite ponastaviti poglavja in razveljaviti spremembe, ki ste jih naredili?",
"MessageRestoreBackupConfirm": "Ali ste prepričani, da želite obnoviti varnostno kopijo, ustvarjeno ob", "MessageRestoreBackupConfirm": "Ali ste prepričani, da želite obnoviti varnostno kopijo, ustvarjeno ob",
"MessageRestoreBackupWarning": "Obnovitev varnostne kopije bo prepisala celotno zbirko podatkov, ki se nahaja v /config, in zajema slike v /metadata/items in /metadata/authors.<br /><br />Varnostne kopije ne spreminjajo nobenih datotek v mapah vaše knjižnice. Če ste omogočili nastavitve strežnika za shranjevanje naslovnic in metapodatkov v mapah vaše knjižnice, potem ti niso varnostno kopirani ali prepisani.<br /><br />Vsi odjemalci, ki uporabljajo vaš strežnik, bodo samodejno osveženi.", "MessageRestoreBackupWarning": "Obnovitev varnostne kopije bo prepisala celotno zbirko podatkov, ki se nahaja v /config, in zajema slike v /metadata/items in /metadata/authors.<br /><br />Varnostne kopije ne spreminjajo nobenih datotek v mapah vaše knjižnice. Če ste omogočili nastavitve strežnika za shranjevanje naslovnic in metapodatkov v mapah vaše knjižnice, potem ti niso varnostno kopirani ali prepisani.<br /><br />Vsi odjemalci, ki uporabljajo vaš strežnik, bodo samodejno osveženi.",
"MessageScheduleLibraryScanNote": "Za večino uporabnikov je priporočljivo, da to funkcijo pustite onemogočeno in ohranite nastavitev pregledovalnika map omogočeno. Pregledovalnik map bo samodejno zaznal spremembe v mapah vaše knjižnice. Pregledovalnik map ne deluje za vse datotečne sisteme (na primer NFS), zato lahko namesto tega uporabite načrtovane preglede knjižnic.", "MessageScheduleLibraryScanNote": "Za večino uporabnikov je priporočljivo, da to funkcijo pustijo onemogočeno in ohranijo nastavitev »Samodejno spremljaj knjižnico za spremembe« omogočeno samodejno bo zaznala spremembe v mapah vaše knjižnice. Omogočite to funkcijo, če »Samodejno spremljaj knjižnico za spremembe« ne deluje za v datotečni sistem (kot je NFS).",
"MessageScheduleRunEveryWeekdayAtTime": "Zaženi vsakih {0} ob {1}", "MessageScheduleRunEveryWeekdayAtTime": "Zaženi vsakih {0} ob {1}",
"MessageSearchResultsFor": "Rezultati iskanja za", "MessageSearchResultsFor": "Rezultati iskanja za",
"MessageSelected": "{0} izbrano", "MessageSelected": "{0} izbrano",
@@ -1026,6 +1026,8 @@
"ToastCollectionItemsAddFailed": "Dodajanje elementov v zbirko ni uspelo", "ToastCollectionItemsAddFailed": "Dodajanje elementov v zbirko ni uspelo",
"ToastCollectionRemoveSuccess": "Zbirka je bila odstranjena", "ToastCollectionRemoveSuccess": "Zbirka je bila odstranjena",
"ToastCollectionUpdateSuccess": "Zbirka je bila posodobljena", "ToastCollectionUpdateSuccess": "Zbirka je bila posodobljena",
"ToastConnectionNotAvailable": "Povezava ni na voljo. Poskusite znova pozneje",
"ToastCoverSearchFailed": "Iskanje naslovnice ni uspelo",
"ToastCoverUpdateFailed": "Posodobitev naslovnice ni uspela", "ToastCoverUpdateFailed": "Posodobitev naslovnice ni uspela",
"ToastDateTimeInvalidOrIncomplete": "Datum in čas sta neveljavna ali nepopolna", "ToastDateTimeInvalidOrIncomplete": "Datum in čas sta neveljavna ali nepopolna",
"ToastDeleteFileFailed": "Brisanje datoteke ni uspelo", "ToastDeleteFileFailed": "Brisanje datoteke ni uspelo",
+47 -19
View File
@@ -1,6 +1,6 @@
{ {
"ButtonAdd": "Lägg till", "ButtonAdd": "Lägg till",
"ButtonAddApiKey": "Addera API-nyckel", "ButtonAddApiKey": "Lägg till API-nyckel",
"ButtonAddChapters": "Lägg till kapitel", "ButtonAddChapters": "Lägg till kapitel",
"ButtonAddDevice": "Lägg till enhet", "ButtonAddDevice": "Lägg till enhet",
"ButtonAddLibrary": "Lägg till bibliotek", "ButtonAddLibrary": "Lägg till bibliotek",
@@ -48,7 +48,7 @@
"ButtonLogout": "Logga ut", "ButtonLogout": "Logga ut",
"ButtonLookup": "Sök", "ButtonLookup": "Sök",
"ButtonManageTracks": "Hantera spår", "ButtonManageTracks": "Hantera spår",
"ButtonMapChapterTitles": "Karta kapitelrubriker", "ButtonMapChapterTitles": "Mappa kapitelrubriker",
"ButtonMatchAllAuthors": "Matcha alla författare", "ButtonMatchAllAuthors": "Matcha alla författare",
"ButtonMatchBooks": "Matcha böcker", "ButtonMatchBooks": "Matcha böcker",
"ButtonNevermind": "Glöm det", "ButtonNevermind": "Glöm det",
@@ -104,7 +104,7 @@
"ButtonStartM4BEncode": "Starta M4B-omkodning", "ButtonStartM4BEncode": "Starta M4B-omkodning",
"ButtonStartMetadataEmbed": "Infoga metadata", "ButtonStartMetadataEmbed": "Infoga metadata",
"ButtonStats": "Statistik", "ButtonStats": "Statistik",
"ButtonSubmit": "Spara", "ButtonSubmit": "Skicka",
"ButtonTest": "Testa", "ButtonTest": "Testa",
"ButtonUnlinkOpenId": "Koppla ifrån OpenID", "ButtonUnlinkOpenId": "Koppla ifrån OpenID",
"ButtonUpload": "Ladda upp", "ButtonUpload": "Ladda upp",
@@ -123,7 +123,7 @@
"HeaderAdvanced": "Avancerad", "HeaderAdvanced": "Avancerad",
"HeaderApiKeys": "API-nyckel", "HeaderApiKeys": "API-nyckel",
"HeaderAppriseNotificationSettings": "Inställningar av meddelanden med Apprise", "HeaderAppriseNotificationSettings": "Inställningar av meddelanden med Apprise",
"HeaderAudioTracks": "Ljudfiler", "HeaderAudioTracks": "Ljudspår",
"HeaderAudiobookTools": "Hantering av ljudboksfiler", "HeaderAudiobookTools": "Hantering av ljudboksfiler",
"HeaderAuthentication": "Autentisering", "HeaderAuthentication": "Autentisering",
"HeaderBackups": "Säkerhetskopior", "HeaderBackups": "Säkerhetskopior",
@@ -202,7 +202,7 @@
"HeaderSettingsScanner": "Skanner", "HeaderSettingsScanner": "Skanner",
"HeaderSettingsSecurity": "Säkerhet", "HeaderSettingsSecurity": "Säkerhet",
"HeaderSettingsWebClient": "Webklient", "HeaderSettingsWebClient": "Webklient",
"HeaderSleepTimer": "Timer för att sova", "HeaderSleepTimer": "Insomningstimer",
"HeaderStatsLargestItems": "Största objekten", "HeaderStatsLargestItems": "Största objekten",
"HeaderStatsLongestItems": "Längsta objekten (timmar)", "HeaderStatsLongestItems": "Längsta objekten (timmar)",
"HeaderStatsMinutesListeningChart": "Minuters lyssning (senaste 7 dagarna)", "HeaderStatsMinutesListeningChart": "Minuters lyssning (senaste 7 dagarna)",
@@ -231,10 +231,10 @@
"LabelActivity": "Aktivitet", "LabelActivity": "Aktivitet",
"LabelAddToCollection": "Lägg till i en samling", "LabelAddToCollection": "Lägg till i en samling",
"LabelAddToCollectionBatch": "Lägg till {0} böcker i samlingen", "LabelAddToCollectionBatch": "Lägg till {0} böcker i samlingen",
"LabelAddToPlaylist": "Lägg till i en spellista", "LabelAddToPlaylist": "Lägg till i spellista",
"LabelAddToPlaylistBatch": "Lägg till {0} objekt i Spellistan", "LabelAddToPlaylistBatch": "Lägg till {0} objekt i Spellistan",
"LabelAddedAt": "Datum adderad", "LabelAddedAt": "Datum adderad",
"LabelAddedDate": "Adderad {0}", "LabelAddedDate": "Tillagd {0}",
"LabelAdminUsersOnly": "Endast administratörer", "LabelAdminUsersOnly": "Endast administratörer",
"LabelAll": "Alla", "LabelAll": "Alla",
"LabelAllEpisodesDownloaded": "Alla avsnitt är nedladdade", "LabelAllEpisodesDownloaded": "Alla avsnitt är nedladdade",
@@ -363,14 +363,14 @@
"LabelExpiresAt": "Gäller till och med", "LabelExpiresAt": "Gäller till och med",
"LabelExpiresInSeconds": "Upphör om (sekunder)", "LabelExpiresInSeconds": "Upphör om (sekunder)",
"LabelExpiresNever": "Aldrig", "LabelExpiresNever": "Aldrig",
"LabelExplicit": "Bestämd", "LabelExplicit": "Vuxeninnehåll",
"LabelExplicitChecked": "Explicit version (markerad)", "LabelExplicitChecked": "Explicit version (markerad)",
"LabelExplicitUnchecked": "Ej Explicit version (ej markerad)", "LabelExplicitUnchecked": "Ej Explicit version (ej markerad)",
"LabelExportOPML": "Exportera OPML-information", "LabelExportOPML": "Exportera OPML-information",
"LabelFeedURL": "URL-adress för flödet", "LabelFeedURL": "URL-adress för flödet",
"LabelFetchingMetadata": "Hämtar metadata", "LabelFetchingMetadata": "Hämtar metadata",
"LabelFile": "Fil", "LabelFile": "Fil",
"LabelFileBirthtime": "Tidpunkt, adderad", "LabelFileBirthtime": "Tidpunkt, tillagd",
"LabelFileBornDate": "Skapad {0}", "LabelFileBornDate": "Skapad {0}",
"LabelFileModified": "Tidpunkt, ändrad", "LabelFileModified": "Tidpunkt, ändrad",
"LabelFileModifiedDate": "Ändrad {0}", "LabelFileModifiedDate": "Ändrad {0}",
@@ -385,13 +385,13 @@
"LabelFontBoldness": "Fetstil", "LabelFontBoldness": "Fetstil",
"LabelFontFamily": "Typsnittsfamilj", "LabelFontFamily": "Typsnittsfamilj",
"LabelFontItalic": "Kursiv", "LabelFontItalic": "Kursiv",
"LabelFontScale": "Skala på typsnitt", "LabelFontScale": "Storlek på typsnitt",
"LabelFontStrikethrough": "Genomstruken", "LabelFontStrikethrough": "Genomstruken",
"LabelFormat": "Format", "LabelFormat": "Format",
"LabelFull": "Komplett", "LabelFull": "Komplett",
"LabelGenre": "Kategori", "LabelGenre": "Kategori",
"LabelGenres": "Kategorier", "LabelGenres": "Kategorier",
"LabelHardDeleteFile": "Hård radering av fil", "LabelHardDeleteFile": "Permanent radering av fil",
"LabelHasEbook": "Har e-bok", "LabelHasEbook": "Har e-bok",
"LabelHasSupplementaryEbook": "Har kompletterande e-bok", "LabelHasSupplementaryEbook": "Har kompletterande e-bok",
"LabelHideSubtitles": "Dölj underrubriker", "LabelHideSubtitles": "Dölj underrubriker",
@@ -436,9 +436,9 @@
"LabelLibraryFilterSublistEmpty": "Ingen {0}", "LabelLibraryFilterSublistEmpty": "Ingen {0}",
"LabelLibraryItem": "Objekt", "LabelLibraryItem": "Objekt",
"LabelLibraryName": "Biblioteksnamn", "LabelLibraryName": "Biblioteksnamn",
"LabelLibrarySortByProgress": "Framsteg uppdaterat", "LabelLibrarySortByProgress": "Status: Senast uppdaterad",
"LabelLibrarySortByProgressFinished": "Avslutsdag", "LabelLibrarySortByProgressFinished": "Status: Avslutad",
"LabelLibrarySortByProgressStarted": "Startdag", "LabelLibrarySortByProgressStarted": "Status: Startad",
"LabelLimit": "Begränsning", "LabelLimit": "Begränsning",
"LabelLineSpacing": "Radavstånd", "LabelLineSpacing": "Radavstånd",
"LabelListenAgain": "Lyssna igen", "LabelListenAgain": "Lyssna igen",
@@ -588,8 +588,8 @@
"LabelSettingsBookshelfViewHelp": "Bakgrund med ett utseende liknande en bokhylla i trä", "LabelSettingsBookshelfViewHelp": "Bakgrund med ett utseende liknande en bokhylla i trä",
"LabelSettingsChromecastSupport": "Stöd för Chromecast", "LabelSettingsChromecastSupport": "Stöd för Chromecast",
"LabelSettingsDateFormat": "Datumformat", "LabelSettingsDateFormat": "Datumformat",
"LabelSettingsEnableWatcher": "Upptäck automatiskt förändringar i biblioteket", "LabelSettingsEnableWatcher": "Bevaka automatiskt förändringar i biblioteken",
"LabelSettingsEnableWatcherForLibrary": "Upptäck automatiskt förändringar i biblioteket", "LabelSettingsEnableWatcherForLibrary": "Bevaka biblioteket automatiskt efter ändringar",
"LabelSettingsEnableWatcherHelp": "Aktiverar automatik att upptäcka när objekt<br>adderas, uppdateras eller raderas.<br>OBS: Kräver en omstart av servern", "LabelSettingsEnableWatcherHelp": "Aktiverar automatik att upptäcka när objekt<br>adderas, uppdateras eller raderas.<br>OBS: Kräver en omstart av servern",
"LabelSettingsEpubsAllowScriptedContent": "Tillåt e-böcker i epubs-format som innehåller script", "LabelSettingsEpubsAllowScriptedContent": "Tillåt e-böcker i epubs-format som innehåller script",
"LabelSettingsEpubsAllowScriptedContentHelp": "Tillåt att epub-filer får innehålla script.<br>Det rekommenderas att denna inställning är<br>avstängd när du inte litar på källan för epub-filerna.", "LabelSettingsEpubsAllowScriptedContentHelp": "Tillåt att epub-filer får innehålla script.<br>Det rekommenderas att denna inställning är<br>avstängd när du inte litar på källan för epub-filerna.",
@@ -629,7 +629,7 @@
"LabelShowSeconds": "Visa i sekunder", "LabelShowSeconds": "Visa i sekunder",
"LabelShowSubtitles": "Visa underrubriker", "LabelShowSubtitles": "Visa underrubriker",
"LabelSize": "Storlek", "LabelSize": "Storlek",
"LabelSleepTimer": "Sovtimer", "LabelSleepTimer": "Insomningstimer",
"LabelSlug": "Kortnamn", "LabelSlug": "Kortnamn",
"LabelSortAscending": "Stigande", "LabelSortAscending": "Stigande",
"LabelSortDescending": "Fallande", "LabelSortDescending": "Fallande",
@@ -724,6 +724,7 @@
"LabelViewQueue": "Visa spellista", "LabelViewQueue": "Visa spellista",
"LabelVolume": "Volym", "LabelVolume": "Volym",
"LabelWebRedirectURLsDescription": "Auktorisera dessa URLer i din OAuth-leverantör för att tillåta omdirigering tillbaka till webbappen efter inloggning:", "LabelWebRedirectURLsDescription": "Auktorisera dessa URLer i din OAuth-leverantör för att tillåta omdirigering tillbaka till webbappen efter inloggning:",
"LabelWebRedirectURLsSubfolder": "Undermappar för omdirigeringslänkar",
"LabelWeekdaysToRun": "Veckodagar att köra skanning", "LabelWeekdaysToRun": "Veckodagar att köra skanning",
"LabelXBooks": "{0} böcker", "LabelXBooks": "{0} böcker",
"LabelXItems": "{0} objekt", "LabelXItems": "{0} objekt",
@@ -752,6 +753,7 @@
"MessageBookshelfNoResultsForFilter": "Inga resultat för filter \"{0}: {1}\"", "MessageBookshelfNoResultsForFilter": "Inga resultat för filter \"{0}: {1}\"",
"MessageBookshelfNoResultsForQuery": "Sökningen gav inget resultat", "MessageBookshelfNoResultsForQuery": "Sökningen gav inget resultat",
"MessageBookshelfNoSeries": "Du har inga serier", "MessageBookshelfNoSeries": "Du har inga serier",
"MessageBulkChapterPattern": "Hur många kapitel vill du lägga till med detta numreringsmönster?",
"MessageChapterEndIsAfter": "Kapitelns slut är efter din ljudboks slut", "MessageChapterEndIsAfter": "Kapitelns slut är efter din ljudboks slut",
"MessageChapterErrorFirstNotZero": "Första kapitlet måste börja vid 0", "MessageChapterErrorFirstNotZero": "Första kapitlet måste börja vid 0",
"MessageChapterErrorStartGteDuration": "Ogiltig starttid, måste vara mindre än ljudbokens längd", "MessageChapterErrorStartGteDuration": "Ogiltig starttid, måste vara mindre än ljudbokens längd",
@@ -778,6 +780,7 @@
"MessageConfirmMarkItemNotFinished": "Är du säker på att du vill markera \"{0}\" som ej avslutad?", "MessageConfirmMarkItemNotFinished": "Är du säker på att du vill markera \"{0}\" som ej avslutad?",
"MessageConfirmMarkSeriesFinished": "Är du säker på att du vill markera alla böcker i denna serie som avslutade?", "MessageConfirmMarkSeriesFinished": "Är du säker på att du vill markera alla böcker i denna serie som avslutade?",
"MessageConfirmMarkSeriesNotFinished": "Är du säker på att du vill markera alla böcker i denna serie som ej avslutade?", "MessageConfirmMarkSeriesNotFinished": "Är du säker på att du vill markera alla böcker i denna serie som ej avslutade?",
"MessageConfirmNotificationTestTrigger": "Trigga denna avisering med testdata?",
"MessageConfirmPurgeCache": "När du rensar cashen kommer katalogen <code>/metadata/cache</code> att raderas. <br /><br />Är du säker på att du vill radera katalogen?", "MessageConfirmPurgeCache": "När du rensar cashen kommer katalogen <code>/metadata/cache</code> att raderas. <br /><br />Är du säker på att du vill radera katalogen?",
"MessageConfirmPurgeItemsCache": "När du rensar cashen för objekten kommer katalogen <code>/metadata/cache/items</code> att raderas. <br /><br />Är du säker på att du vill radera katalogen?", "MessageConfirmPurgeItemsCache": "När du rensar cashen för objekten kommer katalogen <code>/metadata/cache/items</code> att raderas. <br /><br />Är du säker på att du vill radera katalogen?",
"MessageConfirmQuickEmbed": "VARNING! När du infogar metadata i dina ljudfiler kommer INGEN SÄKERHETSKOPIA av filerna att göras. Se därför till att först säkerhetskopiera ljudfilerna. <br><br>Vill du fortsätta?", "MessageConfirmQuickEmbed": "VARNING! När du infogar metadata i dina ljudfiler kommer INGEN SÄKERHETSKOPIA av filerna att göras. Se därför till att först säkerhetskopiera ljudfilerna. <br><br>Vill du fortsätta?",
@@ -787,6 +790,7 @@
"MessageConfirmRemoveAuthor": "Är du säker på att du vill ta bort författaren \"{0}\"?", "MessageConfirmRemoveAuthor": "Är du säker på att du vill ta bort författaren \"{0}\"?",
"MessageConfirmRemoveCollection": "Är du säker på att du vill ta bort samlingen \"{0}\"?", "MessageConfirmRemoveCollection": "Är du säker på att du vill ta bort samlingen \"{0}\"?",
"MessageConfirmRemoveEpisode": "Är du säker på att du vill radera avsnittet \"{0}\"?", "MessageConfirmRemoveEpisode": "Är du säker på att du vill radera avsnittet \"{0}\"?",
"MessageConfirmRemoveEpisodeNote": "OBSERERA: Detta tar inte bort ljudfilen om inte \"Permanent radering av fil\" är aktiverad",
"MessageConfirmRemoveEpisodes": "Är du säker på att du vill radera {0} avsnitt?", "MessageConfirmRemoveEpisodes": "Är du säker på att du vill radera {0} avsnitt?",
"MessageConfirmRemoveListeningSessions": "Är du säker på att du vill radera {0} lyssningstillfällen?", "MessageConfirmRemoveListeningSessions": "Är du säker på att du vill radera {0} lyssningstillfällen?",
"MessageConfirmRemoveMetadataFiles": "Är du säker på att du vill radera filerna 'metadata.{0}' i alla mappar i ditt bibliotek?", "MessageConfirmRemoveMetadataFiles": "Är du säker på att du vill radera filerna 'metadata.{0}' i alla mappar i ditt bibliotek?",
@@ -804,16 +808,20 @@
"MessageDaysListenedInTheLastYear": "{0} dagars lyssnande det senaste året", "MessageDaysListenedInTheLastYear": "{0} dagars lyssnande det senaste året",
"MessageDownloadingEpisode": "Laddar ner avsnitt", "MessageDownloadingEpisode": "Laddar ner avsnitt",
"MessageDragFilesIntoTrackOrder": "Ändra ordningen genom att klicka och dra filerna till rätt plats", "MessageDragFilesIntoTrackOrder": "Ändra ordningen genom att klicka och dra filerna till rätt plats",
"MessageEmbedFailed": "Inbäddning misslyckades!",
"MessageEmbedFinished": "Inbäddning genomförd!", "MessageEmbedFinished": "Inbäddning genomförd!",
"MessageEmbedQueue": "Köad för inbäddning av metadata plats ({0} i kön)",
"MessageEpisodesQueuedForDownload": "{0} avsnitt i kö för nedladdning", "MessageEpisodesQueuedForDownload": "{0} avsnitt i kö för nedladdning",
"MessageEreaderDevices": "För att säkerställa överföring av e-böcker kan du bli tvungen<br>att addera ovanstående e-postadress som godkänd avsändare<br>för varje enhet angiven nedan.", "MessageEreaderDevices": "För att säkerställa överföring av e-böcker kan du bli tvungen<br>att addera ovanstående e-postadress som godkänd avsändare<br>för varje enhet angiven nedan.",
"MessageFeedURLWillBe": "Flödes-URL kommer att vara {0}", "MessageFeedURLWillBe": "Flödes-URL kommer att vara {0}",
"MessageFetching": "Hämtar...", "MessageFetching": "Hämtar...",
"MessageForceReScanDescription": "kommer att göra en omgångssökning av alla filer som en färsk sökning. ID3-taggar för ljudfiler, OPF-filer och textfiler kommer att sökas som nya.", "MessageForceReScanDescription": "kommer att göra en omgångssökning av alla filer som en färsk sökning. ID3-taggar för ljudfiler, OPF-filer och textfiler kommer att sökas som nya.",
"MessageHeatmapListeningTimeTooltip": "<strong>{0} lyssnar</strong> på {1}",
"MessageHeatmapNoListeningSessions": "Inga lyssningssessioner på {0}",
"MessageImportantNotice": "Viktig meddelande!", "MessageImportantNotice": "Viktig meddelande!",
"MessageInsertChapterBelow": "Infoga kapitel nedanför", "MessageInsertChapterBelow": "Infoga kapitel nedanför",
"MessageInvalidAsin": "Felaktig ASIN-kod", "MessageInvalidAsin": "Felaktig ASIN-kod",
"MessageItemsSelected": "{0} objekt markerade", "MessageItemsSelected": "{0} objekt valda",
"MessageItemsUpdated": "{0} objekt uppdaterade", "MessageItemsUpdated": "{0} objekt uppdaterade",
"MessageJoinUsOn": "Anslut dig till oss på", "MessageJoinUsOn": "Anslut dig till oss på",
"MessageLoading": "Laddar...", "MessageLoading": "Laddar...",
@@ -849,6 +857,7 @@
"MessageNoLogs": "Inga loggningsinformation finns", "MessageNoLogs": "Inga loggningsinformation finns",
"MessageNoMediaProgress": "Ingen medieförlopp", "MessageNoMediaProgress": "Ingen medieförlopp",
"MessageNoNotifications": "Inga aviseringar", "MessageNoNotifications": "Inga aviseringar",
"MessageNoPodcastFeed": "Felaktig podcast: ingen ström",
"MessageNoPodcastsFound": "Inga podcasts hittade", "MessageNoPodcastsFound": "Inga podcasts hittade",
"MessageNoResults": "Inga resultat", "MessageNoResults": "Inga resultat",
"MessageNoSearchResultsFor": "Inga sökresultat för \"{0}\"", "MessageNoSearchResultsFor": "Inga sökresultat för \"{0}\"",
@@ -859,6 +868,7 @@
"MessageNoUserPlaylists": "Du har inga spellistor", "MessageNoUserPlaylists": "Du har inga spellistor",
"MessageNoUserPlaylistsHelp": "Spellistor är privata. Endast den användare som skapat listan kan se den.", "MessageNoUserPlaylistsHelp": "Spellistor är privata. Endast den användare som skapat listan kan se den.",
"MessageNotYetImplemented": "Ännu inte implementerad", "MessageNotYetImplemented": "Ännu inte implementerad",
"MessageOpmlPreviewNote": "Obs: Detta är en förhandsvisning av den analyserade OPML-filen. Den faktiska podcasttiteln kommer att hämtas från RSS-flödet.",
"MessageOr": "eller", "MessageOr": "eller",
"MessagePauseChapter": "Pausa kapiteluppspelning", "MessagePauseChapter": "Pausa kapiteluppspelning",
"MessagePlayChapter": "Lyssna på kapitlets början", "MessagePlayChapter": "Lyssna på kapitlets början",
@@ -878,7 +888,7 @@
"MessageResetChaptersConfirm": "Är du säker på att du vill återställa alla kapitel och ångra de ändringarna du gjort?", "MessageResetChaptersConfirm": "Är du säker på att du vill återställa alla kapitel och ångra de ändringarna du gjort?",
"MessageRestoreBackupConfirm": "Är du säker på att du vill läsa in säkerhetskopian som skapades den", "MessageRestoreBackupConfirm": "Är du säker på att du vill läsa in säkerhetskopian som skapades den",
"MessageRestoreBackupWarning": "Att återställa en säkerhetskopia kommer att skriva över hela databasen som finns i /config och omslagsbilder i /metadata/items & /metadata/authors.<br /><br />Säkerhetskopior ändrar inte några filer i dina biblioteksmappar. Om du har aktiverat serverinställningar för att lagra omslagskonst och metadata i dina biblioteksmappar säkerhetskopieras eller skrivs de inte över.<br /><br />Alla klienter som använder din server kommer att uppdateras automatiskt.", "MessageRestoreBackupWarning": "Att återställa en säkerhetskopia kommer att skriva över hela databasen som finns i /config och omslagsbilder i /metadata/items & /metadata/authors.<br /><br />Säkerhetskopior ändrar inte några filer i dina biblioteksmappar. Om du har aktiverat serverinställningar för att lagra omslagskonst och metadata i dina biblioteksmappar säkerhetskopieras eller skrivs de inte över.<br /><br />Alla klienter som använder din server kommer att uppdateras automatiskt.",
"MessageScheduleLibraryScanNote": "För de flesta användare rekommenderas att denna funktion ej aktiveras. Istället bör funktionen som automatisk upptäcker ändringar i biblioteket vara aktiverad. För vissa filsystem (som t.ex. NFS) fungerar inte denna funktion. Då kan schemalagda skanningar av biblioteken användas istället.", "MessageScheduleLibraryScanNote": "För de flesta användare rekommenderas det att låta den här funktionen vara inaktiverad och att inställningen \"Bevaka biblioteket automatiskt efter ändringar\" är aktiverad den kommer automatiskt att upptäcka ändringar i dina biblioteksmappar. Aktivera den här funktionen om \"Bevaka biblioteket automatiskt efter ändringar\" inte fungerar för ditt filsystem (som NFS).",
"MessageScheduleRunEveryWeekdayAtTime": "Startar varje {0} klockan {1}", "MessageScheduleRunEveryWeekdayAtTime": "Startar varje {0} klockan {1}",
"MessageSearchResultsFor": "Sökresultat för", "MessageSearchResultsFor": "Sökresultat för",
"MessageSelected": "{0} valda", "MessageSelected": "{0} valda",
@@ -887,12 +897,14 @@
"MessageSetChaptersFromTracksDescription": "Använd varje ljudfil som ett kapitel och ljudfilens namn som kapitlets rubrik", "MessageSetChaptersFromTracksDescription": "Använd varje ljudfil som ett kapitel och ljudfilens namn som kapitlets rubrik",
"MessageShareExpirationWillBe": "Giltig till kommer att bli <strong>{0}</strong>", "MessageShareExpirationWillBe": "Giltig till kommer att bli <strong>{0}</strong>",
"MessageShareExpiresIn": "Upphör om {0}", "MessageShareExpiresIn": "Upphör om {0}",
"MessageShareURLWillBe": "Delningslänken kommer att vara <strong>{0}</strong>",
"MessageStartPlaybackAtTime": "Starta uppspelning av \"{0}\" från tidpunkt {1}?", "MessageStartPlaybackAtTime": "Starta uppspelning av \"{0}\" från tidpunkt {1}?",
"MessageTaskAudioFileNotWritable": "Det går inte att skriva till ljudfilen \"{0}\"", "MessageTaskAudioFileNotWritable": "Det går inte att skriva till ljudfilen \"{0}\"",
"MessageTaskCanceledByUser": "Uppgiften avslutades av användaren", "MessageTaskCanceledByUser": "Uppgiften avslutades av användaren",
"MessageTaskDownloadingEpisodeDescription": "Laddar ner avsnitt \"{0}\"", "MessageTaskDownloadingEpisodeDescription": "Laddar ner avsnitt \"{0}\"",
"MessageTaskEmbeddingMetadata": "Infogar metadata", "MessageTaskEmbeddingMetadata": "Infogar metadata",
"MessageTaskEmbeddingMetadataDescription": "Infogar metadata i ljudboken \"{0}\"", "MessageTaskEmbeddingMetadataDescription": "Infogar metadata i ljudboken \"{0}\"",
"MessageTaskEncodingM4b": "Kodar M4B",
"MessageTaskEncodingM4bDescription": "Omkodning av ljudbok \"{0}\" till en M4B-fil", "MessageTaskEncodingM4bDescription": "Omkodning av ljudbok \"{0}\" till en M4B-fil",
"MessageTaskFailed": "Misslyckades", "MessageTaskFailed": "Misslyckades",
"MessageTaskFailedToBackupAudioFile": "Misslyckades med att göra backup på ljudfil \"{0}\"", "MessageTaskFailedToBackupAudioFile": "Misslyckades med att göra backup på ljudfil \"{0}\"",
@@ -903,8 +915,11 @@
"MessageTaskFailedToWriteMetadataFile": "Misslyckades med att skapa filen med metadata", "MessageTaskFailedToWriteMetadataFile": "Misslyckades med att skapa filen med metadata",
"MessageTaskMatchingBooksInLibrary": "Matchar böcker i biblioteket \"{0}\"", "MessageTaskMatchingBooksInLibrary": "Matchar böcker i biblioteket \"{0}\"",
"MessageTaskNoFilesToScan": "Inga filer finns tillgängliga för skanning", "MessageTaskNoFilesToScan": "Inga filer finns tillgängliga för skanning",
"MessageTaskOpmlImport": "OPML-import",
"MessageTaskOpmlImportDescription": "Skapar podcasts från {0} RSS-flöden", "MessageTaskOpmlImportDescription": "Skapar podcasts från {0} RSS-flöden",
"MessageTaskOpmlImportFeed": "OPML importflöde",
"MessageTaskOpmlImportFeedDescription": "Importerar RSS-flödet \"{0}\"", "MessageTaskOpmlImportFeedDescription": "Importerar RSS-flödet \"{0}\"",
"MessageTaskOpmlImportFeedFailed": "Det gick inte att hämta poddflödet",
"MessageTaskOpmlImportFeedPodcastDescription": "Skapar podcast \"{0}\"", "MessageTaskOpmlImportFeedPodcastDescription": "Skapar podcast \"{0}\"",
"MessageTaskOpmlImportFeedPodcastExists": "En podcast finns redan med den adressen", "MessageTaskOpmlImportFeedPodcastExists": "En podcast finns redan med den adressen",
"MessageTaskOpmlImportFeedPodcastFailed": "Misslyckades med att skapa podcast", "MessageTaskOpmlImportFeedPodcastFailed": "Misslyckades med att skapa podcast",
@@ -987,6 +1002,9 @@
"ToastBackupUploadFailed": "Det gick inte att ladda upp säkerhetskopian", "ToastBackupUploadFailed": "Det gick inte att ladda upp säkerhetskopian",
"ToastBackupUploadSuccess": "Säkerhetskopian har laddats upp", "ToastBackupUploadSuccess": "Säkerhetskopian har laddats upp",
"ToastBatchApplyDetailsToItemsSuccess": "Informationen har adderats till alla objekt", "ToastBatchApplyDetailsToItemsSuccess": "Informationen har adderats till alla objekt",
"ToastBatchDeleteFailed": "Det gick inte att radera batch",
"ToastBatchDeleteSuccess": "Batch borttagning lyckades",
"ToastBatchQuickMatchFailed": "Snabbmatchning av batch misslyckades!",
"ToastBatchQuickMatchStarted": "Snabbmatchning av {0} böcker har påbörjats!", "ToastBatchQuickMatchStarted": "Snabbmatchning av {0} böcker har påbörjats!",
"ToastBatchUpdateFailed": "Batchuppdateringen misslyckades", "ToastBatchUpdateFailed": "Batchuppdateringen misslyckades",
"ToastBatchUpdateSuccess": "Batchuppdateringen lyckades", "ToastBatchUpdateSuccess": "Batchuppdateringen lyckades",
@@ -1024,6 +1042,7 @@
"ToastEpisodeDownloadQueueClearFailed": "Misslyckades med att tömma kön", "ToastEpisodeDownloadQueueClearFailed": "Misslyckades med att tömma kön",
"ToastEpisodeDownloadQueueClearSuccess": "Kö för nedladdning av avsnitt har tömts", "ToastEpisodeDownloadQueueClearSuccess": "Kö för nedladdning av avsnitt har tömts",
"ToastEpisodeUpdateSuccess": "{0} avsnitt uppdaterades", "ToastEpisodeUpdateSuccess": "{0} avsnitt uppdaterades",
"ToastErrorCannotShare": "Kan inte dela direkt på den här enheten",
"ToastFailedToCreate": "Misslyckades med att addera", "ToastFailedToCreate": "Misslyckades med att addera",
"ToastFailedToDelete": "Misslyckades med att radera", "ToastFailedToDelete": "Misslyckades med att radera",
"ToastFailedToLoadData": "Misslyckades med att ladda data", "ToastFailedToLoadData": "Misslyckades med att ladda data",
@@ -1055,6 +1074,7 @@
"ToastMetadataFilesRemovedNoneFound": "Inga 'metadata.{0}' filer hittades i biblioteket", "ToastMetadataFilesRemovedNoneFound": "Inga 'metadata.{0}' filer hittades i biblioteket",
"ToastMetadataFilesRemovedNoneRemoved": "Inga 'metadata.{0}' filer raderades", "ToastMetadataFilesRemovedNoneRemoved": "Inga 'metadata.{0}' filer raderades",
"ToastMetadataFilesRemovedSuccess": "{0} 'metadata.{1}' raderades", "ToastMetadataFilesRemovedSuccess": "{0} 'metadata.{1}' raderades",
"ToastMustHaveAtLeastOnePath": "Måste ha minst en sökväg",
"ToastNameEmailRequired": "Ett namn och en e-postadress måste anges", "ToastNameEmailRequired": "Ett namn och en e-postadress måste anges",
"ToastNameRequired": "Ett namn måste anges", "ToastNameRequired": "Ett namn måste anges",
"ToastNewApiKeyUserError": "En användare måste väljas", "ToastNewApiKeyUserError": "En användare måste väljas",
@@ -1071,8 +1091,10 @@
"ToastNotificationCreateFailed": "Misslyckades med att skapa meddelandet", "ToastNotificationCreateFailed": "Misslyckades med att skapa meddelandet",
"ToastNotificationDeleteFailed": "Misslyckades med att radera meddelandet", "ToastNotificationDeleteFailed": "Misslyckades med att radera meddelandet",
"ToastNotificationFailedMaximum": "Maximalt antal misslyckade försök måste vara större än eller lika med 0", "ToastNotificationFailedMaximum": "Maximalt antal misslyckade försök måste vara större än eller lika med 0",
"ToastNotificationQueueMaximum": "Maximala antalet aviseringsköer måste vara >= 0",
"ToastNotificationSettingsUpdateSuccess": "Inställningarna för meddelanden har ändrats", "ToastNotificationSettingsUpdateSuccess": "Inställningarna för meddelanden har ändrats",
"ToastNotificationTestTriggerFailed": "Misslyckades med att skicka testmeddelandet", "ToastNotificationTestTriggerFailed": "Misslyckades med att skicka testmeddelandet",
"ToastNotificationTestTriggerSuccess": "Triggade testavisering",
"ToastNotificationUpdateSuccess": "Meddelandet har uppdaterats", "ToastNotificationUpdateSuccess": "Meddelandet har uppdaterats",
"ToastPlaylistCreateFailed": "Det gick inte att skapa spellistan", "ToastPlaylistCreateFailed": "Det gick inte att skapa spellistan",
"ToastPlaylistCreateSuccess": "Spellistan skapad", "ToastPlaylistCreateSuccess": "Spellistan skapad",
@@ -1081,8 +1103,10 @@
"ToastPodcastCreateFailed": "Misslyckades med att skapa podcasten", "ToastPodcastCreateFailed": "Misslyckades med att skapa podcasten",
"ToastPodcastCreateSuccess": "Podcasten skapades framgångsrikt", "ToastPodcastCreateSuccess": "Podcasten skapades framgångsrikt",
"ToastPodcastEpisodeUpdated": "Avsnittet har uppdaterats", "ToastPodcastEpisodeUpdated": "Avsnittet har uppdaterats",
"ToastPodcastGetFeedFailed": "Det gick inte att hämta poddflödet",
"ToastPodcastNoEpisodesInFeed": "Inga avsnitt finns i RSS-flödet", "ToastPodcastNoEpisodesInFeed": "Inga avsnitt finns i RSS-flödet",
"ToastPodcastNoRssFeed": "Denna podcast har ingen RSS-flöde", "ToastPodcastNoRssFeed": "Denna podcast har ingen RSS-flöde",
"ToastProgressIsNotBeingSynced": "Förloppet synkroniseras inte, starta om uppspelningen",
"ToastProviderCreatedFailed": "Misslyckades med att addera en källa", "ToastProviderCreatedFailed": "Misslyckades med att addera en källa",
"ToastProviderCreatedSuccess": "En ny källa har adderats", "ToastProviderCreatedSuccess": "En ny källa har adderats",
"ToastProviderNameAndUrlRequired": "Ett namn och en URL-adress krävs", "ToastProviderNameAndUrlRequired": "Ett namn och en URL-adress krävs",
@@ -1107,9 +1131,12 @@
"ToastSeriesUpdateFailed": "Misslyckades med att uppdatera serien", "ToastSeriesUpdateFailed": "Misslyckades med att uppdatera serien",
"ToastSeriesUpdateSuccess": "Uppdateringen av serierna lyckades", "ToastSeriesUpdateSuccess": "Uppdateringen av serierna lyckades",
"ToastServerSettingsUpdateSuccess": "Inställningarna för servern har uppdaterats", "ToastServerSettingsUpdateSuccess": "Inställningarna för servern har uppdaterats",
"ToastSessionCloseFailed": "Misslyckades med att avsluta sessionen",
"ToastSessionDeleteFailed": "Misslyckades med att ta bort sessionen", "ToastSessionDeleteFailed": "Misslyckades med att ta bort sessionen",
"ToastSessionDeleteSuccess": "Sessionen borttagen", "ToastSessionDeleteSuccess": "Sessionen borttagen",
"ToastSleepTimerDone": "Timer har stängt av lyssning. Sov gott... zZzzZz", "ToastSleepTimerDone": "Timer har stängt av lyssning. Sov gott... zZzzZz",
"ToastSlugMustChange": "Slug innehåller ogiltiga tecken",
"ToastSlugRequired": "Slug krävs",
"ToastSocketConnected": "Socket ansluten", "ToastSocketConnected": "Socket ansluten",
"ToastSocketDisconnected": "Socket frånkopplad", "ToastSocketDisconnected": "Socket frånkopplad",
"ToastSocketFailedToConnect": "Socket misslyckades med att ansluta", "ToastSocketFailedToConnect": "Socket misslyckades med att ansluta",
@@ -1120,6 +1147,7 @@
"ToastUnlinkOpenIdFailed": "Misslyckades med att koppla bort användaren från OpenID", "ToastUnlinkOpenIdFailed": "Misslyckades med att koppla bort användaren från OpenID",
"ToastUnlinkOpenIdSuccess": "Användaren har kopplats bort från OpenID", "ToastUnlinkOpenIdSuccess": "Användaren har kopplats bort från OpenID",
"ToastUploaderFilepathExistsError": "En fil med namnet \"{0}\" finns redan på servern", "ToastUploaderFilepathExistsError": "En fil med namnet \"{0}\" finns redan på servern",
"ToastUploaderItemExistsInSubdirectoryError": "Objektet \"{0}\" använder en underkatalog till uppladdningssökvägen.",
"ToastUserDeleteFailed": "Misslyckades med att ta bort användaren", "ToastUserDeleteFailed": "Misslyckades med att ta bort användaren",
"ToastUserDeleteSuccess": "Användaren borttagen", "ToastUserDeleteSuccess": "Användaren borttagen",
"ToastUserPasswordChangeSuccess": "Lösenordet har ändrats", "ToastUserPasswordChangeSuccess": "Lösenordet har ändrats",
+5 -5
View File
@@ -275,7 +275,7 @@
"LabelBonus": "Bonus", "LabelBonus": "Bonus",
"LabelBooks": "Kitaplar", "LabelBooks": "Kitaplar",
"LabelButtonText": "Buton Metni", "LabelButtonText": "Buton Metni",
"LabelByAuthor": "Yazar: {0}", "LabelByAuthor": "{0} tarafından",
"LabelChangePassword": "Şifreyi Değiştir", "LabelChangePassword": "Şifreyi Değiştir",
"LabelChannels": "Kanallar", "LabelChannels": "Kanallar",
"LabelChapterCount": "{0} Bölüm", "LabelChapterCount": "{0} Bölüm",
@@ -383,7 +383,7 @@
"LabelFolders": "Klasörler", "LabelFolders": "Klasörler",
"LabelFontBold": "Kalın", "LabelFontBold": "Kalın",
"LabelFontBoldness": "Yazı Tipi Kalınlığı", "LabelFontBoldness": "Yazı Tipi Kalınlığı",
"LabelFontFamily": "Yazı Tipi Ailesi", "LabelFontFamily": "Yazı tipi ailesi",
"LabelFontItalic": "İtalik", "LabelFontItalic": "İtalik",
"LabelFontScale": "Yazı Tipi Ölçeği", "LabelFontScale": "Yazı Tipi Ölçeği",
"LabelFontStrikethrough": "Üstü Çizili", "LabelFontStrikethrough": "Üstü Çizili",
@@ -588,8 +588,8 @@
"LabelSettingsBookshelfViewHelp": "Ahşap raflı skeuomorfik tasarım", "LabelSettingsBookshelfViewHelp": "Ahşap raflı skeuomorfik tasarım",
"LabelSettingsChromecastSupport": "Chromecast desteği", "LabelSettingsChromecastSupport": "Chromecast desteği",
"LabelSettingsDateFormat": "Tarih Formatı", "LabelSettingsDateFormat": "Tarih Formatı",
"LabelSettingsEnableWatcher": "Değişiklikler için kütüphaneleri otomatik olarak tara", "LabelSettingsEnableWatcher": "Kütüphanelerdeki değişiklikleri otomatik olarak izle",
"LabelSettingsEnableWatcherForLibrary": "Değişiklikler için kütüphaneyi otomatik olarak tara", "LabelSettingsEnableWatcherForLibrary": "Kütüphanedeki değişiklikleri otomatik olarak izle",
"LabelSettingsEnableWatcherHelp": "Dosya değişiklikleri algılandığında öğelerin otomatik olarak eklenmesini/güncellenmesini sağlar. *Sunucunun yeniden başlatılmasını gerektirir", "LabelSettingsEnableWatcherHelp": "Dosya değişiklikleri algılandığında öğelerin otomatik olarak eklenmesini/güncellenmesini sağlar. *Sunucunun yeniden başlatılmasını gerektirir",
"LabelSettingsEpubsAllowScriptedContent": "Epub'larda betiklenmiş içeriğe izin ver", "LabelSettingsEpubsAllowScriptedContent": "Epub'larda betiklenmiş içeriğe izin ver",
"LabelSettingsEpubsAllowScriptedContentHelp": "Epub dosyalarının betik çalıştırmasına izin verin. Epub dosyalarının kaynağına güvenmiyorsanız bu ayarı devre dışı bırakmanız önerilir.", "LabelSettingsEpubsAllowScriptedContentHelp": "Epub dosyalarının betik çalıştırmasına izin verin. Epub dosyalarının kaynağına güvenmiyorsanız bu ayarı devre dışı bırakmanız önerilir.",
@@ -888,7 +888,7 @@
"MessageResetChaptersConfirm": "Bölümleri sıfırlamak ve yaptığınız değişiklikleri geri almak istediğinizden emin misiniz?", "MessageResetChaptersConfirm": "Bölümleri sıfırlamak ve yaptığınız değişiklikleri geri almak istediğinizden emin misiniz?",
"MessageRestoreBackupConfirm": "Şu tarihte oluşturulan yedeği geri yüklemek istediğinizden emin misiniz", "MessageRestoreBackupConfirm": "Şu tarihte oluşturulan yedeği geri yüklemek istediğinizden emin misiniz",
"MessageRestoreBackupWarning": "Bir yedeği geri yüklemek, /config konumundaki tüm veritabanının ve /metadata/items & /metadata/authors içindeki kapak resimlerinin üzerine yazacaktır.<br /><br />Yedekler, kütüphane klasörlerinizdeki hiçbir dosyayı değiştirmez. Sunucu ayarlarını kütüphane klasörlerinizde kapak resmi ve üst veri saklamak için etkinleştirdiyseniz, bunlar yedeklenmez veya üzerine yazılmaz.<br /><br />Sunucunuzu kullanan tüm istemciler otomatik olarak yenilenecektir.", "MessageRestoreBackupWarning": "Bir yedeği geri yüklemek, /config konumundaki tüm veritabanının ve /metadata/items & /metadata/authors içindeki kapak resimlerinin üzerine yazacaktır.<br /><br />Yedekler, kütüphane klasörlerinizdeki hiçbir dosyayı değiştirmez. Sunucu ayarlarını kütüphane klasörlerinizde kapak resmi ve üst veri saklamak için etkinleştirdiyseniz, bunlar yedeklenmez veya üzerine yazılmaz.<br /><br />Sunucunuzu kullanan tüm istemciler otomatik olarak yenilenecektir.",
"MessageScheduleLibraryScanNote": "Çoğu kullanıcı için, bu özelliği devre dışı bırakıp klasör izleyici ayarını etkin tutmaları önerilir. Klasör izleyici, kütüphane klasörlerinizdeki değişiklikleri otomatik olarak algılayacaktır. Klasör izleyici her dosya sistemi için (NFS gibi) çalışmaz, bu nedenle bunun yerine zamanlanmış kütüphane taramaları kullanılabilir.", "MessageScheduleLibraryScanNote": "Çoğu kullanıcı için bu ayarı pasif bırakması ve \"Kütüphanedeki değişiklikleri otomatik olarak izle\" seçeneğini aktif etmesi önerilir. O seçenek kütüphane dizinlerindeki herhangi bir değişikliği otomatik olarak tespit edecektir. Eğer dosya sisteminiz \"Kütüphanedeki değişiklikleri otomatik olarak izle\" yöntemini desteklemiyorsa (örn; NFS dosya sistemi) bu özelliği aktif edebilirsiniz.",
"MessageScheduleRunEveryWeekdayAtTime": "Her {0} günü saat {1}'de çalıştır", "MessageScheduleRunEveryWeekdayAtTime": "Her {0} günü saat {1}'de çalıştır",
"MessageSearchResultsFor": "Arama sonuçları", "MessageSearchResultsFor": "Arama sonuçları",
"MessageSelected": "{0} seçildi", "MessageSelected": "{0} seçildi",
+4 -4
View File
@@ -383,7 +383,7 @@
"LabelFolders": "Теки", "LabelFolders": "Теки",
"LabelFontBold": "Жирний", "LabelFontBold": "Жирний",
"LabelFontBoldness": "Товщина шрифту", "LabelFontBoldness": "Товщина шрифту",
"LabelFontFamily": "Гарнітура", "LabelFontFamily": "Сімейство шрифтів",
"LabelFontItalic": "Курсив", "LabelFontItalic": "Курсив",
"LabelFontScale": "Розмір шрифту", "LabelFontScale": "Розмір шрифту",
"LabelFontStrikethrough": "Закреслений", "LabelFontStrikethrough": "Закреслений",
@@ -588,8 +588,8 @@
"LabelSettingsBookshelfViewHelp": "Імітує вигляд дерев'яних полиць", "LabelSettingsBookshelfViewHelp": "Імітує вигляд дерев'яних полиць",
"LabelSettingsChromecastSupport": "Підтримка Chromecast", "LabelSettingsChromecastSupport": "Підтримка Chromecast",
"LabelSettingsDateFormat": "Формат дати", "LabelSettingsDateFormat": "Формат дати",
"LabelSettingsEnableWatcher": "Автоматично сканувати бібліотеки на наявність змін", "LabelSettingsEnableWatcher": "Автоматично відстежувати зміни в бібліотеках",
"LabelSettingsEnableWatcherForLibrary": "Автоматично сканувати бібліотеку на наявність змін", "LabelSettingsEnableWatcherForLibrary": "Автоматично відстежувати зміни в бібліотеці",
"LabelSettingsEnableWatcherHelp": "Вмикає автоматичне додавання/оновлення елементів, коли спостерігаються зміни файлів. *Потребує перезавантаження сервера", "LabelSettingsEnableWatcherHelp": "Вмикає автоматичне додавання/оновлення елементів, коли спостерігаються зміни файлів. *Потребує перезавантаження сервера",
"LabelSettingsEpubsAllowScriptedContent": "Дозволити JavaScript-вміст у epub", "LabelSettingsEpubsAllowScriptedContent": "Дозволити JavaScript-вміст у epub",
"LabelSettingsEpubsAllowScriptedContentHelp": "Дозволяти epub-файлам виконувати код. Вмикайте цей параметр лише якщо ви довіряєте джерелу epub-файлів.", "LabelSettingsEpubsAllowScriptedContentHelp": "Дозволяти epub-файлам виконувати код. Вмикайте цей параметр лише якщо ви довіряєте джерелу epub-файлів.",
@@ -888,7 +888,7 @@
"MessageResetChaptersConfirm": "Ви впевнені, що хочете скинути глави та скасувати внесені зміни?", "MessageResetChaptersConfirm": "Ви впевнені, що хочете скинути глави та скасувати внесені зміни?",
"MessageRestoreBackupConfirm": "Ви впевнені, що хочете відновити резервну копію, створену", "MessageRestoreBackupConfirm": "Ви впевнені, що хочете відновити резервну копію, створену",
"MessageRestoreBackupWarning": "Відновлення резервної копії перезапише всю базу даних у /config і зображення обкладинок у /metadata/items та /metadata/authors.<br /><br />Резервні копії не змінюють файли у теках бібліотеки. Якщо у налаштуваннях сервера увімкнено збереження обкладинок і метаданих у теках бібліотеки, вони не створюються під час резервного копіювання і не перезаписуються.<br /><br />Всі клієнти, що користуються вашим сервером, будуть автоматично оновлені.", "MessageRestoreBackupWarning": "Відновлення резервної копії перезапише всю базу даних у /config і зображення обкладинок у /metadata/items та /metadata/authors.<br /><br />Резервні копії не змінюють файли у теках бібліотеки. Якщо у налаштуваннях сервера увімкнено збереження обкладинок і метаданих у теках бібліотеки, вони не створюються під час резервного копіювання і не перезаписуються.<br /><br />Всі клієнти, що користуються вашим сервером, будуть автоматично оновлені.",
"MessageScheduleLibraryScanNote": "Для більшості користувачів рекомендується залишити цю функцію вимкненою та залишити параметр перегляду папок увімкненим. Засіб спостереження за папками автоматично виявить зміни в папках вашої бібліотеки. Засіб спостереження за папками не працює для кожної файлової системи (наприклад, NFS), тому замість нього можна використовувати сканування бібліотек за розкладом.", "MessageScheduleLibraryScanNote": "Для більшості користувачів рекомендується відключити цю функцію та підтримувати налаштування \"Автоматично переглядати бібліотеку для змін\" - вона автоматично виявить зміни в ваших папках бібліотеки. Звісніть цю функцію, якщо для вашої файлової системи (наприклад, NFS) не працює \"Автоматично переглядати бібліотеку.",
"MessageScheduleRunEveryWeekdayAtTime": "Запуск кожні {0} о {1}", "MessageScheduleRunEveryWeekdayAtTime": "Запуск кожні {0} о {1}",
"MessageSearchResultsFor": "Результати пошуку для", "MessageSearchResultsFor": "Результати пошуку для",
"MessageSelected": "Вибрано: {0}", "MessageSelected": "Вибрано: {0}",
+8 -8
View File
@@ -275,7 +275,7 @@
"LabelBonus": "额外", "LabelBonus": "额外",
"LabelBooks": "图书", "LabelBooks": "图书",
"LabelButtonText": "按钮文本", "LabelButtonText": "按钮文本",
"LabelByAuthor": " {0}", "LabelByAuthor": "作者: {0}",
"LabelChangePassword": "修改密码", "LabelChangePassword": "修改密码",
"LabelChannels": "声道", "LabelChannels": "声道",
"LabelChapterCount": "{0} 章节", "LabelChapterCount": "{0} 章节",
@@ -383,7 +383,7 @@
"LabelFolders": "文件夹", "LabelFolders": "文件夹",
"LabelFontBold": "加粗", "LabelFontBold": "加粗",
"LabelFontBoldness": "字体粗细", "LabelFontBoldness": "字体粗细",
"LabelFontFamily": "字体系列", "LabelFontFamily": "字体",
"LabelFontItalic": "斜体", "LabelFontItalic": "斜体",
"LabelFontScale": "字体比例", "LabelFontScale": "字体比例",
"LabelFontStrikethrough": "删除线", "LabelFontStrikethrough": "删除线",
@@ -436,9 +436,9 @@
"LabelLibraryFilterSublistEmpty": "没有 {0}", "LabelLibraryFilterSublistEmpty": "没有 {0}",
"LabelLibraryItem": "媒体库项目", "LabelLibraryItem": "媒体库项目",
"LabelLibraryName": "媒体库名称", "LabelLibraryName": "媒体库名称",
"LabelLibrarySortByProgress": "收听进度: 上次收听时间", "LabelLibrarySortByProgress": "进度: 上次更新",
"LabelLibrarySortByProgressFinished": "收听进度: 已完成", "LabelLibrarySortByProgressFinished": "进度: 已完成",
"LabelLibrarySortByProgressStarted": "收听进度: 已开始", "LabelLibrarySortByProgressStarted": "进度: 已开始",
"LabelLimit": "限制", "LabelLimit": "限制",
"LabelLineSpacing": "行间距", "LabelLineSpacing": "行间距",
"LabelListenAgain": "再次收听", "LabelListenAgain": "再次收听",
@@ -588,8 +588,8 @@
"LabelSettingsBookshelfViewHelp": "带有木架子的拟物化设计", "LabelSettingsBookshelfViewHelp": "带有木架子的拟物化设计",
"LabelSettingsChromecastSupport": "Chromecast 支持", "LabelSettingsChromecastSupport": "Chromecast 支持",
"LabelSettingsDateFormat": "日期格式", "LabelSettingsDateFormat": "日期格式",
"LabelSettingsEnableWatcher": "自动扫描库以查找更改", "LabelSettingsEnableWatcher": "自动检测媒体库变化",
"LabelSettingsEnableWatcherForLibrary": "自动扫描库以查找更改", "LabelSettingsEnableWatcherForLibrary": "自动检测媒体库变化",
"LabelSettingsEnableWatcherHelp": "当检测到文件更改时, 启用项目的自动添加/更新. *需要重新启动服务器", "LabelSettingsEnableWatcherHelp": "当检测到文件更改时, 启用项目的自动添加/更新. *需要重新启动服务器",
"LabelSettingsEpubsAllowScriptedContent": "允许 epubs 中包含脚本内容", "LabelSettingsEpubsAllowScriptedContent": "允许 epubs 中包含脚本内容",
"LabelSettingsEpubsAllowScriptedContentHelp": "允许 epub 文件执行脚本. 建议将此设置保持禁用, 除非你信任 epub 文件的来源.", "LabelSettingsEpubsAllowScriptedContentHelp": "允许 epub 文件执行脚本. 建议将此设置保持禁用, 除非你信任 epub 文件的来源.",
@@ -888,7 +888,7 @@
"MessageResetChaptersConfirm": "你确定要重置章节并撤消你所做的更改吗?", "MessageResetChaptersConfirm": "你确定要重置章节并撤消你所做的更改吗?",
"MessageRestoreBackupConfirm": "你确定要恢复创建的这个备份", "MessageRestoreBackupConfirm": "你确定要恢复创建的这个备份",
"MessageRestoreBackupWarning": "恢复备份将覆盖位于 /config 的整个数据库并覆盖 /metadata/items & /metadata/authors 中的图像.<br /><br />备份不会修改媒体库文件夹中的任何文件. 如果你已启用服务器设置将封面和元数据存储在库文件夹中,则不会备份或覆盖这些内容.<br /><br />将自动刷新使用服务器的所有客户端.", "MessageRestoreBackupWarning": "恢复备份将覆盖位于 /config 的整个数据库并覆盖 /metadata/items & /metadata/authors 中的图像.<br /><br />备份不会修改媒体库文件夹中的任何文件. 如果你已启用服务器设置将封面和元数据存储在库文件夹中,则不会备份或覆盖这些内容.<br /><br />将自动刷新使用服务器的所有客户端.",
"MessageScheduleLibraryScanNote": "对于大多数用户, 建议禁用此功能并保持文件夹监视程序设置启用. 文件夹监视程序将自动检测库文件夹中的更改. 文件夹监视程序不适用于每个文件系统 (如 NFS), 因此可以使用计划库扫描.", "MessageScheduleLibraryScanNote": "对于大多数用户, 建议保持此功能关闭并启用 \"自动检测媒体库变化\" 选项, 它会自动检测媒体库文件夹中的更改. 如果 \"自动检测媒体库变化\" 在你的文件系统 (如 NFS) 上无法正常工作, 请启用此功能.",
"MessageScheduleRunEveryWeekdayAtTime": "每 {0} 的 {1} 执行", "MessageScheduleRunEveryWeekdayAtTime": "每 {0} 的 {1} 执行",
"MessageSearchResultsFor": "搜索结果", "MessageSearchResultsFor": "搜索结果",
"MessageSelected": "{0} 已选择", "MessageSelected": "{0} 已选择",
+1 -1
View File
@@ -127,7 +127,7 @@ components:
duration: duration:
type: integer type: integer
format: int64 format: int64
description: Duration in seconds description: Duration in minutes
SeriesMetadata: SeriesMetadata:
type: object type: object
+2 -2
View File
@@ -1,12 +1,12 @@
{ {
"name": "audiobookshelf", "name": "audiobookshelf",
"version": "2.30.0", "version": "2.35.1",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "audiobookshelf", "name": "audiobookshelf",
"version": "2.30.0", "version": "2.35.1",
"license": "GPL-3.0", "license": "GPL-3.0",
"dependencies": { "dependencies": {
"axios": "^0.27.2", "axios": "^0.27.2",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "audiobookshelf", "name": "audiobookshelf",
"version": "2.30.0", "version": "2.35.1",
"buildNumber": 1, "buildNumber": 1,
"description": "Self-hosted audiobook and podcast server", "description": "Self-hosted audiobook and podcast server",
"main": "index.js", "main": "index.js",
+22 -2
View File
@@ -3,6 +3,7 @@ const Logger = require('./Logger')
const Database = require('./Database') const Database = require('./Database')
const TokenManager = require('./auth/TokenManager') const TokenManager = require('./auth/TokenManager')
const CoverSearchManager = require('./managers/CoverSearchManager') const CoverSearchManager = require('./managers/CoverSearchManager')
const { LogLevel } = require('./utils/constants')
/** /**
* @typedef SocketClient * @typedef SocketClient
@@ -85,6 +86,14 @@ class SocketAuthority {
} }
} }
requireAdminSocket(socket, eventName) {
const client = this.clients[socket.id]
if (client?.user?.isAdminOrUp) return true
Logger.warn(`[SocketAuthority] Unauthorized ${eventName} socket event from socket ${socket.id}`)
return false
}
/** /**
* Emits event with library item to all clients that can access the library item * Emits event with library item to all clients that can access the library item
* Note: Emits toOldJSONExpanded() * Note: Emits toOldJSONExpanded()
@@ -179,14 +188,25 @@ class SocketAuthority {
socket.on('auth', (token) => this.authenticateSocket(socket, token)) socket.on('auth', (token) => this.authenticateSocket(socket, token))
// Scanning // Scanning
socket.on('cancel_scan', (libraryId) => this.cancelScan(libraryId)) socket.on('cancel_scan', (libraryId) => {
if (!this.requireAdminSocket(socket, 'cancel_scan')) return
this.cancelScan(libraryId)
})
// Cover search streaming // Cover search streaming
socket.on('search_covers', (payload) => this.handleCoverSearch(socket, payload)) socket.on('search_covers', (payload) => this.handleCoverSearch(socket, payload))
socket.on('cancel_cover_search', (requestId) => this.handleCancelCoverSearch(socket, requestId)) socket.on('cancel_cover_search', (requestId) => this.handleCancelCoverSearch(socket, requestId))
// Logs // Logs
socket.on('set_log_listener', (level) => Logger.addSocketListener(socket, level)) socket.on('set_log_listener', (level) => {
if (!this.requireAdminSocket(socket, 'set_log_listener')) return
if (!Number.isInteger(level) || !Object.values(LogLevel).includes(level)) {
Logger.warn(`[SocketAuthority] Invalid set_log_listener level from socket ${socket.id}`)
return
}
Logger.addSocketListener(socket, level)
})
socket.on('remove_log_listener', () => Logger.removeSocketListener(socket.id)) socket.on('remove_log_listener', () => Logger.removeSocketListener(socket.id))
// Sent automatically from socket.io clients // Sent automatically from socket.io clients
+100 -23
View File
@@ -1,4 +1,5 @@
const { Op } = require('sequelize') const { Op } = require('sequelize')
const uuid = require('uuid')
const Database = require('../Database') const Database = require('../Database')
const Logger = require('../Logger') const Logger = require('../Logger')
@@ -12,9 +13,9 @@ class TokenManager {
constructor() { constructor() {
/** @type {number} Refresh token expiry in seconds */ /** @type {number} Refresh token expiry in seconds */
this.RefreshTokenExpiry = parseInt(process.env.REFRESH_TOKEN_EXPIRY) || 7 * 24 * 60 * 60 // 7 days this.RefreshTokenExpiry = parseInt(process.env.REFRESH_TOKEN_EXPIRY) || 30 * 24 * 60 * 60 // 30 days
/** @type {number} Access token expiry in seconds */ /** @type {number} Access token expiry in seconds */
this.AccessTokenExpiry = parseInt(process.env.ACCESS_TOKEN_EXPIRY) || 12 * 60 * 60 // 12 hours this.AccessTokenExpiry = parseInt(process.env.ACCESS_TOKEN_EXPIRY) || 1 * 60 * 60 // 1 hour
if (parseInt(process.env.REFRESH_TOKEN_EXPIRY) > 0) { if (parseInt(process.env.REFRESH_TOKEN_EXPIRY) > 0) {
Logger.info(`[TokenManager] Refresh token expiry set from ENV variable to ${this.RefreshTokenExpiry} seconds`) Logger.info(`[TokenManager] Refresh token expiry set from ENV variable to ${this.RefreshTokenExpiry} seconds`)
@@ -115,6 +116,7 @@ class TokenManager {
const payload = { const payload = {
userId: user.id, userId: user.id,
username: user.username, username: user.username,
jti: uuid.v4(),
type: 'access' type: 'access'
} }
const options = { const options = {
@@ -138,6 +140,7 @@ class TokenManager {
const payload = { const payload = {
userId: user.id, userId: user.id,
username: user.username, username: user.username,
jti: uuid.v4(),
type: 'refresh' type: 'refresh'
} }
const options = { const options = {
@@ -183,20 +186,56 @@ class TokenManager {
* @param {import('../models/User')} user * @param {import('../models/User')} user
* @param {import('express').Request} req * @param {import('express').Request} req
* @param {import('express').Response} res * @param {import('express').Response} res
* @param {boolean} gracePeriod - whether to use the grace period
* @returns {Promise<{ accessToken:string, refreshToken:string }>} * @returns {Promise<{ accessToken:string, refreshToken:string }>}
*/ */
async rotateTokensForSession(session, user, req, res) { async rotateTokensForSession(session, user, req, res, gracePeriod = true) {
// Generate new tokens const previousRefreshToken = session.refreshToken
const newAccessToken = this.generateTempAccessToken(user) const newAccessToken = this.generateTempAccessToken(user)
const newRefreshToken = this.generateRefreshToken(user) let newRefreshToken = this.generateRefreshToken(user)
// Calculate new expiration time
const newExpiresAt = new Date(Date.now() + this.RefreshTokenExpiry * 1000) const newExpiresAt = new Date(Date.now() + this.RefreshTokenExpiry * 1000)
// Update the session with the new refresh token and expiration let lastRefreshToken = null
session.refreshToken = newRefreshToken let lastRefreshTokenExpiresAt = null
session.expiresAt = newExpiresAt if (gracePeriod) {
await session.save() // Set grace period of old refresh token in case of race condition in token rotation.
// This grace period may need to be longer if fetching the user data takes longer due to large progress objects
lastRefreshToken = previousRefreshToken
lastRefreshTokenExpiresAt = new Date(Date.now() + 60 * 1000) // 1 minute grace period
}
// Only update if this session row still has the refresh token we read
const [numUpdated] = await Database.sessionModel.update(
{
refreshToken: newRefreshToken,
expiresAt: newExpiresAt,
lastRefreshToken,
lastRefreshTokenExpiresAt
},
{
where: {
id: session.id,
refreshToken: previousRefreshToken
}
}
)
if (numUpdated === 0) {
Logger.debug(`[TokenManager] Race condition in rotateTokensForSession for user ${user.id}, getting new token`)
const updatedSession = await Database.sessionModel.findOne({ where: { id: session.id } })
newRefreshToken = updatedSession.refreshToken
session.refreshToken = updatedSession.refreshToken
session.expiresAt = updatedSession.expiresAt
session.lastRefreshToken = updatedSession.lastRefreshToken
session.lastRefreshTokenExpiresAt = updatedSession.lastRefreshTokenExpiresAt
} else {
session.refreshToken = newRefreshToken
session.expiresAt = newExpiresAt
session.lastRefreshToken = lastRefreshToken
session.lastRefreshTokenExpiresAt = lastRefreshTokenExpiresAt
}
// Set new refresh token cookie // Set new refresh token cookie
this.setRefreshTokenCookie(req, res, newRefreshToken) this.setRefreshTokenCookie(req, res, newRefreshToken)
@@ -234,6 +273,13 @@ class TokenManager {
} }
const user = await Database.userModel.getUserById(apiKey.userId) const user = await Database.userModel.getUserById(apiKey.userId)
if (!user?.isActive) {
// deny login
done(null, null)
return
}
done(null, user) done(null, user)
} else { } else {
// JWT based authentication // JWT based authentication
@@ -287,23 +333,40 @@ class TokenManager {
} }
} }
const session = await Database.sessionModel.findOne({ let session = await Database.sessionModel.findOne({
where: { refreshToken: refreshToken } where: {
[Op.or]: [{ refreshToken: refreshToken }, { lastRefreshToken: refreshToken }]
}
}) })
if (!session) { if (!session) {
Logger.error(`[TokenManager] Failed to refresh token. Session not found for refresh token: ${refreshToken}`) Logger.error(`[TokenManager] Failed to refresh token. Session not found`)
return { return {
error: 'Invalid refresh token' error: 'Invalid refresh token'
} }
} }
// Check if session is expired in database let isGracePeriod = false
if (session.expiresAt < new Date()) { if (session.refreshToken !== refreshToken) {
Logger.info(`[TokenManager] Session expired in database, cleaning up`) // Token matched lastRefreshToken
await session.destroy() if (session.lastRefreshTokenExpiresAt && session.lastRefreshTokenExpiresAt > new Date()) {
return { isGracePeriod = true
error: 'Refresh token expired' Logger.debug(`[TokenManager] Grace period hit for user ${session.userId}`)
} else {
Logger.debug(`[TokenManager] Grace period expired for user ${session.userId}`)
return {
error: 'Invalid refresh token'
}
}
} else {
// Token matched current refreshToken
// Check if session is expired in database
if (session.expiresAt < new Date()) {
Logger.info(`[TokenManager] Session expired in database, cleaning up`)
await session.destroy()
return {
error: 'Refresh token expired'
}
} }
} }
@@ -315,6 +378,20 @@ class TokenManager {
} }
} }
if (isGracePeriod) {
// Return the already rotated refresh token store in the database,
// and generate a new access token without changing the refresh token
// again
const accessToken = this.generateTempAccessToken(user)
this.setRefreshTokenCookie(req, res, session.refreshToken)
return {
accessToken,
refreshToken: session.refreshToken,
user
}
}
const newTokens = await this.rotateTokensForSession(session, user, req, res) const newTokens = await this.rotateTokensForSession(session, user, req, res)
return { return {
accessToken: newTokens.accessToken, accessToken: newTokens.accessToken,
@@ -368,7 +445,7 @@ class TokenManager {
// So rotate token for current session // So rotate token for current session
const currentSession = await Database.sessionModel.findOne({ where: { refreshToken: currentRefreshToken } }) const currentSession = await Database.sessionModel.findOne({ where: { refreshToken: currentRefreshToken } })
if (currentSession) { if (currentSession) {
const newTokens = await this.rotateTokensForSession(currentSession, user, req, res) const newTokens = await this.rotateTokensForSession(currentSession, user, req, res, false)
// Invalidate all sessions for the user except the current one // Invalidate all sessions for the user except the current one
await Database.sessionModel.destroy({ await Database.sessionModel.destroy({
@@ -382,7 +459,7 @@ class TokenManager {
return newTokens.accessToken return newTokens.accessToken
} else { } else {
Logger.error(`[TokenManager] No session found to rotate tokens for refresh token ${currentRefreshToken}`) Logger.error(`[TokenManager] No session found to rotate tokens`)
} }
} }
@@ -406,7 +483,7 @@ class TokenManager {
try { try {
const numDeleted = await Database.sessionModel.destroy({ where: { refreshToken: refreshToken } }) const numDeleted = await Database.sessionModel.destroy({ where: { refreshToken: refreshToken } })
Logger.info(`[TokenManager] Refresh token ${refreshToken} invalidated, ${numDeleted} sessions deleted`) Logger.info(`[TokenManager] Refresh token invalidated, ${numDeleted} sessions deleted`)
return true return true
} catch (error) { } catch (error) {
Logger.error(`[TokenManager] Error invalidating refresh token: ${error.message}`) Logger.error(`[TokenManager] Error invalidating refresh token: ${error.message}`)
+7 -6
View File
@@ -10,7 +10,7 @@ const CacheManager = require('../managers/CacheManager')
const CoverManager = require('../managers/CoverManager') const CoverManager = require('../managers/CoverManager')
const AuthorFinder = require('../finders/AuthorFinder') const AuthorFinder = require('../finders/AuthorFinder')
const { reqSupportsWebp, isValidASIN } = require('../utils/index') const { reqSupportsWebp, isValidASIN, clampPositiveInt } = require('../utils/index')
const naturalSort = createNewSortInstance({ const naturalSort = createNewSortInstance({
comparer: new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' }).compare comparer: new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' }).compare
@@ -113,7 +113,7 @@ class AuthorController {
payload.lastFirst = Database.authorModel.getLastFirst(payload.name) payload.lastFirst = Database.authorModel.getLastFirst(payload.name)
} }
// Check if author name matches another author and merge the authors // Check if author name matches another author in the same library and merge the authors
let existingAuthor = null let existingAuthor = null
if (authorNameUpdate) { if (authorNameUpdate) {
existingAuthor = await Database.authorModel.findOne({ existingAuthor = await Database.authorModel.findOne({
@@ -121,7 +121,8 @@ class AuthorController {
id: { id: {
[sequelize.Op.not]: req.author.id [sequelize.Op.not]: req.author.id
}, },
name: payload.name name: payload.name,
libraryId: req.author.libraryId
} }
}) })
} }
@@ -148,7 +149,7 @@ class AuthorController {
}) })
if (libraryItems.length) { if (libraryItems.length) {
await Database.bookAuthorModel.removeByIds(req.author.id) // Remove all old BookAuthor await Database.bookAuthorModel.removeByIds(req.author.id) // Remove all old BookAuthor
await Database.bookAuthorModel.bulkCreate(bookAuthorsToCreate) // Create all new BookAuthor await Database.bookAuthorModel.bulkCreate(bookAuthorsToCreate, { ignoreDuplicates: true }) // Create all new unique BookAuthor
for (const libraryItem of libraryItems) { for (const libraryItem of libraryItems) {
await libraryItem.saveMetadataFile() await libraryItem.saveMetadataFile()
} }
@@ -411,8 +412,8 @@ class AuthorController {
const options = { const options = {
format: format || (reqSupportsWebp(req) ? 'webp' : 'jpeg'), format: format || (reqSupportsWebp(req) ? 'webp' : 'jpeg'),
height: height ? parseInt(height) : null, height: clampPositiveInt(height ? parseInt(height) : null, 4096),
width: width ? parseInt(width) : null width: clampPositiveInt(width ? parseInt(width) : null, 4096)
} }
return CacheManager.handleAuthorCache(res, authorId, options) return CacheManager.handleAuthorCache(res, authorId, options)
} }
+21 -6
View File
@@ -3,6 +3,7 @@ const Sequelize = require('sequelize')
const Logger = require('../Logger') const Logger = require('../Logger')
const SocketAuthority = require('../SocketAuthority') const SocketAuthority = require('../SocketAuthority')
const Database = require('../Database') const Database = require('../Database')
const htmlSanitizer = require('../utils/htmlSanitizer')
const RssFeedManager = require('../managers/RssFeedManager') const RssFeedManager = require('../managers/RssFeedManager')
@@ -31,13 +32,19 @@ class CollectionController {
async create(req, res) { async create(req, res) {
const reqBody = req.body || {} const reqBody = req.body || {}
const nameCleaned = htmlSanitizer.stripAllTags(reqBody.name)
// Validation // Validation
if (!reqBody.name || !reqBody.libraryId) { if (!nameCleaned || !reqBody.libraryId) {
return res.status(400).send('Invalid collection data') return res.status(400).send('Invalid collection data')
} }
if (reqBody.description && typeof reqBody.description !== 'string') { if (reqBody.description && typeof reqBody.description !== 'string') {
return res.status(400).send('Invalid collection description') return res.status(400).send('Invalid collection description')
} }
if (!req.user.checkCanAccessLibrary(reqBody.libraryId)) {
Logger.warn(`[CollectionController] User "${req.user.username}" attempted to create collection in inaccessible library ${reqBody.libraryId}`)
return res.sendStatus(403)
}
const libraryItemIds = (reqBody.books || []).filter((b) => !!b && typeof b == 'string') const libraryItemIds = (reqBody.books || []).filter((b) => !!b && typeof b == 'string')
if (!libraryItemIds.length) { if (!libraryItemIds.length) {
return res.status(400).send('Invalid collection data. No books') return res.status(400).send('Invalid collection data. No books')
@@ -65,7 +72,7 @@ class CollectionController {
newCollection = await Database.collectionModel.create( newCollection = await Database.collectionModel.create(
{ {
libraryId: reqBody.libraryId, libraryId: reqBody.libraryId,
name: reqBody.name, name: nameCleaned,
description: reqBody.description || null description: reqBody.description || null
}, },
{ transaction } { transaction }
@@ -106,8 +113,9 @@ class CollectionController {
*/ */
async findAll(req, res) { async findAll(req, res) {
const collectionsExpanded = await Database.collectionModel.getOldCollectionsJsonExpanded(req.user) const collectionsExpanded = await Database.collectionModel.getOldCollectionsJsonExpanded(req.user)
const accessibleCollections = collectionsExpanded.filter((c) => req.user.checkCanAccessLibrary(c.libraryId))
res.json({ res.json({
collections: collectionsExpanded collections: accessibleCollections
}) })
} }
@@ -145,9 +153,12 @@ class CollectionController {
collectionUpdatePayload.description = req.body.description collectionUpdatePayload.description = req.body.description
wasUpdated = true wasUpdated = true
} }
if (req.body.name !== undefined && req.body.name !== req.collection.name) { if (req.body.name !== undefined && typeof req.body.name === 'string') {
collectionUpdatePayload.name = req.body.name const nameCleaned = htmlSanitizer.stripAllTags(req.body.name)
wasUpdated = true if (nameCleaned !== req.collection.name) {
collectionUpdatePayload.name = nameCleaned
wasUpdated = true
}
} }
if (wasUpdated) { if (wasUpdated) {
@@ -425,6 +436,10 @@ class CollectionController {
if (!collection) { if (!collection) {
return res.status(404).send('Collection not found') return res.status(404).send('Collection not found')
} }
if (!req.user.checkCanAccessLibrary(collection.libraryId)) {
Logger.warn(`[CollectionController] User "${req.user.username}" attempted to access collection ${collection.id} in inaccessible library ${collection.libraryId}`)
return res.status(404).send('Collection not found')
}
req.collection = collection req.collection = collection
} }
+1 -1
View File
@@ -117,7 +117,7 @@ class FileSystemController {
filepath = fileUtils.filePathToPOSIX(filepath) filepath = fileUtils.filePathToPOSIX(filepath)
// Ensure filepath is inside library folder (prevents directory traversal) // Ensure filepath is inside library folder (prevents directory traversal)
if (!filepath.startsWith(libraryFolder.path)) { if (!fileUtils.isSameOrSubPath(libraryFolder.path, filepath)) {
Logger.error(`[FileSystemController] Filepath is not inside library folder: ${filepath}`) Logger.error(`[FileSystemController] Filepath is not inside library folder: ${filepath}`)
return res.sendStatus(400) return res.sendStatus(400)
} }
+9 -6
View File
@@ -221,13 +221,11 @@ class LibraryController {
const includeArray = (req.query.include || '').split(',') const includeArray = (req.query.include || '').split(',')
if (includeArray.includes('filterdata')) { if (includeArray.includes('filterdata')) {
const filterdata = await libraryFilters.getFilterData(req.library.mediaType, req.library.id) const filterdata = await libraryFilters.getFilterData(req.library.mediaType, req.library.id)
const customMetadataProviders = await Database.customMetadataProviderModel.getForClientByMediaType(req.library.mediaType)
return res.json({ return res.json({
filterdata, filterdata,
issues: filterdata.numIssues, issues: filterdata.numIssues,
numUserPlaylists: await Database.playlistModel.getNumPlaylistsForUserAndLibrary(req.user.id, req.library.id), numUserPlaylists: await Database.playlistModel.getNumPlaylistsForUserAndLibrary(req.user.id, req.library.id),
customMetadataProviders,
library: req.library.toOldJSON() library: req.library.toOldJSON()
}) })
} }
@@ -464,7 +462,7 @@ class LibraryController {
} }
} }
Logger.info(`[LibraryController] Removing library item "${libraryItem.id}" from folder "${folder.path}"`) Logger.info(`[LibraryController] Removing library item "${libraryItem.id}" from folder "${folder.path}"`)
await this.handleDeleteLibraryItem(libraryItem.id, mediaItemIds) await this.handleDeleteLibraryItem(libraryItem.id, mediaItemIds, req.library.id)
} }
if (authorIds.length) { if (authorIds.length) {
@@ -565,7 +563,7 @@ class LibraryController {
mediaItemIds.push(libraryItem.mediaId) mediaItemIds.push(libraryItem.mediaId)
} }
Logger.info(`[LibraryController] Removing library item "${libraryItem.id}" from library "${req.library.name}"`) Logger.info(`[LibraryController] Removing library item "${libraryItem.id}" from library "${req.library.name}"`)
await this.handleDeleteLibraryItem(libraryItem.id, mediaItemIds) await this.handleDeleteLibraryItem(libraryItem.id, mediaItemIds, req.library.id)
} }
// Set PlaybackSessions libraryId to null // Set PlaybackSessions libraryId to null
@@ -716,7 +714,7 @@ class LibraryController {
} }
} }
Logger.info(`[LibraryController] Removing library item "${libraryItem.id}" with issue`) Logger.info(`[LibraryController] Removing library item "${libraryItem.id}" with issue`)
await this.handleDeleteLibraryItem(libraryItem.id, mediaItemIds) await this.handleDeleteLibraryItem(libraryItem.id, mediaItemIds, req.library.id)
} }
if (authorIds.length) { if (authorIds.length) {
@@ -1437,10 +1435,15 @@ class LibraryController {
const libraryItems = await Database.libraryItemModel.findAll({ const libraryItems = await Database.libraryItemModel.findAll({
attributes: ['id', 'libraryId', 'path', 'isFile'], attributes: ['id', 'libraryId', 'path', 'isFile'],
where: { where: {
id: itemIds id: itemIds,
libraryId: req.library.id
} }
}) })
if (libraryItems.length < itemIds.length) {
Logger.warn(`[LibraryController] User "${req.user.username}" requested ${itemIds.length} items but only ${libraryItems.length} are in library "${req.library.id}"`)
}
Logger.info(`[LibraryController] User "${req.user.username}" requested download for items "${itemIds}"`) Logger.info(`[LibraryController] User "${req.user.username}" requested download for items "${itemIds}"`)
const filename = `LibraryItems-${Date.now()}.zip` const filename = `LibraryItems-${Date.now()}.zip`
+55 -5
View File
@@ -1,13 +1,14 @@
const { Request, Response, NextFunction } = require('express') const { Request, Response, NextFunction } = require('express')
const Path = require('path') const Path = require('path')
const fs = require('../libs/fsExtra') const fs = require('../libs/fsExtra')
const cron = require('../libs/nodeCron')
const uaParserJs = require('../libs/uaParser') const uaParserJs = require('../libs/uaParser')
const Logger = require('../Logger') const Logger = require('../Logger')
const SocketAuthority = require('../SocketAuthority') const SocketAuthority = require('../SocketAuthority')
const Database = require('../Database') const Database = require('../Database')
const zipHelpers = require('../utils/zipHelpers') const zipHelpers = require('../utils/zipHelpers')
const { reqSupportsWebp } = require('../utils/index') const { reqSupportsWebp, clampPositiveInt } = require('../utils/index')
const { ScanResult, AudioMimeType } = require('../utils/constants') const { ScanResult, AudioMimeType } = require('../utils/constants')
const { getAudioMimeTypeFromExtname, encodeUriPath } = require('../utils/fileUtils') const { getAudioMimeTypeFromExtname, encodeUriPath } = require('../utils/fileUtils')
const LibraryItemScanner = require('../scanner/LibraryItemScanner') const LibraryItemScanner = require('../scanner/LibraryItemScanner')
@@ -36,6 +37,24 @@ const ShareManager = require('../managers/ShareManager')
* @typedef {RequestWithUser & RequestEntityObject & RequestLibraryFileObject} LibraryItemControllerRequestWithFile * @typedef {RequestWithUser & RequestEntityObject & RequestLibraryFileObject} LibraryItemControllerRequestWithFile
*/ */
/**
* Enforce per-item access for batch item routes
*
* @param {RequestWithUser} req
* @param {Response} res
* @param {import('../models/LibraryItem')[]} libraryItems
* @returns {boolean} true if the user may access every item; false if 403 was sent
*/
function ensureUserCanAccessLibraryItemsForBatch(req, res, libraryItems) {
for (const libraryItem of libraryItems) {
if (!req.user.checkCanAccessLibraryItem(libraryItem)) {
res.sendStatus(403)
return false
}
}
return true
}
class LibraryItemController { class LibraryItemController {
constructor() {} constructor() {}
@@ -111,7 +130,7 @@ class LibraryItemController {
} }
} }
await this.handleDeleteLibraryItem(req.libraryItem.id, mediaItemIds) await this.handleDeleteLibraryItem(req.libraryItem.id, mediaItemIds, req.libraryItem.libraryId)
if (hardDelete) { if (hardDelete) {
Logger.info(`[LibraryItemController] Deleting library item from file system at "${libraryItemPath}"`) Logger.info(`[LibraryItemController] Deleting library item from file system at "${libraryItemPath}"`)
await fs.remove(libraryItemPath).catch((error) => { await fs.remove(libraryItemPath).catch((error) => {
@@ -202,6 +221,11 @@ class LibraryItemController {
} else if (mediaPayload.autoDownloadSchedule !== undefined && req.libraryItem.media.autoDownloadSchedule !== mediaPayload.autoDownloadSchedule) { } else if (mediaPayload.autoDownloadSchedule !== undefined && req.libraryItem.media.autoDownloadSchedule !== mediaPayload.autoDownloadSchedule) {
isPodcastAutoDownloadUpdated = true isPodcastAutoDownloadUpdated = true
} }
if (mediaPayload.autoDownloadSchedule && !cron.validate(mediaPayload.autoDownloadSchedule)) {
Logger.error(`[LibraryItemController] Invalid auto download schedule cron expression "${mediaPayload.autoDownloadSchedule}" for library item "${req.libraryItem.media.title}"`)
return res.status(400).send('Invalid auto download schedule cron expression')
}
} }
let hasUpdates = (await req.libraryItem.media.updateFromRequest(mediaPayload)) || mediaPayload.url let hasUpdates = (await req.libraryItem.media.updateFromRequest(mediaPayload)) || mediaPayload.url
@@ -398,8 +422,8 @@ class LibraryItemController {
const options = { const options = {
format: format || (reqSupportsWebp(req) ? 'webp' : 'jpeg'), format: format || (reqSupportsWebp(req) ? 'webp' : 'jpeg'),
height: height ? parseInt(height) : null, height: clampPositiveInt(height ? parseInt(height) : null, 4096),
width: width ? parseInt(width) : null width: clampPositiveInt(width ? parseInt(width) : null, 4096)
} }
return CacheManager.handleCoverCache(res, libraryItemId, options) return CacheManager.handleCoverCache(res, libraryItemId, options)
} }
@@ -547,7 +571,13 @@ class LibraryItemController {
return res.sendStatus(404) return res.sendStatus(404)
} }
// Ensure user has permission to delete these library items
if (!ensureUserCanAccessLibraryItemsForBatch(req, res, itemsToDelete)) {
return
}
const libraryId = itemsToDelete[0].libraryId const libraryId = itemsToDelete[0].libraryId
for (const libraryItem of itemsToDelete) { for (const libraryItem of itemsToDelete) {
const libraryItemPath = libraryItem.path const libraryItemPath = libraryItem.path
Logger.info(`[LibraryItemController] (${hardDelete ? 'Hard' : 'Soft'}) deleting Library Item "${libraryItem.media.title}" with id "${libraryItem.id}"`) Logger.info(`[LibraryItemController] (${hardDelete ? 'Hard' : 'Soft'}) deleting Library Item "${libraryItem.media.title}" with id "${libraryItem.id}"`)
@@ -565,7 +595,7 @@ class LibraryItemController {
authorIds.push(...libraryItem.media.authors.map((au) => au.id)) authorIds.push(...libraryItem.media.authors.map((au) => au.id))
} }
} }
await this.handleDeleteLibraryItem(libraryItem.id, mediaItemIds) await this.handleDeleteLibraryItem(libraryItem.id, mediaItemIds, libraryItem.libraryId)
if (hardDelete) { if (hardDelete) {
Logger.info(`[LibraryItemController] Deleting library item from file system at "${libraryItemPath}"`) Logger.info(`[LibraryItemController] Deleting library item from file system at "${libraryItemPath}"`)
await fs.remove(libraryItemPath).catch((error) => { await fs.remove(libraryItemPath).catch((error) => {
@@ -581,6 +611,7 @@ class LibraryItemController {
} }
await Database.resetLibraryIssuesFilterData(libraryId) await Database.resetLibraryIssuesFilterData(libraryId)
res.sendStatus(200) res.sendStatus(200)
} }
@@ -593,6 +624,11 @@ class LibraryItemController {
* @param {Response} res * @param {Response} res
*/ */
async batchUpdate(req, res) { async batchUpdate(req, res) {
if (!req.user.canUpdate) {
Logger.warn(`[LibraryItemController] User "${req.user.username}" attempted to batch update without permission`)
return res.sendStatus(403)
}
const updatePayloads = req.body const updatePayloads = req.body
if (!Array.isArray(updatePayloads) || !updatePayloads.length) { if (!Array.isArray(updatePayloads) || !updatePayloads.length) {
Logger.error(`[LibraryItemController] Batch update failed. Invalid payload`) Logger.error(`[LibraryItemController] Batch update failed. Invalid payload`)
@@ -615,6 +651,11 @@ class LibraryItemController {
return res.sendStatus(404) return res.sendStatus(404)
} }
// Ensure user has permission to update these library items
if (!ensureUserCanAccessLibraryItemsForBatch(req, res, libraryItems)) {
return
}
let itemsUpdated = 0 let itemsUpdated = 0
const seriesIdsRemoved = [] const seriesIdsRemoved = []
@@ -624,6 +665,11 @@ class LibraryItemController {
const mediaPayload = updatePayload.mediaPayload const mediaPayload = updatePayload.mediaPayload
const libraryItem = libraryItems.find((li) => li.id === updatePayload.id) const libraryItem = libraryItems.find((li) => li.id === updatePayload.id)
if (libraryItem.isPodcast && mediaPayload.autoDownloadSchedule && !cron.validate(mediaPayload.autoDownloadSchedule)) {
Logger.warn(`[LibraryItemController] Invalid auto download schedule cron expression "${mediaPayload.autoDownloadSchedule}" for library item "${libraryItem.media.title}" - skipping update`)
continue
}
let hasUpdates = await libraryItem.media.updateFromRequest(mediaPayload) let hasUpdates = await libraryItem.media.updateFromRequest(mediaPayload)
if (libraryItem.isBook && Array.isArray(mediaPayload.metadata?.series)) { if (libraryItem.isBook && Array.isArray(mediaPayload.metadata?.series)) {
@@ -695,6 +741,10 @@ class LibraryItemController {
const libraryItems = await Database.libraryItemModel.findAllExpandedWhere({ const libraryItems = await Database.libraryItemModel.findAllExpandedWhere({
id: libraryItemIds id: libraryItemIds
}) })
// Ensure user has permission to access these library items
if (!ensureUserCanAccessLibraryItemsForBatch(req, res, libraryItems)) {
return
}
res.json({ res.json({
libraryItems: libraryItems.map((li) => li.toOldJSONExpanded()) libraryItems: libraryItems.map((li) => li.toOldJSONExpanded())
}) })
+44 -4
View File
@@ -63,7 +63,7 @@ class MeController {
* @param {Response} res * @param {Response} res
*/ */
async getItemListeningSessions(req, res) { async getItemListeningSessions(req, res) {
const libraryItem = await Database.libraryItemModel.findByPk(req.params.libraryItemId) const libraryItem = await Database.libraryItemModel.getExpandedById(req.params.libraryItemId)
const episode = await Database.podcastEpisodeModel.findByPk(req.params.episodeId) const episode = await Database.podcastEpisodeModel.findByPk(req.params.episodeId)
if (!libraryItem || (libraryItem.isPodcast && !episode)) { if (!libraryItem || (libraryItem.isPodcast && !episode)) {
@@ -71,6 +71,12 @@ class MeController {
return res.sendStatus(404) return res.sendStatus(404)
} }
// Check if user has access to this library item
if (!req.user.checkCanAccessLibraryItem(libraryItem)) {
Logger.error(`[MeController] User "${req.user.username}" attempted to access listening sessions for library item "${req.params.libraryItemId}" without access`)
return res.sendStatus(403)
}
const mediaItemId = episode?.id || libraryItem.mediaId const mediaItemId = episode?.id || libraryItem.mediaId
let listeningSessions = await this.getUserItemListeningSessionsHelper(req.user.id, mediaItemId) let listeningSessions = await this.getUserItemListeningSessionsHelper(req.user.id, mediaItemId)
@@ -125,6 +131,13 @@ class MeController {
* @param {Response} res * @param {Response} res
*/ */
async removeMediaProgress(req, res) { async removeMediaProgress(req, res) {
// Verify the media progress belongs to the current user
const mediaProgress = req.user.mediaProgresses.find((mp) => mp.id === req.params.id)
if (!mediaProgress) {
Logger.error(`[MeController] Media progress not found or does not belong to user "${req.user.username}"`)
return res.sendStatus(404)
}
await Database.mediaProgressModel.removeById(req.params.id) await Database.mediaProgressModel.removeById(req.params.id)
req.user.mediaProgresses = req.user.mediaProgresses.filter((mp) => mp.id !== req.params.id) req.user.mediaProgresses = req.user.mediaProgresses.filter((mp) => mp.id !== req.params.id)
@@ -192,7 +205,16 @@ class MeController {
* @param {Response} res * @param {Response} res
*/ */
async createBookmark(req, res) { async createBookmark(req, res) {
if (!(await Database.libraryItemModel.checkExistsById(req.params.id))) return res.sendStatus(404) const libraryItem = await Database.libraryItemModel.getExpandedById(req.params.id)
if (!libraryItem) {
return res.sendStatus(404)
}
// Check if user has access to this library item
if (!req.user.checkCanAccessLibraryItem(libraryItem)) {
Logger.error(`[MeController] User "${req.user.username}" attempted to create bookmark for library item "${req.params.id}" without access`)
return res.sendStatus(403)
}
const { time, title } = req.body const { time, title } = req.body
if (isNullOrNaN(time)) { if (isNullOrNaN(time)) {
@@ -216,7 +238,16 @@ class MeController {
* @param {Response} res * @param {Response} res
*/ */
async updateBookmark(req, res) { async updateBookmark(req, res) {
if (!(await Database.libraryItemModel.checkExistsById(req.params.id))) return res.sendStatus(404) const libraryItem = await Database.libraryItemModel.getExpandedById(req.params.id)
if (!libraryItem) {
return res.sendStatus(404)
}
// Check if user has access to this library item
if (!req.user.checkCanAccessLibraryItem(libraryItem)) {
Logger.error(`[MeController] User "${req.user.username}" attempted to update bookmark for library item "${req.params.id}" without access`)
return res.sendStatus(403)
}
const { time, title } = req.body const { time, title } = req.body
if (isNullOrNaN(time)) { if (isNullOrNaN(time)) {
@@ -245,7 +276,16 @@ class MeController {
* @param {Response} res * @param {Response} res
*/ */
async removeBookmark(req, res) { async removeBookmark(req, res) {
if (!(await Database.libraryItemModel.checkExistsById(req.params.id))) return res.sendStatus(404) const libraryItem = await Database.libraryItemModel.getExpandedById(req.params.id)
if (!libraryItem) {
return res.sendStatus(404)
}
// Check if user has access to this library item
if (!req.user.checkCanAccessLibraryItem(libraryItem)) {
Logger.error(`[MeController] User "${req.user.username}" attempted to remove bookmark for library item "${req.params.id}" without access`)
return res.sendStatus(403)
}
const time = Number(req.params.time) const time = Number(req.params.time)
if (isNaN(time)) { if (isNaN(time)) {
+8 -7
View File
@@ -8,7 +8,7 @@ const Database = require('../Database')
const Watcher = require('../Watcher') const Watcher = require('../Watcher')
const libraryItemFilters = require('../utils/queries/libraryItemFilters') const libraryItemFilters = require('../utils/queries/libraryItemFilters')
const patternValidation = require('../libs/nodeCron/pattern-validation') const cron = require('../libs/nodeCron')
const { isObject, getTitleIgnorePrefix } = require('../utils/index') const { isObject, getTitleIgnorePrefix } = require('../utils/index')
const { sanitizeFilename } = require('../utils/fileUtils') const { sanitizeFilename } = require('../utils/fileUtils')
@@ -142,6 +142,9 @@ class MiscController {
Logger.warn('Cannot disable iframe when ALLOW_IFRAME is enabled in environment') Logger.warn('Cannot disable iframe when ALLOW_IFRAME is enabled in environment')
return res.status(400).send('Cannot disable iframe when ALLOW_IFRAME is enabled in environment') return res.status(400).send('Cannot disable iframe when ALLOW_IFRAME is enabled in environment')
} }
if (settingsUpdate.allowedOrigins && !Array.isArray(settingsUpdate.allowedOrigins)) {
return res.status(400).send('allowedOrigins must be an array')
}
const madeUpdates = Database.serverSettings.update(settingsUpdate) const madeUpdates = Database.serverSettings.update(settingsUpdate)
if (madeUpdates) { if (madeUpdates) {
@@ -602,13 +605,11 @@ class MiscController {
return res.sendStatus(400) return res.sendStatus(400)
} }
try { if (!cron.validate(expression)) {
patternValidation(expression) Logger.warn(`[MiscController] Invalid cron expression ${expression}`)
res.sendStatus(200) return res.status(400).send('Invalid cron expression')
} catch (error) {
Logger.warn(`[MiscController] Invalid cron expression ${expression}`, error.message)
res.status(400).send(error.message)
} }
res.sendStatus(200)
} }
/** /**
+23 -4
View File
@@ -2,6 +2,7 @@ const { Request, Response, NextFunction } = require('express')
const Logger = require('../Logger') const Logger = require('../Logger')
const SocketAuthority = require('../SocketAuthority') const SocketAuthority = require('../SocketAuthority')
const Database = require('../Database') const Database = require('../Database')
const htmlSanitizer = require('../utils/htmlSanitizer')
/** /**
* @typedef RequestUserObject * @typedef RequestUserObject
@@ -29,12 +30,17 @@ class PlaylistController {
const reqBody = req.body || {} const reqBody = req.body || {}
// Validation // Validation
if (!reqBody.name || !reqBody.libraryId) { const nameCleaned = htmlSanitizer.stripAllTags(reqBody.name)
if (!nameCleaned || !reqBody.libraryId) {
return res.status(400).send('Invalid playlist data') return res.status(400).send('Invalid playlist data')
} }
if (reqBody.description && typeof reqBody.description !== 'string') { if (reqBody.description && typeof reqBody.description !== 'string') {
return res.status(400).send('Invalid playlist description') return res.status(400).send('Invalid playlist description')
} }
if (!req.user.checkCanAccessLibrary(reqBody.libraryId)) {
Logger.warn(`[PlaylistController] User "${req.user.username}" attempted to create playlist in inaccessible library ${reqBody.libraryId}`)
return res.sendStatus(403)
}
const items = reqBody.items || [] const items = reqBody.items || []
const isPodcast = items.some((i) => i.episodeId) const isPodcast = items.some((i) => i.episodeId)
const libraryItemIds = new Set() const libraryItemIds = new Set()
@@ -84,7 +90,7 @@ class PlaylistController {
{ {
libraryId: reqBody.libraryId, libraryId: reqBody.libraryId,
userId: req.user.id, userId: req.user.id,
name: reqBody.name, name: nameCleaned,
description: reqBody.description || null description: reqBody.description || null
}, },
{ transaction } { transaction }
@@ -131,8 +137,9 @@ class PlaylistController {
*/ */
async findAllForUser(req, res) { async findAllForUser(req, res) {
const playlistsForUser = await Database.playlistModel.getOldPlaylistsForUserAndLibrary(req.user.id) const playlistsForUser = await Database.playlistModel.getOldPlaylistsForUserAndLibrary(req.user.id)
const accessiblePlaylists = playlistsForUser.filter((p) => req.user.checkCanAccessLibrary(p.libraryId))
res.json({ res.json({
playlists: playlistsForUser playlists: accessiblePlaylists
}) })
} }
@@ -174,7 +181,11 @@ class PlaylistController {
} }
const playlistUpdatePayload = {} const playlistUpdatePayload = {}
if (reqBody.name) playlistUpdatePayload.name = reqBody.name
const nameCleaned = htmlSanitizer.stripAllTags(reqBody.name)
if (nameCleaned) {
playlistUpdatePayload.name = nameCleaned
}
if (reqBody.description) playlistUpdatePayload.description = reqBody.description if (reqBody.description) playlistUpdatePayload.description = reqBody.description
// Update name and description // Update name and description
@@ -502,6 +513,10 @@ class PlaylistController {
if (!collection) { if (!collection) {
return res.status(404).send('Collection not found') return res.status(404).send('Collection not found')
} }
if (!req.user.checkCanAccessLibrary(collection.libraryId)) {
Logger.warn(`[PlaylistController] User "${req.user.username}" attempted to create playlist from collection ${collection.id} in inaccessible library ${collection.libraryId}`)
return res.status(404).send('Collection not found')
}
// Expand collection to get library items // Expand collection to get library items
const collectionExpanded = await collection.getOldJsonExpanded(req.user) const collectionExpanded = await collection.getOldJsonExpanded(req.user)
if (!collectionExpanded) { if (!collectionExpanded) {
@@ -567,6 +582,10 @@ class PlaylistController {
Logger.warn(`[PlaylistController] Playlist ${req.params.id} requested by user ${req.user.id} that is not the owner`) Logger.warn(`[PlaylistController] Playlist ${req.params.id} requested by user ${req.user.id} that is not the owner`)
return res.sendStatus(403) return res.sendStatus(403)
} }
if (!req.user.checkCanAccessLibrary(playlist.libraryId)) {
Logger.warn(`[PlaylistController] User "${req.user.username}" attempted to access playlist ${playlist.id} in inaccessible library ${playlist.libraryId}`)
return res.status(404).send('Playlist not found')
}
req.playlist = playlist req.playlist = playlist
} }
+24 -2
View File
@@ -5,9 +5,10 @@ const SocketAuthority = require('../SocketAuthority')
const Database = require('../Database') const Database = require('../Database')
const fs = require('../libs/fsExtra') const fs = require('../libs/fsExtra')
const cron = require('../libs/nodeCron')
const { getPodcastFeed, findMatchingEpisodes } = require('../utils/podcastUtils') const { getPodcastFeed, findMatchingEpisodes } = require('../utils/podcastUtils')
const { getFileTimestampsWithIno, filePathToPOSIX } = require('../utils/fileUtils') const { getFileTimestampsWithIno, filePathToPOSIX, isSameOrSubPath } = require('../utils/fileUtils')
const { validateUrl } = require('../utils/index') const { validateUrl } = require('../utils/index')
const htmlSanitizer = require('../utils/htmlSanitizer') const htmlSanitizer = require('../utils/htmlSanitizer')
@@ -46,6 +47,11 @@ class PodcastController {
return res.status(400).send('Invalid request body. "media" and "media.metadata" are required') return res.status(400).send('Invalid request body. "media" and "media.metadata" are required')
} }
if (payload.media.autoDownloadSchedule && !cron.validate(payload.media.autoDownloadSchedule)) {
Logger.error(`[PodcastController] Invalid auto download schedule cron expression "${payload.media.autoDownloadSchedule}"`)
return res.status(400).send('Invalid auto download schedule cron expression')
}
const library = await Database.libraryModel.findByIdWithFolders(payload.libraryId) const library = await Database.libraryModel.findByIdWithFolders(payload.libraryId)
if (!library) { if (!library) {
Logger.error(`[PodcastController] Create: Library not found "${payload.libraryId}"`) Logger.error(`[PodcastController] Create: Library not found "${payload.libraryId}"`)
@@ -58,8 +64,18 @@ class PodcastController {
return res.status(404).send('Folder not found') return res.status(404).send('Folder not found')
} }
if (typeof payload.path !== 'string' || !payload.path.trim()) {
return res.status(400).send('Invalid request body. "path" must be a non-empty string')
}
const libraryFolderPath = filePathToPOSIX(folder.path)
const podcastPath = filePathToPOSIX(payload.path) const podcastPath = filePathToPOSIX(payload.path)
if (!isSameOrSubPath(libraryFolderPath, podcastPath)) {
Logger.error(`[PodcastController] Create: Podcast path is outside library folder "${libraryFolderPath}": "${podcastPath}"`)
return res.status(400).send('Podcast path must be inside the selected library folder')
}
// Check if a library item with this podcast folder exists already // Check if a library item with this podcast folder exists already
const existingLibraryItem = const existingLibraryItem =
(await Database.libraryItemModel.count({ (await Database.libraryItemModel.count({
@@ -83,7 +99,7 @@ class PodcastController {
const libraryItemFolderStats = await getFileTimestampsWithIno(podcastPath) const libraryItemFolderStats = await getFileTimestampsWithIno(podcastPath)
let relPath = payload.path.replace(folder.fullPath, '') let relPath = podcastPath.replace(libraryFolderPath, '')
if (relPath.startsWith('/')) relPath = relPath.slice(1) if (relPath.startsWith('/')) relPath = relPath.slice(1)
let newLibraryItem = null let newLibraryItem = null
@@ -412,6 +428,12 @@ class PodcastController {
Logger.debug(`[PodcastController] Sanitized description from "${req.body[key]}" to "${sanitizedDescription}"`) Logger.debug(`[PodcastController] Sanitized description from "${req.body[key]}" to "${sanitizedDescription}"`)
req.body[key] = sanitizedDescription req.body[key] = sanitizedDescription
} }
} else if (key === 'subtitle' && req.body[key]) {
const sanitizedSubtitle = htmlSanitizer.sanitize(req.body[key])
if (sanitizedSubtitle !== req.body[key]) {
Logger.debug(`[PodcastController] Sanitized subtitle from "${req.body[key]}" to "${sanitizedSubtitle}"`)
req.body[key] = sanitizedSubtitle
}
} }
updatePayload[key] = req.body[key] updatePayload[key] = req.body[key]
+166 -49
View File
@@ -4,7 +4,29 @@ const BookFinder = require('../finders/BookFinder')
const PodcastFinder = require('../finders/PodcastFinder') const PodcastFinder = require('../finders/PodcastFinder')
const AuthorFinder = require('../finders/AuthorFinder') const AuthorFinder = require('../finders/AuthorFinder')
const Database = require('../Database') const Database = require('../Database')
const { isValidASIN } = require('../utils') const { isValidASIN, getQueryParamAsString, ValidationError, NotFoundError } = require('../utils')
// Provider name mappings for display purposes
const providerMap = {
all: 'All',
best: 'Best',
google: 'Google Books',
itunes: 'iTunes',
openlibrary: 'Open Library',
fantlab: 'FantLab.ru',
audiobookcovers: 'AudiobookCovers.com',
audible: 'Audible.com',
'audible.ca': 'Audible.ca',
'audible.uk': 'Audible.co.uk',
'audible.au': 'Audible.com.au',
'audible.fr': 'Audible.fr',
'audible.de': 'Audible.de',
'audible.jp': 'Audible.co.jp',
'audible.it': 'Audible.it',
'audible.in': 'Audible.in',
'audible.es': 'Audible.es',
audnexus: 'Audnexus'
}
/** /**
* @typedef RequestUserObject * @typedef RequestUserObject
@@ -16,6 +38,44 @@ const { isValidASIN } = require('../utils')
class SearchController { class SearchController {
constructor() {} constructor() {}
/**
* Fetches a library item by ID
* @param {string} id - Library item ID
* @param {string} methodName - Name of the calling method for logging
* @returns {Promise<import('../models/LibraryItem').LibraryItemExpanded>}
*/
static async fetchLibraryItem(id) {
const libraryItem = await Database.libraryItemModel.getExpandedById(id)
if (!libraryItem) {
throw new NotFoundError(`library item "${id}" not found`)
}
return libraryItem
}
/**
* Maps custom metadata providers to standardized format
* @param {Array} providers - Array of custom provider objects
* @returns {Array<{value: string, text: string}>}
*/
static mapCustomProviders(providers) {
return providers.map((provider) => ({
value: provider.getSlug(),
text: provider.name
}))
}
/**
* Static helper method to format provider for client (for use in array methods)
* @param {string} providerValue - Provider identifier
* @returns {{value: string, text: string}}
*/
static formatProvider(providerValue) {
return {
value: providerValue,
text: providerMap[providerValue] || providerValue
}
}
/** /**
* GET: /api/search/books * GET: /api/search/books
* *
@@ -23,19 +83,25 @@ class SearchController {
* @param {Response} res * @param {Response} res
*/ */
async findBooks(req, res) { async findBooks(req, res) {
const id = req.query.id try {
const libraryItem = await Database.libraryItemModel.getExpandedById(id) const query = req.query
const provider = req.query.provider || 'google' const provider = getQueryParamAsString(query, 'provider', 'google')
const title = req.query.title || '' const title = getQueryParamAsString(query, 'title', '')
const author = req.query.author || '' const author = getQueryParamAsString(query, 'author', '')
const id = getQueryParamAsString(query, 'id', undefined)
if (typeof provider !== 'string' || typeof title !== 'string' || typeof author !== 'string') { // Fetch library item
Logger.error(`[SearchController] findBooks: Invalid request query params`) const libraryItem = id ? await SearchController.fetchLibraryItem(id) : null
return res.status(400).send('Invalid request query params')
const results = await BookFinder.search(libraryItem, provider, title, author)
res.json(results)
} catch (error) {
Logger.error(`[SearchController] findBooks: ${error.message}`)
if (error instanceof ValidationError || error instanceof NotFoundError) {
return res.status(error.status).json({ error: error.message })
}
return res.status(500).json({ error: 'Internal server error' })
} }
const results = await BookFinder.search(libraryItem, provider, title, author)
res.json(results)
} }
/** /**
@@ -45,20 +111,24 @@ class SearchController {
* @param {Response} res * @param {Response} res
*/ */
async findCovers(req, res) { async findCovers(req, res) {
const query = req.query try {
const podcast = query.podcast == 1 const query = req.query
const podcast = query.podcast === '1' || query.podcast === 1
const title = getQueryParamAsString(query, 'title', '', true)
const author = getQueryParamAsString(query, 'author', '')
const provider = getQueryParamAsString(query, 'provider', 'google')
if (!query.title || typeof query.title !== 'string') { let results = null
Logger.error(`[SearchController] findCovers: Invalid title sent in query`) if (podcast) results = await PodcastFinder.findCovers(title)
return res.sendStatus(400) else results = await BookFinder.findCovers(provider, title, author)
res.json({ results })
} catch (error) {
Logger.error(`[SearchController] findCovers: ${error.message}`)
if (error instanceof ValidationError) {
return res.status(error.status).json({ error: error.message })
}
return res.status(500).json({ error: 'Internal server error' })
} }
let results = null
if (podcast) results = await PodcastFinder.findCovers(query.title)
else results = await BookFinder.findCovers(query.provider || 'google', query.title, query.author || '')
res.json({
results
})
} }
/** /**
@@ -69,34 +139,42 @@ class SearchController {
* @param {Response} res * @param {Response} res
*/ */
async findPodcasts(req, res) { async findPodcasts(req, res) {
const term = req.query.term try {
const country = req.query.country || 'us' const query = req.query
if (!term) { const term = getQueryParamAsString(query, 'term', '', true)
Logger.error('[SearchController] Invalid request query param "term" is required') const country = getQueryParamAsString(query, 'country', 'us')
return res.status(400).send('Invalid request query param "term" is required')
}
const results = await PodcastFinder.search(term, { const results = await PodcastFinder.search(term, { country })
country res.json(results)
}) } catch (error) {
res.json(results) Logger.error(`[SearchController] findPodcasts: ${error.message}`)
if (error instanceof ValidationError) {
return res.status(error.status).json({ error: error.message })
}
return res.status(500).json({ error: 'Internal server error' })
}
} }
/** /**
* GET: /api/search/authors * GET: /api/search/authors
* Note: This endpoint is not currently used in the web client.
* *
* @param {RequestWithUser} req * @param {RequestWithUser} req
* @param {Response} res * @param {Response} res
*/ */
async findAuthor(req, res) { async findAuthor(req, res) {
const query = req.query.q try {
if (!query || typeof query !== 'string') { const query = getQueryParamAsString(req.query, 'q', '', true)
Logger.error(`[SearchController] findAuthor: Invalid query param`)
return res.status(400).send('Invalid query param')
}
const author = await AuthorFinder.findAuthorByName(query) const author = await AuthorFinder.findAuthorByName(query)
res.json(author) res.json(author)
} catch (error) {
Logger.error(`[SearchController] findAuthor: ${error.message}`)
if (error instanceof ValidationError) {
return res.status(error.status).json({ error: error.message })
}
return res.status(500).json({ error: 'Internal server error' })
}
} }
/** /**
@@ -106,16 +184,55 @@ class SearchController {
* @param {Response} res * @param {Response} res
*/ */
async findChapters(req, res) { async findChapters(req, res) {
const asin = req.query.asin try {
if (!isValidASIN(asin.toUpperCase())) { const query = req.query
return res.json({ error: 'Invalid ASIN', stringKey: 'MessageInvalidAsin' }) const asin = getQueryParamAsString(query, 'asin', '', true)
const region = getQueryParamAsString(query, 'region', 'us').toLowerCase()
if (!isValidASIN(asin.toUpperCase())) throw new ValidationError('asin', 'is invalid')
const chapterData = await BookFinder.findChapters(asin, region)
if (!chapterData) {
return res.json({ error: 'Chapters not found', stringKey: 'MessageChaptersNotFound' })
}
res.json(chapterData)
} catch (error) {
Logger.error(`[SearchController] findChapters: ${error.message}`)
if (error instanceof ValidationError) {
if (error.paramName === 'asin') {
return res.json({ error: 'Invalid ASIN', stringKey: 'MessageInvalidAsin' })
}
if (error.paramName === 'region') {
return res.json({ error: 'Invalid region', stringKey: 'MessageInvalidRegion' })
}
}
return res.status(500).json({ error: 'Internal server error' })
} }
const region = (req.query.region || 'us').toLowerCase() }
const chapterData = await BookFinder.findChapters(asin, region)
if (!chapterData) { /**
return res.json({ error: 'Chapters not found', stringKey: 'MessageChaptersNotFound' }) * GET: /api/search/providers
* Get all available metadata providers
*
* @param {RequestWithUser} req
* @param {Response} res
*/
async getAllProviders(req, res) {
const customProviders = await Database.customMetadataProviderModel.findAll()
const customBookProviders = customProviders.filter((p) => p.mediaType === 'book')
const customPodcastProviders = customProviders.filter((p) => p.mediaType === 'podcast')
const bookProviders = BookFinder.providers.filter((p) => p !== 'audiobookcovers')
// Build minimized payload with custom providers merged in
const providers = {
books: [...bookProviders.map((p) => SearchController.formatProvider(p)), ...SearchController.mapCustomProviders(customBookProviders)],
booksCovers: [SearchController.formatProvider('best'), ...BookFinder.providers.map((p) => SearchController.formatProvider(p)), ...SearchController.mapCustomProviders(customBookProviders), SearchController.formatProvider('all')],
podcasts: [SearchController.formatProvider('itunes'), ...SearchController.mapCustomProviders(customPodcastProviders)]
} }
res.json(chapterData)
res.json({ providers })
} }
} }
module.exports = new SearchController() module.exports = new SearchController()
+3 -3
View File
@@ -339,9 +339,9 @@ class SessionController {
var playbackSession = this.playbackSessionManager.getSession(req.params.id) var playbackSession = this.playbackSessionManager.getSession(req.params.id)
if (!playbackSession) return res.sendStatus(404) if (!playbackSession) return res.sendStatus(404)
if (playbackSession.userId !== req.user.id) { if (playbackSession.userId !== req.user.id && !req.user.isAdminOrUp) {
Logger.error(`[SessionController] User "${req.user.username}" attempting to access session belonging to another user "${req.params.id}"`) Logger.error(`[SessionController] Non-admin user "${req.user.username}" attempting to access session belonging to another user "${req.params.id}"`)
return res.sendStatus(404) return res.sendStatus(403)
} }
req.playbackSession = playbackSession req.playbackSession = playbackSession
+4
View File
@@ -53,6 +53,10 @@ class ShareController {
if (playbackSession) { if (playbackSession) {
if (mediaItemShare.id === playbackSession.mediaItemShareId) { if (mediaItemShare.id === playbackSession.mediaItemShareId) {
Logger.debug(`[ShareController] Found share playback session ${req.cookies.share_session_id}`) Logger.debug(`[ShareController] Found share playback session ${req.cookies.share_session_id}`)
// If ?t was provided, override the cached currentTime
if (startTime > 0 && startTime < playbackSession.duration) {
playbackSession.currentTime = startTime
}
mediaItemShare.playbackSession = playbackSession.toJSONForClient() mediaItemShare.playbackSession = playbackSession.toJSONForClient()
return res.json(mediaItemShare) return res.json(mediaItemShare)
} else { } else {
+15 -7
View File
@@ -227,7 +227,7 @@ class BookFinder {
title = this.#removeAuthorFromTitle(title) title = this.#removeAuthorFromTitle(title)
const titleTransformers = [ const titleTransformers = [
[/([,:;_]| by ).*/g, ''], // Remove subtitle [/(: |[,;_]| by ).*/g, ''], // Remove subtitle
[/(^| )\d+k(bps)?( |$)/, ' '], // Remove bitrate [/(^| )\d+k(bps)?( |$)/, ' '], // Remove bitrate
[/ (2nd|3rd|\d+th)\s+ed(\.|ition)?/g, ''], // Remove edition [/ (2nd|3rd|\d+th)\s+ed(\.|ition)?/g, ''], // Remove edition
[/(^| |\.)(m4b|m4a|mp3)( |$)/g, ''], // Remove file-type [/(^| |\.)(m4b|m4a|mp3)( |$)/g, ''], // Remove file-type
@@ -385,6 +385,11 @@ class BookFinder {
if (!title) return books if (!title) return books
// Truncate excessively long inputs to prevent ReDoS attacks
const MAX_INPUT_LENGTH = 500
title = title.substring(0, MAX_INPUT_LENGTH)
author = author?.substring(0, MAX_INPUT_LENGTH) || author
const isTitleAsin = isValidASIN(title.toUpperCase()) const isTitleAsin = isValidASIN(title.toUpperCase())
let actualTitleQuery = title let actualTitleQuery = title
@@ -402,7 +407,8 @@ class BookFinder {
let authorCandidates = new BookFinder.AuthorCandidates(cleanAuthor, this.audnexus) let authorCandidates = new BookFinder.AuthorCandidates(cleanAuthor, this.audnexus)
// Remove underscores and parentheses with their contents, and replace with a separator // Remove underscores and parentheses with their contents, and replace with a separator
const cleanTitle = title.replace(/\[.*?\]|\(.*?\)|{.*?}|_/g, ' - ') // Use negated character classes to prevent ReDoS vulnerability (input length validated at entry point)
const cleanTitle = title.replace(/\[[^\]]*\]|\([^)]*\)|{[^}]*}|_/g, ' - ')
// Split title into hypen-separated parts // Split title into hypen-separated parts
const titleParts = cleanTitle.split(/ - | -|- /) const titleParts = cleanTitle.split(/ - | -|- /)
for (const titlePart of titleParts) authorCandidates.add(titlePart) for (const titlePart of titleParts) authorCandidates.add(titlePart)
@@ -422,7 +428,7 @@ class BookFinder {
} }
} }
if (books.length) { if (books.length && libraryItem) {
const isAudibleProvider = provider.startsWith('audible') const isAudibleProvider = provider.startsWith('audible')
const libraryItemDurationMinutes = libraryItem?.media?.duration ? libraryItem.media.duration / 60 : null const libraryItemDurationMinutes = libraryItem?.media?.duration ? libraryItem.media.duration / 60 : null
@@ -640,11 +646,11 @@ class BookFinder {
module.exports = new BookFinder() module.exports = new BookFinder()
function hasSubtitle(title) { function hasSubtitle(title) {
return title.includes(':') || title.includes(' - ') return title.includes(': ') || title.includes(' - ')
} }
function stripSubtitle(title) { function stripSubtitle(title) {
if (title.includes(':')) { if (title.includes(': ')) {
return title.split(':')[0].trim() return title.split(': ')[0].trim()
} else if (title.includes(' - ')) { } else if (title.includes(' - ')) {
return title.split(' - ')[0].trim() return title.split(' - ')[0].trim()
} }
@@ -668,7 +674,9 @@ function cleanTitleForCompares(title, keepSubtitle = false) {
let stripped = keepSubtitle ? title : stripSubtitle(title) let stripped = keepSubtitle ? title : stripSubtitle(title)
// Remove text in paranthesis (i.e. "Ender's Game (Ender's Saga)" becomes "Ender's Game") // Remove text in paranthesis (i.e. "Ender's Game (Ender's Saga)" becomes "Ender's Game")
let cleaned = stripped.replace(/ *\([^)]*\) */g, '') // Use negated character class to prevent ReDoS vulnerability (input length validated at entry point)
let cleaned = stripped.replace(/\([^)]*\)/g, '') // Remove parenthetical content
cleaned = cleaned.replace(/\s+/g, ' ').trim() // Clean up any resulting multiple spaces
// Remove single quotes (i.e. "Ender's Game" becomes "Enders Game") // Remove single quotes (i.e. "Ender's Game" becomes "Enders Game")
cleaned = cleaned.replace(/'/g, '') cleaned = cleaned.replace(/'/g, '')
+6 -2
View File
@@ -20,12 +20,16 @@ class PodcastFinder {
return results return results
} }
/**
* @param {string} term
* @returns {Promise<string[]>}
*/
async findCovers(term) { async findCovers(term) {
if (!term) return null if (!term) return null
Logger.debug(`[iTunes] Searching for podcast covers with term "${term}"`) Logger.debug(`[iTunes] Searching for podcast covers with term "${term}"`)
var results = await this.iTunesApi.searchPodcasts(term) const results = await this.iTunesApi.searchPodcasts(term)
if (!results) return [] if (!results) return []
return results.map(r => r.cover).filter(r => r) return results.map((r) => r.cover).filter((r) => r)
} }
} }
module.exports = new PodcastFinder() module.exports = new PodcastFinder()
+43 -1
View File
@@ -5,6 +5,9 @@ const Database = require('../Database')
class ApiCacheManager { class ApiCacheManager {
defaultCacheOptions = { max: 1000, maxSize: 10 * 1000 * 1000, sizeCalculation: (item) => item.body.length + JSON.stringify(item.headers).length } defaultCacheOptions = { max: 1000, maxSize: 10 * 1000 * 1000, sizeCalculation: (item) => item.body.length + JSON.stringify(item.headers).length }
defaultTtlOptions = { ttl: 30 * 60 * 1000 } defaultTtlOptions = { ttl: 30 * 60 * 1000 }
highChurnModels = new Set(['session', 'mediaProgress', 'playbackSession', 'device'])
modelsInvalidatingPersonalized = new Set(['mediaProgress'])
modelsInvalidatingMe = new Set(['session', 'mediaProgress', 'playbackSession', 'device'])
constructor(cache = new LRUCache(this.defaultCacheOptions), ttlOptions = this.defaultTtlOptions) { constructor(cache = new LRUCache(this.defaultCacheOptions), ttlOptions = this.defaultTtlOptions) {
this.cache = cache this.cache = cache
@@ -16,8 +19,47 @@ class ApiCacheManager {
hooks.forEach((hook) => database.sequelize.addHook(hook, (model) => this.clear(model, hook))) hooks.forEach((hook) => database.sequelize.addHook(hook, (model) => this.clear(model, hook)))
} }
getModelName(model) {
if (typeof model?.name === 'string') return model.name
if (typeof model?.model?.name === 'string') return model.model.name
if (typeof model?.constructor?.name === 'string' && model.constructor.name !== 'Object') return model.constructor.name
return 'unknown'
}
clearByUrlPattern(urlPattern) {
let removed = 0
for (const key of this.cache.keys()) {
try {
const parsed = JSON.parse(key)
if (typeof parsed?.url === 'string' && urlPattern.test(parsed.url)) {
if (this.cache.delete(key)) removed++
}
} catch {
if (this.cache.delete(key)) removed++
}
}
return removed
}
clearUserProgressSlices(modelName, hook) {
let removedPersonalized = 0
let removedRecentEpisodes = 0
if (this.modelsInvalidatingPersonalized.has(modelName)) {
removedPersonalized = this.clearByUrlPattern(/^\/libraries\/[^/]+\/personalized/)
removedRecentEpisodes = this.clearByUrlPattern(/^\/libraries\/[^/]+\/recent-episodes/)
}
const removedMe = this.modelsInvalidatingMe.has(modelName) ? this.clearByUrlPattern(/^\/me(\/|\?|$)/) : 0
Logger.debug(`[ApiCacheManager] ${modelName}.${hook}: cleared user-progress cache slices (personalized=${removedPersonalized}, recentEpisodes=${removedRecentEpisodes}, me=${removedMe})`)
}
clear(model, hook) { clear(model, hook) {
Logger.debug(`[ApiCacheManager] ${model.constructor.name}.${hook}: Clearing cache`) const modelName = this.getModelName(model)
if (this.highChurnModels.has(modelName)) {
this.clearUserProgressSlices(modelName, hook)
return
}
Logger.debug(`[ApiCacheManager] ${modelName}.${hook}: Clearing cache`)
this.cache.clear() this.cache.clear()
} }

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