Compare commits

...

20 Commits

Author SHA1 Message Date
allcontributors[bot]
4aac491209 docs: add AhmedNSidd as a contributor for code (#3964) [skip ci]
* docs: update README.md

* docs: update .all-contributorsrc

---------

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2024-10-20 22:11:50 -07:00
Ahmed Siddiqui
c2d4c61fae feat: add support for requesting "Specials" for TV Shows (#3724)
* feat: add support for requesting "Specials" for TV Shows

This commit is responsible for adding support in Overseerr for requesting "Special" episodes for TV
Shows. This request has become especially pertinent when you consider shows like "Doctor Who". These
shows have Specials that are critical to understanding the plot of a TV show.

fix #779

* chore(yarn.lock): undo inappropriate changes to yarn.lock

I was informed by @sct in a comment on the #3724 PR that it was not appropriate to commit the
changes that ended up being made to the yarn.lock file. This commit is responsible, then, for
undoing the changes to the yarn.lock file that ended up being submitted.

* refactor: change loose equality to strict equality

I received a comment from OwsleyJr pointing out that we are using loose equality when we could
alternatively just be using strict equality to increase the robustness of our code. This commit
does exactly that by squashing out previous usages of loose equality in my commits and replacing
them with strict equality

* refactor: move 'Specials' string to a global message

Owsley pointed out that we are redefining the 'Specials' string multiple times throughout this PR.
Instead, we can just move it as a global message. This commit does exactly that. It squashes out and
previous declarations of the 'Specials' string inside the src files, and moves it directly to the
global messages file.
2024-10-21 05:02:10 +00:00
Brandon Cohen
a2c25d5e4b fix: correct icon showing on certain phones when not pulled (#3939) 2024-09-24 07:32:21 +09:00
allcontributors[bot]
19461574f2 docs: add DamsDev1 as a contributor for code (#3924) [skip ci]
* docs: update README.md

* docs: update .all-contributorsrc

---------

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2024-08-24 07:41:28 +00:00
Damien Fajole
6d82eee656 feat(plex): refresh token schedule (#3875)
* feat: refresh token schedule

fix #3861

* fix(i18n): add i18n message

* refactor(plextv): use randomUUID crypto instead custom function
2024-08-24 00:32:09 -07:00
allcontributors[bot]
676a8c9764 docs: add maxnatamo as a contributor for code (#3907) [skip ci]
* docs: update README.md

* docs: update .all-contributorsrc

---------

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2024-07-30 23:36:58 +09:00
Max T. Kristiansen
e75351aa05 feat(watchlist): Cache watchlist requests with matching E-Tags (#3901)
* perf(watchlist): add E-Tag caching to Plex watchlist requests

* refactor(watchlist): increase frequency of watchlist requests

* fix: sync watchlist every 3 min instead of 3 sec
2024-07-30 23:36:22 +09:00
allcontributors[bot]
bafd93e952 docs: add demrich as a contributor for code (#3906) [skip ci]
* docs: update README.md

* docs: update .all-contributorsrc

---------

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2024-07-30 15:10:03 +09:00
David Emrich
1a6125c47d feat(studios): add a24 to studios list (#3902) 2024-07-30 15:09:21 +09:00
Brandon Cohen
14cf43de26 fix: correct deeplinks on iPad (#3883) 2024-06-21 08:42:37 +09:00
Jordan Jones
b6fe5ac637 feat(lang): add lang config for Bulgarian, Finnish, Ukrainian, Indonesian, Slovak, Turkish and Maori (#3834) 2024-05-02 10:34:09 +09:00
Weblate (bot)
36283f214a feat: translations update from Hosted Weblate (#3597)
* feat(lang): translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (1234 of 1234 strings)

feat(lang): translated using Weblate (Portuguese (Brazil))

Currently translated at 99.8% (1232 of 1234 strings)

Co-authored-by: Cleiton Carvalho <cleitonsilvacarvalho@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/pt_BR/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (German)

Currently translated at 100.0% (1240 of 1240 strings)

feat(lang): translated using Weblate (German)

Currently translated at 100.0% (1234 of 1234 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Nandor Rusz <nandor.rusz@vodafone.de>
Co-authored-by: Thomas Schöneberg <ta.schoeneberg@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/de/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Danish)

Currently translated at 100.0% (1240 of 1240 strings)

feat(lang): translated using Weblate (Danish)

Currently translated at 100.0% (1236 of 1236 strings)

feat(lang): translated using Weblate (Danish)

Currently translated at 100.0% (1234 of 1234 strings)

Co-authored-by: Anders Ecklon <aecklon@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Kenneth Hansen <erathor@live.dk>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/da/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Greek)

Currently translated at 100.0% (1240 of 1240 strings)

feat(lang): translated using Weblate (Greek)

Currently translated at 100.0% (1236 of 1236 strings)

Co-authored-by: BeardedWatermelon <BeardedWatermelon@users.noreply.hosted.weblate.org>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/el/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Russian)

Currently translated at 100.0% (1240 of 1240 strings)

feat(lang): translated using Weblate (Russian)

Currently translated at 100.0% (1240 of 1240 strings)

feat(lang): translated using Weblate (Russian)

Currently translated at 99.5% (1234 of 1240 strings)

feat(lang): translated using Weblate (Russian)

Currently translated at 100.0% (1234 of 1234 strings)

feat(lang): translated using Weblate (Russian)

Currently translated at 100.0% (1234 of 1234 strings)

feat(lang): translated using Weblate (Russian)

Currently translated at 100.0% (1234 of 1234 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: SoundwaveUwU <SoundwaveUwU@users.noreply.hosted.weblate.org>
Co-authored-by: SoundwaveUwU <noreply@1000-7.space>
Co-authored-by: Димитър Мазнеков (Topper) <d.maznekov@gmail.com>
Co-authored-by: Кирилл Тюрин <1337soundwave1337@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/ru/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Romanian)

Currently translated at 37.1% (461 of 1240 strings)

feat(lang): translated using Weblate (Romanian)

Currently translated at 37.0% (459 of 1240 strings)

feat(lang): translated using Weblate (Romanian)

Currently translated at 34.8% (432 of 1240 strings)

Co-authored-by: Don Cezar <goldie.czr@gmail.com>
Co-authored-by: Dragos <themsk@yahoo.com>
Co-authored-by: Eduard Oancea <uberfly@420blaze.it>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/ro/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Bulgarian)

Currently translated at 100.0% (1240 of 1240 strings)

feat(lang): translated using Weblate (Bulgarian)

Currently translated at 100.0% (1240 of 1240 strings)

feat(lang): translated using Weblate (Bulgarian)

Currently translated at 57.4% (712 of 1240 strings)

feat(lang): translated using Weblate (Bulgarian)

Currently translated at 13.2% (164 of 1240 strings)

feat(lang): translated using Weblate (Bulgarian)

Currently translated at 4.8% (60 of 1240 strings)

feat(lang): added translation using Weblate (Bulgarian)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: sct <sctsnipe@gmail.com>
Co-authored-by: Димитър Мазнеков (Topper) <d.maznekov@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/bg/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Ukrainian)

Currently translated at 100.0% (1240 of 1240 strings)

feat(lang): translated using Weblate (Ukrainian)

Currently translated at 100.0% (1240 of 1240 strings)

feat(lang): translated using Weblate (Ukrainian)

Currently translated at 100.0% (1240 of 1240 strings)

feat(lang): translated using Weblate (Ukrainian)

Currently translated at 100.0% (1240 of 1240 strings)

feat(lang): translated using Weblate (Ukrainian)

Currently translated at 100.0% (1240 of 1240 strings)

feat(lang): translated using Weblate (Ukrainian)

Currently translated at 100.0% (1240 of 1240 strings)

feat(lang): translated using Weblate (Ukrainian)

Currently translated at 100.0% (1240 of 1240 strings)

feat(lang): translated using Weblate (Ukrainian)

Currently translated at 100.0% (1240 of 1240 strings)

feat(lang): translated using Weblate (Ukrainian)

Currently translated at 100.0% (1240 of 1240 strings)

feat(lang): translated using Weblate (Ukrainian)

Currently translated at 100.0% (1240 of 1240 strings)

feat(lang): translated using Weblate (Ukrainian)

Currently translated at 99.1% (1230 of 1240 strings)

feat(lang): translated using Weblate (Ukrainian)

Currently translated at 99.1% (1230 of 1240 strings)

feat(lang): translated using Weblate (Ukrainian)

Currently translated at 99.1% (1230 of 1240 strings)

feat(lang): translated using Weblate (Ukrainian)

Currently translated at 97.9% (1215 of 1240 strings)

feat(lang): translated using Weblate (Ukrainian)

Currently translated at 82.0% (1017 of 1240 strings)

feat(lang): translated using Weblate (Ukrainian)

Currently translated at 72.9% (905 of 1240 strings)

feat(lang): translated using Weblate (Ukrainian)

Currently translated at 72.9% (905 of 1240 strings)

feat(lang): translated using Weblate (Ukrainian)

Currently translated at 71.3% (885 of 1240 strings)

feat(lang): translated using Weblate (Ukrainian)

Currently translated at 64.9% (805 of 1240 strings)

feat(lang): translated using Weblate (Ukrainian)

Currently translated at 64.4% (799 of 1240 strings)

feat(lang): translated using Weblate (Ukrainian)

Currently translated at 63.8% (792 of 1240 strings)

feat(lang): translated using Weblate (Ukrainian)

Currently translated at 63.7% (791 of 1240 strings)

feat(lang): translated using Weblate (Ukrainian)

Currently translated at 57.5% (714 of 1240 strings)

feat(lang): translated using Weblate (Ukrainian)

Currently translated at 49.9% (619 of 1240 strings)

feat(lang): translated using Weblate (Ukrainian)

Currently translated at 35.9% (446 of 1240 strings)

feat(lang): translated using Weblate (Ukrainian)

Currently translated at 35.9% (446 of 1240 strings)

feat(lang): translated using Weblate (Ukrainian)

Currently translated at 32.1% (399 of 1240 strings)

feat(lang): translated using Weblate (Ukrainian)

Currently translated at 24.6% (306 of 1240 strings)

feat(lang): translated using Weblate (Ukrainian)

Currently translated at 18.9% (235 of 1240 strings)

feat(lang): translated using Weblate (Ukrainian)

Currently translated at 17.5% (217 of 1240 strings)

feat(lang): translated using Weblate (Ukrainian)

Currently translated at 17.3% (215 of 1240 strings)

feat(lang): translated using Weblate (Ukrainian)

Currently translated at 8.0% (100 of 1240 strings)

feat(lang): translated using Weblate (Ukrainian)

Currently translated at 3.3% (41 of 1240 strings)

feat(lang): added translation using Weblate (Ukrainian)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Michael Michael <michaelvelosk@gmail.com>
Co-authored-by: sct <sctsnipe@gmail.com>
Co-authored-by: Сергій <sergiy.goncharuk.1@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/uk/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Catalan)

Currently translated at 100.0% (1240 of 1240 strings)

feat(lang): translated using Weblate (Catalan)

Currently translated at 100.0% (1240 of 1240 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: dtalens <databio@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/ca/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Czech)

Currently translated at 100.0% (1240 of 1240 strings)

feat(lang): translated using Weblate (Czech)

Currently translated at 99.6% (1236 of 1240 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Karel Krýda <karel.kryda@gmail.com>
Co-authored-by: Smexhy <roman.bartik@icloud.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/cs/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Croatian)

Currently translated at 100.0% (1240 of 1240 strings)

feat(lang): translated using Weblate (Croatian)

Currently translated at 99.8% (1238 of 1240 strings)

feat(lang): translated using Weblate (Croatian)

Currently translated at 99.8% (1238 of 1240 strings)

feat(lang): translated using Weblate (Croatian)

Currently translated at 99.6% (1236 of 1240 strings)

feat(lang): translated using Weblate (Croatian)

Currently translated at 99.5% (1235 of 1240 strings)

feat(lang): translated using Weblate (Croatian)

Currently translated at 99.5% (1235 of 1240 strings)

feat(lang): translated using Weblate (Croatian)

Currently translated at 99.1% (1230 of 1240 strings)

feat(lang): translated using Weblate (Croatian)

Currently translated at 97.5% (1210 of 1240 strings)

feat(lang): translated using Weblate (Croatian)

Currently translated at 95.5% (1185 of 1240 strings)

feat(lang): translated using Weblate (Croatian)

Currently translated at 95.6% (1182 of 1236 strings)

feat(lang): translated using Weblate (Croatian)

Currently translated at 95.6% (1182 of 1236 strings)

feat(lang): translated using Weblate (Croatian)

Currently translated at 95.2% (1177 of 1236 strings)

feat(lang): translated using Weblate (Croatian)

Currently translated at 95.2% (1177 of 1236 strings)

feat(lang): translated using Weblate (Croatian)

Currently translated at 94.3% (1166 of 1236 strings)

feat(lang): translated using Weblate (Croatian)

Currently translated at 91.7% (1134 of 1236 strings)

feat(lang): translated using Weblate (Croatian)

Currently translated at 91.7% (1134 of 1236 strings)

Co-authored-by: Bruno Ševčenko <bs3vcenk@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Milo Ivir <mail@milotype.de>
Co-authored-by: Stjepan <stjepstjepanovic@gmail.com>
Co-authored-by: lpispek <lpispek@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/hr/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Hungarian)

Currently translated at 91.3% (1133 of 1240 strings)

feat(lang): translated using Weblate (Hungarian)

Currently translated at 89.3% (1108 of 1240 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Levente Szajkó <leviko112@gmail.com>
Co-authored-by: Nandor Rusz <nandor.rusz@vodafone.de>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/hu/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Hebrew)

Currently translated at 13.9% (172 of 1236 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: osh <osh@osh.cc>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/he/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Polish)

Currently translated at 99.1% (1225 of 1236 strings)

Co-authored-by: Eryk Michalak <gnu.ewm@protonmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/pl/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Italian)

Currently translated at 92.8% (1148 of 1236 strings)

Co-authored-by: Francesco <francy.ammirati@hotmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/it/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Arabic)

Currently translated at 100.0% (1240 of 1240 strings)

feat(lang): translated using Weblate (Arabic)

Currently translated at 100.0% (1240 of 1240 strings)

feat(lang): translated using Weblate (Arabic)

Currently translated at 100.0% (1234 of 1234 strings)

Co-authored-by: Fhd-pro <juve.11@msn.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/ar/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Dutch)

Currently translated at 100.0% (1240 of 1240 strings)

feat(lang): translated using Weblate (Dutch)

Currently translated at 100.0% (1234 of 1234 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Kobe <kobaubarr@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/nl/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Spanish)

Currently translated at 100.0% (1240 of 1240 strings)

feat(lang): translated using Weblate (Spanish)

Currently translated at 100.0% (1236 of 1236 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/es/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (French)

Currently translated at 100.0% (1240 of 1240 strings)

feat(lang): translated using Weblate (French)

Currently translated at 100.0% (1240 of 1240 strings)

feat(lang): translated using Weblate (French)

Currently translated at 100.0% (1236 of 1236 strings)

feat(lang): translated using Weblate (French)

Currently translated at 99.9% (1235 of 1236 strings)

feat(lang): translated using Weblate (French)

Currently translated at 99.9% (1235 of 1236 strings)

Co-authored-by: Baptiste <baptiste.nee@me.com>
Co-authored-by: Dimitri <dimitridroeck@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Maxime Lafarie <maxime.lafarie@gmail.com>
Co-authored-by: Miguel <mig.mllr@gmail.com>
Co-authored-by: asurare <jonathan.biteau16@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/fr/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Swedish)

Currently translated at 100.0% (1240 of 1240 strings)

feat(lang): translated using Weblate (Swedish)

Currently translated at 100.0% (1240 of 1240 strings)

feat(lang): translated using Weblate (Swedish)

Currently translated at 100.0% (1240 of 1240 strings)

feat(lang): translated using Weblate (Swedish)

Currently translated at 100.0% (1240 of 1240 strings)

feat(lang): translated using Weblate (Swedish)

Currently translated at 100.0% (1240 of 1240 strings)

feat(lang): translated using Weblate (Swedish)

Currently translated at 100.0% (1240 of 1240 strings)

feat(lang): translated using Weblate (Swedish)

Currently translated at 100.0% (1240 of 1240 strings)

feat(lang): translated using Weblate (Swedish)

Currently translated at 100.0% (1236 of 1236 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Per Erik <urbanlolface@gmail.com>
Co-authored-by: Shjosan <shjosan@kakmix.co>
Co-authored-by: bittin1ddc447d824349b2 <bittin@reimu.nl>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/sv/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Finnish)

Currently translated at 2.6% (33 of 1240 strings)

feat(lang): added translation using Weblate (Finnish)

Co-authored-by: Eero Konttaniemi <eero.konttaniemi@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: sct <sctsnipe@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/fi/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Serbian)

Currently translated at 50.8% (630 of 1240 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Milan Smudja <smudja@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/sr/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Korean)

Currently translated at 100.0% (1234 of 1234 strings)

Co-authored-by: Developer J <jshsakura@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/ko/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (1240 of 1240 strings)

feat(lang): translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (1240 of 1240 strings)

feat(lang): translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (1234 of 1234 strings)

Co-authored-by: Haohao Zhang <hyacz@foxmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: lkw123 <lkw20010211@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/zh_Hans/
Translation: Overseerr/Overseerr Frontend

---------

Co-authored-by: Cleiton Carvalho <cleitonsilvacarvalho@gmail.com>
Co-authored-by: Nandor Rusz <nandor.rusz@vodafone.de>
Co-authored-by: Thomas Schöneberg <ta.schoeneberg@gmail.com>
Co-authored-by: Anders Ecklon <aecklon@gmail.com>
Co-authored-by: Kenneth Hansen <erathor@live.dk>
Co-authored-by: BeardedWatermelon <BeardedWatermelon@users.noreply.hosted.weblate.org>
Co-authored-by: SoundwaveUwU <SoundwaveUwU@users.noreply.hosted.weblate.org>
Co-authored-by: SoundwaveUwU <noreply@1000-7.space>
Co-authored-by: Димитър Мазнеков (Topper) <d.maznekov@gmail.com>
Co-authored-by: Кирилл Тюрин <1337soundwave1337@gmail.com>
Co-authored-by: Don Cezar <goldie.czr@gmail.com>
Co-authored-by: Dragos <themsk@yahoo.com>
Co-authored-by: Eduard Oancea <uberfly@420blaze.it>
Co-authored-by: sct <sctsnipe@gmail.com>
Co-authored-by: Michael Michael <michaelvelosk@gmail.com>
Co-authored-by: Сергій <sergiy.goncharuk.1@gmail.com>
Co-authored-by: dtalens <databio@gmail.com>
Co-authored-by: Karel Krýda <karel.kryda@gmail.com>
Co-authored-by: Smexhy <roman.bartik@icloud.com>
Co-authored-by: Bruno Ševčenko <bs3vcenk@gmail.com>
Co-authored-by: Milo Ivir <mail@milotype.de>
Co-authored-by: Stjepan <stjepstjepanovic@gmail.com>
Co-authored-by: lpispek <lpispek@gmail.com>
Co-authored-by: Levente Szajkó <leviko112@gmail.com>
Co-authored-by: osh <osh@osh.cc>
Co-authored-by: Eryk Michalak <gnu.ewm@protonmail.com>
Co-authored-by: Francesco <francy.ammirati@hotmail.com>
Co-authored-by: Fhd-pro <juve.11@msn.com>
Co-authored-by: Kobe <kobaubarr@gmail.com>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Co-authored-by: Baptiste <baptiste.nee@me.com>
Co-authored-by: Dimitri <dimitridroeck@gmail.com>
Co-authored-by: Maxime Lafarie <maxime.lafarie@gmail.com>
Co-authored-by: Miguel <mig.mllr@gmail.com>
Co-authored-by: asurare <jonathan.biteau16@gmail.com>
Co-authored-by: Per Erik <urbanlolface@gmail.com>
Co-authored-by: Shjosan <shjosan@kakmix.co>
Co-authored-by: bittin1ddc447d824349b2 <bittin@reimu.nl>
Co-authored-by: Eero Konttaniemi <eero.konttaniemi@gmail.com>
Co-authored-by: Milan Smudja <smudja@gmail.com>
Co-authored-by: Developer J <jshsakura@gmail.com>
Co-authored-by: Haohao Zhang <hyacz@foxmail.com>
Co-authored-by: lkw123 <lkw20010211@gmail.com>
2024-04-03 09:45:20 +09:00
allcontributors[bot]
d4ae554400 docs: add Fuochi as a contributor for doc (#3826)
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2024-03-27 22:29:18 +04:00
Fuochi
af0bd4ca8b fix(docs): correct openapi docs minor issues (#3648) 2024-03-27 21:46:07 +04:00
Fallenbagel
107bce2e86 fix(ui): ensure title fits into the view collection box (#3696) 2024-03-10 19:12:39 +00:00
allcontributors[bot]
c749a0f9af docs: add Loetwiek as a contributor for code (#3776) [skip ci]
* docs: update README.md

* docs: update .all-contributorsrc

---------

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2024-02-12 18:57:29 +00:00
Loetwiek
d28e13187b feat(tooltip): add tooltip to display exact time on date hover (#3773)
Co-authored-by: Loetwiek <lodommerholtcm@gmail.com>
2024-02-12 10:47:29 -08:00
allcontributors[bot]
2dd00481c2 docs: add j0srisk as a contributor for code (#3745) [skip ci]
* docs: update README.md

* docs: update .all-contributorsrc

---------

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2024-01-10 12:03:55 +09:00
Joseph Risk
5c60ffc567 fix: api language query parameter (#3720) 2024-01-10 12:03:11 +09:00
Isaac M
8251c73ffa feat(pushover): attach image to pushover notification payload (#3701) 2023-11-29 19:39:01 +04:00
58 changed files with 3809 additions and 569 deletions

View File

@@ -908,6 +908,69 @@
"contributions": [ "contributions": [
"code" "code"
] ]
},
{
"login": "j0srisk",
"name": "Joseph Risk",
"avatar_url": "https://avatars.githubusercontent.com/u/18372584?v=4",
"profile": "http://josephrisk.com",
"contributions": [
"code"
]
},
{
"login": "Loetwiek",
"name": "Loetwiek",
"avatar_url": "https://avatars.githubusercontent.com/u/79059734?v=4",
"profile": "https://github.com/Loetwiek",
"contributions": [
"code"
]
},
{
"login": "Fuochi",
"name": "Fuochi",
"avatar_url": "https://avatars.githubusercontent.com/u/4720478?v=4",
"profile": "https://github.com/Fuochi",
"contributions": [
"doc"
]
},
{
"login": "demrich",
"name": "David Emrich",
"avatar_url": "https://avatars.githubusercontent.com/u/30092389?v=4",
"profile": "https://github.com/demrich",
"contributions": [
"code"
]
},
{
"login": "maxnatamo",
"name": "Max T. Kristiansen",
"avatar_url": "https://avatars.githubusercontent.com/u/5898152?v=4",
"profile": "https://maxtrier.dk",
"contributions": [
"code"
]
},
{
"login": "DamsDev1",
"name": "Damien Fajole",
"avatar_url": "https://avatars.githubusercontent.com/u/60252259?v=4",
"profile": "https://damsdev.me",
"contributions": [
"code"
]
},
{
"login": "AhmedNSidd",
"name": "Ahmed Siddiqui",
"avatar_url": "https://avatars.githubusercontent.com/u/36286128?v=4",
"profile": "https://github.com/AhmedNSidd",
"contributions": [
"code"
]
} }
], ],
"badgeTemplate": "<a href=\"#contributors-\"><img alt=\"All Contributors\" src=\"https://img.shields.io/badge/all_contributors-<%= contributors.length %>-orange.svg\"/></a>", "badgeTemplate": "<a href=\"#contributors-\"><img alt=\"All Contributors\" src=\"https://img.shields.io/badge/all_contributors-<%= contributors.length %>-orange.svg\"/></a>",

View File

@@ -11,7 +11,7 @@
<a href="https://hosted.weblate.org/engage/overseerr/"><img src="https://hosted.weblate.org/widgets/overseerr/-/overseerr-frontend/svg-badge.svg" alt="Translation status" /></a> <a href="https://hosted.weblate.org/engage/overseerr/"><img src="https://hosted.weblate.org/widgets/overseerr/-/overseerr-frontend/svg-badge.svg" alt="Translation status" /></a>
<a href="https://github.com/sct/overseerr/blob/develop/LICENSE"><img alt="GitHub" src="https://img.shields.io/github/license/sct/overseerr"></a> <a href="https://github.com/sct/overseerr/blob/develop/LICENSE"><img alt="GitHub" src="https://img.shields.io/github/license/sct/overseerr"></a>
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section --> <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
<a href="#contributors-"><img alt="All Contributors" src="https://img.shields.io/badge/all_contributors-99-orange.svg"/></a> <a href="#contributors-"><img alt="All Contributors" src="https://img.shields.io/badge/all_contributors-106-orange.svg"/></a>
<!-- ALL-CONTRIBUTORS-BADGE:END --> <!-- ALL-CONTRIBUTORS-BADGE:END -->
</p> </p>
@@ -202,6 +202,15 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
</tr> </tr>
<tr> <tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/RemiRigal"><img src="https://avatars.githubusercontent.com/u/19256051?v=4?s=100" width="100px;" alt="RemiRigal"/><br /><sub><b>RemiRigal</b></sub></a><br /><a href="https://github.com/sct/overseerr/commits?author=RemiRigal" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/RemiRigal"><img src="https://avatars.githubusercontent.com/u/19256051?v=4?s=100" width="100px;" alt="RemiRigal"/><br /><sub><b>RemiRigal</b></sub></a><br /><a href="https://github.com/sct/overseerr/commits?author=RemiRigal" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="http://josephrisk.com"><img src="https://avatars.githubusercontent.com/u/18372584?v=4?s=100" width="100px;" alt="Joseph Risk"/><br /><sub><b>Joseph Risk</b></sub></a><br /><a href="https://github.com/sct/overseerr/commits?author=j0srisk" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Loetwiek"><img src="https://avatars.githubusercontent.com/u/79059734?v=4?s=100" width="100px;" alt="Loetwiek"/><br /><sub><b>Loetwiek</b></sub></a><br /><a href="https://github.com/sct/overseerr/commits?author=Loetwiek" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Fuochi"><img src="https://avatars.githubusercontent.com/u/4720478?v=4?s=100" width="100px;" alt="Fuochi"/><br /><sub><b>Fuochi</b></sub></a><br /><a href="https://github.com/sct/overseerr/commits?author=Fuochi" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/demrich"><img src="https://avatars.githubusercontent.com/u/30092389?v=4?s=100" width="100px;" alt="David Emrich"/><br /><sub><b>David Emrich</b></sub></a><br /><a href="https://github.com/sct/overseerr/commits?author=demrich" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://maxtrier.dk"><img src="https://avatars.githubusercontent.com/u/5898152?v=4?s=100" width="100px;" alt="Max T. Kristiansen"/><br /><sub><b>Max T. Kristiansen</b></sub></a><br /><a href="https://github.com/sct/overseerr/commits?author=maxnatamo" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://damsdev.me"><img src="https://avatars.githubusercontent.com/u/60252259?v=4?s=100" width="100px;" alt="Damien Fajole"/><br /><sub><b>Damien Fajole</b></sub></a><br /><a href="https://github.com/sct/overseerr/commits?author=DamsDev1" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/AhmedNSidd"><img src="https://avatars.githubusercontent.com/u/36286128?v=4?s=100" width="100px;" alt="Ahmed Siddiqui"/><br /><sub><b>Ahmed Siddiqui</b></sub></a><br /><a href="https://github.com/sct/overseerr/commits?author=AhmedNSidd" title="Code">💻</a></td>
</tr> </tr>
</tbody> </tbody>
</table> </table>

View File

@@ -3170,6 +3170,12 @@ paths:
Updates a single slider and return the newly updated slider. Requires the `ADMIN` permission. Updates a single slider and return the newly updated slider. Requires the `ADMIN` permission.
tags: tags:
- settings - settings
parameters:
- in: path
name: sliderId
required: true
schema:
type: number
requestBody: requestBody:
required: true required: true
content: content:
@@ -3467,7 +3473,7 @@ paths:
results: results:
type: array type: array
items: items:
$ref: '#/components/schemas/User' $ref: '#/components/schemas/User'
post: post:
summary: Create new user summary: Create new user
description: | description: |
@@ -5012,7 +5018,7 @@ paths:
- type: array - type: array
items: items:
type: number type: number
minimum: 1 minimum: 0
- type: string - type: string
enum: [all] enum: [all]
is4k: is4k:
@@ -5118,7 +5124,7 @@ paths:
type: array type: array
items: items:
type: number type: number
minimum: 1 minimum: 0
is4k: is4k:
type: boolean type: boolean
example: false example: false

View File

@@ -2,6 +2,7 @@ import type { PlexDevice } from '@server/interfaces/api/plexInterfaces';
import cacheManager from '@server/lib/cache'; import cacheManager from '@server/lib/cache';
import { getSettings } from '@server/lib/settings'; import { getSettings } from '@server/lib/settings';
import logger from '@server/logger'; import logger from '@server/logger';
import { randomUUID } from 'node:crypto';
import xml2js from 'xml2js'; import xml2js from 'xml2js';
import ExternalAPI from './externalapi'; import ExternalAPI from './externalapi';
@@ -127,6 +128,11 @@ export interface PlexWatchlistItem {
title: string; title: string;
} }
export interface PlexWatchlistCache {
etag: string;
response: WatchlistResponse;
}
class PlexTvAPI extends ExternalAPI { class PlexTvAPI extends ExternalAPI {
private authToken: string; private authToken: string;
@@ -270,6 +276,11 @@ class PlexTvAPI extends ExternalAPI {
items: PlexWatchlistItem[]; items: PlexWatchlistItem[];
}> { }> {
try { try {
const watchlistCache = cacheManager.getCache('plexwatchlist');
let cachedWatchlist = watchlistCache.data.get<PlexWatchlistCache>(
this.authToken
);
const response = await this.axios.get<WatchlistResponse>( const response = await this.axios.get<WatchlistResponse>(
'/library/sections/watchlist/all', '/library/sections/watchlist/all',
{ {
@@ -277,12 +288,29 @@ class PlexTvAPI extends ExternalAPI {
'X-Plex-Container-Start': offset, 'X-Plex-Container-Start': offset,
'X-Plex-Container-Size': size, 'X-Plex-Container-Size': size,
}, },
headers: {
'If-None-Match': cachedWatchlist?.etag,
},
baseURL: 'https://metadata.provider.plex.tv', baseURL: 'https://metadata.provider.plex.tv',
validateStatus: (status) => status < 400, // Allow HTTP 304 to return without error
} }
); );
// If we don't recieve HTTP 304, the watchlist has been updated and we need to update the cache.
if (response.status >= 200 && response.status <= 299) {
cachedWatchlist = {
etag: response.headers.etag,
response: response.data,
};
watchlistCache.data.set<PlexWatchlistCache>(
this.authToken,
cachedWatchlist
);
}
const watchlistDetails = await Promise.all( const watchlistDetails = await Promise.all(
(response.data.MediaContainer.Metadata ?? []).map( (cachedWatchlist?.response.MediaContainer.Metadata ?? []).map(
async (watchlistItem) => { async (watchlistItem) => {
const detailedResponse = await this.getRolling<MetadataResponse>( const detailedResponse = await this.getRolling<MetadataResponse>(
`/library/metadata/${watchlistItem.ratingKey}`, `/library/metadata/${watchlistItem.ratingKey}`,
@@ -320,7 +348,7 @@ class PlexTvAPI extends ExternalAPI {
return { return {
offset, offset,
size, size,
totalSize: response.data.MediaContainer.totalSize, totalSize: cachedWatchlist?.response.MediaContainer.totalSize ?? 0,
items: filteredList, items: filteredList,
}; };
} catch (e) { } catch (e) {
@@ -336,6 +364,24 @@ class PlexTvAPI extends ExternalAPI {
}; };
} }
} }
public async pingToken() {
try {
const response = await this.axios.get('/api/v2/ping', {
headers: {
'X-Plex-Client-Identifier': randomUUID(),
},
});
if (!response?.data?.pong) {
throw new Error('No pong response');
}
} catch (e) {
logger.error('Failed to ping token', {
label: 'Plex Refresh Token',
errorMessage: e.message,
});
}
}
} }
export default PlexTvAPI; export default PlexTvAPI;

View File

@@ -246,9 +246,7 @@ export class MediaRequest {
>; >;
const requestedSeasons = const requestedSeasons =
requestBody.seasons === 'all' requestBody.seasons === 'all'
? tmdbMediaShow.seasons ? tmdbMediaShow.seasons.map((season) => season.season_number)
.map((season) => season.season_number)
.filter((sn) => sn > 0)
: (requestBody.seasons as number[]); : (requestBody.seasons as number[]);
let existingSeasons: number[] = []; let existingSeasons: number[] = [];

View File

@@ -1,6 +1,7 @@
import availabilitySync from '@server/lib/availabilitySync'; import availabilitySync from '@server/lib/availabilitySync';
import downloadTracker from '@server/lib/downloadtracker'; import downloadTracker from '@server/lib/downloadtracker';
import ImageProxy from '@server/lib/imageproxy'; import ImageProxy from '@server/lib/imageproxy';
import refreshToken from '@server/lib/refreshToken';
import { plexFullScanner, plexRecentScanner } from '@server/lib/scanners/plex'; import { plexFullScanner, plexRecentScanner } from '@server/lib/scanners/plex';
import { radarrScanner } from '@server/lib/scanners/radarr'; import { radarrScanner } from '@server/lib/scanners/radarr';
import { sonarrScanner } from '@server/lib/scanners/sonarr'; import { sonarrScanner } from '@server/lib/scanners/sonarr';
@@ -8,7 +9,6 @@ import type { JobId } from '@server/lib/settings';
import { getSettings } from '@server/lib/settings'; import { getSettings } from '@server/lib/settings';
import watchlistSync from '@server/lib/watchlistsync'; import watchlistSync from '@server/lib/watchlistsync';
import logger from '@server/logger'; import logger from '@server/logger';
import random from 'lodash/random';
import schedule from 'node-schedule'; import schedule from 'node-schedule';
interface ScheduledJob { interface ScheduledJob {
@@ -62,30 +62,20 @@ export const startJobs = (): void => {
}); });
// Watchlist Sync // Watchlist Sync
const watchlistSyncJob: ScheduledJob = { scheduledJobs.push({
id: 'plex-watchlist-sync', id: 'plex-watchlist-sync',
name: 'Plex Watchlist Sync', name: 'Plex Watchlist Sync',
type: 'process', type: 'process',
interval: 'fixed', interval: 'seconds',
cronSchedule: jobs['plex-watchlist-sync'].schedule, cronSchedule: jobs['plex-watchlist-sync'].schedule,
job: schedule.scheduleJob(new Date(Date.now() + 1000 * 60 * 20), () => { job: schedule.scheduleJob(jobs['plex-watchlist-sync'].schedule, () => {
logger.info('Starting scheduled job: Plex Watchlist Sync', { logger.info('Starting scheduled job: Plex Watchlist Sync', {
label: 'Jobs', label: 'Jobs',
}); });
watchlistSync.syncWatchlist(); watchlistSync.syncWatchlist();
}), }),
};
// To help alleviate load on Plex's servers, we will add some fuzziness to the next schedule
// after each run
watchlistSyncJob.job.on('run', () => {
watchlistSyncJob.job.schedule(
new Date(Math.floor(Date.now() + 1000 * 60 * random(14, 24, true)))
);
}); });
scheduledJobs.push(watchlistSyncJob);
// Run full radarr scan every 24 hours // Run full radarr scan every 24 hours
scheduledJobs.push({ scheduledJobs.push({
id: 'radarr-scan', id: 'radarr-scan',
@@ -179,5 +169,19 @@ export const startJobs = (): void => {
}), }),
}); });
scheduledJobs.push({
id: 'plex-refresh-token',
name: 'Plex Refresh Token',
type: 'process',
interval: 'fixed',
cronSchedule: jobs['plex-refresh-token'].schedule,
job: schedule.scheduleJob(jobs['plex-refresh-token'].schedule, () => {
logger.info('Starting scheduled job: Plex Refresh Token', {
label: 'Jobs',
});
refreshToken.run();
}),
});
logger.info('Scheduled jobs loaded', { label: 'Jobs' }); logger.info('Scheduled jobs loaded', { label: 'Jobs' });
}; };

View File

@@ -8,7 +8,8 @@ export type AvailableCacheIds =
| 'imdb' | 'imdb'
| 'github' | 'github'
| 'plexguid' | 'plexguid'
| 'plextv'; | 'plextv'
| 'plexwatchlist';
const DEFAULT_TTL = 300; const DEFAULT_TTL = 300;
const DEFAULT_CHECK_PERIOD = 120; const DEFAULT_CHECK_PERIOD = 120;
@@ -68,6 +69,7 @@ class CacheManager {
stdTtl: 86400 * 7, // 1 week cache stdTtl: 86400 * 7, // 1 week cache
checkPeriod: 60, checkPeriod: 60,
}), }),
plexwatchlist: new Cache('plexwatchlist', 'Plex Watchlist'),
}; };
public getCache(id: AvailableCacheIds): Cache { public getCache(id: AvailableCacheIds): Cache {

View File

@@ -14,7 +14,12 @@ import {
import type { NotificationAgent, NotificationPayload } from './agent'; import type { NotificationAgent, NotificationPayload } from './agent';
import { BaseAgent } from './agent'; import { BaseAgent } from './agent';
interface PushoverPayload { interface PushoverImagePayload {
attachment_base64: string;
attachment_type: string;
}
interface PushoverPayload extends PushoverImagePayload {
token: string; token: string;
user: string; user: string;
title: string; title: string;
@@ -43,10 +48,36 @@ class PushoverAgent
return true; return true;
} }
private getNotificationPayload( private async getImagePayload(
imageUrl: string
): Promise<Partial<PushoverImagePayload>> {
try {
const response = await axios.get(imageUrl, {
responseType: 'arraybuffer',
});
const base64 = Buffer.from(response.data, 'binary').toString('base64');
const contentType = (
response.headers['Content-Type'] || response.headers['content-type']
)?.toString();
return {
attachment_base64: base64,
attachment_type: contentType,
};
} catch (e) {
logger.error('Error getting image payload', {
label: 'Notifications',
errorMessage: e.message,
response: e.response?.data,
});
return {};
}
}
private async getNotificationPayload(
type: Notification, type: Notification,
payload: NotificationPayload payload: NotificationPayload
): Partial<PushoverPayload> { ): Promise<Partial<PushoverPayload>> {
const { applicationUrl, applicationTitle } = getSettings().main; const { applicationUrl, applicationTitle } = getSettings().main;
const title = payload.event ?? payload.subject; const title = payload.event ?? payload.subject;
@@ -122,6 +153,16 @@ class PushoverAgent
? `View ${payload.issue ? 'Issue' : 'Media'} in ${applicationTitle}` ? `View ${payload.issue ? 'Issue' : 'Media'} in ${applicationTitle}`
: undefined; : undefined;
let attachment_base64;
let attachment_type;
if (payload.image) {
const imagePayload = await this.getImagePayload(payload.image);
if (imagePayload.attachment_base64 && imagePayload.attachment_type) {
attachment_base64 = imagePayload.attachment_base64;
attachment_type = imagePayload.attachment_type;
}
}
return { return {
title, title,
message, message,
@@ -129,6 +170,8 @@ class PushoverAgent
url_title, url_title,
priority, priority,
html: 1, html: 1,
attachment_base64,
attachment_type,
}; };
} }
@@ -138,7 +181,10 @@ class PushoverAgent
): Promise<boolean> { ): Promise<boolean> {
const settings = this.getSettings(); const settings = this.getSettings();
const endpoint = 'https://api.pushover.net/1/messages.json'; const endpoint = 'https://api.pushover.net/1/messages.json';
const notificationPayload = this.getNotificationPayload(type, payload); const notificationPayload = await this.getNotificationPayload(
type,
payload
);
// Send system notification // Send system notification
if ( if (

View File

@@ -0,0 +1,37 @@
import PlexTvAPI from '@server/api/plextv';
import { getRepository } from '@server/datasource';
import { User } from '@server/entity/User';
import logger from '@server/logger';
class RefreshToken {
public async run() {
const userRepository = getRepository(User);
const users = await userRepository
.createQueryBuilder('user')
.addSelect('user.plexToken')
.where("user.plexToken != ''")
.getMany();
for (const user of users) {
await this.refreshUserToken(user);
}
}
private async refreshUserToken(user: User) {
if (!user.plexToken) {
logger.warn('Skipping user refresh token for user without plex token', {
label: 'Plex Refresh Token',
user: user.displayName,
});
return;
}
const plexTvApi = new PlexTvAPI(user.plexToken);
plexTvApi.pingToken();
}
}
const refreshToken = new RefreshToken();
export default refreshToken;

View File

@@ -278,9 +278,7 @@ class PlexScanner
const seasons = tvShow.seasons; const seasons = tvShow.seasons;
const processableSeasons: ProcessableSeason[] = []; const processableSeasons: ProcessableSeason[] = [];
const filteredSeasons = seasons.filter((sn) => sn.season_number !== 0); for (const season of seasons) {
for (const season of filteredSeasons) {
const matchedPlexSeason = metadata.Children?.Metadata.find( const matchedPlexSeason = metadata.Children?.Metadata.find(
(md) => Number(md.index) === season.season_number (md) => Number(md.index) === season.season_number
); );

View File

@@ -103,10 +103,8 @@ class SonarrScanner
const tmdbId = tvShow.id; const tmdbId = tvShow.id;
const filteredSeasons = sonarrSeries.seasons.filter( const filteredSeasons = sonarrSeries.seasons.filter((sn) =>
(sn) => tvShow.seasons.find((s) => s.season_number === sn.seasonNumber)
sn.seasonNumber !== 0 &&
tvShow.seasons.find((s) => s.season_number === sn.seasonNumber)
); );
for (const season of filteredSeasons) { for (const season of filteredSeasons) {

View File

@@ -248,6 +248,7 @@ export type JobId =
| 'plex-recently-added-scan' | 'plex-recently-added-scan'
| 'plex-full-scan' | 'plex-full-scan'
| 'plex-watchlist-sync' | 'plex-watchlist-sync'
| 'plex-refresh-token'
| 'radarr-scan' | 'radarr-scan'
| 'sonarr-scan' | 'sonarr-scan'
| 'download-sync' | 'download-sync'
@@ -407,7 +408,10 @@ class Settings {
schedule: '0 0 3 * * *', schedule: '0 0 3 * * *',
}, },
'plex-watchlist-sync': { 'plex-watchlist-sync': {
schedule: '0 */10 * * * *', schedule: '0 */3 * * * *',
},
'plex-refresh-token': {
schedule: '0 0 5 * * *',
}, },
'radarr-scan': { 'radarr-scan': {
schedule: '0 0 4 * * *', schedule: '0 0 4 * * *',

View File

@@ -62,7 +62,7 @@ class WatchlistSync {
const plexTvApi = new PlexTvAPI(user.plexToken); const plexTvApi = new PlexTvAPI(user.plexToken);
const response = await plexTvApi.getWatchlist({ size: 200 }); const response = await plexTvApi.getWatchlist({ size: 20 });
const mediaItems = await Media.getRelatedMedia( const mediaItems = await Media.getRelatedMedia(
response.items.map((i) => i.tmdbId) response.items.map((i) => i.tmdbId)

View File

@@ -12,7 +12,7 @@ collectionRoutes.get<{ id: string }>('/:id', async (req, res, next) => {
try { try {
const collection = await tmdb.getCollection({ const collection = await tmdb.getCollection({
collectionId: Number(req.params.id), collectionId: Number(req.params.id),
language: req.locale ?? (req.query.language as string), language: (req.query.language as string) ?? req.locale,
}); });
const media = await Media.getRelatedMedia( const media = await Media.getRelatedMedia(

View File

@@ -164,7 +164,7 @@ discoverRoutes.get<{ language: string }>(
const data = await tmdb.getDiscoverMovies({ const data = await tmdb.getDiscoverMovies({
page: Number(req.query.page), page: Number(req.query.page),
language: req.locale ?? (req.query.language as string), language: (req.query.language as string) ?? req.locale,
originalLanguage: req.params.language, originalLanguage: req.params.language,
}); });
@@ -208,7 +208,7 @@ discoverRoutes.get<{ genreId: string }>(
try { try {
const genres = await tmdb.getMovieGenres({ const genres = await tmdb.getMovieGenres({
language: req.locale ?? (req.query.language as string), language: (req.query.language as string) ?? req.locale,
}); });
const genre = genres.find( const genre = genres.find(
@@ -221,7 +221,7 @@ discoverRoutes.get<{ genreId: string }>(
const data = await tmdb.getDiscoverMovies({ const data = await tmdb.getDiscoverMovies({
page: Number(req.query.page), page: Number(req.query.page),
language: req.locale ?? (req.query.language as string), language: (req.query.language as string) ?? req.locale,
genre: req.params.genreId as string, genre: req.params.genreId as string,
}); });
@@ -268,7 +268,7 @@ discoverRoutes.get<{ studioId: string }>(
const data = await tmdb.getDiscoverMovies({ const data = await tmdb.getDiscoverMovies({
page: Number(req.query.page), page: Number(req.query.page),
language: req.locale ?? (req.query.language as string), language: (req.query.language as string) ?? req.locale,
studio: req.params.studioId as string, studio: req.params.studioId as string,
}); });
@@ -317,7 +317,7 @@ discoverRoutes.get('/movies/upcoming', async (req, res, next) => {
try { try {
const data = await tmdb.getDiscoverMovies({ const data = await tmdb.getDiscoverMovies({
page: Number(req.query.page), page: Number(req.query.page),
language: req.locale ?? (req.query.language as string), language: (req.query.language as string) ?? req.locale,
primaryReleaseDateGte: date, primaryReleaseDateGte: date,
}); });
@@ -440,7 +440,7 @@ discoverRoutes.get<{ language: string }>(
const data = await tmdb.getDiscoverTv({ const data = await tmdb.getDiscoverTv({
page: Number(req.query.page), page: Number(req.query.page),
language: req.locale ?? (req.query.language as string), language: (req.query.language as string) ?? req.locale,
originalLanguage: req.params.language, originalLanguage: req.params.language,
}); });
@@ -484,7 +484,7 @@ discoverRoutes.get<{ genreId: string }>(
try { try {
const genres = await tmdb.getTvGenres({ const genres = await tmdb.getTvGenres({
language: req.locale ?? (req.query.language as string), language: (req.query.language as string) ?? req.locale,
}); });
const genre = genres.find( const genre = genres.find(
@@ -497,7 +497,7 @@ discoverRoutes.get<{ genreId: string }>(
const data = await tmdb.getDiscoverTv({ const data = await tmdb.getDiscoverTv({
page: Number(req.query.page), page: Number(req.query.page),
language: req.locale ?? (req.query.language as string), language: (req.query.language as string) ?? req.locale,
genre: req.params.genreId, genre: req.params.genreId,
}); });
@@ -544,7 +544,7 @@ discoverRoutes.get<{ networkId: string }>(
const data = await tmdb.getDiscoverTv({ const data = await tmdb.getDiscoverTv({
page: Number(req.query.page), page: Number(req.query.page),
language: req.locale ?? (req.query.language as string), language: (req.query.language as string) ?? req.locale,
network: Number(req.params.networkId), network: Number(req.params.networkId),
}); });
@@ -593,7 +593,7 @@ discoverRoutes.get('/tv/upcoming', async (req, res, next) => {
try { try {
const data = await tmdb.getDiscoverTv({ const data = await tmdb.getDiscoverTv({
page: Number(req.query.page), page: Number(req.query.page),
language: req.locale ?? (req.query.language as string), language: (req.query.language as string) ?? req.locale,
firstAirDateGte: date, firstAirDateGte: date,
}); });
@@ -632,7 +632,7 @@ discoverRoutes.get('/trending', async (req, res, next) => {
try { try {
const data = await tmdb.getAllTrending({ const data = await tmdb.getAllTrending({
page: Number(req.query.page), page: Number(req.query.page),
language: req.locale ?? (req.query.language as string), language: (req.query.language as string) ?? req.locale,
}); });
const media = await Media.getRelatedMedia( const media = await Media.getRelatedMedia(
@@ -686,7 +686,7 @@ discoverRoutes.get<{ keywordId: string }>(
const data = await tmdb.getMoviesByKeyword({ const data = await tmdb.getMoviesByKeyword({
keywordId: Number(req.params.keywordId), keywordId: Number(req.params.keywordId),
page: Number(req.query.page), page: Number(req.query.page),
language: req.locale ?? (req.query.language as string), language: (req.query.language as string) ?? req.locale,
}); });
const media = await Media.getRelatedMedia( const media = await Media.getRelatedMedia(
@@ -730,7 +730,7 @@ discoverRoutes.get<{ language: string }, GenreSliderItem[]>(
const mappedGenres: GenreSliderItem[] = []; const mappedGenres: GenreSliderItem[] = [];
const genres = await tmdb.getMovieGenres({ const genres = await tmdb.getMovieGenres({
language: req.locale ?? (req.query.language as string), language: (req.query.language as string) ?? req.locale,
}); });
await Promise.all( await Promise.all(
@@ -774,7 +774,7 @@ discoverRoutes.get<{ language: string }, GenreSliderItem[]>(
const mappedGenres: GenreSliderItem[] = []; const mappedGenres: GenreSliderItem[] = [];
const genres = await tmdb.getTvGenres({ const genres = await tmdb.getTvGenres({
language: req.locale ?? (req.query.language as string), language: (req.query.language as string) ?? req.locale,
}); });
await Promise.all( await Promise.all(

View File

@@ -235,7 +235,7 @@ router.get('/genres/movie', isAuthenticated(), async (req, res, next) => {
try { try {
const genres = await tmdb.getMovieGenres({ const genres = await tmdb.getMovieGenres({
language: req.locale ?? (req.query.language as string), language: (req.query.language as string) ?? req.locale,
}); });
return res.status(200).json(genres); return res.status(200).json(genres);
@@ -256,7 +256,7 @@ router.get('/genres/tv', isAuthenticated(), async (req, res, next) => {
try { try {
const genres = await tmdb.getTvGenres({ const genres = await tmdb.getTvGenres({
language: req.locale ?? (req.query.language as string), language: (req.query.language as string) ?? req.locale,
}); });
return res.status(200).json(genres); return res.status(200).json(genres);

View File

@@ -17,7 +17,7 @@ movieRoutes.get('/:id', async (req, res, next) => {
try { try {
const tmdbMovie = await tmdb.getMovie({ const tmdbMovie = await tmdb.getMovie({
movieId: Number(req.params.id), movieId: Number(req.params.id),
language: req.locale ?? (req.query.language as string), language: (req.query.language as string) ?? req.locale,
}); });
const media = await Media.getMedia(tmdbMovie.id, MediaType.MOVIE); const media = await Media.getMedia(tmdbMovie.id, MediaType.MOVIE);
@@ -43,7 +43,7 @@ movieRoutes.get('/:id/recommendations', async (req, res, next) => {
const results = await tmdb.getMovieRecommendations({ const results = await tmdb.getMovieRecommendations({
movieId: Number(req.params.id), movieId: Number(req.params.id),
page: Number(req.query.page), page: Number(req.query.page),
language: req.locale ?? (req.query.language as string), language: (req.query.language as string) ?? req.locale,
}); });
const media = await Media.getRelatedMedia( const media = await Media.getRelatedMedia(
@@ -84,7 +84,7 @@ movieRoutes.get('/:id/similar', async (req, res, next) => {
const results = await tmdb.getMovieSimilar({ const results = await tmdb.getMovieSimilar({
movieId: Number(req.params.id), movieId: Number(req.params.id),
page: Number(req.query.page), page: Number(req.query.page),
language: req.locale ?? (req.query.language as string), language: (req.query.language as string) ?? req.locale,
}); });
const media = await Media.getRelatedMedia( const media = await Media.getRelatedMedia(

View File

@@ -16,7 +16,7 @@ personRoutes.get('/:id', async (req, res, next) => {
try { try {
const person = await tmdb.getPerson({ const person = await tmdb.getPerson({
personId: Number(req.params.id), personId: Number(req.params.id),
language: req.locale ?? (req.query.language as string), language: (req.query.language as string) ?? req.locale,
}); });
return res.status(200).json(mapPersonDetails(person)); return res.status(200).json(mapPersonDetails(person));
} catch (e) { } catch (e) {
@@ -38,7 +38,7 @@ personRoutes.get('/:id/combined_credits', async (req, res, next) => {
try { try {
const combinedCredits = await tmdb.getPersonCombinedCredits({ const combinedCredits = await tmdb.getPersonCombinedCredits({
personId: Number(req.params.id), personId: Number(req.params.id),
language: req.locale ?? (req.query.language as string), language: (req.query.language as string) ?? req.locale,
}); });
const castMedia = await Media.getRelatedMedia( const castMedia = await Media.getRelatedMedia(

View File

@@ -20,7 +20,7 @@ searchRoutes.get('/', async (req, res, next) => {
.match(searchProvider.pattern) as RegExpMatchArray; .match(searchProvider.pattern) as RegExpMatchArray;
results = await searchProvider.search({ results = await searchProvider.search({
id, id,
language: req.locale ?? (req.query.language as string), language: (req.query.language as string) ?? req.locale,
query: queryString, query: queryString,
}); });
} else { } else {
@@ -29,7 +29,7 @@ searchRoutes.get('/', async (req, res, next) => {
results = await tmdb.searchMulti({ results = await tmdb.searchMulti({
query: queryString, query: queryString,
page: Number(req.query.page), page: Number(req.query.page),
language: req.locale ?? (req.query.language as string), language: (req.query.language as string) ?? req.locale,
}); });
} }

View File

@@ -14,7 +14,7 @@ tvRoutes.get('/:id', async (req, res, next) => {
try { try {
const tv = await tmdb.getTvShow({ const tv = await tmdb.getTvShow({
tvId: Number(req.params.id), tvId: Number(req.params.id),
language: req.locale ?? (req.query.language as string), language: (req.query.language as string) ?? req.locale,
}); });
const media = await Media.getMedia(tv.id, MediaType.TV); const media = await Media.getMedia(tv.id, MediaType.TV);
@@ -40,7 +40,7 @@ tvRoutes.get('/:id/season/:seasonNumber', async (req, res, next) => {
const season = await tmdb.getTvSeason({ const season = await tmdb.getTvSeason({
tvId: Number(req.params.id), tvId: Number(req.params.id),
seasonNumber: Number(req.params.seasonNumber), seasonNumber: Number(req.params.seasonNumber),
language: req.locale ?? (req.query.language as string), language: (req.query.language as string) ?? req.locale,
}); });
return res.status(200).json(mapSeasonWithEpisodes(season)); return res.status(200).json(mapSeasonWithEpisodes(season));
@@ -65,7 +65,7 @@ tvRoutes.get('/:id/recommendations', async (req, res, next) => {
const results = await tmdb.getTvRecommendations({ const results = await tmdb.getTvRecommendations({
tvId: Number(req.params.id), tvId: Number(req.params.id),
page: Number(req.query.page), page: Number(req.query.page),
language: req.locale ?? (req.query.language as string), language: (req.query.language as string) ?? req.locale,
}); });
const media = await Media.getRelatedMedia( const media = await Media.getRelatedMedia(
@@ -105,7 +105,7 @@ tvRoutes.get('/:id/similar', async (req, res, next) => {
const results = await tmdb.getTvSimilar({ const results = await tmdb.getTvSimilar({
tvId: Number(req.params.id), tvId: Number(req.params.id),
page: Number(req.query.page), page: Number(req.query.page),
language: req.locale ?? (req.query.language as string), language: (req.query.language as string) ?? req.locale,
}); });
const media = await Media.getRelatedMedia( const media = await Media.getRelatedMedia(

View File

@@ -73,6 +73,12 @@ const studios: Studio[] = [
'https://image.tmdb.org/t/p/w780_filter(duotone,ffffff,bababa)/2Tc1P3Ac8M479naPp1kYT3izLS5.png', 'https://image.tmdb.org/t/p/w780_filter(duotone,ffffff,bababa)/2Tc1P3Ac8M479naPp1kYT3izLS5.png',
url: '/discover/movies/studio/9993', url: '/discover/movies/studio/9993',
}, },
{
name: 'A24',
image:
'https://image.tmdb.org/t/p/w780_filter(duotone,ffffff,bababa)/1ZXsGaFPgrgS6ZZGS37AqD5uU12.png',
url: '/discover/movies/studio/41077',
},
]; ];
const StudioSlider = () => { const StudioSlider = () => {

View File

@@ -4,7 +4,6 @@ import { useEffect, useRef, useState } from 'react';
const PullToRefresh = () => { const PullToRefresh = () => {
const router = useRouter(); const router = useRouter();
const [pullStartPoint, setPullStartPoint] = useState(0); const [pullStartPoint, setPullStartPoint] = useState(0);
const [pullChange, setPullChange] = useState(0); const [pullChange, setPullChange] = useState(0);
const refreshDiv = useRef<HTMLDivElement>(null); const refreshDiv = useRef<HTMLDivElement>(null);
@@ -19,6 +18,7 @@ const PullToRefresh = () => {
// Reload function that is called when reload threshold has been hit // Reload function that is called when reload threshold has been hit
// Add loading class to determine when to add spin animation // Add loading class to determine when to add spin animation
const forceReload = () => { const forceReload = () => {
setPullStartPoint(0);
refreshDiv.current?.classList.add('loading'); refreshDiv.current?.classList.add('loading');
setTimeout(() => { setTimeout(() => {
router.reload(); router.reload();
@@ -32,6 +32,8 @@ const PullToRefresh = () => {
const pullStart = (e: TouchEvent) => { const pullStart = (e: TouchEvent) => {
setPullStartPoint(e.targetTouches[0].screenY); setPullStartPoint(e.targetTouches[0].screenY);
const html = document.querySelector('html');
if (window.scrollY === 0 && window.scrollX === 0) { if (window.scrollY === 0 && window.scrollX === 0) {
refreshDiv.current?.classList.add('block'); refreshDiv.current?.classList.add('block');
refreshDiv.current?.classList.remove('hidden'); refreshDiv.current?.classList.remove('hidden');
@@ -41,6 +43,7 @@ const PullToRefresh = () => {
html.style.overscrollBehaviorY = 'none'; html.style.overscrollBehaviorY = 'none';
} }
} else { } else {
setPullStartPoint(0);
refreshDiv.current?.classList.remove('block'); refreshDiv.current?.classList.remove('block');
refreshDiv.current?.classList.add('hidden'); refreshDiv.current?.classList.add('hidden');
} }
@@ -49,7 +52,6 @@ const PullToRefresh = () => {
// Tracks how far we have pulled down the refresh icon // Tracks how far we have pulled down the refresh icon
const pullDown = async (e: TouchEvent) => { const pullDown = async (e: TouchEvent) => {
const screenY = e.targetTouches[0].screenY; const screenY = e.targetTouches[0].screenY;
const pullLength = const pullLength =
pullStartPoint < screenY ? Math.abs(screenY - pullStartPoint) : 0; pullStartPoint < screenY ? Math.abs(screenY - pullStartPoint) : 0;
@@ -59,12 +61,11 @@ const PullToRefresh = () => {
// Will reload the page if we are past the threshold // Will reload the page if we are past the threshold
// Otherwise, we reset the pull // Otherwise, we reset the pull
const pullFinish = () => { const pullFinish = () => {
setPullStartPoint(0); if (pullDownReloadThreshold && pullStartPoint !== 0) {
if (pullDownReloadThreshold) {
forceReload(); forceReload();
} else { } else {
setPullChange(0); setPullChange(0);
setTimeout(() => setPullStartPoint(0), 200);
} }
document.body.style.touchAction = 'auto'; document.body.style.touchAction = 'auto';
@@ -83,7 +84,21 @@ const PullToRefresh = () => {
window.removeEventListener('touchmove', pullDown); window.removeEventListener('touchmove', pullDown);
window.removeEventListener('touchend', pullFinish); window.removeEventListener('touchend', pullFinish);
}; };
}, [pullDownInitThreshold, pullDownReloadThreshold, pullStartPoint, router]); }, [
pullDownInitThreshold,
pullDownReloadThreshold,
pullStartPoint,
refreshDiv,
router,
setPullStartPoint,
]);
if (
pullStartPoint === 0 &&
!refreshDiv.current?.classList.contains('loading')
) {
return null;
}
return ( return (
<div <div
@@ -102,7 +117,7 @@ const PullToRefresh = () => {
<div <div
className={`${ className={`${
refreshDiv.current?.classList.contains('loading') && 'animate-spin' refreshDiv.current?.classList.contains('loading') && 'animate-spin'
} relative -top-24 h-9 w-9 rounded-full border-4 border-gray-800 bg-gray-800 shadow-md shadow-black ring-1 ring-gray-700`} } relative -top-28 h-9 w-9 rounded-full border-4 border-gray-800 bg-gray-800 shadow-md shadow-black ring-1 ring-gray-700`}
style={{ animationDirection: 'reverse' }} style={{ animationDirection: 'reverse' }}
> >
<ArrowPathIcon <ArrowPathIcon

View File

@@ -500,7 +500,7 @@ const MovieDetails = ({ movie }: MovieDetailsProps) => {
}} }}
/> />
</div> </div>
<div className="relative z-10 flex h-14 items-center justify-between p-4 text-gray-200 transition duration-300 group-hover:text-white"> <div className="relative z-10 flex h-full items-center justify-between p-4 text-gray-200 transition duration-300 group-hover:text-white">
<div>{data.collection.name}</div> <div>{data.collection.name}</div>
<Button buttonSize="sm"> <Button buttonSize="sm">
{intl.formatMessage(globalMessages.view)} {intl.formatMessage(globalMessages.view)}

View File

@@ -210,13 +210,24 @@ const RequestBlock = ({ request, onUpdate }: RequestBlockProps) => {
<Tooltip content={intl.formatMessage(messages.requestdate)}> <Tooltip content={intl.formatMessage(messages.requestdate)}>
<CalendarIcon className="mr-1.5 h-5 w-5 flex-shrink-0" /> <CalendarIcon className="mr-1.5 h-5 w-5 flex-shrink-0" />
</Tooltip> </Tooltip>
<span> <Tooltip
{intl.formatDate(request.createdAt, { content={intl.formatDate(request.createdAt, {
year: 'numeric', year: 'numeric',
month: 'long', month: 'long',
day: 'numeric', day: 'numeric',
hour: 'numeric',
minute: 'numeric',
second: 'numeric',
})} })}
</span> >
<span>
{intl.formatDate(request.createdAt, {
year: 'numeric',
month: 'long',
day: 'numeric',
})}
</span>
</Tooltip>
</div> </div>
</div> </div>
{(request.seasons ?? []).length > 0 && ( {(request.seasons ?? []).length > 0 && (
@@ -232,7 +243,11 @@ const RequestBlock = ({ request, onUpdate }: RequestBlockProps) => {
key={`season-${season.id}`} key={`season-${season.id}`}
className="mb-1 mr-2 inline-block" className="mb-1 mr-2 inline-block"
> >
<Badge>{season.seasonNumber}</Badge> <Badge>
{season.seasonNumber === 0
? intl.formatMessage(globalMessages.specials)
: season.seasonNumber}
</Badge>
</span> </span>
))} ))}
</div> </div>

View File

@@ -381,8 +381,7 @@ const RequestCard = ({ request, onTitleData }: RequestCardProps) => {
<span className="mr-2 font-bold "> <span className="mr-2 font-bold ">
{intl.formatMessage(messages.seasons, { {intl.formatMessage(messages.seasons, {
seasonCount: seasonCount:
title.seasons.filter((season) => season.seasonNumber !== 0) title.seasons.length === request.seasons.length
.length === request.seasons.length
? 0 ? 0
: request.seasons.length, : request.seasons.length,
})} })}
@@ -390,7 +389,11 @@ const RequestCard = ({ request, onTitleData }: RequestCardProps) => {
<div className="hide-scrollbar overflow-x-scroll"> <div className="hide-scrollbar overflow-x-scroll">
{request.seasons.map((season) => ( {request.seasons.map((season) => (
<span key={`season-${season.id}`} className="mr-2"> <span key={`season-${season.id}`} className="mr-2">
<Badge>{season.seasonNumber}</Badge> <Badge>
{season.seasonNumber === 0
? intl.formatMessage(globalMessages.specials)
: season.seasonNumber}
</Badge>
</span> </span>
))} ))}
</div> </div>

View File

@@ -440,9 +440,7 @@ const RequestItem = ({ request, revalidateList }: RequestItemProps) => {
<span className="card-field-name"> <span className="card-field-name">
{intl.formatMessage(messages.seasons, { {intl.formatMessage(messages.seasons, {
seasonCount: seasonCount:
title.seasons.filter( title.seasons.length === request.seasons.length
(season) => season.seasonNumber !== 0
).length === request.seasons.length
? 0 ? 0
: request.seasons.length, : request.seasons.length,
})} })}
@@ -450,7 +448,11 @@ const RequestItem = ({ request, revalidateList }: RequestItemProps) => {
<div className="hide-scrollbar flex flex-nowrap overflow-x-scroll"> <div className="hide-scrollbar flex flex-nowrap overflow-x-scroll">
{request.seasons.map((season) => ( {request.seasons.map((season) => (
<span key={`season-${season.id}`} className="mr-2"> <span key={`season-${season.id}`} className="mr-2">
<Badge>{season.seasonNumber}</Badge> <Badge>
{season.seasonNumber === 0
? intl.formatMessage(globalMessages.specials)
: season.seasonNumber}
</Badge>
</span> </span>
))} ))}
</div> </div>

View File

@@ -41,7 +41,6 @@ const messages = defineMessages({
season: 'Season', season: 'Season',
numberofepisodes: '# of Episodes', numberofepisodes: '# of Episodes',
seasonnumber: 'Season {number}', seasonnumber: 'Season {number}',
extras: 'Extras',
errorediting: 'Something went wrong while editing the request.', errorediting: 'Something went wrong while editing the request.',
requestedited: 'Request for <strong>{title}</strong> edited successfully!', requestedited: 'Request for <strong>{title}</strong> edited successfully!',
requestApproved: 'Request for <strong>{title}</strong> approved!', requestApproved: 'Request for <strong>{title}</strong> approved!',
@@ -232,9 +231,7 @@ const TvRequestModal = ({
const getAllSeasons = (): number[] => { const getAllSeasons = (): number[] => {
return (data?.seasons ?? []) return (data?.seasons ?? [])
.filter( .filter((season) => season.episodeCount !== 0)
(season) => season.seasonNumber !== 0 && season.episodeCount !== 0
)
.map((season) => season.seasonNumber); .map((season) => season.seasonNumber);
}; };
@@ -557,10 +554,7 @@ const TvRequestModal = ({
</thead> </thead>
<tbody className="divide-y divide-gray-700"> <tbody className="divide-y divide-gray-700">
{data?.seasons {data?.seasons
.filter( .filter((season) => season.episodeCount !== 0)
(season) =>
season.seasonNumber !== 0 && season.episodeCount !== 0
)
.map((season) => { .map((season) => {
const seasonRequest = getSeasonRequest( const seasonRequest = getSeasonRequest(
season.seasonNumber season.seasonNumber
@@ -637,7 +631,7 @@ const TvRequestModal = ({
</td> </td>
<td className="whitespace-nowrap px-1 py-4 text-sm font-medium leading-5 text-gray-100 md:px-6"> <td className="whitespace-nowrap px-1 py-4 text-sm font-medium leading-5 text-gray-100 md:px-6">
{season.seasonNumber === 0 {season.seasonNumber === 0
? intl.formatMessage(messages.extras) ? intl.formatMessage(globalMessages.specials)
: intl.formatMessage(messages.seasonnumber, { : intl.formatMessage(messages.seasonnumber, {
number: season.seasonNumber, number: season.seasonNumber,
})} })}

View File

@@ -53,6 +53,7 @@ const messages: { [messageName: string]: MessageDescriptor } = defineMessages({
'plex-recently-added-scan': 'Plex Recently Added Scan', 'plex-recently-added-scan': 'Plex Recently Added Scan',
'plex-full-scan': 'Plex Full Library Scan', 'plex-full-scan': 'Plex Full Library Scan',
'plex-watchlist-sync': 'Plex Watchlist Sync', 'plex-watchlist-sync': 'Plex Watchlist Sync',
'plex-refresh-token': 'Plex Refresh Token',
'availability-sync': 'Media Availability Sync', 'availability-sync': 'Media Availability Sync',
'radarr-scan': 'Radarr Scan', 'radarr-scan': 'Radarr Scan',
'sonarr-scan': 'Sonarr Scan', 'sonarr-scan': 'Sonarr Scan',

View File

@@ -200,6 +200,7 @@ const TvDetails = ({ tv }: TvDetailsProps) => {
); );
} }
// Does NOT include "Specials"
const seasonCount = data.seasons.filter( const seasonCount = data.seasons.filter(
(season) => season.seasonNumber !== 0 && season.episodeCount !== 0 (season) => season.seasonNumber !== 0 && season.episodeCount !== 0
).length; ).length;
@@ -257,9 +258,17 @@ const TvDetails = ({ tv }: TvDetailsProps) => {
return [...requestedSeasons, ...availableSeasons]; return [...requestedSeasons, ...availableSeasons];
}; };
const isComplete = seasonCount <= getAllRequestedSeasons(false).length; const showHasSpecials = data.seasons.some(
(season) => season.seasonNumber === 0
);
const is4kComplete = seasonCount <= getAllRequestedSeasons(true).length; const isComplete =
(showHasSpecials ? seasonCount + 1 : seasonCount) <=
getAllRequestedSeasons(false).length;
const is4kComplete =
(showHasSpecials ? seasonCount + 1 : seasonCount) <=
getAllRequestedSeasons(true).length;
const streamingProviders = const streamingProviders =
data?.watchProviders?.find((provider) => provider.iso_3166_1 === region) data?.watchProviders?.find((provider) => provider.iso_3166_1 === region)
@@ -522,7 +531,6 @@ const TvDetails = ({ tv }: TvDetailsProps) => {
{data.seasons {data.seasons
.slice() .slice()
.reverse() .reverse()
.filter((season) => season.seasonNumber !== 0)
.map((season) => { .map((season) => {
const show4k = const show4k =
settings.currentSettings.series4kEnabled && settings.currentSettings.series4kEnabled &&
@@ -576,9 +584,11 @@ const TvDetails = ({ tv }: TvDetailsProps) => {
> >
<div className="flex flex-1 items-center space-x-2 text-lg"> <div className="flex flex-1 items-center space-x-2 text-lg">
<span> <span>
{intl.formatMessage(messages.seasonnumber, { {season.seasonNumber === 0
seasonNumber: season.seasonNumber, ? intl.formatMessage(globalMessages.specials)
})} : intl.formatMessage(messages.seasonnumber, {
seasonNumber: season.seasonNumber,
})}
</span> </span>
<Badge badgeType="dark"> <Badge badgeType="dark">
{intl.formatMessage(messages.episodeCount, { {intl.formatMessage(messages.episodeCount, {

View File

@@ -2,6 +2,7 @@ import React from 'react';
export type AvailableLocale = export type AvailableLocale =
| 'ar' | 'ar'
| 'bg'
| 'ca' | 'ca'
| 'cs' | 'cs'
| 'da' | 'da'
@@ -9,8 +10,11 @@ export type AvailableLocale =
| 'en' | 'en'
| 'el' | 'el'
| 'es' | 'es'
| 'fi'
| 'fr' | 'fr'
| 'hr' | 'hr'
| 'he'
| 'hi'
| 'hu' | 'hu'
| 'it' | 'it'
| 'ja' | 'ja'
@@ -21,10 +25,12 @@ export type AvailableLocale =
| 'pl' | 'pl'
| 'pt-BR' | 'pt-BR'
| 'pt-PT' | 'pt-PT'
| 'ro'
| 'ru' | 'ru'
| 'sq' | 'sq'
| 'sr' | 'sr'
| 'sv' | 'sv'
| 'uk'
| 'zh-CN' | 'zh-CN'
| 'zh-TW'; | 'zh-TW';
@@ -34,6 +40,10 @@ type AvailableLanguageObject = Record<
>; >;
export const availableLanguages: AvailableLanguageObject = { export const availableLanguages: AvailableLanguageObject = {
bg: {
code: 'bg',
display: 'Bulgarian',
},
ca: { ca: {
code: 'ca', code: 'ca',
display: 'Català', display: 'Català',
@@ -58,10 +68,22 @@ export const availableLanguages: AvailableLanguageObject = {
code: 'es', code: 'es',
display: 'Español', display: 'Español',
}, },
fi: {
code: 'fi',
display: 'Finnish',
},
fr: { fr: {
code: 'fr', code: 'fr',
display: 'Français', display: 'Français',
}, },
he: {
code: 'he',
display: 'Hebrew',
},
hi: {
code: 'hi',
display: 'Hindi',
},
hr: { hr: {
code: 'hr', code: 'hr',
display: 'Hrvatski', display: 'Hrvatski',
@@ -110,6 +132,10 @@ export const availableLanguages: AvailableLanguageObject = {
code: 'el', code: 'el',
display: 'Ελληνικά', display: 'Ελληνικά',
}, },
ro: {
code: 'ro',
display: 'Romanian',
},
ru: { ru: {
code: 'ru', code: 'ru',
display: 'pусский', display: 'pусский',
@@ -130,6 +156,10 @@ export const availableLanguages: AvailableLanguageObject = {
code: 'ko', code: 'ko',
display: '한국어', display: '한국어',
}, },
uk: {
code: 'uk',
display: 'українська мова',
},
'zh-TW': { 'zh-TW': {
code: 'zh-TW', code: 'zh-TW',
display: '繁體中文', display: '繁體中文',

View File

@@ -19,7 +19,7 @@ const useDeepLinks = ({
useEffect(() => { useEffect(() => {
if ( if (
/iPad|iPhone|iPod/.test(navigator.userAgent) || /iPad|iPhone|iPod/.test(navigator.userAgent) ||
(navigator.userAgent === 'MacIntel' && navigator.maxTouchPoints > 1) (navigator.userAgent.includes('Mac') && navigator.maxTouchPoints > 1)
) { ) {
setReturnedPlexUrl(iOSPlexUrl); setReturnedPlexUrl(iOSPlexUrl);
setReturnedPlexUrl4k(iOSPlexUrl4k); setReturnedPlexUrl4k(iOSPlexUrl4k);

View File

@@ -55,6 +55,7 @@ const globalMessages = defineMessages({
noresults: 'No results.', noresults: 'No results.',
open: 'Open', open: 'Open',
resolved: 'Resolved', resolved: 'Resolved',
specials: 'Specials',
}); });
export default globalMessages; export default globalMessages;

View File

@@ -253,7 +253,7 @@
"components.PermissionEdit.viewrequests": "الإطلاع على الطلبات", "components.PermissionEdit.viewrequests": "الإطلاع على الطلبات",
"components.PermissionEdit.viewrequestsDescription": "إعطاء صلاحية بالإطلاع على جميع الطلبات المقدمة من قبل المستخدمين.", "components.PermissionEdit.viewrequestsDescription": "إعطاء صلاحية بالإطلاع على جميع الطلبات المقدمة من قبل المستخدمين.",
"components.PersonDetails.alsoknownas": "أيضا يُعرف بإسم: {names}", "components.PersonDetails.alsoknownas": "أيضا يُعرف بإسم: {names}",
"components.PersonDetails.appearsin": "المظهر", "components.PersonDetails.appearsin": "الظهور",
"components.PersonDetails.ascharacter": "{character} شارك بِدوْر", "components.PersonDetails.ascharacter": "{character} شارك بِدوْر",
"components.PersonDetails.birthdate": "ولد في {birthdate}", "components.PersonDetails.birthdate": "ولد في {birthdate}",
"components.PersonDetails.crewmember": "عضو", "components.PersonDetails.crewmember": "عضو",
@@ -673,7 +673,7 @@
"components.Settings.plexlibraries": "مكتبات بليكس", "components.Settings.plexlibraries": "مكتبات بليكس",
"components.Settings.noDefaultServer": "على الأقل {serverType} سيرفر واحد يجب أن يكون معدا كإفتراضي لإتاحة تنفيذ طلبات الـ {mediaType}.", "components.Settings.noDefaultServer": "على الأقل {serverType} سيرفر واحد يجب أن يكون معدا كإفتراضي لإتاحة تنفيذ طلبات الـ {mediaType}.",
"components.Settings.plexsettings": "إعدادات بليكس", "components.Settings.plexsettings": "إعدادات بليكس",
"components.Settings.serviceSettingsDescription": "قم بإعداد {serverType} سيرفراتك بالإسفل. تستطيع الاتصال بأكثر من سيرفر {serverType} ولكن إثنان فقط يمكن إعدادهما كإفتراضيين واحد لمحتوى الفور كي والاخر لغير الفور كي. الذين يملكون إذونات مسؤول بإمكانهم تجاوز السيرفر المخصص لتنفيذ الطلبات الجديدة قبل الموافقة.", "components.Settings.serviceSettingsDescription": "قم بإعداد {serverType} بالإسفل.تستطيع الاتصال بأكثر من سيرفر {serverType} ,ولكن إثنان فقط يمكن إعدادهما كإفتراضيين (واحد لجودة الفور كي والأخر لغير جودة الفور كي). أصحاب الصلاحيات الإدارية بإمكانهم تجاوز السيرفر المستخدم قبل تأكيدهم لأي طلب محتوى جديد.",
"components.Settings.serverpresetManualMessage": "ضبط يدوي", "components.Settings.serverpresetManualMessage": "ضبط يدوي",
"components.Settings.sonarrsettings": "إعدادات سونار", "components.Settings.sonarrsettings": "إعدادات سونار",
"components.Settings.tautulliSettingsDescription": "بشكل إختياري أضبط إعدادات سيرفرك الخاص بـ Tautulli.أوفرسيرر سيقوم بجلب بيانات سجل المشاهدة لمحتوى بليكس من Tautulli.", "components.Settings.tautulliSettingsDescription": "بشكل إختياري أضبط إعدادات سيرفرك الخاص بـ Tautulli.أوفرسيرر سيقوم بجلب بيانات سجل المشاهدة لمحتوى بليكس من Tautulli.",
@@ -1232,5 +1232,11 @@
"components.Discover.CreateSlider.validationTitlerequired": "يجب تقديم عنوان.", "components.Discover.CreateSlider.validationTitlerequired": "يجب تقديم عنوان.",
"components.Discover.DiscoverMovieKeyword.keywordMovies": "{keywordTitle} الأفلام", "components.Discover.DiscoverMovieKeyword.keywordMovies": "{keywordTitle} الأفلام",
"components.Discover.CreateSlider.providetmdbkeywordid": "قم بتوفير معرّف كلمات بحث رئيسية من (TMDB)", "components.Discover.CreateSlider.providetmdbkeywordid": "قم بتوفير معرّف كلمات بحث رئيسية من (TMDB)",
"components.MovieDetails.imdbuserscore": "تقييم مستخدمين IMDB" "components.MovieDetails.imdbuserscore": "تقييم مستخدمين IMDB",
"components.Settings.Notifications.NotificationsPushover.sound": "صوت التنبيه",
"components.UserProfile.UserSettings.UserNotificationSettings.deviceDefault": "الجهاز الإفتراضي",
"components.Settings.SonarrModal.animeSeriesType": "نوع مسلسل الإنمي",
"components.Settings.SonarrModal.seriesType": "نوع المسلسل",
"components.UserProfile.UserSettings.UserNotificationSettings.sound": "صوت التنبيه",
"components.Settings.Notifications.NotificationsPushover.deviceDefault": "الجهاز الإفتراضي"
} }

1242
src/i18n/locale/bg.json Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -191,7 +191,7 @@
"components.Discover.TvGenreSlider.tvgenres": "Gèneres de Sèries", "components.Discover.TvGenreSlider.tvgenres": "Gèneres de Sèries",
"components.Discover.TvGenreList.seriesgenres": "Gèneres de Sèries", "components.Discover.TvGenreList.seriesgenres": "Gèneres de Sèries",
"components.Discover.StudioSlider.studios": "Estudis", "components.Discover.StudioSlider.studios": "Estudis",
"components.Discover.NetworkSlider.networks": "Emissors", "components.Discover.NetworkSlider.networks": "Plataformes",
"components.Discover.MovieGenreSlider.moviegenres": "Gèneres de Pel·lícules", "components.Discover.MovieGenreSlider.moviegenres": "Gèneres de Pel·lícules",
"components.Discover.MovieGenreList.moviegenres": "Gèneres de Pel·lícules", "components.Discover.MovieGenreList.moviegenres": "Gèneres de Pel·lícules",
"components.Discover.DiscoverTvLanguage.languageSeries": "Sèries en {language}", "components.Discover.DiscoverTvLanguage.languageSeries": "Sèries en {language}",
@@ -397,7 +397,7 @@
"components.TvDetails.originaltitle": "Títol original", "components.TvDetails.originaltitle": "Títol original",
"components.TvDetails.originallanguage": "Idioma original", "components.TvDetails.originallanguage": "Idioma original",
"components.TvDetails.nextAirDate": "Pròxima data d'emissió", "components.TvDetails.nextAirDate": "Pròxima data d'emissió",
"components.TvDetails.network": "{networkCount, plural, one {Emissor} other {Emissors}}", "components.TvDetails.network": "{networkCount, plural, one {Plataforma} other {Plataformes}}",
"components.TvDetails.firstAirDate": "Primera data d'emissió", "components.TvDetails.firstAirDate": "Primera data d'emissió",
"components.TvDetails.episodeRuntimeMinutes": "{runtime} minuts", "components.TvDetails.episodeRuntimeMinutes": "{runtime} minuts",
"components.TvDetails.episodeRuntime": "Duració de l'episodi", "components.TvDetails.episodeRuntime": "Duració de l'episodi",
@@ -481,7 +481,7 @@
"components.Settings.SonarrModal.validationNameRequired": "Heu de proporcionar un nom de servidor", "components.Settings.SonarrModal.validationNameRequired": "Heu de proporcionar un nom de servidor",
"components.Settings.SonarrModal.validationLanguageProfileRequired": "Heu de seleccionar un perfil d'idioma", "components.Settings.SonarrModal.validationLanguageProfileRequired": "Heu de seleccionar un perfil d'idioma",
"components.Settings.SonarrModal.validationHostnameRequired": "Heu de proporcionar un nom damfitrió o una adreça IP vàlides", "components.Settings.SonarrModal.validationHostnameRequired": "Heu de proporcionar un nom damfitrió o una adreça IP vàlides",
"components.Settings.SonarrModal.validationBaseUrlTrailingSlash": "L'URL base no pot acabar amb una barra inclinada final", "components.Settings.SonarrModal.validationBaseUrlTrailingSlash": "L'URL base no ha d'acabar amb una barra inclinada final",
"components.Settings.SonarrModal.validationBaseUrlLeadingSlash": "L'URL base ha de tenir una barra inclinada", "components.Settings.SonarrModal.validationBaseUrlLeadingSlash": "L'URL base ha de tenir una barra inclinada",
"components.Settings.SonarrModal.validationApplicationUrlTrailingSlash": "L'URL no pot acabar amb una barra inclinada final", "components.Settings.SonarrModal.validationApplicationUrlTrailingSlash": "L'URL no pot acabar amb una barra inclinada final",
"components.Settings.SonarrModal.validationApplicationUrl": "Heu de proporcionar un URL vàlid", "components.Settings.SonarrModal.validationApplicationUrl": "Heu de proporcionar un URL vàlid",
@@ -1119,7 +1119,7 @@
"components.Discover.CreateSlider.needresults": "Cal tenir almenys 1 resultat.", "components.Discover.CreateSlider.needresults": "Cal tenir almenys 1 resultat.",
"components.Discover.CreateSlider.nooptions": "Sense resultats.", "components.Discover.CreateSlider.nooptions": "Sense resultats.",
"components.Discover.CreateSlider.providetmdbgenreid": "Proporciona un ID de categoria TMDB", "components.Discover.CreateSlider.providetmdbgenreid": "Proporciona un ID de categoria TMDB",
"components.Discover.CreateSlider.providetmdbnetwork": "Proporciona l'ID d'emissor TMDB", "components.Discover.CreateSlider.providetmdbnetwork": "Proporciona l'ID de la plataforma TMDB",
"components.Discover.CreateSlider.providetmdbstudio": "Proporciona l'ID d'estudi TMDB", "components.Discover.CreateSlider.providetmdbstudio": "Proporciona l'ID d'estudi TMDB",
"components.Discover.CreateSlider.searchGenres": "Cercar per gènere…", "components.Discover.CreateSlider.searchGenres": "Cercar per gènere…",
"components.Discover.CreateSlider.searchKeywords": "Cercar per paraules clau…", "components.Discover.CreateSlider.searchKeywords": "Cercar per paraules clau…",
@@ -1151,7 +1151,7 @@
"components.Discover.networks": "Emissors", "components.Discover.networks": "Emissors",
"components.Discover.resetwarning": "Restablir tots els controls lliscants al valor predeterminat. Això també suprimirà els controls lliscants personalitzats!", "components.Discover.resetwarning": "Restablir tots els controls lliscants al valor predeterminat. Això també suprimirà els controls lliscants personalitzats!",
"components.Discover.tmdbmoviekeyword": "Paraula clau de pel·lícula TMDB", "components.Discover.tmdbmoviekeyword": "Paraula clau de pel·lícula TMDB",
"components.Discover.tmdbnetwork": "Emissors TMDB", "components.Discover.tmdbnetwork": "Plataformes TMDB",
"components.Discover.FilterSlideover.tmdbuserscore": "Puntuació d'usuaris TMDB", "components.Discover.FilterSlideover.tmdbuserscore": "Puntuació d'usuaris TMDB",
"components.Discover.tvgenres": "Gèneres de sèries", "components.Discover.tvgenres": "Gèneres de sèries",
"components.Discover.DiscoverTvKeyword.keywordSeries": "Sèries {keywordTitle}", "components.Discover.DiscoverTvKeyword.keywordSeries": "Sèries {keywordTitle}",
@@ -1224,5 +1224,19 @@
"components.StatusBadge.seasonepisodenumber": "S{seasonNumber}E{episodeNumber}", "components.StatusBadge.seasonepisodenumber": "S{seasonNumber}E{episodeNumber}",
"components.Settings.SettingsJobsCache.availability-sync": "Sincronització de disponibilitat de contingut", "components.Settings.SettingsJobsCache.availability-sync": "Sincronització de disponibilitat de contingut",
"components.Discover.tmdbmoviestreamingservices": "Serveis de transmissió de pel·lícules TMDB", "components.Discover.tmdbmoviestreamingservices": "Serveis de transmissió de pel·lícules TMDB",
"components.Discover.tmdbtvstreamingservices": "Serveis de transmissió de TV TMDB" "components.Discover.tmdbtvstreamingservices": "Serveis de transmissió de TV TMDB",
"components.Discover.FilterSlideover.tmdbuservotecount": "Recompte de vots dels usuaris de TMDB",
"components.Discover.FilterSlideover.voteCount": "Número de vots entre {minValue} i {maxValue}",
"components.UserProfile.UserSettings.UserNotificationSettings.sound": "So per a les notificacions",
"components.Settings.Notifications.NotificationsPushover.deviceDefault": "Dispositiu per defecte",
"components.Settings.Notifications.NotificationsPushover.sound": "So per a les notificacions",
"components.Settings.SonarrModal.animeSeriesType": "Tipus d'Anime",
"components.Settings.SonarrModal.seriesType": "Tipus de sèrie",
"components.Settings.SonarrModal.tagRequests": "Sol·licituds d'etiquetes",
"components.UserProfile.UserSettings.UserNotificationSettings.deviceDefault": "Dispositiu per defecte",
"i18n.collection": "Col·lecció",
"components.MovieDetails.imdbuserscore": "Puntuació dels usuaris de IMDB",
"components.Settings.RadarrModal.tagRequests": "Sol·licituds d'etiqueta",
"components.Settings.RadarrModal.tagRequestsInfo": "Automàticament afegeix una etiqueta addicional amb el nom d'usuari i nom complet del sol·licitant",
"components.Settings.SonarrModal.tagRequestsInfo": "Automàticament afegeix una etiqueta addicional amb el nom d'usuari i nom complet del sol·licitant"
} }

View File

@@ -784,7 +784,7 @@
"components.Settings.externalUrl": "Externí adresa URL", "components.Settings.externalUrl": "Externí adresa URL",
"components.Settings.hostname": "Název hostitele nebo IP adresa", "components.Settings.hostname": "Název hostitele nebo IP adresa",
"components.Settings.manualscan": "Manuální skenování knihovny", "components.Settings.manualscan": "Manuální skenování knihovny",
"components.Settings.plexlibrariesDescription": "Knihovny Overseerr vyhledává tituly. Nastavte a uložte nastavení připojení k systému Plex a poté klikněte na tlačítko níže, pokud nejsou v seznamu uvedeny žádné knihovny.", "components.Settings.plexlibrariesDescription": "Knihovny, ve kterých Overseerr vyhledává tituly. Nastavte a uložte nastavení připojení k systému Plex a poté klikněte na tlačítko níže, pokud nejsou v seznamu uvedeny žádné knihovny.",
"components.Settings.serverpresetLoad": "Stisknutím tlačítka načtete dostupné servery", "components.Settings.serverpresetLoad": "Stisknutím tlačítka načtete dostupné servery",
"components.Settings.toastTautulliSettingsFailure": "Při ukládání nastavení Tautulli se něco pokazilo.", "components.Settings.toastTautulliSettingsFailure": "Při ukládání nastavení Tautulli se něco pokazilo.",
"components.Settings.webAppUrl": "<WebAppLink>Webová aplikace</WebAppLink> Adresa URL", "components.Settings.webAppUrl": "<WebAppLink>Webová aplikace</WebAppLink> Adresa URL",
@@ -836,7 +836,7 @@
"components.Settings.noDefault4kServer": "Server 4K {serverType} musí být označen jako výchozí, aby uživatelé mohli odesílat požadavky 4K {mediaType}.", "components.Settings.noDefault4kServer": "Server 4K {serverType} musí být označen jako výchozí, aby uživatelé mohli odesílat požadavky 4K {mediaType}.",
"components.Settings.noDefaultNon4kServer": "Pokud máte pouze jeden server {serverType} pro obsah jiný než 4K i 4K (nebo pokud stahujete pouze obsah 4K), váš server {serverType} by <strong>neměl</strong> být označen jako server 4K.", "components.Settings.noDefaultNon4kServer": "Pokud máte pouze jeden server {serverType} pro obsah jiný než 4K i 4K (nebo pokud stahujete pouze obsah 4K), váš server {serverType} by <strong>neměl</strong> být označen jako server 4K.",
"components.Settings.noDefaultServer": "Aby mohly být zpracovány požadavky typu {mediaType}, musí být alespoň jeden server typu {serverType} označen jako výchozí.", "components.Settings.noDefaultServer": "Aby mohly být zpracovány požadavky typu {mediaType}, musí být alespoň jeden server typu {serverType} označen jako výchozí.",
"components.Settings.plexsettingsDescription": "Knihovny Overseerr vyhledává tituly. Nastavte a uložte nastavení připojení k systému Plex a poté klikněte na tlačítko níže, pokud nejsou v seznamu uvedeny žádné knihovny.", "components.Settings.plexsettingsDescription": "Nakonfigurujte nastavení pro váš server Plex. Overseerr prohledá vaše knihovny Plex, aby zjistil dostupnost obsahu.",
"components.Settings.toastPlexRefresh": "Získání seznamu serverů z aplikace Plex…", "components.Settings.toastPlexRefresh": "Získání seznamu serverů z aplikace Plex…",
"components.Settings.toastPlexRefreshSuccess": "Seznam serverů Plex úspěšně načten!", "components.Settings.toastPlexRefreshSuccess": "Seznam serverů Plex úspěšně načten!",
"components.UserList.passwordinfodescription": "Nakonfigurujte adresu URL aplikace a povolte e-mailová oznámení, která umožní automatické generování hesla.", "components.UserList.passwordinfodescription": "Nakonfigurujte adresu URL aplikace a povolte e-mailová oznámení, která umožní automatické generování hesla.",
@@ -1194,7 +1194,7 @@
"components.Settings.SettingsMain.applicationurl": "Adresa URL aplikace", "components.Settings.SettingsMain.applicationurl": "Adresa URL aplikace",
"components.Settings.SettingsMain.cacheImages": "Povolení ukládání obrázků do mezipaměti", "components.Settings.SettingsMain.cacheImages": "Povolení ukládání obrázků do mezipaměti",
"components.Settings.SettingsMain.cacheImagesTip": "Ukládání obrázků z externích zdrojů do mezipaměti (vyžaduje značné množství místa na disku)", "components.Settings.SettingsMain.cacheImagesTip": "Ukládání obrázků z externích zdrojů do mezipaměti (vyžaduje značné množství místa na disku)",
"components.Settings.SettingsMain.csrfProtection": "Povolení ochrany CSRF", "components.Settings.SettingsMain.csrfProtection": "Povolit ochranu CSRF",
"components.Settings.SettingsMain.csrfProtectionHoverTip": "Toto nastavení NEPOVOLUJTE, pokud nerozumíte tomu, co děláte!", "components.Settings.SettingsMain.csrfProtectionHoverTip": "Toto nastavení NEPOVOLUJTE, pokud nerozumíte tomu, co děláte!",
"components.Settings.SettingsMain.csrfProtectionTip": "Nastavení externího přístupu k rozhraní API pouze pro čtení (vyžaduje protokol HTTPS)", "components.Settings.SettingsMain.csrfProtectionTip": "Nastavení externího přístupu k rozhraní API pouze pro čtení (vyžaduje protokol HTTPS)",
"components.Settings.SettingsMain.general": "Obecné", "components.Settings.SettingsMain.general": "Obecné",
@@ -1231,5 +1231,12 @@
"components.Discover.FilterSlideover.tmdbuservotecount": "Počet hlasů uživatelů TMDB", "components.Discover.FilterSlideover.tmdbuservotecount": "Počet hlasů uživatelů TMDB",
"components.Discover.tmdbmoviestreamingservices": "Filmové streamovací služby TMDB", "components.Discover.tmdbmoviestreamingservices": "Filmové streamovací služby TMDB",
"components.Settings.SonarrModal.tagRequestsInfo": "Automatické přidání dodatočné značky s ID uživatele a zobrazovaným jménem žadatele", "components.Settings.SonarrModal.tagRequestsInfo": "Automatické přidání dodatočné značky s ID uživatele a zobrazovaným jménem žadatele",
"components.Discover.tmdbtvstreamingservices": "Televizní streamovací služby TMDB" "components.Discover.tmdbtvstreamingservices": "Televizní streamovací služby TMDB",
"components.Settings.Notifications.NotificationsPushover.sound": "Zvuk upozornění",
"components.MovieDetails.imdbuserscore": "Uživatelské skóre IMDB",
"components.UserProfile.UserSettings.UserNotificationSettings.sound": "Zvuk upozornění",
"components.Settings.SonarrModal.animeSeriesType": "Typ anime série",
"components.Settings.Notifications.NotificationsPushover.deviceDefault": "Výchozí zařízení",
"components.UserProfile.UserSettings.UserNotificationSettings.deviceDefault": "Výchozí zařízení",
"components.Settings.SonarrModal.seriesType": "Typ série"
} }

View File

@@ -58,7 +58,7 @@
"components.MovieDetails.markavailable": "Markér som Tilgængelig", "components.MovieDetails.markavailable": "Markér som Tilgængelig",
"components.MovieDetails.originallanguage": "Originalsprog", "components.MovieDetails.originallanguage": "Originalsprog",
"components.Login.signinwithoverseerr": "Brug din {applicationTitle} konto", "components.Login.signinwithoverseerr": "Brug din {applicationTitle} konto",
"components.MovieDetails.MovieCast.fullcast": "Medvirkende", "components.MovieDetails.MovieCast.fullcast": "Fuld rolleliste",
"components.MovieDetails.MovieCrew.fullcrew": "Filmstab", "components.MovieDetails.MovieCrew.fullcrew": "Filmstab",
"components.MovieDetails.budget": "Budget", "components.MovieDetails.budget": "Budget",
"components.MovieDetails.overview": "Overblik", "components.MovieDetails.overview": "Overblik",
@@ -539,7 +539,7 @@
"components.Settings.Notifications.validationSmtpPortRequired": "Du skal angive et gyldigt port-nummer", "components.Settings.Notifications.validationSmtpPortRequired": "Du skal angive et gyldigt port-nummer",
"components.Settings.Notifications.webhookUrl": "Webhook URL", "components.Settings.Notifications.webhookUrl": "Webhook URL",
"components.Settings.Notifications.webhookUrlTip": "Opret en<DiscordWebhookLink>webhook integration</DiscordWebhookLink> til din server", "components.Settings.Notifications.webhookUrlTip": "Opret en<DiscordWebhookLink>webhook integration</DiscordWebhookLink> til din server",
"components.Settings.RadarrModal.baseUrl": "URL Base", "components.Settings.RadarrModal.baseUrl": "URL Kilde",
"components.Settings.RadarrModal.create4kradarr": "Tilføj Ny 4K Radarr Server", "components.Settings.RadarrModal.create4kradarr": "Tilføj Ny 4K Radarr Server",
"components.Settings.RadarrModal.createradarr": "Tilføj Ny Radarr Server", "components.Settings.RadarrModal.createradarr": "Tilføj Ny Radarr Server",
"components.Settings.RadarrModal.default4kserver": "Standard 4K Server", "components.Settings.RadarrModal.default4kserver": "Standard 4K Server",
@@ -625,7 +625,7 @@
"components.Settings.SettingsLogs.label": "Label", "components.Settings.SettingsLogs.label": "Label",
"components.Settings.SettingsLogs.level": "Alvorlighed", "components.Settings.SettingsLogs.level": "Alvorlighed",
"components.Settings.SettingsLogs.logDetails": "Loginformation", "components.Settings.SettingsLogs.logDetails": "Loginformation",
"components.Settings.SonarrModal.baseUrl": "URL Base", "components.Settings.SonarrModal.baseUrl": "URL Kilde",
"components.Settings.SonarrModal.create4ksonarr": "Tilføj Ny 4K Sonarr Server", "components.Settings.SonarrModal.create4ksonarr": "Tilføj Ny 4K Sonarr Server",
"components.Settings.SonarrModal.loadingprofiles": "Indlæser kvalitetsprofiler…", "components.Settings.SonarrModal.loadingprofiles": "Indlæser kvalitetsprofiler…",
"components.Settings.manualscan": "Manuel Biblioteksskanning", "components.Settings.manualscan": "Manuel Biblioteksskanning",
@@ -794,7 +794,7 @@
"components.Setup.configureplex": "Konfigurér Plex", "components.Setup.configureplex": "Konfigurér Plex",
"components.Settings.validationPortRequired": "Du skal angive et gyldigt port-nummer", "components.Settings.validationPortRequired": "Du skal angive et gyldigt port-nummer",
"components.Setup.configureservices": "Konfigurér Tjenester", "components.Setup.configureservices": "Konfigurér Tjenester",
"components.Setup.continue": "Fortsæt", "components.Setup.continue": "Videre",
"components.Setup.finish": "Fuldfør Opsætning", "components.Setup.finish": "Fuldfør Opsætning",
"components.Setup.finishing": "Færdiggører…", "components.Setup.finishing": "Færdiggører…",
"components.Setup.loginwithplex": "Log in med Plex", "components.Setup.loginwithplex": "Log in med Plex",
@@ -1231,5 +1231,12 @@
"components.Settings.SonarrModal.tagRequests": "Tag forespørgsler", "components.Settings.SonarrModal.tagRequests": "Tag forespørgsler",
"components.Settings.SonarrModal.tagRequestsInfo": "Tilføj automatisk et ekstra tag med forespørgerens bruger ID og viste navn", "components.Settings.SonarrModal.tagRequestsInfo": "Tilføj automatisk et ekstra tag med forespørgerens bruger ID og viste navn",
"i18n.collection": "Samling", "i18n.collection": "Samling",
"components.Settings.RadarrModal.tagRequestsInfo": "Tilføj automatisk et ekstra tag med forespørgerens bruger id og viste navn" "components.Settings.RadarrModal.tagRequestsInfo": "Tilføj automatisk et ekstra tag med forespørgerens bruger id og viste navn",
"components.MovieDetails.imdbuserscore": "IMDB Bruger Score",
"components.Settings.SonarrModal.animeSeriesType": "Anime Serie Type",
"components.Settings.SonarrModal.seriesType": "Serie Type",
"components.Settings.Notifications.NotificationsPushover.deviceDefault": "Enhedsstandard",
"components.Settings.Notifications.NotificationsPushover.sound": "Notifikationslyd",
"components.UserProfile.UserSettings.UserNotificationSettings.deviceDefault": "Enhedsstandard",
"components.UserProfile.UserSettings.UserNotificationSettings.sound": "Notifikationslyd"
} }

View File

@@ -1231,5 +1231,12 @@
"components.MovieDetails.imdbuserscore": "IMDB Nutzer Bewertung", "components.MovieDetails.imdbuserscore": "IMDB Nutzer Bewertung",
"components.Settings.SonarrModal.tagRequests": "Tag Anforderungen", "components.Settings.SonarrModal.tagRequests": "Tag Anforderungen",
"components.Discover.FilterSlideover.voteCount": "Anzahl Abstimmungen zwischen {minValue} und {maxValue}", "components.Discover.FilterSlideover.voteCount": "Anzahl Abstimmungen zwischen {minValue} und {maxValue}",
"components.Settings.SonarrModal.tagRequestsInfo": "Füge automatisch einen zusätzlichen Tag mit der ID & Namen des anfordernden Nutzers" "components.Settings.SonarrModal.tagRequestsInfo": "Füge automatisch einen zusätzlichen Tag mit der ID & Namen des anfordernden Nutzers",
"components.Settings.RadarrModal.tagRequests": "Anfragen taggen",
"components.Settings.Notifications.NotificationsPushover.sound": "Benachrichtigungston",
"components.UserProfile.UserSettings.UserNotificationSettings.deviceDefault": "Gerätestandard",
"components.Settings.SonarrModal.animeSeriesType": "Art der Anime-Serie",
"components.Settings.SonarrModal.seriesType": "Serientyp",
"components.UserProfile.UserSettings.UserNotificationSettings.sound": "Benachrichtigungston",
"components.Settings.Notifications.NotificationsPushover.deviceDefault": "Gerätestandard"
} }

View File

@@ -1232,5 +1232,11 @@
"components.UserProfile.UserSettings.UserGeneralSettings.discordId": "Αναγνωριστικό χρήστη Discord", "components.UserProfile.UserSettings.UserGeneralSettings.discordId": "Αναγνωριστικό χρήστη Discord",
"components.UserProfile.UserSettings.UserGeneralSettings.plexwatchlistsyncseriestip": "Ζητήστε αυτόματα σειρές που βρίσκονται στη <PlexWatchlistSupportLink>λίστα παρακολούθησης του Plex</PlexWatchlistSupportLink>", "components.UserProfile.UserSettings.UserGeneralSettings.plexwatchlistsyncseriestip": "Ζητήστε αυτόματα σειρές που βρίσκονται στη <PlexWatchlistSupportLink>λίστα παρακολούθησης του Plex</PlexWatchlistSupportLink>",
"components.UserProfile.plexwatchlist": "Λίστα παρακολούθησης Plex", "components.UserProfile.plexwatchlist": "Λίστα παρακολούθησης Plex",
"components.MovieDetails.imdbuserscore": "Βαθμολογία χρηστών IMDB" "components.MovieDetails.imdbuserscore": "Βαθμολογία χρηστών IMDB",
"components.Settings.SonarrModal.animeSeriesType": "Τύπος σειράς άνιμε",
"components.Settings.SonarrModal.seriesType": "Τύπος σειράς",
"components.Settings.Notifications.NotificationsPushover.sound": "Ήχος ειδοποίησης",
"components.UserProfile.UserSettings.UserNotificationSettings.deviceDefault": "Προεπιλογή συσκευής",
"components.UserProfile.UserSettings.UserNotificationSettings.sound": "Ήχος ειδοποίησης",
"components.Settings.Notifications.NotificationsPushover.deviceDefault": "Προεπιλογή συσκευής"
} }

View File

@@ -471,7 +471,6 @@
"components.RequestModal.cancel": "Cancel Request", "components.RequestModal.cancel": "Cancel Request",
"components.RequestModal.edit": "Edit Request", "components.RequestModal.edit": "Edit Request",
"components.RequestModal.errorediting": "Something went wrong while editing the request.", "components.RequestModal.errorediting": "Something went wrong while editing the request.",
"components.RequestModal.extras": "Extras",
"components.RequestModal.numberofepisodes": "# of Episodes", "components.RequestModal.numberofepisodes": "# of Episodes",
"components.RequestModal.pending4krequest": "Pending 4K Request", "components.RequestModal.pending4krequest": "Pending 4K Request",
"components.RequestModal.pendingapproval": "Your request is pending approval.", "components.RequestModal.pendingapproval": "Your request is pending approval.",
@@ -768,6 +767,7 @@
"components.Settings.SettingsJobsCache.nextexecution": "Next Execution", "components.Settings.SettingsJobsCache.nextexecution": "Next Execution",
"components.Settings.SettingsJobsCache.plex-full-scan": "Plex Full Library Scan", "components.Settings.SettingsJobsCache.plex-full-scan": "Plex Full Library Scan",
"components.Settings.SettingsJobsCache.plex-recently-added-scan": "Plex Recently Added Scan", "components.Settings.SettingsJobsCache.plex-recently-added-scan": "Plex Recently Added Scan",
"components.Settings.SettingsJobsCache.plex-refresh-token": "Plex Refresh Token",
"components.Settings.SettingsJobsCache.plex-watchlist-sync": "Plex Watchlist Sync", "components.Settings.SettingsJobsCache.plex-watchlist-sync": "Plex Watchlist Sync",
"components.Settings.SettingsJobsCache.process": "Process", "components.Settings.SettingsJobsCache.process": "Process",
"components.Settings.SettingsJobsCache.radarr-scan": "Radarr Scan", "components.Settings.SettingsJobsCache.radarr-scan": "Radarr Scan",

View File

@@ -1232,5 +1232,11 @@
"i18n.collection": "Colección", "i18n.collection": "Colección",
"components.Settings.RadarrModal.tagRequestsInfo": "Añadir automáticamente una etiqueta adicional con el nombre de usuario y el nombre para mostrar del solicitante", "components.Settings.RadarrModal.tagRequestsInfo": "Añadir automáticamente una etiqueta adicional con el nombre de usuario y el nombre para mostrar del solicitante",
"components.Settings.SonarrModal.tagRequestsInfo": "Añadir automáticamente una etiqueta adicional con el nombre de usuario y el nombre para mostrar del solicitante", "components.Settings.SonarrModal.tagRequestsInfo": "Añadir automáticamente una etiqueta adicional con el nombre de usuario y el nombre para mostrar del solicitante",
"components.MovieDetails.imdbuserscore": "Puntuación de los usuarios de IMDB" "components.MovieDetails.imdbuserscore": "Puntuación de los usuarios de IMDB",
"components.Settings.SonarrModal.animeSeriesType": "Tipo de anime",
"components.Settings.SonarrModal.seriesType": "Tipo de series",
"components.Settings.Notifications.NotificationsPushover.sound": "Sonido para las notificaciones",
"components.UserProfile.UserSettings.UserNotificationSettings.deviceDefault": "Dispositivo predeterminado",
"components.UserProfile.UserSettings.UserNotificationSettings.sound": "Sonido para las notificaciones",
"components.Settings.Notifications.NotificationsPushover.deviceDefault": "Dispositivo predeterminado"
} }

35
src/i18n/locale/fi.json Normal file
View File

@@ -0,0 +1,35 @@
{
"components.Discover.CreateSlider.editsuccess": "Liukusäädintä muokattu ja löytömuokkausasetukset tallennettu.",
"components.CollectionDetails.numberofmovies": "{count} elokuvaa",
"components.Discover.CreateSlider.slidernameplaceholder": "Liukusäätimen nimi",
"components.AppDataWarning.dockerVolumeMissingDescription": "<code>{appDataPath}</code> -levyn liittäminen ei onnistunut oikein. Kaikki tiedot poistetaan, kun säilö pysäytetään tai käynnistetään uudelleen.",
"components.Discover.DiscoverMovies.sortPopularityDesc": "Suosio laskevassa järjestyksessä",
"components.AirDateBadge.airsrelative": "Esitys {relativeTime}",
"components.CollectionDetails.overview": "Yleiskatsaus",
"components.AirDateBadge.airedrelative": "Esitetty {relativeTime}",
"components.Discover.CreateSlider.searchStudios": "Etsi studioita…",
"components.Discover.CreateSlider.providetmdbnetwork": "Anna TMDB Network ID",
"components.Discover.CreateSlider.addfail": "Uuden liukusäätimen luominen epäonnistui.",
"components.CollectionDetails.requestcollection": "Pyydä kokoelma",
"components.Discover.DiscoverMovieGenre.genreMovies": "Lajityypin {genre} elokuvat",
"components.Discover.DiscoverMovieLanguage.languageMovies": "Elokuvat kielellä {language}",
"components.Discover.DiscoverMovies.sortPopularityAsc": "Suosio nousevassa järjestyksessä",
"components.Discover.CreateSlider.needresults": "Tarvitaan vähintään 1 tulos.",
"components.Discover.CreateSlider.addcustomslider": "Luo mukautettu liukusäädin",
"components.Discover.CreateSlider.editSlider": "Muokkaa liukusäädintä",
"components.Discover.CreateSlider.validationDatarequired": "Sinun täytyy antaa datan arvo.",
"components.Discover.CreateSlider.providetmdbstudio": "Anna TMDB Studio ID",
"components.Discover.CreateSlider.searchGenres": "Etsi tyylilajeja…",
"components.Discover.CreateSlider.editfail": "Liukusäätimen muokkaus epäonnistui.",
"components.Discover.CreateSlider.starttyping": "Aloita kirjoittaminen etsiäksesi.",
"components.Discover.CreateSlider.addSlider": "Lisää liukusäädin",
"components.CollectionDetails.requestcollection4k": "Pyydä kokoelma 4K-laadulla",
"components.Discover.CreateSlider.providetmdbsearch": "Anna hakukysely",
"components.Discover.CreateSlider.providetmdbkeywordid": "Anna TMDB Keyword ID",
"components.Discover.DiscoverMovieKeyword.keywordMovies": "{keywordTitle} elokuvat",
"components.Discover.CreateSlider.validationTitlerequired": "Sinun tulee antaa nimi.",
"components.Discover.CreateSlider.nooptions": "Ei tuloksia.",
"components.Discover.CreateSlider.searchKeywords": "Etsi avainsanoja…",
"components.Discover.DiscoverMovies.discovermovies": "Elokuvat",
"components.Discover.CreateSlider.providetmdbgenreid": "Anna TMDB Genre ID"
}

View File

@@ -61,7 +61,7 @@
"components.Settings.RadarrModal.port": "Port", "components.Settings.RadarrModal.port": "Port",
"components.Settings.RadarrModal.qualityprofile": "Profil de qualité", "components.Settings.RadarrModal.qualityprofile": "Profil de qualité",
"components.Settings.RadarrModal.rootfolder": "Dossier racine", "components.Settings.RadarrModal.rootfolder": "Dossier racine",
"components.Settings.RadarrModal.selectMinimumAvailability": "Sélectionner une disponibilté minimale", "components.Settings.RadarrModal.selectMinimumAvailability": "Sélectionner une disponibilité minimale",
"components.Settings.RadarrModal.selectQualityProfile": "Sélectionner un profil qualité", "components.Settings.RadarrModal.selectQualityProfile": "Sélectionner un profil qualité",
"components.Settings.RadarrModal.selectRootFolder": "Sélectionner un dossier racine", "components.Settings.RadarrModal.selectRootFolder": "Sélectionner un dossier racine",
"components.Settings.RadarrModal.server4k": "Serveur 4K", "components.Settings.RadarrModal.server4k": "Serveur 4K",
@@ -162,7 +162,7 @@
"i18n.tvshows": "Séries", "i18n.tvshows": "Séries",
"i18n.unavailable": "Indisponible", "i18n.unavailable": "Indisponible",
"pages.oops": "Oups", "pages.oops": "Oups",
"pages.returnHome": "Retourner à l'acceuil", "pages.returnHome": "Retourner à l'accueil",
"components.TvDetails.TvCast.fullseriescast": "Casting complet de la série", "components.TvDetails.TvCast.fullseriescast": "Casting complet de la série",
"components.MovieDetails.MovieCast.fullcast": "Casting complet", "components.MovieDetails.MovieCast.fullcast": "Casting complet",
"components.Settings.Notifications.emailsettingssaved": "Paramètres de notification par e-mail enregistrés avec succès !", "components.Settings.Notifications.emailsettingssaved": "Paramètres de notification par e-mail enregistrés avec succès !",
@@ -208,7 +208,7 @@
"components.Settings.SettingsAbout.Releases.viewchangelog": "Voir le journal des modifications", "components.Settings.SettingsAbout.Releases.viewchangelog": "Voir le journal des modifications",
"components.Settings.SettingsAbout.Releases.versionChangelog": "Journal des modifications de la version {version}", "components.Settings.SettingsAbout.Releases.versionChangelog": "Journal des modifications de la version {version}",
"components.Settings.SettingsAbout.Releases.releases": "Versions", "components.Settings.SettingsAbout.Releases.releases": "Versions",
"components.Settings.SettingsAbout.Releases.releasedataMissing": "Les données de version sont actuellement indisponible.", "components.Settings.SettingsAbout.Releases.releasedataMissing": "Les données de version sont actuellement indisponibles.",
"components.Settings.SettingsAbout.Releases.latestversion": "Dernière version", "components.Settings.SettingsAbout.Releases.latestversion": "Dernière version",
"components.Settings.SettingsAbout.Releases.currentversion": "Actuelle", "components.Settings.SettingsAbout.Releases.currentversion": "Actuelle",
"components.UserList.importfromplexerror": "Une erreur s'est produite durant l'importation des utilisateurs de Plex.", "components.UserList.importfromplexerror": "Une erreur s'est produite durant l'importation des utilisateurs de Plex.",
@@ -976,7 +976,7 @@
"components.ManageSlideOver.manageModalMedia4k": "Média(s) 4K", "components.ManageSlideOver.manageModalMedia4k": "Média(s) 4K",
"components.ManageSlideOver.markallseasons4kavailable": "Marquer toutes les saisons comme disponibles en 4K", "components.ManageSlideOver.markallseasons4kavailable": "Marquer toutes les saisons comme disponibles en 4K",
"components.ManageSlideOver.playedby": "Joué par", "components.ManageSlideOver.playedby": "Joué par",
"components.Settings.validationUrlTrailingSlash": "L'URL ne doit pas ce terminer par un slash", "components.Settings.validationUrlTrailingSlash": "L'URL ne doit pas se terminer par un slash",
"components.Settings.externalUrl": "URL externe", "components.Settings.externalUrl": "URL externe",
"components.Settings.tautulliApiKey": "Clé API", "components.Settings.tautulliApiKey": "Clé API",
"components.Settings.tautulliSettings": "Paramètres Tautulli", "components.Settings.tautulliSettings": "Paramètres Tautulli",
@@ -994,9 +994,9 @@
"components.ManageSlideOver.alltime": "Tout le temps", "components.ManageSlideOver.alltime": "Tout le temps",
"components.ManageSlideOver.manageModalMedia": "Média(s)", "components.ManageSlideOver.manageModalMedia": "Média(s)",
"components.ManageSlideOver.markallseasonsavailable": "Marquer toutes les saisons comme disponibles", "components.ManageSlideOver.markallseasonsavailable": "Marquer toutes les saisons comme disponibles",
"components.Settings.validationUrlBaseTrailingSlash": "L'URL de base ne doit pas ce terminer par un slash", "components.Settings.validationUrlBaseTrailingSlash": "L'URL de base ne doit pas se terminer par un slash",
"components.Settings.tautulliSettingsDescription": "Configuration optionnelle pour votre serveur Tautulli. Overseerr va récupérer l'historique de visionnage de votre Plex depuis Tautulli.", "components.Settings.tautulliSettingsDescription": "Configuration optionnelle pour votre serveur Tautulli. Overseerr va récupérer l'historique de visionnage de votre Plex depuis Tautulli.",
"components.UserList.newplexsigninenabled": "L'option <strong>Autoriser nouvelle connexion Plex</strong> est actuellement activée. Les utilisateurs Plex disposant d'un accès à la librairie n'ont pas besoin d'être importés pour pouvoir ce connecter.", "components.UserList.newplexsigninenabled": "L'option <strong>Autoriser nouvelle connexion Plex</strong> est actuellement activée. Les utilisateurs Plex disposant d'un accès à la librairie n'ont pas besoin d'être importés pour pouvoir se connecter.",
"components.UserProfile.UserSettings.UserGeneralSettings.discordId": "ID utilisateur Discord", "components.UserProfile.UserSettings.UserGeneralSettings.discordId": "ID utilisateur Discord",
"components.UserProfile.UserSettings.UserGeneralSettings.discordIdTip": "Le <FindDiscordIdLink>numéro d'identification à plusieurs chiffres</FindDiscordIdLink> est associé avec votre compte Discord", "components.UserProfile.UserSettings.UserGeneralSettings.discordIdTip": "Le <FindDiscordIdLink>numéro d'identification à plusieurs chiffres</FindDiscordIdLink> est associé avec votre compte Discord",
"components.UserProfile.UserSettings.UserGeneralSettings.validationDiscordId": "Vous devez fournir un ID utilisateur Discord valide", "components.UserProfile.UserSettings.UserGeneralSettings.validationDiscordId": "Vous devez fournir un ID utilisateur Discord valide",
@@ -1191,7 +1191,7 @@
"components.Settings.SettingsMain.region": "Région à découvrir", "components.Settings.SettingsMain.region": "Région à découvrir",
"components.Settings.SettingsMain.regionTip": "Filtrer le contenu par disponibilité régionale", "components.Settings.SettingsMain.regionTip": "Filtrer le contenu par disponibilité régionale",
"components.Settings.SettingsMain.trustProxy": "Activer la prise en charge proxy", "components.Settings.SettingsMain.trustProxy": "Activer la prise en charge proxy",
"components.Settings.SettingsMain.trustProxyTip": "Permettre Overseerr à enregistrer correctement les adresses IP des clients derrière un proxy", "components.Settings.SettingsMain.trustProxyTip": "Permettre à Overseerr d'enregistrer correctement les adresses IP des clients derrière un proxy",
"components.Settings.SettingsMain.applicationTitle": "Nom de l'application", "components.Settings.SettingsMain.applicationTitle": "Nom de l'application",
"components.Settings.SettingsMain.csrfProtectionTip": "Définir l'accès à l'API externe en lecture seule (nécessite HTTPS)", "components.Settings.SettingsMain.csrfProtectionTip": "Définir l'accès à l'API externe en lecture seule (nécessite HTTPS)",
"components.Settings.SettingsMain.cacheImagesTip": "Met en cache localement et utilise des images optimisées (nécessite une quantité considérable d'espace disque)", "components.Settings.SettingsMain.cacheImagesTip": "Met en cache localement et utilise des images optimisées (nécessite une quantité considérable d'espace disque)",
@@ -1232,5 +1232,11 @@
"components.Settings.SonarrModal.tagRequestsInfo": "Ajouter automatiquement un tag supplémentaire avec l'ID utilisateur et le nom d'affichage du demandeur", "components.Settings.SonarrModal.tagRequestsInfo": "Ajouter automatiquement un tag supplémentaire avec l'ID utilisateur et le nom d'affichage du demandeur",
"i18n.collection": "Collection", "i18n.collection": "Collection",
"components.Settings.RadarrModal.tagRequestsInfo": "Ajouter automatiquement un tag supplémentaire avec l'ID utilisateur et le nom d'affichage du demandeur", "components.Settings.RadarrModal.tagRequestsInfo": "Ajouter automatiquement un tag supplémentaire avec l'ID utilisateur et le nom d'affichage du demandeur",
"components.MovieDetails.imdbuserscore": "Note Utilisateurs" "components.MovieDetails.imdbuserscore": "Note Utilisateurs",
"components.Settings.SonarrModal.seriesType": "Type de série",
"components.Settings.SonarrModal.animeSeriesType": "Types d'anime",
"components.Settings.Notifications.NotificationsPushover.deviceDefault": "Appareil par défaut",
"components.UserProfile.UserSettings.UserNotificationSettings.deviceDefault": "Appareil par défaut",
"components.UserProfile.UserSettings.UserNotificationSettings.sound": "Son de notification",
"components.Settings.Notifications.NotificationsPushover.sound": "Son de notification"
} }

View File

@@ -2,7 +2,7 @@
"components.ManageSlideOver.alltime": "כל הזמנים", "components.ManageSlideOver.alltime": "כל הזמנים",
"components.Login.validationemailrequired": "חובה לספק כתובת מייל חוקית", "components.Login.validationemailrequired": "חובה לספק כתובת מייל חוקית",
"components.NotificationTypeSelector.userissuereopenedDescription": "קבל התראה כשבעיות שפתחת נפתחות מחדש.", "components.NotificationTypeSelector.userissuereopenedDescription": "קבל התראה כשבעיות שפתחת נפתחות מחדש.",
"components.AppDataWarning.dockerVolumeMissingDescription": "ה <code>{appDataPath}</code> אחסון לא הוגדר כראוי. כל המידע יוסר כאשר הקונטיינר יעצור או יותחל מחדש.", "components.AppDataWarning.dockerVolumeMissingDescription": "רכיב האחסון <code>{appDataPath}</code> לא הוגדר כראוי. כל המידע יוסר כאשר הקונטיינר יעצור או יותחל מחדש.",
"components.CollectionDetails.overview": "תצוגה כללית", "components.CollectionDetails.overview": "תצוגה כללית",
"components.CollectionDetails.numberofmovies": "{כמות} סרטים", "components.CollectionDetails.numberofmovies": "{כמות} סרטים",
"components.CollectionDetails.requestcollection": "אוסף בקשות", "components.CollectionDetails.requestcollection": "אוסף בקשות",
@@ -135,5 +135,41 @@
"components.Login.loginerror": "משהו השתבש בזמן ההתחברות.", "components.Login.loginerror": "משהו השתבש בזמן ההתחברות.",
"components.Login.password": "סיסמה", "components.Login.password": "סיסמה",
"components.Login.signin": "התחברות", "components.Login.signin": "התחברות",
"components.Login.validationpasswordrequired": "חובה לכתוב סיסמה" "components.Login.validationpasswordrequired": "חובה לכתוב סיסמה",
"components.Discover.CreateSlider.editsuccess": "ערוך סליידרהגדרות התאמה אישית שמורות.",
"components.Discover.CreateSlider.slidernameplaceholder": "שם הסליידר",
"components.Discover.DiscoverMovies.sortPopularityDesc": "פופולאריות יורדץ",
"components.Discover.DiscoverMovies.sortTmdbRatingAsc": "דירוג TMDB עולה",
"components.Discover.CreateSlider.searchStudios": "חפש אולפנים…",
"components.Discover.DiscoverMovies.sortReleaseDateDesc": "תאריך שחרור יורד",
"components.Discover.CreateSlider.providetmdbnetwork": "הזמן מזהה רשת TMDB",
"components.Discover.CreateSlider.addfail": "שגיאה ביצירת סליידר.",
"components.Discover.DiscoverMovies.sortPopularityAsc": "פופולאריות עולה",
"components.Discover.CreateSlider.needresults": "חייב שתהיה לפחות תוצאה אחת.",
"components.Discover.CreateSlider.addcustomslider": "צור סליידר מותאם אישית",
"components.Discover.CreateSlider.editSlider": "ערוך סליידר",
"components.Discover.CreateSlider.validationDatarequired": "עליך לספק ערך.",
"components.Discover.DiscoverTv.discovertv": "סדרה",
"components.Discover.DiscoverSliderEdit.deletefail": "שגיאה במחיקת סליידר.",
"components.Discover.CreateSlider.providetmdbstudio": "הזן מזהה אולפן TMDB",
"components.Discover.DiscoverMovies.sortTitleDesc": "כותר (ת-א) יורד",
"components.Discover.CreateSlider.searchGenres": "חפש ז'אנרים…",
"components.Discover.CreateSlider.editfail": "שגיאה בעריכת סליידר.",
"components.Discover.CreateSlider.starttyping": "התחל לכתוב כדי לחפש.",
"components.Discover.DiscoverSliderEdit.enable": "שנה נראות",
"components.Discover.CreateSlider.addSlider": "הוסף סליידר",
"components.Discover.CreateSlider.providetmdbsearch": "הזן מילת חיפוש",
"components.Discover.CreateSlider.providetmdbkeywordid": "הזן מילת חיפוש TMDB",
"components.Discover.DiscoverMovieKeyword.keywordMovies": "סרטי {keywordTitle}",
"components.Discover.CreateSlider.validationTitlerequired": "עליך לספק כותרת.",
"components.Discover.DiscoverMovies.sortReleaseDateAsc": "תאריך שחרור עולה",
"components.Discover.CreateSlider.nooptions": "אין תוצאות.",
"components.Discover.DiscoverMovies.sortTmdbRatingDesc": "דירוג TMDB יורד",
"components.Discover.CreateSlider.searchKeywords": "חפש מילות מפתח…",
"components.Discover.CreateSlider.addsuccess": "צור סליידר חדש והגדרות התאמה אישית שמורות.",
"components.Discover.DiscoverSliderEdit.deletesuccess": "סליידר נמחק בהצלחה.",
"components.Discover.DiscoverMovies.discovermovies": "סרטים",
"components.Discover.DiscoverMovies.sortTitleAsc": "כותר (א-ת) עולה",
"components.Discover.CreateSlider.providetmdbgenreid": "הזן מזהה ז'אנר TMDB",
"components.Discover.DiscoverSliderEdit.remove": "הסר"
} }

View File

@@ -11,10 +11,10 @@
"components.Discover.DiscoverTvGenre.genreSeries": "{genre} serije", "components.Discover.DiscoverTvGenre.genreSeries": "{genre} serije",
"components.Discover.DiscoverTvLanguage.languageSeries": "{language} serije", "components.Discover.DiscoverTvLanguage.languageSeries": "{language} serije",
"components.Discover.DiscoverWatchlist.discoverwatchlist": "Tvoj Plex popis gledanja", "components.Discover.DiscoverWatchlist.discoverwatchlist": "Tvoj Plex popis gledanja",
"components.Discover.MovieGenreList.moviegenres": "Filmski žanrovi", "components.Discover.MovieGenreList.moviegenres": "Žanrovi filmova",
"components.Discover.StudioSlider.studios": "Studio", "components.Discover.StudioSlider.studios": "Studiji",
"components.Discover.TvGenreList.seriesgenres": "Serijski žanrovi", "components.Discover.TvGenreList.seriesgenres": "Žanrovi serija",
"components.Discover.TvGenreSlider.tvgenres": "Serijski žanrovi", "components.Discover.TvGenreSlider.tvgenres": "Žanrovi serija",
"components.Discover.plexwatchlist": "Tvoj Plex popis gledanja", "components.Discover.plexwatchlist": "Tvoj Plex popis gledanja",
"components.Discover.popularmovies": "Popularni filmovi", "components.Discover.popularmovies": "Popularni filmovi",
"components.Discover.recentlyAdded": "Nedavno dodani", "components.Discover.recentlyAdded": "Nedavno dodani",
@@ -33,9 +33,9 @@
"components.AirDateBadge.airedrelative": "Emitirano {relativeTime}", "components.AirDateBadge.airedrelative": "Emitirano {relativeTime}",
"components.AirDateBadge.airsrelative": "Emitiranje {relativeTime}", "components.AirDateBadge.airsrelative": "Emitiranje {relativeTime}",
"components.AppDataWarning.dockerVolumeMissingDescription": "Navedeni <code>{appDataPath}</code> mapirani volumen nije ispravno podešen. Svi podaci će biti izbrisani kada se spremnik (container) zaustavi ili ponovno pokrene.", "components.AppDataWarning.dockerVolumeMissingDescription": "Navedeni <code>{appDataPath}</code> mapirani volumen nije ispravno podešen. Svi podaci će biti izbrisani kada se spremnik (container) zaustavi ili ponovno pokrene.",
"components.Discover.DiscoverWatchlist.watchlist": "Plex popis za gledanje", "components.Discover.DiscoverWatchlist.watchlist": "Plex popis gledanja",
"components.Discover.emptywatchlist": "Filmovi dodani na Vaš <PlexWatchlistSupportLink> popis za gledanje </PlexWatchlistSupportLink> pojaviti će se ovdje.", "components.Discover.emptywatchlist": "Mediji koji su dodani u tvoj <PlexWatchlistSupportLink>Plex popis gledanja</PlexWatchlistSupportLink> pojavit će se ovdje.",
"components.Discover.MovieGenreSlider.moviegenres": "Filmski žanrovi", "components.Discover.MovieGenreSlider.moviegenres": "Žanrovi filmova",
"components.Discover.NetworkSlider.networks": "Mreže", "components.Discover.NetworkSlider.networks": "Mreže",
"components.Discover.populartv": "Popularne serije", "components.Discover.populartv": "Popularne serije",
"components.Discover.upcomingtv": "Nadolazeće serije", "components.Discover.upcomingtv": "Nadolazeće serije",
@@ -67,7 +67,7 @@
"components.IssueModal.issueAudio": "Zvuk", "components.IssueModal.issueAudio": "Zvuk",
"components.IssueModal.issueSubtitles": "Podnaslov", "components.IssueModal.issueSubtitles": "Podnaslov",
"components.IssueModal.issueVideo": "Video", "components.IssueModal.issueVideo": "Video",
"components.IssueList.IssueItem.seasons": "{seasonCount, plural, one {sezona} few {sezone} other {sezona}}", "components.IssueList.IssueItem.seasons": "{seasonCount, plural, one {sezona} few {sezone} other {sezone}}",
"components.Layout.UserDropdown.myprofile": "Profil", "components.Layout.UserDropdown.myprofile": "Profil",
"components.Layout.UserDropdown.requests": "Zahtjevi", "components.Layout.UserDropdown.requests": "Zahtjevi",
"components.Layout.VersionStatus.streamstable": "Overseerr stablina verzija", "components.Layout.VersionStatus.streamstable": "Overseerr stablina verzija",
@@ -78,7 +78,7 @@
"components.ManageSlideOver.movie": "film", "components.ManageSlideOver.movie": "film",
"components.Login.validationemailrequired": "Moraš zadati valjanju email adresu", "components.Login.validationemailrequired": "Moraš zadati valjanju email adresu",
"components.ManageSlideOver.manageModalRequests": "Zahtjevi", "components.ManageSlideOver.manageModalRequests": "Zahtjevi",
"components.ManageSlideOver.manageModalClearMediaWarning": "* Ovo će nepovratno ukloniti sve podatke za ovaj {mediaType}, uključujući sve zahtjeve. Ako ova stavka postoji u vašoj Plex biblioteci, informacije o medijima ponovno će se stvoriti tijekom sljedećeg skeniranja.", "components.ManageSlideOver.manageModalClearMediaWarning": "* Ovo će nepovratno ukloniti sve podatke za {mediaType}, uključujući sve zahtjeve. Ako ova stavka postoji u tvojoj Plex biblioteci, informacije o medijima će se ponovo stvoriti tijekom sljedećeg pretraživanja.",
"components.ManageSlideOver.manageModalMedia4k": "4K mediji", "components.ManageSlideOver.manageModalMedia4k": "4K mediji",
"components.ManageSlideOver.manageModalNoRequests": "Nema zahtjeva.", "components.ManageSlideOver.manageModalNoRequests": "Nema zahtjeva.",
"components.ManageSlideOver.manageModalMedia": "Mediji", "components.ManageSlideOver.manageModalMedia": "Mediji",
@@ -93,13 +93,13 @@
"components.MediaSlider.ShowMoreCard.seemore": "Vidi više", "components.MediaSlider.ShowMoreCard.seemore": "Vidi više",
"components.MovieDetails.markavailable": "Označi kao dostupno", "components.MovieDetails.markavailable": "Označi kao dostupno",
"components.ManageSlideOver.tvshow": "serije", "components.ManageSlideOver.tvshow": "serije",
"components.MovieDetails.productioncountries": "{countryCount, plural, one {zemlja produkcije} few {zemlje produkcije} other {zemalja produkcije}}", "components.MovieDetails.productioncountries": "{countryCount, plural, one {Zemlja produkcije} few {Zemlje produkcije} other {Zemlje produkcije}}",
"components.MovieDetails.managemovie": "Upravljaj filmom", "components.MovieDetails.managemovie": "Upravljaj filmom",
"components.MovieDetails.playonplex": "Reproduciraj na Plexu", "components.MovieDetails.playonplex": "Reproduciraj na Plexu",
"components.MovieDetails.overviewunavailable": "Pregled nedostupan.", "components.MovieDetails.overviewunavailable": "Pregled nedostupan.",
"components.MovieDetails.reportissue": "Prijavi problem", "components.MovieDetails.reportissue": "Prijavi problem",
"components.MovieDetails.revenue": "Prihod", "components.MovieDetails.revenue": "Prihod",
"components.MovieDetails.rtaudiencescore": "Ocjena publike na Rotten Tomatoes", "components.MovieDetails.rtaudiencescore": "Ocjena Rotten Tomatoes publike",
"components.MovieDetails.showless": "Prikaži manje", "components.MovieDetails.showless": "Prikaži manje",
"components.MovieDetails.showmore": "Prikaži više", "components.MovieDetails.showmore": "Prikaži više",
"components.MovieDetails.similar": "Slični naslovi", "components.MovieDetails.similar": "Slični naslovi",
@@ -128,7 +128,7 @@
"components.IssueList.IssueItem.opened": "Otvoren", "components.IssueList.IssueItem.opened": "Otvoren",
"components.IssueList.IssueItem.problemepisode": "Zahvaćena epizoda", "components.IssueList.IssueItem.problemepisode": "Zahvaćena epizoda",
"components.IssueList.IssueItem.unknownissuetype": "Nepoznato", "components.IssueList.IssueItem.unknownissuetype": "Nepoznato",
"components.IssueList.IssueItem.episodes": "{episodeCount, plural, one {Epizoda} other {Epizode}}", "components.IssueList.IssueItem.episodes": "{episodeCount, plural, one {epizoda} few {epizode} other {epizode}}",
"components.IssueList.IssueItem.viewissue": "Prikaz problema", "components.IssueList.IssueItem.viewissue": "Prikaz problema",
"components.IssueList.showallissues": "Prikaži sve probleme", "components.IssueList.showallissues": "Prikaži sve probleme",
"components.IssueList.sortAdded": "Najnoviji", "components.IssueList.sortAdded": "Najnoviji",
@@ -142,7 +142,7 @@
"components.IssueModal.CreateIssueModal.season": "Sezona {seasonNumber}", "components.IssueModal.CreateIssueModal.season": "Sezona {seasonNumber}",
"components.IssueModal.CreateIssueModal.submitissue": "Pošalji problem", "components.IssueModal.CreateIssueModal.submitissue": "Pošalji problem",
"components.IssueModal.CreateIssueModal.toastFailedCreate": "Dogodila se greška prilikom slanja problema.", "components.IssueModal.CreateIssueModal.toastFailedCreate": "Dogodila se greška prilikom slanja problema.",
"components.IssueModal.CreateIssueModal.toastSuccessCreate": "Problem prijavljen za <strong>{title}</strong> je uspješno predan!", "components.IssueModal.CreateIssueModal.toastSuccessCreate": "Izvještaj o problemu za <strong>{title}</strong> je uspješno poslan!",
"components.IssueModal.CreateIssueModal.toastviewissue": "Prikaz problema", "components.IssueModal.CreateIssueModal.toastviewissue": "Prikaz problema",
"components.IssueModal.CreateIssueModal.validationMessageRequired": "Moraš navesti opis", "components.IssueModal.CreateIssueModal.validationMessageRequired": "Moraš navesti opis",
"components.IssueModal.CreateIssueModal.whatswrong": "Što nije u redu?", "components.IssueModal.CreateIssueModal.whatswrong": "Što nije u redu?",
@@ -166,7 +166,7 @@
"components.Login.loginerror": "Dogodila se greška prilikom pokušaja prijave.", "components.Login.loginerror": "Dogodila se greška prilikom pokušaja prijave.",
"components.Login.signin": "Prijavi se", "components.Login.signin": "Prijavi se",
"components.Login.signingin": "Prijava…", "components.Login.signingin": "Prijava…",
"components.Layout.VersionStatus.commitsbehind": "Verzija ne sadrži {commitsBehind} {commitsBehind, plural, one {promjenu} few {promjene} other {promjena}}", "components.Layout.VersionStatus.commitsbehind": "{commitsBehind} {commitsBehind, plural, one {commit} few {commita} other {commitova}} iza",
"components.Login.signinheader": "Prijavi se za nastavak", "components.Login.signinheader": "Prijavi se za nastavak",
"components.Login.signinwithoverseerr": "Koristi tvoj {applicationTitle} račun", "components.Login.signinwithoverseerr": "Koristi tvoj {applicationTitle} račun",
"components.Login.validationpasswordrequired": "Moraš navesti lozinku", "components.Login.validationpasswordrequired": "Moraš navesti lozinku",
@@ -186,36 +186,36 @@
"components.MovieDetails.originallanguage": "Izvorni jezik", "components.MovieDetails.originallanguage": "Izvorni jezik",
"components.MovieDetails.MovieCrew.fullcrew": "Svi suradnici", "components.MovieDetails.MovieCrew.fullcrew": "Svi suradnici",
"components.MovieDetails.physicalrelease": "Fizičko izdanje", "components.MovieDetails.physicalrelease": "Fizičko izdanje",
"components.MovieDetails.play4konplex": "Reproduciraj u 4K na Plexu", "components.MovieDetails.play4konplex": "Reproduciraj u 4K rezoluciji na Plexu",
"components.MovieDetails.recommendations": "Preporuke", "components.MovieDetails.recommendations": "Preporuke",
"components.MovieDetails.releasedate": "{releaseCount, plural, one {Datum izlaska} other {Datumi izlaska}}", "components.MovieDetails.releasedate": "{releaseCount, plural, one {Datum izdanja} few {Datumi izdanja} other {Datumi izdanja}}",
"components.MovieDetails.rtcriticsscore": "Tomatometer na Rotten Tomatoes", "components.MovieDetails.rtcriticsscore": "Rotten Tomatoes Tomatometar",
"components.MovieDetails.runtime": "{minutes} min", "components.MovieDetails.runtime": "{minutes} min",
"components.MovieDetails.studio": "{studioCount, plural, one {studio} few {studija} other {studija}}", "components.MovieDetails.studio": "{studioCount, plural, one {studio} few {studija} other {studija}}",
"components.MovieDetails.theatricalrelease": "Izdanje u kinima", "components.MovieDetails.theatricalrelease": "Izdanje u kinima",
"components.MovieDetails.tmdbuserscore": "TMDB ocjena korisnika", "components.MovieDetails.tmdbuserscore": "TMDB ocjena korisnika",
"components.MovieDetails.viewfullcrew": "Prikaz svih suradnika", "components.MovieDetails.viewfullcrew": "Prikaz svih suradnika",
"components.MovieDetails.watchtrailer": "Gledaj najavu", "components.MovieDetails.watchtrailer": "Gledaj najavu",
"components.NotificationTypeSelector.adminissuecommentDescription": "Primi obavijest kad drugi korisnici komentiraju probleme.", "components.NotificationTypeSelector.adminissuecommentDescription": "Primi obavijest kada drugi korisnici komentiraju probleme.",
"components.NotificationTypeSelector.adminissuereopenedDescription": "Primi obavijest kad drugi korisnici ponovno otvore probleme.", "components.NotificationTypeSelector.adminissuereopenedDescription": "Primi obavijest kada drugi korisnici ponovo otvore probleme.",
"components.NotificationTypeSelector.adminissueresolvedDescription": "Primi obavijest kad drugi korisnici riješe probleme.", "components.NotificationTypeSelector.adminissueresolvedDescription": "Primi obavijest kada drugi korisnici riješe probleme.",
"components.NotificationTypeSelector.issuecomment": "Komentar za problem", "components.NotificationTypeSelector.issuecomment": "Komentar za problem",
"components.NotificationTypeSelector.issuecreated": "Problem prijavljen", "components.NotificationTypeSelector.issuecreated": "Problem prijavljen",
"components.NotificationTypeSelector.issuecreatedDescription": "Pošalji obavijest kada se problem prijavi.", "components.NotificationTypeSelector.issuecreatedDescription": "Pošalji obavijest kada se problem prijavi.",
"components.NotificationTypeSelector.userissueresolvedDescription": "Primi obavijest kad se tvoji prijavljeni problemi riješe.", "components.NotificationTypeSelector.userissueresolvedDescription": "Primi obavijest kad se tvoji prijavljeni problemi riješe.",
"components.NotificationTypeSelector.mediaavailableDescription": "Pošalji obavijesti kada medijski zahtjevi postanu dostupni.", "components.NotificationTypeSelector.mediaavailableDescription": "Pošalji obavijesti kada zahtjevi za medije postanu dostupni.",
"components.NotificationTypeSelector.mediadeclinedDescription": "Pošalji obavijesti kada su medijski zahtjevi odbijeni.", "components.NotificationTypeSelector.mediadeclinedDescription": "Pošalji obavijesti kada se zahtjevi za medije odbiju.",
"components.NotificationTypeSelector.mediarequested": "Zahtjev čeka odobrenje", "components.NotificationTypeSelector.mediarequested": "Zahtjev čeka odobrenje",
"components.NotificationTypeSelector.mediarequestedDescription": "Pošalji obavijesti kada korisnici pošalju nove medijske zahtjeve koji zahtijevaju odobrenje.", "components.NotificationTypeSelector.mediarequestedDescription": "Pošalji obavijesti kada korisnici pošalju nove zahtjeve za medije koji zahtijevaju odobrenje.",
"components.NotificationTypeSelector.mediaautorequested": "Zahtjev je automatski poslan", "components.NotificationTypeSelector.mediaautorequested": "Zahtjev je automatski poslan",
"components.NotificationTypeSelector.mediaavailable": "Zahtjev dostupan", "components.NotificationTypeSelector.mediaavailable": "Zahtjev je dostupan",
"components.NotificationTypeSelector.mediafailedDescription": "Pošalji obavijesti kada se medijski zahtjevi ne uspiju dodati u Radarr ili Sonarr.", "components.NotificationTypeSelector.mediafailedDescription": "Pošalji obavijesti kada se zahtjevi za medije ne uspiju dodati u Radarr ili Sonarr.",
"components.NotificationTypeSelector.userissuecommentDescription": "Primi obavijest kad tvoji prijavljeni problemi dobiju nove komentare.", "components.NotificationTypeSelector.userissuecommentDescription": "Primi obavijest kada tvoji prijavljeni problemi dobiju nove komentare.",
"components.PermissionEdit.autoapprove4kSeries": "Automatsko odobravanje 4K serija", "components.PermissionEdit.autoapprove4kSeries": "Automatsko odobravanje 4K serija",
"components.NotificationTypeSelector.usermediafailedDescription": "Primi obavijest kad se medijski zahtjevi ne uspiju dodati u Radarr ili Sonarr.", "components.NotificationTypeSelector.usermediafailedDescription": "Primi obavijest kada se zahtjevi za medije ne uspiju dodati u Radarr ili Sonarr.",
"components.NotificationTypeSelector.usermediarequestedDescription": "Primi obavijest kad drugi korisnici pošalju nove medijske zahtjeve koji zahtijevaju odobrenje.", "components.NotificationTypeSelector.usermediarequestedDescription": "Primi obavijest kada drugi korisnici pošalju nove zahtjeve za medije koji zahtijevaju odobrenje.",
"components.NotificationTypeSelector.usermediaAutoApprovedDescription": "Primi obavijest kad drugi korisnici pošalju nove medijske zahtjeve koji se automatski odobravaju.", "components.NotificationTypeSelector.usermediaAutoApprovedDescription": "Primi obavijest kad drugi korisnici pošalju nove zahtjeve za medije koji se automatski odobravaju.",
"components.NotificationTypeSelector.usermediadeclinedDescription": "Primi obavijest kad se tvoji medijski zahtjevi odbiju.", "components.NotificationTypeSelector.usermediadeclinedDescription": "Primi obavijest kada se tvoji zahtjevi za medije odbiju.",
"components.PermissionEdit.adminDescription": "Potpun administratorski pristup. Zaobilazi sve druge provjere dozvola.", "components.PermissionEdit.adminDescription": "Potpun administratorski pristup. Zaobilazi sve druge provjere dozvola.",
"components.PermissionEdit.advancedrequest": "Napredni zahtjevi", "components.PermissionEdit.advancedrequest": "Napredni zahtjevi",
"components.PermissionEdit.autoapprove4k": "Automatsko odobravanje 4K", "components.PermissionEdit.autoapprove4k": "Automatsko odobravanje 4K",
@@ -233,24 +233,24 @@
"components.RequestList.RequestItem.seasons": "{seasonCount, plural, one {sezona} few {sezone} other {sezona}}", "components.RequestList.RequestItem.seasons": "{seasonCount, plural, one {sezona} few {sezone} other {sezona}}",
"components.RequestBlock.seasons": "{seasonCount, plural, one {sezona} few {sezone} other {sezona}}", "components.RequestBlock.seasons": "{seasonCount, plural, one {sezona} few {sezone} other {sezona}}",
"components.RequestButton.decline4krequests": "Odbij {requestCount, plural, one {4K zahtjev} few {{requestCount} 4K zahtjeva} other {{requestCount} 4K zahtjeva}}", "components.RequestButton.decline4krequests": "Odbij {requestCount, plural, one {4K zahtjev} few {{requestCount} 4K zahtjeva} other {{requestCount} 4K zahtjeva}}",
"components.RequestModal.QuotaDisplay.requiredquotaUser": "Ovaj korisnik treba imati još barem <strong>{seasons}</strong> {seasons, plural, one {jedan zahtjev za sezonu} other {nekoliko zahtjeva za sezone}} kako bi mogao preadti zahtjev za ovu seriju.", "components.RequestModal.QuotaDisplay.requiredquotaUser": "Za slanje zahtjeva za ovu seriju, ovaj korisnik mora imati barem <strong>{seasons}</strong> {seasons, plural, one {preostali zahtjev za sezonu} few {preostala zahtjeva za sezone} other {preostalih zahtjeva za sezone}}.",
"components.RequestModal.QuotaDisplay.requiredquota": "Moraš imati još barem <strong>{seasons}</strong> {seasons, plural, one {zahtjev za sezonu} few {zahtjeva za sezone} other {zahtjeva za sezone}} za slanje zahtjeva za ovu seriju.", "components.RequestModal.QuotaDisplay.requiredquota": "Za slanje zahtjeva za ovu seriju moraš imati barem <strong>{seasons}</strong> {seasons, plural, one {preostali zahtjev za sezonu} few {preostala zahtjeva za sezone} other {preostalih zahtjeva za sezone}}.",
"components.RequestModal.QuotaDisplay.seasonlimit": "{limit, plural, one {sezona} few {sezone} other {sezona}}", "components.RequestModal.QuotaDisplay.seasonlimit": "{limit, plural, one {sezona} few {sezone} other {sezona}}",
"components.RequestModal.requestmovies": "Zatraži {count} {count, plural, one {film} few {filma} other {filmova}}", "components.RequestModal.requestmovies": "Zatraži {count} {count, plural, one {film} few {filma} other {filmova}}",
"components.RequestModal.requestmovies4k": "Zatraži {count} {count, plural, one {film} few {filma} other {filmova}} u 4K", "components.RequestModal.requestmovies4k": "Zatraži {count} {count, plural, one {film} few {filma} other {filmova}} u 4K",
"components.NotificationTypeSelector.mediaAutoApprovedDescription": "Pošalji obavijesti kada korisnici pošalju novi medijski zahtjev koji se automatski odobrava.", "components.NotificationTypeSelector.mediaAutoApprovedDescription": "Pošalji obavijesti kada korisnici pošalju nove zahtjeve za medije koji se automatski odobravaju.",
"components.NotificationTypeSelector.mediaapproved": "Zahtjev odobren", "components.NotificationTypeSelector.mediaapproved": "Zahtjev je odobren",
"components.NotificationTypeSelector.mediaapprovedDescription": "Pošalji obavijesti kada se medijski zahtjev ručno odobri.", "components.NotificationTypeSelector.mediaapprovedDescription": "Pošalji obavijesti kada se zahtjevi za medije ručno odobre.",
"components.NotificationTypeSelector.mediaautorequestedDescription": "Primi obavijest kad se novi medijski zahtjevi automatski podnesu za stavke u tvom Plex popisu gledanja.", "components.NotificationTypeSelector.mediaautorequestedDescription": "Primi obavijest kada se novi zahtjevi za medije automatski pošalju za stavke u tvom Plex popisu gledanja.",
"components.NotificationTypeSelector.mediadeclined": "Zahtjev je odbijen", "components.NotificationTypeSelector.mediadeclined": "Zahtjev je odbijen",
"components.NotificationTypeSelector.mediafailed": "Obrada zahtjeva nije uspjela", "components.NotificationTypeSelector.mediafailed": "Obrada zahtjeva nije uspjela",
"components.NotificationTypeSelector.notificationTypes": "Vrste obavijesti", "components.NotificationTypeSelector.notificationTypes": "Vrste obavijesti",
"components.NotificationTypeSelector.userissuecreatedDescription": "Primi obavijest kad drugi korisnici prijave probleme.", "components.NotificationTypeSelector.userissuecreatedDescription": "Primi obavijest kada drugi korisnici prijave probleme.",
"components.NotificationTypeSelector.userissuereopenedDescription": "Primi obavijest kad se tvoji prijavljeni problemi ponovno otvore.", "components.NotificationTypeSelector.userissuereopenedDescription": "Primi obavijest kada se tvoji prijavljeni problemi ponovno otvore.",
"components.NotificationTypeSelector.usermediaapprovedDescription": "Primi obavijest kad se tvoji zahtjevi za medije odobre.", "components.NotificationTypeSelector.usermediaapprovedDescription": "Primi obavijest kada se tvoji zahtjevi za medije odobre.",
"components.NotificationTypeSelector.usermediaavailableDescription": "Primi obavijest kad tvoji medijski zahtjevi postanu dostupni.", "components.NotificationTypeSelector.usermediaavailableDescription": "Primi obavijest kada tvoji medijski zahtjevi postanu dostupni.",
"components.PermissionEdit.admin": "Administrator", "components.PermissionEdit.admin": "Administrator",
"components.PermissionEdit.advancedrequestDescription": "Dozvoli mijenjanje naprednih opcija medijskih zahtjeva.", "components.PermissionEdit.advancedrequestDescription": "Dozvoli mijenjanje naprednih opcija zahtjeva za medije.",
"components.PermissionEdit.autoapprove": "Automatsko odobravanje", "components.PermissionEdit.autoapprove": "Automatsko odobravanje",
"components.PermissionEdit.autoapprove4kMovies": "Automatsko odobravanje 4K filmova", "components.PermissionEdit.autoapprove4kMovies": "Automatsko odobravanje 4K filmova",
"components.PermissionEdit.autoapprove4kDescription": "Dozvoli automatsko odobravanje svih zahtjeva za medije u 4K rezoluciji.", "components.PermissionEdit.autoapprove4kDescription": "Dozvoli automatsko odobravanje svih zahtjeva za medije u 4K rezoluciji.",
@@ -258,7 +258,7 @@
"components.PermissionEdit.autoapproveMovies": "Automatsko odobravanje filmova", "components.PermissionEdit.autoapproveMovies": "Automatsko odobravanje filmova",
"components.PermissionEdit.autoapproveSeries": "Automatsko odobravanje serija", "components.PermissionEdit.autoapproveSeries": "Automatsko odobravanje serija",
"components.RequestButton.declinerequests": "Odbij {requestCount, plural, one {zahtjev} few {{requestCount} zahtjeva} other {{requestCount} zahtjeva}}", "components.RequestButton.declinerequests": "Odbij {requestCount, plural, one {zahtjev} few {{requestCount} zahtjeva} other {{requestCount} zahtjeva}}",
"components.RequestModal.QuotaDisplay.requestsremaining": "{remaining, plural, =0 {No} other {<strong>#</strong>}} {type} {remaining, plural, one {zahtjev preostalo} other {zahtjeva preostala}}", "components.RequestModal.QuotaDisplay.requestsremaining": "{remaining, plural, =0 {0} other {<strong>#</strong>}} {type} {remaining, plural, one {zahtjev preostao} few {zahtjeva preostala} other {zahtjeva preostalo}}",
"components.Settings.SettingsJobsCache.editJobScheduleCurrent": "Aktualna učestalost", "components.Settings.SettingsJobsCache.editJobScheduleCurrent": "Aktualna učestalost",
"components.Settings.SettingsJobsCache.editJobSchedulePrompt": "Nova učestalost", "components.Settings.SettingsJobsCache.editJobSchedulePrompt": "Nova učestalost",
"components.Settings.SettingsJobsCache.editJobScheduleSelectorHours": "{jobScheduleHours, plural, one {Svaki sat} few {Svaka {jobScheduleHours} sata} other {Svakih {jobScheduleHours} sati}}", "components.Settings.SettingsJobsCache.editJobScheduleSelectorHours": "{jobScheduleHours, plural, one {Svaki sat} few {Svaka {jobScheduleHours} sata} other {Svakih {jobScheduleHours} sati}}",
@@ -364,7 +364,7 @@
"components.Settings.menuServices": "Usluge", "components.Settings.menuServices": "Usluge",
"components.Settings.menuUsers": "Korisnici", "components.Settings.menuUsers": "Korisnici",
"components.Settings.noDefault4kServer": "4K {serverType} poslužitelj mora biti označen kao zadani kako bi se korisnicima omogućilo slanje zahtjeva za 4K {mediaType}.", "components.Settings.noDefault4kServer": "4K {serverType} poslužitelj mora biti označen kao zadani kako bi se korisnicima omogućilo slanje zahtjeva za 4K {mediaType}.",
"components.Settings.noDefaultServer": "Najmanje jedan {serverType} poslužitelj mora biti označen kao zadani kako bi se zahtjevi za {mediaType} mogli obraditi.", "components.Settings.noDefaultServer": "Barem jedan {serverType} poslužitelj mora biti označen kao zadani kako bi se zahtjevi za {mediaType} mogli obraditi.",
"components.Settings.notificationAgentSettingsDescription": "Konfiguriraj i aktiviraj agente obavijesti.", "components.Settings.notificationAgentSettingsDescription": "Konfiguriraj i aktiviraj agente obavijesti.",
"components.Settings.notifications": "Obavijesti", "components.Settings.notifications": "Obavijesti",
"components.Settings.notificationsettings": "Postavke obavijesti", "components.Settings.notificationsettings": "Postavke obavijesti",
@@ -385,7 +385,7 @@
"components.Settings.serverpresetLoad": "Pritisni gumb za učitavanje dostupnih polsužitelja", "components.Settings.serverpresetLoad": "Pritisni gumb za učitavanje dostupnih polsužitelja",
"components.Settings.serverpresetManualMessage": "Ručna konfiguracija", "components.Settings.serverpresetManualMessage": "Ručna konfiguracija",
"components.Settings.services": "Usluge", "components.Settings.services": "Usluge",
"components.Settings.settingUpPlexDescription": "Za postavljanje Plexa, unesi detalje ručno ili odaberi poslužitelj preuzet s <RegisterPlexTVLink>plex.tv</RegisterPlexTVLink>. Pritisni gumb desno od padajućeg izbornika za dohvaćanje popisa dostupnih poslužitelja.", "components.Settings.settingUpPlexDescription": "Za postavljanje Plexa unesi detalje ručno ili odaberi poslužitelj dohvaćen s <RegisterPlexTVLink>plex.tv</RegisterPlexTVLink>. Pritisni gumb desno od padajućeg izbornika za dohvaćanje popisa dostupnih poslužitelja.",
"components.Settings.sonarrsettings": "Sonarr postavke", "components.Settings.sonarrsettings": "Sonarr postavke",
"components.Settings.ssl": "SSL", "components.Settings.ssl": "SSL",
"components.Settings.tautulliApiKey": "API ključ", "components.Settings.tautulliApiKey": "API ključ",
@@ -399,7 +399,7 @@
"components.Settings.urlBase": "Osnovni URL", "components.Settings.urlBase": "Osnovni URL",
"components.Settings.validationApiKey": "Moraš navesti valjani API ključ", "components.Settings.validationApiKey": "Moraš navesti valjani API ključ",
"components.Settings.webpush": "Web Push", "components.Settings.webpush": "Web Push",
"components.Setup.continue": "Nastavi", "components.Setup.continue": "Nastaviti",
"components.Setup.finish": "Završi postavljanje", "components.Setup.finish": "Završi postavljanje",
"components.Setup.tip": "Savjet", "components.Setup.tip": "Savjet",
"components.Setup.welcome": "Overseerr dobrodošlica", "components.Setup.welcome": "Overseerr dobrodošlica",
@@ -451,8 +451,8 @@
"components.UserProfile.UserSettings.UserGeneralSettings.general": "Opće", "components.UserProfile.UserSettings.UserGeneralSettings.general": "Opće",
"components.UserProfile.UserSettings.UserGeneralSettings.generalsettings": "Opće postavke", "components.UserProfile.UserSettings.UserGeneralSettings.generalsettings": "Opće postavke",
"components.UserProfile.UserSettings.UserGeneralSettings.languageDefault": "Zadano ({language})", "components.UserProfile.UserSettings.UserGeneralSettings.languageDefault": "Zadano ({language})",
"components.UserProfile.UserSettings.UserGeneralSettings.originallanguageTip": "Filtriraj sadržaj prema izvornom jeziku", "components.UserProfile.UserSettings.UserGeneralSettings.originallanguageTip": "Filtriraj sadržaj po izvornom jeziku",
"components.UserProfile.UserSettings.UserGeneralSettings.originallanguage": "Otkrij jezik", "components.UserProfile.UserSettings.UserGeneralSettings.originallanguage": "Jezik otkrivanja",
"components.UserProfile.UserSettings.UserGeneralSettings.plexuser": "Plex korisnik", "components.UserProfile.UserSettings.UserGeneralSettings.plexuser": "Plex korisnik",
"components.UserProfile.UserSettings.UserGeneralSettings.plexwatchlistsyncmovies": "Automatsko zahtijevanje filmova", "components.UserProfile.UserSettings.UserGeneralSettings.plexwatchlistsyncmovies": "Automatsko zahtijevanje filmova",
"components.UserProfile.UserSettings.UserGeneralSettings.plexwatchlistsyncmoviestip": "Automatski zatraži filmove na tvom <PlexWatchlistSupportLink>Plex popisu gledanja</PlexWatchlistSupportLink>", "components.UserProfile.UserSettings.UserGeneralSettings.plexwatchlistsyncmoviestip": "Automatski zatraži filmove na tvom <PlexWatchlistSupportLink>Plex popisu gledanja</PlexWatchlistSupportLink>",
@@ -482,7 +482,7 @@
"components.UserProfile.UserSettings.UserPasswordChange.nopermissionDescription": "Nemaš dozvole za mijenjenje lozinke ovog korisnika.", "components.UserProfile.UserSettings.UserPasswordChange.nopermissionDescription": "Nemaš dozvole za mijenjenje lozinke ovog korisnika.",
"components.UserProfile.UserSettings.UserPasswordChange.password": "Lozinka", "components.UserProfile.UserSettings.UserPasswordChange.password": "Lozinka",
"components.UserProfile.UserSettings.UserPasswordChange.toastSettingsFailure": "Dogodila se greška prilikom spremanja lozinke.", "components.UserProfile.UserSettings.UserPasswordChange.toastSettingsFailure": "Dogodila se greška prilikom spremanja lozinke.",
"components.UserProfile.UserSettings.UserPasswordChange.toastSettingsFailureVerifyCurrent": "Dogodila se greška prilikom spremanja lozinke. Je li vaša aktualna lozinka bila ispravno upisana?", "components.UserProfile.UserSettings.UserPasswordChange.toastSettingsFailureVerifyCurrent": "Dogodila se greška prilikom spremanja lozinke. Je li tvoja aktualna lozinka ispravno upisana?",
"components.UserProfile.UserSettings.UserPasswordChange.toastSettingsSuccess": "Lozinka je uspješno spremljena!", "components.UserProfile.UserSettings.UserPasswordChange.toastSettingsSuccess": "Lozinka je uspješno spremljena!",
"components.UserProfile.UserSettings.UserPasswordChange.validationCurrentPassword": "Moraš navesti tvoju aktualnu lozinku", "components.UserProfile.UserSettings.UserPasswordChange.validationCurrentPassword": "Moraš navesti tvoju aktualnu lozinku",
"components.UserProfile.UserSettings.UserPasswordChange.validationNewPassword": "Moraš navesti novu lozinku", "components.UserProfile.UserSettings.UserPasswordChange.validationNewPassword": "Moraš navesti novu lozinku",
@@ -494,10 +494,10 @@
"components.UserProfile.UserSettings.menuNotifications": "Obavijesti", "components.UserProfile.UserSettings.menuNotifications": "Obavijesti",
"components.UserProfile.UserSettings.menuPermissions": "Dozvole", "components.UserProfile.UserSettings.menuPermissions": "Dozvole",
"components.UserProfile.UserSettings.unauthorizedDescription": "Nemaš dozvole za mijenjenje postavki ovog korisnika.", "components.UserProfile.UserSettings.unauthorizedDescription": "Nemaš dozvole za mijenjenje postavki ovog korisnika.",
"components.UserProfile.emptywatchlist": "Mediji koji su dodani u tvoj <PlexWatchlistSupportLink>popis gledanja na Plexu</PlexWatchlistSupportLink> pojavit će se ovdje.", "components.UserProfile.emptywatchlist": "Mediji koji su dodani u tvoj <PlexWatchlistSupportLink>Plex popis gledanja</PlexWatchlistSupportLink> pojavit će se ovdje.",
"components.UserProfile.movierequests": "Zahtjevi za filmove", "components.UserProfile.movierequests": "Zahtjevi za filmove",
"components.UserProfile.pastdays": "{type} (zadnjih {days} dana)", "components.UserProfile.pastdays": "{type} (zadnjih {days} dana)",
"components.UserProfile.plexwatchlist": "Popis gledanja na Plexu", "components.UserProfile.plexwatchlist": "Plex popis gledanja",
"components.UserProfile.seriesrequest": "Zahtjevi za serije", "components.UserProfile.seriesrequest": "Zahtjevi za serije",
"components.UserProfile.totalrequests": "Ukupno zahtjeva", "components.UserProfile.totalrequests": "Ukupno zahtjeva",
"components.UserProfile.unlimited": "Neograničeno", "components.UserProfile.unlimited": "Neograničeno",
@@ -538,7 +538,7 @@
"components.PermissionEdit.viewissues": "Prikaz problema", "components.PermissionEdit.viewissues": "Prikaz problema",
"components.PermissionEdit.viewrecent": "Prikaz nedavno dodanih", "components.PermissionEdit.viewrecent": "Prikaz nedavno dodanih",
"components.PermissionEdit.viewrequests": "Prikaz zahtjeva", "components.PermissionEdit.viewrequests": "Prikaz zahtjeva",
"components.PermissionEdit.viewwatchlists": "Prikaz Plex popisa gledanja", "components.PermissionEdit.viewwatchlists": "Prikaži Plex popise gledanja",
"components.PersonDetails.alsoknownas": "Poznat/a i kao: {names}", "components.PersonDetails.alsoknownas": "Poznat/a i kao: {names}",
"components.PersonDetails.appearsin": "Nastupanja", "components.PersonDetails.appearsin": "Nastupanja",
"components.PersonDetails.ascharacter": "kao {character}", "components.PersonDetails.ascharacter": "kao {character}",
@@ -560,7 +560,7 @@
"components.RequestButton.viewrequest": "Prikaz zahtjeva", "components.RequestButton.viewrequest": "Prikaz zahtjeva",
"components.RequestButton.viewrequest4k": "Prikaz 4K zahtjeva", "components.RequestButton.viewrequest4k": "Prikaz 4K zahtjeva",
"components.RequestCard.approverequest": "Odobri zahtjev", "components.RequestCard.approverequest": "Odobri zahtjev",
"components.RequestCard.cancelrequest": "Prekini zahtjev", "components.RequestCard.cancelrequest": "Otkaži zahtjev",
"components.RequestCard.declinerequest": "Odbij zahtjev", "components.RequestCard.declinerequest": "Odbij zahtjev",
"components.RequestCard.deleterequest": "Izbriši zahtjev", "components.RequestCard.deleterequest": "Izbriši zahtjev",
"components.RequestCard.editrequest": "Uredi zahtjev", "components.RequestCard.editrequest": "Uredi zahtjev",
@@ -578,19 +578,19 @@
"components.RequestModal.errorediting": "Dogodila se greška prilikom uređivanja zahtjeva.", "components.RequestModal.errorediting": "Dogodila se greška prilikom uređivanja zahtjeva.",
"components.RequestModal.extras": "Dodaci", "components.RequestModal.extras": "Dodaci",
"components.RequestModal.numberofepisodes": "Broj epizoda", "components.RequestModal.numberofepisodes": "Broj epizoda",
"components.RequestModal.pending4krequest": "4K zahtjeva na čekanju", "components.RequestModal.pending4krequest": "4K zahtjevi na čekanju",
"components.RequestModal.pendingapproval": "Tvoj zahtjev čeka na odobrenje.", "components.RequestModal.pendingapproval": "Tvoj zahtjev čeka na odobrenje.",
"components.RequestCard.tvdbid": "TVDB ID", "components.RequestCard.tvdbid": "TVDB ID",
"components.RequestModal.pendingrequest": "Zahtjevai na čekanju", "components.RequestModal.pendingrequest": "Zahtjevai na čekanju",
"components.RequestModal.requestApproved": "Zahtjev za <strong>{title}</strong> je odobren!", "components.RequestModal.requestApproved": "Zahtjev za <strong>{title}</strong> je odobren!",
"components.RequestModal.requestcancelled": "Zahtjev za <strong>{title}</strong> je prekinut.", "components.RequestModal.requestcancelled": "Zahtjev za <strong>{title}</strong> je prekinut.",
"components.RequestModal.requestcollection4ktitle": "Zahtjev za zbirkom u 4K", "components.RequestModal.requestcollection4ktitle": "Zatraži zbirku u 4K",
"components.RequestModal.requestcollectiontitle": "Zahtjev za zbirkom", "components.RequestModal.requestcollectiontitle": "Zatraži zbirku",
"components.RequestModal.requesterror": "Dogodila se greška prilikom slanja zahtjeva.", "components.RequestModal.requesterror": "Dogodila se greška prilikom slanja zahtjeva.",
"components.RequestModal.requestfrom": "Zahtjev korisnika {username} čeka na odobrenje.", "components.RequestModal.requestfrom": "Zahtjev korisnika {username} čeka na odobrenje.",
"components.RequestModal.requestmovie4ktitle": "Zatraži film u 4K", "components.RequestModal.requestmovie4ktitle": "Zatraži film u 4K",
"components.RequestModal.requestseries4ktitle": "Zatraži serije u 4K", "components.RequestModal.requestseries4ktitle": "Zatraži seriju u 4K",
"components.RequestModal.requestseriestitle": "Zatraži serije", "components.RequestModal.requestseriestitle": "Zatraži seriju",
"components.RequestModal.season": "Sezona", "components.RequestModal.season": "Sezona",
"components.RequestModal.seasonnumber": "Sezona {number}", "components.RequestModal.seasonnumber": "Sezona {number}",
"components.RequestModal.selectmovies": "Odaberi filmove", "components.RequestModal.selectmovies": "Odaberi filmove",
@@ -690,7 +690,7 @@
"components.Settings.RadarrModal.validationMinimumAvailabilityRequired": "Moraš odabrati najmanju dostupnost", "components.Settings.RadarrModal.validationMinimumAvailabilityRequired": "Moraš odabrati najmanju dostupnost",
"components.Settings.RadarrModal.validationPortRequired": "Moraš navesti valjani broj priključka", "components.Settings.RadarrModal.validationPortRequired": "Moraš navesti valjani broj priključka",
"components.Settings.RadarrModal.validationProfileRequired": "Moraš odabrati profil kvalitete", "components.Settings.RadarrModal.validationProfileRequired": "Moraš odabrati profil kvalitete",
"components.Settings.SettingsAbout.Releases.currentversion": "Aktualno", "components.Settings.SettingsAbout.Releases.currentversion": "Trenutno",
"components.Settings.SettingsAbout.Releases.latestversion": "Najnovije", "components.Settings.SettingsAbout.Releases.latestversion": "Najnovije",
"components.Settings.SettingsAbout.Releases.releasedataMissing": "Podaci izdanja trenutačno nisu nedostupni.", "components.Settings.SettingsAbout.Releases.releasedataMissing": "Podaci izdanja trenutačno nisu nedostupni.",
"components.Settings.SettingsAbout.Releases.versionChangelog": "{version} zapisnik promjena", "components.Settings.SettingsAbout.Releases.versionChangelog": "{version} zapisnik promjena",
@@ -718,7 +718,7 @@
"components.StatusChecker.restartRequiredDescription": "Ponovo pokreni poslužitelja kako bi se ažurirane postavke primijenile.", "components.StatusChecker.restartRequiredDescription": "Ponovo pokreni poslužitelja kako bi se ažurirane postavke primijenile.",
"components.TvDetails.episodeRuntime": "Trajanje epizode", "components.TvDetails.episodeRuntime": "Trajanje epizode",
"components.TvDetails.nextAirDate": "Datum sljedećeg emitiranja", "components.TvDetails.nextAirDate": "Datum sljedećeg emitiranja",
"components.TvDetails.rtaudiencescore": "Ocjena publike na Rotten Tomatoes", "components.TvDetails.rtaudiencescore": "Ocjena Rotten Tomatoes publike",
"components.TvDetails.seasonnumber": "Sezona {seasonNumber}", "components.TvDetails.seasonnumber": "Sezona {seasonNumber}",
"components.UserList.createlocaluser": "Stvori lokalnog korisnika", "components.UserList.createlocaluser": "Stvori lokalnog korisnika",
"components.UserList.deleteuser": "Izbriši korisnika", "components.UserList.deleteuser": "Izbriši korisnika",
@@ -736,11 +736,11 @@
"components.PermissionEdit.autorequestSeries": "Automatsko zahtijevanje serija", "components.PermissionEdit.autorequestSeries": "Automatsko zahtijevanje serija",
"components.PermissionEdit.createissues": "Prijavljivanje problema", "components.PermissionEdit.createissues": "Prijavljivanje problema",
"components.PermissionEdit.manageissues": "Upravljanje problemima", "components.PermissionEdit.manageissues": "Upravljanje problemima",
"components.PermissionEdit.managerequests": "Upravljanje zahtjevima", "components.PermissionEdit.managerequests": "Upravljaj zahtjevima",
"components.PermissionEdit.request": "Zahtjev", "components.PermissionEdit.request": "Zahtjev",
"components.PermissionEdit.request4k": "Zahtjev za 4K", "components.PermissionEdit.request4k": "Zahtjev za 4K rezoluciju",
"components.PermissionEdit.request4kMovies": "Zahtjev za 4K filmove", "components.PermissionEdit.request4kMovies": "Zahtjev za filmove u 4K rezoluciji",
"components.PermissionEdit.request4kTv": "Zahtjev za 4K serije", "components.PermissionEdit.request4kTv": "Zahtjev za serije u 4K rezoluciji",
"components.PermissionEdit.requestMovies": "Zahtjev za filmovima", "components.PermissionEdit.requestMovies": "Zahtjev za filmovima",
"components.PersonDetails.birthdate": "Datum rođenja {birthdate}", "components.PersonDetails.birthdate": "Datum rođenja {birthdate}",
"components.PersonDetails.crewmember": "Suradnik", "components.PersonDetails.crewmember": "Suradnik",
@@ -827,7 +827,7 @@
"components.Settings.Notifications.NotificationsWebhook.agentenabled": "Aktiviraj agenta", "components.Settings.Notifications.NotificationsWebhook.agentenabled": "Aktiviraj agenta",
"components.Settings.Notifications.NotificationsWebPush.webpushsettingssaved": "Web push postavke obavijesti su uspješno spremljene!", "components.Settings.Notifications.NotificationsWebPush.webpushsettingssaved": "Web push postavke obavijesti su uspješno spremljene!",
"components.Settings.Notifications.NotificationsWebhook.authheader": "Zaglavlje autorizacije", "components.Settings.Notifications.NotificationsWebhook.authheader": "Zaglavlje autorizacije",
"components.Settings.Notifications.NotificationsWebhook.resetPayload": "Vrati na zadane vrijednosti", "components.Settings.Notifications.NotificationsWebhook.resetPayload": "Resetiraj na zadane vrijednosti",
"components.Settings.Notifications.NotificationsWebhook.toastWebhookTestFailed": "Neuspjelo slanje Webhook obavijesti provjere.", "components.Settings.Notifications.NotificationsWebhook.toastWebhookTestFailed": "Neuspjelo slanje Webhook obavijesti provjere.",
"components.Settings.Notifications.NotificationsWebhook.webhooksettingsfailed": "Neuspjelo spremanje Webhook postavki obavijesti.", "components.Settings.Notifications.NotificationsWebhook.webhooksettingsfailed": "Neuspjelo spremanje Webhook postavki obavijesti.",
"components.Settings.Notifications.NotificationsWebhook.webhooksettingssaved": "Webhook postavke obavijesti su uspješno spremljene!", "components.Settings.Notifications.NotificationsWebhook.webhooksettingssaved": "Webhook postavke obavijesti su uspješno spremljene!",
@@ -938,7 +938,7 @@
"components.TitleCard.cleardata": "Izbriši podatke", "components.TitleCard.cleardata": "Izbriši podatke",
"components.TitleCard.mediaerror": "{mediaType} nije pronađen", "components.TitleCard.mediaerror": "{mediaType} nije pronađen",
"components.TitleCard.tmdbid": "TMDB ID", "components.TitleCard.tmdbid": "TMDB ID",
"components.TvDetails.Season.somethingwentwrong": "Dogodila se greška prilikom preuzimanja podataka sezona.", "components.TvDetails.Season.somethingwentwrong": "Dogodila se greška prilikom dohvaćanja podataka sezona.",
"components.TvDetails.anime": "Anime", "components.TvDetails.anime": "Anime",
"components.TvDetails.episodeRuntimeMinutes": "{runtime} min", "components.TvDetails.episodeRuntimeMinutes": "{runtime} min",
"components.TvDetails.firstAirDate": "Datum prvog emitiranja", "components.TvDetails.firstAirDate": "Datum prvog emitiranja",
@@ -948,12 +948,12 @@
"components.TvDetails.originaltitle": "Izvorni naslov", "components.TvDetails.originaltitle": "Izvorni naslov",
"components.TvDetails.overview": "Pregled", "components.TvDetails.overview": "Pregled",
"components.TvDetails.overviewunavailable": "Pregled nedostupan.", "components.TvDetails.overviewunavailable": "Pregled nedostupan.",
"components.TvDetails.play4konplex": "Reproduciraj u 4K na Plexu", "components.TvDetails.play4konplex": "Reproduciraj u 4K rezoluciji na Plexu",
"components.TvDetails.playonplex": "Reproduciraj na Plexu", "components.TvDetails.playonplex": "Reproduciraj na Plexu",
"components.TvDetails.productioncountries": "{countryCount, plural, one {zemlja produkcije} few {zemlje produkcije} other {zemalja produkcije}}", "components.TvDetails.productioncountries": "{countryCount, plural, one {zemlja produkcije} few {zemlje produkcije} other {zemalja produkcije}}",
"components.TvDetails.recommendations": "Preporuke", "components.TvDetails.recommendations": "Preporuke",
"components.TvDetails.reportissue": "Prijavi problem", "components.TvDetails.reportissue": "Prijavi problem",
"components.TvDetails.rtcriticsscore": "Tomatometer na Rotten Tomatoes", "components.TvDetails.rtcriticsscore": "Rotten Tomatoes Tomatometar",
"components.TvDetails.showtype": "Vrste serija", "components.TvDetails.showtype": "Vrste serija",
"components.TvDetails.similar": "Slične serije", "components.TvDetails.similar": "Slične serije",
"components.TvDetails.status4k": "4K {status}", "components.TvDetails.status4k": "4K {status}",
@@ -983,7 +983,7 @@
"components.UserProfile.UserSettings.UserGeneralSettings.movierequestlimit": "Ograničenje zahtjeva za filmove", "components.UserProfile.UserSettings.UserGeneralSettings.movierequestlimit": "Ograničenje zahtjeva za filmove",
"components.UserProfile.UserSettings.UserGeneralSettings.owner": "Vlasnik", "components.UserProfile.UserSettings.UserGeneralSettings.owner": "Vlasnik",
"components.UserProfile.UserSettings.UserGeneralSettings.plexwatchlistsyncseriestip": "Automatski zatraži serije na tvom <PlexWatchlistSupportLink>Plex popisu gledanja</PlexWatchlistSupportLink>", "components.UserProfile.UserSettings.UserGeneralSettings.plexwatchlistsyncseriestip": "Automatski zatraži serije na tvom <PlexWatchlistSupportLink>Plex popisu gledanja</PlexWatchlistSupportLink>",
"components.UserProfile.UserSettings.UserGeneralSettings.region": "Otkrij regiju", "components.UserProfile.UserSettings.UserGeneralSettings.region": "Regionalno otkrivanje",
"components.UserProfile.UserSettings.UserGeneralSettings.toastSettingsFailure": "Dogodila se greška prilikom spremanja postavki.", "components.UserProfile.UserSettings.UserGeneralSettings.toastSettingsFailure": "Dogodila se greška prilikom spremanja postavki.",
"components.UserProfile.UserSettings.UserGeneralSettings.toastSettingsSuccess": "Postavke su uspješno spremljene!", "components.UserProfile.UserSettings.UserGeneralSettings.toastSettingsSuccess": "Postavke su uspješno spremljene!",
"components.UserProfile.UserSettings.UserGeneralSettings.user": "Korisnik", "components.UserProfile.UserSettings.UserGeneralSettings.user": "Korisnik",
@@ -1042,7 +1042,7 @@
"i18n.status": "Stanje", "i18n.status": "Stanje",
"pages.oops": "Ups", "pages.oops": "Ups",
"components.Settings.advancedTooltip": "Neispravno konfiguriranje ove postavke može pokvariti funkcionalnost", "components.Settings.advancedTooltip": "Neispravno konfiguriranje ove postavke može pokvariti funkcionalnost",
"components.Settings.noDefaultNon4kServer": "Ako imate samo jedan {serverType} poslužitelj za ne-4K i za 4K sadržaj (ili ako preuzimaš samo 4K sadržaj), tvoj {serverType} poslužitelj <strong>NE </strong> bi trebao biti određen kao 4K poslužitelj.", "components.Settings.noDefaultNon4kServer": "Ako imaš samo jedan {serverType} poslužitelj za ne-4K i za 4K sadržaj (ili ako preuzimaš samo 4K sadržaj), <strong>NEMOJ</strong> odrediti svoj {serverType} poslužitelj kao 4K poslužitelj.",
"components.PermissionEdit.requestMoviesDescription": "Dozvoli automatsko slanje zahtjeva za filmove koje nisu u 4K rezoluciji.", "components.PermissionEdit.requestMoviesDescription": "Dozvoli automatsko slanje zahtjeva za filmove koje nisu u 4K rezoluciji.",
"components.PermissionEdit.autorequestDescription": "Dozvoli automatsko slanje zahtjeva za medije koji nisu u 4K rezoluciji putem Plex popisa gledanja.", "components.PermissionEdit.autorequestDescription": "Dozvoli automatsko slanje zahtjeva za medije koji nisu u 4K rezoluciji putem Plex popisa gledanja.",
"components.PermissionEdit.autorequestMoviesDescription": "Dozvoli automatsko slanje zahtjeva za filmove koji nisu u 4K rezoluciji putem Plex popisa gledanja.", "components.PermissionEdit.autorequestMoviesDescription": "Dozvoli automatsko slanje zahtjeva za filmove koji nisu u 4K rezoluciji putem Plex popisa gledanja.",
@@ -1057,16 +1057,16 @@
"components.PermissionEdit.request4kTvDescription": "Dozvoli slanje zahtjeva za serijama u 4K rezoluciji.", "components.PermissionEdit.request4kTvDescription": "Dozvoli slanje zahtjeva za serijama u 4K rezoluciji.",
"components.PermissionEdit.usersDescription": "Dozvoli upravljanje korisnicima. Korisnici s ovom dozvolom ne mogu mijenjati korisnike s administratorskom privilegijom ili dozvoliti administratorske privilegije.", "components.PermissionEdit.usersDescription": "Dozvoli upravljanje korisnicima. Korisnici s ovom dozvolom ne mogu mijenjati korisnike s administratorskom privilegijom ili dozvoliti administratorske privilegije.",
"components.PermissionEdit.viewissuesDescription": "Dozvoli prikaz problema s medijima koje su prijavili drugi korisnici.", "components.PermissionEdit.viewissuesDescription": "Dozvoli prikaz problema s medijima koje su prijavili drugi korisnici.",
"components.PermissionEdit.viewrequestsDescription": "Dozvoli prikaz medijskih zahtjeva koje su prijavili drugi korisnici.", "components.PermissionEdit.viewrequestsDescription": "Dozvoli prikaz zahtjeva za medije koje su poslali drugi korisnici.",
"components.PermissionEdit.viewwatchlistsDescription": "Dozvoli prikaz Plex popisa gledanja drugih korisnika.", "components.PermissionEdit.viewwatchlistsDescription": "Dozvoli prikaz Plex popisa gledanja drugih korisnika.",
"components.Settings.notrunning": "Ne pokreće se", "components.Settings.notrunning": "Ne pokreće se",
"components.Settings.serverRemote": "udaljeni", "components.Settings.serverRemote": "udaljeni",
"components.RequestModal.QuotaDisplay.quotaLink": "Sažetak tvojih ograničenja zahtjeva možeš vidjeti na tvojoj <ProfileLink>stranici profila</ProfileLink>.", "components.RequestModal.QuotaDisplay.quotaLink": "Sažetak tvojih ograničenja zahtjeva možeš vidjeti na tvojoj <ProfileLink>stranici profila</ProfileLink>.",
"components.RequestModal.QuotaDisplay.quotaLinkUser": "Sažetak ograničenja zahtjeva korisničkih zahtjeva možeš vidjeti na njihovoj <ProfileLink>stranici profila</ProfileLink>.", "components.RequestModal.QuotaDisplay.quotaLinkUser": "Sažetak ograničenja zahtjeva korisničkih zahtjeva možeš vidjeti na njihovoj <ProfileLink>stranici profila</ProfileLink>.",
"components.RequestModal.QuotaDisplay.notenoughseasonrequests": "Nema dovoljno preostalih zahtjeva za sezonama", "components.RequestModal.QuotaDisplay.notenoughseasonrequests": "Nema dovoljno preostalih zahtjeva za sezone",
"components.RequestModal.SearchByNameModal.nomatches": "Nismo uspjeli pronaći seriju koja odgovara ovoj seriji.", "components.RequestModal.SearchByNameModal.nomatches": "Nismo uspjeli pronaći seriju koja odgovara ovoj seriji.",
"components.RequestModal.SearchByNameModal.notvdbiddescription": "Nismo uspjeli automatski naći odgovarajuću seriju. Dolje odaberi odgovarajuću seriju.", "components.RequestModal.SearchByNameModal.notvdbiddescription": "Nismo uspjeli automatski naći odgovarajuću seriju. Dolje odaberi odgovarajuću seriju.",
"components.RequestModal.requestadmin": "Ovaj će se zahtjev automatski prihvatiti.", "components.RequestModal.requestadmin": "Ovaj će se zahtjev automatski odobriti.",
"components.ResetPassword.emailresetlink": "E-mail poveznica za obnavljanje lozinke", "components.ResetPassword.emailresetlink": "E-mail poveznica za obnavljanje lozinke",
"components.Settings.Notifications.NotificationsLunaSea.webhookUrlTip": "Tvoj korisničke ili na osnovi uređaja <LunaSeaLink>webhook URL obavijesti</LunaSeaLink>", "components.Settings.Notifications.NotificationsLunaSea.webhookUrlTip": "Tvoj korisničke ili na osnovi uređaja <LunaSeaLink>webhook URL obavijesti</LunaSeaLink>",
"components.Settings.Notifications.NotificationsWebPush.httpsRequirement": "Za primanje web push obavijesti, Overseerr se mora posluživati putem HTTPS-a.", "components.Settings.Notifications.NotificationsWebPush.httpsRequirement": "Za primanje web push obavijesti, Overseerr se mora posluživati putem HTTPS-a.",
@@ -1080,7 +1080,7 @@
"components.Settings.plexlibrariesDescription": "Biblioteke u kojima će Overseerr tražiti naslove. Postavi i spremi tvoje postavke Plex veze, a zatim pritisni gumb ispod ako je popis biblioteka prazan.", "components.Settings.plexlibrariesDescription": "Biblioteke u kojima će Overseerr tražiti naslove. Postavi i spremi tvoje postavke Plex veze, a zatim pritisni gumb ispod ako je popis biblioteka prazan.",
"components.Settings.startscan": "Pokreni pretraživanje", "components.Settings.startscan": "Pokreni pretraživanje",
"components.Setup.scanbackground": "Pretraživanje se pokreće u pozadini. U međuvremenu možeš nastaviti s postupkom postavljanja.", "components.Setup.scanbackground": "Pretraživanje se pokreće u pozadini. U međuvremenu možeš nastaviti s postupkom postavljanja.",
"components.PermissionEdit.managerequestsDescription": "Dozvoli upravljanje zahtjevima za medijima. Svi zahtjevi korisnika s ovom dozvolom će se automatski odobriti.", "components.PermissionEdit.managerequestsDescription": "Dozvoli upravljanje zahtjevima za medije. Svi zahtjevi korisnika s ovom dozvolom će se automatski odobriti.",
"components.Settings.Notifications.NotificationsWebhook.customJson": "JSON sadržaj", "components.Settings.Notifications.NotificationsWebhook.customJson": "JSON sadržaj",
"components.Settings.SettingsJobsCache.plex-full-scan": "Pretraživanje cijele Plex biblioteke", "components.Settings.SettingsJobsCache.plex-full-scan": "Pretraživanje cijele Plex biblioteke",
"components.RequestModal.QuotaDisplay.allowedRequests": "Smiješ zatražiti <strong>{limit}</strong> {type} svakih <strong>{days}</strong> dana.", "components.RequestModal.QuotaDisplay.allowedRequests": "Smiješ zatražiti <strong>{limit}</strong> {type} svakih <strong>{days}</strong> dana.",
@@ -1094,12 +1094,149 @@
"components.Settings.SettingsJobsCache.imagecache": "Predmemorija slika", "components.Settings.SettingsJobsCache.imagecache": "Predmemorija slika",
"components.Settings.SettingsJobsCache.imagecachesize": "Ukupna veličina predmemorije", "components.Settings.SettingsJobsCache.imagecachesize": "Ukupna veličina predmemorije",
"components.Settings.SettingsJobsCache.imagecachecount": "Slike spremljene u predmemoriju", "components.Settings.SettingsJobsCache.imagecachecount": "Slike spremljene u predmemoriju",
"components.Settings.SettingsJobsCache.imagecacheDescription": "Kad je u postavkama aktivirano, Overseerr će služiti kao posrednik i predmemorirati slike iz unaprijed konfiguriranih vanjskih izvora. Predmemorirane slike spremaju se u mapu konfiguracije. Datoteke možeš pronaći u <code>{appDataPath}/cache/images</code>.", "components.Settings.SettingsJobsCache.imagecacheDescription": "Kada je u postavkama aktivirano, Overseerr će služiti kao posrednik i predmemorirati slike iz unaprijed konfiguriranih vanjskih izvora. Predmemorirane slike spremaju se u mapu konfiguracije. Datoteke možeš pronaći u <code>{appDataPath}/cache/images</code>.",
"components.DownloadBlock.formattedTitle": "{title}: Sezona {seasonNumber} Episoda {episodeNumber}", "components.DownloadBlock.formattedTitle": "{title}: Sezona {seasonNumber} Episoda {episodeNumber}",
"components.RequestCard.unknowntitle": "Nepoznat naslov", "components.RequestCard.unknowntitle": "Nepoznat naslov",
"components.RequestList.RequestItem.unknowntitle": "Nepoznat naslov", "components.RequestList.RequestItem.unknowntitle": "Nepoznat naslov",
"components.StatusBadge.seasonepisodenumber": "S{seasonNumber}E{episodeNumber}", "components.StatusBadge.seasonepisodenumber": "S{seasonNumber}E{episodeNumber}",
"components.Discover.DiscoverTv.discovertv": "Serije", "components.Discover.DiscoverTv.discovertv": "Serije",
"components.Discover.RecentlyAddedSlider.recentlyAdded": "Nedavno dodano", "components.Discover.RecentlyAddedSlider.recentlyAdded": "Nedavno dodani",
"components.Discover.DiscoverMovies.discovermovies": "Filmovi" "components.Discover.DiscoverMovies.discovermovies": "Filmovi",
"components.Discover.moviegenres": "Žanrovi filmova",
"components.Discover.FilterSlideover.keywords": "Ključne riječi",
"components.Discover.FilterSlideover.activefilters": "{count, plural, one {# aktivni filtar} few {# aktivna filtra} other {# aktivnih filtara}}",
"components.Discover.FilterSlideover.firstAirDate": "Datum prvog emitiranja",
"components.Discover.PlexWatchlistSlider.plexwatchlist": "Tvoj Plex popis gledanja",
"components.Discover.FilterSlideover.genres": "Žanrovi",
"components.Discover.FilterSlideover.originalLanguage": "Izvorni jezik",
"components.Discover.CreateSlider.editsuccess": "Uređen klizač i spremljene postavke prilagodbe otkrivanja.",
"components.Discover.CreateSlider.slidernameplaceholder": "Naziv klizača",
"components.Discover.DiscoverMovies.sortPopularityDesc": "Popularnost (silazno)",
"components.Discover.CreateSlider.searchStudios": "Pretražite studije…",
"components.Discover.CreateSlider.providetmdbnetwork": "Navdeite TMDB ID mreže",
"components.Discover.CreateSlider.addfail": "Izrada novog klizača nije uspjela.",
"components.Discover.DiscoverMovies.sortPopularityAsc": "Popularnost (uzlazno)",
"components.Discover.CreateSlider.needresults": "Morate imati barem 1 rezultat.",
"components.Discover.CreateSlider.addcustomslider": "Stvorite prilagođeni klizač",
"components.Discover.CreateSlider.editSlider": "Uredi klizač",
"components.Discover.CreateSlider.validationDatarequired": "Morate navesti vrijednost.",
"components.Discover.CreateSlider.providetmdbstudio": "Navedite TMDB ID studija",
"components.Discover.CreateSlider.searchGenres": "Traži žanrove…",
"components.Discover.CreateSlider.editfail": "Uređivanje klizača nije uspjelo.",
"components.Discover.CreateSlider.starttyping": "Počinje tipkati za pretraživanje.",
"components.Discover.CreateSlider.addSlider": "Dodaj klizač",
"components.Discover.CreateSlider.providetmdbsearch": "Navedite upit za pretraživanje",
"components.Discover.CreateSlider.providetmdbkeywordid": "Navdeite TMDB ID ključne riječi",
"components.Discover.DiscoverMovieKeyword.keywordMovies": "{keywordTitle} filmovi",
"components.Discover.CreateSlider.validationTitlerequired": "Morate navesti naslov.",
"components.Discover.CreateSlider.nooptions": "Nema rezultata.",
"components.Discover.CreateSlider.searchKeywords": "Pretraži ključne riječi…",
"components.Discover.CreateSlider.addsuccess": "Stvoren je novi klizač i spremljene su postavke prilagodbe otkrivanja.",
"components.Discover.CreateSlider.providetmdbgenreid": "Navedite TMDB ID žanra",
"components.Discover.DiscoverTv.sortTmdbRatingAsc": "TMDB ocjena (uzlazno)",
"components.Discover.FilterSlideover.studio": "Studio",
"components.Discover.FilterSlideover.ratingText": "Ocjena od {minValue} do {maxValue}",
"components.Discover.DiscoverTv.sortFirstAirDateAsc": "Prvo emitiranje (uzlazno)",
"components.Discover.DiscoverTv.sortTmdbRatingDesc": "TMDB ocjena (silazno)",
"components.Discover.DiscoverMovies.activefilters": "{count, plural, one {# aktivni filtar} few {# aktivna filtra} other {# aktivnih filtara}}",
"components.Discover.DiscoverMovies.sortTmdbRatingAsc": "TMDB ocjena (uzlazno)",
"components.Discover.FilterSlideover.clearfilters": "Obriši aktivne filtre",
"components.Discover.DiscoverMovies.sortReleaseDateDesc": "Datum izlaska (silazno)",
"components.Discover.DiscoverTv.activefilters": "{count, plural, one {# aktivni filtar} few {# aktivna filtra} other {# aktivnih filtara}}",
"components.Discover.FilterSlideover.streamingservices": "Streaming usluge",
"components.Discover.FilterSlideover.tmdbuserscore": "TMDB ocjena korisnika",
"components.Discover.DiscoverTv.sortPopularityAsc": "Popularnost (uzlazno)",
"components.Discover.DiscoverTv.sortTitleAsc": "Naslov (A-Z) (uzlazno)",
"components.Discover.DiscoverTv.sortFirstAirDateDesc": "Prvo emitiranje (silazno)",
"components.Discover.FilterSlideover.releaseDate": "Datum izlaska",
"components.Discover.DiscoverSliderEdit.deletefail": "Greška pri uklanjanju klizača.",
"components.Discover.FilterSlideover.runtime": "Trajanje",
"components.Discover.FilterSlideover.from": "Od",
"components.Discover.DiscoverMovies.sortTitleDesc": "Naslov (Z-A) (silazno)",
"components.Discover.DiscoverTv.sortPopularityDesc": "Popularnost (silazno)",
"components.Discover.FilterSlideover.to": "Do",
"components.Discover.FilterSlideover.filters": "Filtri",
"components.Discover.DiscoverSliderEdit.enable": "Vidljivost",
"components.Discover.FilterSlideover.runtimeText": "trajanje {minValue}-{maxValue} minuta",
"components.Discover.DiscoverMovies.sortReleaseDateAsc": "Datum izlaska (uzlazno)",
"components.Discover.DiscoverMovies.sortTmdbRatingDesc": "TMDB ocjena (silazno)",
"components.Discover.FilterSlideover.tmdbuservotecount": "TMDB broj glasova korisnika",
"components.Discover.DiscoverSliderEdit.deletesuccess": "Klizač uspješno uklonjen.",
"components.Discover.DiscoverMovies.sortTitleAsc": "Naslov (A-Z) (uzlazno)",
"components.Discover.DiscoverTv.sortTitleDesc": "Naslov (Z-A) (silazno)",
"components.Discover.DiscoverSliderEdit.remove": "Ukloni",
"components.Discover.tvgenres": "Žanrovi serija",
"components.Discover.DiscoverTvKeyword.keywordSeries": "{keywordTitle} serije",
"components.Selector.showmore": "Pokaži više",
"components.Selector.searchGenres": "Odaberi žanrove …",
"components.Selector.searchStudios": "Traži studija …",
"components.Discover.tmdbtvgenre": "TMDB žanr serije",
"components.Selector.showless": "Pokaži manje",
"components.Selector.starttyping": "Počni tipkati za pretraživanje.",
"components.Selector.searchKeywords": "Traži ključne riječi …",
"components.Selector.nooptions": "Nema rezultata.",
"components.Discover.tmdbmoviegenre": "TMDB žanr filmova",
"components.Discover.FilterSlideover.voteCount": "Broj glasova između {minValue} i {maxValue}",
"components.Settings.SettingsJobsCache.editJobScheduleSelectorSeconds": "{jobScheduleHours, plural, one {Svake sekunde} few {Svake {jobScheduleHours} sekunde} other {Svakih {jobScheduleHours} sekundi}}",
"components.Layout.Sidebar.browsemovies": "Filmovi",
"components.Layout.Sidebar.browsetv": "Serije",
"components.Discover.updatesuccess": "Aktualiziraj postavke za prilagođavanje otkrivanja.",
"components.Discover.updatefailed": "Dogodila se greška tiijekom aktualiziranja postavki za prilagođavanje otkrivanja.",
"components.Settings.SettingsMain.toastApiKeyFailure": "Dogodila se greška prilikom generiranja novog API ključa.",
"components.Settings.SettingsMain.toastSettingsFailure": "Dogodila se greška prilikom spremanja postavki.",
"components.Discover.PlexWatchlistSlider.emptywatchlist": "Mediji koji su dodani u tvoj <PlexWatchlistSupportLink>Plex popis gledanja</PlexWatchlistSupportLink> pojavit će se ovdje.",
"components.Discover.networks": "Mreže",
"components.Discover.studios": "Studiji",
"components.Settings.SettingsMain.hideAvailable": "Sakrij dostupne medije",
"components.Settings.Notifications.NotificationsPushover.sound": "Zvuk obavijesti",
"components.Discover.tmdbmoviekeyword": "TMDB ključna riječ filmova",
"components.Discover.stopediting": "Prekini uređivanje",
"components.Discover.resetsuccess": "Uspješno resetiranje postavki prilagodbe otkrivanja.",
"components.Discover.customizediscover": "Prilagodi otkrivanje",
"components.Settings.SettingsMain.locale": "Jezik prikaza",
"components.Discover.tmdbtvkeyword": "TMDB ključna riječ serija",
"components.Discover.tmdbnetwork": "TMDB mreža",
"components.Settings.SettingsMain.applicationTitle": "Naslov programa",
"components.Settings.SettingsMain.originallanguage": "Jezik otkrivanja",
"components.Settings.SettingsMain.csrfProtection": "Aktiviraj CSRF zaštitu",
"components.Discover.tmdbstudio": "TMDB studio",
"components.Settings.SettingsMain.generalsettings": "Opće postavke",
"components.MovieDetails.imdbuserscore": "IMDB ocjena korisnika",
"components.Discover.tmdbtvstreamingservices": "TMDB streaming usluge za TV",
"components.Settings.SettingsMain.apikey": "API ključ",
"components.Settings.SettingsMain.cacheImages": "Aktiviraj predmemoriranje slika",
"components.Discover.tmdbmoviestreamingservices": "TMDB streaming usluge filmova",
"components.Discover.resetfailed": "Dogodila se greška prilikom resetiranja postavki prilagodbe otkrivanja.",
"components.Discover.tmdbsearch": "TMDB pretraga",
"components.Settings.SettingsMain.applicationurl": "URL programa",
"components.Settings.SettingsMain.general": "Opće",
"components.UserProfile.UserSettings.UserNotificationSettings.sound": "Zvuk obavijesti",
"components.Discover.resettodefault": "Resetiraj na zadane vrijednosti",
"components.Settings.SettingsMain.regionTip": "Filtriraj sadržaj prema regionalnoj dostupnosti",
"components.UserProfile.UserSettings.UserNotificationSettings.deviceDefault": "Zadane postavke uređaja",
"components.Settings.SettingsMain.region": "Regionalno otkrivanje",
"components.Settings.SettingsMain.trustProxy": "Aktiviraj proxy podršku",
"components.Settings.SettingsMain.toastSettingsSuccess": "Postavke su uspješno spremljene!",
"i18n.collection": "Zbirka",
"components.Settings.SettingsMain.originallanguageTip": "Filtriraj sadržaj po izvornom jeziku",
"components.Settings.SettingsMain.cacheImagesTip": "Predmemoriraj slike eksternih izvora (zahtijeva značajnu količinu memorije na disku)",
"components.Settings.SettingsJobsCache.availability-sync": "Sinkronizacija dostupnosti medija",
"components.Settings.SettingsMain.trustProxyTip": "Dopusti Overseerru da ispravno registrira IP adrese klijenata iza proxyja",
"components.Settings.SettingsMain.validationApplicationUrlTrailingSlash": "URL ne smije završiti s kosom crtom",
"components.Settings.SonarrModal.animeSeriesType": "Vrsta anime serije",
"components.Settings.SettingsMain.generalsettingsDescription": "Konfiguriraj globalne i zadane postavke za Overseerr.",
"components.Settings.SettingsMain.toastApiKeySuccess": "Novi API ključ je uspješno generiran!",
"components.Settings.SonarrModal.seriesType": "Vrsta serije",
"components.Settings.SettingsMain.csrfProtectionHoverTip": "NEMOJ aktivirati ovu postavku ako ne razumiješ što radiš!",
"components.Settings.Notifications.NotificationsPushover.deviceDefault": "Zadane postavke uređaja",
"components.Settings.SettingsMain.validationApplicationUrl": "Moraš navesti valjani URL",
"components.Settings.SettingsMain.validationApplicationTitle": "Moraš navesti naslov programa",
"components.Settings.SettingsMain.csrfProtectionTip": "Postavi eksterni API pristup u samo-za-čitanje (zahtijeva HTTPS)",
"components.Discover.resetwarning": "Vrati sve klizače na zadane postavke. To će također izbrisati sve prilagođene klizače!",
"components.Settings.SonarrModal.tagRequestsInfo": "Automatski dodaj dodatnu oznaku s korisničkim ID-om i prikaznim imenom podnositelja zahtjeva",
"components.Settings.RadarrModal.tagRequestsInfo": "Automatski dodaj dodatnu oznaku s korisničkim ID-om i prikaznim imenom podnositelja zahtjeva",
"components.Discover.createnewslider": "Stvori novi klizač",
"components.Settings.SettingsMain.partialRequestsEnabled": "Dopusti djelomične zahtjeve za seriju",
"components.Settings.SonarrModal.tagRequests": "Označi zahtjeve",
"components.Settings.RadarrModal.tagRequests": "Označi zahtjeve"
} }

View File

@@ -426,7 +426,7 @@
"components.Settings.SettingsJobsCache.jobname": "Feladat neve", "components.Settings.SettingsJobsCache.jobname": "Feladat neve",
"components.Settings.SettingsJobsCache.jobcancelled": "{jobname} törölve.", "components.Settings.SettingsJobsCache.jobcancelled": "{jobname} törölve.",
"components.Settings.SettingsJobsCache.flushcache": "Cache kiürítése", "components.Settings.SettingsJobsCache.flushcache": "Cache kiürítése",
"components.Settings.SettingsJobsCache.download-sync-reset": "Szinkronizálás \"reset\" letöltése", "components.Settings.SettingsJobsCache.download-sync-reset": "Töltse le a Sync Reset",
"components.Settings.SettingsJobsCache.download-sync": "Szinkronizálás letöltése", "components.Settings.SettingsJobsCache.download-sync": "Szinkronizálás letöltése",
"components.Settings.SettingsJobsCache.command": "Parancs", "components.Settings.SettingsJobsCache.command": "Parancs",
"components.Settings.SettingsJobsCache.canceljob": "Feladat megszakítása", "components.Settings.SettingsJobsCache.canceljob": "Feladat megszakítása",
@@ -460,14 +460,14 @@
"components.Settings.SettingsAbout.Releases.releases": "Kiadások", "components.Settings.SettingsAbout.Releases.releases": "Kiadások",
"components.Settings.SettingsAbout.Releases.releasedataMissing": "Kiadási adatok nem állnak rendelkezésre.", "components.Settings.SettingsAbout.Releases.releasedataMissing": "Kiadási adatok nem állnak rendelkezésre.",
"components.Settings.SettingsAbout.Releases.latestversion": "Legújabb", "components.Settings.SettingsAbout.Releases.latestversion": "Legújabb",
"components.Settings.SettingsAbout.Releases.currentversion": "Jelenlegi verzió", "components.Settings.SettingsAbout.Releases.currentversion": "Jelenlegi",
"components.Settings.RadarrModal.validationRootFolderRequired": "Ki kell választania egy root mappát", "components.Settings.RadarrModal.validationRootFolderRequired": "Ki kell választania egy root mappát",
"components.Settings.RadarrModal.validationProfileRequired": "Ki kell választania egy minőség profilt", "components.Settings.RadarrModal.validationProfileRequired": "Ki kell választania egy minőség profilt",
"components.Settings.RadarrModal.validationPortRequired": "Érvényes portszámot kell megadnia", "components.Settings.RadarrModal.validationPortRequired": "Érvényes portszámot kell megadnia",
"components.Settings.RadarrModal.validationNameRequired": "Meg kell adnia a szerver nevét", "components.Settings.RadarrModal.validationNameRequired": "Meg kell adnia a szerver nevét",
"components.Settings.RadarrModal.validationMinimumAvailabilityRequired": "Ki kell választania egy minimális elérhetőséget", "components.Settings.RadarrModal.validationMinimumAvailabilityRequired": "Ki kell választania egy minimális elérhetőséget",
"components.Settings.RadarrModal.validationHostnameRequired": "Meg kell adnia egy hostnevet vagy IP-címet", "components.Settings.RadarrModal.validationHostnameRequired": "Érvényes gazdagépnevet vagy IP-címet kell megadnia",
"components.Settings.RadarrModal.validationBaseUrlTrailingSlash": "Az alap URL-nek nem lehet vége perjel", "components.Settings.RadarrModal.validationBaseUrlTrailingSlash": "Az URL alapja nem végződhet perjelre",
"components.Settings.RadarrModal.validationBaseUrlLeadingSlash": "Az alap URL-nek perjellel kell végződnie", "components.Settings.RadarrModal.validationBaseUrlLeadingSlash": "Az alap URL-nek perjellel kell végződnie",
"components.Settings.RadarrModal.validationApplicationUrlTrailingSlash": "Az URL-nek nem lehet vége perjel", "components.Settings.RadarrModal.validationApplicationUrlTrailingSlash": "Az URL-nek nem lehet vége perjel",
"components.Settings.RadarrModal.validationApplicationUrl": "Érvényes URL-t kell megadnia", "components.Settings.RadarrModal.validationApplicationUrl": "Érvényes URL-t kell megadnia",
@@ -666,7 +666,7 @@
"components.RequestList.RequestItem.requested": "Kérve", "components.RequestList.RequestItem.requested": "Kérve",
"components.RequestList.RequestItem.modifieduserdate": "{date} {user} által", "components.RequestList.RequestItem.modifieduserdate": "{date} {user} által",
"components.RequestList.RequestItem.modified": "Módosított", "components.RequestList.RequestItem.modified": "Módosított",
"components.RequestList.RequestItem.mediaerror": "A kéréshez társított címe már nem érhető el.", "components.RequestList.RequestItem.mediaerror": "{mediaType} Nem található",
"components.RequestList.RequestItem.editrequest": "Kérés szerkesztése", "components.RequestList.RequestItem.editrequest": "Kérés szerkesztése",
"components.RequestList.RequestItem.deleterequest": "Kérés törlése", "components.RequestList.RequestItem.deleterequest": "Kérés törlése",
"components.RequestList.RequestItem.cancelRequest": "Kérés visszavonása", "components.RequestList.RequestItem.cancelRequest": "Kérés visszavonása",
@@ -958,9 +958,9 @@
"i18n.resolved": "Megoldva", "i18n.resolved": "Megoldva",
"components.Settings.RadarrModal.inCinemas": "Mozikban", "components.Settings.RadarrModal.inCinemas": "Mozikban",
"components.Settings.SettingsJobsCache.editJobSchedule": "Feladat Módosítása", "components.Settings.SettingsJobsCache.editJobSchedule": "Feladat Módosítása",
"components.Settings.SettingsJobsCache.editJobSchedulePrompt": "Gyakoriság", "components.Settings.SettingsJobsCache.editJobSchedulePrompt": "Új frekvencia",
"components.RequestBlock.languageprofile": "Nyelv Profil", "components.RequestBlock.languageprofile": "Nyelv Profil",
"components.RequestModal.requestApproved": "Kérés elfogadva: <strong>{title}</strong>", "components.RequestModal.requestApproved": "Kérés <strong>{title}</strong> elfogadva!",
"components.Settings.Notifications.NotificationsGotify.gotifysettingsfailed": "A Gotify értesítési beállításait nem sikerült elmenteni.", "components.Settings.Notifications.NotificationsGotify.gotifysettingsfailed": "A Gotify értesítési beállításait nem sikerült elmenteni.",
"components.Settings.Notifications.NotificationsGotify.toastGotifyTestSuccess": "Gotify teszt értesítés elküldve!", "components.Settings.Notifications.NotificationsGotify.toastGotifyTestSuccess": "Gotify teszt értesítés elküldve!",
"components.Settings.Notifications.NotificationsGotify.token": "Alkalmazás Token", "components.Settings.Notifications.NotificationsGotify.token": "Alkalmazás Token",
@@ -1083,5 +1083,77 @@
"components.RequestCard.tvdbid": "TheTVDB azonosító", "components.RequestCard.tvdbid": "TheTVDB azonosító",
"components.RequestList.RequestItem.tmdbid": "TMDB azonosító", "components.RequestList.RequestItem.tmdbid": "TMDB azonosító",
"components.RequestList.RequestItem.tvdbid": "TheTVDB azonosító", "components.RequestList.RequestItem.tvdbid": "TheTVDB azonosító",
"components.RequestModal.requestcollection4ktitle": "Gyűjtemény kérés 4K-ban" "components.RequestModal.requestcollection4ktitle": "Gyűjtemény kérés 4K-ban",
"components.Discover.CreateSlider.editsuccess": "Szerkesztett csúszka és mentett felfedezés testreszabási beállítások.",
"components.Settings.SettingsJobsCache.imagecache": "Képgyorsítótár",
"components.Settings.SettingsJobsCache.imagecachesize": "Teljes gyorsítótár mérete",
"components.Discover.CreateSlider.slidernameplaceholder": "Csúszka neve",
"components.Discover.DiscoverTv.sortFirstAirDateAsc": "Első adás dátuma növekvő",
"components.Discover.DiscoverMovies.sortPopularityDesc": "Népszerűség csökkenő",
"components.Settings.SettingsJobsCache.image-cache-cleanup": "Képgyorsítótár tisztítása",
"i18n.restartRequired": "Újraindítás szükséges",
"components.Discover.DiscoverMovies.sortTmdbRatingAsc": "TMDB minősítés növekvő",
"components.Discover.FilterSlideover.clearfilters": "Aktív szűrők törlése",
"components.Discover.CreateSlider.searchStudios": "Stúdiók keresése…",
"components.Discover.DiscoverMovies.sortReleaseDateDesc": "Megjelenés dátuma csökkenő sorrendben",
"components.Discover.CreateSlider.providetmdbnetwork": "Adja meg a TMDB hálózati azonosítót",
"components.Settings.SettingsMain.applicationTitle": "Pályázat címe",
"components.Discover.CreateSlider.addfail": "Nem sikerült új csúszkát létrehozni.",
"components.Discover.DiscoverMovies.sortPopularityAsc": "Növekvő népszerűség",
"components.Discover.CreateSlider.needresults": "Legalább 1 eredménynek kell lennie.",
"components.Discover.CreateSlider.addcustomslider": "Egyéni csúszka létrehozása",
"components.Discover.DiscoverTv.sortPopularityAsc": "Növekvő népszerűség",
"components.Discover.CreateSlider.editSlider": "Csúszka szerkesztése",
"components.Discover.CreateSlider.validationDatarequired": "Meg kell adnia egy adatértéket.",
"components.Discover.DiscoverTv.sortFirstAirDateDesc": "Első adási dátum csökkenő",
"components.Discover.DiscoverTv.discovertv": "Sorozat",
"components.Discover.DiscoverSliderEdit.deletefail": "Nem sikerült törölni a csúszkát.",
"components.Discover.CreateSlider.providetmdbstudio": "Adja meg a TMDB Studio azonosítóját",
"components.Settings.SettingsMain.cacheImages": "Képgyorsítótár engedélyezése",
"components.Discover.DiscoverTv.sortPopularityDesc": "Népszerűség csökkenő",
"components.Discover.CreateSlider.searchGenres": "Műfajok keresése…",
"components.Discover.CreateSlider.editfail": "Nem sikerült szerkeszteni a csúszkát.",
"components.Discover.CreateSlider.starttyping": "Gépelés megkezdése a kereséshez.",
"components.Discover.FilterSlideover.filters": "Szűrők",
"components.Discover.DiscoverSliderEdit.enable": "Kapcsolja be a láthatóságot",
"components.Discover.CreateSlider.addSlider": "Csúszka hozzáadása",
"components.Settings.SettingsJobsCache.imagecachecount": "Képek gyorsítótárban",
"components.Discover.CreateSlider.providetmdbsearch": "Adjon meg egy keresési lekérdezést",
"components.Discover.CreateSlider.providetmdbkeywordid": "Adjon meg egy TMDB kulcsszóazonosítót",
"components.Discover.DiscoverMovieKeyword.keywordMovies": "{keywordTitle} Filmek",
"components.Discover.CreateSlider.validationTitlerequired": "Meg kell adnia a címet.",
"components.Discover.DiscoverMovies.sortReleaseDateAsc": "Kiadási dátum Növekvő sorrendben",
"components.UserProfile.UserSettings.UserNotificationSettings.sound": "Értesítési hang",
"components.Discover.CreateSlider.nooptions": "Nincs eredmény.",
"components.Discover.CreateSlider.searchKeywords": "Kulcsszavak keresése…",
"components.Discover.CreateSlider.addsuccess": "Új csúszkát hozott létre, és elmentette a felfedezés testreszabási beállításait.",
"components.Discover.DiscoverSliderEdit.deletesuccess": "A csúszka sikeresen törölve.",
"components.Discover.DiscoverMovies.discovermovies": "Filmek",
"components.Discover.CreateSlider.providetmdbgenreid": "Adjon meg egy TMDB műfajazonosítót",
"components.Discover.DiscoverSliderEdit.remove": "Távolítsa el",
"components.Discover.PlexWatchlistSlider.emptywatchlist": "A hozzáadott média a <PlexWatchlistSupportLink>Plex figyelőlistáján</PlexWatchlistSupportLink> elérhető.",
"components.Discover.DiscoverTvKeyword.keywordSeries": "{keywordTitle} Sorzoat",
"components.Discover.DiscoverMovies.sortTmdbRatingDesc": "TMDB Értékelés Csökkenő",
"components.Discover.DiscoverTv.sortTitleAsc": "Cím (A-Z) Növekvő",
"components.Discover.DiscoverTv.sortTitleDesc": "Cím (Z-A) Csökkenő",
"components.Discover.FilterSlideover.ratingText": "Értékelések {minValue} és {maxValue} között",
"components.Discover.FilterSlideover.tmdbuservotecount": "TMDB Felhasználók szavazat szám",
"components.Discover.FilterSlideover.releaseDate": "Megjelenési dátum",
"components.Discover.FilterSlideover.voteCount": "Értékelések száma {minValue} és {maxValue} között",
"components.Discover.FilterSlideover.originalLanguage": "Eredeti Nyelv",
"components.Discover.PlexWatchlistSlider.plexwatchlist": "A te Plex figyelőlistád",
"components.Discover.RecentlyAddedSlider.recentlyAdded": "Nemrég hozzáadott",
"components.Discover.moviegenres": "Film műfajok",
"components.Discover.DiscoverMovies.sortTitleAsc": "Cím (A-Z) Növekvő",
"components.Discover.DiscoverMovies.sortTitleDesc": "Cím (Z-A) Csökkenő",
"components.Discover.DiscoverTv.sortTmdbRatingAsc": "TMDB Értékelés Növekvő",
"components.Discover.DiscoverTv.sortTmdbRatingDesc": "TMDB Értékelés Csökkenő",
"components.Discover.FilterSlideover.firstAirDate": "Első adási dátum",
"components.Discover.FilterSlideover.genres": "Műfajok",
"components.Discover.FilterSlideover.keywords": "Kulcsszavak",
"components.Discover.FilterSlideover.runtime": "Músoridő",
"components.Discover.FilterSlideover.runtimeText": "{minValue}-{maxValue} percnyi műsoridő",
"components.Discover.FilterSlideover.studio": "Stúdió",
"components.Discover.FilterSlideover.tmdbuserscore": "TMDB Felhasználói Értékelés",
"components.Discover.FilterSlideover.streamingservices": "Streaming Szolgáltatók"
} }

View File

@@ -1136,5 +1136,15 @@
"components.Settings.SettingsMain.toastSettingsSuccess": "Impostazioni salvate con successo!", "components.Settings.SettingsMain.toastSettingsSuccess": "Impostazioni salvate con successo!",
"components.UserProfile.plexwatchlist": "Plex Watchlist", "components.UserProfile.plexwatchlist": "Plex Watchlist",
"components.TvDetails.seasonstitle": "Stagioni", "components.TvDetails.seasonstitle": "Stagioni",
"components.UserProfile.UserSettings.UserGeneralSettings.plexwatchlistsyncseriestip": "Richiedi automaticamente le serie presenti nella tua <PlexWatchlistSupportLink>Plex Watchlist</PlexWatchlistSupportLink>" "components.UserProfile.UserSettings.UserGeneralSettings.plexwatchlistsyncseriestip": "Richiedi automaticamente le serie presenti nella tua <PlexWatchlistSupportLink>Plex Watchlist</PlexWatchlistSupportLink>",
"components.Discover.moviegenres": "Film per genere",
"components.RequestModal.requestseries4ktitle": "Richiedi serie in 4K",
"components.RequestModal.requestmovie4ktitle": "Richiedi film in 4K",
"components.Discover.FilterSlideover.tmdbuserscore": "Voto utenti TMDB",
"components.StatusBadge.openinarr": "Apri su {arr}",
"components.Settings.SonarrModal.animeSeriesType": "Tipo serie anime",
"components.Settings.SonarrModal.seriesType": "Tipo serie TV",
"components.RequestModal.requestmovietitle": "Richiedi film",
"components.Discover.FilterSlideover.tmdbuservotecount": "Numero voti utenti TMDB",
"components.RequestModal.requestseriestitle": "Richiedi serie"
} }

View File

@@ -1231,5 +1231,6 @@
"components.Discover.DiscoverMovies.activefilters": "{count, plural, one {# 선택한 필터} other {# 선택한 필터}}", "components.Discover.DiscoverMovies.activefilters": "{count, plural, one {# 선택한 필터} other {# 선택한 필터}}",
"components.QuotaSelector.seasons": "{count, plural, one {시즌} other {시즌}}", "components.QuotaSelector.seasons": "{count, plural, one {시즌} other {시즌}}",
"components.RequestModal.QuotaDisplay.requestsremaining": "{remaining, plural, =0 {없음} other {<strong>#</strong>개의}} {type} {remaining, plural, one {요청} other {요청}} 남음", "components.RequestModal.QuotaDisplay.requestsremaining": "{remaining, plural, =0 {없음} other {<strong>#</strong>개의}} {type} {remaining, plural, one {요청} other {요청}} 남음",
"components.Settings.SettingsJobsCache.editJobScheduleSelectorHours": "매 {jobScheduleHours, plural, one {시간} other {{jobScheduleHours} 시간}}" "components.Settings.SettingsJobsCache.editJobScheduleSelectorHours": "매 {jobScheduleHours, plural, one {시간} other {{jobScheduleHours} 시간}}",
"components.MovieDetails.imdbuserscore": "IMDB 사용자 점수"
} }

View File

@@ -1224,5 +1224,19 @@
"components.Settings.SettingsJobsCache.editJobScheduleSelectorSeconds": "Elke {jobScheduleSeconds, plural, one {seconde} other {{jobScheduleSeconds} seconden}}", "components.Settings.SettingsJobsCache.editJobScheduleSelectorSeconds": "Elke {jobScheduleSeconds, plural, one {seconde} other {{jobScheduleSeconds} seconden}}",
"components.Settings.SettingsJobsCache.availability-sync": "Synchronisatie van mediabeschikbaarheid", "components.Settings.SettingsJobsCache.availability-sync": "Synchronisatie van mediabeschikbaarheid",
"components.Discover.tmdbmoviestreamingservices": "Streamingdiensten voor films TMDB", "components.Discover.tmdbmoviestreamingservices": "Streamingdiensten voor films TMDB",
"components.Discover.tmdbtvstreamingservices": "Streamingdiensten voor series TMDB" "components.Discover.tmdbtvstreamingservices": "Streamingdiensten voor series TMDB",
"components.Discover.FilterSlideover.tmdbuservotecount": "Aantal stemmen TMDB-gebruikers",
"components.Discover.FilterSlideover.voteCount": "Aantal stemmen tussen {minValue} en {maxValue}",
"components.Settings.RadarrModal.tagRequests": "Tagverzoeken",
"components.Settings.RadarrModal.tagRequestsInfo": "Voeg automatisch een extra tag toe met de gebruikers-ID en weergavenaam van de aanvrager",
"components.MovieDetails.imdbuserscore": "Gebruikersscore IMDB",
"components.Settings.SonarrModal.tagRequests": "Tagverzoeken",
"components.Settings.SonarrModal.tagRequestsInfo": "Voeg automatisch een extra tag toe met de gebruikers-ID en weergavenaam van de aanvrager",
"i18n.collection": "Collectie",
"components.Settings.Notifications.NotificationsPushover.sound": "Meldingsgeluid",
"components.UserProfile.UserSettings.UserNotificationSettings.deviceDefault": "Apparaatstandaard",
"components.Settings.SonarrModal.animeSeriesType": "Serietype anime",
"components.Settings.SonarrModal.seriesType": "Serietype",
"components.UserProfile.UserSettings.UserNotificationSettings.sound": "Meldingsgeluid",
"components.Settings.Notifications.NotificationsPushover.deviceDefault": "Apparaatstandaard"
} }

View File

@@ -1220,5 +1220,8 @@
"components.Discover.updatefailed": "Wystąpił problem podczas aktualizowania ustawień odnajdywania.", "components.Discover.updatefailed": "Wystąpił problem podczas aktualizowania ustawień odnajdywania.",
"components.Settings.SettingsMain.apikey": "Klucz API", "components.Settings.SettingsMain.apikey": "Klucz API",
"components.Settings.SettingsMain.cacheImagesTip": "Pamięć podręczna dla obrazów pochodzących z zewnętrznych źródeł (wymaga znacznej ilości miejsca na dysku)", "components.Settings.SettingsMain.cacheImagesTip": "Pamięć podręczna dla obrazów pochodzących z zewnętrznych źródeł (wymaga znacznej ilości miejsca na dysku)",
"components.Settings.SettingsMain.toastSettingsFailure": "Coś poszło nie tak podczas zapisywania ustawień." "components.Settings.SettingsMain.toastSettingsFailure": "Coś poszło nie tak podczas zapisywania ustawień.",
"i18n.collection": "Kolekcja",
"components.MovieDetails.imdbuserscore": "Ocena użytkowników IMDB",
"components.Settings.SonarrModal.seriesType": "Typ serialu"
} }

View File

@@ -1227,5 +1227,10 @@
"components.Discover.tmdbmoviestreamingservices": "Serviços de Streaming de Filmes do TMDB", "components.Discover.tmdbmoviestreamingservices": "Serviços de Streaming de Filmes do TMDB",
"components.Discover.FilterSlideover.tmdbuservotecount": "Qtd de Votos de Usuários TMDB", "components.Discover.FilterSlideover.tmdbuservotecount": "Qtd de Votos de Usuários TMDB",
"components.Discover.FilterSlideover.voteCount": "Qtd the votos entre {minValue} e {maxValue}", "components.Discover.FilterSlideover.voteCount": "Qtd the votos entre {minValue} e {maxValue}",
"components.Settings.RadarrModal.tagRequestsInfo": "Adicione automaticamente uma tag extra com o ID de usuário e o nome de exibição do solicitante" "components.Settings.RadarrModal.tagRequestsInfo": "Adicione automaticamente uma tag extra com o ID de usuário e o nome de exibição do solicitante",
"i18n.collection": "Coleção",
"components.MovieDetails.imdbuserscore": "Pontuação de usuário IMDB",
"components.Settings.SonarrModal.tagRequestsInfo": "Adiciona automaticamente uma tag adicional com o ID de usuário e nome de exibição de quem pediu",
"components.Settings.SonarrModal.tagRequests": "Marcar Pedidos",
"components.Settings.RadarrModal.tagRequests": "Marcar Pedidos"
} }

View File

@@ -370,7 +370,7 @@
"components.PlexLoginButton.signinwithplex": "Conectat", "components.PlexLoginButton.signinwithplex": "Conectat",
"components.QuotaSelector.movieRequests": "{quotaLimit} <quotaUnits>{movies} per {quotaDays} {days}</quotaUnits>", "components.QuotaSelector.movieRequests": "{quotaLimit} <quotaUnits>{movies} per {quotaDays} {days}</quotaUnits>",
"components.PersonDetails.lifespan": "{birthdate} {deathdate}", "components.PersonDetails.lifespan": "{birthdate} {deathdate}",
"components.RequestBlock.seasons": "{seasonCount, plural, un {Season} alte {Seasons}}", "components.RequestBlock.seasons": "{seasonCount, plural, one {Sezon} other {Sezoane}}",
"components.PermissionEdit.requestMoviesDescription": "Acordați permisiunea de a trimite solicitări pentru filme non-4K.", "components.PermissionEdit.requestMoviesDescription": "Acordați permisiunea de a trimite solicitări pentru filme non-4K.",
"components.PermissionEdit.viewissuesDescription": "Acordați permisiunea de a vizualiza problemele media raportate de alți utilizatori.", "components.PermissionEdit.viewissuesDescription": "Acordați permisiunea de a vizualiza problemele media raportate de alți utilizatori.",
"components.PermissionEdit.viewwatchlistsDescription": "Acordați permisiunea de a vizualiza listele de urmărire Plex ale altor utilizatori.", "components.PermissionEdit.viewwatchlistsDescription": "Acordați permisiunea de a vizualiza listele de urmărire Plex ale altor utilizatori.",
@@ -403,8 +403,62 @@
"components.RequestBlock.approve": "Aprobă Solicitarea", "components.RequestBlock.approve": "Aprobă Solicitarea",
"components.RequestBlock.decline": "Respinge Solicitarea", "components.RequestBlock.decline": "Respinge Solicitarea",
"components.RequestBlock.requestedby": "Solicitat de", "components.RequestBlock.requestedby": "Solicitat de",
"components.RequestButton.approve4krequests": "Aprobă {requestCount, plural, o {4K Request} alte {{requestCount} 4K Requests}}", "components.RequestButton.approve4krequests": "Aprobă {requestCount, plural, one {Cerere 4K} other {{requestCount} Cereri 4K}}",
"components.RequestBlock.lastmodifiedby": "Ultima Dată Modificat de", "components.RequestBlock.lastmodifiedby": "Ultima Dată Modificat de",
"components.RequestBlock.profilechanged": "Profil Calitate", "components.RequestBlock.profilechanged": "Profil Calitate",
"components.RequestBlock.requestdate": "Dată Solicitare" "components.RequestBlock.requestdate": "Dată Solicitare",
"components.RequestButton.approverequests": "Aprobă {requestCount, plural, one {Cerere} other {{requestCount} Cereri}}",
"components.RequestButton.requestmore4k": "Cere mai mult în 4K",
"components.RequestButton.approverequest4k": "Aproba Cereri 4K",
"components.RequestCard.tmdbid": "ID TMDB",
"components.RequestCard.failedretry": "A apărut o eroare la reîncercarea solicitării.",
"components.RequestButton.declinerequest": "Respinge Cerere",
"components.RequestCard.seasons": "{seasonCount, plural, one {Sezon} other {Sezoane}}",
"components.RequestCard.declinerequest": "Respinge Cererea",
"components.RequestButton.viewrequest": "Vezi Cerere",
"components.RequestButton.declinerequests": "Respinge {requestCount, plural, one {Cererea} other {{requestCount} Cererile}}",
"components.RequestCard.mediaerror": "{mediaType} Nu a fost găsit",
"components.RequestCard.editrequest": "Editează Cererea",
"components.RequestButton.viewrequest4k": "Vezi Cerere 4K",
"components.RequestButton.decline4krequests": "Respinge {requestCount, plural, one {Cererea 4K} other {{requestCount} Cererile 4K}}",
"components.RequestButton.declinerequest4k": "Respinge Cerere 4K",
"components.RequestCard.approverequest": "Aprobă Cererea",
"components.RequestButton.approverequest": "Cereri Aprobate",
"components.RequestCard.deleterequest": "Șterge Cererea",
"components.RequestCard.unknowntitle": "Titlu necunoscut",
"components.RequestList.RequestItem.cancelRequest": "Anulează Cerere",
"components.RequestCard.tvdbid": "ID TheTVDB",
"components.RequestButton.requestmore": "Cere mai mult",
"components.RequestList.RequestItem.deleterequest": "Șterge Cerere",
"components.RequestCard.cancelrequest": "Anulează Cererea",
"components.RequestModal.AdvancedRequester.folder": "{path} ({space})",
"components.RequestList.RequestItem.modified": "Modificat",
"components.RequestList.RequestItem.editrequest": "Editează Cererea",
"components.RequestModal.AdvancedRequester.qualityprofile": "Profil de Calitate",
"components.RequestList.requests": "Cereri",
"components.RequestModal.AdvancedRequester.advancedoptions": "Avansat",
"components.RequestModal.AdvancedRequester.notagoptions": "Fără etichete.",
"components.RequestList.RequestItem.modifieduserdate": "{date} de {user}",
"components.RequestModal.AdvancedRequester.requestas": "Cere ca",
"components.RequestList.showallrequests": "Afișează toate cererile",
"components.RequestList.RequestItem.tmdbid": "ID-ul TMDB",
"components.RequestList.RequestItem.requesteddate": "Solicitat",
"components.RequestModal.QuotaDisplay.movie": "film",
"components.RequestList.RequestItem.failedretry": "Ceva a mers greșit în timpul reîncercării cererii.",
"components.RequestList.RequestItem.unknowntitle": "Titlu Necunoscut",
"components.RequestModal.AdvancedRequester.destinationserver": "Server Destinație",
"components.RequestModal.AdvancedRequester.rootfolder": "Folder Rădăcină",
"components.RequestList.sortAdded": "Cele Mai Recente",
"components.RequestModal.AdvancedRequester.tags": "Etichete",
"components.RequestList.RequestItem.mediaerror": "{mediaType} nu a fost găsit",
"components.RequestList.sortModified": "Ultima Modificată",
"components.RequestList.RequestItem.tvdbid": "ID-ul TheTVDB",
"components.RequestModal.AdvancedRequester.selecttags": "Selectați Etichetele",
"components.RequestList.RequestItem.requested": "Solicitat",
"components.RequestModal.QuotaDisplay.notenoughseasonrequests": "Nu sunt suficiente cereri de sezon rămase",
"components.RequestModal.AdvancedRequester.default": "{name} (Implicit)",
"components.RequestModal.AdvancedRequester.languageprofile": "Profil de Limbă",
"components.RequestModal.QuotaDisplay.allowedRequestsUser": "Acest utilizator are voie sa ceara <strong>{limit}</strong> {type} la fiecare <strong>{days}</strong> zile.",
"components.RequestList.RequestItem.seasons": "",
"components.RequestModal.QuotaDisplay.allowedRequests": "Aveți voie să cereți <strong>{limit}</strong> de {type} la fiecare <strong>{days}</strong> zile."
} }

View File

@@ -164,7 +164,7 @@
"pages.oops": "Упс", "pages.oops": "Упс",
"pages.returnHome": "Вернуться домой", "pages.returnHome": "Вернуться домой",
"components.CollectionDetails.overview": "Обзор", "components.CollectionDetails.overview": "Обзор",
"components.CollectionDetails.numberofmovies": "{count} фильмов", "components.CollectionDetails.numberofmovies": "{count} {count, plural, one {фильм} few {фильма} other {фильмов}}",
"components.CollectionDetails.requestcollection": "Запросить Коллекцию", "components.CollectionDetails.requestcollection": "Запросить Коллекцию",
"components.Login.email": "Адрес электронной почты", "components.Login.email": "Адрес электронной почты",
"components.UserList.users": "Пользователи", "components.UserList.users": "Пользователи",
@@ -983,7 +983,7 @@
"components.Discover.CreateSlider.addcustomslider": "Создать слайдер", "components.Discover.CreateSlider.addcustomslider": "Создать слайдер",
"components.Discover.CreateSlider.nooptions": "Нет результатов.", "components.Discover.CreateSlider.nooptions": "Нет результатов.",
"components.Discover.CreateSlider.providetmdbgenreid": "Введите TMDB ID жанра", "components.Discover.CreateSlider.providetmdbgenreid": "Введите TMDB ID жанра",
"components.Discover.CreateSlider.needresults": "Должен быть хотя-бы 1 результат.", "components.Discover.CreateSlider.needresults": "Должен быть хотя бы 1 результат.",
"components.Discover.CreateSlider.providetmdbkeywordid": "Введите TMDB ID ключевого слова", "components.Discover.CreateSlider.providetmdbkeywordid": "Введите TMDB ID ключевого слова",
"components.Discover.CreateSlider.providetmdbnetwork": "Введите TMDB ID сети", "components.Discover.CreateSlider.providetmdbnetwork": "Введите TMDB ID сети",
"components.Discover.CreateSlider.providetmdbsearch": "Введите поисковой запрос", "components.Discover.CreateSlider.providetmdbsearch": "Введите поисковой запрос",
@@ -992,7 +992,7 @@
"components.Discover.CreateSlider.searchKeywords": "Поиск ключевых слов…", "components.Discover.CreateSlider.searchKeywords": "Поиск ключевых слов…",
"components.Discover.CreateSlider.searchStudios": "Поиск студий…", "components.Discover.CreateSlider.searchStudios": "Поиск студий…",
"components.Discover.CreateSlider.slidernameplaceholder": "Название слайдера", "components.Discover.CreateSlider.slidernameplaceholder": "Название слайдера",
"components.Discover.CreateSlider.starttyping": "Начините писать для поиска.", "components.Discover.CreateSlider.starttyping": "Начните писать для поиска.",
"components.Discover.CreateSlider.validationDatarequired": "Вы должны ввести дату.", "components.Discover.CreateSlider.validationDatarequired": "Вы должны ввести дату.",
"components.Discover.CreateSlider.validationTitlerequired": "Вы должны ввести заголовок.", "components.Discover.CreateSlider.validationTitlerequired": "Вы должны ввести заголовок.",
"components.Discover.DiscoverMovieKeyword.keywordMovies": "Фильмы по ключевому слову \"{keywordTitle}\"", "components.Discover.DiscoverMovieKeyword.keywordMovies": "Фильмы по ключевому слову \"{keywordTitle}\"",
@@ -1024,7 +1024,7 @@
"components.Discover.DiscoverSliderEdit.deletesuccess": "Слайдер успешно удален.", "components.Discover.DiscoverSliderEdit.deletesuccess": "Слайдер успешно удален.",
"components.Discover.DiscoverSliderEdit.enable": "Изменить видимость", "components.Discover.DiscoverSliderEdit.enable": "Изменить видимость",
"components.Discover.DiscoverSliderEdit.remove": "Удалить", "components.Discover.DiscoverSliderEdit.remove": "Удалить",
"components.Discover.DiscoverTv.activefilters": "{count, plural, one {# Активный фильтр} other {# Активные фильтры}}", "components.Discover.DiscoverTv.activefilters": "{count, plural, one {# Активен фильтр} other {# Активные фильтры }}",
"components.Discover.DiscoverTv.discovertv": "Сериалы", "components.Discover.DiscoverTv.discovertv": "Сериалы",
"components.Discover.DiscoverTv.sortPopularityAsc": "Популярность по возрастанию", "components.Discover.DiscoverTv.sortPopularityAsc": "Популярность по возрастанию",
"components.Discover.DiscoverTv.sortPopularityDesc": "Популярность по убыванию", "components.Discover.DiscoverTv.sortPopularityDesc": "Популярность по убыванию",
@@ -1221,5 +1221,22 @@
"components.Selector.showless": "Показать меньше", "components.Selector.showless": "Показать меньше",
"components.Selector.showmore": "Показать больше", "components.Selector.showmore": "Показать больше",
"components.Settings.SettingsJobsCache.imagecachesize": "Размер кэша", "components.Settings.SettingsJobsCache.imagecachesize": "Размер кэша",
"components.Settings.validationUrlBaseLeadingSlash": "Базовый URL должен начинаться с косой черты" "components.Settings.validationUrlBaseLeadingSlash": "Базовый URL должен начинаться с косой черты",
"components.Discover.FilterSlideover.tmdbuservotecount": "Количество голосов пользователей TMDB",
"components.Discover.FilterSlideover.voteCount": "Количество голосов между {minValue} и {maxValue}",
"components.Discover.tmdbmoviestreamingservices": "Стриминговые сервисы фильмов TMDB",
"components.Discover.tmdbtvstreamingservices": "Стриминговые сервисы сериалов TMDB",
"components.Settings.RadarrModal.tagRequestsInfo": "Автоматически добавлять дополнительный тег с ID и именем запросившего пользователя",
"components.Settings.RadarrModal.tagRequests": "Теги запросов",
"components.MovieDetails.imdbuserscore": "Оценка пользователей IMDB",
"components.Settings.SettingsJobsCache.availability-sync": "Синхронизация доступности медиа",
"components.Settings.SonarrModal.tagRequests": "Теги запросов",
"components.Settings.SonarrModal.tagRequestsInfo": "Автоматически добавлять тег с ID и именем запросившего пользователя",
"i18n.collection": "Коллекция",
"components.Settings.Notifications.NotificationsPushover.sound": "Звук уведомления",
"components.UserProfile.UserSettings.UserNotificationSettings.deviceDefault": "Устройство по умолчанию",
"components.Settings.SonarrModal.animeSeriesType": "Тип аниме-сериала",
"components.Settings.SonarrModal.seriesType": "Тип сериала",
"components.UserProfile.UserSettings.UserNotificationSettings.sound": "Звук уведомления",
"components.Settings.Notifications.NotificationsPushover.deviceDefault": "Устройство по умолчанию"
} }

View File

@@ -438,7 +438,7 @@
"components.Settings.Notifications.NotificationsWebhook.webhookUrl": "Webhook adresa", "components.Settings.Notifications.NotificationsWebhook.webhookUrl": "Webhook adresa",
"components.ManageSlideOver.manageModalAdvanced": "Napredno", "components.ManageSlideOver.manageModalAdvanced": "Napredno",
"components.ManageSlideOver.manageModalMedia": "Mediji", "components.ManageSlideOver.manageModalMedia": "Mediji",
"components.Settings.Notifications.NotificationsWebhook.customJson": "JSON Payload", "components.Settings.Notifications.NotificationsWebhook.customJson": "JSON zadržaj",
"components.Settings.SettingsLogs.label": "Labela", "components.Settings.SettingsLogs.label": "Labela",
"components.Settings.SettingsLogs.level": "Ozbiljnost", "components.Settings.SettingsLogs.level": "Ozbiljnost",
"components.Settings.SettingsAbout.Releases.versionChangelog": "{version} Dnevnik promena", "components.Settings.SettingsAbout.Releases.versionChangelog": "{version} Dnevnik promena",

File diff suppressed because it is too large Load Diff

1242
src/i18n/locale/uk.json Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -281,7 +281,7 @@
"components.CollectionDetails.requestcollection": "提交系列请求", "components.CollectionDetails.requestcollection": "提交系列请求",
"components.CollectionDetails.overview": "简介", "components.CollectionDetails.overview": "简介",
"components.CollectionDetails.numberofmovies": "{count} 部电影", "components.CollectionDetails.numberofmovies": "{count} 部电影",
"components.AppDataWarning.dockerVolumeMissingDescription": "必须使用链接挂载bind mount指定某个宿主机器的文件夹跟容器内的 <code>{appDataPath}</code> 文件夹连通,才能保存 Overseerr 的配置和数据。", "components.AppDataWarning.dockerVolumeMissingDescription": "卷(<code>{appDataPath}</code>)挂载配置不正确,当容器终止或重启时所有数据都会被清除。",
"components.PersonDetails.ascharacter": "饰演 {character}", "components.PersonDetails.ascharacter": "饰演 {character}",
"pages.somethingwentwrong": "出了点问题", "pages.somethingwentwrong": "出了点问题",
"pages.serviceunavailable": "服务器无法使用", "pages.serviceunavailable": "服务器无法使用",
@@ -1174,7 +1174,7 @@
"components.Discover.PlexWatchlistSlider.emptywatchlist": "您的 <PlexWatchlistSupportLink>Plex 关注列表</PlexWatchlistSupportLink>中的媒体会显示在这里。", "components.Discover.PlexWatchlistSlider.emptywatchlist": "您的 <PlexWatchlistSupportLink>Plex 关注列表</PlexWatchlistSupportLink>中的媒体会显示在这里。",
"components.Selector.starttyping": "开始打字以进行搜索。", "components.Selector.starttyping": "开始打字以进行搜索。",
"components.Discover.CreateSlider.starttyping": "开始打字以进行搜索。", "components.Discover.CreateSlider.starttyping": "开始打字以进行搜索。",
"components.Discover.CreateSlider.needresults": "需要至少有 1 个结果。", "components.Discover.CreateSlider.needresults": "需要至少有 1 个结果。",
"components.Selector.showless": "显示更少", "components.Selector.showless": "显示更少",
"components.Discover.resetfailed": "重置探索媒体设置时出了点问题。", "components.Discover.resetfailed": "重置探索媒体设置时出了点问题。",
"components.Settings.SettingsMain.validationApplicationTitle": "你必须提供一个应用程序标题", "components.Settings.SettingsMain.validationApplicationTitle": "你必须提供一个应用程序标题",
@@ -1231,5 +1231,12 @@
"components.Settings.SonarrModal.tagRequests": "标记请求", "components.Settings.SonarrModal.tagRequests": "标记请求",
"i18n.collection": "合集", "i18n.collection": "合集",
"components.Discover.FilterSlideover.tmdbuservotecount": "TMDB 用户评分数", "components.Discover.FilterSlideover.tmdbuservotecount": "TMDB 用户评分数",
"components.Settings.SonarrModal.tagRequestsInfo": "自动添加带有请求者的用户 ID 和显示名称的附加标签" "components.Settings.SonarrModal.tagRequestsInfo": "自动添加带有请求者的用户 ID 和显示名称的附加标签",
"components.MovieDetails.imdbuserscore": "IMDB 用户评分",
"components.Settings.Notifications.NotificationsPushover.sound": "通知提示音",
"components.UserProfile.UserSettings.UserNotificationSettings.deviceDefault": "默认设备",
"components.Settings.SonarrModal.animeSeriesType": "动漫剧集类型",
"components.Settings.SonarrModal.seriesType": "剧集类型",
"components.UserProfile.UserSettings.UserNotificationSettings.sound": "通知提示音",
"components.Settings.Notifications.NotificationsPushover.deviceDefault": "默认设备"
} }

View File

@@ -28,6 +28,8 @@ const loadLocaleData = (locale: AvailableLocale): Promise<any> => {
switch (locale) { switch (locale) {
case 'ar': case 'ar':
return import('../i18n/locale/ar.json'); return import('../i18n/locale/ar.json');
case 'bg':
return import('../i18n/locale/bg.json');
case 'ca': case 'ca':
return import('../i18n/locale/ca.json'); return import('../i18n/locale/ca.json');
case 'cs': case 'cs':
@@ -40,8 +42,14 @@ const loadLocaleData = (locale: AvailableLocale): Promise<any> => {
return import('../i18n/locale/el.json'); return import('../i18n/locale/el.json');
case 'es': case 'es':
return import('../i18n/locale/es.json'); return import('../i18n/locale/es.json');
case 'fi':
return import('../i18n/locale/fi.json');
case 'fr': case 'fr':
return import('../i18n/locale/fr.json'); return import('../i18n/locale/fr.json');
case 'he':
return import('../i18n/locale/he.json');
case 'hi':
return import('../i18n/locale/hi.json');
case 'hr': case 'hr':
return import('../i18n/locale/hr.json'); return import('../i18n/locale/hr.json');
case 'hu': case 'hu':
@@ -64,6 +72,8 @@ const loadLocaleData = (locale: AvailableLocale): Promise<any> => {
return import('../i18n/locale/pt_BR.json'); return import('../i18n/locale/pt_BR.json');
case 'pt-PT': case 'pt-PT':
return import('../i18n/locale/pt_PT.json'); return import('../i18n/locale/pt_PT.json');
case 'ro':
return import('../i18n/locale/ro.json');
case 'ru': case 'ru':
return import('../i18n/locale/ru.json'); return import('../i18n/locale/ru.json');
case 'sq': case 'sq':
@@ -72,6 +82,8 @@ const loadLocaleData = (locale: AvailableLocale): Promise<any> => {
return import('../i18n/locale/sr.json'); return import('../i18n/locale/sr.json');
case 'sv': case 'sv':
return import('../i18n/locale/sv.json'); return import('../i18n/locale/sv.json');
case 'uk':
return import('../i18n/locale/uk.json');
case 'zh-CN': case 'zh-CN':
return import('../i18n/locale/zh_Hans.json'); return import('../i18n/locale/zh_Hans.json');
case 'zh-TW': case 'zh-TW':