Compare commits

...

13 Commits

Author SHA1 Message Date
Gauvain
51b70028eb fix(player): unify media-segment skip across mobile and TV
Replace the duplicated per-platform segment-skip logic with a shared
useMediaSegments hook: per-type skippers, overlap priority
(Commercial > Recap > Intro > Preview > Outro) and a single auto-skip
driver so both platforms behave identically.

- One auto-skip effect on the priority-resolved active segment, so
  overlapping auto segments can't fire competing seeks.
- Sub-second precision (stop flooring currentTime to whole seconds).
- Gate auto-skip on !isBuffering plus a short arm delay so it never
  seeks a not-yet-seekable transcoded stream at a 0:00 intro.
- Dedup guard survives the transient null when a transcoded stream
  bounces the reported position, instead of looping seeks.
2026-06-19 17:15:37 +02:00
Gauvain
cde6acb01b feat(player): add media segment skip with all 5 Jellyfin segment types
Closes #1312
Fixes #883

Adds a unified segment skip feature using the Jellyfin 10.11+
MediaSegments API. Replaces the legacy intro-only and credits-only
hooks with a single useSegmentSkipper hook covering Intro, Outro,
Recap, Commercial, and Preview.

Three modes per segment type: none, ask (show button), auto (skip
automatically). A dedicated submenu under Playback Controls keeps
the main settings page uncluttered.

Highlights:
- utils/segments.ts uses getMediaSegmentsApi from @jellyfin/sdk so
  includeSegmentTypes is serialized as repeated keys instead of the
  bracket-encoded form axios produces by default (the Jellyfin
  server silently ignored the filter otherwise). Falls back to the
  pre-10.11 intro-skipper / chapter-credits plugin endpoints when
  the new API is unavailable.
- hooks/useSegmentSkipper.ts stores seek and haptic in refs so the
  auto-skip effect does not re-run when their identities change
  (useHaptic returns a fresh no-op every render when disabled).
  currentSegment is memoized; the per-segment-type setting lookup
  uses a small map instead of a switch IIFE.
- components/video-player/controls/Controls.tsx prioritizes
  Commercial > Recap > Intro > Preview > Outro when multiple
  segments overlap and exposes the active type to BottomControls
  via skipButtonText.
- components/video-player/controls/BottomControls.tsx accepts the
  dynamic skipButtonText/skipCreditButtonText props.
- providers/Downloads/types.ts extends DownloadedItem with the
  three new segment buckets for offline playback.
- utils/atoms/settings.ts adds SegmentSkipMode and the five skip
  settings, defaulting to "ask".
- app/(auth)/(tabs)/(home)/settings/segment-skip/page.tsx renders
  the five dropdowns from a data table.
- translations/en.json and translations/fr.json add the new keys.
2026-06-19 17:15:37 +02:00
Gauvain
e660b98871 fix(mpv): force software decoding on Android emulator (#1752)
Some checks are pending
🏗️ Build Apps / 🤖 Build Android APK (Phone) (push) Waiting to run
🏗️ Build Apps / 🤖 Build Android APK (TV) (push) Waiting to run
🏗️ Build Apps / 🍎 Build iOS IPA (Phone) (push) Waiting to run
🏗️ Build Apps / 🍎 Build iOS IPA (Phone - Unsigned) (push) Waiting to run
🏗️ Build Apps / 🍎 Build tvOS IPA (push) Waiting to run
🏗️ Build Apps / 🍎 Build tvOS IPA (Unsigned) (push) Waiting to run
🔒 Lockfile Consistency Check / 🔍 Check bun.lock and package.json consistency (push) Waiting to run
🛡️ CodeQL Analysis / 🔎 Analyze with CodeQL (actions) (push) Waiting to run
🛡️ CodeQL Analysis / 🔎 Analyze with CodeQL (javascript-typescript) (push) Waiting to run
🏷️🔀Merge Conflict Labeler / 🏷️ Labeling Merge Conflicts (push) Waiting to run
🚦 Security & Quality Gate / 🔍 Vulnerable Dependencies (push) Waiting to run
🚦 Security & Quality Gate / 🚑 Expo Doctor Check (push) Waiting to run
🚦 Security & Quality Gate / 🔍 Lint & Test (check) (push) Waiting to run
🚦 Security & Quality Gate / 🔍 Lint & Test (typecheck) (push) Waiting to run
🛡️ Trivy Security Scan / 🔎 Filesystem scan (push) Waiting to run
🚦 Security & Quality Gate / 📝 Validate PR Title (push) Waiting to run
🚦 Security & Quality Gate / 🔍 Lint & Test (format) (push) Waiting to run
🚦 Security & Quality Gate / 🔍 Lint & Test (i18n:check) (push) Waiting to run
🚦 Security & Quality Gate / 🔍 Lint & Test (lint) (push) Waiting to run
2026-06-19 00:12:40 +02:00
renovate[bot]
ce66f0256e chore(deps): Update dependency @shopify/flash-list to v2.0.3 (#1629) 2026-06-18 21:53:02 +02:00
renovate[bot]
2ec6594462 chore(deps): Update CI dependencies to v24.17.0 (#1745) 2026-06-18 21:19:10 +02:00
renovate[bot]
18f01fa4ab chore(deps): Update actions/checkout action to v7 (#1746)
Some checks failed
🏗️ Build Apps / 🤖 Build Android APK (Phone) (push) Has been cancelled
🏗️ Build Apps / 🤖 Build Android APK (TV) (push) Has been cancelled
🏗️ Build Apps / 🍎 Build iOS IPA (Phone - Unsigned) (push) Has been cancelled
🔒 Lockfile Consistency Check / 🔍 Check bun.lock and package.json consistency (push) Has been cancelled
🏗️ Build Apps / 🍎 Build iOS IPA (Phone) (push) Has been cancelled
🏗️ Build Apps / 🍎 Build tvOS IPA (push) Has been cancelled
🏗️ Build Apps / 🍎 Build tvOS IPA (Unsigned) (push) Has been cancelled
🛡️ CodeQL Analysis / 🔎 Analyze with CodeQL (actions) (push) Has been cancelled
🛡️ CodeQL Analysis / 🔎 Analyze with CodeQL (javascript-typescript) (push) Has been cancelled
🏷️🔀Merge Conflict Labeler / 🏷️ Labeling Merge Conflicts (push) Has been cancelled
🚦 Security & Quality Gate / 🔍 Vulnerable Dependencies (push) Has been cancelled
🚦 Security & Quality Gate / 🚑 Expo Doctor Check (push) Has been cancelled
🚦 Security & Quality Gate / 🔍 Lint & Test (check) (push) Has been cancelled
🚦 Security & Quality Gate / 🔍 Lint & Test (format) (push) Has been cancelled
🚦 Security & Quality Gate / 📝 Validate PR Title (push) Has been cancelled
🚦 Security & Quality Gate / 🔍 Lint & Test (i18n:check) (push) Has been cancelled
🚦 Security & Quality Gate / 🔍 Lint & Test (lint) (push) Has been cancelled
🚦 Security & Quality Gate / 🔍 Lint & Test (typecheck) (push) Has been cancelled
🛡️ Trivy Security Scan / 🔎 Filesystem scan (push) Has been cancelled
🌐 Translation Sync / sync-translations (push) Has been cancelled
2026-06-18 20:46:54 +02:00
Thomas Frøysa
df56d62acd fix(android): hold wake and wifi locks during downloads (#1546)
Some checks failed
🏗️ Build Apps / 🤖 Build Android APK (Phone) (push) Has been cancelled
🏗️ Build Apps / 🤖 Build Android APK (TV) (push) Has been cancelled
🏗️ Build Apps / 🍎 Build iOS IPA (Phone) (push) Has been cancelled
🔒 Lockfile Consistency Check / 🔍 Check bun.lock and package.json consistency (push) Has been cancelled
🏗️ Build Apps / 🍎 Build iOS IPA (Phone - Unsigned) (push) Has been cancelled
🏗️ Build Apps / 🍎 Build tvOS IPA (push) Has been cancelled
🏗️ Build Apps / 🍎 Build tvOS IPA (Unsigned) (push) Has been cancelled
🛡️ CodeQL Analysis / 🔎 Analyze with CodeQL (actions) (push) Has been cancelled
🛡️ CodeQL Analysis / 🔎 Analyze with CodeQL (javascript-typescript) (push) Has been cancelled
🚦 Security & Quality Gate / 🔍 Lint & Test (format) (push) Has been cancelled
🚦 Security & Quality Gate / 🔍 Lint & Test (i18n:check) (push) Has been cancelled
🏷️🔀Merge Conflict Labeler / 🏷️ Labeling Merge Conflicts (push) Has been cancelled
🚦 Security & Quality Gate / 📝 Validate PR Title (push) Has been cancelled
🚦 Security & Quality Gate / 🔍 Vulnerable Dependencies (push) Has been cancelled
🚦 Security & Quality Gate / 🚑 Expo Doctor Check (push) Has been cancelled
🚦 Security & Quality Gate / 🔍 Lint & Test (check) (push) Has been cancelled
🚦 Security & Quality Gate / 🔍 Lint & Test (lint) (push) Has been cancelled
🚦 Security & Quality Gate / 🔍 Lint & Test (typecheck) (push) Has been cancelled
🛡️ Trivy Security Scan / 🔎 Filesystem scan (push) Has been cancelled
Co-authored-by: Simon Eklundh <github@oakgrove.site>
Co-authored-by: Gauvain <contact@uruk.dev>
2026-06-17 13:26:40 +02:00
lance chant
872d14786e fix: apple top shelf currently cropping images (#1726)
Some checks failed
🏗️ Build Apps / 🤖 Build Android APK (Phone) (push) Has been cancelled
🏗️ Build Apps / 🤖 Build Android APK (TV) (push) Has been cancelled
🏗️ Build Apps / 🍎 Build iOS IPA (Phone) (push) Has been cancelled
🏗️ Build Apps / 🍎 Build iOS IPA (Phone - Unsigned) (push) Has been cancelled
🏗️ Build Apps / 🍎 Build tvOS IPA (push) Has been cancelled
🏗️ Build Apps / 🍎 Build tvOS IPA (Unsigned) (push) Has been cancelled
🔒 Lockfile Consistency Check / 🔍 Check bun.lock and package.json consistency (push) Has been cancelled
🛡️ CodeQL Analysis / 🔎 Analyze with CodeQL (actions) (push) Has been cancelled
🛡️ CodeQL Analysis / 🔎 Analyze with CodeQL (javascript-typescript) (push) Has been cancelled
🚦 Security & Quality Gate / 🔍 Vulnerable Dependencies (push) Has been cancelled
🚦 Security & Quality Gate / 🚑 Expo Doctor Check (push) Has been cancelled
🚦 Security & Quality Gate / 🔍 Lint & Test (check) (push) Has been cancelled
🚦 Security & Quality Gate / 🔍 Lint & Test (format) (push) Has been cancelled
🚦 Security & Quality Gate / 🔍 Lint & Test (i18n:check) (push) Has been cancelled
🚦 Security & Quality Gate / 🔍 Lint & Test (lint) (push) Has been cancelled
🚦 Security & Quality Gate / 🔍 Lint & Test (typecheck) (push) Has been cancelled
🏷️🔀Merge Conflict Labeler / 🏷️ Labeling Merge Conflicts (push) Has been cancelled
🚦 Security & Quality Gate / 📝 Validate PR Title (push) Has been cancelled
🛡️ Trivy Security Scan / 🔎 Filesystem scan (push) Has been cancelled
🌐 Translation Sync / sync-translations (push) Has been cancelled
Signed-off-by: Lance Chant <13349722+lancechant@users.noreply.github.com>
Co-authored-by: Gauvain <contact@uruk.dev>
2026-06-17 11:59:21 +02:00
github-actions[bot]
5bf07b4798 feat: New Crowdin Translations (#1699)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2026-06-17 11:32:38 +02:00
renovate[bot]
c3dceedad0 chore(deps): Update dependency lint-staged to v17.0.7 (#1607)
Co-authored-by: Gauvain <contact@uruk.dev>
2026-06-17 10:56:35 +02:00
Gauvain
bf3dc4a366 ci(artifact-comment): always-on dropdown, build ETA, signed/unsigned fix (#1734) 2026-06-17 09:39:43 +02:00
renovate[bot]
3e81291843 chore(deps): Update CI dependencies to v5.3.0 (#1737)
Some checks failed
🏗️ Build Apps / 🤖 Build Android APK (Phone) (push) Has been cancelled
🏗️ Build Apps / 🤖 Build Android APK (TV) (push) Has been cancelled
🏗️ Build Apps / 🍎 Build iOS IPA (Phone) (push) Has been cancelled
🏗️ Build Apps / 🍎 Build iOS IPA (Phone - Unsigned) (push) Has been cancelled
🏗️ Build Apps / 🍎 Build tvOS IPA (push) Has been cancelled
🏗️ Build Apps / 🍎 Build tvOS IPA (Unsigned) (push) Has been cancelled
🔒 Lockfile Consistency Check / 🔍 Check bun.lock and package.json consistency (push) Has been cancelled
🛡️ CodeQL Analysis / 🔎 Analyze with CodeQL (actions) (push) Has been cancelled
🛡️ CodeQL Analysis / 🔎 Analyze with CodeQL (javascript-typescript) (push) Has been cancelled
🏷️🔀Merge Conflict Labeler / 🏷️ Labeling Merge Conflicts (push) Has been cancelled
🌐 Translation Sync / sync-translations (push) Has been cancelled
🚦 Security & Quality Gate / 📝 Validate PR Title (push) Has been cancelled
🚦 Security & Quality Gate / 🔍 Vulnerable Dependencies (push) Has been cancelled
🚦 Security & Quality Gate / 🚑 Expo Doctor Check (push) Has been cancelled
🚦 Security & Quality Gate / 🔍 Lint & Test (check) (push) Has been cancelled
🚦 Security & Quality Gate / 🔍 Lint & Test (format) (push) Has been cancelled
🚦 Security & Quality Gate / 🔍 Lint & Test (i18n:check) (push) Has been cancelled
🚦 Security & Quality Gate / 🔍 Lint & Test (lint) (push) Has been cancelled
🚦 Security & Quality Gate / 🔍 Lint & Test (typecheck) (push) Has been cancelled
🛡️ Trivy Security Scan / 🔎 Filesystem scan (push) Has been cancelled
2026-06-16 23:28:08 +02:00
renovate[bot]
7703a1c76f chore(deps): Update CI dependencies to v2.16.3 (#1735) 2026-06-16 21:51:59 +02:00
59 changed files with 1444 additions and 3498 deletions

View File

@@ -0,0 +1,21 @@
name: Refresh PR build comment
description: >-
Nudge artifact-comment.yml (via workflow_dispatch) so the PR build-status
comment reflects live per-platform progress as each build job finishes.
runs:
using: composite
steps:
# workflow_dispatch fires even when triggered by the GITHUB_TOKEN, and
# artifact-comment's concurrency group collapses simultaneous nudges, so
# this can't spam the comment. Skipped on forks (their read-only token
# cannot dispatch). github.token is used because composite actions cannot
# read the secrets context.
- if: always() && github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository
continue-on-error: true
shell: bash
env:
GH_TOKEN: ${{ github.token }}
HEAD_REF: ${{ github.head_ref }}
REPO: ${{ github.repository }}
run: gh workflow run artifact-comment.yml --ref "$HEAD_REF" -R "$REPO"

View File

@@ -144,7 +144,7 @@ jobs:
) )
.sort((a, b) => new Date(b.created_at) - new Date(a.created_at)); .sort((a, b) => new Date(b.created_at) - new Date(a.created_at));
console.log(`Found ${buildRuns.length} non-cancelled build workflow runs for this commit`); console.log(`Found ${buildRuns.length} build workflow runs for this commit`);
// Log current status of each build for debugging // Log current status of each build for debugging
buildRuns.forEach(run => { buildRuns.forEach(run => {
@@ -184,21 +184,35 @@ jobs:
const latestAndroidRun = findBestRun('Android APK Build'); const latestAndroidRun = findBestRun('Android APK Build');
const latestIOSRun = findBestRun('iOS IPA Build'); const latestIOSRun = findBestRun('iOS IPA Build');
// Map our build targets to their job display names. Exact name is
// tried first so a signed target never collides with its
// "(Unsigned)" sibling (whose name contains the signed name).
const jobMappings = {
'Android Phone': ['🤖 Build Android APK (Phone)'],
'Android TV': ['🤖 Build Android APK (TV)'],
'iOS': ['🍎 Build iOS IPA (Phone)'],
'iOS Unsigned': ['🍎 Build iOS IPA (Phone - Unsigned)'],
'tvOS': ['🍎 Build tvOS IPA'],
'tvOS Unsigned': ['🍎 Build tvOS IPA (Unsigned)']
};
// Prefer an exact name match over a substring match so
// '...(Phone)' doesn't swallow '...(Phone - Unsigned)'.
const findJobForTarget = (jobs, jobNames) =>
jobs.find(j => jobNames.some(name => j.name === name)) ||
jobs.find(j => jobNames.some(name => j.name.includes(name)));
// Format a millisecond duration as "Xm Ys".
const fmtDuration = (ms) => {
const min = Math.floor(ms / 60000);
const sec = Math.floor((ms % 60000) / 1000);
return `${min}m ${sec}s`;
};
// For the consolidated workflow, get individual job statuses // For the consolidated workflow, get individual job statuses
if (latestAppsRun) { if (latestAppsRun) {
console.log(`Getting individual job statuses for run ${latestAppsRun.id} (status: ${latestAppsRun.status}, conclusion: ${latestAppsRun.conclusion || 'none'})`); console.log(`Getting individual job statuses for run ${latestAppsRun.id} (status: ${latestAppsRun.status}, conclusion: ${latestAppsRun.conclusion || 'none'})`);
// Map job names to our build targets. Declared outside the try so
// the catch fallback can reuse the same keys.
const jobMappings = {
'Android Phone': ['🤖 Build Android APK (Phone)', 'build-android-phone'],
'Android TV': ['🤖 Build Android APK (TV)', 'build-android-tv'],
'iOS': ['🍎 Build iOS IPA (Phone)', 'build-ios-phone'],
'iOS Unsigned': ['🍎 Build iOS IPA (Phone - Unsigned)', 'build-ios-phone-unsigned'],
'tvOS': ['🍎 Build tvOS IPA', 'build-ios-tv'],
'tvOS Unsigned': ['🍎 Build tvOS IPA (Unsigned)', 'build-ios-tv-unsigned']
};
try { try {
// Get all jobs for this workflow run // Get all jobs for this workflow run
const { data: jobs } = await github.rest.actions.listJobsForWorkflowRun({ const { data: jobs } = await github.rest.actions.listJobsForWorkflowRun({
@@ -229,9 +243,7 @@ jobs:
// Create individual status for each job // Create individual status for each job
for (const [platform, jobNames] of Object.entries(jobMappings)) { for (const [platform, jobNames] of Object.entries(jobMappings)) {
const job = jobs.jobs.find(j => const job = findJobForTarget(jobs.jobs, jobNames);
jobNames.some(name => j.name.includes(name) || j.name === name)
);
if (job) { if (job) {
buildStatuses[platform] = { buildStatuses[platform] = {
@@ -358,6 +370,43 @@ jobs:
console.log(`- Artifact: ${artifact.name} (from run ${artifact.workflow_run.id})`); console.log(`- Artifact: ${artifact.name} (from run ${artifact.workflow_run.id})`);
}); });
// Pull per-job durations from the latest successful develop build so
// in-progress / queued targets can show a realistic ETA instead of
// an open-ended spinner. Best-effort: any failure just drops the ETA.
let referenceDurations = {};
try {
const { data: devRuns } = await github.rest.actions.listWorkflowRuns({
owner: context.repo.owner,
repo: context.repo.repo,
workflow_id: 'build-apps.yml',
branch: 'develop',
status: 'success',
per_page: 1
});
if (devRuns.workflow_runs.length > 0) {
const refRun = devRuns.workflow_runs[0];
const { data: refJobs } = await github.rest.actions.listJobsForWorkflowRun({
owner: context.repo.owner,
repo: context.repo.repo,
run_id: refRun.id
});
for (const [platform, jobNames] of Object.entries(jobMappings)) {
const job = findJobForTarget(refJobs.jobs, jobNames);
if (job && job.conclusion === 'success' && job.started_at && job.completed_at) {
referenceDurations[platform] = new Date(job.completed_at) - new Date(job.started_at);
}
}
console.log(`Reference durations from develop run ${refRun.id}:`,
Object.fromEntries(Object.entries(referenceDurations).map(([k, v]) => [k, fmtDuration(v)])));
} else {
console.log('No successful develop build found for ETA reference');
}
} catch (error) {
console.log('Failed to fetch develop reference durations:', error.message);
}
// Build comment body with progressive status for individual builds // Build comment body with progressive status for individual builds
let commentBody = `## 🔧 Build Status for PR #${pr.number}\n\n`; let commentBody = `## 🔧 Build Status for PR #${pr.number}\n\n`;
commentBody += `🔗 **Commit**: [\`${targetCommitSha.substring(0, 7)}\`](https://github.com/${context.repo.owner}/${context.repo.repo}/commit/${targetCommitSha})\n\n`; // Progressive build status and downloads table commentBody += `🔗 **Commit**: [\`${targetCommitSha.substring(0, 7)}\`](https://github.com/${context.repo.owner}/${context.repo.repo}/commit/${targetCommitSha})\n\n`; // Progressive build status and downloads table
@@ -369,9 +418,9 @@ jobs:
const buildTargets = [ const buildTargets = [
{ name: 'Android Phone', platform: '🤖', device: '📱 Phone', statusKey: 'Android Phone', artifactPattern: /android.*phone/i }, { name: 'Android Phone', platform: '🤖', device: '📱 Phone', statusKey: 'Android Phone', artifactPattern: /android.*phone/i },
{ name: 'Android TV', platform: '🤖', device: '📺 TV', statusKey: 'Android TV', artifactPattern: /android.*tv/i }, { name: 'Android TV', platform: '🤖', device: '📺 TV', statusKey: 'Android TV', artifactPattern: /android.*tv/i },
{ name: 'iOS', platform: '🍎', device: '📱 Phone', statusKey: 'iOS', artifactPattern: /ios.*phone.*ipa(?!.*unsigned)/i }, { name: 'iOS', platform: '🍎', device: '📱 Phone', statusKey: 'iOS', artifactPattern: /^(?!.*unsigned).*ios.*phone.*ipa/i },
{ name: 'iOS Unsigned', platform: '🍎', device: '📱 Phone Unsigned', statusKey: 'iOS Unsigned', artifactPattern: /ios.*phone.*unsigned/i }, { name: 'iOS Unsigned', platform: '🍎', device: '📱 Phone Unsigned', statusKey: 'iOS Unsigned', artifactPattern: /ios.*phone.*unsigned/i },
{ name: 'tvOS', platform: '🍎', device: '📺 TV', statusKey: 'tvOS', artifactPattern: /ios.*tv.*ipa(?!.*unsigned)/i }, { name: 'tvOS', platform: '🍎', device: '📺 TV', statusKey: 'tvOS', artifactPattern: /^(?!.*unsigned).*ios.*tv.*ipa/i },
{ name: 'tvOS Unsigned', platform: '🍎', device: '📺 TV Unsigned', statusKey: 'tvOS Unsigned', artifactPattern: /ios.*tv.*unsigned/i } { name: 'tvOS Unsigned', platform: '🍎', device: '📺 TV Unsigned', statusKey: 'tvOS Unsigned', artifactPattern: /ios.*tv.*unsigned/i }
]; ];
@@ -407,9 +456,7 @@ jobs:
let durationInfo = ''; let durationInfo = '';
if (matchingStatus.started_at && matchingStatus.completed_at) { if (matchingStatus.started_at && matchingStatus.completed_at) {
const durationMs = new Date(matchingStatus.completed_at) - new Date(matchingStatus.started_at); const durationMs = new Date(matchingStatus.completed_at) - new Date(matchingStatus.started_at);
const durationMin = Math.floor(durationMs / 60000); durationInfo = ` - ${fmtDuration(durationMs)}`;
const durationSec = Math.floor((durationMs % 60000) / 1000);
durationInfo = ` - ${durationMin}m ${durationSec}s`;
} }
downloadLink = `[📥 Download ${fileType}](${directLink}) ${sizeInfo}${durationInfo}`; downloadLink = `[📥 Download ${fileType}](${directLink}) ${sizeInfo}${durationInfo}`;
@@ -421,10 +468,16 @@ jobs:
downloadLink = '*Build cancelled*'; downloadLink = '*Build cancelled*';
} else if (matchingStatus.status === 'in_progress') { } else if (matchingStatus.status === 'in_progress') {
status = `🔄 [Building...](${matchingStatus.url})`; status = `🔄 [Building...](${matchingStatus.url})`;
downloadLink = '*Build in progress...*'; const ref = referenceDurations[target.statusKey];
downloadLink = ref
? `*Building… ~${fmtDuration(ref)} (avg on develop)*`
: '*Build in progress...*';
} else if (matchingStatus.status === 'queued') { } else if (matchingStatus.status === 'queued') {
status = `⏳ [Queued](${matchingStatus.url})`; status = `⏳ [Queued](${matchingStatus.url})`;
downloadLink = '*Waiting to start...*'; const ref = referenceDurations[target.statusKey];
downloadLink = ref
? `*Waiting to start… ~${fmtDuration(ref)} once running (avg on develop)*`
: '*Waiting to start...*';
} else if (matchingStatus.status === 'completed' && !matchingStatus.conclusion) { } else if (matchingStatus.status === 'completed' && !matchingStatus.conclusion) {
// Workflow completed but conclusion not yet available (rare edge case) // Workflow completed but conclusion not yet available (rare edge case)
status = `🔄 [Finishing...](${matchingStatus.url})`; status = `🔄 [Finishing...](${matchingStatus.url})`;
@@ -445,26 +498,27 @@ jobs:
commentBody += `\n`; commentBody += `\n`;
// Show installation instructions if we have any artifacts // Static rundown of the build optimisations + what each artifact
// installs on. Always shown (even mid-build) so testers know what
// to expect before downloads are ready.
commentBody += `<details>\n`;
commentBody += `<summary>📦 Build details &amp; device compatibility</summary>\n\n`;
commentBody += `These CI builds are trimmed for size and speed. What that means for installing them:\n\n`;
commentBody += `| Artifact | Architectures | Installs on |\n`;
commentBody += `|---|---|---|\n`;
commentBody += `| 🤖 Android Phone APK | \`arm64-v8a\` | Every 64-bit Android phone (all since ~2017). **Not** an x86_64 emulator or a 32-bit device. |\n`;
commentBody += `| 📺 Android TV APK | \`arm64-v8a\` + \`armeabi-v7a\` | Modern boxes **and** older / cheap 32-bit Android TV sticks. No x86_64. |\n`;
commentBody += `| 🍎 iOS / tvOS IPA | \`arm64\` | iPhone / Apple TV (all current devices). |\n\n`;
commentBody += `**Why no x86_64?** That slice only runs on Android emulators / Chromebooks, never a real phone or TV box — dropping it shrinks the APK and speeds up the build. Local \`bun run android\` is unaffected (it still builds x86_64 from \`app.json\`).\n\n`;
commentBody += `**Runners:** Android on \`ubuntu-26.04\`; iOS / tvOS on Apple Silicon (\`macos-26\`). The size/speed win comes from the ABI trim above, not the runner.\n`;
commentBody += `</details>\n\n`;
// Installation instructions only matter once something is downloadable.
if (allArtifacts.length > 0) { if (allArtifacts.length > 0) {
commentBody += `### 🔧 Installation Instructions\n\n`; commentBody += `### 🔧 Installation Instructions\n\n`;
commentBody += `- **Android APK**: Download and install directly on your device (enable "Install from unknown sources")\n`; commentBody += `- **Android APK**: Download and install directly on your device (enable "Install from unknown sources")\n`;
commentBody += `- **iOS IPA**: Install using [AltStore](https://altstore.io/), [Sideloadly](https://sideloadly.io/), or Xcode\n\n`; commentBody += `- **iOS IPA**: Install using [AltStore](https://altstore.io/), [Sideloadly](https://sideloadly.io/), or Xcode\n\n`;
commentBody += `> ⚠️ **Note**: Artifacts expire in 7 days from build date\n\n`; commentBody += `> ⚠️ **Note**: Artifacts expire in 7 days from build date\n\n`;
// Collapsible rundown of the build optimisations + what each
// artifact actually installs on, so testers grab the right file.
commentBody += `<details>\n`;
commentBody += `<summary>📦 Build details &amp; device compatibility</summary>\n\n`;
commentBody += `These CI builds are trimmed for size and speed. What that means for installing them:\n\n`;
commentBody += `| Artifact | Architectures | Installs on |\n`;
commentBody += `|---|---|---|\n`;
commentBody += `| 🤖 Android Phone APK | \`arm64-v8a\` | Every 64-bit Android phone (all since ~2017). **Not** an x86_64 emulator or a 32-bit device. |\n`;
commentBody += `| 📺 Android TV APK | \`arm64-v8a\` + \`armeabi-v7a\` | Modern boxes **and** older / cheap 32-bit Android TV sticks. No x86_64. |\n`;
commentBody += `| 🍎 iOS / tvOS IPA | \`arm64\` | iPhone / Apple TV (all current devices). |\n\n`;
commentBody += `**Why no x86_64?** That slice only runs on Android emulators / Chromebooks, never a real phone or TV box — dropping it shrinks the APK and speeds up the build. Local \`bun run android\` is unaffected (it still builds x86_64 from \`app.json\`).\n\n`;
commentBody += `**Runners:** Android on \`ubuntu-26.04\`; iOS / tvOS on Apple Silicon (\`macos-26\`). The size/speed win comes from the ABI trim above, not the runner.\n`;
commentBody += `</details>\n\n`;
} else { } else {
commentBody += `⏳ **Builds are starting up...** This comment will update automatically as each build completes.\n\n`; commentBody += `⏳ **Builds are starting up...** This comment will update automatically as each build completes.\n\n`;
} }

View File

@@ -27,6 +27,7 @@ jobs:
name: 🤖 Build Android APK (Phone) name: 🤖 Build Android APK (Phone)
permissions: permissions:
contents: read contents: read
actions: write # dispatch artifact-comment.yml to refresh the PR comment
steps: steps:
- name: 🗑️ Free Disk Space - name: 🗑️ Free Disk Space
@@ -42,7 +43,7 @@ jobs:
swap-storage: false swap-storage: false
- name: 📥 Checkout code - name: 📥 Checkout code
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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
@@ -72,7 +73,7 @@ jobs:
# ubuntu-26.04 defaults to JDK 25, which breaks the RN/AGP native build # ubuntu-26.04 defaults to JDK 25, which breaks the RN/AGP native build
# (Kotlin falls back to JVM_23, the foojay toolchain + CMake configure # (Kotlin falls back to JVM_23, the foojay toolchain + CMake configure
# fail). Pin Temurin 17 for a deterministic Android build. # fail). Pin Temurin 17 for a deterministic Android build.
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5.3.0
with: with:
distribution: temurin distribution: temurin
java-version: "17" java-version: "17"
@@ -117,12 +118,16 @@ jobs:
android/app/build/outputs/apk/release/*.apk android/app/build/outputs/apk/release/*.apk
retention-days: 7 retention-days: 7
- name: 🔄 Refresh PR build comment
uses: ./.github/actions/refresh-pr-comment
build-android-tv: build-android-tv:
if: (!contains(github.event.head_commit.message, '[skip ci]')) if: (!contains(github.event.head_commit.message, '[skip ci]'))
runs-on: ubuntu-26.04 runs-on: ubuntu-26.04
name: 🤖 Build Android APK (TV) name: 🤖 Build Android APK (TV)
permissions: permissions:
contents: read contents: read
actions: write # dispatch artifact-comment.yml to refresh the PR comment
steps: steps:
- name: 🗑️ Free Disk Space - name: 🗑️ Free Disk Space
@@ -138,7 +143,7 @@ jobs:
swap-storage: false swap-storage: false
- name: 📥 Checkout code - name: 📥 Checkout code
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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
@@ -168,7 +173,7 @@ jobs:
# ubuntu-26.04 defaults to JDK 25, which breaks the RN/AGP native build # ubuntu-26.04 defaults to JDK 25, which breaks the RN/AGP native build
# (Kotlin falls back to JVM_23, the foojay toolchain + CMake configure # (Kotlin falls back to JVM_23, the foojay toolchain + CMake configure
# fail). Pin Temurin 17 for a deterministic Android build. # fail). Pin Temurin 17 for a deterministic Android build.
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5.3.0
with: with:
distribution: temurin distribution: temurin
java-version: "17" java-version: "17"
@@ -212,16 +217,20 @@ jobs:
android/app/build/outputs/apk/release/*.apk android/app/build/outputs/apk/release/*.apk
retention-days: 7 retention-days: 7
- name: 🔄 Refresh PR build comment
uses: ./.github/actions/refresh-pr-comment
build-ios-phone: build-ios-phone:
if: (!contains(github.event.head_commit.message, '[skip ci]') && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == 'streamyfin/streamyfin')) if: (!contains(github.event.head_commit.message, '[skip ci]') && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == 'streamyfin/streamyfin'))
runs-on: macos-26 runs-on: macos-26
name: 🍎 Build iOS IPA (Phone) name: 🍎 Build iOS IPA (Phone)
permissions: permissions:
contents: read contents: read
actions: write # dispatch artifact-comment.yml to refresh the PR comment
steps: steps:
- name: 📥 Checkout code - name: 📥 Checkout code
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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
@@ -280,16 +289,20 @@ jobs:
path: build-*.ipa path: build-*.ipa
retention-days: 7 retention-days: 7
- name: 🔄 Refresh PR build comment
uses: ./.github/actions/refresh-pr-comment
build-ios-phone-unsigned: build-ios-phone-unsigned:
if: (!contains(github.event.head_commit.message, '[skip ci]')) if: (!contains(github.event.head_commit.message, '[skip ci]'))
runs-on: macos-26 runs-on: macos-26
name: 🍎 Build iOS IPA (Phone - Unsigned) name: 🍎 Build iOS IPA (Phone - Unsigned)
permissions: permissions:
contents: read contents: read
actions: write # dispatch artifact-comment.yml to refresh the PR comment
steps: steps:
- name: 📥 Checkout code - name: 📥 Checkout code
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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
@@ -339,6 +352,9 @@ jobs:
path: build/*.ipa path: build/*.ipa
retention-days: 7 retention-days: 7
- name: 🔄 Refresh PR build comment
uses: ./.github/actions/refresh-pr-comment
build-ios-tv: build-ios-tv:
# Disabled: EAS has no provisioning profiles / distribution cert for the tvOS # Disabled: EAS has no provisioning profiles / distribution cert for the tvOS
# targets (app + StreamyfinTopShelf extension), so non-interactive signed # targets (app + StreamyfinTopShelf extension), so non-interactive signed
@@ -349,10 +365,11 @@ jobs:
name: 🍎 Build tvOS IPA name: 🍎 Build tvOS IPA
permissions: permissions:
contents: read contents: read
actions: write # dispatch artifact-comment.yml to refresh the PR comment
steps: steps:
- name: 📥 Checkout code - name: 📥 Checkout code
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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
@@ -418,10 +435,11 @@ jobs:
name: 🍎 Build tvOS IPA (Unsigned) name: 🍎 Build tvOS IPA (Unsigned)
permissions: permissions:
contents: read contents: read
actions: write # dispatch artifact-comment.yml to refresh the PR comment
steps: steps:
- name: 📥 Checkout code - name: 📥 Checkout code
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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
@@ -470,3 +488,6 @@ jobs:
name: streamyfin-ios-tv-unsigned-ipa-${{ env.DATE_TAG }} name: streamyfin-ios-tv-unsigned-ipa-${{ env.DATE_TAG }}
path: build/*.ipa path: build/*.ipa
retention-days: 7 retention-days: 7
- name: 🔄 Refresh PR build comment
uses: ./.github/actions/refresh-pr-comment

View File

@@ -19,7 +19,7 @@ jobs:
steps: steps:
- name: 📥 Checkout repository - name: 📥 Checkout repository
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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

View File

@@ -27,7 +27,7 @@ jobs:
steps: steps:
- name: 📥 Checkout repository - name: 📥 Checkout repository
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: 🏁 Initialize CodeQL - name: 🏁 Initialize CodeQL
uses: github/codeql-action/init@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2 uses: github/codeql-action/init@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2

View File

@@ -23,12 +23,12 @@ jobs:
steps: steps:
- name: 📥 Checkout Repository - name: 📥 Checkout Repository
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with: with:
fetch-depth: 0 fetch-depth: 0
- name: 🌐 Sync Translations with Crowdin - name: 🌐 Sync Translations with Crowdin
uses: crowdin/github-action@8868a33591d21088edfc398968173a3b98d51706 # v2.16.2 uses: crowdin/github-action@52aa776766211d83d975df51f3b9c53c2f8ba35f # v2.16.3
with: with:
upload_sources: true upload_sources: true
upload_translations: true upload_translations: true

View File

@@ -21,7 +21,7 @@ jobs:
contents: read contents: read
steps: steps:
- name: 📥 Checkout repository - name: 📥 Checkout repository
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: 🍞 Setup Bun - name: 🍞 Setup Bun
uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0

View File

@@ -51,7 +51,7 @@ jobs:
contents: read contents: read
steps: steps:
- name: Checkout Repository - name: Checkout Repository
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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
@@ -68,7 +68,7 @@ jobs:
runs-on: ubuntu-26.04 runs-on: ubuntu-26.04
steps: steps:
- name: 🛒 Checkout repository - name: 🛒 Checkout repository
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with: with:
ref: ${{ github.event.pull_request.head.sha || github.sha }} ref: ${{ github.event.pull_request.head.sha || github.sha }}
submodules: recursive submodules: recursive
@@ -104,7 +104,7 @@ jobs:
steps: steps:
- name: "📥 Checkout PR code" - name: "📥 Checkout PR code"
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with: with:
ref: ${{ github.event.pull_request.head.sha || github.sha }} ref: ${{ github.event.pull_request.head.sha || github.sha }}
submodules: recursive submodules: recursive
@@ -114,7 +114,7 @@ jobs:
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with: with:
# renovate: datasource=node-version depName=node versioning=node # renovate: datasource=node-version depName=node versioning=node
node-version: "24.16.0" node-version: "24.17.0"
- name: "🍞 Setup Bun" - name: "🍞 Setup Bun"
uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0

View File

@@ -64,7 +64,7 @@ jobs:
steps: steps:
- name: 📥 Checkout code - name: 📥 Checkout code
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with: with:
fetch-depth: 0 fetch-depth: 0
submodules: recursive submodules: recursive
@@ -184,7 +184,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@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with: with:
fetch-depth: 0 fetch-depth: 0
show-progress: false show-progress: false

View File

@@ -27,7 +27,7 @@ jobs:
security-events: write # upload SARIF to code scanning security-events: write # upload SARIF to code scanning
steps: steps:
- name: 📥 Checkout repository - name: 📥 Checkout repository
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
# Trivy's own action caches the vulnerability DB + binary internally # Trivy's own action caches the vulnerability DB + binary internally
# (cache-trivy-* / trivy-binary-* entries), so no manual ~/.cache/trivy # (cache-trivy-* / trivy-binary-* entries), so no manual ~/.cache/trivy

View File

@@ -26,7 +26,7 @@ jobs:
pull-requests: write pull-requests: write
steps: steps:
- name: 📥 Checkout repository - name: 📥 Checkout repository
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with: with:
# On `release` events GITHUB_SHA is the tagged commit — without this the # On `release` events GITHUB_SHA is the tagged commit — without this the
# script would regenerate the form from the tag's (stale) copy and the bot # script would regenerate the form from the tag's (stale) copy and the bot

View File

@@ -36,6 +36,7 @@ import {
InactivityTimeout, InactivityTimeout,
type MpvCacheMode, type MpvCacheMode,
type MpvVoDriver, type MpvVoDriver,
type SegmentSkipMode,
TVTypographyScale, TVTypographyScale,
useSettings, useSettings,
} from "@/utils/atoms/settings"; } from "@/utils/atoms/settings";
@@ -47,6 +48,22 @@ import {
} from "@/utils/secureCredentials"; } from "@/utils/secureCredentials";
import { clearTopShelfCacheSafely } from "@/utils/topshelf/cache"; import { clearTopShelfCacheSafely } from "@/utils/topshelf/cache";
const SEGMENT_SKIP_ROWS: {
key:
| "skipIntro"
| "skipOutro"
| "skipRecap"
| "skipCommercial"
| "skipPreview";
labelKey: string;
}[] = [
{ key: "skipIntro", labelKey: "skip_intro" },
{ key: "skipOutro", labelKey: "skip_outro" },
{ key: "skipRecap", labelKey: "skip_recap" },
{ key: "skipCommercial", labelKey: "skip_commercial" },
{ key: "skipPreview", labelKey: "skip_preview" },
];
export default function SettingsTV() { export default function SettingsTV() {
const { t } = useTranslation(); const { t } = useTranslation();
const insets = useSafeAreaInsets(); const insets = useSafeAreaInsets();
@@ -535,6 +552,30 @@ export default function SettingsTV() {
); );
}, [inactivityTimeoutOptions, t]); }, [inactivityTimeoutOptions, t]);
// Segment skip: same auto/ask/none choice for every segment type.
const segmentSkipModeLabel = (mode: SegmentSkipMode) =>
t(`home.settings.other.segment_skip_${mode}`);
const buildSegmentSkipOptions = (
current: SegmentSkipMode,
): TVOptionItem<SegmentSkipMode>[] => [
{
label: t("home.settings.other.segment_skip_auto"),
value: "auto",
selected: current === "auto",
},
{
label: t("home.settings.other.segment_skip_ask"),
value: "ask",
selected: current === "ask",
},
{
label: t("home.settings.other.segment_skip_none"),
value: "none",
selected: current === "none",
},
];
return ( return (
<View style={{ flex: 1, backgroundColor: "#000000" }}> <View style={{ flex: 1, backgroundColor: "#000000" }}>
<View style={{ flex: 1 }}> <View style={{ flex: 1 }}>
@@ -819,6 +860,30 @@ export default function SettingsTV() {
formatValue={(v) => `${v} MB`} formatValue={(v) => `${v} MB`}
/> />
{/* Segment Skip Section */}
<TVSectionHeader
title={t("home.settings.other.segment_skip_settings")}
/>
{SEGMENT_SKIP_ROWS.map((row, index) => {
const current = (settings[row.key] ?? "ask") as SegmentSkipMode;
const rowLabel = t(`home.settings.other.${row.labelKey}`);
return (
<TVSettingsOptionButton
key={row.key}
label={rowLabel}
value={segmentSkipModeLabel(current)}
isFirst={index === 0}
onPress={() =>
showOptions({
title: rowLabel,
options: buildSegmentSkipOptions(current),
onSelect: (value) => updateSettings({ [row.key]: value }),
})
}
/>
);
})}
{/* Appearance Section */} {/* Appearance Section */}
<TVSectionHeader title={t("home.settings.appearance.title")} /> <TVSectionHeader title={t("home.settings.appearance.title")} />
<TVSettingsOptionButton <TVSettingsOptionButton

View File

@@ -0,0 +1,101 @@
import { Ionicons } from "@expo/vector-icons";
import { useNavigation } from "expo-router";
import { TFunction } from "i18next";
import { useEffect, useMemo } from "react";
import { useTranslation } from "react-i18next";
import { View } from "react-native";
import { Text } from "@/components/common/Text";
import { ListGroup } from "@/components/list/ListGroup";
import { ListItem } from "@/components/list/ListItem";
import { PlatformDropdown } from "@/components/PlatformDropdown";
import { SegmentSkipMode, useSettings } from "@/utils/atoms/settings";
type SkipSettingKey =
| "skipIntro"
| "skipOutro"
| "skipRecap"
| "skipCommercial"
| "skipPreview";
const SEGMENTS: ReadonlyArray<{ key: SkipSettingKey; labelKey: string }> = [
{ key: "skipIntro", labelKey: "skip_intro" },
{ key: "skipOutro", labelKey: "skip_outro" },
{ key: "skipRecap", labelKey: "skip_recap" },
{ key: "skipCommercial", labelKey: "skip_commercial" },
{ key: "skipPreview", labelKey: "skip_preview" },
];
const SEGMENT_SKIP_OPTIONS = (
t: TFunction<"translation", undefined>,
): Array<{ label: string; value: SegmentSkipMode }> => [
{ label: t("home.settings.other.segment_skip_auto"), value: "auto" },
{ label: t("home.settings.other.segment_skip_ask"), value: "ask" },
{ label: t("home.settings.other.segment_skip_none"), value: "none" },
];
export default function SegmentSkipPage() {
const { settings, updateSettings, pluginSettings } = useSettings();
const { t } = useTranslation();
const navigation = useNavigation();
useEffect(() => {
navigation.setOptions({
title: t("home.settings.other.segment_skip_settings"),
});
}, [navigation, t]);
const options = useMemo(() => SEGMENT_SKIP_OPTIONS(t), [t]);
if (!settings) return null;
return (
<View className='px-4'>
<ListGroup>
{SEGMENTS.map(({ key, labelKey }) => {
const current = settings[key];
const locked = pluginSettings?.[key]?.locked ?? false;
const groups = [
{
options: options.map((o) => ({
type: "radio" as const,
label: o.label,
value: o.value,
selected: o.value === current,
disabled: locked,
onPress: () => {
if (locked) return;
updateSettings({ [key]: o.value });
},
})),
},
];
return (
<ListItem
key={key}
title={t(`home.settings.other.${labelKey}`)}
subtitle={t(`home.settings.other.${labelKey}_description`)}
disabled={locked}
>
<PlatformDropdown
groups={groups}
trigger={
<View className='flex flex-row items-center justify-between py-1.5 pl-3'>
<Text className='mr-1 text-[#8E8D91]'>
{t(`home.settings.other.segment_skip_${current}`)}
</Text>
<Ionicons
name='chevron-expand-sharp'
size={18}
color='#5A5960'
/>
</View>
}
title={t(`home.settings.other.${labelKey}`)}
/>
</ListItem>
);
})}
</ListGroup>
</View>
);
}

View File

@@ -16,7 +16,7 @@
"@react-native-community/netinfo": "^12.0.0", "@react-native-community/netinfo": "^12.0.0",
"@react-navigation/material-top-tabs": "7.4.28", "@react-navigation/material-top-tabs": "7.4.28",
"@react-navigation/native": "^7.2.5", "@react-navigation/native": "^7.2.5",
"@shopify/flash-list": "2.0.2", "@shopify/flash-list": "2.0.3",
"@tanstack/query-sync-storage-persister": "^5.100.14", "@tanstack/query-sync-storage-persister": "^5.100.14",
"@tanstack/react-pacer": "^0.19.1", "@tanstack/react-pacer": "^0.19.1",
"@tanstack/react-query": "5.100.14", "@tanstack/react-query": "5.100.14",
@@ -111,7 +111,7 @@
"cross-env": "10.1.0", "cross-env": "10.1.0",
"expo-doctor": "1.19.9", "expo-doctor": "1.19.9",
"husky": "9.1.7", "husky": "9.1.7",
"lint-staged": "17.0.5", "lint-staged": "17.0.7",
"react-test-renderer": "19.2.3", "react-test-renderer": "19.2.3",
"typescript": "6.0.3", "typescript": "6.0.3",
}, },
@@ -536,7 +536,7 @@
"@react-navigation/routers": ["@react-navigation/routers@7.6.0", "", { "dependencies": { "nanoid": "^3.3.11" } }, "sha512-lblhDXfS75jLc7G2K7BZGM+7cjqQXk13X/MA4fq/12r62zM+fBhhreLzYflSitrDDXFRJpSvJXy0ziiGU04Xow=="], "@react-navigation/routers": ["@react-navigation/routers@7.6.0", "", { "dependencies": { "nanoid": "^3.3.11" } }, "sha512-lblhDXfS75jLc7G2K7BZGM+7cjqQXk13X/MA4fq/12r62zM+fBhhreLzYflSitrDDXFRJpSvJXy0ziiGU04Xow=="],
"@shopify/flash-list": ["@shopify/flash-list@2.0.2", "", { "dependencies": { "tslib": "2.8.1" }, "peerDependencies": { "@babel/runtime": "*", "react": "*", "react-native": "*" } }, "sha512-zhlrhA9eiuEzja4wxVvotgXHtqd3qsYbXkQ3rsBfOgbFA9BVeErpDE/yEwtlIviRGEqpuFj/oU5owD6ByaNX+w=="], "@shopify/flash-list": ["@shopify/flash-list@2.0.3", "", { "dependencies": { "tslib": "2.8.1" }, "peerDependencies": { "@babel/runtime": "*", "react": "*", "react-native": "*" } }, "sha512-jUlHuZFoPdqRCDvOqsb2YkTttRPyV8Tb/EjCx3gE2wjr4UTM+fE0Ltv9bwBg0K7yo/SxRNXaW7xu5utusRb0xA=="],
"@sideway/address": ["@sideway/address@4.1.5", "", { "dependencies": { "@hapi/hoek": "^9.0.0" } }, "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q=="], "@sideway/address": ["@sideway/address@4.1.5", "", { "dependencies": { "@hapi/hoek": "^9.0.0" } }, "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q=="],
@@ -1270,7 +1270,7 @@
"lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="],
"lint-staged": ["lint-staged@17.0.5", "", { "dependencies": { "listr2": "^10.2.1", "picomatch": "^4.0.4", "string-argv": "^0.3.2", "tinyexec": "^1.1.2" }, "optionalDependencies": { "yaml": "^2.8.4" }, "bin": { "lint-staged": "bin/lint-staged.js" } }, "sha512-d12yC+/e8RhBjZtaxZn71FyrgU/P5e+uAPifhCLwdosQZP/zamSdKRWDC30ocVIbzDKiFG1McHc/LUgB92GIPw=="], "lint-staged": ["lint-staged@17.0.7", "", { "dependencies": { "listr2": "^10.2.1", "picomatch": "^4.0.4", "string-argv": "^0.3.2", "tinyexec": "^1.2.4" }, "optionalDependencies": { "yaml": "^2.9.0" }, "bin": { "lint-staged": "bin/lint-staged.js" } }, "sha512-JrSobt+tW3rH8IOMi8tDZd3foorM5yPEkLD/V2NxobgHrFfHWGee4MOLVuZeScgxftEwbHrPHIFA/ZL+nUJeuA=="],
"listr2": ["listr2@10.2.1", "", { "dependencies": { "cli-truncate": "^5.2.0", "eventemitter3": "^5.0.4", "log-update": "^6.1.0", "rfdc": "^1.4.1", "wrap-ansi": "^10.0.0" } }, "sha512-7I5knELsJKTUjXG+A6BkKAiGkW1i25fNa/xlUl9hFtk15WbE9jndA89xu5FzQKrY5llajE1hfZZFMILXkDHk/Q=="], "listr2": ["listr2@10.2.1", "", { "dependencies": { "cli-truncate": "^5.2.0", "eventemitter3": "^5.0.4", "log-update": "^6.1.0", "rfdc": "^1.4.1", "wrap-ansi": "^10.0.0" } }, "sha512-7I5knELsJKTUjXG+A6BkKAiGkW1i25fNa/xlUl9hFtk15WbE9jndA89xu5FzQKrY5llajE1hfZZFMILXkDHk/Q=="],

View File

@@ -8,6 +8,7 @@ import { BITRATES } from "@/components/BitrateSelector";
import { PlatformDropdown } from "@/components/PlatformDropdown"; import { PlatformDropdown } from "@/components/PlatformDropdown";
import { PLAYBACK_SPEEDS } from "@/components/PlaybackSpeedSelector"; import { PLAYBACK_SPEEDS } from "@/components/PlaybackSpeedSelector";
import DisabledSetting from "@/components/settings/DisabledSetting"; import DisabledSetting from "@/components/settings/DisabledSetting";
import useRouter from "@/hooks/useAppRouter";
import * as ScreenOrientation from "@/packages/expo-screen-orientation"; import * as ScreenOrientation from "@/packages/expo-screen-orientation";
import { ScreenOrientationEnum, useSettings } from "@/utils/atoms/settings"; import { ScreenOrientationEnum, useSettings } from "@/utils/atoms/settings";
import { Text } from "../common/Text"; import { Text } from "../common/Text";
@@ -15,6 +16,7 @@ import { ListGroup } from "../list/ListGroup";
import { ListItem } from "../list/ListItem"; import { ListItem } from "../list/ListItem";
export const PlaybackControlsSettings: React.FC = () => { export const PlaybackControlsSettings: React.FC = () => {
const router = useRouter();
const { settings, updateSettings, pluginSettings } = useSettings(); const { settings, updateSettings, pluginSettings } = useSettings();
const { t } = useTranslation(); const { t } = useTranslation();
@@ -251,6 +253,15 @@ export const PlaybackControlsSettings: React.FC = () => {
title={t("home.settings.other.max_auto_play_episode_count")} title={t("home.settings.other.max_auto_play_episode_count")}
/> />
</ListItem> </ListItem>
{/* Media Segment Skip Settings */}
<ListItem
title={t("home.settings.other.segment_skip_settings")}
subtitle={t("home.settings.other.segment_skip_settings_description")}
onPress={() => router.push("/settings/segment-skip/page")}
>
<Ionicons name='chevron-forward' size={20} color='#8E8D91' />
</ListItem>
</ListGroup> </ListGroup>
</DisabledSetting> </DisabledSetting>
); );

View File

@@ -19,10 +19,27 @@ import { Text } from "@/components/common/Text";
import { scaleSize } from "@/utils/scaleSize"; import { scaleSize } from "@/utils/scaleSize";
import { useTVFocusAnimation } from "./hooks/useTVFocusAnimation"; import { useTVFocusAnimation } from "./hooks/useTVFocusAnimation";
export type TVSkipSegmentType =
| "intro"
| "credits"
| "outro"
| "recap"
| "commercial"
| "preview";
const SEGMENT_LABEL_KEY: Record<TVSkipSegmentType, string> = {
intro: "player.skip_intro",
credits: "player.skip_credits",
outro: "player.skip_outro",
recap: "player.skip_recap",
commercial: "player.skip_commercial",
preview: "player.skip_preview",
};
export interface TVSkipSegmentCardProps { export interface TVSkipSegmentCardProps {
show: boolean; show: boolean;
onPress: () => void; onPress: () => void;
type: "intro" | "credits"; type: TVSkipSegmentType;
/** Whether controls are visible - affects card position */ /** Whether controls are visible - affects card position */
controlsVisible?: boolean; controlsVisible?: boolean;
/** Callback ref setter for focus guide destination pattern */ /** Callback ref setter for focus guide destination pattern */
@@ -72,8 +89,7 @@ export const TVSkipSegmentCard: FC<TVSkipSegmentCardProps> = ({
bottom: bottomPosition.value, bottom: bottomPosition.value,
})); }));
const labelText = const labelText = t(SEGMENT_LABEL_KEY[type]);
type === "intro" ? t("player.skip_intro") : t("player.skip_credits");
if (!show) return null; if (!show) return null;

View File

@@ -34,11 +34,13 @@ interface BottomControlsProps {
showRemoteBubble: boolean; showRemoteBubble: boolean;
currentTime: number; currentTime: number;
remainingTime: number; remainingTime: number;
showSkipButton: boolean; showSkipSegmentButton: boolean;
showSkipCreditButton: boolean; skipSegmentButtonText: string;
showSkipOutroButton: boolean;
skipOutroButtonText: string;
hasContentAfterCredits: boolean; hasContentAfterCredits: boolean;
skipIntro: () => void; onSkipSegment: () => void;
skipCredit: () => void; onSkipOutro: () => void;
nextItem?: BaseItemDto | null; nextItem?: BaseItemDto | null;
handleNextEpisodeAutoPlay: () => void; handleNextEpisodeAutoPlay: () => void;
handleNextEpisodeManual: () => void; handleNextEpisodeManual: () => void;
@@ -86,11 +88,13 @@ export const BottomControls: FC<BottomControlsProps> = ({
showRemoteBubble, showRemoteBubble,
currentTime, currentTime,
remainingTime, remainingTime,
showSkipButton, showSkipSegmentButton,
showSkipCreditButton, skipSegmentButtonText,
showSkipOutroButton,
skipOutroButtonText,
hasContentAfterCredits, hasContentAfterCredits,
skipIntro, onSkipSegment,
skipCredit, onSkipOutro,
nextItem, nextItem,
handleNextEpisodeAutoPlay, handleNextEpisodeAutoPlay,
handleNextEpisodeManual, handleNextEpisodeManual,
@@ -181,19 +185,18 @@ export const BottomControls: FC<BottomControlsProps> = ({
</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'>
<SkipButton <SkipButton
showButton={showSkipButton} showButton={showSkipSegmentButton}
onPress={skipIntro} onPress={onSkipSegment}
buttonText='Skip Intro' buttonText={skipSegmentButtonText}
/> />
{/* Smart Skip Credits behavior: {/* Outro button defers to "Next Episode" when credits run to the
- Show "Skip Credits" if there's content after credits OR no next episode video end and a next episode exists. */}
- Show "Next Episode" if credits extend to video end AND next episode exists */}
<SkipButton <SkipButton
showButton={ showButton={
showSkipCreditButton && (hasContentAfterCredits || !nextItem) showSkipOutroButton && (hasContentAfterCredits || !nextItem)
} }
onPress={skipCredit} onPress={onSkipOutro}
buttonText='Skip Credits' buttonText={skipOutroButtonText}
/> />
{settings.autoPlayNextEpisode !== false && {settings.autoPlayNextEpisode !== false &&
(settings.maxAutoPlayEpisodeCount.value === -1 || (settings.maxAutoPlayEpisodeCount.value === -1 ||
@@ -204,7 +207,7 @@ export const BottomControls: FC<BottomControlsProps> = ({
!nextItem !nextItem
? false ? false
: // Show during credits if no content after, OR near end of video : // Show during credits if no content after, OR near end of video
(showSkipCreditButton && !hasContentAfterCredits) || (showSkipOutroButton && !hasContentAfterCredits) ||
remainingTime < 10000 remainingTime < 10000
} }
onFinish={handleNextEpisodeAutoPlay} onFinish={handleNextEpisodeAutoPlay}

View File

@@ -5,6 +5,7 @@ import type {
} from "@jellyfin/sdk/lib/generated-client"; } from "@jellyfin/sdk/lib/generated-client";
import { useLocalSearchParams } from "expo-router"; import { useLocalSearchParams } from "expo-router";
import { type FC, useCallback, useEffect, useState } from "react"; import { type FC, useCallback, useEffect, useState } from "react";
import { useTranslation } from "react-i18next";
import { StyleSheet, useWindowDimensions, View } from "react-native"; import { StyleSheet, useWindowDimensions, View } from "react-native";
import Animated, { import Animated, {
Easing, Easing,
@@ -16,9 +17,8 @@ import Animated, {
} from "react-native-reanimated"; } from "react-native-reanimated";
import ContinueWatchingOverlay from "@/components/video-player/controls/ContinueWatchingOverlay"; import ContinueWatchingOverlay from "@/components/video-player/controls/ContinueWatchingOverlay";
import useRouter from "@/hooks/useAppRouter"; import useRouter from "@/hooks/useAppRouter";
import { useCreditSkipper } from "@/hooks/useCreditSkipper";
import { useHaptic } from "@/hooks/useHaptic"; import { useHaptic } from "@/hooks/useHaptic";
import { useIntroSkipper } from "@/hooks/useIntroSkipper"; import { useMediaSegments } from "@/hooks/useMediaSegments";
import { usePlaybackManager } from "@/hooks/usePlaybackManager"; import { usePlaybackManager } from "@/hooks/usePlaybackManager";
import { useTrickplay } from "@/hooks/useTrickplay"; import { useTrickplay } from "@/hooks/useTrickplay";
import type { TechnicalInfo } from "@/modules/mpv-player"; import type { TechnicalInfo } from "@/modules/mpv-player";
@@ -26,6 +26,7 @@ import { DownloadedItem } from "@/providers/Downloads/types";
import { useOfflineMode } from "@/providers/OfflineModeProvider"; import { useOfflineMode } from "@/providers/OfflineModeProvider";
import { useSettings } from "@/utils/atoms/settings"; import { useSettings } from "@/utils/atoms/settings";
import { getDefaultPlaySettings } from "@/utils/jellyfin/getDefaultPlaySettings"; import { getDefaultPlaySettings } from "@/utils/jellyfin/getDefaultPlaySettings";
import { useSegments } from "@/utils/segments";
import { ticksToMs } from "@/utils/time"; import { ticksToMs } from "@/utils/time";
import { BottomControls } from "./BottomControls"; import { BottomControls } from "./BottomControls";
import { CenterControls } from "./CenterControls"; import { CenterControls } from "./CenterControls";
@@ -316,27 +317,38 @@ export const Controls: FC<Props> = ({
subtitleIndex: string; subtitleIndex: string;
}>(); }>();
const { showSkipButton, skipIntro } = useIntroSkipper( // Fetch all segments for the current item
item.Id!, const { data: segments } = useSegments(
currentTime, item.Id ?? "",
seek,
play,
offline, offline,
api,
downloadedFiles, downloadedFiles,
api,
); );
const { showSkipCreditButton, skipCredit, hasContentAfterCredits } = // Unified segment orchestration (identical mechanism on mobile and TV):
useCreditSkipper( // overlap priority + a single auto-skip driver live in the shared hook.
item.Id!, const {
currentTime, activeSegment,
seek, skipActiveSegment: onSkipSegment,
play, showSkipButton: showSkipSegmentButton,
offline, isOutroActive: showSkipOutroButton,
api, skipOutro: onSkipOutro,
downloadedFiles, hasContentAfterCredits,
maxMs, } = useMediaSegments({
); segments,
currentTime,
maxMs,
seek,
play,
isPlaying,
isBuffering,
});
const { t } = useTranslation();
const skipSegmentButtonText = activeSegment
? t(`player.skip_${activeSegment.type.toLowerCase()}`)
: t("player.skip_intro");
const skipOutroButtonText = t("player.skip_outro");
const goToItemCommon = useCallback( const goToItemCommon = useCallback(
(item: BaseItemDto) => { (item: BaseItemDto) => {
@@ -570,11 +582,13 @@ export const Controls: FC<Props> = ({
showRemoteBubble={showRemoteBubble} showRemoteBubble={showRemoteBubble}
currentTime={currentTime} currentTime={currentTime}
remainingTime={remainingTime} remainingTime={remainingTime}
showSkipButton={showSkipButton} showSkipSegmentButton={showSkipSegmentButton}
showSkipCreditButton={showSkipCreditButton} skipSegmentButtonText={skipSegmentButtonText}
showSkipOutroButton={showSkipOutroButton}
skipOutroButtonText={skipOutroButtonText}
hasContentAfterCredits={hasContentAfterCredits} hasContentAfterCredits={hasContentAfterCredits}
skipIntro={skipIntro} onSkipSegment={onSkipSegment}
skipCredit={skipCredit} onSkipOutro={onSkipOutro}
nextItem={nextItem} nextItem={nextItem}
handleNextEpisodeAutoPlay={handleNextEpisodeAutoPlay} handleNextEpisodeAutoPlay={handleNextEpisodeAutoPlay}
handleNextEpisodeManual={handleNextEpisodeManual} handleNextEpisodeManual={handleNextEpisodeManual}

View File

@@ -38,9 +38,9 @@ import {
import { TVFocusableProgressBar } from "@/components/tv/TVFocusableProgressBar"; import { TVFocusableProgressBar } from "@/components/tv/TVFocusableProgressBar";
import { useScaledTVTypography } from "@/constants/TVTypography"; import { useScaledTVTypography } from "@/constants/TVTypography";
import useRouter from "@/hooks/useAppRouter"; import useRouter from "@/hooks/useAppRouter";
import { useCreditSkipper } from "@/hooks/useCreditSkipper"; import { useMediaSegments } from "@/hooks/useMediaSegments";
import { useIntroSkipper } from "@/hooks/useIntroSkipper";
import { usePlaybackManager } from "@/hooks/usePlaybackManager"; import { usePlaybackManager } from "@/hooks/usePlaybackManager";
import type { SegmentType } from "@/hooks/useSegmentSkipper";
import { useTrickplay } from "@/hooks/useTrickplay"; import { useTrickplay } from "@/hooks/useTrickplay";
import { useTVOptionModal } from "@/hooks/useTVOptionModal"; import { useTVOptionModal } from "@/hooks/useTVOptionModal";
import { useTVSubtitleModal } from "@/hooks/useTVSubtitleModal"; import { useTVSubtitleModal } from "@/hooks/useTVSubtitleModal";
@@ -51,6 +51,7 @@ import { useOfflineMode } from "@/providers/OfflineModeProvider";
import { useSettings } from "@/utils/atoms/settings"; import { useSettings } from "@/utils/atoms/settings";
import type { TVOptionItem } from "@/utils/atoms/tvOptionModal"; import type { TVOptionItem } from "@/utils/atoms/tvOptionModal";
import { getDefaultPlaySettings } from "@/utils/jellyfin/getDefaultPlaySettings"; import { getDefaultPlaySettings } from "@/utils/jellyfin/getDefaultPlaySettings";
import { useSegments } from "@/utils/segments";
import { formatTimeString, msToTicks, ticksToMs } from "@/utils/time"; import { formatTimeString, msToTicks, ticksToMs } from "@/utils/time";
import { CONTROLS_CONSTANTS } from "./constants"; import { CONTROLS_CONSTANTS } from "./constants";
import { useVideoContext } from "./contexts/VideoContext"; import { useVideoContext } from "./contexts/VideoContext";
@@ -199,6 +200,7 @@ export const Controls: FC<Props> = ({
isSeeking, isSeeking,
progress, progress,
cacheProgress, cacheProgress,
isBuffering,
showControls, showControls,
setShowControls, setShowControls,
mediaSource, mediaSource,
@@ -427,30 +429,42 @@ export const Controls: FC<Props> = ({
seek, seek,
}); });
// Skip intro/credits hooks // Segment skipping (intro + outro/credits) via the unified hook.
// Note: hooks expect seek callback that takes ms, and seek prop already expects ms
const offline = useOfflineMode(); const offline = useOfflineMode();
const { showSkipButton, skipIntro } = useIntroSkipper(
item.Id!, const { data: segments } = useSegments(
currentTime, item.Id ?? "",
seek,
_play,
offline, offline,
api,
downloadedFiles, downloadedFiles,
api,
); );
const { showSkipCreditButton, skipCredit, hasContentAfterCredits } = // Unified segment orchestration (identical mechanism on mobile and TV):
useCreditSkipper( // overlap priority + a single auto-skip driver live in the shared hook.
item.Id!, const {
currentTime, activeSegment,
seek, skipActiveSegment,
_play, showSkipButton,
offline, isOutroActive,
api, skipOutro: skipCredit,
downloadedFiles, hasContentAfterCredits,
max.value, } = useMediaSegments({
); segments,
currentTime,
maxMs,
seek,
play: _play,
isPlaying,
isBuffering,
});
// The outro keeps its dedicated card (it composes with the Next Episode
// countdown); the other four share the generic skip card.
const showSkipCreditButton = isOutroActive;
const activeSegmentType =
isOutroActive || !activeSegment
? "intro"
: (activeSegment.type.toLowerCase() as Lowercase<SegmentType>);
// Countdown logic // Countdown logic
const isCountdownActive = useMemo(() => { const isCountdownActive = useMemo(() => {
@@ -1126,11 +1140,11 @@ export const Controls: FC<Props> = ({
/> />
)} )}
{/* Skip intro card */} {/* Generic skip card (intro / recap / commercial / preview) */}
<TVSkipSegmentCard <TVSkipSegmentCard
show={showSkipButton && !isCountdownActive} show={showSkipButton && !isCountdownActive}
onPress={skipIntro} onPress={skipActiveSegment}
type='intro' type={activeSegmentType}
controlsVisible={showControls} controlsVisible={showControls}
refSetter={setSkipSegmentRef} refSetter={setSkipSegmentRef}
hasTVPreferredFocus={!showControls} hasTVPreferredFocus={!showControls}

View File

@@ -1,109 +0,0 @@
import { Api } from "@jellyfin/sdk";
import { useCallback, useEffect, useState } from "react";
import { DownloadedItem } from "@/providers/Downloads/types";
import { useSegments } from "@/utils/segments";
import { msToSeconds, secondsToMs } from "@/utils/time";
import { useHaptic } from "./useHaptic";
/**
* Custom hook to handle skipping credits in a media player.
* The player reports time values in milliseconds.
*/
export const useCreditSkipper = (
itemId: string,
currentTime: number,
seek: (ms: number) => void,
play: () => void,
isOffline = false,
api: Api | null = null,
downloadedFiles: DownloadedItem[] | undefined = undefined,
totalDuration?: number,
) => {
const [showSkipCreditButton, setShowSkipCreditButton] = useState(false);
const lightHapticFeedback = useHaptic("light");
// Convert ms to seconds for comparison with timestamps
const currentTimeSeconds = msToSeconds(currentTime);
const totalDurationInSeconds =
totalDuration != null ? msToSeconds(totalDuration) : undefined;
// Regular function (not useCallback) to match useIntroSkipper pattern
const wrappedSeek = (seconds: number) => {
seek(secondsToMs(seconds));
};
const { data: segments } = useSegments(
itemId,
isOffline,
downloadedFiles,
api,
);
const creditTimestamps = segments?.creditSegments?.[0];
// Determine if there's content after credits (credits don't extend to video end)
// Use a 5-second buffer to account for timing discrepancies
const hasContentAfterCredits = (() => {
if (
!creditTimestamps ||
totalDurationInSeconds == null ||
!Number.isFinite(totalDurationInSeconds)
) {
return false;
}
const creditsEndToVideoEnd =
totalDurationInSeconds - creditTimestamps.endTime;
// If credits end more than 5 seconds before video ends, there's content after
return creditsEndToVideoEnd > 5;
})();
useEffect(() => {
if (creditTimestamps) {
const shouldShow =
currentTimeSeconds > creditTimestamps.startTime &&
currentTimeSeconds < creditTimestamps.endTime;
setShowSkipCreditButton(shouldShow);
} else {
// Reset button state when no credit timestamps exist
if (showSkipCreditButton) {
setShowSkipCreditButton(false);
}
}
}, [creditTimestamps, currentTimeSeconds, showSkipCreditButton]);
const skipCredit = useCallback(() => {
if (!creditTimestamps) return;
try {
lightHapticFeedback();
// Calculate the target seek position
let seekTarget = creditTimestamps.endTime;
// If we have total duration, ensure we don't seek past the end of the video.
// Some media sources report credit end times that exceed the actual video duration,
// which causes the player to pause/stop when seeking past the end.
// Leave a small buffer (2 seconds) to trigger the natural end-of-video flow
// (next episode countdown, etc.) instead of an abrupt pause.
if (totalDurationInSeconds && seekTarget >= totalDurationInSeconds) {
seekTarget = Math.max(0, totalDurationInSeconds - 2);
}
wrappedSeek(seekTarget);
setTimeout(() => {
play();
}, 200);
} catch (error) {
console.error("[CREDIT_SKIPPER] Error skipping credit", error);
}
}, [
creditTimestamps,
lightHapticFeedback,
wrappedSeek,
play,
totalDurationInSeconds,
]);
return { showSkipCreditButton, skipCredit, hasContentAfterCredits };
};

View File

@@ -1,68 +0,0 @@
import { Api } from "@jellyfin/sdk";
import { useCallback, useEffect, useState } from "react";
import { DownloadedItem } from "@/providers/Downloads/types";
import { useSegments } from "@/utils/segments";
import { msToSeconds, secondsToMs } from "@/utils/time";
import { useHaptic } from "./useHaptic";
/**
* Custom hook to handle skipping intros in a media player.
* MPV player uses milliseconds for time.
*
* @param {number} currentTime - The current playback time in milliseconds.
*/
export const useIntroSkipper = (
itemId: string,
currentTime: number,
seek: (ms: number) => void,
play: () => void,
isOffline = false,
api: Api | null = null,
downloadedFiles: DownloadedItem[] | undefined = undefined,
) => {
const [showSkipButton, setShowSkipButton] = useState(false);
// Convert ms to seconds for comparison with timestamps
const currentTimeSeconds = msToSeconds(currentTime);
const lightHapticFeedback = useHaptic("light");
const wrappedSeek = (seconds: number) => {
seek(secondsToMs(seconds));
};
const { data: segments } = useSegments(
itemId,
isOffline,
downloadedFiles,
api,
);
const introTimestamps = segments?.introSegments?.[0];
useEffect(() => {
if (introTimestamps) {
const shouldShow =
currentTimeSeconds > introTimestamps.startTime &&
currentTimeSeconds < introTimestamps.endTime;
setShowSkipButton(shouldShow);
} else {
if (showSkipButton) {
setShowSkipButton(false);
}
}
}, [introTimestamps, currentTimeSeconds, showSkipButton]);
const skipIntro = useCallback(() => {
if (!introTimestamps) return;
try {
lightHapticFeedback();
wrappedSeek(introTimestamps.endTime);
setTimeout(() => {
play();
}, 200);
} catch (error) {
console.error("[INTRO_SKIPPER] Error skipping intro", error);
}
}, [introTimestamps, lightHapticFeedback, wrappedSeek, play]);
return { showSkipButton, skipIntro };
};

220
hooks/useMediaSegments.ts Normal file
View File

@@ -0,0 +1,220 @@
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
import type { MediaTimeSegment } from "@/providers/Downloads/types";
import type { SegmentSkipMode } from "@/utils/atoms/settings";
import type { SegmentBuckets } from "@/utils/segments";
import { type SegmentType, useSegmentSkipper } from "./useSegmentSkipper";
const noop = () => {};
// Delay the FIRST auto-skip until playback has been stable this long. Seeking a
// transcoded stream the instant the first frame appears (e.g. a 0:00 intro)
// asks the transcode for a segment it hasn't produced yet and stalls at 0:00;
// direct-play is always seekable so the delay is invisible there.
const AUTO_SKIP_ARM_DELAY_MS = 1500;
export interface ActiveSegment {
type: SegmentType;
currentSegment: MediaTimeSegment;
skipSegment: (useHaptics?: boolean) => void;
skipMode: SegmentSkipMode;
}
interface UseMediaSegmentsProps {
segments: SegmentBuckets | undefined;
/** Current playback position, in ms. */
currentTime: number;
/** Total media duration, in ms. */
maxMs?: number;
/** Player seek, expects ms. */
seek: (ms: number) => void;
/** Player resume. */
play: () => void;
isPlaying: boolean;
/** True while the player is (re)buffering; auto-skip waits for this to clear. */
isBuffering?: boolean;
}
export interface UseMediaSegmentsReturn {
/** Highest-priority segment under the playhead (excludes 'none' types), or null. */
activeSegment: ActiveSegment | null;
/** Skip the active segment (no-op when there is none). */
skipActiveSegment: (useHaptics?: boolean) => void;
/** Show the generic skip button: an active segment that is not the outro. */
showSkipButton: boolean;
/** The active segment is the outro/credits (it gets its own button/card). */
isOutroActive: boolean;
/** Skip the outro, independent of which button the priority shows. */
skipOutro: (useHaptics?: boolean) => void;
/** The outro ends before the media end, i.e. there is content after credits. */
hasContentAfterCredits: boolean;
}
/**
* Unified media-segment orchestration shared by the mobile and TV player controls.
* Owns the per-type skippers, the seek-with-delayed-play workaround, the overlap
* priority (Commercial > Recap > Intro > Preview > Outro) and a SINGLE auto-skip
* driver, so overlapping auto-enabled segments can't fire competing seeks and both
* platforms behave identically.
*/
export const useMediaSegments = ({
segments,
currentTime,
maxMs,
seek,
play,
isPlaying,
isBuffering = false,
}: UseMediaSegmentsProps): UseMediaSegmentsReturn => {
// Keep sub-second precision: segment boundaries are fractional seconds, so
// flooring currentTime would detect segments up to ~1s late / end them early.
const currentTimeSeconds = currentTime / 1000;
const maxSeconds = maxMs ? maxMs / 1000 : undefined;
// Seek-with-delayed-play workaround: some seeks otherwise resume from the
// pre-seek position. playingRef avoids a stale closure on isPlaying.
const playTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);
const playingRef = useRef(isPlaying);
useEffect(() => {
playingRef.current = isPlaying;
}, [isPlaying]);
useEffect(() => {
return () => {
if (playTimeoutRef.current) clearTimeout(playTimeoutRef.current);
};
}, []);
const seekSeconds = useCallback(
(timeInSeconds: number) => {
if (playTimeoutRef.current) clearTimeout(playTimeoutRef.current);
seek(timeInSeconds * 1000);
playTimeoutRef.current = setTimeout(() => {
if (playingRef.current) play();
playTimeoutRef.current = null;
}, 200);
},
[seek, play],
);
const introSkipper = useSegmentSkipper({
segments: segments?.introSegments ?? [],
segmentType: "Intro",
currentTime: currentTimeSeconds,
seek: seekSeconds,
});
const outroSkipper = useSegmentSkipper({
segments: segments?.creditSegments ?? [],
segmentType: "Outro",
currentTime: currentTimeSeconds,
totalDuration: maxSeconds,
seek: seekSeconds,
});
const recapSkipper = useSegmentSkipper({
segments: segments?.recapSegments ?? [],
segmentType: "Recap",
currentTime: currentTimeSeconds,
seek: seekSeconds,
});
const commercialSkipper = useSegmentSkipper({
segments: segments?.commercialSegments ?? [],
segmentType: "Commercial",
currentTime: currentTimeSeconds,
seek: seekSeconds,
});
const previewSkipper = useSegmentSkipper({
segments: segments?.previewSegments ?? [],
segmentType: "Preview",
currentTime: currentTimeSeconds,
seek: seekSeconds,
});
// Priority when multiple segments overlap: Commercial > Recap > Intro > Preview > Outro.
const activeSegment = useMemo<ActiveSegment | null>(() => {
const byPriority: Array<[SegmentType, typeof introSkipper]> = [
["Commercial", commercialSkipper],
["Recap", recapSkipper],
["Intro", introSkipper],
["Preview", previewSkipper],
["Outro", outroSkipper],
];
for (const [type, skipper] of byPriority) {
if (skipper.currentSegment) {
return {
type,
currentSegment: skipper.currentSegment,
skipSegment: skipper.skipSegment,
skipMode: skipper.skipMode,
};
}
}
return null;
}, [
commercialSkipper.currentSegment,
commercialSkipper.skipSegment,
commercialSkipper.skipMode,
recapSkipper.currentSegment,
recapSkipper.skipSegment,
recapSkipper.skipMode,
introSkipper.currentSegment,
introSkipper.skipSegment,
introSkipper.skipMode,
previewSkipper.currentSegment,
previewSkipper.skipSegment,
previewSkipper.skipMode,
outroSkipper.currentSegment,
outroSkipper.skipSegment,
outroSkipper.skipMode,
]);
// Single auto-skip driver: only the priority-resolved active segment skips,
// so overlapping auto-enabled segments can't trigger competing seeks.
const autoSkipTriggeredRef = useRef<string | null>(null);
const [autoSkipArmed, setAutoSkipArmed] = useState(false);
// Reset per item (its segments change): re-allow skipping and re-arm so the
// next episode's transcode has time to become seekable. We do NOT reset the
// guard when the active segment momentarily disappears — seeking a transcoded
// stream makes the reported position bounce back into a 0:00 intro, and
// clearing the guard there caused an infinite seek loop that crashed mpv.
useEffect(() => {
autoSkipTriggeredRef.current = null;
setAutoSkipArmed(false);
}, [segments]);
// Arm auto-skip once playback has been genuinely stable (not buffering) for a
// short moment, so the first seek lands on an established (seekable) timeline.
useEffect(() => {
if (autoSkipArmed || isBuffering || !isPlaying) return;
const id = setTimeout(() => setAutoSkipArmed(true), AUTO_SKIP_ARM_DELAY_MS);
return () => clearTimeout(id);
}, [autoSkipArmed, isBuffering, isPlaying]);
useEffect(() => {
if (
!autoSkipArmed ||
!activeSegment ||
!isPlaying ||
isBuffering ||
activeSegment.skipMode !== "auto"
)
return;
const { startTime, endTime } = activeSegment.currentSegment;
const segmentId = `${activeSegment.type}:${startTime}-${endTime}`;
if (autoSkipTriggeredRef.current === segmentId) return;
autoSkipTriggeredRef.current = segmentId;
activeSegment.skipSegment(false);
}, [activeSegment, isPlaying, isBuffering, autoSkipArmed]);
const isOutroActive = activeSegment?.type === "Outro";
return {
activeSegment,
skipActiveSegment: activeSegment?.skipSegment ?? noop,
showSkipButton: !!activeSegment && !isOutroActive,
isOutroActive,
skipOutro: outroSkipper.skipSegment,
hasContentAfterCredits:
outroSkipper.currentSegment && maxSeconds
? outroSkipper.currentSegment.endTime < maxSeconds
: false,
};
};

104
hooks/useSegmentSkipper.ts Normal file
View File

@@ -0,0 +1,104 @@
import { useCallback, useEffect, useMemo, useRef } from "react";
import { MediaTimeSegment } from "@/providers/Downloads/types";
import { SegmentSkipMode, useSettings } from "@/utils/atoms/settings";
import { useHaptic } from "./useHaptic";
export type SegmentType =
| "Intro"
| "Outro"
| "Recap"
| "Commercial"
| "Preview";
const SEGMENT_TO_SETTING: Record<
SegmentType,
"skipIntro" | "skipOutro" | "skipRecap" | "skipCommercial" | "skipPreview"
> = {
Intro: "skipIntro",
Outro: "skipOutro",
Recap: "skipRecap",
Commercial: "skipCommercial",
Preview: "skipPreview",
};
interface UseSegmentSkipperProps {
segments: MediaTimeSegment[];
segmentType: SegmentType;
currentTime: number;
totalDuration?: number;
seek: (time: number) => void;
}
interface UseSegmentSkipperReturn {
currentSegment: MediaTimeSegment | null;
skipSegment: (useHaptics?: boolean) => void;
skipMode: SegmentSkipMode;
}
/**
* Generic hook for a single media segment type (intro, outro, recap, commercial, preview).
* Reports the segment currently under the playhead, its skip mode, and a skip action.
* Auto-skip is NOT performed here: the consumer drives it from the priority-resolved
* active segment so overlapping segments can't trigger competing seeks.
*/
export const useSegmentSkipper = ({
segments,
segmentType,
currentTime,
totalDuration,
seek,
}: UseSegmentSkipperProps): UseSegmentSkipperReturn => {
const { settings } = useSettings();
const haptic = useHaptic();
const skipMode: SegmentSkipMode =
settings?.[SEGMENT_TO_SETTING[segmentType]] ?? "none";
const currentSegment = useMemo(
() =>
segments.find(
(s) => currentTime >= s.startTime && currentTime < s.endTime,
) ?? null,
[segments, currentTime],
);
// Refs keep skipSegment's identity stable across seek/haptic changes
// (haptic is unstable when disabled), so the consumer's auto-skip effect
// doesn't re-fire spuriously.
const seekRef = useRef(seek);
const hapticRef = useRef(haptic);
useEffect(() => {
seekRef.current = seek;
hapticRef.current = haptic;
});
const skipSegment = useCallback(
(useHaptics = true) => {
if (!currentSegment || skipMode === "none") return;
// Outro endTime sometimes exceeds the actual file duration. Keep a 2s
// buffer so the player's natural end-of-video flow (next-episode
// countdown, etc.) still fires instead of stalling at the exact end.
let target = currentSegment.endTime;
if (
segmentType === "Outro" &&
totalDuration != null &&
Number.isFinite(totalDuration) &&
target >= totalDuration
) {
target = Math.max(0, totalDuration - 2);
}
seekRef.current(target);
if (useHaptics) hapticRef.current();
},
[currentSegment, segmentType, totalDuration, skipMode],
);
return {
currentSegment: skipMode === "none" ? null : currentSegment,
skipSegment,
skipMode,
};
};

View File

@@ -2,6 +2,7 @@
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<application> <application>
<service <service

View File

@@ -9,6 +9,7 @@ import android.content.pm.ServiceInfo
import android.os.Binder import android.os.Binder
import android.os.Build import android.os.Build
import android.os.IBinder import android.os.IBinder
import android.os.PowerManager
import android.os.SystemClock import android.os.SystemClock
import android.util.Log import android.util.Log
import androidx.core.app.NotificationCompat import androidx.core.app.NotificationCompat
@@ -27,6 +28,7 @@ class DownloadService : Service() {
private var currentDownloadTitle = "Preparing download..." private var currentDownloadTitle = "Preparing download..."
private var currentProgress = 0 private var currentProgress = 0
private var isForegroundStarted = false private var isForegroundStarted = false
private var wakeLock: PowerManager.WakeLock? = null
inner class DownloadServiceBinder : Binder() { inner class DownloadServiceBinder : Binder() {
fun getService(): DownloadService = this@DownloadService fun getService(): DownloadService = this@DownloadService
@@ -36,6 +38,12 @@ class DownloadService : Service() {
super.onCreate() super.onCreate()
Log.d(TAG, "DownloadService created") Log.d(TAG, "DownloadService created")
createNotificationChannel() createNotificationChannel()
val pm = getSystemService(PowerManager::class.java)
wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Streamyfin::DownloadWakeLock")
wakeLock?.acquire()
Log.d(TAG, "Wake lock acquired")
} }
override fun onBind(intent: Intent?): IBinder { override fun onBind(intent: Intent?): IBinder {
@@ -93,6 +101,8 @@ class DownloadService : Service() {
} }
override fun onDestroy() { override fun onDestroy() {
wakeLock?.let { if (it.isHeld) it.release() }
Log.d(TAG, "Wake lock released")
Log.d(TAG, "DownloadService destroyed") Log.d(TAG, "DownloadService destroyed")
super.onDestroy() super.onDestroy()
} }

View File

@@ -4,6 +4,7 @@ import android.app.UiModeManager
import android.content.Context import android.content.Context
import android.content.res.Configuration import android.content.res.Configuration
import android.content.res.AssetManager import android.content.res.AssetManager
import android.os.Build
import android.os.Handler import android.os.Handler
import android.os.Looper import android.os.Looper
import android.util.Log import android.util.Log
@@ -35,6 +36,30 @@ class MPVLayerRenderer(private val context: Context) : MPVLib.EventObserver {
return uiModeManager.currentModeType == Configuration.UI_MODE_TYPE_TELEVISION return uiModeManager.currentModeType == Configuration.UI_MODE_TYPE_TELEVISION
} }
/**
* True only on the Android emulator. Its goldfish/ranchu MediaCodec can't bind a
* decode output surface (decode opens with surface 0x0): HEVC then fails cleanly and
* mpv auto-falls-back to software, but H.264 "opens" deceptively and wedges the core
* (no fallback) — black video, then any command (seek/pause) deadlocks the UI thread
* → ANR. We force software decoding here.
*
* Only QEMU/SDK-exclusive signals are checked so a real device can never match — a
* false positive would needlessly drop shipping hardware to software decoding. The
* emulator reports ro.hardware=goldfish|ranchu, an sdk_* product, or a generic/
* emulator build fingerprint, none of which appear on real devices.
*/
private fun isEmulator(): Boolean {
val hardware = Build.HARDWARE.lowercase()
if (hardware == "goldfish" || hardware == "ranchu") return true
val product = Build.PRODUCT
if (product == "sdk" || product.startsWith("sdk_")) return true
val fingerprint = Build.FINGERPRINT
return fingerprint.startsWith("generic") ||
fingerprint.contains("emulator", ignoreCase = true)
}
interface Delegate { interface Delegate {
fun onPositionChanged(position: Double, duration: Double, cacheSeconds: Double) fun onPositionChanged(position: Double, duration: Double, cacheSeconds: Double)
fun onPauseChanged(isPaused: Boolean) fun onPauseChanged(isPaused: Boolean)
@@ -169,15 +194,21 @@ class MPVLayerRenderer(private val context: Context) : MPVLib.EventObserver {
MPVLib.setOptionString("gpu-context", "android") MPVLib.setOptionString("gpu-context", "android")
MPVLib.setOptionString("opengl-es", "yes") MPVLib.setOptionString("opengl-es", "yes")
// Hardware video decoding // Hardware decode path:
// TV: zero-copy (mediacodec) for better performance on low-power devices // - Real TV hardware: zero-copy `mediacodec` (fastest on low-power devices).
// Mobile: copy mode (mediacodec-copy) for better compatibility // - Real phone: `mediacodec-copy` (broadest compatibility).
val isTV = isTvDevice() // - Emulator: software decode. Its MediaCodec can't bind an output surface
if (isTV) { // (surface 0x0); HEVC then fails cleanly and mpv auto-falls-back to software,
MPVLib.setOptionString("hwdec", "mediacodec") // but H.264 "opens" deceptively and wedges the core with no fallback (black
MPVLib.setOptionString("profile", "fast") // video, then any command — seek/pause — deadlocks the UI thread → ANR).
} else { // hwdec=no makes every codec render via the gpu-next VO. Real devices unaffected.
MPVLib.setOptionString("hwdec", "mediacodec-copy") when {
isEmulator() -> MPVLib.setOptionString("hwdec", "no")
isTvDevice() -> {
MPVLib.setOptionString("hwdec", "mediacodec")
MPVLib.setOptionString("profile", "fast")
}
else -> MPVLib.setOptionString("hwdec", "mediacodec-copy")
} }
MPVLib.setOptionString("hwdec-codecs", "h264,hevc,mpeg4,mpeg2video,vp8,vp9,av1") MPVLib.setOptionString("hwdec-codecs", "h264,hevc,mpeg4,mpeg2video,vp8,vp9,av1")

View File

@@ -39,7 +39,7 @@
"@react-native-community/netinfo": "^12.0.0", "@react-native-community/netinfo": "^12.0.0",
"@react-navigation/material-top-tabs": "7.4.28", "@react-navigation/material-top-tabs": "7.4.28",
"@react-navigation/native": "^7.2.5", "@react-navigation/native": "^7.2.5",
"@shopify/flash-list": "2.0.2", "@shopify/flash-list": "2.0.3",
"@tanstack/query-sync-storage-persister": "^5.100.14", "@tanstack/query-sync-storage-persister": "^5.100.14",
"@tanstack/react-pacer": "^0.19.1", "@tanstack/react-pacer": "^0.19.1",
"@tanstack/react-query": "5.100.14", "@tanstack/react-query": "5.100.14",
@@ -134,7 +134,7 @@
"cross-env": "10.1.0", "cross-env": "10.1.0",
"expo-doctor": "1.19.9", "expo-doctor": "1.19.9",
"husky": "9.1.7", "husky": "9.1.7",
"lint-staged": "17.0.5", "lint-staged": "17.0.7",
"react-test-renderer": "19.2.3", "react-test-renderer": "19.2.3",
"typescript": "6.0.3" "typescript": "6.0.3"
}, },

View File

@@ -32,12 +32,6 @@ export interface MediaTimeSegment {
text: string; text: string;
} }
export interface Segment {
startTime: number;
endTime: number;
text: string;
}
/** Represents a single downloaded media item with all necessary metadata for offline playback. */ /** Represents a single downloaded media item with all necessary metadata for offline playback. */
export interface DownloadedItem { export interface DownloadedItem {
/** The Jellyfin item DTO. */ /** The Jellyfin item DTO. */
@@ -56,6 +50,12 @@ export interface DownloadedItem {
introSegments?: MediaTimeSegment[]; introSegments?: MediaTimeSegment[];
/** The credit segments for the item. */ /** The credit segments for the item. */
creditSegments?: MediaTimeSegment[]; creditSegments?: MediaTimeSegment[];
/** The recap segments for the item. */
recapSegments?: MediaTimeSegment[];
/** The commercial segments for the item. */
commercialSegments?: MediaTimeSegment[];
/** The preview segments for the item. */
previewSegments?: MediaTimeSegment[];
/** The user data for the item. */ /** The user data for the item. */
userData: UserData; userData: UserData;
} }
@@ -144,6 +144,12 @@ export type JobStatus = {
introSegments?: MediaTimeSegment[]; introSegments?: MediaTimeSegment[];
/** Pre-downloaded credit segments (optional) - downloaded before video starts */ /** Pre-downloaded credit segments (optional) - downloaded before video starts */
creditSegments?: MediaTimeSegment[]; creditSegments?: MediaTimeSegment[];
/** Pre-downloaded recap segments (optional) - downloaded before video starts */
recapSegments?: MediaTimeSegment[];
/** Pre-downloaded commercial segments (optional) - downloaded before video starts */
commercialSegments?: MediaTimeSegment[];
/** Pre-downloaded preview segments (optional) - downloaded before video starts */
previewSegments?: MediaTimeSegment[];
/** The audio stream index selected for this download */ /** The audio stream index selected for this download */
audioStreamIndex?: number; audioStreamIndex?: number;
/** The subtitle stream index selected for this download */ /** The subtitle stream index selected for this download */

View File

@@ -65,7 +65,7 @@ final class TopShelfProvider: TVTopShelfContentProvider {
let item = TVTopShelfSectionedItem(identifier: cacheItem.id) let item = TVTopShelfSectionedItem(identifier: cacheItem.id)
item.title = cacheItem.title item.title = cacheItem.title
item.imageShape = .poster item.imageShape = .hdtv
item.displayAction = TVTopShelfAction(url: route) item.displayAction = TVTopShelfAction(url: route)
if let playRoute = cacheItem.playRoute, let playURL = URL(string: playRoute) { if let playRoute = cacheItem.playRoute, let playURL = URL(string: playRoute) {

View File

@@ -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": "التشغيل",
@@ -384,7 +320,6 @@
"plugins": { "plugins": {
"plugins_title": "الإضافات", "plugins_title": "الإضافات",
"jellyseerr": { "jellyseerr": {
"jellyseerr_warning": "هذا الربط في مراحله الأولى. توقع حدوث تغييرات.",
"server_url": "رابط الخادم", "server_url": "رابط الخادم",
"server_url_hint": "مثال: http(s)://your-host.url\n(أضف المنفذ إذا لزم الأمر)", "server_url_hint": "مثال: http(s)://your-host.url\n(أضف المنفذ إذا لزم الأمر)",
"server_url_placeholder": "رابط Seerr...", "server_url_placeholder": "رابط Seerr...",
@@ -413,23 +348,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 +375,7 @@
"refresh_from_server": "تحديث الإعدادات من الخادم" "refresh_from_server": "تحديث الإعدادات من الخادم"
}, },
"kefinTweaks": { "kefinTweaks": {
"watchlist_enabler": "تفعيل الربط مع قائمة المشاهدة الخاصة بنا", "watchlist_enabler": "تفعيل الربط مع قائمة المشاهدة الخاصة بنا"
"watchlist_button": "تبديل حالة ربط قائمة المشاهدة"
} }
}, },
"storage": { "storage": {
@@ -457,7 +386,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 +395,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 +416,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",
@@ -518,10 +441,7 @@
"downloads_title": "التنزيلات", "downloads_title": "التنزيلات",
"series": "مسلسلات", "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_series_button": "حذف جميع المسلسلات", "delete_all_series_button": "حذف جميع المسلسلات",
@@ -546,13 +466,8 @@
"failed_to_delete_all_series": "فشل حذف جميع المسلسلات", "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 +477,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 +495,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 +604,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 +632,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 +671,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 +693,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 +798,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 +934,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...",

View File

@@ -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",
@@ -384,7 +320,6 @@
"plugins": { "plugins": {
"plugins_title": "Connectors", "plugins_title": "Connectors",
"jellyseerr": { "jellyseerr": {
"jellyseerr_warning": "Aquesta integració es troba en una versió primerenca. Espereu que les coses canviïn.",
"server_url": "URL del servidor", "server_url": "URL del servidor",
"server_url_hint": "Exemple: http(s)://el-vostre-domini.url\n(afegiu el port si és necessari)", "server_url_hint": "Exemple: http(s)://el-vostre-domini.url\n(afegiu el port si és necessari)",
"server_url_placeholder": "URL de Jellyseerr...", "server_url_placeholder": "URL de Jellyseerr...",
@@ -413,23 +348,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 +375,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 +386,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 +395,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 +416,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",
@@ -518,10 +441,7 @@
"downloads_title": "Descàrregues", "downloads_title": "Descàrregues",
"series": "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_series_button": "Suprimeix totes les sèries", "delete_all_series_button": "Suprimeix totes les sèries",
@@ -546,13 +466,8 @@
"failed_to_delete_all_series": "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 +477,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 +495,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 +604,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 +632,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 +671,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 +693,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 +798,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 +934,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...",

View File

@@ -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",
@@ -384,7 +320,6 @@
"plugins": { "plugins": {
"plugins_title": "Pluginy", "plugins_title": "Pluginy",
"jellyseerr": { "jellyseerr": {
"jellyseerr_warning": "Tato integrace je v raných fázích. Očekávejte změnu situace.",
"server_url": "URL serveru", "server_url": "URL serveru",
"server_url_hint": "Příklad: http(s)://your-host.url\n(přidat port, pokud je vyžadováno)", "server_url_hint": "Příklad: http(s)://your-host.url\n(přidat port, pokud je vyžadováno)",
"server_url_placeholder": "Seerr URL", "server_url_placeholder": "Seerr URL",
@@ -413,23 +348,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 +375,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 +386,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 +395,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 +416,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",
@@ -518,10 +441,7 @@
"downloads_title": "Stahování", "downloads_title": "Stahování",
"series": "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_series_button": "Odstranit všechny TV-série", "delete_all_series_button": "Odstranit všechny TV-série",
@@ -546,13 +466,8 @@
"failed_to_delete_all_series": "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 +477,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 +495,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 +604,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 +632,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 +671,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 +693,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 +798,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 +934,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...",

View File

@@ -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",
@@ -384,7 +320,6 @@
"plugins": { "plugins": {
"plugins_title": "Plugins", "plugins_title": "Plugins",
"jellyseerr": { "jellyseerr": {
"jellyseerr_warning": "Denne integration er i en tidlig fase. Forvent, at tingene ændres.",
"server_url": "Server URL", "server_url": "Server URL",
"server_url_hint": "Eksempel: http(s)://din-host.url\n(tilføj port hvis nødvendigt)", "server_url_hint": "Eksempel: http(s)://din-host.url\n(tilføj port hvis nødvendigt)",
"server_url_placeholder": "Jellyseerr URL...", "server_url_placeholder": "Jellyseerr URL...",
@@ -413,23 +348,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 +375,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 +386,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 +395,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 +416,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",
@@ -518,10 +441,7 @@
"downloads_title": "Downloads", "downloads_title": "Downloads",
"series": "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_series_button": "Slet alle TV-serier", "delete_all_series_button": "Slet alle TV-serier",
@@ -546,13 +466,8 @@
"failed_to_delete_all_series": "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 +477,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 +495,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 +604,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 +632,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 +671,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 +693,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 +798,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 +934,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...",

View File

@@ -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",
@@ -384,7 +320,6 @@
"plugins": { "plugins": {
"plugins_title": "Plugins", "plugins_title": "Plugins",
"jellyseerr": { "jellyseerr": {
"jellyseerr_warning": "Diese Integration ist in einer frühen Entwicklungsphase und kann jederzeit geändert werden.",
"server_url": "Server URL", "server_url": "Server URL",
"server_url_hint": "Beispiel: http(s)://your-host.url\n(Port hinzufügen, falls erforderlich)", "server_url_hint": "Beispiel: http(s)://your-host.url\n(Port hinzufügen, falls erforderlich)",
"server_url_placeholder": "Seerr URL", "server_url_placeholder": "Seerr URL",
@@ -413,23 +348,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 +375,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 +386,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 +394,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,23 +416,20 @@
"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"
} }
} }
}, },
@@ -518,10 +441,7 @@
"downloads_title": "Downloads", "downloads_title": "Downloads",
"series": "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_series_button": "Alle Serien löschen", "delete_all_series_button": "Alle Serien löschen",
@@ -546,13 +466,8 @@
"failed_to_delete_all_series": "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 +477,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 +495,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 +554,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 +566,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 +575,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 +604,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 +611,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 +664,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 +691,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 +706,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 +761,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 +787,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 +798,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 +910,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"
} }
} }

View File

@@ -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",
@@ -384,7 +320,6 @@
"plugins": { "plugins": {
"plugins_title": "Πρόσθετα", "plugins_title": "Πρόσθετα",
"jellyseerr": { "jellyseerr": {
"jellyseerr_warning": "Αυτή η ενσωμάτωση βρίσκεται στα αρχικά της στάδια.",
"server_url": "Url Διακομιστή", "server_url": "Url Διακομιστή",
"server_url_hint": "Παράδειγμα: http(s)://your-host.url\n(προσθέστε θύρα εφόσον απαιτείται)", "server_url_hint": "Παράδειγμα: http(s)://your-host.url\n(προσθέστε θύρα εφόσον απαιτείται)",
"server_url_placeholder": "Seerr URL", "server_url_placeholder": "Seerr URL",
@@ -413,23 +348,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 +375,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 +386,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 +395,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 +416,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",
@@ -518,10 +441,7 @@
"downloads_title": "Λήψεις", "downloads_title": "Λήψεις",
"series": "Τηλεόραση-Σειρά", "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_series_button": "Διαγραφή Όλων Των Τηλεοπτικών Σειρών", "delete_all_series_button": "Διαγραφή Όλων Των Τηλεοπτικών Σειρών",
@@ -546,13 +466,8 @@
"failed_to_delete_all_series": "Αποτυχία διαγραφής Όλων των 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 +477,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 +495,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 +604,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 +632,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 +671,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 +693,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 +798,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 +934,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...",

View File

@@ -304,6 +304,21 @@
"default_playback_speed": "Default playback speed", "default_playback_speed": "Default playback speed",
"auto_play_next_episode": "Auto-play next episode", "auto_play_next_episode": "Auto-play next episode",
"max_auto_play_episode_count": "Max auto-play episode count", "max_auto_play_episode_count": "Max auto-play episode count",
"segment_skip_settings": "Segment skip settings",
"segment_skip_settings_description": "Configure skip behavior for intros, credits, and other segments",
"skip_intro": "Skip intro",
"skip_intro_description": "Action when intro segment is detected",
"skip_outro": "Skip outro/credits",
"skip_outro_description": "Action when outro/credits segment is detected",
"skip_recap": "Skip recap",
"skip_recap_description": "Action when recap segment is detected",
"skip_commercial": "Skip commercial",
"skip_commercial_description": "Action when commercial segment is detected",
"skip_preview": "Skip preview",
"skip_preview_description": "Action when preview segment is detected",
"segment_skip_none": "None",
"segment_skip_ask": "Show skip button",
"segment_skip_auto": "Auto skip",
"disabled": "Disabled" "disabled": "Disabled"
}, },
"music": { "music": {
@@ -629,6 +644,10 @@
"settings": "Settings", "settings": "Settings",
"skip_intro": "Skip intro", "skip_intro": "Skip intro",
"skip_credits": "Skip credits", "skip_credits": "Skip credits",
"skip_outro": "Skip outro",
"skip_recap": "Skip recap",
"skip_commercial": "Skip commercial",
"skip_preview": "Skip preview",
"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?",

View File

@@ -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,13 +314,12 @@
"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": {
"plugins_title": "Plugins", "plugins_title": "Plugins",
"jellyseerr": { "jellyseerr": {
"jellyseerr_warning": "Esta integración está en sus primeras etapas. Cuenta con posibles cambios.",
"server_url": "URL del servidor", "server_url": "URL del servidor",
"server_url_hint": "Ejemplo: http(s)://tu-dominio.url\n(añade el puerto si es necesario)", "server_url_hint": "Ejemplo: http(s)://tu-dominio.url\n(añade el puerto si es necesario)",
"server_url_placeholder": "URL de Jellyseerr...", "server_url_placeholder": "URL de Jellyseerr...",
@@ -413,23 +348,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 +375,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 +386,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 +395,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 +416,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",
@@ -518,10 +441,7 @@
"downloads_title": "Descargas", "downloads_title": "Descargas",
"series": "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_series_button": "Eliminar todas las series", "delete_all_series_button": "Eliminar todas las series",
@@ -546,13 +466,8 @@
"failed_to_delete_all_series": "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 +477,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 +495,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 +604,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 +632,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 +671,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 +693,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 +798,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 +934,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...",

View File

@@ -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",
@@ -384,7 +320,6 @@
"plugins": { "plugins": {
"plugins_title": "Liitännäiset", "plugins_title": "Liitännäiset",
"jellyseerr": { "jellyseerr": {
"jellyseerr_warning": "Tämä integraatio on alkuvaiheessa. Odota muutoksia.",
"server_url": "Palvelimen URL", "server_url": "Palvelimen URL",
"server_url_hint": "Esimerkki: http(s)://verkkotunnus.url\n(lisää portti tarvittaessa)", "server_url_hint": "Esimerkki: http(s)://verkkotunnus.url\n(lisää portti tarvittaessa)",
"server_url_placeholder": "Jellyseerr URL...", "server_url_placeholder": "Jellyseerr URL...",
@@ -413,23 +348,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 +375,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 +386,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 +395,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 +416,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",
@@ -518,10 +441,7 @@
"downloads_title": "Lataukset", "downloads_title": "Lataukset",
"series": "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_series_button": "Poista kaikki TV-sarjat", "delete_all_series_button": "Poista kaikki TV-sarjat",
@@ -546,13 +466,8 @@
"failed_to_delete_all_series": "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 +477,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 +495,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 +604,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 +632,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 +671,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 +693,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 +798,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 +934,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...",

View File

@@ -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 laccé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 daccueil (bêta)", "show_large_home_carousel": "Afficher le grand carrousel daccueil (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",
@@ -384,7 +320,6 @@
"plugins": { "plugins": {
"plugins_title": "Plugins", "plugins_title": "Plugins",
"jellyseerr": { "jellyseerr": {
"jellyseerr_warning": "Cette intégration est dans ses débuts. Attendez-vous à ce que des choses changent.",
"server_url": "URL du serveur", "server_url": "URL du serveur",
"server_url_hint": "Exemple : http(s)://votre-domaine.url\n(ajouter le port si nécessaire)", "server_url_hint": "Exemple : http(s)://votre-domaine.url\n(ajouter le port si nécessaire)",
"server_url_placeholder": "URL de Seerr...", "server_url_placeholder": "URL de Seerr...",
@@ -413,23 +348,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 +375,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 +386,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 +395,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 +416,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",
@@ -518,10 +441,7 @@
"downloads_title": "Téléchargements", "downloads_title": "Téléchargements",
"series": "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_series_button": "Supprimer toutes les séries", "delete_all_series_button": "Supprimer toutes les séries",
@@ -546,13 +466,8 @@
"failed_to_delete_all_series": "É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 +477,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 +495,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 +604,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 +632,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 +671,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 +693,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 +798,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 +934,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...",

View File

@@ -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",
@@ -384,7 +320,6 @@
"plugins": { "plugins": {
"plugins_title": "תוספים", "plugins_title": "תוספים",
"jellyseerr": { "jellyseerr": {
"jellyseerr_warning": "חלק זה נמצא עדיין בשלבים מוקדמים. צפו שדברים ישתנו.",
"server_url": "כתובת ה-URL של השרת", "server_url": "כתובת ה-URL של השרת",
"server_url_hint": "לדוגמא: http(s)://your-host.url\n(הוסף פורט במידת הצורך)", "server_url_hint": "לדוגמא: http(s)://your-host.url\n(הוסף פורט במידת הצורך)",
"server_url_placeholder": "כתובת ה-URL של Seerr", "server_url_placeholder": "כתובת ה-URL של Seerr",
@@ -413,23 +348,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 +375,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 +386,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 +395,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 +416,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",
@@ -518,10 +441,7 @@
"downloads_title": "הורדות", "downloads_title": "הורדות",
"series": "סדרות", "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_series_button": "מחק את כל הסדרות", "delete_all_series_button": "מחק את כל הסדרות",
@@ -546,13 +466,8 @@
"failed_to_delete_all_series": "נכשל במחיקת כל הסדרות", "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 +477,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 +495,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 +604,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 +632,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 +671,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 +693,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 +798,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 +934,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...",

View File

@@ -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",
@@ -384,7 +320,6 @@
"plugins": { "plugins": {
"plugins_title": "Bővítmények", "plugins_title": "Bővítmények",
"jellyseerr": { "jellyseerr": {
"jellyseerr_warning": "Ez az integráció még korai stádiumban van. Számíts a változásokra.",
"server_url": "Szerver URL", "server_url": "Szerver URL",
"server_url_hint": "Példa: http(s)://a-te-szolgáltatód.url\n(adj meg portot, ha szükséges)", "server_url_hint": "Példa: http(s)://a-te-szolgáltatód.url\n(adj meg portot, ha szükséges)",
"server_url_placeholder": "Jellyseerr URL...", "server_url_placeholder": "Jellyseerr URL...",
@@ -413,23 +348,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 +375,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 +386,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 +395,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 +416,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",
@@ -518,10 +441,7 @@
"downloads_title": "Letöltések", "downloads_title": "Letöltések",
"series": "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_series_button": "Összes Sorozat Törlése", "delete_all_series_button": "Összes Sorozat Törlése",
@@ -546,13 +466,8 @@
"failed_to_delete_all_series": "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 +477,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 +495,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 +604,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 +632,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 +671,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 +693,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 +798,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 +934,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...",

View File

@@ -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,46 +41,46 @@
"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 rimuove {{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": "Nessuna Protezione",
"no_protection_desc": "Quick login without authentication", "no_protection_desc": "Accesso rapido senza autenticazione",
"pin_code": "PIN code", "pin_code": "Codice PIN",
"pin_code_desc": "4-digit PIN required when switching", "pin_code_desc": "PIN di 4 cifre richiesto quando si cambia utente",
"password": "Re-enter password", "password": "Inserisci nuovamente la password",
"password_desc": "Password required when switching", "password_desc": "Password richiesta quando si cambia",
"save_button": "Save", "save_button": "Salva",
"cancel_button": "Cancel" "cancel_button": "Annulla"
}, },
"pin": { "pin": {
"enter_pin": "Enter PIN", "enter_pin": "Inserisci il PIN",
"enter_pin_for": "Enter PIN for {{username}}", "enter_pin_for": "Inserisci PIN per {{username}}",
"enter_4_digits": "Enter 4 digits", "enter_4_digits": "Inserisci 4 cifre",
"invalid_pin": "Invalid PIN", "invalid_pin": "PIN non valido",
"setup_pin": "Set Up PIN", "setup_pin": "Set Up PIN",
"confirm_pin": "Confirm PIN", "confirm_pin": "Conferma PIN",
"pins_dont_match": "PINs don't match", "pins_dont_match": "I PIN non corrispondono",
"forgot_pin": "Forgot PIN?", "forgot_pin": "Hai dimenticato il PIN?",
"forgot_pin_desc": "Your saved credentials will be removed" "forgot_pin_desc": "Le credenziali salvate verranno rimosse"
}, },
"password": { "password": {
"enter_password": "Enter Password", "enter_password": "Enter Password",
"enter_password_for": "Enter password for {{username}}", "enter_password_for": "Inserire la password per {{username}}",
"invalid_password": "Invalid password" "invalid_password": "Password errata"
}, },
"home": { "home": {
"checking_server_connection": "Controllo connessione server...", "checking_server_connection": "Controllo connessione server...",
@@ -95,7 +95,7 @@
"oops": "Ops!", "oops": "Ops!",
"error_message": "Qualcosa è andato storto. \nEffetturare il logout e riaccedere.", "error_message": "Qualcosa è andato storto. \nEffetturare il logout e riaccedere.",
"continue_watching": "Continua a guardare", "continue_watching": "Continua a guardare",
"continue": "Continue", "continue": "Continua",
"next_up": "Prossimo", "next_up": "Prossimo",
"continue_and_next_up": "Continue & Next Up", "continue_and_next_up": "Continue & Next Up",
"recently_added_in": "Aggiunti di recente a {{libraryName}}", "recently_added_in": "Aggiunti di recente a {{libraryName}}",
@@ -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": "attuale"
}, },
"categories": { "categories": {
"title": "Categorie" "title": "Categorie"
@@ -143,37 +143,37 @@
"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": "Piccolo",
"display_size_default": "Default", "display_size_default": "Predefinito",
"display_size_large": "Large", "display_size_large": "Grande",
"display_size_extra_large": "Extra Large" "display_size_extra_large": "Extra Large"
}, },
"network": { "network": {
"title": "Network", "title": "Rete",
"local_network": "", "local_network": "Rete locale",
"auto_switch_enabled": "Auto-switch when at home", "auto_switch_enabled": "Cambia automaticamente quando sei in casa",
"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": "URL locale",
"local_url_hint": "Enter your local server address (e.g., http://192.168.1.100:8096)", "local_url_hint": "Enter your local server address (e.g., http://192.168.1.100:8096)",
"local_url_placeholder": "http://192.168.1.100:8096", "local_url_placeholder": "http://192.168.1.100:8096",
"home_wifi_networks": "Home WiFi Networks", "home_wifi_networks": "Home WiFi Networks",
"add_current_network": "Add \"{{ssid}}\"", "add_current_network": "Aggiungi \"{{ssid}}\"",
"not_connected_to_wifi": "Not connected to WiFi", "not_connected_to_wifi": "Not connected to WiFi",
"no_networks_configured": "No networks configured", "no_networks_configured": "Nessuna rete configurata",
"add_network_hint": "Add your home WiFi network to enable auto-switching", "add_network_hint": "Add your home WiFi network to enable auto-switching",
"current_wifi": "WiFi Attuale", "current_wifi": "WiFi Attuale",
"using_url": "Sta utilizzando", "using_url": "Sta utilizzando",
"local": "Local URL", "local": "URL locale",
"remote": "Remote URL", "remote": "URL remoto",
"not_connected": "Not connected", "not_connected": "Non connesso",
"current_server": "Current Server", "current_server": "Current Server",
"remote_url": "Remote URL", "remote_url": "URL remoto",
"active_url": "Active URL", "active_url": "URL Attivo",
"not_configured": "Not configured", "not_configured": "Non configurato",
"network_added": "Network added", "network_added": "Rete aggiunta",
"network_already_added": "Network already added", "network_already_added": "Rete già inserita",
"no_wifi_connected": "Not connected to WiFi", "no_wifi_connected": "Not connected to WiFi",
"permission_denied": "Location permission denied", "permission_denied": "Autorizzazione alla posizione negata",
"permission_denied_explanation": "Location permission is required to detect WiFi network for auto-switching. Please enable it in Settings." "permission_denied_explanation": "Location permission is required to detect WiFi network for auto-switching. Please enable it in Settings."
}, },
"user_info": { "user_info": {
@@ -202,9 +202,9 @@
"buffer": { "buffer": {
"title": "Buffer Settings", "title": "Buffer Settings",
"cache_mode": "Cache Mode", "cache_mode": "Cache Mode",
"cache_auto": "Auto", "cache_auto": "Automatico",
"cache_yes": "Enabled", "cache_yes": "Abilitato",
"cache_no": "Disabled", "cache_no": "Disabilitato",
"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 (Consigliato)",
"gpu": "gpu" "gpu": "gpu"
}, },
"gesture_controls": { "gesture_controls": {
@@ -224,7 +224,7 @@
"right_side_volume": "Controllo Volume Laterale Destro", "right_side_volume": "Controllo Volume Laterale Destro",
"right_side_volume_description": "Scorri verso l'alto/verso il basso per regolare il volume", "right_side_volume_description": "Scorri verso l'alto/verso il basso per regolare il volume",
"hide_volume_slider": "Hide Volume Slider", "hide_volume_slider": "Hide Volume Slider",
"hide_volume_slider_description": "Hide the volume slider in the video player", "hide_volume_slider_description": "Nascondi il cursore del volume nel lettore video",
"hide_brightness_slider": "Hide Brightness Slider", "hide_brightness_slider": "Hide Brightness Slider",
"hide_brightness_slider_description": "Hide the brightness slider in the video player" "hide_brightness_slider_description": "Hide the brightness slider in the video player"
}, },
@@ -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",
@@ -384,7 +320,6 @@
"plugins": { "plugins": {
"plugins_title": "Plugin", "plugins_title": "Plugin",
"jellyseerr": { "jellyseerr": {
"jellyseerr_warning": "Questa integrazione è in fase iniziale. Aspettarsi cambiamenti.",
"server_url": "URL del Server", "server_url": "URL del Server",
"server_url_hint": "Esempio: http(s)://tuo-host.url\n(aggiungere la porta se richiesto)", "server_url_hint": "Esempio: http(s)://tuo-host.url\n(aggiungere la porta se richiesto)",
"server_url_placeholder": "URL di Jellyseerr...", "server_url_placeholder": "URL di Jellyseerr...",
@@ -413,23 +348,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 +375,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 +386,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 +395,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 +416,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",
@@ -518,10 +441,7 @@
"downloads_title": "Scaricati", "downloads_title": "Scaricati",
"series": "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_series_button": "Cancella tutte le serie TV", "delete_all_series_button": "Cancella tutte le serie TV",
@@ -546,13 +466,8 @@
"failed_to_delete_all_series": "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 +477,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 +495,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 +604,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 +632,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 +671,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 +693,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 +798,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 +934,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...",

View File

@@ -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",
@@ -384,7 +320,6 @@
"plugins": { "plugins": {
"plugins_title": "プラグイン", "plugins_title": "プラグイン",
"jellyseerr": { "jellyseerr": {
"jellyseerr_warning": "この統合はまだ初期段階です。状況が変化する可能性があります。",
"server_url": "サーバーURL", "server_url": "サーバーURL",
"server_url_hint": "例: http(s)://your-host.url\n(必要に応じてポートを追加)", "server_url_hint": "例: http(s)://your-host.url\n(必要に応じてポートを追加)",
"server_url_placeholder": "Jellyseerr URL...", "server_url_placeholder": "Jellyseerr URL...",
@@ -413,23 +348,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 +375,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 +386,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 +395,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 +416,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",
@@ -518,10 +441,7 @@
"downloads_title": "ダウンロード", "downloads_title": "ダウンロード",
"series": "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_series_button": "すべてのシリーズを削除", "delete_all_series_button": "すべてのシリーズを削除",
@@ -546,13 +466,8 @@
"failed_to_delete_all_series": "すべてのシリーズを削除できませんでした", "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 +477,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 +495,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 +604,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 +632,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 +671,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 +693,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 +798,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 +934,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...",

View File

@@ -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",
@@ -384,7 +320,6 @@
"plugins": { "plugins": {
"plugins_title": "Plugins", "plugins_title": "Plugins",
"jellyseerr": { "jellyseerr": {
"jellyseerr_warning": "This integration is in its early stages. Expect things to change.",
"server_url": "Server URL", "server_url": "Server URL",
"server_url_hint": "Example: http(s)://your-host.url\n(add port if required)", "server_url_hint": "Example: http(s)://your-host.url\n(add port if required)",
"server_url_placeholder": "Seerr URL", "server_url_placeholder": "Seerr URL",
@@ -413,23 +348,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 +375,7 @@
"refresh_from_server": "서버에서 설정 새로고침" "refresh_from_server": "서버에서 설정 새로고침"
}, },
"kefinTweaks": { "kefinTweaks": {
"watchlist_enabler": "관심 목록 통합 기능 활성화", "watchlist_enabler": "관심 목록 통합 기능 활성화"
"watchlist_button": "관심 목록 연동 켜기/끄기"
} }
}, },
"storage": { "storage": {
@@ -457,7 +386,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 +395,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 +416,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",
@@ -518,10 +441,7 @@
"downloads_title": "Downloads", "downloads_title": "Downloads",
"series": "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_series_button": "Delete All TV-Series", "delete_all_series_button": "Delete All TV-Series",
@@ -546,13 +466,8 @@
"failed_to_delete_all_series": "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 +477,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 +495,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 +604,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 +632,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 +671,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 +693,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 +798,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 +934,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...",

View File

@@ -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",
@@ -384,7 +320,6 @@
"plugins": { "plugins": {
"plugins_title": "Uitbreidingen", "plugins_title": "Uitbreidingen",
"jellyseerr": { "jellyseerr": {
"jellyseerr_warning": "Deze integratie is nog in een vroeg stadium. Verwacht dat zaken nog veranderen.",
"server_url": "Server-URL", "server_url": "Server-URL",
"server_url_hint": "Voorbeeld: http(s)://je-host.url\n(indien nodig: voeg de poort toe)", "server_url_hint": "Voorbeeld: http(s)://je-host.url\n(indien nodig: voeg de poort toe)",
"server_url_placeholder": "Jellyseerr URL...", "server_url_placeholder": "Jellyseerr URL...",
@@ -413,23 +348,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 +375,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 +386,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 +395,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 +416,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",
@@ -518,10 +441,7 @@
"downloads_title": "Downloads", "downloads_title": "Downloads",
"series": "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_series_button": "Verwijder alle Series", "delete_all_series_button": "Verwijder alle Series",
@@ -546,13 +466,8 @@
"failed_to_delete_all_series": "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 +477,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 +495,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 +604,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 +632,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 +671,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 +693,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 +798,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 +934,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...",

View File

@@ -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",
@@ -384,7 +320,6 @@
"plugins": { "plugins": {
"plugins_title": "Utvidelser", "plugins_title": "Utvidelser",
"jellyseerr": { "jellyseerr": {
"jellyseerr_warning": "Denne integreringen er i tidlige faser. Forvent ting å forandre.",
"server_url": "URL til server", "server_url": "URL til server",
"server_url_hint": "Eksempel: http(s)://your-host.url\n(legg til port hvis nødvendig)", "server_url_hint": "Eksempel: http(s)://your-host.url\n(legg til port hvis nødvendig)",
"server_url_placeholder": "Seerr URL", "server_url_placeholder": "Seerr URL",
@@ -413,23 +348,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 +375,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 +386,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 +395,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 +416,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",
@@ -518,10 +441,7 @@
"downloads_title": "Nedlastinger", "downloads_title": "Nedlastinger",
"series": "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_series_button": "Slett alle TV-Serier", "delete_all_series_button": "Slett alle TV-Serier",
@@ -546,13 +466,8 @@
"failed_to_delete_all_series": "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 +477,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 +495,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 +604,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 +632,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 +671,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 +693,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 +798,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 +934,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...",

View File

@@ -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",
@@ -384,7 +320,6 @@
"plugins": { "plugins": {
"plugins_title": "Wtyczki", "plugins_title": "Wtyczki",
"jellyseerr": { "jellyseerr": {
"jellyseerr_warning": "Ta integracja jest na wczesnym etapie. Należy oczekiwać zmian.",
"server_url": "URL serwera", "server_url": "URL serwera",
"server_url_hint": "Przykład: http(s)://twoja-nazwa.url\n(dodaj port, jeśli jest wymagany)", "server_url_hint": "Przykład: http(s)://twoja-nazwa.url\n(dodaj port, jeśli jest wymagany)",
"server_url_placeholder": "Adres URL Seerr", "server_url_placeholder": "Adres URL Seerr",
@@ -413,23 +348,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 +375,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 +386,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 +395,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 +416,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",
@@ -518,10 +441,7 @@
"downloads_title": "Pobrane", "downloads_title": "Pobrane",
"series": "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_series_button": "Usuń wszystkie seriale", "delete_all_series_button": "Usuń wszystkie seriale",
@@ -546,13 +466,8 @@
"failed_to_delete_all_series": "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 +477,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 +495,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 +604,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 +632,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 +671,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 +693,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 +798,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 +934,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...",

View File

@@ -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",
@@ -384,7 +320,6 @@
"plugins": { "plugins": {
"plugins_title": "Complementos", "plugins_title": "Complementos",
"jellyseerr": { "jellyseerr": {
"jellyseerr_warning": "Essa integração está em suas fases iniciais. Espere que as coisas mudem.",
"server_url": "URL do servidor", "server_url": "URL do servidor",
"server_url_hint": "Exemplo: http(s)://seu-host.url\n(adicionar porta se necessário)", "server_url_hint": "Exemplo: http(s)://seu-host.url\n(adicionar porta se necessário)",
"server_url_placeholder": "URL do Seerr", "server_url_placeholder": "URL do Seerr",
@@ -413,23 +348,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 +375,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 +386,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 +395,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 +416,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",
@@ -518,10 +441,7 @@
"downloads_title": "Downloads", "downloads_title": "Downloads",
"series": "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_series_button": "Excluir todas as séries", "delete_all_series_button": "Excluir todas as séries",
@@ -546,13 +466,8 @@
"failed_to_delete_all_series": "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 +477,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 +495,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 +604,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 +632,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 +671,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 +693,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 +798,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 +934,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...",

View File

@@ -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",
@@ -384,7 +320,6 @@
"plugins": { "plugins": {
"plugins_title": "Plugin-uri", "plugins_title": "Plugin-uri",
"jellyseerr": { "jellyseerr": {
"jellyseerr_warning": "Această integrare este în stadii incipiente. Așteptați-vă ca lucrurile să se schimbe.",
"server_url": "URL Server", "server_url": "URL Server",
"server_url_hint": "Exemplu: http(s)://your-host.url\n(adăugați portul dacă este necesar)", "server_url_hint": "Exemplu: http(s)://your-host.url\n(adăugați portul dacă este necesar)",
"server_url_placeholder": "Jellyseerr URL...", "server_url_placeholder": "Jellyseerr URL...",
@@ -413,23 +348,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 +375,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 +386,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 +395,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 +416,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",
@@ -518,10 +441,7 @@
"downloads_title": "Descărcări", "downloads_title": "Descărcări",
"series": "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_series_button": "Șterge toate serialele", "delete_all_series_button": "Șterge toate serialele",
@@ -546,13 +466,8 @@
"failed_to_delete_all_series": "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 +477,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 +495,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 +604,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 +632,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 +671,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 +693,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 +798,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 +934,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...",

View File

@@ -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": "Воспроизведение",
@@ -384,7 +320,6 @@
"plugins": { "plugins": {
"plugins_title": "Плагины", "plugins_title": "Плагины",
"jellyseerr": { "jellyseerr": {
"jellyseerr_warning": "Эта интеграция находится на ранней стадии. Ожидайте изменений.",
"server_url": "URL сервера", "server_url": "URL сервера",
"server_url_hint": "Пример: http(s)://your-host.url\n(добавьте порт если необходимо)", "server_url_hint": "Пример: http(s)://your-host.url\n(добавьте порт если необходимо)",
"server_url_placeholder": "Seerr URL...", "server_url_placeholder": "Seerr URL...",
@@ -413,23 +348,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 +375,7 @@
"refresh_from_server": "Обновить настройки с сервера" "refresh_from_server": "Обновить настройки с сервера"
}, },
"kefinTweaks": { "kefinTweaks": {
"watchlist_enabler": "Включить интеграцию со списками просмотра", "watchlist_enabler": "Включить интеграцию со списками просмотра"
"watchlist_button": "Изменить интеграцию со списками просмотра"
} }
}, },
"storage": { "storage": {
@@ -457,7 +386,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 +395,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 +416,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",
@@ -518,10 +441,7 @@
"downloads_title": "Загрузки", "downloads_title": "Загрузки",
"series": "Сериалы", "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_series_button": "Удалить все сериалы", "delete_all_series_button": "Удалить все сериалы",
@@ -546,13 +466,8 @@
"failed_to_delete_all_series": "Возникла ошибка при удалении всех сериалов", "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 +477,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 +495,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 +604,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 +632,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 +671,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 +693,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 +798,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 +934,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...",

View File

@@ -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",
@@ -384,7 +320,6 @@
"plugins": { "plugins": {
"plugins_title": "Tillägg", "plugins_title": "Tillägg",
"jellyseerr": { "jellyseerr": {
"jellyseerr_warning": "Denna integration är i ett tidigt skede. Räkna med att saker och ting förändras.",
"server_url": "Serveradress", "server_url": "Serveradress",
"server_url_hint": "Exempel: http(s)://your-host.url\n(lägg till port vid behov)", "server_url_hint": "Exempel: http(s)://your-host.url\n(lägg till port vid behov)",
"server_url_placeholder": "Seerr URL", "server_url_placeholder": "Seerr URL",
@@ -413,23 +348,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 +375,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 +386,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 +395,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 +416,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",
@@ -518,10 +441,7 @@
"downloads_title": "Nedladdningar", "downloads_title": "Nedladdningar",
"series": "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_series_button": "Ta Bort Alla TV-Serier", "delete_all_series_button": "Ta Bort Alla TV-Serier",
@@ -546,13 +466,8 @@
"failed_to_delete_all_series": "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 +477,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 +495,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 +604,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 +632,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 +671,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 +693,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 +798,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 +934,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...",

View File

@@ -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",
@@ -384,7 +320,6 @@
"plugins": { "plugins": {
"plugins_title": "Plugins", "plugins_title": "Plugins",
"jellyseerr": { "jellyseerr": {
"jellyseerr_warning": "This integration is in its early stages. Expect things to change.",
"server_url": "Server URL", "server_url": "Server URL",
"server_url_hint": "Example: http(s)://your-host.url\n(add port if required)", "server_url_hint": "Example: http(s)://your-host.url\n(add port if required)",
"server_url_placeholder": "Seerr URL", "server_url_placeholder": "Seerr URL",
@@ -413,23 +348,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 +375,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 +386,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 +395,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 +416,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",
@@ -518,10 +441,7 @@
"downloads_title": "Downloads", "downloads_title": "Downloads",
"series": "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_series_button": "Delete All TV-Series", "delete_all_series_button": "Delete All TV-Series",
@@ -546,13 +466,8 @@
"failed_to_delete_all_series": "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 +477,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 +495,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 +604,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 +632,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 +671,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 +693,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 +798,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 +934,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...",

View File

@@ -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",
@@ -384,7 +320,6 @@
"plugins": { "plugins": {
"plugins_title": "mIwHom", "plugins_title": "mIwHom",
"jellyseerr": { "jellyseerr": {
"jellyseerr_warning": "mIwHomvam chu'. ghoSlaH.",
"server_url": "Ho'Do' veS URL", "server_url": "Ho'Do' veS URL",
"server_url_hint": "ghu': http(s)://HoDo-veS.url\n(pord yIbel)", "server_url_hint": "ghu': http(s)://HoDo-veS.url\n(pord yIbel)",
"server_url_placeholder": "Jellyseerr URL...", "server_url_placeholder": "Jellyseerr URL...",
@@ -413,23 +348,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 +375,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 +386,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 +395,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 +416,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",
@@ -518,10 +441,7 @@
"downloads_title": "Qaw' Doch", "downloads_title": "Qaw' Doch",
"series": "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_series_button": "Hoch TV Hem yIQaw'", "delete_all_series_button": "Hoch TV Hem yIQaw'",
@@ -546,13 +466,8 @@
"failed_to_delete_all_series": "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 +477,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 +495,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 +604,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 +632,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 +671,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 +693,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 +798,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 +934,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...",

View File

@@ -261,43 +261,6 @@
"None": "Yok", "None": "Yok",
"OnlyForced": "Sadece Zorunlu" "OnlyForced": "Sadece Zorunlu"
}, },
"text_color": "Metin Rengi",
"background_color": "Arkaplan Rengi",
"outline_color": "Kenarlık Rengi",
"outline_thickness": "Kenarlık kalınlığı",
"background_opacity": "Arkaplan Opaklığı",
"outline_opacity": "Kenarlık Opaklığı",
"bold_text": "Kalın Metin",
"colors": {
"Black": "Siyah",
"Gray": "Gri",
"Silver": "Gümüş",
"White": "Beyaz",
"Maroon": "Kestane",
"Red": "Kırmızı",
"Fuchsia": "Fuşya",
"Yellow": "Sarı",
"Olive": "Zeytin yeşili",
"Green": "Yeşil",
"Teal": "Deniz mavisi",
"Lime": "Limon",
"Purple": "Mor",
"Navy": "Lacivert",
"Blue": "Mavi",
"Aqua": "Açık Mavi"
},
"thickness": {
"None": "Hiçbiri",
"Thin": "İnce",
"Normal": "Normal",
"Thick": "Kalın"
},
"subtitle_color": "Altyazı Rengi",
"subtitle_background_color": "Arkaplan Rengi",
"subtitle_font": "Altyazı Yazı Tipi",
"ksplayer_title": "KSPlayer Ayarları",
"hardware_decode": "Donanımsal Kod Çözme",
"hardware_decode_description": "Video kod çözme için donanımsal hızlandırma kullan. Oynatma sorunları yaşıyorsanız devre dışı bırakı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": "VLC Altyazı Ayarları",
"hint": "VLC oynatıcı için altyazı görünümünü değiştirin. Değişiklikler bir sonraki oynatmada etkili olacak.",
"text_color": "Metin Rengi",
"background_color": "Arkaplan Rengi",
"background_opacity": "Arkaplan Opaklığı",
"outline_color": "Kenarlık Rengi",
"outline_opacity": "Kenarlık Opaklığı",
"outline_thickness": "Kenarlık Kalınlığı",
"bold": "Kalın Metin",
"margin": "Alt Kenar Boşluğu"
},
"video_player": {
"title": "Video oynatıcısı",
"video_player": "Video oynatıcısı",
"video_player_description": "iOS'da hangi video oynatıcının kullanılacağını seçin.",
"ksplayer": "KSPlayer",
"vlc": "VLC"
},
"other": { "other": {
"other_title": "Diğer", "other_title": "Diğer",
"video_orientation": "Video Yönü", "video_orientation": "Video Yönü",
@@ -351,11 +295,6 @@
"UNKNOWN": "Bilinmeyen" "UNKNOWN": "Bilinmeyen"
}, },
"safe_area_in_controls": "Kontrollerde Güvenli Alan", "safe_area_in_controls": "Kontrollerde Güvenli Alan",
"video_player": "Video player",
"video_players": {
"VLC_3": "VLC 3",
"VLC_4": "VLC 4 (Deneysel + PiP)"
},
"show_custom_menu_links": "Özel Menü Bağlantılarını Göster", "show_custom_menu_links": "Özel Menü Bağlantılarını Göster",
"show_large_home_carousel": "Show Large Home Carousel (beta)", "show_large_home_carousel": "Show Large Home Carousel (beta)",
"hide_libraries": "Kütüphaneleri Gizle", "hide_libraries": "Kütüphaneleri Gizle",
@@ -367,9 +306,6 @@
"max_auto_play_episode_count": "En Fazla Otomatik Oynatılacak Bölüm Sayısı", "max_auto_play_episode_count": "En Fazla Otomatik Oynatılacak Bölüm Sayısı",
"disabled": "Devre dışı" "disabled": "Devre dışı"
}, },
"downloads": {
"downloads_title": "İndirmeler"
},
"music": { "music": {
"title": "Müzik", "title": "Müzik",
"playback_title": "Oynatma", "playback_title": "Oynatma",
@@ -384,7 +320,6 @@
"plugins": { "plugins": {
"plugins_title": "Eklentiler", "plugins_title": "Eklentiler",
"jellyseerr": { "jellyseerr": {
"jellyseerr_warning": "Bu entegrasyon erken aşamalardadır. Değişiklikler olabilir.",
"server_url": "Sunucu URL'si", "server_url": "Sunucu URL'si",
"server_url_hint": "Örnek: http(s)://your-host.url\n(port gerekiyorsa ekleyin)", "server_url_hint": "Örnek: http(s)://your-host.url\n(port gerekiyorsa ekleyin)",
"server_url_placeholder": "Jellyseerr URL...", "server_url_placeholder": "Jellyseerr URL...",
@@ -413,23 +348,18 @@
"read_more_about_marlin": "Marlin hakkında daha fazla oku.", "read_more_about_marlin": "Marlin hakkında daha fazla oku.",
"save_button": "Kaydet", "save_button": "Kaydet",
"toasts": { "toasts": {
"saved": "Kaydedildi", "saved": "Kaydedildi"
"refreshed": "Ayarlar sunucudan yeniden alındı" }
},
"refresh_from_server": "Ayarları Sunucudan Yeniden Al"
}, },
"streamystats": { "streamystats": {
"enable_streamystats": "Streamystats'ı Etkinleştir",
"disable_streamystats": "Streamystats'ı Devre Dışı Bırak", "disable_streamystats": "Streamystats'ı Devre Dışı Bırak",
"enable_search": "Arama için kullan", "enable_search": "Arama için kullan",
"url": "URL Adresi", "url": "URL Adresi",
"server_url_placeholder": "http(s)://streamystats.example.com", "server_url_placeholder": "http(s)://streamystats.example.com",
"streamystats_search_hint": "Streamystats sunucu URL'sini girin. URL, http veya https içermeli ve isteğe bağlı olarak portu içerebilir.", "streamystats_search_hint": "Streamystats sunucu URL'sini girin. URL, http veya https içermeli ve isteğe bağlı olarak portu içerebilir.",
"read_more_about_streamystats": "Streamystats hakkında daha fazla bilgi.", "read_more_about_streamystats": "Streamystats hakkında daha fazla bilgi.",
"save_button": "Kaydet",
"save": "Kaydet", "save": "Kaydet",
"features_title": "Özellikler", "features_title": "Özellikler",
"home_sections_title": "Home Sections",
"enable_movie_recommendations": "Film Önerileri", "enable_movie_recommendations": "Film Önerileri",
"enable_series_recommendations": "Dizi Önerileri", "enable_series_recommendations": "Dizi Önerileri",
"enable_promoted_watchlists": "Promoted Watchlists", "enable_promoted_watchlists": "Promoted Watchlists",
@@ -445,8 +375,7 @@
"refresh_from_server": "Ayarları Sunucudan Yeniden Al" "refresh_from_server": "Ayarları Sunucudan Yeniden Al"
}, },
"kefinTweaks": { "kefinTweaks": {
"watchlist_enabler": "Enable our Watchlist integration", "watchlist_enabler": "Enable our Watchlist integration"
"watchlist_button": "Toggle Watchlist integration"
} }
}, },
"storage": { "storage": {
@@ -457,7 +386,6 @@
"delete_all_downloaded_files": "Tüm indirilen dosyaları sil", "delete_all_downloaded_files": "Tüm indirilen dosyaları sil",
"music_cache_title": "Müzik Ön Belleği", "music_cache_title": "Müzik Ön Belleği",
"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": "Müzik Ön Belleğini Etkinleştir",
"clear_music_cache": "Müzik Ön Belleğini Temizle", "clear_music_cache": "Müzik Ön Belleğini Temizle",
"music_cache_size": "{{size}} ön belleklendi", "music_cache_size": "{{size}} ön belleklendi",
"music_cache_cleared": "Müzik ön belleği temizlendi", "music_cache_cleared": "Müzik ön belleği temizlendi",
@@ -467,8 +395,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 +416,12 @@
"system": "Sistem" "system": "Sistem"
}, },
"toasts": { "toasts": {
"error_deleting_files": "Dosyalar silinirken hata oluştu", "error_deleting_files": "Dosyalar silinirken hata oluştu"
"background_downloads_enabled": "Arka plan indirmeleri etkinleştirildi",
"background_downloads_disabled": "Arka plan indirmeleri devre dışı bırakıldı"
}, },
"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",
@@ -518,10 +441,7 @@
"downloads_title": "İndirilenler", "downloads_title": "İndirilenler",
"series": "Diziler", "series": "Diziler",
"movies": "Filmler", "movies": "Filmler",
"queue": "Sıra",
"other_media": "Diğer medya", "other_media": "Diğer medya",
"queue_hint": "Sıra ve indirmeler uygulama yeniden başlatıldığında kaybolacaktır",
"no_items_in_queue": "Sırada öğe yok",
"no_downloaded_items": "İndirilen öğe yok", "no_downloaded_items": "İndirilen öğe yok",
"delete_all_movies_button": "Tüm Filmleri Sil", "delete_all_movies_button": "Tüm Filmleri Sil",
"delete_all_series_button": "Tüm Dizileri Sil", "delete_all_series_button": "Tüm Dizileri Sil",
@@ -546,13 +466,8 @@
"failed_to_delete_all_series": "Diziler silinemedi", "failed_to_delete_all_series": "Diziler silinemedi",
"deleted_media_successfully": "Diğer medya başarıyla silindi!", "deleted_media_successfully": "Diğer medya başarıyla silindi!",
"failed_to_delete_media": "Failed to Delete other media", "failed_to_delete_media": "Failed to Delete other media",
"download_deleted": "İndirme silindi",
"download_cancelled": "İndirme iptal edildi", "download_cancelled": "İndirme iptal edildi",
"could_not_delete_download": "İndirme Silinemedi", "could_not_delete_download": "İndirme Silinemedi",
"download_paused": "İndirme Duraklatıldı",
"could_not_pause_download": "İndirme Duraklatılamadı",
"download_resumed": "İndirme Devam Ediyor",
"could_not_resume_download": "İndirme Devam Ettirilemedi",
"download_completed": "İndirme tamamlandı", "download_completed": "İndirme tamamlandı",
"download_failed": "İndirme başarısız oldu", "download_failed": "İndirme başarısız oldu",
"download_failed_for_item": "{{item}} için indirme başarısız oldu - {{error}}", "download_failed_for_item": "{{item}} için indirme başarısız oldu - {{error}}",
@@ -562,10 +477,7 @@
"item_already_downloading": "{{item}} zaten indiriliyor", "item_already_downloading": "{{item}} zaten indiriliyor",
"all_files_deleted": "Bütün indirilenler başarıyla silindi", "all_files_deleted": "Bütün indirilenler başarıyla silindi",
"files_deleted_by_type": "{{count}} {{type}} silindi", "files_deleted_by_type": "{{count}} {{type}} silindi",
"all_files_folders_and_jobs_deleted_successfully": "Tüm dosyalar, klasörler ve işler başarıyla silindi",
"failed_to_clean_cache_directory": "Önbellek dizini temizlenemedi",
"could_not_get_download_url_for_item": "{{itemName}} için indirme URL'si alınamadı", "could_not_get_download_url_for_item": "{{itemName}} için indirme URL'si alınamadı",
"go_to_downloads": "İndirmelere git",
"file_deleted": "{{item}} silindi" "file_deleted": "{{item}} silindi"
} }
} }
@@ -583,16 +495,17 @@
"none": "Hiçbiri", "none": "Hiçbiri",
"track": "Parça", "track": "Parça",
"cancel": "Vazgeç", "cancel": "Vazgeç",
"stop": "Stop",
"delete": "Sil", "delete": "Sil",
"ok": "Tamam", "ok": "Tamam",
"remove": "Kaldır", "remove": "Kaldır",
"next": "Sonraki",
"back": "Geri", "back": "Geri",
"continue": "Devam", "continue": "Devam",
"verifying": "Doğrulanıyor...", "verifying": "Doğrulanıyor...",
"login": "Login", "login": "Login",
"refresh": "Refresh" "episodes": "Episodes",
"movies": "Movies",
"loading": "Loading…",
"seeAll": "See all"
}, },
"search": { "search": {
"search": "Ara...", "search": "Ara...",
@@ -691,10 +604,6 @@
"could_not_create_stream_for_chromecast": "Chromecast için yayın oluşturulamadı", "could_not_create_stream_for_chromecast": "Chromecast için yayın oluşturulamadı",
"message_from_server": "Sunucudan mesaj: {{message}}", "message_from_server": "Sunucudan mesaj: {{message}}",
"next_episode": "Sonraki bölüm", "next_episode": "Sonraki bölüm",
"refresh_tracks": "Parçaları yenile",
"audio_tracks": "Ses Parçaları:",
"playback_state": "Oynatma Durumu:",
"index": "İndeks:",
"continue_watching": "İzlemeye devam et", "continue_watching": "İzlemeye devam et",
"go_back": "Geri", "go_back": "Geri",
"downloaded_file_title": "Bu dosya indirilmiş", "downloaded_file_title": "Bu dosya indirilmiş",
@@ -723,7 +632,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 +671,6 @@
"show_more": "Daha fazla göster", "show_more": "Daha fazla göster",
"show_less": "Daha az göster", "show_less": "Daha az göster",
"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 +693,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": "Sonraki", "next": "Sonraki",
@@ -888,13 +798,9 @@
"playlists": "Çalma listeleri", "playlists": "Çalma listeleri",
"tracks": "parçalar" "tracks": "parçalar"
}, },
"filters": {
"all": "Tümü"
},
"recently_added": "Son Eklenenler", "recently_added": "Son Eklenenler",
"recently_played": "Son Oynatılanlar", "recently_played": "Son Oynatılanlar",
"frequently_played": "Sık Oynatılanlar", "frequently_played": "Sık Oynatılanlar",
"explore": "Keşfet",
"top_tracks": "En Popülar Parçalar", "top_tracks": "En Popülar Parçalar",
"play": "Oynat", "play": "Oynat",
"shuffle": "Karıştır", "shuffle": "Karıştır",
@@ -1028,7 +934,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...",

View File

@@ -261,43 +261,6 @@
"None": "Някий", "None": "Някий",
"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": "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_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 (Experimental + 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", "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",
@@ -384,7 +320,6 @@
"plugins": { "plugins": {
"plugins_title": "Плагіни", "plugins_title": "Плагіни",
"jellyseerr": { "jellyseerr": {
"jellyseerr_warning": "Ця інтеграція перебуває на початковій стадії. Очікуйте, що все зміниться.",
"server_url": "URL Сервера", "server_url": "URL Сервера",
"server_url_hint": "Наприклад: http(s)://your-host.url\n(додайте порт якщо необхідно)", "server_url_hint": "Наприклад: http(s)://your-host.url\n(додайте порт якщо необхідно)",
"server_url_placeholder": "Jellyseerr URL...", "server_url_placeholder": "Jellyseerr URL...",
@@ -413,23 +348,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 +375,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 +386,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 +395,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 +416,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",
@@ -518,10 +441,7 @@
"downloads_title": "Завантаження", "downloads_title": "Завантаження",
"series": "ТБ-Серіали", "series": "ТБ-Серіали",
"movies": "Фільми", "movies": "Фільми",
"queue": "Черга",
"other_media": "Other media", "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_series_button": "Видалити всі ТБ-Серіали", "delete_all_series_button": "Видалити всі ТБ-Серіали",
@@ -546,13 +466,8 @@
"failed_to_delete_all_series": "Не вдалося видалити всі телесеріали", "failed_to_delete_all_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": "Завантаження скасоване",
"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_failed": "Download Failed", "download_failed": "Download Failed",
"download_failed_for_item": "Не вдалося завантажити {{item}} - {{error}}", "download_failed_for_item": "Не вдалося завантажити {{item}} - {{error}}",
@@ -562,10 +477,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": "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": "Перейти до завантаження",
"file_deleted": "{{item}} deleted" "file_deleted": "{{item}} deleted"
} }
} }
@@ -583,16 +495,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 +604,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 +632,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 +671,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 +693,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 +798,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 +934,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...",

View File

@@ -261,43 +261,6 @@
"None": "Không hiển thị", "None": "Không hiển thị",
"OnlyForced": "Bắt buộc" "OnlyForced": "Bắt buộc"
}, },
"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": "Không có",
"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": "Khác", "other_title": "Khác",
"video_orientation": "Hướng video", "video_orientation": "Hướng video",
@@ -351,11 +295,6 @@
"UNKNOWN": "Không rõ" "UNKNOWN": "Không rõ"
}, },
"safe_area_in_controls": "Vùng an toàn trong điều khiển", "safe_area_in_controls": "Vùng an toàn trong điều khiển",
"video_player": "Trình phát video",
"video_players": {
"VLC_3": "VLC 3",
"VLC_4": "VLC 4 (Thử nghiệm + PiP)"
},
"show_custom_menu_links": "Hiện liên kết tùy chỉnh", "show_custom_menu_links": "Hiện liên kết tùy chỉnh",
"show_large_home_carousel": "Show Large Home Carousel (beta)", "show_large_home_carousel": "Show Large Home Carousel (beta)",
"hide_libraries": "Ẩn thư viện", "hide_libraries": "Ẩn thư viện",
@@ -367,9 +306,6 @@
"max_auto_play_episode_count": "Số tập tự chạy tối đa", "max_auto_play_episode_count": "Số tập tự chạy tối đa",
"disabled": "Đã tắt" "disabled": "Đã tắt"
}, },
"downloads": {
"downloads_title": "Tải xuống"
},
"music": { "music": {
"title": "Music", "title": "Music",
"playback_title": "Playback", "playback_title": "Playback",
@@ -384,7 +320,6 @@
"plugins": { "plugins": {
"plugins_title": "Plugin", "plugins_title": "Plugin",
"jellyseerr": { "jellyseerr": {
"jellyseerr_warning": "Tích hợp đang trong giai đoạn thử nghiệm. Nội dung có thể thay đổi.",
"server_url": "URL máy chủ", "server_url": "URL máy chủ",
"server_url_hint": "Ví dụ: http(s)://your-host.url (có port nếu cần)", "server_url_hint": "Ví dụ: http(s)://your-host.url (có port nếu cần)",
"server_url_placeholder": "Jellyseerr URL...", "server_url_placeholder": "Jellyseerr URL...",
@@ -413,23 +348,18 @@
"read_more_about_marlin": "Tìm hiểu thêm về Marlin.", "read_more_about_marlin": "Tìm hiểu thêm về Marlin.",
"save_button": "Lưu", "save_button": "Lưu",
"toasts": { "toasts": {
"saved": "Đã lưu", "saved": "Đã lưu"
"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 +375,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 +386,6 @@
"delete_all_downloaded_files": "Xóa toàn bộ tập tin đã tải", "delete_all_downloaded_files": "Xóa toàn bộ tập tin đã tải",
"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 +395,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 +416,12 @@
"system": "Hệ thống" "system": "Hệ thống"
}, },
"toasts": { "toasts": {
"error_deleting_files": "Lỗi khi xóa tập tin", "error_deleting_files": "Lỗi khi xóa tập tin"
"background_downloads_enabled": "Tải trong nền đã bật",
"background_downloads_disabled": "Tải trong nền đã tắt"
}, },
"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",
@@ -518,10 +441,7 @@
"downloads_title": "Tải xuống", "downloads_title": "Tải xuống",
"series": "Chương trình TV", "series": "Chương trình TV",
"movies": "Phim", "movies": "Phim",
"queue": "Hàng đợi",
"other_media": "Other media", "other_media": "Other media",
"queue_hint": "Hàng đợi và tải xuống sẽ bị mất khi khởi động lại ứng dụng",
"no_items_in_queue": "Không có mục trong hàng đợi",
"no_downloaded_items": "Không có mục đã tải", "no_downloaded_items": "Không có mục đã tải",
"delete_all_movies_button": "Xóa tất cả phim", "delete_all_movies_button": "Xóa tất cả phim",
"delete_all_series_button": "Xóa tất cả chương trình TV", "delete_all_series_button": "Xóa tất cả chương trình TV",
@@ -546,13 +466,8 @@
"failed_to_delete_all_series": "Xóa chương trình TV thất bại", "failed_to_delete_all_series": "Xóa chương trình TV thất bại",
"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": "Tải xuống bị hủy", "download_cancelled": "Tải xuống bị hủy",
"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": "Tải xuống hoàn tất", "download_completed": "Tải xuống hoàn tất",
"download_failed": "Download Failed", "download_failed": "Download Failed",
"download_failed_for_item": "Tải {{item}} thất bại {{error}}", "download_failed_for_item": "Tải {{item}} thất bại {{error}}",
@@ -562,10 +477,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": "Đã xóa thành công tất cả tập tin, thư mục và công việc",
"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": "Tới phần tải về",
"file_deleted": "{{item}} deleted" "file_deleted": "{{item}} deleted"
} }
} }
@@ -583,16 +495,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": "Tìm...", "search": "Tìm...",
@@ -691,10 +604,6 @@
"could_not_create_stream_for_chromecast": "Không thể tạo luồng cho Chromecast", "could_not_create_stream_for_chromecast": "Không thể tạo luồng cho Chromecast",
"message_from_server": "Thông báo từ máy chủ: {{message}}", "message_from_server": "Thông báo từ máy chủ: {{message}}",
"next_episode": "Tập tiếp theo", "next_episode": "Tập tiếp theo",
"refresh_tracks": "Làm mới các track",
"audio_tracks": "Track âm thanh:",
"playback_state": "Trạng thái phát:",
"index": "Chỉ mục:",
"continue_watching": "Tiếp tục xem", "continue_watching": "Tiếp tục xem",
"go_back": "Quay lại", "go_back": "Quay lại",
"downloaded_file_title": "You have this file downloaded", "downloaded_file_title": "You have this file downloaded",
@@ -723,7 +632,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 +671,6 @@
"show_more": "Xem thêm", "show_more": "Xem thêm",
"show_less": "Thu gọn", "show_less": "Thu gọ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 +693,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": "Tiếp theo", "next": "Tiếp theo",
@@ -888,13 +798,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 +934,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...",

View File

@@ -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": "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",
@@ -351,11 +295,6 @@
"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",
@@ -384,7 +320,6 @@
"plugins": { "plugins": {
"plugins_title": "Plugins", "plugins_title": "Plugins",
"jellyseerr": { "jellyseerr": {
"jellyseerr_warning": "This integration is in its early stages. Expect things to change.",
"server_url": "Server URL", "server_url": "Server URL",
"server_url_hint": "Example: http(s)://your-host.url\n(add port if required)", "server_url_hint": "Example: http(s)://your-host.url\n(add port if required)",
"server_url_placeholder": "Seerr URL", "server_url_placeholder": "Seerr URL",
@@ -413,23 +348,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 +375,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 +386,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 +395,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 +416,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",
@@ -518,10 +441,7 @@
"downloads_title": "Downloads", "downloads_title": "Downloads",
"series": "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_series_button": "Delete All TV-Series", "delete_all_series_button": "Delete All TV-Series",
@@ -546,13 +466,8 @@
"failed_to_delete_all_series": "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 +477,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 +495,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 +604,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 +632,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 +671,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 +693,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 +798,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 +934,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...",

View File

@@ -183,6 +183,9 @@ export enum TVTypographyScale {
ExtraLarge = "extraLarge", ExtraLarge = "extraLarge",
} }
// Segment skip behavior options
export type SegmentSkipMode = "none" | "ask" | "auto";
// Audio transcoding mode - controls how surround audio is handled // Audio transcoding mode - controls how surround audio is handled
// This controls server-side transcoding behavior for audio streams. // This controls server-side transcoding behavior for audio streams.
// MPV decodes via FFmpeg and supports most formats, but mobile devices // MPV decodes via FFmpeg and supports most formats, but mobile devices
@@ -246,6 +249,12 @@ export type Settings = {
maxAutoPlayEpisodeCount: MaxAutoPlayEpisodeCount; maxAutoPlayEpisodeCount: MaxAutoPlayEpisodeCount;
autoPlayEpisodeCount: number; autoPlayEpisodeCount: number;
autoPlayNextEpisode: boolean; autoPlayNextEpisode: boolean;
// Media segment skip preferences
skipIntro: SegmentSkipMode;
skipOutro: SegmentSkipMode;
skipRecap: SegmentSkipMode;
skipCommercial: SegmentSkipMode;
skipPreview: SegmentSkipMode;
// Playback speed settings // Playback speed settings
defaultPlaybackSpeed: number; defaultPlaybackSpeed: number;
playbackSpeedPerMedia: Record<string, number>; playbackSpeedPerMedia: Record<string, number>;
@@ -349,6 +358,12 @@ export const defaultValues: Settings = {
maxAutoPlayEpisodeCount: { key: "3", value: 3 }, maxAutoPlayEpisodeCount: { key: "3", value: 3 },
autoPlayEpisodeCount: 0, autoPlayEpisodeCount: 0,
autoPlayNextEpisode: true, autoPlayNextEpisode: true,
// Media segment skip defaults
skipIntro: "ask",
skipOutro: "ask",
skipRecap: "ask",
skipCommercial: "ask",
skipPreview: "ask",
// Playback speed defaults // Playback speed defaults
defaultPlaybackSpeed: 1.0, defaultPlaybackSpeed: 1.0,
playbackSpeedPerMedia: {}, playbackSpeedPerMedia: {},

View File

@@ -1,46 +1,40 @@
import { Api } from "@jellyfin/sdk"; import { Api } from "@jellyfin/sdk";
import { MediaSegmentType } from "@jellyfin/sdk/lib/generated-client/models/media-segment-type";
import { getMediaSegmentsApi } from "@jellyfin/sdk/lib/utils/api/media-segments-api";
import { useQuery } from "@tanstack/react-query"; import { useQuery } from "@tanstack/react-query";
import React from "react"; import React from "react";
import { DownloadedItem, MediaTimeSegment } from "@/providers/Downloads/types"; import { DownloadedItem, MediaTimeSegment } from "@/providers/Downloads/types";
import { getAuthHeaders } from "./jellyfin/jellyfin"; import { getAuthHeaders } from "./jellyfin/jellyfin";
// New Jellyfin 10.11+ Media Segments API types export interface SegmentBuckets {
interface MediaSegmentDto { introSegments: MediaTimeSegment[];
Id: string; creditSegments: MediaTimeSegment[];
ItemId: string; recapSegments: MediaTimeSegment[];
Type: "Intro" | "Outro" | "Recap" | "Commercial" | "Preview"; commercialSegments: MediaTimeSegment[];
StartTicks: number; previewSegments: MediaTimeSegment[];
EndTicks: number;
} }
interface MediaSegmentsResponse { // Legacy endpoints (intro-skipper / chapter-credits plugins on pre-10.11 servers)
Items: MediaSegmentDto[];
}
// Legacy API types (for fallback)
interface IntroTimestamps { interface IntroTimestamps {
EpisodeId: string;
HideSkipPromptAt: number;
IntroEnd: number;
IntroStart: number; IntroStart: number;
ShowSkipPromptAt: number; IntroEnd: number;
Valid: boolean; Valid: boolean;
} }
interface CreditTimestamps { interface CreditTimestamps {
Introduction: { Credits: { Start: number; End: number; Valid: boolean };
Start: number;
End: number;
Valid: boolean;
};
Credits: {
Start: number;
End: number;
Valid: boolean;
};
} }
const TICKS_PER_SECOND = 10000000; const TICKS_PER_SECOND = 10_000_000;
const ticksToSeconds = (ticks: number): number => ticks / TICKS_PER_SECOND;
const emptyBuckets = (): SegmentBuckets => ({
introSegments: [],
creditSegments: [],
recapSegments: [],
commercialSegments: [],
previewSegments: [],
});
export const useSegments = ( export const useSegments = (
itemId: string, itemId: string,
@@ -48,7 +42,6 @@ export const useSegments = (
downloadedFiles: DownloadedItem[] | undefined, downloadedFiles: DownloadedItem[] | undefined,
api: Api | null, api: Api | null,
) => { ) => {
// Memoize the lookup so the array is only traversed when dependencies change
const downloadedItem = React.useMemo( const downloadedItem = React.useMemo(
() => downloadedFiles?.find((d) => d.item.Id === itemId), () => downloadedFiles?.find((d) => d.item.Id === itemId),
[downloadedFiles, itemId], [downloadedFiles, itemId],
@@ -65,141 +58,110 @@ export const useSegments = (
} }
return fetchAndParseSegments(itemId, api); return fetchAndParseSegments(itemId, api);
}, },
enabled: isOffline ? !!downloadedItem : !!api, enabled: !!itemId && (isOffline ? !!downloadedItem : !!api),
}); });
}; };
export const getSegmentsForItem = ( export const getSegmentsForItem = (item: DownloadedItem): SegmentBuckets => ({
item: DownloadedItem, introSegments: item.introSegments || [],
): { creditSegments: item.creditSegments || [],
introSegments: MediaTimeSegment[]; recapSegments: item.recapSegments || [],
creditSegments: MediaTimeSegment[]; commercialSegments: item.commercialSegments || [],
} => { previewSegments: item.previewSegments || [],
return { });
introSegments: item.introSegments || [],
creditSegments: item.creditSegments || [],
};
};
/** /** Jellyfin 10.11+ unified MediaSegments API. Returns null so the caller can fall back. */
* Converts Jellyfin ticks to seconds
*/
const ticksToSeconds = (ticks: number): number => ticks / TICKS_PER_SECOND;
/**
* Fetches segments using the new Jellyfin 10.11+ MediaSegments API
*/
const fetchMediaSegments = async ( const fetchMediaSegments = async (
itemId: string, itemId: string,
api: Api, api: Api,
): Promise<{ ): Promise<SegmentBuckets | null> => {
introSegments: MediaTimeSegment[];
creditSegments: MediaTimeSegment[];
} | null> => {
try { try {
const response = await api.axiosInstance.get<MediaSegmentsResponse>( const response = await getMediaSegmentsApi(api).getItemSegments({
`${api.basePath}/MediaSegments/${itemId}`, itemId,
{ includeSegmentTypes: [
headers: getAuthHeaders(api), MediaSegmentType.Intro,
params: { MediaSegmentType.Outro,
includeSegmentTypes: ["Intro", "Outro"], MediaSegmentType.Recap,
}, MediaSegmentType.Commercial,
}, MediaSegmentType.Preview,
); ],
});
const introSegments: MediaTimeSegment[] = []; const buckets = emptyBuckets();
const creditSegments: MediaTimeSegment[] = []; for (const segment of response.data.Items ?? []) {
if (segment.StartTicks == null || segment.EndTicks == null) continue;
response.data.Items.forEach((segment) => {
const timeSegment: MediaTimeSegment = { const timeSegment: MediaTimeSegment = {
startTime: ticksToSeconds(segment.StartTicks), startTime: ticksToSeconds(segment.StartTicks),
endTime: ticksToSeconds(segment.EndTicks), endTime: ticksToSeconds(segment.EndTicks),
text: segment.Type, text: segment.Type ?? "",
}; };
switch (segment.Type) { switch (segment.Type) {
case "Intro": case MediaSegmentType.Intro:
introSegments.push(timeSegment); buckets.introSegments.push(timeSegment);
break; break;
case "Outro": case MediaSegmentType.Outro:
creditSegments.push(timeSegment); buckets.creditSegments.push(timeSegment);
break; break;
// Optionally handle other types like Recap, Commercial, Preview case MediaSegmentType.Recap:
default: buckets.recapSegments.push(timeSegment);
break;
case MediaSegmentType.Commercial:
buckets.commercialSegments.push(timeSegment);
break;
case MediaSegmentType.Preview:
buckets.previewSegments.push(timeSegment);
break; break;
} }
}); }
return { introSegments, creditSegments }; return buckets;
} catch (_error) { } catch {
// Return null to indicate we should try legacy endpoints
return null; return null;
} }
}; };
/** /** Pre-10.11 fallback: third-party intro-skipper / chapter-credits plugin endpoints. */
* Fetches segments using legacy pre-10.11 endpoints
*/
const fetchLegacySegments = async ( const fetchLegacySegments = async (
itemId: string, itemId: string,
api: Api, api: Api,
): Promise<{ ): Promise<SegmentBuckets> => {
introSegments: MediaTimeSegment[]; const buckets = emptyBuckets();
creditSegments: MediaTimeSegment[];
}> => {
const introSegments: MediaTimeSegment[] = [];
const creditSegments: MediaTimeSegment[] = [];
try { const [introRes, creditRes] = await Promise.allSettled([
const [introRes, creditRes] = await Promise.allSettled([ api.axiosInstance.get<IntroTimestamps>(
api.axiosInstance.get<IntroTimestamps>( `${api.basePath}/Episode/${itemId}/IntroTimestamps`,
`${api.basePath}/Episode/${itemId}/IntroTimestamps`, { headers: getAuthHeaders(api) },
{ headers: getAuthHeaders(api) }, ),
), api.axiosInstance.get<CreditTimestamps>(
api.axiosInstance.get<CreditTimestamps>( `${api.basePath}/Episode/${itemId}/Timestamps`,
`${api.basePath}/Episode/${itemId}/Timestamps`, { headers: getAuthHeaders(api) },
{ headers: getAuthHeaders(api) }, ),
), ]);
]);
if (introRes.status === "fulfilled" && introRes.value.data.Valid) { if (introRes.status === "fulfilled" && introRes.value.data.Valid) {
introSegments.push({ buckets.introSegments.push({
startTime: introRes.value.data.IntroStart, startTime: introRes.value.data.IntroStart,
endTime: introRes.value.data.IntroEnd, endTime: introRes.value.data.IntroEnd,
text: "Intro", text: "Intro",
}); });
}
if (
creditRes.status === "fulfilled" &&
creditRes.value.data.Credits.Valid
) {
creditSegments.push({
startTime: creditRes.value.data.Credits.Start,
endTime: creditRes.value.data.Credits.End,
text: "Credits",
});
}
} catch (error) {
console.error("Failed to fetch legacy segments", error);
} }
return { introSegments, creditSegments }; if (creditRes.status === "fulfilled" && creditRes.value.data.Credits.Valid) {
buckets.creditSegments.push({
startTime: creditRes.value.data.Credits.Start,
endTime: creditRes.value.data.Credits.End,
text: "Outro",
});
}
return buckets;
}; };
export const fetchAndParseSegments = async ( export const fetchAndParseSegments = async (
itemId: string, itemId: string,
api: Api, api: Api,
): Promise<{ ): Promise<SegmentBuckets> => {
introSegments: MediaTimeSegment[];
creditSegments: MediaTimeSegment[];
}> => {
// Try new API first (Jellyfin 10.11+)
const newSegments = await fetchMediaSegments(itemId, api); const newSegments = await fetchMediaSegments(itemId, api);
if (newSegments) { return newSegments ?? fetchLegacySegments(itemId, api);
return newSegments;
}
// Fallback to legacy endpoints
return fetchLegacySegments(itemId, api);
}; };