From 7092074a17213a231dfa969e56cab78a3a46a27c Mon Sep 17 00:00:00 2001 From: Lampan-git Date: Tue, 3 Sep 2024 21:55:09 +0200 Subject: [PATCH 001/695] Add OriginalLanguage as option to PreferredAudioLanguage --- CONTRIBUTORS.md | 1 + src/components/playbackSettings/playbackSettings.js | 1 + src/components/settingshelper.js | 2 ++ src/strings/en-gb.json | 1 + src/strings/en-us.json | 1 + src/strings/sv.json | 1 + 6 files changed, 7 insertions(+) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 4ac70e9204..2d77de055b 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -103,6 +103,7 @@ - [TheBosZ](https://github.com/thebosz) - [qm3jp](https://github.com/qm3jp) - [johnnyg](https://github.com/johnnyg) +- [Lampan-git](https://github.com/Lampan-git) ## Emby Contributors diff --git a/src/components/playbackSettings/playbackSettings.js b/src/components/playbackSettings/playbackSettings.js index a98b3ab3fe..5369c05e80 100644 --- a/src/components/playbackSettings/playbackSettings.js +++ b/src/components/playbackSettings/playbackSettings.js @@ -37,6 +37,7 @@ function populateLanguages(select, languages) { let html = ''; html += ``; + html += ``; for (let i = 0, length = languages.length; i < length; i++) { const culture = languages[i]; diff --git a/src/components/settingshelper.js b/src/components/settingshelper.js index 9ba6ee5800..fd1a3cc362 100644 --- a/src/components/settingshelper.js +++ b/src/components/settingshelper.js @@ -9,6 +9,8 @@ export function populateLanguages(select, languages) { let html = ''; html += "'; + html += ``; + for (let i = 0, length = languages.length; i < length; i++) { const culture = languages[i]; html += "'; diff --git a/src/strings/en-gb.json b/src/strings/en-gb.json index 90e98205ef..69057d4c03 100644 --- a/src/strings/en-gb.json +++ b/src/strings/en-gb.json @@ -565,6 +565,7 @@ "OptionAllowAudioPlaybackTranscoding": "Allow audio playback that requires transcoding", "OptionAllUsers": "All users", "Option3D": "3D", + "OriginalLanguage": "Original Language", "OnlyImageFormats": "Only Image Formats (VobSub, PGS, SUB)", "OnlyForcedSubtitlesHelp": "Only subtitles marked as forced will be loaded.", "Normal": "Normal", diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 28fbf0b55f..8d1a338fd9 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1345,6 +1345,7 @@ "OptionWeekly": "Weekly", "OriginalAirDate": "Original Air Date", "OriginalAirDateValue": "Original air date: {0}", + "OriginalLanguage": "Original Language", "Other": "Other", "OtherArtist": "Other Artist", "Overview": "Overview", diff --git a/src/strings/sv.json b/src/strings/sv.json index ac23cca1a5..6584172a49 100644 --- a/src/strings/sv.json +++ b/src/strings/sv.json @@ -882,6 +882,7 @@ "OptionWeekends": "Helger", "OptionWeekly": "Varje vecka", "OriginalAirDateValue": "Ursprungligt sändningsdatum: {0}", + "OriginalLanguage": "Orignalspråk", "Overview": "Översikt", "PackageInstallCancelled": "Installationen av {0} (version {1}) avbröts.", "PackageInstallCompleted": "Installationen av {0} (version {1}) slutfördes.", From 41b8817c4702e468e626719ed11ea3c7d3c52f3c Mon Sep 17 00:00:00 2001 From: Lampan-git Date: Wed, 4 Sep 2024 21:05:27 +0200 Subject: [PATCH 002/695] Fix settinghelper.js --- src/components/settingshelper.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/settingshelper.js b/src/components/settingshelper.js index fd1a3cc362..212342b464 100644 --- a/src/components/settingshelper.js +++ b/src/components/settingshelper.js @@ -9,7 +9,7 @@ export function populateLanguages(select, languages) { let html = ''; html += "'; - html += ``; + html += "'; for (let i = 0, length = languages.length; i < length; i++) { const culture = languages[i]; From 674a7171b6115c6f1b2238a073395fc52f91f054 Mon Sep 17 00:00:00 2001 From: Lampan-git Date: Sat, 7 Sep 2024 12:33:09 +0200 Subject: [PATCH 003/695] Add OriginalLanguage to metadataEditor --- src/components/metadataEditor/metadataEditor.js | 13 +++++++++++-- .../metadataEditor/metadataEditor.template.html | 3 +++ src/strings/en-gb.json | 1 + src/strings/en-us.json | 1 + src/strings/sv.json | 1 + 5 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/components/metadataEditor/metadataEditor.js b/src/components/metadataEditor/metadataEditor.js index 3197d754d4..63cadf83f2 100644 --- a/src/components/metadataEditor/metadataEditor.js +++ b/src/components/metadataEditor/metadataEditor.js @@ -129,6 +129,7 @@ function onSubmit(e) { Id: currentItem.Id, Name: form.querySelector('#txtName').value, OriginalTitle: form.querySelector('#txtOriginalName').value, + OriginalLanguage: form.querySelector('#txtOriginalLanguage').value, ForcedSortName: form.querySelector('#txtSortName').value, CommunityRating: form.querySelector('#txtCommunityRating').value, CriticRating: form.querySelector('#txtCriticRating').value, @@ -301,8 +302,8 @@ function bindAll(elems, eventName, fn) { } function onResetClick() { - const resetElementId = ['#txtName', '#txtOriginalName', '#txtSortName', '#txtCommunityRating', '#txtCriticRating', '#txtIndexNumber', - '#txtAirsBeforeSeason', '#txtAirsAfterSeason', '#txtAirsBeforeEpisode', '#txtParentIndexNumber', '#txtAlbum', + const resetElementId = ['#txtName', '#txtOriginalName', '#txtOriginalLanguage', '#txtSortName', '#txtCommunityRating', '#txtCriticRating', + '#txtIndexNumber', '#txtAirsBeforeSeason', '#txtAirsAfterSeason', '#txtAirsBeforeEpisode', '#txtParentIndexNumber', '#txtAlbum', '#txtAlbumArtist', '#txtArtist', '#txtOverview', '#selectStatus', '#txtAirTime', '#txtPremiereDate', '#txtDateAdded', '#txtEndDate', '#txtProductionYear', '#selectHeight', '#txtOriginalAspectRatio', '#select3dFormat', '#selectOfficialRating', '#selectCustomRating', '#txtSeriesRuntime', '#txtTagline']; @@ -549,6 +550,12 @@ function setFieldVisibilities(context, item) { hideElement('#fldOriginalName', context); } + if (item.Type === 'Series' || item.Type === 'Movie' || item.Type === 'Episode') { + showElement('#fldOriginalLanguage', context); + } else { + hideElement('#fldOriginalLanguage', context); + } + if (item.Type === 'Series') { showElement('#fldSeriesRuntime', context); } else { @@ -662,6 +669,7 @@ function setFieldVisibilities(context, item) { context.querySelector('#txtName').label(globalize.translate('LabelName')); context.querySelector('#txtSortName').label(globalize.translate('LabelSortName')); context.querySelector('#txtOriginalName').label(globalize.translate('LabelOriginalName')); + context.querySelector('#txtOriginalLanguage').label(globalize.translate('LabelOriginalName')); context.querySelector('#txtProductionYear').label(globalize.translate('LabelBirthYear')); context.querySelector('#txtPremiereDate').label(globalize.translate('LabelBirthDate')); context.querySelector('#txtEndDate').label(globalize.translate('LabelDeathDate')); @@ -789,6 +797,7 @@ function fillItemInfo(context, item, parentalRatingOptions) { context.querySelector('#txtPath').value = item.Path || ''; context.querySelector('#txtName').value = item.Name || ''; context.querySelector('#txtOriginalName').value = item.OriginalTitle || ''; + context.querySelector('#txtOriginalLanguage').value = item.OriginalLanguage || ''; context.querySelector('#txtOverview').value = item.Overview || ''; context.querySelector('#txtTagline').value = (item.Taglines?.length ? item.Taglines[0] : ''); context.querySelector('#txtSortName').value = item.ForcedSortName || ''; diff --git a/src/components/metadataEditor/metadataEditor.template.html b/src/components/metadataEditor/metadataEditor.template.html index 9c71040720..23e700ae4a 100644 --- a/src/components/metadataEditor/metadataEditor.template.html +++ b/src/components/metadataEditor/metadataEditor.template.html @@ -39,6 +39,9 @@
+
+ +
diff --git a/src/strings/en-gb.json b/src/strings/en-gb.json index 69057d4c03..fb02349189 100644 --- a/src/strings/en-gb.json +++ b/src/strings/en-gb.json @@ -891,6 +891,7 @@ "LabelPassword": "Password", "LabelParentalRating": "Parental rating", "LabelParentNumber": "Parent number", + "LabelOriginalLanguage": "Original language", "LabelOptionalNetworkPath": "Shared network folder", "LabelNewsCategories": "News categories", "LabelNewPasswordConfirm": "New password confirm", diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 8d1a338fd9..6ef9e6904f 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -846,6 +846,7 @@ "LabelOriginalAspectRatio": "Original aspect ratio", "LabelOriginalName": "Original name", "LabelOriginalTitle": "Original title", + "LabelOriginalLanguage": "Original language", "LabelOverview": "Overview", "LabelParallelImageEncodingLimit": "Parallel image encoding limit", "LabelParallelImageEncodingLimitHelp": "Maximum number of image encodings that are allowed to run in parallel. Leaving this empty will choose a limit based on your systems core count.", diff --git a/src/strings/sv.json b/src/strings/sv.json index 6584172a49..d6c24e1df0 100644 --- a/src/strings/sv.json +++ b/src/strings/sv.json @@ -574,6 +574,7 @@ "LabelOptionalNetworkPathHelp": "Om denna mappen delas på ditt nätverk, kan den delade sökvägen tillåta klienter på andra enheter att streama mediafiler direkt. Till exempel, {0} eller {1}.", "LabelOriginalAspectRatio": "Ursprungligt bildförhållande", "LabelOriginalTitle": "Originaltitel", + "LabelOriginalLanguage": "Originalspråk", "LabelOverview": "Sammanfattning", "LabelParentNumber": "Parentnummer", "LabelParentalRating": "Åldersgräns", From 28d362e854f2a9e09846838640857f890b30d244 Mon Sep 17 00:00:00 2001 From: Lampan-git Date: Sat, 7 Sep 2024 15:27:06 +0200 Subject: [PATCH 004/695] Remove translations --- src/strings/en-gb.json | 2 -- src/strings/sv.json | 2 -- 2 files changed, 4 deletions(-) diff --git a/src/strings/en-gb.json b/src/strings/en-gb.json index fb02349189..90e98205ef 100644 --- a/src/strings/en-gb.json +++ b/src/strings/en-gb.json @@ -565,7 +565,6 @@ "OptionAllowAudioPlaybackTranscoding": "Allow audio playback that requires transcoding", "OptionAllUsers": "All users", "Option3D": "3D", - "OriginalLanguage": "Original Language", "OnlyImageFormats": "Only Image Formats (VobSub, PGS, SUB)", "OnlyForcedSubtitlesHelp": "Only subtitles marked as forced will be loaded.", "Normal": "Normal", @@ -891,7 +890,6 @@ "LabelPassword": "Password", "LabelParentalRating": "Parental rating", "LabelParentNumber": "Parent number", - "LabelOriginalLanguage": "Original language", "LabelOptionalNetworkPath": "Shared network folder", "LabelNewsCategories": "News categories", "LabelNewPasswordConfirm": "New password confirm", diff --git a/src/strings/sv.json b/src/strings/sv.json index d6c24e1df0..ac23cca1a5 100644 --- a/src/strings/sv.json +++ b/src/strings/sv.json @@ -574,7 +574,6 @@ "LabelOptionalNetworkPathHelp": "Om denna mappen delas på ditt nätverk, kan den delade sökvägen tillåta klienter på andra enheter att streama mediafiler direkt. Till exempel, {0} eller {1}.", "LabelOriginalAspectRatio": "Ursprungligt bildförhållande", "LabelOriginalTitle": "Originaltitel", - "LabelOriginalLanguage": "Originalspråk", "LabelOverview": "Sammanfattning", "LabelParentNumber": "Parentnummer", "LabelParentalRating": "Åldersgräns", @@ -883,7 +882,6 @@ "OptionWeekends": "Helger", "OptionWeekly": "Varje vecka", "OriginalAirDateValue": "Ursprungligt sändningsdatum: {0}", - "OriginalLanguage": "Orignalspråk", "Overview": "Översikt", "PackageInstallCancelled": "Installationen av {0} (version {1}) avbröts.", "PackageInstallCompleted": "Installationen av {0} (version {1}) slutfördes.", From 28961203ae39f8277b21aa38ddea7b804b8520a6 Mon Sep 17 00:00:00 2001 From: Lampan-git Date: Sat, 7 Sep 2024 16:00:13 +0200 Subject: [PATCH 005/695] Remove txtOriginalLanguage querySelector if Type is Person --- src/components/metadataEditor/metadataEditor.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/metadataEditor/metadataEditor.js b/src/components/metadataEditor/metadataEditor.js index 63cadf83f2..d97936f372 100644 --- a/src/components/metadataEditor/metadataEditor.js +++ b/src/components/metadataEditor/metadataEditor.js @@ -669,7 +669,6 @@ function setFieldVisibilities(context, item) { context.querySelector('#txtName').label(globalize.translate('LabelName')); context.querySelector('#txtSortName').label(globalize.translate('LabelSortName')); context.querySelector('#txtOriginalName').label(globalize.translate('LabelOriginalName')); - context.querySelector('#txtOriginalLanguage').label(globalize.translate('LabelOriginalName')); context.querySelector('#txtProductionYear').label(globalize.translate('LabelBirthYear')); context.querySelector('#txtPremiereDate').label(globalize.translate('LabelBirthDate')); context.querySelector('#txtEndDate').label(globalize.translate('LabelDeathDate')); From 09e5c43f04542de31f33e9788bdd9760ef0820c6 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Fri, 20 Mar 2026 16:14:05 -0400 Subject: [PATCH 006/695] Fix chromium browsers not cleaning up backdrops --- src/components/backdrop/backdrop.js | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/components/backdrop/backdrop.js b/src/components/backdrop/backdrop.js index 2add49b1d5..1e3f667039 100644 --- a/src/components/backdrop/backdrop.js +++ b/src/components/backdrop/backdrop.js @@ -16,7 +16,7 @@ function enableRotation() { } class Backdrop { - load(url, parent, existingBackdropImage) { + load(url, parent) { const img = new Image(); const self = this; @@ -35,9 +35,6 @@ class Backdrop { parent.appendChild(backdropImage); if (!enableAnimation()) { - if (existingBackdropImage?.parentNode) { - existingBackdropImage.parentNode.removeChild(existingBackdropImage); - } internalBackdrop(true); return; } @@ -49,9 +46,6 @@ class Backdrop { if (backdropImage === self.currentAnimatingElement) { self.currentAnimatingElement = null; } - if (existingBackdropImage?.parentNode) { - existingBackdropImage.parentNode.removeChild(existingBackdropImage); - } }; dom.addEventListener(backdropImage, dom.whichAnimationEvent(), onAnimationComplete, { @@ -148,16 +142,13 @@ function setBackdropImage(url) { const elem = getBackdropContainer(); const existingBackdropImage = elem.querySelector('.displayingBackdropImage'); - + // If the current backdrop image is the same as the new one, do nothing if (existingBackdropImage && existingBackdropImage.getAttribute('data-url') === url) { - if (existingBackdropImage.getAttribute('data-url') === url) { - return; - } - existingBackdropImage.classList.remove('displayingBackdropImage'); + return; } const instance = new Backdrop(); - instance.load(url, elem, existingBackdropImage); + instance.load(url, elem); currentLoadingBackdrop = instance; } @@ -251,7 +242,16 @@ function onRotationInterval() { } currentRotationIndex = newIndex; - setBackdropImage(currentRotatingImages[newIndex]); + const currentImage = currentRotatingImages[newIndex]; + setBackdropImage(currentImage); + + // Remove old images after a delay to allow fade-in animation (800ms) to complete + setTimeout(() => { + const oldImages = getBackdropContainer().querySelectorAll(`.backdropImage:not([data-url="${currentImage}"])`); + oldImages.forEach(img => { + img.parentNode?.removeChild(img); + }); + }, 1600); } function clearRotation() { From 4eee1d601403c7bd149f0576f0642b0385f2123d Mon Sep 17 00:00:00 2001 From: nyanmisaka Date: Tue, 31 Mar 2026 19:46:56 +0800 Subject: [PATCH 007/695] Compact the "playback info" overlay to add more infos - Utilize horizontal space to display more items, this should also avoid the overlay extending beyond the screen on mobile devices. - Add more video information such as video color, pixel format, bit depth, framerate, and level. Signed-off-by: nyanmisaka --- src/components/playerstats/playerstats.js | 222 +++++++++++----------- src/plugins/htmlVideoPlayer/plugin.js | 49 ++--- src/strings/en-us.json | 11 +- 3 files changed, 140 insertions(+), 142 deletions(-) diff --git a/src/components/playerstats/playerstats.js b/src/components/playerstats/playerstats.js index 4208bc4f65..19c22786ac 100644 --- a/src/components/playerstats/playerstats.js +++ b/src/components/playerstats/playerstats.js @@ -131,62 +131,45 @@ function getTranscodingStats(session, player, displayPlayMethod) { audioChannels = session.TranscodingInfo.AudioChannels; } + const targetInfos = []; + const transcodeInfos = []; if (videoCodec) { - sessionStats.push({ - label: globalize.translate('LabelVideoCodec'), - value: session.TranscodingInfo.IsVideoDirect ? (videoCodec.toUpperCase() + ' (direct)') : videoCodec.toUpperCase() - }); + targetInfos.push(session.TranscodingInfo.IsVideoDirect ? (`${videoCodec.toUpperCase()} (direct)`) : videoCodec.toUpperCase()); } - if (audioCodec) { - sessionStats.push({ - label: globalize.translate('LabelAudioCodec'), - value: session.TranscodingInfo.IsAudioDirect ? (audioCodec.toUpperCase() + ' (direct)') : audioCodec.toUpperCase() - }); + targetInfos.push(session.TranscodingInfo.IsAudioDirect ? (`${audioCodec.toUpperCase()} (direct)`) : audioCodec.toUpperCase()); } - if (displayPlayMethod === 'Transcode') { if (audioChannels) { - sessionStats.push({ - label: globalize.translate('LabelAudioChannels'), - value: audioChannels - }); + targetInfos.push(`${audioChannels} Ch`); } if (totalBitrate) { - sessionStats.push({ - label: globalize.translate('LabelBitrate'), - value: getDisplayBitrate(totalBitrate) - }); + targetInfos.push(getDisplayBitrate(totalBitrate)); } if (session.TranscodingInfo.CompletionPercentage) { - sessionStats.push({ - label: globalize.translate('LabelTranscodingProgress'), - value: session.TranscodingInfo.CompletionPercentage.toFixed(1) + '%' - }); + transcodeInfos.push(`${session.TranscodingInfo.CompletionPercentage.toFixed(1)}%`); } if (session.TranscodingInfo.Framerate) { - sessionStats.push({ - label: globalize.translate('LabelTranscodingFramerate'), - value: getDisplayTranscodeFps(session, player) - }); + transcodeInfos.push(getDisplayTranscodeFps(session, player)); } - if (session.TranscodingInfo.TranscodeReasons?.length) { - sessionStats.push({ - label: globalize.translate('LabelReasonForTranscoding'), - value: session.TranscodingInfo.TranscodeReasons.map(translateReason).join('
') - }); - } - // Hide this for now because it is not useful in its current state. - // This only reflects the configuration in the dashboard, but the actual - // decoder/encoder selection is more complex. As a result, the hardware - // encoder may not be used even if hardware acceleration is configured, - // making the display of hardware acceleration misleading. - // if (session.TranscodingInfo.HardwareAccelerationType) { - // sessionStats.push({ - // label: globalize.translate('LabelHardwareEncoding'), - // value: session.TranscodingInfo.HardwareAccelerationType - // }); - // } + } + if (targetInfos.length) { + sessionStats.push({ + label: globalize.translate('LabelTargetCodecs'), + value: targetInfos.join(', ') + }); + } + if (transcodeInfos.length) { + sessionStats.push({ + label: globalize.translate('LabelProgressAndSpeed'), + value: transcodeInfos.join(' / ') + }); + } + if (session.TranscodingInfo.TranscodeReasons?.length) { + sessionStats.push({ + label: globalize.translate('LabelReasons'), + value: session.TranscodingInfo.TranscodeReasons.map(translateReason).join('
') + }); } return sessionStats; @@ -196,7 +179,7 @@ function getDisplayBitrate(bitrate) { if (bitrate > 1000000) { return (bitrate / 1000000).toFixed(1) + ' Mbps'; } else { - return Math.floor(bitrate / 1000) + ' kbps'; + return Math.floor(bitrate / 1000) + ' Kbps'; } } @@ -221,24 +204,20 @@ function getMediaSourceStats(session, player) { const totalBitrate = mediaSource.Bitrate; const mediaFileSize = mediaSource.Size; + const containerInfos = []; if (mediaSource.Container) { + containerInfos.push(mediaSource.Container); + } + if (mediaFileSize) { + containerInfos.push(getReadableSize(mediaFileSize)); + } + if (totalBitrate) { + containerInfos.push(getDisplayBitrate(totalBitrate)); + } + if (containerInfos.length) { sessionStats.push({ label: globalize.translate('LabelProfileContainer'), - value: mediaSource.Container - }); - } - - if (mediaFileSize) { - sessionStats.push({ - label: globalize.translate('LabelSize'), - value: getReadableSize(mediaFileSize) - }); - } - - if (totalBitrate) { - sessionStats.push({ - label: globalize.translate('LabelBitrate'), - value: getDisplayBitrate(totalBitrate) + value: containerInfos.join(', ') }); } @@ -255,81 +234,107 @@ function getMediaSourceStats(session, player) { })[0] || {}; const audioCodec = audioStream.Codec; - const audioChannels = audioStream.Channels; - - const videoInfos = []; + const videoCodecInfos = []; if (videoCodec) { - videoInfos.push(videoCodec.toUpperCase()); + videoCodecInfos.push(videoCodec.toUpperCase()); } - - if (videoStream.Profile) { - videoInfos.push(videoStream.Profile); + if (videoStream.VideoDoViTitle) { + videoCodecInfos.push(videoStream.VideoDoViTitle); } - - if (videoInfos.length) { + if (videoCodecInfos.length) { sessionStats.push({ label: globalize.translate('LabelVideoCodec'), - value: videoInfos.join(' ') + value: videoCodecInfos.join(' ') }); } + const videoAttributes = []; + if (videoStream.Profile) { + videoAttributes.push(videoStream.Profile); + } + if (videoStream.Level && videoStream.Level >= 0) { + videoAttributes.push(`Lv ${videoStream.Level}`); + } if (videoStream.BitRate) { + videoAttributes.push(getDisplayBitrate(videoStream.BitRate)); + } + const frameRate = videoStream.AverageFrameRate || videoStream.RealFrameRate; + if (frameRate) { + videoAttributes.push(`${frameRate.toFixed(2)} fps`); + } + if (videoAttributes.length) { sessionStats.push({ - label: globalize.translate('LabelVideoBitrate'), - value: getDisplayBitrate(videoStream.BitRate) + label: globalize.translate('LabelVideoAttributes'), + value: videoAttributes.join(', ') }); } + const videoBitDepthInfos = []; + if (videoStream.BitDepth) { + videoBitDepthInfos.push(`${videoStream.BitDepth} Bit`); + } + if (videoStream.PixelFormat) { + videoBitDepthInfos.push(videoStream.PixelFormat); + } if (videoStream.VideoRangeType) { + videoBitDepthInfos.push(videoStream.VideoRangeType); + } + if (videoBitDepthInfos.length) { sessionStats.push({ - label: globalize.translate('LabelVideoRangeType'), - value: videoStream.VideoDoViTitle || videoStream.VideoRangeType + label: globalize.translate('LabelVideoBitDepth'), + value: videoBitDepthInfos.join(', ') }); } - const audioInfos = []; + const videoColorInfos = []; + if (videoStream.ColorSpace) { + videoColorInfos.push(`${videoStream.ColorSpace}(m)`); + } + if (videoStream.ColorPrimaries) { + videoColorInfos.push(`${videoStream.ColorPrimaries}(p)`); + } + if (videoStream.ColorTransfer) { + videoColorInfos.push(`${videoStream.ColorTransfer}(t)`); + } + if (videoColorInfos.length) { + sessionStats.push({ + label: globalize.translate('LabelVideoColors'), + value: videoColorInfos.join(', ') + }); + } + const audioCodecInfos = []; if (audioCodec) { - audioInfos.push(audioCodec.toUpperCase()); + audioCodecInfos.push(audioCodec.toUpperCase()); } - if (audioStream.Profile) { - audioInfos.push(audioStream.Profile); + audioCodecInfos.push(audioStream.Profile); } - - if (audioInfos.length) { + if (audioCodecInfos.length) { sessionStats.push({ label: globalize.translate('LabelAudioCodec'), - value: audioInfos.join(' ') + value: audioCodecInfos.join(' ') }); } + const audioAttributes = []; + if (audioStream.Channels) { + audioAttributes.push(`${audioStream.Channels} Ch`); + } if (audioStream.BitRate) { - sessionStats.push({ - label: globalize.translate('LabelAudioBitrate'), - value: getDisplayBitrate(audioStream.BitRate) - }); + audioAttributes.push(getDisplayBitrate(audioStream.BitRate)); } - - if (audioChannels) { - sessionStats.push({ - label: globalize.translate('LabelAudioChannels'), - value: audioChannels - }); - } - if (audioStream.SampleRate) { - sessionStats.push({ - label: globalize.translate('LabelAudioSampleRate'), - value: audioStream.SampleRate + ' Hz' - }); + audioAttributes.push(`${audioStream.SampleRate} Hz`); } - if (audioStream.BitDepth) { + audioAttributes.push(`${audioStream.BitDepth} Bit`); + } + if (audioAttributes.length) { sessionStats.push({ - label: globalize.translate('LabelAudioBitDepth'), - value: audioStream.BitDepth + label: globalize.translate('LabelAudioAttributes'), + value: audioAttributes.join(', ') }); } @@ -396,27 +401,18 @@ function getStats(instance, player) { name: globalize.translate('LabelPlaybackInfo') }; - baseCategory.stats.unshift({ - label: globalize.translate('LabelPlayMethod'), - value: localizedDisplayMethod - }); - - baseCategory.stats.unshift({ + const playerInfos = []; + playerInfos.push(player.name); + playerInfos.push(`(${localizedDisplayMethod})`); + baseCategory.stats.push({ label: globalize.translate('LabelPlayer'), - value: player.name + value: playerInfos.join(' ') }); const categories = []; - categories.push(baseCategory); - for (let i = 0, length = playerStats.length; i < length; i++) { const category = playerStats[i]; - if (category.type === 'audio') { - category.name = globalize.translate('LabelAudioInfo'); - } else if (category.type === 'video') { - category.name = globalize.translate('LabelVideoInfo'); - } categories.push(category); } diff --git a/src/plugins/htmlVideoPlayer/plugin.js b/src/plugins/htmlVideoPlayer/plugin.js index 7c2783c5d8..6e5488ce1a 100644 --- a/src/plugins/htmlVideoPlayer/plugin.js +++ b/src/plugins/htmlVideoPlayer/plugin.js @@ -2139,6 +2139,8 @@ export class HtmlVideoPlayer { }; categories.push(mediaCategory); + const mediaInfos = []; + mediaInfos.push(this._hlsPlayer ? 'HLS' : 'Video'); if (playOptions.url) { // create an anchor element (note: no need to append this element to the document) let link = document.createElement('a'); @@ -2147,24 +2149,15 @@ export class HtmlVideoPlayer { const protocol = (link.protocol || '').replace(':', ''); if (protocol) { - mediaCategory.stats.push({ - label: globalize.translate('LabelProtocol'), - value: protocol - }); + mediaInfos.push(`(${protocol})`); } link = null; } - - if (this._hlsPlayer) { + if (mediaInfos.length) { mediaCategory.stats.push({ label: globalize.translate('LabelStreamType'), - value: 'HLS' - }); - } else { - mediaCategory.stats.push({ - label: globalize.translate('LabelStreamType'), - value: 'Video' + value: mediaInfos.join(' ') }); } @@ -2179,37 +2172,37 @@ export class HtmlVideoPlayer { let height = Math.round(rect.height * devicePixelRatio); let width = Math.round(rect.width * devicePixelRatio); - // Don't show player dimensions on smart TVs because the app UI could be lower resolution than the video and this causes users to think there is a problem + const viewInfos = []; + // Don't show player dimensions on smart TVs because the app UI could be lower + // resolution than the video and this causes users to think there is a problem if (width && height && !browser.tv) { - videoCategory.stats.push({ - label: globalize.translate('LabelPlayerDimensions'), - value: `${width}x${height}` - }); + viewInfos.push(`${width}x${height}`); } height = mediaElement.videoHeight; width = mediaElement.videoWidth; - if (width && height) { + viewInfos.push(`${width}x${height}`); + } + if (viewInfos.length) { videoCategory.stats.push({ - label: globalize.translate('LabelVideoResolution'), - value: `${width}x${height}` + label: globalize.translate('LabelPlayerSizes'), + value: viewInfos.join(' / ') }); } if (mediaElement.getVideoPlaybackQuality) { const playbackQuality = mediaElement.getVideoPlaybackQuality(); - const droppedVideoFrames = playbackQuality.droppedVideoFrames || 0; - videoCategory.stats.push({ - label: globalize.translate('LabelDroppedFrames'), - value: droppedVideoFrames - }); - const corruptedVideoFrames = playbackQuality.corruptedVideoFrames || 0; + + const qualityInfos = []; + qualityInfos.push(droppedVideoFrames); + qualityInfos.push(corruptedVideoFrames); + videoCategory.stats.push({ - label: globalize.translate('LabelCorruptedFrames'), - value: corruptedVideoFrames + label: globalize.translate('LabelPlaybackQuality'), + value: qualityInfos.join(' / ') }); } diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 9abf635ea3..e021749a6b 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1894,5 +1894,14 @@ "LabelExternalServerUriHelp": "Published server URI for external access.", "LabelExtractTrickplayDuringLibraryScan": "Extract trickplay images during the library scan", "LabelExtractTrickplayDuringLibraryScanHelp": "Generate trickplay images when videos are imported during the library scan. Otherwise, they will be extracted during the trickplay images scheduled task. If generation is set to non-blocking this will not affect the time a library scan takes to complete.", - "LogLoadFailure": "Failed to load the log file. It may still be actively written to." + "LogLoadFailure": "Failed to load the log file. It may still be actively written to.", + "LabelVideoAttributes": "Video attributes", + "LabelVideoColors": "Video colors", + "LabelVideoBitDepth": "Video bit depth", + "LabelAudioAttributes": "Audio attributes", + "LabelTargetCodecs": "Target codecs", + "LabelProgressAndSpeed": "Progress / speed", + "LabelReasons": "Reasons", + "LabelPlayerSizes": "Player sizes", + "LabelPlaybackQuality": "Frame dropped / corrupted" } From 5f78ecb855f286caff3a58fa1b50a211c85388f5 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Thu, 5 Feb 2026 09:48:50 -0500 Subject: [PATCH 008/695] SyncPlay menu update --- .../components/AppToolbar/SyncPlayButton.tsx | 18 +- .../AppToolbar/menus/SyncPlayMenu.tsx | 182 ++++++------------ .../components/SyncPlayGroupListItem.tsx | 79 ++++++++ .../hooks/api/useCreateSyncPlayGroup.ts | 24 +++ .../hooks/api/useJoinSyncPlayGroup.ts | 24 +++ .../hooks/api/useLeaveSyncPlayGroup.ts | 21 ++ .../syncPlay/hooks/api}/useSyncPlayGroups.ts | 7 +- .../features/syncPlay/hooks/useSyncPlay.ts | 73 +++++++ src/components/UserAvatar.tsx | 16 +- src/plugins/syncPlay/core/Manager.js | 10 +- src/strings/en-us.json | 1 + 11 files changed, 326 insertions(+), 129 deletions(-) create mode 100644 src/apps/experimental/features/syncPlay/components/SyncPlayGroupListItem.tsx create mode 100644 src/apps/experimental/features/syncPlay/hooks/api/useCreateSyncPlayGroup.ts create mode 100644 src/apps/experimental/features/syncPlay/hooks/api/useJoinSyncPlayGroup.ts create mode 100644 src/apps/experimental/features/syncPlay/hooks/api/useLeaveSyncPlayGroup.ts rename src/{hooks => apps/experimental/features/syncPlay/hooks/api}/useSyncPlayGroups.ts (77%) create mode 100644 src/apps/experimental/features/syncPlay/hooks/useSyncPlay.ts diff --git a/src/apps/experimental/components/AppToolbar/SyncPlayButton.tsx b/src/apps/experimental/components/AppToolbar/SyncPlayButton.tsx index f69a95ccb6..edaa6f83ab 100644 --- a/src/apps/experimental/components/AppToolbar/SyncPlayButton.tsx +++ b/src/apps/experimental/components/AppToolbar/SyncPlayButton.tsx @@ -1,23 +1,32 @@ import { SyncPlayUserAccessType } from '@jellyfin/sdk/lib/generated-client/models/sync-play-user-access-type'; +import Badge from '@mui/material/Badge'; import Groups from '@mui/icons-material/Groups'; import IconButton from '@mui/material/IconButton'; import Tooltip from '@mui/material/Tooltip'; import React, { useCallback, useState } from 'react'; +import { QUERY_KEY, useSyncPlayGroups } from 'apps/experimental/features/syncPlay/hooks/api/useSyncPlayGroups'; +import { useSyncPlay } from 'apps/experimental/features/syncPlay/hooks/useSyncPlay'; import { pluginManager } from 'components/pluginManager'; import { useApi } from 'hooks/useApi'; import globalize from 'lib/globalize'; import { PluginType } from 'types/plugin'; +import { queryClient } from 'utils/query/queryClient'; import AppSyncPlayMenu, { ID } from './menus/SyncPlayMenu'; const SyncPlayButton = () => { const { user } = useApi(); + const { isActive } = useSyncPlay(); + const { data: groups } = useSyncPlayGroups(); + const isAvailable = Boolean(groups && groups.length > 0); const [ syncPlayMenuAnchorEl, setSyncPlayMenuAnchorEl ] = useState(null); const isSyncPlayMenuOpen = Boolean(syncPlayMenuAnchorEl); const onSyncPlayButtonClick = useCallback((event: React.MouseEvent) => { + // Refresh SyncPlay groups when opening the menu + void queryClient.invalidateQueries({ queryKey: QUERY_KEY }); setSyncPlayMenuAnchorEl(event.currentTarget); }, [ setSyncPlayMenuAnchorEl ]); @@ -45,7 +54,14 @@ const SyncPlayButton = () => { onClick={onSyncPlayButtonClick} color='inherit' > - + + + diff --git a/src/apps/experimental/components/AppToolbar/menus/SyncPlayMenu.tsx b/src/apps/experimental/components/AppToolbar/menus/SyncPlayMenu.tsx index 5081fcb020..72a6897095 100644 --- a/src/apps/experimental/components/AppToolbar/menus/SyncPlayMenu.tsx +++ b/src/apps/experimental/components/AppToolbar/menus/SyncPlayMenu.tsx @@ -1,6 +1,4 @@ -import type { GroupInfoDto } from '@jellyfin/sdk/lib/generated-client/models/group-info-dto'; import { SyncPlayUserAccessType } from '@jellyfin/sdk/lib/generated-client/models/sync-play-user-access-type'; -import { getSyncPlayApi } from '@jellyfin/sdk/lib/utils/api/sync-play-api'; import GroupAdd from '@mui/icons-material/GroupAdd'; import PersonAdd from '@mui/icons-material/PersonAdd'; import PersonOff from '@mui/icons-material/PersonOff'; @@ -9,20 +7,22 @@ import PlayCircle from '@mui/icons-material/PlayCircle'; import StopCircle from '@mui/icons-material/StopCircle'; import Tune from '@mui/icons-material/Tune'; import Divider from '@mui/material/Divider'; +import ListItem from '@mui/material/ListItem'; import ListItemIcon from '@mui/material/ListItemIcon'; import ListItemText from '@mui/material/ListItemText'; import ListSubheader from '@mui/material/ListSubheader'; import Menu, { MenuProps } from '@mui/material/Menu'; import MenuItem from '@mui/material/MenuItem'; -import type { ApiClient } from 'jellyfin-apiclient'; -import React, { FC, useCallback, useEffect, useState } from 'react'; +import React, { FC, useCallback } from 'react'; -import { pluginManager } from 'components/pluginManager'; +import SyncPlayGroupListItem from 'apps/experimental/features/syncPlay/components/SyncPlayGroupListItem'; +import { useCreateSyncPlayGroup } from 'apps/experimental/features/syncPlay/hooks/api/useCreateSyncPlayGroup'; +import { useJoinSyncPlayGroup } from 'apps/experimental/features/syncPlay/hooks/api/useJoinSyncPlayGroup'; +import { useLeaveSyncPlayGroup } from 'apps/experimental/features/syncPlay/hooks/api/useLeaveSyncPlayGroup'; +import { useSyncPlayGroups } from 'apps/experimental/features/syncPlay/hooks/api/useSyncPlayGroups'; +import { useSyncPlay } from 'apps/experimental/features/syncPlay/hooks/useSyncPlay'; import { useApi } from 'hooks/useApi'; -import { useSyncPlayGroups } from 'hooks/useSyncPlayGroups'; import globalize from 'lib/globalize'; -import { PluginType } from 'types/plugin'; -import Events, { Event } from 'utils/events'; export const ID = 'app-sync-play-menu'; @@ -30,76 +30,48 @@ interface SyncPlayMenuProps extends MenuProps { onMenuClose: () => void } -interface SyncPlayInstance { - Manager: { - getGroupInfo: () => GroupInfoDto | null | undefined - getTimeSyncCore: () => object - isPlaybackActive: () => boolean - isPlaylistEmpty: () => boolean - haltGroupPlayback: (apiClient: ApiClient) => void - resumeGroupPlayback: (apiClient: ApiClient) => void - } -} - const SyncPlayMenu: FC = ({ anchorEl, open, onMenuClose }) => { - const [ syncPlay, setSyncPlay ] = useState(); - const { __legacyApiClient__, api, user } = useApi(); - const [ currentGroup, setCurrentGroup ] = useState(); - const isSyncPlayEnabled = Boolean(currentGroup); - - useEffect(() => { - setSyncPlay(pluginManager.firstOfType(PluginType.SyncPlay)?.instance); - }, []); - + const { __legacyApiClient__, user } = useApi(); + const { + isActive: isSyncPlayEnabled, + currentGroup, + syncPlay + } = useSyncPlay(); const { data: groups } = useSyncPlayGroups(); - const onGroupAddClick = useCallback(() => { - if (api && user) { - getSyncPlayApi(api) - .syncPlayCreateGroup({ - newGroupRequestDto: { - GroupName: globalize.translate('SyncPlayGroupDefaultTitle', user.Name) - } - }) - .catch(err => { - console.error('[SyncPlayMenu] failed to create a SyncPlay group', err); - }); + const createSyncPlayGroup = useCreateSyncPlayGroup(); + const joinSyncPlayGroup = useJoinSyncPlayGroup(); + const leaveSyncPlayGroup = useLeaveSyncPlayGroup(); - onMenuClose(); - } - }, [ api, onMenuClose, user ]); + const onGroupAddClick = useCallback(() => { + createSyncPlayGroup.mutate({ + newGroupRequestDto: { + GroupName: globalize.translate('SyncPlayGroupDefaultTitle', user?.Name ?? '') + } + }, { + onSettled: onMenuClose + }); + }, [ createSyncPlayGroup, onMenuClose, user ]); const onGroupLeaveClick = useCallback(() => { - if (api) { - getSyncPlayApi(api) - .syncPlayLeaveGroup() - .catch(err => { - console.error('[SyncPlayMenu] failed to leave SyncPlay group', err); - }); - - onMenuClose(); - } - }, [ api, onMenuClose ]); + leaveSyncPlayGroup.mutate(undefined, { + onSettled: onMenuClose + }); + }, [ leaveSyncPlayGroup, onMenuClose ]); const onGroupJoinClick = useCallback((GroupId: string) => { - if (api) { - getSyncPlayApi(api) - .syncPlayJoinGroup({ - joinGroupRequestDto: { - GroupId - } - }) - .catch(err => { - console.error('[SyncPlayMenu] failed to join SyncPlay group', err); - }); - - onMenuClose(); - } - }, [ api, onMenuClose ]); + joinSyncPlayGroup.mutate({ + joinGroupRequestDto: { + GroupId + } + }, { + onSettled: onMenuClose + }); + }, [ joinSyncPlayGroup, onMenuClose ]); const onGroupSettingsClick = useCallback(async () => { if (!syncPlay) return; @@ -136,24 +108,6 @@ const SyncPlayMenu: FC = ({ } }, [ __legacyApiClient__, onMenuClose, syncPlay ]); - const updateSyncPlayGroup = useCallback((_e: Event, enabled: boolean) => { - if (syncPlay && enabled) { - setCurrentGroup(syncPlay.Manager.getGroupInfo() ?? undefined); - } else { - setCurrentGroup(undefined); - } - }, [ syncPlay ]); - - useEffect(() => { - if (!syncPlay) return; - - Events.on(syncPlay.Manager, 'enabled', updateSyncPlayGroup); - - return () => { - Events.off(syncPlay.Manager, 'enabled', updateSyncPlayGroup); - }; - }, [ updateSyncPlayGroup, syncPlay ]); - const menuItems = []; if (isSyncPlayEnabled) { if (!syncPlay?.Manager.isPlaylistEmpty() && !syncPlay?.Manager.isPlaybackActive()) { @@ -195,24 +149,6 @@ const SyncPlayMenu: FC = ({ /> ); - - menuItems.push( - - ); - - menuItems.push( - - - - - - - ); } else if (!groups?.length && user?.Policy?.SyncPlayAccess !== SyncPlayUserAccessType.CreateAndJoinGroups) { menuItems.push( @@ -226,20 +162,16 @@ const SyncPlayMenu: FC = ({ if (groups && groups.length > 0) { groups.forEach(group => { menuItems.push( - group.GroupId && onGroupJoinClick(group.GroupId)} - > - - - - + group.GroupId && onGroupJoinClick(group.GroupId), + tooltip: globalize.translate('LabelSyncPlayJoinGroup'), + Icon: PersonAdd + }} /> - + ); }); @@ -266,9 +198,23 @@ const SyncPlayMenu: FC = ({ const MenuListProps = isSyncPlayEnabled ? { 'aria-labelledby': 'sync-play-active-subheader', subheader: ( - - {currentGroup?.GroupName} - + <> + + + + + ) } : undefined; diff --git a/src/apps/experimental/features/syncPlay/components/SyncPlayGroupListItem.tsx b/src/apps/experimental/features/syncPlay/components/SyncPlayGroupListItem.tsx new file mode 100644 index 0000000000..975d6a7953 --- /dev/null +++ b/src/apps/experimental/features/syncPlay/components/SyncPlayGroupListItem.tsx @@ -0,0 +1,79 @@ +import type { GroupInfoDto } from '@jellyfin/sdk/lib/generated-client/models/group-info-dto'; +import type { SvgIconComponent } from '@mui/icons-material'; +import AvatarGroup from '@mui/material/AvatarGroup'; +import Box from '@mui/material/Box'; +import IconButton from '@mui/material/IconButton'; +import Stack from '@mui/material/Stack'; +import Tooltip from '@mui/material/Tooltip'; +import React, { type FC } from 'react'; + +import UserAvatar from 'components/UserAvatar'; +import { useUsers } from 'hooks/useUsers'; + +interface ButtonProps { + onClick: () => void + tooltip?: string + Icon: SvgIconComponent +} + +interface SyncPlayGroupListItemProps { + group: GroupInfoDto + button: ButtonProps +} + +const SyncPlayGroupListItem: FC = ({ + group: currentGroup, + button: { + onClick, + tooltip, + Icon: ButtonIcon + } +}) => { + const { data: users } = useUsers(); + + return ( + + + {currentGroup?.GroupName} + + + + {currentGroup?.Participants?.map(participantName => { + const participant = users?.find(u => u.Name === participantName); + return participant ? ( + + ) : null; + })} + + + + + + + + + ); +}; + +export default SyncPlayGroupListItem; diff --git a/src/apps/experimental/features/syncPlay/hooks/api/useCreateSyncPlayGroup.ts b/src/apps/experimental/features/syncPlay/hooks/api/useCreateSyncPlayGroup.ts new file mode 100644 index 0000000000..1d606429be --- /dev/null +++ b/src/apps/experimental/features/syncPlay/hooks/api/useCreateSyncPlayGroup.ts @@ -0,0 +1,24 @@ +import { SyncPlayApiSyncPlayCreateGroupRequest } from '@jellyfin/sdk/lib/generated-client/api/sync-play-api'; +import { getSyncPlayApi } from '@jellyfin/sdk/lib/utils/api/sync-play-api'; +import { useMutation } from '@tanstack/react-query'; + +import { useApi } from 'hooks/useApi'; +import { queryClient } from 'utils/query/queryClient'; + +import { QUERY_KEY } from './useSyncPlayGroups'; + +export const useCreateSyncPlayGroup = () => { + const { api } = useApi(); + + return useMutation({ + mutationFn: (createGroup: SyncPlayApiSyncPlayCreateGroupRequest) => ( + getSyncPlayApi(api!).syncPlayCreateGroup(createGroup) + ), + onSuccess: () => { + // Invalidate any queries related to SyncPlay groups + void queryClient.invalidateQueries({ + queryKey: QUERY_KEY + }); + } + }); +}; diff --git a/src/apps/experimental/features/syncPlay/hooks/api/useJoinSyncPlayGroup.ts b/src/apps/experimental/features/syncPlay/hooks/api/useJoinSyncPlayGroup.ts new file mode 100644 index 0000000000..90a054c9d0 --- /dev/null +++ b/src/apps/experimental/features/syncPlay/hooks/api/useJoinSyncPlayGroup.ts @@ -0,0 +1,24 @@ +import { SyncPlayApiSyncPlayJoinGroupRequest } from '@jellyfin/sdk/lib/generated-client/api/sync-play-api'; +import { getSyncPlayApi } from '@jellyfin/sdk/lib/utils/api/sync-play-api'; +import { useMutation } from '@tanstack/react-query'; + +import { useApi } from 'hooks/useApi'; +import { queryClient } from 'utils/query/queryClient'; + +import { QUERY_KEY } from './useSyncPlayGroups'; + +export const useJoinSyncPlayGroup = () => { + const { api } = useApi(); + + return useMutation({ + mutationFn: (joinGroup: SyncPlayApiSyncPlayJoinGroupRequest) => ( + getSyncPlayApi(api!).syncPlayJoinGroup(joinGroup) + ), + onSuccess: () => { + // Invalidate any queries related to SyncPlay groups + void queryClient.invalidateQueries({ + queryKey: QUERY_KEY + }); + } + }); +}; diff --git a/src/apps/experimental/features/syncPlay/hooks/api/useLeaveSyncPlayGroup.ts b/src/apps/experimental/features/syncPlay/hooks/api/useLeaveSyncPlayGroup.ts new file mode 100644 index 0000000000..270dd50eae --- /dev/null +++ b/src/apps/experimental/features/syncPlay/hooks/api/useLeaveSyncPlayGroup.ts @@ -0,0 +1,21 @@ +import { getSyncPlayApi } from '@jellyfin/sdk/lib/utils/api/sync-play-api'; +import { useMutation } from '@tanstack/react-query'; + +import { useApi } from 'hooks/useApi'; +import { queryClient } from 'utils/query/queryClient'; + +import { QUERY_KEY } from './useSyncPlayGroups'; + +export const useLeaveSyncPlayGroup = () => { + const { api } = useApi(); + + return useMutation({ + mutationFn: () => getSyncPlayApi(api!).syncPlayLeaveGroup(), + onSuccess: () => { + // Invalidate any queries related to SyncPlay groups + void queryClient.invalidateQueries({ + queryKey: QUERY_KEY + }); + } + }); +}; diff --git a/src/hooks/useSyncPlayGroups.ts b/src/apps/experimental/features/syncPlay/hooks/api/useSyncPlayGroups.ts similarity index 77% rename from src/hooks/useSyncPlayGroups.ts rename to src/apps/experimental/features/syncPlay/hooks/api/useSyncPlayGroups.ts index 69d22d2117..e974c07fe9 100644 --- a/src/hooks/useSyncPlayGroups.ts +++ b/src/apps/experimental/features/syncPlay/hooks/api/useSyncPlayGroups.ts @@ -3,7 +3,9 @@ import type { Api } from '@jellyfin/sdk/lib/api'; import { getSyncPlayApi } from '@jellyfin/sdk/lib/utils/api/sync-play-api'; import type { AxiosRequestConfig } from 'axios'; -import { useApi } from './useApi'; +import { useApi } from 'hooks/useApi'; + +export const QUERY_KEY = [ 'SyncPlay', 'Groups' ]; const fetchSyncPlayGroups = async ( api: Api, @@ -17,8 +19,9 @@ const fetchSyncPlayGroups = async ( export const useSyncPlayGroups = () => { const { api } = useApi(); return useQuery({ - queryKey: [ 'SyncPlay', 'Groups' ], + queryKey: QUERY_KEY, queryFn: ({ signal }) => fetchSyncPlayGroups(api!, { signal }), + refetchInterval: 30 * 1000, // Refresh every 30 seconds enabled: !!api }); }; diff --git a/src/apps/experimental/features/syncPlay/hooks/useSyncPlay.ts b/src/apps/experimental/features/syncPlay/hooks/useSyncPlay.ts new file mode 100644 index 0000000000..96ad3ad9da --- /dev/null +++ b/src/apps/experimental/features/syncPlay/hooks/useSyncPlay.ts @@ -0,0 +1,73 @@ +import type { GroupInfoDto } from '@jellyfin/sdk/lib/generated-client/models/group-info-dto'; +import type { ApiClient } from 'jellyfin-apiclient'; +import { useCallback, useEffect, useState } from 'react'; + +import { pluginManager } from 'components/pluginManager'; +import { PluginType } from 'types/plugin'; +import Events, { type Event } from 'utils/events'; + +interface SyncPlayInstance { + Manager: { + getGroupInfo: () => GroupInfoDto | null | undefined + getTimeSyncCore: () => object + isPlaybackActive: () => boolean + isPlaylistEmpty: () => boolean + haltGroupPlayback: (apiClient: ApiClient) => void + resumeGroupPlayback: (apiClient: ApiClient) => void + } +} + +/** Hook to access SyncPlay instance and current group info. */ +export function useSyncPlay() { + const [ syncPlay, setSyncPlay ] = useState(); + const [ currentGroup, setCurrentGroup ] = useState(); + + useEffect(() => { + setSyncPlay(pluginManager.firstOfType(PluginType.SyncPlay)?.instance); + }, []); + + const changeGroup = useCallback((_e: Event, enabled: boolean) => { + if (syncPlay && enabled) { + setCurrentGroup(syncPlay.Manager.getGroupInfo() ?? undefined); + } else { + setCurrentGroup(undefined); + } + }, [ syncPlay ]); + + const updateGroupInfo = useCallback((_e: Event, groupInfo: GroupInfoDto) => { + setCurrentGroup(groupInfo); + }, []); + + useEffect(() => { + if (!syncPlay) return; + + Events.on(syncPlay.Manager, 'enabled', changeGroup); + + return () => { + Events.off(syncPlay.Manager, 'enabled', changeGroup); + }; + }, [ changeGroup, syncPlay ]); + + useEffect(() => { + if (!syncPlay) return; + + Events.on(syncPlay.Manager, 'group-update', updateGroupInfo); + + return () => { + Events.off(syncPlay.Manager, 'group-update', updateGroupInfo); + }; + }, [ updateGroupInfo, syncPlay ]); + + // Set initial group info + useEffect(() => { + if (syncPlay) { + setCurrentGroup(syncPlay.Manager.getGroupInfo() ?? undefined); + } + }, [ syncPlay ]); + + return { + isActive: Boolean(currentGroup), + currentGroup, + syncPlay + }; +} diff --git a/src/components/UserAvatar.tsx b/src/components/UserAvatar.tsx index ba020628f3..8dc6c09c64 100644 --- a/src/components/UserAvatar.tsx +++ b/src/components/UserAvatar.tsx @@ -1,15 +1,19 @@ import React, { type FC } from 'react'; import type { UserDto } from '@jellyfin/sdk/lib/generated-client/models/user-dto'; -import Avatar from '@mui/material/Avatar'; +import Avatar, { type AvatarProps } from '@mui/material/Avatar'; import type {} from '@mui/material/themeCssVarsAugmentation'; import { useApi } from 'hooks/useApi'; -interface UserAvatarProps { - user?: UserDto +interface UserAvatarProps extends AvatarProps { + user?: UserDto, + size?: number } -const UserAvatar: FC = ({ user }) => { +const UserAvatar: FC = ({ + user, + size +}) => { const { api } = useApi(); return user ? ( @@ -25,7 +29,9 @@ const UserAvatar: FC = ({ user }) => { bgcolor: api && user.Id && user.PrimaryImageTag ? theme.vars.palette.background.paper : theme.vars.palette.primary.dark, - color: 'inherit' + color: 'inherit', + width: size, + height: size })} /> ) : null; diff --git a/src/plugins/syncPlay/core/Manager.js b/src/plugins/syncPlay/core/Manager.js index d99c4c3e74..3c39738a61 100644 --- a/src/plugins/syncPlay/core/Manager.js +++ b/src/plugins/syncPlay/core/Manager.js @@ -188,28 +188,31 @@ class Manager { * @param {Object} apiClient The ApiClient. */ processGroupUpdate(cmd, apiClient) { + console.debug('[SyncPlay.Manager] processGroupUpdate:', cmd); switch (cmd.Type) { case 'PlayQueue': this.queueCore.updatePlayQueue(apiClient, cmd.Data); break; case 'UserJoined': - toast(globalize.translate('MessageSyncPlayUserJoined', cmd.Data)); if (!this.groupInfo.Participants) { this.groupInfo.Participants = [cmd.Data]; } else { this.groupInfo.Participants.push(cmd.Data); } + Events.trigger(this, 'group-update', [{ ...this.groupInfo }]); break; case 'UserLeft': toast(globalize.translate('MessageSyncPlayUserLeft', cmd.Data)); if (this.groupInfo.Participants) { this.groupInfo.Participants = this.groupInfo.Participants.filter((user) => user !== cmd.Data); } + Events.trigger(this, 'group-update', [{ ...this.groupInfo }]); break; case 'GroupJoined': cmd.Data.LastUpdatedAt = new Date(cmd.Data.LastUpdatedAt); this.enableSyncPlay(apiClient, cmd.Data, true); + Events.trigger(this, 'group-update', [ cmd.Data ]); break; case 'SyncPlayIsDisabled': toast(globalize.translate('MessageSyncPlayIsDisabled')); @@ -217,14 +220,15 @@ class Manager { case 'NotInGroup': case 'GroupLeft': this.disableSyncPlay(true); + Events.trigger(this, 'group-update', []); break; case 'GroupUpdate': cmd.Data.LastUpdatedAt = new Date(cmd.Data.LastUpdatedAt); this.groupInfo = cmd.Data; + Events.trigger(this, 'group-update', [ cmd.Data ]); break; case 'StateUpdate': Events.trigger(this, 'group-state-update', [cmd.Data.State, cmd.Data.Reason]); - console.debug(`SyncPlay processGroupUpdate: state changed to ${cmd.Data.State} because ${cmd.Data.Reason}.`); break; case 'GroupDoesNotExist': toast(globalize.translate('MessageSyncPlayGroupDoesNotExist')); @@ -239,7 +243,7 @@ class Manager { toast(globalize.translate('MessageSyncPlayLibraryAccessDenied')); break; default: - console.error(`SyncPlay processGroupUpdate: command ${cmd.Type} not recognised.`); + console.error(`[SyncPlay.Manager] processGroupUpdate: command ${cmd.Type} not recognised.`); break; } } diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 9abf635ea3..c6af7a1ca8 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -963,6 +963,7 @@ "LabelSyncPlayAccessNone": "Disabled for this user", "LabelSyncPlayHaltPlayback": "Stop local playback", "LabelSyncPlayHaltPlaybackDescription": "And ignore current playlist updates", + "LabelSyncPlayJoinGroup": "Join group", "LabelSyncPlayLeaveGroup": "Leave group", "LabelSyncPlayLeaveGroupDescription": "Disable SyncPlay", "LabelSyncPlayNewGroup": "New group", From a164cc9f97b03e8359370a6fe4829eb252b70a1c Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Mon, 2 Mar 2026 10:56:00 -0500 Subject: [PATCH 009/695] Add key for avatars in SyncPlayGroupListItem --- .../features/syncPlay/components/SyncPlayGroupListItem.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/apps/experimental/features/syncPlay/components/SyncPlayGroupListItem.tsx b/src/apps/experimental/features/syncPlay/components/SyncPlayGroupListItem.tsx index 975d6a7953..2028428f8e 100644 --- a/src/apps/experimental/features/syncPlay/components/SyncPlayGroupListItem.tsx +++ b/src/apps/experimental/features/syncPlay/components/SyncPlayGroupListItem.tsx @@ -56,6 +56,7 @@ const SyncPlayGroupListItem: FC = ({ const participant = users?.find(u => u.Name === participantName); return participant ? ( From 1ef18f0ae62191ebd7789e24df99dc1f4f538f68 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Mon, 2 Mar 2026 10:59:35 -0500 Subject: [PATCH 010/695] Increase refetch interval for syncplay groups --- .../features/syncPlay/hooks/api/useSyncPlayGroups.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps/experimental/features/syncPlay/hooks/api/useSyncPlayGroups.ts b/src/apps/experimental/features/syncPlay/hooks/api/useSyncPlayGroups.ts index e974c07fe9..33330b4ce8 100644 --- a/src/apps/experimental/features/syncPlay/hooks/api/useSyncPlayGroups.ts +++ b/src/apps/experimental/features/syncPlay/hooks/api/useSyncPlayGroups.ts @@ -21,7 +21,7 @@ export const useSyncPlayGroups = () => { return useQuery({ queryKey: QUERY_KEY, queryFn: ({ signal }) => fetchSyncPlayGroups(api!, { signal }), - refetchInterval: 30 * 1000, // Refresh every 30 seconds + refetchInterval: 60 * 1000, // Refresh every minute enabled: !!api }); }; From 62b64e8c104a81cfe0e322dd6e02243d06e4909e Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 24 Mar 2026 10:41:45 -0400 Subject: [PATCH 011/695] Add device id to StorageListItem --- .../storage/components/StorageListItem.tsx | 27 ++++++++++++++----- src/strings/en-us.json | 1 + 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/apps/dashboard/features/storage/components/StorageListItem.tsx b/src/apps/dashboard/features/storage/components/StorageListItem.tsx index d8e30f7efb..68265cbfb3 100644 --- a/src/apps/dashboard/features/storage/components/StorageListItem.tsx +++ b/src/apps/dashboard/features/storage/components/StorageListItem.tsx @@ -1,4 +1,5 @@ import type { FolderStorageDto } from '@jellyfin/sdk/lib/generated-client'; +import Box from '@mui/material/Box'; import LinearProgress from '@mui/material/LinearProgress'; import ListItem from '@mui/material/ListItem'; import ListItemIcon from '@mui/material/ListItemIcon'; @@ -79,15 +80,29 @@ const StorageListItem: FC = ({ color={statusColor} value={usedPercentage} /> - - {`${readableUsedSpace} / ${readableTotalSpace}`} - + + {globalize.translate('OnFilesystem', folder?.DeviceId || '?')} + + + {`${readableUsedSpace} / ${readableTotalSpace}`} + + } slots={{ diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 9abf635ea3..5199a70a7a 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1278,6 +1278,7 @@ "NumLocationsValue": "{0} folders", "Off": "Off", "OnApplicationStartup": "On application startup", + "OnFilesystem": "On filesystem: {0}", "OneChannel": "One channel", "OnlyForcedSubtitles": "Only Forced", "OnlyForcedSubtitlesHelp": "Only subtitles marked as forced will be loaded.", From a1f7ccadf39ecc3c5a6c5306596e5cf04727c576 Mon Sep 17 00:00:00 2001 From: nyanmisaka Date: Mon, 6 Apr 2026 15:32:45 +0800 Subject: [PATCH 012/695] Enable AV1 fMP4 stream copy on TV clients Signed-off-by: nyanmisaka --- src/scripts/browserDeviceProfile.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scripts/browserDeviceProfile.js b/src/scripts/browserDeviceProfile.js index 34bdd643f9..3a04c3f976 100644 --- a/src/scripts/browserDeviceProfile.js +++ b/src/scripts/browserDeviceProfile.js @@ -677,7 +677,7 @@ export default function (options) { const hlsInFmp4VideoCodecs = []; if (canPlayAv1(videoTestElement) - && (browser.safari || (!browser.mobile && (browser.edgeChromium || browser.firefox || browser.chrome || browser.opera)))) { + && (browser.safari || browser.tizen || browser.web0s || (!browser.mobile && (browser.edgeChromium || browser.firefox || browser.chrome || browser.opera)))) { // disable av1 on non-safari mobile browsers since it can be very slow software decoding hlsInFmp4VideoCodecs.push('av1'); } From 769cae3abf603626562909089a05081d8fc6878f Mon Sep 17 00:00:00 2001 From: Pavel Miniutka Date: Mon, 6 Apr 2026 02:43:10 -0400 Subject: [PATCH 013/695] Translated using Weblate (Belarusian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/be/ --- src/strings/be-by.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/be-by.json b/src/strings/be-by.json index cb7ed4bde6..b8e31f0713 100644 --- a/src/strings/be-by.json +++ b/src/strings/be-by.json @@ -1886,5 +1886,6 @@ "UsersEditPageError": "Не ўдалося загрузіць старонку рэдагавання карыстальніка", "TrickplayLoadError": "Не ўдалося загрузіць налады Trickplay", "LabelExternalServerUri": "Знешні URI", - "LabelExternalServerUriHelp": "Апублікаваны URI сервера для знешняга доступу." + "LabelExternalServerUriHelp": "Апублікаваны URI сервера для знешняга доступу.", + "HeaderLatestMusicVideos": "Нядаўна дададзеныя музычныя відэа" } From 89dcd301209e5ba35854d6fa38dc14aa4ec71438 Mon Sep 17 00:00:00 2001 From: bahayo666 Date: Mon, 6 Apr 2026 02:28:04 -0400 Subject: [PATCH 014/695] Translated using Weblate (Indonesian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/id/ --- src/strings/id.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/id.json b/src/strings/id.json index 3e01433165..e4f3ad303e 100644 --- a/src/strings/id.json +++ b/src/strings/id.json @@ -1814,5 +1814,6 @@ "MessageBackupInProgress": "Backup dalam proses", "MessageForgotPasswordPinReset": "Masukan PIN disini untuk menyelesaikan reset Password", "PluginLoadConfigError": "Terjadi kesalah ketika mencoba mendapatkan halaman konfigurasi plugin.", - "PluginUninstallError": "Kesalahan terjadi ketika menguninstall plugin." + "PluginUninstallError": "Kesalahan terjadi ketika menguninstall plugin.", + "ActivitiesLoadError": "Gagal memuat aktifitas" } From c35abef8e3e62a772a93111d6f1434f5a29c3e2c Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Mon, 6 Apr 2026 02:34:00 -0400 Subject: [PATCH 015/695] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index 40f6e05792..33bdc9fa4f 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -1892,5 +1892,7 @@ "ContinueReading": "Verderlezen", "HeaderLatestBooks": "Onlangs toegevoegde boeken", "HeaderLatestMusicVideos": "Onlangs toegevoegde muziekvideo's", - "UsersEditPageError": "Het laden van de gebruikers aanpassen pagina is mislukt" + "UsersEditPageError": "Het laden van de gebruikers aanpassen pagina is mislukt", + "Albums": "Albums", + "Genres": "Genres" } From b2bbe6bcf5bdb561a1f424e1ad1b241bfccb3ed1 Mon Sep 17 00:00:00 2001 From: kscop-n1 Date: Mon, 6 Apr 2026 04:09:27 -0400 Subject: [PATCH 016/695] Translated using Weblate (Ukrainian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/uk/ --- src/strings/uk.json | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/strings/uk.json b/src/strings/uk.json index 6011cec65f..ec61cd5cdb 100644 --- a/src/strings/uk.json +++ b/src/strings/uk.json @@ -220,7 +220,7 @@ "DeleteImage": "Видалити зображення", "DeleteMedia": "Видалити медіафайл", "DeleteUser": "Видалити користувача", - "Desktop": "Стільниця", + "Desktop": "Десктоп (застаріле)", "DetectingDevices": "Виявлення пристроїв", "DirectStreaming": "Пряма трансляція", "Director": "Режисер", @@ -631,7 +631,7 @@ "LabelExtractChaptersDuringLibraryScanHelp": "Створює зображення сцен, коли відео імпортується під час сканування медіатеки. В іншому випадку вони будуть видобуті під час виконання запланованого завдання по видобуванню зображень сцен, що дозволить пришвидшити звичайне сканування медіатеки.", "LabelDateAddedBehaviorHelp": "Якщо значення метаданих присутнє, воно завжди буде використовуватись перед будь-якими з цих варіантів.", "LabelBindToLocalNetworkAddressHelp": "Перевизначити локальну IP-адресу для HTTP-сервера. Якщо залишити це поле порожнім, сервер зв’яжеться зі всіма доступними адресами. Зміна цього значення вимагає перезавантаження.", - "LabelBaseUrlHelp": "Додайте власну підтеку до URL-адреси сервера. Наприклад: http://example.com/<baseurl> ", + "LabelBaseUrlHelp": "Додайте спеціальний підкаталог до URL-адреси сервера. Наприклад: https://example.com/", "KnownProxiesHelp": "Список IP-адрес або назв хостів відомих проксі-серверів, відокремлених комами, які використовуються при підключенні до вашого екземпляра Jellyfin. Це потрібно для правильного використання заголовків X-Forwarded-For. Після збереження потрібне перезавантаження.", "HttpsRequiresCert": "Щоб увімкнути безпечне з’єднання, вам потрібно буде надати надійний сертифікат SSL, наприклад, Let’s Encrypt. Будь ласка, надайте сертифікат або вимкніть безпечні з’єднання.", "HeaderSyncPlaySettings": "Налаштування SyncPlay", @@ -932,7 +932,7 @@ "LabelReasonForTranscoding": "Причина перекодування", "LabelQuickConnectCode": "Код Quick Connect", "LabelPublishedServerUriHelp": "Перевизначте URI, який використовує Jellyfin, на основі інтерфейсу або IP-адреси клієнта. Наприклад: внутрішній=http://jellyfin.example.com, зовнішній=https://jellyfin.example.com або всі=https://jellyfin.example.com", - "LabelPublishedServerUri": "Опубліковані URI сервера", + "LabelPublishedServerUri": "Опублікований URI сервера", "LabelPublicHttpPort": "Номер загальнодоступного HTTP порту", "LabelProtocol": "Протокол", "LabelProfileContainer": "Контейнер", @@ -1870,5 +1870,15 @@ "Authors": "Автори", "BrandingLoadError": "Не вдалося завантажити налаштування брендингу", "ConfirmDeleteCollection": "Ви впевнени, що бажаєте видалити цю колекцію?", - "ConfirmDeletePlaylist": "Ви впевнени, що бажаєте видалити цей плейлист?" + "ConfirmDeletePlaylist": "Ви впевнени, що бажаєте видалити цей плейлист?", + "ContinueReading": "Читати далі", + "DevicesLoadError": "Не вдалося завантажити пристрої", + "HeaderDeleteCollection": "Видалити Колекцію", + "HeaderDeletePlaylist": "Видалити Плейліст", + "HeaderLatestBooks": "Нещодавно додані книжки", + "HeaderLatestMusicVideos": "Нещодавно додані музичні кліпи", + "LabelSlideshowInterval": "Інтервал слайд-шоу фото", + "LabelSlideshowIntervalHelp": "Час у секундах коли кожне фото відображається в слайд-шоу.", + "LabelInternalServerUri": "Внутрішній URI", + "LabelInternalServerUriHelp": "Опублікований URI сервера для внутрішнього доступу." } From e1971ed4306910d3a6faeb8a73efe7556a133995 Mon Sep 17 00:00:00 2001 From: Lofuuzi Date: Mon, 6 Apr 2026 03:18:08 -0400 Subject: [PATCH 017/695] Translated using Weblate (Chinese (Traditional Han script, Hong Kong)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant_HK/ --- src/strings/zh-hk.json | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/strings/zh-hk.json b/src/strings/zh-hk.json index 1cefdf277a..3547a8f8b5 100644 --- a/src/strings/zh-hk.json +++ b/src/strings/zh-hk.json @@ -846,7 +846,7 @@ "LabelRecordingPath": "初始錄影路徑", "LabelRecord": "錄影", "LabelReasonForTranscoding": "轉碼原因", - "LabelQuickConnectCode": "快速連線碼", + "LabelQuickConnectCode": "「快速連線」冧把", "LabelPublishedServerUriHelp": "根據介面或者客戶端 IP 地址,覆蓋 Jellyfin 所用嘅 URI。", "LabelPublishedServerUri": "公開伺服器地址", "HeaderConfirmRevokeApiKey": "撤銷 API 金鑰", @@ -1016,9 +1016,9 @@ "AllowSegmentDeletion": "移除轉碼暫存檔", "AiTranslated": "AI 翻譯", "BackdropScreensaver": "背景螢幕保護程式", - "AllowSegmentDeletionHelp": "將用戶端已經下載嘅轉碼檔案刪走,咁樣可以減少轉碼暫存檔佔用嘅空間。只喺啟用咗轉碼限速嗰陣先有效。如果播放出問題,唔該熄咗呢個選項。", + "AllowSegmentDeletionHelp": "喺用戶端下載完舊嘅片段之後就將佢哋刪走。咁樣可以減少轉碼暫存檔佔用嘅空間。如果你播片撞到問題,唔該熄咗呢個功能。", "LabelThrottleDelaySeconds": "轉碼限速時間", - "LabelThrottleDelaySecondsHelp": "轉碼限速器啟動嘅延遲時間(單位係秒)。呢個數值要大啲,確保用戶端有足夠緩衝(Buffer)。只限啟用咗轉碼限速先有效。", + "LabelThrottleDelaySecondsHelp": "轉碼限速器啟動嘅延遲時間(單位係秒)。個時間一定要夠長(數值要大啲),確保用戶端有足夠嘅緩衝(Buffer)。要開咗轉碼限速先至有效。", "LabelSegmentKeepSeconds": "轉碼暫存檔保留時間", "LabelSegmentKeepSecondsHelp": "轉碼暫存檔畀用戶端下載之後,保存嘅時間(秒)。只喺啟用咗轉碼限速嗰陣先有效。", "LabelIsHearingImpaired": "聽障人士專用字幕 (SDH)", @@ -1385,15 +1385,15 @@ "MessageNoPluginConfiguration": "呢個外掛程式冇任何設定可以改。", "MessageNoRepositories": "無儲存櫃。", "MessageNoServersAvailable": "自動偵測功能搵唔到任何伺服器。", - "MessagePasswordResetForUsers": "以下用家嘅密碼已經重設。佢哋而家可以用重設密碼嗰陣用嘅 PIN 碼嚟登入。", + "MessagePasswordResetForUsers": "以下用家嘅密碼已經重設。佢哋而家可以用返頭先重設嗰陣用嘅 PIN 碼嚟登入。", "MessagePlayAccessRestricted": "呢啲內容而家被限制播放。詳細資訊唔該聯絡你部伺服器嘅管理員。", "MessagePluginConfigurationRequiresLocalAccess": "請直接登入你部本地伺服器,先可以設定呢個外掛程式。", - "MessagePluginInstallDisclaimer": "⚠️警告:安裝第三方外掛程式係有風險嘅。入面可能含有唔穩定或者惡意嘅程式碼,而且隨時會變。請只安裝你信任嘅作者出嘅外掛程式,同埋要注意佢可能會帶嚟嘅影響,包括查詢外部服務、掃描媒體櫃耐咗、或者有額外嘅背景處理。", + "MessagePluginInstallDisclaimer": "⚠️警告:須知安裝第三方外掛程式係有風險嘅。因為入面可能含有唔穩定或者惡意嘅程式碼,而且隨時會變。理應只安裝你所信任開發者出嘅外掛程式,同埋要注意佢可能會帶嚟嘅影響,包括查詢外部服務、掃描媒體櫃耐咗、或者有額外嘅背景處理。", "MessagePluginInstalled": "外掛程式已經裝好咗。伺服器需要重新啟動先會生效。", "MessagePluginInstallError": "裝外掛程式嗰陣出咗錯。", "MessageReenableUser": "睇下面嚟重新啟用", "MessageRenameMediaFolder": "改媒體櫃個名會令入面所有媒體詳細資料(Metadata)消失,唔該小心處理。", - "MessageRepositoryInstallDisclaimer": "⚠️警告:安裝第三方擴充功能櫃有風險。其中可能包含唔穩定或者惡意嘅程式,而且可能隨時會變。請勿安裝唔受信任嘅功能櫃。", + "MessageRepositoryInstallDisclaimer": "⚠️警告:安裝第三方外掛程式庫有風險。其中可能包含唔穩定或者惡意嘅程式,而且可能隨時會變。千祈唔好安裝唔受信任開發者嘅程式庫。", "MessageRestoreDisclaimer": "⚠️警告:你將會從之前嘅備份還原數據。還原期間伺服器會熄咗,而且響呢個備份之後新增嘅所有資料都會唔見晒。", "MessageRestoreInProgress": "正在恢復", "MessageRestoreSuccess": "恢復成功", @@ -1546,18 +1546,18 @@ "ProductionLocations": "出品地", "Runtime": "播放時長", "QuickConnectActivationSuccessful": "啓用成功", - "QuickConnectAuthorizeCode": "輸入QC驗證碼 {0} 嚟登入", - "QuickConnectAuthorizeFail": "呢個快速連線碼搵唔到", + "QuickConnectAuthorizeCode": "輸入「快速連線」驗證冧把 {0} 嚟登入", + "QuickConnectAuthorizeFail": "搵唔到呢個「快速連線」冧把", "QuickConnectAuthorizeSuccess": "你部裝置經已認證成功!", "QuickConnectDeactivated": "喺登入請求被批准之前,「快速連線」經已被停用咗", - "QuickConnectDescription": "想用快速連線登入嘅話,唔該喺你登入緊嘅裝置上面揀「快速連線」撳掣,然後喺下面輸入顯示嘅碼。", - "QuickConnectInvalidCode": "呢個快速連線碼無效", + "QuickConnectDescription": "想用快速連線登入嘅話,唔該喺你登入緊嘅裝置上面撳「快速連線」掣,然後喺下面輸入顯示嘅冧把。", + "QuickConnectInvalidCode": "呢個「快速連線」冧把無效", "QuickConnectNotActive": "呢部伺服器冇啟用快速連線功能", "QuickConnectNotAvailable": "請聯絡伺服器管理員嚟啟用快速連線功能", "ThemeSongs": "主題曲", "ThemeVideos": "主題影片", - "SelectPreferredTranscodeVideoCodecHelp": "揀返你想轉碼輸出嘅首選影片編碼。如果唔支援嗰個編碼,伺服器會自動改用下一個最適合嘅編碼。", - "SelectPreferredTranscodeVideoAudioCodecHelp": "揀轉碼使用嘅首選音訊編碼。如果唔支援嗰個編碼,伺服器會自動改用下一個最適合嘅編碼。", + "SelectPreferredTranscodeVideoCodecHelp": "揀返你想轉碼輸出嘅首選影片編碼。如果唔支援個編碼,伺服器會自動改用下一個最適合嘅編碼。", + "SelectPreferredTranscodeVideoAudioCodecHelp": "揀轉碼使用嘅首選音訊編碼。如果唔支援個編碼,伺服器會自動改用下一個最適合嘅編碼。", "UploadCustomImage": "上載自訂圖片", "ButtonAddProvider": "增加提供者", "LogLevel.Debug": "Debug", @@ -1787,7 +1787,7 @@ "EnableIntelLowPowerH264HwEncoder": "啟用 Intel 低功耗 H.264 硬體編碼", "EnableIntelLowPowerHevcHwEncoder": "啟用 Intel 低功耗 HEVC 硬體編碼", "IntelLowPowerEncHelp": "「低功耗編碼」可以減少不必要嘅 CPU 同 GPU 同步。喺 Linux 系統,如果你冇設定好 i915 HuC 韌體,就一定要熄咗呢個功能。", - "EncodingFormatHelp": "揀返你想 Jellyfin 轉碼輸出嘅影片格式。如果揀咗嘅格式冇硬體加速可用,Jellyfin 就會用軟體編碼。H.264 編碼會一直保持啟用。", + "EncodingFormatHelp": "揀返你想 Jellyfin 轉碼輸出嘅影片格式。如果揀咗冇硬體加速可用嘅格式,Jellyfin 就會用軟體編碼。H.264 編碼會一直保持啟用。", "AudioIsExternal": "呢個係外部音訊串流", "VideoBitrateNotSupported": "唔支援呢條片嘅碼率(Bitrate)", "UnknownVideoStreamInfo": "搵唔到呢段影片串流嘅資訊", @@ -1820,7 +1820,7 @@ "LabelTrickplayAccelEncoding": "啟用硬體加速 MJPEG 編碼", "LabelTrickplayAccelEncodingHelp": "目前只支援 QSV、VA-API、VideoToolbox 同 RKMPP,呢個選項對其他硬體加速方法冇效果。", "LabelTrickplayKeyFrameOnlyExtraction": "只係用關鍵幀(Key frames)嚟整預覽圖", - "LabelTrickplayKeyFrameOnlyExtractionHelp": "只係提取「關鍵幀(Key frames)」,咁樣處理速度會快好多,但時間位置就未必百分百準確。如果硬體解碼器唔支援呢個模式,就會轉用軟體解碼。", + "LabelTrickplayKeyFrameOnlyExtractionHelp": "只係擷取「關鍵影格(Key frames)」,咁樣處理速度會快好多,但時間定位就未必百分百準確。如果設定咗嘅硬體解碼器唔支援呢個模式,就會轉用軟體解碼。", "NonBlockingScan": "非阻塞(Non-blocking)— 先排隊整縮圖,然後直接完成掃描", "BlockingScan": "阻塞(Blocking)— 排隊整預覽圖,整完先會完成掃描", "LabelScanBehavior": "掃描行為", @@ -1851,7 +1851,7 @@ "LabelExtractTrickplayDuringLibraryScan": "掃描媒體櫃嗰陣,順便整埋快轉預覽圖", "LabelExtractTrickplayDuringLibraryScanHelp": "掃描媒體櫃嗰陣順便產生埋快轉縮圖。如果唔係,縮圖就會留返喺「快轉縮圖」排程工作嗰陣先做。如果設定做「非阻塞(Non-blocking)」,就唔會拖慢成個掃描進度。", "Larger": "大啲", - "MediaInfoCodecTag": "Codec 標簽", + "MediaInfoCodecTag": "編碼標籤", "MediaInfoColorPrimaries": "原色座標", "MediaInfoPixelFormat": "像素格式", "NextTrack": "跳去下一項", From 2870d2f0bf4e5b673c36975af91e1253fdf8c3cd Mon Sep 17 00:00:00 2001 From: RmigD Date: Mon, 6 Apr 2026 04:25:53 -0400 Subject: [PATCH 018/695] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index 38e216c307..9a4f3ee842 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -797,7 +797,7 @@ "AddToCollection": "Adicionar à coleção", "Add": "Adicionar", "Actor": "Ator", - "AccessRestrictedTryAgainLater": "O acesso está atualmente restrito. Por favor, tenta mais tarde.", + "AccessRestrictedTryAgainLater": "O acesso está atualmente restrito. Por favor, tente mais tarde.", "Absolute": "Absoluto", "AlwaysPlaySubtitlesHelp": "As legendas correspondentes à preferência de idioma serão carregadas, independentemente do idioma do áudio.", "SearchForMissingMetadata": "Procurar metadados em falta", @@ -1881,5 +1881,13 @@ "NetworkingPageLoadError": "Falha ao carregar as configurações de rede", "StreamingLoadError": "Falha ao carregar as definições da página de streaming", "UsersEditPageError": "Falha ao carregar a página de edição de utilizadores", - "TrickplayLoadError": "Falha ao carregar as definições do trickplay" + "TrickplayLoadError": "Falha ao carregar as definições do trickplay", + "ContinueReading": "Continuar a ler", + "HeaderLatestBooks": "Livros Recentemente Adicionados", + "LabelInternalServerUri": "URI interno", + "LabelInternalServerUriHelp": "Servidor URI publicado para acesso interno.", + "LabelUseSamePublishedServerUri": "Usar o mesmo servidor URI para acesso interno e externo", + "NewPlaylist": "Nova Playlist", + "OptionDatePlaylistUpdated": "Data de Actualização da Playlist", + "ResetFilters": "Redefinir filtros" } From 02fc116b92ff7e0005389c92def7e23f5eca6bca Mon Sep 17 00:00:00 2001 From: rimasx Date: Mon, 6 Apr 2026 04:19:45 -0400 Subject: [PATCH 019/695] Translated using Weblate (Estonian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/et/ --- src/strings/et.json | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/strings/et.json b/src/strings/et.json index f22aa6eaf6..f40a0e2416 100644 --- a/src/strings/et.json +++ b/src/strings/et.json @@ -1879,5 +1879,16 @@ "DevicesLoadError": "Seadmete laadimine nurjus", "HeaderLatestBooks": "Viimati lisatud raamatud", "HeaderLatestMusicVideos": "Viimati lisatud muusikavideod", - "LabelInternalServerUri": "Sisemine URI" + "LabelInternalServerUri": "Sisemine URI", + "LibrariesLoadError": "Meediakogude laadimine nurjus", + "NetworkingPageLoadError": "Võrgusätete laadimine nurjus", + "NewPlaylist": "Uus esitusloend", + "ResetFilters": "Lähtesta filtrid", + "ResumeLoadError": "Taasesituse jätkamise seadete laadimine nurjus", + "StreamingLoadError": "Voogesituse lehe seadete laadimine nurjus", + "TrickplayLoadError": "Trickplay seadete laadimine nurjus", + "LabelExternalServerUri": "Väline URI", + "LabelExternalServerUriHelp": "Serveri avaldatud URI välise juurdepääsu jaoks.", + "LabelInternalServerUriHelp": "Serveri avaldatud URI sisemise juurdepääsu jaoks.", + "LabelUseSamePublishedServerUri": "Kasuta sama URI nii sisemise kui ka välise juurdepääsu jaoks" } From cf882534bc3b6e7bced51a4f0bc1a0c3cca8387b Mon Sep 17 00:00:00 2001 From: kscop-n1 Date: Mon, 6 Apr 2026 04:49:18 -0400 Subject: [PATCH 020/695] Translated using Weblate (Ukrainian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/uk/ --- src/strings/uk.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/strings/uk.json b/src/strings/uk.json index ec61cd5cdb..564e920031 100644 --- a/src/strings/uk.json +++ b/src/strings/uk.json @@ -1880,5 +1880,9 @@ "LabelSlideshowInterval": "Інтервал слайд-шоу фото", "LabelSlideshowIntervalHelp": "Час у секундах коли кожне фото відображається в слайд-шоу.", "LabelInternalServerUri": "Внутрішній URI", - "LabelInternalServerUriHelp": "Опублікований URI сервера для внутрішнього доступу." + "LabelInternalServerUriHelp": "Опублікований URI сервера для внутрішнього доступу.", + "Watch": "Спостерігати", + "TrickplayLoadError": "Не вдалося завантажити налаштування прев'ю", + "LabelExternalServerUri": "Зовнішній URI", + "LabelExternalServerUriHelp": "Опублікований URI сервера для зовнішнього доступу." } From fcb9659ef31b80f77054087458d2f97c3a996ec3 Mon Sep 17 00:00:00 2001 From: RmigD Date: Mon, 6 Apr 2026 04:29:21 -0400 Subject: [PATCH 021/695] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index 9a4f3ee842..358a60a522 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -1084,7 +1084,7 @@ "LabelRepositoryName": "Nome do Repositório", "LabelQuickConnectCode": "Código de Ligação Rápida", "LabelPublishedServerUriHelp": "Substituir o URI utilizado pelo Jellyfin, com base na interface, ou no endereço IP do cliente. Por exemplo: internal=http://jellyfin.example.com, external=https://jellyfin.example.com, ou all=https://jellyfin.example.com", - "LabelPublishedServerUri": "URIs de Servidor Publicado", + "LabelPublishedServerUri": "URI de Servidor Publicado", "LabelOpenclDeviceHelp": "Este é o dispositivo OpenCL utilizado para o mapeamento de tons. O número à esquerda do ponto representa a plataforma, e o da direita representa o número do dispositivo nessa plataforma. O valor predefinido é 0.0. É necessário o ficheiro da aplicação FFmpeg que contenha o método de aceleração por hardware via OpenCL.", "LabelOpenclDevice": "Dispositivo OpenCL", "LabelMinAudiobookResumeHelp": "Os audiolivros são considerados como não ouvidos se parados antes do valor definido.", @@ -1889,5 +1889,9 @@ "LabelUseSamePublishedServerUri": "Usar o mesmo servidor URI para acesso interno e externo", "NewPlaylist": "Nova Playlist", "OptionDatePlaylistUpdated": "Data de Actualização da Playlist", - "ResetFilters": "Redefinir filtros" + "ResetFilters": "Redefinir filtros", + "Unwatch": "Não visto", + "Watch": "Ver", + "LabelExternalServerUri": "URI externo", + "LabelExternalServerUriHelp": "Servidor URI publicado para acesso externo." } From ce3eee108df5d9b8fa8dca486d1e09d6e0f4e1fa Mon Sep 17 00:00:00 2001 From: kscop-n1 Date: Mon, 6 Apr 2026 05:09:02 -0400 Subject: [PATCH 022/695] Translated using Weblate (Ukrainian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/uk/ --- src/strings/uk.json | 62 ++++++++++++++++++++++++++------------------- 1 file changed, 36 insertions(+), 26 deletions(-) diff --git a/src/strings/uk.json b/src/strings/uk.json index 564e920031..626eeee5bc 100644 --- a/src/strings/uk.json +++ b/src/strings/uk.json @@ -627,7 +627,7 @@ "LabelOpenclDeviceHelp": "Це пристрій OpenCL, який використовується для тонального відображення. Ліворуч від крапки - це номер платформи, а праворуч - номер пристрою на платформі. Значення за замовчуванням - 0.0. Потрібен файл програми FFmpeg, який містить метод апаратного прискорення OpenCL.", "LabelNumberOfGuideDaysHelp": "Завантаження додаткових довідникових даних дає можливість заздалегідь планувати роботу та переглядати більше списків, але завантаження також займе більше часу. Авто вибиратиметься залежно від кількості каналів.", "LabelMoviePrefixHelp": "Якщо до назв фільмів застосовується префікс, введіть його тут, щоб сервер міг правильно з ним впоратися.", - "LabelMinResumePercentageHelp": "Якщо припинити до цього часу, заголовки вважаються невідтвореними.", + "LabelMinResumePercentageHelp": "Якщо припинити до цього часу, відео вважається непрограним.", "LabelExtractChaptersDuringLibraryScanHelp": "Створює зображення сцен, коли відео імпортується під час сканування медіатеки. В іншому випадку вони будуть видобуті під час виконання запланованого завдання по видобуванню зображень сцен, що дозволить пришвидшити звичайне сканування медіатеки.", "LabelDateAddedBehaviorHelp": "Якщо значення метаданих присутнє, воно завжди буде використовуватись перед будь-якими з цих варіантів.", "LabelBindToLocalNetworkAddressHelp": "Перевизначити локальну IP-адресу для HTTP-сервера. Якщо залишити це поле порожнім, сервер зв’яжеться зі всіма доступними адресами. Зміна цього значення вимагає перезавантаження.", @@ -678,7 +678,7 @@ "ErrorPlayerNotFound": "Не знайдено програвача для запитаного носія.", "ErrorAddingListingsToSchedulesDirect": "Не вдалося додати записи Schedules Direct до вашого облікового запису. Schedules Direct дозволяють лише обмежену кількість записів на кожен обліковий запис. Можливо, вам доведеться увійти на веб-сайт Schedules Direct і видалити інші записи зі свого облікового запису, перш ніж продовжити.", "LabelMinBackdropDownloadWidth": "Мінімальна ширина зображення тла, яке завантажуватиметься (в пікселях)", - "LabelMinAudiobookResumeHelp": "Якщо призупинити до цього часу, заголовки вважаються невідтвореними.", + "LabelMinAudiobookResumeHelp": "Якщо припинити до цього часу, відео вважається непрограним.", "LabelMinAudiobookResume": "Мінімальне відновлення аудіокниги в хвилинах", "LabelMetadataSaversHelp": "Оберіть формати файлів, які використовуватимуться для збереження метаданих.", "LabelMetadataSavers": "Збереження метаданих", @@ -781,7 +781,7 @@ "MediaInfoBitDepth": "Розрядність", "MediaInfoAnamorphic": "Анаморфний", "MaxParentalRatingHelp": "Вміст з вищим рейтингом буде приховано від цього користувача.", - "MarkUnplayed": "Позначити як невідтворене", + "MarkUnplayed": "Позначити як непрогране", "MarkPlayed": "Позначити як відтворене", "MapChannels": "Карта каналів", "ManageRecording": "Керувати записом", @@ -931,7 +931,7 @@ "LabelRecord": "Запис", "LabelReasonForTranscoding": "Причина перекодування", "LabelQuickConnectCode": "Код Quick Connect", - "LabelPublishedServerUriHelp": "Перевизначте URI, який використовує Jellyfin, на основі інтерфейсу або IP-адреси клієнта. Наприклад: внутрішній=http://jellyfin.example.com, зовнішній=https://jellyfin.example.com або всі=https://jellyfin.example.com", + "LabelPublishedServerUriHelp": "Перевизначте URI, який використовує Jellyfin, на основі інтерфейсу або IP-адреси клієнта.", "LabelPublishedServerUri": "Опублікований URI сервера", "LabelPublicHttpPort": "Номер загальнодоступного HTTP порту", "LabelProtocol": "Протокол", @@ -983,7 +983,7 @@ "MoreMediaInfo": "Інформація про медіа", "MoreFromValue": "Більше від {0}", "Monday": "Понеділок", - "Mobile": "Мобільний", + "Mobile": "Мобільний (застаріле)", "Mixer": "Мікшер", "MinutesBefore": "хвилин до", "MinutesAfter": "хвилин після", @@ -1058,7 +1058,7 @@ "RepeatMode": "Режим повторення", "RepeatEpisodes": "Повторювати епізоди", "RepeatAll": "Повторюйте все", - "Repeat": "Повторити", + "Repeat": "Повторювати", "RemoveFromPlaylist": "Видалити з плейлиста", "RemoveFromCollection": "Вилучити з колекції", "Remixer": "Реміксер", @@ -1400,7 +1400,7 @@ "Up": "Вгору", "UnsupportedPlayback": "Jellyfin не може розшифрувати вміст, захищений DRM, але весь вміст буде перевірено незалежно від того, включаючи захищені заголовки. Деякі файли можуть виглядати повністю чорними через шифрування або інші непідтримувані функції, наприклад інтерактивні заголовки.", "Unrated": "Без оцінки", - "Unplayed": "Непереглянуто", + "Unplayed": "Непрогране", "Unmute": "Увімкнути звук", "UninstallPluginConfirmation": "Ви справді бажаєте видалити {0}?", "Uniform": "Уніформа", @@ -1597,20 +1597,20 @@ "AllowSubtitleManagement": "Дозволити цьому користувачеві редагувати субтитри", "EnableVideoToolboxTonemapping": "Увімкнути тональне відображення VideoToolbox", "AllowVideoToolboxTonemappingHelp": "Апаратно прискорене тональне відображення, що надається VideoToolbox. Воно працює з більшістю форматів HDR, включаючи HDR10, HDR10+ та HLG, але не працює з Dolby Vision Profile 5. Воно має вищий пріоритет порівняно з іншими реалізаціями Metal.", - "Trickplay": "Trickplay", + "Trickplay": "Прев'ю", "LabelScanBehavior": "Поведінка сканування", "NonBlockingScan": "Неблокуюча - генерація черги, потім повернення", "BlockingScan": "Блокуюча - формування черг, сканування блоків до завершення", "PriorityHigh": "Високий", "LabelImageInterval": "Інтервал між зображеннями", - "LabelProcessPriorityHelp": "Зменшення або збільшення цього параметра визначатиме пріоритетність процесу генерації ffmpeg-зображень щодо інших процесів у центральному процесорі. Якщо ви помітили уповільнення під час генерації trickplay-зображень, але не хочете повністю зупиняти їх генерацію, спробуйте зменшити цей параметр, а також кількість потоків.", + "LabelProcessPriorityHelp": "Зміна цього значення визначає, як процесор пріоритезує процес генерації прев'ю в ffmpeg відносно інших завдань. Якщо ви помічаєте сповільнення роботи під час створення прев'ю зображень, але не хочете повністю зупиняти цей процес, спробуйте знизити цей параметр, а також кількість потоків.", "LabelTileWidth": "Ширина плитки", "LabelTileWidthHelp": "Максимальна кількість зображень на плитці у напрямку X.", "LabelTileHeight": "Висота плитки", "LabelTileHeightHelp": "Максимальна кількість зображень на плитці в напрямку Y.", "LabelJpegQuality": "Якість JPEG", - "LabelJpegQualityHelp": "Якість стиснення JPEG для trickplay-зображень.", - "LabelExtractTrickplayDuringLibraryScan": "Вилучати trickplay-зображення під час сканування бібліотеки", + "LabelJpegQualityHelp": "Якість стиснення JPEG для прев'ю-зображень.", + "LabelExtractTrickplayDuringLibraryScan": "Видобувати прев'ю зображення під час сканування бібліотеки", "DeleteEntireSeries": "Видалити епізоди {0}", "DeleteSeries": "Видалити серіал", "LabelTrickplayAccel": "Увімкнути апаратне декодування", @@ -1619,20 +1619,20 @@ "PriorityBelowNormal": "Нижче нормального", "PriorityIdle": "Бездіяльність", "LabelProcessPriority": "Пріоритет процесу", - "LabelImageIntervalHelp": "Інтервал часу (мс) між кожним новим trickplay-зображенням.", + "LabelImageIntervalHelp": "Інтервал часу (мс) між кожним новим прев'ю-зображенням.", "LabelWidthResolutions": "Роздільна здатність по ширині", "LabelQscale": "Qscale", "LabelQscaleHelp": "Шкала якості зображень, що виводяться ffmpeg, де 2 - найвища якість, а 31 - найнижча.", "LabelTrickplayThreads": "FFmpeg-потоки", - "LabelTrickplayThreadsHelp": "Кількість потоків, яку слід передати аргументу '-threads' функції ffmpeg.", - "OptionExtractTrickplayImage": "Увімкнути вилучення trickplay-зображень", + "LabelTrickplayThreadsHelp": "Кількість потоків, що передаватиметься аргументу «-threads» у ffmpeg.", + "OptionExtractTrickplayImage": "Увімкнути видобування прев'ю зображень", "ConfirmDeleteSeries": "Видалення цього серіалу призведе до видалення ВСІХ {0} серій як з файлової системи, так і з вашої медіатеки. Ви впевнені, що хочете продовжити?", "DeleteEpisode": "Видалити епізод", - "LabelScanBehaviorHelp": "За замовчуванням застосовується неблокуюча поведінка, яка передбачає додавання медіафайлів до бібліотеки до того, як буде згенеровано trickplay. Блокування забезпечить створення trickplay-файлів до додавання медіафайлів до бібліотеки, але зробить сканування значно довшим.", + "LabelScanBehaviorHelp": "За замовчуванням використовується неблокувальний режим, який додає медіафайли до бібліотеки ще до завершення генерації прев'ю. Блокувальний режим гарантує, що файли прев'ю будуть створені до появи медіа в бібліотеці, але це значно подовжить час сканування.", "HeaderDeleteSeries": "Видалити серіал", - "LabelWidthResolutionsHelp": "Через кому список ширини (px), з якою будуть згенеровані зображення трюків. Усі зображення мають бути згенеровані пропорційно до джерела, тому ширина 320 для відео 16:9 у підсумку буде приблизно 320x180.", - "ExtractTrickplayImagesHelp": "Trickplay-зображення схожі на зображення розділів, за винятком того, що вони охоплюють всю довжину контенту і використовуються для показу попереднього перегляду під час прокрутки відео.", - "LabelExtractTrickplayDuringLibraryScanHelp": "Створювати trickplay-зображення, коли відео імпортується під час сканування бібліотеки. В іншому випадку вони будуть вилучені під час виконання запланованого завдання. Якщо генерування налаштовано на неблокування, це не вплине на час завершення сканування бібліотеки.", + "LabelWidthResolutionsHelp": "Список значень ширини (у пікселях) через кому, за якими будуть створюватися прев'ю зображення. Усі зображення генеруються пропорційно до оригіналу, тому при ширині 320 для відео формату 16:9 результат становитиме приблизно 320x180.", + "ExtractTrickplayImagesHelp": "Прев'ю зображення подібні до зображень розділів, за винятком того, що вони охоплюють усю тривалість відео та використовуються для попереднього перегляду під час перемотування.", + "LabelExtractTrickplayDuringLibraryScanHelp": "Створювати прев'ю зображення під час імпорту відео в процесі сканування бібліотеки. В іншому разі вони будуть створені під час виконання запланованого завдання «Зображення прев'ю». Якщо встановлено неблокувальний режим, це не вплине на час завершення сканування бібліотеки.", "PlaybackError.FATAL_HLS_ERROR": "Виникла фатальна помилка у потоці HLS.", "PlaybackError.ASS_RENDER_ERROR": "Виникла помилка у рендері субтитрів ASS/SSA.", "PlaybackError.MEDIA_DECODE_ERROR": "Відтворення не вдалося через помилку декодування медіа.", @@ -1686,8 +1686,8 @@ "SaveLyricsIntoMediaFolders": "Зберігати тексти пісень в теках з медіафайлами", "LibraryScanFanoutConcurrencyHelp": "Максимальна кількість паралельних завдань під час сканування медіатеки. Якщо залишити значення пустим, буде обрано обмеження на основі кількості ядер у вашій системі. ПОПЕРЕДЖЕННЯ: Занадто високе значення цього параметра може спричинити проблеми з мережевими файловими системами; якщо ви зіткнулися з такими проблемами, зменшіть це значення.", "LibraryScanFanoutConcurrency": "Обмеження на паралельне сканування медіатек", - "Inker": "Inker", - "Penciller": "Penciler", + "Inker": "Контурник", + "Penciller": "Ілюстратор", "LabelSelectPreferredTranscodeVideoAudioCodec": "Бажаний аудіокодек для перекодування при відтворенні відео", "SelectPreferredTranscodeVideoAudioCodecHelp": "Виберіть бажаний аудіокодек для перекодування відеоконтенту. Якщо вибраний кодек не підтримується, сервер використовуватиме наступний найкращий доступний кодек.", "Alternate": "Альтернатива", @@ -1727,15 +1727,15 @@ "LibraryInvalidItemIdError": "Бібліотека знаходиться у некоректному стані і не може бути відредагована. Можливо, ви зіткнулися з помилкою: шлях у базі даних не відповідає правильному шляху у файловій системі.", "AlwaysRemuxFlacAudioFilesHelp": "Якщо у вас є файли, які ваш браузер відмовляється відтворювати, або якщо він неточно обчислює мітки часу, увімкніть цю функцію для вирішення проблеми.", "AlwaysRemuxMp3AudioFilesHelp": "Якщо у вас є файли, для яких браузер неточно обчислює мітки часу, увімкніть цю функцію для вирішення проблеми.", - "LabelSaveTrickplayLocallyHelp": "Зберігаючи trickplay-зображення у папках мультимедіа, ви розміщуєте їх поруч із медіафайлами, що полегшує їхню міграцію та доступ до них.", - "ReplaceTrickplayImages": "Замінити наявні trickplay-зображення", + "LabelSaveTrickplayLocallyHelp": "Зберігаючи прев'ю-зображення у папках мультимедіа, ви розміщуєте їх поруч із медіафайлами, що полегшує їхню міграцію та доступ до них.", + "ReplaceTrickplayImages": "Замінити наявні прев'ю-зображення", "EnableHi10pHelp": "Увімкніть, щоб уникнути перекодування 10-бітових відео H.264. Вимкніть цю опцію, якщо відео відображає порожні кадри.", "EnableHi10p": "Увімкнути профіль H.264 High 10", "DisableVbrAudioEncodingHelp": "Заборонити серверу кодувати аудіо з VBR для цього клієнта.", "LabelAlwaysRemuxFlacAudioFiles": "Завжди ремуксувати аудіофайли FLAC", "LabelAlwaysRemuxMp3AudioFiles": "Завжди ремуксувати аудіофайли MP3", "LabelDisableVbrAudioEncoding": "Вимкнути кодування аудіо з VBR", - "LabelSaveTrickplayLocally": "Зберігати trickplay-зображення поруч із медіа", + "LabelSaveTrickplayLocally": "Зберігати прев'ю-зображення поруч із медіа", "AllowFmp4TranscodingContainerHelp": "Дозволити контейнер перекодування fMP4 для цього тюнера, щоб увімкнути вміст HEVC та HDR. Не всі тюнери сумісні з цим контейнером. Вимкніть цю опцію, якщо у вас виникають проблеми з відтворенням.", "AllowStreamSharingHelp": "Дозволити Jellyfin дублювати потік mpegts з тюнера і надавати цей дубльований потік своїм клієнтам. Це корисно, коли тюнер має обмеження на загальну кількість потоків, але також може спричинити проблеми з відтворенням.", "FallbackMaxStreamingBitrateHelp": "Максимальний бітрейт потоку використовується як запасний варіант, коли ffprobe не може визначити бітрейт вихідного потоку. Це допомагає запобігти запитам клієнтів на надто високий бітрейт перекодування, що може призвести до збою програвача і перевантаження кодера.", @@ -1826,7 +1826,7 @@ "ViewSettings": "Налаштування перегляду", "MessageForgotPasswordPinReset": "Введіть PIN-код, щоб завершити відновлення пароля", "ButtonCreateBackup": "Створити резервну копію", - "HeaderBackupsHelp": "Створюйте та відновлюйте зрізи вашого сервера, які можуть включати базу даних, метадані, субтитри та trickplay.", + "HeaderBackupsHelp": "Створюйте та відновлюйте знімки стану вашого сервера, які можуть включати базу даних, метадані, субтитри та прев'ю зображення.", "LabelBackupsUnavailable": "Резервні копії відсутні", "BackupsPageLoadError": "Не вдалося завантажити сторінку резервних копій", "Create": "Створити", @@ -1851,7 +1851,7 @@ "HeaderBackups": "Резервні копії", "ConfirmDeleteRepository": "Видалити репозиторій?", "DeleteRepositoryConfirmation": "Ви впевнені, що хочете видалити цей репозиторій?", - "PluginsLoadError": "Виникла помилка під час завантаження плагінів.", + "PluginsLoadError": "Виникла помилка під час завантаження плагінів", "RepositoriesPageLoadError": "Не вдалося завантажити репозиторії", "TranscodingLoadError": "Не вдалося завантажити налаштування перекодування", "ButtonLearnMore": "Дізнатися більше", @@ -1884,5 +1884,15 @@ "Watch": "Спостерігати", "TrickplayLoadError": "Не вдалося завантажити налаштування прев'ю", "LabelExternalServerUri": "Зовнішній URI", - "LabelExternalServerUriHelp": "Опублікований URI сервера для зовнішнього доступу." + "LabelExternalServerUriHelp": "Опублікований URI сервера для зовнішнього доступу.", + "LabelUseSamePublishedServerUri": "Використовуйте той самий опублікований URI сервера для внутрішнього та зовнішнього доступу", + "LibrariesLoadError": "Не вдалося завантажити бібліотеки", + "NetworkingPageLoadError": "Не вдалося завантажити налаштування мережі", + "NewPlaylist": "Новий плейлист", + "OptionDatePlaylistUpdated": "Дата оновлення плейліста", + "ResetFilters": "Скинути фільтри", + "ResumeLoadError": "Не вдалося завантажити налаштування відновлення відтворення", + "StreamingLoadError": "Не вдалося завантажити налаштування сторінки потокового передавання", + "Unwatch": "Непереглянуто", + "UsersEditPageError": "Не вдалося завантажити сторінку редагування користувачів" } From 425b3696729167e44a998ac3f2aea19bdfd5ce05 Mon Sep 17 00:00:00 2001 From: RmigD Date: Mon, 6 Apr 2026 05:05:05 -0400 Subject: [PATCH 023/695] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index 358a60a522..dfcf6f5ff4 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -1083,7 +1083,7 @@ "LabelRepositoryNameHelp": "Nome personalizado para distinguir este repositório de outros presentes no servidor.", "LabelRepositoryName": "Nome do Repositório", "LabelQuickConnectCode": "Código de Ligação Rápida", - "LabelPublishedServerUriHelp": "Substituir o URI utilizado pelo Jellyfin, com base na interface, ou no endereço IP do cliente. Por exemplo: internal=http://jellyfin.example.com, external=https://jellyfin.example.com, ou all=https://jellyfin.example.com", + "LabelPublishedServerUriHelp": "Substituir o URI utilizado pelo Jellyfin, com base na interface, ou no endereço IP do cliente.", "LabelPublishedServerUri": "URI de Servidor Publicado", "LabelOpenclDeviceHelp": "Este é o dispositivo OpenCL utilizado para o mapeamento de tons. O número à esquerda do ponto representa a plataforma, e o da direita representa o número do dispositivo nessa plataforma. O valor predefinido é 0.0. É necessário o ficheiro da aplicação FFmpeg que contenha o método de aceleração por hardware via OpenCL.", "LabelOpenclDevice": "Dispositivo OpenCL", @@ -1850,7 +1850,7 @@ "MessageRestoreSuccess": "Restauração concluída com sucesso", "StorageType.Fixed": "Fixo", "StorageType.Network": "Rede", - "PluginsLoadError": "Ocorreu um erro ao carregar as extensões.", + "PluginsLoadError": "Ocorreu um erro ao carregar as extensões", "MessageRestoreInProgress": "Restauração em andamento", "StorageType.NoRootDirectory": "Sem Diretório Raiz", "StorageType.Ram": "RAM", @@ -1893,5 +1893,6 @@ "Unwatch": "Não visto", "Watch": "Ver", "LabelExternalServerUri": "URI externo", - "LabelExternalServerUriHelp": "Servidor URI publicado para acesso externo." + "LabelExternalServerUriHelp": "Servidor URI publicado para acesso externo.", + "ResumeLoadError": "Falha ao carregar as definições de retoma" } From 7a69a50cc810d12f995c9d02a640322e63aa6e57 Mon Sep 17 00:00:00 2001 From: RmigD Date: Mon, 6 Apr 2026 07:06:06 -0400 Subject: [PATCH 024/695] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index dfcf6f5ff4..f88a7dc22f 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -1163,7 +1163,7 @@ "Engineer": "Engenheiro de som", "DisableCustomCss": "Desativar código CSS personalizado fornecido pelo servidor", "Console": "Consola", - "Conductor": "Maestro", + "Conductor": "Controlador", "Casual": "Casual", "ButtonBackspace": "Retrocesso", "GoogleCastUnsupported": "Google Cast não compatível", @@ -1865,7 +1865,7 @@ "MessageServerMismatch": "O servidor ao qual você está se conectando não é o mesmo servidor ao qual você se conectou anteriormente neste endereço. Se isso for esperado, selecione \"Conectar Mesmo Assim\". Caso contrário, sua conexão ou o servidor poderão ser comprometidos.", "ButtonAddProvider": "Adicionar Provedor", "ButtonAddTunerDevice": "Adicionar dispositivo sintonizador", - "ConfirmDeleteCollection": "Tens a certeza que queres eliminar esta coleção?", + "ConfirmDeleteCollection": "Tem a certeza que queres eliminar esta coleção?", "ConfirmDeletePlaylist": "Tens a certeza de que queres eliminar esta playlist?", "HeaderDeleteCollection": "Eliminar coleção", "HeaderDeletePlaylist": "Eliminar Playlist", From a6b00691032c23e48c99a5a9af00d4a2879f2487 Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Mon, 6 Apr 2026 08:23:49 -0400 Subject: [PATCH 025/695] Translated using Weblate (Portuguese (Portugal)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/ --- src/strings/pt-pt.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index 76a75e98b8..c7b49cf6d4 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -1871,8 +1871,8 @@ "ConfirmDeleteCollection": "Tens a certeza que queres eliminar esta coleção?", "ConfirmDeletePlaylist": "Tens a certeza de que queres eliminar esta playlist?", "HeaderDeleteCollection": "Eliminar coleção", - "NewPlaylist": "Nova lista de reprodução", - "OptionDatePlaylistUpdated": "Data de Atualização da Lista de Reprodução", + "NewPlaylist": "Nova playlist", + "OptionDatePlaylistUpdated": "Data de atualização da playlist", "ActivitiesLoadError": "Falha ao carregar atividades", "ApiKeysLoadError": "Falha ao carregar as chaves de API", "Authors": "Autores", @@ -1883,11 +1883,11 @@ "HeaderLatestMusicVideos": "Vídeos musicais adicionados recentemente", "LabelInternalServerUri": "URI interno", "LabelInternalServerUriHelp": "URI do servidor para acesso interno publicado.", - "LabelUseSamePublishedServerUri": "Usar o mesmo URI de servidor publicado para acesso interno e externo", + "LabelUseSamePublishedServerUri": "Utilizar o mesmo URI do servidor publicado para acesso interno e externo", "LibrariesLoadError": "Falha ao carregar as bibliotecas", "NetworkingPageLoadError": "Falha ao carregar as configurações de rede", - "ResetFilters": "Reiniciar filtros", - "ResumeLoadError": "Falha ao carregar as definições de retomada", + "ResetFilters": "Redefinir filtros", + "ResumeLoadError": "Falha ao carregar as definições de retoma", "StreamingLoadError": "Falha ao carregar as definições da página de streaming", "Unwatch": "Não visto", "UsersEditPageError": "Falha ao carregar a página de edição de utilizadores", From 1def85a44d7b5566e2d40d9a55370fa84d96b9dc Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Mon, 6 Apr 2026 08:24:54 -0400 Subject: [PATCH 026/695] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index f88a7dc22f..73b01ee129 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -797,7 +797,7 @@ "AddToCollection": "Adicionar à coleção", "Add": "Adicionar", "Actor": "Ator", - "AccessRestrictedTryAgainLater": "O acesso está atualmente restrito. Por favor, tente mais tarde.", + "AccessRestrictedTryAgainLater": "O acesso está atualmente restrito. Por favor, tenta mais tarde.", "Absolute": "Absoluto", "AlwaysPlaySubtitlesHelp": "As legendas correspondentes à preferência de idioma serão carregadas, independentemente do idioma do áudio.", "SearchForMissingMetadata": "Procurar metadados em falta", @@ -1084,7 +1084,7 @@ "LabelRepositoryName": "Nome do Repositório", "LabelQuickConnectCode": "Código de Ligação Rápida", "LabelPublishedServerUriHelp": "Substituir o URI utilizado pelo Jellyfin, com base na interface, ou no endereço IP do cliente.", - "LabelPublishedServerUri": "URI de Servidor Publicado", + "LabelPublishedServerUri": "URI do servidor publicado", "LabelOpenclDeviceHelp": "Este é o dispositivo OpenCL utilizado para o mapeamento de tons. O número à esquerda do ponto representa a plataforma, e o da direita representa o número do dispositivo nessa plataforma. O valor predefinido é 0.0. É necessário o ficheiro da aplicação FFmpeg que contenha o método de aceleração por hardware via OpenCL.", "LabelOpenclDevice": "Dispositivo OpenCL", "LabelMinAudiobookResumeHelp": "Os audiolivros são considerados como não ouvidos se parados antes do valor definido.", @@ -1163,7 +1163,7 @@ "Engineer": "Engenheiro de som", "DisableCustomCss": "Desativar código CSS personalizado fornecido pelo servidor", "Console": "Consola", - "Conductor": "Controlador", + "Conductor": "Maestro", "Casual": "Casual", "ButtonBackspace": "Retrocesso", "GoogleCastUnsupported": "Google Cast não compatível", @@ -1865,7 +1865,7 @@ "MessageServerMismatch": "O servidor ao qual você está se conectando não é o mesmo servidor ao qual você se conectou anteriormente neste endereço. Se isso for esperado, selecione \"Conectar Mesmo Assim\". Caso contrário, sua conexão ou o servidor poderão ser comprometidos.", "ButtonAddProvider": "Adicionar Provedor", "ButtonAddTunerDevice": "Adicionar dispositivo sintonizador", - "ConfirmDeleteCollection": "Tem a certeza que queres eliminar esta coleção?", + "ConfirmDeleteCollection": "Tens a certeza que queres eliminar esta coleção?", "ConfirmDeletePlaylist": "Tens a certeza de que queres eliminar esta playlist?", "HeaderDeleteCollection": "Eliminar coleção", "HeaderDeletePlaylist": "Eliminar Playlist", @@ -1883,16 +1883,16 @@ "UsersEditPageError": "Falha ao carregar a página de edição de utilizadores", "TrickplayLoadError": "Falha ao carregar as definições do trickplay", "ContinueReading": "Continuar a ler", - "HeaderLatestBooks": "Livros Recentemente Adicionados", + "HeaderLatestBooks": "Livros adicionados recentemente", "LabelInternalServerUri": "URI interno", - "LabelInternalServerUriHelp": "Servidor URI publicado para acesso interno.", - "LabelUseSamePublishedServerUri": "Usar o mesmo servidor URI para acesso interno e externo", - "NewPlaylist": "Nova Playlist", - "OptionDatePlaylistUpdated": "Data de Actualização da Playlist", + "LabelInternalServerUriHelp": "URI do servidor para acesso interno publicado.", + "LabelUseSamePublishedServerUri": "Utilizar o mesmo URI do servidor publicado para acesso interno e externo", + "NewPlaylist": "Nova playlist", + "OptionDatePlaylistUpdated": "Data de atualização da playlist", "ResetFilters": "Redefinir filtros", "Unwatch": "Não visto", "Watch": "Ver", "LabelExternalServerUri": "URI externo", - "LabelExternalServerUriHelp": "Servidor URI publicado para acesso externo.", + "LabelExternalServerUriHelp": "URI do servidor publicado para acesso externo.", "ResumeLoadError": "Falha ao carregar as definições de retoma" } From 3ef159b50d6080c63ff926fd3c29bafbb23a075f Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Mon, 6 Apr 2026 09:37:23 -0400 Subject: [PATCH 027/695] Translated using Weblate (Portuguese (Portugal)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/ --- src/strings/pt-pt.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index c7b49cf6d4..856952d3ff 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -1329,13 +1329,13 @@ "HeaderContinueReading": "Continuar a ler", "Framerate": "Taxa de fotogramas", "ErrorPlayerNotFound": "Não foi possível identificar nenhum leitor compatível com o ficheiro solicitado.", - "Engineer": "Engenheiro de Som", + "Engineer": "Engenheiro de som", "DisablePlugin": "Desativar", "DisableCustomCss": "Desativar código CSS personalizado fornecido pelo servidor", "EnablePlugin": "Ativar", "DirectPlayHelp": "O ficheiro de origem é totalmente compatível com este cliente e a sessão está a receber o ficheiro sem modificações.", "Conductor": "Maestro", - "Arranger": "Organizador", + "Arranger": "Arranjador", "AgeValue": "({0} anos)", "LabelSyncPlaySettingsSpeedToSync": "Ativar SpeedToSync", "LabelAutomaticallyAddToCollection": "Adicionar automaticamente à coleção", From 1d2e88b3765faa803cec9bb81753ebc41524ebc9 Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Mon, 6 Apr 2026 09:36:49 -0400 Subject: [PATCH 028/695] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index 73b01ee129..a415c6120e 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -1186,7 +1186,7 @@ "Restart": "Reiniciar", "EnableCardLayout": "Mostrar cartão visual", "EnableRewatchingNextUp": "Ativar Rever em 'A Seguir'", - "Arranger": "Organizador", + "Arranger": "Arranjador", "Print": "Imprimir", "Poster": "Cartaz", "Small": "Pequeno", From 10c837e1822426e98fad3c0bd827c62888c557ed Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Mon, 6 Apr 2026 11:29:35 -0400 Subject: [PATCH 029/695] Translated using Weblate (Portuguese (Portugal)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/ --- src/strings/pt-pt.json | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index 856952d3ff..695f568e64 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -1,5 +1,5 @@ { - "Actor": "Ator", + "Actor": "Interpretação", "Add": "Adicionar", "AddToPlaylist": "Adicionar à playlist", "All": "Todos", @@ -41,7 +41,7 @@ "ButtonUninstall": "Desinstalar", "ChannelAccessHelp": "Seleciona os canais para partilhar com este utilizador. Os administradores poderão editar todos os canais utilizando o gestor de metadados.", "CinemaModeConfigurationHelp": "O modo cinema traz a experiência do cinema diretamente para a tua sala de estar, com a possibilidade de reproduzir trailers e introduções personalizadas antes da longa-metragem.", - "Composer": "Compositor", + "Composer": "Composição", "ConfirmDeleteItem": "A eliminação deste item irá eliminá-lo do sistema de ficheiros e da tua biblioteca multimédia. Tens a certeza de que queres continuar?", "ConfirmDeleteItems": "A eliminação destes itens elimina-os do sistema de ficheiros e da tua biblioteca multimédia. Tens a certeza de que queres continuar?", "ConfirmDeletion": "Confirmar Exclusão", @@ -406,7 +406,7 @@ "PlayNextEpisodeAutomatically": "Reproduzir próximo episódio automaticamente", "PleaseEnterNameOrId": "Introduz um nome ou um ID externo.", "PleaseSelectTwoItems": "Por favor selecione pelo menos dois itens.", - "Producer": "Produtor", + "Producer": "Produção", "RecommendationBecauseYouLike": "Porque gosta de {0}", "RecommendationBecauseYouWatched": "Porque viu {0}", "RecommendationDirectedBy": "Realizado por {0}", @@ -462,7 +462,7 @@ "Wednesday": "Quarta", "WelcomeToProject": "Bem-vindo ao Jellyfin!", "WizardCompleted": "É tudo o que precisamos por agora. O Jellyfin começou a recolher informações sobre a tua biblioteca multimédia. Vê algumas das nossas aplicações e, em seguida, clica em Terminar para ver o Painel de Controlo.", - "Writer": "Argumentista", + "Writer": "Autoria", "AccessRestrictedTryAgainLater": "O acesso está atualmente restrito. Por favor, tenta mais tarde.", "AddToCollection": "Adicionar à coleção", "AddToPlayQueue": "Adicionar à lista de reprodução", @@ -562,7 +562,7 @@ "HDPrograms": "Programas em Alta-Definição", "EncoderPresetHelp": "Escolha um valor mais rápido para melhorar o desempenho, ou um valor mais lento para melhorar a qualidade.", "Guide": "Programação", - "GuestStar": "Estrela convidada", + "GuestStar": "Participação especial", "GroupVersions": "Agrupar versões", "GroupBySeries": "Agrupar por série", "Genre": "Género", @@ -1145,7 +1145,7 @@ "ListPaging": "{0}-{1} de {2}", "WriteAccessRequired": "O Jellyfin necessita de acesso de escrita a esta pasta. Garanta acesso de escrita e tente novamente.", "PathNotFound": "Não foi possível encontrar a localização. Certifica-te de que o caminho é válido e tenta novamente.", - "Writers": "Argumentistas", + "Writers": "Autoria", "ViewAlbumArtist": "Ver artista do álbum", "Video": "Vídeo", "UseDoubleRateDeinterlacingHelp": "Esta definição utiliza a taxa de campo durante o desentrelaçamento, muitas vezes referido como desentrelaçamento bob, que duplica a taxa de fotogramas do vídeo para proporcionar movimento fluído, como o que verias ao ver vídeo entrelaçado numa televisão.", @@ -1329,13 +1329,13 @@ "HeaderContinueReading": "Continuar a ler", "Framerate": "Taxa de fotogramas", "ErrorPlayerNotFound": "Não foi possível identificar nenhum leitor compatível com o ficheiro solicitado.", - "Engineer": "Engenheiro de som", + "Engineer": "Engenharia de som", "DisablePlugin": "Desativar", "DisableCustomCss": "Desativar código CSS personalizado fornecido pelo servidor", "EnablePlugin": "Ativar", "DirectPlayHelp": "O ficheiro de origem é totalmente compatível com este cliente e a sessão está a receber o ficheiro sem modificações.", "Conductor": "Maestro", - "Arranger": "Arranjador", + "Arranger": "Arranjos", "AgeValue": "({0} anos)", "LabelSyncPlaySettingsSpeedToSync": "Ativar SpeedToSync", "LabelAutomaticallyAddToCollection": "Adicionar automaticamente à coleção", @@ -1394,7 +1394,7 @@ "StoryArc": "História", "ShowParentImages": "Mostrar imagens da série", "ScreenResolution": "Resolução de ecrã", - "Remixer": "Remisturar", + "Remixer": "Remistura", "RememberSubtitleSelectionsHelp": "Tentar escolher a faixa de legendas que seja mais semelhante ao vídeo anterior.", "RememberSubtitleSelections": "Definir faixa de legendas com base no item anterior", "RememberAudioSelectionsHelp": "Tentar escolher a faixa de áudio que seja mais semelhante ao vídeo anterior.", @@ -1413,11 +1413,11 @@ "OtherArtist": "Outro artista", "OriginalAirDate": "Data de lançamento original", "NextChapter": "Próximo capítulo", - "Mixer": "Misturador", + "Mixer": "Mistura", "MessageUnauthorizedUser": "Neste momento, não está autorizado a aceder a este servidor. Por favor, contacte o administrador do servidor para mais informações.", "MessageSent": "Mensagem enviada.", "MediaInfoTitle": "Título", - "Lyricist": "Letrista", + "Lyricist": "Letras", "Localization": "Localização", "Larger": "Maior", "LabelSyncPlaySettingsExtraTimeOffsetHelp": "Ajusta o desvio (em milissegundos) para o dispositivo selecionado para sincronização de tempo. Altere com cuidado.", From 393cf9d13f2b72d05e98588bc358679f7246a83e Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Mon, 6 Apr 2026 11:29:35 -0400 Subject: [PATCH 030/695] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index a415c6120e..0fe60f8a26 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -8,7 +8,7 @@ "HeaderAdmin": "Administração", "GuideProviderLogin": "Iniciar sessão", "XmlTvPathHelp": "Caminho para um ficheiro XMLTV. O Jellyfin vai ler o ficheiro periodicamente para atualizar a programação da TV. O utilizador é responsável pela criação e atualização do ficheiro.", - "Writer": "Argumento", + "Writer": "Autoria", "WizardCompleted": "É tudo o que precisamos por agora. O Jellyfin começou a recolher informações sobre a tua biblioteca multimédia. Vê algumas das nossas aplicações e, em seguida, clica em Terminar para ver o Painel de Controlo.", "WelcomeToProject": "Bem-vindo ao Jellyfin!", "Wednesday": "Quarta", @@ -92,7 +92,7 @@ "RecommendationBecauseYouLike": "Porque gosta de {0}", "Raised": "Elevado", "Programs": "Programas", - "Producer": "Produtor", + "Producer": "Produção", "MessagePluginInstalled": "A extensão foi instalada com sucesso. O servidor necessitará de ser reiniciado para aplicar as alterações.", "PleaseSelectTwoItems": "Por favor selecione pelo menos dois itens.", "PleaseRestartServerName": "Por favor, reinicia o Jellyfin no {0}.", @@ -673,7 +673,7 @@ "ConfirmDeleteItem": "A eliminação deste item irá eliminá-lo do sistema de ficheiros e da tua biblioteca multimédia. Tens a certeza de que queres continuar?", "ConfirmDeleteImage": "Eliminar a imagem?", "ConfigureDateAdded": "Configura a forma como é atribuída a data de adição, no Painel de controlo > Bibliotecas > Visualização", - "Composer": "Compositor", + "Composer": "Composição", "CommunityRating": "Classificação da comunidade", "ColorTransfer": "Transferência de cores", "ColorSpace": "Espaço de cores", @@ -796,7 +796,7 @@ "AddToPlayQueue": "Adicionar à fila de reprodução", "AddToCollection": "Adicionar à coleção", "Add": "Adicionar", - "Actor": "Ator", + "Actor": "Interpretação", "AccessRestrictedTryAgainLater": "O acesso está atualmente restrito. Por favor, tenta mais tarde.", "Absolute": "Absoluto", "AlwaysPlaySubtitlesHelp": "As legendas correspondentes à preferência de idioma serão carregadas, independentemente do idioma do áudio.", @@ -842,7 +842,7 @@ "H264CrfHelp": "O parâmetro \"Constant Rate Factor\" (CRF) define o nível de qualidade predefinido para os codificadores de software x264 e x265. Os valores possíveis vão de 0 a 51, sendo que valores mais baixos produzem melhor qualidade — à custa de ficheiros maiores. Os valores mais comuns situam-se entre 18 e 28. O valor predefinido para o x264 é 23, e para o x265 é 28, podendo servir como ponto de partida para afinares a qualidade conforme necessário. Codificadores por hardware não utilizam esta definição.", "GuideProviderSelectListings": "Selecionar listas", "Guide": "Programação", - "GuestStar": "Estrela convidada", + "GuestStar": "Participação especial", "GroupVersions": "Agrupar versões", "GroupBySeries": "Agrupar por série", "ErrorAddingListingsToSchedulesDirect": "Ocorreu um erro ao adicionar o alinhamento à tua conta do Schedules Direct. O Schedules Direct só permite um número limitado de alinhamentos por conta. Poderás ter de iniciar sessão no site do Schedules Direct e remover outras listagens da tua conta antes de prosseguires.", @@ -1160,7 +1160,7 @@ "HeaderSyncPlayPlaybackSettings": "Reprodução", "HeaderSyncPlaySettings": "Definições de SyncPlay", "ErrorPlayerNotFound": "Não foi possível identificar nenhum leitor compatível com o ficheiro solicitado.", - "Engineer": "Engenheiro de som", + "Engineer": "Engenharia de som", "DisableCustomCss": "Desativar código CSS personalizado fornecido pelo servidor", "Console": "Consola", "Conductor": "Maestro", @@ -1186,7 +1186,7 @@ "Restart": "Reiniciar", "EnableCardLayout": "Mostrar cartão visual", "EnableRewatchingNextUp": "Ativar Rever em 'A Seguir'", - "Arranger": "Arranjador", + "Arranger": "Arranjos", "Print": "Imprimir", "Poster": "Cartaz", "Small": "Pequeno", @@ -1258,7 +1258,7 @@ "LabelSyncPlaySettingsMaxDelaySpeedToSyncHelp": "Atraso máximo de reprodução (em ms) após o qual SkipToSync é usado em vez de SpeedToSync.", "LabelSyncPlaySettingsMinDelaySpeedToSyncHelp": "Atraso mínimo da reprodução (em ms) após o qual o SpeedToSync tenta corrigir a posição de reprodução.", "QuickConnectNotAvailable": "Pede ao administrador do servidor para ativar a Ligação Rápida", - "Remixer": "'Remixer'", + "Remixer": "Remistura", "QuickConnectAuthorizeCode": "Introduz o código {0} para iniciar sessão", "QuickConnect": "Ligação Rápida", "SelectServer": "Selecionar Servidor", @@ -1370,7 +1370,7 @@ "ViewPlaybackInfo": "Ver informações de reprodução", "WeeklyAt": "{0} às {1}", "Whitelist": "Lista de permissões", - "Writers": "Argumento", + "Writers": "Autoria", "XmlTvKidsCategoriesHelp": "Lista de categorias, separadas por '|', que correspondem a programas para crianças.", "Yes": "Sim", "HeaderSelectFallbackFontPathHelp": "Navegue ou insira o caminho da pasta de fontes substitutas a ser usada para renderizar legendas ASS/SSA.", @@ -1418,7 +1418,7 @@ "HeaderSelectFallbackFontPath": "Selecione o caminho da pasta de fontes substitutas", "XmlTvMovieCategoriesHelp": "Lista de categorias, separadas por '|', que correspondem a filmes.", "LabelVideoRange": "Gama de vídeo", - "Mixer": "Misturador", + "Mixer": "Mistura", "LabelSystem": "Sistema", "SaveRecordingImages": "Guardar imagens da gravação EPG", "SaveRecordingImagesHelp": "Guardar imagens do fornecedor de listas EPG juntamente com os ficheiros multimédia.", @@ -1458,7 +1458,7 @@ "MessageChangeRecordingPath": "Alterar a localização das gravações não irá migrar as gravações existentes da localização atual para a nova. Os ficheiros deverão ser movidos manualmente, se necessário.", "ListPaging": "{0}-{1} de {2}", "Localization": "Localização", - "Lyricist": "Letrista", + "Lyricist": "Letras", "NextChapter": "Próximo capítulo", "TvLibraryHelp": "Revise o {0}guia de nomenclatura de TV{1}.", "TypeOptionPluralSeries": "Séries", From 6a8839ace0a621c4572b15b10ff2f938d8fbac1e Mon Sep 17 00:00:00 2001 From: lednurb Date: Mon, 6 Apr 2026 13:41:04 -0400 Subject: [PATCH 031/695] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index 33bdc9fa4f..bd2a626550 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -680,7 +680,7 @@ "NewEpisodesOnly": "Alleen nieuwe afleveringen", "News": "Nieuws", "Next": "Volgende", - "NextUp": "Als volgende", + "NextUp": "Volgende", "No": "Nee", "NoNewDevicesFound": "Er zijn geen nieuwe apparaten gevonden. Sluit deze melding en voer de apparaatgegevens handmatig in om een nieuwe tuner toe te voegen.", "MessageNoNextUpItems": "Niets gevonden. Begin met kijken!", From 8385873f753fdaccc11efb41b4e2cac459d0aa3d Mon Sep 17 00:00:00 2001 From: Lofuuzi Date: Mon, 6 Apr 2026 15:36:54 -0400 Subject: [PATCH 032/695] Translated using Weblate (Chinese (Traditional Han script, Hong Kong)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant_HK/ --- src/strings/zh-hk.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/zh-hk.json b/src/strings/zh-hk.json index 3547a8f8b5..9b89d24fc7 100644 --- a/src/strings/zh-hk.json +++ b/src/strings/zh-hk.json @@ -22,7 +22,7 @@ "Ended": "已完結", "Friday": "禮拜五", "HeaderActiveDevices": "使用緊嘅裝置", - "HeaderActiveRecordings": "正在錄影的節目", + "HeaderActiveRecordings": "現在錄緊影嘅節目", "HeaderAddToCollection": "加落系列", "HeaderAdditionalParts": "附加部份", "HeaderBranding": "客製化", @@ -392,7 +392,7 @@ "EnableNextVideoInfoOverlay": "播放嗰陣顯示下一條片嘅資訊", "EnableHardwareEncoding": "啟用硬體編碼", "EnableFasterAnimationsHelp": "用更快速嘅動畫同過渡效果。", - "EnableFasterAnimations": "更快的動畫效果", + "EnableFasterAnimations": "更快嘅動畫效果", "EnableExternalVideoPlayersHelp": "喺開始播片嗰陣,會彈個選單出嚟畀你揀用外部播放器播放。", "EnableExternalVideoPlayers": "外部影片播放器", "EnableDisplayMirroring": "鏡像顯示", From 6560e5212f39232231c254455e8e05f32d484e0b Mon Sep 17 00:00:00 2001 From: Lofuuzi Date: Mon, 6 Apr 2026 15:41:07 -0400 Subject: [PATCH 033/695] Translated using Weblate (Chinese (Traditional Han script, Hong Kong)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant_HK/ --- src/strings/zh-hk.json | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/strings/zh-hk.json b/src/strings/zh-hk.json index 9b89d24fc7..57e06ab219 100644 --- a/src/strings/zh-hk.json +++ b/src/strings/zh-hk.json @@ -22,13 +22,13 @@ "Ended": "已完結", "Friday": "禮拜五", "HeaderActiveDevices": "使用緊嘅裝置", - "HeaderActiveRecordings": "現在錄緊影嘅節目", + "HeaderActiveRecordings": "依家錄緊影嘅節目", "HeaderAddToCollection": "加落系列", "HeaderAdditionalParts": "附加部份", "HeaderBranding": "客製化", "HeaderDeviceAccess": "裝置存取", "HeaderDevices": "裝置", - "HeaderFeatureAccess": "可以使用的功能", + "HeaderFeatureAccess": "可以使用嘅功能", "HeaderFetchImages": "擷取圖像", "HeaderFrequentlyPlayed": "經常播放", "HeaderLatestEpisodes": "近排新增嘅劇集", @@ -128,7 +128,7 @@ "MessagePleaseEnsureInternetMetadata": "請確保經已啟用咗從網上下載媒體詳細資料嘅功能。", "Monday": "禮拜一", "MoreUsersCanBeAddedLater": "之後可以隨時返「控制台」加更多使用者。", - "NewCollection": "新的系列", + "NewCollection": "新嘅系列", "NewCollectionNameExample": "例如:星球大戰系列", "MessageNoNextUpItems": "暫時冇嘢喎。快啲開始睇你嘅節目啦!", "OptionAllowBrowsingLiveTv": "允許睇電視直播", @@ -157,7 +157,7 @@ "OptionHideUserFromLoginHelp": "適用於私人或隱藏嘅管理員帳戶。用家需要手動輸入使用者名稱同密碼先可以登入。", "OptionIsHD": "高清", "OptionIsSD": "標清", - "OptionMissingEpisode": "缺少的劇集", + "OptionMissingEpisode": "缺少嘅劇集", "OptionOnInterval": "每隔一段時間", "OptionParentalRating": "家長評級", "OptionPlayCount": "播放次數", @@ -167,7 +167,7 @@ "OptionSpecialEpisode": "特輯", "OptionTrackName": "曲目名稱", "OptionTvdbRating": "TheTVDB 評分", - "OptionUnairedEpisode": "尚未播放的劇集", + "OptionUnairedEpisode": "尚未播放嘅劇集", "OptionWakeFromSleep": "喺睡眠模式喚醒", "OptionWeekly": "每週", "ParentalRating": "家長分級", @@ -538,7 +538,7 @@ "LabelH264Crf": "H.264 編碼 CRF 值", "LabelGroupMoviesIntoCollectionsHelp": "喺顯示電影清單嗰陣,同屬一個系列嘅電影會整合做同一個項目。", "LabelGroupMoviesIntoCollections": "將電影以系列嚟分組", - "LabelFriendlyName": "好聽的名字", + "LabelFriendlyName": "好聽嘅名", "LabelFormat": "格式", "LabelForgotPasswordUsernameHelp": "如果你記得嘅話,唔該輸入你嘅使用者名稱。", "LabelFont": "字體", @@ -561,7 +561,7 @@ "LabelDynamicExternalId": "{0} Id", "LabelDropSubtitleHere": "將字幕檔拖入嚟呢度,或者撳入去瀏覽檔案。", "LabelDropShadow": "陰影", - "LabelDroppedFrames": "丟棄的幀", + "LabelDroppedFrames": "丟棄嘅影格", "LabelDropImageHere": "拖張相入嚟呢度,或者撳入去瀏覽檔案。", "LabelDownMixAudioScaleHelp": "喺做縮混(Downmix)嗰陣增強音訊。設做 1 嘅話,音量會同原始音量一樣。", "LabelDownMixAudioScale": "縮混(Downmix)嗰陣嘅音量增益", @@ -589,7 +589,7 @@ "LabelCriticRating": "評論家評分", "LabelCreateHttpPortMapHelp": "除咗 HTTPS 之外,亦都准許系統自動幫 HTTP 流量整連線埠對應規則(Port Mapping)。", "LabelCreateHttpPortMap": "幫 HTTP 同 HTTPS 流量都啟用自動連線埠映射。", - "LabelCorruptedFrames": "損壞的幀", + "LabelCorruptedFrames": "損壞嘅影格", "LabelColorTransfer": "色彩轉換", "LabelColorSpace": "色域", "LabelColorPrimaries": "三原色", @@ -711,7 +711,7 @@ "HeaderNetworking": "IP 協定", "HeaderNavigation": "導覽", "HeaderMyMediaSmall": "我嘅媒體(細圖)", - "HeaderMyMedia": "我的媒體", + "HeaderMyMedia": "我嘅媒體", "HeaderMusicQuality": "音質", "HeaderMoreLikeThis": "更多類似嘅內容", "HeaderMetadataSettings": "媒體詳細資料設定", @@ -739,7 +739,7 @@ "HeaderExternalIds": "影片資料庫 ID", "HeaderError": "錯誤", "HeaderEnabledFieldsHelp": "唔剔呢個選項就可以鎖定欄位,防止入面嘅資料被改動。", - "HeaderEnabledFields": "已啟用的欄位", + "HeaderEnabledFields": "已啟用嘅欄位", "HeaderEditImages": "編輯圖片", "HeaderDVR": "DVR", "HeaderDownloadSync": "下載 & 同步", @@ -1058,7 +1058,7 @@ "PlayFromBeginning": "由頭開始播", "Profile": "設定檔", "QuickConnect": "快速連線", - "MySubtitles": "我的字幕", + "MySubtitles": "我嘅字幕", "Subtitles": "字幕", "Repeat": "重複播放", "Subtitle": "字幕", @@ -1090,7 +1090,7 @@ "Menu": "菜單", "RememberMe": "保持登入狀態", "Search": "搜索", - "HeaderAllRecordings": "所有錄影的節目", + "HeaderAllRecordings": "所有錄影嘅節目", "MenuOpen": "打開菜單", "TitleHardwareAcceleration": "硬體加速", "Upload": "上載", @@ -1675,7 +1675,7 @@ "SubtitleVerticalPositionHelp": "字幕出現嘅行數位置。正數係由頂落,負數係由底上。", "Success": "成功", "SyncPlayAccessHelp": "「一齊睇」功能可以令你同其他裝置同步播放。揀呢位用家可以存取邊啲「一齊睇」嘅功能權限。", - "SyncPlayGroupDefaultTitle": "{0}的群組", + "SyncPlayGroupDefaultTitle": "{0} 嘅群組", "HeaderBackups": "備份", "TabLogs": "日誌", "TextSent": "訊息已發送。", @@ -1709,7 +1709,7 @@ "UnsupportedPlayback": "Jellyfin 係唔會解密受 DRM 保護嘅內容,但無論點都會試播所有內容,包括嗰啲受保護嘅影片。有啲檔案可能會因為加密,或者因為有互動式選單呢類唔支援嘅功能,導致成個畫面變晒黑色。", "Up": "上", "UseCustomTagDelimiters": "用自訂嘅標籤分隔符", - "UseCustomTagDelimitersHelp": "用自訂字元嚟分隔藝人或者風格標籤。訂的字元分割藝術家、風格標籤。", + "UseCustomTagDelimitersHelp": "用自訂字元嚟分隔藝人或者風格標籤。", "UseDoubleRateDeinterlacing": "去交錯(Deinterlacing)嗰陣將影格率(Frame rate)加倍", "UseDoubleRateDeinterlacingHelp": "呢個設定係去交錯(Deinterlacing)嗰陣用雙倍幀率,通常叫「Bob deinterlacing」。佢會將影片幀率加倍,產生好似喺電視睇隔行掃描片嗰種流暢效果。", "UserAgentHelp": "提供一個自訂嘅「User-Agent」HTTP 標頭。", From f468b73640757da5109ba42d3e79eed60af2dff5 Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Mon, 6 Apr 2026 17:39:26 -0400 Subject: [PATCH 034/695] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index bd2a626550..b1ab446d72 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -1894,5 +1894,14 @@ "HeaderLatestMusicVideos": "Onlangs toegevoegde muziekvideo's", "UsersEditPageError": "Het laden van de gebruikers aanpassen pagina is mislukt", "Albums": "Albums", - "Genres": "Genres" + "Genres": "Genres", + "LabelAudioAttributes": "Geluidseigenschappen", + "LabelVideoAttributes": "Beeldeigenschappen", + "LabelVideoColors": "Beeldkleuren", + "LabelVideoBitDepth": "Bitdiepte beeld", + "LabelTargetCodecs": "Doelcodecs", + "LabelProgressAndSpeed": "Voortgang / snelheid", + "LabelReasons": "Redenen", + "LabelPlayerSizes": "Spelergroottes", + "LabelPlaybackQuality": "Frame verloren / beschadigd" } From d351f5b7b443fbdc99c9d566662fb51fe4049c5b Mon Sep 17 00:00:00 2001 From: Kityn Date: Mon, 6 Apr 2026 17:32:19 -0400 Subject: [PATCH 035/695] Translated using Weblate (Polish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/ --- src/strings/pl.json | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/strings/pl.json b/src/strings/pl.json index d61dbdce02..72c8c5361a 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -1894,5 +1894,14 @@ "ContinueReading": "Kontynuuj czytanie", "HeaderLatestBooks": "Ostatnio dodane książki", "UsersEditPageError": "Nie udało się załadować strony edycji użytkowników", - "HeaderLatestMusicVideos": "Niedawno dodane teledyski" + "HeaderLatestMusicVideos": "Niedawno dodane teledyski", + "LabelVideoAttributes": "Atrybuty wideo", + "LabelVideoColors": "Kolory wideo", + "LabelVideoBitDepth": "Głębia bitowa wideo", + "LabelAudioAttributes": "Atrybuty audio", + "LabelTargetCodecs": "Kodeki docelowe", + "LabelProgressAndSpeed": "Postęp / prędkość", + "LabelReasons": "Powody", + "LabelPlayerSizes": "Rozmiary odtwarzacza", + "LabelPlaybackQuality": "Klatka utracona / uszkodzona" } From af8eba7271d8284f06661ed8e1c0a3061280a553 Mon Sep 17 00:00:00 2001 From: Lofuuzi Date: Mon, 6 Apr 2026 17:52:35 -0400 Subject: [PATCH 036/695] Translated using Weblate (Chinese (Traditional Han script, Hong Kong)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant_HK/ --- src/strings/zh-hk.json | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/src/strings/zh-hk.json b/src/strings/zh-hk.json index 57e06ab219..404580e0ad 100644 --- a/src/strings/zh-hk.json +++ b/src/strings/zh-hk.json @@ -764,7 +764,7 @@ "LabelTranscodingThreadCountHelp": "揀轉碼嗰陣最多用幾多條線程。減少線程數量會降低 CPU 使用率,但轉換速度可能會唔夠快,影響播片順暢度。", "LabelTranscodingThreadCount": "轉碼線程數量", "LabelTranscodingProgress": "轉碼進度", - "LabelTranscodingFramerate": "轉碼幀率", + "LabelTranscodingFramerate": "轉碼影格率", "LabelTranscodes": "轉碼", "LabelTranscodePath": "轉碼路徑", "LabelTrackNumber": "追蹤編號", @@ -888,7 +888,7 @@ "Genre": "風格", "General": "一般", "Fullscreen": "全螢幕", - "Framerate": "幀率", + "Framerate": "影格率", "FormatValue": "格式:{0}", "Filters": "篩選", "Filter": "篩選", @@ -1333,11 +1333,11 @@ "MediaInfoContainer": "影片容器", "MediaInfoExternal": "外部", "MediaInfoForced": "强制", - "MediaInfoFramerate": "幀率", + "MediaInfoFramerate": "影格率", "MediaInfoInterlaced": "隔行掃描", "MediaInfoLayout": "佈局", "MediaInfoLevel": "等級", - "MediaInfoRefFrames": "參考幀", + "MediaInfoRefFrames": "參考影格", "MediaInfoRotation": "旋轉", "MediaInfoTimestamp": "時間戳", "MediaInfoVideoRange": "動態範圍", @@ -1711,7 +1711,7 @@ "UseCustomTagDelimiters": "用自訂嘅標籤分隔符", "UseCustomTagDelimitersHelp": "用自訂字元嚟分隔藝人或者風格標籤。", "UseDoubleRateDeinterlacing": "去交錯(Deinterlacing)嗰陣將影格率(Frame rate)加倍", - "UseDoubleRateDeinterlacingHelp": "呢個設定係去交錯(Deinterlacing)嗰陣用雙倍幀率,通常叫「Bob deinterlacing」。佢會將影片幀率加倍,產生好似喺電視睇隔行掃描片嗰種流暢效果。", + "UseDoubleRateDeinterlacingHelp": "呢個設定係去交錯(Deinterlacing)嗰陣用雙倍影格率,通常叫「Bob deinterlacing」。佢會將影片影格率加倍,產生好似喺電視睇隔行掃描片嗰種流暢效果。", "UserAgentHelp": "提供一個自訂嘅「User-Agent」HTTP 標頭。", "UserMenu": "使用者選單", "ValueAlbumCount": "{0} 張專輯", @@ -1778,9 +1778,9 @@ "AnamorphicVideoNotSupported": "唔支援變形寬銀幕(Anamorphic)影片", "InterlacedVideoNotSupported": "唔支援隔行掃描(Interlaced)影片", "SecondaryAudioNotSupported": "唔支援第二音軌", - "RefFramesNotSupported": "唔支援參考幀(Reference frames)", + "RefFramesNotSupported": "唔支援參考影格(Reference frames)", "VideoBitDepthNotSupported": "唔支援呢個影片位元深度(Bit depth)", - "VideoFramerateNotSupported": "唔支援呢條片嘅幀率(Framerate)", + "VideoFramerateNotSupported": "唔支援呢條片嘅影格率(Framerate)", "VideoLevelNotSupported": "唔支援呢個影片編碼等級(Level)", "VideoProfileNotSupported": "唔支援呢個影片編碼設定(Profile)", "PreferSystemNativeHwDecoder": "優先用系統原生嘅 DXVA 或者 VA-API 硬體解碼器", @@ -1819,7 +1819,7 @@ "LabelTrickplayAccel": "啟用硬體解碼", "LabelTrickplayAccelEncoding": "啟用硬體加速 MJPEG 編碼", "LabelTrickplayAccelEncodingHelp": "目前只支援 QSV、VA-API、VideoToolbox 同 RKMPP,呢個選項對其他硬體加速方法冇效果。", - "LabelTrickplayKeyFrameOnlyExtraction": "只係用關鍵幀(Key frames)嚟整預覽圖", + "LabelTrickplayKeyFrameOnlyExtraction": "只係用關鍵影格(Key frames)嚟整預覽圖", "LabelTrickplayKeyFrameOnlyExtractionHelp": "只係擷取「關鍵影格(Key frames)」,咁樣處理速度會快好多,但時間定位就未必百分百準確。如果設定咗嘅硬體解碼器唔支援呢個模式,就會轉用軟體解碼。", "NonBlockingScan": "非阻塞(Non-blocking)— 先排隊整縮圖,然後直接完成掃描", "BlockingScan": "阻塞(Blocking)— 排隊整預覽圖,整完先會完成掃描", @@ -1894,5 +1894,14 @@ "ContinueReading": "繼續閱讀", "HeaderLatestBooks": "近排新增嘅書籍", "UsersEditPageError": "載入唔到使用者編輯頁面", - "HeaderLatestMusicVideos": "近排新增嘅 MV" + "HeaderLatestMusicVideos": "近排新增嘅 MV", + "LabelVideoAttributes": "影片屬性", + "LabelVideoColors": "影片色彩", + "LabelVideoBitDepth": "影片位元深度", + "LabelAudioAttributes": "音訊屬性", + "LabelTargetCodecs": "目標編碼器", + "LabelProgressAndSpeed": "進度/速度", + "LabelReasons": "原因", + "LabelPlayerSizes": "播放器尺寸", + "LabelPlaybackQuality": "跌格/損壞" } From 20ad035a33f66bcece14788c944ba596bcb28f9f Mon Sep 17 00:00:00 2001 From: DyingSlacker <2391773977@outlook.com> Date: Mon, 6 Apr 2026 21:52:57 -0400 Subject: [PATCH 037/695] Translated using Weblate (Chinese (Simplified Han script)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/ --- src/strings/zh-cn.json | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index 30cef32dea..d665f6d091 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -1894,5 +1894,14 @@ "ActivitiesLoadError": "活动加载失败", "Authors": "作者", "LabelInternalServerUriHelp": "用于内部访问的已发布 URI。", - "BrandingLoadError": "品牌设置加载失败" + "BrandingLoadError": "品牌设置加载失败", + "LabelVideoAttributes": "视频属性", + "LabelVideoColors": "视频色彩", + "LabelVideoBitDepth": "视频位深", + "LabelAudioAttributes": "音频属性", + "LabelTargetCodecs": "目标编码器", + "LabelReasons": "原因", + "LabelPlayerSizes": "播放器尺寸", + "LabelProgressAndSpeed": "进度 / 速度", + "LabelPlaybackQuality": "丢帧 / 坏帧" } From 8757385765943685097dc2898e8a0caa101d7417 Mon Sep 17 00:00:00 2001 From: Nyanmisaka <799610810@qq.com> Date: Mon, 6 Apr 2026 23:20:21 -0400 Subject: [PATCH 038/695] Translated using Weblate (Chinese (Simplified Han script)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/ --- src/strings/zh-cn.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index d665f6d091..34f7ed7611 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -1897,11 +1897,11 @@ "BrandingLoadError": "品牌设置加载失败", "LabelVideoAttributes": "视频属性", "LabelVideoColors": "视频色彩", - "LabelVideoBitDepth": "视频位深", + "LabelVideoBitDepth": "视频色深", "LabelAudioAttributes": "音频属性", - "LabelTargetCodecs": "目标编码器", + "LabelTargetCodecs": "目标编码", "LabelReasons": "原因", "LabelPlayerSizes": "播放器尺寸", - "LabelProgressAndSpeed": "进度 / 速度", + "LabelProgressAndSpeed": "进度 / 速率", "LabelPlaybackQuality": "丢帧 / 坏帧" } From dff2ce4262ccdaac11e2c8a80a5063071e5bc951 Mon Sep 17 00:00:00 2001 From: Lofuuzi Date: Mon, 6 Apr 2026 23:13:13 -0400 Subject: [PATCH 039/695] Translated using Weblate (Chinese (Traditional Han script, Hong Kong)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant_HK/ --- src/strings/zh-hk.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/strings/zh-hk.json b/src/strings/zh-hk.json index 404580e0ad..38e7ffb9e9 100644 --- a/src/strings/zh-hk.json +++ b/src/strings/zh-hk.json @@ -358,7 +358,7 @@ "Data": "資料", "ButtonUseQuickConnect": "用快速連線", "ButtonPlayer": "播放器", - "ButtonCast": "投影到裝置", + "ButtonCast": "投放到裝置", "ButtonActivate": "啟用", "Authorize": "授權", "ApiKeysCaption": "目前生效緊嘅 API 金鑰清單", @@ -1082,14 +1082,14 @@ "Share": "分享", "Tags": "標籤", "Series": "系列", - "SearchResults": "搜索結果", + "SearchResults": "搜尋結果", "OptionRandom": "隨機", "Preview": "預覽", "Suggestions": "建議", "SubtitleYellow": "黃", "Menu": "菜單", "RememberMe": "保持登入狀態", - "Search": "搜索", + "Search": "搜尋", "HeaderAllRecordings": "所有錄影嘅節目", "MenuOpen": "打開菜單", "TitleHardwareAcceleration": "硬體加速", @@ -1237,7 +1237,7 @@ "LabelTextWeight": "字體粗幼", "Producer": "製片人", "Studio": "工作室", - "Video": "視頻", + "Video": "影片", "TabStreaming": "串流", "LabelEncodingFormatOptions": "編碼格式選項", "LabelHardwareEncodingOptions": "硬體編碼選項", @@ -1252,7 +1252,7 @@ "LabelVppTonemappingContrast": "VPP 色調映射(Tone mapping)對比度增益", "LabelVppTonemappingContrastHelp": "喺 VPP 色調映射度調整對比度增益。建議數值係 1。", "LabelTonemappingMode": "色調映射模式", - "TonemappingModeHelp": "揀返色調映射(Tone mapping)嘅模式。如果發現畫面高光位太白(爆光),可以試吓轉用 RGB 模式。", + "TonemappingModeHelp": "揀返色調映射(Tone mapping)嘅模式。如果發現畫面高光位太白(曝光),可以試吓轉用 RGB 模式。", "TabNetworking": "網路", "TabNfoSettings": "NFO 設定", "AllowStreamSharingHelp": "允許 Jellyfin 複製並串流調諧器(Tuner)入面嘅 MPEGTS 流,再分發畀其他用戶端。如果調諧器有串流數量限制,呢個功能幾有用,但係可能會搞到播放出問題。", @@ -1313,7 +1313,7 @@ "LimitSupportedVideoResolutionHelp": "將「允許嘅最高影片轉碼解像度」設為系統支援嘅最高上限。", "ListView": "清單檢視", "LiveTVPageLoadError": "載入唔到錄影頁面", - "Localization": "本地化", + "Localization": "在地化", "LogLevel.Trace": "追蹤", "LogLevel.Information": "Information", "LogLevel.Warning": "⚠️警告", @@ -1487,7 +1487,7 @@ "PictureInPicture": "畫中畫(PiP)", "PlaceFavoriteChannelsAtBeginning": "將心水頻道擺喺最前面", "PlayAllFromHere": "由呢度開始全部播放", - "PlaybackData": "播放信息", + "PlaybackData": "播放資訊", "PlaybackError.ASS_RENDER_ERROR": "ASS/SSA 字幕渲染器出咗錯。", "PlaybackError.FATAL_HLS_ERROR": "HLS 串流出咗嚴重錯誤。", "PlaybackError.MEDIA_DECODE_ERROR": "媒體解碼失敗,播唔到。", From e5841d66d6d62131e747f94774a60f2d101ea6c2 Mon Sep 17 00:00:00 2001 From: MrPlow Date: Tue, 7 Apr 2026 02:43:52 -0400 Subject: [PATCH 040/695] Translated using Weblate (German) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/ --- src/strings/de.json | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/strings/de.json b/src/strings/de.json index 2f69fc2ffa..4e2383ce5b 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -1894,5 +1894,14 @@ "ContinueReading": "Weiterlesen", "HeaderLatestBooks": "Kürzlich hinzugefügte Bücher", "UsersEditPageError": "Seite zur Bearbeitung von Benutzern konnte nicht geladen werden", - "HeaderLatestMusicVideos": "Kürzlich hinzugefügte Musikvideos" + "HeaderLatestMusicVideos": "Kürzlich hinzugefügte Musikvideos", + "LabelVideoAttributes": "Video Attribute", + "LabelVideoColors": "Video Farben", + "LabelVideoBitDepth": "Video Bittiefe", + "LabelAudioAttributes": "Audio Attribute", + "LabelTargetCodecs": "Zielcodecs", + "LabelProgressAndSpeed": "Fortschritt / Geschwindigkeit", + "LabelReasons": "Gründe", + "LabelPlayerSizes": "Player Größen", + "LabelPlaybackQuality": "Frame verloren / beschädigt" } From 0b4b8efb61ea830e09e8da3e10806aaa8c77a6a6 Mon Sep 17 00:00:00 2001 From: hoanghuy309 Date: Tue, 7 Apr 2026 03:12:48 -0400 Subject: [PATCH 041/695] Translated using Weblate (Vietnamese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/vi/ --- src/strings/vi.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/strings/vi.json b/src/strings/vi.json index 82188f8427..3400afb95c 100644 --- a/src/strings/vi.json +++ b/src/strings/vi.json @@ -1894,5 +1894,13 @@ "OptionDatePlaylistUpdated": "Ngày cập nhật danh sách phát", "Unwatch": "Hủy theo dõi", "Watch": "Xem", - "TrickplayLoadError": "Lỗi tải cấu hình trickplay" + "TrickplayLoadError": "Lỗi tải cấu hình trickplay", + "LabelVideoAttributes": "Thuộc tính video", + "LabelVideoColors": "Màu sắc video", + "LabelVideoBitDepth": "Độ sâu bit video", + "LabelAudioAttributes": "Thuộc tính âm thanh", + "LabelProgressAndSpeed": "Tiến độ / tốc độ", + "LabelReasons": "Lý do", + "LabelPlayerSizes": "Kích thước trình phát", + "LabelPlaybackQuality": "Khung hình bị rớt / hỏng" } From 6575d97963dbca996d3ae7de12e7b106f870162c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=B6khan?= Date: Tue, 7 Apr 2026 06:46:27 -0400 Subject: [PATCH 042/695] Translated using Weblate (Turkish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/tr/ --- src/strings/tr.json | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/strings/tr.json b/src/strings/tr.json index a9f435d310..0afe940405 100644 --- a/src/strings/tr.json +++ b/src/strings/tr.json @@ -1894,5 +1894,14 @@ "HeaderLatestMusicVideos": "Son Eklenen Müzik Videoları", "Unwatch": "İzlenmedi olarak işaretle", "UsersEditPageError": "Kullanıcı düzenleme sayfası yüklenemedi", - "Watch": "İzle" + "Watch": "İzle", + "LabelVideoAttributes": "Vıdeo özellikleri", + "LabelVideoColors": "Video renkleri", + "LabelVideoBitDepth": "Video bit derinliği", + "LabelAudioAttributes": "Ses özellikleri", + "LabelTargetCodecs": "Hedef codec bileşenleri", + "LabelProgressAndSpeed": "İlerleme / hız", + "LabelReasons": "Sebepler", + "LabelPlayerSizes": "Oynatıcı dosya boyutları", + "LabelPlaybackQuality": "Kare düştü / bozuldu" } From 8985f8df42e74dfb038181a910afaf2010afbc7f Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Tue, 7 Apr 2026 08:17:09 -0400 Subject: [PATCH 043/695] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index 0fe60f8a26..cfe83d35b2 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -744,7 +744,7 @@ "LabelBlastMessageInterval": "Intervalo para envio de mensagens de reconhecimento", "LabelBitrate": "Taxa de bits", "LabelBirthYear": "Ano de nascimento", - "ButtonAudioTracks": "Faixas de Áudio", + "ButtonAudioTracks": "Faixas de áudio", "ButtonArrowRight": "Direita", "ButtonArrowLeft": "Esquerda", "ButtonAddUser": "Adicionar utilizador", From a06fbc9d8c6aa43fe2e5861d984c9d0a2874b443 Mon Sep 17 00:00:00 2001 From: theguymadmax Date: Tue, 7 Apr 2026 12:47:29 -0400 Subject: [PATCH 044/695] Fix genres not showing for collections and playlists --- src/components/itemDetails/ItemDetailsMetadataList.tsx | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/components/itemDetails/ItemDetailsMetadataList.tsx b/src/components/itemDetails/ItemDetailsMetadataList.tsx index 1f4a031292..42cf5bc8ab 100644 --- a/src/components/itemDetails/ItemDetailsMetadataList.tsx +++ b/src/components/itemDetails/ItemDetailsMetadataList.tsx @@ -89,16 +89,15 @@ function getRouteType(type: BaseItemKind | PersonKind, context: string): string } function getMetadataItems(type: BaseItemKind | PersonKind, item: BaseItemDto): NameGuidPair[] | null { - if (item.Type === BaseItemKind.BoxSet || item.Type === BaseItemKind.Playlist) { - return null; - } - switch (type) { case PersonKind.Author: case PersonKind.Director: case PersonKind.Writer: return item.People?.filter(person => person.Type === type).map(person => ({ Id: person.Id, Name: person.Name })) ?? null; case BaseItemKind.Studio: + if (item.Type === BaseItemKind.BoxSet || item.Type === BaseItemKind.Playlist) { + return null; + } return item.Studios ?? null; case BaseItemKind.Genre: return item.GenreItems ?? null; From 064e486c6d6901c8af68abb50f4118e569140f3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szumutku=20=C3=81d=C3=A1m?= Date: Tue, 7 Apr 2026 14:21:30 -0400 Subject: [PATCH 045/695] Translated using Weblate (Hungarian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/ --- src/strings/hu.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/strings/hu.json b/src/strings/hu.json index 4e165edf04..d1dc89c389 100644 --- a/src/strings/hu.json +++ b/src/strings/hu.json @@ -1870,5 +1870,11 @@ "ConfirmDeleteCollection": "Biztos vagy benne, hogy kitörlöd ezt a gyűjteményt?", "ConfirmDeletePlaylist": "Biztosan kitörlöd ezt a lejátszási listát?", "HeaderDeleteCollection": "Gyűjtemény törlése", - "HeaderDeletePlaylist": "Lejátszási lista törlése" + "HeaderDeletePlaylist": "Lejátszási lista törlése", + "ActivitiesLoadError": "Tevékenység betöltése sikertelen", + "ApiKeysLoadError": "API kulcsok betöltése sikertelen", + "Authors": "Szerzők", + "ContinueReading": "Olvasás folytatása", + "HeaderLatestBooks": "Mostanában hozzáadott könyvek", + "HeaderLatestMusicVideos": "Mostanában hozzáadott zenei videók" } From e9b92ee5a905c0f0436008bcbc36f99835d9d1e3 Mon Sep 17 00:00:00 2001 From: Fjuro Date: Tue, 7 Apr 2026 15:24:02 -0400 Subject: [PATCH 046/695] Translated using Weblate (Czech) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/ --- src/strings/cs.json | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/strings/cs.json b/src/strings/cs.json index 38f00f2543..e28e873e19 100644 --- a/src/strings/cs.json +++ b/src/strings/cs.json @@ -1894,5 +1894,14 @@ "ContinueReading": "Číst dál", "HeaderLatestBooks": "Nedávno přidané knihy", "UsersEditPageError": "Nepodařilo se načíst stránku pro úpravy uživatelů", - "HeaderLatestMusicVideos": "Nedávno přidaná hudební videa" + "HeaderLatestMusicVideos": "Nedávno přidaná hudební videa", + "LabelVideoAttributes": "Atributy videa", + "LabelVideoColors": "Barvy videa", + "LabelVideoBitDepth": "Bitová hloubka videa", + "LabelAudioAttributes": "Atributy zvuku", + "LabelTargetCodecs": "Cílové kodeky", + "LabelProgressAndSpeed": "Průběh / rychlost", + "LabelReasons": "Důvody", + "LabelPlayerSizes": "Velikosti přehrávače", + "LabelPlaybackQuality": "Ztracený / poškozený snímek" } From c255c7fea1384cce1137821f989f50e8db78107c Mon Sep 17 00:00:00 2001 From: Andi Chandler Date: Tue, 7 Apr 2026 17:44:08 -0400 Subject: [PATCH 047/695] Translated using Weblate (English (United Kingdom)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en_GB/ --- src/strings/en-gb.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/en-gb.json b/src/strings/en-gb.json index cf5ff89f8d..7ff6bd1eec 100644 --- a/src/strings/en-gb.json +++ b/src/strings/en-gb.json @@ -1889,5 +1889,6 @@ "Watch": "Watch", "TrickplayLoadError": "Failed to load trickplay settings", "LabelExternalServerUri": "External URI", - "LabelExternalServerUriHelp": "Published server URI for external access." + "LabelExternalServerUriHelp": "Published server URI for external access.", + "Authors": "Authors" } From 86d5212a6d1f1123097dce6dfe3a460ee2f2fff4 Mon Sep 17 00:00:00 2001 From: nour ovendodger Date: Tue, 7 Apr 2026 19:40:03 -0400 Subject: [PATCH 048/695] Translated using Weblate (Abkhazian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ab/ --- src/strings/ab.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/strings/ab.json b/src/strings/ab.json index 0967ef424b..67232c8792 100644 --- a/src/strings/ab.json +++ b/src/strings/ab.json @@ -1 +1,5 @@ -{} +{ + "Absolute": "абсолют", + "AccessRestrictedTryAgainLater": "Анеира иахьа иаԥыхуп. Ҳаԥшәышәала, ашьҭахь даҽазнык шәҽазышәа.", + "Actor": "Актер" +} From 62a9a52ed178d10b7a5a25f28ef0426da50f7520 Mon Sep 17 00:00:00 2001 From: Isis Ebsen Date: Sun, 1 Mar 2026 11:42:45 +0000 Subject: [PATCH 049/695] Respect DisplayMissingEpisodes setting in item details pages Follows up on PR #7528 --- src/controllers/itemDetails/index.js | 6 ++--- src/scripts/itemsByName.js | 39 ++++++++++++++-------------- 2 files changed, 23 insertions(+), 22 deletions(-) diff --git a/src/controllers/itemDetails/index.js b/src/controllers/itemDetails/index.js index feca0667f9..6d7cae62dd 100644 --- a/src/controllers/itemDetails/index.js +++ b/src/controllers/itemDetails/index.js @@ -825,7 +825,7 @@ function setInitialCollapsibleState(page, item, apiClient, context, user) { } else if (item.Type == 'Studio' || item.Type == 'Person' || item.Type == 'Genre' || item.Type == 'MusicGenre' || item.Type == 'MusicArtist') { page.querySelector('#listChildrenCollapsible').classList.remove('hide'); page.querySelector('#childrenCollapsible').classList.add('hide'); - renderItemsByName(page, item); + renderItemsByName(page, item, user); } else if (item.IsFolder) { if (item.Type == 'BoxSet') { page.querySelector('#listChildrenCollapsible').classList.add('hide'); @@ -1450,9 +1450,9 @@ function renderChildren(page, item) { } } -function renderItemsByName(page, item) { +function renderItemsByName(page, item, user) { import('../../scripts/itemsByName').then(({ default: ItemsByName }) => { - ItemsByName.renderItems(page, item); + ItemsByName.renderItems(page, item, user); }); } diff --git a/src/scripts/itemsByName.js b/src/scripts/itemsByName.js index 3762faf7ba..50757b8523 100644 --- a/src/scripts/itemsByName.js +++ b/src/scripts/itemsByName.js @@ -9,7 +9,7 @@ import { ServerConnections } from 'lib/jellyfin-apiclient'; import 'elements/emby-itemscontainer/emby-itemscontainer'; import 'elements/emby-button/emby-button'; -function renderItems(page, item) { +function renderItems(page, item, user) { const sections = []; if (item.ArtistCount) { @@ -98,11 +98,11 @@ function renderItems(page, item) { const sectionElems = elem.querySelectorAll('.verticalSection'); for (let i = 0, length = sectionElems.length; i < length; i++) { - renderSection(item, sectionElems[i], sectionElems[i].getAttribute('data-type')); + renderSection(item, sectionElems[i], sectionElems[i].getAttribute('data-type'), user); } } -function renderSection(item, element, type) { +function renderSection(item, element, type, user) { switch (type) { case 'Program': loadItems(element, item, type, { @@ -123,7 +123,7 @@ function renderSection(item, element, type) { showAirTime: true, showAirDateTime: true, showChannelName: true - }); + }, user); break; case 'Movie': @@ -143,7 +143,7 @@ function renderSection(item, element, type) { overlayMoreButton: true, overlayText: false, showYear: true - }); + }, user); break; case 'MusicVideo': @@ -160,7 +160,7 @@ function renderSection(item, element, type) { showTitle: true, centerText: true, overlayPlayButton: true - }); + }, user); break; case 'Trailer': @@ -177,7 +177,7 @@ function renderSection(item, element, type) { showTitle: true, centerText: true, overlayPlayButton: true - }); + }, user); break; case 'Series': @@ -194,7 +194,7 @@ function renderSection(item, element, type) { showTitle: true, centerText: true, overlayMoreButton: true - }); + }, user); break; case 'MusicAlbum': @@ -214,7 +214,7 @@ function renderSection(item, element, type) { coverImage: true, centerText: true, overlayPlayButton: true - }); + }, user); break; case 'Book': @@ -250,7 +250,7 @@ function renderSection(item, element, type) { coverImage: true, centerText: true, overlayPlayButton: true - }); + }, user); break; case 'Episode': @@ -268,7 +268,7 @@ function renderSection(item, element, type) { showParentTitle: true, centerText: true, overlayPlayButton: true - }); + }, user); break; case 'Audio': @@ -284,13 +284,13 @@ function renderSection(item, element, type) { action: 'playallfromhere', smallIcon: true, artist: true - }); + }, user); } } -function loadItems(element, item, type, query, listOptions) { - query = getQuery(query, item); - getItemsFunction(query, item)(query.StartIndex, query.Limit, query.Fields).then(function (result) { +function loadItems(element, item, type, query, listOptions, user) { + query = getQuery(query, item, user); + getItemsFunction(query, item, user)(query.StartIndex, query.Limit, query.Fields).then(function (result) { // If results are empty, hide the section if (!result.Items?.length) { element.classList.add('hide'); @@ -372,7 +372,7 @@ function addCurrentItemToQuery(query, item) { } } -function getQuery(options, item) { +function getQuery(options, item, user) { let query = { SortOrder: 'Ascending', IncludeItemTypes: '', @@ -380,15 +380,16 @@ function getQuery(options, item) { Fields: 'ParentId,PrimaryImageAspectRatio', Limit: 100, StartIndex: 0, - CollapseBoxSetItems: false + CollapseBoxSetItems: false, + isMissing: !user.Configuration.DisplayMissingEpisodes ? false : undefined, }; query = Object.assign(query, options || {}); addCurrentItemToQuery(query, item); return query; } -function getItemsFunction(options, item) { - const query = getQuery(options, item); +function getItemsFunction(options, item, user) { + const query = getQuery(options, item, user); return function (index, limit, fields) { query.StartIndex = index; query.Limit = limit; From cb6904c327f0fa99d7eb38a1cbf4a1e09c3a1429 Mon Sep 17 00:00:00 2001 From: Isis Ebsen Date: Sun, 1 Mar 2026 12:02:34 +0000 Subject: [PATCH 050/695] use optional chaining for user configuration access --- src/scripts/itemsByName.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scripts/itemsByName.js b/src/scripts/itemsByName.js index 50757b8523..aaa16b50a1 100644 --- a/src/scripts/itemsByName.js +++ b/src/scripts/itemsByName.js @@ -381,7 +381,7 @@ function getQuery(options, item, user) { Limit: 100, StartIndex: 0, CollapseBoxSetItems: false, - isMissing: !user.Configuration.DisplayMissingEpisodes ? false : undefined, + isMissing: !user?.Configuration?.DisplayMissingEpisodes ? false : undefined, }; query = Object.assign(query, options || {}); addCurrentItemToQuery(query, item); From 90f5892e416569553228a965d974ca3cd073d63c Mon Sep 17 00:00:00 2001 From: Alejandro Delgado Folgado Date: Wed, 8 Apr 2026 07:00:06 -0400 Subject: [PATCH 051/695] Translated using Weblate (Spanish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/ --- src/strings/es.json | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/strings/es.json b/src/strings/es.json index 384aefac10..957e3059b4 100644 --- a/src/strings/es.json +++ b/src/strings/es.json @@ -1046,7 +1046,7 @@ "LabelPlayMethod": "Método de reproducción", "LabelPlayer": "Reproductor", "LabelFolder": "Carpeta", - "LabelBaseUrlHelp": "Puede agregar aquí un subdirectorio personalizado para el acceso al servidor a través de una URL.Por ejemplo: http://ejemplo.com/<baseurl>", + "LabelBaseUrlHelp": "Puede agregar aquí un subdirectorio personalizado para el acceso al servidor a través de una URL.Por ejemplo: https://ejemplo.com/", "LabelBaseUrl": "URL base", "LabelBitrate": "Bitrate", "LabelAudioSampleRate": "Frecuencia de muestreo de audio", @@ -1284,8 +1284,8 @@ "YoutubePlaybackError": "El vídeo solicitado no se puede reproducir.", "YoutubeBadRequest": "Solicitud incorrecta.", "AspectRatioCover": "Zoom", - "LabelPublishedServerUriHelp": "Anula la URI usada por Jellyfin, basada en la interfaz o en la dirección IP del cliente. Por ejemplo: internal=http://jellyfin.example.com, external=https://jellyfin.example.com, o all=https://jellyfin.example.com", - "LabelPublishedServerUri": "URI del servidor publicadas", + "LabelPublishedServerUriHelp": "Anula la URI usada por Jellyfin, basada en la interfaz o en la dirección IP del cliente.", + "LabelPublishedServerUri": "URI del servidor publicada", "LabelIsForced": "Forzados", "LabelEnableIP6Help": "Activa la funcionalidad IPv6.", "LabelEnableIP6": "Activar IPv6", @@ -1840,7 +1840,7 @@ "StorageType.Fixed": "Corregido", "StorageType.CDRom": "CD-ROM", "StorageType.Removable": "Extraíble", - "PluginsLoadError": "Se produjo un error al cargar los complementos.", + "PluginsLoadError": "Se produjo un error al cargar los complementos", "RepositoriesPageLoadError": "Fallo al cargar los repositorios", "MessageBackupDisclaimer": "Dependiendo del tamaño de tu biblioteca, el proceso de copia de seguridad puede tardar un rato.", "MessageBackupInProgress": "Copia de seguridad en curso", @@ -1894,5 +1894,14 @@ "Watch": "Ver", "TrickplayLoadError": "Error, imposible cargar los ajustes de trickplay", "LabelExternalServerUri": "URI Externa", - "LabelExternalServerUriHelp": "URI del servidor publicada para acceso externo." + "LabelExternalServerUriHelp": "URI del servidor publicada para acceso externo.", + "LabelVideoAttributes": "Atributos de vídeo", + "LabelVideoColors": "Color de vídeo", + "LabelVideoBitDepth": "Profundidad de bits de vídeo", + "LabelAudioAttributes": "Atributos de audio", + "LabelTargetCodecs": "Códecs de salida", + "LabelProgressAndSpeed": "Progreso / velocidad", + "LabelReasons": "Razones", + "LabelPlayerSizes": "Tamaño del reproductor", + "LabelPlaybackQuality": "Fotogramas perdidos / corruptos" } From 0b15641cc955aefa5a6a715a7ccefa99600291d2 Mon Sep 17 00:00:00 2001 From: holdin unknown Date: Wed, 8 Apr 2026 12:15:25 -0400 Subject: [PATCH 052/695] Translated using Weblate (Slovak) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/ --- src/strings/sk.json | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/strings/sk.json b/src/strings/sk.json index edd48f0cd7..013842c775 100644 --- a/src/strings/sk.json +++ b/src/strings/sk.json @@ -1886,5 +1886,22 @@ "LabelUseSamePublishedServerUri": "Použiť rovnakú publikovanú URI adresu servera pre interný aj externý prístup", "LibrariesLoadError": "Nepodarilo sa načítať knižnice", "NetworkingPageLoadError": "Nepodarilo sa načítať nastavenia siete", - "ResetFilters": "Resetovať filtre" + "ResetFilters": "Resetovať filtre", + "ResumeLoadError": "Nepodarilo sa načítať nastavenia pokračovania", + "StreamingLoadError": "Nepodarilo sa načítať nastavenie pre streamovanie stránky", + "Unwatch": "Zrušiť sledovanie", + "UsersEditPageError": "Nepodarilo sa načítať stránku pre úpravu používateľov", + "Watch": "Sledovať", + "TrickplayLoadError": "Nepodarilo sa načítať nastavenie Trickplay", + "LabelExternalServerUri": "Externá URI", + "LabelExternalServerUriHelp": "Zverejnená adresa URI servera pre externý prístup.", + "LabelVideoAttributes": "Atribúty videa", + "LabelVideoColors": "Farby videa", + "LabelVideoBitDepth": "Bitová hĺbka videa", + "LabelAudioAttributes": "Atribúty zvuku", + "LabelTargetCodecs": "Cieľové kódeky", + "LabelProgressAndSpeed": "Priebeh / rýchlosť", + "LabelReasons": "Dôvody", + "LabelPlayerSizes": "Veľkosti prehrávača", + "LabelPlaybackQuality": "Stratený / poškodený snímok" } From eeab17c40fb1646991cd1a8bebf781cdf034a6fc Mon Sep 17 00:00:00 2001 From: Shaim117 Date: Wed, 8 Apr 2026 14:23:45 -0400 Subject: [PATCH 053/695] Translated using Weblate (Dhivehi) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/dv/ --- src/strings/dv.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/strings/dv.json b/src/strings/dv.json index 4ae4784fd2..c6573579f2 100644 --- a/src/strings/dv.json +++ b/src/strings/dv.json @@ -129,7 +129,7 @@ "ButtonPause": "ޕޯސް", "ButtonParentalControl": "ބެލެނިވެރިންގެ ކޮންޓްރޯލް", "ButtonPlayer": "ޕްލޭޔަރު", - "ButtonQuickStartGuide": "ކުއިކް ސްޓާޓް ގައިޑް", + "ButtonQuickStartGuide": "ސެޓަޕް ގައިޑް", "ButtonRemove": "ފުހެލާ", "ButtonRename": "ނަން ބަދަލުކޮއްލާ", "ButtonRevoke": "ނަގާ", @@ -231,8 +231,9 @@ "DirectPlayHelp": "ސޯސް ފައިލް އެއްކޮށް މި ކްލައިންޓާ ގުޅޭ ސެޝަނަށް ފައިލް ލިބެމުންދަނީ ބަދަލެއް ނުގެނެސް.", "CustomSplashScreenSize": "ކަސްޓަމް އިމޭޖްތައް ހުންނަންވާނީ 16x9 އެސްޕެކްޓް ރޭޝިއޯއެއްގައި އެންމެ ކުޑަމިނުން 1920x1080 ގެ ސައިޒް.", "DeleteImageConfirmation": "މި އިމޭޖް ޑިލީޓް ކުރަން ބޭނުންވާކަން ޔަގީން؟", - "Desktop": "ޑެސްކްޓޮޕް", + "Desktop": "ޑެސްކްޓޮޕް (ލެގަސީ)", "ConfigureDateAdded": "'ޑޭޓް އެޑްޑް' އަށް މެޓަޑޭޓާ ސެޓްއަޕް ކުރަން ޑޭޝްބޯޑް > ލައިބްރަރީތައް > ޑިސްޕްލޭ", "ConfirmDeleteRepository": "ރިޕޮޒިޓަރީ ޑިލީޓް ކުރަންވީތަ؟", - "DeleteEntireSeries": "{0} އެޕިސޯޑް ޑިލީޓްކޮއްލާ" + "DeleteEntireSeries": "{0} އެޕިސޯޑް ޑިލީޓްކޮއްލާ", + "ActivitiesLoadError": "އެކްޓިވިޓީތައް ލޯޑު ނުވެވުނު" } From 3c79982c9f42aaea5ffa92c666ae908bc9c9e734 Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Thu, 9 Apr 2026 01:32:51 -0400 Subject: [PATCH 054/695] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index b1ab446d72..7c1a37e426 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -1903,5 +1903,6 @@ "LabelProgressAndSpeed": "Voortgang / snelheid", "LabelReasons": "Redenen", "LabelPlayerSizes": "Spelergroottes", - "LabelPlaybackQuality": "Frame verloren / beschadigd" + "LabelPlaybackQuality": "Frame verloren / beschadigd", + "OnFilesystem": "Op bestandssysteem: {0}" } From 4dee3cd075903568319eff03f35abcc8025f9785 Mon Sep 17 00:00:00 2001 From: Hexade Date: Thu, 9 Apr 2026 05:36:44 -0400 Subject: [PATCH 055/695] Translated using Weblate (Spanish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/ --- src/strings/es.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/es.json b/src/strings/es.json index 957e3059b4..554cfbfc84 100644 --- a/src/strings/es.json +++ b/src/strings/es.json @@ -1903,5 +1903,6 @@ "LabelProgressAndSpeed": "Progreso / velocidad", "LabelReasons": "Razones", "LabelPlayerSizes": "Tamaño del reproductor", - "LabelPlaybackQuality": "Fotogramas perdidos / corruptos" + "LabelPlaybackQuality": "Fotogramas perdidos / corruptos", + "OnFilesystem": "En el sistema de archivos: {0}" } From c44f9e808edacf0d314df124083f5fd6cab49cb8 Mon Sep 17 00:00:00 2001 From: Lofuuzi Date: Thu, 9 Apr 2026 04:54:56 -0400 Subject: [PATCH 056/695] Translated using Weblate (Chinese (Traditional Han script, Hong Kong)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant_HK/ --- src/strings/zh-hk.json | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/strings/zh-hk.json b/src/strings/zh-hk.json index 38e7ffb9e9..d5a60aa9e6 100644 --- a/src/strings/zh-hk.json +++ b/src/strings/zh-hk.json @@ -16,7 +16,7 @@ "ChannelAccessHelp": "揀返你想同呢個用家分享嘅頻道。管理員可以用媒體詳細資料管理器編輯所有頻道嘅資料。", "Continuing": "繼續", "Delete": "刪走", - "DeviceAccessHelp": "呢個設定只適用於可以獨特識別嘅裝置,唔會阻擋到瀏覽器存取。過濾用家裝置存取權之後,佢哋如果用新裝置,必須喺呢度批准咗先用得。", + "DeviceAccessHelp": "呢個設定只適用於可以獨特識別嘅裝置,唔會阻擋到瀏覽器存取。篩選用家裝置存取權之後,佢哋如果用新裝置,必須喺呢度批准咗先用得。", "Edit": "編輯", "EditSubtitles": "編輯字幕", "Ended": "已完結", @@ -622,8 +622,8 @@ "LabelAppNameExample": "呢個係畀人睇嘅識別名,用嚟認住啲 API 金鑰。呢個設定唔會影響實際功能。", "LabelAppName": "APP 名稱", "LabelAllowHWTranscoding": "允許硬體轉碼", - "LabelAllowedRemoteAddressesMode": "遠端 IP 地址過濾模式", - "LabelAllowedRemoteAddresses": "遠端 IP 地址過濾", + "LabelAllowedRemoteAddressesMode": "遠端 IP 地址篩選模式", + "LabelAllowedRemoteAddresses": "遠端 IP 地址篩選", "LabelAlbumArtists": "專輯歌手", "LabelAlbum": "專輯", "LabelAirTime": "播出時間", @@ -1903,5 +1903,6 @@ "LabelProgressAndSpeed": "進度/速度", "LabelReasons": "原因", "LabelPlayerSizes": "播放器尺寸", - "LabelPlaybackQuality": "跌格/損壞" + "LabelPlaybackQuality": "跌格/損壞", + "OnFilesystem": "檔案系統位置:{0}" } From 70b233b9b014bbceb77474f2ce095d808ce490a1 Mon Sep 17 00:00:00 2001 From: rimasx Date: Thu, 9 Apr 2026 06:42:56 -0400 Subject: [PATCH 057/695] Translated using Weblate (Estonian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/et/ --- src/strings/et.json | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/strings/et.json b/src/strings/et.json index f40a0e2416..be5a6cdd94 100644 --- a/src/strings/et.json +++ b/src/strings/et.json @@ -101,7 +101,7 @@ "InstantMix": "Kiirmiks", "HeaderInstantMix": "Kiirmiks", "LabelBindToLocalNetworkAddress": "Seo kohaliku võrgu aadressiga", - "LabelBaseUrlHelp": "Lisa serveri URL -ile kohandatud alamkataloog. Näiteks: http://example.com/<baseurl>", + "LabelBaseUrlHelp": "Lisa serveri URL-ile kohandatud alamkataloog. Näiteks: https://example.com/", "LabelBaseUrl": "Peamine URL", "LabelAutomaticDiscoveryHelp": "Luba rakendustel UDP pordi 7359 abil Jellyfin automaatselt tuvastada.", "LabelAutomaticDiscovery": "Luba automaatne avastamine", @@ -705,8 +705,8 @@ "LabelRecord": "Salvesta", "LabelReasonForTranscoding": "Transkoodimise põhjus", "LabelQuickConnectCode": "Kiirühendumise kood", - "LabelPublishedServerUriHelp": "Alista Jellyfini poolt kasutatav URI lähtuvalt liidesest või kliendi IP-aadressist. Näiteks: sisemine=http://jellyfin.example.com, väline=https://jellyfin.example.com või kõik=https://jellyfin.example.com", - "LabelPublishedServerUri": "Avaldatud serveri URId", + "LabelPublishedServerUriHelp": "Alista Jellyfini poolt kasutatav URI lähtuvalt liidesest või kliendi IP-aadressist.", + "LabelPublishedServerUri": "Avaldatud serveri URI", "LabelPublicHttpsPortHelp": "Avaliku pordi number, mis liidetakse kohaliku HTTPS pordiga.", "LabelPublicHttpsPort": "Avaliku HTTPS pordi number", "LabelPublicHttpPort": "Avaliku HTTP pordi number", @@ -1842,7 +1842,7 @@ "ManageRepositories": "Halda hoidlaid", "MessageBackupDisclaimer": "Sõltuvalt meediakogu suurusest võib varundamine võtta aega.", "ViewSettings": "Kuva seaded", - "PluginsLoadError": "Pluginate laadimisel ilmnes viga.", + "PluginsLoadError": "Pluginate laadimisel ilmnes viga", "StorageType.Ram": "RAM", "StorageType.Removable": "Eemaldatav", "StorageType.Unknown": "Tundmatu", @@ -1890,5 +1890,15 @@ "LabelExternalServerUri": "Väline URI", "LabelExternalServerUriHelp": "Serveri avaldatud URI välise juurdepääsu jaoks.", "LabelInternalServerUriHelp": "Serveri avaldatud URI sisemise juurdepääsu jaoks.", - "LabelUseSamePublishedServerUri": "Kasuta sama URI nii sisemise kui ka välise juurdepääsu jaoks" + "LabelUseSamePublishedServerUri": "Kasuta sama URI nii sisemise kui ka välise juurdepääsu jaoks", + "OnFilesystem": "Failisüsteemis: {0}", + "LabelVideoAttributes": "Video omadused", + "LabelVideoColors": "Video värvid", + "LabelVideoBitDepth": "Video bitisügavus", + "LabelAudioAttributes": "Heli omadused", + "LabelTargetCodecs": "Sihtkoodekid", + "LabelProgressAndSpeed": "Edenemine / kiirus", + "LabelReasons": "Põhjused", + "LabelPlayerSizes": "Pleieri suurused", + "LabelPlaybackQuality": "Kadunud / rikutud kaadrid" } From 19a923e6eebcd8b98732e80dade6c46a4b6a7764 Mon Sep 17 00:00:00 2001 From: MrPlow Date: Thu, 9 Apr 2026 08:38:11 -0400 Subject: [PATCH 058/695] Translated using Weblate (German) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/ --- src/strings/de.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/de.json b/src/strings/de.json index 4e2383ce5b..1fc70bc019 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -1903,5 +1903,6 @@ "LabelProgressAndSpeed": "Fortschritt / Geschwindigkeit", "LabelReasons": "Gründe", "LabelPlayerSizes": "Player Größen", - "LabelPlaybackQuality": "Frame verloren / beschädigt" + "LabelPlaybackQuality": "Frame verloren / beschädigt", + "OnFilesystem": "Auf Dateisystem: {0}" } From 390cf64a583df1335a1c23527cfc32c9b4fc74e6 Mon Sep 17 00:00:00 2001 From: Anrijs Vitolins Date: Thu, 9 Apr 2026 07:36:30 -0400 Subject: [PATCH 059/695] Translated using Weblate (Latvian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/lv/ --- src/strings/lv.json | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/strings/lv.json b/src/strings/lv.json index c474492b04..c9c7277aaa 100644 --- a/src/strings/lv.json +++ b/src/strings/lv.json @@ -354,7 +354,7 @@ "DirectStreaming": "Tiešā straumēšana", "DirectPlaying": "Tiešā atskaņošana", "DetectingDevices": "Meklē ierīces", - "Desktop": "Darbvirsma", + "Desktop": "Darbvirsma (vecā)", "DeleteImage": "Dzēst attēlu", "Delete": "Izdzēst", "Default": "Noklusējuma", @@ -1850,5 +1850,19 @@ "LabelSlideshowInterval": "Fotoattēlu slaidrādes intervāls", "LabelSlideshowIntervalHelp": "Katra fotoattēla laiks sekundēs tiek parādīts slaidšovā.", "OptionDatePlaylistUpdated": "Atskaņošanas saraksta atjaunošanas datums", - "NewPlaylist": "Jauns atskaņošanas saraksts" + "NewPlaylist": "Jauns atskaņošanas saraksts", + "ActivitiesLoadError": "Nevarēja ielādēt aktivitātes", + "ApiKeysLoadError": "Neizdevās ielādēt API atslēgas", + "Authors": "Autori", + "BrandingLoadError": "Neizdevās ielādēt prečzīmju iestatījumus", + "ConfirmDeleteCollection": "Vai tiešām vēlaties nodzēst šo kolekciju?", + "ConfirmDeletePlaylist": "Vai tiešām vēlaties nodzēst šo atskaņošanas sarakstu?", + "ContinueReading": "Turpināt lasīšanu", + "DevicesLoadError": "Neizdevās ielādēt ierīces", + "HeaderDeleteCollection": "Dzēst kolekciju", + "HeaderDeletePlaylist": "Dzēst atskaņošanas sarakstu", + "HeaderLatestBooks": "Nesen pievienotās grāmatas", + "HeaderLatestMusicVideos": "Nesen pievienotie mūzikas video-klipi", + "LabelInternalServerUri": "Iekšējais URI", + "LabelInternalServerUriHelp": "Publicētā servera URI iekšējai piekļuvei." } From 806b410b02917dded7a3f2e2f7804c7ba402db9e Mon Sep 17 00:00:00 2001 From: Kityn Date: Fri, 10 Apr 2026 01:17:18 -0400 Subject: [PATCH 060/695] Translated using Weblate (Polish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/ --- src/strings/pl.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/pl.json b/src/strings/pl.json index 72c8c5361a..3f63c040c2 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -1903,5 +1903,6 @@ "LabelProgressAndSpeed": "Postęp / prędkość", "LabelReasons": "Powody", "LabelPlayerSizes": "Rozmiary odtwarzacza", - "LabelPlaybackQuality": "Klatka utracona / uszkodzona" + "LabelPlaybackQuality": "Klatka utracona / uszkodzona", + "OnFilesystem": "W systemie plików: {0}" } From 6633524f990a59a720dc1e011d751bd0bbe15fb4 Mon Sep 17 00:00:00 2001 From: wabisabi926 Date: Fri, 10 Apr 2026 05:21:23 -0400 Subject: [PATCH 061/695] Translated using Weblate (Chinese (Simplified Han script)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/ --- src/strings/zh-cn.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index 34f7ed7611..a5fea546c4 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -1903,5 +1903,6 @@ "LabelReasons": "原因", "LabelPlayerSizes": "播放器尺寸", "LabelProgressAndSpeed": "进度 / 速率", - "LabelPlaybackQuality": "丢帧 / 坏帧" + "LabelPlaybackQuality": "丢帧 / 坏帧", + "OnFilesystem": "在文件系统上:{0}" } From fe47023193568af081afd1d2d4c682a8dbe73ba1 Mon Sep 17 00:00:00 2001 From: dkanada Date: Fri, 10 Apr 2026 22:10:54 +0900 Subject: [PATCH 062/695] add audiobooks back to book libraries --- src/apps/experimental/routes/books/index.tsx | 6 +++--- src/utils/sections.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/apps/experimental/routes/books/index.tsx b/src/apps/experimental/routes/books/index.tsx index 49415d043f..5ba490bf37 100644 --- a/src/apps/experimental/routes/books/index.tsx +++ b/src/apps/experimental/routes/books/index.tsx @@ -11,7 +11,7 @@ import { BookSuggestionsSectionsView } from 'types/sections'; const booksTabContent: LibraryTabContent = { viewType: LibraryTab.Books, collectionType: CollectionType.Books, - itemType: [BaseItemKind.Book] + itemType: [BaseItemKind.AudioBook, BaseItemKind.Book] }; const suggestionsTabContent: LibraryTabContent = { @@ -23,13 +23,13 @@ const suggestionsTabContent: LibraryTabContent = { const genresTabContent: LibraryTabContent = { viewType: LibraryTab.Genres, collectionType: CollectionType.Books, - itemType: [BaseItemKind.Book] + itemType: [BaseItemKind.AudioBook, BaseItemKind.Book] }; const favoritesTabContent: LibraryTabContent = { viewType: LibraryTab.Favorites, collectionType: CollectionType.Books, - itemType: [BaseItemKind.Book] + itemType: [BaseItemKind.AudioBook, BaseItemKind.Book] }; const booksTabMapping: LibraryTabMapping = { diff --git a/src/utils/sections.ts b/src/utils/sections.ts index 661c53e351..f8906c34b2 100644 --- a/src/utils/sections.ts +++ b/src/utils/sections.ts @@ -57,7 +57,7 @@ export const getSuggestionSections = (): Section[] => { itemTypes: 'Book', type: SectionType.LatestBooks, parametersOptions: { - includeItemTypes: [BaseItemKind.Book] + includeItemTypes: [BaseItemKind.AudioBook, BaseItemKind.Book] }, cardOptions: { overlayPlayButton: true, From 92a9b3b37239c31cc1c5d203efe2356d44c6f19a Mon Sep 17 00:00:00 2001 From: theguymadmax Date: Mon, 6 Apr 2026 20:48:45 -0400 Subject: [PATCH 063/695] Set folder as default tab --- .../libraries/constants/libraryRoutes.ts | 8 +++---- .../experimental/routes/musicvideos/index.tsx | 22 +++++++++---------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/apps/experimental/features/libraries/constants/libraryRoutes.ts b/src/apps/experimental/features/libraries/constants/libraryRoutes.ts index 7aaeba343d..169de8af8b 100644 --- a/src/apps/experimental/features/libraries/constants/libraryRoutes.ts +++ b/src/apps/experimental/features/libraries/constants/libraryRoutes.ts @@ -204,8 +204,8 @@ export const LibraryRoutes: LibraryRoute[] = [ views: [ { index: 0, - label: 'HeaderVideos', - view: LibraryTab.MusicVideos, + label: 'Folders', + view: LibraryTab.Folders, isDefault: true }, { @@ -215,8 +215,8 @@ export const LibraryRoutes: LibraryRoute[] = [ }, { index: 2, - label: 'Folders', - view: LibraryTab.Folders + label: 'HeaderVideos', + view: LibraryTab.MusicVideos } ] } diff --git a/src/apps/experimental/routes/musicvideos/index.tsx b/src/apps/experimental/routes/musicvideos/index.tsx index 5efa7d6c17..56fa8cb163 100644 --- a/src/apps/experimental/routes/musicvideos/index.tsx +++ b/src/apps/experimental/routes/musicvideos/index.tsx @@ -8,12 +8,12 @@ import { CollectionType } from '@jellyfin/sdk/lib/generated-client/models/collec import { LibraryTabContent, LibraryTabMapping } from 'types/libraryTabContent'; import { MusicVideoSuggestionsSectionsView } from 'types/sections'; -const musicVideosTabContent: LibraryTabContent = { - viewType: LibraryTab.MusicVideos, +const foldersTabContent: LibraryTabContent = { + viewType: LibraryTab.Folders, collectionType: CollectionType.Musicvideos, isBtnPlayAllEnabled: true, isBtnShuffleEnabled: true, - itemType: [BaseItemKind.MusicVideo] + itemType: [BaseItemKind.Folder, BaseItemKind.MusicVideo] }; const suggestionsTabContent: LibraryTabContent = { @@ -22,18 +22,18 @@ const suggestionsTabContent: LibraryTabContent = { sectionsView: MusicVideoSuggestionsSectionsView }; -const foldersTabContent: LibraryTabContent = { - viewType: LibraryTab.Folders, +const musicVideosTabContent: LibraryTabContent = { + viewType: LibraryTab.MusicVideos, collectionType: CollectionType.Musicvideos, - isBtnPlayAllEnabled: false, - isBtnShuffleEnabled: false, - itemType: [BaseItemKind.Folder, BaseItemKind.MusicVideo] + isBtnPlayAllEnabled: true, + isBtnShuffleEnabled: true, + itemType: [BaseItemKind.MusicVideo] }; const musicVideosTabMapping: LibraryTabMapping = { - 0: musicVideosTabContent, + 0: foldersTabContent, 1: suggestionsTabContent, - 2: foldersTabContent + 2: musicVideosTabContent }; const MusicVideos: FC = () => { @@ -44,7 +44,7 @@ const MusicVideos: FC = () => { Date: Mon, 6 Apr 2026 20:49:51 -0400 Subject: [PATCH 064/695] Add sort options to folder tab --- .../components/library/SortButton.tsx | 39 ++++++++++++++----- .../library/filter/FilterButton.tsx | 3 ++ 2 files changed, 32 insertions(+), 10 deletions(-) diff --git a/src/apps/experimental/components/library/SortButton.tsx b/src/apps/experimental/components/library/SortButton.tsx index ae69267856..3a27f00b18 100644 --- a/src/apps/experimental/components/library/SortButton.tsx +++ b/src/apps/experimental/components/library/SortButton.tsx @@ -24,6 +24,7 @@ type SortOptionsMapping = Record; const collectionMovieOptions: SortOption[] = [ { label: 'Name', value: ItemSortBy.SortName }, + { label: 'OptionRandom', value: ItemSortBy.Random }, { label: 'OptionCommunityRating', value: ItemSortBy.CommunityRating }, { label: 'OptionDateAdded', value: ItemSortBy.DateCreated }, { label: 'OptionParentalRating', value: ItemSortBy.OfficialRating }, @@ -65,14 +66,14 @@ const sortOptionsMapping: SortOptionsMapping = { ], [LibraryTab.Episodes]: [ { label: 'Name', value: ItemSortBy.SeriesSortName }, + { label: 'OptionRandom', value: ItemSortBy.Random }, { label: 'OptionCommunityRating', value: ItemSortBy.CommunityRating }, { label: 'OptionDateAdded', value: ItemSortBy.DateCreated }, { label: 'OptionReleaseDate', value: ItemSortBy.PremiereDate }, { label: 'OptionDatePlayed', value: ItemSortBy.DatePlayed }, { label: 'OptionParentalRating', value: ItemSortBy.OfficialRating }, { label: 'OptionPlayCount', value: ItemSortBy.PlayCount }, - { label: 'Runtime', value: ItemSortBy.Runtime }, - { label: 'OptionRandom', value: ItemSortBy.Random } + { label: 'Runtime', value: ItemSortBy.Runtime } ], [LibraryTab.Albums]: [ { label: 'Name', value: ItemSortBy.SortName }, @@ -85,13 +86,14 @@ const sortOptionsMapping: SortOptionsMapping = { ], [LibraryTab.Books]: [ { label: 'Name', value: ItemSortBy.SortName }, + { label: 'OptionRandom', value: ItemSortBy.Random }, { label: 'OptionReleaseDate', value: ItemSortBy.ProductionYear }, { label: 'OptionDateAdded', value: ItemSortBy.DateCreated }, - { label: 'OptionDatePlayed', value: ItemSortBy.DatePlayed }, - { label: 'OptionRandom', value: ItemSortBy.Random } + { label: 'OptionDatePlayed', value: ItemSortBy.DatePlayed } ], [LibraryTab.Songs]: [ { label: 'Name', value: ItemSortBy.SortName }, + { label: 'OptionRandom', value: ItemSortBy.Random }, { label: 'Album', value: ItemSortBy.Album }, { label: 'AlbumArtist', value: ItemSortBy.AlbumArtist }, { label: 'Artist', value: ItemSortBy.Artist }, @@ -99,8 +101,7 @@ const sortOptionsMapping: SortOptionsMapping = { { label: 'OptionDatePlayed', value: ItemSortBy.DatePlayed }, { label: 'OptionPlayCount', value: ItemSortBy.PlayCount }, { label: 'OptionReleaseDate', value: ItemSortBy.PremiereDate }, - { label: 'Runtime', value: ItemSortBy.Runtime }, - { label: 'OptionRandom', value: ItemSortBy.Random } + { label: 'Runtime', value: ItemSortBy.Runtime } ], [LibraryTab.Playlists]: [ { label: 'Name', value: ItemSortBy.SortName }, @@ -114,19 +115,37 @@ const sortOptionsMapping: SortOptionsMapping = { [LibraryTab.Photos]: photosOrPhotoAlbumsOptions, [LibraryTab.Videos]: [ { label: 'Name', value: ItemSortBy.SortName }, + { label: 'OptionRandom', value: ItemSortBy.Random }, + { label: 'OptionCommunityRating', value: ItemSortBy.CommunityRating }, { label: 'OptionDateAdded', value: ItemSortBy.DateCreated }, { label: 'OptionDatePlayed', value: ItemSortBy.DatePlayed }, + { label: 'OptionParentalRating', value: ItemSortBy.OfficialRating }, { label: 'OptionPlayCount', value: ItemSortBy.PlayCount }, - { label: 'Runtime', value: ItemSortBy.Runtime }, - { label: 'OptionRandom', value: ItemSortBy.Random } + { label: 'OptionReleaseDate', value: ItemSortBy.PremiereDate }, + { label: 'Runtime', value: ItemSortBy.Runtime } ], [LibraryTab.MusicVideos]: [ { label: 'Name', value: ItemSortBy.SortName }, + { label: 'OptionRandom', value: ItemSortBy.Random }, + { label: 'OptionCommunityRating', value: ItemSortBy.CommunityRating }, { label: 'OptionDateAdded', value: ItemSortBy.DateCreated }, { label: 'OptionDatePlayed', value: ItemSortBy.DatePlayed }, + { label: 'OptionParentalRating', value: ItemSortBy.OfficialRating }, { label: 'OptionPlayCount', value: ItemSortBy.PlayCount }, - { label: 'Runtime', value: ItemSortBy.Runtime }, - { label: 'OptionRandom', value: ItemSortBy.Random } + { label: 'OptionReleaseDate', value: ItemSortBy.PremiereDate }, + { label: 'Runtime', value: ItemSortBy.Runtime } + ], + [LibraryTab.Folders]: [ + { label: 'Name', value: ItemSortBy.SortName }, + { label: 'OptionRandom', value: ItemSortBy.Random }, + { label: 'OptionCommunityRating', value: ItemSortBy.CommunityRating }, + { label: 'OptionDateAdded', value: ItemSortBy.DateCreated }, + { label: 'OptionDatePlayed', value: ItemSortBy.DatePlayed }, + { label: 'Folders', value: ItemSortBy.IsFolder }, + { label: 'OptionParentalRating', value: ItemSortBy.OfficialRating }, + { label: 'OptionPlayCount', value: ItemSortBy.PlayCount }, + { label: 'OptionReleaseDate', value: ItemSortBy.PremiereDate }, + { label: 'Runtime', value: ItemSortBy.Runtime } ] }; diff --git a/src/apps/experimental/components/library/filter/FilterButton.tsx b/src/apps/experimental/components/library/filter/FilterButton.tsx index 70e82f6e67..e8319e26c8 100644 --- a/src/apps/experimental/components/library/filter/FilterButton.tsx +++ b/src/apps/experimental/components/library/filter/FilterButton.tsx @@ -136,6 +136,9 @@ const FilterButton: FC = ({ || viewType === LibraryTab.Songs || viewType === LibraryTab.Episodes || viewType === LibraryTab.Books + || viewType === LibraryTab.Folders + || viewType === LibraryTab.MusicVideos + || viewType === LibraryTab.Videos ); }; From 3b219ba73ece65c1450e377693eb69f55bdf76fd Mon Sep 17 00:00:00 2001 From: theguymadmax Date: Mon, 6 Apr 2026 21:06:20 -0400 Subject: [PATCH 065/695] Add defualt landing screen for music videos --- .../homeScreenSettings/homeScreenSettings.js | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/components/homeScreenSettings/homeScreenSettings.js b/src/components/homeScreenSettings/homeScreenSettings.js index bc500f166b..7ca382c56b 100644 --- a/src/components/homeScreenSettings/homeScreenSettings.js +++ b/src/components/homeScreenSettings/homeScreenSettings.js @@ -183,6 +183,22 @@ function getLandingScreenOptions(type) { value: LibraryTab.Videos } ); + } else if (type === 'musicvideos') { + list.push( + { + name: globalize.translate('Folders'), + value: LibraryTab.Folders, + isDefault: true + }, + { + name: globalize.translate('Suggestions'), + value: LibraryTab.Suggestions + }, + { + name: globalize.translate('HeaderVideos'), + value: LibraryTab.MusicVideos + } + ); } return list; @@ -276,7 +292,7 @@ function getPerLibrarySettingsHtml(item, user, userSettings) { html = `
${html}
`; } - const landingScreenTypes = ['movies', 'tvshows', 'music', 'livetv', 'homevideos']; + const landingScreenTypes = ['movies', 'tvshows', 'music', 'livetv', 'homevideos', 'musicvideos']; if (landingScreenTypes.includes(item.CollectionType)) { const idForLanding = item.CollectionType === 'livetv' ? item.CollectionType : item.Id; html += '
'; From e6f1b8f54ebbcf288929dda7af885b166e5d9b30 Mon Sep 17 00:00:00 2001 From: Fjuro Date: Fri, 10 Apr 2026 16:16:59 -0400 Subject: [PATCH 066/695] Translated using Weblate (Czech) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/ --- src/strings/cs.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/cs.json b/src/strings/cs.json index e28e873e19..7684b35b33 100644 --- a/src/strings/cs.json +++ b/src/strings/cs.json @@ -1903,5 +1903,6 @@ "LabelProgressAndSpeed": "Průběh / rychlost", "LabelReasons": "Důvody", "LabelPlayerSizes": "Velikosti přehrávače", - "LabelPlaybackQuality": "Ztracený / poškozený snímek" + "LabelPlaybackQuality": "Ztracený / poškozený snímek", + "OnFilesystem": "V souborovém systému: {0}" } From 7ccab10c780dae53d60849399696f9d16972aa08 Mon Sep 17 00:00:00 2001 From: Kisnov Date: Sat, 11 Apr 2026 07:19:52 -0400 Subject: [PATCH 067/695] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 5df4d2ce5b..ba61bc979a 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -1240,7 +1240,7 @@ "QuickConnect": "Quick Connect (connexió ràpida)", "Profile": "Perfil", "ProductionLocations": "Centres de producció", - "Primary": "Principal", + "Primary": "Primari", "PreviousTrack": "Ves a l'anterior", "Previous": "Anterior", "Preview": "Vista prèvia", @@ -1894,5 +1894,15 @@ "LabelInternalServerUri": "URI intern", "TrickplayLoadError": "No s'han pogut carregar els paràmetres d'imatges de previsualització", "LabelInternalServerUriHelp": "URI publicat per a l'accés intern al servidor.", - "StreamingLoadError": "No s'han pogut carregar els paràmetres de la transmissió directa" + "StreamingLoadError": "No s'han pogut carregar els paràmetres de la transmissió directa", + "OnFilesystem": "Al sistema de fitxers: {0}", + "LabelVideoAttributes": "Atributs de vídeo", + "LabelVideoColors": "Color de vídeo", + "LabelVideoBitDepth": "Profunditat de bits de vídeo", + "LabelAudioAttributes": "Atributs d'àudio", + "LabelTargetCodecs": "Còdecs de sortida", + "LabelProgressAndSpeed": "Progrés / velocitat", + "LabelReasons": "Motius", + "LabelPlayerSizes": "Mides del reproductor", + "LabelPlaybackQuality": "Fotogrames perduts / corruptes" } From b5146214869e5aa14c5763e633b5487c7617e7f2 Mon Sep 17 00:00:00 2001 From: Lofuuzi Date: Sat, 11 Apr 2026 19:35:18 -0400 Subject: [PATCH 068/695] Translated using Weblate (Chinese (Traditional Han script, Hong Kong)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant_HK/ --- src/strings/zh-hk.json | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/strings/zh-hk.json b/src/strings/zh-hk.json index d5a60aa9e6..6f450a3bb2 100644 --- a/src/strings/zh-hk.json +++ b/src/strings/zh-hk.json @@ -104,9 +104,9 @@ "LabelPath": "路徑", "LabelPreferredDisplayLanguage": "首選顯示語言", "LabelPublicHttpPort": "公開 HTTP 埠號碼", - "LabelPublicHttpPortHelp": "要對應返本地 HTTP 連線埠嘅公共連線埠號碼。", + "LabelPublicHttpPortHelp": "要對應返本地 HTTP 連線埠嘅公共連線埠冧把。", "LabelPublicHttpsPort": "公開 HTTPS 埠號碼", - "LabelPublicHttpsPortHelp": "要對應返本地 HTTPS 連線埠嘅公共連線埠號碼。", + "LabelPublicHttpsPortHelp": "要對應返本地 HTTPS 連線埠嘅公共連線埠冧把。", "LabelSaveLocalMetadata": "將媒體圖片同埋資料儲存喺媒體資料夾入面", "LabelSaveLocalMetadataHelp": "將媒體圖片同資料儲存喺媒體資料夾入面,方便遲啲自己編輯。", "LabelSkipIfAudioTrackPresentHelp": "熄咗呢項嘅話,無論音訊係咩語言,系統都會強制下載字幕。", @@ -238,7 +238,7 @@ "Art": "高清藝術圖", "AroundTime": "大約在{0}", "AlwaysPlaySubtitlesHelp": "優先使用符合你語言偏好設定嘅字幕,唔理音訊係咩語言。", - "AllowedRemoteAddressesHelp": "輸入用逗號隔開嘅 IP 地址或 IP/網路遮罩,嚟允許相關網路進行遠程存取。如果漏空唔填,就會允許所有非本地網路連線。", + "AllowedRemoteAddressesHelp": "輸入用逗號隔開嘅 IP 位址或 IP/網路遮罩,嚟允許相關網路進行遠程存取。如果漏空唔填,就會允許所有非本地網路連線。", "AllowRemoteAccessHelp": "如果冇剔呢項,所有遠端連線都會被拒絕。", "AllowRemoteAccess": "允許由遠端連線到呢部伺服器", "AllowFfmpegThrottlingHelp": "當轉碼或者重新封裝嘅進度領先目前播放位置好多嗰陣,暫停個程序嚟減少資源消耗。如果你睇片嗰陣唔係成日拉進度條就最有用。如果有播放問題就熄咗佢。", @@ -325,7 +325,7 @@ "Banner": "橫幅", "Backdrops": "背景", "Backdrop": "背景", - "AlwaysPlaySubtitles": "總是顯示", + "AlwaysPlaySubtitles": "一直顯示", "Display": "顯示", "EditImages": "編輯圖片", "DownloadsValue": "{0} 個下載", @@ -443,7 +443,7 @@ "LatestFromLibrary": "近排加咗入 {0} 嘅內容", "LastSeen": "最後活動:{0}", "Large": "大", - "LanNetworksHelp": "用逗號隔開 IP 地址或者 IP/子網路遮罩清單。喺度寫低嘅網路會被當做區域網路(LAN),喺限制頻寬或者遠端存取嗰陣會用到。如果由得佢,系統會將所有 RFC1918 地址(私人 IP)當做區域網路。", + "LanNetworksHelp": "用逗號隔開 IP 位址或者 IP/子網路遮罩清單。喺度寫低嘅網路會被當做區域網路(LAN),喺限制頻寬或者遠端存取嗰陣會用到。如果由得佢,系統會將所有 RFC1918 位址(私人 IP)當做區域網路。", "LabelZipCode": "郵遞編號", "LabelYear": "年", "LabelWeb": "網站", @@ -474,7 +474,7 @@ "LabelPlaylist": "播放清單", "LabelPlayerDimensions": "播放器尺寸", "LabelPlayer": "播放器", - "LabelPlayDefaultAudioTrack": "無論語言係乜,都播放初始音軌", + "LabelPlayDefaultAudioTrack": "無論語言係乜,都播放初始聲軌", "LabelPlaceOfBirth": "出生地", "LabelPersonRoleHelp": "例如:雪糕車司機", "LabelPersonRole": "角色", @@ -606,8 +606,8 @@ "LabelBitrate": "位元率", "LabelBirthYear": "出生年份", "LabelBirthDate": "出生日期", - "LabelBindToLocalNetworkAddressHelp": "設定 HTTP 伺服器綁定嘅本地 IP 地址。如果由得佢,伺服器就會監聽所有可用地址。更改呢個值需要重新啟動。", - "LabelBindToLocalNetworkAddress": "綁定本地網路監聽地址", + "LabelBindToLocalNetworkAddressHelp": "設定 HTTP 伺服器綁定嘅本地 IP 位址。如果由得佢,伺服器就會監聽所有可用位址。更改呢個值需要重新啟動。", + "LabelBindToLocalNetworkAddress": "綁定本地網路監聽位址", "LabelBaseUrlHelp": "幫伺服器網址加個自訂嘅子路徑。例子:https://example.com/", "LabelBaseUrl": "基本網址", "LabelAutomaticDiscoveryHelp": "允許其他應用程式透過 UDP 7359 埠,自動偵測到你部 Jellyfin 伺服器。", @@ -622,8 +622,8 @@ "LabelAppNameExample": "呢個係畀人睇嘅識別名,用嚟認住啲 API 金鑰。呢個設定唔會影響實際功能。", "LabelAppName": "APP 名稱", "LabelAllowHWTranscoding": "允許硬體轉碼", - "LabelAllowedRemoteAddressesMode": "遠端 IP 地址篩選模式", - "LabelAllowedRemoteAddresses": "遠端 IP 地址篩選", + "LabelAllowedRemoteAddressesMode": "遠端 IP 位址篩選模式", + "LabelAllowedRemoteAddresses": "遠端 IP 位址篩選", "LabelAlbumArtists": "專輯歌手", "LabelAlbum": "專輯", "LabelAirTime": "播出時間", @@ -672,7 +672,7 @@ "HeaderSpecialEpisodeInfo": "特輯資訊", "HeaderSortOrder": "順序", "HeaderSortBy": "排序", - "HeaderServerAddressSettings": "伺服器地址設定", + "HeaderServerAddressSettings": "伺服器位址設定", "HeaderSeriesStatus": "劇集狀態", "HeaderSeriesOptions": "劇集選項", "HeaderSendMessage": "傳送訊息", @@ -760,7 +760,7 @@ "LabelType": "類型", "LabelTVHomeScreen": "電視模式主畫面", "LabelTunerType": "調諧器類型", - "LabelTunerIpAddress": "調諧器 IP 地址", + "LabelTunerIpAddress": "調諧器 IP 位址", "LabelTranscodingThreadCountHelp": "揀轉碼嗰陣最多用幾多條線程。減少線程數量會降低 CPU 使用率,但轉換速度可能會唔夠快,影響播片順暢度。", "LabelTranscodingThreadCount": "轉碼線程數量", "LabelTranscodingProgress": "轉碼進度", @@ -816,7 +816,7 @@ "LabelSlowResponseTime": "過咗幾多毫秒(ms)之後,系統會視為反應緩慢", "LabelSlowResponseEnabled": "如果伺服器回應得太慢,就記錄低⚠️警告訊息", "LabelSkipIfGraphicalSubsPresent": "如果影片入面已經有內嵌字幕,就跳過唔下載", - "LabelSkipIfAudioTrackPresent": "如果初始嘅音訊語言同你要下載嘅字幕語言一樣,就跳過唔下載", + "LabelSkipIfAudioTrackPresent": "如果初始嘅聲軌語言同你要下載嘅字幕語言一樣,就跳過", "LabelSkipForwardLength": "快進長度", "LabelSkipBackLength": "倒退長度", "LabelSize": "大小", @@ -830,7 +830,7 @@ "LabelSelectFolderGroups": "自動將下面呢啲資料夾嘅內容分組,例如「電影」、「音樂」同「電視節目」噉", "LabelSeasonNumber": "季", "LabelScreensaver": "螢幕保護程式", - "LabelScheduledTaskLastRan": "上次執行:{0}(耗時{1})。", + "LabelScheduledTaskLastRan": "上次執行:{0}(耗時 {1})。", "LabelRuntimeMinutes": "播放時間", "LabelRequireHttpsHelp": "開啟後伺服器會自動將所有 HTTP 請求導向至 HTTPS。如果伺服器本身冇啟用 HTTPS 就唔會有影響。", "LabelRequireHttps": "強制 HTTPS", @@ -847,8 +847,8 @@ "LabelRecord": "錄影", "LabelReasonForTranscoding": "轉碼原因", "LabelQuickConnectCode": "「快速連線」冧把", - "LabelPublishedServerUriHelp": "根據介面或者客戶端 IP 地址,覆蓋 Jellyfin 所用嘅 URI。", - "LabelPublishedServerUri": "公開伺服器地址", + "LabelPublishedServerUriHelp": "根據介面或者客戶端 IP 位址,覆蓋 Jellyfin 所用嘅 URI。", + "LabelPublishedServerUri": "公開伺服器位址", "HeaderConfirmRevokeApiKey": "撤銷 API 金鑰", "HeaderConfirmPluginInstallation": "確認安裝外掛程式", "HeaderConfigureRemoteAccess": "設定遠端存取", From b0c7e6230b0403205eb6c9c4f57859cd6baf71ae Mon Sep 17 00:00:00 2001 From: Translation expert Date: Sun, 12 Apr 2026 16:21:11 -0400 Subject: [PATCH 069/695] Translated using Weblate (Arabic) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ar/ --- src/strings/ar.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/ar.json b/src/strings/ar.json index bf59968318..897597e06d 100644 --- a/src/strings/ar.json +++ b/src/strings/ar.json @@ -1894,5 +1894,7 @@ "Watch": "مشاهد", "TrickplayLoadError": "فشل تحميل إعدادات trickplay", "LabelExternalServerUri": "URI خارجي", - "LabelExternalServerUriHelp": "نشر URI الخادم للولوج الخارجي." + "LabelExternalServerUriHelp": "نشر URI الخادم للولوج الخارجي.", + "LabelVideoColors": "ألوان الفيديو", + "LabelVideoBitDepth": "دقة عمق الفيديو" } From 4342f7cc570c6f7e0e8ebc587914a4084424057a Mon Sep 17 00:00:00 2001 From: Translation expert Date: Sun, 12 Apr 2026 16:23:45 -0400 Subject: [PATCH 070/695] Translated using Weblate (Arabic) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ar/ --- src/strings/ar.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/strings/ar.json b/src/strings/ar.json index 897597e06d..54dfeec16d 100644 --- a/src/strings/ar.json +++ b/src/strings/ar.json @@ -1896,5 +1896,10 @@ "LabelExternalServerUri": "URI خارجي", "LabelExternalServerUriHelp": "نشر URI الخادم للولوج الخارجي.", "LabelVideoColors": "ألوان الفيديو", - "LabelVideoBitDepth": "دقة عمق الفيديو" + "LabelVideoBitDepth": "دقة عمق الفيديو", + "LabelPlaybackQuality": "اطار مفقود / خرب", + "LabelPlayerSizes": "أحجام المشغل", + "LabelReasons": "أسباب", + "LabelProgressAndSpeed": "التقدم / السرعة", + "LabelTargetCodecs": "المرمزات المستهدفة" } From 9f52f3de8385b25fc622b0e218fc02bb07a34191 Mon Sep 17 00:00:00 2001 From: Translation expert Date: Sun, 12 Apr 2026 16:41:10 -0400 Subject: [PATCH 071/695] Translated using Weblate (Arabic) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ar/ --- src/strings/ar.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/ar.json b/src/strings/ar.json index 54dfeec16d..0bf0b8886a 100644 --- a/src/strings/ar.json +++ b/src/strings/ar.json @@ -1901,5 +1901,7 @@ "LabelPlayerSizes": "أحجام المشغل", "LabelReasons": "أسباب", "LabelProgressAndSpeed": "التقدم / السرعة", - "LabelTargetCodecs": "المرمزات المستهدفة" + "LabelTargetCodecs": "المرمزات المستهدفة", + "LabelVideoAttributes": "صفات الفيديو", + "LabelAudioAttributes": "صفات الصوت" } From 6101b0babda413a537ee48b03541ac7bf25282d2 Mon Sep 17 00:00:00 2001 From: Translation expert Date: Sun, 12 Apr 2026 17:14:15 -0400 Subject: [PATCH 072/695] Translated using Weblate (Arabic) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ar/ --- src/strings/ar.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/strings/ar.json b/src/strings/ar.json index 0bf0b8886a..d26315d496 100644 --- a/src/strings/ar.json +++ b/src/strings/ar.json @@ -971,7 +971,7 @@ "OptionDvd": "DVD", "OptionBluray": "Blu-ray", "OptionAllowSyncTranscoding": "السماح بتنزيل الوسائط ومزامنتها التي تتطلب تحويل الشفرة", - "OptionAllowMediaPlaybackTranscodingHelp": "قد يؤدي تقييد الوصول إلى تحويل الشفرة إلى حدوث فشل في التشغيل في العملاء بسبب تنسيقات الوسائط غير المدعومة.", + "OptionAllowMediaPlaybackTranscodingHelp": "قد يؤدي تقييد الوصول إلى تحويل الشفرة إلى حدوث فشل في التشغيل مع العملاء بسبب تنسيقات الوسائط غير المدعومة.", "OptionAllowContentDownloadHelp": "يمكن للمستخدمين تنزيل الوسائط وتخزينها على أجهزتهم. هذه ليست نفس ميزة المزامنة. تتطلب مكتبات الكتب تمكين هذا لتعمل بشكل صحيح.", "OptionAllowContentDownload": "السماح بتنزيل الوسائط", "OnWakeFromSleep": "عند الاستيقاظ", @@ -1903,5 +1903,6 @@ "LabelProgressAndSpeed": "التقدم / السرعة", "LabelTargetCodecs": "المرمزات المستهدفة", "LabelVideoAttributes": "صفات الفيديو", - "LabelAudioAttributes": "صفات الصوت" + "LabelAudioAttributes": "صفات الصوت", + "OnFilesystem": "على نظام الملفات: {0}" } From 50277ac2b640b95feb621d3c0210ab3a898b1d9a Mon Sep 17 00:00:00 2001 From: Vincenzo Reale Date: Mon, 13 Apr 2026 02:12:46 -0400 Subject: [PATCH 073/695] Translated using Weblate (Italian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/it/ --- src/strings/it.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/strings/it.json b/src/strings/it.json index ed240a74a7..8eb5bbe0c4 100644 --- a/src/strings/it.json +++ b/src/strings/it.json @@ -1894,5 +1894,9 @@ "Watch": "Guarda", "TrickplayLoadError": "Impossibile caricare le impostazioni di trickplay", "LabelExternalServerUri": "URI esterno", - "LabelExternalServerUriHelp": "URI del server pubblicato per l'accesso esterno." + "LabelExternalServerUriHelp": "URI del server pubblicato per l'accesso esterno.", + "OnFilesystem": "Su filesystem: {0}", + "LabelVideoAttributes": "Attributi video", + "LabelVideoColors": "Colori del video", + "LabelVideoBitDepth": "Profondità bit del video" } From 6989302b0cc4c5b0cc9fae78100292dddb0aab27 Mon Sep 17 00:00:00 2001 From: Vincenzo Reale Date: Mon, 13 Apr 2026 02:14:24 -0400 Subject: [PATCH 074/695] Translated using Weblate (Italian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/it/ --- src/strings/it.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/strings/it.json b/src/strings/it.json index 8eb5bbe0c4..125538ad96 100644 --- a/src/strings/it.json +++ b/src/strings/it.json @@ -1898,5 +1898,11 @@ "OnFilesystem": "Su filesystem: {0}", "LabelVideoAttributes": "Attributi video", "LabelVideoColors": "Colori del video", - "LabelVideoBitDepth": "Profondità bit del video" + "LabelVideoBitDepth": "Profondità bit del video", + "LabelAudioAttributes": "Attributi audio", + "LabelTargetCodecs": "Codificatori di destinazione", + "LabelProgressAndSpeed": "Avanzamento / velocità", + "LabelReasons": "Motivi", + "LabelPlayerSizes": "Dimensioni del lettore", + "LabelPlaybackQuality": "Fotogramma scartato / danneggiato" } From c1fce480e3e2a65d1772654f1ee4bbe37b3080a1 Mon Sep 17 00:00:00 2001 From: Gallyam Biktashev Date: Mon, 13 Apr 2026 02:56:44 -0400 Subject: [PATCH 075/695] Translated using Weblate (Russian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/ --- src/strings/ru.json | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/strings/ru.json b/src/strings/ru.json index 038eee8b1f..daa80ed1d2 100644 --- a/src/strings/ru.json +++ b/src/strings/ru.json @@ -1894,5 +1894,15 @@ "Watch": "Отслеживать", "TrickplayLoadError": "Не удалось загрузить настройки Trickplay", "LabelExternalServerUri": "Внешний URI", - "LabelExternalServerUriHelp": "Публикуемый URI сервера для внешнего доступа." + "LabelExternalServerUriHelp": "Публикуемый URI сервера для внешнего доступа.", + "OnFilesystem": "На файловой системе: {0}", + "LabelVideoAttributes": "Атрибуты видео", + "LabelVideoColors": "Цвета видео", + "LabelVideoBitDepth": "Глубина цвета видео", + "LabelAudioAttributes": "Атрибуты аудио", + "LabelTargetCodecs": "Целевые кодеки", + "LabelProgressAndSpeed": "Прогресс / скорость", + "LabelReasons": "Причины", + "LabelPlayerSizes": "Размеры плеера", + "LabelPlaybackQuality": "Кадров пропущено / повреждено" } From 0cd96f32cbf917535a1130ed2cb5f59e2c7f44e8 Mon Sep 17 00:00:00 2001 From: yoga sree jagadam Date: Mon, 13 Apr 2026 07:49:34 -0400 Subject: [PATCH 076/695] Translated using Weblate (Telugu) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/te/ --- src/strings/te.json | 48 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 43 insertions(+), 5 deletions(-) diff --git a/src/strings/te.json b/src/strings/te.json index 3ab2303580..7d68b218c2 100644 --- a/src/strings/te.json +++ b/src/strings/te.json @@ -14,7 +14,7 @@ "MessageSyncPlayUserLeft": "{0} సమూహాన్ని విడిచిపెట్టారు.", "MessageSyncPlayUserJoined": "{0} సమూహంలో చేరారు.", "MessageSyncPlayGroupWait": "{0} బఫర్ అవుతోంది…", - "LabelBaseUrlHelp": "సర్వర్ URL కు అనుకూల ఉప డైరెక్టరీని జోడించండి. ఉదాహరణకు: http://example.com/ <baseurl> ", + "LabelBaseUrlHelp": "సర్వర్ URLకి అనుకూల ఉప డైరెక్టరీని జోడించండి. ఉదాహరణకు: https://example.com/", "MessagePlaybackError": "మీ Google Cast రిసీవర్‌లో ఈ ఫైల్‌ను ప్లే చేయడంలో లోపం ఉంది.", "MessageChromecastConnectionError": "మీ Google Cast రిసీవర్ జెల్లీఫిన్ సర్వర్‌ను సంప్రదించలేరు. దయచేసి కనెక్షన్‌ను తనిఖీ చేసి, మళ్లీ ప్రయత్నించండి.", "YoutubeDenied": "ఎంబెడెడ్ ప్లేయర్‌లలో అభ్యర్థించిన వీడియోను ప్లే చేయడానికి అనుమతించబడదు.", @@ -938,8 +938,8 @@ "LabelRecord": "రికార్డ్", "LabelReasonForTranscoding": "ట్రాన్స్‌కోడింగ్‌కు కారణం", "LabelQuickConnectCode": "త్వరిత కనెక్ట్ కోడ్", - "LabelPublishedServerUriHelp": "ఇంటర్‌ఫేస్ లేదా క్లయింట్ ఐపీ చిరునామా ఆధారంగా జెల్లీఫిన్ ఉపయోగించే యుఆర్ఐని ఓవర్‌రైడ్ చేయండి. ఉదాహరణకు: internal=http://jellyfin.example.com, external=https://jellyfin.example.com, లేదా all=https://jellyfin.example.com", - "LabelPublishedServerUri": "ప్రచురించిన సర్వర్ URI లు", + "LabelPublishedServerUriHelp": "ఇంటర్‌ఫేస్ లేదా క్లయింట్ ఐపి చిరునామా ఆధారంగా జెల్లీఫిన్ ఉపయోగించే యూఆర్ఐని భర్తీ చేయండి.", + "LabelPublishedServerUri": "ప్రచురించిన సర్వర్ యూఆర్ఐ", "LabelPublicHttpsPortHelp": "స్థానిక పోర్ట్ నంబర్‌ను స్థానిక హెచ్‌టిటిపిఎస్ పోర్ట్‌కు మ్యాప్ చేయాలి.", "LabelPublicHttpsPort": "పబ్లిక్ HTTPS పోర్ట్ సంఖ్య", "LabelPublicHttpPortHelp": "స్థానిక HTTP పోర్ట్‌కు మ్యాప్ చేయవలసిన పబ్లిక్ పోర్ట్ సంఖ్య.", @@ -1854,7 +1854,7 @@ "MessageRestoreSuccess": "పునరుద్ధరణ విజయవంతంగా పూర్తయింది", "MessageServerMismatch": "మీరు కనెక్ట్ చేస్తున్న సర్వర్, మీరు ఈ చిరునామాలో గతంలో కనెక్ట్ చేసిన సర్వర్ కాదు. ఇది ఆశించినట్లయితే, దయచేసి \"ఏమైనప్పటికీ కనెక్ట్ చేయి\" ఎంచుకోండి. లేకపోతే, మీ కనెక్షన్ లేదా సర్వర్ రాజీపడవచ్చు.", "MessageWaitingForServer": "సర్వర్ కోసం వేచి ఉంది...", - "PluginsLoadError": "ప్లగిన్‌లను లోడ్ చేస్తున్నప్పుడు లోపం సంభవించింది.", + "PluginsLoadError": "ప్లగిన్‌లను లోడ్ చేస్తున్నప్పుడు లోపం సంభవించింది", "RepositoriesPageLoadError": "రిపోజిటరీలను లోడ్ చేయడంలో విఫలమైంది", "StorageType.CDRom": "సిడి-రొం", "StorageType.Fixed": "పరిష్కరించబడింది", @@ -1866,5 +1866,43 @@ "TranscodingLoadError": "ట్రాన్స్‌కోడింగ్ సెట్టింగ్‌లను లోడ్ చేయడంలో విఫలమైంది", "ViewAllPlugins": "అన్ని ప్లగిన్‌లను వీక్షించండి", "ViewSettings": "సెట్టింగ్‌లను వీక్షించండి", - "StorageType.Ram": "ర్యామ్" + "StorageType.Ram": "ర్యామ్", + "ActivitiesLoadError": "కార్యకలాపాలను లోడ్ చేయడంలో విఫలమైంది", + "ApiKeysLoadError": "ఏపిఐ కీలను లోడ్ చేయడంలో విఫలమైంది", + "Authors": "కర్త", + "BrandingLoadError": "బ్రాండింగ్ సెట్టింగ్‌లను లోడ్ చేయడంలో విఫలమైంది", + "ConfirmDeleteCollection": "మీరు ఖచ్చితంగా ఈ సేకరణను తొలగించాలనుకుంటున్నారా?", + "ConfirmDeletePlaylist": "మీరు ఖచ్చితంగా ఈ ప్లేజాబితాను తొలగించాలనుకుంటున్నారా?", + "ContinueReading": "చదవడం కొనసాగించండి", + "DevicesLoadError": "పరికరాలను లోడ్ చేయడంలో విఫలమైంది", + "HeaderDeleteCollection": "సేకరణను తొలగించండి", + "HeaderDeletePlaylist": "ప్లేజాబితాను తొలగించండి", + "HeaderLatestBooks": "ఇటీవల జోడించిన పుస్తకాలు", + "HeaderLatestMusicVideos": "ఇటీవల జోడించిన సంగీత వీడియోలు", + "LabelInternalServerUri": "అంతర్గత యూఆర్ఐ", + "LabelInternalServerUriHelp": "అంతర్గత యాక్సెస్ కోసం సర్వర్ యూఆర్ఐ ప్రచురించబడింది.", + "LabelUseSamePublishedServerUri": "అంతర్గత మరియు బాహ్య యాక్సెస్ కోసం అదే ప్రచురించిన సర్వర్ యూఆర్ఐని ఉపయోగించండి", + "LibrariesLoadError": "లైబ్రరీలను లోడ్ చేయడంలో విఫలమైంది", + "NetworkingPageLoadError": "నెట్‌వర్కింగ్ సెట్టింగ్‌లను లోడ్ చేయడంలో విఫలమైంది", + "NewPlaylist": "కొత్త ప్లేజాబితా", + "OnFilesystem": "ఫైల్ సిస్టమ్‌లో: {0}", + "OptionDatePlaylistUpdated": "తేదీ ప్లేజాబితా నవీకరించబడింది", + "ResetFilters": "ఫిల్టర్‌లను రీసెట్ చేయండి", + "ResumeLoadError": "రెజ్యూమ్ సెట్టింగ్‌లను లోడ్ చేయడంలో విఫలమైంది", + "StreamingLoadError": "స్ట్రీమింగ్ పేజీ సెట్టింగ్‌లను లోడ్ చేయడంలో విఫలమైంది", + "Unwatch": "అన్వాచ్", + "UsersEditPageError": "వినియోగదారుల సవరణ పేజీని లోడ్ చేయడంలో విఫలమైంది", + "Watch": "చూడండి", + "TrickplayLoadError": "ట్రిక్‌ప్లే సెట్టింగ్‌లను లోడ్ చేయడంలో విఫలమైంది", + "LabelExternalServerUri": "బాహ్య యూఆర్ఐ", + "LabelExternalServerUriHelp": "బాహ్య యాక్సెస్ కోసం సర్వర్ యూఆర్ఐ ప్రచురించబడింది.", + "LabelVideoAttributes": "వీడియో లక్షణాలు", + "LabelVideoColors": "వీడియో రంగులు", + "LabelVideoBitDepth": "వీడియో బిట్ డెప్త్", + "LabelAudioAttributes": "ఆడియో గుణాలు", + "LabelTargetCodecs": "లక్ష్య కోడెక్‌లు", + "LabelProgressAndSpeed": "పురోగతి / వేగం", + "LabelReasons": "కారణాలు", + "LabelPlayerSizes": "ప్లేయర్ పరిమాణాలు", + "LabelPlaybackQuality": "ఫ్రేమ్ పడిపోయింది / పాడైంది" } From edaddd51f5a90313fb86117a97126dc2527fae32 Mon Sep 17 00:00:00 2001 From: Fjuro Date: Mon, 13 Apr 2026 10:44:19 -0400 Subject: [PATCH 077/695] Translated using Weblate (Czech) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/ --- src/strings/cs.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/cs.json b/src/strings/cs.json index 7684b35b33..df519d6af1 100644 --- a/src/strings/cs.json +++ b/src/strings/cs.json @@ -79,7 +79,7 @@ "Collections": "Kolekce", "CommunityRating": "Hodnocení komunity", "Composer": "Skladatel", - "ConfigureDateAdded": "Nastavte způsob, jakým jsou určena metadata pro „Datum přidání“ v sekci Nástěnka > Knihovny > Zobrazení", + "ConfigureDateAdded": "Způsob, jakým jsou určena metadata pro „Datum přidání“, můžete změnit v sekci Nástěnka > Knihovny > Zobrazení", "ConfirmDeleteImage": "Odstranit obrázek?", "ConfirmDeleteItem": "Smazáním položky odstraníte soubor jak z knihovny médií tak ze souborového systému. Opravdu chcete pokračovat?", "ConfirmDeleteItems": "Odstraněním těchto položek odstraníte vaše média jak z knihovny médií, tak i ze souborového systému. Opravdu chcete pokračovat?", From 68667ddea82275ce45c1fd7135a2fecebb4c734f Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Mon, 13 Apr 2026 13:15:35 -0400 Subject: [PATCH 078/695] Use node.remove instead of parentNode.removeChild --- src/components/backdrop/backdrop.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/backdrop/backdrop.js b/src/components/backdrop/backdrop.js index 1e3f667039..85b53f5fd3 100644 --- a/src/components/backdrop/backdrop.js +++ b/src/components/backdrop/backdrop.js @@ -249,7 +249,7 @@ function onRotationInterval() { setTimeout(() => { const oldImages = getBackdropContainer().querySelectorAll(`.backdropImage:not([data-url="${currentImage}"])`); oldImages.forEach(img => { - img.parentNode?.removeChild(img); + img.remove(); }); }, 1600); } From 786992a0774b1acb17ab081fc6770f7a3b6bab4c Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Mon, 13 Apr 2026 13:24:01 -0400 Subject: [PATCH 079/695] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index ba61bc979a..9b62959a80 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -1240,7 +1240,7 @@ "QuickConnect": "Quick Connect (connexió ràpida)", "Profile": "Perfil", "ProductionLocations": "Centres de producció", - "Primary": "Primari", + "Primary": "Principal", "PreviousTrack": "Ves a l'anterior", "Previous": "Anterior", "Preview": "Vista prèvia", @@ -1897,7 +1897,7 @@ "StreamingLoadError": "No s'han pogut carregar els paràmetres de la transmissió directa", "OnFilesystem": "Al sistema de fitxers: {0}", "LabelVideoAttributes": "Atributs de vídeo", - "LabelVideoColors": "Color de vídeo", + "LabelVideoColors": "Colors de vídeo", "LabelVideoBitDepth": "Profunditat de bits de vídeo", "LabelAudioAttributes": "Atributs d'àudio", "LabelTargetCodecs": "Còdecs de sortida", From 6b6c071bfe57f3b0a675a62e42cc66aa0422a2c6 Mon Sep 17 00:00:00 2001 From: Keylhan Date: Mon, 13 Apr 2026 15:40:58 -0400 Subject: [PATCH 080/695] Translated using Weblate (French) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/ --- src/strings/fr.json | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/strings/fr.json b/src/strings/fr.json index 16b28f1757..37121fdefd 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -1894,5 +1894,15 @@ "TrickplayLoadError": "‹Échec du chargement des paramètres de Trickplay", "LabelExternalServerUri": "URI externe", "LabelExternalServerUriHelp": "URI du serveur publié pour l'accès externe.", - "HeaderLatestMusicVideos": "Vidéos musicales ajoutées récemment" + "HeaderLatestMusicVideos": "Vidéos musicales ajoutées récemment", + "OnFilesystem": "Sur le système de fichiers : {0}", + "LabelReasons": "Raisons", + "LabelPlaybackQuality": "Images perdues / corrompues", + "LabelVideoAttributes": "Illustration de personnage", + "LabelVideoColors": "Couleurs vidéo", + "LabelVideoBitDepth": "Profondeur de bits vidéo", + "LabelAudioAttributes": "Attributs audio", + "LabelTargetCodecs": "Codecs cibles", + "LabelProgressAndSpeed": "Progression / Vitesse", + "LabelPlayerSizes": "Tailles du lecteur" } From 8a26b5218fa9313595ed478737bc51ec83834ab3 Mon Sep 17 00:00:00 2001 From: Maxiligamer Date: Tue, 14 Apr 2026 05:38:26 -0400 Subject: [PATCH 081/695] Translated using Weblate (Finnish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/ --- src/strings/fi.json | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/strings/fi.json b/src/strings/fi.json index 40b63a81ff..ec9f19eccb 100644 --- a/src/strings/fi.json +++ b/src/strings/fi.json @@ -1872,5 +1872,25 @@ "HeaderDeleteCollection": "Poista kokoelma", "HeaderDeletePlaylist": "Poista soittolista", "NewPlaylist": "Uusi Soittolista", - "OptionDatePlaylistUpdated": "Soittolistan Päivityspäivämäärä" + "OptionDatePlaylistUpdated": "Soittolistan Päivityspäivämäärä", + "ActivitiesLoadError": "Toimintojen lataaminen epäonnistui", + "ApiKeysLoadError": "API-avaimen lataaminen epäonnistui", + "Authors": "Tekijät", + "ContinueReading": "Jatka lukemista", + "DevicesLoadError": "Laitteiden lataaminen epäonnistui", + "HeaderLatestBooks": "Viimeksi lisätyt kirjat", + "HeaderLatestMusicVideos": "Viimeksi lisätyt musiikkivideot", + "LabelInternalServerUri": "Sisäinen URI", + "LabelUseSamePublishedServerUri": "Käytä samaa julkaistua palvelimen URIa sisäiseen ja ulkoiseen pääsyyn", + "LibrariesLoadError": "Kirjastojen lataaminen epäonnistui", + "NetworkingPageLoadError": "Verkkoasetusten lataaminen epäonnistui", + "ResetFilters": "Nollaa suodattimet", + "LabelExternalServerUri": "Ulkoinen URI", + "LabelExternalServerUriHelp": "Julkaistu palvelimen URI ulkoiseen pääsyyn.", + "LabelVideoAttributes": "Videon ominaisuudet", + "LabelVideoColors": "Videon värit", + "LabelVideoBitDepth": "Videon bittisyvyys", + "LabelAudioAttributes": "Äänen ominaisuudet", + "LabelTargetCodecs": "Kohdekoodekit", + "LabelPlaybackQuality": "Kuva pudonnut / korruptoitunut" } From 60fbc737bbe3c50bcda4587c3a205f50d5e14e03 Mon Sep 17 00:00:00 2001 From: Szilki077 Date: Tue, 14 Apr 2026 06:03:10 -0400 Subject: [PATCH 082/695] Translated using Weblate (Hungarian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/ --- src/strings/hu.json | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/strings/hu.json b/src/strings/hu.json index d1dc89c389..74de511300 100644 --- a/src/strings/hu.json +++ b/src/strings/hu.json @@ -1876,5 +1876,27 @@ "Authors": "Szerzők", "ContinueReading": "Olvasás folytatása", "HeaderLatestBooks": "Mostanában hozzáadott könyvek", - "HeaderLatestMusicVideos": "Mostanában hozzáadott zenei videók" + "HeaderLatestMusicVideos": "Mostanában hozzáadott zenei videók", + "BrandingLoadError": "Nem sikerült betölteni a márkabeállításokat", + "DevicesLoadError": "Nem sikerült betölteni az eszközöket", + "LabelInternalServerUri": "Belső URI", + "LabelInternalServerUriHelp": "Közzétett szerver URI belső hozzáféréshez.", + "LabelUseSamePublishedServerUri": "Ugyanazt a közzétett szerver URI-t használja belső és külső hozzáféréshez", + "LibrariesLoadError": "Nem sikerült betölteni a könyvtárakat", + "NetworkingPageLoadError": "Nem sikerült betölteni a hálózati beállításokat", + "NewPlaylist": "Új lejátszási lista", + "OptionDatePlaylistUpdated": "Lejátszási lista frissítésének dátuma", + "ResetFilters": "Szűrők visszaállítása", + "ResumeLoadError": "Nem sikerült betölteni az önéletrajz beállításait", + "StreamingLoadError": "Nem sikerült betölteni a streamelési oldal beállításait", + "UsersEditPageError": "Nem sikerült betölteni a felhasználók szerkesztési oldalát", + "TrickplayLoadError": "Nem sikerült betölteni a trickplay beállításait", + "LabelVideoAttributes": "Videó attribútumai", + "LabelVideoColors": "Videó színei", + "LabelVideoBitDepth": "Videó bitmélysége", + "LabelAudioAttributes": "Hang attribútumok", + "LabelTargetCodecs": "Célkodekek", + "LabelProgressAndSpeed": "Haladás / sebesség", + "LabelReasons": "Okok", + "LabelPlayerSizes": "Lejátszó méretek" } From 3b85332289f10a33d550c39751f615c8b5fe5555 Mon Sep 17 00:00:00 2001 From: William Faray Date: Tue, 14 Apr 2026 09:11:56 -0400 Subject: [PATCH 083/695] Translated using Weblate (Portuguese (Brazil)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_BR/ --- src/strings/pt-br.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/pt-br.json b/src/strings/pt-br.json index 4835fba080..4f8819b576 100644 --- a/src/strings/pt-br.json +++ b/src/strings/pt-br.json @@ -1894,5 +1894,8 @@ "Watch": "Assistir", "TrickplayLoadError": "Falha ao carregar as configurações do trickplay", "LabelExternalServerUri": "URI externa", - "LabelExternalServerUriHelp": "URI do servidor publicada para acesso externo." + "LabelExternalServerUriHelp": "URI do servidor publicada para acesso externo.", + "LabelVideoAttributes": "Atributos de vídeo", + "LabelVideoColors": "Cores do vídeo", + "LabelAudioAttributes": "Atributos do aúdio" } From 9b45af941192eeab5b054f6ef9b5777f6c7c75bd Mon Sep 17 00:00:00 2001 From: Sakari Kukkonen Date: Tue, 14 Apr 2026 19:37:43 -0400 Subject: [PATCH 084/695] Translated using Weblate (Finnish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/ --- src/strings/fi.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/strings/fi.json b/src/strings/fi.json index ec9f19eccb..e95be69e41 100644 --- a/src/strings/fi.json +++ b/src/strings/fi.json @@ -67,7 +67,7 @@ "Anytime": "Milloin tahansa", "AroundTime": "Noin {0}", "Art": "Clearart", - "Artists": "Esittäjät", + "Artists": "Artistit", "AsManyAsPossible": "Niin monta kuin mahdollista", "Ascending": "Nousevassa järjestyksessä", "AspectRatio": "Kuvasuhde", @@ -1892,5 +1892,8 @@ "LabelVideoBitDepth": "Videon bittisyvyys", "LabelAudioAttributes": "Äänen ominaisuudet", "LabelTargetCodecs": "Kohdekoodekit", - "LabelPlaybackQuality": "Kuva pudonnut / korruptoitunut" + "LabelPlaybackQuality": "Kuva pudonnut / korruptoitunut", + "BrandingLoadError": "Brändäyksen osetusten lataaminen epäonnistui", + "OnFilesystem": "Tiedostojärjestelmässä", + "ResumeLoadError": "Toisto asetusten lataaminen epäonnistui" } From f0f4274fc9dca72b041e7565a2f45dcabcd878a3 Mon Sep 17 00:00:00 2001 From: Sakari Kukkonen Date: Tue, 14 Apr 2026 19:39:21 -0400 Subject: [PATCH 085/695] Translated using Weblate (Finnish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/ --- src/strings/fi.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/fi.json b/src/strings/fi.json index e95be69e41..3b915454bb 100644 --- a/src/strings/fi.json +++ b/src/strings/fi.json @@ -1895,5 +1895,7 @@ "LabelPlaybackQuality": "Kuva pudonnut / korruptoitunut", "BrandingLoadError": "Brändäyksen osetusten lataaminen epäonnistui", "OnFilesystem": "Tiedostojärjestelmässä", - "ResumeLoadError": "Toisto asetusten lataaminen epäonnistui" + "ResumeLoadError": "Toisto asetusten lataaminen epäonnistui", + "StreamingLoadError": "Suoratoisto sivun asetusten lataaminen epäonnistui", + "Unwatch": "Katsomaton" } From 6054bf6825561b7706b1f8679cb78ccd41d54368 Mon Sep 17 00:00:00 2001 From: Sakari Kukkonen Date: Tue, 14 Apr 2026 19:40:57 -0400 Subject: [PATCH 086/695] Translated using Weblate (Finnish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/ --- src/strings/fi.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/fi.json b/src/strings/fi.json index 3b915454bb..38ca519420 100644 --- a/src/strings/fi.json +++ b/src/strings/fi.json @@ -1897,5 +1897,6 @@ "OnFilesystem": "Tiedostojärjestelmässä", "ResumeLoadError": "Toisto asetusten lataaminen epäonnistui", "StreamingLoadError": "Suoratoisto sivun asetusten lataaminen epäonnistui", - "Unwatch": "Katsomaton" + "Unwatch": "Katsomaton", + "UsersEditPageError": "Käyttäjän muokkaus sivun lataaminen epäonnistui" } From 21ba6df2578579b42df195d3a7096d0d91092235 Mon Sep 17 00:00:00 2001 From: Sakari Kukkonen Date: Tue, 14 Apr 2026 19:41:12 -0400 Subject: [PATCH 087/695] Translated using Weblate (Finnish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/ --- src/strings/fi.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/fi.json b/src/strings/fi.json index 38ca519420..db6ca504c9 100644 --- a/src/strings/fi.json +++ b/src/strings/fi.json @@ -1898,5 +1898,6 @@ "ResumeLoadError": "Toisto asetusten lataaminen epäonnistui", "StreamingLoadError": "Suoratoisto sivun asetusten lataaminen epäonnistui", "Unwatch": "Katsomaton", - "UsersEditPageError": "Käyttäjän muokkaus sivun lataaminen epäonnistui" + "UsersEditPageError": "Käyttäjän muokkaus sivun lataaminen epäonnistui", + "Watch": "Katso" } From 3c8fa260e9f8428f6aad968b761e3a8012f76786 Mon Sep 17 00:00:00 2001 From: dkanada Date: Wed, 15 Apr 2026 18:19:29 +0900 Subject: [PATCH 088/695] add folders tab to experimental view in book libraries --- .../features/libraries/constants/libraryRoutes.ts | 13 +++++++++---- src/apps/experimental/routes/books/index.tsx | 15 +++++++++++---- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/apps/experimental/features/libraries/constants/libraryRoutes.ts b/src/apps/experimental/features/libraries/constants/libraryRoutes.ts index 7aaeba343d..810c2f1a28 100644 --- a/src/apps/experimental/features/libraries/constants/libraryRoutes.ts +++ b/src/apps/experimental/features/libraries/constants/libraryRoutes.ts @@ -44,22 +44,27 @@ export const LibraryRoutes: LibraryRoute[] = [ views: [ { index: 0, - label: 'Books', - view: LibraryTab.Books, + label: 'Folders', + view: LibraryTab.Folders, isDefault: true }, { index: 1, + label: 'Books', + view: LibraryTab.Books + }, + { + index: 2, label: 'Suggestions', view: LibraryTab.Suggestions }, { - index: 2, + index: 3, label: 'Genres', view: LibraryTab.Genres }, { - index: 3, + index: 4, label: 'Favorites', view: LibraryTab.Favorites } diff --git a/src/apps/experimental/routes/books/index.tsx b/src/apps/experimental/routes/books/index.tsx index 5ba490bf37..ee3e4a1b1b 100644 --- a/src/apps/experimental/routes/books/index.tsx +++ b/src/apps/experimental/routes/books/index.tsx @@ -8,6 +8,12 @@ import { CollectionType } from '@jellyfin/sdk/lib/generated-client/models/collec import { LibraryTabContent, LibraryTabMapping } from 'types/libraryTabContent'; import { BookSuggestionsSectionsView } from 'types/sections'; +const foldersTabContent: LibraryTabContent = { + viewType: LibraryTab.Folders, + collectionType: CollectionType.Books, + itemType: [BaseItemKind.Folder, BaseItemKind.AudioBook, BaseItemKind.Book] +}; + const booksTabContent: LibraryTabContent = { viewType: LibraryTab.Books, collectionType: CollectionType.Books, @@ -33,10 +39,11 @@ const favoritesTabContent: LibraryTabContent = { }; const booksTabMapping: LibraryTabMapping = { - 0: booksTabContent, - 1: suggestionsTabContent, - 2: genresTabContent, - 3: favoritesTabContent + 0: foldersTabContent, + 1: booksTabContent, + 2: suggestionsTabContent, + 3: genresTabContent, + 4: favoritesTabContent }; const Books: FC = () => { From fdfe1b12ea2578b6de7cf7ee9fbbeca6cb61cdab Mon Sep 17 00:00:00 2001 From: Sakari Kukkonen Date: Wed, 15 Apr 2026 07:13:18 -0400 Subject: [PATCH 089/695] Translated using Weblate (Finnish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/ --- src/strings/fi.json | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/strings/fi.json b/src/strings/fi.json index db6ca504c9..520199802e 100644 --- a/src/strings/fi.json +++ b/src/strings/fi.json @@ -1068,7 +1068,7 @@ "LabelColorTransfer": "Värisiirto", "LabelColorSpace": "Väriavaruus", "LabelColorPrimaries": "Päävärit", - "LabelBaseUrlHelp": "Lisää mukautettu alihakemisto palvelimen URL-osoitteeseen. Esimerkki:http://osoite.com/<baseurl>", + "LabelBaseUrlHelp": "Lisää mukautettu alihakemisto palvelimen URL-osoitteeseen. Esimerkiksi: https://esimerkki.com/", "LabelAutomaticDiscoveryHelp": "Sallii sovellusten löytää Jellyfinin automaattisesti UDP-portilla 7359.", "HeaderUploadSubtitle": "Lähetä tekstitys", "HeaderPortRanges": "Palomuurin ja välityspalvelimen asetukset", @@ -1156,8 +1156,8 @@ "LabelRepositoryNameHelp": "Oma nimi, jolla tietovarasto erottuu palvelimen muista tietovarastoista.", "LabelRepositoryName": "Tietovaraston nimi", "LabelQuickConnectCode": "Pikayhdistyskoodi", - "LabelPublishedServerUriHelp": "Ohita Jellyfinin käyttämä URI perustuen käyttöliittymän tai asiakasohjelman IP-osoitteeseen", - "LabelPublishedServerUri": "Julkaistut palvelimen URIt", + "LabelPublishedServerUriHelp": "Ohita Jellyfinin käyttämä URI perustuen käyttöliittymän tai asiakaan IP-osoitteeseen.", + "LabelPublishedServerUri": "Julkaistut palvelimen URI:t", "LabelPostProcessorArgumentsHelp": "Käytä sijaintia {path} tallenteen tiedostosijaintina.", "LabelOpenclDeviceHelp": "Tämä on sävykartoitukseen käytettävä OpenCL-laite. Pisteen vasemmalla puolella on alustanumero ja oikealla alustan laitenumero. Oletusarvo on 0.0. Vaatii OpenCL-laitteistokiihdytyksen sisältävän FFmpeg-ohjelmatiedoston.", "LabelOpenclDevice": "OpenCL-laite", @@ -1893,11 +1893,12 @@ "LabelAudioAttributes": "Äänen ominaisuudet", "LabelTargetCodecs": "Kohdekoodekit", "LabelPlaybackQuality": "Kuva pudonnut / korruptoitunut", - "BrandingLoadError": "Brändäyksen osetusten lataaminen epäonnistui", - "OnFilesystem": "Tiedostojärjestelmässä", + "BrandingLoadError": "Brändäyksen asetusten lataaminen epäonnistui", + "OnFilesystem": "Tiedostojärjestelmässä: {0}", "ResumeLoadError": "Toisto asetusten lataaminen epäonnistui", "StreamingLoadError": "Suoratoisto sivun asetusten lataaminen epäonnistui", "Unwatch": "Katsomaton", "UsersEditPageError": "Käyttäjän muokkaus sivun lataaminen epäonnistui", - "Watch": "Katso" + "Watch": "Katso", + "LabelInternalServerUriHelp": "Julkaistu palvelinen URI sisäiselle käytölle." } From 9a3dd0ee222b28ed3ba0a97d5da98e15b87576fc Mon Sep 17 00:00:00 2001 From: Violet Caulfield <42452695+anultravioletaurora@users.noreply.github.com> Date: Wed, 15 Apr 2026 07:08:45 -0500 Subject: [PATCH 090/695] Migration to TS SDK for WS management --- .../sessions/hooks/useLiveSessions.ts | 33 +++--------- .../features/tasks/hooks/useLiveTasks.ts | 36 +++---------- .../RefreshIndicator.tsx | 31 ++++------- .../emby-itemscontainer/ItemsContainer.tsx | 51 +++++++++++-------- src/scripts/taskbutton.js | 51 +++++++------------ 5 files changed, 72 insertions(+), 130 deletions(-) diff --git a/src/apps/dashboard/features/sessions/hooks/useLiveSessions.ts b/src/apps/dashboard/features/sessions/hooks/useLiveSessions.ts index f77743ee75..0903edcbc0 100644 --- a/src/apps/dashboard/features/sessions/hooks/useLiveSessions.ts +++ b/src/apps/dashboard/features/sessions/hooks/useLiveSessions.ts @@ -1,22 +1,17 @@ import type { SessionInfoDto } from '@jellyfin/sdk/lib/generated-client/models/session-info-dto'; -import { SessionMessageType } from '@jellyfin/sdk/lib/generated-client/models/session-message-type'; import { useApi } from 'hooks/useApi'; -import { ApiClient } from 'jellyfin-apiclient'; import { useCallback, useEffect } from 'react'; -import serverNotifications from 'scripts/serverNotifications'; -import Events, { Event } from 'utils/events'; import { QUERY_KEY, useSessions } from '../api/useSessions'; import { queryClient } from 'utils/query/queryClient'; import filterSessions from '../utils/filterSessions'; +import { OutboundWebSocketMessageType } from '@jellyfin/sdk/lib/websocket'; const QUERY_PARAMS = { activeWithinSeconds: 960 }; -const FALLBACK_POLL_INTERVAL_MS = 2000; - const useLiveSessions = () => { - const { __legacyApiClient__ } = useApi(); + const { api } = useApi(); const sessionsQuery = useSessions(QUERY_PARAMS); @@ -41,26 +36,10 @@ const useLiveSessions = () => { }, []); useEffect(() => { - const onSessionsUpdate = (evt: Event, apiClient: ApiClient, info: SessionInfoDto[]) => { - queryClient.setQueryData([ QUERY_KEY, QUERY_PARAMS ], updateSessions(info)); - }; - - const fallbackInterval = setInterval(() => { - if (!__legacyApiClient__?.isMessageChannelOpen()) { - void queryClient.invalidateQueries({ - queryKey: [ QUERY_KEY ] - }); - } - }, FALLBACK_POLL_INTERVAL_MS); - - __legacyApiClient__?.sendMessage(SessionMessageType.SessionsStart, '0,1500'); - Events.on(serverNotifications, SessionMessageType.Sessions, onSessionsUpdate); - - return () => { - clearInterval(fallbackInterval); - __legacyApiClient__?.sendMessage(SessionMessageType.SessionsStop, null); - Events.off(serverNotifications, SessionMessageType.Sessions, onSessionsUpdate); - }; + // Return function for unsubscribing + return api?.subscribe([OutboundWebSocketMessageType.Sessions], ({ Data }) => { + queryClient.setQueryData([ QUERY_KEY, QUERY_PARAMS ], updateSessions(Data ?? [])) + }) }, []); return sessionsQuery; diff --git a/src/apps/dashboard/features/tasks/hooks/useLiveTasks.ts b/src/apps/dashboard/features/tasks/hooks/useLiveTasks.ts index 6cd875952b..54d61484be 100644 --- a/src/apps/dashboard/features/tasks/hooks/useLiveTasks.ts +++ b/src/apps/dashboard/features/tasks/hooks/useLiveTasks.ts @@ -3,41 +3,17 @@ import { useApi } from 'hooks/useApi'; import { QUERY_KEY, useTasks } from '../api/useTasks'; import type { ScheduledTasksApiGetTasksRequest } from '@jellyfin/sdk/lib/generated-client/api/scheduled-tasks-api'; import { queryClient } from 'utils/query/queryClient'; -import { ApiClient } from 'jellyfin-apiclient'; -import type { TaskInfo } from '@jellyfin/sdk/lib/generated-client/models/task-info'; -import Events, { Event } from 'utils/events'; -import serverNotifications from 'scripts/serverNotifications'; -import { SessionMessageType } from '@jellyfin/sdk/lib/generated-client/models/session-message-type'; - -const FALLBACK_POLL_INTERVAL_MS = 10000; +import { OutboundWebSocketMessageType } from '@jellyfin/sdk/lib/websocket'; const useLiveTasks = (params: ScheduledTasksApiGetTasksRequest) => { - const { __legacyApiClient__ } = useApi(); + const { api } = useApi(); const tasksQuery = useTasks(params); - // TODO: Replace usage of the legacy apiclient when websocket support is added to the TS SDK. useEffect(() => { - const onScheduledTasksUpdate = (_e: Event, _apiClient: ApiClient, info: TaskInfo[]) => { - queryClient.setQueryData([ QUERY_KEY ], info); - }; - - const fallbackInterval = setInterval(() => { - if (!__legacyApiClient__?.isMessageChannelOpen()) { - void queryClient.invalidateQueries({ - queryKey: [ QUERY_KEY ] - }); - } - }, FALLBACK_POLL_INTERVAL_MS); - - __legacyApiClient__?.sendMessage(SessionMessageType.ScheduledTasksInfoStart, '1000,1000'); - Events.on(serverNotifications, SessionMessageType.ScheduledTasksInfo, onScheduledTasksUpdate); - - return () => { - clearInterval(fallbackInterval); - __legacyApiClient__?.sendMessage(SessionMessageType.ScheduledTasksInfoStop, null); - Events.off(serverNotifications, SessionMessageType.ScheduledTasksInfo, onScheduledTasksUpdate); - }; - }, [ __legacyApiClient__ ]); + return api?.subscribe([OutboundWebSocketMessageType.ScheduledTasksInfo], ({ Data }) => { + queryClient.setQueryData([ QUERY_KEY ], Data ?? []) + }); + }, []); return tasksQuery; }; diff --git a/src/elements/emby-itemrefreshindicator/RefreshIndicator.tsx b/src/elements/emby-itemrefreshindicator/RefreshIndicator.tsx index edd834a9e0..19c824d109 100644 --- a/src/elements/emby-itemrefreshindicator/RefreshIndicator.tsx +++ b/src/elements/emby-itemrefreshindicator/RefreshIndicator.tsx @@ -12,6 +12,9 @@ import Box from '@mui/material/Box'; import { toPercentString } from 'utils/number'; import { getCurrentDateTimeLocale } from 'lib/globalize'; import type { ItemDto } from 'types/base/models/item-dto'; +import { useApi } from 'hooks/useApi'; +import { OutboundWebSocketMessageType } from '@jellyfin/sdk/lib/websocket'; +import { RefreshProgressMessage } from '@jellyfin/sdk/lib/generated-client'; function CircularProgressWithLabel( props: CircularProgressProps & { value: number } @@ -52,9 +55,11 @@ const RefreshIndicator: FC = ({ item, className }) => { const [showProgressBar, setShowProgressBar] = useState(!!item.RefreshProgress); const [progress, setProgress] = useState(item.RefreshProgress || 0); - const onRefreshProgress = useCallback((_e: Event, _apiClient: ApiClient, info: { ItemId: string | null | undefined; Progress: string; }) => { - if (info.ItemId === item?.Id) { - const pct = parseFloat(info.Progress); + const { api } = useApi() + + const onRefreshProgress = useCallback(({ Data }: RefreshProgressMessage) => { + if (Data?.ItemId === item?.Id) { + const pct = Data?.Progress ? parseFloat(Data?.Progress) : 0; if (pct && pct < 100) { setShowProgressBar(true); @@ -66,25 +71,9 @@ const RefreshIndicator: FC = ({ item, className }) => { } }, [item?.Id]); - const unbindEvents = useCallback(() => { - Events.off(serverNotifications, 'RefreshProgress', onRefreshProgress); - }, [onRefreshProgress]); - - const bindEvents = useCallback(() => { - unbindEvents(); - - if (item?.Id) { - Events.on(serverNotifications, 'RefreshProgress', onRefreshProgress); - } - }, [item?.Id, onRefreshProgress, unbindEvents]); - useEffect(() => { - bindEvents(); - - return () => { - unbindEvents(); - }; - }, [bindEvents, item.Id, unbindEvents]); + return api?.subscribe([OutboundWebSocketMessageType.RefreshProgress], onRefreshProgress); + }, [item.Id]); const progressringClass = classNames('progressring', className); diff --git a/src/elements/emby-itemscontainer/ItemsContainer.tsx b/src/elements/emby-itemscontainer/ItemsContainer.tsx index ab69efc9f8..5489e295dd 100644 --- a/src/elements/emby-itemscontainer/ItemsContainer.tsx +++ b/src/elements/emby-itemscontainer/ItemsContainer.tsx @@ -1,15 +1,15 @@ import type { LibraryUpdateInfo } from '@jellyfin/sdk/lib/generated-client/models/library-update-info'; import { MediaType } from '@jellyfin/sdk/lib/generated-client/models/media-type'; -import { ApiClient } from 'jellyfin-apiclient'; +import { OutboundWebSocketMessageType, SocketMessageHandler } from '@jellyfin/sdk/lib/websocket'; import React, { type FC, type PropsWithChildren, useCallback, useEffect, useRef } from 'react'; import classNames from 'classnames'; import Box from '@mui/material/Box'; import Sortable from 'sortablejs'; import { useQueryClient } from '@tanstack/react-query'; +import { useApi } from 'hooks/useApi'; import { usePlaylistsMoveItemMutation } from 'hooks/useFetchItems'; import Events, { type Event } from 'utils/events'; -import serverNotifications from 'scripts/serverNotifications'; import inputManager from 'scripts/inputManager'; import dom from 'utils/dom'; import browser from 'scripts/browser'; @@ -60,11 +60,13 @@ const ItemsContainer: FC> = ({ children }) => { const queryClient = useQueryClient(); + const { api } = useApi(); const { mutateAsync: playlistsMoveItemMutation } = usePlaylistsMoveItemMutation(); const itemsContainerRef = useRef(null); const multiSelectref = useRef(null); const sortableref = useRef(null); const timerRef = useRef | null>(null); + const unsubscribeRef = useRef void>>([]); const onClick = useCallback((e: MouseEvent) => { const itemsContainer = itemsContainerRef.current as HTMLDivElement; @@ -222,22 +224,22 @@ const ItemsContainer: FC> = ({ ); const onLibraryChanged = useCallback( - (_e: Event, _apiClient: ApiClient, data: LibraryUpdateInfo) => { + ({ Data }: { Data?: LibraryUpdateInfo }) => { if (eventsToMonitor.includes('seriestimers') || eventsToMonitor.includes('timers')) { // yes this is an assumption return; } - const itemsAdded = data.ItemsAdded ?? []; - const itemsRemoved = data.ItemsRemoved ?? []; + const itemsAdded = Data?.ItemsAdded ?? []; + const itemsRemoved = Data?.ItemsRemoved ?? []; if (!itemsAdded.length && !itemsRemoved.length) { return; } if (parentId) { - const foldersAddedTo = data.FoldersAddedTo ?? []; - const foldersRemovedFrom = data.FoldersRemovedFrom ?? []; - const collectionFolders = data.CollectionFolders ?? []; + const foldersAddedTo = Data?.FoldersAddedTo ?? []; + const foldersRemovedFrom = Data?.FoldersRemovedFrom ?? []; + const collectionFolders = Data?.CollectionFolders ?? []; if ( foldersAddedTo.indexOf(parentId) === -1 @@ -356,12 +358,22 @@ const ItemsContainer: FC> = ({ itemShortcuts.on(itemsContainer, getShortcutOptions()); - Events.on(serverNotifications, 'UserDataChanged', onUserDataChanged); - Events.on(serverNotifications, 'TimerCreated', onTimerCreated); - Events.on(serverNotifications, 'TimerCancelled', onTimerCancelled); - Events.on(serverNotifications, 'SeriesTimerCreated', onSeriesTimerCreated); - Events.on(serverNotifications, 'SeriesTimerCancelled', onSeriesTimerCancelled); - Events.on(serverNotifications, 'LibraryChanged', onLibraryChanged); + // Subscribe to websocket messages + if (api) { + const unsub1 = api.subscribe([OutboundWebSocketMessageType.UserDataChanged], onUserDataChanged); + const unsub2 = api.subscribe([OutboundWebSocketMessageType.TimerCreated], onTimerCreated); + const unsub3 = api.subscribe([OutboundWebSocketMessageType.TimerCancelled], onTimerCancelled); + const unsub4 = api.subscribe([OutboundWebSocketMessageType.SeriesTimerCreated], onSeriesTimerCreated); + const unsub5 = api.subscribe([OutboundWebSocketMessageType.SeriesTimerCancelled], onSeriesTimerCancelled); + const unsub6 = api.subscribe([OutboundWebSocketMessageType.LibraryChanged], onLibraryChanged); + if (unsub1) unsubscribeRef.current.push(unsub1); + if (unsub2) unsubscribeRef.current.push(unsub2); + if (unsub3) unsubscribeRef.current.push(unsub3); + if (unsub4) unsubscribeRef.current.push(unsub4); + if (unsub5) unsubscribeRef.current.push(unsub5); + if (unsub6) unsubscribeRef.current.push(unsub6); + } + Events.on(playbackManager, 'playbackstop', onPlaybackStopped); return () => { @@ -377,15 +389,14 @@ const ItemsContainer: FC> = ({ itemShortcuts.off(itemsContainer, getShortcutOptions()); - Events.off(serverNotifications, 'UserDataChanged', onUserDataChanged); - Events.off(serverNotifications, 'TimerCreated', onTimerCreated); - Events.off(serverNotifications, 'TimerCancelled', onTimerCancelled); - Events.off( serverNotifications, 'SeriesTimerCreated', onSeriesTimerCreated); - Events.off(serverNotifications, 'SeriesTimerCancelled', onSeriesTimerCancelled); - Events.off(serverNotifications, 'LibraryChanged', onLibraryChanged); + // Unsubscribe from websocket messages + unsubscribeRef.current.forEach(unsub => unsub()); + unsubscribeRef.current = []; + Events.off(playbackManager, 'playbackstop', onPlaybackStopped); }; }, [ + api, destroyDragReordering, destroyMultiSelect, initDragReordering, diff --git a/src/scripts/taskbutton.js b/src/scripts/taskbutton.js index 8a4979b602..cbf845b708 100644 --- a/src/scripts/taskbutton.js +++ b/src/scripts/taskbutton.js @@ -1,18 +1,11 @@ import globalize from 'lib/globalize'; import { ServerConnections } from 'lib/jellyfin-apiclient'; -import serverNotifications from 'scripts/serverNotifications'; -import Events from 'utils/events.ts'; +import { OutboundWebSocketMessageType } from '@jellyfin/sdk/lib/websocket'; import 'elements/emby-button/emby-button'; function taskbutton(options) { - function pollTasks() { - ServerConnections.getApiClient(serverId).getScheduledTasks({ - IsEnabled: true - }).then(updateTasks); - } - function updateTasks(tasks) { const task = tasks.filter(function (t) { return t.Key == options.taskKey; @@ -72,37 +65,33 @@ function taskbutton(options) { onScheduledTaskMessageConfirmed(this.getAttribute('data-taskid')); } - function onScheduledTasksUpdate(e, apiClient, info) { + function onScheduledTasksUpdate({ Data }) { + const apiClient = ServerConnections.getApiClient(serverId); if (apiClient.serverId() === serverId) { - updateTasks(info); + updateTasks(Data ?? []); } } - let pollInterval; + let unsubscribe; const button = options.button; const serverId = ApiClient.serverId(); - function onPollIntervalFired() { - if (!ServerConnections.getApiClient(serverId).isMessageChannelOpen()) { - pollTasks(); - } - } - - function startInterval() { + function subscribe() { const apiClient = ServerConnections.getApiClient(serverId); - - if (pollInterval) { - clearInterval(pollInterval); - } - apiClient.sendMessage('ScheduledTasksInfoStart', '1000,1000'); - pollInterval = setInterval(onPollIntervalFired, 5000); + return apiClient.subscribe([OutboundWebSocketMessageType.ScheduledTasksInfo], onScheduledTasksUpdate); } - function stopInterval() { - ServerConnections.getApiClient(serverId).sendMessage('ScheduledTasksInfoStop'); + function startSubscription() { + if (unsubscribe) { + unsubscribe(); + } + unsubscribe = subscribe(); + } - if (pollInterval) { - clearInterval(pollInterval); + function stopSubscription() { + if (unsubscribe) { + unsubscribe(); + unsubscribe = null; } } @@ -112,13 +101,11 @@ function taskbutton(options) { if (options.mode == 'off') { button.removeEventListener('click', onButtonClick); - Events.off(serverNotifications, 'ScheduledTasksInfo', onScheduledTasksUpdate); - stopInterval(); + stopSubscription(); } else { button.addEventListener('click', onButtonClick); pollTasks(); - startInterval(); - Events.on(serverNotifications, 'ScheduledTasksInfo', onScheduledTasksUpdate); + startSubscription(); } } From 8245f8fe56552075e6675f07b374e1c5e26d267c Mon Sep 17 00:00:00 2001 From: Sakari Kukkonen Date: Wed, 15 Apr 2026 07:18:33 -0400 Subject: [PATCH 091/695] Translated using Weblate (Finnish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/ --- src/strings/fi.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/strings/fi.json b/src/strings/fi.json index 520199802e..117102af4a 100644 --- a/src/strings/fi.json +++ b/src/strings/fi.json @@ -1897,8 +1897,12 @@ "OnFilesystem": "Tiedostojärjestelmässä: {0}", "ResumeLoadError": "Toisto asetusten lataaminen epäonnistui", "StreamingLoadError": "Suoratoisto sivun asetusten lataaminen epäonnistui", - "Unwatch": "Katsomaton", + "Unwatch": "Poista katsominen", "UsersEditPageError": "Käyttäjän muokkaus sivun lataaminen epäonnistui", "Watch": "Katso", - "LabelInternalServerUriHelp": "Julkaistu palvelinen URI sisäiselle käytölle." + "LabelInternalServerUriHelp": "Julkaistu palvelinen URI sisäiselle käytölle.", + "TrickplayLoadError": "Trickplayn asetusten lataaminen epäonnistui", + "LabelProgressAndSpeed": "Prosessi / nopeus", + "LabelReasons": "Syyt", + "LabelPlayerSizes": "Soittime koot" } From d9ec2707de94e0ca13e9b798196d5572f9a1664d Mon Sep 17 00:00:00 2001 From: Milo Ivir Date: Wed, 15 Apr 2026 09:10:17 -0400 Subject: [PATCH 092/695] Translated using Weblate (Croatian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hr/ --- src/strings/hr.json | 478 ++++++++++++++++++++++++++++++++------------ 1 file changed, 349 insertions(+), 129 deletions(-) diff --git a/src/strings/hr.json b/src/strings/hr.json index 8fafec3813..462878bce2 100644 --- a/src/strings/hr.json +++ b/src/strings/hr.json @@ -58,7 +58,7 @@ "ChannelAccessHelp": "Odaberite kanale za dijeljenje sa ovim korisnikom. Administratori će moći uređivati sve kanale koristeći uređivač metapodataka.", "ChannelNameOnly": "Kanal {0} samo", "ChannelNumber": "Broj kanala", - "CinemaModeConfigurationHelp": "Ugođaj kina donosi iskustvo kina izravno u vaš dnevni boravak s mogućnošću da se pokreću najave filmova i određeni isječci prije odabranog filma.", + "CinemaModeConfigurationHelp": "Ugođaj kina donosi iskustvo kina izravno u vaš dnevni boravak s mogućnošću da se pokreću najave filmova i određeni isječci početaka medija prije glavne funkcije.", "Composer": "Kompozitor", "ConfigureDateAdded": "Podesite kako se „Datum dodavanja“ određuje u Nadzorna ploča > Biblioteke > Prikaz", "ConfirmDeleteImage": "Izbrisati sliku?", @@ -67,7 +67,7 @@ "ConfirmDeletion": "Potvrdite brisanje", "Continuing": "Nastavlja se", "DeathDateValue": "Umro: {0}", - "ErrorDefault": "Došlo je do pogreške prilikom obrade zahtjeva. Molimo pokušajte ponovo kasnije.", + "ErrorDefault": "Dogodila se greška prilikom obrade zahtjeva. Pokušajte ponovo kasnije.", "Delete": "Izbrisati", "DeleteDeviceConfirmation": "Jeste li sigurni da želite izbrisati ovaj uređaj? Ponovno će se pojaviti kad se korisnik sljedeći put prijavi s njim.", "DeleteImage": "Izbrisati sliku", @@ -88,20 +88,20 @@ "EnablePhotosHelp": "Fotografije će biti otkrivene i prikazane zajedno s ostalim medijskim datotekama.", "Ended": "Završeno", "EndsAtValue": "Završava u {0}", - "ErrorAddingListingsToSchedulesDirect": "Došlo je do pogreške prilikom dodavanja postava vašim zakazanim direktnim računima. Raspored dopušta samo ograničen broj postava po računu. Možda ćete morati se prijavite u zakazanim \"Direct\" web stranicama i ukloniti unose drugih s računa prije nastavka.", - "ErrorAddingMediaPathToVirtualFolder": "Došlo je do pogreške prilikom dodavanja putanje medija. Provjerite dali je putanja valjana i da Jellyfin ima pristup tom mjestu.", - "ErrorAddingTunerDevice": "Došlo je do pogreške prilikom dodavanja uređaja TV/radio pretraživača. Provjerite da je dostupan i pokušajte ponovno.", - "ErrorGettingTvLineups": "Došlo je do pogreške prilikom preuzimanja TV postave. Provjerite dali su vaše informacije točne i pokušajte ponovno.", + "ErrorAddingListingsToSchedulesDirect": "Dogodila se greška prilikom svrstavanja dodavanja postava vašim zakazanim direktnim računima. Raspored dopušta samo ograničen broj postava po računu. Možda ćete morati se prijavite u zakazanim \"Direct\" web stranicama i ukloniti unose drugih s računa prije nastavka.", + "ErrorAddingMediaPathToVirtualFolder": "Dogodila se greška prilikom dodavanja putanje medija. Provjerite dali je putanja valjana i da Jellyfin ima pristup tom mjestu.", + "ErrorAddingTunerDevice": "Dogodila se greška prilikom dodavanja uređaja TV/radio pretraživača. Provjerite da je dostupan i pokušajte ponovno.", + "ErrorGettingTvLineups": "Dogodila se greška prilikom preuzimanja TV postave. Provjerite dali su vaše informacije točne i pokušajte ponovno.", "ErrorStartHourGreaterThanEnd": "Vrijeme završetka mora biti veće od početka.", "ErrorPleaseSelectLineup": "Odaberite postavu i pokušajte ponovno. Ako niti jedna postava nije dostupna provjerite dali su korisničko ime, lozinka i poštanski broj točni.", - "ErrorSavingTvProvider": "Došlo je do pogreške prilikom snimanja TV pružatelja. Provjerite da je dostupan i pokušajte ponovno.", + "ErrorSavingTvProvider": "Dogodila se greška prilikom spremanja TV pružatelja. Provjerite da je dostupan i pokušajte ponovno.", "ExtractChapterImagesHelp": "Izdvajanje slika poglavlja omogućiti će klijentima prikaz grafičkih izbornika za odabir scena. Proces može biti spor, resursi intenzivno korišteni i može zahtijevati nekoliko gigabajta prostora. Ono se pokreće kad je otkriven video, a također i kao noćni zadatak. Raspored je podesiv u području rasporeda zadataka. Ne preporučuje se za pokretanje ovog zadatka tijekom sati čestog korištenja.", "FFmpegSavePathNotFound": "Nismo mogli locirati FFmpeg korištenjem putanje koju ste unijeli. FFprobe je također potreban i mora postojati u istoj mapi. Ove komponente obično su zajedno u paketu u istom preuzimanju. Provjerite put i pokušajte ponovno.", "Favorite": "Omiljeni", "File": "Datoteka", "FileNotFound": "Datoteka nije pronađena.", "FileReadCancelled": "Učitavanje datoteke je prekinuto.", - "FileReadError": "Prilikom učitavanja datoteke dogodila se greška.", + "FileReadError": "Dogodila se greška prilikom čitanja datoteke.", "Friday": "Petak", "Genres": "Žanrovi", "GroupVersions": "Verzija grupe", @@ -119,9 +119,9 @@ "HeaderActivity": "Aktivnosti", "HeaderAddToCollection": "Dodaj u zbirku", "HeaderAddToPlaylist": "Dodaj u popis", - "HeaderAddUpdateImage": "Dodaj/ažuriraj sliku", + "HeaderAddUpdateImage": "Dodaj/Ažuriraj sliku", "HeaderAdditionalParts": "Dodatni djelovi", - "HeaderAlert": "Uzbuna", + "HeaderAlert": "Upozorenje", "HeaderApiKey": "API ključ", "HeaderApiKeys": "API ključevi", "HeaderApiKeysHelp": "Vanjske aplikacije moraju imati API ključ kako bi komunicirale s serverom. Ključevi se izdaju prijavom s korisničkim računom ili ručnim odobravanjem zahtjeva ključa.", @@ -134,7 +134,7 @@ "HeaderChannelAccess": "Pristup kanalima", "HeaderConfirmPluginInstallation": "Potvrdi instalaciju dodatka", "HeaderConfirmRevokeApiKey": "Opozovi API ključ", - "HeaderConnectToServer": "Spoji se na Server", + "HeaderConnectToServer": "Spoji se na server", "HeaderConnectionFailure": "Neuspjelo spajanje", "HeaderDateIssued": "Datum izdavanja", "HeaderDeleteDevice": "Izbriši uređaj", @@ -149,7 +149,7 @@ "HeaderEnabledFields": "Omogući polja", "HeaderEnabledFieldsHelp": "Odznači kvačicu za sprječavanje promjene podataka tog polja.", "HeaderError": "Greška", - "HeaderFeatureAccess": "Pristup opcijama", + "HeaderFeatureAccess": "Pristup funkcijama", "HeaderFetchImages": "Dohvati slike", "HeaderForKids": "Za djecu", "HeaderFrequentlyPlayed": "Često izvođeno", @@ -158,10 +158,10 @@ "HeaderInstall": "Instaliraj", "HeaderKeepRecording": "Zadrži snimanje", "HeaderKeepSeries": "Zadrži serije", - "HeaderLatestEpisodes": "Zadnje epizode", + "HeaderLatestEpisodes": "Nedavno dodane epizode", "HeaderLatestMedia": "Nedavno dodani mediji", - "HeaderLatestMovies": "Najnoviji filmovi", - "HeaderLatestMusic": "Najnovija glazba", + "HeaderLatestMovies": "Nedavno dodani filmovi", + "HeaderLatestMusic": "Nedavno dodana glazba", "HeaderLatestRecordings": "Nedavno dodane snimke", "HeaderLibraries": "Biblioteke", "HeaderLibraryAccess": "Pristup biblioteci", @@ -179,7 +179,7 @@ "HeaderPaths": "Putanje", "HeaderPlayback": "Reprodukcija medija", "HeaderPleaseSignIn": "Molim, prijavite se", - "HeaderPreferredMetadataLanguage": "Željeni jezik meta-podataka", + "HeaderPreferredMetadataLanguage": "Preferirani jezik meta podataka", "HeaderRecentlyPlayed": "Zadnje izvođeno", "HeaderRecordingOptions": "Opcije snimanja", "HeaderRemoteControl": "Daljinsko upravljanje", @@ -190,7 +190,7 @@ "HeaderScenes": "Scene", "HeaderSeasons": "Sezone", "HeaderSelectCertificatePath": "Odaberi putanju certifikata", - "HeaderSelectMetadataPath": "Odaberite putanju meta-podataka", + "HeaderSelectMetadataPath": "Odaberi putanju meta podataka", "HeaderSelectMetadataPathHelp": "Pregledajte ili unesite putanju koju želite koristiti za metapodatke. U mapu se mora moći pisati.", "HeaderSelectPath": "Odaberi putanju", "HeaderSelectServerCachePath": "Odaberite putanju predmemorije servera", @@ -202,7 +202,7 @@ "HeaderSetupLibrary": "Postavite vaše biblioteke medija", "HeaderSortBy": "Složi po", "HeaderSortOrder": "Redoslijed razvrstavanja", - "HeaderSpecialEpisodeInfo": "Posebni podaci o epizodi", + "HeaderSpecialEpisodeInfo": "Informacije o specijalnoj sezoni", "HeaderTaskTriggers": "Okidači zadataka", "HeaderThisUserIsCurrentlyDisabled": "Ovaj je korisnik trenutno onemogućen", "HeaderTunerDevices": "TV/Radio uređaji", @@ -238,7 +238,7 @@ "LabelAppNameExample": "Ime za identifikaciju API ključeva koje ljudi mogu pročitati. Ova postavka neće utjecati na funkcionalnost.", "LabelArtists": "Izvođači", "LabelArtistsHelp": "Odvoji višestruke izvođače sa ; (točka sa zarezom).", - "LabelAudioLanguagePreference": "Postavke audio jezika", + "LabelAudioLanguagePreference": "Preferirani jezik audio snimaka", "LabelBindToLocalNetworkAddress": "Veži za lokalnu mrežnu adresu", "LabelBindToLocalNetworkAddressHelp": "Natjačaj lokalnu IP adresu za HTTP poslužitelj. Ako je prazno, server će se vezati za sve dostupne adrese. Promjena ove vrijednosti zahtjeva ponovno pokretanje.", "LabelBirthDate": "Datum rođenja", @@ -252,7 +252,7 @@ "LabelChannels": "Kanali", "LabelCollection": "Zbirka", "LabelCommunityRating": "Ocjene zajednice", - "LabelContentType": "Tip sadržaja", + "LabelContentType": "Vrsta sadržaja", "LabelCountry": "Zemlja/Regija", "LabelCriticRating": "Ocjena kritičara", "LabelCurrentPassword": "Trenutna lozinka", @@ -300,8 +300,8 @@ "LabelKidsCategories": "Dječje kategorije", "LabelKodiMetadataDateFormat": "Format datuma izdanja", "LabelKodiMetadataDateFormatHelp": "Svi datumi unutar NFO-a biti će čitani i pisani koristeći ovaj format.", - "LabelKodiMetadataEnableExtraThumbs": "Kopiraj ekstra fanart u ekstra sličicu", - "LabelKodiMetadataEnableExtraThumbsHelp": "Prilikom preuzimanja slike mogu biti spremljene u oba ekstra fanart i pomoćnim sličicama za maksimalnu kompatibilnosti Kodi korisničkog sučelja.", + "LabelKodiMetadataEnableExtraThumbs": "Kopiraj dodatnu ilustraciju obožavatelja u polje dodatnih minijatura", + "LabelKodiMetadataEnableExtraThumbsHelp": "Prilikom preuzimanja se slike mogu spremiti u dodatne islustracije obožavateljai i posebne minijature za maksimalnu kompatibilnosti Kodi korisničkog sučelja.", "LabelKodiMetadataEnablePathSubstitution": "Omoguči zamjensku putanju", "LabelKodiMetadataEnablePathSubstitutionHelp": "Omogućuje zamjensku putanju putanje slika koristeći serverskih postavka zamjenske putanje.", "LabelKodiMetadataSaveImagePaths": "Spremanje staze slika unutar NFO datoteka", @@ -315,13 +315,13 @@ "LabelLoginDisclaimerHelp": "Prikazano će biti na dnu stranice za prijavu.", "LabelLogs": "Dnevnici", "LabelMaxBackdropsPerItem": "Maksimalni broj pozadina po stavci", - "LabelMaxParentalRating": "Najveća dopuštena roditeljska ocjena", + "LabelMaxParentalRating": "Maksimalna dopuštena roditeljska ocjena", "LabelMaxResumePercentage": "Maksimalni postotak za nastavak", "LabelMaxResumePercentageHelp": "Naslovi će biti označeni kao pogledani ako budu zaustavljeni nakon ovog vremena.", "LabelMessageText": "Tekst poruke", "LabelMessageTitle": "Naslov poruke", "LabelMetadata": "Metapodaci", - "LabelMetadataDownloadLanguage": "Željeni jezik za preuzimanje", + "LabelMetadataDownloadLanguage": "Preferirani jezik preuzimanja", "LabelMetadataDownloadersHelp": "Omogućite i poredajte željene preuzimatelje meta-podataka po redu prioriteta. Manjeg prioriteta preuzimatelji koristit će se samo za ispunjavanje nedostajućih informacija.", "LabelMetadataPath": "Put meta-podataka", "LabelMetadataPathHelp": "Odredite prilagođenu lokaciju za preuzete ilustracije i meta-podatke.", @@ -331,7 +331,7 @@ "LabelMetadataSaversHelp": "Odaberite formate datoteka za spremanje meta-podataka.", "LabelMinBackdropDownloadWidth": "Minimalna širina pozadine za preuzimanje", "LabelMinResumeDuration": "Minimalno trajanje za nastavak", - "LabelMinResumeDurationHelp": "Naslovi kraći od ovog neće imati mogućnost nastavka.", + "LabelMinResumeDurationHelp": "Najkraća duljina videa u sekundama kojom će se spremiti mjesto reprodukcije i omogućiti nastavljanje.", "LabelMinResumePercentage": "Minimalni postotak za nastavak", "LabelMinResumePercentageHelp": "Naslovi će biti označeni kao ne reproducirani ako se zaustave prije ovog vremena.", "LabelMovieCategories": "Filmske kategorije", @@ -345,7 +345,7 @@ "LabelNumberOfGuideDays": "Broj dana TV vodiča za preuzeti", "LabelNumberOfGuideDaysHelp": "Preuzimanje više dana TV vodiča omogućiti će vam zakazivanje snimanja dalje u budućnost , ali će i preuzimanje duže trajati. Automaski - odabir će se prilagoditi broju kanala.", "LabelOriginalAspectRatio": "Originalni omjer gledanja", - "LabelOriginalTitle": "Originalni naslov", + "LabelOriginalTitle": "Izvorni naslov", "LabelOverview": "Pregled", "LabelParentalRating": "Roditeljska ocjena", "LabelPassword": "Lozinka", @@ -357,7 +357,7 @@ "LabelPlaceOfBirth": "Mjesto rođenja", "LabelPlayDefaultAudioTrack": "Pokreni zadani audio zapis bez obzira na jezik", "LabelPlaylist": "Playlista", - "LabelPreferredDisplayLanguage": "Željeni jezik prikaza", + "LabelPreferredDisplayLanguage": "Preferirani jezik prikaza", "LabelProfileContainer": "Spremnik", "LabelProtocol": "Protokol", "LabelPublicHttpPort": "Broj javnog HTTP porta", @@ -380,23 +380,23 @@ "LabelServerHost": "Domaćin", "LabelServerHostHelp": "192.168.1.100:8096 ili https://myserver.com", "LabelSkipIfAudioTrackPresent": "Preskoči ukoliko zadani audio zapis odgovara jeziku preuzimanja", - "LabelSkipIfAudioTrackPresentHelp": "Poništite ovo kako biste osigurali da svi videi imaju podnapise, bez obzira na audio jezik.", + "LabelSkipIfAudioTrackPresentHelp": "Odznačite ovo kako biste osigurali da sva videia imaju titlove, bez obzira na audio jezik.", "LabelSkipIfGraphicalSubsPresent": "Preskoči ako video već sadrži ugrađene titlovi", "LabelSkipIfGraphicalSubsPresentHelp": "Zadržavanjem tekstualne verzije titlova prijevoda rezultirati će učinkovitijoj isporuci i smanjiti vjerojatnost transkodiranja videa.", "LabelSortTitle": "Naziv vrste", "LabelSource": "Izvor", "LabelSportsCategories": "Sportske kategorije", "LabelStartWhenPossible": "Počni kada je moguće", - "LabelStopWhenPossible": "Zaustavi kada je moguće", - "LabelStopping": "Zaustavljanje", - "LabelSubtitlePlaybackMode": "Način titla", + "LabelStopWhenPossible": "Prekini kada je moguće", + "LabelStopping": "Prekidanje", + "LabelSubtitlePlaybackMode": "Modus titlova", "LabelTag": "Oznaka", "LabelTagline": "Slogan", "LabelTime": "Vrijeme", "LabelTimeLimitHours": "Rok (sati)", "LabelTitle": "Naslov", "LabelTrackNumber": "Broj pjesme", - "LabelTranscodingTempPathHelp": "Navedite prilagođenu putanju za datoteke transkodiranja koje se poslužuju klijentima. Ostavite prazno za korištenje zadane vrijednosti poslužitelja.", + "LabelTranscodingTempPathHelp": "Odredite prilagođenu putanju za datoteke transkodiranja koje se poslužuju klijentima. Ostavite prazno za korištenje zadane vrijednosti poslužitelja.", "LabelTranscodingThreadCount": "Broj niti transkodiranja", "LabelTranscodingThreadCountHelp": "Odaberite maksimalan broj niti koje će se koristiti kada se transkodira. Manji broj niti će smanjiti upotrebu procesora, ali moguće da neće konvertirati dovoljno brzo za glatke reprodukcije.", "LabelTriggerType": "Tip pokretača", @@ -418,16 +418,16 @@ "Live": "Uživo", "LiveBroadcasts": "Emitiranja uživo", "MapChannels": "Mapiraj kanale", - "MarkPlayed": "Označi pogledan", - "MarkUnplayed": "Označi nepogledan", + "MarkPlayed": "Označi kao reproducirano", + "MarkUnplayed": "Označi kao nereproducirano", "MaxParentalRatingHelp": "Sadržaj sa višom ocjenom će biti skriven od ovog korisnika.", "MediaInfoAnamorphic": "Anamorfno", "MediaInfoAspectRatio": "Omjer gledanja", "MediaInfoBitDepth": "Dubina bita", "MediaInfoBitrate": "Brzina prijenosa", "MediaInfoChannels": "Kanali", - "MediaInfoCodec": "Koder", - "MediaInfoCodecTag": "Oznaka kodera", + "MediaInfoCodec": "Kodek", + "MediaInfoCodecTag": "Oznaka kodeka", "MediaInfoContainer": "Spremnik", "MediaInfoDefault": "Zadano", "MediaInfoExternal": "Vanjski", @@ -444,11 +444,11 @@ "MediaInfoResolution": "Rezolucija", "MediaInfoSampleRate": "Uzorak brzine", "MediaInfoSize": "Veličina", - "MediaInfoTimestamp": "Vremenski žig", - "MessageAreYouSureDeleteSubtitles": "Da li ste sigurni da želite izbrisati ove titla?", + "MediaInfoTimestamp": "Vremenska oznaka", + "MessageAreYouSureDeleteSubtitles": "Jeste li sigurni da želite izbrisati ovu datoteku titlova?", "MessageAreYouSureYouWishToRemoveMediaFolder": "Jeste li sigurni da želite ukloniti ovu medijsku mapu?", - "MessageConfirmDeleteGuideProvider": "Da li ste sigurni da želite izbrisati ovog pružatelja vodiča?", - "MessageConfirmDeleteTunerDevice": "Da li ste sigurni da želite izbrisati ovaj uređaj?", + "MessageConfirmDeleteGuideProvider": "Jeste li sigurni da želite izbrisati ovog pružatelja vodiča?", + "MessageConfirmDeleteTunerDevice": "Jeste li sigurni da želite izbrisati ovaj uređaj?", "MessageConfirmRecordingCancellation": "Jeste li sigurni da želite poništiti ovu snimku?", "MessageConfirmRemoveMediaLocation": "Jeste li sigurni da želite ukloniti ovu lokaciju?", "MessageConfirmRestart": "Jeste li sigurni da želite ponovno pokrenuti Jellyfin Server?", @@ -458,7 +458,7 @@ "MessageCreateAccountAt": "Otvori račun kod {0}", "MessageDeleteTaskTrigger": "Jeste li sigurni da želite izbrisati ovaj okidač zadatka?", "MessageDownloadQueued": "Preuzimanje na čekanju.", - "MessageFileReadError": "Došlo je do greške prilikom učitavanja datoteke. Pokušajte ponovo.", + "MessageFileReadError": "Dogodila se greška prilikom učitavanja datoteke. Pokušajte ponovo.", "MessageForgotPasswordFileCreated": "Sljedeća datoteka je stvorena na vašem poslužitelju i sadrži upute o tome kako postupiti", "MessageForgotPasswordInNetworkRequired": "Molim pokušajte ponovno unutar kućne mreže za pokretanje postupka za poništavanje zaporke.", "MessageInvalidForgotPasswordPin": "Upisan je neispravan ili zastarjeli PIN. Molimo pokušajte ponovno.", @@ -487,14 +487,14 @@ "MoveRight": "Pomakni udesno", "Movies": "Filmovi", "MySubtitles": "Moji titlovi", - "Name": "Naziv", + "Name": "Ime", "NewCollection": "Nova zbirka", "NewCollectionHelp": "Zbirke omogućuju stvaranje personaliziranih grupa filmova i ostalog sadržaja biblioteke.", "NewCollectionNameExample": "Naprimjer: Star Wars zbirka", "NewEpisodes": "Nove epizode", "NewEpisodesOnly": "Samo nove epizode", "News": "Vijesti", - "MessageNoNextUpItems": "Nije pronađeno. Krenite sa gledanjem vaše emisije!", + "MessageNoNextUpItems": "Nije pronađeno. Počnite gledati vaše emisije!", "MessageNoPluginConfiguration": "Ovaj dodatak nema postavke za podesiti.", "NoSubtitleSearchResultsFound": "Nije ništa pronađeno.", "NumLocationsValue": "{0} mape", @@ -541,11 +541,11 @@ "OptionPlayCount": "Broju izvođenja", "OptionPremiereDate": "Datum premijere", "OptionReleaseDate": "Datum izdavanja", - "OptionRequirePerfectSubtitleMatch": "Samo preuzimanje titlova prijevoda koji su savršen izbor za moje video datoteke", - "OptionResumable": "Nastavi", + "OptionRequirePerfectSubtitleMatch": "Preuzmi samo titlove koji se savršeno podudaraju s mojim video datotekama", + "OptionResumable": "Nastavljanje", "OptionSaveMetadataAsHidden": "Spremite meta-podatke i slike kao skrivene datoteke", "OptionSaveMetadataAsHiddenHelp": "Promjena ovoga će se primjenjivati na nove meta-podatke spremljene unaprijed. Postojeće datoteke meta-podataka će se ažurirati sljedeći puta kada ih spremi Jellyfin Server.", - "OptionSpecialEpisode": "Specijal", + "OptionSpecialEpisode": "Specijalne epizode", "OptionTrackName": "Nazivu pjesme", "OptionTvdbRating": "Ocjena TVDB-a", "OptionUnairedEpisode": "Ne emitirane epizode", @@ -558,16 +558,16 @@ "PackageInstallCancelled": "{0} (verzija {1}) instaliranje otkazano.", "PackageInstallCompleted": "{0} (verzija {1}) instaliranje završeno.", "PackageInstallFailed": "{0} (verzija {1}) instaliranje neuspjelo.", - "ParentalRating": "Parental Rating", + "ParentalRating": "Roditeljska ocjena", "PasswordMatchError": "Lozinka i lozinka potvrde moraju biti identične.", "PasswordResetComplete": "Lozinka je resetirana.", - "PasswordResetConfirmation": "Da li ste sigurni da želite resetirati lozinku?", + "PasswordResetConfirmation": "Jeste li sigurni da želite resetirati lozinku?", "PasswordSaved": "Lozinka snimljena.", "People": "Ljudi", "PlaceFavoriteChannelsAtBeginning": "Postavi omiljene kanale na početak", "Play": "Pokreni", "PlayAllFromHere": "Pokreni sve odavde", - "PlayFromBeginning": "Igraj od početka", + "PlayFromBeginning": "Pokreni od početka", "PleaseAddAtLeastOneFolder": "Dodajte barem jednu mapu u ovu biblioteku klikom na gumb Dodaj.", "PleaseEnterNameOrId": "Unesite naziv ili vanjski Id.", "PleaseRestartServerName": "Ponovno pokrenite Jellyfin Server - {0}.", @@ -575,7 +575,7 @@ "Premiere": "Premijera", "Premieres": "Premijere", "Producer": "Producent", - "ProductionLocations": "Lokacije proizvodnje", + "ProductionLocations": "Lokacije produkcije", "RecentlyWatched": "Nedavno pogledano", "RecommendationBecauseYouLike": "Zato što volite {0}", "RecommendationBecauseYouWatched": "Zato što ste gledali {0}", @@ -594,7 +594,7 @@ "RemoveFromCollection": "Ukloni iz zbirke", "RemoveFromPlaylist": "Ukloni iz popisa", "Repeat": "Ponovi", - "RepeatEpisodes": "Reprize", + "RepeatEpisodes": "Ponovi reprize", "ReplaceAllMetadata": "Zamijeni sve meta-podatke", "ReplaceExistingImages": "Zamijeni postojeće slike", "ResumeAt": "Nastavi od {0}", @@ -650,7 +650,7 @@ "TitlePlayback": "Reprodukcija", "TrackCount": "{0} pjesme", "Tuesday": "Utorak", - "UninstallPluginConfirmation": "Da li ste sigurni da želite ukloniti {0}?", + "UninstallPluginConfirmation": "Jeste li sigurni da želite ukloniti {0}?", "HeaderUninstallPlugin": "Ukloni dodatak", "Unrated": "Neocijenjeno", "UserProfilesIntro": "Jellyfin uključuje ugrađenu podršku za korisničke profile što omogućuje svakom korisniku da ima svoje vlastite postavke prikaza, PlayStation i roditeljski nadzor.", @@ -692,7 +692,7 @@ "DownloadsValue": "{0} preuzimanja", "Down": "Dolje", "Playlists": "Popisi za reprodukciju", - "AllowMediaConversionHelp": "Dopusti ili odbij pristup mogućnosti konverzije medija.", + "AllowMediaConversionHelp": "Dopusti ili odbij pristup funkciji konverzije medija.", "AllLibraries": "Sve biblioteke", "Aired": "Emitirano", "AirDate": "Datum prikazivanja", @@ -713,7 +713,7 @@ "Audio": "Audio", "Artist": "Izvođač", "AnyLanguage": "Bilo koji jezik", - "AlwaysPlaySubtitlesHelp": "Titlovi koji odgovaraju odabranom jeziku bit će učitani bez obzira na jezik zvučnog zapisa.", + "AlwaysPlaySubtitlesHelp": "Titlovi koji odgovaraju odabranom jeziku učitat će se bez obzira na jezik audio snimke.", "AlwaysPlaySubtitles": "Uvijek pokreni titlove", "AllowRemoteAccessHelp": "Ako je odznačeno, svi udaljeni pristupi će biti blokirani.", "AllowRemoteAccess": "Dopusti udaljene pristupe na ovaj server", @@ -732,11 +732,11 @@ "CopyStreamURLSuccess": "URL uspješno kopiran.", "CopyStreamURL": "Kopiraj URL stream", "ContinueWatching": "Nastavi gledati", - "Connect": "Povezati", + "Connect": "Spoji se", "ClientSettings": "Postavke klijenta", "ButtonTogglePlaylist": "Playlista", "ButtonSplit": "Odvoji", - "ButtonStop": "Zaustavi", + "ButtonStop": "Prekini", "ButtonScanAllLibraries": "Skeniraj sve biblioteke", "ButtonInfo": "Info", "ButtonAddImage": "Dodaj sliku", @@ -753,7 +753,7 @@ "Normal": "Normalno", "None": "Ništa", "No": "Ne", - "NextUp": "Slijedi", + "NextUp": "Slijedeće na redu", "Next": "Slijedeće", "Never": "Nikada", "MusicVideo": "Glazbeni spot", @@ -777,8 +777,8 @@ "LabelTextColor": "Boja teksta", "LabelSyncPlayAccess": "SyncPlay pristup", "LabelSyncPlayAccessNone": "Onemogućeno za ovog korisnika", - "LabelSyncPlayAccessJoinGroups": "Dozvoli korisniku da se pridruži grupama", - "LabelSyncPlayAccessCreateAndJoinGroups": "Dozvoli korisniku da kreira i pridruži se grupama", + "LabelSyncPlayAccessJoinGroups": "Dopusti korisniku da se pridružuje grupama", + "LabelSyncPlayAccessCreateAndJoinGroups": "Dopusti korisniku da stvori grupe i da se pridružuje grupama", "LabelSyncPlayLeaveGroupDescription": "Onemogući SyncPlay", "LabelSyncPlayLeaveGroup": "Napusti grupu", "LabelSyncPlayNewGroupDescription": "Kreiraj novu grupu", @@ -791,7 +791,7 @@ "LabelServerName": "Naziv poslužitelja", "EnableFasterAnimations": "Brže animacije", "LabelReasonForTranscoding": "Razlog transkodiranja", - "LabelPreferredSubtitleLanguage": "Preferirani jezik podnapisa", + "LabelPreferredSubtitleLanguage": "Preferirani jezik titlova", "LabelStable": "Stabilna", "LabelLanNetworks": "LAN mreže", "LabelInternetQuality": "Internet kvaliteta", @@ -813,9 +813,9 @@ "Hide": "Sakrij", "HeaderSyncPlayEnabled": "SyncPlay omogućen", "HeaderSyncPlaySelectGroup": "Pridruži se grupi", - "HeaderSubtitleDownloads": "Preuzimanje titlove", + "HeaderSubtitleDownloads": "Preuzimanje titlova", "HeaderSubtitleAppearance": "Prikaz titlove", - "HeaderStopRecording": "Zaustavi snimanje", + "HeaderStopRecording": "Prekini snimanje", "HeaderStatus": "Status", "HeaderSeriesStatus": "Status serije", "HeaderSecondsValue": "{0} sekundi", @@ -834,7 +834,7 @@ "HeaderConfigureRemoteAccess": "Konfiguriraj udaljeni pristup", "HeaderAudioBooks": "Audio knjige", "ApiKeysCaption": "Popis trenutno dostupnih API ključeva", - "HeaderAllowMediaDeletionFrom": "Dozvoli brisanje datoteka iz", + "HeaderAllowMediaDeletionFrom": "Dopusti brisanje datoteka iz", "HeaderAdmin": "Administracija", "Guide": "Vodič", "GroupBySeries": "Grupiraj po serijama", @@ -843,7 +843,7 @@ "Fullscreen": "Prikaz cijelog ekrana", "Filters": "Filteri", "FetchingData": "Dohvaćanje dodatnih podataka", - "Features": "Mogućnosti", + "Features": "Funkcije", "Extras": "Dodaci", "ExtraLarge": "Ekstra veliko", "ExitFullscreen": "Izađi iz prikaza cijelog ekrana", @@ -873,13 +873,13 @@ "ConfirmEndPlayerSession": "Želite li ugasiti Jellyfin na {0}?", "CommunityRating": "Ocjena zajednice", "Browse": "Pretraži", - "BoxRear": "Kutija (stražnja)", + "BoxRear": "Kutija (straga)", "ButtonSyncPlay": "Sinkronizirana reprodukcija (SyncPlay)", "DirectStreaming": "Direktno strujanje", "DirectStreamHelp2": "Snaga koji koristi direktan prijenos ovisi o profilu zvuka. Samo je video zapis bez gubitaka.", "Desktop": "Računalo (staro)", - "ColorTransfer": "Prijenos boje", - "ColorSpace": "Spektar boja", + "ColorTransfer": "Prijenos boja", + "ColorSpace": "Prostor boja", "ColorPrimaries": "Primarne boje", "BookLibraryHelp": "Audio i tekstualne knjige su podržane. Provjeri {0} upute za imenovanje knjige {1}.", "Blacklist": "Crna lista", @@ -888,8 +888,8 @@ "AllowOnTheFlySubtitleExtractionHelp": "Ugrađeni titlovi mogu biti izdvojeni iz videozapisa i dostavljeni klijentu kao običan tekst radi sprječavanja transkodiranja. Na nekim sustavima ovo može potrajati duže vrijeme i video reprodukcija može trzati tijekom postupka izdvajanja. Onemogućite ovo kako bi se titlovi ugradili tokom transkodiranja u slučaju da ih ne podržava uređaj klijent.", "HeaderAppearsOn": "Pojavlja se u", "Other": "Ostalo", - "ErrorDeletingItem": "Došlo je do greške prilikom brisanja stavke sa servera. Provjerite dali Jellyfin ima pristup pisanju media mapi i pokušajte ponovo.", - "ErrorAddingXmlTvFile": "Došlo je do greške pristupanju XMLTV datoteci. Potvrdite da datoteka postoji i pokušajte ponovo.", + "ErrorDeletingItem": "Dogodila se greška prilikom brisanja stavke sa servera. Provjerite dali Jellyfin ima pristup pisanju media mapi i pokušajte ponovo.", + "ErrorAddingXmlTvFile": "Dogodila se greška prilikom pristupanju XMLTV datoteci. Potvrdite da datoteka postoji i pokušajte ponovo.", "EnableDetailsBannerHelp": "Prikazuje sliku plakata na vrhu stranice s detaljima o stavci.", "EnableDetailsBanner": "Plakat detalji", "EnableThemeVideosHelp": "Reprodukcija tematskih videa u pozadini za vrijeme pregleda biblioteke.", @@ -897,7 +897,7 @@ "EnableStreamLoopingHelp": "Omogući ovo ako se prijenosi uživo sastoje od samo nekoliko sekundi podataka i trebaju se neprekidno zahtjevati. Uključujući ovo kada nije potrebno može izazvati probleme.", "EnableStreamLooping": "Automatski ponavljaj prijenose uživo", "EnableQuickConnect": "Omogućite brzo povezivanje na ovom serveru", - "EnableNextVideoInfoOverlayHelp": "Na kraju videa prikazuje informacije o sljedećem videu s trenutnog popisa.", + "EnableNextVideoInfoOverlayHelp": "Na kraju videa prikazuje informacije o sljedećem videu na redu u trenutačnoj playlisti.", "EnableNextVideoInfoOverlay": "Informacije o sljedećem videu tijekom reprodukcije", "EnableDisplayMirroring": "Zrcaljenje prikaza", "EnableBackdropsHelp": "Prikazuje slike u pozadini nekih stranica tijekom pregledavanja biblioteke.", @@ -935,7 +935,7 @@ "HeaderVideoType": "Vrsta videa", "HeaderVideoQuality": "Kvaliteta videa", "HeaderUploadSubtitle": "Dodaj titl", - "HeaderTypeImageFetchers": "Hvatatelja slika ({0})", + "HeaderTypeImageFetchers": "Pruzimači slika ({0})", "HeaderTracks": "Zapisi", "HeaderStartNow": "Počni sada", "HeaderServerAddressSettings": "Postavke adrese servera", @@ -943,7 +943,7 @@ "HeaderPortRanges": "Postavke vatrozida i proxy-a", "HeaderPlayOn": "Reproduciraj na", "HeaderPhotoAlbums": "Slikovni albumi", - "HeaderParentalRatings": "Roditeljske oznake", + "HeaderParentalRatings": "Roditeljske ocjene", "HeaderNetworking": "IP protokoli", "HeaderMyMediaSmall": "Moji mediji (malo)", "HeaderMusicQuality": "Kvaliteta glazbe", @@ -976,14 +976,14 @@ "LabelCertificatePassword": "Lozinka certifikata", "LabelBurnSubtitles": "Ugradi titlove", "LabelBlockContentWithTags": "Blokiraj stavke sa oznakama", - "LabelBitrate": "Bitrate", + "LabelBitrate": "Brzina prijenosa", "LabelBaseUrlHelp": "Dodaj vlastiti poddirektorij URL-u poslužitelja. Npr: https://example.com/", "LabelBaseUrl": "Glavni URL", - "LabelAutomaticDiscoveryHelp": "Omogući aplikacijama da automatski otkriju Jellyfin koristeći UDP ulaz 7359.", + "LabelAutomaticDiscoveryHelp": "Dopusti aplikacijama da automatski otkriju Jellyfin koristeći UDP ulaz 7359.", "LabelAutomaticDiscovery": "Omogući Automatsko Otkrivanje", "LabelAuthProvider": "Davatelj autentikacije", "LabelAudioSampleRate": "Brzina urozkovanja zvuka", - "LabelAudioCodec": "Zvučni kodek", + "LabelAudioCodec": "Audio kodek", "LabelAudioBitrate": "Bitrate zvuka", "LabelAudioBitDepth": "Dubina bitova zvuka", "LabelAllowedRemoteAddressesMode": "Način filtriranja vanjskih IP adresa", @@ -1005,7 +1005,7 @@ "LabelCustomCertificatePath": "Put do vlastitog SSL certifikata", "LabelCurrentStatus": "Trenutni status", "LabelCorruptedFrames": "Oštećene slike", - "LabelColorTransfer": "Transformacija boja", + "LabelColorTransfer": "Prijenos boja", "LabelColorSpace": "Prostor boja", "LabelColorPrimaries": "Primarne boje", "HeaderSyncPlayTimeSyncSettings": "Sinkroniziranje vremena", @@ -1033,8 +1033,8 @@ "ButtonClose": "Zatvori", "CopyFailed": "Nije moguće kopirati", "Digital": "Digitalni", - "EnableRewatchingNextUp": "Omogućite ponovno gledanje u sljedećem", - "EnableRewatchingNextUpHelp": "Omogućite prikazivanje već pogledanih epizoda u odjeljcima 'Sljedeće'.", + "EnableRewatchingNextUp": "Isključite ponovno gledanje u „Sljedeće na redu”", + "EnableRewatchingNextUpHelp": "Uključite prikazivanje već pogledanih epizoda u odjeljcima 'Sljedeće na redu'.", "Copied": "Kopirano", "Copy": "Kopirati", "LabelCreateHttpPortMapHelp": "Dopusti automatsko mapiranje porta za stvaranje pravila za HTTP promet uz HTTPS promet.", @@ -1058,7 +1058,7 @@ "OptionDateEpisodeAdded": "Datum dodane epizode", "OptionDateShowAdded": "Datum dodane serije", "Quality": "Kvaliteta", - "LabelSyncPlayResumePlayback": "Nastavak lokalne reprodukcije", + "LabelSyncPlayResumePlayback": "Nastavi lokalnu reprodukciju", "QuickConnectAuthorizeCode": "Unesite kod {0} za prijavu", "LabelTVHomeScreen": "Početni zaslon TV načina", "LabelTonemappingDesat": "Desat mapiranja tonova", @@ -1087,12 +1087,12 @@ "LabelUserAgent": "Korisnički agent", "Localization": "Lokalizacija", "MediaIsBeingConverted": "Medij se pretvara u format koji je kompatibilan s uređajem koji reproducira medij.", - "LabelSpecialSeasonsDisplayName": "Naziv za prikaz posebne sezone", + "LabelSpecialSeasonsDisplayName": "Prikazano ime za specijalne sezone", "LabelSkipBackLength": "Duljina preskakanja unazad", "MessageAddRepository": "Ako želite dodati repozitorij, kliknite gumb pored zaglavlja i ispunite tražene podatke.", "LabelSelectFolderGroupsHelp": "Mape koje nisu označene bit će prikazane same u vlastitom prikazu.", "LabelTypeMetadataDownloaders": "Programi za preuzimanje metapodataka ({0})", - "LabelUserMaxActiveSessions": "Maksimalan broj istovremenih korisničkih sesija", + "LabelUserMaxActiveSessions": "Maksimalni broj istovremenih korisničkih sesija", "LabelUnstable": "Nestabilan", "MoreMediaInfo": "Informacije o medijima", "LabelVideoResolution": "Video rezolucija", @@ -1116,31 +1116,31 @@ "MediaInfoColorPrimaries": "Primarne boje", "LabelVideoBitrate": "Brzina prijenosa videozapisa", "LabelVideoCodec": "Video kodek", - "LatestFromLibrary": "Najnoviji {0}", + "LatestFromLibrary": "Nedavno dodano u {0}", "MediaInfoTitle": "Naslov", "LabelTranscodePath": "Putanja transkodiranja", - "LabelSyncPlayHaltPlayback": "Zaustavi lokalnu reprodukciju", + "LabelSyncPlayHaltPlayback": "Prekini lokalnu reprodukciju", "OptionLoginAttemptsBeforeLockout": "Odredite koliko se netočnih pokušaja prijave može napraviti prije nego što dođe do zaključavanja.", "OptionLoginAttemptsBeforeLockoutHelp": "Vrijednost nula znači nasljeđivanje zadane postavke od tri pokušaja za normalne korisnike i pet za administratore. Postavljanje na -1 će onemogućiti značajku.", - "OptionMaxActiveSessionsHelp": "Vrijednost 0 će onemogućiti značajku.", + "OptionMaxActiveSessionsHelp": "Vrijednost 0 će isključiti funkciju.", "OptionRandom": "Nasumično", "OriginalAirDate": "Izvorni datum emitiranja", - "OtherArtist": "Drugi umjetnik", + "OtherArtist": "Drugi izvođač", "PlaybackErrorNoCompatibleStream": "Ovaj klijent nije kompatibilan s medijima i server ne šalje kompatibilni medijski format.", "PlayNextEpisodeAutomatically": "Automatski reproduciraj sljedeću epizodu", "PreviousChapter": "Prethodno poglavlje", "Profile": "Profil", "Programs": "Programi", - "QuickConnectDeactivated": "Quick Connect je deaktiviran prije nego što je zahtjev za prijavu mogao biti odobren", - "QuickConnectDescription": "Za prijavu pomoću Quick Connecta odaberite gumb 'Quick Connect' na uređaju s kojeg se prijavljujete i unesite prikazani kod ispod.", - "QuickConnectInvalidCode": "Nevažeći kod za Quick Connect", - "QuickConnectNotActive": "Quick Connect nije aktivan na ovom serveru", + "QuickConnectDeactivated": "Brzo povezivanje je deaktivirano prije nego što je zahtjev za prijavu mogao biti odobren", + "QuickConnectDescription": "Za prijavu pomoću brzog povezivanja odaberite gumb ‚Brzo povezivanje' na uređaju s kojeg se prijavljujete i unesite prikazani kod ispod.", + "QuickConnectInvalidCode": "Nevažeći kod za brzo povezivanje", + "QuickConnectNotActive": "Brzo povezivanje nije aktivno na ovom serveru", "QuickConnectActivationSuccessful": "Uspješno aktiviran", "QuickConnectAuthorizeFail": "Nepoznati kod za brzo povezivanje", "SeriesDisplayOrderHelp": "Poredajte epizode prema datumu emitiranja, DVD redoslijedu ili apsolutnom numeriranju.", "TypeOptionPluralMovie": "Filmovi", "TypeOptionPluralMusicAlbum": "Glazbeni albumi", - "TypeOptionPluralMusicArtist": "Glazbeni umjetnici", + "TypeOptionPluralMusicArtist": "Izvođači", "TypeOptionPluralMusicVideo": "Glazbeni spotovi", "Video": "Video", "VideoAudio": "Video Audio", @@ -1160,7 +1160,7 @@ "LabelSyncPlaySettingsSyncCorrection": "Ispravak sinkronizacije", "LabelTonemappingParam": "Parametar tonskog mapiranja", "MessageSent": "Poruka je poslana.", - "OptionRequirePerfectSubtitleMatchHelp": "Zahtjev za savršenim podudaranjem filtrirat će titlove tako da uključuju samo one koji su testirani i potvrđeni s vašom točnom video datotekom. Ako poništite ovu opciju, povećat će se vjerojatnost preuzimanja titlova, ali će se povećati vjerojatnost pogrešnog ili netočnog teksta titlova.", + "OptionRequirePerfectSubtitleMatchHelp": "Zahtjev za savršenim podudaranjem filtrirat će titlove tako da uključuju samo one koji su testirani i potvrđeni s vašom točnom video datotekom. Ako isključite ovu opciju, povećat će se vjerojatnost preuzimanja titlova, ali će se povećati vjerojatnost pogrešnog ili netočnog teksta titlova.", "Recordings": "Snimke", "LabelSortName": "Ime za razvrstavanje", "LabelSlowResponseTime": "Vrijeme u milisekundama nakon kojeg se odgovor smatra sporim", @@ -1188,17 +1188,17 @@ "Suggestions": "Prijedlozi", "Trailers": "Najave", "Small": "Malo", - "HeaderDummyChapter": "Slike Poglavlja", + "HeaderDummyChapter": "Slike poglavlja", "HeaderPerformance": "Performanse", "DownloadAll": "Preuzmi sve", "HeaderRecordingMetadataSaving": "Snimanje metapodataka", "LabelChapterImageResolution": "Rezolucija", - "AllowCollectionManagement": "Dozvoli ovom korisniku da upravlja zbirkama", + "AllowCollectionManagement": "Dopusti ovom korisniku da upravlja zbirkama", "LabelDummyChapterDuration": "Interval", "UnknownVideoStreamInfo": "Informacije o video zapisu su nepoznate", "LabelTonemappingMode": "Način mapiranja tonova", "MediaInfoDvProfile": "DV profil", - "SelectAll": "Odaberi Sve", + "SelectAll": "Odaberi sve", "LabelVppTonemappingContrast": "Pojačanje kontrasta u VPP mapiranju tonova", "LabelVppTonemappingBrightnessHelp": "Postavi pojačanje svjetline u VPP mapiranju tonova. Preporučena rijednosti je 16.", "MediaInfoDvVersionMinor": "Minor DV verzija", @@ -1219,7 +1219,7 @@ "MediaInfoDvLevel": "DV razina", "Unknown": "Nepoznato", "UnknownAudioStreamInfo": "Informacije o audio zapisu su nepoznate", - "DirectPlayError": "Došlo je do greške prilikom pokretanja izravne reprodukcije", + "DirectPlayError": "Dogodila se greška prilikom pokretanja izravne reprodukcije", "ThemeVideo": "Tema videa", "Scene": "Scena", "Sample": "Uzorak", @@ -1228,7 +1228,7 @@ "EnableIntelLowPowerHevcHwEncoder": "Omogući Intel HEVC hardversko kodiranje s niskom potrošnjom", "MediaInfoDvBlSignalCompatibilityId": "ID kompatibilnost DV bl signala", "ThemeSong": "Glavna Pjesma", - "Select": "Odabir", + "Select": "Odaberi", "Trailer": "Trailer", "Clip": "Klip", "Short": "Kratki film", @@ -1280,20 +1280,20 @@ "LabelParentNumber": "Broj roditelja", "LabelTonemappingPeak": "Vrh tonskog preslikavanja", "LabelPublishedServerUriHelp": "Nadjačaj URI koji koristi Jellyfin, na temelju sučelja ili IP adrese klijenta.", - "UseEpisodeImagesInNextUpHelp": "Odjeljci 'Sljedeće' i 'Nastavi s gledanjem' koristit će slike epizoda kao minijature umjesto primarne minijature emisije.", + "UseEpisodeImagesInNextUpHelp": "Odjeljci 'Sljedeće' i 'Nastavi gledati' koristit će slike epizoda kao minijature umjesto primarne minijature emisije.", "PreferEmbeddedTitlesOverFileNamesHelp": "Odredite naslov prikaza koji će se koristiti kada nisu dostupni internetski metapodaci ili lokalni metapodaci.", "SubtitleAppearanceSettingsDisclaimer": "Sljedeće postavke ne odnose se na gore navedene grafičke titlove ili ASS/SSA titlove koji imaju vlastite stilove.", "PlaybackData": "Informacije o reprodukciji", - "LabelMaxDaysForNextUpHelp": "Postavite najveći broj dana koliko serija treba ostati na popisu 'Sljedeće' bez gledanja.", + "LabelMaxDaysForNextUpHelp": "Postavite maksimalni broj dana koliko serija treba ostati na popisu 'Sljedeće na redu' bez gledanja.", "GridView": "Mrežni prikaz", - "MessageGetInstalledPluginsError": "Došlo je do pogreške prilikom preuzimanja popisa trenutno instaliranih dodataka.", + "MessageGetInstalledPluginsError": "Dogodila se greška prilikom preuzimanja popisa trenutno instaliranih dodataka.", "LabelOpenclDeviceHelp": "Ovo je OpenCL uređaj koji se koristi za popis nijansiranja. Lijeva strana od točke je broj platforme, a desna strana je oznaka uređaja na platformi. Zadana vrijednost je 0.0. Potrebna je FFmpeg aplikacijska datoteka koja sadrži OpenCL metodu hardverskog ubrzanja.", - "LabelMaxDaysForNextUp": "Najveći broj dana u 'Sljedeće'", + "LabelMaxDaysForNextUp": "Maksimalni broj dana u 'Sljedeće na redu'", "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Upotrijebite informacije o epizodi iz ugrađenih metapodataka ako su dostupni.", "LabelMaxAudiobookResumeHelp": "Pretpostavlja se da su naslovi u potpunosti reproducirani ukoliko se zaustave kada je preostalo trajanje manje od ove vrijednosti.", "LabelRemoteClientBitrateLimitHelp": "Opcionalno ograničenje brzine prijenosa po pojedinom strujanju za sve uređaje izvan mreže. Ovo je korisno kako bi se spriječilo da uređaji traže veću brzinu prijenosa od one koju vaša internetska veza može podržati. To može rezultirati povećanim opterećenjem CPU-a na vašem poslužitelju kako bi se videozapisi transkodirali u hodu na nižu brzinu prijenosa.", - "SyncPlayAccessHelp": "Značajka SyncPlay omogućuje sinkronizaciju reprodukcije s drugim uređajima. Odaberite razinu pristupa koju ovaj korisnik ima za SyncPlay.", - "QuickConnectNotAvailable": "Zatražite od administratora poslužitelja da omogući Quick Connect", + "SyncPlayAccessHelp": "Funkcija SyncPlay omogućuje sinkronizaciju reprodukcije s drugim uređajima. Odaberite razinu pristupa koju ovaj korisnik ima za SyncPlay.", + "QuickConnectNotAvailable": "Zatražite od administratora poslužitelja da uključi brzo povezivanje", "LabelPlayer": "Izvođač", "LabelPostProcessor": "Aplikacija za naknadnu obradu", "LabelPostProcessorArguments": "Argumenti naredbene linije post-procesoru", @@ -1301,15 +1301,15 @@ "PlaybackRate": "Brzina reprodukcije", "LabelUserLoginAttemptsBeforeLockout": "Neuspjeli pokušaji prijave prije nego što korisnik bude zaključan", "LabelUserRemoteClientBitrateLimitHelp": "Zaobiđite zadanu globalnu vrijednost postavljenu u postavkama poslužitelja, pogledajte Nadzorna ploča > Reprodukcija > Strujanje.", - "MessagePluginInstallError": "Došlo je do pogreške prilikom instaliranja dodatka.", + "MessagePluginInstallError": "Dogodila se greška prilikom instaliranja dodatka.", "MessageSyncPlayGroupWait": "{0} se sprema u međuspremnik…", "PasswordResetProviderHelp": "Odaberite pružatelja usluge poništavanja lozinke koji će se koristiti kada ovaj korisnik zatraži poništavanje lozinke.", "LabelMinAudiobookResumeHelp": "Za naslove se pretpostavlja da nisu pokretani ukoliko nije prošlo minuta.", - "PreferEmbeddedEpisodeInfosOverFileNames": "Daj prednost ugrađenim informacijama o epizodama u odnosu na informacijama u nazivima datoteka", + "PreferEmbeddedEpisodeInfosOverFileNames": "Preferiraj ugrađene informacije o epizodama umjesto imena datoteka", "TonemappingAlgorithmHelp": "Tonsko mapiranje se može fino podesiti. Ako niste upoznati s ovim opcijama, samo zadržite zadane. Preporučena vrijednost je 'BT.2390'.", "TV": "TV", - "UnsupportedPlayback": "Jellyfin ne može dekriptirati sadržaj zaštićen DRM-om, ali bez obzira na to će se isprobati sav sadržaj, uključujući zaštićene naslove. Neke datoteke mogu izgledati potpuno crne zbog enkripcije ili drugih nepodržanih značajki, poput interaktivnih naslova.", - "UseEpisodeImagesInNextUp": "Koristite slike epizoda u odjeljcima \"Sljedeće\" i \"Nastavi s gledanjem\"", + "UnsupportedPlayback": "Jellyfin ne može dešifrirati sadržaj zaštićen DRM-om, ali bez obzira na to će se isprobati sav sadržaj, uključujući zaštićene naslove. Neke datoteke mogu izgledati potpuno crne zbog šrifrianja ili drugih nepodržanih funkcija, poput interaktivnih naslova.", + "UseEpisodeImagesInNextUp": "Koristite slike epizoda u odjeljcima \"Sljedeće\" i \"Nastavi gledati\"", "UserAgentHelp": "Dostavite prilagođeno HTTP zaglavlje 'User-Agent'.", "Yadif": "Yet Another DeInterlacing Filter (YADIF)", "BackdropScreensaver": "Čuvar zaslona pozadinskog platna", @@ -1321,9 +1321,9 @@ "LabelAlbumGain": "Pojačanje zvuka albuma", "LabelMoviePrefixHelp": "Ukoliko je nazivu filma dodan prefiks, unesite ga ovdje kako bi ga poslužitelj ispravno obradio.", "LabelRepositoryUrlHelp": "Lokacija manifesta repozitorija koji želite priključiti.", - "LabelMaxMuxingQueueSizeHelp": "Najveći broj paketa koji se mogu spremiti u međuspremnik dok se čeka da se sva strujanja pokrenu. Pokušajte ga povećati ako se i dalje susrećete s pogreškom \"Previše paketa u međuspremniku za izlazni tok\" u FFmpeg zapisnicima. Preporučena vrijednost je 2048.", + "LabelMaxMuxingQueueSizeHelp": "Maksimalni broj paketa koji se mogu spremiti u međuspremnik dok se čeka da se sva strujanja pokrenu. Pokušajte ga povećati ako se i dalje susrećete s pogreškom \"Previše paketa u međuspremniku za izlazni tok\" u FFmpeg zapisnicima. Preporučena vrijednost je 2048.", "LabelPasswordResetProvider": "Davatelj usluge ponovnog postavljanja lozinke", - "LabelParallelImageEncodingLimitHelp": "Najveći broj kodiranja slika koji je dopušten za paralelno izvođenje. Ukoliko se prazno odabrat će se ograničenje na temelju specifikacija vašeg sustava.", + "LabelParallelImageEncodingLimitHelp": "Maksimalni broj kodiranja slika koji su dopušteni za paralelno izvođenje. Ukoliko se prazno odabrat će se ograničenje na temelju specifikacija vašeg sustava.", "LabelPublishedServerUri": "Objavljeni URI poslužitelja", "LabelSlowResponseEnabled": "Zabilježi poruku upozorenja ukoliko poslužitelj sporo odgovara", "ShowYear": "Prikaži godinu", @@ -1371,7 +1371,7 @@ "LabelChapterImageResolutionHelp": "Rezolucija stvorenih sličica poglavlja. Izmjena ove postavke nema učinka na postojeća prazna poglavlja.", "LabelEnableLUFSScanHelp": "Klijenti mogu normalizirati izvođenje zvučnog zapisa kako bi osigurali ujednačenu glasnoću između različitih zapisa. Ova postavka će produljiti trajanje popisivanja multimedije i koristit će više računalnih resursa.", "LabelMaxVideoResolution": "Maksimalna dopuštena rezolucija za transkodiranje videa", - "LabelMediaDetails": "Detalji multimedije", + "LabelMediaDetails": "Detalji medija", "LabelMaxMuxingQueueSize": "Maksimalna veličina reda čekanja za konvertiranje formata", "LabelSyncPlaySettingsExtraTimeOffset": "Dodatni vremenski pomak", "LabelTranscodingFramerate": "Broj sličica u sekundi prilikom transkodiranja", @@ -1384,7 +1384,7 @@ "AllowFmp4TranscodingContainerHelp": "Dopusti fMP4 spremnik transkodiranja za ovaj tuner za omogućavanje HEVC i HDR sadržaja. Nisu svi tuneri kompatibilni s ovim spremnikom. Isključite ovu opciju ako imate problema s reprodukcijom.", "Custom": "Prilagođeno", "Retry": "Pokušaj ponovno", - "DisplayLoadError": "Dogodila se pogreška tijekom prikazivanja podataka za konfiguraciju.", + "DisplayLoadError": "Dogodila se greška prilikom učitavanja podataka za konfiguraciju.", "EnableLibrary": "Uključite biblioteku", "EnableLibraryHelp": "Isključivanje bibliotekeće ju sakriti od svih korisnika.", "AlwaysBurnInSubtitleWhenTranscoding": "Uvijek ugradi titlove tijekom transkodiranja", @@ -1402,7 +1402,7 @@ "EnableTrueHd": "Uključi TrueHD", "Editor": "Uređivač", "DateModified": "Datum izmjenjivanja", - "AllowStreamSharingHelp": "Dozvoliti Jellyfinu da udvostruči mpegts stream iz tunera i podijeli novu kopiju streama sa svojim klijentima. Ovo je korisno kada tuner ima ograničen broj stream-ova, no može uzrokovati poteškoće pri reprodukciji.", + "AllowStreamSharingHelp": "Dopusti Jellyfinu da udvostruči mpegts stream iz tunera i podijeli novu kopiju streama sa svojim klijentima. Ovo je korisno kada tuner ima ograničen broj stream-ova, no može uzrokovati poteškoće pri reprodukciji.", "AlwaysBurnInSubtitleWhenTranscodingHelp": "Ugradi titlove u video stream kada se aktivira transkodiranje. Ovo osigurava sinkronizaciju titlova nakon transkodiranja, nauštrb smanjena brzine transkodiranja.", "AndOtherArtists": "{0} i {1} drugih umjetnika.", "OptionForceRemoteSourceTranscoding": "Prisili transkodiranje udaljenih medijskih izvora kao što je Live TV", @@ -1439,7 +1439,7 @@ "AudioSampleRateNotSupported": "Brzina uzorkovanja zvučnog zapisa nije podržana", "VideoResolutionNotSupported": "Razlučivost videozapisa nije podržana", "AudioProfileNotSupported": "Profil zvučnog kodeka nije podržan", - "AutoSubtitleStylingHelp": "Ovaj način rada automatski prebacuje između izvornog i prilagođenog oblikovanja titlova, ovisno o vrsti vašeg uređaja.", + "AutoSubtitleStylingHelp": "Ovaj način rada automatski prebacuje između izvornog i prilagođenog stiliziranja titlova, ovisno o vrsti vašeg uređaja.", "VideoFramerateNotSupported": "Broj sličica u sekundi ovog videozapisa nije podržan", "VideoLevelNotSupported": "Razina video kodeka nije podržana", "AspectRatioCover": "Povećaj", @@ -1457,51 +1457,51 @@ "MachineTranslated": "Strojno prevedeno", "AiTranslated": "Prevedeno umjetnom inteligencijom", "LabelIsHearingImpaired": "Za oštećeni sluh (SDH)", - "PriorityBelowNormal": "Ispod normalne", + "PriorityBelowNormal": "Ispod normalnog", "LabelTileHeight": "Broj redaka", - "PriorityAboveNormal": "Iznad normalne", + "PriorityAboveNormal": "Iznad normalnog", "LabelTileWidth": "Širina sličice", - "LabelTileHeightHelp": "Najveći broj redaka sličica.", + "LabelTileHeightHelp": "Maksimalni broj slika po pločici u smjeru Y.", "HeaderNextEpisode": "Sljedeća epizoda", - "PriorityHigh": "Visoko", + "PriorityHigh": "Visoki", "HeaderPageNotFound": "Stranica nije pronađena", "HeaderEditPlaylist": "Uređivanje popisa za reprodukciju", "HeaderAudioAdvanced": "Napredne postavke zvuka", - "HeaderLyricDownloads": "Preuzimanja stihova", - "LabelTileWidthHelp": "Najveći broj sličica u jednom vodoravnom nizu.", + "HeaderLyricDownloads": "Preuzimanja tekstova pjesama", + "LabelTileWidthHelp": "Maksimalni broj slika po pločici u smjeru X.", "LabelWidthResolutions": "Horizontalne razlučivosti", "CopyLogSuccess": "Sadržaj dnevnika je uspješno kopiran.", "ConfirmDeleteLyrics": "Brisanjem ovih stihova trajno ćete ih ukloniti i s datotečnog sustava i iz vaše biblioteke. Jeste li sigurni da želite nastaviti?", "HeaderDeleteLyrics": "Brisanje stihova", "LabelQscale": "Qscale (Skala kvantizacije)", - "PriorityNormal": "Normalno", - "PriorityIdle": "Najniže", + "PriorityNormal": "Normalni", + "PriorityIdle": "Najniži", "LabelProcessPriority": "Prioritet procesa", "LabelTrickplayThreadsHelp": "Broj dretvi koji se prosljeđuje -threads argumentu alata ffmpeg.", "HeaderServerUnavailable": "Poslužitelj nedostupan", "DownloadManager": "Preuzimanja", "BlockingScan": "S blokiranjem - postavlja skeniranje u red i čeka na završetak", - "LabelImageInterval": "Interval sličica", + "LabelImageInterval": "Interval slika", "LabelQscaleHelp": "Skala kvalitete (Qscale) za sličice koje stvara ffmpeg, gdje 2 označava najvišu, a 31 najnižu kvalitetu.", "LabelTrickplayThreads": "Broj dretvi za FFmpeg", "CustomSplashScreenSize": "Prilagođene slike moraju imati omjer slike 16:9 i minimalnu razlučivost od 1920x1080.", "DeleteCustomImage": "Izbriši prilagođenu sliku", - "ErrorDeletingLyrics": "Došlo je do pogreške pri brisanju stihova s poslužitelja. Molimo provjerite ima li Jellyfin pristup za pisanje medijskoj mapi i pokušajte ponovno.", + "ErrorDeletingLyrics": "Dogodila se greška prilikom brisanja tekstova pjesama sa servera. Provjerite ima li Jellyfin pristup za pisanje mapi medija i pokušajte ponovno.", "ButtonLearnMore": "Saznajte više", "Create": "Izradi", "DisableVbrAudioEncodingHelp": "Onemogućuje kodiranje zvuka s VBR-om za ovog klijenta.", "HeaderPreviewLyrics": "Pretpregled stihova", - "HeaderMediaSegmentActions": "Radnje za medijski segment", + "HeaderMediaSegmentActions": "Radnje za medijske segmente", "HeaderNoLyrics": "Nema stihova", "ButtonCreateBackup": "Izradi sigurnosnu kopiju", "HeaderUpdateRequired": "Potrebno je ažuriranje", "ConfirmDeleteRepository": "Izbrisati repozitorij?", - "ConnectAnyway": "Ipak se poveži", - "CustomSubtitleStylingHelp": "Oblikovanje titlova radit će na većini uređaja, ali stvara dodatno opterećenje sustava.", + "ConnectAnyway": "Svejedno se spoji", + "CustomSubtitleStylingHelp": "Stiliziranje titlova će raditi na većini uređaja, ali stvara dodatno opterećenje sustava.", "DeleteRepositoryConfirmation": "Jeste li sigurni da želite izbrisati ovaj repozitorij?", "DeleteLyrics": "Ukloni stihove", "EnableTrueHdHelp": "Omogućite samo ako vaš uređaj podržava TrueHD ili je spojen na kompatibilan audio prijemnik, inače može doći do problema s reprodukcijom.", - "HeaderAddLyrics": "Dodavanje stihova", + "HeaderAddLyrics": "Dodaj tekstove pjesama", "HeaderNewPlaylist": "Nova playlista", "HeaderNextVideo": "Sljedeći videozapis", "HeaderServerMismatch": "Neusklađenost poslužitelja", @@ -1513,7 +1513,7 @@ "LabelJpegQuality": "Kvaliteta JPEG-a", "LogLoadFailure": "Nije uspjelo učitavanje datoteke dnevnika. Moguće je da se u nju još uvijek upisuju podaci.", "ButtonAddProvider": "Dodaj pružatelja usluga", - "ButtonAddTunerDevice": "Dodaj Tuner uređaj", + "ButtonAddTunerDevice": "Dodaj tuner uređaj", "LabelSlideshowIntervalHelp": "Vrijeme u sekundama za prikaz svake fotografije u prezentaciji.", "LabelSlideshowInterval": "Interval prikaza fotografija", "LabelAvailable": "Dostupno", @@ -1528,7 +1528,7 @@ "LabelBundled": "U paketu", "LabelCustomTagDelimiters": "Prilagođeni razdjelnik oznaka", "LabelCustomTagDelimitersHelp": "Znakovi koji se tretiraju kao razdjelnici za odvajanje oznaka.", - "ConfirmDeleteCollection": "Stvarno želiš izbrisati ovu zbirku?", + "ConfirmDeleteCollection": "Jeste li sigurni da želite izbrisati ovu zbirku?", "HeaderDeleteCollection": "Izbriši zbirku", "SubtitleCyan": "Cijan", "Sort": "Razvrstaj", @@ -1556,5 +1556,225 @@ "MediaSegmentType.Commercial": "Komercionalno", "ActivitiesLoadError": "Učitavanje aktivnosti nije uspjelo", "ApiKeysLoadError": "Učitavanje API ključeva nije uspjelo", - "Authors": "Autori" + "Authors": "Autori", + "BrandingLoadError": "Neuspjelo učitavanje postavki brendiranja", + "ConfirmDeletePlaylist": "Jeste li sigurni da želite izbrisati ovu playlistu?", + "ContinueReading": "Nastavi čitati", + "DevicesLoadError": "Neuspjelo učitavanje uređaja", + "HeaderDeletePlaylist": "Izbriši playlistu", + "HeaderLatestBooks": "Nedavno dodane knjige", + "HeaderLatestMusicVideos": "Nedavno dodani glazbeni spotovi", + "LabelDatabase": "Baza podataka", + "LabelDelimiterWhitelistHelp": "Stavke koje treba isključiti iz rastavljanja oznaka. Jedna stavka po retku.", + "LabelDevice": "Uređaj", + "LabelDisableVbrAudioEncoding": "Isključi VBR kodiranje zvuka", + "LabelDuration": "Trajanje", + "LabelDropLyricsHere": "Ispustite tekstove pjesama ovdje ili kliknite za pregledavanje.", + "LabelEnablePlugin": "Aktiviraj dodatak", + "LabelGroupShowsIntoCollectionsHelp": "Emisije u zbirci će se prikazati kao jedna grupirana stavka u prikazu popisa emisija.", + "LabelImageCache": "Predmemorija slika", + "LabelInstalled": "Instalirano", + "LabelInternalServerUri": "Interni URI", + "LabelInternalServerUriHelp": "Objavljeni URI servera za interni pristup.", + "LabelIsSynced": "Je sinkronizirano", + "LabelMediaSegmentProviders": "Pružatelji medijskih segmenata", + "LabelMediaSegmentsType": "{0} segmenti", + "LabelLyricDownloaders": "Preuzimatelji tekstova pjesama", + "LabelNoChangelog": "Za ovo izdanje nema priloženih dnevnika promjena.", + "LabelNotInstalled": "Nije instalirano", + "LabelProgramData": "Podaci o programu", + "LabelQsvDevice": "QSV uređaj", + "LabelRepository": "Repozitorij", + "LabelRestore": "Obnovi", + "LabelScreensaverTime": "Vrijeme zaštite ekrana", + "LabelScreensaverTimeHelp": "Vrijeme u sekundama neaktivnosti koje je potrebno za pokretanje zaštite ekrana.", + "LabelSubtitleStyling": "Stiliziranje titlova", + "LabelUseSamePublishedServerUri": "Koristite isti objavljeni URI servera za interni i eksterni pristup", + "LabelWebVersion": "Web verzija", + "LastActive": "Zadnje aktivno", + "LibraryNameInvalid": "Ime biblioteke ne smije biti prazno.", + "LibraryScanFanoutConcurrency": "Ograničenje u paralelnom skeniranju biblioteke", + "LimitSupportedVideoResolution": "Ograničite maksimalnu podržanu rezoluciju videa", + "LogLevel.Trace": "Precrtaj", + "LogLevel.Debug": "Otklanjanje grešaka", + "LogoScreensaver": "Logotip kao zaštita zaslona", + "Lyric": "Tekst pjesme", + "Lyrics": "Tekstovi pjesama", + "ManageLibrary": "Upravljaj bibliotekom", + "ManageRecording": "Upravljaj snimanjem", + "ManageRepositories": "Upravljaj repozitorijima", + "MessageBackupInProgress": "Izrada sigurnosne kopije je u tijeku", + "MessageNoItemsAvailable": "Trenutačno nije dostupna nijedna stavka.", + "MessageNoFavoritesAvailable": "Trenutačno nije dostupan nijedan favorit.", + "MessagePluginInstalled": "Dodatak je uspješno instaliran. Server će se morati ponovno pokrenuti kako bi promjene stupile na snagu.", + "MessageRenameMediaFolder": "Preimenovanje medijske biblioteke prouzročiti će gubitak svih metapodataka, nastavite oprezno.", + "MessageRestoreInProgress": "Obnova je u tijeku", + "MessageRestoreSuccess": "Obnova je uspješno završena", + "MessageSyncPlayUserJoined": "{0} se pridružio(la) grupi.", + "MessageSyncPlayUserLeft": "{0} se napustio(la) grupu.", + "MessageWaitingForServer": "Čekanje na server …", + "MetadataImagesLoadError": "Neuspjelo učitavanje postavki meta podataka", + "MetadataNfoLoadError": "Neuspjelo učitavanje postavki NFO meta odataka", + "MixedMoviesShows": "Pomiješani filmovi i serije", + "Mixer": "Mikser", + "MoveToBottom": "Premjesti na kraj", + "MoveToTop": "Premjesti na vrh", + "MovieLibraryHelp": "Pregledajte {0}vodič za imenovanje filmova{1}.", + "MoviesAndShows": "Filmovi i serije", + "MusicAlbum": "Glazbeni album", + "MusicArtist": "Izvođač", + "MusicLibraryHelp": "Pregledajte {0}vodič za imenovanje glazbe{1}.", + "Native": "Izvorno", + "NativeSubtitleStylingHelp": "Stiliziranje titlova neće raditi na nekim uređajima. Međutim, ne preopterećuje performansu.", + "NetworkingPageLoadError": "Neuspjelo učitavanje postavki umreživanja", + "New": "Nova", + "NextTrack": "Preskoči na sljedeću", + "NoCreatedLibraries": "Čini se da još niste stvorili nijednu biblioteku. {0}Želite li je sada stvoriti? {1}", + "NoLyricsSearchResultsFound": "Nema tekstova pjesama.", + "NoNewDevicesFound": "Nema novih uređaja. Za dodavanje novog tunera, zatvorite ovaj dijalog i ručno unesite podatke o uređaju.", + "NoSubtitlesHelp": "Titlovi se standardno neće učitavati. Međutim oni se mogu ručno uključiti tijekom reprodukcije.", + "OnFilesystem": "Na datotečnom sustavu: {0}", + "OnWakeFromSleep": "Pri buđenju iz mirovanja", + "OptionAllowContentDownload": "Dopusti preuzimanje medija", + "PasswordRequiredForAdmin": "Za administratorske račune je potrebna lozinka.", + "PasswordMissingSaveError": "Nova lozinka ne smije biti prazna.", + "PathNotFound": "Putanja se nije mogla pronaći. Provjerite je li putanja valjana i pokušajte ponovno.", + "PerfectMatch": "Savršeno podudaranje", + "Person": "Osoba", + "Photo": "Fotografija", + "PlayCount": "Broj reprodukcija", + "Played": "Izvođeno", + "PlaylistPublic": "Dopusti javni pristup", + "PlaylistPublicDescription": "Dopusti da ovu playlistu može pregledati bilo koji prijavljeni korisnik.", + "PosterCard": "Kartica postera", + "AllowEmbeddedSubtitlesAllowAllOption": "Dopusti sve", + "AllowEmbeddedSubtitlesAllowNoneOption": "Ne dopusti ništa", + "AllowEmbeddedSubtitlesAllowImageOption": "Dopusti sliku", + "AllowEmbeddedSubtitlesAllowTextOption": "Dopusti tekst", + "PreviewLyrics": "Pregled tekstova pjesama", + "Previous": "Prethodna", + "PreviousTrack": "Preskoči na prethodnu", + "Primary": "Primarno", + "Print": "Ispiši", + "Production": "Produkcija", + "Raised": "Uzdignuto", + "Rate": "Brzina", + "Regional": "Regionalno", + "ReleaseGroup": "Grupa izdanja", + "Remixer": "Remikser", + "RepeatAll": "Ponovi sve", + "RepeatOne": "Ponovi jednom", + "RetryWithGlobalSearch": "Pokušaj ponovno s globalnom pretragom", + "Reset": "Resetiraj", + "ResetFilters": "Resetiraj filtre", + "ResetPassword": "Resetiraj lozinku", + "ResolutionMatchSource": "Usporedi s izvorom", + "Restart": "Pokreni ponovo", + "Rewind": "Premotaj natrag", + "SaveLyricsIntoMediaFoldersHelp": "Spremanje tekstova pjesmi uz audio datoteke omogućit će lakše upravljanje njima.", + "SaveSubtitlesIntoMediaFoldersHelp": "Spremanje titlova uz audio datoteke omogućit će lakše upravljanje njima.", + "ScanForNewAndUpdatedFiles": "Skenirajte za nove i ažurirane datoteke", + "ScanLibrary": "Pretraži biblioteku", + "Schedule": "Termin", + "ScreenResolution": "Rezolucija ekrana", + "SearchForLyrics": "Traži tekstove pjesama", + "SearchResultsEmpty": "Nažalost nije pronađen nijedan rezultat za \"{0}\"", + "Season": "Sezona", + "SecondarySubtitles": "Sekundarni titlovi", + "SelectServer": "Odaberi server", + "SendMessage": "Pošalji poruku", + "ServerRestartNeededAfterPluginInstall": "Jellyfin će se morati ponovno pokrenuti nakon instalacije dodatka.", + "SmartSubtitlesHelp": "Titlovi koji odgovaraju odabranom jeziku učitat će se kada se radi o audio snimci na stranom jeziku.", + "SpecialFeatures": "Specijalne funkcije", + "StopPlayback": "Prekini reprodukciju", + "StopRecording": "Prekini snimanje", + "StorageType.CDRom": "CD-ROM", + "StorageType.Fixed": "Fiksno", + "StorageType.Network": "Mreža", + "StorageType.Ram": "RAM", + "StorageType.Removable": "Prijenosni uređaj", + "StorageType.Unknown": "Nepoznato", + "Studio": "Studio", + "SubtitleBlack": "Crna", + "SubtitleBlue": "Plava", + "SubtitleGray": "Siva", + "SubtitleGreen": "Zelena", + "SubtitleLightGray": "Svijetla siva", + "SubtitleMagenta": "Magenta", + "SubtitleOffset": "Odmak titlova", + "SubtitleRed": "Crvena", + "SubtitleVerticalPositionHelp": "Broj retka gdje se tekst pojavljuje. Pozitivni brojevi ukazuju odozgo prema dolje. Negativni brojevi označavaju odozdo prema gore.", + "SubtitleWhite": "Bijela", + "SubtitleYellow": "Žuta", + "Success": "Uspjeh", + "SyncPlayGroupDefaultTitle": "Od grupe {0}", + "HeaderBackups": "Sigurnosne kopije", + "TabNetworking": "Umrežavanje", + "TabRepositories": "Repozitoriji", + "TabServer": "Server", + "TagsValue": "Oznake: {0}", + "TextSent": "Tekst je poslan.", + "ThemeSongs": "Tematske pjesme", + "ThemeVideos": "Tematska videa", + "Thumb": "Minijatura", + "TonemappingRangeHelp": "Odaberite raspon izlaznih boja. Automatski znači da je isti kao i ulazni raspon.", + "Track": "Pjesma", + "Translator": "Prevoditelj", + "TvLibraryHelp": "Pregledajte {0}vodič za imenovanje TV-a{1}.", + "TypeOptionPluralAudio": "Audio snimke", + "TypeOptionPluralBook": "Knjige", + "TypeOptionPluralEpisode": "Epizode", + "TypeOptionPluralSeason": "Sezone", + "TypeOptionPluralVideo": "Videa", + "Typewriter": "Neproporcionalni", + "Uniform": "Uniformno", + "UnknownError": "Dogodila se nepoznata greška.", + "Unmute": "Uključi ton", + "Unplayed": "Nereproducirano", + "Up": "Gore", + "Upload": "Prenesi", + "UseCustomTagDelimitersHelp": "Rastavi oznake umjetnika/žanra s prilagođenim znakovima.", + "ValueOneAlbum": "1 album", + "Watch": "Gledaj", + "Watched": "Pogledano", + "WriteAccessRequired": "Jellyfin treba pristup pisanju u ovu mapu. Osigurajte pristup pisanju i pokušajte ponovno.", + "Writers": "Pisci", + "Yes": "Da", + "HeaderSelectFallbackFontPath": "Odaberi putanju mape rezervnog fonta", + "HeaderSelectFallbackFontPathHelp": "Pregledajte ili unesite putanju do mape s rezervnim fontovima koja će se koristiti za prikaz ASS/SSA titlova.", + "LabelAudioInfo": "Podaci audio snimke", + "LabelOriginalMediaInfo": "Izvorni podaci medija", + "LabelSyncPlayInfo": "SyncPlay informacije", + "AllowHevcEncoding": "Dopusti kodiranje u HEVC formatu", + "LabelAllowedAudioChannels": "Maksimalno dopušteni audio kanali", + "LabelSelectAudioChannels": "Kanali", + "LabelSelectMono": "Mono", + "LabelSelectStereo": "Stereo", + "YoutubeBadRequest": "Loš zahtjev.", + "YoutubePlaybackError": "Zatraženi video se ne može reproducirati.", + "YoutubeDenied": "Zatraženi video se ne smije reproducirati u ugrađenim playerima.", + "MessagePlaybackError": "Dogodila se greška prilikom reprodukcije ove datoteke na vašem Google Cast prijemniku.", + "ContainerNotSupported": "Kontejner nije podržan", + "SubtitleCodecNotSupported": "Kodek titlova nije podržan", + "VideoCodecTagNotSupported": "Video kodek oznaka nije podržana", + "LabelExternalServerUri": "Eksterni URI", + "LabelExternalServerUriHelp": "Objavljeni URI servera za eksterni pristup.", + "LabelVideoAttributes": "Svojstva videa", + "LabelVideoColors": "Boje videa", + "LabelVideoBitDepth": "Količina bitova videa", + "LabelAudioAttributes": "Svojstva audio snimke", + "LabelTargetCodecs": "Ciljni kodeki", + "LabelProgressAndSpeed": "Napredak / brzina", + "LabelReasons": "Razlozi", + "ThumbCard": "Kartica minijature", + "TypeOptionPluralSeries": "TV emisije", + "Unwatch": "Nepogledano", + "UploadCustomImage": "Prenesi prilagođenu sliku", + "UseCustomTagDelimiters": "Koristi prilagođeni razdjelnik oznaka", + "UserMenu": "Korisnički izbornik", + "UsersEditPageError": "Neuspjelo učitavanje stranice za uređivanje korisnika", + "TheseSettingsAffectSubtitlesOnThisDevice": "Ove postavke utječu na titlove na ovom uređaju", + "LabelFallbackFontPathHelp": "Neki klijenti koriste ove fontove za prikaz titlova. Za više informacija pogledajte dokumentaciju.", + "EnableFallbackFontHelp": "Uključite prilagođene alternativne fontove. To može izbjeći problem netočnog prikazivanja titlova.", + "SubtitleDownloadersHelp": "Uključite i rangirajte preferirane programe za preuzimanje titlova prema prioritetu." } From 090f22c3bab7eb910dff829b7f951a1e6fde9608 Mon Sep 17 00:00:00 2001 From: Emre Sanden Date: Wed, 15 Apr 2026 07:42:46 -0400 Subject: [PATCH 093/695] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l)=20Translation:=20Jellyfin/Jellyfin=20Web=20Tr?= =?UTF-8?q?anslate-URL:=20https://translate.jellyfin.org/projects/jellyfin?= =?UTF-8?q?/jellyfin-web/nb=5FNO/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/strings/nb.json | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/strings/nb.json b/src/strings/nb.json index 6c36a6ab0b..26c595f256 100644 --- a/src/strings/nb.json +++ b/src/strings/nb.json @@ -1894,5 +1894,15 @@ "Watch": "Se", "TrickplayLoadError": "Kunne ikke laste inn trickplay innstillingene", "LabelExternalServerUri": "Ekstern URI", - "LabelExternalServerUriHelp": "Publisert server URI for ekstern tilgang." + "LabelExternalServerUriHelp": "Publisert server URI for ekstern tilgang.", + "OnFilesystem": "På filsystem: {0}", + "LabelVideoAttributes": "Videoattributter", + "LabelVideoColors": "Videofarger", + "LabelVideoBitDepth": "Videobitdybde", + "LabelAudioAttributes": "Lydattributter", + "LabelTargetCodecs": "Målkodeker", + "LabelProgressAndSpeed": "Fremgang / hastighet", + "LabelReasons": "Årsaker", + "LabelPlayerSizes": "Spillerstørrelser", + "LabelPlaybackQuality": "Ramme mistet/ødelagt" } From 768b8357d128c7579c3b325594cfa5e6bb80f71d Mon Sep 17 00:00:00 2001 From: kscop-n1 Date: Wed, 15 Apr 2026 07:31:21 -0400 Subject: [PATCH 094/695] Translated using Weblate (Ukrainian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/uk/ --- src/strings/uk.json | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/strings/uk.json b/src/strings/uk.json index 626eeee5bc..0a6f2556be 100644 --- a/src/strings/uk.json +++ b/src/strings/uk.json @@ -1894,5 +1894,15 @@ "ResumeLoadError": "Не вдалося завантажити налаштування відновлення відтворення", "StreamingLoadError": "Не вдалося завантажити налаштування сторінки потокового передавання", "Unwatch": "Непереглянуто", - "UsersEditPageError": "Не вдалося завантажити сторінку редагування користувачів" + "UsersEditPageError": "Не вдалося завантажити сторінку редагування користувачів", + "OnFilesystem": "На диску: {0}", + "LabelVideoAttributes": "Атрибути відео", + "LabelVideoColors": "Кольори відео", + "LabelVideoBitDepth": "Глибина кольору відео", + "LabelAudioAttributes": "Атрибути аудіо", + "LabelTargetCodecs": "Цільові кодеки", + "LabelProgressAndSpeed": "Прогрес / швидкість", + "LabelReasons": "Причини", + "LabelPlayerSizes": "Розміри плеєра", + "LabelPlaybackQuality": "Втрачено / пошкоджено кадрів" } From aa01c4f374e0da8f72462506bd5f57daee1829d4 Mon Sep 17 00:00:00 2001 From: Milo Ivir Date: Wed, 15 Apr 2026 10:19:44 -0400 Subject: [PATCH 095/695] Translated using Weblate (Croatian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hr/ --- src/strings/hr.json | 62 ++++++++++++++++++++++----------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/src/strings/hr.json b/src/strings/hr.json index 462878bce2..0f3874cbd0 100644 --- a/src/strings/hr.json +++ b/src/strings/hr.json @@ -91,9 +91,9 @@ "ErrorAddingListingsToSchedulesDirect": "Dogodila se greška prilikom svrstavanja dodavanja postava vašim zakazanim direktnim računima. Raspored dopušta samo ograničen broj postava po računu. Možda ćete morati se prijavite u zakazanim \"Direct\" web stranicama i ukloniti unose drugih s računa prije nastavka.", "ErrorAddingMediaPathToVirtualFolder": "Dogodila se greška prilikom dodavanja putanje medija. Provjerite dali je putanja valjana i da Jellyfin ima pristup tom mjestu.", "ErrorAddingTunerDevice": "Dogodila se greška prilikom dodavanja uređaja TV/radio pretraživača. Provjerite da je dostupan i pokušajte ponovno.", - "ErrorGettingTvLineups": "Dogodila se greška prilikom preuzimanja TV postave. Provjerite dali su vaše informacije točne i pokušajte ponovno.", + "ErrorGettingTvLineups": "Dogodila se greška prilikom preuzimanja svrstavanja TV-a. Provjerite dali su vaše informacije točne i pokušajte ponovno.", "ErrorStartHourGreaterThanEnd": "Vrijeme završetka mora biti veće od početka.", - "ErrorPleaseSelectLineup": "Odaberite postavu i pokušajte ponovno. Ako niti jedna postava nije dostupna provjerite dali su korisničko ime, lozinka i poštanski broj točni.", + "ErrorPleaseSelectLineup": "Odaberite postavu i pokušajte ponovno. Ako nijedno svrstavanje nije dostupno, provjerite jesu li korisničko ime, lozinka i poštanski broj točni.", "ErrorSavingTvProvider": "Dogodila se greška prilikom spremanja TV pružatelja. Provjerite da je dostupan i pokušajte ponovno.", "ExtractChapterImagesHelp": "Izdvajanje slika poglavlja omogućiti će klijentima prikaz grafičkih izbornika za odabir scena. Proces može biti spor, resursi intenzivno korišteni i može zahtijevati nekoliko gigabajta prostora. Ono se pokreće kad je otkriven video, a također i kao noćni zadatak. Raspored je podesiv u području rasporeda zadataka. Ne preporučuje se za pokretanje ovog zadatka tijekom sati čestog korištenja.", "FFmpegSavePathNotFound": "Nismo mogli locirati FFmpeg korištenjem putanje koju ste unijeli. FFprobe je također potreban i mora postojati u istoj mapi. Ove komponente obično su zajedno u paketu u istom preuzimanju. Provjerite put i pokušajte ponovno.", @@ -169,7 +169,7 @@ "HeaderLoginFailure": "Neuspjela prijava", "HeaderMedia": "Medij", "HeaderMediaFolders": "Medijska mapa", - "HeaderMetadataSettings": "Postavke meta-podataka", + "HeaderMetadataSettings": "Postavke metapodataka", "HeaderMoreLikeThis": "Više ovakvih", "HeaderMyMedia": "Moji mediji", "HeaderNewApiKey": "Novi API ključ", @@ -262,7 +262,7 @@ "LabelCustomRating": "Prilagođena ocjena", "LabelDateAdded": "Datum dodavanja", "LabelDateAddedBehavior": "Ponašanje datuma dodanog za novi sadržaj", - "LabelDateAddedBehaviorHelp": "Ako je prisutna vrijednost meta-podataka, ona će se uvijek koristiti prije bilo kojih od ovih opcija.", + "LabelDateAddedBehaviorHelp": "Ako je prisutna vrijednost metapodataka, ona će se uvijek koristiti prije bilo kojih od ovih opcija.", "LabelDay": "Dan", "LabelDeathDate": "Datum smrti", "LabelDisplayName": "Prikaz naziva", @@ -322,13 +322,13 @@ "LabelMessageTitle": "Naslov poruke", "LabelMetadata": "Metapodaci", "LabelMetadataDownloadLanguage": "Preferirani jezik preuzimanja", - "LabelMetadataDownloadersHelp": "Omogućite i poredajte željene preuzimatelje meta-podataka po redu prioriteta. Manjeg prioriteta preuzimatelji koristit će se samo za ispunjavanje nedostajućih informacija.", - "LabelMetadataPath": "Put meta-podataka", - "LabelMetadataPathHelp": "Odredite prilagođenu lokaciju za preuzete ilustracije i meta-podatke.", - "LabelMetadataReaders": "Čitači meta-podataka", - "LabelMetadataReadersHelp": "Poredajte željene lokalne izvore meta-podataka po redu prioriteta. Prva nađena datoteka biti će čitana.", - "LabelMetadataSavers": "Snimači meta-podataka", - "LabelMetadataSaversHelp": "Odaberite formate datoteka za spremanje meta-podataka.", + "LabelMetadataDownloadersHelp": "Omogućite i poredajte željene preuzimatelje metapodataka po redu prioriteta. Manjeg prioriteta preuzimatelji koristit će se samo za ispunjavanje nedostajućih informacija.", + "LabelMetadataPath": "Putanja metapodataka", + "LabelMetadataPathHelp": "Odredite prilagođenu lokaciju za preuzete ilustracije i metapodatke.", + "LabelMetadataReaders": "Čitači metapodataka", + "LabelMetadataReadersHelp": "Poredajte željene lokalne izvore metapodataka po redu prioriteta. Prva pronađena datoteka biti se čitati.", + "LabelMetadataSavers": "Spremači metapodataka", + "LabelMetadataSaversHelp": "Odaberite formate datoteka za spremanje metapodataka.", "LabelMinBackdropDownloadWidth": "Minimalna širina pozadine za preuzimanje", "LabelMinResumeDuration": "Minimalno trajanje za nastavak", "LabelMinResumeDurationHelp": "Najkraća duljina videa u sekundama kojom će se spremiti mjesto reprodukcije i omogućiti nastavljanje.", @@ -475,9 +475,9 @@ "MessageReenableUser": "Pogledajte dolje za ponovno omogućenje", "MessageTheFollowingLocationWillBeRemovedFromLibrary": "Sljedeće lokacije medija biti će uklonjene iz vaše Jellyfin biblioteke", "MessageUnableToConnectToServer": "Nismo u mogućnosti spojiti se na odabrani poslužitelj. Provjerite dali je pokrenut i pokušajte ponovno.", - "MessageUnsetContentHelp": "Sadržaj će biti prikazan kao obične mape. Za najbolje rezultate upotrijebite upravitelj meta-podataka za postavljanje vrste sadržaja pod-mapa.", - "MetadataManager": "Upravitelj meta-podacima", - "MetadataSettingChangeHelp": "Promjena postavki meta-podataka utjecati će da novi sadržaji koji se dodaju idu naprijed. Za osvježavanje postojećih sadržaja otvorite zaslon pojedinosti i kliknite gumb za osvježavanje ili obavite skupno osvježavanje pomoću upravitelja meta-podataka.", + "MessageUnsetContentHelp": "Sadržaj će biti prikazan kao obične mape. Za najbolje rezultate upotrijebite upravitelj metapodataka za postavljanje vrste sadržaja podmapa.", + "MetadataManager": "Upravitelj metapodacima", + "MetadataSettingChangeHelp": "Promjena postavki metapodataka utjecati će da novi sadržaji koji se dodaju idu naprijed. Za osvježavanje postojećih sadržaja otvorite zaslon pojedinosti i kliknite gumb za osvježavanje ili obavite skupno osvježavanje pomoću upravitelja metapodataka.", "MinutesAfter": "Minuta nakon", "MinutesBefore": "Minuta prije", "Monday": "Ponedjeljak", @@ -494,7 +494,7 @@ "NewEpisodes": "Nove epizode", "NewEpisodesOnly": "Samo nove epizode", "News": "Vijesti", - "MessageNoNextUpItems": "Nije pronađeno. Počnite gledati vaše emisije!", + "MessageNoNextUpItems": "Ništa nije pronađeno. Počnite gledati vaše emisije!", "MessageNoPluginConfiguration": "Ovaj dodatak nema postavke za podesiti.", "NoSubtitleSearchResultsFound": "Nije ništa pronađeno.", "NumLocationsValue": "{0} mape", @@ -543,8 +543,8 @@ "OptionReleaseDate": "Datum izdavanja", "OptionRequirePerfectSubtitleMatch": "Preuzmi samo titlove koji se savršeno podudaraju s mojim video datotekama", "OptionResumable": "Nastavljanje", - "OptionSaveMetadataAsHidden": "Spremite meta-podatke i slike kao skrivene datoteke", - "OptionSaveMetadataAsHiddenHelp": "Promjena ovoga će se primjenjivati na nove meta-podatke spremljene unaprijed. Postojeće datoteke meta-podataka će se ažurirati sljedeći puta kada ih spremi Jellyfin Server.", + "OptionSaveMetadataAsHidden": "Spremite metapodatke i slike kao skrivene datoteke", + "OptionSaveMetadataAsHiddenHelp": "Promjena ovoga će se primjenjivati na nove metapodatke spremljene unaprijed. Postojeće datoteke metapodataka će se ažurirati sljedeći puta kada ih server spremi.", "OptionSpecialEpisode": "Specijalne epizode", "OptionTrackName": "Nazivu pjesme", "OptionTvdbRating": "Ocjena TVDB-a", @@ -570,7 +570,7 @@ "PlayFromBeginning": "Pokreni od početka", "PleaseAddAtLeastOneFolder": "Dodajte barem jednu mapu u ovu biblioteku klikom na gumb Dodaj.", "PleaseEnterNameOrId": "Unesite naziv ili vanjski Id.", - "PleaseRestartServerName": "Ponovno pokrenite Jellyfin Server - {0}.", + "PleaseRestartServerName": "Ponovno pokrenite Jellyfin Server – {0}.", "PleaseSelectTwoItems": "Molimo odaberite najmanje dvije stavke.", "Premiere": "Premijera", "Premieres": "Premijere", @@ -587,7 +587,7 @@ "MessageChangeRecordingPath": "Promjena mape za snimanje neće migrirati postojeće snimke iz stare lokacije na novu. Morat ćete ih pomicati ručno, ako to želite.", "RecordingScheduled": "Snimka je zakazana.", "Refresh": "Osviježi", - "RefreshDialogHelp": "Meta-podaci se osvježavaju na temelju postavki i internet usluga koje su omogućene u nadzornoj ploči Jellyfin Server-a.", + "RefreshDialogHelp": "Metapodaci se osvježavaju na temelju postavki i internet usluga koje su uključene u nadzornoj ploči.", "RefreshQueued": "Osviježi stavke na čekanju.", "ReleaseDate": "Datum izdavanja", "RememberMe": "Zapamti me", @@ -595,7 +595,7 @@ "RemoveFromPlaylist": "Ukloni iz popisa", "Repeat": "Ponovi", "RepeatEpisodes": "Ponovi reprize", - "ReplaceAllMetadata": "Zamijeni sve meta-podatke", + "ReplaceAllMetadata": "Zamijeni sve metapodatke", "ReplaceExistingImages": "Zamijeni postojeće slike", "ResumeAt": "Nastavi od {0}", "Runtime": "Trajanje", @@ -603,16 +603,16 @@ "Save": "Snimi", "Search": "Traži", "SearchForCollectionInternetMetadata": "Potraži na internetu ilustracije i metapodatke", - "SearchForMissingMetadata": "Potraga za meta-podacima koji nedostaju", + "SearchForMissingMetadata": "Traži nedostajuće metapodatke", "SearchForSubtitles": "Traži titlove", "SearchResults": "Rezultati pretraživanja", "Series": "Serija", "SeriesCancelled": "Serija je otkazana.", "SeriesRecordingScheduled": "Snimanje serije je zakazano.", "SeriesSettings": "Postavke serija", - "SeriesYearToPresent": "{0} - sada", - "ServerNameIsRestarting": "Jellyfin Server - {0} se ponovo pokreće.", - "ServerNameIsShuttingDown": "Jellyfin Server - {0} se gasi.", + "SeriesYearToPresent": "{0} – sada", + "ServerNameIsRestarting": "Server na {0} se ponovo pokreće.", + "ServerNameIsShuttingDown": "Server na {0} se gasi.", "ServerUpdateNeeded": "Jellyfin Server treba ažurirati. Da biste preuzeli najnoviju verziju, posjetite {0}", "Settings": "Postavke", "SettingsSaved": "Postavke spremljene.", @@ -667,7 +667,7 @@ "ValueOneSong": "1 pjesma", "ValueSeriesCount": "{0} serija", "ValueSongCount": "{0} pjesma", - "ValueSpecialEpisodeName": "Posebno - {0}", + "ValueSpecialEpisodeName": "Posebno – {0}", "ValueTimeLimitMultiHour": "Vremensko ograničenje: {0} sati", "ValueTimeLimitSingleHour": "Vremensko ograničenje: 1 sat", "ViewAlbum": "Pogledaj album", @@ -954,7 +954,7 @@ "HeaderImageOptions": "Mogućnosti slike", "HeaderHttpsSettings": "Postavke HTTPS-a", "HeaderFetcherSettings": "Postavke dohvaćanja", - "HeaderExternalIds": "Vanjski ID-jevi", + "HeaderExternalIds": "Eksterni ID-jevi", "HeaderBlockItemsWithNoRating": "Blokiraj stavke bez ili sa nepoznatim informacijama o ocjeni", "HeaderAutoDiscovery": "Mrežno otkrivanje", "HeaderAddUser": "Dodaj korisnika", @@ -1052,7 +1052,7 @@ "LabelSyncPlaySettingsSpeedToSyncHelp": "Metoda korekcije sinkronizacije koja se sastoji u ubrzavanju reprodukcije. Ispravak sinkronizacije mora biti omogućen.", "LabelSyncPlaySettingsSkipToSync": "Omogući SkipToSync", "LabelWeb": "Mreža", - "ListPaging": "{0}-{1} od {2}", + "ListPaging": "{0} – {1} od {2}", "LabelSyncPlaySyncMethod": "Način sinkronizacije", "MessageNoServersAvailable": "Nijedan server nije pronađen pomoću automatskog otkrivanja servera.", "OptionDateEpisodeAdded": "Datum dodane epizode", @@ -1121,7 +1121,7 @@ "LabelTranscodePath": "Putanja transkodiranja", "LabelSyncPlayHaltPlayback": "Prekini lokalnu reprodukciju", "OptionLoginAttemptsBeforeLockout": "Odredite koliko se netočnih pokušaja prijave može napraviti prije nego što dođe do zaključavanja.", - "OptionLoginAttemptsBeforeLockoutHelp": "Vrijednost nula znači nasljeđivanje zadane postavke od tri pokušaja za normalne korisnike i pet za administratore. Postavljanje na -1 će onemogućiti značajku.", + "OptionLoginAttemptsBeforeLockoutHelp": "Vrijednost nula znači nasljeđivanje zadane postavke od tri pokušaja za normalne korisnike i pet za administratore. Postavljanje na −1 će onemogućiti značajku.", "OptionMaxActiveSessionsHelp": "Vrijednost 0 će isključiti funkciju.", "OptionRandom": "Nasumično", "OriginalAirDate": "Izvorni datum emitiranja", @@ -1280,7 +1280,7 @@ "LabelParentNumber": "Broj roditelja", "LabelTonemappingPeak": "Vrh tonskog preslikavanja", "LabelPublishedServerUriHelp": "Nadjačaj URI koji koristi Jellyfin, na temelju sučelja ili IP adrese klijenta.", - "UseEpisodeImagesInNextUpHelp": "Odjeljci 'Sljedeće' i 'Nastavi gledati' koristit će slike epizoda kao minijature umjesto primarne minijature emisije.", + "UseEpisodeImagesInNextUpHelp": "Odjeljci 'Sljedeće na redu' i 'Nastavi gledati' koristit će slike epizoda kao minijature umjesto primarne minijature emisije.", "PreferEmbeddedTitlesOverFileNamesHelp": "Odredite naslov prikaza koji će se koristiti kada nisu dostupni internetski metapodaci ili lokalni metapodaci.", "SubtitleAppearanceSettingsDisclaimer": "Sljedeće postavke ne odnose se na gore navedene grafičke titlove ili ASS/SSA titlove koji imaju vlastite stilove.", "PlaybackData": "Informacije o reprodukciji", @@ -1309,7 +1309,7 @@ "TonemappingAlgorithmHelp": "Tonsko mapiranje se može fino podesiti. Ako niste upoznati s ovim opcijama, samo zadržite zadane. Preporučena vrijednost je 'BT.2390'.", "TV": "TV", "UnsupportedPlayback": "Jellyfin ne može dešifrirati sadržaj zaštićen DRM-om, ali bez obzira na to će se isprobati sav sadržaj, uključujući zaštićene naslove. Neke datoteke mogu izgledati potpuno crne zbog šrifrianja ili drugih nepodržanih funkcija, poput interaktivnih naslova.", - "UseEpisodeImagesInNextUp": "Koristite slike epizoda u odjeljcima \"Sljedeće\" i \"Nastavi gledati\"", + "UseEpisodeImagesInNextUp": "Koristite slike epizoda u odjeljcima \"Sljedeće na redu\" i \"Nastavi gledati\"", "UserAgentHelp": "Dostavite prilagođeno HTTP zaglavlje 'User-Agent'.", "Yadif": "Yet Another DeInterlacing Filter (YADIF)", "BackdropScreensaver": "Čuvar zaslona pozadinskog platna", @@ -1480,7 +1480,7 @@ "LabelTrickplayThreadsHelp": "Broj dretvi koji se prosljeđuje -threads argumentu alata ffmpeg.", "HeaderServerUnavailable": "Poslužitelj nedostupan", "DownloadManager": "Preuzimanja", - "BlockingScan": "S blokiranjem - postavlja skeniranje u red i čeka na završetak", + "BlockingScan": "Blokiranje – generiranje redova čekanja, blokira skeniranje dok se ne dovrši", "LabelImageInterval": "Interval slika", "LabelQscaleHelp": "Skala kvalitete (Qscale) za sličice koje stvara ffmpeg, gdje 2 označava najvišu, a 31 najnižu kvalitetu.", "LabelTrickplayThreads": "Broj dretvi za FFmpeg", From 487ea8d70872fa7b1e7b54a58bb14f58da1f77ef Mon Sep 17 00:00:00 2001 From: WellsTsai Date: Wed, 15 Apr 2026 09:37:36 -0400 Subject: [PATCH 096/695] Translated using Weblate (Chinese (Traditional Han script)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant/ --- src/strings/zh-tw.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/zh-tw.json b/src/strings/zh-tw.json index 1e518a16b1..24aa405afb 100644 --- a/src/strings/zh-tw.json +++ b/src/strings/zh-tw.json @@ -1872,5 +1872,6 @@ "LabelSlideshowInterval": "相片幻燈片播放間隔", "LabelSlideshowIntervalHelp": "幻燈片中每張相片顯示的時間(秒)。", "NewPlaylist": "新增播放清單", - "OptionDatePlaylistUpdated": "播放清單更新日期" + "OptionDatePlaylistUpdated": "播放清單更新日期", + "ActivitiesLoadError": "無法載入活動" } From 0ab68dbd76af3fbe075adb92d5f99a26a52ab60f Mon Sep 17 00:00:00 2001 From: Milo Ivir Date: Wed, 15 Apr 2026 10:22:45 -0400 Subject: [PATCH 097/695] Translated using Weblate (Croatian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hr/ --- src/strings/hr.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/strings/hr.json b/src/strings/hr.json index 0f3874cbd0..a7afc9bccc 100644 --- a/src/strings/hr.json +++ b/src/strings/hr.json @@ -124,7 +124,7 @@ "HeaderAlert": "Upozorenje", "HeaderApiKey": "API ključ", "HeaderApiKeys": "API ključevi", - "HeaderApiKeysHelp": "Vanjske aplikacije moraju imati API ključ kako bi komunicirale s serverom. Ključevi se izdaju prijavom s korisničkim računom ili ručnim odobravanjem zahtjeva ključa.", + "HeaderApiKeysHelp": "Eksterne aplikacije moraju imati API ključ kako bi komunicirale s serverom. Ključevi se izdaju prijavom s korisničkim računom ili ručnim odobravanjem zahtjeva ključa.", "HeaderApp": "Aplikacija", "HeaderAudioSettings": "Postavke zvuka", "HeaderBranding": "Brendiranje", @@ -430,7 +430,7 @@ "MediaInfoCodecTag": "Oznaka kodeka", "MediaInfoContainer": "Spremnik", "MediaInfoDefault": "Zadano", - "MediaInfoExternal": "Vanjski", + "MediaInfoExternal": "Eksterni", "MediaInfoForced": "Prisilno", "MediaInfoFramerate": "Okvirna brzina", "MediaInfoInterlaced": "Prepleteno", @@ -471,7 +471,7 @@ "MessagePasswordResetForUsers": "Lozinke su uklonjene za sljedeće korisnike. Za prijavu, prijavite se s praznom lozinkom.", "MessagePleaseEnsureInternetMetadata": "Molimo provjerite da je preuzimanje metadata sa interneta omogućeno.", "MessagePluginConfigurationRequiresLocalAccess": "Za podešavanje ovog dodatka prijavite se izravno na lokalni server.", - "MessagePluginInstallDisclaimer": "UPOZORENJE: Instalacija dodatka treće strane nosi rizike. Može sadržavati nestabilan ili zlonamjerni kod i može se promijeniti u bilo kojem trenutku. Instalirajte samo dodatke autora kojima vjerujete i budite svjesni mogućih učinaka koje može imati, uključujući upite vanjskih usluga, dulja skeniranja knjižnica ili dodatnu obradu u pozadini.", + "MessagePluginInstallDisclaimer": "UPOZORENJE: Instalacija dodatka treće strane nosi rizike. Može sadržavati nestabilan ili zlonamjerni kod i može se promijeniti u bilo kojem trenutku. Instalirajte samo dodatke autora kojima vjerujete i budite svjesni mogućih učinaka koje može imati, uključujući upite eksternih usluga, dulja skeniranja biblioteke ili dodatnu obradu u pozadini.", "MessageReenableUser": "Pogledajte dolje za ponovno omogućenje", "MessageTheFollowingLocationWillBeRemovedFromLibrary": "Sljedeće lokacije medija biti će uklonjene iz vaše Jellyfin biblioteke", "MessageUnableToConnectToServer": "Nismo u mogućnosti spojiti se na odabrani poslužitelj. Provjerite dali je pokrenut i pokušajte ponovno.", @@ -524,7 +524,7 @@ "OptionEnableAccessFromAllDevices": "Omogući pristup svim uređajima", "OptionEnableAccessToAllChannels": "Omogući pristup svim kanalima", "OptionEnableAccessToAllLibraries": "Omogući pristup svim bibliotekama", - "OptionEnableExternalContentInSuggestions": "Omogući vanjske sadržaje u prijedlozima", + "OptionEnableExternalContentInSuggestions": "Omogući eksterne sadržaje u prijedlozima", "OptionEnableExternalContentInSuggestionsHelp": "Dopusti internet kratkim filmovima i TV programima uživo da budu uključeni u preporučenom sadržaju.", "OptionEnableForAllTuners": "Omogući za sve TV/Radio uređaje", "OptionEveryday": "Svaki dan", @@ -851,7 +851,7 @@ "Episodes": "Epizode", "Episode": "Epizoda", "EnableHardwareEncoding": "Omogući hardversko kodiranje", - "EnableExternalVideoPlayers": "Vanjski video player", + "EnableExternalVideoPlayers": "Eksterni video player", "EnableDecodingColorDepth10Vp9": "Omogući 10-bitno hardversko dekodiranje za VP9", "EnableDecodingColorDepth10Hevc": "Omogući 10-bitno hardversko dekodiranje za HEVC", "EnableCinemaMode": "Kino ugođaj", @@ -913,7 +913,7 @@ "BurnSubtitlesHelp": "Odredite treba li server ugraditi titlove tijekom transkodiranja videozapisa. Izbjegavanje toga uvelike će poboljšati performanse. Odaberite „Automatski“ za ugradnju slikovnih formata (VobSub, PGS, SUB, IDX itd.) i određenih ASS ili SSA titlova.", "BoxSet": "Komplet", "Authorize": "Ovlastite", - "EnableExternalVideoPlayersHelp": "Prilikom pokretanja videozapisa prikazat će se izbornik vanjskog playera.", + "EnableExternalVideoPlayersHelp": "Prilikom pokretanja videozapisa prikazat će se izbornik eksternog playera.", "DisplayMissingEpisodesWithinSeasonsHelp": "To mora biti omogućeno i za TV biblioteke u konfiguraciji servera.", "DisplayInOtherHomeScreenSections": "Prikaz u odjeljcima početnog zaslona kao što su 'Najnoviji mediji' i 'Nastavi gledati'", "DirectStreamHelp1": "Videostream je kompatibilan s uređajem, ali ima nekompatibilan audio format (DTS, Dolby TrueHD, itd.) ili broj audio kanala. Videostream će se u hodu prepakirati bez gubitaka prije slanja na uređaj. Transkodirat će se samo audio stream.", From 0d9f99f9501595d288d46631e21882dea6a2e9dd Mon Sep 17 00:00:00 2001 From: Milo Ivir Date: Wed, 15 Apr 2026 10:25:42 -0400 Subject: [PATCH 098/695] Translated using Weblate (Croatian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hr/ --- src/strings/hr.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/strings/hr.json b/src/strings/hr.json index a7afc9bccc..fa3b0317e2 100644 --- a/src/strings/hr.json +++ b/src/strings/hr.json @@ -13,7 +13,7 @@ "BirthDateValue": "Rođen: {0}", "BirthLocation": "Lokacija rođenja", "BirthPlaceValue": "Mjesto rođenja: {0}", - "ButtonAddMediaLibrary": "Dodaj medijsku bibilioteku", + "ButtonAddMediaLibrary": "Dodaj bibilioteku medija", "ButtonAddScheduledTaskTrigger": "Dodaj okidač", "ButtonAddServer": "Dodaj server", "ButtonAddUser": "Dodaj korisnika", @@ -569,7 +569,7 @@ "PlayAllFromHere": "Pokreni sve odavde", "PlayFromBeginning": "Pokreni od početka", "PleaseAddAtLeastOneFolder": "Dodajte barem jednu mapu u ovu biblioteku klikom na gumb Dodaj.", - "PleaseEnterNameOrId": "Unesite naziv ili vanjski Id.", + "PleaseEnterNameOrId": "Unesite ime ili eksterni ID.", "PleaseRestartServerName": "Ponovno pokrenite Jellyfin Server – {0}.", "PleaseSelectTwoItems": "Molimo odaberite najmanje dvije stavke.", "Premiere": "Premijera", @@ -741,7 +741,7 @@ "ButtonInfo": "Info", "ButtonAddImage": "Dodaj sliku", "Box": "Kutija", - "AskAdminToCreateLibrary": "Traži administratora da kreira biblioteku.", + "AskAdminToCreateLibrary": "Traži administratora da stvori biblioteku.", "PictureInPicture": "Slika u slici", "OptionIsSD": "SD", "OptionIsHD": "HD", @@ -1207,7 +1207,7 @@ "VideoRangeTypeNotSupported": "Vrsta raspona videa nije podržana", "LabelHardwareEncodingOptions": "Opcije hardverskog kodiranja", "VideoBitrateNotSupported": "Bitrate videa nije podržan", - "AudioIsExternal": "Audio zapis je vanjski", + "AudioIsExternal": "Audio zapis je eksterni", "DeletedScene": "Obrisana Scena", "BehindTheScenes": "Iza kulisa", "ContainerBitrateExceedsLimit": "Bitrate videa premašuje ograničenje", From 7abdd5d5d2bfdf92b8c7409e12f7d4259e890154 Mon Sep 17 00:00:00 2001 From: Milo Ivir Date: Wed, 15 Apr 2026 10:32:16 -0400 Subject: [PATCH 099/695] Translated using Weblate (Croatian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hr/ --- src/strings/hr.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/strings/hr.json b/src/strings/hr.json index fa3b0317e2..ef85ec9208 100644 --- a/src/strings/hr.json +++ b/src/strings/hr.json @@ -949,7 +949,7 @@ "HeaderMusicQuality": "Kvaliteta glazbe", "HeaderLiveTvTunerSetup": "Postavljanje Tunera za TV Uživo", "HeaderLibraryOrder": "Poredak biblioteka", - "HeaderKodiMetadataHelp": "Za omogućivanje ili isključivanje NFO metapodataka, uredite biblioteku i pronađite odjeljak za spremanje metapodataka.", + "HeaderKodiMetadataHelp": "Za uključivanje ili isključivanje NFO metapodataka, uredite biblioteku i pronađite odjeljak za spremanje metapodataka.", "HeaderInstantMix": "Trenutno miješanje", "HeaderImageOptions": "Mogućnosti slike", "HeaderHttpsSettings": "Postavke HTTPS-a", @@ -1335,7 +1335,7 @@ "LabelHomeScreenSectionValue": "{0}. odjeljak početne", "AllowContentWithTagsHelp": "Prikaži multimediju s barem jednom od odabranih oznaka.", "ChannelResolutionSDPAL": "SD (PAL)", - "ConfirmDeleteSeries": "Brisanjem ovog serijala obrisat će se {0} epizoda s podatkovnog sistema i multimedijske biblioteke. Želite li nastaviti?", + "ConfirmDeleteSeries": "Brisanjem ovog serijala obrisat će se {0} epizoda s podatkovnog sistema i multimedijske biblioteke. Jeste li sigurni da želite nastaviti?", "DeleteEpisode": "Obriši epizodu", "DlnaMovedMessage": "DLNA funkcije su dostupne putem dodatka za Jellyfin.", "LabelBuildVersion": "Verzija programa", @@ -1386,7 +1386,7 @@ "Retry": "Pokušaj ponovno", "DisplayLoadError": "Dogodila se greška prilikom učitavanja podataka za konfiguraciju.", "EnableLibrary": "Uključite biblioteku", - "EnableLibraryHelp": "Isključivanje bibliotekeće ju sakriti od svih korisnika.", + "EnableLibraryHelp": "Isključivanje biblioteke će ju sakriti od svih korisnika.", "AlwaysBurnInSubtitleWhenTranscoding": "Uvijek ugradi titlove tijekom transkodiranja", "AlwaysRemuxFlacAudioFilesHelp": "Ako imate datoteke koje Vaš preglednik ne želi izvoditi ili kada neprecizno izračuna vremenske oznake, uključite ovo kao zaobilazak.", "AlwaysRemuxMp3AudioFilesHelp": "Ako imate datoteke za koje Vaš preglednik neprecizno izračunava vremenske oznake, uključite ovo kao zaobilazak.", @@ -1471,7 +1471,7 @@ "LabelTileWidthHelp": "Maksimalni broj slika po pločici u smjeru X.", "LabelWidthResolutions": "Horizontalne razlučivosti", "CopyLogSuccess": "Sadržaj dnevnika je uspješno kopiran.", - "ConfirmDeleteLyrics": "Brisanjem ovih stihova trajno ćete ih ukloniti i s datotečnog sustava i iz vaše biblioteke. Jeste li sigurni da želite nastaviti?", + "ConfirmDeleteLyrics": "Brisanjem ovih tekstova pjesama trajno ćete ih ukloniti iz datotečnog sustava kao i iz vaše biblioteke. Jeste li sigurni da želite nastaviti?", "HeaderDeleteLyrics": "Brisanje stihova", "LabelQscale": "Qscale (Skala kvantizacije)", "PriorityNormal": "Normalni", From 42a7a69747760df8db14dfa2a3b45c265955e4f9 Mon Sep 17 00:00:00 2001 From: Milo Ivir Date: Wed, 15 Apr 2026 10:34:15 -0400 Subject: [PATCH 100/695] Translated using Weblate (Croatian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hr/ --- src/strings/hr.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/strings/hr.json b/src/strings/hr.json index ef85ec9208..c836c45f47 100644 --- a/src/strings/hr.json +++ b/src/strings/hr.json @@ -165,7 +165,7 @@ "HeaderLatestRecordings": "Nedavno dodane snimke", "HeaderLibraries": "Biblioteke", "HeaderLibraryAccess": "Pristup biblioteci", - "HeaderLibraryFolders": "Mape medija", + "HeaderLibraryFolders": "Mape biblioteke", "HeaderLoginFailure": "Neuspjela prijava", "HeaderMedia": "Medij", "HeaderMediaFolders": "Medijska mapa", @@ -277,7 +277,7 @@ "LabelEpisodeNumber": "Broj epizode", "LabelEvent": "Događaj", "LabelEveryXMinutes": "Svaki", - "LabelExtractChaptersDuringLibraryScan": "Izvadi slike poglavlja dok traje skeniranje biblioteke", + "LabelExtractChaptersDuringLibraryScan": "Izdvoji slike poglavlja dok traje skeniranje biblioteke", "LabelExtractChaptersDuringLibraryScanHelp": "Generiraj slike poglavlje kad se videozapisi uvezu tijekom skeniranja biblioteke. U suprotnom, izdvajanje će se odraditi u rasporedu zadatka slika poglavlja, čime se omogućuje da se skeniranje redovne biblioteke završi brže.", "LabelFailed": "Neuspješno", "LabelFileOrUrl": "Datoteka ili url", @@ -1343,7 +1343,7 @@ "LabelMaxAudiobookResume": "Preostalo vrijeme za nastavak audioknjige", "LabelDummyChapterDurationHelp": "Interval između fiktivnih poglavlja u sekundama. Postavi na 0 kako bi se onemogućilo stvaranje fiktivnih poglavlja. Izmjena ove postavke nema učinka za postojeća fiktivna poglavlja.", "LabelEnableAudioVbrHelp": "Promjenjiv broj bitova u sekundi nudi bolju kvalitetu naspram postavljanja prosječnog broja bitova u sekundi. U nekim rijetkim slučajevima ova postavka može prouzročiti učestalo učitavanje ili probleme s kompatibilnosti.", - "LabelLibraryPageSize": "Broj prikazanih stavki biblioteke", + "LabelLibraryPageSize": "Velična stranice biblioteke", "LabelServerVersion": "Verzija poslužitelja", "LabelMinAudiobookResume": "Minimalno vrijeme za nastavak audio knjige u minutama", "LabelSyncPlayNoGroups": "Nema dostupnih grupa", From 6ec2b821264a19c0c91f0225510f779aa644ba74 Mon Sep 17 00:00:00 2001 From: Milo Ivir Date: Wed, 15 Apr 2026 10:40:36 -0400 Subject: [PATCH 101/695] Translated using Weblate (Croatian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hr/ --- src/strings/hr.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/strings/hr.json b/src/strings/hr.json index c836c45f47..7617fda8bc 100644 --- a/src/strings/hr.json +++ b/src/strings/hr.json @@ -473,7 +473,7 @@ "MessagePluginConfigurationRequiresLocalAccess": "Za podešavanje ovog dodatka prijavite se izravno na lokalni server.", "MessagePluginInstallDisclaimer": "UPOZORENJE: Instalacija dodatka treće strane nosi rizike. Može sadržavati nestabilan ili zlonamjerni kod i može se promijeniti u bilo kojem trenutku. Instalirajte samo dodatke autora kojima vjerujete i budite svjesni mogućih učinaka koje može imati, uključujući upite eksternih usluga, dulja skeniranja biblioteke ili dodatnu obradu u pozadini.", "MessageReenableUser": "Pogledajte dolje za ponovno omogućenje", - "MessageTheFollowingLocationWillBeRemovedFromLibrary": "Sljedeće lokacije medija biti će uklonjene iz vaše Jellyfin biblioteke", + "MessageTheFollowingLocationWillBeRemovedFromLibrary": "Sljedeće lokacije medija će se ukloniti iz vaše biblioteke", "MessageUnableToConnectToServer": "Nismo u mogućnosti spojiti se na odabrani poslužitelj. Provjerite dali je pokrenut i pokušajte ponovno.", "MessageUnsetContentHelp": "Sadržaj će biti prikazan kao obične mape. Za najbolje rezultate upotrijebite upravitelj metapodataka za postavljanje vrste sadržaja podmapa.", "MetadataManager": "Upravitelj metapodacima", @@ -482,7 +482,7 @@ "MinutesBefore": "Minuta prije", "Monday": "Ponedjeljak", "MoreFromValue": "Više od {0}", - "MoreUsersCanBeAddedLater": "Više korisnika može se dodati kasnije unutar nadzorne ploče.", + "MoreUsersCanBeAddedLater": "Više korisnika se mogu dodati kasnije unutar nadzorne ploče.", "MoveLeft": "Pomakni ulijevo", "MoveRight": "Pomakni udesno", "Movies": "Filmovi", @@ -568,7 +568,7 @@ "Play": "Pokreni", "PlayAllFromHere": "Pokreni sve odavde", "PlayFromBeginning": "Pokreni od početka", - "PleaseAddAtLeastOneFolder": "Dodajte barem jednu mapu u ovu biblioteku klikom na gumb Dodaj.", + "PleaseAddAtLeastOneFolder": "Dodajte barem jednu mapu u ovu biblioteku klikom na gumb '+' u odjeljku 'Mape'.", "PleaseEnterNameOrId": "Unesite ime ili eksterni ID.", "PleaseRestartServerName": "Ponovno pokrenite Jellyfin Server – {0}.", "PleaseSelectTwoItems": "Molimo odaberite najmanje dvije stavke.", @@ -673,7 +673,7 @@ "ViewAlbum": "Pogledaj album", "Wednesday": "Srijeda", "WelcomeToProject": "Dobrodošli u Jellyfin!", - "WizardCompleted": "To je sve što nam treba za sada. Jellyfin je počeo prikupljati podatke o vašoj medijskoj knjižnici. Provjerite neke od naših aplikacija, a zatim kliknite na Završi za prikaz Serverske kontrolne ploče.", + "WizardCompleted": "To je sve što nam treba za sada. Jellyfin je počeo prikupljati podatke o vašoj medijskoj biblioteci. Provjerite neke od naših aplikacija, a zatim kliknite na Završi za prikaz Serverske kontrolne ploče.", "Writer": "Pisac", "XmlTvKidsCategoriesHelp": "Programi s tim kategorijama će biti prikazani kao dječji programi. Odvojite više s '|'.", "XmlTvMovieCategoriesHelp": "Programi s tim kategorijama će biti prikazani kao filmski programi. Odvojite više s '|'.", @@ -1000,7 +1000,7 @@ "LabelDeinterlaceMethod": "Metoda deinterlacinga", "LabelDefaultScreen": "Zadani zaslon", "LabelDateTimeLocale": "Lokalizacija datuma i vremena", - "LabelDashboardTheme": "Tema nadzorne ploče", + "LabelDashboardTheme": "Tema nadzorne ploče servera", "LabelCustomCertificatePathHelp": "Put do PKCS #12 datoteke koja sadrži cerfitikat i privatni ključ kako bi se omogučila podrška za TLS na vlastitoj domeni.", "LabelCustomCertificatePath": "Put do vlastitog SSL certifikata", "LabelCurrentStatus": "Trenutni status", @@ -1273,7 +1273,7 @@ "HeaderGuestCast": "Gostujuće uloge", "LabelKodiMetadataUser": "Spremi stanje gledanja u NFO datoteke za", "PersonRole": "kao {0}", - "LabelLibraryPageSizeHelp": "Postavite količinu stavki za prikaz na stranici knjižnice. Postavite na 0 kako biste onemogućili kreiranje stranica. Imajte na umu da postavljanje vrijednosti na 0 ili na bilo koju vrijedost veću od 100 može dovesti do greški i smanjenu performansi.", + "LabelLibraryPageSizeHelp": "Postavite količinu stavki za prikaz na stranici biblioteke. Postavite na 0 kako biste onemogućili kreiranje stranica. Imajte na umu da postavljanje vrijednosti na 0 ili na bilo koju vrijedost veću od 100 može dovesti do greški i smanjenu performansi.", "ShowTitle": "Prikaži naslov", "OnlyImageFormats": "Samo formati slika (VobSub, PGS, SUB)", "LabelKodiMetadataUserHelp": "Spremite podatke o gledanju u NFO datoteke za potrebe drugih primjena.", @@ -1607,7 +1607,7 @@ "MessageNoItemsAvailable": "Trenutačno nije dostupna nijedna stavka.", "MessageNoFavoritesAvailable": "Trenutačno nije dostupan nijedan favorit.", "MessagePluginInstalled": "Dodatak je uspješno instaliran. Server će se morati ponovno pokrenuti kako bi promjene stupile na snagu.", - "MessageRenameMediaFolder": "Preimenovanje medijske biblioteke prouzročiti će gubitak svih metapodataka, nastavite oprezno.", + "MessageRenameMediaFolder": "Preimenovanje biblioteke medija će prouzročiti gubitak svih metapodataka, nastavite oprezno.", "MessageRestoreInProgress": "Obnova je u tijeku", "MessageRestoreSuccess": "Obnova je uspješno završena", "MessageSyncPlayUserJoined": "{0} se pridružio(la) grupi.", From 8e29923036d3b8ecc30ec089b6b2b41da1a33f8a Mon Sep 17 00:00:00 2001 From: Milo Ivir Date: Wed, 15 Apr 2026 10:44:55 -0400 Subject: [PATCH 102/695] Translated using Weblate (Croatian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hr/ --- src/strings/hr.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/strings/hr.json b/src/strings/hr.json index 7617fda8bc..b4210dea34 100644 --- a/src/strings/hr.json +++ b/src/strings/hr.json @@ -301,7 +301,7 @@ "LabelKodiMetadataDateFormat": "Format datuma izdanja", "LabelKodiMetadataDateFormatHelp": "Svi datumi unutar NFO-a biti će čitani i pisani koristeći ovaj format.", "LabelKodiMetadataEnableExtraThumbs": "Kopiraj dodatnu ilustraciju obožavatelja u polje dodatnih minijatura", - "LabelKodiMetadataEnableExtraThumbsHelp": "Prilikom preuzimanja se slike mogu spremiti u dodatne islustracije obožavateljai i posebne minijature za maksimalnu kompatibilnosti Kodi korisničkog sučelja.", + "LabelKodiMetadataEnableExtraThumbsHelp": "Prilikom preuzimanja se slike mogu spremiti u dodatne islustracije obožavateljai i dodatne minijature za maksimalnu kompatibilnosti Kodi korisničkog sučelja.", "LabelKodiMetadataEnablePathSubstitution": "Omoguči zamjensku putanju", "LabelKodiMetadataEnablePathSubstitutionHelp": "Omogućuje zamjensku putanju putanje slika koristeći serverskih postavka zamjenske putanje.", "LabelKodiMetadataSaveImagePaths": "Spremanje staze slika unutar NFO datoteka", @@ -358,7 +358,7 @@ "LabelPlayDefaultAudioTrack": "Pokreni zadani audio zapis bez obzira na jezik", "LabelPlaylist": "Playlista", "LabelPreferredDisplayLanguage": "Preferirani jezik prikaza", - "LabelProfileContainer": "Spremnik", + "LabelProfileContainer": "Kontejner", "LabelProtocol": "Protokol", "LabelPublicHttpPort": "Broj javnog HTTP porta", "LabelPublicHttpPortHelp": "Broj javnog porta koji treba biti mapiran na lokalni HTTP port.", @@ -428,7 +428,7 @@ "MediaInfoChannels": "Kanali", "MediaInfoCodec": "Kodek", "MediaInfoCodecTag": "Oznaka kodeka", - "MediaInfoContainer": "Spremnik", + "MediaInfoContainer": "Kontejner", "MediaInfoDefault": "Zadano", "MediaInfoExternal": "Eksterni", "MediaInfoForced": "Prisilno", @@ -673,7 +673,7 @@ "ViewAlbum": "Pogledaj album", "Wednesday": "Srijeda", "WelcomeToProject": "Dobrodošli u Jellyfin!", - "WizardCompleted": "To je sve što nam treba za sada. Jellyfin je počeo prikupljati podatke o vašoj medijskoj biblioteci. Provjerite neke od naših aplikacija, a zatim kliknite na Završi za prikaz Serverske kontrolne ploče.", + "WizardCompleted": "To je sve što nam treba za sada. Jellyfin je počeo prikupljati podatke o vašoj medijskoj biblioteci. Provjerite neke od naših aplikacija, a zatim kliknite na Završi za prikaz nadzorne ploče.", "Writer": "Pisac", "XmlTvKidsCategoriesHelp": "Programi s tim kategorijama će biti prikazani kao dječji programi. Odvojite više s '|'.", "XmlTvMovieCategoriesHelp": "Programi s tim kategorijama će biti prikazani kao filmski programi. Odvojite više s '|'.", @@ -1381,7 +1381,7 @@ "CoverArtist": "Ilustrator omota", "Creator": "Autor", "MessageImageTypeNotSelected": "Molimo odaberite vrstu slike u padajućem izborniku.", - "AllowFmp4TranscodingContainerHelp": "Dopusti fMP4 spremnik transkodiranja za ovaj tuner za omogućavanje HEVC i HDR sadržaja. Nisu svi tuneri kompatibilni s ovim spremnikom. Isključite ovu opciju ako imate problema s reprodukcijom.", + "AllowFmp4TranscodingContainerHelp": "Dopusti fMP4 kontejner transkodiranja za ovaj tuner za omogućavanje HEVC i HDR sadržaja. Nisu svi tuneri kompatibilni s ovim spremnikom. Isključite ovu opciju ako imate problema s reprodukcijom.", "Custom": "Prilagođeno", "Retry": "Pokušaj ponovno", "DisplayLoadError": "Dogodila se greška prilikom učitavanja podataka za konfiguraciju.", From a56da49fed682b60dfed49731e85e54b39d2f5f1 Mon Sep 17 00:00:00 2001 From: Milo Ivir Date: Wed, 15 Apr 2026 10:49:28 -0400 Subject: [PATCH 103/695] Translated using Weblate (Croatian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hr/ --- src/strings/hr.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/strings/hr.json b/src/strings/hr.json index b4210dea34..7948b84cfe 100644 --- a/src/strings/hr.json +++ b/src/strings/hr.json @@ -735,7 +735,7 @@ "Connect": "Spoji se", "ClientSettings": "Postavke klijenta", "ButtonTogglePlaylist": "Playlista", - "ButtonSplit": "Odvoji", + "ButtonSplit": "Rastavi", "ButtonStop": "Prekini", "ButtonScanAllLibraries": "Skeniraj sve biblioteke", "ButtonInfo": "Info", @@ -1733,7 +1733,7 @@ "Unplayed": "Nereproducirano", "Up": "Gore", "Upload": "Prenesi", - "UseCustomTagDelimitersHelp": "Rastavi oznake umjetnika/žanra s prilagođenim znakovima.", + "UseCustomTagDelimitersHelp": "Rastavi oznake izvođača/žanra s prilagođenim znakovima.", "ValueOneAlbum": "1 album", "Watch": "Gledaj", "Watched": "Pogledano", @@ -1776,5 +1776,6 @@ "TheseSettingsAffectSubtitlesOnThisDevice": "Ove postavke utječu na titlove na ovom uređaju", "LabelFallbackFontPathHelp": "Neki klijenti koriste ove fontove za prikaz titlova. Za više informacija pogledajte dokumentaciju.", "EnableFallbackFontHelp": "Uključite prilagođene alternativne fontove. To može izbjeći problem netočnog prikazivanja titlova.", - "SubtitleDownloadersHelp": "Uključite i rangirajte preferirane programe za preuzimanje titlova prema prioritetu." + "SubtitleDownloadersHelp": "Uključite i rangirajte preferirane programe za preuzimanje titlova prema prioritetu.", + "MessageSplitVersionsError": "Dogodila se greška prilikom rastavljana verzija" } From 47040d4d546c96013c6ad80bc315757b1e5fc20b Mon Sep 17 00:00:00 2001 From: Milo Ivir Date: Wed, 15 Apr 2026 10:50:46 -0400 Subject: [PATCH 104/695] Translated using Weblate (Croatian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hr/ --- src/strings/hr.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/hr.json b/src/strings/hr.json index 7948b84cfe..b3f7f02da7 100644 --- a/src/strings/hr.json +++ b/src/strings/hr.json @@ -721,7 +721,7 @@ "AllowMediaConversion": "Dopusti konverziju medija", "AllLanguages": "Svi jezici", "Alerts": "Upozorenja", - "AlbumArtist": "Izvođač na albumu", + "AlbumArtist": "Izvođač albuma", "Album": "Album", "AddToPlayQueue": "Dodaj u popis za izvođenje", "Banner": "Plakat", @@ -1404,7 +1404,7 @@ "DateModified": "Datum izmjenjivanja", "AllowStreamSharingHelp": "Dopusti Jellyfinu da udvostruči mpegts stream iz tunera i podijeli novu kopiju streama sa svojim klijentima. Ovo je korisno kada tuner ima ograničen broj stream-ova, no može uzrokovati poteškoće pri reprodukciji.", "AlwaysBurnInSubtitleWhenTranscodingHelp": "Ugradi titlove u video stream kada se aktivira transkodiranje. Ovo osigurava sinkronizaciju titlova nakon transkodiranja, nauštrb smanjena brzine transkodiranja.", - "AndOtherArtists": "{0} i {1} drugih umjetnika.", + "AndOtherArtists": "{0} i {1} drugih izvođača.", "OptionForceRemoteSourceTranscoding": "Prisili transkodiranje udaljenih medijskih izvora kao što je Live TV", "Transcoding": "Transkodiranje", "LabelTrickplayAccelEncoding": "Aktiviraj hardversko ubrzano MJPEG kodiranje", From c8e2e85f600b43b5be864c54589c2e0aa2e0cced Mon Sep 17 00:00:00 2001 From: Milo Ivir Date: Wed, 15 Apr 2026 10:52:51 -0400 Subject: [PATCH 105/695] Translated using Weblate (Croatian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hr/ --- src/strings/hr.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/hr.json b/src/strings/hr.json index b3f7f02da7..751e33a4f2 100644 --- a/src/strings/hr.json +++ b/src/strings/hr.json @@ -1777,5 +1777,7 @@ "LabelFallbackFontPathHelp": "Neki klijenti koriste ove fontove za prikaz titlova. Za više informacija pogledajte dokumentaciju.", "EnableFallbackFontHelp": "Uključite prilagođene alternativne fontove. To može izbjeći problem netočnog prikazivanja titlova.", "SubtitleDownloadersHelp": "Uključite i rangirajte preferirane programe za preuzimanje titlova prema prioritetu.", - "MessageSplitVersionsError": "Dogodila se greška prilikom rastavljana verzija" + "MessageSplitVersionsError": "Dogodila se greška prilikom rastavljana verzija", + "ViewAlbumArtist": "Prikaži izvođača albuma", + "PreferNonstandardArtistsTag": "Preferiraj oznaku ARTISTS ako je dostupna" } From 5a9889a34ed75ed0bad8c106c142599661bef597 Mon Sep 17 00:00:00 2001 From: Milo Ivir Date: Wed, 15 Apr 2026 10:58:15 -0400 Subject: [PATCH 106/695] Translated using Weblate (Croatian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hr/ --- src/strings/hr.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/hr.json b/src/strings/hr.json index 751e33a4f2..99686d9129 100644 --- a/src/strings/hr.json +++ b/src/strings/hr.json @@ -1779,5 +1779,6 @@ "SubtitleDownloadersHelp": "Uključite i rangirajte preferirane programe za preuzimanje titlova prema prioritetu.", "MessageSplitVersionsError": "Dogodila se greška prilikom rastavljana verzija", "ViewAlbumArtist": "Prikaži izvođača albuma", - "PreferNonstandardArtistsTag": "Preferiraj oznaku ARTISTS ako je dostupna" + "PreferNonstandardArtistsTag": "Preferiraj oznaku IZVOĐAČI ako je dostupna", + "PreferNonstandardArtistsTagHelp": "Koristite nestandardnu oznaku IZVOĐAČI umjesto oznake IZVOĐAČ kada je dostupna." } From 49f2f22be721d05c5d6a8271c4b582de40d4348b Mon Sep 17 00:00:00 2001 From: Milo Ivir Date: Wed, 15 Apr 2026 11:00:50 -0400 Subject: [PATCH 107/695] Translated using Weblate (Croatian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hr/ --- src/strings/hr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/hr.json b/src/strings/hr.json index 99686d9129..54ab9c4069 100644 --- a/src/strings/hr.json +++ b/src/strings/hr.json @@ -55,7 +55,7 @@ "CancelRecording": "Prekini snimanje", "CancelSeries": "Odustani od serije", "Categories": "Kategorije", - "ChannelAccessHelp": "Odaberite kanale za dijeljenje sa ovim korisnikom. Administratori će moći uređivati sve kanale koristeći uređivač metapodataka.", + "ChannelAccessHelp": "Odaberite kanale za dijeljenje s ovim korisnikom. Administratori će moći uređivati sve kanale koristeći upravljač metapodataka.", "ChannelNameOnly": "Kanal {0} samo", "ChannelNumber": "Broj kanala", "CinemaModeConfigurationHelp": "Ugođaj kina donosi iskustvo kina izravno u vaš dnevni boravak s mogućnošću da se pokreću najave filmova i određeni isječci početaka medija prije glavne funkcije.", From 0eb761309adbe5a52e330f0d39ac9433d9dc548c Mon Sep 17 00:00:00 2001 From: Milo Ivir Date: Wed, 15 Apr 2026 11:02:24 -0400 Subject: [PATCH 108/695] Translated using Weblate (Croatian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hr/ --- src/strings/hr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/hr.json b/src/strings/hr.json index 54ab9c4069..3cfc6b09e4 100644 --- a/src/strings/hr.json +++ b/src/strings/hr.json @@ -414,7 +414,7 @@ "LabelZipCode": "Poštanski broj", "LabelffmpegPath": "FFmpeg putanja", "LabelffmpegPathHelp": "Putanja do FFmpeg aplikacijske datoteke ili mape koja sadrži FFmpeg.", - "LibraryAccessHelp": "Odaberite medijske mape za djeljenje sa ovim korisnikom. Administratori će moći mjenjati sve mape preko Metadata menadžera.", + "LibraryAccessHelp": "Odaberite mape medija za djeljenje s ovim korisnikom. Administratori će moći uređivati sve mape koristeći upravljač metapodataka.", "Live": "Uživo", "LiveBroadcasts": "Emitiranja uživo", "MapChannels": "Mapiraj kanale", From 11f2d38b6b18fbdf90570eaa627035e83eff1dd0 Mon Sep 17 00:00:00 2001 From: Milo Ivir Date: Wed, 15 Apr 2026 11:04:37 -0400 Subject: [PATCH 109/695] Translated using Weblate (Croatian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hr/ --- src/strings/hr.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/strings/hr.json b/src/strings/hr.json index 3cfc6b09e4..2df2b04ba0 100644 --- a/src/strings/hr.json +++ b/src/strings/hr.json @@ -475,9 +475,9 @@ "MessageReenableUser": "Pogledajte dolje za ponovno omogućenje", "MessageTheFollowingLocationWillBeRemovedFromLibrary": "Sljedeće lokacije medija će se ukloniti iz vaše biblioteke", "MessageUnableToConnectToServer": "Nismo u mogućnosti spojiti se na odabrani poslužitelj. Provjerite dali je pokrenut i pokušajte ponovno.", - "MessageUnsetContentHelp": "Sadržaj će biti prikazan kao obične mape. Za najbolje rezultate upotrijebite upravitelj metapodataka za postavljanje vrste sadržaja podmapa.", - "MetadataManager": "Upravitelj metapodacima", - "MetadataSettingChangeHelp": "Promjena postavki metapodataka utjecati će da novi sadržaji koji se dodaju idu naprijed. Za osvježavanje postojećih sadržaja otvorite zaslon pojedinosti i kliknite gumb za osvježavanje ili obavite skupno osvježavanje pomoću upravitelja metapodataka.", + "MessageUnsetContentHelp": "Sadržaj će se prikazati u obliku običnih mapa. Za najbolje rezultate upotrijebite upravljač metapodataka za postavljanje vrste sadržaja podmapa.", + "MetadataManager": "Upravljač metapodacima", + "MetadataSettingChangeHelp": "Promjena postavki metapodataka utjecati će da novi sadržaji koji se dodaju idu naprijed. Za osvježavanje postojećih sadržaja otvorite zaslon pojedinosti i kliknite gumb za osvježavanje ili obavite skupno osvježavanje pomoću 'Upravljač metapodacima.", "MinutesAfter": "Minuta nakon", "MinutesBefore": "Minuta prije", "Monday": "Ponedjeljak", From e405c0d1e0f2a8560062b2d37299a694904dc537 Mon Sep 17 00:00:00 2001 From: John Doe Date: Wed, 15 Apr 2026 11:36:55 -0400 Subject: [PATCH 110/695] Translated using Weblate (Finnish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/ --- src/strings/fi.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/fi.json b/src/strings/fi.json index 117102af4a..a5a748fa2c 100644 --- a/src/strings/fi.json +++ b/src/strings/fi.json @@ -1893,7 +1893,7 @@ "LabelAudioAttributes": "Äänen ominaisuudet", "LabelTargetCodecs": "Kohdekoodekit", "LabelPlaybackQuality": "Kuva pudonnut / korruptoitunut", - "BrandingLoadError": "Brändäyksen asetusten lataaminen epäonnistui", + "BrandingLoadError": "Brändäyksen asetusten lataaminen epäonnistui", "OnFilesystem": "Tiedostojärjestelmässä: {0}", "ResumeLoadError": "Toisto asetusten lataaminen epäonnistui", "StreamingLoadError": "Suoratoisto sivun asetusten lataaminen epäonnistui", From 2a3313699938f259557118e81ac1844a6ca1c0e2 Mon Sep 17 00:00:00 2001 From: John Doe Date: Wed, 15 Apr 2026 12:02:41 -0400 Subject: [PATCH 111/695] Translated using Weblate (Finnish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/ --- src/strings/fi.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/fi.json b/src/strings/fi.json index a5a748fa2c..8cf5b7e199 100644 --- a/src/strings/fi.json +++ b/src/strings/fi.json @@ -1902,7 +1902,7 @@ "Watch": "Katso", "LabelInternalServerUriHelp": "Julkaistu palvelinen URI sisäiselle käytölle.", "TrickplayLoadError": "Trickplayn asetusten lataaminen epäonnistui", - "LabelProgressAndSpeed": "Prosessi / nopeus", + "LabelProgressAndSpeed": "Eteneminen / nopeus", "LabelReasons": "Syyt", - "LabelPlayerSizes": "Soittime koot" + "LabelPlayerSizes": "Soittimen koot" } From bc915d5a5c3d9f0fe1c51f6fdee4c32a6e7575b8 Mon Sep 17 00:00:00 2001 From: John Doe Date: Wed, 15 Apr 2026 12:10:49 -0400 Subject: [PATCH 112/695] Translated using Weblate (Finnish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/ --- src/strings/fi.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/strings/fi.json b/src/strings/fi.json index 8cf5b7e199..5d455be318 100644 --- a/src/strings/fi.json +++ b/src/strings/fi.json @@ -1156,7 +1156,7 @@ "LabelRepositoryNameHelp": "Oma nimi, jolla tietovarasto erottuu palvelimen muista tietovarastoista.", "LabelRepositoryName": "Tietovaraston nimi", "LabelQuickConnectCode": "Pikayhdistyskoodi", - "LabelPublishedServerUriHelp": "Ohita Jellyfinin käyttämä URI perustuen käyttöliittymän tai asiakaan IP-osoitteeseen.", + "LabelPublishedServerUriHelp": "Ohita Jellyfinin käyttämä URI perustuen käyttöliittymän tai asiakkaan IP-osoitteeseen.", "LabelPublishedServerUri": "Julkaistut palvelimen URI:t", "LabelPostProcessorArgumentsHelp": "Käytä sijaintia {path} tallenteen tiedostosijaintina.", "LabelOpenclDeviceHelp": "Tämä on sävykartoitukseen käytettävä OpenCL-laite. Pisteen vasemmalla puolella on alustanumero ja oikealla alustan laitenumero. Oletusarvo on 0.0. Vaatii OpenCL-laitteistokiihdytyksen sisältävän FFmpeg-ohjelmatiedoston.", @@ -1895,12 +1895,12 @@ "LabelPlaybackQuality": "Kuva pudonnut / korruptoitunut", "BrandingLoadError": "Brändäyksen asetusten lataaminen epäonnistui", "OnFilesystem": "Tiedostojärjestelmässä: {0}", - "ResumeLoadError": "Toisto asetusten lataaminen epäonnistui", - "StreamingLoadError": "Suoratoisto sivun asetusten lataaminen epäonnistui", + "ResumeLoadError": "Toistoasetusten lataaminen epäonnistui", + "StreamingLoadError": "Suoratoistosivun asetusten lataaminen epäonnistui", "Unwatch": "Poista katsominen", "UsersEditPageError": "Käyttäjän muokkaus sivun lataaminen epäonnistui", "Watch": "Katso", - "LabelInternalServerUriHelp": "Julkaistu palvelinen URI sisäiselle käytölle.", + "LabelInternalServerUriHelp": "Julkaistu palvelimen URI sisäiselle käytölle.", "TrickplayLoadError": "Trickplayn asetusten lataaminen epäonnistui", "LabelProgressAndSpeed": "Eteneminen / nopeus", "LabelReasons": "Syyt", From a8fc3cf8ff00af3aeb92d5baa16f2a74fa23337f Mon Sep 17 00:00:00 2001 From: lednurb Date: Wed, 15 Apr 2026 13:49:53 -0400 Subject: [PATCH 113/695] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index 7c1a37e426..aa94abd8a0 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -102,7 +102,7 @@ "ConfirmDeletion": "Verwijderen bevestigen", "ConfirmEndPlayerSession": "Wil je Jellyfin afsluiten op {0}?", "Connect": "Verbinden", - "ContinueWatching": "Verderkijken", + "ContinueWatching": "Verder kijken", "Continuing": "Wordt vervolgd", "CriticRating": "Beoordeling critici", "DateAdded": "Datum toegevoegd", @@ -1889,7 +1889,7 @@ "Unwatch": "Volgen stoppen", "Watch": "Volgen", "Authors": "Auteurs", - "ContinueReading": "Verderlezen", + "ContinueReading": "Verder lezen", "HeaderLatestBooks": "Onlangs toegevoegde boeken", "HeaderLatestMusicVideos": "Onlangs toegevoegde muziekvideo's", "UsersEditPageError": "Het laden van de gebruikers aanpassen pagina is mislukt", From c2213324a8d8fe2850ff6a8192d784b77ffb540d Mon Sep 17 00:00:00 2001 From: wabisabi926 Date: Thu, 16 Apr 2026 03:56:23 -0400 Subject: [PATCH 114/695] Translated using Weblate (Chinese (Simplified Han script)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/ --- src/strings/zh-cn.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index a5fea546c4..66dd9744b9 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -449,7 +449,7 @@ "LabelKodiMetadataDateFormat": "发行日期格式", "LabelKodiMetadataDateFormatHelp": "Nfo的所有日期将使用这种格式。", "LabelKodiMetadataEnableExtraThumbs": "复制 extrafanart 到 extrathumbs 栏", - "LabelKodiMetadataEnableExtraThumbsHelp": "为了最大化兼容Kodi皮肤,下载的图片同时保存在 extrafanart 和 extrathumbs 文件夹。", + "LabelKodiMetadataEnableExtraThumbsHelp": "为了最大化兼容 Kodi 皮肤,下载的图片同时保存在 extrafanart 和 extrathumbs 文件夹。", "LabelKodiMetadataEnablePathSubstitution": "启用路径替换", "LabelKodiMetadataEnablePathSubstitutionHelp": "允许图像的路径替换使用服务器的路径替换设置。", "LabelKodiMetadataSaveImagePaths": "保存图像路径在NFO文件", From 98b423e9133ea060e7883a6d4964bc4db260c69c Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Thu, 16 Apr 2026 14:24:25 -0400 Subject: [PATCH 115/695] Translated using Weblate (Portuguese (Portugal)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/ --- src/strings/pt-pt.json | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index 695f568e64..98ac066a38 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -947,7 +947,7 @@ "LabelVersion": "Versão", "LabelUserLoginAttemptsBeforeLockout": "Tentativas de início de sessão falhadas até o utilizador ser bloqueado", "LabelTranscodingProgress": "Progresso de transcodificação", - "LabelTranscodingFramerate": "Transcodificação da taxa de fotogramas", + "LabelTranscodingFramerate": "Taxa de fotogramas da transcodificação", "LabelTranscodePath": "Localização de transcodificação", "LabelTrackNumber": "Número da faixa", "LabelTextColor": "Cor do texto", @@ -1030,7 +1030,7 @@ "MusicLibraryHelp": "Consulta o {0}guia de nomenclatura de músicas{1}.", "MovieLibraryHelp": "Consulta o {0}guia de nomenclatura de filmes{1}.", "MessageConfirmAppExit": "Quer sair?", - "MediaInfoRefFrames": "Molduras de referência", + "MediaInfoRefFrames": "Fotogramas de referência", "MediaInfoLayout": "Disposição", "MediaInfoDefault": "Predefinido", "MediaInfoBitDepth": "Profundidade de bit", @@ -1056,7 +1056,7 @@ "OptionDisplayFolderViewHelp": "Mostrar pastas juntamente com outras bibliotecas multimédia. Pode ser útil caso pretenda ter uma vista simples das pastas.", "OptionForceRemoteSourceTranscoding": "Força a transcodificação de fontes multimédia remotas, como a TV em direto", "LabelStreamType": "Tipo de transmissão", - "LabelDroppedFrames": "Fotogramas descartados", + "LabelDroppedFrames": "Fotogramas perdidos", "LabelCorruptedFrames": "Fotogramas corrompidos", "AllowFfmpegThrottlingHelp": "Suspende o processo de transcodificação assim que este avance o suficiente após o ponto de reprodução atual, para poupar recursos. Esta funcionalidade é mais útil quando a reprodução é maioritariamente contínua, sem avançar ou recuar manualmente. Desative esta opção caso haja problemas de reprodução.", "AllowFfmpegThrottling": "Desacelerar transcodificações", @@ -1148,8 +1148,8 @@ "Writers": "Autoria", "ViewAlbumArtist": "Ver artista do álbum", "Video": "Vídeo", - "UseDoubleRateDeinterlacingHelp": "Esta definição utiliza a taxa de campo durante o desentrelaçamento, muitas vezes referido como desentrelaçamento bob, que duplica a taxa de fotogramas do vídeo para proporcionar movimento fluído, como o que verias ao ver vídeo entrelaçado numa televisão.", - "UseDoubleRateDeinterlacing": "Duplicar a velocidade de fotogramas ao desentrelaçar", + "UseDoubleRateDeinterlacingHelp": "Esta definição utiliza a taxa de campo durante o desentrelaçamento, muitas vezes designada por desentrelaçamento bob, que duplica a taxa de fotogramas do vídeo para proporcionar movimento fluido, como ao ver vídeo entrelaçado numa televisão.", + "UseDoubleRateDeinterlacing": "Duplicar a taxa de fotogramas ao desentrelaçar", "TvLibraryHelp": "Consulte o {0}guia de nomenclatura de TV{1}.", "TabNetworking": "Rede", "TabRepositories": "Repositórios", @@ -1475,7 +1475,7 @@ "VideoLevelNotSupported": "O nível do codec deste vídeo não é suportado", "VideoFramerateNotSupported": "A taxa de fotogramas deste vídeo não é suportada", "VideoBitDepthNotSupported": "A profundidade de bits deste vídeo não é suportada", - "RefFramesNotSupported": "Frames de referência não são suportados", + "RefFramesNotSupported": "Os fotogramas de referência não são suportados", "SecondaryAudioNotSupported": "Faixas de áudio secundárias não são suportadas", "InterlacedVideoNotSupported": "Vídeo entrelaçado não é suportado", "AnamorphicVideoNotSupported": "Vídeos anamórficos não são suportados", @@ -1702,7 +1702,7 @@ "LabelQsvDeviceHelp": "Especifica o dispositivo para Intel QSV num sistema multi-GPU. Em Linux, este é o nó de renderização, por exemplo, /dev/dri/renderD128. Em Windows, este é o índice do dispositivo, começando do 0. Deixa em branco a não ser que saibas o que está a fazer.", "DateModified": "Data de modificação", "DisableVbrAudioEncodingHelp": "Impedir que o servidor codifique o áudio com VBR para este cliente.", - "EnableHi10pHelp": "Ativa para evitar a transcodificação de vídeos H.264 de 10 bits. Desativa esta opção se o vídeo apresentar quadros em branco.", + "EnableHi10pHelp": "Ativa para evitar a transcodificação de vídeos H.264 de 10 bits. Desativa esta opção se o vídeo apresentar fotogramas em branco.", "HeaderAudioAdvanced": "Definições avançadas de áudio", "LabelRepository": "Repositório", "LabelSaveTrickplayLocally": "Guardar miniaturas de pré-visualização (trickplay) junto aos ficheiros de multimédia", @@ -1752,7 +1752,7 @@ "RenderPgsSubtitleHelp": "Determina se o cliente deve renderizar legendas PGS em vez de utilizar legendas embebidas. Isto pode evitar a transcodificação do lado do servidor em troca de desempenho de renderização do lado do cliente.", "UseCustomTagDelimiters": "Utilizar delimitador de etiquetas personalizado", "UseCustomTagDelimitersHelp": "Divide etiquetas de artistas/género com carateres personalizados.", - "LabelTrickplayKeyFrameOnlyExtraction": "Gerar imagens apenas de fotogramas-chave", + "LabelTrickplayKeyFrameOnlyExtraction": "Gerar imagens apenas a partir de fotogramas-chave", "PluginEnableError": "Ocorreu um erro ao ativar a extensão.", "PluginLoadConfigError": "Ocorreu um erro ao obter as páginas de configuração da extensão.", "PluginDisableError": "Ocorreu um erro ao desativar a extensão.", @@ -1771,7 +1771,7 @@ "MediaSegmentType.Preview": "Pré-visualização", "MediaSegmentType.Recap": "Recapitulação", "PlaylistError.UpdateFailed": "Erro ao atualizar a playlist", - "LabelTrickplayKeyFrameOnlyExtractionHelp": "Extrai somente os fotogramas-chave para um processamento significativamente mais rápido com temporização menos precisa. Se o descodificador de hardware configurado não suportar esse modo, será utilizado o descodificador de software.", + "LabelTrickplayKeyFrameOnlyExtractionHelp": "Extrair apenas os fotogramas-chave para um processamento significativamente mais rápido, com temporização menos precisa. Se o descodificador de hardware configurado não suportar este modo, será utilizado o descodificador de software.", "PluginUninstallError": "Ocorreu um erro ao desinstalar a extensão.", "LibraryInvalidItemIdError": "A biblioteca está num estado inválido e não pode ser editada. É possível que esteja a encontrar um erro: o caminho na base de dados não é o caminho correto no sistema de ficheiros.", "MediaInfoRotation": "Rotação", @@ -1804,8 +1804,8 @@ "SettingsPageLoadError": "Falha ao carregar a página de definições", "RetryWithGlobalSearch": "Tentar novamente com uma pesquisa global", "StreamCountExceedsLimit": "O número de transmissões excede o limite", - "ReadInputAtNativeFramerateHelp": "Ativar esta opção pode resolver alguns problemas, por exemplo, transmissões ao vivo que param prematuramente.", - "ReadInputAtNativeFramerate": "Reproduzir a entrada à velocidade de fotogramas nativa", + "ReadInputAtNativeFramerateHelp": "Ativar esta opção pode resolver alguns problemas, por exemplo, transmissões em direto que param prematuramente.", + "ReadInputAtNativeFramerate": "Reproduzir à taxa de fotogramas nativa", "CustomSplashScreenSize": "As imagens personalizadas devem ter uma proporção de 16x9 e um tamanho mínimo de 1920x1080.", "DeleteCustomImage": "Eliminar imagem personalizada", "ImageUploadCancelled": "Carregamento de imagens cancelado", @@ -1894,5 +1894,14 @@ "Watch": "Ver", "TrickplayLoadError": "Falha ao carregar as definições do trickplay", "LabelExternalServerUri": "URI externo", - "LabelExternalServerUriHelp": "URI do servidor publicado para acesso externo." + "LabelExternalServerUriHelp": "URI do servidor publicado para acesso externo.", + "LabelPlaybackQuality": "Fotogramas perdidos / corrompidos", + "LabelPlayerSizes": "Tamanhos do leitor", + "LabelVideoAttributes": "Atributos do vídeo", + "LabelVideoColors": "Cores do vídeo", + "LabelVideoBitDepth": "Profundidade de bits do vídeo", + "LabelAudioAttributes": "Atributos do áudio", + "LabelTargetCodecs": "Codecs de destino", + "LabelProgressAndSpeed": "Progresso / velocidade", + "LabelReasons": "Motivos" } From 0b8ac66fc64e04578ad79a68523726b571861374 Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Thu, 16 Apr 2026 14:24:32 -0400 Subject: [PATCH 116/695] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index cfe83d35b2..895f560c8e 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -933,7 +933,7 @@ "LabelVaapiDevice": "Dispositivo VA-API", "LabelUserAgent": "Agente do utilizador", "LabelTranscodes": "Transcodificação", - "LabelTranscodingFramerate": "Transcodificação da taxa de fotogramas", + "LabelTranscodingFramerate": "Taxa de fotogramas da transcodificação", "LabelTranscodingProgress": "Progresso da transcodificação", "LabelTitle": "Título", "LabelTheme": "Tema", @@ -951,7 +951,7 @@ "LabelPlayerDimensions": "Dimensões do leitor", "LabelParentNumber": "Número pai", "LabelMetadataSavers": "Formatos de gravação dos metadados", - "LabelDroppedFrames": "Quadros caídos", + "LabelDroppedFrames": "Fotogramas perdidos", "LabelCorruptedFrames": "Quadros corrompidos", "LabelAudioBitDepth": "Profundidade do bit de áudio", "ClientSettings": "Definições do cliente", @@ -1422,7 +1422,7 @@ "LabelSystem": "Sistema", "SaveRecordingImages": "Guardar imagens da gravação EPG", "SaveRecordingImagesHelp": "Guardar imagens do fornecedor de listas EPG juntamente com os ficheiros multimédia.", - "UseDoubleRateDeinterlacing": "Duplicar a velocidade de fotogramas ao desentrelaçar", + "UseDoubleRateDeinterlacing": "Duplicar a taxa de fotogramas ao desentrelaçar", "MessageSyncPlayUserJoined": "{0} entrou no grupo.", "MessageSyncPlayUserLeft": "{0} saiu do grupo.", "MillisecondsUnit": "ms", @@ -1433,7 +1433,7 @@ "YoutubeDenied": "O vídeo solicitado não pode ser reproduzido em leitores incorporados.", "TypeOptionPluralBoxSet": "Conjuntos de caixas", "LabelBackdropScreensaverInterval": "Intervalo da imagem de fundo da proteção de ecrã", - "UseDoubleRateDeinterlacingHelp": "Esta definição utiliza a taxa de campo durante o desentrelaçamento, muitas vezes referido como desentrelaçamento bob, que duplica a taxa de fotogramas do vídeo para proporcionar movimento fluído, como o que verias ao ver vídeo entrelaçado numa televisão.", + "UseDoubleRateDeinterlacingHelp": "Esta definição utiliza a taxa de campo durante o desentrelaçamento, muitas vezes designada por desentrelaçamento bob, que duplica a taxa de fotogramas do vídeo para proporcionar movimento fluido, como ao ver vídeo entrelaçado numa televisão.", "LabelDirectStreamingInfo": "Informações de transmissão direta", "LabelAlbumGain": "Ganho do álbum", "LogoScreensaver": "Logótipo da proteção de ecrã", @@ -1527,7 +1527,7 @@ "MediaInfoDvProfile": "Perfil DV", "VideoCodecNotSupported": "O codec de vídeo não é compatível", "SubtitleCodecNotSupported": "O codec de legenda não é compatível", - "RefFramesNotSupported": "Quadros de referência não são suportados", + "RefFramesNotSupported": "Os fotogramas de referência não são suportados", "SecondaryAudioNotSupported": "Faixas de áudio secundárias não são suportadas", "VideoLevelNotSupported": "O nível do codec de vídeo não é compatível", "AudioBitDepthNotSupported": "A profundidade de bits do áudio não é suportada", @@ -1580,7 +1580,7 @@ "AudioSampleRateNotSupported": "A taxa de amostragem do áudio não é suportada", "VideoResolutionNotSupported": "A resolução do vídeo não é suportada", "VideoBitDepthNotSupported": "A profundidade de bits do vídeo não é suportada", - "VideoFramerateNotSupported": "A taxa de quadros do vídeo não é compatível", + "VideoFramerateNotSupported": "A taxa de fotogramas deste vídeo não é suportada", "UnknownVideoStreamInfo": "As informações do stream de vídeo são desconhecidas", "SelectAll": "Selecionar tudo", "LabelTonemappingMode": "Modo do mapeamento de tons", @@ -1712,14 +1712,14 @@ "SearchForLyrics": "Procurar letras", "NoLyricsSearchResultsFound": "Nenhuma letra encontrada.", "MediaSegmentType.Intro": "Introdução", - "EnableHi10pHelp": "Ativa para evitar a transcodificação de vídeos H.264 de 10 bits. Desativa esta opção se o vídeo apresentar quadros em branco.", + "EnableHi10pHelp": "Ativa para evitar a transcodificação de vídeos H.264 de 10 bits. Desativa esta opção se o vídeo apresentar fotogramas em branco.", "LyricDownloadersHelp": "Ativa e classifica os teus fornecedores de letras preferidos por ordem de prioridade.", "AlwaysRemuxMp3AudioFilesHelp": "Se tiveres ficheiros que o teu navegador calcula de forma imprecisa os registos de data/hora, ativa esta opção como solução alternativa.", "AlwaysRemuxFlacAudioFilesHelp": "Se tiveres ficheiros que o teu navegador recusar reproduzir ou em que calcula incorretamente os registos de data/hora, ativa esta opção como solução alternativa.", "HeaderNewPlaylist": "Nova playlist", "UseCustomTagDelimiters": "Utilizar delimitador de etiquetas personalizado", "UseCustomTagDelimitersHelp": "Divide etiquetas de artistas/género com carateres personalizados.", - "LabelTrickplayKeyFrameOnlyExtraction": "Gerar imagens apenas de fotogramas-chave", + "LabelTrickplayKeyFrameOnlyExtraction": "Gerar imagens apenas a partir de fotogramas-chave", "VideoCodecTagNotSupported": "A etiqueta do codec de vídeo não é suportada", "AndOtherArtists": "{0} e {1} outros artistas.", "MoviesAndShows": "Filmes e séries", @@ -1786,7 +1786,7 @@ "RenderPgsSubtitleHelp": "Determina se o cliente deve renderizar legendas PGS em vez de utilizar legendas embebidas. Isto pode evitar a transcodificação do lado do servidor em troca de desempenho de renderização do lado do cliente.", "LabelMediaSegmentProviders": "Fornecedores de segmentos de multimédia", "MediaSegmentProvidersHelp": "Ativa e classifica os teus fornecedores de segmentos de multimédia preferidos por ordem de prioridade.", - "LabelTrickplayKeyFrameOnlyExtractionHelp": "Extrai somente os fotogramas-chave para um processamento significativamente mais rápido com temporização menos precisa. Se o descodificador de hardware configurado não suportar esse modo, será utilizado o descodificador de software.", + "LabelTrickplayKeyFrameOnlyExtractionHelp": "Extrair apenas os fotogramas-chave para um processamento significativamente mais rápido, com temporização menos precisa. Se o descodificador de hardware configurado não suportar este modo, será utilizado o descodificador de software.", "AutoSubtitleStylingHelp": "Este modo alterna automaticamente entre os mecanismos de estilo de legendas nativo e personalizado com base no teu tipo de dispositivo.", "Custom": "Personalizado", "CustomSubtitleStylingHelp": "O estilo de legendas funciona na maioria dos dispositivos, mas tem uma sobrecarga de desempenho adicional.", @@ -1801,8 +1801,8 @@ "SettingsPageLoadError": "Falha ao carregar a página de definições", "RetryWithGlobalSearch": "Tentar novamente com uma pesquisa global", "StreamCountExceedsLimit": "O número de transmissões excede o limite", - "ReadInputAtNativeFramerateHelp": "Ativar esta opção pode resolver alguns problemas, por exemplo, transmissões ao vivo que param prematuramente.", - "ReadInputAtNativeFramerate": "Reproduzir a entrada à velocidade de fotogramas nativa", + "ReadInputAtNativeFramerateHelp": "Ativar esta opção pode resolver alguns problemas, por exemplo, transmissões em direto que param prematuramente.", + "ReadInputAtNativeFramerate": "Reproduzir à taxa de fotogramas nativa", "LogLoadFailure": "Falha ao carregar o ficheiro de registo de alterações. É possível que atualmente esteja a ser escrito.", "CustomSplashScreenSize": "As imagens personalizadas devem ter uma proporção de 16x9 e um tamanho mínimo de 1920x1080.", "DeleteCustomImage": "Eliminar imagem personalizada", @@ -1894,5 +1894,14 @@ "Watch": "Ver", "LabelExternalServerUri": "URI externo", "LabelExternalServerUriHelp": "URI do servidor publicado para acesso externo.", - "ResumeLoadError": "Falha ao carregar as definições de retoma" + "ResumeLoadError": "Falha ao carregar as definições de retoma", + "LabelPlaybackQuality": "Fotogramas perdidos / corrompidos", + "LabelVideoAttributes": "Atributos do vídeo", + "LabelVideoColors": "Cores do vídeo", + "LabelVideoBitDepth": "Profundidade de bits do vídeo", + "LabelAudioAttributes": "Atributos do áudio", + "LabelTargetCodecs": "Codecs de destino", + "LabelProgressAndSpeed": "Progresso / velocidade", + "LabelReasons": "Motivos", + "LabelPlayerSizes": "Tamanhos do leitor" } From 06abc27288d7e91c1f21acd3d4c104b67ac3a116 Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Thu, 16 Apr 2026 14:26:58 -0400 Subject: [PATCH 117/695] Translated using Weblate (Portuguese (Portugal)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/ --- src/strings/pt-pt.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index 98ac066a38..2e2016b591 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -1903,5 +1903,6 @@ "LabelAudioAttributes": "Atributos do áudio", "LabelTargetCodecs": "Codecs de destino", "LabelProgressAndSpeed": "Progresso / velocidade", - "LabelReasons": "Motivos" + "LabelReasons": "Motivos", + "OnFilesystem": "No sistema de ficheiros: {0}" } From f813efeb68bf2a332125b20895063e82ca4c5a0a Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Thu, 16 Apr 2026 14:27:02 -0400 Subject: [PATCH 118/695] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index 895f560c8e..a8b264dde4 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -1903,5 +1903,6 @@ "LabelTargetCodecs": "Codecs de destino", "LabelProgressAndSpeed": "Progresso / velocidade", "LabelReasons": "Motivos", - "LabelPlayerSizes": "Tamanhos do leitor" + "LabelPlayerSizes": "Tamanhos do leitor", + "OnFilesystem": "No sistema de ficheiros: {0}" } From 151871e76e029df23a8de5bcc3f80a24f8bdfcce Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Thu, 16 Apr 2026 17:29:02 -0400 Subject: [PATCH 119/695] Make library header sticky --- .../components/library/AlphabetPicker.tsx | 15 +- .../components/library/ItemsView.tsx | 291 +++++++++--------- 2 files changed, 152 insertions(+), 154 deletions(-) diff --git a/src/apps/experimental/components/library/AlphabetPicker.tsx b/src/apps/experimental/components/library/AlphabetPicker.tsx index aec6d2eb9b..e9835a6dfd 100644 --- a/src/apps/experimental/components/library/AlphabetPicker.tsx +++ b/src/apps/experimental/components/library/AlphabetPicker.tsx @@ -16,6 +16,8 @@ interface AlphabetPickerProps { >; } +const LETTER_VALUES = ['#', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']; + const AlphabetPicker: React.FC = ({ className, libraryViewSettings, @@ -46,19 +48,20 @@ const AlphabetPicker: React.FC = ({ 'alphaPickerButton' ); - const letters = ['#', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']; - return ( ({ position: 'fixed', bottom: '1.5em', fontSize: { xs: '80%', lg: '88%' - } - }} + }, + // This should render under the main AppBar but above the ItemsView AppBar + zIndex: theme.zIndex.appBar - 1 + })} > = ({ size='small' onChange={handleValue} > - {letters.map((l) => ( + {LETTER_VALUES.map((l) => ( = ({ return ( - ({ + top: '3.25rem', + backgroundColor: `var(--jf-palette-background-default, ${theme.palette.background.default}) !important`, + // This should render under the main AppBar and AlphabetPicker + zIndex: theme.zIndex.appBar - 2 + })} > - - - - - - - {isBtnFilterEnabled && ( - + + + + + {isBtnFilterEnabled && ( + + )} + + {isBtnSortEnabled && ( + + )} + + {isBtnGridListEnabled && ( + + )} + + + + + {!isPending && ( + <> + + {isBtnPlayAllEnabled && ( + + )} + + {isBtnShuffleEnabled && totalRecordCount > 1 && ( + + )} + + {isBtnQueueEnabled && item && playbackManager.canQueue(item) && ( + + )} + + + {isBtnNewCollectionEnabled && } + {isBtnNewPlaylistEnabled && } + + )} + + + + {!isPending && isPaginationEnabled && ( + )} - - {isBtnSortEnabled && ( - - )} - - {isBtnGridListEnabled && ( - - )} - - - - - {!isPending && ( - <> - - {isBtnPlayAllEnabled && ( - - )} - - {isBtnShuffleEnabled && totalRecordCount > 1 && ( - - )} - - {isBtnQueueEnabled && item && playbackManager.canQueue(item) && ( - - )} - - - {isBtnNewCollectionEnabled && } - {isBtnNewPlaylistEnabled && } - - )} - - - - {!isPending && isPaginationEnabled && ( - - )} - - + + + {isAlphabetPickerEnabled && hasSortName && ( = ({ {getItems()} )} - - {!isPending && isPaginationEnabled && ( - - - - )} ); }; From c980ebcf74de37141c99c93398bf984ae085b170 Mon Sep 17 00:00:00 2001 From: SecularSteve Date: Fri, 17 Apr 2026 03:30:52 -0400 Subject: [PATCH 120/695] Translated using Weblate (Croatian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hr/ --- src/strings/hr.json | 138 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 131 insertions(+), 7 deletions(-) diff --git a/src/strings/hr.json b/src/strings/hr.json index 2df2b04ba0..dde4cd390c 100644 --- a/src/strings/hr.json +++ b/src/strings/hr.json @@ -478,8 +478,8 @@ "MessageUnsetContentHelp": "Sadržaj će se prikazati u obliku običnih mapa. Za najbolje rezultate upotrijebite upravljač metapodataka za postavljanje vrste sadržaja podmapa.", "MetadataManager": "Upravljač metapodacima", "MetadataSettingChangeHelp": "Promjena postavki metapodataka utjecati će da novi sadržaji koji se dodaju idu naprijed. Za osvježavanje postojećih sadržaja otvorite zaslon pojedinosti i kliknite gumb za osvježavanje ili obavite skupno osvježavanje pomoću 'Upravljač metapodacima.", - "MinutesAfter": "Minuta nakon", - "MinutesBefore": "Minuta prije", + "MinutesAfter": "minuta nakon", + "MinutesBefore": "minuta prije", "Monday": "Ponedjeljak", "MoreFromValue": "Više od {0}", "MoreUsersCanBeAddedLater": "Više korisnika se mogu dodati kasnije unutar nadzorne ploče.", @@ -1297,7 +1297,7 @@ "LabelPlayer": "Izvođač", "LabelPostProcessor": "Aplikacija za naknadnu obradu", "LabelPostProcessorArguments": "Argumenti naredbene linije post-procesoru", - "LabelPostProcessorArgumentsHelp": "Koristi {putanju} kao putanju do snimljene datoteke.", + "LabelPostProcessorArgumentsHelp": "Koristi {path} kao putanju do snimljene datoteke.", "PlaybackRate": "Brzina reprodukcije", "LabelUserLoginAttemptsBeforeLockout": "Neuspjeli pokušaji prijave prije nego što korisnik bude zaključan", "LabelUserRemoteClientBitrateLimitHelp": "Zaobiđite zadanu globalnu vrijednost postavljenu u postavkama poslužitelja, pogledajte Nadzorna ploča > Reprodukcija > Strujanje.", @@ -1595,7 +1595,7 @@ "LibraryNameInvalid": "Ime biblioteke ne smije biti prazno.", "LibraryScanFanoutConcurrency": "Ograničenje u paralelnom skeniranju biblioteke", "LimitSupportedVideoResolution": "Ograničite maksimalnu podržanu rezoluciju videa", - "LogLevel.Trace": "Precrtaj", + "LogLevel.Trace": "Trag", "LogLevel.Debug": "Otklanjanje grešaka", "LogoScreensaver": "Logotip kao zaštita zaslona", "Lyric": "Tekst pjesme", @@ -1675,7 +1675,7 @@ "SaveSubtitlesIntoMediaFoldersHelp": "Spremanje titlova uz audio datoteke omogućit će lakše upravljanje njima.", "ScanForNewAndUpdatedFiles": "Skenirajte za nove i ažurirane datoteke", "ScanLibrary": "Pretraži biblioteku", - "Schedule": "Termin", + "Schedule": "Uređivanje podsjetnika za raspored", "ScreenResolution": "Rezolucija ekrana", "SearchForLyrics": "Traži tekstove pjesama", "SearchResultsEmpty": "Nažalost nije pronađen nijedan rezultat za \"{0}\"", @@ -1726,7 +1726,7 @@ "TypeOptionPluralEpisode": "Epizode", "TypeOptionPluralSeason": "Sezone", "TypeOptionPluralVideo": "Videa", - "Typewriter": "Neproporcionalni", + "Typewriter": "Pisaćka mašina", "Uniform": "Uniformno", "UnknownError": "Dogodila se nepoznata greška.", "Unmute": "Uključi ton", @@ -1780,5 +1780,129 @@ "MessageSplitVersionsError": "Dogodila se greška prilikom rastavljana verzija", "ViewAlbumArtist": "Prikaži izvođača albuma", "PreferNonstandardArtistsTag": "Preferiraj oznaku IZVOĐAČI ako je dostupna", - "PreferNonstandardArtistsTagHelp": "Koristite nestandardnu oznaku IZVOĐAČI umjesto oznake IZVOĐAČ kada je dostupna." + "PreferNonstandardArtistsTagHelp": "Koristite nestandardnu oznaku IZVOĐAČI umjesto oznake IZVOĐAČ kada je dostupna.", + "Inker": "Tinter", + "LabelAllowStreamSharing": "Omogući dijeljenje prijenosa", + "LabelDelimiterWhitelist": "Popis dopuštenih razdjelnika", + "LabelFallbackMaxStreamingBitrate": "Maksimalna brzina strujne bitrate povlaka (Mbps)", + "LabelGroupShowsIntoCollections": "Grupne izložbe u zbirkama", + "LabelQsvDeviceHelp": "Navedite uređaj za Intel QSV na sustavu s više GPU-a. Na Linuxu je to render čvor, npr. /dev/dri/renderD128. Na Windowsu je to indeks uređaja počevši od 0. Ostavite prazno osim ako znate što radite.", + "LanNetworksHelp": "Popis IP adresa ili unosa IP/maske mreža razdvojenih zarezom, koji će se uzimati u obzir na lokalnoj mreži pri provođenju ograničenja propusnosti i udaljenog pristupa. Ako je ostavljeno prazno, sve adrese iz RFC1918 smatraju se lokalnim.", + "Letterer": "Slovopisac", + "LibrariesLoadError": "Neuspjelo učitavanje biblioteka", + "LibraryScanFanoutConcurrencyHelp": "Maksimalan broj paralelnih zadataka tijekom skeniranja biblioteke. Ako ostavite ovo prazno, odabrat će se ograničenje temeljeno na broju jezgri vašeg sustava. UPOZORENJE: Postavljanje ove vrijednosti previsoko može uzrokovati probleme s mrežnim datotečnim sustavima; ako naiđete na probleme, smanjite ovu vrijednost.", + "LibraryInvalidItemIdError": "Biblioteka je u neispravnom stanju i ne može se uređivati. Moguće je da nailazite na grešku: putanja u bazi podataka nije ispravna putanja na datotečnom sustavu.", + "LimitSegmentLength": "Koristite kraće HLS segmente", + "LimitSegmentLengthHelp": "Omogućavanje ove opcije može pomoći spriječiti zadržavanje HLS playera tijekom traženja na određenim uređajima, kao što su televizori s webOS-om.", + "LiveTVPageLoadError": "Neuspjelo učitavanje stranice snimaka", + "LyricDownloadersHelp": "Omogućite i rangirajte svoje omiljene preuzimače tekstova pjesama po redu prioriteta.", + "MediaSegmentProvidersHelp": "Omogućite i rangirajte svoje omiljene pružatelje medijskih segmenata po redu prioriteta.", + "MessageBackupDisclaimer": "Ovisno o veličini vaše biblioteke, proces izrade sigurnosne kopije može potrajati.", + "MessageCancelSeriesTimerError": "Došlo je do pogreške pri otkazivanju tajmera serije", + "MessageCancelTimerError": "Došlo je do pogreške pri otkazivanju tajmera", + "MessageEnablingOptionLongerScans": "Omogućavanje ove opcije može rezultirati znatno dužim skeniranjem biblioteke.", + "MessageForgotPasswordPinReset": "Unesite PIN ovdje da biste dovršili resetiranje lozinke", + "MessageNoGenresAvailable": "Omogućite nekim pružateljima metapodataka da preuzimaju žanrove s interneta.", + "MessagePlayAccessRestricted": "Reprodukcija ovog sadržaja je trenutno ograničena. Molimo kontaktirajte administratora vašeg poslužitelja za više informacija.", + "MessageRepositoryInstallDisclaimer": "UPOZORENJE: Instaliranje repozitorija dodataka treće strane nosi rizike. Može sadržavati nestabilan ili zlonamjerni kod i može se promijeniti u bilo kojem trenutku. Instalirajte repozitorije samo od autora kojima vjerujete.", + "MessageRestoreDisclaimer": "UPOZORENJE: Uskoro ćete obaviti obnovu iz prethodne sigurnosne kopije. Vaš poslužitelj bit će neupotrebljiv tijekom cijelog postupka, a svi novi podaci nastali nakon sigurnosne kopije bit će izgubljeni.", + "MessageServerMismatch": "Poslužitelj s kojim se povezujete nije isti poslužitelj na koji ste se prethodno povezali na ovoj adresi. Ako je to očekivano, molimo odaberite \"Poveži se unatoč tome\". U suprotnom, vaša veza ili poslužitelj mogu biti ugroženi.", + "MessageSyncPlayCreateGroupDenied": "Potreban je dopuštaj za stvaranje grupe.", + "MessageSyncPlayErrorAccessingGroups": "Došlo je do pogreške pri pristupu popisu grupa.", + "MessageSyncPlayErrorMedia": "Nije uspjelo omogućiti SyncPlay! Greška u mediju.", + "MessageSyncPlayErrorMissingSession": "Nije uspjelo omogućiti SyncPlay! Nedostaje sesija.", + "MessageSyncPlayErrorNoActivePlayer": "Nije pronađen nijedan aktivni igrač. SyncPlay je onemogućen.", + "MessageSyncPlayGroupDoesNotExist": "Pridruživanje grupi nije uspjelo jer ona ne postoji.", + "MessageSyncPlayIsDisabled": "Potreban je dopuštaj za korištenje SyncPlay-a.", + "MessageSyncPlayNoGroupsAvailable": "Nema dostupnih grupa. Prvo započnite pokretati nešto.", + "MessageSyncPlayPlaybackPermissionRequired": "Potrebno je dopuštenje za reprodukciju.", + "MessageUnauthorizedUser": "Niste ovlašteni pristupiti poslužitelju u ovom trenutku. Molimo kontaktirajte administratora poslužitelja za više informacija.", + "Mobile": "Mobilni (naslijeđeni)", + "OnlyForcedSubtitles": "Samo prisilno", + "OnlyForcedSubtitlesHelp": "Učitavat će se samo titlovi označeni kao obavezni.", + "OptionAllowContentDownloadHelp": "Korisnici mogu preuzimati medije i pohranjivati ih na svojim uređajima. Ovo nije isto što i značajka sinkronizacije. Knjižnicama je potrebno omogućiti ovu značajku da bi ispravno funkcionirale.", + "PageNotFound": "Ovo nije stranica koju tražite.", + "Penciller": "Olovknik", + "PlaybackError.ASS_RENDER_ERROR": "U rendereru titlova ASS/SSA dogodila se pogreška.", + "PlaybackError.FATAL_HLS_ERROR": "U HLS streamu je došlo do fatalne pogreške.", + "PlaybackError.MEDIA_DECODE_ERROR": "Reprodukcija je propala zbog pogreške pri dešifriranju medija.", + "PlaybackError.MEDIA_NOT_SUPPORTED": "Reprodukcija je propala jer ovaj klijent ne podržava medij.", + "PlaybackError.NETWORK_ERROR": "Reprodukcija je propala zbog mrežne pogreške.", + "PlaybackError.NO_MEDIA_ERROR": "Nije moguće pronaći valjan izvor medija za reprodukciju.", + "PlaybackError.PLAYER_ERROR": "Reprodukcija je propala zbog fatalne pogreške playera.", + "PlaybackError.SERVER_ERROR": "Reprodukcija je propala zbog pogreške na poslužitelju.", + "PlaybackError.NotAllowed": "Reprodukcija ovog medija nije dopuštena.", + "PlaybackError.RateLimitExceeded": "Ovaj medij se trenutno ne može reproducirati zbog ograničenja brzine.", + "PlaybackErrorPlaceHolder": "Ovo je mjesto za fizičke medije koje Jellyfin ne može reproducirati. Molimo umetnite disk za reprodukciju.", + "PlaylistError.AddFailed": "Greška pri dodavanju na pokretnu listu", + "PlaylistError.CreateFailed": "Greška pri izradi pokretne liste", + "PlaylistError.UpdateFailed": "Greška pri ažuriranju pokretne liste", + "PleaseConfirmRepositoryInstallation": "Molimo kliknite OK kako biste potvrdili da ste pročitali gore navedeno i želite nastaviti s instalacijom repozitorija dodataka.", + "PluginDisableError": "Došlo je do pogreške pri onemogućavanju dodatka.", + "PluginEnableError": "Došlo je do pogreške tijekom aktiviranja dodatka.", + "PluginLoadConfigError": "Došlo je do pogreške prilikom dohvaćanja stranica za konfiguraciju dodatka.", + "PluginLoadRepoError": "Došlo je do pogreške pri dohvaćanju detalja dodatka iz repozitorija.", + "PluginUninstallError": "Došlo je do pogreške tijekom deinstalacije dodatka.", + "PluginsLoadError": "Došlo je do pogreške pri učitavanju dodataka", + "PreferEmbeddedExtrasTitlesOverFileNames": "Radije koristite ugrađene naslove nego nazive datoteka za dodatke", + "PreferEmbeddedExtrasTitlesOverFileNamesHelp": "Dodaci često imaju isto ugrađeno ime kao i roditelj, provjerite ovo kako biste za njih ionako koristili ugrađene naslove.", + "PreferEmbeddedTitlesOverFileNames": "Radije koristite ugrađene naslove nego nazive datoteka", + "AllowEmbeddedSubtitles": "Onemogućite različite vrste ugrađenih titlova", + "AllowEmbeddedSubtitlesHelp": "Onemogućite titlove ugrađene u medijske kontejnere. Potrebno je potpuno osvježavanje biblioteke.", + "ReadInputAtNativeFramerate": "Čitaj ulaz pri izvornoj brzini sličica", + "ReadInputAtNativeFramerateHelp": "Omogućavanje ove opcije može riješiti neke probleme, npr. prerano prekidanje prijenosa uživo.", + "RememberAudioSelections": "Postavi audiozapis na temelju prethodne stavke", + "RememberAudioSelectionsHelp": "Pokušajte postaviti zvučnu stazu na najbliže podudaranje s posljednjim videom.", + "RememberSubtitleSelections": "Postavi podnaslovnu stazu na temelju prethodne stavke", + "RememberSubtitleSelectionsHelp": "Pokušajte postaviti stazu titlova na najbliže podudaranje s posljednjim videom.", + "RenderPgsSubtitle": "Eksperimentalno prikazivanje podnaslova PGS-a", + "RepositoriesPageLoadError": "Neuspjelo učitavanje repozitorija", + "ResumeLoadError": "Nije uspjelo učitati postavke nastavka", + "SaveLyricsIntoMediaFolders": "Sačuvajte tekstove u medijske mape", + "SavePassword": "Spremi lozinku", + "SaveRecordingNFO": "Sačuvaj EPG metapodatke snimanja u NFO", + "SaveRecordingNFOHelp": "Sačuvajte metapodatke od pružatelja EPG-popisa zajedno s medijima.", + "SaveRecordingImages": "Sačuvaj slike EPG snimanja", + "SaveRecordingImagesHelp": "Sačuvajte slike iz EPG-provajdera uz medije.", + "SaveSubtitlesIntoMediaFolders": "Sačuvajte titlove u medijske mape", + "SelectAdminUsername": "Molimo odaberite korisničko ime za administratorski račun.", + "SettingsPageLoadError": "Neuspjelo učitavanje stranice s postavkama", + "SimultaneousConnectionLimitHelp": "Maksimalan broj dopuštenih istovremenih streamova. Unesite 0 za neograničeno.", + "SkipEpisodesAlreadyInMyLibrary": "Nemoj snimati epizode koje su već u mojoj biblioteci", + "StereoDownmixAlgorithmHelp": "Algoritam koji se koristi za miksanje višekanalnog zvuka u stereo.", + "StoryArc": "Zaplet", + "StorageType.NoRootDirectory": "Nema korijenskog direktorija", + "StreamCountExceedsLimit": "Broj tokova prelazi ograničenje", + "StreamingLoadError": "Nije uspjelo učitati postavke stranice za tok", + "SubtitleAppearanceSettingsAlsoPassedToCastDevices": "Ova se postavka također primjenjuju na svako reproduciranje putem Google Casta koje je pokrenuo ovaj uređaj.", + "TypeOptionPluralBoxSet": "Kompletni setovi", + "UseDoubleRateDeinterlacing": "Udupljajte brzinu sličica pri uklanjanju isprekidanosti", + "UseDoubleRateDeinterlacingHelp": "Ovo postavljanje koristi polnu brzinu pri razmrežavanju, često nazvano bob deinterlacing, što udvostručuje brzinu sličica videa kako bi pružilo potpuni pokret kakav biste vidjeli gledajući razmrežani video na televizoru.", + "ViewAllPlugins": "Prikaži sve dodatke", + "ViewLyrics": "Pogledaj tekst", + "ViewPlaybackInfo": "Prikaži informacije o reprodukciji", + "ViewSettings": "Postavke prikaza", + "WeeklyAt": "{0} na {1}", + "Whitelist": "Bijela lista", + "LabelFallbackFontPath": "Zadana putanja do mape s fontovima", + "EnableFallbackFont": "Omogući rezervne fontove", + "Remuxing": "Remiksiranje", + "RemuxHelp1": "Medij je u nekompatibilnom spremniku datoteka (MKV, AVI, WMV itd.), ali su i video i audio tok kompatibilni s uređajem. Medij će se u stvarnom vremenu neizgubno repakirati prije slanja na uređaj.", + "RemuxHelp2": "Remux koristi vrlo malo računalne snage uz potpuno bezgubnu kvalitetu medija.", + "LabelPlaybackInfo": "Informacije o reprodukciji", + "LabelVideoInfo": "Informacije o videu", + "LabelTrackGain": "Pojačanje staze", + "LabelDirectStreamingInfo": "Informacije o izravnom streamanju", + "LabelRemuxingInfo": "Remiksiranje informacija", + "PreferFmp4HlsContainer": "Preferirajte fMP4-HLS spremnik medija", + "PreferFmp4HlsContainerHelp": "Radije koristite fMP4 kao zadani spremnik za HLS, čime se omogućuje izravno streamanje HEVC i AV1 sadržaja na podržanim uređajima.", + "YoutubeNotFound": "Video nije pronađen.", + "MessageChromecastConnectionError": "Vaš Google Cast prijemnik ne može uspostaviti vezu sa Jellyfin poslužiteljem. Molimo provjerite vezu i pokušajte ponovno.", + "EnableEnhancedNvdecDecoder": "Omogućite poboljšani NVDEC dekoder", + "EnableVppTonemapping": "Omogući mapiranje tona VPP-a", + "EnableVideoToolboxTonemapping": "Omogući mapiranje tona VideoToolboxa", + "AllowVideoToolboxTonemappingHelp": "Hardverski ubrzano mapiranje tonova koje pruža VideoToolbox. Radi s većinom HDR formata, uključujući HDR10, HDR10+ i HLG, ali ne radi s Dolby Vision Profilom 5. Ovo ima viši prioritet u odnosu na drugu Metal implementaciju.", + "TrickplayLoadError": "Neuspjelo učitavanje postavki brzokreta", + "LabelPlayerSizes": "Veličine igrača", + "LabelPlaybackQuality": "Okvir izgubljen / oštećen" } From ef1b6f9fde7734fa616cb161cb4dd36fbb9915b4 Mon Sep 17 00:00:00 2001 From: SecularSteve Date: Fri, 17 Apr 2026 03:31:50 -0400 Subject: [PATCH 121/695] Added translation using Weblate (Bosnian) --- src/strings/bs.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 src/strings/bs.json diff --git a/src/strings/bs.json b/src/strings/bs.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/src/strings/bs.json @@ -0,0 +1 @@ +{} From f2bf2a9f44835615264243339b3040ceb601b8eb Mon Sep 17 00:00:00 2001 From: SecularSteve Date: Fri, 17 Apr 2026 06:29:28 -0400 Subject: [PATCH 122/695] Translated using Weblate (Serbian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sr/ --- src/strings/sr.json | 40 ++++++++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/src/strings/sr.json b/src/strings/sr.json index 16d021c3cb..c68564d94e 100644 --- a/src/strings/sr.json +++ b/src/strings/sr.json @@ -497,7 +497,7 @@ "LabelBirthDate": "Датум рођења", "LabelBindToLocalNetworkAddressHelp": "Замени локалну ИП адресу за HTTP сервер. Ако остане празан, сервер ће се везати за све доступне адресе. Промена ове вредности захтева поновно покретање.", "LabelBindToLocalNetworkAddress": "Вежи за адресу локалне мреже", - "LabelBaseUrlHelp": "УРЛ-у сервера додајте прилагођени поддиректоријум. На пример: http://example.com/<baseurl>", + "LabelBaseUrlHelp": "Додајте прилагођену поддиректорију у URL сервера. На пример: https://example.com/", "LabelBaseUrl": "Основни УРЛ", "LabelAutomaticDiscoveryHelp": "Омогућите апликацијама да аутоматски откривају Jellyfin помоћу УДП порта 7359.", "LabelAutomaticDiscovery": "Омогући аутоматско откривање", @@ -794,7 +794,7 @@ "LabelScheduledTaskLastRan": "Последњи пута покренуто {0}, узимајући {1}.", "LabelReasonForTranscoding": "Разлог за прекодирање", "LabelQuickConnectCode": "Код за брзо повезивање", - "LabelPublishedServerUriHelp": "Замените URI који користи Jellyfin, на основу интерфејса или ИП адресе клијента. На пример: internal=http://jellyfin.example.com, external=https://jellyfin.example.com, или all=https://jellyfin.example.com", + "LabelPublishedServerUriHelp": "Прекорачите URI који Jellyfin користи, на основу интерфејса или IP адресе клијента.", "LabelPublishedServerUri": "Објављени URI сервера", "LabelPostProcessorArgumentsHelp": "Користите {path} као путању до датотеке снимка.", "LabelPostProcessorArguments": "Аргументи командне линије за накнадно процесирање", @@ -974,7 +974,7 @@ "Movie": "Филм", "MoreFromValue": "Више од {0}", "Monday": "Понедељак", - "MillisecondsUnit": "ms", + "MillisecondsUnit": "мс", "MessageSyncPlayUserLeft": "{0} је напустио/ла групу.", "MessageSyncPlayUserJoined": "{0} се придружио групи.", "MessageSyncPlayLibraryAccessDenied": "Приступ овом садржају је ограничен.", @@ -1267,7 +1267,7 @@ "LabelFallbackFontPath": "Путања резервне фасцикле фонтова", "HeaderSelectFallbackFontPathHelp": "Прегледајте или унесите путању до резервне фасцикле фонтова која ће се користити за приказивање ASS/SSA титлова.", "HeaderSelectFallbackFontPath": "Изаберите путању резервне фасцикле фонтова", - "Yadif": "Yet Another DeInterlacing Filter - YADIF", + "Yadif": "Још један филтер за деинтерлацирање (YADIF)", "XmlTvSportsCategoriesHelp": "Програми са овим категоријама биће приказани као спортски програми. Одвојите вишеструко са '|'.", "XmlTvPathHelp": "Путања до XMLTV датотеке. Jellyfin ће прочитати ову датотеку и повремено је проверавати да ли има ажурирања. Ви сте одговорни за стварање и ажурирање датотеке.", "XmlTvNewsCategoriesHelp": "Програми са овим категоријама биће приказани као вести. Одвојите вишеструко са '|'.", @@ -1355,7 +1355,7 @@ "ButtonSpace": "Спејс", "ButtonExitApp": "Изађи из апликације", "ButtonClose": "Затвори", - "ButtonBackspace": "бек-спејс", + "ButtonBackspace": "Бек-спејс", "AddToFavorites": "Додај у омиљене", "LabelSlowResponseEnabled": "Забележите поруку упозорења ако сервер споро одговара", "LabelSyncPlaySettingsSyncCorrectionHelp": "Омогућите активну синхронизацију репродукције или убрзавањем медија или тражењем процењене позиције. Онемогућите ово у случају јаког муцања.", @@ -1411,7 +1411,7 @@ "MessageSent": "Порука послата.", "Print": "Штампај", "Typewriter": "Писаћа машина", - "TypeOptionPluralVideo": "видео снимци", + "TypeOptionPluralVideo": "Видеоснимци", "TypeOptionPluralMusicAlbum": "Музички албуми", "EnableGamepadHelp": "Слушајте унос са било ког повезаног контролера", "AudioBitrateNotSupported": "Брзина у битовима звука није подржана", @@ -1842,7 +1842,7 @@ "PlaybackErrorPlaceHolder": "Ово је симбол за физички медиј који Jellyfin не може да репродукује. Молим, убаците диск за репродукцију.", "ReadInputAtNativeFramerate": "Читај улаз у изворној брзини репродукције", "MetadataNfoLoadError": "Није успело учитавање метаподатака за подешавања NFO", - "PluginsLoadError": "Догодила се грешка приликом учитавања прикључака.", + "PluginsLoadError": "Дошло је до грешке при учитавању додатака", "ReadInputAtNativeFramerateHelp": "Омогућивање ове опције може решити неке потешкоће, нпр. прерано заустављене директних преноса.", "Native": "Изворни", "NativeSubtitleStylingHelp": "Мењање изгледа титлова неће радити на неким уређајима. Међутим, то неће погоршати перформансе.", @@ -1880,5 +1880,29 @@ "DevicesLoadError": "Учитавање уређаја није успело", "HeaderLatestBooks": "Недавно додате књиге", "HeaderLatestMusicVideos": "Недавно додати музички видеи", - "LibrariesLoadError": "Учитавање библиотека није успело" + "LibrariesLoadError": "Учитавање библиотека није успело", + "BrandingLoadError": "Није успело учитавање подешавања брендирања", + "LabelInternalServerUri": "Унутрашњи УРИ", + "LabelInternalServerUriHelp": "Објављен УРИ сервера за интерни приступ.", + "LabelUseSamePublishedServerUri": "Користите исти објављени URI сервера за унутрашњи и спољни приступ", + "NetworkingPageLoadError": "Није успело учитавање мрежних подешавања", + "OnFilesystem": "На фајл систему: {0}", + "ResetFilters": "Ресетуј филтере", + "ResumeLoadError": "Није успело учитавање подешавања наставка преузимања", + "StreamingLoadError": "Није успело учитавање подешавања странице за стриминг", + "Unwatch": "Не гледати", + "UsersEditPageError": "Није успело учитавање странице за уређивање корисника", + "Watch": "Гледај", + "TrickplayLoadError": "Није успело учитавање подешавања за трик-плеј", + "LabelExternalServerUri": "Спољни УРИ", + "LabelExternalServerUriHelp": "Објављен УРИ сервера за спољни приступ.", + "LabelVideoAttributes": "Атрибути видео-снимка", + "LabelVideoColors": "Боје видео-снимка", + "LabelVideoBitDepth": "Видео дубина бита", + "LabelAudioAttributes": "Аудио атрибути", + "LabelTargetCodecs": "Циљни кодексови", + "LabelProgressAndSpeed": "Напредак / брзина", + "LabelReasons": "Разлози", + "LabelPlayerSizes": "Величине играча", + "LabelPlaybackQuality": "Оквир изгубљен / оштећен" } From 179723427cb9e0d70b15abe0e9077c9201e28d4d Mon Sep 17 00:00:00 2001 From: SecularSteve Date: Fri, 17 Apr 2026 06:12:46 -0400 Subject: [PATCH 123/695] Translated using Weblate (Bosnian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/bs/ --- src/strings/bs.json | 1909 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 1908 insertions(+), 1 deletion(-) diff --git a/src/strings/bs.json b/src/strings/bs.json index 0967ef424b..a8600752e4 100644 --- a/src/strings/bs.json +++ b/src/strings/bs.json @@ -1 +1,1908 @@ -{} +{ + "Absolute": "Apsolutni", + "AccessRestrictedTryAgainLater": "Pristup je trenutno ograničen. Molimo pokušajte ponovo kasnije.", + "Actor": "Glumac", + "ActivitiesLoadError": "Neuspjelo učitavanje aktivnosti", + "Add": "Dodajte", + "AddedOnValue": "Dodano {0}", + "AddToCollection": "Dodaj u kolekciju", + "AddToFavorites": "Dodaj u omiljene", + "AddToPlaylist": "Dodaj na plejlistu", + "AddToPlayQueue": "Dodaj u red za reprodukciju", + "AgeValue": "({0} godina)", + "AirDate": "Datum emitovanja", + "AirPlay": "AirPlay", + "Aired": "Emitirano", + "Album": "Album", + "AlbumArtist": "Umjetnik albuma", + "Albums": "Albumi", + "Alerts": "Upozorenja", + "All": "Sve", + "AllChannels": "Svi kanali", + "AllComplexFormats": "Svi složeni formati (ASS, SSA, VobSub, PGS, SUB, IDX, …)", + "AllEpisodes": "Sve epizode", + "AllLanguages": "Svi jezici", + "AllLibraries": "Sve biblioteke", + "AllowedRemoteAddressesHelp": "Popis IP adresa ili IP/maska razdvojenih zarezom za mreže kojima će biti dozvoljeno daljinsko povezivanje. Ako se ostavi prazno, dozvoljene su sve daljinske adrese.", + "AllowCollectionManagement": "Omogućite ovom korisniku upravljanje kolekcijama", + "AllowContentWithTagsHelp": "Prikaži samo medije koji imaju barem jednu od navedenih oznaka.", + "AllowSubtitleManagement": "Omogućite ovom korisniku uređivanje titlova", + "AllowFfmpegThrottling": "Prigušivač transkodira", + "AllowFfmpegThrottlingHelp": "Kada transkodiranje ili remuxiranje stignu dovoljno daleko ispred trenutne pozicije reprodukcije, pauzirajte proces kako bi trošio manje resursa. Ovo je najkorisnije kada gledate bez čestog preskakanja. Isključite ovu opciju ako imate problema s reprodukcijom.", + "AllowFmp4TranscodingContainerHelp": "Omogućite fMP4 kontejner za ovaj tuner kako biste omogućili HEVC i HDR sadržaje. Nisu svi tuneri kompatibilni s ovim kontejnerom. Onemogućite ovo ako imate problema s reprodukcijom.", + "AllowSegmentDeletion": "Izbriši segmente", + "AllowSegmentDeletionHelp": "Obrišite stare segmente nakon što ih klijent preuzme. Ovo sprječava potrebu za pohranjivanjem cijele transkodirane datoteke na disk. Isključite ovu opciju ako imate problema s reprodukcijom.", + "AllowStreamSharingHelp": "Omogućite Jellyfinu da duplira mpegts tok s tunera i podijeli taj duplirani tok sa svojim klijentima. Ovo je korisno kada tuner ima ograničenje ukupnog broja tokova, ali može uzrokovati probleme pri reprodukciji.", + "Alternate": "Alternativni", + "AlternateDVD": "Alternativni DVD", + "AlwaysBurnInSubtitleWhenTranscoding": "Uvijek sagorij u podnaslov prilikom transkodiranja", + "AlwaysBurnInSubtitleWhenTranscodingHelp": "Uključite sve titlove pri pokretanju transkodiranja. Ovo osigurava sinhronizaciju titlova nakon transkodiranja, uz smanjenu brzinu transkodiranja.", + "LabelThrottleDelaySeconds": "Gas nakon", + "LabelThrottleDelaySecondsHelp": "Vrijeme u sekundama nakon kojeg će transkodirac biti ograničen. Mora biti dovoljno veliko da klijent održi zdrav međuspremnik. Radi samo ako je ograničavanje omogućeno.", + "LabelSegmentKeepSeconds": "Vrijeme je da zadržimo segmente", + "LabelSegmentKeepSecondsHelp": "Vrijeme u sekundama koliko segmenti trebaju biti zadržani nakon što ih klijent preuzme. Radi samo ako je omogućeno brisanje segmenata.", + "AllowHWTranscodingHelp": "Omogućite tuneru da transkodira tokove u letu. Ovo može pomoći u smanjenju transkodiranja koje zahtijeva server.", + "AllowMediaConversion": "Omogući konverziju medija", + "AllowMediaConversionHelp": "Dozvolite ili onemogućite pristup funkciji konvertiranja medija.", + "AllowOnTheFlySubtitleExtraction": "Omogućite ekstrakciju titlova u hodu", + "AllowOnTheFlySubtitleExtractionHelp": "Ugrađeni titlovi se mogu izdvojiti iz videozapisa i isporučiti klijentima u običnom tekstu kako bi se spriječilo transkodiranje videa. Na nekim sistemima ovo može potrajati i uzrokovati zastoj reprodukcije videa tokom procesa izdvajanja. Onemogućite ovo da bi se ugrađeni titlovi prilikom transkodiranja videa upisali u videozapis kada klijentski uređaj nativno ne podržava titlove.", + "AllowRemoteAccess": "Omogući udaljene veze na ovaj server", + "AllowRemoteAccessHelp": "Ako se ne provjeri, sve udaljene veze će biti blokirane.", + "AllowTonemappingHelp": "Mapiranje tonova može transformisati dinamički raspon videa iz HDR-a u SDR, pritom održavajući detalje i boje slike, što su vrlo važne informacije za prikazivanje originalne scene. Trenutno radi samo s 10-bitnim HDR10, HLG i DoVi videozapisima. To zahtijeva odgovarajuće GPGPU vrijeme izvršavanja.", + "AlwaysPlaySubtitles": "Uvijek igraj", + "AlwaysPlaySubtitlesHelp": "Titlovi koji odgovaraju odabranoj jezici bit će učitani bez obzira na jezik zvuka.", + "AlwaysRemuxFlacAudioFilesHelp": "Ako imate datoteke koje vaš preglednik odbija reproducirati ili kod kojih netačno izračunava vremenske oznake, omogućite ovo kao privremeno rješenje.", + "AlwaysRemuxMp3AudioFilesHelp": "Ako imate datoteke za koje vaš preglednik netačno izračunava vremenske oznake, omogućite ovo kao privremeno rješenje.", + "AndOtherArtists": "{0} i {1} drugih umjetnika.", + "Anime": "Anime", + "AnyLanguage": "Bilo koji jezik", + "Anytime": "Bilo kada", + "ApiKeysCaption": "Lista trenutno omogućenih API ključeva", + "ApiKeysLoadError": "Neuspjelo učitavanje API ključeva", + "AroundTime": "Oko {0}", + "Arranger": "Aranžer", + "Art": "Prozirne slike", + "Artist": "Umjetnik", + "Artists": "Umjetnici", + "Ascending": "Uspon", + "AskAdminToCreateLibrary": "Zamolite administratora da kreira biblioteku.", + "AsManyAsPossible": "Koliko god je moguće", + "AspectRatio": "Omjer stranica", + "Audio": "Audio", + "Authors": "Autori", + "Author": "Autor", + "Authorize": "Autorizuj", + "AuthProviderHelp": "Odaberite provajdera autentifikacije koji će se koristiti za provjeru lozinke ovog korisnika.", + "Auto": "Auto", + "AutoSubtitleStylingHelp": "Ovaj način rada će se automatski prebacivati između mehanizama za stiliziranje izvornih i prilagođenih titlova, ovisno o vrsti vašeg uređaja.", + "Backdrop": "Pozadina", + "Backdrops": "Pozadine", + "BackdropScreensaver": "Pozadinski čuvar ekrana", + "BackupsPageLoadError": "Neuspjelo učitavanje stranice za sigurnosne kopije", + "Banner": "Prikazno sučelje", + "BirthDateValue": "Rođen: {0}", + "BirthLocation": "Mjesto rođenja", + "BirthPlaceValue": "Mjesto rođenja: {0}", + "Blacklist": "Crna lista", + "BlockContentWithTagsHelp": "Skrijte medije s barem jednom od navedenih oznaka.", + "BookLibraryHelp": "Podržani su audio i tekstualni udžbenici. Pregledajte {0} vodič za imenovanje knjiga {1}.", + "Books": "Knjige", + "Box": "Kutija", + "BoxRear": "Kutija (stražnja)", + "BoxSet": "Kutija s izdanjima", + "Browse": "Pregledaj", + "BrandingLoadError": "Neuspjelo učitavanje postavki brendiranja", + "BurnSubtitlesHelp": "Odredite da li server treba da briše titlove. Izbjegavanje toga znatno će poboljšati performanse. Odaberite Auto za brisanje formata zasnovanih na slikama (VobSub, PGS, SUB, IDX itd.) i određenih ASS ili SSA titlova.", + "ButtonActivate": "Aktivirati", + "ButtonAddImage": "Dodaj sliku", + "ButtonAddMediaLibrary": "Dodaj medijsku biblioteku", + "ButtonAddProvider": "Dodaj pružatelja", + "ButtonAddScheduledTaskTrigger": "Dodaj okidač", + "ButtonAddServer": "Dodaj server", + "ButtonAddTunerDevice": "Dodaj Tuner uređaj", + "ButtonAddUser": "Dodaj korisnika", + "ButtonArrowLeft": "Lijevo", + "ButtonArrowRight": "Desno", + "ButtonAudioTracks": "Audio zapisi", + "ButtonBack": "Nazad", + "ButtonBackspace": "Poništi", + "ButtonCancel": "Otkaži", + "ButtonCast": "Prenesi na uređaj", + "ButtonChangeServer": "Promijeni server", + "ButtonClose": "Zatvori", + "ButtonCreateBackup": "Kreira sigurnosnu kopiju", + "ButtonEditOtherUserPreferences": "Uredi profil, sliku i lične preferencije ovog korisnika.", + "ButtonEditUser": "Uredi korisnika", + "ButtonForgotPassword": "Zaboravili ste lozinku", + "ButtonFullscreen": "Cijeli Ekran", + "ButtonGotIt": "Razumijem", + "ButtonInfo": "Info", + "ButtonLearnMore": "Više", + "ButtonLibraryAccess": "Pristup biblioteci", + "ButtonManualLogin": "Prijava ručno", + "ButtonMore": "Više", + "ButtonNextTrack": "Sljedeća pjesma", + "ButtonOk": "U redu", + "ButtonParentalControl": "Roditeljska kontrola", + "ButtonPause": "Pauziraj", + "ButtonPlayer": "Pokretač", + "ButtonPreviousTrack": "Prethodna pjesma", + "ButtonQuickStartGuide": "Vodič za postavljanje", + "ButtonRefreshGuideData": "Osvježi podatke vodiča", + "ButtonRemove": "Ukloni", + "ButtonRename": "Preimenuj", + "ButtonResume": "Nastavi", + "ButtonRevoke": "Oduzeti", + "ButtonScanAllLibraries": "Skeniraj sve biblioteke", + "ButtonSelectDirectory": "Odabir direktorija", + "ButtonSelectView": "Odabir prikaza", + "ButtonSend": "Pošalji", + "ButtonShutdown": "Prijem pacijenata obustavljen", + "ButtonSignIn": "Prijava", + "ButtonSignOut": "Odjavi se", + "ButtonExitApp": "Prijava za izlazak", + "ButtonSpace": "Prostor", + "ButtonSplit": "Podijeli", + "ButtonStart": "Započni", + "ButtonStop": "Stani", + "ButtonSubmit": "Pošalji", + "ButtonSyncPlay": "Sinkroniziraj reprodukciju", + "ButtonTogglePlaylist": "Popis za reprodukciju", + "ButtonTrailer": "Najava", + "ButtonUninstall": "Deinstaliraj", + "ButtonUseQuickConnect": "Koristite Brzospoj", + "ButtonWebsite": "Web stranica", + "Bwdif": "Bob Weaver DeInterlacing filter (BWDIF)", + "CancelRecording": "Otkaži snimanje", + "CancelSeries": "Otkaži seriju", + "Casual": "Ležerno", + "Categories": "Kategorije", + "ChangingMetadataImageSettingsNewContent": "Promjene u postavkama preuzimanja metapodataka ili umjetničkih djela primjenjivat će se samo na novi sadržaj koji dodate u svoju biblioteku. Da biste primijenili promjene na postojeće naslove, morat ćete ručno osvježiti njihove metapodatke.", + "ChannelAccessHelp": "Odaberite kanale koje želite podijeliti s ovim korisnikom. Administratori će moći uređivati sve kanale pomoću upravitelja metapodataka.", + "ChannelResolutionSD": "SD", + "ChannelResolutionSDPAL": "SD (PAL)", + "ChannelResolutionHD": "HD", + "ChannelResolutionFullHD": "Full HD", + "ChannelResolutionUHD4K": "UHD (4K)", + "ChannelNameOnly": "Samo kanal {0}", + "ChannelNumber": "Broj kanala", + "Channels": "Kanalima", + "CinemaModeConfigurationHelp": "Kino režim donosi filmsko iskustvo direktno u vaš dnevni boravak, s mogućnošću reprodukcije trailera i prilagođenih uvoda prije glavnog filma.", + "SelectAudioNormalizationHelp": "Pojačanje staze - podešava glasnoću svake staze tako da se reproduciraju istom glasnoćom. Pojačanje albuma - podešava glasnoću svih staza na albumu, održavajući dinamički raspon albuma. Prebacivanje između opcije \"Off\" i drugih opcija zahtijeva ponovno pokretanje trenutnog reprodukcije.", + "ClearQueue": "Očisti red", + "ClientSettings": "Postavke klijenta", + "Collections": "Zbirke", + "Colorist": "Kolorist", + "ColorPrimaries": "Primarne boje", + "ColorSpace": "Boja prostora", + "ColorTransfer": "Prijenos boje", + "CommunityRating": "Ocjena zajednice", + "Composer": "Kompozitor", + "Conductor": "Dirigent", + "ConfigureDateAdded": "Postavite kako se određuju metapodaci za 'Datum dodavanja' u Dashboard > Libraries > Prikaz", + "ConfirmDeleteImage": "Izbriši sliku?", + "ConfirmDeleteItem": "Brisanje ovog stavka će ga ukloniti i iz datotečnog sistema i iz vaše medijske biblioteke. Jeste li sigurni da želite nastaviti?", + "ConfirmDeleteCollection": "Jeste li sigurni da želite izbrisati ovu kolekciju?", + "ConfirmDeletePlaylist": "Jeste li sigurni da želite izbrisati ovu plejlistu?", + "ConfirmDeleteSeries": "Brisanje ove serije će izbrisati SVE {0} epizode iz datotečnog sistema i vaše medijske biblioteke. Jeste li sigurni da želite nastaviti?", + "ConfirmDeleteItems": "Brisanjem ovih stavki izbrisat ćete ih i iz datotečnog sistema i iz medijske biblioteke. Jeste li sigurni da želite nastaviti?", + "ConfirmDeleteLyrics": "Brisanje ovih stihova uklonit će ih i iz datotečnog sistema i iz vaše medijske biblioteke. Jeste li sigurni da želite nastaviti?", + "ConfirmDeleteRepository": "Izbrisi repozitorij?", + "ConfirmDeletion": "Potvrdi brisanje", + "ConfirmEndPlayerSession": "Želite li zatvoriti Jellyfin na {0}?", + "Connect": "Spoji se", + "ConnectAnyway": "Poveži se ipak", + "Console": "Konzole", + "ContinueWatching": "Nastavi gledati", + "ContinueReading": "Nastavi čitati", + "Continuing": "Nastavak", + "Copied": "Kopirano", + "Copy": "Kopiraj", + "CopyFailed": "Nije moguće kopirati", + "CopyStreamURL": "Kopiraj URL struje", + "CopyStreamURLSuccess": "URL je uspješno kopiran.", + "CopyLogSuccess": "Sadržaj dnevnika uspješno kopiran.", + "CoverArtist": "Umjetnik omota", + "Create": "Napravi", + "Creator": "Stvoritelj", + "CriticRating": "Ocjena kritičara", + "Cursive": "Kursiv", + "Custom": "Prilagođeno", + "CustomSplashScreenSize": "Prilagođene slike trebaju biti u omjeru stranica 16:9 i minimalne rezolucije 1920x1080.", + "CustomSubtitleStylingHelp": "Stilizacija titlova će raditi na većini uređaja, ali dolazi s dodatnim opterećenjem za performanse.", + "DailyAt": "Svaki dan u {0}", + "Data": "Podaci", + "DateAdded": "Datum dodavanja", + "DateModified": "Datum izmjene", + "DatePlayed": "Datum odigravanja", + "DeathDateValue": "Umro: {0}", + "Default": "Zadano", + "DefaultMetadataLangaugeDescription": "Ovo su vaša zadana podešavanja i mogu se prilagoditi za svaku biblioteku.", + "DefaultSubtitlesHelp": "Titlovi se učitavaju na osnovu zadatih i obaveznih oznaka u ugrađenim metapodacima. Prilikom izbora više opcija uzimaju se u obzir jezičke postavke.", + "DeinterlaceMethodHelp": "Odaberite metodu uklanjanja isprekidanosti koju će softver koristiti pri transkodiranju isprepletenog sadržaja. Kada je omogućeno hardversko ubrzanje koje podržava hardversko uklanjanje isprekidanosti, koristit će se hardverski deinterlace umjesto ove postavke.", + "Delete": "Delete", + "DeleteEntireSeries": "Izbriši {0} epizoda", + "DeleteAll": "Obrisi sve", + "DeleteCustomImage": "Izbriši prilagođenu sliku", + "DeleteDeviceConfirmation": "Jeste li sigurni da želite izbrisati ovaj uređaj? Ponovo će se pojaviti sljedeći put kada se korisnik prijavi na njega.", + "DeleteDevicesConfirmation": "Jeste li sigurni da želite izbrisati sve uređaje? Sve ostale sesije će biti odjavljene. Uređaji će se ponovo pojaviti sljedeći put kada se korisnik prijavi.", + "DeleteRepositoryConfirmation": "Jeste li sigurni da želite izbrisati ovo spremište?", + "DeleteImage": "Obrisi sliku", + "DeleteImageConfirmation": "Jeste li sigurni da želite izbrisati ovu sliku?", + "DeleteLyrics": "Obriši tekst pjesme", + "DeleteMedia": "Izbriši medije", + "DeleteSeries": "Izbriši seriju", + "DeleteEpisode": "Izbriši epizodu", + "DeleteName": "Izbriši {0}", + "DeleteUser": "Brisanje korisnika", + "DeleteUserConfirmation": "Jeste li sigurni da želite izbrisati ovog korisnika?", + "DeleteServerConfirmation": "Jeste li sigurni da želite izbrisati ovaj server?", + "Depressed": "Depresivan", + "Descending": "Silazak", + "Desktop": "Desktop (naslijeđeno)", + "DetectingDevices": "Otkrivanje uređaja", + "DeviceAccessHelp": "Ovo se odnosi samo na uređaje koji se mogu jedinstveno identificirati i neće spriječiti pristup pregledniku. Filtriranje pristupa korisničkih uređaja spriječit će njihovo korištenje novih uređaja dok oni ovdje ne budu odobreni.", + "DevicesLoadError": "Neuspjelo učitavanje uređaja", + "Digital": "Digitalna", + "Director": "Redatelj", + "Directors": "Redatelji", + "DirectPlaying": "Izravno sviranje", + "DirectPlayHelp": "Izvorna datoteka je u potpunosti kompatibilna s ovim klijentom i sesija prima datoteku bez izmjena.", + "DirectStreamHelp1": "Video tok je kompatibilan s uređajem, ali ima nekompatibilan audio format (DTS, Dolby TrueHD itd.) ili broj audio kanala. Video tok će se u realnom vremenu neizgubno ponovo pakirati prije slanja na uređaj. Samo će se audio tok transkodirati.", + "DirectStreamHelp2": "Potrošnja energije pri direktnom streamanju obično ovisi o audio profilu. Samo video stream je bezgubitni.", + "DirectStreaming": "Direktan streaming", + "EnablePlugin": "Omogući", + "DisableCustomCss": "Onemogućite prilagođeni CSS kod koji pruža server", + "DisablePlugin": "Onemogući", + "DisableVbrAudioEncodingHelp": "Spriječite server da kodira audio s VBR-om za ovog klijenta.", + "Disc": "Disk", + "Disconnect": "Odspojite se", + "Display": "Prikaz", + "DisplayInMyMedia": "Prikaži na početnom ekranu", + "DisplayInOtherHomeScreenSections": "Prikaži u odjeljcima početnog ekrana kao što su 'Nedavno dodani mediji' i 'Nastavi gledati'", + "DisplayLoadError": "Došlo je do greške prilikom učitavanja podataka o konfiguraciji prikaza.", + "DisplayMissingEpisodesWithinSeasons": "Prikaži nedostajuće epizode unutar sezona", + "DisplayMissingEpisodesWithinSeasonsHelp": "Ovo također mora biti omogućeno za TV biblioteke u konfiguraciji servera.", + "DisplayModeHelp": "Odaberite stil rasporeda koji želite za sučelje.", + "DlnaMovedMessage": "Funkcionalnost DLNA je premještena u dodatak.", + "DoNotRecord": "Ne snimaj", + "Down": "Dole", + "Download": "Preuzimanje", + "DownloadAll": "Preuzmi sve", + "DownloadManager": "Preuzimanja", + "DownloadsValue": "{0} preuzimanja", + "DrmChannelsNotImported": "Kanali s DRM-om neće biti uvoženi.", + "DropShadow": "Sjenka", + "Edit": "Uredi", + "Editor": "Urednik", + "EditImages": "Uredi slike", + "EditLyrics": "Uredi tekst pjesme", + "EditMetadata": "Uredi metapodatke", + "EditSubtitles": "Uredi titlove", + "EnableAutoCast": "Postavi kao zadano", + "EnableBackdropsHelp": "Prikaži pozadine u pozadini nekih stranica dok pregledavaš biblioteku.", + "EnableBlurHash": "Omogućite zamućene oznake za slike", + "EnableBlurHashHelp": "Slike koje se još učitavaju bit će prikazane jedinstvenim mjestačem.", + "EnableCinemaMode": "Kino režim", + "EnableColorCodedBackgrounds": "Pozadine označene bojama", + "EnableDecodingColorDepth10Hevc": "Omogućite 10-bitno hardversko dekodiranje za HEVC", + "EnableDecodingColorDepth10Vp9": "Omogućite 10-bitno hardversko dekodiranje za VP9", + "EnableDetailsBanner": "Oznaka detalja", + "EnableDetailsBannerHelp": "Prikaži baner na vrhu stranice sa detaljima artikla.", + "EnableDisplayMirroring": "Prikaz ogledala", + "EnableDts": "Omogući DTS (DCA)", + "EnableDtsHelp": "Omogućite samo ako vaš uređaj podržava DTS ili je povezan s kompatibilnim audio prijemnikom, inače može doći do kvara reprodukcije.", + "EnableExternalVideoPlayers": "Vanjski video plejeri", + "EnableExternalVideoPlayersHelp": "Spoljašnji meni za reprodukciju videa će se prikazati pri pokretanju reprodukcije.", + "EnableFasterAnimations": "Brže animacije", + "EnableFasterAnimationsHelp": "Koristite brže animacije i prijelaze.", + "EnableHardwareEncoding": "Omogući hardversko kodiranje", + "EnableHi10p": "Omogući H.264 High 10 profil", + "EnableHi10pHelp": "Omogućava izbjegavanje transkodiranja H.264 10-bitnih videozapisa. Onemogućite ovu opciju ako video prikazuje prazne sličice.", + "EnableLibrary": "Omogući biblioteku", + "EnableLibraryHelp": "Onemogućavanje biblioteke će je sakriti iz svih prikaza korisnika.", + "EnableNextVideoInfoOverlay": "Prikaži informacije o sljedećem videu tokom reprodukcije", + "EnableNextVideoInfoOverlayHelp": "Na kraju videa prikažite informacije o sljedećem videu na trenutnoj plejlisti.", + "EnablePhotos": "Prikaži fotografije", + "EnablePhotosHelp": "Slike će biti otkrivene i prikazane uz ostale medijske datoteke.", + "EnableCardLayout": "Prikaži vizualni CardBox", + "EnableRewatchingNextUp": "Omogući ponovno gledanje u Next Up", + "EnableRewatchingNextUpHelp": "Omogućite prikazivanje već pogledanih epizoda u odjeljku 'Sljedeće'.", + "EnableQuickConnect": "Omogućite brzo povezivanje na ovom serveru", + "EnableSmoothScroll": "Omogući glatko skrolanje", + "EnableStreamLooping": "Automatski loop uživo prijenosa", + "EnableStreamLoopingHelp": "Omogućite ovo ako streamovi uživo sadrže samo nekoliko sekundi podataka i moraju se kontinuirano tražiti. Omogućavanje ove opcije kada nije potrebno može uzrokovati probleme.", + "EnableThemeSongsHelp": "Pustite tematske pjesme u pozadini dok pregledavate biblioteku.", + "EnableThemeVideosHelp": "Pustite tematske videozapise u pozadini dok pregledavate biblioteku.", + "EnableTonemapping": "Omogući mapiranje tona", + "EnableTrueHd": "Omogući TrueHD", + "EnableTrueHdHelp": "Omogućite samo ako vaš uređaj podržava TrueHD ili je povezan s kompatibilnim audio prijemnikom, inače može doći do kvara pri reprodukciji.", + "EncoderPresetHelp": "Odaberite bržu vrijednost za poboljšanje performansi ili sporiju vrijednost za poboljšanje kvaliteta.", + "Ended": "Završeno", + "EndsAtValue": "Završava na {0}", + "Engineer": "Zvučni inženjer", + "Episode": "Epizoda", + "Episodes": "Epizode", + "ErrorAddingListingsToSchedulesDirect": "Došlo je do greške pri dodavanju postave na vaš Schedules Direct račun. Schedules Direct dozvoljava samo ograničen broj postava po računu. Možda ćete morati prijaviti se na web stranicu Schedules Direct i ukloniti druge liste sa svog računa prije nego što nastavite.", + "ErrorAddingMediaPathToVirtualFolder": "Došlo je do greške pri dodavanju medijske putanje. Molimo provjerite da li je putanja ispravna i da li Jellyfin ima pristup toj lokaciji.", + "ErrorAddingTunerDevice": "Došlo je do greške pri dodavanju tunerskog uređaja. Molimo provjerite da li je dostupan i pokušajte ponovo.", + "ErrorAddingXmlTvFile": "Došlo je do greške pri pristupu XMLTV datoteci. Molimo provjerite postoji li datoteka i pokušajte ponovo.", + "ErrorDefault": "Došlo je do greške pri obradi zahtjeva. Molimo pokušajte ponovo kasnije.", + "ErrorDeletingItem": "Došlo je do greške pri brisanju stavke sa servera. Molimo provjerite da li Jellyfin ima dozvolu za pisanje u mapu medija i pokušajte ponovo.", + "ErrorDeletingLyrics": "Došlo je do greške pri brisanju tekstova sa servera. Molimo provjerite da li Jellyfin ima dozvolu za pisanje u mapu medija i pokušajte ponovo.", + "ErrorGettingTvLineups": "Došlo je do greške pri preuzimanju TV programa. Molimo provjerite jesu li vaše informacije ispravne i pokušajte ponovo.", + "ErrorPlayerNotFound": "Nijedan player nije pronađen za traženi medij.", + "ErrorPleaseSelectLineup": "Molimo odaberite postavu i pokušajte ponovo. Ako nijedna postava nije dostupna, provjerite je li vaš korisnički naziv, lozinka i poštanski broj ispravni.", + "ErrorSavingTvProvider": "Došlo je do greške pri spremanju TV provajdera. Molimo provjerite da li je dostupan i pokušajte ponovo.", + "ErrorStartHourGreaterThanEnd": "Krajnje vrijeme mora biti veće od početnog vremena.", + "EveryHour": "Svaki sat", + "EveryNDays": "Svaki {0} dana", + "EveryXHours": "Svaka {0} sata", + "EveryXMinutes": "Svake {0} minute", + "ExitFullscreen": "Izlaz", + "ExtractChapterImagesHelp": "Izvlačenje slika poglavlja omogućava klijentima da prikazuju grafičke menije za odabir scena. Proces može biti spor, zahtjevan po resursima i može zahtijevati nekoliko gigabajta prostora. Pokreće se kada se otkriju videozapisi, a također i kao noćni zakazani zadatak. Raspored je moguće konfigurirati u odjeljku zakazanih zadataka. Ne preporučuje se pokretanje ovog zadatka tokom sati najveće opterećenosti.", + "ExtraLarge": "Extra veliki", + "Extras": "Dodatne stavke", + "FallbackMaxStreamingBitrateHelp": "Maksimalna bitna brzina streaminga koristi se kao rezervna opcija kada ffprobe ne može odrediti bitnu brzinu izvornog toka. Ovo pomaže spriječiti klijente da zatraže pretjerano visoku bitnu brzinu transkodiranja, što bi moglo uzrokovati pad playera i preopterećenje enkodera.", + "FastForward": "Brzo naprijed", + "Favorite": "Omiljeni", + "Favorites": "Omiljeni", + "Features": "Značajke", + "FetchingData": "Preuzimanje dodatnih podataka", + "FFmpegSavePathNotFound": "Ne možemo pronaći FFmpeg koristeći putanju koju ste unijeli. FFprobe je također potreban i mora se nalaziti u istoj mapi. Ove komponente obično dolaze zajedno u istom preuzimanju. Molimo provjerite putanju i pokušajte ponovo.", + "File": "Datoteka", + "FileNotFound": "Datoteka nije pronađena.", + "FileReadCancelled": "Čitanje datoteke je otkazano.", + "FileReadError": "Došlo je do greške prilikom čitanja datoteke.", + "Filter": "Filter", + "Filters": "Filteri", + "Folders": "Mape", + "FormatValue": "Format: {0}", + "Framerate": "Stopa sličica", + "Friday": "Petak", + "Fullscreen": "Cijeli ekran", + "General": "Općenito", + "Genre": "Žanr", + "Genres": "Žanrovi", + "GoHome": "Idi kući", + "GoogleCastUnsupported": "Google Cast nije podržan", + "GridView": "Pregled u mreži", + "GroupBySeries": "Grupiraj po seriji", + "GroupVersions": "Grupne verzije", + "GuestStar": "Gostujuća zvijezda", + "Guide": "Vodič", + "GuideProviderLogin": "Prijavi se", + "GuideProviderSelectListings": "Odaberi oglase", + "H264CrfHelp": "'Constant Rate Factor' (CRF) je zadano podešavanje kvaliteta za softverske enkoder-e x264 i x265. Možete postaviti vrijednosti između 0 i 51, pri čemu niže vrijednosti rezultiraju boljim kvalitetom (na uštrb većih veličina datoteka). Razumne vrijednosti su između 18 i 28. Zadana vrijednost za x264 je 23, a za x265 je 28, pa ih možete koristiti kao polaznu tačku. Hardverski enkoderi ne koriste ove postavke.", + "HDPrograms": "HD programi", + "HardwareAccelerationWarning": "Omogućavanje hardverske akceleracije može uzrokovati nestabilnost u nekim okruženjima. Provjerite da su vaš operativni sistem i video drajveri potpuno ažurirani. Ako nakon omogućavanja ove opcije imate poteškoća s reprodukcijom videa, morat ćete vratiti postavku na None.", + "HeaderAccessSchedule": "Raspored pristupa", + "HeaderAccessScheduleHelp": "Napravite raspored pristupa kako biste ograničili pristup na određena vremena.", + "HeaderActiveDevices": "Aktivni uređaji", + "HeaderActiveRecordings": "Aktivna snimanja", + "HeaderActivity": "Aktivnosti", + "HeaderAdditionalParts": "Dodatni dijelovi", + "HeaderAddLyrics": "Dodaj stihove", + "HeaderAddToCollection": "Dodaj u kolekciju", + "HeaderAddToPlaylist": "Dodaj na plejlistu", + "HeaderAddUpdateImage": "Dodaj/Ažuriraj sliku", + "HeaderAddUpdateSubtitle": "Dodaj/Ažuriraj titlove", + "HeaderAddUser": "Dodaj korisnika", + "HeaderAdmin": "Administracija", + "HeaderAlbumArtists": "Umjetnici albuma", + "HeaderAlert": "Prikazati javascript upozorenje", + "HeaderAllRecordings": "Svi snimci", + "HeaderAllowMediaDeletionFrom": "Omogućite brisanje medija iz", + "HeaderApiKey": "API ključ", + "HeaderApiKeys": "API ključevi", + "HeaderApiKeysHelp": "Za vanjske aplikacije je potrebno imati API ključ kako bi mogle komunicirati sa serverom. Ključevi se izdaju prijavom pomoću običnog korisničkog računa ili ručnim dodjeljivanjem ključa aplikaciji.", + "HeaderApp": "Aplikacija", + "HeaderAppearsOn": "Pojavljuje se na", + "HeaderAudioBooks": "Audio knjige", + "HeaderAudioAdvanced": "Napredni audio", + "HeaderAudioSettings": "Audio postavke", + "HeaderAutoDiscovery": "Otkrivanje mreže", + "HeaderBlockItemsWithNoRating": "Blokirajte stavke bez ili neprepoznatih informacija o ocjeni", + "HeaderBackupsHelp": "Kreirajte i vraćajte snimke vašeg servera koje mogu uključivati bazu podataka, metapodatke, titlove i trik-play.", + "HeaderBranding": "Brendiranje", + "HeaderCancelRecording": "Otkaži snimanje", + "HeaderCancelSeries": "Otkaži seriju", + "HeaderCastAndCrew": "Glumačka postava i ekipa", + "HeaderChannelAccess": "Pristup kanalu", + "HeaderChapterImages": "Slike poglavlja", + "HeaderConfigureRemoteAccess": "Postavite daljinski pristup", + "HeaderConfirmPluginInstallation": "Potvrdite instalaciju dodatka", + "HeaderConfirmRepositoryInstallation": "Potvrdite instalaciju repozitorija dodataka", + "HeaderConfirmRevokeApiKey": "Oduzeti API ključ", + "HeaderConnectionFailure": "Neuspjeh veze", + "HeaderConnectToServer": "Poveži se na server", + "HeaderContinueListening": "Nastavi slušati", + "HeaderContinueWatching": "Nastavi gledati", + "HeaderContinueReading": "Detaljnije", + "HeaderDateIssued": "Datum izdavanja", + "HeaderDefaultRecordingSettings": "Zadana podešenja snimanja", + "HeaderDeleteDevice": "Obrisi uređaj", + "HeaderDeleteDevices": "Izbriši sve uređaje", + "HeaderDeleteItem": "Izbriši stavku", + "HeaderDeleteCollection": "Obrisi kolekciju", + "HeaderDeletePlaylist": "Izbriši plejlistu", + "HeaderDeleteSeries": "Izbriši seriju", + "HeaderDeleteItems": "Izbriši stavke", + "HeaderDeleteLyrics": "Obriši stihove", + "HeaderDeleteProvider": "Obrisanje pružatelja", + "HeaderDeleteTaskTrigger": "Obrisi okidač zadatka", + "HeaderDetectMyDevices": "Otkrij moje uređaje", + "HeaderDeveloperInfo": "Informacije o programeru", + "HeaderDeviceAccess": "Pristup uređaju", + "HeaderDevices": "Uređaji", + "HeaderDownloadSync": "Preuzmi i sinhronizuj", + "HeaderDummyChapter": "Slike poglavlja", + "HeaderDVR": "DVR", + "HeaderEditImages": "Uredi slike", + "HeaderEditPlaylist": "Uredi plejlistu", + "HeaderEnabledFields": "Omogućena polja", + "HeaderEnabledFieldsHelp": "Odznačite polje da ga zaključate i spriječite promjenu njegovih podataka.", + "HeaderEpisodesStatus": "Status epizoda", + "HeaderError": "Greška", + "HeaderExternalIds": "Vanjski ID-ovi", + "HeaderFeatureAccess": "Pristup značajkama", + "HeaderFetcherSettings": "Postavke preuzimanja", + "HeaderFetchImages": "Preuzmi slike", + "HeaderForKids": "Za djecu", + "HeaderFrequentlyPlayed": "Često se igra", + "HeaderGuestCast": "Gostujuće zvijezde", + "HeaderGuideProviders": "Pružatelji podataka TV vodiča", + "HeaderHttpsSettings": "HTTPS postavke", + "HeaderIdentifyItemHelp": "Unesite jedan ili više kriterija za pretragu. Uklonite kriterije da biste proširili rezultate pretrage.", + "HeaderImageOptions": "Opcije slike", + "HeaderInstall": "Instaliraj", + "HeaderInstantMix": "Instant mješavina", + "HeaderKeepRecording": "Nastavi snimati", + "HeaderKeepSeries": "Zadrži seriju", + "HeaderKodiMetadataHelp": "Da biste omogućili ili onemogućili NFO metapodatke, uredite biblioteku i pronađite odjeljak 'Čuvari metapodataka'.", + "HeaderLatestBooks": "Nedavno dodane knjige", + "HeaderLatestEpisodes": "Nedavno dodane epizode", + "HeaderLatestMedia": "Nedavno dodani mediji", + "HeaderLatestMovies": "Nedavno dodani filmovi", + "HeaderLatestMusic": "Nedavno dodana muzika", + "HeaderLatestMusicVideos": "Nedavno dodani muzički spotovi", + "HeaderLatestRecordings": "Nedavno dodani snimci", + "HeaderLibraries": "Biblioteke", + "HeaderLibraryAccess": "Pristup biblioteci", + "HeaderLibraryFolders": "Dosijee biblioteke", + "HeaderLibraryOrder": "Redoslijed biblioteke", + "HeaderLibrarySettings": "Postavke biblioteke", + "HeaderLiveTvTunerSetup": "Postavljanje TV tunera za prijenos uživo", + "HeaderLoginFailure": "Neuspjeh prijave", + "HeaderLyricDownloads": "Preuzimanje stihova", + "HeaderMedia": "Medij", + "HeaderMediaFolders": "Medijske mape", + "HeaderMediaSegmentActions": "Akcije medijskih segmenata", + "HeaderMetadataSettings": "Postavke metapodataka", + "HeaderMoreLikeThis": "Više ovakvih", + "HeaderMusicQuality": "Kvalitet muzike", + "HeaderMyMedia": "Moji mediji", + "HeaderMyMediaSmall": "Moji mediji (mali)", + "HeaderNavigation": "Navigacija", + "HeaderNetworking": "IP protokoli", + "HeaderNewApiKey": "Novi API ključ", + "HeaderNewDevices": "Novi uređaji", + "HeaderNewPlaylist": "Nova lista za reprodukciju", + "HeaderNewRepository": "Novi repozitorij", + "HeaderNextEpisode": "Sljedeća epizoda", + "HeaderNextEpisodePlayingInValue": "Sljedeća epizoda se reproducira u {0}", + "HeaderNextVideo": "Sljedeći video", + "HeaderNextVideoPlayingInValue": "Sljedeći video se reproducira u {0}", + "HeaderNoLyrics": "Nisu pronađeni stihovi", + "HeaderOnNow": "Sad u tijeku", + "HeaderOtherItems": "Ostale stavke", + "HeaderPageNotFound": "Stranica nije u funkciji", + "HeaderParentalRatings": "Roditeljske ocjene", + "HeaderPassword": "Lozinka", + "HeaderPasswordReset": "Ponovno postavljanje lozinke", + "HeaderPaths": "Staze", + "HeaderPerformance": "Performanse", + "HeaderPhotoAlbums": "Fotoalbumi", + "HeaderPlayAll": "Pusti sve", + "HeaderPlayback": "Reprodukcija medija", + "HeaderPlaybackError": "Greška pri reprodukciji", + "HeaderPlayOn": "Igraj dalje", + "HeaderPleaseSignIn": "Molimo prijavite se", + "HeaderPortRanges": "Postavke vatrozida i proxyja", + "HeaderPreferredMetadataLanguage": "Preferirani jezik za metapodatke", + "HeaderPreviewLyrics": "Pregled teksta", + "HeaderRecentlyPlayed": "Nedavno igrano", + "HeaderRecordingMetadataSaving": "Zapisivanje metapodataka", + "HeaderRecordingOptions": "Opcije snimanja", + "HeaderRecordingPostProcessing": "Postprodukcija snimanja", + "HeaderRemoteAccessSettings": "Postavke daljinskog pristupa", + "HeaderRemoteControl": "Daljinski upravljač", + "HeaderRemoveMediaFolder": "Ukloni mapu medija", + "HeaderRemoveMediaLocation": "Ukloni lokaciju medija", + "HeaderRevisionHistory": "Historija revizija", + "HeaderRunningTasks": "Pokrenute zadatke", + "HeaderScenes": "Scene", + "HeaderSeasons": "Sezone", + "HeaderSecondsValue": "{0} sekundi", + "HeaderSelectCertificatePath": "Odaberite putanju certifikata", + "HeaderSelectMetadataPath": "Odaberite putanju metapodataka", + "HeaderSelectMetadataPathHelp": "Pregledajte ili unesite putanju koju želite koristiti za metapodatke. Mapu mora biti moguće zapisivati.", + "HeaderSelectPath": "Odaberi put", + "HeaderSelectServerCachePath": "Odaberite putanju keša servera", + "HeaderSelectServerCachePathHelp": "Pregledajte ili unesite putanju za datoteke poslužiteljske predmemorije. Mapu mora biti moguće zapisivati.", + "HeaderSelectTranscodingPath": "Odaberite privremeni put za transcodiranje", + "HeaderSelectTranscodingPathHelp": "Pregledajte ili unesite putanju koju ćete koristiti za transkodirane datoteke. Mapu mora biti moguće zapisivati.", + "HeaderSendMessage": "Pošalji poruku", + "HeaderSeriesOptions": "Opcije serije", + "HeaderSeriesStatus": "Status serije", + "HeaderServerAddressSettings": "Postavke adrese servera", + "HeaderServerMismatch": "Neusklađenost poslužitelja", + "HeaderServerUnavailable": "Poslužitelj nedostupan", + "HeaderSetupLibrary": "Postavite svoje medijske biblioteke", + "HeaderSortBy": "Sortiraj po", + "HeaderSortOrder": "Redoslijed sortiranja", + "HeaderSpecialEpisodeInfo": "Informacije o posebnoj epizodi", + "HeaderStartNow": "Počni sada", + "HeaderStatus": "Stanje", + "HeaderStopRecording": "Zaustavi snimanje", + "HeaderSubtitleAppearance": "Prikaz podnaslova", + "HeaderSubtitleDownloads": "Preuzimanja potitla", + "HeaderSyncPlayEnabled": "SyncPlay omogućen", + "HeaderSyncPlaySelectGroup": "Pridružite se grupi", + "HeaderSyncPlaySettings": "Podešavanja SyncPlay", + "HeaderSyncPlayPlaybackSettings": "Reprodukcija", + "HeaderSyncPlayTimeSyncSettings": "Sinkronizacija vremena", + "HeaderTaskTriggers": "Okidači zadataka", + "HeaderThisUserIsCurrentlyDisabled": "Ovaj korisnik je trenutno onemogućen", + "HeaderTracks": "Snimke", + "HeaderTunerDevices": "Tuner uređaji", + "HeaderTuners": "Tuneri", + "HeaderTypeImageFetchers": "Dozivači slika ({0})", + "HeaderTypeText": "Unesite tekst", + "HeaderUninstallPlugin": "Deinstaliraj dodatak", + "HeaderUpcomingOnTV": "Uskoro na TV-u", + "HeaderUpdateRequired": "Obavezna nadogradnja", + "HeaderUploadImage": "Pošaljite sliku", + "HeaderUploadLyrics": "Učitaj stihove", + "HeaderUploadSubtitle": "Učitaj titlove", + "HeaderUser": "Korisnik", + "HeaderUsers": "Korisnici", + "HeaderVideoAdvanced": "Napredni video", + "HeaderVideoQuality": "Kvalitet videa", + "HeaderVideos": "Videozapisi", + "HeaderVideoType": "Tip videa", + "HeaderVideoTypes": "Tipovi videozapisa", + "HeaderYears": "Godine", + "Help": "Pomoć", + "Hide": "Sakrij", + "HideWatchedContentFromLatestMedia": "Sakriji gledani sadržaj iz 'Nedavno dodanih medija'", + "Home": "Naslov", + "HomeVideosPhotos": "Kućni videozapisi i fotografije", + "Horizontal": "Horizontalno", + "HttpsRequiresCert": "Da biste omogućili sigurne veze, morat ćete dostaviti pouzdani SSL certifikat, kao što je Let's Encrypt. Molimo vas da ili dostavite certifikat ili onemogućite sigurne veze.", + "Identify": "Identificirajte", + "IgnoreDts": "Ignoriši DTS (vremenski žig dešifriranja)", + "IgnoreDtsHelp": "Onemogućavanje ove opcije može riješiti neke probleme, npr. izostanak zvuka na kanalima sa odvojenim audio i video streamovima.", + "Illustrator": "Ilustrator", + "Image": "Slika", + "ImageDeleteFailed": "Brisanje slike nije uspjelo", + "ImageUploadCancelled": "Otkazano učitavanje slike", + "ImageUploadFailed": "Učitavanje slike nije uspjelo", + "Images": "Slike", + "ImportFavoriteChannelsHelp": "Uvezu će biti podvrgnuti samo kanali koji su na uređaju za skeniranje označeni kao omiljeni.", + "Inker": "Tinta", + "InstallingPackage": "Instaliranje {0} (verzija {1})", + "InstantMix": "Instant mješavina", + "ItemCount": "{0} stavki", + "ItemDetails": "Detalji artikla", + "Items": "Stavke", + "Kids": "Djeca", + "KnownProxiesHelp": "Popis IP adresa ili naziva hostova poznatih proxy servera odvojenih zarezom, koji se koriste pri povezivanju na vaš Jellyfin instancu. Ovo je potrebno za pravilno korištenje zaglavlja 'X-Forwarded-For'. Zahtijeva ponovno pokretanje nakon spremanja.", + "Label3DFormat": "3D format", + "LabelAbortedByServerShutdown": "Prekinuto gašenjem servera", + "LabelAccessDay": "Dan u sedmici", + "LabelAccessEnd": "Kraj vremena", + "LabelAccessStart": "Vrijeme početka", + "LabelAirDays": "Dani vazduhoplova", + "LabelAirsAfterSeason": "Emituje se nakon sezone", + "LabelAirsBeforeEpisode": "Emituje se prije epizode", + "LabelAirsBeforeSeason": "Emituje se prije sezone", + "LabelAirTime": "Vrijeme emitovanja", + "LabelAlbum": "Album", + "LabelAlbumArtists": "Umjetnici albuma", + "LabelAlbumGain": "Pojačanje albuma", + "LabelAllowContentWithTags": "Omogući stavke s oznakama", + "LabelAllowedRemoteAddresses": "Daljinski filter IP adresa", + "LabelAllowedRemoteAddressesMode": "Daljinski način filtriranja IP adresa", + "LabelAllowFmp4TranscodingContainer": "Omogući fMP4 kontejner za transkodiranje", + "LabelAllowHWTranscoding": "Omogući hardversko transkodiranje", + "LabelAlwaysRemuxFlacAudioFiles": "Uvijek remux FLAC audio datoteke", + "LabelAlwaysRemuxMp3AudioFiles": "Uvijek remiksujte MP3 audio datoteke", + "LabelAllowStreamSharing": "Omogući dijeljenje prijenosa", + "LabelAppName": "Naziv aplikacije", + "LabelAppNameExample": "Ljudski čitljiv naziv za identifikaciju API ključeva. Ova postavka neće utjecati na funkcionalnost.", + "LabelArtists": "Umjetnici", + "LabelArtistsHelp": "Odvojite više umjetnika tačkom-zarezom.", + "LabelAudioBitDepth": "Audio dubina bita", + "LabelAudioBitrate": "Audio bitrata", + "LabelAudioChannels": "Audio kanali", + "LabelAudioCodec": "Audio kodek", + "LabelAudioLanguagePreference": "Poželjeni audio jezik", + "LabelAudioTagSettings": "Postavke audio oznake", + "LabelSelectAudioNormalization": "Normalizacija zvuka", + "LabelSelectPreferredTranscodeVideoAudioCodec": "Preferirani audio kodek za transkodiranje pri reprodukciji videa", + "LabelAudioSampleRate": "Uzorak brzine audio uzorkovanja", + "LabelAuthProvider": "Pružatelj autentifikacije", + "LabelAutomaticallyAddToCollection": "Automatski dodaj u kolekciju", + "LabelAutomaticallyAddToCollectionHelp": "Kada najmanje dva filma imaju isto ime kolekcije, automatski će biti dodani u kolekciju.", + "LabelAutomaticallyRefreshInternetMetadataEvery": "Automatski osvježite metapodatke s interneta", + "LabelAutomaticDiscovery": "Omogući automatsko otkrivanje", + "LabelAutomaticDiscoveryHelp": "Omogućite aplikacijama da automatski otkriju Jellyfin koristeći UDP port 7359.", + "LabelAvailable": "Dostupno", + "LabelBackupsUnavailable": "Nema dostupnih sigurnosnih kopija", + "LabelBaseUrl": "Osnovna URL adresa", + "LabelBaseUrlHelp": "Dodajte prilagođenu podmapu u URL poslužitelja. Na primjer: https://example.com/", + "LabelBackdropScreensaverInterval": "Pozadina Čuvar ekrana Interval", + "LabelBackdropScreensaverIntervalHelp": "Vrijeme u sekundama između različitih pozadina pri korištenju screensavera pozadina.", + "LabelSlideshowInterval": "Interval foto-slajd-šoua", + "LabelSlideshowIntervalHelp": "Vrijeme u sekundama koliko se svaka fotografija prikazuje u slajdovima.", + "LabelBindToLocalNetworkAddress": "Poveži se na lokalnu mrežnu adresu", + "LabelBindToLocalNetworkAddressHelp": "Prepišite lokalnu IP adresu HTTP servera. Ako ostane prazno, server će se povezati na sve dostupne adrese. Promjena ove vrijednosti zahtijeva ponovno pokretanje.", + "LabelBirthDate": "Datum rođenja", + "LabelBirthYear": "Godina rođenja", + "LabelBitrate": "Bit-stopa", + "LabelBlastMessageInterval": "Interval poruke Alive", + "LabelBlastMessageIntervalHelp": "Odredite trajanje u sekundama između poruka \"blast alive\".", + "LabelBlockContentWithTags": "Blokiraj stavke s oznakama", + "LabelBuildVersion": "Verzija izgradnje", + "LabelBundled": "Pakirano", + "LabelBurnSubtitles": "Ugradi titlove", + "LabelCache": "Keš", + "LabelCachePath": "Staza kašeta", + "LabelCachePathHelp": "Navedi prilagođenu lokaciju za datoteke poslužiteljske keša, poput slika. Ostavite prazno da biste koristili zadanu lokaciju poslužitelja.", + "LabelCancelled": "Otkazano", + "LabelCertificatePassword": "Lozinka certifikata", + "LabelCertificatePasswordHelp": "Ako vaš certifikat zahtijeva lozinku, molimo unesite je ovdje.", + "LabelChannels": "Kanalima", + "LabelChromecastVersion": "Verzija Google Casta", + "LabelCollection": "Zbirka", + "LabelColorPrimaries": "Primarne boje", + "LabelColorSpace": "Boja prostora", + "LabelColorTransfer": "Prijenos boje", + "LabelCommunityRating": "Ocjena zajednice", + "LabelContentType": "Tip sadržaja", + "LabelCorruptedFrames": "Korrumpirani okviri", + "LabelCountry": "Zemlja/Regija", + "LabelCreateHttpPortMap": "Omogućite automatsko mapiranje portova za HTTP promet, kao i za HTTPS.", + "LabelCreateHttpPortMapHelp": "Omogućite automatsko mapiranje porta za kreiranje pravila za HTTP promet pored HTTPS prometa.", + "LabelCriticRating": "Ocjena kritičara", + "LabelCurrentPassword": "Trenutna lozinka", + "LabelCurrentStatus": "Trenutni status", + "LabelCustomCertificatePath": "Prilagođena staza SSL certifikata", + "LabelCustomCertificatePathHelp": "Put do PKCS #12 datoteke koja sadrži certifikat i privatni ključ za omogućavanje TLS podrške na prilagođenoj domeni.", + "LabelCustomCss": "Prilagođeni CSS kod", + "LabelCustomCssHelp": "Primijenite svoj prilagođeni CSS kod za tematsko oblikovanje/brendiranje web sučelja.", + "LabelCustomDeviceDisplayNameHelp": "Unesite prilagođeno ime za prikaz ili ostavite prazno da biste koristili ime koje je prijavilo uređaj.", + "LabelCustomRating": "Prilagođena ocjena", + "LabelCustomTagDelimiters": "Prilagođeni razdjelnik oznaka", + "LabelCustomTagDelimitersHelp": "Karakterima treba tretirati kao razdjelnike za odvajanje oznaka.", + "LabelDashboardTheme": "Tema Server Dashboarda", + "LabelDatabase": "Baza podataka", + "LabelDate": "Datum", + "LabelDateAdded": "Datum dodavanja", + "LabelDateAddedBehavior": "Datum dodavanja ponašanja za novi sadržaj", + "LabelDateAddedBehaviorHelp": "Ako je vrijednost metapodataka prisutna, ona će se uvijek koristiti prije bilo koje od ovih opcija.", + "LabelDateTimeLocale": "Datum i vrijeme po lokalnom formatu", + "LabelDay": "Dan u sedmici", + "LabelDeathDate": "Datum smrti", + "LabelDefaultScreen": "Zadani ekran", + "LabelDeinterlaceMethod": "Metoda uklanjanja interlacea", + "LabelDelimiterWhitelist": "Bijela lista razdjelnika", + "LabelDelimiterWhitelistHelp": "Elementi koji se isključuju iz dijeljenja oznaka. Jedan element po redu.", + "LabelDeveloper": "Programer", + "LabelDevice": "Uređaj", + "LabelDisableCustomCss": "Onemogućite prilagođeni CSS kod za temu/brendiranje koji je dostavljen sa servera.", + "LabelDisableVbrAudioEncoding": "Onemogućite VBR kodiranje zvuka", + "LabelDiscNumber": "Broj disketa", + "LabelDisplayLanguage": "Jezik prikaza", + "LabelDisplayLanguageHelp": "Prevođenje Jellyfina je tekući projekat.", + "LabelDisplayMode": "Način prikaza", + "LabelDisplayName": "Prikazano ime", + "LabelDisplayOrder": "Redoslijed prikaza", + "LabelDisplaySpecialsWithinSeasons": "Prikažite specijale unutar sezona u kojima su emitovani", + "LabelDownloadLanguages": "Preuzmi jezike", + "LabelDownMixAudioScale": "Pojačanje zvuka pri miksanju", + "LabelDownMixAudioScaleHelp": "Pojačajte zvuk pri miksanju. Vrijednost jedan će sačuvati izvorni volumen.", + "LabelStereoDownmixAlgorithm": "Algoritam stereo downmiksa", + "LabelDuration": "Trajanje", + "LabelDropImageHere": "Pustite sliku ovdje ili kliknite da pregledate.", + "LabelDropLyricsHere": "Upišite tekst pjesme ovdje ili kliknite da pregledate.", + "LabelDroppedFrames": "Izgubljeni okviri", + "LabelDropShadow": "Sjenka", + "LabelDropSubtitleHere": "Umetnite podnaslov ovdje ili kliknite da pregledate.", + "LabelDummyChapterDuration": "Interval", + "LabelDummyChapterDurationHelp": "Interval između probnih poglavlja u sekundama. Postavite na 0 da onemogućite generisanje probnih poglavlja. Promjena ove postavke neće uticati na postojeća probna poglavlja.", + "LabelChapterImageResolution": "Odluka", + "LabelChapterImageResolutionHelp": "Rezolucija izvučenih slika poglavlja. Promjena ovoga neće utjecati na postojeća probna poglavlja.", + "LabelDynamicExternalId": "{0} Ja", + "LabelEnableAudioVbr": "Omogući VBR kodiranje zvuka", + "LabelEnableAudioVbrHelp": "Promjenjivi bitrata nudi bolji kvalitet u odnosu na prosječni bitrata, ali u nekim rijetkim slučajevima može uzrokovati kašnjenja pri reprodukciji i probleme sa kompatibilnošću.", + "LabelEnableHardwareDecodingFor": "Omogući hardversko dekodiranje za", + "LabelEnableHttps": "Omogući HTTPS", + "LabelEnableHttpsHelp": "Slušajte na konfiguriranom HTTPS portu. Za to je također potrebno dostaviti valjani certifikat.", + "LabelEnableIP4": "Omogući IPv4", + "LabelEnableIP4Help": "Omogućite IPv4 funkcionalnost.", + "LabelEnableIP6": "Omogući IPv6", + "LabelEnableIP6Help": "Omogućite IPv6 funkcionalnost.", + "LabelEnableLUFSScan": "Omogući LUFS skeniranje", + "LabelEnableLUFSScanHelp": "Klijenti mogu normalizirati reprodukciju zvuka kako bi dobili jednaku glasnoću na svim trakama. To će produžiti skeniranje biblioteke i zahtijevati više resursa.", + "LabelEnablePlugin": "Omogući dodatak", + "LabelEnableRealtimeMonitor": "Omogućite praćenje u stvarnom vremenu", + "LabelEnableRealtimeMonitorHelp": "Promjene na datotekama bit će odmah obrađene na podržanim datotečnim sistemima.", + "LabelEncoderPreset": "Prednastavka kodiranja", + "LabelEndDate": "Datum završetka", + "LabelEpisodeNumber": "Broj epizode", + "LabelEvent": "Događaj", + "LabelEveryXMinutes": "Svaki", + "LabelExtractChaptersDuringLibraryScan": "Izvući slike poglavlja tokom skeniranja biblioteke", + "LabelExtractChaptersDuringLibraryScanHelp": "Generirajte slike poglavlja kada se videozapisi uvoze tokom skeniranja biblioteke. U suprotnom će se one izvući tokom zakazanog zadatka za slike poglavlja, što omogućava redovnom skeniranju biblioteke da se završi brže.", + "LabelFailed": "Nije uspjelo", + "LabelFallbackMaxStreamingBitrate": "Rezervni maksimalni bitrata strima (Mbps)", + "LabelffmpegPath": "Staza FFmpeg-a", + "LabelffmpegPathHelp": "Staza do datoteke ili mape aplikacije FFmpeg koja sadrži FFmpeg.", + "LabelFileOrUrl": "Datoteka ili URL", + "LabelFinish": "Završna obrada", + "LabelFolder": "Mapa", + "LabelFont": "Font", + "LabelForgotPasswordUsernameHelp": "Unesite svoje korisničko ime, ako ga se sjećate.", + "LabelFormat": "Format", + "LabelFriendlyName": "Prijateljski naziv", + "LabelGroupMoviesIntoCollections": "Grupirajte filmove u kolekcije", + "LabelGroupMoviesIntoCollectionsHelp": "Filmovi u kolekciji bit će prikazani kao jedna grupirana stavka prilikom prikazivanja popisa filmova.", + "LabelGroupShowsIntoCollections": "Grupne izložbe u kolekcije", + "LabelGroupShowsIntoCollectionsHelp": "Predstave u kolekciji bit će prikazane kao jedna grupirana stavka pri prikazu popisa predstava.", + "LabelH264Crf": "H.264 kodiranje CRF", + "LabelH265Crf": "H.265 kodiranje CRF", + "LabelHardwareAccelerationType": "Hardverska akceleracija", + "LabelHardwareAccelerationTypeHelp": "Hardverska akceleracija zahtijeva dodatnu konfiguraciju.", + "LabelHardwareEncoding": "Hardversko kodiranje", + "LabelHomeNetworkQuality": "Kvalitet kućne mreže", + "LabelHomeScreenSectionValue": "Odjeljak početnog ekrana {0}", + "LabelHttpsPort": "Lokalni HTTPS broj porta", + "LabelHttpsPortHelp": "Broj TCP porta za HTTPS server.", + "LabelImageCache": "Keš slika", + "LabelImageFetchersHelp": "Omogućite i rangirajte svoje omiljene alate za dohvaćanje slika po redu prioriteta.", + "LabelImageType": "Tip slike", + "LabelImportOnlyFavoriteChannels": "Ograniči na kanale označene kao omiljeni", + "LabelInstalled": "Instalirano", + "LabelInternetQuality": "Kvalitet interneta", + "LabelInternalServerUri": "Interni URI", + "LabelInternalServerUriHelp": "Objavljen URI poslužitelja za interni pristup.", + "LabelIsForced": "Prisilno", + "LabelIsSynced": "Je li sinhronizovano", + "LabelKeepUpTo": "Nastavi do", + "LabelKidsCategories": "Dječije kategorije", + "LabelKnownProxies": "Poznati proxyji", + "LabelKodiMetadataDateFormat": "Format datuma izdanja", + "LabelKodiMetadataDateFormatHelp": "Svi datumi unutar NFO datoteka bit će parsirani pomoću ovog formata.", + "LabelKodiMetadataEnableExtraThumbs": "Kopiraj extrafanart u polje extrathumbs", + "LabelKodiMetadataEnableExtraThumbsHelp": "Prilikom preuzimanja slika, mogu se sačuvati u oba extrafanart i extrathumbs za maksimalnu kompatibilnost Kodi kože.", + "LabelKodiMetadataEnablePathSubstitution": "Omogući zamjenu putanja", + "LabelKodiMetadataEnablePathSubstitutionHelp": "Omogućite zamjenu putanja za slike koristeći postavke zamjene putanja servera.", + "LabelKodiMetadataSaveImagePaths": "Sačuvajte putanje slika unutar NFO datoteka", + "LabelKodiMetadataSaveImagePathsHelp": "Ovo se preporučuje ako imena datoteka sa slikama ne odgovaraju Kodi smjernicama.", + "LabelKodiMetadataUser": "Sačuvajte podatke o praćenju korisnika u NFO datoteke za", + "LabelKodiMetadataUserHelp": "Sačuvajte podatke o praćenju u NFO datoteke za korištenje u drugim aplikacijama.", + "LabelLanguage": "Jezik", + "LabelLanNetworks": "LAN mreže", + "LabelLevel": "Nivo", + "LabelLibraryPageSize": "Veličina stranice biblioteke", + "LabelLibraryPageSizeHelp": "Postavite broj stavki koje se prikazuju na stranici biblioteke. Postavljanjem vrijednosti 0 onemogućit ćete paginaciju. Imajte na umu da postavljanje ove vrijednosti na 0 ili na bilo koju vrijednost veću od 100 može dovesti do grešaka i smanjene performanse.", + "LabelMaxDaysForNextUp": "Maksimalan broj dana u 'Next Up'", + "LabelMaxDaysForNextUpHelp": "Postavite maksimalan broj dana koliko emisija može ostati na listi 'Next Up' bez da je pogledate.", + "LabelMaxVideoResolution": "Maksimalna dozvoljena rezolucija video transkodiranja", + "LabelMediaDetails": "Medijski detalji", + "LabelMediaSegmentProviders": "Pružatelji medijskih segmenata", + "LabelMediaSegmentsType": "{0} Segmenti", + "LabelLineup": "Postava", + "LabelLocalCustomCss": "Prilagođeni CSS kod za stil koji se primjenjuje samo na ovog klijenta. Možda ćete htjeti onemogućiti prilagođeni CSS kod na serveru.", + "LabelLocalHttpServerPortNumber": "Lokalni HTTP broj porta", + "LabelLocalHttpServerPortNumberHelp": "Broj TCP porta za HTTP server.", + "LabelLockItemToPreventChanges": "Zaključajte ovaj element kako biste spriječili buduće promjene metapodataka", + "LabelLoginDisclaimer": "Odricanje od odgovornosti pri prijavi", + "LabelLoginDisclaimerHelp": "Poruka koja će biti prikazana na dnu stranice za prijavu.", + "LabelLogs": "Logovi", + "LabelLyricDownloaders": "Preuzimatelji stihova", + "LabelMaxAudiobookResume": "Preostalih minuta audioknjige za nastavak", + "LabelMaxAudiobookResumeHelp": "Naslovi se smatraju u potpunosti odsviranim ako se zaustave kada je preostalo trajanje manje od ove vrijednosti.", + "LabelMaxBackdropsPerItem": "Maksimalan broj pozadina po stavci", + "LabelMaxChromecastBitrate": "Kvalitet streaminga Google Cast", + "LabelMaxMuxingQueueSize": "Maksimalna veličina reda za multipleksiranje", + "LabelMaxMuxingQueueSizeHelp": "Maksimalan broj paketa koji se mogu pohraniti u međuspremnik dok se čekaju inicijalizacije svih tokova. Pokušajte povećati ovu vrijednost ako i dalje nailazite na grešku \"Too many packets buffered for output stream\" u FFmpeg zapisima. Preporučena vrijednost je 2048.", + "LabelMaxParentalRating": "Najviša dozvoljena ocjena za roditelje", + "LabelMaxResumePercentage": "Maksimalni postotak životopisa", + "LabelMaxResumePercentageHelp": "Naslovi se smatraju u potpunosti odigranim ako se zaustave nakon tog vremena.", + "LabelMessageText": "Tekst poruke", + "LabelMessageTitle": "Naslov poruke", + "LabelMetadata": "Metapodaci", + "LabelMetadataDownloadersHelp": "Omogućite i rangirajte svoje omiljene alate za preuzimanje metapodataka po redu prioriteta. Alati za preuzimanje nižeg prioriteta koristit će se samo za popunjavanje nedostajućih informacija.", + "LabelMetadataDownloadLanguage": "Poželjeni jezik za preuzimanje", + "LabelMetadataPath": "Staza metapodataka", + "LabelMetadataPathHelp": "Odredite prilagođenu lokaciju za preuzetu umjetničku djela i metapodatke.", + "LabelMetadataReaders": "Čitači metapodataka", + "LabelMetadataReadersHelp": "Rangirajte svoje omiljene lokalne izvore metapodataka po redu prioriteta. Prva pronađena datoteka će biti pročitana.", + "LabelMetadataSavers": "Čuvari metapodataka", + "LabelMetadataSaversHelp": "Odaberite formate datoteka koje ćete koristiti pri spremanju svojih metapodataka.", + "LabelMinAudiobookResume": "Minimalni životopis za audioknjige u nekoliko minuta", + "LabelMinAudiobookResumeHelp": "Titule se smatraju neigranim ako su zaustavljene prije ovog vremena.", + "LabelMinBackdropDownloadWidth": "Minimalna širina pozadine za preuzimanje", + "LabelMinResumeDuration": "Minimalna dužina životopisa", + "LabelMinResumeDurationHelp": "Najkraća dužina videa u sekundama koja će sačuvati poziciju reprodukcije i omogućiti nastavak.", + "LabelMinResumePercentage": "Minimalni postotak u životopisu", + "LabelMinResumePercentageHelp": "Titule se smatraju neigranim ako su zaustavljene prije ovog vremena.", + "LabelMovieCategories": "Kategorije filmova", + "LabelMoviePrefix": "Filmski prefiks", + "LabelMoviePrefixHelp": "Ako se prefiks primjenjuje na naslove filmova, unesite ga ovdje kako bi ga server mogao ispravno obraditi.", + "LabelMovieRecordingPath": "Staza snimanja filma", + "LabelName": "Ime", + "LabelNewName": "Novo ime", + "LabelNewPassword": "Nova šifra", + "LabelNewPasswordConfirm": "Potvrdi novu lozinku", + "LabelNewsCategories": "Kategorije vijesti", + "LabelNoChangelog": "Za ovo izdanje nije dostavljen dnevnik promjena.", + "LabelNotInstalled": "Nije instalirano", + "LabelNumber": "Brojevi", + "LabelNumberOfGuideDays": "Broj dana podataka vodiča za preuzimanje", + "LabelNumberOfGuideDaysHelp": "Preuzimanje vodičkih podataka za više dana omogućava planiranje unaprijed i pregled više programa, ali će preuzimanje trajati duže. Automatski će odabrati ovisno o broju kanala.", + "LabelOpenclDevice": "OpenCL uređaj", + "LabelOpenclDeviceHelp": "Ovo je OpenCL uređaj koji se koristi za mapiranje tonova. Lijeva strana točke je broj platforme, a desna strana je broj uređaja na platformi. Zadana vrijednost je 0.0. Potrebna je FFmpeg aplikacijska datoteka koja sadrži metodu hardverske akceleracije putem OpenCL-a.", + "LabelOriginalAspectRatio": "Originalni omjer stranica", + "LabelOriginalName": "Izvorni naziv", + "LabelOriginalTitle": "Originalni naslov", + "LabelOverview": "Pregled", + "LabelParallelImageEncodingLimit": "Ograničenje paralelnog kodiranja slika", + "LabelParallelImageEncodingLimitHelp": "Maksimalan broj enkodiranja slika koji je dozvoljen da se izvršava paralelno. Ako ostavite ovo prazno, odabrat će se ograničenje zasnovano na broju jezgri vašeg sistema.", + "LabelParentalRating": "Roditeljski rejting", + "LabelParentNumber": "Broj roditelja", + "LabelPassword": "Lozinka", + "LabelPasswordConfirm": "Lozinka (potvrdi)", + "LabelPasswordRecoveryPinCode": "PIN kod", + "LabelPasswordResetProvider": "Provajder za resetiranje lozinke", + "LabelPath": "Putanja", + "LabelPersonRole": "Uloga", + "LabelPersonRoleHelp": "Primjer: vozač kamiona za sladoled", + "LabelPlaceOfBirth": "Mjesto rođenja", + "LabelPlayDefaultAudioTrack": "Pusti zadani audio zapis bez obzira na jezik", + "LabelPlayer": "Pokretač", + "LabelPlayerDimensions": "Dimenzije igrača", + "LabelPlaylist": "Popis za reprodukciju", + "LabelPlayMethod": "Metoda igre", + "LabelPleaseRestart": "Promjene će stupiti na snagu nakon ručnog ponovnog učitavanja web klijenta.", + "LabelPostProcessor": "Aplikacija za post-obradu", + "LabelPostProcessorArguments": "Argumenti komandne linije post-procesora", + "LabelPostProcessorArgumentsHelp": "Koristite {path} kao putanju do datoteke snimka.", + "LabelPreferredDisplayLanguage": "Poželjeni jezik prikaza", + "LabelPreferredSubtitleLanguage": "Poželjeni jezik titla", + "LabelProfileContainer": "Kontejner", + "LabelProgramData": "Podaci o programu", + "LabelProtocol": "Protokoli", + "LabelPublicHttpPort": "Javni HTTP broj porta", + "LabelPublicHttpPortHelp": "Javni broj porta koji treba mapirati na lokalni HTTP port.", + "LabelPublicHttpsPort": "Javni broj HTTPS porta", + "LabelPublicHttpsPortHelp": "Javni broj porta koji treba mapirati na lokalni HTTPS port.", + "LabelPublishedServerUri": "Objavljena URI poslužitelja", + "LabelPublishedServerUriHelp": "Prekojašite URI koji Jellyfin koristi, na osnovu sučelja ili IP adrese klijenta.", + "LabelQsvDevice": "QSV uređaj", + "LabelQsvDeviceHelp": "Navedite uređaj za Intel QSV na sistemu sa više GPU-ova. Na Linuxu je to render čvor, npr. /dev/dri/renderD128. Na Windowsu je to indeks uređaja počevši od 0. Ostavite prazno osim ako znate šta radite.", + "LabelQuickConnectCode": "Kod za brzo povezivanje", + "LabelReasonForTranscoding": "Razlog za transkodiranje", + "LabelRecord": "Snimi", + "LabelRecordingPath": "Zadani put zapisa", + "LabelRecordingPathHelp": "Odredite zadanu lokaciju za spremanje snimaka. Ako ostane prazno, koristit će se mapa podataka programa servera.", + "LabelRefreshMode": "Režim osvježavanja", + "LabelReleaseDate": "Datum izlaska", + "LabelRemoteClientBitrateLimit": "Ograničenje bit-stopa za internet streaming (Mbps)", + "LabelRemoteClientBitrateLimitHelp": "Opcionalno ograničenje bitrata po streamu za sve uređaje izvan mreže. Ovo je korisno za sprječavanje da uređaji zatraže višu bitrata nego što vaša internetska veza može podnijeti. To može rezultirati povećanim opterećenjem CPU-a na vašem serveru kako bi se videozapisi u realnom vremenu pretvarali u nižu bitrata.", + "LabelRepository": "Repozitorij", + "LabelRepositoryName": "Naziv repozitorija", + "LabelRepositoryNameHelp": "Prilagođeni naziv za razlikovanje ovog repozitorija od bilo kojih drugih dodanih na vaš server.", + "LabelRepositoryUrl": "URL repozitorija", + "LabelRepositoryUrlHelp": "Lokaciju repozitorija manifesta koju želite uključiti.", + "LabelRequireHttps": "Zahtijevajte HTTPS", + "LabelRequireHttpsHelp": "Ako je označeno, poslužitelj će automatski preusmjeriti sve HTTP zahtjeve na HTTPS. Ovo nema učinka ako poslužitelj ne sluša na HTTPS.", + "LabelRestore": "Povratite", + "LabelRuntimeMinutes": "Vrijeme izvršavanja", + "LabelSaveLocalMetadata": "Sačuvajte umjetnička djela u medijske foldere", + "LabelSaveLocalMetadataHelp": "Spremanje umjetničkih djela u medijske foldere će ih smjestiti na mjesto gdje se mogu lako uređivati.", + "LabelSaveTrickplayLocally": "Sačuvaj slike trikova pored medija", + "LabelSaveTrickplayLocallyHelp": "Spremanje trik-play slika u medijske foldere će ih smjestiti pored vaših medija za jednostavnu migraciju i pristup.", + "LabelScheduledTaskLastRan": "Posljednji put je pokrenuto {0}, uz {1}.", + "LabelScreensaver": "Zaštitnik ekrana", + "LabelScreensaverTime": "Vrijeme za čuvar ekrana", + "LabelScreensaverTimeHelp": "Broj sekundi neaktivnosti potrebnih za pokretanje čuvara ekrana.", + "LabelSeasonNumber": "Broj sezone", + "LabelSelectFolderGroups": "Automatski grupirajte sadržaj iz sljedećih mapa u prikaze kao što su 'Filmovi', 'Muzika' i 'TV'", + "LabelSelectFolderGroupsHelp": "Neoznačeni folderi će biti prikazani odvojeno u vlastitom prikazu.", + "LabelSelectVersionToInstall": "Odaberite verziju za instalaciju", + "LabelSeriesRecordingPath": "Staza snimanja serije", + "LabelServerHost": "Domaćin", + "LabelServerHostHelp": "192.168.1.100:8096 ili https://myserver.com", + "LabelServerName": "Naziv servera", + "LabelServerNameHelp": "Ovo ime će se koristiti za identifikaciju servera i podrazumijevano će biti naziv domaćina servera.", + "LabelServerVersion": "Verzija servera", + "LabelSimultaneousConnectionLimit": "Istovremeni limit toka", + "LabelSize": "Veličina", + "LabelSkipBackLength": "Skok unazad dužine", + "LabelSkipForwardLength": "Preskoči unaprijed dužinu", + "LabelSkipIfAudioTrackPresent": "Preskoči ako zadana audio-trakta odgovara jeziku preuzimanja", + "LabelSkipIfAudioTrackPresentHelp": "Označite ovo da biste osigurali da svi videozapisi imaju titlove, bez obzira na jezik zvuka.", + "LabelSkipIfGraphicalSubsPresent": "Preskoči ako video već sadrži ugrađene titlove", + "LabelSkipIfGraphicalSubsPresentHelp": "Održavanje tekstualnih verzija titlova rezultirat će učinkovitijom isporukom i smanjit će vjerojatnost transkodiranja videa.", + "LabelSlowResponseEnabled": "Zabilježite upozoravajuću poruku ako je server sporo odgovorio", + "LabelSlowResponseTime": "Vrijeme u ms nakon kojeg se odgovor smatra sporim", + "LabelSortBy": "Sortiraj po", + "LabelSortName": "Sortiraj ime", + "LabelSortOrder": "Redoslijed sortiranja", + "LabelSortTitle": "Sortiraj naslov", + "LabelSource": "Izvor", + "LabelSpecialSeasonsDisplayName": "Naziv posebne sezone za prikaz", + "LabelSportsCategories": "Sportske kategorije", + "LabelStable": "Stala", + "LabelStartWhenPossible": "Počni kad god je moguće", + "LabelStatus": "Stanje", + "LabelStopping": "Zaustavljanje", + "LabelStopWhenPossible": "Zaustavite se kad god je moguće", + "LabelStreamType": "Tip toka", + "LabelSubtitleDownloaders": "Preuzimatelji titlova", + "LabelSubtitlePlaybackMode": "Način prikaza titlova", + "LabelSubtitleStyling": "Stilizacija podnaslova", + "LabelSubtitleVerticalPosition": "Vertikalni položaj", + "LabelSyncPlayAccess": "Pristup SyncPlayu", + "LabelSyncPlayAccessCreateAndJoinGroups": "Omogućite korisniku da kreira i pridruži se grupama", + "LabelSyncPlayAccessJoinGroups": "Omogućite korisniku da se pridruži grupama", + "LabelSyncPlayAccessNone": "Onemogućeno za ovog korisnika", + "LabelSyncPlayHaltPlayback": "Zaustavi lokalno reproduciranje", + "LabelSyncPlayHaltPlaybackDescription": "I zanemarite ažuriranja trenutne plejliste", + "LabelSyncPlayLeaveGroup": "Napusti grupu", + "LabelSyncPlayLeaveGroupDescription": "Onemogućite SyncPlay", + "LabelSyncPlayNewGroup": "Nova grupa", + "LabelSyncPlayNewGroupDescription": "Kreira novu grupu", + "LabelSyncPlayNoGroups": "Nema dostupnih grupa", + "LabelSyncPlayPlaybackDiff": "Razlika u trajanju reprodukcije", + "LabelSyncPlayResumePlayback": "Obnovi lokalno reproduciranje", + "LabelSyncPlayResumePlaybackDescription": "Pridružite se grupnom reprodukciji", + "LabelSyncPlaySyncMethod": "Metoda sinhronizacije", + "LabelSyncPlayTimeSyncDevice": "Sinkronizacija vremena s", + "LabelSyncPlayTimeSyncOffset": "Vremenski pomak", + "LabelSyncPlaySettingsDescription": "Promijeni postavke SyncPlay-a", + "LabelSyncPlaySettingsExtraTimeOffset": "Dodatni pomak vremena", + "LabelSyncPlaySettingsExtraTimeOffsetHelp": "Ručno podesite vremenski pomak (u ms) za odabrani uređaj za sinhronizaciju vremena. Podesite pažljivo.", + "LabelSyncPlaySettingsSyncCorrection": "Sinkronizacija korekcije", + "LabelSyncPlaySettingsSyncCorrectionHelp": "Omogućite aktivno sinhroniziranje reprodukcije ubrzavanjem medija ili pomicanjem na procijenjenu poziciju. Onemogućite ovo u slučaju jakog zastajkivanja.", + "LabelSyncPlaySettingsMinDelaySpeedToSync": "Minimalno kašnjenje SpeedToSync", + "LabelSyncPlaySettingsMinDelaySpeedToSyncHelp": "Minimalno kašnjenje reprodukcije (u ms) nakon kojeg SpeedToSync pokušava ispraviti poziciju reprodukcije.", + "LabelSyncPlaySettingsMaxDelaySpeedToSync": "SpeedToSync maksimalno kašnjenje", + "LabelSyncPlaySettingsMaxDelaySpeedToSyncHelp": "Maksimalno kašnjenje reprodukcije (u ms) nakon kojeg se umjesto SpeedToSync koristi SkipToSync.", + "LabelSyncPlaySettingsSpeedToSyncDuration": "Trajanje SpeedToSync", + "LabelSyncPlaySettingsSpeedToSyncDurationHelp": "Broj milisekundi koje SpeedToSync koristi za korekciju pozicije reprodukcije.", + "LabelSyncPlaySettingsMinDelaySkipToSync": "Minimalno kašnjenje za SkipToSync", + "LabelSyncPlaySettingsMinDelaySkipToSyncHelp": "Minimalno kašnjenje reprodukcije (u ms) nakon kojeg SkipToSync pokušava ispraviti poziciju reprodukcije.", + "LabelSyncPlaySettingsSpeedToSync": "Omogući SpeedToSync", + "LabelSyncPlaySettingsSpeedToSyncHelp": "Metoda korekcije sinhronizacije koja se sastoji od ubrzavanja reprodukcije. Korekcija sinhronizacije mora biti omogućena.", + "LabelSyncPlaySettingsSkipToSync": "Omogući SkipToSync", + "LabelSyncPlaySettingsSkipToSyncHelp": "Metoda korekcije sinhronizacije koja se sastoji od traženja procijenjene pozicije. Korekcija sinhronizacije mora biti omogućena.", + "LabelSystem": "Sistem", + "LabelTag": "Oznaka", + "LabelTagline": "Slogan", + "LabelTextBackgroundColor": "Boja pozadine teksta", + "LabelTextColor": "Boja teksta", + "LabelTextSize": "Veličina teksta", + "LabelTextWeight": "Težina teksta", + "Bold": "Zadebljano", + "LabelTheme": "Tema", + "LabelTime": "Vrijeme", + "LabelTimeLimitHours": "Vremensko ograničenje (sati)", + "LabelTitle": "Naslov", + "LabelTonemappingAlgorithm": "Odaberite algoritam mapiranja tona koji ćete koristiti", + "LabelTonemappingDesat": "Mapiranje tona desat", + "LabelTonemappingDesatHelp": "Primijenite desaturaciju na istaknute dijelove koji prelaze ovaj nivo svjetline. Preporučena vrijednost je 0 (onemogući).", + "LabelTonemappingParam": "Parametri mapiranja tona", + "LabelTonemappingParamHelp": "Podesite algoritam mapiranja tona. Općenito ga ostavite praznim.", + "LabelTonemappingPeak": "Maksimum toniranja", + "LabelTonemappingPeakHelp": "Prepišite vrijednost ugrađenih metapodataka za ulazni signal ovom vršnom vrijednošću umjesto toga. Zadana vrijednost je 100 (1000 nit).", + "LabelTonemappingRange": "Opseg mapiranja tona", + "LabelTrackNumber": "Broj pjesme", + "LabelTranscodePath": "Transkodna putanja", + "LabelTranscodes": "Transkodira", + "LabelTranscodingFramerate": "Transkodiranje brzine sličica", + "LabelTranscodingProgress": "Napredak transcodiranja", + "LabelTranscodingTempPathHelp": "Navedite prilagođenu putanju za transkodirane datoteke koje se isporučuju klijentima. Ostavite prazno da biste koristili zadanu putanju servera.", + "LabelTranscodingThreadCount": "Transkodiranje niti", + "LabelTranscodingThreadCountHelp": "Odaberite maksimalan broj niti koje će se koristiti pri transkodiranju. Smanjenje broja niti smanjit će opterećenje CPU-a, ali možda neće konvertovati dovoljno brzo za glatko iskustvo reprodukcije.", + "LabelTriggerType": "Tip okidača", + "LabelTunerIpAddress": "IP adresa tunera", + "LabelTunerType": "Tip tunera", + "LabelTVHomeScreen": "Početni ekran TV načina rada", + "LabelType": "Tip", + "LabelTypeMetadataDownloaders": "Preuzimatelji metapodataka ({0})", + "LabelTypeText": "Tekst", + "LabelUnstable": "Nestabilno", + "LabelUseSamePublishedServerUri": "Koristite isti objavljeni URI poslužitelja za interni i eksterni pristup", + "LabelUser": "Korisnik", + "LabelUserAgent": "Korisnički agent", + "LabelUserLoginAttemptsBeforeLockout": "Neuspjeli pokušaji prijave prije nego što korisnik bude zaključan", + "LabelUserMaxActiveSessions": "Maksimalan broj istovremenih korisničkih sesija", + "LabelUsername": "Korisničko ime", + "LabelUserRemoteClientBitrateLimitHelp": "Prepišite zadano globalno vrijednost postavljeno u postavkama servera, pogledajte Dashboard > Playback > Streaming.", + "LabelVaapiDevice": "VA-API uređaj", + "LabelVaapiDeviceHelp": "Ovo je render čvor koji se koristi za hardversku akceleraciju.", + "LabelValue": "Vrijednost", + "LabelVersion": "Verzija", + "LabelVersionInstalled": "{0} instalirano", + "LabelVideoBitrate": "Video bitrata", + "LabelVideoCodec": "Video kodek", + "LabelVideoRange": "Video raspon", + "LabelVideoResolution": "Rezolucija videa", + "LabelSelectPreferredTranscodeVideoCodec": "Preferirani video kodek za transkodiranje", + "LabelWeb": "Web", + "LabelWebVersion": "Web verzija", + "LabelYear": "Godina", + "LabelYoureDone": "Gotovi ste!", + "LabelZipCode": "Poštanski broj", + "LanNetworksHelp": "Popis IP adresa ili unosa IP/maske razdvojenih zarezom za mreže koje će se uzimati u obzir na lokalnoj mreži pri provođenju ograničenja propusnosti i udaljenog pristupa. Ako se ostavi prazno, sve adrese iz RFC1918 se smatraju lokalnim.", + "Large": "Veliko", + "Larger": "Veće", + "LastActive": "Posljednja aktivnost", + "LastSeen": "Posljednja aktivnost {0}", + "LatestFromLibrary": "Nedavno dodano u {0}", + "LearnHowYouCanContribute": "Saznajte kako možete doprinijeti.", + "LeaveBlankToNotSetAPassword": "Možete ostaviti ovo polje praznim da ne biste postavili lozinku.", + "Letterer": "Slovopisac", + "LibrariesLoadError": "Neuspjelo učitavanje biblioteka", + "LibraryAccessHelp": "Odaberite biblioteke koje ćete podijeliti s ovim korisnikom. Administratori će moći uređivati sve mape koristeći upravitelj metapodataka.", + "LibraryNameInvalid": "Naziv biblioteke ne može biti prazan.", + "LibraryScanFanoutConcurrency": "Ograničenje zadataka paralelnog skeniranja biblioteke", + "LibraryScanFanoutConcurrencyHelp": "Maksimalan broj paralelnih zadataka tokom skeniranja biblioteke. Ako ostavite ovo prazno, odabrat će se ograničenje zasnovano na broju jezgri vašeg sistema. UPOZORENJE: Postavljanje ove vrijednosti previsoko može uzrokovati probleme sa mrežnim datotečnim sistemima; ako naiđete na probleme, smanjite ovu vrijednost.", + "LibraryInvalidItemIdError": "Biblioteka je u neispravnom stanju i ne može se uređivati. Moguće je da nailazite na grešku: putanja u bazi podataka nije ispravna putanja na datotečnom sistemu.", + "LimitSegmentLength": "Koristite kraće HLS segmente", + "LimitSegmentLengthHelp": "Omogućavanje ove opcije može pomoći da se spriječi zadržavanje HLS plejera prilikom traženja na određenim uređajima, kao što su webOS televizori.", + "LimitSupportedVideoResolution": "Ograniči maksimalnu podržanu rezoluciju videa", + "LimitSupportedVideoResolutionHelp": "Koristite 'Najveću dozvoljenu rezoluciju video transkodiranja' kao maksimalnu podržanu rezoluciju videa.", + "List": "Spisak", + "ListView": "Pregled liste", + "ListPaging": "{0}-{1} od {2}", + "Live": "Uživo", + "LiveBroadcasts": "Prijenosi uživo", + "LiveTV": "TV uživo", + "LiveTVPageLoadError": "Neuspjelo učitavanje stranice sa snimcima", + "Localization": "Lokalizacija", + "LogLevel.Trace": "Trag", + "LogLevel.Debug": "Debug", + "LogLevel.Information": "Informacije", + "LogLevel.Warning": "Upozorenje", + "LogLevel.Error": "Greška", + "LogLevel.Critical": "Kritično", + "LogLevel.None": "Nema", + "Logo": "Logo", + "LogoScreensaver": "Logo čuvar ekrana", + "Lyric": "Lirik", + "Lyricist": "Tekstopisac", + "Lyrics": "Tekstovi", + "LyricDownloadersHelp": "Omogućite i rangirajte svoje omiljene preuzimače tekstova pjesama po redu prioriteta.", + "ManageLibrary": "Upravljanje bibliotekom", + "ManageRecording": "Upravljanje snimanjem", + "ManageRepositories": "Upravljanje repozitorijima", + "MapChannels": "Kanalizacija karte", + "MarkPlayed": "Mark je svirao", + "MarkUnplayed": "Mark neigran", + "MaxParentalRatingHelp": "Sadržaj s višom ocjenom bit će skriven od ovog korisnika.", + "MediaInfoAnamorphic": "Anamorfni", + "MediaInfoAspectRatio": "Omjer stranica", + "MediaInfoBitDepth": "Bitna dubina", + "MediaInfoBitrate": "Bit-stopa", + "MediaInfoChannels": "Kanalima", + "MediaInfoCodec": "Kodek", + "MediaInfoCodecTag": "Oznaka kodeka", + "MediaInfoColorPrimaries": "Primarne boje", + "MediaInfoColorSpace": "Boja prostora", + "MediaInfoColorTransfer": "Prijenos boje", + "MediaInfoContainer": "Kontejner", + "MediaInfoDefault": "Zadano", + "MediaInfoExternal": "Vanjsko", + "MediaInfoForced": "Prisilno", + "MediaInfoFramerate": "Stopa sličica", + "MediaInfoInterlaced": "Ispresijecano", + "MediaInfoLanguage": "Jezik", + "MediaInfoLayout": "Izgled", + "MediaInfoLevel": "Nivo", + "MediaInfoPath": "Putanja", + "MediaInfoPixelFormat": "Pikselni format", + "MediaInfoProfile": "Profil", + "MediaInfoRefFrames": "Okviri", + "MediaInfoResolution": "Odluka", + "MediaInfoRotation": "Rotacija", + "MediaInfoSampleRate": "Uzorak brzine", + "MediaInfoSize": "Veličina", + "MediaInfoTimestamp": "Vremenski žig", + "MediaInfoTitle": "Naslov", + "MediaInfoVideoRange": "Video raspon", + "MediaIsBeingConverted": "Medij se pretvara u format koji je kompatibilan s uređajem koji reproducira medij.", + "MediaSegmentAction.None": "Nema", + "MediaSegmentAction.AskToSkip": "Zatraži preskakanje", + "MediaSegmentAction.Skip": "Preskoči", + "MediaSegmentProvidersHelp": "Omogućite i rangirajte svoje omiljene pružatelje medijskih segmenata po redu prioriteta.", + "MediaSegmentSkipPrompt": "Preskoči {0}", + "MediaSegmentType.Commercial": "Komercijalni", + "MediaSegmentType.Intro": "Uvod", + "MediaSegmentType.Outro": "Odjavna špica", + "MediaSegmentType.Preview": "Pregled", + "MediaSegmentType.Recap": "Sažetak", + "Menu": "Meni", + "MenuOpen": "Otvori meni", + "MenuClose": "Zatvori meni", + "MessageAddRepository": "Ako želite dodati repozitorij, kliknite na dugme pored zaglavlja i ispunite tražene informacije.", + "MessageAreYouSureDeleteSubtitles": "Jeste li sigurni da želite izbrisati ovu datoteku sa titlovima?", + "MessageAreYouSureYouWishToRemoveMediaFolder": "Jeste li sigurni da želite ukloniti ovu medijsku mapu?", + "MessageBackupDisclaimer": "Ovisno o veličini vaše biblioteke, proces izrade sigurnosne kopije može potrajati.", + "MessageBackupInProgress": "Rezervno snimanje u toku", + "MessageCancelSeriesTimerError": "Došlo je do greške prilikom otkazivanja tajmera serije", + "MessageCancelTimerError": "Došlo je do greške prilikom otkazivanja tajmera", + "MessageChangeRecordingPath": "Promjena mape za snimanje neće premjestiti postojeća snimanja s stare lokacije na novu. Ako želite, morat ćete ih ručno premjestiti.", + "MessageConfirmAppExit": "Želite li izaći?", + "MessageConfirmDeleteGuideProvider": "Jeste li sigurni da želite izbrisati ovog pružatelja vodiča?", + "MessageConfirmDeleteTunerDevice": "Jeste li sigurni da želite izbrisati ovaj uređaj?", + "MessageConfirmRecordingCancellation": "Otkazati snimanje?", + "MessageConfirmRemoveMediaLocation": "Jeste li sigurni da želite ukloniti ovu lokaciju?", + "MessageConfirmRestart": "Jeste li sigurni da želite ponovo pokrenuti Jellyfin?", + "MessageConfirmRevokeApiKey": "Jeste li sigurni da želite opozvati ovaj API ključ? Veza aplikacije sa ovim serverom bit će naglo prekinuta.", + "MessageConfirmShutdown": "Jeste li sigurni da želite isključiti poslužitelj?", + "MessageContactAdminToResetPassword": "Molimo kontaktirajte administratora sistema da resetuje vašu lozinku.", + "MessageCreateAccountAt": "Kreirajte račun na {0}", + "MessageDeleteTaskTrigger": "Jeste li sigurni da želite izbrisati ovaj okidač zadatka?", + "MessageDownloadQueued": "Preuzimanje je u redu.", + "MessageEnablingOptionLongerScans": "Omogućavanje ove opcije može dovesti do znatno dužih skeniranja biblioteke.", + "MessageFileReadError": "Došlo je do greške pri čitanju datoteke. Molimo pokušajte ponovo.", + "MessageForgotPasswordFileCreated": "Sljedeća datoteka je kreirana na vašem serveru i sadrži upute o tome kako postupiti", + "MessageForgotPasswordPinReset": "Unesite PIN ovdje da završite resetovanje lozinke", + "MessageForgotPasswordInNetworkRequired": "Molimo vas da ponovo pokušate unutar vaše kućne mreže pokrenuti postupak resetiranja lozinke.", + "MessageGetInstalledPluginsError": "Došlo je do greške prilikom dohvaćanja liste trenutno instaliranih dodataka.", + "MessageImageFileTypeAllowed": "Podržani su samo JPEG i PNG datoteke.", + "MessageImageTypeNotSelected": "Molimo odaberite tip slike iz padajućeg menija.", + "MessageInvalidForgotPasswordPin": "Unesen je neispravan ili istekli PIN kod. Molimo pokušajte ponovo.", + "MessageInvalidUser": "Neispravno korisničko ime ili lozinka. Molimo pokušajte ponovo.", + "MessageItemsAdded": "Predmeti dodani.", + "MessageItemSaved": "Predmet sačuvan.", + "MessageLeaveEmptyToInherit": "Ostavite prazno da naslijedite postavke iz roditeljskog elementa ili globalnu zadanu vrijednost.", + "MessageNoItemsAvailable": "Trenutno nema dostupnih stavki.", + "MessageNoFavoritesAvailable": "Trenutno nema dostupnih favorita.", + "MessageNoCollectionsAvailable": "Kolekcije vam omogućavaju da uživate u personaliziranim grupama filmova, serija i albuma. Kliknite na dugme '+' da biste počeli stvarati kolekcije.", + "MessageNoGenresAvailable": "Omogućite nekim pružaocima metapodataka da preuzimaju žanrove s interneta.", + "MessageNoMovieSuggestionsAvailable": "Trenutno nema dostupnih prijedloga za filmove. Počnite gledati i ocjenjivati svoje filmove, a zatim se vratite da pogledate svoje preporuke.", + "MessageNoNextUpItems": "Nije pronađeno ništa. Počnite gledati svoje emisije!", + "MessageNoPluginConfiguration": "Ovaj dodatak nema postavke za podešavanje.", + "MessageNoRepositories": "Nema repozitorija.", + "MessageNoServersAvailable": "Nisu pronađeni nikakvi serveri pomoću automatskog otkrivanja servera.", + "MessageNothingHere": "Ovdje ništa.", + "MessagePasswordResetForUsers": "Sljedećim korisnicima su resetovane lozinke. Sada se mogu prijaviti pomoću PIN kodova koji su korišteni za resetovanje.", + "MessagePlayAccessRestricted": "Reprodukcija ovog sadržaja je trenutno ograničena. Molimo kontaktirajte administratora vašeg servera za više informacija.", + "MessagePleaseEnsureInternetMetadata": "Molimo osigurajte da je omogućen preuzimanje internetskih metapodataka.", + "MessagePleaseWait": "Molimo pričekajte. Ovo može potrajati minutu.", + "MessagePluginConfigurationRequiresLocalAccess": "Da biste postavili ovaj dodatak, molimo prijavite se direktno na vaš lokalni server.", + "MessagePluginInstallDisclaimer": "UPOZORENJE: Instaliranje dodatka treće strane nosi rizike. Može sadržavati nestabilan ili zlonamjerni kod i može se mijenjati u bilo kojem trenutku. Instalirajte dodatke samo od autora kojima vjerujete i budite svjesni mogućih učinaka koje može imati, uključujući upite vanjskih servisa, duža skeniranja biblioteka ili dodatnu pozadinsku obradu.", + "MessagePluginInstalled": "Plugin je uspješno instaliran. Server će morati biti ponovo pokrenut da bi promjene stupile na snagu.", + "MessagePluginInstallError": "Došlo je do greške prilikom instaliranja dodatka.", + "MessageReenableUser": "Pogledajte ispod da ponovo omogućite", + "MessageRenameMediaFolder": "Preimenovanje medijske biblioteke će dovesti do gubitka svih metapodataka, postupajte oprezno.", + "MessageRepositoryInstallDisclaimer": "UPOZORENJE: Instaliranje repozitorija dodataka treće strane nosi rizike. Može sadržavati nestabilan ili zlonamjerni kod i može se promijeniti u bilo kojem trenutku. Instalirajte repozitorije samo od autora kojima vjerujete.", + "MessageRestoreDisclaimer": "UPOZORENJE: Uskoro ćete obaviti vraćanje iz prethodne sigurnosne kopije. Vaš server će biti neupotrebljiv tokom cijelog procesa i svi novi podaci kreirani nakon sigurnosne kopije bit će izgubljeni.", + "MessageRestoreInProgress": "Obnova u toku", + "MessageRestoreSuccess": "Obnova uspješno završena", + "MessageSent": "Poruka poslana.", + "MessageServerMismatch": "Server na koji se povezujete nije isti server na koji ste se prethodno povezali na ovoj adresi. Ako je to očekivano, molimo odaberite \"Poveži se ionako\". U suprotnom, vaša veza ili server mogu biti kompromitovani.", + "MessageSplitVersionsError": "Došlo je do greške prilikom razdvajanja verzija", + "MessageSyncPlayCreateGroupDenied": "Potrebna je dozvola za kreiranje grupe.", + "MessageSyncPlayDisabled": "SyncPlay je onemogućen.", + "MessageSyncPlayEnabled": "SyncPlay omogućen.", + "MessageSyncPlayErrorAccessingGroups": "Došlo je do greške prilikom pristupa listi grupa.", + "MessageSyncPlayErrorMedia": "Nije uspjelo omogućiti SyncPlay! Greška u mediju.", + "MessageSyncPlayErrorMissingSession": "Nije uspjelo omogućiti SyncPlay! Nedostaje sesija.", + "MessageSyncPlayErrorNoActivePlayer": "Nije pronađen nijedan aktivni igrač. SyncPlay je onemogućen.", + "MessageSyncPlayGroupDoesNotExist": "Pridruživanje grupi nije uspjelo jer ona ne postoji.", + "MessageSyncPlayGroupWait": "{0} je u procesu spremanja u međuspremnik…", + "MessageSyncPlayIsDisabled": "Potrebna je dozvola za korištenje SyncPlay-a.", + "MessageSyncPlayJoinGroupDenied": "Ne mogu se pridružiti grupi.", + "MessageSyncPlayLibraryAccessDenied": "Pristup ovom sadržaju je ograničen.", + "MessageSyncPlayNoGroupsAvailable": "Nema dostupnih grupa. Prvo počni svirati nešto.", + "MessageSyncPlayPlaybackPermissionRequired": "Potrebno je odobrenje za reprodukciju.", + "MessageSyncPlayUserJoined": "{0} se pridružio grupi.", + "MessageSyncPlayUserLeft": "{0} je napustio grupu.", + "MessageTheFollowingLocationWillBeRemovedFromLibrary": "Sljedeće lokacije medija bit će uklonjene iz vaše biblioteke", + "MessageUnableToConnectToServer": "Trenutno se ne možemo povezati sa odabranim serverom. Molimo provjerite da li radi i pokušajte ponovo.", + "MessageUnauthorizedUser": "Niste ovlašteni pristupiti serveru u ovom trenutku. Molimo kontaktirajte administratora servera za više informacija.", + "MessageUnsetContentHelp": "Sadržaj će biti prikazan kao obični folderi. Za najbolje rezultate koristite upravitelj metapodataka kako biste postavili tipove sadržaja podfoldera.", + "MessageWaitingForServer": "Čekanje na server...", + "MetadataImagesLoadError": "Neuspjelo učitavanje postavki metapodataka", + "MetadataManager": "Upravitelj metapodataka", + "MetadataNfoLoadError": "Neuspjelo učitavanje metapodataka NFO postavki", + "MetadataSettingChangeHelp": "Promjena postavki metapodataka utjecat će na novi sadržaj koji se ubuduće doda. Da biste osvježili postojeći sadržaj, otvorite zaslon s detaljima i kliknite na gumb 'Osvježi', ili izvršite masovno osvježavanje pomoću 'Upravitelja metapodataka'.", + "MillisecondsUnit": "ms", + "MinutesAfter": "minuta nakon", + "MinutesBefore": "minuta prije", + "MixedMoviesShows": "Mješoviti filmovi i serije", + "Mixer": "Miksir", + "Mobile": "Mobilni (naslijeđeni)", + "Monday": "Ponedeljak", + "MoreFromValue": "Više od {0}", + "MoreMediaInfo": "Informacije za medije", + "MoreUsersCanBeAddedLater": "Više korisnika može se kasnije dodati iz Kontrolne table.", + "MoveLeft": "Pomakni se ulijevo", + "MoveRight": "Pomaknite se udesno", + "MoveToBottom": "Pomakni na dno", + "MoveToTop": "Pomakni na vrh", + "Movie": "Film", + "MovieLibraryHelp": "Pregledajte {0}vodič za imenovanje filmova{1}.", + "Movies": "Filmovi", + "MoviesAndShows": "Filmovi i serije", + "MusicAlbum": "Muzički album", + "MusicArtist": "Muzički izvođač", + "MusicLibraryHelp": "Pregledajte {0}vodič za imenovanje muzike{1}.", + "MusicVideo": "Muzički spot", + "MusicVideos": "Muzički spotovi", + "Mute": "Isključi zvuk", + "MySubtitles": "Moji titlovi", + "Name": "Ime", + "Native": "Autohtoni", + "NativeSubtitleStylingHelp": "Stilizacija titlova neće raditi na nekim uređajima. Međutim, ona ne donosi nikakav teret po pitanju performansi.", + "NetworkingPageLoadError": "Neuspjelo učitavanje mrežnih postavki", + "Never": "Nikad", + "New": "Novo", + "NewCollection": "Nova kolekcija", + "NewCollectionHelp": "Kolekcije vam omogućavaju da kreirate personalizirane grupe filmova i ostalog sadržaja biblioteke.", + "NewCollectionNameExample": "Primjer: Kolekcija Ratova zvijezda", + "NewEpisodes": "Nove epizode", + "NewEpisodesOnly": "Samo nove epizode", + "NewPlaylist": "Nova lista za reprodukciju", + "News": "Vijesti", + "Next": "Dalje", + "NextChapter": "Sljedeće poglavlje", + "NextTrack": "Preskoči na sljedeći", + "NextUp": "Slijedi", + "No": "Ne", + "NoCreatedLibraries": "Čini se da još niste kreirali nijednu biblioteku. {0}Želite li sada kreirati jednu?{1}", + "NoLyricsSearchResultsFound": "Nisu pronađeni stihovi.", + "None": "Nema", + "NoNewDevicesFound": "Nijedan novi uređaj nije pronađen. Da biste dodali novi tuner, zatvorite ovaj dijalog i ručno unesite informacije o uređaju.", + "Normal": "Normalno", + "NoSubtitleSearchResultsFound": "Nisu pronađeni rezultati.", + "NoSubtitlesHelp": "Titlovi se neće automatski učitati. Ipak, mogu se ručno uključiti tokom reprodukcije.", + "NumLocationsValue": "{0} fascikli", + "Off": "Ugašeno", + "OnApplicationStartup": "Prilikom pokretanja aplikacije", + "OnFilesystem": "Na datotečnom sistemu: {0}", + "OneChannel": "Jedan kanal", + "OnlyForcedSubtitles": "Samo prisilno", + "OnlyForcedSubtitlesHelp": "Učitavat će se samo titlovi označeni kao prisilni.", + "OnlyImageFormats": "Samo formati slika (VobSub, PGS, SUB)", + "OnWakeFromSleep": "Pri buđenju iz sna", + "Option3D": "3D", + "OptionAllowAudioPlaybackTranscoding": "Omogućite reprodukciju zvuka koja zahtijeva transkodiranje", + "OptionAllowBrowsingLiveTv": "Omogući pristup Live TV-u", + "OptionAllowContentDownload": "Omogući preuzimanje medija", + "OptionAllowContentDownloadHelp": "Korisnici mogu preuzeti medije i pohraniti ih na svojim uređajima. Ovo nije isto što i funkcija sinhronizacije. Biblioteke knjiga zahtijevaju da je ovo omogućeno kako bi ispravno funkcionirale.", + "OptionAllowLinkSharing": "Omogući dijeljenje na društvenim mrežama", + "OptionAllowLinkSharingHelp": "Dijele se samo web stranice koje sadrže informacije o medijima. Medijske datoteke se nikada ne dijele javno. Dijeljenja su vremenski ograničena i isteći će nakon {0} dana.", + "OptionAllowManageLiveTv": "Omogući upravljanje snimanjem TV-a uživo", + "OptionAllowMediaPlayback": "Omogući reprodukciju medija", + "OptionAllowMediaPlaybackTranscodingHelp": "Ograničavanje pristupa transkodiranju može uzrokovati greške pri reprodukciji kod klijenata zbog nepodržanih medijskih formata.", + "OptionAllowRemoteControlOthers": "Omogućite daljinsko upravljanje drugim korisnicima", + "OptionAllowRemoteSharedDevices": "Omogućite daljinsko upravljanje zajedničkim uređajima", + "OptionAllowRemoteSharedDevicesHelp": "DLNA uređaji se smatraju zajedničkim dok ih korisnik ne počne kontrolisati.", + "OptionAllowSyncTranscoding": "Omogućite preuzimanje i sinhronizaciju medija koji zahtijevaju transkodiranje", + "OptionAllowUserToManageServer": "Omogućite ovom korisniku upravljanje serverom", + "OptionAllowVideoPlaybackRemuxing": "Omogućite reprodukciju videozapisa koja zahtijeva konverziju bez ponovnog kodiranja", + "OptionAllowVideoPlaybackTranscoding": "Omogućite reprodukciju videozapisa koja zahtijeva transkodiranje", + "OptionAutomaticallyGroupSeries": "Automatski spojite serije koje su raspoređene u više mapa", + "OptionAutomaticallyGroupSeriesHelp": "Serije koje su raspoređene u više mapa unutar ove biblioteke bit će automatski objedinjene u jednu seriju.", + "OptionBluray": "BD", + "OptionCommunityRating": "Ocjena zajednice", + "OptionCriticRating": "Ocjena kritičara", + "OptionDaily": "Svakodnevno", + "OptionDateAdded": "Datum dodavanja", + "OptionDateEpisodeAdded": "Datum dodavanja epizode", + "OptionDatePlaylistUpdated": "Datum ažuriranja plejliste", + "OptionDateShowAdded": "Datum dodavanja predstave", + "OptionDateAddedFileTime": "Koristite datum kreiranja datoteke", + "OptionDateAddedImportTime": "Datum unosa u biblioteku", + "OptionDatePlayed": "Datum odigravanja", + "OptionDisableUser": "Onemogućite ovog korisnika", + "OptionDisableUserHelp": "Server neće dozvoliti nikakve veze od ovog korisnika. Postojeće veze će biti naglo prekinute.", + "OptionDisplayFolderView": "Prikaži prikaz mapa za prikazivanje običnih medijskih mapa", + "OptionDisplayFolderViewHelp": "Prikaži foldere uz tvoje ostale medijske biblioteke. Ovo može biti korisno ako želiš jednostavan prikaz foldera.", + "OptionDvd": "DVD", + "OptionEnableAccessFromAllDevices": "Omogući pristup sa svih uređaja", + "OptionEnableAccessToAllChannels": "Omogući pristup svim kanalima", + "OptionEnableAccessToAllLibraries": "Omogući pristup svim bibliotekama", + "OptionEnableExternalContentInSuggestions": "Omogući vanjske sadržaje u prijedlozima", + "OptionEnableExternalContentInSuggestionsHelp": "Omogućite da se internetski trejleri i programi televizije uživo uključe u predloženi sadržaj.", + "OptionEnableForAllTuners": "Omogući za sve tuner uređaje", + "OptionEveryday": "Svaki dan", + "OptionExtractChapterImage": "Omogući izdvajanje slike poglavlja", + "OptionForceRemoteSourceTranscoding": "Prisilno transkodiranje udaljenih medijskih izvora, kao što je TV uživo", + "OptionHasThemeSong": "Tema", + "OptionHasThemeVideo": "Tematski video", + "OptionHideUser": "Skrijte ovog korisnika sa ekrana za prijavu", + "OptionHideUserFromLoginHelp": "Korisno za privatne ili skrivene administratorske račune. Korisnik će se morati ručno prijaviti unoseći svoje korisničko ime i lozinku.", + "OptionIsHD": "HD", + "OptionIsSD": "SD", + "OptionLoginAttemptsBeforeLockout": "Odredite koliko neuspješnih pokušaja prijave može biti prije nego što dođe do zaključavanja.", + "OptionLoginAttemptsBeforeLockoutHelp": "Vrijednost nula znači nasljeđivanje zadanih vrijednosti od tri pokušaja za obične korisnike i pet za administratore. Postavljanjem na -1 onemogućit ćete ovu funkciju.", + "OptionMax": "Max", + "OptionMaxActiveSessions": "Postavite maksimalan broj istovremenih korisničkih sesija.", + "OptionMaxActiveSessionsHelp": "Vrijednost 0 će onemogućiti funkciju.", + "OptionMissingEpisode": "Izgubljene epizode", + "OptionNew": "Novo…", + "OptionOnInterval": "U intervalu", + "OptionParentalRating": "Roditeljski rejting", + "OptionPlayCount": "Broj igranja", + "OptionPremiereDate": "Datum premijere", + "OptionRandom": "Nasumično", + "OptionReleaseDate": "Datum izlaska", + "OptionRequirePerfectSubtitleMatch": "Preuzimajte samo titlove koji savršeno odgovaraju video datotekama", + "OptionRequirePerfectSubtitleMatchHelp": "Zahtijevanje savršenog podudaranja će filtrirati titlove tako da uključuje samo one koji su testirani i provjereni za vašu tačnu video datoteku. Ukidanje ovog zahtjeva će povećati vjerovatnoću preuzimanja titlova, ali će povećati i šanse za netačno tempirane ili pogrešne tekstove titlova.", + "OptionResumable": "Ponovno pokretanje", + "OptionSaveMetadataAsHidden": "Sačuvaj metapodatke i slike kao skrivene datoteke", + "OptionSaveMetadataAsHiddenHelp": "Promjena ovoga primjenjivat će se na nove metapodatke spremljene ubuduće. Postojeće datoteke metapodataka bit će ažurirane sljedeći put kada ih poslužitelj spasi.", + "OptionSpecialEpisode": "Posebne ponude", + "OptionTrackName": "Naziv pjesme", + "OptionTvdbRating": "Ocjena TheTVDB-a", + "OptionUnairedEpisode": "Neemitirane epizode", + "OptionWakeFromSleep": "Probuditi se iz sna", + "OptionWeekdays": "Radni dani", + "OptionWeekends": "Vikendi", + "OptionWeekly": "Sedmično", + "OriginalAirDate": "Originalni datum emitovanja", + "OriginalAirDateValue": "Originalni datum emitovanja: {0}", + "Other": "Ostalo", + "OtherArtist": "Ostali umjetnik", + "Overview": "Pregled", + "PackageInstallCancelled": "{0} (verzija {1}) instalacija otkazana.", + "PackageInstallCompleted": "{0} (verzija {1}) instalacija je završena.", + "PackageInstallFailed": "{0} (verzija {1}) instalacija nije uspjela.", + "PageNotFound": "Ovo nije stranica koju tražite.", + "ParentalRating": "Roditeljski rejting", + "PasswordMatchError": "Loзинka i potvrda lozinke moraju biti iste.", + "PasswordRequiredForAdmin": "Za administratorske račune potrebna je lozinka.", + "PasswordResetComplete": "Lozinka je resetovana.", + "PasswordResetConfirmation": "Jeste li sigurni da želite resetirati lozinku?", + "PasswordResetProviderHelp": "Odaberite pružatelja usluge za resetiranje lozinke koji će se koristiti kada ovaj korisnik zatraži resetiranje lozinke.", + "PasswordMissingSaveError": "Nova lozinka ne može biti prazna.", + "PasswordSaved": "Lozinka sačuvana.", + "PathNotFound": "Staza nije pronađena. Molimo provjerite da je staza važeća i pokušajte ponovo.", + "Penciller": "Crtač olovkom", + "People": "Ljudi", + "PerfectMatch": "Savršeni par", + "Person": "Osoba", + "PersonRole": "kao {0}", + "Photo": "Fotografija", + "Photos": "Slike", + "PictureInPicture": "Slika u slici", + "PlaceFavoriteChannelsAtBeginning": "Postavite omiljene kanale na početak", + "Play": "Pokrenuti", + "PlayAllFromHere": "Pusti sve odavde", + "PlaybackData": "Informacije o reprodukciji", + "PlaybackError.ASS_RENDER_ERROR": "U rendereru titlova ASS/SSA dogodila se greška.", + "PlaybackError.FATAL_HLS_ERROR": "U HLS streamu je naišla fatalna greška.", + "PlaybackError.MEDIA_DECODE_ERROR": "Reprodukcija je propala zbog greške pri dešifriranju medija.", + "PlaybackError.MEDIA_NOT_SUPPORTED": "Reprodukcija je propala jer ovaj klijent ne podržava medij.", + "PlaybackError.NETWORK_ERROR": "Reprodukcija je propala zbog mrežne greške.", + "PlaybackError.NO_MEDIA_ERROR": "Nije moguće pronaći valjan izvor medija za reprodukciju.", + "PlaybackError.PLAYER_ERROR": "Reprodukcija je propala zbog fatalne greške playera.", + "PlaybackError.SERVER_ERROR": "Reprodukcija je propala zbog greške na serveru.", + "PlaybackError.NotAllowed": "Reprodukcija ovog medija nije dozvoljena.", + "PlaybackError.RateLimitExceeded": "Ovaj medij se trenutno ne može reproducirati zbog ograničenja brzine.", + "PlaybackErrorNoCompatibleStream": "Ovaj klijent nije kompatibilan s medijem, a server ne šalje kompatibilan format medija.", + "PlaybackErrorPlaceHolder": "Ovo je mjesto za fizičke medije koje Jellyfin ne može reproducirati. Molimo umetnite disk da biste ga reproducirali.", + "PlaybackRate": "Brzina reprodukcije", + "PlayCount": "Broj igranja", + "Played": "Odigrano", + "PlayFromBeginning": "Pusti od početka", + "PlaylistError.AddFailed": "Greška pri dodavanju na plejlistu", + "PlaylistError.CreateFailed": "Greška pri kreiranju plejliste", + "PlaylistError.UpdateFailed": "Greška pri ažuriranju plejliste", + "PlaylistPublic": "Omogući javni pristup", + "PlaylistPublicDescription": "Omogućite pregled ove plejliste svakom korisniku koji je prijavljen.", + "Playlists": "Plejliste", + "PlayNext": "Pusti sljedeće", + "PlayNextEpisodeAutomatically": "Automatski reprodukuj sljedeću epizodu", + "PleaseAddAtLeastOneFolder": "Molimo dodajte barem jedan folder u ovu biblioteku klikom na dugme '+' u odjeljku 'Folders'.", + "PleaseConfirmRepositoryInstallation": "Molimo kliknite OK da potvrdite da ste pročitali gore navedeno i želite nastaviti s instalacijom repozitorija dodataka.", + "PleaseEnterNameOrId": "Molimo unesite ime ili vanjski ID.", + "PleaseRestartServerName": "Molimo pokrenite Jellyfin ponovo na {0}.", + "PleaseSelectTwoItems": "Molimo odaberite najmanje dvije stavke.", + "PluginDisableError": "Došlo je do greške prilikom onemogućavanja dodatka.", + "PluginEnableError": "Došlo je do greške prilikom aktiviranja dodatka.", + "PluginLoadConfigError": "Došlo je do greške prilikom dohvaćanja stranica za konfiguraciju dodatka.", + "PluginLoadRepoError": "Došlo je do greške prilikom dohvaćanja detalja o dodatku iz repozitorija.", + "PluginUninstallError": "Došlo je do greške prilikom deinstaliranja dodatka.", + "PluginsLoadError": "Došlo je do greške prilikom učitavanja dodataka", + "Poster": "Plakat", + "PosterCard": "Čestitka", + "PreferEmbeddedEpisodeInfosOverFileNames": "Radije koristim ugrađene informacije o epizodama nego nazive datoteka", + "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Koristite informacije o epizodi iz ugrađenih metapodataka ako su dostupne.", + "PreferEmbeddedExtrasTitlesOverFileNames": "Radije koristite ugrađene naslove nego nazive datoteka za dodatke", + "PreferEmbeddedExtrasTitlesOverFileNamesHelp": "Dodaci često imaju isto ugrađeno ime kao i roditelj, provjerite ovo kako biste ipak mogli koristiti ugrađene naslove za njih.", + "PreferEmbeddedTitlesOverFileNames": "Radije koristite ugrađene naslove nego nazive datoteka", + "PreferEmbeddedTitlesOverFileNamesHelp": "Odredite naslov za prikaz koji će se koristiti kada nisu dostupni internetski metapodaci ili lokalni metapodaci.", + "PreferNonstandardArtistsTag": "Preferirajte oznaku ARTISTS ako je dostupna", + "PreferNonstandardArtistsTagHelp": "Koristite nestandardnu oznaku ARTISTS umjesto oznake ARTIST kada je dostupna.", + "AllowEmbeddedSubtitles": "Onemogućite različite vrste ugrađenih titlova", + "AllowEmbeddedSubtitlesHelp": "Onemogućite titlove ugrađene u medijske kontejnere. Potrebno je potpuno osvježavanje biblioteke.", + "AllowEmbeddedSubtitlesAllowAllOption": "Dozvoli sve", + "AllowEmbeddedSubtitlesAllowNoneOption": "Dozvoli nijedno", + "AllowEmbeddedSubtitlesAllowImageOption": "Omogući sliku", + "AllowEmbeddedSubtitlesAllowTextOption": "Omogući tekst", + "Premiere": "Premijera", + "Premieres": "Premijere", + "Preview": "Pregled", + "PreviewLyrics": "Pregled teksta", + "Previous": "Prethodno", + "PreviousChapter": "Prethodno poglavlje", + "PreviousTrack": "Preskoči na prethodni", + "Primary": "Primarni", + "Print": "Štampaj", + "Producer": "Producent", + "Production": "Proizvodnja", + "ProductionLocations": "Lokacije produkcije", + "Profile": "Profil", + "Programs": "Programi", + "Quality": "Kvalitet", + "QuickConnect": "Brzo povezivanje", + "QuickConnectActivationSuccessful": "Uspješno aktivirano", + "QuickConnectAuthorizeCode": "Unesite kod {0} za prijavu", + "QuickConnectAuthorizeFail": "Nepriznati Brzospoj kod", + "QuickConnectAuthorizeSuccess": "Uspješno ste autentificirali svoj uređaj!", + "QuickConnectDeactivated": "Brzospoj je deaktiviran prije nego što je zahtjev za prijavu mogao biti odobren", + "QuickConnectDescription": "Da biste se prijavili pomoću Quick Connecta, odaberite dugme 'Brzospoj' na uređaju s kojeg se prijavljujete i unesite prikazani kod.", + "QuickConnectInvalidCode": "Neispravan Brzospoj kod", + "QuickConnectNotActive": "Brzospoj nije aktivan na ovom serveru", + "QuickConnectNotAvailable": "Zamolite administratora servera da omogući Brzospoja", + "Raised": "Podignuto", + "Rate": "Ocjeni", + "ReadInputAtNativeFramerate": "Čitaj ulaz pri izvornoj brzini sličica", + "ReadInputAtNativeFramerateHelp": "Omogućavanje ove opcije može riješiti neke probleme, npr. prekid prijenosa uživo prije vremena.", + "RecentlyWatched": "Nedavno gledano", + "RecommendationBecauseYouLike": "Zato što ti se sviđa {0}", + "RecommendationBecauseYouWatched": "Zato što ste gledali {0}", + "RecommendationDirectedBy": "U režiji {0}", + "RecommendationStarring": "U glavnim ulogama {0}", + "Record": "Snimi", + "RecordingCancelled": "Snimanje otkazano.", + "Recordings": "Snimci", + "RecordingScheduled": "Zakazano snimanje.", + "RecordSeries": "Serija rekorda", + "Refresh": "Osvježi", + "RefreshDialogHelp": "Metapodaci se osvježavaju na osnovu postavki i internetskih usluga koje su omogućene na kontrolnoj tabli.", + "RefreshMetadata": "Osvježi metapodatke", + "RefreshQueued": "Osvježenje u redu.", + "Regional": "Regionalni", + "ReleaseDate": "Datum izlaska", + "ReleaseGroup": "Grupa za objavljivanje", + "RememberAudioSelections": "Postavi audio trag na osnovu prethodnog stavka", + "RememberAudioSelectionsHelp": "Pokušajte postaviti audiozapis na najbliže podudaranje s posljednjim videom.", + "RememberMe": "Zapamti me", + "RememberSubtitleSelections": "Postavi podnaslovnu stazu na osnovu prethodne stavke", + "RememberSubtitleSelectionsHelp": "Pokušajte postaviti stazu titlova na najbliže podudaranje s posljednjim videom.", + "Remixer": "Remikser", + "RemoveFromCollection": "Ukloni iz kolekcije", + "RemoveFromPlaylist": "Ukloni sa plejliste", + "RenderPgsSubtitle": "Eksperimentalno prikazivanje PGS titlova", + "RenderPgsSubtitleHelp": "Odredite treba li klijent prikazivati PGS titlove umjesto ugrađenih titlova. Ovo može izbjeći transkodiranje na strani servera uz kompromis u pogledu performansi renderiranja na strani klijenta.", + "Repeat": "Ponovi", + "RepeatAll": "Ponovi sve", + "RepeatEpisodes": "Ponovljene epizode", + "RepeatMode": "Način ponavljanja", + "RepeatOne": "Ponovi jedan", + "ReplaceAllMetadata": "Zamijenite sve metapodatke", + "ReplaceExistingImages": "Zamijenite postojeće slike", + "ReplaceTrickplayImages": "Zamijenite postojeće slike trik-igara", + "RepositoriesPageLoadError": "Neuspjelo učitavanje repozitorija", + "Retry": "Ponovo pokušaj", + "RetryWithGlobalSearch": "Ponovo pokušajte sa globalnom pretragom", + "Reset": "Resetuj", + "ResetFilters": "Resetiraj filtere", + "ResetPassword": "Zatraži novu lozinku", + "ResolutionMatchSource": "Izvor meča", + "Restart": "Ponovo pokreni", + "ResumeAt": "Rezime iz {0}", + "ResumeLoadError": "Neuspjelo učitavanje postavki nastavka", + "Rewind": "Vratiti unazad", + "Runtime": "Vrijeme izvršavanja", + "Saturday": "Subota", + "Save": "Sačuvaj", + "SaveLyricsIntoMediaFolders": "Sačuvaj tekstove u medijske foldere", + "SaveLyricsIntoMediaFoldersHelp": "Shranjivanje tekstova uz audio datoteke omogućit će njihovo lakše upravljanje.", + "SavePassword": "Spasi lozinku", + "SaveRecordingNFO": "Sačuvaj EPG metapodatke snimanja u NFO", + "SaveRecordingNFOHelp": "Sačuvajte metapodatke od pružatelja EPG-a zajedno s medijima.", + "SaveRecordingImages": "Sačuvaj slike EPG snimanja", + "SaveRecordingImagesHelp": "Sačuvajte slike iz EPG-provajdera pored medija.", + "SaveSubtitlesIntoMediaFolders": "Sačuvaj titlove u medijske foldere", + "SaveSubtitlesIntoMediaFoldersHelp": "Shranjivanje titlova uz video datoteke omogućit će njihovo lakše upravljanje.", + "ScanForNewAndUpdatedFiles": "Skenerajte nove i ažurirane datoteke", + "ScanLibrary": "Skener biblioteke", + "Schedule": "Raspored", + "ScreenResolution": "Rezolucija ekrana", + "Search": "Pretraži", + "SearchForCollectionInternetMetadata": "Pretražite internet za umjetnička djela i metapodatke", + "SearchForLyrics": "Pretraga tekstova", + "SearchForMissingMetadata": "Pretraga nedostajućih metapodataka", + "SearchForSubtitles": "Pretraga titlova", + "SearchResults": "Rezultati pretrage", + "SearchResultsEmpty": "Žao nam je! Nisu pronađeni rezultati za \"{0}\"", + "Season": "Sezona", + "SecondarySubtitles": "Sekundarni titlovi", + "SelectAdminUsername": "Molimo odaberite korisničko ime za administratorski račun.", + "SelectPreferredTranscodeVideoCodecHelp": "Odaberite željeni video kodek za konverziju. Ako željeni kodek nije podržan, poslužitelj će koristiti sljedeći najbolji raspoloživi kodek.", + "SelectPreferredTranscodeVideoAudioCodecHelp": "Odaberite željeni audio kodek za transcodiranje video sadržaja. Ako željeni kodek nije podržan, poslužitelj će koristiti sljedeći najbolji raspoloživi kodek.", + "SelectServer": "Odaberi poslužitelj", + "SendMessage": "Pošalji poruku", + "Series": "Polica", + "SeriesCancelled": "Serija je otkazana.", + "SeriesDisplayOrderHelp": "Raziđite epizode po datumu emitovanja, redoslijedu na DVD-u ili apsolutnom brojanju.", + "SeriesRecordingScheduled": "Zakazano snimanje serije.", + "SeriesSettings": "Postavke serije", + "SeriesYearToPresent": "{0} - Prisutan", + "ServerNameIsRestarting": "Server na {0} se ponovo pokreće.", + "ServerNameIsShuttingDown": "Server na {0} se isključuje.", + "ServerRestartNeededAfterPluginInstall": "Jellyfin će morati biti ponovo pokrenut nakon instaliranja dodatka.", + "ServerUpdateNeeded": "Ovaj poslužitelj treba ažurirati. Da biste preuzeli najnoviju verziju, posjetite {0}", + "Settings": "Podešavanja", + "SettingsPageLoadError": "Neuspjelo učitavanje stranice s postavkama", + "SettingsSaved": "Postavke sačuvane.", + "SettingsWarning": "Promjena ovih vrijednosti može uzrokovati nestabilnost ili prekide u povezivosti. Ako naiđete na bilo kakve probleme, preporučujemo da ih vratite na zadane vrijednosti.", + "Share": "Podijeli", + "ShowAdvancedSettings": "Prikaži napredne postavke", + "ShowIndicatorsFor": "Prikaži indikatore za", + "ShowLess": "Prikaži manje", + "ShowMore": "Prikaži više", + "ShowParentImages": "Prikaži slike serije", + "Shows": "Pokazuje", + "ShowTitle": "Prikaži naslov", + "ShowYear": "Prikaži godinu", + "Shuffle": "Razbacaj", + "SimultaneousConnectionLimitHelp": "Maksimalan broj dozvoljenih istovremenih streamova. Unesite 0 za neograničeno.", + "SkipEpisodesAlreadyInMyLibrary": "Nemoj snimati epizode koje su već u mojoj biblioteci", + "SkipEpisodesAlreadyInMyLibraryHelp": "Epizode će se uspoređivati pomoću brojeva sezone i epizode, kada su dostupni.", + "Small": "Maleno", + "SmallCaps": "Male kapitalizacije", + "Smaller": "Manje", + "Smart": "Pametno", + "SmartSubtitlesHelp": "Podnaslovi koji odgovaraju odabranoj jeziku bit će učitani kada je audio na stranom jeziku.", + "Songs": "Pjesme", + "Sort": "Sortiraj", + "SortByValue": "Sortiraj po {0}", + "SortChannelsBy": "Sortiraj kanale po", + "SortName": "Sortiraj ime", + "SpecialFeatures": "Posebne značajke", + "Sports": "Sport", + "StereoDownmixAlgorithmHelp": "Algoritam koji se koristi za smanjenje kanala višekanalnog zvuka na stereo.", + "StoryArc": "Radnja", + "StopPlayback": "Zaustavi reprodukciju", + "StopRecording": "Prestani snimati", + "StorageType.CDRom": "CD-ROM", + "StorageType.Fixed": "Fiksno", + "StorageType.Network": "Mreža", + "StorageType.NoRootDirectory": "Nema korijenskog direktorija", + "StorageType.Ram": "RAM", + "StorageType.Removable": "Odvojiv", + "StorageType.Unknown": "Neprijatelj", + "StreamCountExceedsLimit": "Broj streamova prelazi ograničenje", + "StreamingLoadError": "Nije uspjelo učitati postavke stranice za streaming", + "Studio": "Studio", + "Studios": "Studiji", + "Subtitle": "Podnaslov", + "SubtitleAppearanceSettingsAlsoPassedToCastDevices": "Ova podešavanja se također primjenjuju na bilo koje reprodukcije putem Google Casta koje je pokrenuo ovaj uređaj.", + "SubtitleAppearanceSettingsDisclaimer": "Sljedeća podešavanja se ne primjenjuju na gore navedene grafičke titlove niti na ASS/SSA titlove koji ugrađuju vlastite stilove.", + "SubtitleBlack": "Crna", + "SubtitleBlue": "Plava", + "SubtitleCyan": "Cijan", + "SubtitleDownloadersHelp": "Omogućite i rangirajte svoje omiljene preuzimače titlova po redu prioriteta.", + "SubtitleGray": "Sivo", + "SubtitleGreen": "Zelena", + "SubtitleLightGray": "Svijetlo siva", + "SubtitleMagenta": "Magenta", + "SubtitleOffset": "Pomak podnaslova", + "SubtitleRed": "Crvena", + "Subtitles": "Podnaslovi", + "SubtitleVerticalPositionHelp": "Broj retka na kojem se tekst pojavljuje. Pozitivni brojevi označavaju odozgo prema dolje. Negativni brojevi označavaju odozdo prema gore.", + "SubtitleWhite": "Bijela", + "SubtitleYellow": "Žuta", + "Success": "Uspješno", + "Suggestions": "Prijedlozi", + "Sunday": "Nedjelja", + "SyncPlayAccessHelp": "Funkcija SyncPlay omogućava sinhronizaciju reprodukcije s drugim uređajima. Odaberite nivo pristupa koji ovaj korisnik ima za SyncPlay.", + "SyncPlayGroupDefaultTitle": "Grupa {0}", + "TabAccess": "Pristup", + "TabAdvanced": "Napredno", + "HeaderBackups": "Sigurnosne kopije", + "TabDashboard": "Nadzorna ploča", + "TabLatest": "Zadnje dodano", + "TabLogs": "Logovi", + "TabMusic": "Muzika", + "TabNetworking": "Umrežavanje", + "TabNetworks": "TV mreže", + "TabNfoSettings": "NFO postavke", + "TabOther": "Ostalo", + "TabParentalControl": "Roditeljska kontrola", + "TabPlugins": "Dodaci", + "TabRepositories": "Repozitoriji", + "TabScheduledTasks": "Zakazani zadaci", + "TabServer": "Server", + "TabStreaming": "Medijsko Strujanje", + "TabUpcoming": "Nadolazeći", + "Tags": "Oznake", + "TagsValue": "Oznake: {0}", + "TellUsAboutYourself": "Recite nam nešto o sebi", + "TextSent": "Poruka poslana.", + "ThemeSongs": "Tematske pjesme", + "ThemeVideos": "Tematski videozapisi", + "TheseSettingsAffectSubtitlesOnThisDevice": "Ova podešavanja utiču na titlove na ovom uređaju", + "ThisWizardWillGuideYou": "Ovaj čarobnjak će vam pomoći da prođete kroz proces postavljanja. Da biste započeli, unesite naziv servera i odaberite željeni jezik.", + "Thumb": "Palac", + "ThumbCard": "Karta za palac", + "Thursday": "Četvrtak", + "TitleHardwareAcceleration": "Hardverska akceleracija", + "TitleHostingSettings": "Postavke hostinga", + "TitlePlayback": "Reprodukcija", + "TonemappingAlgorithmHelp": "Mapiranje tona može se fino podesiti. Ako niste upoznati s ovim opcijama, jednostavno zadržite zadano. Preporučena vrijednost je 'BT.2390'.", + "TonemappingRangeHelp": "Odaberite raspon boja izlaza. Auto je isto kao i ulazni raspon.", + "Track": "Audiozapis", + "TrackCount": "{0} pjesme", + "Trailers": "Najave", + "Transcoding": "Transkodiranje", + "TranscodingLoadError": "Neuspjelo učitavanje postavki transkodiranja", + "Translator": "Prebavljač", + "Tuesday": "Utorak", + "TV": "TV", + "TvLibraryHelp": "Pregledajte {0}TV vodič za imenovanje{1}.", + "TypeOptionPluralAudio": "Audiozapisi", + "TypeOptionPluralBook": "Knjige", + "TypeOptionPluralBoxSet": "Kompletne edicije", + "TypeOptionPluralEpisode": "Epizode", + "TypeOptionPluralMovie": "Filmovi", + "TypeOptionPluralMusicAlbum": "Muzički albumi", + "TypeOptionPluralMusicArtist": "Muzički izvođači", + "TypeOptionPluralMusicVideo": "Muzički spotovi", + "TypeOptionPluralSeason": "Sezone", + "TypeOptionPluralSeries": "TV serije", + "TypeOptionPluralVideo": "Videozapisi", + "Typewriter": "Pisaća mašina", + "Uniform": "Uniforma", + "UninstallPluginConfirmation": "Jeste li sigurni da želite deinstalirati {0}?", + "UnknownError": "Dogodila se nepoznata greška.", + "Unmute": "Ukloni tišinu", + "Unplayed": "Nezigran", + "Unrated": "Bez ocjene", + "UnsupportedPlayback": "Jellyfin ne može dešifrirati sadržaj zaštićen DRM-om, ali će se bez obzira na to pokušati reproducirati sav sadržaj, uključujući zaštićene naslove. Neke datoteke mogu se prikazati potpuno crne zbog šifriranja ili drugih nepodržanih značajki, kao što su interaktivni naslovi.", + "Unwatch": "Ne gledati", + "Up": "Gore", + "Upload": "Otpremi", + "UploadCustomImage": "Otpremi prilagođenu sliku", + "UseCustomTagDelimiters": "Koristite prilagođeni razdjelnik oznaka", + "UseCustomTagDelimitersHelp": "Podijelite oznake umjetnika/žanra s prilagođenim znakovima.", + "UseDoubleRateDeinterlacing": "Udvostruči brzinu sličica pri uklanjanju isprekidanosti", + "UseDoubleRateDeinterlacingHelp": "Ovo podešavanje koristi polnu brzinu pri uklanjanju isprekidanosti, često nazvano bob deinterlacing, što udvostručuje brzinu sličica videa kako bi pružilo potpuni pokret kakav biste vidjeli gledajući isprepleteni video na televizoru.", + "UseEpisodeImagesInNextUp": "Koristite slike epizoda u odjeljcima 'Sljedeće' i 'Nastavi gledati'", + "UseEpisodeImagesInNextUpHelp": "Sekcije 'Sljedeće' i 'Nastavi gledati' koristit će slike epizoda kao minijature umjesto glavne minijature serije.", + "UserAgentHelp": "Pružite prilagođenu HTTP zaglavnicu 'User-Agent'.", + "UserMenu": "Korisnički meni", + "UsersEditPageError": "Neuspjelo učitavanje stranice za uređivanje korisnika", + "UserProfilesIntro": "Jellyfin uključuje podršku za korisničke profile s detaljnim postavkama prikaza, stanjem reprodukcije i roditeljskom kontrolom.", + "ValueAlbumCount": "{0} albuma", + "ValueDiscNumber": "Disk {0}", + "ValueEpisodeCount": "{0} epizoda", + "ValueMinutes": "{0} min", + "ValueMovieCount": "{0} filmovi", + "ValueMusicVideoCount": "{0} muzički spotovi", + "ValueOneAlbum": "1 album", + "ValueOneEpisode": "1 epizoda", + "ValueOneMovie": "1 film", + "ValueOneMusicVideo": "1 muzički spot", + "ValueOneSeries": "1 serija", + "ValueOneSong": "1 pjesma", + "ValueSeconds": "{0} sekundi", + "ValueSeriesCount": "{0} serija", + "ValueSongCount": "{0} pjesama", + "ValueSpecialEpisodeName": "Posebno - {0}", + "ValueTimeLimitMultiHour": "Vremensko ograničenje: {0} sati", + "ValueTimeLimitSingleHour": "Vremensko ograničenje: 1 sat", + "Vertical": "Vertikalno", + "Video": "Video", + "VideoAudio": "Video Audio", + "ViewAlbum": "Pogledaj album", + "ViewAlbumArtist": "Pregledaj izvođača albuma", + "ViewAllPlugins": "Prikaži sve dodatke", + "ViewLyrics": "Pogledaj tekst", + "ViewPlaybackInfo": "Pregledajte informacije o reprodukciji", + "ViewSettings": "Podešavanja prikaza", + "Watch": "Gledaj", + "Watched": "Gledano", + "Wednesday": "Srijeda", + "WeeklyAt": "{0} na {1}", + "WelcomeToProject": "Dobrodošli na Jellyfin!", + "Whitelist": "Bila lista", + "WizardCompleted": "To je sve što nam za sada treba. Jellyfin je počeo prikupljati informacije o vašoj medijskoj biblioteci. Pogledajte neke od naših aplikacija, a zatim kliknite Završi da biste vidjeli nadzorni panel.", + "WriteAccessRequired": "Jellyfinu je potreban pristup za pisanje u ovaj folder. Molimo osigurajte pristup za pisanje i pokušajte ponovo.", + "Writer": "Pisac", + "Writers": "Pisci", + "XmlTvKidsCategoriesHelp": "Programi s ovim kategorijama prikazivat će se kao programi za djecu. Razdvojite stavke znakom '|'.", + "XmlTvMovieCategoriesHelp": "Programi s ovim kategorijama prikazivat će se kao filmovi. Odvojite više kategorija znakom '|'.", + "XmlTvNewsCategoriesHelp": "Programi s ovim kategorijama prikazivat će se kao programi vijesti. Razdvojite više kategorija znakom '|'.", + "XmlTvPathHelp": "Staza do XMLTV datoteke. Jellyfin će pročitati ovu datoteku i povremeno provjeravati ima li ažuriranja. Vi ste odgovorni za kreiranje i ažuriranje datoteke.", + "XmlTvSportsCategoriesHelp": "Programi s ovim kategorijama prikazivat će se kao sportski programi. Razdvojite više kategorija crticom '|'.", + "Yadif": "Još jedan deinterlacing filter (YADIF)", + "Yes": "Da", + "Yesterday": "Jučer", + "HeaderSelectFallbackFontPath": "Odaberite putanju do rezervnog fonta", + "HeaderSelectFallbackFontPathHelp": "Pregledajte ili unesite putanju do mape s rezervnim fontom koji će se koristiti za iscrtavanje ASS/SSA titlova.", + "LabelFallbackFontPath": "Zadana putanja do mape sa fontovima", + "LabelFallbackFontPathHelp": "Ovi fontovi se koriste kod nekih klijenata za prikaz titlova. Molimo pogledajte dokumentaciju za više informacija.", + "EnableFallbackFont": "Omogući rezervne fontove", + "EnableFallbackFontHelp": "Omogućite prilagođene alternativne fontove. Ovo može izbjeći problem neispravnog prikaza titlova.", + "AspectRatioCover": "Uvećanje", + "AspectRatioFill": "Rastezanje", + "Remuxing": "Remiksiranje", + "RemuxHelp1": "Medij je u nekom kompatibilnom kontejneru za datoteke (MKV, AVI, WMV itd.), ali su i video tok i audio tok kompatibilni s uređajem. Medij će se u realnom vremenu neizgubno repakirati prije nego što se pošalje uređaju.", + "RemuxHelp2": "Remux koristi vrlo malo procesorske snage uz potpuno bezgubnu kvalitetu medija.", + "LabelPlaybackInfo": "Informacije o reprodukciji", + "LabelAudioInfo": "Audio informacije", + "LabelVideoInfo": "Informacije o videu", + "LabelTrackGain": "Osjačanje staze", + "LabelTranscodingInfo": "Informacije o transcodiranju", + "LabelDirectStreamingInfo": "Informacije o direktnom streamanju", + "LabelRemuxingInfo": "Remiksiranje informacija", + "LabelOriginalMediaInfo": "Originalne informacije o medijima", + "LabelSyncPlayInfo": "SyncPlay informacije", + "PreferFmp4HlsContainer": "Preferirajte fMP4-HLS medijski kontejner", + "PreferFmp4HlsContainerHelp": "Preferirajte korištenje fMP4 kao zadani kontejner za HLS, čime se omogućuje direktno strimanje HEVC i AV1 sadržaja na podržanim uređajima.", + "AllowHevcEncoding": "Omogućite kodiranje u HEVC formatu", + "LabelAllowedAudioChannels": "Maksimalan dozvoljeni broj audio kanala", + "LabelSelectAudioChannels": "Kanalima", + "LabelSelectMono": "Mono", + "LabelSelectStereo": "Stereo", + "YoutubeBadRequest": "Loš zahtjev.", + "YoutubePlaybackError": "Zatraženi video se ne može reproducirati.", + "YoutubeNotFound": "Video nije pronađen.", + "YoutubeDenied": "Zatraženi video nije dozvoljeno reproducirati u ugrađenim plejerima.", + "MessageChromecastConnectionError": "Vaš Google Cast prijemnik ne može uspostaviti vezu sa Jellyfin serverom. Molimo provjerite vezu i pokušajte ponovo.", + "MessagePlaybackError": "Došlo je do greške pri reprodukciji ove datoteke na vašem Google Cast prijemniku.", + "EnableEnhancedNvdecDecoder": "Omogućite poboljšani NVDEC dekoder", + "EnableVppTonemapping": "Omogući mapiranje tona VPP-a", + "AllowVppTonemappingHelp": "Potpuno mapiranje tonova zasnovano na Intelovim upravljačkim programima. Trenutno radi samo na određenom hardveru s HDR10 videozapisima. Ovo ima viši prioritet u odnosu na drugu OpenCL implementaciju.", + "EnableVideoToolboxTonemapping": "Omogući mapiranje tona VideoToolboxa", + "AllowVideoToolboxTonemappingHelp": "Hardverski ubrzano mapiranje tonova koje pruža VideoToolbox. Radi sa većinom HDR formata, uključujući HDR10, HDR10+ i HLG, ali ne radi sa Dolby Vision profilom 5. Ovo ima viši prioritet u odnosu na drugu Metal implementaciju.", + "Controls": "Kontrole", + "LabelEnableGamepad": "Omogući gamepad", + "EnableGamepadHelp": "Slušajte ulazne podatke sa svih priključenih kontrolera. (Zahtijeva: prikazni način 'TV')", + "AudioCodecNotSupported": "Audio kodek nije podržan", + "ContainerNotSupported": "Kontejner nije podržan", + "SubtitleCodecNotSupported": "Podnaslovni kodek nije podržan", + "VideoCodecNotSupported": "Video kodek nije podržan", + "VideoCodecTagNotSupported": "Oznaka video kodeka nije podržana", + "AudioBitrateNotSupported": "Audio bitrata nije podržana", + "AudioChannelsNotSupported": "Broj audio kanala nije podržan", + "VideoResolutionNotSupported": "Rezolucija videa nije podržana", + "AudioProfileNotSupported": "Profil audio kodeka nije podržan", + "AudioSampleRateNotSupported": "Uzorak audio snimanja nije podržan", + "AnamorphicVideoNotSupported": "Anamorfni video nije podržan", + "InterlacedVideoNotSupported": "Upleteni video nije podržan", + "SecondaryAudioNotSupported": "Sekundarni audio zapisi nisu podržani", + "RefFramesNotSupported": "Referentni okviri nisu podržani", + "VideoBitDepthNotSupported": "Bitna dubina videa nije podržana", + "VideoFramerateNotSupported": "Stopa sličica u sekundi videa nije podržana", + "VideoLevelNotSupported": "Nivo video kodeka nije podržan", + "VideoProfileNotSupported": "Profil video kodeka nije podržan", + "AudioBitDepthNotSupported": "Dubina bita zvuka nije podržana", + "ContainerBitrateExceedsLimit": "Bitrata videa prelazi ograničenje", + "PreferSystemNativeHwDecoder": "Preferirajte OS-nativne DXVA ili VA-API hardverske dekodere", + "EnableIntelLowPowerH264HwEncoder": "Omogući Intel Low-Power H.264 hardverski enkoder", + "EnableIntelLowPowerHevcHwEncoder": "Omogući Intel Low-Power HEVC hardverski kodirivač", + "IntelLowPowerEncHelp": "Enkodiranje niske snage može uzrokovati nepotrebnu sinhronizaciju CPU-a i GPU-a. Na Linuxu ih je potrebno onemogućiti ako firmware i915 HuC nije konfigurisan.", + "LabelHardwareEncodingOptions": "Opcije hardverskog kodiranja", + "LabelEncodingFormatOptions": "Opcije formata kodiranja", + "EncodingFormatHelp": "Odaberite kodiranje videa na koje bi Jellyfin trebao transkodirati. Jellyfin će koristiti softversko kodiranje kada za odabrani format nije dostupna hardverska akceleracija. H.264 kodiranje će uvijek biti omogućeno.", + "AudioIsExternal": "Audio stream je eksterni", + "VideoBitrateNotSupported": "Bitrata videa nije podržana", + "UnknownVideoStreamInfo": "Informacije o video toku su nepoznate", + "UnknownAudioStreamInfo": "Informacije o audio toku su nepoznate", + "DirectPlayError": "Došlo je do greške pri pokretanju direktnog reprodukcije", + "SelectAll": "Odaberi sve", + "Featurette": "Kratki prilog", + "Short": "Kratko", + "Clip": "Isječak", + "Trailer": "Najava", + "BehindTheScenes": "Iza kulisa", + "DeletedScene": "Izbrišana scena", + "Interview": "Intervju", + "Scene": "Scena", + "Sample": "Uzorak", + "Select": "Odaberite", + "ThemeSong": "Tema", + "ThemeVideo": "Tematski video", + "EnableEnhancedNvdecDecoderHelp": "Poboljšana implementacija NVDEC-a, onemogućite ovu opciju da biste koristili CUVID ako naiđete na greške pri dekodiranju.", + "EnableSplashScreen": "Omogući sliku splash ekrana", + "LabelVppTonemappingBrightness": "VPP mapiranje tona, osvjetljenje, pojačanje", + "LabelVppTonemappingBrightnessHelp": "Primijenite pojačanje svjetline u VPP mapiranju tona. Preporučena vrijednost je 16.", + "LabelVppTonemappingContrast": "VPP mapiranje tona, kontrast, pojačanje", + "LabelVppTonemappingContrastHelp": "Primijenite pojačanje kontrasta u mapiranju tonova VPP-a. Preporučena vrijednost je 1.", + "VideoRangeTypeNotSupported": "Tip raspona videozapisa nije podržan", + "LabelVideoRangeType": "Tip video raspona", + "MediaInfoVideoRangeType": "Tip video raspona", + "MediaInfoDoViTitle": "Naslov DV", + "MediaInfoDvVersionMajor": "Glavna verzija DV", + "MediaInfoDvVersionMinor": "DV verzija manja", + "MediaInfoDvProfile": "DV profil", + "MediaInfoDvLevel": "Nivo DV-a", + "MediaInfoRpuPresentFlag": "DV rpu preset zastavica", + "MediaInfoElPresentFlag": "DV el preset oznaka", + "MediaInfoBlPresentFlag": "DV bl prednameštena oznaka", + "MediaInfoDvBlSignalCompatibilityId": "ID kompatibilnosti DV BL signala", + "Unreleased": "Još nije objavljeno", + "LabelTonemappingMode": "Način mapiranja tona", + "TonemappingModeHelp": "Odaberite način mapiranja tona. Ako primijetite preeksponirane istaknute dijelove, pokušajte prebaciti se u RGB način.", + "Unknown": "Neprijatelj", + "AllowAv1Encoding": "Omogućite kodiranje u AV1 formatu", + "AiTranslated": "AI prevedeno", + "MachineTranslated": "Mašinski prevedeno", + "ForeignPartsOnly": "Samo prisilne/strane komponente", + "HearingImpairedShort": "Visoka/nisoka brzina prijenosa podataka", + "LabelIsHearingImpaired": "Za osobe sa oštećenim sluhom (SDH)", + "Trickplay": "Trik-igra", + "TrickplayLoadError": "Neuspjelo učitavanje postavki trickplay", + "LabelTrickplayAccel": "Omogući hardversko dekodiranje", + "LabelTrickplayAccelEncoding": "Omogućite hardverski ubrzano MJPEG kodiranje", + "LabelTrickplayAccelEncodingHelp": "Trenutno je dostupna samo na QSV, VA-API, VideoToolbox i RKMPP, a ova opcija nema utjecaja na druge metode hardverske akceleracije.", + "LabelTrickplayKeyFrameOnlyExtraction": "Generirajte slike samo iz ključnih sličica", + "LabelTrickplayKeyFrameOnlyExtractionHelp": "Izvadite samo ključne sličice za znatno bržu obradu uz manje precizno vremensko određivanje. Ako konfigurirani hardverski dekoder ne podržava ovaj način rada, koristit će se softverski dekoder.", + "NonBlockingScan": "Neblokirajuće - generiše redove, zatim vraća", + "BlockingScan": "Blokiranje - generisanje redova, blokira skeniranje dok ne bude završeno", + "LabelScanBehavior": "Skeniranje ponašanja", + "LabelScanBehaviorHelp": "Zadano ponašanje nije blokirajuće, što znači da će mediji biti dodani u biblioteku prije nego što se generišu datoteke za brzo reprodukciju. Blokiranje će osigurati da se datoteke za brzo reprodukciju generišu prije dodavanja medija u biblioteku, ali će skeniranja učiniti znatno dužim.", + "PriorityHigh": "Visoko", + "PriorityAboveNormal": "Iznad prosjeka", + "PriorityNormal": "Normalno", + "PriorityBelowNormal": "Ispod normale", + "PriorityIdle": "Mirovanje", + "LabelProcessPriority": "Prioritet procesa", + "LabelProcessPriorityHelp": "Postavljanje ove vrijednosti na nižu ili višu odredit će kako CPU prioritetno tretira proces generisanja ffmpeg trickplay-a u odnosu na druge procese. Ako primijetite usporavanje tokom generisanja trickplay slika, ali ne želite potpuno zaustaviti njihovo generisanje, pokušajte smanjiti ovu vrijednost kao i broj niti.", + "LabelImageInterval": "Interval slike", + "LabelImageIntervalHelp": "Vremenski interval (ms) između svake nove slike trikpleja.", + "LabelWidthResolutions": "Rezolucije širine", + "LabelWidthResolutionsHelp": "Popis razdvojen zarezima širina (px) na kojima će se generisati Trickplay slike. Sve slike bi trebale biti generisane proporcionalno izvorniku, tako da širina od 320 na videu formata 16:9 iznosi otprilike 320×180.", + "LabelTileWidth": "Širina pločice", + "LabelTileWidthHelp": "Maksimalan broj slika po pločici u X smjeru.", + "LabelTileHeight": "Visina pločice", + "LabelTileHeightHelp": "Maksimalan broj slika po pločici u Y smjeru.", + "LabelJpegQuality": "JPEG kvaliteta", + "LabelJpegQualityHelp": "Kvalitet JPEG kompresije za slike za trik-play.", + "LabelQscale": "Qskala", + "LabelQscaleHelp": "Skala kvaliteta izlaznih slika ffmpega, pri čemu je 2 najviša kvaliteta, a 31 najniža.", + "LabelTrickplayThreads": "FFmpeg niti", + "LabelTrickplayThreadsHelp": "Broj niti koje treba proslijediti argumentu '-threads' ffmpeg-a.", + "OptionExtractTrickplayImage": "Omogući izdvajanje slika za trikove", + "ExtractTrickplayImagesHelp": "Slike trikpleja su slične slikama poglavlja, osim što se protežu duž cijele dužine sadržaja i koriste se za prikaz pregleda prilikom pretraživanja videa.", + "LabelExternalServerUri": "Vanjski URI", + "LabelExternalServerUriHelp": "Objavljen URI poslužitelja za vanjski pristup.", + "LabelExtractTrickplayDuringLibraryScan": "Izvući slike brzokreta tokom skeniranja biblioteke", + "LabelExtractTrickplayDuringLibraryScanHelp": "Generirajte slike za preskakanje kad se videozapisi uvoze prilikom skeniranja biblioteke. U suprotnom će se izvući tokom zakazanog zadatka za slike za preskakanje. Ako je generisanje postavljeno na neblokirajuće, to neće utjecati na vrijeme potrebno za dovršetak skeniranja biblioteke.", + "LogLoadFailure": "Nije uspjelo učitati datoteku dnevnika. Možda se još uvijek aktivno piše u nju.", + "LabelVideoAttributes": "Atributi videa", + "LabelVideoColors": "Boje videa", + "LabelVideoBitDepth": "Bitna dubina videa", + "LabelAudioAttributes": "Audio atributi", + "LabelTargetCodecs": "Ciljani kodeci", + "LabelProgressAndSpeed": "Napredak / brzina", + "LabelReasons": "Razlozi", + "LabelPlayerSizes": "Veličine igrača", + "LabelPlaybackQuality": "Okvir izgubljen / oštećen" +} From 90dc99ef97cc504e30b9a18a17619f6556de23e6 Mon Sep 17 00:00:00 2001 From: Violet Caulfield <42452695+anultravioletaurora@users.noreply.github.com> Date: Fri, 17 Apr 2026 06:48:39 -0500 Subject: [PATCH 124/695] JS migration to TS SDK Websockets Bridge websocket subscription function to JS --- src/components/guide/guide.js | 32 ++++++----- src/components/playback/playbackmanager.js | 16 ++++-- .../recordingcreator/recordingfields.js | 54 +++++++------------ src/controllers/itemDetails/index.js | 30 ++++++----- src/controllers/shows/tvrecommended.js | 12 ++--- .../RefreshIndicator.tsx | 3 -- .../emby-itemrefreshindicator.js | 51 +++++++++--------- .../emby-ratingbutton/emby-ratingbutton.js | 36 +++++-------- .../jellyfin-apiclient/ServerConnections.js | 10 ++++ 9 files changed, 124 insertions(+), 120 deletions(-) diff --git a/src/components/guide/guide.js b/src/components/guide/guide.js index 1b5354914d..2127bc2e5f 100644 --- a/src/components/guide/guide.js +++ b/src/components/guide/guide.js @@ -2,13 +2,13 @@ import escapeHtml from 'escape-html'; import { ItemAction } from 'constants/itemAction'; import { ServerConnections } from 'lib/jellyfin-apiclient'; +import { OutboundWebSocketMessageType } from '@jellyfin/sdk/lib/websocket'; import inputManager from '../../scripts/inputManager'; import browser from '../../scripts/browser'; import globalize from '../../lib/globalize'; import Events from '../../utils/events.ts'; import scrollHelper from '../../scripts/scrollHelper'; -import serverNotifications from '../../scripts/serverNotifications'; import loading from '../loading/loading'; import datetime from '../../scripts/datetime'; import focusManager from '../focusManager'; @@ -171,9 +171,10 @@ function Guide(options) { self.destroy = function () { stopAutoRefresh(); - Events.off(serverNotifications, 'TimerCreated', onTimerCreated); - Events.off(serverNotifications, 'TimerCancelled', onTimerCancelled); - Events.off(serverNotifications, 'SeriesTimerCancelled', onSeriesTimerCancelled); + if (self._wsUnsubscribers) { + self._wsUnsubscribers.forEach(unsub => unsub()); + self._wsUnsubscribers = []; + } setScrollEvents(options.element, false); itemShortcuts.off(options.element); @@ -1043,10 +1044,10 @@ function Guide(options) { } } - function onTimerCreated(e, apiClient, data) { - const programId = data.ProgramId; + function onTimerCreated(data) { + const programId = data?.ProgramId; // This could be null, not supported by all tv providers - const newTimerId = data.Id; + const newTimerId = data?.Id; // find guide cells by program id, ensure timer icon const cells = options.element.querySelectorAll('.programCell[data-id="' + programId + '"]'); @@ -1062,8 +1063,8 @@ function Guide(options) { } } - function onTimerCancelled(e, apiClient, data) { - const id = data.Id; + function onTimerCancelled(data) { + const id = data?.Id; // find guide cells by timer id, remove timer icon const cells = options.element.querySelectorAll('.programCell[data-timerid="' + id + '"]'); @@ -1078,8 +1079,8 @@ function Guide(options) { } } - function onSeriesTimerCancelled(e, apiClient, data) { - const id = data.Id; + function onSeriesTimerCancelled(data) { + const id = data?.Id; // find guide cells by timer id, remove timer icon const cells = options.element.querySelectorAll('.programCell[data-seriestimerid="' + id + '"]'); @@ -1187,9 +1188,12 @@ function Guide(options) { Events.trigger(self, 'load'); - Events.on(serverNotifications, 'TimerCreated', onTimerCreated); - Events.on(serverNotifications, 'TimerCancelled', onTimerCancelled); - Events.on(serverNotifications, 'SeriesTimerCancelled', onSeriesTimerCancelled); + const _guideApiClient = ServerConnections.getApiClient(options.serverId); + self._wsUnsubscribers = [ + _guideApiClient?.subscribe([OutboundWebSocketMessageType.TimerCreated], ({ Data }) => onTimerCreated(Data)), + _guideApiClient?.subscribe([OutboundWebSocketMessageType.TimerCancelled], ({ Data }) => onTimerCancelled(Data)), + _guideApiClient?.subscribe([OutboundWebSocketMessageType.SeriesTimerCancelled], ({ Data }) => onSeriesTimerCancelled(Data)) + ].filter(Boolean); self.refresh(); } diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index 8052b31da6..9c70d8a810 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -28,6 +28,7 @@ import { bindMediaSegmentManager } from 'apps/stable/features/playback/utils/med import { bindMediaSessionSubscriber } from 'apps/stable/features/playback/utils/mediaSessionSubscriber'; import { AppFeature } from 'constants/appFeature'; import { ServerConnections } from 'lib/jellyfin-apiclient'; +import { OutboundWebSocketMessageType } from '@jellyfin/sdk/lib/websocket'; import { MediaError } from 'types/mediaError'; import { getMediaError } from 'utils/mediaError'; import { toApi } from 'utils/jellyfin-apiclient/compat'; @@ -3726,9 +3727,18 @@ export class PlaybackManager { }; if (appHost.supports(AppFeature.RemoteControl)) { - import('../../scripts/serverNotifications').then(({ default: serverNotifications }) => { - Events.on(serverNotifications, 'ServerShuttingDown', self.setDefaultPlayerActive.bind(self)); - Events.on(serverNotifications, 'ServerRestarting', self.setDefaultPlayerActive.bind(self)); + // Defer setup past module evaluation to avoid the circular dependency: + // playbackmanager → lib/jellyfin-apiclient → ServerConnections → utils/dashboard → backdrop → playbackmanager + queueMicrotask(() => { + let _unsubscribeRemoteControl; + Events.on(ServerConnections, 'localusersignedin', () => { + _unsubscribeRemoteControl?.(); + const api = ServerConnections.getCurrentApi(); + _unsubscribeRemoteControl = api?.subscribe( + [OutboundWebSocketMessageType.ServerShuttingDown, OutboundWebSocketMessageType.ServerRestarting], + self.setDefaultPlayerActive.bind(self) + ); + }); }); } diff --git a/src/components/recordingcreator/recordingfields.js b/src/components/recordingcreator/recordingfields.js index 42a25d580a..3703a2c3ca 100644 --- a/src/components/recordingcreator/recordingfields.js +++ b/src/components/recordingcreator/recordingfields.js @@ -1,7 +1,6 @@ import globalize from '../../lib/globalize'; import { ServerConnections } from 'lib/jellyfin-apiclient'; -import Events from '../../utils/events.ts'; -import serverNotifications from '../../scripts/serverNotifications'; +import { OutboundWebSocketMessageType } from '@jellyfin/sdk/lib/websocket'; import loading from '../loading/loading'; import dom from '../../utils/dom'; import recordingHelper from './recordinghelper'; @@ -58,23 +57,23 @@ function fetchData(instance) { }); } -function onTimerChangedExternally(e, apiClient, data) { - const options = this.options; +function onTimerChangedExternally(data, instance) { + const options = instance.options; - if ((data.Id && this.TimerId === data.Id) - || (data.ProgramId && options && options.programId === data.ProgramId) + if ((data?.Id && instance.TimerId === data.Id) + || (data?.ProgramId && options && options.programId === data.ProgramId) ) { - this.refresh(); + instance.refresh(); } } -function onSeriesTimerChangedExternally(e, apiClient, data) { - const options = this.options; +function onSeriesTimerChangedExternally(data, instance) { + const options = instance.options; - if ((data.Id && this.SeriesTimerId === data.Id) - || (data.ProgramId && options && options.programId === data.ProgramId) + if ((data?.Id && instance.SeriesTimerId === data.Id) + || (data?.ProgramId && options && options.programId === data.ProgramId) ) { - this.refresh(); + instance.refresh(); } } @@ -83,17 +82,13 @@ class RecordingEditor { this.options = options; this.embed(); - const timerChangedHandler = onTimerChangedExternally.bind(this); - this.timerChangedHandler = timerChangedHandler; - - Events.on(serverNotifications, 'TimerCreated', timerChangedHandler); - Events.on(serverNotifications, 'TimerCancelled', timerChangedHandler); - - const seriesTimerChangedHandler = onSeriesTimerChangedExternally.bind(this); - this.seriesTimerChangedHandler = seriesTimerChangedHandler; - - Events.on(serverNotifications, 'SeriesTimerCreated', seriesTimerChangedHandler); - Events.on(serverNotifications, 'SeriesTimerCancelled', seriesTimerChangedHandler); + const apiClient = ServerConnections.getApiClient(options.serverId); + this._unsubscribeTimers = [ + apiClient?.subscribe([OutboundWebSocketMessageType.TimerCreated], ({ Data }) => onTimerChangedExternally(Data, this)), + apiClient?.subscribe([OutboundWebSocketMessageType.TimerCancelled], ({ Data }) => onTimerChangedExternally(Data, this)), + apiClient?.subscribe([OutboundWebSocketMessageType.SeriesTimerCreated], ({ Data }) => onSeriesTimerChangedExternally(Data, this)), + apiClient?.subscribe([OutboundWebSocketMessageType.SeriesTimerCancelled], ({ Data }) => onSeriesTimerChangedExternally(Data, this)) + ].filter(Boolean); } embed() { @@ -121,17 +116,8 @@ class RecordingEditor { } destroy() { - const timerChangedHandler = this.timerChangedHandler; - this.timerChangedHandler = null; - - Events.off(serverNotifications, 'TimerCreated', timerChangedHandler); - Events.off(serverNotifications, 'TimerCancelled', timerChangedHandler); - - const seriesTimerChangedHandler = this.seriesTimerChangedHandler; - this.seriesTimerChangedHandler = null; - - Events.off(serverNotifications, 'SeriesTimerCreated', seriesTimerChangedHandler); - Events.off(serverNotifications, 'SeriesTimerCancelled', seriesTimerChangedHandler); + this._unsubscribeTimers?.forEach(unsub => unsub()); + this._unsubscribeTimers = []; } } diff --git a/src/controllers/itemDetails/index.js b/src/controllers/itemDetails/index.js index feca0667f9..aa007bd16b 100644 --- a/src/controllers/itemDetails/index.js +++ b/src/controllers/itemDetails/index.js @@ -39,6 +39,7 @@ import Dashboard from 'utils/dashboard'; import Events from 'utils/events'; import { getItemBackdropImageUrl } from 'utils/jellyfin-apiclient/backdropImage'; import { toApi } from 'utils/jellyfin-apiclient/compat'; +import { OutboundWebSocketMessageType } from '@jellyfin/sdk/lib/websocket'; import 'elements/emby-itemscontainer/emby-itemscontainer'; import 'elements/emby-checkbox/emby-checkbox'; @@ -1992,21 +1993,18 @@ export default function (view, params) { setTrailerButtonVisibility(view, currentItem); } - function onWebSocketMessage(e, data) { - const msg = data; + function onUserDataChanged({ Data }) { const apiClient = getApiClient(); - if (msg.MessageType === 'UserDataChanged' && currentItem && msg.Data.UserId == apiClient.getCurrentUserId()) { - const key = currentItem.UserData.Key; - const userData = msg.Data.UserDataList.filter(function (u) { - return u.Key == key; - })[0]; + if (!currentItem || Data?.UserId != apiClient.getCurrentUserId()) return; - if (userData) { - currentItem.UserData = userData; - reloadPlayButtons(view, currentItem); - autoFocus(view); - } + const key = currentItem.UserData.Key; + const userData = (Data?.UserDataList ?? []).find(u => u.Key == key); + + if (userData) { + currentItem.UserData = userData; + reloadPlayButtons(view, currentItem); + autoFocus(view); } } @@ -2052,14 +2050,18 @@ export default function (view, params) { reload(self, page, params); } - Events.on(apiClient, 'message', onWebSocketMessage); + self._unsubscribeUserData = apiClient.subscribe( + [OutboundWebSocketMessageType.UserDataChanged], + onUserDataChanged + ); Events.on(playbackManager, 'playerchange', onPlayerChange); itemShortcuts.on(view.querySelector('.nameContainer')); }); view.addEventListener('viewbeforehide', function () { itemShortcuts.off(view.querySelector('.nameContainer')); - Events.off(apiClient, 'message', onWebSocketMessage); + self._unsubscribeUserData?.(); + self._unsubscribeUserData = null; Events.off(playbackManager, 'playerchange', onPlayerChange); libraryMenu.setTransparentMenu(false); }); diff --git a/src/controllers/shows/tvrecommended.js b/src/controllers/shows/tvrecommended.js index 6686403246..7558c4cfe7 100644 --- a/src/controllers/shows/tvrecommended.js +++ b/src/controllers/shows/tvrecommended.js @@ -14,6 +14,7 @@ import { LibraryTab } from 'types/libraryTab'; import Dashboard from 'utils/dashboard'; import Events from 'utils/events'; import { CollectionType } from '@jellyfin/sdk/lib/generated-client/models/collection-type'; +import { OutboundWebSocketMessageType } from '@jellyfin/sdk/lib/websocket'; import 'elements/emby-itemscontainer/emby-itemscontainer'; import 'elements/emby-button/emby-button'; @@ -322,10 +323,8 @@ export default function (view, params) { } } - function onWebSocketMessage(e, data) { - const msg = data; - - if (msg.MessageType === 'UserDataChanged' && msg.Data.UserId == ApiClient.getCurrentUserId()) { + function onUserDataChanged({ Data }) { + if (Data?.UserId == ApiClient.getCurrentUserId()) { renderedTabs = []; } } @@ -370,13 +369,14 @@ export default function (view, params) { } Events.on(playbackManager, 'playbackstop', onPlaybackStop); - Events.on(ApiClient, 'message', onWebSocketMessage); + self._unsubscribeUserData = ApiClient.subscribe([OutboundWebSocketMessageType.UserDataChanged], onUserDataChanged); inputManager.on(window, onInputCommand); }); view.addEventListener('viewbeforehide', function () { inputManager.off(window, onInputCommand); Events.off(playbackManager, 'playbackstop', onPlaybackStop); - Events.off(ApiClient, 'message', onWebSocketMessage); + self._unsubscribeUserData?.(); + self._unsubscribeUserData = null; }); view.addEventListener('viewdestroy', function () { tabControllers.forEach(function (t) { diff --git a/src/elements/emby-itemrefreshindicator/RefreshIndicator.tsx b/src/elements/emby-itemrefreshindicator/RefreshIndicator.tsx index 19c824d109..115e9c63fc 100644 --- a/src/elements/emby-itemrefreshindicator/RefreshIndicator.tsx +++ b/src/elements/emby-itemrefreshindicator/RefreshIndicator.tsx @@ -1,7 +1,4 @@ -import { ApiClient } from 'jellyfin-apiclient'; import React, { type FC, useCallback, useEffect, useState } from 'react'; -import Events, { Event } from 'utils/events'; -import serverNotifications from 'scripts/serverNotifications'; import classNames from 'classnames'; import CircularProgress, { diff --git a/src/elements/emby-itemrefreshindicator/emby-itemrefreshindicator.js b/src/elements/emby-itemrefreshindicator/emby-itemrefreshindicator.js index 4287589088..c4ca271cd8 100644 --- a/src/elements/emby-itemrefreshindicator/emby-itemrefreshindicator.js +++ b/src/elements/emby-itemrefreshindicator/emby-itemrefreshindicator.js @@ -1,41 +1,26 @@ import EmbyProgressRing from '../emby-progressring/emby-progressring'; import dom from '../../utils/dom'; -import serverNotifications from '../../scripts/serverNotifications'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import Events from '../../utils/events.ts'; +import { OutboundWebSocketMessageType } from '@jellyfin/sdk/lib/websocket'; import 'webcomponents.js/webcomponents-lite'; -function addNotificationEvent(instance, name, handler) { - const localHandler = handler.bind(instance); - Events.on(serverNotifications, name, localHandler); - instance[name] = localHandler; -} - -function removeNotificationEvent(instance, name) { - const handler = instance[name]; - if (handler) { - Events.off(serverNotifications, name, handler); - instance[name] = null; - } -} - -function onRefreshProgress(e, apiClient, info) { - const indicator = this; - +function onRefreshProgress(indicator, info) { if (!indicator.itemId) { indicator.itemId = dom.parentWithAttribute(indicator, 'data-id').getAttribute('data-id'); } - if (info.ItemId === indicator.itemId) { + if (info?.ItemId === indicator.itemId) { const progress = parseFloat(info.Progress); if (progress && progress < 100) { - this.classList.remove('hide'); + indicator.classList.remove('hide'); } else { - this.classList.add('hide'); + indicator.classList.add('hide'); } - this.setAttribute('data-progress', progress); + indicator.setAttribute('data-progress', progress); } } @@ -47,7 +32,18 @@ EmbyItemRefreshIndicatorPrototype.createdCallback = function () { EmbyProgressRing.createdCallback.call(this); } - addNotificationEvent(this, 'RefreshProgress', onRefreshProgress); + const self = this; + const handler = ({ Data }) => onRefreshProgress(self, Data); + + self._wsApiClientCreatedHandler = (e, newApiClient) => { + const unsub = newApiClient.subscribe([OutboundWebSocketMessageType.RefreshProgress], handler); + if (unsub) self._wsUnsubscribers.push(unsub); + }; + Events.on(ServerConnections, 'apiclientcreated', self._wsApiClientCreatedHandler); + + self._wsUnsubscribers = ServerConnections.getApiClients() + .map(apiClient => apiClient.subscribe([OutboundWebSocketMessageType.RefreshProgress], handler)) + .filter(Boolean); }; EmbyItemRefreshIndicatorPrototype.attachedCallback = function () { @@ -63,7 +59,14 @@ EmbyItemRefreshIndicatorPrototype.detachedCallback = function () { EmbyProgressRing.detachedCallback.call(this); } - removeNotificationEvent(this, 'RefreshProgress'); + this._wsUnsubscribers?.forEach(unsub => unsub()); + this._wsUnsubscribers = []; + + if (this._wsApiClientCreatedHandler) { + Events.off(ServerConnections, 'apiclientcreated', this._wsApiClientCreatedHandler); + this._wsApiClientCreatedHandler = null; + } + this.itemId = null; }; diff --git a/src/elements/emby-ratingbutton/emby-ratingbutton.js b/src/elements/emby-ratingbutton/emby-ratingbutton.js index 40b581c7b5..17321fcdbe 100644 --- a/src/elements/emby-ratingbutton/emby-ratingbutton.js +++ b/src/elements/emby-ratingbutton/emby-ratingbutton.js @@ -1,23 +1,8 @@ -import serverNotifications from '../../scripts/serverNotifications'; import globalize from '../../lib/globalize'; import { ServerConnections } from 'lib/jellyfin-apiclient'; -import Events from '../../utils/events.ts'; +import { OutboundWebSocketMessageType } from '@jellyfin/sdk/lib/websocket'; import EmbyButtonPrototype from '../emby-button/emby-button'; -function addNotificationEvent(instance, name, handler) { - const localHandler = handler.bind(instance); - Events.on(serverNotifications, name, localHandler); - instance[name] = localHandler; -} - -function removeNotificationEvent(instance, name) { - const handler = instance[name]; - if (handler) { - Events.off(serverNotifications, name, handler); - instance[name] = null; - } -} - function showPicker(button, apiClient, itemId, likes, isFavorite) { return apiClient.updateFavoriteStatus(apiClient.getCurrentUserId(), itemId, !isFavorite); } @@ -43,10 +28,10 @@ function onClick() { }); } -function onUserDataChanged(e, apiClient, userData) { - const button = this; - - if (userData.ItemId === button.getAttribute('data-id')) { +function onUserDataChanged({ Data }, button) { + const itemId = button.getAttribute('data-id'); + const userData = (Data?.UserDataList ?? []).find(u => u.ItemId === itemId); + if (userData) { setState(button, userData.Likes, userData.IsFavorite); } } @@ -89,14 +74,21 @@ function setTitle(button, isFavorite) { function clearEvents(button) { button.removeEventListener('click', onClick); - removeNotificationEvent(button, 'UserDataChanged'); + button._unsubscribeUserData?.(); + button._unsubscribeUserData = null; } function bindEvents(button) { clearEvents(button); button.addEventListener('click', onClick); - addNotificationEvent(button, 'UserDataChanged', onUserDataChanged); + + const serverId = button.getAttribute('data-serverid'); + const apiClient = ServerConnections.getApiClient(serverId); + button._unsubscribeUserData = apiClient?.subscribe( + [OutboundWebSocketMessageType.UserDataChanged], + (message) => onUserDataChanged(message, button) + ); } const EmbyRatingButtonPrototype = Object.create(EmbyButtonPrototype); diff --git a/src/lib/jellyfin-apiclient/ServerConnections.js b/src/lib/jellyfin-apiclient/ServerConnections.js index 17e36eedcd..c813d06f22 100644 --- a/src/lib/jellyfin-apiclient/ServerConnections.js +++ b/src/lib/jellyfin-apiclient/ServerConnections.js @@ -50,6 +50,16 @@ class ServerConnections extends ConnectionManager { Events.on(this, 'apiclientcreated', (_e, apiClient) => { apiClient.getMaxBandwidth = getMaxBandwidth; apiClient.normalizeImageOptions = normalizeImageOptions; + + // Bridge the SDK websocket subscribe API onto the legacy ApiClient. + // The SDK Api is lazily created on first use so the access token is available. + let _sdkApi = null; + apiClient.subscribe = (messageTypes, onMessage) => { + if (!_sdkApi) { + _sdkApi = toApi(apiClient); + } + return _sdkApi.subscribe(messageTypes, onMessage); + }; }); } From a1fe57bed63775207f943e25a9e510e8380a72b5 Mon Sep 17 00:00:00 2001 From: Violet Caulfield <42452695+anultravioletaurora@users.noreply.github.com> Date: Fri, 17 Apr 2026 07:06:30 -0500 Subject: [PATCH 125/695] convert remaining legacy WS subscriptions --- src/components/notifications/notifications.js | 101 +++++++++--------- .../emby-itemscontainer.js | 82 +++++++------- .../emby-playstatebutton.js | 34 +++--- .../jellyfin-apiclient/ServerConnections.js | 4 +- src/plugins/sessionPlayer/plugin.js | 25 ++--- 5 files changed, 119 insertions(+), 127 deletions(-) diff --git a/src/components/notifications/notifications.js b/src/components/notifications/notifications.js index 9edd0ec184..ec3cd54402 100644 --- a/src/components/notifications/notifications.js +++ b/src/components/notifications/notifications.js @@ -1,9 +1,9 @@ -import serverNotifications from '../../scripts/serverNotifications'; import { playbackManager } from '../playback/playbackmanager'; import Events from '../../utils/events.ts'; import globalize from '../../lib/globalize'; import { ServerConnections } from 'lib/jellyfin-apiclient'; import { getItems } from '../../utils/jellyfin-apiclient/getItems.ts'; +import { OutboundWebSocketMessageType } from '@jellyfin/sdk/lib/websocket'; import NotificationIcon from './notificationicon.png'; @@ -216,60 +216,65 @@ function showPackageInstallNotification(apiClient, installation, status) { }); } -Events.on(serverNotifications, 'LibraryChanged', function (e, apiClient, data) { - onLibraryChanged(data, apiClient); -}); +function subscribeToApiClient(apiClient) { + apiClient.subscribe([OutboundWebSocketMessageType.LibraryChanged], ({ Data }) => { + onLibraryChanged(Data, apiClient); + }); -Events.on(serverNotifications, 'PackageInstallationCompleted', function (e, apiClient, data) { - showPackageInstallNotification(apiClient, data, 'completed'); -}); + apiClient.subscribe([OutboundWebSocketMessageType.PackageInstallationCompleted], ({ Data }) => { + showPackageInstallNotification(apiClient, Data, 'completed'); + }); -Events.on(serverNotifications, 'PackageInstallationFailed', function (e, apiClient, data) { - showPackageInstallNotification(apiClient, data, 'failed'); -}); + apiClient.subscribe([OutboundWebSocketMessageType.PackageInstallationFailed], ({ Data }) => { + showPackageInstallNotification(apiClient, Data, 'failed'); + }); -Events.on(serverNotifications, 'PackageInstallationCancelled', function (e, apiClient, data) { - showPackageInstallNotification(apiClient, data, 'cancelled'); -}); + apiClient.subscribe([OutboundWebSocketMessageType.PackageInstallationCancelled], ({ Data }) => { + showPackageInstallNotification(apiClient, Data, 'cancelled'); + }); -Events.on(serverNotifications, 'PackageInstalling', function (e, apiClient, data) { - showPackageInstallNotification(apiClient, data, 'progress'); -}); + apiClient.subscribe([OutboundWebSocketMessageType.PackageInstalling], ({ Data }) => { + showPackageInstallNotification(apiClient, Data, 'progress'); + }); -Events.on(serverNotifications, 'ServerShuttingDown', function (e, apiClient) { - const serverId = apiClient.serverInfo().Id; - const notification = { - tag: 'restart' + serverId, - title: globalize.translate('ServerNameIsShuttingDown', apiClient.serverInfo().Name) - }; - showNotification(notification, 0, apiClient); -}); + apiClient.subscribe([OutboundWebSocketMessageType.ServerShuttingDown], () => { + const serverId = apiClient.serverInfo().Id; + const notification = { + tag: 'restart' + serverId, + title: globalize.translate('ServerNameIsShuttingDown', apiClient.serverInfo().Name) + }; + showNotification(notification, 0, apiClient); + }); -Events.on(serverNotifications, 'ServerRestarting', function (e, apiClient) { - const serverId = apiClient.serverInfo().Id; - const notification = { - tag: 'restart' + serverId, - title: globalize.translate('ServerNameIsRestarting', apiClient.serverInfo().Name) - }; - showNotification(notification, 0, apiClient); -}); + apiClient.subscribe([OutboundWebSocketMessageType.ServerRestarting], () => { + const serverId = apiClient.serverInfo().Id; + const notification = { + tag: 'restart' + serverId, + title: globalize.translate('ServerNameIsRestarting', apiClient.serverInfo().Name) + }; + showNotification(notification, 0, apiClient); + }); -Events.on(serverNotifications, 'RestartRequired', function (e, apiClient) { - const serverId = apiClient.serverInfo().Id; - const notification = { - tag: 'restart' + serverId, - title: globalize.translate('PleaseRestartServerName', apiClient.serverInfo().Name) - }; + apiClient.subscribe([OutboundWebSocketMessageType.RestartRequired], () => { + const serverId = apiClient.serverInfo().Id; + const notification = { + tag: 'restart' + serverId, + title: globalize.translate('PleaseRestartServerName', apiClient.serverInfo().Name) + }; - notification.actions = - [ - { - action: 'restart', - title: globalize.translate('Restart'), - icon: NotificationIcon - } - ]; + notification.actions = + [ + { + action: 'restart', + title: globalize.translate('Restart'), + icon: NotificationIcon + } + ]; - showNotification(notification, 0, apiClient); -}); + showNotification(notification, 0, apiClient); + }); +} + +ServerConnections.getApiClients().forEach(subscribeToApiClient); +Events.on(ServerConnections, 'apiclientcreated', (e, newApiClient) => subscribeToApiClient(newApiClient)); diff --git a/src/elements/emby-itemscontainer/emby-itemscontainer.js b/src/elements/emby-itemscontainer/emby-itemscontainer.js index 8cff9b8c3f..4dcf17169a 100644 --- a/src/elements/emby-itemscontainer/emby-itemscontainer.js +++ b/src/elements/emby-itemscontainer/emby-itemscontainer.js @@ -11,8 +11,8 @@ import dom from '../../utils/dom'; import loading from '../../components/loading/loading'; import focusManager from '../../components/focusManager'; import { ServerConnections } from 'lib/jellyfin-apiclient'; -import serverNotifications from '../../scripts/serverNotifications'; import Events from '../../utils/events.ts'; +import { OutboundWebSocketMessageType } from '@jellyfin/sdk/lib/websocket'; const ItemsContainerPrototype = Object.create(HTMLDivElement.prototype); @@ -142,11 +142,11 @@ ItemsContainerPrototype.enableDragReordering = function (enabled) { }); }; -function onUserDataChanged(e, apiClient, userData) { - const itemsContainer = this; - +function onUserDataChanged({ Data }, itemsContainer) { import('../../components/cardbuilder/cardBuilder').then((cardBuilder) => { - cardBuilder.onUserDataChanged(userData, itemsContainer); + for (const userData of Data?.UserDataList ?? []) { + cardBuilder.onUserDataChanged(userData, itemsContainer); + } }); const eventsToMonitor = getEventsToMonitor(itemsContainer); @@ -168,74 +168,67 @@ function getEventsToMonitor(itemsContainer) { return []; } -function onTimerCreated(e, apiClient, data) { - const itemsContainer = this; - +function onTimerCreated({ Data }, itemsContainer) { if (getEventsToMonitor(itemsContainer).indexOf('timers') !== -1) { itemsContainer.notifyRefreshNeeded(); return; } - const programId = data.ProgramId; + const programId = Data?.ProgramId; // This could be null, not supported by all tv providers - const newTimerId = data.Id; + const newTimerId = Data?.Id; import('../../components/cardbuilder/cardBuilder').then((cardBuilder) => { cardBuilder.onTimerCreated(programId, newTimerId, itemsContainer); }); } -function onSeriesTimerCreated() { - const itemsContainer = this; +function onSeriesTimerCreated(_, itemsContainer) { if (getEventsToMonitor(itemsContainer).indexOf('seriestimers') !== -1) { itemsContainer.notifyRefreshNeeded(); } } -function onTimerCancelled(e, apiClient, data) { - const itemsContainer = this; +function onTimerCancelled({ Data }, itemsContainer) { if (getEventsToMonitor(itemsContainer).indexOf('timers') !== -1) { itemsContainer.notifyRefreshNeeded(); return; } import('../../components/cardbuilder/cardBuilder').then((cardBuilder) => { - cardBuilder.onTimerCancelled(data.Id, itemsContainer); + cardBuilder.onTimerCancelled(Data?.Id, itemsContainer); }); } -function onSeriesTimerCancelled(e, apiClient, data) { - const itemsContainer = this; +function onSeriesTimerCancelled({ Data }, itemsContainer) { if (getEventsToMonitor(itemsContainer).indexOf('seriestimers') !== -1) { itemsContainer.notifyRefreshNeeded(); return; } import('../../components/cardbuilder/cardBuilder').then((cardBuilder) => { - cardBuilder.onSeriesTimerCancelled(data.Id, itemsContainer); + cardBuilder.onSeriesTimerCancelled(Data?.Id, itemsContainer); }); } -function onLibraryChanged(e, apiClient, data) { - const itemsContainer = this; - +function onLibraryChanged({ Data }, itemsContainer) { const eventsToMonitor = getEventsToMonitor(itemsContainer); if (eventsToMonitor.indexOf('seriestimers') !== -1 || eventsToMonitor.indexOf('timers') !== -1) { // yes this is an assumption return; } - const itemsAdded = data.ItemsAdded || []; - const itemsRemoved = data.ItemsRemoved || []; + const itemsAdded = Data?.ItemsAdded ?? []; + const itemsRemoved = Data?.ItemsRemoved ?? []; if (!itemsAdded.length && !itemsRemoved.length) { return; } const parentId = itemsContainer.getAttribute('data-parentid'); if (parentId) { - const foldersAddedTo = data.FoldersAddedTo || []; - const foldersRemovedFrom = data.FoldersRemovedFrom || []; - const collectionFolders = data.CollectionFolders || []; + const foldersAddedTo = Data?.FoldersAddedTo ?? []; + const foldersRemovedFrom = Data?.FoldersRemovedFrom ?? []; + const collectionFolders = Data?.CollectionFolders ?? []; if (foldersAddedTo.indexOf(parentId) === -1 && foldersRemovedFrom.indexOf(parentId) === -1 && collectionFolders.indexOf(parentId) === -1) { return; @@ -263,7 +256,6 @@ function onPlaybackStopped(e, stopInfo) { function addNotificationEvent(instance, name, handler, owner) { const localHandler = handler.bind(instance); - owner = owner || serverNotifications; Events.on(owner, name, localHandler); instance['event_' + name] = localHandler; } @@ -271,7 +263,6 @@ function addNotificationEvent(instance, name, handler, owner) { function removeNotificationEvent(instance, name, owner) { const handler = instance['event_' + name]; if (handler) { - owner = owner || serverNotifications; Events.off(owner, name, handler); instance['event_' + name] = null; } @@ -300,12 +291,22 @@ ItemsContainerPrototype.attachedCallback = function () { itemShortcuts.on(this, getShortcutOptions()); - addNotificationEvent(this, 'UserDataChanged', onUserDataChanged); - addNotificationEvent(this, 'TimerCreated', onTimerCreated); - addNotificationEvent(this, 'SeriesTimerCreated', onSeriesTimerCreated); - addNotificationEvent(this, 'TimerCancelled', onTimerCancelled); - addNotificationEvent(this, 'SeriesTimerCancelled', onSeriesTimerCancelled); - addNotificationEvent(this, 'LibraryChanged', onLibraryChanged); + const self = this; + const subscribeToApiClient = (apiClient) => [ + apiClient.subscribe([OutboundWebSocketMessageType.UserDataChanged], (msg) => onUserDataChanged(msg, self)), + apiClient.subscribe([OutboundWebSocketMessageType.TimerCreated], (msg) => onTimerCreated(msg, self)), + apiClient.subscribe([OutboundWebSocketMessageType.SeriesTimerCreated], (msg) => onSeriesTimerCreated(msg, self)), + apiClient.subscribe([OutboundWebSocketMessageType.TimerCancelled], (msg) => onTimerCancelled(msg, self)), + apiClient.subscribe([OutboundWebSocketMessageType.SeriesTimerCancelled], (msg) => onSeriesTimerCancelled(msg, self)), + apiClient.subscribe([OutboundWebSocketMessageType.LibraryChanged], (msg) => onLibraryChanged(msg, self)), + ].filter(Boolean); + + this._wsApiClientCreatedHandler = (e, newApiClient) => { + this._wsUnsubscribers = (this._wsUnsubscribers ?? []).concat(subscribeToApiClient(newApiClient)); + }; + Events.on(ServerConnections, 'apiclientcreated', this._wsApiClientCreatedHandler); + this._wsUnsubscribers = ServerConnections.getApiClients().flatMap(subscribeToApiClient); + addNotificationEvent(this, 'playbackstop', onPlaybackStopped, playbackManager); if (this.getAttribute('data-dragreorder') === 'true') { @@ -324,12 +325,13 @@ ItemsContainerPrototype.detachedCallback = function () { itemShortcuts.off(this, getShortcutOptions()); - removeNotificationEvent(this, 'UserDataChanged'); - removeNotificationEvent(this, 'TimerCreated'); - removeNotificationEvent(this, 'SeriesTimerCreated'); - removeNotificationEvent(this, 'TimerCancelled'); - removeNotificationEvent(this, 'SeriesTimerCancelled'); - removeNotificationEvent(this, 'LibraryChanged'); + this._wsUnsubscribers?.forEach(unsub => unsub()); + this._wsUnsubscribers = []; + if (this._wsApiClientCreatedHandler) { + Events.off(ServerConnections, 'apiclientcreated', this._wsApiClientCreatedHandler); + this._wsApiClientCreatedHandler = null; + } + removeNotificationEvent(this, 'playbackstop', playbackManager); this.fetchData = null; diff --git a/src/elements/emby-playstatebutton/emby-playstatebutton.js b/src/elements/emby-playstatebutton/emby-playstatebutton.js index e9d019583e..c520703ce3 100644 --- a/src/elements/emby-playstatebutton/emby-playstatebutton.js +++ b/src/elements/emby-playstatebutton/emby-playstatebutton.js @@ -1,23 +1,8 @@ -import serverNotifications from '../../scripts/serverNotifications'; import globalize from '../../lib/globalize'; import { ServerConnections } from 'lib/jellyfin-apiclient'; -import Events from '../../utils/events.ts'; +import { OutboundWebSocketMessageType } from '@jellyfin/sdk/lib/websocket'; import EmbyButtonPrototype from '../../elements/emby-button/emby-button'; -function addNotificationEvent(instance, name, handler) { - const localHandler = handler.bind(instance); - Events.on(serverNotifications, name, localHandler); - instance[name] = localHandler; -} - -function removeNotificationEvent(instance, name) { - const handler = instance[name]; - if (handler) { - Events.off(serverNotifications, name, handler); - instance[name] = null; - } -} - function onClick() { const button = this; const id = button.getAttribute('data-id'); @@ -33,9 +18,10 @@ function onClick() { } } -function onUserDataChanged(e, apiClient, userData) { - const button = this; - if (userData.ItemId === button.getAttribute('data-id')) { +function onUserDataChanged({ Data }, button) { + const itemId = button.getAttribute('data-id'); + const userData = (Data?.UserDataList ?? []).find(u => u.ItemId === itemId); + if (userData) { setState(button, userData.Played); } } @@ -83,14 +69,20 @@ function setTitle(button, itemType, played) { function clearEvents(button) { button.removeEventListener('click', onClick); - removeNotificationEvent(button, 'UserDataChanged'); + button._unsubscribeUserData?.(); + button._unsubscribeUserData = null; } function bindEvents(button) { clearEvents(button); button.addEventListener('click', onClick); - addNotificationEvent(button, 'UserDataChanged', onUserDataChanged); + const serverId = button.getAttribute('data-serverid'); + const apiClient = ServerConnections.getApiClient(serverId); + button._unsubscribeUserData = apiClient?.subscribe( + [OutboundWebSocketMessageType.UserDataChanged], + (msg) => onUserDataChanged(msg, button) + ); } const EmbyPlaystateButtonPrototype = Object.create(EmbyButtonPrototype); diff --git a/src/lib/jellyfin-apiclient/ServerConnections.js b/src/lib/jellyfin-apiclient/ServerConnections.js index c813d06f22..abe70923bc 100644 --- a/src/lib/jellyfin-apiclient/ServerConnections.js +++ b/src/lib/jellyfin-apiclient/ServerConnections.js @@ -54,11 +54,11 @@ class ServerConnections extends ConnectionManager { // Bridge the SDK websocket subscribe API onto the legacy ApiClient. // The SDK Api is lazily created on first use so the access token is available. let _sdkApi = null; - apiClient.subscribe = (messageTypes, onMessage) => { + apiClient.subscribe = (messageTypes, onMessage, subscriptionIntervals) => { if (!_sdkApi) { _sdkApi = toApi(apiClient); } - return _sdkApi.subscribe(messageTypes, onMessage); + return _sdkApi.subscribe(messageTypes, onMessage, subscriptionIntervals); }; }); } diff --git a/src/plugins/sessionPlayer/plugin.js b/src/plugins/sessionPlayer/plugin.js index 40681ae81b..68a58bc2f3 100644 --- a/src/plugins/sessionPlayer/plugin.js +++ b/src/plugins/sessionPlayer/plugin.js @@ -1,9 +1,9 @@ import { playbackManager } from '../../components/playback/playbackmanager'; import { ServerConnections } from 'lib/jellyfin-apiclient'; -import serverNotifications from '../../scripts/serverNotifications'; import { PluginType } from '../../types/plugin.ts'; import Events from '../../utils/events.ts'; import isEqual from 'lodash-es/isEqual'; +import { OutboundWebSocketMessageType, PeriodicListenerInterval } from '@jellyfin/sdk/lib/websocket'; function getActivePlayerId() { const info = playbackManager.getPlayerInfo(); @@ -77,11 +77,9 @@ function sendCommandByName(instance, name, options) { function unsubscribeFromPlayerUpdates(instance) { instance.isUpdating = true; - const apiClient = getCurrentApiClient(instance); - apiClient.sendMessage('SessionsStop'); - if (instance.pollInterval) { - clearInterval(instance.pollInterval); - instance.pollInterval = null; + if (instance._unsubscribeSessions) { + instance._unsubscribeSessions(); + instance._unsubscribeSessions = null; } } @@ -245,12 +243,11 @@ function subscribeToPlayerUpdates(instance) { instance.isUpdating = true; const apiClient = getCurrentApiClient(instance); - apiClient.sendMessage('SessionsStart', '100,800'); - if (instance.pollInterval) { - clearInterval(instance.pollInterval); - instance.pollInterval = null; - } - instance.pollInterval = setInterval(onPollIntervalFired.bind(instance), 5000); + instance._unsubscribeSessions = apiClient.subscribe( + [OutboundWebSocketMessageType.Sessions], + ({ Data }) => processUpdatedSessions(instance, Data ?? [], apiClient), + { [OutboundWebSocketMessageType.Sessions]: new PeriodicListenerInterval(100, 800) } + ); } function normalizeImages(state, apiClient) { @@ -288,10 +285,6 @@ class SessionPlayer { this.playlist = []; this.isPlaylistRendered = true; this.isUpdatingPlaylist = false; - - Events.on(serverNotifications, 'Sessions', function (e, apiClient, data) { - processUpdatedSessions(self, data, apiClient); - }); } beginPlayerUpdates() { From a9cab2112ab50c2909b04a038f323fb693db0af4 Mon Sep 17 00:00:00 2001 From: Violet Caulfield <42452695+anultravioletaurora@users.noreply.github.com> Date: Fri, 17 Apr 2026 07:31:25 -0500 Subject: [PATCH 126/695] remove unused legacy WS codepaths --- src/plugins/sessionPlayer/plugin.js | 10 ---------- src/scripts/serverNotifications.js | 14 -------------- 2 files changed, 24 deletions(-) diff --git a/src/plugins/sessionPlayer/plugin.js b/src/plugins/sessionPlayer/plugin.js index 68a58bc2f3..251ef9e553 100644 --- a/src/plugins/sessionPlayer/plugin.js +++ b/src/plugins/sessionPlayer/plugin.js @@ -229,16 +229,6 @@ function getChangedEvents(oldPlayerData, newPlayerData) { return names; } -function onPollIntervalFired() { - const instance = this; - const apiClient = getCurrentApiClient(instance); - if (!apiClient.isMessageChannelOpen()) { - apiClient.getSessions().then(function (sessions) { - processUpdatedSessions(instance, sessions, apiClient); - }); - } -} - function subscribeToPlayerUpdates(instance) { instance.isUpdating = true; diff --git a/src/scripts/serverNotifications.js b/src/scripts/serverNotifications.js index d3585c51f8..d4ef421a6c 100644 --- a/src/scripts/serverNotifications.js +++ b/src/scripts/serverNotifications.js @@ -9,8 +9,6 @@ import inputManager from 'scripts/inputManager'; import Events from 'utils/events.ts'; import { PluginType } from 'types/plugin.ts'; -const serverNotifications = {}; - function notifyApp() { inputManager.notify(); } @@ -186,18 +184,10 @@ function onMessageReceived(e, msg) { } else if (msg.MessageType === 'GeneralCommand') { const cmd = msg.Data; processGeneralCommand(cmd, apiClient); - } else if (msg.MessageType === 'UserDataChanged') { - if (msg.Data.UserId === apiClient.getCurrentUserId()) { - for (let i = 0, length = msg.Data.UserDataList.length; i < length; i++) { - Events.trigger(serverNotifications, 'UserDataChanged', [apiClient, msg.Data.UserDataList[i]]); - } - } } else if (msg.MessageType === 'SyncPlayCommand') { SyncPlay?.Manager.processCommand(msg.Data, apiClient); } else if (msg.MessageType === 'SyncPlayGroupUpdate') { SyncPlay?.Manager.processGroupUpdate(msg.Data, apiClient); - } else { - Events.trigger(serverNotifications, msg.MessageType, [apiClient, msg.Data]); } } function bindEvents(apiClient) { @@ -209,7 +199,3 @@ ServerConnections.getApiClients().forEach(bindEvents); Events.on(ServerConnections, 'apiclientcreated', function (e, newApiClient) { bindEvents(newApiClient); }); - -window.ServerNotifications = serverNotifications; - -export default serverNotifications; From 1cd4e7b848658a7243602135e6a91fd47837bbce Mon Sep 17 00:00:00 2001 From: Violet Caulfield <42452695+anultravioletaurora@users.noreply.github.com> Date: Fri, 17 Apr 2026 07:37:01 -0500 Subject: [PATCH 127/695] remove legacy "ensureWebSocket" usage --- src/index.jsx | 5 ----- src/lib/jellyfin-apiclient/connectionManager.js | 6 ------ 2 files changed, 11 deletions(-) diff --git a/src/index.jsx b/src/index.jsx index 6a2a3fbcbd..379a35fa58 100644 --- a/src/index.jsx +++ b/src/index.jsx @@ -95,11 +95,6 @@ build: ${__JF_BUILD_VERSION__}`); // Load frontend plugins await loadPlugins(); - // Establish the websocket connection - Events.on(appHost, 'resume', () => { - ServerConnections.currentApiClient()?.ensureWebSocket(); - }); - // Register API request error handlers ServerConnections.getApiClients().forEach(apiClient => { Events.off(apiClient, 'requestfail', appRouter.onRequestFail); diff --git a/src/lib/jellyfin-apiclient/connectionManager.js b/src/lib/jellyfin-apiclient/connectionManager.js index 14d6114291..54906ff8c8 100644 --- a/src/lib/jellyfin-apiclient/connectionManager.js +++ b/src/lib/jellyfin-apiclient/connectionManager.js @@ -204,12 +204,6 @@ export default class ConnectionManager { apiClient.reportCapabilities(capabilities); } apiClient.enableAutomaticBitrateDetection = options.enableAutomaticBitrateDetection; - - if (options.enableWebSocket !== false) { - console.log('calling apiClient.ensureWebSocket'); - - apiClient.ensureWebSocket(); - } } function onLocalUserSignIn(server, serverUrl, user) { From 51664d6bde2409522de41b187612b5e8f2971db7 Mon Sep 17 00:00:00 2001 From: Violet Caulfield <42452695+anultravioletaurora@users.noreply.github.com> Date: Fri, 17 Apr 2026 08:09:27 -0500 Subject: [PATCH 128/695] fixing the code that smells "smelly" --- .../dashboard/features/sessions/hooks/useLiveSessions.ts | 4 ++-- src/apps/dashboard/features/tasks/hooks/useLiveTasks.ts | 2 +- src/components/guide/guide.js | 4 +++- src/components/recordingcreator/recordingfields.js | 4 +++- src/elements/emby-itemrefreshindicator/RefreshIndicator.tsx | 2 +- .../emby-itemrefreshindicator/emby-itemrefreshindicator.js | 4 +++- src/elements/emby-itemscontainer/ItemsContainer.tsx | 6 ++++-- src/elements/emby-itemscontainer/emby-itemscontainer.js | 6 ++++-- src/plugins/sessionPlayer/plugin.js | 2 -- src/scripts/taskbutton.js | 5 ++--- 10 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/apps/dashboard/features/sessions/hooks/useLiveSessions.ts b/src/apps/dashboard/features/sessions/hooks/useLiveSessions.ts index 0903edcbc0..1ad4c0d4c8 100644 --- a/src/apps/dashboard/features/sessions/hooks/useLiveSessions.ts +++ b/src/apps/dashboard/features/sessions/hooks/useLiveSessions.ts @@ -38,8 +38,8 @@ const useLiveSessions = () => { useEffect(() => { // Return function for unsubscribing return api?.subscribe([OutboundWebSocketMessageType.Sessions], ({ Data }) => { - queryClient.setQueryData([ QUERY_KEY, QUERY_PARAMS ], updateSessions(Data ?? [])) - }) + queryClient.setQueryData([ QUERY_KEY, QUERY_PARAMS ], updateSessions(Data ?? [])); + }); }, []); return sessionsQuery; diff --git a/src/apps/dashboard/features/tasks/hooks/useLiveTasks.ts b/src/apps/dashboard/features/tasks/hooks/useLiveTasks.ts index 54d61484be..2fc10efeff 100644 --- a/src/apps/dashboard/features/tasks/hooks/useLiveTasks.ts +++ b/src/apps/dashboard/features/tasks/hooks/useLiveTasks.ts @@ -11,7 +11,7 @@ const useLiveTasks = (params: ScheduledTasksApiGetTasksRequest) => { useEffect(() => { return api?.subscribe([OutboundWebSocketMessageType.ScheduledTasksInfo], ({ Data }) => { - queryClient.setQueryData([ QUERY_KEY ], Data ?? []) + queryClient.setQueryData([ QUERY_KEY ], Data ?? []); }); }, []); diff --git a/src/components/guide/guide.js b/src/components/guide/guide.js index 2127bc2e5f..a16e12aeb4 100644 --- a/src/components/guide/guide.js +++ b/src/components/guide/guide.js @@ -172,7 +172,9 @@ function Guide(options) { stopAutoRefresh(); if (self._wsUnsubscribers) { - self._wsUnsubscribers.forEach(unsub => unsub()); + self._wsUnsubscribers.forEach(unsub => { + unsub() + }); self._wsUnsubscribers = []; } diff --git a/src/components/recordingcreator/recordingfields.js b/src/components/recordingcreator/recordingfields.js index 3703a2c3ca..92daa9b86a 100644 --- a/src/components/recordingcreator/recordingfields.js +++ b/src/components/recordingcreator/recordingfields.js @@ -116,7 +116,9 @@ class RecordingEditor { } destroy() { - this._unsubscribeTimers?.forEach(unsub => unsub()); + this._unsubscribeTimers?.forEach(unsub => { + unsub() + }); this._unsubscribeTimers = []; } } diff --git a/src/elements/emby-itemrefreshindicator/RefreshIndicator.tsx b/src/elements/emby-itemrefreshindicator/RefreshIndicator.tsx index 115e9c63fc..9330fc7c87 100644 --- a/src/elements/emby-itemrefreshindicator/RefreshIndicator.tsx +++ b/src/elements/emby-itemrefreshindicator/RefreshIndicator.tsx @@ -52,7 +52,7 @@ const RefreshIndicator: FC = ({ item, className }) => { const [showProgressBar, setShowProgressBar] = useState(!!item.RefreshProgress); const [progress, setProgress] = useState(item.RefreshProgress || 0); - const { api } = useApi() + const { api } = useApi(); const onRefreshProgress = useCallback(({ Data }: RefreshProgressMessage) => { if (Data?.ItemId === item?.Id) { diff --git a/src/elements/emby-itemrefreshindicator/emby-itemrefreshindicator.js b/src/elements/emby-itemrefreshindicator/emby-itemrefreshindicator.js index c4ca271cd8..ff798b2855 100644 --- a/src/elements/emby-itemrefreshindicator/emby-itemrefreshindicator.js +++ b/src/elements/emby-itemrefreshindicator/emby-itemrefreshindicator.js @@ -59,7 +59,9 @@ EmbyItemRefreshIndicatorPrototype.detachedCallback = function () { EmbyProgressRing.detachedCallback.call(this); } - this._wsUnsubscribers?.forEach(unsub => unsub()); + this._wsUnsubscribers?.forEach(unsub => { + unsub(); + }); this._wsUnsubscribers = []; if (this._wsApiClientCreatedHandler) { diff --git a/src/elements/emby-itemscontainer/ItemsContainer.tsx b/src/elements/emby-itemscontainer/ItemsContainer.tsx index 5489e295dd..95c83e5640 100644 --- a/src/elements/emby-itemscontainer/ItemsContainer.tsx +++ b/src/elements/emby-itemscontainer/ItemsContainer.tsx @@ -1,6 +1,6 @@ import type { LibraryUpdateInfo } from '@jellyfin/sdk/lib/generated-client/models/library-update-info'; import { MediaType } from '@jellyfin/sdk/lib/generated-client/models/media-type'; -import { OutboundWebSocketMessageType, SocketMessageHandler } from '@jellyfin/sdk/lib/websocket'; +import { OutboundWebSocketMessageType } from '@jellyfin/sdk/lib/websocket'; import React, { type FC, type PropsWithChildren, useCallback, useEffect, useRef } from 'react'; import classNames from 'classnames'; import Box from '@mui/material/Box'; @@ -390,7 +390,9 @@ const ItemsContainer: FC> = ({ itemShortcuts.off(itemsContainer, getShortcutOptions()); // Unsubscribe from websocket messages - unsubscribeRef.current.forEach(unsub => unsub()); + unsubscribeRef.current.forEach(unsub => { + unsub(); + }); unsubscribeRef.current = []; Events.off(playbackManager, 'playbackstop', onPlaybackStopped); diff --git a/src/elements/emby-itemscontainer/emby-itemscontainer.js b/src/elements/emby-itemscontainer/emby-itemscontainer.js index 4dcf17169a..00718a0e46 100644 --- a/src/elements/emby-itemscontainer/emby-itemscontainer.js +++ b/src/elements/emby-itemscontainer/emby-itemscontainer.js @@ -298,7 +298,7 @@ ItemsContainerPrototype.attachedCallback = function () { apiClient.subscribe([OutboundWebSocketMessageType.SeriesTimerCreated], (msg) => onSeriesTimerCreated(msg, self)), apiClient.subscribe([OutboundWebSocketMessageType.TimerCancelled], (msg) => onTimerCancelled(msg, self)), apiClient.subscribe([OutboundWebSocketMessageType.SeriesTimerCancelled], (msg) => onSeriesTimerCancelled(msg, self)), - apiClient.subscribe([OutboundWebSocketMessageType.LibraryChanged], (msg) => onLibraryChanged(msg, self)), + apiClient.subscribe([OutboundWebSocketMessageType.LibraryChanged], (msg) => onLibraryChanged(msg, self)) ].filter(Boolean); this._wsApiClientCreatedHandler = (e, newApiClient) => { @@ -325,7 +325,9 @@ ItemsContainerPrototype.detachedCallback = function () { itemShortcuts.off(this, getShortcutOptions()); - this._wsUnsubscribers?.forEach(unsub => unsub()); + this._wsUnsubscribers?.forEach(unsub => { + unsub(); + }); this._wsUnsubscribers = []; if (this._wsApiClientCreatedHandler) { Events.off(ServerConnections, 'apiclientcreated', this._wsApiClientCreatedHandler); diff --git a/src/plugins/sessionPlayer/plugin.js b/src/plugins/sessionPlayer/plugin.js index 251ef9e553..1dd3d2f6e2 100644 --- a/src/plugins/sessionPlayer/plugin.js +++ b/src/plugins/sessionPlayer/plugin.js @@ -265,8 +265,6 @@ class SessionPlayer { lastPlaylistItemId; constructor() { - const self = this; - this.name = 'Remote Control'; this.type = PluginType.MediaPlayer; this.isLocalPlayer = false; diff --git a/src/scripts/taskbutton.js b/src/scripts/taskbutton.js index cbf845b708..40a428a6de 100644 --- a/src/scripts/taskbutton.js +++ b/src/scripts/taskbutton.js @@ -58,7 +58,7 @@ function taskbutton(options) { } function onScheduledTaskMessageConfirmed(id) { - ServerConnections.getApiClient(serverId).startScheduledTask(id).then(pollTasks); + ServerConnections.getApiClient(serverId).startScheduledTask(id); } function onButtonClick() { @@ -74,7 +74,7 @@ function taskbutton(options) { let unsubscribe; const button = options.button; - const serverId = ApiClient.serverId(); + const serverId = ServerConnections.currentApiClient()?.serverId() || ''; function subscribe() { const apiClient = ServerConnections.getApiClient(serverId); @@ -104,7 +104,6 @@ function taskbutton(options) { stopSubscription(); } else { button.addEventListener('click', onButtonClick); - pollTasks(); startSubscription(); } } From d0df6a4f2d4820d8ff9c685ac63d7da878c427be Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Fri, 17 Apr 2026 10:55:12 -0400 Subject: [PATCH 129/695] Cleanup removed api members --- src/apiclient.d.ts | 3 --- src/components/homesections/sections/nextUp.ts | 1 - 2 files changed, 4 deletions(-) diff --git a/src/apiclient.d.ts b/src/apiclient.d.ts index 30fed07ed4..ea4d6a0195 100644 --- a/src/apiclient.d.ts +++ b/src/apiclient.d.ts @@ -166,7 +166,6 @@ declare module 'jellyfin-apiclient' { getMusicGenres(userId: string, options?: any): Promise; getNamedConfiguration(name: string): Promise; getNetworkDevices(): Promise; - getNetworkShares(path: string): Promise; getNewLiveTvTimerDefaults(options?: any): Promise; getNextUpEpisodes(options?: any): Promise; getNotificationSummary(userId: string): Promise; @@ -256,7 +255,6 @@ declare module 'jellyfin-apiclient' { requestSyncPlaySetRepeatMode(options?: SetRepeatModeRequestDto): Promise; requestSyncPlaySetShuffleMode(options?: SetShuffleModeRequestDto): Promise; requestSyncPlayUnpause(): Promise; - resetEasyPassword(userId: string): Promise; resetLiveTvTuner(id: string): Promise; resetUserPassword(userId: string): Promise; restartServer(): Promise; @@ -281,7 +279,6 @@ declare module 'jellyfin-apiclient' { uninstallPluginByVersion(id: string, version: string): Promise; uninstallPlugin(id: string): Promise; updateDisplayPreferences(id: string, obj: DisplayPreferencesDto, userId: string, app: string): Promise; - updateEasyPassword(userId: string, newPassword: string): Promise; updateFavoriteStatus(userId: string, itemId: string, isFavorite: boolean): Promise; updateItemImageIndex(itemId: string, imageType: ImageType, imageIndex: number, newIndex: number): Promise; updateItem(item: BaseItemDto): Promise; diff --git a/src/components/homesections/sections/nextUp.ts b/src/components/homesections/sections/nextUp.ts index 9b3a0faca0..1f8840bdb7 100644 --- a/src/components/homesections/sections/nextUp.ts +++ b/src/components/homesections/sections/nextUp.ts @@ -27,7 +27,6 @@ function getNextUpFetchFn( ImageTypeLimit: 1, EnableImageTypes: 'Primary,Backdrop,Banner,Thumb', EnableTotalRecordCount: false, - DisableFirstEpisode: false, NextUpDateCutoff: oldestDateForNextUp.toISOString(), EnableResumable: false, EnableRewatching: userSettings.enableRewatchingInNextUp() From 4f33ce2290bc8b082a45e2b425a4c705ce37caad Mon Sep 17 00:00:00 2001 From: Violet Caulfield <42452695+anultravioletaurora@users.noreply.github.com> Date: Fri, 17 Apr 2026 12:19:38 -0500 Subject: [PATCH 130/695] adjust useEffect deps and fix linting issues --- src/apps/dashboard/features/sessions/hooks/useLiveSessions.ts | 2 +- src/components/guide/guide.js | 2 +- src/elements/emby-itemrefreshindicator/RefreshIndicator.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/apps/dashboard/features/sessions/hooks/useLiveSessions.ts b/src/apps/dashboard/features/sessions/hooks/useLiveSessions.ts index 1ad4c0d4c8..d999fc3f8c 100644 --- a/src/apps/dashboard/features/sessions/hooks/useLiveSessions.ts +++ b/src/apps/dashboard/features/sessions/hooks/useLiveSessions.ts @@ -40,7 +40,7 @@ const useLiveSessions = () => { return api?.subscribe([OutboundWebSocketMessageType.Sessions], ({ Data }) => { queryClient.setQueryData([ QUERY_KEY, QUERY_PARAMS ], updateSessions(Data ?? [])); }); - }, []); + }, [api, updateSessions]); return sessionsQuery; }; diff --git a/src/components/guide/guide.js b/src/components/guide/guide.js index a16e12aeb4..541d8aca7f 100644 --- a/src/components/guide/guide.js +++ b/src/components/guide/guide.js @@ -173,7 +173,7 @@ function Guide(options) { if (self._wsUnsubscribers) { self._wsUnsubscribers.forEach(unsub => { - unsub() + unsub(); }); self._wsUnsubscribers = []; } diff --git a/src/elements/emby-itemrefreshindicator/RefreshIndicator.tsx b/src/elements/emby-itemrefreshindicator/RefreshIndicator.tsx index 9330fc7c87..92061f0b36 100644 --- a/src/elements/emby-itemrefreshindicator/RefreshIndicator.tsx +++ b/src/elements/emby-itemrefreshindicator/RefreshIndicator.tsx @@ -70,7 +70,7 @@ const RefreshIndicator: FC = ({ item, className }) => { useEffect(() => { return api?.subscribe([OutboundWebSocketMessageType.RefreshProgress], onRefreshProgress); - }, [item.Id]); + }, [api, onRefreshProgress]); const progressringClass = classNames('progressring', className); From 480c2d2c98d50e88c1f9dc290befdac96957afd0 Mon Sep 17 00:00:00 2001 From: Violet Caulfield <42452695+anultravioletaurora@users.noreply.github.com> Date: Fri, 17 Apr 2026 12:35:24 -0500 Subject: [PATCH 131/695] addressing eslint rule-breakage --- src/components/recordingcreator/recordingfields.js | 2 +- src/elements/emby-itemscontainer/ItemsContainer.tsx | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/components/recordingcreator/recordingfields.js b/src/components/recordingcreator/recordingfields.js index 92daa9b86a..15b2d6d8c4 100644 --- a/src/components/recordingcreator/recordingfields.js +++ b/src/components/recordingcreator/recordingfields.js @@ -117,7 +117,7 @@ class RecordingEditor { destroy() { this._unsubscribeTimers?.forEach(unsub => { - unsub() + unsub(); }); this._unsubscribeTimers = []; } diff --git a/src/elements/emby-itemscontainer/ItemsContainer.tsx b/src/elements/emby-itemscontainer/ItemsContainer.tsx index 95c83e5640..d9b39c38f7 100644 --- a/src/elements/emby-itemscontainer/ItemsContainer.tsx +++ b/src/elements/emby-itemscontainer/ItemsContainer.tsx @@ -374,6 +374,13 @@ const ItemsContainer: FC> = ({ if (unsub6) unsubscribeRef.current.push(unsub6); } + const unSubAll = () => { + unsubscribeRef.current.forEach(unsub => { + unsub(); + }); + unsubscribeRef.current = []; + }; + Events.on(playbackManager, 'playbackstop', onPlaybackStopped); return () => { @@ -390,10 +397,7 @@ const ItemsContainer: FC> = ({ itemShortcuts.off(itemsContainer, getShortcutOptions()); // Unsubscribe from websocket messages - unsubscribeRef.current.forEach(unsub => { - unsub(); - }); - unsubscribeRef.current = []; + unSubAll(); Events.off(playbackManager, 'playbackstop', onPlaybackStopped); }; From c2220ba37734a04603b130f78a8cd84823bf8934 Mon Sep 17 00:00:00 2001 From: Violet Caulfield <42452695+anultravioletaurora@users.noreply.github.com> Date: Fri, 17 Apr 2026 12:59:30 -0500 Subject: [PATCH 132/695] getting linting to pass --- .../RefreshIndicator.tsx | 2 +- .../emby-itemscontainer/ItemsContainer.tsx | 40 ++++++++++++------- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/src/elements/emby-itemrefreshindicator/RefreshIndicator.tsx b/src/elements/emby-itemrefreshindicator/RefreshIndicator.tsx index 92061f0b36..e79c38ee31 100644 --- a/src/elements/emby-itemrefreshindicator/RefreshIndicator.tsx +++ b/src/elements/emby-itemrefreshindicator/RefreshIndicator.tsx @@ -11,7 +11,7 @@ import { getCurrentDateTimeLocale } from 'lib/globalize'; import type { ItemDto } from 'types/base/models/item-dto'; import { useApi } from 'hooks/useApi'; import { OutboundWebSocketMessageType } from '@jellyfin/sdk/lib/websocket'; -import { RefreshProgressMessage } from '@jellyfin/sdk/lib/generated-client'; +import type { RefreshProgressMessage } from '@jellyfin/sdk/lib/generated-client/models/refresh-progress-message'; function CircularProgressWithLabel( props: CircularProgressProps & { value: number } diff --git a/src/elements/emby-itemscontainer/ItemsContainer.tsx b/src/elements/emby-itemscontainer/ItemsContainer.tsx index d9b39c38f7..c3d266f038 100644 --- a/src/elements/emby-itemscontainer/ItemsContainer.tsx +++ b/src/elements/emby-itemscontainer/ItemsContainer.tsx @@ -303,6 +303,31 @@ const ItemsContainer: FC> = ({ [] ); + const subscribe = useCallback(() => { + if (api) { + const unsub1 = api.subscribe([OutboundWebSocketMessageType.UserDataChanged], onUserDataChanged); + const unsub2 = api.subscribe([OutboundWebSocketMessageType.TimerCreated], onTimerCreated); + const unsub3 = api.subscribe([OutboundWebSocketMessageType.TimerCancelled], onTimerCancelled); + const unsub4 = api.subscribe([OutboundWebSocketMessageType.SeriesTimerCreated], onSeriesTimerCreated); + const unsub5 = api.subscribe([OutboundWebSocketMessageType.SeriesTimerCancelled], onSeriesTimerCancelled); + const unsub6 = api.subscribe([OutboundWebSocketMessageType.LibraryChanged], onLibraryChanged); + if (unsub1) unsubscribeRef.current.push(unsub1); + if (unsub2) unsubscribeRef.current.push(unsub2); + if (unsub3) unsubscribeRef.current.push(unsub3); + if (unsub4) unsubscribeRef.current.push(unsub4); + if (unsub5) unsubscribeRef.current.push(unsub5); + if (unsub6) unsubscribeRef.current.push(unsub6); + } + }, [ + api, + onUserDataChanged, + onTimerCreated, + onTimerCancelled, + onSeriesTimerCreated, + onSeriesTimerCancelled, + onLibraryChanged + ]); + useEffect(() => { const itemsContainer = itemsContainerRef.current; @@ -359,20 +384,7 @@ const ItemsContainer: FC> = ({ itemShortcuts.on(itemsContainer, getShortcutOptions()); // Subscribe to websocket messages - if (api) { - const unsub1 = api.subscribe([OutboundWebSocketMessageType.UserDataChanged], onUserDataChanged); - const unsub2 = api.subscribe([OutboundWebSocketMessageType.TimerCreated], onTimerCreated); - const unsub3 = api.subscribe([OutboundWebSocketMessageType.TimerCancelled], onTimerCancelled); - const unsub4 = api.subscribe([OutboundWebSocketMessageType.SeriesTimerCreated], onSeriesTimerCreated); - const unsub5 = api.subscribe([OutboundWebSocketMessageType.SeriesTimerCancelled], onSeriesTimerCancelled); - const unsub6 = api.subscribe([OutboundWebSocketMessageType.LibraryChanged], onLibraryChanged); - if (unsub1) unsubscribeRef.current.push(unsub1); - if (unsub2) unsubscribeRef.current.push(unsub2); - if (unsub3) unsubscribeRef.current.push(unsub3); - if (unsub4) unsubscribeRef.current.push(unsub4); - if (unsub5) unsubscribeRef.current.push(unsub5); - if (unsub6) unsubscribeRef.current.push(unsub6); - } + subscribe(); const unSubAll = () => { unsubscribeRef.current.forEach(unsub => { From 51303a2d9555d51507fb2d4310d02926bc7b9507 Mon Sep 17 00:00:00 2001 From: Kityn Date: Fri, 17 Apr 2026 13:51:50 -0400 Subject: [PATCH 133/695] Translated using Weblate (Polish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/ --- src/strings/pl.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/pl.json b/src/strings/pl.json index 3f63c040c2..a8ae9a4970 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -1904,5 +1904,6 @@ "LabelReasons": "Powody", "LabelPlayerSizes": "Rozmiary odtwarzacza", "LabelPlaybackQuality": "Klatka utracona / uszkodzona", - "OnFilesystem": "W systemie plików: {0}" + "OnFilesystem": "W systemie plików: {0}", + "LabelSyncPlayJoinGroup": "Dołącz do grupy" } From f0a1528c70aafe1510fd826e8804db85c11587dd Mon Sep 17 00:00:00 2001 From: Milo Ivir Date: Fri, 17 Apr 2026 16:54:42 -0400 Subject: [PATCH 134/695] Translated using Weblate (Croatian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hr/ --- src/strings/hr.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/strings/hr.json b/src/strings/hr.json index dde4cd390c..2d4225f06b 100644 --- a/src/strings/hr.json +++ b/src/strings/hr.json @@ -812,7 +812,7 @@ "Home": "Početna", "Hide": "Sakrij", "HeaderSyncPlayEnabled": "SyncPlay omogućen", - "HeaderSyncPlaySelectGroup": "Pridruži se grupi", + "HeaderSyncPlaySelectGroup": "Pridruži se jednoj grupi", "HeaderSubtitleDownloads": "Preuzimanje titlova", "HeaderSubtitleAppearance": "Prikaz titlove", "HeaderStopRecording": "Prekini snimanje", @@ -1904,5 +1904,6 @@ "AllowVideoToolboxTonemappingHelp": "Hardverski ubrzano mapiranje tonova koje pruža VideoToolbox. Radi s većinom HDR formata, uključujući HDR10, HDR10+ i HLG, ali ne radi s Dolby Vision Profilom 5. Ovo ima viši prioritet u odnosu na drugu Metal implementaciju.", "TrickplayLoadError": "Neuspjelo učitavanje postavki brzokreta", "LabelPlayerSizes": "Veličine igrača", - "LabelPlaybackQuality": "Okvir izgubljen / oštećen" + "LabelPlaybackQuality": "Okvir izgubljen / oštećen", + "LabelSyncPlayJoinGroup": "Pridruži se grupi" } From 02821ed733d4e85cb630cec028139c6c2d00103a Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Fri, 17 Apr 2026 16:17:13 -0400 Subject: [PATCH 135/695] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index aa94abd8a0..fcb0920a32 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -1904,5 +1904,6 @@ "LabelReasons": "Redenen", "LabelPlayerSizes": "Spelergroottes", "LabelPlaybackQuality": "Frame verloren / beschadigd", - "OnFilesystem": "Op bestandssysteem: {0}" + "OnFilesystem": "Op bestandssysteem: {0}", + "LabelSyncPlayJoinGroup": "Deelnemen aan groep" } From f5f5fa1b184a8947eb999466ff1de0752929af81 Mon Sep 17 00:00:00 2001 From: TF Date: Fri, 17 Apr 2026 16:08:27 -0400 Subject: [PATCH 136/695] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index a8b264dde4..7336219132 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -1904,5 +1904,6 @@ "LabelProgressAndSpeed": "Progresso / velocidade", "LabelReasons": "Motivos", "LabelPlayerSizes": "Tamanhos do leitor", - "OnFilesystem": "No sistema de ficheiros: {0}" + "OnFilesystem": "No sistema de ficheiros: {0}", + "LabelSyncPlayJoinGroup": "Aderir a grupo" } From 7763398d96e98fefbf6f930b60823f551535145e Mon Sep 17 00:00:00 2001 From: SecularSteve Date: Sat, 18 Apr 2026 05:28:34 -0400 Subject: [PATCH 137/695] Translated using Weblate (English (United Kingdom)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en_GB/ --- src/strings/en-gb.json | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/strings/en-gb.json b/src/strings/en-gb.json index 7ff6bd1eec..230e5a5cda 100644 --- a/src/strings/en-gb.json +++ b/src/strings/en-gb.json @@ -1890,5 +1890,20 @@ "TrickplayLoadError": "Failed to load trickplay settings", "LabelExternalServerUri": "External URI", "LabelExternalServerUriHelp": "Published server URI for external access.", - "Authors": "Authors" + "Authors": "Authors", + "ContinueReading": "Continue reading", + "HeaderLatestBooks": "Recently Added Books", + "HeaderLatestMusicVideos": "Recently Added Music Videos", + "LabelSyncPlayJoinGroup": "Join group", + "OnFilesystem": "On filesystem: {0}", + "UsersEditPageError": "Failed to load users edit page", + "LabelVideoAttributes": "Video attributes", + "LabelVideoColors": "Video colours", + "LabelVideoBitDepth": "Video bit depth", + "LabelAudioAttributes": "Audio attributes", + "LabelTargetCodecs": "Target codecs", + "LabelProgressAndSpeed": "Progress / speed", + "LabelReasons": "Reasons", + "LabelPlayerSizes": "Player sizes", + "LabelPlaybackQuality": "Frame dropped / corrupted" } From 9f85bedfbcaa481f338755715c5b158c2ff9cc71 Mon Sep 17 00:00:00 2001 From: SecularSteve Date: Sat, 18 Apr 2026 05:30:00 -0400 Subject: [PATCH 138/695] Translated using Weblate (Serbian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sr/ --- src/strings/sr.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/sr.json b/src/strings/sr.json index c68564d94e..662bcb32fc 100644 --- a/src/strings/sr.json +++ b/src/strings/sr.json @@ -1904,5 +1904,6 @@ "LabelProgressAndSpeed": "Напредак / брзина", "LabelReasons": "Разлози", "LabelPlayerSizes": "Величине играча", - "LabelPlaybackQuality": "Оквир изгубљен / оштећен" + "LabelPlaybackQuality": "Оквир изгубљен / оштећен", + "LabelSyncPlayJoinGroup": "Придружи се групи" } From 8cdd63e41f4d9ad16882719ba62865b49171d613 Mon Sep 17 00:00:00 2001 From: SecularSteve Date: Sat, 18 Apr 2026 05:30:27 -0400 Subject: [PATCH 139/695] Translated using Weblate (Bosnian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/bs/ --- src/strings/bs.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/bs.json b/src/strings/bs.json index a8600752e4..f0b17cf7db 100644 --- a/src/strings/bs.json +++ b/src/strings/bs.json @@ -1904,5 +1904,6 @@ "LabelProgressAndSpeed": "Napredak / brzina", "LabelReasons": "Razlozi", "LabelPlayerSizes": "Veličine igrača", - "LabelPlaybackQuality": "Okvir izgubljen / oštećen" + "LabelPlaybackQuality": "Okvir izgubljen / oštećen", + "LabelSyncPlayJoinGroup": "Pridruži se grupi" } From a021f1bee90ba1b0abe157d5321eefd59ea4ae96 Mon Sep 17 00:00:00 2001 From: Fjuro Date: Sat, 18 Apr 2026 12:19:30 -0400 Subject: [PATCH 140/695] Translated using Weblate (Czech) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/ --- src/strings/cs.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/cs.json b/src/strings/cs.json index df519d6af1..f76a042213 100644 --- a/src/strings/cs.json +++ b/src/strings/cs.json @@ -1904,5 +1904,6 @@ "LabelReasons": "Důvody", "LabelPlayerSizes": "Velikosti přehrávače", "LabelPlaybackQuality": "Ztracený / poškozený snímek", - "OnFilesystem": "V souborovém systému: {0}" + "OnFilesystem": "V souborovém systému: {0}", + "LabelSyncPlayJoinGroup": "Připojit se ke skupině" } From e0994bb68349cb1f917d0ede9c898f37659b5f02 Mon Sep 17 00:00:00 2001 From: queeup Date: Sat, 18 Apr 2026 16:06:19 -0400 Subject: [PATCH 141/695] Translated using Weblate (Turkish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/tr/ --- src/strings/tr.json | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/strings/tr.json b/src/strings/tr.json index 0afe940405..908f01d3c3 100644 --- a/src/strings/tr.json +++ b/src/strings/tr.json @@ -624,7 +624,7 @@ "ImportFavoriteChannelsHelp": "Yalnızca alıcı cihazında favori olarak işaretlenen kanallar içe aktarılacaktır.", "Image": "Resim", "HeaderSyncPlayEnabled": "SyncPlay etkinleştirildi", - "HeaderSyncPlaySelectGroup": "Gruba katıl", + "HeaderSyncPlaySelectGroup": "Bir gruba katıl", "HeaderServerAddressSettings": "Sunucu Adres Ayarları", "HeaderRemoteAccessSettings": "Uzaktan Erişim Ayarları", "HeaderHttpsSettings": "HTTPS Ayarları", @@ -1895,7 +1895,7 @@ "Unwatch": "İzlenmedi olarak işaretle", "UsersEditPageError": "Kullanıcı düzenleme sayfası yüklenemedi", "Watch": "İzle", - "LabelVideoAttributes": "Vıdeo özellikleri", + "LabelVideoAttributes": "Video özellikleri", "LabelVideoColors": "Video renkleri", "LabelVideoBitDepth": "Video bit derinliği", "LabelAudioAttributes": "Ses özellikleri", @@ -1903,5 +1903,7 @@ "LabelProgressAndSpeed": "İlerleme / hız", "LabelReasons": "Sebepler", "LabelPlayerSizes": "Oynatıcı dosya boyutları", - "LabelPlaybackQuality": "Kare düştü / bozuldu" + "LabelPlaybackQuality": "Kare düştü / bozuldu", + "LabelSyncPlayJoinGroup": "Gruba katıl", + "OnFilesystem": "Dosya sistemi: {0}" } From 3feb8bce67930a2efc0e46cc2703b8e5fc8b6ad5 Mon Sep 17 00:00:00 2001 From: Lofuuzi Date: Sun, 19 Apr 2026 03:35:59 -0400 Subject: [PATCH 142/695] Translated using Weblate (Chinese (Traditional Han script, Hong Kong)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant_HK/ --- src/strings/zh-hk.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/zh-hk.json b/src/strings/zh-hk.json index 6f450a3bb2..e997b53c8e 100644 --- a/src/strings/zh-hk.json +++ b/src/strings/zh-hk.json @@ -1904,5 +1904,6 @@ "LabelReasons": "原因", "LabelPlayerSizes": "播放器尺寸", "LabelPlaybackQuality": "跌格/損壞", - "OnFilesystem": "檔案系統位置:{0}" + "OnFilesystem": "檔案系統位置:{0}", + "LabelSyncPlayJoinGroup": "加入群組" } From 235deadd752cb23a08b52eed90db0d3def3a50f0 Mon Sep 17 00:00:00 2001 From: MrPlow Date: Sun, 19 Apr 2026 06:04:44 -0400 Subject: [PATCH 143/695] Translated using Weblate (German) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/ --- src/strings/de.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/de.json b/src/strings/de.json index 1fc70bc019..5b452310cc 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -1904,5 +1904,6 @@ "LabelReasons": "Gründe", "LabelPlayerSizes": "Player Größen", "LabelPlaybackQuality": "Frame verloren / beschädigt", - "OnFilesystem": "Auf Dateisystem: {0}" + "OnFilesystem": "Auf Dateisystem: {0}", + "LabelSyncPlayJoinGroup": "Gruppe beitreten" } From 592f184a8c9119e267a86b3fc3365830dff52820 Mon Sep 17 00:00:00 2001 From: myrad2267 <37258280+myrad2267@users.noreply.github.com> Date: Sun, 19 Apr 2026 08:31:32 -0400 Subject: [PATCH 144/695] Translated using Weblate (French (Canada)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr_CA/ --- src/strings/fr-ca.json | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/strings/fr-ca.json b/src/strings/fr-ca.json index e267c188c6..6c76277190 100644 --- a/src/strings/fr-ca.json +++ b/src/strings/fr-ca.json @@ -1894,5 +1894,14 @@ "LabelInternalServerUriHelp": "URI du serveur publié pour un accès interne.", "LabelUseSamePublishedServerUri": "Utilisez la même URI de serveur publiée pour l'accès interne et externe", "LibrariesLoadError": "Échec du chargement des bibliothèques", - "HeaderLatestMusicVideos": "Vidéos musicales ajoutées récemment" + "HeaderLatestMusicVideos": "Vidéos musicales ajoutées récemment", + "LabelSyncPlayJoinGroup": "Rejoindre groupe", + "LabelVideoColors": "Couleurs vidéo", + "LabelVideoBitDepth": "Profondeur de bits vidéo", + "LabelAudioAttributes": "Attributs audio", + "LabelTargetCodecs": "Codecs cibles", + "LabelProgressAndSpeed": "Progression / Vitesse", + "LabelReasons": "Raisons", + "LabelPlayerSizes": "Tailles du lecteur", + "LabelPlaybackQuality": "Images perdues / corrompues" } From 2b9c24cc75b0676c32f6fe9de62ca538f948aff3 Mon Sep 17 00:00:00 2001 From: myrad2267 <37258280+myrad2267@users.noreply.github.com> Date: Sun, 19 Apr 2026 08:28:28 -0400 Subject: [PATCH 145/695] Translated using Weblate (French) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/ --- src/strings/fr.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/fr.json b/src/strings/fr.json index 37121fdefd..b45faab7ef 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -1904,5 +1904,6 @@ "LabelAudioAttributes": "Attributs audio", "LabelTargetCodecs": "Codecs cibles", "LabelProgressAndSpeed": "Progression / Vitesse", - "LabelPlayerSizes": "Tailles du lecteur" + "LabelPlayerSizes": "Tailles du lecteur", + "LabelSyncPlayJoinGroup": "Rejoindre groupe" } From a2a52839bd578075014ec33c2939b51073074daa Mon Sep 17 00:00:00 2001 From: Translation expert Date: Sun, 19 Apr 2026 14:31:32 -0400 Subject: [PATCH 146/695] Translated using Weblate (Arabic) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ar/ --- src/strings/ar.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/ar.json b/src/strings/ar.json index d26315d496..e904bf2982 100644 --- a/src/strings/ar.json +++ b/src/strings/ar.json @@ -1904,5 +1904,6 @@ "LabelTargetCodecs": "المرمزات المستهدفة", "LabelVideoAttributes": "صفات الفيديو", "LabelAudioAttributes": "صفات الصوت", - "OnFilesystem": "على نظام الملفات: {0}" + "OnFilesystem": "على نظام الملفات: {0}", + "LabelSyncPlayJoinGroup": "الانضمام لمجموعة" } From d903b65b4c569c1f341dc03d4279b26110cbf7e0 Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Sun, 19 Apr 2026 15:21:37 -0400 Subject: [PATCH 147/695] Translated using Weblate (Portuguese (Portugal)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/ --- src/strings/pt-pt.json | 193 +++++++++++++++++++++-------------------- 1 file changed, 97 insertions(+), 96 deletions(-) diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index 2e2016b591..60a3978caf 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -5,7 +5,7 @@ "All": "Todos", "Audio": "Áudio", "Backdrops": "Imagens de fundo", - "ButtonAddMediaLibrary": "Adicionar Biblioteca de Multimédia", + "ButtonAddMediaLibrary": "Adicionar biblioteca multimédia", "ButtonAddScheduledTaskTrigger": "Adicionar tarefa agendada", "ButtonAddServer": "Adicionar servidor", "ButtonAddUser": "Adicionar utilizador", @@ -13,7 +13,7 @@ "ButtonArrowRight": "Direita", "ButtonBack": "Voltar", "ButtonCancel": "Cancelar", - "ButtonChangeServer": "Alterar Servidor", + "ButtonChangeServer": "Alterar servidor", "ButtonEditOtherUserPreferences": "Editar este perfil de utilizador, imagem e preferências pessoais.", "ButtonForgotPassword": "Esqueci-me da palavra-passe", "ButtonFullscreen": "Ecrã inteiro", @@ -30,7 +30,7 @@ "ButtonRevoke": "Revogar", "ButtonScanAllLibraries": "Analisar todas as bibliotecas", "ButtonSelectDirectory": "Selecionar pasta", - "ButtonSelectView": "Selecionar visualização", + "ButtonSelectView": "Selecionar vista", "ButtonSend": "Enviar", "ButtonShutdown": "Encerrar", "ButtonSignIn": "Iniciar sessão", @@ -44,23 +44,23 @@ "Composer": "Composição", "ConfirmDeleteItem": "A eliminação deste item irá eliminá-lo do sistema de ficheiros e da tua biblioteca multimédia. Tens a certeza de que queres continuar?", "ConfirmDeleteItems": "A eliminação destes itens elimina-os do sistema de ficheiros e da tua biblioteca multimédia. Tens a certeza de que queres continuar?", - "ConfirmDeletion": "Confirmar Exclusão", + "ConfirmDeletion": "Confirmar eliminação", "Connect": "Ligar", "Continuing": "A continuar", "Delete": "Eliminar", "DeleteDeviceConfirmation": "Tens a certeza de que queres remover este dispositivo? O dispositivo reaparecerá da próxima vez que um utilizador iniciar sessão neste dispositivo.", "DeleteImage": "Eliminar imagem", - "DeleteImageConfirmation": "Tens a certeza de que pretendes eliminar esta imagem?", + "DeleteImageConfirmation": "Tens a certeza de que queres eliminar esta imagem?", "DeleteMedia": "Remover conteúdo", "DeleteUser": "Eliminar utilizador", - "DeleteUserConfirmation": "Tens a certeza de que pretendes eliminar este utilizador?", + "DeleteUserConfirmation": "Tens a certeza de que queres eliminar este utilizador?", "DeviceAccessHelp": "Apenas se aplica a dispositivos que podem ser identificados como únicos e que não impedem o acesso ao navegador. Filtrar o acesso a dispositivos do utilizador impede-o de utilizar novos dispositivos, até estes serem aprovados aqui.", "Director": "Realização", "Edit": "Editar", "EnableCinemaMode": "Modo cinema", "Ended": "Terminado", "ErrorAddingMediaPathToVirtualFolder": "Ocorreu um erro ao adicionares a localização dos ficheiros. Certifica-te de que o caminho é válido e que o Jellyfin tem acesso ao mesmo.", - "ErrorGettingTvLineups": "Ocorreu um erro ao transferir a programação de TV. Por favor, certifique-se que a sua informação está correcta e tente novamente.", + "ErrorGettingTvLineups": "Ocorreu um erro ao transferir a programação de TV. Verifica se os dados estão corretos e tenta novamente.", "ErrorPleaseSelectLineup": "Seleciona a programação e tenta novamente. Se não houver programações disponíveis, verifica se o teu nome de utilizador, palavra-passe e código postal estão corretos.", "ExitFullscreen": "Sair do ecrã inteiro", "FastForward": "Avançar", @@ -89,7 +89,7 @@ "HeaderConfirmRevokeApiKey": "Revogar chave API", "HeaderConnectToServer": "Ligar ao servidor", "HeaderContinueWatching": "Continuar a ver", - "HeaderDateIssued": "Data da emissão", + "HeaderDateIssued": "Data de emissão", "HeaderDeleteItem": "Remover item", "HeaderDeleteItems": "Remover itens", "HeaderDeleteTaskTrigger": "Remover tarefa agendada", @@ -102,7 +102,7 @@ "HeaderFeatureAccess": "Acesso a funcionalidades", "HeaderFetchImages": "Obter imagens", "HeaderFrequentlyPlayed": "Reproduzido frequentemente", - "HeaderGuideProviders": "Fornecedores de Guia TV", + "HeaderGuideProviders": "Fornecedores do Guia TV", "HeaderIdentifyItemHelp": "Introduz um ou mais critérios de pesquisa. Remove os critérios para aumentar os resultados da pesquisa.", "HeaderInstall": "Instalar", "HeaderInstantMix": "Mix instantâneo", @@ -126,7 +126,7 @@ "HeaderPasswordReset": "Redefinição de palavra-passe", "HeaderPaths": "Localizações", "HeaderPlayAll": "Reproduzir tudo", - "HeaderPlayback": "Reprodução de multimédia", + "HeaderPlayback": "Reprodução multimédia", "HeaderPlaybackError": "Erro na reprodução", "HeaderPleaseSignIn": "Iniciar sessão", "HeaderPreferredMetadataLanguage": "Idioma de metadados preferido", @@ -143,7 +143,7 @@ "HeaderSelectPath": "Seleciona a localização", "HeaderSelectServerCachePath": "Seleciona a localização da cache do servidor", "HeaderSelectServerCachePathHelp": "Pesquisa ou introduz a localização que pretendes utilizar para os ficheiros de cache do servidor. O servidor requer permissões de escrita nesta pasta.", - "HeaderSelectTranscodingPath": "Selecione o Local Temporário da Transcodificação", + "HeaderSelectTranscodingPath": "Selecionar localização temporária da transcodificação", "HeaderSelectTranscodingPathHelp": "Pesquisa ou introduz a localização que pretendes utilizar para os ficheiros de transcodificação. O servidor requer permissões de escrita nesta pasta.", "HeaderSendMessage": "Enviar mensagem", "HeaderSetupLibrary": "Configurar bibliotecas multimédia", @@ -152,7 +152,7 @@ "HeaderTaskTriggers": "Tarefas agendadas", "HeaderThisUserIsCurrentlyDisabled": "Este utilizador está atualmente desativado", "HeaderTunerDevices": "Sintonizadores", - "HeaderTypeText": "Inserir texto", + "HeaderTypeText": "Introduzir texto", "HeaderUser": "Utilizador", "HeaderUsers": "Utilizadores", "HeaderVideoTypes": "Tipos de vídeo", @@ -162,7 +162,7 @@ "Identify": "Identificar", "Images": "Imagens", "ImportFavoriteChannelsHelp": "Apenas serão importados canais marcados como favoritos no sintonizador.", - "InstantMix": "Mix instântaneo", + "InstantMix": "Mix instantâneo", "ItemCount": "{0} itens", "Label3DFormat": "Formato 3D", "LabelAccessDay": "Dia da semana", @@ -176,7 +176,7 @@ "LabelAlbum": "Álbum", "LabelAlbumArtists": "Artistas do álbum", "LabelAppName": "Nome da aplicação", - "LabelAppNameExample": "Um nome legível por humanos para identificar as chaves da API. Esta definição não afetará a funcionalidade.", + "LabelAppNameExample": "Um nome legível para identificar chaves API. Esta definição não afeta a funcionalidade.", "LabelArtists": "Artistas", "LabelArtistsHelp": "Separe múltiplos artistas com ponto e vírgula (;).", "LabelAudioLanguagePreference": "Idioma de áudio preferido", @@ -199,7 +199,7 @@ "LabelCustomDeviceDisplayNameHelp": "Fornece um nome de exibição personalizado ou deixa em branco para usar o nome fornecido pelo dispositivo.", "LabelCustomRating": "Classificação personalizada", "LabelDateAdded": "Adicionado em", - "LabelDateAddedBehavior": "Comportamento da data de adição para conteúdo novo", + "LabelDateAddedBehavior": "Comportamento da data de adição para novo conteúdo", "LabelDateAddedBehaviorHelp": "Caso os metadados tenham um valor presente, este terá prioridade sobre estas opções.", "LabelDay": "Dia da semana", "LabelDisplayName": "Nome a apresentar", @@ -207,7 +207,7 @@ "LabelDisplaySpecialsWithinSeasons": "Mostrar episódios especiais nas temporadas em que estrearam", "LabelDownMixAudioScale": "Reforço de áudio em caso de downmix", "LabelDownMixAudioScaleHelp": "Aumentar o volume de áudio em caso de downmix. O valor 1 preserva o volume original.", - "LabelDownloadLanguages": "Transferir os idiomas", + "LabelDownloadLanguages": "Transferir idiomas", "LabelEnableHardwareDecodingFor": "Ativar descodificação por hardware para", "LabelEnableRealtimeMonitor": "Ativar monitorização em tempo real", "LabelEnableRealtimeMonitorHelp": "Alterações aos ficheiros serão processadas imediatamente em sistemas de ficheiros suportados.", @@ -264,8 +264,8 @@ "LabelName": "Nome", "LabelNewPassword": "Nova palavra-passe", "LabelNewPasswordConfirm": "Confirmar nova palavra-passe", - "LabelNumberOfGuideDays": "Número de dias de Guia TV a transferir", - "LabelNumberOfGuideDaysHelp": "Transferir mais dias de Guia TV permite agendar com maior antecedência e ver mais listagens, no entanto, levará mais tempo a transferir. Se selecionares Automático, será escolhido o período baseado no número de canais.", + "LabelNumberOfGuideDays": "Número de dias do Guia TV a transferir", + "LabelNumberOfGuideDaysHelp": "Transferir mais dias do Guia TV permite agendar com mais antecedência e ver mais listagens, mas também demora mais tempo. Se selecionares Automático, o período será escolhido com base no número de canais.", "LabelOriginalAspectRatio": "Proporção original", "LabelOverview": "Sinopse", "LabelParentalRating": "Classificação parental", @@ -280,9 +280,9 @@ "LabelProfileContainer": "Contentor", "LabelProtocol": "Protocolo", "LabelPublicHttpPort": "Número da porta HTTP pública", - "LabelPublicHttpPortHelp": "Número da porta pública que deverá ser mapeada para a porta HTTP local.", + "LabelPublicHttpPortHelp": "Número da porta pública que deve ser mapeada para a porta HTTP local.", "LabelPublicHttpsPort": "Número da porta HTTPS pública", - "LabelPublicHttpsPortHelp": "Número da porta pública que deverá ser mapeada para a porta HTTPS local.", + "LabelPublicHttpsPortHelp": "Número da porta pública que deve ser mapeada para a porta HTTPS local.", "LabelRecordingPath": "Localização predefinida das gravações", "LabelReleaseDate": "Data de lançamento", "LabelRemoteClientBitrateLimit": "Taxa de bits máxima para transmissão pela Internet (Mbps)", @@ -291,7 +291,7 @@ "LabelSaveLocalMetadataHelp": "Guardar imagens diretamente nas pastas multimédia facilita o acesso para a sua edição.", "LabelScheduledTaskLastRan": "Última execução {0}. Tempo de execução {1}.", "LabelSeasonNumber": "Número da temporada", - "LabelSelectVersionToInstall": "Seleciona a versão a instalar", + "LabelSelectVersionToInstall": "Selecionar versão a instalar", "LabelServerHost": "Servidor", "LabelServerHostHelp": "192.168.1.100:8096 ou https://omeudominio.com", "LabelSkipIfAudioTrackPresent": "Ignorar no caso de o idioma da faixa de áudio principal coincidir com o idioma de transferência", @@ -319,27 +319,27 @@ "LabelUsername": "Nome de utilizador", "LabelValue": "Valor", "LabelVersionInstalled": "{0} instalado", - "LabelYoureDone": "Concluiu!", + "LabelYoureDone": "Concluído!", "LabelZipCode": "Código postal", "LibraryAccessHelp": "Seleciona as bibliotecas a partilhar com este utilizador. Os administradores poderão editar todas as pastas utilizando o gestor de metadados.", - "MaxParentalRatingHelp": "Conteúdo com classificação mais elevada será escondida deste utilizador.", - "MessageAreYouSureDeleteSubtitles": "Tem a certeza de que deseja remover este ficheiro de legendas?", - "MessageAreYouSureYouWishToRemoveMediaFolder": "Tem a certeza de que deseja remover esta pasta?", + "MaxParentalRatingHelp": "O conteúdo com classificação mais elevada será ocultado para este utilizador.", + "MessageAreYouSureDeleteSubtitles": "Tens a certeza de que queres remover este ficheiro de legendas?", + "MessageAreYouSureYouWishToRemoveMediaFolder": "Tens a certeza de que queres remover esta pasta?", "MessageConfirmRecordingCancellation": "Cancelar a gravação?", - "MessageConfirmRestart": "Tem a certeza de que deseja reiniciar o Jellyfin?", - "MessageConfirmRevokeApiKey": "Tem a certeza de que deseja revogar esta chave da API? A ligação da aplicação ao servidor terminará abruptamente.", - "MessageConfirmShutdown": "Tem a certeza de que deseja encerrar o servidor?", - "MessageDeleteTaskTrigger": "Tem a certeza de que deseja remover o agendamento desta tarefa?", + "MessageConfirmRestart": "Tens a certeza de que queres reiniciar o Jellyfin?", + "MessageConfirmRevokeApiKey": "Tens a certeza de que queres revogar esta chave API? A ligação da aplicação ao servidor será terminada de imediato.", + "MessageConfirmShutdown": "Tens a certeza de que queres encerrar o servidor?", + "MessageDeleteTaskTrigger": "Tens a certeza de que queres remover o agendamento desta tarefa?", "MessageEnablingOptionLongerScans": "Ativar esta opção pode aumentar significativamente a duração da análise da biblioteca.", "MessageFileReadError": "Ocorreu um erro ao ler este ficheiro.", - "MessageInvalidUser": "Nome de utilizador ou palavra-passe inválidos. Por favor, tenta novamente.", + "MessageInvalidUser": "Nome de utilizador ou palavra-passe inválidos. Tenta novamente.", "MessageItemSaved": "Item guardado.", "MessageItemsAdded": "Itens adicionados.", "MessageLeaveEmptyToInherit": "Deixa em branco para herdar as definições de um item pai ou do valor predefinido global.", - "MessageNoMovieSuggestionsAvailable": "De momento, não existem sugestões de filmes disponíveis. Veja filmes e avalie-os, e regresse para ver as recomendações.", + "MessageNoMovieSuggestionsAvailable": "De momento, não há sugestões de filmes disponíveis. Vê e avalia alguns filmes e volta aqui para receber recomendações.", "MessageNothingHere": "Nada aqui.", "MessagePasswordResetForUsers": "Os seguintes utilizadores tiveram as suas palavras-passe redefinidas. Podem agora iniciar sessão com os códigos PIN que foram utilizados para efetuar a redefinição.", - "MessagePleaseEnsureInternetMetadata": "Certifique-se de que a transferência de metadados da Internet está ativada.", + "MessagePleaseEnsureInternetMetadata": "Verifica se a transferência de metadados da Internet está ativada.", "MessageReenableUser": "Vê abaixo para reativar", "MessageTheFollowingLocationWillBeRemovedFromLibrary": "As seguintes pastas multimédia serão removidas da tua biblioteca", "MinutesAfter": "minutos depois", @@ -349,11 +349,11 @@ "Mute": "Desativar som", "NewCollection": "Nova coleção", "NewCollectionNameExample": "Exemplo: Coleção Guerra das Estrelas", - "MessageNoNextUpItems": "Nenhum encontrado. Comece a ver os seus programas!", + "MessageNoNextUpItems": "Nenhum encontrado. Começa a ver as tuas séries!", "OptionAllowAudioPlaybackTranscoding": "Permitir reprodução de áudio que necessite de transcodificação", - "OptionAllowBrowsingLiveTv": "Permitir acesso a TV em Direto", + "OptionAllowBrowsingLiveTv": "Permitir acesso à TV em direto", "OptionAllowLinkSharing": "Permitir partilha nas redes sociais", - "OptionAllowManageLiveTv": "Permitir gestão de gravações de TV em Direto", + "OptionAllowManageLiveTv": "Permitir gerir gravações de TV em direto", "OptionAllowMediaPlayback": "Permitir reprodução de multimédia", "OptionAllowMediaPlaybackTranscodingHelp": "Restringir o acesso à transcodificação pode causar falhas de reprodução nos clientes Jellyfin devido a formatos multimédia não suportados.", "OptionAllowRemoteControlOthers": "Permitir controlo remoto de outros utilizadores", @@ -383,14 +383,14 @@ "OptionMissingEpisode": "Episódios em Falta", "OptionNew": "Nova…", "OptionOnInterval": "Num intervalo", - "OptionParentalRating": "Classificação Parental", - "OptionPlayCount": "N.º de Visualizações", - "OptionPremiereDate": "Data de Estreia", - "OptionReleaseDate": "Data de Lançamento", + "OptionParentalRating": "Classificação parental", + "OptionPlayCount": "Número de visualizações", + "OptionPremiereDate": "Data de estreia", + "OptionReleaseDate": "Data de lançamento", "OptionResumable": "Retomável", "OptionSaveMetadataAsHidden": "Guardar metadados e imagens como ficheiros ocultos", "OptionSpecialEpisode": "Especiais", - "OptionTrackName": "Nome da pista", + "OptionTrackName": "Nome da faixa", "OptionTvdbRating": "Classificação no TVDB", "OptionUnairedEpisode": "Episódios por Estrear", "OptionWakeFromSleep": "Retomar da suspensão", @@ -400,12 +400,12 @@ "ParentalRating": "Classificação parental", "PasswordMatchError": "A palavra-passe e a confirmação devem coincidir.", "PasswordResetComplete": "A palavra-passe foi redefinida.", - "PasswordResetConfirmation": "Tens a certeza de que desejas redefinir a palavra-passe?", + "PasswordResetConfirmation": "Tens a certeza de que queres redefinir a palavra-passe?", "PasswordSaved": "Palavra-passe guardada.", "Play": "Reproduzir", "PlayNextEpisodeAutomatically": "Reproduzir próximo episódio automaticamente", "PleaseEnterNameOrId": "Introduz um nome ou um ID externo.", - "PleaseSelectTwoItems": "Por favor selecione pelo menos dois itens.", + "PleaseSelectTwoItems": "Seleciona pelo menos dois itens.", "Producer": "Produção", "RecommendationBecauseYouLike": "Porque gosta de {0}", "RecommendationBecauseYouWatched": "Porque viu {0}", @@ -426,7 +426,7 @@ "SearchForSubtitles": "Procurar legendas", "SendMessage": "Enviar mensagem", "Series": "Séries", - "ServerUpdateNeeded": "Este servidor precisa de ser atualizado. Para transferir a versão mais recente, visite {0}", + "ServerUpdateNeeded": "Este servidor precisa de ser atualizado. Para transferires a versão mais recente, visita {0}", "Settings": "Definições", "SettingsSaved": "Definições guardadas.", "Share": "Partilhar", @@ -446,13 +446,13 @@ "TabScheduledTasks": "Tarefas agendadas", "TabServer": "Servidor", "TabUpcoming": "Próximos", - "TellUsAboutYourself": "Fale-nos sobre si", - "ThisWizardWillGuideYou": "Este assistente irá ajudar-te durante o processo de configuração. Para começar, introduz o nome do servidor e seleciona o teu idioma.", + "TellUsAboutYourself": "Fala-nos sobre ti", + "ThisWizardWillGuideYou": "Este assistente vai guiar-te pelo processo de configuração. Para começares, introduz o nome do servidor e escolhe o teu idioma.", "Thursday": "Quinta", "TitlePlayback": "Reprodução", "TrackCount": "{0} faixas", "Tuesday": "Terça", - "UninstallPluginConfirmation": "Tem a certeza de que deseja desinstalar {0}?", + "UninstallPluginConfirmation": "Tens a certeza de que queres desinstalar {0}?", "HeaderUninstallPlugin": "Desinstalar extensão", "Unmute": "Ativar som", "UserProfilesIntro": "O Jellyfin suporta perfis de utilizadores, permitindo que cada utilizador tenha as suas definições de visualização, estado de reprodução e controlos parentais.", @@ -461,9 +461,9 @@ "ValueTimeLimitSingleHour": "Limite de tempo: 1 hora", "Wednesday": "Quarta", "WelcomeToProject": "Bem-vindo ao Jellyfin!", - "WizardCompleted": "É tudo o que precisamos por agora. O Jellyfin começou a recolher informações sobre a tua biblioteca multimédia. Vê algumas das nossas aplicações e, em seguida, clica em Terminar para ver o Painel de Controlo.", + "WizardCompleted": "É tudo o que precisamos por agora. O Jellyfin já começou a recolher informações sobre a tua biblioteca multimédia. Podes explorar algumas das nossas aplicações e, depois, clicar em Terminar para abrir o Painel de controlo.", "Writer": "Autoria", - "AccessRestrictedTryAgainLater": "O acesso está atualmente restrito. Por favor, tenta mais tarde.", + "AccessRestrictedTryAgainLater": "O acesso está atualmente restrito. Tenta novamente mais tarde.", "AddToCollection": "Adicionar à coleção", "AddToPlayQueue": "Adicionar à lista de reprodução", "AddedOnValue": "Adicionado {0}", @@ -475,11 +475,11 @@ "AllEpisodes": "Todos os episódios", "AllLanguages": "Todos os idiomas", "AllLibraries": "Todas as bibliotecas", - "AllowHWTranscodingHelp": "Permite ao sintonizador converter emissões em tempo real. Poderá reduzir a necessidade de conversão a fazer pelo servidor.", + "AllowHWTranscodingHelp": "Permite ao sintonizador converter emissões em tempo real. Isto pode reduzir a necessidade de transcodificação no servidor.", "AllowMediaConversion": "Permitir conversão multimédia", "AllowMediaConversionHelp": "Conceder ou negar acesso à funcionalidade de conversão multimédia.", "AllowOnTheFlySubtitleExtraction": "Permitir a extração de legendas em tempo real", - "AllowOnTheFlySubtitleExtractionHelp": "Legendas integradas podem ser extraídas do vídeo e enviadas como texto simples para os clientes para evitar transcodificação. Em certos dispositivos, esta poderá ser uma operação demorada e pode causar interrupções de reprodução durante o processo de extração. Desative esta opção para que as legendas sejam integradas no vídeo durante a conversão para um formato suportado pelo dispositivo de destino.", + "AllowOnTheFlySubtitleExtractionHelp": "As legendas integradas podem ser extraídas do vídeo e enviadas aos clientes como texto simples para evitar transcodificação. Em alguns dispositivos, isto pode demorar e causar interrupções na reprodução durante o processo de extração. Desativa esta opção para que as legendas sejam integradas no vídeo durante a conversão para um formato suportado pelo dispositivo de destino.", "AllowRemoteAccess": "Permitir ligações remotas a este servidor", "AllowRemoteAccessHelp": "Se desmarcado, todas as ligações remotas serão bloqueadas.", "AllowedRemoteAddressesHelp": "Lista separada por vírgulas de endereços IP, ou sub-rede IP/Máscara, aos quais será permitida ligação remota. Se deixado em branco, todos os endereços remotos serão permitidos.", @@ -495,7 +495,7 @@ "BirthPlaceValue": "Local de nascimento: {0}", "Blacklist": "Lista de exclusão", "Books": "Livros", - "BurnSubtitlesHelp": "Escolha se o servidor deve integrar as legendas. Evitar a integração de legendas melhora o desempenho do servidor. Selecione Auto para que legendas baseadas em imagem (VobSub, PGS, SUB/IDX) e certos formatos ASS/SSA sejam integrados.", + "BurnSubtitlesHelp": "Escolhe se o servidor deve integrar as legendas. Evitar a integração melhora bastante o desempenho. Seleciona Automático para integrar legendas baseadas em imagem (VobSub, PGS, SUB/IDX) e certos formatos ASS/SSA.", "Channels": "Canais", "Collections": "Coleções", "Favorites": "Favoritos", @@ -510,9 +510,9 @@ "Absolute": "Absoluto", "CriticRating": "Classificação da crítica", "ContinueWatching": "Continuar a ver", - "ConfirmEndPlayerSession": "Deseja encerrar o servidor Jellyfin em {0}?", + "ConfirmEndPlayerSession": "Queres encerrar o Jellyfin em {0}?", "ConfirmDeleteImage": "Eliminar a imagem?", - "ConfigureDateAdded": "Configura a forma como é atribuída a data de adição, no Painel de controlo > Bibliotecas > Visualização", + "ConfigureDateAdded": "Define como a data de adição é atribuída em Painel de controlo > Bibliotecas > Visualização", "CommunityRating": "Classificação da comunidade", "ChannelNumber": "Número do canal", "ChannelNameOnly": "Apenas canal {0}", @@ -520,21 +520,21 @@ "Categories": "Categorias", "CancelSeries": "Cancelar gravação de série", "CancelRecording": "Cancelar gravação", - "ButtonWebsite": "Website", + "ButtonWebsite": "Site", "ButtonTrailer": "Trailer", - "ButtonRename": "Alterar o nome", + "ButtonRename": "Mudar o nome", "ButtonParentalControl": "Controlo parental", "ButtonOk": "OK", "ButtonLibraryAccess": "Acesso à biblioteca", "ButtonGotIt": "Entendido", - "ButtonAudioTracks": "Faixas de Áudio", + "ButtonAudioTracks": "Faixas de áudio", "Browse": "Explorar", "BoxRear": "Caixa (verso)", "Box": "Caixa", "BookLibraryHelp": "São suportados audiolivros e ebooks. Consulta o {0} guia de nomenclatura de livros {1}.", "BirthLocation": "Local de nascimento", "AsManyAsPossible": "Tantos quanto possível", - "Art": "ClearArt (imagem transparente)", + "Art": "ClearArt", "Anytime": "Qualquer altura", "Aired": "Estreou a", "HeaderKeepRecording": "Continuar a gravar", @@ -571,15 +571,15 @@ "Filters": "Filtros", "File": "Ficheiro", "Favorite": "Favorito", - "FFmpegSavePathNotFound": "Não conseguimos encontrar o FFmpeg na localização que introduziste. O FFprobe também é necessário e deve estar na mesma pasta. Estes componentes são, por norma, instalados em conjunto. Por favor, verifica a localização e tenta novamente.", + "FFmpegSavePathNotFound": "Não foi possível encontrar o FFmpeg na localização que introduziste. O FFprobe também é necessário e tem de estar na mesma pasta. Normalmente, estes componentes vêm juntos. Verifica a localização e tenta novamente.", "Extras": "Extras", "ExtraLarge": "Extra grande", "EveryNDays": "A cada {0} dias", - "ErrorSavingTvProvider": "Ocorreu um erro ao guardar o fornecedor de televisão. Certifique-se de que está acessível e tente novamente.", + "ErrorSavingTvProvider": "Ocorreu um erro ao guardar o fornecedor de TV. Verifica se está acessível e tenta novamente.", "ErrorStartHourGreaterThanEnd": "A hora de fim deve ser posterior à hora de início.", "ErrorDeletingItem": "Ocorreu um erro ao eliminar o item do servidor. Verifica se o Jellyfin tem acesso de escrita à pasta multimédia e tenta novamente.", - "ErrorAddingTunerDevice": "Ocorreu um erro ao adicionar o dispositivo de sintonização. Por favor, garanta que está acessível e tente novamente.", - "ErrorAddingXmlTvFile": "Ocorreu um erro ao aceder ao ficheiro XMLTV. Por favor, certifique-se que o ficheiro está acessível e tente novamente.", + "ErrorAddingTunerDevice": "Ocorreu um erro ao adicionar o sintonizador. Verifica se está acessível e tenta novamente.", + "ErrorAddingXmlTvFile": "Ocorreu um erro ao aceder ao ficheiro XMLTV. Verifica se o ficheiro existe e está acessível e tenta novamente.", "Episodes": "Episódios", "EndsAtValue": "Termina às {0}", "EnablePhotosHelp": "Imagens serão detectadas e exibidas em conjunto com outros ficheiros multimédia.", @@ -608,14 +608,14 @@ "DirectStreamHelp2": "A energia consumida pela transmissão direta depende normalmente do perfil de áudio. Apenas a transmissão do vídeo é feita sem perdas.", "DefaultSubtitlesHelp": "As legendas são carregadas com base nas definições predefinidas e forçadas para os metadados incorporados. As preferências de idioma são consideradas quando existem múltiplas opções disponíveis.", "DefaultMetadataLangaugeDescription": "Estes são os valores-predefinidos que podem ser personalizados para cada uma das bibliotecas.", - "ErrorDefault": "Ocorreu um erro ao processar o pedido. Por favor, tente novamente mais tarde.", + "ErrorDefault": "Ocorreu um erro ao processar o pedido. Tenta novamente mais tarde.", "Default": "Predefinição", "DeathDateValue": "Faleceu: {0}", "DatePlayed": "Reproduzido a", "DateAdded": "Adicionado a", - "MessageContactAdminToResetPassword": "Contacte o administrador do sistema para redefinir a sua palavra-passe.", - "MessageConfirmRemoveMediaLocation": "Tem a certeza de que deseja remover esta localização?", - "MessageConfirmDeleteTunerDevice": "Tem a certeza de que deseja remover este dispositivo?", + "MessageContactAdminToResetPassword": "Contacta o administrador do sistema para redefinir a tua palavra-passe.", + "MessageConfirmRemoveMediaLocation": "Tens a certeza de que queres remover esta localização?", + "MessageConfirmDeleteTunerDevice": "Tens a certeza de que queres remover este dispositivo?", "UserAgentHelp": "Forneça um 'User-Agent' HTTP personalizado.", "LabelHomeScreenSectionValue": "Secção {0} do painel principal", "LabelHomeNetworkQuality": "Qualidade da rede interna", @@ -627,7 +627,7 @@ "LabelDropShadow": "Realce", "LabelDropImageHere": "Arraste a imagem para aqui, ou clique para procurar.", "LabelDisplayMode": "Modo de apresentação", - "LabelDisplayLanguageHelp": "A tradução do Jellyfin é um projecto em desenvolvimento contínuo.", + "LabelDisplayLanguageHelp": "A tradução do Jellyfin é um projeto em desenvolvimento contínuo.", "LabelDisplayLanguage": "Idioma", "LabelDefaultScreen": "Ecrã predefinido", "LabelDeathDate": "Data de falecimento", @@ -661,7 +661,7 @@ "LabelChannels": "Canais", "XmlTvPathHelp": "Caminho para um ficheiro XMLTV. O Jellyfin vai ler o ficheiro periodicamente para atualizar a programação da TV. O utilizador é responsável pela criação e atualização do ficheiro.", "TV": "TV", - "LiveTV": "TV em Direto", + "LiveTV": "TV em direto", "LabelSelectFolderGroups": "Agrupar automaticamente o conteúdo das seguintes pastas em vistas como Filmes, Música e TV", "HeaderUpcomingOnTV": "A seguir", "HeaderLiveTvTunerSetup": "Configurar sintonizador de TV", @@ -685,7 +685,7 @@ "MessagePluginInstallDisclaimer": "AVISO: A instalação de uma extensão de terceiros acarreta riscos. Ela pode conter código instável ou malicioso e pode ser alterado a qualquer momento. Instala apenas extensões de autores em quem confias e tem em atenção os potenciais efeitos que podem ter, incluindo consultas de serviços externos, análises mais longas da biblioteca ou processamento adicional em segundo plano.", "MessagePluginConfigurationRequiresLocalAccess": "Para configurar esta extensão, inicia sessão localmente no servidor.", "MessagePluginInstalled": "A extensão foi instalada com sucesso. O servidor terá que reiniciar para aplicar as alterações.", - "PleaseRestartServerName": "Por favor, reinicia o Jellyfin no {0}.", + "PleaseRestartServerName": "Reinicia o Jellyfin em {0}.", "PleaseAddAtLeastOneFolder": "Adiciona pelo menos uma pasta a esta biblioteca, clicando no botão '+' na secção 'Pastas'.", "Played": "Reproduzido", "PlayNext": "Reproduzir a seguir", @@ -703,7 +703,7 @@ "OriginalAirDateValue": "Data de estreia original: {0}", "LatestFromLibrary": "Adicionado recentemente em {0}", "HideWatchedContentFromLatestMedia": "Ocultar títulos já vistos da secção \"Conteúdo adicionado recentemente\"", - "MessageUnableToConnectToServer": "Não foi possível estabelecer ligação ao servidor. Por favor, certifique-se de que o servidor está a correr e tente de novo.", + "MessageUnableToConnectToServer": "Não foi possível ligar ao servidor. Verifica se o servidor está em execução e tenta novamente.", "HeaderStartNow": "Iniciar", "HeaderOnNow": "No ar", "Unplayed": "Por reproduzir", @@ -735,7 +735,7 @@ "Uniform": "Uniforme", "Raised": "Alto relevo", "Depressed": "Baixo relevo", - "OptionEnableExternalContentInSuggestionsHelp": "Permitir que trailers da Internet e programas de TV em Direto sejam incluídos no conteúdo sugerido.", + "OptionEnableExternalContentInSuggestionsHelp": "Permitir que trailers da Internet e programas de TV em direto sejam incluídos no conteúdo sugerido.", "H264CrfHelp": "O parâmetro \"Constant Rate Factor\" (CRF) define o nível de qualidade predefinido para os codificadores de software x264 e x265. Os valores possíveis vão de 0 a 51, sendo que valores mais baixos produzem melhor qualidade — à custa de ficheiros maiores. Os valores mais comuns situam-se entre 18 e 28. O valor predefinido para o x264 é 23, e para o x265 é 28, podendo servir como ponto de partida para afinares a qualidade conforme necessário. Codificadores por hardware não utilizam esta definição.", "TabStreaming": "Transmissão", "SimultaneousConnectionLimitHelp": "O número máximo de transmissões simultâneas permitidas. Introduz 0 para não haver limite.", @@ -748,7 +748,7 @@ "News": "Notícias", "Programs": "Programas", "Directors": "Realização", - "ButtonAddImage": "Adicionar Imagem", + "ButtonAddImage": "Adicionar imagem", "LabelOriginalTitle": "Título original", "LabelPostProcessorArgumentsHelp": "Utilizar {path} como caminho para o ficheiro de gravação.", "Hide": "Ocultar", @@ -774,7 +774,7 @@ "LabelPleaseRestart": "As alterações produzirão efeito depois de recarregar a página.", "LabelRecordingPathHelp": "Especifica o caminho predefinido para guardar gravações. Se for deixado em branco, será utilizada a pasta de dados do programa do servidor.", "ColorTransfer": "Transferência de cores", - "ExtractChapterImagesHelp": "Extrair imagens dos capítulos permite aos clientes apresentar menus de seleção de cenas com gráficos. O processo poderá ser lento e exigente em recursos, bem como ocupar múltiplos gigabytes em disco. Este processo é executado quando novos vídeos são encontrados e também através de uma tarefa agendada noturna. É possível configurar a hora de execução para que, idealmente, não coincida com horas de maior utilização.", + "ExtractChapterImagesHelp": "Extrair imagens dos capítulos permite aos clientes mostrar menus gráficos de seleção de cenas. O processo pode ser lento, exigir muitos recursos e ocupar vários gigabytes em disco. É executado quando são encontrados novos vídeos e também através de uma tarefa agendada noturna. Convém configurá-lo para não coincidir com horas de maior uso.", "Features": "Funcionalidades", "HeaderMusicQuality": "Qualidade da música", "HeaderSortBy": "Ordenar por", @@ -815,13 +815,13 @@ "LabelSeriesRecordingPath": "Localização para gravação de séries", "ColorPrimaries": "Cores primárias", "MessageInvalidForgotPasswordPin": "Introduziste um código PIN inválido ou expirado. Tenta novamente.", - "MessageImageTypeNotSelected": "Por favor, selecione um tipo de imagem da lista.", + "MessageImageTypeNotSelected": "Seleciona um tipo de imagem da lista.", "MessageImageFileTypeAllowed": "Apenas são suportados ficheiros JPEG ou PNG.", - "MessageForgotPasswordInNetworkRequired": "Por favor, volte a tentar o processo de redefinição de palavra-passe quando se encontrar dentro da sua rede local.", + "MessageForgotPasswordInNetworkRequired": "Volta a tentar redefinir a palavra-passe quando estiveres dentro da tua rede local.", "MessageForgotPasswordFileCreated": "Foi criado no servidor o ficheiro abaixo que contém instruções de como prosseguir", "MessageDownloadQueued": "Transferência pendente.", "MessageCreateAccountAt": "Criar uma conta em {0}", - "MessageConfirmDeleteGuideProvider": "Tem a certeza de que pretende eliminar este fornecedor de programação de TV?", + "MessageConfirmDeleteGuideProvider": "Tens a certeza de que queres eliminar este fornecedor de programação de TV?", "Menu": "Menu", "MediaIsBeingConverted": "O conteúdo está a ser convertido para um formato compatível com o dispositivo em que o está a reproduzir.", "MediaInfoTimestamp": "Data e Hora", @@ -845,7 +845,7 @@ "LabelKodiMetadataUserHelp": "Autorizar que outras aplicações usem dados de visualização guardados em ficheiros NFO.", "LabelMetadataSaversHelp": "Escolhe os formatos de ficheiro a utilizar para guardar os teus metadados.", "LabelRefreshMode": "Modo de atualização", - "LabelRemoteClientBitrateLimitHelp": "Valor-limite de taxa de transmissão para todos os dispositivos fora da rede local. Este valor é opcional e aplica-se a cada transmissão individual. Ao definir este valor previne que dispositivos peçam uma taxa de transmissão acima da sua ligação à internet. Pedir uma taxa de transmissão acima do limite da ligação implica a necessidade de transcodificar o vídeo e num aumento da carga da CPU.", + "LabelRemoteClientBitrateLimitHelp": "Limite de taxa de bits para todos os dispositivos fora da rede local. Este valor é opcional e aplica-se a cada transmissão individual. Definir este valor evita que os dispositivos peçam uma taxa de bits acima da capacidade da tua ligação à Internet. Se pedirem mais do que a ligação suporta, o vídeo terá de ser transcodificado e a carga no CPU aumentará.", "Home": "Início", "GuideProviderLogin": "Iniciar sessão", "HeaderSubtitleDownloads": "Transferir legendas", @@ -922,8 +922,8 @@ "MetadataSettingChangeHelp": "Alterar as definições de metadados irá afetar apenas conteúdo adicionado no futuro. Para atualizar conteúdo já existente, abre o painel de detalhes e clica no botão 'Recarregar metadados' ou executa uma atualização em massa utilizando o Gestor de metadados.", "MetadataManager": "Gestor de metadados", "MessageUnsetContentHelp": "O conteúdo será mostrado como pastas simples. Para melhores resultados, utilize o gestor de metadados para definir o tipo de conteúdo das sub-pastas.", - "MessagePleaseWait": "Por favor, aguarde. Esta operação poderá demorar alguns instantes.", - "MessagePlayAccessRestricted": "A reprodução deste conteúdo encontra-se, de momento, restrita. Por favor, contacte o administrador do sistema para mais informação.", + "MessagePleaseWait": "Espera um momento. Esta operação pode demorar alguns instantes.", + "MessagePlayAccessRestricted": "A reprodução deste conteúdo está, de momento, restrita. Contacta o administrador do sistema para mais informação.", "MessageNoServersAvailable": "Não foram encontrados servidores através da pesquisa automática.", "MessageNoCollectionsAvailable": "As coleções permitem-te desfrutar de agrupamentos personalizados de filmes, séries e álbuns. Clica no botão '+' para começares a criar coleções.", "MediaInfoLanguage": "Idioma", @@ -1058,7 +1058,7 @@ "LabelStreamType": "Tipo de transmissão", "LabelDroppedFrames": "Fotogramas perdidos", "LabelCorruptedFrames": "Fotogramas corrompidos", - "AllowFfmpegThrottlingHelp": "Suspende o processo de transcodificação assim que este avance o suficiente após o ponto de reprodução atual, para poupar recursos. Esta funcionalidade é mais útil quando a reprodução é maioritariamente contínua, sem avançar ou recuar manualmente. Desative esta opção caso haja problemas de reprodução.", + "AllowFfmpegThrottlingHelp": "Suspende o processo de transcodificação quando este já estiver suficientemente adiantado em relação ao ponto atual de reprodução, para poupar recursos. Isto é mais útil quando vês conteúdo sem andar sempre a avançar ou recuar. Desativa esta opção se houver problemas de reprodução.", "AllowFfmpegThrottling": "Desacelerar transcodificações", "PreferEmbeddedTitlesOverFileNamesHelp": "Determina o título a apresentar quando não é possível carregar metadados locais ou da Internet.", "OptionSaveMetadataAsHiddenHelp": "Alterar esta definição apenas afetará metadados guardados futuramente. Ficheiros existentes serão atualizados assim que forem alterados pelo servidor.", @@ -1083,7 +1083,7 @@ "LabelRequireHttps": "Exigir HTTPS", "LabelStable": "Estável", "LabelChromecastVersion": "Versão do Google Cast", - "LabelLibraryPageSizeHelp": "Define a quantidade de itens a apresentar na página de uma biblioteca. Definir o valor como 0 desativa a paginação. Tenha em atenção que colocar a 0 ou qualquer valor maior do que 100 poderá causar erros ou desempenho reduzido.", + "LabelLibraryPageSizeHelp": "Define a quantidade de itens a mostrar na página de uma biblioteca. Definir o valor como 0 desativa a paginação. Tem em conta que definir 0 ou qualquer valor acima de 100 pode causar erros ou reduzir o desempenho.", "LabelLibraryPageSize": "Tamanho da página da biblioteca", "LabelEnableHttpsHelp": "Escutar na porta HTTPS configurada. Para que esta opção seja ativada, é necessário fornecer um certificado válido.", "LabelEnableHttps": "Ativar HTTPS", @@ -1143,7 +1143,7 @@ "LastSeen": "Última atividade {0}", "PersonRole": "como {0}", "ListPaging": "{0}-{1} de {2}", - "WriteAccessRequired": "O Jellyfin necessita de acesso de escrita a esta pasta. Garanta acesso de escrita e tente novamente.", + "WriteAccessRequired": "O Jellyfin precisa de acesso de escrita a esta pasta. Garante que tem permissão de escrita e tenta novamente.", "PathNotFound": "Não foi possível encontrar a localização. Certifica-te de que o caminho é válido e tenta novamente.", "Writers": "Autoria", "ViewAlbumArtist": "Ver artista do álbum", @@ -1153,7 +1153,7 @@ "TvLibraryHelp": "Consulte o {0}guia de nomenclatura de TV{1}.", "TabNetworking": "Rede", "TabRepositories": "Repositórios", - "SyncPlayAccessHelp": "A funcionalidade SyncPlay permite que sincronize a reprodução com outros dispositivos. Selecione o nível de acesso que este utilizador terá ao SyncPlay.", + "SyncPlayAccessHelp": "O SyncPlay permite sincronizar a reprodução com outros dispositivos. Seleciona o nível de acesso que este utilizador terá ao SyncPlay.", "Subtitle": "Legenda", "SubtitleOffset": "Desvio das legendas", "SubtitleDownloadersHelp": "Ativa e ordena os teus fornecedores de legendas preferidos por ordem de prioridade.", @@ -1164,7 +1164,7 @@ "New": "Novo", "ShowMore": "Mostrar mais", "ShowLess": "Mostrar menos", - "SettingsWarning": "Alterar estes valores poderá causar instabilidade ou falhas de ligação. Se ocorrer algum problema, recomendamos que os voltes a alterar para os valores predefinidos.", + "SettingsWarning": "Alterar estes valores pode causar instabilidade ou falhas de ligação. Se surgir algum problema, volta a colocá-los nos valores predefinidos.", "SelectServer": "Selecionar Servidor", "Season": "Temporada", "Restart": "Reiniciar", @@ -1173,8 +1173,8 @@ "QuickConnectNotActive": "A Ligação Rápida não está ativa neste servidor", "QuickConnectNotAvailable": "Pede ao administrador do servidor para ativar a Ligação Rápida", "QuickConnectInvalidCode": "Código de Ligação Rápida inválido", - "QuickConnectDescription": "Para iniciar sessão com a Ligação Rápida, clica no botão \"Ligação Rápida\" no dispositivo a partir do qual estás a iniciar sessão e introduz o código apresentado abaixo.", - "QuickConnectDeactivated": "A Ligação Rápida foi desativada antes do pedido de início de sessão ser aprovado", + "QuickConnectDescription": "Para iniciares sessão com a Ligação Rápida, clica no botão \"Ligação Rápida\" no dispositivo onde queres iniciar sessão e introduz o código apresentado abaixo.", + "QuickConnectDeactivated": "A Ligação Rápida foi desativada antes de o pedido de início de sessão ser aprovado", "QuickConnectAuthorizeFail": "Código de Ligação Rápida desconhecido", "QuickConnectAuthorizeSuccess": "Autenticaste o teu dispositivo com sucesso!", "QuickConnectAuthorizeCode": "Introduz o código {0} para iniciar sessão", @@ -1191,7 +1191,7 @@ "PlaybackRate": "Velocidade de reprodução", "Photo": "Fotografia", "Person": "Pessoa", - "OptionRequirePerfectSubtitleMatchHelp": "Solicitar uma combinação perfeita filtrará as legendas para apenas as que tenham sido testadas e verificadas com seu ficheiro de vídeo. Desmarcar esta opção aumenta a probabilidade de transferência de legendas, aumentando também o número de casos de dessincronia de tempos ou textos incorrectos.", + "OptionRequirePerfectSubtitleMatchHelp": "Exigir uma correspondência perfeita vai filtrar as legendas para mostrar apenas as que foram testadas e verificadas com o teu ficheiro de vídeo. Desmarcar esta opção aumenta a probabilidade de encontrares legendas, mas também aumenta o risco de haver legendas dessincronizadas ou com texto incorreto.", "OptionMaxActiveSessionsHelp": "O valor 0 desativa esta funcionalidade.", "OptionMaxActiveSessions": "Definir o número máximo de sessões de utilizador simultâneas.", "Other": "Outro", @@ -1219,13 +1219,13 @@ "MessageAddRepository": "Caso deseje adicionar um repositório, carregue no botão ao lado do cabeçalho e preencha a informação pedida.", "LabelRepositoryNameHelp": "Nome personalizado para distinguir este repositório de outros presentes no servidor.", "LabelRepositoryName": "Nome do Repositório", - "LabelRepositoryUrlHelp": "Localização do manifesto do repositório que deseja incluir.", + "LabelRepositoryUrlHelp": "Localização do manifesto do repositório que queres incluir.", "LabelUserMaxActiveSessions": "Número máximo de sessões de utilizador em simultâneo", "LabelQuickConnectCode": "Código de Ligação Rápida", "LabelUnstable": "Instável", "LabelKnownProxies": "Proxies conhecidos", "LabelCurrentStatus": "Estado atual", - "KnownProxiesHelp": "Lista separada por vírgulas de endereços IP, ou nomes de anfitrião, de proxies usados para ligar ao seu servidor Jellyfin. Sem esta informação os cabeçalhos \"X-Forwarded-For\" não funcionarão correctamente. É necessário reiniciar o servidor para que as alterações façam efeito.", + "KnownProxiesHelp": "Lista separada por vírgulas de endereços IP ou nomes de anfitrião dos proxies utilizados para ligar ao teu servidor Jellyfin. Sem esta informação, os cabeçalhos \"X-Forwarded-For\" não funcionarão corretamente. É preciso reiniciar o servidor para aplicar as alterações.", "Image": "Imagem", "LabelTonemappingParamHelp": "Ajusta o algoritmo de mapeamento de tons. Exceto em casos específicos, é recomendado deixar este campo em branco.", "LabelTonemappingParam": "Parâmetros do mapeamento de tons", @@ -1239,7 +1239,7 @@ "AllowTonemappingHelp": "O mapeamento de tons pode transformar a gama dinâmica de um vídeo de HDR para SDR, mantendo os detalhes e as cores da imagem, que são informações muito importantes para representar a cena original. Atualmente funciona apenas com vídeos HDR10 de 10 bits, HLG e DoVi. Isso requer o tempo de execução GPGPU correspondente.", "LabelMaxMuxingQueueSizeHelp": "Número máximo de pacotes que podem ser armazenados em buffer enquanto espera que todas as transmissões sejam inicializadas. Tenta aumentá-lo se ainda encontrares o erro \"Demasiados pacotes armazenados em buffer para o fluxo de saída\" nos registos do FFmpeg. O valor recomendado é 2048.", "DeleteAll": "Eliminar tudo", - "DeleteDevicesConfirmation": "Tens a certeza de que pretendes eliminar todos os dispositivos? Todas as outras sessões serão encerradas. Os dispositivos voltarão a aparecer da próxima vez que um utilizador iniciar sessão.", + "DeleteDevicesConfirmation": "Tens a certeza de que queres eliminar todos os dispositivos? Todas as outras sessões serão encerradas. Os dispositivos voltarão a aparecer da próxima vez que um utilizador iniciar sessão.", "Bwdif": "Filtro de Desentrelação Bob Weaver (BWDIF)", "LabelAudioInfo": "Informações de áudio", "LabelPlaybackInfo": "Informações de reprodução", @@ -1409,12 +1409,12 @@ "AllowEmbeddedSubtitlesAllowAllOption": "Permitir todos os tipos", "AllowEmbeddedSubtitlesHelp": "Desativar as legendas que estão empacotadas em contentores multimédia. Requer uma atualização completa da biblioteca.", "AllowEmbeddedSubtitles": "Desativar diferentes tipos de legendas embutidas", - "PlaybackErrorPlaceHolder": "Isto é um item falso para um suporte físico que o Jellyfin não consegue reproduzir. Por favor, insira o disco para reproduzir.", + "PlaybackErrorPlaceHolder": "Isto é um item de marcador para um suporte físico que o Jellyfin não consegue reproduzir. Insere o disco para o reproduzir.", "OtherArtist": "Outro artista", "OriginalAirDate": "Data de lançamento original", "NextChapter": "Próximo capítulo", "Mixer": "Mistura", - "MessageUnauthorizedUser": "Neste momento, não está autorizado a aceder a este servidor. Por favor, contacte o administrador do servidor para mais informações.", + "MessageUnauthorizedUser": "Neste momento, não tens autorização para aceder a este servidor. Contacta o administrador do servidor para mais informações.", "MessageSent": "Mensagem enviada.", "MediaInfoTitle": "Título", "Lyricist": "Letras", @@ -1423,7 +1423,7 @@ "LabelSyncPlaySettingsExtraTimeOffsetHelp": "Ajusta o desvio (em milissegundos) para o dispositivo selecionado para sincronização de tempo. Altere com cuidado.", "LabelSyncPlaySettingsExtraTimeOffset": "Tempo de desvio extra", "Bold": "Negrito", - "LabelSyncPlaySettingsSkipToSyncHelp": "Método de correção de sincronização que consiste em saltar para a posição de reprodução estimada. A Correção de Sincronização deverá estar ativada.", + "LabelSyncPlaySettingsSkipToSyncHelp": "Método de correção de sincronização que consiste em saltar para a posição de reprodução estimada. A correção de sincronização tem de estar ativada.", "LabelSyncPlaySettingsSkipToSync": "Ativar SkipToSync", "LabelSyncPlaySettingsSpeedToSyncHelp": "Método de correção de sincronização que consiste em acelerar a reprodução. A Correção de Sincronização tem de estar ativada.", "LabelSyncPlaySettingsMinDelaySkipToSyncHelp": "Atraso mínimo (em milisegundos) que o \"SkipToSync \" levará para tentar corrigir a posição de reprodução.", @@ -1465,7 +1465,7 @@ "VideoBitrateNotSupported": "A taxa de bits deste vídeo não é suportada", "AudioIsExternal": "A transmissão de áudio é externa", "LabelHardwareEncodingOptions": "Opções de codificação opor hardware", - "IntelLowPowerEncHelp": "A codificação Low-Power poderá manter sincronizações CPU-GPU desnecessárias. A opção deverá estar desativada no Linux se o firmware i915 HuC não estiver configurado.", + "IntelLowPowerEncHelp": "A codificação Low-Power pode manter sincronizações CPU-GPU desnecessárias. Esta opção deve estar desativada no Linux se o firmware i915 HuC não estiver configurado.", "EnableIntelLowPowerHevcHwEncoder": "Ativar o codificador HEVC Low-Power da Intel", "EnableIntelLowPowerH264HwEncoder": "Ativar o codificador de hardware H.264 de baixo consumo da Intel", "PreferSystemNativeHwDecoder": "Preferir os codecs de hardware DXVA / VA-API nativos do sistema operativo", @@ -1856,8 +1856,8 @@ "StorageType.Removable": "Removível", "LabelImageCache": "Cache de imagens", "LiveTVPageLoadError": "Falha ao carregar a página de gravações", - "ConnectAnyway": "Conectar na mesma", - "MessageServerMismatch": "O servidor ao qual se está a conectar não é o mesmo servidor ao qual estava conectado previamente neste endereço. Se isto é o esperado, por favor selecione \"Conectar na mesma\". Caso contrário, a sua ligação ou o servidor podem ter sido comprometidos.", + "ConnectAnyway": "Ligar na mesma", + "MessageServerMismatch": "O servidor ao qual te estás a ligar não é o mesmo ao qual estavas ligado anteriormente neste endereço. Se isso for esperado, seleciona \"Ligar na mesma\". Caso contrário, a tua ligação ou o servidor podem ter sido comprometidos.", "HeaderServerMismatch": "Discrepância de Servidores", "LabelAvailable": "Disponível", "LabelBundled": "Incluído", @@ -1904,5 +1904,6 @@ "LabelTargetCodecs": "Codecs de destino", "LabelProgressAndSpeed": "Progresso / velocidade", "LabelReasons": "Motivos", - "OnFilesystem": "No sistema de ficheiros: {0}" + "OnFilesystem": "No sistema de ficheiros: {0}", + "LabelSyncPlayJoinGroup": "Juntar-se a um grupo" } From 5b2781bb48f55858218caff1dcf65f121ecfa1e3 Mon Sep 17 00:00:00 2001 From: Vincenzo Reale Date: Mon, 20 Apr 2026 03:18:48 -0400 Subject: [PATCH 148/695] Translated using Weblate (Italian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/it/ --- src/strings/it.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/it.json b/src/strings/it.json index 125538ad96..696b5f64a7 100644 --- a/src/strings/it.json +++ b/src/strings/it.json @@ -1904,5 +1904,6 @@ "LabelProgressAndSpeed": "Avanzamento / velocità", "LabelReasons": "Motivi", "LabelPlayerSizes": "Dimensioni del lettore", - "LabelPlaybackQuality": "Fotogramma scartato / danneggiato" + "LabelPlaybackQuality": "Fotogramma scartato / danneggiato", + "LabelSyncPlayJoinGroup": "Unisciti al gruppo" } From 0ead7298ea3555b6f0735a874aec46cf25a07ad4 Mon Sep 17 00:00:00 2001 From: Jonas Anderberg Date: Mon, 20 Apr 2026 02:26:25 -0400 Subject: [PATCH 149/695] Translated using Weblate (Swedish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/ --- src/strings/sv.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/sv.json b/src/strings/sv.json index aa3b8145ee..f548c6a02e 100644 --- a/src/strings/sv.json +++ b/src/strings/sv.json @@ -1894,5 +1894,6 @@ "LabelExternalServerUriHelp": "Publicerade servrar för extern URI-access.", "BrandingLoadError": "Misslyckades att ladda märkesinställningar", "ResumeLoadError": "Kunde inte ladda inställningarna för återupptagning", - "TrickplayLoadError": "Kunde inte ladda inställningar för trickplay" + "TrickplayLoadError": "Kunde inte ladda inställningar för trickplay", + "LabelSyncPlayJoinGroup": "Anslut till gruppen" } From e6d2b96570b07d72fd92843747c233ff09fffe93 Mon Sep 17 00:00:00 2001 From: DyingSlacker <2391773977@outlook.com> Date: Mon, 20 Apr 2026 02:12:37 -0400 Subject: [PATCH 150/695] Translated using Weblate (Chinese (Simplified Han script)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/ --- src/strings/zh-cn.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index 66dd9744b9..51c077705e 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -1904,5 +1904,6 @@ "LabelPlayerSizes": "播放器尺寸", "LabelProgressAndSpeed": "进度 / 速率", "LabelPlaybackQuality": "丢帧 / 坏帧", - "OnFilesystem": "在文件系统上:{0}" + "OnFilesystem": "在文件系统上:{0}", + "LabelSyncPlayJoinGroup": "加入群组" } From 0460b3beee6b3b5138ff8d6c86c590a084e9c27f Mon Sep 17 00:00:00 2001 From: GolanGitHub Date: Mon, 20 Apr 2026 07:41:42 -0400 Subject: [PATCH 151/695] Translated using Weblate (Spanish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/ --- src/strings/es.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/es.json b/src/strings/es.json index 554cfbfc84..8b29bee7df 100644 --- a/src/strings/es.json +++ b/src/strings/es.json @@ -1904,5 +1904,6 @@ "LabelReasons": "Razones", "LabelPlayerSizes": "Tamaño del reproductor", "LabelPlaybackQuality": "Fotogramas perdidos / corruptos", - "OnFilesystem": "En el sistema de archivos: {0}" + "OnFilesystem": "En el sistema de archivos: {0}", + "LabelSyncPlayJoinGroup": "Unirse al grupo" } From 49c19ffddd0019af6474e8eae655dff7ed64dd20 Mon Sep 17 00:00:00 2001 From: Gallyam Biktashev Date: Mon, 20 Apr 2026 06:57:25 -0400 Subject: [PATCH 152/695] Translated using Weblate (Russian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/ --- src/strings/ru.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/ru.json b/src/strings/ru.json index daa80ed1d2..7d7426c4f9 100644 --- a/src/strings/ru.json +++ b/src/strings/ru.json @@ -1904,5 +1904,6 @@ "LabelProgressAndSpeed": "Прогресс / скорость", "LabelReasons": "Причины", "LabelPlayerSizes": "Размеры плеера", - "LabelPlaybackQuality": "Кадров пропущено / повреждено" + "LabelPlaybackQuality": "Кадров пропущено / повреждено", + "LabelSyncPlayJoinGroup": "Присоединиться к группе" } From 519eb00b694081f2141ba847d107b4bd4f71463d Mon Sep 17 00:00:00 2001 From: kscop-n1 Date: Mon, 20 Apr 2026 11:46:33 -0400 Subject: [PATCH 153/695] Translated using Weblate (Ukrainian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/uk/ --- src/strings/uk.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/uk.json b/src/strings/uk.json index 0a6f2556be..2600ae8328 100644 --- a/src/strings/uk.json +++ b/src/strings/uk.json @@ -1904,5 +1904,6 @@ "LabelProgressAndSpeed": "Прогрес / швидкість", "LabelReasons": "Причини", "LabelPlayerSizes": "Розміри плеєра", - "LabelPlaybackQuality": "Втрачено / пошкоджено кадрів" + "LabelPlaybackQuality": "Втрачено / пошкоджено кадрів", + "LabelSyncPlayJoinGroup": "Приєднатися до групи" } From 59e922bd3acfb9cde15c10a3df8273b26170c18f Mon Sep 17 00:00:00 2001 From: Violet Caulfield <42452695+anultravioletaurora@users.noreply.github.com> Date: Mon, 20 Apr 2026 20:15:17 -0500 Subject: [PATCH 154/695] add missing useEffect dep --- src/elements/emby-itemscontainer/ItemsContainer.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/elements/emby-itemscontainer/ItemsContainer.tsx b/src/elements/emby-itemscontainer/ItemsContainer.tsx index c3d266f038..35f25b75c6 100644 --- a/src/elements/emby-itemscontainer/ItemsContainer.tsx +++ b/src/elements/emby-itemscontainer/ItemsContainer.tsx @@ -415,6 +415,7 @@ const ItemsContainer: FC> = ({ }; }, [ api, + subscribe, destroyDragReordering, destroyMultiSelect, initDragReordering, From ebb03487787d37802ee68a472e447f2e7eae6a95 Mon Sep 17 00:00:00 2001 From: Violet Caulfield <42452695+anultravioletaurora@users.noreply.github.com> Date: Mon, 20 Apr 2026 21:18:29 -0500 Subject: [PATCH 155/695] missing useEffect dependencies, getting JS -> SDK bridge to cooperate with WebSockets --- .../dashboard/features/tasks/hooks/useLiveTasks.ts | 2 +- src/lib/jellyfin-apiclient/ServerConnections.js | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/apps/dashboard/features/tasks/hooks/useLiveTasks.ts b/src/apps/dashboard/features/tasks/hooks/useLiveTasks.ts index 2fc10efeff..c0e98a1030 100644 --- a/src/apps/dashboard/features/tasks/hooks/useLiveTasks.ts +++ b/src/apps/dashboard/features/tasks/hooks/useLiveTasks.ts @@ -13,7 +13,7 @@ const useLiveTasks = (params: ScheduledTasksApiGetTasksRequest) => { return api?.subscribe([OutboundWebSocketMessageType.ScheduledTasksInfo], ({ Data }) => { queryClient.setQueryData([ QUERY_KEY ], Data ?? []); }); - }, []); + }, [api]); return tasksQuery; }; diff --git a/src/lib/jellyfin-apiclient/ServerConnections.js b/src/lib/jellyfin-apiclient/ServerConnections.js index abe70923bc..3aab7fc4aa 100644 --- a/src/lib/jellyfin-apiclient/ServerConnections.js +++ b/src/lib/jellyfin-apiclient/ServerConnections.js @@ -58,6 +58,17 @@ class ServerConnections extends ConnectionManager { if (!_sdkApi) { _sdkApi = toApi(apiClient); } + + // Keep the SDK Api's access token in sync with the legacy client. + // The first subscribe call may happen before authentication completes + // (e.g. from notifications.js at module load time), leaving _sdkApi + // with no token and a WebSocket that never connects. Calling update() + // triggers WebSocketService.updateUrl() which reconnects automatically. + const accessToken = apiClient.accessToken(); + if (accessToken && _sdkApi.accessToken !== accessToken) { + _sdkApi.update({ accessToken }); + } + return _sdkApi.subscribe(messageTypes, onMessage, subscriptionIntervals); }; }); From 44c3a210cd6afa4d7b5daf87207a95514fad5cc3 Mon Sep 17 00:00:00 2001 From: Phillycodes Date: Tue, 21 Apr 2026 01:42:13 -0400 Subject: [PATCH 156/695] Translated using Weblate (Haitian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ht/ --- src/strings/ht.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/ht.json b/src/strings/ht.json index 2d9321ee77..3f4b6c8c65 100644 --- a/src/strings/ht.json +++ b/src/strings/ht.json @@ -98,5 +98,7 @@ "ButtonQuickStartGuide": "Gid Konfigirasyon", "ButtonParentalControl": "Kontwòl paran", "ButtonPlayer": "Pleyè", - "ButtonPreviousTrack": "Trak anvan" + "ButtonPreviousTrack": "Trak anvan", + "AccessRestrictedTryAgainLater": "Aksè kounye a restriksyon. Tanpri eseye ankò pita.", + "ActivitiesLoadError": "Echèk pou chaje aktivite yo" } From b22717a1ecec5a59b03af014facc9bb0cb54c195 Mon Sep 17 00:00:00 2001 From: theguymadmax Date: Tue, 21 Apr 2026 10:24:55 -0400 Subject: [PATCH 157/695] Apply review suggestions --- .../components/library/SortButton.tsx | 38 ++++++++----------- src/hooks/useFetchItems.ts | 4 +- 2 files changed, 18 insertions(+), 24 deletions(-) diff --git a/src/apps/experimental/components/library/SortButton.tsx b/src/apps/experimental/components/library/SortButton.tsx index 3a27f00b18..201bc2562f 100644 --- a/src/apps/experimental/components/library/SortButton.tsx +++ b/src/apps/experimental/components/library/SortButton.tsx @@ -50,6 +50,18 @@ const photosOrPhotoAlbumsOptions = [ { label: 'OptionDateAdded', value: ItemSortBy.DateCreated } ]; +const videoOrMusicVideoOptions = [ + { label: 'Name', value: ItemSortBy.SortName }, + { label: 'OptionRandom', value: ItemSortBy.Random }, + { label: 'OptionCommunityRating', value: ItemSortBy.CommunityRating }, + { label: 'OptionDateAdded', value: ItemSortBy.DateCreated }, + { label: 'OptionDatePlayed', value: ItemSortBy.DatePlayed }, + { label: 'OptionParentalRating', value: ItemSortBy.OfficialRating }, + { label: 'OptionPlayCount', value: ItemSortBy.PlayCount }, + { label: 'OptionReleaseDate', value: ItemSortBy.PremiereDate }, + { label: 'Runtime', value: ItemSortBy.Runtime } +]; + const sortOptionsMapping: SortOptionsMapping = { [LibraryTab.Movies]: movieOrFavoriteOptions, [LibraryTab.Collections]: collectionMovieOptions, @@ -113,28 +125,8 @@ const sortOptionsMapping: SortOptionsMapping = { ], [LibraryTab.PhotoAlbums]: photosOrPhotoAlbumsOptions, [LibraryTab.Photos]: photosOrPhotoAlbumsOptions, - [LibraryTab.Videos]: [ - { label: 'Name', value: ItemSortBy.SortName }, - { label: 'OptionRandom', value: ItemSortBy.Random }, - { label: 'OptionCommunityRating', value: ItemSortBy.CommunityRating }, - { label: 'OptionDateAdded', value: ItemSortBy.DateCreated }, - { label: 'OptionDatePlayed', value: ItemSortBy.DatePlayed }, - { label: 'OptionParentalRating', value: ItemSortBy.OfficialRating }, - { label: 'OptionPlayCount', value: ItemSortBy.PlayCount }, - { label: 'OptionReleaseDate', value: ItemSortBy.PremiereDate }, - { label: 'Runtime', value: ItemSortBy.Runtime } - ], - [LibraryTab.MusicVideos]: [ - { label: 'Name', value: ItemSortBy.SortName }, - { label: 'OptionRandom', value: ItemSortBy.Random }, - { label: 'OptionCommunityRating', value: ItemSortBy.CommunityRating }, - { label: 'OptionDateAdded', value: ItemSortBy.DateCreated }, - { label: 'OptionDatePlayed', value: ItemSortBy.DatePlayed }, - { label: 'OptionParentalRating', value: ItemSortBy.OfficialRating }, - { label: 'OptionPlayCount', value: ItemSortBy.PlayCount }, - { label: 'OptionReleaseDate', value: ItemSortBy.PremiereDate }, - { label: 'Runtime', value: ItemSortBy.Runtime } - ], + [LibraryTab.Videos]:videoOrMusicVideoOptions, + [LibraryTab.MusicVideos]:videoOrMusicVideoOptions, [LibraryTab.Folders]: [ { label: 'Name', value: ItemSortBy.SortName }, { label: 'OptionRandom', value: ItemSortBy.Random }, @@ -270,7 +262,7 @@ const SortButton: FC = ({ {sortOrderMenuOptions.map((option) => ( - {option.label} + {globalize.translate(option.label)} ))} diff --git a/src/hooks/useFetchItems.ts b/src/hooks/useFetchItems.ts index d3e927996c..c7279a8b74 100644 --- a/src/hooks/useFetchItems.ts +++ b/src/hooks/useFetchItems.ts @@ -317,7 +317,9 @@ const fetchGetItemsViewByType = async ( ...getFiltersQuery(viewType, libraryViewSettings), ...getLimitQuery(), ...getAlphaPickerQuery(libraryViewSettings), - sortBy: [libraryViewSettings.SortBy], + sortBy: libraryViewSettings.SortBy === ItemSortBy.IsFolder ? + [ItemSortBy.IsFolder, ItemSortBy.SortName] : + [libraryViewSettings.SortBy], sortOrder: [libraryViewSettings.SortOrder], includeItemTypes: itemType, startIndex: libraryViewSettings.StartIndex From 97b3f047a0e26bbb3b57cea2e6c004a3faf2afb9 Mon Sep 17 00:00:00 2001 From: Lofuuzi Date: Tue, 21 Apr 2026 11:03:11 -0400 Subject: [PATCH 158/695] Translated using Weblate (Chinese (Traditional Han script, Hong Kong)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant_HK/ --- src/strings/zh-hk.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/strings/zh-hk.json b/src/strings/zh-hk.json index e997b53c8e..68c1ff45e8 100644 --- a/src/strings/zh-hk.json +++ b/src/strings/zh-hk.json @@ -1200,7 +1200,7 @@ "LabelDisableVbrAudioEncoding": "熄咗 VBR 音訊編碼", "LabelDuration": "時長", "LabelEnableLUFSScan": "啟用 LUFS 掃描", - "LabelEnablePlugin": "啓用外掛程式", + "LabelEnablePlugin": "啟用外掛程式", "LabelFallbackMaxStreamingBitrate": "串流位元率回退值 (Mbps)", "LabelGroupShowsIntoCollectionsHelp": "喺顯示影集清單嗰陣,屬於同一個系列嘅影集會合併埋一齊顯示。", "LabelImageCache": "圖片快取", @@ -1232,8 +1232,8 @@ "LabelSyncPlaySettingsSpeedToSyncDurationHelp": "SpeedToSync 校正播放位置嗰陣會用嘅時間(毫秒)。", "LabelSyncPlaySettingsMinDelaySkipToSync": "SkipToSync 最低延遲", "LabelSyncPlaySettingsMinDelaySkipToSyncHelp": "SkipToSync 功能嘗試自動修正播放進度時,所需要嘅最低延遲時間(以毫秒計)。", - "LabelSyncPlaySettingsSpeedToSync": "啓用SpeedToSync", - "LabelSyncPlaySettingsSkipToSync": "啓用SkipToSync", + "LabelSyncPlaySettingsSpeedToSync": "啟用SpeedToSync", + "LabelSyncPlaySettingsSkipToSync": "啟用SkipToSync", "LabelTextWeight": "字體粗幼", "Producer": "製片人", "Studio": "工作室", @@ -1283,7 +1283,7 @@ "EnableLibrary": "啟用媒體櫃", "EnableLibraryHelp": "停用呢個媒體櫃,所有用家都睇唔到佢。", "EnableSmoothScroll": "啟用平滑捲動", - "EnableTrueHd": "啓用TrueHD", + "EnableTrueHd": "啟用TrueHD", "EnableTrueHdHelp": "除非你部裝置支援 TrueHD,或者已經連線去部相容嘅音訊接收器,若唔係就冇開呢個功能,費事播唔到片。", "ErrorDeletingLyrics": "從伺服器刪走歌詞嗰陣出咗錯。唔該check吓 Jellyfin 喺個媒體資料夾係咪有寫入權限,然後再試。", "FallbackMaxStreamingBitrateHelp": "當 ffprobe 判斷唔到來源串流位元率嗰陣,就會用「最大串流位元率」做後備。咁樣可以防止用戶端請求過高嘅轉碼位元率,避免播放失敗或者令編碼器過載。", @@ -1545,7 +1545,7 @@ "SeriesDisplayOrderHelp": "設定劇集嘅排序方式,例如以播出日期、DVD 順序或者絕對編號。", "ProductionLocations": "出品地", "Runtime": "播放時長", - "QuickConnectActivationSuccessful": "啓用成功", + "QuickConnectActivationSuccessful": "啟用成功", "QuickConnectAuthorizeCode": "輸入「快速連線」驗證冧把 {0} 嚟登入", "QuickConnectAuthorizeFail": "搵唔到呢個「快速連線」冧把", "QuickConnectAuthorizeSuccess": "你部裝置經已認證成功!", From 518ba15ce17f4b14cdba3610e0c69528196e7b7a Mon Sep 17 00:00:00 2001 From: David Stensland Date: Tue, 21 Apr 2026 17:03:21 -0700 Subject: [PATCH 159/695] Disable sonarjs/aws-restricted-ip-admin-access lint rule This lint rule contributes ~12 seconds to lint time on my machine, the single largest contribution by any rule. The documentation for this rule seems to have been taken down, but reading [the source][1] suggests that it makes sure that AWS CDK resources are firewalled. That is not even close to relevant to this project. To time lints I ran `time env TIMING=1 npm run lint` Lint time before ``` Rule | Time (ms) | Relative :--------------------------------------|----------:|--------: sonarjs/aws-restricted-ip-admin-access | 12797.845 | 17.5% compat/compat | 10690.637 | 14.7% import/namespace | 10472.175 | 14.4% @typescript-eslint/no-deprecated | 10426.921 | 14.3% sonarjs/no-redundant-assignments | 2606.446 | 3.6% sonarjs/no-dead-store | 2232.571 | 3.1% sonarjs/no-async-constructor | 1241.067 | 1.7% @typescript-eslint/naming-convention | 1027.749 | 1.4% @stylistic/indent | 998.776 | 1.4% import/default | 995.802 | 1.4% ________________________________________________________ Executed in 90.29 secs fish external usr time 113.99 secs 39.00 micros 113.99 secs sys time 2.69 secs 981.00 micros 2.69 secs ``` Lint time after: ``` Rule | Time (ms) | Relative :------------------------------------|----------:|--------: @typescript-eslint/no-deprecated | 10757.130 | 17.9% import/namespace | 10374.169 | 17.2% compat/compat | 9974.127 | 16.6% sonarjs/no-redundant-assignments | 2702.038 | 4.5% sonarjs/no-dead-store | 2266.311 | 3.8% sonarjs/no-async-constructor | 1264.104 | 2.1% @stylistic/indent | 1000.857 | 1.7% import/default | 990.011 | 1.6% @typescript-eslint/naming-convention | 888.189 | 1.5% sonarjs/argument-type | 837.332 | 1.4% ________________________________________________________ Executed in 78.15 secs fish external usr time 100.32 secs 0.18 millis 100.32 secs sys time 2.79 secs 1.01 millis 2.79 secs ``` [1]: https://github.com/SonarSource/SonarJS/blob/e669e615fa81c15e64161a139a8096037613c65d/packages/analysis/src/jsts/rules/S6321/rule.ts --- eslint.config.mjs | 1 + 1 file changed, 1 insertion(+) diff --git a/eslint.config.mjs b/eslint.config.mjs index d4b1d1f5b2..f5d8c414b1 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -103,6 +103,7 @@ export default tseslint.config( 'sonarjs/no-inverted-boolean-check': 'error', 'sonarjs/no-selector-parameter': 'off', 'sonarjs/pseudo-random': 'warn', + 'sonarjs/aws-restricted-ip-admin-access': 'off', // TODO: Enable the following sonarjs rules and fix issues 'sonarjs/no-duplicate-string': 'off', 'sonarjs/no-nested-functions': 'warn', From 3139a6fe9f7afa605c57b1da4c034783d868e133 Mon Sep 17 00:00:00 2001 From: queeup Date: Wed, 22 Apr 2026 03:43:26 -0400 Subject: [PATCH 160/695] Translated using Weblate (Turkish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/tr/ --- src/strings/tr.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/tr.json b/src/strings/tr.json index 908f01d3c3..da34dc36aa 100644 --- a/src/strings/tr.json +++ b/src/strings/tr.json @@ -1739,8 +1739,8 @@ "ReplaceTrickplayImages": "Mevcut hızlı önizleme görsellerini değiştirin", "AllowFmp4TranscodingContainerHelp": "HEVC ve HDR içeriklerini etkinleştirmek için bu alıcının fMP4 kod dönüştürme kapsayıcısına izin verin. Tüm alıcılar bu kapsayıcı ile uyumlu değildir. Oynatma sorunları yaşarsanız bunu devre dışı bırakın.", "AllowStreamSharingHelp": "Jellyfin'in alıcıdan gelen mpegts akışını çoğaltmasına ve bu çoğaltılmış akışı istemcileriyle paylaşmasına izin verin. Bu, alıcının toplam akış sayısı sınırına sahip olduğunda kullanışlıdır, ancak oynatma sorunlarına da neden olabilir.", - "AlwaysBurnInSubtitleWhenTranscoding": "Kod dönüştürürken her zaman altyazıyı yaz", - "AlwaysBurnInSubtitleWhenTranscodingHelp": "Kod dönüştürme tetiklendiğinde tüm altyazıları göm. Bu, kod dönüştürme işleminden sonra altyazı senkronizasyonunun sağlanması anlamına gelir ancak kod dönüştürme hızının düşmesine neden olur.", + "AlwaysBurnInSubtitleWhenTranscoding": "Kod dönüştürürken her zaman altyazıyı videoya yaz", + "AlwaysBurnInSubtitleWhenTranscodingHelp": "Kod dönüştürme tetiklendiğinde tüm altyazıları videoya yaz. Bu, kod dönüştürme işleminden sonra altyazı senkronizasyonunun sağlanması anlamına gelir ancak kod dönüştürme hızının düşmesine neden olur.", "HeaderMediaSegmentActions": "Medya Segmenti Eylemleri", "MoviesAndShows": "Filmler ve Diziler", "MediaSegmentType.Intro": "İntro", From 6a444bb8ae2f6e093f5ba6a042474f31bfc59595 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Wed, 22 Apr 2026 09:18:37 -0400 Subject: [PATCH 161/695] Fix backdrop size changing on mobile --- src/components/backdrop/backdrop.scss | 6 ++++++ src/styles/librarybrowser.scss | 9 --------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/components/backdrop/backdrop.scss b/src/components/backdrop/backdrop.scss index 743fe72df8..5038918433 100644 --- a/src/components/backdrop/backdrop.scss +++ b/src/components/backdrop/backdrop.scss @@ -1,5 +1,11 @@ .backdropContainer { contain: layout style size; + position: fixed; + top: 0; + left: 0; + right: 0; + height: 100vh; + z-index: -1; } .backdropImage { diff --git a/src/styles/librarybrowser.scss b/src/styles/librarybrowser.scss index 1c48779b99..f88635bf37 100644 --- a/src/styles/librarybrowser.scss +++ b/src/styles/librarybrowser.scss @@ -441,15 +441,6 @@ } } -.backdropContainer { - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - z-index: -1; -} - .libraryPage .header { padding-bottom: 0; } From 0b375d98ee9cb018e1dd99578008cdd32d552371 Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Thu, 23 Apr 2026 01:52:10 -0400 Subject: [PATCH 162/695] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 9b62959a80..35a822d2eb 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -1017,7 +1017,7 @@ "LabelSyncPlayNewGroupDescription": "Crea un grup nou", "LabelSyncPlayNewGroup": "Grup nou", "LabelSyncPlayLeaveGroupDescription": "Desactiva SyncPlay", - "LabelSyncPlayLeaveGroup": "Surt del grup", + "LabelSyncPlayLeaveGroup": "Sortiu del grup", "LabelSyncPlayHaltPlaybackDescription": "I ignora les actualitzacions de la llista de reproducció", "LabelSyncPlayHaltPlayback": "Atura la reproducció local", "LabelSyncPlayAccessNone": "S'ha desactivat per a aquest usuari", @@ -1904,5 +1904,6 @@ "LabelProgressAndSpeed": "Progrés / velocitat", "LabelReasons": "Motius", "LabelPlayerSizes": "Mides del reproductor", - "LabelPlaybackQuality": "Fotogrames perduts / corruptes" + "LabelPlaybackQuality": "Fotogrames perduts / corruptes", + "LabelSyncPlayJoinGroup": "Uniu-vos al grup" } From 065399e2d970e9a170a43e805cbc3eac60299fa8 Mon Sep 17 00:00:00 2001 From: Yegang Hwang Date: Thu, 23 Apr 2026 09:18:12 -0400 Subject: [PATCH 163/695] Translated using Weblate (Korean) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ko/ --- src/strings/ko.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/ko.json b/src/strings/ko.json index 837f1f4cf2..e1e7484715 100644 --- a/src/strings/ko.json +++ b/src/strings/ko.json @@ -1856,5 +1856,6 @@ "UploadCustomImage": "사용자 지정 이미지 업로드", "ViewAllPlugins": "모든 플러그인 보기", "ViewSettings": "보기 설정", - "LogLoadFailure": "로그 파일을 불러오는 데 실패했습니다. 파일에 여전히 기록이 진행 중일 수 있습니다." + "LogLoadFailure": "로그 파일을 불러오는 데 실패했습니다. 파일에 여전히 기록이 진행 중일 수 있습니다.", + "ApiKeysLoadError": "API 키를 불러오는 데 실패하였습니다" } From 0bf3be537ddd72b612694362e862e2512848a9f0 Mon Sep 17 00:00:00 2001 From: Violet Caulfield <42452695+anultravioletaurora@users.noreply.github.com> Date: Thu, 23 Apr 2026 14:35:25 -0500 Subject: [PATCH 164/695] update autocast, serverNotifications --- src/scripts/autocast.js | 14 ++-- src/scripts/serverNotifications.js | 111 ++++++++++++++--------------- 2 files changed, 61 insertions(+), 64 deletions(-) diff --git a/src/scripts/autocast.js b/src/scripts/autocast.js index ac86286e29..555f7570ab 100644 --- a/src/scripts/autocast.js +++ b/src/scripts/autocast.js @@ -46,13 +46,11 @@ function onOpen() { export function initialize() { console.debug('[autoCast] initializing connection listener'); - ServerConnections.getApiClients().forEach(apiClient => { - Events.off(apiClient, 'websocketopen', onOpen); - Events.on(apiClient, 'websocketopen', onOpen); - }); - Events.on(ServerConnections, 'apiclientcreated', (e, apiClient) => { - Events.off(apiClient, 'websocketopen', onOpen); - Events.on(apiClient, 'websocketopen', onOpen); - }); + // Restore cast player if already signed in (e.g. on page reload) + if (ServerConnections.getApiClients().some(c => c.accessToken())) { + onOpen(); + } + + Events.on(ServerConnections, 'localusersignedin', onOpen); } diff --git a/src/scripts/serverNotifications.js b/src/scripts/serverNotifications.js index d4ef421a6c..138899d857 100644 --- a/src/scripts/serverNotifications.js +++ b/src/scripts/serverNotifications.js @@ -8,6 +8,7 @@ import { ServerConnections } from 'lib/jellyfin-apiclient'; import inputManager from 'scripts/inputManager'; import Events from 'utils/events.ts'; import { PluginType } from 'types/plugin.ts'; +import { OutboundWebSocketMessageType } from '@jellyfin/sdk/lib/websocket'; function notifyApp() { inputManager.notify(); @@ -137,65 +138,63 @@ function processGeneralCommand(cmd, apiClient) { notifyApp(); } -function onMessageReceived(e, msg) { - const apiClient = this; - const SyncPlay = pluginManager.firstOfType(PluginType.SyncPlay)?.instance; - - if (msg.MessageType === 'Play') { - notifyApp(); - const serverId = apiClient.serverInfo().Id; - if (msg.Data.PlayCommand === 'PlayNext') { - playbackManager.queueNext({ ids: msg.Data.ItemIds, serverId: serverId }); - } else if (msg.Data.PlayCommand === 'PlayLast') { - playbackManager.queue({ ids: msg.Data.ItemIds, serverId: serverId }); - } else { - playbackManager.play({ - ids: msg.Data.ItemIds, - startPositionTicks: msg.Data.StartPositionTicks, - mediaSourceId: msg.Data.MediaSourceId, - audioStreamIndex: msg.Data.AudioStreamIndex, - subtitleStreamIndex: msg.Data.SubtitleStreamIndex, - startIndex: msg.Data.StartIndex, - serverId: serverId - }); - } - } else if (msg.MessageType === 'Playstate') { - if (msg.Data.Command === 'Stop') { - inputManager.handleCommand('stop'); - } else if (msg.Data.Command === 'Pause') { - inputManager.handleCommand('pause'); - } else if (msg.Data.Command === 'Unpause') { - inputManager.handleCommand('play'); - } else if (msg.Data.Command === 'PlayPause') { - inputManager.handleCommand('playpause'); - } else if (msg.Data.Command === 'Seek') { - playbackManager.seek(msg.Data.SeekPositionTicks); - } else if (msg.Data.Command === 'NextTrack') { - inputManager.handleCommand('next'); - } else if (msg.Data.Command === 'PreviousTrack') { - inputManager.handleCommand('previous'); - } else if (msg.Data.Command === 'Rewind') { - inputManager.handleCommand('rewind'); - } else if (msg.Data.Command === 'FastForward') { - inputManager.handleCommand('fastforward'); - } else { - notifyApp(); - } - } else if (msg.MessageType === 'GeneralCommand') { - const cmd = msg.Data; - processGeneralCommand(cmd, apiClient); - } else if (msg.MessageType === 'SyncPlayCommand') { - SyncPlay?.Manager.processCommand(msg.Data, apiClient); - } else if (msg.MessageType === 'SyncPlayGroupUpdate') { - SyncPlay?.Manager.processGroupUpdate(msg.Data, apiClient); +function onPlay({ Data }, apiClient) { + notifyApp(); + const serverId = apiClient.serverInfo().Id; + if (Data.PlayCommand === 'PlayNext') { + playbackManager.queueNext({ ids: Data.ItemIds, serverId }); + } else if (Data.PlayCommand === 'PlayLast') { + playbackManager.queue({ ids: Data.ItemIds, serverId }); + } else { + playbackManager.play({ + ids: Data.ItemIds, + startPositionTicks: Data.StartPositionTicks, + mediaSourceId: Data.MediaSourceId, + audioStreamIndex: Data.AudioStreamIndex, + subtitleStreamIndex: Data.SubtitleStreamIndex, + startIndex: Data.StartIndex, + serverId + }); } } -function bindEvents(apiClient) { - Events.off(apiClient, 'message', onMessageReceived); - Events.on(apiClient, 'message', onMessageReceived); + +function onPlaystate({ Data }) { + if (Data.Command === 'Stop') { + inputManager.handleCommand('stop'); + } else if (Data.Command === 'Pause') { + inputManager.handleCommand('pause'); + } else if (Data.Command === 'Unpause') { + inputManager.handleCommand('play'); + } else if (Data.Command === 'PlayPause') { + inputManager.handleCommand('playpause'); + } else if (Data.Command === 'Seek') { + playbackManager.seek(Data.SeekPositionTicks); + } else if (Data.Command === 'NextTrack') { + inputManager.handleCommand('next'); + } else if (Data.Command === 'PreviousTrack') { + inputManager.handleCommand('previous'); + } else if (Data.Command === 'Rewind') { + inputManager.handleCommand('rewind'); + } else if (Data.Command === 'FastForward') { + inputManager.handleCommand('fastforward'); + } else { + notifyApp(); + } } -ServerConnections.getApiClients().forEach(bindEvents); +function subscribeToApiClient(apiClient) { + apiClient.subscribe([OutboundWebSocketMessageType.Play], (msg) => onPlay(msg, apiClient)); + apiClient.subscribe([OutboundWebSocketMessageType.Playstate], (msg) => onPlaystate(msg)); + apiClient.subscribe([OutboundWebSocketMessageType.GeneralCommand], ({ Data }) => processGeneralCommand(Data, apiClient)); + apiClient.subscribe([OutboundWebSocketMessageType.SyncPlayCommand], ({ Data }) => { + pluginManager.firstOfType(PluginType.SyncPlay)?.instance.Manager.processCommand(Data, apiClient); + }); + apiClient.subscribe([OutboundWebSocketMessageType.SyncPlayGroupUpdate], ({ Data }) => { + pluginManager.firstOfType(PluginType.SyncPlay)?.instance.Manager.processGroupUpdate(Data, apiClient); + }); +} + +ServerConnections.getApiClients().forEach(subscribeToApiClient); Events.on(ServerConnections, 'apiclientcreated', function (e, newApiClient) { - bindEvents(newApiClient); + subscribeToApiClient(newApiClient); }); From eeee6c05b3a8bddb321f17406b894e0427020aaf Mon Sep 17 00:00:00 2001 From: aleks Date: Thu, 23 Apr 2026 18:24:03 -0400 Subject: [PATCH 165/695] Translated using Weblate (Bulgarian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/bg/ --- src/strings/bg-bg.json | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/src/strings/bg-bg.json b/src/strings/bg-bg.json index fe291a11f6..47db455f3e 100644 --- a/src/strings/bg-bg.json +++ b/src/strings/bg-bg.json @@ -1586,7 +1586,7 @@ "SearchForLyrics": "Търсене на текстове на песни", "SelectPreferredTranscodeVideoCodecHelp": "Изберете предпочитан видео кодек за транскодирането. Ако този кодек не се поддържа, сървърът ще използва следващият най-добър наличен кодек.", "PreferNonstandardArtistsTag": "Предпочети ARTISTS таг при наличието му", - "PluginsLoadError": "Възникна грешка по време на зареждането на добавките.", + "PluginsLoadError": "Възникна грешка при зареждането на добавките", "AllowEmbeddedSubtitlesAllowNoneOption": "Не позволявай нищо", "AllowEmbeddedSubtitles": "Деактивирай различните видове вградени субтитри", "AllowEmbeddedSubtitlesAllowImageOption": "Позволи изображение", @@ -1880,5 +1880,30 @@ "HeaderLatestBooks": "Наскоро добавени книги", "HeaderLatestMusicVideos": "Наскоро добавени музикални видеа", "LabelInternalServerUri": "Вътрешен URI", - "LabelInternalServerUriHelp": "Публикуван URI на сървъра за вътрешен достъп." + "LabelInternalServerUriHelp": "Публикуван URI на сървъра за вътрешен достъп.", + "BrandingLoadError": "Неуспешно зареждане на брандиращи настройки", + "ActivitiesLoadError": "Зареждането на активност неуспешно", + "LabelSyncPlayJoinGroup": "Присъединяване към група", + "LabelUseSamePublishedServerUri": "Използвайте публикуваният сървър URI за вътрешен и външен достъп", + "LibrariesLoadError": "Зареждането на библиотеките беше неуспешно", + "NetworkingPageLoadError": "Зареждането на Работа в мрежа беше неуспешно", + "OnFilesystem": "На файловата система: {0}", + "ResetFilters": "Изчисти филтри", + "ResumeLoadError": "Зареждането на \"Продължаване\" настройки беше неуспешно", + "StreamingLoadError": "Зареждането на настройките за възпроизвеждане беше неуспешно", + "Unwatch": "Отмени гледане", + "UsersEditPageError": "Зареждането на настройки на потребители беше неуспешно", + "Watch": "Гледай", + "TrickplayLoadError": "Зареждането на Trickplay настройки беше неуспешно", + "LabelExternalServerUri": "Външно URI", + "LabelExternalServerUriHelp": "URI адресът на сървъра е публикуван за външен достъп.", + "LabelVideoAttributes": "Атрибути на видеото", + "LabelVideoColors": "Цветове на видеота", + "LabelVideoBitDepth": "Битова дълбочина на видеото", + "LabelAudioAttributes": "Атрибути на аудиото", + "LabelTargetCodecs": "Желани кодекси", + "LabelProgressAndSpeed": "Напредък / скорост", + "LabelReasons": "Причини", + "LabelPlayerSizes": "Размер на плейъра", + "LabelPlaybackQuality": "Кадри са пропуснати / повредени" } From 392a9a914faa4c1f7323054aa93f7c6f5ba6f795 Mon Sep 17 00:00:00 2001 From: Maltavius Date: Fri, 24 Apr 2026 10:10:00 -0400 Subject: [PATCH 166/695] Translated using Weblate (Swedish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/ --- src/strings/sv.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/sv.json b/src/strings/sv.json index f548c6a02e..4dbd0b2634 100644 --- a/src/strings/sv.json +++ b/src/strings/sv.json @@ -1895,5 +1895,6 @@ "BrandingLoadError": "Misslyckades att ladda märkesinställningar", "ResumeLoadError": "Kunde inte ladda inställningarna för återupptagning", "TrickplayLoadError": "Kunde inte ladda inställningar för trickplay", - "LabelSyncPlayJoinGroup": "Anslut till gruppen" + "LabelSyncPlayJoinGroup": "Anslut till gruppen", + "OnFilesystem": "På filsystem:{0}" } From f9239a754a235708d4fbe47a1c7b101e8b324dd3 Mon Sep 17 00:00:00 2001 From: Maltavius Date: Sat, 25 Apr 2026 03:00:42 -0400 Subject: [PATCH 167/695] Translated using Weblate (Swedish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/ --- src/strings/sv.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/strings/sv.json b/src/strings/sv.json index 4dbd0b2634..3593884f22 100644 --- a/src/strings/sv.json +++ b/src/strings/sv.json @@ -1896,5 +1896,13 @@ "ResumeLoadError": "Kunde inte ladda inställningarna för återupptagning", "TrickplayLoadError": "Kunde inte ladda inställningar för trickplay", "LabelSyncPlayJoinGroup": "Anslut till gruppen", - "OnFilesystem": "På filsystem:{0}" + "OnFilesystem": "På filsystem:{0}", + "LabelVideoColors": "Videoattribut", + "LabelVideoBitDepth": "Video bit-djup", + "LabelAudioAttributes": "Ljudattribut", + "LabelTargetCodecs": "Målkodek", + "LabelProgressAndSpeed": "Framfart / hastighet", + "LabelReasons": "Skäl", + "LabelPlayerSizes": "Spelarstorlekar", + "LabelPlaybackQuality": "Bild tappad / korrumperad" } From cb1017300b9439750b796db999b36a22c9a7416a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnau=20Galofr=C3=A9?= Date: Sat, 25 Apr 2026 05:28:41 -0400 Subject: [PATCH 168/695] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 35a822d2eb..3cdbedbb11 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -1009,15 +1009,15 @@ "LabelTagline": "Eslògan", "LabelTag": "Etiqueta", "LabelSyncPlayTimeSyncOffset": "Temps de decalatge", - "LabelSyncPlayTimeSyncDevice": "Temps de sincronització amb", + "LabelSyncPlayTimeSyncDevice": "Sincronització temporal amb", "LabelSyncPlaySyncMethod": "Mètode de sincronització", - "LabelSyncPlayResumePlaybackDescription": "Torneu a la reproducció grupal", + "LabelSyncPlayResumePlaybackDescription": "Tornar a la reproducció en grup", "LabelSyncPlayResumePlayback": "Reprèn la reproducció local", "LabelSyncPlayPlaybackDiff": "Diferència de temps de reproducció", - "LabelSyncPlayNewGroupDescription": "Crea un grup nou", + "LabelSyncPlayNewGroupDescription": "Crear un grup nou", "LabelSyncPlayNewGroup": "Grup nou", "LabelSyncPlayLeaveGroupDescription": "Desactiva SyncPlay", - "LabelSyncPlayLeaveGroup": "Sortiu del grup", + "LabelSyncPlayLeaveGroup": "Sortir del grup", "LabelSyncPlayHaltPlaybackDescription": "I ignora les actualitzacions de la llista de reproducció", "LabelSyncPlayHaltPlayback": "Atura la reproducció local", "LabelSyncPlayAccessNone": "S'ha desactivat per a aquest usuari", @@ -1905,5 +1905,5 @@ "LabelReasons": "Motius", "LabelPlayerSizes": "Mides del reproductor", "LabelPlaybackQuality": "Fotogrames perduts / corruptes", - "LabelSyncPlayJoinGroup": "Uniu-vos al grup" + "LabelSyncPlayJoinGroup": "Uneix-te al grup" } From 93d2173c0a6e2055b8c89dbf4872e93a431e4ecb Mon Sep 17 00:00:00 2001 From: Anrijs Vitolins Date: Sun, 26 Apr 2026 03:43:05 -0400 Subject: [PATCH 169/695] Translated using Weblate (Latvian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/lv/ --- src/strings/lv.json | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/strings/lv.json b/src/strings/lv.json index c9c7277aaa..81e35c6fd5 100644 --- a/src/strings/lv.json +++ b/src/strings/lv.json @@ -1864,5 +1864,16 @@ "HeaderLatestBooks": "Nesen pievienotās grāmatas", "HeaderLatestMusicVideos": "Nesen pievienotie mūzikas video-klipi", "LabelInternalServerUri": "Iekšējais URI", - "LabelInternalServerUriHelp": "Publicētā servera URI iekšējai piekļuvei." + "LabelInternalServerUriHelp": "Publicētā servera URI iekšējai piekļuvei.", + "LabelSyncPlayJoinGroup": "Pievienoties grupai", + "OnFilesystem": "Failu sistēmā: {0}", + "LabelPlaybackQuality": "Kadru izmestu / bojātu", + "LabelPlayerSizes": "Atskaņotāja izmēri", + "LabelReasons": "Iemesli", + "LabelProgressAndSpeed": "Progress / ātrums", + "LabelTargetCodecs": "Mērķa kodējumi", + "LabelAudioAttributes": "Audio atribūti", + "LabelVideoBitDepth": "Video bitu dziļums", + "LabelVideoColors": "Video krāsas", + "LabelVideoAttributes": "Video atribūti" } From 27a5645ee713f8895a2ec20a77a691d50f6d90f8 Mon Sep 17 00:00:00 2001 From: PlinioRegisNeto Date: Mon, 27 Apr 2026 13:29:47 -0400 Subject: [PATCH 170/695] Translated using Weblate (Portuguese (Brazil)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_BR/ --- src/strings/pt-br.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/strings/pt-br.json b/src/strings/pt-br.json index 4f8819b576..92dad28aab 100644 --- a/src/strings/pt-br.json +++ b/src/strings/pt-br.json @@ -1897,5 +1897,13 @@ "LabelExternalServerUriHelp": "URI do servidor publicada para acesso externo.", "LabelVideoAttributes": "Atributos de vídeo", "LabelVideoColors": "Cores do vídeo", - "LabelAudioAttributes": "Atributos do aúdio" + "LabelAudioAttributes": "Atributos do aúdio", + "LabelSyncPlayJoinGroup": "Entrar no grupo", + "OnFilesystem": "No sistema de arquivos:{0}", + "LabelVideoBitDepth": "Profundidade de bits de vídeo", + "LabelTargetCodecs": "Codecs alvo", + "LabelProgressAndSpeed": "Progresso / velocidade", + "LabelReasons": "Motivos", + "LabelPlayerSizes": "Dimensões do Reprodutor", + "LabelPlaybackQuality": "Quadros perdidos / corrompidos" } From 52aded3cf1d3abc568651df5e08f78c25e6b91dd Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Tue, 28 Apr 2026 14:56:31 +0300 Subject: [PATCH 171/695] Move bitrate detection to web --- src/components/playback/playbackmanager.js | 12 +- .../jellyfin-apiclient/ServerConnections.js | 2 + .../jellyfin-apiclient/connectionManager.js | 10 +- src/utils/bitrateTest.ts | 223 ++++++++++++++++++ 4 files changed, 237 insertions(+), 10 deletions(-) create mode 100644 src/utils/bitrateTest.ts diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index 8052b31da6..25e77fb5bd 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -32,6 +32,7 @@ import { MediaError } from 'types/mediaError'; import { getMediaError } from 'utils/mediaError'; import { toApi } from 'utils/jellyfin-apiclient/compat'; import { bindSkipSegment } from './skipsegment.ts'; +import * as bitrateTest from 'utils/bitrateTest'; const UNLIMITED_ITEMS = -1; @@ -1406,7 +1407,7 @@ export class PlaybackManager { let promise; if (options.enableAutomaticBitrateDetection) { appSettings.enableAutomaticBitrateDetection(endpointInfo.IsInNetwork, mediaType, true); - promise = apiClient.detectBitrate(true); + promise = bitrateTest.detectBitrate(toApi(apiClient), true); } else { appSettings.enableAutomaticBitrateDetection(endpointInfo.IsInNetwork, mediaType, false); promise = Promise.resolve(options.maxBitrate); @@ -2583,10 +2584,11 @@ export class PlaybackManager { return apiClient.getEndpointInfo() .then((endpointInfo) => { if ((mediaType === 'Video' || mediaType === 'Audio') && appSettings.enableAutomaticBitrateDetection(endpointInfo.IsInNetwork, mediaType)) { - return apiClient.detectBitrate().then((bitrate) => { - appSettings.maxStreamingBitrate(endpointInfo.IsInNetwork, mediaType, bitrate); - return bitrate; - }); + return bitrateTest.detectBitrate(toApi(apiClient)) + .then((bitrate) => { + appSettings.maxStreamingBitrate(endpointInfo.IsInNetwork, mediaType, bitrate); + return bitrate; + }); } return Promise.reject(new Error('skip bitrate detection')); diff --git a/src/lib/jellyfin-apiclient/ServerConnections.js b/src/lib/jellyfin-apiclient/ServerConnections.js index 17e36eedcd..f92d1eff40 100644 --- a/src/lib/jellyfin-apiclient/ServerConnections.js +++ b/src/lib/jellyfin-apiclient/ServerConnections.js @@ -8,6 +8,7 @@ import Events from 'utils/events.ts'; import { toApi } from 'utils/jellyfin-apiclient/compat'; import ConnectionManager from './connectionManager'; +import { detectBitrate } from 'utils/bitrateTest'; const normalizeImageOptions = options => { if (!options.quality && (options.maxWidth || options.width || options.maxHeight || options.height || options.fillWidth || options.fillHeight)) { @@ -139,6 +140,7 @@ class ServerConnections extends ConnectionManager { onLocalUserSignedIn(user) { const apiClient = this.getApiClient(user.ServerId); this.setLocalApiClient(apiClient); + setTimeout(() => detectBitrate(toApi(apiClient), true), 6000); return setUserInfo(user.Id, apiClient).then(() => { if (window.NativeShell && typeof window.NativeShell.onLocalUserSignedIn === 'function') { return window.NativeShell.onLocalUserSignedIn(user, apiClient.accessToken()); diff --git a/src/lib/jellyfin-apiclient/connectionManager.js b/src/lib/jellyfin-apiclient/connectionManager.js index 14d6114291..84261e01f3 100644 --- a/src/lib/jellyfin-apiclient/connectionManager.js +++ b/src/lib/jellyfin-apiclient/connectionManager.js @@ -189,8 +189,8 @@ export default class ConnectionManager { credentialProvider.addOrUpdateServer(credentials.Servers, server); credentialProvider.credentials(credentials); - // set this now before updating server info, otherwise it won't be set in time - apiClient.enableAutomaticBitrateDetection = options.enableAutomaticBitrateDetection; + // Disable the legacy apiclient's bitrate detection as this feature is now upstreamed. + apiClient.enableAutomaticBitrateDetection = false; apiClient.serverInfo(server); apiClient.setAuthenticationInfo(result.AccessToken, result.User.Id); @@ -203,7 +203,7 @@ export default class ConnectionManager { if (options.reportCapabilities !== false) { apiClient.reportCapabilities(capabilities); } - apiClient.enableAutomaticBitrateDetection = options.enableAutomaticBitrateDetection; + apiClient.enableAutomaticBitrateDetection = false; if (options.enableWebSocket !== false) { console.log('calling apiClient.ensureWebSocket'); @@ -602,8 +602,8 @@ export default class ConnectionManager { result.Servers.push(server); - // set this now before updating server info, otherwise it won't be set in time - result.ApiClient.enableAutomaticBitrateDetection = options.enableAutomaticBitrateDetection; + // Disable the legacy apiclient's bitrate detection as this feature is now upstreamed. + result.ApiClient.enableAutomaticBitrateDetection = false; result.ApiClient.updateServerInfo(server, serverUrl); result.ApiClient.setAuthenticationInfo(server.AccessToken, server.UserId); diff --git a/src/utils/bitrateTest.ts b/src/utils/bitrateTest.ts new file mode 100644 index 0000000000..6ae280f345 --- /dev/null +++ b/src/utils/bitrateTest.ts @@ -0,0 +1,223 @@ +import { Api } from '@jellyfin/sdk'; +import type { EndPointInfo } from '@jellyfin/sdk/lib/generated-client/models/end-point-info'; +import { getSystemApi } from '@jellyfin/sdk/lib/utils/api/system-api'; + +/** Maximum bitrate (Int32) */ +const MAX_BITRATE = 2147483647; +/** Approximate LAN bitrate */ +const LAN_BITRATE = 140000000; +/** Bitrate test timeout in milliseconds */ +const BITRATETEST_TIMEOUT = 5000; +/** Bitrate cache time in milliseconds */ +const BITRATE_CACHE_DURATION = 3600000; + +let lastDetectedBitrate: number; +let lastDetectedBitrateTime: number; +let pendingBitrateDetection: Promise | null = null; + +interface BitrateTest { + bytes: number; + threshold: number; +} + +/** Gets a normalized maximum downlink speed (only supported on certain browsers) */ +const getMaxBandwidth = () => { + const connection = (navigator as unknown as { connection: { downlinkMax: number } }).connection; + if (connection) { + let max = connection.downlinkMax; + if (max && max > 0 && max < Number.POSITIVE_INFINITY) { + max /= 8; + max *= 1000000; + max *= 0.7; + return max; + } + } + + return null; +}; + +/** + * Perform a download speed test + * @param {Api} api The Api client + * @param {number} bytes The bytes to download + * @returns {number} Download speed in bits per second + */ +const getDownloadSpeed = (api: Api, bytes: number) => { + return new Promise((resolve, reject) => { + const url = api.basePath + '/Playback/BitrateTest?' + new URLSearchParams({ + Size: bytes.toString() + }); + + const xhr = new XMLHttpRequest; + + xhr.open('GET', url, true); + + xhr.responseType = 'blob'; + xhr.timeout = BITRATETEST_TIMEOUT; + + const headers = { + 'Cache-Control': 'no-cache, no-store', + 'Authorization': api.authorizationHeader + }; + + for (const key in headers) { + xhr.setRequestHeader(key, headers[key as keyof typeof headers]); + } + + let startTime: number; + + xhr.onreadystatechange = () => { + if (xhr.readyState == XMLHttpRequest.HEADERS_RECEIVED) { + startTime = performance.now(); + } + }; + + xhr.onload = () => { + if (xhr.status < 400) { + const responseTimeSeconds = (performance.now() - startTime) * 1e-3; + const bytesLoaded = xhr.response.size; + const bytesPerSecond = bytesLoaded / responseTimeSeconds; + const bitrate = Math.round(bytesPerSecond * 8); + + console.debug(`[bitratetest] ${bytesLoaded} bytes loaded (${bytes} requested) in ${responseTimeSeconds} seconds -> ${bitrate} bps`); + + resolve(bitrate); + } else { + reject(new Error(`[bitratetest] failed with ${xhr.status} status`)); + } + }; + + xhr.onabort = () => { + reject(new Error('[bitratetest] abort')); + }; + + xhr.onerror = () => { + reject(new Error('[bitratetest] error')); + }; + + xhr.ontimeout = () => { + reject(new Error('[bitratetest] timeout')); + }; + + xhr.send(null); + }); +}; + +/** + * Normalizes the bitrate value by reducing it by 30% (to account for network overhead) + * and limits the value by MAX_BITRATE + * @param bitrate The bitrate to normalize + * @returns {number} Normalized bitrate + */ +const normalizeReturnBitrate = (bitrate: number) => { + if (!bitrate) { + if (lastDetectedBitrate) { + return lastDetectedBitrate; + } + } + + let result = Math.min(Math.round(bitrate * 0.7), MAX_BITRATE); + + const maxRate = getMaxBandwidth(); + if (maxRate) { + result = Math.min(result, maxRate); + } + + lastDetectedBitrate = result; + lastDetectedBitrateTime = Date.now(); + + return result; +}; + +/** + * + * @param {Api} api The Api client + * @param {BitrateTest[]} tests The tests to perform + * @param {number} index Current test index + * @param {number | undefined} currentBitrate Current bitrate + * @returns {number} Normalized bitrate + */ +const detectBitrateInternal = (api: Api, tests: BitrateTest[], index: number, currentBitrate: number | undefined): Promise => { + if (index >= tests.length) { + return Promise.resolve(normalizeReturnBitrate(currentBitrate || 0)); + } + + const test = tests[index]; + + return getDownloadSpeed(api, test.bytes).then( + (bitrate) => { + if (bitrate < test.threshold) { + return Promise.resolve(normalizeReturnBitrate(bitrate)); + } else { + return detectBitrateInternal(api, tests, index + 1, bitrate); + } + }, + () => normalizeReturnBitrate(currentBitrate || 0) + ); +}; + +/** + * Detects the bitrate using a series of tests + * @param {Api} api The api client + * @param {EndPointInfo} endpointInfo Endpoint info for special handling on local networks + * @returns {number} Normalized bitrate + */ +const detectBitrateWithEndpointInfo = (api: Api, endpointInfo: EndPointInfo) => { + return detectBitrateInternal( + api, + [ + { + bytes: 500000, + threshold: 500000 + }, + { + bytes: 1000000, + threshold: 20000000 + }, + { + bytes: 3000000, + threshold: 50000000 + } + ], + 0, + undefined + ).then(result => { + if (endpointInfo.IsInNetwork) { + result = Math.max(result || 0, LAN_BITRATE); + + lastDetectedBitrate = result; + lastDetectedBitrateTime = Date.now(); + } + console.debug(`[bitratetest] bitrate detected as ${Math.round(result / 1048576)} Mbps`); + return result; + }); +}; + +/** + * Detects the bitrate on the current device + * @param {Api} api The Api client + * @param {boolean} force Ignore the cached bitrate and force a re-detection + * @returns {number} The detected bitrate + */ +export const detectBitrate = (api: Api, force: boolean) => { + if (!force + && lastDetectedBitrate + && Date.now() - (lastDetectedBitrateTime || 0) <= BITRATE_CACHE_DURATION) { + return Promise.resolve(lastDetectedBitrate); + } + + if (pendingBitrateDetection) { + return pendingBitrateDetection; + } + + pendingBitrateDetection = getSystemApi(api) + .getEndpointInfo() + .then( + (response) => detectBitrateWithEndpointInfo(api, response.data), + () => detectBitrateWithEndpointInfo(api, {}) + ).finally(() => { + pendingBitrateDetection = null; + }); + + return pendingBitrateDetection; +}; From a32697a03c8d6ac9f78352610a9de014909059d8 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Tue, 28 Apr 2026 16:16:33 +0300 Subject: [PATCH 172/695] Move bitrate detected debug message to show calculated bitrate --- src/utils/bitrateTest.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/utils/bitrateTest.ts b/src/utils/bitrateTest.ts index 6ae280f345..35b894d17f 100644 --- a/src/utils/bitrateTest.ts +++ b/src/utils/bitrateTest.ts @@ -182,13 +182,14 @@ const detectBitrateWithEndpointInfo = (api: Api, endpointInfo: EndPointInfo) => 0, undefined ).then(result => { + const bitrateInMbps = (result / 1048576).toFixed(2); + console.debug(`[bitratetest] bitrate detected as ${bitrateInMbps} Mbps`); if (endpointInfo.IsInNetwork) { result = Math.max(result || 0, LAN_BITRATE); lastDetectedBitrate = result; lastDetectedBitrateTime = Date.now(); } - console.debug(`[bitratetest] bitrate detected as ${Math.round(result / 1048576)} Mbps`); return result; }); }; From 8a42906bf0b711bd2a0214939fd438f00cba8ca4 Mon Sep 17 00:00:00 2001 From: Thomson891 Date: Wed, 29 Apr 2026 01:09:14 -0400 Subject: [PATCH 173/695] Translated using Weblate (Finnish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/ --- src/strings/fi.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/fi.json b/src/strings/fi.json index 5d455be318..19bb91e84c 100644 --- a/src/strings/fi.json +++ b/src/strings/fi.json @@ -1904,5 +1904,6 @@ "TrickplayLoadError": "Trickplayn asetusten lataaminen epäonnistui", "LabelProgressAndSpeed": "Eteneminen / nopeus", "LabelReasons": "Syyt", - "LabelPlayerSizes": "Soittimen koot" + "LabelPlayerSizes": "Soittimen koot", + "LabelSyncPlayJoinGroup": "Liity ryhmään" } From ec637414e5d64424de7a62cc89fa175429789d80 Mon Sep 17 00:00:00 2001 From: rimasx Date: Wed, 29 Apr 2026 02:35:29 -0400 Subject: [PATCH 174/695] Translated using Weblate (Estonian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/et/ --- src/strings/et.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/et.json b/src/strings/et.json index be5a6cdd94..71812b9322 100644 --- a/src/strings/et.json +++ b/src/strings/et.json @@ -1900,5 +1900,7 @@ "LabelProgressAndSpeed": "Edenemine / kiirus", "LabelReasons": "Põhjused", "LabelPlayerSizes": "Pleieri suurused", - "LabelPlaybackQuality": "Kadunud / rikutud kaadrid" + "LabelPlaybackQuality": "Kadunud / rikutud kaadrid", + "LabelSyncPlayJoinGroup": "Liitu grupiga", + "OptionDatePlaylistUpdated": "Esitusloendi uuendamise kuupäev" } From 284a7dbe467dcff7ec7dc93b43acbb8d2e879d17 Mon Sep 17 00:00:00 2001 From: "@reco-tec" Date: Fri, 1 May 2026 04:09:00 -0400 Subject: [PATCH 175/695] Added translation using Weblate (German (Low)) --- src/strings/nds.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 src/strings/nds.json diff --git a/src/strings/nds.json b/src/strings/nds.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/src/strings/nds.json @@ -0,0 +1 @@ +{} From e4f3dbd224a696d6d3d97e76d292542508579a4b Mon Sep 17 00:00:00 2001 From: "Thadah D. Denyse" Date: Fri, 1 May 2026 05:05:56 -0400 Subject: [PATCH 176/695] Translated using Weblate (Basque) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/eu/ --- src/strings/eu.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/strings/eu.json b/src/strings/eu.json index 1aeba058e6..ede0dc348d 100644 --- a/src/strings/eu.json +++ b/src/strings/eu.json @@ -199,7 +199,7 @@ "SubtitleAppearanceSettingsDisclaimer": "Ondorengo ezarpenak ez zaizkie aplikatuko aurretik aipatutako azpititulu grafikoei, ezta ASS/SSA azpitituluei ere, baldin eta beren estiloak badituzte.", "SubtitleAppearanceSettingsAlsoPassedToCastDevices": "Doikuntza horiek gailu honek hasitako Chromecast edozein erreprodukziori ere aplikatzen zaizkio.", "Subtitle": "Azpititulua", - "Studios": "Ikasketak", + "Studios": "Estudioak", "StopRecording": "Gelditu grabazioa", "StopPlayback": "Erreprodukzioa gelditzea", "Sports": "Kirolak", @@ -1081,7 +1081,7 @@ "Anytime": "Edozein unetan", "AnyLanguage": "Edozein hizkuntza", "AlwaysPlaySubtitlesHelp": "Hizkuntza-lehentasunarekin bat datozen azpitituluak kargatu egingo dira, audio-hizkuntza edozein dela ere.", - "AlwaysPlaySubtitles": "Beti erakutsi azpitituluak", + "AlwaysPlaySubtitles": "Beti erakutsi", "AllowTonemappingHelp": "Tonu-mapaketak bideo baten barruti dinamikoa eraldatu dezake HDRtik SDR-ra, jatorrizko eszena irudikatzeko informazio oso garrantzitsuak diren irudien xehetasunak eta koloreak mantenduz. Gaur egun 10bit HDR10, HLG eta DoVi bideoekin bakarrik funtzionatzen du. Honek dagokion GPGPU exekuzio-denbora behar du.", "AllowRemoteAccessHelp": "Aktibatuta ez badago, urruneko konexio guztiak blokeatu egingo dira.", "AllowRemoteAccess": "Baimendu zerbitzari honetarako urrutiko konexioak", @@ -1308,7 +1308,7 @@ "ButtonRefreshGuideData": "Gidako datuak eguneratzea", "ButtonQuickStartGuide": "Konfigurazio gida", "ButtonPreviousTrack": "Aurreko pista", - "ButtonPlayer": "Ugaltzailea", + "ButtonPlayer": "Erreproduzitzailea", "ButtonPause": "Etenaldia", "ButtonParentalControl": "Gurasoen kontrola", "ButtonOk": "OK", From fc9c162480648c32a27644ac3090763ebf770936 Mon Sep 17 00:00:00 2001 From: Fjuro Date: Fri, 1 May 2026 07:22:38 -0400 Subject: [PATCH 177/695] Translated using Weblate (Czech) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/ --- src/strings/cs.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/cs.json b/src/strings/cs.json index f76a042213..c51a805e38 100644 --- a/src/strings/cs.json +++ b/src/strings/cs.json @@ -1412,8 +1412,8 @@ "Cursive": "Kurzíva", "LabelHardwareEncodingOptions": "Možnosti hardwarového kódování", "IntelLowPowerEncHelp": "Nízkoenergetické kódování může zbytečně synchronizovat CPU s GPU. Na Linuxu musí být vypnuto, pokud není nakonfigurován firmware i915 HuC.", - "EnableIntelLowPowerHevcHwEncoder": "Povolit nízkoenergetický hardwarový dekodér Intel HEVC", - "EnableIntelLowPowerH264HwEncoder": "Povolit nízkoenergetický hardwarový dekodér Intel H.264", + "EnableIntelLowPowerHevcHwEncoder": "Povolit nízkoenergetický hardwarový kodér Intel HEVC", + "EnableIntelLowPowerH264HwEncoder": "Povolit nízkoenergetický hardwarový kodér Intel H.264", "PreferSystemNativeHwDecoder": "Preferovat hardwarové dekodéry DXVA nebo VA-API nativní pro daný OS", "ContainerBitrateExceedsLimit": "Bitový tok videa překračuje nastavenou mez", "DirectPlayError": "Při spuštění přímého přehrávání došlo k chybě", From 8b4dc8c8af985e2d30432d34f7670d6f035af83f Mon Sep 17 00:00:00 2001 From: "Thadah D. Denyse" Date: Fri, 1 May 2026 05:55:35 -0400 Subject: [PATCH 178/695] Translated using Weblate (Basque) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/eu/ --- src/strings/eu.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/eu.json b/src/strings/eu.json index ede0dc348d..7d0000b8d8 100644 --- a/src/strings/eu.json +++ b/src/strings/eu.json @@ -1187,7 +1187,7 @@ "EnableFasterAnimationsHelp": "Animazioek eta trantsizioek denbora gutxiago iraungo dute.", "EnableFasterAnimations": "Animazio azkarragoak", "EnableExternalVideoPlayersHelp": "Bideoa erreproduzitzen hasten denean, kanpoko erreproduzitzailerako menu bat agertuko da.", - "EnableExternalVideoPlayers": "Kanpoko ugaltzaileak", + "EnableExternalVideoPlayers": "Kanpoko erreproduzitzaileak", "EnableDisplayMirroring": "Pantailaren mirroringa", "EnableDetailsBannerHelp": "Erakutsi bannerraren irudia elementuaren xehetasunen orrialdearen mugan.", "EnableDetailsBanner": "Xehetasunen barra", From 1c0a5075c85d30d112465d8ed1e316be11669535 Mon Sep 17 00:00:00 2001 From: "Thadah D. Denyse" Date: Fri, 1 May 2026 23:02:51 -0400 Subject: [PATCH 179/695] Translated using Weblate (Basque) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/eu/ --- src/strings/eu.json | 49 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 41 insertions(+), 8 deletions(-) diff --git a/src/strings/eu.json b/src/strings/eu.json index 7d0000b8d8..183c51851b 100644 --- a/src/strings/eu.json +++ b/src/strings/eu.json @@ -56,7 +56,7 @@ "EnableEnhancedNvdecDecoder": "NVDEC dekodetzaile hobetua gaitu", "MessagePlaybackError": "Errorea gertatu da fitxategi hau zure Google Cast hartzailean erreproduzitzean.", "MessageChromecastConnectionError": "Zure Google Cast hartzaileak ezin du Jellyfinen zerbitzariarekin harremanetan jarri. Mesedez, berrikusi konexioa eta saiatu berriro.", - "YoutubeDenied": "Eskatutako bideoa ezin da erakutsi txertatutako ugaltzaileetan.", + "YoutubeDenied": "Eskatutako bideoa ezin da erakutsi txertatutako erreproduzitzaileetan.", "YoutubeNotFound": "Bideoa ez da aurkitu.", "YoutubePlaybackError": "Eskatutako bideoa ezin da erreproduzitu.", "YoutubeBadRequest": "Eskaera ez da zuzena.", @@ -123,7 +123,7 @@ "ValueEpisodeCount": "{0} kapitulu", "ValueDiscNumber": "{0}. diskoa", "ValueAlbumCount": "{0} album", - "UserProfilesIntro": "Jellyfinek erabiltzaileen profilentzako euskarria barne hartzen du, eta erabiltzaile bakoitzak bere ezarpenak, ugaltze-egoera eta gurasoen kontrola izatea ahalbidetzen du.", + "UserProfilesIntro": "Jellyfinek erabiltzaileen profilentzako euskarria barne hartzen du, eta erabiltzaile bakoitzak bere ezarpenak, erreprodukzio-egoera eta gurasoen kontrola izatea ahalbidetzen du.", "UserAgentHelp": "Eman 'User-Agent' pertsonalizatutako http goiburu bat.", "UseEpisodeImagesInNextUpHelp": "\"Nobedadeak\" eta \"Ikusten jarraitu\" ataletan kapituluen irudiak agertuko dira miniatura gisa, seriearen miniatura nagusiaren ordez.", "UseEpisodeImagesInNextUp": "Erabili kapituluen irudiak \"Nobedadeak\" eta \"Ikusten jarraitu\" ataletan", @@ -504,7 +504,7 @@ "LabelRecord": "Grabatu", "LabelReasonForTranscoding": "Bihurketa egiteko arrazoia", "LabelQuickConnectCode": "Konexio azkarreko kodea", - "LabelPublishedServerUriHelp": "Jellyfinek erabiltzen duen URIa gainidatzi, interfazearen edo bezeroaren IP helbidearen arabera. Adibidez: internal=http://jellyfin.adibidea.com, external=https://jellyfin.adibidea.com edo all=https://jellyfin.adibidea.com", + "LabelPublishedServerUriHelp": "Jellyfinek erabiltzen duen URIa gainidatzi, interfazearen edo bezeroaren IP helbidearen arabera.", "LabelPublishedServerUri": "Argitaratutako zerbitzariaren URI", "LabelPublicHttpsPortHelp": "https tokiko portuarekin lotu behar den portu publikoa.", "LabelPublicHttpsPort": "https portu publikoa", @@ -518,7 +518,7 @@ "LabelPleaseRestart": "Web bezeroa eskuz kargatu ondoren eragingo dute aldaketek.", "LabelPlayMethod": "Erreprodukzio-metodoa", "LabelPlaylist": "Erreprodukzio-zerrenda", - "LabelPlayerDimensions": "Ugaltzailearen neurriak", + "LabelPlayerDimensions": "Erreproduzitzailearen neurriak", "LabelPlayer": "Ugaltzailea", "LabelPlayDefaultAudioTrack": "Aurrez zehaztutako audio-pista erreproduzitu, hizkuntza edozein dela ere", "LabelPlaceOfBirth": "Jaioterria", @@ -1164,7 +1164,7 @@ "LabelBirthDate": "Jaioteguna", "LabelBindToLocalNetworkAddressHelp": "Baliogabetu IP helbide lokala http zerbitzaria lotzeko. Hutsik utziz gero, zerbitzaria eskuragarri dauden helbide guztietara lotuko da. Aldaketa horrek berriro hastea eskatzen du.", "LabelBindToLocalNetworkAddress": "Sare lokalaren helbideari lotzea", - "LabelBaseUrlHelp": "Hemen azpidirektorio pertsonalizatu bat gehitu dezakezu URL baten bidez zerbitzarira sartzeko. Adibidez: http://ejemplo.com/<baseurl>", + "LabelBaseUrlHelp": "Gehitu azpidirektorio pertsonalizatu bat zerbitzariaren URLari. Adibidez: https://example.com/", "LabelBaseUrl": "Oinarrizko URLa", "LabelAutomaticDiscoveryHelp": "Baimendu aplikazioei Jellyfin automatikoki detektatzea, UDP 7359 ataka erabiliz.", "LabelAutomaticDiscovery": "Aktibatu aurkikuntza automatikoa", @@ -1189,7 +1189,7 @@ "EnableExternalVideoPlayersHelp": "Bideoa erreproduzitzen hasten denean, kanpoko erreproduzitzailerako menu bat agertuko da.", "EnableExternalVideoPlayers": "Kanpoko erreproduzitzaileak", "EnableDisplayMirroring": "Pantailaren mirroringa", - "EnableDetailsBannerHelp": "Erakutsi bannerraren irudia elementuaren xehetasunen orrialdearen mugan.", + "EnableDetailsBannerHelp": "Erakutsi iragarki-bandaren irudia elementuaren xehetasunen orrialdearen mugan.", "EnableDetailsBanner": "Xehetasunen barra", "EnableDecodingColorDepth10Vp9": "10 biteko hardware bidezko deskodetzea gaitu VP9rako", "EnableDecodingColorDepth10Hevc": "HEVCrako 10 biteko hardware bidezko deskodetzea gaitzea", @@ -1851,7 +1851,7 @@ "HeaderBackups": "Babeskopiak", "ButtonLearnMore": "Ikasi gehiago", "TranscodingLoadError": "Ezin izan dira transkodetze ezarpenak kargatu", - "PluginsLoadError": "Errore bat gertatu da pluginak kargatzean.", + "PluginsLoadError": "Errore bat gertatu da pluginak kargatzean", "ConfirmDeleteRepository": "Ezabatu biltegia?", "DeleteRepositoryConfirmation": "Ziur zaude biltegi hau ezabatu nahi duzula?", "RepositoriesPageLoadError": "Biltegiak kargatzeak huts egin du", @@ -1872,5 +1872,38 @@ "HeaderDeleteCollection": "Ezabatu bilduma", "HeaderDeletePlaylist": "Ezabatu erreprodukzio-zerrenda", "NewPlaylist": "Erreprodukzio-zerrenda berria", - "OptionDatePlaylistUpdated": "Erreprodukzio-zerrendaren eguneraketa data" + "OptionDatePlaylistUpdated": "Erreprodukzio-zerrendaren eguneraketa data", + "ActivitiesLoadError": "Jarduerak kargatzeak huts egin du", + "ApiKeysLoadError": "API gakoak kargatzeak huts egin du", + "Authors": "Egileak", + "BrandingLoadError": "Markaren ezarpenak kargatzeak huts egin du", + "ContinueReading": "Jarraitu irakurtzen", + "DevicesLoadError": "Gailuak kargatzeak huts egin du", + "HeaderLatestBooks": "Azkenaldian gehitutako liburuak", + "HeaderLatestMusicVideos": "Azkenean gehitutako musika bideoak", + "LabelInternalServerUri": "Barneko URI", + "LabelInternalServerUriHelp": "Barne sarbiderako argitaratutako zerbitzariaren URIa.", + "LabelSyncPlayJoinGroup": "Batu taldera", + "LabelUseSamePublishedServerUri": "Erabili argitaratutako zerbitzariaren URI bera barne eta kanpoko sarbideetarako", + "LibrariesLoadError": "Liburutegiak kargatzeak huts egin du", + "NetworkingPageLoadError": "Sare-ezarpenak kargatzeak huts egin du", + "OnFilesystem": "Fitxategi-sisteman: {0}", + "ResetFilters": "Berrezarri iragazkiak", + "ResumeLoadError": "Berrabiarazpen ezarpenak kargatzeak huts egin du", + "StreamingLoadError": "Streaming orriko ezarpenak kargatzeak huts egin du", + "Unwatch": "Desikusi", + "UsersEditPageError": "Erabiltzailearen edizio orria kargatzeak huts egin du", + "Watch": "Ikusi", + "TrickplayLoadError": "Trickplay ezarpenak kargatzeak huts egin du", + "LabelExternalServerUri": "Kanpoko URIa", + "LabelExternalServerUriHelp": "Kanpoko sarbiderako argitaratutako zerbitzariaren URIa.", + "LabelVideoAttributes": "Bideo-atributuak", + "LabelVideoColors": "Bideoaren koloreak", + "LabelVideoBitDepth": "Bideoaren bit-sakonera", + "LabelAudioAttributes": "Audio-atributuak", + "LabelTargetCodecs": "Helburuko kodekak", + "LabelProgressAndSpeed": "Aurrerapena / abiadura", + "LabelReasons": "Arrazoiak", + "LabelPlayerSizes": "Erreproduzitzailearen tamainak", + "LabelPlaybackQuality": "Fotograma galduta / hondatuta" } From 968758a7f6e4e3b3896450018a7dc2e2e857f1f9 Mon Sep 17 00:00:00 2001 From: Hassan Alabdulaal Date: Sat, 2 May 2026 06:17:44 -0400 Subject: [PATCH 180/695] Translated using Weblate (Arabic) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ar/ --- src/strings/ar.json | 2854 +++++++++++++++++++++---------------------- 1 file changed, 1427 insertions(+), 1427 deletions(-) diff --git a/src/strings/ar.json b/src/strings/ar.json index e904bf2982..6fd10aa6b6 100644 --- a/src/strings/ar.json +++ b/src/strings/ar.json @@ -2,1908 +2,1908 @@ "Alerts": "التنبيهات", "All": "الكل", "AllLibraries": "كل المكتبات", - "AllowHWTranscodingHelp": "اسمح للمولف بالترميز في أثناء المشاهدة، مما قد يساهم في تخفيض عدد المشاهدات التي تتطلب ترميزا من الخادم.", - "AllowRemoteAccess": "السماح بالاتصالات عن بعد إلى هذا الخادم", - "AllowRemoteAccessHelp": "ستُرفض جميع الاتصالات عن بُعد إذا لم يفعل هذا الخيار.", + "AllowHWTranscodingHelp": "السماح للموالف بتحويل ترميز البث أثناء التشغيل. قد يساعد ذلك في تقليل التحويل المطلوب من الخادم.", + "AllowRemoteAccess": "السماح بالاتصالات البعيدة بهذا الخادم", + "AllowRemoteAccessHelp": "إذا لم يتم تحديده، فسيتم حظر كل الاتصالات البعيدة.", "Audio": "الصوت", "BirthDateValue": "وُلد: {0}", "BirthPlaceValue": "مكان الميلاد: {0}", - "Browse": "تصفح", - "ButtonAddMediaLibrary": "إضافة مكتبة وسائط", - "ButtonAddScheduledTaskTrigger": "إضافة معيار", + "Browse": "استعراض", + "ButtonAddMediaLibrary": "إضافة مكتبة محتوى", + "ButtonAddScheduledTaskTrigger": "إضافة مشغّل", "ButtonAddServer": "إضافة خادم", "ButtonAddUser": "إضافة مستخدم", "ButtonArrowLeft": "يسار", "ButtonArrowRight": "يمين", - "ButtonAudioTracks": "المقاطع الصوتية", + "ButtonAudioTracks": "مسارات الصوت", "ButtonBack": "رجوع", "ButtonCancel": "إلغاء", - "ButtonChangeServer": "غير الخادم", - "ButtonEditOtherUserPreferences": "تعديل إعدادات حساب هذا المستخدم، وصورته وتفضيلاته الشخصية.", - "ButtonForgotPassword": "نسيت كلمة السر", + "ButtonChangeServer": "تغيير الخادم", + "ButtonEditOtherUserPreferences": "تعديل ملف هذا المستخدم وصورته وتفضيلاته الشخصية.", + "ButtonForgotPassword": "نسيت كلمة المرور", "ButtonFullscreen": "ملء الشاشة", "ButtonInfo": "معلومات", - "ButtonLibraryAccess": "صلاحيات المكتبة", - "ButtonManualLogin": "تسجيل الدخول اليدوي", + "ButtonLibraryAccess": "الوصول إلى المكتبة", + "ButtonManualLogin": "تسجيل دخول يدوي", "ButtonMore": "المزيد", - "ButtonNextTrack": "المقطع التالي", - "ButtonOk": "موافق", - "ButtonParentalControl": "التحكم الأبوي", - "ButtonPause": "التوقف المؤقت", - "ButtonPreviousTrack": "المقطع السابق", - "ButtonQuickStartGuide": "دليل بدء الاستخدام السريع", - "ButtonRefreshGuideData": "إعادة تنشيط بيانات الدليل", + "ButtonNextTrack": "المسار التالي", + "ButtonOk": "حسنًا", + "ButtonParentalControl": "الرقابة الأبوية", + "ButtonPause": "إيقاف مؤقت", + "ButtonPreviousTrack": "المسار السابق", + "ButtonQuickStartGuide": "دليل الإعداد", + "ButtonRefreshGuideData": "تحديث بيانات الدليل", "ButtonRemove": "إزالة", - "ButtonRename": "إعادة التسمية", - "ButtonResume": "استئناف المشاهدة", - "ButtonRevoke": "أرفض", - "ButtonSelectDirectory": "إختر المجلد", - "ButtonSelectView": "إختر طريقة عرض", + "ButtonRename": "إعادة تسمية", + "ButtonResume": "استئناف", + "ButtonRevoke": "إلغاء التفويض", + "ButtonSelectDirectory": "اختيار مجلد", + "ButtonSelectView": "اختيار العرض", "ButtonSend": "إرسال", "ButtonShutdown": "إيقاف التشغيل", "ButtonSignIn": "تسجيل الدخول", "ButtonSignOut": "تسجيل الخروج", - "ButtonStart": "إبدأ", + "ButtonStart": "بدء", "ButtonStop": "إيقاف", - "ButtonSubmit": "تسليم", - "ButtonTrailer": "العرض الإعلاني", + "ButtonSubmit": "إرسال", + "ButtonTrailer": "الإعلان الترويجي", "ButtonUninstall": "إزالة التثبيت", - "ButtonWebsite": "مالوقع الإلكتروني", - "ChannelAccessHelp": "إختر القنوات التي ستشاركها مع هذا المستخدم. المدراء سيكونون قادرين على تغيير كل القنوات باستخدام مدير البيانات التعريفية.", + "ButtonWebsite": "الموقع الإلكتروني", + "ChannelAccessHelp": "اختر القنوات التي تريد مشاركتها مع هذا المستخدم. سيتمكن المديرون من تعديل كل القنوات باستخدام مدير البيانات الوصفية.", "Channels": "القنوات", - "CinemaModeConfigurationHelp": "وضع السينما يجلب متعة المسرح إلى غرفة المعيشة لديك مع إمكانية تشغيل عروض إعلانية وعرض مقدمات مختارة قبل تشغيل الحدث الرئيسي.", + "CinemaModeConfigurationHelp": "يجلب وضع السينما تجربة صالة العرض إلى غرفة المعيشة، مع إمكانية تشغيل الإعلانات الترويجية والمقدمات المخصصة قبل المحتوى الرئيسي.", "DeathDateValue": "توفي: {0}", - "ErrorDefault": "كان هناك خطأ في معالجة الطلب. الرجاء المحاولة لاحقاً.", + "ErrorDefault": "حدث خطأ أثناء معالجة الطلب. يُرجى المحاولة لاحقًا.", "Delete": "حذف", - "DeleteDeviceConfirmation": "هل أنت متأكد أنك تريد حذف هذا الجهاز؟ سيظهر الجهاز من جديد في المرة القادمة التي يسجل فيها مستخدم دخوله عبره.", + "DeleteDeviceConfirmation": "هل تريد بالتأكيد حذف هذا الجهاز؟ سيظهر مجددًا في المرة التالية التي يسجل فيها مستخدم الدخول به.", "DeleteImage": "حذف الصورة", - "DeleteImageConfirmation": "هل انت متأكد من حذف هذه الصورة؟", - "DeleteMedia": "حذف الوسائط", + "DeleteImageConfirmation": "هل تريد بالتأكيد حذف هذه الصورة؟", + "DeleteMedia": "حذف المحتوى", "DeleteUser": "حذف المستخدم", - "DeleteUserConfirmation": "هل انت متأكد من انك تريد حذف هذا المستخدم ؟", - "DeviceAccessHelp": "هذه الميزة تنطبق حصرياً على الأجهزة التي يمكن التعرف عليها فردياً ولن تمنع المتصفح من الدخول عليها. ترشيح الوصول لأجهزة المستخدم ستمنع المستخدمين من استعمال الأجهزة الجديدة إلى أن يتم اعتمادهم من هنا.", - "DrmChannelsNotImported": "القنوات المجهزة بإدارة الحقوق الرقمية DRM لن تورّد.", - "EnablePhotos": "عارض الصور", - "EnablePhotosHelp": "سيتم اكتشاف الصور وعرضها مع ملفات الوسائط الأخرى.", - "ErrorAddingListingsToSchedulesDirect": "كان هناك خطأ في إضافة الاصطفاف لخدمة \"Schedules Direct\" الخاصة بك. خدمة \"Schedules Direct\" لا تسمح إلا بعدد محدود من الاصطفافات لكل حساب. قد تحتاج إلى تسجيل الدخول إلى موقع \"Schedules Direct\" لإزالة الاصطفافات الأخرى من حسابك قبل المتابعة.", - "ErrorAddingMediaPathToVirtualFolder": "كان هناك خطأ في إضافة مسار الوسائط. الرجاء التأكد من صحة المسار وأن Jellyfin لديه صلاحية الوصول إلى ذلك المسار.", - "ErrorAddingTunerDevice": "كان هناك خطأ في إضافة جهاز المولف. الرجاء التأكد من صلاحية الوصول إليه ثم عاود المحاولة.", - "ErrorAddingXmlTvFile": "كان هناك خطأ في محاولة الوصول إلى ملف XMLTV. الرجاء التأكد من وجود الملف ثم حاول مرة أخرى.", - "ErrorGettingTvLineups": "كان هناك خطأ في إنزال اصطفافات التلفاز. الرجاء التأكد من أن بياناتك صحيحة ثم عاود المحاولة.", - "ErrorStartHourGreaterThanEnd": "وقت النهاية يجب أن يكون أكبر من وقت البداية.", - "ErrorPleaseSelectLineup": "الرجاء اختيار اصطفاف ثم المحاولة مرة أخرى. إن لم تتوفر أية اصطفافات، فالرجاء التأكد من اسم المستخدم وكلمة المرور الخاصة بك، وتأكد من صحة رمزك البريدي.", - "ErrorSavingTvProvider": "كان هناك خطأ في حفظ مزود التلفزة. الرجاء التأكد من صلاحية الوصول إليه ثم عاود المحاولة.", - "ExitFullscreen": "الخروج من الشاشة الكاملة", - "ExtractChapterImagesHelp": "استخلاص صور الفصول سيسمح للتطبيقات أن تظهر لك قوائم تصويرية لتبويبات الأفلام. هذه العملية قد تكون بطيئة، وتستغل موارد الجهاز بشكل ملحوظ، وقد تحتاج إلى حيازة بضعة غيغابايتات من مساحة التخزين بشكل مؤقت. هذه المهمة تعمل خلال عملية استكشاف المقاطع المرئية، كما يمكن أن تحدد لتكون مهمة ليلية مجدولة. يمكنك جدولة العملية من قسم جدولة المهام. لا ينصح بتشغيل هذه المهمة خلال ساعات الذروة من دخول المستخدمين.", - "FFmpegSavePathNotFound": "لم نستطع تحديد موقع ffmpeg باستخدام المسار الذي أدخلته. سوف نحتاج تطبيق FFprobe أيضاً ويجب أن يتواجد في نفس المكان. إن هذه الأجزاء تكون بالعادة الحزمة معاً في نفس ملف الإنزال. الرجاء التأكد من المسار المدخل والمحاولة مرة أخرى.", - "FastForward": "التقديم السريع", - "FileNotFound": "الملف غير موجود.", - "FileReadCancelled": "تم الغاء قراءة الملف.", - "FileReadError": "حدث خطأ بقراءة الملف.", + "DeleteUserConfirmation": "هل تريد بالتأكيد حذف هذا المستخدم؟", + "DeviceAccessHelp": "ينطبق هذا فقط على الأجهزة التي يمكن تمييزها بشكل فريد، ولن يمنع الوصول من المتصفح. تصفية وصول المستخدمين للأجهزة تمنعهم من استخدام أجهزة جديدة حتى تتم الموافقة عليها هنا.", + "DrmChannelsNotImported": "لن يتم استيراد القنوات التي تحتوي على DRM.", + "EnablePhotos": "عرض الصور", + "EnablePhotosHelp": "سيتم اكتشاف الصور وعرضها بجانب ملفات المحتوى الأخرى.", + "ErrorAddingListingsToSchedulesDirect": "حدث خطأ أثناء إضافة الباقة إلى حساب Schedules Direct. يسمح Schedules Direct بعدد محدود من الباقات لكل حساب. قد تحتاج إلى تسجيل الدخول إلى موقع Schedules Direct وإزالة باقات أخرى من حسابك قبل المتابعة.", + "ErrorAddingMediaPathToVirtualFolder": "حدث خطأ أثناء إضافة مسار المحتوى. تأكد من صحة المسار وأن Jellyfin يملك صلاحية الوصول إلى هذا الموقع.", + "ErrorAddingTunerDevice": "حدث خطأ أثناء إضافة جهاز الموالف. تأكد من إمكانية الوصول إليه ثم حاول مرة أخرى.", + "ErrorAddingXmlTvFile": "حدث خطأ أثناء الوصول إلى ملف XMLTV. تأكد من وجود الملف ثم حاول مرة أخرى.", + "ErrorGettingTvLineups": "حدث خطأ أثناء تنزيل باقات التلفزيون. تأكد من صحة معلوماتك ثم حاول مرة أخرى.", + "ErrorStartHourGreaterThanEnd": "يجب أن يكون وقت الانتهاء بعد وقت البدء.", + "ErrorPleaseSelectLineup": "اختر باقة ثم حاول مرة أخرى. إذا لم تكن هناك باقات متاحة، فتأكد من صحة اسم المستخدم وكلمة المرور والرمز البريدي.", + "ErrorSavingTvProvider": "حدث خطأ أثناء حفظ مزوّد التلفزيون. تأكد من إمكانية الوصول إليه ثم حاول مرة أخرى.", + "ExitFullscreen": "الخروج من ملء الشاشة", + "ExtractChapterImagesHelp": "يسمح استخراج صور الفصول للعملاء بعرض قوائم اختيار مشاهد رسومية. قد تكون العملية بطيئة وتستهلك موارد كثيرة وقد تحتاج إلى عدة غيغابايت من المساحة. تعمل عند اكتشاف الفيديوهات وأيضًا كمهمة مجدولة ليلية. يمكن ضبط الجدولة من قسم المهام المجدولة. لا يُنصح بتشغيلها أثناء ساعات الذروة.", + "FFmpegSavePathNotFound": "تعذر العثور على FFmpeg باستخدام المسار الذي أدخلته. يتطلب الأمر FFprobe أيضًا ويجب أن يكون في المجلد نفسه. عادةً تأتي هذه المكونات معًا في التنزيل نفسه. تحقق من المسار ثم حاول مرة أخرى.", + "FastForward": "تقديم سريع", + "FileNotFound": "لم يتم العثور على الملف.", + "FileReadCancelled": "تم إلغاء قراءة الملف.", + "FileReadError": "حدث خطأ أثناء قراءة الملف.", "Friday": "الجمعة", - "Fullscreen": "الشاشة كاملة", + "Fullscreen": "ملء الشاشة", "GuideProviderLogin": "تسجيل الدخول", - "GuideProviderSelectListings": "إختر المبوبات", - "H264CrfHelp": "معامل المعدل الثابت CRF هو الجودة الافتراضية لإعدادات مشفر x264 و x265. بإمكانك إعطاء قيمة تتراوح بين 0 و 51، وكلما قلة القيمة فسينتج عن ذلك جودة أفضل (على حساب حجم تخزين أعلى). القيم المعقولة تتراوح بين 18 و 28. الافتراضي ل x264 هو 23، ول x265 هو 28, لذا فبإمكانك استخدام هذه القيمة كنقطة بداية.", - "EncoderPresetHelp": "اختر قيمة أعلى لتحسين الصورة والأداء وقيمة أقل لتحسين الجودة.", - "HardwareAccelerationWarning": "تمكين التسريع بعتاد الحاسوب قد يتسبب في عدم استقرار بعض أنواع الأنظمة. تأكد من أن نظام التشغيل الخاص بك محدث إلى آخر نسخة وأن سواقات الفيديو محدثة أيضاً. إذا واجهت أية صعوبات في تسغيل الفيديو بعد تمكين هذه الخاصية، فعليك إرجاع الإعداد إلى وضعية بلا None.", - "HeaderAccessSchedule": "جدول الدخولات", - "HeaderAccessScheduleHelp": "إنشئ جدول دخولات لكي تتمكن من تحديد ساعات للدخول.", - "HeaderActiveDevices": "الأجهزة المفعّلة", - "HeaderActiveRecordings": "التسجيلات المفعلة", - "HeaderActivity": "الأنشطة", + "GuideProviderSelectListings": "اختيار قوائم الدليل", + "H264CrfHelp": "عامل المعدل الثابت (CRF) هو إعداد الجودة الافتراضي لمرمّزَي x264 وx265 البرمجيين. يمكنك ضبط القيم بين 0 و51؛ القيم الأقل تعني جودة أعلى مع ملفات أكبر. القيم المناسبة عادةً بين 18 و28. الافتراضي لـ x264 هو 23 ولـ x265 هو 28، ويمكنك البدء من هناك.", + "EncoderPresetHelp": "اختر قيمة أسرع لتحسين الأداء، أو أبطأ لتحسين الجودة.", + "HardwareAccelerationWarning": "قد يؤدي تفعيل التسريع العتادي إلى عدم الاستقرار في بعض البيئات. تأكد من تحديث نظام التشغيل وبرامج تشغيل الفيديو. إذا واجهت مشكلات في تشغيل الفيديو بعد تفعيله، فأعد الإعداد إلى «بدون».", + "HeaderAccessSchedule": "جدول الوصول", + "HeaderAccessScheduleHelp": "أنشئ جدول وصول لتقييد الوصول خلال ساعات محددة.", + "HeaderActiveDevices": "الأجهزة النشطة", + "HeaderActiveRecordings": "التسجيلات النشطة", + "HeaderActivity": "النشاط", "HeaderAddUpdateImage": "إضافة/تحديث صورة", - "HeaderAdditionalParts": "أدوار إضافية", - "HeaderAdmin": "الادارة", + "HeaderAdditionalParts": "أجزاء إضافية", + "HeaderAdmin": "الإدارة", "HeaderAlert": "تنبيه", - "HeaderAllowMediaDeletionFrom": "السماح بحذف الوسائط من قبل", - "HeaderApiKey": "مفتاح الـ API", + "HeaderAllowMediaDeletionFrom": "السماح بحذف المحتوى من", + "HeaderApiKey": "مفتاح API", "HeaderApiKeys": "مفاتيح API", - "HeaderApiKeysHelp": "التطبيقات الخارجية تحتاج أن تمتلك مفتاح API لكي تتصل بالخادم. هذه المفاتيح تُصدر عن طريق تسجيل الدخول بمستخدم عادي، أو عن طريق منح التطبيق مفتاحاً أصدر يدوياً.", + "HeaderApiKeysHelp": "تحتاج التطبيقات الخارجية إلى مفتاح API للتواصل مع الخادم. تصدر المفاتيح عند تسجيل الدخول بحساب مستخدم عادي أو عند منح التطبيق مفتاحًا يدويًا.", "HeaderApp": "التطبيق", "HeaderAudioSettings": "إعدادات الصوت", - "HeaderBranding": "وسومات البرنامج", - "HeaderCastAndCrew": "الممثلين وطاقم العمل", - "HeaderChannelAccess": "صلاحيات القنوات", - "HeaderConfirmPluginInstallation": "أكد عملية تثبيت الملحق", - "HeaderConfirmRevokeApiKey": "أرفض مفتاح API", - "HeaderConnectToServer": "اتصل إلى الخادم", - "HeaderConnectionFailure": "فشل في الاتصال", + "HeaderBranding": "الهوية البصرية", + "HeaderCastAndCrew": "طاقم العمل", + "HeaderChannelAccess": "الوصول إلى القنوات", + "HeaderConfirmPluginInstallation": "تأكيد تثبيت الملحق", + "HeaderConfirmRevokeApiKey": "تأكيد إلغاء التفويض", + "HeaderConnectToServer": "الاتصال بالخادم", + "HeaderConnectionFailure": "فشل الاتصال", "HeaderContinueWatching": "متابعة المشاهدة", "HeaderDateIssued": "تاريخ الإصدار", "HeaderDefaultRecordingSettings": "إعدادات التسجيل الافتراضية", "HeaderDeleteDevice": "حذف الجهاز", - "HeaderDeleteItem": "احذف العنصر", - "HeaderDeleteProvider": "حذف المزود", - "HeaderDeleteTaskTrigger": "حذف زناد المهمة", - "HeaderDeveloperInfo": "معلومات المطور", - "HeaderDeviceAccess": "الدخول على جهاز", + "HeaderDeleteItem": "حذف المحتوى", + "HeaderDeleteProvider": "حذف المزوّد", + "HeaderDeleteTaskTrigger": "حذف مشغّل المهمة", + "HeaderDeveloperInfo": "معلومات المطوّر", + "HeaderDeviceAccess": "الوصول إلى الأجهزة", "HeaderDevices": "الأجهزة", - "HeaderError": "حدث خطأ", - "HeaderFeatureAccess": "صلاحية الخاصية", - "HeaderFetchImages": "إطهار الصور", + "HeaderError": "خطأ", + "HeaderFeatureAccess": "الوصول إلى الميزات", + "HeaderFetchImages": "جلب الصور", "HeaderForKids": "للأطفال", - "HeaderFrequentlyPlayed": "شُغلت مرارا", - "HeaderGuideProviders": "مزودو الأدلة", - "HeaderImageOptions": "خيارات الصورة", + "HeaderFrequentlyPlayed": "الأكثر تشغيلًا", + "HeaderGuideProviders": "مزوّدو بيانات الدليل", + "HeaderImageOptions": "خيارات الصور", "HeaderInstall": "تثبيت", "HeaderInstantMix": "مزيج فوري", - "HeaderLatestEpisodes": "الحلقات المضافة حديثاً", - "HeaderLatestMedia": "الوسائط المضافة حديثا", - "HeaderLatestMovies": "الأفلام المضافة حديثا", - "HeaderLatestMusic": "الموسيقى المضافة حديثا", - "HeaderLatestRecordings": "التسجيلات المضافة أخيرا", + "HeaderLatestEpisodes": "الحلقات المضافة حديثًا", + "HeaderLatestMedia": "المحتوى المضاف حديثًا", + "HeaderLatestMovies": "الأفلام المضافة حديثًا", + "HeaderLatestMusic": "الموسيقى المضافة حديثًا", + "HeaderLatestRecordings": "التسجيلات المضافة حديثًا", "HeaderLibraries": "المكتبات", - "HeaderLibraryAccess": "صلاحيات المكتبة", - "HeaderLibraryFolders": "مجلدات الوسائط", - "HeaderLoginFailure": "فشل في تسجيل الدخول", - "HeaderMedia": "الوسائط", - "HeaderMediaFolders": "مجلدات الوسائط", - "HeaderMoreLikeThis": "أعمال مشابهة", - "HeaderMyMedia": "مكتبتي", + "HeaderLibraryAccess": "الوصول إلى المكتبة", + "HeaderLibraryFolders": "مجلدات المكتبة", + "HeaderLoginFailure": "فشل تسجيل الدخول", + "HeaderMedia": "المحتوى", + "HeaderMediaFolders": "مجلدات المحتوى", + "HeaderMoreLikeThis": "مشابه لهذا", + "HeaderMyMedia": "محتواي", "HeaderNewApiKey": "مفتاح API جديد", - "HeaderOtherItems": "عناصر أخرى", - "HeaderParentalRatings": "التصنيف الأبوي", - "HeaderPassword": "كلمة السر", - "HeaderPasswordReset": "إعادة تهيئة كلمة السر", + "HeaderOtherItems": "محتوى آخر", + "HeaderParentalRatings": "التصنيفات العمرية", + "HeaderPassword": "كلمة المرور", + "HeaderPasswordReset": "إعادة تعيين كلمة المرور", "HeaderPaths": "المسارات", "HeaderPlayAll": "تشغيل الكل", - "HeaderPlayback": "تشغيل الوسائط", - "HeaderPleaseSignIn": "الرجاء تسجيل الدخول", - "HeaderPreferredMetadataLanguage": "اللغة المفضلة للبيانات الوصفية", - "HeaderRecentlyPlayed": "شُغلت مؤخرا", - "HeaderRecordingPostProcessing": "تطبيق ما-بعد-المعالجة للتسجيل", - "HeaderRemoteControl": "التحكم عن بعد", - "HeaderRemoveMediaFolder": "إحذف مجلد الوسائط", - "HeaderRemoveMediaLocation": "إحذف مكان الوسائط", - "HeaderRevisionHistory": "تاريخ المراجعات", - "HeaderRunningTasks": "المهام المشغّلة", + "HeaderPlayback": "تشغيل المحتوى", + "HeaderPleaseSignIn": "يُرجى تسجيل الدخول", + "HeaderPreferredMetadataLanguage": "لغة البيانات الوصفية المفضلة", + "HeaderRecentlyPlayed": "المشغّل مؤخرًا", + "HeaderRecordingPostProcessing": "معالجة التسجيل بعد الانتهاء", + "HeaderRemoteControl": "التحكم عن بُعد", + "HeaderRemoveMediaFolder": "إزالة مجلد المحتوى", + "HeaderRemoveMediaLocation": "إزالة موقع المحتوى", + "HeaderRevisionHistory": "سجل الإصدارات", + "HeaderRunningTasks": "المهام قيد التشغيل", "HeaderScenes": "المشاهد", "HeaderSeasons": "المواسم", - "HeaderSelectCertificatePath": "إختر مسار الشهادة", - "HeaderSelectMetadataPath": "اختر مسار البيانات الوصفية", - "HeaderSelectMetadataPathHelp": "تصفح أو أدخل المسار الذي ترغب استخدامه لتخزين البيانات الوصفية. تأكد من أن المجلد قابل للكتابة.", - "HeaderSelectPath": "إختر المسار", - "HeaderSelectServerCachePath": "إختر مسار كاشة الخادم", - "HeaderSelectServerCachePathHelp": "تصفح أو أدخل المسار الذي ترغب أن يُستخدم كاشة لملفات الخادم. يجب أن يكون هذا المجلد قابل للكتابة فيه.", - "HeaderSelectTranscodingPath": "إختر المسار المؤقت للتشفير البيني", - "HeaderSelectTranscodingPathHelp": "تصفح أو أدخل المسار الذي ترغب أن يُستخدم لملفات التشفير البيني. يجب أن يكون هذا المجلد قابل للكتابة فيه.", - "HeaderSendMessage": "أرسل رسالة", - "HeaderSetupLibrary": "ضبط مكاتب المحتوى الخاصة بك", + "HeaderSelectCertificatePath": "اختيار مسار الشهادة", + "HeaderSelectMetadataPath": "اختيار مسار البيانات الوصفية", + "HeaderSelectMetadataPathHelp": "استعرض أو أدخل المسار الذي تريد استخدامه للبيانات الوصفية. يجب أن يكون المجلد قابلًا للكتابة.", + "HeaderSelectPath": "اختيار المسار", + "HeaderSelectServerCachePath": "اختيار مسار ذاكرة التخزين المؤقت للخادم", + "HeaderSelectServerCachePathHelp": "استعرض أو أدخل المسار المستخدم لملفات ذاكرة التخزين المؤقت للخادم. يجب أن يكون المجلد قابلًا للكتابة.", + "HeaderSelectTranscodingPath": "اختيار مسار تحويل الترميز", + "HeaderSelectTranscodingPathHelp": "استعرض أو أدخل المسار المستخدم لملفات تحويل الترميز. يجب أن يكون المجلد قابلًا للكتابة.", + "HeaderSendMessage": "إرسال رسالة", + "HeaderSetupLibrary": "إعداد مكتبات المحتوى", "HeaderSortBy": "ترتيب حسب", - "HeaderSortOrder": "تسلسل الترتيب", + "HeaderSortOrder": "ترتيب الفرز", "HeaderSpecialEpisodeInfo": "معلومات الحلقة الخاصة", - "HeaderStatus": "الوضعية", - "HeaderTaskTriggers": "زنادات المهام", - "HeaderThisUserIsCurrentlyDisabled": "هذا المستخدم موقف حالياً", - "HeaderTracks": "المقاطع الصوتية", - "HeaderTunerDevices": "أجهزة التوليف", - "HeaderTuners": "المولفات", - "HeaderTypeImageFetchers": "جالبات الصور ({0})", - "HeaderTypeText": "أدخل النص", - "HeaderUpcomingOnTV": "البرامج القادمة على التلفاز", - "HeaderUploadImage": "رفع الصور", + "HeaderStatus": "الحالة", + "HeaderTaskTriggers": "مشغّلات المهام", + "HeaderThisUserIsCurrentlyDisabled": "هذا المستخدم معطّل حاليًا", + "HeaderTracks": "المسارات", + "HeaderTunerDevices": "أجهزة الموالف", + "HeaderTuners": "الموالفات", + "HeaderTypeImageFetchers": "جالبي الصور ({0})", + "HeaderTypeText": "إدخال نص", + "HeaderUpcomingOnTV": "القادم على التلفاز", + "HeaderUploadImage": "رفع صورة", "HeaderUser": "المستخدم", "HeaderUsers": "المستخدمون", - "HeaderVideoTypes": "صيغ الفيديوهات", + "HeaderVideoTypes": "أنواع الفيديو", "HeaderVideos": "الفيديوهات", "HeaderYears": "السنوات", - "ImportFavoriteChannelsHelp": "فقط القنوات التي علّمت في المفضلة على جهاز المولف ستورد.", - "LabelAbortedByServerShutdown": "تم إهماله بسبب إغلاق الخادم", - "LabelAccessDay": "يوم الأسبوع", - "LabelAccessEnd": "وقت النهاية", - "LabelAccessStart": "وقت البداية", - "LabelAirDays": "أيام البث", - "LabelAirTime": "وقت البث", - "LabelAlbum": "الألبوم", - "LabelAlbumArtists": "فنانو الألبومات", - "LabelAllowHWTranscoding": "السماح بالتشفير البيني بعتاد الحاسب", + "ImportFavoriteChannelsHelp": "سيتم استيراد القنوات المعلّمة كمفضلة على جهاز الموالف فقط.", + "LabelAbortedByServerShutdown": "أُجهض بسبب إيقاف الخادم", + "LabelAccessDay": "اليوم من الأسبوع", + "LabelAccessEnd": "وقت الانتهاء", + "LabelAccessStart": "وقت البدء", + "LabelAirDays": "أيام العرض", + "LabelAirTime": "وقت العرض", + "LabelAlbum": "ألبوم", + "LabelAlbumArtists": "فنانو الألبوم", + "LabelAllowHWTranscoding": "السماح بتحويل الترميز العتادي", "LabelAppName": "اسم التطبيق", - "LabelAppNameExample": "اسم قابل للقراءة بشرياً لتحديد مفاتيح API. هذا الإعداد لن يؤثر على الوظائف.", + "LabelAppNameExample": "اسم مقروء يساعد على تمييز مفاتيح API. لن يؤثر هذا الإعداد على الوظائف.", "LabelArtists": "الفنانون", - "LabelArtistsHelp": "افصل بين الفنانين ب ; فاصلة منقوطة.", - "LabelAudioLanguagePreference": "اللغة المفضلة للصوت", - "LabelBindToLocalNetworkAddress": "إربطه إلى عنوان شبكة محلي", - "LabelBindToLocalNetworkAddressHelp": "تجاوز عنوان الآي بي المحلي لربطه بخادم http. إذا ترك فارغاً، فإن الخادم سيربطه بجميع العناوين المتاحة. تغيير هذه القيمة يتطلب إعادة تشغيل.", - "LabelBlastMessageInterval": "فترات بث رسالة قيد التشغيل", - "LabelBlastMessageIntervalHelp": "يحدد الفترة بالثواني بين بث رسائل قيد التشغيل.", - "LabelCache": "الذاكرة المؤقتة", - "LabelCachePath": "مسار ذاكرة الكاش", - "LabelCachePathHelp": "حدد موقع مخصص لملفات الخادم المؤقتة، مثل الصور وغيرها. أترك هذه الخانة فارغة لاستعمال القيمة الافتراضية.", + "LabelArtistsHelp": "افصل بين الفنانين بفاصلة منقوطة.", + "LabelAudioLanguagePreference": "لغة الصوت المفضلة", + "LabelBindToLocalNetworkAddress": "الربط بعنوان شبكة محلي", + "LabelBindToLocalNetworkAddressHelp": "تجاوز عنوان IP المحلي لخادم HTTP. إذا تُرِك فارغًا، فسيتم الربط بكل العناوين المتاحة. يتطلب التغيير إعادة تشغيل الخادم.", + "LabelBlastMessageInterval": "الفاصل الزمني لرسائل البقاء", + "LabelBlastMessageIntervalHelp": "حدّد المدة بالثواني بين رسائل البقاء النشطة.", + "LabelCache": "ذاكرة التخزين المؤقت", + "LabelCachePath": "مسار ذاكرة التخزين المؤقت", + "LabelCachePathHelp": "حدد موقعًا مخصصًا لملفات ذاكرة التخزين المؤقت للخادم مثل الصور. اتركه فارغًا لاستخدام الإعداد الافتراضي للخادم.", "LabelCancelled": "تم الإلغاء", - "LabelCollection": "المجموعة", - "LabelCommunityRating": "تقييم الجمهور", + "LabelCollection": "مجموعة", + "LabelCommunityRating": "تقييم المجتمع", "LabelContentType": "نوع المحتوى", - "LabelCountry": "البلد/المنطقة", - "LabelCurrentPassword": "كلمة السر الحالية", - "LabelCustomCertificatePath": "مسار شهادة SSL المخصص", - "LabelCustomCertificatePathHelp": "مسار ملف PKCS # 12 يحتوي على شهادة ومفتاح خاص لتمكين دعم TLS على مجال مخصص.", - "LabelCustomCss": "كود CSS المخصص", - "LabelCustomCssHelp": "قم بتطبيق كود CSS المخصص الخاص بك من أجل السمات / العلامة التجارية على واجهة الويب.", - "LabelCustomDeviceDisplayNameHelp": "أذكر اسم عرض مخصوص أو أتركه فارغاً لاستخدام الاسم المبلغ من الجهاز.", - "LabelDateAddedBehavior": "كيف يتصرف المحتوى الجديد نحو \"تاريخ الإضافة\" الخاص به", - "LabelDateAddedBehaviorHelp": "الأسبقية دائما للبيانات الوصفية لا على هذه الخيارات.", - "LabelDay": "يوم الأسبوع", + "LabelCountry": "الدولة/المنطقة", + "LabelCurrentPassword": "كلمة المرور الحالية", + "LabelCustomCertificatePath": "مسار شهادة SSL مخصصة", + "LabelCustomCertificatePathHelp": "المسار إلى ملف PKCS #12 الذي يحتوي على شهادة ومفتاح خاص لتفعيل دعم TLS على نطاق مخصص.", + "LabelCustomCss": "كود CSS مخصص", + "LabelCustomCssHelp": "طبّق كود CSS المخصص للسمات/الهوية البصرية على واجهة الويب.", + "LabelCustomDeviceDisplayNameHelp": "أدخل اسمًا مخصصًا لعرضه أو اتركه فارغًا لاستخدام الاسم الذي أبلغ عنه الجهاز.", + "LabelDateAddedBehavior": "سلوك تاريخ الإضافة للمحتوى الجديد", + "LabelDateAddedBehaviorHelp": "إذا كانت هناك قيمة بيانات وصفية موجودة، فسيتم استخدامها دائمًا قبل أي من هذه الخيارات.", + "LabelDay": "اليوم من الأسبوع", "LabelDeathDate": "تاريخ الوفاة", - "LabelDisplayName": "الاسم المعروض", - "LabelDisplaySpecialsWithinSeasons": "أظهر الحلقات الخاصة في المواسم التي بثت فيها", - "LabelDownMixAudioScale": "تعزيز الصوت عند تقليل توزيع قنوات الصوت", - "LabelDownMixAudioScaleHelp": "تعزيز الصوت عند تقليل توزيع قنوات الصوت. حدد القيمة ب 1 للمحافظة على القيمة الأصلية للصوت.", - "LabelDownloadLanguages": "إنزال اللغة", - "LabelDynamicExternalId": "معرفة {0}", - "LabelEnableRealtimeMonitor": "تفعيل خاصية المراقبة في الوقت الحقيقي", - "LabelEnableRealtimeMonitorHelp": "التغييرات للملفات ستعالج مباشرة علي انظمة الملفات المدعومة.", + "LabelDisplayName": "اسم العرض", + "LabelDisplaySpecialsWithinSeasons": "عرض الحلقات الخاصة ضمن المواسم التي عُرضت فيها", + "LabelDownMixAudioScale": "تعزيز الصوت عند المزج", + "LabelDownMixAudioScaleHelp": "تعزيز الصوت عند تقليل القنوات. تعيين القيمة إلى 1 يحافظ على مستوى الصوت الأصلي.", + "LabelDownloadLanguages": "لغات التنزيل", + "LabelDynamicExternalId": "معرّف {0}", + "LabelEnableRealtimeMonitor": "تفعيل المراقبة في الوقت الفعلي", + "LabelEnableRealtimeMonitorHelp": "ستتم معالجة التغييرات على الملفات فورًا في أنظمة الملفات المدعومة.", "LabelEndDate": "تاريخ الانتهاء", "LabelEpisodeNumber": "رقم الحلقة", "LabelEvent": "الحدث", "LabelEveryXMinutes": "كل", - "LabelExtractChaptersDuringLibraryScan": "استخلص صور الأبواب أثناء تمشيط المكتبة", - "LabelExtractChaptersDuringLibraryScanHelp": "فإن صور الأبواب ستُستخلص عندما تدرج الفيديوهات الجديدة أثناء تمشيط المكتبة. عند عدم التفعيل فإن عملية الاستخلاص ستكون محصورة أثناء مهمة صور الأبواب المجدولة، ما يسمح لعملية تمشيط المكتبة أن تنتهي بصورة أسرع.", - "LabelFailed": "العملية فشلت", - "LabelFileOrUrl": "الملف أو الرابط", + "LabelExtractChaptersDuringLibraryScan": "استخراج صور الفصول أثناء فحص المكتبة", + "LabelExtractChaptersDuringLibraryScanHelp": "إنشاء صور الفصول عند استيراد الفيديوهات أثناء فحص المكتبة. وإلا فسيتم استخراجها أثناء مهمة صور الفصول المجدولة، مما يسمح لفحص المكتبة المعتاد بالانتهاء أسرع.", + "LabelFailed": "فشل", + "LabelFileOrUrl": "ملف أو رابط URL", "LabelFinish": "إنهاء", - "LabelForgotPasswordUsernameHelp": "أدخل اسم المستخدم الخاص بك، إن كنت تتذكره.", + "LabelForgotPasswordUsernameHelp": "أدخل اسم المستخدم إذا كنت تتذكره.", "LabelFormat": "الصيغة", - "LabelFriendlyName": "اسم مخصوص لك", - "LabelServerNameHelp": "سيستخدم هذا الاسم للتعرف على هذا الخادم، وسيستخدم افتراضيا اسم الجهاز.", - "LabelGroupMoviesIntoCollections": "تجميع الأفلام إلى مجاميع", - "LabelGroupMoviesIntoCollectionsHelp": "سيتم عرض الأفلام في المجموعة كعنصر مجمع عند عرض قوائم الأفلام.", - "LabelH264Crf": "قيمة CRF لتشفير H264", - "LabelEncoderPreset": "إعداد التشفير", - "LabelHardwareAccelerationType": "استخدام كرت الشاشة", - "LabelHardwareAccelerationTypeHelp": "يتطلب استخدام كرت الشاشة إلى إعدادات إضافية.", + "LabelFriendlyName": "اسم مألوف", + "LabelServerNameHelp": "سيُستخدم هذا الاسم لتمييز الخادم، وسيعود افتراضيًا إلى اسم مضيف الخادم.", + "LabelGroupMoviesIntoCollections": "تجميع الأفلام في مجموعات", + "LabelGroupMoviesIntoCollectionsHelp": "ستُعرض الأفلام الموجودة ضمن مجموعة كعنصر واحد مجمّع عند عرض قوائم الأفلام.", + "LabelH264Crf": "ترميز H.264 CRF", + "LabelEncoderPreset": "إعداد الترميز المسبق", + "LabelHardwareAccelerationType": "تسريع عتادي", + "LabelHardwareAccelerationTypeHelp": "يتطلب التسريع العتادي إعدادات إضافية.", "LabelHttpsPort": "رقم منفذ HTTPS المحلي", - "LabelHttpsPortHelp": "رقم منفذ TCP للخادم ببروتوكول HTTPS.", - "LabelImageFetchersHelp": "مكّن ورتّب جالبات الصور التي تفضلها حسب أولوية التفضيل.", - "LabelImageType": "صيغة الصورة", - "LabelImportOnlyFavoriteChannels": "أحصر العرض على القنوات المعلّمة كمفضلات", - "LabelKidsCategories": "تصنيفات الأطفال", - "LabelKodiMetadataDateFormat": "تنسيق تاريخ الإصدار", - "LabelKodiMetadataDateFormatHelp": "جميع التواريخ داخل ملف NFO ستكون وفق هذا التنسيق.", - "LabelKodiMetadataEnableExtraThumbs": "إنسخ extrafanart إلى extrathumbs", - "LabelKodiMetadataEnableExtraThumbsHelp": "عند إنزال الصور بإمكان حفظها إلى extrafanart و extrathumbs لتكون متوافقة مع مظاهر Kodi بأقصى حد.", - "LabelKodiMetadataEnablePathSubstitution": "تفعيل إبدال المسارات", - "LabelKodiMetadataEnablePathSubstitutionHelp": "لتمكين استبدال مسار مسارات الصور باستخدام إعدادات استبدال مسار الخادم.", - "LabelKodiMetadataSaveImagePaths": "إحفظ مسارات الصور داخل ملفات nfo", - "LabelKodiMetadataSaveImagePathsHelp": "هذا الخيار ينصح به إذا كان لديك صور لا تتوافق مع الدليل الإرشادي لنظام Kodi.", + "LabelHttpsPortHelp": "رقم منفذ TCP لخادم HTTPS.", + "LabelImageFetchersHelp": "فعّل ورتّب جالبي الصور المفضلين لديك حسب الأولوية.", + "LabelImageType": "نوع الصورة", + "LabelImportOnlyFavoriteChannels": "تقييد بالقنوات المحددة كمفضلة", + "LabelKidsCategories": "فئات الأطفال", + "LabelKodiMetadataDateFormat": "صيغة تاريخ بيانات Kodi الوصفية", + "LabelKodiMetadataDateFormatHelp": "سيتم تحليل كل التواريخ داخل ملفات NFO باستخدام هذا التنسيق.", + "LabelKodiMetadataEnableExtraThumbs": "نسخ extrafanart إلى extrathumbs", + "LabelKodiMetadataEnableExtraThumbsHelp": "عند تنزيل الصور، يمكن حفظها في كل من extrafanart و extrathumbs للحصول على أقصى توافق مع سمة Kodi.", + "LabelKodiMetadataEnablePathSubstitution": "تفعيل استبدال المسار", + "LabelKodiMetadataEnablePathSubstitutionHelp": "تفعيل استبدال المسار لصور باستخدام إعدادات استبدال مسار الخادم.", + "LabelKodiMetadataSaveImagePaths": "حفظ مسارات الصور داخل ملفات NFO", + "LabelKodiMetadataSaveImagePathsHelp": "يُوصى بهذا الخيار إذا كان لديك أسماء ملفات صور لا تتوافق مع إرشادات Kodi.", "LabelLanguage": "اللغة", - "LabelLineup": "سلسل", + "LabelLineup": "الباقة", "LabelLocalHttpServerPortNumber": "رقم منفذ HTTP المحلي", "LabelLocalHttpServerPortNumberHelp": "رقم منفذ TCP لخادم HTTP.", "LabelLoginDisclaimer": "إخلاء مسؤولية تسجيل الدخول", - "LabelLoginDisclaimerHelp": "رساله ستعرض أسفل صفحة تسجيل الدخول.", + "LabelLoginDisclaimerHelp": "رسالة ستظهر أسفل صفحة تسجيل الدخول.", "LabelLogs": "السجلات", - "LabelMaxBackdropsPerItem": "أكبر عدد للخلفيات لكل عنصر", - "LabelMaxParentalRating": "الحد الاقصى لتصنيف الرقابة الابوية المسموح بها", - "LabelMaxResumePercentage": "النسبة المئوية الأقصى للمتابعة", - "LabelMaxResumePercentageHelp": "العنواين ستعتبر مشغلة حتى النهاية إذا أوقفت بعد هذا الوقت.", + "LabelMaxBackdropsPerItem": "الحد الأقصى لعدد الخلفيات لكل عنصر", + "LabelMaxParentalRating": "الحد الأقصى للتصنيف العمري المسموح به", + "LabelMaxResumePercentage": "الحد الأقصى لنسبة الاستئناف المئوية", + "LabelMaxResumePercentageHelp": "تعتبر العناوين مشغلة بالكامل إذا تم إيقافها بعد هذه النسبة.", "LabelMessageText": "نص الرسالة", "LabelMessageTitle": "عنوان الرسالة", "LabelMetadata": "البيانات الوصفية", - "LabelMetadataDownloadersHelp": "فعل ورتّب منزّلات البيانات الوصفية التي تفضلها حسب أولوية التفضيل. المنزّلات الأقل أولوية ستستخدم لتحل محل المعلومات التي لا يمكن العثور عليها.", + "LabelMetadataDownloadersHelp": "فعّل ورتّب منزّلي البيانات الوصفية المفضّلين لديك حسب الأولوية. سيُستخدم المنزّلون الأقل أولوية لملء المعلومات الناقصة فقط.", "LabelMetadataPath": "مسار البيانات الوصفية", - "LabelMetadataPathHelp": "حدد مسار غير افتراضي لإنزال الأعمال الفنية والبيانات الوصفية.", - "LabelMetadataReaders": "قُراء البيانات الوصفية", - "LabelMetadataReadersHelp": "رتب مصادر البيانات الوصفية التي تفضلها حسب أولوية التفضيل. الأسبقية في القراءة لأول ملف.", - "LabelMetadataSavers": "حافظات البيانات الوصفية", - "LabelMetadataSaversHelp": "اختر صيغ الملفات التي ترغب في استخدمها عند حفظ البيانات الوصفية.", - "LabelMinBackdropDownloadWidth": "أقل جودة للخلفية المنزلة", - "LabelMinResumeDuration": "الفترة الدنيا للمتابعة", - "LabelMinResumeDurationHelp": "اقل مدة فديو بالثواني سيقوم بحفظ مكان تشغيله و اعاده التشغيل منه.", - "LabelMinResumePercentage": "النسبة الدنيا للمتابعة", - "LabelMinResumePercentageHelp": "العناوين ستعتبر غير مشغلة إذا أوقفت قبل هذا الوقت.", - "LabelMovieCategories": "تصنيفات الأفلام", - "LabelMoviePrefix": "بادئة الأفلام", - "LabelMoviePrefixHelp": "إن كان هناك بادئة لعناوين الأفلام، فأدخلها هنا لكي يتمكن الخادم من أن يتعامل معها بالطريقة الصحيحة.", + "LabelMetadataPathHelp": "حدّد موقعًا مخصصًا لتنزيل الصور الفنية والبيانات الوصفية.", + "LabelMetadataReaders": "قراء البيانات الوصفية", + "LabelMetadataReadersHelp": "رتّب مصادر البيانات الوصفية المحلية المفضّلة لديك حسب الأولوية. سيُقرأ أول ملف يتم العثور عليه.", + "LabelMetadataSavers": "حفظ البيانات الوصفية", + "LabelMetadataSaversHelp": "اختر صيغ الملفات التي تريد استخدامها عند حفظ البيانات الوصفية.", + "LabelMinBackdropDownloadWidth": "الحد الأدنى لعرض تنزيل الخلفية", + "LabelMinResumeDuration": "الحد الأدنى لمدة الاستئناف", + "LabelMinResumeDurationHelp": "أقصر مدة فيديو بالثواني يتم عندها حفظ موضع التشغيل والسماح بالاستئناف.", + "LabelMinResumePercentage": "الحد الأدنى لنسبة الاستئناف المئوية", + "LabelMinResumePercentageHelp": "تعتبر العناوين غير مشغلة إذا تم إيقافها قبل هذا الوقت.", + "LabelMovieCategories": "فئات الأفلام", + "LabelMoviePrefix": "بادئة الفيلم", + "LabelMoviePrefixHelp": "إذا كانت هناك بادئة تُطبّق على عناوين الأفلام، أدخلها هنا حتى يتعامل معها الخادم بشكل صحيح.", "LabelMovieRecordingPath": "مسار تسجيل الأفلام", "LabelName": "الاسم", "LabelNewName": "الاسم الجديد", - "LabelNewPassword": "كلمة السر الجديدة", - "LabelNewPasswordConfirm": "تأكيد كلمة السر الجديدة", - "LabelNewsCategories": "التصنيفات الأخبارية", - "LabelNumberOfGuideDays": "عدد أيام بيانات الدليل للإنزال", - "LabelNumberOfGuideDaysHelp": "إنزال أيام أكثر من بيانات الدليل ستوفر أمكانية جدولة أيام أبعد وإظهار قوائم أطول للبرامج، لكنها ستأخذ وقتاً أطول للإنزال. الخيار الآلي سوف يتخيّر بناء على عدد القنوات المتاحة.", - "LabelPassword": "كلمة السر", - "LabelPasswordConfirm": "تأكيد كلمة السر", - "LabelPasswordRecoveryPinCode": "الرمز الشخصي", + "LabelNewPassword": "كلمة المرور الجديدة", + "LabelNewPasswordConfirm": "تأكيد كلمة المرور الجديدة", + "LabelNewsCategories": "فئات الأخبار", + "LabelNumberOfGuideDays": "عدد أيام بيانات الدليل المراد تنزيلها", + "LabelNumberOfGuideDaysHelp": "يوفر تنزيل بيانات الدليل لعدد أكبر من الأيام إمكانية الجدولة مسبقًا وعرض مزيد من القوائم، لكنه سيستغرق وقتًا أطول. سيختار الوضع التلقائي بناءً على عدد القنوات.", + "LabelPassword": "كلمة المرور", + "LabelPasswordConfirm": "تأكيد كلمة المرور", + "LabelPasswordRecoveryPinCode": "رمز PIN", "LabelPath": "المسار", - "LabelPlayDefaultAudioTrack": "تشغيل المقطع الصوتي الافتراضي بغض النظر عن اللغة", + "LabelPlayDefaultAudioTrack": "تشغيل مسار الصوت الافتراضي بغض النظر عن اللغة", "LabelPostProcessor": "تطبيق ما بعد المعالجة", - "LabelPostProcessorArguments": "معطيات سطر الأوامر لتطبيق ما بعد المعالجة", - "LabelPostProcessorArgumentsHelp": "استخدم المسار: {path} كمسار لملف التسجيل.", - "LabelPreferredDisplayLanguage": "لغة الواجهة المفضلة", - "LabelProfileContainer": "الحاوية", + "LabelPostProcessorArguments": "معطيات سطر الأوامر لما بعد المعالجة", + "LabelPostProcessorArgumentsHelp": "استخدم {path} كمسار لملف التسجيل.", + "LabelPreferredDisplayLanguage": "لغة العرض المفضلة", + "LabelProfileContainer": "حاوية الملف الشخصي", "LabelProtocol": "البروتوكول", "LabelPublicHttpPort": "رقم منفذ HTTP العام", - "LabelPublicHttpPortHelp": "رقم المنفذ العام الذي يجب أن يوافق منفذ HTTP المحلي.", + "LabelPublicHttpPortHelp": "رقم المنفذ العام الذي ينبغي تعيينه إلى منفذ HTTP المحلي.", "LabelPublicHttpsPort": "رقم منفذ HTTPS العام", - "LabelPublicHttpsPortHelp": "رقم المنفذ العام الذي يجب أن يوافق منفذ HTTPS المحلي.", - "LabelRecordingPath": "المسار الافتراضي للمقاطع المسجلة", - "LabelRecordingPathHelp": "حدد موقع افتراضي لحفظ المقاطع المسجلة، لو تركت هذه الخانة فارغة، فسيستعمل مجلد بيانات البرنامج.", + "LabelPublicHttpsPortHelp": "رقم المنفذ العام الذي ينبغي تعيينه إلى منفذ HTTPS المحلي.", + "LabelRecordingPath": "مسار التسجيل الافتراضي", + "LabelRecordingPathHelp": "حدد الموقع الافتراضي لحفظ التسجيلات. إذا تُرك فارغًا، فسيُستخدم مجلد بيانات البرنامج للخادم.", "LabelReleaseDate": "تاريخ الإصدار", - "LabelRemoteClientBitrateLimit": "حدد معدل البت للتشغيل التدفقي عبر الإنترنت (Mbps)", + "LabelRemoteClientBitrateLimit": "حد معدل البت للبث عبر الإنترنت (Mbps)", "LabelRuntimeMinutes": "مدة التشغيل", - "LabelSaveLocalMetadata": "احفظ الملصقات في ذات مجلد الوسائط خاصتها", - "LabelSaveLocalMetadataHelp": "حقظ الأعمال الفنية وواصفات البيانات مباشرة فى مجلدات الوسائط سيسهل عليك الوصول وعمل التعديلاات عليها.", - "LabelScheduledTaskLastRan": "آخر تشغيل {0}، وقد استغرق {1}.", + "LabelSaveLocalMetadata": "حفظ الصور الفنية في مجلدات المحتوى", + "LabelSaveLocalMetadataHelp": "سيؤدي حفظ الصور الفنية داخل مجلدات المحتوى إلى وضعها في مكان يسهل تعديلها فيه.", + "LabelScheduledTaskLastRan": "آخر تشغيل {0}، استغرق {1}.", "LabelSeasonNumber": "رقم الموسم", - "LabelSelectVersionToInstall": "إختر الإصدار للتثبيت", + "LabelSelectVersionToInstall": "اختيار الإصدار لتثبيته", "LabelSeriesRecordingPath": "مسار تسجيل المسلسلات", "LabelServerHost": "المضيف", "LabelServerHostHelp": "192.168.1.100:8096 أو https://myserver.com", - "LabelSkipIfAudioTrackPresent": "تخطّىإن كان المقطع الصوتي الافتراضي يتوافق مع اللغة المنزلة", - "LabelSkipIfAudioTrackPresentHelp": "لا تختر هذه لكي تؤكد وجود ترجمة لجميع الفيديوهات، بغض النظر عن لغة الصوت.", - "LabelSkipIfGraphicalSubsPresent": "تخطّى إن كان الفيديو يحتوى على ترجمة مسبقاً", - "LabelSkipIfGraphicalSubsPresentHelp": "الإبقاء على النسخ النصية للترجمة سيؤدي إلى رفع كفاءة التوصيل وسيقلل من احتمالية تفعيل التشفير البيني للفيديو.", + "LabelSkipIfAudioTrackPresent": "تخطّي إذا كان مسار الصوت الافتراضي يطابق لغة التنزيل", + "LabelSkipIfAudioTrackPresentHelp": "قم بإلغاء تحديد هذا الخيار لضمان أن تحتوي جميع مقاطع الفيديو على ترجمات، بغض النظر عن لغة الصوت.", + "LabelSkipIfGraphicalSubsPresent": "تخطّي إذا كان الفيديو يحتوي بالفعل على ترجمات مضمّنة", + "LabelSkipIfGraphicalSubsPresentHelp": "يساعد الاحتفاظ بنسخ نصية من الترجمات على تسليمها بكفاءة أكبر وتقليل احتمال تحويل ترميز الفيديو.", "LabelSource": "المصدر", - "LabelSportsCategories": "التصنيفات الرياضية", - "LabelStartWhenPossible": "إبدأ حال الإمكان", - "LabelStatus": "الوضعية", - "LabelStopWhenPossible": "أوقف حال الإمكان", - "LabelStopping": "قيد الإيقاف", - "LabelSubtitlePlaybackMode": "طور الترجمة", - "LabelTag": "البطاقة", + "LabelSportsCategories": "فئات الرياضة", + "LabelStartWhenPossible": "البدء عندما يكون ممكنًا", + "LabelStatus": "الحالة", + "LabelStopWhenPossible": "الإيقاف عندما يكون ممكنًا", + "LabelStopping": "جارٍ الإيقاف", + "LabelSubtitlePlaybackMode": "وضع الترجمة", + "LabelTag": "وسم", "LabelTime": "الوقت", - "LabelTimeLimitHours": "الوقت المحدد (بالساعة)", - "LabelTranscodingTempPathHelp": "حدد مسارًا مخصصًا لملفات التحويل التي يتم تقديمها للعملاء. اتركه فارغا لاستخدام الخادم الافتراضي.", - "LabelTranscodingThreadCount": "عدد مسارات التشفير البيني", - "LabelTranscodingThreadCountHelp": "حدد الحد الأقصى لعدد سلاسل الرسائل لاستخدامها عند تحويل الشفرة. سيؤدي تقليل عدد مؤشرات الترابط إلى تقليل استخدام CPU ولكن قد لا يتم التحويل بالسرعة الكافية للحصول على تجربة تشغيل سلسة.", - "LabelTriggerType": "نوع الزناد", - "LabelTunerIpAddress": "عنوان آي بي المولف", - "LabelTunerType": "نوع المولف", + "LabelTimeLimitHours": "الحد الزمني (بالساعات)", + "LabelTranscodingTempPathHelp": "حدد مسارًا مخصصًا لملفات تحويل الترميز المقدمة للعملاء. اتركه فارغًا لاستخدام الإعداد الافتراضي للخادم.", + "LabelTranscodingThreadCount": "عدد مسارات تحويل الترميز", + "LabelTranscodingThreadCountHelp": "اختر الحد الأقصى لعدد مسارات المعالجة لاستخدامها عند تحويل الترميز. سيؤدي تقليل عدد المسارات إلى خفض استخدام وحدة المعالجة المركزية (CPU)، لكن قد لا يكون التحويل سريعًا بما يكفي لتجربة تشغيل سلسة.", + "LabelTriggerType": "نوع المشغّل", + "LabelTunerIpAddress": "عنوان IP للموالف", + "LabelTunerType": "نوع الموالف", "LabelType": "النوع", - "LabelTypeMetadataDownloaders": "تنزيل البيانات الوصفية ({0})", + "LabelTypeMetadataDownloaders": "منزلو البيانات الوصفية ({0})", "LabelTypeText": "النص", "LabelUser": "المستخدم", "LabelUsername": "اسم المستخدم", "LabelVaapiDevice": "جهاز VA-API", - "LabelVaapiDeviceHelp": "هذه هي عقدة التصيير التي ستستخدم من قبل التسريع بعتاد الحاسوب.", + "LabelVaapiDeviceHelp": "هذه هي عقدة العرض المستخدمة للتسريع العتادي.", "LabelValue": "القيمة", - "LabelVersionInstalled": "{0} مثبتة", - "LabelYoureDone": "تم الانتهاء!", + "LabelVersionInstalled": "الإصدار {0} مثبّت", + "LabelYoureDone": "لقد انتهيت!", "LabelZipCode": "الرمز البريدي", - "LabelffmpegPath": "مسار ffmpeg", - "LabelffmpegPathHelp": "المسار الدال على ملف تطبيق ffmpeg أو المجلد الذي يحتوي ffmpeg.", - "LatestFromLibrary": "آخر ما أضيف في {0}", - "LibraryAccessHelp": "حدد المكتبات لمشاركتها مع هذا المستخدم. سيتمكن المسؤولون من تحرير جميع المجلدات باستخدام مدير البيانات الوصفية.", - "MapChannels": "توفيق القنوات", - "MaxParentalRatingHelp": "المحتويات ذات التصنيف الأبوي الأعلى ستخفى عن هذا المستخدم.", - "MediaInfoAnamorphic": "التشوه", - "MediaInfoAspectRatio": "النسبة البعدينية", + "LabelffmpegPath": "مسار FFmpeg", + "LabelffmpegPathHelp": "المسار إلى ملف تطبيق FFmpeg أو المجلد الذي يحتوي عليه.", + "LatestFromLibrary": "المضاف حديثًا في {0}", + "LibraryAccessHelp": "اختر المكتبات التي تريد مشاركتها مع هذا المستخدم. سيتمكن المديرون من تعديل كل المجلدات باستخدام مدير البيانات الوصفية.", + "MapChannels": "ربط القنوات", + "MaxParentalRatingHelp": "سيتم إخفاء المحتوى ذي التصنيف الأعلى عن هذا المستخدم.", + "MediaInfoAnamorphic": "مشوّه عدسيًا (Anamorphic)", + "MediaInfoAspectRatio": "نسبة العرض إلى الارتفاع", "MediaInfoBitDepth": "عمق البت", - "MediaInfoBitrate": "معدّل البت", + "MediaInfoBitrate": "معدل البت", "MediaInfoChannels": "القنوات", - "MediaInfoCodec": "الكودك", - "MediaInfoCodecTag": "بطاقة الكودك", - "MediaInfoContainer": "حاوية", - "MediaInfoDefault": "إفتراضي", + "MediaInfoCodec": "الترميز", + "MediaInfoCodecTag": "وسم الترميز", + "MediaInfoContainer": "الحاوية", + "MediaInfoDefault": "افتراضي", "MediaInfoExternal": "خارجي", - "MediaInfoForced": "مجبر", - "MediaInfoFramerate": "معدل الأطارات", - "MediaInfoInterlaced": "خطوط متعارضة", + "MediaInfoForced": "إجباري", + "MediaInfoFramerate": "معدل الإطارات", + "MediaInfoInterlaced": "متشابك", "MediaInfoLanguage": "اللغة", - "MediaInfoLayout": "مخطط التصميم", + "MediaInfoLayout": "التخطيط", "MediaInfoLevel": "المستوى", - "MediaInfoPath": "مسار", - "MediaInfoPixelFormat": "صيغة البكسل", - "MediaInfoProfile": "العريضة", - "MediaInfoRefFrames": "الأطر المرجعية", - "MediaInfoResolution": "الجودة", - "MediaInfoSampleRate": "معدًل الإعتيان", - "MediaInfoSize": "حجم", - "MediaInfoTimestamp": "البصمة الزمنية", - "MessageAreYouSureYouWishToRemoveMediaFolder": "هل أنت متأكد أنك تريد إزالة مجلد الوسائط هذا؟", - "MessageConfirmDeleteGuideProvider": "هل أنت متأكد أنك ترغب في حذف مزود الدليل هذا؟", - "MessageConfirmDeleteTunerDevice": "هل أنت متأكد أنك تريد حذف هذا الجهاز؟", - "MessageConfirmRemoveMediaLocation": "هل أنت متأكد أنك تريد حذف هذا الموقع؟", - "MessageConfirmRestart": "هل أنت متأكد أنك تريد أن تعيد تشغيل سيرفر Jellyfin؟", - "MessageConfirmRevokeApiKey": "هل أنت متأكد من رغبتك في إبطال مفتاح واجهة برمجة التطبيقات هذا؟ سيتم إنهاء اتصال التطبيق بهذا الخادم بشكل مفاجئ.", - "MessageConfirmShutdown": "هل أنت متأكد أنك تريد ايقاف السيرفر؟", - "MessageContactAdminToResetPassword": "الرجاء التواصل مع مدير النظام لإعادة أعداد كلمة السر.", - "MessageCreateAccountAt": "أنشئ حساب في {0}", - "MessageDeleteTaskTrigger": "هل أنت متأكد أنك تريد حذف زناد المهمة؟", - "MessageEnablingOptionLongerScans": "قد يؤدي تمكين هذا الخيار إلى إبطاء البحث في المكتبات بشكل ملحوظ.", - "MessageFileReadError": "حصل خطأ أثناء قراءة الملف. الرجاء المحاولة مرة اخرى.", - "MessageForgotPasswordFileCreated": "الملف التالي قد أنشيء على خادمك وهو يحتوي على التوجيهات لكيفية البدء", - "MessageForgotPasswordInNetworkRequired": "الرجاء المحاولة من خلال شبكة المنزل لبدء عملية إعادة إعداد كملة السر.", - "MessageInvalidForgotPasswordPin": "تم إدخال رمز PIN غير صالح أو منتهي الصلاحية. حاول مرة أخرى.", - "MessageInvalidUser": "اسم المستخدم أو كلمة السر غير صحيحة. الرجاء المحاولة مرة أخرى.", - "MessageItemSaved": "حُفظ العنصر.", - "MessageItemsAdded": "تم اضافة العناصر.", - "MessageNoMovieSuggestionsAvailable": "لا يوجد حالياً اقتراحات افلام. إبداً بمشاهدة وتقييم الأفلام ثم عاود زيارة هذه الصفحة لمشاهدة المقترحات.", - "MessageNothingHere": "لا شىء هنا.", - "MessagePasswordResetForUsers": "تم إعادة تعيين كلمات المرور للمستخدمين التاليين. يمكنهم الآن تسجيل الدخول باستخدام رموز الـPIN التي تم استخدامها لإعادة الضبط.", - "MessagePleaseEnsureInternetMetadata": "الرجاء التأكد من أن إمكانية إنزال واصفات البيانات من الإنترنت ممكنة.", - "MessagePluginConfigurationRequiresLocalAccess": "لضبط هذا البرنامج المساعد ، يرجى تسجيل الدخول إلى الخادم المحلي الخاص بك مباشرة.", - "MessagePluginInstallDisclaimer": "تحذير: تنصيب مكونات إضافية من مصادر طرف ثالث تحمل بعض المخاطر. قد تتضمن بعض البرمجيات الضارة، وقد تتغير في أي وقت. فقط قم بتنصيب المكونات الإضافية من مصدر تثق به، يرجى أخذ العلم بالآثار المحتملة التي قد تلحقها، مثل أوقات أطول لتمشيط مكتبتك، والعمليات الخلفية الإضافية.", - "MessageReenableUser": "أنظر أدناه لإعادة التفعيل", - "MessageTheFollowingLocationWillBeRemovedFromLibrary": "مكان الوسائط التالي سيزال من مكتبة Jellyfin الخاصة بك", - "MessageUnableToConnectToServer": "لم نستطع الاتصال إلى الخادم المختار في الوقت الحالي. الرجاء التأكد من أنه يعمل ثم المحاولة مرة أخرى.", - "MessageUnsetContentHelp": "المحتوى سيعرض كمجدات اعتيادية. لأفضل النتائج استخدم مدير واصفات البيانات لإعداد نوع محتوى المجلدات الفرعية.", - "MetadataManager": "مدير واصفات البيانات", - "MetadataSettingChangeHelp": "سيؤثر تغيير إعدادات البيانات الوصفية على المحتوى الجديد المُضاف من الآن فصاعدًا. لتحديث المحتوى الحالي ، افتح شاشة التفاصيل وانقر فوق الزر \"تحديث\" ، أو قم بإجراء تحديثات مجمعة باستخدام \"مدير البيانات الوصفية\".", - "MinutesAfter": "عدد الدقائق اللاحقة", - "MinutesBefore": "عدد الدقائق السابقة", + "MediaInfoPath": "المسار", + "MediaInfoPixelFormat": "تنسيق البكسل", + "MediaInfoProfile": "الملف الشخصي", + "MediaInfoRefFrames": "الإطارات المرجعية", + "MediaInfoResolution": "الدقة", + "MediaInfoSampleRate": "معدل العينة", + "MediaInfoSize": "الحجم", + "MediaInfoTimestamp": "الطابع الزمني", + "MessageAreYouSureYouWishToRemoveMediaFolder": "هل أنت متأكد من أنك تريد إزالة مجلد المحتوى هذا؟", + "MessageConfirmDeleteGuideProvider": "هل أنت متأكد أنك تريد حذف مزود الدليل هذا؟", + "MessageConfirmDeleteTunerDevice": "هل أنت متأكد من أنك تريد حذف هذا الجهاز؟", + "MessageConfirmRemoveMediaLocation": "هل أنت متأكد من أنك تريد إزالة هذا الموقع؟", + "MessageConfirmRestart": "هل أنت متأكد من أنك تريد إعادة تشغيل Jellyfin؟", + "MessageConfirmRevokeApiKey": "هل أنت متأكد من إلغاء تفويض مفتاح API هذا؟ سينقطع اتصال التطبيق بهذا الخادم فورًا.", + "MessageConfirmShutdown": "هل أنت متأكد من أنك تريد إيقاف تشغيل الخادم؟", + "MessageContactAdminToResetPassword": "يرجى التواصل مع مدير النظام لإعادة تعيين كلمة المرور.", + "MessageCreateAccountAt": "إنشاء حساب في {0}", + "MessageDeleteTaskTrigger": "هل أنت متأكد أنك تريد حذف مشغّل المهمة هذا؟", + "MessageEnablingOptionLongerScans": "قد يؤدي تفعيل هذا الخيار إلى فحص مكتبة أطول بكثير.", + "MessageFileReadError": "حدث خطأ أثناء قراءة الملف. يرجى المحاولة مرة أخرى.", + "MessageForgotPasswordFileCreated": "تم إنشاء الملف التالي على خادمك، ويحتوي على تعليمات حول كيفية المتابعة", + "MessageForgotPasswordInNetworkRequired": "يرجى المحاولة مرة أخرى من داخل شبكتك المنزلية لبدء عملية إعادة تعيين كلمة المرور.", + "MessageInvalidForgotPasswordPin": "تم إدخال رمز PIN غير صالح أو منتهي الصلاحية. يرجى المحاولة مرة أخرى.", + "MessageInvalidUser": "اسم المستخدم أو كلمة المرور غير صالحة. يرجى المحاولة مرة أخرى.", + "MessageItemSaved": "تم حفظ العنصر.", + "MessageItemsAdded": "تمت إضافة العناصر.", + "MessageNoMovieSuggestionsAvailable": "لا توجد اقتراحات أفلام متاحة حاليًا. ابدأ بمشاهدة أفلامك وتقييمها، ثم عُد لاحقًا لعرض التوصيات.", + "MessageNothingHere": "لا يوجد شيء هنا.", + "MessagePasswordResetForUsers": "تمت إعادة تعيين كلمات المرور للمستخدمين التاليين. يمكنهم الآن تسجيل الدخول باستخدام رموز PIN التي استخدمت لإجراء إعادة التعيين.", + "MessagePleaseEnsureInternetMetadata": "يرجى التأكد من تفعيل تنزيل البيانات الوصفية من الإنترنت.", + "MessagePluginConfigurationRequiresLocalAccess": "لإعداد هذا الملحق، يرجى تسجيل الدخول مباشرة إلى خادمك المحلي.", + "MessagePluginInstallDisclaimer": "تحذير: تثبيت ملحق من جهة خارجية ينطوي على مخاطر. قد يحتوي على كود غير مستقر أو ضار، وقد يتغير في أي وقت. ثبّت الملحقات من مصادر تثق بها فقط، وانتبه للآثار المحتملة مثل طلبات الخدمات الخارجية، أو فحص المكتبة لمدة أطول، أو عمليات إضافية في الخلفية.", + "MessageReenableUser": "انظر أدناه لإعادة التفعيل", + "MessageTheFollowingLocationWillBeRemovedFromLibrary": "ستتم إزالة مواقع المحتوى التالية من مكتبتك", + "MessageUnableToConnectToServer": "تعذر الاتصال بالخادم المحدد الآن. يرجى التأكد من أنه قيد التشغيل والمحاولة مرة أخرى.", + "MessageUnsetContentHelp": "سيُعرض المحتوى كمجلدات عادية. لأفضل النتائج، استخدم مدير البيانات الوصفية لتعيين أنواع محتوى المجلدات الفرعية.", + "MetadataManager": "مدير البيانات الوصفية", + "MetadataSettingChangeHelp": "ستؤثر تغييرات إعدادات البيانات الوصفية على المحتوى الجديد المضاف مستقبلاً. لتحديث المحتوى الحالي، افتح شاشة التفاصيل وانقر على زر 'تحديث'، أو قم بإجراء تحديثات جماعية باستخدام 'مدير البيانات الوصفية'.", + "MinutesAfter": "دقائق بعد", + "MinutesBefore": "دقائق قبل", "Monday": "الاثنين", "MoreFromValue": "المزيد من {0}", - "MoreUsersCanBeAddedLater": "يمكن إضافة المزيد من المستخدمين لاحقًا من داخل لوحة التحكم الرئيسية.", - "Mute": "صامت", + "MoreUsersCanBeAddedLater": "يمكن إضافة المزيد من المستخدمين لاحقًا من لوحة التحكم.", + "Mute": "كتم الصوت", "NextUp": "التالي", - "MessageNoNextUpItems": "لم يتم ايجاد شيء، إبدأ بمشاهدة برامجك!", - "MessageNoPluginConfiguration": "هذا البرنامج المساعد ليس لديه إعدادات بعد.", - "NumLocationsValue": "{0} مجلد(ات)", - "Option3D": "ثلاثي أبعاد", - "OptionAllowAudioPlaybackTranscoding": "تمكين تشغيل الصوت الذي يحتاج تشفيراً بينياً", - "OptionAllowBrowsingLiveTv": "السماح للوصول إلى قنوات التلفزة الحية", - "OptionAllowLinkSharing": "السماح بالمشاركة في قنوات التواصل الاجتماعي", - "OptionAllowLinkSharingHelp": "فقط الصفحات التي تحتويى على معلومات الوسائط سيسمح لها بالمشاركة. أما ملفات الوسائط فإنها لن تشارك مع قنوات التواصل. المشاركات محددة زمنياً وستنتهي بعد {0} يوم/أيام.", - "OptionAllowManageLiveTv": "السماح بإدارة وتسجيل قنوات التلفزة الحية", - "OptionAllowMediaPlayback": "السماح بتشغيل الوسائط", - "OptionAllowRemoteControlOthers": "السماح بالتحكم في المستخدمين الآخرين عن بعد", - "OptionAllowRemoteSharedDevices": "السماح بالتحكم في الأجهزة المشاركة عن بعد", - "OptionAllowRemoteSharedDevicesHelp": "أجهزة Dlna ستعتبر مشاركة إلى أن يبدأ مستخدم ما بالتحكم بها.", - "OptionAllowUserToManageServer": "اسمح لهذا المستخدم بالتحكم بالخادم", - "OptionAllowVideoPlaybackRemuxing": "تمكين تشغيل الفيديو الذي يحتاج إلى التحويل من غير تشفير", - "OptionAllowVideoPlaybackTranscoding": "تمكين تشغيل الفيديو الذي يحتاج تشفيراً بينياً", - "OptionAutomaticallyGroupSeries": "إدمج الحلقات الموزعة بين عدة مجلدات إلى مجلد واحد تلقائياً", - "OptionAutomaticallyGroupSeriesHelp": "سيتم دمج السلسلة التي يتم نشرها عبر مجلدات متعددة داخل هذه المكتبة تلقائيًا في سلسلة واحدة.", - "OptionCommunityRating": "تقييم الجمهور", + "MessageNoNextUpItems": "لم يتم العثور على شيء. ابدأ بمشاهدة مسلسلاتك!", + "MessageNoPluginConfiguration": "لا يحتوي هذا الملحق على إعدادات ليتم إعدادها.", + "NumLocationsValue": "{0} مجلدات", + "Option3D": "3D", + "OptionAllowAudioPlaybackTranscoding": "السماح بتشغيل الصوت الذي يتطلب تحويل الترميز", + "OptionAllowBrowsingLiveTv": "السماح بالوصول إلى التلفاز المباشر", + "OptionAllowLinkSharing": "السماح بالمشاركة عبر وسائل التواصل الاجتماعي", + "OptionAllowLinkSharingHelp": "تُشارك صفحات الويب التي تحتوي على معلومات المحتوى فقط. لا تتم مشاركة ملفات المحتوى علنًا أبدًا. تكون المشاركات محددة بوقت وتنتهي بعد {0} أيام.", + "OptionAllowManageLiveTv": "السماح بإدارة تسجيل التلفاز المباشر", + "OptionAllowMediaPlayback": "السماح بتشغيل المحتوى", + "OptionAllowRemoteControlOthers": "السماح بالتحكم عن بُعد في المستخدمين الآخرين", + "OptionAllowRemoteSharedDevices": "السماح بالتحكم عن بُعد في الأجهزة المشتركة", + "OptionAllowRemoteSharedDevicesHelp": "تُعتبر أجهزة DLNA مشتركة حتى يبدأ المستخدم في التحكم فيها.", + "OptionAllowUserToManageServer": "السماح لهذا المستخدم بإدارة الخادم", + "OptionAllowVideoPlaybackRemuxing": "السماح بتشغيل الفيديو الذي يتطلب تحويلاً بدون إعادة ترميز", + "OptionAllowVideoPlaybackTranscoding": "السماح بتشغيل الفيديو الذي يتطلب تحويل الترميز", + "OptionAutomaticallyGroupSeries": "دمج المسلسلات الموزعة على عدة مجلدات تلقائياً", + "OptionAutomaticallyGroupSeriesHelp": "سيتم تلقائيًا دمج المسلسلات الموزعة على عدة مجلدات داخل هذه المكتبة في مسلسل واحد.", + "OptionCommunityRating": "تقييم المجتمع", "OptionCriticRating": "تقييم النقاد", - "OptionDaily": "يومي", + "OptionDaily": "يوميًا", "OptionDateAdded": "تاريخ الإضافة", - "OptionDateAddedFileTime": "استخدم تاريخ إنشاء الملف", - "OptionDateAddedImportTime": "استخدم تاريخ التمشيط في المكتبة", + "OptionDateAddedFileTime": "استخدام تاريخ إنشاء الملف", + "OptionDateAddedImportTime": "استخدام تاريخ الفحص في المكتبة", "OptionDatePlayed": "تاريخ التشغيل", "OptionDisableUser": "تعطيل هذا المستخدم", - "OptionDisableUserHelp": "لن يسمح الخادم بأي اتصالات من هذا المستخدم. سيتم إنهاء الاتصالات الحالية.", - "OptionDisplayFolderView": "استعراض المجلد كمجلد وسائط بسيطة", - "OptionDisplayFolderViewHelp": "عرض المجلدات بجانب مكتبات الوسائط الأخرى الخاصة بك. يمكن أن يكون هذا مفيدًا إذا كنت ترغب في الحصول على عرض مجلد عادي.", - "OptionEnableAccessFromAllDevices": "تفعيل الدخول على كافة الأجهزة", - "OptionEnableAccessToAllChannels": "تفعيل الدخول على كافة القنوات", - "OptionEnableAccessToAllLibraries": "تمكين الدخول على كافة المكتبات", - "OptionEnableExternalContentInSuggestions": "تمكين المحتوى الخارجي في المقترحات", - "OptionEnableExternalContentInSuggestionsHelp": "السماح للعروض الإعلانية من الإنترنت وبرامج بث التلفزة الحي لتضمّن في المحتوى المقترح.", - "OptionEnableForAllTuners": "تمكين كل أجهزة المولفات", + "OptionDisableUserHelp": "لن يسمح الخادم بأي اتصالات من هذا المستخدم. ستنتهي الاتصالات الحالية فورًا.", + "OptionDisplayFolderView": "عرض نافذة المجلدات لعرض مجلدات الوسائط العادية", + "OptionDisplayFolderViewHelp": "عرض المجلدات بجانب مكتبات الوسائط الأخرى. يمكن أن يكون هذا مفيدًا إذا كنت ترغب في الحصول على عرض مجلد عادي.", + "OptionEnableAccessFromAllDevices": "تفعيل الوصول من كل الأجهزة", + "OptionEnableAccessToAllChannels": "تفعيل الوصول إلى كل القنوات", + "OptionEnableAccessToAllLibraries": "تفعيل الوصول إلى كل المكتبات", + "OptionEnableExternalContentInSuggestions": "تفعيل المحتوى الخارجي في الاقتراحات", + "OptionEnableExternalContentInSuggestionsHelp": "السماح بتضمين الإعلانات الترويجية من الإنترنت وبرامج التلفاز المباشر ضمن المحتوى المقترح.", + "OptionEnableForAllTuners": "تفعيل لجميع أجهزة الموالف", "OptionEveryday": "كل يوم", - "OptionExtractChapterImage": "تفعيل استخلاص صور الأبواب", + "OptionExtractChapterImage": "تفعيل استخراج صور الفصول", "OptionHasThemeSong": "أغنية الشارة", "OptionHasThemeVideo": "فيديو الشارة", - "OptionHideUser": "أخفي هذا المستخدم من شاشة الدخول", - "OptionHideUserFromLoginHelp": "هذه مفيدة لحسابات المدراء المتخفّين أو الخصوصيين. على المستخدم في هذه الحالة أن يدخل بياناته يدوياً عبر إدخال اسم المستخدم وكلمة السر.", - "OptionIsHD": "جودة عالية", - "OptionIsSD": "جودة منخفضة", - "OptionMax": "الحد الأقصى", - "OptionMissingEpisode": "حلفة مفقودة", - "OptionOnInterval": "بناء على فترة", - "OptionParentalRating": "التصنيف الأبوي", - "OptionPlayCount": "مرات التشغيل", - "OptionPremiereDate": "تاريخ العرض", - "OptionReleaseDate": "تاريخ الإنتاج", - "OptionRequirePerfectSubtitleMatch": "قم بتنزيل الترجمات المطابقة تمامًا لملفات الفيديو فقط", - "OptionResumable": "إمكانية التكملة", - "OptionSaveMetadataAsHidden": "حفظ واصفات البيانات والصور كملفات مخفية", - "OptionSaveMetadataAsHiddenHelp": "سيؤدي تغيير هذا إلى تطبيق البيانات الوصفية الجديدة المحفوظة من الآن فصاعدًا. ستتحدث ملفات البيانات الوصفية الموجودة في المرة التالية التي يتم فيها حفظها بوساطة الخادم.", - "OptionSpecialEpisode": "حصريات", - "OptionTrackName": "اسم المقطوعة", + "OptionHideUser": "إخفاء هذا المستخدم من شاشات تسجيل الدخول", + "OptionHideUserFromLoginHelp": "مفيد لحسابات الإدارة الخاصة أو المخفية. سيحتاج المستخدم إلى تسجيل الدخول يدويًا بإدخال اسم المستخدم وكلمة المرور الخاصة به.", + "OptionIsHD": "HD", + "OptionIsSD": "SD", + "OptionMax": "الأقصى", + "OptionMissingEpisode": "الحلقات المفقودة", + "OptionOnInterval": "على فترات زمنية", + "OptionParentalRating": "التصنيف العمري", + "OptionPlayCount": "عدد مرات التشغيل", + "OptionPremiereDate": "تاريخ العرض الأول", + "OptionReleaseDate": "تاريخ الإصدار", + "OptionRequirePerfectSubtitleMatch": "تنزيل الترجمات التي تمثل تطابقًا تامًا لملفات الفيديو فقط", + "OptionResumable": "قابل للاستئناف", + "OptionSaveMetadataAsHidden": "حفظ البيانات الوصفية والصور كملفات مخفية", + "OptionSaveMetadataAsHiddenHelp": "سيُطبّق هذا التغيير على البيانات الوصفية الجديدة المحفوظة من الآن فصاعدًا. سيتم تحديث ملفات البيانات الوصفية الحالية في المرة التالية التي يحفظها فيها الخادم.", + "OptionSpecialEpisode": "خاص", + "OptionTrackName": "اسم المسار", "OptionTvdbRating": "تقييم TheTVDB", - "OptionUnairedEpisode": "حلفة لم تبثّ", - "OptionWakeFromSleep": "استيقظ من السبات", + "OptionUnairedEpisode": "حلقات لم تُعرض", + "OptionWakeFromSleep": "الاستيقاظ من السكون", "OptionWeekdays": "أيام الأسبوع", - "OptionWeekends": "أيام العطلة", + "OptionWeekends": "عطلات نهاية الأسبوع", "OptionWeekly": "أسبوعي", - "OriginalAirDateValue": "تاريخ البث الأصلي: {0}", - "ParentalRating": "Parental Rating", - "PasswordMatchError": "كلمة السر وتاكيدها يجب ان يتطابقان.", - "PasswordResetComplete": "لقد تم اعادة تعيين كلمة السر.", - "PasswordResetConfirmation": "هل انت متاكد من انك تريد اعادة تعيين كلمة السر؟", - "PasswordSaved": "حُفظت كلمة السر.", + "OriginalAirDateValue": "تاريخ العرض الأصلي: {0}", + "ParentalRating": "التصنيف العمري", + "PasswordMatchError": "يجب أن تتطابق كلمة المرور وتأكيدها.", + "PasswordResetComplete": "تمت إعادة تعيين كلمة المرور.", + "PasswordResetConfirmation": "هل أنت متأكد من رغبتك في إعادة تعيين كلمة المرور؟", + "PasswordSaved": "تم حفظ كلمة المرور.", "PictureInPicture": "صورة داخل صورة", - "PleaseAddAtLeastOneFolder": "الرجاء إضافة مجلد واحد على الأقل لهذه المكتبة بالضغط على زر \"إضافة\".", - "RecommendationBecauseYouLike": "لأنك أحببت {0}", + "PleaseAddAtLeastOneFolder": "يرجى إضافة مجلد واحد على الأقل إلى هذه المكتبة عن طريق النقر على الزر '+' في قسم 'المجلدات'.", + "RecommendationBecauseYouLike": "لأنك تحب {0}", "RecommendationBecauseYouWatched": "لأنك شاهدت {0}", - "RecommendationDirectedBy": "إخراج {0}", + "RecommendationDirectedBy": "من إخراج {0}", "RecommendationStarring": "بطولة {0}", - "MessageChangeRecordingPath": "إن تغيير مجلد التسجيل لن ينقل التسجيلات الموجودة من الموقع القديم إلى الموقع الجديد. سيتعين عليك أن تنقلهم بنفسك .", - "RememberMe": "تذكرنى", - "Rewind": "الترجيع", + "MessageChangeRecordingPath": "لن يؤدي تغيير مجلد التسجيل إلى نقل التسجيلات الحالية من الموقع القديم إلى الجديد. ستحتاج إلى نقلها يدويًا إذا رغبت في ذلك.", + "RememberMe": "تذكرني", + "Rewind": "ترجيع", "Saturday": "السبت", "Save": "حفظ", "SendMessage": "إرسال رسالة", "Series": "المسلسل", - "ServerUpdateNeeded": "خادم Jellyfin بحاجة إلى التحديث. لإنزال أحدث إصدار Jellyfin، الرجاء زيارة {0}", - "Settings": "الاعدادات", - "SettingsSaved": "حُفظت الإعدادات.", - "SettingsWarning": "إن تغيير هذه الإعدادات سيتسبب في عدم استقرار النظام أو فشل في الاتصالات. إن صرت تلاحظ أية مشاكل، فننصح أن ترجع الإعدادات إلى القيم الافتراضية.", - "ShowAdvancedSettings": "عرض الاعدادات المتقدمة", + "ServerUpdateNeeded": "هذا الخادم بحاجة إلى تحديث. لتنزيل أحدث إصدار، يرجى زيارة {0}", + "Settings": "الإعدادات", + "SettingsSaved": "تم حفظ الإعدادات.", + "SettingsWarning": "تغيير هذه القيم قد يسبب عدم استقرار أو فشل في الاتصال. إذا واجهت أي مشاكل، نوصي بإعادتها إلى القيم الافتراضية.", + "ShowAdvancedSettings": "إظهار الإعدادات المتقدمة", "Sports": "الرياضة", "Subtitles": "الترجمات", - "Sunday": "الاحد", - "TabAccess": "الدخول", + "Sunday": "الأحد", + "TabAccess": "الوصول", "TabAdvanced": "متقدم", "TabDashboard": "لوحة التحكم", - "TabLatest": "أضيف حديثا", - "TabLogs": "الكشوفات", + "TabLatest": "أُضيف حديثًا", + "TabLogs": "السجلات", "TabMusic": "الموسيقى", "TabNetworks": "شبكات التلفزيون", - "TabNfoSettings": "أعدادات Nfo", + "TabNfoSettings": "إعدادات NFO", "TabOther": "أخرى", - "TabParentalControl": "التحكم الأبوي", + "TabParentalControl": "الرقابة الأبوية", "TabPlugins": "الملحقات", "TabScheduledTasks": "المهام المجدولة", "TabServer": "الخادم", - "TabStreaming": "التشغيل التدفقي", + "TabStreaming": "البث", "TabUpcoming": "القادم", - "TellUsAboutYourself": "اخبرنا عن نفسك", - "ThisWizardWillGuideYou": "سيساعدك هذا المعالج في إرشادك خلال عملية الإعداد. للبدء، يرجى إدخال اسم الخادم وتحديد لغتك المفضلة.", + "TellUsAboutYourself": "أخبرنا عن نفسك", + "ThisWizardWillGuideYou": "سيساعدك هذا الدليل خلال عملية الإعداد. للبدء، يرجى إدخال اسم الخادم واختيار لغتك المفضلة.", "Thursday": "الخميس", - "TitleHardwareAcceleration": "تسريع بعتاد الحاسوب", + "TitleHardwareAcceleration": "تسريع عتادي", "TitleHostingSettings": "إعدادات الاستضافة", "TitlePlayback": "التشغيل", "Tuesday": "الثلاثاء", - "UninstallPluginConfirmation": "هل انت متاكد انك تريد إزالة تثبيت {0}؟", - "HeaderUninstallPlugin": "الغاء الملحق", - "Unmute": "غير صامت", - "UserProfilesIntro": "يتضمن Jellyfin دعمًا لملفات تعريف المستخدمين مع إعدادات العرض الدقيقة وحالة التشغيل والمراقبة.", - "ValueAlbumCount": "{0} ألبوم(ات)", + "UninstallPluginConfirmation": "هل أنت متأكد من رغبتك في إزالة الملحق {0}؟", + "HeaderUninstallPlugin": "إزالة الملحق", + "Unmute": "إلغاء كتم الصوت", + "UserProfilesIntro": "يدعم Jellyfin ملفات تعريف المستخدمين مع إعدادات عرض دقيقة، وحالة التشغيل، وأدوات الرقابة الأبوية.", + "ValueAlbumCount": "{0} ألبومات", "ValueDiscNumber": "القرص {0}", - "ValueEpisodeCount": "{0} حلقة/حلقات", - "ValueMinutes": "{0} دقيقة/دقائق", - "ValueMovieCount": "{0} فيلم/أفلام", - "ValueMusicVideoCount": "{0} فيديو(هات) موسيقي(ة)", - "ValueOneAlbum": "ألبوم واحد", - "ValueOneEpisode": "حلقة واحدة", - "ValueOneMovie": "فيلم واحد", - "ValueOneMusicVideo": "فيديو موسيقي واحد", - "ValueOneSeries": "مسلسل واحدة", - "ValueOneSong": "أغنية واحدة", - "ValueSeriesCount": "{0} مسلسل(ات)", - "ValueSongCount": "{0} أغنية/أغاني", - "ValueTimeLimitMultiHour": "الحد الزمني: {0} ساعة/ساعات", + "ValueEpisodeCount": "{0} حلقات", + "ValueMinutes": "{0} دقيقة", + "ValueMovieCount": "{0} أفلام", + "ValueMusicVideoCount": "{0} فيديوهات موسيقية", + "ValueOneAlbum": "ألبوم 1", + "ValueOneEpisode": "حلقة 1", + "ValueOneMovie": "فيلم 1", + "ValueOneMusicVideo": "فيديو موسيقي 1", + "ValueOneSeries": "مسلسل 1", + "ValueOneSong": "أغنية 1", + "ValueSeriesCount": "{0} مسلسلات", + "ValueSongCount": "{0} أغاني", + "ValueTimeLimitMultiHour": "الحد الزمني: {0} ساعات", "ValueTimeLimitSingleHour": "الحد الزمني: ساعة واحدة", "ViewPlaybackInfo": "عرض معلومات التشغيل", - "Wednesday": "الاربعاء", + "Wednesday": "الأربعاء", "WelcomeToProject": "مرحباً بك في Jellyfin!", - "WizardCompleted": "هذا كل ما نحتاجه منك الآن. لقد بدأ Jellyfin بجمع المعلومات التي يحتاجها عن مكتبة الوسائط الخاصة بك. تفحص بعض تطبيقاتنا ثم اضغط إنهاء لعرض لوحة عدادات الخادم.", - "XmlTvKidsCategoriesHelp": "البرامج من هذه التصنيفات ستعرض كبرامج أطفال. إفصل الإدخالات المتعددة برمز \"|\".", - "XmlTvMovieCategoriesHelp": "البرامج من هذه التصنيفات ستعرض كأفلام. إفصل الإدخالات المتعددة برمز \"|\".", - "XmlTvNewsCategoriesHelp": "البرامج من هذه التصنيفات ستعرض كبرامج أخبارية. إفصل الإدخالات المتعددة برمز \"|\".", - "XmlTvPathHelp": "مسار إلى ملف XMLTV. سيقوم Jellyfin بقراءة هذا الملف ويتأكد باستمرار لأية تحديثات. ستكون أنت المسؤول عن إنشاء وتحديث الملف.", - "XmlTvSportsCategoriesHelp": "البرامج من هذه التصنيفات ستعرض كبرامج رياضية. إفصل الإدخالات المتعددة برمز \"|\".", - "Yesterday": "البارحة", + "WizardCompleted": "هذا كل ما نحتاجه الآن. بدأ Jellyfin بجمع المعلومات حول مكتبة الوسائط الخاصة بك. تفقد بعض تطبيقاتنا، ثم انقر على إنهاء لعرض لوحة التحكم.", + "XmlTvKidsCategoriesHelp": "سيتم عرض البرامج ذات هذه الفئات كبرامج للأطفال. افصل بين الفئات المتعددة بـ '|'.", + "XmlTvMovieCategoriesHelp": "سيتم عرض البرامج ذات هذه الفئات كأفلام. افصل بين الفئات المتعددة بـ '|'.", + "XmlTvNewsCategoriesHelp": "سيتم عرض البرامج ذات هذه الفئات كبرامج إخبارية. افصل بين الفئات المتعددة بـ '|'.", + "XmlTvPathHelp": "مسار إلى ملف XMLTV. سيقرأ Jellyfin هذا الملف ويتحقق منه بشكل دوري بحثًا عن التحديثات. أنت مسؤول عن إنشاء الملف وتحديثه.", + "XmlTvSportsCategoriesHelp": "سيتم عرض البرامج ذات هذه الفئات كبرامج رياضية. افصل بين الفئات المتعددة بـ '|'.", + "Yesterday": "أمس", "ConfirmDeleteImage": "حذف الصورة؟", - "ConfigureDateAdded": "قم بإعداد كيفية تحديد البيانات الوصفية ل \"تاريخ الإضافة\" في لوحة المعلومات> المكتبات> العرض", - "Composer": "ألحان", - "CommunityRating": "تقييم الجمهور", - "ColorTransfer": "نقل اللون", - "ColorSpace": "مساحة اللون", + "ConfigureDateAdded": "اضبط طريقة تحديد البيانات الوصفية لحقل «تاريخ الإضافة» من لوحة التحكم > المكتبات > العرض", + "Composer": "الملحن", + "CommunityRating": "تقييم المجتمع", + "ColorTransfer": "نقل الألوان", + "ColorSpace": "مساحة الألوان", "ChannelNumber": "رقم القناة", - "ChannelNameOnly": "قناة {0} فقط", - "ChangingMetadataImageSettingsNewContent": "سيتم تطبيق التغييرات على إعدادات بيانات التعريف أو تنزيل العمل الفني فقط على المحتوى الجديد الذي تمت إضافته إلى مكتبتك. لتطبيق التغييرات على العناوين الحالية ، ستحتاج إلى تحديث بيانات التعريف الخاصة بها يدويًا.", + "ChannelNameOnly": "القناة {0} فقط", + "ChangingMetadataImageSettingsNewContent": "لن تُطبّق تغييرات إعدادات تنزيل البيانات الوصفية أو الصور الفنية إلا على المحتوى الجديد المضاف إلى مكتبتك. لتطبيقها على العناوين الحالية، ستحتاج إلى تحديث بياناتها الوصفية يدويًا.", "Songs": "الأغاني", "Playlists": "قوائم التشغيل", "Photos": "الصور", "Movies": "الأفلام", - "Shows": "العروض", + "Shows": "المسلسلات", "Books": "الكتب", - "ValueSpecialEpisodeName": "حلقة خاصه - {0}", - "HeaderAlbumArtists": "فناني الألبوم", - "Genres": "التصنيفات", + "ValueSpecialEpisodeName": "خاص - {0}", + "HeaderAlbumArtists": "فنانو الألبوم", + "Genres": "الأنواع", "Folders": "المجلدات", "Favorites": "المفضلة", - "Collections": "مجموعات", + "Collections": "المجموعات", "Categories": "الفئات", "CancelSeries": "إلغاء المسلسل", "CancelRecording": "إلغاء التسجيل", - "ButtonScanAllLibraries": "فحص جميع المكتبات", - "ButtonGotIt": "حسنا", - "ButtonAddImage": "أضف صورة", - "BurnSubtitlesHelp": "يحدد ما إن كان الخادم سيحرق الترجمة. تجنب هذا الخِيار يزيد سرعة عملية الترميز. حدد على تلقائي لكي يُحرق الترجمة على المقطع المرئي فقط عندما تكون الصيغ الأتية (VobSub، PGS، SUB، IDX، إلخ)، كما ستُطبق على بعض الصيغ من ASS وSSA.", - "BoxRear": "العلبة (الجهة الخلفية)", - "Box": "العلبة", - "BookLibraryHelp": "الكتب الصوتية والنصية مدعومة. راجع {0} دليل تسمية الكتاب {1}.", + "ButtonScanAllLibraries": "فحص كل المكتبات", + "ButtonGotIt": "فهمت", + "ButtonAddImage": "إضافة صورة", + "BurnSubtitlesHelp": "حدّد ما إذا كان على الخادم تضمين الترجمات داخل الفيديو. تجنّب ذلك يحسّن الأداء بشكل كبير. اختر تلقائي لتضمين الصيغ المعتمدة على الصور (VobSub وPGS وSUB وIDX وغيرها) وبعض ترجمات ASS أو SSA.", + "BoxRear": "الغلاف الخلفي", + "Box": "الغلاف", + "BookLibraryHelp": "الكتب الصوتية والنصية مدعومة. راجع دليل تسمية الكتب {0} {1}.", "Blacklist": "القائمة السوداء", "BirthLocation": "مكان الميلاد", - "Banner": "اللافتة", - "Backdrops": "خلفيات الصفحة", - "Backdrop": "خلفية الصفحة", + "Banner": "لافتة", + "Backdrops": "الخلفيات", + "Backdrop": "خلفية", "Auto": "تلقائي", - "AuthProviderHelp": "إختر مقدم المصادقة ليتم إستخدامه لمصادقة كلمة مرور هذا المستخدم.", + "AuthProviderHelp": "اختر موفّر المصادقة المستخدم للتحقق من كلمة مرور هذا المستخدم.", "AroundTime": "حوالي {0}", - "AspectRatio": "النسبة البعدينية", + "AspectRatio": "نسبة العرض إلى الارتفاع", "Ascending": "تصاعدي", "AsManyAsPossible": "أكبر عدد ممكن", - "Artists": "فنانون", - "Art": "فن", - "Anytime": "أي وقت", + "Artists": "الفنانون", + "Art": "الصورة الفنية", + "Anytime": "في أي وقت", "AnyLanguage": "أي لغة", - "AlwaysPlaySubtitlesHelp": "الترجمة التي تطابق تفضيلات اللغة سيتم تحميلها بغض النظر عن لغة الصوت.", - "AlwaysPlaySubtitles": "شغل الترجمة دائماً", - "AllowedRemoteAddressesHelp": "قائمة العناوين IP أو عناوين IP/netmask المكتوبة مفصولة بفاصلة للشبكات التي ستُسمح لها بالاتصال عن بعد. إذا تركت فارغة، فسيُسمح لجميع العناوين عن بعد.", - "AllowOnTheFlySubtitleExtractionHelp": "يستخرج الترجمات المدمجة في المقطع المرئي، ومن ثم يعرضها على المشاهد بنص عادي، لكي يَحُدّ قد الإمكان من عمليات ترميز المقطع المرئي، ولكن في بعض الأنظمة، قد يتسبب في توقف المقطع المرئي خلال المشاهدة، ويحدث هذا إذا كانت عملية الاستخراج قائمة، وقد يستغرق وقتا طويلا. عطل هذا الخِيار لتُحرق الترجمات على المقطع المرئي خلال عملية الترميز عندما يُشغل المقطع المرئي على جهاز لا يدعم هذا النوع من الترجمات.", - "AllowOnTheFlySubtitleExtraction": "السماح بإستخراج الترجمة على الطائر", - "AllowMediaConversionHelp": "السماح او عدم السماح بالوصول لخاصية تحويل الوسائط.", - "AllowMediaConversion": "السماح بتحويل الوسائط", + "AlwaysPlaySubtitlesHelp": "سيتم تحميل الترجمات المطابقة لتفضيل اللغة بغض النظر عن لغة الصوت.", + "AlwaysPlaySubtitles": "تشغيل دائمًا", + "AllowedRemoteAddressesHelp": "قائمة بعناوين IP أو إدخالات IP/قناع الشبكة للشبكات المسموح لها بالاتصال عن بُعد، مفصولة بفواصل. إذا تُركت فارغة، فسيُسمح بكل العناوين البعيدة.", + "AllowOnTheFlySubtitleExtractionHelp": "يمكن استخراج الترجمات المضمّنة من الفيديوهات وإرسالها إلى العملاء كنص عادي للمساعدة في تجنّب تحويل ترميز الفيديو. قد تستغرق العملية وقتًا طويلًا في بعض الأنظمة وتسبب توقف التشغيل أثناء الاستخراج. عطّل هذا الخيار ليتم تضمين الترجمات داخل الفيديو عند التحويل إذا لم يكن جهاز العميل يدعمها مباشرة.", + "AllowOnTheFlySubtitleExtraction": "السماح باستخراج الترجمة أثناء التشغيل", + "AllowMediaConversionHelp": "منح أو منع الوصول إلى ميزة تحويل المحتوى.", + "AllowMediaConversion": "السماح بتحويل المحتوى", "AllLanguages": "كل اللغات", "AllEpisodes": "كل الحلقات", - "AllComplexFormats": "جميع الصيغ المعقدة (ASS, SSA, VobSub, PGS, SUB, IDX, …)", + "AllComplexFormats": "كل الصيغ المعقّدة (ASS, SSA, VobSub, PGS, SUB, IDX, …)", "AllChannels": "كل القنوات", - "Albums": "ألبومات", - "Aired": "عرضت", + "Albums": "الألبومات", + "Aired": "عُرض", "AirDate": "تاريخ العرض", - "AddedOnValue": "أُضيف {0}", - "AddToPlaylist": "أضف إلى قائمة التشغيل", - "AddToPlayQueue": "أضف إلى قائمة التشغيل المؤقتة", - "AddToCollection": "أضف إلى التجميعات", - "Add": "اضف", + "AddedOnValue": "تمت الإضافة {0}", + "AddToPlaylist": "إضافة إلى قائمة تشغيل", + "AddToPlayQueue": "إضافة إلى قائمة التشغيل الحالية", + "AddToCollection": "إضافة إلى مجموعة", + "Add": "إضافة", "Actor": "ممثل", - "AccessRestrictedTryAgainLater": "الوصول مقيد حاليًا. الرجاء المحاولة لاحقا.", - "Absolute": "مطلقمطلق", + "AccessRestrictedTryAgainLater": "الوصول مقيّد حاليًا. يُرجى المحاولة لاحقًا.", + "Absolute": "مطلق", "Ended": "انتهى", - "EndsAtValue": "ينتهى عند {0}", + "EndsAtValue": "ينتهي عند {0}", "Episodes": "الحلقات", "ConfirmDeletion": "تأكيد الحذف", - "ConfirmDeleteItems": "حذف هذه العناصر سوف يحذفها من نظام الملفات ومن مكتبة الوسائط. هل ترغب حقاً فى الاستمرار؟", - "EveryNDays": "كل {0} يوم", - "ConfirmDeleteItem": "حذف هذا العنصر سوف يحذفه من نظام الملفات ومن مكتبة الوسائط. هل ترغب حقاً فى الاستمرار؟", - "DropShadow": "ظل منسدل", - "LabelDropShadow": "اسقاط الظل", - "EditSubtitles": "تعديل الترجمات", - "EditMetadata": "تعديل البيانات التعريفية", + "ConfirmDeleteItems": "سيؤدي حذف هذه العناصر إلى حذفها من نظام الملفات ومن مكتبة المحتوى. هل تريد المتابعة؟", + "EveryNDays": "كل {0} أيام", + "ConfirmDeleteItem": "سيؤدي حذف هذا المحتوى إلى حذفه من نظام الملفات ومن مكتبة الوسائط. هل تريد المتابعة؟", + "DropShadow": "إسقاط ظل", + "LabelDropShadow": "إسقاط ظل", + "EditSubtitles": "تعديل الترجمة", + "EditMetadata": "تعديل البيانات الوصفية", "EditImages": "تعديل الصور", "Edit": "تعديل", - "ManageRecording": "ادارة التسجيل", - "ManageLibrary": "ادارة المكتبة", - "MessageImageTypeNotSelected": "الرجاء اختيار نوع الصورة من القائمة المنسدلة.", - "MessageImageFileTypeAllowed": "ملفات JPEG و PNG مدعومون فقط.", - "MessageDownloadQueued": "تمت إضافة التحميل إلى قائمة الانتظار.", - "MessageConfirmRecordingCancellation": "هل تريد الغاء التسجيل؟", - "MessageAreYouSureDeleteSubtitles": "هل انت متأكد انك تريد حذف ملف الترجمة هذا؟", + "ManageRecording": "إدارة التسجيل", + "ManageLibrary": "إدارة المكتبة", + "MessageImageTypeNotSelected": "يرجى اختيار نوع الصورة من القائمة المنسدلة.", + "MessageImageFileTypeAllowed": "يتم دعم ملفات JPEG و PNG فقط.", + "MessageDownloadQueued": "تم وضع التنزيل في قائمة الانتظار.", + "MessageConfirmRecordingCancellation": "هل تريد إلغاء التسجيل؟", + "MessageAreYouSureDeleteSubtitles": "هل أنت متأكد من أنك تريد حذف ملف الترجمة هذا؟", "Menu": "القائمة", - "MediaIsBeingConverted": "يتم تحويل الوسط الى صيغة متوافقة مع الحهاز الذي يشغل الوسط.", - "ContinueWatching": "استئناف المشاهدة", - "Horizontal": "عرضي", - "Home": "الصفحة الرئيسية", - "HideWatchedContentFromLatestMedia": "إخفاء المحتوى الذي تمت مشاهدته من الوسائط المضافة حديثا", - "Hide": "اخفاء", + "MediaIsBeingConverted": "يتم تحويل المحتوى إلى صيغة متوافقة مع الجهاز الذي يقوم بتشغيل المحتوى.", + "ContinueWatching": "متابعة المشاهدة", + "Horizontal": "أفقي", + "Home": "الرئيسية", + "HideWatchedContentFromLatestMedia": "إخفاء المحتوى المشاهد من 'المحتوى المضاف حديثًا'", + "Hide": "إخفاء", "Help": "المساعدة", "HeaderVideoType": "نوع الفيديو", "HeaderVideoQuality": "جودة الفيديو", - "HeaderSubtitleDownloads": "تحميلات الترجمة", - "HeaderSubtitleAppearance": "شكل الترجمة", - "HeaderStopRecording": "اوقف التسجيل", - "HeaderStartNow": "شغل الآن", + "HeaderSubtitleDownloads": "تنزيلات الترجمة", + "HeaderSubtitleAppearance": "مظهر الترجمة", + "HeaderStopRecording": "إيقاف التسجيل", + "HeaderStartNow": "ابدأ الآن", "HeaderSeriesStatus": "حالة المسلسل", - "HeaderSeriesOptions": "اعدادات المسلسل", - "HeaderSecondsValue": "{0} ثوانى", - "HeaderRecordingOptions": "اعدادات التسجيل", - "HeaderPlaybackError": "خطأ فى التشغيل", - "HeaderPlayOn": "شغل على", - "HeaderPhotoAlbums": "البومات الصور", - "HeaderOnNow": "الآن", - "HeaderNextVideoPlayingInValue": "سيتم تشغيل الفيديو القادم فى {0}", - "HeaderNextEpisodePlayingInValue": "سيتم تشغيل الحلقة القادمة فى {0}", - "HeaderNewDevices": "الاجهزة الجديدة", + "HeaderSeriesOptions": "خيارات المسلسل", + "HeaderSecondsValue": "{0} ثوانٍ", + "HeaderRecordingOptions": "خيارات التسجيل", + "HeaderPlaybackError": "خطأ في التشغيل", + "HeaderPlayOn": "تشغيل على", + "HeaderPhotoAlbums": "ألبومات الصور", + "HeaderOnNow": "يعرض الآن", + "HeaderNextVideoPlayingInValue": "يبدأ الفيديو التالي خلال {0}", + "HeaderNextEpisodePlayingInValue": "تبدأ الحلقة التالية خلال {0}", + "HeaderNewDevices": "أجهزة جديدة", "HeaderNavigation": "التنقل", - "HeaderMyMediaSmall": "وسائطى (العرض الصغير)", - "HeaderMusicQuality": "جودة الموسيقي", - "HeaderMetadataSettings": "اعدادات البيانات الوصفية", - "HeaderLiveTvTunerSetup": "اعداد موالف التلفاز المباشر", - "HeaderLibrarySettings": "اعدادات المكتبة", - "HeaderLibraryOrder": "ترتيب المكتبة", - "HeaderKodiMetadataHelp": "لتمكين أو تعطيل البيانات الوصفية ل NFO ، قم بتحرير مكتبة وابحث عن قسم \"حافظات البيانات الوصفية\".", - "EnableNextVideoInfoOverlay": "عرض معلومات الفيديو القادم أثناء التشغيل", + "HeaderMyMediaSmall": "محتواي (صغير)", + "HeaderMusicQuality": "جودة الموسيقى", + "HeaderMetadataSettings": "إعدادات البيانات الوصفية", + "HeaderLiveTvTunerSetup": "إعداد موالف البث المباشر", + "HeaderLibrarySettings": "إعدادات المكتبة", + "HeaderLibraryOrder": "ترتيب المكتبات", + "HeaderKodiMetadataHelp": "لتفعيل أو تعطيل بيانات NFO الوصفية، عدّل مكتبة وابحث عن قسم «حافظات البيانات الوصفية».", + "EnableNextVideoInfoOverlay": "عرض معلومات الفيديو التالي أثناء التشغيل", "DatePlayed": "تاريخ التشغيل", "DateAdded": "تاريخ الإضافة", "CriticRating": "تقييم النقاد", - "ResumeAt": "اكمل من {0}", - "AskAdminToCreateLibrary": "اطلب من المسؤول إنشاء مكتبة.", - "Artist": "الفنان", - "AllowFfmpegThrottling": "كبح تقدم الترميز", - "AlbumArtist": "المؤدي", + "ResumeAt": "استئناف من {0}", + "AskAdminToCreateLibrary": "اطلب من المدير إنشاء مكتبة.", + "Artist": "فنان", + "AllowFfmpegThrottling": "تقييد تحويلات الترميز", + "AlbumArtist": "فنان الألبوم", "Album": "ألبوم", "Disconnect": "قطع الاتصال", - "Disc": "القرص", + "Disc": "قرص", "Directors": "المخرجون", "Director": "المخرج", - "DirectPlaying": "بث مباشر", - "DirectStreaming": "بث مباشر مع تحويل الحاوية", - "DirectStreamHelp2": "استهلاك الطاقة عن طريق البث المباشر عادةً يعتمد على ملف الصوت . فقط بث الفديو لن يشهد أي تغيير في الجودة.", - "DirectStreamHelp1": "يَدعم جهازك تشغيل هذا النوع من المقاطع المرئية، ولكن إما ١. جهازك لا يدعم تشغيل إحدى المقاطع الصوتية التالية: (DTS، Dolby، TrueHD، إلخ)، أو، ٢. جهازك لا يدعم تشغيل هذا العدد من القنوات الصوتية. سيُنسخ المقطع المرئي إلى حاوية أخرى دون إعادة ترميزه، ولكن سيُعاد ترميز المقطع الصوتي ترميزا متناسب مع جهازك، ومن ثم سيُرسل إليك لمشاهدته.", - "DetectingDevices": "يتم الكشف عن الأجهزة", - "Desktop": "سطح مكتب (تراثي)", + "DirectPlaying": "تشغيل مباشر", + "DirectStreaming": "بث مباشر", + "DirectStreamHelp2": "يعتمد استهلاك الطاقة في البث المباشر عادةً على ملف الصوت. بث الفيديو فقط يكون دون فقدان.", + "DirectStreamHelp1": "بث الفيديو متوافق مع الجهاز، لكن صيغة الصوت أو عدد قنواته غير متوافق. سيُعاد تغليف بث الفيديو دون فقدان أثناء إرساله إلى الجهاز، وسيتم تحويل ترميز بث الصوت فقط.", + "DetectingDevices": "جارٍ اكتشاف الأجهزة", + "Desktop": "سطح المكتب", "Descending": "تنازلي", - "Depressed": "منخفض", - "DeinterlaceMethodHelp": "حدد أي أسلوب تود استخدامه لفك التشابك عندما تُرمز باستخدام المعالج، أما عندما يدعم كرت الشاشة فك التشابك باستخدامه؛ فسيُستخدم عوضا عن هذا الأسلوب المُختار.", - "DefaultSubtitlesHelp": "يتم عرض الترجمات استنادًا إلى العلامات الافتراضية والقسرية في البيانات التعريفية المضمنة. سيتم إعتبار تفضيلات اللغة عند توفر خيارات متعددة.", - "DefaultMetadataLangaugeDescription": "هذه هي إعداداتك الافتراضية ويمكن تعديلها على أساس كل مكتبة.", + "Depressed": "حزين", + "DeinterlaceMethodHelp": "اختر طريقة إزالة التشابك عند تحويل ترميز المحتوى المتشابك برمجيًا. عند تفعيل تسريع عتادي يدعم إزالة التشابك، سيُستخدم مزيل التشابك العتادي بدل هذا الإعداد.", + "DefaultSubtitlesHelp": "تُحمّل الترجمات بناءً على علامتَي الافتراضي والإجباري في البيانات الوصفية المضمّنة. تُراعى تفضيلات اللغة عند توفر أكثر من خيار.", + "DefaultMetadataLangaugeDescription": "هذه هي الإعدادات الافتراضية، ويمكن تخصيصها لكل مكتبة على حدة.", "Default": "افتراضي", - "CopyStreamURL": "نسخ عنوان رابط البث", - "Continuing": "مستمر", - "CopyStreamURLSuccess": "تم نسخ عنوان الرابط بنجاح.", - "Connect": "إتصال", - "ConfirmEndPlayerSession": "هل تريد إيقاف Jellyfin عند {0}؟", - "ColorPrimaries": "الألوان التمهيدية", - "ClientSettings": "إعدادات التطبيق", + "CopyStreamURL": "نسخ رابط البث", + "Continuing": "متابعة", + "CopyStreamURLSuccess": "تم نسخ الرابط بنجاح.", + "Connect": "اتصال", + "ConfirmEndPlayerSession": "هل تريد إيقاف Jellyfin على {0}؟", + "ColorPrimaries": "الألوان الأساسية", + "ClientSettings": "إعدادات العميل", "ButtonTogglePlaylist": "قائمة التشغيل", - "BoxSet": "طقم", + "BoxSet": "مجموعة أفلام", "ButtonSplit": "تقسيم", - "AllowFfmpegThrottlingHelp": "عندما يتقدم الترميز أو إعادة المزج بشكل كافٍ عن موضع التشغيل الحالي، أوقف العملية مؤقتًا لتقليل استهلاك الموارد. هذا مفيد جدًا عند المشاهدة دون البحث المتكرر. أوقف هذه الميزة إذا واجهت مشاكل في التشغيل.", - "InstallingPackage": "تثبيت {0} (الإصدار {1})", + "AllowFfmpegThrottlingHelp": "عندما يتقدم تحويل الترميز أو إعادة التغليف بما يكفي عن موضع التشغيل الحالي، يتم إيقاف العملية مؤقتًا لتقليل استهلاك الموارد. يفيد هذا غالبًا عند المشاهدة دون التنقل كثيرًا. عطّل هذا الخيار إذا واجهت مشكلات في التشغيل.", + "InstallingPackage": "جارٍ تثبيت {0} (الإصدار {1})", "Images": "الصور", - "Identify": "التعرف على الوسائط", - "HttpsRequiresCert": "لتمكين الاتصالات الآمنة ، ستحتاج إلى توفير شهادة SSL موثوقة ، مثل Letsencrypt. يرجى إما تقديم شهادة أو تعطيل الاتصالات الآمنة.", + "Identify": "تعريف", + "HttpsRequiresCert": "لتفعيل الاتصالات الآمنة، ستحتاج إلى توفير شهادة SSL موثوقة. يرجى توفير شهادة أو تعطيل الاتصالات الآمنة.", "HeaderServerAddressSettings": "إعدادات عنوان الخادم", - "HeaderRemoteAccessSettings": "إعدادات الوصول عن بعد", - "HeaderKeepSeries": "حافظ على السلسلة", - "HeaderKeepRecording": "استمر في التسجيل", - "HeaderIdentifyItemHelp": "أدخل معيار بحث واحد أو أكثر. إزالة المعايير لزيادة نتائج البحث.", + "HeaderRemoteAccessSettings": "إعدادات الوصول عن بُعد", + "HeaderKeepSeries": "الاحتفاظ بالمسلسل", + "HeaderKeepRecording": "الاحتفاظ بالتسجيل", + "HeaderIdentifyItemHelp": "أدخل معيار بحث واحدًا أو أكثر. أزل المعايير لزيادة نتائج البحث.", "HeaderHttpsSettings": "إعدادات HTTPS", "HeaderFetcherSettings": "إعدادات الجلب", - "HeaderExternalIds": "المعرفات الخارجية", - "HeaderEnabledFieldsHelp": "قم بإلغاء تحديد حقل لقفله ومنع تغيير بياناته.", - "HeaderEnabledFields": "الحقول الممكّنة", - "HeaderEditImages": "تحرير الصور", - "HeaderDVR": "جهاز الـ DVR", - "HeaderDownloadSync": "تنزيل ومزامنة", - "HeaderDetectMyDevices": "كشف أجهزتي", - "HeaderDeleteItems": "حذف العناصر", - "HeaderContinueListening": "استمر في الاستماع", - "HeaderConfigureRemoteAccess": "إعداد الوصول عن بعد", - "HeaderChapterImages": "صور الفصل", - "HeaderCancelSeries": "إلغاء السلسلة", + "HeaderExternalIds": "المعرّفات الخارجية", + "HeaderEnabledFieldsHelp": "ألغِ تحديد حقل لقفله ومنع تغيير بياناته.", + "HeaderEnabledFields": "الحقول المفعّلة", + "HeaderEditImages": "تعديل الصور", + "HeaderDVR": "DVR", + "HeaderDownloadSync": "التنزيل والمزامنة", + "HeaderDetectMyDevices": "اكتشاف أجهزتي", + "HeaderDeleteItems": "حذف المحتوى", + "HeaderContinueListening": "متابعة الاستماع", + "HeaderConfigureRemoteAccess": "إعداد الوصول عن بُعد", + "HeaderChapterImages": "صور الفصول", + "HeaderCancelSeries": "إلغاء المسلسل", "HeaderCancelRecording": "إلغاء التسجيل", - "HeaderBlockItemsWithNoRating": "حظر العناصر التي لا تحتوي على معلومات تصنيف أو لم يتم التعرف عليها", - "HeaderAudioBooks": "الكتب الصوتية", - "HeaderAppearsOn": "يظهر على", - "ApiKeysCaption": "قائمة بمفاتيح API المفعلة حاليًا", - "HeaderAddToPlaylist": "أضف إلى قائمة التشغيل", - "HeaderAddToCollection": "أضف إلى المجموعة", + "HeaderBlockItemsWithNoRating": "حظر العناصر التي لا تحتوي على تقييم", + "HeaderAudioBooks": "كتب صوتية", + "HeaderAppearsOn": "يظهر في", + "ApiKeysCaption": "قائمة مفاتيح API المفعّلة حاليًا", + "HeaderAddToPlaylist": "إضافة إلى قائمة تشغيل", + "HeaderAddToCollection": "إضافة إلى مجموعة", "HDPrograms": "برامج HD", "Guide": "الدليل", - "GuestStar": "النجم الضيف", - "GroupVersions": "إصدارات المجموعة", - "GroupBySeries": "تجميع حسب السلسلة", - "Genre": "التصنيف الأدبي", - "General": "الإعدادات العامة", - "FormatValue": "صيغة الملف: {0}", - "Filters": "مرشحات", + "GuestStar": "ضيف شرف", + "GroupVersions": "تجميع الإصدارات", + "GroupBySeries": "تجميع حسب المسلسل", + "Genre": "النوع", + "General": "عام", + "FormatValue": "الصيغة: {0}", + "Filters": "الفلاتر", "File": "ملف", - "FetchingData": "يتم تنزيل بيانات إضافية", + "FetchingData": "جارٍ جلب بيانات إضافية", "Features": "الميزات", - "Favorite": "المفضلة", - "Extras": "مواسم إضافية", - "ErrorDeletingItem": "حدث خطأ في حذف العنصر من Jellyfin. يرجى التحقق من أن Jellyfin لديه حق الوصول للكتابة إلى مجلد الوسائط وحاول مرة أخرى.", + "Favorite": "مفضل", + "Extras": "الإضافات", + "ErrorDeletingItem": "حدث خطأ أثناء حذف المحتوى من الخادم. تأكد من أن Jellyfin يملك صلاحية الكتابة في مجلد المحتوى ثم حاول مرة أخرى.", "Episode": "حلقة", - "EnableThemeVideosHelp": "قم بتشغيل الفيديوهات الرئيسية في الخلفية أثناء تصفح المكتبة.", - "EnableThemeSongsHelp": "قم بتشغيل اللحن الرئيسي في الخلفية أثناء تصفح المكتبة.", - "EnableStreamLoopingHelp": "قم بتمكين هذا إذا كانت عمليات البث المباشر تحتوي فقط على بضع ثوان من البيانات وتحتاج إلى إعادة طلب مستمر. قد يؤدي تمكين هذا عندما لا تكون هناك حاجة إلى مشاكل.", - "EnableStreamLooping": "تكرار البث المباشر", - "EnableHardwareEncoding": "لتفعيل ترميز الأجهزة", - "EnableExternalVideoPlayersHelp": "سيتم عرض قائمة مشغل خارجي عند بدء تشغيل الفيديو.", + "EnableThemeVideosHelp": "تشغيل فيديوهات الشارة في الخلفية أثناء استعراض المكتبة.", + "EnableThemeSongsHelp": "تشغيل أغاني الشارة في الخلفية أثناء استعراض المكتبة.", + "EnableStreamLoopingHelp": "فعّل هذا إذا كانت البثوث المباشرة تحتوي على ثوانٍ قليلة فقط من البيانات وتحتاج إلى طلبها باستمرار. قد يؤدي تفعيله دون حاجة إلى مشكلات.", + "EnableStreamLooping": "تكرار البث المباشر تلقائيًا", + "EnableHardwareEncoding": "تفعيل الترميز العتادي", + "EnableExternalVideoPlayersHelp": "ستظهر قائمة مشغّل خارجي عند بدء تشغيل الفيديو.", "EnableExternalVideoPlayers": "مشغلات الفيديو الخارجية", - "EnableDisplayMirroring": "اعرض شاشتك على شاشة أخرى", - "EnableColorCodedBackgrounds": "تصنيف الخلفيات حسب اللون", + "EnableDisplayMirroring": "انعكاس العرض", + "EnableColorCodedBackgrounds": "خلفيات ملونة", "EnableCinemaMode": "وضع السينما", - "EnableBackdropsHelp": "عرض الخلفيات الخاصة في خلفية بعض الصفحات أثناء تصفح المكتبة.", - "DownloadsValue": "{0} تحميلات", - "Download": "تحميل", + "EnableBackdropsHelp": "عرض الخلفيات في خلفية بعض الصفحات أثناء استعراض المكتبة.", + "DownloadsValue": "{0} تنزيلات", + "Download": "تنزيل", "Down": "أسفل", - "DoNotRecord": "لا تسجل", - "DisplayModeHelp": "حدد نمط العرض الذي تريده للواجهة.", - "DisplayMissingEpisodesWithinSeasonsHelp": "يجب تمكين هذا أيضًا لمكتبات التلفزيون في إعدادات الخادم.", - "DisplayMissingEpisodesWithinSeasons": "عرض الحلقات الناقصة بداخل المواسم", - "DisplayInOtherHomeScreenSections": "عرض في أقسام الشاشة الرئيسية مثل \"أحدث الوسائط\" و\"استئناف المشاهدة\"", - "DisplayInMyMedia": "عرض على الشاشة الرئيسية", + "DoNotRecord": "عدم التسجيل", + "DisplayModeHelp": "اختر نمط التخطيط الذي تريده للواجهة.", + "DisplayMissingEpisodesWithinSeasonsHelp": "يجب تفعيل هذا أيضًا لمكتبات التلفزيون في إعدادات الخادم.", + "DisplayMissingEpisodesWithinSeasons": "عرض الحلقات المفقودة داخل المواسم", + "DisplayInOtherHomeScreenSections": "العرض في أقسام الشاشة الرئيسية مثل «المحتوى المضاف حديثًا» و«متابعة المشاهدة»", + "DisplayInMyMedia": "العرض على الشاشة الرئيسية", "Display": "العرض", - "ButtonSyncPlay": "مزامنة التشغيل", - "ExtraLarge": "كبير جدا", - "EnableNextVideoInfoOverlayHelp": "في نهاية الفيديو، عرض معلومات عن الفيديو القادم في قائمة التشغيل.", - "LabelDroppedFrames": "الاطارات الساقطة", - "LabelDropImageHere": "اسقط صورة هنا، او ضغط تصفح.", - "LabelDisplayOrder": "ترتيب المعروض", - "LabelDisplayMode": "وضع المعروض", - "LabelDisplayLanguageHelp": "ما ترجمة Jellyfin إلا مسودة مستمرة.", + "ButtonSyncPlay": "SyncPlay", + "ExtraLarge": "كبير جدًا", + "EnableNextVideoInfoOverlayHelp": "في نهاية الفيديو، اعرض معلومات عن الفيديو التالي في قائمة التشغيل الحالية.", + "LabelDroppedFrames": "إطارات مفقودة", + "LabelDropImageHere": "أسقط الصورة هنا أو انقر للاستعراض.", + "LabelDisplayOrder": "ترتيب العرض", + "LabelDisplayMode": "وضع العرض", + "LabelDisplayLanguageHelp": "ترجمة Jellyfin مشروع مستمر.", "LabelDisplayLanguage": "لغة العرض", "LabelDiscNumber": "رقم القرص", - "LabelDeinterlaceMethod": "طريقة تقليل التشابك", + "LabelDeinterlaceMethod": "طريقة إزالة التشابك", "LabelDefaultScreen": "الشاشة الافتراضية", - "LabelDateTimeLocale": "وقت و تاريخ محلي", - "LabelDateAdded": "تاريخ الاضافة", + "LabelDateTimeLocale": "لغة التاريخ والوقت", + "LabelDateAdded": "تاريخ الإضافة", "LabelCustomRating": "تقييم مخصص", "LabelCriticRating": "تقييم النقاد", "LabelCorruptedFrames": "الإطارات التالفة", "LabelChannels": "القنوات", - "LabelCertificatePasswordHelp": "اذا تطلبت شهادتك الامنية كلمة مرور، من فضلك ادخلها هنا.", - "LabelCertificatePassword": "كلمة مرور الشهادة الامنية", - "LabelBurnSubtitles": "الترجمات المحروقة", - "LabelBlockContentWithTags": "احجب العناصر بالعلامات", + "LabelCertificatePasswordHelp": "إذا كانت شهادتك تتطلب كلمة مرور، فأدخلها هنا.", + "LabelCertificatePassword": "كلمة مرور الشهادة", + "LabelBurnSubtitles": "حرق الترجمة", + "LabelBlockContentWithTags": "حظر المحتوى ذي الوسوم", "LabelBitrate": "معدل البت", - "LabelBirthYear": "عام الميلاد", + "LabelBirthYear": "سنة الميلاد", "LabelBirthDate": "تاريخ الميلاد", - "LabelAutomaticallyRefreshInternetMetadataEvery": "حدث وصف البيانات تلقائيا من الانترنت", - "LabelAuthProvider": "مقدم التصديق", - "LabelAudioSampleRate": "سرعة معينة الصوت", + "LabelAutomaticallyRefreshInternetMetadataEvery": "تحديث البيانات الوصفية من الإنترنت تلقائيًا", + "LabelAuthProvider": "مزوّد المصادقة", + "LabelAudioSampleRate": "معدل عينة الصوت", "LabelAudioCodec": "ترميز الصوت", "LabelAudioChannels": "قنوات الصوت", - "LabelAudioBitrate": "معدل بث الصوت", - "LabelAudioBitDepth": "عمق بث الصوت", - "LabelAllowedRemoteAddressesMode": "وضع مرشح عنوان المضيف IP البعيد", - "LabelAllowedRemoteAddresses": "مرشح عنوان المضيف IP البعيد", - "LabelAirsBeforeSeason": "عروض بث قبل الموسم", - "LabelAirsBeforeEpisode": "عروض بث قبل الحلقة", - "LabelAirsAfterSeason": "عروض بث بعد الموسم", - "Label3DFormat": "صيغة ثلاثية الابعاد", - "Kids": "اطفال", - "Items": "عناصر", - "ItemCount": "{0} عنصر", - "InstantMix": "خلط فوري", - "HeaderSyncPlayEnabled": "تزامن اللعب ممكَّن", - "HeaderSyncPlaySelectGroup": "انضم لمجموعة", - "EnableDetailsBannerHelp": "اظهر صوره اللافته اعلى عنصر تفاصيل الصفحة.", + "LabelAudioBitrate": "معدل بت الصوت", + "LabelAudioBitDepth": "عمق بت الصوت", + "LabelAllowedRemoteAddressesMode": "وضع عناوين IP البعيدة المسموحة", + "LabelAllowedRemoteAddresses": "عناوين IP البعيدة المسموحة", + "LabelAirsBeforeSeason": "يعرض قبل الموسم", + "LabelAirsBeforeEpisode": "يعرض قبل الحلقة", + "LabelAirsAfterSeason": "يعرض بعد الموسم", + "Label3DFormat": "صيغة 3D", + "Kids": "الأطفال", + "Items": "العناصر", + "ItemCount": "{0} عناصر", + "InstantMix": "مزيج فوري", + "HeaderSyncPlayEnabled": "تم تفعيل SyncPlay", + "HeaderSyncPlaySelectGroup": "الانضمام إلى مجموعة", + "EnableDetailsBannerHelp": "عرض لافتة صورة أعلى صفحة تفاصيل المحتوى.", "EnableDetailsBanner": "لافتة التفاصيل", - "EnableDecodingColorDepth10Vp9": "تمكين ترميز ال10 بت عبر العتاد الصلب من اجل VP9", - "EnableDecodingColorDepth10Hevc": "تمكين ترميز ال 10 بت عبر العتاد الصلب من اجل HEVC", - "LabelFont": "خط", + "EnableDecodingColorDepth10Vp9": "تفعيل فك الترميز العتادي 10-بت لـ VP9", + "EnableDecodingColorDepth10Hevc": "تفعيل فك الترميز العتادي 10-بت لـ HEVC", + "LabelFont": "الخط", "LabelFolder": "مجلد", - "LabelHomeScreenSectionValue": "الشاشة الرئيسية جزء {0}", + "LabelHomeScreenSectionValue": "قسم الشاشة الرئيسية {0}", "LabelHomeNetworkQuality": "جودة الشبكة المنزلية", - "LabelBaseUrlHelp": "اضافه مجلد فرعي مخصص إلى عنوان الخادم. كمثال http://example.com/<baseurl>", - "LabelBaseUrl": "عنوان الرابط الاساسي", - "LabelEnableHttpsHelp": "استمع لمنفذ HTTPS المعد. يجب توفير شهادة معتمدة لتعمل الخصية.", + "LabelBaseUrlHelp": "أضف مجلدًا فرعيًا مخصصًا إلى عنوان URL الخاص بالخادم. مثال: https://example.com/", + "LabelBaseUrl": "الرابط الأساسي", + "LabelEnableHttpsHelp": "الاستماع على منفذ HTTPS المكوّن. يجب توفير شهادة صالحة ليعمل هذا الخيار.", "LabelEnableHttps": "تفعيل HTTPS", - "LabelEnableHardwareDecodingFor": "فعل استخدام كرت الشاشة لما يلي", - "LabelCurrentStatus": "الحاله الحالية", - "KnownProxiesHelp": "قائمة مفصولة بفواصل لعناوين IP أو أسماء المضيفين للخوادم الوكيلة المعروفة المستخدمة عند الاتصال بمثيل Jellyfin الخاص بك. هذا مطلوب للاستفادة المناسبة من رؤوس \"X-Forwarded-For\". يتطلب إعادة التشغيل بعد الحفظ.", + "LabelEnableHardwareDecodingFor": "تفعيل فك الترميز العتادي لـ", + "LabelCurrentStatus": "الحالة الحالية", + "KnownProxiesHelp": "قائمة بعناوين IP أو أسماء المضيفين للوكلاء المعروفين المستخدمين عند الاتصال بخادم Jellyfin، مفصولة بفواصل. هذا مطلوب للاستفادة الصحيحة من ترويسات X-Forwarded-For. يتطلب إعادة تشغيل الخادم بعد الحفظ.", "Image": "صورة", - "Other": "اخري", - "EnableQuickConnect": "تفعيل الاتصال السريع على هذا الخادم", - "EnableAutoCast": "تعيين كالخيار ألأفتراضي", - "Data": "بيانات", - "ButtonUseQuickConnect": "استخدم الاتصال السريع", + "Other": "أخرى", + "EnableQuickConnect": "تفعيل Quick Connect على هذا الخادم", + "EnableAutoCast": "تعيين كافتراضي", + "Data": "البيانات", + "ButtonUseQuickConnect": "استخدام Quick Connect", "ButtonActivate": "تفعيل", - "Authorize": "تصريح", + "Authorize": "تفويض", "LabelChromecastVersion": "إصدار Google Cast", - "LabelAutomaticDiscovery": "تفعيل الاستكشاف التلقائي", + "LabelAutomaticDiscovery": "الاكتشاف التلقائي للشبكة", "HeaderUploadSubtitle": "رفع ترجمة", - "HeaderPortRanges": "إعدادات جدار الحماية والبروكسي", - "HeaderNetworking": "بروتوكول IP", - "HeaderDeleteDevices": "حذف جميع الأجهزة", - "HeaderAutoDiscovery": "إستكشاف الشبكة", - "HeaderAddUser": "اضف مستخدم", - "HeaderAddUpdateSubtitle": "اضف/حدث الترجمة", + "HeaderPortRanges": "إعدادات الجدار الناري والوكيل", + "HeaderNetworking": "بروتوكولات IP", + "HeaderDeleteDevices": "حذف كل الأجهزة", + "HeaderAutoDiscovery": "اكتشاف الشبكة", + "HeaderAddUser": "إضافة مستخدم", + "HeaderAddUpdateSubtitle": "إضافة/تحديث ترجمة", "Filter": "تصفية", - "EveryXMinutes": "كل {0} دقيقة", - "EveryXHours": "كل {0} ساعة", + "EveryXMinutes": "كل {0} دقائق", + "EveryXHours": "كل {0} ساعات", "EveryHour": "كل ساعة", - "EnableTonemapping": "تفعيل Tone mapping", - "EnableFasterAnimationsHelp": "استخدم رسوم متحركة وانتقالات أسرع.", - "EnableFasterAnimations": "حركات عرض أسرع", - "EnableBlurHashHelp": "الصور التي لازالت تُحمل ستعرض في حاضنة صور فريدة.", - "EnableBlurHash": "تفعيل تعتيم حاضنات الصور", - "DeleteDevicesConfirmation": "هل انت متأكد من رغبتك في حذف جميع الاجهزة؟ جميع الجلسات الاخرى سيتم تسجيل الخروج منها. ستعود الاجهزة في الظهور عند تسجيل المستخدم دخوله في المره القادمة.", + "EnableTonemapping": "تفعيل تحويل النطاق اللوني (Tone mapping)", + "EnableFasterAnimationsHelp": "استخدم حركات وانتقالات أسرع.", + "EnableFasterAnimations": "حركات أسرع", + "EnableBlurHashHelp": "ستُعرض الصور التي لا تزال قيد التحميل باستخدام عنصر نائب مميز.", + "EnableBlurHash": "تفعيل العناصر النائبة الضبابية للصور", + "DeleteDevicesConfirmation": "هل أنت متأكد من حذف كل الأجهزة؟ سيتم تسجيل خروج كل الجلسات الأخرى. ستظهر الأجهزة مجددًا في المرة التالية التي يسجّل فيها المستخدم الدخول.", "DeleteAll": "حذف الكل", - "DailyAt": "يومياً على {0}", - "ClearQueue": "مسح القائمة المؤقتة", - "Bwdif": "فلتر بوب ويفر لإزالة التداخل (BWDIF)", - "ButtonPlayer": "المشغل", - "ButtonCast": "إرسال وسائط إلى جهاز", - "HeaderSyncPlayTimeSyncSettings": "تزامن الوقت", + "DailyAt": "يوميًا عند {0}", + "ClearQueue": "مسح قائمة التشغيل الحالية", + "Bwdif": "فلتر إزالة التشابك Bob Weaver (BWDIF)", + "ButtonPlayer": "المشغّل", + "ButtonCast": "الإرسال إلى جهاز", + "HeaderSyncPlayTimeSyncSettings": "مزامنة الوقت", "HeaderSyncPlaySettings": "إعدادات SyncPlay", - "HeaderContinueReading": "استئناف القراءة", - "DisablePlugin": "غير مفعل", - "EnablePlugin": "مفعل", - "AgeValue": "(عمر{0} سنة/سنوات)", + "HeaderContinueReading": "متابعة القراءة", + "DisablePlugin": "تعطيل", + "EnablePlugin": "تفعيل الإضافة", + "AgeValue": "({0} سنة)", "Large": "كبير", "Normal": "عادي", "Small": "صغير", "None": "لا شيء", - "MusicVideos": "الفيديوهات الموسيقية", - "RepeatMode": "نوع التكرار", - "RepeatEpisodes": "كرر الحلقات", - "RepeatAll": "كرر الكل", - "Repeat": "كرر", + "MusicVideos": "فيديوهات موسيقية", + "RepeatMode": "وضع التكرار", + "RepeatEpisodes": "تكرار الحلقات", + "RepeatAll": "تكرار الكل", + "Repeat": "تكرار", "RemoveFromPlaylist": "إزالة من قائمة التشغيل", "RemoveFromCollection": "إزالة من المجموعة", "ReleaseGroup": "مجموعة الإصدار", - "ReleaseDate": "تاريخ النشر", - "RefreshQueued": "التحديث في قائمة الانتظار.", - "RefreshMetadata": "قم بتحديث البيانات الوصفية", - "RefreshDialogHelp": "يتم تحديث البيانات الوصفية بناءً على الإعدادات وخدمات الإنترنت التي تم تمكينها في لوحة المعلومات.", - "RecordSeries": "سجل المسلسل", - "RecordingScheduled": "تم جدولة التسجيل.", + "ReleaseDate": "تاريخ الإصدار", + "RefreshQueued": "تم وضع التحديث في قائمة الانتظار.", + "RefreshMetadata": "تحديث البيانات الوصفية", + "RefreshDialogHelp": "يتم تحديث البيانات الوصفية بناءً على الإعدادات وخدمات الإنترنت المُمكّنة في لوحة التحكم.", + "RecordSeries": "تسجيل المسلسل", + "RecordingScheduled": "تمت جدولة التسجيل.", "Recordings": "التسجيلات", "RecordingCancelled": "تم إلغاء التسجيل.", - "Record": "سجل", - "RecentlyWatched": "شاهدت مؤخرا", - "Rate": "معدل", - "QuickConnectAuthorizeSuccess": "تمت المصادقة على الجهاز بنجاح!", + "Record": "تسجيل", + "RecentlyWatched": "شوهد مؤخراً", + "Rate": "المعدل", + "QuickConnectAuthorizeSuccess": "لقد قمت بمصادقة جهازك بنجاح!", "QuickConnectAuthorizeCode": "أدخل الرمز {0} لتسجيل الدخول", "QuickConnectActivationSuccessful": "تم التفعيل بنجاح", "Quality": "الجودة", "Programs": "البرامج", "Profile": "الملف الشخصي", "ProductionLocations": "مواقع الإنتاج", - "Producer": "منتج", - "Primary": "الأساسي", - "PreviousTrack": "تخطي إلى السابق", + "Producer": "المنتج", + "Primary": "أساسي", + "PreviousTrack": "التخطي للسابق", "PreviousChapter": "الفصل السابق", - "Previous": "سابق", + "Previous": "السابق", "Preview": "معاينة", - "Premieres": "العرض الأول", + "Premieres": "العروض الأولى", "Premiere": "العرض الأول", - "PreferEmbeddedTitlesOverFileNamesHelp": "حدد عنوان العرض المراد استخدامه في حالة عدم توفر بيانات تعريف الإنترنت أو البيانات الوصفية المحلية.", - "PreferEmbeddedTitlesOverFileNames": "تفضل العناوين المضمنة على أسماء الملفات", - "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "استخدم معلومات الحلقة من البيانات الوصفية المضمنة إذا كانت متوفرة.", - "PreferEmbeddedEpisodeInfosOverFileNames": "تفضل معلومات الحلقة المضمنة على أسماء الملفات", - "PosterCard": "بطاقة ملصق", + "PreferEmbeddedTitlesOverFileNamesHelp": "حدد عنوان العرض الذي سيتم استخدامه عندما لا تتوفر بيانات وصفية من الإنترنت أو بيانات وصفية محلية.", + "PreferEmbeddedTitlesOverFileNames": "تفضيل العناوين المضمنة على أسماء الملفات", + "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "استخدام معلومات الحلقة من البيانات الوصفية المضمنة إذا كانت متاحة.", + "PreferEmbeddedEpisodeInfosOverFileNames": "تفضيل معلومات الحلقة المضمنة على أسماء الملفات", + "PosterCard": "بطاقة الملصق", "Poster": "ملصق", - "PleaseSelectTwoItems": "الرجاء اختيار اثنين على الأقل.", - "PleaseRestartServerName": "الرجاء إعادة تشغيل Jellyfin على {0}.", - "PleaseEnterNameOrId": "الرجاء إدخال اسم أو معرف خارجي.", - "PlayNextEpisodeAutomatically": "قم بتشغيل الحلقة التالية تلقائيًا", - "PlayNext": "قم بتشغيل التالي", - "PlayFromBeginning": "التشغيل من البداية", - "PlayCount": "عدد التشغيل", + "PleaseSelectTwoItems": "يرجى تحديد عنصرين على الأقل.", + "PleaseRestartServerName": "يرجى إعادة تشغيل Jellyfin على {0}.", + "PleaseEnterNameOrId": "يرجى إدخال الاسم أو المعرف الخارجي.", + "PlayNextEpisodeAutomatically": "تشغيل الحلقة التالية تلقائيًا", + "PlayNext": "تشغيل التالي", + "PlayFromBeginning": "تشغيل من البداية", + "PlayCount": "عدد مرات التشغيل", "PlaybackRate": "سرعة التشغيل", - "PlaybackErrorNoCompatibleStream": "هذا العميل غير متوافق مع الوسائط ولا يرسل الخادم تنسيق وسائط متوافق.", + "PlaybackErrorNoCompatibleStream": "هذا العميل غير متوافق مع المحتوى ولا يقوم الخادم بإرسال تنسيق وسائط متوافق.", "PlaybackData": "معلومات التشغيل", - "PlayAllFromHere": "قم بتشغيل كلها من هنا", - "Play": "قم بتشغيل", + "PlayAllFromHere": "تشغيل الكل من هنا", + "Play": "تشغيل", "PlaceFavoriteChannelsAtBeginning": "ضع القنوات المفضلة في البداية", "Photo": "صورة", - "PersonRole": "ك {0}", + "PersonRole": "كـ {0}", "Person": "شخص", - "PerfectMatch": "تطابق مثالي", + "PerfectMatch": "تطابق تام", "People": "الأشخاص", - "PathNotFound": "لا يمكن العثور على المسار. يرجى التأكد من صحة المسار وحاول مرة أخرى.", - "PasswordResetProviderHelp": "اختر موفر إعادة تعيين كلمة المرور لاستخدامه عندما يطلب هذا المستخدم إعادة تعيين كلمة المرور.", - "PackageInstallFailed": "{0} (الإصدار {1}) فشل تثبيت.", + "PathNotFound": "تعذر العثور على المسار. يرجى التأكد من صحة المسار والمحاولة مرة أخرى.", + "PasswordResetProviderHelp": "اختر مزود إعادة تعيين كلمة المرور ليتم استخدامه عندما يطلب هذا المستخدم إعادة تعيين كلمة المرور.", + "PackageInstallFailed": "فشل تثبيت {0} (الإصدار {1}).", "PackageInstallCompleted": "اكتمل تثبيت {0} (الإصدار {1}).", "PackageInstallCancelled": "تم إلغاء تثبيت {0} (الإصدار {1}).", "Overview": "نظرة عامة", - "OptionRequirePerfectSubtitleMatchHelp": "سيؤدي طلب التطابق التام إلى تصفية الترجمات المصاحبة لتشمل فقط تلك التي تم اختبارها والتحقق منها بملف الفيديو الخاص بك بالضبط. سيؤدي إلغاء تحديد هذا إلى زيادة احتمالية تنزيل الترجمات المصاحبة ، لكنني سأزيد من فرص نص الترجمة الخاطئ أو غير الصحيح.", + "OptionRequirePerfectSubtitleMatchHelp": "سيؤدي اشتراط التطابق التام إلى تصفية الترجمات لتشمل فقط تلك التي تم اختبارها والتحقق منها مع ملف الفيديو الدقيق الخاص بك. إلغاء تحديد هذا سيزيد من احتمالية تنزيل الترجمات، لكنه سيزيد من فرص عدم التزامن أو النص الخاطئ.", "OptionRandom": "عشوائي", "OptionNew": "جديد…", - "OptionMaxActiveSessionsHelp": "ستؤدي القيمة 0 إلى تعطيل الميزة.", - "OptionMaxActiveSessions": "قم بتعيين الحد الأقصى لعدد جلسات المستخدم المتزامنة.", - "OptionLoginAttemptsBeforeLockoutHelp": "تعني القيمة صفر وراثة الافتراضي لثلاث محاولات للمستخدمين العاديين وخمس محاولات للمسؤولين. سيؤدي تعيين هذا إلى -1 إلى تعطيل الميزة.", - "OptionLoginAttemptsBeforeLockout": "حدد عدد محاولات تسجيل الدخول غير الصحيحة التي يمكن إجراؤها قبل حدوث الإغلاق.", + "OptionMaxActiveSessionsHelp": "القيمة 0 ستؤدي إلى تعطيل الميزة.", + "OptionMaxActiveSessions": "تعيين الحد الأقصى لعدد جلسات المستخدم المتزامنة.", + "OptionLoginAttemptsBeforeLockoutHelp": "تعني القيمة صفر استخدام القيمة الافتراضية: ثلاث محاولات للمستخدمين العاديين وخمس للمديرين. يؤدي تعيينها إلى -1 إلى تعطيل الميزة.", + "OptionLoginAttemptsBeforeLockout": "حدّد عدد محاولات تسجيل الدخول الخاطئة التي يمكن إجراؤها قبل إغلاق الحساب.", "OptionDvd": "DVD", "OptionBluray": "Blu-ray", - "OptionAllowSyncTranscoding": "السماح بتنزيل الوسائط ومزامنتها التي تتطلب تحويل الشفرة", - "OptionAllowMediaPlaybackTranscodingHelp": "قد يؤدي تقييد الوصول إلى تحويل الشفرة إلى حدوث فشل في التشغيل مع العملاء بسبب تنسيقات الوسائط غير المدعومة.", - "OptionAllowContentDownloadHelp": "يمكن للمستخدمين تنزيل الوسائط وتخزينها على أجهزتهم. هذه ليست نفس ميزة المزامنة. تتطلب مكتبات الكتب تمكين هذا لتعمل بشكل صحيح.", + "OptionAllowSyncTranscoding": "السماح بتنزيل المحتوى والمزامنة التي تتطلب تحويل الترميز", + "OptionAllowMediaPlaybackTranscodingHelp": "قد يسبب تقييد الوصول إلى تحويل الترميز فشل التشغيل لدى العملاء بسبب صيغ الوسائط غير المدعومة.", + "OptionAllowContentDownloadHelp": "يمكن للمستخدمين تنزيل الوسائط وتخزينها على أجهزتهم. هذا ليس مثل ميزة المزامنة. تتطلب مكتبات الكتب تفعيل هذا الخيار لتعمل بشكل صحيح.", "OptionAllowContentDownload": "السماح بتنزيل الوسائط", - "OnWakeFromSleep": "عند الاستيقاظ", - "OnlyImageFormats": "تنسيقات الصور فقط (VobSub ، PGS ، SUB)", - "OnlyForcedSubtitlesHelp": "سيتم تحميل الترجمة القسرية فقط.", - "OnlyForcedSubtitles": "الترجمة القسرية فقط", + "OnWakeFromSleep": "عند الاستيقاظ من السكون", + "OnlyImageFormats": "تنسيقات الصور فقط (VobSub، PGS، SUB)", + "OnlyForcedSubtitlesHelp": "سيتم تحميل الترجمات المعلّمة كإجبارية فقط.", + "OnlyForcedSubtitles": "الإجبارية فقط", "OneChannel": "قناة واحدة", "OnApplicationStartup": "عند بدء تشغيل التطبيق", - "Off": "مغلق", - "NoSubtitlesHelp": "لن يتم تحميل الترجمات بشكل افتراضي. لا يزال بإمكانك تشغيلها أثناء التشغيل.", + "Off": "إيقاف", + "NoSubtitlesHelp": "الترجمات لن تُحمّل افتراضيًا. يمكن تشغيلها يدويًا أثناء المشاهدة.", "NoSubtitleSearchResultsFound": "لم يتم العثور على نتائج.", - "NoCreatedLibraries": "يبدو أنك لم تنشئ أي مكتبات بعد. {0} هل ترغب في إنشاء مكتبة الآن؟ {1}", + "NoCreatedLibraries": "يبدو أنك لم تقم بإنشاء أي مكتبات حتى الآن. {0}هل ترغب في إنشاء واحدة الآن؟{1}", "No": "لا", - "NextTrack": "تخطي إلى التالي", + "NextTrack": "التخطي للتالي", "NextChapter": "الفصل التالي", "Next": "التالي", - "News": "أخبار", - "NewEpisodesOnly": "حلقات جديدة فقط", + "News": "الأخبار", + "NewEpisodesOnly": "الحلقات الجديدة فقط", "NewEpisodes": "حلقات جديدة", - "NewCollectionNameExample": "مثال: مجموعة Star Wars", - "NewCollectionHelp": "تتيح لك المجموعات إنشاء مجموعات مخصصة من الأفلام ومحتويات المكتبة الأخرى.", + "NewCollectionNameExample": "مثال: مجموعة حرب النجوم", + "NewCollectionHelp": "تتيح لك المجموعات إنشاء تجميعات مخصصة من الأفلام والمحتويات الأخرى في المكتبة.", "NewCollection": "مجموعة جديدة", "New": "جديد", - "Never": "أبدا", - "Name": "اسم", + "Never": "أبدًا", + "Name": "الاسم", "MySubtitles": "ترجماتي", - "MusicVideo": "أغنية مصورة", - "MusicLibraryHelp": "راجع {0} دليل تسمية الموسيقى {1}.", + "MusicVideo": "فيديو موسيقي", + "MusicLibraryHelp": "راجع {0}دليل تسمية الموسيقى{1}.", "MusicArtist": "فنان موسيقى", - "MusicAlbum": "البوم موسيقي", - "MovieLibraryHelp": "راجع {0} دليل تسمية الأفلام {1}.", + "MusicAlbum": "ألبوم موسيقى", + "MovieLibraryHelp": "راجع {0}دليل تسمية الأفلام{1}.", "Movie": "فيلم", - "MoveRight": "تحرك يمينا", - "MoveLeft": "تحرك يسارا", - "MoreMediaInfo": "معلومات الوسائط", - "MillisecondsUnit": "ms", - "MessageSyncPlayUserLeft": "غادر {0} المجموعة.", - "MessageSyncPlayUserJoined": "انضم {0} إلى المجموعة.", - "MessageSyncPlayPlaybackPermissionRequired": "مطلوب إذن التشغيل.", - "MessageSyncPlayLibraryAccessDenied": "الوصول إلى هذا المحتوى مقيد.", + "MoveRight": "تحريك لليمين", + "MoveLeft": "تحريك لليسار", + "MoreMediaInfo": "معلومات المحتوى", + "MillisecondsUnit": "مللي ثانية", + "MessageSyncPlayUserLeft": "{0} غادر المجموعة.", + "MessageSyncPlayUserJoined": "{0} انضم إلى المجموعة.", + "MessageSyncPlayPlaybackPermissionRequired": "إذن التشغيل مطلوب.", + "MessageSyncPlayLibraryAccessDenied": "الوصول إلى هذا المحتوى مقيّد.", "MessageSyncPlayJoinGroupDenied": "لا يمكن الانضمام إلى المجموعة.", - "MessageSyncPlayIsDisabled": "إذن مطلوب لاستخدام SyncPlay.", - "MessageSyncPlayGroupWait": "{0} يتم تخزينه مؤقتًا…", + "MessageSyncPlayIsDisabled": "الإذن مطلوب لاستخدام SyncPlay.", + "MessageSyncPlayGroupWait": "{0} يقوم بالتخزين المؤقت…", "MessageSyncPlayGroupDoesNotExist": "فشل الانضمام إلى المجموعة لأنها غير موجودة.", - "MessageSyncPlayErrorMissingSession": "فشل تمكين SyncPlay! جلسة مفقودة.", - "MessageSyncPlayErrorMedia": "فشل تمكين SyncPlay! خطأ في الوسائط.", + "MessageSyncPlayErrorMissingSession": "فشل تفعيل SyncPlay! الجلسة مفقودة.", + "MessageSyncPlayErrorMedia": "فشل تفعيل SyncPlay! خطأ في الوسائط.", "MessageSyncPlayErrorAccessingGroups": "حدث خطأ أثناء الوصول إلى قائمة المجموعات.", - "MessageSyncPlayEnabled": "تم تشغيل SyncPlay.", - "MessageSyncPlayDisabled": "تم إيقاف تشغيل SyncPlay.", - "MessageSyncPlayCreateGroupDenied": "مطلوب إذن لإنشاء مجموعة.", - "MessageSent": "تم الارسال.", - "MessagePluginInstallError": "حدث خطأ أثناء تثبيت البرنامج المساعد.", - "MessagePluginInstalled": "تم تثبيت البرنامج المساعد بنجاح. سيحتاج الخادم إلى إعادة التشغيل حتى تصبح التغييرات سارية المفعول.", - "MessagePleaseWait": "يرجى الانتظار.", - "MessagePlayAccessRestricted": "تشغيل هذا المحتوى مقيد حاليا. يرجى الاتصال بمسؤول الخادم الخاص بك لمزيد من المعلومات.", + "MessageSyncPlayEnabled": "تم تفعيل SyncPlay.", + "MessageSyncPlayDisabled": "SyncPlay معطل.", + "MessageSyncPlayCreateGroupDenied": "الإذن مطلوب لإنشاء مجموعة.", + "MessageSent": "تم إرسال الرسالة.", + "MessagePluginInstallError": "حدث خطأ أثناء تثبيت الملحق.", + "MessagePluginInstalled": "تم تثبيت الملحق بنجاح. سيحتاج الخادم إلى إعادة التشغيل حتى تصبح التغييرات سارية المفعول.", + "MessagePleaseWait": "يرجى الانتظار. قد يستغرق هذا دقيقة.", + "MessagePlayAccessRestricted": "تشغيل هذا المحتوى مقيّد حاليًا. يرجى التواصل مع مدير الخادم لمزيد من المعلومات.", "MessageNoServersAvailable": "لم يتم العثور على خوادم باستخدام الاكتشاف التلقائي للخادم.", - "MessageNoCollectionsAvailable": "تتيح لك المجموعات الاستمتاع بمجموعات مخصصة من الأفلام والمسلسلات والألبومات. انقر فوق الزر \"+\" لبدء إنشاء المجموعات.", + "MessageNoCollectionsAvailable": "تتيح لك المجموعات الاستمتاع بتجميعات مخصصة من الأفلام، المسلسلات، والألبومات. انقر على الزر '+' للبدء في إنشاء المجموعات.", "MessageConfirmAppExit": "هل تريد الخروج؟", "MediaInfoVideoRange": "نطاق الفيديو", - "MarkUnplayed": "وضع علامة على أنه لم يتم تشغيله", - "MarkPlayed": "وضع علامة على أنه تم تشغيله", - "Lyricist": "شاعر غنائي", - "Logo": "شعار", - "LiveTV": "البث التلفزيوني المباشر", - "LiveBroadcasts": "البث المباشر", + "MarkUnplayed": "تعليم كغير مشاهد", + "MarkPlayed": "تعليم كمشاهد", + "Lyricist": "كاتب الكلمات", + "Logo": "الشعار", + "LiveTV": "تلفاز مباشر", + "LiveBroadcasts": "بثوث مباشرة", "Live": "مباشر", - "ListPaging": "{0} - {1} من {2}", + "ListPaging": "{0}-{1} من {2}", "List": "قائمة", - "LeaveBlankToNotSetAPassword": "يمكنك ترك هذا فارغًا لعدم تعيين كلمة مرور.", - "LearnHowYouCanContribute": "تعلم كيف يمكنك المساهمة.", + "LeaveBlankToNotSetAPassword": "يمكنك ترك هذا الحقل فارغًا لعدم تعيين كلمة مرور.", + "LearnHowYouCanContribute": "تعرّف على كيفية المساهمة.", "LastSeen": "آخر نشاط {0}", - "LabelYear": "عام", + "LabelYear": "السنة", "LabelWeb": "الويب", "LabelVideoResolution": "دقة الفيديو", "LabelVideoRange": "نطاق الفيديو", "LabelVideoCodec": "ترميز الفيديو", "LabelVideoBitrate": "معدل بت الفيديو", "LabelUserMaxActiveSessions": "الحد الأقصى لعدد جلسات المستخدم المتزامنة", - "LabelUserLoginAttemptsBeforeLockout": "محاولات تسجيل الدخول الفاشلة قبل حظر المستخدم", - "LabelUserAgent": "وكيل المستخدم", + "LabelUserLoginAttemptsBeforeLockout": "محاولات تسجيل الدخول الفاشلة قبل إغلاق الحساب", + "LabelUserAgent": "وكيل المستخدم (User-Agent)", "LabelUnstable": "غير مستقر", - "LabelTranscodingFramerate": "معدل إطارات التحويل", - "LabelTranscodePath": "مسار المُرمِّز", - "LabelTrackNumber": "رقم مسار", - "LabelTitle": "عنوان", - "LabelTheme": "سمة", - "LabelTextSize": "حجم الخط", - "LabelTextColor": "لون الخط", + "LabelTranscodingFramerate": "معدل إطارات تحويل الترميز", + "LabelTranscodePath": "مسار تحويل الترميز", + "LabelTrackNumber": "رقم المسار", + "LabelTitle": "العنوان", + "LabelTheme": "السمة", + "LabelTextSize": "حجم النص", + "LabelTextColor": "لون النص", "LabelTextBackgroundColor": "لون خلفية النص", - "LabelTagline": "سطر الوصف", - "LabelSyncPlaySettingsSkipToSyncHelp": "طريقة تصحيح المزامنة التي تتمثل في البحث عن الموضع المقدر. يجب تمكين تصحيح المزامنة.", - "LabelSyncPlaySettingsSkipToSync": "قم بتمكين SkipToSync", + "LabelTagline": "الشعار النصي", + "LabelSyncPlaySettingsSkipToSyncHelp": "طريقة تصحيح المزامنة التي تتمثل في الانتقال إلى الموضع المُقدّر. يجب تمكين تصحيح المزامنة.", + "LabelSyncPlaySettingsSkipToSync": "تفعيل SkipToSync", "LabelSyncPlaySettingsSpeedToSyncHelp": "طريقة تصحيح المزامنة التي تتمثل في تسريع التشغيل. يجب تمكين تصحيح المزامنة.", - "LabelSyncPlaySettingsSpeedToSync": "قم بتمكين SpeedToSync", - "LabelSyncPlaySettingsMinDelaySkipToSyncHelp": "الحد الأدنى لتأخير التشغيل (بالملي ثانية) وبعد ذلك يحاول SkipToSync تصحيح موضع التشغيل.", + "LabelSyncPlaySettingsSpeedToSync": "تفعيل SpeedToSync", + "LabelSyncPlaySettingsMinDelaySkipToSyncHelp": "الحد الأدنى لتأخير التشغيل (بالمللي ثانية) الذي يحاول بعده SkipToSync تصحيح موضع التشغيل.", "LabelSyncPlaySettingsMinDelaySkipToSync": "الحد الأدنى لتأخير SkipToSync", - "LabelSyncPlaySettingsSpeedToSyncDurationHelp": "مقدار الملي ثانية المستخدمة بواسطة SpeedToSync لتصحيح موضع التشغيل.", + "LabelSyncPlaySettingsSpeedToSyncDurationHelp": "مقدار المللي ثانية التي يستخدمها SpeedToSync لتصحيح موضع التشغيل.", "LabelSyncPlaySettingsSpeedToSyncDuration": "مدة SpeedToSync", - "LabelSyncPlaySettingsMaxDelaySpeedToSyncHelp": "الحد الأقصى لتأخير التشغيل الذي يتم بعده استخدام SkipToSync بدلاً من SpeedToSync.", - "LabelSyncPlaySettingsMaxDelaySpeedToSync": "أقصى تأخير ل SpeedToSync", - "LabelSyncPlaySettingsMinDelaySpeedToSyncHelp": "الحد الأدنى لتأخير التشغيل الذي يحاول SpeedToSync بعده تصحيح موضع التشغيل.", - "LabelSyncPlaySettingsMinDelaySpeedToSync": "الحد الأدنى من تأخير SpeedToSync", - "LabelSyncPlaySettingsSyncCorrectionHelp": "قم بتمكين المزامنة النشطة للتشغيل إما من خلال تسريع الوسائط أو بالسعي إلى الموضع المقدر. قم بتعطيل هذا في حالة التأتأة الشديدة.", + "LabelSyncPlaySettingsMaxDelaySpeedToSyncHelp": "الحد الأقصى لتأخير التشغيل (بالمللي ثانية) الذي يتم بعده استخدام SkipToSync بدلًا من SpeedToSync.", + "LabelSyncPlaySettingsMaxDelaySpeedToSync": "الحد الأقصى لتأخير SpeedToSync", + "LabelSyncPlaySettingsMinDelaySpeedToSyncHelp": "الحد الأدنى لتأخير التشغيل (بالمللي ثانية) الذي يحاول بعده SpeedToSync تصحيح موضع التشغيل.", + "LabelSyncPlaySettingsMinDelaySpeedToSync": "الحد الأدنى لتأخير SpeedToSync", + "LabelSyncPlaySettingsSyncCorrectionHelp": "تفعيل المزامنة النشطة للتشغيل إما عن طريق تسريع الوسائط أو عن طريق الانتقال إلى الموضع المُقدّر. قم بتعطيل هذا في حالة التقطيع الشديد.", "LabelSyncPlaySettingsSyncCorrection": "تصحيح المزامنة", - "LabelSyncPlaySettingsExtraTimeOffsetHelp": "اضبط تعويض الوقت مع الجهاز المحدد لمزامنة الوقت. قم بالتعديل بعناية.", - "LabelSyncPlaySettingsExtraTimeOffset": "تعويض الوقت الإضافي", - "LabelSyncPlaySettingsDescription": "قم بتغيير تفضيلات SyncPlay", - "LabelSyncPlayTimeSyncOffset": "معادلة الوقت", + "LabelSyncPlaySettingsExtraTimeOffsetHelp": "ضبط إزاحة الوقت يدويًا (بالمللي ثانية) مع الجهاز المحدد لمزامنة الوقت. قم بتعديله بحذر.", + "LabelSyncPlaySettingsExtraTimeOffset": "إزاحة وقت إضافية", + "LabelSyncPlaySettingsDescription": "تغيير تفضيلات SyncPlay", + "LabelSyncPlayTimeSyncOffset": "إزاحة الوقت", "LabelSyncPlayTimeSyncDevice": "مزامنة الوقت مع", "LabelSyncPlaySyncMethod": "طريقة المزامنة", - "LabelSyncPlayNewGroupDescription": "أنشئ مجموعة جديدة", + "LabelSyncPlayNewGroupDescription": "إنشاء مجموعة جديدة", "LabelSyncPlayNewGroup": "مجموعة جديدة", "LabelSyncPlayLeaveGroupDescription": "تعطيل SyncPlay", - "LabelSyncPlayLeaveGroup": "غادر المجموعة", + "LabelSyncPlayLeaveGroup": "مغادرة المجموعة", "LabelSyncPlayHaltPlaybackDescription": "وتجاهل تحديثات قائمة التشغيل الحالية", "LabelSyncPlayAccessNone": "معطل لهذا المستخدم", "LabelSyncPlayAccessJoinGroups": "السماح للمستخدم بالانضمام إلى المجموعات", "LabelSyncPlayAccessCreateAndJoinGroups": "السماح للمستخدم بإنشاء مجموعات والانضمام إليها", - "LabelSubtitleDownloaders": "أدوات تنزيل الترجمة", - "LabelStreamType": "نوع الدفق", + "LabelSubtitleDownloaders": "منزلو الترجمات", + "LabelStreamType": "نوع البث", "LabelStable": "مستقر", - "LabelSpecialSeasonsDisplayName": "اسم عرض الموسم الخاص", + "LabelSpecialSeasonsDisplayName": "اسم عرض المواسم الخاصة", "Framerate": "معدل الإطارات", - "ErrorPlayerNotFound": "لم يتم العثور على لاعب للوسائط المطلوبة.", - "Engineer": "مهندس صوت", - "DisableCustomCss": "تعطيل CSS المخصص المقدم من الخادم", - "Conductor": "قائد الاوركسترا", - "Arranger": "منظم", - "AudioBitDepthNotSupported": "عمق البت للصوت غير مدعوم", - "VideoProfileNotSupported": "ملف تعريف برنامج ترميز الفيديو غير مدعوم", + "ErrorPlayerNotFound": "لم يتم العثور على مشغّل للمحتوى المطلوب.", + "Engineer": "مهندس الصوت", + "DisableCustomCss": "تعطيل كود CSS المخصص الذي يقدّمه الخادم", + "Conductor": "قائد الفرقة", + "Arranger": "الموزّع", + "AudioBitDepthNotSupported": "عمق بت الصوت غير مدعوم", + "VideoProfileNotSupported": "الملف الشخصي لترميز الفيديو غير مدعوم", "VideoLevelNotSupported": "مستوى ترميز الفيديو غير مدعوم", - "VideoFramerateNotSupported": "معدل عرض الإطارات للفيديو غير مدعوم", - "VideoBitDepthNotSupported": "عمق البت للفيديو غير مدعوم", + "VideoFramerateNotSupported": "معدل إطارات الفيديو غير مدعوم", + "VideoBitDepthNotSupported": "عمق بت الفيديو غير مدعوم", "SecondaryAudioNotSupported": "مسارات الصوت الثانوية غير مدعومة", - "AudioProfileNotSupported": "ملف تعريف برنامج ترميز الصوت غير مدعوم", + "AudioProfileNotSupported": "الملف الشخصي لترميز الصوت غير مدعوم", "VideoResolutionNotSupported": "دقة الفيديو غير مدعومة", - "AudioChannelsNotSupported": "عدد القنوات الصوتية غير مدعوم", + "AudioChannelsNotSupported": "عدد قنوات الصوت غير مدعوم", "AudioBitrateNotSupported": "معدل بت الصوت غير مدعوم", - "VideoCodecNotSupported": "برنامج ترميز الفيديو غير مدعوم", - "SubtitleCodecNotSupported": "برنامج ترميز الترجمة غير مدعوم", + "VideoCodecNotSupported": "ترميز الفيديو غير مدعوم", + "SubtitleCodecNotSupported": "ترميز الترجمة غير مدعوم", "ContainerNotSupported": "الحاوية غير مدعومة", - "AudioCodecNotSupported": "برنامج ترميز الصوت غير مدعوم", - "Controls": "أجهزة التحكم", - "MessagePlaybackError": "حدث خطأ أثناء تشغيل هذا الملف على جهاز استقبال Google Cast.", - "MessageChromecastConnectionError": "يتعذر على جهاز استقبال Google Cast الاتصال بخادم Jellyfin. يرجى التحقق من الاتصال وحاول مرة أخرى.", - "YoutubeDenied": "غير مسموح بتشغيل الفيديو المطلوب في المشغلات المضمنة.", + "AudioCodecNotSupported": "ترميز الصوت غير مدعوم", + "Controls": "عناصر التحكم", + "MessagePlaybackError": "حدث خطأ أثناء تشغيل هذا الملف على جهاز استقبال Google Cast الخاص بك.", + "MessageChromecastConnectionError": "يتعذر على جهاز استقبال Google Cast الخاص بك الاتصال بخادم Jellyfin. يرجى التحقق من الاتصال والمحاولة مرة أخرى.", + "YoutubeDenied": "لا يُسمح بتشغيل الفيديو المطلوب في المشغلات المضمنة.", "YoutubeNotFound": "لم يتم العثور على الفيديو.", "YoutubePlaybackError": "لا يمكن تشغيل الفيديو المطلوب.", - "YoutubeBadRequest": "طلب غير صحيح.", - "LabelSelectStereo": "ستيريو", + "YoutubeBadRequest": "طلب غير صالح.", + "LabelSelectStereo": "ستيريو (Stereo)", "LabelSelectAudioChannels": "القنوات", "LabelAllowedAudioChannels": "الحد الأقصى لقنوات الصوت المسموح بها", - "AllowHevcEncoding": "للسماح بالترميز باستخدام خوارزمية (HEVC)", - "PreferFmp4HlsContainerHelp": "يُفضل استخدام fMP4 كحاوية افتراضية ل HLS ، مما يجعل من الممكن توجيه محتوى HEVC و AV1 على الأجهزة المدعومة.", - "PreferFmp4HlsContainer": "يُفضل حاوية وسائط fMP4-HLS", + "AllowHevcEncoding": "السماح بالترميز بتنسيق HEVC", + "PreferFmp4HlsContainerHelp": "تفضيل استخدام fMP4 كحاوية افتراضية لـ HLS، مما يتيح البث المباشر لمحتوى HEVC و AV1 على الأجهزة المدعومة.", + "PreferFmp4HlsContainer": "تفضيل حاوية الوسائط fMP4-HLS", "LabelSyncPlayInfo": "معلومات SyncPlay", "LabelOriginalMediaInfo": "معلومات الوسائط الأصلية", "LabelDirectStreamingInfo": "معلومات البث المباشر", - "LabelTranscodingInfo": "معلومات التحويل", + "LabelTranscodingInfo": "معلومات تحويل الترميز", "LabelVideoInfo": "معلومات الفيديو", "LabelAudioInfo": "معلومات الصوت", "LabelPlaybackInfo": "معلومات التشغيل", - "RemuxHelp1": "الوسائط موجودة في حاوية ملف غير متوافقة (MKV ، AVI ، WMV ، إلخ) ولكن كل من دفق الفيديو ودفق الصوت متوافقان مع الجهاز. سيتم إعادة تجميع الوسائط بدون فقدان بيانات بسرعة قبل إرسالها إلى الجهاز.", - "AspectRatioFill": "التمدد", - "EnableFallbackFontHelp": "تفعيل الخطوط البديلة المخصصة. يمكن أن يؤدي ذلك إلى تجنب مشكلة العرض غير الصحيح للترجمة.", + "RemuxHelp1": "الوسائط موجودة في حاوية ملفات غير متوافقة (MKV، AVI، WMV، إلخ) ولكن كلاً من مسار الفيديو ومسار الصوت متوافقان مع الجهاز. سيتم إعادة تغليف الوسائط بدون فقدان الجودة أثناء التشغيل قبل إرسالها إلى الجهاز.", + "AspectRatioFill": "تمديد (Fill)", + "EnableFallbackFontHelp": "تفعيل الخطوط البديلة المخصصة. يمكن أن يتجنب هذا مشكلة عرض الترجمات بشكل غير صحيح.", "EnableFallbackFont": "تفعيل الخطوط الاحتياطية", - "LabelFallbackFontPathHelp": "يتم استخدام هذه الخطوط من قبل بعض العملاء لعرض الترجمات. يرجى الرجوع إلى الوثائق لمزيد من المعلومات.", - "LabelFallbackFontPath": "مسار مجلد الخط الاحتياطي", - "HeaderSelectFallbackFontPathHelp": "تصفح أو أدخل مسار مجلد الخط الاحتياطي لاستخدامه في عرض ترجمات ASS / SSA.", - "HeaderSelectFallbackFontPath": "حدد مسار مجلد الخط الاحتياطي", + "LabelFallbackFontPathHelp": "تُستخدم هذه الخطوط بواسطة بعض العملاء لعرض الترجمات. يرجى الرجوع إلى الوثائق للحصول على مزيد من المعلومات.", + "LabelFallbackFontPath": "مسار مجلد الخطوط الاحتياطية", + "HeaderSelectFallbackFontPathHelp": "استعرض أو أدخل مسار مجلد الخطوط الاحتياطية لاستخدامه في عرض ترجمات ASS/SSA.", + "HeaderSelectFallbackFontPath": "اختر مسار مجلد الخطوط الاحتياطية", "Yes": "نعم", - "Yadif": "فلتر آخر لإزالة التداخل (YADIF)", - "Writers": "الكتاب", + "Yadif": "فلتر إزالة التشابك (YADIF)", + "Writers": "الكتّاب", "Writer": "الكاتب", "Whitelist": "القائمة البيضاء", - "WeeklyAt": "{0} في {1}", - "Watched": "شاهدت", - "ViewAlbumArtist": "عرض الفنان الألبوم", + "WeeklyAt": "أسبوعيًا في يوم {0} الساعة {1}", + "Watched": "شوهد", + "ViewAlbumArtist": "عرض فنان الألبوم", "ViewAlbum": "عرض الألبوم", "VideoAudio": "صوت الفيديو", - "Video": "فيديو", + "Video": "الفيديو", "Vertical": "عمودي", - "ValueSeconds": "{0} ثانية", - "UseEpisodeImagesInNextUpHelp": "سيستخدم قسمي \"التالي\" و \"استئناف المشاهدة\" صور الحلقة كصور مصغرة بدلًا من الصورة المصغرة الأساسية للعرض.", - "UseEpisodeImagesInNextUp": "استخدم صور الحلقة في قسمي \"التالي\" و \"استئناف المشاهدة\"", - "Upload": "تحميل", - "UnsupportedPlayback": "لا يمكن ل Jellyfin فك تشفير المحتوى المحمي بواسطة DRM ولكن سيتم تجربة كل المحتوى بغض النظر ، بما في ذلك العناوين المحمية. قد تظهر بعض الملفات سوداء بالكامل بسبب التشفير أو ميزات أخرى غير مدعومة ، مثل العناوين التفاعلية.", + "ValueSeconds": "{0} ثوانٍ", + "UseEpisodeImagesInNextUpHelp": "ستستخدم أقسام 'التالي' و 'متابعة المشاهدة' صور الحلقات كصور مصغرة بدلاً من الصورة المصغرة الأساسية للمسلسل.", + "UseEpisodeImagesInNextUp": "استخدام صور الحلقات في أقسام 'التالي' و 'متابعة المشاهدة'", + "Upload": "رفع", + "UnsupportedPlayback": "لا يستطيع Jellyfin فك تشفير المحتوى المحمي بـ DRM، لكن سيحاول تشغيل كل المحتوى بغض النظر عن ذلك، بما في ذلك العناوين المحمية. قد تظهر بعض الملفات سوداء بالكامل بسبب التشفير أو ميزات أخرى غير مدعومة مثل العناوين التفاعلية.", "Unrated": "غير مصنف", - "Unplayed": "لم يتم تشغيله", + "Unplayed": "غير مُشغّل", "Uniform": "منتظم", - "TvLibraryHelp": "راجع {0} دليل تسمية التلفزيون {1}.", - "TV": "TV", - "Transcoding": "التحويل", - "Trailers": "المقطورات", + "TvLibraryHelp": "راجع {0}دليل تسمية المسلسلات التلفزيونية{1}.", + "TV": "تلفاز", + "Transcoding": "تحويل الترميز", + "Trailers": "إعلانات ترويجية", "TrackCount": "{0} مسارات", "Track": "مسار", - "TheseSettingsAffectSubtitlesOnThisDevice": "تؤثر هذه الإعدادات على الترجمة على هذا الجهاز", - "ThemeSongs": "الأغاني الموضوعية", - "TextSent": "تم الارسال.", - "TagsValue": "العلامات: {0}", - "Tags": "العلامات", - "TabNetworking": "الشبكات", + "TheseSettingsAffectSubtitlesOnThisDevice": "تؤثر هذه الإعدادات على الترجمات في هذا الجهاز", + "ThemeSongs": "أغاني الشارة", + "TextSent": "تم إرسال النص.", + "TagsValue": "الوسوم: {0}", + "Tags": "الوسوم", + "TabNetworking": "الشبكة", "SyncPlayGroupDefaultTitle": "مجموعة {0}", - "SyncPlayAccessHelp": "تتيح ميزة SyncPlay مزامنة التشغيل مع الأجهزة الأخرى. حدد مستوى وصول هذا المستخدم إلى SyncPlay.", - "Suggestions": "اقتراحات", - "SubtitleVerticalPositionHelp": "رقم السطر حيث يظهر النص. تشير الأرقام الموجبة من أعلى إلى أسفل. تشير الأرقام السالبة من أسفل إلى أعلى.", + "SyncPlayAccessHelp": "تتيح ميزة SyncPlay مزامنة التشغيل مع أجهزة أخرى. اختر مستوى الوصول الذي يمتلكه هذا المستخدم لـ SyncPlay.", + "Suggestions": "الاقتراحات", + "SubtitleVerticalPositionHelp": "رقم السطر الذي يظهر فيه النص. الأرقام الموجبة تشير من الأعلى للأسفل. الأرقام السالبة تشير من الأسفل للأعلى.", "SubtitleOffset": "إزاحة الترجمة", - "SubtitleDownloadersHelp": "قم بتمكين برامج تنزيل الترجمة المفضلة لديك وتصنيفها حسب الأولوية.", - "SubtitleAppearanceSettingsDisclaimer": "لن يتم تطبيق هذه الإعدادات على الترجمات الرسومية (PGS ، DVD ، إلخ) أو ترجمات ASS / SSA التي تتضمن أنماطها الخاصة.", - "SubtitleAppearanceSettingsAlsoPassedToCastDevices": "تنطبق هذه الإعدادات أيضًا على أي تشغيل ل Google Cast بدأ بواسطة هذا الجهاز.", - "Subtitle": "ترجمات", - "Studios": "استوديوهات", - "StopRecording": "أوقف التسجيل", - "StopPlayback": "أوقف التشغيل", - "SpecialFeatures": "مميزات خاصة", - "SortName": "ترتيب حسب الاسم", + "SubtitleDownloadersHelp": "قم بتمكين وترتيب منزلي الترجمات المفضلين لديك حسب الأولوية.", + "SubtitleAppearanceSettingsDisclaimer": "الإعدادات التالية لا تنطبق على الترجمات الرسومية المذكورة أعلاه أو ترجمات ASS/SSA التي تدمج أنماطها الخاصة.", + "SubtitleAppearanceSettingsAlsoPassedToCastDevices": "تُطبق هذه الإعدادات أيضًا على أي تشغيل Google Cast يتم بدؤه بواسطة هذا الجهاز.", + "Subtitle": "الترجمة", + "Studios": "الاستوديوهات", + "StopRecording": "إيقاف التسجيل", + "StopPlayback": "إيقاف التشغيل", + "SpecialFeatures": "ميزات خاصة", + "SortName": "اسم الفرز", "SortChannelsBy": "ترتيب القنوات حسب", - "SortByValue": "رتب حسب {0}", - "Sort": "رتب", - "SmartSubtitlesHelp": "سيتم تحميل الترجمات التي تطابق تفضيل اللغة عندما يكون الصوت بلغة أجنبية.", - "SkipEpisodesAlreadyInMyLibraryHelp": "ستتم مقارنة الحلقات باستخدام أرقام الموسم والحلقات ، عند توفرها.", - "SkipEpisodesAlreadyInMyLibrary": "لا تسجل الحلقات الموجودة بالفعل في مكتبتي", - "SimultaneousConnectionLimitHelp": "الحد الأقصى لعدد التدفقات المتزامنة المسموح بها. أدخل 0 لعدم وجود حد.", + "SortByValue": "ترتيب حسب {0}", + "Sort": "ترتيب", + "SmartSubtitlesHelp": "سيتم تحميل الترجمات المطابقة للغة المفضلة عندما يكون الصوت بلغة أجنبية.", + "SkipEpisodesAlreadyInMyLibraryHelp": "سيتم مقارنة الحلقات باستخدام أرقام الموسم والحلقة، عند توفرها.", + "SkipEpisodesAlreadyInMyLibrary": "عدم تسجيل الحلقات الموجودة بالفعل في مكتبتي", + "SimultaneousConnectionLimitHelp": "الحد الأقصى لعدد عمليات البث المتزامنة المسموح بها. أدخل 0 لإلغاء الحد.", "ShowYear": "عرض السنة", - "ShowTitle": "اعرض العنوان", - "ShowMore": "أظهر المزيد", - "ShowLess": "أظهر أقل", - "ShowIndicatorsFor": "إظهار مؤشرات ل", - "Share": "شارك", - "ServerRestartNeededAfterPluginInstall": "سيحتاج چيليفين إلى إعادة التشغيل بعد تثبيت البرنامج المساعد.", - "ServerNameIsShuttingDown": "يتم إيقاف تشغيل الخادم في {0}.", - "ServerNameIsRestarting": "يقوم الخادم في {0} بإعادة التشغيل.", - "SeriesYearToPresent": "{0} - الحاضر", - "SeriesSettings": "إعدادات السلسلة", - "SeriesRecordingScheduled": "تم جدولة تسجيل المسلسل.", - "SeriesDisplayOrderHelp": "ترتيب الحلقات حسب تاريخ البث أو ترتيب DVD أو ترقيمها المطلق.", + "ShowTitle": "عرض العنوان", + "ShowMore": "عرض المزيد", + "ShowLess": "عرض أقل", + "ShowIndicatorsFor": "عرض المؤشرات لـ", + "Share": "مشاركة", + "ServerRestartNeededAfterPluginInstall": "ستحتاج إلى إعادة تشغيل Jellyfin بعد تثبيت الملحق.", + "ServerNameIsShuttingDown": "الخادم {0} قيد إيقاف التشغيل.", + "ServerNameIsRestarting": "الخادم {0} قيد إعادة التشغيل.", + "SeriesYearToPresent": "{0} - مستمر", + "SeriesSettings": "إعدادات المسلسل", + "SeriesRecordingScheduled": "تمت جدولة تسجيل المسلسل.", + "SeriesDisplayOrderHelp": "ترتيب الحلقات حسب تاريخ العرض، ترتيب DVD، أو الترقيم المطلق.", "SeriesCancelled": "تم إلغاء المسلسل.", - "SelectServer": "حدد الخادم", - "SelectAdminUsername": "الرجاء تحديد اسم مستخدم لحساب المسؤول.", - "Season": "موسم", + "SelectServer": "اختيار الخادم", + "SelectAdminUsername": "يرجى اختيار اسم مستخدم لحساب الإدارة.", + "Season": "الموسم", "SearchResults": "نتائج البحث", - "SearchForSubtitles": "ابحث عن ترجمات", + "SearchForSubtitles": "البحث عن ترجمات", "SearchForMissingMetadata": "البحث عن البيانات الوصفية المفقودة", - "SearchForCollectionInternetMetadata": "ابحث في الإنترنت عن عمل فني وبيانات وصفية", - "Search": "ابحث", - "Schedule": "حدد موعد", - "ScanLibrary": "قم بتحديث مكتبة الوسائط", - "ScanForNewAndUpdatedFiles": "ابحث عن الملفات الجديدة والمحدثة", - "SaveSubtitlesIntoMediaFoldersHelp": "سيسمح تخزين الترجمات بجوار ملفات الفيديو بإدارتها بسهولة أكثر.", - "SaveSubtitlesIntoMediaFolders": "حفظ الترجمة في مجلدات الوسائط", - "Runtime": "مدة العرض", - "Restart": "أعاد التشغيل", + "SearchForCollectionInternetMetadata": "البحث في الإنترنت عن الصور الفنية والبيانات الوصفية", + "Search": "بحث", + "Schedule": "جدولة", + "ScanLibrary": "فحص المكتبة", + "ScanForNewAndUpdatedFiles": "فحص الملفات الجديدة والمحدثة", + "SaveSubtitlesIntoMediaFoldersHelp": "تخزين الترجمات بجوار ملفات الفيديو سيتيح إدارتها بسهولة أكبر.", + "SaveSubtitlesIntoMediaFolders": "حفظ الترجمات في مجلدات المحتوى", + "Runtime": "مدة التشغيل", + "Restart": "إعادة التشغيل", "ResetPassword": "إعادة تعيين كلمة المرور", - "ReplaceExistingImages": "استبدال الصور الموجودة", - "ReplaceAllMetadata": "استبدل كل البيانات الوصفية", - "RepeatOne": "كرر مرة واحدة", - "LabelSortTitle": "عنوان الصنف", - "LabelSortOrder": "ترتيب الصنف", - "LabelSortName": "اسم الصنف", - "LabelSortBy": "صنف حسب", - "LabelSlowResponseTime": "الوقت بالمللي ثانية (ms) والذي يعتبر الرد بعده بطيئًا", - "LabelSlowResponseEnabled": "سجل تحذير إذا كانت استجابة الخادم بطيئة", - "LabelSize": "حجم", - "LabelSimultaneousConnectionLimit": "حد التدفق المتزامن", + "ReplaceExistingImages": "استبدال الصور الحالية", + "ReplaceAllMetadata": "استبدال كل البيانات الوصفية", + "RepeatOne": "تكرار واحد", + "LabelSortTitle": "عنوان الفرز", + "LabelSortOrder": "ترتيب الفرز", + "LabelSortName": "اسم الفرز", + "LabelSortBy": "ترتيب حسب", + "LabelSlowResponseTime": "الوقت بالمللي ثانية الذي تُعد بعده الاستجابة بطيئة", + "LabelSlowResponseEnabled": "تسجيل رسالة تحذير إذا كان الخادم بطيئًا في الاستجابة", + "LabelSize": "الحجم", + "LabelSimultaneousConnectionLimit": "حدود البث المتزامن", "LabelServerName": "اسم الخادم", - "LabelSelectFolderGroupsHelp": "سيتم عرض المجلدات التي لم يتم تحديدها من قبل أنفسهم في طريقة العرض الخاصة بهم.", - "LabelSelectFolderGroups": "تجميع المحتوى تلقائيًا من المجلدات التالية في طرق عرض مثل الأفلام والموسيقى والتلفزيون", - "LabelScreensaver": "حافظة الشاشة", - "LabelRequireHttpsHelp": "إذا تم تحديده ، فسيعيد الخادم تلقائيًا توجيه جميع الطلبات عبر HTTP إلى HTTPS. هذا ليس له أي تأثير إذا كان الخادم لا يستمع إلى HTTPS.", + "LabelSelectFolderGroupsHelp": "ستظهر المجلدات غير المحددة منفصلة في عرضها الخاص.", + "LabelSelectFolderGroups": "تجميع المحتوى تلقائيًا من المجلدات التالية في عروض مثل 'الأفلام' و 'الموسيقى' و 'التلفزيون'", + "LabelScreensaver": "شاشة التوقف", + "LabelRequireHttpsHelp": "إذا كان محددًا، فسيقوم الخادم تلقائيًا بإعادة توجيه جميع طلبات HTTP إلى HTTPS. لن يكون لهذا أي تأثير إذا لم يكن الخادم يستمع على HTTPS.", "LabelRefreshMode": "وضع التحديث", - "LabelRecord": "سجل", - "LabelReasonForTranscoding": "سبب التحويل", - "LabelPublishedServerUriHelp": "تجاوز عنوان URI المستخدم بواسطة Jellyfin، بناءً على الواجهة أو عنوان IP الخاص بالعميل. على سبيل المثال: internal=http://jellyfin.example.com, external=https://jellyfin.example.com, أو all=https://jellyfin.example.com", - "LabelPublishedServerUri": "عناوين URI للخادم المنشورة", + "LabelRecord": "تسجيل", + "LabelReasonForTranscoding": "سبب تحويل الترميز", + "LabelPublishedServerUriHelp": "تجاوز رابط URI المستخدم بواسطة Jellyfin، بناءً على الواجهة، أو عنوان IP للعميل.", + "LabelPublishedServerUri": "رابط URI المنشور للخادم", "LabelPreferredSubtitleLanguage": "لغة الترجمة المفضلة", "LabelPlaylist": "قائمة التشغيل", - "LabelPlayerDimensions": "أبعاد مشغل الوسائط", - "LabelPlayer": "مشغل الوسائط", - "LabelPlaceOfBirth": "مكان الولادة", + "LabelPlayerDimensions": "أبعاد المشغّل", + "LabelPlayer": "المشغّل", + "LabelPlaceOfBirth": "مكان الميلاد", "LabelPersonRoleHelp": "مثال: سائق شاحنة الآيس كريم", - "LabelPersonRole": "دور", - "LabelPasswordResetProvider": "مزود إعادة تعيين كلمة المرور", + "LabelPersonRole": "الدور", + "LabelPasswordResetProvider": "مزوّد إعادة تعيين كلمة المرور", "LabelOverview": "نظرة عامة", "LabelOriginalTitle": "العنوان الأصلي", - "LabelOriginalName": "الاسم الاصلي", - "LabelOriginalAspectRatio": "النسبة البعدينية الأصلية", + "LabelOriginalName": "الاسم الأصلي", + "LabelOriginalAspectRatio": "نسبة العرض إلى الارتفاع الأصلية", "LabelOpenclDevice": "جهاز OpenCL", - "LabelNumber": "رقم", - "LabelMinAudiobookResumeHelp": "يُفترض عدم تشغيل العناوين إذا تم إيقافها قبل هذا الوقت.", - "LabelMinAudiobookResume": "الحد الأدنى لاستئناف كتاب مسموع في دقائق", - "LabelMetadataDownloadLanguage": "لغة التنزيل المفضلة", - "LabelMaxChromecastBitrate": "جودة تدفق Google Cast", - "LabelMaxAudiobookResumeHelp": "يفترض تشغيل العناوين بالكامل إذا تم إيقافها عندما تكون المدة المتبقية أقل من هذه القيمة.", - "LabelMaxAudiobookResume": "الدقائق المتبقية من الكتاب المسموع للاستئناف", - "LabelLocalCustomCss": "نمط CSS مخصص ينطبق على هذا العميل فقط. قد ترغب في تعطيل CSS المخصص للخادم.", + "LabelNumber": "الرقم", + "LabelMinAudiobookResumeHelp": "تعتبر العناوين غير مشغلة إذا تم إيقافها قبل هذا الوقت.", + "LabelMinAudiobookResume": "الحد الأدنى لاستئناف الكتب الصوتية (بالدقائق)", + "LabelMetadataDownloadLanguage": "لغة تنزيل البيانات الوصفية المفضلة", + "LabelMaxChromecastBitrate": "الحد الأقصى لمعدل بث Chromecast", + "LabelMaxAudiobookResumeHelp": "تعتبر العناوين مشغلة بالكامل إذا تم إيقافها والمدة المتبقية أقل من هذه القيمة.", + "LabelMaxAudiobookResume": "الحد الأقصى لاستئناف الكتب الصوتية (بالدقائق)", + "LabelLocalCustomCss": "كود CSS مخصص للتنسيق يطبق على هذا العميل فقط. قد ترغب في تعطيل كود CSS المخصص من الخادم.", "LabelLanNetworks": "شبكات LAN", - "LabelKodiMetadataUserHelp": "احفظ بيانات الساعة في ملفات NFO لتستخدمها التطبيقات الأخرى.", - "LabelKodiMetadataUser": "حفظ بيانات مشاهدة المستخدم في ملفات NFO من أجل", + "LabelKodiMetadataUserHelp": "حفظ بيانات المشاهدة إلى ملفات NFO لتطبيقات أخرى لاستخدامها.", + "LabelKodiMetadataUser": "حفظ بيانات مشاهدة المستخدم إلى ملفات NFO", "LabelInternetQuality": "جودة الإنترنت", - "LabelDisableCustomCss": "تعطيل كود CSS المخصص للتسمية / العلامة التجارية المقدمة من الخادم.", - "LabelCreateHttpPortMapHelp": "السماح بتعيين المنفذ التلقائي لإنشاء قاعدة لحركة مرور HTTP بالإضافة إلى حركة مرور HTTPS.", - "LabelCreateHttpPortMap": "قم بتمكين تعيين المنفذ التلقائي لحركة مرور HTTP و HTTPS.", - "LabelAutomaticDiscoveryHelp": "اسمح للتطبيقات باكتشاف Jellyfin تلقائيًا باستخدام منفذ UDP 7359.", - "LabelPleaseRestart": "ستصبح التغييرات سارية المفعول بعد إعادة تحميل عميل الويب.", + "LabelDisableCustomCss": "تعطيل كود CSS المخصص الذي يوفره الخادم.", + "LabelCreateHttpPortMapHelp": "السماح للتعيين التلقائي للمنافذ بإنشاء قاعدة لحركة HTTP بالإضافة إلى حركة HTTPS.", + "LabelCreateHttpPortMap": "تفعيل التعيين التلقائي لمنفذ HTTP بالإضافة إلى HTTPS.", + "LabelAutomaticDiscoveryHelp": "السماح للتطبيقات باكتشاف Jellyfin تلقائيًا باستخدام منفذ UDP 7359.", + "LabelPleaseRestart": "ستصبح التغييرات نافذة بعد إعادة تحميل عميل الويب يدويًا.", "AudioSampleRateNotSupported": "معدل عينة الصوت غير مدعوم", - "EnableGamepadHelp": "ابحث عن المدخلات من أي وحدات تحكم متصلة.(يتطلب: وضع التلفاز)", - "LabelEnableGamepad": "تفعيل Gamepad", - "EnableEnhancedNvdecDecoder": "تفعيل وحدة فك ترميز NVDEC المحسّنة", - "LabelSelectMono": "أحادية", - "LabelRemuxingInfo": "معلومات Remuxing", - "RemuxHelp2": "يستخدم Remux القليل جدًا من قوة المعالجة مع جودة وسائط خالية تمامًا من الضياع.", - "WriteAccessRequired": "يتطلب Jellyfin حق الوصول للكتابة إلى هذا المجلد. يرجى التأكد من حق الوصول للكتابة وحاول مرة أخرى.", - "UserAgentHelp": "توفير رأس HTTP مخصص لوكيل المستخدم.", - "UseDoubleRateDeinterlacingHelp": "يستخدم هذا الإعداد معدل المجال عند إزالة التداخل ، والذي يشار إليه غالبًا باسم \"bob deinterlacing\" ، والذي يضاعف معدل الإطارات للفيديو لتوفير حركة كاملة مثل ما قد تراه عند مشاهدة الفيديو المتشابك على التلفزيون.", - "UseDoubleRateDeinterlacing": "ضاعف معدل الإطارات عند إزالة التداخل", - "Up": "إلى أعلى", - "TonemappingRangeHelp": "حدد نطاق لون الإخراج، ويعتبر خيار (تلقائي) نطاق الإدخال.", - "ThemeVideos": "مقاطع فيديو موضوعية", - "TabRepositories": "مستودعات", - "Smaller": "الأصغر", - "Shuffle": "عشوائي", + "EnableGamepadHelp": "الاستماع للمدخلات من أي وحدات تحكم متصلة. (يتطلب: وضع عرض 'تلفاز')", + "LabelEnableGamepad": "تفعيل وحدة التحكم (Gamepad)", + "EnableEnhancedNvdecDecoder": "تفعيل مفكك ترميز NVDEC المحسّن", + "LabelSelectMono": "أحادي (Mono)", + "LabelRemuxingInfo": "معلومات إعادة التغليف", + "RemuxHelp2": "تستهلك عملية إعادة التغليف طاقة معالجة قليلة جدًا مع الحفاظ على جودة الوسائط دون فقدان.", + "WriteAccessRequired": "يتطلب Jellyfin إذن الكتابة لهذا المجلد. يرجى التأكد من إذن الكتابة والمحاولة مرة أخرى.", + "UserAgentHelp": "توفير ترويسة HTTP مخصصة لـ 'User-Agent'.", + "UseDoubleRateDeinterlacingHelp": "يستخدم هذا الإعداد معدل الحقل عند إزالة التشابك، والذي يشار إليه غالبًا بـ bob deinterlacing، مما يضاعف معدل إطارات الفيديو لتوفير حركة كاملة مثل ما تراه عند عرض فيديو متشابك على التلفزيون.", + "UseDoubleRateDeinterlacing": "مضاعفة معدل الإطارات عند إزالة التشابك", + "Up": "أعلى", + "TonemappingRangeHelp": "اختر نطاق ألوان الإخراج. الوضع التلقائي يماثل نطاق الإدخال.", + "ThemeVideos": "فيديوهات الشارة", + "TabRepositories": "المستودعات", + "Smaller": "أصغر", + "Shuffle": "تشغيل عشوائي", "Refresh": "تحديث", - "Raised": "رفع", - "QuickConnectNotAvailable": "اطلب من مسؤول الخادم تمكين الاتصال السريع", + "Raised": "مرتفع", + "QuickConnectNotAvailable": "اطلب من مسؤول الخادم تمكين Quick Connect", "QuickConnectNotActive": "Quick Connect غير نشط على هذا الخادم", - "QuickConnectInvalidCode": "رمز الاتصال السريع غير صالح", - "QuickConnectAuthorizeFail": "رمز الاتصال السريع غير معروف", - "QuickConnect": "الاتصال السريع", - "QuickConnectDescription": "لتسجيل الدخول باستخدام الاتصال السريع ، حدد زر Quick Connect على الجهاز الذي تقوم بتسجيل الدخول منه وأدخل الرمز المعروض أدناه.", + "QuickConnectInvalidCode": "رمز Quick Connect غير صالح", + "QuickConnectAuthorizeFail": "رمز Quick Connect غير معروف", + "QuickConnect": "Quick Connect", + "QuickConnectDescription": "لتسجيل الدخول باستخدام Quick Connect، حدد زر 'Quick Connect' على الجهاز الذي تسجل الدخول منه وأدخل الرمز المعروض أدناه.", "QuickConnectDeactivated": "تم إلغاء تنشيط Quick Connect قبل الموافقة على طلب تسجيل الدخول", - "Played": "تم تشغيل", - "PlaybackErrorPlaceHolder": "هذا عنصر نائب للوسائط المادية التي لا تستطيع Jellyfin تشغيلها. الرجاء إدخال القرص لتشغيل.", + "Played": "تم التشغيل", + "PlaybackErrorPlaceHolder": "هذا عنصر نائب للوسائط المادية التي لا يمكن لـ Jellyfin تشغيلها. يرجى إدخال القرص للتشغيل.", "OtherArtist": "فنان آخر", - "OptionForceRemoteSourceTranscoding": "فرض تحويل ترميز مصادر الوسائط البعيدة مثل البث التلفزيوني المباشر", - "NoNewDevicesFound": "لم يتم العثور على أجهزة جديدة. لإضافة موالف جديد ، أغلق مربع الحوار هذا وأدخل معلومات الجهاز.", - "Mobile": "نقّال (تراثي)", - "Mixer": "خلاط", - "MessageSyncPlayNoGroupsAvailable": "لا توجد مجموعات متاحة. ابدأ تشغيل شيء ما أولاً.", + "OptionForceRemoteSourceTranscoding": "فرض تحويل ترميز مصادر الوسائط عن بُعد مثل التلفاز المباشر", + "NoNewDevicesFound": "لم يتم العثور على أجهزة جديدة. لإضافة موالف جديد، أغلق هذه النافذة وأدخل معلومات الجهاز يدويًا.", + "Mobile": "الهاتف (قديم)", + "Mixer": "مهندس المزج", + "MessageSyncPlayNoGroupsAvailable": "لا توجد مجموعات متاحة. ابدأ بتشغيل شيء ما أولاً.", "MessageSyncPlayErrorNoActivePlayer": "لم يتم العثور على مشغل نشط. تم تعطيل SyncPlay.", - "MessageNoRepositories": "لا توجد أي مستودعات.", - "MessageNoGenresAvailable": "مكّن بعض موفري البيانات الوصفية من سحب الأنواع من الإنترنت.", - "MessageLeaveEmptyToInherit": "اتركه فارغًا لوراثة الإعدادات من عنصر رئيسي أو القيمة الافتراضية العامة.", - "MessageGetInstalledPluginsError": "حدث خطأ أثناء الحصول على قائمة المكونات الإضافية المثبتة حاليًا.", - "MessageAddRepository": "إذا كنت ترغب في إضافة مستودع ، فاضغط على الزر بجوار الرأس واملأ المعلومات المطلوبة.", - "MediaInfoColorTransfer": "نقل اللون", - "MediaInfoColorSpace": "مساحة اللون", + "MessageNoRepositories": "لا توجد مستودعات.", + "MessageNoGenresAvailable": "قم بتمكين بعض مزودي البيانات الوصفية لسحب الأنواع من الإنترنت.", + "MessageLeaveEmptyToInherit": "اترك الحقل فارغًا لوراثة الإعدادات من المحتوى الأصل أو القيمة الافتراضية.", + "MessageGetInstalledPluginsError": "حدث خطأ أثناء الحصول على قائمة الملحقات المثبتة حاليًا.", + "MessageAddRepository": "إذا كنت ترغب في إضافة مستودع، انقر على الزر الموجود بجوار العنوان واملأ المعلومات المطلوبة.", + "MediaInfoColorTransfer": "نقل الألوان", + "MediaInfoColorSpace": "مساحة الألوان", "MediaInfoColorPrimaries": "الألوان الأساسية", - "LanNetworksHelp": "قائمة مفصولة بفواصل لعناوين IP أو مدخلات قناع الشبكة للشبكات التي ستُعتبر ضمن الشبكة المحلية عند فرض قيود النطاق الترددي والوصول عن بُعد. إذا تُركت فارغة، تُعتبر جميع عناوين RFC1918 محلية.", - "LabelVersion": "إصدار", - "LabelUserRemoteClientBitrateLimitHelp": "تجاوز القيمة العامة الافتراضية المعينة في إعدادات الخادم ، راجع لوحة الاعدادت> التشغيل> تدفق.", - "LabelTVHomeScreen": "الشاشة الرئيسية الخاصة بوضع التلفزيون", - "LabelTranscodingProgress": "تقدم المرمز", - "LabelTranscodes": "الترميزات", - "LabelTonemappingDesatHelp": "قم بتطبيق إزالة التشبع على الإبرازات التي تتجاوز هذا المستوى من السطوع. القيمة الموصى بها هي 0 (تعطيل).", - "LabelSyncPlayResumePlaybackDescription": "انضم إلى إعادة تشغيل المجموعة", + "LanNetworksHelp": "قائمة بعناوين IP أو إدخالات IP/قناع الشبكة للشبكات التي ستُعتبر ضمن الشبكة المحلية عند تطبيق قيود النطاق الترددي والوصول عن بُعد، مفصولة بفواصل. إذا تُركت فارغة، فستُعتبر جميع عناوين RFC1918 محلية.", + "LabelVersion": "الإصدار", + "LabelUserRemoteClientBitrateLimitHelp": "تجاوز القيمة العامة الافتراضية المحددة في إعدادات الخادم، انظر لوحة التحكم > التشغيل > البث.", + "LabelTVHomeScreen": "الشاشة الرئيسية في وضع التلفاز", + "LabelTranscodingProgress": "تقدم تحويل الترميز", + "LabelTranscodes": "تحويلات الترميز", + "LabelTonemappingDesatHelp": "تطبيق خفض التشبع للإضاءات الساطعة التي تتجاوز هذا المستوى من السطوع. القيمة الموصى بها هي 0 (تعطيل).", + "LabelSyncPlayResumePlaybackDescription": "الانضمام مجددًا إلى تشغيل المجموعة", "LabelSyncPlayResumePlayback": "استئناف التشغيل المحلي", - "LabelSyncPlayPlaybackDiff": "فرق وقت التشغيل", - "LabelSyncPlayHaltPlayback": "أوقف التشغيل المحلي", - "LabelSyncPlayAccess": "وصول SyncPlay", - "LabelSubtitleVerticalPosition": "الوضع الرأسي", - "LabelSkipForwardLength": "طول التخطي للأمام", - "LabelSkipBackLength": "طول التخطي للخلف", - "LabelRequireHttps": "يتطلب HTTPS", - "LabelRepositoryUrlHelp": "موقع بيان المستودع الذي تريد تضمينه.", - "LabelRepositoryUrl": "URL المستودع", - "LabelRepositoryNameHelp": "اسم مخصص لتمييز هذا المستودع عن أي مستودعات أخرى تمت إضافتها إلى الخادم الخاص بك.", + "LabelSyncPlayPlaybackDiff": "فارق وقت التشغيل", + "LabelSyncPlayHaltPlayback": "إيقاف التشغيل المحلي", + "LabelSyncPlayAccess": "الوصول إلى SyncPlay", + "LabelSubtitleVerticalPosition": "الموضع العمودي", + "LabelSkipForwardLength": "مدة التخطي للأمام", + "LabelSkipBackLength": "مدة التخطي للخلف", + "LabelRequireHttps": "طلب HTTPS", + "LabelRepositoryUrlHelp": "موقع ملف بيان المستودع الذي تريد تضمينه.", + "LabelRepositoryUrl": "رابط المستودع", + "LabelRepositoryNameHelp": "اسم مخصص لتمييز هذا المستودع عن أي مستودعات أخرى تمت إضافتها إلى خادمك.", "LabelRepositoryName": "اسم المستودع", - "LabelRemoteClientBitrateLimitHelp": "حد اختياري لمعدل البت لكل تدفق لجميع الأجهزة خارج الشبكة. هذا مفيد لمنع الأجهزة من طلب معدل بت أعلى مما يمكن لاتصال الإنترنت الخاص بك التعامل معه. قد يؤدي هذا إلى زيادة حمل CPU على الخادم الخاص بك من أجل تحويل مقاطع الفيديو بسرعة إلى معدل بت أقل.", - "LabelQuickConnectCode": "كود الاتصال السريع", + "LabelRemoteClientBitrateLimitHelp": "حد اختياري لمعدل البت لكل بث لجميع الأجهزة خارج الشبكة. يفيد هذا في منع الأجهزة من طلب معدل بت أعلى مما يتحمله اتصال الإنترنت لديك. قد يؤدي ذلك إلى زيادة حمل CPU على الخادم لتحويل ترميز الفيديوهات أثناء التشغيل إلى معدل بت أقل.", + "LabelQuickConnectCode": "رمز Quick Connect", "LabelPlayMethod": "طريقة التشغيل", - "LabelParentNumber": "رقم الوالد", - "LabelParentalRating": "تصنيف الوالدين", - "LabelMaxMuxingQueueSizeHelp": "الحد الأقصى لعدد الحزم التي يمكن تخزينها مؤقتًا أثناء انتظار تهيئة جميع التدفقات. حاول زيادتها إذا كنت لا تزال تواجه خطأ \"عدد كبير جدًا من الحزم المخزنة مؤقتًا لدفق الإخراج\" في سجلات ffmpeg. القيمة الموصي بها هي 2048.", - "LabelMaxMuxingQueueSize": "الحد الأقصى لحجم قائمة انتظار تعدد الإرسال", - "LabelLockItemToPreventChanges": "قفل هذا العنصر لمنع تغيير البيانات الوصفية مستقبلا", - "LabelMaxDaysForNextUpHelp": "يضبط الحد الأقصى لعدد الأيام التي يجب أن يبقى فيها العرض في قائمة 'التالي' دون مشاهدته.", - "LabelMaxDaysForNextUp": "الحد الأقصى للأيام في 'التالي'", - "LabelLibraryPageSizeHelp": "حدّد عدد العناصر المعروضة على صفحة المكتبة. سيؤدي تعيين القيمة 0 إلى تعطيل الترقيم. يُرجى العلم أن تعيين هذه القيمة بـ 0 أو أي قيمة أكبر من 100 قد يؤدي إلى أخطاء وانخفاض في الأداء.", + "LabelParentNumber": "رقم الأصل", + "LabelParentalRating": "التصنيف العمري", + "LabelMaxMuxingQueueSizeHelp": "الحد الأقصى لعدد الحزم التي يمكن تخزينها مؤقتًا أثناء انتظار تهيئة كل البثوث. جرّب زيادته إذا استمر ظهور خطأ \"Too many packets buffered for output stream\" في سجلات FFmpeg. القيمة الموصى بها هي 2048.", + "LabelMaxMuxingQueueSize": "الحد الأقصى لحجم قائمة دمج البث (Muxing)", + "LabelLockItemToPreventChanges": "قفل هذا العنصر لمنع تغييرات البيانات الوصفية المستقبلية", + "LabelMaxDaysForNextUpHelp": "حدّد أقصى عدد من الأيام لبقاء المسلسل في قائمة «التالي» دون مشاهدته.", + "LabelMaxDaysForNextUp": "أقصى عدد أيام في 'التالي'", + "LabelLibraryPageSizeHelp": "حدّد عدد العناصر التي تظهر في صفحة المكتبة. يؤدي تعيين القيمة إلى 0 إلى تعطيل ترقيم الصفحات. لاحظ أن تعيينها إلى 0 أو إلى قيمة أكبر من 100 قد يسبب أخطاء ويقلل الأداء.", "LabelLibraryPageSize": "حجم صفحة المكتبة", "LabelKnownProxies": "الوكلاء المعروفون", - "LabelKeepUpTo": "حافظ على ما يصل إلى", - "LabelIsForced": "مجبر", - "LabelHardwareEncoding": "ترميز الأجهزة", - "LabelH265Crf": "H.265 ترميز CRF", - "LabelEnableIP6Help": "تمكن وظيفة IPv6.", - "LabelEnableIP6": "تمكين IPv6", - "LabelEnableIP4Help": "تمكن وظيفة IPv4.", - "LabelEnableIP4": "تمكين IPv4", - "LabelDropSubtitleHere": "ضع العنوان الفرعي هنا ، أو اضغط للتصفح.", - "LabelColorTransfer": "نقل اللون", - "LabelColorSpace": "مساحة اللون", + "LabelKeepUpTo": "الاحتفاظ حتى", + "LabelIsForced": "إجباري", + "LabelHardwareEncoding": "ترميز عتادي", + "LabelH265Crf": "ترميز H.265 CRF", + "LabelEnableIP6Help": "تفعيل وظائف IPv6.", + "LabelEnableIP6": "تفعيل IPv6", + "LabelEnableIP4Help": "تفعيل وظائف IPv4.", + "LabelEnableIP4": "تفعيل IPv4", + "LabelDropSubtitleHere": "أسقط ملف الترجمة هنا أو انقر للاستعراض.", + "LabelColorTransfer": "نقل الألوان", + "LabelColorSpace": "مساحة الألوان", "LabelColorPrimaries": "الألوان الأساسية", - "HeaderSyncPlayPlaybackSettings": "التشغيل", + "HeaderSyncPlayPlaybackSettings": "إعدادات التشغيل", "HeaderNewRepository": "مستودع جديد", - "DirectPlayHelp": "الملف المصدر متوافق تمامًا مع هذا العميل والجلسة تستقبل الملف بدون تعديلات.", - "LabelDashboardTheme": "قالب لوحة تحكم الخادم", - "LabelTonemappingParamHelp": "اضبط خوارزمية تعيين النغمة. عادةً ما يُترك هذا الحقل فارغًا.", - "LabelTonemappingParam": "معلمة تعيين النغمة", - "LabelTonemappingDesat": "مُعدل تعيين النغمة", - "LabelTonemappingAlgorithm": "حدد خوارزمية تعيين النغمة لاستخدامها", - "LabelOpenclDeviceHelp": "هذا هو جهاز OpenCL المستخدم لتعيين النغمة. الجانب الأيسر من النقطة هو رقم النظام الأساسي ، والجانب الأيمن هو رقم الجهاز على النظام الأساسي. القيمة الافتراضية هي 0.0. مطلوب ملف تطبيق FFmpeg الذي يحتوي على طريقة تسريع أجهزة OpenCL.", - "LabelAutomaticallyAddToCollectionHelp": "عندما يكون لفيلمين على الأقل نفس اسم المجموعة ، فسيتم إضافتهما تلقائيًا إلى المجموعة.", - "LabelAutomaticallyAddToCollection": "إضافة إلى المجموعة تلقائيا", + "DirectPlayHelp": "ملف المصدر متوافق بالكامل مع هذا العميل، وتستقبل الجلسة الملف دون أي تعديلات.", + "LabelDashboardTheme": "سمة لوحة التحكم", + "LabelTonemappingParamHelp": "ضبط خوارزمية تحويل النطاق اللوني. يفضل تركه فارغًا بشكل عام.", + "LabelTonemappingParam": "معامل تحويل النطاق اللوني", + "LabelTonemappingDesat": "خفض تشبع تحويل النطاق اللوني", + "LabelTonemappingAlgorithm": "حدد خوارزمية تحويل النطاق اللوني لاستخدامها", + "LabelOpenclDeviceHelp": "هذا هو جهاز OpenCL المستخدم لتحويل النطاق اللوني. الجانب الأيسر من النقطة هو رقم المنصة، والجانب الأيمن هو رقم الجهاز على المنصة. القيمة الافتراضية 0.0. يلزم ملف FFmpeg الذي يحتوي على طريقة تسريع OpenCL العتادي.", + "LabelAutomaticallyAddToCollectionHelp": "عندما يحمل فيلمان على الأقل اسم المجموعة نفسه، ستتم إضافتهما تلقائيًا إلى المجموعة.", + "LabelAutomaticallyAddToCollection": "إضافة إلى المجموعة تلقائيًا", "Console": "وحدة التحكم", - "Casual": "غير رسمي", - "AllowTonemappingHelp": "يمكن أن يؤدي تعيين النغمة إلى تحويل النطاق الديناميكي لمقاطع الفيديو من HDR إلى SDR مع الحفاظ على تفاصيل الصورة والألوان. هذه بينات مهمة جدًا لتمثيل المشهد الأصلي بشكل وفي للمقطع ألأصلي. حاليًا يعمل هذا ألاعداد فقط مع مقاطع فيديو HDR10 أو HLG. يتطلب هذا ألأعداد وقت تشغيل GPGPU.", + "Casual": "عادي", + "AllowTonemappingHelp": "يمكن لتحويل النطاق اللوني تحويل المدى الديناميكي للفيديو من HDR إلى SDR مع الحفاظ على تفاصيل الصورة وألوانها، وهو مهم لعرض المشهد الأصلي بدقة. يعمل حاليًا فقط مع فيديوهات HDR10 وHLG وDoVi بعمق 10 بت. يتطلب ذلك بيئة تشغيل المناسبة.", "RefFramesNotSupported": "الإطارات المرجعية غير مدعومة", - "InterlacedVideoNotSupported": "الفيديو المتشابك غير مدعوم", - "AnamorphicVideoNotSupported": "لا يتم دعم الفيديو ذي الصورة المشوهة", - "AllowVppTonemappingHelp": "تعين النغمة الكامل للأجهزة باستخدام Intel. يعمل حاليًا فقط على أجهزة معينة مع مقاطع فيديو HDR10. هذا له أولوية أعلى مقارنة بتطبيق OpenCL آخر.", - "EnableVppTonemapping": "تفعيل تعيين نغمة VPP", - "Remuxing": "إعادة", - "AspectRatioCover": "تكبير", + "InterlacedVideoNotSupported": "الفيديو المتشابك (Interlaced) غير مدعوم", + "AnamorphicVideoNotSupported": "الفيديو المشوه عدسيًا (Anamorphic) غير مدعوم", + "AllowVppTonemappingHelp": "تحويل النطاق اللوني القائم بالكامل على تعريفات Intel. يعمل حاليًا فقط على بعض الأجهزة مع فيديوهات HDR10. له أولوية أعلى مقارنة بتنفيذ OpenCL آخر.", + "EnableVppTonemapping": "تفعيل تحويل النطاق اللوني VPP", + "Remuxing": "إعادة التغليف (Remuxing)", + "AspectRatioCover": "تكبير (Cover)", "Typewriter": "آلة كاتبة", "TypeOptionPluralVideo": "فيديوهات", - "TypeOptionPluralSeries": "مسلسلات", + "TypeOptionPluralSeries": "مسلسلات تلفزيونية", "TypeOptionPluralSeason": "مواسم", - "TypeOptionPluralMusicVideo": "أشرطة الفيديو والموسيقى", - "TypeOptionPluralMusicArtist": "فنانو الموسيقى", - "TypeOptionPluralMusicAlbum": "ألبومات الموسيقى", - "TypeOptionPluralMovie": "الأفلام", - "TypeOptionPluralEpisode": "الحلقات", - "TypeOptionPluralBoxSet": "مجموعات مربعه", + "TypeOptionPluralMusicVideo": "فيديوهات موسيقية", + "TypeOptionPluralMusicArtist": "فنانو موسيقى", + "TypeOptionPluralMusicAlbum": "ألبومات موسيقى", + "TypeOptionPluralMovie": "أفلام", + "TypeOptionPluralEpisode": "حلقات", + "TypeOptionPluralBoxSet": "مجموعات", "TypeOptionPluralBook": "كتب", "TypeOptionPluralAudio": "صوتيات", - "TonemappingAlgorithmHelp": "يمكن ضبط النغمة بدقة. إذا لم تكن معتادًا على هذه الخيارات ، فما عليك سوى الاحتفاظ بالخيار الافتراضي. القيمة الموصى بها هي \"BT.2390\".", - "ThumbCard": "بطاقة مصغرة", - "Thumb": "ابهام", + "TonemappingAlgorithmHelp": "يمكن ضبط تحويل النطاق اللوني. إذا لم تكن مألوفًا بهذه الخيارات، فقط احتفظ بالافتراضي. القيمة الموصى بها هي 'BT.2390'.", + "ThumbCard": "بطاقة صورة مصغرة", + "Thumb": "صورة مصغرة", "Smart": "ذكي", - "SmallCaps": "قبعات صغيرة", - "Remixer": "ريمكس", + "SmallCaps": "أحرف صغيرة كبيرة", + "Remixer": "معيد المزج", "Print": "طباعة", - "MediaInfoTitle": "عنوان", + "MediaInfoTitle": "العنوان", "Larger": "أكبر", - "LabelTonemappingRange": "نطاق تعيين النغمة", - "LabelTonemappingPeakHelp": "تجاوز قيمة البيانات الوصفية المضمنة لإشارة الإدخال بقيمة الذروة هذه بدلاً من ذلك. القيمة الافتراضية هي 100 (1000nit).", - "LabelTonemappingPeak": "ذروة رسم الخرائط", - "Cursive": "متّصل", - "LabelHardwareEncodingOptions": "خيارات ترميز الأجهزة", - "IntelLowPowerEncHelp": "يمكن أن يحافظ التشفير منخفض الطاقة على مزامنة وحدة المعالجة المركزية (CPU) ووحدة معالجة الرسومات (GPU) غير الضرورية. في Linux ، يجب تعطيلها إذا لم يتم تكوين البرنامج الثابت i915 HuC.", - "EnableIntelLowPowerHevcHwEncoder": "قم بتمكين ترميز أجهزة Intel Low-Power HEVC", - "EnableIntelLowPowerH264HwEncoder": "قم بتمكين برنامج تشفير الأجهزة Intel Low-Power H.264", - "PreferSystemNativeHwDecoder": "تفضل وحدات فك ترميز أجهزة DXVA أو VA-API الأصلية لنظام التشغيل", - "ContainerBitrateExceedsLimit": "معدل بت الفيديو تجاوز الحد", - "SelectAll": "اختر الكل", - "DirectPlayError": "حدث خطأ في بدء التشغيل المباشر", - "UnknownAudioStreamInfo": "معلومات دفق الصوت غير معروفة", - "UnknownVideoStreamInfo": "معلومات دفق الفيديو غير معروفة", + "LabelTonemappingRange": "نطاق تحويل النطاق اللوني", + "LabelTonemappingPeakHelp": "تجاوز قيمة البيانات الوصفية المضمنة لإشارة الإدخال بهذه القيمة القصوى بدلاً من ذلك. القيمة الافتراضية هي 100 (1000 نت).", + "LabelTonemappingPeak": "قمة تحويل النطاق اللوني", + "Cursive": "مائل", + "LabelHardwareEncodingOptions": "خيارات الترميز العتادي", + "IntelLowPowerEncHelp": "الترميز منخفض الطاقة يمكن أن يتجنب مزامنة وحدة المعالجة المركزية (CPU) مع وحدة معالجة الرسومات (GPU) غير الضرورية. في لينكس، يجب تعطيله إذا لم تكن البرامج الثابتة i915 HuC مهيأة.", + "EnableIntelLowPowerHevcHwEncoder": "تفعيل الترميز العتادي منخفض الطاقة HEVC لـ Intel", + "EnableIntelLowPowerH264HwEncoder": "تفعيل الترميز العتادي منخفض الطاقة H.264 لـ Intel", + "PreferSystemNativeHwDecoder": "تفضيل مفككات الترميز العتادية الأصلية في نظام التشغيل مثل DXVA أو VA-API", + "ContainerBitrateExceedsLimit": "معدل بت الفيديو يتجاوز الحد المسموح به", + "SelectAll": "اختيار الكل", + "DirectPlayError": "حدث خطأ أثناء بدء التشغيل المباشر", + "UnknownAudioStreamInfo": "معلومات مسار الصوت غير معروفة", + "UnknownVideoStreamInfo": "معلومات مسار الفيديو غير معروفة", "VideoBitrateNotSupported": "معدل بت الفيديو غير مدعوم", - "AudioIsExternal": "دفق الصوت خارجي", + "AudioIsExternal": "مسار الصوت خارجي", "ThemeVideo": "فيديو الشارة", "ThemeSong": "أغنية الشارة", - "Sample": "عيّنة", - "Scene": "المشاهد", + "Sample": "عينة", + "Scene": "مشهد", "Interview": "مقابلة", - "DeletedScene": "مشاهد محذوفة", - "BehindTheScenes": "وراء الكواليس", - "Trailer": "العرض الإعلاني", + "DeletedScene": "مشهد محذوف", + "BehindTheScenes": "خلف الكواليس", + "Trailer": "الإعلان الترويجي", "Clip": "مقطع", - "ButtonExitApp": "أغلق التطبيق", - "AllowEmbeddedSubtitlesAllowTextOption": "السماح بالنص", - "AllowEmbeddedSubtitlesAllowImageOption": "السماح بالصورة", - "AllowEmbeddedSubtitlesAllowNoneOption": "لا تسمح", - "AllowEmbeddedSubtitlesAllowAllOption": "السماح للجميع", - "AllowEmbeddedSubtitlesHelp": "تعطيل الترجمات التي تم حزمها داخل حاويات الوسائط. يتطلب تحديثًا كاملاً للمكتبة.", + "ButtonExitApp": "الخروج من التطبيق", + "AllowEmbeddedSubtitlesAllowTextOption": "السماح بالنصوص", + "AllowEmbeddedSubtitlesAllowImageOption": "السماح بالصور", + "AllowEmbeddedSubtitlesAllowNoneOption": "عدم السماح بشيء", + "AllowEmbeddedSubtitlesAllowAllOption": "السماح بالكل", + "AllowEmbeddedSubtitlesHelp": "تعطيل الترجمات المعبأة داخل حاويات الوسائط. يتطلب تحديثًا كاملاً للمكتبة.", "AllowEmbeddedSubtitles": "تعطيل أنواع مختلفة من الترجمات المضمنة", - "ButtonBackspace": "العودة", - "ShowParentImages": "إظهار صور المسلسل", - "MixedMoviesShows": "أفلام وعروض مختلطة", + "ButtonBackspace": "مسافة للخلف", + "ShowParentImages": "عرض صور المسلسل", + "MixedMoviesShows": "مختلط أفلام ومسلسلات", "GoogleCastUnsupported": "Google Cast غير مدعوم", - "EnableRewatchingNextUpHelp": "تفعيل عرض الحلقات التي تم مشاهدتها بالفعل في أقسام \"Next Up\".", - "EnableRewatchingNextUp": "تمكين إعادة المشاهدة في القادم", - "CopyFailed": "فشل النسخ", - "Copy": "ينسخ", - "Copied": "نسخ", - "ButtonSpace": "مساحة", - "ButtonClose": "أغلق", - "AddToFavorites": "أضفه إلى المفضلة", - "EnableEnhancedNvdecDecoderHelp": "NVDEC محسن، قم بتعطيل هذا الخيار لأستخدام CUVID إذا واجهت أخطاء في عملية فك الترميز.", - "StoryArc": "قصة القوس", - "Production": "إنتاج", - "OriginalAirDate": "تاريخ البث الأصلي", - "MessageUnauthorizedUser": "غير مصرح لك بالوصول إلى الخادم في هذا الوقت. يرجى الاتصال بمسؤول الخادم الخاص بك لمزيد من المعلومات.", - "Localization": "تحديد الموقع", - "ItemDetails": "تفاصيل العنصر", + "EnableRewatchingNextUpHelp": "تفعيل عرض الحلقات التي سبق مشاهدتها في أقسام «التالي».", + "EnableRewatchingNextUp": "تفعيل إعادة المشاهدة في «التالي»", + "CopyFailed": "تعذر النسخ", + "Copy": "نسخ", + "Copied": "تم النسخ", + "ButtonSpace": "مسافة", + "ButtonClose": "إغلاق", + "AddToFavorites": "إضافة إلى المفضلة", + "EnableEnhancedNvdecDecoderHelp": "تنفيذ NVDEC المُحسّن، قم بتعطيل هذا الخيار لاستخدام CUVID إذا واجهت أخطاء في فك التشفير.", + "StoryArc": "قوس القصة", + "Production": "الإنتاج", + "OriginalAirDate": "تاريخ العرض الأصلي", + "MessageUnauthorizedUser": "أنت غير مخول للوصول إلى الخادم في هذا الوقت. يرجى الاتصال بمسؤول الخادم للحصول على مزيد من المعلومات.", + "Localization": "الترجمة المحلية", + "ItemDetails": "تفاصيل المحتوى", "Digital": "رقمي", - "Bold": "عريض", - "LabelTextWeight": "سمك الخط", - "HomeVideosPhotos": "مقاطع الفيديو والصور", - "EnableSplashScreen": "تمكين صورة شاشة البداية", - "MediaInfoDvBlSignalCompatibilityId": "معرف توافق إشارة DV bl", - "MediaInfoBlPresentFlag": "علامة الضبط المسبق لـ DV bl", - "MediaInfoElPresentFlag": "DV el علم مسبق الضبط", - "MediaInfoRpuPresentFlag": "علامة الضبط المسبق لـ DV Rpu", + "Bold": "غامق", + "LabelTextWeight": "وزن النص", + "HomeVideosPhotos": "فيديوهات وصور منزلية", + "EnableSplashScreen": "تفعيل صورة شاشة البداية", + "MediaInfoDvBlSignalCompatibilityId": "معرّف توافق إشارة DV bl", + "MediaInfoBlPresentFlag": "علامة التواجد bl لـ DV", + "MediaInfoElPresentFlag": "علامة التواجد el لـ DV", + "MediaInfoRpuPresentFlag": "علامة التواجد rpu لـ DV", "MediaInfoDvLevel": "مستوى DV", - "MediaInfoDvProfile": "الملف الشخصي DV", - "MediaInfoDvVersionMinor": "نسخة DV طفيفة", - "MediaInfoDvVersionMajor": "إصدار DV الرئيسي", + "MediaInfoDvProfile": "ملف تعريف DV", + "MediaInfoDvVersionMinor": "الإصدار الفرعي لـ DV", + "MediaInfoDvVersionMajor": "الإصدار الرئيسي لـ DV", "MediaInfoDoViTitle": "عنوان DV", "MediaInfoVideoRangeType": "نوع نطاق الفيديو", "LabelVideoRangeType": "نوع نطاق الفيديو", "VideoRangeTypeNotSupported": "نوع نطاق الفيديو غير مدعوم", - "LabelVppTonemappingContrastHelp": "تطبيق كسب التباين في تعيين نغمة VPP. القيم الموصى بها هي 1.", - "LabelVppTonemappingContrast": "كسب تباين تعيين نغمة VPP", - "LabelVppTonemappingBrightnessHelp": "تطبيق كسب السطوع في تعيين نغمة VPP. القيم الموصى بها هي 16.", - "LabelVppTonemappingBrightness": "كسب سطوع رسم الخرائط VPP نغمة", - "ScreenResolution": "تعيين مسار الترجمة على أساس البند السابق", - "RememberSubtitleSelectionsHelp": "تعيين مسار الترجمة على أساس البند السابق.", - "RememberSubtitleSelections": "تعيين مسار الترجمة على أساس البند السابق", - "RememberAudioSelectionsHelp": "حاول ضبط المسار الصوتي على أقرب تطابق للفيديو الأخير.", - "RememberAudioSelections": "تعيين مسار الصوت على أساس البند السابق", - "LabelMaxVideoResolution": "الحد الأقصى المسموح به لقرار تحويل ترميز الفيديو", - "OptionDateShowAdded": "تاريخ اضافة العرض", - "OptionDateEpisodeAdded": "تاريخ اضافة الحلقة", - "IgnoreDtsHelp": "قد يؤدي تعطيل هذا الخيار إلى حل بعض المشكلات ، على سبيل المثال فقدان الصوت على القنوات التي تحتوي على دفق صوت وفيديو منفصل.", - "IgnoreDts": "تجاهل DTS (الطابع الزمني لفك التشفير)", - "EnableCardLayout": "إظهار صور المكتبات", - "MessageNoItemsAvailable": "لا يجود أي عناصر متاحة حاليا.", - "MessageNoFavoritesAvailable": "لا يوجد حاليا أي مفضلات.", - "Unreleased": "لم يصدر حتى الآن", - "MessageRenameMediaFolder": "يرجى ملاحظة أنه ستحذف جميع البيانات الوصفية عند إعادة تسمية مكتبة الوسائط.", - "DownloadAll": "تحميل الكل", - "LabelChapterImageResolutionHelp": "دقة الصور المستأصلة من الفصل. تغيير هذا ألاعداد لن يؤثر على الفصول الوهمية الذي تم أنشائها مسبقاً.", - "LabelDummyChapterDurationHelp": "فترة الوقت بين ألفصول ألوهمية بالثواني. قم بتعيينه ألى 0 لتعطيل ميزة أنشاء الفصول ألوهمية. تغيير هذا ألاعداد لن يؤثر على الفصول الوهمية الذي تم أنشائها مسبقاً.", - "HeaderDummyChapter": "صور الفصل", + "LabelVppTonemappingContrastHelp": "تطبيق زيادة التباين في تحويل النطاق اللوني VPP. القيمة الموصى بها هي 1.", + "LabelVppTonemappingContrast": "زيادة تباين تحويل النطاق اللوني VPP", + "LabelVppTonemappingBrightnessHelp": "تطبيق زيادة السطوع في تحويل النطاق اللوني VPP. القيمة الموصى بها هي 16.", + "LabelVppTonemappingBrightness": "زيادة سطوع تحويل النطاق اللوني VPP", + "ScreenResolution": "دقة الشاشة", + "RememberSubtitleSelectionsHelp": "حاول تعيين مسار الترجمة ليكون الأقرب تطابقًا مع الفيديو الأخير.", + "RememberSubtitleSelections": "تعيين مسار الترجمة بناءً على العنصر السابق", + "RememberAudioSelectionsHelp": "حاول تعيين مسار الصوت ليكون الأقرب تطابقًا مع الفيديو الأخير.", + "RememberAudioSelections": "تعيين مسار الصوت بناءً على العنصر السابق", + "LabelMaxVideoResolution": "الحد الأقصى المسموح به لدقة تحويل ترميز الفيديو", + "OptionDateShowAdded": "تاريخ إضافة المسلسل", + "OptionDateEpisodeAdded": "تاريخ إضافة الحلقة", + "IgnoreDtsHelp": "قد يؤدي تعطيل هذا الخيار إلى حل بعض المشكلات، مثل فقدان الصوت في القنوات التي تستخدم بثًا منفصلًا للصوت والفيديو.", + "IgnoreDts": "تجاهل DTS (طابع فك الترميز الزمني)", + "EnableCardLayout": "عرض التخطيط كبطاقات", + "MessageNoItemsAvailable": "لا توجد عناصر متاحة حاليًا.", + "MessageNoFavoritesAvailable": "لا توجد مفضلات متاحة حاليًا.", + "Unreleased": "لم يُصدر بعد", + "MessageRenameMediaFolder": "إعادة تسمية مكتبة المحتوى سيؤدي إلى فقدان جميع البيانات الوصفية، تابع بحذر.", + "DownloadAll": "تنزيل الكل", + "LabelChapterImageResolutionHelp": "دقة صور الفصول المستخرجة. لن يؤثر تغيير هذا على الفصول الحالية.", + "LabelDummyChapterDurationHelp": "الفاصل بين الفصول الوهمية بالثواني. اضبطه على 0 لتعطيل إنشاء الفصول الوهمية. لن يؤثر تغيير هذا على الفصول الوهمية الحالية.", + "HeaderDummyChapter": "صور الفصول", "HeaderPerformance": "الأداء", - "HeaderRecordingMetadataSaving": "تسجيل البيانات الوصفية", - "LabelStereoDownmixAlgorithm": "خوارزمية داونميكس الستيريو", - "LabelDummyChapterDuration": "الفترة", + "HeaderRecordingMetadataSaving": "بيانات التسجيل الوصفية", + "LabelStereoDownmixAlgorithm": "خوارزمية المزج الستيريو", + "LabelDummyChapterDuration": "الفاصل الزمني", "LabelChapterImageResolution": "الدقة", - "LabelEnableAudioVbr": "فعل تشفير VBR الصوتي", + "LabelEnableAudioVbr": "تفعيل ترميز الصوت VBR", "AllowCollectionManagement": "السماح لهذا المستخدم بإدارة المجموعات", "LabelEnableLUFSScan": "تفعيل فحص LUFS", - "LabelEnableLUFSScanHelp": "يمكن للعملاء توسيط ألصوت للحصول على مستوى صوت متساوي عبر المقاطع الصوتية. سيجعل هذا فحص المكتبة أطول ويستهلك مزيدًا من الموارد.", - "LabelMediaDetails": "تفاصيل الميديا", - "LogLevel.Warning": "تحذير", - "LogLevel.Information": "ألمعلومات", - "BackdropScreensaver": "خلفية شاشة التوقف", - "LabelDate": "تاريخ", - "LabelDeveloper": "مُطور", - "LabelBackdropScreensaverIntervalHelp": "ألوقت بالثواني بين الخلفيات المختلفة عند أستخدام خلفية شاشة التوقف.", - "LogLevel.Error": "خطأ", - "LogoScreensaver": "علامة حامية الشاشة", - "MenuClose": "أغلق القائمة", - "LabelSystem": "ألنظام", + "LabelEnableLUFSScanHelp": "يمكن للعملاء تطبيع تشغيل الصوت للحصول على مستوى صوت متساوٍ عبر المسارات. هذا سيجعل فحص المكتبة أطول ويستهلك موارد أكثر.", + "LabelMediaDetails": "تفاصيل المحتوى", + "LogLevel.Warning": "التحذير", + "LogLevel.Information": "المعلومات", + "BackdropScreensaver": "شاشة توقف الخلفيات", + "LabelDate": "التاريخ", + "LabelDeveloper": "المطوّر", + "LabelBackdropScreensaverIntervalHelp": "الوقت بالثواني بين الخلفيات المختلفة عند استخدام شاشة توقف الخلفيات.", + "LogLevel.Error": "الخطأ", + "LogoScreensaver": "شاشة توقف الشعار", + "MenuClose": "إغلاق القائمة", + "LabelSystem": "النظام", "Unknown": "غير معروف", - "LogLevel.Critical": "خطير", - "LogLevel.None": "لا شيئ", - "MenuOpen": "أفتح القائمة", - "AllowSegmentDeletion": "ألغاء القسم", - "AllowSegmentDeletionHelp": "ألغي الأقسام القديمة بعد أن يتم تحميلها من قبل العميل. هذا يساهم بمنع أن يتم تخزين الملف ألذي تم أعادة ترميزه بالكامل. قم بأيقاف هذا الأعداد في حال واجهت مشاكل بتشغيل الصوت أو الفيديو.", - "LabelThrottleDelaySeconds": "أكبح بعد", - "LabelThrottleDelaySecondsHelp": "ألزمن بالثواني الذي سيتم بعده كبح أعادة الترميز. يجب أن يكون الزمن طويلاً بكفاية ليحافظ العميل على مخزون صحي. يجب أن يكون كفح أعادة الترميز مفعلاً ليعمل هذا ألاعاداد.", - "LabelSegmentKeepSeconds": "الممدة للأحتفاظ على الشرائح", - "LabelEnableAudioVbrHelp": "معدل البِت المتغير ينتج على جودة أفضل مقارنة بمعدل البت المتوسط، ولكن في بعض الحالات النادرة قد يسبب مشاكل في التخزين المؤقت والتوافق.", - "LabelSegmentKeepSecondsHelp": "الزمن بالثواني الذي يجب الاحتفاظ به للشرائح بعد أن يتم تحميلها من قبل العميل. يعمل هذا ألأعداد فقط إذا كان حذف الشرائح مفعلًا.", - "AiTranslated": "مترجمة من قبل ذكاء اسطناعي", - "SelectAudioNormalizationHelp": "كسب الالبوم-تعديل مستوى صوت كل مسار ليعملون بنفس المستوى- كسب الالبوم- تعديل مستوى صوت كل المسارات في ألبوم واحد فقط مع ابقاء على النطاق الديناميكي للألبوم. التحويل بين (إيقاف) والخيارات الاخرى يتطلب إعادة تشغيل playback الحالي.", - "ButtonEditUser": "تعديل مستخدم", - "AllowSubtitleManagement": "اسمح لهذا المستخدم تعديل الترجمات", - "HeaderDeleteSeries": "حذف مسلسل", + "LogLevel.Critical": "الحرج", + "LogLevel.None": "لا شيء", + "MenuOpen": "فتح القائمة", + "AllowSegmentDeletion": "حذف المقاطع", + "AllowSegmentDeletionHelp": "حذف المقاطع القديمة بعد أن يحمّلها العميل. يمنع ذلك الحاجة إلى تخزين ملف تحويل الترميز كاملًا على القرص. عطّل هذا الخيار إذا واجهت مشكلات في التشغيل.", + "LabelThrottleDelaySeconds": "بدء التقييد بعد", + "LabelThrottleDelaySecondsHelp": "الوقت بالثواني قبل تقييد محوّل الترميز. يجب أن يكون كافيًا ليستطيع العميل الحفاظ على مخزن مؤقت مناسب. يعمل هذا فقط عند تفعيل التقييد.", + "LabelSegmentKeepSeconds": "مدة الاحتفاظ بالمقاطع", + "LabelEnableAudioVbrHelp": "يوفر معدل البت المتغير جودة أفضل مقارنة بمتوسط معدل البت، لكنه قد يسبب التخزين المؤقت أو مشكلات توافق في حالات نادرة.", + "LabelSegmentKeepSecondsHelp": "المدة بالثواني للاحتفاظ بالمقاطع بعد تنزيلها بواسطة العميل. يعمل هذا فقط عند تفعيل حذف المقاطع.", + "AiTranslated": "مترجم بالذكاء الاصطناعي", + "SelectAudioNormalizationHelp": "كسب المسار يضبط مستوى صوت كل مسار ليعمل بالصوت نفسه. كسب الألبوم يضبط مستوى صوت مسارات الألبوم فقط مع الحفاظ على مداه الديناميكي. يتطلب التبديل بين \"إيقاف\" والخيارات الأخرى إعادة تشغيل التشغيل الحالي.", + "ButtonEditUser": "تعديل المستخدم", + "AllowSubtitleManagement": "السماح لهذا المستخدم بتعديل الترجمة", + "HeaderDeleteSeries": "حذف المسلسل", "DeleteEntireSeries": "حذف {0} حلقات", "DeleteSeries": "حذف المسلسل", "HeaderEpisodesStatus": "حالة الحلقات", "LabelSelectAudioNormalization": "تطبيع الصوت", "DeleteEpisode": "حذف الحلقة", - "EnableLibrary": "إتاحة المكتبة", + "EnableLibrary": "تفعيل المكتبة", "LabelSyncPlayNoGroups": "لا توجد مجموعات متاحة", "DeleteName": "حذف {0}", - "LabelServerVersion": "نسخة الخادم", - "LabelWebVersion": "نسخة الويب", - "LabelBuildVersion": "نسخة الإصدار", + "LabelServerVersion": "إصدار الخادم", + "LabelWebVersion": "إصدار الويب", + "LabelBuildVersion": "إصدار البناء", "SavePassword": "حفظ كلمة المرور", "SubtitleBlack": "أسود", "SubtitleWhite": "أبيض", "UserMenu": "قائمة المستخدم", - "LabelScanBehavior": "سلوك المسح", - "PriorityHigh": "عالي", - "PriorityBelowNormal": "تحت الطبيعي", - "PriorityNormal": "طبيعي", - "PriorityAboveNormal": "فوق الطبيعي", - "LabelProcessPriority": "أولوية المعالجة", - "PriorityIdle": "خامل", - "PlaybackError.PLAYER_ERROR": "التشغيل فشل لخطأ في مشغل الوسائط.", - "Studio": "الأستيديو", + "LabelScanBehavior": "سلوك الفحص", + "PriorityHigh": "عالية", + "PriorityBelowNormal": "أقل من العادية", + "PriorityNormal": "عادية", + "PriorityAboveNormal": "فوق العادية", + "LabelProcessPriority": "أولوية العملية", + "PriorityIdle": "خاملة", + "PlaybackError.PLAYER_ERROR": "فشل التشغيل بسبب خطأ فادح في المشغل.", + "Studio": "الاستوديو", "SubtitleYellow": "أصفر", - "PlaybackError.NETWORK_ERROR": "التشغيل فشل لخطأ في الشبكة.", - "UnknownError": "حدث خطأ غير معلوم.", - "Select": "اختيار", + "PlaybackError.NETWORK_ERROR": "فشل التشغيل بسبب خطأ في الشبكة.", + "UnknownError": "حدث خطأ غير معروف.", + "Select": "تحديد", "SubtitleRed": "أحمر", - "PasswordRequiredForAdmin": "يجب توفر كلمة مرور لحسابات المسؤول.", - "SecondarySubtitles": "الترجمات الثانوية", - "PlaybackError.NO_MEDIA_ERROR": "غير قايل لإيجاد مصدر موثق للوسائط لللتشغيل.", - "PlaybackError.SERVER_ERROR": "التشغيل فشل لخطأ في الخادم.", - "PlaybackError.MEDIA_NOT_SUPPORTED": "التشغيل فشل لأن الوسائط غير مدعومة من هذا العميل.", - "PlaybackError.NotAllowed": "تشغيل هذه الوسائط غير مسموح.", + "PasswordRequiredForAdmin": "كلمة المرور مطلوبة لحسابات الإدارة.", + "SecondarySubtitles": "ترجمات ثانوية", + "PlaybackError.NO_MEDIA_ERROR": "تعذر العثور على مصدر وسائط صالح للتشغيل.", + "PlaybackError.SERVER_ERROR": "فشل التشغيل بسبب خطأ في الخادم.", + "PlaybackError.MEDIA_NOT_SUPPORTED": "فشل التشغيل لأن المحتوى غير مدعوم من قبل هذا العميل.", + "PlaybackError.NotAllowed": "غير مسموح بتشغيل هذا المحتوى.", "LabelJpegQuality": "جودة JPEG", "SubtitleGreen": "أخضر", - "SearchResultsEmpty": "نأسف! لا يوجد نتاج لـ \"{0}\"", + "SearchResultsEmpty": "عذراً! لم يتم العثور على نتائج لـ \"{0}\"", "SubtitleLightGray": "رمادي فاتح", "Short": "قصير", "SubtitleGray": "رمادي", "SubtitleBlue": "أزرق", - "AllowContentWithTagsHelp": "اعرض الوسائط التي تحتوي على الأقل واحدة من الاصناف المحددة.", - "AirPlay": "ايربلاي", + "AllowContentWithTagsHelp": "اعرض فقط المحتوى الذي يحتوي على واحد على الأقل من الوسوم المحددة.", + "AirPlay": "عرض تشغيل", "Author": "المؤلف", "Alternate": "بديل", "AlternateDVD": "DVD بديل", - "AutoSubtitleStylingHelp": "سيقوم هذا الوضع بالتبديل تلقائياً بين آليات تصميم الترجمة الأصلية والمخصصة بناءً على نوع جهازك.", - "Anime": "الأنيمي", + "AutoSubtitleStylingHelp": "سيبدّل هذا الوضع تلقائيًا بين آليات تنسيق الترجمة الأصلية والمخصصة حسب نوع جهازك.", + "Anime": "أنمي", "DisableVbrAudioEncodingHelp": "منع الخادم من ترميز الصوت باستخدام VBR لهذا العميل.", - "EditLyrics": "تحرير كلمات الأغاني", - "EnableDts": "تمكين DTS (DCA)", - "EnableDtsHelp": "لا تقم بالتمكين إلا إذا كان جهازك يدعم DTS أو كان متصلاً بجهاز استقبال صوتي متوافق، وإلا فقد يتسبب ذلك في فشل التشغيل.", - "HeaderGuestCast": "النجوم الضيوف", - "EnableHi10pHelp": "تمكين لتجنب تحويل ترميز مقاطع الفيديو H.264 10 بت. قم بتعطيل هذا الخيار إذا كان الفيديو يعرض إطارات فارغة.", - "Colorist": "الملون", - "ChannelResolutionHD": "HD", - "ChannelResolutionSD": "SD", - "AndOtherArtists": "{0} و {1} فنانين آخرين.", - "BlockContentWithTagsHelp": "إخفاء الوسائط بعلامة واحدة على الأقل من العلامات المحددة.", - "CoverArtist": "غلاف الفنان", - "ChannelResolutionUHD4K": "UHD (4K)", - "DlnaMovedMessage": "تم نقل وظيفة DLNA إلى مكون إضافي.", - "ConfirmDeleteSeries": "سيؤدي حذف هذه السلسلة إلى حذف جميع الحلقات {0} من نظام الملفات ومكتبة الوسائط الخاصة بك. هل أنت متأكد من رغبتك في المتابعة؟", - "EnableHi10p": "تمكين ملف تعريف H.264 عالي 10", - "HeaderAudioAdvanced": "صوت متقدم", - "ConfirmDeleteLyrics": "سيؤدي حذف هذه الكلمات إلى حذفها من نظام الملفات ومكتبة الوسائط الخاصة بك. هل أنت متأكد من رغبتك في المتابعة؟", + "EditLyrics": "تعديل الكلمات", + "EnableDts": "تفعيل DTS (DCA)", + "EnableDtsHelp": "فعّله فقط إذا كان جهازك يدعم DTS أو متصلًا بمستقبل صوت متوافق، وإلا فقد يفشل التشغيل.", + "HeaderGuestCast": "ضيوف الشرف", + "EnableHi10pHelp": "فعّله لتجنب تحويل ترميز فيديوهات H.264 بعمق 10 بت. عطّل هذا الخيار إذا ظهرت إطارات فارغة في الفيديو.", + "Colorist": "مصحح الألوان", + "ChannelResolutionHD": "قناة الدقة HD", + "ChannelResolutionSD": "قناة الدقة SD", + "AndOtherArtists": "{0} و{1} فنانين آخرين.", + "BlockContentWithTagsHelp": "إخفاء المحتوى الذي يحتوي على واحد على الأقل من الوسوم المحددة.", + "CoverArtist": "فنان الغلاف", + "ChannelResolutionUHD4K": "قناة الدقة UHD4", + "DlnaMovedMessage": "انتقلت وظيفة DLNA إلى ملحق.", + "ConfirmDeleteSeries": "سيؤدي حذف هذا المسلسل إلى حذف كل حلقاته البالغ عددها {0} من نظام الملفات ومن مكتبة المحتوى. هل تريد المتابعة؟", + "EnableHi10p": "تفعيل ملف تعريف H.264 High 10", + "HeaderAudioAdvanced": "إعدادات الصوت المتقدمة", + "ConfirmDeleteLyrics": "سيؤدي حذف هذه الكلمات إلى حذفها من نظام الملفات ومن مكتبة المحتوى. هل تريد المتابعة؟", "Custom": "مخصص", "Editor": "المحرر", - "CustomSubtitleStylingHelp": "سيعمل تصميم الترجمة على معظم الأجهزة، ولكنه يأتي مع تكلفة أداء إضافية.", + "CustomSubtitleStylingHelp": "سيعمل تنسيق الترجمة على معظم الأجهزة، لكنه قد يضيف عبئًا على الأداء.", "DateModified": "تاريخ التعديل", - "DeleteLyrics": "حذف كلمات الأغاني", - "EnableSmoothScroll": "تمكين التمرير السلس", - "EnableTrueHd": "تمكين TrueHD", - "EnableLibraryHelp": "سيؤدي تعطيل المكتبة إلى إخفائها من جميع طرق عرض المستخدم.", - "ErrorDeletingLyrics": "حدث خطأ في حذف كلمات الأغاني من الخادم. يرجى التحقق من أن Jellyfin لديه حق الوصول للكتابة إلى مجلد الوسائط وحاول مرة أخرى.", - "HeaderAllRecordings": "جميع التسجيلات", - "GoHome": "العودة إلى الرئيسية", - "HeaderConfirmRepositoryInstallation": "تأكيد تثبيت مستودع المكونات الإضافية", - "HeaderDeleteLyrics": "حذف كلمات الأغاني", - "HeaderEditPlaylist": "تحرير قائمة التشغيل", - "GridView": "عرض الشبكة", - "AllowStreamSharingHelp": "السماح ل Jellyfin بتكرار دفق mpegts من الموالف ومشاركة هذا الدفق المكرر مع عملائه. يكون هذا مفيدًا عندما يكون للموالف حد إجمالي لعدد الدفق ولكن قد يتسبب أيضًا في حدوث مشكلات في التشغيل.", - "AllowFmp4TranscodingContainerHelp": "اسمح بحاوية تحويل الترميز fMP4 لهذا الموالف لتمكين محتويات HEVC و HDR. ليست كل الموالفات متوافقة مع هذه الحاوية. قم بتعطيل هذا إذا واجهت مشاكل في التشغيل.", - "AlwaysRemuxFlacAudioFilesHelp": "إذا كانت لديك ملفات يرفض متصفحك تشغيلها أو إذا كان المتصفح يرفض تشغيلها أو إذا كان يحسب الطوابع الزمنية بشكل غير دقيق، فقم بتمكين هذا كحل بديل.", - "AlwaysRemuxMp3AudioFilesHelp": "إذا كانت لديك ملفات يقوم متصفحك بحساب الطوابع الزمنية بشكل غير دقيق، فقم بتمكين هذا كحل بديل.", - "ChannelResolutionFullHD": "Full HD", - "FallbackMaxStreamingBitrateHelp": "يُستخدم الحد الأقصى لمعدل بت البث الأقصى كمعدل بت احتياطي عندما يتعذر على ffprobe تحديد معدل بت الدفق المصدر. يساعد هذا في منع العملاء من طلب معدل بت مرتفع للغاية لتحويل الترميز، مما قد يتسبب في فشل المشغل وزيادة التحميل على المشفر.", + "DeleteLyrics": "حذف الكلمات", + "EnableSmoothScroll": "تفعيل التمرير السلس", + "EnableTrueHd": "تفعيل TrueHD", + "EnableLibraryHelp": "سيؤدي تعطيل المكتبة إلى إخفائها من كل عروض المستخدمين.", + "ErrorDeletingLyrics": "حدث خطأ أثناء حذف الكلمات من الخادم. تأكد من أن Jellyfin يملك صلاحية الكتابة في مجلد المحتوى ثم حاول مرة أخرى.", + "HeaderAllRecordings": "كل التسجيلات", + "GoHome": "الانتقال إلى الرئيسية", + "HeaderConfirmRepositoryInstallation": "تأكيد تثبيت المستودع", + "HeaderDeleteLyrics": "حذف الكلمات", + "HeaderEditPlaylist": "تعديل قائمة التشغيل", + "GridView": "عرض شبكي", + "AllowStreamSharingHelp": "السماح لـ Jellyfin بنسخ بث mpegts من الموالف ومشاركة النسخة مع العملاء. يفيد هذا عندما يكون لدى الموالف حد لعدد عمليات البث، لكنه قد يسبب مشكلات في التشغيل.", + "AllowFmp4TranscodingContainerHelp": "السماح باستخدام حاوية تحويل الترميز fMP4 لهذا الموالف لتفعيل محتوى HEVC وHDR. ليست كل الموالفات متوافقة مع هذه الحاوية. عطّل هذا الخيار إذا واجهت مشكلات في التشغيل.", + "AlwaysRemuxFlacAudioFilesHelp": "فعّل هذا الخيار كحل بديل إذا كانت لديك ملفات يرفض المتصفح تشغيلها أو يحسب طوابعها الزمنية بشكل غير دقيق.", + "AlwaysRemuxMp3AudioFilesHelp": "فعّل هذا الخيار كحل بديل إذا كانت لديك ملفات يحسب المتصفح طوابعها الزمنية بشكل غير دقيق.", + "ChannelResolutionFullHD": "قناة الدقة HD", + "FallbackMaxStreamingBitrateHelp": "يُستخدم الحد الأقصى لمعدل بث التشغيل كقيمة احتياطية عندما يتعذر على ffprobe تحديد معدل بث المصدر. يساعد ذلك في منع العملاء من طلب معدل تحويل مرتفع جدًا قد يسبب فشل المشغّل ويضغط على المرمّز.", "HeaderAddLyrics": "إضافة كلمات", - "AlwaysBurnInSubtitleWhenTranscoding": "انسخ الترجمة دائماً عند تحويل الترميز", - "AlwaysBurnInSubtitleWhenTranscodingHelp": "نسخ جميع العناوين الفرعية عند تشغيل تحويل الترميز. يضمن ذلك مزامنة الترجمة بعد تحويل الترميز على حساب انخفاض سرعة التحويل.", - "ChannelResolutionSDPAL": "SD (PAL)", - "EnableTrueHdHelp": "لا تفعّلها إلا إذا كان جهازك يدعم TrueHD أو كان متصلاً بجهاز استقبال صوتي متوافق، وإلا فقد يتسبب ذلك في فشل التشغيل.", - "HeaderPageNotFound": "لم يتم العثور على الصفحة", - "HeaderNextEpisode": "حلقة جديدة", + "AlwaysBurnInSubtitleWhenTranscoding": "حرق الترجمة دائمًا عند تحويل الترميز", + "AlwaysBurnInSubtitleWhenTranscodingHelp": "تضمين كل الترجمات داخل الفيديو عند بدء تحويل الترميز. يضمن ذلك مزامنة الترجمة بعد التحويل، لكنه يقلل سرعة تحويل الترميز.", + "ChannelResolutionSDPAL": "قناة الدقة SDPAL", + "EnableTrueHdHelp": "فعّله فقط إذا كان جهازك يدعم TrueHD أو كان متصلًا بمستقبل صوت متوافق، وإلا فقد يفشل التشغيل.", + "HeaderPageNotFound": "الصفحة غير موجودة", + "HeaderNextEpisode": "الحلقة التالية", "LabelDuration": "المدة", - "LabelDisableVbrAudioEncoding": "تعطيل VBR لترميز الصوت", + "LabelDisableVbrAudioEncoding": "تعطيل ترميز الصوت VBR", "HeaderNextVideo": "الفيديو التالي", "LabelDevice": "الجهاز", - "LabelEnablePlugin": "تفعيل البرنامج الإضافي", - "CopyLogSuccess": "محتويات السجل نُسخت بنجاح.", - "Illustrator": "الرسام", + "LabelEnablePlugin": "تفعيل الملحق", + "CopyLogSuccess": "تم نسخ محتوى السجل بنجاح.", + "Illustrator": "الرسّام", "Creator": "المنشئ", - "HeaderUploadLyrics": "رفع كلمات المحتوى", - "DeleteServerConfirmation": "هل أنت متاكد انك تريد حذف الخادم؟", - "HeaderVideoAdvanced": "فيديو متقدم", + "HeaderUploadLyrics": "رفع كلمات", + "DeleteServerConfirmation": "هل تريد بالتأكيد حذف هذا الخادم؟", + "HeaderVideoAdvanced": "إعدادات الفيديو المتقدمة", "HeaderNewPlaylist": "قائمة تشغيل جديدة", - "HeaderNoLyrics": "لم يتم ايجاد كلمات محتوى", - "LabelSelectPreferredTranscodeVideoAudioCodec": "برنامج ترميز الصوت المفضل في تشغيل الفيديو", - "LabelBackdropScreensaverInterval": "فاصل شاشة التوقف الخلفية", - "LabelAllowFmp4TranscodingContainer": "السماح بحاوية تحويل الترميز بـfMP4", - "LabelAudioTagSettings": "إعدادات العلامات الصوتية", - "LabelCustomTagDelimiters": "فاصل العلامة المخصصة", + "HeaderNoLyrics": "لم يتم العثور على كلمات", + "LabelSelectPreferredTranscodeVideoAudioCodec": "ترميز الصوت المفضّل عند تحويل ترميز تشغيل الفيديو", + "LabelBackdropScreensaverInterval": "الفاصل الزمني لشاشة توقف الخلفيات", + "LabelAllowFmp4TranscodingContainer": "السماح بحاوية تحويل الترميز fMP4", + "LabelAudioTagSettings": "إعدادات وسم الصوت", + "LabelCustomTagDelimiters": "فاصل وسوم مخصص", "LabelAlbumGain": "كسب الألبوم", - "Inker": "الحبر", - "LabelAllowContentWithTags": "السماح بالعناصر مع العلامات", - "DisplayLoadError": "خطأ حصل اثناء تحميل بيانات إعدادات العرض.", - "HeaderPreviewLyrics": "استعراض كلمات المحتوى", - "LabelAlwaysRemuxMp3AudioFiles": "السماح دائماً بعمل remux لملفات MP3 الصوتية", - "LabelAlwaysRemuxFlacAudioFiles": "السماح دائماً بعمل remux لملفات FLAC الصوتية", + "Inker": "المحبّر", + "LabelAllowContentWithTags": "السماح بالمحتوى ذي الوسوم", + "DisplayLoadError": "حدث خطأ أثناء تحميل بيانات إعدادات العرض.", + "HeaderPreviewLyrics": "معاينة الكلمات", + "LabelAlwaysRemuxMp3AudioFiles": "إعادة تغليف ملفات MP3 دائمًا", + "LabelAlwaysRemuxFlacAudioFiles": "إعادة تغليف ملفات FLAC دائمًا", "LabelAllowStreamSharing": "السماح بمشاركة البث", - "HeaderLyricDownloads": "تحميلات كلمات المحتوى", - "HeaderMediaSegmentActions": "إجراءات قطاع الوسائط", + "HeaderLyricDownloads": "تنزيلات الكلمات", + "HeaderMediaSegmentActions": "إجراءات مقاطع المحتوى", "Retry": "إعادة المحاولة", - "LabelIsSynced": "تم التزامن", - "LabelNoChangelog": "لا يوجد تغييرات لهذا الإصدار.", - "LabelLyricDownloaders": "برامج تنزيل الكلمات", - "LabelNotInstalled": "غير مثبت", + "LabelIsSynced": "متزامن", + "LabelNoChangelog": "لا يوجد سجل تغييرات مقدم لهذا الإصدار.", + "LabelLyricDownloaders": "منزلو الكلمات", + "LabelNotInstalled": "غير مثبّت", "LabelLevel": "المستوى", - "LabelDropLyricsHere": "ضع الكلمات هنا, أو إضغط على تفصح.", - "LabelInstalled": "مثبت", + "LabelDropLyricsHere": "أسقط ملف الكلمات هنا أو انقر للاستعراض.", + "LabelInstalled": "مثبّت", "LabelQsvDevice": "جهاز QSV", - "CustomSplashScreenSize": "يجب أن تكون الصور المخصصة بنسبة عرض إلى ارتفاع 16 × 9 بحجم لا يقل عن 1920 × 1080.", - "ImageUploadFailed": "فشل تحميل الصورة", - "LabelDelimiterWhitelistHelp": "العناصر التي سيتم استبعادها من تقسيم العلامات. عنصر واحد لكل سطر.", - "LabelFallbackMaxStreamingBitrate": "معدل البت الأقصى للبث الاحتياطي (ميغابت في الثانية)", - "LabelMediaSegmentProviders": "مزودو مقاطع الوسائط", - "LabelMediaSegmentsType": "{0} مقطع/مقاطع", - "LabelParallelImageEncodingLimitHelp": "الحد الأقصى لعدد ترميزات الصور المسموح بتشغيلها بالتوازي. سيؤدي ترك هذا فارغًا إلى اختيار حد يستند إلى عدد النواة الأساسية لأنظمتك.", - "LabelQsvDeviceHelp": "حدد الجهاز الخاص ب Intel QSV على نظام متعدد وحدات معالجة الرسومات. في نظام Linux، هذا هو عقدة التصيير، على سبيل المثال، /dev/dri/renderD128. في نظام ويندوز، هذا هو فهرس الجهاز بدءًا من 0. اتركه فارغًا إلا إذا كنت تعرف ما تفعله.", - "LabelScreensaverTime": "مهلة شاشة التوقف", - "LabelSaveTrickplayLocally": "حفظ صور المعاينة السريعة بجوار الوسائط", + "CustomSplashScreenSize": "يجب أن تكون الصور المخصصة بنسبة عرض إلى ارتفاع 16x9 وبحد أدنى 1920x1080.", + "ImageUploadFailed": "فشل رفع الصورة", + "LabelDelimiterWhitelistHelp": "العناصر التي يجب استبعادها من تقسيم الوسوم. عنصر واحد لكل سطر.", + "LabelFallbackMaxStreamingBitrate": "الحد الأقصى الاحتياطي لمعدل البت (Mbps)", + "LabelMediaSegmentProviders": "مزوّدو مقاطع المحتوى", + "LabelMediaSegmentsType": "مقاطع {0}", + "LabelParallelImageEncodingLimitHelp": "الحد الأقصى لعدد عمليات تشفير الصور المسموح بتشغيلها بالتوازي. تركه فارغًا سيختار حدًا بناءً على عدد الأنوية في نظامك.", + "LabelQsvDeviceHelp": "حدّد الجهاز لـ Intel QSV على نظام متعدد وحدات معالجة الرسومات. في لينكس، هذه هي عقدة العرض، مثل /dev/dri/renderD128. وفي ويندوز، هذا هو فهرس الجهاز بدءًا من 0. اترك فارغًا ما لم تكن تعرف ما تفعل.", + "LabelScreensaverTime": "وقت شاشة التوقف", + "LabelSaveTrickplayLocally": "حفظ صور معاينات التنقل (Trickplay) بجانب المحتوى", "PlaylistError.CreateFailed": "خطأ في إنشاء قائمة التشغيل", - "PlaylistError.UpdateFailed": "خطأ أثناء تحديث قائمة التشغيل", - "LabelScreensaverTimeHelp": "مقدار الوقت بالثواني من عدم النشاط المطلوب لبدء تشغيل شاشة التوقف.", - "LogLevel.Debug": "تنقيح", - "LibraryScanFanoutConcurrencyHelp": "الحد الأقصى لعدد المهام المتوازية أثناء عمليات مسح المكتبة. سيؤدي ترك هذا الرقم فارغاً إلى اختيار حد استناداً إلى عدد النواة في أنظمتك. تحذير: قد يتسبب تعيين هذا الرقم عالٍ جداً في حدوث مشاكل مع أنظمة ملفات الشبكة؛ إذا واجهت مشاكل قم بتخفيض هذا الرقم.", - "LimitSegmentLengthHelp": "قد يساعد تمكين هذا الخيار في منع تعليق مشغل HLS أثناء البحث على أجهزة معينة، مثل أجهزة تلفاز webOS.", - "PlaybackError.ASS_RENDER_ERROR": "تمت مواجهة خطأ في عارض الترجمة ASS/SSA.", + "PlaylistError.UpdateFailed": "خطأ في تحديث قائمة التشغيل", + "LabelScreensaverTimeHelp": "مدة عدم النشاط بالثواني المطلوبة لبدء شاشة التوقف.", + "LogLevel.Debug": "التصحيح", + "LibraryScanFanoutConcurrencyHelp": "الحد الأقصى لعدد المهام المتوازية أثناء فحص المكتبة. إذا تُرك فارغًا فسيُحدد الحد حسب عدد أنوية نظامك. تحذير: قد يؤدي تعيين رقم مرتفع جدًا إلى مشكلات مع أنظمة ملفات الشبكة؛ إذا واجهت مشكلات فاخفض هذا الرقم.", + "LimitSegmentLengthHelp": "قد يساعد تفعيل هذا الخيار في منع مشغّل HLS من التعليق أثناء التنقل في بعض الأجهزة، مثل تلفزيونات webOS.", + "PlaybackError.ASS_RENDER_ERROR": "حدث خطأ في عارض ترجمات ASS/SSA.", "LimitSupportedVideoResolution": "تحديد الحد الأقصى لدقة الفيديو المدعومة", - "SelectPreferredTranscodeVideoCodecHelp": "حدد برنامج ترميز الفيديو المفضل لتحويل الترميز إليه. إذا كان برنامج الترميز المفضل غير مدعوم، سيستخدم الخادم أفضل برنامج ترميز متاح تالياً.", + "SelectPreferredTranscodeVideoCodecHelp": "اختر ترميز الفيديو المفضل لتحويل الترميز إليه. إذا لم يكن الترميز المفضل مدعومًا، فسيستخدم الخادم الترميز الأفضل التالي المتاح.", "ListView": "عرض القائمة", - "NativeSubtitleStylingHelp": "لن يعمل تصميم الترجمة على بعض الأجهزة. ومع ذلك، فإنه لا يترافق معه أي عبء على الأداء.", + "NativeSubtitleStylingHelp": "تنسيق الترجمة الأصلي لن يعمل على بعض الأجهزة. ومع ذلك، لا يضيف أي عبء على الأداء.", "PasswordMissingSaveError": "لا يمكن أن تكون كلمة المرور الجديدة فارغة.", - "PlaylistPublicDescription": "السماح بعرض قائمة التشغيل هذه من قبل أي مستخدم قام بتسجيل الدخول.", - "PleaseConfirmRepositoryInstallation": "يُرجى النقر فوق موافق لتأكيد أنك قرأت ما ورد أعلاه وترغب في متابعة تثبيت المكونات الإضافات.", - "PluginLoadConfigError": "حدث خطأ أثناء الحصول على صفحات تكوين المكون الإضافي.", + "PlaylistPublicDescription": "السماح لأي مستخدم مسجل الدخول بعرض قائمة التشغيل هذه.", + "PleaseConfirmRepositoryInstallation": "يرجى النقر فوق موافق لتأكيد أنك قد قرأت ما سبق وترغب في المضي قدمًا في تثبيت مستودع الملحقات.", + "PluginLoadConfigError": "حدث خطأ أثناء الحصول على صفحات إعداد الملحق.", "PreferEmbeddedExtrasTitlesOverFileNames": "تفضيل العناوين المضمنة على أسماء الملفات للإضافات", - "PreferEmbeddedExtrasTitlesOverFileNamesHelp": "غالبًا ما يكون للإضافات نفس الاسم المضمن مثل الأصل، تحقق من ذلك لاستخدام العناوين المضمنة لها على أي حال.", - "PreviewLyrics": "معاينة كلمات الأغاني", - "ReadInputAtNativeFramerate": "قراءة المدخلات بمعدل الإطارات الأصلي", - "RenderPgsSubtitleHelp": "تحديد ما إذا كان يجب على العميل عرض ترجمات PGS بدلاً من استخدام الترجمات المنسوخة في الترجمة. يمكن أن يؤدي ذلك إلى تجنب تحويل الترميز من جانب الخادم مقابل أداء العرض من جانب العميل.", - "SaveRecordingNFOHelp": "حفظ البيانات الوصفية من مزود قوائم EPG إلى جانب الوسائط.", - "SaveLyricsIntoMediaFolders": "حفظ كلمات الأغاني في مجلدات الوسائط", - "SaveLyricsIntoMediaFoldersHelp": "سيسمح تخزين كلمات الأغاني بجوار الملفات الصوتية بإدارتها بسهولة أكبر.", - "SaveRecordingNFO": "حفظ البيانات الوصفية لتسجيل EPG في ملف NFO", - "NonBlockingScan": "عدم الحجب - التوليد في قائمة الانتظار، ثم الإرجاع", - "LabelScanBehaviorHelp": "السلوك الافتراضي هو عدم الحجب، والذي سيضيف الوسائط إلى المكتبة قبل أن يتم إنشاء صور المعاينة السريعة. سيضمن الحظر إنشاء صور المعاينة السريعة قبل إضافة الوسائط إلى المكتبة، ولكنه سيجعل عمليات المسح أطول بكثير.", - "LabelProcessPriorityHelp": "سيحدد ضبط هذا الأمر على مستوى أقل أو أعلى كيفية إعطاء وحدة المعالجة المركزية الأولوية لعملية توليد صور المعاينة السريعة ffmpeg بالنسبة للعمليات الأخرى. إذا لاحظتَ تباطؤًا أثناء توليد صور المعاينة السريعة ولكنك لا تريد إيقاف توليدها بالكامل، حاول خفض هذا الأمر وكذلك عدد خيوط وحدة المعالجة المركزية.", - "LabelImageIntervalHelp": "الفاصل الزمني (مللي ثانية) بين كل صور معاينة سريعة جديدة.", - "LabelWidthResolutionsHelp": "قائمة مفصولة بفاصلة للعرض (بكسل) التي سيتم إنشاء صور المعاينة السريعة بها. يجب أن يتم توليد جميع الصور بشكل متناسب مع المصدر، لذا فإن عرض 320 على فيديو 16:9 ينتهي بعرض 320 × 180 تقريبًا.", - "LabelTileHeight": "ارتفاع القالب", - "LabelTrickplayThreads": "خيوط FFmpeg", - "LabelTrickplayThreadsHelp": "عدد الخيوط التي يجب تمريرها إلى وسيطة ”threads-“ في ffmpeg.", - "OptionExtractTrickplayImage": "تمكين استخراج صور المعاينة السريعة", - "LabelGroupShowsIntoCollectionsHelp": "سيتم عرض العروض التليفزيونية كعنصر واحد مجمّع عند عرض قوائم العروض.", - "LabelGroupShowsIntoCollections": "تجميع البرامج التلفزيونية في مجموعات", - "LabelCustomTagDelimitersHelp": "الأحرف التي سيتم التعامل معها كمحددات لفصل العلامات.", - "LabelDelimiterWhitelist": "القائمة البيضاء للمحددات", - "LabelRepository": "مستودع", - "LabelSubtitleStyling": "تنسيق الترجمة النصية", - "MoveToBottom": "انتقل إلى الأسفل", - "ReplaceTrickplayImages": "استبدال صور المعاينة السريعة الموجودة", - "RetryWithGlobalSearch": "إعادة المحاولة باستخدام بحث شامل", + "PreferEmbeddedExtrasTitlesOverFileNamesHelp": "غالبًا ما يكون للإضافات نفس الاسم المضمن للأصل، حدد هذا الخيار لاستخدام العناوين المضمنة لها على أي حال.", + "PreviewLyrics": "معاينة الكلمات", + "ReadInputAtNativeFramerate": "قراءة الإدخال بمعدل الإطارات الأصلي", + "RenderPgsSubtitleHelp": "حدّد ما إذا كان يجب على العميل عرض ترجمات PGS بدلاً من استخدام الترجمات المحروقة. هذا يمكن أن يجنبك تحويل الترميز من جانب الخادم مقابل أداء العرض من جانب العميل.", + "SaveRecordingNFOHelp": "حفظ البيانات الوصفية من مزود قوائم EPG بجانب المحتوى.", + "SaveLyricsIntoMediaFolders": "حفظ الكلمات في مجلدات المحتوى", + "SaveLyricsIntoMediaFoldersHelp": "تخزين الكلمات بجوار ملفات الصوت سيتيح إدارتها بسهولة أكبر.", + "SaveRecordingNFO": "حفظ البيانات الوصفية لتسجيل EPG في NFO", + "NonBlockingScan": "غير حظر - يضع الإنشاء في قائمة الانتظار ثم يعود", + "LabelScanBehaviorHelp": "السلوك الافتراضي هو غير حظر، والذي سيضيف الوسائط إلى المكتبة قبل الانتهاء من إنشاء معاينات التنقل. الحظر سيضمن إنشاء ملفات معاينات التنقل قبل إضافة الوسائط إلى المكتبة، ولكنه سيجعل عمليات الفحص أطول بشكل ملحوظ.", + "LabelProcessPriorityHelp": "تحديد هذا بدرجة أقل أو أعلى سيحدد كيف تقوم وحدة المعالجة المركزية (CPU) بترتيب أولويات عملية إنشاء معاينات التنقل لـ ffmpeg مقارنة بالعمليات الأخرى. إذا لاحظت تباطؤًا أثناء إنشاء الصور ولكنك لا تريد إيقاف الإنشاء بالكامل، فحاول خفض هذه القيمة بالإضافة إلى عدد المسارات.", + "LabelImageIntervalHelp": "الفاصل الزمني (بالمللي ثانية) بين كل صورة جديدة لمعاينات التنقل.", + "LabelWidthResolutionsHelp": "قائمة مفصولة بفواصل لعروض (البكسل) التي سيتم إنشاء صور معاينات التنقل بها. يجب أن يتم إنشاء جميع الصور بشكل متناسب مع المصدر، لذلك فإن العرض 320 في فيديو 16:9 سينتهي به المطاف حوالي 320x180.", + "LabelTileHeight": "ارتفاع البلاط (Tile Height)", + "LabelTrickplayThreads": "مسارات FFmpeg", + "LabelTrickplayThreadsHelp": "عدد المسارات لتمريرها إلى المعطى '-threads' الخاص بـ ffmpeg.", + "OptionExtractTrickplayImage": "تفعيل استخراج صور معاينات التنقل", + "LabelGroupShowsIntoCollectionsHelp": "ستُعرض المسلسلات الموجودة ضمن مجموعة كعنصر واحد مجمّع عند عرض قوائم المسلسلات.", + "LabelGroupShowsIntoCollections": "تجميع المسلسلات في مجموعات", + "LabelCustomTagDelimitersHelp": "الأحرف التي سيتم التعامل معها كفواصل لفصل الوسوم.", + "LabelDelimiterWhitelist": "قائمة السماح للفواصل", + "LabelRepository": "المستودع", + "LabelSubtitleStyling": "تنسيق الترجمة", + "MoveToBottom": "انتقال للأسفل", + "ReplaceTrickplayImages": "استبدال صور معاينات التنقل الحالية", + "RetryWithGlobalSearch": "إعادة المحاولة ببحث شامل", "Reset": "إعادة تعيين", - "SearchForLyrics": "البحث عن كلمات الأغاني", - "LabelSelectPreferredTranscodeVideoCodec": "برنامج ترميز الفيديو المفضل لتحويل الترميز", - "Letterer": "حرفي", - "LimitSupportedVideoResolutionHelp": "استخدم ”الدقة القصوى المسموح بها لتحويل ترميز الفيديو“ كحد أقصى لدقة الفيديو المدعومة.", - "LogLevel.Trace": "تتبع", - "MediaSegmentProvidersHelp": "قم بتمكين وترتيب موفري قطاع الوسائط المفضلين لديك حسب الأولوية.", - "MessageCancelSeriesTimerError": "حدث خطأ أثناء إلغاء المؤقت المُتسلسل", + "SearchForLyrics": "البحث عن كلمات", + "LabelSelectPreferredTranscodeVideoCodec": "ترميز الفيديو المفضل لتحويل الترميز", + "Letterer": "كاتب الحروف", + "LimitSupportedVideoResolutionHelp": "استخدم «الحد الأقصى المسموح به لدقة تحويل ترميز الفيديو» كأقصى دقة فيديو مدعومة.", + "LogLevel.Trace": "التتبع", + "MediaSegmentProvidersHelp": "فعّل ورتّب مزوّدي مقاطع المحتوى المفضّلين حسب الأولوية.", + "MessageCancelSeriesTimerError": "حدث خطأ أثناء إلغاء مؤقت المسلسل", "MessageCancelTimerError": "حدث خطأ أثناء إلغاء المؤقت", - "MetadataNfoLoadError": "فشل في تحميل إعدادات NFO للبيانات الوصفية", - "MoveToTop": "انتقل إلى الأعلى", + "MetadataNfoLoadError": "فشل تحميل إعدادات NFO للبيانات الوصفية", + "MoveToTop": "انتقال للأعلى", "PageNotFound": "هذه ليست الصفحة التي تبحث عنها.", - "MediaSegmentAction.AskToSkip": "اطلب التخطي", - "ResolutionMatchSource": "تطابق المصدر", - "BlockingScan": "الحجب - إنشاء قوائم الانتظار، وحجب الفحص حتى اكتماله", - "LabelWidthResolutions": "دقة العرض", - "LabelQscale": "مقياس الجودة", - "LabelQscaleHelp": "مقياس جودة الصور التي يُخرجها ffmpeg، حيث يمثل الرقم 2 أعلى جودة والرقم 31 أدنى جودة.", - "SaveRecordingImagesHelp": "حفظ الصور من مزود قوائم EPG إلى جانب الوسائط.", - "LabelParallelImageEncodingLimit": "حد ترميز الصور المتوازية", + "MediaSegmentAction.AskToSkip": "السؤال قبل التخطي", + "ResolutionMatchSource": "مطابقة المصدر", + "BlockingScan": "حظر - يضع الإنشاء في قائمة الانتظار، ويوقف الفحص حتى يكتمل", + "LabelWidthResolutions": "دقات العرض", + "LabelQscale": "مقياس الجودة (Qscale)", + "LabelQscaleHelp": "مقياس الجودة للصور الناتجة عن ffmpeg، حيث 2 هي أعلى جودة و 31 هي الأقل.", + "SaveRecordingImagesHelp": "حفظ الصور من مزود قوائم EPG بجانب المحتوى.", + "LabelParallelImageEncodingLimit": "حد تشفير الصور المتوازي", "LastActive": "آخر نشاط", - "LyricDownloadersHelp": "قم بتمكين وترتيب أدوات تنزيل الأغاني المفضلة لديك حسب الأولوية.", - "MediaSegmentSkipPrompt": "تخطي {0}", + "LyricDownloadersHelp": "فعّل ورتّب منزّلي الكلمات المفضّلين لديك حسب الأولوية.", + "MediaSegmentSkipPrompt": "تخطّي {0}", "MediaSegmentType.Intro": "مقدمة", - "MessageRepositoryInstallDisclaimer": "تحذير: تنطوي عملية تثبيت مستودع ملحقات الطرف الثالث على مخاطر. قد تحتوي على تعليمات برمجية غير مستقرة أو ضارة، وقد تتغير في أي وقت. قم فقط بتثبيت المستودعات من المطورين الذين تثق بهم.", + "MessageRepositoryInstallDisclaimer": "تحذير: تثبيت مستودع ملحقات من جهة خارجية ينطوي على مخاطر. قد يحتوي على كود غير مستقر أو ضار، وقد يتغير في أي وقت. ثبّت المستودعات من مصادر تثق بها فقط.", "PlaybackError.MEDIA_DECODE_ERROR": "فشل التشغيل بسبب خطأ في فك تشفير الوسائط.", - "PlaybackError.FATAL_HLS_ERROR": "حدث خطأ فادح في دفق HLS.", - "PlaybackError.RateLimitExceeded": "لا يمكن تشغيل هذه الوسائط في الوقت الحالي بسبب حدود المعدل.", - "PlaylistError.AddFailed": "خطأ أثناء الإضافة إلى قائمة التشغيل", - "PluginUninstallError": "حدث خطأ أثناء إلغاء تثبيت المكون الاضافي.", - "PreferNonstandardArtistsTag": "يفضل علامة الفنانين إذا كانت متوفرة", - "SaveRecordingImages": "حفظ تسجيل صور EPG", - "LabelSaveTrickplayLocallyHelp": "إن حفظ صور المعاينة السريعة في مجلدات الوسائط سيضعها بجوار وسائطك، مما يسهل عملية النقل والوصول إليها.", - "LibraryScanFanoutConcurrency": "حد مهام مسح المكتبة الموازية", + "PlaybackError.FATAL_HLS_ERROR": "حدث خطأ فادح في بث HLS.", + "PlaybackError.RateLimitExceeded": "لا يمكن تشغيل هذا المحتوى في الوقت الحالي بسبب حدود المعدل.", + "PlaylistError.AddFailed": "خطأ في الإضافة إلى قائمة التشغيل", + "PluginUninstallError": "حدث خطأ أثناء إزالة الملحق.", + "PreferNonstandardArtistsTag": "تفضيل وسم ARTISTS إذا كان متاحًا", + "SaveRecordingImages": "حفظ صور تسجيل EPG", + "LabelSaveTrickplayLocallyHelp": "سيؤدي حفظ صور معاينات التنقل داخل مجلدات المحتوى إلى وضعها بجانب المحتوى لتسهيل النقل والوصول.", + "LibraryScanFanoutConcurrency": "حد مهام فحص المكتبة المتوازية", "LimitSegmentLength": "استخدام مقاطع HLS أقصر", - "Lyrics": "كلمات", - "MediaSegmentType.Outro": "الخاتمة", + "Lyrics": "الكلمات", + "MediaSegmentType.Outro": "خاتمة", "MediaSegmentType.Preview": "معاينة", - "MediaSegmentType.Recap": "ملخص", + "MediaSegmentType.Recap": "ملخّص", "MessageSplitVersionsError": "حدث خطأ أثناء تقسيم الإصدارات", - "MoviesAndShows": "الأفلام و المسلسلات التلفزيونية", + "MoviesAndShows": "الأفلام والمسلسلات", "Native": "أصلي", - "PluginLoadRepoError": "حدث خطأ أثناء الحصول على تفاصيل المكون الإضافي من المستودع.", + "PluginLoadRepoError": "حدث خطأ أثناء الحصول على تفاصيل الملحق من المستودع.", "ReadInputAtNativeFramerateHelp": "قد يؤدي تمكين هذا الخيار إلى حل بعض المشكلات، مثل توقف البث المباشر قبل الأوان.", "Regional": "إقليمي", "LabelImageInterval": "الفاصل الزمني للصور", - "LabelTileHeightHelp": "الحد الأقصى لعدد الصور لكل لوحة في اتجاه المحور العمودي/الرأسي.", - "LibraryInvalidItemIdError": "المكتبة في حالة غير صالحة ولا يمكن تحريرها. من المحتمل أنك تواجه خطأ: المسار في قاعدة البيانات ليس هو المسار الصحيح على نظام الملفات.", - "PluginEnableError": "حدث خطأ أثناء تمكين المكون الإضافي.", - "LabelTileWidthHelp": "العدد الأقصى للصور لكل بلاطة في اتجاه المحور الأفقي.", + "LabelTileHeightHelp": "الحد الأقصى لعدد الصور لكل بلاط في اتجاه Y.", + "LibraryInvalidItemIdError": "المكتبة في حالة غير صالحة ولا يمكن تعديلها. ربما تواجه خطأً برمجيًا: المسار في قاعدة البيانات ليس هو المسار الصحيح في نظام الملفات.", + "PluginEnableError": "حدث خطأ أثناء تفعيل الملحق.", + "LabelTileWidthHelp": "الحد الأقصى لعدد الصور لكل بلاط في اتجاه X.", "RenderPgsSubtitle": "عرض ترجمة PGS التجريبي", "MediaInfoRotation": "الدوران", "DeleteCustomImage": "حذف الصورة المخصصة", "ImageDeleteFailed": "فشل حذف الصورة", - "ImageUploadCancelled": "تم إلغاء تحميل الصور", - "PluginDisableError": "حدث خطأ أثناء تعطيل المكون الإضافي.", - "PreferNonstandardArtistsTagHelp": "استخدم علامة الفنانين غير القياسية بدلاً من علامة الفنان عند توفرها.", + "ImageUploadCancelled": "تم إلغاء رفع الصورة", + "PluginDisableError": "حدث خطأ أثناء تعطيل الملحق.", + "PreferNonstandardArtistsTagHelp": "استخدم وسم ARTISTS غير القياسي بدلاً من وسم ARTIST عند توفره.", "PlaylistPublic": "السماح بالوصول العام", - "Lyric": "كلمات غنائية", + "Lyric": "كلمات", "MetadataImagesLoadError": "فشل تحميل إعدادات البيانات الوصفية", - "LabelTileWidth": "عرض القالب", - "LabelJpegQualityHelp": "جودة ضغط JPEG لصور المعاينة السريعة.", + "LabelTileWidth": "عرض البلاط (Tile Width)", + "LabelJpegQualityHelp": "جودة ضغط JPEG لصور معاينات التنقل.", "MediaSegmentAction.Skip": "تخطي", - "MediaSegmentType.Commercial": "تجاري", - "MediaSegmentAction.None": "لا يوجد شيء", - "NoLyricsSearchResultsFound": "لم يتم العثور على كلمات الأغنية.", - "LibraryNameInvalid": "لا يمكن أن يكون اسم المكتبة فارغاً.", - "ExtractTrickplayImagesHelp": "تتشابه صور المعاينة السريعة مع صور الفصول، باستثناء أنها تمتد على طول المحتوى بالكامل وتستخدم لإظهار معاينة عند التنظيف من خلال مقاطع الفيديو.", - "LabelExtractTrickplayDuringLibraryScanHelp": "إنشاء صور المعاينة السريعة عندما يتم استيراد مقاطع الفيديو أثناء فحص المكتبة. خلاف ذلك، سيتم استخراجها أثناء المهمة المجدولة لصور المعاينة السريعة. إذا تم تعيين الإنشاء على عدم الحظر، فلن يؤثر ذلك على الوقت الذي يستغرقه فحص المكتبة حتى يكتمل.", - "LogLoadFailure": "فشل تحميل ملف السجل. قد لا يزال من يتم الكتابة إليه بشكل نشط.", - "LabelExtractTrickplayDuringLibraryScan": "استخراج صور المعاينة السريعة أثناء فحص المكتبة", + "MediaSegmentType.Commercial": "إعلان تجاري", + "MediaSegmentAction.None": "بدون إجراء", + "NoLyricsSearchResultsFound": "لم يتم العثور على كلمات.", + "LibraryNameInvalid": "لا يمكن أن يكون اسم المكتبة فارغًا.", + "ExtractTrickplayImagesHelp": "تشبه صور معاينات التنقل صور الفصول، باستثناء أنها تمتد على طول المحتوى بالكامل وتُستخدم لإظهار معاينة عند التنقل السريع عبر مقاطع الفيديو.", + "LabelExtractTrickplayDuringLibraryScanHelp": "إنشاء صور معاينات التنقل عند استيراد مقاطع الفيديو أثناء فحص المكتبة. بخلاف ذلك، سيتم استخراجها أثناء المهمة المجدولة لصور معاينات التنقل. إذا تم تعيين الإنشاء على وضع غير الحظر، فلن يؤثر ذلك على الوقت الذي يستغرقه إكمال فحص المكتبة.", + "LogLoadFailure": "فشل تحميل ملف السجل. قد يكون لا يزال قيد الكتابة النشطة.", + "LabelExtractTrickplayDuringLibraryScan": "استخراج صور معاينات التنقل أثناء فحص المكتبة", "ViewSettings": "عرض الإعدادات", - "EnableVideoToolboxTonemapping": "تمكين تخطيط الألوان لصندوق أدوات الفيديو", + "EnableVideoToolboxTonemapping": "تفعيل تحويل النطاق اللوني VideoToolbox", "AllowAv1Encoding": "السماح بالترميز بتنسيق AV1", "LabelTrickplayKeyFrameOnlyExtraction": "إنشاء الصور من الإطارات الرئيسية فقط", - "LabelEncodingFormatOptions": "خيارات تنسيق الترميز", - "VideoCodecTagNotSupported": "علامة ترميز الفيديو غير مدعومة", - "Trickplay": "صور المعاينة السريعة", - "MachineTranslated": "الترجمة الآلية", - "LabelTrickplayAccelEncodingHelp": "متوفر حاليًا فقط على QSV و VA-API, صندوق أدوات الفيديو و RKMPP، ليس لهذا الخيار أي تأثير على طرق تسريع الأجهزة الأخرى.", - "HeaderServerUnavailable": "الخادم غير متوفر", - "SelectPreferredTranscodeVideoAudioCodecHelp": "حدد برنامج ترميز الصوت المفضل لتحويل الترميز إلى محتوى الفيديو. إذا كان برنامج الترميز المفضل غير مدعوم، سيستخدم الخادم أفضل برنامج ترميز متاح تالياً.", + "LabelEncodingFormatOptions": "خيارات صيغة الترميز", + "VideoCodecTagNotSupported": "وسم ترميز الفيديو غير مدعوم", + "Trickplay": "معاينات التنقل (Trickplay)", + "MachineTranslated": "مترجم آليًا", + "LabelTrickplayAccelEncodingHelp": "متاح حاليًا فقط على QSV، VA-API، VideoToolbox، و RKMPP، هذا الخيار ليس له أي تأثير على طرق التسريع العتادي الأخرى.", + "HeaderServerUnavailable": "الخادم غير متاح", + "SelectPreferredTranscodeVideoAudioCodecHelp": "اختر ترميز الصوت المفضل لتحويل الترميز إليه لمحتوى الفيديو. إذا لم يكن الترميز المفضل مدعومًا، فسيستخدم الخادم الترميز الأفضل التالي المتاح.", "SettingsPageLoadError": "فشل تحميل صفحة الإعدادات", - "Featurette": "فيلم وثائقي", - "StereoDownmixAlgorithmHelp": "خوارزمية تُستخدم لخفض مزج الصوت متعدد القنوات إلى ستيريو.", - "UseCustomTagDelimiters": "استخدام محدد العلامات المخصص", - "StreamCountExceedsLimit": "تجاوز عدد التدفقات الحد المسموح به", - "UseCustomTagDelimitersHelp": "تقسيم علامات الفنان/النوع مع أحرف مخصصة.", + "Featurette": "فيلم قصير إضافي", + "StereoDownmixAlgorithmHelp": "الخوارزمية المستخدمة لتقليل الصوت متعدد القنوات إلى ستيريو.", + "UseCustomTagDelimiters": "استخدام فواصل وسوم مخصصة", + "StreamCountExceedsLimit": "عدد البثوث يتجاوز الحد المسموح به", + "UseCustomTagDelimitersHelp": "تقسيم وسوم الفنان/النوع بأحرف مخصصة.", "Translator": "مترجم", "LabelTrackGain": "كسب المسار", - "AllowVideoToolboxTonemappingHelp": "تخطيط الألوان المسرع للأجهزة مقدم من Video Toolbox. وهو يعمل مع معظم تنسيقات HDR، بما في ذلك HDR10 وHDR10+ وHLG، ولكنه لا يعمل مع Dolby Vision Profile 5. هذا له أولوية أعلى مقارنةً بتطبيق معدني آخر.", - "EncodingFormatHelp": "حدد ترميز الفيديو الذي يجب أن يقوم جيليفين بتحويل الترميز إليه. سيستخدم جيليفين ترميز البرامج في حالة عدم توفر ترميز البرامج عند عدم توفر تسريع الأجهزة للتنسيق المحدد. سيتم تمكين ترميز H264 دائمًا.", - "LabelTonemappingMode": "وضع تخطيط الألوان", - "TonemappingModeHelp": "حدد وضع تخطيط الألوان. إذا واجهت إضاءات غير واضحة فحاول التبديل إلى وضع RGB.", - "ForeignPartsOnly": "الأجزاء القسرية/الأجنبية فقط", - "HearingImpairedShort": "HI/SDH", - "LabelTrickplayAccel": "تمكين فك ترميز الأجهزة", - "LabelTrickplayAccelEncoding": "تمكين ترميز MJPEG المسرع للأجهزة", + "AllowVideoToolboxTonemappingHelp": "تحويل النطاق اللوني بتسريع عتادي عبر VideoToolbox. يعمل مع معظم صيغ HDR بما في ذلك HDR10 وHDR10+ وHLG، لكنه لا يعمل مع Dolby Vision Profile 5. لهذا الخيار أولوية أعلى مقارنة بتنفيذ Metal آخر.", + "EncodingFormatHelp": "اختر ترميز الفيديو الذي يجب على Jellyfin تحويل الترميز إليه. سيستخدم Jellyfin الترميز البرمجي عندما لا يكون التسريع العتادي للصيغة المحددة متاحًا. سيتم تمكين ترميز H264 دائمًا.", + "LabelTonemappingMode": "وضع تحويل النطاق اللوني", + "TonemappingModeHelp": "اختر وضع تحويل النطاق اللوني. إذا واجهت إضاءات باهتة حاول التبديل إلى وضع RGB.", + "ForeignPartsOnly": "للأجزاء الأجنبية / إجبارية فقط", + "HearingImpairedShort": "لضعاف السمع (HI/SDH)", + "LabelTrickplayAccel": "تفعيل فك التشفير العتادي", + "LabelTrickplayAccelEncoding": "تفعيل ترميز MJPEG بتسريع عتادي", "LabelIsHearingImpaired": "لضعاف السمع (SDH)", - "LabelTrickplayKeyFrameOnlyExtractionHelp": "استخراج الإطارات الرئيسية فقط لمعالجة أسرع بكثير مع توقيت أقل دقة. إذا كانت وحدة فك ترميز الأجهزة المكوّنة لا تدعم هذا الوضع، ستستخدم وحدة فك ترميز البرامج بدلاً من ذلك.", - "ViewLyrics": "عرض كلمات الأغاني", - "UploadCustomImage": "تحميل صورة مخصصة", - "Penciller": "المخّطط", - "HeaderUpdateRequired": "مطلوب تحديث", + "LabelTrickplayKeyFrameOnlyExtractionHelp": "استخراج الإطارات الرئيسية فقط لمعالجة أسرع بكثير مع توقيت أقل دقة. إذا كان مفكك التشفير العتادي المهيأ لا يدعم هذا الوضع، فسيستخدم مفكك التشفير البرمجي بدلاً من ذلك.", + "ViewLyrics": "عرض الكلمات", + "UploadCustomImage": "رفع صورة مخصصة", + "Penciller": "رسّام بالقلم", + "HeaderUpdateRequired": "التحديث مطلوب", "SubtitleCyan": "سماوي", "SubtitleMagenta": "أرجواني", "DownloadManager": "التنزيلات", - "MessageForgotPasswordPinReset": "اكتب رمز قفل البرنامج لانهاء عملية تغيير كلمة المرور", - "TranscodingLoadError": "فشل تحميل إعدادات ترميز الفيديوهات", - "BackupsPageLoadError": "فشل تحميل صفحة النسخ الاحتياطية", - "ButtonCreateBackup": "أنشئ نسخة احتياطية", - "MessageRestoreDisclaimer": "تحذير: أنت على وشك استعادة نسخة احتياطية سابقة. سيصبح خادمك غير صالح للاستخدام أثناء العملية، وستفقد أي بيانات جديدة أُنشِأت منذ النسخ الاحتياطي.", + "MessageForgotPasswordPinReset": "أدخل رمز PIN هنا لإنهاء إعادة تعيين كلمة المرور", + "TranscodingLoadError": "فشل تحميل إعدادات تحويل الترميز", + "BackupsPageLoadError": "خطأ في تحميل صفحة النسخ الاحتياطية", + "ButtonCreateBackup": "إنشاء نسخة احتياطية", + "MessageRestoreDisclaimer": "تحذير: أنت على وشك الاستعادة من نسخة احتياطية سابقة. لن يكون الخادم قابلًا للاستخدام طوال مدة العملية، وستُفقد أي بيانات جديدة أُنشئت منذ النسخة الاحتياطية.", "MessageWaitingForServer": "في انتظار الخادم...", - "ButtonLearnMore": "تعرف المزيد", - "Create": "انشئ", - "HeaderBackupsHelp": "إنشاء واستعادة لقطات من خادمكَ والتي تتضمن قاعدة البيانات والبيانات الوصفية والترجمات والمعاينة السريعة.", - "LabelBackupsUnavailable": "لا توجد اي نسخ احتياطية متاحة", + "ButtonLearnMore": "معرفة المزيد", + "Create": "إنشاء", + "HeaderBackupsHelp": "أنشئ واستعد لقطات من خادمك يمكن أن تتضمن قاعدة البيانات والبيانات الوصفية والترجمات وtrickplay.", + "LabelBackupsUnavailable": "لا توجد نسخ احتياطية متاحة", "LabelDatabase": "قاعدة البيانات", "LabelProgramData": "بيانات البرنامج", - "MessageBackupDisclaimer": "اعتمادًا على حجم مكتبتك، قد تستغرق عملية النسخ الاحتياطي بعض الوقت.", + "MessageBackupDisclaimer": "قد تستغرق عملية النسخ الاحتياطي بعض الوقت حسب حجم مكتبتك.", "MessageBackupInProgress": "جارٍ النسخ الاحتياطي", - "MessageRestoreInProgress": "جارٍ الاستعادة", - "MessageRestoreSuccess": "تمت الاستعادة بنجاح", - "StorageType.CDRom": "قرص مضغوط", - "StorageType.Removable": "قابلة للإزالة", - "StorageType.Unknown": "مجهول", + "MessageRestoreInProgress": "جاري الاستعادة", + "MessageRestoreSuccess": "اكتملت الاستعادة بنجاح", + "StorageType.CDRom": "قرص مضغوط (CD-ROM)", + "StorageType.Removable": "قابل للإزالة", + "StorageType.Unknown": "غير معروف", "Success": "نجاح", "HeaderBackups": "النسخ الاحتياطية", "ConfirmDeleteRepository": "حذف المستودع؟", - "DeleteRepositoryConfirmation": "هل أنت متأكد من هذا المستودع؟", + "DeleteRepositoryConfirmation": "هل أنت متأكد من حذف هذا المستودع؟", "LabelRestore": "استعادة", - "PluginsLoadError": "حدث خطأ أثناء تحميل الإضافات.", + "PluginsLoadError": "حدث خطأ أثناء تحميل الملحقات", "RepositoriesPageLoadError": "فشل تحميل المستودعات", - "StorageType.Fixed": "مُثَبَّت", + "StorageType.Fixed": "ثابت", "StorageType.Network": "شبكة", - "StorageType.NoRootDirectory": "لا يوجد دليل الجذر (No Root Directory)", - "StorageType.Ram": "ذاكرة الوصول العشوائي (RAM)", + "StorageType.NoRootDirectory": "لا يوجد مجلد جذر", + "StorageType.Ram": "ذاكرة عشوائية (RAM)", "LabelImageCache": "ذاكرة التخزين المؤقت للصور", "LabelAvailable": "متاح", "ConnectAnyway": "الاتصال على أي حال", "HeaderServerMismatch": "عدم تطابق الخادم", - "LabelBundled": "حزمة", + "LabelBundled": "مضمّن", "LiveTVPageLoadError": "فشل تحميل صفحة التسجيلات", - "MessageServerMismatch": "الخادم الذي تتصل به ليس هو نفسه الخادم الذي اتصلت به سابقًا على هذا العنوان. إذا كان هذا متوقعًا، يُرجى اختيار \"الاتصال على أي حال\". وإلا، فقد يكون اتصالك أو الخادم معرضًا للخطر.", - "ViewAllPlugins": "عرض جميع الإضافات", - "ButtonAddProvider": "إضافة مزود", + "MessageServerMismatch": "الخادم الذي تتصل به ليس هو الخادم نفسه الذي اتصلت به سابقًا على هذا العنوان. إذا كان هذا متوقعًا، فاختر \"الاتصال على أي حال\". وإلا فقد يكون اتصالك أو الخادم مخترقًا.", + "ViewAllPlugins": "عرض كل الملحقات", + "ButtonAddProvider": "إضافة مزوّد", "ButtonAddTunerDevice": "إضافة جهاز موالف", "ManageRepositories": "إدارة المستودعات", - "LabelSlideshowInterval": "مدة عرض صور", - "LabelSlideshowIntervalHelp": "هذا الوقت بالثواني لاستعراض كل صورة في العرض.", - "ConfirmDeleteCollection": "هل انت متأكد من رغبتك في حذف هذه المجموعة؟", - "ConfirmDeletePlaylist": "هل انت متأكد من رغبتك في حذف هذه اللائحة؟", - "HeaderDeleteCollection": "حذف مجموعة", - "HeaderDeletePlaylist": "حذف لائحة", - "NewPlaylist": "لائحة تشغيل جديدة", - "OptionDatePlaylistUpdated": "تحديث تاريخ لائحة تشغيل", - "ActivitiesLoadError": "فشل تحميل الانشطة", + "LabelSlideshowInterval": "الفاصل الزمني لعرض الشرائح", + "LabelSlideshowIntervalHelp": "الوقت بالثواني لعرض كل صورة في عرض الشرائح.", + "ConfirmDeleteCollection": "هل تريد بالتأكيد حذف هذه المجموعة؟", + "ConfirmDeletePlaylist": "هل تريد بالتأكيد حذف قائمة التشغيل هذه؟", + "HeaderDeleteCollection": "حذف المجموعة", + "HeaderDeletePlaylist": "حذف قائمة التشغيل", + "NewPlaylist": "قائمة تشغيل جديدة", + "OptionDatePlaylistUpdated": "تاريخ تحديث قائمة التشغيل", + "ActivitiesLoadError": "فشل تحميل الأنشطة", "ApiKeysLoadError": "فشل تحميل مفاتيح API", - "BrandingLoadError": "فشل تحميل اعدادات التعليم", - "DevicesLoadError": "فشل تحميل الاجهزة", - "LabelInternalServerUri": "URI داخلي", - "LabelInternalServerUriHelp": "تم نشر URL الخادم للمرور الداخلي.", - "LabelUseSamePublishedServerUri": "استخدم نفس عنوان URI الخادم للمرور الداخلي و الخارجي", + "BrandingLoadError": "خطأ في تحميل إعدادات الهوية البصرية", + "DevicesLoadError": "فشل تحميل الأجهزة", + "LabelInternalServerUri": "رابط URI داخلي", + "LabelInternalServerUriHelp": "رابط خادم URI المنشور للوصول الداخلي.", + "LabelUseSamePublishedServerUri": "استخدام نفس رابط URI المنشور للخادم للوصول الداخلي والخارجي", "LibrariesLoadError": "فشل تحميل المكتبات", - "NetworkingPageLoadError": "فشل تحميل اعدادات الشبكة", - "ResumeLoadError": "فشل تحميل اعدادات الاستهلال", - "Authors": "مؤلفون", - "ContinueReading": "استمرار القراءة", - "HeaderLatestBooks": "الكتب المضافة مؤخرا", - "HeaderLatestMusicVideos": "مقاطع الموسيقى المضافة مؤخرا", - "ResetFilters": "إعادة تعيين المصافي", - "StreamingLoadError": "فشل تحميل صفحة إعدادات البث", - "Unwatch": "غير مشاهد", - "UsersEditPageError": "فشل تحميل صفحة تحرير المستخدمين", - "Watch": "مشاهد", - "TrickplayLoadError": "فشل تحميل إعدادات trickplay", - "LabelExternalServerUri": "URI خارجي", - "LabelExternalServerUriHelp": "نشر URI الخادم للولوج الخارجي.", + "NetworkingPageLoadError": "فشل تحميل إعدادات الشبكة", + "ResumeLoadError": "فشل تحميل إعدادات الاستئناف", + "Authors": "المؤلفون", + "ContinueReading": "متابعة القراءة", + "HeaderLatestBooks": "الكتب المضافة حديثًا", + "HeaderLatestMusicVideos": "الفيديوهات الموسيقية المضافة حديثًا", + "ResetFilters": "إعادة تعيين الفلاتر", + "StreamingLoadError": "فشل تحميل إعدادات صفحة البث", + "Unwatch": "إلغاء المشاهدة", + "UsersEditPageError": "فشل تحميل صفحة تعديل المستخدمين", + "Watch": "مشاهدة", + "TrickplayLoadError": "فشل تحميل إعدادات معاينات التنقل", + "LabelExternalServerUri": "رابط URI خارجي", + "LabelExternalServerUriHelp": "رابط URI المنشور للخادم للوصول الخارجي.", "LabelVideoColors": "ألوان الفيديو", - "LabelVideoBitDepth": "دقة عمق الفيديو", - "LabelPlaybackQuality": "اطار مفقود / خرب", - "LabelPlayerSizes": "أحجام المشغل", - "LabelReasons": "أسباب", + "LabelVideoBitDepth": "عمق بت الفيديو", + "LabelPlaybackQuality": "الإطارات المفقودة / التالفة", + "LabelPlayerSizes": "أحجام المشغّل", + "LabelReasons": "الأسباب", "LabelProgressAndSpeed": "التقدم / السرعة", - "LabelTargetCodecs": "المرمزات المستهدفة", - "LabelVideoAttributes": "صفات الفيديو", - "LabelAudioAttributes": "صفات الصوت", - "OnFilesystem": "على نظام الملفات: {0}", - "LabelSyncPlayJoinGroup": "الانضمام لمجموعة" + "LabelTargetCodecs": "الترميزات المستهدفة", + "LabelVideoAttributes": "سمات الفيديو", + "LabelAudioAttributes": "سمات الصوت", + "OnFilesystem": "في نظام الملفات: {0}", + "LabelSyncPlayJoinGroup": "الانضمام إلى مجموعة" } From 547b235ced5a7024e7578cb00d1a1eaf9098226f Mon Sep 17 00:00:00 2001 From: Hassan Alabdulaal Date: Sat, 2 May 2026 06:51:30 -0400 Subject: [PATCH 181/695] Translated using Weblate (Arabic) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ar/ --- src/strings/ar.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/ar.json b/src/strings/ar.json index 6fd10aa6b6..2110b2e3ee 100644 --- a/src/strings/ar.json +++ b/src/strings/ar.json @@ -716,7 +716,7 @@ "DeinterlaceMethodHelp": "اختر طريقة إزالة التشابك عند تحويل ترميز المحتوى المتشابك برمجيًا. عند تفعيل تسريع عتادي يدعم إزالة التشابك، سيُستخدم مزيل التشابك العتادي بدل هذا الإعداد.", "DefaultSubtitlesHelp": "تُحمّل الترجمات بناءً على علامتَي الافتراضي والإجباري في البيانات الوصفية المضمّنة. تُراعى تفضيلات اللغة عند توفر أكثر من خيار.", "DefaultMetadataLangaugeDescription": "هذه هي الإعدادات الافتراضية، ويمكن تخصيصها لكل مكتبة على حدة.", - "Default": "افتراضي", + "Default": "الافتراضي", "CopyStreamURL": "نسخ رابط البث", "Continuing": "متابعة", "CopyStreamURLSuccess": "تم نسخ الرابط بنجاح.", @@ -897,7 +897,7 @@ "Normal": "عادي", "Small": "صغير", "None": "لا شيء", - "MusicVideos": "فيديوهات موسيقية", + "MusicVideos": "الفيديوهات الموسيقية", "RepeatMode": "وضع التكرار", "RepeatEpisodes": "تكرار الحلقات", "RepeatAll": "تكرار الكل", From 4549d5af8b9b8e55269dc53a794a330fdfd356c7 Mon Sep 17 00:00:00 2001 From: Bate Mite Date: Sat, 2 May 2026 13:30:26 -0400 Subject: [PATCH 182/695] Translated using Weblate (Macedonian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/mk/ --- src/strings/mk.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/mk.json b/src/strings/mk.json index 07905cd6e2..aa0cfc0422 100644 --- a/src/strings/mk.json +++ b/src/strings/mk.json @@ -552,5 +552,6 @@ "LabelAllowContentWithTags": "Дозволи ставки со ознаки", "LabelBlastMessageIntervalHelp": "Определете го времетраењето во секунди помеѓу пораките на „blast alive“.", "LabelBlockContentWithTags": "Блокирај ставки со ознаки", - "LabelBuildVersion": "Верзија" + "LabelBuildVersion": "Верзија", + "ActivitiesLoadError": "Не успеаа да се вчитаат активностите" } From ea4b28de0bd631de741b0a73f487d973d06730cb Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Sun, 3 May 2026 01:23:45 -0400 Subject: [PATCH 183/695] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index fcb0920a32..264c4330e8 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -1892,7 +1892,7 @@ "ContinueReading": "Verder lezen", "HeaderLatestBooks": "Onlangs toegevoegde boeken", "HeaderLatestMusicVideos": "Onlangs toegevoegde muziekvideo's", - "UsersEditPageError": "Het laden van de gebruikers aanpassen pagina is mislukt", + "UsersEditPageError": "Laden van pagina voor bewerken gebruikers mislukt", "Albums": "Albums", "Genres": "Genres", "LabelAudioAttributes": "Geluidseigenschappen", From ae3e393362af046957653bf008ff09c18c324c42 Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Sun, 3 May 2026 01:27:29 -0400 Subject: [PATCH 184/695] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index 264c4330e8..c7a50e403d 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -102,7 +102,7 @@ "ConfirmDeletion": "Verwijderen bevestigen", "ConfirmEndPlayerSession": "Wil je Jellyfin afsluiten op {0}?", "Connect": "Verbinden", - "ContinueWatching": "Verder kijken", + "ContinueWatching": "Verderkijken", "Continuing": "Wordt vervolgd", "CriticRating": "Beoordeling critici", "DateAdded": "Datum toegevoegd", @@ -234,7 +234,7 @@ "HeaderConnectToServer": "Verbinden met server", "HeaderConnectionFailure": "Verbindingsfout", "HeaderContinueListening": "Verderluisteren", - "HeaderContinueWatching": "Verder kijken", + "HeaderContinueWatching": "Verderkijken", "HeaderDateIssued": "Datum uitgegeven", "HeaderDefaultRecordingSettings": "Standaard opname-instellingen", "HeaderDeleteDevice": "Apparaat verwijderen", @@ -1889,7 +1889,7 @@ "Unwatch": "Volgen stoppen", "Watch": "Volgen", "Authors": "Auteurs", - "ContinueReading": "Verder lezen", + "ContinueReading": "Verderlezen", "HeaderLatestBooks": "Onlangs toegevoegde boeken", "HeaderLatestMusicVideos": "Onlangs toegevoegde muziekvideo's", "UsersEditPageError": "Laden van pagina voor bewerken gebruikers mislukt", From fc63ce4a5bc2728071dd0c3211a1400a62714e0a Mon Sep 17 00:00:00 2001 From: Taras Smal Date: Sat, 18 Apr 2026 20:23:19 +0300 Subject: [PATCH 185/695] Fix clock icon alignment on scheduled tasks page --- src/apps/dashboard/features/tasks/components/Task.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps/dashboard/features/tasks/components/Task.tsx b/src/apps/dashboard/features/tasks/components/Task.tsx index ef140c0cb3..83b685c089 100644 --- a/src/apps/dashboard/features/tasks/components/Task.tsx +++ b/src/apps/dashboard/features/tasks/components/Task.tsx @@ -43,7 +43,7 @@ const Task: FunctionComponent = ({ task }: TaskProps) => { - + Date: Sun, 3 May 2026 08:13:57 -0400 Subject: [PATCH 186/695] Translated using Weblate (Korean) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ko/ --- src/strings/ko.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/ko.json b/src/strings/ko.json index e1e7484715..f6b12ddd4f 100644 --- a/src/strings/ko.json +++ b/src/strings/ko.json @@ -1857,5 +1857,8 @@ "ViewAllPlugins": "모든 플러그인 보기", "ViewSettings": "보기 설정", "LogLoadFailure": "로그 파일을 불러오는 데 실패했습니다. 파일에 여전히 기록이 진행 중일 수 있습니다.", - "ApiKeysLoadError": "API 키를 불러오는 데 실패하였습니다" + "ApiKeysLoadError": "API 키를 불러오는 데 실패하였습니다", + "ActivitiesLoadError": "활동을 불러오는 데 실패했습니다", + "Authors": "작가들", + "BrandingLoadError": "브랜딩 세팅을 불러오는 데 실패했습니다" } From 00458abef6cea47956363e5636856e53408fc7c9 Mon Sep 17 00:00:00 2001 From: Tal Sarid Date: Sun, 3 May 2026 09:44:34 -0400 Subject: [PATCH 187/695] Translated using Weblate (Hebrew) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/he/ --- src/strings/he.json | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/strings/he.json b/src/strings/he.json index 3b75cae65a..da2763007a 100644 --- a/src/strings/he.json +++ b/src/strings/he.json @@ -1894,5 +1894,16 @@ "ContinueReading": "המשך קריאה", "HeaderLatestBooks": "ספרים שהוספו לאחרונה", "HeaderLatestMusicVideos": "קליפים שהוספו לאחרונה", - "UsersEditPageError": "לא ניתן לטעון את דף עריכת המשתמשים" + "UsersEditPageError": "לא ניתן לטעון את דף עריכת המשתמשים", + "LabelSyncPlayJoinGroup": "להצטרף לקבוצה", + "OnFilesystem": "במערכת הקבצים: {0}", + "LabelVideoAttributes": "מאפייני וידאו", + "LabelVideoColors": "צבעי וידאו", + "LabelVideoBitDepth": "עומק־סיביות של הוידאו", + "LabelAudioAttributes": "מאפייני שמע", + "LabelTargetCodecs": "מקודדי יעד", + "LabelProgressAndSpeed": "התקדמות / מהירות", + "LabelReasons": "סיבות", + "LabelPlayerSizes": "גדלי נגן", + "LabelPlaybackQuality": "פריימים נפלו \\ נפגמו" } From b675ac311eaf5d4a2e2fcc54f0726d5ef88b6ae3 Mon Sep 17 00:00:00 2001 From: Shadowghost Date: Sun, 8 Mar 2026 10:40:58 +0100 Subject: [PATCH 188/695] Add similarity provider configuration --- .../libraryoptionseditor.js | 78 +++++++++++++++++++ .../libraryoptionseditor.template.html | 3 + src/strings/en-us.json | 2 + 3 files changed, 83 insertions(+) diff --git a/src/components/libraryoptionseditor/libraryoptionseditor.js b/src/components/libraryoptionseditor/libraryoptionseditor.js index e364a957b9..bcb3a4edf8 100644 --- a/src/components/libraryoptionseditor/libraryoptionseditor.js +++ b/src/components/libraryoptionseditor/libraryoptionseditor.js @@ -323,6 +323,41 @@ function getImageFetchersForTypeHtml(availableTypeOptions, libraryOptionsForType return html; } +function getSimilarItemProvidersForTypeHtml(availableTypeOptions, libraryOptionsForType) { + let html = ''; + let plugins = availableTypeOptions.SimilarItemProviders; + + plugins = getOrderedPlugins(plugins, libraryOptionsForType.SimilarItemProviderOrder || []); + if (!plugins.length) return html; + + html += '
'; + html += '

' + globalize.translate('HeaderTypeSimilarItemProviders', globalize.translate('TypeOptionPlural' + availableTypeOptions.Type)) + '

'; + html += '
'; + + plugins.forEach((plugin, index) => { + html += '
'; + const isChecked = libraryOptionsForType.SimilarItemProviders ? libraryOptionsForType.SimilarItemProviders.includes(plugin.Name) : plugin.DefaultEnabled; + const checkedHtml = isChecked ? ' checked="checked"' : ''; + html += ''; + html += '
'; + html += '

'; + html += escapeHtml(plugin.Name); + html += '

'; + html += '
'; + if (index > 0) { + html += ''; + } else if (plugins.length > 1) { + html += ''; + } + html += '
'; + }); + + html += '
'; + html += '
' + globalize.translate('LabelSimilarItemProvidersHelp') + '
'; + html += '
'; + return html; +} + function renderImageFetchers(page, availableOptions, libraryOptions) { let html = ''; const elem = page.querySelector('.imageFetchers'); @@ -340,6 +375,21 @@ function renderImageFetchers(page, availableOptions, libraryOptions) { return true; } +function renderSimilarItemProviders(page, availableOptions, libraryOptions) { + let html = ''; + const elem = page.querySelector('.similarItemProviders'); + for (const availableTypeOptions of availableOptions.TypeOptions) { + html += getSimilarItemProvidersForTypeHtml(availableTypeOptions, getTypeOptions(libraryOptions, availableTypeOptions.Type) || {}); + } + elem.innerHTML = html; + if (html) { + elem.classList.remove('hide'); + } else { + elem.classList.add('hide'); + } + return true; +} + function populateMetadataSettings(parent, contentType) { const isNewLibrary = parent.classList.contains('newlibrary'); return ApiClient.getJSON(ApiClient.getUrl('Libraries/AvailableOptions', { @@ -355,6 +405,7 @@ function populateMetadataSettings(parent, contentType) { renderLyricFetchers(parent, availableOptions, {}); renderMediaSegmentProviders(parent, availableOptions, {}); renderImageFetchers(parent, availableOptions, {}); + renderSimilarItemProviders(parent, availableOptions, {}); availableOptions.SubtitleFetchers.length ? parent.querySelector('.subtitleDownloadSettings').classList.remove('hide') : parent.querySelector('.subtitleDownloadSettings').classList.add('hide'); }).catch(() => { return Promise.resolve(); @@ -432,6 +483,7 @@ function bindEvents(parent) { parent.querySelector('.lyricFetchers').addEventListener('click', onSortableContainerClick); parent.querySelector('.mediaSegmentProviders').addEventListener('click', onSortableContainerClick); parent.querySelector('.imageFetchers').addEventListener('click', onImageFetchersContainerClick); + parent.querySelector('.similarItemProviders').addEventListener('click', onSortableContainerClick); parent.querySelector('#chkEnableEmbeddedTitles').addEventListener('change', (e) => { parent.querySelector('.chkEnableEmbeddedExtrasTitlesContainer').classList.toggle('hide', !e.currentTarget.checked); @@ -605,6 +657,30 @@ function setImageFetchersIntoOptions(parent, options) { } } +function setSimilarItemProvidersIntoOptions(parent, options) { + const sections = parent.querySelectorAll('.similarItemProvider'); + for (const section of sections) { + const type = section.getAttribute('data-type'); + let typeOptions = getTypeOptions(options, type); + if (!typeOptions) { + typeOptions = { + Type: type + }; + options.TypeOptions.push(typeOptions); + } + + typeOptions.SimilarItemProviders = Array.prototype.map.call(Array.prototype.filter.call(section.querySelectorAll('.chkSimilarItemProvider'), elem => { + return elem.checked; + }), elem => { + return elem.getAttribute('data-pluginname'); + }); + + typeOptions.SimilarItemProviderOrder = Array.prototype.map.call(section.querySelectorAll('.similarItemProviderItem'), elem => { + return elem.getAttribute('data-pluginname'); + }); + } +} + function setImageOptionsIntoOptions(options) { const originalTypeOptions = currentLibraryOptions?.TypeOptions || []; for (const originalTypeOption of originalTypeOptions) { @@ -674,6 +750,7 @@ export function getLibraryOptions(parent) { setMediaSegmentProvidersIntoOptions(parent, options); setMetadataFetchersIntoOptions(parent, options); setImageFetchersIntoOptions(parent, options); + setSimilarItemProvidersIntoOptions(parent, options); setImageOptionsIntoOptions(options); return options; @@ -731,6 +808,7 @@ export function setLibraryOptions(parent, options) { renderMetadataReaders(parent, getOrderedPlugins(parent.availableOptions.MetadataReaders, options.LocalMetadataReaderOrder || [])); renderMetadataFetchers(parent, parent.availableOptions, options); renderImageFetchers(parent, parent.availableOptions, options); + renderSimilarItemProviders(parent, parent.availableOptions, options); renderSubtitleFetchers(parent, parent.availableOptions, options); renderLyricFetchers(parent, parent.availableOptions, options); renderMediaSegmentProviders(parent, parent.availableOptions, options); diff --git a/src/components/libraryoptionseditor/libraryoptionseditor.template.html b/src/components/libraryoptionseditor/libraryoptionseditor.template.html index f487bc482b..384559f092 100644 --- a/src/components/libraryoptionseditor/libraryoptionseditor.template.html +++ b/src/components/libraryoptionseditor/libraryoptionseditor.template.html @@ -96,6 +96,9 @@
+
+
+