Compare commits

...

21 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
Ryan Cohen
be047427df build: correct node version in snapcraft (#3678) 2023-11-06 20:43:03 +09:00
59 changed files with 3810 additions and 570 deletions

View File

@@ -908,6 +908,69 @@
"contributions": [
"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>",

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://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 -->
<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 -->
</p>
@@ -202,6 +202,15 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
</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="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>
</tbody>
</table>

View File

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

View File

@@ -2,6 +2,7 @@ import type { PlexDevice } from '@server/interfaces/api/plexInterfaces';
import cacheManager from '@server/lib/cache';
import { getSettings } from '@server/lib/settings';
import logger from '@server/logger';
import { randomUUID } from 'node:crypto';
import xml2js from 'xml2js';
import ExternalAPI from './externalapi';
@@ -127,6 +128,11 @@ export interface PlexWatchlistItem {
title: string;
}
export interface PlexWatchlistCache {
etag: string;
response: WatchlistResponse;
}
class PlexTvAPI extends ExternalAPI {
private authToken: string;
@@ -270,6 +276,11 @@ class PlexTvAPI extends ExternalAPI {
items: PlexWatchlistItem[];
}> {
try {
const watchlistCache = cacheManager.getCache('plexwatchlist');
let cachedWatchlist = watchlistCache.data.get<PlexWatchlistCache>(
this.authToken
);
const response = await this.axios.get<WatchlistResponse>(
'/library/sections/watchlist/all',
{
@@ -277,12 +288,29 @@ class PlexTvAPI extends ExternalAPI {
'X-Plex-Container-Start': offset,
'X-Plex-Container-Size': size,
},
headers: {
'If-None-Match': cachedWatchlist?.etag,
},
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(
(response.data.MediaContainer.Metadata ?? []).map(
(cachedWatchlist?.response.MediaContainer.Metadata ?? []).map(
async (watchlistItem) => {
const detailedResponse = await this.getRolling<MetadataResponse>(
`/library/metadata/${watchlistItem.ratingKey}`,
@@ -320,7 +348,7 @@ class PlexTvAPI extends ExternalAPI {
return {
offset,
size,
totalSize: response.data.MediaContainer.totalSize,
totalSize: cachedWatchlist?.response.MediaContainer.totalSize ?? 0,
items: filteredList,
};
} 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;

View File

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

View File

@@ -1,6 +1,7 @@
import availabilitySync from '@server/lib/availabilitySync';
import downloadTracker from '@server/lib/downloadtracker';
import ImageProxy from '@server/lib/imageproxy';
import refreshToken from '@server/lib/refreshToken';
import { plexFullScanner, plexRecentScanner } from '@server/lib/scanners/plex';
import { radarrScanner } from '@server/lib/scanners/radarr';
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 watchlistSync from '@server/lib/watchlistsync';
import logger from '@server/logger';
import random from 'lodash/random';
import schedule from 'node-schedule';
interface ScheduledJob {
@@ -62,30 +62,20 @@ export const startJobs = (): void => {
});
// Watchlist Sync
const watchlistSyncJob: ScheduledJob = {
scheduledJobs.push({
id: 'plex-watchlist-sync',
name: 'Plex Watchlist Sync',
type: 'process',
interval: 'fixed',
interval: 'seconds',
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', {
label: 'Jobs',
});
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
scheduledJobs.push({
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' });
};

View File

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

View File

@@ -14,7 +14,12 @@ import {
import type { NotificationAgent, NotificationPayload } from './agent';
import { BaseAgent } from './agent';
interface PushoverPayload {
interface PushoverImagePayload {
attachment_base64: string;
attachment_type: string;
}
interface PushoverPayload extends PushoverImagePayload {
token: string;
user: string;
title: string;
@@ -43,10 +48,36 @@ class PushoverAgent
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,
payload: NotificationPayload
): Partial<PushoverPayload> {
): Promise<Partial<PushoverPayload>> {
const { applicationUrl, applicationTitle } = getSettings().main;
const title = payload.event ?? payload.subject;
@@ -122,6 +153,16 @@ class PushoverAgent
? `View ${payload.issue ? 'Issue' : 'Media'} in ${applicationTitle}`
: 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 {
title,
message,
@@ -129,6 +170,8 @@ class PushoverAgent
url_title,
priority,
html: 1,
attachment_base64,
attachment_type,
};
}
@@ -138,7 +181,10 @@ class PushoverAgent
): Promise<boolean> {
const settings = this.getSettings();
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
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 processableSeasons: ProcessableSeason[] = [];
const filteredSeasons = seasons.filter((sn) => sn.season_number !== 0);
for (const season of filteredSeasons) {
for (const season of seasons) {
const matchedPlexSeason = metadata.Children?.Metadata.find(
(md) => Number(md.index) === season.season_number
);

View File

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

View File

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

View File

@@ -62,7 +62,7 @@ class WatchlistSync {
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(
response.items.map((i) => i.tmdbId)

View File

@@ -12,7 +12,7 @@ collectionRoutes.get<{ id: string }>('/:id', async (req, res, next) => {
try {
const collection = await tmdb.getCollection({
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(

View File

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

View File

@@ -235,7 +235,7 @@ router.get('/genres/movie', isAuthenticated(), async (req, res, next) => {
try {
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);
@@ -256,7 +256,7 @@ router.get('/genres/tv', isAuthenticated(), async (req, res, next) => {
try {
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);

View File

@@ -17,7 +17,7 @@ movieRoutes.get('/:id', async (req, res, next) => {
try {
const tmdbMovie = await tmdb.getMovie({
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);
@@ -43,7 +43,7 @@ movieRoutes.get('/:id/recommendations', async (req, res, next) => {
const results = await tmdb.getMovieRecommendations({
movieId: Number(req.params.id),
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(
@@ -84,7 +84,7 @@ movieRoutes.get('/:id/similar', async (req, res, next) => {
const results = await tmdb.getMovieSimilar({
movieId: Number(req.params.id),
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(

View File

@@ -16,7 +16,7 @@ personRoutes.get('/:id', async (req, res, next) => {
try {
const person = await tmdb.getPerson({
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));
} catch (e) {
@@ -38,7 +38,7 @@ personRoutes.get('/:id/combined_credits', async (req, res, next) => {
try {
const combinedCredits = await tmdb.getPersonCombinedCredits({
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(

View File

@@ -20,7 +20,7 @@ searchRoutes.get('/', async (req, res, next) => {
.match(searchProvider.pattern) as RegExpMatchArray;
results = await searchProvider.search({
id,
language: req.locale ?? (req.query.language as string),
language: (req.query.language as string) ?? req.locale,
query: queryString,
});
} else {
@@ -29,7 +29,7 @@ searchRoutes.get('/', async (req, res, next) => {
results = await tmdb.searchMulti({
query: queryString,
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 {
const tv = await tmdb.getTvShow({
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);
@@ -40,7 +40,7 @@ tvRoutes.get('/:id/season/:seasonNumber', async (req, res, next) => {
const season = await tmdb.getTvSeason({
tvId: Number(req.params.id),
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));
@@ -65,7 +65,7 @@ tvRoutes.get('/:id/recommendations', async (req, res, next) => {
const results = await tmdb.getTvRecommendations({
tvId: Number(req.params.id),
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(
@@ -105,7 +105,7 @@ tvRoutes.get('/:id/similar', async (req, res, next) => {
const results = await tmdb.getTvSimilar({
tvId: Number(req.params.id),
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(

View File

@@ -16,7 +16,7 @@ architectures:
parts:
overseerr:
plugin: nodejs
nodejs-version: '18.8.2'
nodejs-version: '18.18.2'
nodejs-package-manager: 'yarn'
nodejs-yarn-version: v1.22.19
build-packages:

View File

@@ -73,6 +73,12 @@ const studios: Studio[] = [
'https://image.tmdb.org/t/p/w780_filter(duotone,ffffff,bababa)/2Tc1P3Ac8M479naPp1kYT3izLS5.png',
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 = () => {

View File

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

View File

@@ -500,7 +500,7 @@ const MovieDetails = ({ movie }: MovieDetailsProps) => {
}}
/>
</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>
<Button buttonSize="sm">
{intl.formatMessage(globalMessages.view)}

View File

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

View File

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

View File

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

View File

@@ -41,7 +41,6 @@ const messages = defineMessages({
season: 'Season',
numberofepisodes: '# of Episodes',
seasonnumber: 'Season {number}',
extras: 'Extras',
errorediting: 'Something went wrong while editing the request.',
requestedited: 'Request for <strong>{title}</strong> edited successfully!',
requestApproved: 'Request for <strong>{title}</strong> approved!',
@@ -232,9 +231,7 @@ const TvRequestModal = ({
const getAllSeasons = (): number[] => {
return (data?.seasons ?? [])
.filter(
(season) => season.seasonNumber !== 0 && season.episodeCount !== 0
)
.filter((season) => season.episodeCount !== 0)
.map((season) => season.seasonNumber);
};
@@ -557,10 +554,7 @@ const TvRequestModal = ({
</thead>
<tbody className="divide-y divide-gray-700">
{data?.seasons
.filter(
(season) =>
season.seasonNumber !== 0 && season.episodeCount !== 0
)
.filter((season) => season.episodeCount !== 0)
.map((season) => {
const seasonRequest = getSeasonRequest(
season.seasonNumber
@@ -637,7 +631,7 @@ const TvRequestModal = ({
</td>
<td className="whitespace-nowrap px-1 py-4 text-sm font-medium leading-5 text-gray-100 md:px-6">
{season.seasonNumber === 0
? intl.formatMessage(messages.extras)
? intl.formatMessage(globalMessages.specials)
: intl.formatMessage(messages.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-full-scan': 'Plex Full Library Scan',
'plex-watchlist-sync': 'Plex Watchlist Sync',
'plex-refresh-token': 'Plex Refresh Token',
'availability-sync': 'Media Availability Sync',
'radarr-scan': 'Radarr Scan',
'sonarr-scan': 'Sonarr Scan',

View File

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

View File

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

View File

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

View File

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

View File

@@ -253,7 +253,7 @@
"components.PermissionEdit.viewrequests": "الإطلاع على الطلبات",
"components.PermissionEdit.viewrequestsDescription": "إعطاء صلاحية بالإطلاع على جميع الطلبات المقدمة من قبل المستخدمين.",
"components.PersonDetails.alsoknownas": "أيضا يُعرف بإسم: {names}",
"components.PersonDetails.appearsin": "المظهر",
"components.PersonDetails.appearsin": "الظهور",
"components.PersonDetails.ascharacter": "{character} شارك بِدوْر",
"components.PersonDetails.birthdate": "ولد في {birthdate}",
"components.PersonDetails.crewmember": "عضو",
@@ -673,7 +673,7 @@
"components.Settings.plexlibraries": "مكتبات بليكس",
"components.Settings.noDefaultServer": "على الأقل {serverType} سيرفر واحد يجب أن يكون معدا كإفتراضي لإتاحة تنفيذ طلبات الـ {mediaType}.",
"components.Settings.plexsettings": "إعدادات بليكس",
"components.Settings.serviceSettingsDescription": "قم بإعداد {serverType} سيرفراتك بالإسفل. تستطيع الاتصال بأكثر من سيرفر {serverType} ولكن إثنان فقط يمكن إعدادهما كإفتراضيين واحد لمحتوى الفور كي والاخر لغير الفور كي. الذين يملكون إذونات مسؤول بإمكانهم تجاوز السيرفر المخصص لتنفيذ الطلبات الجديدة قبل الموافقة.",
"components.Settings.serviceSettingsDescription": "قم بإعداد {serverType} بالإسفل.تستطيع الاتصال بأكثر من سيرفر {serverType} ,ولكن إثنان فقط يمكن إعدادهما كإفتراضيين (واحد لجودة الفور كي والأخر لغير جودة الفور كي). أصحاب الصلاحيات الإدارية بإمكانهم تجاوز السيرفر المستخدم قبل تأكيدهم لأي طلب محتوى جديد.",
"components.Settings.serverpresetManualMessage": "ضبط يدوي",
"components.Settings.sonarrsettings": "إعدادات سونار",
"components.Settings.tautulliSettingsDescription": "بشكل إختياري أضبط إعدادات سيرفرك الخاص بـ Tautulli.أوفرسيرر سيقوم بجلب بيانات سجل المشاهدة لمحتوى بليكس من Tautulli.",
@@ -1232,5 +1232,11 @@
"components.Discover.CreateSlider.validationTitlerequired": "يجب تقديم عنوان.",
"components.Discover.DiscoverMovieKeyword.keywordMovies": "{keywordTitle} الأفلام",
"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.TvGenreList.seriesgenres": "Gèneres de Sèries",
"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.MovieGenreList.moviegenres": "Gèneres de Pel·lícules",
"components.Discover.DiscoverTvLanguage.languageSeries": "Sèries en {language}",
@@ -397,7 +397,7 @@
"components.TvDetails.originaltitle": "Títol original",
"components.TvDetails.originallanguage": "Idioma original",
"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.episodeRuntimeMinutes": "{runtime} minuts",
"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.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.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.validationApplicationUrlTrailingSlash": "L'URL no pot acabar amb una barra inclinada final",
"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.nooptions": "Sense resultats.",
"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.searchGenres": "Cercar per gènere…",
"components.Discover.CreateSlider.searchKeywords": "Cercar per paraules clau…",
@@ -1151,7 +1151,7 @@
"components.Discover.networks": "Emissors",
"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.tmdbnetwork": "Emissors TMDB",
"components.Discover.tmdbnetwork": "Plataformes TMDB",
"components.Discover.FilterSlideover.tmdbuserscore": "Puntuació d'usuaris TMDB",
"components.Discover.tvgenres": "Gèneres de sèries",
"components.Discover.DiscoverTvKeyword.keywordSeries": "Sèries {keywordTitle}",
@@ -1224,5 +1224,19 @@
"components.StatusBadge.seasonepisodenumber": "S{seasonNumber}E{episodeNumber}",
"components.Settings.SettingsJobsCache.availability-sync": "Sincronització de disponibilitat de contingut",
"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.hostname": "Název hostitele nebo IP adresa",
"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.toastTautulliSettingsFailure": "Při ukládání nastavení Tautulli se něco pokazilo.",
"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.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.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.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.",
@@ -1194,7 +1194,7 @@
"components.Settings.SettingsMain.applicationurl": "Adresa URL aplikace",
"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.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.csrfProtectionTip": "Nastavení externího přístupu k rozhraní API pouze pro čtení (vyžaduje protokol HTTPS)",
"components.Settings.SettingsMain.general": "Obecné",
@@ -1231,5 +1231,12 @@
"components.Discover.FilterSlideover.tmdbuservotecount": "Počet hlasů uživatelů 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.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.originallanguage": "Originalsprog",
"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.budget": "Budget",
"components.MovieDetails.overview": "Overblik",
@@ -539,7 +539,7 @@
"components.Settings.Notifications.validationSmtpPortRequired": "Du skal angive et gyldigt port-nummer",
"components.Settings.Notifications.webhookUrl": "Webhook URL",
"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.createradarr": "Tilføj Ny Radarr Server",
"components.Settings.RadarrModal.default4kserver": "Standard 4K Server",
@@ -625,7 +625,7 @@
"components.Settings.SettingsLogs.label": "Label",
"components.Settings.SettingsLogs.level": "Alvorlighed",
"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.loadingprofiles": "Indlæser kvalitetsprofiler…",
"components.Settings.manualscan": "Manuel Biblioteksskanning",
@@ -794,7 +794,7 @@
"components.Setup.configureplex": "Konfigurér Plex",
"components.Settings.validationPortRequired": "Du skal angive et gyldigt port-nummer",
"components.Setup.configureservices": "Konfigurér Tjenester",
"components.Setup.continue": "Fortsæt",
"components.Setup.continue": "Videre",
"components.Setup.finish": "Fuldfør Opsætning",
"components.Setup.finishing": "Færdiggører…",
"components.Setup.loginwithplex": "Log in med Plex",
@@ -1231,5 +1231,12 @@
"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",
"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.Settings.SonarrModal.tagRequests": "Tag Anforderungen",
"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.plexwatchlistsyncseriestip": "Ζητήστε αυτόματα σειρές που βρίσκονται στη <PlexWatchlistSupportLink>λίστα παρακολούθησης του Plex</PlexWatchlistSupportLink>",
"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.edit": "Edit Request",
"components.RequestModal.errorediting": "Something went wrong while editing the request.",
"components.RequestModal.extras": "Extras",
"components.RequestModal.numberofepisodes": "# of Episodes",
"components.RequestModal.pending4krequest": "Pending 4K Request",
"components.RequestModal.pendingapproval": "Your request is pending approval.",
@@ -768,6 +767,7 @@
"components.Settings.SettingsJobsCache.nextexecution": "Next Execution",
"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-refresh-token": "Plex Refresh Token",
"components.Settings.SettingsJobsCache.plex-watchlist-sync": "Plex Watchlist Sync",
"components.Settings.SettingsJobsCache.process": "Process",
"components.Settings.SettingsJobsCache.radarr-scan": "Radarr Scan",

View File

@@ -1232,5 +1232,11 @@
"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.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.qualityprofile": "Profil de qualité",
"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.selectRootFolder": "Sélectionner un dossier racine",
"components.Settings.RadarrModal.server4k": "Serveur 4K",
@@ -162,7 +162,7 @@
"i18n.tvshows": "Séries",
"i18n.unavailable": "Indisponible",
"pages.oops": "Oups",
"pages.returnHome": "Retourner à l'acceuil",
"pages.returnHome": "Retourner à l'accueil",
"components.TvDetails.TvCast.fullseriescast": "Casting complet de la série",
"components.MovieDetails.MovieCast.fullcast": "Casting complet",
"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.versionChangelog": "Journal des modifications de la version {version}",
"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.currentversion": "Actuelle",
"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.markallseasons4kavailable": "Marquer toutes les saisons comme disponibles en 4K",
"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.tautulliApiKey": "Clé API",
"components.Settings.tautulliSettings": "Paramètres Tautulli",
@@ -994,9 +994,9 @@
"components.ManageSlideOver.alltime": "Tout le temps",
"components.ManageSlideOver.manageModalMedia": "Média(s)",
"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.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.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",
@@ -1191,7 +1191,7 @@
"components.Settings.SettingsMain.region": "Région à découvrir",
"components.Settings.SettingsMain.regionTip": "Filtrer le contenu par disponibilité régionale",
"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.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)",
@@ -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",
"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.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.Login.validationemailrequired": "חובה לספק כתובת מייל חוקית",
"components.NotificationTypeSelector.userissuereopenedDescription": "קבל התראה כשבעיות שפתחת נפתחות מחדש.",
"components.AppDataWarning.dockerVolumeMissingDescription": "ה <code>{appDataPath}</code> אחסון לא הוגדר כראוי. כל המידע יוסר כאשר הקונטיינר יעצור או יותחל מחדש.",
"components.AppDataWarning.dockerVolumeMissingDescription": "רכיב האחסון <code>{appDataPath}</code> לא הוגדר כראוי. כל המידע יוסר כאשר הקונטיינר יעצור או יותחל מחדש.",
"components.CollectionDetails.overview": "תצוגה כללית",
"components.CollectionDetails.numberofmovies": "{כמות} סרטים",
"components.CollectionDetails.requestcollection": "אוסף בקשות",
@@ -135,5 +135,41 @@
"components.Login.loginerror": "משהו השתבש בזמן ההתחברות.",
"components.Login.password": "סיסמה",
"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.DiscoverTvLanguage.languageSeries": "{language} serije",
"components.Discover.DiscoverWatchlist.discoverwatchlist": "Tvoj Plex popis gledanja",
"components.Discover.MovieGenreList.moviegenres": "Filmski žanrovi",
"components.Discover.StudioSlider.studios": "Studio",
"components.Discover.TvGenreList.seriesgenres": "Serijski žanrovi",
"components.Discover.TvGenreSlider.tvgenres": "Serijski žanrovi",
"components.Discover.MovieGenreList.moviegenres": "Žanrovi filmova",
"components.Discover.StudioSlider.studios": "Studiji",
"components.Discover.TvGenreList.seriesgenres": "Žanrovi serija",
"components.Discover.TvGenreSlider.tvgenres": "Žanrovi serija",
"components.Discover.plexwatchlist": "Tvoj Plex popis gledanja",
"components.Discover.popularmovies": "Popularni filmovi",
"components.Discover.recentlyAdded": "Nedavno dodani",
@@ -33,9 +33,9 @@
"components.AirDateBadge.airedrelative": "Emitirano {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.Discover.DiscoverWatchlist.watchlist": "Plex popis za gledanje",
"components.Discover.emptywatchlist": "Filmovi dodani na Vaš <PlexWatchlistSupportLink> popis za gledanje </PlexWatchlistSupportLink> pojaviti će se ovdje.",
"components.Discover.MovieGenreSlider.moviegenres": "Filmski žanrovi",
"components.Discover.DiscoverWatchlist.watchlist": "Plex popis gledanja",
"components.Discover.emptywatchlist": "Mediji koji su dodani u tvoj <PlexWatchlistSupportLink>Plex popis gledanja</PlexWatchlistSupportLink> pojavit će se ovdje.",
"components.Discover.MovieGenreSlider.moviegenres": "Žanrovi filmova",
"components.Discover.NetworkSlider.networks": "Mreže",
"components.Discover.populartv": "Popularne serije",
"components.Discover.upcomingtv": "Nadolazeće serije",
@@ -67,7 +67,7 @@
"components.IssueModal.issueAudio": "Zvuk",
"components.IssueModal.issueSubtitles": "Podnaslov",
"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.requests": "Zahtjevi",
"components.Layout.VersionStatus.streamstable": "Overseerr stablina verzija",
@@ -78,7 +78,7 @@
"components.ManageSlideOver.movie": "film",
"components.Login.validationemailrequired": "Moraš zadati valjanju email adresu",
"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.manageModalNoRequests": "Nema zahtjeva.",
"components.ManageSlideOver.manageModalMedia": "Mediji",
@@ -93,13 +93,13 @@
"components.MediaSlider.ShowMoreCard.seemore": "Vidi više",
"components.MovieDetails.markavailable": "Označi kao dostupno",
"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.playonplex": "Reproduciraj na Plexu",
"components.MovieDetails.overviewunavailable": "Pregled nedostupan.",
"components.MovieDetails.reportissue": "Prijavi problem",
"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.showmore": "Prikaži više",
"components.MovieDetails.similar": "Slični naslovi",
@@ -128,7 +128,7 @@
"components.IssueList.IssueItem.opened": "Otvoren",
"components.IssueList.IssueItem.problemepisode": "Zahvaćena epizoda",
"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.showallissues": "Prikaži sve probleme",
"components.IssueList.sortAdded": "Najnoviji",
@@ -142,7 +142,7 @@
"components.IssueModal.CreateIssueModal.season": "Sezona {seasonNumber}",
"components.IssueModal.CreateIssueModal.submitissue": "Pošalji problem",
"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.validationMessageRequired": "Moraš navesti opis",
"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.signin": "Prijavi se",
"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.signinwithoverseerr": "Koristi tvoj {applicationTitle} račun",
"components.Login.validationpasswordrequired": "Moraš navesti lozinku",
@@ -186,36 +186,36 @@
"components.MovieDetails.originallanguage": "Izvorni jezik",
"components.MovieDetails.MovieCrew.fullcrew": "Svi suradnici",
"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.releasedate": "{releaseCount, plural, one {Datum izlaska} other {Datumi izlaska}}",
"components.MovieDetails.rtcriticsscore": "Tomatometer na Rotten Tomatoes",
"components.MovieDetails.releasedate": "{releaseCount, plural, one {Datum izdanja} few {Datumi izdanja} other {Datumi izdanja}}",
"components.MovieDetails.rtcriticsscore": "Rotten Tomatoes Tomatometar",
"components.MovieDetails.runtime": "{minutes} min",
"components.MovieDetails.studio": "{studioCount, plural, one {studio} few {studija} other {studija}}",
"components.MovieDetails.theatricalrelease": "Izdanje u kinima",
"components.MovieDetails.tmdbuserscore": "TMDB ocjena korisnika",
"components.MovieDetails.viewfullcrew": "Prikaz svih suradnika",
"components.MovieDetails.watchtrailer": "Gledaj najavu",
"components.NotificationTypeSelector.adminissuecommentDescription": "Primi obavijest kad drugi korisnici komentiraju probleme.",
"components.NotificationTypeSelector.adminissuereopenedDescription": "Primi obavijest kad drugi korisnici ponovno otvore probleme.",
"components.NotificationTypeSelector.adminissueresolvedDescription": "Primi obavijest kad drugi korisnici riješe probleme.",
"components.NotificationTypeSelector.adminissuecommentDescription": "Primi obavijest kada drugi korisnici komentiraju probleme.",
"components.NotificationTypeSelector.adminissuereopenedDescription": "Primi obavijest kada drugi korisnici ponovo otvore probleme.",
"components.NotificationTypeSelector.adminissueresolvedDescription": "Primi obavijest kada drugi korisnici riješe probleme.",
"components.NotificationTypeSelector.issuecomment": "Komentar za problem",
"components.NotificationTypeSelector.issuecreated": "Problem prijavljen",
"components.NotificationTypeSelector.issuecreatedDescription": "Pošalji obavijest kada se problem prijavi.",
"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.mediadeclinedDescription": "Pošalji obavijesti kada su medijski zahtjevi odbijeni.",
"components.NotificationTypeSelector.mediaavailableDescription": "Pošalji obavijesti kada zahtjevi za medije postanu dostupni.",
"components.NotificationTypeSelector.mediadeclinedDescription": "Pošalji obavijesti kada se zahtjevi za medije odbiju.",
"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.mediaavailable": "Zahtjev dostupan",
"components.NotificationTypeSelector.mediafailedDescription": "Pošalji obavijesti kada se medijski zahtjevi ne uspiju dodati u Radarr ili Sonarr.",
"components.NotificationTypeSelector.userissuecommentDescription": "Primi obavijest kad tvoji prijavljeni problemi dobiju nove komentare.",
"components.NotificationTypeSelector.mediaavailable": "Zahtjev je dostupan",
"components.NotificationTypeSelector.mediafailedDescription": "Pošalji obavijesti kada se zahtjevi za medije ne uspiju dodati u Radarr ili Sonarr.",
"components.NotificationTypeSelector.userissuecommentDescription": "Primi obavijest kada tvoji prijavljeni problemi dobiju nove komentare.",
"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.usermediarequestedDescription": "Primi obavijest kad drugi korisnici pošalju nove medijske zahtjeve koji zahtijevaju odobrenje.",
"components.NotificationTypeSelector.usermediaAutoApprovedDescription": "Primi obavijest kad drugi korisnici pošalju nove medijske zahtjeve koji se automatski odobravaju.",
"components.NotificationTypeSelector.usermediadeclinedDescription": "Primi obavijest kad se tvoji medijski zahtjevi odbiju.",
"components.NotificationTypeSelector.usermediafailedDescription": "Primi obavijest kada se zahtjevi za medije ne uspiju dodati u Radarr ili Sonarr.",
"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 zahtjeve za medije koji se automatski odobravaju.",
"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.advancedrequest": "Napredni zahtjevi",
"components.PermissionEdit.autoapprove4k": "Automatsko odobravanje 4K",
@@ -233,24 +233,24 @@
"components.RequestList.RequestItem.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.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.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.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": "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.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.NotificationTypeSelector.mediaAutoApprovedDescription": "Pošalji obavijesti kada korisnici pošalju novi medijski zahtjev koji se automatski odobrava.",
"components.NotificationTypeSelector.mediaapproved": "Zahtjev odobren",
"components.NotificationTypeSelector.mediaapprovedDescription": "Pošalji obavijesti kada se medijski zahtjev ručno odobri.",
"components.NotificationTypeSelector.mediaautorequestedDescription": "Primi obavijest kad se novi medijski zahtjevi automatski podnesu za stavke u tvom Plex popisu gledanja.",
"components.NotificationTypeSelector.mediaAutoApprovedDescription": "Pošalji obavijesti kada korisnici pošalju nove zahtjeve za medije koji se automatski odobravaju.",
"components.NotificationTypeSelector.mediaapproved": "Zahtjev je odobren",
"components.NotificationTypeSelector.mediaapprovedDescription": "Pošalji obavijesti kada se zahtjevi za medije ručno odobre.",
"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.mediafailed": "Obrada zahtjeva nije uspjela",
"components.NotificationTypeSelector.notificationTypes": "Vrste obavijesti",
"components.NotificationTypeSelector.userissuecreatedDescription": "Primi obavijest kad drugi korisnici prijave probleme.",
"components.NotificationTypeSelector.userissuereopenedDescription": "Primi obavijest kad se tvoji prijavljeni problemi ponovno otvore.",
"components.NotificationTypeSelector.usermediaapprovedDescription": "Primi obavijest kad se tvoji zahtjevi za medije odobre.",
"components.NotificationTypeSelector.usermediaavailableDescription": "Primi obavijest kad tvoji medijski zahtjevi postanu dostupni.",
"components.NotificationTypeSelector.userissuecreatedDescription": "Primi obavijest kada drugi korisnici prijave probleme.",
"components.NotificationTypeSelector.userissuereopenedDescription": "Primi obavijest kada se tvoji prijavljeni problemi ponovno otvore.",
"components.NotificationTypeSelector.usermediaapprovedDescription": "Primi obavijest kada se tvoji zahtjevi za medije odobre.",
"components.NotificationTypeSelector.usermediaavailableDescription": "Primi obavijest kada tvoji medijski zahtjevi postanu dostupni.",
"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.autoapprove4kMovies": "Automatsko odobravanje 4K filmova",
"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.autoapproveSeries": "Automatsko odobravanje serija",
"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.editJobSchedulePrompt": "Nova učestalost",
"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.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.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.notifications": "Obavijesti",
"components.Settings.notificationsettings": "Postavke obavijesti",
@@ -385,7 +385,7 @@
"components.Settings.serverpresetLoad": "Pritisni gumb za učitavanje dostupnih polsužitelja",
"components.Settings.serverpresetManualMessage": "Ručna konfiguracija",
"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.ssl": "SSL",
"components.Settings.tautulliApiKey": "API ključ",
@@ -399,7 +399,7 @@
"components.Settings.urlBase": "Osnovni URL",
"components.Settings.validationApiKey": "Moraš navesti valjani API ključ",
"components.Settings.webpush": "Web Push",
"components.Setup.continue": "Nastavi",
"components.Setup.continue": "Nastaviti",
"components.Setup.finish": "Završi postavljanje",
"components.Setup.tip": "Savjet",
"components.Setup.welcome": "Overseerr dobrodošlica",
@@ -451,8 +451,8 @@
"components.UserProfile.UserSettings.UserGeneralSettings.general": "Opće",
"components.UserProfile.UserSettings.UserGeneralSettings.generalsettings": "Opće postavke",
"components.UserProfile.UserSettings.UserGeneralSettings.languageDefault": "Zadano ({language})",
"components.UserProfile.UserSettings.UserGeneralSettings.originallanguageTip": "Filtriraj sadržaj prema izvornom jeziku",
"components.UserProfile.UserSettings.UserGeneralSettings.originallanguage": "Otkrij jezik",
"components.UserProfile.UserSettings.UserGeneralSettings.originallanguageTip": "Filtriraj sadržaj po izvornom jeziku",
"components.UserProfile.UserSettings.UserGeneralSettings.originallanguage": "Jezik otkrivanja",
"components.UserProfile.UserSettings.UserGeneralSettings.plexuser": "Plex korisnik",
"components.UserProfile.UserSettings.UserGeneralSettings.plexwatchlistsyncmovies": "Automatsko zahtijevanje filmova",
"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.password": "Lozinka",
"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.validationCurrentPassword": "Moraš navesti tvoju aktualnu lozinku",
"components.UserProfile.UserSettings.UserPasswordChange.validationNewPassword": "Moraš navesti novu lozinku",
@@ -494,10 +494,10 @@
"components.UserProfile.UserSettings.menuNotifications": "Obavijesti",
"components.UserProfile.UserSettings.menuPermissions": "Dozvole",
"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.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.totalrequests": "Ukupno zahtjeva",
"components.UserProfile.unlimited": "Neograničeno",
@@ -538,7 +538,7 @@
"components.PermissionEdit.viewissues": "Prikaz problema",
"components.PermissionEdit.viewrecent": "Prikaz nedavno dodanih",
"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.appearsin": "Nastupanja",
"components.PersonDetails.ascharacter": "kao {character}",
@@ -560,7 +560,7 @@
"components.RequestButton.viewrequest": "Prikaz zahtjeva",
"components.RequestButton.viewrequest4k": "Prikaz 4K zahtjeva",
"components.RequestCard.approverequest": "Odobri zahtjev",
"components.RequestCard.cancelrequest": "Prekini zahtjev",
"components.RequestCard.cancelrequest": "Otkaži zahtjev",
"components.RequestCard.declinerequest": "Odbij zahtjev",
"components.RequestCard.deleterequest": "Izbriši zahtjev",
"components.RequestCard.editrequest": "Uredi zahtjev",
@@ -578,19 +578,19 @@
"components.RequestModal.errorediting": "Dogodila se greška prilikom uređivanja zahtjeva.",
"components.RequestModal.extras": "Dodaci",
"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.RequestCard.tvdbid": "TVDB ID",
"components.RequestModal.pendingrequest": "Zahtjevai na čekanju",
"components.RequestModal.requestApproved": "Zahtjev za <strong>{title}</strong> je odobren!",
"components.RequestModal.requestcancelled": "Zahtjev za <strong>{title}</strong> je prekinut.",
"components.RequestModal.requestcollection4ktitle": "Zahtjev za zbirkom u 4K",
"components.RequestModal.requestcollectiontitle": "Zahtjev za zbirkom",
"components.RequestModal.requestcollection4ktitle": "Zatraži zbirku u 4K",
"components.RequestModal.requestcollectiontitle": "Zatraži zbirku",
"components.RequestModal.requesterror": "Dogodila se greška prilikom slanja zahtjeva.",
"components.RequestModal.requestfrom": "Zahtjev korisnika {username} čeka na odobrenje.",
"components.RequestModal.requestmovie4ktitle": "Zatraži film u 4K",
"components.RequestModal.requestseries4ktitle": "Zatraži serije u 4K",
"components.RequestModal.requestseriestitle": "Zatraži serije",
"components.RequestModal.requestseries4ktitle": "Zatraži seriju u 4K",
"components.RequestModal.requestseriestitle": "Zatraži seriju",
"components.RequestModal.season": "Sezona",
"components.RequestModal.seasonnumber": "Sezona {number}",
"components.RequestModal.selectmovies": "Odaberi filmove",
@@ -690,7 +690,7 @@
"components.Settings.RadarrModal.validationMinimumAvailabilityRequired": "Moraš odabrati najmanju dostupnost",
"components.Settings.RadarrModal.validationPortRequired": "Moraš navesti valjani broj priključka",
"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.releasedataMissing": "Podaci izdanja trenutačno nisu nedostupni.",
"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.TvDetails.episodeRuntime": "Trajanje epizode",
"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.UserList.createlocaluser": "Stvori lokalnog korisnika",
"components.UserList.deleteuser": "Izbriši korisnika",
@@ -736,11 +736,11 @@
"components.PermissionEdit.autorequestSeries": "Automatsko zahtijevanje serija",
"components.PermissionEdit.createissues": "Prijavljivanje problema",
"components.PermissionEdit.manageissues": "Upravljanje problemima",
"components.PermissionEdit.managerequests": "Upravljanje zahtjevima",
"components.PermissionEdit.managerequests": "Upravljaj zahtjevima",
"components.PermissionEdit.request": "Zahtjev",
"components.PermissionEdit.request4k": "Zahtjev za 4K",
"components.PermissionEdit.request4kMovies": "Zahtjev za 4K filmove",
"components.PermissionEdit.request4kTv": "Zahtjev za 4K serije",
"components.PermissionEdit.request4k": "Zahtjev za 4K rezoluciju",
"components.PermissionEdit.request4kMovies": "Zahtjev za filmove u 4K rezoluciji",
"components.PermissionEdit.request4kTv": "Zahtjev za serije u 4K rezoluciji",
"components.PermissionEdit.requestMovies": "Zahtjev za filmovima",
"components.PersonDetails.birthdate": "Datum rođenja {birthdate}",
"components.PersonDetails.crewmember": "Suradnik",
@@ -827,7 +827,7 @@
"components.Settings.Notifications.NotificationsWebhook.agentenabled": "Aktiviraj agenta",
"components.Settings.Notifications.NotificationsWebPush.webpushsettingssaved": "Web push postavke obavijesti su uspješno spremljene!",
"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.webhooksettingsfailed": "Neuspjelo spremanje Webhook postavki obavijesti.",
"components.Settings.Notifications.NotificationsWebhook.webhooksettingssaved": "Webhook postavke obavijesti su uspješno spremljene!",
@@ -938,7 +938,7 @@
"components.TitleCard.cleardata": "Izbriši podatke",
"components.TitleCard.mediaerror": "{mediaType} nije pronađen",
"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.episodeRuntimeMinutes": "{runtime} min",
"components.TvDetails.firstAirDate": "Datum prvog emitiranja",
@@ -948,12 +948,12 @@
"components.TvDetails.originaltitle": "Izvorni naslov",
"components.TvDetails.overview": "Pregled",
"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.productioncountries": "{countryCount, plural, one {zemlja produkcije} few {zemlje produkcije} other {zemalja produkcije}}",
"components.TvDetails.recommendations": "Preporuke",
"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.similar": "Slične serije",
"components.TvDetails.status4k": "4K {status}",
@@ -983,7 +983,7 @@
"components.UserProfile.UserSettings.UserGeneralSettings.movierequestlimit": "Ograničenje zahtjeva za filmove",
"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.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.toastSettingsSuccess": "Postavke su uspješno spremljene!",
"components.UserProfile.UserSettings.UserGeneralSettings.user": "Korisnik",
@@ -1042,7 +1042,7 @@
"i18n.status": "Stanje",
"pages.oops": "Ups",
"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.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.",
@@ -1057,16 +1057,16 @@
"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.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.Settings.notrunning": "Ne pokreće se",
"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.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.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.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.",
@@ -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.startscan": "Pokreni pretraživanje",
"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.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.",
@@ -1094,12 +1094,149 @@
"components.Settings.SettingsJobsCache.imagecache": "Predmemorija slika",
"components.Settings.SettingsJobsCache.imagecachesize": "Ukupna veličina predmemorije",
"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.RequestCard.unknowntitle": "Nepoznat naslov",
"components.RequestList.RequestItem.unknowntitle": "Nepoznat naslov",
"components.StatusBadge.seasonepisodenumber": "S{seasonNumber}E{episodeNumber}",
"components.Discover.DiscoverTv.discovertv": "Serije",
"components.Discover.RecentlyAddedSlider.recentlyAdded": "Nedavno dodano",
"components.Discover.DiscoverMovies.discovermovies": "Filmovi"
"components.Discover.RecentlyAddedSlider.recentlyAdded": "Nedavno dodani",
"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.jobcancelled": "{jobname} törölve.",
"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.command": "Parancs",
"components.Settings.SettingsJobsCache.canceljob": "Feladat megszakítása",
@@ -460,14 +460,14 @@
"components.Settings.SettingsAbout.Releases.releases": "Kiadások",
"components.Settings.SettingsAbout.Releases.releasedataMissing": "Kiadási adatok nem állnak rendelkezésre.",
"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.validationProfileRequired": "Ki kell választania egy minőség profilt",
"components.Settings.RadarrModal.validationPortRequired": "Érvényes portszámot kell megadnia",
"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.validationHostnameRequired": "Meg kell adnia egy hostnevet vagy IP-címet",
"components.Settings.RadarrModal.validationBaseUrlTrailingSlash": "Az alap URL-nek nem lehet vége perjel",
"components.Settings.RadarrModal.validationHostnameRequired": "Érvényes gazdagépnevet vagy IP-címet kell megadnia",
"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.validationApplicationUrlTrailingSlash": "Az URL-nek nem lehet vége perjel",
"components.Settings.RadarrModal.validationApplicationUrl": "Érvényes URL-t kell megadnia",
@@ -666,7 +666,7 @@
"components.RequestList.RequestItem.requested": "Kérve",
"components.RequestList.RequestItem.modifieduserdate": "{date} {user} által",
"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.deleterequest": "Kérés törlése",
"components.RequestList.RequestItem.cancelRequest": "Kérés visszavonása",
@@ -958,9 +958,9 @@
"i18n.resolved": "Megoldva",
"components.Settings.RadarrModal.inCinemas": "Mozikban",
"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.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.toastGotifyTestSuccess": "Gotify teszt értesítés elküldve!",
"components.Settings.Notifications.NotificationsGotify.token": "Alkalmazás Token",
@@ -1083,5 +1083,77 @@
"components.RequestCard.tvdbid": "TheTVDB azonosító",
"components.RequestList.RequestItem.tmdbid": "TMDB 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.UserProfile.plexwatchlist": "Plex Watchlist",
"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.QuotaSelector.seasons": "{count, 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.availability-sync": "Synchronisatie van mediabeschikbaarheid",
"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.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.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.FilterSlideover.tmdbuservotecount": "Qtd de Votos de Usuários TMDB",
"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.QuotaSelector.movieRequests": "{quotaLimit} <quotaUnits>{movies} per {quotaDays} {days}</quotaUnits>",
"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.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.",
@@ -403,8 +403,62 @@
"components.RequestBlock.approve": "Aprobă Solicitarea",
"components.RequestBlock.decline": "Respinge Solicitarea",
"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.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.returnHome": "Вернуться домой",
"components.CollectionDetails.overview": "Обзор",
"components.CollectionDetails.numberofmovies": "{count} фильмов",
"components.CollectionDetails.numberofmovies": "{count} {count, plural, one {фильм} few {фильма} other {фильмов}}",
"components.CollectionDetails.requestcollection": "Запросить Коллекцию",
"components.Login.email": "Адрес электронной почты",
"components.UserList.users": "Пользователи",
@@ -983,7 +983,7 @@
"components.Discover.CreateSlider.addcustomslider": "Создать слайдер",
"components.Discover.CreateSlider.nooptions": "Нет результатов.",
"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.providetmdbnetwork": "Введите TMDB ID сети",
"components.Discover.CreateSlider.providetmdbsearch": "Введите поисковой запрос",
@@ -992,7 +992,7 @@
"components.Discover.CreateSlider.searchKeywords": "Поиск ключевых слов…",
"components.Discover.CreateSlider.searchStudios": "Поиск студий…",
"components.Discover.CreateSlider.slidernameplaceholder": "Название слайдера",
"components.Discover.CreateSlider.starttyping": "Начините писать для поиска.",
"components.Discover.CreateSlider.starttyping": "Начните писать для поиска.",
"components.Discover.CreateSlider.validationDatarequired": "Вы должны ввести дату.",
"components.Discover.CreateSlider.validationTitlerequired": "Вы должны ввести заголовок.",
"components.Discover.DiscoverMovieKeyword.keywordMovies": "Фильмы по ключевому слову \"{keywordTitle}\"",
@@ -1024,7 +1024,7 @@
"components.Discover.DiscoverSliderEdit.deletesuccess": "Слайдер успешно удален.",
"components.Discover.DiscoverSliderEdit.enable": "Изменить видимость",
"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.sortPopularityAsc": "Популярность по возрастанию",
"components.Discover.DiscoverTv.sortPopularityDesc": "Популярность по убыванию",
@@ -1221,5 +1221,22 @@
"components.Selector.showless": "Показать меньше",
"components.Selector.showmore": "Показать больше",
"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.ManageSlideOver.manageModalAdvanced": "Napredno",
"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.level": "Ozbiljnost",
"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.overview": "简介",
"components.CollectionDetails.numberofmovies": "{count} 部电影",
"components.AppDataWarning.dockerVolumeMissingDescription": "必须使用链接挂载bind mount指定某个宿主机器的文件夹跟容器内的 <code>{appDataPath}</code> 文件夹连通,才能保存 Overseerr 的配置和数据。",
"components.AppDataWarning.dockerVolumeMissingDescription": "卷(<code>{appDataPath}</code>)挂载配置不正确,当容器终止或重启时所有数据都会被清除。",
"components.PersonDetails.ascharacter": "饰演 {character}",
"pages.somethingwentwrong": "出了点问题",
"pages.serviceunavailable": "服务器无法使用",
@@ -1174,7 +1174,7 @@
"components.Discover.PlexWatchlistSlider.emptywatchlist": "您的 <PlexWatchlistSupportLink>Plex 关注列表</PlexWatchlistSupportLink>中的媒体会显示在这里。",
"components.Selector.starttyping": "开始打字以进行搜索。",
"components.Discover.CreateSlider.starttyping": "开始打字以进行搜索。",
"components.Discover.CreateSlider.needresults": "需要至少有 1 个结果。",
"components.Discover.CreateSlider.needresults": "需要至少有 1 个结果。",
"components.Selector.showless": "显示更少",
"components.Discover.resetfailed": "重置探索媒体设置时出了点问题。",
"components.Settings.SettingsMain.validationApplicationTitle": "你必须提供一个应用程序标题",
@@ -1231,5 +1231,12 @@
"components.Settings.SonarrModal.tagRequests": "标记请求",
"i18n.collection": "合集",
"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) {
case 'ar':
return import('../i18n/locale/ar.json');
case 'bg':
return import('../i18n/locale/bg.json');
case 'ca':
return import('../i18n/locale/ca.json');
case 'cs':
@@ -40,8 +42,14 @@ const loadLocaleData = (locale: AvailableLocale): Promise<any> => {
return import('../i18n/locale/el.json');
case 'es':
return import('../i18n/locale/es.json');
case 'fi':
return import('../i18n/locale/fi.json');
case 'fr':
return import('../i18n/locale/fr.json');
case 'he':
return import('../i18n/locale/he.json');
case 'hi':
return import('../i18n/locale/hi.json');
case 'hr':
return import('../i18n/locale/hr.json');
case 'hu':
@@ -64,6 +72,8 @@ const loadLocaleData = (locale: AvailableLocale): Promise<any> => {
return import('../i18n/locale/pt_BR.json');
case 'pt-PT':
return import('../i18n/locale/pt_PT.json');
case 'ro':
return import('../i18n/locale/ro.json');
case 'ru':
return import('../i18n/locale/ru.json');
case 'sq':
@@ -72,6 +82,8 @@ const loadLocaleData = (locale: AvailableLocale): Promise<any> => {
return import('../i18n/locale/sr.json');
case 'sv':
return import('../i18n/locale/sv.json');
case 'uk':
return import('../i18n/locale/uk.json');
case 'zh-CN':
return import('../i18n/locale/zh_Hans.json');
case 'zh-TW':