Compare commits

...

44 Commits

Author SHA1 Message Date
semantic-release-bot
f1df9eeb2f chore(release): 1.3.1 2020-12-14 08:03:51 +00:00
sct
a3973791fb Merge branch 'develop' 2020-12-14 07:59:18 +00:00
sct
cb5c0403c1 docs: update bug template with docker version question [skip ci] 2020-12-14 07:57:33 +00:00
sct
7bf924f7e9 fix(frontend): also convert activeProfileId to a number for radarr/sonarr submissions 2020-12-14 07:17:32 +00:00
sct
c53dc3b15d fix(frontend): also convert ports to numbers when saving radarr/sonarr servers 2020-12-14 07:02:29 +00:00
sct
b96bd33982 refactor(frontend): remove search filter buttons until they actually do something 2020-12-14 06:40:31 +00:00
sct
92c9001c9d fix(frontend): new radarr/sonarr ports will be converted to a number before posting 2020-12-14 06:37:34 +00:00
semantic-release-bot
157ab80be1 chore(release): 1.3.0 2020-12-14 05:32:31 +00:00
sct
ac0f95b773 Merge branch 'develop' 2020-12-14 05:27:01 +00:00
sct
5f09e83ed8 fix(api): correctly generate clientId on first startup 2020-12-14 05:18:22 +00:00
sct
27349ec953 docs: update readme.md 2020-12-14 04:49:00 +00:00
allcontributors[bot]
2ce6e0a94a docs: add angrycuban13 as a contributor (#242) [skip ci]
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-12-14 13:44:24 +09:00
Angry Cuban
da65988926 docs: Update README.md (#241) [skip ci] 2020-12-14 13:38:47 +09:00
sct
b3b8e7b0cc docs: update readme [skip ci] 2020-12-14 01:05:11 +00:00
sct
c8f1756a2b Merge pull request #239 from weblate/weblate-overseerr-overseerr-frontend
Translations update from Weblate
2020-12-14 00:28:18 +09:00
Hosted Weblate
f943701e13 feat(lang): translated using Weblate (French)
Currently translated at 100.0% (306 of 306 strings)

feat(lang): translated using Weblate (French)

Currently translated at 100.0% (306 of 306 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: J. Lavoie <j.lavoie@net-c.ca>
Co-authored-by: NGVICIOUS <giyomu1@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/fr/
Translation: Overseerr/Overseerr Frontend
2020-12-13 16:24:27 +01:00
Hosted Weblate
7bf9addd13 feat(lang): translated using Weblate (German)
Currently translated at 99.3% (304 of 306 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: J. Lavoie <j.lavoie@net-c.ca>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/de/
Translation: Overseerr/Overseerr Frontend
2020-12-13 16:24:27 +01:00
dependabot[bot]
93983c976b build(deps): bump yup from 0.32.6 to 0.32.8 (#223)
Bumps [yup](https://github.com/jquense/yup) from 0.32.6 to 0.32.8.
- [Release notes](https://github.com/jquense/yup/releases)
- [Changelog](https://github.com/jquense/yup/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jquense/yup/commits)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-12-13 21:24:25 +09:00
dependabot[bot]
05a2fddf4a build(deps): bump ini from 1.3.5 to 1.3.8 (#237)
Bumps [ini](https://github.com/isaacs/ini) from 1.3.5 to 1.3.8.
- [Release notes](https://github.com/isaacs/ini/releases)
- [Commits](https://github.com/isaacs/ini/compare/v1.3.5...v1.3.8)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-12-13 15:28:43 +09:00
sct
7f2be51a7e refactor(frontend): change person details page to show appears in titles as list view 2020-12-12 12:39:05 +00:00
sct
de01e13dda docs: update all-contributors list 2020-12-12 12:37:15 +00:00
allcontributors[bot]
beca52715a docs: add GiyomuWeb as a contributor (#235)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-12-12 21:09:03 +09:00
allcontributors[bot]
61ed508a56 docs: add KovalevArtem as a contributor (#234)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-12-12 21:08:21 +09:00
allcontributors[bot]
ce9d9fdf13 docs: add Ahreluth as a contributor (#233)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-12-12 21:06:55 +09:00
allcontributors[bot]
e32b585e97 docs: add comradekingu as a contributor (#232)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-12-12 21:05:29 +09:00
allcontributors[bot]
6d2abfa863 docs: add OwsleyJr as a contributor (#231)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-12-12 21:04:00 +09:00
allcontributors[bot]
d02724770d docs: add azoitos as a contributor (#230)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-12-12 21:02:57 +09:00
sct
5fa37b5913 ci: add the ability to skip ci with commit message [skip ci] 2020-12-12 11:59:15 +00:00
sct
5155a4caf2 docs: move all-contributors table into the correct section 2020-12-12 11:57:37 +00:00
sct
42381ed5cb docs: fix all-contributors template/position 2020-12-12 11:55:47 +00:00
sct
b99f9e6888 Merge pull request #229 from sct/all-contributors/add-sct
docs: add sct as a contributor
2020-12-12 20:50:51 +09:00
allcontributors[bot]
e6c5d6ff7c docs: create .all-contributorsrc [skip ci] 2020-12-12 11:19:05 +00:00
allcontributors[bot]
4f9514885b docs: update README.md [skip ci] 2020-12-12 11:19:04 +00:00
sct
52e695bd08 docs: remove contributors image so we can replace it with all-contributors 2020-12-12 10:59:12 +00:00
sct
051f1b3e89 feat(frontend): add full cast page for movies and series 2020-12-12 10:54:53 +00:00
sct
4392a881aa Merge pull request #219 from weblate/weblate-overseerr-overseerr-frontend
Translations update from Weblate
2020-12-12 17:32:24 +09:00
Hosted Weblate
0949c9b334 feat(lang): translated using Weblate (English)
Currently translated at 100.0% (304 of 304 strings)

feat(lang): translated using Weblate (English)

Currently translated at 100.0% (304 of 304 strings)

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/en/
Translation: Overseerr/Overseerr Frontend
2020-12-12 08:14:19 +01:00
Hosted Weblate
30d04ce35a feat(lang): translated using Weblate (French)
Currently translated at 100.0% (304 of 304 strings)

feat(lang): translated using Weblate (French)

Currently translated at 100.0% (304 of 304 strings)

feat(lang): translated using Weblate (French)

Currently translated at 100.0% (304 of 304 strings)

feat(lang): translated using Weblate (French)

Currently translated at 100.0% (304 of 304 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: J. Lavoie <j.lavoie@net-c.ca>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/fr/
Translation: Overseerr/Overseerr Frontend
2020-12-12 08:14:19 +01:00
Hosted Weblate
83efb0e3d4 feat(lang): translated using Weblate (Norwegian Bokmål)
Currently translated at 87.1% (265 of 304 strings)

Co-authored-by: Allan Nordhøy <epost@anotheragency.no>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/nb_NO/
Translation: Overseerr/Overseerr Frontend
2020-12-12 08:14:19 +01:00
Hosted Weblate
08e968fd00 feat(lang): translated using Weblate (Japanese)
Currently translated at 100.0% (304 of 304 strings)

feat(lang): translated using Weblate (Japanese)

Currently translated at 99.0% (301 of 304 strings)

feat(lang): translated using Weblate (Japanese)

Currently translated at 99.0% (301 of 304 strings)

feat(lang): translated using Weblate (Japanese)

Currently translated at 100.0% (304 of 304 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Shingo Takada <geneofthetiger@gmail.com>
Co-authored-by: T'ai <chivalrousjosh@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/ja/
Translation: Overseerr/Overseerr Frontend
2020-12-12 08:14:19 +01:00
Hosted Weblate
0d8e0d0352 feat(lang): translated using Weblate (Russian)
Currently translated at 26.9% (82 of 304 strings)

Co-authored-by: Artem <KovalevArtem.ru@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/ru/
Translation: Overseerr/Overseerr Frontend
2020-12-12 08:14:19 +01:00
Hosted Weblate
1ab3a4b80a feat(lang): translated using Weblate (Dutch)
Currently translated at 18.7% (57 of 304 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jos Vennik <josvennik@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/nl/
Translation: Overseerr/Overseerr Frontend
2020-12-12 08:14:19 +01:00
Hosted Weblate
b6e60a412b feat(lang): translated using Weblate (German)
Currently translated at 99.3% (302 of 304 strings)

feat(lang): translated using Weblate (German)

Currently translated at 99.3% (302 of 304 strings)

feat(lang): translated using Weblate (German)

Currently translated at 99.3% (302 of 304 strings)

feat(lang): translated using Weblate (German)

Currently translated at 71.3% (217 of 304 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: J. Lavoie <j.lavoie@net-c.ca>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/de/
Translation: Overseerr/Overseerr Frontend
2020-12-12 08:14:19 +01:00
sct
d4cc727d52 ci: fix typo in github workflow 2020-12-12 07:13:55 +00:00
27 changed files with 746 additions and 482 deletions

82
.all-contributorsrc Normal file
View File

@@ -0,0 +1,82 @@
{
"files": [
"README.md"
],
"imageSize": 100,
"commit": false,
"contributors": [
{
"login": "sct",
"name": "sct",
"avatar_url": "https://avatars1.githubusercontent.com/u/234213?v=4",
"profile": "https://sct.dev",
"contributions": [
"code",
"design",
"ideas"
]
},
{
"login": "azoitos",
"name": "Alex Zoitos",
"avatar_url": "https://avatars2.githubusercontent.com/u/26529049?v=4",
"profile": "https://github.com/azoitos",
"contributions": [
"code"
]
},
{
"login": "OwsleyJr",
"name": "Brandon Cohen",
"avatar_url": "https://avatars3.githubusercontent.com/u/8635678?v=4",
"profile": "https://github.com/OwsleyJr",
"contributions": [
"code",
"doc"
]
},
{
"login": "Ahreluth",
"name": "Ahreluth",
"avatar_url": "https://avatars2.githubusercontent.com/u/75682440?v=4",
"profile": "https://github.com/Ahreluth",
"contributions": [
"translation"
]
},
{
"login": "KovalevArtem",
"name": "KovalevArtem",
"avatar_url": "https://avatars0.githubusercontent.com/u/36500228?v=4",
"profile": "https://github.com/KovalevArtem",
"contributions": [
"translation"
]
},
{
"login": "GiyomuWeb",
"name": "GiyomuWeb",
"avatar_url": "https://avatars0.githubusercontent.com/u/62489209?v=4",
"profile": "https://github.com/GiyomuWeb",
"contributions": [
"translation"
]
},
{
"login": "angrycuban13",
"name": "Angry Cuban",
"avatar_url": "https://avatars3.githubusercontent.com/u/39564898?v=4",
"profile": "https://github.com/angrycuban13",
"contributions": [
"doc"
]
}
],
"badgeTemplate": "<a href=\"#contributors-\"><img alt=\"All Contributors\" src=\"https://img.shields.io/badge/all_contributors-<%= contributors.length %>-orange.svg\"/></a>",
"contributorsPerLine": 7,
"projectName": "overseerr",
"projectOwner": "sct",
"repoType": "github",
"repoHost": "https://github.com",
"skipCi": true
}

View File

@@ -9,6 +9,9 @@ assignees: ''
**Describe the bug**
A clear and concise description of what the bug is.
**Are you on latest or develop branch?**
Please fill in which docker image you are currently using.
**To Reproduce**
Steps to reproduce the behavior:

View File

@@ -26,7 +26,7 @@ jobs:
build_and_push:
name: Build and push Docker image to Docker Hub
needs: test
if: github.ref == 'refs/heads/develop'
if: github.ref == 'refs/heads/develop' && !contains(github.event.head_commit.message, 'skip ci')
runs-on: ubuntu-latest
steps:
- name: checkout

View File

@@ -20,7 +20,7 @@ jobs:
run: yarn lint
- name: build
run: yarn build
semnatic-release:
semantic-release:
name: Tag and release latest version
needs: test
runs-on: ubuntu-latest

View File

@@ -1,3 +1,33 @@
## [1.3.1](https://github.com/sct/overseerr/compare/v1.3.0...v1.3.1) (2020-12-14)
### Bug Fixes
* **frontend:** also convert activeProfileId to a number for radarr/sonarr submissions ([7bf924f](https://github.com/sct/overseerr/commit/7bf924f7e94a0e0834f41b4ec067ed277c652766))
* **frontend:** also convert ports to numbers when saving radarr/sonarr servers ([c53dc3b](https://github.com/sct/overseerr/commit/c53dc3b15da522c6e6ab76bbc9d15008a8a9fb9d))
* **frontend:** new radarr/sonarr ports will be converted to a number before posting ([92c9001](https://github.com/sct/overseerr/commit/92c9001c9d1f2cbd272a5897ea1157d2cadbce2d))
# [1.3.0](https://github.com/sct/overseerr/compare/v1.2.0...v1.3.0) (2020-12-14)
### Bug Fixes
* **api:** correctly generate clientId on first startup ([5f09e83](https://github.com/sct/overseerr/commit/5f09e83ed870336638d3e9d94fcf55ead928e737))
### Features
* **frontend:** add full cast page for movies and series ([051f1b3](https://github.com/sct/overseerr/commit/051f1b3e899bf749e632743e5c8d45a02b621998))
* **lang:** translated using Weblate (Dutch) ([1ab3a4b](https://github.com/sct/overseerr/commit/1ab3a4b80a081d7e4a201f1290cd270ed5b38ac7))
* **lang:** translated using Weblate (English) ([0949c9b](https://github.com/sct/overseerr/commit/0949c9b334b3a4b6c342517a157a9e2b7596f2f0))
* **lang:** translated using Weblate (French) ([f943701](https://github.com/sct/overseerr/commit/f943701e13c7f0de5a711302597858cc898b16e2))
* **lang:** translated using Weblate (French) ([30d04ce](https://github.com/sct/overseerr/commit/30d04ce35adc21070cce37ab10384154afda191b))
* **lang:** translated using Weblate (German) ([7bf9add](https://github.com/sct/overseerr/commit/7bf9addd13a707aac23b64ef3f1733e491d40a4e))
* **lang:** translated using Weblate (German) ([b6e60a4](https://github.com/sct/overseerr/commit/b6e60a412b30907aea751a4cf1ce0cc8230f9814))
* **lang:** translated using Weblate (Japanese) ([08e968f](https://github.com/sct/overseerr/commit/08e968fd0097ec7b2a65de064ed5b07e7c49ef39))
* **lang:** translated using Weblate (Norwegian Bokmål) ([83efb0e](https://github.com/sct/overseerr/commit/83efb0e3d4d96b6a2d2ebdd85d36c9d78c1717b2))
* **lang:** translated using Weblate (Russian) ([0d8e0d0](https://github.com/sct/overseerr/commit/0d8e0d0352f72fdb65ee8f054371eae08c39fe33))
# [1.2.0](https://github.com/sct/overseerr/compare/v1.1.0...v1.2.0) (2020-12-11)

View File

@@ -15,9 +15,12 @@
</a>
<a href="https://lgtm.com/projects/g/sct/overseerr/context:javascript"><img alt="Language grade: JavaScript" src="https://img.shields.io/lgtm/grade/javascript/g/sct/overseerr.svg?logo=lgtm&logoWidth=18"/></a>
<img alt="GitHub" src="https://img.shields.io/github/license/sct/overseerr">
<!-- 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-7-orange.svg"/></a>
<!-- ALL-CONTRIBUTORS-BADGE:END -->
</p>
**Overseerr** is a libre software tool for managing requests for your media library. It integrates with existing services such as **Sonarr** and **Radarr**!
**Overseerr** is a free and open source software application for managing requests for your media library. It integrates with your existing services such as **Sonarr**, **Radarr** and **Plex**!
## Current Features
@@ -52,9 +55,9 @@ docker run -d \
-e LOG_LEVEL=info \
-e TZ=Asia/Tokyo \
-p 5055:3000 \
-v /path/to/appdata/config:/config \
-v /path/to/appdata/config:/app/config \
--restart unless-stopped \
sctx/overseer
sctx/overseerr
```
After running Overseerr for the first time, configure it by visiting the web UI at http://[address]:5055 and completing the setup steps.
@@ -85,9 +88,25 @@ Our [Code of Conduct](https://github.com/sct/overseerr/blob/develop/CODE_OF_COND
## Contributors
<a href="https://github.com/sct/overseerr/graphs/contributors">
<img src="https://contributors-img.web.app/image?repo=sct/overseerr" />
</a>
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
<tr>
<td align="center"><a href="https://sct.dev"><img src="https://avatars1.githubusercontent.com/u/234213?v=4" width="100px;" alt=""/><br /><sub><b>sct</b></sub></a><br /><a href="https://github.com/sct/overseerr/commits?author=sct" title="Code">💻</a> <a href="#design-sct" title="Design">🎨</a> <a href="#ideas-sct" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center"><a href="https://github.com/azoitos"><img src="https://avatars2.githubusercontent.com/u/26529049?v=4" width="100px;" alt=""/><br /><sub><b>Alex Zoitos</b></sub></a><br /><a href="https://github.com/sct/overseerr/commits?author=azoitos" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/OwsleyJr"><img src="https://avatars3.githubusercontent.com/u/8635678?v=4" width="100px;" alt=""/><br /><sub><b>Brandon Cohen</b></sub></a><br /><a href="https://github.com/sct/overseerr/commits?author=OwsleyJr" title="Code">💻</a> <a href="https://github.com/sct/overseerr/commits?author=OwsleyJr" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/Ahreluth"><img src="https://avatars2.githubusercontent.com/u/75682440?v=4" width="100px;" alt=""/><br /><sub><b>Ahreluth</b></sub></a><br /><a href="#translation-Ahreluth" title="Translation">🌍</a></td>
<td align="center"><a href="https://github.com/KovalevArtem"><img src="https://avatars0.githubusercontent.com/u/36500228?v=4" width="100px;" alt=""/><br /><sub><b>KovalevArtem</b></sub></a><br /><a href="#translation-KovalevArtem" title="Translation">🌍</a></td>
<td align="center"><a href="https://github.com/GiyomuWeb"><img src="https://avatars0.githubusercontent.com/u/62489209?v=4" width="100px;" alt=""/><br /><sub><b>GiyomuWeb</b></sub></a><br /><a href="#translation-GiyomuWeb" title="Translation">🌍</a></td>
<td align="center"><a href="https://github.com/angrycuban13"><img src="https://avatars3.githubusercontent.com/u/39564898?v=4" width="100px;" alt=""/><br /><sub><b>Angry Cuban</b></sub></a><br /><a href="https://github.com/sct/overseerr/commits?author=angrycuban13" title="Documentation">📖</a></td>
</tr>
</table>
<!-- markdownlint-enable -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->
## Contributing

View File

@@ -1,6 +1,6 @@
{
"name": "overseerr",
"version": "1.2.0",
"version": "1.3.1",
"private": true,
"scripts": {
"dev": "nodemon -e ts --watch server --watch overseerr-api.yml -e .json,.ts,.yml -x ts-node --files --project server/tsconfig.json server/index.ts",
@@ -9,7 +9,7 @@
"build": "yarn build:next && yarn build:server",
"lint": "eslint \"./server/**/*.{ts,tsx}\" \"./src/**/*.{ts,tsx}\"",
"start": "NODE_ENV=production node dist/index.js",
"i18n:extract": "extract-messages -l=en,ja,fr,nb_NO,de,ru,nl -o src/i18n/locale -d en --flat true --overwriteDefault false './src/**/!(*.test).{ts,tsx}'",
"i18n:extract": "extract-messages -l=en -o src/i18n/locale -d en --flat true --overwriteDefault false './src/**/!(*.test).{ts,tsx}'",
"migration:generate": "ts-node --project server/tsconfig.json ./node_modules/.bin/typeorm migration:generate",
"migration:run": "ts-node --project server/tsconfig.json ./node_modules/.bin/typeorm migration:run",
"format": "prettier --write ."
@@ -52,7 +52,7 @@
"winston": "^3.3.3",
"xml2js": "^0.4.23",
"yamljs": "^0.3.0",
"yup": "^0.32.6"
"yup": "^0.32.8"
},
"devDependencies": {
"@babel/cli": "^7.12.8",

View File

@@ -100,7 +100,7 @@ class Settings {
constructor(initialSettings?: AllSettings) {
this.data = {
clientId: '',
clientId: uuidv4(),
main: {
apiKey: '',
applicationUrl: '',
@@ -222,10 +222,10 @@ class Settings {
* @param overrideSettings If passed in, will override all existing settings with these
* values
*/
public load(overrideSettings?: AllSettings): AllSettings {
public load(overrideSettings?: AllSettings): Settings {
if (overrideSettings) {
this.data = overrideSettings;
return this.data;
return this;
}
if (!fs.existsSync(SETTINGS_PATH)) {
@@ -237,7 +237,7 @@ class Settings {
this.data = merge(this.data, JSON.parse(data));
this.save();
}
return this.data;
return this;
}
public save(): void {

View File

@@ -2,7 +2,7 @@ import React from 'react';
interface HeaderProps {
extraMargin?: number;
subtext?: string;
subtext?: React.ReactNode;
}
const Header: React.FC<HeaderProps> = ({

View File

@@ -63,126 +63,122 @@ const Modal: React.FC<ModalProps> = ({
});
useLockBodyScroll(true, disableScrollLock);
return (
<>
{ReactDOM.createPortal(
// eslint-disable-next-line jsx-a11y/no-static-element-interactions
return ReactDOM.createPortal(
// eslint-disable-next-line jsx-a11y/no-static-element-interactions
<div
className="fixed top-0 left-0 right-0 bottom-0 bg-gray-800 bg-opacity-50 w-full h-full z-50 flex justify-center items-center"
onKeyDown={(e) => {
if (e.key === 'Escape') {
typeof onCancel === 'function' && backgroundClickable
? onCancel()
: undefined;
}
}}
>
<Transition
enter="transition opacity-0 duration-300 transform scale-75"
enterFrom="opacity-0 scale-75"
enterTo="opacity-100 scale-100"
leave="transition opacity-100 duration-300"
leaveFrom="opacity-100"
leaveTo="opacity-0"
show={loading}
>
<div style={{ position: 'absolute' }}>
<LoadingSpinner />
</div>
</Transition>
<Transition
enter="transition opacity-0 duration-300 transform scale-75"
enterFrom="opacity-0 scale-75"
enterTo="opacity-100 scale-100"
leave="transition opacity-100 duration-300"
leaveFrom="opacity-100"
leaveTo="opacity-0"
show={!loading}
>
<div
className="fixed top-0 left-0 right-0 bottom-0 bg-gray-800 bg-opacity-50 w-full h-full z-50 flex justify-center items-center"
onKeyDown={(e) => {
if (e.key === 'Escape') {
typeof onCancel === 'function' && backgroundClickable
? onCancel()
: undefined;
}
}}
className="inline-block align-bottom bg-gray-700 sm:rounded-lg px-4 pt-5 pb-4 text-left overflow-auto shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-3xl w-full sm:p-6 max-h-full"
role="dialog"
aria-modal="true"
aria-labelledby="modal-headline"
ref={modalRef}
>
<Transition
enter="transition opacity-0 duration-300 transform scale-75"
enterFrom="opacity-0 scale-75"
enterTo="opacity-100 scale-100"
leave="transition opacity-100 duration-300"
leaveFrom="opacity-100"
leaveTo="opacity-0"
show={loading}
>
<div style={{ position: 'absolute' }}>
<LoadingSpinner />
</div>
</Transition>
<Transition
enter="transition opacity-0 duration-300 transform scale-75"
enterFrom="opacity-0 scale-75"
enterTo="opacity-100 scale-100"
leave="transition opacity-100 duration-300"
leaveFrom="opacity-100"
leaveTo="opacity-0"
show={!loading}
>
<div
className="inline-block align-bottom bg-gray-700 sm:rounded-lg px-4 pt-5 pb-4 text-left overflow-auto shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-3xl w-full sm:p-6 max-h-full"
role="dialog"
aria-modal="true"
aria-labelledby="modal-headline"
ref={modalRef}
>
<div className="sm:flex sm:items-center">
{iconSvg && (
<div className="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-gray-600 text-white sm:mx-0 sm:h-10 sm:w-10">
{iconSvg}
</div>
)}
<div
className={`mt-3 text-center sm:mt-0 sm:text-left ${
iconSvg ? 'sm:ml-4' : 'mb-6'
}`}
>
{title && (
<h3
className="text-lg leading-6 font-medium text-white"
id="modal-headline"
>
{title}
</h3>
)}
</div>
<div className="sm:flex sm:items-center">
{iconSvg && (
<div className="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-gray-600 text-white sm:mx-0 sm:h-10 sm:w-10">
{iconSvg}
</div>
{children && (
<div className="mt-4 text-sm leading-5 text-gray-300">
{children}
</div>
)}
{(onCancel || onOk || onSecondary || onTertiary) && (
<div className="mt-5 sm:mt-4 flex justify-center sm:justify-start flex-row-reverse">
{typeof onOk === 'function' && (
<Button
buttonType={okButtonType}
onClick={onOk}
className="ml-3"
disabled={okDisabled}
>
{okText ? okText : 'Ok'}
</Button>
)}
{typeof onSecondary === 'function' && secondaryText && (
<Button
buttonType={secondaryButtonType}
onClick={onSecondary}
className="ml-3"
disabled={secondaryDisabled}
>
{secondaryText}
</Button>
)}
{typeof onTertiary === 'function' && tertiaryText && (
<Button
buttonType={tertiaryButtonType}
onClick={onTertiary}
className="ml-3"
disabled={tertiaryDisabled}
>
{tertiaryText}
</Button>
)}
{typeof onCancel === 'function' && (
<Button
buttonType={cancelButtonType}
onClick={onCancel}
className="ml-3 sm:ml-0 sm:px-4"
>
{cancelText
? cancelText
: intl.formatMessage(globalMessages.cancel)}
</Button>
)}
</div>
)}
<div
className={`mt-3 text-center sm:mt-0 sm:text-left ${
iconSvg ? 'sm:ml-4' : 'mb-6'
}`}
>
{title && (
<h3
className="text-lg leading-6 font-medium text-white"
id="modal-headline"
>
{title}
</h3>
)}
</div>
</Transition>
</div>,
document.body
)}
</>
</div>
{children && (
<div className="mt-4 text-sm leading-5 text-gray-300">
{children}
</div>
)}
{(onCancel || onOk || onSecondary || onTertiary) && (
<div className="mt-5 sm:mt-4 flex justify-center sm:justify-start flex-row-reverse">
{typeof onOk === 'function' && (
<Button
buttonType={okButtonType}
onClick={onOk}
className="ml-3"
disabled={okDisabled}
>
{okText ? okText : 'Ok'}
</Button>
)}
{typeof onSecondary === 'function' && secondaryText && (
<Button
buttonType={secondaryButtonType}
onClick={onSecondary}
className="ml-3"
disabled={secondaryDisabled}
>
{secondaryText}
</Button>
)}
{typeof onTertiary === 'function' && tertiaryText && (
<Button
buttonType={tertiaryButtonType}
onClick={onTertiary}
className="ml-3"
disabled={tertiaryDisabled}
>
{tertiaryText}
</Button>
)}
{typeof onCancel === 'function' && (
<Button
buttonType={cancelButtonType}
onClick={onCancel}
className="ml-3 sm:ml-0 sm:px-4"
>
{cancelText
? cancelText
: intl.formatMessage(globalMessages.cancel)}
</Button>
)}
</div>
)}
</div>
</Transition>
</div>,
document.body
);
};

View File

@@ -0,0 +1,66 @@
import Link from 'next/link';
import { useRouter } from 'next/router';
import React, { useContext } from 'react';
import { defineMessages, useIntl } from 'react-intl';
import useSWR from 'swr';
import { MovieDetails } from '../../../../server/models/Movie';
import { LanguageContext } from '../../../context/LanguageContext';
import Error from '../../../pages/_error';
import Header from '../../Common/Header';
import LoadingSpinner from '../../Common/LoadingSpinner';
import PersonCard from '../../PersonCard';
const messages = defineMessages({
fullcast: 'Full Cast',
});
const MovieCast: React.FC = () => {
const router = useRouter();
const intl = useIntl();
const { locale } = useContext(LanguageContext);
const { data, error } = useSWR<MovieDetails>(
`/api/v1/movie/${router.query.movieId}?language=${locale}`
);
if (!data && !error) {
return <LoadingSpinner />;
}
if (!data) {
return <Error statusCode={404} />;
}
return (
<>
<Header
subtext={
<Link href={`/movie/${data.id}`}>
<a className="hover:underline">{data.title}</a>
</Link>
}
>
{intl.formatMessage(messages.fullcast)}
</Header>
<ul className="grid grid-cols-2 gap-6 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-7 2xl:grid-cols-8">
{data?.credits.cast.map((person) => {
return (
<li
key={person.id}
className="col-span-1 flex flex-col text-center items-center"
>
<PersonCard
name={person.name}
personId={person.id}
subName={person.character}
profilePath={person.profilePath}
canExpand
/>
</li>
);
})}
</ul>
</>
);
};
export default MovieCast;

View File

@@ -5,7 +5,6 @@ import type { PersonDetail } from '../../../server/models/Person';
import type { PersonCombinedCreditsResponse } from '../../../server/interfaces/api/personInterfaces';
import Error from '../../pages/_error';
import LoadingSpinner from '../Common/LoadingSpinner';
import Slider from '../Slider';
import TitleCard from '../TitleCard';
import { defineMessages, useIntl } from 'react-intl';
import { LanguageContext } from '../../context/LanguageContext';
@@ -54,9 +53,11 @@ const PersonDetails: React.FC = () => {
return 1;
});
const isLoading = !combinedCredits && !errorCombinedCredits;
return (
<>
<div className="flex mt-8 mb-8 flex-col md:flex-row items-center">
<div className="flex mt-8 mb-8 flex-col md:flex-row items-center md:items-start">
{data.profilePath && (
<div
style={{
@@ -81,13 +82,13 @@ const PersonDetails: React.FC = () => {
</div>
</div>
</div>
<Slider
isEmpty={!sortedCast}
isLoading={!combinedCredits && !errorCombinedCredits}
sliderKey={`person-${data.id}-slider-cast`}
items={sortedCast?.map((media) => {
<ul className="grid grid-cols-2 gap-6 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-7 2xl:grid-cols-8">
{sortedCast?.map((media) => {
return (
<div key={`slider-cast-item-${media.id}`} className="flex flex-col">
<li
key={`list-cast-item-${media.id}`}
className="col-span-1 flex flex-col text-center items-center"
>
<TitleCard
id={media.id}
title={media.mediaType === 'movie' ? media.title : media.name}
@@ -101,6 +102,7 @@ const PersonDetails: React.FC = () => {
summary={media.overview}
mediaType={media.mediaType as 'movie' | 'tv'}
status={media.mediaInfo?.status}
canExpand
/>
{media.character && (
<div className="mt-2 text-gray-300 text-xs truncate w-36 sm:w-36 md:w-44 text-center">
@@ -109,10 +111,19 @@ const PersonDetails: React.FC = () => {
})}
</div>
)}
</div>
</li>
);
})}
/>
{isLoading &&
[...Array(20)].map((_item, i) => (
<li
key={`placeholder-${i}`}
className="col-span-1 flex flex-col text-center items-center"
>
<TitleCard.Placeholder canExpand />
</li>
))}
</ul>
</>
);
};

View File

@@ -10,7 +10,6 @@ import ListView from '../Common/ListView';
import { LanguageContext } from '../../context/LanguageContext';
import { defineMessages, useIntl } from 'react-intl';
import Header from '../Common/Header';
import globalMessages from '../../i18n/globalMessages';
const messages = defineMessages({
searchresults: 'Search Results',
@@ -66,25 +65,7 @@ const Search: React.FC = () => {
return (
<>
<div className="md:flex md:items-center md:justify-between mb-6 sm:mb-0 mt-6">
<Header>{intl.formatMessage(messages.searchresults)}</Header>
<div className="mt-4 flex md:mt-0 md:ml-4">
<span className="relative z-0 inline-flex shadow-sm rounded-md">
<button
type="button"
className="relative inline-flex items-center px-4 py-2 rounded-l-md border border-indigo-900 bg-indigo-500 hover:bg-indigo-400 text-sm leading-5 font-medium text-gray-100 hover:text-white focus:z-10 focus:outline-none focus:border-blue-300 focus:ring-blue active:bg-gray-100 active:text-gray-700 transition ease-in-out duration-150"
>
{intl.formatMessage(globalMessages.movies)}
</button>
<button
type="button"
className="-ml-px relative inline-flex items-center px-4 py-2 rounded-r-md border border-indigo-900 bg-indigo-500 text-sm leading-5 font-medium text-gray-100 hover:text-white focus:z-10 focus:outline-none focus:border-blue-300 focus:ring-blue active:bg-gray-100 active:text-gray-700 transition ease-in-out duration-150"
>
{intl.formatMessage(globalMessages.tvshows)}
</button>
</span>
</div>
</div>
<Header>{intl.formatMessage(messages.searchresults)}</Header>
<ListView
items={titles}
isEmpty={isEmpty}

View File

@@ -108,7 +108,7 @@ const RadarrModal: React.FC<RadarrModalProps> = ({
{
hostname,
apiKey,
port,
port: Number(port),
baseUrl,
useSsl,
}
@@ -185,11 +185,11 @@ const RadarrModal: React.FC<RadarrModalProps> = ({
const submission = {
name: values.name,
hostname: values.hostname,
port: values.port,
port: Number(values.port),
apiKey: values.apiKey,
useSsl: values.ssl,
baseUrl: values.baseUrl,
activeProfileId: values.activeProfileId,
activeProfileId: Number(values.activeProfileId),
activeProfileName: profileName,
activeDirectory: values.rootFolder,
is4k: values.is4k,

View File

@@ -111,7 +111,7 @@ const SonarrModal: React.FC<SonarrModalProps> = ({
{
hostname,
apiKey,
port,
port: Number(port),
baseUrl,
useSsl,
}
@@ -188,11 +188,11 @@ const SonarrModal: React.FC<SonarrModalProps> = ({
const submission = {
name: values.name,
hostname: values.hostname,
port: values.port,
port: Number(values.port),
apiKey: values.apiKey,
useSsl: values.ssl,
baseUrl: values.baseUrl,
activeProfileId: values.activeProfileId,
activeProfileId: Number(values.activeProfileId),
activeProfileName: profileName,
activeDirectory: values.rootFolder,
is4k: values.is4k,

View File

@@ -0,0 +1,66 @@
import Link from 'next/link';
import { useRouter } from 'next/router';
import React, { useContext } from 'react';
import { defineMessages, useIntl } from 'react-intl';
import useSWR from 'swr';
import type { TvDetails } from '../../../../server/models/Tv';
import { LanguageContext } from '../../../context/LanguageContext';
import Error from '../../../pages/_error';
import Header from '../../Common/Header';
import LoadingSpinner from '../../Common/LoadingSpinner';
import PersonCard from '../../PersonCard';
const messages = defineMessages({
fullseriescast: 'Full Series Cast',
});
const TvCast: React.FC = () => {
const router = useRouter();
const intl = useIntl();
const { locale } = useContext(LanguageContext);
const { data, error } = useSWR<TvDetails>(
`/api/v1/tv/${router.query.tvId}?language=${locale}`
);
if (!data && !error) {
return <LoadingSpinner />;
}
if (!data) {
return <Error statusCode={404} />;
}
return (
<>
<Header
subtext={
<Link href={`/tv/${data.id}`}>
<a className="hover:underline">{data.name}</a>
</Link>
}
>
{intl.formatMessage(messages.fullseriescast)}
</Header>
<ul className="grid grid-cols-2 gap-6 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-7 2xl:grid-cols-8">
{data?.credits.cast.map((person) => {
return (
<li
key={person.id}
className="col-span-1 flex flex-col text-center items-center"
>
<PersonCard
name={person.name}
personId={person.id}
subName={person.character}
profilePath={person.profilePath}
canExpand
/>
</li>
);
})}
</ul>
</>
);
};
export default TvCast;

View File

@@ -15,7 +15,7 @@ const useClickOutside = (
): void => {
useEffect(() => {
const handleBodyClick = (e: MouseEvent) => {
if (!ref.current?.contains(e.target as Node)) {
if (ref.current && !ref.current.contains(e.target as Node)) {
callback(e);
}
};

View File

@@ -45,14 +45,14 @@
"components.MovieDetails.unavailable": "Nicht verfügbar",
"components.MovieDetails.userrating": "Benutzerbewertung",
"components.MovieDetails.viewrequest": "Antrag anzeigen",
"components.PersonDetails.appearsin": "",
"components.PersonDetails.ascharacter": "",
"components.PersonDetails.nobiography": "",
"components.PersonDetails.appearsin": "Erscheint in",
"components.PersonDetails.ascharacter": "als {character}",
"components.PersonDetails.nobiography": "Keine Biografie verfügbar.",
"components.PlexLoginButton.loading": "Wird geladen …",
"components.PlexLoginButton.loggingin": "Wird angemeldet …",
"components.PlexLoginButton.loginwithplex": "Anmeldung mit Plex",
"components.RequestBlock.seasons": "Staffeln",
"components.RequestCard.all": "",
"components.RequestCard.all": "Alle",
"components.RequestCard.requestedby": "Antrag von {username}",
"components.RequestCard.seasons": "Staffeln",
"components.RequestList.RequestItem.notavailable": "entf.",
@@ -62,7 +62,7 @@
"components.RequestList.modifiedBy": "Zuletzt geändert von",
"components.RequestList.next": "Nächste",
"components.RequestList.previous": "Vorherige",
"components.RequestList.requestedAt": "Antrag erstellt um",
"components.RequestList.requestedAt": "Antrag erstellt am",
"components.RequestList.requests": "Anträge",
"components.RequestList.showingresults": "Anzeigen von <strong>{from}</strong> bis <strong> {to} </strong> von <strong> {total} </strong> Ergebnissen",
"components.RequestList.status": "Status",
@@ -88,22 +88,22 @@
"components.RequestModal.status": "Status",
"components.Search.searchresults": "Suchergebnisse",
"components.Settings.Notifications.agentenabled": "Agent aktiviert",
"components.Settings.Notifications.authPass": "",
"components.Settings.Notifications.authUser": "",
"components.Settings.Notifications.authPass": "Auth Pass",
"components.Settings.Notifications.authUser": "Auth User",
"components.Settings.Notifications.emailsender": "E-Mail-Absenderadresse",
"components.Settings.Notifications.enableSsl": "SSL aktivieren",
"components.Settings.Notifications.save": "",
"components.Settings.Notifications.saving": "",
"components.Settings.Notifications.smtpHost": "",
"components.Settings.Notifications.smtpPort": "",
"components.Settings.Notifications.validationFromRequired": "",
"components.Settings.Notifications.validationSmtpHostRequired": "",
"components.Settings.Notifications.save": "Änderungen speichern",
"components.Settings.Notifications.saving": "Speichern ",
"components.Settings.Notifications.smtpHost": "SMTP-Host",
"components.Settings.Notifications.smtpPort": "SMTP-Port",
"components.Settings.Notifications.validationFromRequired": "Sie müssen eine E-Mail-Absenderadresse angeben",
"components.Settings.Notifications.validationSmtpHostRequired": "Sie müssen einen SMTP-Host bereitstellen",
"components.Settings.Notifications.validationSmtpPortRequired": "Sie müssen einen SMTP-Port bereitstellen",
"components.Settings.Notifications.validationWebhookUrlRequired": "Sie müssen eine Webhook-URL angeben",
"components.Settings.Notifications.webhookUrl": "Webhook-URL",
"components.Settings.Notifications.webhookUrlPlaceholder": "Servereinstellungen -> Integrationen -> Webhooks",
"components.Settings.RadarrModal.add": "",
"components.Settings.RadarrModal.apiKey": "",
"components.Settings.RadarrModal.add": "Server hinzufügen",
"components.Settings.RadarrModal.apiKey": "API-Schlüssel",
"components.Settings.RadarrModal.apiKeyPlaceholder": "Ihr Radarr-API-Schlüssel",
"components.Settings.RadarrModal.baseUrl": "Basis-URL",
"components.Settings.RadarrModal.baseUrlPlaceholder": "Beispiel: /radarr",
@@ -138,169 +138,171 @@
"components.Settings.SonarrModal.apiKeyPlaceholder": "Ihr Sonarr-API-Schlüssel",
"components.Settings.SonarrModal.baseUrl": "Basis-URL",
"components.Settings.SonarrModal.baseUrlPlaceholder": "Beispiel: /sonarr",
"components.Settings.SonarrModal.createsonarr": "",
"components.Settings.SonarrModal.defaultserver": "",
"components.Settings.SonarrModal.editsonarr": "",
"components.Settings.SonarrModal.hostname": "",
"components.Settings.SonarrModal.port": "",
"components.Settings.SonarrModal.qualityprofile": "",
"components.Settings.SonarrModal.rootfolder": "",
"components.Settings.SonarrModal.save": "",
"components.Settings.SonarrModal.saving": "",
"components.Settings.SonarrModal.seasonfolders": "",
"components.Settings.SonarrModal.selectQualityProfile": "",
"components.Settings.SonarrModal.selectRootFolder": "",
"components.Settings.SonarrModal.server4k": "",
"components.Settings.SonarrModal.servername": "",
"components.Settings.SonarrModal.servernamePlaceholder": "",
"components.Settings.SonarrModal.ssl": "",
"components.Settings.SonarrModal.test": "",
"components.Settings.SonarrModal.testing": "",
"components.Settings.SonarrModal.toastRadarrTestFailure": "",
"components.Settings.SonarrModal.toastRadarrTestSuccess": "",
"components.Settings.SonarrModal.validationApiKeyRequired": "",
"components.Settings.SonarrModal.validationHostnameRequired": "",
"components.Settings.SonarrModal.validationPortRequired": "",
"components.Settings.SonarrModal.validationProfileRequired": "",
"components.Settings.SonarrModal.validationRootFolderRequired": "",
"components.Settings.activeProfile": "",
"components.Settings.addradarr": "",
"components.Settings.address": "",
"components.Settings.addsonarr": "",
"components.Settings.apikey": "",
"components.Settings.applicationurl": "",
"components.Settings.cancelscan": "",
"components.Settings.copied": "",
"components.Settings.currentlibrary": "",
"components.Settings.default": "",
"components.Settings.default4k": "",
"components.Settings.delete": "",
"components.Settings.deleteserverconfirm": "",
"components.Settings.edit": "",
"components.Settings.generalsettings": "",
"components.Settings.generalsettingsDescription": "",
"components.Settings.hostname": "",
"components.Settings.jobname": "",
"components.Settings.librariesRemaining": "",
"components.Settings.manualscan": "",
"components.Settings.manualscanDescription": "",
"components.Settings.menuAbout": "",
"components.Settings.menuGeneralSettings": "",
"components.Settings.menuJobs": "",
"components.Settings.menuLogs": "",
"components.Settings.menuNotifications": "",
"components.Settings.menuPlexSettings": "",
"components.Settings.menuServices": "",
"components.Settings.nextexecution": "",
"components.Settings.notificationsettings": "",
"components.Settings.notificationsettingsDescription": "",
"components.Settings.notrunning": "",
"components.Settings.plexlibraries": "",
"components.Settings.plexlibrariesDescription": "",
"components.Settings.plexsettings": "",
"components.Settings.plexsettingsDescription": "",
"components.Settings.port": "",
"components.Settings.radarrSettingsDescription": "",
"components.Settings.radarrsettings": "",
"components.Settings.runnow": "",
"components.Settings.save": "",
"components.Settings.saving": "",
"components.Settings.servername": "",
"components.Settings.servernamePlaceholder": "",
"components.Settings.sonarrSettingsDescription": "",
"components.Settings.sonarrsettings": "",
"components.Settings.ssl": "",
"components.Settings.startscan": "",
"components.Settings.sync": "",
"components.Settings.syncing": "",
"components.Setup.configureplex": "",
"components.Setup.configureservices": "",
"components.Setup.continue": "",
"components.Setup.finish": "",
"components.Setup.finishing": "",
"components.Setup.loginwithplex": "",
"components.Setup.signinMessage": "",
"components.Setup.welcome": "",
"components.Slider.noresults": "",
"components.TitleCard.movie": "",
"components.TitleCard.tvshow": "",
"components.TvDetails.approve": "",
"components.TvDetails.approverequests": "",
"components.TvDetails.available": "",
"components.TvDetails.cancelrequest": "",
"components.TvDetails.cast": "",
"components.TvDetails.decline": "",
"components.TvDetails.declinerequests": "",
"components.TvDetails.manageModalClearMedia": "",
"components.TvDetails.manageModalClearMediaWarning": "",
"components.TvDetails.manageModalNoRequests": "",
"components.TvDetails.manageModalRequests": "",
"components.TvDetails.manageModalTitle": "",
"components.TvDetails.originallanguage": "",
"components.TvDetails.overview": "",
"components.TvDetails.overviewunavailable": "",
"components.TvDetails.pending": "",
"components.TvDetails.recommendations": "",
"components.TvDetails.recommendationssubtext": "",
"components.TvDetails.request": "",
"components.TvDetails.requestmore": "",
"components.TvDetails.similar": "",
"components.TvDetails.similarsubtext": "",
"components.TvDetails.status": "",
"components.TvDetails.unavailable": "",
"components.TvDetails.userrating": "",
"components.UserEdit.admin": "",
"components.UserEdit.adminDescription": "",
"components.UserEdit.autoapprove": "",
"components.UserEdit.autoapproveDescription": "",
"components.UserEdit.avatar": "",
"components.UserEdit.edituser": "",
"components.UserEdit.email": "",
"components.UserEdit.managerequests": "",
"components.UserEdit.managerequestsDescription": "",
"components.UserEdit.permissions": "",
"components.UserEdit.request": "",
"components.UserEdit.requestDescription": "",
"components.UserEdit.save": "",
"components.UserEdit.saving": "",
"components.UserEdit.settings": "",
"components.UserEdit.settingsDescription": "",
"components.UserEdit.userfail": "",
"components.UserEdit.username": "",
"components.UserEdit.users": "",
"components.UserEdit.usersDescription": "",
"components.UserEdit.usersaved": "",
"components.UserEdit.vote": "",
"components.UserEdit.voteDescription": "",
"components.UserList.admin": "",
"components.UserList.created": "",
"components.UserList.delete": "",
"components.UserList.edit": "",
"components.UserList.lastupdated": "",
"components.UserList.plexuser": "",
"components.UserList.role": "",
"components.UserList.totalrequests": "",
"components.UserList.user": "",
"components.UserList.userlist": "",
"components.UserList.username": "",
"components.UserList.usertype": "",
"i18n.approve": "",
"i18n.approved": "",
"i18n.available": "",
"i18n.cancel": "",
"i18n.decline": "",
"i18n.declined": "",
"i18n.delete": "",
"i18n.movies": "",
"i18n.partiallyavailable": "",
"i18n.pending": "",
"i18n.processing": "",
"i18n.tvshows": "",
"i18n.unavailable": "",
"pages.internalServerError": "",
"pages.oops": "",
"pages.pageNotFound": "",
"pages.returnHome": "",
"pages.serviceUnavailable": "",
"pages.somethingWentWrong": ""
"components.Settings.SonarrModal.createsonarr": "Neuen Sonarr-Server erstellen",
"components.Settings.SonarrModal.defaultserver": "Standardserver",
"components.Settings.SonarrModal.editsonarr": "Sonarr-Server bearbeiten",
"components.Settings.SonarrModal.hostname": "Hostname",
"components.Settings.SonarrModal.port": "Port",
"components.Settings.SonarrModal.qualityprofile": "Qualitätsprofil",
"components.Settings.SonarrModal.rootfolder": "Stammordner",
"components.Settings.SonarrModal.save": "Änderungen speichern",
"components.Settings.SonarrModal.saving": "Speichern ",
"components.Settings.SonarrModal.seasonfolders": "Staffelnordner",
"components.Settings.SonarrModal.selectQualityProfile": "Wählen Sie ein Qualitätsprofil",
"components.Settings.SonarrModal.selectRootFolder": "Wählen Sie einen Stammordner",
"components.Settings.SonarrModal.server4k": "4K-Server",
"components.Settings.SonarrModal.servername": "Servername",
"components.Settings.SonarrModal.servernamePlaceholder": "Ein Sonarr-Server",
"components.Settings.SonarrModal.ssl": "SSL",
"components.Settings.SonarrModal.test": "Test",
"components.Settings.SonarrModal.testing": "Testen ",
"components.Settings.SonarrModal.toastRadarrTestFailure": "Es konnte keine Verbindung zu Sonarr-Server hergestellt werden",
"components.Settings.SonarrModal.toastRadarrTestSuccess": "Sonarr-Verbindung hergestellt!",
"components.Settings.SonarrModal.validationApiKeyRequired": "Sie müssen einen API-Schlüssel angeben",
"components.Settings.SonarrModal.validationHostnameRequired": "Sie müssen einen Hostnamen/IP angeben",
"components.Settings.SonarrModal.validationPortRequired": "Sie müssen einen Port angeben",
"components.Settings.SonarrModal.validationProfileRequired": "Sie müssen ein Profil auswählen",
"components.Settings.SonarrModal.validationRootFolderRequired": "Sie müssen einen Stammordner auswählen",
"components.Settings.activeProfile": "Aktives Profil",
"components.Settings.addradarr": "Radarr-Server hinzufügen",
"components.Settings.address": "Adresse",
"components.Settings.addsonarr": "Sonarr-Server hinzufügen",
"components.Settings.apikey": "API-Schlüssel",
"components.Settings.applicationurl": "Anwendungs-URL",
"components.Settings.cancelscan": "Scan abbrechen",
"components.Settings.copied": "Kopierter API-Schlüssel in die Zwischenablage",
"components.Settings.currentlibrary": "Aktuelle Bibliothek: {name}",
"components.Settings.default": "Standardmäßig",
"components.Settings.default4k": "Standard-4K",
"components.Settings.delete": "Löschen",
"components.Settings.deleteserverconfirm": "Sind Sie sicher, dass Sie diesen Server löschen möchten?",
"components.Settings.edit": "Bearbeiten",
"components.Settings.generalsettings": "Allgemeine Einstellungen",
"components.Settings.generalsettingsDescription": "Dies sind Einstellungen, die sich auf die allgemeine Overseerr-Konfiguration beziehen.",
"components.Settings.hostname": "Hostname/IP",
"components.Settings.jobname": "Auftragsname",
"components.Settings.librariesRemaining": "Verbleibende Bibliotheken: {count}",
"components.Settings.manualscan": "Manueller Bibliotheksscan",
"components.Settings.manualscanDescription": "Normalerweise wird dies nur einmal alle 6 Stunden ausgeführt. Overseerr überprüft die kürzlich hinzugefügten Plex-Server aggressiver. Wenn Sie Plex zum ersten Mal konfigurieren, wird ein einmaliger vollständiger manueller Bibliotheksscan empfohlen!",
"components.Settings.menuAbout": "Über",
"components.Settings.menuGeneralSettings": "Allgemeine Einstellungen",
"components.Settings.menuJobs": "Anträge",
"components.Settings.menuLogs": "Protokolle",
"components.Settings.menuNotifications": "Benachrichtigungen",
"components.Settings.menuPlexSettings": "Plex",
"components.Settings.menuServices": "Dienste",
"components.Settings.nextexecution": "Nächste Ausführung",
"components.Settings.notificationsettings": "Benachrichtigungseinstellungen",
"components.Settings.notificationsettingsDescription": "Hier können Sie auswählen, welche Arten von Benachrichtigungen gesendet werden sollen und über welche Arten von Diensten.",
"components.Settings.notrunning": "Nicht aktiv",
"components.Settings.plexlibraries": "Plex-Bibliotheken",
"components.Settings.plexlibrariesDescription": "Die Bibliotheken-Overseerr sucht nach Titeln. Richten Sie Ihre Plex-Verbindungseinstellungen ein und speichern Sie sie, und klicken Sie auf die Schaltfläche unten, wenn keine aufgeführt sind.",
"components.Settings.plexsettings": "Plex-Einstellungen",
"components.Settings.plexsettingsDescription": "Konfigurieren Sie die Einstellungen für Ihren Plex-Server. Overseerr verwendet Ihren Plex-Server, um Ihre Bibliothek in regelmäßigen Abständen zu scannen und festzustellen, welche Inhalte verfügbar sind.",
"components.Settings.port": "Port",
"components.Settings.radarrSettingsDescription": "Richten Sie unten Ihre Radarr-Verbindung ein. Sie können jederzeit mehrere, aber nur zwei standardmäßig aktiv haben (eine für Standard-HD und eine für 4K). Administratoren können überschreiben, welcher Server für neue Anforderungen verwendet wird.",
"components.Settings.radarrsettings": "Radarr-Einstellungen",
"components.Settings.runnow": "Jetzt ausführen",
"components.Settings.save": "Änderungen speichern",
"components.Settings.saving": "Speichern ",
"components.Settings.servername": "Servername (automatisch festgelegt)",
"components.Settings.servernamePlaceholder": "Plex-Servername",
"components.Settings.sonarrSettingsDescription": "Richten Sie unten Ihre Sonarr-Verbindung ein. Sie können jederzeit mehrere, aber nur zwei standardmäßig aktiv haben (eine für Standard-HD und eine für 4K). Administratoren können überschreiben, welcher Server für neue Anforderungen verwendet wird.",
"components.Settings.sonarrsettings": "Sonarr-Einstellungen",
"components.Settings.ssl": "SSL",
"components.Settings.startscan": "Scan starten",
"components.Settings.sync": "Plex-Bibliotheken synchronisieren",
"components.Settings.syncing": "Synchronisierung ",
"components.Setup.configureplex": "Plex konfigurieren",
"components.Setup.configureservices": "Dienste konfigurieren",
"components.Setup.continue": "Fortfahren",
"components.Setup.finish": "Konfiguration beenden",
"components.Setup.finishing": "Fertigstellung ",
"components.Setup.loginwithplex": "Anmeldung mit Plex",
"components.Setup.signinMessage": "Melden Sie sich zunächst mit Ihrem Plex-Konto an",
"components.Setup.welcome": "Willkommen bei Overseerr",
"components.Slider.noresults": "Keine Ergebnisse",
"components.TitleCard.movie": "Film",
"components.TitleCard.tvshow": "Serie",
"components.TvDetails.approve": "Genehmigen",
"components.TvDetails.approverequests": "{requestCount} {requestCount, plural, one {Request} other {Requests}} genehmigen",
"components.TvDetails.available": "Verfügbar",
"components.TvDetails.cancelrequest": "Antrag abbrechen",
"components.TvDetails.cast": "Besetzung",
"components.TvDetails.decline": "Ablehnen",
"components.TvDetails.declinerequests": "{requestCount} {requestCount, plural, one {Request} andere {Requests}} ablehnen",
"components.TvDetails.manageModalClearMedia": "Alle Mediendaten löschen",
"components.TvDetails.manageModalClearMediaWarning": "Dadurch werden alle Mediendaten einschließlich aller Anträge für dieses Element irreversibel entfernt. Wenn dieses Element in Ihrer Plex-Bibliothek vorhanden ist, werden die Medieninformationen bei der nächsten Synchronisierung neu erstellt.",
"components.TvDetails.manageModalNoRequests": "Keine Anträge",
"components.TvDetails.manageModalRequests": "Anträge",
"components.TvDetails.manageModalTitle": "Serien verwalten",
"components.TvDetails.originallanguage": "Originalsprache",
"components.TvDetails.overview": "Übersicht",
"components.TvDetails.overviewunavailable": "Übersicht nicht verfügbar",
"components.TvDetails.pending": "Ausstehend",
"components.TvDetails.recommendations": "Empfehlungen",
"components.TvDetails.recommendationssubtext": "Wenn Ihnen {title} gefallen hat, könnte Ihnen auch gefallen ",
"components.TvDetails.request": "Antrag",
"components.TvDetails.requestmore": "Mehr anfordern",
"components.TvDetails.similar": "Ähnliche Serien",
"components.TvDetails.similarsubtext": "Andere Serien {title} ähnlich",
"components.TvDetails.status": "Status",
"components.TvDetails.unavailable": "Nicht verfügbar",
"components.TvDetails.userrating": "Benutzerbewertung",
"components.UserEdit.admin": "Administrator/in",
"components.UserEdit.adminDescription": "Voller Administratorzugriff. Umgeht alle Berechtigungsprüfungen.",
"components.UserEdit.autoapprove": "Automatische Genehmigung",
"components.UserEdit.autoapproveDescription": "Gewährt die automatische Genehmigung für alle Anträge dieses Benutzers.",
"components.UserEdit.avatar": "Avatar",
"components.UserEdit.edituser": "Benutzer/in bearbeiten",
"components.UserEdit.email": "E-Mail",
"components.UserEdit.managerequests": "Anträge verwalten",
"components.UserEdit.managerequestsDescription": "Erteilt die Berechtigung zum Verwalten von Overseerr-Anträgen. Dies umfasst das Genehmigen und Ablehnen von Anträgen.",
"components.UserEdit.permissions": "Berechtigungen",
"components.UserEdit.request": "Antrag",
"components.UserEdit.requestDescription": "Erteilt die Berechtigung zum Anfordern von Filmen und Serien.",
"components.UserEdit.save": "Speichern",
"components.UserEdit.saving": "Speichern ",
"components.UserEdit.settings": "Einstellungen verwalten",
"components.UserEdit.settingsDescription": "Erteilt die Berechtigung zum Ändern aller Overseerr-Einstellungen. Ein/e Benutzer/in muss über diese Berechtigung verfügen, um sie anderen Personen erteilen zu können.",
"components.UserEdit.userfail": "Beim Speichern des Benutzers ist ein Fehler aufgetreten.",
"components.UserEdit.username": "Benutzername",
"components.UserEdit.users": "Benutzer verwalten",
"components.UserEdit.usersDescription": "Erteilt die Berechtigung zum Verwalten von Overseerr-Benutzern. Benutzer/innen mit dieser Berechtigung können Benutzer/innen mit Administratorrechten nicht ändern oder gewähren.",
"components.UserEdit.usersaved": "Benutzer/in gespeichert",
"components.UserEdit.vote": "Abstimmen",
"components.UserEdit.voteDescription": "Erteilt die Erlaubnis, über Anträge abzustimmen (Abstimmung noch nicht durchgeführt)",
"components.UserList.admin": "Admin",
"components.UserList.created": "Erstellt",
"components.UserList.delete": "Löschen",
"components.UserList.edit": "Bearbeiten",
"components.UserList.lastupdated": "Zuletzt aktualisiert",
"components.UserList.plexuser": "Plex-Benutzer/in",
"components.UserList.role": "Rolle",
"components.UserList.totalrequests": "Anträge insgesamt",
"components.UserList.user": "Benutzer/in",
"components.UserList.userlist": "Benutzer/innen-Liste",
"components.UserList.username": "Benutzername",
"components.UserList.usertype": "Benutzertyp",
"i18n.approve": "Genehmigen",
"i18n.approved": "Genehmigt",
"i18n.available": "Verfügbar",
"i18n.cancel": "Abbrechen",
"i18n.decline": "Ablehnen",
"i18n.declined": "Abgelehnt",
"i18n.delete": "Löschen",
"i18n.movies": "Films",
"i18n.partiallyavailable": "Teilweise verfügbar",
"i18n.pending": "Ausstehend",
"i18n.processing": "Verarbeitung ",
"i18n.tvshows": "Serien",
"i18n.unavailable": "Nicht verfügbar",
"pages.internalServerError": "{statusCode} Interner Serverfehler",
"pages.oops": "Hoppla",
"pages.pageNotFound": "404 Seite nicht gefunden",
"pages.returnHome": "Zur Starseite",
"pages.serviceUnavailable": "{statusCode} Dienst nicht verfügbar",
"pages.somethingWentWrong": "{statusCode} Es ist ein Fehler aufgetreten",
"components.TvDetails.TvCast.fullseriescast": "Vollserienbesetzung",
"components.MovieDetails.MovieCast.fullcast": "Vollständige Besetzung"
}

View File

@@ -18,6 +18,7 @@
"components.Layout.UserDropdown.signout": "Sign Out",
"components.Layout.alphawarning": "This is ALPHA software. Almost everything is bound to be nearly broken and/or unstable. Please report issues to the Overseerr GitHub!",
"components.Login.signinplex": "Sign in to continue",
"components.MovieDetails.MovieCast.fullcast": "Full Cast",
"components.MovieDetails.approve": "Approve",
"components.MovieDetails.available": "Available",
"components.MovieDetails.budget": "Budget",
@@ -212,7 +213,7 @@
"components.Settings.ssl": "SSL",
"components.Settings.startscan": "Start Scan",
"components.Settings.sync": "Sync Plex Libraries",
"components.Settings.syncing": "Syncing",
"components.Settings.syncing": "Syncing",
"components.Setup.configureplex": "Configure Plex",
"components.Setup.configureservices": "Configure Services",
"components.Setup.continue": "Continue",
@@ -224,6 +225,7 @@
"components.Slider.noresults": "No Results",
"components.TitleCard.movie": "Movie",
"components.TitleCard.tvshow": "Series",
"components.TvDetails.TvCast.fullseriescast": "Full Series Cast",
"components.TvDetails.approve": "Approve",
"components.TvDetails.approverequests": "Approve {requestCount} {requestCount, plural, one {Request} other {Requests}}",
"components.TvDetails.available": "Available",
@@ -260,7 +262,7 @@
"components.UserEdit.managerequestsDescription": "Grants permission to manage Overseerr requests. This includes approving and denying requests.",
"components.UserEdit.permissions": "Permissions",
"components.UserEdit.request": "Request",
"components.UserEdit.requestDescription": "Grants permission to make requests for movies or tv shows.",
"components.UserEdit.requestDescription": "Grants permission to request movies and series.",
"components.UserEdit.save": "Save",
"components.UserEdit.saving": "Saving...",
"components.UserEdit.settings": "Manage Settings",
@@ -294,7 +296,7 @@
"i18n.movies": "Movies",
"i18n.partiallyavailable": "Partially Available",
"i18n.pending": "Pending",
"i18n.processing": "Processing",
"i18n.processing": "Processing",
"i18n.tvshows": "Series",
"i18n.unavailable": "Unavailable",
"pages.internalServerError": "{statusCode} - Internal Server Error",

View File

@@ -10,7 +10,7 @@
"components.Discover.upcoming": "Prochaines sorties",
"components.Discover.upcomingmovies": "Prochaines sorties",
"components.Layout.LanguagePicker.changelanguage": "Changer la langue",
"components.Layout.SearchInput.searchPlaceholder": "Rechercher films et TV",
"components.Layout.SearchInput.searchPlaceholder": "Rechercher des films et des séries",
"components.Layout.Sidebar.dashboard": "Découverte",
"components.Layout.Sidebar.requests": "Demandes d'ajouts",
"components.Layout.Sidebar.settings": "Paramètres",
@@ -22,12 +22,12 @@
"components.MovieDetails.available": "Disponible",
"components.MovieDetails.budget": "Budget",
"components.MovieDetails.cancelrequest": "Annuler la demande",
"components.MovieDetails.cast": "Distribution",
"components.MovieDetails.cast": "Casting",
"components.MovieDetails.decline": "Refuser",
"components.MovieDetails.manageModalClearMedia": "Effacer toutes les données médias",
"components.MovieDetails.manageModalClearMediaWarning": "Toutes les donnés de médias vont être éffacées pour cet élément irréversiblement. Si cet élément existe dans votre bibliothèque Plex, les informations du média seront recrées à la prochaine synchronisation.",
"components.MovieDetails.manageModalNoRequests": "Aucune demande",
"components.MovieDetails.manageModalRequests": "Demandes d'ajouts",
"components.MovieDetails.manageModalRequests": "Demandes d'ajout",
"components.MovieDetails.manageModalTitle": "Gérer les films",
"components.MovieDetails.originallanguage": "Langue originale",
"components.MovieDetails.overview": "Résumé",
@@ -45,14 +45,14 @@
"components.MovieDetails.unavailable": "Indisponible",
"components.MovieDetails.userrating": "Note utilisateur",
"components.MovieDetails.viewrequest": "Voir la demande",
"components.PersonDetails.appearsin": "",
"components.PersonDetails.ascharacter": "",
"components.PersonDetails.nobiography": "",
"components.PersonDetails.appearsin": "Apparaît dans",
"components.PersonDetails.ascharacter": "comme {character}",
"components.PersonDetails.nobiography": "Aucune biographie disponible.",
"components.PlexLoginButton.loading": "Chargement…",
"components.PlexLoginButton.loggingin": "Connexion en cours…",
"components.PlexLoginButton.loginwithplex": "Se connecter avec Plex",
"components.RequestBlock.seasons": "Saisons",
"components.RequestCard.all": "",
"components.RequestCard.all": "Toutes",
"components.RequestCard.requestedby": "Demandé par {username}",
"components.RequestCard.seasons": "Saisons",
"components.RequestList.RequestItem.notavailable": "s.o.",
@@ -62,7 +62,7 @@
"components.RequestList.modifiedBy": "Dernière modification par",
"components.RequestList.next": "Suivant",
"components.RequestList.previous": "Précédent",
"components.RequestList.requestedAt": "Demandé à",
"components.RequestList.requestedAt": "Demandé le",
"components.RequestList.requests": "Demandes",
"components.RequestList.showingresults": "Affichage de <strong>{from}</strong> à <strong>{to}</strong> sur <strong>{total </strong> résultats",
"components.RequestList.status": "Statut",
@@ -212,7 +212,7 @@
"components.Settings.ssl": "SSL",
"components.Settings.startscan": "Commencer le scan",
"components.Settings.sync": "Synchroniser les bibliothèques Plex",
"components.Settings.syncing": "Synchronisation en cours",
"components.Settings.syncing": "Synchronisation",
"components.Setup.configureplex": "Configurer Plex",
"components.Setup.configureservices": "Configurer les Services",
"components.Setup.continue": "Continuer",
@@ -227,7 +227,7 @@
"components.TvDetails.approve": "Valider",
"components.TvDetails.approverequests": "Valider {requestCount} {requestCount, plural, one {Request} other {Requests}}",
"components.TvDetails.available": "Disponible",
"components.TvDetails.cancelrequest": "Annuler la Demande",
"components.TvDetails.cancelrequest": "Annuler la demande",
"components.TvDetails.cast": "Casting",
"components.TvDetails.decline": "Refuser",
"components.TvDetails.declinerequests": "Refuser {requestCount} {requestCount, plural, one {Request} other {Requests}}",
@@ -250,7 +250,7 @@
"components.TvDetails.unavailable": "Indisponible",
"components.TvDetails.userrating": "Note utilisateurs",
"components.UserEdit.admin": "Administrateur",
"components.UserEdit.adminDescription": "Accès administrateur complet. Contourner toutes les demandes de permissions.",
"components.UserEdit.adminDescription": "Accès administrateur complet. Contourne toutes les demandes de permissions.",
"components.UserEdit.autoapprove": "Validation automatique",
"components.UserEdit.autoapproveDescription": "Active la validation automatique de toutes les demandes d'ajouts de cet utilisateur.",
"components.UserEdit.avatar": "Avatar",
@@ -258,9 +258,9 @@
"components.UserEdit.email": "Courriel",
"components.UserEdit.managerequests": "Gérer les demandes d'ajouts",
"components.UserEdit.managerequestsDescription": "Donne la permission de gérer les demandes d'ajouts sur Overseerr. Ceci inclut la possibilité de valider ou refuser une demande.",
"components.UserEdit.permissions": "Permissions",
"components.UserEdit.permissions": "Autorisations",
"components.UserEdit.request": "Demandes d'ajouts",
"components.UserEdit.requestDescription": "Donne la permission de faire des demandes d'ajouts pour les films et séries.",
"components.UserEdit.requestDescription": "Accorde l'autorisation de demander des films et des séries.",
"components.UserEdit.save": "Sauvegarder",
"components.UserEdit.saving": "Enregistrement en cours…",
"components.UserEdit.settings": "Gérer les paramètres",
@@ -279,7 +279,7 @@
"components.UserList.lastupdated": "Denière mise à jour",
"components.UserList.plexuser": "Utilisateur Plex",
"components.UserList.role": "Rôle",
"components.UserList.totalrequests": "Demandes d'ajouts total",
"components.UserList.totalrequests": "Demandes d'ajout totales",
"components.UserList.user": "Utilisateur",
"components.UserList.userlist": "Liste des utilisateurs",
"components.UserList.username": "Nom d'utilisateur",
@@ -294,7 +294,7 @@
"i18n.movies": "Films",
"i18n.partiallyavailable": "Partiellement disponible",
"i18n.pending": "En attente",
"i18n.processing": "En cours",
"i18n.processing": "Traitement en cours",
"i18n.tvshows": "Séries",
"i18n.unavailable": "Indisponible",
"pages.internalServerError": "{statusCode} Erreur du serveur interne",
@@ -302,5 +302,7 @@
"pages.pageNotFound": "404 Page non trouvée",
"pages.returnHome": "Retourner à l'acceuil",
"pages.serviceUnavailable": "{statusCode} Service indisponible",
"pages.somethingWentWrong": "{statusCode} Il y a eu un problème"
"pages.somethingWentWrong": "{statusCode} Une erreur est survenue",
"components.TvDetails.TvCast.fullseriescast": "Casting complet de la série",
"components.MovieDetails.MovieCast.fullcast": "Casting complet"
}

View File

@@ -6,7 +6,7 @@
"components.Discover.populartv": "人気のテレビ番組",
"components.Discover.recentlyAdded": "最近追加された動画",
"components.Discover.recentrequests": "最近のリクエスト",
"components.Discover.trending": "最近のトレンド",
"components.Discover.trending": "トレンド",
"components.Discover.upcoming": "今後リリースされる映画",
"components.Discover.upcomingmovies": "今後リリースされる映画",
"components.Layout.LanguagePicker.changelanguage": "言語",
@@ -16,16 +16,16 @@
"components.Layout.Sidebar.settings": "設定",
"components.Layout.Sidebar.users": "ユーザー",
"components.Layout.UserDropdown.signout": "ログアウト",
"components.Layout.alphawarning": "このソフトはアルファ版です。ほとんどの機能は不安定又は故障している可能性があります。バグ発見したとき、OverseerrのGithubまでご連絡ください",
"components.Login.signinplex": "続にはログインしてください",
"components.Layout.alphawarning": "このソフトはアルファ版です。ほとんどの機能は不安定又は故障している可能性があります。バグ発見した場合、OverseerrのGithubまでご連絡ください",
"components.Login.signinplex": "続けるにはログインしてください",
"components.MovieDetails.approve": "承認",
"components.MovieDetails.available": "鑑賞可能",
"components.MovieDetails.budget": "予算",
"components.MovieDetails.cancelrequest": "リクエストを取り消す",
"components.MovieDetails.cast": "キャスト",
"components.MovieDetails.decline": "拒否する",
"components.MovieDetails.manageModalClearMedia": "メディアのデータを消去",
"components.MovieDetails.manageModalClearMediaWarning": "リクエストを含め、メーディアのデータをすべて消去されます。この操作は元に戻すことができません。このアイテムが Plex ライブラリに存在する場合、メディア情報は次の同期で再作成されます。",
"components.MovieDetails.decline": "拒否",
"components.MovieDetails.manageModalClearMedia": "メディア情報を消去",
"components.MovieDetails.manageModalClearMediaWarning": "リクエストを含め、すべての詳細情報が消去されます。この操作は元に戻すことができません。この作品が Plex ライブラリに存在する場合、詳細情報は次の同期で再作成されます。",
"components.MovieDetails.manageModalNoRequests": "リクエストがありません",
"components.MovieDetails.manageModalRequests": "リクエスト",
"components.MovieDetails.manageModalTitle": "映画を管理",
@@ -36,7 +36,7 @@
"components.MovieDetails.recommendations": "オススメの作品",
"components.MovieDetails.recommendationssubtext": "{title}が好きだった人は、こんなのも好きかもしれません...",
"components.MovieDetails.releasedate": "公開日",
"components.MovieDetails.request": "リクエストする",
"components.MovieDetails.request": "リクエストする",
"components.MovieDetails.revenue": "収益",
"components.MovieDetails.runtime": "{minutes}分",
"components.MovieDetails.similar": "関連作品",
@@ -45,28 +45,28 @@
"components.MovieDetails.unavailable": "鑑賞不可",
"components.MovieDetails.userrating": "ユーザー評価",
"components.MovieDetails.viewrequest": "リクエストを閲覧",
"components.PersonDetails.appearsin": "",
"components.PersonDetails.ascharacter": "",
"components.PersonDetails.nobiography": "",
"components.PersonDetails.appearsin": "出演作品",
"components.PersonDetails.ascharacter": "{character}役",
"components.PersonDetails.nobiography": "出演作品の情報はありません。",
"components.PlexLoginButton.loading": "ロード中…",
"components.PlexLoginButton.loggingin": "ログイン中…",
"components.PlexLoginButton.loginwithplex": "Plexでログイン",
"components.RequestBlock.seasons": "シーズン",
"components.RequestCard.all": "",
"components.RequestCard.all": "すべて",
"components.RequestCard.requestedby": "{username}のリクエスト",
"components.RequestCard.seasons": "シーズン",
"components.RequestList.RequestItem.notavailable": "N/A",
"components.RequestList.RequestItem.requestedby": "{username}のリクエスト",
"components.RequestList.RequestItem.seasons": "シーズン",
"components.RequestList.mediaInfo": "メディア情報",
"components.RequestList.mediaInfo": "詳細情報",
"components.RequestList.modifiedBy": "最終更新者",
"components.RequestList.next": "次",
"components.RequestList.previous": "戻る",
"components.RequestList.requestedAt": "リクエスト日時",
"components.RequestList.requests": "リクエスト",
"components.RequestList.showingresults": "<strong>{total}</strong>中<strong>{from}</strong><strong>{to}</strong>件",
"components.RequestList.status": "ステータス",
"components.RequestModal.cancel": "ャンセルリクエスト",
"components.RequestList.status": "状態",
"components.RequestModal.cancel": "ャンセルリクエスト",
"components.RequestModal.cancelling": "取り消し中...",
"components.RequestModal.cancelrequest": "このリクエストをキャンセルしてよろしいですか?",
"components.RequestModal.close": "閉じる",
@@ -75,9 +75,9 @@
"components.RequestModal.numberofepisodes": "エピソード数",
"components.RequestModal.pendingrequest": "{title}がリクエスト中",
"components.RequestModal.request": "リクエストする",
"components.RequestModal.requestCancel": "<strong>{title}</strong>のリクエストは取り消された",
"components.RequestModal.requestSuccess": "<strong>{title}</strong>のリクエストは完了した。",
"components.RequestModal.requestadmin": "このリクエスト今すぐ承認ます。",
"components.RequestModal.requestCancel": "<strong>{title}</strong>のリクエストは取り消されました",
"components.RequestModal.requestSuccess": "<strong>{title}</strong>のリクエストは完了しました。",
"components.RequestModal.requestadmin": "このリクエスト今すぐ承認されます。",
"components.RequestModal.requestfrom": "{username}はすでにリクエストを上げています",
"components.RequestModal.requesting": "リクエスト中…",
"components.RequestModal.requestseasons": "{seasonCount} {seasonCount, plural, one {Season} other {Seasons}}をリクエスト",
@@ -128,11 +128,11 @@
"components.Settings.RadarrModal.testing": "テスト中...",
"components.Settings.RadarrModal.toastRadarrTestFailure": "Radarrサーバーの接続は失敗しました",
"components.Settings.RadarrModal.toastRadarrTestSuccess": "Radarrサーバーの接続は成功しました!",
"components.Settings.RadarrModal.validationApiKeyRequired": "APIキーの入力必要です",
"components.Settings.RadarrModal.validationHostnameRequired": "ホスト名/IPの入力必要です",
"components.Settings.RadarrModal.validationPortRequired": "ポートの入力必要です",
"components.Settings.RadarrModal.validationProfileRequired": "プロファイルの選択必要です",
"components.Settings.RadarrModal.validationRootFolderRequired": "ルートフォルダーの選択必要です",
"components.Settings.RadarrModal.validationApiKeyRequired": "APIキーの入力必要です",
"components.Settings.RadarrModal.validationHostnameRequired": "ホスト名/IPの入力必要です",
"components.Settings.RadarrModal.validationPortRequired": "ポートの入力必要です",
"components.Settings.RadarrModal.validationProfileRequired": "プロファイルの選択必要です",
"components.Settings.RadarrModal.validationRootFolderRequired": "ルートフォルダーの選択必要です",
"components.Settings.SonarrModal.add": "サーバーを追加",
"components.Settings.SonarrModal.apiKey": "APIキー",
"components.Settings.SonarrModal.apiKeyPlaceholder": "SonarrのAPIキー",
@@ -157,12 +157,12 @@
"components.Settings.SonarrModal.test": "テストする",
"components.Settings.SonarrModal.testing": "テスト中...",
"components.Settings.SonarrModal.toastRadarrTestFailure": "Sonarrサーバーに接続できませんでした",
"components.Settings.SonarrModal.toastRadarrTestSuccess": "Sonarrサーバーの接続成功しました!",
"components.Settings.SonarrModal.validationApiKeyRequired": "APIキーの入力必要です",
"components.Settings.SonarrModal.validationHostnameRequired": "ホスト名/IPの入力必要です",
"components.Settings.SonarrModal.validationPortRequired": "ポートの入力必要です",
"components.Settings.SonarrModal.validationProfileRequired": "プロファイルの選択必要です",
"components.Settings.SonarrModal.validationRootFolderRequired": "ルートフォルダーの選択必要です",
"components.Settings.SonarrModal.toastRadarrTestSuccess": "Sonarrサーバーの接続成功しました!",
"components.Settings.SonarrModal.validationApiKeyRequired": "APIキーの入力必要です",
"components.Settings.SonarrModal.validationHostnameRequired": "ホスト名/IPの入力必要です",
"components.Settings.SonarrModal.validationPortRequired": "ポートの入力必要です",
"components.Settings.SonarrModal.validationProfileRequired": "プロファイルの選択必要です",
"components.Settings.SonarrModal.validationRootFolderRequired": "ルートフォルダーの選択必要です",
"components.Settings.activeProfile": "アクティブプロファイル",
"components.Settings.addradarr": "Radarrサーバーを追加",
"components.Settings.address": "アドレス",
@@ -183,7 +183,7 @@
"components.Settings.jobname": "ジョブ名",
"components.Settings.librariesRemaining": "残りのライブラリー: {count}",
"components.Settings.manualscan": "手動ライブラリースキャン",
"components.Settings.manualscanDescription": "通常は6時間に一度しか実行されません。Overseerr は、Plex サーバーの最近追加されたフォルダをより頻繁にチェックします。初めて Plex を設定する場合は、一度だけ手動でライブラリーをスキャンすることをお勧めします。",
"components.Settings.manualscanDescription": "通常は6時間に一度しか実行されません。Overseerr は、Plex サーバーの最近追加されたフォルダをより頻繁にチェックします。初めて Plex を設定する場合は、一度手動でライブラリーをスキャンすることをお勧めします。",
"components.Settings.menuAbout": "Overseerrについて",
"components.Settings.menuGeneralSettings": "一般設定",
"components.Settings.menuJobs": "ジョブ",
@@ -212,7 +212,7 @@
"components.Settings.ssl": "SSL",
"components.Settings.startscan": "スキャンを開始",
"components.Settings.sync": "Plexライブラリーの同期",
"components.Settings.syncing": "同期中",
"components.Settings.syncing": "同期中",
"components.Setup.configureplex": "Plexの設定",
"components.Setup.configureservices": "連携サービスの設定",
"components.Setup.continue": "続行",
@@ -294,7 +294,7 @@
"i18n.movies": "映画",
"i18n.partiallyavailable": "一部鑑賞可能",
"i18n.pending": "リクエスト中",
"i18n.processing": "処理中",
"i18n.processing": "処理中",
"i18n.tvshows": "シリーズ",
"i18n.unavailable": "鑑賞不可",
"pages.internalServerError": "{statusCode} - 内部サーバーエラー",

View File

@@ -45,14 +45,14 @@
"components.MovieDetails.unavailable": "Utilgjengelig",
"components.MovieDetails.userrating": "Brukervurdering",
"components.MovieDetails.viewrequest": "Vis forespørsel",
"components.PersonDetails.appearsin": "",
"components.PersonDetails.ascharacter": "",
"components.PersonDetails.nobiography": "",
"components.PersonDetails.appearsin": "Finnes i",
"components.PersonDetails.ascharacter": "som {character}",
"components.PersonDetails.nobiography": "Ingen biografi tilgjengelig.",
"components.PlexLoginButton.loading": "Laster inn …",
"components.PlexLoginButton.loggingin": "Logger inn …",
"components.PlexLoginButton.loginwithplex": "Logg inn med Plex",
"components.RequestBlock.seasons": "Sesonger",
"components.RequestCard.all": "",
"components.RequestCard.all": "Alle",
"components.RequestCard.requestedby": "Forespurt av {username}",
"components.RequestCard.seasons": "Sesonger",
"components.RequestList.RequestItem.notavailable": "I/T",

View File

@@ -1,61 +1,61 @@
{
"components.Discover.discovermovies": "",
"components.Discover.discovertv": "",
"components.Discover.nopending": "",
"components.Discover.popularmovies": "",
"components.Discover.populartv": "",
"components.Discover.recentlyAdded": "",
"components.Discover.recentrequests": "",
"components.Discover.trending": "",
"components.Discover.upcoming": "",
"components.Discover.upcomingmovies": "",
"components.Layout.LanguagePicker.changelanguage": "",
"components.Layout.SearchInput.searchPlaceholder": "",
"components.Layout.Sidebar.dashboard": "",
"components.Layout.Sidebar.requests": "",
"components.Layout.Sidebar.settings": "",
"components.Layout.Sidebar.users": "",
"components.Layout.UserDropdown.signout": "",
"components.Layout.alphawarning": "",
"components.Login.signinplex": "",
"components.MovieDetails.approve": "",
"components.MovieDetails.available": "",
"components.MovieDetails.budget": "",
"components.MovieDetails.cancelrequest": "",
"components.MovieDetails.cast": "",
"components.MovieDetails.decline": "",
"components.MovieDetails.manageModalClearMedia": "",
"components.MovieDetails.manageModalClearMediaWarning": "",
"components.MovieDetails.manageModalNoRequests": "",
"components.MovieDetails.manageModalRequests": "",
"components.MovieDetails.manageModalTitle": "",
"components.MovieDetails.originallanguage": "",
"components.MovieDetails.overview": "",
"components.MovieDetails.overviewunavailable": "",
"components.MovieDetails.pending": "",
"components.MovieDetails.recommendations": "",
"components.MovieDetails.recommendationssubtext": "",
"components.MovieDetails.releasedate": "",
"components.MovieDetails.request": "",
"components.MovieDetails.revenue": "",
"components.MovieDetails.runtime": "",
"components.MovieDetails.similar": "",
"components.MovieDetails.similarsubtext": "",
"components.MovieDetails.status": "",
"components.MovieDetails.unavailable": "",
"components.MovieDetails.userrating": "",
"components.MovieDetails.viewrequest": "",
"components.PersonDetails.appearsin": "",
"components.PersonDetails.ascharacter": "",
"components.PersonDetails.nobiography": "",
"components.PlexLoginButton.loading": "",
"components.PlexLoginButton.loggingin": "",
"components.PlexLoginButton.loginwithplex": "",
"components.RequestBlock.seasons": "",
"components.RequestCard.all": "",
"components.RequestCard.requestedby": "",
"components.RequestCard.seasons": "",
"components.RequestList.RequestItem.notavailable": "",
"components.Discover.discovermovies": "Populaire Films",
"components.Discover.discovertv": "Populaire Series",
"components.Discover.nopending": "Geen Wachtende Verzoeken",
"components.Discover.popularmovies": "Populaire Films",
"components.Discover.populartv": "Populaire Series",
"components.Discover.recentlyAdded": "RecentelijkToegevoegd",
"components.Discover.recentrequests": "Recente Verzoeken",
"components.Discover.trending": "Trending",
"components.Discover.upcoming": "Verwachte Films",
"components.Discover.upcomingmovies": "Verwachte Films",
"components.Layout.LanguagePicker.changelanguage": "Wijzig Taal",
"components.Layout.SearchInput.searchPlaceholder": "Zoek Films & TV",
"components.Layout.Sidebar.dashboard": "Ontdek",
"components.Layout.Sidebar.requests": "Verzoeken",
"components.Layout.Sidebar.settings": "Instellingen",
"components.Layout.Sidebar.users": "Gebruikers",
"components.Layout.UserDropdown.signout": "Uitloggen",
"components.Layout.alphawarning": "Dit is ALPHA software. Bijna alles is waarschijnlijk kapot of onstabiel. Rapporteer issues bij de Overseerr GitHub!",
"components.Login.signinplex": "Log in om door te gaan",
"components.MovieDetails.approve": "Goedkeuren",
"components.MovieDetails.available": "Beschikbaar",
"components.MovieDetails.budget": "Budget",
"components.MovieDetails.cancelrequest": "Annuleer Verzoek",
"components.MovieDetails.cast": "Acteurs",
"components.MovieDetails.decline": "Weigeren",
"components.MovieDetails.manageModalClearMedia": "Wis Alle Media Data",
"components.MovieDetails.manageModalClearMediaWarning": "Dit wist alle media data inclusief alle verzoeken voor dit item zonder herstelmogelijkheden. Als dit item in je Plex bibliotheek bestaat zal alle media info bij de volgende sync hersteld worden.",
"components.MovieDetails.manageModalNoRequests": "Geen Verzoeken",
"components.MovieDetails.manageModalRequests": "Verzoeken",
"components.MovieDetails.manageModalTitle": "Beheer Film",
"components.MovieDetails.originallanguage": "Originele Taal",
"components.MovieDetails.overview": "Overzicht",
"components.MovieDetails.overviewunavailable": "Overzicht onbeschikbaar",
"components.MovieDetails.pending": "In afwachting",
"components.MovieDetails.recommendations": "Aanbevelingen",
"components.MovieDetails.recommendationssubtext": "Als je {title} leuk vond, vind je dit misschien ook leuk...",
"components.MovieDetails.releasedate": "Release Datum",
"components.MovieDetails.request": "Verzoek",
"components.MovieDetails.revenue": "Omzet",
"components.MovieDetails.runtime": "{minutes} minuten",
"components.MovieDetails.similar": "Vergelijkbare Titels",
"components.MovieDetails.similarsubtext": "Andere films vergelijkbaar met {title}",
"components.MovieDetails.status": "Status",
"components.MovieDetails.unavailable": "Onbeschikbaar",
"components.MovieDetails.userrating": "Gebruikersbeoordeling",
"components.MovieDetails.viewrequest": "Verzoek Bekijken",
"components.PersonDetails.appearsin": "Verschijnt in",
"components.PersonDetails.ascharacter": "als {character}",
"components.PersonDetails.nobiography": "Geen biografie beschikbaar.",
"components.PlexLoginButton.loading": "Bezig met laden...",
"components.PlexLoginButton.loggingin": "Bezig met inloggen...",
"components.PlexLoginButton.loginwithplex": "Login met Plex",
"components.RequestBlock.seasons": "Seizoenen",
"components.RequestCard.all": "Alle",
"components.RequestCard.requestedby": "Verzocht door {username}",
"components.RequestCard.seasons": "Seizoenen",
"components.RequestList.RequestItem.notavailable": "Nvt",
"components.RequestList.RequestItem.requestedby": "",
"components.RequestList.RequestItem.seasons": "",
"components.RequestList.mediaInfo": "",

View File

@@ -1,7 +1,7 @@
{
"components.Discover.discovermovies": "Популярные фильмы",
"components.Discover.discovertv": "Популярные серии",
"components.Discover.nopending": "",
"components.Discover.nopending": "Нет отложенных запросов",
"components.Discover.popularmovies": "Популярные фильмы",
"components.Discover.populartv": "Популярные серии",
"components.Discover.recentlyAdded": "Недавно добавленные",

View File

@@ -0,0 +1,9 @@
import { NextPage } from 'next';
import React from 'react';
import MovieCast from '../../../components/MovieDetails/MovieCast';
const MovieCastPage: NextPage = () => {
return <MovieCast />;
};
export default MovieCastPage;

View File

@@ -0,0 +1,9 @@
import { NextPage } from 'next';
import React from 'react';
import TvCast from '../../../components/TvDetails/TvCast';
const TvCastPage: NextPage = () => {
return <TvCast />;
};
export default TvCastPage;

View File

@@ -1020,27 +1020,13 @@
core-js-pure "^3.0.0"
regenerator-runtime "^0.13.4"
"@babel/runtime@7.12.5":
"@babel/runtime@7.12.5", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.5", "@babel/runtime@^7.11.2", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7":
version "7.12.5"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e"
integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==
dependencies:
regenerator-runtime "^0.13.4"
"@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7":
version "7.11.2"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736"
integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==
dependencies:
regenerator-runtime "^0.13.4"
"@babel/runtime@^7.10.5":
version "7.12.1"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.1.tgz#b4116a6b6711d010b2dad3b7b6e43bf1b9954740"
integrity sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==
dependencies:
regenerator-runtime "^0.13.4"
"@babel/template@^7.10.4":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278"
@@ -7109,9 +7095,9 @@ inherits@2.0.3:
integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
ini@^1.3.4, ini@^1.3.5, ini@~1.3.0:
version "1.3.5"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
version "1.3.8"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
init-package-json@^1.10.3:
version "1.10.3"
@@ -14197,10 +14183,10 @@ yn@3.1.1:
resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==
yup@^0.32.6:
version "0.32.6"
resolved "https://registry.yarnpkg.com/yup/-/yup-0.32.6.tgz#7fd924536cdf61ec5df7a4bd0576d0a3954b03f6"
integrity sha512-i5poB/ZWU0zGoCwViLw++NQbUFy+X9xfoSSK31JOLh3RoBVUaYrNlYIyxqK8HGrxTHPIl5BBNu/mJYKNeFVvdA==
yup@^0.32.8:
version "0.32.8"
resolved "https://registry.yarnpkg.com/yup/-/yup-0.32.8.tgz#16e4a949a86a69505abf99fd0941305ac9adfc39"
integrity sha512-SZulv5FIZ9d5H99EN5tRCRPXL0eyoYxWIP1AacCrjC9d4DfP13J1dROdKGfpfRHT3eQB6/ikBl5jG21smAfCkA==
dependencies:
"@babel/runtime" "^7.10.5"
"@types/lodash" "^4.14.165"