Merge pull request #446 from dkanada/detail

Dashboard layout improvements
This commit is contained in:
dkanada 2019-09-14 17:21:28 -07:00 committed by GitHub
commit e62b7f2e3d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 98 additions and 220 deletions

View file

@ -1,88 +0,0 @@
define(['dialogHelper', 'layoutManager', 'globalize', 'require', 'events', 'homescreenSettings', 'paper-icon-button-light', 'css!./../formdialog'], function (dialogHelper, layoutManager, globalize, require, events, HomescreenSettings) {
'use strict';
function centerFocus(elem, horiz, on) {
require(['scrollHelper'], function (scrollHelper) {
var fn = on ? 'on' : 'off';
scrollHelper.centerFocus[fn](elem, horiz);
});
}
function show(options) {
return new Promise(function (resolve, reject) {
require(['text!./homescreensettingsdialog.template.html'], function (template) {
var dialogOptions = {
removeOnClose: true,
scrollY: false
};
if (layoutManager.tv) {
dialogOptions.size = 'fullscreen';
} else {
dialogOptions.size = 'medium-tall';
}
var dlg = dialogHelper.createDialog(dialogOptions);
dlg.classList.add('formDialog');
var html = '';
var submitted = false;
html += globalize.translateDocument(template, 'core');
dlg.innerHTML = html;
if (layoutManager.tv) {
centerFocus(dlg.querySelector('.formDialogContent'), false, true);
}
var homescreenSettingsInstance = new HomescreenSettings({
serverId: options.serverId,
userId: options.userId,
element: dlg.querySelector('.settingsContent'),
userSettings: options.userSettings,
enableSaveButton: false,
enableSaveConfirmation: false
});
dialogHelper.open(dlg);
dlg.addEventListener('close', function () {
if (layoutManager.tv) {
centerFocus(dlg.querySelector('.formDialogContent'), false, false);
}
if (submitted) {
resolve();
} else {
reject();
}
});
dlg.querySelector('.btnCancel').addEventListener('click', function (e) {
dialogHelper.close(dlg);
});
dlg.querySelector('.btnSave').addEventListener('click', function (e) {
submitted = true;
homescreenSettingsInstance.submit();
});
events.on(homescreenSettingsInstance, 'saved', function () {
submitted = true;
dialogHelper.close(dlg);
});
});
});
}
return {
show: show
};
});

View file

@ -1,22 +0,0 @@
<div class="formDialogHeader">
<button is="paper-icon-button-light" class="btnCancel autoSize" tabindex="-1"><i class="md-icon">&#xE5C4;</i></button>
<h3 class="formDialogHeaderTitle">
${HeaderDisplaySettings}
</h3>
</div>
<div class="formDialogContent smoothScrollY">
<div class="dialogContentInner dialog-content-centered">
<div class="settingsContent">
</div>
<div class="formDialogFooter">
<button is="emby-button" type="button" class="raised button-submit block formDialogFooterItem btnSave">
<span>${Save}</span>
</button>
</div>
</div>
</div>

View file

@ -12,27 +12,23 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
function showPlaybackInfo(btn, session) { function showPlaybackInfo(btn, session) {
require(["alert"], function (alert) { require(["alert"], function (alert) {
var showTranscodeReasons;
var title; var title;
var text = []; var text = [];
var displayPlayMethod = playMethodHelper.getDisplayPlayMethod(session);
var isDirectStream = "DirectStream" === displayPlayMethod;
var isTranscode = "Transcode" === displayPlayMethod;
if (isDirectStream) { var displayPlayMethod = playMethodHelper.getDisplayPlayMethod(session);
if (displayPlayMethod === "DirectStream") {
title = globalize.translate("DirectStreaming"); title = globalize.translate("DirectStreaming");
text.push(globalize.translate("DirectStreamHelp1")); text.push(globalize.translate("DirectStreamHelp1"));
text.push("<br/>"); text.push("<br/>");
text.push(globalize.translate("DirectStreamHelp2")); text.push(globalize.translate("DirectStreamHelp2"));
} else if (isTranscode) { } else if (displayPlayMethod === "Transcode") {
title = globalize.translate("Transcoding"); title = globalize.translate("Transcoding");
text.push(globalize.translate("MediaIsBeingConverted")); text.push(globalize.translate("MediaIsBeingConverted"));
if (session.TranscodingInfo && session.TranscodingInfo.TranscodeReasons && session.TranscodingInfo.TranscodeReasons.length) { if (session.TranscodingInfo && session.TranscodingInfo.TranscodeReasons && session.TranscodingInfo.TranscodeReasons.length) {
text.push("<br/>"); text.push("<br/>");
text.push(globalize.translate("LabelReasonForTranscoding")); text.push(globalize.translate("LabelReasonForTranscoding"));
session.TranscodingInfo.TranscodeReasons.forEach(function (transcodeReason) { session.TranscodingInfo.TranscodeReasons.forEach(function (transcodeReason) {
text.push(globalize.translate("" + transcodeReason)); text.push(globalize.translate(transcodeReason));
}); });
} }
} }
@ -240,10 +236,6 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
var nowPlayingItem = session.NowPlayingItem; var nowPlayingItem = session.NowPlayingItem;
var className = "scalableCard card activeSession backdropCard backdropCard-scalable"; var className = "scalableCard card activeSession backdropCard backdropCard-scalable";
if (session.TranscodingInfo && session.TranscodingInfo.CompletionPercentage) {
className += " transcodingSession";
}
html += '<div class="' + className + '" id="' + rowId + '">'; html += '<div class="' + className + '" id="' + rowId + '">';
html += '<div class="cardBox visualCardBox">'; html += '<div class="cardBox visualCardBox">';
html += '<div class="cardScalable visualCardBox-cardScalable">'; html += '<div class="cardScalable visualCardBox-cardScalable">';
@ -289,11 +281,17 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
if (nowPlayingItem && nowPlayingItem.RunTimeTicks) { if (nowPlayingItem && nowPlayingItem.RunTimeTicks) {
var percent = 100 * (session.PlayState.PositionTicks || 0) / nowPlayingItem.RunTimeTicks; var percent = 100 * (session.PlayState.PositionTicks || 0) / nowPlayingItem.RunTimeTicks;
html += indicators.getProgressHtml(percent, { containerClass: "playbackProgress" }); html += indicators.getProgressHtml(percent, { containerClass: "playbackProgress" });
} else {
// need to leave the element in just in case the device starts playback
html += indicators.getProgressHtml(0, { containerClass: "playbackProgress hide" });
} }
if (session.TranscodingInfo && session.TranscodingInfo.CompletionPercentage) { if (session.TranscodingInfo && session.TranscodingInfo.CompletionPercentage) {
var percent = session.TranscodingInfo.CompletionPercentage.toFixed(1); var percent = session.TranscodingInfo.CompletionPercentage.toFixed(1);
html += indicators.getProgressHtml(percent, { containerClass: "transcodingProgress" }); html += indicators.getProgressHtml(percent, { containerClass: "transcodingProgress" });
} else {
// same issue as playbackProgress element above
html += indicators.getProgressHtml(0, { containerClass: "transcodingProgress hide" });
} }
html += "</div>"; html += "</div>";
@ -316,8 +314,8 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
html += '<div class="flex align-items-center justify-content-center">'; html += '<div class="flex align-items-center justify-content-center">';
var userImage = DashboardPage.getUserImage(session); var userImage = DashboardPage.getUserImage(session);
html += userImage ? '<img style="height:1.71em;border-radius:50px;margin-right:.5em;" src="' + userImage + '" />' : '<div style="height:1.71em;"></div>'; html += userImage ? '<img style="height:1.71em;border-radius:50px;margin-right:.5em;" src="' + userImage + '" />' : '<div style="height:1.71em;"></div>';
html += '<div class="sessionUserName" style="text-transform:uppercase;">'; html += '<div class="sessionUserName">';
html += DashboardPage.getUsersHtml(session) || "&nbsp;"; html += DashboardPage.getUsersHtml(session);
html += "</div>"; html += "</div>";
html += "</div>"; html += "</div>";
html += "</div>"; html += "</div>";
@ -328,7 +326,6 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
parentElement.insertAdjacentHTML("beforeend", html); parentElement.insertAdjacentHTML("beforeend", html);
var deadSessionElem = parentElement.querySelector(".deadSession"); var deadSessionElem = parentElement.querySelector(".deadSession");
if (deadSessionElem) { if (deadSessionElem) {
deadSessionElem.parentNode.removeChild(deadSessionElem); deadSessionElem.parentNode.removeChild(deadSessionElem);
} }
@ -398,13 +395,12 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
} }
if (showTranscodingInfo) { if (showTranscodingInfo) {
var line = []; var line = [];
if (session.TranscodingInfo) { if (session.TranscodingInfo) {
if (session.TranscodingInfo.Bitrate) { if (session.TranscodingInfo.Bitrate) {
if (session.TranscodingInfo.Bitrate > 1e6) { if (session.TranscodingInfo.Bitrate > 1e6) {
line.push((session.TranscodingInfo.Bitrate / 1e6).toFixed(1) + " Mbps"); line.push((session.TranscodingInfo.Bitrate / 1e6).toFixed(1) + " Mbps");
} else { } else {
line.push(Math.floor(session.TranscodingInfo.Bitrate / 1e3) + " kbps"); line.push(Math.floor(session.TranscodingInfo.Bitrate / 1e3) + " Kbps");
} }
} }
@ -426,7 +422,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
} }
} }
return html || "&nbsp;"; return html;
}, },
getSessionNowPlayingTime: function (session) { getSessionNowPlayingTime: function (session) {
var nowPlayingItem = session.NowPlayingItem; var nowPlayingItem = session.NowPlayingItem;
@ -436,7 +432,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
if (session.PlayState.PositionTicks) { if (session.PlayState.PositionTicks) {
html += datetime.getDisplayRunningTime(session.PlayState.PositionTicks); html += datetime.getDisplayRunningTime(session.PlayState.PositionTicks);
} else { } else {
html += "--:--:--"; html += "0:00";
} }
html += " / "; html += " / ";
@ -444,10 +440,8 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
if (nowPlayingItem && nowPlayingItem.RunTimeTicks) { if (nowPlayingItem && nowPlayingItem.RunTimeTicks) {
html += datetime.getDisplayRunningTime(nowPlayingItem.RunTimeTicks); html += datetime.getDisplayRunningTime(nowPlayingItem.RunTimeTicks);
} else { } else {
html += "--:--:--"; html += "0:00";
} }
return html;
} }
return html; return html;
@ -488,8 +482,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
maxWidth: 130, maxWidth: 130,
type: "Logo" type: "Logo"
}); });
} else { } else if (nowPlayingItem.ParentLogoImageTag) {
if (nowPlayingItem.ParentLogoImageTag) {
imgUrl = ApiClient.getScaledImageUrl(nowPlayingItem.ParentLogoItemId, { imgUrl = ApiClient.getScaledImageUrl(nowPlayingItem.ParentLogoItemId, {
tag: nowPlayingItem.ParentLogoImageTag, tag: nowPlayingItem.ParentLogoImageTag,
maxHeight: 24, maxHeight: 24,
@ -497,7 +490,6 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
type: "Logo" type: "Logo"
}); });
} }
}
if (imgUrl) { if (imgUrl) {
topText = '<img src="' + imgUrl + '" style="max-height:24px;max-width:130px;" />'; topText = '<img src="' + imgUrl + '" style="max-height:24px;max-width:130px;" />';
@ -510,7 +502,6 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
}, },
getUsersHtml: function (session) { getUsersHtml: function (session) {
var html = []; var html = [];
if (session.UserId) { if (session.UserId) {
html.push(session.UserName); html.push(session.UserName);
} }
@ -534,8 +525,8 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
}, },
updateSession: function (row, session) { updateSession: function (row, session) {
row.classList.remove("deadSession"); row.classList.remove("deadSession");
var nowPlayingItem = session.NowPlayingItem;
var nowPlayingItem = session.NowPlayingItem;
if (nowPlayingItem) { if (nowPlayingItem) {
row.classList.add("playingSession"); row.classList.add("playingSession");
} else { } else {
@ -555,7 +546,6 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
} }
var btnSessionPlayPause = row.querySelector(".btnSessionPlayPause"); var btnSessionPlayPause = row.querySelector(".btnSessionPlayPause");
if (session.ServerId && nowPlayingItem && session.SupportsRemoteControl && session.DeviceId !== connectionManager.deviceId()) { if (session.ServerId && nowPlayingItem && session.SupportsRemoteControl && session.DeviceId !== connectionManager.deviceId()) {
btnSessionPlayPause.classList.remove("hide"); btnSessionPlayPause.classList.remove("hide");
row.querySelector(".btnSessionStop").classList.remove("hide"); row.querySelector(".btnSessionStop").classList.remove("hide");
@ -572,7 +562,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
row.querySelector(".sessionNowPlayingStreamInfo").innerHTML = DashboardPage.getSessionNowPlayingStreamInfo(session); row.querySelector(".sessionNowPlayingStreamInfo").innerHTML = DashboardPage.getSessionNowPlayingStreamInfo(session);
row.querySelector(".sessionNowPlayingTime").innerHTML = DashboardPage.getSessionNowPlayingTime(session); row.querySelector(".sessionNowPlayingTime").innerHTML = DashboardPage.getSessionNowPlayingTime(session);
row.querySelector(".sessionUserName").innerHTML = DashboardPage.getUsersHtml(session) || "&nbsp;"; row.querySelector(".sessionUserName").innerHTML = DashboardPage.getUsersHtml(session);
row.querySelector(".sessionAppSecondaryText").innerHTML = DashboardPage.getAppSecondaryText(session); row.querySelector(".sessionAppSecondaryText").innerHTML = DashboardPage.getAppSecondaryText(session);
row.querySelector(".sessionTranscodingFramerate").innerHTML = session.TranscodingInfo && session.TranscodingInfo.Framerate ? session.TranscodingInfo.Framerate + " fps" : ""; row.querySelector(".sessionTranscodingFramerate").innerHTML = session.TranscodingInfo && session.TranscodingInfo.Framerate ? session.TranscodingInfo.Framerate + " fps" : "";
var nowPlayingName = DashboardPage.getNowPlayingName(session); var nowPlayingName = DashboardPage.getNowPlayingName(session);
@ -584,27 +574,19 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
} }
var playbackProgressElem = row.querySelector(".playbackProgress"); var playbackProgressElem = row.querySelector(".playbackProgress");
if (playbackProgressElem) {
if (nowPlayingItem && nowPlayingItem.RunTimeTicks) { if (nowPlayingItem && nowPlayingItem.RunTimeTicks) {
var position = session.PlayState.PositionTicks || 0; var percent = 100 * (session.PlayState.PositionTicks || 0) / nowPlayingItem.RunTimeTicks;
var value = 100 * position / nowPlayingItem.RunTimeTicks; html += indicators.getProgressHtml(percent, { containerClass: "playbackProgress" });
playbackProgressElem.classList.remove("hide");
playbackProgressElem.value = value;
} else { } else {
playbackProgressElem.classList.add("hide"); html += indicators.getProgressHtml(0, { containerClass: "playbackProgress hide" });
}
} }
var transcodingProgress = row.querySelector(".transcodingProgress"); var transcodingProgress = row.querySelector(".transcodingProgress");
if (session.TranscodingInfo && session.TranscodingInfo.CompletionPercentage) { if (session.TranscodingInfo && session.TranscodingInfo.CompletionPercentage) {
row.classList.add("transcodingSession"); var percent = session.TranscodingInfo.CompletionPercentage.toFixed(1);
transcodingProgress.value = session.TranscodingInfo.CompletionPercentage; html += indicators.getProgressHtml(percent, { containerClass: "transcodingProgress" });
transcodingProgress.classList.remove("hide");
} else { } else {
transcodingProgress.classList.add("hide"); html += indicators.getProgressHtml(0, { containerClass: "transcodingProgress hide" });
row.classList.remove("transcodingSession");
} }
var imgUrl = DashboardPage.getNowPlayingImageUrl(nowPlayingItem) || ""; var imgUrl = DashboardPage.getNowPlayingImageUrl(nowPlayingItem) || "";
@ -692,6 +674,14 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
}); });
} }
if (item && item.AlbumPrimaryImageTag) {
return ApiClient.getScaledImageUrl(item.AlbumId, {
type: "Primary",
width: 275,
tag: item.AlbumPrimaryImageTag
});
}
return null; return null;
}, },
systemUpdateTaskKey: "SystemUpdateTask", systemUpdateTaskKey: "SystemUpdateTask",
@ -787,7 +777,6 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
loading.show(); loading.show();
pollForInfo(page, apiClient); pollForInfo(page, apiClient);
DashboardPage.startInterval(apiClient); DashboardPage.startInterval(apiClient);
// TODO we currently don't support packages and thus these events are useless
events.on(serverNotifications, "RestartRequired", onRestartRequired); events.on(serverNotifications, "RestartRequired", onRestartRequired);
events.on(serverNotifications, "ServerShuttingDown", onServerShuttingDown); events.on(serverNotifications, "ServerShuttingDown", onServerShuttingDown);
events.on(serverNotifications, "ServerRestarting", onServerRestarting); events.on(serverNotifications, "ServerRestarting", onServerRestarting);

View file

@ -10,7 +10,7 @@ define(["jQuery", "loading", "globalize", "dom", "libraryMenu"], function($, loa
$("#selectThreadCount", page).val(config.EncodingThreadCount); $("#selectThreadCount", page).val(config.EncodingThreadCount);
$("#txtDownMixAudioBoost", page).val(config.DownMixAudioBoost); $("#txtDownMixAudioBoost", page).val(config.DownMixAudioBoost);
page.querySelector(".txtEncoderPath").value = config.EncoderAppPathDisplay || ""; page.querySelector(".txtEncoderPath").value = config.EncoderAppPathDisplay || "";
$("#txtTranscodingTempPath", page).val(config.TranscodingTempPath || ""); $("#txtTranscodingTempPath", page).val(systemInfo.TranscodingTempPath || "");
$("#txtVaapiDevice", page).val(config.VaapiDevice || ""); $("#txtVaapiDevice", page).val(config.VaapiDevice || "");
page.querySelector("#selectH264Preset").value = config.H264Preset || ""; page.querySelector("#selectH264Preset").value = config.H264Preset || "";
page.querySelector("#txtH264Crf").value = config.H264Crf || ""; page.querySelector("#txtH264Crf").value = config.H264Crf || "";

View file

@ -12,13 +12,13 @@
<div class="selectContainer"> <div class="selectContainer">
<select is="emby-select" id="selectVideoDecoder" label="${LabelHardwareAccelerationType}"> <select is="emby-select" id="selectVideoDecoder" label="${LabelHardwareAccelerationType}">
<option value="">${OptionNone}</option> <option value="">${OptionNone}</option>
<option value="amf">AMD AMF (experimental)</option> <option value="amf">AMD AMF</option>
<option value="qsv">Intel Quick Sync (experimental)</option> <option value="qsv">Intel Quick Sync</option>
<option value="mediacodec">MediaCodec Android (experimental)</option> <option value="mediacodec">MediaCodec Android</option>
<option value="omx">OpenMAX OMX (experimental)</option> <option value="omx">OpenMAX OMX</option>
<option value="nvenc">Nvidia NVENC (experimental)</option> <option value="nvenc">Nvidia NVENC</option>
<option value="vaapi">Video Acceleration API (VA API) (experimental)</option> <option value="vaapi">Video Acceleration API (VAAPI)</option>
<option value="h264_v4l2m2m">Exynos V4L2 MFC Encoder (experimental)</option> <option value="h264_v4l2m2m">Exynos V4L2 MFC</option>
</select> </select>
<div class="fieldDescription">${LabelHardwareAccelerationTypeHelp}</div> <div class="fieldDescription">${LabelHardwareAccelerationTypeHelp}</div>
</div> </div>

View file

@ -782,7 +782,6 @@ var AppInfo = {};
define("displaySettings", [componentsPath + "/displaysettings/displaysettings"], returnFirstDependency); define("displaySettings", [componentsPath + "/displaysettings/displaysettings"], returnFirstDependency);
define("playbackSettings", [componentsPath + "/playbacksettings/playbacksettings"], returnFirstDependency); define("playbackSettings", [componentsPath + "/playbacksettings/playbacksettings"], returnFirstDependency);
define("homescreenSettings", [componentsPath + "/homescreensettings/homescreensettings"], returnFirstDependency); define("homescreenSettings", [componentsPath + "/homescreensettings/homescreensettings"], returnFirstDependency);
define("homescreenSettingsDialog", [componentsPath + "/homescreensettings/homescreensettingsdialog"], returnFirstDependency);
define("playbackManager", [componentsPath + "/playback/playbackmanager"], getPlaybackManager); define("playbackManager", [componentsPath + "/playback/playbackmanager"], getPlaybackManager);
define("layoutManager", [componentsPath + "/layoutManager", "apphost"], getLayoutManager); define("layoutManager", [componentsPath + "/layoutManager", "apphost"], getLayoutManager);
define("homeSections", [componentsPath + "/homesections/homesections"], returnFirstDependency); define("homeSections", [componentsPath + "/homesections/homesections"], returnFirstDependency);

View file

@ -19,7 +19,7 @@
"AllEpisodes": "All episodes", "AllEpisodes": "All episodes",
"AllLanguages": "All languages", "AllLanguages": "All languages",
"AllLibraries": "All libraries", "AllLibraries": "All libraries",
"AllowHWTranscodingHelp": "If enabled, allow the tuner to transcode streams on the fly. This may help reduce transcoding required by Jellyfin Server.", "AllowHWTranscodingHelp": "Allow the tuner to transcode streams on the fly. This may help reduce transcoding required by the server.",
"AllowMediaConversion": "Allow media conversion", "AllowMediaConversion": "Allow media conversion",
"AllowMediaConversionHelp": "Grant or deny access to the convert media feature.", "AllowMediaConversionHelp": "Grant or deny access to the convert media feature.",
"AllowOnTheFlySubtitleExtraction": "Allow subtitle extraction on the fly", "AllowOnTheFlySubtitleExtraction": "Allow subtitle extraction on the fly",
@ -55,7 +55,7 @@
"BoxRear": "Box (rear)", "BoxRear": "Box (rear)",
"Browse": "Browse", "Browse": "Browse",
"BrowsePluginCatalogMessage": "Browse our plugin catalog to view available plugins.", "BrowsePluginCatalogMessage": "Browse our plugin catalog to view available plugins.",
"BurnSubtitlesHelp": "Determines if the server should burn in subtitles when converting video depending on the subtitles format. Avoiding burning in subtitles will improve server performance. Select Auto to burn image based formats (e.g. VOBSUB, PGS, SUB/IDX, etc.) as well as certain ASS/SSA subtitles.", "BurnSubtitlesHelp": "Determines if the server should burn in subtitles when converting video depending on the subtitle format. Avoiding burning in subtitles will improve server performance. Select Auto to burn image based formats (VOBSUB, PGS, SUB/IDX, etc) and certain ASS/SSA subtitles.",
"ButtonAdd": "Add", "ButtonAdd": "Add",
"ButtonAddMediaLibrary": "Add Media Library", "ButtonAddMediaLibrary": "Add Media Library",
"ButtonAddScheduledTaskTrigger": "Add Trigger", "ButtonAddScheduledTaskTrigger": "Add Trigger",
@ -184,7 +184,7 @@
"DetectingDevices": "Detecting devices", "DetectingDevices": "Detecting devices",
"DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.", "DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.",
"DirectPlaying": "Direct playing", "DirectPlaying": "Direct playing",
"DirectStreamHelp1": "The media is compatible with the device regarding resolution and media type (H.264, AC3, etc.), but is in an incompatible file container (.mkv, .avi, .wmv, etc.). The video will be re-packaged on the fly before streaming it to the device.", "DirectStreamHelp1": "The media is compatible with the device regarding resolution and media type (H.264, AC3, etc), but is in an incompatible file container (mkv, avi, wmv, etc). The video will be re-packaged on the fly before streaming it to the device.",
"DirectStreamHelp2": "Direct Streaming a file uses very little processing power without any loss in video quality.", "DirectStreamHelp2": "Direct Streaming a file uses very little processing power without any loss in video quality.",
"DirectStreaming": "Direct streaming", "DirectStreaming": "Direct streaming",
"Director": "Director", "Director": "Director",
@ -198,7 +198,7 @@
"DisplayInMyMedia": "Display on home screen", "DisplayInMyMedia": "Display on home screen",
"DisplayInOtherHomeScreenSections": "Display in home screen sections such as latest media and continue watching", "DisplayInOtherHomeScreenSections": "Display in home screen sections such as latest media and continue watching",
"DisplayMissingEpisodesWithinSeasons": "Display missing episodes within seasons", "DisplayMissingEpisodesWithinSeasons": "Display missing episodes within seasons",
"DisplayMissingEpisodesWithinSeasonsHelp": "This must also be enabled for TV libraries in Jellyfin Server setup.", "DisplayMissingEpisodesWithinSeasonsHelp": "This must also be enabled for TV libraries in the server configuration.",
"DisplayModeHelp": "Select the type of screen you're running Jellyfin on.", "DisplayModeHelp": "Select the type of screen you're running Jellyfin on.",
"DoNotRecord": "Do not record", "DoNotRecord": "Do not record",
"Down": "Down", "Down": "Down",
@ -211,24 +211,24 @@
"EditImages": "Edit images", "EditImages": "Edit images",
"EditMetadata": "Edit metadata", "EditMetadata": "Edit metadata",
"EditSubtitles": "Edit subtitles", "EditSubtitles": "Edit subtitles",
"EnableBackdrops": "Enable backdrops", "EnableBackdrops": "Backdrops",
"EnableBackdropsHelp": "If enabled, backdrops will be displayed in the background of some pages while browsing the library.", "EnableBackdropsHelp": "Display backdrops in the background of some pages while browsing the library.",
"EnableCinemaMode": "Enable cinema mode", "EnableCinemaMode": "Cinema mode",
"EnableColorCodedBackgrounds": "Enable color coded backgrounds", "EnableColorCodedBackgrounds": "Color coded backgrounds",
"EnableDisplayMirroring": "Enable display mirroring", "EnableDisplayMirroring": "Display mirroring",
"EnableExternalVideoPlayers": "Enable external video players", "EnableExternalVideoPlayers": "External video players",
"EnableExternalVideoPlayersHelp": "An external player menu will be shown when starting video playback.", "EnableExternalVideoPlayersHelp": "An external player menu will be shown when starting video playback.",
"EnableHardwareEncoding": "Enable hardware encoding", "EnableHardwareEncoding": "Enable hardware encoding",
"EnableNextVideoInfoOverlay": "Enable next video info during playback", "EnableNextVideoInfoOverlay": "Show next video info during playback",
"EnableNextVideoInfoOverlayHelp": "At the end of a video, display info about the next video coming up in the current playlist.", "EnableNextVideoInfoOverlayHelp": "At the end of a video, display info about the next video coming up in the current playlist.",
"EnablePhotos": "Enable photos", "EnablePhotos": "Display photos",
"EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", "EnablePhotosHelp": "Images will be detected and displayed alongside other media files.",
"EnableStreamLooping": "Auto-loop live streams", "EnableStreamLooping": "Auto-loop live streams",
"EnableStreamLoopingHelp": "Enable this if live streams only contain a few seconds of data and need to be continuously requested. Enabling this when not needed may cause problems.", "EnableStreamLoopingHelp": "Enable this if live streams only contain a few seconds of data and need to be continuously requested. Enabling this when not needed may cause problems.",
"EnableThemeSongs": "Enable theme songs", "EnableThemeSongs": "Theme songs",
"EnableThemeSongsHelp": "If enabled, theme songs will be played in the background while browsing the library.", "EnableThemeSongsHelp": "Play theme songs in the background while browsing the library.",
"EnableThemeVideos": "Enable theme videos", "EnableThemeVideos": "Theme videos",
"EnableThemeVideosHelp": "If enabled, theme videos will be played in the background while browsing the library.", "EnableThemeVideosHelp": "Play theme videos in the background while browsing the library.",
"Ended": "Ended", "Ended": "Ended",
"EndsAtValue": "Ends at {0}", "EndsAtValue": "Ends at {0}",
"Episodes": "Episodes", "Episodes": "Episodes",
@ -244,7 +244,7 @@
"EveryNDays": "Every {0} days", "EveryNDays": "Every {0} days",
"ExitFullscreen": "Exit full screen", "ExitFullscreen": "Exit full screen",
"ExtraLarge": "Extra large", "ExtraLarge": "Extra large",
"ExtractChapterImagesHelp": "Extracting chapter images will allow clients to display graphical scene selection menus. The process can be slow, cpu-intensive and may require several gigabytes of space. It runs when videos are discovered, and also as a nightly scheduled task. The schedule is configurable in the scheduled tasks area. It is not recommended to run this task during peak usage hours.", "ExtractChapterImagesHelp": "Extracting chapter images will allow clients to display graphical scene selection menus. The process can be slow, resource intensive, and may require several gigabytes of space. It runs when videos are discovered, and also as a nightly scheduled task. The schedule is configurable in the scheduled tasks area. It is not recommended to run this task during peak usage hours.",
"Extras": "Extras", "Extras": "Extras",
"FFmpegSavePathNotFound": "We're unable to locate FFmpeg using the path you've entered. FFprobe is also required and must exist in the same folder. These components are normally bundled together in the same download. Please check the path and try again.", "FFmpegSavePathNotFound": "We're unable to locate FFmpeg using the path you've entered. FFprobe is also required and must exist in the same folder. These components are normally bundled together in the same download. Please check the path and try again.",
"FastForward": "Fast-forward", "FastForward": "Fast-forward",
@ -259,9 +259,9 @@
"FolderTypeBooks": "Books", "FolderTypeBooks": "Books",
"FolderTypeMovies": "Movies", "FolderTypeMovies": "Movies",
"FolderTypeMusic": "Music", "FolderTypeMusic": "Music",
"FolderTypeMusicVideos": "Music videos", "FolderTypeMusicVideos": "Music Videos",
"FolderTypeTvShows": "TV Shows", "FolderTypeTvShows": "Shows",
"FolderTypeUnset": "Mixed content", "FolderTypeUnset": "Mixed Content",
"Folders": "Folders", "Folders": "Folders",
"ForAdditionalLiveTvOptions": "For additional Live TV providers, click on the Services tab to see the available options.", "ForAdditionalLiveTvOptions": "For additional Live TV providers, click on the Services tab to see the available options.",
"FormatValue": "Format: {0}", "FormatValue": "Format: {0}",
@ -544,7 +544,7 @@
"LabelAll": "All", "LabelAll": "All",
"LabelAllowHWTranscoding": "Allow hardware transcoding", "LabelAllowHWTranscoding": "Allow hardware transcoding",
"LabelAllowServerAutoRestart": "Allow the server to restart automatically to apply updates", "LabelAllowServerAutoRestart": "Allow the server to restart automatically to apply updates",
"LabelAllowServerAutoRestartHelp": "The server will only restart during idle periods, when no users are active.", "LabelAllowServerAutoRestartHelp": "The server will only restart during idle periods when no users are active.",
"LabelAllowedRemoteAddresses": "Remote IP address filter:", "LabelAllowedRemoteAddresses": "Remote IP address filter:",
"LabelAllowedRemoteAddressesMode": "Remote IP address filter mode:", "LabelAllowedRemoteAddressesMode": "Remote IP address filter mode:",
"LabelAppName": "App name", "LabelAppName": "App name",
@ -566,7 +566,7 @@
"LabelBirthYear": "Birth year:", "LabelBirthYear": "Birth year:",
"LabelBitrate": "Bitrate:", "LabelBitrate": "Bitrate:",
"LabelBlastMessageInterval": "Alive message interval (seconds)", "LabelBlastMessageInterval": "Alive message interval (seconds)",
"LabelBlastMessageIntervalHelp": "Determines the duration in seconds between server alive messages.", "LabelBlastMessageIntervalHelp": "Determines the duration in seconds between blast alive messages.",
"LabelBlockContentWithTags": "Block items with tags:", "LabelBlockContentWithTags": "Block items with tags:",
"LabelBurnSubtitles": "Burn subtitles:", "LabelBurnSubtitles": "Burn subtitles:",
"LabelCache": "Cache:", "LabelCache": "Cache:",
@ -610,7 +610,7 @@
"LabelDisplayOrder": "Display order:", "LabelDisplayOrder": "Display order:",
"LabelDisplaySpecialsWithinSeasons": "Display specials within seasons they aired in", "LabelDisplaySpecialsWithinSeasons": "Display specials within seasons they aired in",
"LabelDownMixAudioScale": "Audio boost when downmixing:", "LabelDownMixAudioScale": "Audio boost when downmixing:",
"LabelDownMixAudioScaleHelp": "Boost audio when downmixing. Set to 1 to preserve original volume value.", "LabelDownMixAudioScaleHelp": "Boost audio when downmixing. A value of one will preserve the original volume.",
"LabelDownloadLanguages": "Download languages:", "LabelDownloadLanguages": "Download languages:",
"LabelDropImageHere": "Drop image here, or click to browse.", "LabelDropImageHere": "Drop image here, or click to browse.",
"LabelDropShadow": "Drop shadow:", "LabelDropShadow": "Drop shadow:",
@ -628,7 +628,7 @@
"LabelEnableDlnaDebugLoggingHelp": "Create large log files and should only be used as needed for troubleshooting purposes.", "LabelEnableDlnaDebugLoggingHelp": "Create large log files and should only be used as needed for troubleshooting purposes.",
"LabelEnableDlnaPlayTo": "Enable DLNA Play To", "LabelEnableDlnaPlayTo": "Enable DLNA Play To",
"LabelEnableDlnaPlayToHelp": "Detect devices within your network and offer the ability to remote control them.", "LabelEnableDlnaPlayToHelp": "Detect devices within your network and offer the ability to remote control them.",
"LabelEnableDlnaServer": "Enable Dlna server", "LabelEnableDlnaServer": "Enable DLNA server",
"LabelEnableDlnaServerHelp": "Allows UPnP devices on your network to browse and play content.", "LabelEnableDlnaServerHelp": "Allows UPnP devices on your network to browse and play content.",
"LabelEnableHardwareDecodingFor": "Enable hardware decoding for:", "LabelEnableHardwareDecodingFor": "Enable hardware decoding for:",
"LabelEnableRealtimeMonitor": "Enable real time monitoring", "LabelEnableRealtimeMonitor": "Enable real time monitoring",
@ -644,22 +644,22 @@
"LabelBaseUrl": "Base URL:", "LabelBaseUrl": "Base URL:",
"LabelBaseUrlHelp": "You can add a custom subdirectory here to access the server from a more unique URL.", "LabelBaseUrlHelp": "You can add a custom subdirectory here to access the server from a more unique URL.",
"LabelExtractChaptersDuringLibraryScan": "Extract chapter images during the library scan", "LabelExtractChaptersDuringLibraryScan": "Extract chapter images during the library scan",
"LabelExtractChaptersDuringLibraryScanHelp": "If enabled, chapter images will be extracted when videos are imported during the library scan. If disabled they will be extracted during the chapter images scheduled task, allowing the regular library scan to complete faster.", "LabelExtractChaptersDuringLibraryScanHelp": "Generate chapter images when videos are imported during the library scan. Otherwise, they will be extracted during the chapter images scheduled task, allowing the regular library scan to complete faster.",
"LabelFailed": "Failed", "LabelFailed": "Failed",
"LabelFileOrUrl": "File or url:", "LabelFileOrUrl": "File or URL:",
"LabelFinish": "Finish", "LabelFinish": "Finish",
"LabelFolder": "Folder:", "LabelFolder": "Folder:",
"LabelFont": "Font:", "LabelFont": "Font:",
"LabelForgotPasswordUsernameHelp": "Enter your username, if you remember it.", "LabelForgotPasswordUsernameHelp": "Enter your username, if you remember it.",
"LabelFormat": "Format:", "LabelFormat": "Format:",
"LabelFriendlyName": "Friendly name:", "LabelFriendlyName": "Friendly name:",
"LabelServerNameHelp": "This name will be used to identify this server. If left blank, the computer name will be used.", "LabelServerNameHelp": "This name will be used to identify the server and will default to the server's computer name.",
"LabelGroupMoviesIntoCollections": "Group movies into collections", "LabelGroupMoviesIntoCollections": "Group movies into collections",
"LabelGroupMoviesIntoCollectionsHelp": "When displaying movie lists, movies belonging to a collection will be displayed as one grouped item.", "LabelGroupMoviesIntoCollectionsHelp": "When displaying movie lists, movies belonging to a collection will be displayed as one grouped item.",
"LabelH264Crf": "H264 encoding CRF:", "LabelH264Crf": "H264 encoding CRF:",
"LabelH264EncodingPreset": "H264 encoding preset:", "LabelH264EncodingPreset": "H264 encoding preset:",
"LabelHardwareAccelerationType": "Hardware acceleration:", "LabelHardwareAccelerationType": "Hardware acceleration:",
"LabelHardwareAccelerationTypeHelp": "Only available on supported systems.", "LabelHardwareAccelerationTypeHelp": "This is an experimental feature only available on supported systems.",
"LabelHomeNetworkQuality": "Home network quality:", "LabelHomeNetworkQuality": "Home network quality:",
"LabelHomeScreenSectionValue": "Home screen section {0}:", "LabelHomeScreenSectionValue": "Home screen section {0}:",
"LabelHttpsPort": "Local HTTPS port number:", "LabelHttpsPort": "Local HTTPS port number:",
@ -673,20 +673,20 @@
"LabelImageType": "Image type:", "LabelImageType": "Image type:",
"LabelImportOnlyFavoriteChannels": "Restrict to channels marked as favorite", "LabelImportOnlyFavoriteChannels": "Restrict to channels marked as favorite",
"LabelInNetworkSignInWithEasyPassword": "Enable in-network sign in with my easy pin code", "LabelInNetworkSignInWithEasyPassword": "Enable in-network sign in with my easy pin code",
"LabelInNetworkSignInWithEasyPasswordHelp": "If enabled, you'll be able to use your easy pin code to sign in to Jellyfin apps from inside your home network. Your regular password will only be needed away from home. If the pin code is left blank, you won't need a password within your home network.", "LabelInNetworkSignInWithEasyPasswordHelp": "Use the easy pin code to sign in to clients within your local network. Your regular password will only be needed away from home. If the pin code is left blank, you won't need a password within your home network.",
"LabelInternetQuality": "Internet quality:", "LabelInternetQuality": "Internet quality:",
"LabelKeepUpTo": "Keep up to:", "LabelKeepUpTo": "Keep up to:",
"LabelKidsCategories": "Children's categories:", "LabelKidsCategories": "Children's categories:",
"LabelKodiMetadataDateFormat": "Release date format:", "LabelKodiMetadataDateFormat": "Release date format:",
"LabelKodiMetadataDateFormatHelp": "All dates within nfo's will be read and written to using this format.", "LabelKodiMetadataDateFormatHelp": "All dates within NFO files will be parsed using this format.",
"LabelKodiMetadataEnableExtraThumbs": "Copy extrafanart into extrathumbs", "LabelKodiMetadataEnableExtraThumbs": "Copy extrafanart to extrathumbs field",
"LabelKodiMetadataEnableExtraThumbsHelp": "When downloading images they can be saved into both extrafanart and extrathumbs for maximum Kodi skin compatibility.", "LabelKodiMetadataEnableExtraThumbsHelp": "When downloading images they can be saved into both extrafanart and extrathumbs for maximum Kodi skin compatibility.",
"LabelKodiMetadataEnablePathSubstitution": "Enable path substitution", "LabelKodiMetadataEnablePathSubstitution": "Enable path substitution",
"LabelKodiMetadataEnablePathSubstitutionHelp": "Enables path substitution of image paths using the server's path substitution settings.", "LabelKodiMetadataEnablePathSubstitutionHelp": "Enables path substitution of image paths using the server's path substitution settings.",
"LabelKodiMetadataSaveImagePaths": "Save image paths within nfo files", "LabelKodiMetadataSaveImagePaths": "Save image paths within nfo files",
"LabelKodiMetadataSaveImagePathsHelp": "This is recommended if you have image file names that don't conform to Kodi guidelines.", "LabelKodiMetadataSaveImagePathsHelp": "This is recommended if you have image file names that don't conform to Kodi guidelines.",
"LabelKodiMetadataUser": "Save user watch data to nfo's for:", "LabelKodiMetadataUser": "Save user watch data to NFO files for:",
"LabelKodiMetadataUserHelp": "Enable this to save watch data to NFO files for other applications to utilize.", "LabelKodiMetadataUserHelp": "Save watch data to NFO files for other applications to utilize.",
"LabelLanNetworks": "LAN networks:", "LabelLanNetworks": "LAN networks:",
"LabelLanguage": "Language:", "LabelLanguage": "Language:",
"LabelLineup": "Lineup:", "LabelLineup": "Lineup:",
@ -697,7 +697,7 @@
"LabelLoginDisclaimerHelp": "A message that will be displayed at the bottom of the login page.", "LabelLoginDisclaimerHelp": "A message that will be displayed at the bottom of the login page.",
"LabelLogs": "Logs:", "LabelLogs": "Logs:",
"LabelManufacturer": "Manufacturer", "LabelManufacturer": "Manufacturer",
"LabelManufacturerUrl": "Manufacturer url", "LabelManufacturerUrl": "Manufacturer URL",
"LabelMatchType": "Match type:", "LabelMatchType": "Match type:",
"LabelMaxBackdropsPerItem": "Maximum number of backdrops per item:", "LabelMaxBackdropsPerItem": "Maximum number of backdrops per item:",
"LabelMaxChromecastBitrate": "Chromecast streaming quality:", "LabelMaxChromecastBitrate": "Chromecast streaming quality:",
@ -728,11 +728,11 @@
"LabelModelDescription": "Model description", "LabelModelDescription": "Model description",
"LabelModelName": "Model name", "LabelModelName": "Model name",
"LabelModelNumber": "Model number", "LabelModelNumber": "Model number",
"LabelModelUrl": "Model url", "LabelModelUrl": "Model URL",
"LabelMonitorUsers": "Monitor activity from:", "LabelMonitorUsers": "Monitor activity from:",
"LabelMovieCategories": "Movie categories:", "LabelMovieCategories": "Movie categories:",
"LabelMoviePrefix": "Movie prefix:", "LabelMoviePrefix": "Movie prefix:",
"LabelMoviePrefixHelp": "If a prefix is applied to movie titles, enter it here so that Jellyfin can handle it properly.", "LabelMoviePrefixHelp": "If a prefix is applied to movie titles, enter it here so the server can handle it properly.",
"LabelMovieRecordingPath": "Movie recording path (optional):", "LabelMovieRecordingPath": "Movie recording path (optional):",
"LabelMusicStreamingTranscodingBitrate": "Music transcoding bitrate:", "LabelMusicStreamingTranscodingBitrate": "Music transcoding bitrate:",
"LabelMusicStreamingTranscodingBitrateHelp": "Specify a max bitrate when streaming music", "LabelMusicStreamingTranscodingBitrateHelp": "Specify a max bitrate when streaming music",
@ -854,12 +854,12 @@
"LabelTranscodingAudioCodec": "Audio codec:", "LabelTranscodingAudioCodec": "Audio codec:",
"LabelTranscodingContainer": "Container:", "LabelTranscodingContainer": "Container:",
"LabelTranscodePath": "Transcode path:", "LabelTranscodePath": "Transcode path:",
"LabelTranscodingTempPathHelp": "This folder contains working files used by the transcoder. Specify a custom path, or leave empty to use the default within the server's data folder.", "LabelTranscodingTempPathHelp": "Specify a custom path for the transcode files served to clients. Leave blank to use the server default.",
"LabelTranscodes": "Transcodes:", "LabelTranscodes": "Transcodes:",
"LabelTranscodingFramerate": "Transcoding framerate:", "LabelTranscodingFramerate": "Transcoding framerate:",
"LabelTranscodingProgress": "Transcoding progress:", "LabelTranscodingProgress": "Transcoding progress:",
"LabelTranscodingThreadCount": "Transcoding thread count:", "LabelTranscodingThreadCount": "Transcoding thread count:",
"LabelTranscodingThreadCountHelp": "Select the maximum number of threads to use when transcoding. Reducing the thread count will lower cpu usage but may not convert fast enough for a smooth playback experience.", "LabelTranscodingThreadCountHelp": "Select the maximum number of threads to use when transcoding. Reducing the thread count will lower CPU usage but may not convert fast enough for a smooth playback experience.",
"LabelTranscodingVideoCodec": "Video codec:", "LabelTranscodingVideoCodec": "Video codec:",
"LabelTriggerType": "Trigger Type:", "LabelTriggerType": "Trigger Type:",
"LabelTunerIpAddress": "Tuner IP Address:", "LabelTunerIpAddress": "Tuner IP Address:",
@ -888,9 +888,9 @@
"LabelVideoBitrate": "Video bitrate:", "LabelVideoBitrate": "Video bitrate:",
"LabelVideoCodec": "Video codec:", "LabelVideoCodec": "Video codec:",
"LabelWeb": "Web: ", "LabelWeb": "Web: ",
"LabelXDlnaCap": "X-Dlna cap:", "LabelXDlnaCap": "X-DLNA cap:",
"LabelXDlnaCapHelp": "Determines the content of the X_DLNACAP element in the urn:schemas-dlna-org:device-1-0 namespace.", "LabelXDlnaCapHelp": "Determines the content of the X_DLNACAP element in the urn:schemas-dlna-org:device-1-0 namespace.",
"LabelXDlnaDoc": "X-Dlna doc:", "LabelXDlnaDoc": "X-DLNA doc:",
"LabelXDlnaDocHelp": "Determines the content of the X_DLNADOC element in the urn:schemas-dlna-org:device-1-0 namespace.", "LabelXDlnaDocHelp": "Determines the content of the X_DLNADOC element in the urn:schemas-dlna-org:device-1-0 namespace.",
"LabelYear": "Year:", "LabelYear": "Year:",
"LabelYourFirstName": "Your first name:", "LabelYourFirstName": "Your first name:",
@ -1005,7 +1005,7 @@
"MetadataSettingChangeHelp": "Changing metadata settings will affect new content that is added going forward. To refresh existing content, open the detail screen and click the refresh button, or perform bulk refreshes using the metadata manager.", "MetadataSettingChangeHelp": "Changing metadata settings will affect new content that is added going forward. To refresh existing content, open the detail screen and click the refresh button, or perform bulk refreshes using the metadata manager.",
"MinutesAfter": "minutes after", "MinutesAfter": "minutes after",
"MinutesBefore": "minutes before", "MinutesBefore": "minutes before",
"Mobile": "Mobile / Tablet", "Mobile": "Mobile",
"Monday": "Monday", "Monday": "Monday",
"MoreFromValue": "More from {0}", "MoreFromValue": "More from {0}",
"MoreUsersCanBeAddedLater": "More users can be added later from within the dashboard.", "MoreUsersCanBeAddedLater": "More users can be added later from within the dashboard.",
@ -1043,7 +1043,7 @@
"OneChannel": "One channel", "OneChannel": "One channel",
"OnlyForcedSubtitles": "Only forced subtitles", "OnlyForcedSubtitles": "Only forced subtitles",
"OnlyForcedSubtitlesHelp": "Only subtitles marked as forced will be loaded.", "OnlyForcedSubtitlesHelp": "Only subtitles marked as forced will be loaded.",
"OnlyImageFormats": "Only image formats (VOBSUB, PGS, SUB, etc.)", "OnlyImageFormats": "Only image formats (VOBSUB, PGS, SUB, etc)",
"Option3D": "3D", "Option3D": "3D",
"OptionAdminUsers": "Administrators", "OptionAdminUsers": "Administrators",
"OptionAlbum": "Album", "OptionAlbum": "Album",
@ -1094,7 +1094,7 @@
"OptionDisableUserHelp": "If disabled the server will not allow any connections from this user. Existing connections will be abruptly terminated.", "OptionDisableUserHelp": "If disabled the server will not allow any connections from this user. Existing connections will be abruptly terminated.",
"OptionDislikes": "Dislikes", "OptionDislikes": "Dislikes",
"OptionDisplayFolderView": "Display a folder view to show plain media folders", "OptionDisplayFolderView": "Display a folder view to show plain media folders",
"OptionDisplayFolderViewHelp": "If enabled, Jellyfin apps will display a Folders category alongside your media library. This is useful if you'd like to have plain folder views.", "OptionDisplayFolderViewHelp": "Display folders alongside your other media libraries. This can be useful if you'd like to have a plain folder view.",
"OptionDownloadArtImage": "Art", "OptionDownloadArtImage": "Art",
"OptionDownloadBackImage": "Back", "OptionDownloadBackImage": "Back",
"OptionDownloadBannerImage": "Banner", "OptionDownloadBannerImage": "Banner",
@ -1113,7 +1113,7 @@
"OptionEnableAccessToAllLibraries": "Enable access to all libraries", "OptionEnableAccessToAllLibraries": "Enable access to all libraries",
"OptionEnableAutomaticServerUpdates": "Enable automatic server updates", "OptionEnableAutomaticServerUpdates": "Enable automatic server updates",
"OptionEnableExternalContentInSuggestions": "Enable external content in suggestions", "OptionEnableExternalContentInSuggestions": "Enable external content in suggestions",
"OptionEnableExternalContentInSuggestionsHelp": "Allow internet trailers and live tv programs to be included within suggested content.", "OptionEnableExternalContentInSuggestionsHelp": "Allow internet trailers and live TV programs to be included within suggested content.",
"OptionEnableForAllTuners": "Enable for all tuner devices", "OptionEnableForAllTuners": "Enable for all tuner devices",
"OptionEnableM2tsMode": "Enable M2ts mode", "OptionEnableM2tsMode": "Enable M2ts mode",
"OptionEnableM2tsModeHelp": "Enable m2ts mode when encoding to mpegts.", "OptionEnableM2tsModeHelp": "Enable m2ts mode when encoding to mpegts.",
@ -1132,8 +1132,8 @@
"OptionHasTrailer": "Trailer", "OptionHasTrailer": "Trailer",
"OptionHideUser": "Hide this user from login screens", "OptionHideUser": "Hide this user from login screens",
"OptionHideUserFromLoginHelp": "Useful for private or hidden administrator accounts. The user will need to sign in manually by entering their username and password.", "OptionHideUserFromLoginHelp": "Useful for private or hidden administrator accounts. The user will need to sign in manually by entering their username and password.",
"OptionHlsSegmentedSubtitles": "Hls segmented subtitles", "OptionHlsSegmentedSubtitles": "HLS segmented subtitles",
"OptionHomeVideos": "Home videos & photos", "OptionHomeVideos": "Photos",
"OptionIgnoreTranscodeByteRangeRequests": "Ignore transcode byte range requests", "OptionIgnoreTranscodeByteRangeRequests": "Ignore transcode byte range requests",
"OptionIgnoreTranscodeByteRangeRequestsHelp": "If enabled, these requests will be honored but will ignore the byte range header.", "OptionIgnoreTranscodeByteRangeRequestsHelp": "If enabled, these requests will be honored but will ignore the byte range header.",
"OptionImdbRating": "IMDb Rating", "OptionImdbRating": "IMDb Rating",
@ -1142,7 +1142,7 @@
"OptionLikes": "Likes", "OptionLikes": "Likes",
"OptionList": "List", "OptionList": "List",
"OptionLoginAttemptsBeforeLockout": "Determines how many incorrect login attempts can be made before lockout occurs.", "OptionLoginAttemptsBeforeLockout": "Determines how many incorrect login attempts can be made before lockout occurs.",
"OptionLoginAttemptsBeforeLockoutHelp": "A value of zero means inheriting the default of three attempts for normal users and five for admin. Setting this to -1 will disable the feature.", "OptionLoginAttemptsBeforeLockoutHelp": "A value of zero means inheriting the default of three attempts for normal users and five for administrators. Setting this to -1 will disable the feature.",
"OptionMax": "Max", "OptionMax": "Max",
"OptionMissingEpisode": "Missing Episodes", "OptionMissingEpisode": "Missing Episodes",
"OptionMonday": "Monday", "OptionMonday": "Monday",
@ -1327,7 +1327,7 @@
"StopRecording": "Stop recording", "StopRecording": "Stop recording",
"Studios": "Studios", "Studios": "Studios",
"SubtitleAppearanceSettingsAlsoPassedToCastDevices": "These settings also apply to any Chromecast playback started by this device.", "SubtitleAppearanceSettingsAlsoPassedToCastDevices": "These settings also apply to any Chromecast playback started by this device.",
"SubtitleAppearanceSettingsDisclaimer": "These settings will not apply to graphical subtitles (PGS, DVD, etc), or subtitles that have their own styles embedded (ASS/SSA).", "SubtitleAppearanceSettingsDisclaimer": "These settings will not apply to graphical subtitles (PGS, DVD, etc) or ASS/SSA subtitles that embed their own styles.",
"SubtitleDownloadersHelp": "Enable and rank your preferred subtitle downloaders in order of priority.", "SubtitleDownloadersHelp": "Enable and rank your preferred subtitle downloaders in order of priority.",
"SubtitleOffset": "Subtitle Offset", "SubtitleOffset": "Subtitle Offset",
"Subtitles": "Subtitles", "Subtitles": "Subtitles",