diff --git a/.all-contributorsrc b/.all-contributorsrc
deleted file mode 100644
index 6f3cafc0a6..0000000000
--- a/.all-contributorsrc
+++ /dev/null
@@ -1,647 +0,0 @@
-{
- "files": [
- "README.md"
- ],
- "imageSize": 100,
- "commit": false,
- "badgeTemplate": "-orange.svg\"/>",
- "contributorsPerLine": 7,
- "projectName": "jellyseerr",
- "projectOwner": "fallenbagel",
- "repoType": "github",
- "repoHost": "https://github.com",
- "skipCi": true,
- "commitConvention": "angular",
- "commitType": "docs",
- "contributors": [
- {
- "login": "Fallenbagel",
- "name": "Fallenbagel",
- "avatar_url": "https://avatars.githubusercontent.com/u/98979876?v=4",
- "profile": "https://github.com/Fallenbagel",
- "contributions": [
- "code",
- "maintenance"
- ]
- },
- {
- "login": "seanzhang98",
- "name": "Sean",
- "avatar_url": "https://avatars.githubusercontent.com/u/34902361?v=4",
- "profile": "https://github.com/seanzhang98",
- "contributions": [
- "translation",
- "code"
- ]
- },
- {
- "login": "notfakie",
- "name": "notfakie",
- "avatar_url": "https://avatars.githubusercontent.com/u/103784113?v=4",
- "profile": "https://github.com/notfakie",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "Jumail",
- "name": "Mohamed Jumail",
- "avatar_url": "https://avatars.githubusercontent.com/u/7672055?v=4",
- "profile": "https://github.com/Jumail",
- "contributions": [
- "review"
- ]
- },
- {
- "login": "jsl9208",
- "name": "Shilong Jiang",
- "avatar_url": "https://avatars.githubusercontent.com/u/4048787?v=4",
- "profile": "https://www.heywhale.com",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "boring-dragon",
- "name": "Boring Dragon",
- "avatar_url": "https://avatars.githubusercontent.com/u/28459081?v=4",
- "profile": "https://jinas.me",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "sambartik",
- "name": "Samuel Bartík",
- "avatar_url": "https://avatars.githubusercontent.com/u/63553146?v=4",
- "profile": "https://github.com/sambartik",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "CyferShepard",
- "name": "Thegan Govender",
- "avatar_url": "https://avatars.githubusercontent.com/u/24864904?v=4",
- "profile": "https://github.com/CyferShepard",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "jab416171",
- "name": "jab416171",
- "avatar_url": "https://avatars.githubusercontent.com/u/345752?v=4",
- "profile": "https://github.com/jab416171",
- "contributions": [
- "doc",
- "code"
- ]
- },
- {
- "login": "NicolaiVdS",
- "name": "Nicolai Van der Storm",
- "avatar_url": "https://avatars.githubusercontent.com/u/5257222?v=4",
- "profile": "https://nvds.be",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "Smexhy",
- "name": "Smexhy",
- "avatar_url": "https://avatars.githubusercontent.com/u/4880625?v=4",
- "profile": "https://github.com/Smexhy",
- "contributions": [
- "translation"
- ]
- },
- {
- "login": "dd060606",
- "name": "dd060606",
- "avatar_url": "https://avatars.githubusercontent.com/u/58089504?v=4",
- "profile": "https://dd06-dev.fr",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "darmiel",
- "name": "Daniel",
- "avatar_url": "https://avatars.githubusercontent.com/u/71837281?v=4",
- "profile": "https://qwer.tz",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "undone37",
- "name": "undone37",
- "avatar_url": "https://avatars.githubusercontent.com/u/10513808?v=4",
- "profile": "https://github.com/undone37",
- "contributions": [
- "translation"
- ]
- },
- {
- "login": "CheChu10",
- "name": "Chechu García",
- "avatar_url": "https://avatars.githubusercontent.com/u/32913133?v=4",
- "profile": "https://github.com/CheChu10",
- "contributions": [
- "translation"
- ]
- },
- {
- "login": "DimitriDR",
- "name": "Dimitri",
- "avatar_url": "https://avatars.githubusercontent.com/u/56969769?v=4",
- "profile": "https://github.com/DimitriDR",
- "contributions": [
- "translation"
- ]
- },
- {
- "login": "andrey4korop",
- "name": "andrey4korop",
- "avatar_url": "https://avatars.githubusercontent.com/u/24610708?v=4",
- "profile": "https://github.com/andrey4korop",
- "contributions": [
- "code",
- "translation"
- ]
- },
- {
- "login": "GeoffreyCoulaud",
- "name": "Geoffrey Coulaud",
- "avatar_url": "https://avatars.githubusercontent.com/u/20744730?v=4",
- "profile": "https://geoffrey-coulaud.fr",
- "contributions": [
- "translation"
- ]
- },
- {
- "login": "Pikachu920",
- "name": "Pikachu920",
- "avatar_url": "https://avatars.githubusercontent.com/u/28607612?v=4",
- "profile": "https://github.com/Pikachu920",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "yalagin",
- "name": "Maxim Yalagin",
- "avatar_url": "https://avatars.githubusercontent.com/u/12879142?v=4",
- "profile": "https://github.com/yalagin",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "jeaboswell",
- "name": "Jesse Boswell",
- "avatar_url": "https://avatars.githubusercontent.com/u/11653068?v=4",
- "profile": "https://github.com/jeaboswell",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "d-fendrich",
- "name": "d-fendrich",
- "avatar_url": "https://avatars.githubusercontent.com/u/27904138?v=4",
- "profile": "https://github.com/d-fendrich",
- "contributions": [
- "translation"
- ]
- },
- {
- "login": "davidfdezalcoba",
- "name": "David Fernández Alcoba",
- "avatar_url": "https://avatars.githubusercontent.com/u/15996018?v=4",
- "profile": "https://github.com/davidfdezalcoba",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "Gauvino",
- "name": "Gauvino",
- "avatar_url": "https://avatars.githubusercontent.com/u/68083474?v=4",
- "profile": "https://github.com/Gauvino",
- "contributions": [
- "translation"
- ]
- },
- {
- "login": "EthanArmbrust",
- "name": "EthanArmbrust",
- "avatar_url": "https://avatars.githubusercontent.com/u/22754714?v=4",
- "profile": "https://github.com/EthanArmbrust",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "SirMartin",
- "name": "Eduardo",
- "avatar_url": "https://avatars.githubusercontent.com/u/854646?v=4",
- "profile": "http://www.piribisoft.com",
- "contributions": [
- "doc",
- "code"
- ]
- },
- {
- "login": "RickLuiken",
- "name": "RickLuiken",
- "avatar_url": "https://avatars.githubusercontent.com/u/34110371?v=4",
- "profile": "https://github.com/RickLuiken",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "Br33ce",
- "name": "Br33ce",
- "avatar_url": "https://avatars.githubusercontent.com/u/124933490?v=4",
- "profile": "https://github.com/Br33ce",
- "contributions": [
- "translation"
- ]
- },
- {
- "login": "athphane",
- "name": "Athfan Khaleel",
- "avatar_url": "https://avatars.githubusercontent.com/u/13810742?v=4",
- "profile": "https://athfan.com",
- "contributions": [
- "doc",
- "code"
- ]
- },
- {
- "login": "mdll23",
- "name": "Michael Dallinger",
- "avatar_url": "https://avatars.githubusercontent.com/u/142844478?v=4",
- "profile": "https://github.com/mdll23",
- "contributions": [
- "translation"
- ]
- },
- {
- "login": "xeruf",
- "name": "Janek",
- "avatar_url": "https://avatars.githubusercontent.com/u/13354331?v=4",
- "profile": "https://github.com/xeruf",
- "contributions": [
- "doc",
- "code"
- ]
- },
- {
- "login": "aleksasiriski",
- "name": "Aleksa Siriški",
- "avatar_url": "https://avatars.githubusercontent.com/u/31509435?v=4",
- "profile": "https://aleksasiriski.dev",
- "contributions": [
- "infra"
- ]
- },
- {
- "login": "Danish-H",
- "name": "Danish Humair",
- "avatar_url": "https://avatars.githubusercontent.com/u/121830048?v=4",
- "profile": "http://danishhumair.com",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "trackmastersteve",
- "name": "Stephen Harris",
- "avatar_url": "https://avatars.githubusercontent.com/u/16858514?v=4",
- "profile": "https://arm0.red",
- "contributions": [
- "doc"
- ]
- },
- {
- "login": "joshuaboniface",
- "name": "Joshua M. Boniface",
- "avatar_url": "https://avatars.githubusercontent.com/u/4031396?v=4",
- "profile": "https://www.boniface.me",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "gauthier-th",
- "name": "Gauthier",
- "avatar_url": "https://avatars.githubusercontent.com/u/37781713?v=4",
- "profile": "https://gauthierth.fr/",
- "contributions": [
- "code",
- "maintenance"
- ]
- },
- {
- "login": "Kara-Zor-El",
- "name": "Kara",
- "avatar_url": "https://avatars.githubusercontent.com/u/69772087?v=4",
- "profile": "https://github.com/Kara-Zor-El",
- "contributions": [
- "infra"
- ]
- },
- {
- "login": "JoaquinOlivero",
- "name": "Joaquin Olivero",
- "avatar_url": "https://avatars.githubusercontent.com/u/66050823?v=4",
- "profile": "https://joaquinolivero.com",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "Bretterteig",
- "name": "Julian Behr",
- "avatar_url": "https://avatars.githubusercontent.com/u/47298401?v=4",
- "profile": "https://github.com/Bretterteig",
- "contributions": [
- "translation"
- ]
- },
- {
- "login": "ThowZzy",
- "name": "ThowZzy",
- "avatar_url": "https://avatars.githubusercontent.com/u/61882536?v=4",
- "profile": "https://github.com/ThowZzy",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "mobihen",
- "name": "Nir Israel Hen",
- "avatar_url": "https://avatars.githubusercontent.com/u/35529491?v=4",
- "profile": "https://mobihen.com",
- "contributions": [
- "translation"
- ]
- },
- {
- "login": "XDark187",
- "name": "Baraa",
- "avatar_url": "https://avatars.githubusercontent.com/u/39034192?v=4",
- "profile": "https://github.com/XDark187",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "franciscofsales",
- "name": "Francisco Sales",
- "avatar_url": "https://avatars.githubusercontent.com/u/7977645?v=4",
- "profile": "https://github.com/franciscofsales",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "myselfolli",
- "name": "Oliver Laing",
- "avatar_url": "https://avatars.githubusercontent.com/u/37535998?v=4",
- "profile": "https://github.com/myselfolli",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "M0NsTeRRR",
- "name": "Ludovic Ortega",
- "avatar_url": "https://avatars.githubusercontent.com/u/37785089?v=4",
- "profile": "https://github.com/M0NsTeRRR",
- "contributions": [
- "security"
- ]
- },
- {
- "login": "Zariel",
- "name": "Chris Bannister",
- "avatar_url": "https://avatars.githubusercontent.com/u/2213?v=4",
- "profile": "https://github.com/Zariel",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "C4J3",
- "name": "Joe",
- "avatar_url": "https://avatars.githubusercontent.com/u/13005453?v=4",
- "profile": "https://github.com/C4J3",
- "contributions": [
- "doc"
- ]
- },
- {
- "login": "guillaumearnx",
- "name": "Guillaume ARNOUX",
- "avatar_url": "https://avatars.githubusercontent.com/u/37373941?v=4",
- "profile": "https://me.garnx.fr",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "dr-carrot",
- "name": "dr-carrot",
- "avatar_url": "https://avatars.githubusercontent.com/u/17272571?v=4",
- "profile": "https://github.com/dr-carrot",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "gageorsburn",
- "name": "Gage Orsburn",
- "avatar_url": "https://avatars.githubusercontent.com/u/4692734?v=4",
- "profile": "https://github.com/gageorsburn",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "GkhnGRBZ",
- "name": "GkhnGRBZ",
- "avatar_url": "https://avatars.githubusercontent.com/u/127258824?v=4",
- "profile": "https://github.com/GkhnGRBZ",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "benhaney",
- "name": "Ben Haney",
- "avatar_url": "https://avatars.githubusercontent.com/u/31331498?v=4",
- "profile": "http://benhaney.com",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "Wunderharke",
- "name": "Wunderharke",
- "avatar_url": "https://avatars.githubusercontent.com/u/5105672?v=4",
- "profile": "https://github.com/Wunderharke",
- "contributions": [
- "doc"
- ]
- },
- {
- "login": "methbkts",
- "name": "Metin Bektas",
- "avatar_url": "https://avatars.githubusercontent.com/u/30674934?v=4",
- "profile": "https://github.com/methbkts",
- "contributions": [
- "infra"
- ]
- },
- {
- "login": "andrewkolda",
- "name": "andrewkolda",
- "avatar_url": "https://avatars.githubusercontent.com/u/158614532?v=4",
- "profile": "https://github.com/andrewkolda",
- "contributions": [
- "design"
- ]
- },
- {
- "login": "ishanjain28",
- "name": "Ishan Jain",
- "avatar_url": "https://avatars.githubusercontent.com/u/7921368?v=4",
- "profile": "https://ishanjain.me",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "michaelhthomas",
- "name": "Michael Thomas",
- "avatar_url": "https://avatars.githubusercontent.com/u/18223295?v=4",
- "profile": "http://michaelt.xyz",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "RankWeis",
- "name": "RankWeis",
- "avatar_url": "https://avatars.githubusercontent.com/u/733691?v=4",
- "profile": "https://github.com/RankWeis",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "jessielw",
- "name": "Jessie Wilson",
- "avatar_url": "https://avatars.githubusercontent.com/u/48299282?v=4",
- "profile": "http://www.linkedin.com/in/jessielwilson",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "brotaxt",
- "name": "DominicKo",
- "avatar_url": "https://avatars.githubusercontent.com/u/25477935?v=4",
- "profile": "https://github.com/brotaxt",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "corentinnormand",
- "name": "Corentin Normand",
- "avatar_url": "https://avatars.githubusercontent.com/u/30508927?v=4",
- "profile": "https://doctolib.com",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "benbeauchamp7",
- "name": "Ben Beauchamp",
- "avatar_url": "https://avatars.githubusercontent.com/u/43358492?v=4",
- "profile": "https://github.com/benbeauchamp7",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "vfaergestad",
- "name": "vfaergestad",
- "avatar_url": "https://avatars.githubusercontent.com/u/49147564?v=4",
- "profile": "https://github.com/vfaergestad",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "wolffman122",
- "name": "wolffman122",
- "avatar_url": "https://avatars.githubusercontent.com/u/19178872?v=4",
- "profile": "https://github.com/wolffman122",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "Schrottfresser",
- "name": "Schrottfresser",
- "avatar_url": "https://avatars.githubusercontent.com/u/39998368?v=4",
- "profile": "https://github.com/Schrottfresser",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "DillionLowry",
- "name": "Dillion",
- "avatar_url": "https://avatars.githubusercontent.com/u/91228469?v=4",
- "profile": "https://github.com/DillionLowry",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "JamsRepos",
- "name": "Jam",
- "avatar_url": "https://avatars.githubusercontent.com/u/1347620?v=4",
- "profile": "https://github.com/JamsRepos",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "joelowrance",
- "name": "Joe Lowrance",
- "avatar_url": "https://avatars.githubusercontent.com/u/63176?v=4",
- "profile": "http://www.joelowrance.com",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "0xSysR3ll",
- "name": "0xsysr3ll",
- "avatar_url": "https://avatars.githubusercontent.com/u/31414959?v=4",
- "profile": "https://github.com/0xSysR3ll",
- "contributions": [
- "code"
- ]
- }
- ]
-}
diff --git a/.dockerignore b/.dockerignore
index 5a009f2afb..76aae0c402 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -1,29 +1,29 @@
**/*.md
**/.gitkeep
**/.vscode
-.all-contributorsrc
.dockerignore
.editorconfig
.eslintrc.js
.git
-.gitbook.yaml
.gitconfig
.github
.gitignore
.husky
.next
.prettierignore
+.vscode
+charts
config/db/*
config/logs/*
config/*.json
+cypress
dist
Dockerfile*
compose.yaml
+gen-docs
docs
LICENSE
node_modules
public/os_logo_filled.png
public/preview.jpg
-snap
stylelint.config.js
-cypress
diff --git a/.eslintrc.js b/.eslintrc.js
index d7e60f0698..2f6b8c66c4 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -40,6 +40,7 @@ module.exports = {
'error',
{ allowSameFolder: true },
],
+ '@typescript-eslint/no-var-requires': 0,
},
overrides: [
{
diff --git a/.gitattributes b/.gitattributes
index d9863caf69..29f7c31fe3 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -37,7 +37,6 @@ docs export-ignore
*ignore export-ignore
*.md export-ignore
-.all-contributorsrc export-ignore
.editorconfig export-ignore
Dockerfile.local export-ignore
compose.yaml export-ignore
diff --git a/.gitbook.yaml b/.gitbook.yaml
deleted file mode 100644
index 2b0a6c4e86..0000000000
--- a/.gitbook.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
-root: ./docs
-
-structure:
- readme: README.md
- summary: SUMMARY.md
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 280424a454..86314273de 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -1,2 +1,2 @@
# Global code ownership
-* @Fallenbagel @gauthier-th
+* @seerr-team/seerr-core
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
index e6282061ea..a1650a8c3f 100644
--- a/.github/FUNDING.yml
+++ b/.github/FUNDING.yml
@@ -1 +1 @@
-buy_me_a_coffee: fallen.bagel
+open_collective: seerr
diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml
index 94a91e93d7..a7caedf585 100644
--- a/.github/ISSUE_TEMPLATE/bug.yml
+++ b/.github/ISSUE_TEMPLATE/bug.yml
@@ -19,7 +19,7 @@ body:
id: version
attributes:
label: Version
- description: What version of Jellyseerr are you running? (You can find this in Settings → About → Version.)
+ description: What version of Seerr are you running? (You can find this in Settings → About → Version.)
validations:
required: true
- type: textarea
@@ -95,7 +95,7 @@ body:
id: terms
attributes:
label: Code of Conduct
- description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/fallenbagel/jellyseerr/blob/develop/CODE_OF_CONDUCT.md)
+ description: By submitting this issue, you agree to follow our [Code of Conduct](/../../CODE_OF_CONDUCT.md)
options:
- - label: I agree to follow Jellyseerr's Code of Conduct
+ - label: I agree to follow Seerr's Code of Conduct
required: true
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
index 3cce2bb41e..9719140ce6 100644
--- a/.github/ISSUE_TEMPLATE/config.yml
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -1,8 +1,8 @@
blank_issues_enabled: false
contact_links:
- name: 💬 Support via Discord
- url: https://discord.gg/ckbvBtDJgC
- about: Chat with other users and the Jellyseerr dev team
+ url: https://discord.gg/seerr
+ about: Chat with other users and the Seerr dev team
- name: 💬 Support via GitHub Discussions
- url: https://github.com/fallenbagel/jellyseerr/discussions
+ url: https://github.com/seerr-team/seerr/discussions
about: Ask questions and discuss with other community members
diff --git a/.github/ISSUE_TEMPLATE/enhancement.yml b/.github/ISSUE_TEMPLATE/enhancement.yml
index 4327a8f651..8e9f8fc779 100644
--- a/.github/ISSUE_TEMPLATE/enhancement.yml
+++ b/.github/ISSUE_TEMPLATE/enhancement.yml
@@ -31,7 +31,7 @@ body:
id: terms
attributes:
label: Code of Conduct
- description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/fallenbagel/jellyseerr/blob/develop/CODE_OF_CONDUCT.md)
+ description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/seerr-team/seerr/blob/develop/CODE_OF_CONDUCT.md)
options:
- - label: I agree to follow Jellyseerr's Code of Conduct
+ - label: I agree to follow Seerr's Code of Conduct
required: true
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 35464dc0d5..5e7910254b 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -4,6 +4,7 @@
#### To-Dos
+- [ ] Disclosed any use of AI (see our [policy](../CONTRIBUTING.md#ai-assistance-notice))
- [ ] Successful build `pnpm build`
- [ ] Translation keys `pnpm i18n:extract`
- [ ] Database migration (if required)
diff --git a/.github/cliff.toml b/.github/cliff.toml
new file mode 100644
index 0000000000..f83e601a23
--- /dev/null
+++ b/.github/cliff.toml
@@ -0,0 +1,94 @@
+# git-cliff ~ configuration
+# https://git-cliff.org/docs/configuration
+
+[changelog]
+header = ""
+body = """
+{%- macro remote_url() -%}
+ https://github.com/{{ remote.github.owner }}/{{ remote.github.repo }}
+{%- endmacro -%}
+
+{%- set excluded_users = ["github-actions[bot]", "dependabot[bot]", "renovate[bot]"] -%}
+
+{% macro print_commit(commit) -%}
+ - {% if commit.scope %}*({{ commit.scope }})* {% endif %}\
+ {% if commit.breaking %}[**breaking**] {% endif %}\
+ {{ commit.message | upper_first }} - \
+ ([{{ commit.id | truncate(length=7, end="") }}]({{ self::remote_url() }}/commit/{{ commit.id }}))\
+{% endmacro -%}
+
+{% if version %}\
+ {% if previous.version %}\
+ ## [{{ version | trim_start_matches(pat="v") }}]({{ self::remote_url() }}/compare/{{ previous.version }}..{{ version }}) - {{ timestamp | date(format="%Y-%m-%d") }}
+ {% else %}\
+ ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
+ {% endif %}\
+{% else %}\
+ ## [unreleased]
+{% endif %}\
+
+{%- for group, commits in commits | group_by(attribute="group") %}
+ ### {{ group | striptags | trim | upper_first }}
+ {%- for commit in commits | filter(attribute="scope") | sort(attribute="scope") %}
+ {{ self::print_commit(commit=commit) }}
+ {%- endfor %}
+ {%- for commit in commits %}
+ {%- if not commit.scope -%}
+ {{ self::print_commit(commit=commit) }}
+ {%- endif -%}
+ {%- endfor -%}
+{%- endfor -%}
+
+{%- set valid_contributors = [] -%}
+{%- for c in github.contributors | filter(attribute="is_first_time", value=true) %}
+ {%- if c.username and c.username not in excluded_users and c.username not in valid_contributors %}
+ {%- set_global valid_contributors = valid_contributors | concat(with=c.username) %}
+ {%- endif %}
+{%- endfor %}
+
+{%- if valid_contributors | length > 0 %}
+## New Contributors ❤️
+ {%- for username in valid_contributors %}
+* @{{ username }} made their first contribution
+ {%- endfor %}
+{%- endif %}
+"""
+footer = """
+
+"""
+trim = true
+postprocessors = []
+
+[git]
+conventional_commits = true
+filter_unconventional = true
+split_commits = false
+filter_commits = true
+commit_preprocessors = [
+ { pattern = '.*\[skip ci\].*', replace = "" },
+ { pattern = '.*\[ci skip\].*', replace = "" },
+]
+commit_parsers = [
+ { message = "^feat", group = "🚀 Features" },
+ { message = "^fix", group = "🐛 Bug Fixes" },
+ { message = "^doc", group = "📖 Documentation" },
+ { message = "^perf", group = "⚡ Performance" },
+ { message = "^refactor", group = "🚜 Refactor" },
+ { message = "^style", group = "🎨 Styling" },
+ { message = "^test", group = "🧪 Testing" },
+ { message = "^chore\\(release\\): prepare for", skip = true },
+ { message = "^chore\\(deps.*\\)", skip = true },
+ { message = "^chore\\(pr\\)", skip = true },
+ { message = "^chore\\(pull\\)", skip = true },
+ { message = "^chore\\(git-sync\\)", skip = true },
+ { message = "^chore|^ci", group = "⚙️ Miscellaneous Tasks" },
+ { body = ".*security", group = "🛡️ Security" },
+ { message = "^revert", group = "◀️ Revert" },
+ { message = '.*\[skip ci\].*', skip = true },
+ { message = '.*\[ci skip\].*', skip = true },
+]
+protect_breaking_commits = false
+tag_pattern = "v?[0-9]+\\.[0-9]+\\.[0-9]+.*"
+skip_tags = "beta|alpha|rc"
+topo_order = false
+sort_commits = "newest"
diff --git a/.github/holopin.yml b/.github/holopin.yml
deleted file mode 100644
index ee4edc81b3..0000000000
--- a/.github/holopin.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-organization: overseerr
-defaultSticker: clcyagj1j329008l468ya8pu2
-stickers:
- - id: clcyagj1j329008l468ya8pu2
- alias: overseerr-contributor
diff --git a/.github/lock.yml b/.github/lock.yml
deleted file mode 100644
index 03a53feac9..0000000000
--- a/.github/lock.yml
+++ /dev/null
@@ -1,38 +0,0 @@
-# Configuration for Lock Threads - https://github.com/dessant/lock-threads-app
-
-# Number of days of inactivity before a closed issue or pull request is locked
-daysUntilLock: 365
-
-# Skip issues and pull requests created before a given timestamp. Timestamp must
-# follow ISO 8601 (`YYYY-MM-DD`). Set to `false` to disable
-skipCreatedBefore: false
-
-# Issues and pull requests with these labels will be ignored. Set to `[]` to disable
-exemptLabels:
- - dependencies
-
-# Label to add before locking, such as `outdated`. Set to `false` to disable
-lockLabel: false
-
-# Comment to post before locking. Set to `false` to disable
-lockComment: >
- This thread has been automatically locked since there has not been
- any recent activity after it was closed. Please open a new issue for
- related bugs.
-
-# Assign `resolved` as the reason for locking. Set to `false` to disable
-setLockReason: true
-# Limit to only `issues` or `pulls`
-# only: issues
-
-# Optionally, specify configuration settings just for `issues` or `pulls`
-# issues:
-# exemptLabels:
-# - help-wanted
-# lockLabel: outdated
-
-# pulls:
-# daysUntilLock: 30
-
-# Repository to extend settings from
-# _extends: repo
diff --git a/.github/renovate.json5 b/.github/renovate.json5
new file mode 100644
index 0000000000..8ecd1d4b4e
--- /dev/null
+++ b/.github/renovate.json5
@@ -0,0 +1,25 @@
+{
+ $schema: 'https://docs.renovatebot.com/renovate-schema.json',
+ extends: [
+ 'config:recommended',
+ ':dependencyDashboard',
+ ':timezone(UTC)',
+ 'group:allNonMajor',
+ 'group:nextjsMonorepo',
+ 'group:reactMonorepo',
+ 'group:typescript-eslintMonorepo',
+ 'group:tailwindcssMonorepo',
+ 'github>seerr-team/seerr//.github/renovate/actions.json5',
+ 'github>seerr-team/seerr//.github/renovate/docker.json5',
+ 'github>seerr-team/seerr//.github/renovate/groups.json5',
+ 'github>seerr-team/seerr//.github/renovate/helm.json5',
+ 'github>seerr-team/seerr//.github/renovate/labels.json5',
+ 'github>seerr-team/seerr//.github/renovate/pnpm.json5',
+ 'github>seerr-team/seerr//.github/renovate/semanticCommits.json5',
+ ],
+ dependencyDashboardTitle: 'Renovate Dashboard 🤖',
+ suppressNotifications: ['prEditedNotification', 'prIgnoreNotification'],
+ rebaseWhen: 'conflicted',
+ labels: ['dependencies'],
+ minimumReleaseAge: '7 days',
+}
diff --git a/.github/renovate/actions.json5 b/.github/renovate/actions.json5
new file mode 100644
index 0000000000..77671a7d65
--- /dev/null
+++ b/.github/renovate/actions.json5
@@ -0,0 +1,13 @@
+{
+ $schema: 'https://docs.renovatebot.com/renovate-schema.json',
+
+ extends: ['helpers:pinGitHubActionDigests'],
+
+ packageRules: [
+ // All GitHub Actions need manual review
+ {
+ matchManagers: ['github-actions'],
+ groupName: 'GitHub Actions',
+ },
+ ],
+}
diff --git a/.github/renovate/docker.json5 b/.github/renovate/docker.json5
new file mode 100644
index 0000000000..7c97fefc4a
--- /dev/null
+++ b/.github/renovate/docker.json5
@@ -0,0 +1,15 @@
+{
+ $schema: 'https://docs.renovatebot.com/renovate-schema.json',
+
+ extends: [
+ 'docker:enableMajor',
+ 'docker:pinDigests'
+ ],
+
+ packageRules: [
+ {
+ matchManagers: ['docker-compose'],
+ pinDigests: false,
+ },
+ ],
+}
diff --git a/.github/renovate/groups.json5 b/.github/renovate/groups.json5
new file mode 100644
index 0000000000..97dbe6703a
--- /dev/null
+++ b/.github/renovate/groups.json5
@@ -0,0 +1,19 @@
+{
+ $schema: 'https://docs.renovatebot.com/renovate-schema.json',
+
+ packageRules: [
+ // Node.js
+ {
+ matchPackageNames: ['node'],
+ matchManagers: ['dockerfile', 'npm'],
+ groupName: 'Node.js',
+ commitMessageTopic: 'Node.js',
+ },
+
+ // Database packages
+ {
+ matchPackageNames: ['pg', 'sqlite3', 'typeorm'],
+ groupName: 'Database',
+ },
+ ],
+}
diff --git a/.github/renovate/helm.json5 b/.github/renovate/helm.json5
new file mode 100644
index 0000000000..0b479c3a60
--- /dev/null
+++ b/.github/renovate/helm.json5
@@ -0,0 +1,24 @@
+{
+ $schema: 'https://docs.renovatebot.com/renovate-schema.json',
+
+ packageRules: [
+ {
+ matchManagers: ['helm-values'],
+ matchFileNames: ['charts/*/values.yaml'],
+ minimumReleaseAge: '0',
+ pinDigests: false,
+ },
+ ],
+
+ customManagers: [
+ {
+ customType: 'regex',
+ description: 'Update appVersion in Chart.yaml to match Docker image',
+ fileMatch: ['(^|/)Chart\\.yaml$'],
+ matchStrings: [
+ '#\\s+renovate:\\s+image=(?\\S*)\nappVersion:\\s+"(?\\S*)"',
+ ],
+ datasourceTemplate: 'docker',
+ },
+ ],
+}
diff --git a/.github/renovate/labels.json5 b/.github/renovate/labels.json5
new file mode 100644
index 0000000000..7bb507372b
--- /dev/null
+++ b/.github/renovate/labels.json5
@@ -0,0 +1,29 @@
+{
+ $schema: 'https://docs.renovatebot.com/renovate-schema.json',
+
+ packageRules: [
+ // JavaScript/npm packages
+ {
+ matchManagers: ['npm'],
+ addLabels: ['javascript'],
+ },
+
+ // GitHub Actions
+ {
+ matchManagers: ['github-actions'],
+ addLabels: ['github_actions'],
+ },
+
+ // Docker images
+ {
+ matchManagers: ['dockerfile', 'docker-compose'],
+ addLabels: ['docker'],
+ },
+
+ // Helm charts
+ {
+ matchManagers: ['helm-values'],
+ addLabels: ['helm'],
+ },
+ ],
+}
diff --git a/.github/renovate/pnpm.json5 b/.github/renovate/pnpm.json5
new file mode 100644
index 0000000000..2ec1f41eaf
--- /dev/null
+++ b/.github/renovate/pnpm.json5
@@ -0,0 +1,11 @@
+{
+ $schema: 'https://docs.renovatebot.com/renovate-schema.json',
+
+ // Run pnpm dedupe after dependency updates
+ postUpdateOptions: ['pnpmDedupe'],
+
+ lockFileMaintenance: {
+ enabled: true,
+ },
+
+}
diff --git a/.github/renovate/semanticCommits.json5 b/.github/renovate/semanticCommits.json5
new file mode 100644
index 0000000000..23e7763918
--- /dev/null
+++ b/.github/renovate/semanticCommits.json5
@@ -0,0 +1,33 @@
+{
+ $schema: 'https://docs.renovatebot.com/renovate-schema.json',
+
+ packageRules: [
+ // Default for all dependencies
+ {
+ matchPackagePatterns: ['*'],
+ semanticCommitType: 'chore',
+ semanticCommitScope: 'deps',
+ },
+
+ // Node.js runtime
+ {
+ matchPackageNames: ['node'],
+ semanticCommitType: 'build',
+ semanticCommitScope: 'node',
+ },
+
+ // GitHub Actions
+ {
+ matchManagers: ['github-actions'],
+ semanticCommitType: 'ci',
+ semanticCommitScope: 'actions',
+ },
+
+ // Docker
+ {
+ matchManagers: ['dockerfile'],
+ semanticCommitType: 'build',
+ semanticCommitScope: 'docker',
+ },
+ ],
+}
diff --git a/.github/stale.yml b/.github/stale.yml
deleted file mode 100644
index a0c96e871f..0000000000
--- a/.github/stale.yml
+++ /dev/null
@@ -1,44 +0,0 @@
-# Configuration for probot-stale - https://github.com/probot/stale
-
-# Number of days of inactivity before an Issue or Pull Request becomes stale
-daysUntilStale: 60
-
-# Number of days of inactivity before an Issue or Pull Request with the stale label is closed.
-# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale.
-daysUntilClose: 7
-
-# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable
-exemptLabels:
- - pinned
- - security
- - dependencies
- - never-stale
- - priority:high
- - priority:medium
-
-# Label to use when marking as stale
-staleLabel: stale
-
-# Comment to post when marking as stale. Set to `false` to disable
-markComment: >
- This issue has been automatically marked as stale because it has not had
- recent activity. It will be closed if no further activity occurs. Thank you
- for your contributions.
-
-# Comment to post when removing the stale label.
-# unmarkComment: >
-# Your comment here.
-
-# Comment to post when closing a stale Issue or Pull Request.
-# closeComment: >
-# Your comment here.
-
-# Limit to only `issues` or `pulls`
-# only: issues
-
-# Optionally, specify configuration settings that are specific to just 'issues' or 'pulls':
-pulls:
- markComment: >
- This pull request has been automatically marked as stale because it has not had
- recent activity. It will be closed if no further activity occurs. Thank you
- for your contributions.
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 8189522f01..5df2185ed2 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -1,4 +1,6 @@
-name: Jellyseerr CI
+---
+# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
+name: Seerr CI
on:
pull_request:
@@ -7,166 +9,200 @@ on:
push:
branches:
- develop
+ workflow_dispatch:
+
+permissions:
+ contents: read
+
+concurrency:
+ group: ci-${{ github.ref }}
+ cancel-in-progress: true
jobs:
test:
name: Lint & Test Build
if: github.event_name == 'pull_request'
runs-on: ubuntu-24.04
- container: node:22-alpine
+ container: node:22.20.0-alpine3.22@sha256:dbcedd8aeab47fbc0f4dd4bffa55b7c3c729a707875968d467aaaea42d6225af
steps:
- name: Checkout
- uses: actions/checkout@v4
- - name: Pnpm Setup
- uses: pnpm/action-setup@v4
+ uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
- version: 9
+ persist-credentials: false
+
+ - name: Pnpm Setup
+ uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0
+
- name: Get pnpm store directory
shell: sh
run: |
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
+
- name: Setup pnpm cache
- uses: actions/cache@v4
+ uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
with:
path: ${{ env.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
+
- name: Install dependencies
env:
- HUSKY: 0
+ CI: true
run: pnpm install
+
- name: Lint
run: pnpm lint
+
- name: Formatting
run: pnpm format:check
+
- name: Build
run: pnpm build
build:
- name: Build & Publish Docker Images
+ name: Build (per-arch, native runners)
if: github.ref == 'refs/heads/develop' && !contains(github.event.head_commit.message, '[skip ci]')
strategy:
matrix:
include:
- runner: ubuntu-24.04
platform: linux/amd64
+ arch: amd64
- runner: ubuntu-24.04-arm
platform: linux/arm64
+ arch: arm64
runs-on: ${{ matrix.runner }}
- outputs:
- digest-amd64: ${{ steps.set_outputs.outputs.digest-amd64 }}
- digest-arm64: ${{ steps.set_outputs.outputs.digest-arm64 }}
steps:
- name: Checkout
- uses: actions/checkout@v4
- - name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v3
- - name: Log in to Docker Hub
- uses: docker/login-action@v3
- with:
- username: ${{ secrets.DOCKER_USERNAME }}
- password: ${{ secrets.DOCKER_TOKEN }}
- - name: Log in to GitHub Container Registry
- uses: docker/login-action@v3
+ uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
- registry: ghcr.io
- username: ${{ github.repository_owner }}
- password: ${{ secrets.GITHUB_TOKEN }}
- - name: Set lower case owner name
- run: |
- echo "OWNER_LC=${OWNER,,}" >>${GITHUB_ENV}
- env:
- OWNER: ${{ github.repository_owner }}
- - name: Docker metadata
- id: meta
- uses: docker/metadata-action@v4
- with:
- images: |
- fallenbagel/jellyseerr
- ghcr.io/${{ env.OWNER_LC }}/jellyseerr
- tags: |
- type=ref,event=branch
- type=sha,prefix=,suffix=,format=short
- - name: Build and push by digest
- id: build
- uses: docker/build-push-action@v5
+ persist-credentials: false
+
+ - name: Commit timestamp
+ id: ts
+ run: echo "TIMESTAMP=$(git log -1 --pretty=%ct)" >> "$GITHUB_OUTPUT"
+
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1
+
+ - name: Warm cache (no push) — ${{ matrix.platform }}
+ uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0
with:
context: .
file: ./Dockerfile
platforms: ${{ matrix.platform }}
- push: true
+ push: false
build-args: |
COMMIT_TAG=${{ github.sha }}
BUILD_VERSION=develop
- BUILD_DATE=${{ github.event.repository.updated_at }}
- outputs: |
- type=image,push-by-digest=true,name=fallenbagel/jellyseerr,push=true
- type=image,push-by-digest=true,name=ghcr.io/${{ env.OWNER_LC }}/jellyseerr,push=true
+ SOURCE_DATE_EPOCH=${{ steps.ts.outputs.TIMESTAMP }}
cache-from: type=gha,scope=${{ matrix.platform }}
cache-to: type=gha,mode=max,scope=${{ matrix.platform }}
provenance: false
- - name: Set outputs
- id: set_outputs
- run: |
- platform="${{ matrix.platform == 'linux/amd64' && 'amd64' || 'arm64' }}"
- echo "digest-${platform}=${{ steps.build.outputs.digest }}" >> $GITHUB_OUTPUT
- merge_and_push:
- name: Create and Push Multi-arch Manifest
+ publish:
+ name: Publish multi-arch image
needs: build
runs-on: ubuntu-24.04
+ permissions:
+ contents: read
+ packages: write
+ id-token: write
steps:
+ - name: Checkout
+ uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
+ with:
+ persist-credentials: false
+
+ - name: Commit timestamp
+ id: ts
+ run: echo "TIMESTAMP=$(git log -1 --pretty=%ct)" >> "$GITHUB_OUTPUT"
+
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1
+
- name: Log in to Docker Hub
- uses: docker/login-action@v3
+ uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
+
- name: Log in to GitHub Container Registry
- uses: docker/login-action@v3
+ uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- - name: Set lower case owner name
- run: |
- echo "OWNER_LC=${OWNER,,}" >>${GITHUB_ENV}
- env:
- OWNER: ${{ github.repository_owner }}
- - name: Create and push manifest
- run: |
- docker manifest create fallenbagel/jellyseerr:develop \
- --amend fallenbagel/jellyseerr@${{ needs.build.outputs.digest-amd64 }} \
- --amend fallenbagel/jellyseerr@${{ needs.build.outputs.digest-arm64 }}
- docker manifest push fallenbagel/jellyseerr:develop
- # GHCR manifest
- docker manifest create ghcr.io/${{ env.OWNER_LC }}/jellyseerr:develop \
- --amend ghcr.io/${{ env.OWNER_LC }}/jellyseerr@${{ needs.build.outputs.digest-amd64 }} \
- --amend ghcr.io/${{ env.OWNER_LC }}/jellyseerr@${{ needs.build.outputs.digest-arm64 }}
- docker manifest push ghcr.io/${{ env.OWNER_LC }}/jellyseerr:develop
+ - name: Extract metadata
+ id: meta
+ uses: docker/metadata-action@c1e51972afc2121e065aed6d45c65596fe445f3f # v5.8.0
+ with:
+ images: |
+ ${{ github.repository }}
+ ghcr.io/${{ github.repository }}
+ tags: |
+ type=raw,value=develop
+ type=sha
+ labels: |
+ org.opencontainers.image.created=${{ steps.ts.outputs.TIMESTAMP }}
+
+ - name: Build & Push (multi-arch, single tag)
+ uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0
+ with:
+ context: .
+ file: ./Dockerfile
+ platforms: linux/amd64,linux/arm64
+ push: true
+ build-args: |
+ COMMIT_TAG=${{ github.sha }}
+ BUILD_VERSION=develop
+ SOURCE_DATE_EPOCH=${{ steps.ts.outputs.TIMESTAMP }}
+ labels: ${{ steps.meta.outputs.labels }}
+ tags: ${{ steps.meta.outputs.tags }}
+ cache-from: |
+ type=gha,scope=linux/amd64
+ type=gha,scope=linux/arm64
+ cache-to: type=gha,mode=max
+ provenance: false
discord:
name: Send Discord Notification
- needs: merge_and_push
+ needs: publish
if: always() && github.event_name != 'pull_request' && !contains(github.event.head_commit.message, '[skip ci]')
runs-on: ubuntu-24.04
steps:
- - name: Get Build Job Status
- uses: technote-space/workflow-conclusion-action@v3
- - name: Combine Job Status
+ - name: Determine Workflow Status
id: status
run: |
- failures=(neutral, skipped, timed_out, action_required)
- if [[ ${array[@]} =~ $WORKFLOW_CONCLUSION ]]; then
- echo "status=failure" >> $GITHUB_OUTPUT
- else
- echo "status=$WORKFLOW_CONCLUSION" >> $GITHUB_OUTPUT
- fi
- - name: Post Status to Discord
- uses: sarisia/actions-status-discord@v1
- with:
- webhook: ${{ secrets.DISCORD_WEBHOOK }}
- status: ${{ steps.status.outputs.status }}
- title: ${{ github.workflow }}
- nofail: true
+ case "${{ needs.publish.result }}" in
+ success) echo "status=Success" >> $GITHUB_OUTPUT; echo "colour=3066993" >> $GITHUB_OUTPUT ;;
+ failure) echo "status=Failure" >> $GITHUB_OUTPUT; echo "colour=15158332" >> $GITHUB_OUTPUT ;;
+ cancelled) echo "status=Cancelled" >> $GITHUB_OUTPUT; echo "colour=10181046" >> $GITHUB_OUTPUT ;;
+ *) echo "status=Skipped" >> $GITHUB_OUTPUT; echo "colour=9807270" >> $GITHUB_OUTPUT ;;
+ esac
+
+ - name: Send Discord notification
+ shell: bash
+ run: |
+ WEBHOOK="${{ secrets.DISCORD_WEBHOOK }}"
+
+ PAYLOAD=$(cat <> $GITHUB_ENV
- name: Setup pnpm cache
- uses: actions/cache@v4
+ uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
with:
path: ${{ env.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
@@ -46,38 +55,26 @@ jobs:
pnpm install --frozen-lockfile
- name: Build website
- run: |
- cd gen-docs
- pnpm build
+ working-directory: gen-docs
+ run: pnpm build
- name: Upload Build Artifact
- uses: actions/upload-pages-artifact@v3
+ uses: actions/upload-pages-artifact@7b1f4a764d45c48632c6b24a0339c27f5614fb0b6 # v4.0.0
with:
path: gen-docs/build
deploy:
name: Deploy to GitHub Pages
needs: build
- concurrency: build-deploy-pages
-
- # Grant GITHUB_TOKEN the permissions required to make a Pages deployment
+ runs-on: ubuntu-24.04
permissions:
- pages: write # to deploy to Pages
- id-token: write # to verify the deployment originates from an appropriate source
-
- # Deploy to the github-pages environment
+ contents: read
+ pages: write
+ id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
-
- runs-on: ubuntu-latest
steps:
- # - name: Download Build Artifact
- # uses: actions/download-artifact@v4
- # with:
- # name: docusaurus-build
- # path: gen-docs/build
-
- name: Deploy to GitHub Pages
id: deployment
- uses: actions/deploy-pages@v4
+ uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4.0.5
diff --git a/.github/workflows/docs-link-check.yml b/.github/workflows/docs-link-check.yml
new file mode 100644
index 0000000000..6f5363de72
--- /dev/null
+++ b/.github/workflows/docs-link-check.yml
@@ -0,0 +1,69 @@
+---
+# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
+name: Check Docs Links
+
+on:
+ pull_request:
+ branches:
+ - '*'
+ paths:
+ - 'docs/**'
+ - 'gen-docs/**'
+ - '.github/workflows/docs-link-check.yml'
+ push:
+ branches:
+ - develop
+ paths:
+ - 'docs/**'
+ - 'gen-docs/**'
+ - '.github/workflows/docs-link-check.yml'
+ schedule:
+ - cron: '50 7 * * 5'
+ workflow_dispatch:
+
+permissions:
+ contents: read
+
+concurrency:
+ group: docs-link-check-${{ github.ref }}
+ cancel-in-progress: true
+
+jobs:
+ link-check:
+ name: Verify external links in Markdown and MDX
+ runs-on: ubuntu-24.04
+ timeout-minutes: 20
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
+ with:
+ fetch-depth: 0
+ persist-credentials: false
+
+ - name: Run Lychee link checker
+ uses: lycheeverse/lychee-action@885c65f3dc543b57c898c8099f4e08c8afd178a2 # v2.6.1
+ with:
+ fail: false
+ args: >-
+ --verbose
+ --no-progress
+ --accept 200..204,300..304,307,308,404,429,999
+ --exclude '^file://'
+ --exclude '^https?://(localhost|127\.0\.0\.1|0\.0\.0\.0|\[::1\]|\[::\])'
+ --exclude '^https?://support\.discord\.com'
+ './docs/**/*.md'
+ './docs/**/*.mdx'
+ './gen-docs/**/*.md'
+ './gen-docs/**/*.mdx'
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Upload Lychee report
+ uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
+ with:
+ name: lychee-report
+ path: |
+ lychee/out.md
+ lychee/results.json
+ if-no-files-found: ignore
diff --git a/.github/workflows/helm.yml b/.github/workflows/helm.yml
index 131e6102f1..4af45586bc 100644
--- a/.github/workflows/helm.yml
+++ b/.github/workflows/helm.yml
@@ -1,14 +1,26 @@
+---
+# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
name: Release Charts
on:
push:
branches:
- develop
+ paths:
+ - 'charts/**'
+ - '.github/workflows/release-charts.yml'
+
+permissions:
+ contents: read
+
+concurrency:
+ group: helm-charts
+ cancel-in-progress: true
jobs:
package-helm-chart:
name: Package helm chart
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
permissions:
contents: read
packages: read
@@ -16,18 +28,19 @@ jobs:
has_artifacts: ${{ steps.check-artifacts.outputs.has_artifacts }}
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
fetch-depth: 0
+ persist-credentials: false
- name: Install helm
- uses: azure/setup-helm@v4
+ uses: azure/setup-helm@1a275c3b69536ee54be43f2070a358922e12c8d4 # v4.3.1
- name: Install Oras
- uses: oras-project/setup-oras@v1
+ uses: oras-project/setup-oras@22ce207df3b08e061f537244349aac6ae1d214f6 # v1.2.4
- name: Login to GitHub Container Registry
- uses: docker/login-action@v3
+ uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0
with:
registry: ghcr.io
username: ${{ github.actor }}
@@ -42,16 +55,11 @@ jobs:
# get current version
current_version=$(grep '^version:' "$chart_path/Chart.yaml" | awk '{print $2}')
# try to get current release version
- set +e
- oras discover ghcr.io/${GITHUB_REPOSITORY@L}/${chart_name}:${current_version}
- oras_exit_code=$?
- set -e
-
- if [ $oras_exit_code -ne 0 ]; then
+ if oras manifest fetch "ghcr.io/${{ github.repository }}/${chart_name}:${current_version}" >/dev/null 2>&1; then
+ echo "No version change for $chart_name. Skipping."
+ else
helm dependency build "$chart_path"
helm package "$chart_path" --destination ./.cr-release-packages
- else
- echo "No version change for $chart_name. Skipping."
fi
else
echo "Skipping $chart_name: Not a valid Helm chart"
@@ -61,14 +69,14 @@ jobs:
- name: Check if artifacts exist
id: check-artifacts
run: |
- if ls .cr-release-packages/* >/dev/null 2>&1; then
+ if ls .cr-release-packages/*.tgz >/dev/null 2>&1; then
echo "has_artifacts=true" >> $GITHUB_OUTPUT
else
echo "has_artifacts=false" >> $GITHUB_OUTPUT
fi
- name: Upload artifacts
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
if: steps.check-artifacts.outputs.has_artifacts == 'true'
with:
name: artifacts
@@ -77,35 +85,36 @@ jobs:
publish:
name: Publish to ghcr.io
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
permissions:
- packages: write # needed for pushing to github registry
- id-token: write # needed for signing the images with GitHub OIDC Token
+ packages: write
+ id-token: write
needs: [package-helm-chart]
if: needs.package-helm-chart.outputs.has_artifacts == 'true'
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
fetch-depth: 0
+ persist-credentials: false
- name: Install helm
- uses: azure/setup-helm@v4
+ uses: azure/setup-helm@1a275c3b69536ee54be43f2070a358922e12c8d4 # v4.3.1
- name: Install Oras
- uses: oras-project/setup-oras@v1
+ uses: oras-project/setup-oras@22ce207df3b08e061f537244349aac6ae1d214f6 # v1.2.4
- name: Install Cosign
- uses: sigstore/cosign-installer@v3
+ uses: sigstore/cosign-installer@d7543c93d881b35a8faa02e8e3605f69b7a1ce62 # v3.10.0
- name: Downloads artifacts
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: artifacts
path: .cr-release-packages/
- name: Login to GitHub Container Registry
- uses: docker/login-action@v3
+ uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0
with:
registry: ghcr.io
username: ${{ github.actor }}
@@ -119,17 +128,59 @@ jobs:
# push chart to OCI
chart_release_file=$(basename "$chart_path")
chart_name=${chart_release_file%-*}
- helm push ${chart_path} oci://ghcr.io/${GITHUB_REPOSITORY@L} |& tee helm-push-output.log
+ helm push ${chart_path} oci://ghcr.io/${{ github.repository }} |& tee helm-push-output.log
chart_digest=$(awk -F "[, ]+" '/Digest/{print $NF}' < helm-push-output.log)
# sign chart
- cosign sign "ghcr.io/${GITHUB_REPOSITORY@L}/${chart_name}@${chart_digest}"
+ cosign sign "ghcr.io/${{ github.repository }}/${chart_name}@${chart_digest}"
# push artifacthub-repo.yml to OCI
oras push \
- ghcr.io/${GITHUB_REPOSITORY@L}/${chart_name}:artifacthub.io \
+ ghcr.io/${{ github.repository }}/${chart_name}:artifacthub.io \
--config /dev/null:application/vnd.cncf.artifacthub.config.v1+yaml \
charts/$chart_name/artifacthub-repo.yml:application/vnd.cncf.artifacthub.repository-metadata.layer.v1.yaml \
|& tee oras-push-output.log
artifacthub_digest=$(grep "Digest:" oras-push-output.log | awk '{print $2}')
# sign artifacthub-repo.yml
- cosign sign "ghcr.io/${GITHUB_REPOSITORY@L}/${chart_name}:artifacthub.io@${artifacthub_digest}"
+ cosign sign "ghcr.io/${{ github.repository }}/${chart_name}:artifacthub.io@${artifacthub_digest}"
+ done
+
+ verify:
+ name: Verify signatures for each chart tag
+ needs: [publish]
+ runs-on: ubuntu-24.04
+ permissions:
+ contents: read
+ steps:
+ - name: Checkout
+ uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
+ with:
+ fetch-depth: 0
+ persist-credentials: false
+
+ - name: Install Cosign
+ uses: sigstore/cosign-installer@d7543c93d881b35a8faa02e8e3605f69b7a1ce62 # v3.10.0
+
+ - name: Downloads artifacts
+ uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
+ with:
+ name: artifacts
+ path: .cr-release-packages/
+
+ - name: Login to GitHub Container Registry
+ uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0
+ with:
+ registry: ghcr.io
+ username: ${{ github.actor }}
+ password: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Verify signatures for each chart tag
+ run: |
+ for chart_path in $(find .cr-release-packages -name '*.tgz' -print); do
+ chart_release_file=$(basename "$chart_path")
+ chart_name=${chart_release_file%-*}
+ version=${chart_release_file#$chart_name-}
+ version=${version%.tgz}
+
+ cosign verify "ghcr.io/${{ github.repository }}/${chart_name}:${version}" \
+ --certificate-identity "https://github.com/${{ github.workflow_ref }}" \
+ --certificate-oidc-issuer "https://token.actions.githubusercontent.com"
done
diff --git a/.github/workflows/lint-helm-charts.yml b/.github/workflows/lint-helm-charts.yml
index e46a11eecf..32fc4e3ba9 100644
--- a/.github/workflows/lint-helm-charts.yml
+++ b/.github/workflows/lint-helm-charts.yml
@@ -1,3 +1,5 @@
+---
+# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
name: Lint and Test Charts
on:
@@ -7,27 +9,48 @@ on:
paths:
- '.github/workflows/lint-helm-charts.yml'
- 'charts/**'
+ push:
+ branches: [develop]
+ paths:
+ - 'charts/**'
+
+permissions:
+ contents: read
+
+concurrency:
+ group: charts-lint-${{ github.ref }}
+ cancel-in-progress: true
+
jobs:
lint-test:
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
+ permissions:
+ contents: read
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
fetch-depth: 0
+ persist-credentials: false
+
- name: Set up Helm
- uses: azure/setup-helm@v4.2.0
- - name: Ensure documentation is updated
- uses: docker://jnorwood/helm-docs:v1.14.2
+ uses: azure/setup-helm@1a275c3b69536ee54be43f2070a358922e12c8d4 # v4.3.1
+
- name: Set up chart-testing
- uses: helm/chart-testing-action@v2.6.1
+ uses: helm/chart-testing-action@0d28d3144d3a25ea2cc349d6e59901c4ff469b3b # v2.7.0
+
+ - name: Ensure documentation is updated
+ uses: docker://jnorwood/helm-docs:v1.14.2@sha256:7e562b49ab6b1dbc50c3da8f2dd6ffa8a5c6bba327b1c6335cc15ce29267979c
+
- name: Run chart-testing (list-changed)
id: list-changed
run: |
changed=$(ct list-changed --target-branch ${{ github.event.repository.default_branch }})
if [[ -n "$changed" ]]; then
echo "changed=true" >> "$GITHUB_OUTPUT"
+ echo "$changed"
fi
+
- name: Run chart-testing
if: steps.list-changed.outputs.changed == 'true'
run: ct lint --target-branch ${{ github.event.repository.default_branch }} --validate-maintainers=false
diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml
index 0084f27b4c..edaac172a0 100644
--- a/.github/workflows/preview.yml
+++ b/.github/workflows/preview.yml
@@ -1,31 +1,130 @@
-name: Jellyseerr Preview
+---
+# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
+name: Seerr Preview
on:
push:
tags:
- 'preview-*'
+ workflow_dispatch:
+
+permissions:
+ contents: read
+
+concurrency:
+ group: preview-${{ github.ref }}
+ cancel-in-progress: true
jobs:
- build_and_push:
- name: Build & Publish Docker Preview Images
- runs-on: ubuntu-22.04
+ build:
+ name: Build (per-arch, native runners)
+ strategy:
+ matrix:
+ include:
+ - runner: ubuntu-24.04
+ platform: linux/amd64
+ arch: amd64
+ - runner: ubuntu-24.04-arm
+ platform: linux/arm64
+ arch: arm64
+ runs-on: ${{ matrix.runner }}
+ steps:
+ - name: Checkout
+ uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
+ with:
+ persist-credentials: false
+
+ - name: Commit timestamp
+ id: ts
+ run: echo "TIMESTAMP=$(git log -1 --pretty=%ct)" >> "$GITHUB_OUTPUT"
+
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1
+
+ - name: Derive preview version from tag
+ id: ver
+ shell: bash
+ run: |
+ TAG="${GITHUB_REF_NAME}"
+ VER="${TAG#preview-}"
+ VER="${VER#v}"
+ echo "version=${VER}" >> "$GITHUB_OUTPUT"
+ echo "Building preview version: ${VER}"
+
+ - name: Warm cache (no push) — ${{ matrix.platform }}
+ uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0
+ with:
+ context: .
+ file: ./Dockerfile
+ platforms: ${{ matrix.platform }}
+ push: false
+ build-args: |
+ COMMIT_TAG=${{ github.sha }}
+ BUILD_VERSION=${{ steps.ver.outputs.version }}
+ SOURCE_DATE_EPOCH=${{ steps.ts.outputs.TIMESTAMP }}
+ cache-from: type=gha,scope=${{ matrix.platform }}
+ cache-to: type=gha,mode=max,scope=${{ matrix.platform }}
+ provenance: false
+
+ publish:
+ name: Publish multi-arch image
+ needs: build
+ runs-on: ubuntu-24.04
+ permissions:
+ contents: read
+ packages: write
+ id-token: write
steps:
- name: Checkout
- uses: actions/checkout@v4
- - name: Get the version
- id: get_version
- run: echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
- - name: Set up QEMU
- uses: docker/setup-qemu-action@v3
+ uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
+ with:
+ persist-credentials: false
+
+ - name: Commit timestamp
+ id: ts
+ run: echo "TIMESTAMP=$(git log -1 --pretty=%ct)" >> "$GITHUB_OUTPUT"
+
- name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v3
+ uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1
+
- name: Log in to Docker Hub
- uses: docker/login-action@v3
+ uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
- - name: Build and push
- uses: docker/build-push-action@v5
+
+ - name: Log in to GitHub Container Registry
+ uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0
+ with:
+ registry: ghcr.io
+ username: ${{ github.repository_owner }}
+ password: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Derive preview version from tag
+ id: ver
+ shell: bash
+ run: |
+ TAG="${GITHUB_REF_NAME}"
+ VER="${TAG#preview-}"
+ VER="${VER#v}"
+ echo "version=${VER}" >> "$GITHUB_OUTPUT"
+ echo "Publishing preview version: ${VER}"
+
+ - name: Extract metadata
+ id: meta
+ uses: docker/metadata-action@c1e51972afc2121e065aed6d45c65596fe445f3f # v5.8.0
+ with:
+ images: |
+ ${{ github.repository }}
+ ghcr.io/${{ github.repository }}
+ tags: |
+ type=raw,value=preview-${{ steps.ver.outputs.version }}
+ labels: |
+ org.opencontainers.image.version=preview-${{ steps.ver.outputs.version }}
+ org.opencontainers.image.created=${{ steps.ts.outputs.TIMESTAMP }}
+
+ - name: Build & Push (multi-arch, single tag)
+ uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0
with:
context: .
file: ./Dockerfile
@@ -33,7 +132,12 @@ jobs:
push: true
build-args: |
COMMIT_TAG=${{ github.sha }}
- BUILD_VERSION=${{ steps.get_version.outputs.VERSION }}
- BUILD_DATE=${{ github.event.repository.updated_at }}
- tags: |
- fallenbagel/jellyseerr:${{ steps.get_version.outputs.VERSION }}
+ BUILD_VERSION=${{ steps.ver.outputs.version }}
+ SOURCE_DATE_EPOCH=${{ steps.ts.outputs.TIMESTAMP }}
+ labels: ${{ steps.meta.outputs.labels }}
+ tags: ${{ steps.meta.outputs.tags }}
+ cache-from: |
+ type=gha,scope=linux/amd64
+ type=gha,scope=linux/arm64
+ cache-to: type=gha,mode=max
+ provenance: false
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index d0c36976dc..53b806f3d1 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -1,136 +1,345 @@
-name: Jellyseer Release
+---
+# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
+name: Seerr Release
-on: workflow_dispatch
+on:
+ push:
+ tags:
+ - 'v*'
+
+permissions:
+ contents: read
+
+concurrency:
+ group: release-${{ github.ref }}
+ cancel-in-progress: true
+
+env:
+ DOCKER_HUB: seerr/seerr
jobs:
- semantic-release:
- name: Tag and release latest version
- runs-on: ubuntu-22.04
- env:
- HUSKY: 0
+ changelog:
+ name: Generate changelog
+ runs-on: ubuntu-24.04
+ permissions:
+ contents: read
+ outputs:
+ release_body: ${{ steps.git-cliff.outputs.content }}
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
fetch-depth: 0
- - name: Set up Node.js
- uses: actions/setup-node@v4
+ persist-credentials: false
+
+ - name: Generate changelog
+ id: git-cliff
+ uses: orhun/git-cliff-action@d77b37db2e3f7398432d34b72a12aa3e2ba87e51 # v4.6.0
with:
- node-version: 22
- - name: Set up QEMU
- uses: docker/setup-qemu-action@v3
+ config: .github/cliff.toml
+ args: -vv --current
+ env:
+ OUTPUT: CHANGELOG.md
+ GITHUB_REPO: ${{ github.repository }}
+
+ create-draft-release:
+ name: Create draft release
+ runs-on: ubuntu-24.04
+ permissions:
+ contents: write
+ needs: changelog
+ steps:
+ - name: Checkout
+ uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
+ with:
+ persist-credentials: false
+
+ - name: Draft Release
+ run: gh release create ${GITHUB_REF_NAME} -t "Release ${GITHUB_REF_NAME}" -n "${RELEASE_BODY}" --draft
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ RELEASE_BODY: ${{ needs.changelog.outputs.release_body }}
+
+ build:
+ name: Build (${{ matrix.arch }})
+ strategy:
+ matrix:
+ include:
+ - runner: ubuntu-24.04
+ platform: linux/amd64
+ arch: amd64
+ - runner: ubuntu-24.04-arm
+ platform: linux/arm64
+ arch: arm64
+ runs-on: ${{ matrix.runner }}
+ env:
+ VERSION: ${{ github.ref_name }}
+ steps:
+ - name: Checkout
+ uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
+ with:
+ persist-credentials: false
+
+ - name: Commit timestamp
+ id: ts
+ run: echo "TIMESTAMP=$(git log -1 --pretty=%ct)" >> "$GITHUB_OUTPUT"
+
- name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v3
+ uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1
+
+ - name: Warm cache [${{ matrix.platform }}]
+ uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0
+ with:
+ context: .
+ file: ./Dockerfile
+ platforms: ${{ matrix.platform }}
+ push: false
+ build-args: |
+ COMMIT_TAG=${{ github.sha }}
+ BUILD_VERSION=${{ env.VERSION }}
+ SOURCE_DATE_EPOCH=${{ steps.ts.outputs.TIMESTAMP }}
+ cache-from: type=gha,scope=${{ matrix.platform }}
+ cache-to: type=gha,mode=max,scope=${{ matrix.platform }}
+ provenance: false
+
+ publish:
+ name: Publish multi-arch manifests
+ needs: build
+ runs-on: ubuntu-24.04
+ permissions:
+ contents: read
+ packages: write
+ outputs:
+ image_digest: ${{ steps.digests.outputs.IMAGE_DIGEST }}
+ env:
+ VERSION: ${{ github.ref_name }}
+ steps:
+ - name: Checkout
+ uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
+ with:
+ persist-credentials: false
+
+ - name: Commit timestamp
+ id: ts
+ run: echo "TIMESTAMP=$(git log -1 --pretty=%ct)" >> "$GITHUB_OUTPUT"
+
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1
+
- name: Log in to Docker Hub
- uses: docker/login-action@v3
+ uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
+
- name: Log in to GitHub Container Registry
- uses: docker/login-action@v3
+ uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
- password: ${{ secrets.GH_TOKEN }}
- - name: Pnpm Setup
- uses: pnpm/action-setup@v4
+ password: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Extract metadata
+ id: meta
+ uses: docker/metadata-action@c1e51972afc2121e065aed6d45c65596fe445f3f # v5.8.0
+ with:
+ images: |
+ ${{ github.repository }}
+ ghcr.io/${{ github.repository }}
+ tags: |
+ type=raw,value=${{ env.VERSION }}
+ labels: |
+ org.opencontainers.image.created=${{ steps.ts.outputs.TIMESTAMP }}
+
+ - name: Build & Push (multi-arch)
+ uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0
with:
- version: 9
- - name: Get pnpm store directory
- shell: sh
+ context: .
+ file: ./Dockerfile
+ platforms: linux/amd64,linux/arm64
+ push: true
+ build-args: |
+ COMMIT_TAG=${{ github.sha }}
+ BUILD_VERSION=${{ env.VERSION }}
+ SOURCE_DATE_EPOCH=${{ steps.ts.outputs.TIMESTAMP }}
+ labels: ${{ steps.meta.outputs.labels }}
+ tags: ${{ steps.meta.outputs.tags }}
+ cache-from: |
+ type=gha,scope=linux/amd64
+ type=gha,scope=linux/arm64
+ cache-to: type=gha,mode=max
+ provenance: false
+
+ - name: Resolve manifest digest
+ id: digests
+ run: |
+ DIGEST=$(docker buildx imagetools inspect "${{ github.repository }}:${{ env.VERSION }}" --format '{{json .Manifest.Digest}}' | tr -d '"')
+ echo "IMAGE_DIGEST=$DIGEST" >> $GITHUB_OUTPUT
+
+ - name: Also tag :latest (non-pre-release only)
+ shell: bash
+ if: ${{ !contains(env.VERSION, '-') }}
run: |
- echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- - name: Setup pnpm cache
- uses: actions/cache@v4
+ docker buildx imagetools create \
+ -t ${{ env.DOCKER_HUB }}:latest \
+ ${{ env.DOCKER_HUB }}:${{ env.VERSION }}
+
+ docker buildx imagetools create \
+ -t ghcr.io/${{ github.repository }}:latest \
+ ghcr.io/${{ github.repository }}:${{ env.VERSION }}
+
+ sign:
+ name: Sign images and create SBOM attestations
+ needs: publish
+ runs-on: ubuntu-24.04
+ permissions:
+ contents: read
+ id-token: write
+ packages: write
+ env:
+ VERSION: ${{ github.ref_name }}
+ COSIGN_YES: 'true'
+ steps:
+ - name: Checkout
+ uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
+ with:
+ persist-credentials: false
+
+ - name: Install Cosign
+ uses: sigstore/cosign-installer@d7543c93d881b35a8faa02e8e3605f69b7a1ce62 # v3.10.0
+
+ - name: Install Trivy
+ uses: aquasecurity/setup-trivy@e6c2c5e321ed9123bda567646e2f96565e34abe1 # v0.2.4
+
+ - name: Log in to Docker Hub
+ uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0
+ with:
+ username: ${{ secrets.DOCKER_USERNAME }}
+ password: ${{ secrets.DOCKER_TOKEN }}
+
+ - name: Log in to GitHub Container Registry
+ uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0
+ with:
+ registry: ghcr.io
+ username: ${{ github.repository_owner }}
+ password: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Sign images
+ run: |
+ cosign sign --recursive "ghcr.io/${{ github.repository }}@${{ needs.publish.outputs.image_digest }}"
+ cosign sign --recursive "${{ env.DOCKER_HUB }}@${{ needs.publish.outputs.image_digest }}"
+
+ - name: Generate SBOMs
+ run: |
+ trivy image --format cyclonedx --output seerr-ghcr-image-${{ env.VERSION }}.sbom \
+ "ghcr.io/${{ github.repository }}@${{ needs.publish.outputs.image_digest }}"
+
+ trivy image --format cyclonedx --output seerr-dockerhub-image-${{ env.VERSION }}.sbom \
+ "${{ env.DOCKER_HUB }}@${{ needs.publish.outputs.image_digest }}"
+
+ - name: Attest SBOMs
+ run: |
+ cosign attest \
+ --type cyclonedx \
+ --predicate seerr-ghcr-image-${{ env.VERSION }}.sbom \
+ "ghcr.io/${{ github.repository }}@${{ needs.publish.outputs.image_digest }}"
+
+ cosign attest \
+ --type cyclonedx \
+ --predicate seerr-dockerhub-image-${{ env.VERSION }}.sbom \
+ "${{ env.DOCKER_HUB }}@${{ needs.publish.outputs.image_digest }}"
+
+ - name: Upload SBOMs
+ uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
- path: ${{ env.STORE_PATH }}
- key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
- restore-keys: |
- ${{ runner.os }}-pnpm-store-
- - name: Install dependencies
- run: pnpm install
- - name: Release
+ name: sboms-${{ env.VERSION }}
+ path: '*.sbom'
+ if-no-files-found: error
+ retention-days: 1
+
+ verify:
+ name: Verify signatures and attestations
+ needs: [publish, sign]
+ runs-on: ubuntu-24.04
+ permissions:
+ contents: read
+ env:
+ VERSION: ${{ github.ref_name }}
+ steps:
+ - name: Install Cosign
+ uses: sigstore/cosign-installer@d7543c93d881b35a8faa02e8e3605f69b7a1ce62 # v3.10.0
+
+ - name: Verify signatures
+ run: |
+ cosign verify "ghcr.io/${{ github.repository }}@${{ needs.publish.outputs.image_digest }}" \
+ --certificate-identity "https://github.com/${{ github.workflow_ref }}" \
+ --certificate-oidc-issuer "https://token.actions.githubusercontent.com"
+
+ cosign verify "${{ env.DOCKER_HUB }}@${{ needs.publish.outputs.image_digest }}" \
+ --certificate-identity "https://github.com/${{ github.workflow_ref }}" \
+ --certificate-oidc-issuer "https://token.actions.githubusercontent.com"
+
+ - name: Verify attestations
+ run: |
+ cosign verify-attestation "ghcr.io/${{ github.repository }}@${{ needs.publish.outputs.image_digest }}" \
+ --type cyclonedx \
+ --certificate-identity "https://github.com/${{ github.workflow_ref }}" \
+ --certificate-oidc-issuer "https://token.actions.githubusercontent.com" > /dev/null
+
+ cosign verify-attestation "${{ env.DOCKER_HUB }}@${{ needs.publish.outputs.image_digest }}" \
+ --type cyclonedx \
+ --certificate-identity "https://github.com/${{ github.workflow_ref }}" \
+ --certificate-oidc-issuer "https://token.actions.githubusercontent.com" > /dev/null
+
+ publish-release:
+ name: Publish release
+ needs: [create-draft-release, verify]
+ runs-on: ubuntu-24.04
+ permissions:
+ contents: write
+ env:
+ VERSION: ${{ github.ref_name }}
+ steps:
+ - name: Publish release
+ run: gh release edit "${{ env.VERSION }}" --draft=false --repo "${{ github.repository }}"
env:
- GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
- DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
- DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
- run: npx semantic-release
-
- # build-snap:
- # name: Build Snap Package (${{ matrix.architecture }})
- # needs: semantic-release
- # runs-on: ubuntu-22.04
- # strategy:
- # fail-fast: false
- # matrix:
- # architecture:
- # - amd64
- # - arm64
- # steps:
- # - name: Checkout Code
- # uses: actions/checkout@v4
- # with:
- # fetch-depth: 0
- # - name: Switch to main branch
- # run: git checkout main
- # - name: Pull latest changes
- # run: git pull
- # - name: Prepare
- # id: prepare
- # run: |
- # git fetch --prune --tags
- # if [[ $GITHUB_REF == refs/tags/* || $GITHUB_REF == refs/heads/master ]]; then
- # echo "RELEASE=stable" >> $GITHUB_OUTPUT
- # else
- # echo "RELEASE=edge" >> $GITHUB_OUTPUT
- # fi
- # - name: Set Up QEMU
- # uses: docker/setup-qemu-action@v3
- # with:
- # image: tonistiigi/binfmt@sha256:df15403e06a03c2f461c1f7938b171fda34a5849eb63a70e2a2109ed5a778bde
- # - name: Build Snap Package
- # uses: diddlesnaps/snapcraft-multiarch-action@v1
- # id: build
- # with:
- # architecture: ${{ matrix.architecture }}
- # - name: Upload Snap Package
- # uses: actions/upload-artifact@v4
- # with:
- # name: jellyseerr-snap-package-${{ matrix.architecture }}
- # path: ${{ steps.build.outputs.snap }}
- # - name: Review Snap Package
- # uses: diddlesnaps/snapcraft-review-tools-action@v1
- # with:
- # snap: ${{ steps.build.outputs.snap }}
- # - name: Publish Snap Package
- # uses: snapcore/action-publish@v1
- # env:
- # SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAP_LOGIN }}
- # with:
- # snap: ${{ steps.build.outputs.snap }}
- # release: ${{ steps.prepare.outputs.RELEASE }}
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
discord:
name: Send Discord Notification
- needs: semantic-release
+ needs: publish-release
if: always()
- runs-on: ubuntu-22.04
+ runs-on: ubuntu-24.04
steps:
- - name: Get Build Job Status
- uses: technote-space/workflow-conclusion-action@v3
- - name: Combine Job Status
+ - name: Determine status
id: status
run: |
- failures=(neutral, skipped, timed_out, action_required)
- if [[ ${array[@]} =~ $WORKFLOW_CONCLUSION ]]; then
- echo "status=failure" >> $GITHUB_OUTPUT
- else
- echo "status=$WORKFLOW_CONCLUSION" >> $GITHUB_OUTPUT
- fi
- - name: Post Status to Discord
- uses: sarisia/actions-status-discord@v1
- with:
- webhook: ${{ secrets.DISCORD_WEBHOOK }}
- status: ${{ steps.status.outputs.status }}
- title: ${{ github.workflow }}
- nofail: true
+ case "${{ needs.publish-release.result }}" in
+ success) echo "status=Success" >> $GITHUB_OUTPUT; echo "colour=3066993" >> $GITHUB_OUTPUT ;;
+ failure) echo "status=Failure" >> $GITHUB_OUTPUT; echo "colour=15158332" >> $GITHUB_OUTPUT ;;
+ cancelled) echo "status=Cancelled" >> $GITHUB_OUTPUT; echo "colour=10181046" >> $GITHUB_OUTPUT ;;
+ *) echo "status=Skipped" >> $GITHUB_OUTPUT; echo "colour=9807270" >> $GITHUB_OUTPUT ;;
+ esac
+
+ - name: Send notification
+ run: |
+ WEBHOOK="${{ secrets.DISCORD_WEBHOOK }}"
+
+ PAYLOAD=$(cat <> "$GITHUB_OUTPUT"
+ echo "changed_list=${changed//$'\n'/ }" >> "$GITHUB_OUTPUT"
+ fi
+ env:
+ TARGET_BRANCH: ${{ github.event.repository.default_branch }}
+
+ - name: Bump chart version
+ if: steps.list-changed.outputs.changed == 'true'
+ env:
+ CHART: ${{ steps.list-changed.outputs.changed_list }}
+ run: |
+ if [[ ! -d "${CHART}" ]]; then
+ echo "${CHART} directory not found"
+ exit 0
+ fi
+
+ # Extract current appVersion and chart version from Chart.yaml
+ APP_VERSION=$(grep -e "^appVersion:" "$CHART/Chart.yaml" | cut -d ":" -f 2 | tr -d '[:space:]' | tr -d '"')
+ CHART_VERSION=$(grep -e "^version:" "$CHART/Chart.yaml" | cut -d ":" -f 2 | tr -d '[:space:]' | tr -d '"')
+
+ # Extract major, minor and patch versions of appVersion
+ APP_MAJOR_VERSION=$(printf '%s' "$APP_VERSION" | cut -d "." -f 1)
+ APP_MINOR_VERSION=$(printf '%s' "$APP_VERSION" | cut -d "." -f 2)
+ APP_PATCH_VERSION=$(printf '%s' "$APP_VERSION" | cut -d "." -f 3)
+
+ # Extract major, minor and patch versions of chart version
+ CHART_MAJOR_VERSION=$(printf '%s' "$CHART_VERSION" | cut -d "." -f 1)
+ CHART_MINOR_VERSION=$(printf '%s' "$CHART_VERSION" | cut -d "." -f 2)
+ CHART_PATCH_VERSION=$(printf '%s' "$CHART_VERSION" | cut -d "." -f 3)
+
+ # Get previous appVersion from the base commit of the pull request
+ BASE_COMMIT=$(git merge-base origin/main HEAD)
+ PREV_APP_VERSION=$(git show "$BASE_COMMIT":"$CHART/Chart.yaml" | grep -e "^appVersion:" | cut -d ":" -f 2 | tr -d '[:space:]' | tr -d '"')
+
+ # Extract major, minor and patch versions of previous appVersion
+ PREV_APP_MAJOR_VERSION=$(printf '%s' "$PREV_APP_VERSION" | cut -d "." -f 1)
+ PREV_APP_MINOR_VERSION=$(printf '%s' "$PREV_APP_VERSION" | cut -d "." -f 2)
+ PREV_APP_PATCH_VERSION=$(printf '%s' "$PREV_APP_VERSION" | cut -d "." -f 3)
+
+ # Check if the major, minor, or patch version of appVersion has changed
+ if [[ "$APP_MAJOR_VERSION" != "$PREV_APP_MAJOR_VERSION" ]]; then
+ # Bump major version of the chart and reset minor and patch versions to 0
+ CHART_MAJOR_VERSION=$((CHART_MAJOR_VERSION+1))
+ CHART_MINOR_VERSION=0
+ CHART_PATCH_VERSION=0
+ elif [[ "$APP_MINOR_VERSION" != "$PREV_APP_MINOR_VERSION" ]]; then
+ # Bump minor version of the chart and reset patch version to 0
+ CHART_MINOR_VERSION=$((CHART_MINOR_VERSION+1))
+ CHART_PATCH_VERSION=0
+ elif [[ "$APP_PATCH_VERSION" != "$PREV_APP_PATCH_VERSION" ]]; then
+ # Bump patch version of the chart
+ CHART_PATCH_VERSION=$((CHART_PATCH_VERSION+1))
+ fi
+
+ # Update the chart version in Chart.yaml
+ CHART_NEW_VERSION="${CHART_MAJOR_VERSION}.${CHART_MINOR_VERSION}.${CHART_PATCH_VERSION}"
+ sed -i "s/^version:.*/version: ${CHART_NEW_VERSION}/" "$CHART/Chart.yaml"
+
+ - name: Ensure documentation is updated
+ if: steps.list-changed.outputs.changed == 'true'
+ uses: docker://jnorwood/helm-docs:v1.14.2@sha256:7e562b49ab6b1dbc50c3da8f2dd6ffa8a5c6bba327b1c6335cc15ce29267979c
+
+ - name: Commit changes
+ if: steps.list-changed.outputs.changed == 'true'
+ env:
+ CHART: ${{ steps.list-changed.outputs.changed_list }}
+ GITHUB_TOKEN: ${{ steps.app-token.outputs.token }}
+ GITHUB_HEAD_REF: ${{ github.head_ref }}
+ run: |
+ # Define the target directory
+ TARGET_DIR="$CHART"
+
+ # Fetch deleted files in the target directory
+ DELETED_FILES=$(git diff --diff-filter=D --name-only HEAD -- "$TARGET_DIR")
+
+ # Fetch added/modified files in the target directory
+ MODIFIED_FILES=$(git diff --diff-filter=ACM --name-only HEAD -- "$TARGET_DIR")
+
+ # Create a temporary file for JSON output
+ FILE_CHANGES_JSON_FILE=$(mktemp)
+
+ # Initialize JSON structure in the file
+ echo '{ "deletions": [], "additions": [] }' > "$FILE_CHANGES_JSON_FILE"
+
+ # Add deletions
+ for file in $DELETED_FILES; do
+ jq --arg path "$file" '.deletions += [{"path": $path}]' "$FILE_CHANGES_JSON_FILE" > "$FILE_CHANGES_JSON_FILE.tmp"
+ mv "$FILE_CHANGES_JSON_FILE.tmp" "$FILE_CHANGES_JSON_FILE"
+ done
+
+ # Add additions (new or modified files)
+ for file in $MODIFIED_FILES; do
+ BASE64_CONTENT=$(base64 -w 0 <"$file") # Encode file content
+ jq --arg path "$file" --arg content "$BASE64_CONTENT" \
+ '.additions += [{"path": $path, "contents": $content}]' "$FILE_CHANGES_JSON_FILE" > "$FILE_CHANGES_JSON_FILE.tmp"
+ mv "$FILE_CHANGES_JSON_FILE.tmp" "$FILE_CHANGES_JSON_FILE"
+ done
+
+ # Create a temporary file for the final JSON payload
+ JSON_PAYLOAD_FILE=$(mktemp)
+
+ # Construct the final JSON using jq and store it in a file
+ jq -n --arg repo "$GITHUB_REPOSITORY" \
+ --arg branch "$GITHUB_HEAD_REF" \
+ --arg message "fix: post upgrade changes from renovate" \
+ --arg expectedOid "$GITHUB_SHA" \
+ --slurpfile fileChanges "$FILE_CHANGES_JSON_FILE" \
+ '{
+ query: "mutation ($input: CreateCommitOnBranchInput!) {
+ createCommitOnBranch(input: $input) {
+ commit {
+ url
+ }
+ }
+ }",
+ variables: {
+ input: {
+ branch: {
+ repositoryNameWithOwner: $repo,
+ branchName: $branch
+ },
+ message: { headline: $message },
+ fileChanges: $fileChanges[0],
+ expectedHeadOid: $expectedOid
+ }
+ }
+ }' > "$JSON_PAYLOAD_FILE"
+
+ # Call GitHub API
+ curl https://api.github.com/graphql -f \
+ -sSf -H "Authorization: Bearer $GITHUB_TOKEN" \
+ --data "@$JSON_PAYLOAD_FILE"
+
+ # Clean up temporary files
+ rm "$FILE_CHANGES_JSON_FILE" "$JSON_PAYLOAD_FILE"
diff --git a/.github/workflows/snap.yaml.disabled b/.github/workflows/snap.yaml.disabled
deleted file mode 100644
index 70d577c911..0000000000
--- a/.github/workflows/snap.yaml.disabled
+++ /dev/null
@@ -1,94 +0,0 @@
-name: Publish Snap
-
-# turn off edge snap builds temporarily and make it manual
-
-# on:
-# push:
-# branches:
-# - develop
-
-on: workflow_dispatch
-
-jobs:
- jobs:
- name: Job Check
- runs-on: ubuntu-22.04
- if: "!contains(github.event.head_commit.message, '[skip ci]')"
- steps:
- - name: Cancel Previous Runs
- uses: styfle/cancel-workflow-action@0.12.1
- with:
- access_token: ${{ secrets.GITHUB_TOKEN }}
-
- build-snap:
- name: Build Snap Package (${{ matrix.architecture }})
- needs: jobs
- runs-on: ubuntu-22.04
- strategy:
- fail-fast: false
- matrix:
- architecture:
- - amd64
- - arm64
- steps:
- - name: Checkout Code
- uses: actions/checkout@v4
- - name: Prepare
- id: prepare
- run: |
- git fetch --prune --unshallow --tags
- if [[ $GITHUB_REF == refs/tags/* || $GITHUB_REF == refs/heads/master ]]; then
- echo "RELEASE=stable" >> $GITHUB_OUTPUT
- else
- echo "RELEASE=edge" >> $GITHUB_OUTPUT
- fi
- - name: Set Up QEMU
- uses: docker/setup-qemu-action@v3
- - name: Configure Git
- run: git config --add safe.directory /data/parts/jellyseerr/src
- - name: Build Snap Package
- uses: diddlesnaps/snapcraft-multiarch-action@v1
- id: build
- with:
- architecture: ${{ matrix.architecture }}
- - name: Upload Snap Package
- uses: actions/upload-artifact@v4
- with:
- name: jellyseerr-snap-package-${{ matrix.architecture }}
- path: ${{ steps.build.outputs.snap }}
- - name: Review Snap Package
- uses: diddlesnaps/snapcraft-review-tools-action@v1
- with:
- snap: ${{ steps.build.outputs.snap }}
- - name: Publish Snap Package
- uses: snapcore/action-publish@v1
- env:
- SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAP_LOGIN }}
- with:
- snap: ${{ steps.build.outputs.snap }}
- release: ${{ steps.prepare.outputs.RELEASE }}
-
- discord:
- name: Send Discord Notification
- needs: build-snap
- if: always() && !contains(github.event.head_commit.message, '[skip ci]')
- runs-on: ubuntu-22.04
- steps:
- - name: Get Build Job Status
- uses: technote-space/workflow-conclusion-action@v3
- - name: Combine Job Status
- id: status
- run: |
- failures=(neutral, skipped, timed_out, action_required)
- if [[ ${array[@]} =~ $WORKFLOW_CONCLUSION ]]; then
- echo "status=failure" >> $GITHUB_OUTPUT
- else
- echo "status=$WORKFLOW_CONCLUSION" >> $GITHUB_OUTPUT
- fi
- - name: Post Status to Discord
- uses: sarisia/actions-status-discord@v1
- with:
- webhook: ${{ secrets.DISCORD_WEBHOOK }}
- status: ${{ steps.status.outputs.status }}
- title: ${{ github.workflow }}
- nofail: true
diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml
new file mode 100644
index 0000000000..4ccd7c88cc
--- /dev/null
+++ b/.github/workflows/stale.yml
@@ -0,0 +1,35 @@
+---
+# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
+name: Close Stale Issues and PRs
+
+on:
+ schedule:
+ - cron: '0 7 * * *'
+
+permissions: {}
+
+concurrency:
+ group: close-stale-${{ github.ref }}
+ cancel-in-progress: true
+
+jobs:
+ stale:
+ name: Close stale issues and PRs
+ runs-on: ubuntu-24.04
+ permissions:
+ actions: write
+ issues: write
+ pull-requests: write
+ steps:
+ - uses: actions/stale@5f858e3efba33a5ca4407a664cc011ad407f2008 # v10.1.0
+ with:
+ any-of-labels: "pending author's response"
+ exempt-issue-labels: 'confirmed'
+ days-before-stale: 30
+ days-before-close: 30
+ stale-issue-label: 'stale'
+ stale-issue-message: 'This issue is stale because it has been open 30 days with no activity. Please provide an update or the requested information to keep it open.'
+ close-issue-message: 'This issue was closed because it has been stalled for 30 days with no activity. Feel free to reopen it once you provide the required update or information.'
+ stale-pr-label: 'stale'
+ stale-pr-message: 'This PR is stale because it has been open 30 days with no activity. Please address the feedback or provide an update to keep it open.'
+ close-pr-message: 'This PR was closed because it has been stalled for 30 days with no activity. You can reopen it once you address the feedback or provide the requested changes.'
diff --git a/.github/workflows/support.yml b/.github/workflows/support.yml
index fd81754d66..c29eb9829e 100644
--- a/.github/workflows/support.yml
+++ b/.github/workflows/support.yml
@@ -1,25 +1,57 @@
+---
+# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
name: 'Support requests'
on:
issues:
types: [labeled, unlabeled, reopened]
+permissions:
+ issues: read
+
jobs:
support:
- runs-on: ubuntu-latest
+ if: github.event.label.name == 'support' || github.event.action == 'reopened'
+ runs-on: ubuntu-24.04
+ concurrency:
+ group: support-${{ github.event.issue.number }}
+ cancel-in-progress: true
+ permissions:
+ issues: write
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ GH_REPO: ${{ github.repository }}
+ NUMBER: ${{ github.event.issue.number }}
+ ISSUE_AUTHOR: ${{ github.event.issue.user.login }}
steps:
- - uses: dessant/support-requests@v4
- with:
- github-token: ${{ github.token }}
- support-label: 'support'
- issue-comment: >
- :wave: @{issue-author}, we use the issue tracker exclusively
+ - name: Label added, comment and close issue
+ if: github.event.action == 'labeled' && github.event.label.name == 'support'
+ shell: bash
+ env:
+ BODY: >
+ :wave: @${{ env.ISSUE_AUTHOR }}, we use the issue tracker exclusively
for bug reports and feature requests. However, this issue appears
to be a support request. Please use our support channels
- to get help with Jellyseerr.
+ to get help with Seerr.
+
+ - [Discord](https://discord.gg/seerr)
+ run: |
+ retry() { n=0; until "$@"; do n=$((n+1)); [ $n -ge 3 ] && break; echo "retry $n: $*" >&2; sleep 2; done; }
+ retry gh issue comment "$NUMBER" -R "$GH_REPO" -b "$BODY" || true
+ retry gh issue close "$NUMBER" -R "$GH_REPO" || true
+ gh issue lock "$NUMBER" -R "$GH_REPO" -r "off_topic" || true
- - [Discord](https://discord.gg/ckbvBtDJgC)
+ - name: Reopened or label removed, unlock issue
+ if: github.event.action == 'unlabeled' && github.event.label.name == 'support'
+ shell: bash
+ run: |
+ retry() { n=0; until "$@"; do n=$((n+1)); [ $n -ge 3 ] && break; echo "retry $n: $*" >&2; sleep 2; done; }
+ retry gh issue reopen "$NUMBER" -R "$GH_REPO" || true
+ gh issue unlock "$NUMBER" -R "$GH_REPO" || true
- close-issue: true
- lock-issue: true
- issue-lock-reason: 'off-topic'
+ - name: Remove support label on manual reopen
+ if: github.event.action == 'reopened'
+ shell: bash
+ run: |
+ gh issue edit "$NUMBER" -R "$GH_REPO" --remove-label "support" || true
+ gh issue unlock "$NUMBER" -R "$GH_REPO" || true
diff --git a/.github/workflows/test-docs-deploy.yml b/.github/workflows/test-docs-deploy.yml
index 5526af0941..040f7db0c3 100644
--- a/.github/workflows/test-docs-deploy.yml
+++ b/.github/workflows/test-docs-deploy.yml
@@ -1,3 +1,5 @@
+---
+# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
name: Test Docs deployment
on:
@@ -8,24 +10,33 @@ on:
- 'docs/**'
- 'gen-docs/**'
+permissions:
+ contents: read
+
+concurrency:
+ group: docs-pr-${{ github.ref }}
+ cancel-in-progress: true
+
jobs:
test-deploy:
name: Test deployment
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
+ permissions:
+ contents: read
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
fetch-depth: 0
+ persist-credentials: false
- name: Set up Node.js
- uses: actions/setup-node@v4
+ uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with:
- node-version: 20
+ node-version-file: package.json
+ package-manager-cache: false
- name: Pnpm Setup
- uses: pnpm/action-setup@v4
- with:
- version: 9
+ uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0
- name: Get pnpm store directory
shell: sh
@@ -33,7 +44,7 @@ jobs:
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- name: Setup pnpm cache
- uses: actions/cache@v4
+ uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
with:
path: ${{ env.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
@@ -42,7 +53,7 @@ jobs:
- name: Install dependencies
run: |
- cd gen-docs
+ cd gen-docs
pnpm install --frozen-lockfile
- name: Build website
diff --git a/.github/workflows/trivy-scan.yml b/.github/workflows/trivy-scan.yml
new file mode 100644
index 0000000000..4b920746ab
--- /dev/null
+++ b/.github/workflows/trivy-scan.yml
@@ -0,0 +1,61 @@
+---
+# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
+name: Trivy Container Vulnerability Scan
+
+on:
+ workflow_run:
+ workflows:
+ - Seerr Release
+ types:
+ - completed
+ schedule:
+ - cron: '50 7 * * 5'
+ workflow_dispatch:
+
+permissions:
+ contents: read
+
+concurrency:
+ group: trivy-scan-${{ github.ref }}
+ cancel-in-progress: true
+
+jobs:
+ trivy:
+ if: ${{ github.event_name != 'workflow_run' || github.event.workflow_run.conclusion == 'success' }}
+ name: Scan latest container image
+ runs-on: ubuntu-24.04
+
+ permissions:
+ contents: read
+ security-events: write
+
+ env:
+ TRIVY_CACHE_DIR: .trivycache
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
+ with:
+ fetch-depth: 0
+ persist-credentials: false
+
+ - name: Cache Trivy DB
+ uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
+ with:
+ path: .trivycache
+ key: trivy-${{ runner.os }}-${{ hashFiles('**/Dockerfile') }}
+ restore-keys: |
+ trivy-${{ runner.os }}-
+
+ - name: Run Trivy image scan
+ uses: aquasecurity/trivy-action@b6643a29fecd7f34b3597bc6acb0a98b03d33ff8 # 0.33.1
+ with:
+ image-ref: ghcr.io/${{ github.repository }}:latest
+ format: sarif
+ output: trivy.sarif
+ ignore-unfixed: true
+
+ - name: Upload SARIF to code scanning
+ uses: github/codeql-action/upload-sarif@e296a935590eb16afc0c0108289f68c87e2a89a5 # v4.30.7
+ with:
+ sarif_file: trivy.sarif
diff --git a/.prettierignore b/.prettierignore
index 736c402cb1..969f1bc6f9 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -9,7 +9,11 @@ cypress/config/settings.cypress.json
# assets
src/assets/
public/
+!public/sw.js
docs/
+!/public/
+/public/*
+!/public/sw.js
# helm charts
**/charts
diff --git a/.stoplight.json b/.stoplight.json
deleted file mode 100644
index 0a876a9eb6..0000000000
--- a/.stoplight.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "formats": {
- "openapi": {
- "rootDir": ".",
- "include": ["**"]
- }
- },
- "exclude": ["docs"]
-}
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 589cec3680..92ad828392 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -20,5 +20,6 @@
"files.associations": {
"globals.css": "tailwindcss"
},
- "i18n-ally.localesPaths": ["src/i18n/locale"]
+ "i18n-ally.localesPaths": ["src/i18n/locale"],
+ "yaml.format.singleQuote": true
}
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 855cecfbfd..864d120a1a 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,7 +1,46 @@
-# Contributing to Jellyseerr
+# Contributing to Seerr
All help is welcome and greatly appreciated! If you would like to contribute to the project, the following instructions should get you started...
+## AI Assistance Notice
+
+> [!IMPORTANT]
+>
+> If you are using **any kind of AI assistance** to contribute to Seerr,
+> it must be disclosed in the pull request.
+
+If you are using any kind of AI assistance while contributing to Seerr,
+**this must be disclosed in the pull request**, along with the extent to
+which AI assistance was used (e.g. docs only vs. code generation).
+If PR responses are being generated by an AI, disclose that as well.
+As a small exception, trivial tab-completion doesn't need to be disclosed,
+so long as it is limited to single keywords or short phrases.
+
+An example disclosure:
+
+> This PR was written primarily by Claude Code.
+
+Or a more detailed disclosure:
+
+> I consulted ChatGPT to understand the codebase but the solution
+> was fully authored manually by myself.
+
+Failure to disclose this is first and foremost rude to the human operators
+on the other end of the pull request, but it also makes it difficult to
+determine how much scrutiny to apply to the contribution.
+
+In a perfect world, AI assistance would produce equal or higher quality
+work than any human. That isn't the world we live in today, and in most cases
+it's generating slop. I say this despite being a fan of and using them
+successfully myself (with heavy supervision)!
+
+When using AI assistance, we expect contributors to understand the code
+that is produced and be able to answer critical questions about it. It
+isn't a maintainers job to review a PR so broken that it requires
+significant rework to be acceptable.
+
+Please be respectful to maintainers and disclose AI assistance.
+
## Development
### Tools Required
@@ -17,14 +56,14 @@ All help is welcome and greatly appreciated! If you would like to contribute to
1. [Fork](https://help.github.com/articles/fork-a-repo/) the repository to your own GitHub account and [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device:
```bash
- git clone https://github.com/YOUR_USERNAME/jellyseerr.git
- cd jellyseerr/
+ git clone https://github.com/YOUR_USERNAME/seerr.git
+ cd seerr/
```
2. Add the remote `upstream`:
```bash
- git remote add upstream https://github.com/fallenbagel/jellyseerr.git
+ git remote add upstream https://github.com/seerr-team/seerr.git
```
3. Create a new branch:
@@ -81,7 +120,7 @@ Steps:
### Contributing Code
-- If you are taking on an existing bug or feature ticket, please comment on the [issue](https://github.com/fallenbagel/jellyseerr/issues) to avoid multiple people working on the same thing.
+- If you are taking on an existing bug or feature ticket, please comment on the [issue](/../../issues) to avoid multiple people working on the same thing.
- All commits **must** follow [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/)
- Pull requests with commits not following this standard will **not** be merged.
- Please make meaningful commits, or squash them prior to opening a pull request.
@@ -91,7 +130,7 @@ Steps:
- You can create a "draft" pull request early to get feedback on your work.
- Your code **must** be formatted correctly, or the tests will fail.
- We use Prettier to format our code base. It should automatically run with a Git hook, but it is recommended to have the Prettier extension installed in your editor and format on save.
-- If you have questions or need help, you can reach out via [Discussions](https://github.com/fallenbagel/jellyseerr/discussions) or our [Discord server](https://discord.gg/ckbvBtDJgC).
+- If you have questions or need help, you can reach out via [Discussions](/../../discussions) or our [Discord server](https://discord.gg/seerr).
- Only open pull requests to `develop`, never `master`! Any pull requests opened to `master` will be closed.
### UI Text Style
@@ -108,11 +147,11 @@ When adding new UI text, please try to adhere to the following guidelines:
8. If an additional description or "tip" is required for a form field, it should be styled using the global CSS class `label-tip`.
9. In full sentences, abbreviations like "info" or "auto" should not be used in place of full words, unless referencing the name/label of a specific setting or option which has an abbreviation in its name.
10. Do your best to check for spelling errors and grammatical mistakes.
-11. Do not misspell "Jellyseerr."
+11. Do not misspell "Seerr."
## Translation
-We use [Weblate](https://jellyseerr.borgcube.de/projects/jellyseerr/jellyseerr-frontend/) for our translations, and your help with localizing Jellyseerr would be greatly appreciated! If your language is not listed below, please [open a feature request](https://github.com/fallenbagel/jellyseerr/issues/new/choose).
+We use [Weblate](https://jellyseerr.borgcube.de/projects/jellyseerr/jellyseerr-frontend/) for our translations, and your help with localizing Seerr would be greatly appreciated! If your language is not listed below, please [open a feature request](/../../issues/new/choose).
@@ -158,4 +197,4 @@ DB_TYPE="postgres" DB_USER=postgres DB_PASS=postgres pnpm migration:generate ser
## Attribution
-This contribution guide was inspired by the [Next.js](https://github.com/vercel/next.js), [Radarr](https://github.com/Radarr/Radarr), and [Overseerr](https://github.com/sct/Overseerr) contribution guides.
+This contribution guide was inspired by the [Next.js](https://github.com/vercel/next.js), [Radarr](https://github.com/Radarr/Radarr), and [Ghostty](https://github.com/ghostty-org/ghostty) contribution guides.
diff --git a/Dockerfile b/Dockerfile
index bb2776547a..039b0ca88d 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,9 +1,19 @@
-FROM node:22-alpine AS BUILD_IMAGE
+FROM node:22.20.0-alpine3.22@sha256:cb3143549582cc5f74f26f0992cdef4a422b22128cb517f94173a5f910fa4ee7 AS base
+ARG SOURCE_DATE_EPOCH
+ARG TARGETPLATFORM
+ENV TARGETPLATFORM=${TARGETPLATFORM:-linux/amd64}
+
+ENV PNPM_HOME="/pnpm"
+ENV PATH="$PNPM_HOME:$PATH"
+RUN corepack enable
+COPY . ./app
WORKDIR /app
-ARG TARGETPLATFORM
-ENV TARGETPLATFORM=${TARGETPLATFORM:-linux/amd64}
+FROM base AS prod-deps
+RUN --mount=type=cache,id=pnpm,target=/pnpm/store CI=true pnpm install --prod --frozen-lockfile
+
+FROM base as build
RUN \
case "${TARGETPLATFORM}" in \
@@ -14,52 +24,32 @@ RUN \
;; \
esac
-RUN npm install --global pnpm@9
+RUN --mount=type=cache,id=pnpm,target=/pnpm/store CYPRESS_INSTALL_BINARY=0 pnpm install --frozen-lockfile
-COPY package.json pnpm-lock.yaml postinstall-win.js ./
-RUN CYPRESS_INSTALL_BINARY=0 pnpm install --frozen-lockfile
+RUN pnpm build
-COPY . ./
+RUN rm -rf .next/cache
+FROM node:22.20.0-alpine3.22@sha256:cb3143549582cc5f74f26f0992cdef4a422b22128cb517f94173a5f910fa4ee7
+ARG SOURCE_DATE_EPOCH
ARG COMMIT_TAG
+ENV NODE_ENV=production
ENV COMMIT_TAG=${COMMIT_TAG}
-RUN pnpm build
-
-# remove development dependencies
-RUN pnpm prune --prod --ignore-scripts
+RUN apk add --no-cache tzdata
-RUN rm -rf src server .next/cache charts gen-docs docs
-
-RUN touch config/DOCKER
-
-RUN echo "{\"commitTag\": \"${COMMIT_TAG}\"}" > committag.json
-
-
-FROM node:22-alpine
-
-# OCI Meta information
-ARG BUILD_DATE
-ARG BUILD_VERSION
-LABEL \
- org.opencontainers.image.authors="Fallenbagel" \
- org.opencontainers.image.source="https://github.com/fallenbagel/jellyseerr" \
- org.opencontainers.image.created=${BUILD_DATE} \
- org.opencontainers.image.version=${BUILD_VERSION} \
- org.opencontainers.image.title="Jellyseerr" \
- org.opencontainers.image.description="Open-source media request and discovery manager for Jellyfin, Plex, and Emby." \
- org.opencontainers.image.licenses="MIT"
+USER node:node
WORKDIR /app
-RUN apk add --no-cache tzdata tini && rm -rf /tmp/*
-
-RUN npm install -g pnpm@9
+COPY --chown=node:node . .
+COPY --chown=node:node --from=prod-deps /app/node_modules ./node_modules
+COPY --chown=node:node --from=build /app/.next ./.next
+COPY --chown=node:node --from=build /app/dist ./dist
-# copy from build image
-COPY --from=BUILD_IMAGE /app ./
-
-ENTRYPOINT [ "/sbin/tini", "--" ]
-CMD [ "pnpm", "start" ]
+RUN touch config/DOCKER && \
+ echo "{\"commitTag\": \"${COMMIT_TAG}\"}" > committag.json
EXPOSE 5055
+
+CMD [ "npm", "start" ]
diff --git a/Dockerfile.local b/Dockerfile.local
index 666fa74fb8..cd41e60383 100644
--- a/Dockerfile.local
+++ b/Dockerfile.local
@@ -1,10 +1,12 @@
-FROM node:22-alpine
+FROM node:22.20.0-alpine3.22@sha256:cb3143549582cc5f74f26f0992cdef4a422b22128cb517f94173a5f910fa4ee7
+
+ENV PNPM_HOME="/pnpm"
+ENV PATH="$PNPM_HOME:$PATH"
+RUN corepack enable
COPY . /app
WORKDIR /app
-RUN npm install --global pnpm@9
-
RUN pnpm install
CMD pnpm dev
diff --git a/README.md b/README.md
index 30e6370892..37bbf9c164 100644
--- a/README.md
+++ b/README.md
@@ -1,20 +1,17 @@
+
⚠️ NOTE: We are currently in the process of merging Overseerr and Jellyseerr into this unified repository.
+
+
🚧 Seerr
-
-
-
-
-
+
+
-
+
-
-
-
-
+
-**Jellyseerr** is a free and open source software application for managing requests for your media library. It integrates with the media server of your choice: [Jellyfin](https://jellyfin.org), [Plex](https://plex.tv), and [Emby](https://emby.media/). In addition, it integrates with your existing services, such as **[Sonarr](https://sonarr.tv/)**, **[Radarr](https://radarr.video/)**.
+**Seerr** is a free and open source software application for managing requests for your media library. It integrates with the media server of your choice: [Jellyfin](https://jellyfin.org), [Plex](https://plex.tv), and [Emby](https://emby.media/). In addition, it integrates with your existing services, such as **[Sonarr](https://sonarr.tv/)**, **[Radarr](https://radarr.video/)**.
## Current Features
@@ -22,7 +19,7 @@
- Support for **PostgreSQL** and **SQLite** databases.
- Supports Movies, Shows and Mixed Libraries.
- Ability to change email addresses for SMTP purposes.
-- Easy integration with your existing services. Currently, Jellyseerr supports Sonarr and Radarr. More to come!
+- Easy integration with your existing services. Currently, Seerr supports Sonarr and Radarr. More to come!
- Jellyfin/Emby/Plex library scan, to keep track of the titles which are already available.
- Customizable request system, which allows users to request individual seasons or movies in a friendly, easy-to-use interface.
- Incredibly simple request management UI. Don't dig through the app to simply approve recent requests!
@@ -31,13 +28,13 @@
- Mobile-friendly design, for when you need to approve requests on the go!
- Support for watchlisting & blacklisting media.
-With more features on the way! Check out our [issue tracker](https://github.com/fallenbagel/jellyseerr/issues) to see the features which have already been requested.
+With more features on the way! Check out our [issue tracker](/../../issues) to see the features which have already been requested.
## Getting Started
-Check out our documentation for instructions on how to install and run Jellyseerr:
+Check out our documentation for instructions on how to install and run Seerr:
-https://docs.jellyseerr.dev/getting-started/
+https://docs.seerr.dev/getting-started/
### Packages:
@@ -45,289 +42,36 @@ Archlinux: [AUR](https://aur.archlinux.org/packages/jellyseerr)
Nix: [Nixpkg](https://search.nixos.org/packages?channel=unstable&show=jellyseerr)
-~Snap: [Snap](https://snapcraft.io/jellyseerr)~(Deprecated)
-
## Preview
## Support
-- Check out the [Jellyseerr Documentation](https://docs.jellyseerr.dev) before asking for help. Your question might already be in the docs!
-- You can get support on [Discord](https://discord.gg/ckbvBtDJgC).
-- You can ask questions in the Help category of our [GitHub Discussions](https://github.com/fallenbagel/jellyseerr/discussions).
-- Bug reports and feature requests can be submitted via [GitHub Issues](https://github.com/fallenbagel/jellyseerr/issues).
+- Check out the [Seerr Documentation](https://docs.seerr.dev) before asking for help. Your question might already be in the docs!
+- You can get support on [Discord](https://discord.gg/seerr).
+- You can ask questions in the Help category of our [GitHub Discussions](/../../discussions).
+- Bug reports and feature requests can be submitted via [GitHub Issues](/../../issues).
## API Documentation
-You can access the API documentation from your local Jellyseerr install at http://localhost:5055/api-docs
+You can access the API documentation from your local Seerr install at http://localhost:5055/api-docs
## Community
-You can ask questions, share ideas, and more in [GitHub Discussions](https://github.com/fallenbagel/jellyseerr/discussions).
+You can ask questions, share ideas, and more in [GitHub Discussions](/../../discussions).
-If you would like to chat with other members of our growing community, [join the Jellyseerr Discord server](https://discord.gg/ckbvBtDJgC)!
+If you would like to chat with other members of our growing community, [join the Seerr Discord server](https://discord.gg/seerr)!
-Our [Code of Conduct](https://github.com/fallenbagel/jellyseerr/blob/develop/CODE_OF_CONDUCT.md) applies to all Jellyseerr community channels.
+Our [Code of Conduct](./CODE_OF_CONDUCT.md) applies to all Seerr community channels.
## Contributing
-You can help improve Jellyseerr too! Check out our [Contribution Guide](https://github.com/fallenbagel/jellyseerr/blob/develop/CONTRIBUTING.md) to get started.
+You can help improve Seerr too! Check out our [Contribution Guide](./CONTRIBUTING.md) to get started.
## Contributors ✨
-Thanks goes to these wonderful people from Overseerr ([emoji key](https://allcontributors.org/docs/en/emoji-key)) and all those that contributed directly to Jellyseerr:
-
-### Jellyseerr Contributors ✨
-
-
-
-
-
diff --git a/src/components/Settings/SettingsBadge.tsx b/src/components/Settings/SettingsBadge.tsx
index 26e387290a..8fcef6aea3 100644
--- a/src/components/Settings/SettingsBadge.tsx
+++ b/src/components/Settings/SettingsBadge.tsx
@@ -10,7 +10,7 @@ const messages = defineMessages('components.Settings', {
experimentalTooltip:
'Enabling this setting may result in unexpected application behavior',
restartrequiredTooltip:
- 'Jellyseerr must be restarted for changes to this setting to take effect',
+ 'Seerr must be restarted for changes to this setting to take effect',
});
const SettingsBadge = ({
diff --git a/src/components/Settings/SettingsJellyfin.tsx b/src/components/Settings/SettingsJellyfin.tsx
index 324a0dce79..961337e4e1 100644
--- a/src/components/Settings/SettingsJellyfin.tsx
+++ b/src/components/Settings/SettingsJellyfin.tsx
@@ -52,7 +52,7 @@ const messages = defineMessages('components.Settings', {
syncJellyfin: 'Sync Libraries',
manualscanJellyfin: 'Manual Library Scan',
manualscanDescriptionJellyfin:
- "Normally, this will only be run once every 24 hours. Jellyseerr will check your {mediaServerName} server's recently added more aggressively. If this is your first time configuring Jellyseerr, a one-time full manual library scan is recommended!",
+ "Normally, this will only be run once every 24 hours. Seerr will check your {mediaServerName} server's recently added more aggressively. If this is your first time configuring Seerr, a one-time full manual library scan is recommended!",
notrunning: 'Not Running',
currentlibrary: 'Current Library: {name}',
librariesRemaining: 'Libraries Remaining: {count}',
diff --git a/src/components/Settings/SettingsJobsCache/index.tsx b/src/components/Settings/SettingsJobsCache/index.tsx
index 4b4c98f445..5355f4d3ae 100644
--- a/src/components/Settings/SettingsJobsCache/index.tsx
+++ b/src/components/Settings/SettingsJobsCache/index.tsx
@@ -35,7 +35,7 @@ const messages: { [messageName: string]: MessageDescriptor } = defineMessages(
jobsandcache: 'Jobs & Cache',
jobs: 'Jobs',
jobsDescription:
- 'Jellyseerr performs certain maintenance tasks as regularly-scheduled jobs, but they can also be manually triggered below. Manually running a job will not alter its schedule.',
+ 'Seerr performs certain maintenance tasks as regularly-scheduled jobs, but they can also be manually triggered below. Manually running a job will not alter its schedule.',
jobname: 'Job Name',
jobtype: 'Type',
nextexecution: 'Next Execution',
@@ -47,7 +47,7 @@ const messages: { [messageName: string]: MessageDescriptor } = defineMessages(
command: 'Command',
cache: 'Cache',
cacheDescription:
- 'Jellyseerr caches requests to external API endpoints to optimize performance and avoid making unnecessary API calls.',
+ 'Seerr caches requests to external API endpoints to optimize performance and avoid making unnecessary API calls.',
cacheflushed: '{cachename} cache flushed.',
cachename: 'Cache Name',
cachehits: 'Hits',
@@ -58,7 +58,7 @@ const messages: { [messageName: string]: MessageDescriptor } = defineMessages(
flushcache: 'Flush Cache',
dnsCache: 'DNS Cache',
dnsCacheDescription:
- 'Jellyseerr caches DNS lookups to optimize performance and avoid making unnecessary API calls.',
+ 'Seerr caches DNS lookups to optimize performance and avoid making unnecessary API calls.',
dnscacheflushed: '{hostname} dns cache flushed.',
dnscachename: 'Hostname',
dnscacheactiveaddress: 'Active Address',
@@ -104,7 +104,7 @@ const messages: { [messageName: string]: MessageDescriptor } = defineMessages(
'Every {jobScheduleSeconds, plural, one {second} other {{jobScheduleSeconds} seconds}}',
imagecache: 'Image Cache',
imagecacheDescription:
- 'When enabled in settings, Jellyseerr will proxy and cache images from pre-configured external sources. Cached images are saved into your config folder. You can find the files in {appDataPath}/cache/images.',
+ 'When enabled in settings, Seerr will proxy and cache images from pre-configured external sources. Cached images are saved into your config folder. You can find the files in {appDataPath}/cache/images.',
imagecachecount: 'Images Cached',
imagecachesize: 'Total Cache Size',
usersavatars: "Users' Avatars",
diff --git a/src/components/Settings/SettingsMain/index.tsx b/src/components/Settings/SettingsMain/index.tsx
index 4423010c09..7de8f83785 100644
--- a/src/components/Settings/SettingsMain/index.tsx
+++ b/src/components/Settings/SettingsMain/index.tsx
@@ -29,7 +29,7 @@ const messages = defineMessages('components.Settings.SettingsMain', {
general: 'General',
generalsettings: 'General Settings',
generalsettingsDescription:
- 'Configure global and default settings for Jellyseerr.',
+ 'Configure global and default settings for Seerr.',
apikey: 'API Key',
apikeyCopied: 'Copied API key to clipboard.',
applicationTitle: 'Application Title',
diff --git a/src/components/Settings/SettingsNetwork/index.tsx b/src/components/Settings/SettingsNetwork/index.tsx
index f0d08a7f88..0e5231989c 100644
--- a/src/components/Settings/SettingsNetwork/index.tsx
+++ b/src/components/Settings/SettingsNetwork/index.tsx
@@ -20,14 +20,14 @@ const messages = defineMessages('components.Settings.SettingsNetwork', {
network: 'Network',
networksettings: 'Network Settings',
networksettingsDescription:
- 'Configure network settings for your Jellyseerr instance.',
+ 'Configure network settings for your Seerr instance.',
csrfProtection: 'Enable CSRF Protection',
csrfProtectionTip: 'Set external API access to read-only (requires HTTPS)',
csrfProtectionHoverTip:
'Do NOT enable this setting unless you understand what you are doing!',
trustProxy: 'Enable Proxy Support',
trustProxyTip:
- 'Allow Jellyseerr to correctly register client IP addresses behind a proxy',
+ 'Allow Seerr to correctly register client IP addresses behind a proxy',
proxyEnabled: 'HTTP(S) Proxy',
proxyHostname: 'Proxy Hostname',
proxyPort: 'Proxy Port',
@@ -44,7 +44,7 @@ const messages = defineMessages('components.Settings.SettingsNetwork', {
docs: 'documentation',
forceIpv4First: 'Force IPv4 Resolution First',
forceIpv4FirstTip:
- 'Force Jellyseerr to resolve IPv4 addresses first instead of IPv6',
+ 'Force Seerr to resolve IPv4 addresses first instead of IPv6',
dnsCache: 'DNS Cache',
dnsCacheTip:
'Enable caching of DNS lookups to optimize performance and avoid making unnecessary API calls',
diff --git a/src/components/Settings/SettingsOidc/index.tsx b/src/components/Settings/SettingsOidc/index.tsx
new file mode 100644
index 0000000000..64c3c86960
--- /dev/null
+++ b/src/components/Settings/SettingsOidc/index.tsx
@@ -0,0 +1,167 @@
+import Button from '@app/components/Common/Button';
+import ConfirmButton from '@app/components/Common/ConfirmButton';
+import Modal from '@app/components/Common/Modal';
+import EditOidcModal from '@app/components/Settings/EditOidcModal';
+import globalMessages from '@app/i18n/globalMessages';
+import defineMessages from '@app/utils/defineMessages';
+import { Transition } from '@headlessui/react';
+import { PlusIcon } from '@heroicons/react/24/outline';
+import { PencilIcon, TrashIcon } from '@heroicons/react/24/solid';
+import type { OidcProvider, OidcSettings } from '@server/lib/settings';
+import { useState } from 'react';
+import { useIntl } from 'react-intl';
+import { useToasts } from 'react-toast-notifications';
+import useSWR from 'swr';
+
+const messages = defineMessages('components.Settings.SettingsOidc', {
+ configureoidc: 'Configure OpenID Connect',
+ addOidcProvider: 'Add OpenID Connect Provider',
+ oidcMatchUsername: 'Allow {mediaServerName} Usernames',
+ oidcMatchUsernameTip:
+ 'Match OIDC users with their {mediaServerName} accounts by username',
+ oidcAutomaticLogin: 'Automatic Login',
+ oidcAutomaticLoginTip:
+ 'Automatically navigate to the OIDC login and logout pages. This functionality ' +
+ 'only supported when OIDC is the exclusive login method.',
+ deleteError: 'Failed to delete OpenID Connect provider',
+});
+
+interface SettingsOidcProps {
+ show: boolean;
+ onOk?: () => void;
+}
+
+export default function SettingsOidc(props: SettingsOidcProps) {
+ const { addToast } = useToasts();
+ const intl = useIntl();
+ const [editOidcModal, setEditOidcModal] = useState<{
+ open: boolean;
+ provider?: OidcProvider;
+ }>({
+ open: false,
+ provider: undefined,
+ });
+ const { data, mutate: revalidate } = useSWR(
+ '/api/v1/settings/oidc'
+ );
+
+ async function onDelete(provider: OidcProvider) {
+ try {
+ const response = await fetch(`/api/v1/settings/oidc/${provider.slug}`, {
+ method: 'DELETE',
+ });
+
+ if (response.status !== 200)
+ throw new Error(`Request failed with status ${response.status}`);
+
+ revalidate(await response.json());
+ } catch (e) {
+ addToast(intl.formatMessage(messages.deleteError), {
+ autoDismiss: true,
+ appearance: 'error',
+ });
+ }
+ }
+
+ return (
+ <>
+
+
+
+
+
+
+ setEditOidcModal((prev) => ({ ...prev, open: false }))}
+ onOk={() => {
+ revalidate();
+ // preserve the provider so that it doesn't disappear while the dialog is closing
+ setEditOidcModal((prev) => ({ ...prev, open: false }));
+ }}
+ />
+ >
+ );
+}
diff --git a/src/components/Settings/SettingsPlex.tsx b/src/components/Settings/SettingsPlex.tsx
index cac73fb94a..b670d52099 100644
--- a/src/components/Settings/SettingsPlex.tsx
+++ b/src/components/Settings/SettingsPlex.tsx
@@ -30,7 +30,7 @@ const messages = defineMessages('components.Settings', {
plex: 'Plex',
plexsettings: 'Plex Settings',
plexsettingsDescription:
- 'Configure the settings for your Plex server. Jellyseerr scans your Plex libraries to determine content availability.',
+ 'Configure the settings for your Plex server. Seerr scans your Plex libraries to determine content availability.',
serverpreset: 'Server',
serverLocal: 'local',
serverRemote: 'remote',
@@ -51,12 +51,12 @@ const messages = defineMessages('components.Settings', {
enablessl: 'Use SSL',
plexlibraries: 'Plex Libraries',
plexlibrariesDescription:
- 'The libraries Jellyseerr scans for titles. Set up and save your Plex connection settings, then click the button below if no libraries are listed.',
+ 'The libraries Seerr scans for titles. Set up and save your Plex connection settings, then click the button below if no libraries are listed.',
scanning: 'Syncing…',
scan: 'Sync Libraries',
manualscan: 'Manual Library Scan',
manualscanDescription:
- "Normally, this will only be run once every 24 hours. Jellyseerr will check your Plex server's recently added more aggressively. If this is your first time configuring Plex, a one-time full manual library scan is recommended!",
+ "Normally, this will only be run once every 24 hours. Seerr will check your Plex server's recently added more aggressively. If this is your first time configuring Plex, a one-time full manual library scan is recommended!",
notrunning: 'Not Running',
currentlibrary: 'Current Library: {name}',
librariesRemaining: 'Libraries Remaining: {count}',
@@ -69,7 +69,7 @@ const messages = defineMessages('components.Settings', {
'Optionally direct users to the web app on your server instead of the "hosted" web app',
tautulliSettings: 'Tautulli Settings',
tautulliSettingsDescription:
- 'Optionally configure the settings for your Tautulli server. Jellyseerr fetches watch history data for your Plex media from Tautulli.',
+ 'Optionally configure the settings for your Tautulli server. Seerr fetches watch history data for your Plex media from Tautulli.',
urlBase: 'URL Base',
tautulliApiKey: 'API Key',
externalUrl: 'External URL',
diff --git a/src/components/Settings/SettingsUsers/index.tsx b/src/components/Settings/SettingsUsers/index.tsx
index 7dad9f940b..e5f4618254 100644
--- a/src/components/Settings/SettingsUsers/index.tsx
+++ b/src/components/Settings/SettingsUsers/index.tsx
@@ -4,14 +4,16 @@ import LoadingSpinner from '@app/components/Common/LoadingSpinner';
import PageTitle from '@app/components/Common/PageTitle';
import PermissionEdit from '@app/components/PermissionEdit';
import QuotaSelector from '@app/components/QuotaSelector';
+import SettingsOidc from '@app/components/Settings/SettingsOidc';
import useSettings from '@app/hooks/useSettings';
import globalMessages from '@app/i18n/globalMessages';
import defineMessages from '@app/utils/defineMessages';
-import { ArrowDownOnSquareIcon } from '@heroicons/react/24/outline';
+import { ArrowDownOnSquareIcon, CogIcon } from '@heroicons/react/24/outline';
import { MediaServerType } from '@server/constants/server';
import type { MainSettings } from '@server/lib/settings';
import axios from 'axios';
import { Field, Form, Formik } from 'formik';
+import { useState } from 'react';
import { useIntl } from 'react-intl';
import { useToasts } from 'react-toast-notifications';
import useSWR, { mutate } from 'swr';
@@ -31,6 +33,9 @@ const messages = defineMessages('components.Settings.SettingsUsers', {
mediaServerLogin: 'Enable {mediaServerName} Sign-In',
mediaServerLoginTip:
'Allow users to sign in using their {mediaServerName} account',
+ oidcLogin: 'Enable OpenID Connect Sign-In',
+ oidcLoginTip:
+ 'Allow users to sign in using OpenID Connect identity providers',
atLeastOneAuth: 'At least one authentication method must be selected.',
newPlexLogin: 'Enable New {mediaServerName} Sign-In',
newPlexLoginTip:
@@ -50,23 +55,25 @@ const SettingsUsers = () => {
mutate: revalidate,
} = useSWR('/api/v1/settings/main');
const settings = useSettings();
+ const [showOidcDialog, setShowOidcDialog] = useState(false);
const schema = yup
.object()
.shape({
localLogin: yup.boolean(),
mediaServerLogin: yup.boolean(),
+ oidcLogin: yup.boolean(),
})
.test({
name: 'atLeastOneAuth',
test: function (values) {
- const isValid = ['localLogin', 'mediaServerLogin'].some(
+ const isValid = ['localLogin', 'mediaServerLogin', 'oidcLogin'].some(
(field) => !!values[field]
);
if (isValid) return true;
return this.createError({
- path: 'localLogin | mediaServerLogin',
+ path: 'localLogin | mediaServerLogin | oidcLogin',
message: intl.formatMessage(messages.atLeastOneAuth),
});
},
@@ -106,6 +113,7 @@ const SettingsUsers = () => {
initialValues={{
localLogin: data?.localLogin,
mediaServerLogin: data?.mediaServerLogin,
+ oidcLogin: data?.oidcLogin,
newPlexLogin: data?.newPlexLogin,
movieQuotaLimit: data?.defaultQuotas.movie.quotaLimit ?? 0,
movieQuotaDays: data?.defaultQuotas.movie.quotaDays ?? 7,
@@ -120,6 +128,7 @@ const SettingsUsers = () => {
await axios.post('/api/v1/settings/main', {
localLogin: values.localLogin,
mediaServerLogin: values.mediaServerLogin,
+ oidcLogin: values.oidcLogin,
newPlexLogin: values.newPlexLogin,
defaultQuotas: {
movie: {
@@ -163,16 +172,21 @@ const SettingsUsers = () => {
{intl.formatMessage(messages.loginMethodsTip)}
- {'localLogin | mediaServerLogin' in errors && (
+ {'localLogin | mediaServerLogin | oidcLogin' in
+ errors && (
- {errors['localLogin | mediaServerLogin'] as string}
+ {
+ errors[
+ 'localLogin | mediaServerLogin | oidcLogin'
+ ] as string
+ }
)}
+ ))
) : (
<>
({
diff --git a/src/i18n/locale/ar.json b/src/i18n/locale/ar.json
index d7466351b0..957351c31d 100644
--- a/src/i18n/locale/ar.json
+++ b/src/i18n/locale/ar.json
@@ -371,19 +371,7 @@
"components.Settings.Notifications.NotificationsGotify.validationTypes": "يجب عليك إختيار نوع تنبيه واحد على الأقل",
"components.Settings.Notifications.NotificationsGotify.toastGotifyTestSuccess": "تم إرسال تنبيه تجريبي لقونتفاي!",
"components.Settings.Notifications.NotificationsGotify.validationUrlRequired": "يجب عليك كتابة رابط صحيح",
- "components.Settings.Notifications.NotificationsLunaSea.settingsSaved": "تم حفظ اعدادات تنبيه لوناسي بنجاح!",
"components.Settings.Notifications.NotificationsGotify.validationUrlTrailingSlash": "الرابط يجب أن لا ينتهي بعلامة السلاش /",
- "components.Settings.Notifications.NotificationsLunaSea.agentenabled": "تفعيل الخدمة",
- "components.Settings.Notifications.NotificationsLunaSea.profileName": "إسم ملف التعريف",
- "components.Settings.Notifications.NotificationsLunaSea.profileNameTip": "مطلوب فقط في حالة عدم إستخدام ملف التعريف الإفتراضي default",
- "components.Settings.Notifications.NotificationsLunaSea.settingsFailed": "فشل في حفظ اعدادات تنبيه تطبيق لونا سي.",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestFailed": "فشل في ارسال التنبيه التجريبي الى لوناسي.",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSending": "جاري إرسال تنبيه تجريبي الى لوناسي…",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSuccess": "تم ارسال التنبيه!",
- "components.Settings.Notifications.NotificationsLunaSea.validationTypes": "يجب عليك اختيار نوع تنبيه واحد على الاقل",
- "components.Settings.Notifications.NotificationsLunaSea.validationWebhookUrl": "يجب عليك تزويد رابط صحيح",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrl": "رابط webhook",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrlTip": "رابط المستخدم أو الجهاز notification webhook URL",
"components.Settings.Notifications.NotificationsPushbullet.accessToken": "مفتاح الدخول Token",
"components.Settings.Notifications.NotificationsWebPush.toastWebPushTestSending": "جاري ارسال التنبيه…",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestFailed": "فشل إرسال تنبيه تجريبي Pushbullet.",
@@ -701,7 +689,6 @@
"components.Settings.address": "العناوين",
"components.Settings.addsonarr": "إضافة سيرفر سونار",
"components.Settings.cancelscan": "إلغاء الفحص",
- "components.Settings.copied": "نسخ مفتاح الـ API.",
"components.Settings.currentlibrary": "المكتبة الحالية: {name}",
"components.Settings.default": "الإفتراضي",
"components.Settings.default4k": "فور كي الإفتراضي",
@@ -791,7 +778,6 @@
"components.UserProfile.UserSettings.UserNotificationSettings.pushoverApplicationTokenTip": "تسجيل تطبيق application للإستخدام مع {applicationTitle}",
"i18n.approve": "موافقة",
"components.UserProfile.UserSettings.UserNotificationSettings.validationPgpPublicKey": "يجب ذكر مفتاح عام PGP صحيح",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingsfailed": "فشل حفظ إعدادات تنبيه web Push.",
"components.UserProfile.UserSettings.UserPasswordChange.newpassword": "كلمة سر جديد",
"components.UserProfile.UserSettings.UserPermissions.unauthorizedDescription": "لا تستطيع تعديل صلاحياتك المُعطاة.",
"components.UserProfile.UserSettings.UserPasswordChange.noPasswordSet": "حساب هذا المستخدم بدون كلمة سر حاليا. قم بإعداد كلمة سر بالإسفل لإتاحة هذا الحساب من تسجيل الدخول \"كمستخدم محلي.\"",
@@ -908,7 +894,6 @@
"components.UserProfile.UserSettings.UserNotificationSettings.validationPushoverUserKey": "يجب ذكر مفتاح مستخدم او مجموعة صحيح",
"components.UserProfile.UserSettings.UserNotificationSettings.validationTelegramChatId": "يجب ذكر رقم هوية محادثة صحيحة",
"components.UserProfile.UserSettings.UserNotificationSettings.webpush": "ويب بوش Web Push",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingssaved": "تم حفظ إعدادات تنبيه Web Push بنجاح!",
"components.UserProfile.UserSettings.UserPasswordChange.confirmpassword": "تأكيد كلمة السر",
"components.UserProfile.UserSettings.UserPasswordChange.currentpassword": "كلمة السر الحالية",
"components.UserProfile.UserSettings.UserPasswordChange.noPasswordSetOwnAccount": "حسابك حاليا بدون كلمة سر. قم بإعداد كلمة سر بالأسفل لإتاحة تسجيل الدخول كـ\"مستخدم محلي\" بإستخدام البريد الإلكتروني.",
diff --git a/src/i18n/locale/bg.json b/src/i18n/locale/bg.json
index c4282365e0..7225202502 100644
--- a/src/i18n/locale/bg.json
+++ b/src/i18n/locale/bg.json
@@ -199,7 +199,7 @@
"components.Settings.Notifications.encryptionOpportunisticTls": "Винаги използвайте STARTTLS",
"components.Discover.FilterSlideover.ratingText": "Оценки между {minValue} и {maxValue}",
"components.PermissionEdit.autoapproveSeries": "Автоматично одобряване на сериали",
- "components.RequestButton.approverequests": "Одобряване {requestCount, plural, one {заявка} other {{requestCount} заявки}}",
+ "components.RequestButton.approverequests": "Одобри {requestCount, plural, one {заявка} other {{requestCount} заявки}}",
"components.PersonDetails.crewmember": "Екип",
"components.RequestButton.requestmore4k": "Заявете повече в 4К",
"components.PersonDetails.ascharacter": "като {character}",
@@ -239,7 +239,6 @@
"components.ManageSlideOver.manageModalRequests": "Заявки",
"components.NotificationTypeSelector.issuecreatedDescription": "Изпращайте известия при докладване на проблеми.",
"components.NotificationTypeSelector.mediaavailableDescription": "Изпращайте известия, когато медийните заявки станат налични.",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrlTip": "Вашият базиран на потребител или устройство URL адрес за webhook за известия",
"components.RequestModal.requestmovie4ktitle": "Заявете филм в 4K",
"components.RequestModal.requestSuccess": "{title} е заявен успешно!",
"components.Settings.Notifications.webhookUrlTip": "Създайте интегриране на webhook във вашия сървър",
@@ -263,9 +262,7 @@
"components.Discover.resetsuccess": "Успешно нулиране на настройките за персонализиране на откриването.",
"components.Settings.RadarrModal.minimumAvailability": "Минимална наличност",
"components.Settings.Notifications.agentenabled": "Активиране на агент",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestFailed": "Неуспешно изпращане на тестово известие към LunaSea.",
"components.Settings.SettingsAbout.Releases.releases": "Издания",
- "components.Settings.Notifications.NotificationsLunaSea.agentenabled": "Активиране на агент",
"components.Settings.RadarrModal.validationApiKeyRequired": "Трябва да предоставите API ключ",
"components.Settings.RadarrModal.validationMinimumAvailabilityRequired": "Трябва да изберете минимална наличност",
"components.RequestModal.requestseasons": "Заявете {seasonCount} {seasonCount, plural, one {сезон} other {сезони}}",
@@ -296,7 +293,6 @@
"components.NotificationTypeSelector.issuecomment": "Коментар на проблема",
"components.RequestBlock.seasons": "{seasonCount, plural, one {Сезон} other {Сезони}}",
"components.Settings.RadarrModal.selectMinimumAvailability": "Изберете минимална наличност",
- "components.Settings.Notifications.NotificationsLunaSea.settingsSaved": "Настройките за известяване към LunaSea са запазени успешно!",
"components.Selector.showmore": "Покажи повече",
"components.Settings.RadarrModal.selectRootFolder": "Изберете главна папка",
"components.RequestList.RequestItem.modifieduserdate": "{date} от {user}",
@@ -309,12 +305,11 @@
"components.PermissionEdit.autoapproveMoviesDescription": "Гарантирано автоматично одобрение за заявки за не-4K филми.",
"components.Settings.Notifications.NotificationsPushover.validationUserTokenRequired": "Трябва да предоставите валиден потребителски или групов ключ",
"components.Settings.SettingsAbout.Releases.versionChangelog": "{version} Дневник на промените",
- "components.Settings.Notifications.NotificationsLunaSea.profileNameTip": "Изисква се само ако не използвате профила по подразбиране",
"components.ManageSlideOver.manageModalMedia": "Медия",
"components.NotificationTypeSelector.issueresolved": "Проблемът е решен",
"components.MovieDetails.originaltitle": "Оригинално заглавие",
"components.Discover.trending": "Тендеция",
- "components.RequestButton.declinerequests": "Decline {requestCount, plural, one {Заявка} other {{requestCount} Заявки}}",
+ "components.RequestButton.declinerequests": "Отхвърли {requestCount, plural, one {заявка} other {{requestCount} заявки}}",
"components.Settings.Notifications.NotificationsPushbullet.accessTokenTip": "Създайте токен от вашите Настройки на акаунта",
"components.MovieDetails.rtcriticsscore": "Rotten Tomatoes Tomatometer",
"components.PermissionEdit.requestMoviesDescription": "Дайте разрешение за изпращане на заявки за не-4K филми.",
@@ -330,7 +325,6 @@
"components.RequestModal.selectmovies": "Изберете филм(и)",
"components.RequestModal.requestApproved": "Заявката за {title} е одобрена!",
"components.Settings.RadarrModal.testFirstQualityProfiles": "Тествайте връзката, за да заредите профилите за качество",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSending": "Изпраща се тестово известие към LunaSea…",
"components.QuotaSelector.unlimited": "Неограничен",
"components.ResetPassword.validationpasswordminchars": "Паролата е твърде кратка; трябва да съдържа минимум 8 знака",
"components.Settings.RadarrModal.syncEnabled": "Активирайте сканирането",
@@ -344,7 +338,6 @@
"components.RequestBlock.profilechanged": "Профил качество",
"components.Settings.RadarrModal.create4kradarr": "Добавяне на нов 4K Radarr сървър",
"components.Settings.Notifications.senderName": "Име на изпращача",
- "components.Settings.Notifications.NotificationsLunaSea.validationWebhookUrl": "Трябва да предоставите валиден URL адрес",
"components.PermissionEdit.autoapprove4kMovies": "Автоматично одобряване на 4К филми",
"components.ManageSlideOver.playedby": "Изигран от",
"components.Settings.RadarrModal.default4kserver": "4K сървър по подразбиране",
@@ -360,13 +353,11 @@
"components.Settings.Notifications.NotificationsWebPush.httpsRequirement": "За да получава уеб насочени известия, Overseerr трябва да се работи през HTTPS.",
"components.MovieDetails.cast": "В ролите",
"components.PermissionEdit.viewissues": "Преглед на проблемите",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrl": "Webhook URL",
"components.NotificationTypeSelector.mediaautorequestedDescription": "Получавайте известия, когато автоматично се изпращат заявки за елементи от вашия списък за гледане в Plex.",
"components.Discover.MovieGenreSlider.moviegenres": "Филмови жанрове",
"components.PermissionEdit.viewrecent": "Преглед на наскоро добавените",
"components.Discover.networks": "Мрежи",
"components.Settings.Notifications.NotificationsGotify.validationUrlTrailingSlash": "URL адресът не трябва да завършва с наклонена черта в края",
- "components.Settings.Notifications.NotificationsLunaSea.validationTypes": "Трябва да изберете поне един тип известие",
"components.MovieDetails.budget": "Бюджет",
"components.RequestList.showallrequests": "Покажи всички заявки",
"components.Settings.Notifications.validationTypes": "Трябва да изберете поне един тип известие",
@@ -375,7 +366,6 @@
"components.PermissionEdit.autoapprove4kDescription": "Гарантирано автоматично одобрение за заявки за 4K медии.",
"components.RequestModal.requestmovies": "Заявка {count} {count, plural, one {филм} other {филми}}",
"components.Settings.Notifications.validationSmtpHostRequired": "Трябва да предоставите валидно име на хост или IP адрес",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSuccess": "Известието за тест към LunaSea е изпратено!",
"components.RequestModal.requestedited": "Заявката за {title} е редактирана успешно!",
"components.Discover.TvGenreSlider.tvgenres": "Жанрове сериали",
"components.RequestModal.selectseason": "Изберете сезон(и)",
@@ -459,9 +449,8 @@
"components.Settings.Notifications.pgpPasswordTip": "Подписвайте шифровани имейл съобщения с помощта на OpenPGP",
"components.RequestList.RequestItem.failedretry": "Нещо се обърка при повторен опит за заявка.",
"components.MovieDetails.imdbuserscore": "IMDB потребителска оценка",
- "components.RequestButton.decline4krequests": "Отхвърляне {requestCount, plural, one {заявка} other {{requestCount} заявки}}",
+ "components.RequestButton.decline4krequests": "Отхвърли {requestCount, plural, one {4K заявка} other {{requestCount} 4K заявки}}",
"components.RequestButton.declinerequest4k": "Отказ на 4К заявка",
- "components.Settings.Notifications.NotificationsLunaSea.profileName": "Профилно име",
"components.Settings.Notifications.NotificationsGotify.url": "URL адрес на сървъра",
"components.Settings.Notifications.NotificationsPushbullet.validationTypes": "Трябва да изберете поне един тип известие",
"components.NotificationTypeSelector.mediarequestedDescription": "Изпращайте известия, когато потребителите изпращат нови медийни заявки, които изискват одобрение.",
@@ -470,7 +459,6 @@
"components.ManageSlideOver.manageModalClearMediaWarning": "* Това ще премахне необратимо всички данни за този {mediaType}, включително всички заявки. Ако този елемент съществува във вашата Plex библиотека, медийната информация ще бъде отново създадена по време на следващото сканиране.",
"components.Settings.Notifications.encryptionDefault": "Използвайте STARTTLS, ако има такъв",
"components.Settings.SettingsAbout.uptodate": "Актуално",
- "components.Settings.Notifications.NotificationsLunaSea.settingsFailed": "Настройките за известяване на LunaSea не успяха да бъдат запазени.",
"components.Settings.Notifications.pgpPassword": "PGP Парола",
"components.RequestModal.QuotaDisplay.requiredquotaUser": "Този потребител трябва да има най-малко {seasons} {seasons, plural, one {заявка за сезон} other {заявки за сезони}} оставащи, за да изпрати заявка за този сериал.",
"components.Settings.Notifications.NotificationsWebhook.authheader": "Хедър за удостоверяване",
@@ -482,7 +470,7 @@
"components.Settings.SettingsAbout.totalmedia": "Общо медия",
"components.RegionSelector.regionServerDefault": "По подразбиране ({region})",
"components.PermissionEdit.request4kMovies": "Заявка за 4K филми",
- "components.RequestButton.approve4krequests": "Одобрете {requestCount, plural, one {4K заявка} other {{requestCount} 4K Заявки}}",
+ "components.RequestButton.approve4krequests": "Одобри {requestCount, plural, one {4K заявка} other {{requestCount} 4K Заявки}}",
"components.Discover.FilterSlideover.releaseDate": "Дата на излизане",
"components.Settings.Notifications.webhookUrl": "Webhook URL",
"components.RequestModal.errorediting": "Нещо се обърка при редактирането на заявката.",
@@ -745,7 +733,7 @@
"components.StatusChecker.reloadApp": "Презареди {applicationTitle}",
"components.Settings.toastTautulliSettingsSuccess": "Tautulli настройките са запазени успешно!",
"components.Settings.default4k": "По подразбиране 4К",
- "components.Settings.SettingsJobsCache.editJobScheduleSelectorMinutes": "Всяка {jobScheduleMinutes, plural, one {минута} other {{jobScheduleMinutes} минути}}",
+ "components.Settings.SettingsJobsCache.editJobScheduleSelectorMinutes": "На всяка {jobScheduleMinutes, plural, one {минута} other {{jobScheduleMinutes} минути}}",
"components.Settings.SettingsJobsCache.imagecachesize": "Общ размер на кеша",
"components.Settings.SonarrModal.validationLanguageProfileRequired": "Трябва да изберете езиков профил",
"components.Settings.SonarrModal.loadingTags": "Етикетите се зареждат…",
@@ -828,12 +816,10 @@
"components.UserProfile.UserSettings.UserNotificationSettings.pushoverApplicationToken": "Токън за API към приложение",
"components.UserProfile.UserSettings.UserGeneralSettings.validationDiscordId": "Трябва да предоставите валиден потребителски идентификатор (User ID) в Discord",
"i18n.importing": "Импортиране.…",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingsfailed": "Настройките за известяване чрез Web push не успяха да бъдат запазени.",
"components.UserProfile.UserSettings.UserGeneralSettings.plexwatchlistsyncseries": "Автоматична заявка на сериали",
"components.UserList.create": "Създавайте",
"i18n.restartRequired": "Изисква се рестартиране",
"components.Settings.tautulliSettingsDescription": "По желание конфигурирайте настройките за вашия сървър Tautulli. Overseerr извлича данни от хронологията на гледане за вашата Plex медия от Tautulli.",
- "components.Settings.copied": "Копиран API ключ в клипборда.",
"i18n.request": "Заявка",
"components.Settings.validationApiKey": "Трябва да предоставите API ключ",
"components.Settings.SonarrModal.editsonarr": "Редактирай Sonarr сървър",
@@ -1069,7 +1055,7 @@
"components.UserProfile.UserSettings.UserGeneralSettings.admin": "Админ",
"components.UserList.userlist": "Списък с потребители",
"components.UserProfile.limit": "{remaining} от {limit}",
- "components.Settings.SettingsJobsCache.editJobScheduleSelectorSeconds": "Всяка {jobScheduleSeconds, plural, one {секунда} other {{jobScheduleSeconds} секунди}}",
+ "components.Settings.SettingsJobsCache.editJobScheduleSelectorSeconds": "На всяка {jobScheduleSeconds, plural, one {секунда} other {{jobScheduleSeconds} секунда}}",
"components.Settings.deleteserverconfirm": "Сигурни ли сте, че искате да изтриете този сървър?",
"components.UserProfile.UserSettings.UserGeneralSettings.applanguage": "Език на дисплея",
"components.TvDetails.watchtrailer": "Гледайте трейлър",
@@ -1157,7 +1143,7 @@
"components.UserList.plexuser": "Plex потребител",
"components.UserProfile.plexwatchlist": "Plex списък за гледане",
"components.TvDetails.streamingproviders": "В момента се излъчва по",
- "components.Settings.SettingsJobsCache.editJobScheduleSelectorHours": "Всеки {jobScheduleHours, plural, one {час} other {{jobScheduleHours} часа}}",
+ "components.Settings.SettingsJobsCache.editJobScheduleSelectorHours": "На всеки {jobScheduleHours, plural, one {час} other {{jobScheduleHours} часа}}",
"components.TvDetails.originaltitle": "Оригинално заглавие",
"components.Settings.noDefault4kServer": "4K {serverType} сървър трябва да бъде маркиран като стандартен, за да може потребителите да изпращат 4K {mediaType} заявки.",
"components.Settings.SettingsUsers.tvRequestLimitLabel": "Глобален лимит за заявка на сериали",
@@ -1165,7 +1151,6 @@
"components.UserProfile.UserSettings.UserGeneralSettings.languageDefault": "По подразбиране ({language})",
"components.Settings.validationUrlBaseTrailingSlash": "URL адресът не трябва да завършва с наклонена черта в края",
"components.Settings.SettingsJobsCache.imagecacheDescription": "Когато е активиран в настройките, Overseerr ще бъде прокси и ще кешира изображения от предварително конфигурирани външни източници. Кешираните изображения се записват във вашата конфигурационна папка. Можете да намерите файловете в {appDataPath}/cache/images.",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingssaved": "Настройките за известяване чрез Web push са запазени успешно!",
"components.UserProfile.UserSettings.UserNotificationSettings.pgpPublicKey": "PGP публичен ключ",
"components.TitleCard.cleardata": "Изчистване на данните",
"components.UserProfile.UserSettings.UserPasswordChange.nopermissionDescription": "Нямате права, за да промените паролата на този потребител.",
@@ -1245,7 +1230,6 @@
"components.Login.validationemailformat": "Изисква се валиден имейл адрес",
"components.Login.username": "Потребителско име",
"components.Login.validationhostformat": "Изисква се валиден URL адрес",
- "components.Login.validationHostnameRequired": "Трябва да въведете валидно име на хост или IP адрес",
"components.Login.validationUrlBaseTrailingSlash": "Базовият URL адрес не трябва да завършва с наклонена черта",
"components.Login.validationhostrequired": "Изисква се {mediaServerName} URL адрес",
"components.Login.description": "Тъй като това е първото Ви влизане в {applicationName}, трябва да добавите валиден имейл адрес.",
@@ -1270,5 +1254,95 @@
"components.Login.validationUrlTrailingSlash": "URL адресът не трябва да завършва с наклонена черта",
"components.Login.validationservertyperequired": "Моля изберете тип на сървъра",
"components.Login.validationusernamerequired": "Изисква се потребителско име",
- "components.Login.saving": "Добавяне…"
+ "components.Login.saving": "Добавяне…",
+ "components.MovieDetails.openradarr": "Отвори филма в Radarr",
+ "components.Settings.OverrideRuleModal.qualityprofile": "Профил за качество",
+ "components.Settings.SettingsNetwork.csrfProtectionHoverTip": "НЕ активирайте тази настройка освен ако не знаете какво правите!",
+ "components.MovieDetails.play": "Пусни на {mediaServerName}",
+ "components.MovieDetails.watchlistDeleted": "{title} Успешно премахнат от листата за гледане!",
+ "components.Selector.canceled": "Отказано",
+ "components.Selector.searchUsers": "Избери потребители…",
+ "components.Settings.OverrideRuleModal.serviceDescription": "Приложи това правило за избраната услуга.",
+ "components.Settings.SettingsNetwork.toastSettingsFailure": "Нещо се обърка докато запаметявахте настройките.",
+ "components.Settings.SettingsJobsCache.usersavatars": "Потребителски аватари",
+ "components.Settings.apiKey": "API ключ",
+ "components.Settings.SettingsNetwork.proxyBypassFilter": "Игнорирани прокси адреси",
+ "components.MovieDetails.addtowatchlist": "Добави към листата за гледане",
+ "components.PermissionEdit.blacklistedItems": "Черен списък за медия.",
+ "components.Settings.OverrideRuleModal.genres": "Жанрове",
+ "components.ManageSlideOver.removearr": "Премахни от {arr}",
+ "components.ManageSlideOver.removearr4k": "Премахни от 4К {arr}",
+ "components.MovieDetails.downloadstatus": "Статус на сваляне",
+ "components.MovieDetails.openradarr4k": "Отвори филма в 4К Radarr",
+ "components.MovieDetails.play4k": "Пусни 4К на {mediaServerName}",
+ "components.MovieDetails.removefromwatchlist": "Премахни от листата за гледане",
+ "components.MovieDetails.watchlistError": "Нещо се обърка.Моля опитайте отново.",
+ "components.MovieDetails.watchlistSuccess": "{title} Успешно добавен към листата за гледане!",
+ "components.RequestList.RequestItem.profileName": "Профил",
+ "components.RequestList.RequestItem.removearr": "Премахване от {arr}",
+ "components.Selector.inProduction": "В продукция",
+ "components.Settings.OverrideRuleModal.conditions": "Състояние",
+ "components.Settings.OverrideRuleModal.create": "Създайте правило",
+ "components.Settings.OverrideRuleModal.keywords": "Ключови думи",
+ "components.Settings.OverrideRuleModal.languages": "Езици",
+ "components.Settings.OverrideRuleModal.notagoptions": "Без тагове.",
+ "components.Settings.OverrideRuleModal.selectQualityProfile": "Изберете профил за капество",
+ "components.Settings.OverrideRuleModal.selectService": "Изберете услуга",
+ "components.Settings.OverrideRuleModal.selecttags": "Изберете тагове",
+ "components.Settings.OverrideRuleModal.service": "Услуга",
+ "components.Settings.OverrideRuleModal.settings": "Настройки",
+ "components.Settings.OverrideRuleModal.tags": "Тагове",
+ "components.Settings.OverrideRuleModal.users": "Потребители",
+ "components.Settings.OverrideRuleTile.genre": "Жанр",
+ "components.Settings.OverrideRuleTile.keywords": "Ключови думи",
+ "components.Settings.OverrideRuleTile.language": "Език",
+ "components.Settings.OverrideRuleTile.qualityprofile": "Профил за капество",
+ "components.Settings.OverrideRuleTile.settings": "Настройки",
+ "components.Settings.OverrideRuleTile.tags": "Тагове",
+ "components.Settings.OverrideRuleTile.users": "Потребители",
+ "components.Settings.SettingsJobsCache.jellyfin-full-scan": "Пълно сканиране на библиотеката Jellyfin",
+ "components.Settings.SettingsMain.enableSpecialEpisodes": "Позволи искане за специални епизоди",
+ "components.Settings.SettingsNetwork.docs": "Документация",
+ "components.Settings.SettingsNetwork.network": "Мрежа",
+ "components.Settings.SettingsNetwork.networksettings": "Мрежови настройки",
+ "components.Settings.SettingsNetwork.proxyPassword": "Прокси парола",
+ "components.Settings.SettingsNetwork.proxyPort": "Прокси порт",
+ "components.Settings.SettingsNetwork.proxySsl": "Използвайте SSL за прокси",
+ "components.Settings.SettingsNetwork.proxyUser": "Прокси потребител",
+ "components.Settings.SettingsNetwork.toastSettingsSuccess": "Настройките са запаметени успешно!",
+ "components.Settings.SettingsNetwork.trustProxy": "Активирай прокси поддръжка",
+ "components.Settings.SettingsNetwork.validationProxyPort": "Трябва да предоставите валиден порт",
+ "components.Settings.SettingsUsers.loginMethods": "Метод за влизане",
+ "components.Settings.SettingsUsers.loginMethodsTip": "Настройте методи за влизане напотребителите",
+ "components.Settings.SettingsUsers.mediaServerLoginTip": "Позволи на потребителите да се вписват с техния {mediaServerName} акаунт",
+ "components.Settings.Notifications.userEmailRequired": "Изисква потребителски е-майл",
+ "components.Settings.SettingsAbout.supportjellyseerr": "Поддръжка Jellyseerr",
+ "components.Settings.jellyfinSettings": "{mediaServerName} Настройки",
+ "components.Settings.jellyfinSettingsFailure": "Нещо се обърка докато запаметявахте {mediaServerName} настройките.",
+ "components.Settings.jellyfinSettingsSuccess": "{mediaServerName} настройките са запазени успешно!",
+ "components.UserProfile.UserSettings.UserGeneralSettings.toastSettingsFailureEmailEmpty": "Друг потребител вече използва това потребителско име. Трябва да въведете е-майл",
+ "components.UserProfile.UserSettings.LinkJellyfinModal.errorExists": "Този акаунт вече е свързан с {applicationName} потребител",
+ "components.TvDetails.removefromwatchlist": "Премахни от листата за гледане",
+ "components.UserList.validationUsername": "Трябва да предоставите потребителско име",
+ "components.UserProfile.UserSettings.LinkJellyfinModal.usernameRequired": "Трябва да предоставите потребителско име",
+ "components.UserProfile.UserSettings.menuLinkedAccounts": "Свързани акаунти",
+ "i18n.addToBlacklist": "Добави в черният списък",
+ "components.UserProfile.UserSettings.UserGeneralSettings.toastSettingsFailureEmail": "Този е-майл вече се използва!",
+ "components.UserProfile.localWatchlist": "Списък за гледане на {username}",
+ "components.UserProfile.UserSettings.LinkJellyfinModal.errorUnknown": "Появи се непозната грешка",
+ "components.UserProfile.UserSettings.LinkJellyfinModal.password": "Парола",
+ "components.UserProfile.UserSettings.LinkJellyfinModal.passwordRequired": "Трябва да предоставите парола",
+ "components.UserProfile.UserSettings.LinkJellyfinModal.saving": "Добавяне…",
+ "components.UserProfile.UserSettings.LinkJellyfinModal.username": "Потребителско име",
+ "components.UserProfile.UserSettings.UserGeneralSettings.email": "Е-майл",
+ "components.UserProfile.UserSettings.UserGeneralSettings.mediaServerUser": "{mediaServerName} Потребител",
+ "components.UserProfile.UserSettings.UserGeneralSettings.save": "Запамети промените",
+ "components.UserProfile.UserSettings.UserGeneralSettings.saving": "Запазване…",
+ "components.UserProfile.UserSettings.UserLinkedAccountsSettings.errorUnknown": "Появи се непозната грешка",
+ "components.UserProfile.UserSettings.UserLinkedAccountsSettings.linkedAccounts": "Свързани акаунти",
+ "i18n.blacklist": "Черен списък",
+ "i18n.blacklistError": "Нещо се обърка. Моля опитайте отново.",
+ "i18n.removeFromBlacklistSuccess": "{title} е успешно премахнат от Черния списък.",
+ "i18n.removefromBlacklist": "Премахни ит Черния списък",
+ "i18n.specials": "Специални"
}
diff --git a/src/i18n/locale/ca.json b/src/i18n/locale/ca.json
index b0ec1fb98c..223f38b878 100644
--- a/src/i18n/locale/ca.json
+++ b/src/i18n/locale/ca.json
@@ -463,7 +463,6 @@
"components.Settings.email": "Adreça electrònica",
"components.Settings.default4k": "4K predeterminat",
"components.Settings.default": "Predeterminat",
- "components.Settings.copied": "S'ha copiat la clau API al porta-retalls.",
"components.Settings.address": "Adreça",
"components.Settings.addradarr": "Afegeix un servidor Radarr",
"components.Settings.SonarrModal.validationRootFolderRequired": "Heu de seleccionar una carpeta arrel",
@@ -712,11 +711,7 @@
"components.RequestList.RequestItem.editrequest": "Edita la sol·licitud",
"components.UserProfile.UserSettings.UserGeneralSettings.languageDefault": "Predeterminat ({language})",
"components.Settings.Notifications.toastTelegramTestFailed": "No s'ha pogut enviar la notificació de prova de Telegram.",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestFailed": "No s'ha pogut enviar la notificació de prova de LunaSea.",
- "components.Settings.Notifications.NotificationsLunaSea.settingsFailed": "No s'ha pogut desar la configuració de notificacions de LunaSea.",
"components.DownloadBlock.estimatedtime": "{time} de temps estimat",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingssaved": "La configuració de notificacions de Push Web s'ha desat correctament!",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingsfailed": "No s'ha pogut desar la configuració de notificacions de Push Web.",
"components.UserProfile.UserSettings.UserNotificationSettings.webpush": "Web Push",
"components.UserProfile.UserSettings.UserGeneralSettings.applanguage": "Idioma de visualització",
"components.Settings.webpush": "Web Push",
@@ -750,19 +745,10 @@
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestSuccess": "S'ha enviat la notificació de prova Pushbullet!",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestSending": "S'està enviant la notificació de prova de Pushbullet…",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestFailed": "No s'ha pogut enviar la notificació de prova Pushbullet.",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrl": "URL del Webhook",
- "components.Settings.Notifications.NotificationsLunaSea.validationWebhookUrl": "Has de proporcionar un URL vàlid",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSuccess": "S'ha enviat la notificació de prova de LunaSea!",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSending": "S'està enviant la notificació de prova de LunaSea…",
- "components.Settings.Notifications.NotificationsLunaSea.settingsSaved": "La configuració de les notificacions de LunaSea s'ha desat correctament!",
- "components.Settings.Notifications.NotificationsLunaSea.profileNameTip": "Només és necessari si no s'utilitza el perfil default",
- "components.Settings.Notifications.NotificationsLunaSea.profileName": "Nom de perfil",
- "components.Settings.Notifications.NotificationsLunaSea.agentenabled": "Activa l'agent",
"components.PermissionEdit.requestTvDescription": "Concedeix permís per sol·licitar sèries no 4K.",
"components.PermissionEdit.requestTv": "Sol·licita sèries",
"components.PermissionEdit.requestMoviesDescription": "Concedeix permís per sol·licitar pel·lícules no 4K.",
"components.PermissionEdit.requestMovies": "Sol·liciteu pel·lícules",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrlTip": "El vostre URL del webhook de notificació basat en l'usuari o el dispositiu",
"components.UserList.localLoginDisabled": "El paràmetre Activa l'inici de sessió local està desactivat actualment.",
"components.Settings.webAppUrlTip": "Opcionalment, dirigiu els usuaris a l'aplicació web del vostre servidor en lloc de l'aplicació web \"allotjada\"",
"components.Settings.webAppUrl": "URL de l'aplicació web",
@@ -790,7 +776,6 @@
"components.Settings.Notifications.NotificationsSlack.validationTypes": "Heu de seleccionar com a mínim un tipus de notificació",
"components.Settings.Notifications.NotificationsPushover.validationTypes": "Heu de seleccionar com a mínim un tipus de notificació",
"components.Settings.Notifications.NotificationsPushbullet.validationTypes": "Heu de seleccionar com a mínim un tipus de notificació",
- "components.Settings.Notifications.NotificationsLunaSea.validationTypes": "Heu de seleccionar com a mínim un tipus de notificació",
"components.QuotaSelector.tvRequests": "{quotaLimit} {temporades} per {quotaDays} {dies}",
"components.QuotaSelector.seasons": "{count, plural, one {temporada} other {temporades}}",
"components.QuotaSelector.movies": "{count, plural, one {pel·lícula} other {pel·lícules}}",
diff --git a/src/i18n/locale/cs.json b/src/i18n/locale/cs.json
index b54459d5ee..efe0f7eb47 100644
--- a/src/i18n/locale/cs.json
+++ b/src/i18n/locale/cs.json
@@ -79,9 +79,6 @@
"components.Settings.Notifications.NotificationsPushover.agentenabled": "Povolit agenta",
"components.Settings.Notifications.NotificationsPushbullet.agentEnabled": "Povolit agenta",
"components.Settings.Notifications.NotificationsPushbullet.accessToken": "Přístupový token",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrl": "Webhook URL",
- "components.Settings.Notifications.NotificationsLunaSea.profileName": "Jméno profilu",
- "components.Settings.Notifications.NotificationsLunaSea.agentenabled": "Povolit agenta",
"components.Search.searchresults": "Výsledky vyhledávání",
"components.ResetPassword.passwordreset": "Obnovení hesla",
"components.ResetPassword.email": "E-mailová adresa",
@@ -597,11 +594,9 @@
"components.Settings.Notifications.NotificationsGotify.toastGotifyTestSuccess": "Oznámení o testu Gotify odesláno!",
"components.Settings.Notifications.NotificationsGotify.validationUrlTrailingSlash": "Adresa URL nesmí končit koncovým lomítkem",
"components.Settings.Notifications.NotificationsGotify.validationTypes": "Musíte vybrat alespoň jeden typ oznámení",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSuccess": "Oznámení o testu LunaSea odesláno!",
"components.Settings.Notifications.NotificationsGotify.validationUrlRequired": "Musíte zadat platnou adresu URL",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestSuccess": "Testovací oznámení Pushbullet odesláno!",
"components.Settings.Notifications.NotificationsPushbullet.validationAccessTokenRequired": "Musíte zadat přístupový token",
- "components.Settings.Notifications.NotificationsLunaSea.validationTypes": "Musíte vybrat alespoň jeden typ oznámení",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestSending": "Odeslání testovacího oznámení Pushbullet…",
"components.Settings.RadarrModal.validationApplicationUrl": "Musíte zadat platnou adresu URL",
"components.Settings.RadarrModal.validationApplicationUrlTrailingSlash": "Adresa URL nesmí končit koncovým lomítkem",
@@ -702,7 +697,6 @@
"components.RequestModal.QuotaDisplay.requiredquota": "Abyste mohli zažádat o tento seriál, musíte mít alespoň {seasons} {seasons, plural, one {zbývající žádost o sezónu} few {zbývající žádosti o sezónu} other {zbývajících žádostí o sezónu}}.",
"components.RequestModal.requestfrom": "Žádost od {username} čeká na schválení.",
"components.RequestModal.requesterror": "Při odesílání žádosti se něco pokazilo.",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrlTip": "Vaše adresa URL notification webhook pro uživatele nebo zařízení",
"components.Settings.Notifications.toastEmailTestSuccess": "E-mailové oznámení o testu odesláno!",
"components.Settings.RadarrModal.baseUrl": "Základní adresa URL",
"components.Settings.RadarrModal.default4kserver": "Výchozí server 4K",
@@ -731,8 +725,6 @@
"components.RequestBlock.languageprofile": "Jazykový profil",
"components.RequestModal.QuotaDisplay.quotaLinkUser": "Souhrn limitů požadavků tohoto uživatele můžete zobrazit na jeho profilové stránce.",
"components.Settings.Notifications.NotificationsGotify.token": "Token aplikace",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestFailed": "Testovací oznámení LunaSea se nepodařilo odeslat.",
- "components.Settings.Notifications.NotificationsLunaSea.validationWebhookUrl": "Musíte zadat platnou adresu URL",
"components.Settings.Notifications.NotificationsPushbullet.channelTag": "Označení kanálu",
"components.Settings.Notifications.NotificationsPushbullet.pushbulletSettingsFailed": "Nastavení oznámení Pushbullet se nepodařilo uložit.",
"components.Settings.Notifications.NotificationsPushbullet.validationTypes": "Musíte vybrat alespoň jeden typ oznámení",
@@ -775,7 +767,6 @@
"components.Settings.SonarrModal.validationApplicationUrlTrailingSlash": "Adresa URL nesmí končit koncovým lomítkem",
"components.Settings.addradarr": "Přidání serveru Radarr",
"components.Settings.addsonarr": "Adding a Radarr server",
- "components.Settings.copied": "Zkopírování klíče API do schránky.",
"components.Settings.externalUrl": "Externí adresa URL",
"components.Settings.hostname": "Název hostitele nebo IP adresa",
"components.Settings.manualscan": "Manuální skenování knihovny",
@@ -853,7 +844,6 @@
"components.RequestModal.AdvancedRequester.animenote": "* Tento seriál je anime.",
"components.Settings.Notifications.NotificationsPushover.userToken": "Klíč uživatele nebo skupiny",
"components.RequestCard.failedretry": "Při opakovaném pokusu o zadání požadavku se něco pokazilo.",
- "components.Settings.Notifications.NotificationsLunaSea.profileNameTip": "Vyžaduje se pouze v případě, že nepoužíváte profil default",
"components.RequestCard.mediaerror": "{mediaType} Nenalezeno",
"components.RequestList.RequestItem.mediaerror": "{mediaType} Nenalezeno",
"components.RequestModal.QuotaDisplay.allowedRequests": "Můžete požádat o {limit} {type} každé {days} dny.",
@@ -866,7 +856,6 @@
"components.Settings.SonarrModal.selectRootFolder": "Vyberte kořenovou složku",
"components.ResetPassword.requestresetlinksuccessmessage": "Na zadanou e-mailovou adresu bude zaslán odkaz pro obnovení hesla, pokud je spojena s platným uživatelem.",
"components.RequestModal.pendingrequest": "Čekající žádost",
- "components.Settings.Notifications.NotificationsLunaSea.settingsSaved": "Nastavení oznámení LunaSea úspěšně uloženo!",
"components.Settings.SonarrModal.default4kserver": "Výchozí server 4K",
"components.UserProfile.UserSettings.UserNotificationSettings.pushoverUserKeyTip": "Váš 30znakový identifikátor uživatele nebo skupiny",
"components.UserProfile.UserSettings.UserNotificationSettings.pushoversettingssaved": "Nastavení oznámení Pushover úspěšně uloženo!",
@@ -878,7 +867,6 @@
"components.Settings.Notifications.NotificationsPushover.toastPushoverTestSuccess": "Oznámení o testu Pushover odesláno!",
"components.Settings.Notifications.NotificationsSlack.slacksettingsfailed": "Nastavení oznámení služby Slack se nepodařilo uložit.",
"components.Settings.toastPlexConnectingSuccess": "Připojení k systému Plex úspěšně navázáno!",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSending": "Odeslání oznámení o testu LunaSea…",
"components.Settings.Notifications.NotificationsPushbullet.accessTokenTip": "Vytvořte token ze svého Nastavení účtu",
"components.Settings.Notifications.encryptionTip": "Ve většině případů používá implicitní TLS port 465 a STARTTLS port 587",
"components.Settings.Notifications.toastDiscordTestFailed": "Oznámení o testu Discord se nepodařilo odeslat.",
@@ -887,7 +875,6 @@
"components.TvDetails.firstAirDate": "Datum prvního vysílání",
"components.Settings.RadarrModal.validationApiKeyRequired": "Musíte zadat klíč API",
"components.Settings.toastPlexConnectingFailure": "Nepodařilo se připojit k systému Plex.",
- "components.Settings.Notifications.NotificationsLunaSea.settingsFailed": "Nastavení oznámení LunaSea se nepodařilo uložit.",
"components.Settings.Notifications.NotificationsPushover.accessTokenTip": "Registrace aplikace pro použití s aplikací Jellyseerr",
"components.Settings.Notifications.NotificationsPushover.validationAccessTokenRequired": "Musíte zadat platný token aplikace",
"components.Settings.Notifications.NotificationsPushover.toastPushoverTestFailed": "Testovací oznámení Pushover se nepodařilo odeslat.",
@@ -949,7 +936,6 @@
"components.UserProfile.UserSettings.UserGeneralSettings.validationDiscordId": "Musíte zadat platné ID uživatele služby Discord",
"components.UserProfile.UserSettings.UserNotificationSettings.pgpPublicKey": "Veřejný klíč PGP",
"components.UserProfile.UserSettings.UserNotificationSettings.pgpPublicKeyTip": "Šifrování e-mailových zpráv pomocí OpenPGP",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingssaved": "Nastavení webových oznámení push bylo úspěšně uloženo!",
"components.UserProfile.UserSettings.UserNotificationSettings.discordIdTip": "vícemístné identifikační číslo spojené s vaším uživatelským účtem",
"components.UserProfile.UserSettings.UserNotificationSettings.pushbulletAccessToken": "Přístupový token",
"components.UserProfile.UserSettings.UserNotificationSettings.pushoverUserKey": "Klíč uživatele nebo skupiny",
@@ -958,7 +944,6 @@
"components.UserProfile.UserSettings.UserNotificationSettings.pushoversettingsfailed": "Nastavení oznámení Pushover se nepodařilo uložit.",
"components.UserProfile.UserSettings.UserNotificationSettings.pushoverApplicationTokenTip": "Registrace aplikace pro použití s {applicationTitle}",
"components.UserProfile.UserSettings.UserNotificationSettings.telegramsettingssaved": "Nastavení oznámení Telegramu úspěšně uloženo!",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingsfailed": "Nastavení webových push oznámení se nepodařilo uložit.",
"components.UserProfile.UserSettings.UserPasswordChange.noPasswordSet": "Tento uživatelský účet v současné době nemá nastavené heslo. Níže nastavte heslo, aby se tento účet mohl přihlašovat jako \"místní uživatel.\"",
"components.UserProfile.UserSettings.UserPasswordChange.noPasswordSetOwnAccount": "Váš účet v současné době nemá nastavené heslo. Níže nastavte heslo, abyste se mohli přihlásit jako \"místní uživatel\" pomocí své e-mailové adresy.",
"i18n.importing": "Importování…",
@@ -1250,7 +1235,6 @@
"components.Settings.Notifications.validationWebhookRoleId": "Musíte poskytnout platné ID Discord role",
"components.Blacklist.blacklistedby": "{date} uživatelem {user}",
"components.Layout.UserWarnings.passwordRequired": "Heslo je povinné.",
- "components.Login.validationHostnameRequired": "Musíte poskytnout platné hostitelské jméno nebo IP adresu",
"components.Selector.searchStatus": "Vyberte status…",
"components.TvDetails.watchlistSuccess": "{title} úspěšně přidáno na seznam sledování!",
"components.Blacklist.blacklistNotFoundError": "{title} není na černé listině.",
diff --git a/src/i18n/locale/da.json b/src/i18n/locale/da.json
index 4de9715197..b98474fa80 100644
--- a/src/i18n/locale/da.json
+++ b/src/i18n/locale/da.json
@@ -258,7 +258,6 @@
"components.RegionSelector.regionDefault": "Alle Regioner",
"components.RequestBlock.rootfolder": "Rodmappe",
"components.RequestButton.viewrequest4k": "Vis 4K Forespørgsel",
- "components.Settings.Notifications.NotificationsLunaSea.agentenabled": "Aktivér Agent",
"components.RequestModal.seasonnumber": "Sæson {number}",
"components.NotificationTypeSelector.mediadeclinedDescription": "Send notifikationer når medieforespørgsler afvises.",
"components.Settings.Notifications.NotificationsWebPush.httpsRequirement": "For at kunne modtage web push-notifikationer skal Jellyseerr benytte HTTPS.",
@@ -286,9 +285,6 @@
"components.RequestModal.pending4krequest": "Afventende 4K Forespørgsler",
"components.RequestModal.pendingapproval": "Din forespørgsel afventer godkendelse.",
"components.ResetPassword.resetpasswordsuccessmessage": "Kodeord er nulstillet!",
- "components.Settings.Notifications.NotificationsLunaSea.profileName": "Profilnavn",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSuccess": "LunaSea testnotifikation er afsendt!",
- "components.Settings.Notifications.NotificationsLunaSea.validationTypes": "Du skal vælge mindst én notifikationstype",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestFailed": "Pushbullet testnotifikation kunne ikke sendes.",
"components.Settings.Notifications.NotificationsPushover.accessTokenTip": "Registrér en applikation til brug med Jellyseerr",
"components.Settings.Notifications.NotificationsPushover.pushoversettingssaved": "Pushover notifikationsindstillinger er blevet gemt!",
@@ -334,14 +330,6 @@
"components.ResetPassword.validationpasswordminchars": "Kodeordet er for kort; det skal være mindst 8 tegn",
"components.ResetPassword.validationpasswordrequired": "Du skal angive et kodeord",
"components.Search.search": "Søg",
- "components.Settings.Notifications.NotificationsLunaSea.profileNameTip": "Kun påkrævet hvis du benytter en anden profil end default",
- "components.Settings.Notifications.NotificationsLunaSea.settingsFailed": "LunaSea notifikationsindstillinger kunne ikke gemmes.",
- "components.Settings.Notifications.NotificationsLunaSea.settingsSaved": "LunaSea notifikationsindstillinger er blevet gemt!",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestFailed": "LunaSea testnotifikation kunne ikke afsendes.",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSending": "Sender LunaSea testnotifikation…",
- "components.Settings.Notifications.NotificationsLunaSea.validationWebhookUrl": "Du skal angive en gyldig URL",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrl": "Webhook URL",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrlTip": "Din bruger- eller enhedsbaserede webhook URL for notifikationer",
"components.Settings.Notifications.NotificationsPushbullet.accessToken": "Adgangstoken",
"components.Settings.Notifications.NotificationsPushbullet.accessTokenTip": "Opret en token fra dine Kontoindstillinger",
"components.Settings.Notifications.NotificationsPushbullet.agentEnabled": "Aktivér Agent",
@@ -595,7 +583,6 @@
"components.Settings.SonarrModal.validationRootFolderRequired": "Du skal angive en rodmappe",
"components.Settings.address": "Adresse",
"components.Settings.addsonarr": "Tilføj Sonarr Server",
- "components.Settings.copied": "API-nøgle er kopieret til udklipsholder.",
"components.Settings.currentlibrary": "Nuværende Bibliotek: {name}",
"components.Settings.email": "Email",
"components.Settings.enablessl": "Benyt SSL",
@@ -843,8 +830,6 @@
"components.UserProfile.UserSettings.UserNotificationSettings.validationTelegramChatId": "Du skal angive et gyldigt chat-ID",
"components.UserProfile.UserSettings.UserNotificationSettings.validationDiscordId": "Du skal angive et bruger-ID",
"components.UserProfile.UserSettings.UserNotificationSettings.validationPgpPublicKey": "Du skal angive en gyldig offentlig PGP-nøgle",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingsfailed": "Notifikationsindstillingerne for web push kunne ikke gemmes.",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingssaved": "Notifikationsindstillingerne for web push er blevet gemt!",
"components.UserProfile.UserSettings.UserPasswordChange.confirmpassword": "Bekræft Kodeord",
"components.UserProfile.UserSettings.UserPasswordChange.newpassword": "Nyt Kodeord",
"components.UserProfile.UserSettings.UserPasswordChange.noPasswordSet": "Denne brugerkonto har i øjeblikket ikke et kodeord. Konfigurér et kodeord nedenfor så denne konto kan logge ind som en \"lokal bruger.\"",
diff --git a/src/i18n/locale/de.json b/src/i18n/locale/de.json
index de8587cb66..2b6cc081d9 100644
--- a/src/i18n/locale/de.json
+++ b/src/i18n/locale/de.json
@@ -16,7 +16,7 @@
"components.Discover.DiscoverWatchlist.watchlist": "Plex Merkliste",
"components.Discover.MovieGenreList.moviegenres": "Film-Genres",
"components.Discover.MovieGenreSlider.moviegenres": "Film-Genres",
- "components.Discover.NetworkSlider.networks": "Sender",
+ "components.Discover.NetworkSlider.networks": "Dienste",
"components.Discover.StudioSlider.studios": "Filmstudio",
"components.Discover.TvGenreList.seriesgenres": "Serien-Genres",
"components.Discover.TvGenreSlider.tvgenres": "Serien-Genres",
@@ -28,17 +28,17 @@
"components.Discover.populartv": "Beliebte Serien",
"components.Discover.recentlyAdded": "Kürzlich hinzugefügt",
"components.Discover.recentrequests": "Bisherige Anfragen",
- "components.Discover.trending": "Trends",
+ "components.Discover.trending": "Im Trend",
"components.Discover.upcoming": "Demnächst erscheinende Filme",
"components.Discover.upcomingmovies": "Demnächst erscheinende Filme",
"components.Discover.upcomingtv": "Demnächst erscheinende Serien",
- "components.DownloadBlock.estimatedtime": "Geschätzte {time}",
- "components.DownloadBlock.formattedTitle": "{title}: Staffel {seasonNumber} Episode {episodeNumber}",
+ "components.DownloadBlock.estimatedtime": "Geschätzt {time}",
+ "components.DownloadBlock.formattedTitle": "{title}: Staffel {seasonNumber} Folge {episodeNumber}",
"components.IssueDetails.IssueComment.areyousuredelete": "Soll dieser Kommentar wirklich gelöscht werden?",
"components.IssueDetails.IssueComment.delete": "Kommentar löschen",
"components.IssueDetails.IssueComment.edit": "Kommentar bearbeiten",
- "components.IssueDetails.IssueComment.postedby": "Gepostet {relativeTime} von {username}",
- "components.IssueDetails.IssueComment.postedbyedited": "Gepostet {relativeTime} von {username} (Bearbeitet)",
+ "components.IssueDetails.IssueComment.postedby": "Verfasst {relativeTime} von {username}",
+ "components.IssueDetails.IssueComment.postedbyedited": "Verfasst {relativeTime} von {username} (Bearbeitet)",
"components.IssueDetails.IssueComment.validationComment": "Du musst eine Nachricht eingeben",
"components.IssueDetails.IssueDescription.deleteissue": "Problem löschen",
"components.IssueDetails.IssueDescription.description": "Beschreibung",
@@ -54,9 +54,9 @@
"components.IssueDetails.episode": "Folge {episodeNumber}",
"components.IssueDetails.issuepagetitle": "Problem",
"components.IssueDetails.issuetype": "Art",
- "components.IssueDetails.lastupdated": "Letzte Aktualisierung",
+ "components.IssueDetails.lastupdated": "Letzte Änderung",
"components.IssueDetails.leavecomment": "Kommentar",
- "components.IssueDetails.nocomments": "Keine Kommentare.",
+ "components.IssueDetails.nocomments": "Es gibt keine Kommentare.",
"components.IssueDetails.openedby": "#{issueId} geöffnet {relativeTime} von {username}",
"components.IssueDetails.openin4karr": "In {arr} 4K öffnen",
"components.IssueDetails.openinarr": "In {arr} öffnen",
@@ -71,8 +71,8 @@
"components.IssueDetails.toasteditdescriptionsuccess": "Problembeschreibung erfolgreich bearbeitet!",
"components.IssueDetails.toastissuedeleted": "Problem erfolgreich gelöscht!",
"components.IssueDetails.toastissuedeletefailed": "Beim Löschen des Problems ist ein Fehler aufgetreten.",
- "components.IssueDetails.toaststatusupdated": "Problemstatus erfolgreich aktualisiert!",
- "components.IssueDetails.toaststatusupdatefailed": "Beim Aktualisieren des Problemstatus ist ein Fehler aufgetreten.",
+ "components.IssueDetails.toaststatusupdated": "Status des Problems erfolgreich aktualisiert!",
+ "components.IssueDetails.toaststatusupdatefailed": "Beim Aktualisieren des Status des Problems ist ein Fehler aufgetreten.",
"components.IssueDetails.unknownissuetype": "Unbekannt",
"components.IssueList.IssueItem.episodes": "{episodeCount, plural, one {Folge} other {Folgen}}",
"components.IssueList.IssueItem.issuestatus": "Status",
@@ -103,29 +103,29 @@
"components.IssueModal.CreateIssueModal.validationMessageRequired": "Du musst eine Beschreibung eingeben",
"components.IssueModal.CreateIssueModal.whatswrong": "Was ist das Problem?",
"components.IssueModal.issueAudio": "Ton",
- "components.IssueModal.issueOther": "Andere",
+ "components.IssueModal.issueOther": "Sonstige",
"components.IssueModal.issueSubtitles": "Untertitel",
"components.IssueModal.issueVideo": "Video",
"components.LanguageSelector.languageServerDefault": "Standard ({language})",
"components.LanguageSelector.originalLanguageDefault": "Alle Sprachen",
"components.Layout.LanguagePicker.displaylanguage": "Anzeigesprache",
- "components.Layout.SearchInput.searchPlaceholder": "Nach Filmen und Serien suchen",
+ "components.Layout.SearchInput.searchPlaceholder": "Nach Filmen & Serien suchen",
"components.Layout.Sidebar.dashboard": "Entdecken",
"components.Layout.Sidebar.issues": "Probleme",
"components.Layout.Sidebar.requests": "Anfragen",
"components.Layout.Sidebar.settings": "Einstellungen",
"components.Layout.Sidebar.users": "Benutzer",
- "components.Layout.UserDropdown.MiniQuotaDisplay.movierequests": "Film-Anfragen",
- "components.Layout.UserDropdown.MiniQuotaDisplay.seriesrequests": "Serien-Anfragen",
+ "components.Layout.UserDropdown.MiniQuotaDisplay.movierequests": "Filmanfragen",
+ "components.Layout.UserDropdown.MiniQuotaDisplay.seriesrequests": "Serienanfragen",
"components.Layout.UserDropdown.myprofile": "Profil",
"components.Layout.UserDropdown.requests": "Anfragen",
"components.Layout.UserDropdown.settings": "Einstellungen",
"components.Layout.UserDropdown.signout": "Abmelden",
"components.Layout.VersionStatus.commitsbehind": "{commitsBehind} {commitsBehind, plural, one {Version} other {Versionen}} hinterher",
"components.Layout.VersionStatus.outofdate": "Veraltet",
- "components.Layout.VersionStatus.streamdevelop": "Jellyseerr Entwicklung",
- "components.Layout.VersionStatus.streamstable": "Jellyseerr stabil",
- "components.Login.email": "E-Mail Adresse",
+ "components.Layout.VersionStatus.streamdevelop": "Jellyseerr (Entwicklung)",
+ "components.Layout.VersionStatus.streamstable": "Jellyseerr (Stabil)",
+ "components.Login.email": "E-Mail-Adresse",
"components.Login.forgotpassword": "Passwort vergessen?",
"components.Login.loginerror": "Beim Anmelden ist etwas schief gelaufen.",
"components.Login.password": "Passwort",
@@ -172,60 +172,60 @@
"components.MovieDetails.originaltitle": "Originaltitel",
"components.MovieDetails.overview": "Übersicht",
"components.MovieDetails.overviewunavailable": "Übersicht nicht verfügbar.",
- "components.MovieDetails.physicalrelease": "DVD/Bluray-Veröffentlichung",
- "components.MovieDetails.productioncountries": "Produktions {countryCount, plural, one {Land} other {Länder}}",
+ "components.MovieDetails.physicalrelease": "Physische Veröffentlichung",
+ "components.MovieDetails.productioncountries": "Produktions{countryCount, plural, one {land} other {länder}}",
"components.MovieDetails.recommendations": "Empfehlungen",
- "components.MovieDetails.releasedate": "{releaseCount, plural, one {Veröffentlichungstermin} other {Veröffentlichungstermine}}",
+ "components.MovieDetails.releasedate": "{releaseCount, plural, one {Erscheinungsdatum} other {Erscheinungsdatum}}",
"components.MovieDetails.reportissue": "Problem melden",
"components.MovieDetails.revenue": "Einnahmen",
- "components.MovieDetails.rtaudiencescore": "Rotten Tomatoes Publikumswertung",
- "components.MovieDetails.rtcriticsscore": "Rotten Tomatoes Tomatometer",
+ "components.MovieDetails.rtaudiencescore": "Rotten Tomatoes - Nutzerwertung",
+ "components.MovieDetails.rtcriticsscore": "Rotten Tomatoes - Tomatometer",
"components.MovieDetails.runtime": "{minutes} Minuten",
"components.MovieDetails.showless": "Weniger Anzeigen",
"components.MovieDetails.showmore": "Mehr Anzeigen",
"components.MovieDetails.similar": "Ähnliche Titel",
- "components.MovieDetails.streamingproviders": "Streamt derzeit auf",
+ "components.MovieDetails.streamingproviders": "Derzeit verfügbar auf",
"components.MovieDetails.studio": "{studioCount, plural, one {Studio} other {Studios}}",
"components.MovieDetails.theatricalrelease": "Kinostart",
- "components.MovieDetails.tmdbuserscore": "TMDB-Nutzerwertung",
+ "components.MovieDetails.tmdbuserscore": "TMDB - Nutzerwertung",
"components.MovieDetails.viewfullcrew": "Komplette Crew anzeigen",
"components.MovieDetails.watchtrailer": "Trailer ansehen",
- "components.NotificationTypeSelector.adminissuecommentDescription": "Sende eine Benachrichtigung, wenn andere Benutzer Kommentare zu Problemen abgeben.",
- "components.NotificationTypeSelector.adminissuereopenedDescription": "Sende eine Benachrichtigung, wenn Probleme von anderen Benutzern wieder geöffnet werden.",
- "components.NotificationTypeSelector.adminissueresolvedDescription": "Sende eine Benachrichtigung, wenn andere Benutzer Kommentare zu Themen abgeben.",
+ "components.NotificationTypeSelector.adminissuecommentDescription": "Benachrichtigung erhalten, wenn andere Benutzer Kommentare zu Problemen verfassen.",
+ "components.NotificationTypeSelector.adminissuereopenedDescription": "Benachrichtigung erhalten, wenn Probleme von anderen Benutzern wieder geöffnet werden.",
+ "components.NotificationTypeSelector.adminissueresolvedDescription": "Benachrichtigung erhalten, wenn Probleme von anderen Benutzern gelöst werden.",
"components.NotificationTypeSelector.issuecomment": "Problem Kommentar",
- "components.NotificationTypeSelector.issuecommentDescription": "Sende eine Benachrichtigungen, wenn Probleme neue Kommentare erhalten.",
+ "components.NotificationTypeSelector.issuecommentDescription": "Benachrichtigung erhalten, wenn Probleme neue Kommentare erhalten.",
"components.NotificationTypeSelector.issuecreated": "Problem gemeldet",
- "components.NotificationTypeSelector.issuecreatedDescription": "Senden eine Benachrichtigungen, wenn Probleme gemeldet werden.",
+ "components.NotificationTypeSelector.issuecreatedDescription": "Benachrichtigung erhalten, wenn Probleme gemeldet werden.",
"components.NotificationTypeSelector.issuereopened": "Problem wiedereröffnet",
- "components.NotificationTypeSelector.issuereopenedDescription": "Sende eine Benachrichtigung, wenn Probleme wieder geöffnet werden.",
+ "components.NotificationTypeSelector.issuereopenedDescription": "Benachrichtigung erhalten, wenn Probleme wieder geöffnet werden.",
"components.NotificationTypeSelector.issueresolved": "Problem gelöst",
- "components.NotificationTypeSelector.issueresolvedDescription": "Senden Benachrichtigungen, wenn Probleme gelöst sind.",
+ "components.NotificationTypeSelector.issueresolvedDescription": "Benachrichtigung erhalten, wenn Probleme gelöst sind.",
"components.NotificationTypeSelector.mediaAutoApproved": "Anfrage automatisch genehmigt",
- "components.NotificationTypeSelector.mediaAutoApprovedDescription": "Sende eine Benachrichtigung, wenn das angeforderte Medium automatisch genehmigt wird.",
+ "components.NotificationTypeSelector.mediaAutoApprovedDescription": "Benachrichtigung erhalten, wenn das angeforderte Medium automatisch genehmigt wird.",
"components.NotificationTypeSelector.mediaapproved": "Anfrage genehmigt",
- "components.NotificationTypeSelector.mediaapprovedDescription": "Sende Benachrichtigungen, wenn angeforderte Medien manuell genehmigt wurden.",
+ "components.NotificationTypeSelector.mediaapprovedDescription": "Benachrichtigung erhalten, wenn angeforderte Medien manuell genehmigt wurden.",
"components.NotificationTypeSelector.mediaautorequested": "Anfrage automatisch übermittelt",
- "components.NotificationTypeSelector.mediaautorequestedDescription": "Erhalten eine Benachrichtigung, wenn neue Medienanfragen für Objekte auf deiner Merkliste automatisch übermittelt werden.",
+ "components.NotificationTypeSelector.mediaautorequestedDescription": "Benachrichtigung erhalten, wenn neue Medienanfragen für Objekte auf deiner Merkliste automatisch übermittelt werden.",
"components.NotificationTypeSelector.mediaavailable": "Anfrage verfügbar",
- "components.NotificationTypeSelector.mediaavailableDescription": "Sendet Benachrichtigungen, wenn angeforderte Medien verfügbar werden.",
+ "components.NotificationTypeSelector.mediaavailableDescription": "Benachrichtigung erhalten, wenn angeforderte Medien verfügbar werden.",
"components.NotificationTypeSelector.mediadeclined": "Anfrage abgelehnt",
- "components.NotificationTypeSelector.mediadeclinedDescription": "Sende eine Benachrichtigungen, wenn Medienanfragen abgelehnt wurden.",
+ "components.NotificationTypeSelector.mediadeclinedDescription": "Benachrichtigung erhalten, wenn Medienanfragen abgelehnt wurden.",
"components.NotificationTypeSelector.mediafailed": "Anfrageverarbeitung fehlgeschlagen",
- "components.NotificationTypeSelector.mediafailedDescription": "Sende Benachrichtigungen, wenn angeforderte Medien nicht zu Radarr oder Sonarr hinzugefügt werden konnten.",
+ "components.NotificationTypeSelector.mediafailedDescription": "Benachrichtigungen senden, wenn angeforderte Medien nicht zu Radarr oder Sonarr hinzugefügt werden konnten.",
"components.NotificationTypeSelector.mediarequested": "Anfrage in Bearbeitung",
- "components.NotificationTypeSelector.mediarequestedDescription": "Sende Benachrichtigungen, wenn neue Medien angefordert wurden und auf Genehmigung warten.",
+ "components.NotificationTypeSelector.mediarequestedDescription": "Benachrichtigungen senden, wenn neue Medien angefordert wurden und auf Genehmigung warten.",
"components.NotificationTypeSelector.notificationTypes": "Benachrichtigungstypen",
- "components.NotificationTypeSelector.userissuecommentDescription": "Sende eine Benachrichtigung, wenn dein Problem neue Kommentare erhält.",
- "components.NotificationTypeSelector.userissuecreatedDescription": "Lassen dich benachrichtigen, wenn andere Benutzer Probleme melden.",
- "components.NotificationTypeSelector.userissuereopenedDescription": "Sende eine Benachrichtigung, wenn die von dir gemeldeten Probleme wieder geöffnet werden.",
- "components.NotificationTypeSelector.userissueresolvedDescription": "Sende eine Benachrichtigung, wenn dein Problem gelöst wurde.",
- "components.NotificationTypeSelector.usermediaAutoApprovedDescription": "Werde benachrichtigt, wenn andere Nutzer Medien anfordern, welche automatisch angenommen werden.",
- "components.NotificationTypeSelector.usermediaapprovedDescription": "Werde benachrichtigt, wenn deine Medienanfrage angenommen wurde.",
- "components.NotificationTypeSelector.usermediaavailableDescription": "Sende eine Benachrichtigung, wenn deine Medienanfragen verfügbar sind.",
- "components.NotificationTypeSelector.usermediadeclinedDescription": "Werde benachrichtigt, wenn deine Medienanfrage abgelehnt wurde.",
- "components.NotificationTypeSelector.usermediafailedDescription": "Werde benachrichtigt, wenn die angeforderten Medien bei der Hinzufügung zu Radarr oder Sonarr fehlschlagen.",
- "components.NotificationTypeSelector.usermediarequestedDescription": "Werde benachrichtigt, wenn andere Nutzer eine Medie anfordern, welches eine Genehmigung erfordert.",
+ "components.NotificationTypeSelector.userissuecommentDescription": "Benachrichtigung erhalten, wenn dein Problem neue Kommentare erhält.",
+ "components.NotificationTypeSelector.userissuecreatedDescription": "Benachrichtigung erhalten, wenn andere Benutzer Probleme melden.",
+ "components.NotificationTypeSelector.userissuereopenedDescription": "Benachrichtigung erhalten, wenn von dir gemeldete Probleme wieder geöffnet werden.",
+ "components.NotificationTypeSelector.userissueresolvedDescription": "Benachrichtigung erhalten, wenn dein Problem gelöst wurde.",
+ "components.NotificationTypeSelector.usermediaAutoApprovedDescription": "Benachrichtigung erhalten, wenn andere Benutzer neue Medienanfragen stellen, die automatisch genehmigt werden.",
+ "components.NotificationTypeSelector.usermediaapprovedDescription": "Benachrichtigung erhalten, wenn deine Medienanfragen genehmigt werden.",
+ "components.NotificationTypeSelector.usermediaavailableDescription": "Benachrichtigung erhalten, wenn deine Medienanfragen verfügbar sind.",
+ "components.NotificationTypeSelector.usermediadeclinedDescription": "Benachrichtigung erhalten, wenn deine Medienanfrage abgelehnt wurde.",
+ "components.NotificationTypeSelector.usermediafailedDescription": "Benachrichtigung erhalten, wenn die angeforderten Medien bei der Hinzufügung zu Radarr oder Sonarr fehlschlagen.",
+ "components.NotificationTypeSelector.usermediarequestedDescription": "Benachrichtigung erhalten, wenn andere Nutzer eine Medie anfordern, welches eine Genehmigung erfordert.",
"components.PermissionEdit.admin": "Admin",
"components.PermissionEdit.adminDescription": "Voller Administratorzugriff. Umgeht alle anderen Rechteabfragen.",
"components.PermissionEdit.advancedrequest": "Erweiterte Anfragen",
@@ -242,7 +242,7 @@
"components.PermissionEdit.autoapproveMoviesDescription": "Autorisierung der automatischen Freigabe von Anfragen für nicht-4K-Filme.",
"components.PermissionEdit.autoapproveSeries": "Automatische Genehmigung von Serien",
"components.PermissionEdit.autoapproveSeriesDescription": "Autorisierung der automatischen Freigabe von Anfragen für nicht-4K-Serien.",
- "components.PermissionEdit.autorequest": "Automatische Anfrage aus Plex-Merkliste",
+ "components.PermissionEdit.autorequest": "Automatische Anfrage aus Plex Merkliste",
"components.PermissionEdit.autorequestDescription": "Autorisierung zur automatischen Anfrage von Nicht-4K-Medien über die Plex Merkliste.",
"components.PermissionEdit.autorequestMovies": "Filme automatisch anfragen",
"components.PermissionEdit.autorequestMoviesDescription": "Autorisierung zur automatischen Anfrage von Nicht-4K-Medien über die Plex Merkliste.",
@@ -297,7 +297,7 @@
"components.RequestBlock.languageprofile": "Sprachprofil",
"components.RequestBlock.lastmodifiedby": "Zuletzt geändert von",
"components.RequestBlock.profilechanged": "Qualitätsprofil",
- "components.RequestBlock.requestdate": "Anfrage-Datum",
+ "components.RequestBlock.requestdate": "Anfragedatum",
"components.RequestBlock.requestedby": "Angefragt von",
"components.RequestBlock.requestoverrides": "Anfrage Überschreibungen",
"components.RequestBlock.rootfolder": "Stammordner",
@@ -323,7 +323,7 @@
"components.RequestCard.failedretry": "Beim erneuten Versuch die Anfrage zu senden ist ein Fehler aufgetreten.",
"components.RequestCard.mediaerror": "{mediaType} wurde nicht gefunden",
"components.RequestCard.seasons": "{seasonCount, plural, one {Staffel} other {Staffeln}}",
- "components.RequestCard.tmdbid": "TMDB-ID",
+ "components.RequestCard.tmdbid": "TMDB ID",
"components.RequestCard.tvdbid": "TheTVDB-ID",
"components.RequestCard.unknowntitle": "Unbekannter Titel",
"components.RequestList.RequestItem.cancelRequest": "Anfrage abbrechen",
@@ -336,11 +336,11 @@
"components.RequestList.RequestItem.requested": "Angefragt",
"components.RequestList.RequestItem.requesteddate": "Angefordert",
"components.RequestList.RequestItem.seasons": "{seasonCount, plural, one {Staffel} other {Staffeln}}",
- "components.RequestList.RequestItem.tmdbid": "TMDB-ID",
+ "components.RequestList.RequestItem.tmdbid": "TMDB ID",
"components.RequestList.RequestItem.tvdbid": "TheTVDB-ID",
"components.RequestList.RequestItem.unknowntitle": "Unbekannter Titel",
"components.RequestList.requests": "Anfragen",
- "components.RequestList.showallrequests": "Zeige alle Anfragen",
+ "components.RequestList.showallrequests": "Alle Anfragen anzeigen",
"components.RequestList.sortAdded": "Zuletzt angefragt",
"components.RequestList.sortModified": "Zuletzt geändert",
"components.RequestModal.AdvancedRequester.advancedoptions": "Erweiterte Einstellungen",
@@ -402,8 +402,8 @@
"components.RequestModal.selectmovies": "Wähle Film(e)",
"components.RequestModal.selectseason": "Staffel(n) Auswählen",
"components.ResetPassword.confirmpassword": "Passwort bestätigen",
- "components.ResetPassword.email": "E-Mail Adresse",
- "components.ResetPassword.emailresetlink": "Wiederherstellungs-Link per E-Mail senden",
+ "components.ResetPassword.email": "E-Mail-Adresse",
+ "components.ResetPassword.emailresetlink": "Wiederherstellungs-Link an E-Mail-Adresse senden",
"components.ResetPassword.gobacklogin": "Zurück zur Anmeldeseite",
"components.ResetPassword.password": "Passwort",
"components.ResetPassword.passwordreset": "Passwort zurücksetzen",
@@ -412,7 +412,7 @@
"components.ResetPassword.resetpasswordsuccessmessage": "Passwort wurde erfolgreich zurückgesetzt!",
"components.ResetPassword.validationemailrequired": "Du musst eine gültige E-Mail Adresse angeben",
"components.ResetPassword.validationpasswordmatch": "Passwörter müssen übereinstimmen",
- "components.ResetPassword.validationpasswordminchars": "Passwort ist zu kurz; es sollte mindestens 8 Zeichen lang sein",
+ "components.ResetPassword.validationpasswordminchars": "Das Passwort ist zu kurz, es sollte mindestens 8 Zeichen lang sein",
"components.ResetPassword.validationpasswordrequired": "Du musst ein Passwort angeben",
"components.Search.search": "Suchen",
"components.Search.searchresults": "Suchergebnisse",
@@ -428,37 +428,25 @@
"components.Settings.Notifications.NotificationsGotify.validationTypes": "Es muss mindestens eine Benachrichtigungsart ausgewählt werden",
"components.Settings.Notifications.NotificationsGotify.validationUrlRequired": "Es muss eine gültige URL angegeben werden",
"components.Settings.Notifications.NotificationsGotify.validationUrlTrailingSlash": "URL darf nicht mit einem abschließenden Schrägstrich enden",
- "components.Settings.Notifications.NotificationsLunaSea.agentenabled": "Dienst aktivieren",
- "components.Settings.Notifications.NotificationsLunaSea.profileName": "Profil Name",
- "components.Settings.Notifications.NotificationsLunaSea.profileNameTip": "Wird nur benötigt wenn default Profil nicht verwendet wird",
- "components.Settings.Notifications.NotificationsLunaSea.settingsFailed": "LunaSea Benachrichtigungseinstellungen konnten nicht gespeichert werden.",
- "components.Settings.Notifications.NotificationsLunaSea.settingsSaved": "LunaSea Benachrichtigungseinstellungen wurden gespeichert!",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestFailed": "LunaSea Test Benachrichtigung fehlgeschlagen.",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSending": "LunaSea Test Benachrichtigung wird gesendet…",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSuccess": "LunaSea Test Benachrichtigung gesendet!",
- "components.Settings.Notifications.NotificationsLunaSea.validationTypes": "Sie müssen mindestens einen Benachrichtigungstypen auswählen",
- "components.Settings.Notifications.NotificationsLunaSea.validationWebhookUrl": "Geben sie eine gültige URL an",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrl": "Webhook URL",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrlTip": "Deine Benutzer oder Geräte basierende Benachrichtigungs-Webhook URL",
"components.Settings.Notifications.NotificationsPushbullet.accessToken": "Zugangstoken",
- "components.Settings.Notifications.NotificationsPushbullet.accessTokenTip": "Erstellen Sie einen Token in Ihren Account Einstellungen",
+ "components.Settings.Notifications.NotificationsPushbullet.accessTokenTip": "Erstelle ein Token in deinen Kontoeinstellungen",
"components.Settings.Notifications.NotificationsPushbullet.agentEnabled": "Agent aktivieren",
"components.Settings.Notifications.NotificationsPushbullet.channelTag": "Channel Tag",
"components.Settings.Notifications.NotificationsPushbullet.pushbulletSettingsFailed": "Pushbullet-Benachrichtigungseinstellungen konnten nicht gespeichert werden.",
"components.Settings.Notifications.NotificationsPushbullet.pushbulletSettingsSaved": "Pushbullet-Benachrichtigungseinstellungen erfolgreich gespeichert!",
- "components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestFailed": "Pushbullet Test Benachrichtigung fehlgeschlagen.",
- "components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestSending": "Pushbullet Test Benachrichtigung wird gesendet…",
- "components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestSuccess": "Pushbullet Test Benachrichtigung gesendet!",
+ "components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestFailed": "Pushbullet Testbenachrichtigung fehlgeschlagen.",
+ "components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestSending": "Pushbullet Testbenachrichtigung wird gesendet…",
+ "components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestSuccess": "Pushbullet Testbenachrichtigung gesendet!",
"components.Settings.Notifications.NotificationsPushbullet.validationAccessTokenRequired": "Du musst ein Zugangstoken angeben",
- "components.Settings.Notifications.NotificationsPushbullet.validationTypes": "Sie müssen mindestens einen Benachrichtigungstypen auswählen",
+ "components.Settings.Notifications.NotificationsPushbullet.validationTypes": "Es muss mindestens ein Benachrichtigungstyp ausgewählt sein",
"components.Settings.Notifications.NotificationsPushover.accessToken": "Anwendungs API-Token",
"components.Settings.Notifications.NotificationsPushover.accessTokenTip": "Registriere eine Anwendung , um diese mit Jellyseerr benutzen zu können",
"components.Settings.Notifications.NotificationsPushover.agentenabled": "Agent aktivieren",
"components.Settings.Notifications.NotificationsPushover.pushoversettingsfailed": "Pushover-Benachrichtigungseinstellungen konnten nicht gespeichert werden.",
"components.Settings.Notifications.NotificationsPushover.pushoversettingssaved": "Pushover-Benachrichtigungseinstellungen erfolgreich gespeichert!",
- "components.Settings.Notifications.NotificationsPushover.toastPushoverTestFailed": "Pushover Test Benachrichtigung fehlgeschlagen.",
- "components.Settings.Notifications.NotificationsPushover.toastPushoverTestSending": "Pushover Test Benachrichtigung wird gesendet…",
- "components.Settings.Notifications.NotificationsPushover.toastPushoverTestSuccess": "Pushover Test Benachrichtigung gesendet!",
+ "components.Settings.Notifications.NotificationsPushover.toastPushoverTestFailed": "Pushover Testbenachrichtigung fehlgeschlagen.",
+ "components.Settings.Notifications.NotificationsPushover.toastPushoverTestSending": "Pushover Testbenachrichtigung wird gesendet…",
+ "components.Settings.Notifications.NotificationsPushover.toastPushoverTestSuccess": "Pushover Testbenachrichtigung gesendet!",
"components.Settings.Notifications.NotificationsPushover.userToken": "Benutzer- oder Gruppenschlüssel",
"components.Settings.Notifications.NotificationsPushover.userTokenTip": "Ihr 30-stelliger Nutzer oder Gruppen Identifikator",
"components.Settings.Notifications.NotificationsPushover.validationAccessTokenRequired": "Du musst ein gültiges Anwendungstoken angeben",
@@ -467,18 +455,18 @@
"components.Settings.Notifications.NotificationsSlack.agentenabled": "Agent aktivieren",
"components.Settings.Notifications.NotificationsSlack.slacksettingsfailed": "Slack-Benachrichtigungseinstellungen konnten nicht gespeichert werden.",
"components.Settings.Notifications.NotificationsSlack.slacksettingssaved": "Slack-Benachrichtigungseinstellungen erfolgreich gespeichert!",
- "components.Settings.Notifications.NotificationsSlack.toastSlackTestFailed": "Slack Test Benachrichtigung fehlgeschlagen.",
- "components.Settings.Notifications.NotificationsSlack.toastSlackTestSending": "Slack Test Benachrichtigung wird gesendet…",
- "components.Settings.Notifications.NotificationsSlack.toastSlackTestSuccess": "Slack Test Benachrichtigung gesendet!",
+ "components.Settings.Notifications.NotificationsSlack.toastSlackTestFailed": "Slack Testbenachrichtigung fehlgeschlagen.",
+ "components.Settings.Notifications.NotificationsSlack.toastSlackTestSending": "Slack Testbenachrichtigung wird gesendet…",
+ "components.Settings.Notifications.NotificationsSlack.toastSlackTestSuccess": "Slack Testbenachrichtigung gesendet!",
"components.Settings.Notifications.NotificationsSlack.validationTypes": "Du musst mindestens einen Benachrichtigungstypen auswählen",
"components.Settings.Notifications.NotificationsSlack.validationWebhookUrl": "Du musst eine gültige URL angeben",
"components.Settings.Notifications.NotificationsSlack.webhookUrl": "Webhook URL",
"components.Settings.Notifications.NotificationsSlack.webhookUrlTip": "Erstelle eine Eingehende Webhook integration",
"components.Settings.Notifications.NotificationsWebPush.agentenabled": "Agent aktivieren",
"components.Settings.Notifications.NotificationsWebPush.httpsRequirement": "Jellyseerr muss via HTTPS bereitgestellt werden, um Web-Push Benachrichtigungen empfangen zu können.",
- "components.Settings.Notifications.NotificationsWebPush.toastWebPushTestFailed": "Web push Test Benachrichtigung fehlgeschlagen.",
- "components.Settings.Notifications.NotificationsWebPush.toastWebPushTestSending": "Web push Test Benachrichtigung wird gesendet…",
- "components.Settings.Notifications.NotificationsWebPush.toastWebPushTestSuccess": "Web push Test Benachrichtigung gesendet!",
+ "components.Settings.Notifications.NotificationsWebPush.toastWebPushTestFailed": "Web push Testbenachrichtigung fehlgeschlagen.",
+ "components.Settings.Notifications.NotificationsWebPush.toastWebPushTestSending": "Web push Testbenachrichtigung wird gesendet…",
+ "components.Settings.Notifications.NotificationsWebPush.toastWebPushTestSuccess": "Web push Testbenachrichtigung gesendet!",
"components.Settings.Notifications.NotificationsWebPush.webpushsettingsfailed": "Web push Benachrichtigungseinstellungen konnten nicht gespeichert werden.",
"components.Settings.Notifications.NotificationsWebPush.webpushsettingssaved": "Web push Benachrichtigungseinstellungen erfolgreich gespeichert!",
"components.Settings.Notifications.NotificationsWebhook.agentenabled": "Dienst aktivieren",
@@ -487,9 +475,9 @@
"components.Settings.Notifications.NotificationsWebhook.resetPayload": "Auf Standard zurücksetzen",
"components.Settings.Notifications.NotificationsWebhook.resetPayloadSuccess": "JSON-Inhalt erfolgreich zurückgesetzt!",
"components.Settings.Notifications.NotificationsWebhook.templatevariablehelp": "Hilfe zu Vorlagenvariablen",
- "components.Settings.Notifications.NotificationsWebhook.toastWebhookTestFailed": "Webhook Test Benachrichtigung konnte nicht gesendet werden.",
- "components.Settings.Notifications.NotificationsWebhook.toastWebhookTestSending": "Webhook Test Benachrichtigung wird gesendet…",
- "components.Settings.Notifications.NotificationsWebhook.toastWebhookTestSuccess": "Webhook Test Benachrichtigung gesendet!",
+ "components.Settings.Notifications.NotificationsWebhook.toastWebhookTestFailed": "Webhook Testbenachrichtigung konnte nicht gesendet werden.",
+ "components.Settings.Notifications.NotificationsWebhook.toastWebhookTestSending": "Webhook Testbenachrichtigung wird gesendet…",
+ "components.Settings.Notifications.NotificationsWebhook.toastWebhookTestSuccess": "Webhook Testbenachrichtigung gesendet!",
"components.Settings.Notifications.NotificationsWebhook.validationJsonPayloadRequired": "Du musst einen gültigen JSON-Inhalt angeben",
"components.Settings.Notifications.NotificationsWebhook.validationTypes": "Du musst mindestens einen Benachrichtigungstypen auswählen",
"components.Settings.Notifications.NotificationsWebhook.validationWebhookUrl": "Du musst eine gültige URL angeben",
@@ -523,22 +511,22 @@
"components.Settings.Notifications.pgpPasswordTip": "Signiere verschlüsselte E-Mail-Nachrichten mit OpenPGP",
"components.Settings.Notifications.pgpPrivateKey": "PGP Privater Schlüssel",
"components.Settings.Notifications.pgpPrivateKeyTip": "Signiere verschlüsselte E-Mail-Nachrichten mit OpenPGP",
- "components.Settings.Notifications.sendSilently": "Sende stumm",
+ "components.Settings.Notifications.sendSilently": "Lautlos senden",
"components.Settings.Notifications.sendSilentlyTip": "Sende Benachrichtigungen ohne Ton",
"components.Settings.Notifications.senderName": "Absendername",
"components.Settings.Notifications.smtpHost": "SMTP-Host",
"components.Settings.Notifications.smtpPort": "SMTP-Port",
"components.Settings.Notifications.telegramsettingsfailed": "Telegram-Benachrichtigungseinstellungen konnten nicht gespeichert werden.",
"components.Settings.Notifications.telegramsettingssaved": "Telegram-Benachrichtigungseinstellungen erfolgreich gespeichert!",
- "components.Settings.Notifications.toastDiscordTestFailed": "Discord Test Benachrichtigung fehlgeschlagen.",
- "components.Settings.Notifications.toastDiscordTestSending": "Discord Test Benachrichtigung wird gesendet…",
- "components.Settings.Notifications.toastDiscordTestSuccess": "Discord Test Benachrichtigung gesendet!",
- "components.Settings.Notifications.toastEmailTestFailed": "E-Mail Test Benachrichtigung fehlgeschlagen.",
- "components.Settings.Notifications.toastEmailTestSending": "Email Test Benachrichtigung wird gesendet…",
- "components.Settings.Notifications.toastEmailTestSuccess": "Email Test Benachrichtigung gesendet!",
- "components.Settings.Notifications.toastTelegramTestFailed": "Telegram Test Benachrichtigung fehlgeschlagen.",
- "components.Settings.Notifications.toastTelegramTestSending": "Telegram Test Benachrichtigung wird gesendet…",
- "components.Settings.Notifications.toastTelegramTestSuccess": "Telegram Test Benachrichtigung gesendet!",
+ "components.Settings.Notifications.toastDiscordTestFailed": "Discord Testbenachrichtigung fehlgeschlagen.",
+ "components.Settings.Notifications.toastDiscordTestSending": "Discord Testbenachrichtigung wird gesendet…",
+ "components.Settings.Notifications.toastDiscordTestSuccess": "Discord Testbenachrichtigung gesendet!",
+ "components.Settings.Notifications.toastEmailTestFailed": "E-Mail Testbenachrichtigung fehlgeschlagen.",
+ "components.Settings.Notifications.toastEmailTestSending": "Email Testbenachrichtigung wird gesendet…",
+ "components.Settings.Notifications.toastEmailTestSuccess": "Email Testbenachrichtigung gesendet!",
+ "components.Settings.Notifications.toastTelegramTestFailed": "Telegram Testbenachrichtigung fehlgeschlagen.",
+ "components.Settings.Notifications.toastTelegramTestSending": "Telegram Testbenachrichtigung wird gesendet…",
+ "components.Settings.Notifications.toastTelegramTestSuccess": "Telegram Testbenachrichtigung gesendet!",
"components.Settings.Notifications.validationBotAPIRequired": "Du musst ein Bot-Autorisierungstoken angeben",
"components.Settings.Notifications.validationChatIdRequired": "Du musst eine gültige Chat-ID angeben",
"components.Settings.Notifications.validationEmail": "Du musst eine gültige E-Mail-Adresse angeben",
@@ -579,13 +567,13 @@
"components.Settings.RadarrModal.selecttags": "Tags auswählen",
"components.Settings.RadarrModal.server4k": "4K-Server",
"components.Settings.RadarrModal.servername": "Servername",
- "components.Settings.RadarrModal.ssl": "SSL aktivieren",
+ "components.Settings.RadarrModal.ssl": "SSL verwenden",
"components.Settings.RadarrModal.syncEnabled": "Scannen aktivieren",
"components.Settings.RadarrModal.tags": "Tags",
"components.Settings.RadarrModal.testFirstQualityProfiles": "Teste die Verbindung, um Qualitätsprofile zu laden",
"components.Settings.RadarrModal.testFirstRootFolders": "Teste die Verbindung, um Stammordner zu laden",
- "components.Settings.RadarrModal.testFirstTags": "Teste Verbindung, um Tags zu laden",
- "components.Settings.RadarrModal.toastRadarrTestFailure": "Verbindung zu Radarr fehlgeschlagen.",
+ "components.Settings.RadarrModal.testFirstTags": "Teste die Verbindung, um Tags zu laden",
+ "components.Settings.RadarrModal.toastRadarrTestFailure": "Die Verbindung zu Radarr fehlgeschlagen.",
"components.Settings.RadarrModal.toastRadarrTestSuccess": "Radarr-Verbindung erfolgreich hergestellt!",
"components.Settings.RadarrModal.validationApiKeyRequired": "Du musst einen API-Schlüssel angeben",
"components.Settings.RadarrModal.validationApplicationUrl": "Du musst eine gültige URL angeben",
@@ -607,7 +595,7 @@
"components.Settings.SettingsAbout.Releases.viewongithub": "Auf GitHub anzeigen",
"components.Settings.SettingsAbout.about": "Über",
"components.Settings.SettingsAbout.appDataPath": "Datenverzeichnis",
- "components.Settings.SettingsAbout.betawarning": "Das ist eine BETA Software. Einige Funktionen könnten nicht richtig/stabil funktionieren. Bitte sämtliche Fehler auf GitHub melden!",
+ "components.Settings.SettingsAbout.betawarning": "BETA-Software: Funktionen können fehlerhaft oder instabil sein. Probleme bitte auf GitHub melden!",
"components.Settings.SettingsAbout.documentation": "Dokumentation",
"components.Settings.SettingsAbout.gettingsupport": "Hilfe erhalten",
"components.Settings.SettingsAbout.githubdiscussions": "GitHub-Diskussionen",
@@ -615,8 +603,8 @@
"components.Settings.SettingsAbout.outofdate": "Veraltet",
"components.Settings.SettingsAbout.overseerrinformation": "Über Jellyseerr",
"components.Settings.SettingsAbout.preferredmethod": "Bevorzugt",
- "components.Settings.SettingsAbout.runningDevelop": "Sie benutzen den Branchdevelop von Jellyseerr, welcher nur für Entwickler, bzw. \"Bleeding-Edge\" Tests empfohlen wird.",
- "components.Settings.SettingsAbout.supportoverseerr": "Unterstütze Overseerr",
+ "components.Settings.SettingsAbout.runningDevelop": "Es wird der develop-Branch von Jellyseerr verwendet, der nur für Mitwirkende an der Entwicklung oder für Tests der neuesten Funktionen empfohlen wird.",
+ "components.Settings.SettingsAbout.supportoverseerr": "Overseerr unterstützen",
"components.Settings.SettingsAbout.timezone": "Zeitzone",
"components.Settings.SettingsAbout.totalmedia": "Medien insgesamt",
"components.Settings.SettingsAbout.totalrequests": "Anfragen insgesamt",
@@ -729,14 +717,14 @@
"components.Settings.SonarrModal.selecttags": "Wähle Tags",
"components.Settings.SonarrModal.server4k": "4K-Server",
"components.Settings.SonarrModal.servername": "Servername",
- "components.Settings.SonarrModal.ssl": "SSL aktivieren",
+ "components.Settings.SonarrModal.ssl": "SSL verwenden",
"components.Settings.SonarrModal.syncEnabled": "Scannen aktivieren",
"components.Settings.SonarrModal.tags": "Tags",
"components.Settings.SonarrModal.testFirstLanguageProfiles": "Teste die Verbindung zum Laden von Sprachprofilen",
"components.Settings.SonarrModal.testFirstQualityProfiles": "Teste die Verbindung, um Qualitätsprofile zu laden",
"components.Settings.SonarrModal.testFirstRootFolders": "Teste die Verbindung, um Stammordner zu laden",
- "components.Settings.SonarrModal.testFirstTags": "Teste Verbindung, um Tags zu laden",
- "components.Settings.SonarrModal.toastSonarrTestFailure": "Verbindung zu Sonarr fehlgeschlagen.",
+ "components.Settings.SonarrModal.testFirstTags": "Teste die Verbindung, um Tags zu laden",
+ "components.Settings.SonarrModal.toastSonarrTestFailure": "Die Verbindung zu Sonarr ist fehlgeschlagen.",
"components.Settings.SonarrModal.toastSonarrTestSuccess": "Sonarr-Verbindung erfolgreich hergestellt!",
"components.Settings.SonarrModal.validationApiKeyRequired": "Du musst einen API-Schlüssel angeben",
"components.Settings.SonarrModal.validationApplicationUrl": "Du musst eine gültige URL angeben",
@@ -755,14 +743,13 @@
"components.Settings.addsonarr": "Sonarr Server hinzufügen",
"components.Settings.advancedTooltip": "Bei falscher Konfiguration dieser Einstellung, kann dies zu einer Funktionsstörung führen",
"components.Settings.cancelscan": "Durchsuchung abbrechen",
- "components.Settings.copied": "API-Schlüssel in die Zwischenablage kopiert.",
"components.Settings.currentlibrary": "Aktuelle Bibliothek: {name}",
"components.Settings.default": "Standardmäßig",
"components.Settings.default4k": "Standard-4K",
"components.Settings.deleteServer": "{serverType} Server löschen",
"components.Settings.deleteserverconfirm": "Bist du sicher, dass du diesen Server löschen möchtest?",
"components.Settings.email": "E-Mail",
- "components.Settings.enablessl": "SSL aktivieren",
+ "components.Settings.enablessl": "SSL verwenden",
"components.Settings.experimentalTooltip": "Die Aktivierung dieser Einstellung kann zu einem unerwarteten Verhalten der Anwendung führen",
"components.Settings.externalUrl": "Externe URL",
"components.Settings.hostname": "Hostname oder IP-Adresse",
@@ -853,16 +840,16 @@
"components.StatusChecker.restartRequiredDescription": "Starte bitte den Server neu, um die aktualisierten Einstellungen zu übernehmen.",
"components.TitleCard.cleardata": "Daten löschen",
"components.TitleCard.mediaerror": "{mediaType} wurde nicht gefunden",
- "components.TitleCard.tmdbid": "TMDB-ID",
+ "components.TitleCard.tmdbid": "TMDB ID",
"components.TitleCard.tvdbid": "TheTVDB-ID",
- "components.TvDetails.Season.noepisodes": "Liste der Episoden nicht verfügbar.",
+ "components.TvDetails.Season.noepisodes": "Liste der Folgen nicht verfügbar.",
"components.TvDetails.Season.somethingwentwrong": "Beim Datenabruf der Staffel ist etwas schief gelaufen.",
"components.TvDetails.TvCast.fullseriescast": "Komplette Serien Besetzung",
"components.TvDetails.TvCrew.fullseriescrew": "Komplette Serien-Crew",
"components.TvDetails.anime": "Anime",
"components.TvDetails.cast": "Besetzung",
- "components.TvDetails.episodeCount": "{episodeCount, plural, one {# Episode} other {# Episoden}}",
- "components.TvDetails.episodeRuntime": "Episodenlaufzeit",
+ "components.TvDetails.episodeCount": "{episodeCount, plural, one {# Folge} other {# Folgen}}",
+ "components.TvDetails.episodeRuntime": "Laufzeit der Folge",
"components.TvDetails.episodeRuntimeMinutes": "{runtime} Minuten",
"components.TvDetails.firstAirDate": "Erstausstrahlung",
"components.TvDetails.manageseries": "Serie verwalten",
@@ -872,11 +859,11 @@
"components.TvDetails.originaltitle": "Originaltitel",
"components.TvDetails.overview": "Übersicht",
"components.TvDetails.overviewunavailable": "Übersicht nicht verfügbar.",
- "components.TvDetails.productioncountries": "Produktions {countryCount, plural, one {Land} other {Länder}}",
+ "components.TvDetails.productioncountries": "Produktions{countryCount, plural, one {land} other {länder}}",
"components.TvDetails.recommendations": "Empfehlungen",
"components.TvDetails.reportissue": "Problem melden",
- "components.TvDetails.rtaudiencescore": "Rotten Tomatoes Publikumswertung",
- "components.TvDetails.rtcriticsscore": "Rotten Tomatoes Tomatometer",
+ "components.TvDetails.rtaudiencescore": "Rotten Tomatoes - Nutzerwertung",
+ "components.TvDetails.rtcriticsscore": "Rotten Tomatoes - Tomatometer",
"components.TvDetails.seasonnumber": "Staffel {seasonNumber}",
"components.TvDetails.seasons": "{seasonCount, plural, one {# Staffel} other {# Staffeln}}",
"components.TvDetails.seasonstitle": "Staffeln",
@@ -884,7 +871,7 @@
"components.TvDetails.similar": "Ähnliche Serien",
"components.TvDetails.status4k": "4K {status}",
"components.TvDetails.streamingproviders": "Streamt derzeit auf",
- "components.TvDetails.tmdbuserscore": "TMDB-Nutzerwertung",
+ "components.TvDetails.tmdbuserscore": "TMDB - Nutzerwertung",
"components.TvDetails.viewfullcrew": "Komplette Crew anzeigen",
"components.TvDetails.watchtrailer": "Trailer ansehen",
"components.UserList.accounttype": "Art",
@@ -898,8 +885,8 @@
"components.UserList.creating": "Erstelle…",
"components.UserList.deleteconfirm": "Möchtest du diesen Benutzer wirklich löschen? Alle seine Anfragendaten werden dauerhaft entfernt.",
"components.UserList.deleteuser": "Benutzer löschen",
- "components.UserList.edituser": "Benutzerberechtigungen Bearbeiten",
- "components.UserList.email": "E-Mail Adresse",
+ "components.UserList.edituser": "Benutzerberechtigungen bearbeiten",
+ "components.UserList.email": "E-Mail-Adresse",
"components.UserList.importedfromplex": "{userCount} Plex {userCount, Plural, one {Benutzer} other {Benutzer}} erfolgreich importiert!",
"components.UserList.importfrommediaserver": "{mediaServerName}-Benutzer importieren",
"components.UserList.importfromplex": "Plex Benutzer importieren",
@@ -933,7 +920,7 @@
"components.UserProfile.UserSettings.UserPermissions.toastSettingsSuccess": "Berechtigungen erfolgreich gespeichert!",
"components.UserProfile.UserSettings.UserPermissions.toastSettingsFailure": "Beim Speichern der Einstellungen ist etwas schief gelaufen.",
"components.UserProfile.UserSettings.UserPermissions.permissions": "Berechtigungen",
- "components.UserProfile.UserSettings.UserPasswordChange.validationNewPasswordLength": "Passwort ist zu kurz; es sollte mindestens 8 Zeichen lang sein",
+ "components.UserProfile.UserSettings.UserPasswordChange.validationNewPasswordLength": "Das Passwort ist zu kurz, es sollte mindestens 8 Zeichen lang sein",
"components.UserProfile.UserSettings.UserPasswordChange.validationNewPassword": "Du musst ein neues Passwort angeben",
"components.UserProfile.UserSettings.UserPasswordChange.validationCurrentPassword": "Du musst dein aktuelles Passwort angeben",
"components.UserProfile.UserSettings.UserPasswordChange.validationConfirmPasswordSame": "Das Passwort muss übereinstimmen",
@@ -961,7 +948,7 @@
"components.UserProfile.UserSettings.UserGeneralSettings.region": "Region Entdecken",
"components.UserProfile.UserSettings.UserGeneralSettings.originallanguageTip": "Filtere Inhalte nach Originalsprache",
"components.UserProfile.UserSettings.UserGeneralSettings.originallanguage": "Sprache des Bereiches \"Entdecken\"",
- "components.UserProfile.UserSettings.UserPasswordChange.nopermissionDescription": "Sie haben keine Berechtigung, das Kennwort dieses Benutzers zu ändern.",
+ "components.UserProfile.UserSettings.UserPasswordChange.nopermissionDescription": "Es besteht keine Berechtigung, das Passwort dieses Benutzers zu ändern.",
"components.UserProfile.UserSettings.UserGeneralSettings.user": "Benutzer",
"components.UserProfile.UserSettings.UserGeneralSettings.role": "Rolle",
"components.UserProfile.UserSettings.UserGeneralSettings.owner": "Besitzer",
@@ -1001,7 +988,7 @@
"i18n.requesting": "Anfordern…",
"i18n.request4k": "In 4K anfragen",
"i18n.previous": "Zurück",
- "i18n.notrequested": "Nicht Angefragt",
+ "i18n.notrequested": "Nicht angefragt",
"i18n.noresults": "Keine Ergebnisse.",
"i18n.next": "Weiter",
"i18n.movie": "Film",
@@ -1063,12 +1050,12 @@
"components.UserProfile.emptywatchlist": "Hier erscheinen deine zur Plex Merkliste hinzugefügte Medien.",
"components.UserProfile.plexwatchlist": "Plex Merkliste",
"components.Discover.DiscoverTvKeyword.keywordSeries": "{keywordTitle} Serien",
- "components.Discover.moviegenres": "Film Genre",
+ "components.Discover.moviegenres": "Film-Genres",
"components.Discover.studios": "Studios",
- "components.Discover.tmdbmoviegenre": "TMDB Film Genre",
- "components.Discover.tmdbtvgenre": "TMDB Serien Genre",
+ "components.Discover.tmdbmoviegenre": "TMDB Film-Genre",
+ "components.Discover.tmdbtvgenre": "TMDB Serien-Genre",
"components.Discover.tmdbtvkeyword": "TMDB Serien Stichwort",
- "components.Discover.tvgenres": "Serien Genre",
+ "components.Discover.tvgenres": "Serien-Genres",
"components.Settings.SettingsMain.apikey": "API-Schlüssel",
"components.Settings.SettingsMain.applicationTitle": "Anwendungstitel",
"components.Settings.SettingsMain.general": "Allgemein",
@@ -1083,11 +1070,11 @@
"components.Discover.tmdbsearch": "TMDB Suche",
"components.Settings.SettingsMain.toastApiKeyFailure": "Etwas ist schiefgelaufen während der Generierung eines neuen API Schlüssels.",
"components.Settings.SettingsMain.toastSettingsSuccess": "Einstellungen erfolgreich gespeichert!",
- "components.Discover.tmdbmoviekeyword": "TMDB Film Stichwort",
+ "components.Discover.tmdbmoviekeyword": "TMDB Film-Stichwort",
"components.Settings.SettingsMain.validationApplicationTitle": "Du musst einen Anwendungstitel angeben",
"components.Discover.PlexWatchlistSlider.emptywatchlist": "Medien in deiner Plex Merkliste erscheinen hier.",
"components.Settings.SettingsMain.cacheImagesTip": "Cache extern gehostete Bilder (erfordert eine beträchtliche Menge an Speicherplatz)",
- "components.Discover.networks": "Sender",
+ "components.Discover.networks": "Dienste",
"components.Discover.tmdbstudio": "TMDB Studio",
"components.Settings.SettingsMain.applicationurl": "Anwendung URL",
"components.Settings.SettingsMain.cacheImages": "Bild-Caching aktivieren",
@@ -1095,27 +1082,27 @@
"components.Settings.SettingsMain.originallanguage": "Sprache des Bereiches \"Entdecken\"",
"components.Settings.SettingsMain.partialRequestsEnabled": "Teilweise Serienanfragen zulassen",
"components.Settings.SettingsMain.toastSettingsFailure": "Beim Speichern der Einstellungen ist ein Fehler aufgetreten.",
- "components.Discover.tmdbnetwork": "TMDB Sender",
+ "components.Discover.tmdbnetwork": "TMDB Netzwerk",
"components.Settings.SettingsMain.originallanguageTip": "Inhalt nach Originalsprache filtern",
- "components.Discover.CreateSlider.addSlider": "Slider hinzufügen",
- "components.Discover.CreateSlider.addcustomslider": "Benutzerdefinierten Slider erstellen",
- "components.Discover.CreateSlider.addfail": "Neuer Slider konnte nicht erstellt werden.",
- "components.Discover.CreateSlider.addsuccess": "Ein neuer Slider wurde erstellt und die Einstellungen wurden gespeichert.",
- "components.Discover.CreateSlider.editSlider": "Slider bearbeiten",
- "components.Discover.CreateSlider.editfail": "Slider konnte nicht bearbeitet werden.",
- "components.Discover.CreateSlider.editsuccess": "Slider bearbeitet und Einstellung gespeichert.",
+ "components.Discover.CreateSlider.addSlider": "Schieberegler hinzufügen",
+ "components.Discover.CreateSlider.addcustomslider": "Benutzerdefinierten Schieberegler erstellen",
+ "components.Discover.CreateSlider.addfail": "Neuer Schieberegler konnte nicht erstellt werden.",
+ "components.Discover.CreateSlider.addsuccess": "Ein neuer Schieberegler wurde erstellt und die Einstellungen wurden gespeichert.",
+ "components.Discover.CreateSlider.editSlider": "Schieberegler bearbeiten",
+ "components.Discover.CreateSlider.editfail": "Schieberegler konnte nicht bearbeitet werden.",
+ "components.Discover.CreateSlider.editsuccess": "Schieberegler bearbeitet und Einstellung gespeichert.",
"components.Discover.CreateSlider.needresults": "Es muss mindestens 1 Ergebnis vorhanden sein.",
"components.Layout.Sidebar.browsemovies": "Filme",
"components.Layout.Sidebar.browsetv": "Serien",
"components.Discover.CreateSlider.nooptions": "Keine Ergebnisse.",
"components.Discover.CreateSlider.providetmdbgenreid": "Hinterlege eine TMDB Genre ID",
- "components.Discover.CreateSlider.providetmdbkeywordid": "Hinterlege eine TMDB Keyword ID",
+ "components.Discover.CreateSlider.providetmdbkeywordid": "Hinterlege eine TMDB Schlüsselwort ID",
"components.Discover.CreateSlider.providetmdbnetwork": "Hinterlege eine TMDB Netzwerk ID",
- "components.Discover.CreateSlider.providetmdbsearch": "Geben Sie eine Suchanfrage an",
+ "components.Discover.CreateSlider.providetmdbsearch": "Gib eine Suchanfrage ein",
"components.Discover.CreateSlider.validationTitlerequired": "Du musst einen Titel eingeben.",
"components.Discover.DiscoverSliderEdit.remove": "Entfernen",
- "components.Discover.DiscoverSliderEdit.deletefail": "Slider konnte nicht gelöscht werden.",
- "components.Discover.DiscoverSliderEdit.deletesuccess": "Slider erfolgreich entfernt.",
+ "components.Discover.DiscoverSliderEdit.deletefail": "Schieberegler konnte nicht gelöscht werden.",
+ "components.Discover.DiscoverSliderEdit.deletesuccess": "Schieberegler erfolgreich entfernt.",
"components.Discover.DiscoverMovies.discovermovies": "Filme",
"components.Discover.DiscoverMovies.sortReleaseDateAsc": "Erscheinungsdatum (aufsteigend)",
"components.Discover.DiscoverMovies.sortReleaseDateDesc": "Erscheinungsdatum (absteigend)",
@@ -1126,9 +1113,9 @@
"components.Discover.DiscoverTv.sortFirstAirDateAsc": "Erstausstrahlung (aufsteigend)",
"components.Discover.DiscoverTv.sortPopularityAsc": "Beliebtheit (aufsteigend)",
"components.Discover.DiscoverTv.sortPopularityDesc": "Beliebtheit (absteigend)",
- "components.Discover.CreateSlider.slidernameplaceholder": "Name des Slider",
+ "components.Discover.CreateSlider.slidernameplaceholder": "Name des Schiebereglers",
"components.Settings.SettingsJobsCache.availability-sync": "Medienverfügbarkeit Sync",
- "components.Discover.FilterSlideover.activefilters": "{count, plural, one {# Aktiver Filter} other {# Aktive Filter}}",
+ "components.Discover.FilterSlideover.activefilters": "{count, plural, one {# aktiver Filter} other {# aktive Filter}}",
"components.Discover.FilterSlideover.originalLanguage": "Originalsprache",
"components.Settings.SettingsJobsCache.editJobScheduleSelectorSeconds": "Alle {jobScheduleSeconds, plural, one {Sekunde} other {{jobScheduleSeconds} Sekunden}}",
"components.Discover.updatefailed": "Bei der Aktualisierung der Entdecken-Einstellungen ist ein Fehler aufgetreten.",
@@ -1149,50 +1136,50 @@
"components.Discover.resetsuccess": "Die Entdecken-Einstellungen wurden erfolgreich zurückgesetzt.",
"components.Discover.stopediting": "Bearbeitung stoppen",
"components.Discover.resettodefault": "Zurücksetzen auf Standard",
- "components.Discover.resetwarning": "Setzt alle Slider auf die Standardwerte zurück. Dadurch werden auch alle benutzerdefinierten Slider gelöscht!",
- "components.Discover.DiscoverMovies.activefilters": "{count, plural, one {# Aktiver Filter} other {# Aktive Filter}}",
+ "components.Discover.resetwarning": "Setzt alle Schieberegler auf die Standardwerte zurück. Dadurch werden auch alle benutzerdefinierten Schieberegler gelöscht!",
+ "components.Discover.DiscoverMovies.activefilters": "{count, plural, one {# aktiver Filter} other {# aktive Filter}}",
"components.Discover.DiscoverMovies.sortPopularityAsc": "Beliebtheit (aufsteigend)",
"components.Discover.DiscoverMovies.sortPopularityDesc": "Beliebtheit (absteigend)",
- "components.Discover.DiscoverMovies.sortTmdbRatingAsc": "TMDB-Bewertung (aufsteigend)",
- "components.Discover.DiscoverMovies.sortTmdbRatingDesc": "TMDB-Bewertung (absteigend)",
- "components.Discover.DiscoverTv.activefilters": "{count, plural, one {# Aktiver Filter} other {# Aktive Filter}}",
+ "components.Discover.DiscoverMovies.sortTmdbRatingAsc": "TMDB Bewertung (aufsteigend)",
+ "components.Discover.DiscoverMovies.sortTmdbRatingDesc": "TMDB Bewertung (absteigend)",
+ "components.Discover.DiscoverTv.activefilters": "{count, plural, one {# aktiver Filter} other {# aktive Filter}}",
"components.Discover.DiscoverTv.sortTitleAsc": "Titel (A-Z) (aufsteigend)",
"components.Discover.DiscoverTv.sortTitleDesc": "Titel (Z-A) (absteigend)",
- "components.Discover.DiscoverTv.sortTmdbRatingAsc": "TMDB-Bewertung (aufsteigend)",
- "components.Discover.DiscoverTv.sortTmdbRatingDesc": "TMDB-Bewertung (absteigend)",
+ "components.Discover.DiscoverTv.sortTmdbRatingAsc": "TMDB Bewertung (aufsteigend)",
+ "components.Discover.DiscoverTv.sortTmdbRatingDesc": "TMDB Bewertung (absteigend)",
"components.Discover.FilterSlideover.clearfilters": "Aktive Filter löschen",
"components.Discover.FilterSlideover.filters": "Filter",
"components.Discover.FilterSlideover.firstAirDate": "Datum der Erstausstrahlung",
- "components.Discover.FilterSlideover.from": "Vom",
+ "components.Discover.FilterSlideover.from": "Von",
"components.Discover.FilterSlideover.genres": "Genres",
"components.Discover.FilterSlideover.keywords": "Stichwörter",
"components.Discover.FilterSlideover.ratingText": "Bewertungen zwischen {minValue} und {maxValue}",
"components.Discover.FilterSlideover.releaseDate": "Erscheinungsdatum",
"components.Discover.FilterSlideover.runtime": "Laufzeit",
"components.Discover.FilterSlideover.runtimeText": "{minValue}-{maxValue} Minuten Laufzeit",
- "components.Discover.FilterSlideover.tmdbuserscore": "TMDB-Benutzerbewertung",
+ "components.Discover.FilterSlideover.tmdbuserscore": "TMDB - Nutzerwertung",
"components.Discover.FilterSlideover.to": "Bis",
- "components.Discover.createnewslider": "Neuen Slider erstellen",
+ "components.Discover.createnewslider": "Neuen Schieberegler erstellen",
"components.Discover.FilterSlideover.studio": "Studio",
- "components.Discover.FilterSlideover.streamingservices": "Streaming-Dienste",
+ "components.Discover.FilterSlideover.streamingservices": "Streamingdienste",
"components.Selector.nooptions": "Keine Ergebnisse.",
"components.Selector.searchKeywords": "Stichwörter suchen…",
"components.Selector.searchStudios": "Studios suchen…",
- "components.Discover.tmdbmoviestreamingservices": "TMDB Film-Streaming-Dienste",
- "components.Discover.tmdbtvstreamingservices": "TMDB TV-Streaming-Dienste",
+ "components.Discover.tmdbmoviestreamingservices": "TMDB Film-Streamingdienste",
+ "components.Discover.tmdbtvstreamingservices": "TMDB TV-Streamingdienste",
"i18n.collection": "Sammlung",
- "components.Discover.FilterSlideover.tmdbuservotecount": "Anzahl an TMDB-Benutzerbewertungen",
+ "components.Discover.FilterSlideover.tmdbuservotecount": "Anzahl der TMDB-Nutzerwertungen",
"components.Settings.RadarrModal.tagRequestsInfo": "Füge automatisch ein Tag hinzu mit der ID und dem Namen des anfordernden Nutzers",
- "components.MovieDetails.imdbuserscore": "IMDB Nutzer Bewertung",
+ "components.MovieDetails.imdbuserscore": "IMDb - Nutzerwertung",
"components.Settings.SonarrModal.tagRequests": "Tag Anforderungen",
- "components.Discover.FilterSlideover.voteCount": "Anzahl Abstimmungen zwischen {minValue} und {maxValue}",
+ "components.Discover.FilterSlideover.voteCount": "Anzahl der Abstimmungen zwischen {minValue} und {maxValue}",
"components.Settings.SonarrModal.tagRequestsInfo": "Füge automatisch einen zusätzlichen Tag mit der ID & Namen des anfordernden Nutzers",
"components.Layout.UserWarnings.passwordRequired": "Ein Passwort ist erforderlich.",
"components.Login.description": "Da du dich zum ersten Mal bei {applicationName} anmeldest, musst du eine gültige E-Mail-Adresse angeben.",
- "components.Layout.UserWarnings.emailRequired": "E-Mail Adresse ist erforderlich.",
- "components.Layout.UserWarnings.emailInvalid": "E-Mail Adresse ist nicht gültig.",
+ "components.Layout.UserWarnings.emailRequired": "Eine E-Mail-Adresse ist erforderlich.",
+ "components.Layout.UserWarnings.emailInvalid": "Die E-Mail-Adresse ist ungültig.",
"components.Login.credentialerror": "Der Benutzername oder das Passwort ist falsch.",
- "components.Login.emailtooltip": "Die Adresse muss nicht mit Ihrer {mediaServerName}-Instanz verbunden sein.",
+ "components.Login.emailtooltip": "Die Adresse muss nicht mit deiner {mediaServerName}-Instanz verbunden sein.",
"components.Login.initialsignin": "Verbinde",
"components.Login.initialsigningin": "Verbinden…",
"components.Login.save": "Hinzufügen",
@@ -1200,9 +1187,9 @@
"components.Login.signinwithjellyfin": "Verwende dein {mediaServerName} Konto",
"components.Login.title": "E-Mail hinzufügen",
"components.Login.username": "Benutzername",
- "components.Login.validationEmailFormat": "Ungültige E-Mail",
- "components.Login.validationEmailRequired": "Du musst eine E-Mail angeben",
- "components.Login.validationemailformat": "Gültige E-Mail erforderlich",
+ "components.Login.validationEmailFormat": "Ungültige E-Mail-Adresse",
+ "components.Login.validationEmailRequired": "Du musst eine E-Mail-Adresse angeben",
+ "components.Login.validationemailformat": "Gültige E-Mail-Adresse erforderlich",
"components.Login.validationhostformat": "Gültige URL erforderlich",
"components.Login.validationhostrequired": "{mediaServerName} URL erforderlich",
"components.Login.validationusernamerequired": "Benutzername erforderlich",
@@ -1210,7 +1197,7 @@
"components.ManageSlideOver.removearr4k": "Aus 4K {arr} entfernen",
"components.MovieDetails.downloadstatus": "Download-Status",
"components.MovieDetails.openradarr4k": "Film in 4K Radarr öffnen",
- "components.MovieDetails.play": "Wiedergabe auf {mediaServerName}",
+ "components.MovieDetails.play": "Auf {mediaServerName} wiedergeben",
"components.MovieDetails.play4k": "4K abspielen auf {mediaServerName}",
"components.Settings.SonarrModal.animeSeriesType": "Anime-Serien Typ",
"components.Settings.jellyfinSettings": "{mediaServerName} Einstellungen",
@@ -1229,7 +1216,7 @@
"components.TitleCard.watchlistDeleted": "{title} Erfolgreich aus der Merkliste entfernt!",
"components.TitleCard.watchlistError": "Ein Fehler ist aufgetreten. Bitte versuche es erneut.",
"components.TitleCard.watchlistSuccess": "{title} erfolgreich zur Merkliste hinzugefügt!",
- "components.TvDetails.play": "Wiedergabe auf {mediaServerName}",
+ "components.TvDetails.play": "Auf {mediaServerName} wiedergeben",
"components.TvDetails.play4k": "4K abspielen auf {mediaServerName}",
"components.UserList.importfromJellyfin": "Importieren von {mediaServerName} Benutzern",
"components.UserList.mediaServerUser": "{mediaServerName} Benutzer",
@@ -1240,7 +1227,6 @@
"components.UserProfile.UserSettings.UserGeneralSettings.email": "E-Mail",
"components.UserProfile.UserSettings.UserGeneralSettings.mediaServerUser": "{mediaServerName} Benutzer",
"components.UserProfile.UserSettings.UserGeneralSettings.saving": "Speichern…",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingssaved": "Web-Push-Benachrichtigungseinstellungen erfolgreich gespeichert!",
"i18n.close": "Schließen",
"i18n.decline": "Ablehnen",
"i18n.declined": "Abgelehnt",
@@ -1250,7 +1236,7 @@
"i18n.movies": "Filme",
"i18n.open": "Offen",
"i18n.pending": "Ausstehend",
- "i18n.processing": "Verarbeitung",
+ "i18n.processing": "Verarbeiten",
"i18n.request": "Anfrage senden",
"i18n.requested": "Angefragt",
"i18n.retry": "Wiederholen",
@@ -1280,32 +1266,30 @@
"components.UserList.usercreatedsuccess": "Benutzer erfolgreich angelegt!",
"components.ManageSlideOver.manageModalRemoveMediaWarning": "* Dadurch wird dieser {mediaType} unwiderruflich aus {arr} entfernt, einschließlich aller Dateien.",
"components.UserList.importedfromJellyfin": "{userCount} {mediaServerName} {userCount, plural, one {Benutzer} other {Benutzer}} erfolgreich importiert!",
- "components.UserList.validationpasswordminchars": "Das Passwort ist zu kurz; es sollte mindestens 8 Zeichen lang sein",
+ "components.UserList.validationpasswordminchars": "Das Passwort ist zu kurz, es sollte mindestens 8 Zeichen lang sein",
"components.UserProfile.UserSettings.UserNotificationSettings.deviceDefault": "Gerätestandard",
"i18n.approve": "Genehmigen",
"i18n.partiallyavailable": "Teilweise verfügbar",
"components.UserList.newJellyfinsigninenabled": "Die Einstellung Aktiviere neuen {mediaServerName} Sign-In ist derzeit aktiviert. {mediaServerName}-Benutzer mit Bibliothekszugang müssen nicht importiert werden, um sich anmelden zu können.",
"components.UserProfile.UserSettings.UserNotificationSettings.sound": "Benachrichtigungston",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingsfailed": "Die Einstellungen für Web-Push-Benachrichtigungen konnten nicht gespeichert werden.",
"components.UserProfile.localWatchlist": "Merkliste von {username}",
"i18n.approved": "Genehmigt",
"pages.returnHome": "Zurück zur Startseite",
"components.Discover.FilterSlideover.status": "Status",
"components.UserList.username": "Benutzername",
- "components.Login.adminerror": "Du musst einen Adminaccount für den Zugang benutzen.",
- "components.MovieDetails.watchlistError": "Es ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut.",
+ "components.Login.adminerror": "Für die Anmeldung ist ein Administratorkonto erforderlich.",
+ "components.MovieDetails.watchlistError": "Es ist ein Fehler aufgetreten. Bitte erneut versuchen.",
"components.RequestList.RequestItem.profileName": "Profil",
"components.Selector.searchStatus": "Status auswählen...",
"components.Settings.invalidurlerror": "Es kann keine Verbindung zu {mediaServerName} hergestellt werden.",
"components.Settings.jellyfinSyncFailedGenericError": "Es trat ein unbekannter Fehler während der Bibliothekssynchronisation auf",
"components.UserList.validationUsername": "Du musst einen Benutzernamen angeben",
- "components.UserProfile.UserSettings.UserGeneralSettings.validationemailrequired": "E-Mail Adresse benötigt",
+ "components.UserProfile.UserSettings.UserGeneralSettings.validationemailrequired": "E-Mail-Adresse benötigt",
"components.Login.invalidurlerror": "Es kann keine Verbindung zu {mediaServerName} hergestellt werden.",
"components.MovieDetails.removefromwatchlist": "Von der Merkliste entfernen",
"components.TvDetails.watchlistDeleted": "{title} erfolgreich aus der Merkliste entfernt!",
"components.Login.back": "Zurück",
"components.Login.servertype": "Servertyp",
- "components.Login.validationHostnameRequired": "Du musst eine gültige IP-Adresse oder einen gültigen Hostnamen angeben",
"components.Login.validationPortRequired": "Du musst einen gültigen Port angeben",
"components.Login.validationUrlBaseLeadingSlash": "Der URL muss ein Slash vorangestellt sein",
"components.Login.validationUrlBaseTrailingSlash": "Die URL-Basis darf nicht auf einem Slash enden",
@@ -1332,7 +1316,7 @@
"components.TvDetails.removefromwatchlist": "Von der Merkliste entfernen",
"components.TvDetails.watchlistError": "Ein Fehler ist aufgetreten. Bitte versuche es erneut.",
"components.TvDetails.watchlistSuccess": "{title} erfolgreich zur Merkliste hinzugefügt!",
- "components.UserProfile.UserSettings.UserGeneralSettings.validationemailformat": "Gültige E-Mail Adresse benötigt",
+ "components.UserProfile.UserSettings.UserGeneralSettings.validationemailformat": "Gültige E-Mail-Adresse benötigt",
"components.Login.hostname": "{mediaServerName} URL",
"components.Login.port": "Port",
"components.Login.urlBase": "URL-Basis",
@@ -1340,20 +1324,20 @@
"components.Settings.jellyfinForgotPasswordUrl": "Passwort vergessen URL",
"components.Settings.jellyfinSyncFailedAutomaticGroupedFolders": "Eine benutzerdefinierte Authentifizierung mit automatischer Bibliotheksbündelung wird nicht unterstützt",
"components.Settings.jellyfinSyncFailedNoLibrariesFound": "Es wurden keine Bibliotheken gefunden",
- "components.Settings.scanbackground": "Der Scanvorgang wird im Hintergrund ausgeführt. Sie können in der Zwischenzeit den Einrichtungsprozess fortsetzen.",
+ "components.Settings.scanbackground": "Der Scan läuft im Hintergrund. Die Einrichtung kann in der Zwischenzeit fortgesetzt werden.",
"components.Blacklist.blacklistdate": "Datum",
"components.PermissionEdit.viewblacklistedItems": "Medien auf der Sperrliste anzeigen.",
- "components.Settings.SettingsMain.discoverRegion": "Region entdecken",
+ "components.Settings.SettingsMain.discoverRegion": "Region für \"Entdecken\"",
"components.Blacklist.blacklistNotFoundError": "{title} ist nicht auf der Sperrliste.",
"components.PermissionEdit.manageblacklist": "Sperrliste verwalten",
"components.Settings.SettingsJobsCache.plex-refresh-token": "Plex Refresh Token",
- "components.UserProfile.UserSettings.UserGeneralSettings.discoverRegion": "Region entdecken",
+ "components.UserProfile.UserSettings.UserGeneralSettings.discoverRegion": "Region für \"Entdecken\"",
"i18n.blacklistDuplicateError": "{title} wurde bereits auf die Sperrliste gesetzt.",
"components.Settings.Notifications.validationWebhookRoleId": "Du musst eine gültige Discord Rollen-ID angeben",
"components.Settings.Notifications.webhookRoleIdTip": "Die Rollen ID, die in der Webhook Nachricht erwähnt werden soll. Leer lassen, um Erwähnungen zu deaktivieren",
"i18n.addToBlacklist": "Zur Sperrliste hinzufügen",
"components.PermissionEdit.blacklistedItemsDescription": "Autorisierung zum Sperren von Medien.",
- "components.Settings.SettingsMain.streamingRegion": "Streaming Region",
+ "components.Settings.SettingsMain.streamingRegion": "Region des Streamings",
"i18n.removeFromBlacklistSuccess": "{title} wurde erfolgreich von der Sperrliste entfernt.",
"components.UserProfile.UserSettings.UserGeneralSettings.streamingRegion": "Streaming Region",
"components.UserProfile.UserSettings.UserGeneralSettings.streamingRegionTip": "Streaming Seiten nach regionaler Verfügbarkeit anzeigen",
@@ -1379,8 +1363,8 @@
"components.Settings.apiKey": "API-Schlüssel",
"components.Settings.tip": "Tipp",
"components.UserProfile.UserSettings.UserGeneralSettings.discoverRegionTip": "Inhalte nach regionaler Verfügbarkeit filtern",
- "components.UserProfile.UserSettings.UserGeneralSettings.toastSettingsFailureEmail": "Diese E-Mail ist bereits vergeben!",
- "components.UserProfile.UserSettings.UserGeneralSettings.toastSettingsFailureEmailEmpty": "Ein anderer Benutzer hat bereits diesen Benutzernamen. Sie müssen eine E-Mail festlegen",
+ "components.UserProfile.UserSettings.UserGeneralSettings.toastSettingsFailureEmail": "Diese E-Mail-Adresse ist bereits vergeben!",
+ "components.UserProfile.UserSettings.UserGeneralSettings.toastSettingsFailureEmailEmpty": "Dieser Benutzername ist bereits vergeben. Eine E-Mail-Adresse muss angegeben werden",
"i18n.blacklist": "Sperrliste",
"i18n.blacklistError": "Etwas ist schief gelaufen, versuche es noch einmal.",
"i18n.blacklistSuccess": "{title} wurde erfolgreich auf die Sperrliste gesetzt.",
@@ -1393,20 +1377,20 @@
"components.Settings.OverrideRuleModal.rootfolder": "Stammverzeichnis",
"components.UserProfile.UserSettings.menuLinkedAccounts": "Verknüpfte Konten",
"components.UserProfile.UserSettings.UserLinkedAccountsSettings.deleteFailed": "Verknüpftes Konto kann nicht gelöscht werden.",
- "components.UserProfile.UserSettings.LinkJellyfinModal.usernameRequired": "Sie müssen einen Benutzernamen angeben",
+ "components.UserProfile.UserSettings.LinkJellyfinModal.usernameRequired": "Es muss ein Benutzername eingegeben werden",
"components.Setup.librarieserror": "Validierung fehlgeschlagen. Bitte schalte die Bibliotheken erneut um, um fortzufahren.",
"components.Settings.SettingsNetwork.proxyBypassFilterTip": "Verwende ',' als Trennzeichen und '*.' als Platzhalter für Subdomains",
"components.Settings.OverrideRuleModal.settingsDescription": "Gibt an, welche Einstellungen geändert werden, wenn die oben genannten Bedingungen erfüllt sind.",
"components.Settings.SettingsUsers.mediaServerLogin": "Aktiviere {mediaServerName} Anmeldung",
"components.UserProfile.UserSettings.UserLinkedAccountsSettings.plexErrorExists": "Dieses Konto ist bereits mit einem Plex Benutzer verknüpft",
- "components.UserProfile.UserSettings.LinkJellyfinModal.description": "Geben Sie Ihre {mediaServerName}-Anmeldeinformationen ein, um Ihr Konto mit {applicationName} zu verknüpfen.",
- "components.Settings.SettingsNetwork.networkDisclaimer": "Anstelle dieser Einstellungen sollten Netzwerkparameter aus Ihrem Container/System verwendet werden. Weitere Informationen finden Sie in den {docs}.",
+ "components.UserProfile.UserSettings.LinkJellyfinModal.description": "Anmeldedaten von {mediaServerName} eingeben, um das Konto mit {applicationName} zu verbinden.",
+ "components.Settings.SettingsNetwork.networkDisclaimer": "Netzwerkparameter des Containers bzw. Systems sollten statt dieser Einstellungen verwendet werden. Weitere Informationen in den {docs}.",
"components.Selector.searchUsers": "Benutzer auswählen…",
"components.Settings.overrideRules": "Override-Regeln",
"components.Settings.Notifications.messageThreadId": "Thread-/Themen-ID",
"components.Settings.OverrideRuleModal.conditions": "Bedingungen",
"components.Settings.OverrideRuleTile.settings": "Einstellungen",
- "components.Login.noadminerror": "Kein Admin-Benutzer auf dem Server gefunden.",
+ "components.Login.noadminerror": "Auf dem Server wurde kein Administrator gefunden.",
"components.UserProfile.UserSettings.UserLinkedAccountsSettings.plexErrorUnauthorized": "Mit Ihren Anmeldeinformationen kann keine Verbindung zu Plex hergestellt werden",
"components.UserProfile.UserSettings.LinkJellyfinModal.errorUnknown": "Ein unbekannter Fehler ist aufgetreten",
"components.Settings.addrule": "Neue Override-Regel",
@@ -1435,15 +1419,14 @@
"components.Settings.OverrideRuleModal.settings": "Einstellungen",
"components.Settings.OverrideRuleModal.serviceDescription": "Wende diese Regel auf den ausgewählten Dienst an.",
"components.Settings.OverrideRuleModal.service": "Dienst",
- "components.Settings.SettingsMain.enableSpecialEpisodes": "Anfragen zu Spezial-Episoden zulassen",
- "components.Settings.SettingsNetwork.advancedNetworkSettings": "Erweiterte Netzwerkeinstellungen",
- "components.Settings.SettingsNetwork.csrfProtectionHoverTip": "Aktivieren Sie diese Einstellung NICHT, wenn Sie nicht wissen, was Sie tun!",
+ "components.Settings.SettingsMain.enableSpecialEpisodes": "Anfragen zu Spezial-Folgen zulassen",
+ "components.Settings.SettingsNetwork.csrfProtectionHoverTip": "Diese Einstellung nur aktivieren, wenn die Auswirkungen bekannt sind!",
"components.Settings.SettingsNetwork.docs": "Dokumentation/Hilfe",
"components.Settings.SettingsNetwork.networksettings": "Netzwerkeinstellungen",
"components.Settings.SettingsNetwork.networksettingsDescription": "Konfiguriere die Netzwerkeinstellungen deiner Jellyseerr-Instanz.",
"components.Settings.SettingsNetwork.toastSettingsSuccess": "Einstellungen erfolgreich gespeichert!",
"components.Settings.SettingsNetwork.trustProxy": "Aktiviere Proxy-Unterstützung",
- "components.Settings.SettingsNetwork.validationProxyPort": "Sie müssen einen gültigen Port angeben",
+ "components.Settings.SettingsNetwork.validationProxyPort": "Es muss ein gültiger Port eingetragen werden",
"components.Settings.SettingsUsers.atLeastOneAuth": "Es muss mindestens eine Authentifizierungsmethode ausgewählt werden.",
"components.Settings.SettingsUsers.loginMethods": "Anmeldemethoden",
"components.Settings.SettingsUsers.loginMethodsTip": "Anmeldemethoden für Benutzer konfigurieren.",
@@ -1466,12 +1449,12 @@
"components.UserProfile.UserSettings.LinkJellyfinModal.username": "Benutzername",
"components.UserProfile.UserSettings.LinkJellyfinModal.title": "{mediaServerName}-Konto verknüpfen",
"components.UserProfile.UserSettings.LinkJellyfinModal.saving": "Hinzufügen…",
- "components.UserProfile.UserSettings.LinkJellyfinModal.passwordRequired": "Sie müssen ein Passwort angeben",
+ "components.UserProfile.UserSettings.LinkJellyfinModal.passwordRequired": "Es muss ein Passwort eingegeben werden",
"components.UserProfile.UserSettings.LinkJellyfinModal.password": "Passwort",
"components.UserProfile.UserSettings.LinkJellyfinModal.errorUnauthorized": "Mit Ihren Anmeldeinformationen kann keine Verbindung zu {mediaServerName} hergestellt werden",
"components.UserProfile.UserSettings.LinkJellyfinModal.errorExists": "Dieses Konto ist bereits mit einem {applicationName}-Benutzer verknüpft",
- "components.UserProfile.UserSettings.UserLinkedAccountsSettings.noPermissionDescription": "Sie sind nicht berechtigt, die verknüpften Konten dieses Benutzers zu ändern.",
- "components.UserProfile.UserSettings.UserLinkedAccountsSettings.noLinkedAccounts": "Sie haben keine externen Konten mit Ihrem Konto verknüpft.",
+ "components.UserProfile.UserSettings.UserLinkedAccountsSettings.noPermissionDescription": "Es besteht keine Berechtigung, die verknüpften Konten dieses Benutzers zu bearbeiten.",
+ "components.UserProfile.UserSettings.UserLinkedAccountsSettings.noLinkedAccounts": "Es sind keine externen Konten mit deinem Account verknüpft.",
"components.UserProfile.UserSettings.UserLinkedAccountsSettings.linkedAccountsHint": "Diese externen Konten sind mit Ihrem {applicationName}-Konto verknüpft.",
"components.UserProfile.UserSettings.UserLinkedAccountsSettings.linkedAccounts": "Verknüpfte Konten",
"components.UserProfile.UserSettings.UserLinkedAccountsSettings.errorUnknown": "Ein unbekannter Fehler ist aufgetreten",
diff --git a/src/i18n/locale/el.json b/src/i18n/locale/el.json
index 07992d23ef..62402cac0d 100644
--- a/src/i18n/locale/el.json
+++ b/src/i18n/locale/el.json
@@ -110,16 +110,6 @@
"components.Discover.recentrequests": "Πρόσφατα Αιτήματα",
"components.Discover.recentlyAdded": "Προστέθηκαν πρόσφατα",
"components.Discover.populartv": "Δημοφιλείς Σειρές",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrl": "Webhook URL",
- "components.Settings.Notifications.NotificationsLunaSea.validationWebhookUrl": "Πρέπει να βάλεις μια έγκυρη διεύθυνση URL",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSuccess": "Η δοκιμαστική ειδοποίηση LunaSea εστάλη!",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSending": "Αποστολή δοκιμαστικής ειδοποίησης LunaSea…",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestFailed": "Αποτυχία αποστολής δοκιμαστικής ειδοποίησης LunaSea.",
- "components.Settings.Notifications.NotificationsLunaSea.settingsSaved": "Οι ρυθμίσεις ειδοποιήσεων LunaSea αποθηκεύτηκαν με επιτυχία!",
- "components.Settings.Notifications.NotificationsLunaSea.settingsFailed": "Οι ρυθμίσεις των ειδοποιήσεων LunaSea δεν κατάφεραν να αποθηκευτούν.",
- "components.Settings.Notifications.NotificationsLunaSea.profileNameTip": "Χρειάζεται μόνο εφόσον δεν χρησιμοποιείται το default προφίλ",
- "components.Settings.Notifications.NotificationsLunaSea.profileName": "Όνομα Προφίλ",
- "components.Settings.Notifications.NotificationsLunaSea.agentenabled": "Ενεργοποίηση του Μεταφορέα",
"components.Search.searchresults": "Αποτελέσματα αναζήτησης",
"components.Search.search": "Αναζήτηση",
"components.ResetPassword.validationpasswordrequired": "Πρέπει να βάλεις έναν κωδικό πρόσβασης",
@@ -516,8 +506,6 @@
"components.UserProfile.UserSettings.UserPasswordChange.newpassword": "Νέος κωδικός πρόσβασης",
"components.UserProfile.UserSettings.UserPasswordChange.currentpassword": "Τρέχων κωδικός πρόσβασης",
"components.UserProfile.UserSettings.UserPasswordChange.confirmpassword": "Επιβεβαίωση κωδικού πρόσβασης",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingssaved": "Οι ρυθμίσεις των ειδοποιήσεων push αποθηκεύτηκαν επιτυχώς!",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingsfailed": "Οι ρυθμίσεις των ειδοποιήσεων push δεν κατάφεραν να αποθηκευτούν.",
"components.UserProfile.UserSettings.UserNotificationSettings.webpush": "Web Push",
"components.UserProfile.UserSettings.UserNotificationSettings.validationTelegramChatId": "Πρέπει να δώσεις ένα έγκυρο αναγνωριστικό συνομιλίας",
"components.UserProfile.UserSettings.UserNotificationSettings.validationPgpPublicKey": "Πρέπει να βάλεις ένα έγκυρο δημόσιο κλειδί PGP",
@@ -693,7 +681,6 @@
"components.Settings.default4k": "Προεπιλεγμένο 4K",
"components.Settings.default": "Προκαθορισμένο",
"components.Settings.currentlibrary": "Τρέχουσα βιβλιοθήκη: {name}",
- "components.Settings.copied": "Αντιγράφηκε το κλειδί API στο πρόχειρο.",
"components.Settings.cancelscan": "Ακύρωση σάρωσης",
"components.Settings.addsonarr": "Προσθήκη διακομιστή Sonarr",
"components.Settings.address": "Διεύθυνση",
@@ -761,7 +748,6 @@
"components.Settings.SettingsUsers.newPlexLogin": "Ενεργοποίηση νέας σύνδεσης {mediaServerName}",
"components.Settings.SettingsJobsCache.jobsDescription": "Το Jellyseerr εκτελεί ορισμένες εργασίες συντήρησης ως τακτικά προγραμματισμένες εργασίες, αλλά μπορούν επίσης να ενεργοποιηθούν χειροκίνητα παρακάτω. Η χειροκίνητη εκτέλεση μιας εργασίας δεν θα αλλάξει το χρονοδιάγραμμα του.",
"components.Settings.Notifications.NotificationsWebhook.templatevariablehelp": "Template Variable Help",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrlTip": "Ο χρήστης σου ή η συσκευή ειδοποίηση webhook URL",
"components.RequestModal.numberofepisodes": "# Αριθμός Επεισοδίων",
"components.MovieDetails.studio": "{studioCount, plural, one {Στούντιο} other {Στούντιο}}",
"components.Layout.VersionStatus.commitsbehind": "{commitsBehind} {commitsBehind, plural, one {commit} other {commits}} πίσω",
@@ -962,7 +948,6 @@
"components.Selector.showmore": "Εμφάνιση περισσότερων",
"components.Selector.starttyping": "Αρχίστε να πληκτρολογείτε για αναζήτηση.",
"components.Settings.Notifications.NotificationsGotify.toastGotifyTestSending": "Αποστολή δοκιμαστικής ειδοποίησης Gotify…",
- "components.Settings.Notifications.NotificationsLunaSea.validationTypes": "Πρέπει να επιλέξετε τουλάχιστον έναν τύπο ειδοποιήσεων",
"components.Settings.Notifications.NotificationsPushbullet.channelTag": "Ετικέτα καναλιού",
"components.Settings.RadarrModal.announced": "Ανακοινώθηκε",
"components.Settings.RadarrModal.inCinemas": "Στους Κινηματογράφους",
diff --git a/src/i18n/locale/en.json b/src/i18n/locale/en.json
index 63a207c177..32af316b60 100644
--- a/src/i18n/locale/en.json
+++ b/src/i18n/locale/en.json
@@ -78,6 +78,7 @@
"components.Discover.FilterSlideover.activefilters": "{count, plural, one {# Active Filter} other {# Active Filters}}",
"components.Discover.FilterSlideover.certification": "Content Rating",
"components.Discover.FilterSlideover.clearfilters": "Clear Active Filters",
+ "components.Discover.FilterSlideover.excludeKeywords": "Exclude Keywords",
"components.Discover.FilterSlideover.filters": "Filters",
"components.Discover.FilterSlideover.firstAirDate": "First Air Date",
"components.Discover.FilterSlideover.from": "From",
@@ -236,10 +237,11 @@
"components.Layout.UserWarnings.passwordRequired": "A password is required.",
"components.Layout.VersionStatus.commitsbehind": "{commitsBehind} {commitsBehind, plural, one {commit} other {commits}} behind",
"components.Layout.VersionStatus.outofdate": "Out of Date",
- "components.Layout.VersionStatus.streamdevelop": "Jellyseerr Develop",
- "components.Layout.VersionStatus.streamstable": "Jellyseerr Stable",
+ "components.Layout.VersionStatus.streamdevelop": "Seerr Develop",
+ "components.Layout.VersionStatus.streamstable": "Seerr Stable",
"components.Login.adminerror": "You must use an admin account to sign in.",
"components.Login.back": "Go back",
+ "components.Login.backtologin": "Back to Login",
"components.Login.credentialerror": "The username or password is incorrect.",
"components.Login.description": "Since this is your first time logging into {applicationName}, you are required to add a valid email address.",
"components.Login.email": "Email Address",
@@ -652,7 +654,7 @@
"components.Settings.Notifications.NotificationsPushbullet.validationAccessTokenRequired": "You must provide an access token",
"components.Settings.Notifications.NotificationsPushbullet.validationTypes": "You must select at least one notification type",
"components.Settings.Notifications.NotificationsPushover.accessToken": "Application API Token",
- "components.Settings.Notifications.NotificationsPushover.accessTokenTip": "Register an application for use with Jellyseerr",
+ "components.Settings.Notifications.NotificationsPushover.accessTokenTip": "Register an application for use with Seerr",
"components.Settings.Notifications.NotificationsPushover.agentenabled": "Enable Agent",
"components.Settings.Notifications.NotificationsPushover.deviceDefault": "Device Default",
"components.Settings.Notifications.NotificationsPushover.embedPoster": "Embed Poster",
@@ -683,6 +685,8 @@
"components.Settings.Notifications.NotificationsWebhook.customJson": "JSON Payload",
"components.Settings.Notifications.NotificationsWebhook.resetPayload": "Reset to Default",
"components.Settings.Notifications.NotificationsWebhook.resetPayloadSuccess": "JSON payload reset successfully!",
+ "components.Settings.Notifications.NotificationsWebhook.supportVariables": "Support URL Variables",
+ "components.Settings.Notifications.NotificationsWebhook.supportVariablesTip": "Available variables are documented in the webhook template variables section",
"components.Settings.Notifications.NotificationsWebhook.templatevariablehelp": "Template Variable Help",
"components.Settings.Notifications.NotificationsWebhook.toastWebhookTestFailed": "Webhook test notification failed to send.",
"components.Settings.Notifications.NotificationsWebhook.toastWebhookTestSending": "Sending webhook test notification…",
@@ -691,11 +695,12 @@
"components.Settings.Notifications.NotificationsWebhook.validationTypes": "You must select at least one notification type",
"components.Settings.Notifications.NotificationsWebhook.validationWebhookUrl": "You must provide a valid URL",
"components.Settings.Notifications.NotificationsWebhook.webhookUrl": "Webhook URL",
+ "components.Settings.Notifications.NotificationsWebhook.webhookUrlTip": "Test Notification URL is set to {testUrl} instead of the actual webhook URL.",
"components.Settings.Notifications.NotificationsWebhook.webhooksettingsfailed": "Webhook notification settings failed to save.",
"components.Settings.Notifications.NotificationsWebhook.webhooksettingssaved": "Webhook notification settings saved successfully!",
"components.Settings.Notifications.NotificationsWebPush.agentenabled": "Enable Agent",
"components.Settings.Notifications.NotificationsWebPush.embedPoster": "Embed Poster",
- "components.Settings.Notifications.NotificationsWebPush.httpsRequirement": "In order to receive web push notifications, Jellyseerr must be served over HTTPS.",
+ "components.Settings.Notifications.NotificationsWebPush.httpsRequirement": "In order to receive web push notifications, Seerr must be served over HTTPS.",
"components.Settings.Notifications.NotificationsWebPush.toastWebPushTestFailed": "Web push test notification failed to send.",
"components.Settings.Notifications.NotificationsWebPush.toastWebPushTestSending": "Sending web push test notification…",
"components.Settings.Notifications.NotificationsWebPush.toastWebPushTestSuccess": "Web push test notification sent!",
@@ -706,7 +711,7 @@
"components.Settings.Notifications.authPass": "SMTP Password",
"components.Settings.Notifications.authUser": "SMTP Username",
"components.Settings.Notifications.botAPI": "Bot Authorization Token",
- "components.Settings.Notifications.botApiTip": "Create a bot for use with Jellyseerr",
+ "components.Settings.Notifications.botApiTip": "Create a bot for use with Seerr",
"components.Settings.Notifications.botAvatarUrl": "Bot Avatar URL",
"components.Settings.Notifications.botUsername": "Bot Username",
"components.Settings.Notifications.botUsernameTip": "Allow users to also start a chat with your bot and configure their own notifications",
@@ -853,18 +858,16 @@
"components.Settings.SettingsAbout.Releases.viewchangelog": "View Changelog",
"components.Settings.SettingsAbout.Releases.viewongithub": "View on GitHub",
"components.Settings.SettingsAbout.about": "About",
+ "components.Settings.SettingsAbout.aboutseerr": "About Seerr",
"components.Settings.SettingsAbout.appDataPath": "Data Directory",
"components.Settings.SettingsAbout.betawarning": "This is BETA software. Features may be broken and/or unstable. Please report any issues on GitHub!",
+ "components.Settings.SettingsAbout.contribute": "Make a Contribution",
"components.Settings.SettingsAbout.documentation": "Documentation",
"components.Settings.SettingsAbout.gettingsupport": "Getting Support",
"components.Settings.SettingsAbout.githubdiscussions": "GitHub Discussions",
- "components.Settings.SettingsAbout.helppaycoffee": "Help Pay for Coffee",
"components.Settings.SettingsAbout.outofdate": "Out of Date",
- "components.Settings.SettingsAbout.overseerrinformation": "About Jellyseerr",
- "components.Settings.SettingsAbout.preferredmethod": "Preferred",
- "components.Settings.SettingsAbout.runningDevelop": "You are running the develop branch of Jellyseerr, which is only recommended for those contributing to development or assisting with bleeding-edge testing.",
- "components.Settings.SettingsAbout.supportjellyseerr": "Support Jellyseerr",
- "components.Settings.SettingsAbout.supportoverseerr": "Support Overseerr",
+ "components.Settings.SettingsAbout.runningDevelop": "You are running the develop branch of Seerr, which is only recommended for those contributing to development or assisting with bleeding-edge testing.",
+ "components.Settings.SettingsAbout.supportseerr": "Support Seerr",
"components.Settings.SettingsAbout.timezone": "Time Zone",
"components.Settings.SettingsAbout.totalmedia": "Total Media",
"components.Settings.SettingsAbout.totalrequests": "Total Requests",
@@ -872,7 +875,7 @@
"components.Settings.SettingsAbout.version": "Version",
"components.Settings.SettingsJobsCache.availability-sync": "Media Availability Sync",
"components.Settings.SettingsJobsCache.cache": "Cache",
- "components.Settings.SettingsJobsCache.cacheDescription": "Jellyseerr caches requests to external API endpoints to optimize performance and avoid making unnecessary API calls.",
+ "components.Settings.SettingsJobsCache.cacheDescription": "Seerr caches requests to external API endpoints to optimize performance and avoid making unnecessary API calls.",
"components.Settings.SettingsJobsCache.cacheflushed": "{cachename} cache flushed.",
"components.Settings.SettingsJobsCache.cachehits": "Hits",
"components.Settings.SettingsJobsCache.cachekeys": "Total Keys",
@@ -883,7 +886,7 @@
"components.Settings.SettingsJobsCache.canceljob": "Cancel Job",
"components.Settings.SettingsJobsCache.command": "Command",
"components.Settings.SettingsJobsCache.dnsCache": "DNS Cache",
- "components.Settings.SettingsJobsCache.dnsCacheDescription": "Jellyseerr caches DNS lookups to optimize performance and avoid making unnecessary API calls.",
+ "components.Settings.SettingsJobsCache.dnsCacheDescription": "Seerr caches DNS lookups to optimize performance and avoid making unnecessary API calls.",
"components.Settings.SettingsJobsCache.dnsCacheGlobalStats": "Global DNS Cache Stats",
"components.Settings.SettingsJobsCache.dnsCacheGlobalStatsDescription": "These stats are aggregated across all DNS cache entries.",
"components.Settings.SettingsJobsCache.dnscacheactiveaddress": "Active Address",
@@ -908,7 +911,7 @@
"components.Settings.SettingsJobsCache.hits": "Hits",
"components.Settings.SettingsJobsCache.image-cache-cleanup": "Image Cache Cleanup",
"components.Settings.SettingsJobsCache.imagecache": "Image Cache",
- "components.Settings.SettingsJobsCache.imagecacheDescription": "When enabled in settings, Jellyseerr will proxy and cache images from pre-configured external sources. Cached images are saved into your config folder. You can find the files in {appDataPath}/cache/images.",
+ "components.Settings.SettingsJobsCache.imagecacheDescription": "When enabled in settings, Seerr will proxy and cache images from pre-configured external sources. Cached images are saved into your config folder. You can find the files in {appDataPath}/cache/images.",
"components.Settings.SettingsJobsCache.imagecachecount": "Images Cached",
"components.Settings.SettingsJobsCache.imagecachesize": "Total Cache Size",
"components.Settings.SettingsJobsCache.ipv4Fallbacks": "IPv4 Fallbacks",
@@ -919,7 +922,7 @@
"components.Settings.SettingsJobsCache.jobcancelled": "{jobname} canceled.",
"components.Settings.SettingsJobsCache.jobname": "Job Name",
"components.Settings.SettingsJobsCache.jobs": "Jobs",
- "components.Settings.SettingsJobsCache.jobsDescription": "Jellyseerr performs certain maintenance tasks as regularly-scheduled jobs, but they can also be manually triggered below. Manually running a job will not alter its schedule.",
+ "components.Settings.SettingsJobsCache.jobsDescription": "Seerr performs certain maintenance tasks as regularly-scheduled jobs, but they can also be manually triggered below. Manually running a job will not alter its schedule.",
"components.Settings.SettingsJobsCache.jobsandcache": "Jobs & Cache",
"components.Settings.SettingsJobsCache.jobstarted": "{jobname} started.",
"components.Settings.SettingsJobsCache.jobtype": "Type",
@@ -970,7 +973,7 @@
"components.Settings.SettingsMain.enableSpecialEpisodes": "Allow Special Episodes Requests",
"components.Settings.SettingsMain.general": "General",
"components.Settings.SettingsMain.generalsettings": "General Settings",
- "components.Settings.SettingsMain.generalsettingsDescription": "Configure global and default settings for Jellyseerr.",
+ "components.Settings.SettingsMain.generalsettingsDescription": "Configure global and default settings for Seerr.",
"components.Settings.SettingsMain.hideAvailable": "Hide Available Media",
"components.Settings.SettingsMain.hideAvailableTip": "Hide available media from the discover pages but not search results",
"components.Settings.SettingsMain.hideBlacklisted": "Hide Blacklisted Items",
@@ -1002,11 +1005,11 @@
"components.Settings.SettingsNetwork.dnsCacheTip": "Enable caching of DNS lookups to optimize performance and avoid making unnecessary API calls",
"components.Settings.SettingsNetwork.docs": "documentation",
"components.Settings.SettingsNetwork.forceIpv4First": "Force IPv4 Resolution First",
- "components.Settings.SettingsNetwork.forceIpv4FirstTip": "Force Jellyseerr to resolve IPv4 addresses first instead of IPv6",
+ "components.Settings.SettingsNetwork.forceIpv4FirstTip": "Force Seerr to resolve IPv4 addresses first instead of IPv6",
"components.Settings.SettingsNetwork.network": "Network",
"components.Settings.SettingsNetwork.networkDisclaimer": "Network parameters from your container/system should be used instead of these settings. See the {docs} for more information.",
"components.Settings.SettingsNetwork.networksettings": "Network Settings",
- "components.Settings.SettingsNetwork.networksettingsDescription": "Configure network settings for your Jellyseerr instance.",
+ "components.Settings.SettingsNetwork.networksettingsDescription": "Configure network settings for your Seerr instance.",
"components.Settings.SettingsNetwork.proxyBypassFilter": "Proxy Ignored Addresses",
"components.Settings.SettingsNetwork.proxyBypassFilterTip": "Use ',' as a separator, and '*.' as a wildcard for subdomains",
"components.Settings.SettingsNetwork.proxyBypassLocalAddresses": "Bypass Proxy for Local Addresses",
@@ -1019,7 +1022,7 @@
"components.Settings.SettingsNetwork.toastSettingsFailure": "Something went wrong while saving settings.",
"components.Settings.SettingsNetwork.toastSettingsSuccess": "Settings saved successfully!",
"components.Settings.SettingsNetwork.trustProxy": "Enable Proxy Support",
- "components.Settings.SettingsNetwork.trustProxyTip": "Allow Jellyseerr to correctly register client IP addresses behind a proxy",
+ "components.Settings.SettingsNetwork.trustProxyTip": "Allow Seerr to correctly register client IP addresses behind a proxy",
"components.Settings.SettingsNetwork.validationProxyPort": "You must provide a valid port",
"components.Settings.SettingsUsers.atLeastOneAuth": "At least one authentication method must be selected.",
"components.Settings.SettingsUsers.defaultPermissions": "Default Permissions",
@@ -1033,6 +1036,8 @@
"components.Settings.SettingsUsers.movieRequestLimitLabel": "Global Movie Request Limit",
"components.Settings.SettingsUsers.newPlexLogin": "Enable New {mediaServerName} Sign-In",
"components.Settings.SettingsUsers.newPlexLoginTip": "Allow {mediaServerName} users to sign in without first being imported",
+ "components.Settings.SettingsUsers.oidcLogin": "Enable OpenID Connect Sign-In",
+ "components.Settings.SettingsUsers.oidcLoginTip": "Allow users to sign in using OpenID Connect identity providers",
"components.Settings.SettingsUsers.toastSettingsFailure": "Something went wrong while saving settings.",
"components.Settings.SettingsUsers.toastSettingsSuccess": "User settings saved successfully!",
"components.Settings.SettingsUsers.tvRequestLimitLabel": "Global Series Request Limit",
@@ -1146,8 +1151,8 @@
"components.Settings.jellyfinsettingsDescription": "Configure the settings for your {mediaServerName} server. {mediaServerName} scans your {mediaServerName} libraries to see what content is available.",
"components.Settings.librariesRemaining": "Libraries Remaining: {count}",
"components.Settings.manualscan": "Manual Library Scan",
- "components.Settings.manualscanDescription": "Normally, this will only be run once every 24 hours. Jellyseerr will check your Plex server's recently added more aggressively. If this is your first time configuring Plex, a one-time full manual library scan is recommended!",
- "components.Settings.manualscanDescriptionJellyfin": "Normally, this will only be run once every 24 hours. Jellyseerr will check your {mediaServerName} server's recently added more aggressively. If this is your first time configuring Jellyseerr, a one-time full manual library scan is recommended!",
+ "components.Settings.manualscanDescription": "Normally, this will only be run once every 24 hours. Seerr will check your Plex server's recently added more aggressively. If this is your first time configuring Plex, a one-time full manual library scan is recommended!",
+ "components.Settings.manualscanDescriptionJellyfin": "Normally, this will only be run once every 24 hours. Seerr will check your {mediaServerName} server's recently added more aggressively. If this is your first time configuring Seerr, a one-time full manual library scan is recommended!",
"components.Settings.manualscanJellyfin": "Manual Library Scan",
"components.Settings.mediaTypeMovie": "movie",
"components.Settings.mediaTypeSeries": "series",
@@ -1182,13 +1187,13 @@
"components.Settings.overrideRulesDescription": "Override rules allow you to specify properties that will be replaced if a request matches the rule.",
"components.Settings.plex": "Plex",
"components.Settings.plexlibraries": "Plex Libraries",
- "components.Settings.plexlibrariesDescription": "The libraries Jellyseerr scans for titles. Set up and save your Plex connection settings, then click the button below if no libraries are listed.",
+ "components.Settings.plexlibrariesDescription": "The libraries Seerr scans for titles. Set up and save your Plex connection settings, then click the button below if no libraries are listed.",
"components.Settings.plexsettings": "Plex Settings",
- "components.Settings.plexsettingsDescription": "Configure the settings for your Plex server. Jellyseerr scans your Plex libraries to determine content availability.",
+ "components.Settings.plexsettingsDescription": "Configure the settings for your Plex server. Seerr scans your Plex libraries to determine content availability.",
"components.Settings.port": "Port",
"components.Settings.providerStatus": "Metadata Provider Status",
"components.Settings.radarrsettings": "Radarr Settings",
- "components.Settings.restartrequiredTooltip": "Jellyseerr must be restarted for changes to this setting to take effect",
+ "components.Settings.restartrequiredTooltip": "Seerr must be restarted for changes to this setting to take effect",
"components.Settings.save": "Save Changes",
"components.Settings.saving": "Saving…",
"components.Settings.scan": "Sync Libraries",
@@ -1215,7 +1220,7 @@
"components.Settings.syncing": "Syncing",
"components.Settings.tautulliApiKey": "API Key",
"components.Settings.tautulliSettings": "Tautulli Settings",
- "components.Settings.tautulliSettingsDescription": "Optionally configure the settings for your Tautulli server. Jellyseerr fetches watch history data for your Plex media from Tautulli.",
+ "components.Settings.tautulliSettingsDescription": "Optionally configure the settings for your Tautulli server. Seerr fetches watch history data for your Plex media from Tautulli.",
"components.Settings.timeout": "Timeout",
"components.Settings.tip": "Tip",
"components.Settings.tmdbProviderDoesnotWork": "TMDB provider does not work, please select another metadata provider",
@@ -1260,7 +1265,7 @@
"components.Setup.signinWithJellyfin": "Enter your Jellyfin details",
"components.Setup.signinWithPlex": "Enter your Plex details",
"components.Setup.subtitle": "Get started by choosing your media server",
- "components.Setup.welcome": "Welcome to Jellyseerr",
+ "components.Setup.welcome": "Welcome to Seerr",
"components.StatusBadge.managemedia": "Manage {mediaType}",
"components.StatusBadge.openinarr": "Open in {arr}",
"components.StatusBadge.playonplex": "Play on {mediaServerName}",
@@ -1434,6 +1439,7 @@
"components.UserProfile.UserSettings.UserLinkedAccountsSettings.noPermissionDescription": "You do not have permission to modify this user's linked accounts.",
"components.UserProfile.UserSettings.UserLinkedAccountsSettings.plexErrorExists": "This account is already linked to a Plex user",
"components.UserProfile.UserSettings.UserLinkedAccountsSettings.plexErrorUnauthorized": "Unable to connect to Plex using your credentials",
+ "components.UserProfile.UserSettings.UserNotificationSettings.UserNotificationsWebPush.activesubscription": "Active Subscription",
"components.UserProfile.UserSettings.UserNotificationSettings.UserNotificationsWebPush.browser": "Browser",
"components.UserProfile.UserSettings.UserNotificationSettings.UserNotificationsWebPush.created": "Created",
"components.UserProfile.UserSettings.UserNotificationSettings.UserNotificationsWebPush.deletesubscription": "Delete Subscription",
@@ -1600,5 +1606,33 @@
"pages.pagenotfound": "Page Not Found",
"pages.returnHome": "Return Home",
"pages.serviceunavailable": "Service Unavailable",
- "pages.somethingwentwrong": "Something Went Wrong"
+ "pages.somethingwentwrong": "Something Went Wrong",
+ "settings.settings.SettingsOidc.addoidc": "Add New OpenID Connect Provider",
+ "settings.settings.SettingsOidc.editoidc": "Edit {name}",
+ "settings.settings.SettingsOidc.oidcClientId": "Client ID",
+ "settings.settings.SettingsOidc.oidcClientIdTip": "The Client ID assigned to Jellyseerr",
+ "settings.settings.SettingsOidc.oidcClientSecret": "Client Secret",
+ "settings.settings.SettingsOidc.oidcClientSecretTip": "The Client Secret assigned to Jellyseerr",
+ "settings.settings.SettingsOidc.oidcDomain": "Issuer URL",
+ "settings.settings.SettingsOidc.oidcDomainTip": "The base URL of the identity provider's OpenID Connect endpoint",
+ "settings.settings.SettingsOidc.oidcLogo": "Logo",
+ "settings.settings.SettingsOidc.oidcLogoTip": "The logo to display for the provider. Should be a URL or base64 encoded image",
+ "settings.settings.SettingsOidc.oidcName": "Provider Name",
+ "settings.settings.SettingsOidc.oidcNameTip": "Name of the provider which appears on the login screen",
+ "settings.settings.SettingsOidc.oidcNewUserLogin": "Allow New Users",
+ "settings.settings.SettingsOidc.oidcNewUserLoginTip": "Create accounts for new users logging in with this provider",
+ "settings.settings.SettingsOidc.oidcRequiredClaims": "Required Claims",
+ "settings.settings.SettingsOidc.oidcRequiredClaimsTip": "Comma-separated list of boolean claims that are required to log in",
+ "settings.settings.SettingsOidc.oidcRoleClaim": "Role Claim",
+ "settings.settings.SettingsOidc.oidcRoleClaimTip": "The claim used to grab the roles from the OIDC provider. For Authelia, this is likely groups, unless you have a custom setup",
+ "settings.settings.SettingsOidc.oidcScopes": "Scopes",
+ "settings.settings.SettingsOidc.oidcScopesTip": "Comma-separated list of scopes to request from the provider",
+ "settings.settings.SettingsOidc.oidcSlug": "Provider Slug",
+ "settings.settings.SettingsOidc.oidcSlugTip": "Unique identifier for the provider",
+ "settings.settings.SettingsOidc.oidcUserRoles": "User Roles",
+ "settings.settings.SettingsOidc.oidcUserRolesTip": "Comma-separated list of roles to look for in OIDC response. Used to determine if a login from a user is authorized access.",
+ "settings.settings.SettingsOidc.required": "{field} is required",
+ "settings.settings.SettingsOidc.saveError": "Failed to save OpenID Connect provider configuration",
+ "settings.settings.SettingsOidc.saveSuccess": "OpenID Connect provider saved successfully!",
+ "settings.settings.SettingsOidc.url": "{field} must be a valid URL"
}
diff --git a/src/i18n/locale/es.json b/src/i18n/locale/es.json
index f053bab715..ed087d8ae6 100644
--- a/src/i18n/locale/es.json
+++ b/src/i18n/locale/es.json
@@ -174,7 +174,6 @@
"components.Settings.default4k": "4K predeterminado",
"components.Settings.default": "Predeterminado",
"components.Settings.currentlibrary": "Biblioteca actual: {name}",
- "components.Settings.copied": "Clave API copiada en el portapapeles.",
"components.Settings.cancelscan": "Cancelar Escaneo",
"i18n.deleting": "Eliminando…",
"components.UserList.userdeleteerror": "Algo salió mal al eliminar al usuario.",
@@ -707,8 +706,6 @@
"components.Settings.RadarrModal.enableSearch": "Habilitar Búsqueda Automática",
"components.RequestModal.edit": "Editar Solicitud",
"components.RequestList.RequestItem.editrequest": "Editar Solicitud",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingssaved": "¡Ajustes de notificacion de Web Push guardados con éxito!",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingsfailed": "Fallo al guardar los ajustes de notificaciones de Web Push.",
"components.UserProfile.UserSettings.UserNotificationSettings.webpush": "Web Push",
"components.UserProfile.UserSettings.UserGeneralSettings.applanguage": "Mostrar Idioma",
"components.Settings.webpush": "Web Push",
@@ -743,22 +740,11 @@
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestSuccess": "¡Notificación de prueba de Pushbullet enviada!",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestSending": "Enviando notificación de prueba de Pushbullet…",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestFailed": "Fallo al enviar notificación de prueba de Pushbullet.",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrl": "URL del Webhook",
- "components.Settings.Notifications.NotificationsLunaSea.validationWebhookUrl": "Debes indicar una URL válida",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSuccess": "¡Notificación de LunaSea enviada!",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSending": "Enviando notificación de prueba de LunaSea…",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestFailed": "Fallo al enviar la notificación de prueba de LunaSea.",
- "components.Settings.Notifications.NotificationsLunaSea.settingsSaved": "¡Los ajustes de notificación se han guardado con éxito!",
- "components.Settings.Notifications.NotificationsLunaSea.settingsFailed": "Fallo al guardar los ajustes de notificación de LunaSea.",
- "components.Settings.Notifications.NotificationsLunaSea.profileNameTip": "Requerido solo si no se usa el perfil por default",
- "components.Settings.Notifications.NotificationsLunaSea.profileName": "Nombre de Perfil",
- "components.Settings.Notifications.NotificationsLunaSea.agentenabled": "Habilitar Agente",
"components.PermissionEdit.requestTvDescription": "Conceder permisos para solicitar series que no sean 4k.",
"components.PermissionEdit.requestTv": "Solicitar Series",
"components.PermissionEdit.requestMoviesDescription": "Conceder permisos para solicitar películas que no sean 4K.",
"components.PermissionEdit.requestMovies": "Solicitar películas",
"components.Settings.SettingsAbout.betawarning": "¡Este es un software BETA. Algunas funcionalidades podrían fallar. Por favor, reporta cualquier problema en Github!",
- "components.Settings.Notifications.NotificationsLunaSea.validationTypes": "Debes seleccionar, al menos, un tipo de notificacion",
"components.RequestList.RequestItem.requesteddate": "Solicitado",
"components.RequestCard.failedretry": "Algo fue mal al reintentar la solicitud.",
"components.NotificationTypeSelector.usermediarequestedDescription": "Notificar cuando otros usuarios envíen nuevas solicitudes que requieran aprobación.",
@@ -782,7 +768,6 @@
"components.Settings.Notifications.encryption": "Método de Encriptación",
"components.Settings.Notifications.encryptionDefault": "Usa STARTTLS si está disponible",
"components.Settings.Notifications.encryptionNone": "Ninguna",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrlTip": "Tu URL del webhook de notificación basado en tu usuario o dispositivo",
"components.Settings.Notifications.NotificationsPushbullet.accessTokenTip": "Crea un token desde tu Opciones de Cuenta",
"components.Settings.Notifications.NotificationsPushover.accessTokenTip": "Registrar una aplicación para su uso con Jellyseerr",
"components.Settings.Notifications.NotificationsPushover.userTokenTip": "Tu identificador de usuario o grupo de 30 caracteres",
@@ -1305,7 +1290,6 @@
"components.Login.noadminerror": "No se ha encontrado un usuario administrativo en el servidor.",
"components.Login.orsigninwith": "O inicia sesión con",
"components.Login.port": "Puerto",
- "components.Login.validationHostnameRequired": "Debes proveer un nombre de host o dirección IP válida",
"components.Login.validationPortRequired": "Debes proveer un número de puerto válido",
"components.Blacklist.blacklistSettingsDescription": "Gestionar contenido en la lista negra.",
"components.Blacklist.blacklistdate": "Fecha",
diff --git a/src/i18n/locale/es_MX.json b/src/i18n/locale/es_MX.json
index 7435704116..b93490c6e1 100644
--- a/src/i18n/locale/es_MX.json
+++ b/src/i18n/locale/es_MX.json
@@ -174,7 +174,6 @@
"components.Settings.default4k": "4K predeterminado",
"components.Settings.default": "Predeterminado",
"components.Settings.currentlibrary": "Biblioteca actual: {name}",
- "components.Settings.copied": "Clave API copiada en el portapapeles.",
"components.Settings.cancelscan": "Cancelar Escaneo",
"i18n.deleting": "Eliminando…",
"components.UserList.userdeleteerror": "Algo salió mal al eliminar al usuario.",
@@ -707,8 +706,6 @@
"components.Settings.RadarrModal.enableSearch": "Habilitar Búsqueda Automática",
"components.RequestModal.edit": "Editar Solicitud",
"components.RequestList.RequestItem.editrequest": "Editar Solicitud",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingssaved": "¡Ajustes de notificacion de Web Push guardados con éxito!",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingsfailed": "Fallo al guardar los ajustes de notificaciones de Web Push.",
"components.UserProfile.UserSettings.UserNotificationSettings.webpush": "Web Push",
"components.UserProfile.UserSettings.UserGeneralSettings.applanguage": "Mostrar Idioma",
"components.Settings.webpush": "Web Push",
@@ -743,22 +740,11 @@
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestSuccess": "¡Notificación de prueba de Pushbullet enviada!",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestSending": "Enviando notificación de prueba de Pushbullet…",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestFailed": "Fallo al enviar notificación de prueba de Pushbullet.",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrl": "URL del Webhook",
- "components.Settings.Notifications.NotificationsLunaSea.validationWebhookUrl": "Debes indicar una URL válida",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSuccess": "¡Notificación de LunaSea enviada!",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSending": "Enviando notificación de prueba de LunaSea…",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestFailed": "Fallo al enviar la notificación de prueba de LunaSea.",
- "components.Settings.Notifications.NotificationsLunaSea.settingsSaved": "¡Los ajustes de notificación se han guardado con éxito!",
- "components.Settings.Notifications.NotificationsLunaSea.settingsFailed": "Fallo al guardar los ajustes de notificación de LunaSea.",
- "components.Settings.Notifications.NotificationsLunaSea.profileNameTip": "Requerido solo si no se usa el perfil por default",
- "components.Settings.Notifications.NotificationsLunaSea.profileName": "Nombre de Perfil",
- "components.Settings.Notifications.NotificationsLunaSea.agentenabled": "Habilitar Agente",
"components.PermissionEdit.requestTvDescription": "Conceder permisos para solicitar series que no sean 4k.",
"components.PermissionEdit.requestTv": "Solicitar Series",
"components.PermissionEdit.requestMoviesDescription": "Conceder permisos para solicitar películas que no sean 4K.",
"components.PermissionEdit.requestMovies": "Solicitar películas",
"components.Settings.SettingsAbout.betawarning": "¡Este es un software BETA. Algunas funcionalidades podrían fallar. Por favor, reporta cualquier problema en Github!",
- "components.Settings.Notifications.NotificationsLunaSea.validationTypes": "Debes seleccionar, al menos, un tipo de notificacion",
"components.RequestList.RequestItem.requesteddate": "Solicitado",
"components.RequestCard.failedretry": "Algo fue mal al reintentar la solicitud.",
"components.NotificationTypeSelector.usermediarequestedDescription": "Notificar cuando otros usuarios envíen nuevas solicitudes que requieran aprobación.",
@@ -782,7 +768,6 @@
"components.Settings.Notifications.encryption": "Método de Encriptación",
"components.Settings.Notifications.encryptionDefault": "Usa STARTTLS si está disponible",
"components.Settings.Notifications.encryptionNone": "Ninguna",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrlTip": "Tu URL del webhook de notificación basado en tu usuario o dispositivo",
"components.Settings.Notifications.NotificationsPushbullet.accessTokenTip": "Crea un token desde tu Opciones de Cuenta",
"components.Settings.Notifications.NotificationsPushover.accessTokenTip": "Registrar una aplicación para su uso con Jellyseerr",
"components.Settings.Notifications.NotificationsPushover.userTokenTip": "Tu identificador de usuario o grupo de 30 caracteres",
diff --git a/src/i18n/locale/eu.json b/src/i18n/locale/eu.json
index 144133bf75..996277ce18 100644
--- a/src/i18n/locale/eu.json
+++ b/src/i18n/locale/eu.json
@@ -495,7 +495,6 @@
"components.IssueDetails.IssueComment.areyousuredelete": "Ziur zaude iruzkin hau ezabatu nahi duzula?",
"components.IssueDetails.deleteissueconfirm": "Ziur zaude intzidentzia hau ezabatu nahi duzula?",
"components.Login.adminerror": "Administratzaile kontu bat erabili behar duzu saioa hasteko.",
- "components.Login.validationHostnameRequired": "Baliozko ostalari-izen edo IP helbide bat eman behar duzu",
"components.Login.validationUrlBaseTrailingSlash": "URLa ez du amaierako barra batean amaitu behar",
"components.NotificationTypeSelector.adminissuereopenedDescription": "Jakinarazi beste erabiltzaile batzuek intzidentziak berriro irekitzen dituztenean.",
"components.NotificationTypeSelector.adminissueresolvedDescription": "Jakinarazi beste erabiltzaile batzuek intzidentziak konpontzen dituztenean.",
@@ -643,7 +642,6 @@
"components.UserProfile.UserSettings.UserNotificationSettings.validationDiscordId": "Baliozko erabiltzaile ID bat eman behar duzu",
"components.UserProfile.UserSettings.UserNotificationSettings.validationPushoverApplicationToken": "Baliozko aplikazio token bat eman behar duzu",
"components.UserProfile.UserSettings.UserNotificationSettings.validationTelegramChatId": "Baliozko txat ID bat eman behar duzu",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingsfailed": "Web push jakinarazpenen ezarpenak gordetzeak huts egin du.",
"components.UserProfile.UserSettings.UserPasswordChange.toastSettingsFailure": "Zerbait gaizki joan da pasahitza gordetzean.",
"i18n.removeFromBlacklistSuccess": "{title} zerrenda beltzetik ondo kendu da.",
"i18n.showingresults": "{total}(e)tik {from}(e)tik {to}(e)ra emaitza erakusten",
@@ -652,17 +650,11 @@
"components.IssueDetails.toastissuedeletefailed": "Zerbait gaizki joan da intzidentzia ezabatzean.",
"components.UserProfile.UserSettings.UserGeneralSettings.plexwatchlistsyncseriestip": "Automatikoki eskatu zure Plex jarraipen zerrendan dauden telesailak",
"components.Settings.Notifications.NotificationsGotify.validationTypes": "Gutxienez jakinarazpen mota bat aukeratu behar duzu",
- "components.Settings.Notifications.NotificationsLunaSea.profileNameTip": "Ez da beharrezkoa profil lehenetsia erabiltzen ari bazara",
- "components.Settings.Notifications.NotificationsLunaSea.validationTypes": "Gutxienez jakinarazpen mota bat aukeratu behar duzu",
"components.RequestModal.QuotaDisplay.movielimit": "{limit, plural, one {film} other {film}}",
"components.RequestModal.requestadmin": "Eskaera hau automatikoki onartuko da.",
"components.Settings.Notifications.NotificationsGotify.toastGotifyTestFailed": "Gotify proba jakinarazpena bidaltzeak huts egin du.",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestFailed": "LunaSea proba jakinarazpena bidaltzeak huts egin du.",
- "components.Settings.Notifications.NotificationsLunaSea.validationWebhookUrl": "Baliozko URL bat eman behar duzu",
"components.Settings.Notifications.NotificationsPushbullet.pushbulletSettingsFailed": "Pushbullet jakinarazpen ezarpenak gordetzeak huts egin du.",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrlTip": "Zure erabiltzaile edo gailuan oinarritutako jakinarazpen WebHook URLa",
"components.Settings.Notifications.NotificationsGotify.validationTokenRequired": "Aplikazio token bat eman behar duzu",
- "components.Settings.Notifications.NotificationsLunaSea.settingsFailed": "LunaSea jakinarazpen ezarpenak gordetzeak huts egin du.",
"components.UserProfile.UserSettings.UserNotificationSettings.pushoverApplicationTokenTip": "Erregistratu aplikazio bat {applicationTitle}-(r)ekin erabiltzeko",
"components.Blacklist.blacklistNotFoundError": "{title} ez dago zerrenda beltzean.",
"components.Blacklist.blacklistSettingsDescription": "Kudeatu zerrenda beltzean dagoen multimedia.",
@@ -868,8 +860,6 @@
"components.Settings.Notifications.NotificationsGotify.toastGotifyTestSuccess": "Gotify proba jakinarazpena bidalita!",
"components.Settings.Notifications.NotificationsGotify.token": "Aplikazioaren tokena",
"components.Settings.Notifications.NotificationsGotify.url": "Zerbitzariaren URLa",
- "components.Settings.Notifications.NotificationsLunaSea.agentenabled": "Gaitu agentea",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrl": "Webhook URLa",
"components.Settings.Notifications.NotificationsPushbullet.accessToken": "Sarbide tokena",
"components.Settings.Notifications.NotificationsPushbullet.channelTag": "Kanalaren etiketa",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestSending": "Pushbullet proba jakinarazpena bidaltzen…",
@@ -1105,7 +1095,6 @@
"components.Settings.SonarrModal.validationRootFolderRequired": "Erro karpeta bat hautatu behar duzu",
"components.Settings.SonarrModal.testFirstTags": "Probatu konexioa etiketak kargatzeko",
"components.Settings.SonarrModal.toastSonarrTestFailure": "Sonarr-era konektatzeak huts egin du.",
- "components.Settings.copied": "API gakoa arbelera kopiatuta.",
"components.Settings.hostname": "Ostalari-izena edo IP helbidea",
"components.Settings.addradarr": "Gehitu Radarr zerbitzaria",
"components.Settings.addsonarr": "Gehitu Sonarr zerbitzaria",
@@ -1300,7 +1289,6 @@
"components.UserProfile.UserSettings.UserPasswordChange.currentpassword": "Uneko pasahitza",
"components.UserProfile.UserSettings.UserPasswordChange.newpassword": "Pasahitz berria",
"components.UserProfile.UserSettings.UserNotificationSettings.telegramsettingssaved": "Telegram jakinarazpenen ezarpenak ondo gorde dira!",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingssaved": "Web push jakinarazpen ezarpenak ondo gorde dira!",
"components.UserProfile.UserSettings.UserPasswordChange.toastSettingsSuccess": "Pasahitza ondo gorde da!",
"components.UserProfile.UserSettings.UserPermissions.toastSettingsFailure": "Zerbait gaizki joan da ezarpenak gordetzean.",
"components.UserProfile.UserSettings.UserPermissions.unauthorizedDescription": "Ezin dituzu zure baimenak aldatu.",
@@ -1348,7 +1336,6 @@
"components.RequestModal.QuotaDisplay.notenoughseasonrequests": "Ez dituzu denboraldi nahiko eskaerarik",
"components.Settings.Notifications.NotificationsSlack.webhookUrlTip": "Sortu Sarrera Webhook integrazio bat",
"components.Discover.CreateSlider.providetmdbstudio": "Eman TMDB estudioaren IDa",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSuccess": "LunaSea proba jakinarazpena bidalita!",
"components.Discover.DiscoverTv.sortTmdbRatingAsc": "TMDB puntuazioa gorantz",
"components.Settings.RadarrModal.selectMinimumAvailability": "Hautatu gutxieneko erabilgarritasuna",
"components.Settings.SonarrModal.editsonarr": "Editatu Sonarr zerbitzaria",
@@ -1361,7 +1348,6 @@
"components.Selector.searchGenres": "Hautatu generoak…",
"components.Selector.searchStatus": "Hautatu egoera...",
"components.Selector.showless": "Erakutsi gutxiago",
- "components.Settings.Notifications.NotificationsLunaSea.profileName": "Profilaren izena",
"components.Settings.RadarrModal.rootfolder": "Erro karpeta",
"components.IssueDetails.toasteditdescriptionsuccess": "Intzidentziaren deskribapena ondo editatu da!",
"components.RequestModal.requestedited": "{title}-(e)rako eskaera ondo editatu da!",
@@ -1370,7 +1356,6 @@
"components.RequestModal.requestApproved": "{title} eskaera onartuta!",
"components.RequestModal.requestseries4ktitle": "Eskatu telesaila 4K-n",
"components.Settings.Notifications.NotificationsGotify.toastGotifyTestSending": "Gotify proba jakinarazpena bidaltzen…",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSending": "LunaSea proba jakinarazpena bidaltzen…",
"components.Settings.RadarrModal.hostname": "Ostalari-izena edo IP helbidea",
"components.Discover.DiscoverTv.sortTmdbRatingDesc": "TMDB puntuazioa beherantz",
"components.TvDetails.addtowatchlist": "Gehitu jarraipen zerrendara",
@@ -1386,7 +1371,6 @@
"components.Settings.SettingsMain.toastApiKeySuccess": "API gako berria ondo sortu da!",
"components.TvDetails.episodeRuntime": "Atalaren iraupena",
"components.Settings.Notifications.NotificationsGotify.gotifysettingssaved": "Gotify jakinarazpenen ezarpenak ondo gorde dira!",
- "components.Settings.Notifications.NotificationsLunaSea.settingsSaved": "LunaSea jakinarazpenen ezarpenak ondo gorde dira!",
"components.Settings.OverrideRuleModal.qualityprofile": "Kalitate profila",
"components.Settings.OverrideRuleModal.selectRootFolder": "Hautatu erro-karpeta",
"components.DiscoverTvUpcoming.upcomingtv": "Hurrengo telesailak",
@@ -1428,7 +1412,6 @@
"components.Settings.SettingsNetwork.forceIpv4First": "Behartu IPv4 ebazpena lehen",
"components.Settings.OverrideRuleModal.editrule": "Editatu gainidazte araua",
"components.Settings.OverrideRuleModal.selectQualityProfile": "Hautatu kalitate profila",
- "components.Settings.SettingsNetwork.advancedNetworkSettings": "Sare ezarpen aurreratuak",
"components.Settings.SettingsNetwork.csrfProtection": "Gaitu CSRF babesa",
"components.Settings.OverrideRuleModal.create": "Sortu araua",
"components.Settings.OverrideRuleModal.notagoptions": "Etiketarik ez.",
diff --git a/src/i18n/locale/fi.json b/src/i18n/locale/fi.json
index 83f5cec094..9de03ea5a9 100644
--- a/src/i18n/locale/fi.json
+++ b/src/i18n/locale/fi.json
@@ -72,7 +72,7 @@
"components.Blacklist.blacklistsettings": "Estämisen Asetukset",
"components.Blacklist.mediaName": "Nimi",
"components.Blacklist.mediaType": "Tyyppi",
- "components.Blacklist.mediaTmdbId": "",
+ "components.Blacklist.mediaTmdbId": "tmdb Id",
"components.Discover.DiscoverMovies.sortReleaseDateAsc": "Julkaisupäivä nousevassa järjestyksessä",
"components.Discover.DiscoverMovies.sortTitleAsc": "Otsikko (A-Z) nousevassa järjestyksessä",
"components.Discover.DiscoverMovies.sortTitleDesc": "Otsikko (A-Z) laskevassa järjestyksessä",
@@ -129,7 +129,7 @@
"components.Discover.popularmovies": "Suositut Elokuvat",
"components.Discover.populartv": "Suositut Sarjat",
"components.Discover.recentlyAdded": "Viimeksi Lisätty",
- "components.Discover.recentrequests": "Viimeksi Pyydetty",
+ "components.Discover.recentrequests": "Viimeaikaiset pyynnöt",
"components.Discover.resetsuccess": "Tutustumisen mukautusasetukset tyhjennetty.",
"components.Discover.resettodefault": "Palauta Oletusasetukset",
"components.Discover.resetwarning": "Palauta liukusäätimet. Tämä poistaa myös mukautetut säätimet!",
@@ -192,8 +192,8 @@
"components.IssueList.IssueItem.viewissue": "Näytä ongelma",
"components.IssueList.issues": "Ongelmat",
"components.IssueList.showallissues": "Näytä kaikki ongelmat",
- "components.IssueList.sortAdded": "Viimeisin lisätty",
- "components.IssueList.sortModified": "Viimeisin muokattu",
+ "components.IssueList.sortAdded": "Uusin",
+ "components.IssueList.sortModified": "Viimeksi muokattu",
"components.IssueModal.CreateIssueModal.allepisodes": "Kaikki jaksot",
"components.IssueModal.CreateIssueModal.allseasons": "Kaikki kaudet",
"components.IssueModal.CreateIssueModal.extras": "Ekstrat",
@@ -245,5 +245,277 @@
"i18n.requesting": "Pyydetään…",
"i18n.requested": "Pyydetty",
"i18n.request4k": "Pyydä 4K:na",
- "i18n.request": "Pyydä"
+ "i18n.request": "Pyydä",
+ "components.DiscoverTvUpcoming.upcomingtv": "Tulossa olevat sarjat",
+ "components.ManageSlideOver.manageModalRequests": "Pyynnöt",
+ "i18n.usersettings": "Käyttäjäasetukset",
+ "i18n.view": "Näytä",
+ "i18n.save": "Tallenna muutokset",
+ "i18n.unavailable": "Ei saatavilla",
+ "i18n.tvshows": "Sarjat",
+ "i18n.tvshow": "Sarja",
+ "i18n.testing": "Kokeillaan…",
+ "i18n.test": "Kokeile",
+ "i18n.status": "Tila",
+ "i18n.specials": "Erikoisjaksot",
+ "i18n.settings": "Asetukset",
+ "i18n.saving": "Tallennetaan…",
+ "i18n.movies": "Elokuvat",
+ "components.MovieDetails.addtowatchlist": "Lisää katselulistalle",
+ "i18n.loading": "Ladataan…",
+ "i18n.available": "Saatavilla",
+ "components.UserProfile.recentrequests": "Viimeaikaiset pyynnöt",
+ "i18n.cancel": "Peruuta",
+ "i18n.blacklist": "Estolista",
+ "components.Discover.DiscoverTv.activefilters": "{count, plural, one {# Aktiivinen suodatin} other {# Aktiivista suodatinta}}",
+ "components.Discover.DiscoverMovies.activefilters": "{count, plural, one {# Aktiivinen suodatin} other {# Aktiivista suodatinta}}",
+ "components.MovieDetails.overviewunavailable": "Yhteenveto ei saatavilla.",
+ "components.Login.signingin": "Kirjaudutaan sisään…",
+ "components.MovieDetails.digitalrelease": "Digitaalinen julkaisu",
+ "components.Login.description": "Koska tämä on ensimmäinen kirjautumisesi sovellukseen {applicationName}, sinun täytyy lisätä toimiva sähköpostiosoite.",
+ "components.Login.noadminerror": "Järjestelmänvalvojan käyttäjää ei löytynyt palvelimelta.",
+ "components.Login.username": "Käyttäjänimi",
+ "components.ManageSlideOver.manageModalClearMediaWarning": "* Tämä poistaa peruuttamattomasti kaikki tämän {mediaType}-kohteen tiedot, mukaan lukien kaikki pyynnöt. Jos tämä kohde on {mediaServerName}-kirjastossasi, mediatiedot luodaan uudelleen seuraavan skannauksen aikana.",
+ "components.ManageSlideOver.manageModalAdvanced": "Lisäasetukset",
+ "components.Login.password": "Salasana",
+ "components.Login.port": "Portti",
+ "components.Login.save": "Lisää",
+ "components.Login.saving": "Lisätään…",
+ "components.Login.servertype": "Palvelimen tyyppi",
+ "components.Login.signin": "Kirjaudu sisään",
+ "components.Login.signinheader": "Kirjaudu sisään jatkaaksesi",
+ "components.Login.email": "Sähköpostiosoite",
+ "components.Login.emailtooltip": "Osoitteen ei tarvitse olla liitettynä {mediaServerName}-instanssiisi.",
+ "components.Login.enablessl": "Käytä SSL",
+ "components.Login.forgotpassword": "Unohtuiko salasana?",
+ "components.Login.hostname": "{mediaServerName} URL-osoite",
+ "components.Login.initialsignin": "Yhdistä",
+ "components.Login.initialsigningin": "Yhdistetään…",
+ "components.Login.invalidurlerror": "Yhdistäminen palvelimeen {mediaServerName} ei onnistunut.",
+ "components.Login.loginerror": "Jotain meni pieleen kirjautumisessa.",
+ "components.Login.loginwithapp": "Kirjaudu sisään sovelluksella {appName}",
+ "components.Login.orsigninwith": "Tai kirjaudu sisään käyttäen",
+ "components.Login.signinwithjellyfin": "Käytä palvelimesi {mediaServerName} tiliä",
+ "components.Login.signinwithoverseerr": "Käytä {applicationTitle}-tiliä",
+ "components.Login.signinwithplex": "Käytä Plex-tiliäsi",
+ "components.Login.title": "Lisää sähköposti",
+ "components.ManageSlideOver.downloadstatus": "Lataukset",
+ "components.ManageSlideOver.manageModalMedia": "Media",
+ "components.ManageSlideOver.manageModalNoRequests": "Ei pyyntöjä.",
+ "components.ManageSlideOver.markavailable": "Merkitse saatavilla",
+ "components.ManageSlideOver.openarr": "Avaa ohjelmassa {arr}",
+ "components.ManageSlideOver.openarr4k": "Avaa ohjelmassa 4K {arr}",
+ "components.ManageSlideOver.opentautulli": "Avaa Tautullissa",
+ "components.ManageSlideOver.playedby": "Toistanut",
+ "components.ManageSlideOver.tvshow": "sarja",
+ "components.MediaSlider.ShowMoreCard.seemore": "Näytä lisää",
+ "components.Login.urlBase": "URL-osoitteen pohja",
+ "components.Login.validationEmailFormat": "Virheellinen sähköposti",
+ "components.Login.validationEmailRequired": "Sinun täytyy antaa sähköposti",
+ "components.Login.validationPortRequired": "Sinun täytyy antaa toimiva portin numero",
+ "components.Login.validationemailformat": "Toimiva sähköposti vaaditaan",
+ "components.Login.validationemailrequired": "Sinun täytyy antaa toimiva sähköpostiosoite",
+ "components.Login.validationhostformat": "Toimiva URL-osoite vaaditaan",
+ "components.Login.validationhostrequired": "{mediaServerName} URL vaaditaan",
+ "components.Login.validationpasswordrequired": "Sinun täytyy antaa salasana",
+ "components.Login.validationservertyperequired": "Valitse palvelimen tyyppi",
+ "components.Login.validationusernamerequired": "Käyttäjänimi vaaditaan",
+ "components.ManageSlideOver.alltime": "Koko ajan",
+ "components.ManageSlideOver.manageModalClearMedia": "Tyhjennä Data",
+ "components.ManageSlideOver.manageModalIssues": "Avoimet ongelmat",
+ "components.ManageSlideOver.manageModalMedia4k": "4K Media",
+ "components.ManageSlideOver.manageModalRemoveMediaWarning": "* Tämä poistaa tämän {mediaType}-tiedoston peruuttamattomasti ohjelmasta {arr}, kaikki tiedostot mukaan lukien.",
+ "components.ManageSlideOver.manageModalTitle": "Hallinnoi {mediaType}",
+ "components.ManageSlideOver.mark4kavailable": "Merkitse saatavilla olevaksi 4K-laadulla",
+ "components.ManageSlideOver.markallseasons4kavailable": "Merkitse kaikki tuotantokaudet saataville 4K-laadulla",
+ "components.ManageSlideOver.markallseasonsavailable": "Merkitse kaikki tuotantokaudet saataville",
+ "components.ManageSlideOver.removearr": "Poista ohjelmasta {arr}",
+ "components.MovieDetails.budget": "Budjetti",
+ "components.MovieDetails.cast": "Näyttelijät",
+ "components.MovieDetails.downloadstatus": "Latauksen tila",
+ "components.MovieDetails.markavailable": "Merkitse saatavilla",
+ "components.MovieDetails.openradarr": "Avaa elokuva ohjelmassa Radarr",
+ "components.MovieDetails.openradarr4k": "Avaa elokuva ohjelmassa 4K Radarr",
+ "components.MovieDetails.originallanguage": "Alkuperäinen kieli",
+ "components.MovieDetails.originaltitle": "Alkuperäinen nimi",
+ "components.MovieDetails.overview": "Yhteenveto",
+ "components.MovieDetails.physicalrelease": "Fyysinen julkaisu",
+ "i18n.areyousure": "Oletko varma?",
+ "i18n.back": "Takaisin",
+ "i18n.approve": "Hyväksy",
+ "i18n.all": "Kaikki",
+ "i18n.advanced": "Lisäasetukset",
+ "i18n.addToBlacklist": "Lisää estolistalle",
+ "i18n.approved": "Hyväksytty",
+ "components.UserProfile.requestsperdays": "{limit} jäljellä",
+ "i18n.movie": "Elokuva",
+ "i18n.importing": "Tuodaan…",
+ "i18n.import": "Tuo",
+ "i18n.failed": "Epäonnistui",
+ "i18n.experimental": "Kokeellinen",
+ "i18n.edit": "Muokkaa",
+ "i18n.deleting": "Poistetaan…",
+ "i18n.delete": "Poista",
+ "i18n.next": "Seuraava",
+ "i18n.decline": "Hylkää",
+ "i18n.collection": "Kokoelma",
+ "i18n.close": "Sulje",
+ "i18n.canceling": "Perutaan…",
+ "i18n.declined": "Hylätty",
+ "components.Discover.FilterSlideover.activefilters": "{count, plural, one {# Aktiivinen suodatin} other {# Aktiivista suodatinta}}",
+ "components.IssueList.IssueItem.episodes": "{episodeCount, plural, one {Jakso} other {Jaksoa}}",
+ "components.IssueList.IssueItem.seasons": "{seasonCount, plural, one {Tuotantokausi} other {Tuotantokautta}}",
+ "components.ManageSlideOver.movie": "elokuva",
+ "components.UserProfile.recentlywatched": "Viimeaikaiset katselut",
+ "components.UserProfile.plexwatchlist": "Plex-katselulista",
+ "components.NotificationTypeSelector.mediaapprovedDescription": "Lähetä ilmoituksia, kun mediapyyntöjä hyväksytään manuaalisesti.",
+ "components.NotificationTypeSelector.mediaapproved": "Pyyntö hyväksytty",
+ "i18n.pending": "Odottaa",
+ "components.Layout.VersionStatus.streamdevelop": "Jellyseerr kehittäjä",
+ "components.Layout.VersionStatus.streamstable": "Jellyseerr vakaa",
+ "i18n.partiallyavailable": "Osittain saatavilla",
+ "i18n.previous": "Edellinen",
+ "i18n.processing": "Käsitellään",
+ "i18n.removeFromBlacklistSuccess": "{title} poistettiin onnistuneesti estolistalta.",
+ "i18n.removefromBlacklist": "Poista estolistalta",
+ "components.Settings.SonarrModal.validationApplicationUrlTrailingSlash": "URL-osoite ei saa päättyä kauttaviivaan",
+ "components.NotificationTypeSelector.mediaautorequestedDescription": "Saat ilmoituksen, kun seurantalistallasi oleville kohteille lähetetään automaattisesti uusia mediapyyntöjä.",
+ "components.QuotaSelector.days": "{count, plural, one {päivä} other {päivää}}",
+ "components.Settings.mediaTypeMovie": "elokuva",
+ "components.TvDetails.recommendations": "Suositukset",
+ "components.Selector.showmore": "Näytä lisää",
+ "components.Settings.validationUrlBaseTrailingSlash": "URL-osoitteen pohja ei saa päättyä kauttaviivaan",
+ "components.PersonDetails.alsoknownas": "Tunnetaan myös nimeltä: {names}",
+ "components.Settings.RadarrModal.validationBaseUrlLeadingSlash": "URL-osoitteen pohjassa on oltava alussa kauttaviiva",
+ "components.RequestCard.approverequest": "Hyväksy pyyntö",
+ "components.RequestModal.cancel": "Peruuta pyyntö",
+ "components.Settings.validationUrlBaseLeadingSlash": "URL-osoitteen pohjassa on oltava alussa kauttaviiva",
+ "components.Settings.RadarrModal.validationApplicationUrlTrailingSlash": "URL-osoite ei saa päättyä kauttaviivaan",
+ "components.QuotaSelector.unlimited": "Rajoittamaton",
+ "components.RequestBlock.decline": "Hylkää pyyntö",
+ "components.RequestModal.errorediting": "Pyyntöä muokattaessa tapahtui virhe.",
+ "components.Settings.Notifications.NotificationsGotify.validationUrlTrailingSlash": "URL-osoite ei saa päättyä kauttaviivaan",
+ "components.RequestList.RequestItem.failedretry": "Jotain meni pieleen, kun pyyntöä yritettiin uudelleen.",
+ "components.NotificationTypeSelector.mediaAutoApproved": "Pyyntö hyväksytään automaattisesti",
+ "components.RequestCard.seasons": "{seasonCount, plural, one {Tuotantokausi} other {Tuotantokautta}}",
+ "components.RequestBlock.seasons": "{seasonCount, plural, one {Tuotantokausi} other {Tuotantokautta}}",
+ "components.RequestList.RequestItem.seasons": "{seasonCount, plural, one {Tuotantokausi} other {Tuotantokautta}}",
+ "components.RequestButton.approve4krequests": "Hyväksy {requestCount, plural, one {4K Pyyntö} other {{requestCount} 4K Pyyntöä}}",
+ "components.PersonDetails.lifespan": "{birthdate} – {deathdate}",
+ "components.PermissionEdit.request": "Pyydä",
+ "components.ManageSlideOver.removearr4k": "Poista ohjelmasta 4K {arr}",
+ "components.Login.validationUrlBaseLeadingSlash": "URL-osoitteen pohjassa on oltava alussa kauttaviiva",
+ "components.Login.validationUrlBaseTrailingSlash": "URL-osoitteen pohja ei saa päättyä kauttaviivaan",
+ "components.Login.validationUrlTrailingSlash": "URL-osoite ei saa päättyä kauttaviivaan",
+ "components.ManageSlideOver.plays": "{playCount, number} {playCount, plural, one {toisto} other {toistoa}}",
+ "components.MovieDetails.recommendations": "Suositukset",
+ "components.MovieDetails.MovieCast.fullcast": "Kaikki näyttelijät",
+ "components.MovieDetails.managemovie": "Hallinnoi elokuvaa",
+ "components.MovieDetails.imdbuserscore": "IMDB-käyttäjän pisteet",
+ "components.MovieDetails.mark4kavailable": "Merkitse saatavilla olevaksi 4K-laadulla",
+ "components.MovieDetails.play": "Toista kohteessa {mediaServerName}",
+ "components.MovieDetails.play4k": "Toista 4K kohteessa {mediaServerName}",
+ "components.MovieDetails.productioncountries": "Tuotanto {countryCount, plural, one {Maa} other {Maata}}",
+ "components.MovieDetails.releasedate": "{releaseCount, plural, one {Julkaisupäivä} other {Julkaisupäivää}}",
+ "components.MovieDetails.removefromwatchlist": "Poista katselulistalta",
+ "components.MovieDetails.reportissue": "Ilmoita ongelmasta",
+ "components.MovieDetails.revenue": "Tulot",
+ "components.MovieDetails.rtaudiencescore": "Rotten Tomatoesin yleisöpisteet",
+ "components.MovieDetails.rtcriticsscore": "Rotten Tomatoes -tomaattimittari",
+ "components.MovieDetails.runtime": "{minutes} minuuttia",
+ "components.MovieDetails.showless": "Näytä vähemmän",
+ "components.MovieDetails.showmore": "Näytä lisää",
+ "components.MovieDetails.similar": "Samankaltaisia nimikkeitä",
+ "components.MovieDetails.streamingproviders": "Suoratoistettavat palvelut",
+ "components.MovieDetails.studio": "{studioCount, plural, one {Studio} other {Studiota}}",
+ "components.MovieDetails.theatricalrelease": "Teatterijulkaisu",
+ "components.MovieDetails.tmdbuserscore": "TMDB-käyttäjän pisteet",
+ "components.MovieDetails.viewfullcrew": "Näytä koko ryhmä",
+ "components.MovieDetails.MovieCrew.fullcrew": "Koko ryhmä",
+ "components.MovieDetails.watchlistDeleted": "{title} Poistettiin katselulistalta onnistuneesti!",
+ "components.MovieDetails.watchlistError": "Jotain meni pieleen. Yritä uudelleen.",
+ "components.MovieDetails.watchlistSuccess": "{title} lisättiin katselulistalle onnistuneesti!",
+ "components.MovieDetails.watchtrailer": "Katso traileri",
+ "components.NotificationTypeSelector.adminissuecommentDescription": "Saat ilmoituksen, kun muut käyttäjät kommentoivat ongelmia.",
+ "components.NotificationTypeSelector.adminissuereopenedDescription": "Saat ilmoituksen, kun muut käyttäjät avaavat ongelmia uudelleen.",
+ "components.NotificationTypeSelector.adminissueresolvedDescription": "Saat ilmoituksen, kun muut käyttäjät ovat ratkaisseet ongelmia.",
+ "components.NotificationTypeSelector.issuecomment": "Ongelman kommentti",
+ "components.NotificationTypeSelector.issuecommentDescription": "Lähetä ilmoituksia, kun ongelmiin tulee uusia kommentteja.",
+ "components.NotificationTypeSelector.issuecreated": "Ongelma ilmoitettu",
+ "components.NotificationTypeSelector.issuecreatedDescription": "Lähetä ilmoituksia, kun ongelmista ilmoitetaan.",
+ "components.NotificationTypeSelector.issuereopened": "Ongelma avattu uudelleen",
+ "components.NotificationTypeSelector.issuereopenedDescription": "Lähetä ilmoituksia, kun ongelmia avataan uudelleen.",
+ "components.NotificationTypeSelector.issueresolved": "Ongelma ratkaistu",
+ "components.NotificationTypeSelector.issueresolvedDescription": "Lähetä ilmoituksia, kun ongelmat on ratkaistu.",
+ "components.NotificationTypeSelector.mediaAutoApprovedDescription": "Lähetä ilmoituksia, kun käyttäjät lähettävät uusia mediapyyntöjä, jotka hyväksytään automaattisesti.",
+ "components.NotificationTypeSelector.mediaautorequested": "Pyyntö lähetetty automaattisesti",
+ "components.NotificationTypeSelector.mediaavailable": "Pyyntö saatavilla",
+ "components.NotificationTypeSelector.mediaavailableDescription": "Lähetä ilmoituksia, kun mediapyyntöjä tulee saataville.",
+ "components.NotificationTypeSelector.mediadeclined": "Pyyntö hylätty",
+ "components.NotificationTypeSelector.mediadeclinedDescription": "Lähetä ilmoituksia, kun mediapyyntöjä hylätään.",
+ "components.NotificationTypeSelector.notificationTypes": "Ilmoitustyypit",
+ "components.PersonDetails.appearsin": "Esiintymiset",
+ "components.PersonDetails.ascharacter": "hahmona {character}",
+ "components.PersonDetails.birthdate": "Syntynyt {birthdate}",
+ "components.PermissionEdit.request4k": "Pyydä 4K-laadulla",
+ "components.RegionSelector.regionDefault": "Kaikki alueet",
+ "components.RegionSelector.regionServerDefault": "Oletus ({region})",
+ "components.RequestBlock.approve": "Hyväksy pyyntö",
+ "components.RequestBlock.delete": "Poista pyyntö",
+ "components.RequestBlock.edit": "Muokkaa pyyntöä",
+ "components.RequestBlock.languageprofile": "Kieliprofiili",
+ "components.RequestBlock.lastmodifiedby": "Viimeksi muokannut",
+ "components.RequestBlock.profilechanged": "Laatuprofiili",
+ "components.RequestBlock.requestdate": "Pyyntöpäivämäärä",
+ "components.RequestBlock.requestedby": "Pyytäjä",
+ "components.RequestBlock.requestoverrides": "Pyyntöjen ohitukset",
+ "components.RequestBlock.rootfolder": "Juurikansio",
+ "components.RequestBlock.server": "Kohdepalvelin",
+ "components.RequestButton.approverequest": "Hyväksy pyyntö",
+ "components.RequestButton.approverequest4k": "Hyväksy 4K Pyyntö",
+ "components.RequestButton.declinerequest": "Hylkää pyyntö",
+ "components.RequestButton.declinerequest4k": "Hylkää 4K Pyyntö",
+ "components.RequestButton.requestmore": "Pyydä lisää",
+ "components.RequestButton.requestmore4k": "Pyydä lisää 4K-laadulla",
+ "components.RequestButton.viewrequest": "Näytä pyyntö",
+ "components.RequestButton.viewrequest4k": "Näytä 4K Pyyntö",
+ "components.RequestCard.cancelrequest": "Peruuta pyyntö",
+ "components.RequestCard.declinerequest": "Hylkää pyyntö",
+ "components.RequestCard.deleterequest": "Poista pyyntö",
+ "components.RequestCard.editrequest": "Muokkaa pyyntöä",
+ "components.RequestCard.failedretry": "Jotain meni pieleen uudelleenpyytäessä.",
+ "components.RequestCard.mediaerror": "{mediaType} Ei löydy",
+ "components.RequestCard.tmdbid": "TMDB ID",
+ "components.RequestCard.tvdbid": "TheTVDB ID",
+ "components.RequestCard.unknowntitle": "Tuntematon nimike",
+ "components.RequestList.RequestItem.cancelRequest": "Peruuta pyyntö",
+ "components.RequestList.RequestItem.deleterequest": "Poista pyyntö",
+ "components.RequestList.RequestItem.editrequest": "Muokkaa pyyntöä",
+ "components.RequestList.RequestItem.mediaerror": "{mediaType} Ei löydy",
+ "components.RequestList.RequestItem.modified": "Muokattu",
+ "components.RequestList.RequestItem.modifieduserdate": "{date} käyttäjältä {user}",
+ "components.RequestList.RequestItem.profileName": "Profiili",
+ "components.RequestList.RequestItem.removearr": "Poista ohjelmasta {arr}",
+ "components.RequestList.RequestItem.requested": "Pyydetty",
+ "components.RequestList.RequestItem.requesteddate": "Pyydetty",
+ "components.RequestList.RequestItem.tmdbid": "TMDB ID",
+ "components.RequestList.RequestItem.tvdbid": "TheTVDB ID",
+ "components.RequestList.RequestItem.unknowntitle": "Tuntematon nimike",
+ "components.RequestList.requests": "Pyynnöt",
+ "components.RequestList.showallrequests": "Näytä kaikki pyynnöt",
+ "components.RequestList.sortAdded": "Uusin",
+ "components.RequestList.sortModified": "Viimeksi muokattu",
+ "components.RequestModal.AdvancedRequester.advancedoptions": "Lisäasetukset",
+ "components.RequestModal.QuotaDisplay.movie": "elokuva",
+ "components.RequestModal.edit": "Muokkaa pyyntöä",
+ "components.RequestModal.requestcollectiontitle": "Pyydä kokoelma",
+ "components.RequestModal.pendingrequest": "Odottava pyyntö",
+ "components.RequestModal.approve": "Hyväksy pyyntö",
+ "components.RequestModal.autoapproval": "Automaattinen hyväksyntä",
+ "components.RequestModal.alreadyrequested": "Pyydetty jo",
+ "components.Settings.RadarrModal.validationBaseUrlTrailingSlash": "URL-osoitteen pohja ei saa päättyä kauttaviivaan",
+ "components.Settings.SettingsAbout.about": "Tietoja",
+ "components.Settings.SonarrModal.validationBaseUrlLeadingSlash": "URL-osoitteen alussa on oltava kauttaviiva",
+ "components.Settings.mediaTypeSeries": "sarja",
+ "components.Settings.menuAbout": "Tietoja"
}
diff --git a/src/i18n/locale/fr.json b/src/i18n/locale/fr.json
index 5b918bb927..99ed0e0001 100644
--- a/src/i18n/locale/fr.json
+++ b/src/i18n/locale/fr.json
@@ -211,7 +211,6 @@
"components.Settings.address": "Adresse",
"components.Settings.addsonarr": "Ajouter un serveur Sonarr",
"components.Settings.cancelscan": "Annuler le scan",
- "components.Settings.copied": "Clé d'API copiée dans le presse-papier.",
"components.Settings.currentlibrary": "Bibliothèque actuelle : {name}",
"components.Settings.default": "Par défaut",
"components.Settings.default4k": "4K par défaut",
@@ -807,21 +806,11 @@
"components.Settings.Notifications.NotificationsWebPush.webpushsettingssaved": "Les paramètres de la notification Web push ont été enregistrés avec succès !",
"components.Settings.Notifications.NotificationsWebPush.webpushsettingsfailed": "Les paramètres de la notification Web push n'ont pas été enregistrés.",
"components.Settings.Notifications.NotificationsWebPush.agentenabled": "Activer l'agent",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrl": "URL de webhook",
- "components.Settings.Notifications.NotificationsLunaSea.validationWebhookUrl": "Vous devez fournir une URL valide",
- "components.Settings.Notifications.NotificationsLunaSea.settingsSaved": "Paramètres de notification de LunaSea sauvegardés avec succès !",
- "components.Settings.Notifications.NotificationsLunaSea.settingsFailed": "Les paramètres de notification LunaSea n'ont pas pu être enregistrés.",
- "components.Settings.Notifications.NotificationsLunaSea.profileNameTip": "Uniquement nécessaire si vous n'utilisez pas le profil default",
- "components.Settings.Notifications.NotificationsLunaSea.profileName": "Nom du Profil",
- "components.Settings.Notifications.NotificationsLunaSea.agentenabled": "Activer l'agent",
"components.PermissionEdit.requestMoviesDescription": "Autorise à demander des films non-4K.",
"components.Settings.Notifications.NotificationsWebhook.toastWebhookTestFailed": "La notification de test Web Push n’a pas été envoyée.",
"components.PermissionEdit.requestMovies": "Demander des films",
"components.PermissionEdit.requestTv": "Demander des séries",
"components.PermissionEdit.requestTvDescription": "Autorise à demander des séries non-4K.",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSuccess": "Notification test LunaSea envoyée !",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSending": "Envoi de la notification test LunaSea…",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestFailed": "L'envoi de la notification test LunaSea a échoué.",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestSending": "Envoi de la notification test Pushbullet…",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestFailed": "L'envoi de la notification test Pushbullet a échoué.",
"components.Settings.Notifications.toastTelegramTestFailed": "L'envoi de la notification test à Telegram a échoué.",
@@ -840,7 +829,6 @@
"components.Settings.Notifications.NotificationsPushover.accessTokenTip": "Enregistrer une application à utiliser avec Jellyseerr",
"components.RequestList.RequestItem.requesteddate": "Demandé",
"components.RequestCard.failedretry": "Une erreur s'est produite lors du renvoi de la demande.",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingssaved": "Paramètres de notification Web Push enregistrés avec succès !",
"components.Settings.Notifications.NotificationsWebPush.toastWebPushTestSuccess": "Notification de test web push envoyée !",
"components.Settings.Notifications.NotificationsWebPush.toastWebPushTestSending": "Envoi d'une notification de test web push…",
"components.Settings.Notifications.NotificationsWebPush.httpsRequirement": "Afin de recevoir des notifications push web, Jellyseerr doit fonctionner en HTTPS.",
@@ -851,13 +839,11 @@
"components.Settings.Notifications.NotificationsSlack.toastSlackTestSending": "Envoi de la notification test Slack…",
"components.Settings.Notifications.NotificationsSlack.toastSlackTestFailed": "L'envoi de la notification test Slack a échoué.",
"components.Settings.Notifications.NotificationsPushbullet.accessTokenTip": "Créer un jeton à partir de vos paramètres de compte",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrlTip": "Votre URL de webhook de notification basée sur l'utilisateur ou l'appareil",
"components.QuotaSelector.seasons": "{count, plural, one {saison} other {saisons}}",
"components.QuotaSelector.movies": "{count, plural, one {film} other {films}}",
"components.QuotaSelector.movieRequests": "{quotaLimit} {movies} tous les {quotaDays} {days}",
"components.QuotaSelector.days": "{count, plural, one {jour} other {jours}}",
"components.Settings.SettingsAbout.betawarning": "Ceci est un logiciel BÊTA. Les fonctionnalités peuvent être non opérationnelles ou instables. Veuillez signaler tout problème sur GitHub !",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingsfailed": "Échec de l'enregistrement des paramètres de notification Web push.",
"components.UserProfile.UserSettings.UserGeneralSettings.languageDefault": "Langage par défaut ({language})",
"components.Settings.webAppUrlTip": "Dirigez éventuellement les utilisateurs vers l'application Web sur votre serveur au lieu de l'application Web « hébergée »",
"components.Settings.webAppUrl": "URL Application Web",
@@ -883,7 +869,6 @@
"components.Settings.Notifications.NotificationsSlack.validationTypes": "Vous devez sélectionner au moins un type de notification",
"components.Settings.Notifications.NotificationsPushover.validationTypes": "Vous devez sélectionner au moins un type de notification",
"components.Settings.Notifications.NotificationsPushbullet.validationTypes": "Vous devez sélectionner au moins un type de notification",
- "components.Settings.Notifications.NotificationsLunaSea.validationTypes": "Vous devez sélectionner au moins un type de notification",
"components.QuotaSelector.tvRequests": "{quotaLimit} {seasons} tous les {quotaDays} {days}",
"components.NotificationTypeSelector.usermediarequestedDescription": "Être averti(e) lorsque d'autres utilisateurs soumettent une demande de média qui nécessite une validation.",
"components.NotificationTypeSelector.usermediafailedDescription": "Être averti(e) lorsqu'une demande de média n'a pas pu être ajoutée à Radarr ou Sonarr.",
@@ -1304,7 +1289,6 @@
"components.Login.hostname": "URL de {mediaServerName}",
"components.Login.port": "Port",
"components.Login.urlBase": "URL de base",
- "components.Login.validationHostnameRequired": "Vous devez fournir un nom d'hôte ou une adresse IP valide",
"components.Login.validationPortRequired": "Vous devez fournir un numéro de port valide",
"components.Login.validationUrlBaseLeadingSlash": "L'URL de base doit avoir une barre oblique initiale",
"components.Login.validationUrlTrailingSlash": "L'URL ne doit pas se terminer par une barre oblique finale",
@@ -1330,7 +1314,7 @@
"components.Selector.inProduction": "En production",
"components.Selector.pilot": "Pilote",
"components.Selector.planned": "Planifié(e)",
- "components.Selector.returningSeries": "Séries de retour",
+ "components.Selector.returningSeries": "Série de retour",
"components.Selector.searchStatus": "Sélectionner statut...",
"components.Setup.back": "Retourner en arrière",
"components.Setup.configemby": "Configurer Emby",
@@ -1394,7 +1378,6 @@
"components.Settings.OverrideRuleModal.selectQualityProfile": "Choisir le profil de qualité",
"components.Settings.OverrideRuleModal.selectRootFolder": "Choisir le dossier racine",
"components.Settings.SettingsNetwork.networksettings": "Paramètres réseau",
- "components.Settings.SettingsNetwork.advancedNetworkSettings": "Paramètres réseau avancés",
"components.DiscoverTvUpcoming.upcomingtv": "Séries à venir",
"components.Login.noadminerror": "Aucun compte administrateur trouvé sur ce serveur.",
"components.Login.orsigninwith": "Ou se connecter avec",
diff --git a/src/i18n/locale/he.json b/src/i18n/locale/he.json
index 8902f46928..868d833bc2 100644
--- a/src/i18n/locale/he.json
+++ b/src/i18n/locale/he.json
@@ -1,6 +1,6 @@
{
"components.ManageSlideOver.alltime": "כל הזמנים",
- "components.Login.validationemailrequired": "יש לספק מייל חוקי",
+ "components.Login.validationemailrequired": "יש לספק כתובת מייל תקינה",
"components.NotificationTypeSelector.userissuereopenedDescription": "קבל התראה כשבעיות שפתחת נפתחות מחדש.",
"components.AppDataWarning.dockerVolumeMissingDescription": "ה {appDataPath} אחסון לא הוגדר כראוי. כל המידע יוסר כאשר הקונטיינר יעצור או יותחל מחדש.",
"components.CollectionDetails.overview": "תצוגה כללית",
@@ -98,7 +98,7 @@
"components.IssueDetails.toaststatusupdated": "סטאטוס המקרה עודכן בהצלחה!",
"components.IssueDetails.toaststatusupdatefailed": "משהו השתבש בזמן עדכון סטאטוס המקרה.",
"components.IssueDetails.unknownissuetype": "לא ידוע",
- "components.IssueList.IssueItem.issuestatus": "סטאטוס",
+ "components.IssueList.IssueItem.issuestatus": "סטטוס",
"components.IssueList.IssueItem.unknownissuetype": "לא ידוע",
"components.IssueList.IssueItem.viewissue": "צפה במקרה",
"components.IssueList.issues": "מקרים",
@@ -148,8 +148,8 @@
"components.Discover.CreateSlider.searchKeywords": "חפש מילות מפתח…",
"components.Discover.CreateSlider.searchStudios": "חפש אולפנים…",
"components.Discover.CreateSlider.slidernameplaceholder": "שם הסליידר",
- "components.Discover.CreateSlider.validationDatarequired": "עליך לספק ערך.",
- "components.Discover.CreateSlider.validationTitlerequired": "עליך לספק כותר.",
+ "components.Discover.CreateSlider.validationDatarequired": "יש לספק ערך.",
+ "components.Discover.CreateSlider.validationTitlerequired": "יש לספק כותרת.",
"components.Discover.DiscoverMovieKeyword.keywordMovies": "סרטים {keywordTitle}",
"components.Discover.DiscoverMovies.discovermovies": "סרטים",
"components.Discover.DiscoverMovies.sortPopularityAsc": "פופולריות בסדר עולה",
@@ -190,7 +190,7 @@
"components.Discover.CreateSlider.addsuccess": "סליידר חדש נוצר בהצלחה ונשמרו הגדרות התאמה.",
"components.Discover.CreateSlider.providetmdbnetwork": "ספק מזהה רשת TMDB",
"components.Discover.DiscoverTv.sortFirstAirDateDesc": "תאריך שידור ראשון בסדר יורד",
- "components.Discover.CreateSlider.starttyping": "התחל להזין כדי לחפש.",
+ "components.Discover.CreateSlider.starttyping": "התחל להקליד כדי לחפש.",
"components.Discover.FilterSlideover.runtimeText": "זמן ריצה בין {minValue} ל {maxValue}",
"components.Discover.DiscoverMovies.activefilters": "{count, plural, one {פילטר פעיל} other {# פילטרים פעילים}}",
"components.Discover.DiscoverSliderEdit.deletefail": "כשל במחיקת סליידר.",
@@ -357,7 +357,6 @@
"components.PermissionEdit.autoapproveSeriesDescription": "אישור בקשות סדרות אוטומטי (ללא 4K).",
"component.BlacklistBlock.blacklistdate": "תאריך חסימה",
"components.Login.hostname": "{mediaServerName} כתובת URL",
- "components.Login.validationHostnameRequired": "עליך להזין שם מארח או כתובת IP תקינה",
"components.Login.validationUrlBaseTrailingSlash": "בסיס ה-URL לא יכול להסתיים בסלאש",
"components.MovieDetails.watchlistSuccess": "{title} נוסף לרשימת הצפייה בהצלחה!",
"components.NotificationTypeSelector.usermediaAutoApprovedDescription": "קבלת התראות כאשר משתמשים אחרים מגישים בקשות מדיה חדשות אשר מאושרות אוטומטית.",
@@ -387,10 +386,9 @@
"components.Selector.canceled": "בוטל",
"components.Selector.ended": "נגמר",
"components.Selector.searchStudios": "חיפוש אולפנים…",
- "components.Settings.Notifications.NotificationsGotify.validationTokenRequired": "עליך לספק אסימון יישום",
- "components.Settings.Notifications.NotificationsLunaSea.agentenabled": "הפעל סוכן",
+ "components.Settings.Notifications.NotificationsGotify.validationTokenRequired": "יש לספק אסימון יישום",
"components.Settings.Notifications.NotificationsSlack.slacksettingsfailed": "הגדרות ההתראות של Slack נכשלו להישמר.",
- "components.Settings.Notifications.NotificationsSlack.validationWebhookUrl": "עליך לספק כתובת URL תקינה",
+ "components.Settings.Notifications.NotificationsSlack.validationWebhookUrl": "יש לספק כתובת URL תקינה",
"components.Layout.Sidebar.blacklist": "רשימת חסימות",
"components.Login.back": "חזרה",
"components.PermissionEdit.viewissuesDescription": "הענקת גישה לראות בעיות מדיה שדווחו על ידי משתמשים אחרים.",
@@ -400,10 +398,9 @@
"components.RequestModal.pending4krequest": "בקשת 4K ממתינה",
"components.RequestModal.requestedited": "בקשה עבור {title} נערכה בהצלחה!",
"components.Settings.Notifications.NotificationsGotify.gotifysettingsfailed": "הגדרות ההתראות של Gotify נכשלו להישמר.",
- "components.Settings.Notifications.NotificationsLunaSea.validationWebhookUrl": "עליך לספק כתובת URL תקינה",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestSending": "שולח התראת בדיקה של Pushbullet…",
"components.Settings.Notifications.NotificationsPushover.userTokenTip": "מזהה המשתמש או הקבוצה בעל ה-30 תווים שלך",
- "components.Login.adminerror": "עליך להשתמש בחשבון מנהל בשביל להתחבר.",
+ "components.Login.adminerror": "יש להשתמש בחשבון מנהל בשביל להתחבר.",
"components.NotificationTypeSelector.userissueresolvedDescription": "קבלת התראות כאשר הבעיות שדיווחת נפתרות.",
"components.Discover.FilterSlideover.status": "סטטוס",
"components.PermissionEdit.blacklistedItemsDescription": "הענקת גישה לחסימת מדיה.",
@@ -412,9 +409,8 @@
"components.ResetPassword.validationpasswordrequired": "יש לספק סיסמה",
"components.Selector.inProduction": "בהפקה",
"components.Selector.pilot": "פרק דוגמה",
- "components.Settings.Notifications.NotificationsLunaSea.settingsSaved": "הגדרות ההתראות של LunaSea נשמרו בהצלחה!",
"components.Settings.Notifications.NotificationsPushbullet.accessTokenTip": "יצירת אסימון מתוך הגדרות המשתמש שלך",
- "components.Settings.Notifications.NotificationsPushbullet.validationAccessTokenRequired": "עליך לספק אסימון גישה",
+ "components.Settings.Notifications.NotificationsPushbullet.validationAccessTokenRequired": "יש לספק אסימון גישה",
"components.PermissionEdit.manageblacklistDescription": "הענקת גישה לניהול מדיה חסומה.",
"components.PersonDetails.appearsin": "מופעים",
"components.RequestCard.tmdbid": "מזהה TMDB",
@@ -427,7 +423,7 @@
"components.Login.port": "פורט",
"components.Login.servertype": "סוג שרת",
"components.Login.urlBase": "בסיס URL",
- "components.Login.validationPortRequired": "עליך להזין מספר פורט תקין",
+ "components.Login.validationPortRequired": "יש לספק מספר פורט תקין",
"components.Login.validationUrlBaseLeadingSlash": "בסיס ה-URL חייב להתחיל בסלאש",
"components.Login.validationUrlTrailingSlash": "ה-URL לא יכול להסתיים בסלאש",
"components.Login.validationservertyperequired": "אנא בחר סוג שרת",
@@ -594,14 +590,6 @@
"components.Settings.Notifications.NotificationsGotify.toastGotifyTestFailed": "התראת הבדיקה של Gotify נכשלה להשלח.",
"components.Settings.Notifications.NotificationsGotify.toastGotifyTestSending": "שולח התראת בדיקה של Gotify…",
"components.Settings.Notifications.NotificationsGotify.toastGotifyTestSuccess": "התראת הבדיקה של Gotify נשלחה!",
- "components.Settings.Notifications.NotificationsLunaSea.profileName": "שם פרופיל",
- "components.Settings.Notifications.NotificationsLunaSea.profileNameTip": "רק דרוש אם הפרופיל default לא בשימוש",
- "components.Settings.Notifications.NotificationsLunaSea.settingsFailed": "הגדרות ההתראות של LunaSea נכשלו להישמר.",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestFailed": "התראת הבדיקה של LunaSea נכשלה להשלח.",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSending": "שולח התראת בדיקה של LunaSea…",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSuccess": "התראת הבדיקה של LunaSea נשלחה!",
- "components.Settings.Notifications.NotificationsLunaSea.validationTypes": "עליך לבחור לפחות סוג התראות אחד",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrl": "URL של ה-Webhook",
"components.Settings.Notifications.NotificationsPushbullet.accessToken": "אסימון גישה",
"components.Settings.Notifications.NotificationsPushbullet.agentEnabled": "הפעל סוכן",
"components.Settings.Notifications.NotificationsPushbullet.channelTag": "תג ערוץ",
@@ -609,23 +597,23 @@
"components.Settings.Notifications.NotificationsPushbullet.pushbulletSettingsSaved": "הגדרות ההתראות של Pushbullet נשמרו בהצלחה!",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestFailed": "התראת הבדיקה של Pushbullet נכשלה להשלח.",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestSuccess": "התראת הבדיקה של Pushbullet נשלחה!",
- "components.Settings.Notifications.NotificationsPushbullet.validationTypes": "עליך לבחור לפחות סוג התראה אחד",
+ "components.Settings.Notifications.NotificationsPushbullet.validationTypes": "יש לבחור לפחות סוג התראה אחד",
"components.Settings.Notifications.NotificationsPushover.toastPushoverTestFailed": "התראת הבדיקה של Pushover נכשלה להשלח.",
"components.Settings.Notifications.NotificationsPushover.toastPushoverTestSending": "שולח התראת בדיקה של Pushover…",
"components.Settings.Notifications.NotificationsPushover.toastPushoverTestSuccess": "התראת הבדיקה של Pushover נשלחה!",
"components.Settings.Notifications.NotificationsPushover.userToken": "מפתח משתמש או קבוצה",
- "components.Settings.Notifications.NotificationsPushover.validationAccessTokenRequired": "עליך לספק אסימון יישום תקין",
- "components.Settings.Notifications.NotificationsPushover.validationTypes": "עליך לבחור לפחות סוג התראה אחד",
- "components.Settings.Notifications.NotificationsPushover.validationUserTokenRequired": "עליך לספק משתמש או מפתח קבוצה תקין",
+ "components.Settings.Notifications.NotificationsPushover.validationAccessTokenRequired": "יש לספק אסימון יישום תקין",
+ "components.Settings.Notifications.NotificationsPushover.validationTypes": "יש לבחור לפחות סוג התראה אחד",
+ "components.Settings.Notifications.NotificationsPushover.validationUserTokenRequired": "יש לספק משתמש או מפתח קבוצה תקין",
"components.Settings.Notifications.NotificationsSlack.agentenabled": "הפעל סוכן",
"components.Settings.Notifications.NotificationsSlack.slacksettingssaved": "הגדרות ההתראות של Slack נשמרו בהצלחה!",
"components.Settings.Notifications.NotificationsSlack.toastSlackTestFailed": "התראת הבדיקה של Slack נכשלה להשלח.",
"components.Settings.Notifications.NotificationsSlack.toastSlackTestSending": "שולח התראת בדיקה של Slack…",
"components.Settings.Notifications.NotificationsSlack.toastSlackTestSuccess": "התראת הבדיקה של Slack נשלחה!",
- "components.Settings.Notifications.NotificationsSlack.validationTypes": "עליך לבחור לפחות סוג התראה אחד",
+ "components.Settings.Notifications.NotificationsSlack.validationTypes": "יש לבחור לפחות סוג התראה אחד",
"components.Settings.Notifications.NotificationsSlack.webhookUrl": "URL של ה-Webhook",
"component.BlacklistModal.blacklisting": "חסימה",
- "components.Blacklist.blacklistNotFoundError": "{title} לא חסום.",
+ "components.Blacklist.blacklistNotFoundError": "{title} לא ברשימת החסימה.",
"components.Blacklist.blacklistSettingsDescription": "ניהול מדיה חסומה.",
"components.Blacklist.blacklistdate": "תאריך",
"components.Blacklist.blacklistedby": "{date} על ידי {user}",
@@ -644,8 +632,8 @@
"components.RequestModal.QuotaDisplay.movie": "סרט",
"components.Settings.Notifications.NotificationsGotify.token": "אסימון יישום",
"components.Settings.Notifications.NotificationsGotify.url": "כתובת URL של שרת",
- "components.Settings.Notifications.NotificationsGotify.validationTypes": "עליך לבחור לפחות סוג התראות אחד",
- "components.Settings.Notifications.NotificationsGotify.validationUrlRequired": "עליך לספק כתובת URL תקינה",
+ "components.Settings.Notifications.NotificationsGotify.validationTypes": "יש לבחור לפחות סוג התראות אחד",
+ "components.Settings.Notifications.NotificationsGotify.validationUrlRequired": "יש לספק כתובת URL תקינה",
"components.Settings.Notifications.NotificationsGotify.validationUrlTrailingSlash": "על כתובת ה-URL לא להסתיים בסלאש",
"components.Settings.Notifications.NotificationsPushover.accessToken": "אסימון API של היישום",
"components.Settings.Notifications.NotificationsPushover.agentenabled": "הפעל סוכן",
@@ -654,19 +642,119 @@
"components.Settings.Notifications.NotificationsPushover.pushoversettingssaved": "הגדרות ההתראות של Pushover נשמרו בהצלחה!",
"components.Settings.Notifications.NotificationsPushover.sound": "צליל התראה",
"components.Settings.Notifications.NotificationsWebhook.resetPayload": "איפוס לברירת מחדל",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrlTip": "קישור Webhook להתראות מבוסס מכשיר או משתמש",
"components.Settings.Notifications.NotificationsWebhook.agentenabled": "הפעל סוכן",
"components.Settings.Notifications.NotificationsWebhook.authheader": "כותרת עליונה של הרשאות",
"components.Settings.Notifications.NotificationsWebhook.customJson": "מטען JSON",
"components.Settings.Notifications.NotificationsWebhook.resetPayloadSuccess": "מטען JSON התאפס בהצלחה!",
"components.Settings.Notifications.NotificationsWebhook.toastWebhookTestSuccess": "התראת הבדיקה של ה-Webhook נשלחה!",
- "components.Settings.Notifications.NotificationsWebhook.validationJsonPayloadRequired": "עליך לספק מטען JSON תקין",
- "components.Settings.Notifications.NotificationsWebhook.validationTypes": "עליך לבחור לפחות סוג התראה אחד",
- "components.Settings.Notifications.NotificationsWebhook.validationWebhookUrl": "עליך לספק כתובת URL תקינה",
+ "components.Settings.Notifications.NotificationsWebhook.validationJsonPayloadRequired": "יש לספק מטען JSON תקין",
+ "components.Settings.Notifications.NotificationsWebhook.validationTypes": "יש לבחור לפחות סוג התראה אחד",
+ "components.Settings.Notifications.NotificationsWebhook.validationWebhookUrl": "יש לספק כתובת URL תקינה",
"components.Settings.Notifications.NotificationsWebhook.webhookUrl": "URL של ה-Webhook",
"components.Settings.Notifications.NotificationsWebhook.webhooksettingsfailed": "הגדרות ההתראות של ה-Webhook נכשלו להשמר.",
"components.Settings.Notifications.NotificationsWebhook.webhooksettingssaved": "הגדרות ההתראות של ה-Webhook נשמרו בהצלחה!",
"components.Settings.Notifications.NotificationsWebPush.agentenabled": "הפעל סוכן",
"components.Settings.Notifications.NotificationsWebhook.toastWebhookTestFailed": "התראת הבדיקה של ה-Webhook נכשלה להשלח.",
- "components.Settings.Notifications.NotificationsWebhook.toastWebhookTestSending": "שולח התראת בדיקה של ה-Webhook…"
+ "components.Settings.Notifications.NotificationsWebhook.toastWebhookTestSending": "שולח התראת בדיקה של ה-Webhook…",
+ "components.Settings.Notifications.NotificationsWebPush.httpsRequirement": "על מנת לקבל התראות אינטרנט, על Jellyseerr להיות מוגש בעזרת HTTPS.",
+ "components.Settings.Notifications.NotificationsWebhook.templatevariablehelp": "תבנית משתנה עזרה",
+ "i18n.noresults": "אין תוצאות.",
+ "i18n.removefromBlacklist": "הסרה מרשימת החסימה",
+ "i18n.removeFromBlacklistSuccess": "{title} הוסר בהצלחה מרשימת החסימה.",
+ "i18n.requested": "התבקש",
+ "i18n.notrequested": "לא נתבקש",
+ "i18n.open": "פתוח",
+ "i18n.partiallyavailable": "זמין חלקית",
+ "i18n.pending": "ממתין",
+ "i18n.previous": "קודם",
+ "i18n.processing": "מעבד",
+ "i18n.request": "בקשה",
+ "i18n.request4k": "בקשה ב-4K",
+ "i18n.requesting": "מבקש…",
+ "i18n.resolved": "נפתר",
+ "i18n.restartRequired": "נדרשת הפעלה מחדש",
+ "i18n.resultsperpage": "הצג {pageSize} תוצאות בכל דף",
+ "i18n.retry": "נסה שוב",
+ "i18n.retrying": "מנסה שוב…",
+ "i18n.save": "שמירת שינויים",
+ "i18n.saving": "שומר…",
+ "i18n.settings": "הגדרות",
+ "i18n.showingresults": "מציג {from} ל-{to} מתוך {total} תוצאות",
+ "i18n.specials": "פרקים מיוחדים",
+ "i18n.status": "סטטוס",
+ "i18n.test": "בדיקה",
+ "i18n.testing": "בודק…",
+ "i18n.tvshow": "סדרה",
+ "i18n.tvshows": "סדרות",
+ "i18n.unavailable": "לא זמין",
+ "i18n.usersettings": "הגדרות משתמש",
+ "pages.errormessagewithcode": "{statusCode} - {error}",
+ "pages.internalservererror": "שגיאת שרת פנימית",
+ "pages.oops": "אופס",
+ "pages.pagenotfound": "דף לא נמצא",
+ "pages.returnHome": "חזרה לדף הבית",
+ "pages.serviceunavailable": "שירות לא זמין",
+ "pages.somethingwentwrong": "משהו השתבש",
+ "components.Settings.Notifications.NotificationsWebPush.toastWebPushTestFailed": "התראת הבדיקה דרך הרשת נכשלה להשלח.",
+ "components.Settings.Notifications.NotificationsWebPush.webpushsettingssaved": "הגדרות ההתראות דרך הרשת נשמרו בהצלחה!",
+ "components.Settings.SonarrModal.hostname": "שם מארח או כתובת IP",
+ "components.Settings.Notifications.validationSmtpPortRequired": "יש לספק מספר פורט תקין",
+ "components.Settings.Notifications.botAvatarUrl": "כתובת URL של תמונת הבוט",
+ "components.Settings.Notifications.botUsername": "שם משתמש של הבוט",
+ "components.Settings.Notifications.pgpPasswordTip": "חתימת הודעות אי-מייל מוצפנות בעזרת OpenPGP",
+ "components.Settings.RadarrModal.hostname": "שם מארח או כתובת IP",
+ "components.Settings.Notifications.chatIdTip": "התחל שיחה עם הבוט שלך, הוסף @get_id_bot, ובצע את הפקודה /my_id",
+ "components.Settings.Notifications.encryptionDefault": "שימוש ב-STARTTLS אם זמין",
+ "components.Settings.Notifications.toastDiscordTestSuccess": "התראת בדיקה של Discord נשלחה!",
+ "components.Settings.validationHostnameRequired": "יש לספק שם מארח או כתובת IP תקינה",
+ "components.Settings.Notifications.encryptionTip": "ברוב המקרים, Implicit TLS משתמש בפורט 465 ו-STARTTLS משתמש בפורט 587",
+ "components.Settings.SonarrModal.validationHostnameRequired": "יש לספק שם מארח או כתובת IP תקינה",
+ "components.Settings.Notifications.toastDiscordTestSending": "שולח התראת בדיקה של Discord…",
+ "components.Settings.Notifications.toastTelegramTestFailed": "התראת הבדיקה של Telegram נכשלה להשלח.",
+ "components.Settings.Notifications.validationChatIdRequired": "יש לספק מזהה צ'אט תקין",
+ "components.Settings.SettingsNetwork.proxyHostname": "שם מארח Proxy",
+ "components.Settings.RadarrModal.validationHostnameRequired": "יש לספק שם מארח או כתובת IP תקינה",
+ "components.Settings.hostname": "שם מארח או כתובת IP",
+ "components.Settings.Notifications.NotificationsWebPush.toastWebPushTestSending": "שולח התראת בדיקה דרך הרשת…",
+ "components.Settings.Notifications.NotificationsWebPush.toastWebPushTestSuccess": "התראת הבדיקה דרך הרשת נשלחה!",
+ "components.Settings.Notifications.NotificationsWebPush.webpushsettingsfailed": "הגדרות ההתראות דרך הרשת נכשלו להשמר.",
+ "components.Settings.Notifications.agentenabled": "הפעל סוכן",
+ "components.Settings.Notifications.authPass": "סיסמת SMTP",
+ "components.Settings.Notifications.authUser": "שם משתמש SMTP",
+ "components.Settings.Notifications.botAPI": "אסימון הרשאת בוט",
+ "components.Settings.Notifications.botApiTip": "יצירת בוט לשימוש עם Jellyseerr",
+ "components.Settings.Notifications.botUsernameTip": "אפשר למשתמשים גם להתחיל שיחה עם הבוט שלך ולהגדיר התראות אישיות",
+ "components.Settings.Notifications.discordsettingsfailed": "הגדרות ההתראות של Discord נכשלו להשמר.",
+ "components.Settings.Notifications.discordsettingssaved": "הגדרות ההתראות של Discord נשמרו בהצלחה!",
+ "components.Settings.Notifications.emailsender": "כתובת מוען",
+ "components.Settings.Notifications.emailsettingsfailed": "הגדרות התראות ה-Email נכשלו להשמר.",
+ "components.Settings.Notifications.emailsettingssaved": "הגדרות התראות ה-Email נשמרו בהצלחה!",
+ "components.Settings.Notifications.enableMentions": "הפעל תיוגים",
+ "components.Settings.Notifications.encryption": "שיטת הצפנה",
+ "components.Settings.Notifications.encryptionImplicitTls": "שימוש ב Implicit TLS",
+ "components.Settings.Notifications.encryptionNone": "ללא",
+ "components.Settings.Notifications.encryptionOpportunisticTls": "תמיד השתמש ב-STARTTLS",
+ "components.Settings.Notifications.pgpPassword": "סיסמת PGP",
+ "components.Settings.Notifications.pgpPrivateKey": "מפתח PGP פרטי",
+ "components.Settings.Notifications.sendSilentlyTip": "שליחת התראות ללא קול",
+ "components.Settings.Notifications.sendSilently": "שליחה בשקט",
+ "components.Settings.Notifications.toastEmailTestFailed": "התראת הבדיקה דרך אימייל נכשלה להשלח.",
+ "components.Settings.Notifications.toastEmailTestSending": "שולח התראת בדיקה דרך אימייל…",
+ "components.Settings.Notifications.toastEmailTestSuccess": "התראת בדיקה דרך אימייל נשלחה בהצלחה!",
+ "components.Settings.Notifications.toastTelegramTestSuccess": "התראת הבדיקה של Telegram נשלחה!",
+ "components.Settings.Notifications.toastTelegramTestSending": "שולח התראת בדיקה של Telegram…",
+ "components.Settings.Notifications.userEmailRequired": "דרוש אימייל משתמש",
+ "components.Settings.Notifications.validationPgpPassword": "יש לספק סיסמת PGP",
+ "components.Settings.Notifications.validationBotAPIRequired": "יש לספק אסימון הרשאת בוט",
+ "components.Settings.Notifications.validationEmail": "יש לספק כתובת מייל תקינה",
+ "components.Settings.Notifications.validationPgpPrivateKey": "יש לספק מפתח PGP פרטי תקין",
+ "components.Settings.Notifications.validationSmtpHostRequired": "יש לספק שם מארח או כתובת IP תקינה",
+ "components.Settings.Notifications.validationTypes": "יש לבחור לפחות סוג התראות אחד",
+ "components.Settings.Notifications.validationUrl": "יש לספק כתובת URL תקינה",
+ "components.Settings.Notifications.webhookUrl": "URL של ה-Webhook",
+ "components.Settings.Notifications.chatId": "מזהה צ'אט",
+ "i18n.addToBlacklist": "הוספה לרשימת החסימות",
+ "i18n.blacklistDuplicateError": "{title} כבר נוסף לרשימת החסימה.",
+ "i18n.blacklistSuccess": "{title} נוסף לרשימת החסימה בהצלחה.",
+ "i18n.blacklisted": "חסום"
}
diff --git a/src/i18n/locale/hr.json b/src/i18n/locale/hr.json
index 44572d3241..f17ec31dad 100644
--- a/src/i18n/locale/hr.json
+++ b/src/i18n/locale/hr.json
@@ -340,7 +340,6 @@
"components.Settings.addradarr": "Dodaj Radarr poslužitelj",
"components.Settings.address": "Adresa",
"components.Settings.addsonarr": "Dodaj Sonarr poslužitelj",
- "components.Settings.copied": "API ključ je kopiran u međuspremnik.",
"components.Settings.currentlibrary": "Aktualna biblioteka: {name}",
"components.Settings.default": "Zadano",
"components.Settings.default4k": "Zadano 4K",
@@ -598,15 +597,8 @@
"components.Settings.Notifications.NotificationsGotify.toastGotifyTestSending": "Slanje Gotify obavijesti provjere …",
"components.Settings.Notifications.NotificationsGotify.toastGotifyTestSuccess": "Gotify obavijest provjere je poslana!",
"components.Settings.Notifications.NotificationsGotify.token": "Token programa",
- "components.Settings.Notifications.NotificationsLunaSea.agentenabled": "Aktiviraj agenta",
"components.Settings.Notifications.NotificationsGotify.url": "URL poslužitelja",
"components.Settings.Notifications.NotificationsGotify.validationUrlTrailingSlash": "URL ne smije završiti s kosom crtom",
- "components.Settings.Notifications.NotificationsLunaSea.profileName": "Ime profila",
- "components.Settings.Notifications.NotificationsLunaSea.profileNameTip": "Potrebno je samo ako se ne koristi zadani profil",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestFailed": "Neuspjelo slanje LunaSea obavijesti provjere.",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSending": "Slanje LunaSea obavijesti provjere …",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSuccess": "LunaSea obavijest provjere je poslana!",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrl": "Webhook URL",
"components.Settings.Notifications.NotificationsPushbullet.accessToken": "Token za pristup",
"components.Settings.Notifications.NotificationsPushbullet.pushbulletSettingsFailed": "Neuspjelo spremanje postavki Pushbullet obavijesti.",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestFailed": "Neuspjelo slanje Pushbullet obavijesti provjere.",
@@ -792,10 +784,6 @@
"components.Settings.Notifications.NotificationsGotify.validationTokenRequired": "Moraš navesti token programa",
"components.Settings.Notifications.NotificationsGotify.validationTypes": "Moraš odabrati barem jednu vrstu obavijesti",
"components.Settings.Notifications.NotificationsGotify.validationUrlRequired": "Moraš navesti valjani URL",
- "components.Settings.Notifications.NotificationsLunaSea.settingsFailed": "Neuspjelo spremanje postavki LunaSea obavijesti.",
- "components.Settings.Notifications.NotificationsLunaSea.settingsSaved": "LunaSea postavke obavijesti su uspješno spremljene!",
- "components.Settings.Notifications.NotificationsLunaSea.validationTypes": "Moraš odabrati barem jednu vrstu obavijesti",
- "components.Settings.Notifications.NotificationsLunaSea.validationWebhookUrl": "Moraš navesti valjani URL",
"components.Settings.Notifications.NotificationsPushbullet.accessTokenTip": "Stvori token iz tvojih postavki računa",
"components.Settings.Notifications.NotificationsPushbullet.agentEnabled": "Aktiviraj agenta",
"components.Settings.Notifications.NotificationsPushbullet.channelTag": "Oznaka kanala",
@@ -992,8 +980,6 @@
"components.UserProfile.UserSettings.UserNotificationSettings.validationPushbulletAccessToken": "Moraš navesti valjani token za pristup",
"components.UserProfile.UserSettings.UserNotificationSettings.validationPushoverApplicationToken": "Moraš navesti valjani token programa",
"components.UserProfile.UserSettings.UserNotificationSettings.validationPushoverUserKey": "Moraš navesti valjani ključ korisnika ili grupe",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingsfailed": "Neuspjelo spremanje Web push postavki obavijesti.",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingssaved": "Web push postavke obavijesti su uspješno spremljene!",
"components.UserProfile.UserSettings.UserPasswordChange.confirmpassword": "Potvrdi lozinku",
"components.UserProfile.UserSettings.UserPasswordChange.newpassword": "Nova lozinka",
"components.UserProfile.UserSettings.UserPasswordChange.validationConfirmPassword": "Moraš potvrditi novu lozinku",
@@ -1057,7 +1043,6 @@
"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 odobriti.",
"components.ResetPassword.emailresetlink": "E-mail poveznica za obnavljanje lozinke",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrlTip": "Tvoj korisničke ili na osnovi uređaja webhook URL obavijesti",
"components.Settings.Notifications.NotificationsWebPush.httpsRequirement": "Za primanje web push obavijesti, Jellyseerr se mora posluživati putem HTTPS-a.",
"components.Settings.Notifications.NotificationsWebhook.templatevariablehelp": "Pomoć za varijablu predloška",
"components.Settings.Notifications.chatIdTip": "Započni chat s tvojim botom, dodaj @get_id_bot i zadaj naredbu /my_id",
diff --git a/src/i18n/locale/hu.json b/src/i18n/locale/hu.json
index b491a95a26..5be406a647 100644
--- a/src/i18n/locale/hu.json
+++ b/src/i18n/locale/hu.json
@@ -217,8 +217,6 @@
"components.UserProfile.UserSettings.UserPasswordChange.newpassword": "Új jelszó",
"components.UserProfile.UserSettings.UserPasswordChange.currentpassword": "Jelenlegi jelszó",
"components.UserProfile.UserSettings.UserPasswordChange.confirmpassword": "Jelszó megerősítése",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingssaved": "A webes push értesítés beállításai sikeresen mentésre kerültek!",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingsfailed": "A webes push-értesítés beállításait nem sikerült elmenteni.",
"components.UserProfile.UserSettings.UserNotificationSettings.webpush": "Web Push",
"components.UserProfile.UserSettings.UserNotificationSettings.validationTelegramChatId": "Meg kell adnia egy érvényes chat azonosítót",
"components.UserProfile.UserSettings.UserNotificationSettings.validationPgpPublicKey": "Érvényes PGP- kulcsot kell megadnia",
@@ -343,7 +341,6 @@
"components.Settings.default4k": "Alapértelmezett 4K",
"components.Settings.default": "Alapértelmezett",
"components.Settings.currentlibrary": "Jelenlegi könyvtár: {name}",
- "components.Settings.copied": "API-kulcs másolva a vágólapra.",
"components.Settings.cancelscan": "Beolvasás megszakítása",
"components.Settings.addsonarr": "Sonarr szerver hozzáadása",
"components.Settings.address": "Cím",
@@ -755,7 +752,6 @@
"components.Settings.SettingsUsers.newPlexLoginTip": "Lehetővé teszi a {mediaServerName} felhasználók számára, hogy első importálás nélkül jelentkezzenek be",
"components.Settings.SettingsUsers.newPlexLogin": "Engedélyezze az új {mediaServerName} bejelentkezést",
"components.QuotaSelector.tvRequests": "{quotaLimit} {seasons} per {quotaDays} {days}",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrl": "Webhook URL-je",
"components.RequestModal.QuotaDisplay.allowedRequests": "Napi {limit} {type} kérés engedélyezett minden {days} naponta.",
"components.Settings.Notifications.NotificationsSlack.agentenabled": "\"ügynök\" engedélyezése",
"components.Settings.Notifications.NotificationsPushover.validationUserTokenRequired": "Meg kell adnia egy érvényes felhasználói vagy csoportos kulcsot",
@@ -779,17 +775,6 @@
"components.Settings.Notifications.NotificationsPushbullet.agentEnabled": "Agent engedélyezése",
"components.Settings.Notifications.NotificationsPushbullet.accessTokenTip": "Hozzon létre egy Tokent a Fiók beállításokba",
"components.Settings.Notifications.NotificationsPushbullet.accessToken": "Hozzáférési Token (Access Token)",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrlTip": "Felhasználói vagy eszközalapú értesitési webhook URL",
- "components.Settings.Notifications.NotificationsLunaSea.validationWebhookUrl": "Érvényes URL-t kell megadnia",
- "components.Settings.Notifications.NotificationsLunaSea.validationTypes": "Legalább egy értesítési típust ki kell választania",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSuccess": "A LunaSea teszt értesítése elküldve!",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSending": "LunaSea teszt értesítés küldése …",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestFailed": "A LunaSea teszt értesítését nem sikerült elküldeni.",
- "components.Settings.Notifications.NotificationsLunaSea.settingsSaved": "A LunaSea értesítési beállításainak mentése sikerült!",
- "components.Settings.Notifications.NotificationsLunaSea.settingsFailed": "A LunaSea értesítési beállításainak mentése nem sikerült.",
- "components.Settings.Notifications.NotificationsLunaSea.profileNameTip": "Csak akkor szükséges, ha nem használja a default profil",
- "components.Settings.Notifications.NotificationsLunaSea.profileName": "Profil név",
- "components.Settings.Notifications.NotificationsLunaSea.agentenabled": "\"Ügynök\" engedélyezése",
"components.Search.search": "Keresés",
"components.ResetPassword.validationpasswordrequired": "Meg kell adnia egy jelszót",
"components.ResetPassword.validationpasswordminchars": "A jelszó túl rövid; minimum 8 karakter hosszú legyen",
@@ -979,7 +964,7 @@
"components.RequestCard.cancelrequest": "Kérés visszavonása",
"components.RequestCard.declinerequest": "Kérelem elutasítása",
"components.RequestCard.editrequest": "Kérelem szerkesztése",
- "components.Discover.DiscoverWatchlist.discoverwatchlist": "",
+ "components.Discover.DiscoverWatchlist.discoverwatchlist": "Saját Watchlist",
"components.PermissionEdit.autorequest": "Automatikus kérés",
"components.NotificationTypeSelector.mediaautorequested": "A kérelem automatikusan elküldve",
"components.MovieDetails.reportissue": "Probléma bejelentése",
@@ -1145,5 +1130,58 @@
"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"
+ "components.Discover.FilterSlideover.streamingservices": "Streaming Szolgáltatók",
+ "component.BlacklistBlock.blacklistdate": "Feketelistás dátum",
+ "components.Discover.resetsuccess": "A felfedezés testreszabási beállításainak visszaállítása sikeresen megtörtént.",
+ "components.DownloadBlock.formattedTitle": "{title}: {seasonNumber}. Évad {episodeNumber}. Rész",
+ "components.Layout.Sidebar.blacklist": "Feketelista",
+ "components.Login.username": "Felhasználónév",
+ "components.Blacklist.blacklistNotFoundError": "{title} nincs feketelistán.",
+ "components.DiscoverTvUpcoming.upcomingtv": "Soron következő Sorozatok",
+ "components.Discover.createnewslider": "Új Csúszka Létrehozása",
+ "components.Discover.FilterSlideover.status": "Státusz",
+ "components.Layout.UserWarnings.emailInvalid": "Az email cím hibás.",
+ "components.Login.invalidurlerror": "Nem lehet a {mediaServerName} szerverhez kapcsolódni.",
+ "components.Discover.customizediscover": "Felfedezés Testreszabása",
+ "components.Login.adminerror": "Egy adminisztrátor fiókot kell használnod a belépéshez.",
+ "components.Login.back": "Ugorj Vissza",
+ "components.Discover.studios": "Stúdiók",
+ "components.Discover.FilterSlideover.from": "Től",
+ "components.Discover.FilterSlideover.to": "Ig",
+ "components.Discover.networks": "Hálózatok",
+ "components.Layout.Sidebar.browsemovies": "Filmek",
+ "components.Layout.Sidebar.browsetv": "Sorozatok",
+ "components.Layout.UserWarnings.emailRequired": "Egy email cím szükséges.",
+ "components.Layout.UserWarnings.passwordRequired": "Jelszó szükséges.",
+ "components.Login.credentialerror": "A felhasználónév vagy a jelszó hibás.",
+ "components.Login.description": "Mivel ez az első belépésed a {applicationName}-be meg kell adnod egy valós email címet.",
+ "components.Login.enablessl": "SSL használata",
+ "components.Login.initialsignin": "Csatlakozás",
+ "components.Login.initialsigningin": "Csatlakozás folyamatban…",
+ "components.Login.loginwithapp": "Belépés {appName}-el",
+ "components.Login.noadminerror": "Nem található adminisztrátor a szerveren.",
+ "components.Login.orsigninwith": "Vagy belépés ezzel:",
+ "components.Login.port": "Port",
+ "components.Login.save": "Hozzáadás",
+ "components.Login.saving": "Hozzáadás folyamatban…",
+ "components.Login.servertype": "Szerver Típus",
+ "components.Login.signinwithjellyfin": "Használd a {mediaServerName} fiókodat",
+ "components.Login.title": "Email hozzáadása",
+ "components.Login.urlBase": "URL Törzs",
+ "components.Login.validationEmailFormat": "Érvénytelen email",
+ "components.Login.validationEmailRequired": "Meg kell adnod egy email címet",
+ "component.BlacklistBlock.blacklistedby": "Feketelistára rakta",
+ "component.BlacklistModal.blacklisting": "Feketelista",
+ "components.Blacklist.blacklistSettingsDescription": "Feketelistás média kezelése.",
+ "components.Blacklist.blacklistdate": "dátum",
+ "components.Blacklist.blacklistedby": "{date}-kor {user} által",
+ "components.Blacklist.blacklistsettings": "Feketelista beállítások",
+ "components.Blacklist.mediaName": "Név",
+ "components.Blacklist.mediaTmdbId": "tmdb Id",
+ "components.Blacklist.mediaType": "Típus",
+ "components.Discover.resetfailed": "Hiba történt a felfedezés testreszabási beállításainak visszaállításakor.",
+ "components.Discover.resettodefault": "Visszaállítás Alapértelmezettre",
+ "components.Discover.resetwarning": "Össze csőszka visszaállítása alapértelmezettre. Ez a saját csúszkákat is kitörli!",
+ "components.Discover.stopediting": "Módosítás abbahagyása",
+ "components.Discover.tmdbmoviegenre": "TMDB film műfaja"
}
diff --git a/src/i18n/locale/it.json b/src/i18n/locale/it.json
index 29b823881a..4af30cb1a8 100644
--- a/src/i18n/locale/it.json
+++ b/src/i18n/locale/it.json
@@ -115,7 +115,6 @@
"components.Settings.default4k": "4K predefinito",
"components.Settings.default": "Predefinito",
"components.Settings.currentlibrary": "Libreria corrente: {name}",
- "components.Settings.copied": "Chiave API copiata negli appunti.",
"components.Settings.cancelscan": "Annulla l'analisi",
"components.Settings.addsonarr": "Aggiungi un server Sonarr",
"components.Settings.addradarr": "Aggiungi un server Radarr",
@@ -185,7 +184,7 @@
"components.TvDetails.network": "{networkCount, plural, one {Rete} other {Reti}}",
"components.Setup.finishing": "Finalizzazione…",
"components.Settings.menuJobs": "Processi & Cache",
- "components.Setup.signinMessage": "Comincia accedendo con il tuo account Plex",
+ "components.Setup.signinMessage": "Comincia facendo l'accesso",
"components.Settings.sonarrsettings": "Impostazioni Sonarr",
"components.Settings.plexsettingsDescription": "Configura le impostazioni per il tuo server Plex. Jellyseerr scansiona le tue librerie Plex per determinare la disponibilità dei contenuti.",
"components.Settings.plexlibrariesDescription": "Le librerie che Jellyseerr scansiona per i titoli. Configura e salva le impostazioni di connessione Plex, quindi fai clic sul pulsante qui sotto se non sono elencate librerie.",
@@ -485,12 +484,12 @@
"components.UserProfile.UserSettings.UserPasswordChange.confirmpassword": "Conferma la password",
"components.UserProfile.UserSettings.UserNotificationSettings.validationDiscordId": "È necessario fornire un ID utente valido",
"components.CollectionDetails.requestcollection4k": "Richiedi Raccolta in 4K",
- "components.UserProfile.UserSettings.UserGeneralSettings.region": "Regione da scoprire",
+ "components.UserProfile.UserSettings.UserGeneralSettings.region": "Ricerca per Regione",
"components.UserProfile.UserSettings.UserGeneralSettings.originallanguage": "Lingua da scoprire",
"components.Settings.webhook": "Webhook",
- "components.Settings.email": "E-mail",
+ "components.Settings.email": "Email",
"components.RegionSelector.regionDefault": "Tutte le regioni",
- "components.UserProfile.UserSettings.UserGeneralSettings.regionTip": "Filtra i contenuti per disponibilità regionale",
+ "components.UserProfile.UserSettings.UserGeneralSettings.regionTip": "Filtra i contenuti in base alla disponibilità della regione",
"components.UserProfile.UserSettings.UserGeneralSettings.originallanguageTip": "Filtra i contenuti per lingua originale",
"components.Discover.upcomingtv": "Serie in uscita",
"components.RegionSelector.regionServerDefault": "Predefinito ({region})",
@@ -577,7 +576,7 @@
"components.Settings.SettingsLogs.resumeLogs": "Riprendi",
"components.Settings.SettingsLogs.pauseLogs": "Pausa",
"components.Settings.SettingsLogs.message": "Messaggio",
- "components.Settings.SettingsLogs.logsDescription": "Puoi anche visualizzare questi registri direttamente tramite stdout, o in {appDataPath}/logs/overseerr.log.",
+ "components.Settings.SettingsLogs.logsDescription": "Puoi anche visualizzare questi registri direttamente tramite stdout, o in {appDataPath}/logs/jellyseerr.log.",
"components.Settings.SettingsLogs.level": "Gravità",
"components.Settings.SettingsLogs.label": "Etichetta",
"components.Settings.SettingsLogs.filterWarn": "Attenzione",
@@ -592,7 +591,7 @@
"components.Settings.SettingsLogs.extraData": "Dati aggiuntivi",
"components.Settings.SettingsLogs.copyToClipboard": "Copia negli appunti",
"components.Settings.SettingsLogs.copiedLogMessage": "Messaggio di registro copiato negli appunti.",
- "components.UserList.nouserstoimport": "Non ci sono utenti PLex da importare.",
+ "components.UserList.nouserstoimport": "Non ci sono utenti Plex da importare.",
"components.PersonDetails.lifespan": "{birthdate} – {deathdate}",
"components.PersonDetails.birthdate": "Data di nascita {birthdate}",
"components.PersonDetails.alsoknownas": "Altri nomi: {names}",
@@ -605,7 +604,7 @@
"i18n.status": "Stato",
"i18n.showingresults": "Mostrando {from} a {to} di {total} risultati",
"i18n.resultsperpage": "Mostra {pageSize} risultati per pagina",
- "i18n.saving": "Salvataggio…",
+ "i18n.saving": "Salvando…",
"i18n.save": "Salva Modifiche",
"i18n.requesting": "Richiesta in corso…",
"i18n.request4k": "Richiedi in 4K",
@@ -713,17 +712,8 @@
"components.Settings.Notifications.NotificationsWebPush.webpushsettingssaved": "Impostazioni di notifica web salvate con successo!",
"components.Settings.Notifications.NotificationsWebPush.webpushsettingsfailed": "Impossibile salvare le impostazioni di notifica web.",
"components.Settings.Notifications.NotificationsWebPush.agentenabled": "Abilita Agente",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingssaved": "Impostazioni di notifica Web push salvate correttamente!",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingsfailed": "Impossibile salvare le impostazioni di notifica via Web push.",
"components.Settings.noDefault4kServer": "Un server 4K {serverType} deve essere contrassegnato come predefinito per permettere agli utenti di inviare richieste 4K {mediaType}.",
"components.Settings.is4k": "4K",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrl": "Webhook URL",
- "components.Settings.Notifications.NotificationsLunaSea.validationWebhookUrl": "È necessario fornire un URL valido",
- "components.Settings.Notifications.NotificationsLunaSea.settingsSaved": "Impostazioni LunaSea salvate con successo!",
- "components.Settings.Notifications.NotificationsLunaSea.settingsFailed": "Impossibile salvare le impostazioni di notifica LunaSea.",
- "components.Settings.Notifications.NotificationsLunaSea.profileNameTip": "Richiesto solo se non si usa il profilo default",
- "components.Settings.Notifications.NotificationsLunaSea.profileName": "Nome Profilo",
- "components.Settings.Notifications.NotificationsLunaSea.agentenabled": "Abilita Agente",
"components.PermissionEdit.requestTvDescription": "Concedere l'autorizzazione per richiedere serie non 4K.",
"components.PermissionEdit.requestTv": "Richiedi Serie",
"components.PermissionEdit.requestMoviesDescription": "Concedere il permesso di richiedere film non in 4K.",
@@ -742,9 +732,6 @@
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestSuccess": "Notifica di prova Pushbullet inviata!",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestSending": "Invio notifica di prova Pushbullet …",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestFailed": "Invio della notifica di prova Pushbullet non riuscito.",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSuccess": "Notifica di test LunaSea inviata!",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSending": "Invio notifica di prova con LunaSea …",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestFailed": "Impossibile inviare notifica con LunaSea.",
"components.DownloadBlock.estimatedtime": "Stimato {time}",
"components.Settings.Notifications.encryptionImplicitTls": "Usa TLS Implicito",
"components.Settings.Notifications.encryptionTip": "Solitamente, TLS Implicito usa la porta 465 e STARTTLS usa la porta 587",
@@ -757,7 +744,7 @@
"components.Settings.Notifications.NotificationsWebhook.toastWebhookTestSuccess": "Notifica Webhook di prova inviata!",
"components.Settings.Notifications.NotificationsSlack.webhookUrlTip": "Crea un'integrazione Incoming Webhook",
"components.Settings.Notifications.NotificationsPushover.userTokenTip": "Il tuo identificatore utente o gruppo di 30 caratteri",
- "components.Settings.Notifications.NotificationsPushover.accessTokenTip": "Registra un'applicazione per l'uso con Jellyseerr",
+ "components.Settings.Notifications.NotificationsPushover.accessTokenTip": "Registra un'applicazione per l'uso con Jellyseerr",
"components.Settings.Notifications.NotificationsPushbullet.accessTokenTip": "Crea un token dalle tue Impostazioni account",
"components.Settings.Notifications.toastDiscordTestFailed": "Invio della notifica di prova Discord non riuscito.",
"components.Settings.Notifications.webhookUrlTip": "Crea un integrazione webhook nel server",
@@ -772,14 +759,13 @@
"components.UserList.localLoginDisabled": "L'impostazione Abilita Accesso Locale è attualmente disabilitata.",
"components.UserProfile.UserSettings.UserGeneralSettings.languageDefault": "Predefinito ({language})",
"components.Settings.webAppUrlTip": "Indirizza opzionalmente gli utenti alla web app sul tuo server invece che alla web app \"ospitata\"",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrlTip": "La tua notifica webhook URL basata su utente o dispositivo",
"components.Settings.webAppUrl": "URL Web App",
- "components.Settings.SettingsUsers.newPlexLoginTip": "Permetti agli utenti di Plex di accedere senza essere prima importati",
- "components.Settings.SettingsUsers.newPlexLogin": "Abilita nuovo accesso con Plex",
+ "components.Settings.SettingsUsers.newPlexLoginTip": "Permetti agli utenti di {mediaServerName} di accedere senza essere prima importati",
+ "components.Settings.SettingsUsers.newPlexLogin": "Abilita nuovo accesso con {mediaServerName}",
"components.Settings.Notifications.NotificationsWebPush.httpsRequirement": "Per ricevere notifiche push web, Jellyseerr deve essere servito tramite HTTPS.",
"components.RequestList.RequestItem.requesteddate": "Richiesto",
"components.RequestCard.failedretry": "Qualcosa è andato storto nel riprovare la richiesta.",
- "components.Settings.SettingsUsers.localLoginTip": "Consentire agli utenti di accedere utilizzando l'indirizzo di posta elettronica e la password, anziché Plex OAuth",
+ "components.Settings.SettingsUsers.localLoginTip": "Consenti agli utenti di accedere utilizzando la mail e la password",
"components.Settings.SettingsUsers.defaultPermissionsTip": "Permessi assegnati ai nuovi utenti",
"components.QuotaSelector.movieRequests": "{quotaLimit} {movies} per {quotaDays} {days}",
"components.QuotaSelector.tvRequests": "{quotaLimit} {seasons} per {quotaDays} {days}",
@@ -789,7 +775,6 @@
"components.Settings.Notifications.validationTypes": "È necessario selezionare almeno un tipo di notifica",
"components.Settings.Notifications.NotificationsSlack.validationTypes": "È necessario selezionare almeno un tipo di notifica",
"components.Settings.Notifications.NotificationsPushbullet.validationTypes": "È necessario selezionare almeno un tipo di notifica",
- "components.Settings.Notifications.NotificationsLunaSea.validationTypes": "È necessario selezionare almeno un tipo di notifica",
"components.Settings.Notifications.NotificationsWebhook.validationTypes": "È necessario selezionare almeno un tipo di notifica",
"components.Settings.Notifications.NotificationsPushover.validationTypes": "È necessario selezionare almeno un tipo di notifica",
"components.Settings.SettingsAbout.betawarning": "Questo software è in BETA. Alcuni componenti potrebbero non funzionare correttamente. Aiutaci segnalando i problemi su GitHub!",
@@ -877,7 +862,7 @@
"components.ManageSlideOver.manageModalTitle": "Gestisci {mediaType}",
"components.ManageSlideOver.mark4kavailable": "Segna come disponibile in 4K",
"components.IssueDetails.openinarr": "Apri in {arr}",
- "components.IssueDetails.playonplex": "Guarda su Plex",
+ "components.IssueDetails.playonplex": "Guarda su {mediaServerName}",
"components.ManageSlideOver.openarr": "Apri in {arr}",
"components.ManageSlideOver.openarr4k": "Apri in 4K {arr}",
"components.IssueDetails.play4konplex": "Guarda in 4K su Plex",
@@ -914,7 +899,7 @@
"components.NotificationTypeSelector.issuecreatedDescription": "Invia una notifica quando un problema viene segnalato.",
"components.NotificationTypeSelector.issueresolved": "Problema risolto",
"components.NotificationTypeSelector.issueresolvedDescription": "Invia una notifica quando un problema viene risolto.",
- "components.UserProfile.UserSettings.UserNotificationSettings.pushbulletAccessToken": "Access Token",
+ "components.UserProfile.UserSettings.UserNotificationSettings.pushbulletAccessToken": "Token di accesso",
"components.UserProfile.UserSettings.UserNotificationSettings.pushoverApplicationToken": "API Token applicazione",
"components.UserProfile.UserSettings.UserNotificationSettings.pushoverUserKey": "Chiave utente o di un gruppo",
"components.UserProfile.UserSettings.UserNotificationSettings.pushbulletAccessTokenTip": "Crea un token dalle tue Impostazioni Account",
@@ -991,10 +976,10 @@
"components.Settings.SettingsAbout.appDataPath": "Cartella applicazione",
"components.RequestBlock.languageprofile": "Lingua Profilo",
"components.MovieDetails.digitalrelease": "Uscita versione digitale",
- "components.Discover.DiscoverWatchlist.discoverwatchlist": "La tua lista da guardare Plex",
+ "components.Discover.DiscoverWatchlist.discoverwatchlist": "La tua lista",
"components.Discover.plexwatchlist": "La tua lista da guardare Plex",
"components.PermissionEdit.autorequest": "Richiesta automatica",
- "components.Discover.DiscoverWatchlist.watchlist": "Lista da guardare Plex",
+ "components.Discover.DiscoverWatchlist.watchlist": "Plex Watchlist",
"components.MovieDetails.managemovie": "Gestisci Film",
"components.MovieDetails.physicalrelease": "Uscita versione fisica",
"components.MovieDetails.theatricalrelease": "Uscita nelle sale",
@@ -1091,7 +1076,7 @@
"components.Settings.SettingsMain.toastApiKeySuccess": "Nuova chiave API generata con successo!",
"components.Settings.SettingsMain.toastSettingsFailure": "Qualcosa è andato storto durante il salvataggio delle impostazioni.",
"components.StatusBadge.managemedia": "Gestisci {mediaType}",
- "components.StatusBadge.playonplex": "Riproduci su Plex",
+ "components.StatusBadge.playonplex": "Riproduci su {mediaServerName}",
"components.StatusBadge.seasonepisodenumber": "S{seasonNumber}E{episodeNumber}",
"components.StatusChecker.appUpdated": "{applicationTitle} aggiornato",
"components.TvDetails.Season.somethingwentwrong": "Qualcosa è andato storto durante il recupero dei dati della stagione.",
@@ -1111,7 +1096,7 @@
"components.Settings.SettingsMain.validationApplicationTitle": "Devi fornire un titolo dell'applicazione",
"components.Settings.SettingsMain.validationApplicationUrl": "Devi fornire un URL valido",
"components.Settings.restartrequiredTooltip": "Jellyseerr deve essere riavviato per rendere effettive le modifiche",
- "components.TitleCard.tvdbid": "TheTVDB ID",
+ "components.TitleCard.tvdbid": "ID TheTVDB",
"components.UserProfile.emptywatchlist": "I media aggiunti alla tua Plex Watchlist appariranno qui.",
"components.TvDetails.status4k": "4K {status}",
"i18n.restartRequired": "Riavvio necessario",
@@ -1149,7 +1134,6 @@
"components.Login.urlBase": "Base URL",
"components.Login.username": "Nome utente",
"components.Login.validationEmailRequired": "Devi fornire un'email",
- "components.Login.validationHostnameRequired": "Devi fornire un hostname o un indirizzo IP valido",
"components.Login.validationPortRequired": "Devi fornire un numero di porta valido",
"components.Login.validationUrlBaseTrailingSlash": "L'URL di base non deve terminare con una barra finale",
"components.Login.validationUrlTrailingSlash": "L'URL non deve terminare con una barra finale",
@@ -1166,7 +1150,7 @@
"components.MovieDetails.rtaudiencescore": "Punteggio del pubblico di Rotten Tomatoes",
"components.MovieDetails.rtcriticsscore": "Tomatometro di Rotten Tomatoes",
"components.MovieDetails.tmdbuserscore": "Punteggio Utente TMDB",
- "components.MovieDetails.watchlistError": "Qualcosa è andato storto, riprova.",
+ "components.MovieDetails.watchlistError": "Qualcosa è andato storto. Riprova.",
"components.MovieDetails.watchlistSuccess": "{title} aggiunto alla lista di visione con successo!",
"components.PermissionEdit.autorequestMovies": "Richiesta automatica dei film",
"components.PermissionEdit.autorequestSeries": "Richiesta automatica di serie",
@@ -1190,7 +1174,7 @@
"components.RequestList.RequestItem.unknowntitle": "Titolo sconosciuto",
"components.RequestModal.requestcollection4ktitle": "Richiedi Collezione in 4K",
"components.RequestModal.requestcollectiontitle": "Richiedi Collezione",
- "components.Settings.Notifications.NotificationsPushover.deviceDefault": "Predefinito dispositivo",
+ "components.Settings.Notifications.NotificationsPushover.deviceDefault": "Predefinito del dispositivo",
"components.Settings.SettingsAbout.supportjellyseerr": "Supporta Jellyseerr",
"components.Settings.SettingsJobsCache.availability-sync": "Sincronizzazione della disponibilità dei media",
"components.Settings.SettingsJobsCache.editJobScheduleCurrent": "Frequenza Attuale",
@@ -1229,7 +1213,7 @@
"components.RequestList.RequestItem.tmdbid": "ID TMDB",
"components.Settings.Notifications.NotificationsPushover.sound": "Suono di notifica",
"components.Settings.SettingsMain.cacheImagesTip": "Cache le immagini provenienti da fonti esterne (richiede una quantità significativa di spazio su disco)",
- "components.Settings.SettingsMain.generalsettingsDescription": "Configure global and default settings for Jellyseerr.",
+ "components.Settings.SettingsMain.generalsettingsDescription": "Configura le impostazioni globali e predefinite per Jellyseerr.",
"components.RequestModal.SearchByNameModal.nomatches": "Non siamo riusciti a trovare una corrispondenza per questa serie.",
"components.Settings.RadarrModal.tagRequests": "Tagga richieste",
"components.Settings.SettingsJobsCache.imagecacheDescription": "Quando abilitato nelle impostazioni, Jellyseerr farà da proxy e memorizzerà nella cache le immagini provenienti da fonti esterne preconfigurate. Le immagini memorizzate nella cache vengono salvate nella tua cartella di configurazione. Puoi trovare i file in `{appDataPath}/cache/images`.",
@@ -1250,5 +1234,239 @@
"components.Layout.UserWarnings.emailInvalid": "L'indirizzo email non è valido.",
"components.Layout.UserWarnings.emailRequired": "È necessario un indirizzo email.",
"components.Layout.UserWarnings.passwordRequired": "È richiesta una password.",
- "components.Settings.SettingsMain.partialRequestsEnabled": "Consenti richieste parziali di serie"
+ "components.Settings.SettingsMain.partialRequestsEnabled": "Consenti richieste parziali di serie",
+ "components.Login.back": "Torna Indietro",
+ "components.Settings.Notifications.webhookRoleId": "ID ruolo di notifica",
+ "components.Blacklist.blacklistSettingsDescription": "Gestisci i media esclusi.",
+ "components.PermissionEdit.blacklistedItemsDescription": "Concedi l'autorizzazione per escludere i media.",
+ "components.Settings.Notifications.messageThreadId": "Thread/ID Argomento",
+ "components.Setup.configplex": "Configura Plex",
+ "components.UserProfile.UserSettings.UserLinkedAccountsSettings.plexErrorExists": "Questo account è già collegato ad un utente Plex",
+ "components.Settings.Notifications.messageThreadIdTip": "Se nella tua chat di gruppo sono abilitati gli argomenti, puoi specificare qui l'ID di un thread/argomento",
+ "components.UserProfile.UserSettings.UserGeneralSettings.plexwatchlistsyncmovies": "Richiedi automaticamente i film",
+ "components.Selector.canceled": "Cancellato",
+ "components.Selector.inProduction": "In Produzione",
+ "components.Discover.FilterSlideover.status": "Stato",
+ "components.Layout.Sidebar.blacklist": "Esclusioni",
+ "components.RequestList.RequestItem.removearr": "Rimuovi da {arr}",
+ "components.UserProfile.UserSettings.UserLinkedAccountsSettings.plexErrorUnauthorized": "Impossible connettersi a Plex usando le tue credenziali",
+ "component.BlacklistBlock.blacklistdate": "Data esclusa",
+ "components.DiscoverTvUpcoming.upcomingtv": "Serie in arrivo",
+ "components.PermissionEdit.viewblacklistedItems": "Visualizza media esclusi.",
+ "components.Settings.Notifications.webhookRoleIdTip": "L'ID del ruolo da menzionare nel messaggio webhook. Lasciare vuoto per disabilitare le menzioni",
+ "components.Login.validationservertyperequired": "Seleziona un tipo di server",
+ "components.Settings.Notifications.validationMessageThreadId": "L'ID del thread/argomento deve essere un numero intero positivo",
+ "components.PermissionEdit.blacklistedItems": "Media esclusi.",
+ "components.RequestList.sortDirection": "Cambia direzione di ordinamento",
+ "components.Login.loginwithapp": "Login con {appName}",
+ "components.Login.noadminerror": "Non è stato trovato nessun amministratore nel server.",
+ "components.Login.orsigninwith": "O fai l'accesso con",
+ "components.Login.servertype": "Tipo Server",
+ "components.PermissionEdit.manageblacklist": "Gestisci le esclusioni",
+ "components.PermissionEdit.manageblacklistDescription": "Concedi l'autorizzazione a gestire i media esclusi.",
+ "components.PermissionEdit.viewblacklistedItemsDescription": "Concedi l'autorizzazione a visualizzare i media esclusi.",
+ "components.Selector.ended": "Terminato",
+ "components.Selector.pilot": "Pilota",
+ "components.Selector.planned": "Pianificato",
+ "components.Selector.returningSeries": "Serie Ricorrente",
+ "components.Selector.searchStatus": "Seleziona stato...",
+ "components.Selector.searchUsers": "Seleziona utenti…",
+ "components.Settings.Notifications.validationWebhookRoleId": "È necessario fornire un ID ruolo Discord valido",
+ "components.Settings.OverrideRuleModal.conditions": "Condizioni",
+ "components.Setup.signinWithPlex": "Inserisci le tue credenziali di Plex",
+ "components.UserProfile.UserSettings.UserGeneralSettings.plexwatchlistsyncseries": "Richiedi automaticamente le serie",
+ "component.BlacklistBlock.blacklistedby": "Escluso da",
+ "component.BlacklistModal.blacklisting": "Aggiungendo alle esclusioni",
+ "components.Blacklist.blacklistNotFoundError": "{title} non è escluso.",
+ "components.Blacklist.blacklistdate": "data",
+ "components.Blacklist.blacklistedby": "{date} di {user}",
+ "components.Blacklist.blacklistsettings": "Impostazioni delle esclusioni",
+ "components.Blacklist.mediaName": "Nome",
+ "components.Blacklist.mediaTmdbId": "ID tmdb",
+ "components.Blacklist.mediaType": "Tipo",
+ "components.Settings.OverrideRuleModal.selectRootFolder": "Seleziona cartella principale",
+ "components.Settings.OverrideRuleModal.conditionsDescription": "Specifica le condizioni prima di applicare le modifiche ai parametri. Ogni campo deve essere convalidato affinché le regole possano essere applicate (operazione AND). Un campo è considerato verificato se una qualsiasi delle sue proprietà corrisponde (operazione OR).",
+ "components.Settings.OverrideRuleModal.selectQualityProfile": "Seleziona profilo di qualità",
+ "components.Settings.OverrideRuleModal.ruleUpdated": "Regola di sostituzione aggiornata con successo!",
+ "components.Settings.OverrideRuleModal.settingsDescription": "Specifica quali impostazioni verranno modificate quando saranno soddisfatte le condizioni sopra indicate.",
+ "components.Settings.OverrideRuleModal.create": "Crea regola",
+ "components.Settings.OverrideRuleModal.createrule": "Nuova regola di sostituzione",
+ "components.Settings.OverrideRuleModal.editrule": "Modifica regola di sostituzione",
+ "components.Settings.OverrideRuleModal.genres": "Generi",
+ "components.Settings.OverrideRuleModal.keywords": "Parole Chiave",
+ "components.Settings.OverrideRuleModal.languages": "Lingue",
+ "components.Settings.OverrideRuleModal.notagoptions": "Nessun tag.",
+ "components.Settings.OverrideRuleModal.qualityprofile": "Profilo di qualità",
+ "components.Settings.OverrideRuleModal.rootfolder": "Cartella Principale",
+ "components.Settings.OverrideRuleModal.ruleCreated": "Regola di sostituzione creata con successo!",
+ "components.Settings.OverrideRuleModal.selectService": "Seleziona servizio",
+ "components.Settings.OverrideRuleModal.selecttags": "Seleziona i tag",
+ "components.Settings.OverrideRuleModal.service": "Servizio",
+ "components.Settings.OverrideRuleModal.serviceDescription": "Applica questa regola al servizio selezionato.",
+ "components.Settings.OverrideRuleModal.settings": "Impostazioni",
+ "components.Settings.OverrideRuleModal.tags": "Tags",
+ "components.Settings.OverrideRuleModal.users": "Utenti",
+ "components.Settings.OverrideRuleTile.conditions": "Condizioni",
+ "components.Settings.OverrideRuleTile.genre": "Genere",
+ "components.Settings.OverrideRuleTile.keywords": "Parole chiave",
+ "components.Settings.OverrideRuleTile.language": "Lingua",
+ "components.Settings.OverrideRuleTile.qualityprofile": "Profilo di qualità",
+ "components.Settings.OverrideRuleTile.rootfolder": "Cartella Principale",
+ "components.Settings.OverrideRuleTile.settings": "Impostazioni",
+ "components.Settings.OverrideRuleTile.tags": "Tags",
+ "components.Settings.OverrideRuleTile.users": "Utenti",
+ "components.Settings.SettingsJobsCache.plex-refresh-token": "Token di aggiornamento Plex",
+ "components.Settings.SettingsMain.discoverRegionTip": "Filtra i contenuti in base alla disponibilità della regione",
+ "components.Settings.SettingsMain.discoverRegion": "Ricerca per Regione",
+ "components.Settings.SettingsMain.streamingRegionTip": "Mostra i siti di streaming in base alla disponibilità della regione",
+ "components.Settings.SettingsMain.enableSpecialEpisodes": "Consenti richieste di episodi speciali",
+ "components.Settings.SettingsJobsCache.usersavatars": "Avatar degli utenti",
+ "components.Settings.SettingsMain.streamingRegion": "Regione di streaming",
+ "components.Settings.SettingsNetwork.toastSettingsFailure": "Si è verificato un errore durante il salvataggio delle impostazioni.",
+ "components.UserProfile.UserSettings.UserGeneralSettings.discoverRegion": "Ricerca per Regione",
+ "components.Settings.SettingsNetwork.csrfProtectionHoverTip": "Non abilitare questa impostazione se non sei sicuro di ciò che stai facendo!",
+ "components.TitleCard.watchlistSuccess": "{title} aggiunto alla lista con successo!",
+ "components.UserProfile.UserSettings.UserNotificationSettings.sound": "Suono di notifica",
+ "i18n.blacklistDuplicateError": "{title} è già stato inserito nelle esclusioni.",
+ "components.Settings.jellyfinSettingsDescription": "Se vuoi, puoi configurare gli endpoint interni ed esterni per il tuo server {mediaServerName}. Di solito, l'URL esterno è diverso da quello interno. Puoi anche impostare un URL personalizzato per reimpostare la password di accesso a {mediaServerName}, se vuoi reindirizzare a una pagina diversa per reimpostare la password. Puoi anche cambiare la chiave API Jellyfin, che è stata generata automaticamente in precedenza.",
+ "components.Settings.jellyfinsettings": "Impostazioni {mediaServerName}",
+ "components.Settings.scanbackground": "La scansione verrà eseguita in background. Nel frattempo è possibile continuare con la procedura di configurazione.",
+ "components.UserProfile.UserSettings.menuLinkedAccounts": "Account Collegati",
+ "components.Settings.syncing": "Sincronizzando",
+ "components.StatusChecker.restartRequiredDescription": "Riavvia il server per applicare le impostazioni aggiornate.",
+ "components.TvDetails.rtaudiencescore": "Punteggio del pubblico su Rotten Tomatoes",
+ "components.TvDetails.watchlistDeleted": "{title} rimosso dalla lista con successo!",
+ "components.Settings.SettingsNetwork.networkDisclaimer": "È necessario utilizzare i parametri di rete del proprio container/sistema anziché queste impostazioni. Per ulteriori informazioni, consultare i {docs}.",
+ "components.UserList.importedfromJellyfin": "{userCount} {mediaServerName} {userCount, plural, one {utente} other {utenti}} importati con successo!",
+ "components.Settings.SonarrModal.tagRequestsInfo": "Aggiungi automaticamente un tag aggiuntivo con l'ID utente e il nome visualizzato del richiedente",
+ "components.Settings.deleteServer": "Elimina Server {serverType}",
+ "components.Settings.overrideRulesDescription": "Le regole di sostituzione consentono di specificare le proprietà che verranno sostituite se una richiesta corrisponde alla regola.",
+ "components.UserList.newJellyfinsigninenabled": "L'impostazione Abilita nuovo accesso {mediaServerName} è attualmente abilitata. Gli utenti {mediaServerName} con accesso alla libreria non devono essere importati per poter effettuare l'accesso.",
+ "components.UserProfile.UserSettings.UserNotificationSettings.telegramMessageThreadId": "Thread/ID Argomento",
+ "components.Settings.SettingsUsers.atLeastOneAuth": "È necessario selezionare almeno un metodo di autenticazione.",
+ "components.Settings.SonarrModal.tagRequests": "Aggiungi tag alle richieste",
+ "components.Settings.invalidurlerror": "Impossibile connettersi al server {mediaServerName}.",
+ "components.Settings.jellyfinsettingsDescription": "Configura le impostazioni per il tuo server {mediaServerName}. {mediaServerName} esegue la scansione delle tue librerie {mediaServerName} per vedere quali contenuti sono disponibili.",
+ "components.Setup.librarieserror": "Convalida non riuscita. Attivare nuovamente le librerie per continuare.",
+ "components.TvDetails.episodeCount": "{episodeCount, plural, one {# Episodio} other {# Episodi}}",
+ "components.UserProfile.UserSettings.LinkJellyfinModal.errorUnauthorized": "Impossibile connettersi a {mediaServerName} utilizzando le credenziali fornite",
+ "components.UserProfile.UserSettings.UserLinkedAccountsSettings.deleteFailed": "Impossibile eliminare l'account collegato.",
+ "components.UserProfile.UserSettings.UserLinkedAccountsSettings.noPermissionDescription": "Non hai il permesso di modificare gli account collegati a questo utente.",
+ "i18n.removeFromBlacklistSuccess": "{title} è stato rimosso con successo dalle esclusioni.",
+ "components.Settings.overrideRules": "Regole di sostituzione",
+ "components.Settings.save": "Salva Modifiche",
+ "components.Settings.saving": "Salvando…",
+ "components.Setup.signinWithEmby": "Inserisci le tue credenziali Emby",
+ "components.TitleCard.addToWatchList": "Aggiungi alla lista",
+ "components.TvDetails.removefromwatchlist": "Rimuovi dalla Lista",
+ "components.Setup.signin": "Accedi",
+ "components.Settings.jellyfinSyncFailedNoLibrariesFound": "Nessuna libreria trovata",
+ "components.Settings.SettingsNetwork.csrfProtection": "Abilita Protezione CSRF",
+ "components.Settings.SettingsNetwork.csrfProtectionTip": "Imposta l'accesso API esterno in sola lettura (richiede HTTPS)",
+ "components.Settings.SettingsNetwork.docs": "documentazione",
+ "components.Settings.SettingsNetwork.forceIpv4First": "Forza prima la risoluzione IPv4",
+ "components.Settings.SettingsNetwork.forceIpv4FirstTip": "Forza Jellyseerr a risolvere prima gli indirizzi IPv4 invece di quelli IPv6",
+ "components.Settings.SettingsNetwork.network": "Rete",
+ "components.Settings.SettingsNetwork.networksettings": "Impostazioni di Rete",
+ "components.Settings.SettingsNetwork.networksettingsDescription": "Configura le impostazioni di rete per la tua istanza Jellyseerr.",
+ "components.Settings.SettingsNetwork.proxyBypassFilter": "Indirizzi Proxy Ignorati",
+ "components.Settings.SettingsNetwork.proxyBypassFilterTip": "Utilizza “,” come separatore e “*.” come carattere jolly per i sottodomini",
+ "components.Settings.SettingsNetwork.proxyBypassLocalAddresses": "Bypassare il Proxy per gli Indirizzi Locali",
+ "components.Settings.SettingsNetwork.proxyEnabled": "Proxy HTTP(S)",
+ "components.Settings.SettingsNetwork.proxyHostname": "Nome Host Proxy",
+ "components.Settings.SettingsNetwork.proxyPassword": "Password del Proxy",
+ "components.Settings.SettingsNetwork.proxyPort": "Porta del Proxy",
+ "components.Settings.SettingsNetwork.proxySsl": "Usa SSL per il Proxy",
+ "components.Settings.SettingsNetwork.proxyUser": "Username del Proxy",
+ "components.Settings.SettingsNetwork.toastSettingsSuccess": "Impostazioni salvate con successo!",
+ "components.Settings.SettingsNetwork.trustProxy": "Abilita Supporto Proxy",
+ "components.Settings.SettingsNetwork.trustProxyTip": "Consenti a Jellyseerr di registrare correttamente gli indirizzi IP dei client dietro un proxy",
+ "components.Settings.SettingsNetwork.validationProxyPort": "È necessario fornire una porta valida",
+ "components.Settings.SettingsUsers.loginMethods": "Metodi di Login",
+ "components.Settings.SettingsUsers.loginMethodsTip": "Configura i metodi di accesso per gli utenti.",
+ "components.Settings.SettingsUsers.mediaServerLogin": "Abilita accesso tramite {mediaServerName}",
+ "components.Settings.SettingsUsers.mediaServerLoginTip": "Consenti agli utenti di accedere utilizzando il proprio account {mediaServerName}",
+ "components.Settings.addrule": "Nuova regola di sostituzione",
+ "components.Settings.advancedTooltip": "Una configurazione errata di questa impostazione può causare dei malfunzionamenti",
+ "components.Settings.apiKey": "Chiave API",
+ "components.Settings.experimentalTooltip": "L'attivazione di questa impostazione può causare un comportamento imprevisto dell'applicazione",
+ "components.Settings.jellyfinForgotPasswordUrl": "URL Password dimenticata",
+ "components.Settings.jellyfinSettings": "Impostazioni {mediaServerName}",
+ "components.Settings.jellyfinSettingsFailure": "Si è verificato un errore durante il salvataggio delle impostazioni di {mediaServerName}.",
+ "components.Settings.jellyfinSettingsSuccess": "Impostazioni {mediaServerName} salvate con successo!",
+ "components.Settings.jellyfinSyncFailedAutomaticGroupedFolders": "Autenticazione personalizzata con raggruppamento automatico delle librerie non supportata",
+ "components.Settings.jellyfinSyncFailedGenericError": "Si è verificato un errore durante la sincronizzazione delle librerie",
+ "components.Settings.jellyfinlibraries": "Librerie di {mediaServerName}",
+ "components.Settings.jellyfinlibrariesDescription": "Le librerie {mediaServerName} cercano i titoli. Se non sono elencate librerie, fare clic sul pulsante sottostante.",
+ "components.Settings.manualscanDescriptionJellyfin": "Normalmente, questa operazione viene eseguita una volta ogni 24 ore. Jellyseerr controllerà in modo più aggressivo gli elementi aggiunti di recente al tuo server {mediaServerName}. Se è la prima volta che configuri Jellyseerr, ti consigliamo di eseguire una scansione manuale completa della libreria!",
+ "components.Settings.manualscanJellyfin": "Scansione Libreria Manuale",
+ "components.Settings.menuJellyfinSettings": "{mediaServerName}",
+ "components.Settings.menuNetwork": "Rete",
+ "components.Settings.syncJellyfin": "Sincronizza Librerie",
+ "components.Settings.timeout": "Tempo scaduto",
+ "components.Settings.tip": "Suggerimento",
+ "components.Setup.back": "Torna indietro",
+ "components.Setup.configemby": "Configura Emby",
+ "components.Setup.configjellyfin": "Configura Jellyfin",
+ "components.Setup.configuremediaserver": "Configura Media Server",
+ "components.Setup.servertype": "Scegli il tipo di server",
+ "components.Setup.signinWithJellyfin": "Inserisci le tue credenziali Jellyfin",
+ "components.Setup.subtitle": "Inizia scegliendo il tuo media server",
+ "components.StatusBadge.seasonnumber": "S{seasonNumber}",
+ "components.TitleCard.cleardata": "Cancella dati",
+ "components.TitleCard.watchlistCancel": "Lista per {title} eliminata.",
+ "components.TitleCard.watchlistError": "Qualcosa è andato storto. Riprova.",
+ "components.TvDetails.Season.noepisodes": "Elenco episodi non disponibile.",
+ "components.TvDetails.addtowatchlist": "Aggiungi alla Lista",
+ "components.TvDetails.play": "Riproduci su {mediaServerName}",
+ "components.TvDetails.play4k": "Riproduci in 4K su {mediaServerName}",
+ "components.TitleCard.watchlistDeleted": "{title} rimosso dalla lista con successo!",
+ "components.TvDetails.rtcriticsscore": "Tomatometer di Rotten Tomatoes",
+ "components.TvDetails.tmdbuserscore": "Punteggio utente TMDB",
+ "components.TvDetails.watchlistSuccess": "{title} aggiunto alla lista con successo!",
+ "components.UserList.importfromJellyfin": "Importa utenti da {mediaServerName}",
+ "components.UserList.importfromJellyfinerror": "Si è verificato un errore durante l'importazione degli utenti da {mediaServerName}.",
+ "components.UserList.mediaServerUser": "Utente {mediaServerName}",
+ "components.UserProfile.UserSettings.LinkJellyfinModal.password": "Password",
+ "components.TvDetails.watchlistError": "Qualcosa è andato storto. Riprova.",
+ "components.UserList.importfrommediaserver": "Importa utenti da {mediaServerName}",
+ "components.UserList.noJellyfinuserstoimport": "Non ci sono utenti {mediaServerName} da importare.",
+ "components.UserList.username": "Nome Utente",
+ "components.UserList.validationUsername": "È necessario fornire un nome utente",
+ "components.UserProfile.UserSettings.LinkJellyfinModal.description": "Inserisci le credenziali {mediaServerName} per collegare il tuo account a {applicationName}.",
+ "components.UserProfile.UserSettings.LinkJellyfinModal.errorExists": "Questo account è già collegato a un utente {applicationName}",
+ "components.UserProfile.UserSettings.LinkJellyfinModal.errorUnknown": "Si è verificato un errore sconosciuto",
+ "components.UserProfile.UserSettings.LinkJellyfinModal.passwordRequired": "È necessario fornire una password",
+ "components.UserProfile.UserSettings.LinkJellyfinModal.save": "Collega",
+ "components.UserProfile.UserSettings.LinkJellyfinModal.saving": "Aggiungendo…",
+ "components.UserProfile.UserSettings.LinkJellyfinModal.title": "Collega Account {mediaServerName}",
+ "components.UserProfile.UserSettings.LinkJellyfinModal.username": "Nome Utente",
+ "components.UserProfile.UserSettings.LinkJellyfinModal.usernameRequired": "È necessario fornire un nome utente",
+ "components.UserProfile.UserSettings.UserGeneralSettings.email": "Email",
+ "components.UserProfile.UserSettings.UserGeneralSettings.discoverRegionTip": "Filtra i contenuti in base alla disponibilità della regione",
+ "components.UserProfile.UserSettings.UserGeneralSettings.mediaServerUser": "Utente {mediaServerName}",
+ "components.UserProfile.UserSettings.UserGeneralSettings.save": "Salva Modifiche",
+ "components.UserProfile.UserSettings.UserGeneralSettings.saving": "Salvando…",
+ "components.UserProfile.UserSettings.UserGeneralSettings.streamingRegion": "Regione di streaming",
+ "components.UserProfile.UserSettings.UserGeneralSettings.streamingRegionTip": "Mostra i siti di streaming in base alla disponibilità della regione",
+ "components.UserProfile.UserSettings.UserGeneralSettings.toastSettingsFailureEmail": "Questo indirizzo e-mail è già stato utilizzato!",
+ "components.UserProfile.UserSettings.UserGeneralSettings.toastSettingsFailureEmailEmpty": "Un altro utente ha già questo nome utente. Devi impostare un indirizzo e-mail",
+ "components.UserProfile.UserSettings.UserGeneralSettings.validationemailformat": "È richiesta un'email valida",
+ "components.UserProfile.UserSettings.UserGeneralSettings.validationemailrequired": "Email richiesta",
+ "components.UserProfile.UserSettings.UserLinkedAccountsSettings.errorUnknown": "Si è verificato un errore sconosciuto",
+ "components.UserProfile.UserSettings.UserLinkedAccountsSettings.linkedAccounts": "Account Collegati",
+ "components.UserProfile.UserSettings.UserLinkedAccountsSettings.linkedAccountsHint": "Questi account esterni sono collegati al tuo account {applicationName}.",
+ "components.UserProfile.UserSettings.UserLinkedAccountsSettings.noLinkedAccounts": "Non hai alcun account esterno collegato al tuo account.",
+ "components.UserProfile.UserSettings.UserNotificationSettings.deviceDefault": "Predefinito del dispositivo",
+ "components.UserProfile.UserSettings.UserNotificationSettings.telegramMessageThreadIdTip": "Se nella tua chat di gruppo sono abilitati gli argomenti, puoi specificare qui l'ID di un thread/argomento",
+ "components.UserProfile.UserSettings.UserNotificationSettings.validationTelegramMessageThreadId": "L'ID del thread/argomento deve essere un numero intero positivo",
+ "components.UserProfile.localWatchlist": "Lista di {username}",
+ "i18n.addToBlacklist": "Aggiungi alle esclusioni",
+ "i18n.blacklist": "Esclusioni",
+ "i18n.blacklistError": "Qualcosa è andato storto. Riprova.",
+ "i18n.blacklistSuccess": "{title} è stato inserito con successo nelle esclusioni.",
+ "i18n.blacklisted": "Aggiunto alle esclusioni",
+ "i18n.removefromBlacklist": "Rimuovi dalle esclusioni",
+ "i18n.specials": "Speciali",
+ "components.Settings.SettingsMain.validationApplicationUrlTrailingSlash": "L'URL non deve terminare con una barra \"/\" finale"
}
diff --git a/src/i18n/locale/ja.json b/src/i18n/locale/ja.json
index dc5a0a52c4..840505650c 100644
--- a/src/i18n/locale/ja.json
+++ b/src/i18n/locale/ja.json
@@ -99,7 +99,6 @@
"components.Settings.address": "アドレス",
"components.Settings.addsonarr": "Sonarr サーバーを追加",
"components.Settings.cancelscan": "スキャンをキャンセル",
- "components.Settings.copied": "API キーをクリップボードにコピーされた。",
"components.Settings.currentlibrary": "現在のライブラリー:{name}",
"components.Settings.default": "デフォルト",
"components.Settings.default4k": "デフォルト 4K",
@@ -302,7 +301,6 @@
"components.Settings.Notifications.toastTelegramTestSuccess": "Telegram のテスト通知が送信されました。",
"components.Settings.Notifications.toastEmailTestSuccess": "メールテスト通知が送信されました。",
"components.Settings.Notifications.toastDiscordTestSuccess": "Discord のテスト通知が送信されました。",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSuccess": "LunaSea のテスト通知が送信されました。",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestSuccess": "Pushbullet のテスト通知が送信されました。",
"components.Settings.Notifications.NotificationsPushover.toastPushoverTestSuccess": "Pushover のテスト通知が送信されました。",
"components.Settings.Notifications.NotificationsSlack.toastSlackTestSuccess": "Slack のテスト通知が送信されました。",
@@ -310,14 +308,12 @@
"components.UserProfile.UserSettings.UserNotificationSettings.emailsettingsfailed": "メール通知設定の保存に失敗しました。",
"components.UserProfile.UserSettings.UserNotificationSettings.discordsettingsfailed": "Discord の通知設定の保存に失敗しました。",
"components.Settings.Notifications.telegramsettingsfailed": "Telegram の通知設定の保存に失敗しました。",
- "components.Settings.Notifications.NotificationsLunaSea.settingsFailed": "LunaSea の通知設定の保存に失敗しました。",
"components.Settings.Notifications.NotificationsPushbullet.pushbulletSettingsFailed": "Pushbullet の通知設定の保存に失敗しました。",
"components.Settings.Notifications.NotificationsPushover.pushoversettingsfailed": "Pushover の通知設定の保存に失敗しました。",
"components.UserProfile.UserSettings.UserNotificationSettings.telegramsettingssaved": "Telegram の通知設定が保存されました。",
"components.UserProfile.UserSettings.UserNotificationSettings.emailsettingssaved": "メール通知設定が保存されました。",
"components.UserProfile.UserSettings.UserNotificationSettings.discordsettingssaved": "Discord の通知設定が保存されました。",
"components.Settings.Notifications.telegramsettingssaved": "Telegram の通知設定が保存されました。",
- "components.Settings.Notifications.NotificationsLunaSea.settingsSaved": "LunaSea の通知設定が保存されました。",
"components.Settings.Notifications.NotificationsPushbullet.pushbulletSettingsSaved": "Pushbullet の通知設定が保存されました。",
"components.Settings.Notifications.NotificationsPushover.pushoversettingssaved": "Pushover の通知設定が保存されました。",
"components.ResetPassword.validationpasswordrequired": "パスワードを入力してください",
@@ -562,7 +558,6 @@
"components.NotificationTypeSelector.issuecomment": "チケットのコメント",
"components.NotificationTypeSelector.userissueresolvedDescription": "自分が報告したチケットが解決された際に通知を受ける",
"components.PermissionEdit.viewissuesDescription": "他ユーザーが作成されたチケットを確認できる",
- "components.Settings.Notifications.NotificationsLunaSea.agentenabled": "エージェントを有効にする",
"components.TvDetails.seasons": "{seasonCount, plural, one {#シーズン} other {#シーズン}}",
"components.Search.search": "検索",
"components.ManageSlideOver.opentautulli": "Tautulliで開く",
@@ -578,7 +573,6 @@
"components.NotificationTypeSelector.userissuereopenedDescription": "自ら報告したチケットが再度開いた際に通知を受ける",
"components.PermissionEdit.manageissuesDescription": "メディアのチケットを管理する権限を付与する",
"components.Settings.Notifications.NotificationsGotify.validationUrlTrailingSlash": "URL の末尾にスラッシュ( / )を入力してないでください",
- "components.Settings.Notifications.NotificationsLunaSea.profileName": "プロフィール名",
"components.IssueList.sortModified": "最終更新",
"components.IssueModal.CreateIssueModal.allepisodes": "すべてのエピソード",
"components.IssueModal.CreateIssueModal.problemepisode": "該当エピソード",
@@ -637,13 +631,6 @@
"components.Settings.Notifications.NotificationsGotify.toastGotifyTestSuccess": "Gotify のテスト通知を送信しました!",
"components.Settings.Notifications.NotificationsGotify.token": "アプリケーショントークン",
"components.Settings.Notifications.NotificationsGotify.url": "サーバーの URL",
- "components.Settings.Notifications.NotificationsLunaSea.validationTypes": "通知の種類は一つ以上を選択してください",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrlTip": "ユーザーまたはデバイスベースの notification webhook URL を指定します。",
- "components.Settings.Notifications.NotificationsLunaSea.validationWebhookUrl": "有効な URL を入力してください",
- "components.Settings.Notifications.NotificationsLunaSea.profileNameTip": "default プロファイルを使用しない場合のみ必要です。",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSending": "LunaSea テスト通知送信中…",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrl": "ウェブフック URL",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestFailed": "LunaSea のテスト通知の送信に失敗しました。",
"components.Settings.Notifications.NotificationsSlack.validationWebhookUrl": "有効な URL を入力してください",
"components.Settings.RadarrModal.validationApplicationUrl": "有効な URL を入力してください",
"components.Settings.Notifications.validationUrl": "有効な URL を入力してください",
diff --git a/src/i18n/locale/ko.json b/src/i18n/locale/ko.json
index 43bf6af99e..fede8d64bf 100644
--- a/src/i18n/locale/ko.json
+++ b/src/i18n/locale/ko.json
@@ -409,7 +409,6 @@
"components.Settings.SonarrModal.validationRootFolderRequired": "루트 폴더를 선택해야 합니다",
"components.Settings.advancedTooltip": "이 설정을 잘못 구성하면 기능이 제대로 작동하지 않을 수 있습니다",
"components.Settings.cancelscan": "스캔 취소",
- "components.Settings.copied": "클립보드에 API 키를 복사했습니다.",
"components.Settings.currentlibrary": "현재 라이브러리: {name}",
"components.Settings.default4k": "기본 4K",
"components.Settings.deleteServer": "{serverType} 서버 삭제",
@@ -759,14 +758,7 @@
"components.Selector.starttyping": "검색하시려면 입력해주세요.",
"components.Settings.Notifications.NotificationsGotify.agentenabled": "에이전트 활성화",
"components.Settings.Notifications.NotificationsGotify.toastGotifyTestSuccess": "Gotify 테스트 알림이 전송되었습니다!",
- "components.Settings.Notifications.NotificationsLunaSea.profileNameTip": "프로필을 사용하지 않는 경우 default 프로필이 필요",
- "components.Settings.Notifications.NotificationsLunaSea.settingsFailed": "LunaSea 알림 설정을 저장하지 못했습니다.",
"components.Settings.Notifications.NotificationsGotify.validationUrlTrailingSlash": "URL은 슬래시로 끝나서는 안 됩니다",
- "components.Settings.Notifications.NotificationsLunaSea.agentenabled": "에이전트 활성화",
- "components.Settings.Notifications.NotificationsLunaSea.profileName": "프로필 이름",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSuccess": "LunaSea 테스트 알림이 전송되었습니다!",
- "components.Settings.Notifications.NotificationsLunaSea.validationTypes": "적어도 하나 이상의 알림 유형을 선택해야 합니다",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrlTip": "사용자 또는 장치 기반 notification webhook URL",
"components.Settings.Notifications.NotificationsPushbullet.channelTag": "채널 태그",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestSuccess": "Pushbullet 테스트 알림이 전송되었습니다!",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestFailed": "Pushbullet 테스트 알림을 보내지 못했습니다.",
@@ -1012,10 +1004,6 @@
"components.Settings.Notifications.NotificationsGotify.gotifysettingsfailed": "Gotify 알림 설정을 저장하지 못했습니다.",
"components.Settings.Notifications.NotificationsGotify.token": "애플리케이션 토큰",
"components.Settings.Notifications.NotificationsGotify.url": "서버 URL",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestFailed": "LunaSea 테스트 알림을 보내지 못했습니다.",
- "components.Settings.Notifications.NotificationsLunaSea.settingsSaved": "LunaSea 알림 설정이 성공적으로 저장되었습니다!",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSending": "LunaSea 테스트 알림을 보내는 중…",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrl": "웹훅 URL",
"components.Settings.Notifications.NotificationsPushbullet.agentEnabled": "에이전트 활성화",
"components.Settings.Notifications.NotificationsPushbullet.accessToken": "액세스 토큰",
"components.Settings.Notifications.NotificationsPushbullet.accessTokenTip": "사용자의 토큰 생성 Account Settings",
@@ -1059,7 +1047,6 @@
"components.Settings.RadarrModal.validationMinimumAvailabilityRequired": "최소 요구 사항을 선택해야 합니다",
"components.ResetPassword.requestresetlinksuccessmessage": "만약 입력된 이메일 주소가 유효한 사용자와 연결되어 있다면, 비밀번호 재설정 링크가 해당 이메일 주소로 전송될 것입니다.",
"components.Settings.Notifications.NotificationsGotify.validationTokenRequired": "애플리케이션 토큰을 입력해야 합니다",
- "components.Settings.Notifications.NotificationsLunaSea.validationWebhookUrl": "유효한 URL을 입력해야 합니다",
"components.Settings.Notifications.NotificationsPushover.validationUserTokenRequired": "유효한 사용자 또는 그룹 키를 입력해야 합니다",
"components.Settings.Notifications.NotificationsWebhook.validationWebhookUrl": "유효한 URL을 입력해야 합니다",
"components.Settings.Notifications.validationSmtpHostRequired": "유효한 호스트 네임 또는 IP 주소를 입력해야 합니다",
@@ -1181,11 +1168,9 @@
"components.UserProfile.UserSettings.UserNotificationSettings.validationPgpPublicKey": "유효한 PGP 공개 키를 입력해야 합니다",
"components.UserProfile.UserSettings.UserNotificationSettings.validationPushbulletAccessToken": "액세스 토큰을 입력해야 합니다",
"components.UserProfile.UserSettings.UserPasswordChange.noPasswordSet": "이 사용자 계정에는 현재 암호가 설정되어 있지 않습니다. 이 계정이 \"로컬 사용자\"로 로그인할 수 있도록 하려면 아래 암호를 구성하세요",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingsfailed": "웹 푸시 알림 설정을 저장하지 못했습니다.",
"components.UserProfile.UserSettings.UserPasswordChange.newpassword": "새 암호",
"components.UserProfile.UserSettings.UserPasswordChange.validationConfirmPassword": "새 비밀번호를 확인해야 합니다",
"components.UserProfile.UserSettings.menuChangePass": "비밀번호",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingssaved": "웹 푸시 알림 설정이 성공적으로 저장되었습니다!",
"components.UserProfile.UserSettings.UserPasswordChange.noPasswordSetOwnAccount": "당신의 계정에는 현재 비밀번호가 설정되어 있지 않습니다. 이메일 주소를 사용하여 \"로컬 사용자\" 로 로그인하려면 아래 비밀번호를 구성하세요.",
"components.UserProfile.UserSettings.UserPasswordChange.nopermissionDescription": "이 사용자의 암호를 수정할 수 있는 권한이 없습니다.",
"components.UserProfile.UserSettings.UserPasswordChange.password": "비밀번호",
diff --git a/src/i18n/locale/nb_NO.json b/src/i18n/locale/nb_NO.json
index 7b13cbce48..1da5483873 100644
--- a/src/i18n/locale/nb_NO.json
+++ b/src/i18n/locale/nb_NO.json
@@ -99,7 +99,6 @@
"components.Settings.address": "Adresse",
"components.Settings.addsonarr": "Legg til Sonarr-tjener",
"components.Settings.cancelscan": "Avbryt skanning",
- "components.Settings.copied": "API-nøkkel kopiert til utklippstavle.",
"components.Settings.currentlibrary": "Nåværende bibliotek: {name}",
"components.Settings.default": "Standard",
"components.Settings.default4k": "Standard 4K",
@@ -564,18 +563,6 @@
"components.UserProfile.ProfileHeader.userid": "BrukerID: {userid}",
"components.UserProfile.unlimited": "Ubegrenset",
"components.Settings.Notifications.NotificationsPushbullet.accessTokenTip": "Gå til Pushbullet sinekontoinnstillinger for opprette en tilgangsnøkkel",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrlTip": "Ditt bruker- eller enhetsbaserte webhook-nettadresse for varsler",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrl": "Webhook-nettadresse",
- "components.Settings.Notifications.NotificationsLunaSea.validationWebhookUrl": "Du må oppgi en gyldig nettadresse",
- "components.Settings.Notifications.NotificationsLunaSea.validationTypes": "Du må velge minst én varseltype",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSuccess": "Test-varsel ble sendt med LunaSea!",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSending": "LunaSea sender test-varsel…",
- "components.Settings.Notifications.NotificationsLunaSea.settingsFailed": "Kunne ikke lagre instillingene for LunaSea.",
- "components.Settings.Notifications.NotificationsLunaSea.settingsSaved": "Innstillingene for LunaSea ble lagret!",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestFailed": "LunaSea mislykkes med å sende test-varsel.",
- "components.Settings.Notifications.NotificationsLunaSea.profileNameTip": "Kun nødvendig dersom en annen profil enn default er i bruk",
- "components.Settings.Notifications.NotificationsLunaSea.profileName": "Profilnavn",
- "components.Settings.Notifications.NotificationsLunaSea.agentenabled": "Aktiver Tjeneste",
"components.RequestModal.edit": "Rediger forespørsel",
"components.RequestList.RequestItem.requesteddate": "Forespurt",
"components.RequestList.RequestItem.editrequest": "Rediger forespørsel",
@@ -857,8 +844,6 @@
"components.UserProfile.UserSettings.UserPasswordChange.password": "Passord",
"components.UserProfile.UserSettings.UserPasswordChange.confirmpassword": "Gjenta Passord",
"components.UserProfile.UserSettings.UserPasswordChange.nopermissionDescription": "Du har ikke tillatelse til å endre denne brukerens passord.",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingsfailed": "Kunne ikke lagre instillingene for Web Push.",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingssaved": "Innstillingene for Web Push ble lagret!",
"components.UserProfile.UserSettings.UserPasswordChange.newpassword": "Nytt Passord",
"components.UserProfile.UserSettings.UserPasswordChange.currentpassword": "Nåværende Passord",
"components.UserProfile.UserSettings.UserPasswordChange.toastSettingsFailure": "Noe gikk galt under lagring av passordet.",
@@ -1151,5 +1136,6 @@
"components.Discover.FilterSlideover.firstAirDate": "Første Sendingsdato",
"components.Discover.FilterSlideover.from": "Fra",
"components.Discover.FilterSlideover.genres": "Sjangere",
- "components.Discover.PlexWatchlistSlider.plexwatchlist": "Din Visningsliste"
+ "components.Discover.PlexWatchlistSlider.plexwatchlist": "Din Visningsliste",
+ "components.Discover.FilterSlideover.ratingText": "Vurderinger mellom {minValue} og {maxValue}"
}
diff --git a/src/i18n/locale/nl.json b/src/i18n/locale/nl.json
index 250974394f..9edea1d626 100644
--- a/src/i18n/locale/nl.json
+++ b/src/i18n/locale/nl.json
@@ -99,7 +99,6 @@
"components.Settings.address": "Adres",
"components.Settings.addsonarr": "Sonarr-server toevoegen",
"components.Settings.cancelscan": "Scan annuleren",
- "components.Settings.copied": "API-sleutel gekopieerd naar klembord.",
"components.Settings.currentlibrary": "Huidige bibliotheek: {name}",
"components.Settings.default": "Standaard",
"components.Settings.default4k": "Standaard 4K",
@@ -716,17 +715,8 @@
"components.Settings.webpush": "Web-push",
"components.Settings.Notifications.NotificationsWebPush.webpushsettingssaved": "Instellingen voor web-pushmeldingen opgeslagen!",
"components.Settings.Notifications.NotificationsWebPush.webpushsettingsfailed": "Instellingen voor web-pushmeldingen zijn niet opgeslagen.",
- "components.Settings.Notifications.NotificationsLunaSea.profileName": "Profielnaam",
- "components.Settings.Notifications.NotificationsLunaSea.agentenabled": "Dienst inschakelen",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingssaved": "Instellingen voor web-pushmeldingen opgeslagen!",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingsfailed": "Instellingen voor web-pushmeldingen konden niet worden opgeslagen.",
"components.Settings.noDefault4kServer": "Een 4K-{serverType}server moet als standaard worden gemarkeerd om gebruikers toe te laten om 4K-{mediaType} aan te vragen.",
"components.Settings.is4k": "4K",
- "components.Settings.Notifications.NotificationsLunaSea.profileNameTip": "Alleen vereist als je niet het default profiel gebruikt",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrl": "Webhook-URL",
- "components.Settings.Notifications.NotificationsLunaSea.validationWebhookUrl": "Je moet een geldige URL opgeven",
- "components.Settings.Notifications.NotificationsLunaSea.settingsSaved": "Instellingen voor meldingen LunaSea opgeslagen!",
- "components.Settings.Notifications.NotificationsLunaSea.settingsFailed": "Instellingen voor meldingen LunaSea niet opgeslagen.",
"components.Settings.SettingsUsers.newPlexLoginTip": "{mediaServerName}-gebruikers toestaan zich aan te melden zonder eerst geïmporteerd te zijn",
"components.Settings.SettingsUsers.newPlexLogin": "Nieuwe {mediaServerName}-aanmelding inschakelen",
"components.Settings.Notifications.toastTelegramTestSuccess": "Testmelding Telegram verzonden!",
@@ -751,11 +741,8 @@
"components.Settings.Notifications.NotificationsPushover.toastPushoverTestSending": "Testmelding Pushover verzenden…",
"components.Settings.Notifications.NotificationsPushover.toastPushoverTestFailed": "Testmelding Pushover niet verzonden.",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestSuccess": "Testmelding Pushbullet verzonden!",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSending": "Testmelding LunaSea verzenden…",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestSending": "Testmelding Pushbullet verzenden…",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestFailed": "Testmelding Pushbullet niet verzonden.",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSuccess": "Testmelding LunaSea verzonden!",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestFailed": "Testmelding LunaSea niet verzonden.",
"components.PermissionEdit.requestMoviesDescription": "Toestemming geven om niet-4K-films aan te vragen.",
"components.PermissionEdit.requestTvDescription": "Toestemming geven om niet-4K-series aan te vragen.",
"components.PermissionEdit.requestTv": "Series aanvragen",
@@ -769,7 +756,6 @@
"components.Settings.Notifications.NotificationsPushover.userTokenTip": "Je gebruikers- of groepsidentifier van 30 tekens",
"components.Settings.Notifications.NotificationsPushover.accessTokenTip": "Een toepassing registreren om te gebruiken met Jellyseerr",
"components.Settings.Notifications.NotificationsPushbullet.accessTokenTip": "Maak een token aan vanuit je accountinstellingen",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrlTip": "Je 'User' of 'Device' meldingswebhook-URL",
"components.Settings.Notifications.encryptionTip": "In de meeste gevallen gebruikt impliciete TLS poort 465 en STARTTLS poort 587",
"components.Settings.Notifications.encryptionOpportunisticTls": "Altijd STARTTLS gebruiken",
"components.Settings.Notifications.encryptionNone": "Geen",
@@ -795,7 +781,6 @@
"components.Settings.Notifications.NotificationsSlack.validationTypes": "Je moet ten minste één meldingstype selecteren",
"components.Settings.Notifications.NotificationsPushover.validationTypes": "Je moet ten minste één meldingstype selecteren",
"components.Settings.Notifications.NotificationsPushbullet.validationTypes": "Je moet ten minste één meldingstype selecteren",
- "components.Settings.Notifications.NotificationsLunaSea.validationTypes": "Je moet ten minste één meldingstype selecteren",
"components.NotificationTypeSelector.usermediarequestedDescription": "Een melding ontvangen wanneer andere gebruikers nieuwe media-aanvragen indienen waarvoor goedkeuring vereist is.",
"components.NotificationTypeSelector.usermediafailedDescription": "Een melding ontvangen wanneer media-aanvragen niet kunnen worden toegevoegd aan Radarr of Sonarr.",
"components.NotificationTypeSelector.usermediadeclinedDescription": "Een melding ontvangen wanneer je media-aanvragen worden geweigerd.",
@@ -1306,7 +1291,6 @@
"components.Login.hostname": "{mediaServerName} URL",
"components.Login.port": "Poort",
"components.Login.servertype": "Servertype",
- "components.Login.validationHostnameRequired": "Je moet een geldige hostnaam of IP-adres opgeven",
"components.Login.validationPortRequired": "Je moet een geldig poortnummer opgeven",
"components.Login.validationUrlBaseLeadingSlash": "URL-basis moet beginnen met een schuine streep",
"components.Login.validationUrlTrailingSlash": "URL mag niet eindigen met een schuine streep",
@@ -1444,7 +1428,6 @@
"components.Settings.OverrideRuleTile.qualityprofile": "Kwaliteitsprofiel",
"components.Settings.OverrideRuleTile.rootfolder": "Hoofdmap",
"components.Settings.OverrideRuleTile.settings": "Instellingen",
- "components.Settings.SettingsNetwork.advancedNetworkSettings": "Geavanceerde netwerkinstellingen",
"components.Settings.SettingsNetwork.csrfProtection": "CSRF-bescherming inschakelen",
"components.Settings.SettingsNetwork.docs": "documentatie",
"components.Settings.SettingsNetwork.csrfProtectionTip": "Stel externe API-toegang in op alleen-lezen (HTTPS vereist)",
diff --git a/src/i18n/locale/pl.json b/src/i18n/locale/pl.json
index adb70fa438..70ed0d8d3b 100644
--- a/src/i18n/locale/pl.json
+++ b/src/i18n/locale/pl.json
@@ -274,15 +274,6 @@
"components.ResetPassword.validationpasswordminchars": "Hasło jest zbyt krótkie; powinno mieć co najmniej 8 znaków",
"components.ResetPassword.validationpasswordrequired": "Musisz podać hasło",
"components.Search.search": "Szukaj",
- "components.Settings.Notifications.NotificationsLunaSea.agentenabled": "Włącz agenta",
- "components.Settings.Notifications.NotificationsLunaSea.profileNameTip": "Wymagane tylko wtedy, gdy nie używasz profilu default",
- "components.Settings.Notifications.NotificationsLunaSea.settingsFailed": "Nie udało się zapisać ustawień powiadomień LunaSea.",
- "components.Settings.Notifications.NotificationsLunaSea.settingsSaved": "Ustawienia powiadomień LunaSea zostały pomyślnie zapisane!",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestFailed": "Nie udało się wysłać powiadomienia testowego LunaSea.",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSending": "Wysyłanie powiadomienia testowego LunaSea…",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSuccess": "Wysłano powiadomienie testowe LunaSea!",
- "components.Settings.Notifications.NotificationsLunaSea.validationWebhookUrl": "Musisz podać poprawny adres URL",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrl": "URL Webhook",
"components.Settings.Notifications.NotificationsPushbullet.accessToken": "Token dostępu (Access Token)",
"components.Settings.Notifications.NotificationsPushover.accessTokenTip": " Zarejestruj aplikację do użytku z Jellyseerr",
"components.Settings.Notifications.NotificationsPushover.pushoversettingsfailed": "Nie udało się zapisać ustawień powiadomień Pushover.",
@@ -329,7 +320,6 @@
"components.Settings.SettingsAbout.Releases.versionChangelog": "{version} Lista zmian",
"components.RequestModal.QuotaDisplay.season": "sezon",
"components.RequestModal.requestcancelled": "Prośba o {title} została anulowana.",
- "components.Settings.Notifications.NotificationsLunaSea.validationTypes": "Musisz wybrać co najmniej jeden typ powiadomienia",
"components.RequestModal.requestSuccess": "Prośba o {title} wysłana pomyślnie!",
"components.RequestModal.season": "sezon",
"components.ResetPassword.emailresetlink": "Link do odzyskiwania przez adres e-mail",
@@ -340,10 +330,8 @@
"components.ResetPassword.email": "Adres e-mail",
"components.ResetPassword.password": "Hasło",
"components.ResetPassword.resetpasswordsuccessmessage": "Hasło zostało zresetowane pomyślnie!",
- "components.Settings.Notifications.NotificationsLunaSea.profileName": "Nazwa profilu",
"components.Settings.Notifications.NotificationsPushbullet.validationAccessTokenRequired": "Musisz podać token dostępu",
"components.Settings.Notifications.NotificationsPushbullet.validationTypes": "Musisz wybrać co najmniej jeden typ powiadomienia",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrlTip": "Twój adres URL obiektu webhook powiadomienia oparty na użytkowniku lub urządzeniu",
"components.Settings.Notifications.NotificationsPushbullet.pushbulletSettingsSaved": "Ustawienia powiadomień pushbullet zostały pomyślnie zapisane!",
"components.Settings.Notifications.NotificationsPushover.agentenabled": "Włącz agenta",
"components.Settings.Notifications.NotificationsPushover.toastPushoverTestSuccess": "Powiadomienie testowe Pushover wysłane!",
@@ -617,7 +605,6 @@
"components.Settings.SonarrModal.validationNameRequired": "Musisz podać nazwę serwera",
"components.Settings.SonarrModal.validationRootFolderRequired": "Musisz wybrać folder główny",
"components.Settings.activeProfile": "Aktywny profil",
- "components.Settings.copied": "Skopiowano klucz API do schowka.",
"components.Settings.default": "Domyślny",
"components.Settings.default4k": "Domyślne 4K",
"components.Settings.deleteserverconfirm": "Czy na pewno chcesz usunąć ten serwer?",
@@ -679,7 +666,6 @@
"components.UserProfile.UserSettings.UserNotificationSettings.sendSilentlyDescription": "Wysyłaj powiadomienia bez dźwięku",
"components.UserProfile.UserSettings.UserNotificationSettings.telegramChatId": "Identyfikator czatu",
"components.UserProfile.UserSettings.UserPasswordChange.confirmpassword": "Potwierdź hasło",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingssaved": "Ustawienia powiadomień web push zostały pomyślnie zapisane!",
"i18n.noresults": "Brak wyników.",
"i18n.notrequested": "Brak próśb",
"i18n.partiallyavailable": "Częściowo dostępne",
@@ -802,7 +788,6 @@
"components.UserProfile.UserSettings.UserNotificationSettings.validationPushoverUserKey": "Musisz podać prawidłowy klucz użytkownika lub grupy",
"components.UserProfile.UserSettings.UserNotificationSettings.validationTelegramChatId": "Musisz podać prawidłowy identyfikator czatu",
"components.UserProfile.UserSettings.UserNotificationSettings.webpush": "Web Push",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingsfailed": "Nie udało się zapisać ustawień powiadomień Web Push.",
"components.UserProfile.UserSettings.UserPasswordChange.currentpassword": "Aktualne hasło",
"components.UserProfile.UserSettings.UserPasswordChange.newpassword": "Nowe hasło",
"components.UserProfile.UserSettings.UserPasswordChange.toastSettingsSuccess": "Hasło zostało zapisane pomyślnie!",
@@ -937,7 +922,7 @@
"components.RequestModal.selectmovies": "Wybierz film(y)",
"components.RequestModal.requestmovies": "Prośba o {count} {count, plural, one {film} other {filmów}}",
"components.IssueDetails.commentplaceholder": "Dodaj komentarz…",
- "components.MovieDetails.productioncountries": "Produkcja {countryCount, plural, one {kraj} other {kraje}}",
+ "components.MovieDetails.productioncountries": "{countryCount, plural, one {Kraj} other {Kraje}} produkcji",
"components.RequestModal.requestseasons4k": "Prośba o {seasonCount} {seasonCount, plural, one {sezon} other {sezony}} w 4K",
"components.TvDetails.productioncountries": "Produkcja {countryCount, plural, one {kraj} other {kraje}}",
"components.RequestModal.approve": "Zatwierdź prośbę",
@@ -1223,13 +1208,12 @@
"components.Settings.manualscanDescriptionJellyfin": "Zwykle będzie to uruchamiane tylko raz na 24 godziny. Jellyseerr będzie bardziej agresywnie sprawdzać ostatnio dodane biblioteki serwera {mediaServerName}. Jeśli po raz pierwszy konfigurujesz Jellyseerr, zalecane jest jednorazowe pełne ręczne skanowanie biblioteki!",
"components.Discover.DiscoverTv.activefilters": "{count, plural, one {# Aktywny filtr} other {# Aktywne filtry}}",
"components.Login.back": "Wróć",
- "components.Login.validationHostnameRequired": "Musisz wprowadzić prawidłowy adres IP lub nazwę hosta",
"components.MovieDetails.watchlistDeleted": "{title} został z powodzeniem usunięty z listy Do obejrzenia!",
"components.MovieDetails.watchlistSuccess": "{title} został z powodzeniem dodany do listy Do obejrzenia!",
"components.Settings.SettingsJobsCache.editJobScheduleSelectorSeconds": "Co {jobScheduleSeconds, plural, one {sekundę} other {{jobScheduleSeconds} sekundy}}",
"components.Settings.SettingsJobsCache.image-cache-cleanup": "Czyszczenie pamięci podręcznej obrazów",
"components.Settings.SettingsJobsCache.imagecache": "Pamięć podręczna obrazów",
- "components.Discover.DiscoverMovies.activefilters": "{count, plural, one {# Aktywny filtr} other {# Aktywne filtry}}",
+ "components.Discover.DiscoverMovies.activefilters": "{count, plural, one {# aktywny filtr} few {# aktywne filtry} other {# aktywnych filtrów}}",
"components.Login.enablessl": "Użyj SSL",
"components.Login.invalidurlerror": "Niepowodzenie połączenia z serwerem {mediaServerName}.",
"components.Login.port": "Port",
diff --git a/src/i18n/locale/pt_BR.json b/src/i18n/locale/pt_BR.json
index 630d3dd3d5..e6dc5d0f58 100644
--- a/src/i18n/locale/pt_BR.json
+++ b/src/i18n/locale/pt_BR.json
@@ -49,7 +49,6 @@
"components.Settings.default4k": "Padrão 4K",
"components.Settings.default": "Padrão",
"components.Settings.currentlibrary": "Biblioteca Atual: {name}",
- "components.Settings.copied": "Chave de API copiada.",
"components.Settings.cancelscan": "Cancelar Escaneamento",
"components.Settings.addsonarr": "Adicionar Servidor Sonarr",
"components.Settings.address": "Endereço",
@@ -709,7 +708,6 @@
"components.Settings.RadarrModal.enableSearch": "Habilitar Busca Automática",
"components.PermissionEdit.requestMovies": "Solicitar Filmes",
"components.DownloadBlock.estimatedtime": "Estimativa {time}",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingssaved": "Configurações de notificação via web push salvas com sucesso!",
"components.UserProfile.UserSettings.UserNotificationSettings.webpush": "Web Push",
"components.UserProfile.UserSettings.UserGeneralSettings.languageDefault": "Padrão ({language})",
"components.UserProfile.UserSettings.UserGeneralSettings.applanguage": "Idioma da Interface",
@@ -726,7 +724,6 @@
"components.Settings.Notifications.encryption": "Método de Encriptação",
"components.Settings.Notifications.botApiTip": "Criar um bot para usar com Jellyseerr",
"components.Settings.Notifications.NotificationsWebPush.webpushsettingssaved": "Configurações de notificação via web push salvas com sucesso!",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingsfailed": "Falha ao salvar configurações de notificação via web push.",
"components.Settings.Notifications.NotificationsWebPush.webpushsettingsfailed": "Falha ao salvar configurações de notificação via web push.",
"components.Settings.Notifications.NotificationsWebPush.httpsRequirement": "Para receber notificações via web push, o Jellyseerr deve ser acessível via HTTPS.",
"components.Settings.Notifications.NotificationsSlack.webhookUrlTip": "Criar integração para um webhook de entrada",
@@ -757,18 +754,7 @@
"components.Settings.Notifications.NotificationsPushover.toastPushoverTestFailed": "Falha ao enviar notificação de teste via Pushover.",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestFailed": "Falha ao enviar notificação de teste via Pushbullet.",
"components.Settings.Notifications.NotificationsPushbullet.accessTokenTip": "Criar um token à partir de sua Configuração de Conta",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrlTip": "Sua URL de webhook para notificação baseada em usuário ou dispositivo",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrl": "URL de Webhook",
- "components.Settings.Notifications.NotificationsLunaSea.validationWebhookUrl": "Você deve prover uma URL válida",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSuccess": "Notificação de teste via LunaSea enviada!",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSending": "Enviando notificação de teste via LunaSea…",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestFailed": "Falha ao enviar notificação de teste via LunaSea.",
- "components.Settings.Notifications.NotificationsLunaSea.settingsSaved": "Configurações de notificação via LunaSea salvas com sucesso!",
- "components.Settings.Notifications.NotificationsLunaSea.settingsFailed": "Falha ao salvar configurações de notificação via LunaSea.",
- "components.Settings.Notifications.NotificationsLunaSea.profileNameTip": "Necessário apenas quando não estiver usando o perfil default",
- "components.Settings.Notifications.NotificationsLunaSea.profileName": "Nome de Perfil",
"components.Settings.Notifications.NotificationsWebPush.agentenabled": "Habilitar Agente",
- "components.Settings.Notifications.NotificationsLunaSea.agentenabled": "Habilitar Agente",
"components.PermissionEdit.requestTvDescription": "Concede permissão para solicitar séries em não 4K.",
"components.PermissionEdit.requestTv": "Solicitar Séries",
"components.PermissionEdit.requestMoviesDescription": "Concede permissão para solicitar filmes em não 4K.",
@@ -786,7 +772,6 @@
"components.Settings.Notifications.NotificationsSlack.validationTypes": "Você deve selecionar ao menos um tipo de notificação",
"components.Settings.Notifications.NotificationsPushover.validationTypes": "Você deve selecionar ao menos um tipo de notificação",
"components.Settings.Notifications.NotificationsPushbullet.validationTypes": "Você deve selecionar ao menos um tipo de notificação",
- "components.Settings.Notifications.NotificationsLunaSea.validationTypes": "Você deve selecionar ao menos um tipo de notificação",
"components.QuotaSelector.tvRequests": "{quotaLimit} {temporadas} a cada {quotaDays} {dias}",
"components.QuotaSelector.seasons": "{count, plural, one {temporada} other {temporadas}}",
"components.QuotaSelector.movies": "{count, plural, one {file} other {filmes}}",
@@ -1254,7 +1239,6 @@
"components.TitleCard.addToWatchList": "Adicionar a lista para assistir",
"components.Login.port": "Porta",
"components.Login.servertype": "Tipo de Servidor",
- "components.Login.validationHostnameRequired": "Você deve fornecer um nome de host ou endereço IP válido",
"components.Login.validationPortRequired": "Você deve fornecer um número de porta válido",
"components.Login.validationUrlBaseTrailingSlash": "A URL base não deve terminar com uma barra",
"components.Login.validationUrlTrailingSlash": "A URL não deve terminar com uma barra",
diff --git a/src/i18n/locale/pt_PT.json b/src/i18n/locale/pt_PT.json
index a602ab2780..3851d11db4 100644
--- a/src/i18n/locale/pt_PT.json
+++ b/src/i18n/locale/pt_PT.json
@@ -236,7 +236,6 @@
"components.Settings.default4k": "Predefinição 4K",
"components.Settings.default": "Predefinição",
"components.Settings.currentlibrary": "Biblioteca Atual: {name}",
- "components.Settings.copied": "Chave API copiada.",
"components.Settings.addsonarr": "Adicionar Servidor Sonarr",
"components.Settings.address": "Endereço",
"components.Settings.addradarr": "Adicionar Servidor Radarr",
@@ -716,15 +715,6 @@
"components.Settings.Notifications.NotificationsWebPush.webpushsettingssaved": "Definições de notificação web push gravadas com sucesso!",
"components.Settings.Notifications.NotificationsWebPush.webpushsettingsfailed": "Falha ao gravar as definições de notificação web push.",
"components.Settings.Notifications.NotificationsWebPush.agentenabled": "Ativar Agente",
- "components.Settings.Notifications.NotificationsLunaSea.profileNameTip": "Requerido apenas se não estiver a usar o perfil default",
- "components.Settings.Notifications.NotificationsLunaSea.settingsSaved": "Definições de notificação LunaSea gravadas com sucesso!",
- "components.Settings.Notifications.NotificationsLunaSea.settingsFailed": "Falha ao gravar as definições de notificação do LunaSea.",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrl": "URL de Webhook",
- "components.Settings.Notifications.NotificationsLunaSea.validationWebhookUrl": "Deve fornecer uma URL valido",
- "components.Settings.Notifications.NotificationsLunaSea.profileName": "Nome do Perfil",
- "components.Settings.Notifications.NotificationsLunaSea.agentenabled": "Ativar Agente",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingssaved": "Definições de notificação web push gravadas com sucesso!",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingsfailed": "Falha ao gravar as definições de notificação web push.",
"components.Settings.noDefault4kServer": "Um servidor 4K {serverType} deve ser marcado como predefinido para permitir que os utilizador enviem pedidos 4K de {mediaType}.",
"components.Settings.is4k": "4K",
"components.Settings.SettingsUsers.newPlexLoginTip": "Permitir que Utilizadores do {mediaServerName} iniciem sessão sem primeiro serem importados",
@@ -737,7 +727,6 @@
"components.Settings.Notifications.NotificationsSlack.toastSlackTestSuccess": "Notificação de teste Slack enviada!",
"components.Settings.Notifications.NotificationsPushover.toastPushoverTestSuccess": "Notificação de teste Pushover enviada!",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestSuccess": "Notificação de teste Pushbullet enviada!",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSuccess": "Notificação de teste LunaSea enviada!",
"components.Settings.Notifications.toastTelegramTestSending": "A enviar notificação de teste Telegram…",
"components.Settings.Notifications.toastEmailTestSending": "A enviar notificação de teste e-mail…",
"components.Settings.Notifications.toastDiscordTestSending": "A enviar notificação de teste Discord…",
@@ -745,7 +734,6 @@
"components.Settings.Notifications.NotificationsWebPush.toastWebPushTestSending": "A enviar notificação de teste web push…",
"components.Settings.Notifications.NotificationsPushover.toastPushoverTestSending": "A enviar notificação de teste Pushover…",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestSending": "A enviar notificação de teste Pushbullet…",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSending": "A enviar notificação de teste ao LunaSea…",
"components.Settings.Notifications.toastTelegramTestFailed": "Falha ao enviar notificação de teste Telegram.",
"components.Settings.Notifications.toastEmailTestFailed": "Falha ao enviar notificação de teste e-mail.",
"components.Settings.Notifications.toastDiscordTestFailed": "Falha ao enviar notificação de teste Discord.",
@@ -755,7 +743,6 @@
"components.Settings.Notifications.NotificationsSlack.toastSlackTestFailed": "Falha ao enviar notificação de teste Slack.",
"components.Settings.Notifications.NotificationsPushover.toastPushoverTestFailed": "Falha ao enviar notificação de teste Pushover.",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestFailed": "Falha ao enviar notificação de teste Pushbullet.",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestFailed": "Falha ao enviar notificação de teste ao LunaSea.",
"components.PermissionEdit.requestTvDescription": "Conceder permissão para pedir séries não 4K.",
"components.PermissionEdit.requestTv": "Pedir Séries",
"components.PermissionEdit.requestMoviesDescription": "Conceder permissão para pedir filmes não 4K.",
@@ -778,7 +765,6 @@
"components.Settings.Notifications.NotificationsSlack.webhookUrlTip": "Criar integração para um Webhook de Entrada",
"components.Settings.Notifications.NotificationsPushover.userTokenTip": "O seu identificador de utilizador ou grupo contendo 30 caractéres",
"components.Settings.Notifications.NotificationsPushbullet.accessTokenTip": "Criar um token a partir das suas Definições de Conta",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrlTip": "Sua URL de webhook para notificação baseada em utilizador ou dispositivo",
"components.RequestList.RequestItem.requesteddate": "Pedido",
"components.RequestCard.failedretry": "Ocorreu um erro ao voltar a tentar o pedido.",
"components.DownloadBlock.estimatedtime": "Estimativa {time}",
@@ -795,7 +781,6 @@
"components.Settings.Notifications.NotificationsSlack.validationTypes": "Deve selecionar pelo menos um tipo de notificação",
"components.Settings.Notifications.NotificationsPushover.validationTypes": "Deve selecionar pelo menos um tipo de notificação",
"components.Settings.Notifications.NotificationsPushbullet.validationTypes": "Deve selecionar pelo menos um tipo de notificação",
- "components.Settings.Notifications.NotificationsLunaSea.validationTypes": "Deve selecionar pelo menos um tipo de notificação",
"components.NotificationTypeSelector.usermediarequestedDescription": "Notificar quando outros utilizadores enviarem novos pedidos de multimédia que requeiram aprovação.",
"components.NotificationTypeSelector.usermediafailedDescription": "Notificar quando os pedidos de multimédia não forem adicionados ao Radarr ou Sonarr.",
"components.NotificationTypeSelector.usermediadeclinedDescription": "Notificar quando seus pedidos de multimédia forem recusados.",
diff --git a/src/i18n/locale/ro.json b/src/i18n/locale/ro.json
index c6b22bb340..027b078b67 100644
--- a/src/i18n/locale/ro.json
+++ b/src/i18n/locale/ro.json
@@ -441,7 +441,6 @@
"components.RequestModal.errorediting": "Ceva nu a funcționat în cursul editării solicitării.",
"components.RequestModal.selectseason": "Selectați Sezoane",
"components.Settings.Notifications.NotificationsGotify.validationTypes": "Trebuie să selectați cel puțin un tip de notificare",
- "components.Login.validationHostnameRequired": "Trebuie să introduceți un hostname sau o adresă IP valide",
"components.RequestModal.AdvancedRequester.languageprofile": "Profil Limbă",
"components.RequestModal.QuotaDisplay.requiredquota": "Trebuie să aveți cel puțin {seasons} {seasons, plural, one {season request} other {season requests}} rămase pentru a putea trimite o solicitare pentru această serie.",
"components.RequestModal.requestmovies": "Solicitați {count} {count, plural, one {Movie} alte {Movies}}",
@@ -456,10 +455,8 @@
"components.RequestModal.SearchByNameModal.notvdbiddescription": "Nu am reușit să găsim automat un rezultat pentru aceast serial. Vă rugăm să selectați mai jos rezultatul corect.",
"components.RequestModal.edit": "Editați Solicitare",
"components.Settings.Notifications.NotificationsGotify.gotifysettingsfailed": "Setările de notificare Gotify nu au reușit să fie salvate.",
- "components.Settings.Notifications.NotificationsLunaSea.settingsSaved": "Setările de notificare LunaSea au fost salvate cu success!",
"components.RequestModal.QuotaDisplay.quotaLinkUser": "Puteți vizualiza un rezumat al limitelor de solicitare ale acestui utilizator pe pagina sa profile.",
"components.Selector.showmore": "Afișează mai mult",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSuccess": "Testul de notificare LunaSea a fost trimis!",
"components.RequestCard.tmdbid": "ID TMDB",
"components.RequestCard.tvdbid": "ID TheTVDB",
"components.ResetPassword.email": "Adresă Email",
@@ -585,15 +582,6 @@
"components.Settings.Notifications.NotificationsGotify.validationTokenRequired": "Trebuie să furnizați un token de aplicație",
"components.Settings.Notifications.NotificationsGotify.validationUrlRequired": "Trebuie să furnizați un URL valid",
"components.Settings.Notifications.NotificationsGotify.validationUrlTrailingSlash": "URL-ul nu trebuie să se termine cu o bară oblică",
- "components.Settings.Notifications.NotificationsLunaSea.agentenabled": "Activați Agentul",
- "components.Settings.Notifications.NotificationsLunaSea.profileName": "Nume Profil",
- "components.Settings.Notifications.NotificationsLunaSea.profileNameTip": "Necesar doar dacă nu este folosit profilul default",
- "components.Settings.Notifications.NotificationsLunaSea.settingsFailed": "Setările de notificare LunaSea nu au reușit să fie salvate.",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestFailed": "Setările de notificare LunaSea nu au reușit să fie trimise.",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSending": "Trimitere test notificare LunaSea…",
- "components.Settings.Notifications.NotificationsLunaSea.validationTypes": "Trebuie să selectați cel puțin un tip de notificare",
- "components.Settings.Notifications.NotificationsLunaSea.validationWebhookUrl": "Trebuie să furnizați un URL valid",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrl": "URL Webhook",
"components.Settings.Notifications.NotificationsPushbullet.accessToken": "Token Acces",
"components.Settings.Notifications.NotificationsPushbullet.channelTag": "Etichetă Canal",
"components.Settings.Notifications.NotificationsPushbullet.pushbulletSettingsSaved": "Setările de notificare Pushbullet au fost salvate cu success!",
@@ -618,5 +606,10 @@
"components.Settings.Notifications.NotificationsSlack.agentenabled": "Activați Agentul",
"components.Settings.Notifications.NotificationsSlack.slacksettingsfailed": "Setările de notificare Slack nu au reușit să fie salvate.",
"components.Settings.Notifications.NotificationsSlack.slacksettingssaved": "Setările de notificare Slack au fost salvate cu success!",
- "components.Discover.FilterSlideover.status": "Status"
+ "components.Discover.FilterSlideover.status": "Status",
+ "components.Blacklist.mediaName": "Nume",
+ "components.Blacklist.mediaType": "Tip",
+ "components.Blacklist.blacklistedby": "{date} de către {user}",
+ "components.Blacklist.blacklistdate": "dată",
+ "components.Blacklist.mediaTmdbId": "Id tmdb"
}
diff --git a/src/i18n/locale/ru.json b/src/i18n/locale/ru.json
index efdb032e65..e8f1b27c38 100644
--- a/src/i18n/locale/ru.json
+++ b/src/i18n/locale/ru.json
@@ -99,7 +99,6 @@
"components.Settings.address": "Адрес",
"components.Settings.addsonarr": "Добавить сервер Sonarr",
"components.Settings.cancelscan": "Отменить сканирование",
- "components.Settings.copied": "Ключ API скопирован в буфер обмена.",
"components.Settings.currentlibrary": "Текущая библиотека: {name}",
"components.Settings.default": "По умолчанию",
"components.Settings.default4k": "4К по умолчанию",
@@ -274,8 +273,6 @@
"components.StatusBadge.status4k": "4K {status}",
"pages.errormessagewithcode": "{statusCode} - {error}",
"components.Settings.Notifications.NotificationsPushbullet.accessToken": "Токен доступа",
- "components.Settings.Notifications.NotificationsLunaSea.validationWebhookUrl": "Вы должны указать действительный URL-адрес",
- "components.Settings.Notifications.NotificationsLunaSea.profileName": "Название профиля",
"components.ResetPassword.resetpasswordsuccessmessage": "Пароль сброшен успешно!",
"components.ResetPassword.passwordreset": "Сбросить пароль",
"components.RequestModal.edit": "Редактировать запрос",
@@ -498,7 +495,6 @@
"components.Settings.Notifications.NotificationsWebhook.validationTypes": "Вы должны выбрать хотя бы один тип уведомлений",
"components.Settings.Notifications.NotificationsSlack.validationTypes": "Вы должны выбрать хотя бы один тип уведомлений",
"components.Settings.Notifications.NotificationsPushbullet.validationTypes": "Вы должны выбрать хотя бы один тип уведомлений",
- "components.Settings.Notifications.NotificationsLunaSea.validationTypes": "Вы должны выбрать хотя бы один тип уведомлений",
"components.Settings.Notifications.NotificationsPushover.validationTypes": "Вы должны выбрать хотя бы один тип уведомлений",
"components.Settings.Notifications.NotificationsPushover.validationAccessTokenRequired": "Вы должны предоставить действительный токен приложения",
"components.Settings.Notifications.NotificationsPushover.userTokenTip": "Ваш тридцатизначный идентификатор пользователя или группы",
@@ -512,8 +508,6 @@
"i18n.notrequested": "Не запрошен",
"i18n.noresults": "Нет результатов.",
"i18n.delimitedlist": "{a}, {b}",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrl": "URL веб-перехватчика",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrlTip": "URL веб-перехватчика для уведомлений на основе вашего пользователя или устройства",
"components.Settings.Notifications.NotificationsPushover.accessToken": "Токен API приложения",
"components.Settings.Notifications.NotificationsPushbullet.validationAccessTokenRequired": "Вы должны предоставить токен доступа",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestSuccess": "Тестовое уведомление отправлено в Pushbullet!",
@@ -522,15 +516,8 @@
"components.Settings.Notifications.NotificationsPushbullet.pushbulletSettingsSaved": "Настройки уведомлений Pushbullet успешно сохранены!",
"components.Settings.Notifications.NotificationsPushbullet.pushbulletSettingsFailed": "Не удалось сохранить настройки уведомлений Pushbullet.",
"components.Settings.Notifications.NotificationsPushbullet.accessTokenTip": "Создайте токен в настройках учётной записи",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSuccess": "Тестовое уведомление отправлено в LunaSea!",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSending": "Отправка тестового уведомления в LunaSea…",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestFailed": "Не удалось отправить тестовое уведомление в LunaSea.",
- "components.Settings.Notifications.NotificationsLunaSea.settingsSaved": "Настройки уведомлений LunaSea успешно сохранены!",
- "components.Settings.Notifications.NotificationsLunaSea.settingsFailed": "Не удалось сохранить настройки уведомлений LunaSea.",
- "components.Settings.Notifications.NotificationsLunaSea.profileNameTip": "Требуется только в том случае, если не используется профиль default",
"components.Settings.Notifications.NotificationsWebPush.agentenabled": "Активировать службу",
"components.Settings.Notifications.NotificationsPushbullet.agentEnabled": "Активировать службу",
- "components.Settings.Notifications.NotificationsLunaSea.agentenabled": "Активировать службу",
"components.Settings.notificationAgentSettingsDescription": "Настройте и активируйте службы уведомлений.",
"components.ResetPassword.emailresetlink": "Отправить ссылку для восстановления по электронной почте",
"pages.somethingwentwrong": "Что-то пошло не так",
@@ -726,8 +713,6 @@
"components.UserProfile.UserSettings.UserPasswordChange.toastSettingsFailure": "Что-то пошло не так при сохранении пароля.",
"components.UserProfile.UserSettings.UserPasswordChange.noPasswordSet": "В настоящее время для этой учётной записи не установлен пароль. Установите пароль ниже, чтобы с этой учётной записью можно было войти в систему как \"локальный пользователь\".",
"components.UserProfile.UserSettings.UserPasswordChange.noPasswordSetOwnAccount": "В настоящее время для вашей учётной записи не установлен пароль. Установите пароль ниже, чтобы иметь возможность войти в систему как \"локальный пользователь\", используя свой адрес электронной почты.",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingssaved": "Настройки веб-push-уведомлений успешно сохранены!",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingsfailed": "Не удалось сохранить настройки веб-push-уведомлений.",
"components.UserProfile.UserSettings.UserNotificationSettings.webpush": "Веб-push",
"components.UserProfile.UserSettings.UserNotificationSettings.telegramsettingssaved": "Настройки уведомлений Telegram успешно сохранены!",
"components.UserProfile.UserSettings.UserNotificationSettings.telegramsettingsfailed": "Не удалось сохранить настройки уведомлений Telegram.",
@@ -1304,7 +1289,6 @@
"components.Login.port": "Порт",
"components.Login.servertype": "Тип сервера",
"components.Login.urlBase": "Базовый URL",
- "components.Login.validationHostnameRequired": "Вы должны указать корректный домен или IP адрес",
"components.Login.validationPortRequired": "Вы должны указать корректный порт",
"components.Login.validationUrlBaseTrailingSlash": "Базовый URL не может оканчиваться слэшем",
"components.Login.validationUrlTrailingSlash": "URL не может оканчиваться слэшем",
@@ -1397,7 +1381,6 @@
"i18n.blacklistDuplicateError": "{title} уже добавлен в черный список.",
"components.Settings.SettingsJobsCache.usersavatars": "Аватары пользователей",
"components.Settings.SettingsNetwork.toastSettingsFailure": "Что-то пошло не так при сохранении настроек.",
- "components.Settings.SettingsNetwork.advancedNetworkSettings": "Расширенные сетевые настройки",
"components.Settings.SettingsNetwork.csrfProtectionHoverTip": "НЕ включайте эту настройку, если не знаете, для чего она нужна!",
"components.Settings.SettingsNetwork.docs": "документация",
"components.Settings.SettingsNetwork.forceIpv4First": "Принудительно использовать сначала IPv4",
diff --git a/src/i18n/locale/sq.json b/src/i18n/locale/sq.json
index 6241fcc68a..c33895ac68 100644
--- a/src/i18n/locale/sq.json
+++ b/src/i18n/locale/sq.json
@@ -317,13 +317,6 @@
"components.Settings.Notifications.NotificationsGotify.url": "URL e serverit",
"components.Settings.Notifications.NotificationsGotify.validationTokenRequired": "Duhet të japësh një token aplikacioni",
"components.Settings.Notifications.NotificationsGotify.validationTypes": "Duhet të zgjedhësh të paktën një tip njoftimi",
- "components.Settings.Notifications.NotificationsLunaSea.profileName": "Emri i profilit",
- "components.Settings.Notifications.NotificationsLunaSea.profileNameTip": "Kërkohet vetëm nëse nuk përdoret profili default",
- "components.Settings.Notifications.NotificationsLunaSea.settingsFailed": "Cilësimet e njoftimit të LunaSea nuk u ruajtën.",
- "components.Settings.Notifications.NotificationsLunaSea.settingsSaved": "Rregullimet e njoftimeve LunaSea u ruajtën me sukses!",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestFailed": "Njoftimi i testit të LunaSea nuk u dërgua.",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSending": "Duke dërguar njoftimin e testit LunaSea…",
- "components.Settings.Notifications.NotificationsLunaSea.validationWebhookUrl": "Duhet të jepni një URL të vlefshme",
"components.Settings.Notifications.NotificationsPushbullet.accessToken": "Token Aksesimi",
"components.Settings.Notifications.NotificationsPushbullet.accessTokenTip": "Krijo një token nga Cilësimet e llogarisë",
"components.Settings.Notifications.NotificationsPushbullet.agentEnabled": "Aktivizo agjentin",
@@ -419,8 +412,6 @@
"components.RequestModal.AdvancedRequester.selecttags": "Zgjidh etiketat",
"components.RequestModal.requestcancelled": "Kërkesa për {title} u anullua.",
"components.ResetPassword.password": "Fjalëkalimi",
- "components.Settings.Notifications.NotificationsLunaSea.agentenabled": "Aktivizo agjentin",
- "components.Settings.Notifications.NotificationsLunaSea.validationTypes": "Duhet të zgjedhësh të paktën një tip njoftimi",
"components.Settings.RadarrModal.released": "Lëshuar",
"components.RequestModal.QuotaDisplay.allowedRequestsUser": "Ky përdorues lejohet të kërkojë {limit} {type} çdo {days} ditë.",
"components.RequestModal.QuotaDisplay.movie": "film",
@@ -438,7 +429,6 @@
"components.ResetPassword.passwordreset": "Rivendos fjalëkalimin",
"components.Settings.Notifications.NotificationsPushbullet.pushbulletSettingsSaved": "Cilësimet e njoftimit Pushbullet u ruajtën me sukses!",
"components.Settings.Notifications.NotificationsGotify.validationUrlRequired": "Duhet të jepni një URL të vlefshme",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSuccess": "U dërgua njoftimi i testit LunaSea!",
"components.Settings.Notifications.NotificationsGotify.validationUrlTrailingSlash": "URL nuk duhet të përfundojë me një slesh",
"components.Settings.Notifications.NotificationsPushbullet.pushbulletSettingsFailed": "Cilësimet e njoftimit Pushbullet nuk u ruajtën.",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestSending": "Po dërgohet njoftimi i testit Pushbullet…",
@@ -491,7 +481,6 @@
"components.Settings.tautulliApiKey": "Çelësi API",
"components.Settings.tautulliSettings": "Cilësimet e Tautulli",
"components.Settings.toastPlexRefresh": "Duke marrë listën e serverave nga Plex…",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrl": "URL e Webhook",
"components.Settings.notificationAgentSettingsDescription": "Konfiguro dhe aktivizo agjentët e njoftimit.",
"components.Settings.plexlibrariesDescription": "Libraritë e Jellyseerr skanojnë për tituj. Vendos dhe ruaj cilësimet e lidhjes Plex, pastaj kliko në butonin më poshtë nëse nuk janë të listuara libraritë.",
"components.Settings.plexsettingsDescription": "Konfiguro cilësimet për serverin tuaj Plex. Jellyseerr skanon libraritë tuaja Plex për të përcaktuar disponueshmërinë e përmbajtjes.",
@@ -509,7 +498,6 @@
"components.IssueList.IssueItem.episodes": "{episodeCount, plural, one {Episod} other {Episode}}",
"components.RequestModal.requestseasons4k": "Kërko {seasonCount} {seasonCount, plural, one {Sezon} other {Sezone}} në 4K",
"components.RequestModal.requestseasons": "Kërko {seasonCount} {seasonCount, plural, one {Sezon} other {Sezone}}",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrlTip": "URL e Njoftimit Webhook të bazuar në përdorues ose paisje",
"components.Settings.Notifications.NotificationsPushbullet.validationTypes": "Duhet të zgjidhni të paktën një lloj njoftimi",
"components.Settings.Notifications.NotificationsPushover.accessToken": "Token API i aplikacionit",
"components.Settings.Notifications.NotificationsPushover.accessTokenTip": "Regjistroni një aplikacion për ta përdorur me Jellyseerr",
@@ -765,7 +753,6 @@
"components.UserProfile.UserSettings.UserNotificationSettings.validationPushoverUserKey": "Duhet të jepni një çelës të vlefshëm përdoruesi ose grupi",
"components.UserProfile.UserSettings.UserNotificationSettings.validationTelegramChatId": "Duhet të jepni një ID të vlefshme bisede",
"components.UserProfile.UserSettings.UserNotificationSettings.webpush": "Web Push",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingsfailed": "Cilësimet e njoftimit në ueb nuk u ruajtën.",
"components.UserProfile.UserSettings.UserPasswordChange.confirmpassword": "Konfirmo fjalëkalimin",
"components.UserProfile.UserSettings.UserPasswordChange.currentpassword": "Fjalëkalimi aktual",
"components.UserProfile.UserSettings.UserPasswordChange.newpassword": "Fjalëkalimi i ri",
@@ -921,7 +908,6 @@
"components.Settings.address": "Adresa",
"components.Settings.addsonarr": "Shto Serverin Sonarr",
"components.Settings.cancelscan": "Anullo skanimin",
- "components.Settings.copied": "Çelësi API u kopjua.",
"components.Settings.currentlibrary": "Libraria aktuale: {name}",
"components.Settings.default": "E paracaktuar",
"components.Settings.default4k": "E Paracaktuar 4K",
@@ -959,7 +945,6 @@
"components.TvDetails.firstAirDate": "Data e parë e transmetimit",
"components.UserList.email": "Adresa email",
"components.UserList.importedfromplex": "{userCount} {userCount, plural, one {përdorues} other {përdorues}} nga Plex u importuan me sukses!",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingssaved": "Cilësimet e njoftimit në ueb u ruajtën me sukses!",
"components.UserProfile.UserSettings.UserNotificationSettings.discordIdTip": "Numri i identifikimit me shumë shifra i lidhur me llogarinë tuaj të përdoruesit",
"components.UserProfile.UserSettings.UserNotificationSettings.validationPgpPublicKey": "Duhet të jepni një çelës publik të vlefshëm PGP",
"components.UserProfile.UserSettings.UserNotificationSettings.validationPushbulletAccessToken": "Duhet të japësh një Token hyrjeje",
diff --git a/src/i18n/locale/sr.json b/src/i18n/locale/sr.json
index 8bca478746..89599366f7 100644
--- a/src/i18n/locale/sr.json
+++ b/src/i18n/locale/sr.json
@@ -71,7 +71,6 @@
"components.Settings.default4k": "Podrazumevano 4K",
"components.Settings.default": "Podrazumeno",
"components.Settings.currentlibrary": "Trenutna biblioteka: {name}",
- "components.Settings.copied": "Kopiran API ključ.",
"components.Settings.cancelscan": "Otkaži skeniranje",
"components.Settings.addsonarr": "Dodaj Sonarr server",
"components.Settings.address": "Adresa",
@@ -494,7 +493,6 @@
"i18n.notrequested": "Nije zahtevano",
"components.Settings.Notifications.validationEmail": "Morate uneti validnu email adresu",
"components.UserList.usercreatedfailedexisting": "Email adresa je već iskorišćena od strane drugog korisnika.",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSending": "Šaljem LunaSea probno obaveštenje…",
"components.CollectionDetails.requestcollection4k": "Zahtevaj kolekciju u 4K",
"components.Login.signinheader": "Uloguj se za nastavak",
"components.Login.signinwithoverseerr": "Iskoristi nalog od {applicationTitle}",
diff --git a/src/i18n/locale/sv.json b/src/i18n/locale/sv.json
index 31e4d96672..6cb7d0a793 100644
--- a/src/i18n/locale/sv.json
+++ b/src/i18n/locale/sv.json
@@ -31,7 +31,6 @@
"components.Settings.default4k": "Standard 4K",
"components.Settings.default": "Standard",
"components.Settings.currentlibrary": "Nuvarande bibliotek: {name}",
- "components.Settings.copied": "API-nyckel kopierad till urklipp.",
"components.Settings.cancelscan": "Avbryt skanning",
"components.Settings.addsonarr": "Lägg till Sonarr-instans",
"components.Settings.address": "Adress",
@@ -131,7 +130,7 @@
"components.RequestBlock.seasons": "{seasonCount, plural, one {säsong} other {säsonger}}",
"components.PersonDetails.ascharacter": "som {character}",
"components.PersonDetails.appearsin": "Kan ses i",
- "components.MovieDetails.studio": "{studioCount, plural, one {studio} other {studior}}",
+ "components.MovieDetails.studio": "{studioCount, plural, one {Studio} other {Studior}}",
"components.MovieDetails.similar": "Liknande titlar",
"components.MovieDetails.runtime": "{minutes} minuter",
"components.MovieDetails.revenue": "Inkomster",
@@ -152,7 +151,7 @@
"components.Discover.upcomingmovies": "Kommande filmer",
"components.Discover.upcoming": "Kommande filmer",
"components.Discover.trending": "Trendande",
- "components.Discover.recentrequests": "Senaste förfrågningar",
+ "components.Discover.recentrequests": "Senaste förfrågningarna",
"components.Discover.recentlyAdded": "Nyligen tillagda",
"components.Discover.populartv": "Populära serier",
"components.Discover.popularmovies": "Populära filmer",
@@ -160,7 +159,7 @@
"components.TvDetails.TvCast.fullseriescast": "Rollista",
"components.Setup.welcome": "Välkommen till Jellyseerr",
"components.Setup.signinMessage": "Kom igång genom att logga in",
- "components.RequestModal.requestseasons": "Begär {seasonCount} {seasonCount, plural, one {säsong} other {säsonger}}",
+ "components.RequestModal.requestseasons": "Begär {seasonCount} {seasonCount, plural, one {Säsong} other {Säsonger}}",
"pages.returnHome": "Gå tillbaka till startsidan",
"pages.oops": "Hoppsan",
"i18n.unavailable": "Otillgänglig",
@@ -194,7 +193,7 @@
"components.TvDetails.overviewunavailable": "Beskrivning saknas.",
"components.TvDetails.overview": "Beskrivning",
"components.TvDetails.originallanguage": "Originalspråk",
- "components.TvDetails.network": "{networkCount, plural, one {nätverk} other {nätverk}}",
+ "components.TvDetails.network": "{networkCount, plural, one {Nätverk} other {Nätverk}}",
"components.TvDetails.cast": "Roller",
"i18n.close": "Stäng",
"components.Settings.SettingsAbout.timezone": "Tidszon",
@@ -225,9 +224,9 @@
"i18n.request": "Begär",
"i18n.failed": "Misslyckades",
"components.UserList.importedfromplex": "{userCount} Plex {userCount, plural, one {användare} other {användare}} importerades!",
- "components.TvDetails.viewfullcrew": "Visa hela rollistan",
+ "components.TvDetails.viewfullcrew": "Visa hela teamet",
"components.TvDetails.firstAirDate": "Första sändningsdatum",
- "components.TvDetails.TvCrew.fullseriescrew": "Hela rollistan",
+ "components.TvDetails.TvCrew.fullseriescrew": "Hela teamet",
"components.StatusBadge.status4k": "4K {status}",
"components.Settings.SettingsAbout.documentation": "Dokumentation",
"components.Settings.Notifications.validationChatIdRequired": "Du måste ange ett giltigt chatt-ID",
@@ -279,10 +278,10 @@
"components.NotificationTypeSelector.mediaavailable": "Förfrågan tillgänglig",
"components.NotificationTypeSelector.mediaapprovedDescription": "Skicka meddelanden när medieförfrågningar godkänns manuellt.",
"components.NotificationTypeSelector.mediaapproved": "Förfrågan godkänd",
- "components.MovieDetails.viewfullcrew": "Visa fullt filmteam",
- "components.MovieDetails.MovieCrew.fullcrew": "Filmteam",
+ "components.MovieDetails.viewfullcrew": "Visa hela teamet",
+ "components.MovieDetails.MovieCrew.fullcrew": "Team",
"components.UserList.userssaved": "Användarbehörigheter sparade!",
- "components.UserList.bulkedit": "Mass-redigering",
+ "components.UserList.bulkedit": "Massredigering",
"components.PermissionEdit.usersDescription": "Ge behörighet att hantera användare. Användare med denna behörighet kan inte ändra eller lägga till användare med adminrättigheter.",
"components.PermissionEdit.users": "Hantera användare",
"components.PermissionEdit.requestDescription": "Ge behörighet att skicka in förfrågningar för media som inte är 4K.",
@@ -325,7 +324,7 @@
"components.UserList.createlocaluser": "Skapa lokal användare",
"components.UserList.create": "Skapa",
"components.UserList.autogeneratepassword": "Generera lösenord automatiskt",
- "components.PersonDetails.crewmember": "Crew",
+ "components.PersonDetails.crewmember": "Teammedlem",
"components.Login.validationemailrequired": "Du måste ange en giltig e-postadress",
"components.Login.email": "E-postadress",
"components.PermissionEdit.autoapproveSeriesDescription": "Ge automatiskt godkännande för serieförfrågningar som inte är 4K.",
@@ -425,7 +424,7 @@
"components.Settings.serverRemote": "fjärr",
"components.Settings.serverLocal": "lokal",
"i18n.loading": "Laddar…",
- "components.UserProfile.recentrequests": "Senaste förfrågningar",
+ "components.UserProfile.recentrequests": "Senaste förfrågningarna",
"components.UserProfile.UserSettings.menuPermissions": "Behörigheter",
"components.UserProfile.UserSettings.menuNotifications": "Meddelanden",
"components.UserProfile.UserSettings.menuGeneralSettings": "Allmänt",
@@ -506,7 +505,7 @@
"components.Settings.SettingsJobsCache.plex-full-scan": "Full biblioteksskanning för Plex",
"components.Settings.SettingsJobsCache.jellyfin-full-scan": "Full Jellyfin-biblioteksskanning",
"components.Settings.SettingsJobsCache.jellyfin-recently-added-scan": "Skanning av nyligen tillagda objekt i Jellyfin",
- "components.Settings.SettingsJobsCache.download-sync-reset": "Återställ nedladdningssynkronisering",
+ "components.Settings.SettingsJobsCache.download-sync-reset": "Nollställ nedladdningssynkronisering",
"components.Settings.SettingsJobsCache.download-sync": "Nedladdningssynkronisering",
"components.Settings.SettingsAbout.preferredmethod": "Föredraget",
"components.Settings.Notifications.validationUrl": "Du måste ange en giltig URL",
@@ -554,7 +553,7 @@
"components.Discover.TvGenreSlider.tvgenres": "Seriegenrer",
"components.RequestModal.AdvancedRequester.folder": "{path} ({space})",
"components.TvDetails.episodeRuntimeMinutes": "{runtime} minuter",
- "components.TvDetails.episodeRuntime": "Avsnittets speltid",
+ "components.TvDetails.episodeRuntime": "Avsnittslängd",
"components.Settings.Notifications.pgpPrivateKeyTip": "Signera krypterade e-postmeddelanden med OpenPGP",
"components.Settings.Notifications.pgpPrivateKey": "Privat PGP-nyckel",
"components.Settings.Notifications.pgpPasswordTip": "Signera krypterade e-postmeddelanden med OpenPGP",
@@ -587,7 +586,7 @@
"components.Settings.SettingsLogs.filterInfo": "Info",
"components.Settings.SettingsLogs.filterError": "Fel",
"components.Settings.SettingsLogs.filterDebug": "Felsök",
- "components.Settings.SettingsJobsCache.jobsandcache": "Jobb & Cache",
+ "components.Settings.SettingsJobsCache.jobsandcache": "Jobb och cache",
"components.Settings.SettingsAbout.about": "Om",
"components.ResetPassword.passwordreset": "Återställning av lösenord",
"components.Settings.SettingsLogs.logDetails": "Logginformation",
@@ -716,27 +715,15 @@
"components.Settings.Notifications.NotificationsWebPush.webpushsettingssaved": "Webbpush-meddelandeinställningar har sparats!",
"components.Settings.Notifications.NotificationsWebPush.webpushsettingsfailed": "Webbpush-meddelandeinställningar kunde inte sparas.",
"components.Settings.Notifications.NotificationsWebPush.agentenabled": "Aktivera Webbpush",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrl": "Webhook-URL",
- "components.Settings.Notifications.NotificationsLunaSea.validationWebhookUrl": "Du måste ange en giltig URL",
- "components.Settings.Notifications.NotificationsLunaSea.settingsSaved": "LunaSea-meddelandeinställningar har sparats!",
- "components.Settings.Notifications.NotificationsLunaSea.settingsFailed": "LunaSea-meddelandeinställningar kunde inte sparas.",
- "components.Settings.Notifications.NotificationsLunaSea.profileNameTip": "Endast nödvändigt om du inte använder standard-profilen",
- "components.Settings.Notifications.NotificationsLunaSea.profileName": "Profilnamn",
- "components.Settings.Notifications.NotificationsLunaSea.agentenabled": "Aktivera LunaSea",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestSending": "Skickar Pushbullet-testmeddelande…",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestFailed": "Pushbullet-testmeddelande kunde inte skickas.",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSuccess": "LunaSea-testmeddelande skickat!",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSending": "Skickar LunaSea-testmeddelande…",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestFailed": "LunaSea-testmeddelande kunde inte skickas.",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingssaved": "Webbpush-meddelandeinställningar har sparats!",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingsfailed": "Webbpush-meddelandeinställningar kunde inte sparas.",
"components.Settings.noDefault4kServer": "En 4K {serverType}-instans måste markeras som standard för att användare ska kunna skicka in 4K {mediaType}-förfrågningar.",
"components.Settings.is4k": "4K",
"components.Settings.Notifications.toastTelegramTestSuccess": "Telegram-testmeddelande skickat!",
"components.Settings.Notifications.toastTelegramTestSending": "Skickar Telegram-testmeddelande…",
"components.Settings.Notifications.toastTelegramTestFailed": "Telegram-testmeddelande kunde inte skickas.",
"components.Settings.Notifications.toastEmailTestSuccess": "E-posttestmeddelande skickat!",
- "components.Settings.Notifications.toastEmailTestSending": "kickar e-posttestmeddelande…",
+ "components.Settings.Notifications.toastEmailTestSending": "Skickar e-posttestmeddelande…",
"components.Settings.Notifications.toastEmailTestFailed": "E-posttestmeddelande kunde inte skickas.",
"components.Settings.Notifications.toastDiscordTestSuccess": "Discord-testmeddelande skickat!",
"components.Settings.Notifications.toastDiscordTestSending": "Skickar Discord-testmeddelande…",
@@ -774,7 +761,6 @@
"components.Settings.Notifications.NotificationsPushover.userTokenTip": "Din användare eller gruppidentifierare (30 tecken)",
"components.Settings.Notifications.NotificationsPushover.accessTokenTip": "Registrera en applikation för användning med Jellyseerr",
"components.Settings.Notifications.NotificationsPushbullet.accessTokenTip": "Skapa en token från dina kontoinställningar",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrlTip": "Din användar- eller enhetsbaserade webhook-URL för meddelanden",
"components.DownloadBlock.estimatedtime": "Beräknad {time}",
"components.Settings.webAppUrlTip": "Alternativt skicka användare till den lokala webbappen istället för den \"hostade\" webbappen",
"components.Settings.webAppUrl": "Webbapp-URL",
@@ -789,7 +775,6 @@
"components.QuotaSelector.seasons": "{count, plural, one {säsong} other {säsonger}}",
"components.QuotaSelector.movies": "{count, plural, one {film} other {filmer}}",
"components.QuotaSelector.days": "{count, plural, one {dag} other {dagar}}",
- "components.Settings.Notifications.NotificationsLunaSea.validationTypes": "Du måste välja minst en meddelandetyp",
"components.Settings.Notifications.validationTypes": "Du måste välja minst en meddelandetyp",
"components.Settings.Notifications.NotificationsWebhook.validationTypes": "Du måste välja minst en meddelandetyp",
"components.Settings.Notifications.NotificationsSlack.validationTypes": "Du måste välja minst en meddelandetyp",
@@ -848,7 +833,7 @@
"components.IssueDetails.reopenissueandcomment": "Återöppna med kommentar",
"components.IssueDetails.season": "Säsong {seasonNumber}",
"components.IssueDetails.toasteditdescriptionsuccess": "Ärendebeskrivning redigerad!",
- "components.IssueList.IssueItem.seasons": "{seasonCount, plural, one {säsong} other {säsonger}}",
+ "components.IssueList.IssueItem.seasons": "{seasonCount, plural, one {Säsong} other {Säsonger}}",
"components.IssueList.IssueItem.unknownissuetype": "Okänd",
"components.IssueList.IssueItem.openeduserdate": "{date} av {user}",
"components.IssueList.IssueItem.viewissue": "Visa ärende",
@@ -943,7 +928,7 @@
"components.RequestModal.requestApproved": "Förfrågan för {title} godkänd!",
"components.RequestModal.requestmovies": "Begär {count} {count, plural, one {film} other {filmer}}",
"components.RequestModal.requestmovies4k": "Begär {count} {count, plural, one {film} other {filmer}} i 4K",
- "components.RequestModal.requestseasons4k": "Begär {seasonCount} {seasonCount, plural, one {säsong} other {säsonger}} i 4K",
+ "components.RequestModal.requestseasons4k": "Begär {seasonCount} {seasonCount, plural, one {Säsong} other {Säsonger}} i 4K",
"components.Settings.RadarrModal.inCinemas": "På bio",
"components.Settings.RadarrModal.released": "Släppt",
"components.Settings.RadarrModal.announced": "Tillkännagiven",
@@ -1052,7 +1037,7 @@
"components.UserProfile.UserSettings.UserGeneralSettings.plexwatchlistsyncseriestip": "Begär automatiskt serier på din Plex bevakningslista",
"components.UserProfile.UserSettings.UserGeneralSettings.plexwatchlistsyncmoviestip": "Begär automatiskt filmer på din Plex bevakningslista",
"components.Settings.SettingsJobsCache.editJobScheduleCurrent": "Aktuell frekvens",
- "components.PermissionEdit.viewrecentDescription": "Ge tillstånd till att visa listan över nyligen tillagd media.",
+ "components.PermissionEdit.viewrecentDescription": "Ge behörighet att visa listan över nyligen tillagd media.",
"components.StatusBadge.managemedia": "Hantera {mediaType}",
"components.StatusBadge.playonplex": "Spela upp på {mediaServerName}",
"components.TitleCard.tvdbid": "TheTVDB-ID",
@@ -1081,7 +1066,7 @@
"components.RequestModal.requestseriestitle": "Begär serie",
"components.StatusBadge.openinarr": "Öppna i {arr}",
"components.TvDetails.Season.somethingwentwrong": "Något gick fel när säsongsdata hämtades.",
- "components.TvDetails.manageseries": "Hantera serier",
+ "components.TvDetails.manageseries": "Hantera serie",
"components.TvDetails.rtaudiencescore": "Rotten Tomatoes Audience Score",
"components.TvDetails.seasonnumber": "Säsong {seasonNumber}",
"components.TvDetails.status4k": "4K {status}",
@@ -1289,7 +1274,6 @@
"components.UserProfile.UserSettings.UserGeneralSettings.email": "E-post",
"components.Login.back": "Gå tillbaka",
"components.Login.hostname": "{mediaServerName}-URL",
- "components.Login.validationHostnameRequired": "Du måste ange ett giltigt värdnamn eller en IP-adress",
"components.Login.invalidurlerror": "Kunde inte ansluta till {mediaServerName} server.",
"components.Login.port": "Port",
"components.Login.servertype": "Typ av server",
@@ -1408,7 +1392,6 @@
"components.Settings.SettingsMain.enableSpecialEpisodes": "Tillåt förfrågningar om specialavsnitt",
"components.Settings.SettingsMain.streamingRegion": "Streamingregion",
"components.Settings.SettingsMain.streamingRegionTip": "Visa streamingtjänster efter regional tillgänglighet",
- "components.Settings.SettingsNetwork.advancedNetworkSettings": "Avancerade nätverksinställningar",
"components.Settings.SettingsNetwork.csrfProtection": "Aktivera CSRF-skydd",
"components.Settings.SettingsNetwork.csrfProtectionHoverTip": "Aktivera INTE denna inställning om du inte vet vad du gör!",
"components.Settings.SettingsNetwork.csrfProtectionTip": "Ställ in skrivskyddad åtkomst till externt API (kräver HTTPS)",
diff --git a/src/i18n/locale/tr.json b/src/i18n/locale/tr.json
index d5c0f69ea1..5fa5343087 100644
--- a/src/i18n/locale/tr.json
+++ b/src/i18n/locale/tr.json
@@ -554,16 +554,6 @@
"components.ResetPassword.gobacklogin": "Oturum Açma Sayfasına Dön",
"components.ResetPassword.requestresetlinksuccessmessage": "Eğer ki girilen e-mail adresi gerçek bir kişiyle ilişkiliyse şifre sıfırlama linki gönderilecektir.",
"components.Settings.Notifications.NotificationsGotify.validationUrlTrailingSlash": "URL'nizin sonunda slash (eğik çizgi) olmamalıdır",
- "components.Settings.Notifications.NotificationsLunaSea.agentenabled": "Aracıyı Etkinleştir",
- "components.Settings.Notifications.NotificationsLunaSea.profileName": "Profil İsmi",
- "components.Settings.Notifications.NotificationsLunaSea.profileNameTip": "Eğer ki varsayılan profil kullanılmıyorsa gereklidir",
- "components.Settings.Notifications.NotificationsLunaSea.settingsFailed": "LunaSea bildirim ayarları kaydedilemedi.",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestFailed": "LunaSea deneme bildirimi gönderilemedi.",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSending": "LunaSea deneme bildirimi gönderiliyor…",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSuccess": "LunaSea deneme bildirimi gönderildi!",
- "components.Settings.Notifications.NotificationsLunaSea.validationTypes": "En azından bir adet bildirim türü seçmelisiniz",
- "components.Settings.Notifications.NotificationsLunaSea.validationWebhookUrl": "Geçerli bir URL girmelisiniz",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrl": "Webhook URL'si",
"components.Settings.Notifications.NotificationsPushbullet.accessToken": "Erişim Token'i",
"components.Settings.Notifications.NotificationsPushbullet.accessTokenTip": "Hesap Ayarlarınızdan bir token oluşturun",
"components.Settings.Notifications.NotificationsPushbullet.agentEnabled": "Aracıyı Etkinleştir",
@@ -575,9 +565,7 @@
"components.Settings.Notifications.NotificationsPushbullet.validationAccessTokenRequired": "Bir erişim token'i sağlamalısınız",
"components.Settings.Notifications.NotificationsPushbullet.validationTypes": "En azından bir adet bildirim türü seçmelisiniz",
"components.Settings.Notifications.NotificationsPushover.accessToken": "Uygulama API'sinin Token'i",
- "components.Settings.Notifications.NotificationsLunaSea.settingsSaved": "LunaSea bildirim ayarları kaydedildi!",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestFailed": "Pushbullet deneme bildirimi gönderilemedi.",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrlTip": "Kullanıcı ya da cihaz tabanlı webhook bildirimi URL'niz",
"components.Settings.RadarrModal.released": "Yayınlandı",
"components.Settings.RadarrModal.rootfolder": "Ana Klasör",
"components.Settings.Notifications.NotificationsPushover.agentenabled": "Aracıyı Etkinleştir",
@@ -864,7 +852,6 @@
"components.Settings.address": "Adres",
"components.Settings.addsonarr": "Sonarr Sunucusu Ekle",
"components.Settings.cancelscan": "Taramayı İptal Et",
- "components.Settings.copied": "API Anahtarı panoya kopyalandı.",
"components.Settings.currentlibrary": "Mevcut Kütüphane: {name}",
"components.Settings.default": "Öntanımlı",
"components.Settings.default4k": "Öntanımlı 4K",
@@ -1179,8 +1166,6 @@
"components.UserProfile.UserSettings.UserNotificationSettings.validationPushoverUserKey": "Geçerli bir kullanıcı ya da grup kimliği sağlamalısınız",
"components.UserProfile.UserSettings.UserNotificationSettings.validationTelegramChatId": "Geçerli bir sohbet ID'si sağlamalısın",
"components.UserProfile.UserSettings.UserNotificationSettings.webpush": "Web Bildirimi",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingsfailed": "Web bildirim ayarları kaydedilemedi.",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingssaved": "Web bildirim ayarları kaydedildi!",
"components.UserProfile.UserSettings.UserPasswordChange.confirmpassword": "Şifreyi Doğrula",
"components.UserProfile.UserSettings.UserPasswordChange.currentpassword": "Kullandığınız Şifre",
"components.UserProfile.UserSettings.UserPasswordChange.newpassword": "Yeni Şifre",
@@ -1304,7 +1289,6 @@
"components.Login.invalidurlerror": "{mediaServerName} sunucusuna bağlanılamıyor.",
"components.Login.port": "Port",
"components.Login.urlBase": "URL Tabanı",
- "components.Login.validationHostnameRequired": "Geçerli bir ana bilgisayar adı veya IP adresi sağlamalısınız",
"components.Login.validationPortRequired": "Geçerli bir port numarası sağlamalısınız",
"components.Login.validationUrlBaseLeadingSlash": "URL tabanının başında eğik çizgi olmalıdır",
"components.Login.validationUrlBaseTrailingSlash": "URL tabanı eğik çizgiyle bitmemelidir",
@@ -1432,7 +1416,6 @@
"components.Settings.OverrideRuleTile.tags": "Etiketler",
"components.Settings.OverrideRuleTile.users": "Kullanıcılar",
"components.Settings.SettingsMain.enableSpecialEpisodes": "Özel Bölüm Taleplerine İzin Ver",
- "components.Settings.SettingsNetwork.advancedNetworkSettings": "Gelişmiş Ağ Ayarları",
"components.Settings.SettingsNetwork.csrfProtection": "CSRF Korumasını Etkinleştir",
"components.Settings.SettingsNetwork.csrfProtectionHoverTip": "Ne yaptığınızı bilmiyorsanız bu ayarı ETKİNLEŞTİRMEYİN!",
"components.Settings.SettingsNetwork.csrfProtectionTip": "Harici API erişimini salt okunur olarak ayarlayın (HTTPS gerektirir)",
diff --git a/src/i18n/locale/uk.json b/src/i18n/locale/uk.json
index 396971a550..c7abc6c60e 100644
--- a/src/i18n/locale/uk.json
+++ b/src/i18n/locale/uk.json
@@ -427,18 +427,6 @@
"components.Settings.Notifications.NotificationsGotify.validationTypes": "Необхідно вибрати принаймні один тип сповіщення",
"components.Settings.Notifications.NotificationsGotify.validationUrlRequired": "Ви повинні надати дійсну URL-адресу",
"components.Settings.Notifications.NotificationsGotify.validationUrlTrailingSlash": "URL-адреса не має закінчуватися косою рискою",
- "components.Settings.Notifications.NotificationsLunaSea.agentenabled": "Активувати службу",
- "components.Settings.Notifications.NotificationsLunaSea.profileName": "Назва профілю",
- "components.Settings.Notifications.NotificationsLunaSea.profileNameTip": "Потрібно лише в тому випадку, якщо не використовується профіль default",
- "components.Settings.Notifications.NotificationsLunaSea.settingsFailed": "Не вдалося зберегти налаштування повідомлень LunaSea.",
- "components.Settings.Notifications.NotificationsLunaSea.settingsSaved": "Налаштування повідомлень LunaSea успішно збережено!",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestFailed": "Не вдалося надіслати тестове повідомлення до LunaSea.",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSending": "Надсилання тестового повідомлення в LunaSea…",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSuccess": "Тестове повідомлення надіслано до LunaSea!",
- "components.Settings.Notifications.NotificationsLunaSea.validationTypes": "Ви повинні вибрати хоча б один тип повідомлень",
- "components.Settings.Notifications.NotificationsLunaSea.validationWebhookUrl": "Ви повинні вказати дійсну URL-адресу",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrl": "URL веб-перехоплювача",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrlTip": "URL веб-перехоплювача для повідомлень на основі користувача або пристрою",
"components.Settings.Notifications.NotificationsPushbullet.accessToken": "Токен доступу",
"components.Settings.Notifications.NotificationsPushbullet.accessTokenTip": "Створіть токен у налаштуваннях облікового запису",
"components.Settings.Notifications.NotificationsPushbullet.agentEnabled": "Активувати службу",
@@ -754,7 +742,6 @@
"components.Settings.addsonarr": "Додати сервер Sonarr",
"components.Settings.advancedTooltip": "Неправильне налаштування цього параметра може призвести до несправності функціональності",
"components.Settings.cancelscan": "Скасувати сканування",
- "components.Settings.copied": "Ключ API скопійовано в буфер обміну.",
"components.Settings.currentlibrary": "Поточна бібліотека: {name}",
"components.Settings.default": "За замовчуванням",
"components.Settings.default4k": "4К за замовчуванням",
@@ -994,8 +981,6 @@
"components.UserProfile.UserSettings.UserNotificationSettings.validationPushoverUserKey": "Ви повинні надати дійсний ключ користувача або групи",
"components.UserProfile.UserSettings.UserNotificationSettings.validationTelegramChatId": "Ви повинні надати дійсний ID чату",
"components.UserProfile.UserSettings.UserNotificationSettings.webpush": "Веб-push",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingsfailed": "Не вдалося зберегти налаштування веб-повідомлень.",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingssaved": "Налаштування веб-повідомлень успішно збережено!",
"components.UserProfile.UserSettings.UserPasswordChange.confirmpassword": "Підтвердіть пароль",
"components.UserProfile.UserSettings.UserPasswordChange.currentpassword": "Поточний пароль",
"components.UserProfile.UserSettings.UserPasswordChange.newpassword": "Новий пароль",
@@ -1312,7 +1297,6 @@
"components.Login.validationUrlBaseTrailingSlash": "Базова URL-адреса не має закінчуватися косою рискою",
"components.Login.validationservertyperequired": "Виберіть тип сервера",
"components.Login.urlBase": "Базова URL-адреса",
- "components.Login.validationHostnameRequired": "Ви повинні вказати дійсний домен або IP-адресу",
"components.MovieDetails.watchlistDeleted": "{title} Видалено зі списку перегляду успішно!",
"components.MovieDetails.watchlistError": "Щось пішло не так, повторіть спробу.",
"components.Selector.ended": "Завершено",
diff --git a/src/i18n/locale/zh_Hans.json b/src/i18n/locale/zh_Hans.json
index 5b9dcee622..adf57ae442 100644
--- a/src/i18n/locale/zh_Hans.json
+++ b/src/i18n/locale/zh_Hans.json
@@ -1,6 +1,6 @@
{
"components.UserList.validationpasswordminchars": "密码必须至少包含八个字符",
- "components.UserList.validationEmail": "请输入有效的电子邮件地址",
+ "components.UserList.validationEmail": "需要提供电子邮件",
"components.UserList.userssaved": "用户权限保存成功!",
"components.UserList.users": "用户",
"components.UserList.userlist": "用户清单",
@@ -50,7 +50,7 @@
"components.TvDetails.originaltitle": "原始標題",
"components.TvDetails.originallanguage": "原始语言",
"components.TvDetails.nextAirDate": "下一次播出日期",
- "components.TvDetails.network": "电视网",
+ "components.TvDetails.network": "{networkCount, plural, one {Network} other {Networks}}",
"components.TvDetails.firstAirDate": "原始播出日期",
"components.TvDetails.episodeRuntimeMinutes": "{runtime} 分钟",
"components.TvDetails.episodeRuntime": "劇集片長",
@@ -95,9 +95,9 @@
"components.Settings.scan": "媒体库同步",
"components.Settings.radarrsettings": "Radarr 设置",
"components.Settings.port": "端口",
- "components.Settings.plexsettingsDescription": "关于 Plex 服务器的设置。Jellyseerr 将定时执行媒体库扫描。",
+ "components.Settings.plexsettingsDescription": "配置您的 Plex 服务器设置。Jellyseerr 将通过扫描 Plex 媒体库来确定内容可用性。",
"components.Settings.plexsettings": "Plex 设置",
- "components.Settings.plexlibrariesDescription": "Jellyseerr 将扫描的媒体库。",
+ "components.Settings.plexlibrariesDescription": "Jellyseerr 扫描影片的媒体库。如果未列出任何媒体库,请先设置并保存您的 Plex 连接配置,然后点击下方按钮。",
"components.Settings.plexlibraries": "Plex 媒体库",
"components.Settings.plex": "Plex",
"components.Settings.notrunning": "未运行",
@@ -117,7 +117,7 @@
"components.Settings.menuAbout": "关于 Jellyseerr",
"components.Settings.mediaTypeSeries": "电视节目",
"components.Settings.mediaTypeMovie": "电影",
- "components.Settings.manualscanDescription": "在正常情況下,Jellyseerr 会每24小时扫描你的 Plex 媒体库。最新添加的媒体将更频繁扫描。设置新的 Plex 服务器时,我们建议你执行一次手动扫描!",
+ "components.Settings.manualscanDescription": "在正常情況下,Jellyseerr 会每24小时扫描一次你的 Plex 媒体库。Jellyseerr会更积极地检查你的Plex服务器最近添加的内容。如果这是你第一次配置Plex,我们建议你执行一次手动扫描!",
"components.Settings.manualscan": "媒体库手动扫描",
"components.Settings.librariesRemaining": "媒体库剩余数: {count}",
"components.Settings.is4k": "4K",
@@ -128,7 +128,6 @@
"components.Settings.default4k": "设置 4K 为默认分辨率",
"components.Settings.default": "默认",
"components.Settings.currentlibrary": "当前媒体库: {name}",
- "components.Settings.copied": "应用程序密钥已复制到剪贴板。",
"components.Settings.cancelscan": "取消扫描",
"components.Settings.addsonarr": "添加 Sonarr 服务器",
"components.Settings.address": "网址",
@@ -262,7 +261,7 @@
"components.Discover.TvGenreSlider.tvgenres": "电视节目类型",
"components.Discover.TvGenreList.seriesgenres": "电视节目类型",
"components.Discover.StudioSlider.studios": "制作公司",
- "components.Discover.NetworkSlider.networks": "电视网",
+ "components.Discover.NetworkSlider.networks": "流媒体平台",
"components.Discover.MovieGenreSlider.moviegenres": "电影类型",
"components.Discover.MovieGenreList.moviegenres": "电影类型",
"components.Discover.DiscoverTvLanguage.languageSeries": "{language}电视节目",
@@ -275,7 +274,7 @@
"components.CollectionDetails.requestcollection": "提交系列请求",
"components.CollectionDetails.overview": "简介",
"components.CollectionDetails.numberofmovies": "{count} 部电影",
- "components.AppDataWarning.dockerVolumeMissingDescription": "必须使用繫結掛载(bind mount)指定某个宿主机器的资料夹跟容器內的 {appDataPath} 资料夹連通,才能保存 Jellyseerr 的配置和数据。",
+ "components.AppDataWarning.dockerVolumeMissingDescription": "{appDataPath} 卷挂载配置不正确。容器停止或重启时,所有数据将被清除。",
"components.PersonDetails.ascharacter": "饰演 {character}",
"pages.somethingwentwrong": "出了点问题",
"pages.serviceunavailable": "服务器无法使用",
@@ -359,12 +358,10 @@
"components.UserProfile.UserSettings.UserPasswordChange.password": "密码设置",
"components.UserProfile.UserSettings.UserPasswordChange.nopermissionDescription": "你无权设置此用户的密码。",
"components.UserProfile.UserSettings.UserPasswordChange.noPasswordSetOwnAccount": "你的帐户目前没有设置密码。在下方配置密码,使你能够作为“本地用户”登录。",
- "components.UserProfile.UserSettings.UserPasswordChange.noPasswordSet": "此用户帐户目前没有设置密码。配置下面的密码以使此帐户能够作为“本地用户”登录。",
+ "components.UserProfile.UserSettings.UserPasswordChange.noPasswordSet": "该用户账户当前未设置密码。请在下方配置密码,以启用“本地用户”登录功能。",
"components.UserProfile.UserSettings.UserPasswordChange.newpassword": "新密码",
"components.UserProfile.UserSettings.UserPasswordChange.currentpassword": "当前的密码",
"components.UserProfile.UserSettings.UserPasswordChange.confirmpassword": "确认密码",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingssaved": "网络推送知设置保存成功!",
- "components.UserProfile.UserSettings.UserNotificationSettings.webpushsettingsfailed": "网络推送知设置保存失败。",
"components.UserProfile.UserSettings.UserNotificationSettings.webpush": "网络推送",
"components.UserProfile.UserSettings.UserNotificationSettings.validationTelegramChatId": "请输入聊天室 ID",
"components.UserProfile.UserSettings.UserNotificationSettings.validationPgpPublicKey": "请输入有效的 PGP 公钥",
@@ -442,7 +439,7 @@
"components.Settings.SettingsUsers.newPlexLoginTip": "让还没导入的 Plex 用户登录",
"components.Settings.SettingsUsers.newPlexLogin": "允许新的 Plex 登录",
"components.Settings.SettingsUsers.movieRequestLimitLabel": "电影请求全局限制",
- "components.Settings.SettingsUsers.localLoginTip": "让用户使用电子邮件地址和密码登录",
+ "components.Settings.SettingsUsers.localLoginTip": "允许用户使用电子邮件地址和密码登录",
"components.Settings.SettingsUsers.localLogin": "允许本地登录",
"components.Settings.SettingsUsers.defaultPermissionsTip": "授予给新用户的权限",
"components.Settings.SettingsUsers.defaultPermissions": "默认权限",
@@ -451,7 +448,7 @@
"components.Settings.SettingsLogs.resumeLogs": "恢复",
"components.Settings.SettingsLogs.pauseLogs": "暫停",
"components.Settings.SettingsLogs.message": "消息",
- "components.Settings.SettingsLogs.logsDescription": "你也可以直接查看这些日志,方法是借助 stdout, 或者打开 {appDataPath}/logs/overseerr.log。",
+ "components.Settings.SettingsLogs.logsDescription": "您也可以通过stdout或{appDataPath}/logs/ jellyserer .log直接查看这些日志。",
"components.Settings.SettingsLogs.logs": "日志",
"components.Settings.SettingsLogs.logDetails": "日志详細信息",
"components.Settings.SettingsLogs.level": "等級",
@@ -474,7 +471,7 @@
"components.Settings.SettingsJobsCache.jobtype": "作业类型",
"components.Settings.SettingsJobsCache.jobstarted": "{jobname} 已开始运行。",
"components.Settings.SettingsJobsCache.jobsandcache": "作业和缓存",
- "components.Settings.SettingsJobsCache.jobsDescription": "Jellyseerr 将定时运行以下的维护任务。手动执行工作不会影响它正常的时间表。",
+ "components.Settings.SettingsJobsCache.jobsDescription": "Jellyseerr将某些维护任务作为定期计划的任务执行,但它们也可以在下面手动触发。手动运行任务不会改变它的时间表。",
"components.Settings.SettingsJobsCache.jobs": "作业",
"components.Settings.SettingsJobsCache.jobname": "作业名",
"components.Settings.SettingsJobsCache.jobcancelled": "{jobname}已被取消。",
@@ -490,7 +487,7 @@
"components.Settings.SettingsJobsCache.cachekeys": "键数",
"components.Settings.SettingsJobsCache.cachehits": "击中数",
"components.Settings.SettingsJobsCache.cacheflushed": "{cachename} 缓存已清除。",
- "components.Settings.SettingsJobsCache.cacheDescription": "外部应用程序介面(external API)请求将存到缓存,以減少 API 呼叫次数。",
+ "components.Settings.SettingsJobsCache.cacheDescription": "Jellyseerr将请求缓存到外部API端点,以优化性能,避免进行不必要的API调用。",
"components.Settings.SettingsJobsCache.cache": "缓存",
"components.Settings.SettingsAbout.version": "软件版本",
"components.Settings.SettingsAbout.uptodate": "最新",
@@ -598,7 +595,7 @@
"components.Settings.Notifications.NotificationsWebPush.toastWebPushTestSuccess": "网络推送测试通知已发送!",
"components.Settings.Notifications.NotificationsWebPush.toastWebPushTestSending": "发送网络推送测试通知中…",
"components.Settings.Notifications.NotificationsWebPush.toastWebPushTestFailed": "网络推送测试通知发送失败。",
- "components.Settings.Notifications.NotificationsWebPush.httpsRequirement": "Jellyseerr 必须通過 HTTPS 投放才能使用网络推送通知。",
+ "components.Settings.Notifications.NotificationsWebPush.httpsRequirement": "为了接收web推送通知,Jellyseerr必须通过HTTPS提供服务。",
"components.Settings.Notifications.NotificationsWebPush.agentenabled": "启用通知",
"components.Settings.Notifications.NotificationsSlack.webhookUrlTip": "创建一个 incoming webhook 集成",
"components.Settings.Notifications.NotificationsSlack.webhookUrl": "网络钩子网址(URL)",
@@ -621,7 +618,7 @@
"components.Settings.Notifications.NotificationsPushover.pushoversettingssaved": "Pushover 通知设置保存成功!",
"components.Settings.Notifications.NotificationsPushover.pushoversettingsfailed": "Pushover 通知设置保存失败。",
"components.Settings.Notifications.NotificationsPushover.agentenabled": "启用通知",
- "components.Settings.Notifications.NotificationsPushover.accessTokenTip": "建立一个 Jellyseerr 专用的应用程序",
+ "components.Settings.Notifications.NotificationsPushover.accessTokenTip": "创建应用 并关联 Jellyseerr",
"components.Settings.Notifications.NotificationsPushover.accessToken": "应用程序 API 令牌",
"components.Settings.Notifications.NotificationsPushbullet.validationTypes": "请选择通知类型",
"components.Settings.Notifications.NotificationsPushbullet.validationAccessTokenRequired": "请输入 API 令牌",
@@ -633,18 +630,6 @@
"components.Settings.Notifications.NotificationsPushbullet.agentEnabled": "启用通知",
"components.Settings.Notifications.NotificationsPushbullet.accessTokenTip": "从你的账户设定取得 API 令牌",
"components.Settings.Notifications.NotificationsPushbullet.accessToken": "API 令牌",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrlTip": "用户或设備通知的网络钩子网址",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrl": "网络钩子网址(URL)",
- "components.Settings.Notifications.NotificationsLunaSea.validationWebhookUrl": "请输入有效的网址",
- "components.Settings.Notifications.NotificationsLunaSea.validationTypes": "请选择通知类型",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSuccess": "LunaSea 测试通知已发送!",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSending": "发送 LunaSea 测试通知中…",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestFailed": "LunaSea 测试通知发送失败。",
- "components.Settings.Notifications.NotificationsLunaSea.settingsSaved": "LunaSea 通知设置保存成功!",
- "components.Settings.Notifications.NotificationsLunaSea.settingsFailed": "LunaSea 通知设置保存失败。",
- "components.Settings.Notifications.NotificationsLunaSea.profileNameTip": "不使用 default 默认设定档才必须输入",
- "components.Settings.Notifications.NotificationsLunaSea.profileName": "设定档名",
- "components.Settings.Notifications.NotificationsLunaSea.agentenabled": "启用通知",
"components.Search.searchresults": "搜索結果",
"components.Search.search": "搜索",
"components.ResetPassword.validationpasswordrequired": "请输入密码",
@@ -870,7 +855,7 @@
"components.Settings.SettingsAbout.appDataPath": "数据目录",
"components.Settings.SettingsJobsCache.editJobScheduleSelectorHours": "每 {jobScheduleHours, plural, one {hour} other {{jobScheduleHours} hours}}",
"components.Settings.tautulliSettings": "Tautulli 设置",
- "components.Settings.tautulliSettingsDescription": "关于 Tautulli 服务器的设置。Jellyseerr 会从 Tautulli 获取 Plex 媒体的观看历史记录。",
+ "components.Settings.tautulliSettingsDescription": "可选配置您的 Tautulli 服务器设置。Jellyseerr 会从 Tautulli 获取您的 Plex 媒体观看历史数据。",
"components.UserProfile.UserSettings.UserGeneralSettings.discordId": "Discord 用户ID",
"components.UserProfile.UserSettings.UserNotificationSettings.pushbulletsettingsfailed": "Pushbullet 通知设置保存失败。",
"components.UserProfile.UserSettings.UserGeneralSettings.discordIdTip": "您的Discord 用户 ID ",
@@ -1019,7 +1004,7 @@
"components.RequestCard.tmdbid": "TMDB ID",
"components.Settings.SettingsLogs.viewdetails": "查看详情",
"components.Layout.UserDropdown.requests": "请求",
- "components.Settings.restartrequiredTooltip": "必须重新启动 Jellyseerr 才能使更改的设置生效",
+ "components.Settings.restartrequiredTooltip": "需重启 Jellyseerr 服务才能使此设置生效",
"components.TvDetails.manageseries": "管理电视节目",
"components.UserProfile.UserSettings.UserGeneralSettings.plexwatchlistsyncseriestip": "自动请求您的 Plex 关注列表的媒体",
"components.AirDateBadge.airedrelative": "{relativeTime}播出",
@@ -1089,7 +1074,7 @@
"components.StatusBadge.seasonepisodenumber": "S{seasonNumber}E{episodeNumber}",
"components.Discover.PlexWatchlistSlider.plexwatchlist": "您的 Plex 关注列表",
"components.Discover.moviegenres": "电影类型",
- "components.Discover.networks": "电视网",
+ "components.Discover.networks": "流媒体平台",
"components.Discover.studios": "制作公司",
"components.Discover.DiscoverMovieKeyword.keywordMovies": "{keywordTitle} 电影",
"components.Settings.SettingsMain.apikey": "应用程序密钥",
@@ -1138,7 +1123,7 @@
"components.Discover.DiscoverMovies.sortReleaseDateDesc": "上映日期递减",
"components.Discover.DiscoverTv.sortPopularityDesc": "人气递减",
"components.Discover.DiscoverTv.sortTitleDesc": "标题 (Z-A) 递减",
- "components.Settings.SettingsMain.partialRequestsEnabled": "允许电视节目不完整请求",
+ "components.Settings.SettingsMain.partialRequestsEnabled": "允许部分剧集请求",
"components.Discover.DiscoverMovies.sortTitleDesc": "标题 (Z-A) 递减",
"components.Discover.DiscoverTv.sortTmdbRatingDesc": "TMDB 评分递减",
"components.Discover.DiscoverMovies.sortTitleAsc": "标题 (A-Z) 递增",
@@ -1162,22 +1147,22 @@
"components.Discover.updatefailed": "更新探索媒体设置时出了点问题。",
"components.Settings.SettingsMain.originallanguageTip": "以原始语言筛选结果",
"components.Settings.SettingsMain.originallanguage": "探索语言",
- "components.Discover.tmdbnetwork": "TMDB 电视网",
+ "components.Discover.tmdbnetwork": "TMDB 平台",
"components.Discover.tmdbsearch": "TMDB 搜索",
"components.Discover.tmdbstudio": "TMDB 制作公司",
- "components.Discover.CreateSlider.editfail": "编辑滑动框失败。",
+ "components.Discover.CreateSlider.editfail": "编辑滑块失败。",
"components.Discover.CreateSlider.validationTitlerequired": "你必须提供滑动框的名称。",
"components.Discover.DiscoverSliderEdit.deletesuccess": "成功删除滑动框。",
"components.Discover.resettodefault": "重置为默认",
"components.Discover.stopediting": "退出编辑",
"components.Discover.resetwarning": "将所有滑动框重置为默认。这也将删除所有自定义滑动框!",
- "components.Discover.CreateSlider.editSlider": "编辑滑动框",
+ "components.Discover.CreateSlider.editSlider": "编辑滑块",
"components.Discover.CreateSlider.addSlider": "添加滑动框",
- "components.Discover.CreateSlider.addcustomslider": "创建自定义滑动框",
+ "components.Discover.CreateSlider.addcustomslider": "创建自定义滑块",
"components.Discover.DiscoverSliderEdit.deletefail": "删除滑动框失败。",
"components.Discover.DiscoverSliderEdit.remove": "移除",
- "components.Discover.CreateSlider.addfail": "创建新滑动框失败。",
- "components.Discover.CreateSlider.addsuccess": "已创建新的滑动框并保存探索自定义设置。",
+ "components.Discover.CreateSlider.addfail": "创建新滑块失败。",
+ "components.Discover.CreateSlider.addsuccess": "已创建新滑块并保存探索页面的自定义设置。",
"components.Discover.tmdbmoviegenre": "TMDB 电影类型",
"components.Discover.tmdbtvgenre": "TMDB 电视节目类型",
"components.Discover.tmdbtvkeyword": "TMDB 电视节目关键词",
@@ -1196,10 +1181,10 @@
"components.Discover.customizediscover": "自定义探索",
"components.Discover.createnewslider": "创建新的滑动框",
"components.Discover.tmdbmoviekeyword": "TMDB 电影关键词",
- "components.Discover.CreateSlider.editsuccess": "已编辑滑动框并保存探索自定义设置。",
+ "components.Discover.CreateSlider.editsuccess": "已编辑滑块并保存探索页面的自定义设置。",
"components.Discover.CreateSlider.validationDatarequired": "你必须提供一个供搜索的内容。",
"components.Discover.CreateSlider.providetmdbstudio": "提供 TMDB 制作公司 ID",
- "components.Discover.CreateSlider.providetmdbnetwork": "提供一个 TMDB 电视网 ID",
+ "components.Discover.CreateSlider.providetmdbnetwork": "请提供 TMDB 网络 ID",
"components.Discover.CreateSlider.slidernameplaceholder": "滑动框名称",
"components.Discover.resetsuccess": "成功重置探索自定义设置。",
"components.Settings.SettingsJobsCache.availability-sync": "同步媒体可用性",
@@ -1249,10 +1234,10 @@
"components.Settings.syncing": "同步中",
"components.Settings.timeout": "超时",
"components.Setup.signin": "登录",
- "components.Setup.signinWithJellyfin": "使用您的{mediaServerName}帐户",
+ "components.Setup.signinWithJellyfin": "输入您的 Jellyfin 详细信息",
"components.TitleCard.addToWatchList": "添加到监视列表",
"components.TitleCard.watchlistDeleted": "{title}从监视列表中删除成功!",
- "components.TitleCard.watchlistError": "出了问题,再试一次。",
+ "components.TitleCard.watchlistError": "出现错误,请重试。",
"components.TvDetails.play": "在 {mediaServerName} 播放",
"components.TvDetails.play4k": "mediaServerName} 播放 4K",
"components.UserList.importfrommediaserver": "导入{mediaServerName}用户",
@@ -1274,12 +1259,12 @@
"components.Settings.SettingsJobsCache.jellyfin-recently-added-scan": "Jellyfin最近新增扫描",
"components.Settings.SonarrModal.animeSeriesType": "动漫系列",
"components.Settings.jellyfinSettings": "{mediaServerName}设置",
- "components.Settings.jellyfinSettingsDescription": "可以为您的{mediaServerName}服务器配置内部和外部端点。在大多数情况下,外部URL与内部URL不同。如果你想重定向到不同的密码重置页面,也可以为{mediaServerName}登录设置自定义密码重置URL。",
+ "components.Settings.jellyfinSettingsDescription": "可以为您的{mediaServerName}服务器配置内部和外部端点。在大多数情况下,外部URL与内部URL是不同的。如果你想重定向到不同的密码重置页面,也可以为{mediaServerName}登录设置自定义密码重置URL。你也可以修改之前自动生成的Jellyfin API密钥。",
"components.Settings.jellyfinsettingsDescription": "配置{mediaServerName}服务器的设置。{mediaServerName}扫描{mediaServerName}库以查看可用的内容。",
"components.Settings.manualscanDescriptionJellyfin": "正常情况下,每24小时只会运行一次。Jellyseerr将更积极地检查您的{mediaServerName}服务器最近添加的内容。如果这是您第一次配置Jellyseerr,建议您手动进行一次完整的库扫描!",
"components.Settings.save": "保存更改",
"components.Setup.configuremediaserver": "配置媒体服务器",
- "components.Setup.signinWithPlex": "使用您的 Plex 帐户",
+ "components.Setup.signinWithPlex": "输入您的 Plex 详细信息",
"components.TitleCard.watchlistCancel": "{title}的监视列表已取消。",
"components.TitleCard.watchlistSuccess": "{title}添加到监视列表成功!",
"components.UserList.importfromJellyfin": "导入{mediaServerName}用户",
@@ -1291,22 +1276,20 @@
"components.UserProfile.localWatchlist": "{username}的监视列表",
"components.UserList.importedfromJellyfin": "{userCount} {mediaServerName} {userCount, plural, one {user} other {users}} 导入成功!",
"components.Settings.SettingsNetwork.proxyBypassLocalAddresses": "代理绕过本地地址",
- "components.MovieDetails.addtowatchlist": "添加到监视列表",
+ "components.MovieDetails.addtowatchlist": "加入监视列表",
"components.MovieDetails.watchlistError": "出了点问题,请重试。",
"components.PermissionEdit.manageblacklistDescription": "授予管理黑名单媒体的权限。",
"components.Login.invalidurlerror": "无法连接到 {mediaServerName} 服务器。",
"components.Login.enablessl": "使用 SSL",
"components.PermissionEdit.manageblacklist": "管理黑名单",
- "components.Login.validationUrlBaseTrailingSlash": "请删除结尾斜杠",
+ "components.Login.validationUrlBaseTrailingSlash": "基础 URL 末尾不得包含斜杠",
"components.Login.noadminerror": "没有在服务器上找到管理员账户。",
"components.Login.port": "端口",
- "components.Login.validationHostnameRequired": "你必须提供有效的主机名或 IP 地址",
- "components.Login.validationPortRequired": "请输入有效的端口",
- "components.Login.validationUrlBaseLeadingSlash": "请添加前置斜杠",
- "components.Login.validationUrlTrailingSlash": "请删除结尾斜杠",
+ "components.Login.validationPortRequired": "您必须提供一个有效的端口号",
+ "components.Login.validationUrlBaseLeadingSlash": "基础 URL 开头必须包含斜杠",
+ "components.Login.validationUrlTrailingSlash": "URL不能以斜杠结尾",
"components.MovieDetails.removefromwatchlist": "从监视列表中移除",
"components.Settings.SettingsNetwork.csrfProtection": "启用 CSRF 保护",
- "components.Settings.SettingsNetwork.advancedNetworkSettings": "高级网络设置",
"components.Settings.SettingsMain.discoverRegion": "探索地区",
"components.Settings.SettingsMain.enableSpecialEpisodes": "允许特别剧集请求",
"components.Settings.SettingsNetwork.proxyEnabled": "HTTP(S) 代理",
@@ -1319,5 +1302,171 @@
"components.Settings.SettingsNetwork.validationProxyPort": "您必须提供有效端口",
"components.Settings.SettingsUsers.loginMethods": "登录方式",
"components.Settings.SettingsUsers.mediaServerLogin": "允许 {mediaServerName} 登录",
- "components.Settings.SettingsNetwork.networksettings": "网络设置"
+ "components.Settings.SettingsNetwork.networksettings": "网络设置",
+ "component.BlacklistBlock.blacklistdate": "黑名单日期",
+ "components.PermissionEdit.viewblacklistedItemsDescription": "允许查看黑名单媒体。",
+ "components.Settings.Notifications.validationMessageThreadId": "线程/话题ID必须为正的整数",
+ "components.Settings.OverrideRuleModal.conditionsDescription": "指定应用参数更改前的条件。每个字段必须经过验证才能应用(和操作)规则。如果字段的任何属性(或操作)匹配,则认为该字段已验证。",
+ "components.Settings.OverrideRuleModal.genres": "类型",
+ "components.Settings.OverrideRuleModal.ruleCreated": "覆盖规则创建成功!",
+ "components.TvDetails.watchlistDeleted": "{title}从监视列表中删除成功!",
+ "components.UserProfile.UserSettings.LinkJellyfinModal.description": "输入您的{mediaServerName}凭据以将您的帐户与{applicationName}链接。",
+ "components.UserProfile.UserSettings.menuLinkedAccounts": "关联账户",
+ "components.Blacklist.blacklistNotFoundError": "{title}未被列入黑名单。",
+ "components.Blacklist.blacklistdate": "日期",
+ "components.DiscoverTvUpcoming.upcomingtv": "即将播出的电视剧",
+ "components.Blacklist.blacklistedby": "{date} 来自 {user}",
+ "components.Login.adminerror": "您必须使用管理员帐户登录。",
+ "components.Selector.canceled": "已取消",
+ "components.Settings.addrule": "新的覆盖规则",
+ "components.Setup.signinWithEmby": "输入您的Emby详细信息",
+ "components.TvDetails.addtowatchlist": "添加到监控列表",
+ "components.UserList.validationUsername": "你必须提供一个用户名",
+ "components.UserProfile.UserSettings.UserGeneralSettings.streamingRegion": "流媒体区域",
+ "components.UserProfile.UserSettings.UserNotificationSettings.telegramMessageThreadIdTip": "如果您的群聊启用了主题,您可以在这里指定线程/主题的ID",
+ "components.Discover.FilterSlideover.status": "状态",
+ "components.Login.back": "返回",
+ "components.RequestList.RequestItem.removearr": "从{arr}中删除",
+ "components.Layout.Sidebar.blacklist": "黑名单",
+ "components.Settings.OverrideRuleModal.settingsDescription": "指定当满足上述条件时将更改哪些设置。",
+ "components.PermissionEdit.viewblacklistedItems": "查看被列入黑名单的媒体。",
+ "components.RequestList.sortDirection": "切换排序方向",
+ "components.Settings.Notifications.webhookRoleIdTip": "要在webhook消息中提及的角色ID。留空以禁用提及",
+ "components.UserList.username": "用户名",
+ "components.UserProfile.UserSettings.UserGeneralSettings.toastSettingsFailureEmail": "这个邮箱已经被使用了!",
+ "components.Settings.invalidurlerror": "无法连接到{mediaServerName}服务器。",
+ "components.Settings.scanbackground": "扫描将在后台运行。在此期间,您可以继续安装过程。",
+ "components.UserProfile.UserSettings.LinkJellyfinModal.errorExists": "这个帐户已经链接到一个{applicationName}用户",
+ "i18n.blacklistSuccess": "{title} 被成功加入黑名单。",
+ "components.UserProfile.UserSettings.UserLinkedAccountsSettings.linkedAccountsHint": "这些外部帐户与您的{applicationName}帐户相关联。",
+ "i18n.addToBlacklist": "添加到黑名单",
+ "components.Selector.returningSeries": "回归剧集",
+ "components.Blacklist.blacklistsettings": "黑名单设置",
+ "components.Blacklist.mediaName": "名称",
+ "components.Blacklist.mediaTmdbId": "tmdb Id",
+ "components.Blacklist.mediaType": "类型",
+ "component.BlacklistModal.blacklisting": "黑名单",
+ "components.Blacklist.blacklistSettingsDescription": "管理黑名单媒体。",
+ "component.BlacklistBlock.blacklistedby": "被列入黑名单",
+ "i18n.blacklist": "黑名单",
+ "components.Login.hostname": "{mediaServerName} URL",
+ "components.Login.loginwithapp": "使用{appName}登录",
+ "components.Login.orsigninwith": "或者登录",
+ "components.Login.servertype": "服务器类型",
+ "components.Login.validationservertyperequired": "请选择服务器类型",
+ "components.Login.urlBase": "基础 URL",
+ "components.MovieDetails.watchlistDeleted": "{title}从监视列表中删除成功!",
+ "components.MovieDetails.watchlistSuccess": "{title}添加到监视列表成功!",
+ "components.PermissionEdit.blacklistedItems": "黑名单媒体。",
+ "components.PermissionEdit.blacklistedItemsDescription": "添加黑名单媒体权限。",
+ "components.RequestList.RequestItem.profileName": "配置方案",
+ "components.Selector.ended": "已结束",
+ "components.Selector.inProduction": "在生产中",
+ "components.Selector.pilot": "试播节目",
+ "components.Selector.planned": "计划中",
+ "components.Selector.searchStatus": "选择状态…",
+ "components.Selector.searchUsers": "选择用户…",
+ "components.Settings.Notifications.messageThreadIdTip": "如果您的群聊启用了主题,您可以在这里指定线程/主题的ID",
+ "components.Settings.Notifications.messageThreadId": "主题/帖子 ID",
+ "components.Settings.Notifications.validationWebhookRoleId": "您必须提供一个有效的Discord角色ID",
+ "components.Settings.Notifications.webhookRoleId": "通知角色ID",
+ "components.Settings.OverrideRuleModal.conditions": "条件",
+ "components.Settings.OverrideRuleModal.create": "创建规则",
+ "components.Settings.OverrideRuleModal.createrule": "新覆盖规则",
+ "components.Settings.OverrideRuleModal.editrule": "编辑覆盖规则",
+ "components.Settings.OverrideRuleTile.tags": "标签",
+ "components.Settings.OverrideRuleModal.keywords": "关键字",
+ "components.Settings.OverrideRuleModal.languages": "语言",
+ "components.Settings.OverrideRuleModal.notagoptions": "没有标签。",
+ "components.Settings.OverrideRuleModal.qualityprofile": "质量概况",
+ "components.Settings.OverrideRuleModal.rootfolder": "根目录",
+ "components.Settings.OverrideRuleModal.ruleUpdated": "覆盖规则更新成功!",
+ "components.Settings.OverrideRuleModal.selectRootFolder": "选择根目录",
+ "components.Settings.OverrideRuleModal.selecttags": "选择标签",
+ "components.Settings.OverrideRuleModal.serviceDescription": "将此规则应用于所选服务。",
+ "components.Settings.OverrideRuleModal.settings": "设置",
+ "components.Settings.OverrideRuleModal.tags": "标签",
+ "components.Settings.OverrideRuleModal.users": "用户",
+ "components.Settings.OverrideRuleTile.conditions": "条件",
+ "components.Settings.OverrideRuleTile.keywords": "关键字",
+ "components.Settings.OverrideRuleTile.language": "语言",
+ "components.Settings.OverrideRuleTile.qualityprofile": "质量档案",
+ "components.Settings.OverrideRuleTile.rootfolder": "根目录",
+ "components.Settings.OverrideRuleTile.settings": "设置",
+ "components.Settings.OverrideRuleTile.users": "用户",
+ "components.Settings.OverrideRuleModal.selectService": "选择服务",
+ "components.Settings.OverrideRuleModal.service": "服务",
+ "components.Settings.OverrideRuleTile.genre": "类型",
+ "components.Settings.OverrideRuleModal.selectQualityProfile": "选择画质配置",
+ "components.Settings.SettingsJobsCache.usersavatars": "用户头像",
+ "components.Settings.SettingsJobsCache.plex-refresh-token": "Plex 刷新令牌",
+ "components.Settings.SettingsMain.discoverRegionTip": "根据区域可用性过滤内容",
+ "components.Settings.SettingsMain.streamingRegionTip": "按地区可用性显示流媒体网站",
+ "components.Settings.SettingsNetwork.csrfProtectionHoverTip": "不要启用这个设置,除非你明白你在做什么!",
+ "components.Settings.SettingsMain.streamingRegion": "流媒体区域",
+ "components.Settings.SettingsNetwork.csrfProtectionTip": "将外部API访问设置为只读(需要HTTPS)",
+ "components.Settings.SettingsNetwork.docs": "文档",
+ "components.Settings.SettingsNetwork.forceIpv4First": "强制IPv4优先解析",
+ "components.Settings.SettingsNetwork.forceIpv4FirstTip": "强制Jellyseerr首先解析IPv4地址,而不是IPv6地址",
+ "components.Settings.SettingsNetwork.network": "网络",
+ "components.Settings.SettingsNetwork.networkDisclaimer": "应该使用来自容器/系统的网络参数,而不是这些设置。有关更多信息,请参阅{docs}。",
+ "components.Settings.SettingsNetwork.networksettingsDescription": "为您的Jellyseerr实例配置网络设置。",
+ "components.Settings.SettingsNetwork.proxyBypassFilter": "忽略的代理地址",
+ "components.Settings.SettingsNetwork.proxyBypassFilterTip": "使用“,”和“*”作为分隔符。“*”作为子域的通配符",
+ "components.Settings.SettingsNetwork.toastSettingsFailure": "在保存设置时出错了。",
+ "components.Settings.SettingsNetwork.toastSettingsSuccess": "设置保存成功!",
+ "components.Settings.SettingsNetwork.trustProxyTip": "允许Jellyseerr在代理后正确地注册客户端IP地址",
+ "components.Settings.SettingsUsers.atLeastOneAuth": "必须选择至少一种身份验证方法。",
+ "components.Settings.SettingsUsers.loginMethodsTip": "配置用户登录方式。",
+ "components.Settings.SettingsUsers.mediaServerLoginTip": "允许用户使用他们的{mediaServerName}帐户登录",
+ "components.Settings.jellyfinForgotPasswordUrl": "忘记密码URL",
+ "components.Settings.apiKey": "API 密钥",
+ "components.Settings.jellyfinSyncFailedGenericError": "同步库时出错了",
+ "components.Settings.jellyfinSyncFailedNoLibrariesFound": "没有找到库",
+ "components.Settings.menuNetwork": "网络",
+ "components.Settings.overrideRules": "覆盖规则",
+ "components.Settings.overrideRulesDescription": "覆盖规则允许您指定在请求与规则匹配时将被替换的属性。",
+ "components.Settings.jellyfinSyncFailedAutomaticGroupedFolders": "不支持同时使用自定义认证和自动媒体库分组功能",
+ "components.Settings.tip": "提示",
+ "components.Setup.configemby": "配置Emby",
+ "components.Setup.configjellyfin": "配置Jellyfin",
+ "components.Setup.configplex": "配置Plex",
+ "components.Setup.librarieserror": "验证失败。请再次切换库以继续。",
+ "components.Setup.servertype": "选择服务器类型",
+ "components.Setup.subtitle": "首先选择您的媒体服务器",
+ "components.Setup.back": "返回",
+ "components.StatusBadge.seasonnumber": "第 {seasonNumber} 季",
+ "components.TvDetails.removefromwatchlist": "从监视列表中删除",
+ "components.TvDetails.watchlistError": "发生了一些错误。请再试一次。",
+ "components.TvDetails.watchlistSuccess": "{title}添加到监视列表成功!",
+ "components.UserProfile.UserSettings.LinkJellyfinModal.errorUnauthorized": "无法使用您的凭据连接到{mediaServerName}",
+ "components.UserProfile.UserSettings.LinkJellyfinModal.errorUnknown": "发生未知错误",
+ "components.UserProfile.UserSettings.LinkJellyfinModal.password": "密码",
+ "components.UserProfile.UserSettings.LinkJellyfinModal.passwordRequired": "你必须提供一个密码",
+ "components.UserProfile.UserSettings.LinkJellyfinModal.save": "链接",
+ "components.UserProfile.UserSettings.LinkJellyfinModal.saving": "添加中…",
+ "components.UserProfile.UserSettings.LinkJellyfinModal.title": "链接{mediaServerName}帐户",
+ "components.UserProfile.UserSettings.LinkJellyfinModal.username": "用户名",
+ "components.UserProfile.UserSettings.LinkJellyfinModal.usernameRequired": "你必须提供一个用户名",
+ "components.UserProfile.UserSettings.UserGeneralSettings.discoverRegion": "发现区域",
+ "components.UserProfile.UserSettings.UserGeneralSettings.discoverRegionTip": "根据区域可用性筛选内容",
+ "components.UserProfile.UserSettings.UserGeneralSettings.streamingRegionTip": "按地区可用性显示流媒体网站",
+ "components.UserProfile.UserSettings.UserGeneralSettings.toastSettingsFailureEmailEmpty": "该用户名已被其他用户使用,你必须设置一个邮箱",
+ "components.UserProfile.UserSettings.UserGeneralSettings.validationemailformat": "需要有效的邮箱",
+ "components.UserProfile.UserSettings.UserGeneralSettings.validationemailrequired": "需要邮箱",
+ "components.UserProfile.UserSettings.UserLinkedAccountsSettings.errorUnknown": "发生未知错误",
+ "components.UserProfile.UserSettings.UserLinkedAccountsSettings.linkedAccounts": "关联账户",
+ "components.UserProfile.UserSettings.UserLinkedAccountsSettings.noLinkedAccounts": "您的账号没有绑定任何外部账号。",
+ "components.UserProfile.UserSettings.UserLinkedAccountsSettings.noPermissionDescription": "您没有权限修改此用户的关联帐户。",
+ "components.UserProfile.UserSettings.UserLinkedAccountsSettings.deleteFailed": "无法删除关联帐户。",
+ "components.UserProfile.UserSettings.UserLinkedAccountsSettings.plexErrorExists": "此帐户已关联到一个Plex用户",
+ "components.UserProfile.UserSettings.UserLinkedAccountsSettings.plexErrorUnauthorized": "无法使用您的凭证连接Plex",
+ "components.UserProfile.UserSettings.UserNotificationSettings.telegramMessageThreadId": "线程/主题 ID",
+ "components.UserProfile.UserSettings.UserNotificationSettings.validationTelegramMessageThreadId": "线程/主题ID必须是正的整数",
+ "i18n.blacklistDuplicateError": "{title}已被列入黑名单。",
+ "i18n.blacklistError": "出问题了。请再试一次。",
+ "i18n.removefromBlacklist": "移出黑名单",
+ "i18n.blacklisted": "已列入黑名单",
+ "i18n.removeFromBlacklistSuccess": "{title} 已成功从黑名单中移除。",
+ "i18n.specials": "特别篇"
}
diff --git a/src/i18n/locale/zh_Hant.json b/src/i18n/locale/zh_Hant.json
index fc0de8f69a..9540a6bf47 100644
--- a/src/i18n/locale/zh_Hant.json
+++ b/src/i18n/locale/zh_Hant.json
@@ -364,7 +364,6 @@
"components.Settings.SettingsJobsCache.process": "程序",
"components.Settings.SettingsAbout.preferredmethod": "首選",
"i18n.advanced": "進階",
- "components.Settings.copied": "應用程式密鑰已複製到剪貼板。",
"components.Settings.serverpresetLoad": "請點右邊的按鈕",
"components.Settings.toastPlexRefreshSuccess": "獲取 Plex 伺服器列表成功!",
"components.Settings.toastPlexRefreshFailure": "獲取 Plex 伺服器列表失敗。",
@@ -713,11 +712,6 @@
"components.Settings.Notifications.NotificationsWebPush.webpushsettingsfailed": "網路推送通知設定儲存失敗。",
"components.UserProfile.UserSettings.UserGeneralSettings.applanguage": "顯示語言",
"components.Settings.Notifications.NotificationsWebPush.agentenabled": "啟用通知",
- "components.Settings.Notifications.NotificationsLunaSea.settingsSaved": "LunaSea 通知設定儲存成功!",
- "components.Settings.Notifications.NotificationsLunaSea.settingsFailed": "LunaSea 通知設定儲存失敗。",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrl": "Webhook 網址",
- "components.Settings.Notifications.NotificationsLunaSea.validationWebhookUrl": "請輸入有效的網址",
- "components.Settings.Notifications.NotificationsLunaSea.agentenabled": "啟用通知",
"components.Settings.is4k": "4K",
"components.Settings.Notifications.toastEmailTestSuccess": "電子郵件測試通知已發送!",
"components.Settings.Notifications.NotificationsWebPush.toastWebPushTestSuccess": "網路推送測試通知已發送!",
@@ -726,10 +720,7 @@
"components.Settings.Notifications.NotificationsSlack.toastSlackTestSuccess": "Slack 測試通知已發送!",
"components.Settings.Notifications.NotificationsPushover.toastPushoverTestSuccess": "Pushover 測試通知已發送!",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestSuccess": "Pushbullet 測試通知已發送!",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSuccess": "LunaSea 測試通知已發送!",
"components.Settings.noDefault4kServer": "您必須指定一個 4K {serverType} 伺服器為預設,才能處理 4K 的{mediaType}請求。",
- "components.Settings.Notifications.NotificationsLunaSea.profileNameTip": "不使用 default 預設設定檔才必須輸入",
- "components.Settings.Notifications.NotificationsLunaSea.profileName": "設定檔名稱",
"components.Settings.Notifications.toastTelegramTestSending": "發送 Telegram 測試通知中…",
"components.Settings.Notifications.toastEmailTestSending": "發送電子郵件測試通知中…",
"components.Settings.Notifications.toastDiscordTestSending": "發送 Discord 測試通知中…",
@@ -738,7 +729,6 @@
"components.Settings.Notifications.NotificationsSlack.toastSlackTestSending": "發送 Slack 測試通知中…",
"components.Settings.Notifications.NotificationsPushover.toastPushoverTestSending": "發送 Pushover 測試通知中…",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestSending": "發送 Pushbullet 測試通知中…",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestSending": "發送 LunaSea 測試通知中…",
"components.Settings.Notifications.NotificationsWebPush.toastWebPushTestFailed": "網路推送測試通知發送失敗。",
"components.Settings.Notifications.NotificationsWebhook.toastWebhookTestFailed": "Webhook 測試通知發送失敗。",
"components.Settings.Notifications.toastEmailTestFailed": "電子郵件測試通知發送失敗。",
@@ -747,7 +737,6 @@
"components.Settings.Notifications.NotificationsSlack.toastSlackTestFailed": "Slack 測試通知發送失敗。",
"components.Settings.Notifications.NotificationsPushover.toastPushoverTestFailed": "Pushover 測試通知發送失敗。",
"components.Settings.Notifications.NotificationsPushbullet.toastPushbulletTestFailed": "Pushbullet 測試通知發送失敗。",
- "components.Settings.Notifications.NotificationsLunaSea.toastLunaSeaTestFailed": "LunaSea 測試通知發送失敗。",
"components.Settings.Notifications.NotificationsWebhook.toastWebhookTestSuccess": "Webhook 測試通知已發送!",
"components.Settings.SettingsUsers.newPlexLoginTip": "讓還沒匯入的 Plex 使用者登入",
"components.Settings.SettingsUsers.newPlexLogin": "允許新的 Plex 登入",
@@ -767,7 +756,6 @@
"components.Settings.Notifications.NotificationsPushbullet.accessTokenTip": "從您的帳號設定取得 API 令牌",
"components.Settings.Notifications.NotificationsPushover.accessTokenTip": "建立一個 Jellyseerr 專用的應用程式",
"components.Settings.Notifications.NotificationsSlack.webhookUrlTip": "創建一個「Incoming Webhook」整合",
- "components.Settings.Notifications.NotificationsLunaSea.webhookUrlTip": "使用者或設備通知的 webhook 網址",
"components.Settings.Notifications.webhookUrlTip": "在您的伺服器裡建立一個 webhook",
"components.Settings.Notifications.botApiTip": "建立一個 Jellyseerr 專用的機器人",
"components.Settings.Notifications.chatIdTip": "先與您的機器人建立一個聊天室以及把 @get_id_bot 也加到聊天室,然後在聊天室裡發出 /my_id 命令",
@@ -789,7 +777,6 @@
"components.Settings.Notifications.NotificationsSlack.validationTypes": "請選擇通知類型",
"components.Settings.Notifications.NotificationsPushover.validationTypes": "請選擇通知類型",
"components.Settings.Notifications.NotificationsPushbullet.validationTypes": "請選擇通知類型",
- "components.Settings.Notifications.NotificationsLunaSea.validationTypes": "請選擇通知類型",
"components.NotificationTypeSelector.usermediarequestedDescription": "當其他使用者提出需要管理員批准的請求時取得通知。",
"components.NotificationTypeSelector.usermediafailedDescription": "當 Radarr 或 Sonarr 處理請求失敗時取得通知。",
"components.NotificationTypeSelector.usermediadeclinedDescription": "當您的請求被拒絕時取得通知。",
diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx
index 3bb034bbed..c5b223bf19 100644
--- a/src/pages/_app.tsx
+++ b/src/pages/_app.tsx
@@ -236,6 +236,7 @@ CoreApp.getInitialProps = async (initialProps) => {
series4kEnabled: false,
localLogin: true,
mediaServerLogin: true,
+ openIdProviders: [],
discoverRegion: '',
streamingRegion: '',
originalLanguage: '',
@@ -286,7 +287,10 @@ CoreApp.getInitialProps = async (initialProps) => {
);
user = response.data;
- if (router.pathname.match(/(setup|login)/)) {
+ if (
+ router.pathname.match(/(setup|login)/) &&
+ !router.pathname.includes('oidc')
+ ) {
ctx.res.writeHead(307, {
Location: '/',
});
diff --git a/src/utils/oidc.ts b/src/utils/oidc.ts
new file mode 100644
index 0000000000..920771c4d7
--- /dev/null
+++ b/src/utils/oidc.ts
@@ -0,0 +1,28 @@
+export async function processCallback(
+ params: URLSearchParams,
+ provider: string
+) {
+ const url = new URL(
+ `/api/v1/auth/oidc/callback/${encodeURIComponent(provider)}`,
+ window.location.origin
+ );
+ url.search = params.toString();
+
+ try {
+ const result = await fetch(url);
+ const message = await result.json();
+
+ if (!result.ok) {
+ return { type: 'error', message: message.message };
+ }
+ return {
+ type: 'success',
+ message,
+ };
+ } catch (e) {
+ return {
+ type: 'error',
+ message: e.message,
+ };
+ }
+}
diff --git a/src/utils/plex.ts b/src/utils/plex.ts
index dd16c4355d..5bf7aeafb8 100644
--- a/src/utils/plex.ts
+++ b/src/utils/plex.ts
@@ -58,14 +58,14 @@ class PlexOAuth {
const browser = Bowser.getParser(window.navigator.userAgent);
this.plexHeaders = {
Accept: 'application/json',
- 'X-Plex-Product': 'Jellyseerr',
+ 'X-Plex-Product': 'Seerr',
'X-Plex-Version': 'Plex OAuth',
'X-Plex-Client-Identifier': clientId,
'X-Plex-Model': 'Plex OAuth',
'X-Plex-Platform': browser.getBrowserName(),
'X-Plex-Platform-Version': browser.getBrowserVersion(),
'X-Plex-Device': browser.getOSName(),
- 'X-Plex-Device-Name': `${browser.getBrowserName()} (Jellyseerr)`,
+ 'X-Plex-Device-Name': `${browser.getBrowserName()} (Seerr)`,
'X-Plex-Device-Screen-Resolution':
window.screen.width + 'x' + window.screen.height,
'X-Plex-Language': 'en',
diff --git a/src/utils/pushSubscriptionHelpers.ts b/src/utils/pushSubscriptionHelpers.ts
new file mode 100644
index 0000000000..4cc146a406
--- /dev/null
+++ b/src/utils/pushSubscriptionHelpers.ts
@@ -0,0 +1,162 @@
+import type { UserPushSubscription } from '@server/entity/UserPushSubscription';
+import type { PublicSettingsResponse } from '@server/interfaces/api/settingsInterfaces';
+import axios from 'axios';
+
+// Taken from https://www.npmjs.com/package/web-push
+function urlBase64ToUint8Array(base64String: string) {
+ const padding = '='.repeat((4 - (base64String.length % 4)) % 4);
+ const base64 = `${base64String}${padding}`
+ .replace(/-/g, '+')
+ .replace(/_/g, '/');
+
+ const rawData = window.atob(base64);
+ const outputArray = new Uint8Array(rawData.length);
+
+ for (let i = 0; i < rawData.length; ++i)
+ outputArray[i] = rawData.charCodeAt(i);
+
+ return outputArray;
+}
+
+export const getPushSubscription = async () => {
+ const registration = await navigator.serviceWorker.ready;
+ const subscription = await registration.pushManager.getSubscription();
+ return { registration, subscription };
+};
+
+export const verifyPushSubscription = async (
+ userId: number | undefined,
+ currentSettings: PublicSettingsResponse
+): Promise => {
+ if (!('serviceWorker' in navigator) || !userId) {
+ return false;
+ }
+
+ try {
+ const { subscription } = await getPushSubscription();
+
+ if (!subscription) {
+ return false;
+ }
+
+ const appServerKey = subscription.options?.applicationServerKey;
+ if (!(appServerKey instanceof ArrayBuffer)) {
+ return false;
+ }
+
+ const currentServerKey = new Uint8Array(appServerKey).toString();
+ const expectedServerKey = urlBase64ToUint8Array(
+ currentSettings.vapidPublic
+ ).toString();
+
+ const endpoint = subscription.endpoint;
+
+ const { data } = await axios.get(
+ `/api/v1/user/${userId}/pushSubscription/${encodeURIComponent(endpoint)}`
+ );
+
+ return expectedServerKey === currentServerKey && data.endpoint === endpoint;
+ } catch {
+ return false;
+ }
+};
+
+export const verifyAndResubscribePushSubscription = async (
+ userId: number | undefined,
+ currentSettings: PublicSettingsResponse
+): Promise => {
+ const isValid = await verifyPushSubscription(userId, currentSettings);
+
+ if (isValid) {
+ return true;
+ }
+
+ if (currentSettings.enablePushRegistration) {
+ try {
+ // Unsubscribe from the backend to clear the existing push subscription (keys and endpoint)
+ await unsubscribeToPushNotifications(userId);
+
+ // Subscribe again to generate a fresh push subscription with updated keys and endpoint
+ await subscribeToPushNotifications(userId, currentSettings);
+
+ return true;
+ } catch (error) {
+ throw new Error(`[SW] Resubscribe failed: ${error.message}`);
+ }
+ }
+
+ return false;
+};
+
+export const subscribeToPushNotifications = async (
+ userId: number | undefined,
+ currentSettings: PublicSettingsResponse
+) => {
+ if (
+ !('serviceWorker' in navigator) ||
+ !userId ||
+ !currentSettings.enablePushRegistration
+ ) {
+ return false;
+ }
+
+ try {
+ const { registration } = await getPushSubscription();
+
+ if (!registration) {
+ return false;
+ }
+
+ const subscription = await registration.pushManager.subscribe({
+ userVisibleOnly: true,
+ applicationServerKey: currentSettings.vapidPublic,
+ });
+
+ const { endpoint, keys } = subscription.toJSON();
+
+ if (keys?.p256dh && keys?.auth) {
+ await axios.post('/api/v1/user/registerPushSubscription', {
+ endpoint,
+ p256dh: keys.p256dh,
+ auth: keys.auth,
+ userAgent: navigator.userAgent,
+ });
+
+ return true;
+ }
+
+ return false;
+ } catch (error) {
+ throw new Error(
+ `Issue subscribing to push notifications: ${error.message}`
+ );
+ }
+};
+
+export const unsubscribeToPushNotifications = async (
+ userId: number | undefined,
+ endpoint?: string
+) => {
+ if (!('serviceWorker' in navigator) || !userId) {
+ return;
+ }
+
+ try {
+ const { subscription } = await getPushSubscription();
+
+ if (!subscription) {
+ return false;
+ }
+
+ const { endpoint: currentEndpoint } = subscription.toJSON();
+
+ if (!endpoint || endpoint === currentEndpoint) {
+ await subscription.unsubscribe();
+ return true;
+ }
+ } catch (error) {
+ throw new Error(
+ `Issue unsubscribing to push notifications: ${error.message}`
+ );
+ }
+};