Compare commits
27 Commits
ci/pr-vali
...
I10n_crowd
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9a3e624ac9 | ||
|
|
d12beee529 | ||
|
|
02ffac167b | ||
|
|
4eb734c99f | ||
|
|
b7bae0072f | ||
|
|
1685571406 | ||
|
|
36ed7539a2 | ||
|
|
8f82ac481a | ||
|
|
a242ff69fd | ||
|
|
b0c9dc114c | ||
|
|
89190b5054 | ||
|
|
394262af5a | ||
|
|
3dbe5bb64c | ||
|
|
801ab275ab | ||
|
|
f7033e7abb | ||
|
|
0d796d01b8 | ||
|
|
46d96d5965 | ||
|
|
7d16e7d5c7 | ||
|
|
ceb9b5a1ae | ||
|
|
1144ff5049 | ||
|
|
4d508a4315 | ||
|
|
915a4febbb | ||
|
|
88163eb531 | ||
|
|
46bd2a784e | ||
|
|
0a36fdfbec | ||
|
|
45d1f752d6 | ||
|
|
54ee507209 |
29
.gitattributes
vendored
@@ -1 +1,28 @@
|
|||||||
.modules/vlc-player/Frameworks/*.xcframework filter=lfs diff=lfs merge=lfs -text
|
# Normalise line endings to LF for everyone. Files are stored as LF in git and
|
||||||
|
# checked out as LF on every OS, so Windows clones stop producing CRLF churn
|
||||||
|
# (no more "LF will be replaced by CRLF" warnings) regardless of core.autocrlf.
|
||||||
|
* text=auto eol=lf
|
||||||
|
|
||||||
|
# Windows-only scripts must stay CRLF
|
||||||
|
*.bat text eol=crlf
|
||||||
|
*.cmd text eol=crlf
|
||||||
|
|
||||||
|
# Binary assets — never touched / never normalised
|
||||||
|
*.png binary
|
||||||
|
*.jpg binary
|
||||||
|
*.jpeg binary
|
||||||
|
*.gif binary
|
||||||
|
*.webp binary
|
||||||
|
*.ico binary
|
||||||
|
*.icns binary
|
||||||
|
*.ttf binary
|
||||||
|
*.otf binary
|
||||||
|
*.woff binary
|
||||||
|
*.woff2 binary
|
||||||
|
*.mp3 binary
|
||||||
|
*.mp4 binary
|
||||||
|
*.mov binary
|
||||||
|
*.pdf binary
|
||||||
|
*.keystore binary
|
||||||
|
*.jks binary
|
||||||
|
*.p12 binary
|
||||||
|
|||||||
22
.github/ISSUE_TEMPLATE/issue_report.yml
vendored
@@ -1,5 +1,5 @@
|
|||||||
name: "🐛 Bug Report"
|
name: "🐛 Bug Report"
|
||||||
description: Create a report to help us improve
|
description: Create a report to help Streamyfin improve
|
||||||
title: "[Bug]: "
|
title: "[Bug]: "
|
||||||
labels:
|
labels:
|
||||||
- "🐛 bug"
|
- "🐛 bug"
|
||||||
@@ -36,7 +36,7 @@ body:
|
|||||||
attributes:
|
attributes:
|
||||||
label: What happened?
|
label: What happened?
|
||||||
description: A clear and concise description of what the bug is.
|
description: A clear and concise description of what the bug is.
|
||||||
placeholder: Describe what happened in detail.
|
placeholder: Describe what happened in detail, the more precise the better.
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
|
|
||||||
@@ -67,7 +67,7 @@ body:
|
|||||||
attributes:
|
attributes:
|
||||||
label: Which device and operating system are you using?
|
label: Which device and operating system are you using?
|
||||||
description: Please provide your device model and OS version
|
description: Please provide your device model and OS version
|
||||||
placeholder: e.g. iPhone 15 Pro, iOS 18.1.1 or Samsung Galaxy S24, Android 14
|
placeholder: e.g. iPhone 17 Pro / iOS 26.5.1, Samsung Galaxy S25 / Android 16, Apple TV / tvOS 26.5
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
|
|
||||||
@@ -75,11 +75,11 @@ body:
|
|||||||
id: version
|
id: version
|
||||||
attributes:
|
attributes:
|
||||||
label: Streamyfin Version
|
label: Streamyfin Version
|
||||||
description: What version of Streamyfin are you running?
|
description: What version of Streamyfin are you using?
|
||||||
options:
|
options:
|
||||||
- 0.47.1
|
- 0.54.1
|
||||||
- 0.30.2
|
- 0.51.0
|
||||||
- older
|
- Older
|
||||||
- TestFlight/Development build
|
- TestFlight/Development build
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
@@ -90,9 +90,9 @@ body:
|
|||||||
label: Jellyfin Server Information
|
label: Jellyfin Server Information
|
||||||
description: Please provide details about your Jellyfin server
|
description: Please provide details about your Jellyfin server
|
||||||
placeholder: |
|
placeholder: |
|
||||||
- Jellyfin Server Version: e.g. 10.10.7
|
- Jellyfin Server Version: e.g. 10.11.10
|
||||||
- Server OS: e.g. Ubuntu 22.04, Windows 11, Docker
|
- Server OS: e.g. Ubuntu 26.04, Windows 11, Docker, Proxmox
|
||||||
- Connection: e.g. Local network, Remote via domain, VPN
|
- Connection: e.g. Local network, remote via domain, VPN
|
||||||
|
|
||||||
- type: textarea
|
- type: textarea
|
||||||
id: screenshots
|
id: screenshots
|
||||||
@@ -104,7 +104,7 @@ body:
|
|||||||
id: logs
|
id: logs
|
||||||
attributes:
|
attributes:
|
||||||
label: Relevant logs (if available)
|
label: Relevant logs (if available)
|
||||||
description: If you have access to app logs or crash reports, please include them here. **Remember to remove any personal information like server URLs or usernames.**
|
description: If you have access to app logs or crash reports, please include them here. **Remember to remove any personal information like server URL, API keys or usernames.**
|
||||||
render: shell
|
render: shell
|
||||||
|
|
||||||
- type: textarea
|
- type: textarea
|
||||||
|
|||||||
20
.github/workflows/build-apps.yml
vendored
@@ -33,7 +33,7 @@ jobs:
|
|||||||
swap-storage: false
|
swap-storage: false
|
||||||
|
|
||||||
- name: 📥 Checkout code
|
- name: 📥 Checkout code
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
with:
|
with:
|
||||||
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
@@ -116,7 +116,7 @@ jobs:
|
|||||||
swap-storage: false
|
swap-storage: false
|
||||||
|
|
||||||
- name: 📥 Checkout code
|
- name: 📥 Checkout code
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
with:
|
with:
|
||||||
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
@@ -187,7 +187,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: 📥 Checkout code
|
- name: 📥 Checkout code
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
with:
|
with:
|
||||||
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
@@ -219,7 +219,7 @@ jobs:
|
|||||||
uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1
|
uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1
|
||||||
with:
|
with:
|
||||||
# renovate: datasource=custom.xcode depName=xcode versioning=loose
|
# renovate: datasource=custom.xcode depName=xcode versioning=loose
|
||||||
xcode-version: "26.4"
|
xcode-version: "26.5"
|
||||||
|
|
||||||
- name: 🏗️ Setup EAS
|
- name: 🏗️ Setup EAS
|
||||||
uses: expo/expo-github-action@b184ff86a3c926240f1b6db41764c83a01c02eef # main
|
uses: expo/expo-github-action@b184ff86a3c926240f1b6db41764c83a01c02eef # main
|
||||||
@@ -252,7 +252,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: 📥 Checkout code
|
- name: 📥 Checkout code
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
with:
|
with:
|
||||||
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
@@ -284,7 +284,7 @@ jobs:
|
|||||||
uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1
|
uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1
|
||||||
with:
|
with:
|
||||||
# renovate: datasource=custom.xcode depName=xcode versioning=loose
|
# renovate: datasource=custom.xcode depName=xcode versioning=loose
|
||||||
xcode-version: "26.4"
|
xcode-version: "26.5"
|
||||||
|
|
||||||
- name: 🚀 Build iOS app
|
- name: 🚀 Build iOS app
|
||||||
env:
|
env:
|
||||||
@@ -312,7 +312,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: 📥 Checkout code
|
- name: 📥 Checkout code
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
with:
|
with:
|
||||||
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
@@ -344,7 +344,7 @@ jobs:
|
|||||||
uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1
|
uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1
|
||||||
with:
|
with:
|
||||||
# renovate: datasource=custom.xcode depName=xcode versioning=loose
|
# renovate: datasource=custom.xcode depName=xcode versioning=loose
|
||||||
xcode-version: "26.4"
|
xcode-version: "26.5"
|
||||||
|
|
||||||
- name: 🏗️ Setup EAS
|
- name: 🏗️ Setup EAS
|
||||||
uses: expo/expo-github-action@b184ff86a3c926240f1b6db41764c83a01c02eef # main
|
uses: expo/expo-github-action@b184ff86a3c926240f1b6db41764c83a01c02eef # main
|
||||||
@@ -380,7 +380,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: 📥 Checkout code
|
- name: 📥 Checkout code
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
with:
|
with:
|
||||||
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
@@ -412,7 +412,7 @@ jobs:
|
|||||||
uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1
|
uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1
|
||||||
with:
|
with:
|
||||||
# renovate: datasource=custom.xcode depName=xcode versioning=loose
|
# renovate: datasource=custom.xcode depName=xcode versioning=loose
|
||||||
xcode-version: "26.4"
|
xcode-version: "26.5"
|
||||||
|
|
||||||
- name: 🚀 Build iOS app
|
- name: 🚀 Build iOS app
|
||||||
env:
|
env:
|
||||||
|
|||||||
2
.github/workflows/check-lockfile.yml
vendored
@@ -19,7 +19,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: 📥 Checkout repository
|
- name: 📥 Checkout repository
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
with:
|
with:
|
||||||
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
||||||
show-progress: false
|
show-progress: false
|
||||||
|
|||||||
2
.github/workflows/ci-codeql.yml
vendored
@@ -24,7 +24,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: 📥 Checkout repository
|
- name: 📥 Checkout repository
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
|
|
||||||
- name: 🏁 Initialize CodeQL
|
- name: 🏁 Initialize CodeQL
|
||||||
uses: github/codeql-action/init@7211b7c8077ea37d8641b6271f6a365a22a5fbfa # v4.36.0
|
uses: github/codeql-action/init@7211b7c8077ea37d8641b6271f6a365a22a5fbfa # v4.36.0
|
||||||
|
|||||||
2
.github/workflows/crowdin.yml
vendored
@@ -23,7 +23,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: 📥 Checkout Repository
|
- name: 📥 Checkout Repository
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
|
|||||||
38
.github/workflows/detect-duplicate.yml
vendored
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
name: 🔁 Detect Duplicate Issues
|
||||||
|
|
||||||
|
on:
|
||||||
|
issues:
|
||||||
|
types: [opened]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: detect-duplicate-${{ github.event.issue.number }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
detect:
|
||||||
|
name: 🔍 Find similar issues
|
||||||
|
if: github.actor != 'github-actions[bot]'
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
permissions:
|
||||||
|
issues: write
|
||||||
|
contents: read
|
||||||
|
steps:
|
||||||
|
- name: 📥 Checkout repository
|
||||||
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
|
|
||||||
|
- name: 🍞 Setup Bun
|
||||||
|
uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0
|
||||||
|
with:
|
||||||
|
bun-version: latest
|
||||||
|
|
||||||
|
- name: 🔍 Detect duplicate issues
|
||||||
|
run: bun scripts/detect-duplicate-issue.mjs
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ github.token }}
|
||||||
|
GITHUB_REPOSITORY: ${{ github.repository }}
|
||||||
|
ISSUE_NUMBER: ${{ github.event.issue.number }}
|
||||||
|
ISSUE_TITLE: ${{ github.event.issue.title }}
|
||||||
|
ISSUE_BODY: ${{ github.event.issue.body }}
|
||||||
39
.github/workflows/linting.yml
vendored
@@ -12,6 +12,38 @@ permissions:
|
|||||||
contents: read
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
validate_pr_title:
|
||||||
|
name: "📝 Validate PR Title"
|
||||||
|
if: github.event_name == 'pull_request'
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
permissions:
|
||||||
|
pull-requests: write
|
||||||
|
contents: read
|
||||||
|
steps:
|
||||||
|
- uses: amannn/action-semantic-pull-request@48f256284bd46cdaab1048c3721360e808335d50 # v6.1.1
|
||||||
|
id: lint_pr_title
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- uses: marocchino/sticky-pull-request-comment@0ea0beb66eb9baf113663a64ec522f60e49231c0 # v3.0.4
|
||||||
|
if: always() && (steps.lint_pr_title.outputs.error_message != null)
|
||||||
|
with:
|
||||||
|
header: pr-title-lint-error
|
||||||
|
message: |
|
||||||
|
Hey there and thank you for opening this pull request! 👋🏼
|
||||||
|
We require pull request titles to follow the [Conventional Commits specification](https://www.conventionalcommits.org/en/v1.0.0/).
|
||||||
|
|
||||||
|
**Error details:**
|
||||||
|
```
|
||||||
|
${{ steps.lint_pr_title.outputs.error_message }}
|
||||||
|
```
|
||||||
|
|
||||||
|
- if: ${{ steps.lint_pr_title.outputs.error_message == null }}
|
||||||
|
uses: marocchino/sticky-pull-request-comment@0ea0beb66eb9baf113663a64ec522f60e49231c0 # v3.0.4
|
||||||
|
with:
|
||||||
|
header: pr-title-lint-error
|
||||||
|
delete: true
|
||||||
|
|
||||||
dependency-review:
|
dependency-review:
|
||||||
name: 🔍 Vulnerable Dependencies
|
name: 🔍 Vulnerable Dependencies
|
||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
@@ -19,7 +51,7 @@ jobs:
|
|||||||
contents: read
|
contents: read
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Repository
|
- name: Checkout Repository
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
with:
|
with:
|
||||||
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
@@ -37,7 +69,7 @@ jobs:
|
|||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- name: 🛒 Checkout repository
|
- name: 🛒 Checkout repository
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
with:
|
with:
|
||||||
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
@@ -65,10 +97,11 @@ jobs:
|
|||||||
- "check"
|
- "check"
|
||||||
- "format"
|
- "format"
|
||||||
- "typecheck"
|
- "typecheck"
|
||||||
|
- "i18n:check"
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: "📥 Checkout PR code"
|
- name: "📥 Checkout PR code"
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
with:
|
with:
|
||||||
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
|
|||||||
136
.github/workflows/pr-validation.yml
vendored
@@ -1,136 +0,0 @@
|
|||||||
name: 🚦 PR Validation
|
|
||||||
|
|
||||||
# Uses pull_request_target so the jobs get a write token even on fork PRs (to comment
|
|
||||||
# and label) — same as seerr. SECURITY: never check out or run the PR head's code here;
|
|
||||||
# we only read the title/body from the event payload and run our own scripts from the base.
|
|
||||||
on:
|
|
||||||
pull_request_target:
|
|
||||||
types: [opened, edited, synchronize, reopened]
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
permissions: {}
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: pr-validation-${{ github.event.pull_request.number || github.ref }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
validate_pr_title:
|
|
||||||
name: "📝 Validate PR Title"
|
|
||||||
if: github.event_name == 'pull_request_target'
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
permissions:
|
|
||||||
pull-requests: write
|
|
||||||
contents: read
|
|
||||||
steps:
|
|
||||||
- uses: amannn/action-semantic-pull-request@48f256284bd46cdaab1048c3721360e808335d50 # v6.1.1
|
|
||||||
id: lint_pr_title
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
- uses: marocchino/sticky-pull-request-comment@0ea0beb66eb9baf113663a64ec522f60e49231c0 # v3.0.4
|
|
||||||
if: always() && (steps.lint_pr_title.outputs.error_message != null)
|
|
||||||
with:
|
|
||||||
header: pr-title-lint-error
|
|
||||||
message: |
|
|
||||||
Hey there and thank you for opening this pull request! 👋🏼
|
|
||||||
We require pull request titles to follow the [Conventional Commits specification](https://www.conventionalcommits.org/en/v1.0.0/).
|
|
||||||
|
|
||||||
**Error details:**
|
|
||||||
```
|
|
||||||
${{ steps.lint_pr_title.outputs.error_message }}
|
|
||||||
```
|
|
||||||
|
|
||||||
- if: ${{ steps.lint_pr_title.outputs.error_message == null }}
|
|
||||||
uses: marocchino/sticky-pull-request-comment@0ea0beb66eb9baf113663a64ec522f60e49231c0 # v3.0.4
|
|
||||||
with:
|
|
||||||
header: pr-title-lint-error
|
|
||||||
delete: true
|
|
||||||
|
|
||||||
validate_pr_template:
|
|
||||||
name: "📋 Validate PR Template"
|
|
||||||
# Skip pushes to an existing PR (the body rarely changes) and bot-authored PRs.
|
|
||||||
if: >-
|
|
||||||
github.event_name == 'pull_request_target' &&
|
|
||||||
github.event.action != 'synchronize' &&
|
|
||||||
github.actor != 'renovate[bot]' &&
|
|
||||||
github.actor != 'github-actions[bot]'
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
permissions:
|
|
||||||
pull-requests: write
|
|
||||||
issues: write
|
|
||||||
contents: read
|
|
||||||
steps:
|
|
||||||
- name: "📥 Checkout"
|
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
||||||
|
|
||||||
- name: "🍞 Setup Bun"
|
|
||||||
uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0
|
|
||||||
with:
|
|
||||||
bun-version: latest
|
|
||||||
|
|
||||||
- name: "📝 Write PR body to file"
|
|
||||||
env:
|
|
||||||
PR_BODY: ${{ github.event.pull_request.body }}
|
|
||||||
run: printf '%s' "$PR_BODY" > /tmp/pr-body.txt
|
|
||||||
|
|
||||||
- name: "📂 List changed files"
|
|
||||||
env:
|
|
||||||
GH_TOKEN: ${{ github.token }}
|
|
||||||
run: |
|
|
||||||
gh api "repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/files" \
|
|
||||||
--paginate --jq '.[].filename' > /tmp/pr-files.txt
|
|
||||||
|
|
||||||
- name: "🔎 Validate body against template"
|
|
||||||
id: check
|
|
||||||
env:
|
|
||||||
AUTHOR_ASSOCIATION: ${{ github.event.pull_request.author_association }}
|
|
||||||
PR_FILES: /tmp/pr-files.txt
|
|
||||||
run: |
|
|
||||||
set +e
|
|
||||||
bun scripts/check-pr-template.mjs /tmp/pr-body.txt > /tmp/pr-issues.json
|
|
||||||
echo "code=$?" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
- name: "💬 Report problems"
|
|
||||||
if: steps.check.outputs.code != '0'
|
|
||||||
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v8.0.0
|
|
||||||
with:
|
|
||||||
script: |
|
|
||||||
const fs = require('fs');
|
|
||||||
let issues;
|
|
||||||
try { issues = JSON.parse(fs.readFileSync('/tmp/pr-issues.json', 'utf8')); }
|
|
||||||
catch { issues = ["The PR template check could not parse the description. Please make sure it follows the template."]; }
|
|
||||||
if (!Array.isArray(issues) || issues.length === 0) issues = ["The PR description does not follow the template."];
|
|
||||||
const body = [
|
|
||||||
"👋 Thanks for the PR! A few things in the description need attention before review:",
|
|
||||||
"",
|
|
||||||
...issues.map((i) => `- ${i}`),
|
|
||||||
"",
|
|
||||||
"Please update the PR description ([template](https://github.com/${{ github.repository }}/blob/develop/.github/pull_request_template.md)). This check re-runs when you edit it.",
|
|
||||||
].join("\n");
|
|
||||||
const { owner, repo } = context.repo;
|
|
||||||
const issue_number = context.payload.pull_request.number;
|
|
||||||
const marker = "<!-- pr-template-check -->";
|
|
||||||
const comments = await github.paginate(github.rest.issues.listComments, { owner, repo, issue_number });
|
|
||||||
const existing = comments.find((c) => c.body?.includes(marker));
|
|
||||||
const payload = `${marker}\n${body}`;
|
|
||||||
if (existing) await github.rest.issues.updateComment({ owner, repo, comment_id: existing.id, body: payload });
|
|
||||||
else await github.rest.issues.createComment({ owner, repo, issue_number, body: payload });
|
|
||||||
const label = "blocked: template";
|
|
||||||
try { await github.rest.issues.getLabel({ owner, repo, name: label }); }
|
|
||||||
catch { await github.rest.issues.createLabel({ owner, repo, name: label, color: "d93f0b", description: "PR description does not follow the template" }); }
|
|
||||||
await github.rest.issues.addLabels({ owner, repo, issue_number, labels: [label] });
|
|
||||||
core.setFailed(`PR template check failed:\n- ${issues.join("\n- ")}`);
|
|
||||||
|
|
||||||
- name: "✅ Clear problems on success"
|
|
||||||
if: steps.check.outputs.code == '0'
|
|
||||||
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v8.0.0
|
|
||||||
with:
|
|
||||||
script: |
|
|
||||||
const { owner, repo } = context.repo;
|
|
||||||
const issue_number = context.payload.pull_request.number;
|
|
||||||
const marker = "<!-- pr-template-check -->";
|
|
||||||
const comments = await github.paginate(github.rest.issues.listComments, { owner, repo, issue_number });
|
|
||||||
const existing = comments.find((c) => c.body?.includes(marker));
|
|
||||||
if (existing) await github.rest.issues.deleteComment({ owner, repo, comment_id: existing.id });
|
|
||||||
try { await github.rest.issues.removeLabel({ owner, repo, issue_number, name: "blocked: template" }); } catch {}
|
|
||||||
4
.github/workflows/release.yml
vendored
@@ -63,7 +63,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: 📥 Checkout code
|
- name: 📥 Checkout code
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
@@ -182,7 +182,7 @@ jobs:
|
|||||||
actions: read # required for `gh run download` to list/fetch this run's artifacts
|
actions: read # required for `gh run download` to list/fetch this run's artifacts
|
||||||
steps:
|
steps:
|
||||||
- name: 📥 Checkout code
|
- name: 📥 Checkout code
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
show-progress: false
|
show-progress: false
|
||||||
|
|||||||
60
.github/workflows/trivy-scan.yml
vendored
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
name: 🛡️ Trivy Security Scan
|
||||||
|
|
||||||
|
# Filesystem scan (Streamyfin ships no container image): finds vulnerable dependencies,
|
||||||
|
# leaked secrets and misconfigurations, and reports them to GitHub code scanning.
|
||||||
|
# Runs post-merge + weekly (not on PRs — dependency-review already gates PRs, and SARIF
|
||||||
|
# upload needs a write token that fork PRs don't get).
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [develop, master]
|
||||||
|
schedule:
|
||||||
|
- cron: "50 7 * * 5" # Weekly, Friday 07:50 UTC
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: trivy-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
trivy:
|
||||||
|
name: 🔎 Filesystem scan
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
security-events: write # upload SARIF to code scanning
|
||||||
|
steps:
|
||||||
|
- name: 📥 Checkout repository
|
||||||
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
|
|
||||||
|
# Rotate the DB cache weekly (matches the scheduled scan): cache hits within the week
|
||||||
|
# instead of a fresh immutable entry per run, still refreshing the DB every week.
|
||||||
|
- name: 🗓️ Compute weekly Trivy cache key
|
||||||
|
id: trivy-cache-key
|
||||||
|
run: echo "value=trivy-db-${{ runner.os }}-$(date -u +%G-%V)" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
- name: 💾 Cache Trivy vulnerability DB
|
||||||
|
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
|
||||||
|
with:
|
||||||
|
path: ~/.cache/trivy
|
||||||
|
key: ${{ steps.trivy-cache-key.outputs.value }}
|
||||||
|
restore-keys: trivy-db-${{ runner.os }}-
|
||||||
|
|
||||||
|
- name: 🔎 Run Trivy filesystem scan
|
||||||
|
uses: aquasecurity/trivy-action@ed142fd0673e97e23eac54620cfb913e5ce36c25 # v0.36.0
|
||||||
|
with:
|
||||||
|
scan-type: fs
|
||||||
|
scan-ref: .
|
||||||
|
scanners: vuln,secret,misconfig
|
||||||
|
ignore-unfixed: true
|
||||||
|
severity: CRITICAL,HIGH
|
||||||
|
format: sarif
|
||||||
|
output: trivy-results.sarif
|
||||||
|
|
||||||
|
- name: 📤 Upload results to code scanning
|
||||||
|
uses: github/codeql-action/upload-sarif@7211b7c8077ea37d8641b6271f6a365a22a5fbfa # v4.36.0
|
||||||
|
with:
|
||||||
|
sarif_file: trivy-results.sarif
|
||||||
|
category: trivy-fs
|
||||||
2
.github/workflows/update-issue-form.yml
vendored
@@ -18,7 +18,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: 📥 Checkout repository
|
- name: 📥 Checkout repository
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
|
|
||||||
- name: "🟢 Setup Node.js"
|
- name: "🟢 Setup Node.js"
|
||||||
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||||
|
|||||||
11
.gitignore
vendored
@@ -1,6 +1,5 @@
|
|||||||
# Dependencies and Package Managers
|
# Dependencies and Package Managers
|
||||||
node_modules/
|
node_modules/
|
||||||
bun.lock
|
|
||||||
bun.lockb
|
bun.lockb
|
||||||
package-lock.json
|
package-lock.json
|
||||||
|
|
||||||
@@ -21,10 +20,8 @@ web-build/
|
|||||||
# Gradle caches (top-level + per-module native projects)
|
# Gradle caches (top-level + per-module native projects)
|
||||||
**/.gradle/
|
**/.gradle/
|
||||||
|
|
||||||
# Module-specific Builds
|
# Native module build outputs (any module)
|
||||||
modules/mpv-player/android/build
|
modules/*/android/build/
|
||||||
modules/player/android
|
|
||||||
modules/hls-downloader/android/build
|
|
||||||
|
|
||||||
# Generated Applications
|
# Generated Applications
|
||||||
Streamyfin.app
|
Streamyfin.app
|
||||||
@@ -69,10 +66,6 @@ certs/
|
|||||||
|
|
||||||
# Version and Backup Files
|
# Version and Backup Files
|
||||||
/version-backup-*
|
/version-backup-*
|
||||||
/modules/sf-player/android/build
|
|
||||||
/modules/music-controls/android/build
|
|
||||||
modules/background-downloader/android/build/*
|
|
||||||
/modules/mpv-player/android/build
|
|
||||||
|
|
||||||
# ios:unsigned-build Artifacts
|
# ios:unsigned-build Artifacts
|
||||||
build/
|
build/
|
||||||
|
|||||||
@@ -161,9 +161,7 @@ export default function FavoritesSeeAllScreen() {
|
|||||||
/>
|
/>
|
||||||
{!itemType ? (
|
{!itemType ? (
|
||||||
<View className='flex-1 items-center justify-center px-6'>
|
<View className='flex-1 items-center justify-center px-6'>
|
||||||
<Text className='text-neutral-500'>
|
<Text className='text-neutral-500'>{t("favorites.noData")}</Text>
|
||||||
{t("favorites.noData", { defaultValue: "No items found." })}
|
|
||||||
</Text>
|
|
||||||
</View>
|
</View>
|
||||||
) : isLoading ? (
|
) : isLoading ? (
|
||||||
<View className='justify-center items-center h-full'>
|
<View className='justify-center items-center h-full'>
|
||||||
@@ -194,7 +192,7 @@ export default function FavoritesSeeAllScreen() {
|
|||||||
ListEmptyComponent={
|
ListEmptyComponent={
|
||||||
<View className='flex flex-col items-center justify-center h-full py-12'>
|
<View className='flex flex-col items-center justify-center h-full py-12'>
|
||||||
<Text className='font-bold text-xl text-neutral-500'>
|
<Text className='font-bold text-xl text-neutral-500'>
|
||||||
{t("home.no_items", { defaultValue: "No items" })}
|
{t("home.no_items")}
|
||||||
</Text>
|
</Text>
|
||||||
</View>
|
</View>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -137,12 +137,12 @@ export default function DownloadsPage() {
|
|||||||
deleteFileByType("Episode")
|
deleteFileByType("Episode")
|
||||||
.then(() =>
|
.then(() =>
|
||||||
toast.success(
|
toast.success(
|
||||||
t("home.downloads.toasts.deleted_all_tvseries_successfully"),
|
t("home.downloads.toasts.deleted_all_series_successfully"),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
.catch((reason) => {
|
.catch((reason) => {
|
||||||
writeToLog("ERROR", reason);
|
writeToLog("ERROR", reason);
|
||||||
toast.error(t("home.downloads.toasts.failed_to_delete_all_tvseries"));
|
toast.error(t("home.downloads.toasts.failed_to_delete_all_series"));
|
||||||
});
|
});
|
||||||
const deleteOtherMedia = () =>
|
const deleteOtherMedia = () =>
|
||||||
Promise.all(
|
Promise.all(
|
||||||
@@ -207,7 +207,7 @@ export default function DownloadsPage() {
|
|||||||
<View className='mb-4'>
|
<View className='mb-4'>
|
||||||
<View className='flex flex-row items-center justify-between mb-2 px-4'>
|
<View className='flex flex-row items-center justify-between mb-2 px-4'>
|
||||||
<Text className='text-lg font-bold'>
|
<Text className='text-lg font-bold'>
|
||||||
{t("home.downloads.tvseries")}
|
{t("home.downloads.series")}
|
||||||
</Text>
|
</Text>
|
||||||
<View className='bg-purple-600 rounded-full h-6 w-6 flex items-center justify-center'>
|
<View className='bg-purple-600 rounded-full h-6 w-6 flex items-center justify-center'>
|
||||||
<Text className='text-xs font-bold'>
|
<Text className='text-xs font-bold'>
|
||||||
@@ -288,7 +288,7 @@ export default function DownloadsPage() {
|
|||||||
{t("home.downloads.delete_all_movies_button")}
|
{t("home.downloads.delete_all_movies_button")}
|
||||||
</Button>
|
</Button>
|
||||||
<Button color='purple' onPress={deleteShows}>
|
<Button color='purple' onPress={deleteShows}>
|
||||||
{t("home.downloads.delete_all_tvseries_button")}
|
{t("home.downloads.delete_all_series_button")}
|
||||||
</Button>
|
</Button>
|
||||||
{otherMedia.length > 0 && (
|
{otherMedia.length > 0 && (
|
||||||
<Button color='purple' onPress={deleteOtherMedia}>
|
<Button color='purple' onPress={deleteOtherMedia}>
|
||||||
|
|||||||
@@ -179,18 +179,15 @@ export default function SettingsTV() {
|
|||||||
// Handle clearing all cache in the entire app
|
// Handle clearing all cache in the entire app
|
||||||
const handleClearCache = async () => {
|
const handleClearCache = async () => {
|
||||||
Alert.alert(
|
Alert.alert(
|
||||||
t("home.settings.storage.clear_all_cache_confirm", "Clear All Cache?"),
|
t("home.settings.storage.clear_all_cache_confirm"),
|
||||||
t(
|
t("home.settings.storage.clear_all_cache_confirm_desc"),
|
||||||
"home.settings.storage.clear_all_cache_confirm_desc",
|
|
||||||
"Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
|
||||||
),
|
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
text: t("common.cancel", "Cancel"),
|
text: t("common.cancel"),
|
||||||
style: "cancel",
|
style: "cancel",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: t("common.ok", "OK"),
|
text: t("common.ok"),
|
||||||
onPress: async () => {
|
onPress: async () => {
|
||||||
try {
|
try {
|
||||||
// 1. Clear React Query Cache (memory & MMKV)
|
// 1. Clear React Query Cache (memory & MMKV)
|
||||||
@@ -243,11 +240,8 @@ export default function SettingsTV() {
|
|||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Failed to clear cache:", error);
|
console.error("Failed to clear cache:", error);
|
||||||
Alert.alert(
|
Alert.alert(
|
||||||
t("home.settings.toasts.error_deleting_files", "Error"),
|
t("home.settings.toasts.error_deleting_files"),
|
||||||
t(
|
t("home.settings.storage.clear_all_cache_error_desc"),
|
||||||
"home.settings.storage.clear_all_cache_error_desc",
|
|
||||||
"An error occurred while clearing the cache.",
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -166,7 +166,7 @@ export default function IndexLayout() {
|
|||||||
open={dropdownOpen}
|
open={dropdownOpen}
|
||||||
onOpenChange={setDropdownOpen}
|
onOpenChange={setDropdownOpen}
|
||||||
trigger={
|
trigger={
|
||||||
<View className='pl-1.5'>
|
<View>
|
||||||
<Ionicons
|
<Ionicons
|
||||||
name='ellipsis-horizontal-outline'
|
name='ellipsis-horizontal-outline'
|
||||||
size={24}
|
size={24}
|
||||||
|
|||||||
@@ -40,6 +40,8 @@ const Layout = () => {
|
|||||||
keyboardDismissMode='none'
|
keyboardDismissMode='none'
|
||||||
screenOptions={{
|
screenOptions={{
|
||||||
tabBarBounces: true,
|
tabBarBounces: true,
|
||||||
|
tabBarActiveTintColor: "#FFFFFF",
|
||||||
|
tabBarInactiveTintColor: "#9CA3AF",
|
||||||
tabBarLabelStyle: {
|
tabBarLabelStyle: {
|
||||||
fontSize: TAB_LABEL_FONT_SIZE,
|
fontSize: TAB_LABEL_FONT_SIZE,
|
||||||
fontWeight: "600",
|
fontWeight: "600",
|
||||||
|
|||||||
@@ -102,8 +102,8 @@ export default function TabLayout() {
|
|||||||
!settings?.streamyStatsServerUrl || settings?.hideWatchlistsTab,
|
!settings?.streamyStatsServerUrl || settings?.hideWatchlistsTab,
|
||||||
tabBarIcon:
|
tabBarIcon:
|
||||||
Platform.OS === "android"
|
Platform.OS === "android"
|
||||||
? (_e) => require("@/assets/icons/list.png")
|
? (_e) => require("@/assets/icons/list.star.png")
|
||||||
: (_e) => ({ sfSymbol: "list.bullet.rectangle" }),
|
: (_e) => ({ sfSymbol: "list.star" }),
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
<NativeTabs.Screen
|
<NativeTabs.Screen
|
||||||
@@ -112,7 +112,7 @@ export default function TabLayout() {
|
|||||||
title: t("tabs.library"),
|
title: t("tabs.library"),
|
||||||
tabBarIcon:
|
tabBarIcon:
|
||||||
Platform.OS === "android"
|
Platform.OS === "android"
|
||||||
? (_e) => require("@/assets/icons/server.rack.png")
|
? (_e) => require("@/assets/icons/rectangle.stack.fill.png")
|
||||||
: (_e) => ({ sfSymbol: "rectangle.stack.fill" }),
|
: (_e) => ({ sfSymbol: "rectangle.stack.fill" }),
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
@@ -123,8 +123,8 @@ export default function TabLayout() {
|
|||||||
tabBarItemHidden: !settings?.showCustomMenuLinks,
|
tabBarItemHidden: !settings?.showCustomMenuLinks,
|
||||||
tabBarIcon:
|
tabBarIcon:
|
||||||
Platform.OS === "android"
|
Platform.OS === "android"
|
||||||
? (_e) => require("@/assets/icons/list.png")
|
? (_e) => require("@/assets/icons/link.png")
|
||||||
: (_e) => ({ sfSymbol: "list.dash.fill" }),
|
: (_e) => ({ sfSymbol: "link" }),
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
<NativeTabs.Screen
|
<NativeTabs.Screen
|
||||||
@@ -134,7 +134,7 @@ export default function TabLayout() {
|
|||||||
tabBarItemHidden: !Platform.isTV,
|
tabBarItemHidden: !Platform.isTV,
|
||||||
tabBarIcon:
|
tabBarIcon:
|
||||||
Platform.OS === "android"
|
Platform.OS === "android"
|
||||||
? (_e) => require("@/assets/icons/gear.png") //Should maybe use other libraries to have it uniform
|
? (_e) => require("@/assets/icons/gearshape.fill.png")
|
||||||
: (_e) => ({ sfSymbol: "gearshape.fill" }),
|
: (_e) => ({ sfSymbol: "gearshape.fill" }),
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -274,6 +274,11 @@ export default function DirectPlayerPage() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
if (itemId) {
|
if (itemId) {
|
||||||
|
setItem(null);
|
||||||
|
setDownloadedItem(null);
|
||||||
|
// Clear the previous episode's stream so the loader gate stays closed
|
||||||
|
// until the new item's stream resolves (avoids a stale MPV source frame).
|
||||||
|
setStream(null);
|
||||||
fetchItemData();
|
fetchItemData();
|
||||||
}
|
}
|
||||||
}, [itemId, offline, api, user?.Id]);
|
}, [itemId, offline, api, user?.Id]);
|
||||||
@@ -316,6 +321,12 @@ export default function DirectPlayerPage() {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ensure item matches the current itemId to avoid race conditions
|
||||||
|
if (item.Id !== itemId) {
|
||||||
|
setStreamStatus({ isLoading: false, isError: false });
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
let result: Stream | null = null;
|
let result: Stream | null = null;
|
||||||
if (offline && downloadedItem?.mediaSource) {
|
if (offline && downloadedItem?.mediaSource) {
|
||||||
const url = downloadedItem.videoFilePath;
|
const url = downloadedItem.videoFilePath;
|
||||||
@@ -388,6 +399,7 @@ export default function DirectPlayerPage() {
|
|||||||
item,
|
item,
|
||||||
user?.Id,
|
user?.Id,
|
||||||
downloadedItem,
|
downloadedItem,
|
||||||
|
offline,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -427,21 +439,15 @@ export default function DirectPlayerPage() {
|
|||||||
if (!item?.Id || !stream?.sessionId || offline || !api) return;
|
if (!item?.Id || !stream?.sessionId || offline || !api) return;
|
||||||
|
|
||||||
const currentTimeInTicks = msToTicks(progress.get());
|
const currentTimeInTicks = msToTicks(progress.get());
|
||||||
await getPlaystateApi(api).onPlaybackStopped({
|
await getPlaystateApi(api).reportPlaybackStopped({
|
||||||
itemId: item.Id,
|
playbackStopInfo: {
|
||||||
mediaSourceId: mediaSourceId,
|
ItemId: item.Id,
|
||||||
positionTicks: currentTimeInTicks,
|
MediaSourceId: mediaSourceId,
|
||||||
playSessionId: stream.sessionId,
|
PositionTicks: currentTimeInTicks,
|
||||||
|
PlaySessionId: stream.sessionId,
|
||||||
|
},
|
||||||
});
|
});
|
||||||
}, [
|
}, [api, item, mediaSourceId, stream, progress, offline]);
|
||||||
api,
|
|
||||||
item,
|
|
||||||
mediaSourceId,
|
|
||||||
stream,
|
|
||||||
progress,
|
|
||||||
offline,
|
|
||||||
revalidateProgressCache,
|
|
||||||
]);
|
|
||||||
|
|
||||||
const stop = useCallback(() => {
|
const stop = useCallback(() => {
|
||||||
// Update URL with final playback position before stopping
|
// Update URL with final playback position before stopping
|
||||||
@@ -459,9 +465,10 @@ export default function DirectPlayerPage() {
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const beforeRemoveListener = navigation.addListener("beforeRemove", stop);
|
const beforeRemoveListener = navigation.addListener("beforeRemove", stop);
|
||||||
return () => {
|
return () => {
|
||||||
|
reportPlaybackStopped();
|
||||||
beforeRemoveListener();
|
beforeRemoveListener();
|
||||||
};
|
};
|
||||||
}, [navigation, stop]);
|
}, [navigation, stop, reportPlaybackStopped]);
|
||||||
|
|
||||||
const currentPlayStateInfo = useCallback(():
|
const currentPlayStateInfo = useCallback(():
|
||||||
| PlaybackProgressInfo
|
| PlaybackProgressInfo
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 26 KiB |
BIN
assets/icons/gearshape.fill.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 8.5 KiB |
|
Before Width: | Height: | Size: 22 KiB |
BIN
assets/icons/link.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 2.3 KiB |
BIN
assets/icons/list.star.png
Normal file
|
After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 11 KiB |
BIN
assets/icons/rectangle.stack.fill.png
Normal file
|
After Width: | Height: | Size: 3.6 KiB |
1
assets/icons/seerr-logo.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="96" height="96" fill="none" viewBox="0 0 96 96"><path fill="url(#paint0_linear)" fill-rule="evenodd" d="M48 96C74.5097 96 96 74.5097 96 48C96 21.4903 74.5097 0 48 0C21.4903 0 0 21.4903 0 48C0 74.5097 21.4903 96 48 96ZM80.0001 52C80.0001 67.464 67.4641 80 52.0001 80C36.5361 80 24.0001 67.464 24.0001 52C24.0001 49.1303 24.4318 46.3615 25.2338 43.7548C27.4288 48.6165 32.3194 52 38.0001 52C45.7321 52 52.0001 45.732 52.0001 38C52.0001 32.3192 48.6166 27.4287 43.755 25.2337C46.3616 24.4317 49.1304 24 52.0001 24C67.4641 24 80.0001 36.536 80.0001 52Z" clip-rule="evenodd"/><path fill="#131928" fill-rule="evenodd" d="M80.0002 52C80.0002 67.464 67.4642 80 52.0002 80C36.864 80 24.5329 67.9897 24.017 52.9791C24.0057 53.318 24 53.6583 24 54C24 70.5685 37.4315 84 54 84C70.5685 84 84 70.5685 84 54C84 37.4315 70.5685 24 54 24C53.6597 24 53.3207 24.0057 52.9831 24.0169C67.9919 24.5347 80.0002 36.865 80.0002 52Z" clip-rule="evenodd" opacity=".2"/><path fill="url(#paint1_linear)" fill-rule="evenodd" d="M48 12C28.1177 12 12 28.1177 12 48C12 50.2091 10.2091 52 8 52C5.79086 52 4 50.2091 4 48C4 23.6995 23.6995 4 48 4C50.2091 4 52 5.79086 52 8C52 10.2091 50.2091 12 48 12Z" clip-rule="evenodd"/><defs><linearGradient id="paint0_linear" x1="48" x2="117.5" y1="0" y2="69.5" gradientUnits="userSpaceOnUse"><stop stop-color="#C395FC"/><stop offset="1" stop-color="#4F65F5"/></linearGradient><linearGradient id="paint1_linear" x1="28" x2="28" y1="8" y2="48" gradientUnits="userSpaceOnUse"><stop stop-color="#fff" stop-opacity=".4"/><stop offset="1" stop-color="#fff" stop-opacity="0"/></linearGradient></defs></svg>
|
||||||
|
After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 14 KiB |
@@ -1,65 +0,0 @@
|
|||||||
<svg
|
|
||||||
type="certified"
|
|
||||||
viewBox="0 0 80 80"
|
|
||||||
preserveAspectRatio="xMidYMid"
|
|
||||||
version="1.1"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
||||||
>
|
|
||||||
<g transform="translate(2.29, 0)">
|
|
||||||
<path
|
|
||||||
d="M42.1942857,18.8022857 C44.3794286,18.608 49.1565714,18.7177143 51.4902857,21.0057143 C51.6297143,21.1451429 51.5085714,21.4605714 51.3097143,21.408 C47.8902857,20.4868571 42.5577143,25.0217143 39.1017143,22.0891429 C39.008,22.9485714 38.2331429,27.0857143 32.3314286,26.4731429 C32.192,26.4594286 32.1371429,26.304 32.24,26.2171429 C33.1542857,25.44 34.2765714,23.2891429 33.3142857,21.9154286 C30.3108571,23.9085714 28.7565714,23.9954286 23.2182857,21.5954286 C23.0377143,21.5177143 23.1451429,21.2228571 23.3577143,21.1748571 C24.5074286,20.9165714 27.2434286,19.9222857 29.696,19.4582857 C30.1645714,19.3691429 30.624,19.3165714 31.0674286,19.312 C28.528,18.7062857 27.4217143,18.1805714 25.7485714,18.1874286 C25.5657143,18.1897143 25.4742857,17.9611429 25.6068571,17.8354286 C28.224,15.3188571 32.9691429,15.1885714 35.2548571,17.0628571 L33.2068571,12.7862857 L35.696,12.4114286 C35.696,12.4114286 36.3451429,14.6925714 36.9257143,16.7428571 C39.5177143,13.904 43.5268571,14.192 44.8777143,16.672 C44.9577143,16.8182857 44.8251429,16.992 44.6605714,16.9622857 C43.3005714,16.7314286 42.3702857,17.8628571 42.1737143,18.7977143 L42.1942857,18.8022857"
|
|
||||||
id="Fill-2"
|
|
||||||
fill="#00912D"
|
|
||||||
></path>
|
|
||||||
<mask id="mask-2" fill="white">
|
|
||||||
<polygon
|
|
||||||
points="0.137142857 0.921142857 75.0534777 0.921142857 75.0534777 79.8628571 0.137142857 79.8628571"
|
|
||||||
></polygon>
|
|
||||||
</mask>
|
|
||||||
<path
|
|
||||||
d="M13.0491429,59.1817143 C9.90628571,55.3554286 7.86971429,50.576 7.51771429,44.9622857 C6.912,35.2342857 10.2354286,26.0845714 23.1794286,21.4834286 C23.1908571,21.5245714 23.1725714,21.5748571 23.2182857,21.5954286 C23.0377143,21.5177143 23.1451429,21.2228571 23.3577143,21.1748571 C24.5074286,20.9165714 27.2434286,19.92 29.696,19.4582857 C30.1645714,19.3691429 30.624,19.3165714 31.0674286,19.3097143 C28.528,18.7062857 27.4217143,18.1805714 25.7485714,18.1874286 C25.5657143,18.1897143 25.4742857,17.9611429 25.6068571,17.8331429 C28.224,15.3165714 32.9691429,15.1885714 35.2548571,17.0628571 L33.2068571,12.784 L35.696,12.4114286 C35.696,12.4114286 36.3451429,14.6902857 36.9257143,16.7428571 C39.5177143,13.904 43.5268571,14.192 44.8777143,16.672 C44.9577143,16.8182857 44.8251429,16.992 44.6605714,16.9622857 C43.3005714,16.7314286 42.3702857,17.8628571 42.1737143,18.7977143 L42.1942857,18.8022857 C44.3794286,18.608 49.1565714,18.7177143 51.4902857,21.0057143 C51.328,20.8502857 51.1337143,20.7245714 50.9508571,20.5874286 C60.2765714,23.504 66.7474286,30.1531429 67.44,41.2251429 C67.8811429,48.2948571 65.5702857,54.3885714 61.568,59.1154286 C62.784,59.2891429 63.9931429,59.4925714 65.2045714,59.6937143 C70.304,53.4537143 73.2502857,45.5428571 73.2502857,37.056 C73.2502857,17.7165714 57.5337143,2.56685714 37.472,2.56685714 C17.4102857,2.56685714 1.69371429,17.7165714 1.69371429,37.056 C1.69371429,45.5565714 4.64,53.472 9.744,59.7097143 C10.8434286,59.5268571 11.9451429,59.3462857 13.0491429,59.1817143"
|
|
||||||
fill="#FFD700"
|
|
||||||
mask="url(#mask-2)"
|
|
||||||
></path>
|
|
||||||
<path
|
|
||||||
d="M9.744,59.7097143 C4.64,53.472 1.69371429,45.5565714 1.69371429,37.056 C1.69371429,17.7165714 17.4102857,2.56685714 37.472,2.56685714 C57.5337143,2.56685714 73.2502857,17.7165714 73.2502857,37.056 C73.2502857,45.5428571 70.304,53.4537143 65.2045714,59.6937143 C65.8125714,59.7942857 66.4205714,59.8742857 67.0285714,59.984 C71.9497143,53.6457143 74.8937143,45.6982857 74.8937143,37.056 C74.8937143,16.3862857 58.1394286,0.921142857 37.472,0.921142857 C16.8022857,0.921142857 0.048,16.3862857 0.048,37.056 C0.048,45.7074286 2.99885714,53.6594286 7.92914286,59.9977143 C8.53257143,59.8902857 9.13828571,59.8102857 9.744,59.7097143"
|
|
||||||
fill="#FA6E0F"
|
|
||||||
mask="url(#mask-2)"
|
|
||||||
></path>
|
|
||||||
<path
|
|
||||||
d="M58.2857143,74.9394286 C62.3748571,75.1954286 65.7874286,77.2137143 67.8468571,79.9474286 C67.9131429,80.0182857 68.0114286,80.016 68.0411429,79.9382857 C68.7451429,77.0971429 68.9394286,74.0662857 68.5851429,71.0125714 C68.5874286,70.9805714 68.6125714,70.9577143 68.6537143,70.9485714 C70.576,70.3428571 72.7017143,70.0137143 74.9645714,70.0457143 C75.0857143,70.0594286 75.0834286,69.9405714 74.9554286,69.8194286 C72.5577143,67.4994286 69.6297143,65.6914286 66.416,64.5417143 C65.3051429,67.68 64.2217143,70.816 63.1565714,73.9634286 C63.136,74.0228571 63.0514286,74.0594286 62.9645714,74.0434286 L58.2857143,74.9394286"
|
|
||||||
fill="#0AC855"
|
|
||||||
mask="url(#mask-2)"
|
|
||||||
></path>
|
|
||||||
<path
|
|
||||||
d="M62.9645714,74.0434286 L58.2857143,74.9394286 C58.2857143,74.9394286 58.3451429,74.512 58.528,73.3325714 C60.9417143,73.6754286 62.9645714,74.0434286 62.9645714,74.0434286"
|
|
||||||
fill="#0B4902"
|
|
||||||
></path>
|
|
||||||
<g transform="translate(0, 20.57)">
|
|
||||||
<mask id="mask-4" fill="white">
|
|
||||||
<polygon
|
|
||||||
points="0.137142857 0.016 67.4935952 0.016 67.4935952 59.2914286 0.137142857 59.2914286"
|
|
||||||
></polygon>
|
|
||||||
</mask>
|
|
||||||
<path
|
|
||||||
d="M13.0765714,38.6057143 C29.1177143,36.2605714 45.5222857,36.2354286 61.568,38.544 C65.5702857,33.8171429 67.8811429,27.7234286 67.44,20.6537143 C66.7474286,9.58171429 60.2765714,2.93257143 50.9508571,0.016 C51.1337143,0.153142857 51.328,0.278857143 51.4902857,0.434285714 C51.6297143,0.573714286 51.5085714,0.889142857 51.3097143,0.836571429 C47.8902857,-0.0845714286 42.5577143,4.45028571 39.1017143,1.51771429 C39.008,2.37485714 38.2331429,6.51428571 32.3314286,5.90171429 C32.192,5.888 32.1371429,5.73257143 32.24,5.64571429 C33.1542857,4.86857143 34.2765714,2.71542857 33.3142857,1.344 C30.3108571,3.33714286 28.7565714,3.424 23.2182857,1.024 C23.1725714,1.00342857 23.1908571,0.953142857 23.1794286,0.912 C10.2354286,5.51314286 6.912,14.6628571 7.51771429,24.3908571 C7.86971429,30.0091429 9.93142857,34.7748571 13.0765714,38.6057143"
|
|
||||||
fill="#FA3200"
|
|
||||||
mask="url(#mask-4)"
|
|
||||||
></path>
|
|
||||||
<path
|
|
||||||
d="M12.0868571,53.472 C12,53.488 11.9154286,53.4514286 11.8948571,53.392 C10.8274286,50.2445714 9.73485714,47.0971429 8.62171429,43.9611429 C5.41028571,45.1108571 2.49371429,46.9302857 0.0982857143,49.248 C-0.0297142857,49.3691429 -0.032,49.488 0.0891428571,49.4742857 C2.352,49.4422857 4.47771429,49.7714286 6.4,50.3771429 C6.44114286,50.3862857 6.46628571,50.4091429 6.46857143,50.4411429 C6.11428571,53.4948571 6.30857143,56.5257143 7.01257143,59.3668571 C7.04228571,59.4445714 7.14057143,59.4468571 7.20685714,59.376 C9.26628571,56.6422857 12.6742857,54.624 16.7657143,54.368 L12.0868571,53.472"
|
|
||||||
fill="#0AC855"
|
|
||||||
mask="url(#mask-4)"
|
|
||||||
></path>
|
|
||||||
</g>
|
|
||||||
<path
|
|
||||||
d="M62.9645714,74.0434286 C46.192,71.104 28.8571429,71.104 12.0868571,74.0434286 C12,74.0594286 11.9154286,74.0228571 11.8948571,73.9634286 C10.3428571,69.3851429 8.74285714,64.8182857 7.09257143,60.2628571 C7.06971429,60.1988571 7.14057143,60.1257143 7.248,60.1074286 C27.1885714,56.464 47.8605714,56.464 67.8034286,60.1074286 C67.9108571,60.1257143 67.9817143,60.1988571 67.9565714,60.2628571 C66.3085714,64.8182857 64.7085714,69.3851429 63.1565714,73.9634286 C63.136,74.0228571 63.0514286,74.0594286 62.9645714,74.0434286"
|
|
||||||
fill="#00912D"
|
|
||||||
></path>
|
|
||||||
<path
|
|
||||||
d="M12.0868571,74.0434286 L16.7657143,74.9394286 C16.7657143,74.9394286 16.704,74.512 16.5211429,73.3325714 C14.1074286,73.6754286 12.0868571,74.0434286 12.0868571,74.0434286"
|
|
||||||
fill="#0B4902"
|
|
||||||
></path>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 50 KiB |
1
assets/images/rt_aud_fresh.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg viewBox="0 0 560 560" xmlns="http://www.w3.org/2000/svg"><path fill="#fff" d="M370.57 474.214l23.466-237.956c14.93-4.796 29.498-11.15 40.23-20.262L404.16 446.278c-6.748 10.248-19.863 20.86-33.59 27.936zm-78.197 21.631l2.947-244.528c20.894-.599 47.933-3.43 70.97-8.346l-19.07 241.17c-22.724 7.518-35.934 9.848-54.847 11.704zm-99.694-252.874c23.038 4.916 50.077 7.747 70.971 8.346l2.948 244.528c-18.914-1.856-32.123-4.186-54.847-11.705l-19.072-241.17zm-67.974-26.975c10.732 9.112 25.3 15.466 40.23 20.262l23.464 237.956c-13.726-7.075-26.84-17.688-33.59-27.936l-30.104-230.282z"/><path fill="gold" d="M118.905 157.445c1.357 28.827 72.771 51.677 160.578 51.176 76.687-.438 140.659-18.546 156.329-42.336a22.976 22.976 0 00-14.058-7.426c.06-.7.098-1.406.095-2.122-.065-11.4-8.429-20.788-19.327-22.54.287-1.474.438-2.999.43-4.559-.072-12.696-10.426-22.928-23.124-22.856-.287.001-.568.036-.853.049a22.911 22.911 0 001.254-7.56c-.074-12.697-10.425-22.93-23.123-22.858a22.914 22.914 0 00-8.247 1.6c-3.632-6.835-10.606-11.6-18.737-12.149-1.416-11.4-11.157-20.195-22.93-20.129-7.41.042-13.963 3.6-18.136 9.065-4.233-4.605-10.3-7.494-17.047-7.456-12.698.072-22.932 10.424-22.86 23.118a22.983 22.983 0 001.115 6.946 22.918 22.918 0 00-13.07 7.459c-2.644-9.847-11.637-17.084-22.314-17.024-9.975.057-18.406 6.47-21.537 15.366-8.474 3.426-14.439 11.738-14.383 21.433.012 2.154.342 4.227.907 6.202a22.876 22.876 0 00-9.328-1.932c-10.012.058-18.47 6.516-21.574 15.465a22.83 22.83 0 00-9.788-2.149c-12.698.072-22.934 10.422-22.86 23.118a22.833 22.833 0 003.159 11.463c-.202.203-.379.426-.571.636"/><path fill="#FA320A" d="M404.161 446.278c-6.749 10.248-19.864 20.86-33.59 27.936l23.465-237.956c14.93-4.796 29.498-11.15 40.23-20.262L404.16 446.278zM347.22 484.14c-22.723 7.519-35.934 9.85-54.847 11.705l2.947-244.528c20.894-.599 47.933-3.43 70.973-8.346L347.22 484.14zm-135.47 0l-19.07-241.17c23.037 4.917 50.076 7.748 70.97 8.347l2.948 244.528c-18.914-1.856-32.123-4.186-54.847-11.705zm-56.94-37.862l-30.105-230.282c10.732 9.112 25.3 15.466 40.23 20.262l23.464 237.956c-13.726-7.075-26.84-17.688-33.588-27.936zm247.668-321.143c.298 1.453.465 2.955.473 4.498a23.018 23.018 0 01-.43 4.56c10.9 1.749 19.263 11.137 19.328 22.54a23.59 23.59 0 01-.095 2.12 22.976 22.976 0 0114.058 7.425c-15.669 23.792-79.642 41.9-156.327 42.34-87.807.502-159.221-22.346-160.58-51.175.192-.208.37-.433.57-.634-1.355-2.311-2.29-4.887-2.773-7.62-8.408 7.979-13.495 14.412-12.6 23.78.085 1.251 37.196 266.911 37.196 266.911 4.282 42.075 65.391 75.703 138.187 76.12 72.796-.417 133.907-34.045 138.187-76.12 0 0 37.11-265.66 37.197-266.912 1.777-18.736-20.15-35.745-52.39-47.833z"/></svg>
|
||||||
|
After Width: | Height: | Size: 2.6 KiB |
1
assets/images/rt_aud_rotten.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg viewBox="0 0 560 560" xmlns="http://www.w3.org/2000/svg"><g transform="translate(33 140)"><path d="m43.802 267.32l237.94 23.482c4.7937 14.937 11.149 29.517 20.259 40.256l-230.27-30.125c-10.248-6.7519-20.861-19.877-27.936-33.612zm222.88-75.298c0.60053 20.906 3.4316 47.964 8.3462 71.017l-241.15-19.083c-7.518-22.739-9.8466-35.959-11.704-54.885l244.51 2.951zm8.3462-102.71c-4.9146 23.053-7.7456 50.111-8.3462 71.017l-244.51 2.951c1.8576-18.926 4.1862-32.146 11.704-54.885l241.15-19.083zm26.973-68.019c-9.1095 10.74-15.465 25.318-20.259 40.257l-237.94 23.48c7.0751-13.735 17.689-26.859 27.936-33.612l230.27-30.125z" fill="#fff"/><path d="m303.57 264.67c3.155-7.8209 14.337-12.586 22.367-12.028 8.5825 0.59581 17.699 9.6258 19.292 18.507 0.29589-0.32244 0.60578-0.62735 0.92093-0.92701 2.7558-2.6356 6.2084-4.3845 9.9867-4.8664-0.57777-2.562-0.71609-5.3045-0.3204-8.1188 1.3954-9.901 9.3336-17.326 18.422-17.252 5.8652 0.047314 11.011 3.0509 14.364 7.6649 0.29939-0.37501 0.6303-0.71848 0.95245-1.069 3.8343-19.991 6.2644-42.578 6.8177-66.547 1.8996-82.42-18.993-149.75-46.663-150.39-27.672-0.63962-51.644 65.656-53.544 148.08 0 0-1.4654 30.062 7.4042 86.951" fill="#00641E"/><path d="m490.91 354.8c1.6353-2.732 2.5492-6.0072 2.4862-9.4874 0.5305-11.245-7.1819-21.439-17.913-20.31 0.3099-1.2862 0.51299-2.6233 0.59178-4.0024 0.64255-11.264-7.1188-20.972-17.337-21.682-0.2241-0.014019-0.44471-0.021029-0.66706-0.028039 1.0627-2.795 1.5897-5.916 1.4024-9.2228-0.52875-9.3717-6.9858-17.268-15.386-18.822-3.0342-0.56076-5.9773-0.28213-8.6718 0.65188-2.5457-6.277-7.8909-10.933-14.393-11.916-0.51474-10.192-7.8699-18.58-17.34-19.238-5.9545-0.41356-11.426 2.3237-15.085 6.9061-3.3528-4.614-8.4985-7.6158-14.364-7.6632-9.0885-0.075352-17.027 7.3495-18.422 17.252-0.39569 2.8126-0.25737 5.555 0.3204 8.1188-3.7783 0.48015-7.2309 2.2308-9.9867 4.8646-0.31515 0.29966-0.62504 0.60457-0.92093 0.92701-1.5932-8.8811-10.71-17.909-19.292-18.507-8.0293-0.55726-19.357 4.3249-22.367 12.028 1.3201 13.434 9.71 50.053 40.055 82.903l0.26963 0.019276c2.9256 2.6496 6.7459 4.1093 10.818 3.7466 2.5247-0.22606 4.8498-1.1303 6.8527-2.5252l0.48848 0.033295c2.67 1.8558 5.8793 2.8266 9.2706 2.5252 1.2956-0.11566 2.5317-0.42758 3.7065-0.87269 2.9064 6.0142 9.3879 9.901 16.622 9.2631 5.6026-0.49417 10.365-3.5959 13.164-7.9611l0.90692 0.063086c2.7961 2.774 6.513 4.3897 10.522 4.2688 3.3143 5.0188 9.4019 8.1065 16.12 7.516 2.5299-0.22255 4.8918-0.95505 6.998-2.0643 3.5139 4.3266 9.2811 6.8991 15.609 6.3419 6.2557-0.5485 11.54-4.02 14.414-8.8197 2.8241 2.2693 6.3625 3.4872 10.12 3.1525 3.6452-0.32594 6.8842-2.0485 9.3179-4.6543l0.40619 0.028038c0.55326-0.80259 1.026-1.6245 1.4654-2.4533 0.010505-0.015772 0.019259-0.033296 0.028014-0.049067 0.059527-0.1104 0.13306-0.21905 0.18909-0.3312" fill="#FFD700"/><path d="m281.75 61.547l-237.94 23.48c7.0751-13.735 17.689-26.859 27.936-33.612l230.27-30.125c-9.1095 10.74-15.465 25.318-20.259 40.257zm20.259 269.51l-230.27-30.125c-10.248-6.7519-20.861-19.877-27.936-33.611l237.94 23.48c4.7937 14.937 11.149 29.517 20.259 40.256zm-268.13-87.102c-7.518-22.739-9.8466-35.957-11.704-54.885l244.51 2.951c0.60053 20.906 3.4316 47.964 8.3462 71.017l-241.15-19.083zm0-135.56l241.15-19.083c-4.9146 23.053-7.7456 50.111-8.3462 71.019l-244.51 2.9493c1.8576-18.926 4.1862-32.146 11.704-54.885zm344.72-82.679c-15.255-17.778-26.206-26.124-35.587-25.04-1.7491 0.22255-266.89 37.222-266.89 37.222-42.074 4.2828-75.7 65.432-76.117 138.28 0.4167 72.843 34.043 133.99 76.117 138.28 0 0 265.64 37.135 266.89 37.221 2.2183-0.014019 4.4086-0.31192 6.5673-0.86568-2.101-0.6256-4.0391-1.7208-5.6867-3.2139l-0.26963-0.019276c-30.345-32.848-38.735-69.47-40.055-82.903 0.003501-0.010514 0.010505-0.019276 0.014006-0.02979-0.003501 0.010514-0.010505 0.019276-0.014006 0.02979-8.8697-56.889-7.4042-86.951-7.4042-86.951 1.8996-82.42 25.872-148.72 53.544-148.08 27.67 0.63962 48.562 67.973 46.663 150.39-0.55326 23.969-2.9834 46.556-6.8177 66.547 3.9393-4.3512 9.2233-6.1842 14.133-5.8372 0.90342 0.064838 1.7823 0.2173 2.6437 0.41531 16.804-92.03-0.81238-181.89-27.729-215.44z" fill="#04A53C"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 4.0 KiB |
1
assets/images/rt_fresh.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg viewBox="0 0 560 560" xmlns="http://www.w3.org/2000/svg"><path d="m478.29 296.98c-3.99-63.966-36.52-111.82-85.468-138.58 0.278 1.56-1.109 3.508-2.688 2.818-32.016-14.006-86.328 31.32-124.28 7.584 0.285 8.519-1.378 50.072-59.914 52.483-1.382 0.056-2.142-1.355-1.268-2.354 7.828-8.929 15.732-31.535 4.367-43.586-24.338 21.81-38.472 30.017-85.138 19.186-29.878 31.241-46.809 74-43.485 127.26 6.78 108.74 108.63 170.89 211.19 164.49 102.56-6.395 193.47-80.572 186.68-189.31" fill="#FA320A"/><path d="M291.375 132.293c21.075-5.023 81.693-.49 101.114 25.274 1.166 1.545-.475 4.468-2.355 3.648-32.016-14.006-86.328 31.32-124.282 7.584.285 8.519-1.378 50.072-59.914 52.483-1.382.056-2.142-1.355-1.268-2.354 7.828-8.929 15.73-31.535 4.367-43.586-26.512 23.758-40.884 31.392-98.426 15.838-1.883-.508-1.241-3.535.762-4.298 10.876-4.157 35.515-22.361 58.824-30.385 4.438-1.526 8.862-2.71 13.18-3.4-25.665-2.293-37.235-5.862-53.559-3.4-1.789.27-3.004-1.813-1.895-3.241 21.995-28.332 62.513-36.888 87.512-21.837-15.41-19.094-27.48-34.321-27.48-34.321l28.601-16.246s11.817 26.4 20.414 45.614c21.275-31.435 60.86-34.336 77.585-12.033.992 1.326-.045 3.21-1.702 3.171-13.612-.331-21.107 12.05-21.675 21.466l.197.023" fill="#00912D"/></svg>
|
||||||
|
After Width: | Height: | Size: 1.2 KiB |
1
assets/images/rt_rotten.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg viewBox="0 0 560 560" xmlns="http://www.w3.org/2000/svg"><path d="M445.185 444.684c-79.369 4.167-95.587-86.652-126.726-86.006-13.268.279-23.726 14.151-19.133 30.32 2.525 8.888 9.53 21.923 13.944 30.011 15.57 28.544-7.447 60.845-34.383 63.577-44.76 4.54-63.433-21.426-62.278-48.007 1.3-29.84 26.6-60.331.65-73.305-27.194-13.597-49.301 39.572-75.325 51.439-23.553 10.741-56.248 2.413-67.872-23.741-8.164-18.379-6.68-53.768 29.67-67.27 22.706-8.433 73.305 11.029 75.9-13.623 2.992-28.416-53.155-30.812-70.06-37.626-29.912-12.055-47.567-37.85-33.734-65.522 10.378-20.757 40.915-29.203 64.223-20.11 27.922 10.892 32.404 39.853 46.71 51.897 12.324 10.38 29.19 11.68 40.22 4.543 8.135-5.265 10.843-16.828 7.774-27.39-4.07-14.023-14.875-22.773-25.415-31.346-18.758-15.249-45.24-28.36-29.222-69.983 13.13-34.11 51.642-35.34 51.642-35.34 15.3-1.72 29.002 2.9 40.167 12.875 14.927 13.335 17.834 31.16 15.336 50.176-2.283 17.358-8.426 32.56-11.63 49.759-3.717 19.966 6.954 40.086 27.249 40.869 26.694 1.031 34.698-19.486 37.964-32.492 4.782-19.028 11.058-36.694 28.718-47.82 25.346-15.97 60.552-12.47 76.886 18.222 12.92 24.284 8.772 57.715-11.047 75.97-8.892 8.188-19.584 11.075-31.148 11.156-16.585.117-33.162-.29-48.556 7.471-10.48 5.281-15.047 13.888-15.045 25.423 0 11.242 5.853 18.585 15.336 23.363 17.86 9.003 37.577 10.843 56.871 14.222 27.98 4.9 52.581 14.755 68.375 40.72.142.228.28.458.415.69 18.139 30.741-.831 75.005-36.476 76.878" fill="#0AC855"/></svg>
|
||||||
|
After Width: | Height: | Size: 1.4 KiB |
1
assets/images/tmdb_logo.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 190.24 81.52"><defs><linearGradient id="a" y1="40.76" x2="190.24" y2="40.76" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#90cea1"/><stop offset=".56" stop-color="#3cbec9"/><stop offset="1" stop-color="#00b3e5"/></linearGradient></defs><path d="M105.67 36.06h66.9a17.67 17.67 0 0017.67-17.66A17.67 17.67 0 00172.57.73h-66.9A17.67 17.67 0 0088 18.4a17.67 17.67 0 0017.67 17.66zm-88 45h76.9a17.67 17.67 0 0017.67-17.66 17.67 17.67 0 00-17.67-17.67h-76.9A17.67 17.67 0 000 63.4a17.67 17.67 0 0017.67 17.66zm-7.26-45.64h7.8V6.92h10.1V0h-28v6.9h10.1zm28.1 0h7.8V8.25h.1l9 27.15h6l9.3-27.15h.1V35.4h7.8V0H66.76l-8.2 23.1h-.1L50.31 0h-11.8zm113.92 20.25a15.07 15.07 0 00-4.52-5.52 18.57 18.57 0 00-6.68-3.08 33.54 33.54 0 00-8.07-1h-11.7v35.4h12.75a24.58 24.58 0 007.55-1.15 19.34 19.34 0 006.35-3.32 16.27 16.27 0 004.37-5.5 16.91 16.91 0 001.63-7.58 18.5 18.5 0 00-1.68-8.25zM145 68.6a8.8 8.8 0 01-2.64 3.4 10.7 10.7 0 01-4 1.82 21.57 21.57 0 01-5 .55h-4.05v-21h4.6a17 17 0 014.67.63 11.66 11.66 0 013.88 1.87A9.14 9.14 0 01145 59a9.87 9.87 0 011 4.52 11.89 11.89 0 01-1 5.08zm44.63-.13a8 8 0 00-1.58-2.62 8.38 8.38 0 00-2.42-1.85 10.31 10.31 0 00-3.17-1v-.1a9.22 9.22 0 004.42-2.82 7.43 7.43 0 001.68-5 8.42 8.42 0 00-1.15-4.65 8.09 8.09 0 00-3-2.72 12.56 12.56 0 00-4.18-1.3 32.84 32.84 0 00-4.62-.33h-13.2v35.4h14.5a22.41 22.41 0 004.72-.5 13.53 13.53 0 004.28-1.65 9.42 9.42 0 003.1-3 8.52 8.52 0 001.2-4.68 9.39 9.39 0 00-.55-3.18zm-19.42-15.75h5.3a10 10 0 011.85.18 6.18 6.18 0 011.7.57 3.39 3.39 0 011.22 1.13 3.22 3.22 0 01.48 1.82 3.63 3.63 0 01-.43 1.8 3.4 3.4 0 01-1.12 1.2 4.92 4.92 0 01-1.58.65 7.51 7.51 0 01-1.77.2h-5.65zm11.72 20a3.9 3.9 0 01-1.22 1.3 4.64 4.64 0 01-1.68.7 8.18 8.18 0 01-1.82.2h-7v-8h5.9a15.35 15.35 0 012 .15 8.47 8.47 0 012.05.55 4 4 0 011.57 1.18 3.11 3.11 0 01.63 2 3.71 3.71 0 01-.43 1.92z" fill="url(#a)"/></svg>
|
||||||
|
After Width: | Height: | Size: 1.9 KiB |
6
bun.lock
@@ -108,7 +108,7 @@
|
|||||||
"@types/react": "~19.2.10",
|
"@types/react": "~19.2.10",
|
||||||
"@types/react-test-renderer": "19.1.0",
|
"@types/react-test-renderer": "19.1.0",
|
||||||
"cross-env": "10.1.0",
|
"cross-env": "10.1.0",
|
||||||
"expo-doctor": "1.19.7",
|
"expo-doctor": "1.19.9",
|
||||||
"husky": "9.1.7",
|
"husky": "9.1.7",
|
||||||
"lint-staged": "17.0.5",
|
"lint-staged": "17.0.5",
|
||||||
"react-test-renderer": "19.2.3",
|
"react-test-renderer": "19.2.3",
|
||||||
@@ -969,7 +969,7 @@
|
|||||||
|
|
||||||
"expo-device": ["expo-device@56.0.4", "", { "dependencies": { "ua-parser-js": "^0.7.33" }, "peerDependencies": { "expo": "*" } }, "sha512-ucVcGPkvBrl2QHuy7XcYex2Y6BETvJ6TREutZrwLGUDnlvbpKS8KfQoNZOpvkyo5Nmm9RrasYQ0CrXmBHho2mg=="],
|
"expo-device": ["expo-device@56.0.4", "", { "dependencies": { "ua-parser-js": "^0.7.33" }, "peerDependencies": { "expo": "*" } }, "sha512-ucVcGPkvBrl2QHuy7XcYex2Y6BETvJ6TREutZrwLGUDnlvbpKS8KfQoNZOpvkyo5Nmm9RrasYQ0CrXmBHho2mg=="],
|
||||||
|
|
||||||
"expo-doctor": ["expo-doctor@1.19.7", "", { "bin": { "expo-doctor": "bin/expo-doctor.js" } }, "sha512-pzn7QtCifRlvGIQz8k7kszeYFaI5Yn81WTHlk/20tmd3jwnXxPjlcdyhFSkuRtO2v4a9gA/6aUWVBOosfffj9w=="],
|
"expo-doctor": ["expo-doctor@1.19.9", "", { "bin": { "expo-doctor": "bin/expo-doctor.js" } }, "sha512-SJW5HxEDQ9f5QdFvrUwfbdJZ4HI0EAAxsrJqrHBFjKBum+uSOcEIZPLRibwNQLTHOwTO1TWNLiMlF9sDUBWeYw=="],
|
||||||
|
|
||||||
"expo-file-system": ["expo-file-system@56.0.7", "", { "peerDependencies": { "expo": "*", "react-native": "*" } }, "sha512-dcKzo8ShPloM7jgfnMcJStgQebhP8owVjCkNI/aX6NMFV1CYB8bxKGMdnzJ3mXk5nfaiW+F/lSKr2UIJ02WAUA=="],
|
"expo-file-system": ["expo-file-system@56.0.7", "", { "peerDependencies": { "expo": "*", "react-native": "*" } }, "sha512-dcKzo8ShPloM7jgfnMcJStgQebhP8owVjCkNI/aX6NMFV1CYB8bxKGMdnzJ3mXk5nfaiW+F/lSKr2UIJ02WAUA=="],
|
||||||
|
|
||||||
@@ -1599,7 +1599,7 @@
|
|||||||
|
|
||||||
"react-native-text-ticker": ["react-native-text-ticker@1.15.0", "", {}, "sha512-d/uK+PIOhsYMy1r8h825iq/nADiHsabz3WMbRJSnkpQYn+K9aykUAXRRhu8ZbTAzk4CgnUWajJEFxS5ZDygsdg=="],
|
"react-native-text-ticker": ["react-native-text-ticker@1.15.0", "", {}, "sha512-d/uK+PIOhsYMy1r8h825iq/nADiHsabz3WMbRJSnkpQYn+K9aykUAXRRhu8ZbTAzk4CgnUWajJEFxS5ZDygsdg=="],
|
||||||
|
|
||||||
"react-native-track-player": ["react-native-track-player@github:lovegaoshi/react-native-track-player#33a3ecd", { "peerDependencies": { "react": "*", "react-native": "*", "react-native-windows": "*", "shaka-player": "^4.7.9" }, "optionalPeers": ["react-native-windows", "shaka-player"] }, "lovegaoshi-react-native-track-player-33a3ecd"],
|
"react-native-track-player": ["react-native-track-player@github:lovegaoshi/react-native-track-player#33a3ecd", { "peerDependencies": { "react": "*", "react-native": "*", "react-native-windows": "*", "shaka-player": "^4.7.9" }, "optionalPeers": ["react-native-windows", "shaka-player"] }, "lovegaoshi-react-native-track-player-33a3ecd", "sha512-vfkld2jUj7EPkAjIc/Vbx4Q4MtOOLmYtCYCE2dWJsyLnPqgj1f0xVzBxbeVP7dfT+eSh4KIXfdxESXaHgrXIlw=="],
|
||||||
|
|
||||||
"react-native-udp": ["react-native-udp@4.1.7", "", { "dependencies": { "buffer": "^5.6.0", "events": "^3.1.0" } }, "sha512-NUE3zewu61NCdSsLlj+l0ad6qojcVEZPT4hVG/x6DU9U4iCzwtfZSASh9vm7teAcVzLkdD+cO3411LHshAi/wA=="],
|
"react-native-udp": ["react-native-udp@4.1.7", "", { "dependencies": { "buffer": "^5.6.0", "events": "^3.1.0" } }, "sha512-NUE3zewu61NCdSsLlj+l0ad6qojcVEZPT4hVG/x6DU9U4iCzwtfZSASh9vm7teAcVzLkdD+cO3411LHshAi/wA=="],
|
||||||
|
|
||||||
|
|||||||
@@ -89,14 +89,14 @@ export const IntroSheet = forwardRef<IntroSheetRef>((_, ref) => {
|
|||||||
</Text>
|
</Text>
|
||||||
<View className='flex flex-row items-center mt-4'>
|
<View className='flex flex-row items-center mt-4'>
|
||||||
<Image
|
<Image
|
||||||
source={require("@/assets/icons/jellyseerr-logo.svg")}
|
source={require("@/assets/icons/seerr-logo.svg")}
|
||||||
style={{
|
style={{
|
||||||
width: 50,
|
width: 50,
|
||||||
height: 50,
|
height: 50,
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
<View className='shrink ml-2'>
|
<View className='shrink ml-2'>
|
||||||
<Text className='font-bold mb-1'>Jellyseerr</Text>
|
<Text className='font-bold mb-1'>Seerr</Text>
|
||||||
<Text className='shrink text-xs'>
|
<Text className='shrink text-xs'>
|
||||||
{t("home.intro.jellyseerr_feature_description")}
|
{t("home.intro.jellyseerr_feature_description")}
|
||||||
</Text>
|
</Text>
|
||||||
|
|||||||
@@ -1,13 +1,7 @@
|
|||||||
import { Ionicons } from "@expo/vector-icons";
|
import { Ionicons } from "@expo/vector-icons";
|
||||||
import { BottomSheetScrollView } from "@gorhom/bottom-sheet";
|
import { BottomSheetScrollView } from "@gorhom/bottom-sheet";
|
||||||
import React, { useEffect, useState } from "react";
|
import React, { useEffect } from "react";
|
||||||
import {
|
import { Platform, StyleSheet, TouchableOpacity, View } from "react-native";
|
||||||
type LayoutChangeEvent,
|
|
||||||
Platform,
|
|
||||||
StyleSheet,
|
|
||||||
TouchableOpacity,
|
|
||||||
View,
|
|
||||||
} from "react-native";
|
|
||||||
import { useSafeAreaInsets } from "react-native-safe-area-context";
|
import { useSafeAreaInsets } from "react-native-safe-area-context";
|
||||||
import { Text } from "@/components/common/Text";
|
import { Text } from "@/components/common/Text";
|
||||||
import { useGlobalModal } from "@/providers/GlobalModalProvider";
|
import { useGlobalModal } from "@/providers/GlobalModalProvider";
|
||||||
@@ -217,24 +211,6 @@ const PlatformDropdownComponent = ({
|
|||||||
}: PlatformDropdownProps) => {
|
}: PlatformDropdownProps) => {
|
||||||
const { showModal, hideModal, isVisible } = useGlobalModal();
|
const { showModal, hideModal, isVisible } = useGlobalModal();
|
||||||
|
|
||||||
// @expo/ui's <Host> (SDK 55) fills its available space by default, and
|
|
||||||
// `matchContents` doesn't help here: it reports the native Menu's size via
|
|
||||||
// setStyleSize and overrides any explicit size. Instead we measure the
|
|
||||||
// trigger's intrinsic size in plain RN (off-layout) and pin it on the Host.
|
|
||||||
const [triggerSize, setTriggerSize] = useState<{
|
|
||||||
width: number;
|
|
||||||
height: number;
|
|
||||||
} | null>(null);
|
|
||||||
|
|
||||||
const handleMeasureTrigger = (e: LayoutChangeEvent) => {
|
|
||||||
const { width, height } = e.nativeEvent.layout;
|
|
||||||
setTriggerSize((prev) =>
|
|
||||||
prev && prev.width === width && prev.height === height
|
|
||||||
? prev
|
|
||||||
: { width, height },
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Handle controlled open state for Android
|
// Handle controlled open state for Android
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (Platform.OS === "android" && controlledOpen === true) {
|
if (Platform.OS === "android" && controlledOpen === true) {
|
||||||
@@ -265,25 +241,11 @@ const PlatformDropdownComponent = ({
|
|||||||
}, [isVisible, controlledOpen, controlledOnOpenChange]);
|
}, [isVisible, controlledOpen, controlledOnOpenChange]);
|
||||||
|
|
||||||
if (Platform.OS === "ios" && !Platform.isTV) {
|
if (Platform.OS === "ios" && !Platform.isTV) {
|
||||||
// Pin the wrapper to the measured trigger size. @expo/ui's <Host> (SDK 55)
|
// @expo/ui's <Host> can't size to content, so an in-flow invisible copy of
|
||||||
// fills its parent and reports its own size via setStyleSize, so it can't
|
// the trigger sizes the wrapper while the Host overlays the real Menu.
|
||||||
// size itself to content. If the wrapper has no size, the Host's `flex: 1`
|
|
||||||
// height depends on the parent while the parent depends on the Host — a
|
|
||||||
// circular dependency that collapses to 0 for any selector nested more than
|
|
||||||
// one level deep (so only the first, shallowest dropdown stays visible).
|
|
||||||
// Giving the wrapper the measured size breaks the cycle; the Host then
|
|
||||||
// fills a concrete box.
|
|
||||||
return (
|
return (
|
||||||
<View style={triggerSize ?? { opacity: 0 }}>
|
<View>
|
||||||
{/* Hidden measurer: lays the trigger out off-flow to capture its
|
<View pointerEvents='none' aria-hidden style={{ opacity: 0 }}>
|
||||||
intrinsic size. Absolutely positioned WITHOUT right/bottom so it
|
|
||||||
sizes to the trigger's content rather than to its parent. */}
|
|
||||||
<View
|
|
||||||
style={{ position: "absolute", top: 0, left: 0, opacity: 0 }}
|
|
||||||
pointerEvents='none'
|
|
||||||
aria-hidden
|
|
||||||
onLayout={handleMeasureTrigger}
|
|
||||||
>
|
|
||||||
{trigger}
|
{trigger}
|
||||||
</View>
|
</View>
|
||||||
<Host style={[StyleSheet.absoluteFill, expoUIConfig?.hostStyle as any]}>
|
<Host style={[StyleSheet.absoluteFill, expoUIConfig?.hostStyle as any]}>
|
||||||
|
|||||||
@@ -40,8 +40,8 @@ export const Ratings: React.FC<Props> = ({ item, ...props }) => {
|
|||||||
<Image
|
<Image
|
||||||
source={
|
source={
|
||||||
item.CriticRating < 60
|
item.CriticRating < 60
|
||||||
? require("@/assets/images/rotten-tomatoes.png")
|
? require("@/assets/images/rt_rotten.svg")
|
||||||
: require("@/assets/images/not-rotten-tomatoes.svg")
|
: require("@/assets/images/rt_fresh.svg")
|
||||||
}
|
}
|
||||||
style={{
|
style={{
|
||||||
width: 14,
|
width: 14,
|
||||||
@@ -89,8 +89,8 @@ export const JellyserrRatings: React.FC<{
|
|||||||
className='mr-1'
|
className='mr-1'
|
||||||
source={
|
source={
|
||||||
data?.criticsRating === "Rotten"
|
data?.criticsRating === "Rotten"
|
||||||
? require("@/utils/jellyseerr/src/assets/rt_rotten.svg")
|
? require("@/assets/images/rt_rotten.svg")
|
||||||
: require("@/utils/jellyseerr/src/assets/rt_fresh.svg")
|
: require("@/assets/images/rt_fresh.svg")
|
||||||
}
|
}
|
||||||
style={{
|
style={{
|
||||||
width: 14,
|
width: 14,
|
||||||
@@ -109,8 +109,8 @@ export const JellyserrRatings: React.FC<{
|
|||||||
className='mr-1'
|
className='mr-1'
|
||||||
source={
|
source={
|
||||||
data?.audienceRating === "Spilled"
|
data?.audienceRating === "Spilled"
|
||||||
? require("@/utils/jellyseerr/src/assets/rt_aud_rotten.svg")
|
? require("@/assets/images/rt_aud_rotten.svg")
|
||||||
: require("@/utils/jellyseerr/src/assets/rt_aud_fresh.svg")
|
: require("@/assets/images/rt_aud_fresh.svg")
|
||||||
}
|
}
|
||||||
style={{
|
style={{
|
||||||
width: 14,
|
width: 14,
|
||||||
@@ -127,7 +127,7 @@ export const JellyserrRatings: React.FC<{
|
|||||||
iconLeft={
|
iconLeft={
|
||||||
<Image
|
<Image
|
||||||
className='mr-1'
|
className='mr-1'
|
||||||
source={require("@/utils/jellyseerr/src/assets/tmdb_logo.svg")}
|
source={require("@/assets/images/tmdb_logo.svg")}
|
||||||
style={{
|
style={{
|
||||||
width: 14,
|
width: 14,
|
||||||
height: 14,
|
height: 14,
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ export const TrackSheet: React.FC<Props> = ({
|
|||||||
<Text numberOfLines={1}>
|
<Text numberOfLines={1}>
|
||||||
{selected === -1 && streamType === "Subtitle"
|
{selected === -1 && streamType === "Subtitle"
|
||||||
? t("common.none")
|
? t("common.none")
|
||||||
: selectedSteam?.DisplayTitle || t("common.select", "Select")}
|
: selectedSteam?.DisplayTitle || t("common.select")}
|
||||||
</Text>
|
</Text>
|
||||||
</TouchableOpacity>
|
</TouchableOpacity>
|
||||||
</View>
|
</View>
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import { useTranslation } from "react-i18next";
|
|||||||
import { FlatList, Modal, Pressable, StyleSheet, View } from "react-native";
|
import { FlatList, Modal, Pressable, StyleSheet, View } from "react-native";
|
||||||
import { Text } from "@/components/common/Text";
|
import { Text } from "@/components/common/Text";
|
||||||
import { Colors } from "@/constants/Colors";
|
import { Colors } from "@/constants/Colors";
|
||||||
|
import { useControlsSafeAreaInsets } from "@/hooks/useControlsSafeAreaInsets";
|
||||||
import {
|
import {
|
||||||
type ChapterEntry,
|
type ChapterEntry,
|
||||||
chapterStartsMs,
|
chapterStartsMs,
|
||||||
@@ -38,6 +39,7 @@ function ChapterListComponent({
|
|||||||
onClose,
|
onClose,
|
||||||
}: ChapterListProps) {
|
}: ChapterListProps) {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
const safeArea = useControlsSafeAreaInsets();
|
||||||
const listRef = useRef<FlatList<ChapterEntry>>(null);
|
const listRef = useRef<FlatList<ChapterEntry>>(null);
|
||||||
|
|
||||||
const entries = useMemo(() => sortedChapters(chapters), [chapters]);
|
const entries = useMemo(() => sortedChapters(chapters), [chapters]);
|
||||||
@@ -79,7 +81,17 @@ function ChapterListComponent({
|
|||||||
supportedOrientations={["portrait", "landscape"]}
|
supportedOrientations={["portrait", "landscape"]}
|
||||||
>
|
>
|
||||||
<Pressable onPress={onClose} style={styles.backdrop}>
|
<Pressable onPress={onClose} style={styles.backdrop}>
|
||||||
<Pressable onPress={(e) => e.stopPropagation()} style={styles.sheet}>
|
<Pressable
|
||||||
|
onPress={(e) => e.stopPropagation()}
|
||||||
|
style={[
|
||||||
|
styles.sheet,
|
||||||
|
{
|
||||||
|
marginLeft: safeArea.left,
|
||||||
|
marginRight: safeArea.right,
|
||||||
|
paddingBottom: safeArea.bottom,
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
>
|
||||||
<View style={styles.header}>
|
<View style={styles.header}>
|
||||||
<Text style={styles.title}>{t("chapters.title")}</Text>
|
<Text style={styles.title}>{t("chapters.title")}</Text>
|
||||||
<Pressable
|
<Pressable
|
||||||
@@ -160,14 +172,12 @@ const styles = StyleSheet.create({
|
|||||||
backdrop: {
|
backdrop: {
|
||||||
flex: 1,
|
flex: 1,
|
||||||
justifyContent: "flex-end",
|
justifyContent: "flex-end",
|
||||||
backgroundColor: "rgba(0,0,0,0.6)",
|
|
||||||
},
|
},
|
||||||
sheet: {
|
sheet: {
|
||||||
backgroundColor: Colors.background,
|
backgroundColor: Colors.background,
|
||||||
borderTopLeftRadius: 16,
|
borderTopLeftRadius: 16,
|
||||||
borderTopRightRadius: 16,
|
borderTopRightRadius: 16,
|
||||||
maxHeight: "70%",
|
maxHeight: "70%",
|
||||||
paddingBottom: 24,
|
|
||||||
},
|
},
|
||||||
header: {
|
header: {
|
||||||
flexDirection: "row",
|
flexDirection: "row",
|
||||||
|
|||||||
@@ -133,7 +133,6 @@ const HomeMobile = () => {
|
|||||||
onPress={() => {
|
onPress={() => {
|
||||||
router.push("/(auth)/downloads");
|
router.push("/(auth)/downloads");
|
||||||
}}
|
}}
|
||||||
className='ml-1.5'
|
|
||||||
style={{ marginRight: Platform.OS === "android" ? 16 : 0 }}
|
style={{ marginRight: Platform.OS === "android" ? 16 : 0 }}
|
||||||
>
|
>
|
||||||
<Feather
|
<Feather
|
||||||
|
|||||||
@@ -280,7 +280,7 @@ export const TVPasswordEntryModal: React.FC<TVPasswordEntryModalProps> = ({
|
|||||||
<View style={styles.buttonContainer}>
|
<View style={styles.buttonContainer}>
|
||||||
<TVSubmitButton
|
<TVSubmitButton
|
||||||
onPress={handleSubmit}
|
onPress={handleSubmit}
|
||||||
label={t("login.login")}
|
label={t("login.login_button")}
|
||||||
loading={isLoading}
|
loading={isLoading}
|
||||||
disabled={!password}
|
disabled={!password}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -401,10 +401,6 @@ export const TVJellyseerrSearchResults: React.FC<
|
|||||||
}) => {
|
}) => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
const hasMovies = movieResults && movieResults.length > 0;
|
|
||||||
const hasTv = tvResults && tvResults.length > 0;
|
|
||||||
const hasPersons = personResults && personResults.length > 0;
|
|
||||||
|
|
||||||
if (loading) {
|
if (loading) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -431,22 +427,26 @@ export const TVJellyseerrSearchResults: React.FC<
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<View>
|
<View>
|
||||||
|
{/* No section requests `hasTVPreferredFocus`: the native search field
|
||||||
|
keeps focus while typing, otherwise the first result would re-grab
|
||||||
|
focus on every keystroke as results re-render. The user navigates
|
||||||
|
down to the grid manually. */}
|
||||||
<TVJellyseerrMovieSection
|
<TVJellyseerrMovieSection
|
||||||
title={t("search.request_movies")}
|
title={t("search.request_movies")}
|
||||||
items={movieResults}
|
items={movieResults}
|
||||||
isFirstSection={hasMovies}
|
isFirstSection={false}
|
||||||
onItemPress={onMoviePress}
|
onItemPress={onMoviePress}
|
||||||
/>
|
/>
|
||||||
<TVJellyseerrTvSection
|
<TVJellyseerrTvSection
|
||||||
title={t("search.request_series")}
|
title={t("search.request_series")}
|
||||||
items={tvResults}
|
items={tvResults}
|
||||||
isFirstSection={!hasMovies && hasTv}
|
isFirstSection={false}
|
||||||
onItemPress={onTvPress}
|
onItemPress={onTvPress}
|
||||||
/>
|
/>
|
||||||
<TVJellyseerrPersonSection
|
<TVJellyseerrPersonSection
|
||||||
title={t("search.actors")}
|
title={t("search.actors")}
|
||||||
items={personResults}
|
items={personResults}
|
||||||
isFirstSection={!hasMovies && !hasTv && hasPersons}
|
isFirstSection={false}
|
||||||
onItemPress={onPersonPress}
|
onItemPress={onPersonPress}
|
||||||
/>
|
/>
|
||||||
</View>
|
</View>
|
||||||
|
|||||||
@@ -235,10 +235,13 @@ export const TVSearchPage: React.FC<TVSearchPageProps> = ({
|
|||||||
module). It renders the native search bar + grid keyboard and
|
module). It renders the native search bar + grid keyboard and
|
||||||
forwards typed text into the existing query pipeline via setSearch;
|
forwards typed text into the existing query pipeline via setSearch;
|
||||||
our own results grid renders below. */}
|
our own results grid renders below. */}
|
||||||
|
{/* No horizontal margin here: the native tvOS search bar centers itself
|
||||||
|
and renders a trailing "Hold to Dictate in <Language>" hint. Extra
|
||||||
|
margins squeeze the bar's width and clip that trailing hint, so let
|
||||||
|
the native view span the full width and own its own insets. */}
|
||||||
<View
|
<View
|
||||||
style={{
|
style={{
|
||||||
marginBottom: 24,
|
marginBottom: 24,
|
||||||
marginHorizontal: HORIZONTAL_PADDING,
|
|
||||||
height: SEARCH_AREA_HEIGHT,
|
height: SEARCH_AREA_HEIGHT,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
@@ -280,13 +283,17 @@ export const TVSearchPage: React.FC<TVSearchPageProps> = ({
|
|||||||
{/* Library Search Results */}
|
{/* Library Search Results */}
|
||||||
{isLibraryMode && !loading && (
|
{isLibraryMode && !loading && (
|
||||||
<View style={{ gap: SECTION_GAP }}>
|
<View style={{ gap: SECTION_GAP }}>
|
||||||
{sections.map((section, index) => (
|
{sections.map((section) => (
|
||||||
<TVSearchSection
|
<TVSearchSection
|
||||||
key={section.key}
|
key={section.key}
|
||||||
title={section.title}
|
title={section.title}
|
||||||
items={section.items!}
|
items={section.items!}
|
||||||
orientation={section.orientation || "vertical"}
|
orientation={section.orientation || "vertical"}
|
||||||
isFirstSection={index === 0}
|
// Never auto-focus a result. The native search field owns focus
|
||||||
|
// while typing; `hasTVPreferredFocus` here would re-grab focus on
|
||||||
|
// every keystroke as results re-render. User navigates down to the
|
||||||
|
// grid manually.
|
||||||
|
isFirstSection={false}
|
||||||
onItemPress={onItemPress}
|
onItemPress={onItemPress}
|
||||||
onItemLongPress={onItemLongPress}
|
onItemLongPress={onItemLongPress}
|
||||||
imageUrlGetter={
|
imageUrlGetter={
|
||||||
|
|||||||
@@ -297,12 +297,12 @@ export const TVSearchSection: React.FC<TVSearchSectionProps> = ({
|
|||||||
removeClippedSubviews={false}
|
removeClippedSubviews={false}
|
||||||
getItemLayout={getItemLayout}
|
getItemLayout={getItemLayout}
|
||||||
style={{ overflow: "visible" }}
|
style={{ overflow: "visible" }}
|
||||||
contentInset={{
|
// Edge padding via contentContainerStyle, NOT contentInset+contentOffset.
|
||||||
left: edgePadding,
|
// contentOffset only applies on initial mount; since this FlatList is
|
||||||
right: edgePadding,
|
// reused across searches (stable key), a second search left the inset
|
||||||
}}
|
// without the offset and the grid snapped flush to the left edge.
|
||||||
contentOffset={{ x: -edgePadding, y: 0 }}
|
|
||||||
contentContainerStyle={{
|
contentContainerStyle={{
|
||||||
|
paddingHorizontal: edgePadding,
|
||||||
paddingVertical: SCALE_PADDING,
|
paddingVertical: SCALE_PADDING,
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -31,8 +31,12 @@ export const SeasonEpisodesCarousel: React.FC<Props> = ({
|
|||||||
}) => {
|
}) => {
|
||||||
const [api] = useAtom(apiAtom);
|
const [api] = useAtom(apiAtom);
|
||||||
const [user] = useAtom(userAtom);
|
const [user] = useAtom(userAtom);
|
||||||
const isOffline = useOfflineMode();
|
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
const isOffline = useOfflineMode();
|
||||||
|
// Read the live (cached) downloads DB inside the query rather than the
|
||||||
|
// provider's downloadedItems snapshot, so refetches after
|
||||||
|
// updateDownloadedItem() reflect the latest state instead of a stale
|
||||||
|
// refreshKey-gated snapshot. getAllDownloadedItems() is cached, so this stays cheap.
|
||||||
const { getDownloadedItems } = useDownload();
|
const { getDownloadedItems } = useDownload();
|
||||||
|
|
||||||
const scrollRef = useRef<HorizontalScrollRef>(null);
|
const scrollRef = useRef<HorizontalScrollRef>(null);
|
||||||
|
|||||||
@@ -8,10 +8,10 @@ import { useTranslation } from "react-i18next";
|
|||||||
import { Pressable, View } from "react-native";
|
import { Pressable, View } from "react-native";
|
||||||
import { Slider } from "react-native-awesome-slider";
|
import { Slider } from "react-native-awesome-slider";
|
||||||
import { type SharedValue } from "react-native-reanimated";
|
import { type SharedValue } from "react-native-reanimated";
|
||||||
import { useSafeAreaInsets } from "react-native-safe-area-context";
|
|
||||||
import { ChapterList } from "@/components/chapters/ChapterList";
|
import { ChapterList } from "@/components/chapters/ChapterList";
|
||||||
import { ChapterTicks } from "@/components/chapters/ChapterTicks";
|
import { ChapterTicks } from "@/components/chapters/ChapterTicks";
|
||||||
import { Text } from "@/components/common/Text";
|
import { Text } from "@/components/common/Text";
|
||||||
|
import { useControlsSafeAreaInsets } from "@/hooks/useControlsSafeAreaInsets";
|
||||||
import { useSettings } from "@/utils/atoms/settings";
|
import { useSettings } from "@/utils/atoms/settings";
|
||||||
import { chapterMarkers, chapterNameAt } from "@/utils/chapters";
|
import { chapterMarkers, chapterNameAt } from "@/utils/chapters";
|
||||||
import NextEpisodeCountDownButton from "./NextEpisodeCountDownButton";
|
import NextEpisodeCountDownButton from "./NextEpisodeCountDownButton";
|
||||||
@@ -75,9 +75,6 @@ interface BottomControlsProps {
|
|||||||
minutes: number;
|
minutes: number;
|
||||||
seconds: number;
|
seconds: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Chapter props
|
|
||||||
chapterPositions?: number[];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const BottomControls: FC<BottomControlsProps> = ({
|
export const BottomControls: FC<BottomControlsProps> = ({
|
||||||
@@ -111,11 +108,10 @@ export const BottomControls: FC<BottomControlsProps> = ({
|
|||||||
trickPlayUrl,
|
trickPlayUrl,
|
||||||
trickplayInfo,
|
trickplayInfo,
|
||||||
time,
|
time,
|
||||||
chapterPositions = [],
|
|
||||||
}) => {
|
}) => {
|
||||||
const { settings } = useSettings();
|
const { settings } = useSettings();
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const insets = useSafeAreaInsets();
|
const insets = useControlsSafeAreaInsets();
|
||||||
const [chapterListVisible, setChapterListVisible] = useState(false);
|
const [chapterListVisible, setChapterListVisible] = useState(false);
|
||||||
|
|
||||||
// Only expose chapter UI when there are at least two real markers.
|
// Only expose chapter UI when there are at least two real markers.
|
||||||
@@ -146,13 +142,9 @@ export const BottomControls: FC<BottomControlsProps> = ({
|
|||||||
style={[
|
style={[
|
||||||
{
|
{
|
||||||
position: "absolute",
|
position: "absolute",
|
||||||
right:
|
right: insets.right,
|
||||||
(settings?.safeAreaInControlsEnabled ?? true) ? insets.right : 0,
|
left: insets.left,
|
||||||
left: (settings?.safeAreaInControlsEnabled ?? true) ? insets.left : 0,
|
bottom: Math.max(insets.bottom - 17, 0),
|
||||||
bottom:
|
|
||||||
(settings?.safeAreaInControlsEnabled ?? true)
|
|
||||||
? Math.max(insets.bottom - 17, 0)
|
|
||||||
: 0,
|
|
||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
className={"flex flex-col px-2"}
|
className={"flex flex-col px-2"}
|
||||||
@@ -188,17 +180,6 @@ export const BottomControls: FC<BottomControlsProps> = ({
|
|||||||
) : null}
|
) : null}
|
||||||
</View>
|
</View>
|
||||||
<View className='flex flex-row items-center space-x-2 shrink-0'>
|
<View className='flex flex-row items-center space-x-2 shrink-0'>
|
||||||
{hasChapters && (
|
|
||||||
<Pressable
|
|
||||||
onPress={() => setChapterListVisible(true)}
|
|
||||||
hitSlop={10}
|
|
||||||
className='justify-center mr-4'
|
|
||||||
accessibilityRole='button'
|
|
||||||
accessibilityLabel={t("chapters.open")}
|
|
||||||
>
|
|
||||||
<Ionicons name='bookmarks' size={24} color='white' />
|
|
||||||
</Pressable>
|
|
||||||
)}
|
|
||||||
<SkipButton
|
<SkipButton
|
||||||
showButton={showSkipButton}
|
showButton={showSkipButton}
|
||||||
onPress={skipIntro}
|
onPress={skipIntro}
|
||||||
@@ -230,6 +211,17 @@ export const BottomControls: FC<BottomControlsProps> = ({
|
|||||||
onPress={handleNextEpisodeManual}
|
onPress={handleNextEpisodeManual}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
{hasChapters && (
|
||||||
|
<Pressable
|
||||||
|
onPress={() => setChapterListVisible(true)}
|
||||||
|
hitSlop={10}
|
||||||
|
className='justify-center ml-4'
|
||||||
|
accessibilityRole='button'
|
||||||
|
accessibilityLabel={t("chapters.open")}
|
||||||
|
>
|
||||||
|
<Ionicons name='bookmarks' size={24} color='white' />
|
||||||
|
</Pressable>
|
||||||
|
)}
|
||||||
</View>
|
</View>
|
||||||
</View>
|
</View>
|
||||||
<View
|
<View
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import { Ionicons } from "@expo/vector-icons";
|
import { Ionicons } from "@expo/vector-icons";
|
||||||
import type { FC } from "react";
|
import type { FC } from "react";
|
||||||
import { Platform, TouchableOpacity, View } from "react-native";
|
import { Platform, TouchableOpacity, View } from "react-native";
|
||||||
import { useSafeAreaInsets } from "react-native-safe-area-context";
|
|
||||||
import { Text } from "@/components/common/Text";
|
import { Text } from "@/components/common/Text";
|
||||||
import { Loader } from "@/components/Loader";
|
import { Loader } from "@/components/Loader";
|
||||||
|
import { useControlsSafeAreaInsets } from "@/hooks/useControlsSafeAreaInsets";
|
||||||
import { useSettings } from "@/utils/atoms/settings";
|
import { useSettings } from "@/utils/atoms/settings";
|
||||||
import AudioSlider from "./AudioSlider";
|
import AudioSlider from "./AudioSlider";
|
||||||
import BrightnessSlider from "./BrightnessSlider";
|
import BrightnessSlider from "./BrightnessSlider";
|
||||||
@@ -42,15 +42,15 @@ export const CenterControls: FC<CenterControlsProps> = ({
|
|||||||
goToNextChapter,
|
goToNextChapter,
|
||||||
}) => {
|
}) => {
|
||||||
const { settings } = useSettings();
|
const { settings } = useSettings();
|
||||||
const insets = useSafeAreaInsets();
|
const insets = useControlsSafeAreaInsets();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<View
|
<View
|
||||||
style={{
|
style={{
|
||||||
position: "absolute",
|
position: "absolute",
|
||||||
top: "50%",
|
top: "50%",
|
||||||
left: (settings?.safeAreaInControlsEnabled ?? true) ? insets.left : 0,
|
left: insets.left,
|
||||||
right: (settings?.safeAreaInControlsEnabled ?? true) ? insets.right : 0,
|
right: insets.right,
|
||||||
flexDirection: "row",
|
flexDirection: "row",
|
||||||
justifyContent: "space-between",
|
justifyContent: "space-between",
|
||||||
alignItems: "center",
|
alignItems: "center",
|
||||||
|
|||||||
@@ -219,7 +219,6 @@ export const Controls: FC<Props> = ({
|
|||||||
hasNextChapter,
|
hasNextChapter,
|
||||||
goToPreviousChapter,
|
goToPreviousChapter,
|
||||||
goToNextChapter,
|
goToNextChapter,
|
||||||
chapterPositions,
|
|
||||||
} = useChapterNavigation({
|
} = useChapterNavigation({
|
||||||
chapters: item.Chapters,
|
chapters: item.Chapters,
|
||||||
progress,
|
progress,
|
||||||
@@ -366,7 +365,9 @@ export const Controls: FC<Props> = ({
|
|||||||
{ applyLanguagePreferences: true },
|
{ applyLanguagePreferences: true },
|
||||||
);
|
);
|
||||||
|
|
||||||
const queryParams = new URLSearchParams({
|
// Use setParams instead of replace to avoid unmounting/remounting the player,
|
||||||
|
// which would create a new MPV native view and crash with "mp_initialize already initialized".
|
||||||
|
router.setParams({
|
||||||
...(offline && { offline: "true" }),
|
...(offline && { offline: "true" }),
|
||||||
itemId: item.Id ?? "",
|
itemId: item.Id ?? "",
|
||||||
audioIndex: defaultAudioIndex?.toString() ?? "",
|
audioIndex: defaultAudioIndex?.toString() ?? "",
|
||||||
@@ -375,11 +376,17 @@ export const Controls: FC<Props> = ({
|
|||||||
bitrateValue: bitrateValue?.toString(),
|
bitrateValue: bitrateValue?.toString(),
|
||||||
playbackPosition:
|
playbackPosition:
|
||||||
item.UserData?.PlaybackPositionTicks?.toString() ?? "",
|
item.UserData?.PlaybackPositionTicks?.toString() ?? "",
|
||||||
}).toString();
|
});
|
||||||
|
|
||||||
router.replace(`player/direct-player?${queryParams}` as any);
|
|
||||||
},
|
},
|
||||||
[settings, subtitleIndex, audioIndex, mediaSource, bitrateValue, router],
|
[
|
||||||
|
settings,
|
||||||
|
subtitleIndex,
|
||||||
|
audioIndex,
|
||||||
|
mediaSource,
|
||||||
|
bitrateValue,
|
||||||
|
router,
|
||||||
|
offline,
|
||||||
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
const goToPreviousItem = useCallback(() => {
|
const goToPreviousItem = useCallback(() => {
|
||||||
@@ -585,7 +592,6 @@ export const Controls: FC<Props> = ({
|
|||||||
trickPlayUrl={trickPlayUrl}
|
trickPlayUrl={trickPlayUrl}
|
||||||
trickplayInfo={trickplayInfo}
|
trickplayInfo={trickplayInfo}
|
||||||
time={isSliding || showRemoteBubble ? time : remoteTime}
|
time={isSliding || showRemoteBubble ? time : remoteTime}
|
||||||
chapterPositions={chapterPositions}
|
|
||||||
/>
|
/>
|
||||||
</Animated.View>
|
</Animated.View>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -1254,7 +1254,7 @@ export const Controls: FC<Props> = ({
|
|||||||
<Text
|
<Text
|
||||||
style={[styles.endsAtText, { fontSize: typography.callout }]}
|
style={[styles.endsAtText, { fontSize: typography.callout }]}
|
||||||
>
|
>
|
||||||
{t("player.ends_at")} {getFinishTime()}
|
{t("player.ends_at", { time: getFinishTime() })}
|
||||||
</Text>
|
</Text>
|
||||||
</View>
|
</View>
|
||||||
)}
|
)}
|
||||||
@@ -1448,7 +1448,7 @@ export const Controls: FC<Props> = ({
|
|||||||
<Text
|
<Text
|
||||||
style={[styles.endsAtText, { fontSize: typography.callout }]}
|
style={[styles.endsAtText, { fontSize: typography.callout }]}
|
||||||
>
|
>
|
||||||
{t("player.ends_at")} {getFinishTime()}
|
{t("player.ends_at", { time: getFinishTime() })}
|
||||||
</Text>
|
</Text>
|
||||||
</View>
|
</View>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import { useQuery, useQueryClient } from "@tanstack/react-query";
|
|||||||
import { atom, useAtom } from "jotai";
|
import { atom, useAtom } from "jotai";
|
||||||
import { useEffect, useMemo, useRef } from "react";
|
import { useEffect, useMemo, useRef } from "react";
|
||||||
import { TouchableOpacity, View } from "react-native";
|
import { TouchableOpacity, View } from "react-native";
|
||||||
import { useSafeAreaInsets } from "react-native-safe-area-context";
|
|
||||||
import ContinueWatchingPoster from "@/components/ContinueWatchingPoster";
|
import ContinueWatchingPoster from "@/components/ContinueWatchingPoster";
|
||||||
import {
|
import {
|
||||||
HorizontalScroll,
|
HorizontalScroll,
|
||||||
@@ -17,10 +16,10 @@ import {
|
|||||||
SeasonDropdown,
|
SeasonDropdown,
|
||||||
type SeasonIndexState,
|
type SeasonIndexState,
|
||||||
} from "@/components/series/SeasonDropdown";
|
} from "@/components/series/SeasonDropdown";
|
||||||
|
import { useControlsSafeAreaInsets } from "@/hooks/useControlsSafeAreaInsets";
|
||||||
import { useDownload } from "@/providers/DownloadProvider";
|
import { useDownload } from "@/providers/DownloadProvider";
|
||||||
import { apiAtom, userAtom } from "@/providers/JellyfinProvider";
|
import { apiAtom, userAtom } from "@/providers/JellyfinProvider";
|
||||||
import { useOfflineMode } from "@/providers/OfflineModeProvider";
|
import { useOfflineMode } from "@/providers/OfflineModeProvider";
|
||||||
import { useSettings } from "@/utils/atoms/settings";
|
|
||||||
import {
|
import {
|
||||||
getDownloadedEpisodesForSeason,
|
getDownloadedEpisodesForSeason,
|
||||||
getDownloadedSeasonNumbers,
|
getDownloadedSeasonNumbers,
|
||||||
@@ -46,8 +45,7 @@ export const EpisodeList: React.FC<Props> = ({ item, close, goToItem }) => {
|
|||||||
scrollViewRef.current?.scrollToIndex(index, 100);
|
scrollViewRef.current?.scrollToIndex(index, 100);
|
||||||
};
|
};
|
||||||
const isOffline = useOfflineMode();
|
const isOffline = useOfflineMode();
|
||||||
const { settings } = useSettings();
|
const insets = useControlsSafeAreaInsets();
|
||||||
const insets = useSafeAreaInsets();
|
|
||||||
|
|
||||||
// Set the initial season index
|
// Set the initial season index
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -59,6 +57,11 @@ export const EpisodeList: React.FC<Props> = ({ item, close, goToItem }) => {
|
|||||||
}
|
}
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
// Read the live (cached) downloads DB inside the query rather than the
|
||||||
|
// provider's downloadedItems snapshot. The snapshot only refreshes on the
|
||||||
|
// provider refreshKey, so after updateDownloadedItem() invalidates
|
||||||
|
// ["episodes"]/["seasons"] (e.g. progress/played writes) the refetch would
|
||||||
|
// return stale data. getAllDownloadedItems() is cached, so this stays cheap.
|
||||||
const { getDownloadedItems } = useDownload();
|
const { getDownloadedItems } = useDownload();
|
||||||
|
|
||||||
const seasonIndex = seasonIndexState[item.ParentId ?? ""];
|
const seasonIndex = seasonIndexState[item.ParentId ?? ""];
|
||||||
@@ -182,12 +185,9 @@ export const EpisodeList: React.FC<Props> = ({ item, close, goToItem }) => {
|
|||||||
backgroundColor: "black",
|
backgroundColor: "black",
|
||||||
height: "100%",
|
height: "100%",
|
||||||
width: "100%",
|
width: "100%",
|
||||||
paddingTop:
|
paddingTop: insets.top,
|
||||||
(settings?.safeAreaInControlsEnabled ?? true) ? insets.top : 0,
|
paddingLeft: insets.left,
|
||||||
paddingLeft:
|
paddingRight: insets.right,
|
||||||
(settings?.safeAreaInControlsEnabled ?? true) ? insets.left : 0,
|
|
||||||
paddingRight:
|
|
||||||
(settings?.safeAreaInControlsEnabled ?? true) ? insets.right : 0,
|
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<View
|
<View
|
||||||
|
|||||||
@@ -5,12 +5,11 @@ import type {
|
|||||||
} from "@jellyfin/sdk/lib/generated-client";
|
} from "@jellyfin/sdk/lib/generated-client";
|
||||||
import { type FC, useCallback, useState } from "react";
|
import { type FC, useCallback, useState } from "react";
|
||||||
import { Platform, TouchableOpacity, View } from "react-native";
|
import { Platform, TouchableOpacity, View } from "react-native";
|
||||||
import { useSafeAreaInsets } from "react-native-safe-area-context";
|
|
||||||
import useRouter from "@/hooks/useAppRouter";
|
import useRouter from "@/hooks/useAppRouter";
|
||||||
|
import { useControlsSafeAreaInsets } from "@/hooks/useControlsSafeAreaInsets";
|
||||||
import { useHaptic } from "@/hooks/useHaptic";
|
import { useHaptic } from "@/hooks/useHaptic";
|
||||||
import { useOrientation } from "@/hooks/useOrientation";
|
import { useOrientation } from "@/hooks/useOrientation";
|
||||||
import { OrientationLock } from "@/packages/expo-screen-orientation";
|
import { OrientationLock } from "@/packages/expo-screen-orientation";
|
||||||
import { useSettings } from "@/utils/atoms/settings";
|
|
||||||
import { HEADER_LAYOUT, ICON_SIZES } from "./constants";
|
import { HEADER_LAYOUT, ICON_SIZES } from "./constants";
|
||||||
import DropdownView from "./dropdown/DropdownView";
|
import DropdownView from "./dropdown/DropdownView";
|
||||||
import { PlaybackSpeedScope } from "./utils/playback-speed-settings";
|
import { PlaybackSpeedScope } from "./utils/playback-speed-settings";
|
||||||
@@ -58,9 +57,8 @@ export const HeaderControls: FC<HeaderControlsProps> = ({
|
|||||||
showTechnicalInfo = false,
|
showTechnicalInfo = false,
|
||||||
onToggleTechnicalInfo,
|
onToggleTechnicalInfo,
|
||||||
}) => {
|
}) => {
|
||||||
const { settings } = useSettings();
|
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const insets = useSafeAreaInsets();
|
const insets = useControlsSafeAreaInsets();
|
||||||
const lightHapticFeedback = useHaptic("light");
|
const lightHapticFeedback = useHaptic("light");
|
||||||
const { orientation, lockOrientation } = useOrientation();
|
const { orientation, lockOrientation } = useOrientation();
|
||||||
const [isTogglingOrientation, setIsTogglingOrientation] = useState(false);
|
const [isTogglingOrientation, setIsTogglingOrientation] = useState(false);
|
||||||
@@ -99,10 +97,9 @@ export const HeaderControls: FC<HeaderControlsProps> = ({
|
|||||||
style={[
|
style={[
|
||||||
{
|
{
|
||||||
position: "absolute",
|
position: "absolute",
|
||||||
top: (settings?.safeAreaInControlsEnabled ?? true) ? insets.top : 0,
|
top: insets.top,
|
||||||
left: (settings?.safeAreaInControlsEnabled ?? true) ? insets.left : 0,
|
left: insets.left,
|
||||||
right:
|
right: insets.right,
|
||||||
(settings?.safeAreaInControlsEnabled ?? true) ? insets.right : 0,
|
|
||||||
padding: HEADER_LAYOUT.CONTAINER_PADDING,
|
padding: HEADER_LAYOUT.CONTAINER_PADDING,
|
||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
|
|||||||
@@ -16,8 +16,8 @@ import Animated, {
|
|||||||
} from "react-native-reanimated";
|
} from "react-native-reanimated";
|
||||||
import { useSafeAreaInsets } from "react-native-safe-area-context";
|
import { useSafeAreaInsets } from "react-native-safe-area-context";
|
||||||
import { useScaledTVTypography } from "@/constants/TVTypography";
|
import { useScaledTVTypography } from "@/constants/TVTypography";
|
||||||
|
import { useControlsSafeAreaInsets } from "@/hooks/useControlsSafeAreaInsets";
|
||||||
import type { TechnicalInfo } from "@/modules/mpv-player";
|
import type { TechnicalInfo } from "@/modules/mpv-player";
|
||||||
import { useSettings } from "@/utils/atoms/settings";
|
|
||||||
import { HEADER_LAYOUT } from "./constants";
|
import { HEADER_LAYOUT } from "./constants";
|
||||||
|
|
||||||
type PlayMethod = "DirectPlay" | "DirectStream" | "Transcode";
|
type PlayMethod = "DirectPlay" | "DirectStream" | "Transcode";
|
||||||
@@ -184,8 +184,8 @@ export const TechnicalInfoOverlay: FC<TechnicalInfoOverlayProps> = memo(
|
|||||||
currentAudioIndex,
|
currentAudioIndex,
|
||||||
}) => {
|
}) => {
|
||||||
const typography = useScaledTVTypography();
|
const typography = useScaledTVTypography();
|
||||||
const { settings } = useSettings();
|
|
||||||
const insets = useSafeAreaInsets();
|
const insets = useSafeAreaInsets();
|
||||||
|
const safeInsets = useControlsSafeAreaInsets();
|
||||||
const [info, setInfo] = useState<TechnicalInfo | null>(null);
|
const [info, setInfo] = useState<TechnicalInfo | null>(null);
|
||||||
|
|
||||||
const opacity = useSharedValue(0);
|
const opacity = useSharedValue(0);
|
||||||
@@ -268,14 +268,8 @@ export const TechnicalInfoOverlay: FC<TechnicalInfoOverlayProps> = memo(
|
|||||||
left: Math.max(insets.left, 48) + 20,
|
left: Math.max(insets.left, 48) + 20,
|
||||||
}
|
}
|
||||||
: {
|
: {
|
||||||
top:
|
top: safeInsets.top + HEADER_LAYOUT.CONTAINER_PADDING + 4,
|
||||||
(settings?.safeAreaInControlsEnabled ?? true)
|
left: safeInsets.left + HEADER_LAYOUT.CONTAINER_PADDING + 20,
|
||||||
? insets.top + HEADER_LAYOUT.CONTAINER_PADDING + 4
|
|
||||||
: HEADER_LAYOUT.CONTAINER_PADDING + 4,
|
|
||||||
left:
|
|
||||||
(settings?.safeAreaInControlsEnabled ?? true)
|
|
||||||
? insets.left + HEADER_LAYOUT.CONTAINER_PADDING + 20
|
|
||||||
: HEADER_LAYOUT.CONTAINER_PADDING + 20,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const textStyle = Platform.isTV
|
const textStyle = Platform.isTV
|
||||||
|
|||||||
18
hooks/useControlsSafeAreaInsets.ts
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
import {
|
||||||
|
type EdgeInsets,
|
||||||
|
useSafeAreaInsets,
|
||||||
|
} from "react-native-safe-area-context";
|
||||||
|
import { useSettings } from "@/utils/atoms/settings";
|
||||||
|
|
||||||
|
const ZERO_INSETS: EdgeInsets = { top: 0, right: 0, bottom: 0, left: 0 };
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns safe-area insets to apply to in-player controls, honoring the
|
||||||
|
* `safeAreaInControlsEnabled` user setting. When the setting is disabled,
|
||||||
|
* returns zero insets so controls can sit flush against the screen edges.
|
||||||
|
*/
|
||||||
|
export const useControlsSafeAreaInsets = (): EdgeInsets => {
|
||||||
|
const { settings } = useSettings();
|
||||||
|
const insets = useSafeAreaInsets();
|
||||||
|
return settings.safeAreaInControlsEnabled ? insets : ZERO_INSETS;
|
||||||
|
};
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { File, Paths } from "expo-file-system";
|
||||||
import { useCallback } from "react";
|
import { useCallback } from "react";
|
||||||
import { storage } from "@/utils/mmkv";
|
import { storage } from "@/utils/mmkv";
|
||||||
|
|
||||||
@@ -12,36 +13,28 @@ const useImageStorage = () => {
|
|||||||
}
|
}
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* expo-file-system instead of fetch+Blob+FileReader: the latter silently
|
||||||
|
* resolves to an empty payload under RN's New Architecture.
|
||||||
|
*/
|
||||||
const image2Base64 = useCallback(async (url?: string | null) => {
|
const image2Base64 = useCallback(async (url?: string | null) => {
|
||||||
if (!url) return null;
|
if (!url) return null;
|
||||||
|
|
||||||
let blob: Blob;
|
const tmpFile = new File(
|
||||||
|
Paths.cache,
|
||||||
|
`img-${Date.now()}-${Math.random().toString(36).slice(2)}.jpg`,
|
||||||
|
);
|
||||||
try {
|
try {
|
||||||
// Fetch the data from the URL
|
const downloaded = await File.downloadFileAsync(url, tmpFile, {
|
||||||
const response = await fetch(url);
|
idempotent: true,
|
||||||
blob = await response.blob();
|
});
|
||||||
|
return await downloaded.base64();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.warn("Error fetching image:", error);
|
console.warn("Error fetching image:", error);
|
||||||
return null;
|
return null;
|
||||||
|
} finally {
|
||||||
|
if (tmpFile.exists) tmpFile.delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a FileReader instance
|
|
||||||
const reader = new FileReader();
|
|
||||||
|
|
||||||
// Convert blob to base64
|
|
||||||
return new Promise<string>((resolve, reject) => {
|
|
||||||
reader.onloadend = () => {
|
|
||||||
if (typeof reader.result === "string") {
|
|
||||||
// Extract the base64 string (remove the data URL prefix)
|
|
||||||
const base64 = reader.result.split(",")[1];
|
|
||||||
resolve(base64);
|
|
||||||
} else {
|
|
||||||
reject(new Error("Failed to convert image to base64"));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
reader.onerror = reject;
|
|
||||||
reader.readAsDataURL(blob);
|
|
||||||
});
|
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const saveImage = useCallback(
|
const saveImage = useCallback(
|
||||||
|
|||||||
@@ -109,30 +109,35 @@ export const usePlaybackManager = ({
|
|||||||
staleTime: 0,
|
staleTime: 0,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Derive prev/next from the current item's real position in the adjacent
|
||||||
|
* list rather than from the array length. `getEpisodes({ adjacentTo })` does
|
||||||
|
* not guarantee a fixed [prev, current, next] shape — at the first/last
|
||||||
|
* episode it can still return the current item as the first/last entry — so
|
||||||
|
* length-based indexing wrongly surfaces the current episode as "previous".
|
||||||
|
*/
|
||||||
|
const currentIndex = useMemo(
|
||||||
|
() => adjacentItems?.findIndex((e) => e.Id === item?.Id) ?? -1,
|
||||||
|
[adjacentItems, item],
|
||||||
|
);
|
||||||
|
|
||||||
|
/** A neighbour is only navigable if it has an actual media file (not a
|
||||||
|
* "Virtual"/missing episode placeholder, e.g. an absent Special). */
|
||||||
|
const isNavigable = (episode?: BaseItemDto | null): episode is BaseItemDto =>
|
||||||
|
!!episode && episode.Id !== item?.Id && episode.LocationType !== "Virtual";
|
||||||
|
|
||||||
const previousItem = useMemo(() => {
|
const previousItem = useMemo(() => {
|
||||||
if (!adjacentItems || adjacentItems.length <= 1) {
|
if (!adjacentItems || currentIndex <= 0) return null;
|
||||||
return null;
|
const candidate = adjacentItems[currentIndex - 1];
|
||||||
}
|
return isNavigable(candidate) ? candidate : null;
|
||||||
|
}, [adjacentItems, currentIndex, item]);
|
||||||
if (adjacentItems.length === 2) {
|
|
||||||
return adjacentItems[0].Id === item?.Id ? null : adjacentItems[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
return adjacentItems[0];
|
|
||||||
}, [adjacentItems, item]);
|
|
||||||
|
|
||||||
/** The next item in the series */
|
/** The next item in the series */
|
||||||
const nextItem = useMemo(() => {
|
const nextItem = useMemo(() => {
|
||||||
if (!adjacentItems || adjacentItems.length <= 1) {
|
if (!adjacentItems || currentIndex < 0) return null;
|
||||||
return null;
|
const candidate = adjacentItems[currentIndex + 1];
|
||||||
}
|
return isNavigable(candidate) ? candidate : null;
|
||||||
|
}, [adjacentItems, currentIndex, item]);
|
||||||
if (adjacentItems.length === 2) {
|
|
||||||
return adjacentItems[1].Id === item?.Id ? null : adjacentItems[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
return adjacentItems[2];
|
|
||||||
}, [adjacentItems, item]);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reports playback progress.
|
* Reports playback progress.
|
||||||
|
|||||||
@@ -213,7 +213,7 @@ public class MpvPlayerModule: Module {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Defines events that the view can send to JavaScript
|
// Defines events that the view can send to JavaScript
|
||||||
Events("onLoad", "onPlaybackStateChange", "onProgress", "onError", "onTracksReady")
|
Events("onLoad", "onPlaybackStateChange", "onProgress", "onError", "onTracksReady", "onPictureInPictureChange")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,6 +61,7 @@ class MpvPlayerView: ExpoView {
|
|||||||
let onProgress = EventDispatcher()
|
let onProgress = EventDispatcher()
|
||||||
let onError = EventDispatcher()
|
let onError = EventDispatcher()
|
||||||
let onTracksReady = EventDispatcher()
|
let onTracksReady = EventDispatcher()
|
||||||
|
let onPictureInPictureChange = EventDispatcher()
|
||||||
|
|
||||||
private var currentURL: URL?
|
private var currentURL: URL?
|
||||||
private var cachedPosition: Double = 0
|
private var cachedPosition: Double = 0
|
||||||
@@ -81,7 +82,6 @@ class MpvPlayerView: ExpoView {
|
|||||||
private func setupView() {
|
private func setupView() {
|
||||||
clipsToBounds = true
|
clipsToBounds = true
|
||||||
backgroundColor = .black
|
backgroundColor = .black
|
||||||
configureAudioSession()
|
|
||||||
|
|
||||||
videoContainer = UIView()
|
videoContainer = UIView()
|
||||||
videoContainer.translatesAutoresizingMaskIntoConstraints = false
|
videoContainer.translatesAutoresizingMaskIntoConstraints = false
|
||||||
@@ -141,21 +141,26 @@ class MpvPlayerView: ExpoView {
|
|||||||
CATransaction.commit()
|
CATransaction.commit()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: - Audio Session & Notifications
|
||||||
|
|
||||||
private func configureAudioSession() {
|
private func configureAudioSession() {
|
||||||
let audioSession = AVAudioSession.sharedInstance()
|
let session = AVAudioSession.sharedInstance()
|
||||||
do {
|
do {
|
||||||
try audioSession.setCategory(
|
try session.setCategory(.playback, mode: .moviePlayback, policy: .longFormAudio, options: [])
|
||||||
.playback,
|
try session.setActive(true)
|
||||||
mode: .moviePlayback,
|
|
||||||
policy: .longFormAudio,
|
|
||||||
options: []
|
|
||||||
)
|
|
||||||
try audioSession.setActive(true)
|
|
||||||
} catch {
|
} catch {
|
||||||
print("Failed to configure audio session: \(error)")
|
print("Failed to configure audio session: \(error)")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// MARK: - Audio Session & Notifications
|
|
||||||
|
/// Deactivate the session AND reset the category — `setActive(false)` alone
|
||||||
|
/// leaves `.playback`/`.longFormAudio` on the shared singleton, so any later
|
||||||
|
/// reactivation (foreground, route change, other modules) re-steals audio.
|
||||||
|
private func tearDownAudioSession() {
|
||||||
|
let session = AVAudioSession.sharedInstance()
|
||||||
|
try? session.setActive(false, options: .notifyOthersOnDeactivation)
|
||||||
|
try? session.setCategory(.ambient, mode: .default, options: [.mixWithOthers])
|
||||||
|
}
|
||||||
|
|
||||||
private func setupNotifications() {
|
private func setupNotifications() {
|
||||||
// Handle audio session interruptions (e.g., incoming calls, other apps playing audio)
|
// Handle audio session interruptions (e.g., incoming calls, other apps playing audio)
|
||||||
@@ -270,6 +275,7 @@ class MpvPlayerView: ExpoView {
|
|||||||
|
|
||||||
func play() {
|
func play() {
|
||||||
intendedPlayState = true
|
intendedPlayState = true
|
||||||
|
configureAudioSession()
|
||||||
setupRemoteCommands()
|
setupRemoteCommands()
|
||||||
renderer?.play()
|
renderer?.play()
|
||||||
pipController?.setPlaybackRate(1.0)
|
pipController?.setPlaybackRate(1.0)
|
||||||
@@ -440,6 +446,7 @@ class MpvPlayerView: ExpoView {
|
|||||||
renderer?.stop()
|
renderer?.stop()
|
||||||
displayLayer.removeFromSuperlayer()
|
displayLayer.removeFromSuperlayer()
|
||||||
clearNowPlayingInfo()
|
clearNowPlayingInfo()
|
||||||
|
tearDownAudioSession()
|
||||||
NotificationCenter.default.removeObserver(self)
|
NotificationCenter.default.removeObserver(self)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -519,9 +526,7 @@ extension MpvPlayerView: MPVLayerRendererDelegate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func renderer(_: MPVLayerRenderer, didSelectAudioOutput audioOutput: String) {
|
func renderer(_: MPVLayerRenderer, didSelectAudioOutput audioOutput: String) {
|
||||||
// Audio output is now active - this is the right time to activate audio session and set Now Playing
|
print("[MPV] Audio output ready (\(audioOutput)), syncing Now Playing")
|
||||||
print("[MPV] Audio output ready (\(audioOutput)), activating audio session and syncing Now Playing")
|
|
||||||
nowPlayingManager.activateAudioSession()
|
|
||||||
syncNowPlaying(isPlaying: !isPaused())
|
syncNowPlaying(isPlaying: !isPaused())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -633,6 +638,9 @@ extension MpvPlayerView: PiPControllerDelegate {
|
|||||||
print("PiP did start: \(didStartPictureInPicture)")
|
print("PiP did start: \(didStartPictureInPicture)")
|
||||||
// Ensure current time is synced when PiP starts
|
// Ensure current time is synced when PiP starts
|
||||||
pipController?.setCurrentTimeFromSeconds(cachedPosition, duration: cachedDuration)
|
pipController?.setCurrentTimeFromSeconds(cachedPosition, duration: cachedDuration)
|
||||||
|
// Notify JS of the actual PiP active state. `didStartPictureInPicture`
|
||||||
|
// is `false` when AVKit reports a failure to start, so reflect that.
|
||||||
|
onPictureInPictureChange(["isActive": didStartPictureInPicture])
|
||||||
}
|
}
|
||||||
|
|
||||||
func pipController(_ controller: PiPController, willStopPictureInPicture: Bool) {
|
func pipController(_ controller: PiPController, willStopPictureInPicture: Bool) {
|
||||||
@@ -651,6 +659,9 @@ extension MpvPlayerView: PiPControllerDelegate {
|
|||||||
if _isZoomedToFill {
|
if _isZoomedToFill {
|
||||||
displayLayer.videoGravity = .resizeAspectFill
|
displayLayer.videoGravity = .resizeAspectFill
|
||||||
}
|
}
|
||||||
|
// Notify JS that PiP has fully stopped so the controls overlay can
|
||||||
|
// be re-mounted when the user returns to full screen.
|
||||||
|
onPictureInPictureChange(["isActive": false])
|
||||||
}
|
}
|
||||||
|
|
||||||
func pipController(_ controller: PiPController, restoreUserInterfaceForPictureInPictureStop completionHandler: @escaping (Bool) -> Void) {
|
func pipController(_ controller: PiPController, restoreUserInterfaceForPictureInPictureStop completionHandler: @escaping (Bool) -> Void) {
|
||||||
|
|||||||
@@ -22,7 +22,9 @@
|
|||||||
"lint": "biome check --write --unsafe --max-diagnostics 1000",
|
"lint": "biome check --write --unsafe --max-diagnostics 1000",
|
||||||
"format": "biome format --write .",
|
"format": "biome format --write .",
|
||||||
"doctor": "expo-doctor",
|
"doctor": "expo-doctor",
|
||||||
"test": "bun run typecheck && bun run lint && bun run format && bun run doctor",
|
"i18n:check": "bun scripts/check-i18n-keys.mjs",
|
||||||
|
"i18n:fix-unused": "bun scripts/check-i18n-keys.mjs --fix-unused",
|
||||||
|
"test": "bun run typecheck && bun run lint && bun run format && bun run i18n:check && bun run doctor",
|
||||||
"postinstall": "patch-package"
|
"postinstall": "patch-package"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -129,7 +131,7 @@
|
|||||||
"@types/react": "~19.2.10",
|
"@types/react": "~19.2.10",
|
||||||
"@types/react-test-renderer": "19.1.0",
|
"@types/react-test-renderer": "19.1.0",
|
||||||
"cross-env": "10.1.0",
|
"cross-env": "10.1.0",
|
||||||
"expo-doctor": "1.19.7",
|
"expo-doctor": "1.19.9",
|
||||||
"husky": "9.1.7",
|
"husky": "9.1.7",
|
||||||
"lint-staged": "17.0.5",
|
"lint-staged": "17.0.5",
|
||||||
"react-test-renderer": "19.2.3",
|
"react-test-renderer": "19.2.3",
|
||||||
|
|||||||
@@ -4,28 +4,68 @@ import type { DownloadedItem, DownloadsDatabase } from "./types";
|
|||||||
|
|
||||||
const DOWNLOADS_DATABASE_KEY = "downloads.v2.json";
|
const DOWNLOADS_DATABASE_KEY = "downloads.v2.json";
|
||||||
|
|
||||||
|
// Performance optimization: Cache the parsed database to avoid repeated JSON.parse calls
|
||||||
|
let cachedDb: DownloadsDatabase | null = null;
|
||||||
|
let cacheVersion = 0;
|
||||||
|
|
||||||
|
// Performance optimization: Cache the flattened items array
|
||||||
|
let cachedItems: DownloadedItem[] | null = null;
|
||||||
|
let itemsCacheVersion = -1;
|
||||||
|
|
||||||
|
// Performance optimization: Index for O(1) item lookups by ID
|
||||||
|
let itemIndex: Map<string, DownloadedItem> | null = null;
|
||||||
|
let indexCacheVersion = -1;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the downloads database from storage
|
* Get the downloads database from storage
|
||||||
|
* PERFORMANCE: Caches the parsed database to avoid repeated JSON.parse calls.
|
||||||
|
* NOTE: Returns the shared cached instance — do NOT mutate it directly. Go
|
||||||
|
* through addDownloadedItem/updateDownloadedItem/removeDownloadedItem so
|
||||||
|
* saveDownloadsDatabase() runs and the derived caches stay consistent.
|
||||||
*/
|
*/
|
||||||
export function getDownloadsDatabase(): DownloadsDatabase {
|
export function getDownloadsDatabase(): DownloadsDatabase {
|
||||||
|
// Return cached database if available
|
||||||
|
if (cachedDb !== null) {
|
||||||
|
return cachedDb;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parse from storage and cache the result
|
||||||
const file = storage.getString(DOWNLOADS_DATABASE_KEY);
|
const file = storage.getString(DOWNLOADS_DATABASE_KEY);
|
||||||
if (file) {
|
if (file) {
|
||||||
return JSON.parse(file) as DownloadsDatabase;
|
cachedDb = JSON.parse(file) as DownloadsDatabase;
|
||||||
|
return cachedDb;
|
||||||
}
|
}
|
||||||
return { movies: {}, series: {}, other: {} };
|
|
||||||
|
const emptyDb = { movies: {}, series: {}, other: {} };
|
||||||
|
cachedDb = emptyDb;
|
||||||
|
return emptyDb;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Save the downloads database to storage
|
* Save the downloads database to storage
|
||||||
|
* PERFORMANCE: Updates cache and invalidates derived caches
|
||||||
*/
|
*/
|
||||||
export function saveDownloadsDatabase(db: DownloadsDatabase): void {
|
export function saveDownloadsDatabase(db: DownloadsDatabase): void {
|
||||||
storage.set(DOWNLOADS_DATABASE_KEY, JSON.stringify(db));
|
storage.set(DOWNLOADS_DATABASE_KEY, JSON.stringify(db));
|
||||||
|
// Update the cache with the new database
|
||||||
|
cachedDb = db;
|
||||||
|
// Invalidate derived caches (items array and index)
|
||||||
|
cachedItems = null;
|
||||||
|
itemIndex = null;
|
||||||
|
cacheVersion++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get all downloaded items as a flat array
|
* Get all downloaded items as a flat array
|
||||||
|
* PERFORMANCE: Caches the flattened array to avoid rebuilding on every call
|
||||||
*/
|
*/
|
||||||
export function getAllDownloadedItems(): DownloadedItem[] {
|
export function getAllDownloadedItems(): DownloadedItem[] {
|
||||||
|
// Return cached items if available and up-to-date
|
||||||
|
if (cachedItems !== null && itemsCacheVersion === cacheVersion) {
|
||||||
|
return cachedItems;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Build the items array from the database
|
||||||
const db = getDownloadsDatabase();
|
const db = getDownloadsDatabase();
|
||||||
const items: DownloadedItem[] = [];
|
const items: DownloadedItem[] = [];
|
||||||
|
|
||||||
@@ -47,34 +87,41 @@ export function getAllDownloadedItems(): DownloadedItem[] {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Cache the result
|
||||||
|
cachedItems = items;
|
||||||
|
itemsCacheVersion = cacheVersion;
|
||||||
|
|
||||||
return items;
|
return items;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a downloaded item by its ID
|
* Build or refresh the item index for O(1) lookups
|
||||||
*/
|
*/
|
||||||
export function getDownloadedItemById(id: string): DownloadedItem | undefined {
|
function ensureItemIndex(): void {
|
||||||
const db = getDownloadsDatabase();
|
if (itemIndex !== null && indexCacheVersion === cacheVersion) {
|
||||||
|
return; // Index is up-to-date
|
||||||
if (db.movies[id]) {
|
|
||||||
return db.movies[id];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const series of Object.values(db.series)) {
|
// Build new index from all items
|
||||||
for (const season of Object.values(series.seasons)) {
|
itemIndex = new Map<string, DownloadedItem>();
|
||||||
for (const episode of Object.values(season.episodes)) {
|
const items = getAllDownloadedItems();
|
||||||
if (episode.item.Id === id) {
|
|
||||||
return episode;
|
for (const item of items) {
|
||||||
}
|
if (item.item.Id) {
|
||||||
}
|
itemIndex.set(item.item.Id, item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (db.other?.[id]) {
|
indexCacheVersion = cacheVersion;
|
||||||
return db.other[id];
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return undefined;
|
/**
|
||||||
|
* Get a downloaded item by its ID
|
||||||
|
* PERFORMANCE: Uses O(1) index lookup instead of O(n²) iteration
|
||||||
|
*/
|
||||||
|
export function getDownloadedItemById(id: string): DownloadedItem | undefined {
|
||||||
|
ensureItemIndex();
|
||||||
|
return itemIndex!.get(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -221,4 +268,5 @@ export function updateDownloadedItem(
|
|||||||
*/
|
*/
|
||||||
export function clearAllDownloadedItems(): void {
|
export function clearAllDownloadedItems(): void {
|
||||||
saveDownloadsDatabase({ movies: {}, series: {}, other: {} });
|
saveDownloadsDatabase({ movies: {}, series: {}, other: {} });
|
||||||
|
// saveDownloadsDatabase already invalidates caches
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -619,44 +619,54 @@ export const JellyfinProvider: React.FC<{ children: ReactNode }> = ({
|
|||||||
setUser(storedUser);
|
setUser(storedUser);
|
||||||
}
|
}
|
||||||
|
|
||||||
const response = await getUserApi(apiInstance).getCurrentUser();
|
// Dismiss splash screen with cached data immediately,
|
||||||
setUser(response.data);
|
// fetch fresh user data in the background
|
||||||
|
setInitialLoaded(true);
|
||||||
|
|
||||||
// Migrate current session to secure storage if not already saved
|
try {
|
||||||
if (storedUser?.Id && storedUser?.Name) {
|
const response = await getUserApi(apiInstance).getCurrentUser();
|
||||||
const existingCredential = await getAccountCredential(
|
setUser(response.data);
|
||||||
serverUrl,
|
|
||||||
storedUser.Id,
|
// Migrate current session to secure storage if not already saved
|
||||||
);
|
if (storedUser?.Id && storedUser?.Name) {
|
||||||
if (!existingCredential) {
|
const existingCredential = await getAccountCredential(
|
||||||
await saveAccountCredential({
|
|
||||||
serverUrl,
|
serverUrl,
|
||||||
serverName: "",
|
storedUser.Id,
|
||||||
token,
|
);
|
||||||
userId: storedUser.Id,
|
if (!existingCredential) {
|
||||||
username: storedUser.Name,
|
await saveAccountCredential({
|
||||||
savedAt: Date.now(),
|
serverUrl,
|
||||||
securityType: "none",
|
serverName: "",
|
||||||
primaryImageTag: response.data.PrimaryImageTag ?? undefined,
|
token,
|
||||||
});
|
userId: storedUser.Id,
|
||||||
} else if (
|
username: storedUser.Name,
|
||||||
response.data.PrimaryImageTag !==
|
savedAt: Date.now(),
|
||||||
existingCredential.primaryImageTag
|
securityType: "none",
|
||||||
) {
|
primaryImageTag: response.data.PrimaryImageTag ?? undefined,
|
||||||
// Update image tag if it has changed
|
});
|
||||||
addAccountToServer(serverUrl, existingCredential.serverName, {
|
} else if (
|
||||||
userId: existingCredential.userId,
|
response.data.PrimaryImageTag !==
|
||||||
username: existingCredential.username,
|
existingCredential.primaryImageTag
|
||||||
securityType: existingCredential.securityType,
|
) {
|
||||||
savedAt: existingCredential.savedAt,
|
// Update image tag if it has changed
|
||||||
primaryImageTag: response.data.PrimaryImageTag ?? undefined,
|
addAccountToServer(serverUrl, existingCredential.serverName, {
|
||||||
});
|
userId: existingCredential.userId,
|
||||||
|
username: existingCredential.username,
|
||||||
|
securityType: existingCredential.securityType,
|
||||||
|
savedAt: existingCredential.savedAt,
|
||||||
|
primaryImageTag: response.data.PrimaryImageTag ?? undefined,
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
} catch (e) {
|
||||||
|
// Background fetch failed — app already rendered with cached data
|
||||||
|
console.warn("Background user fetch failed, using cached data:", e);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
setInitialLoaded(true);
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
} finally {
|
|
||||||
setInitialLoaded(true);
|
setInitialLoaded(true);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
273
scripts/check-i18n-keys.mjs
Normal file
@@ -0,0 +1,273 @@
|
|||||||
|
#!/usr/bin/env bun
|
||||||
|
/**
|
||||||
|
* i18n key checker for Streamyfin.
|
||||||
|
*
|
||||||
|
* Detects:
|
||||||
|
* - MISSING keys: a static `t("a.b.c")` / `i18nKey="a.b.c"` referenced in the code
|
||||||
|
* that does not exist in the source locale (translations/en.json). These are bugs —
|
||||||
|
* the app renders the raw key. Always fails CI.
|
||||||
|
* - UNUSED (dead) keys: a key in the source locale that is referenced nowhere in the
|
||||||
|
* code, neither statically nor via a detected dynamic prefix (`t(`a.b.${x}`)`).
|
||||||
|
* These are dead weight that also clutter every locale on Crowdin.
|
||||||
|
*
|
||||||
|
* Dynamic usage is handled conservatively:
|
||||||
|
* - `t(`prefix.${x}`)` -> every key starting with `prefix.` is considered used.
|
||||||
|
* - `t(`${x}`)` -> fully dynamic, reported for manual review, never used to
|
||||||
|
* whitelist keys (in Streamyfin these are user-defined section
|
||||||
|
* titles, not translation keys).
|
||||||
|
* - Edge cases the static scan cannot see can be allow-listed in the config file.
|
||||||
|
*
|
||||||
|
* Usage:
|
||||||
|
* bun scripts/check-i18n-keys.mjs # report + exit 1 on missing OR unused
|
||||||
|
* bun scripts/check-i18n-keys.mjs --unused=warn # exit 1 only on missing; unused = warning
|
||||||
|
* bun scripts/check-i18n-keys.mjs --unused=off # ignore unused entirely
|
||||||
|
* bun scripts/check-i18n-keys.mjs --json # machine-readable output
|
||||||
|
* bun scripts/check-i18n-keys.mjs --fix-unused # remove dead keys from en.json (Crowdin syncs the rest)
|
||||||
|
*/
|
||||||
|
|
||||||
|
import {
|
||||||
|
existsSync,
|
||||||
|
readdirSync,
|
||||||
|
readFileSync,
|
||||||
|
statSync,
|
||||||
|
writeFileSync,
|
||||||
|
} from "node:fs";
|
||||||
|
import { extname, join, relative } from "node:path";
|
||||||
|
|
||||||
|
const ROOT = process.cwd();
|
||||||
|
const args = process.argv.slice(2);
|
||||||
|
const flag = (name, def) => {
|
||||||
|
const a = args.find((x) => x === `--${name}` || x.startsWith(`--${name}=`));
|
||||||
|
if (!a) return def;
|
||||||
|
const [, v] = a.split("=");
|
||||||
|
return v === undefined ? true : v;
|
||||||
|
};
|
||||||
|
const UNUSED_MODE = String(flag("unused", "error")); // error | warn | off
|
||||||
|
const JSON_OUT = !!flag("json", false);
|
||||||
|
const FIX_UNUSED = !!flag("fix-unused", false);
|
||||||
|
|
||||||
|
// ---- config ----
|
||||||
|
const CONFIG_PATH = join(ROOT, "scripts", "i18n-keys.config.json");
|
||||||
|
const DEFAULT_CONFIG = {
|
||||||
|
localesDir: "translations",
|
||||||
|
sourceLocale: "en",
|
||||||
|
// Scan the whole repo by default so keys referenced outside the obvious dirs
|
||||||
|
// (e.g. packages/, key constants in utils/atoms) are not wrongly flagged as dead.
|
||||||
|
srcDirs: ["."],
|
||||||
|
srcExtensions: [".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs"],
|
||||||
|
excludeDirs: [
|
||||||
|
"node_modules",
|
||||||
|
"ios",
|
||||||
|
"android",
|
||||||
|
".expo",
|
||||||
|
".git",
|
||||||
|
"dist",
|
||||||
|
"build",
|
||||||
|
"translations",
|
||||||
|
"scripts",
|
||||||
|
],
|
||||||
|
// Keys (or glob-ish prefixes ending with .* or *) known to be used dynamically / externally.
|
||||||
|
ignoreUnused: [],
|
||||||
|
};
|
||||||
|
const config = existsSync(CONFIG_PATH)
|
||||||
|
? { ...DEFAULT_CONFIG, ...JSON.parse(readFileSync(CONFIG_PATH, "utf8")) }
|
||||||
|
: DEFAULT_CONFIG;
|
||||||
|
|
||||||
|
// ---- helpers ----
|
||||||
|
const flatten = (obj, prefix = "", out = {}) => {
|
||||||
|
for (const [k, v] of Object.entries(obj)) {
|
||||||
|
const key = prefix ? `${prefix}.${k}` : k;
|
||||||
|
if (v && typeof v === "object" && !Array.isArray(v)) flatten(v, key, out);
|
||||||
|
else out[key] = v;
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
};
|
||||||
|
|
||||||
|
const globMatch = (key, pattern) => {
|
||||||
|
if (pattern.endsWith(".*"))
|
||||||
|
return key === pattern.slice(0, -2) || key.startsWith(pattern.slice(0, -1));
|
||||||
|
if (pattern.endsWith("*")) return key.startsWith(pattern.slice(0, -1));
|
||||||
|
return key === pattern;
|
||||||
|
};
|
||||||
|
|
||||||
|
const walk = (dir, files = []) => {
|
||||||
|
let entries;
|
||||||
|
try {
|
||||||
|
entries = readdirSync(dir);
|
||||||
|
} catch {
|
||||||
|
return files;
|
||||||
|
}
|
||||||
|
for (const name of entries) {
|
||||||
|
const full = join(dir, name);
|
||||||
|
let st;
|
||||||
|
try {
|
||||||
|
st = statSync(full);
|
||||||
|
} catch {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (st.isDirectory()) {
|
||||||
|
if (config.excludeDirs.includes(name)) continue;
|
||||||
|
walk(full, files);
|
||||||
|
} else if (config.srcExtensions.includes(extname(name))) {
|
||||||
|
files.push(full);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return files;
|
||||||
|
};
|
||||||
|
|
||||||
|
// ---- load source keys ----
|
||||||
|
const sourcePath = join(ROOT, config.localesDir, `${config.sourceLocale}.json`);
|
||||||
|
const sourceKeys = Object.keys(
|
||||||
|
flatten(JSON.parse(readFileSync(sourcePath, "utf8"))),
|
||||||
|
);
|
||||||
|
const sourceKeySet = new Set(sourceKeys);
|
||||||
|
|
||||||
|
// ---- scan code ----
|
||||||
|
const STATIC_RE = /\bt\(\s*(['"])((?:\\.|(?!\1).)+?)\1/g; // t("a.b") / t('a.b')
|
||||||
|
const TPL_STATIC_RE = /\bt\(\s*`([^`$]+)`/g; // t(`a.b`) no interpolation
|
||||||
|
const TPL_DYN_RE = /\bt\(\s*`([^`$]*)\$\{/g; // t(`a.b.${x}`) -> prefix "a.b."
|
||||||
|
const I18NKEY_RE = /\bi18nKey\s*=\s*(?:\{\s*)?(['"])((?:\\.|(?!\1).)+?)\1/g; // <Trans i18nKey="a.b">
|
||||||
|
const KEY_SHAPE = /^[A-Za-z0-9_]+(\.[A-Za-z0-9_]+)+$/; // dotted key, e.g. home.x.y
|
||||||
|
|
||||||
|
const usedStatic = new Set(); // keys passed to t(...) / i18nKey — used for MISSING detection
|
||||||
|
const dynamicPrefixes = new Set();
|
||||||
|
const fullyDynamic = []; // { file, line }
|
||||||
|
let codeBlob = ""; // all (comment-stripped) source text — searched for delimited key literals
|
||||||
|
|
||||||
|
// Strip comments so keys mentioned in comments (e.g. `// t("old.key")`) are not counted as
|
||||||
|
// usage. Block comments and JSX {/* */} are blanked (preserving newlines for line numbers);
|
||||||
|
// line comments are only stripped when `//` follows start/whitespace/punctuation, which keeps
|
||||||
|
// `://` inside string URLs intact.
|
||||||
|
const stripComments = (src) =>
|
||||||
|
src
|
||||||
|
.replace(/\/\*[\s\S]*?\*\//g, (m) => m.replace(/[^\n]/g, " "))
|
||||||
|
.replace(/(^|[\s;{}()[\],=>])\/\/[^\n]*/g, (_m, p) => p);
|
||||||
|
|
||||||
|
const files = config.srcDirs.flatMap((d) =>
|
||||||
|
walk(join(ROOT, d === "." ? "" : d) || ROOT),
|
||||||
|
);
|
||||||
|
for (const file of files) {
|
||||||
|
const text = readFileSync(file, "utf8");
|
||||||
|
const clean = stripComments(text);
|
||||||
|
codeBlob += `\n${clean}`;
|
||||||
|
for (const m of clean.matchAll(STATIC_RE)) usedStatic.add(m[2]);
|
||||||
|
for (const m of clean.matchAll(TPL_STATIC_RE)) usedStatic.add(m[1]);
|
||||||
|
for (const m of clean.matchAll(I18NKEY_RE)) usedStatic.add(m[2]);
|
||||||
|
for (const m of clean.matchAll(TPL_DYN_RE)) {
|
||||||
|
const prefix = m[1];
|
||||||
|
if (prefix?.includes(".")) dynamicPrefixes.add(prefix);
|
||||||
|
else {
|
||||||
|
const idx = clean.slice(0, m.index).split("\n").length;
|
||||||
|
fullyDynamic.push({ file: relative(ROOT, file), line: idx });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const prefixList = [...dynamicPrefixes];
|
||||||
|
// A key counts as used if its EXACT delimited literal ("k" / 'k' / `k`) appears anywhere in
|
||||||
|
// the code (covers t("k"), <Trans i18nKey>, and keys stored as bare string constants in
|
||||||
|
// arrays/config then resolved via t(variable)), or it is reached via a dynamic prefix, or
|
||||||
|
// explicitly allow-listed. Delimited search avoids substring false-matches (e.g. a.b vs a.b_c).
|
||||||
|
const literalUsed = (key) =>
|
||||||
|
codeBlob.includes(`"${key}"`) ||
|
||||||
|
codeBlob.includes(`'${key}'`) ||
|
||||||
|
codeBlob.includes(`\`${key}\``);
|
||||||
|
const isUsed = (key) =>
|
||||||
|
literalUsed(key) ||
|
||||||
|
prefixList.some((p) => key.startsWith(p)) ||
|
||||||
|
config.ignoreUnused.some((g) => globMatch(key, g));
|
||||||
|
|
||||||
|
// ---- compute ----
|
||||||
|
const unused = sourceKeys.filter((k) => !isUsed(k)).sort();
|
||||||
|
// Static references are always validated, even under a dynamic prefix: a dynamic prefix only
|
||||||
|
// affects the UNUSED calculation, never MISSING.
|
||||||
|
const missing = [...usedStatic]
|
||||||
|
.filter((k) => KEY_SHAPE.test(k) && !sourceKeySet.has(k))
|
||||||
|
.sort();
|
||||||
|
// Known limitation: only keys seen in a static t("…") / i18nKey="…" / t(`…`) call are
|
||||||
|
// validated for MISSING. A key stored as a bare string constant and resolved via t(variable)
|
||||||
|
// counts as USED (via literalUsed → not flagged unused) but its existence in en.json is not
|
||||||
|
// checked here — static analysis can't resolve which key a runtime variable holds. Streamyfin
|
||||||
|
// keys are static literals in practice; revisit if dynamic key constants become common.
|
||||||
|
|
||||||
|
// ---- optional fix: strip dead keys from the source locale (en.json) ----
|
||||||
|
const removeKey = (obj, parts) => {
|
||||||
|
const [head, ...rest] = parts;
|
||||||
|
if (!(head in obj)) return;
|
||||||
|
if (rest.length === 0) {
|
||||||
|
delete obj[head];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
removeKey(obj[head], rest);
|
||||||
|
if (
|
||||||
|
obj[head] &&
|
||||||
|
typeof obj[head] === "object" &&
|
||||||
|
Object.keys(obj[head]).length === 0
|
||||||
|
)
|
||||||
|
delete obj[head];
|
||||||
|
};
|
||||||
|
if (FIX_UNUSED && unused.length) {
|
||||||
|
// Only edit the SOURCE locale (en.json). Crowdin owns the target locales and removes
|
||||||
|
// the keys from them automatically on the next sync once they disappear from the source.
|
||||||
|
const data = JSON.parse(readFileSync(sourcePath, "utf8"));
|
||||||
|
for (const key of unused) removeKey(data, key.split("."));
|
||||||
|
writeFileSync(sourcePath, `${JSON.stringify(data, null, 2)}\n`);
|
||||||
|
console.log(
|
||||||
|
`🧹 Removed ${unused.length} dead key(s) from ${config.sourceLocale}.json (Crowdin will sync the other locales).`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---- report ----
|
||||||
|
if (JSON_OUT) {
|
||||||
|
console.log(
|
||||||
|
JSON.stringify(
|
||||||
|
{
|
||||||
|
sourceKeys: sourceKeys.length,
|
||||||
|
missing,
|
||||||
|
unused,
|
||||||
|
dynamicPrefixes: prefixList,
|
||||||
|
fullyDynamic,
|
||||||
|
},
|
||||||
|
null,
|
||||||
|
2,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
console.log(
|
||||||
|
`🔑 i18n key check — source: ${relative(ROOT, sourcePath)} (${sourceKeys.length} keys), scanned ${files.length} files`,
|
||||||
|
);
|
||||||
|
if (prefixList.length)
|
||||||
|
console.log(
|
||||||
|
` dynamic prefixes treated as used: ${prefixList.map((p) => `${p}*`).join(", ")}`,
|
||||||
|
);
|
||||||
|
if (fullyDynamic.length)
|
||||||
|
console.log(
|
||||||
|
` ⚠️ ${fullyDynamic.length} fully-dynamic t(\`\${…}\`) call(s) (not key-based, manual review): ${fullyDynamic.map((d) => `${d.file}:${d.line}`).join(", ")}`,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (missing.length) {
|
||||||
|
console.log(
|
||||||
|
`\n❌ MISSING keys (used in code, absent from ${config.sourceLocale}.json) — ${missing.length}:`,
|
||||||
|
);
|
||||||
|
for (const k of missing) console.log(` - ${k}`);
|
||||||
|
} else console.log("\n✅ No missing keys.");
|
||||||
|
|
||||||
|
if (UNUSED_MODE !== "off") {
|
||||||
|
if (unused.length) {
|
||||||
|
console.log(
|
||||||
|
`\n${UNUSED_MODE === "error" ? "❌" : "⚠️ "} UNUSED keys (in ${config.sourceLocale}.json, referenced nowhere) — ${unused.length}:`,
|
||||||
|
);
|
||||||
|
for (const k of unused) console.log(` - ${k}`);
|
||||||
|
console.log(
|
||||||
|
`\n → remove with: bun scripts/check-i18n-keys.mjs --fix-unused`,
|
||||||
|
);
|
||||||
|
console.log(
|
||||||
|
` → or allow-list a dynamic key in scripts/i18n-keys.config.json ("ignoreUnused").`,
|
||||||
|
);
|
||||||
|
} else console.log("\n✅ No unused keys.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const fail =
|
||||||
|
missing.length > 0 || (UNUSED_MODE === "error" && unused.length > 0);
|
||||||
|
process.exit(fail ? 1 : 0);
|
||||||
@@ -1,129 +0,0 @@
|
|||||||
#!/usr/bin/env bun
|
|
||||||
/**
|
|
||||||
* Validates that a pull request body follows .github/pull_request_template.md:
|
|
||||||
* required sections are filled in and the key checklist items are ticked.
|
|
||||||
*
|
|
||||||
* Usage: bun scripts/check-pr-template.mjs <path-to-pr-body.txt>
|
|
||||||
* Output: a JSON array of human-readable problems (empty array = all good).
|
|
||||||
* Exit: 0 = ok, 1 = one or more problems, 2 = no body file given.
|
|
||||||
*
|
|
||||||
* Env: AUTHOR_ASSOCIATION — when OWNER/MEMBER/COLLABORATOR, the AI-disclosure
|
|
||||||
* check is skipped (maintainers self-police).
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { existsSync, readFileSync } from "node:fs";
|
|
||||||
|
|
||||||
const bodyFile = process.argv[2];
|
|
||||||
if (!bodyFile) {
|
|
||||||
console.error("usage: bun scripts/check-pr-template.mjs <pr-body-file>");
|
|
||||||
process.exit(2);
|
|
||||||
}
|
|
||||||
|
|
||||||
let body;
|
|
||||||
try {
|
|
||||||
body = readFileSync(bodyFile, "utf8").replace(/\r\n/g, "\n");
|
|
||||||
} catch (e) {
|
|
||||||
console.error(`cannot read body file ${bodyFile}: ${e.message}`);
|
|
||||||
process.exit(2);
|
|
||||||
}
|
|
||||||
const association = (process.env.AUTHOR_ASSOCIATION || "").toUpperCase();
|
|
||||||
const isMaintainer = ["OWNER", "MEMBER", "COLLABORATOR"].includes(association);
|
|
||||||
|
|
||||||
// Strip HTML comments in a single linear pass (indexOf scan): no regex backtracking
|
|
||||||
// and no loop-until-stable, so a crafted body can't drive it into super-linear time,
|
|
||||||
// and it leaves no `<!--` behind. An unterminated `<!-- …` drops to end-of-string.
|
|
||||||
const stripComments = (s) => {
|
|
||||||
let out = "";
|
|
||||||
let i = 0;
|
|
||||||
for (;;) {
|
|
||||||
const start = s.indexOf("<!--", i);
|
|
||||||
if (start === -1) {
|
|
||||||
out += s.slice(i);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
out += s.slice(i, start);
|
|
||||||
const end = s.indexOf("-->", start + 4);
|
|
||||||
if (end === -1) break; // unterminated comment: drop the rest
|
|
||||||
i = end + 3;
|
|
||||||
}
|
|
||||||
return out.trim();
|
|
||||||
};
|
|
||||||
|
|
||||||
// Grab the text under a heading whose title contains `keyword`, up to the next heading
|
|
||||||
// or the end of the body.
|
|
||||||
const section = (keyword) => {
|
|
||||||
const re = new RegExp(
|
|
||||||
`(?:^|\\n)#{1,4}\\s*[^\\n]*${keyword}[^\\n]*\\n([\\s\\S]*?)(?=\\n#{1,4}\\s|$)`,
|
|
||||||
"i",
|
|
||||||
);
|
|
||||||
const m = body.match(re);
|
|
||||||
return m ? m[1] : null;
|
|
||||||
};
|
|
||||||
|
|
||||||
const isFilled = (content) => {
|
|
||||||
if (content == null) return false;
|
|
||||||
// Template guidance lives in HTML comments; once stripped, a real answer remains.
|
|
||||||
return stripComments(content).length > 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
const issues = [];
|
|
||||||
|
|
||||||
if (section("Description") === null)
|
|
||||||
issues.push("The **Description** section is missing.");
|
|
||||||
else if (!isFilled(section("Description")))
|
|
||||||
issues.push(
|
|
||||||
"The **Description** section is empty — describe what changed and why.",
|
|
||||||
);
|
|
||||||
|
|
||||||
if (section("Ticket") === null)
|
|
||||||
issues.push("The **Ticket / Issue** section is missing.");
|
|
||||||
else if (!isFilled(section("Ticket")))
|
|
||||||
issues.push(
|
|
||||||
"The **Ticket / Issue** section is empty — link an issue or write `N/A`.",
|
|
||||||
);
|
|
||||||
|
|
||||||
if (section("Testing Instructions") === null)
|
|
||||||
issues.push("The **Testing Instructions** section is missing.");
|
|
||||||
else if (!isFilled(section("Testing Instructions")))
|
|
||||||
issues.push(
|
|
||||||
"The **Testing Instructions** section is empty — tell reviewers how to test this, or write `N/A`.",
|
|
||||||
);
|
|
||||||
|
|
||||||
const checklist = section("Checklist");
|
|
||||||
if (checklist === null) {
|
|
||||||
issues.push("The **Checklist** section is missing.");
|
|
||||||
} else {
|
|
||||||
if (!/- \[x\][^\n]*contribution guidelines/i.test(checklist))
|
|
||||||
issues.push(
|
|
||||||
"Please read and tick the **contribution guidelines** checklist item.",
|
|
||||||
);
|
|
||||||
if (!isMaintainer && !/- \[x\][^\n]*declared if AI/i.test(checklist))
|
|
||||||
issues.push(
|
|
||||||
"Please tick the **AI disclosure** checklist item (declare whether AI was used).",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Require the Screenshots section when the PR changes UI (.tsx under app/ or components/).
|
|
||||||
// PR_FILES points to a newline list of changed paths (provided by the workflow).
|
|
||||||
const filesPath = process.env.PR_FILES;
|
|
||||||
if (filesPath && existsSync(filesPath)) {
|
|
||||||
const changed = readFileSync(filesPath, "utf8").split("\n").filter(Boolean);
|
|
||||||
const touchesUI = changed.some(
|
|
||||||
(f) =>
|
|
||||||
/^(app|components)\/.*\.tsx$/.test(f) && !/\.(test|spec)\.tsx$/.test(f),
|
|
||||||
);
|
|
||||||
if (touchesUI) {
|
|
||||||
const shots = section("Screenshots");
|
|
||||||
if (shots === null)
|
|
||||||
issues.push(
|
|
||||||
"This PR changes UI (`.tsx`) — add the **Screenshots / GIFs** section with before/after media.",
|
|
||||||
);
|
|
||||||
else if (!isFilled(shots))
|
|
||||||
issues.push(
|
|
||||||
"This PR changes UI — the **Screenshots / GIFs** section is empty; add screenshots (or write `N/A` if it's genuinely not visual).",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log(JSON.stringify(issues));
|
|
||||||
process.exit(issues.length ? 1 : 0);
|
|
||||||
236
scripts/detect-duplicate-issue.mjs
Normal file
@@ -0,0 +1,236 @@
|
|||||||
|
#!/usr/bin/env bun
|
||||||
|
/**
|
||||||
|
* Flags likely-duplicate issues when a new issue is opened, using lexical similarity
|
||||||
|
* (Jaccard over word sets of the title and body) — no API key, no embeddings.
|
||||||
|
*
|
||||||
|
* On a match it posts ONE comment listing the closest open issues and adds the
|
||||||
|
* "possible duplicate" label. If nothing is similar enough, it does nothing.
|
||||||
|
*
|
||||||
|
* Env:
|
||||||
|
* GITHUB_REPOSITORY owner/repo
|
||||||
|
* ISSUE_NUMBER the new issue number
|
||||||
|
* ISSUE_TITLE the new issue title
|
||||||
|
* ISSUE_BODY the new issue body
|
||||||
|
* GH_TOKEN/GITHUB_TOKEN for gh (provided in CI)
|
||||||
|
* DUP_THRESHOLD similarity threshold 0..1 (default 0.3)
|
||||||
|
* DUP_MAX max matches to report (default 5)
|
||||||
|
* DUP_FIXTURE optional path to a JSON array of {number,title,body} (local testing)
|
||||||
|
* DRY_RUN if set, print results instead of commenting/labelling
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { execFileSync } from "node:child_process";
|
||||||
|
import { readFileSync } from "node:fs";
|
||||||
|
|
||||||
|
// Parse a numeric env var, falling back to `def` only when unset/empty/NaN so an explicit 0 is honoured.
|
||||||
|
const numEnv = (name, def) => {
|
||||||
|
const raw = process.env[name];
|
||||||
|
if (raw === undefined || raw === "") return def;
|
||||||
|
const n = Number(raw);
|
||||||
|
return Number.isNaN(n) ? def : n;
|
||||||
|
};
|
||||||
|
|
||||||
|
const REPO = process.env.GITHUB_REPOSITORY || "streamyfin/streamyfin";
|
||||||
|
const NUMBER = numEnv("ISSUE_NUMBER", Number.NaN);
|
||||||
|
const TITLE = process.env.ISSUE_TITLE || "";
|
||||||
|
const BODY = process.env.ISSUE_BODY || "";
|
||||||
|
const THRESHOLD = numEnv("DUP_THRESHOLD", 0.3);
|
||||||
|
const MAX = numEnv("DUP_MAX", 5);
|
||||||
|
const DRY = !!process.env.DRY_RUN;
|
||||||
|
const LABEL = "possible duplicate";
|
||||||
|
const MARKER = "<!-- duplicate-detector -->";
|
||||||
|
|
||||||
|
// Generic stop words only — keep domain/feature/platform words (android, downloads,
|
||||||
|
// subtitles…) since those are exactly what makes two reports the same or different.
|
||||||
|
const STOP = new Set(
|
||||||
|
(
|
||||||
|
"a an the and or but if then of to in on at by for with from as is are was were be been being do does did " +
|
||||||
|
"it its this that these those i you we they me my your our their he she him her " +
|
||||||
|
"when while where what which who how why so just then than too very can could would should will " +
|
||||||
|
"not no nor only own same s t don dont im ive please thanks hi hello also still get got use used using " +
|
||||||
|
"app application streamyfin issue bug"
|
||||||
|
).split(/\s+/),
|
||||||
|
);
|
||||||
|
|
||||||
|
const stem = (w) => w.replace(/(ing|ed|es|s)$/, "");
|
||||||
|
|
||||||
|
const tokens = (s) =>
|
||||||
|
(s || "")
|
||||||
|
.toLowerCase()
|
||||||
|
.replace(/```[\s\S]*?```/g, " ") // drop code blocks
|
||||||
|
.replace(/<!--[\s\S]*?-->/g, " ") // drop html comments
|
||||||
|
.replace(/https?:\/\/\S+/g, " ") // drop urls
|
||||||
|
.replace(/[^a-z0-9\s]/g, " ")
|
||||||
|
.split(/\s+/)
|
||||||
|
.filter((w) => w.length > 2 && !STOP.has(w))
|
||||||
|
.map(stem)
|
||||||
|
.filter((w) => w.length > 2);
|
||||||
|
|
||||||
|
const jaccard = (a, b) => {
|
||||||
|
const A = new Set(a);
|
||||||
|
const B = new Set(b);
|
||||||
|
if (!A.size || !B.size) return 0;
|
||||||
|
let inter = 0;
|
||||||
|
for (const x of A) if (B.has(x)) inter++;
|
||||||
|
return inter / (A.size + B.size - inter);
|
||||||
|
};
|
||||||
|
|
||||||
|
const newTitle = tokens(TITLE);
|
||||||
|
const newBody = tokens(BODY);
|
||||||
|
const score = (o) =>
|
||||||
|
0.6 * jaccard(newTitle, tokens(o.title)) +
|
||||||
|
0.4 * jaccard(newBody, tokens(o.body));
|
||||||
|
|
||||||
|
// fetch open issues (excluding PRs and the new issue itself)
|
||||||
|
let issues;
|
||||||
|
if (process.env.DUP_FIXTURE) {
|
||||||
|
issues = JSON.parse(readFileSync(process.env.DUP_FIXTURE, "utf8"));
|
||||||
|
} else {
|
||||||
|
const raw = execFileSync(
|
||||||
|
"gh",
|
||||||
|
[
|
||||||
|
"api",
|
||||||
|
`repos/${REPO}/issues`,
|
||||||
|
"--paginate",
|
||||||
|
"-X",
|
||||||
|
"GET",
|
||||||
|
"-f",
|
||||||
|
"state=open",
|
||||||
|
"-f",
|
||||||
|
"per_page=100",
|
||||||
|
"--jq",
|
||||||
|
".[] | select(.pull_request | not) | {number, title, body}",
|
||||||
|
],
|
||||||
|
{ encoding: "utf8", maxBuffer: 1e8 },
|
||||||
|
);
|
||||||
|
issues = raw
|
||||||
|
.split("\n")
|
||||||
|
.filter(Boolean)
|
||||||
|
.map((l) => JSON.parse(l));
|
||||||
|
}
|
||||||
|
|
||||||
|
const matches = issues
|
||||||
|
.filter((o) => o.number !== NUMBER)
|
||||||
|
.map((o) => ({ ...o, s: score(o) }))
|
||||||
|
.filter((o) => o.s >= THRESHOLD)
|
||||||
|
.sort((a, b) => b.s - a.s)
|
||||||
|
.slice(0, MAX);
|
||||||
|
|
||||||
|
if (!matches.length) {
|
||||||
|
console.log("No likely duplicates found.");
|
||||||
|
process.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Neutralise other issues' titles before echoing them back: break @mentions and
|
||||||
|
// strip markdown/HTML control chars so a maliciously-named issue can't ping people
|
||||||
|
// or inject formatting into our comment. GitHub linkifies "#123" on its own.
|
||||||
|
const safeTitle = (t) =>
|
||||||
|
(t || "")
|
||||||
|
.replace(/@/g, "@")
|
||||||
|
.replace(/[`<>|*_~[\]]/g, " ")
|
||||||
|
.replace(/\s+/g, " ")
|
||||||
|
.trim()
|
||||||
|
.slice(0, 140);
|
||||||
|
const list = matches
|
||||||
|
.map(
|
||||||
|
(m) =>
|
||||||
|
`- #${m.number} — ${safeTitle(m.title)} (≈ ${Math.round(m.s * 100)}% similar)`,
|
||||||
|
)
|
||||||
|
.join("\n");
|
||||||
|
const comment = [
|
||||||
|
MARKER,
|
||||||
|
"🔍 **This looks like it might be a duplicate.** Possibly related open issues:",
|
||||||
|
"",
|
||||||
|
list,
|
||||||
|
"",
|
||||||
|
"If yours is different, ignore this — a maintainer will confirm. Otherwise, please 👍 the existing issue and add any extra details there.",
|
||||||
|
].join("\n");
|
||||||
|
|
||||||
|
console.log(`Found ${matches.length} possible duplicate(s):\n${list}`);
|
||||||
|
|
||||||
|
if (DRY) {
|
||||||
|
console.log("\nDRY_RUN: not commenting/labelling.");
|
||||||
|
process.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Live mode needs a real issue number; refuse rather than POST to /issues/NaN/...
|
||||||
|
if (!Number.isInteger(NUMBER) || NUMBER <= 0) {
|
||||||
|
console.error(
|
||||||
|
`Invalid ISSUE_NUMBER ${JSON.stringify(process.env.ISSUE_NUMBER)} — refusing to comment.`,
|
||||||
|
);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Idempotency: skip if we've already flagged this issue (guards re-runs / future triggers).
|
||||||
|
const priorComments = execFileSync(
|
||||||
|
"gh",
|
||||||
|
[
|
||||||
|
"api",
|
||||||
|
`repos/${REPO}/issues/${NUMBER}/comments`,
|
||||||
|
"--paginate",
|
||||||
|
"--jq",
|
||||||
|
".[].body",
|
||||||
|
],
|
||||||
|
{ encoding: "utf8", maxBuffer: 1e8 },
|
||||||
|
);
|
||||||
|
if (priorComments.includes(MARKER)) {
|
||||||
|
console.log("Already flagged (marker present); skipping.");
|
||||||
|
process.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
execFileSync(
|
||||||
|
"gh",
|
||||||
|
[
|
||||||
|
"api",
|
||||||
|
"-X",
|
||||||
|
"POST",
|
||||||
|
`repos/${REPO}/issues/${NUMBER}/comments`,
|
||||||
|
"-f",
|
||||||
|
`body=${comment}`,
|
||||||
|
],
|
||||||
|
{ stdio: "ignore" },
|
||||||
|
);
|
||||||
|
try {
|
||||||
|
execFileSync(
|
||||||
|
"gh",
|
||||||
|
[
|
||||||
|
"api",
|
||||||
|
"-X",
|
||||||
|
"POST",
|
||||||
|
`repos/${REPO}/issues/${NUMBER}/labels`,
|
||||||
|
"-f",
|
||||||
|
`labels[]=${LABEL}`,
|
||||||
|
],
|
||||||
|
{ stdio: "ignore" },
|
||||||
|
);
|
||||||
|
} catch {
|
||||||
|
// label may not exist yet — create then add
|
||||||
|
execFileSync(
|
||||||
|
"gh",
|
||||||
|
[
|
||||||
|
"api",
|
||||||
|
"-X",
|
||||||
|
"POST",
|
||||||
|
`repos/${REPO}/labels`,
|
||||||
|
"-f",
|
||||||
|
`name=${LABEL}`,
|
||||||
|
"-f",
|
||||||
|
"color=fbca04",
|
||||||
|
"-f",
|
||||||
|
"description=Automatically flagged as a possible duplicate",
|
||||||
|
],
|
||||||
|
{ stdio: "ignore" },
|
||||||
|
);
|
||||||
|
execFileSync(
|
||||||
|
"gh",
|
||||||
|
[
|
||||||
|
"api",
|
||||||
|
"-X",
|
||||||
|
"POST",
|
||||||
|
`repos/${REPO}/issues/${NUMBER}/labels`,
|
||||||
|
"-f",
|
||||||
|
`labels[]=${LABEL}`,
|
||||||
|
],
|
||||||
|
{ stdio: "ignore" },
|
||||||
|
);
|
||||||
|
}
|
||||||
|
console.log("Commented and labelled.");
|
||||||
46
scripts/i18n-keys.config.json
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
{
|
||||||
|
"localesDir": "translations",
|
||||||
|
"sourceLocale": "en",
|
||||||
|
"srcDirs": [
|
||||||
|
"app",
|
||||||
|
"components",
|
||||||
|
"hooks",
|
||||||
|
"providers",
|
||||||
|
"utils",
|
||||||
|
"modules",
|
||||||
|
"packages",
|
||||||
|
"constants"
|
||||||
|
],
|
||||||
|
"srcExtensions": [".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs"],
|
||||||
|
"excludeDirs": [
|
||||||
|
"node_modules",
|
||||||
|
"ios",
|
||||||
|
"android",
|
||||||
|
".expo",
|
||||||
|
".git",
|
||||||
|
"dist",
|
||||||
|
"build",
|
||||||
|
"translations"
|
||||||
|
],
|
||||||
|
"_ignoreUnusedNote": "Keys present in en.json but referenced by no t() call — allow-listed so the unused-key cleanup keeps them. Two kinds: (1) ORPHANS of features that already exist but render hardcoded strings or use other keys — watchlists.* (add/remove, handled by WatchlistSheet via hooks), pin.* (confirm step of the existing PIN setup flow), player.* (in-player subtitle search, swipe-down hint, stop-playback confirm); these should be wired to the live UI or removed in a follow-up i18n pass, not assumed to be future work. (2) GENUINELY PLANNED, tracked by issues: home.settings.other.show_large_home_carousel (#1702 media-bar), home.settings.logs.delete_all_logs (#1703 iOS logs fix), home.suggested_episodes (#1704).",
|
||||||
|
"ignoreUnused": [
|
||||||
|
"watchlists.add_to_watchlist",
|
||||||
|
"watchlists.remove_from_watchlist",
|
||||||
|
"watchlists.create_one_first",
|
||||||
|
"watchlists.no_compatible_watchlists",
|
||||||
|
"pin.confirm_pin",
|
||||||
|
"pin.pins_dont_match",
|
||||||
|
"player.search_subtitles",
|
||||||
|
"player.subtitle_search",
|
||||||
|
"player.subtitle_download_hint",
|
||||||
|
"player.subtitle_tracks",
|
||||||
|
"player.using_jellyfin_server",
|
||||||
|
"player.swipe_down_settings",
|
||||||
|
"player.stopPlayback",
|
||||||
|
"player.stopPlayingTitle",
|
||||||
|
"player.stopPlayingConfirm",
|
||||||
|
"home.settings.other.show_large_home_carousel",
|
||||||
|
"home.settings.logs.delete_all_logs",
|
||||||
|
"home.suggested_episodes"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -261,43 +261,6 @@
|
|||||||
"None": "لا شيء",
|
"None": "لا شيء",
|
||||||
"OnlyForced": "فقط الإجبارية"
|
"OnlyForced": "فقط الإجبارية"
|
||||||
},
|
},
|
||||||
"text_color": "لون النص",
|
|
||||||
"background_color": "لون الخلفية",
|
|
||||||
"outline_color": "لون إطار الخط",
|
|
||||||
"outline_thickness": "سمك إطار الخط",
|
|
||||||
"background_opacity": "شفافية الخلفية",
|
|
||||||
"outline_opacity": "شفافية إطار الخط",
|
|
||||||
"bold_text": "خط عريض",
|
|
||||||
"colors": {
|
|
||||||
"Black": "أسود",
|
|
||||||
"Gray": "رمادي",
|
|
||||||
"Silver": "فضي",
|
|
||||||
"White": "أبيض",
|
|
||||||
"Maroon": "أحمر داكن",
|
|
||||||
"Red": "أحمر",
|
|
||||||
"Fuchsia": "وردي",
|
|
||||||
"Yellow": "أصفر",
|
|
||||||
"Olive": "أخضر زيتوني",
|
|
||||||
"Green": "أخضر",
|
|
||||||
"Teal": "أزرق مخضر",
|
|
||||||
"Lime": "ليموني",
|
|
||||||
"Purple": "بنفسجي",
|
|
||||||
"Navy": "كحلي",
|
|
||||||
"Blue": "أزرق",
|
|
||||||
"Aqua": "أزرق بحري"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "لا شيء",
|
|
||||||
"Thin": "نحيف",
|
|
||||||
"Normal": "عادي",
|
|
||||||
"Thick": "سميك"
|
|
||||||
},
|
|
||||||
"subtitle_color": "لون الترجمة",
|
|
||||||
"subtitle_background_color": "لون الخلفية",
|
|
||||||
"subtitle_font": "خط الترجمة",
|
|
||||||
"ksplayer_title": "إعدادات KSPlayer",
|
|
||||||
"hardware_decode": "فك الترميز بواسطة الجهاز",
|
|
||||||
"hardware_decode_description": "استخدم تسريع العتاد لفك ترميز الفيديو. قم بتعطيله إذا واجهت مشكلات في التشغيل.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +278,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "إعدادات ترجمة VLC",
|
|
||||||
"hint": "تخصيص مظهر الترجمة لمشغل VLC. تصبح التغييرات سارية المفعول عند التشغيل التالي.",
|
|
||||||
"text_color": "لون النص",
|
|
||||||
"background_color": "لون الخلفية",
|
|
||||||
"background_opacity": "شفافية الخلفية",
|
|
||||||
"outline_color": "لون إطار الخط",
|
|
||||||
"outline_opacity": "شفافية إطار الخط",
|
|
||||||
"outline_thickness": "سمك إطار الخط",
|
|
||||||
"bold": "خط عريض",
|
|
||||||
"margin": "الهامش السفلي"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "مشغل الفيديو",
|
|
||||||
"video_player": "مشغل الفيديو",
|
|
||||||
"video_player_description": "اختر مشغل الفيديو الذي سيتم استخدامه على نظام iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "أخرى",
|
"other_title": "أخرى",
|
||||||
"video_orientation": "اتجاه الفيديو",
|
"video_orientation": "اتجاه الفيديو",
|
||||||
@@ -351,11 +295,6 @@
|
|||||||
"UNKNOWN": "غير معروف"
|
"UNKNOWN": "غير معروف"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "المنطقة الآمنة لعناصر التحكم",
|
"safe_area_in_controls": "المنطقة الآمنة لعناصر التحكم",
|
||||||
"video_player": "مشغل الفيديو",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (تجريبي + صورة داخل صورة)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "إظهار روابط القائمة المخصصة",
|
"show_custom_menu_links": "إظهار روابط القائمة المخصصة",
|
||||||
"show_large_home_carousel": "إظهار شريط العرض الكبير (تجريبي)",
|
"show_large_home_carousel": "إظهار شريط العرض الكبير (تجريبي)",
|
||||||
"hide_libraries": "إخفاء المكتبات",
|
"hide_libraries": "إخفاء المكتبات",
|
||||||
@@ -367,9 +306,6 @@
|
|||||||
"max_auto_play_episode_count": "الحد الأقصى لعدد الحلقات التي يتم تشغيلها تلقائيًا",
|
"max_auto_play_episode_count": "الحد الأقصى لعدد الحلقات التي يتم تشغيلها تلقائيًا",
|
||||||
"disabled": "معطل"
|
"disabled": "معطل"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "التنزيلات"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "الموسيقى",
|
"title": "الموسيقى",
|
||||||
"playback_title": "التشغيل",
|
"playback_title": "التشغيل",
|
||||||
@@ -413,23 +349,18 @@
|
|||||||
"read_more_about_marlin": "اقرأ المزيد عن مارلن.",
|
"read_more_about_marlin": "اقرأ المزيد عن مارلن.",
|
||||||
"save_button": "حفظ",
|
"save_button": "حفظ",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "تم الحفظ",
|
"saved": "تم الحفظ"
|
||||||
"refreshed": "تم تحديث الإعدادات من الخادم"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "تحديث الإعدادات من الخادم"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "تفعيل Streamystats",
|
|
||||||
"disable_streamystats": "تعطيل Streamystats",
|
"disable_streamystats": "تعطيل Streamystats",
|
||||||
"enable_search": "استخدم للبحث",
|
"enable_search": "استخدم للبحث",
|
||||||
"url": "الرابط",
|
"url": "الرابط",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "أدخل رابط خادم Streamystats الخاص بك. يجب أن يتضمن الرابط البروتوكول http أو https مع رقم المنفذ اختيارياً.",
|
"streamystats_search_hint": "أدخل رابط خادم Streamystats الخاص بك. يجب أن يتضمن الرابط البروتوكول http أو https مع رقم المنفذ اختيارياً.",
|
||||||
"read_more_about_streamystats": "اقرأ المزيد عن Streamystats.",
|
"read_more_about_streamystats": "اقرأ المزيد عن Streamystats.",
|
||||||
"save_button": "حفظ",
|
|
||||||
"save": "حفظ",
|
"save": "حفظ",
|
||||||
"features_title": "المميزات",
|
"features_title": "المميزات",
|
||||||
"home_sections_title": "أقسام الرئيسية",
|
|
||||||
"enable_movie_recommendations": "توصيات الأفلام",
|
"enable_movie_recommendations": "توصيات الأفلام",
|
||||||
"enable_series_recommendations": "توصيات المسلسلات",
|
"enable_series_recommendations": "توصيات المسلسلات",
|
||||||
"enable_promoted_watchlists": "قوائم مشاهدة مختارة",
|
"enable_promoted_watchlists": "قوائم مشاهدة مختارة",
|
||||||
@@ -445,8 +376,7 @@
|
|||||||
"refresh_from_server": "تحديث الإعدادات من الخادم"
|
"refresh_from_server": "تحديث الإعدادات من الخادم"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "تفعيل الربط مع قائمة المشاهدة الخاصة بنا",
|
"watchlist_enabler": "تفعيل الربط مع قائمة المشاهدة الخاصة بنا"
|
||||||
"watchlist_button": "تبديل حالة ربط قائمة المشاهدة"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +387,6 @@
|
|||||||
"delete_all_downloaded_files": "حذف جميع الملفات التي تم تنزيلها",
|
"delete_all_downloaded_files": "حذف جميع الملفات التي تم تنزيلها",
|
||||||
"music_cache_title": "التخزين المؤقت للموسيقى",
|
"music_cache_title": "التخزين المؤقت للموسيقى",
|
||||||
"music_cache_description": "تخزين الأغاني تلقائياً أثناء الاستماع لضمان تشغيل أكثر سلاسة ودعم الاستماع بدون اتصال",
|
"music_cache_description": "تخزين الأغاني تلقائياً أثناء الاستماع لضمان تشغيل أكثر سلاسة ودعم الاستماع بدون اتصال",
|
||||||
"enable_music_cache": "تمكين التخزين المؤقت للموسيقى",
|
|
||||||
"clear_music_cache": "مسح التخزين المؤقت للموسيقى",
|
"clear_music_cache": "مسح التخزين المؤقت للموسيقى",
|
||||||
"music_cache_size": "تم تخزين {{size}} مؤقتاً",
|
"music_cache_size": "تم تخزين {{size}} مؤقتاً",
|
||||||
"music_cache_cleared": "تم مسح التخزين المؤقت للموسيقى",
|
"music_cache_cleared": "تم مسح التخزين المؤقت للموسيقى",
|
||||||
@@ -467,8 +396,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -490,15 +417,12 @@
|
|||||||
"system": "النظام"
|
"system": "النظام"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "خطأ في حذف الملفات",
|
"error_deleting_files": "خطأ في حذف الملفات"
|
||||||
"background_downloads_enabled": "تم تفعيل التنزيلات في الخلفية",
|
|
||||||
"background_downloads_disabled": "تم تعطيل التنزيلات في الخلفية"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -508,6 +432,10 @@
|
|||||||
"4_hours": "4 hours",
|
"4_hours": "4 hours",
|
||||||
"24_hours": "24 hours"
|
"24_hours": "24 hours"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"title": "Dashboard",
|
||||||
|
"sessions_title": "Sessions"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sessions": {
|
"sessions": {
|
||||||
@@ -516,15 +444,12 @@
|
|||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"downloads_title": "التنزيلات",
|
"downloads_title": "التنزيلات",
|
||||||
"tvseries": "مسلسلات",
|
"series": "مسلسلات",
|
||||||
"movies": "أفلام",
|
"movies": "أفلام",
|
||||||
"queue": "قائمة الانتظار",
|
|
||||||
"other_media": "وسائط أخرى",
|
"other_media": "وسائط أخرى",
|
||||||
"queue_hint": "ستفقد قائمة الانتظار والتنزيلات عند إعادة تشغيل التطبيق",
|
|
||||||
"no_items_in_queue": "لا توجد عناصر في قائمة الانتظار",
|
|
||||||
"no_downloaded_items": "لا توجد عناصر تم تنزيلها",
|
"no_downloaded_items": "لا توجد عناصر تم تنزيلها",
|
||||||
"delete_all_movies_button": "حذف جميع الأفلام",
|
"delete_all_movies_button": "حذف جميع الأفلام",
|
||||||
"delete_all_tvseries_button": "حذف جميع المسلسلات",
|
"delete_all_series_button": "حذف جميع المسلسلات",
|
||||||
"delete_all_button": "حذف الكل",
|
"delete_all_button": "حذف الكل",
|
||||||
"delete_all_other_media_button": "حذف الوسائط الأخرى",
|
"delete_all_other_media_button": "حذف الوسائط الأخرى",
|
||||||
"active_download": "التنزيل الجاري",
|
"active_download": "التنزيل الجاري",
|
||||||
@@ -542,17 +467,12 @@
|
|||||||
"you_are_not_allowed_to_download_files": "غير مسموح لك بتنزيل الملفات.",
|
"you_are_not_allowed_to_download_files": "غير مسموح لك بتنزيل الملفات.",
|
||||||
"deleted_all_movies_successfully": "تم حذف جميع الأفلام بنجاح!",
|
"deleted_all_movies_successfully": "تم حذف جميع الأفلام بنجاح!",
|
||||||
"failed_to_delete_all_movies": "فشل حذف جميع الأفلام",
|
"failed_to_delete_all_movies": "فشل حذف جميع الأفلام",
|
||||||
"deleted_all_tvseries_successfully": "تم حذف جميع المسلسلات بنجاح!",
|
"deleted_all_series_successfully": "تم حذف جميع المسلسلات بنجاح!",
|
||||||
"failed_to_delete_all_tvseries": "فشل حذف جميع المسلسلات",
|
"failed_to_delete_all_series": "فشل حذف جميع المسلسلات",
|
||||||
"deleted_media_successfully": "تم حذف الوسائط الأخرى بنجاح!",
|
"deleted_media_successfully": "تم حذف الوسائط الأخرى بنجاح!",
|
||||||
"failed_to_delete_media": "فشل حذف الوسائط الأخرى",
|
"failed_to_delete_media": "فشل حذف الوسائط الأخرى",
|
||||||
"download_deleted": "تم حذف التنزيل",
|
|
||||||
"download_cancelled": "تم إلغاء التنزيل",
|
"download_cancelled": "تم إلغاء التنزيل",
|
||||||
"could_not_delete_download": "تعذر حذف التنزيل",
|
"could_not_delete_download": "تعذر حذف التنزيل",
|
||||||
"download_paused": "تم إيقاف التنزيل مؤقتًا",
|
|
||||||
"could_not_pause_download": "تعذر إيقاف التنزيل مؤقتًا",
|
|
||||||
"download_resumed": "تم استئناف التنزيل",
|
|
||||||
"could_not_resume_download": "تعذر استئناف التنزيل",
|
|
||||||
"download_completed": "اكتمل التنزيل",
|
"download_completed": "اكتمل التنزيل",
|
||||||
"download_failed": "فشل التنزيل",
|
"download_failed": "فشل التنزيل",
|
||||||
"download_failed_for_item": "فشل تنزيل {{item}} - {{error}}",
|
"download_failed_for_item": "فشل تنزيل {{item}} - {{error}}",
|
||||||
@@ -562,10 +482,7 @@
|
|||||||
"item_already_downloading": "{{item}} قيد التنزيل بالفعل",
|
"item_already_downloading": "{{item}} قيد التنزيل بالفعل",
|
||||||
"all_files_deleted": "تم حذف جميع التنزيلات بنجاح",
|
"all_files_deleted": "تم حذف جميع التنزيلات بنجاح",
|
||||||
"files_deleted_by_type": "تم حذف {{count}} {{type}}",
|
"files_deleted_by_type": "تم حذف {{count}} {{type}}",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "تم حذف جميع الملفات والمجلدات والمهام بنجاح",
|
|
||||||
"failed_to_clean_cache_directory": "فشل تنظيف مجلد ذاكرة التخزين المؤقت",
|
|
||||||
"could_not_get_download_url_for_item": "تعذر الحصول على عنوان URL للتنزيل لـ{{itemName}}",
|
"could_not_get_download_url_for_item": "تعذر الحصول على عنوان URL للتنزيل لـ{{itemName}}",
|
||||||
"go_to_downloads": "الذهاب إلى التنزيلات",
|
|
||||||
"file_deleted": "تم حذف {{item}}"
|
"file_deleted": "تم حذف {{item}}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +500,17 @@
|
|||||||
"none": "لا شيء",
|
"none": "لا شيء",
|
||||||
"track": "أغنية",
|
"track": "أغنية",
|
||||||
"cancel": "إلغاء",
|
"cancel": "إلغاء",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "حذف",
|
"delete": "حذف",
|
||||||
"ok": "حسناً",
|
"ok": "حسناً",
|
||||||
"remove": "إزالة",
|
"remove": "إزالة",
|
||||||
"next": "التالي",
|
|
||||||
"back": "رجوع",
|
"back": "رجوع",
|
||||||
"continue": "متابعة",
|
"continue": "متابعة",
|
||||||
"verifying": "جارٍ التحقق...",
|
"verifying": "جارٍ التحقق...",
|
||||||
"login": "Login",
|
"login": "Login",
|
||||||
"refresh": "Refresh"
|
"episodes": "Episodes",
|
||||||
|
"movies": "Movies",
|
||||||
|
"loading": "Loading…",
|
||||||
|
"seeAll": "See all"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "بحث...",
|
"search": "بحث...",
|
||||||
@@ -691,10 +609,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "تعذر إنشاء بث لـChromecast",
|
"could_not_create_stream_for_chromecast": "تعذر إنشاء بث لـChromecast",
|
||||||
"message_from_server": "رسالة من الخادم: {{message}}",
|
"message_from_server": "رسالة من الخادم: {{message}}",
|
||||||
"next_episode": "الحلقة التالية",
|
"next_episode": "الحلقة التالية",
|
||||||
"refresh_tracks": "تحديث المسارات",
|
|
||||||
"audio_tracks": "مسارات الصوت:",
|
|
||||||
"playback_state": "حالة التشغيل:",
|
|
||||||
"index": "الفِهْرِس:",
|
|
||||||
"continue_watching": "متابعة المشاهدة",
|
"continue_watching": "متابعة المشاهدة",
|
||||||
"go_back": "رجوع",
|
"go_back": "رجوع",
|
||||||
"downloaded_file_title": "تم تنزيل هذا الملف",
|
"downloaded_file_title": "تم تنزيل هذا الملف",
|
||||||
@@ -723,7 +637,8 @@
|
|||||||
"stopPlayback": "Stop Playback",
|
"stopPlayback": "Stop Playback",
|
||||||
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
||||||
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
||||||
"downloaded": "Downloaded"
|
"downloaded": "Downloaded",
|
||||||
|
"missing_parameters": "Missing playback parameters"
|
||||||
},
|
},
|
||||||
"chapters": {
|
"chapters": {
|
||||||
"title": "Chapters",
|
"title": "Chapters",
|
||||||
@@ -761,7 +676,6 @@
|
|||||||
"show_more": "عرض المزيد",
|
"show_more": "عرض المزيد",
|
||||||
"show_less": "عرض أقل",
|
"show_less": "عرض أقل",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -784,7 +698,8 @@
|
|||||||
"resume_playback": "Resume Playback",
|
"resume_playback": "Resume Playback",
|
||||||
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
||||||
"play_from_start": "Play from Start",
|
"play_from_start": "Play from Start",
|
||||||
"continue_from": "Continue from {{time}}"
|
"continue_from": "Continue from {{time}}",
|
||||||
|
"no_data_available": "No data available"
|
||||||
},
|
},
|
||||||
"live_tv": {
|
"live_tv": {
|
||||||
"next": "التالي",
|
"next": "التالي",
|
||||||
@@ -888,13 +803,9 @@
|
|||||||
"playlists": "قوائم التشغيل",
|
"playlists": "قوائم التشغيل",
|
||||||
"tracks": "الأغاني"
|
"tracks": "الأغاني"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "الكل"
|
|
||||||
},
|
|
||||||
"recently_added": "أضيف مؤخرًا",
|
"recently_added": "أضيف مؤخرًا",
|
||||||
"recently_played": "تم تشغيله مؤخرًا",
|
"recently_played": "تم تشغيله مؤخرًا",
|
||||||
"frequently_played": "الأكثر تشغيلاً",
|
"frequently_played": "الأكثر تشغيلاً",
|
||||||
"explore": "اكتشف",
|
|
||||||
"top_tracks": "أفضل الأغاني",
|
"top_tracks": "أفضل الأغاني",
|
||||||
"play": "تشغيل",
|
"play": "تشغيل",
|
||||||
"shuffle": "ترتيب عشوائي",
|
"shuffle": "ترتيب عشوائي",
|
||||||
@@ -1028,7 +939,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -261,43 +261,6 @@
|
|||||||
"None": "Cap",
|
"None": "Cap",
|
||||||
"OnlyForced": "Només els forçats"
|
"OnlyForced": "Només els forçats"
|
||||||
},
|
},
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"bold_text": "Bold Text",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Black",
|
|
||||||
"Gray": "Gray",
|
|
||||||
"Silver": "Silver",
|
|
||||||
"White": "White",
|
|
||||||
"Maroon": "Maroon",
|
|
||||||
"Red": "Red",
|
|
||||||
"Fuchsia": "Fuchsia",
|
|
||||||
"Yellow": "Yellow",
|
|
||||||
"Olive": "Olive",
|
|
||||||
"Green": "Green",
|
|
||||||
"Teal": "Teal",
|
|
||||||
"Lime": "Lime",
|
|
||||||
"Purple": "Purple",
|
|
||||||
"Navy": "Navy",
|
|
||||||
"Blue": "Blue",
|
|
||||||
"Aqua": "Aqua"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "Cap",
|
|
||||||
"Thin": "Thin",
|
|
||||||
"Normal": "Normal",
|
|
||||||
"Thick": "Thick"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Subtitle Color",
|
|
||||||
"subtitle_background_color": "Background Color",
|
|
||||||
"subtitle_font": "Subtitle Font",
|
|
||||||
"ksplayer_title": "KSPlayer Settings",
|
|
||||||
"hardware_decode": "Hardware Decoding",
|
|
||||||
"hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +278,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC Subtitle Settings",
|
|
||||||
"hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.",
|
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"bold": "Bold Text",
|
|
||||||
"margin": "Bottom Margin"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Video Player",
|
|
||||||
"video_player": "Video Player",
|
|
||||||
"video_player_description": "Choose which video player to use on iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Altres",
|
"other_title": "Altres",
|
||||||
"video_orientation": "Orientació del vídeo",
|
"video_orientation": "Orientació del vídeo",
|
||||||
@@ -351,11 +295,6 @@
|
|||||||
"UNKNOWN": "Desconeguda"
|
"UNKNOWN": "Desconeguda"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Àrea segura als controls",
|
"safe_area_in_controls": "Àrea segura als controls",
|
||||||
"video_player": "Reproductor de vídeo",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Experimental + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Mostrar enllaços del menú personalitzats",
|
"show_custom_menu_links": "Mostrar enllaços del menú personalitzats",
|
||||||
"show_large_home_carousel": "Show Large Home Carousel (beta)",
|
"show_large_home_carousel": "Show Large Home Carousel (beta)",
|
||||||
"hide_libraries": "Oculta biblioteques",
|
"hide_libraries": "Oculta biblioteques",
|
||||||
@@ -367,9 +306,6 @@
|
|||||||
"max_auto_play_episode_count": "Nombre màxim d'episodis de reproducció automàtica",
|
"max_auto_play_episode_count": "Nombre màxim d'episodis de reproducció automàtica",
|
||||||
"disabled": "Desactivat"
|
"disabled": "Desactivat"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Descàrregues"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Music",
|
"title": "Music",
|
||||||
"playback_title": "Playback",
|
"playback_title": "Playback",
|
||||||
@@ -413,23 +349,18 @@
|
|||||||
"read_more_about_marlin": "Mostra més sobre Marlin.",
|
"read_more_about_marlin": "Mostra més sobre Marlin.",
|
||||||
"save_button": "Desa",
|
"save_button": "Desa",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Desat",
|
"saved": "Desat"
|
||||||
"refreshed": "Settings refreshed from server"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Refresh Settings from Server"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Enable Streamystats",
|
|
||||||
"disable_streamystats": "Disable Streamystats",
|
"disable_streamystats": "Disable Streamystats",
|
||||||
"enable_search": "Use for Search",
|
"enable_search": "Use for Search",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
||||||
"read_more_about_streamystats": "Read More About Streamystats.",
|
"read_more_about_streamystats": "Read More About Streamystats.",
|
||||||
"save_button": "Save",
|
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"features_title": "Features",
|
"features_title": "Features",
|
||||||
"home_sections_title": "Home Sections",
|
|
||||||
"enable_movie_recommendations": "Movie Recommendations",
|
"enable_movie_recommendations": "Movie Recommendations",
|
||||||
"enable_series_recommendations": "Series Recommendations",
|
"enable_series_recommendations": "Series Recommendations",
|
||||||
"enable_promoted_watchlists": "Promoted Watchlists",
|
"enable_promoted_watchlists": "Promoted Watchlists",
|
||||||
@@ -445,8 +376,7 @@
|
|||||||
"refresh_from_server": "Refresh Settings from Server"
|
"refresh_from_server": "Refresh Settings from Server"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Enable our Watchlist integration",
|
"watchlist_enabler": "Enable our Watchlist integration"
|
||||||
"watchlist_button": "Toggle Watchlist integration"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +387,6 @@
|
|||||||
"delete_all_downloaded_files": "Suprimeix tots els fitxers descarregats",
|
"delete_all_downloaded_files": "Suprimeix tots els fitxers descarregats",
|
||||||
"music_cache_title": "Music Cache",
|
"music_cache_title": "Music Cache",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Enable Music Cache",
|
|
||||||
"clear_music_cache": "Clear Music Cache",
|
"clear_music_cache": "Clear Music Cache",
|
||||||
"music_cache_size": "{{size}} cached",
|
"music_cache_size": "{{size}} cached",
|
||||||
"music_cache_cleared": "Music cache cleared",
|
"music_cache_cleared": "Music cache cleared",
|
||||||
@@ -467,8 +396,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -490,15 +417,12 @@
|
|||||||
"system": "Sistema"
|
"system": "Sistema"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Error en suprimir fitxers",
|
"error_deleting_files": "Error en suprimir fitxers"
|
||||||
"background_downloads_enabled": "Descàrregues en segon pla activades",
|
|
||||||
"background_downloads_disabled": "Descàrregues en segon pla desactivades"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -508,6 +432,10 @@
|
|||||||
"4_hours": "4 hours",
|
"4_hours": "4 hours",
|
||||||
"24_hours": "24 hours"
|
"24_hours": "24 hours"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"title": "Dashboard",
|
||||||
|
"sessions_title": "Sessions"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sessions": {
|
"sessions": {
|
||||||
@@ -516,15 +444,12 @@
|
|||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"downloads_title": "Descàrregues",
|
"downloads_title": "Descàrregues",
|
||||||
"tvseries": "Sèries",
|
"series": "Sèries",
|
||||||
"movies": "Pel·lícules",
|
"movies": "Pel·lícules",
|
||||||
"queue": "Cua",
|
|
||||||
"other_media": "Other media",
|
"other_media": "Other media",
|
||||||
"queue_hint": "La cua i les descàrregues es perdran en reiniciar l'aplicació",
|
|
||||||
"no_items_in_queue": "No hi ha elements a la cua",
|
|
||||||
"no_downloaded_items": "No hi ha elements descarregats",
|
"no_downloaded_items": "No hi ha elements descarregats",
|
||||||
"delete_all_movies_button": "Suprimeix totes les pel·lícules",
|
"delete_all_movies_button": "Suprimeix totes les pel·lícules",
|
||||||
"delete_all_tvseries_button": "Suprimeix totes les sèries",
|
"delete_all_series_button": "Suprimeix totes les sèries",
|
||||||
"delete_all_button": "Suprimeix-ho tot",
|
"delete_all_button": "Suprimeix-ho tot",
|
||||||
"delete_all_other_media_button": "Delete other media",
|
"delete_all_other_media_button": "Delete other media",
|
||||||
"active_download": "Descàrrega activa",
|
"active_download": "Descàrrega activa",
|
||||||
@@ -542,17 +467,12 @@
|
|||||||
"you_are_not_allowed_to_download_files": "No teniu permís per descarregar fitxers.",
|
"you_are_not_allowed_to_download_files": "No teniu permís per descarregar fitxers.",
|
||||||
"deleted_all_movies_successfully": "S'han suprimit totes les pel·lícules correctament!",
|
"deleted_all_movies_successfully": "S'han suprimit totes les pel·lícules correctament!",
|
||||||
"failed_to_delete_all_movies": "No s'han pogut suprimir totes les pel·lícules",
|
"failed_to_delete_all_movies": "No s'han pogut suprimir totes les pel·lícules",
|
||||||
"deleted_all_tvseries_successfully": "S'han suprimit totes les sèries correctament!",
|
"deleted_all_series_successfully": "S'han suprimit totes les sèries correctament!",
|
||||||
"failed_to_delete_all_tvseries": "No s'han pogut suprimir totes les sèries",
|
"failed_to_delete_all_series": "No s'han pogut suprimir totes les sèries",
|
||||||
"deleted_media_successfully": "Deleted other media Successfully!",
|
"deleted_media_successfully": "Deleted other media Successfully!",
|
||||||
"failed_to_delete_media": "Failed to Delete other media",
|
"failed_to_delete_media": "Failed to Delete other media",
|
||||||
"download_deleted": "Download Deleted",
|
|
||||||
"download_cancelled": "Descàrrega cancel·lada",
|
"download_cancelled": "Descàrrega cancel·lada",
|
||||||
"could_not_delete_download": "Could Not Delete Download",
|
"could_not_delete_download": "Could Not Delete Download",
|
||||||
"download_paused": "Download Paused",
|
|
||||||
"could_not_pause_download": "Could Not Pause Download",
|
|
||||||
"download_resumed": "Download Resumed",
|
|
||||||
"could_not_resume_download": "Could Not Resume Download",
|
|
||||||
"download_completed": "Descàrrega completada",
|
"download_completed": "Descàrrega completada",
|
||||||
"download_failed": "Download Failed",
|
"download_failed": "Download Failed",
|
||||||
"download_failed_for_item": "Ha fallat la descàrrega per a {{item}} - {{error}}",
|
"download_failed_for_item": "Ha fallat la descàrrega per a {{item}} - {{error}}",
|
||||||
@@ -562,10 +482,7 @@
|
|||||||
"item_already_downloading": "{{item}} is already downloading",
|
"item_already_downloading": "{{item}} is already downloading",
|
||||||
"all_files_deleted": "All Downloads Deleted Successfully",
|
"all_files_deleted": "All Downloads Deleted Successfully",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Tots els fitxers, carpetes i treballs s'han suprimit correctament",
|
|
||||||
"failed_to_clean_cache_directory": "Failed to clean cache directory",
|
|
||||||
"could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}",
|
"could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}",
|
||||||
"go_to_downloads": "Ves a les descàrregues",
|
|
||||||
"file_deleted": "{{item}} deleted"
|
"file_deleted": "{{item}} deleted"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +500,17 @@
|
|||||||
"none": "None",
|
"none": "None",
|
||||||
"track": "Track",
|
"track": "Track",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
"next": "Next",
|
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
"continue": "Continue",
|
"continue": "Continue",
|
||||||
"verifying": "Verifying...",
|
"verifying": "Verifying...",
|
||||||
"login": "Login",
|
"login": "Login",
|
||||||
"refresh": "Refresh"
|
"episodes": "Episodes",
|
||||||
|
"movies": "Movies",
|
||||||
|
"loading": "Loading…",
|
||||||
|
"seeAll": "See all"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Cerca...",
|
"search": "Cerca...",
|
||||||
@@ -691,10 +609,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "No s'ha pogut crear un flux per a Chromecast",
|
"could_not_create_stream_for_chromecast": "No s'ha pogut crear un flux per a Chromecast",
|
||||||
"message_from_server": "Missatge del servidor: {{message}}",
|
"message_from_server": "Missatge del servidor: {{message}}",
|
||||||
"next_episode": "Episodi següent",
|
"next_episode": "Episodi següent",
|
||||||
"refresh_tracks": "Actualitzar pistes",
|
|
||||||
"audio_tracks": "Pistes d'àudio:",
|
|
||||||
"playback_state": "Estat de reproducció:",
|
|
||||||
"index": "Índex:",
|
|
||||||
"continue_watching": "Continuar veient",
|
"continue_watching": "Continuar veient",
|
||||||
"go_back": "Enrere",
|
"go_back": "Enrere",
|
||||||
"downloaded_file_title": "You have this file downloaded",
|
"downloaded_file_title": "You have this file downloaded",
|
||||||
@@ -723,7 +637,8 @@
|
|||||||
"stopPlayback": "Stop Playback",
|
"stopPlayback": "Stop Playback",
|
||||||
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
||||||
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
||||||
"downloaded": "Downloaded"
|
"downloaded": "Downloaded",
|
||||||
|
"missing_parameters": "Missing playback parameters"
|
||||||
},
|
},
|
||||||
"chapters": {
|
"chapters": {
|
||||||
"title": "Chapters",
|
"title": "Chapters",
|
||||||
@@ -761,7 +676,6 @@
|
|||||||
"show_more": "Mostra més",
|
"show_more": "Mostra més",
|
||||||
"show_less": "Mostra menys",
|
"show_less": "Mostra menys",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -784,7 +698,8 @@
|
|||||||
"resume_playback": "Resume Playback",
|
"resume_playback": "Resume Playback",
|
||||||
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
||||||
"play_from_start": "Play from Start",
|
"play_from_start": "Play from Start",
|
||||||
"continue_from": "Continue from {{time}}"
|
"continue_from": "Continue from {{time}}",
|
||||||
|
"no_data_available": "No data available"
|
||||||
},
|
},
|
||||||
"live_tv": {
|
"live_tv": {
|
||||||
"next": "Següent",
|
"next": "Següent",
|
||||||
@@ -888,13 +803,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "tracks"
|
"tracks": "tracks"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "All"
|
|
||||||
},
|
|
||||||
"recently_added": "Recently Added",
|
"recently_added": "Recently Added",
|
||||||
"recently_played": "Recently Played",
|
"recently_played": "Recently Played",
|
||||||
"frequently_played": "Frequently Played",
|
"frequently_played": "Frequently Played",
|
||||||
"explore": "Explore",
|
|
||||||
"top_tracks": "Top Tracks",
|
"top_tracks": "Top Tracks",
|
||||||
"play": "Play",
|
"play": "Play",
|
||||||
"shuffle": "Shuffle",
|
"shuffle": "Shuffle",
|
||||||
@@ -1028,7 +939,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -261,43 +261,6 @@
|
|||||||
"None": "Nic",
|
"None": "Nic",
|
||||||
"OnlyForced": "Pouze vynucené"
|
"OnlyForced": "Pouze vynucené"
|
||||||
},
|
},
|
||||||
"text_color": "Barva textu",
|
|
||||||
"background_color": "Barva pozadí",
|
|
||||||
"outline_color": "Barva obrysu",
|
|
||||||
"outline_thickness": "Obrys tloušťky",
|
|
||||||
"background_opacity": "Průhlednost pozadí",
|
|
||||||
"outline_opacity": "Průhlednost obrysu",
|
|
||||||
"bold_text": "Bold Text",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Černý",
|
|
||||||
"Gray": "Šedá",
|
|
||||||
"Silver": "Stříbro",
|
|
||||||
"White": "Bílý",
|
|
||||||
"Maroon": "Maroon",
|
|
||||||
"Red": "Červená",
|
|
||||||
"Fuchsia": "Fuchsia",
|
|
||||||
"Yellow": "Žlutá",
|
|
||||||
"Olive": "Olivy",
|
|
||||||
"Green": "Zelená",
|
|
||||||
"Teal": "Modrozelený",
|
|
||||||
"Lime": "Světle zelená",
|
|
||||||
"Purple": "Fialová",
|
|
||||||
"Navy": "Námořní loď",
|
|
||||||
"Blue": "Modrá",
|
|
||||||
"Aqua": "Aqua"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "Nic",
|
|
||||||
"Thin": "Tenké",
|
|
||||||
"Normal": "Normální",
|
|
||||||
"Thick": "Tlustá"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Subtitle Color",
|
|
||||||
"subtitle_background_color": "Background Color",
|
|
||||||
"subtitle_font": "Subtitle Font",
|
|
||||||
"ksplayer_title": "KSPlayer Settings",
|
|
||||||
"hardware_decode": "Hardware Decoding",
|
|
||||||
"hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +278,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC Subtitle Settings",
|
|
||||||
"hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.",
|
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"bold": "Bold Text",
|
|
||||||
"margin": "Bottom Margin"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Video Player",
|
|
||||||
"video_player": "Video Player",
|
|
||||||
"video_player_description": "Choose which video player to use on iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Ostatní",
|
"other_title": "Ostatní",
|
||||||
"video_orientation": "Orientace videa",
|
"video_orientation": "Orientace videa",
|
||||||
@@ -351,11 +295,6 @@
|
|||||||
"UNKNOWN": "Neznámý"
|
"UNKNOWN": "Neznámý"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Bezpečná oblast v ovládání",
|
"safe_area_in_controls": "Bezpečná oblast v ovládání",
|
||||||
"video_player": "Video přehrávač",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (experimentální + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Zobrazit vlastní Menu odkazy",
|
"show_custom_menu_links": "Zobrazit vlastní Menu odkazy",
|
||||||
"show_large_home_carousel": "Zobrazit velký přehled (beta)",
|
"show_large_home_carousel": "Zobrazit velký přehled (beta)",
|
||||||
"hide_libraries": "Skrýt knihovny",
|
"hide_libraries": "Skrýt knihovny",
|
||||||
@@ -367,9 +306,6 @@
|
|||||||
"max_auto_play_episode_count": "Maximální počet automatických přehrávání epizod",
|
"max_auto_play_episode_count": "Maximální počet automatických přehrávání epizod",
|
||||||
"disabled": "Zakázáno"
|
"disabled": "Zakázáno"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Stahování"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Music",
|
"title": "Music",
|
||||||
"playback_title": "Playback",
|
"playback_title": "Playback",
|
||||||
@@ -413,23 +349,18 @@
|
|||||||
"read_more_about_marlin": "Přečtěte si více o Marlinu.",
|
"read_more_about_marlin": "Přečtěte si více o Marlinu.",
|
||||||
"save_button": "Uložit",
|
"save_button": "Uložit",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Uloženo",
|
"saved": "Uloženo"
|
||||||
"refreshed": "Settings refreshed from server"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Refresh Settings from Server"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Enable Streamystats",
|
|
||||||
"disable_streamystats": "Disable Streamystats",
|
"disable_streamystats": "Disable Streamystats",
|
||||||
"enable_search": "Use for Search",
|
"enable_search": "Use for Search",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
||||||
"read_more_about_streamystats": "Read More About Streamystats.",
|
"read_more_about_streamystats": "Read More About Streamystats.",
|
||||||
"save_button": "Save",
|
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"features_title": "Features",
|
"features_title": "Features",
|
||||||
"home_sections_title": "Home Sections",
|
|
||||||
"enable_movie_recommendations": "Movie Recommendations",
|
"enable_movie_recommendations": "Movie Recommendations",
|
||||||
"enable_series_recommendations": "Series Recommendations",
|
"enable_series_recommendations": "Series Recommendations",
|
||||||
"enable_promoted_watchlists": "Promoted Watchlists",
|
"enable_promoted_watchlists": "Promoted Watchlists",
|
||||||
@@ -445,8 +376,7 @@
|
|||||||
"refresh_from_server": "Refresh Settings from Server"
|
"refresh_from_server": "Refresh Settings from Server"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Enable our Watchlist integration",
|
"watchlist_enabler": "Enable our Watchlist integration"
|
||||||
"watchlist_button": "Toggle Watchlist integration"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +387,6 @@
|
|||||||
"delete_all_downloaded_files": "Odstranit všechny stažené soubory",
|
"delete_all_downloaded_files": "Odstranit všechny stažené soubory",
|
||||||
"music_cache_title": "Music Cache",
|
"music_cache_title": "Music Cache",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Enable Music Cache",
|
|
||||||
"clear_music_cache": "Clear Music Cache",
|
"clear_music_cache": "Clear Music Cache",
|
||||||
"music_cache_size": "{{size}} cached",
|
"music_cache_size": "{{size}} cached",
|
||||||
"music_cache_cleared": "Music cache cleared",
|
"music_cache_cleared": "Music cache cleared",
|
||||||
@@ -467,8 +396,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -490,15 +417,12 @@
|
|||||||
"system": "Systém"
|
"system": "Systém"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Chyba při mazání souborů",
|
"error_deleting_files": "Chyba při mazání souborů"
|
||||||
"background_downloads_enabled": "Stahování na pozadí povoleno",
|
|
||||||
"background_downloads_disabled": "Stahování na pozadí zakázáno"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -508,6 +432,10 @@
|
|||||||
"4_hours": "4 hours",
|
"4_hours": "4 hours",
|
||||||
"24_hours": "24 hours"
|
"24_hours": "24 hours"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"title": "Dashboard",
|
||||||
|
"sessions_title": "Sessions"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sessions": {
|
"sessions": {
|
||||||
@@ -516,15 +444,12 @@
|
|||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"downloads_title": "Stahování",
|
"downloads_title": "Stahování",
|
||||||
"tvseries": "Televizní série",
|
"series": "Televizní série",
|
||||||
"movies": "Filmy",
|
"movies": "Filmy",
|
||||||
"queue": "Fronta",
|
|
||||||
"other_media": "Ostatní média",
|
"other_media": "Ostatní média",
|
||||||
"queue_hint": "Fronta a stahování budou ztraceny při restartu aplikace",
|
|
||||||
"no_items_in_queue": "Žádné položky ve frontě",
|
|
||||||
"no_downloaded_items": "Žádné stažené položky",
|
"no_downloaded_items": "Žádné stažené položky",
|
||||||
"delete_all_movies_button": "Odstranit všechny filmy",
|
"delete_all_movies_button": "Odstranit všechny filmy",
|
||||||
"delete_all_tvseries_button": "Odstranit všechny TV-série",
|
"delete_all_series_button": "Odstranit všechny TV-série",
|
||||||
"delete_all_button": "Smazat vše",
|
"delete_all_button": "Smazat vše",
|
||||||
"delete_all_other_media_button": "Odstranit ostatní média",
|
"delete_all_other_media_button": "Odstranit ostatní média",
|
||||||
"active_download": "Aktivní stahování",
|
"active_download": "Aktivní stahování",
|
||||||
@@ -542,17 +467,12 @@
|
|||||||
"you_are_not_allowed_to_download_files": "Nemáte oprávnění stahovat soubory.",
|
"you_are_not_allowed_to_download_files": "Nemáte oprávnění stahovat soubory.",
|
||||||
"deleted_all_movies_successfully": "Všechny filmy byly úspěšně smazány!",
|
"deleted_all_movies_successfully": "Všechny filmy byly úspěšně smazány!",
|
||||||
"failed_to_delete_all_movies": "Nepodařilo se odstranit všechny filmy",
|
"failed_to_delete_all_movies": "Nepodařilo se odstranit všechny filmy",
|
||||||
"deleted_all_tvseries_successfully": "Všechny série televizorů byly úspěšně smazány!",
|
"deleted_all_series_successfully": "Všechny série televizorů byly úspěšně smazány!",
|
||||||
"failed_to_delete_all_tvseries": "Nepodařilo se odstranit všechny TV-série",
|
"failed_to_delete_all_series": "Nepodařilo se odstranit všechny TV-série",
|
||||||
"deleted_media_successfully": "Ostatní média úspěšně smazána!",
|
"deleted_media_successfully": "Ostatní média úspěšně smazána!",
|
||||||
"failed_to_delete_media": "Nepodařilo se odstranit ostatní média",
|
"failed_to_delete_media": "Nepodařilo se odstranit ostatní média",
|
||||||
"download_deleted": "Stahování smazáno",
|
|
||||||
"download_cancelled": "Download Cancelled",
|
"download_cancelled": "Download Cancelled",
|
||||||
"could_not_delete_download": "Stahování nelze odstranit",
|
"could_not_delete_download": "Stahování nelze odstranit",
|
||||||
"download_paused": "Stahování pozastaveno",
|
|
||||||
"could_not_pause_download": "Nelze pozastavit stahování",
|
|
||||||
"download_resumed": "Stahování obnoveno",
|
|
||||||
"could_not_resume_download": "Nelze pokračovat v stahování",
|
|
||||||
"download_completed": "Stahování dokončeno",
|
"download_completed": "Stahování dokončeno",
|
||||||
"download_failed": "Download Failed",
|
"download_failed": "Download Failed",
|
||||||
"download_failed_for_item": "Stahování se nezdařilo pro {{item}} - {{error}}",
|
"download_failed_for_item": "Stahování se nezdařilo pro {{item}} - {{error}}",
|
||||||
@@ -562,10 +482,7 @@
|
|||||||
"item_already_downloading": "{{item}} is already downloading",
|
"item_already_downloading": "{{item}} is already downloading",
|
||||||
"all_files_deleted": "All Downloads Deleted Successfully",
|
"all_files_deleted": "All Downloads Deleted Successfully",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Všechny soubory, složky a úlohy byly úspěšně odstraněny",
|
|
||||||
"failed_to_clean_cache_directory": "Nepodařilo se vyčistit adresář mezipaměti",
|
|
||||||
"could_not_get_download_url_for_item": "Nelze získat URL pro stažení {{itemName}}",
|
"could_not_get_download_url_for_item": "Nelze získat URL pro stažení {{itemName}}",
|
||||||
"go_to_downloads": "Přejít na stahování",
|
|
||||||
"file_deleted": "{{item}} deleted"
|
"file_deleted": "{{item}} deleted"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +500,17 @@
|
|||||||
"none": "None",
|
"none": "None",
|
||||||
"track": "Track",
|
"track": "Track",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
"next": "Next",
|
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
"continue": "Continue",
|
"continue": "Continue",
|
||||||
"verifying": "Verifying...",
|
"verifying": "Verifying...",
|
||||||
"login": "Login",
|
"login": "Login",
|
||||||
"refresh": "Refresh"
|
"episodes": "Episodes",
|
||||||
|
"movies": "Movies",
|
||||||
|
"loading": "Loading…",
|
||||||
|
"seeAll": "See all"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Hledat...",
|
"search": "Hledat...",
|
||||||
@@ -691,10 +609,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Nelze vytvořit stream pro Chromecast",
|
"could_not_create_stream_for_chromecast": "Nelze vytvořit stream pro Chromecast",
|
||||||
"message_from_server": "Zpráva od serveru: {{message}}",
|
"message_from_server": "Zpráva od serveru: {{message}}",
|
||||||
"next_episode": "Další epizoda",
|
"next_episode": "Další epizoda",
|
||||||
"refresh_tracks": "Obnovit skladby",
|
|
||||||
"audio_tracks": "Zvukové stopy:",
|
|
||||||
"playback_state": "Stav přehrávání:",
|
|
||||||
"index": "Index:",
|
|
||||||
"continue_watching": "Pokračovat ve sledování",
|
"continue_watching": "Pokračovat ve sledování",
|
||||||
"go_back": "Zpět",
|
"go_back": "Zpět",
|
||||||
"downloaded_file_title": "You have this file downloaded",
|
"downloaded_file_title": "You have this file downloaded",
|
||||||
@@ -723,7 +637,8 @@
|
|||||||
"stopPlayback": "Stop Playback",
|
"stopPlayback": "Stop Playback",
|
||||||
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
||||||
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
||||||
"downloaded": "Downloaded"
|
"downloaded": "Downloaded",
|
||||||
|
"missing_parameters": "Missing playback parameters"
|
||||||
},
|
},
|
||||||
"chapters": {
|
"chapters": {
|
||||||
"title": "Chapters",
|
"title": "Chapters",
|
||||||
@@ -761,7 +676,6 @@
|
|||||||
"show_more": "Zobrazit více",
|
"show_more": "Zobrazit více",
|
||||||
"show_less": "Zobrazit méně",
|
"show_less": "Zobrazit méně",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -784,7 +698,8 @@
|
|||||||
"resume_playback": "Resume Playback",
|
"resume_playback": "Resume Playback",
|
||||||
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
||||||
"play_from_start": "Play from Start",
|
"play_from_start": "Play from Start",
|
||||||
"continue_from": "Continue from {{time}}"
|
"continue_from": "Continue from {{time}}",
|
||||||
|
"no_data_available": "No data available"
|
||||||
},
|
},
|
||||||
"live_tv": {
|
"live_tv": {
|
||||||
"next": "Další",
|
"next": "Další",
|
||||||
@@ -888,13 +803,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "tracks"
|
"tracks": "tracks"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "All"
|
|
||||||
},
|
|
||||||
"recently_added": "Recently Added",
|
"recently_added": "Recently Added",
|
||||||
"recently_played": "Recently Played",
|
"recently_played": "Recently Played",
|
||||||
"frequently_played": "Frequently Played",
|
"frequently_played": "Frequently Played",
|
||||||
"explore": "Explore",
|
|
||||||
"top_tracks": "Top Tracks",
|
"top_tracks": "Top Tracks",
|
||||||
"play": "Play",
|
"play": "Play",
|
||||||
"shuffle": "Shuffle",
|
"shuffle": "Shuffle",
|
||||||
@@ -1028,7 +939,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -261,43 +261,6 @@
|
|||||||
"None": "Ingen",
|
"None": "Ingen",
|
||||||
"OnlyForced": "Kun tvungne undertekster"
|
"OnlyForced": "Kun tvungne undertekster"
|
||||||
},
|
},
|
||||||
"text_color": "Tekst Farve",
|
|
||||||
"background_color": "Baggrunds Farve",
|
|
||||||
"outline_color": "Omrids Farve",
|
|
||||||
"outline_thickness": "Omrids Tykkelse",
|
|
||||||
"background_opacity": "Baggrunds Gennemsigtighed",
|
|
||||||
"outline_opacity": "Omrids Gennemsigtighed",
|
|
||||||
"bold_text": "Bold Text",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Sort",
|
|
||||||
"Gray": "Grå",
|
|
||||||
"Silver": "Sølv",
|
|
||||||
"White": "Hvid",
|
|
||||||
"Maroon": "Maroon",
|
|
||||||
"Red": "Rød",
|
|
||||||
"Fuchsia": "Fuchsia",
|
|
||||||
"Yellow": "Gul",
|
|
||||||
"Olive": "Oliven",
|
|
||||||
"Green": "Grøn",
|
|
||||||
"Teal": "Grønblåt",
|
|
||||||
"Lime": "Limegrøn",
|
|
||||||
"Purple": "Lilla",
|
|
||||||
"Navy": "Flåden",
|
|
||||||
"Blue": "Blå",
|
|
||||||
"Aqua": "Aqua"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "Ingen",
|
|
||||||
"Thin": "Tynd",
|
|
||||||
"Normal": "Normal",
|
|
||||||
"Thick": "Tyk"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Subtitle Color",
|
|
||||||
"subtitle_background_color": "Background Color",
|
|
||||||
"subtitle_font": "Subtitle Font",
|
|
||||||
"ksplayer_title": "KSPlayer Settings",
|
|
||||||
"hardware_decode": "Hardware Decoding",
|
|
||||||
"hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +278,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC Subtitle Settings",
|
|
||||||
"hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.",
|
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"bold": "Bold Text",
|
|
||||||
"margin": "Bottom Margin"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Video Player",
|
|
||||||
"video_player": "Video Player",
|
|
||||||
"video_player_description": "Choose which video player to use on iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Andet",
|
"other_title": "Andet",
|
||||||
"video_orientation": "Videoorientering",
|
"video_orientation": "Videoorientering",
|
||||||
@@ -351,11 +295,6 @@
|
|||||||
"UNKNOWN": "Ukendt"
|
"UNKNOWN": "Ukendt"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Sikkert område i kontroller",
|
"safe_area_in_controls": "Sikkert område i kontroller",
|
||||||
"video_player": "Videospiller",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Eksperimentel + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Vis tilpassede menulinks",
|
"show_custom_menu_links": "Vis tilpassede menulinks",
|
||||||
"show_large_home_carousel": "Show Large Home Carousel (beta)",
|
"show_large_home_carousel": "Show Large Home Carousel (beta)",
|
||||||
"hide_libraries": "Skjul biblioteker",
|
"hide_libraries": "Skjul biblioteker",
|
||||||
@@ -367,9 +306,6 @@
|
|||||||
"max_auto_play_episode_count": "Maks. Auto Afspil Episode Antal",
|
"max_auto_play_episode_count": "Maks. Auto Afspil Episode Antal",
|
||||||
"disabled": "Deaktiveret"
|
"disabled": "Deaktiveret"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Downloads"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Music",
|
"title": "Music",
|
||||||
"playback_title": "Playback",
|
"playback_title": "Playback",
|
||||||
@@ -413,23 +349,18 @@
|
|||||||
"read_more_about_marlin": "Læs mere om Marlin.",
|
"read_more_about_marlin": "Læs mere om Marlin.",
|
||||||
"save_button": "Gem",
|
"save_button": "Gem",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Gemt",
|
"saved": "Gemt"
|
||||||
"refreshed": "Settings refreshed from server"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Refresh Settings from Server"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Enable Streamystats",
|
|
||||||
"disable_streamystats": "Disable Streamystats",
|
"disable_streamystats": "Disable Streamystats",
|
||||||
"enable_search": "Use for Search",
|
"enable_search": "Use for Search",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
||||||
"read_more_about_streamystats": "Read More About Streamystats.",
|
"read_more_about_streamystats": "Read More About Streamystats.",
|
||||||
"save_button": "Save",
|
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"features_title": "Features",
|
"features_title": "Features",
|
||||||
"home_sections_title": "Home Sections",
|
|
||||||
"enable_movie_recommendations": "Movie Recommendations",
|
"enable_movie_recommendations": "Movie Recommendations",
|
||||||
"enable_series_recommendations": "Series Recommendations",
|
"enable_series_recommendations": "Series Recommendations",
|
||||||
"enable_promoted_watchlists": "Promoted Watchlists",
|
"enable_promoted_watchlists": "Promoted Watchlists",
|
||||||
@@ -445,8 +376,7 @@
|
|||||||
"refresh_from_server": "Refresh Settings from Server"
|
"refresh_from_server": "Refresh Settings from Server"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Enable our Watchlist integration",
|
"watchlist_enabler": "Enable our Watchlist integration"
|
||||||
"watchlist_button": "Toggle Watchlist integration"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +387,6 @@
|
|||||||
"delete_all_downloaded_files": "Slet alle downloadede filer",
|
"delete_all_downloaded_files": "Slet alle downloadede filer",
|
||||||
"music_cache_title": "Music Cache",
|
"music_cache_title": "Music Cache",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Enable Music Cache",
|
|
||||||
"clear_music_cache": "Clear Music Cache",
|
"clear_music_cache": "Clear Music Cache",
|
||||||
"music_cache_size": "{{size}} cached",
|
"music_cache_size": "{{size}} cached",
|
||||||
"music_cache_cleared": "Music cache cleared",
|
"music_cache_cleared": "Music cache cleared",
|
||||||
@@ -467,8 +396,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -490,15 +417,12 @@
|
|||||||
"system": "System"
|
"system": "System"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Fejl ved sletning af filer",
|
"error_deleting_files": "Fejl ved sletning af filer"
|
||||||
"background_downloads_enabled": "Baggrundsdownloads aktiveret",
|
|
||||||
"background_downloads_disabled": "Baggrundsdownloads deaktiveret"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -508,6 +432,10 @@
|
|||||||
"4_hours": "4 hours",
|
"4_hours": "4 hours",
|
||||||
"24_hours": "24 hours"
|
"24_hours": "24 hours"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"title": "Dashboard",
|
||||||
|
"sessions_title": "Sessions"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sessions": {
|
"sessions": {
|
||||||
@@ -516,15 +444,12 @@
|
|||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"downloads_title": "Downloads",
|
"downloads_title": "Downloads",
|
||||||
"tvseries": "TV-serier",
|
"series": "TV-serier",
|
||||||
"movies": "Film",
|
"movies": "Film",
|
||||||
"queue": "Kø",
|
|
||||||
"other_media": "Andre medier",
|
"other_media": "Andre medier",
|
||||||
"queue_hint": "Kø og downloads vil gå tabt ved genstart af appen",
|
|
||||||
"no_items_in_queue": "Ingen elementer i køen",
|
|
||||||
"no_downloaded_items": "Ingen downloadede elementer",
|
"no_downloaded_items": "Ingen downloadede elementer",
|
||||||
"delete_all_movies_button": "Slet alle film",
|
"delete_all_movies_button": "Slet alle film",
|
||||||
"delete_all_tvseries_button": "Slet alle TV-serier",
|
"delete_all_series_button": "Slet alle TV-serier",
|
||||||
"delete_all_button": "Slet alle",
|
"delete_all_button": "Slet alle",
|
||||||
"delete_all_other_media_button": "Slet andre medier",
|
"delete_all_other_media_button": "Slet andre medier",
|
||||||
"active_download": "Aktiv download",
|
"active_download": "Aktiv download",
|
||||||
@@ -542,17 +467,12 @@
|
|||||||
"you_are_not_allowed_to_download_files": "Du har ikke tilladelse til at downloade filer.",
|
"you_are_not_allowed_to_download_files": "Du har ikke tilladelse til at downloade filer.",
|
||||||
"deleted_all_movies_successfully": "Alle film er slettet med succes!",
|
"deleted_all_movies_successfully": "Alle film er slettet med succes!",
|
||||||
"failed_to_delete_all_movies": "Kunne ikke slette alle film",
|
"failed_to_delete_all_movies": "Kunne ikke slette alle film",
|
||||||
"deleted_all_tvseries_successfully": "Alle TV-serier er slettet med succes!",
|
"deleted_all_series_successfully": "Alle TV-serier er slettet med succes!",
|
||||||
"failed_to_delete_all_tvseries": "Kunne ikke slette alle TV-serier",
|
"failed_to_delete_all_series": "Kunne ikke slette alle TV-serier",
|
||||||
"deleted_media_successfully": "Slettede andre medier med succes!",
|
"deleted_media_successfully": "Slettede andre medier med succes!",
|
||||||
"failed_to_delete_media": "Kunne ikke slette andre medier",
|
"failed_to_delete_media": "Kunne ikke slette andre medier",
|
||||||
"download_deleted": "Download Slettet",
|
|
||||||
"download_cancelled": "Download afbrudt",
|
"download_cancelled": "Download afbrudt",
|
||||||
"could_not_delete_download": "Kunne Ikke Slette Download",
|
"could_not_delete_download": "Kunne Ikke Slette Download",
|
||||||
"download_paused": "Download Pauset",
|
|
||||||
"could_not_pause_download": "Kunne Ikke Pause Download",
|
|
||||||
"download_resumed": "Download Genoprettet",
|
|
||||||
"could_not_resume_download": "Kunne Ikke Genoptage Download",
|
|
||||||
"download_completed": "Download fuldført",
|
"download_completed": "Download fuldført",
|
||||||
"download_failed": "Download Failed",
|
"download_failed": "Download Failed",
|
||||||
"download_failed_for_item": "Download mislykkedes for {{item}} - {{error}}",
|
"download_failed_for_item": "Download mislykkedes for {{item}} - {{error}}",
|
||||||
@@ -562,10 +482,7 @@
|
|||||||
"item_already_downloading": "{{item}} is already downloading",
|
"item_already_downloading": "{{item}} is already downloading",
|
||||||
"all_files_deleted": "All Downloads Deleted Successfully",
|
"all_files_deleted": "All Downloads Deleted Successfully",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Alle filer, mapper og jobs blev slettet med succes",
|
|
||||||
"failed_to_clean_cache_directory": "Kunne ikke rense cache-mappe",
|
|
||||||
"could_not_get_download_url_for_item": "Kunne ikke hente download URL til {{itemName}}",
|
"could_not_get_download_url_for_item": "Kunne ikke hente download URL til {{itemName}}",
|
||||||
"go_to_downloads": "Gå til downloads",
|
|
||||||
"file_deleted": "{{item}} deleted"
|
"file_deleted": "{{item}} deleted"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +500,17 @@
|
|||||||
"none": "None",
|
"none": "None",
|
||||||
"track": "Track",
|
"track": "Track",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
"next": "Next",
|
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
"continue": "Continue",
|
"continue": "Continue",
|
||||||
"verifying": "Verifying...",
|
"verifying": "Verifying...",
|
||||||
"login": "Login",
|
"login": "Login",
|
||||||
"refresh": "Refresh"
|
"episodes": "Episodes",
|
||||||
|
"movies": "Movies",
|
||||||
|
"loading": "Loading…",
|
||||||
|
"seeAll": "See all"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Søg...",
|
"search": "Søg...",
|
||||||
@@ -691,10 +609,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Kunne ikke oprette en stream til Chromecast",
|
"could_not_create_stream_for_chromecast": "Kunne ikke oprette en stream til Chromecast",
|
||||||
"message_from_server": "Besked fra server: {{message}}",
|
"message_from_server": "Besked fra server: {{message}}",
|
||||||
"next_episode": "Næste episode",
|
"next_episode": "Næste episode",
|
||||||
"refresh_tracks": "Opdater spor",
|
|
||||||
"audio_tracks": "Lydspor:",
|
|
||||||
"playback_state": "Afspilningstilstand:",
|
|
||||||
"index": "Indeks:",
|
|
||||||
"continue_watching": "Fortsæt med at se",
|
"continue_watching": "Fortsæt med at se",
|
||||||
"go_back": "Gå Tilbage",
|
"go_back": "Gå Tilbage",
|
||||||
"downloaded_file_title": "You have this file downloaded",
|
"downloaded_file_title": "You have this file downloaded",
|
||||||
@@ -723,7 +637,8 @@
|
|||||||
"stopPlayback": "Stop Playback",
|
"stopPlayback": "Stop Playback",
|
||||||
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
||||||
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
||||||
"downloaded": "Downloaded"
|
"downloaded": "Downloaded",
|
||||||
|
"missing_parameters": "Missing playback parameters"
|
||||||
},
|
},
|
||||||
"chapters": {
|
"chapters": {
|
||||||
"title": "Chapters",
|
"title": "Chapters",
|
||||||
@@ -761,7 +676,6 @@
|
|||||||
"show_more": "Vis mere",
|
"show_more": "Vis mere",
|
||||||
"show_less": "Vis mindre",
|
"show_less": "Vis mindre",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -784,7 +698,8 @@
|
|||||||
"resume_playback": "Resume Playback",
|
"resume_playback": "Resume Playback",
|
||||||
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
||||||
"play_from_start": "Play from Start",
|
"play_from_start": "Play from Start",
|
||||||
"continue_from": "Continue from {{time}}"
|
"continue_from": "Continue from {{time}}",
|
||||||
|
"no_data_available": "No data available"
|
||||||
},
|
},
|
||||||
"live_tv": {
|
"live_tv": {
|
||||||
"next": "Næste",
|
"next": "Næste",
|
||||||
@@ -888,13 +803,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "tracks"
|
"tracks": "tracks"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "All"
|
|
||||||
},
|
|
||||||
"recently_added": "Recently Added",
|
"recently_added": "Recently Added",
|
||||||
"recently_played": "Recently Played",
|
"recently_played": "Recently Played",
|
||||||
"frequently_played": "Frequently Played",
|
"frequently_played": "Frequently Played",
|
||||||
"explore": "Explore",
|
|
||||||
"top_tracks": "Top Tracks",
|
"top_tracks": "Top Tracks",
|
||||||
"play": "Play",
|
"play": "Play",
|
||||||
"shuffle": "Shuffle",
|
"shuffle": "Shuffle",
|
||||||
@@ -1028,7 +939,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -4,8 +4,8 @@
|
|||||||
"error_title": "Fehler",
|
"error_title": "Fehler",
|
||||||
"login_title": "Anmelden",
|
"login_title": "Anmelden",
|
||||||
"login_to_title": "Anmelden bei",
|
"login_to_title": "Anmelden bei",
|
||||||
"select_user": "Select a user to log in",
|
"select_user": "Benutzer zum Anmelden auswählen",
|
||||||
"add_user_to_login": "Add a user to log in",
|
"add_user_to_login": "Zum Anmelden einen Benutzer hinzufügen",
|
||||||
"add_user": "Add User",
|
"add_user": "Add User",
|
||||||
"username_placeholder": "Benutzername",
|
"username_placeholder": "Benutzername",
|
||||||
"password_placeholder": "Passwort",
|
"password_placeholder": "Passwort",
|
||||||
@@ -47,9 +47,9 @@
|
|||||||
"add_account": "Konto hinzufügen",
|
"add_account": "Konto hinzufügen",
|
||||||
"remove_account_description": "Hiermit werden die gespeicherten Zugangsdaten für {{username}} entfernt.",
|
"remove_account_description": "Hiermit werden die gespeicherten Zugangsdaten für {{username}} entfernt.",
|
||||||
"remove_server": "Remove Server",
|
"remove_server": "Remove Server",
|
||||||
"remove_server_description": "This will remove {{server}} and all saved accounts from your list.",
|
"remove_server_description": "Dies wird {{server}} und alle gespeicherten Konten aus Ihrer Liste entfernen.",
|
||||||
"select_your_server": "Select Your Server",
|
"select_your_server": "Select Your Server",
|
||||||
"add_server_to_get_started": "Add a server to get started",
|
"add_server_to_get_started": "Füge einen Server hinzu, um loszulegen",
|
||||||
"add_server": "Add Server",
|
"add_server": "Add Server",
|
||||||
"change_server": "Change Server"
|
"change_server": "Change Server"
|
||||||
},
|
},
|
||||||
@@ -95,7 +95,7 @@
|
|||||||
"oops": "Ups!",
|
"oops": "Ups!",
|
||||||
"error_message": "Etwas ist schiefgelaufen.\nBitte melde dich ab und wieder an.",
|
"error_message": "Etwas ist schiefgelaufen.\nBitte melde dich ab und wieder an.",
|
||||||
"continue_watching": "Weiterschauen",
|
"continue_watching": "Weiterschauen",
|
||||||
"continue": "Continue",
|
"continue": "Weiter",
|
||||||
"next_up": "Als nächstes",
|
"next_up": "Als nächstes",
|
||||||
"continue_and_next_up": "\"Weiterschauen\" und \"Als Nächstes\"",
|
"continue_and_next_up": "\"Weiterschauen\" und \"Als Nächstes\"",
|
||||||
"recently_added_in": "Kürzlich hinzugefügt in {{libraryName}}",
|
"recently_added_in": "Kürzlich hinzugefügt in {{libraryName}}",
|
||||||
@@ -121,9 +121,9 @@
|
|||||||
"log_out_button": "Abmelden",
|
"log_out_button": "Abmelden",
|
||||||
"switch_user": {
|
"switch_user": {
|
||||||
"title": "Switch User",
|
"title": "Switch User",
|
||||||
"account": "Account",
|
"account": "Benutzerkonto",
|
||||||
"switch_user": "Switch User on This Server",
|
"switch_user": "Switch User on This Server",
|
||||||
"current": "current"
|
"current": "aktuell"
|
||||||
},
|
},
|
||||||
"categories": {
|
"categories": {
|
||||||
"title": "Kategorien"
|
"title": "Kategorien"
|
||||||
@@ -143,9 +143,9 @@
|
|||||||
"show_series_poster_on_episode": "Show Series Poster on Episodes",
|
"show_series_poster_on_episode": "Show Series Poster on Episodes",
|
||||||
"theme_music": "Theme Music",
|
"theme_music": "Theme Music",
|
||||||
"display_size": "Display Size",
|
"display_size": "Display Size",
|
||||||
"display_size_small": "Small",
|
"display_size_small": "Klein",
|
||||||
"display_size_default": "Default",
|
"display_size_default": "Standard",
|
||||||
"display_size_large": "Large",
|
"display_size_large": "Groß",
|
||||||
"display_size_extra_large": "Extra Large"
|
"display_size_extra_large": "Extra Large"
|
||||||
},
|
},
|
||||||
"network": {
|
"network": {
|
||||||
@@ -203,8 +203,8 @@
|
|||||||
"title": "Buffer Settings",
|
"title": "Buffer Settings",
|
||||||
"cache_mode": "Cache Mode",
|
"cache_mode": "Cache Mode",
|
||||||
"cache_auto": "Auto",
|
"cache_auto": "Auto",
|
||||||
"cache_yes": "Enabled",
|
"cache_yes": "Aktiviert",
|
||||||
"cache_no": "Disabled",
|
"cache_no": "Deaktiviert",
|
||||||
"buffer_duration": "Buffer Duration",
|
"buffer_duration": "Buffer Duration",
|
||||||
"max_cache_size": "Max Cache Size",
|
"max_cache_size": "Max Cache Size",
|
||||||
"max_backward_cache": "Max Backward Cache"
|
"max_backward_cache": "Max Backward Cache"
|
||||||
@@ -212,7 +212,7 @@
|
|||||||
"vo_driver": {
|
"vo_driver": {
|
||||||
"title": "Video Output",
|
"title": "Video Output",
|
||||||
"vo_mode": "VO Driver",
|
"vo_mode": "VO Driver",
|
||||||
"gpu_next": "gpu-next (Recommended)",
|
"gpu_next": "gpu-next (empfohlen)",
|
||||||
"gpu": "gpu"
|
"gpu": "gpu"
|
||||||
},
|
},
|
||||||
"gesture_controls": {
|
"gesture_controls": {
|
||||||
@@ -261,79 +261,23 @@
|
|||||||
"None": "Keine",
|
"None": "Keine",
|
||||||
"OnlyForced": "Nur erzwungene"
|
"OnlyForced": "Nur erzwungene"
|
||||||
},
|
},
|
||||||
"text_color": "Textfarbe",
|
|
||||||
"background_color": "Hintergrundfarbe",
|
|
||||||
"outline_color": "Konturfarbe",
|
|
||||||
"outline_thickness": "Konturdicke",
|
|
||||||
"background_opacity": "Hintergrundtransparenz",
|
|
||||||
"outline_opacity": "Konturtransparenz",
|
|
||||||
"bold_text": "Fettgedruckter Text",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Schwarz",
|
|
||||||
"Gray": "Grau",
|
|
||||||
"Silver": "Silber",
|
|
||||||
"White": "Weiß",
|
|
||||||
"Maroon": "Rotbraun",
|
|
||||||
"Red": "Rot",
|
|
||||||
"Fuchsia": "Magenta",
|
|
||||||
"Yellow": "Gelb",
|
|
||||||
"Olive": "Olivgrün",
|
|
||||||
"Green": "Grün",
|
|
||||||
"Teal": "Türkis",
|
|
||||||
"Lime": "Hellgrün",
|
|
||||||
"Purple": "Lila",
|
|
||||||
"Navy": "Marineblau",
|
|
||||||
"Blue": "Blau",
|
|
||||||
"Aqua": "Himmelblau"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "Keine",
|
|
||||||
"Thin": "Dünn",
|
|
||||||
"Normal": "Normal",
|
|
||||||
"Thick": "Dick"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Untertitelfarbe",
|
|
||||||
"subtitle_background_color": "Hintergrundfarbe",
|
|
||||||
"subtitle_font": "Untertitel-Schriftart",
|
|
||||||
"ksplayer_title": "KSPlayer Einstellungen",
|
|
||||||
"hardware_decode": "Hardware Decoding",
|
|
||||||
"hardware_decode_description": "Hardwarebeschleunigung für Video Decoding verwenden. Deaktivieren wenn Wiedergabeprobleme auftreten.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Geben Sie Ihren OpenSubtitles API-Schlüssel ein, um die Client-seitige Untertitelsuche als Fallback zu aktivieren, wenn Ihr Jellyfin-Server keinen Untertitelanbieter konfiguriert hat.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
"opensubtitles_api_key_placeholder": "Enter API key...",
|
"opensubtitles_api_key_placeholder": "API-Schüssel eingeben ...",
|
||||||
"opensubtitles_get_key": "Get your free API key at opensubtitles.com/en/consumers",
|
"opensubtitles_get_key": "Holen Sie sich Ihren kostenlosen API-Schlüssel unter opensubtitles.com/de/consumers",
|
||||||
"mpv_subtitle_scale": "Subtitle Scale",
|
"mpv_subtitle_scale": "Subtitle Scale",
|
||||||
"mpv_subtitle_margin_y": "Vertical Margin",
|
"mpv_subtitle_margin_y": "Vertical Margin",
|
||||||
"mpv_subtitle_align_x": "Horizontal Align",
|
"mpv_subtitle_align_x": "Horizontal Align",
|
||||||
"mpv_subtitle_align_y": "Vertical Align",
|
"mpv_subtitle_align_y": "Vertical Align",
|
||||||
"align": {
|
"align": {
|
||||||
"left": "Left",
|
"left": "Links",
|
||||||
"center": "Center",
|
"center": "Mittig",
|
||||||
"right": "Right",
|
"right": "Rechts",
|
||||||
"top": "Top",
|
"top": "Oben",
|
||||||
"bottom": "Bottom"
|
"bottom": "Unten"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC Untertitel-Einstellungen",
|
|
||||||
"hint": "Anpassen des Untertitel-Erscheinungsbildes für VLC. Änderungen werden bei der nächsten Wiedergabe übernommen.",
|
|
||||||
"text_color": "Schriftfarbe",
|
|
||||||
"background_color": "Hintergrundfarbe",
|
|
||||||
"background_opacity": "Hintergrundtransparenz",
|
|
||||||
"outline_color": "Konturfarbe",
|
|
||||||
"outline_opacity": "Konturtransparenz",
|
|
||||||
"outline_thickness": "Konturdicke",
|
|
||||||
"bold": "Fettgedruckter Text",
|
|
||||||
"margin": "Unterer Abstand"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Videoplayer",
|
|
||||||
"video_player": "Videoplayer",
|
|
||||||
"video_player_description": "Videoplayer auf iOS auswählen.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Sonstiges",
|
"other_title": "Sonstiges",
|
||||||
"video_orientation": "Videoausrichtung",
|
"video_orientation": "Videoausrichtung",
|
||||||
@@ -351,11 +295,6 @@
|
|||||||
"UNKNOWN": "Unbekannt"
|
"UNKNOWN": "Unbekannt"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Sicherer Bereich in den Steuerungen",
|
"safe_area_in_controls": "Sicherer Bereich in den Steuerungen",
|
||||||
"video_player": "Videoplayer",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Experimentell + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Benutzerdefinierte Menülinks anzeigen",
|
"show_custom_menu_links": "Benutzerdefinierte Menülinks anzeigen",
|
||||||
"show_large_home_carousel": "Zeige große Startseiten-Übersicht (Beta)",
|
"show_large_home_carousel": "Zeige große Startseiten-Übersicht (Beta)",
|
||||||
"hide_libraries": "Bibliotheken ausblenden",
|
"hide_libraries": "Bibliotheken ausblenden",
|
||||||
@@ -367,9 +306,6 @@
|
|||||||
"max_auto_play_episode_count": "Maximale automatisch abzuspielende Episodenanzahl",
|
"max_auto_play_episode_count": "Maximale automatisch abzuspielende Episodenanzahl",
|
||||||
"disabled": "Deaktiviert"
|
"disabled": "Deaktiviert"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Downloads"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Musik",
|
"title": "Musik",
|
||||||
"playback_title": "Wiedergabe",
|
"playback_title": "Wiedergabe",
|
||||||
@@ -413,23 +349,18 @@
|
|||||||
"read_more_about_marlin": "Erfahre mehr über Marlin.",
|
"read_more_about_marlin": "Erfahre mehr über Marlin.",
|
||||||
"save_button": "Speichern",
|
"save_button": "Speichern",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Gespeichert",
|
"saved": "Gespeichert"
|
||||||
"refreshed": "Einstellungen vom Server aktualisiert"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Einstellungen vom Server aktualisieren"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Streamystats aktivieren",
|
|
||||||
"disable_streamystats": "Streamystats deaktivieren",
|
"disable_streamystats": "Streamystats deaktivieren",
|
||||||
"enable_search": "Zum Suchen verwenden",
|
"enable_search": "Zum Suchen verwenden",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "URL für den Streamystats-Server eingeben.",
|
"streamystats_search_hint": "URL für den Streamystats-Server eingeben.",
|
||||||
"read_more_about_streamystats": "Mehr über Streamystats erfahren.",
|
"read_more_about_streamystats": "Mehr über Streamystats erfahren.",
|
||||||
"save_button": "Speichern",
|
|
||||||
"save": "Gespeichert",
|
"save": "Gespeichert",
|
||||||
"features_title": "Features",
|
"features_title": "Features",
|
||||||
"home_sections_title": "Startseitenbereiche",
|
|
||||||
"enable_movie_recommendations": "Filmempfehlungen",
|
"enable_movie_recommendations": "Filmempfehlungen",
|
||||||
"enable_series_recommendations": "Serienempfehlungen",
|
"enable_series_recommendations": "Serienempfehlungen",
|
||||||
"enable_promoted_watchlists": "Empfohlene Merklisten",
|
"enable_promoted_watchlists": "Empfohlene Merklisten",
|
||||||
@@ -445,8 +376,7 @@
|
|||||||
"refresh_from_server": "Einstellungen vom Server aktualisieren"
|
"refresh_from_server": "Einstellungen vom Server aktualisieren"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Merklisten-Integration aktivieren",
|
"watchlist_enabler": "Merklisten-Integration aktivieren"
|
||||||
"watchlist_button": "Merklisten-Integration umschalten"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +387,6 @@
|
|||||||
"delete_all_downloaded_files": "Alle heruntergeladenen Dateien löschen",
|
"delete_all_downloaded_files": "Alle heruntergeladenen Dateien löschen",
|
||||||
"music_cache_title": "Musik-Cache",
|
"music_cache_title": "Musik-Cache",
|
||||||
"music_cache_description": "Beim Anhören Titel automatisch in den Cache laden um bessere Wiedergabe und Offline-Wiedergabe zu ermöglichen",
|
"music_cache_description": "Beim Anhören Titel automatisch in den Cache laden um bessere Wiedergabe und Offline-Wiedergabe zu ermöglichen",
|
||||||
"enable_music_cache": "Musik-Cache aktivieren",
|
|
||||||
"clear_music_cache": "Musik-Cache leeren",
|
"clear_music_cache": "Musik-Cache leeren",
|
||||||
"music_cache_size": "{{size}} gechached",
|
"music_cache_size": "{{size}} gechached",
|
||||||
"music_cache_cleared": "Musik-Cache geleert",
|
"music_cache_cleared": "Musik-Cache geleert",
|
||||||
@@ -466,10 +395,8 @@
|
|||||||
"downloaded_songs_deleted": "Heruntergeladene Titel gelöscht",
|
"downloaded_songs_deleted": "Heruntergeladene Titel gelöscht",
|
||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Sind Sie sicher, dass Sie alle zwischengespeicherten Daten löschen möchten? Dadurch werden alle zwischengespeicherten Bilder, Musikdateien, Untertitel und Abfrage-Caches gelöscht. Ihre Einstellungen und Login-Sitzung werden beibehalten.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
"clear_all_cache_error_desc": "Beim Löschen des Caches ist ein Fehler aufgetreten."
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
"title": "Einführung",
|
"title": "Einführung",
|
||||||
@@ -490,24 +417,25 @@
|
|||||||
"system": "System"
|
"system": "System"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Fehler beim Löschen von Dateien",
|
"error_deleting_files": "Fehler beim Löschen von Dateien"
|
||||||
"background_downloads_enabled": "Hintergrunddownloads aktiviert",
|
|
||||||
"background_downloads_disabled": "Hintergrunddownloads deaktiviert"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Sicherheit",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
"disabled": "Deaktiviert",
|
||||||
"disabled": "Disabled",
|
"1_minute": "1 Minute",
|
||||||
"1_minute": "1 minute",
|
"5_minutes": "5 Minuten",
|
||||||
"5_minutes": "5 minutes",
|
"15_minutes": "15 Minuten",
|
||||||
"15_minutes": "15 minutes",
|
"30_minutes": "30 Minuten",
|
||||||
"30_minutes": "30 minutes",
|
"1_hour": "1 Stunde",
|
||||||
"1_hour": "1 hour",
|
"4_hours": "4 Stunden",
|
||||||
"4_hours": "4 hours",
|
"24_hours": "24 Stunden"
|
||||||
"24_hours": "24 hours"
|
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"title": "Dashboard",
|
||||||
|
"sessions_title": "Sessions"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sessions": {
|
"sessions": {
|
||||||
@@ -516,15 +444,12 @@
|
|||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"downloads_title": "Downloads",
|
"downloads_title": "Downloads",
|
||||||
"tvseries": "Serien",
|
"series": "Serien",
|
||||||
"movies": "Filme",
|
"movies": "Filme",
|
||||||
"queue": "Warteschlange",
|
|
||||||
"other_media": "Andere Medien",
|
"other_media": "Andere Medien",
|
||||||
"queue_hint": "Warteschlange und aktive Downloads gehen verloren wenn die App neu gestartet wird",
|
|
||||||
"no_items_in_queue": "Keine Elemente in der Warteschlange",
|
|
||||||
"no_downloaded_items": "Keine heruntergeladenen Elemente",
|
"no_downloaded_items": "Keine heruntergeladenen Elemente",
|
||||||
"delete_all_movies_button": "Alle Filme löschen",
|
"delete_all_movies_button": "Alle Filme löschen",
|
||||||
"delete_all_tvseries_button": "Alle Serien löschen",
|
"delete_all_series_button": "Alle Serien löschen",
|
||||||
"delete_all_button": "Alles löschen",
|
"delete_all_button": "Alles löschen",
|
||||||
"delete_all_other_media_button": "Alle anderen Medien löschen",
|
"delete_all_other_media_button": "Alle anderen Medien löschen",
|
||||||
"active_download": "Aktiver Download",
|
"active_download": "Aktiver Download",
|
||||||
@@ -542,17 +467,12 @@
|
|||||||
"you_are_not_allowed_to_download_files": "Du hast keine Berechtigung, Dateien herunterzuladen",
|
"you_are_not_allowed_to_download_files": "Du hast keine Berechtigung, Dateien herunterzuladen",
|
||||||
"deleted_all_movies_successfully": "Alle Filme erfolgreich gelöscht!",
|
"deleted_all_movies_successfully": "Alle Filme erfolgreich gelöscht!",
|
||||||
"failed_to_delete_all_movies": "Fehler beim Löschen aller Filme",
|
"failed_to_delete_all_movies": "Fehler beim Löschen aller Filme",
|
||||||
"deleted_all_tvseries_successfully": "Alle Serien erfolgreich gelöscht!",
|
"deleted_all_series_successfully": "Alle Serien erfolgreich gelöscht!",
|
||||||
"failed_to_delete_all_tvseries": "Fehler beim Löschen aller Serien",
|
"failed_to_delete_all_series": "Fehler beim Löschen aller Serien",
|
||||||
"deleted_media_successfully": "Andere Medien erfolgreich gelöscht!",
|
"deleted_media_successfully": "Andere Medien erfolgreich gelöscht!",
|
||||||
"failed_to_delete_media": "Fehler beim Löschen anderer Medien",
|
"failed_to_delete_media": "Fehler beim Löschen anderer Medien",
|
||||||
"download_deleted": "Download gelöscht",
|
|
||||||
"download_cancelled": "Download abgebrochen",
|
"download_cancelled": "Download abgebrochen",
|
||||||
"could_not_delete_download": "Download konnte nicht gelöscht werden",
|
"could_not_delete_download": "Download konnte nicht gelöscht werden",
|
||||||
"download_paused": "Download pausiert",
|
|
||||||
"could_not_pause_download": "Download konnte nicht angehalten werden",
|
|
||||||
"download_resumed": "Download fortgesetzt",
|
|
||||||
"could_not_resume_download": "Download konnte nicht fortgesetzt werden",
|
|
||||||
"download_completed": "Download abgeschlossen",
|
"download_completed": "Download abgeschlossen",
|
||||||
"download_failed": "Download fehlgeschlagen",
|
"download_failed": "Download fehlgeschlagen",
|
||||||
"download_failed_for_item": "Download für {{item}} fehlgeschlagen - {{error}}",
|
"download_failed_for_item": "Download für {{item}} fehlgeschlagen - {{error}}",
|
||||||
@@ -562,10 +482,7 @@
|
|||||||
"item_already_downloading": "{{item}} Lädt",
|
"item_already_downloading": "{{item}} Lädt",
|
||||||
"all_files_deleted": "Alle Downloads gelöscht",
|
"all_files_deleted": "Alle Downloads gelöscht",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} gelöscht",
|
"files_deleted_by_type": "{{count}} {{type}} gelöscht",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Alle Dateien, Ordner und Jobs erfolgreich gelöscht",
|
|
||||||
"failed_to_clean_cache_directory": "Fehler beim Bereinigen des Cache-Verzeichnisses",
|
|
||||||
"could_not_get_download_url_for_item": "Download-URL für {{itemName}} konnte nicht geladen werden",
|
"could_not_get_download_url_for_item": "Download-URL für {{itemName}} konnte nicht geladen werden",
|
||||||
"go_to_downloads": "Zu Downloads gehen",
|
|
||||||
"file_deleted": "{{item}} gelöscht"
|
"file_deleted": "{{item}} gelöscht"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +500,17 @@
|
|||||||
"none": "Keine",
|
"none": "Keine",
|
||||||
"track": "Spur",
|
"track": "Spur",
|
||||||
"cancel": "Abbrechen",
|
"cancel": "Abbrechen",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Löschen",
|
"delete": "Löschen",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Entfernen",
|
"remove": "Entfernen",
|
||||||
"next": "Weiter",
|
|
||||||
"back": "Zurück",
|
"back": "Zurück",
|
||||||
"continue": "Fortsetzen",
|
"continue": "Fortsetzen",
|
||||||
"verifying": "Verifiziere...",
|
"verifying": "Verifiziere...",
|
||||||
"login": "Login",
|
"login": "Anmelden",
|
||||||
"refresh": "Refresh"
|
"episodes": "Episodes",
|
||||||
|
"movies": "Movies",
|
||||||
|
"loading": "Loading…",
|
||||||
|
"seeAll": "See all"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Suchen...",
|
"search": "Suchen...",
|
||||||
@@ -641,7 +559,7 @@
|
|||||||
"movies": "Filme",
|
"movies": "Filme",
|
||||||
"series": "Serien",
|
"series": "Serien",
|
||||||
"boxsets": "Boxsets",
|
"boxsets": "Boxsets",
|
||||||
"playlists": "Playlists",
|
"playlists": "Wiedergabelisten",
|
||||||
"items": "Elemente"
|
"items": "Elemente"
|
||||||
},
|
},
|
||||||
"options": {
|
"options": {
|
||||||
@@ -653,7 +571,7 @@
|
|||||||
"cover": "Cover",
|
"cover": "Cover",
|
||||||
"show_titles": "Titel anzeigen",
|
"show_titles": "Titel anzeigen",
|
||||||
"show_stats": "Statistiken anzeigen",
|
"show_stats": "Statistiken anzeigen",
|
||||||
"options_title": "Options"
|
"options_title": "Optionen"
|
||||||
},
|
},
|
||||||
"filters": {
|
"filters": {
|
||||||
"genres": "Genres",
|
"genres": "Genres",
|
||||||
@@ -662,10 +580,10 @@
|
|||||||
"filter_by": "Filtern nach",
|
"filter_by": "Filtern nach",
|
||||||
"sort_order": "Sortierreihenfolge",
|
"sort_order": "Sortierreihenfolge",
|
||||||
"tags": "Tags",
|
"tags": "Tags",
|
||||||
"all": "All",
|
"all": "Alle",
|
||||||
"reset": "Reset",
|
"reset": "Zurücksetzen",
|
||||||
"asc": "Ascending",
|
"asc": "Aufsteigend",
|
||||||
"desc": "Descending"
|
"desc": "Absteigend"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"favorites": {
|
"favorites": {
|
||||||
@@ -691,10 +609,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Konnte keinen Stream für Chromecast erstellen",
|
"could_not_create_stream_for_chromecast": "Konnte keinen Stream für Chromecast erstellen",
|
||||||
"message_from_server": "Nachricht vom Server: {{message}}",
|
"message_from_server": "Nachricht vom Server: {{message}}",
|
||||||
"next_episode": "Nächste Episode",
|
"next_episode": "Nächste Episode",
|
||||||
"refresh_tracks": "Spuren aktualisieren",
|
|
||||||
"audio_tracks": "Audiospuren:",
|
|
||||||
"playback_state": "Wiedergabestatus:",
|
|
||||||
"index": "Index:",
|
|
||||||
"continue_watching": "Fortsetzen",
|
"continue_watching": "Fortsetzen",
|
||||||
"go_back": "Zurück",
|
"go_back": "Zurück",
|
||||||
"downloaded_file_title": "Diese Datei wurde bereits heruntergeladen",
|
"downloaded_file_title": "Diese Datei wurde bereits heruntergeladen",
|
||||||
@@ -702,34 +616,35 @@
|
|||||||
"downloaded_file_yes": "Ja",
|
"downloaded_file_yes": "Ja",
|
||||||
"downloaded_file_no": "Nein",
|
"downloaded_file_no": "Nein",
|
||||||
"downloaded_file_cancel": "Abbrechen",
|
"downloaded_file_cancel": "Abbrechen",
|
||||||
"swipe_down_settings": "Swipe down for settings",
|
"swipe_down_settings": "Für Einstellungen nach unten wischen",
|
||||||
"ends_at": "Endet um {{time}}",
|
"ends_at": "Endet um {{time}}",
|
||||||
"search_subtitles": "Search Subtitles",
|
"search_subtitles": "Search Subtitles",
|
||||||
"subtitle_tracks": "Tracks",
|
"subtitle_tracks": "Titel",
|
||||||
"subtitle_search": "Search & Download",
|
"subtitle_search": "Search & Download",
|
||||||
"download": "Download",
|
"download": "Herunterladen",
|
||||||
"subtitle_download_hint": "Downloaded subtitles will be saved to your library",
|
"subtitle_download_hint": "Heruntergeladene Untertitel werden in Ihrer Bibliothek gespeichert",
|
||||||
"using_jellyfin_server": "Using Jellyfin Server",
|
"using_jellyfin_server": "Using Jellyfin Server",
|
||||||
"language": "Language",
|
"language": "Sprache",
|
||||||
"results": "Results",
|
"results": "Ergebnisse",
|
||||||
"searching": "Searching...",
|
"searching": "Suche ...",
|
||||||
"search_failed": "Search failed",
|
"search_failed": "Suche fehlgeschlagen",
|
||||||
"no_subtitle_provider": "No subtitle provider configured on server",
|
"no_subtitle_provider": "Kein Untertitelanbieter auf dem Server konfiguriert",
|
||||||
"no_subtitles_found": "No subtitles found",
|
"no_subtitles_found": "Keine Untertitel gefunden",
|
||||||
"add_opensubtitles_key_hint": "Add OpenSubtitles API key in settings for client-side fallback",
|
"add_opensubtitles_key_hint": "OpenSubtitles API-Schlüssel in den Einstellungen für Client-seitigen Fallback hinzufügen",
|
||||||
"settings": "Settings",
|
"settings": "Einstellungen",
|
||||||
"skip_intro": "Skip Intro",
|
"skip_intro": "Skip Intro",
|
||||||
"skip_credits": "Skip Credits",
|
"skip_credits": "Skip Credits",
|
||||||
"stopPlayback": "Stop Playback",
|
"stopPlayback": "Stop Playback",
|
||||||
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
"stopPlayingTitle": "Wiedergabe von \"{{title}}\" beenden?",
|
||||||
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
"stopPlayingConfirm": "Bist du sicher, dass du die Wiedergabe beenden möchtest?",
|
||||||
"downloaded": "Downloaded"
|
"downloaded": "Heruntergeladen",
|
||||||
|
"missing_parameters": "Missing playback parameters"
|
||||||
},
|
},
|
||||||
"chapters": {
|
"chapters": {
|
||||||
"title": "Chapters",
|
"title": "Kapitel",
|
||||||
"chapter_number": "Chapter {{number}}",
|
"chapter_number": "Kapitel {{number}}",
|
||||||
"open": "Open chapters",
|
"open": "Kapitel öffnen",
|
||||||
"close": "Close chapters"
|
"close": "Kapitel schließen"
|
||||||
},
|
},
|
||||||
"item_card": {
|
"item_card": {
|
||||||
"next_up": "Als Nächstes",
|
"next_up": "Als Nächstes",
|
||||||
@@ -754,20 +669,19 @@
|
|||||||
"quality": "Qualität",
|
"quality": "Qualität",
|
||||||
"audio": "Audio",
|
"audio": "Audio",
|
||||||
"subtitles": {
|
"subtitles": {
|
||||||
"label": "Subtitle",
|
"label": "Untertitel",
|
||||||
"none": "None",
|
"none": "Keine",
|
||||||
"tracks": "Tracks"
|
"tracks": "Titel"
|
||||||
},
|
},
|
||||||
"show_more": "Mehr anzeigen",
|
"show_more": "Mehr anzeigen",
|
||||||
"show_less": "Weniger anzeigen",
|
"show_less": "Weniger anzeigen",
|
||||||
"left": "left",
|
"left": "übrig",
|
||||||
"more_info": "More Info",
|
"director": "Regisseur*in",
|
||||||
"director": "Director",
|
"cast": "Besetzung",
|
||||||
"cast": "Cast",
|
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
"appeared_in": "Erschien in",
|
"appeared_in": "Erschien in",
|
||||||
"movies": "Movies",
|
"movies": "Filme",
|
||||||
"shows": "Shows",
|
"shows": "Serien",
|
||||||
"could_not_load_item": "Konnte Element nicht laden",
|
"could_not_load_item": "Konnte Element nicht laden",
|
||||||
"none": "Keine",
|
"none": "Keine",
|
||||||
"download": {
|
"download": {
|
||||||
@@ -782,9 +696,10 @@
|
|||||||
"mark_played": "Mark as Watched",
|
"mark_played": "Mark as Watched",
|
||||||
"mark_unplayed": "Mark as Unwatched",
|
"mark_unplayed": "Mark as Unwatched",
|
||||||
"resume_playback": "Resume Playback",
|
"resume_playback": "Resume Playback",
|
||||||
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
"resume_playback_description": "Möchtest du dort fortfahren, wo du aufgehört hast oder von Anfang anfangen?",
|
||||||
"play_from_start": "Play from Start",
|
"play_from_start": "Play from Start",
|
||||||
"continue_from": "Continue from {{time}}"
|
"continue_from": "Weiter ab {{time}}",
|
||||||
|
"no_data_available": "No data available"
|
||||||
},
|
},
|
||||||
"live_tv": {
|
"live_tv": {
|
||||||
"next": "Nächste",
|
"next": "Nächste",
|
||||||
@@ -796,16 +711,16 @@
|
|||||||
"sports": "Sport",
|
"sports": "Sport",
|
||||||
"for_kids": "Für Kinder",
|
"for_kids": "Für Kinder",
|
||||||
"news": "Nachrichten",
|
"news": "Nachrichten",
|
||||||
"page_of": "Page {{current}} of {{total}}",
|
"page_of": "Seite {{current}} von {{total}}",
|
||||||
"no_programs": "No programs available",
|
"no_programs": "Keine Programme verfügbar",
|
||||||
"no_channels": "No channels available",
|
"no_channels": "Keine Kanäle verfügbar",
|
||||||
"tabs": {
|
"tabs": {
|
||||||
"programs": "Programs",
|
"programs": "Programme",
|
||||||
"guide": "Guide",
|
"guide": "Führer",
|
||||||
"channels": "Channels",
|
"channels": "Kanäle",
|
||||||
"recordings": "Recordings",
|
"recordings": "Aufzeichnungen",
|
||||||
"schedule": "Schedule",
|
"schedule": "Planung",
|
||||||
"series": "Series"
|
"series": "Serien"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"jellyseerr": {
|
"jellyseerr": {
|
||||||
@@ -851,12 +766,12 @@
|
|||||||
"decline": "Ablehnen",
|
"decline": "Ablehnen",
|
||||||
"requested_by": "Angefragt von {{user}}",
|
"requested_by": "Angefragt von {{user}}",
|
||||||
"unknown_user": "Unbekannter Nutzer",
|
"unknown_user": "Unbekannter Nutzer",
|
||||||
"select": "Select",
|
"select": "Auswählen",
|
||||||
"request_all": "Request All",
|
"request_all": "Request All",
|
||||||
"request_seasons": "Request Seasons",
|
"request_seasons": "Request Seasons",
|
||||||
"select_seasons": "Select Seasons",
|
"select_seasons": "Select Seasons",
|
||||||
"request_selected": "Request Selected",
|
"request_selected": "Request Selected",
|
||||||
"n_selected": "{{count}} selected",
|
"n_selected": "{{count}} ausgewählt",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"jellyseer_does_not_meet_requirements": "Seerr-Server erfüllt nicht die minimalen Versionsanforderungen. Bitte den Seerr-Server auf mindestens 2.0.0 aktualisieren.",
|
"jellyseer_does_not_meet_requirements": "Seerr-Server erfüllt nicht die minimalen Versionsanforderungen. Bitte den Seerr-Server auf mindestens 2.0.0 aktualisieren.",
|
||||||
"jellyseerr_test_failed": "Seerr-Test fehlgeschlagen. Bitte erneut versuchen.",
|
"jellyseerr_test_failed": "Seerr-Test fehlgeschlagen. Bitte erneut versuchen.",
|
||||||
@@ -877,7 +792,7 @@
|
|||||||
"library": "Bibliothek",
|
"library": "Bibliothek",
|
||||||
"custom_links": "Links",
|
"custom_links": "Links",
|
||||||
"favorites": "Favoriten",
|
"favorites": "Favoriten",
|
||||||
"settings": "Settings"
|
"settings": "Einstellungen"
|
||||||
},
|
},
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Musik",
|
"title": "Musik",
|
||||||
@@ -888,13 +803,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "Titel"
|
"tracks": "Titel"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "Alle"
|
|
||||||
},
|
|
||||||
"recently_added": "Kürzlich hinzugefügt",
|
"recently_added": "Kürzlich hinzugefügt",
|
||||||
"recently_played": "Vor kurzem gehört",
|
"recently_played": "Vor kurzem gehört",
|
||||||
"frequently_played": "Oft gehört",
|
"frequently_played": "Oft gehört",
|
||||||
"explore": "Entdecken",
|
|
||||||
"top_tracks": "Top-Titel",
|
"top_tracks": "Top-Titel",
|
||||||
"play": "Abspielen",
|
"play": "Abspielen",
|
||||||
"shuffle": "Shuffle",
|
"shuffle": "Shuffle",
|
||||||
@@ -1004,34 +915,33 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"companion_login": {
|
"companion_login": {
|
||||||
"title": "Pair with TV",
|
"title": "Mit TV koppeln",
|
||||||
"align_qr": "Align the QR code within the frame",
|
"align_qr": "Den QR-Code innerhalb des Rahmens ausrichten",
|
||||||
"enter_code_manually": "Enter code manually",
|
"enter_code_manually": "Code manuell eingeben",
|
||||||
"pairing_enter_credentials": "Enter credentials for TV",
|
"pairing_enter_credentials": "Anmeldedaten für TV eingeben",
|
||||||
"pairing_code_label": "Pairing code",
|
"pairing_code_label": "Kopplungscode",
|
||||||
"server": "Server",
|
"server": "Server",
|
||||||
"authorize_button": "Authorize",
|
"authorize_button": "Autorisieren",
|
||||||
"authorizing": "Authorizing...",
|
"authorizing": "Autorisieren...",
|
||||||
"scan_again": "Scan Again",
|
"scan_again": "Scan Again",
|
||||||
"done": "Done",
|
"done": "Fertig",
|
||||||
"success_title": "Authorization Sent",
|
"success_title": "Authorization Sent",
|
||||||
"pairing_tv_connecting": "The TV is connecting to your account",
|
"pairing_tv_connecting": "Der Fernseher verbindet sich mit Ihrem Konto",
|
||||||
"error_title": "Authorization Failed",
|
"error_title": "Authorization Failed",
|
||||||
"error_invalid_qr": "Invalid QR code. Please scan the TV pairing code.",
|
"error_invalid_qr": "Ungültiger QR-Code. Bitte scannen Sie den TV-Kopplungscode.",
|
||||||
"error_generic": "Something went wrong. Please try again.",
|
"error_generic": "Etwas ist schiefgelaufen. Bitte versuche es erneut.",
|
||||||
"error_permission_denied": "Camera permission is required to scan QR codes.",
|
"error_permission_denied": "Kameraberechtigung erforderlich zum Scannen von QR-Codes.",
|
||||||
"login_as": "Log in as {{username}}?",
|
"login_as": "Als {{username}} anmelden?",
|
||||||
"on_server": "on {{server}}",
|
"on_server": "auf {{server}}",
|
||||||
"use_different_user": "Use a different user",
|
"use_different_user": "Verwende einen anderen Benutzer",
|
||||||
"open_settings": "Open Settings"
|
"open_settings": "Einstellungen öffnen"
|
||||||
},
|
},
|
||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
"waiting_for_phone": "Warte auf Telefon...",
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"scan_with_phone": "Scanne mit der Streamyfin-App auf deinem Handy",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"logging_in": "Anmeldung...",
|
||||||
"logging_in": "Logging in...",
|
"logging_in_description": "Verbinde mit deinem Server"
|
||||||
"logging_in_description": "Connecting to your server"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -261,43 +261,6 @@
|
|||||||
"None": "Κανένα",
|
"None": "Κανένα",
|
||||||
"OnlyForced": "Μόνο"
|
"OnlyForced": "Μόνο"
|
||||||
},
|
},
|
||||||
"text_color": "Χρώμα Κειμένου",
|
|
||||||
"background_color": "Χρώμα Φόντου",
|
|
||||||
"outline_color": "Χρώμα Περιγράμματος",
|
|
||||||
"outline_thickness": "Πάχος Περιγράμματος",
|
|
||||||
"background_opacity": "Αδιαφάνεια Φόντου",
|
|
||||||
"outline_opacity": "Αδιαφάνεια Περιγράμματος",
|
|
||||||
"bold_text": "Bold Text",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Μαύρο",
|
|
||||||
"Gray": "Γκρι",
|
|
||||||
"Silver": "Ασημένιο",
|
|
||||||
"White": "Λευκό",
|
|
||||||
"Maroon": "Μαρώ",
|
|
||||||
"Red": "Κόκκινο",
|
|
||||||
"Fuchsia": "Fuchsia",
|
|
||||||
"Yellow": "Κίτρινο",
|
|
||||||
"Olive": "Ελιές",
|
|
||||||
"Green": "Πράσινο",
|
|
||||||
"Teal": "Τιρκουάζ",
|
|
||||||
"Lime": "Άσβεστος",
|
|
||||||
"Purple": "Μωβ",
|
|
||||||
"Navy": "Ναυτικό",
|
|
||||||
"Blue": "Μπλε",
|
|
||||||
"Aqua": "Νερό"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "Κανένα",
|
|
||||||
"Thin": "Λεπτό",
|
|
||||||
"Normal": "Κανονικό",
|
|
||||||
"Thick": "Παχύ"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Subtitle Color",
|
|
||||||
"subtitle_background_color": "Background Color",
|
|
||||||
"subtitle_font": "Subtitle Font",
|
|
||||||
"ksplayer_title": "KSPlayer Settings",
|
|
||||||
"hardware_decode": "Hardware Decoding",
|
|
||||||
"hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +278,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC Subtitle Settings",
|
|
||||||
"hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.",
|
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"bold": "Bold Text",
|
|
||||||
"margin": "Bottom Margin"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Video Player",
|
|
||||||
"video_player": "Video Player",
|
|
||||||
"video_player_description": "Choose which video player to use on iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Άλλο",
|
"other_title": "Άλλο",
|
||||||
"video_orientation": "Προσανατολισμός Βίντεο",
|
"video_orientation": "Προσανατολισμός Βίντεο",
|
||||||
@@ -351,11 +295,6 @@
|
|||||||
"UNKNOWN": "Άγνωστο"
|
"UNKNOWN": "Άγνωστο"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Ασφαλής περιοχή σε χειριστήρια",
|
"safe_area_in_controls": "Ασφαλής περιοχή σε χειριστήρια",
|
||||||
"video_player": "Αναπαραγωγέας Βίντεο",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Πειραματική + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Εμφάνιση Προσαρμοσμένων Συνδέσμων Μενού",
|
"show_custom_menu_links": "Εμφάνιση Προσαρμοσμένων Συνδέσμων Μενού",
|
||||||
"show_large_home_carousel": "Show Large Home Carousel (beta)",
|
"show_large_home_carousel": "Show Large Home Carousel (beta)",
|
||||||
"hide_libraries": "Απόκρυψη Βιβλιοθηκών",
|
"hide_libraries": "Απόκρυψη Βιβλιοθηκών",
|
||||||
@@ -367,9 +306,6 @@
|
|||||||
"max_auto_play_episode_count": "Μέγιστο Πλήθος Επεισόδιο Αυτόματου Παιχνιδιού",
|
"max_auto_play_episode_count": "Μέγιστο Πλήθος Επεισόδιο Αυτόματου Παιχνιδιού",
|
||||||
"disabled": "Απενεργοποιημένο"
|
"disabled": "Απενεργοποιημένο"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Λήψεις"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Music",
|
"title": "Music",
|
||||||
"playback_title": "Playback",
|
"playback_title": "Playback",
|
||||||
@@ -413,23 +349,18 @@
|
|||||||
"read_more_about_marlin": "Διαβάστε Περισσότερα Σχετικά Με Marlin.",
|
"read_more_about_marlin": "Διαβάστε Περισσότερα Σχετικά Με Marlin.",
|
||||||
"save_button": "Αποθήκευση",
|
"save_button": "Αποθήκευση",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Αποθηκεύτηκε",
|
"saved": "Αποθηκεύτηκε"
|
||||||
"refreshed": "Settings refreshed from server"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Refresh Settings from Server"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Enable Streamystats",
|
|
||||||
"disable_streamystats": "Disable Streamystats",
|
"disable_streamystats": "Disable Streamystats",
|
||||||
"enable_search": "Use for Search",
|
"enable_search": "Use for Search",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
||||||
"read_more_about_streamystats": "Read More About Streamystats.",
|
"read_more_about_streamystats": "Read More About Streamystats.",
|
||||||
"save_button": "Save",
|
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"features_title": "Features",
|
"features_title": "Features",
|
||||||
"home_sections_title": "Home Sections",
|
|
||||||
"enable_movie_recommendations": "Movie Recommendations",
|
"enable_movie_recommendations": "Movie Recommendations",
|
||||||
"enable_series_recommendations": "Series Recommendations",
|
"enable_series_recommendations": "Series Recommendations",
|
||||||
"enable_promoted_watchlists": "Promoted Watchlists",
|
"enable_promoted_watchlists": "Promoted Watchlists",
|
||||||
@@ -445,8 +376,7 @@
|
|||||||
"refresh_from_server": "Refresh Settings from Server"
|
"refresh_from_server": "Refresh Settings from Server"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Enable our Watchlist integration",
|
"watchlist_enabler": "Enable our Watchlist integration"
|
||||||
"watchlist_button": "Toggle Watchlist integration"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +387,6 @@
|
|||||||
"delete_all_downloaded_files": "Διαγραφή Όλων Των Ληφθέντων Αρχείων",
|
"delete_all_downloaded_files": "Διαγραφή Όλων Των Ληφθέντων Αρχείων",
|
||||||
"music_cache_title": "Music Cache",
|
"music_cache_title": "Music Cache",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Enable Music Cache",
|
|
||||||
"clear_music_cache": "Clear Music Cache",
|
"clear_music_cache": "Clear Music Cache",
|
||||||
"music_cache_size": "{{size}} cached",
|
"music_cache_size": "{{size}} cached",
|
||||||
"music_cache_cleared": "Music cache cleared",
|
"music_cache_cleared": "Music cache cleared",
|
||||||
@@ -467,8 +396,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -490,15 +417,12 @@
|
|||||||
"system": "Σύστημα"
|
"system": "Σύστημα"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Σφάλμα Διαγραφής Αρχείων",
|
"error_deleting_files": "Σφάλμα Διαγραφής Αρχείων"
|
||||||
"background_downloads_enabled": "Οι λήψεις στο παρασκήνιο ενεργοποιήθηκαν",
|
|
||||||
"background_downloads_disabled": "Οι λήψεις παρασκηνίου απενεργοποιήθηκαν"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -508,6 +432,10 @@
|
|||||||
"4_hours": "4 hours",
|
"4_hours": "4 hours",
|
||||||
"24_hours": "24 hours"
|
"24_hours": "24 hours"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"title": "Dashboard",
|
||||||
|
"sessions_title": "Sessions"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sessions": {
|
"sessions": {
|
||||||
@@ -516,15 +444,12 @@
|
|||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"downloads_title": "Λήψεις",
|
"downloads_title": "Λήψεις",
|
||||||
"tvseries": "Τηλεόραση-Σειρά",
|
"series": "Τηλεόραση-Σειρά",
|
||||||
"movies": "Ταινίες",
|
"movies": "Ταινίες",
|
||||||
"queue": "Ουρά",
|
|
||||||
"other_media": "Άλλα μέσα",
|
"other_media": "Άλλα μέσα",
|
||||||
"queue_hint": "Ουρά και λήψεις θα χαθούν κατά την επανεκκίνηση της εφαρμογής",
|
|
||||||
"no_items_in_queue": "Δεν υπάρχουν αντικείμενα στην ουρά",
|
|
||||||
"no_downloaded_items": "Δεν Έχουν Ληφθεί Αντικείμενα",
|
"no_downloaded_items": "Δεν Έχουν Ληφθεί Αντικείμενα",
|
||||||
"delete_all_movies_button": "Διαγραφή Όλων Των Ταινιών",
|
"delete_all_movies_button": "Διαγραφή Όλων Των Ταινιών",
|
||||||
"delete_all_tvseries_button": "Διαγραφή Όλων Των Τηλεοπτικών Σειρών",
|
"delete_all_series_button": "Διαγραφή Όλων Των Τηλεοπτικών Σειρών",
|
||||||
"delete_all_button": "Διαγραφή Όλων",
|
"delete_all_button": "Διαγραφή Όλων",
|
||||||
"delete_all_other_media_button": "Διαγραφή άλλων μέσων",
|
"delete_all_other_media_button": "Διαγραφή άλλων μέσων",
|
||||||
"active_download": "Ενεργή Λήψη",
|
"active_download": "Ενεργή Λήψη",
|
||||||
@@ -542,17 +467,12 @@
|
|||||||
"you_are_not_allowed_to_download_files": "Δεν επιτρέπεται να κατεβάσετε αρχεία.",
|
"you_are_not_allowed_to_download_files": "Δεν επιτρέπεται να κατεβάσετε αρχεία.",
|
||||||
"deleted_all_movies_successfully": "Διαγράφηκε Όλες Οι Ταινίες Επιτυχία!",
|
"deleted_all_movies_successfully": "Διαγράφηκε Όλες Οι Ταινίες Επιτυχία!",
|
||||||
"failed_to_delete_all_movies": "Αποτυχία διαγραφής όλων των ταινιών",
|
"failed_to_delete_all_movies": "Αποτυχία διαγραφής όλων των ταινιών",
|
||||||
"deleted_all_tvseries_successfully": "Διαγράφηκε Όλη Η Τηλεόραση-Σειρά Επιτυχία!",
|
"deleted_all_series_successfully": "Διαγράφηκε Όλη Η Τηλεόραση-Σειρά Επιτυχία!",
|
||||||
"failed_to_delete_all_tvseries": "Αποτυχία διαγραφής Όλων των TV-Series",
|
"failed_to_delete_all_series": "Αποτυχία διαγραφής Όλων των TV-Series",
|
||||||
"deleted_media_successfully": "Διαγράφηκε άλλο μέσο επιτυχώς!",
|
"deleted_media_successfully": "Διαγράφηκε άλλο μέσο επιτυχώς!",
|
||||||
"failed_to_delete_media": "Αποτυχία διαγραφής άλλων πολυμέσων",
|
"failed_to_delete_media": "Αποτυχία διαγραφής άλλων πολυμέσων",
|
||||||
"download_deleted": "Η Λήψη Διαγράφηκε",
|
|
||||||
"download_cancelled": "Download Cancelled",
|
"download_cancelled": "Download Cancelled",
|
||||||
"could_not_delete_download": "Αδυναμία Διαγραφής Λήψης",
|
"could_not_delete_download": "Αδυναμία Διαγραφής Λήψης",
|
||||||
"download_paused": "Λήψη Σε Παύση",
|
|
||||||
"could_not_pause_download": "Αδυναμία Παύσης Λήψης",
|
|
||||||
"download_resumed": "Συνέχιση Λήψης",
|
|
||||||
"could_not_resume_download": "Αδυναμία Συνέχισης Λήψης",
|
|
||||||
"download_completed": "Η Λήψη Ολοκληρώθηκε",
|
"download_completed": "Η Λήψη Ολοκληρώθηκε",
|
||||||
"download_failed": "Download Failed",
|
"download_failed": "Download Failed",
|
||||||
"download_failed_for_item": "Η λήψη απέτυχε για το {{item}} - {{error}}",
|
"download_failed_for_item": "Η λήψη απέτυχε για το {{item}} - {{error}}",
|
||||||
@@ -562,10 +482,7 @@
|
|||||||
"item_already_downloading": "{{item}} is already downloading",
|
"item_already_downloading": "{{item}} is already downloading",
|
||||||
"all_files_deleted": "All Downloads Deleted Successfully",
|
"all_files_deleted": "All Downloads Deleted Successfully",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Όλα τα αρχεία, οι φάκελοι και οι εργασίες διαγράφηκαν με επιτυχία",
|
|
||||||
"failed_to_clean_cache_directory": "Αποτυχία καθαρισμού φακέλου προσωρινής μνήμης",
|
|
||||||
"could_not_get_download_url_for_item": "Αδυναμία λήψης του URL λήψης για το {{itemName}}",
|
"could_not_get_download_url_for_item": "Αδυναμία λήψης του URL λήψης για το {{itemName}}",
|
||||||
"go_to_downloads": "Μετάβαση στις λήψεις",
|
|
||||||
"file_deleted": "{{item}} deleted"
|
"file_deleted": "{{item}} deleted"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +500,17 @@
|
|||||||
"none": "None",
|
"none": "None",
|
||||||
"track": "Track",
|
"track": "Track",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
"next": "Next",
|
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
"continue": "Continue",
|
"continue": "Continue",
|
||||||
"verifying": "Verifying...",
|
"verifying": "Verifying...",
|
||||||
"login": "Login",
|
"login": "Login",
|
||||||
"refresh": "Refresh"
|
"episodes": "Episodes",
|
||||||
|
"movies": "Movies",
|
||||||
|
"loading": "Loading…",
|
||||||
|
"seeAll": "See all"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Αναζήτηση...",
|
"search": "Αναζήτηση...",
|
||||||
@@ -691,10 +609,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Αδυναμία δημιουργίας ροής για το Chromecast",
|
"could_not_create_stream_for_chromecast": "Αδυναμία δημιουργίας ροής για το Chromecast",
|
||||||
"message_from_server": "Μήνυμα από το διακομιστή: {{message}}",
|
"message_from_server": "Μήνυμα από το διακομιστή: {{message}}",
|
||||||
"next_episode": "Επόμενο Επεισόδιο",
|
"next_episode": "Επόμενο Επεισόδιο",
|
||||||
"refresh_tracks": "Ανανέωση Κομματιών",
|
|
||||||
"audio_tracks": "Κομμάτια Ήχου:",
|
|
||||||
"playback_state": "Κατάσταση Αναπαραγωγής:",
|
|
||||||
"index": "Δείκτης:",
|
|
||||||
"continue_watching": "Συνέχεια Παρακολούθησης",
|
"continue_watching": "Συνέχεια Παρακολούθησης",
|
||||||
"go_back": "Μετάβαση Πίσω",
|
"go_back": "Μετάβαση Πίσω",
|
||||||
"downloaded_file_title": "You have this file downloaded",
|
"downloaded_file_title": "You have this file downloaded",
|
||||||
@@ -723,7 +637,8 @@
|
|||||||
"stopPlayback": "Stop Playback",
|
"stopPlayback": "Stop Playback",
|
||||||
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
||||||
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
||||||
"downloaded": "Downloaded"
|
"downloaded": "Downloaded",
|
||||||
|
"missing_parameters": "Missing playback parameters"
|
||||||
},
|
},
|
||||||
"chapters": {
|
"chapters": {
|
||||||
"title": "Chapters",
|
"title": "Chapters",
|
||||||
@@ -761,7 +676,6 @@
|
|||||||
"show_more": "Εμφάνιση Περισσότερων",
|
"show_more": "Εμφάνιση Περισσότερων",
|
||||||
"show_less": "Εμφάνιση Λιγότερων",
|
"show_less": "Εμφάνιση Λιγότερων",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -784,7 +698,8 @@
|
|||||||
"resume_playback": "Resume Playback",
|
"resume_playback": "Resume Playback",
|
||||||
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
||||||
"play_from_start": "Play from Start",
|
"play_from_start": "Play from Start",
|
||||||
"continue_from": "Continue from {{time}}"
|
"continue_from": "Continue from {{time}}",
|
||||||
|
"no_data_available": "No data available"
|
||||||
},
|
},
|
||||||
"live_tv": {
|
"live_tv": {
|
||||||
"next": "Επόμενο",
|
"next": "Επόμενο",
|
||||||
@@ -888,13 +803,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "tracks"
|
"tracks": "tracks"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "All"
|
|
||||||
},
|
|
||||||
"recently_added": "Recently Added",
|
"recently_added": "Recently Added",
|
||||||
"recently_played": "Recently Played",
|
"recently_played": "Recently Played",
|
||||||
"frequently_played": "Frequently Played",
|
"frequently_played": "Frequently Played",
|
||||||
"explore": "Explore",
|
|
||||||
"top_tracks": "Top Tracks",
|
"top_tracks": "Top Tracks",
|
||||||
"play": "Play",
|
"play": "Play",
|
||||||
"shuffle": "Shuffle",
|
"shuffle": "Shuffle",
|
||||||
@@ -1028,7 +939,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -229,14 +229,14 @@
|
|||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"downloads_title": "Elŝutoj",
|
"downloads_title": "Elŝutoj",
|
||||||
"tvseries": "Televidaj serioj",
|
"series": "Televidaj serioj",
|
||||||
"movies": "Filmoj",
|
"movies": "Filmoj",
|
||||||
"queue": "Vico",
|
"queue": "Vico",
|
||||||
"queue_hint": "Vico kaj elŝutoj perdiĝos ĉe aplikaĵa rekomenco",
|
"queue_hint": "Vico kaj elŝutoj perdiĝos ĉe aplikaĵa rekomenco",
|
||||||
"no_items_in_queue": "Neniuj eroj en vico",
|
"no_items_in_queue": "Neniuj eroj en vico",
|
||||||
"no_downloaded_items": "Neniuj elŝutitaj eroj",
|
"no_downloaded_items": "Neniuj elŝutitaj eroj",
|
||||||
"delete_all_movies_button": "Forigi ĉiujn Filmojn",
|
"delete_all_movies_button": "Forigi ĉiujn Filmojn",
|
||||||
"delete_all_tvseries_button": "Forigi ĉiujn Televidajn Seriojn",
|
"delete_all_series_button": "Forigi ĉiujn Televidajn Seriojn",
|
||||||
"delete_all_button": "Forigi ĉion",
|
"delete_all_button": "Forigi ĉion",
|
||||||
"active_download": "Aktiva elŝuto",
|
"active_download": "Aktiva elŝuto",
|
||||||
"no_active_downloads": "Neniuj aktivaj elŝutoj",
|
"no_active_downloads": "Neniuj aktivaj elŝutoj",
|
||||||
@@ -253,8 +253,8 @@
|
|||||||
"you_are_not_allowed_to_download_files": "Vi ne rajtas elŝuti dosierojn.",
|
"you_are_not_allowed_to_download_files": "Vi ne rajtas elŝuti dosierojn.",
|
||||||
"deleted_all_movies_successfully": "Sukcese forigis ĉiujn filmojn!",
|
"deleted_all_movies_successfully": "Sukcese forigis ĉiujn filmojn!",
|
||||||
"failed_to_delete_all_movies": "Malsukcesis forigi ĉiujn filmojn",
|
"failed_to_delete_all_movies": "Malsukcesis forigi ĉiujn filmojn",
|
||||||
"deleted_all_tvseries_successfully": "Sukcese forigis ĉiujn Televidajn Seriojn!",
|
"deleted_all_series_successfully": "Sukcese forigis ĉiujn Televidajn Seriojn!",
|
||||||
"failed_to_delete_all_tvseries": "Malsukcesis forigi ĉiujn Televidajn Seriojn",
|
"failed_to_delete_all_series": "Malsukcesis forigi ĉiujn Televidajn Seriojn",
|
||||||
"download_cancelled": "Elŝuto nuligita",
|
"download_cancelled": "Elŝuto nuligita",
|
||||||
"could_not_cancel_download": "Ne povis nuligi elŝuton",
|
"could_not_cancel_download": "Ne povis nuligi elŝuton",
|
||||||
"download_completed": "Elŝuto finita",
|
"download_completed": "Elŝuto finita",
|
||||||
|
|||||||
@@ -261,43 +261,6 @@
|
|||||||
"None": "Nada",
|
"None": "Nada",
|
||||||
"OnlyForced": "Solo forzados"
|
"OnlyForced": "Solo forzados"
|
||||||
},
|
},
|
||||||
"text_color": "Color del texto",
|
|
||||||
"background_color": "Color de fondo",
|
|
||||||
"outline_color": "Color de salida",
|
|
||||||
"outline_thickness": "Grosor exterior",
|
|
||||||
"background_opacity": "Opacidad de fondo",
|
|
||||||
"outline_opacity": "Opacidad exterior",
|
|
||||||
"bold_text": "Texto en negrita",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Negro",
|
|
||||||
"Gray": "Gris",
|
|
||||||
"Silver": "Plata",
|
|
||||||
"White": "Blanco",
|
|
||||||
"Maroon": "Granate",
|
|
||||||
"Red": "Rojo",
|
|
||||||
"Fuchsia": "Fucsia",
|
|
||||||
"Yellow": "Amarillo",
|
|
||||||
"Olive": "Oliva",
|
|
||||||
"Green": "Verde",
|
|
||||||
"Teal": "Cereal",
|
|
||||||
"Lime": "Lima",
|
|
||||||
"Purple": "Morado",
|
|
||||||
"Navy": "Naval",
|
|
||||||
"Blue": "Azul",
|
|
||||||
"Aqua": "Agua"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "Ninguno",
|
|
||||||
"Thin": "Ligero",
|
|
||||||
"Normal": "Normal",
|
|
||||||
"Thick": "Grosor"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Color de los Subtítulos",
|
|
||||||
"subtitle_background_color": "Color del fondo",
|
|
||||||
"subtitle_font": "Fuente de los subtítulos",
|
|
||||||
"ksplayer_title": "Ajustes de KSPlayer",
|
|
||||||
"hardware_decode": "Decodificación de hardware",
|
|
||||||
"hardware_decode_description": "Utilizar la aceleración de hardware para la decodificación de vídeo. Deshabilite si experimenta problemas de reproducción.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +278,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "Configuración de subtítulos VLC",
|
|
||||||
"hint": "Personalizar la apariencia de los subtítulos para el reproductor VLC. Los cambios tendrán efecto en la próxima reproducción.",
|
|
||||||
"text_color": "Color del texto",
|
|
||||||
"background_color": "Color del fondo",
|
|
||||||
"background_opacity": "Opacidad del fondo",
|
|
||||||
"outline_color": "Color del contorno",
|
|
||||||
"outline_opacity": "Opacidad del contorno",
|
|
||||||
"outline_thickness": "Grosor del contorno",
|
|
||||||
"bold": "Texto en negrita",
|
|
||||||
"margin": "Margen inferior"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Reproductor de vídeo",
|
|
||||||
"video_player": "Reproductor de vídeo",
|
|
||||||
"video_player_description": "Elige qué reproductor de vídeo en iOS",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Otros",
|
"other_title": "Otros",
|
||||||
"video_orientation": "Orientación de vídeo",
|
"video_orientation": "Orientación de vídeo",
|
||||||
@@ -351,11 +295,6 @@
|
|||||||
"UNKNOWN": "Desconocida"
|
"UNKNOWN": "Desconocida"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Área segura en controles",
|
"safe_area_in_controls": "Área segura en controles",
|
||||||
"video_player": "Reproductor de vídeo",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Experimental + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Mostrar enlaces de menú personalizados",
|
"show_custom_menu_links": "Mostrar enlaces de menú personalizados",
|
||||||
"show_large_home_carousel": "Mostrar carrusel del menú principal grande (beta)",
|
"show_large_home_carousel": "Mostrar carrusel del menú principal grande (beta)",
|
||||||
"hide_libraries": "Ocultar bibliotecas",
|
"hide_libraries": "Ocultar bibliotecas",
|
||||||
@@ -367,9 +306,6 @@
|
|||||||
"max_auto_play_episode_count": "Máximo número de episodios de Auto Play",
|
"max_auto_play_episode_count": "Máximo número de episodios de Auto Play",
|
||||||
"disabled": "Deshabilitado"
|
"disabled": "Deshabilitado"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Descargas"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Música",
|
"title": "Música",
|
||||||
"playback_title": "Reproducir",
|
"playback_title": "Reproducir",
|
||||||
@@ -378,7 +314,7 @@
|
|||||||
"caching_title": "Almacenando en caché",
|
"caching_title": "Almacenando en caché",
|
||||||
"caching_description": "Cachear automáticamente las próximas canciones para una reproducción más suave.",
|
"caching_description": "Cachear automáticamente las próximas canciones para una reproducción más suave.",
|
||||||
"lookahead_enabled": "Activar el look-Ahead Cache",
|
"lookahead_enabled": "Activar el look-Ahead Cache",
|
||||||
"lookahead_count": "",
|
"lookahead_count": "Songs to pre-cache",
|
||||||
"max_cache_size": "Tamaño máximo del caché"
|
"max_cache_size": "Tamaño máximo del caché"
|
||||||
},
|
},
|
||||||
"plugins": {
|
"plugins": {
|
||||||
@@ -413,23 +349,18 @@
|
|||||||
"read_more_about_marlin": "Leer más sobre Marlin.",
|
"read_more_about_marlin": "Leer más sobre Marlin.",
|
||||||
"save_button": "Guardar",
|
"save_button": "Guardar",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Guardado",
|
"saved": "Guardado"
|
||||||
"refreshed": "Ajustes del servidor actualizados"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Actualizar ajustes del servidor"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Habilitar Streamystats",
|
|
||||||
"disable_streamystats": "Deshabilitar Streamystats",
|
"disable_streamystats": "Deshabilitar Streamystats",
|
||||||
"enable_search": "Usar para la búsqueda",
|
"enable_search": "Usar para la búsqueda",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.ejemplo.com",
|
"server_url_placeholder": "http(s)://streamystats.ejemplo.com",
|
||||||
"streamystats_search_hint": "Introduzca la URL para su servidor Streamystats. La URL debe incluir http o https y opcionalmente el puerto.",
|
"streamystats_search_hint": "Introduzca la URL para su servidor Streamystats. La URL debe incluir http o https y opcionalmente el puerto.",
|
||||||
"read_more_about_streamystats": "Leer más sobre Streamystats.",
|
"read_more_about_streamystats": "Leer más sobre Streamystats.",
|
||||||
"save_button": "Guardar",
|
|
||||||
"save": "Guardar",
|
"save": "Guardar",
|
||||||
"features_title": "Características",
|
"features_title": "Características",
|
||||||
"home_sections_title": "Secciones de inicio",
|
|
||||||
"enable_movie_recommendations": "Recomendaciones de películas",
|
"enable_movie_recommendations": "Recomendaciones de películas",
|
||||||
"enable_series_recommendations": "Recomendaciones de series",
|
"enable_series_recommendations": "Recomendaciones de series",
|
||||||
"enable_promoted_watchlists": "Listas promocionadas",
|
"enable_promoted_watchlists": "Listas promocionadas",
|
||||||
@@ -445,8 +376,7 @@
|
|||||||
"refresh_from_server": "Actualizar ajustes desde el servidor"
|
"refresh_from_server": "Actualizar ajustes desde el servidor"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Habilitar la integración de la lista de seguimiento",
|
"watchlist_enabler": "Habilitar la integración de la lista de seguimiento"
|
||||||
"watchlist_button": "Activar o desactivar la integración de la lista de seguimiento"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +387,6 @@
|
|||||||
"delete_all_downloaded_files": "Eliminar todos los archivos descargados",
|
"delete_all_downloaded_files": "Eliminar todos los archivos descargados",
|
||||||
"music_cache_title": "Caché de música",
|
"music_cache_title": "Caché de música",
|
||||||
"music_cache_description": "Cachear automáticamente las canciones mientras escuchas una reproducción más suave y soporte sin conexión",
|
"music_cache_description": "Cachear automáticamente las canciones mientras escuchas una reproducción más suave y soporte sin conexión",
|
||||||
"enable_music_cache": "Activar Caché de Música",
|
|
||||||
"clear_music_cache": "Borrar Caché de Música",
|
"clear_music_cache": "Borrar Caché de Música",
|
||||||
"music_cache_size": "Caché {{Tamaño}}",
|
"music_cache_size": "Caché {{Tamaño}}",
|
||||||
"music_cache_cleared": "Caché de música eliminado",
|
"music_cache_cleared": "Caché de música eliminado",
|
||||||
@@ -467,8 +396,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -490,15 +417,12 @@
|
|||||||
"system": "Sistema"
|
"system": "Sistema"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Error al eliminar archivos",
|
"error_deleting_files": "Error al eliminar archivos"
|
||||||
"background_downloads_enabled": "Descargas en segundo plano habilitadas",
|
|
||||||
"background_downloads_disabled": "Descargas en segundo plano deshabilitadas"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -508,6 +432,10 @@
|
|||||||
"4_hours": "4 hours",
|
"4_hours": "4 hours",
|
||||||
"24_hours": "24 hours"
|
"24_hours": "24 hours"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"title": "Dashboard",
|
||||||
|
"sessions_title": "Sessions"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sessions": {
|
"sessions": {
|
||||||
@@ -516,15 +444,12 @@
|
|||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"downloads_title": "Descargas",
|
"downloads_title": "Descargas",
|
||||||
"tvseries": "Series",
|
"series": "Series",
|
||||||
"movies": "Películas",
|
"movies": "Películas",
|
||||||
"queue": "Cola",
|
|
||||||
"other_media": "Otros medios",
|
"other_media": "Otros medios",
|
||||||
"queue_hint": "La cola de series y películas se perderá al reiniciar la app",
|
|
||||||
"no_items_in_queue": "No hay ítems en la cola",
|
|
||||||
"no_downloaded_items": "No hay ítems descargados",
|
"no_downloaded_items": "No hay ítems descargados",
|
||||||
"delete_all_movies_button": "Eliminar todas las películas",
|
"delete_all_movies_button": "Eliminar todas las películas",
|
||||||
"delete_all_tvseries_button": "Eliminar todas las series",
|
"delete_all_series_button": "Eliminar todas las series",
|
||||||
"delete_all_button": "Eliminar todo",
|
"delete_all_button": "Eliminar todo",
|
||||||
"delete_all_other_media_button": "Eliminar otros medios",
|
"delete_all_other_media_button": "Eliminar otros medios",
|
||||||
"active_download": "Descarga activa",
|
"active_download": "Descarga activa",
|
||||||
@@ -542,17 +467,12 @@
|
|||||||
"you_are_not_allowed_to_download_files": "No tienes permiso para descargar archivos.",
|
"you_are_not_allowed_to_download_files": "No tienes permiso para descargar archivos.",
|
||||||
"deleted_all_movies_successfully": "¡Todas las películas eliminadas con éxito!",
|
"deleted_all_movies_successfully": "¡Todas las películas eliminadas con éxito!",
|
||||||
"failed_to_delete_all_movies": "Error al eliminar todas las películas",
|
"failed_to_delete_all_movies": "Error al eliminar todas las películas",
|
||||||
"deleted_all_tvseries_successfully": "¡Todas las series eliminadas con éxito!",
|
"deleted_all_series_successfully": "¡Todas las series eliminadas con éxito!",
|
||||||
"failed_to_delete_all_tvseries": "Error al eliminar todas las series",
|
"failed_to_delete_all_series": "Error al eliminar todas las series",
|
||||||
"deleted_media_successfully": "¡Otros medios eliminados con éxito!",
|
"deleted_media_successfully": "¡Otros medios eliminados con éxito!",
|
||||||
"failed_to_delete_media": "Error al eliminar otros medios",
|
"failed_to_delete_media": "Error al eliminar otros medios",
|
||||||
"download_deleted": "Descarga eliminada",
|
|
||||||
"download_cancelled": "Descarga cancelada",
|
"download_cancelled": "Descarga cancelada",
|
||||||
"could_not_delete_download": "No se pudo eliminar la descarga",
|
"could_not_delete_download": "No se pudo eliminar la descarga",
|
||||||
"download_paused": "Descarga pausada",
|
|
||||||
"could_not_pause_download": "No se pudo pausar la descarga",
|
|
||||||
"download_resumed": "Descarga rebatida",
|
|
||||||
"could_not_resume_download": "No se pudo reiniciar la descarga",
|
|
||||||
"download_completed": "Descarga completada",
|
"download_completed": "Descarga completada",
|
||||||
"download_failed": "Descarga fallida",
|
"download_failed": "Descarga fallida",
|
||||||
"download_failed_for_item": "Descarga fallida para {{item}} - {{error}}",
|
"download_failed_for_item": "Descarga fallida para {{item}} - {{error}}",
|
||||||
@@ -562,10 +482,7 @@
|
|||||||
"item_already_downloading": "{{item}} ya está descargando",
|
"item_already_downloading": "{{item}} ya está descargando",
|
||||||
"all_files_deleted": "Todas las descargas eliminadas correctamente",
|
"all_files_deleted": "Todas las descargas eliminadas correctamente",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} eliminado",
|
"files_deleted_by_type": "{{count}} {{type}} eliminado",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Todos los archivos, carpetas y trabajos eliminados con éxito",
|
|
||||||
"failed_to_clean_cache_directory": "Error al limpiar el directorio de caché",
|
|
||||||
"could_not_get_download_url_for_item": "No se pudo obtener la URL de descarga para {{itemName}}",
|
"could_not_get_download_url_for_item": "No se pudo obtener la URL de descarga para {{itemName}}",
|
||||||
"go_to_downloads": "Ir a descargas",
|
|
||||||
"file_deleted": "{{item}} eliminado"
|
"file_deleted": "{{item}} eliminado"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +500,17 @@
|
|||||||
"none": "Nada",
|
"none": "Nada",
|
||||||
"track": "Pista",
|
"track": "Pista",
|
||||||
"cancel": "Cancelar",
|
"cancel": "Cancelar",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Borrar",
|
"delete": "Borrar",
|
||||||
"ok": "Aceptar",
|
"ok": "Aceptar",
|
||||||
"remove": "Eliminar",
|
"remove": "Eliminar",
|
||||||
"next": "Siguiente",
|
|
||||||
"back": "Atrás",
|
"back": "Atrás",
|
||||||
"continue": "Continuar",
|
"continue": "Continuar",
|
||||||
"verifying": "Verificando...",
|
"verifying": "Verificando...",
|
||||||
"login": "Login",
|
"login": "Login",
|
||||||
"refresh": "Refresh"
|
"episodes": "Episodes",
|
||||||
|
"movies": "Movies",
|
||||||
|
"loading": "Loading…",
|
||||||
|
"seeAll": "See all"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Buscar...",
|
"search": "Buscar...",
|
||||||
@@ -691,10 +609,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "No se pudo crear el Steam para Chromecast",
|
"could_not_create_stream_for_chromecast": "No se pudo crear el Steam para Chromecast",
|
||||||
"message_from_server": "Mensaje del servidor: {{message}}",
|
"message_from_server": "Mensaje del servidor: {{message}}",
|
||||||
"next_episode": "Siguiente episodio",
|
"next_episode": "Siguiente episodio",
|
||||||
"refresh_tracks": "Refrescar pistas",
|
|
||||||
"audio_tracks": "Pistas de audio:",
|
|
||||||
"playback_state": "Estado de la reproducción:",
|
|
||||||
"index": "Índice:",
|
|
||||||
"continue_watching": "Continuar viendo",
|
"continue_watching": "Continuar viendo",
|
||||||
"go_back": "Volver",
|
"go_back": "Volver",
|
||||||
"downloaded_file_title": "Ya tienes este archivo descargado",
|
"downloaded_file_title": "Ya tienes este archivo descargado",
|
||||||
@@ -723,7 +637,8 @@
|
|||||||
"stopPlayback": "Stop Playback",
|
"stopPlayback": "Stop Playback",
|
||||||
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
||||||
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
||||||
"downloaded": "Downloaded"
|
"downloaded": "Downloaded",
|
||||||
|
"missing_parameters": "Missing playback parameters"
|
||||||
},
|
},
|
||||||
"chapters": {
|
"chapters": {
|
||||||
"title": "Chapters",
|
"title": "Chapters",
|
||||||
@@ -761,7 +676,6 @@
|
|||||||
"show_more": "Mostrar más",
|
"show_more": "Mostrar más",
|
||||||
"show_less": "Mostrar menos",
|
"show_less": "Mostrar menos",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -784,7 +698,8 @@
|
|||||||
"resume_playback": "Resume Playback",
|
"resume_playback": "Resume Playback",
|
||||||
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
||||||
"play_from_start": "Play from Start",
|
"play_from_start": "Play from Start",
|
||||||
"continue_from": "Continue from {{time}}"
|
"continue_from": "Continue from {{time}}",
|
||||||
|
"no_data_available": "No data available"
|
||||||
},
|
},
|
||||||
"live_tv": {
|
"live_tv": {
|
||||||
"next": "Siguiente",
|
"next": "Siguiente",
|
||||||
@@ -888,13 +803,9 @@
|
|||||||
"playlists": "Listas de reproducción",
|
"playlists": "Listas de reproducción",
|
||||||
"tracks": "Canciones"
|
"tracks": "Canciones"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "Todas"
|
|
||||||
},
|
|
||||||
"recently_added": "Recientemente añadido",
|
"recently_added": "Recientemente añadido",
|
||||||
"recently_played": "Reproducidos Recientemente",
|
"recently_played": "Reproducidos Recientemente",
|
||||||
"frequently_played": "Reproducido con frecuencia",
|
"frequently_played": "Reproducido con frecuencia",
|
||||||
"explore": "Explorar",
|
|
||||||
"top_tracks": "Canciones Populares",
|
"top_tracks": "Canciones Populares",
|
||||||
"play": "Reproducir",
|
"play": "Reproducir",
|
||||||
"shuffle": "Aleatorio",
|
"shuffle": "Aleatorio",
|
||||||
@@ -1028,7 +939,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -261,43 +261,6 @@
|
|||||||
"None": "Ei mitään",
|
"None": "Ei mitään",
|
||||||
"OnlyForced": "Vain pakotettu"
|
"OnlyForced": "Vain pakotettu"
|
||||||
},
|
},
|
||||||
"text_color": "Tekstin väri",
|
|
||||||
"background_color": "Taustaväri",
|
|
||||||
"outline_color": "Ääriviivan väri",
|
|
||||||
"outline_thickness": "Ääriviivan paksuus",
|
|
||||||
"background_opacity": "Taustan läpinäkyvyys",
|
|
||||||
"outline_opacity": "Ääriviivan Läpinäkyvyys",
|
|
||||||
"bold_text": "Lihavoi teksti",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Musta",
|
|
||||||
"Gray": "Harmaa",
|
|
||||||
"Silver": "Hopea",
|
|
||||||
"White": "Valkoinen",
|
|
||||||
"Maroon": "Maroon",
|
|
||||||
"Red": "Punainen",
|
|
||||||
"Fuchsia": "Fuchsia",
|
|
||||||
"Yellow": "Keltainen",
|
|
||||||
"Olive": "Oliivit",
|
|
||||||
"Green": "Vihreä",
|
|
||||||
"Teal": "Sinappi",
|
|
||||||
"Lime": "Limea",
|
|
||||||
"Purple": "Violetti",
|
|
||||||
"Navy": "Laiva",
|
|
||||||
"Blue": "Sininen",
|
|
||||||
"Aqua": "Vesi"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "Ei mitään",
|
|
||||||
"Thin": "Ohut",
|
|
||||||
"Normal": "Normaali",
|
|
||||||
"Thick": "Paksu"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Subtitle Color",
|
|
||||||
"subtitle_background_color": "Background Color",
|
|
||||||
"subtitle_font": "Subtitle Font",
|
|
||||||
"ksplayer_title": "KSPlayer Settings",
|
|
||||||
"hardware_decode": "Hardware Decoding",
|
|
||||||
"hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +278,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC Subtitle Settings",
|
|
||||||
"hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.",
|
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"bold": "Bold Text",
|
|
||||||
"margin": "Bottom Margin"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Video Player",
|
|
||||||
"video_player": "Video Player",
|
|
||||||
"video_player_description": "Choose which video player to use on iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Muut",
|
"other_title": "Muut",
|
||||||
"video_orientation": "Videon suunta",
|
"video_orientation": "Videon suunta",
|
||||||
@@ -351,11 +295,6 @@
|
|||||||
"UNKNOWN": "Tuntematon"
|
"UNKNOWN": "Tuntematon"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Turvallinen alue ohjaimissa",
|
"safe_area_in_controls": "Turvallinen alue ohjaimissa",
|
||||||
"video_player": "Videosoitin",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Kokeellinen + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Näytä mukautetut valikkolinkit",
|
"show_custom_menu_links": "Näytä mukautetut valikkolinkit",
|
||||||
"show_large_home_carousel": "Näytä suuri kotikaruselli (beta)",
|
"show_large_home_carousel": "Näytä suuri kotikaruselli (beta)",
|
||||||
"hide_libraries": "Piilota kirjastot",
|
"hide_libraries": "Piilota kirjastot",
|
||||||
@@ -367,9 +306,6 @@
|
|||||||
"max_auto_play_episode_count": "Automaattisten Toistojaksojen Maksimimäärä",
|
"max_auto_play_episode_count": "Automaattisten Toistojaksojen Maksimimäärä",
|
||||||
"disabled": "Pois Käytöstä"
|
"disabled": "Pois Käytöstä"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Lataukset"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Music",
|
"title": "Music",
|
||||||
"playback_title": "Playback",
|
"playback_title": "Playback",
|
||||||
@@ -413,23 +349,18 @@
|
|||||||
"read_more_about_marlin": "Lue lisää Marlinista.",
|
"read_more_about_marlin": "Lue lisää Marlinista.",
|
||||||
"save_button": "Tallenna",
|
"save_button": "Tallenna",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Tallennettu",
|
"saved": "Tallennettu"
|
||||||
"refreshed": "Settings refreshed from server"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Refresh Settings from Server"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Enable Streamystats",
|
|
||||||
"disable_streamystats": "Disable Streamystats",
|
"disable_streamystats": "Disable Streamystats",
|
||||||
"enable_search": "Use for Search",
|
"enable_search": "Use for Search",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
||||||
"read_more_about_streamystats": "Read More About Streamystats.",
|
"read_more_about_streamystats": "Read More About Streamystats.",
|
||||||
"save_button": "Save",
|
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"features_title": "Features",
|
"features_title": "Features",
|
||||||
"home_sections_title": "Home Sections",
|
|
||||||
"enable_movie_recommendations": "Movie Recommendations",
|
"enable_movie_recommendations": "Movie Recommendations",
|
||||||
"enable_series_recommendations": "Series Recommendations",
|
"enable_series_recommendations": "Series Recommendations",
|
||||||
"enable_promoted_watchlists": "Promoted Watchlists",
|
"enable_promoted_watchlists": "Promoted Watchlists",
|
||||||
@@ -445,8 +376,7 @@
|
|||||||
"refresh_from_server": "Refresh Settings from Server"
|
"refresh_from_server": "Refresh Settings from Server"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Enable our Watchlist integration",
|
"watchlist_enabler": "Enable our Watchlist integration"
|
||||||
"watchlist_button": "Toggle Watchlist integration"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +387,6 @@
|
|||||||
"delete_all_downloaded_files": "Poista kaikki ladatut tiedostot",
|
"delete_all_downloaded_files": "Poista kaikki ladatut tiedostot",
|
||||||
"music_cache_title": "Music Cache",
|
"music_cache_title": "Music Cache",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Enable Music Cache",
|
|
||||||
"clear_music_cache": "Clear Music Cache",
|
"clear_music_cache": "Clear Music Cache",
|
||||||
"music_cache_size": "{{size}} cached",
|
"music_cache_size": "{{size}} cached",
|
||||||
"music_cache_cleared": "Music cache cleared",
|
"music_cache_cleared": "Music cache cleared",
|
||||||
@@ -467,8 +396,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -490,15 +417,12 @@
|
|||||||
"system": "Järjestelmä"
|
"system": "Järjestelmä"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Virhe tiedostojen poistamisessa",
|
"error_deleting_files": "Virhe tiedostojen poistamisessa"
|
||||||
"background_downloads_enabled": "Taustalataukset käytössä",
|
|
||||||
"background_downloads_disabled": "Taustalataukset pois käytöstä"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -508,6 +432,10 @@
|
|||||||
"4_hours": "4 hours",
|
"4_hours": "4 hours",
|
||||||
"24_hours": "24 hours"
|
"24_hours": "24 hours"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"title": "Dashboard",
|
||||||
|
"sessions_title": "Sessions"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sessions": {
|
"sessions": {
|
||||||
@@ -516,15 +444,12 @@
|
|||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"downloads_title": "Lataukset",
|
"downloads_title": "Lataukset",
|
||||||
"tvseries": "TV-sarjat",
|
"series": "TV-sarjat",
|
||||||
"movies": "Elokuvat",
|
"movies": "Elokuvat",
|
||||||
"queue": "Jonot",
|
|
||||||
"other_media": "Muu media",
|
"other_media": "Muu media",
|
||||||
"queue_hint": "Jonot ja lataukset menetetään sovelluksen uudelleenkäynnistyksen yhteydessä",
|
|
||||||
"no_items_in_queue": "Ei kohteita jonossa",
|
|
||||||
"no_downloaded_items": "Ei ladattuja kohteita",
|
"no_downloaded_items": "Ei ladattuja kohteita",
|
||||||
"delete_all_movies_button": "Poista kaikki elokuvat",
|
"delete_all_movies_button": "Poista kaikki elokuvat",
|
||||||
"delete_all_tvseries_button": "Poista kaikki TV-sarjat",
|
"delete_all_series_button": "Poista kaikki TV-sarjat",
|
||||||
"delete_all_button": "Poista kaikki",
|
"delete_all_button": "Poista kaikki",
|
||||||
"delete_all_other_media_button": "Poista muu media",
|
"delete_all_other_media_button": "Poista muu media",
|
||||||
"active_download": "Aktiivinen lataus",
|
"active_download": "Aktiivinen lataus",
|
||||||
@@ -542,17 +467,12 @@
|
|||||||
"you_are_not_allowed_to_download_files": "Sinulla ei ole lupaa ladata tiedostoja.",
|
"you_are_not_allowed_to_download_files": "Sinulla ei ole lupaa ladata tiedostoja.",
|
||||||
"deleted_all_movies_successfully": "Kaikki elokuvat poistettu onnistuneesti!",
|
"deleted_all_movies_successfully": "Kaikki elokuvat poistettu onnistuneesti!",
|
||||||
"failed_to_delete_all_movies": "Kaikkien elokuvien poistaminen epäonnistui",
|
"failed_to_delete_all_movies": "Kaikkien elokuvien poistaminen epäonnistui",
|
||||||
"deleted_all_tvseries_successfully": "Kaikki TV-sarjat poistettu onnistuneesti!",
|
"deleted_all_series_successfully": "Kaikki TV-sarjat poistettu onnistuneesti!",
|
||||||
"failed_to_delete_all_tvseries": "Kaikkien TV-sarjojen poistaminen epäonnistui",
|
"failed_to_delete_all_series": "Kaikkien TV-sarjojen poistaminen epäonnistui",
|
||||||
"deleted_media_successfully": "Muu media poistettu onnistuneesti!",
|
"deleted_media_successfully": "Muu media poistettu onnistuneesti!",
|
||||||
"failed_to_delete_media": "Muiden medioiden poistaminen epäonnistui",
|
"failed_to_delete_media": "Muiden medioiden poistaminen epäonnistui",
|
||||||
"download_deleted": "Lataus Poistettu",
|
|
||||||
"download_cancelled": "Lataus peruutettu",
|
"download_cancelled": "Lataus peruutettu",
|
||||||
"could_not_delete_download": "Latausta Ei Voitu Poistaa",
|
"could_not_delete_download": "Latausta Ei Voitu Poistaa",
|
||||||
"download_paused": "Lataus Keskeytetty",
|
|
||||||
"could_not_pause_download": "Latausta Ei Voitu Keskeyttää",
|
|
||||||
"download_resumed": "Lataus Jatketaan",
|
|
||||||
"could_not_resume_download": "Latausta Ei Voitu Jatkaa.",
|
|
||||||
"download_completed": "Lataus valmis",
|
"download_completed": "Lataus valmis",
|
||||||
"download_failed": "Lataus epäonnistui",
|
"download_failed": "Lataus epäonnistui",
|
||||||
"download_failed_for_item": "Lataus epäonnistui kohteelle {{item}} - {{error}}",
|
"download_failed_for_item": "Lataus epäonnistui kohteelle {{item}} - {{error}}",
|
||||||
@@ -562,10 +482,7 @@
|
|||||||
"item_already_downloading": "{{item}} is already downloading",
|
"item_already_downloading": "{{item}} is already downloading",
|
||||||
"all_files_deleted": "Kaikki lataukset poistettu onnistuneesti",
|
"all_files_deleted": "Kaikki lataukset poistettu onnistuneesti",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} poistettu",
|
"files_deleted_by_type": "{{count}} {{type}} poistettu",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Kaikki tiedostot, kansiot ja tehtävät poistettu onnistuneesti",
|
|
||||||
"failed_to_clean_cache_directory": "Välimuistin hakemiston puhdistus epäonnistui",
|
|
||||||
"could_not_get_download_url_for_item": "Latauksen URL-osoitetta ei voitu ladata {{itemName}}",
|
"could_not_get_download_url_for_item": "Latauksen URL-osoitetta ei voitu ladata {{itemName}}",
|
||||||
"go_to_downloads": "Siirry latauksiin",
|
|
||||||
"file_deleted": "{{item}} poistettu"
|
"file_deleted": "{{item}} poistettu"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +500,17 @@
|
|||||||
"none": "Ei mitään",
|
"none": "Ei mitään",
|
||||||
"track": "Track",
|
"track": "Track",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
"next": "Next",
|
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
"continue": "Continue",
|
"continue": "Continue",
|
||||||
"verifying": "Verifying...",
|
"verifying": "Verifying...",
|
||||||
"login": "Login",
|
"login": "Login",
|
||||||
"refresh": "Refresh"
|
"episodes": "Episodes",
|
||||||
|
"movies": "Movies",
|
||||||
|
"loading": "Loading…",
|
||||||
|
"seeAll": "See all"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Haku...",
|
"search": "Haku...",
|
||||||
@@ -691,10 +609,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Suoratoistoa ei voitu luoda Chromecastia varten",
|
"could_not_create_stream_for_chromecast": "Suoratoistoa ei voitu luoda Chromecastia varten",
|
||||||
"message_from_server": "Viesti palvelimelta: {{message}}",
|
"message_from_server": "Viesti palvelimelta: {{message}}",
|
||||||
"next_episode": "Seuraava Jakso",
|
"next_episode": "Seuraava Jakso",
|
||||||
"refresh_tracks": "Päivitä Kappaleet",
|
|
||||||
"audio_tracks": "Ääni Kappaleet:",
|
|
||||||
"playback_state": "Toiston Tila:",
|
|
||||||
"index": "Indeksi:",
|
|
||||||
"continue_watching": "Jatka katsomista",
|
"continue_watching": "Jatka katsomista",
|
||||||
"go_back": "Siirry Takaisin",
|
"go_back": "Siirry Takaisin",
|
||||||
"downloaded_file_title": "Tämä tiedosto on ladattuna",
|
"downloaded_file_title": "Tämä tiedosto on ladattuna",
|
||||||
@@ -723,7 +637,8 @@
|
|||||||
"stopPlayback": "Stop Playback",
|
"stopPlayback": "Stop Playback",
|
||||||
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
||||||
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
||||||
"downloaded": "Downloaded"
|
"downloaded": "Downloaded",
|
||||||
|
"missing_parameters": "Missing playback parameters"
|
||||||
},
|
},
|
||||||
"chapters": {
|
"chapters": {
|
||||||
"title": "Chapters",
|
"title": "Chapters",
|
||||||
@@ -761,7 +676,6 @@
|
|||||||
"show_more": "Näytä Lisää",
|
"show_more": "Näytä Lisää",
|
||||||
"show_less": "Näytä Vähemmän",
|
"show_less": "Näytä Vähemmän",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -784,7 +698,8 @@
|
|||||||
"resume_playback": "Resume Playback",
|
"resume_playback": "Resume Playback",
|
||||||
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
||||||
"play_from_start": "Play from Start",
|
"play_from_start": "Play from Start",
|
||||||
"continue_from": "Continue from {{time}}"
|
"continue_from": "Continue from {{time}}",
|
||||||
|
"no_data_available": "No data available"
|
||||||
},
|
},
|
||||||
"live_tv": {
|
"live_tv": {
|
||||||
"next": "Seuraava",
|
"next": "Seuraava",
|
||||||
@@ -888,13 +803,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "tracks"
|
"tracks": "tracks"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "All"
|
|
||||||
},
|
|
||||||
"recently_added": "Recently Added",
|
"recently_added": "Recently Added",
|
||||||
"recently_played": "Recently Played",
|
"recently_played": "Recently Played",
|
||||||
"frequently_played": "Frequently Played",
|
"frequently_played": "Frequently Played",
|
||||||
"explore": "Explore",
|
|
||||||
"top_tracks": "Top Tracks",
|
"top_tracks": "Top Tracks",
|
||||||
"play": "Play",
|
"play": "Play",
|
||||||
"shuffle": "Shuffle",
|
"shuffle": "Shuffle",
|
||||||
@@ -1028,7 +939,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -261,43 +261,6 @@
|
|||||||
"None": "Aucun",
|
"None": "Aucun",
|
||||||
"OnlyForced": "Forcés seulement"
|
"OnlyForced": "Forcés seulement"
|
||||||
},
|
},
|
||||||
"text_color": "Couleur du texte",
|
|
||||||
"background_color": "Couleur d'arrière-plan",
|
|
||||||
"outline_color": "Couleur du contour",
|
|
||||||
"outline_thickness": "Épaisseur du contour",
|
|
||||||
"background_opacity": "Opacité de l'arrière-plan",
|
|
||||||
"outline_opacity": "Opacité du contour",
|
|
||||||
"bold_text": "Texte en gras",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Noir",
|
|
||||||
"Gray": "Gris",
|
|
||||||
"Silver": "Argent",
|
|
||||||
"White": "Blanc",
|
|
||||||
"Maroon": "Marron",
|
|
||||||
"Red": "Rouge",
|
|
||||||
"Fuchsia": "Fuchsia",
|
|
||||||
"Yellow": "Jaune",
|
|
||||||
"Olive": "Olive",
|
|
||||||
"Green": "Vert",
|
|
||||||
"Teal": "Bleu canard",
|
|
||||||
"Lime": "Citron vert",
|
|
||||||
"Purple": "Violet",
|
|
||||||
"Navy": "Bleu marine",
|
|
||||||
"Blue": "Bleu",
|
|
||||||
"Aqua": "Bleu turquoise"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "Aucun",
|
|
||||||
"Thin": "Maigre",
|
|
||||||
"Normal": "Normale",
|
|
||||||
"Thick": "Épais"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Couleur des sous-titres",
|
|
||||||
"subtitle_background_color": "Couleur d'arrière-plan",
|
|
||||||
"subtitle_font": "Police des sous-titres",
|
|
||||||
"ksplayer_title": "Paramètres de KSPlayer",
|
|
||||||
"hardware_decode": "Décodage matériel",
|
|
||||||
"hardware_decode_description": "Utilisez l’accélération matérielle pour le décodage vidéo. Désactivez si vous rencontrez des problèmes de lecture.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +278,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "Paramètres des sous-titres VLC",
|
|
||||||
"hint": "Personnaliser l'apparence des sous-titres pour le lecteur VLC. Les changements prennent effet lors de la lecture suivante.",
|
|
||||||
"text_color": "Couleur du texte",
|
|
||||||
"background_color": "Couleur d'arrière-plan",
|
|
||||||
"background_opacity": "Opacité de l'arrière-plan",
|
|
||||||
"outline_color": "Couleur du contour",
|
|
||||||
"outline_opacity": "Opacité du contour",
|
|
||||||
"outline_thickness": "Épaisseur du contour",
|
|
||||||
"bold": "Texte en gras",
|
|
||||||
"margin": "Marge inférieure"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Lecteur vidéo",
|
|
||||||
"video_player": "Lecteur vidéo",
|
|
||||||
"video_player_description": "Choisissez le lecteur vidéo à utiliser sur iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Autres",
|
"other_title": "Autres",
|
||||||
"video_orientation": "Orientation vidéo",
|
"video_orientation": "Orientation vidéo",
|
||||||
@@ -351,11 +295,6 @@
|
|||||||
"UNKNOWN": "Inconnu"
|
"UNKNOWN": "Inconnu"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Zone de sécurité dans les contrôles",
|
"safe_area_in_controls": "Zone de sécurité dans les contrôles",
|
||||||
"video_player": "Lecteur vidéo",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Expérimental + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Afficher les liens personnalisés",
|
"show_custom_menu_links": "Afficher les liens personnalisés",
|
||||||
"show_large_home_carousel": "Afficher le grand carrousel d’accueil (bêta)",
|
"show_large_home_carousel": "Afficher le grand carrousel d’accueil (bêta)",
|
||||||
"hide_libraries": "Cacher des bibliothèques",
|
"hide_libraries": "Cacher des bibliothèques",
|
||||||
@@ -367,9 +306,6 @@
|
|||||||
"max_auto_play_episode_count": "Nombre d'épisodes en lecture automatique max",
|
"max_auto_play_episode_count": "Nombre d'épisodes en lecture automatique max",
|
||||||
"disabled": "Désactivé"
|
"disabled": "Désactivé"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Téléchargements"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Musique",
|
"title": "Musique",
|
||||||
"playback_title": "Lecture",
|
"playback_title": "Lecture",
|
||||||
@@ -413,23 +349,18 @@
|
|||||||
"read_more_about_marlin": "En savoir plus sur Marlin.",
|
"read_more_about_marlin": "En savoir plus sur Marlin.",
|
||||||
"save_button": "Enregistrer",
|
"save_button": "Enregistrer",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Enregistré",
|
"saved": "Enregistré"
|
||||||
"refreshed": "Paramètres actualisés depuis le serveur"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Rafraîchir les paramètres depuis le serveur"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Activer Streamystats",
|
|
||||||
"disable_streamystats": "Désactiver Streamystats",
|
"disable_streamystats": "Désactiver Streamystats",
|
||||||
"enable_search": "Utiliser pour la recherche",
|
"enable_search": "Utiliser pour la recherche",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Entrez l'URL de votre serveur Streamystats. L'URL doit inclure http ou https et éventuellement le port.",
|
"streamystats_search_hint": "Entrez l'URL de votre serveur Streamystats. L'URL doit inclure http ou https et éventuellement le port.",
|
||||||
"read_more_about_streamystats": "En savoir plus sur Streamystats.",
|
"read_more_about_streamystats": "En savoir plus sur Streamystats.",
|
||||||
"save_button": "Enregistrer",
|
|
||||||
"save": "Enregistrer",
|
"save": "Enregistrer",
|
||||||
"features_title": "Fonctionnalités",
|
"features_title": "Fonctionnalités",
|
||||||
"home_sections_title": "Sections de la page d´accueil",
|
|
||||||
"enable_movie_recommendations": "Recommandations de films",
|
"enable_movie_recommendations": "Recommandations de films",
|
||||||
"enable_series_recommendations": "Recommandations de séries",
|
"enable_series_recommendations": "Recommandations de séries",
|
||||||
"enable_promoted_watchlists": "Listes de lecture promues",
|
"enable_promoted_watchlists": "Listes de lecture promues",
|
||||||
@@ -445,8 +376,7 @@
|
|||||||
"refresh_from_server": "Rafraîchir les paramètres depuis le serveur"
|
"refresh_from_server": "Rafraîchir les paramètres depuis le serveur"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Activer l'intégration de notre liste de lecture",
|
"watchlist_enabler": "Activer l'intégration de notre liste de lecture"
|
||||||
"watchlist_button": "Activer l'intégration de notre liste de lecture"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +387,6 @@
|
|||||||
"delete_all_downloaded_files": "Supprimer tous les fichiers téléchargés",
|
"delete_all_downloaded_files": "Supprimer tous les fichiers téléchargés",
|
||||||
"music_cache_title": "Mise en cache de la musique",
|
"music_cache_title": "Mise en cache de la musique",
|
||||||
"music_cache_description": "Mettez automatiquement en cache les chansons au fur et à mesure que vous écoutez pour une lecture plus fluide et une prise en charge hors ligne",
|
"music_cache_description": "Mettez automatiquement en cache les chansons au fur et à mesure que vous écoutez pour une lecture plus fluide et une prise en charge hors ligne",
|
||||||
"enable_music_cache": "Activer le cache sur la musique",
|
|
||||||
"clear_music_cache": "Vider le cache de la musique",
|
"clear_music_cache": "Vider le cache de la musique",
|
||||||
"music_cache_size": "{{size}} mis en cache",
|
"music_cache_size": "{{size}} mis en cache",
|
||||||
"music_cache_cleared": "Cache de musique effacé",
|
"music_cache_cleared": "Cache de musique effacé",
|
||||||
@@ -467,8 +396,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -490,15 +417,12 @@
|
|||||||
"system": "Système"
|
"system": "Système"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Erreur lors de la suppression des fichiers",
|
"error_deleting_files": "Erreur lors de la suppression des fichiers"
|
||||||
"background_downloads_enabled": "Téléchargements en arrière-plan activés",
|
|
||||||
"background_downloads_disabled": "Téléchargements en arrière-plan désactivés"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -508,6 +432,10 @@
|
|||||||
"4_hours": "4 hours",
|
"4_hours": "4 hours",
|
||||||
"24_hours": "24 hours"
|
"24_hours": "24 hours"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"title": "Dashboard",
|
||||||
|
"sessions_title": "Sessions"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sessions": {
|
"sessions": {
|
||||||
@@ -516,15 +444,12 @@
|
|||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"downloads_title": "Téléchargements",
|
"downloads_title": "Téléchargements",
|
||||||
"tvseries": "Séries",
|
"series": "Séries",
|
||||||
"movies": "Films",
|
"movies": "Films",
|
||||||
"queue": "File d'attente",
|
|
||||||
"other_media": "Autres médias",
|
"other_media": "Autres médias",
|
||||||
"queue_hint": "La file d'attente et les téléchargements seront perdus au redémarrage de l'application",
|
|
||||||
"no_items_in_queue": "Aucun téléchargement de média dans la file d'attente",
|
|
||||||
"no_downloaded_items": "Aucun média téléchargé",
|
"no_downloaded_items": "Aucun média téléchargé",
|
||||||
"delete_all_movies_button": "Supprimer tous les films",
|
"delete_all_movies_button": "Supprimer tous les films",
|
||||||
"delete_all_tvseries_button": "Supprimer toutes les séries",
|
"delete_all_series_button": "Supprimer toutes les séries",
|
||||||
"delete_all_button": "Supprimer tous les médias",
|
"delete_all_button": "Supprimer tous les médias",
|
||||||
"delete_all_other_media_button": "Supprimer un autre média",
|
"delete_all_other_media_button": "Supprimer un autre média",
|
||||||
"active_download": "Téléchargement actif",
|
"active_download": "Téléchargement actif",
|
||||||
@@ -542,17 +467,12 @@
|
|||||||
"you_are_not_allowed_to_download_files": "Vous n'êtes pas autorisé à télécharger des fichiers.",
|
"you_are_not_allowed_to_download_files": "Vous n'êtes pas autorisé à télécharger des fichiers.",
|
||||||
"deleted_all_movies_successfully": "Tous les films ont été supprimés avec succès !",
|
"deleted_all_movies_successfully": "Tous les films ont été supprimés avec succès !",
|
||||||
"failed_to_delete_all_movies": "Échec de la suppression de tous les films",
|
"failed_to_delete_all_movies": "Échec de la suppression de tous les films",
|
||||||
"deleted_all_tvseries_successfully": "Toutes les séries ont été supprimées avec succès !",
|
"deleted_all_series_successfully": "Toutes les séries ont été supprimées avec succès !",
|
||||||
"failed_to_delete_all_tvseries": "Échec de la suppression de toutes les séries",
|
"failed_to_delete_all_series": "Échec de la suppression de toutes les séries",
|
||||||
"deleted_media_successfully": "Les autres médias ont été supprimés avec succès !",
|
"deleted_media_successfully": "Les autres médias ont été supprimés avec succès !",
|
||||||
"failed_to_delete_media": "Échec de la suppression d'un autre média",
|
"failed_to_delete_media": "Échec de la suppression d'un autre média",
|
||||||
"download_deleted": "Téléchargement supprimé",
|
|
||||||
"download_cancelled": "Téléchargement annulé",
|
"download_cancelled": "Téléchargement annulé",
|
||||||
"could_not_delete_download": "Impossible de supprimer le téléchargement",
|
"could_not_delete_download": "Impossible de supprimer le téléchargement",
|
||||||
"download_paused": "Téléchargement en pause",
|
|
||||||
"could_not_pause_download": "Impossible de mettre en pause le téléchargement",
|
|
||||||
"download_resumed": "Reprise du téléchargement",
|
|
||||||
"could_not_resume_download": "Impossible de reprendre le téléchargement",
|
|
||||||
"download_completed": "Téléchargement terminé",
|
"download_completed": "Téléchargement terminé",
|
||||||
"download_failed": "Échec du téléchargement",
|
"download_failed": "Échec du téléchargement",
|
||||||
"download_failed_for_item": "Échec du téléchargement pour {{item}} - {{error}}",
|
"download_failed_for_item": "Échec du téléchargement pour {{item}} - {{error}}",
|
||||||
@@ -562,10 +482,7 @@
|
|||||||
"item_already_downloading": "{{item}} est déjà en cours de téléchargement",
|
"item_already_downloading": "{{item}} est déjà en cours de téléchargement",
|
||||||
"all_files_deleted": "Tous les téléchargements supprimés avec succès",
|
"all_files_deleted": "Tous les téléchargements supprimés avec succès",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} supprimé",
|
"files_deleted_by_type": "{{count}} {{type}} supprimé",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Tous les fichiers, dossiers et tâches ont été supprimés avec succès",
|
|
||||||
"failed_to_clean_cache_directory": "Échec du nettoyage du répertoire de cache",
|
|
||||||
"could_not_get_download_url_for_item": "Échec d'obtention de l'URL de téléchargement pour {{itemName}}",
|
"could_not_get_download_url_for_item": "Échec d'obtention de l'URL de téléchargement pour {{itemName}}",
|
||||||
"go_to_downloads": "Aller aux téléchargements",
|
|
||||||
"file_deleted": "{{item}} supprimé"
|
"file_deleted": "{{item}} supprimé"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +500,17 @@
|
|||||||
"none": "Aucun",
|
"none": "Aucun",
|
||||||
"track": "Suivre",
|
"track": "Suivre",
|
||||||
"cancel": "Annuler",
|
"cancel": "Annuler",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Supprimer",
|
"delete": "Supprimer",
|
||||||
"ok": "Ok",
|
"ok": "Ok",
|
||||||
"remove": "Retirer",
|
"remove": "Retirer",
|
||||||
"next": "Suivant",
|
|
||||||
"back": "Précédent",
|
"back": "Précédent",
|
||||||
"continue": "Continuer",
|
"continue": "Continuer",
|
||||||
"verifying": "Vérification...",
|
"verifying": "Vérification...",
|
||||||
"login": "Login",
|
"login": "Login",
|
||||||
"refresh": "Refresh"
|
"episodes": "Episodes",
|
||||||
|
"movies": "Movies",
|
||||||
|
"loading": "Loading…",
|
||||||
|
"seeAll": "See all"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Rechercher...",
|
"search": "Rechercher...",
|
||||||
@@ -691,10 +609,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Impossible de créer un flux sur la Chromecast",
|
"could_not_create_stream_for_chromecast": "Impossible de créer un flux sur la Chromecast",
|
||||||
"message_from_server": "Message du serveur : {{message}}",
|
"message_from_server": "Message du serveur : {{message}}",
|
||||||
"next_episode": "Épisode suivant",
|
"next_episode": "Épisode suivant",
|
||||||
"refresh_tracks": "Rafraîchir les pistes",
|
|
||||||
"audio_tracks": "Pistes audio :",
|
|
||||||
"playback_state": "État de lecture :",
|
|
||||||
"index": "Index :",
|
|
||||||
"continue_watching": "Continuer à regarder",
|
"continue_watching": "Continuer à regarder",
|
||||||
"go_back": "Retour",
|
"go_back": "Retour",
|
||||||
"downloaded_file_title": "Ce fichier est téléchargé",
|
"downloaded_file_title": "Ce fichier est téléchargé",
|
||||||
@@ -723,7 +637,8 @@
|
|||||||
"stopPlayback": "Stop Playback",
|
"stopPlayback": "Stop Playback",
|
||||||
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
||||||
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
||||||
"downloaded": "Downloaded"
|
"downloaded": "Downloaded",
|
||||||
|
"missing_parameters": "Missing playback parameters"
|
||||||
},
|
},
|
||||||
"chapters": {
|
"chapters": {
|
||||||
"title": "Chapters",
|
"title": "Chapters",
|
||||||
@@ -761,7 +676,6 @@
|
|||||||
"show_more": "Afficher plus",
|
"show_more": "Afficher plus",
|
||||||
"show_less": "Afficher moins",
|
"show_less": "Afficher moins",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -784,7 +698,8 @@
|
|||||||
"resume_playback": "Resume Playback",
|
"resume_playback": "Resume Playback",
|
||||||
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
||||||
"play_from_start": "Play from Start",
|
"play_from_start": "Play from Start",
|
||||||
"continue_from": "Continue from {{time}}"
|
"continue_from": "Continue from {{time}}",
|
||||||
|
"no_data_available": "No data available"
|
||||||
},
|
},
|
||||||
"live_tv": {
|
"live_tv": {
|
||||||
"next": "Suivant",
|
"next": "Suivant",
|
||||||
@@ -888,13 +803,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "morceaux"
|
"tracks": "morceaux"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "Toutes"
|
|
||||||
},
|
|
||||||
"recently_added": "Ajoutés récemment",
|
"recently_added": "Ajoutés récemment",
|
||||||
"recently_played": "Récemment joué",
|
"recently_played": "Récemment joué",
|
||||||
"frequently_played": "Fréquemment joué",
|
"frequently_played": "Fréquemment joué",
|
||||||
"explore": "Explorez",
|
|
||||||
"top_tracks": "Top chansons",
|
"top_tracks": "Top chansons",
|
||||||
"play": "Lecture",
|
"play": "Lecture",
|
||||||
"shuffle": "Aléatoire",
|
"shuffle": "Aléatoire",
|
||||||
@@ -1028,7 +939,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -261,43 +261,6 @@
|
|||||||
"None": "ללא",
|
"None": "ללא",
|
||||||
"OnlyForced": "רק כפוי"
|
"OnlyForced": "רק כפוי"
|
||||||
},
|
},
|
||||||
"text_color": "צבע הטקסט",
|
|
||||||
"background_color": "צבע רקע",
|
|
||||||
"outline_color": "צבע קו מתאר",
|
|
||||||
"outline_thickness": "עובי קו מתאר",
|
|
||||||
"background_opacity": "שקיפות רקע",
|
|
||||||
"outline_opacity": "אטימות קו מתאר",
|
|
||||||
"bold_text": "טקסט בולט",
|
|
||||||
"colors": {
|
|
||||||
"Black": "שחור",
|
|
||||||
"Gray": "אפור",
|
|
||||||
"Silver": "כסף",
|
|
||||||
"White": "לבן",
|
|
||||||
"Maroon": "חום ערמוני",
|
|
||||||
"Red": "אדום",
|
|
||||||
"Fuchsia": "פוקסיה",
|
|
||||||
"Yellow": "צהוב",
|
|
||||||
"Olive": "זית",
|
|
||||||
"Green": "ירוק",
|
|
||||||
"Teal": "תכלת",
|
|
||||||
"Lime": "ירוק ליים",
|
|
||||||
"Purple": "סגול",
|
|
||||||
"Navy": "כחול כהה",
|
|
||||||
"Blue": "כחול",
|
|
||||||
"Aqua": "כחול בהיר"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "ללא",
|
|
||||||
"Thin": "דק",
|
|
||||||
"Normal": "רגיל",
|
|
||||||
"Thick": "עבה"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Subtitle Color",
|
|
||||||
"subtitle_background_color": "Background Color",
|
|
||||||
"subtitle_font": "Subtitle Font",
|
|
||||||
"ksplayer_title": "KSPlayer Settings",
|
|
||||||
"hardware_decode": "Hardware Decoding",
|
|
||||||
"hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +278,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC Subtitle Settings",
|
|
||||||
"hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.",
|
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"bold": "Bold Text",
|
|
||||||
"margin": "Bottom Margin"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "נגן וידאו",
|
|
||||||
"video_player": "נגן וידאו",
|
|
||||||
"video_player_description": "Choose which video player to use on iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "אחר",
|
"other_title": "אחר",
|
||||||
"video_orientation": "כיוון וידיאו",
|
"video_orientation": "כיוון וידיאו",
|
||||||
@@ -351,11 +295,6 @@
|
|||||||
"UNKNOWN": "לא ידוע"
|
"UNKNOWN": "לא ידוע"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "איזור בטוח בפקדים",
|
"safe_area_in_controls": "איזור בטוח בפקדים",
|
||||||
"video_player": "נגן וידאו",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (ניסיוני + נגן בתוך נגן)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "הצג קישורים לתפריטים מותאמים אישית",
|
"show_custom_menu_links": "הצג קישורים לתפריטים מותאמים אישית",
|
||||||
"show_large_home_carousel": "הצג קרוסלה גדולה במסך הבית (בטא)",
|
"show_large_home_carousel": "הצג קרוסלה גדולה במסך הבית (בטא)",
|
||||||
"hide_libraries": "הסתר ספריות",
|
"hide_libraries": "הסתר ספריות",
|
||||||
@@ -367,9 +306,6 @@
|
|||||||
"max_auto_play_episode_count": "כמות פרקים מקסימלית לניגון אוטומטי",
|
"max_auto_play_episode_count": "כמות פרקים מקסימלית לניגון אוטומטי",
|
||||||
"disabled": "כבוי"
|
"disabled": "כבוי"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "הורדות"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "מוזיקה",
|
"title": "מוזיקה",
|
||||||
"playback_title": "Playback",
|
"playback_title": "Playback",
|
||||||
@@ -413,23 +349,18 @@
|
|||||||
"read_more_about_marlin": "קרא עוד על Marlin.",
|
"read_more_about_marlin": "קרא עוד על Marlin.",
|
||||||
"save_button": "שמור",
|
"save_button": "שמור",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "נשמר",
|
"saved": "נשמר"
|
||||||
"refreshed": "Settings refreshed from server"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Refresh Settings from Server"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Enable Streamystats",
|
|
||||||
"disable_streamystats": "Disable Streamystats",
|
"disable_streamystats": "Disable Streamystats",
|
||||||
"enable_search": "Use for Search",
|
"enable_search": "Use for Search",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
||||||
"read_more_about_streamystats": "Read More About Streamystats.",
|
"read_more_about_streamystats": "Read More About Streamystats.",
|
||||||
"save_button": "Save",
|
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"features_title": "Features",
|
"features_title": "Features",
|
||||||
"home_sections_title": "Home Sections",
|
|
||||||
"enable_movie_recommendations": "Movie Recommendations",
|
"enable_movie_recommendations": "Movie Recommendations",
|
||||||
"enable_series_recommendations": "Series Recommendations",
|
"enable_series_recommendations": "Series Recommendations",
|
||||||
"enable_promoted_watchlists": "Promoted Watchlists",
|
"enable_promoted_watchlists": "Promoted Watchlists",
|
||||||
@@ -445,8 +376,7 @@
|
|||||||
"refresh_from_server": "Refresh Settings from Server"
|
"refresh_from_server": "Refresh Settings from Server"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Enable our Watchlist integration",
|
"watchlist_enabler": "Enable our Watchlist integration"
|
||||||
"watchlist_button": "Toggle Watchlist integration"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +387,6 @@
|
|||||||
"delete_all_downloaded_files": "מחק את כל הקבצים שהורדו",
|
"delete_all_downloaded_files": "מחק את כל הקבצים שהורדו",
|
||||||
"music_cache_title": "Music Cache",
|
"music_cache_title": "Music Cache",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Enable Music Cache",
|
|
||||||
"clear_music_cache": "Clear Music Cache",
|
"clear_music_cache": "Clear Music Cache",
|
||||||
"music_cache_size": "{{size}} cached",
|
"music_cache_size": "{{size}} cached",
|
||||||
"music_cache_cleared": "Music cache cleared",
|
"music_cache_cleared": "Music cache cleared",
|
||||||
@@ -467,8 +396,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -490,15 +417,12 @@
|
|||||||
"system": "מערכת"
|
"system": "מערכת"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "שגיאה במחיקת קבצים",
|
"error_deleting_files": "שגיאה במחיקת קבצים"
|
||||||
"background_downloads_enabled": "הורדה ברקע מופעלת",
|
|
||||||
"background_downloads_disabled": "הורדה ברקע כבויה"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -508,6 +432,10 @@
|
|||||||
"4_hours": "4 hours",
|
"4_hours": "4 hours",
|
||||||
"24_hours": "24 hours"
|
"24_hours": "24 hours"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"title": "Dashboard",
|
||||||
|
"sessions_title": "Sessions"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sessions": {
|
"sessions": {
|
||||||
@@ -516,15 +444,12 @@
|
|||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"downloads_title": "הורדות",
|
"downloads_title": "הורדות",
|
||||||
"tvseries": "סדרות",
|
"series": "סדרות",
|
||||||
"movies": "סרטים",
|
"movies": "סרטים",
|
||||||
"queue": "תוֹר",
|
|
||||||
"other_media": "תוכן אחר",
|
"other_media": "תוכן אחר",
|
||||||
"queue_hint": "התור וההורדות יאבדו בפתיחה מחדש של האפליקציה",
|
|
||||||
"no_items_in_queue": "אין פרטים בתור",
|
|
||||||
"no_downloaded_items": "אין פריטים שהורדו",
|
"no_downloaded_items": "אין פריטים שהורדו",
|
||||||
"delete_all_movies_button": "מחק את כל הסרטים",
|
"delete_all_movies_button": "מחק את כל הסרטים",
|
||||||
"delete_all_tvseries_button": "מחק את כל הסדרות",
|
"delete_all_series_button": "מחק את כל הסדרות",
|
||||||
"delete_all_button": "מחק הכל",
|
"delete_all_button": "מחק הכל",
|
||||||
"delete_all_other_media_button": "מחק שאר תוכן",
|
"delete_all_other_media_button": "מחק שאר תוכן",
|
||||||
"active_download": "הורדה פעילה",
|
"active_download": "הורדה פעילה",
|
||||||
@@ -542,17 +467,12 @@
|
|||||||
"you_are_not_allowed_to_download_files": "אתה לא מורשה להוריד קבצים.",
|
"you_are_not_allowed_to_download_files": "אתה לא מורשה להוריד קבצים.",
|
||||||
"deleted_all_movies_successfully": "כל הסרטים נמחקו בהצלחה!",
|
"deleted_all_movies_successfully": "כל הסרטים נמחקו בהצלחה!",
|
||||||
"failed_to_delete_all_movies": "נכשל במחיקת כל הסרטים",
|
"failed_to_delete_all_movies": "נכשל במחיקת כל הסרטים",
|
||||||
"deleted_all_tvseries_successfully": "כל הסדרות נמחקו בהצלחה!",
|
"deleted_all_series_successfully": "כל הסדרות נמחקו בהצלחה!",
|
||||||
"failed_to_delete_all_tvseries": "נכשל במחיקת כל הסדרות",
|
"failed_to_delete_all_series": "נכשל במחיקת כל הסדרות",
|
||||||
"deleted_media_successfully": "כל שאר התוכן נמחק בהצלחה!",
|
"deleted_media_successfully": "כל שאר התוכן נמחק בהצלחה!",
|
||||||
"failed_to_delete_media": "נכשל במחיקת שאר התוכן",
|
"failed_to_delete_media": "נכשל במחיקת שאר התוכן",
|
||||||
"download_deleted": "ההורדה נמחקה",
|
|
||||||
"download_cancelled": "ההורדה בוטלה",
|
"download_cancelled": "ההורדה בוטלה",
|
||||||
"could_not_delete_download": "לא היה ניתן למחוק את ההורדה",
|
"could_not_delete_download": "לא היה ניתן למחוק את ההורדה",
|
||||||
"download_paused": "ההורדה נעצרה",
|
|
||||||
"could_not_pause_download": "לא היה ניתן לעצור את ההורדה",
|
|
||||||
"download_resumed": "ההורדה חודשה",
|
|
||||||
"could_not_resume_download": "לא היה ניתן לחדש את ההורדה",
|
|
||||||
"download_completed": "ההורדה הושלמה",
|
"download_completed": "ההורדה הושלמה",
|
||||||
"download_failed": "ההורדה נכשלה",
|
"download_failed": "ההורדה נכשלה",
|
||||||
"download_failed_for_item": "ההורדה נכשלה עבור {{item}} - {{error}}",
|
"download_failed_for_item": "ההורדה נכשלה עבור {{item}} - {{error}}",
|
||||||
@@ -562,10 +482,7 @@
|
|||||||
"item_already_downloading": "{{item}} כבר נמצא בהורדה",
|
"item_already_downloading": "{{item}} כבר נמצא בהורדה",
|
||||||
"all_files_deleted": "כל ההורדות נמחקו בהצלחה",
|
"all_files_deleted": "כל ההורדות נמחקו בהצלחה",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} נמחקו",
|
"files_deleted_by_type": "{{count}} {{type}} נמחקו",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "כל הקבצים, התיקיות והעבודות נמחקו בהצלחה",
|
|
||||||
"failed_to_clean_cache_directory": "נכשל בניסיון למחוק את תיקיית המטמון",
|
|
||||||
"could_not_get_download_url_for_item": "לא היה ניתן להשיג את קישור ההורדה של {{itemName}}",
|
"could_not_get_download_url_for_item": "לא היה ניתן להשיג את קישור ההורדה של {{itemName}}",
|
||||||
"go_to_downloads": "עבור להורדות",
|
|
||||||
"file_deleted": "{{item}} נמחק"
|
"file_deleted": "{{item}} נמחק"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +500,17 @@
|
|||||||
"none": "ללא",
|
"none": "ללא",
|
||||||
"track": "Track",
|
"track": "Track",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
"next": "Next",
|
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
"continue": "Continue",
|
"continue": "Continue",
|
||||||
"verifying": "Verifying...",
|
"verifying": "Verifying...",
|
||||||
"login": "Login",
|
"login": "Login",
|
||||||
"refresh": "Refresh"
|
"episodes": "Episodes",
|
||||||
|
"movies": "Movies",
|
||||||
|
"loading": "Loading…",
|
||||||
|
"seeAll": "See all"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "חפש...",
|
"search": "חפש...",
|
||||||
@@ -691,10 +609,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "נכשל ביצירת זרם עבור Chromecast",
|
"could_not_create_stream_for_chromecast": "נכשל ביצירת זרם עבור Chromecast",
|
||||||
"message_from_server": "הודעה מהשרת: {{message}}",
|
"message_from_server": "הודעה מהשרת: {{message}}",
|
||||||
"next_episode": "הפרק הבא",
|
"next_episode": "הפרק הבא",
|
||||||
"refresh_tracks": "רענן רצועות",
|
|
||||||
"audio_tracks": "רצועות שמע:",
|
|
||||||
"playback_state": "מצב ניגון:",
|
|
||||||
"index": "מיקום:",
|
|
||||||
"continue_watching": "המשך לצפות",
|
"continue_watching": "המשך לצפות",
|
||||||
"go_back": "חזור",
|
"go_back": "חזור",
|
||||||
"downloaded_file_title": "You have this file downloaded",
|
"downloaded_file_title": "You have this file downloaded",
|
||||||
@@ -723,7 +637,8 @@
|
|||||||
"stopPlayback": "Stop Playback",
|
"stopPlayback": "Stop Playback",
|
||||||
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
||||||
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
||||||
"downloaded": "Downloaded"
|
"downloaded": "Downloaded",
|
||||||
|
"missing_parameters": "Missing playback parameters"
|
||||||
},
|
},
|
||||||
"chapters": {
|
"chapters": {
|
||||||
"title": "Chapters",
|
"title": "Chapters",
|
||||||
@@ -761,7 +676,6 @@
|
|||||||
"show_more": "הצג עוד",
|
"show_more": "הצג עוד",
|
||||||
"show_less": "הצג פחות",
|
"show_less": "הצג פחות",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -784,7 +698,8 @@
|
|||||||
"resume_playback": "Resume Playback",
|
"resume_playback": "Resume Playback",
|
||||||
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
||||||
"play_from_start": "Play from Start",
|
"play_from_start": "Play from Start",
|
||||||
"continue_from": "Continue from {{time}}"
|
"continue_from": "Continue from {{time}}",
|
||||||
|
"no_data_available": "No data available"
|
||||||
},
|
},
|
||||||
"live_tv": {
|
"live_tv": {
|
||||||
"next": "הבא",
|
"next": "הבא",
|
||||||
@@ -888,13 +803,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "tracks"
|
"tracks": "tracks"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "All"
|
|
||||||
},
|
|
||||||
"recently_added": "Recently Added",
|
"recently_added": "Recently Added",
|
||||||
"recently_played": "Recently Played",
|
"recently_played": "Recently Played",
|
||||||
"frequently_played": "Frequently Played",
|
"frequently_played": "Frequently Played",
|
||||||
"explore": "Explore",
|
|
||||||
"top_tracks": "Top Tracks",
|
"top_tracks": "Top Tracks",
|
||||||
"play": "Play",
|
"play": "Play",
|
||||||
"shuffle": "Shuffle",
|
"shuffle": "Shuffle",
|
||||||
@@ -1028,7 +939,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -261,43 +261,6 @@
|
|||||||
"None": "Nincs",
|
"None": "Nincs",
|
||||||
"OnlyForced": "Csak Kényszerített"
|
"OnlyForced": "Csak Kényszerített"
|
||||||
},
|
},
|
||||||
"text_color": "Szövegszín",
|
|
||||||
"background_color": "Háttérszín",
|
|
||||||
"outline_color": "Körvonal színe",
|
|
||||||
"outline_thickness": "Körvonal Vastagsága",
|
|
||||||
"background_opacity": "Háttér Áttetszőség",
|
|
||||||
"outline_opacity": "Körvonal Áttetszőség",
|
|
||||||
"bold_text": "Félkövér Szöveg",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Fekete",
|
|
||||||
"Gray": "Szürke",
|
|
||||||
"Silver": "Ezüst",
|
|
||||||
"White": "Fehér",
|
|
||||||
"Maroon": "Sötétvörös",
|
|
||||||
"Red": "Piros",
|
|
||||||
"Fuchsia": "Fukszia",
|
|
||||||
"Yellow": "Sárga",
|
|
||||||
"Olive": "Oliva",
|
|
||||||
"Green": "Zöld",
|
|
||||||
"Teal": "Türkiz",
|
|
||||||
"Lime": "Lime",
|
|
||||||
"Purple": "Lila",
|
|
||||||
"Navy": "Sötétkék",
|
|
||||||
"Blue": "Kék",
|
|
||||||
"Aqua": "Türkizkék"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "Nincs",
|
|
||||||
"Thin": "Vékony",
|
|
||||||
"Normal": "Normál",
|
|
||||||
"Thick": "Vastag"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Subtitle Color",
|
|
||||||
"subtitle_background_color": "Background Color",
|
|
||||||
"subtitle_font": "Subtitle Font",
|
|
||||||
"ksplayer_title": "KSPlayer Settings",
|
|
||||||
"hardware_decode": "Hardware Decoding",
|
|
||||||
"hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +278,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC Subtitle Settings",
|
|
||||||
"hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.",
|
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"bold": "Bold Text",
|
|
||||||
"margin": "Bottom Margin"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Video Player",
|
|
||||||
"video_player": "Video Player",
|
|
||||||
"video_player_description": "Choose which video player to use on iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Egyéb",
|
"other_title": "Egyéb",
|
||||||
"video_orientation": "Videó Tájolás",
|
"video_orientation": "Videó Tájolás",
|
||||||
@@ -351,11 +295,6 @@
|
|||||||
"UNKNOWN": "Ismeretlen"
|
"UNKNOWN": "Ismeretlen"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Biztonsági Sáv a Vezérlőkben",
|
"safe_area_in_controls": "Biztonsági Sáv a Vezérlőkben",
|
||||||
"video_player": "Videólejátszó",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Kísérleti + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Egyéni Menülinkek Megjelenítése",
|
"show_custom_menu_links": "Egyéni Menülinkek Megjelenítése",
|
||||||
"show_large_home_carousel": "Show Large Home Carousel (beta)",
|
"show_large_home_carousel": "Show Large Home Carousel (beta)",
|
||||||
"hide_libraries": "Könyvtárak Elrejtése",
|
"hide_libraries": "Könyvtárak Elrejtése",
|
||||||
@@ -367,9 +306,6 @@
|
|||||||
"max_auto_play_episode_count": "Max. Auto. Epizódlejátszás",
|
"max_auto_play_episode_count": "Max. Auto. Epizódlejátszás",
|
||||||
"disabled": "Letiltva"
|
"disabled": "Letiltva"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Letöltések"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Music",
|
"title": "Music",
|
||||||
"playback_title": "Playback",
|
"playback_title": "Playback",
|
||||||
@@ -413,23 +349,18 @@
|
|||||||
"read_more_about_marlin": "Tudj Meg Többet a Marlinról",
|
"read_more_about_marlin": "Tudj Meg Többet a Marlinról",
|
||||||
"save_button": "Mentés",
|
"save_button": "Mentés",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Mentve",
|
"saved": "Mentve"
|
||||||
"refreshed": "Settings refreshed from server"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Refresh Settings from Server"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Enable Streamystats",
|
|
||||||
"disable_streamystats": "Disable Streamystats",
|
"disable_streamystats": "Disable Streamystats",
|
||||||
"enable_search": "Use for Search",
|
"enable_search": "Use for Search",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
||||||
"read_more_about_streamystats": "Read More About Streamystats.",
|
"read_more_about_streamystats": "Read More About Streamystats.",
|
||||||
"save_button": "Save",
|
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"features_title": "Features",
|
"features_title": "Features",
|
||||||
"home_sections_title": "Home Sections",
|
|
||||||
"enable_movie_recommendations": "Movie Recommendations",
|
"enable_movie_recommendations": "Movie Recommendations",
|
||||||
"enable_series_recommendations": "Series Recommendations",
|
"enable_series_recommendations": "Series Recommendations",
|
||||||
"enable_promoted_watchlists": "Promoted Watchlists",
|
"enable_promoted_watchlists": "Promoted Watchlists",
|
||||||
@@ -445,8 +376,7 @@
|
|||||||
"refresh_from_server": "Refresh Settings from Server"
|
"refresh_from_server": "Refresh Settings from Server"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Enable our Watchlist integration",
|
"watchlist_enabler": "Enable our Watchlist integration"
|
||||||
"watchlist_button": "Toggle Watchlist integration"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +387,6 @@
|
|||||||
"delete_all_downloaded_files": "Minden Letöltött Fájl Törlése",
|
"delete_all_downloaded_files": "Minden Letöltött Fájl Törlése",
|
||||||
"music_cache_title": "Music Cache",
|
"music_cache_title": "Music Cache",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Enable Music Cache",
|
|
||||||
"clear_music_cache": "Clear Music Cache",
|
"clear_music_cache": "Clear Music Cache",
|
||||||
"music_cache_size": "{{size}} cached",
|
"music_cache_size": "{{size}} cached",
|
||||||
"music_cache_cleared": "Music cache cleared",
|
"music_cache_cleared": "Music cache cleared",
|
||||||
@@ -467,8 +396,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -490,15 +417,12 @@
|
|||||||
"system": "Rendszer"
|
"system": "Rendszer"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Hiba a Fájlok Törlésekor",
|
"error_deleting_files": "Hiba a Fájlok Törlésekor"
|
||||||
"background_downloads_enabled": "Background downloads enabled",
|
|
||||||
"background_downloads_disabled": "Background downloads disabled"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -508,6 +432,10 @@
|
|||||||
"4_hours": "4 hours",
|
"4_hours": "4 hours",
|
||||||
"24_hours": "24 hours"
|
"24_hours": "24 hours"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"title": "Dashboard",
|
||||||
|
"sessions_title": "Sessions"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sessions": {
|
"sessions": {
|
||||||
@@ -516,15 +444,12 @@
|
|||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"downloads_title": "Letöltések",
|
"downloads_title": "Letöltések",
|
||||||
"tvseries": "Sorozatok",
|
"series": "Sorozatok",
|
||||||
"movies": "Filmek",
|
"movies": "Filmek",
|
||||||
"queue": "Sor",
|
|
||||||
"other_media": "Other media",
|
"other_media": "Other media",
|
||||||
"queue_hint": "A sor és a letöltések az alkalmazás újraindításakor elvesznek",
|
|
||||||
"no_items_in_queue": "Nincs Elem a Sorban",
|
|
||||||
"no_downloaded_items": "Nincsenek Letöltött Elemek",
|
"no_downloaded_items": "Nincsenek Letöltött Elemek",
|
||||||
"delete_all_movies_button": "Összes Film Törlése",
|
"delete_all_movies_button": "Összes Film Törlése",
|
||||||
"delete_all_tvseries_button": "Összes Sorozat Törlése",
|
"delete_all_series_button": "Összes Sorozat Törlése",
|
||||||
"delete_all_button": "Összes Törlése",
|
"delete_all_button": "Összes Törlése",
|
||||||
"delete_all_other_media_button": "Delete other media",
|
"delete_all_other_media_button": "Delete other media",
|
||||||
"active_download": "Aktív Letöltés",
|
"active_download": "Aktív Letöltés",
|
||||||
@@ -542,17 +467,12 @@
|
|||||||
"you_are_not_allowed_to_download_files": "Nem engedélyezett a fájlok letöltése.",
|
"you_are_not_allowed_to_download_files": "Nem engedélyezett a fájlok letöltése.",
|
||||||
"deleted_all_movies_successfully": "Az Összes Film Sikeresen Törölve!",
|
"deleted_all_movies_successfully": "Az Összes Film Sikeresen Törölve!",
|
||||||
"failed_to_delete_all_movies": "Nem Sikerült Törölni Az Összes Filmet",
|
"failed_to_delete_all_movies": "Nem Sikerült Törölni Az Összes Filmet",
|
||||||
"deleted_all_tvseries_successfully": "Az Összes Sorozat Sikeresen Törölve!",
|
"deleted_all_series_successfully": "Az Összes Sorozat Sikeresen Törölve!",
|
||||||
"failed_to_delete_all_tvseries": "Nem Sikerült Törölni Az Összes Sorozatot",
|
"failed_to_delete_all_series": "Nem Sikerült Törölni Az Összes Sorozatot",
|
||||||
"deleted_media_successfully": "Deleted other media Successfully!",
|
"deleted_media_successfully": "Deleted other media Successfully!",
|
||||||
"failed_to_delete_media": "Failed to Delete other media",
|
"failed_to_delete_media": "Failed to Delete other media",
|
||||||
"download_deleted": "Letöltés Törölve",
|
|
||||||
"download_cancelled": "Download Cancelled",
|
"download_cancelled": "Download Cancelled",
|
||||||
"could_not_delete_download": "Nem Sikerült Törölni a Letöltést",
|
"could_not_delete_download": "Nem Sikerült Törölni a Letöltést",
|
||||||
"download_paused": "Letöltés Szüneteltetve",
|
|
||||||
"could_not_pause_download": "Nem Sikerült Szüneteltetni a Letöltést",
|
|
||||||
"download_resumed": "Letöltés Folytatva",
|
|
||||||
"could_not_resume_download": "Nem Sikerült Folytatni a Letöltést",
|
|
||||||
"download_completed": "Letöltés Befejezve",
|
"download_completed": "Letöltés Befejezve",
|
||||||
"download_failed": "Download Failed",
|
"download_failed": "Download Failed",
|
||||||
"download_failed_for_item": "A(z) {{item}} letöltése sikertelen - {{error}}",
|
"download_failed_for_item": "A(z) {{item}} letöltése sikertelen - {{error}}",
|
||||||
@@ -562,10 +482,7 @@
|
|||||||
"item_already_downloading": "{{item}} is already downloading",
|
"item_already_downloading": "{{item}} is already downloading",
|
||||||
"all_files_deleted": "All Downloads Deleted Successfully",
|
"all_files_deleted": "All Downloads Deleted Successfully",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Minden fájl, mappa és feladat sikeresen törölve",
|
|
||||||
"failed_to_clean_cache_directory": "Failed to clean cache directory",
|
|
||||||
"could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}",
|
"could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}",
|
||||||
"go_to_downloads": "Ugrás a Letöltésekhez",
|
|
||||||
"file_deleted": "{{item}} deleted"
|
"file_deleted": "{{item}} deleted"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +500,17 @@
|
|||||||
"none": "None",
|
"none": "None",
|
||||||
"track": "Track",
|
"track": "Track",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
"next": "Next",
|
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
"continue": "Continue",
|
"continue": "Continue",
|
||||||
"verifying": "Verifying...",
|
"verifying": "Verifying...",
|
||||||
"login": "Login",
|
"login": "Login",
|
||||||
"refresh": "Refresh"
|
"episodes": "Episodes",
|
||||||
|
"movies": "Movies",
|
||||||
|
"loading": "Loading…",
|
||||||
|
"seeAll": "See all"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Keresés...",
|
"search": "Keresés...",
|
||||||
@@ -691,10 +609,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "A Chromecast stream létrehozása sikertelen volt",
|
"could_not_create_stream_for_chromecast": "A Chromecast stream létrehozása sikertelen volt",
|
||||||
"message_from_server": "Üzenet a szervertől: {{message}}",
|
"message_from_server": "Üzenet a szervertől: {{message}}",
|
||||||
"next_episode": "Következő Epizód",
|
"next_episode": "Következő Epizód",
|
||||||
"refresh_tracks": "Sávok Frissítése",
|
|
||||||
"audio_tracks": "Hangsávok:",
|
|
||||||
"playback_state": "Lejátszás Állapota:",
|
|
||||||
"index": "Index:",
|
|
||||||
"continue_watching": "Folytatás",
|
"continue_watching": "Folytatás",
|
||||||
"go_back": "Vissza",
|
"go_back": "Vissza",
|
||||||
"downloaded_file_title": "You have this file downloaded",
|
"downloaded_file_title": "You have this file downloaded",
|
||||||
@@ -723,7 +637,8 @@
|
|||||||
"stopPlayback": "Stop Playback",
|
"stopPlayback": "Stop Playback",
|
||||||
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
||||||
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
||||||
"downloaded": "Downloaded"
|
"downloaded": "Downloaded",
|
||||||
|
"missing_parameters": "Missing playback parameters"
|
||||||
},
|
},
|
||||||
"chapters": {
|
"chapters": {
|
||||||
"title": "Chapters",
|
"title": "Chapters",
|
||||||
@@ -761,7 +676,6 @@
|
|||||||
"show_more": "Több Megjelenítése",
|
"show_more": "Több Megjelenítése",
|
||||||
"show_less": "Kevesebb Megjelenítése",
|
"show_less": "Kevesebb Megjelenítése",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -784,7 +698,8 @@
|
|||||||
"resume_playback": "Resume Playback",
|
"resume_playback": "Resume Playback",
|
||||||
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
||||||
"play_from_start": "Play from Start",
|
"play_from_start": "Play from Start",
|
||||||
"continue_from": "Continue from {{time}}"
|
"continue_from": "Continue from {{time}}",
|
||||||
|
"no_data_available": "No data available"
|
||||||
},
|
},
|
||||||
"live_tv": {
|
"live_tv": {
|
||||||
"next": "Következő",
|
"next": "Következő",
|
||||||
@@ -888,13 +803,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "tracks"
|
"tracks": "tracks"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "All"
|
|
||||||
},
|
|
||||||
"recently_added": "Recently Added",
|
"recently_added": "Recently Added",
|
||||||
"recently_played": "Recently Played",
|
"recently_played": "Recently Played",
|
||||||
"frequently_played": "Frequently Played",
|
"frequently_played": "Frequently Played",
|
||||||
"explore": "Explore",
|
|
||||||
"top_tracks": "Top Tracks",
|
"top_tracks": "Top Tracks",
|
||||||
"play": "Play",
|
"play": "Play",
|
||||||
"shuffle": "Shuffle",
|
"shuffle": "Shuffle",
|
||||||
@@ -1028,7 +939,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -4,8 +4,8 @@
|
|||||||
"error_title": "Errore",
|
"error_title": "Errore",
|
||||||
"login_title": "Accesso",
|
"login_title": "Accesso",
|
||||||
"login_to_title": "Accedi a",
|
"login_to_title": "Accedi a",
|
||||||
"select_user": "Select a user to log in",
|
"select_user": "Seleziona un utente per accedere",
|
||||||
"add_user_to_login": "Add a user to log in",
|
"add_user_to_login": "Aggiungi un utente per accedere",
|
||||||
"add_user": "Add User",
|
"add_user": "Add User",
|
||||||
"username_placeholder": "Nome utente",
|
"username_placeholder": "Nome utente",
|
||||||
"password_placeholder": "Password",
|
"password_placeholder": "Password",
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
"connect_button": "Connetti",
|
"connect_button": "Connetti",
|
||||||
"previous_servers": "server precedente",
|
"previous_servers": "server precedente",
|
||||||
"clear_button": "Cancella",
|
"clear_button": "Cancella",
|
||||||
"swipe_to_remove": "Swipe to remove",
|
"swipe_to_remove": "Scorri per rimuovere",
|
||||||
"search_for_local_servers": "Ricerca dei server locali",
|
"search_for_local_servers": "Ricerca dei server locali",
|
||||||
"searching": "Cercando...",
|
"searching": "Cercando...",
|
||||||
"servers": "Server",
|
"servers": "Server",
|
||||||
@@ -41,21 +41,21 @@
|
|||||||
"session_expired": "Session Expired",
|
"session_expired": "Session Expired",
|
||||||
"please_login_again": "La tua sessione è scaduta. Si prega di eseguire nuovamente l'accesso.",
|
"please_login_again": "La tua sessione è scaduta. Si prega di eseguire nuovamente l'accesso.",
|
||||||
"remove_saved_login": "Remove Saved Login",
|
"remove_saved_login": "Remove Saved Login",
|
||||||
"remove_saved_login_description": "This will remove your saved credentials for this server. You'll need to enter your username and password again next time.",
|
"remove_saved_login_description": "Questo rimuoverà le tue credenziali salvate per questo server. Dovrai inserire nuovamente il tuo nome utente e la password la prossima volta.",
|
||||||
"accounts_count": "{{count}} accounts",
|
"accounts_count": "Account {{count}}",
|
||||||
"select_account": "Select Account",
|
"select_account": "Select Account",
|
||||||
"add_account": "Add Account",
|
"add_account": "Add Account",
|
||||||
"remove_account_description": "This will remove the saved credentials for {{username}}.",
|
"remove_account_description": "Questo rimuoverà le credenziali salvate per {{username}}.",
|
||||||
"remove_server": "Remove Server",
|
"remove_server": "Remove Server",
|
||||||
"remove_server_description": "This will remove {{server}} and all saved accounts from your list.",
|
"remove_server_description": "Questo rimuoverà {{server}} e tutti gli account salvati dall'elenco.",
|
||||||
"select_your_server": "Select Your Server",
|
"select_your_server": "Select Your Server",
|
||||||
"add_server_to_get_started": "Add a server to get started",
|
"add_server_to_get_started": "Aggiungi un server per iniziare",
|
||||||
"add_server": "Add Server",
|
"add_server": "Add Server",
|
||||||
"change_server": "Change Server"
|
"change_server": "Change Server"
|
||||||
},
|
},
|
||||||
"save_account": {
|
"save_account": {
|
||||||
"title": "Save Account",
|
"title": "Save Account",
|
||||||
"save_for_later": "Save this account",
|
"save_for_later": "Salva questo account",
|
||||||
"security_option": "Security Option",
|
"security_option": "Security Option",
|
||||||
"no_protection": "No protection",
|
"no_protection": "No protection",
|
||||||
"no_protection_desc": "Quick login without authentication",
|
"no_protection_desc": "Quick login without authentication",
|
||||||
@@ -150,7 +150,7 @@
|
|||||||
},
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "Network",
|
"title": "Network",
|
||||||
"local_network": "",
|
"local_network": "Local network",
|
||||||
"auto_switch_enabled": "Auto-switch when at home",
|
"auto_switch_enabled": "Auto-switch when at home",
|
||||||
"auto_switch_description": "Automatically switch to local URL when connected to home WiFi",
|
"auto_switch_description": "Automatically switch to local URL when connected to home WiFi",
|
||||||
"local_url": "Local URL",
|
"local_url": "Local URL",
|
||||||
@@ -261,43 +261,6 @@
|
|||||||
"None": "Nessuno",
|
"None": "Nessuno",
|
||||||
"OnlyForced": "Solo forzati"
|
"OnlyForced": "Solo forzati"
|
||||||
},
|
},
|
||||||
"text_color": "Colore Del Testo",
|
|
||||||
"background_color": "Colore Di Sfondo",
|
|
||||||
"outline_color": "Colore Contorno",
|
|
||||||
"outline_thickness": "Spessore Contorno",
|
|
||||||
"background_opacity": "Opacità Dello Sfondo",
|
|
||||||
"outline_opacity": "Opacità Contorno",
|
|
||||||
"bold_text": "Bold Text",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Nero",
|
|
||||||
"Gray": "Grigio",
|
|
||||||
"Silver": "Argento",
|
|
||||||
"White": "Bianco",
|
|
||||||
"Maroon": "Maroon",
|
|
||||||
"Red": "Rosso",
|
|
||||||
"Fuchsia": "Fuchsia",
|
|
||||||
"Yellow": "Giallo",
|
|
||||||
"Olive": "Olive",
|
|
||||||
"Green": "Verde",
|
|
||||||
"Teal": "Teal",
|
|
||||||
"Lime": "Lime",
|
|
||||||
"Purple": "Viola",
|
|
||||||
"Navy": "Marina",
|
|
||||||
"Blue": "Blu",
|
|
||||||
"Aqua": "Aqua"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "Nessuno",
|
|
||||||
"Thin": "Sottile",
|
|
||||||
"Normal": "Normale",
|
|
||||||
"Thick": "Spessa"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Subtitle Color",
|
|
||||||
"subtitle_background_color": "Background Color",
|
|
||||||
"subtitle_font": "Subtitle Font",
|
|
||||||
"ksplayer_title": "KSPlayer Settings",
|
|
||||||
"hardware_decode": "Hardware Decoding",
|
|
||||||
"hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +278,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC Subtitle Settings",
|
|
||||||
"hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.",
|
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"bold": "Bold Text",
|
|
||||||
"margin": "Bottom Margin"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Video Player",
|
|
||||||
"video_player": "Video Player",
|
|
||||||
"video_player_description": "Choose which video player to use on iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Altro",
|
"other_title": "Altro",
|
||||||
"video_orientation": "Orientamento del video",
|
"video_orientation": "Orientamento del video",
|
||||||
@@ -351,11 +295,6 @@
|
|||||||
"UNKNOWN": "Sconosciuto"
|
"UNKNOWN": "Sconosciuto"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Area sicura per i controlli",
|
"safe_area_in_controls": "Area sicura per i controlli",
|
||||||
"video_player": "Video player",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Sperimentale + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Mostra i link del menu personalizzato",
|
"show_custom_menu_links": "Mostra i link del menu personalizzato",
|
||||||
"show_large_home_carousel": "Mostra Carosello Grande nella Home (beta)",
|
"show_large_home_carousel": "Mostra Carosello Grande nella Home (beta)",
|
||||||
"hide_libraries": "Nascondi Librerie",
|
"hide_libraries": "Nascondi Librerie",
|
||||||
@@ -367,9 +306,6 @@
|
|||||||
"max_auto_play_episode_count": "Numero Massimo Di Episodi Riproduzione Automatica",
|
"max_auto_play_episode_count": "Numero Massimo Di Episodi Riproduzione Automatica",
|
||||||
"disabled": "Disabilitato"
|
"disabled": "Disabilitato"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Scaricamento"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Music",
|
"title": "Music",
|
||||||
"playback_title": "Playback",
|
"playback_title": "Playback",
|
||||||
@@ -413,23 +349,18 @@
|
|||||||
"read_more_about_marlin": "Leggi di più su Marlin.",
|
"read_more_about_marlin": "Leggi di più su Marlin.",
|
||||||
"save_button": "Salva",
|
"save_button": "Salva",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Salvato",
|
"saved": "Salvato"
|
||||||
"refreshed": "Settings refreshed from server"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Refresh Settings from Server"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Enable Streamystats",
|
|
||||||
"disable_streamystats": "Disable Streamystats",
|
"disable_streamystats": "Disable Streamystats",
|
||||||
"enable_search": "Use for Search",
|
"enable_search": "Use for Search",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
||||||
"read_more_about_streamystats": "Read More About Streamystats.",
|
"read_more_about_streamystats": "Read More About Streamystats.",
|
||||||
"save_button": "Save",
|
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"features_title": "Features",
|
"features_title": "Features",
|
||||||
"home_sections_title": "Home Sections",
|
|
||||||
"enable_movie_recommendations": "Movie Recommendations",
|
"enable_movie_recommendations": "Movie Recommendations",
|
||||||
"enable_series_recommendations": "Series Recommendations",
|
"enable_series_recommendations": "Series Recommendations",
|
||||||
"enable_promoted_watchlists": "Promoted Watchlists",
|
"enable_promoted_watchlists": "Promoted Watchlists",
|
||||||
@@ -445,8 +376,7 @@
|
|||||||
"refresh_from_server": "Refresh Settings from Server"
|
"refresh_from_server": "Refresh Settings from Server"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Enable our Watchlist integration",
|
"watchlist_enabler": "Enable our Watchlist integration"
|
||||||
"watchlist_button": "Toggle Watchlist integration"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +387,6 @@
|
|||||||
"delete_all_downloaded_files": "Cancella Tutti i File Scaricati",
|
"delete_all_downloaded_files": "Cancella Tutti i File Scaricati",
|
||||||
"music_cache_title": "Music Cache",
|
"music_cache_title": "Music Cache",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Enable Music Cache",
|
|
||||||
"clear_music_cache": "Clear Music Cache",
|
"clear_music_cache": "Clear Music Cache",
|
||||||
"music_cache_size": "{{size}} cached",
|
"music_cache_size": "{{size}} cached",
|
||||||
"music_cache_cleared": "Music cache cleared",
|
"music_cache_cleared": "Music cache cleared",
|
||||||
@@ -467,8 +396,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -490,15 +417,12 @@
|
|||||||
"system": "Sistema"
|
"system": "Sistema"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Errore nella cancellazione dei file",
|
"error_deleting_files": "Errore nella cancellazione dei file"
|
||||||
"background_downloads_enabled": "Scaricamento in background abilitato",
|
|
||||||
"background_downloads_disabled": "Scaricamento in background disabilitato"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -508,6 +432,10 @@
|
|||||||
"4_hours": "4 hours",
|
"4_hours": "4 hours",
|
||||||
"24_hours": "24 hours"
|
"24_hours": "24 hours"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"title": "Dashboard",
|
||||||
|
"sessions_title": "Sessions"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sessions": {
|
"sessions": {
|
||||||
@@ -516,15 +444,12 @@
|
|||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"downloads_title": "Scaricati",
|
"downloads_title": "Scaricati",
|
||||||
"tvseries": "Serie TV",
|
"series": "Serie TV",
|
||||||
"movies": "Film",
|
"movies": "Film",
|
||||||
"queue": "Coda",
|
|
||||||
"other_media": "Altri supporti",
|
"other_media": "Altri supporti",
|
||||||
"queue_hint": "La coda e gli elementi scaricati saranno persi con il riavvio dell'app",
|
|
||||||
"no_items_in_queue": "Nessun elemento in coda",
|
|
||||||
"no_downloaded_items": "Nessun elemento scaricato",
|
"no_downloaded_items": "Nessun elemento scaricato",
|
||||||
"delete_all_movies_button": "Cancella tutti i film",
|
"delete_all_movies_button": "Cancella tutti i film",
|
||||||
"delete_all_tvseries_button": "Cancella tutte le serie TV",
|
"delete_all_series_button": "Cancella tutte le serie TV",
|
||||||
"delete_all_button": "Cancella tutti",
|
"delete_all_button": "Cancella tutti",
|
||||||
"delete_all_other_media_button": "Elimina altri supporti",
|
"delete_all_other_media_button": "Elimina altri supporti",
|
||||||
"active_download": "Scaricamento in corso",
|
"active_download": "Scaricamento in corso",
|
||||||
@@ -542,17 +467,12 @@
|
|||||||
"you_are_not_allowed_to_download_files": "Non è consentito scaricare file.",
|
"you_are_not_allowed_to_download_files": "Non è consentito scaricare file.",
|
||||||
"deleted_all_movies_successfully": "Cancellati tutti i film con successo!",
|
"deleted_all_movies_successfully": "Cancellati tutti i film con successo!",
|
||||||
"failed_to_delete_all_movies": "Impossibile eliminare tutti i film",
|
"failed_to_delete_all_movies": "Impossibile eliminare tutti i film",
|
||||||
"deleted_all_tvseries_successfully": "Eliminate tutte le serie TV con successo!",
|
"deleted_all_series_successfully": "Eliminate tutte le serie TV con successo!",
|
||||||
"failed_to_delete_all_tvseries": "Impossibile eliminare tutte le serie TV",
|
"failed_to_delete_all_series": "Impossibile eliminare tutte le serie TV",
|
||||||
"deleted_media_successfully": "Eliminato altri supporti con successo!",
|
"deleted_media_successfully": "Eliminato altri supporti con successo!",
|
||||||
"failed_to_delete_media": "Impossibile eliminare altri media",
|
"failed_to_delete_media": "Impossibile eliminare altri media",
|
||||||
"download_deleted": "Download Eliminato",
|
|
||||||
"download_cancelled": "Scaricamento annullato",
|
"download_cancelled": "Scaricamento annullato",
|
||||||
"could_not_delete_download": "Impossibile Eliminare Il Download",
|
"could_not_delete_download": "Impossibile Eliminare Il Download",
|
||||||
"download_paused": "Download In Pausa",
|
|
||||||
"could_not_pause_download": "Impossibile Sbloccare Il Download",
|
|
||||||
"download_resumed": "Download Ripreso",
|
|
||||||
"could_not_resume_download": "Impossibile Riprendere Il Download",
|
|
||||||
"download_completed": "Scaricamento completato",
|
"download_completed": "Scaricamento completato",
|
||||||
"download_failed": "Scaricamento non riuscito",
|
"download_failed": "Scaricamento non riuscito",
|
||||||
"download_failed_for_item": "Scaricamento fallito per {{item}} - {{error}}",
|
"download_failed_for_item": "Scaricamento fallito per {{item}} - {{error}}",
|
||||||
@@ -562,10 +482,7 @@
|
|||||||
"item_already_downloading": "{{item}} è già in download",
|
"item_already_downloading": "{{item}} è già in download",
|
||||||
"all_files_deleted": "Tutti i Download Eliminati con Successo",
|
"all_files_deleted": "Tutti i Download Eliminati con Successo",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} cancellati",
|
"files_deleted_by_type": "{{count}} {{type}} cancellati",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Tutti i file, le cartelle e i processi sono stati eliminati con successo.",
|
|
||||||
"failed_to_clean_cache_directory": "Pulizia della directory della cache non riuscita",
|
|
||||||
"could_not_get_download_url_for_item": "Impossibile ottenere l'URL di download per {{itemName}}",
|
"could_not_get_download_url_for_item": "Impossibile ottenere l'URL di download per {{itemName}}",
|
||||||
"go_to_downloads": "Vai agli elementi scaricati",
|
|
||||||
"file_deleted": "{{item}} cancellato"
|
"file_deleted": "{{item}} cancellato"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +500,17 @@
|
|||||||
"none": "Nulla",
|
"none": "Nulla",
|
||||||
"track": "Traccia",
|
"track": "Traccia",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
"next": "Next",
|
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
"continue": "Continue",
|
"continue": "Continue",
|
||||||
"verifying": "Verifying...",
|
"verifying": "Verifying...",
|
||||||
"login": "Login",
|
"login": "Login",
|
||||||
"refresh": "Refresh"
|
"episodes": "Episodes",
|
||||||
|
"movies": "Movies",
|
||||||
|
"loading": "Loading…",
|
||||||
|
"seeAll": "See all"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Cerca...",
|
"search": "Cerca...",
|
||||||
@@ -691,10 +609,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Impossibile creare uno stream per Chromecast",
|
"could_not_create_stream_for_chromecast": "Impossibile creare uno stream per Chromecast",
|
||||||
"message_from_server": "Messaggio dal server",
|
"message_from_server": "Messaggio dal server",
|
||||||
"next_episode": "Prossimo Episodio",
|
"next_episode": "Prossimo Episodio",
|
||||||
"refresh_tracks": "Aggiorna tracce",
|
|
||||||
"audio_tracks": "Tracce audio:",
|
|
||||||
"playback_state": "Stato della riproduzione:",
|
|
||||||
"index": "Indice:",
|
|
||||||
"continue_watching": "Continua a guardare",
|
"continue_watching": "Continua a guardare",
|
||||||
"go_back": "Indietro",
|
"go_back": "Indietro",
|
||||||
"downloaded_file_title": "You have this file downloaded",
|
"downloaded_file_title": "You have this file downloaded",
|
||||||
@@ -723,7 +637,8 @@
|
|||||||
"stopPlayback": "Stop Playback",
|
"stopPlayback": "Stop Playback",
|
||||||
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
||||||
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
||||||
"downloaded": "Downloaded"
|
"downloaded": "Downloaded",
|
||||||
|
"missing_parameters": "Missing playback parameters"
|
||||||
},
|
},
|
||||||
"chapters": {
|
"chapters": {
|
||||||
"title": "Chapters",
|
"title": "Chapters",
|
||||||
@@ -761,7 +676,6 @@
|
|||||||
"show_more": "Mostra di più",
|
"show_more": "Mostra di più",
|
||||||
"show_less": "Mostra di meno",
|
"show_less": "Mostra di meno",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -784,7 +698,8 @@
|
|||||||
"resume_playback": "Resume Playback",
|
"resume_playback": "Resume Playback",
|
||||||
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
||||||
"play_from_start": "Play from Start",
|
"play_from_start": "Play from Start",
|
||||||
"continue_from": "Continue from {{time}}"
|
"continue_from": "Continue from {{time}}",
|
||||||
|
"no_data_available": "No data available"
|
||||||
},
|
},
|
||||||
"live_tv": {
|
"live_tv": {
|
||||||
"next": "Prossimo",
|
"next": "Prossimo",
|
||||||
@@ -888,13 +803,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "tracks"
|
"tracks": "tracks"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "All"
|
|
||||||
},
|
|
||||||
"recently_added": "Recently Added",
|
"recently_added": "Recently Added",
|
||||||
"recently_played": "Recently Played",
|
"recently_played": "Recently Played",
|
||||||
"frequently_played": "Frequently Played",
|
"frequently_played": "Frequently Played",
|
||||||
"explore": "Explore",
|
|
||||||
"top_tracks": "Top Tracks",
|
"top_tracks": "Top Tracks",
|
||||||
"play": "Play",
|
"play": "Play",
|
||||||
"shuffle": "Shuffle",
|
"shuffle": "Shuffle",
|
||||||
@@ -1028,7 +939,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -261,43 +261,6 @@
|
|||||||
"None": "なし",
|
"None": "なし",
|
||||||
"OnlyForced": "強制のみ"
|
"OnlyForced": "強制のみ"
|
||||||
},
|
},
|
||||||
"text_color": "テキストの色",
|
|
||||||
"background_color": "背景色",
|
|
||||||
"outline_color": "アウトラインの色",
|
|
||||||
"outline_thickness": "概要 厚さ",
|
|
||||||
"background_opacity": "背景の透明度",
|
|
||||||
"outline_opacity": "アウトラインの透明度",
|
|
||||||
"bold_text": "Bold Text",
|
|
||||||
"colors": {
|
|
||||||
"Black": "ブラック",
|
|
||||||
"Gray": "グレー",
|
|
||||||
"Silver": "シルバー",
|
|
||||||
"White": "白",
|
|
||||||
"Maroon": "Maroon",
|
|
||||||
"Red": "赤",
|
|
||||||
"Fuchsia": "Fuchsia",
|
|
||||||
"Yellow": "黄色",
|
|
||||||
"Olive": "オリーブ",
|
|
||||||
"Green": "緑",
|
|
||||||
"Teal": "ティール",
|
|
||||||
"Lime": "黄緑",
|
|
||||||
"Purple": "パープル",
|
|
||||||
"Navy": "海軍format@@0",
|
|
||||||
"Blue": "青",
|
|
||||||
"Aqua": "Aqua"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "なし",
|
|
||||||
"Thin": "細いです",
|
|
||||||
"Normal": "標準",
|
|
||||||
"Thick": "濃厚な"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Subtitle Color",
|
|
||||||
"subtitle_background_color": "Background Color",
|
|
||||||
"subtitle_font": "Subtitle Font",
|
|
||||||
"ksplayer_title": "KSPlayer Settings",
|
|
||||||
"hardware_decode": "Hardware Decoding",
|
|
||||||
"hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +278,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC Subtitle Settings",
|
|
||||||
"hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.",
|
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"bold": "Bold Text",
|
|
||||||
"margin": "Bottom Margin"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Video Player",
|
|
||||||
"video_player": "Video Player",
|
|
||||||
"video_player_description": "Choose which video player to use on iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "その他",
|
"other_title": "その他",
|
||||||
"video_orientation": "動画の向き",
|
"video_orientation": "動画の向き",
|
||||||
@@ -351,11 +295,6 @@
|
|||||||
"UNKNOWN": "不明"
|
"UNKNOWN": "不明"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "コントロールの安全エリア",
|
"safe_area_in_controls": "コントロールの安全エリア",
|
||||||
"video_player": "Video player",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Experimental + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "カスタムメニューのリンクを表示",
|
"show_custom_menu_links": "カスタムメニューのリンクを表示",
|
||||||
"show_large_home_carousel": "大きなヒーロー(Beta)",
|
"show_large_home_carousel": "大きなヒーロー(Beta)",
|
||||||
"hide_libraries": "ライブラリを非表示",
|
"hide_libraries": "ライブラリを非表示",
|
||||||
@@ -367,9 +306,6 @@
|
|||||||
"max_auto_play_episode_count": "自動再生エピソードの最大数",
|
"max_auto_play_episode_count": "自動再生エピソードの最大数",
|
||||||
"disabled": "無効"
|
"disabled": "無効"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "ダウンロード"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Music",
|
"title": "Music",
|
||||||
"playback_title": "Playback",
|
"playback_title": "Playback",
|
||||||
@@ -413,23 +349,18 @@
|
|||||||
"read_more_about_marlin": "Marlinについて詳しく読む。",
|
"read_more_about_marlin": "Marlinについて詳しく読む。",
|
||||||
"save_button": "保存",
|
"save_button": "保存",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "保存しました",
|
"saved": "保存しました"
|
||||||
"refreshed": "Settings refreshed from server"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Refresh Settings from Server"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Enable Streamystats",
|
|
||||||
"disable_streamystats": "Disable Streamystats",
|
"disable_streamystats": "Disable Streamystats",
|
||||||
"enable_search": "Use for Search",
|
"enable_search": "Use for Search",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
||||||
"read_more_about_streamystats": "Read More About Streamystats.",
|
"read_more_about_streamystats": "Read More About Streamystats.",
|
||||||
"save_button": "Save",
|
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"features_title": "Features",
|
"features_title": "Features",
|
||||||
"home_sections_title": "Home Sections",
|
|
||||||
"enable_movie_recommendations": "Movie Recommendations",
|
"enable_movie_recommendations": "Movie Recommendations",
|
||||||
"enable_series_recommendations": "Series Recommendations",
|
"enable_series_recommendations": "Series Recommendations",
|
||||||
"enable_promoted_watchlists": "Promoted Watchlists",
|
"enable_promoted_watchlists": "Promoted Watchlists",
|
||||||
@@ -445,8 +376,7 @@
|
|||||||
"refresh_from_server": "Refresh Settings from Server"
|
"refresh_from_server": "Refresh Settings from Server"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Enable our Watchlist integration",
|
"watchlist_enabler": "Enable our Watchlist integration"
|
||||||
"watchlist_button": "Toggle Watchlist integration"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +387,6 @@
|
|||||||
"delete_all_downloaded_files": "すべてのダウンロードファイルを削除",
|
"delete_all_downloaded_files": "すべてのダウンロードファイルを削除",
|
||||||
"music_cache_title": "Music Cache",
|
"music_cache_title": "Music Cache",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Enable Music Cache",
|
|
||||||
"clear_music_cache": "Clear Music Cache",
|
"clear_music_cache": "Clear Music Cache",
|
||||||
"music_cache_size": "{{size}} cached",
|
"music_cache_size": "{{size}} cached",
|
||||||
"music_cache_cleared": "Music cache cleared",
|
"music_cache_cleared": "Music cache cleared",
|
||||||
@@ -467,8 +396,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -490,15 +417,12 @@
|
|||||||
"system": "システム"
|
"system": "システム"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "ファイルの削除エラー",
|
"error_deleting_files": "ファイルの削除エラー"
|
||||||
"background_downloads_enabled": "バックグラウンドでのダウンロードは有効です",
|
|
||||||
"background_downloads_disabled": "バックグラウンドでのダウンロードは無効です"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -508,6 +432,10 @@
|
|||||||
"4_hours": "4 hours",
|
"4_hours": "4 hours",
|
||||||
"24_hours": "24 hours"
|
"24_hours": "24 hours"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"title": "Dashboard",
|
||||||
|
"sessions_title": "Sessions"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sessions": {
|
"sessions": {
|
||||||
@@ -516,15 +444,12 @@
|
|||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"downloads_title": "ダウンロード",
|
"downloads_title": "ダウンロード",
|
||||||
"tvseries": "TVシリーズ",
|
"series": "TVシリーズ",
|
||||||
"movies": "映画",
|
"movies": "映画",
|
||||||
"queue": "キュー",
|
|
||||||
"other_media": "その他のメディア",
|
"other_media": "その他のメディア",
|
||||||
"queue_hint": "アプリを再起動するとキューとダウンロードは失われます",
|
|
||||||
"no_items_in_queue": "キューにアイテムがありません",
|
|
||||||
"no_downloaded_items": "ダウンロードしたアイテムはありません",
|
"no_downloaded_items": "ダウンロードしたアイテムはありません",
|
||||||
"delete_all_movies_button": "すべての映画を削除",
|
"delete_all_movies_button": "すべての映画を削除",
|
||||||
"delete_all_tvseries_button": "すべてのシリーズを削除",
|
"delete_all_series_button": "すべてのシリーズを削除",
|
||||||
"delete_all_button": "すべて削除",
|
"delete_all_button": "すべて削除",
|
||||||
"delete_all_other_media_button": "他のメディアを削除する",
|
"delete_all_other_media_button": "他のメディアを削除する",
|
||||||
"active_download": "アクティブなダウンロード",
|
"active_download": "アクティブなダウンロード",
|
||||||
@@ -542,17 +467,12 @@
|
|||||||
"you_are_not_allowed_to_download_files": "ファイルをダウンロードする権限がありません。",
|
"you_are_not_allowed_to_download_files": "ファイルをダウンロードする権限がありません。",
|
||||||
"deleted_all_movies_successfully": "すべての映画を正常に削除しました!",
|
"deleted_all_movies_successfully": "すべての映画を正常に削除しました!",
|
||||||
"failed_to_delete_all_movies": "すべての映画を削除できませんでした",
|
"failed_to_delete_all_movies": "すべての映画を削除できませんでした",
|
||||||
"deleted_all_tvseries_successfully": "すべてのシリーズを正常に削除しました!",
|
"deleted_all_series_successfully": "すべてのシリーズを正常に削除しました!",
|
||||||
"failed_to_delete_all_tvseries": "すべてのシリーズを削除できませんでした",
|
"failed_to_delete_all_series": "すべてのシリーズを削除できませんでした",
|
||||||
"deleted_media_successfully": "他のメディアを削除しました!",
|
"deleted_media_successfully": "他のメディアを削除しました!",
|
||||||
"failed_to_delete_media": "他のメディアの削除に失敗しました",
|
"failed_to_delete_media": "他のメディアの削除に失敗しました",
|
||||||
"download_deleted": "ダウンロードが削除されました",
|
|
||||||
"download_cancelled": "ダウンロードをキャンセルしました",
|
"download_cancelled": "ダウンロードをキャンセルしました",
|
||||||
"could_not_delete_download": "ダウンロードを削除できませんでした",
|
"could_not_delete_download": "ダウンロードを削除できませんでした",
|
||||||
"download_paused": "ダウンロードを一時停止しました",
|
|
||||||
"could_not_pause_download": "ダウンロードを一時停止できませんでした",
|
|
||||||
"download_resumed": "ダウンロード再開",
|
|
||||||
"could_not_resume_download": "ダウンロードを再開できませんでした",
|
|
||||||
"download_completed": "ダウンロードが完了しました",
|
"download_completed": "ダウンロードが完了しました",
|
||||||
"download_failed": "ダウンロードに失敗しました",
|
"download_failed": "ダウンロードに失敗しました",
|
||||||
"download_failed_for_item": "{{item}}のダウンロードに失敗しました - {{error}}",
|
"download_failed_for_item": "{{item}}のダウンロードに失敗しました - {{error}}",
|
||||||
@@ -562,10 +482,7 @@
|
|||||||
"item_already_downloading": "{{item}} is already downloading",
|
"item_already_downloading": "{{item}} is already downloading",
|
||||||
"all_files_deleted": "All Downloads Deleted Successfully",
|
"all_files_deleted": "All Downloads Deleted Successfully",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "すべてのファイル、フォルダ、ジョブが正常に削除されました",
|
|
||||||
"failed_to_clean_cache_directory": "キャッシュディレクトリのクリーンアップに失敗しました",
|
|
||||||
"could_not_get_download_url_for_item": "{{itemName}} のダウンロードURLを取得できませんでした",
|
"could_not_get_download_url_for_item": "{{itemName}} のダウンロードURLを取得できませんでした",
|
||||||
"go_to_downloads": "ダウンロードに移動",
|
|
||||||
"file_deleted": "{{item}} deleted"
|
"file_deleted": "{{item}} deleted"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +500,17 @@
|
|||||||
"none": "None",
|
"none": "None",
|
||||||
"track": "Track",
|
"track": "Track",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
"next": "Next",
|
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
"continue": "Continue",
|
"continue": "Continue",
|
||||||
"verifying": "Verifying...",
|
"verifying": "Verifying...",
|
||||||
"login": "Login",
|
"login": "Login",
|
||||||
"refresh": "Refresh"
|
"episodes": "Episodes",
|
||||||
|
"movies": "Movies",
|
||||||
|
"loading": "Loading…",
|
||||||
|
"seeAll": "See all"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "検索...",
|
"search": "検索...",
|
||||||
@@ -691,10 +609,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Chromecastのストリームを作成できませんでした",
|
"could_not_create_stream_for_chromecast": "Chromecastのストリームを作成できませんでした",
|
||||||
"message_from_server": "サーバーからのメッセージ",
|
"message_from_server": "サーバーからのメッセージ",
|
||||||
"next_episode": "次のエピソード",
|
"next_episode": "次のエピソード",
|
||||||
"refresh_tracks": "トラックを更新",
|
|
||||||
"audio_tracks": "音声トラック:",
|
|
||||||
"playback_state": "再生状態:",
|
|
||||||
"index": "インデックス:",
|
|
||||||
"continue_watching": "視聴を続ける",
|
"continue_watching": "視聴を続ける",
|
||||||
"go_back": "戻る",
|
"go_back": "戻る",
|
||||||
"downloaded_file_title": "You have this file downloaded",
|
"downloaded_file_title": "You have this file downloaded",
|
||||||
@@ -723,7 +637,8 @@
|
|||||||
"stopPlayback": "Stop Playback",
|
"stopPlayback": "Stop Playback",
|
||||||
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
||||||
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
||||||
"downloaded": "Downloaded"
|
"downloaded": "Downloaded",
|
||||||
|
"missing_parameters": "Missing playback parameters"
|
||||||
},
|
},
|
||||||
"chapters": {
|
"chapters": {
|
||||||
"title": "Chapters",
|
"title": "Chapters",
|
||||||
@@ -761,7 +676,6 @@
|
|||||||
"show_more": "もっと見る",
|
"show_more": "もっと見る",
|
||||||
"show_less": "少なく表示",
|
"show_less": "少なく表示",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -784,7 +698,8 @@
|
|||||||
"resume_playback": "Resume Playback",
|
"resume_playback": "Resume Playback",
|
||||||
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
||||||
"play_from_start": "Play from Start",
|
"play_from_start": "Play from Start",
|
||||||
"continue_from": "Continue from {{time}}"
|
"continue_from": "Continue from {{time}}",
|
||||||
|
"no_data_available": "No data available"
|
||||||
},
|
},
|
||||||
"live_tv": {
|
"live_tv": {
|
||||||
"next": "次",
|
"next": "次",
|
||||||
@@ -888,13 +803,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "tracks"
|
"tracks": "tracks"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "All"
|
|
||||||
},
|
|
||||||
"recently_added": "Recently Added",
|
"recently_added": "Recently Added",
|
||||||
"recently_played": "Recently Played",
|
"recently_played": "Recently Played",
|
||||||
"frequently_played": "Frequently Played",
|
"frequently_played": "Frequently Played",
|
||||||
"explore": "Explore",
|
|
||||||
"top_tracks": "Top Tracks",
|
"top_tracks": "Top Tracks",
|
||||||
"play": "Play",
|
"play": "Play",
|
||||||
"shuffle": "Shuffle",
|
"shuffle": "Shuffle",
|
||||||
@@ -1028,7 +939,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -261,43 +261,6 @@
|
|||||||
"None": "None",
|
"None": "None",
|
||||||
"OnlyForced": "OnlyForced"
|
"OnlyForced": "OnlyForced"
|
||||||
},
|
},
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"bold_text": "Bold Text",
|
|
||||||
"colors": {
|
|
||||||
"Black": "검정색",
|
|
||||||
"Gray": "회색",
|
|
||||||
"Silver": "은색",
|
|
||||||
"White": "흰색",
|
|
||||||
"Maroon": "밤색",
|
|
||||||
"Red": "빨간색",
|
|
||||||
"Fuchsia": "분홍색",
|
|
||||||
"Yellow": "노란색",
|
|
||||||
"Olive": "올리브 색",
|
|
||||||
"Green": "녹색",
|
|
||||||
"Teal": "청록색",
|
|
||||||
"Lime": "라임색",
|
|
||||||
"Purple": "보라색",
|
|
||||||
"Navy": "남색",
|
|
||||||
"Blue": "파란색",
|
|
||||||
"Aqua": "아쿠아색"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "없음",
|
|
||||||
"Thin": "얇게",
|
|
||||||
"Normal": "보통",
|
|
||||||
"Thick": "굵게"
|
|
||||||
},
|
|
||||||
"subtitle_color": "자막 색상",
|
|
||||||
"subtitle_background_color": "배경 색상",
|
|
||||||
"subtitle_font": "자막 폰트",
|
|
||||||
"ksplayer_title": "KSPlayer 설정",
|
|
||||||
"hardware_decode": "하드웨어 디코딩",
|
|
||||||
"hardware_decode_description": "비디오 디코딩에 하드웨어 가속을 사용하십시오. 재생 문제가 발생하는 경우 비활성화하십시오.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +278,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC 자막 설정",
|
|
||||||
"hint": "VLC 플레이어의 자막 표시 방식을 설정하세요. 변경 사항은 다음 재생 시 적용됩니다.",
|
|
||||||
"text_color": "글자색",
|
|
||||||
"background_color": "배경 색상",
|
|
||||||
"background_opacity": "배경 투명도",
|
|
||||||
"outline_color": "외곽선 색상",
|
|
||||||
"outline_opacity": "외곽선 투명도",
|
|
||||||
"outline_thickness": "외곽선 굵기",
|
|
||||||
"bold": "굵은 글씨",
|
|
||||||
"margin": "아래쪽 여백"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "비디오 플레이어",
|
|
||||||
"video_player": "비디오 플레이어",
|
|
||||||
"video_player_description": "iOS 사용자는 비디오 플레이어를 선택하세요.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Other",
|
"other_title": "Other",
|
||||||
"video_orientation": "Video Orientation",
|
"video_orientation": "Video Orientation",
|
||||||
@@ -351,11 +295,6 @@
|
|||||||
"UNKNOWN": "Unknown"
|
"UNKNOWN": "Unknown"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "컨트롤 안전 영역",
|
"safe_area_in_controls": "컨트롤 안전 영역",
|
||||||
"video_player": "Video Player",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Experimental + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "사용자 지정 메뉴 링크 표시",
|
"show_custom_menu_links": "사용자 지정 메뉴 링크 표시",
|
||||||
"show_large_home_carousel": "대형 홈 슬라이드 배너 표시 (베타)",
|
"show_large_home_carousel": "대형 홈 슬라이드 배너 표시 (베타)",
|
||||||
"hide_libraries": "라이브러리 숨기기",
|
"hide_libraries": "라이브러리 숨기기",
|
||||||
@@ -367,9 +306,6 @@
|
|||||||
"max_auto_play_episode_count": "Max Auto Play Episode Count",
|
"max_auto_play_episode_count": "Max Auto Play Episode Count",
|
||||||
"disabled": "Disabled"
|
"disabled": "Disabled"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Downloads"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Music",
|
"title": "Music",
|
||||||
"playback_title": "Playback",
|
"playback_title": "Playback",
|
||||||
@@ -413,23 +349,18 @@
|
|||||||
"read_more_about_marlin": "Read More About Marlin.",
|
"read_more_about_marlin": "Read More About Marlin.",
|
||||||
"save_button": "Save",
|
"save_button": "Save",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Saved",
|
"saved": "Saved"
|
||||||
"refreshed": "Settings refreshed from server"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Refresh Settings from Server"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Enable Streamystats",
|
|
||||||
"disable_streamystats": "Disable Streamystats",
|
"disable_streamystats": "Disable Streamystats",
|
||||||
"enable_search": "Use for Search",
|
"enable_search": "Use for Search",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
||||||
"read_more_about_streamystats": "Read More About Streamystats.",
|
"read_more_about_streamystats": "Read More About Streamystats.",
|
||||||
"save_button": "Save",
|
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"features_title": "Features",
|
"features_title": "Features",
|
||||||
"home_sections_title": "Home Sections",
|
|
||||||
"enable_movie_recommendations": "Movie Recommendations",
|
"enable_movie_recommendations": "Movie Recommendations",
|
||||||
"enable_series_recommendations": "시리즈 추천",
|
"enable_series_recommendations": "시리즈 추천",
|
||||||
"enable_promoted_watchlists": "추천 관심 목록",
|
"enable_promoted_watchlists": "추천 관심 목록",
|
||||||
@@ -445,8 +376,7 @@
|
|||||||
"refresh_from_server": "서버에서 설정 새로고침"
|
"refresh_from_server": "서버에서 설정 새로고침"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "관심 목록 통합 기능 활성화",
|
"watchlist_enabler": "관심 목록 통합 기능 활성화"
|
||||||
"watchlist_button": "관심 목록 연동 켜기/끄기"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +387,6 @@
|
|||||||
"delete_all_downloaded_files": "Delete All Downloaded Files",
|
"delete_all_downloaded_files": "Delete All Downloaded Files",
|
||||||
"music_cache_title": "Music Cache",
|
"music_cache_title": "Music Cache",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Enable Music Cache",
|
|
||||||
"clear_music_cache": "Clear Music Cache",
|
"clear_music_cache": "Clear Music Cache",
|
||||||
"music_cache_size": "{{size}} cached",
|
"music_cache_size": "{{size}} cached",
|
||||||
"music_cache_cleared": "음악 캐시가 삭제되었습니다",
|
"music_cache_cleared": "음악 캐시가 삭제되었습니다",
|
||||||
@@ -467,8 +396,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -490,15 +417,12 @@
|
|||||||
"system": "System"
|
"system": "System"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Error Deleting Files",
|
"error_deleting_files": "Error Deleting Files"
|
||||||
"background_downloads_enabled": "Background downloads enabled",
|
|
||||||
"background_downloads_disabled": "Background downloads disabled"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -508,6 +432,10 @@
|
|||||||
"4_hours": "4 hours",
|
"4_hours": "4 hours",
|
||||||
"24_hours": "24 hours"
|
"24_hours": "24 hours"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"title": "Dashboard",
|
||||||
|
"sessions_title": "Sessions"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sessions": {
|
"sessions": {
|
||||||
@@ -516,15 +444,12 @@
|
|||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"downloads_title": "Downloads",
|
"downloads_title": "Downloads",
|
||||||
"tvseries": "TV-Series",
|
"series": "TV-Series",
|
||||||
"movies": "Movies",
|
"movies": "Movies",
|
||||||
"queue": "Queue",
|
|
||||||
"other_media": "Other media",
|
"other_media": "Other media",
|
||||||
"queue_hint": "Queue and downloads will be lost on app restart",
|
|
||||||
"no_items_in_queue": "No Items in Queue",
|
|
||||||
"no_downloaded_items": "No Downloaded Items",
|
"no_downloaded_items": "No Downloaded Items",
|
||||||
"delete_all_movies_button": "Delete All Movies",
|
"delete_all_movies_button": "Delete All Movies",
|
||||||
"delete_all_tvseries_button": "Delete All TV-Series",
|
"delete_all_series_button": "Delete All TV-Series",
|
||||||
"delete_all_button": "Delete All",
|
"delete_all_button": "Delete All",
|
||||||
"delete_all_other_media_button": "Delete other media",
|
"delete_all_other_media_button": "Delete other media",
|
||||||
"active_download": "Active Download",
|
"active_download": "Active Download",
|
||||||
@@ -542,17 +467,12 @@
|
|||||||
"you_are_not_allowed_to_download_files": "You are not allowed to download files.",
|
"you_are_not_allowed_to_download_files": "You are not allowed to download files.",
|
||||||
"deleted_all_movies_successfully": "Deleted All Movies Successfully!",
|
"deleted_all_movies_successfully": "Deleted All Movies Successfully!",
|
||||||
"failed_to_delete_all_movies": "Failed to Delete All Movies",
|
"failed_to_delete_all_movies": "Failed to Delete All Movies",
|
||||||
"deleted_all_tvseries_successfully": "Deleted All TV-Series Successfully!",
|
"deleted_all_series_successfully": "Deleted All TV-Series Successfully!",
|
||||||
"failed_to_delete_all_tvseries": "Failed to Delete All TV-Series",
|
"failed_to_delete_all_series": "Failed to Delete All TV-Series",
|
||||||
"deleted_media_successfully": "Deleted other media Successfully!",
|
"deleted_media_successfully": "Deleted other media Successfully!",
|
||||||
"failed_to_delete_media": "Failed to Delete other media",
|
"failed_to_delete_media": "Failed to Delete other media",
|
||||||
"download_deleted": "Download Deleted",
|
|
||||||
"download_cancelled": "Download Cancelled",
|
"download_cancelled": "Download Cancelled",
|
||||||
"could_not_delete_download": "Could Not Delete Download",
|
"could_not_delete_download": "Could Not Delete Download",
|
||||||
"download_paused": "Download Paused",
|
|
||||||
"could_not_pause_download": "Could Not Pause Download",
|
|
||||||
"download_resumed": "Download Resumed",
|
|
||||||
"could_not_resume_download": "Could Not Resume Download",
|
|
||||||
"download_completed": "Download Completed",
|
"download_completed": "Download Completed",
|
||||||
"download_failed": "Download Failed",
|
"download_failed": "Download Failed",
|
||||||
"download_failed_for_item": "Download failed for {{item}} - {{error}}",
|
"download_failed_for_item": "Download failed for {{item}} - {{error}}",
|
||||||
@@ -562,10 +482,7 @@
|
|||||||
"item_already_downloading": "{{item}} is already downloading",
|
"item_already_downloading": "{{item}} is already downloading",
|
||||||
"all_files_deleted": "All Downloads Deleted Successfully",
|
"all_files_deleted": "All Downloads Deleted Successfully",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "All files, folders, and jobs deleted successfully",
|
|
||||||
"failed_to_clean_cache_directory": "Failed to clean cache directory",
|
|
||||||
"could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}",
|
"could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}",
|
||||||
"go_to_downloads": "Go to Downloads",
|
|
||||||
"file_deleted": "{{item}} deleted"
|
"file_deleted": "{{item}} deleted"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +500,17 @@
|
|||||||
"none": "None",
|
"none": "None",
|
||||||
"track": "Track",
|
"track": "Track",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
"next": "Next",
|
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
"continue": "Continue",
|
"continue": "Continue",
|
||||||
"verifying": "Verifying...",
|
"verifying": "Verifying...",
|
||||||
"login": "Login",
|
"login": "Login",
|
||||||
"refresh": "Refresh"
|
"episodes": "Episodes",
|
||||||
|
"movies": "Movies",
|
||||||
|
"loading": "Loading…",
|
||||||
|
"seeAll": "See all"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Search...",
|
"search": "Search...",
|
||||||
@@ -691,10 +609,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Could not create a stream for Chromecast",
|
"could_not_create_stream_for_chromecast": "Could not create a stream for Chromecast",
|
||||||
"message_from_server": "Message from Server: {{message}}",
|
"message_from_server": "Message from Server: {{message}}",
|
||||||
"next_episode": "Next Episode",
|
"next_episode": "Next Episode",
|
||||||
"refresh_tracks": "Refresh Tracks",
|
|
||||||
"audio_tracks": "Audio Tracks:",
|
|
||||||
"playback_state": "Playback State:",
|
|
||||||
"index": "Index:",
|
|
||||||
"continue_watching": "Continue Watching",
|
"continue_watching": "Continue Watching",
|
||||||
"go_back": "Go Back",
|
"go_back": "Go Back",
|
||||||
"downloaded_file_title": "You have this file downloaded",
|
"downloaded_file_title": "You have this file downloaded",
|
||||||
@@ -723,7 +637,8 @@
|
|||||||
"stopPlayback": "Stop Playback",
|
"stopPlayback": "Stop Playback",
|
||||||
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
||||||
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
||||||
"downloaded": "Downloaded"
|
"downloaded": "Downloaded",
|
||||||
|
"missing_parameters": "Missing playback parameters"
|
||||||
},
|
},
|
||||||
"chapters": {
|
"chapters": {
|
||||||
"title": "Chapters",
|
"title": "Chapters",
|
||||||
@@ -761,7 +676,6 @@
|
|||||||
"show_more": "Show More",
|
"show_more": "Show More",
|
||||||
"show_less": "Show Less",
|
"show_less": "Show Less",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -784,7 +698,8 @@
|
|||||||
"resume_playback": "Resume Playback",
|
"resume_playback": "Resume Playback",
|
||||||
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
||||||
"play_from_start": "Play from Start",
|
"play_from_start": "Play from Start",
|
||||||
"continue_from": "Continue from {{time}}"
|
"continue_from": "Continue from {{time}}",
|
||||||
|
"no_data_available": "No data available"
|
||||||
},
|
},
|
||||||
"live_tv": {
|
"live_tv": {
|
||||||
"next": "Next",
|
"next": "Next",
|
||||||
@@ -888,13 +803,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "tracks"
|
"tracks": "tracks"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "All"
|
|
||||||
},
|
|
||||||
"recently_added": "Recently Added",
|
"recently_added": "Recently Added",
|
||||||
"recently_played": "Recently Played",
|
"recently_played": "Recently Played",
|
||||||
"frequently_played": "Frequently Played",
|
"frequently_played": "Frequently Played",
|
||||||
"explore": "Explore",
|
|
||||||
"top_tracks": "Top Tracks",
|
"top_tracks": "Top Tracks",
|
||||||
"play": "Play",
|
"play": "Play",
|
||||||
"shuffle": "Shuffle",
|
"shuffle": "Shuffle",
|
||||||
@@ -1028,7 +939,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -229,14 +229,14 @@
|
|||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"downloads_title": "Nedlastinger",
|
"downloads_title": "Nedlastinger",
|
||||||
"tvseries": "TV-serier",
|
"series": "TV-serier",
|
||||||
"movies": "Filmer",
|
"movies": "Filmer",
|
||||||
"queue": "Kø",
|
"queue": "Kø",
|
||||||
"queue_hint": "Kø og nedlastinger vil gå tapt ved omstart av appen",
|
"queue_hint": "Kø og nedlastinger vil gå tapt ved omstart av appen",
|
||||||
"no_items_in_queue": "Ingen elementer i køen",
|
"no_items_in_queue": "Ingen elementer i køen",
|
||||||
"no_downloaded_items": "Ingen nedlastede elementer",
|
"no_downloaded_items": "Ingen nedlastede elementer",
|
||||||
"delete_all_movies_button": "Slett alle filmer",
|
"delete_all_movies_button": "Slett alle filmer",
|
||||||
"delete_all_tvseries_button": "Slett alle TV-serier",
|
"delete_all_series_button": "Slett alle TV-serier",
|
||||||
"delete_all_button": "Slett alt",
|
"delete_all_button": "Slett alt",
|
||||||
"active_download": "Aktiv nedlasting",
|
"active_download": "Aktiv nedlasting",
|
||||||
"no_active_downloads": "Ingen aktive nedlastinger",
|
"no_active_downloads": "Ingen aktive nedlastinger",
|
||||||
@@ -253,8 +253,8 @@
|
|||||||
"you_are_not_allowed_to_download_files": "Du har ikke tillatelse til å laste ned filer.",
|
"you_are_not_allowed_to_download_files": "Du har ikke tillatelse til å laste ned filer.",
|
||||||
"deleted_all_movies_successfully": "Alle filmer ble slettet!",
|
"deleted_all_movies_successfully": "Alle filmer ble slettet!",
|
||||||
"failed_to_delete_all_movies": "Kunne ikke slette alle filmer",
|
"failed_to_delete_all_movies": "Kunne ikke slette alle filmer",
|
||||||
"deleted_all_tvseries_successfully": "Alle TV-serier ble slettet!",
|
"deleted_all_series_successfully": "Alle TV-serier ble slettet!",
|
||||||
"failed_to_delete_all_tvseries": "Kunne ikke slette alle TV-serier",
|
"failed_to_delete_all_series": "Kunne ikke slette alle TV-serier",
|
||||||
"download_cancelled": "Nedlasting avbrutt",
|
"download_cancelled": "Nedlasting avbrutt",
|
||||||
"could_not_cancel_download": "Kunne ikke avbryte nedlastingen",
|
"could_not_cancel_download": "Kunne ikke avbryte nedlastingen",
|
||||||
"download_completed": "Nedlasting fullført",
|
"download_completed": "Nedlasting fullført",
|
||||||
|
|||||||
@@ -261,43 +261,6 @@
|
|||||||
"None": "Geen",
|
"None": "Geen",
|
||||||
"OnlyForced": "Alleen Geforceerd"
|
"OnlyForced": "Alleen Geforceerd"
|
||||||
},
|
},
|
||||||
"text_color": "Tekst kleur",
|
|
||||||
"background_color": "Achtergrond Kleur",
|
|
||||||
"outline_color": "Kleur omlijning",
|
|
||||||
"outline_thickness": "Dikte omlijning",
|
|
||||||
"background_opacity": "Transparantie achtergrond",
|
|
||||||
"outline_opacity": "Doorzichtigheid omlijning",
|
|
||||||
"bold_text": "Bold Text",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Zwart",
|
|
||||||
"Gray": "Grijs",
|
|
||||||
"Silver": "Zilver",
|
|
||||||
"White": "Wit",
|
|
||||||
"Maroon": "Kastanjebruin",
|
|
||||||
"Red": "Rood",
|
|
||||||
"Fuchsia": "Fuchsia",
|
|
||||||
"Yellow": "Geel",
|
|
||||||
"Olive": "Olijf",
|
|
||||||
"Green": "Groen",
|
|
||||||
"Teal": "Groenblauw",
|
|
||||||
"Lime": "Lichtgroen",
|
|
||||||
"Purple": "Paars",
|
|
||||||
"Navy": "Marine",
|
|
||||||
"Blue": "Blauw",
|
|
||||||
"Aqua": "Aqua"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "Geen",
|
|
||||||
"Thin": "Dun",
|
|
||||||
"Normal": "normaal",
|
|
||||||
"Thick": "Dikke"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Kleur ondertiteling",
|
|
||||||
"subtitle_background_color": "Achtergrondkleur",
|
|
||||||
"subtitle_font": "Lettertype ondertitels",
|
|
||||||
"ksplayer_title": "KSPlayer Instellingen",
|
|
||||||
"hardware_decode": "Hardware Acceleratie",
|
|
||||||
"hardware_decode_description": "Gebruik hardware acceleratie voor video-decodering. Uitschakelen als u problemen met afspelen ondervindt.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +278,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC ondertitel instellingen",
|
|
||||||
"hint": "Aanpassen van ondertiteling voor VLC-speler. Wijzigingen worden toegepast bij het afspelen.",
|
|
||||||
"text_color": "Tekstkleur",
|
|
||||||
"background_color": "Achtergrondkleur",
|
|
||||||
"background_opacity": "Doorzichtigheid achtergrond",
|
|
||||||
"outline_color": "Kleur omlijning",
|
|
||||||
"outline_opacity": "Omtrek opaciteit",
|
|
||||||
"outline_thickness": "Omtrek dikte",
|
|
||||||
"bold": "Bold Text",
|
|
||||||
"margin": "Bottom Margin"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Videospeler",
|
|
||||||
"video_player": "Videospeler",
|
|
||||||
"video_player_description": "Kies welke videospeler gebruikt moet worden op iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Andere",
|
"other_title": "Andere",
|
||||||
"video_orientation": "Video oriëntatie",
|
"video_orientation": "Video oriëntatie",
|
||||||
@@ -351,11 +295,6 @@
|
|||||||
"UNKNOWN": "Onbekend"
|
"UNKNOWN": "Onbekend"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Veilig gebied in bedieningen",
|
"safe_area_in_controls": "Veilig gebied in bedieningen",
|
||||||
"video_player": "Video player",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Experimentele + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Aangepaste menulinks tonen",
|
"show_custom_menu_links": "Aangepaste menulinks tonen",
|
||||||
"show_large_home_carousel": "Toon grote carrousel op startpagina (bèta)",
|
"show_large_home_carousel": "Toon grote carrousel op startpagina (bèta)",
|
||||||
"hide_libraries": "Verberg Bibliotheken",
|
"hide_libraries": "Verberg Bibliotheken",
|
||||||
@@ -367,9 +306,6 @@
|
|||||||
"max_auto_play_episode_count": "Max Automatisch Aflevering Aantal",
|
"max_auto_play_episode_count": "Max Automatisch Aflevering Aantal",
|
||||||
"disabled": "Uitgeschakeld"
|
"disabled": "Uitgeschakeld"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Downloads"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Muziek",
|
"title": "Muziek",
|
||||||
"playback_title": "Afspelen",
|
"playback_title": "Afspelen",
|
||||||
@@ -413,23 +349,18 @@
|
|||||||
"read_more_about_marlin": "Lees meer over Marlin.",
|
"read_more_about_marlin": "Lees meer over Marlin.",
|
||||||
"save_button": "Opslaan",
|
"save_button": "Opslaan",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Opgeslagen",
|
"saved": "Opgeslagen"
|
||||||
"refreshed": "Instellingen zijn vernieuwd vanaf server"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Ververs Instellingen van Server"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Streamystats inschakelen",
|
|
||||||
"disable_streamystats": "Streamystats Uitschakelen",
|
"disable_streamystats": "Streamystats Uitschakelen",
|
||||||
"enable_search": "Gebruik voor Zoeken",
|
"enable_search": "Gebruik voor Zoeken",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Vul de URL van de Streamystats server in. De URL moet http of https bevatten en optioneel de poort.",
|
"streamystats_search_hint": "Vul de URL van de Streamystats server in. De URL moet http of https bevatten en optioneel de poort.",
|
||||||
"read_more_about_streamystats": "Lees Meer over Streamystats.",
|
"read_more_about_streamystats": "Lees Meer over Streamystats.",
|
||||||
"save_button": "Opslaan",
|
|
||||||
"save": "Opslaan",
|
"save": "Opslaan",
|
||||||
"features_title": "Functies",
|
"features_title": "Functies",
|
||||||
"home_sections_title": "Thuis Secties",
|
|
||||||
"enable_movie_recommendations": "Film Aanbevelingen",
|
"enable_movie_recommendations": "Film Aanbevelingen",
|
||||||
"enable_series_recommendations": "Series Aanbevelingen",
|
"enable_series_recommendations": "Series Aanbevelingen",
|
||||||
"enable_promoted_watchlists": "Gepromote Kijklijst",
|
"enable_promoted_watchlists": "Gepromote Kijklijst",
|
||||||
@@ -445,8 +376,7 @@
|
|||||||
"refresh_from_server": "Refresh Settings from Server"
|
"refresh_from_server": "Refresh Settings from Server"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Enable our Watchlist integration",
|
"watchlist_enabler": "Enable our Watchlist integration"
|
||||||
"watchlist_button": "Toggle Watchlist integration"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +387,6 @@
|
|||||||
"delete_all_downloaded_files": "Verwijder alle gedownloade bestanden",
|
"delete_all_downloaded_files": "Verwijder alle gedownloade bestanden",
|
||||||
"music_cache_title": "Music Cache",
|
"music_cache_title": "Music Cache",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Enable Music Cache",
|
|
||||||
"clear_music_cache": "Clear Music Cache",
|
"clear_music_cache": "Clear Music Cache",
|
||||||
"music_cache_size": "{{size}} gecached",
|
"music_cache_size": "{{size}} gecached",
|
||||||
"music_cache_cleared": "Muziek cache gewist",
|
"music_cache_cleared": "Muziek cache gewist",
|
||||||
@@ -467,8 +396,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -490,15 +417,12 @@
|
|||||||
"system": "Systeem"
|
"system": "Systeem"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Fout bij het verwijderen van bestanden",
|
"error_deleting_files": "Fout bij het verwijderen van bestanden"
|
||||||
"background_downloads_enabled": "Downloads op de achtergrond ingeschakeld",
|
|
||||||
"background_downloads_disabled": "Downloads op de achtergrond uitgeschakeld"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -508,6 +432,10 @@
|
|||||||
"4_hours": "4 hours",
|
"4_hours": "4 hours",
|
||||||
"24_hours": "24 hours"
|
"24_hours": "24 hours"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"title": "Dashboard",
|
||||||
|
"sessions_title": "Sessions"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sessions": {
|
"sessions": {
|
||||||
@@ -516,15 +444,12 @@
|
|||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"downloads_title": "Downloads",
|
"downloads_title": "Downloads",
|
||||||
"tvseries": "Series",
|
"series": "Series",
|
||||||
"movies": "Films",
|
"movies": "Films",
|
||||||
"queue": "Wachtrij",
|
|
||||||
"other_media": "Andere media",
|
"other_media": "Andere media",
|
||||||
"queue_hint": "Wachtrij en downloads verdwijnen bij een herstart van de app",
|
|
||||||
"no_items_in_queue": "Geen items in wachtrij",
|
|
||||||
"no_downloaded_items": "Geen gedownloade items",
|
"no_downloaded_items": "Geen gedownloade items",
|
||||||
"delete_all_movies_button": "Verwijder alle films",
|
"delete_all_movies_button": "Verwijder alle films",
|
||||||
"delete_all_tvseries_button": "Verwijder alle Series",
|
"delete_all_series_button": "Verwijder alle Series",
|
||||||
"delete_all_button": "Verwijder alles",
|
"delete_all_button": "Verwijder alles",
|
||||||
"delete_all_other_media_button": "Andere media verwijderen",
|
"delete_all_other_media_button": "Andere media verwijderen",
|
||||||
"active_download": "Actieve download",
|
"active_download": "Actieve download",
|
||||||
@@ -542,17 +467,12 @@
|
|||||||
"you_are_not_allowed_to_download_files": "Je mag geen bestanden downloaden.",
|
"you_are_not_allowed_to_download_files": "Je mag geen bestanden downloaden.",
|
||||||
"deleted_all_movies_successfully": "Alle films succesvol verwijderd!",
|
"deleted_all_movies_successfully": "Alle films succesvol verwijderd!",
|
||||||
"failed_to_delete_all_movies": "Alle films zijn niet verwijderd",
|
"failed_to_delete_all_movies": "Alle films zijn niet verwijderd",
|
||||||
"deleted_all_tvseries_successfully": "Alle series succesvol verwijderd!",
|
"deleted_all_series_successfully": "Alle series succesvol verwijderd!",
|
||||||
"failed_to_delete_all_tvseries": "Alle series zijn niet verwijderd",
|
"failed_to_delete_all_series": "Alle series zijn niet verwijderd",
|
||||||
"deleted_media_successfully": "Andere media succesvol verwijderd!",
|
"deleted_media_successfully": "Andere media succesvol verwijderd!",
|
||||||
"failed_to_delete_media": "Verwijderen van andere media mislukt",
|
"failed_to_delete_media": "Verwijderen van andere media mislukt",
|
||||||
"download_deleted": "Download verwijderd",
|
|
||||||
"download_cancelled": "Download geannuleerd",
|
"download_cancelled": "Download geannuleerd",
|
||||||
"could_not_delete_download": "Kon download niet verwijderen",
|
"could_not_delete_download": "Kon download niet verwijderen",
|
||||||
"download_paused": "Download gepauzeerd",
|
|
||||||
"could_not_pause_download": "Kan niet pauzeren download",
|
|
||||||
"download_resumed": "Download hervat",
|
|
||||||
"could_not_resume_download": "Kon de download niet hervatten",
|
|
||||||
"download_completed": "Download afgerond",
|
"download_completed": "Download afgerond",
|
||||||
"download_failed": "Download Mislukt",
|
"download_failed": "Download Mislukt",
|
||||||
"download_failed_for_item": "Download gefaald voor {{item}} - {{error}}",
|
"download_failed_for_item": "Download gefaald voor {{item}} - {{error}}",
|
||||||
@@ -562,10 +482,7 @@
|
|||||||
"item_already_downloading": "{{item}} wordt al gedownload",
|
"item_already_downloading": "{{item}} wordt al gedownload",
|
||||||
"all_files_deleted": "Alle Bestanden Succesvol Gedownload",
|
"all_files_deleted": "Alle Bestanden Succesvol Gedownload",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} verwijderd",
|
"files_deleted_by_type": "{{count}} {{type}} verwijderd",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Alle bestanden, mappen en taken succesvol verwijderd",
|
|
||||||
"failed_to_clean_cache_directory": "Opschonen cachemap mislukt",
|
|
||||||
"could_not_get_download_url_for_item": "Kan download-URL voor {{itemName}} niet ophalen",
|
"could_not_get_download_url_for_item": "Kan download-URL voor {{itemName}} niet ophalen",
|
||||||
"go_to_downloads": "Ga naar downloads",
|
|
||||||
"file_deleted": "{{item}} verwijderd"
|
"file_deleted": "{{item}} verwijderd"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +500,17 @@
|
|||||||
"none": "Geen",
|
"none": "Geen",
|
||||||
"track": "Spoor",
|
"track": "Spoor",
|
||||||
"cancel": "Annuleren",
|
"cancel": "Annuleren",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Verwijderen",
|
"delete": "Verwijderen",
|
||||||
"ok": "Oké",
|
"ok": "Oké",
|
||||||
"remove": "Verwijderen",
|
"remove": "Verwijderen",
|
||||||
"next": "Volgende",
|
|
||||||
"back": "Terug",
|
"back": "Terug",
|
||||||
"continue": "Doorgaan",
|
"continue": "Doorgaan",
|
||||||
"verifying": "Verifiëren...",
|
"verifying": "Verifiëren...",
|
||||||
"login": "Login",
|
"login": "Login",
|
||||||
"refresh": "Refresh"
|
"episodes": "Episodes",
|
||||||
|
"movies": "Movies",
|
||||||
|
"loading": "Loading…",
|
||||||
|
"seeAll": "See all"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Zoek...",
|
"search": "Zoek...",
|
||||||
@@ -691,10 +609,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Kon geen stream maken voor Chromecast",
|
"could_not_create_stream_for_chromecast": "Kon geen stream maken voor Chromecast",
|
||||||
"message_from_server": "Bericht van de server",
|
"message_from_server": "Bericht van de server",
|
||||||
"next_episode": "Volgende Aflevering",
|
"next_episode": "Volgende Aflevering",
|
||||||
"refresh_tracks": "Tracks verversen",
|
|
||||||
"audio_tracks": "Audio Tracks:",
|
|
||||||
"playback_state": "Afspeelstatus:",
|
|
||||||
"index": "Index:",
|
|
||||||
"continue_watching": "Verder kijken",
|
"continue_watching": "Verder kijken",
|
||||||
"go_back": "Terug",
|
"go_back": "Terug",
|
||||||
"downloaded_file_title": "Je hebt dit bestand gedownload",
|
"downloaded_file_title": "Je hebt dit bestand gedownload",
|
||||||
@@ -723,7 +637,8 @@
|
|||||||
"stopPlayback": "Stop Playback",
|
"stopPlayback": "Stop Playback",
|
||||||
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
||||||
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
||||||
"downloaded": "Downloaded"
|
"downloaded": "Downloaded",
|
||||||
|
"missing_parameters": "Missing playback parameters"
|
||||||
},
|
},
|
||||||
"chapters": {
|
"chapters": {
|
||||||
"title": "Chapters",
|
"title": "Chapters",
|
||||||
@@ -761,7 +676,6 @@
|
|||||||
"show_more": "Toon meer",
|
"show_more": "Toon meer",
|
||||||
"show_less": "Toon minder",
|
"show_less": "Toon minder",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -784,7 +698,8 @@
|
|||||||
"resume_playback": "Resume Playback",
|
"resume_playback": "Resume Playback",
|
||||||
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
||||||
"play_from_start": "Play from Start",
|
"play_from_start": "Play from Start",
|
||||||
"continue_from": "Continue from {{time}}"
|
"continue_from": "Continue from {{time}}",
|
||||||
|
"no_data_available": "No data available"
|
||||||
},
|
},
|
||||||
"live_tv": {
|
"live_tv": {
|
||||||
"next": "Volgende ",
|
"next": "Volgende ",
|
||||||
@@ -888,13 +803,9 @@
|
|||||||
"playlists": "Afspeellijsten",
|
"playlists": "Afspeellijsten",
|
||||||
"tracks": "Nummers"
|
"tracks": "Nummers"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "Alle"
|
|
||||||
},
|
|
||||||
"recently_added": "Recent toegevoegd",
|
"recently_added": "Recent toegevoegd",
|
||||||
"recently_played": "Onlangs afgespeeld",
|
"recently_played": "Onlangs afgespeeld",
|
||||||
"frequently_played": "Vaak afgespeeld",
|
"frequently_played": "Vaak afgespeeld",
|
||||||
"explore": "Ontdek",
|
|
||||||
"top_tracks": "Top Tracks",
|
"top_tracks": "Top Tracks",
|
||||||
"play": "Afspelen",
|
"play": "Afspelen",
|
||||||
"shuffle": "Shuffle",
|
"shuffle": "Shuffle",
|
||||||
@@ -1028,7 +939,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -229,14 +229,14 @@
|
|||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"downloads_title": "Nedlastingar",
|
"downloads_title": "Nedlastingar",
|
||||||
"tvseries": "TV-seriar",
|
"series": "TV-seriar",
|
||||||
"movies": "Filmar",
|
"movies": "Filmar",
|
||||||
"queue": "Kø",
|
"queue": "Kø",
|
||||||
"queue_hint": "Kø og nedlastingar vil gå tapt ved omstart av appen",
|
"queue_hint": "Kø og nedlastingar vil gå tapt ved omstart av appen",
|
||||||
"no_items_in_queue": "Ingen element i køen",
|
"no_items_in_queue": "Ingen element i køen",
|
||||||
"no_downloaded_items": "Ingen nedlasta element",
|
"no_downloaded_items": "Ingen nedlasta element",
|
||||||
"delete_all_movies_button": "Slett alle filmar",
|
"delete_all_movies_button": "Slett alle filmar",
|
||||||
"delete_all_tvseries_button": "Slett alle TV-seriar",
|
"delete_all_series_button": "Slett alle TV-seriar",
|
||||||
"delete_all_button": "Slett alt",
|
"delete_all_button": "Slett alt",
|
||||||
"active_download": "Aktiv nedlasting",
|
"active_download": "Aktiv nedlasting",
|
||||||
"no_active_downloads": "Ingen aktive nedlastingar",
|
"no_active_downloads": "Ingen aktive nedlastingar",
|
||||||
@@ -253,8 +253,8 @@
|
|||||||
"you_are_not_allowed_to_download_files": "Du har ikkje løyve til å lasta ned filer.",
|
"you_are_not_allowed_to_download_files": "Du har ikkje løyve til å lasta ned filer.",
|
||||||
"deleted_all_movies_successfully": "Alle filmar vart sletta!",
|
"deleted_all_movies_successfully": "Alle filmar vart sletta!",
|
||||||
"failed_to_delete_all_movies": "Kunne ikkje sletta alle filmar",
|
"failed_to_delete_all_movies": "Kunne ikkje sletta alle filmar",
|
||||||
"deleted_all_tvseries_successfully": "Alle TV-seriar vart sletta!",
|
"deleted_all_series_successfully": "Alle TV-seriar vart sletta!",
|
||||||
"failed_to_delete_all_tvseries": "Kunne ikkje sletta alle TV-seriar",
|
"failed_to_delete_all_series": "Kunne ikkje sletta alle TV-seriar",
|
||||||
"download_cancelled": "Nedlasting avbroten",
|
"download_cancelled": "Nedlasting avbroten",
|
||||||
"could_not_cancel_download": "Kunne ikkje avbryta nedlastinga",
|
"could_not_cancel_download": "Kunne ikkje avbryta nedlastinga",
|
||||||
"download_completed": "Nedlasting fullført",
|
"download_completed": "Nedlasting fullført",
|
||||||
|
|||||||
@@ -123,7 +123,7 @@
|
|||||||
"title": "Switch User",
|
"title": "Switch User",
|
||||||
"account": "Account",
|
"account": "Account",
|
||||||
"switch_user": "Switch User on This Server",
|
"switch_user": "Switch User on This Server",
|
||||||
"current": "current"
|
"current": "nåværende"
|
||||||
},
|
},
|
||||||
"categories": {
|
"categories": {
|
||||||
"title": "Categories"
|
"title": "Categories"
|
||||||
@@ -261,43 +261,6 @@
|
|||||||
"None": "Ingen",
|
"None": "Ingen",
|
||||||
"OnlyForced": "Enkelt"
|
"OnlyForced": "Enkelt"
|
||||||
},
|
},
|
||||||
"text_color": "Tekst farge",
|
|
||||||
"background_color": "Bakgrunnsfarge",
|
|
||||||
"outline_color": "Omrissets farge",
|
|
||||||
"outline_thickness": "Omriss Tykkelse",
|
|
||||||
"background_opacity": "Bakgrunns gjennomsiktighet",
|
|
||||||
"outline_opacity": "Omrissets gjennomsiktighet",
|
|
||||||
"bold_text": "Bold Text",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Svart",
|
|
||||||
"Gray": "Grå",
|
|
||||||
"Silver": "Sølv",
|
|
||||||
"White": "Hvit",
|
|
||||||
"Maroon": "Rødbrun",
|
|
||||||
"Red": "Rød",
|
|
||||||
"Fuchsia": "Fuchsia",
|
|
||||||
"Yellow": "Gul",
|
|
||||||
"Olive": "Olivengrønn",
|
|
||||||
"Green": "Grønn",
|
|
||||||
"Teal": "Blågrønn",
|
|
||||||
"Lime": "Limegrønn",
|
|
||||||
"Purple": "Lilla",
|
|
||||||
"Navy": "Marineblå",
|
|
||||||
"Blue": "Blå",
|
|
||||||
"Aqua": "Vann"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "Ingen",
|
|
||||||
"Thin": "Tynn",
|
|
||||||
"Normal": "Vanlig",
|
|
||||||
"Thick": "Tykk"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Subtitle Color",
|
|
||||||
"subtitle_background_color": "Background Color",
|
|
||||||
"subtitle_font": "Subtitle Font",
|
|
||||||
"ksplayer_title": "KSPlayer Settings",
|
|
||||||
"hardware_decode": "Hardware Decoding",
|
|
||||||
"hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +278,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC Subtitle Settings",
|
|
||||||
"hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.",
|
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"bold": "Bold Text",
|
|
||||||
"margin": "Bottom Margin"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Video Player",
|
|
||||||
"video_player": "Video Player",
|
|
||||||
"video_player_description": "Choose which video player to use on iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Annet",
|
"other_title": "Annet",
|
||||||
"video_orientation": "Video Retning",
|
"video_orientation": "Video Retning",
|
||||||
@@ -351,11 +295,6 @@
|
|||||||
"UNKNOWN": "Ukjent"
|
"UNKNOWN": "Ukjent"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Sikker sone i kontroller",
|
"safe_area_in_controls": "Sikker sone i kontroller",
|
||||||
"video_player": "Video Spiller",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (eksperimentell + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Vis tilpassede menylenker",
|
"show_custom_menu_links": "Vis tilpassede menylenker",
|
||||||
"show_large_home_carousel": "Show Large Home Carousel (beta)",
|
"show_large_home_carousel": "Show Large Home Carousel (beta)",
|
||||||
"hide_libraries": "Skjul biblioteker",
|
"hide_libraries": "Skjul biblioteker",
|
||||||
@@ -367,9 +306,6 @@
|
|||||||
"max_auto_play_episode_count": "Maks automatisk avspilling Episode Telling",
|
"max_auto_play_episode_count": "Maks automatisk avspilling Episode Telling",
|
||||||
"disabled": "Deaktivert"
|
"disabled": "Deaktivert"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Nedlastinger"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Music",
|
"title": "Music",
|
||||||
"playback_title": "Playback",
|
"playback_title": "Playback",
|
||||||
@@ -413,23 +349,18 @@
|
|||||||
"read_more_about_marlin": "Les mer om Marlin.",
|
"read_more_about_marlin": "Les mer om Marlin.",
|
||||||
"save_button": "Lagre",
|
"save_button": "Lagre",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Lagret",
|
"saved": "Lagret"
|
||||||
"refreshed": "Settings refreshed from server"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Refresh Settings from Server"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Enable Streamystats",
|
|
||||||
"disable_streamystats": "Disable Streamystats",
|
"disable_streamystats": "Disable Streamystats",
|
||||||
"enable_search": "Use for Search",
|
"enable_search": "Use for Search",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
||||||
"read_more_about_streamystats": "Read More About Streamystats.",
|
"read_more_about_streamystats": "Read More About Streamystats.",
|
||||||
"save_button": "Save",
|
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"features_title": "Features",
|
"features_title": "Features",
|
||||||
"home_sections_title": "Home Sections",
|
|
||||||
"enable_movie_recommendations": "Movie Recommendations",
|
"enable_movie_recommendations": "Movie Recommendations",
|
||||||
"enable_series_recommendations": "Series Recommendations",
|
"enable_series_recommendations": "Series Recommendations",
|
||||||
"enable_promoted_watchlists": "Promoted Watchlists",
|
"enable_promoted_watchlists": "Promoted Watchlists",
|
||||||
@@ -445,8 +376,7 @@
|
|||||||
"refresh_from_server": "Refresh Settings from Server"
|
"refresh_from_server": "Refresh Settings from Server"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Enable our Watchlist integration",
|
"watchlist_enabler": "Enable our Watchlist integration"
|
||||||
"watchlist_button": "Toggle Watchlist integration"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +387,6 @@
|
|||||||
"delete_all_downloaded_files": "Slett alle nedlastede filer",
|
"delete_all_downloaded_files": "Slett alle nedlastede filer",
|
||||||
"music_cache_title": "Music Cache",
|
"music_cache_title": "Music Cache",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Enable Music Cache",
|
|
||||||
"clear_music_cache": "Clear Music Cache",
|
"clear_music_cache": "Clear Music Cache",
|
||||||
"music_cache_size": "{{size}} cached",
|
"music_cache_size": "{{size}} cached",
|
||||||
"music_cache_cleared": "Music cache cleared",
|
"music_cache_cleared": "Music cache cleared",
|
||||||
@@ -467,8 +396,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -490,15 +417,12 @@
|
|||||||
"system": "Systemadministrasjon"
|
"system": "Systemadministrasjon"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Feil ved sletting av filer",
|
"error_deleting_files": "Feil ved sletting av filer"
|
||||||
"background_downloads_enabled": "Nedlastinger av bakgrunn aktivert",
|
|
||||||
"background_downloads_disabled": "Bakgrunnsnedlastinger deaktivert"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -508,6 +432,10 @@
|
|||||||
"4_hours": "4 hours",
|
"4_hours": "4 hours",
|
||||||
"24_hours": "24 hours"
|
"24_hours": "24 hours"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"title": "Dashboard",
|
||||||
|
"sessions_title": "Sessions"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sessions": {
|
"sessions": {
|
||||||
@@ -516,15 +444,12 @@
|
|||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"downloads_title": "Nedlastinger",
|
"downloads_title": "Nedlastinger",
|
||||||
"tvseries": "TV-Serier",
|
"series": "TV-Serier",
|
||||||
"movies": "Filmer",
|
"movies": "Filmer",
|
||||||
"queue": "Kø",
|
|
||||||
"other_media": "Andre medier",
|
"other_media": "Andre medier",
|
||||||
"queue_hint": "Kø og nedlastinger vil gå tapt når appen startes på nytt",
|
|
||||||
"no_items_in_queue": "Ingen elementer i køen",
|
|
||||||
"no_downloaded_items": "Ingen nedlastede elementer",
|
"no_downloaded_items": "Ingen nedlastede elementer",
|
||||||
"delete_all_movies_button": "Slett alle filmer",
|
"delete_all_movies_button": "Slett alle filmer",
|
||||||
"delete_all_tvseries_button": "Slett alle TV-Serier",
|
"delete_all_series_button": "Slett alle TV-Serier",
|
||||||
"delete_all_button": "Slett alle",
|
"delete_all_button": "Slett alle",
|
||||||
"delete_all_other_media_button": "Slett andre media",
|
"delete_all_other_media_button": "Slett andre media",
|
||||||
"active_download": "Aktiv nedlasting",
|
"active_download": "Aktiv nedlasting",
|
||||||
@@ -542,17 +467,12 @@
|
|||||||
"you_are_not_allowed_to_download_files": "Du har ikke lov til å laste ned filer.",
|
"you_are_not_allowed_to_download_files": "Du har ikke lov til å laste ned filer.",
|
||||||
"deleted_all_movies_successfully": "Slettet alle filmer vellykket!",
|
"deleted_all_movies_successfully": "Slettet alle filmer vellykket!",
|
||||||
"failed_to_delete_all_movies": "Kunne ikke slette alle filmer",
|
"failed_to_delete_all_movies": "Kunne ikke slette alle filmer",
|
||||||
"deleted_all_tvseries_successfully": "Alle TV-Serier ble slettet!",
|
"deleted_all_series_successfully": "Alle TV-Serier ble slettet!",
|
||||||
"failed_to_delete_all_tvseries": "Kunne ikke slette alle TV-Serier",
|
"failed_to_delete_all_series": "Kunne ikke slette alle TV-Serier",
|
||||||
"deleted_media_successfully": "Slettet andre media vellykket!",
|
"deleted_media_successfully": "Slettet andre media vellykket!",
|
||||||
"failed_to_delete_media": "Kunne ikke slette andre medier",
|
"failed_to_delete_media": "Kunne ikke slette andre medier",
|
||||||
"download_deleted": "Nedlasting slettet",
|
|
||||||
"download_cancelled": "Download Cancelled",
|
"download_cancelled": "Download Cancelled",
|
||||||
"could_not_delete_download": "Kunne ikke slette nedlasting",
|
"could_not_delete_download": "Kunne ikke slette nedlasting",
|
||||||
"download_paused": "Last ned Pauset",
|
|
||||||
"could_not_pause_download": "Kunne ikke pause nedlasting",
|
|
||||||
"download_resumed": "Nedlastingen er gjenopptatt",
|
|
||||||
"could_not_resume_download": "Kunne ikke fortsette nedlasting",
|
|
||||||
"download_completed": "Nedlasting fullført",
|
"download_completed": "Nedlasting fullført",
|
||||||
"download_failed": "Download Failed",
|
"download_failed": "Download Failed",
|
||||||
"download_failed_for_item": "Nedlasting feilet for {{item}} – {{error}}",
|
"download_failed_for_item": "Nedlasting feilet for {{item}} – {{error}}",
|
||||||
@@ -562,10 +482,7 @@
|
|||||||
"item_already_downloading": "{{item}} is already downloading",
|
"item_already_downloading": "{{item}} is already downloading",
|
||||||
"all_files_deleted": "All Downloads Deleted Successfully",
|
"all_files_deleted": "All Downloads Deleted Successfully",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Alle filer, mapper og jobber slettet",
|
|
||||||
"failed_to_clean_cache_directory": "Klarte ikke å tømme mellomlagermappen",
|
|
||||||
"could_not_get_download_url_for_item": "Kunne ikke hente nedlastings-URL for {{itemName}}",
|
"could_not_get_download_url_for_item": "Kunne ikke hente nedlastings-URL for {{itemName}}",
|
||||||
"go_to_downloads": "Gå til nedlastinger",
|
|
||||||
"file_deleted": "{{item}} deleted"
|
"file_deleted": "{{item}} deleted"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +500,17 @@
|
|||||||
"none": "None",
|
"none": "None",
|
||||||
"track": "Track",
|
"track": "Track",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
"next": "Next",
|
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
"continue": "Continue",
|
"continue": "Continue",
|
||||||
"verifying": "Verifying...",
|
"verifying": "Verifying...",
|
||||||
"login": "Login",
|
"login": "Login",
|
||||||
"refresh": "Refresh"
|
"episodes": "Episodes",
|
||||||
|
"movies": "Movies",
|
||||||
|
"loading": "Loading…",
|
||||||
|
"seeAll": "See all"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Søk...",
|
"search": "Søk...",
|
||||||
@@ -691,10 +609,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Kan ikke opprette en strøm for Chromecast",
|
"could_not_create_stream_for_chromecast": "Kan ikke opprette en strøm for Chromecast",
|
||||||
"message_from_server": "Melding fra tjener: {{message}}",
|
"message_from_server": "Melding fra tjener: {{message}}",
|
||||||
"next_episode": "Neste Episode",
|
"next_episode": "Neste Episode",
|
||||||
"refresh_tracks": "Oppdater sporing",
|
|
||||||
"audio_tracks": "Lyd Tracks:",
|
|
||||||
"playback_state": "Avspillingsstatus:",
|
|
||||||
"index": "Indeks:",
|
|
||||||
"continue_watching": "Fortsett å se",
|
"continue_watching": "Fortsett å se",
|
||||||
"go_back": "Gå tilbake",
|
"go_back": "Gå tilbake",
|
||||||
"downloaded_file_title": "You have this file downloaded",
|
"downloaded_file_title": "You have this file downloaded",
|
||||||
@@ -723,7 +637,8 @@
|
|||||||
"stopPlayback": "Stop Playback",
|
"stopPlayback": "Stop Playback",
|
||||||
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
||||||
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
||||||
"downloaded": "Downloaded"
|
"downloaded": "Downloaded",
|
||||||
|
"missing_parameters": "Missing playback parameters"
|
||||||
},
|
},
|
||||||
"chapters": {
|
"chapters": {
|
||||||
"title": "Chapters",
|
"title": "Chapters",
|
||||||
@@ -761,7 +676,6 @@
|
|||||||
"show_more": "Vis mer",
|
"show_more": "Vis mer",
|
||||||
"show_less": "Vis mindre",
|
"show_less": "Vis mindre",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -784,7 +698,8 @@
|
|||||||
"resume_playback": "Resume Playback",
|
"resume_playback": "Resume Playback",
|
||||||
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
||||||
"play_from_start": "Play from Start",
|
"play_from_start": "Play from Start",
|
||||||
"continue_from": "Continue from {{time}}"
|
"continue_from": "Continue from {{time}}",
|
||||||
|
"no_data_available": "No data available"
|
||||||
},
|
},
|
||||||
"live_tv": {
|
"live_tv": {
|
||||||
"next": "Neste",
|
"next": "Neste",
|
||||||
@@ -888,13 +803,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "tracks"
|
"tracks": "tracks"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "All"
|
|
||||||
},
|
|
||||||
"recently_added": "Recently Added",
|
"recently_added": "Recently Added",
|
||||||
"recently_played": "Recently Played",
|
"recently_played": "Recently Played",
|
||||||
"frequently_played": "Frequently Played",
|
"frequently_played": "Frequently Played",
|
||||||
"explore": "Explore",
|
|
||||||
"top_tracks": "Top Tracks",
|
"top_tracks": "Top Tracks",
|
||||||
"play": "Play",
|
"play": "Play",
|
||||||
"shuffle": "Shuffle",
|
"shuffle": "Shuffle",
|
||||||
@@ -1028,7 +939,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -261,43 +261,6 @@
|
|||||||
"None": "Brak",
|
"None": "Brak",
|
||||||
"OnlyForced": "Tylko wymuszone"
|
"OnlyForced": "Tylko wymuszone"
|
||||||
},
|
},
|
||||||
"text_color": "Kolor tekstu",
|
|
||||||
"background_color": "Kolor tła",
|
|
||||||
"outline_color": "Kolor konturu",
|
|
||||||
"outline_thickness": "Grubość konturu",
|
|
||||||
"background_opacity": "Przezroczystość tła",
|
|
||||||
"outline_opacity": "Przezroczystość konturu",
|
|
||||||
"bold_text": "Tekst pogrubiony",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Czarny",
|
|
||||||
"Gray": "Szary",
|
|
||||||
"Silver": "Srebro",
|
|
||||||
"White": "Biały",
|
|
||||||
"Maroon": "Bordowy",
|
|
||||||
"Red": "Czerwony",
|
|
||||||
"Fuchsia": "Fuksja",
|
|
||||||
"Yellow": "Żółty",
|
|
||||||
"Olive": "Oliwki",
|
|
||||||
"Green": "Zielony",
|
|
||||||
"Teal": "Turkusowy",
|
|
||||||
"Lime": "Limonkowy",
|
|
||||||
"Purple": "Fioletowy",
|
|
||||||
"Navy": "Granatowy",
|
|
||||||
"Blue": "Niebieski",
|
|
||||||
"Aqua": "Aqua"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "Brak",
|
|
||||||
"Thin": "Cienka",
|
|
||||||
"Normal": "Normalny",
|
|
||||||
"Thick": "Gruba"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Kolor napisów",
|
|
||||||
"subtitle_background_color": "Kolor tła",
|
|
||||||
"subtitle_font": "Czcionka napisów",
|
|
||||||
"ksplayer_title": "Ustawienia KSPlayer",
|
|
||||||
"hardware_decode": "Dekodowanie sprzętowe",
|
|
||||||
"hardware_decode_description": "Używaj akceleracji sprzętowej dla dekodowania wideo. Wyłącz, jeśli doświadczasz problemów z odtwarzaniem.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +278,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "Ustawienia napisów VLC",
|
|
||||||
"hint": "Personalizuj wygląd napisów dla odtwarzacza VLC. Zmiany zajdą przy następnym odtwarzaniu.",
|
|
||||||
"text_color": "Kolor tekstu",
|
|
||||||
"background_color": "Kolor tła",
|
|
||||||
"background_opacity": "Przezroczystość tła",
|
|
||||||
"outline_color": "Kolor obrysu",
|
|
||||||
"outline_opacity": "Przezroczystość obrysu",
|
|
||||||
"outline_thickness": "Grubość obrysu",
|
|
||||||
"bold": "Pogrubiony tekst",
|
|
||||||
"margin": "Dolny margines"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Odtwarzacz wideo",
|
|
||||||
"video_player": "Odtwarzacz wideo",
|
|
||||||
"video_player_description": "Wybierz którego odtwarzacza wideo używać w iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Inne",
|
"other_title": "Inne",
|
||||||
"video_orientation": "Orientacja wideo",
|
"video_orientation": "Orientacja wideo",
|
||||||
@@ -351,11 +295,6 @@
|
|||||||
"UNKNOWN": "Nieznana"
|
"UNKNOWN": "Nieznana"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Bezpieczny obszar w kontrolkach",
|
"safe_area_in_controls": "Bezpieczny obszar w kontrolkach",
|
||||||
"video_player": "Odtwarzacz wideo",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Eksperymentalny + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Pokaż niestandardowe odnośniki w menu",
|
"show_custom_menu_links": "Pokaż niestandardowe odnośniki w menu",
|
||||||
"show_large_home_carousel": "Wyświetl Dużą Karuzelę na ekranie głównym (beta)",
|
"show_large_home_carousel": "Wyświetl Dużą Karuzelę na ekranie głównym (beta)",
|
||||||
"hide_libraries": "Ukryj biblioteki",
|
"hide_libraries": "Ukryj biblioteki",
|
||||||
@@ -367,9 +306,6 @@
|
|||||||
"max_auto_play_episode_count": "Maksymalna liczba odcinków automatycznego odtwarzania",
|
"max_auto_play_episode_count": "Maksymalna liczba odcinków automatycznego odtwarzania",
|
||||||
"disabled": "Wyłączone"
|
"disabled": "Wyłączone"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Pobieranie"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Muzyka",
|
"title": "Muzyka",
|
||||||
"playback_title": "Odtwarzanie",
|
"playback_title": "Odtwarzanie",
|
||||||
@@ -413,23 +349,18 @@
|
|||||||
"read_more_about_marlin": "Dowiedz się więcej o Marlin.",
|
"read_more_about_marlin": "Dowiedz się więcej o Marlin.",
|
||||||
"save_button": "Zapisz",
|
"save_button": "Zapisz",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Zapisano",
|
"saved": "Zapisano"
|
||||||
"refreshed": "Ustawienia odświeżone z serwera"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Odśwież ustawienia z serwera"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Włącz Streamystats",
|
|
||||||
"disable_streamystats": "Wyłącz Streamystats",
|
"disable_streamystats": "Wyłącz Streamystats",
|
||||||
"enable_search": "Używaj do wyszukiwania",
|
"enable_search": "Używaj do wyszukiwania",
|
||||||
"url": "Adres URL",
|
"url": "Adres URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Wprowadź adres URL dla twojego serwera Streamystats. URL powinien zawierać http lub https i opcjonalnie port.",
|
"streamystats_search_hint": "Wprowadź adres URL dla twojego serwera Streamystats. URL powinien zawierać http lub https i opcjonalnie port.",
|
||||||
"read_more_about_streamystats": "Dowiedz się więcej o Streamystats.",
|
"read_more_about_streamystats": "Dowiedz się więcej o Streamystats.",
|
||||||
"save_button": "Zapisz",
|
|
||||||
"save": "Zapisz",
|
"save": "Zapisz",
|
||||||
"features_title": "Funkcje",
|
"features_title": "Funkcje",
|
||||||
"home_sections_title": "Sekcja główna",
|
|
||||||
"enable_movie_recommendations": "Rekomendacje filmów",
|
"enable_movie_recommendations": "Rekomendacje filmów",
|
||||||
"enable_series_recommendations": "Rekomendację seriali",
|
"enable_series_recommendations": "Rekomendację seriali",
|
||||||
"enable_promoted_watchlists": "Promowane listy oglądania",
|
"enable_promoted_watchlists": "Promowane listy oglądania",
|
||||||
@@ -445,8 +376,7 @@
|
|||||||
"refresh_from_server": "Odśwież ustawienia z serwera"
|
"refresh_from_server": "Odśwież ustawienia z serwera"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Aktywuj naszą integrację Listy Oglądania",
|
"watchlist_enabler": "Aktywuj naszą integrację Listy Oglądania"
|
||||||
"watchlist_button": "Przelącz integrację Listy Oglądania"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +387,6 @@
|
|||||||
"delete_all_downloaded_files": "Usuń wszystkie pobrane pliki",
|
"delete_all_downloaded_files": "Usuń wszystkie pobrane pliki",
|
||||||
"music_cache_title": "Bufor muzyki",
|
"music_cache_title": "Bufor muzyki",
|
||||||
"music_cache_description": "Automatycznie buforuj piosenki w trakcie słuchania dla płynniejszego odtwarzania i wsparcia offline",
|
"music_cache_description": "Automatycznie buforuj piosenki w trakcie słuchania dla płynniejszego odtwarzania i wsparcia offline",
|
||||||
"enable_music_cache": "Włącz bufor muzyki",
|
|
||||||
"clear_music_cache": "Wyczyść bufor muzyki",
|
"clear_music_cache": "Wyczyść bufor muzyki",
|
||||||
"music_cache_size": "Zbuforowano {{size}}",
|
"music_cache_size": "Zbuforowano {{size}}",
|
||||||
"music_cache_cleared": "Wyczyszczono bufor muzyki",
|
"music_cache_cleared": "Wyczyszczono bufor muzyki",
|
||||||
@@ -467,8 +396,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -490,15 +417,12 @@
|
|||||||
"system": "System"
|
"system": "System"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Błąd podczas usuwania plików",
|
"error_deleting_files": "Błąd podczas usuwania plików"
|
||||||
"background_downloads_enabled": "Pobieranie w tle włączone",
|
|
||||||
"background_downloads_disabled": "Pobieranie w tle wyłączone"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -508,6 +432,10 @@
|
|||||||
"4_hours": "4 hours",
|
"4_hours": "4 hours",
|
||||||
"24_hours": "24 hours"
|
"24_hours": "24 hours"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"title": "Dashboard",
|
||||||
|
"sessions_title": "Sessions"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sessions": {
|
"sessions": {
|
||||||
@@ -516,15 +444,12 @@
|
|||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"downloads_title": "Pobrane",
|
"downloads_title": "Pobrane",
|
||||||
"tvseries": "Seriale",
|
"series": "Seriale",
|
||||||
"movies": "Filmy",
|
"movies": "Filmy",
|
||||||
"queue": "Kolejka",
|
|
||||||
"other_media": "Inne media",
|
"other_media": "Inne media",
|
||||||
"queue_hint": "Kolejka i pobierania zostaną utracone po ponownym uruchomieniu aplikacji",
|
|
||||||
"no_items_in_queue": "Brak elementów w kolejce",
|
|
||||||
"no_downloaded_items": "Brak pobranych elementów",
|
"no_downloaded_items": "Brak pobranych elementów",
|
||||||
"delete_all_movies_button": "Usuń wszystkie filmy",
|
"delete_all_movies_button": "Usuń wszystkie filmy",
|
||||||
"delete_all_tvseries_button": "Usuń wszystkie seriale",
|
"delete_all_series_button": "Usuń wszystkie seriale",
|
||||||
"delete_all_button": "Usuń wszystko",
|
"delete_all_button": "Usuń wszystko",
|
||||||
"delete_all_other_media_button": "Usuń inne media",
|
"delete_all_other_media_button": "Usuń inne media",
|
||||||
"active_download": "Aktywne pobieranie",
|
"active_download": "Aktywne pobieranie",
|
||||||
@@ -542,17 +467,12 @@
|
|||||||
"you_are_not_allowed_to_download_files": "Nie masz uprawnień do pobierania plików.",
|
"you_are_not_allowed_to_download_files": "Nie masz uprawnień do pobierania plików.",
|
||||||
"deleted_all_movies_successfully": "Wszystkie filmy zostały pomyślnie usunięte!",
|
"deleted_all_movies_successfully": "Wszystkie filmy zostały pomyślnie usunięte!",
|
||||||
"failed_to_delete_all_movies": "Nie udało się usunąć wszystkich filmów",
|
"failed_to_delete_all_movies": "Nie udało się usunąć wszystkich filmów",
|
||||||
"deleted_all_tvseries_successfully": "Wszystkie seriale zostały pomyślnie usunięte!",
|
"deleted_all_series_successfully": "Wszystkie seriale zostały pomyślnie usunięte!",
|
||||||
"failed_to_delete_all_tvseries": "Nie udało się usunąć wszystkich seriali",
|
"failed_to_delete_all_series": "Nie udało się usunąć wszystkich seriali",
|
||||||
"deleted_media_successfully": "Pomyślnie usunięto inne media!",
|
"deleted_media_successfully": "Pomyślnie usunięto inne media!",
|
||||||
"failed_to_delete_media": "Nie udało się usunąć innych mediów",
|
"failed_to_delete_media": "Nie udało się usunąć innych mediów",
|
||||||
"download_deleted": "Pobieranie usunięte",
|
|
||||||
"download_cancelled": "Pobieranie anulowane",
|
"download_cancelled": "Pobieranie anulowane",
|
||||||
"could_not_delete_download": "Nie można usunąć pobrania",
|
"could_not_delete_download": "Nie można usunąć pobrania",
|
||||||
"download_paused": "Pobieranie wstrzymane",
|
|
||||||
"could_not_pause_download": "Nie można wstrzymać pobierania",
|
|
||||||
"download_resumed": "Pobieranie wznowione",
|
|
||||||
"could_not_resume_download": "Nie można wznowić pobierania",
|
|
||||||
"download_completed": "Pobieranie zakończone",
|
"download_completed": "Pobieranie zakończone",
|
||||||
"download_failed": "Pobieranie nie powiodło się",
|
"download_failed": "Pobieranie nie powiodło się",
|
||||||
"download_failed_for_item": "Pobieranie nie powiodło się dla {{item}} – {{error}}",
|
"download_failed_for_item": "Pobieranie nie powiodło się dla {{item}} – {{error}}",
|
||||||
@@ -562,10 +482,7 @@
|
|||||||
"item_already_downloading": "{{item}} jest w trakcie pobierania",
|
"item_already_downloading": "{{item}} jest w trakcie pobierania",
|
||||||
"all_files_deleted": "Pomyślnie usunięto wszystkie pobrane",
|
"all_files_deleted": "Pomyślnie usunięto wszystkie pobrane",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} usunięto",
|
"files_deleted_by_type": "{{count}} {{type}} usunięto",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Wszystkie pliki, foldery i zadania zostały pomyślnie usunięte",
|
|
||||||
"failed_to_clean_cache_directory": "Nie udało się wyczyścić katalogu pamięci podręcznej",
|
|
||||||
"could_not_get_download_url_for_item": "Nie można pobrać adresu URL dla {{itemName}}",
|
"could_not_get_download_url_for_item": "Nie można pobrać adresu URL dla {{itemName}}",
|
||||||
"go_to_downloads": "Przejdź do pobranych",
|
|
||||||
"file_deleted": "Usunięto {{item}}"
|
"file_deleted": "Usunięto {{item}}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +500,17 @@
|
|||||||
"none": "Nic",
|
"none": "Nic",
|
||||||
"track": "Utwór",
|
"track": "Utwór",
|
||||||
"cancel": "Anuluj",
|
"cancel": "Anuluj",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Usuń",
|
"delete": "Usuń",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Usuń",
|
"remove": "Usuń",
|
||||||
"next": "Następne",
|
|
||||||
"back": "Poprzednie",
|
"back": "Poprzednie",
|
||||||
"continue": "Kontynuuj",
|
"continue": "Kontynuuj",
|
||||||
"verifying": "Weryfikacja...",
|
"verifying": "Weryfikacja...",
|
||||||
"login": "Login",
|
"login": "Login",
|
||||||
"refresh": "Refresh"
|
"episodes": "Episodes",
|
||||||
|
"movies": "Movies",
|
||||||
|
"loading": "Loading…",
|
||||||
|
"seeAll": "See all"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Szukaj...",
|
"search": "Szukaj...",
|
||||||
@@ -691,10 +609,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Nie udało się utworzyć strumienia dla Chromecasta",
|
"could_not_create_stream_for_chromecast": "Nie udało się utworzyć strumienia dla Chromecasta",
|
||||||
"message_from_server": "Wiadomość z serwera: {{message}}",
|
"message_from_server": "Wiadomość z serwera: {{message}}",
|
||||||
"next_episode": "Następny odcinek",
|
"next_episode": "Następny odcinek",
|
||||||
"refresh_tracks": "Odśwież ścieżki",
|
|
||||||
"audio_tracks": "Ścieżki audio:",
|
|
||||||
"playback_state": "Stan odtwarzania:",
|
|
||||||
"index": "Indeks:",
|
|
||||||
"continue_watching": "Kontynuuj oglądanie",
|
"continue_watching": "Kontynuuj oglądanie",
|
||||||
"go_back": "Wstecz",
|
"go_back": "Wstecz",
|
||||||
"downloaded_file_title": "Ten plik masz już pobrany",
|
"downloaded_file_title": "Ten plik masz już pobrany",
|
||||||
@@ -723,7 +637,8 @@
|
|||||||
"stopPlayback": "Stop Playback",
|
"stopPlayback": "Stop Playback",
|
||||||
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
||||||
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
||||||
"downloaded": "Downloaded"
|
"downloaded": "Downloaded",
|
||||||
|
"missing_parameters": "Missing playback parameters"
|
||||||
},
|
},
|
||||||
"chapters": {
|
"chapters": {
|
||||||
"title": "Chapters",
|
"title": "Chapters",
|
||||||
@@ -761,7 +676,6 @@
|
|||||||
"show_more": "Pokaż więcej",
|
"show_more": "Pokaż więcej",
|
||||||
"show_less": "Pokaż mniej",
|
"show_less": "Pokaż mniej",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -784,7 +698,8 @@
|
|||||||
"resume_playback": "Resume Playback",
|
"resume_playback": "Resume Playback",
|
||||||
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
||||||
"play_from_start": "Play from Start",
|
"play_from_start": "Play from Start",
|
||||||
"continue_from": "Continue from {{time}}"
|
"continue_from": "Continue from {{time}}",
|
||||||
|
"no_data_available": "No data available"
|
||||||
},
|
},
|
||||||
"live_tv": {
|
"live_tv": {
|
||||||
"next": "Następny",
|
"next": "Następny",
|
||||||
@@ -888,13 +803,9 @@
|
|||||||
"playlists": "Playlisty",
|
"playlists": "Playlisty",
|
||||||
"tracks": "utwory"
|
"tracks": "utwory"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "Wszystkie"
|
|
||||||
},
|
|
||||||
"recently_added": "Ostatnio dodano",
|
"recently_added": "Ostatnio dodano",
|
||||||
"recently_played": "Ostatnio odtwarzano",
|
"recently_played": "Ostatnio odtwarzano",
|
||||||
"frequently_played": "Często odtwarzane",
|
"frequently_played": "Często odtwarzane",
|
||||||
"explore": "Odkrywaj",
|
|
||||||
"top_tracks": "Popularne utwory",
|
"top_tracks": "Popularne utwory",
|
||||||
"play": "Odtwórz",
|
"play": "Odtwórz",
|
||||||
"shuffle": "Losuj",
|
"shuffle": "Losuj",
|
||||||
@@ -1028,7 +939,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -227,14 +227,14 @@
|
|||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"downloads_title": "Downloads",
|
"downloads_title": "Downloads",
|
||||||
"tvseries": "TV/Séries",
|
"series": "TV/Séries",
|
||||||
"movies": "Filmes",
|
"movies": "Filmes",
|
||||||
"queue": "Fila",
|
"queue": "Fila",
|
||||||
"queue_hint": "A fila e os downloads serão perdidos ao reiniciar o aplicativo",
|
"queue_hint": "A fila e os downloads serão perdidos ao reiniciar o aplicativo",
|
||||||
"no_items_in_queue": "Nenhum item na fila",
|
"no_items_in_queue": "Nenhum item na fila",
|
||||||
"no_downloaded_items": "Nenhum item baixado",
|
"no_downloaded_items": "Nenhum item baixado",
|
||||||
"delete_all_movies_button": "Remover todos os filmes",
|
"delete_all_movies_button": "Remover todos os filmes",
|
||||||
"delete_all_tvseries_button": "Remover todos as TV/Séries",
|
"delete_all_series_button": "Remover todos as TV/Séries",
|
||||||
"delete_all_button": "Remover tudo",
|
"delete_all_button": "Remover tudo",
|
||||||
"active_download": "Downloads ativos",
|
"active_download": "Downloads ativos",
|
||||||
"no_active_downloads": "Nenhum download ativo",
|
"no_active_downloads": "Nenhum download ativo",
|
||||||
@@ -251,8 +251,8 @@
|
|||||||
"you_are_not_allowed_to_download_files": "Você não tem permissão para baixar arquivos.",
|
"you_are_not_allowed_to_download_files": "Você não tem permissão para baixar arquivos.",
|
||||||
"deleted_all_movies_successfully": "Todos os filmes foram removidos com sucesso!",
|
"deleted_all_movies_successfully": "Todos os filmes foram removidos com sucesso!",
|
||||||
"failed_to_delete_all_movies": "Falha ao remover todos os filmes",
|
"failed_to_delete_all_movies": "Falha ao remover todos os filmes",
|
||||||
"deleted_all_tvseries_successfully": "Todos as TV/Séries foram removidos com sucesso!",
|
"deleted_all_series_successfully": "Todos as TV/Séries foram removidos com sucesso!",
|
||||||
"failed_to_delete_all_tvseries": "Falha ao remover todos as TV/Séries",
|
"failed_to_delete_all_series": "Falha ao remover todos as TV/Séries",
|
||||||
"download_cancelled": "Download cancelado",
|
"download_cancelled": "Download cancelado",
|
||||||
"could_not_cancel_download": "Não foi possível cancelar o download",
|
"could_not_cancel_download": "Não foi possível cancelar o download",
|
||||||
"download_completed": "Download completo",
|
"download_completed": "Download completo",
|
||||||
|
|||||||
@@ -261,43 +261,6 @@
|
|||||||
"None": "Nenhuma",
|
"None": "Nenhuma",
|
||||||
"OnlyForced": "Somente Forçado"
|
"OnlyForced": "Somente Forçado"
|
||||||
},
|
},
|
||||||
"text_color": "Cor do texto",
|
|
||||||
"background_color": "Cor de fundo",
|
|
||||||
"outline_color": "Cor do contorno",
|
|
||||||
"outline_thickness": "Espessura do Contorno",
|
|
||||||
"background_opacity": "Opacidade de fundo",
|
|
||||||
"outline_opacity": "Opacidade do Contorno",
|
|
||||||
"bold_text": "Texto em negrito",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Preto",
|
|
||||||
"Gray": "Cinzento",
|
|
||||||
"Silver": "Prata",
|
|
||||||
"White": "Branco",
|
|
||||||
"Maroon": "Castanho",
|
|
||||||
"Red": "Vermelho",
|
|
||||||
"Fuchsia": "Fuchsia",
|
|
||||||
"Yellow": "Amarelo",
|
|
||||||
"Olive": "Verde-oliva",
|
|
||||||
"Green": "Verde",
|
|
||||||
"Teal": "Verde-azulado",
|
|
||||||
"Lime": "Verde-limão",
|
|
||||||
"Purple": "Roxo",
|
|
||||||
"Navy": "Azul-marinho",
|
|
||||||
"Blue": "Azul",
|
|
||||||
"Aqua": "Água"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "Nenhuma",
|
|
||||||
"Thin": "Magro",
|
|
||||||
"Normal": "Normal",
|
|
||||||
"Thick": "Grosso"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Cor da legenda",
|
|
||||||
"subtitle_background_color": "Cor de fundo",
|
|
||||||
"subtitle_font": "Fonte da legenda",
|
|
||||||
"ksplayer_title": "Configurações do KSPlayer",
|
|
||||||
"hardware_decode": "Decodificação por hardware",
|
|
||||||
"hardware_decode_description": "Use aceleração de hardware para decodificação de vídeo. Desative se você tiver problemas de reprodução.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +278,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC Subtitle Settings",
|
|
||||||
"hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.",
|
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"bold": "Bold Text",
|
|
||||||
"margin": "Bottom Margin"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Reprodutor de Vídeo",
|
|
||||||
"video_player": "Reprodutor de Vídeo",
|
|
||||||
"video_player_description": "Escolha qual player de vídeo usar no iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Outros",
|
"other_title": "Outros",
|
||||||
"video_orientation": "Orientação do Vídeo",
|
"video_orientation": "Orientação do Vídeo",
|
||||||
@@ -351,11 +295,6 @@
|
|||||||
"UNKNOWN": "Desconhecido"
|
"UNKNOWN": "Desconhecido"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Área segura nos controles",
|
"safe_area_in_controls": "Área segura nos controles",
|
||||||
"video_player": "Reprodutor de Vídeo",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Experimental + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Mostrar Links de Menu Personalizado",
|
"show_custom_menu_links": "Mostrar Links de Menu Personalizado",
|
||||||
"show_large_home_carousel": "Mostrar Carrossel Grande (beta)",
|
"show_large_home_carousel": "Mostrar Carrossel Grande (beta)",
|
||||||
"hide_libraries": "Ocultar bibliotecas",
|
"hide_libraries": "Ocultar bibliotecas",
|
||||||
@@ -367,9 +306,6 @@
|
|||||||
"max_auto_play_episode_count": "Contagem máxima de episódios de reprodução automática",
|
"max_auto_play_episode_count": "Contagem máxima de episódios de reprodução automática",
|
||||||
"disabled": "Desabilitado"
|
"disabled": "Desabilitado"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Downloads"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Música",
|
"title": "Música",
|
||||||
"playback_title": "Reproduzir",
|
"playback_title": "Reproduzir",
|
||||||
@@ -413,23 +349,18 @@
|
|||||||
"read_more_about_marlin": "Leia mais sobre Marlin.",
|
"read_more_about_marlin": "Leia mais sobre Marlin.",
|
||||||
"save_button": "Salvar",
|
"save_button": "Salvar",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Salvo",
|
"saved": "Salvo"
|
||||||
"refreshed": "Configurações atualizadas do servidor"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Atualizar as configurações do servidor"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Ativar Streamystats",
|
|
||||||
"disable_streamystats": "Desativar streamystats",
|
"disable_streamystats": "Desativar streamystats",
|
||||||
"enable_search": "Usar para Pesquisa",
|
"enable_search": "Usar para Pesquisa",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Digite a URL para seu servidor de StreamyStats. A URL deve incluir http ou https e, opcionalmente, a porta.",
|
"streamystats_search_hint": "Digite a URL para seu servidor de StreamyStats. A URL deve incluir http ou https e, opcionalmente, a porta.",
|
||||||
"read_more_about_streamystats": "Leia mais sobre Streamystats.",
|
"read_more_about_streamystats": "Leia mais sobre Streamystats.",
|
||||||
"save_button": "Salvar",
|
|
||||||
"save": "Salvar",
|
"save": "Salvar",
|
||||||
"features_title": "Funcionalidades",
|
"features_title": "Funcionalidades",
|
||||||
"home_sections_title": "Seções da Página Inicial",
|
|
||||||
"enable_movie_recommendations": "Recomendações de filmes",
|
"enable_movie_recommendations": "Recomendações de filmes",
|
||||||
"enable_series_recommendations": "Recomendações de Séries",
|
"enable_series_recommendations": "Recomendações de Séries",
|
||||||
"enable_promoted_watchlists": "Promoted Watchlists",
|
"enable_promoted_watchlists": "Promoted Watchlists",
|
||||||
@@ -445,8 +376,7 @@
|
|||||||
"refresh_from_server": "Atualizar Configurações do Servidor"
|
"refresh_from_server": "Atualizar Configurações do Servidor"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Ative nossa integração de Lista de Interesses",
|
"watchlist_enabler": "Ative nossa integração de Lista de Interesses"
|
||||||
"watchlist_button": "Ativar/desativar Lista de Interesses"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +387,6 @@
|
|||||||
"delete_all_downloaded_files": "Excluir todos os arquivos baixados",
|
"delete_all_downloaded_files": "Excluir todos os arquivos baixados",
|
||||||
"music_cache_title": "Cache de Música",
|
"music_cache_title": "Cache de Música",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Habilitar Cache de Música",
|
|
||||||
"clear_music_cache": "Limpar Cache de Música",
|
"clear_music_cache": "Limpar Cache de Música",
|
||||||
"music_cache_size": "{{size}} em cache",
|
"music_cache_size": "{{size}} em cache",
|
||||||
"music_cache_cleared": "Cache de música limpo",
|
"music_cache_cleared": "Cache de música limpo",
|
||||||
@@ -467,8 +396,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -490,15 +417,12 @@
|
|||||||
"system": "Sistema"
|
"system": "Sistema"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Erro ao excluir arquivos",
|
"error_deleting_files": "Erro ao excluir arquivos"
|
||||||
"background_downloads_enabled": "Downloads em segundo plano ativados",
|
|
||||||
"background_downloads_disabled": "Downloads em segundo plano desativados"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -508,6 +432,10 @@
|
|||||||
"4_hours": "4 hours",
|
"4_hours": "4 hours",
|
||||||
"24_hours": "24 hours"
|
"24_hours": "24 hours"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"title": "Dashboard",
|
||||||
|
"sessions_title": "Sessions"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sessions": {
|
"sessions": {
|
||||||
@@ -516,15 +444,12 @@
|
|||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"downloads_title": "Downloads",
|
"downloads_title": "Downloads",
|
||||||
"tvseries": "TV-Séries",
|
"series": "TV-Séries",
|
||||||
"movies": "Filmes",
|
"movies": "Filmes",
|
||||||
"queue": "Fila",
|
|
||||||
"other_media": "Outras mídias",
|
"other_media": "Outras mídias",
|
||||||
"queue_hint": "A fila e os downloads serão perdidos ao reiniciar o aplicativo",
|
|
||||||
"no_items_in_queue": "Nenhum item na fila",
|
|
||||||
"no_downloaded_items": "Nenhum item baixado",
|
"no_downloaded_items": "Nenhum item baixado",
|
||||||
"delete_all_movies_button": "Excluir todos os filmes",
|
"delete_all_movies_button": "Excluir todos os filmes",
|
||||||
"delete_all_tvseries_button": "Excluir todas as séries",
|
"delete_all_series_button": "Excluir todas as séries",
|
||||||
"delete_all_button": "Excluir todos os",
|
"delete_all_button": "Excluir todos os",
|
||||||
"delete_all_other_media_button": "Excluir outras mídias",
|
"delete_all_other_media_button": "Excluir outras mídias",
|
||||||
"active_download": "Download ativo",
|
"active_download": "Download ativo",
|
||||||
@@ -542,17 +467,12 @@
|
|||||||
"you_are_not_allowed_to_download_files": "Você não tem permissão para baixar arquivos.",
|
"you_are_not_allowed_to_download_files": "Você não tem permissão para baixar arquivos.",
|
||||||
"deleted_all_movies_successfully": "Todos os filmes excluídos com sucesso!",
|
"deleted_all_movies_successfully": "Todos os filmes excluídos com sucesso!",
|
||||||
"failed_to_delete_all_movies": "Falha ao excluir todos os filmes",
|
"failed_to_delete_all_movies": "Falha ao excluir todos os filmes",
|
||||||
"deleted_all_tvseries_successfully": "Todas as TV-Series excluídas com sucesso!",
|
"deleted_all_series_successfully": "Todas as TV-Series excluídas com sucesso!",
|
||||||
"failed_to_delete_all_tvseries": "Falha ao excluir todas as séries",
|
"failed_to_delete_all_series": "Falha ao excluir todas as séries",
|
||||||
"deleted_media_successfully": "Outras mídias excluídas com sucesso!",
|
"deleted_media_successfully": "Outras mídias excluídas com sucesso!",
|
||||||
"failed_to_delete_media": "Falha ao excluir outras mídias",
|
"failed_to_delete_media": "Falha ao excluir outras mídias",
|
||||||
"download_deleted": "Download Excluído",
|
|
||||||
"download_cancelled": "Download Cancelado",
|
"download_cancelled": "Download Cancelado",
|
||||||
"could_not_delete_download": "Não foi possível excluir o download",
|
"could_not_delete_download": "Não foi possível excluir o download",
|
||||||
"download_paused": "Download Pausado",
|
|
||||||
"could_not_pause_download": "Não foi possível Pausar o Download",
|
|
||||||
"download_resumed": "Download Retomado",
|
|
||||||
"could_not_resume_download": "Não foi possível retomar o download",
|
|
||||||
"download_completed": "Download concluído",
|
"download_completed": "Download concluído",
|
||||||
"download_failed": "Download Falhou",
|
"download_failed": "Download Falhou",
|
||||||
"download_failed_for_item": "Download Falhou para {{item}} - {{error}}",
|
"download_failed_for_item": "Download Falhou para {{item}} - {{error}}",
|
||||||
@@ -562,10 +482,7 @@
|
|||||||
"item_already_downloading": "{{item}} já está sendo baixado",
|
"item_already_downloading": "{{item}} já está sendo baixado",
|
||||||
"all_files_deleted": "Todos os Downloads Excluídos com Sucesso",
|
"all_files_deleted": "Todos os Downloads Excluídos com Sucesso",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} excluído",
|
"files_deleted_by_type": "{{count}} {{type}} excluído",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Todos os arquivos, pastas e trabalhos excluídos com sucesso",
|
|
||||||
"failed_to_clean_cache_directory": "Falha ao limpar o diretório de cache",
|
|
||||||
"could_not_get_download_url_for_item": "Não foi possível obter o URL de download para {{itemName}}",
|
"could_not_get_download_url_for_item": "Não foi possível obter o URL de download para {{itemName}}",
|
||||||
"go_to_downloads": "Ir para Downloads",
|
|
||||||
"file_deleted": "{{item}} deletado"
|
"file_deleted": "{{item}} deletado"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +500,17 @@
|
|||||||
"none": "Nenhum",
|
"none": "Nenhum",
|
||||||
"track": "Faixa",
|
"track": "Faixa",
|
||||||
"cancel": "Cancelar",
|
"cancel": "Cancelar",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Apagar",
|
"delete": "Apagar",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Remover",
|
"remove": "Remover",
|
||||||
"next": "Next",
|
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
"continue": "Continue",
|
"continue": "Continue",
|
||||||
"verifying": "Verifying...",
|
"verifying": "Verifying...",
|
||||||
"login": "Login",
|
"login": "Login",
|
||||||
"refresh": "Refresh"
|
"episodes": "Episodes",
|
||||||
|
"movies": "Movies",
|
||||||
|
"loading": "Loading…",
|
||||||
|
"seeAll": "See all"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Buscar...",
|
"search": "Buscar...",
|
||||||
@@ -691,10 +609,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Não foi possível criar um fluxo para o Chromecast",
|
"could_not_create_stream_for_chromecast": "Não foi possível criar um fluxo para o Chromecast",
|
||||||
"message_from_server": "Mensagem do Servidor: {{message}}",
|
"message_from_server": "Mensagem do Servidor: {{message}}",
|
||||||
"next_episode": "Próximo Episódio",
|
"next_episode": "Próximo Episódio",
|
||||||
"refresh_tracks": "Atualizar Faixas",
|
|
||||||
"audio_tracks": "Faixas de Áudio:",
|
|
||||||
"playback_state": "Estado de Reprodução:",
|
|
||||||
"index": "Índice",
|
|
||||||
"continue_watching": "Continuar assistindo",
|
"continue_watching": "Continuar assistindo",
|
||||||
"go_back": "Voltar atrás",
|
"go_back": "Voltar atrás",
|
||||||
"downloaded_file_title": "Você já fez o download deste arquivo",
|
"downloaded_file_title": "Você já fez o download deste arquivo",
|
||||||
@@ -723,7 +637,8 @@
|
|||||||
"stopPlayback": "Stop Playback",
|
"stopPlayback": "Stop Playback",
|
||||||
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
||||||
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
||||||
"downloaded": "Downloaded"
|
"downloaded": "Downloaded",
|
||||||
|
"missing_parameters": "Missing playback parameters"
|
||||||
},
|
},
|
||||||
"chapters": {
|
"chapters": {
|
||||||
"title": "Chapters",
|
"title": "Chapters",
|
||||||
@@ -761,7 +676,6 @@
|
|||||||
"show_more": "Mostrar mais",
|
"show_more": "Mostrar mais",
|
||||||
"show_less": "Mostrar menos",
|
"show_less": "Mostrar menos",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -784,7 +698,8 @@
|
|||||||
"resume_playback": "Resume Playback",
|
"resume_playback": "Resume Playback",
|
||||||
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
||||||
"play_from_start": "Play from Start",
|
"play_from_start": "Play from Start",
|
||||||
"continue_from": "Continue from {{time}}"
|
"continue_from": "Continue from {{time}}",
|
||||||
|
"no_data_available": "No data available"
|
||||||
},
|
},
|
||||||
"live_tv": {
|
"live_tv": {
|
||||||
"next": "Próximo",
|
"next": "Próximo",
|
||||||
@@ -888,13 +803,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "faixas"
|
"tracks": "faixas"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "Tudo"
|
|
||||||
},
|
|
||||||
"recently_added": "Adicionado recentemente",
|
"recently_added": "Adicionado recentemente",
|
||||||
"recently_played": "Reproduzido Recentemente",
|
"recently_played": "Reproduzido Recentemente",
|
||||||
"frequently_played": "Reproduzidos com frequência",
|
"frequently_played": "Reproduzidos com frequência",
|
||||||
"explore": "Explorar",
|
|
||||||
"top_tracks": "Músicas populares",
|
"top_tracks": "Músicas populares",
|
||||||
"play": "Reproduzir",
|
"play": "Reproduzir",
|
||||||
"shuffle": "Alteatório",
|
"shuffle": "Alteatório",
|
||||||
@@ -1028,7 +939,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -261,43 +261,6 @@
|
|||||||
"None": "Niciuna",
|
"None": "Niciuna",
|
||||||
"OnlyForced": "OnlyForced"
|
"OnlyForced": "OnlyForced"
|
||||||
},
|
},
|
||||||
"text_color": "Culoare text",
|
|
||||||
"background_color": "Culoare fundal",
|
|
||||||
"outline_color": "Culoare contur",
|
|
||||||
"outline_thickness": "Grosime contur",
|
|
||||||
"background_opacity": "Opacitatea fundalului",
|
|
||||||
"outline_opacity": "Opacitatea conturului",
|
|
||||||
"bold_text": "Bold Text",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Negru",
|
|
||||||
"Gray": "Gri",
|
|
||||||
"Silver": "Argint",
|
|
||||||
"White": "Alb",
|
|
||||||
"Maroon": "Maro",
|
|
||||||
"Red": "Roșu",
|
|
||||||
"Fuchsia": "Fuchsia",
|
|
||||||
"Yellow": "Galben",
|
|
||||||
"Olive": "Oliv",
|
|
||||||
"Green": "Verde",
|
|
||||||
"Teal": "Turcoaz",
|
|
||||||
"Lime": "Verde-Deschis",
|
|
||||||
"Purple": "Violet",
|
|
||||||
"Navy": "Marină",
|
|
||||||
"Blue": "Albastru",
|
|
||||||
"Aqua": "Aqua"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "Nimic",
|
|
||||||
"Thin": "Subțire",
|
|
||||||
"Normal": "Normală",
|
|
||||||
"Thick": "Grozav"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Subtitle Color",
|
|
||||||
"subtitle_background_color": "Background Color",
|
|
||||||
"subtitle_font": "Subtitle Font",
|
|
||||||
"ksplayer_title": "KSPlayer Settings",
|
|
||||||
"hardware_decode": "Hardware Decoding",
|
|
||||||
"hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +278,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC Subtitle Settings",
|
|
||||||
"hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.",
|
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"bold": "Bold Text",
|
|
||||||
"margin": "Bottom Margin"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Video Player",
|
|
||||||
"video_player": "Video Player",
|
|
||||||
"video_player_description": "Choose which video player to use on iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Altele",
|
"other_title": "Altele",
|
||||||
"video_orientation": "Orientarea video",
|
"video_orientation": "Orientarea video",
|
||||||
@@ -351,11 +295,6 @@
|
|||||||
"UNKNOWN": "Necunoscut"
|
"UNKNOWN": "Necunoscut"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Zona sigură pentru controale",
|
"safe_area_in_controls": "Zona sigură pentru controale",
|
||||||
"video_player": "Player video",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Experimental + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Afișează link-uri personalizate în meniu",
|
"show_custom_menu_links": "Afișează link-uri personalizate în meniu",
|
||||||
"show_large_home_carousel": "Arată Caruselul Media Mare (beta)",
|
"show_large_home_carousel": "Arată Caruselul Media Mare (beta)",
|
||||||
"hide_libraries": "Ascunde bibliotecile",
|
"hide_libraries": "Ascunde bibliotecile",
|
||||||
@@ -367,9 +306,6 @@
|
|||||||
"max_auto_play_episode_count": "Maxim episoade redare automată",
|
"max_auto_play_episode_count": "Maxim episoade redare automată",
|
||||||
"disabled": "Dezactivat"
|
"disabled": "Dezactivat"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Descărcări"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Music",
|
"title": "Music",
|
||||||
"playback_title": "Playback",
|
"playback_title": "Playback",
|
||||||
@@ -413,23 +349,18 @@
|
|||||||
"read_more_about_marlin": "Citește mai multe despre Marlin.",
|
"read_more_about_marlin": "Citește mai multe despre Marlin.",
|
||||||
"save_button": "Salvează",
|
"save_button": "Salvează",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Salvat",
|
"saved": "Salvat"
|
||||||
"refreshed": "Settings refreshed from server"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Refresh Settings from Server"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Enable Streamystats",
|
|
||||||
"disable_streamystats": "Disable Streamystats",
|
"disable_streamystats": "Disable Streamystats",
|
||||||
"enable_search": "Use for Search",
|
"enable_search": "Use for Search",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
||||||
"read_more_about_streamystats": "Read More About Streamystats.",
|
"read_more_about_streamystats": "Read More About Streamystats.",
|
||||||
"save_button": "Save",
|
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"features_title": "Features",
|
"features_title": "Features",
|
||||||
"home_sections_title": "Home Sections",
|
|
||||||
"enable_movie_recommendations": "Movie Recommendations",
|
"enable_movie_recommendations": "Movie Recommendations",
|
||||||
"enable_series_recommendations": "Series Recommendations",
|
"enable_series_recommendations": "Series Recommendations",
|
||||||
"enable_promoted_watchlists": "Promoted Watchlists",
|
"enable_promoted_watchlists": "Promoted Watchlists",
|
||||||
@@ -445,8 +376,7 @@
|
|||||||
"refresh_from_server": "Refresh Settings from Server"
|
"refresh_from_server": "Refresh Settings from Server"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Enable our Watchlist integration",
|
"watchlist_enabler": "Enable our Watchlist integration"
|
||||||
"watchlist_button": "Toggle Watchlist integration"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +387,6 @@
|
|||||||
"delete_all_downloaded_files": "Ștergeți toate fișierele descărcate",
|
"delete_all_downloaded_files": "Ștergeți toate fișierele descărcate",
|
||||||
"music_cache_title": "Music Cache",
|
"music_cache_title": "Music Cache",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Enable Music Cache",
|
|
||||||
"clear_music_cache": "Clear Music Cache",
|
"clear_music_cache": "Clear Music Cache",
|
||||||
"music_cache_size": "{{size}} cached",
|
"music_cache_size": "{{size}} cached",
|
||||||
"music_cache_cleared": "Music cache cleared",
|
"music_cache_cleared": "Music cache cleared",
|
||||||
@@ -467,8 +396,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -490,15 +417,12 @@
|
|||||||
"system": "Sistem"
|
"system": "Sistem"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Eroare la ștergerea fișierelor",
|
"error_deleting_files": "Eroare la ștergerea fișierelor"
|
||||||
"background_downloads_enabled": "Descărcări în fundal activate",
|
|
||||||
"background_downloads_disabled": "Descărcări în fundal dezactivate"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -508,6 +432,10 @@
|
|||||||
"4_hours": "4 hours",
|
"4_hours": "4 hours",
|
||||||
"24_hours": "24 hours"
|
"24_hours": "24 hours"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"title": "Dashboard",
|
||||||
|
"sessions_title": "Sessions"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sessions": {
|
"sessions": {
|
||||||
@@ -516,15 +444,12 @@
|
|||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"downloads_title": "Descărcări",
|
"downloads_title": "Descărcări",
|
||||||
"tvseries": "Seriale",
|
"series": "Seriale",
|
||||||
"movies": "Filme",
|
"movies": "Filme",
|
||||||
"queue": "Coadă",
|
|
||||||
"other_media": "Alte suporturi",
|
"other_media": "Alte suporturi",
|
||||||
"queue_hint": "Descărcările se vor pierde la repornirea aplicației",
|
|
||||||
"no_items_in_queue": "Niciun articol în coadă",
|
|
||||||
"no_downloaded_items": "Niciun element descărcat",
|
"no_downloaded_items": "Niciun element descărcat",
|
||||||
"delete_all_movies_button": "Șterge toate filmele",
|
"delete_all_movies_button": "Șterge toate filmele",
|
||||||
"delete_all_tvseries_button": "Șterge toate serialele",
|
"delete_all_series_button": "Șterge toate serialele",
|
||||||
"delete_all_button": "Șterge tot",
|
"delete_all_button": "Șterge tot",
|
||||||
"delete_all_other_media_button": "Șterge alte fișiere media",
|
"delete_all_other_media_button": "Șterge alte fișiere media",
|
||||||
"active_download": "Descărcare activă",
|
"active_download": "Descărcare activă",
|
||||||
@@ -542,17 +467,12 @@
|
|||||||
"you_are_not_allowed_to_download_files": "Nu aveți voie să descărcați fișiere.",
|
"you_are_not_allowed_to_download_files": "Nu aveți voie să descărcați fișiere.",
|
||||||
"deleted_all_movies_successfully": "Toate filmele au fost șterse cu succes!",
|
"deleted_all_movies_successfully": "Toate filmele au fost șterse cu succes!",
|
||||||
"failed_to_delete_all_movies": "Nu s-au putut șterge toate filmele",
|
"failed_to_delete_all_movies": "Nu s-au putut șterge toate filmele",
|
||||||
"deleted_all_tvseries_successfully": "Toate serialele au fost șterse cu succes!",
|
"deleted_all_series_successfully": "Toate serialele au fost șterse cu succes!",
|
||||||
"failed_to_delete_all_tvseries": "Nu s-au putut șterge toate serialele",
|
"failed_to_delete_all_series": "Nu s-au putut șterge toate serialele",
|
||||||
"deleted_media_successfully": "Alte fișiere șterse cu succes!",
|
"deleted_media_successfully": "Alte fișiere șterse cu succes!",
|
||||||
"failed_to_delete_media": "Ștergerea altor fișiere media a eșuat",
|
"failed_to_delete_media": "Ștergerea altor fișiere media a eșuat",
|
||||||
"download_deleted": "Descărcare ştearsă",
|
|
||||||
"download_cancelled": "Descărcare anulată",
|
"download_cancelled": "Descărcare anulată",
|
||||||
"could_not_delete_download": "Nu s-a putut șterge descărcarea",
|
"could_not_delete_download": "Nu s-a putut șterge descărcarea",
|
||||||
"download_paused": "Descărcare întreruptă",
|
|
||||||
"could_not_pause_download": "Nu s-a putut întrerupe descărcarea",
|
|
||||||
"download_resumed": "Descărcare din nou",
|
|
||||||
"could_not_resume_download": "Nu s-a putut relua descărcarea",
|
|
||||||
"download_completed": "Descărcare completă",
|
"download_completed": "Descărcare completă",
|
||||||
"download_failed": "Descărcare eșuată",
|
"download_failed": "Descărcare eșuată",
|
||||||
"download_failed_for_item": "Descărcarea a eșuat {{item}} - {{error}}",
|
"download_failed_for_item": "Descărcarea a eșuat {{item}} - {{error}}",
|
||||||
@@ -562,10 +482,7 @@
|
|||||||
"item_already_downloading": "{{item}} se descarcă deja",
|
"item_already_downloading": "{{item}} se descarcă deja",
|
||||||
"all_files_deleted": "Toate descărcările au fost șterse cu succes",
|
"all_files_deleted": "Toate descărcările au fost șterse cu succes",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} au fost șterse",
|
"files_deleted_by_type": "{{count}} {{type}} au fost șterse",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Toate fișierele, folderele și lucrările au fost șterse cu succes",
|
|
||||||
"failed_to_clean_cache_directory": "Curățarea directorului cache a eșuat",
|
|
||||||
"could_not_get_download_url_for_item": "Nu s-a putut obține URL-ul de descărcare pentru {{itemName}}",
|
"could_not_get_download_url_for_item": "Nu s-a putut obține URL-ul de descărcare pentru {{itemName}}",
|
||||||
"go_to_downloads": "Accesați descărcările",
|
|
||||||
"file_deleted": "{{item}} șters"
|
"file_deleted": "{{item}} șters"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +500,17 @@
|
|||||||
"none": "Nimic",
|
"none": "Nimic",
|
||||||
"track": "Limbă audio",
|
"track": "Limbă audio",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
"next": "Next",
|
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
"continue": "Continue",
|
"continue": "Continue",
|
||||||
"verifying": "Verifying...",
|
"verifying": "Verifying...",
|
||||||
"login": "Login",
|
"login": "Login",
|
||||||
"refresh": "Refresh"
|
"episodes": "Episodes",
|
||||||
|
"movies": "Movies",
|
||||||
|
"loading": "Loading…",
|
||||||
|
"seeAll": "See all"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Caută...",
|
"search": "Caută...",
|
||||||
@@ -691,10 +609,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Nu s-a putut crea un flux pentru Chromecast",
|
"could_not_create_stream_for_chromecast": "Nu s-a putut crea un flux pentru Chromecast",
|
||||||
"message_from_server": "Mesaj de la server: {{message}}",
|
"message_from_server": "Mesaj de la server: {{message}}",
|
||||||
"next_episode": "Episodul următor",
|
"next_episode": "Episodul următor",
|
||||||
"refresh_tracks": "Reîmprospătare piese",
|
|
||||||
"audio_tracks": "Audio:",
|
|
||||||
"playback_state": "Stare de redare:",
|
|
||||||
"index": "Indice:",
|
|
||||||
"continue_watching": "Continuă să vizionezi",
|
"continue_watching": "Continuă să vizionezi",
|
||||||
"go_back": "Înapoi",
|
"go_back": "Înapoi",
|
||||||
"downloaded_file_title": "Aveţi acest fişier descărcat",
|
"downloaded_file_title": "Aveţi acest fişier descărcat",
|
||||||
@@ -723,7 +637,8 @@
|
|||||||
"stopPlayback": "Stop Playback",
|
"stopPlayback": "Stop Playback",
|
||||||
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
||||||
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
||||||
"downloaded": "Downloaded"
|
"downloaded": "Downloaded",
|
||||||
|
"missing_parameters": "Missing playback parameters"
|
||||||
},
|
},
|
||||||
"chapters": {
|
"chapters": {
|
||||||
"title": "Chapters",
|
"title": "Chapters",
|
||||||
@@ -761,7 +676,6 @@
|
|||||||
"show_more": "Arată mai mult",
|
"show_more": "Arată mai mult",
|
||||||
"show_less": "Arată mai puțin",
|
"show_less": "Arată mai puțin",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -784,7 +698,8 @@
|
|||||||
"resume_playback": "Resume Playback",
|
"resume_playback": "Resume Playback",
|
||||||
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
||||||
"play_from_start": "Play from Start",
|
"play_from_start": "Play from Start",
|
||||||
"continue_from": "Continue from {{time}}"
|
"continue_from": "Continue from {{time}}",
|
||||||
|
"no_data_available": "No data available"
|
||||||
},
|
},
|
||||||
"live_tv": {
|
"live_tv": {
|
||||||
"next": "Următorul",
|
"next": "Următorul",
|
||||||
@@ -888,13 +803,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "tracks"
|
"tracks": "tracks"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "All"
|
|
||||||
},
|
|
||||||
"recently_added": "Recently Added",
|
"recently_added": "Recently Added",
|
||||||
"recently_played": "Recently Played",
|
"recently_played": "Recently Played",
|
||||||
"frequently_played": "Frequently Played",
|
"frequently_played": "Frequently Played",
|
||||||
"explore": "Explore",
|
|
||||||
"top_tracks": "Top Tracks",
|
"top_tracks": "Top Tracks",
|
||||||
"play": "Play",
|
"play": "Play",
|
||||||
"shuffle": "Shuffle",
|
"shuffle": "Shuffle",
|
||||||
@@ -1028,7 +939,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -261,43 +261,6 @@
|
|||||||
"None": "Отсутствует",
|
"None": "Отсутствует",
|
||||||
"OnlyForced": "Только принудительные"
|
"OnlyForced": "Только принудительные"
|
||||||
},
|
},
|
||||||
"text_color": "Цвет текста",
|
|
||||||
"background_color": "Цвет фона",
|
|
||||||
"outline_color": "Цвет контура",
|
|
||||||
"outline_thickness": "Толщина контура",
|
|
||||||
"background_opacity": "Прозрачность фона",
|
|
||||||
"outline_opacity": "Прозрачность контура",
|
|
||||||
"bold_text": "Жирный",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Черный",
|
|
||||||
"Gray": "Серый",
|
|
||||||
"Silver": "Серебристый",
|
|
||||||
"White": "Белый",
|
|
||||||
"Maroon": "Бордовый",
|
|
||||||
"Red": "Красный",
|
|
||||||
"Fuchsia": "Пурпурный",
|
|
||||||
"Yellow": "Жёлтый",
|
|
||||||
"Olive": "Оливковый",
|
|
||||||
"Green": "Зелёный",
|
|
||||||
"Teal": "Бирюзовый",
|
|
||||||
"Lime": "Лаймовый",
|
|
||||||
"Purple": "Фиолетовый",
|
|
||||||
"Navy": "Тёмно-синий",
|
|
||||||
"Blue": "Синий",
|
|
||||||
"Aqua": "Голубой"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "Отсутствует",
|
|
||||||
"Thin": "Тонкий",
|
|
||||||
"Normal": "Обычный",
|
|
||||||
"Thick": "Толстый"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Цвет субтитров",
|
|
||||||
"subtitle_background_color": "Цвет фона",
|
|
||||||
"subtitle_font": "Шрифт субтитров",
|
|
||||||
"ksplayer_title": "Настройки KSPlayer",
|
|
||||||
"hardware_decode": "Аппаратное декодирование",
|
|
||||||
"hardware_decode_description": "Использовать аппаратное ускорение для декодирования видео. Выключите, если наблюдаете проблемы с воспроизведением.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +278,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "Настройки субтитров в VLC",
|
|
||||||
"hint": "Настройте внешний вид субтитров в VLC плеере. Изменения применятся при следующем воспроизведении.",
|
|
||||||
"text_color": "Цвет текста",
|
|
||||||
"background_color": "Цвет фона",
|
|
||||||
"background_opacity": "Прозрачность фона",
|
|
||||||
"outline_color": "Цвет контура",
|
|
||||||
"outline_opacity": "Прозрачность контура",
|
|
||||||
"outline_thickness": "Толщина контура",
|
|
||||||
"bold": "Жирный",
|
|
||||||
"margin": "Отступ снизу"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Видео плеер",
|
|
||||||
"video_player": "Видео плеер",
|
|
||||||
"video_player_description": "Выберите видео плеер в iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Другое",
|
"other_title": "Другое",
|
||||||
"video_orientation": "Ориентация видео",
|
"video_orientation": "Ориентация видео",
|
||||||
@@ -351,11 +295,6 @@
|
|||||||
"UNKNOWN": "Неизвестное"
|
"UNKNOWN": "Неизвестное"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Безопасная зона в элементах управления",
|
"safe_area_in_controls": "Безопасная зона в элементах управления",
|
||||||
"video_player": "Видео плеер",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Экспериментальный + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Показать ссылки пользовательского меню",
|
"show_custom_menu_links": "Показать ссылки пользовательского меню",
|
||||||
"show_large_home_carousel": "Показывать большую карусель (beta)",
|
"show_large_home_carousel": "Показывать большую карусель (beta)",
|
||||||
"hide_libraries": "Скрыть библиотеки",
|
"hide_libraries": "Скрыть библиотеки",
|
||||||
@@ -367,9 +306,6 @@
|
|||||||
"max_auto_play_episode_count": "Максимальное количество авто воспроизводимых эпизодов",
|
"max_auto_play_episode_count": "Максимальное количество авто воспроизводимых эпизодов",
|
||||||
"disabled": "Отключено"
|
"disabled": "Отключено"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Загрузки"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Музыка",
|
"title": "Музыка",
|
||||||
"playback_title": "Воспроизведение",
|
"playback_title": "Воспроизведение",
|
||||||
@@ -413,23 +349,18 @@
|
|||||||
"read_more_about_marlin": "Узнать больше о Marlin.",
|
"read_more_about_marlin": "Узнать больше о Marlin.",
|
||||||
"save_button": "Сохранить",
|
"save_button": "Сохранить",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Сохранено",
|
"saved": "Сохранено"
|
||||||
"refreshed": "Настройки обновлены с сервера"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Обновить настройки с сервера"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Включить Streamystats",
|
|
||||||
"disable_streamystats": "Выключить Streamystats",
|
"disable_streamystats": "Выключить Streamystats",
|
||||||
"enable_search": "Использовать в поиске",
|
"enable_search": "Использовать в поиске",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Введите URL вашего сервера Streamystats. URL должен включать http/https и порт при необходимости.",
|
"streamystats_search_hint": "Введите URL вашего сервера Streamystats. URL должен включать http/https и порт при необходимости.",
|
||||||
"read_more_about_streamystats": "Узнать больше про Streamystats.",
|
"read_more_about_streamystats": "Узнать больше про Streamystats.",
|
||||||
"save_button": "Сохранить",
|
|
||||||
"save": "Сохранить",
|
"save": "Сохранить",
|
||||||
"features_title": "Функции",
|
"features_title": "Функции",
|
||||||
"home_sections_title": "Показывать на главной",
|
|
||||||
"enable_movie_recommendations": "Рекомендации фильмов",
|
"enable_movie_recommendations": "Рекомендации фильмов",
|
||||||
"enable_series_recommendations": "Рекомендации сериалов",
|
"enable_series_recommendations": "Рекомендации сериалов",
|
||||||
"enable_promoted_watchlists": "Продвигаемые списки просмотра",
|
"enable_promoted_watchlists": "Продвигаемые списки просмотра",
|
||||||
@@ -445,8 +376,7 @@
|
|||||||
"refresh_from_server": "Обновить настройки с сервера"
|
"refresh_from_server": "Обновить настройки с сервера"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Включить интеграцию со списками просмотра",
|
"watchlist_enabler": "Включить интеграцию со списками просмотра"
|
||||||
"watchlist_button": "Изменить интеграцию со списками просмотра"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +387,6 @@
|
|||||||
"delete_all_downloaded_files": "Удалить все загруженные файлы",
|
"delete_all_downloaded_files": "Удалить все загруженные файлы",
|
||||||
"music_cache_title": "Кеш музыки",
|
"music_cache_title": "Кеш музыки",
|
||||||
"music_cache_description": "Автоматически кешировать песни по мере прослушивания для плавного воспроизведения и поддержки отсутствия интернета",
|
"music_cache_description": "Автоматически кешировать песни по мере прослушивания для плавного воспроизведения и поддержки отсутствия интернета",
|
||||||
"enable_music_cache": "Кешировать музыку",
|
|
||||||
"clear_music_cache": "Очистить кеш музыки",
|
"clear_music_cache": "Очистить кеш музыки",
|
||||||
"music_cache_size": "Кешировано: {{size}}",
|
"music_cache_size": "Кешировано: {{size}}",
|
||||||
"music_cache_cleared": "Кеш музыки очищен",
|
"music_cache_cleared": "Кеш музыки очищен",
|
||||||
@@ -467,8 +396,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -490,15 +417,12 @@
|
|||||||
"system": "Системный"
|
"system": "Системный"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Ошибка при удалении файлов",
|
"error_deleting_files": "Ошибка при удалении файлов"
|
||||||
"background_downloads_enabled": "Фоновая загрузка включена",
|
|
||||||
"background_downloads_disabled": "Фоновая загрузка отключена"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -508,6 +432,10 @@
|
|||||||
"4_hours": "4 hours",
|
"4_hours": "4 hours",
|
||||||
"24_hours": "24 hours"
|
"24_hours": "24 hours"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"title": "Dashboard",
|
||||||
|
"sessions_title": "Sessions"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sessions": {
|
"sessions": {
|
||||||
@@ -516,15 +444,12 @@
|
|||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"downloads_title": "Загрузки",
|
"downloads_title": "Загрузки",
|
||||||
"tvseries": "Сериалы",
|
"series": "Сериалы",
|
||||||
"movies": "Фильмы",
|
"movies": "Фильмы",
|
||||||
"queue": "Очередь",
|
|
||||||
"other_media": "Прочие файлы",
|
"other_media": "Прочие файлы",
|
||||||
"queue_hint": "Очередь очистится после перезапуска",
|
|
||||||
"no_items_in_queue": "Нет элементов в очереди",
|
|
||||||
"no_downloaded_items": "Нет загруженных файлов",
|
"no_downloaded_items": "Нет загруженных файлов",
|
||||||
"delete_all_movies_button": "Удалить все фильмы",
|
"delete_all_movies_button": "Удалить все фильмы",
|
||||||
"delete_all_tvseries_button": "Удалить все сериалы",
|
"delete_all_series_button": "Удалить все сериалы",
|
||||||
"delete_all_button": "Удалить все",
|
"delete_all_button": "Удалить все",
|
||||||
"delete_all_other_media_button": "Удалить прочие файлы",
|
"delete_all_other_media_button": "Удалить прочие файлы",
|
||||||
"active_download": "Загружается",
|
"active_download": "Загружается",
|
||||||
@@ -542,17 +467,12 @@
|
|||||||
"you_are_not_allowed_to_download_files": "Нет разрешения на скачивание файлов.",
|
"you_are_not_allowed_to_download_files": "Нет разрешения на скачивание файлов.",
|
||||||
"deleted_all_movies_successfully": "Все фильмы были успешно удалены!",
|
"deleted_all_movies_successfully": "Все фильмы были успешно удалены!",
|
||||||
"failed_to_delete_all_movies": "Возникла ошибка при удалении всех фильмов",
|
"failed_to_delete_all_movies": "Возникла ошибка при удалении всех фильмов",
|
||||||
"deleted_all_tvseries_successfully": "Все сериалы были успешно удалены!",
|
"deleted_all_series_successfully": "Все сериалы были успешно удалены!",
|
||||||
"failed_to_delete_all_tvseries": "Возникла ошибка при удалении всех сериалов",
|
"failed_to_delete_all_series": "Возникла ошибка при удалении всех сериалов",
|
||||||
"deleted_media_successfully": "Остальные медиафайлы успешно удалены!",
|
"deleted_media_successfully": "Остальные медиафайлы успешно удалены!",
|
||||||
"failed_to_delete_media": "Не удалось удалить остальные медиафайлы",
|
"failed_to_delete_media": "Не удалось удалить остальные медиафайлы",
|
||||||
"download_deleted": "Загруженный контент удалён",
|
|
||||||
"download_cancelled": "Загрузка отменена",
|
"download_cancelled": "Загрузка отменена",
|
||||||
"could_not_delete_download": "Не удалось удалить загрузку",
|
"could_not_delete_download": "Не удалось удалить загрузку",
|
||||||
"download_paused": "На паузе",
|
|
||||||
"could_not_pause_download": "Не удалось приостановить загрузку",
|
|
||||||
"download_resumed": "Продолжено",
|
|
||||||
"could_not_resume_download": "Не удалось возобновить загрузку",
|
|
||||||
"download_completed": "Завершено",
|
"download_completed": "Завершено",
|
||||||
"download_failed": "Не удалось загрузить",
|
"download_failed": "Не удалось загрузить",
|
||||||
"download_failed_for_item": "Загрузка {{item}} провалилась с ошибкой: {{error}}",
|
"download_failed_for_item": "Загрузка {{item}} провалилась с ошибкой: {{error}}",
|
||||||
@@ -562,10 +482,7 @@
|
|||||||
"item_already_downloading": "{{item}} уже загружается",
|
"item_already_downloading": "{{item}} уже загружается",
|
||||||
"all_files_deleted": "Все загрузки удалены",
|
"all_files_deleted": "Все загрузки удалены",
|
||||||
"files_deleted_by_type": "Удалено: {{count}} {{type}}",
|
"files_deleted_by_type": "Удалено: {{count}} {{type}}",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Все файлы, папки, и задачи были успешно удалены",
|
|
||||||
"failed_to_clean_cache_directory": "Не удалось очистить директорию кэша",
|
|
||||||
"could_not_get_download_url_for_item": "Не удалось получить URL для загрузки {{itemName}}",
|
"could_not_get_download_url_for_item": "Не удалось получить URL для загрузки {{itemName}}",
|
||||||
"go_to_downloads": "В загрузки",
|
|
||||||
"file_deleted": "Удалено: {{item}}"
|
"file_deleted": "Удалено: {{item}}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +500,17 @@
|
|||||||
"none": "Отсутствует",
|
"none": "Отсутствует",
|
||||||
"track": "Трек",
|
"track": "Трек",
|
||||||
"cancel": "Отмена",
|
"cancel": "Отмена",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Удалить",
|
"delete": "Удалить",
|
||||||
"ok": "ОК",
|
"ok": "ОК",
|
||||||
"remove": "Удалить",
|
"remove": "Удалить",
|
||||||
"next": "Вперед",
|
|
||||||
"back": "Назад",
|
"back": "Назад",
|
||||||
"continue": "Продолжить",
|
"continue": "Продолжить",
|
||||||
"verifying": "Проверка...",
|
"verifying": "Проверка...",
|
||||||
"login": "Login",
|
"login": "Login",
|
||||||
"refresh": "Refresh"
|
"episodes": "Episodes",
|
||||||
|
"movies": "Movies",
|
||||||
|
"loading": "Loading…",
|
||||||
|
"seeAll": "See all"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Поиск...",
|
"search": "Поиск...",
|
||||||
@@ -691,10 +609,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Не удалось создать поток для Chromecast",
|
"could_not_create_stream_for_chromecast": "Не удалось создать поток для Chromecast",
|
||||||
"message_from_server": "Сообщение от сервера: {{message}}",
|
"message_from_server": "Сообщение от сервера: {{message}}",
|
||||||
"next_episode": "Следующая серия",
|
"next_episode": "Следующая серия",
|
||||||
"refresh_tracks": "Обновить дорожки",
|
|
||||||
"audio_tracks": "Аудио дорожки:",
|
|
||||||
"playback_state": "Состояние воспроизведения:",
|
|
||||||
"index": "Индекс:",
|
|
||||||
"continue_watching": "Продолжить просмотр",
|
"continue_watching": "Продолжить просмотр",
|
||||||
"go_back": "Назад",
|
"go_back": "Назад",
|
||||||
"downloaded_file_title": "Этот файл уже скачан",
|
"downloaded_file_title": "Этот файл уже скачан",
|
||||||
@@ -723,7 +637,8 @@
|
|||||||
"stopPlayback": "Stop Playback",
|
"stopPlayback": "Stop Playback",
|
||||||
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
||||||
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
||||||
"downloaded": "Downloaded"
|
"downloaded": "Downloaded",
|
||||||
|
"missing_parameters": "Missing playback parameters"
|
||||||
},
|
},
|
||||||
"chapters": {
|
"chapters": {
|
||||||
"title": "Chapters",
|
"title": "Chapters",
|
||||||
@@ -761,7 +676,6 @@
|
|||||||
"show_more": "Показать больше",
|
"show_more": "Показать больше",
|
||||||
"show_less": "Показать меньше",
|
"show_less": "Показать меньше",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -784,7 +698,8 @@
|
|||||||
"resume_playback": "Resume Playback",
|
"resume_playback": "Resume Playback",
|
||||||
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
||||||
"play_from_start": "Play from Start",
|
"play_from_start": "Play from Start",
|
||||||
"continue_from": "Continue from {{time}}"
|
"continue_from": "Continue from {{time}}",
|
||||||
|
"no_data_available": "No data available"
|
||||||
},
|
},
|
||||||
"live_tv": {
|
"live_tv": {
|
||||||
"next": "Далее",
|
"next": "Далее",
|
||||||
@@ -888,13 +803,9 @@
|
|||||||
"playlists": "Плейлисты",
|
"playlists": "Плейлисты",
|
||||||
"tracks": "треки"
|
"tracks": "треки"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "Все"
|
|
||||||
},
|
|
||||||
"recently_added": "Недавно добавлено",
|
"recently_added": "Недавно добавлено",
|
||||||
"recently_played": "Недавно воспроизведено",
|
"recently_played": "Недавно воспроизведено",
|
||||||
"frequently_played": "Часто играет",
|
"frequently_played": "Часто играет",
|
||||||
"explore": "Найти новое",
|
|
||||||
"top_tracks": "Топ",
|
"top_tracks": "Топ",
|
||||||
"play": "Воспроизвести",
|
"play": "Воспроизвести",
|
||||||
"shuffle": "Перемешать",
|
"shuffle": "Перемешать",
|
||||||
@@ -1028,7 +939,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -229,14 +229,14 @@
|
|||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"downloads_title": "Shkarkimet",
|
"downloads_title": "Shkarkimet",
|
||||||
"tvseries": "Seriale TV",
|
"series": "Seriale TV",
|
||||||
"movies": "Filma",
|
"movies": "Filma",
|
||||||
"queue": "Rradhë",
|
"queue": "Rradhë",
|
||||||
"queue_hint": "Rradhat dhe shkarkimet do të humbasin pas genstartit të aplikacionit",
|
"queue_hint": "Rradhat dhe shkarkimet do të humbasin pas genstartit të aplikacionit",
|
||||||
"no_items_in_queue": "Nuk ka elemente në rradhë",
|
"no_items_in_queue": "Nuk ka elemente në rradhë",
|
||||||
"no_downloaded_items": "Nuk ka shkarkime",
|
"no_downloaded_items": "Nuk ka shkarkime",
|
||||||
"delete_all_movies_button": "Fshijë të gjithë filmat",
|
"delete_all_movies_button": "Fshijë të gjithë filmat",
|
||||||
"delete_all_tvseries_button": "Fshijë të gjitha serialet TV",
|
"delete_all_series_button": "Fshijë të gjitha serialet TV",
|
||||||
"delete_all_button": "Fshijë të gjitha",
|
"delete_all_button": "Fshijë të gjitha",
|
||||||
"active_download": "Shkarkim aktiv",
|
"active_download": "Shkarkim aktiv",
|
||||||
"no_active_downloads": "Nuk ka shkarkime aktive",
|
"no_active_downloads": "Nuk ka shkarkime aktive",
|
||||||
@@ -253,8 +253,8 @@
|
|||||||
"you_are_not_allowed_to_download_files": "Nuk keni të drejtë të shkarkoni skedarë.",
|
"you_are_not_allowed_to_download_files": "Nuk keni të drejtë të shkarkoni skedarë.",
|
||||||
"deleted_all_movies_successfully": "Të gjithë filmat u fshinë me sukses!",
|
"deleted_all_movies_successfully": "Të gjithë filmat u fshinë me sukses!",
|
||||||
"failed_to_delete_all_movies": "Dështojë fshirja e të gjithë filmave",
|
"failed_to_delete_all_movies": "Dështojë fshirja e të gjithë filmave",
|
||||||
"deleted_all_tvseries_successfully": "Të gjitha serialet TV u fshinë me sukses!",
|
"deleted_all_series_successfully": "Të gjitha serialet TV u fshinë me sukses!",
|
||||||
"failed_to_delete_all_tvseries": "Dështojë fshirja e të gjitha serialeve TV",
|
"failed_to_delete_all_series": "Dështojë fshirja e të gjitha serialeve TV",
|
||||||
"download_cancelled": "Shkarkimi u anulua",
|
"download_cancelled": "Shkarkimi u anulua",
|
||||||
"could_not_cancel_download": "Nuk mundet të anulohet shkarkimi",
|
"could_not_cancel_download": "Nuk mundet të anulohet shkarkimi",
|
||||||
"download_completed": "Shkarkimi u përfundua",
|
"download_completed": "Shkarkimi u përfundua",
|
||||||
|
|||||||
@@ -261,43 +261,6 @@
|
|||||||
"None": "Inga",
|
"None": "Inga",
|
||||||
"OnlyForced": "Bara Tvingande"
|
"OnlyForced": "Bara Tvingande"
|
||||||
},
|
},
|
||||||
"text_color": "Textfärg",
|
|
||||||
"background_color": "Bakgrundsfärg",
|
|
||||||
"outline_color": "Konturfärg",
|
|
||||||
"outline_thickness": "Konturtjocklek",
|
|
||||||
"background_opacity": "Bakgrundsgenomskinlighet",
|
|
||||||
"outline_opacity": "Kontursgenomskinlighet",
|
|
||||||
"bold_text": "FetStil",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Svart",
|
|
||||||
"Gray": "Grå",
|
|
||||||
"Silver": "Silver",
|
|
||||||
"White": "Vit",
|
|
||||||
"Maroon": "Rödbrun",
|
|
||||||
"Red": "Röd",
|
|
||||||
"Fuchsia": "Purpur",
|
|
||||||
"Yellow": "Gul",
|
|
||||||
"Olive": "Olivgrön",
|
|
||||||
"Green": "Grön",
|
|
||||||
"Teal": "Turkos",
|
|
||||||
"Lime": "Limegrön",
|
|
||||||
"Purple": "Lila",
|
|
||||||
"Navy": "Marinblå",
|
|
||||||
"Blue": "Blå",
|
|
||||||
"Aqua": "Aqua"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "Inget",
|
|
||||||
"Thin": "Tunn",
|
|
||||||
"Normal": "Normal",
|
|
||||||
"Thick": "Tjock"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Undertextfärg",
|
|
||||||
"subtitle_background_color": "Bakgrundsfärg",
|
|
||||||
"subtitle_font": "Typsnitt för undertexter",
|
|
||||||
"ksplayer_title": "KSPlayer-inställningar",
|
|
||||||
"hardware_decode": "Hårdvaruavkodning",
|
|
||||||
"hardware_decode_description": "Använd hårdvaruacceleration för videoavkodning. Inaktivera om du upplever uppspelningsproblem.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Ange din OpenSubtitles API-nyckel för att aktivera klientbaserad undertextsökning som reserv när din Jellyfin-server inte har en undertextleverantör konfigurerad.",
|
"opensubtitles_hint": "Ange din OpenSubtitles API-nyckel för att aktivera klientbaserad undertextsökning som reserv när din Jellyfin-server inte har en undertextleverantör konfigurerad.",
|
||||||
"opensubtitles_api_key": "API-nyckel",
|
"opensubtitles_api_key": "API-nyckel",
|
||||||
@@ -315,25 +278,6 @@
|
|||||||
"bottom": "Botten"
|
"bottom": "Botten"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC undertextsinställningar",
|
|
||||||
"hint": "Anpassa undertextens utseende för VLC-spelare. Förändringar träder i kraft vid nästa uppspelning.",
|
|
||||||
"text_color": "Textfärg",
|
|
||||||
"background_color": "Bakgrundsfärg",
|
|
||||||
"background_opacity": "Bakgrundsgenomskinlighet",
|
|
||||||
"outline_color": "Konturfärg",
|
|
||||||
"outline_opacity": "Kontursgenomskinlighet",
|
|
||||||
"outline_thickness": "Konturtjocklek",
|
|
||||||
"bold": "FetStil",
|
|
||||||
"margin": "Nedre marginal"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Videospelare",
|
|
||||||
"video_player": "Videospelare",
|
|
||||||
"video_player_description": "Välj vilken videospelare som ska användas på iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Övrigt",
|
"other_title": "Övrigt",
|
||||||
"video_orientation": "Videoriktning",
|
"video_orientation": "Videoriktning",
|
||||||
@@ -351,11 +295,6 @@
|
|||||||
"UNKNOWN": "Okänt"
|
"UNKNOWN": "Okänt"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Säkert område i kontrollerna",
|
"safe_area_in_controls": "Säkert område i kontrollerna",
|
||||||
"video_player": "Videospelare",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Experimentell + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Visa anpassade menylänkar",
|
"show_custom_menu_links": "Visa anpassade menylänkar",
|
||||||
"show_large_home_carousel": "Visa toppbanner (beta)",
|
"show_large_home_carousel": "Visa toppbanner (beta)",
|
||||||
"hide_libraries": "Dölj bibliotek",
|
"hide_libraries": "Dölj bibliotek",
|
||||||
@@ -367,9 +306,6 @@
|
|||||||
"max_auto_play_episode_count": "Antal Avsnitt för Automatisk Uppspelning",
|
"max_auto_play_episode_count": "Antal Avsnitt för Automatisk Uppspelning",
|
||||||
"disabled": "Inaktiverad"
|
"disabled": "Inaktiverad"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Nedladdningar"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Musik",
|
"title": "Musik",
|
||||||
"playback_title": "Uppspelning",
|
"playback_title": "Uppspelning",
|
||||||
@@ -413,23 +349,18 @@
|
|||||||
"read_more_about_marlin": "Läs mer om Marlin.",
|
"read_more_about_marlin": "Läs mer om Marlin.",
|
||||||
"save_button": "Spara",
|
"save_button": "Spara",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Sparade",
|
"saved": "Sparade"
|
||||||
"refreshed": "Inställningarna uppdateras från servern"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Uppdatera inställningar från server"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Aktivera Streamystats",
|
|
||||||
"disable_streamystats": "Inaktivera Streamystats",
|
"disable_streamystats": "Inaktivera Streamystats",
|
||||||
"enable_search": "Använd för sökning",
|
"enable_search": "Använd för sökning",
|
||||||
"url": "Webbadress",
|
"url": "Webbadress",
|
||||||
"server_url_placeholder": "http(s)://streamystats.exempel.se",
|
"server_url_placeholder": "http(s)://streamystats.exempel.se",
|
||||||
"streamystats_search_hint": "Ange URL för Marlin-servern. URL bör innehålla http eller https och vid behov port.",
|
"streamystats_search_hint": "Ange URL för Marlin-servern. URL bör innehålla http eller https och vid behov port.",
|
||||||
"read_more_about_streamystats": "Läs mer om Streamystats.",
|
"read_more_about_streamystats": "Läs mer om Streamystats.",
|
||||||
"save_button": "Spara",
|
|
||||||
"save": "Spara",
|
"save": "Spara",
|
||||||
"features_title": "Funktioner",
|
"features_title": "Funktioner",
|
||||||
"home_sections_title": "Hemsektioner",
|
|
||||||
"enable_movie_recommendations": "Filmrekommendationer",
|
"enable_movie_recommendations": "Filmrekommendationer",
|
||||||
"enable_series_recommendations": "serierekommendationer",
|
"enable_series_recommendations": "serierekommendationer",
|
||||||
"enable_promoted_watchlists": "rekommenderade listor att titta på",
|
"enable_promoted_watchlists": "rekommenderade listor att titta på",
|
||||||
@@ -445,8 +376,7 @@
|
|||||||
"refresh_from_server": "Uppdatera inställningar från server"
|
"refresh_from_server": "Uppdatera inställningar från server"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Aktivera vår bevakningslista integration",
|
"watchlist_enabler": "Aktivera vår bevakningslista integration"
|
||||||
"watchlist_button": "sätt på/av bevakningslisteintegrationen"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +387,6 @@
|
|||||||
"delete_all_downloaded_files": "Ta bort alla nerladdade filer",
|
"delete_all_downloaded_files": "Ta bort alla nerladdade filer",
|
||||||
"music_cache_title": "Musikcache",
|
"music_cache_title": "Musikcache",
|
||||||
"music_cache_description": "Cacha automatiskt låtar när du lyssnar för smidigare uppspelning och offline-stöd",
|
"music_cache_description": "Cacha automatiskt låtar när du lyssnar för smidigare uppspelning och offline-stöd",
|
||||||
"enable_music_cache": "Aktivera musikcache",
|
|
||||||
"clear_music_cache": "Rensa musikcache",
|
"clear_music_cache": "Rensa musikcache",
|
||||||
"music_cache_size": "{{size}} cachad",
|
"music_cache_size": "{{size}} cachad",
|
||||||
"music_cache_cleared": "Musikcache rensad",
|
"music_cache_cleared": "Musikcache rensad",
|
||||||
@@ -467,8 +396,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -490,15 +417,12 @@
|
|||||||
"system": "System"
|
"system": "System"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Fel Vid Borttagning Av Filer",
|
"error_deleting_files": "Fel Vid Borttagning Av Filer"
|
||||||
"background_downloads_enabled": "Bakgrundsnedladdningar aktiverade",
|
|
||||||
"background_downloads_disabled": "Bakgrundsnedladdningar inaktiverade"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -508,6 +432,10 @@
|
|||||||
"4_hours": "4 hours",
|
"4_hours": "4 hours",
|
||||||
"24_hours": "24 hours"
|
"24_hours": "24 hours"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"title": "Dashboard",
|
||||||
|
"sessions_title": "Sessions"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sessions": {
|
"sessions": {
|
||||||
@@ -516,15 +444,12 @@
|
|||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"downloads_title": "Nedladdningar",
|
"downloads_title": "Nedladdningar",
|
||||||
"tvseries": "TV-Serier",
|
"series": "TV-Serier",
|
||||||
"movies": "Filmer",
|
"movies": "Filmer",
|
||||||
"queue": "Kö",
|
|
||||||
"other_media": "Annan media",
|
"other_media": "Annan media",
|
||||||
"queue_hint": "Kö och nedladdningar kommer försvinna vid omstart av appen",
|
|
||||||
"no_items_in_queue": "Inga objekt i Kön",
|
|
||||||
"no_downloaded_items": "Inga Nedladdade Objekt",
|
"no_downloaded_items": "Inga Nedladdade Objekt",
|
||||||
"delete_all_movies_button": "Ta Bort Alla Filmer",
|
"delete_all_movies_button": "Ta Bort Alla Filmer",
|
||||||
"delete_all_tvseries_button": "Ta Bort Alla TV-Serier",
|
"delete_all_series_button": "Ta Bort Alla TV-Serier",
|
||||||
"delete_all_button": "Radera Allt",
|
"delete_all_button": "Radera Allt",
|
||||||
"delete_all_other_media_button": "Ta Bort Andra Videor",
|
"delete_all_other_media_button": "Ta Bort Andra Videor",
|
||||||
"active_download": "Aktiv Nedladdning",
|
"active_download": "Aktiv Nedladdning",
|
||||||
@@ -542,17 +467,12 @@
|
|||||||
"you_are_not_allowed_to_download_files": "Du har inte behörighet att ladda ner filer.",
|
"you_are_not_allowed_to_download_files": "Du har inte behörighet att ladda ner filer.",
|
||||||
"deleted_all_movies_successfully": "Alla Filmer Har Tagits Bort!",
|
"deleted_all_movies_successfully": "Alla Filmer Har Tagits Bort!",
|
||||||
"failed_to_delete_all_movies": "Det Gick Inte Att Ta Bort Alla Filmer",
|
"failed_to_delete_all_movies": "Det Gick Inte Att Ta Bort Alla Filmer",
|
||||||
"deleted_all_tvseries_successfully": "Alla TV-Serier Har Tagits Bort!",
|
"deleted_all_series_successfully": "Alla TV-Serier Har Tagits Bort!",
|
||||||
"failed_to_delete_all_tvseries": "Det Gick Inte Att Ta Bort Alla TV-Serier",
|
"failed_to_delete_all_series": "Det Gick Inte Att Ta Bort Alla TV-Serier",
|
||||||
"deleted_media_successfully": "Andra Medier Har Tagits Bort!",
|
"deleted_media_successfully": "Andra Medier Har Tagits Bort!",
|
||||||
"failed_to_delete_media": "Kunde Inte Ta Bort Andra Medier",
|
"failed_to_delete_media": "Kunde Inte Ta Bort Andra Medier",
|
||||||
"download_deleted": "Nedladdning Borttagen",
|
|
||||||
"download_cancelled": "Nerladdningen Avbruten",
|
"download_cancelled": "Nerladdningen Avbruten",
|
||||||
"could_not_delete_download": "Kunde Inte Ta Bort Nedladdning",
|
"could_not_delete_download": "Kunde Inte Ta Bort Nedladdning",
|
||||||
"download_paused": "Nedladdning Pausad",
|
|
||||||
"could_not_pause_download": "Kunde Inte Pausa Nedladdning",
|
|
||||||
"download_resumed": "Nedladdning Återupptagen",
|
|
||||||
"could_not_resume_download": "Kunde Inte Återuppta Nedladdning",
|
|
||||||
"download_completed": "Nedladdning Slutförd",
|
"download_completed": "Nedladdning Slutförd",
|
||||||
"download_failed": "Nerladdningen misslyckades",
|
"download_failed": "Nerladdningen misslyckades",
|
||||||
"download_failed_for_item": "Nedladdning misslyckades för {{item}} - {{error}}",
|
"download_failed_for_item": "Nedladdning misslyckades för {{item}} - {{error}}",
|
||||||
@@ -562,10 +482,7 @@
|
|||||||
"item_already_downloading": "{{item}} Laddas redan ner",
|
"item_already_downloading": "{{item}} Laddas redan ner",
|
||||||
"all_files_deleted": "Alla nedladdningar raderades",
|
"all_files_deleted": "Alla nedladdningar raderades",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} Raderad",
|
"files_deleted_by_type": "{{count}} {{type}} Raderad",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Alla filer, mappar och jobb har tagits bort",
|
|
||||||
"failed_to_clean_cache_directory": "Det gick inte att rensa cachemappen",
|
|
||||||
"could_not_get_download_url_for_item": "Kunde inte hämta nedladdnings-URL för {{itemName}}",
|
"could_not_get_download_url_for_item": "Kunde inte hämta nedladdnings-URL för {{itemName}}",
|
||||||
"go_to_downloads": "Gå till nedladdningar",
|
|
||||||
"file_deleted": "{{item}} Raderad"
|
"file_deleted": "{{item}} Raderad"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +500,17 @@
|
|||||||
"none": "Ingen",
|
"none": "Ingen",
|
||||||
"track": "Spår",
|
"track": "Spår",
|
||||||
"cancel": "Avbryt",
|
"cancel": "Avbryt",
|
||||||
"stop": "Stoppa",
|
|
||||||
"delete": "Ta bort",
|
"delete": "Ta bort",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Radera",
|
"remove": "Radera",
|
||||||
"next": "Nästa",
|
|
||||||
"back": "Tillbaka",
|
"back": "Tillbaka",
|
||||||
"continue": "Fortsätt",
|
"continue": "Fortsätt",
|
||||||
"verifying": "Verifierar...",
|
"verifying": "Verifierar...",
|
||||||
"login": "Logga in",
|
"login": "Logga in",
|
||||||
"refresh": "Uppdatera"
|
"episodes": "Episodes",
|
||||||
|
"movies": "Movies",
|
||||||
|
"loading": "Loading…",
|
||||||
|
"seeAll": "See all"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Sök...",
|
"search": "Sök...",
|
||||||
@@ -691,10 +609,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Kunde inte skapa stream för Chromecast",
|
"could_not_create_stream_for_chromecast": "Kunde inte skapa stream för Chromecast",
|
||||||
"message_from_server": "Meddelande från servern: {{message}}",
|
"message_from_server": "Meddelande från servern: {{message}}",
|
||||||
"next_episode": "Nästa avsnitt",
|
"next_episode": "Nästa avsnitt",
|
||||||
"refresh_tracks": "Uppdatera spår",
|
|
||||||
"audio_tracks": "Ljudspår:",
|
|
||||||
"playback_state": "Uppspelningsstatus:",
|
|
||||||
"index": "Index:",
|
|
||||||
"continue_watching": "Fortsätt titta",
|
"continue_watching": "Fortsätt titta",
|
||||||
"go_back": "Tillbaka",
|
"go_back": "Tillbaka",
|
||||||
"downloaded_file_title": "Du har denna fil nedladdad",
|
"downloaded_file_title": "Du har denna fil nedladdad",
|
||||||
@@ -723,7 +637,8 @@
|
|||||||
"stopPlayback": "Stoppa uppspelning",
|
"stopPlayback": "Stoppa uppspelning",
|
||||||
"stopPlayingTitle": "Sluta spela \"{{title}}\"?",
|
"stopPlayingTitle": "Sluta spela \"{{title}}\"?",
|
||||||
"stopPlayingConfirm": "Är du säker på att du vill stoppa uppspelningen?",
|
"stopPlayingConfirm": "Är du säker på att du vill stoppa uppspelningen?",
|
||||||
"downloaded": "Nedladdad"
|
"downloaded": "Nedladdad",
|
||||||
|
"missing_parameters": "Missing playback parameters"
|
||||||
},
|
},
|
||||||
"chapters": {
|
"chapters": {
|
||||||
"title": "Chapters",
|
"title": "Chapters",
|
||||||
@@ -761,7 +676,6 @@
|
|||||||
"show_more": "Visa Mer",
|
"show_more": "Visa Mer",
|
||||||
"show_less": "Visa Mindre",
|
"show_less": "Visa Mindre",
|
||||||
"left": "kvar",
|
"left": "kvar",
|
||||||
"more_info": "Mer info",
|
|
||||||
"director": "Regissör",
|
"director": "Regissör",
|
||||||
"cast": "Skådespelare",
|
"cast": "Skådespelare",
|
||||||
"technical_details": "Tekniska detaljer",
|
"technical_details": "Tekniska detaljer",
|
||||||
@@ -784,7 +698,8 @@
|
|||||||
"resume_playback": "Återuppta uppspelning",
|
"resume_playback": "Återuppta uppspelning",
|
||||||
"resume_playback_description": "Vill du fortsätta där du slutade eller börja om från början?",
|
"resume_playback_description": "Vill du fortsätta där du slutade eller börja om från början?",
|
||||||
"play_from_start": "Spela från början",
|
"play_from_start": "Spela från början",
|
||||||
"continue_from": "Fortsätt från {{time}}"
|
"continue_from": "Fortsätt från {{time}}",
|
||||||
|
"no_data_available": "No data available"
|
||||||
},
|
},
|
||||||
"live_tv": {
|
"live_tv": {
|
||||||
"next": "Nästa",
|
"next": "Nästa",
|
||||||
@@ -888,13 +803,9 @@
|
|||||||
"playlists": "Spellistor",
|
"playlists": "Spellistor",
|
||||||
"tracks": "spår"
|
"tracks": "spår"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "Alla"
|
|
||||||
},
|
|
||||||
"recently_added": "Nyligen tillagt",
|
"recently_added": "Nyligen tillagt",
|
||||||
"recently_played": "Nyligen spelat",
|
"recently_played": "Nyligen spelat",
|
||||||
"frequently_played": "Spelas ofta",
|
"frequently_played": "Spelas ofta",
|
||||||
"explore": "Utforska",
|
|
||||||
"top_tracks": "Toppspår",
|
"top_tracks": "Toppspår",
|
||||||
"play": "Spela",
|
"play": "Spela",
|
||||||
"shuffle": "Blanda spår",
|
"shuffle": "Blanda spår",
|
||||||
@@ -1028,7 +939,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -261,43 +261,6 @@
|
|||||||
"None": "None",
|
"None": "None",
|
||||||
"OnlyForced": "OnlyForced"
|
"OnlyForced": "OnlyForced"
|
||||||
},
|
},
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"bold_text": "Bold Text",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Black",
|
|
||||||
"Gray": "Gray",
|
|
||||||
"Silver": "Silver",
|
|
||||||
"White": "White",
|
|
||||||
"Maroon": "Maroon",
|
|
||||||
"Red": "Red",
|
|
||||||
"Fuchsia": "Fuchsia",
|
|
||||||
"Yellow": "Yellow",
|
|
||||||
"Olive": "Olive",
|
|
||||||
"Green": "Green",
|
|
||||||
"Teal": "Teal",
|
|
||||||
"Lime": "Lime",
|
|
||||||
"Purple": "Purple",
|
|
||||||
"Navy": "Navy",
|
|
||||||
"Blue": "สีน้ำเงิน",
|
|
||||||
"Aqua": "Aqua"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "None",
|
|
||||||
"Thin": "Thin",
|
|
||||||
"Normal": "Normal",
|
|
||||||
"Thick": "Thick"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Subtitle Color",
|
|
||||||
"subtitle_background_color": "Background Color",
|
|
||||||
"subtitle_font": "Subtitle Font",
|
|
||||||
"ksplayer_title": "KSPlayer Settings",
|
|
||||||
"hardware_decode": "Hardware Decoding",
|
|
||||||
"hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +278,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC Subtitle Settings",
|
|
||||||
"hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.",
|
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"bold": "Bold Text",
|
|
||||||
"margin": "Bottom Margin"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Video Player",
|
|
||||||
"video_player": "Video Player",
|
|
||||||
"video_player_description": "Choose which video player to use on iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Other",
|
"other_title": "Other",
|
||||||
"video_orientation": "Video Orientation",
|
"video_orientation": "Video Orientation",
|
||||||
@@ -346,16 +290,11 @@
|
|||||||
"PORTRAIT_DOWN": "Portrait Down",
|
"PORTRAIT_DOWN": "Portrait Down",
|
||||||
"LANDSCAPE": "Landscape",
|
"LANDSCAPE": "Landscape",
|
||||||
"LANDSCAPE_LEFT": "Landscape Left",
|
"LANDSCAPE_LEFT": "Landscape Left",
|
||||||
"LANDSCAPE_RIGHT": "",
|
"LANDSCAPE_RIGHT": "Landscape right",
|
||||||
"OTHER": "Other",
|
"OTHER": "Other",
|
||||||
"UNKNOWN": "Unknown"
|
"UNKNOWN": "Unknown"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Safe Area in Controls",
|
"safe_area_in_controls": "Safe Area in Controls",
|
||||||
"video_player": "Video Player",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Experimental + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Show Custom Menu Links",
|
"show_custom_menu_links": "Show Custom Menu Links",
|
||||||
"show_large_home_carousel": "Show Large Home Carousel (beta)",
|
"show_large_home_carousel": "Show Large Home Carousel (beta)",
|
||||||
"hide_libraries": "Hide Libraries",
|
"hide_libraries": "Hide Libraries",
|
||||||
@@ -367,9 +306,6 @@
|
|||||||
"max_auto_play_episode_count": "Max Auto Play Episode Count",
|
"max_auto_play_episode_count": "Max Auto Play Episode Count",
|
||||||
"disabled": "Disabled"
|
"disabled": "Disabled"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Downloads"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Music",
|
"title": "Music",
|
||||||
"playback_title": "Playback",
|
"playback_title": "Playback",
|
||||||
@@ -413,23 +349,18 @@
|
|||||||
"read_more_about_marlin": "Read More About Marlin.",
|
"read_more_about_marlin": "Read More About Marlin.",
|
||||||
"save_button": "Save",
|
"save_button": "Save",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Saved",
|
"saved": "Saved"
|
||||||
"refreshed": "Settings refreshed from server"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Refresh Settings from Server"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Enable Streamystats",
|
|
||||||
"disable_streamystats": "Disable Streamystats",
|
"disable_streamystats": "Disable Streamystats",
|
||||||
"enable_search": "Use for Search",
|
"enable_search": "Use for Search",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
||||||
"read_more_about_streamystats": "Read More About Streamystats.",
|
"read_more_about_streamystats": "Read More About Streamystats.",
|
||||||
"save_button": "Save",
|
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"features_title": "Features",
|
"features_title": "Features",
|
||||||
"home_sections_title": "Home Sections",
|
|
||||||
"enable_movie_recommendations": "Movie Recommendations",
|
"enable_movie_recommendations": "Movie Recommendations",
|
||||||
"enable_series_recommendations": "Series Recommendations",
|
"enable_series_recommendations": "Series Recommendations",
|
||||||
"enable_promoted_watchlists": "Promoted Watchlists",
|
"enable_promoted_watchlists": "Promoted Watchlists",
|
||||||
@@ -445,8 +376,7 @@
|
|||||||
"refresh_from_server": "Refresh Settings from Server"
|
"refresh_from_server": "Refresh Settings from Server"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Enable our Watchlist integration",
|
"watchlist_enabler": "Enable our Watchlist integration"
|
||||||
"watchlist_button": "Toggle Watchlist integration"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +387,6 @@
|
|||||||
"delete_all_downloaded_files": "Delete All Downloaded Files",
|
"delete_all_downloaded_files": "Delete All Downloaded Files",
|
||||||
"music_cache_title": "Music Cache",
|
"music_cache_title": "Music Cache",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Enable Music Cache",
|
|
||||||
"clear_music_cache": "Clear Music Cache",
|
"clear_music_cache": "Clear Music Cache",
|
||||||
"music_cache_size": "{{size}} cached",
|
"music_cache_size": "{{size}} cached",
|
||||||
"music_cache_cleared": "Music cache cleared",
|
"music_cache_cleared": "Music cache cleared",
|
||||||
@@ -467,8 +396,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -490,15 +417,12 @@
|
|||||||
"system": "System"
|
"system": "System"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Error Deleting Files",
|
"error_deleting_files": "Error Deleting Files"
|
||||||
"background_downloads_enabled": "Background downloads enabled",
|
|
||||||
"background_downloads_disabled": "Background downloads disabled"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -508,6 +432,10 @@
|
|||||||
"4_hours": "4 hours",
|
"4_hours": "4 hours",
|
||||||
"24_hours": "24 hours"
|
"24_hours": "24 hours"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"title": "Dashboard",
|
||||||
|
"sessions_title": "Sessions"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sessions": {
|
"sessions": {
|
||||||
@@ -516,15 +444,12 @@
|
|||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"downloads_title": "Downloads",
|
"downloads_title": "Downloads",
|
||||||
"tvseries": "TV-Series",
|
"series": "TV-Series",
|
||||||
"movies": "Movies",
|
"movies": "Movies",
|
||||||
"queue": "Queue",
|
|
||||||
"other_media": "Other media",
|
"other_media": "Other media",
|
||||||
"queue_hint": "Queue and downloads will be lost on app restart",
|
|
||||||
"no_items_in_queue": "No Items in Queue",
|
|
||||||
"no_downloaded_items": "No Downloaded Items",
|
"no_downloaded_items": "No Downloaded Items",
|
||||||
"delete_all_movies_button": "Delete All Movies",
|
"delete_all_movies_button": "Delete All Movies",
|
||||||
"delete_all_tvseries_button": "Delete All TV-Series",
|
"delete_all_series_button": "Delete All TV-Series",
|
||||||
"delete_all_button": "Delete All",
|
"delete_all_button": "Delete All",
|
||||||
"delete_all_other_media_button": "Delete other media",
|
"delete_all_other_media_button": "Delete other media",
|
||||||
"active_download": "Active Download",
|
"active_download": "Active Download",
|
||||||
@@ -542,17 +467,12 @@
|
|||||||
"you_are_not_allowed_to_download_files": "You are not allowed to download files.",
|
"you_are_not_allowed_to_download_files": "You are not allowed to download files.",
|
||||||
"deleted_all_movies_successfully": "Deleted All Movies Successfully!",
|
"deleted_all_movies_successfully": "Deleted All Movies Successfully!",
|
||||||
"failed_to_delete_all_movies": "Failed to Delete All Movies",
|
"failed_to_delete_all_movies": "Failed to Delete All Movies",
|
||||||
"deleted_all_tvseries_successfully": "Deleted All TV-Series Successfully!",
|
"deleted_all_series_successfully": "Deleted All TV-Series Successfully!",
|
||||||
"failed_to_delete_all_tvseries": "Failed to Delete All TV-Series",
|
"failed_to_delete_all_series": "Failed to Delete All TV-Series",
|
||||||
"deleted_media_successfully": "Deleted other media Successfully!",
|
"deleted_media_successfully": "Deleted other media Successfully!",
|
||||||
"failed_to_delete_media": "Failed to Delete other media",
|
"failed_to_delete_media": "Failed to Delete other media",
|
||||||
"download_deleted": "Download Deleted",
|
|
||||||
"download_cancelled": "Download Cancelled",
|
"download_cancelled": "Download Cancelled",
|
||||||
"could_not_delete_download": "Could Not Delete Download",
|
"could_not_delete_download": "Could Not Delete Download",
|
||||||
"download_paused": "Download Paused",
|
|
||||||
"could_not_pause_download": "Could Not Pause Download",
|
|
||||||
"download_resumed": "Download Resumed",
|
|
||||||
"could_not_resume_download": "Could Not Resume Download",
|
|
||||||
"download_completed": "Download Completed",
|
"download_completed": "Download Completed",
|
||||||
"download_failed": "Download Failed",
|
"download_failed": "Download Failed",
|
||||||
"download_failed_for_item": "Download failed for {{item}} - {{error}}",
|
"download_failed_for_item": "Download failed for {{item}} - {{error}}",
|
||||||
@@ -562,10 +482,7 @@
|
|||||||
"item_already_downloading": "{{item}} is already downloading",
|
"item_already_downloading": "{{item}} is already downloading",
|
||||||
"all_files_deleted": "All Downloads Deleted Successfully",
|
"all_files_deleted": "All Downloads Deleted Successfully",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "All files, folders, and jobs deleted successfully",
|
|
||||||
"failed_to_clean_cache_directory": "Failed to clean cache directory",
|
|
||||||
"could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}",
|
"could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}",
|
||||||
"go_to_downloads": "Go to Downloads",
|
|
||||||
"file_deleted": "{{item}} deleted"
|
"file_deleted": "{{item}} deleted"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +500,17 @@
|
|||||||
"none": "None",
|
"none": "None",
|
||||||
"track": "Track",
|
"track": "Track",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
"next": "Next",
|
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
"continue": "Continue",
|
"continue": "Continue",
|
||||||
"verifying": "Verifying...",
|
"verifying": "Verifying...",
|
||||||
"login": "Login",
|
"login": "Login",
|
||||||
"refresh": "Refresh"
|
"episodes": "Episodes",
|
||||||
|
"movies": "Movies",
|
||||||
|
"loading": "Loading…",
|
||||||
|
"seeAll": "See all"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Search...",
|
"search": "Search...",
|
||||||
@@ -691,10 +609,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Could not create a stream for Chromecast",
|
"could_not_create_stream_for_chromecast": "Could not create a stream for Chromecast",
|
||||||
"message_from_server": "Message from Server: {{message}}",
|
"message_from_server": "Message from Server: {{message}}",
|
||||||
"next_episode": "Next Episode",
|
"next_episode": "Next Episode",
|
||||||
"refresh_tracks": "Refresh Tracks",
|
|
||||||
"audio_tracks": "Audio Tracks:",
|
|
||||||
"playback_state": "Playback State:",
|
|
||||||
"index": "Index:",
|
|
||||||
"continue_watching": "Continue Watching",
|
"continue_watching": "Continue Watching",
|
||||||
"go_back": "Go Back",
|
"go_back": "Go Back",
|
||||||
"downloaded_file_title": "You have this file downloaded",
|
"downloaded_file_title": "You have this file downloaded",
|
||||||
@@ -723,7 +637,8 @@
|
|||||||
"stopPlayback": "Stop Playback",
|
"stopPlayback": "Stop Playback",
|
||||||
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
||||||
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
||||||
"downloaded": "Downloaded"
|
"downloaded": "Downloaded",
|
||||||
|
"missing_parameters": "Missing playback parameters"
|
||||||
},
|
},
|
||||||
"chapters": {
|
"chapters": {
|
||||||
"title": "Chapters",
|
"title": "Chapters",
|
||||||
@@ -761,7 +676,6 @@
|
|||||||
"show_more": "Show More",
|
"show_more": "Show More",
|
||||||
"show_less": "Show Less",
|
"show_less": "Show Less",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -784,7 +698,8 @@
|
|||||||
"resume_playback": "Resume Playback",
|
"resume_playback": "Resume Playback",
|
||||||
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
||||||
"play_from_start": "Play from Start",
|
"play_from_start": "Play from Start",
|
||||||
"continue_from": "Continue from {{time}}"
|
"continue_from": "Continue from {{time}}",
|
||||||
|
"no_data_available": "No data available"
|
||||||
},
|
},
|
||||||
"live_tv": {
|
"live_tv": {
|
||||||
"next": "Next",
|
"next": "Next",
|
||||||
@@ -888,13 +803,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "tracks"
|
"tracks": "tracks"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "All"
|
|
||||||
},
|
|
||||||
"recently_added": "Recently Added",
|
"recently_added": "Recently Added",
|
||||||
"recently_played": "Recently Played",
|
"recently_played": "Recently Played",
|
||||||
"frequently_played": "Frequently Played",
|
"frequently_played": "Frequently Played",
|
||||||
"explore": "Explore",
|
|
||||||
"top_tracks": "Top Tracks",
|
"top_tracks": "Top Tracks",
|
||||||
"play": "Play",
|
"play": "Play",
|
||||||
"shuffle": "Shuffle",
|
"shuffle": "Shuffle",
|
||||||
@@ -1028,7 +939,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -261,43 +261,6 @@
|
|||||||
"None": "pagh",
|
"None": "pagh",
|
||||||
"OnlyForced": "Dun je'"
|
"OnlyForced": "Dun je'"
|
||||||
},
|
},
|
||||||
"text_color": "GhItlh rIt",
|
|
||||||
"background_color": "Tlhagh rIt",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"bold_text": "Bold Text",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Black",
|
|
||||||
"Gray": "Gray",
|
|
||||||
"Silver": "Silver",
|
|
||||||
"White": "White",
|
|
||||||
"Maroon": "Maroon",
|
|
||||||
"Red": "Red",
|
|
||||||
"Fuchsia": "Fuchsia",
|
|
||||||
"Yellow": "Yellow",
|
|
||||||
"Olive": "Olive",
|
|
||||||
"Green": "Green",
|
|
||||||
"Teal": "Teal",
|
|
||||||
"Lime": "Lime",
|
|
||||||
"Purple": "Purple",
|
|
||||||
"Navy": "Navy",
|
|
||||||
"Blue": "Blue",
|
|
||||||
"Aqua": "Aqua"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "pagh",
|
|
||||||
"Thin": "Thin",
|
|
||||||
"Normal": "Normal",
|
|
||||||
"Thick": "Thick"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Subtitle Color",
|
|
||||||
"subtitle_background_color": "Background Color",
|
|
||||||
"subtitle_font": "Subtitle Font",
|
|
||||||
"ksplayer_title": "KSPlayer Settings",
|
|
||||||
"hardware_decode": "Hardware Decoding",
|
|
||||||
"hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +278,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC Subtitle Settings",
|
|
||||||
"hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.",
|
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"bold": "Bold Text",
|
|
||||||
"margin": "Bottom Margin"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Video Player",
|
|
||||||
"video_player": "Video Player",
|
|
||||||
"video_player_description": "Choose which video player to use on iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "patlh",
|
"other_title": "patlh",
|
||||||
"video_orientation": "mu'tlhegh pegh",
|
"video_orientation": "mu'tlhegh pegh",
|
||||||
@@ -351,11 +295,6 @@
|
|||||||
"UNKNOWN": "Sovbe'"
|
"UNKNOWN": "Sovbe'"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "SeHlawDaq yot QIH",
|
"safe_area_in_controls": "SeHlawDaq yot QIH",
|
||||||
"video_player": "mu'tlhegh tlholwI'",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (PiP mIwHa')"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "menuDaq ret teqlu' yInej",
|
"show_custom_menu_links": "menuDaq ret teqlu' yInej",
|
||||||
"show_large_home_carousel": "Show Large Home Carousel (beta)",
|
"show_large_home_carousel": "Show Large Home Carousel (beta)",
|
||||||
"hide_libraries": "De'wI' bom yIQIj",
|
"hide_libraries": "De'wI' bom yIQIj",
|
||||||
@@ -367,9 +306,6 @@
|
|||||||
"max_auto_play_episode_count": "Max Auto Play Episode Count",
|
"max_auto_play_episode_count": "Max Auto Play Episode Count",
|
||||||
"disabled": "Disabled"
|
"disabled": "Disabled"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Qaw' Doch"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Music",
|
"title": "Music",
|
||||||
"playback_title": "Playback",
|
"playback_title": "Playback",
|
||||||
@@ -413,23 +349,18 @@
|
|||||||
"read_more_about_marlin": "Marlin latlh yIlaD",
|
"read_more_about_marlin": "Marlin latlh yIlaD",
|
||||||
"save_button": "yIqIp",
|
"save_button": "yIqIp",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "qIp",
|
"saved": "qIp"
|
||||||
"refreshed": "Settings refreshed from server"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Refresh Settings from Server"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Enable Streamystats",
|
|
||||||
"disable_streamystats": "Disable Streamystats",
|
"disable_streamystats": "Disable Streamystats",
|
||||||
"enable_search": "Use for Search",
|
"enable_search": "Use for Search",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
||||||
"read_more_about_streamystats": "Read More About Streamystats.",
|
"read_more_about_streamystats": "Read More About Streamystats.",
|
||||||
"save_button": "Save",
|
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"features_title": "Features",
|
"features_title": "Features",
|
||||||
"home_sections_title": "Home Sections",
|
|
||||||
"enable_movie_recommendations": "Movie Recommendations",
|
"enable_movie_recommendations": "Movie Recommendations",
|
||||||
"enable_series_recommendations": "Series Recommendations",
|
"enable_series_recommendations": "Series Recommendations",
|
||||||
"enable_promoted_watchlists": "Promoted Watchlists",
|
"enable_promoted_watchlists": "Promoted Watchlists",
|
||||||
@@ -445,8 +376,7 @@
|
|||||||
"refresh_from_server": "Refresh Settings from Server"
|
"refresh_from_server": "Refresh Settings from Server"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Enable our Watchlist integration",
|
"watchlist_enabler": "Enable our Watchlist integration"
|
||||||
"watchlist_button": "Toggle Watchlist integration"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +387,6 @@
|
|||||||
"delete_all_downloaded_files": "Hoch Qaw' Doch yIQaw'",
|
"delete_all_downloaded_files": "Hoch Qaw' Doch yIQaw'",
|
||||||
"music_cache_title": "Music Cache",
|
"music_cache_title": "Music Cache",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Enable Music Cache",
|
|
||||||
"clear_music_cache": "Clear Music Cache",
|
"clear_music_cache": "Clear Music Cache",
|
||||||
"music_cache_size": "{{size}} cached",
|
"music_cache_size": "{{size}} cached",
|
||||||
"music_cache_cleared": "Music cache cleared",
|
"music_cache_cleared": "Music cache cleared",
|
||||||
@@ -467,8 +396,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -490,15 +417,12 @@
|
|||||||
"system": "mIw'a'"
|
"system": "mIw'a'"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Qaw' ghIq",
|
"error_deleting_files": "Qaw' ghIq"
|
||||||
"background_downloads_enabled": "tlhegh Qaw' chu'",
|
|
||||||
"background_downloads_disabled": "tlhegh Qaw' QIj"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -508,6 +432,10 @@
|
|||||||
"4_hours": "4 hours",
|
"4_hours": "4 hours",
|
||||||
"24_hours": "24 hours"
|
"24_hours": "24 hours"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"title": "Dashboard",
|
||||||
|
"sessions_title": "Sessions"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sessions": {
|
"sessions": {
|
||||||
@@ -516,15 +444,12 @@
|
|||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"downloads_title": "Qaw' Doch",
|
"downloads_title": "Qaw' Doch",
|
||||||
"tvseries": "TV Hem",
|
"series": "TV Hem",
|
||||||
"movies": "DIS",
|
"movies": "DIS",
|
||||||
"queue": "ghom",
|
|
||||||
"other_media": "Other media",
|
"other_media": "Other media",
|
||||||
"queue_hint": "ghun ghImDI' ghom Qaw'laH.",
|
|
||||||
"no_items_in_queue": "ghom Doch pagh",
|
|
||||||
"no_downloaded_items": "Qaw' Doch pagh",
|
"no_downloaded_items": "Qaw' Doch pagh",
|
||||||
"delete_all_movies_button": "Hoch DIS yIQaw'",
|
"delete_all_movies_button": "Hoch DIS yIQaw'",
|
||||||
"delete_all_tvseries_button": "Hoch TV Hem yIQaw'",
|
"delete_all_series_button": "Hoch TV Hem yIQaw'",
|
||||||
"delete_all_button": "Hoch yIQaw'",
|
"delete_all_button": "Hoch yIQaw'",
|
||||||
"delete_all_other_media_button": "Delete other media",
|
"delete_all_other_media_button": "Delete other media",
|
||||||
"active_download": "chu' Qaw'",
|
"active_download": "chu' Qaw'",
|
||||||
@@ -542,17 +467,12 @@
|
|||||||
"you_are_not_allowed_to_download_files": "Doch Qaw' je'laHbe'.",
|
"you_are_not_allowed_to_download_files": "Doch Qaw' je'laHbe'.",
|
||||||
"deleted_all_movies_successfully": "Hoch DIS Qaw' Qapla'!",
|
"deleted_all_movies_successfully": "Hoch DIS Qaw' Qapla'!",
|
||||||
"failed_to_delete_all_movies": "Hoch DIS Qaw'laHbe'",
|
"failed_to_delete_all_movies": "Hoch DIS Qaw'laHbe'",
|
||||||
"deleted_all_tvseries_successfully": "Hoch TV Hem Qaw' Qapla'!",
|
"deleted_all_series_successfully": "Hoch TV Hem Qaw' Qapla'!",
|
||||||
"failed_to_delete_all_tvseries": "Hoch TV Hem Qaw'laHbe'",
|
"failed_to_delete_all_series": "Hoch TV Hem Qaw'laHbe'",
|
||||||
"deleted_media_successfully": "Deleted other media Successfully!",
|
"deleted_media_successfully": "Deleted other media Successfully!",
|
||||||
"failed_to_delete_media": "Failed to Delete other media",
|
"failed_to_delete_media": "Failed to Delete other media",
|
||||||
"download_deleted": "Download Deleted",
|
|
||||||
"download_cancelled": "Qaw' ghIm",
|
"download_cancelled": "Qaw' ghIm",
|
||||||
"could_not_delete_download": "Could Not Delete Download",
|
"could_not_delete_download": "Could Not Delete Download",
|
||||||
"download_paused": "Download Paused",
|
|
||||||
"could_not_pause_download": "Could Not Pause Download",
|
|
||||||
"download_resumed": "Download Resumed",
|
|
||||||
"could_not_resume_download": "Could Not Resume Download",
|
|
||||||
"download_completed": "Qaw' Qapla'",
|
"download_completed": "Qaw' Qapla'",
|
||||||
"download_failed": "Download Failed",
|
"download_failed": "Download Failed",
|
||||||
"download_failed_for_item": "{{item}} Qaw'laHbe' - {{error}}",
|
"download_failed_for_item": "{{item}} Qaw'laHbe' - {{error}}",
|
||||||
@@ -562,10 +482,7 @@
|
|||||||
"item_already_downloading": "{{item}} is already downloading",
|
"item_already_downloading": "{{item}} is already downloading",
|
||||||
"all_files_deleted": "All Downloads Deleted Successfully",
|
"all_files_deleted": "All Downloads Deleted Successfully",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Hoch De', ram 'ej vum Qaw' Qapla'",
|
|
||||||
"failed_to_clean_cache_directory": "Failed to clean cache directory",
|
|
||||||
"could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}",
|
"could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}",
|
||||||
"go_to_downloads": "Qaw' Doch yIghoS",
|
|
||||||
"file_deleted": "{{item}} deleted"
|
"file_deleted": "{{item}} deleted"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +500,17 @@
|
|||||||
"none": "None",
|
"none": "None",
|
||||||
"track": "Track",
|
"track": "Track",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
"next": "Next",
|
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
"continue": "Continue",
|
"continue": "Continue",
|
||||||
"verifying": "Verifying...",
|
"verifying": "Verifying...",
|
||||||
"login": "Login",
|
"login": "Login",
|
||||||
"refresh": "Refresh"
|
"episodes": "Episodes",
|
||||||
|
"movies": "Movies",
|
||||||
|
"loading": "Loading…",
|
||||||
|
"seeAll": "See all"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "yISam...",
|
"search": "yISam...",
|
||||||
@@ -691,10 +609,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Chromecast tlhol ret qonlaHbe'",
|
"could_not_create_stream_for_chromecast": "Chromecast tlhol ret qonlaHbe'",
|
||||||
"message_from_server": "Ho'Do' veS jach: {{message}}",
|
"message_from_server": "Ho'Do' veS jach: {{message}}",
|
||||||
"next_episode": "wej HemHom",
|
"next_episode": "wej HemHom",
|
||||||
"refresh_tracks": "ret yIchu'qa'",
|
|
||||||
"audio_tracks": "QoQ ret:",
|
|
||||||
"playback_state": "tlhol mIw:",
|
|
||||||
"index": "nem:",
|
|
||||||
"continue_watching": "tlhol yIHaDqa'",
|
"continue_watching": "tlhol yIHaDqa'",
|
||||||
"go_back": "Go Back",
|
"go_back": "Go Back",
|
||||||
"downloaded_file_title": "You have this file downloaded",
|
"downloaded_file_title": "You have this file downloaded",
|
||||||
@@ -723,7 +637,8 @@
|
|||||||
"stopPlayback": "Stop Playback",
|
"stopPlayback": "Stop Playback",
|
||||||
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
||||||
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
||||||
"downloaded": "Downloaded"
|
"downloaded": "Downloaded",
|
||||||
|
"missing_parameters": "Missing playback parameters"
|
||||||
},
|
},
|
||||||
"chapters": {
|
"chapters": {
|
||||||
"title": "Chapters",
|
"title": "Chapters",
|
||||||
@@ -761,7 +676,6 @@
|
|||||||
"show_more": "latlh yIHoch",
|
"show_more": "latlh yIHoch",
|
||||||
"show_less": "Hom yIHoch",
|
"show_less": "Hom yIHoch",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -784,7 +698,8 @@
|
|||||||
"resume_playback": "Resume Playback",
|
"resume_playback": "Resume Playback",
|
||||||
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
||||||
"play_from_start": "Play from Start",
|
"play_from_start": "Play from Start",
|
||||||
"continue_from": "Continue from {{time}}"
|
"continue_from": "Continue from {{time}}",
|
||||||
|
"no_data_available": "No data available"
|
||||||
},
|
},
|
||||||
"live_tv": {
|
"live_tv": {
|
||||||
"next": "wej",
|
"next": "wej",
|
||||||
@@ -888,13 +803,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "tracks"
|
"tracks": "tracks"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "All"
|
|
||||||
},
|
|
||||||
"recently_added": "Recently Added",
|
"recently_added": "Recently Added",
|
||||||
"recently_played": "Recently Played",
|
"recently_played": "Recently Played",
|
||||||
"frequently_played": "Frequently Played",
|
"frequently_played": "Frequently Played",
|
||||||
"explore": "Explore",
|
|
||||||
"top_tracks": "Top Tracks",
|
"top_tracks": "Top Tracks",
|
||||||
"play": "Play",
|
"play": "Play",
|
||||||
"shuffle": "Shuffle",
|
"shuffle": "Shuffle",
|
||||||
@@ -1028,7 +939,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||