1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

Merge branch 'master' into polyfill-lint

This commit is contained in:
Julien Machiels 2020-04-10 06:28:59 +02:00 committed by GitHub
commit acbe7730b8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
84 changed files with 1172 additions and 809 deletions

View file

@ -2,8 +2,7 @@ trigger:
batch: true batch: true
branches: branches:
include: include:
- master - '*'
- release-*
tags: tags:
include: include:
- '*' - '*'
@ -13,12 +12,9 @@ pr:
- '*' - '*'
jobs: jobs:
- job: build - job: Build
displayName: 'Build' displayName: 'Build'
pool:
vmImage: 'ubuntu-latest'
strategy: strategy:
matrix: matrix:
Development: Development:
@ -27,7 +23,9 @@ jobs:
BuildConfiguration: production BuildConfiguration: production
Standalone: Standalone:
BuildConfiguration: standalone BuildConfiguration: standalone
maxParallel: 3
pool:
vmImage: 'ubuntu-latest'
steps: steps:
- task: NodeTool@0 - task: NodeTool@0
@ -63,16 +61,14 @@ jobs:
- script: 'mv dist jellyfin-web' - script: 'mv dist jellyfin-web'
displayName: 'Rename Directory' displayName: 'Rename Directory'
condition: succeeded()
- task: PublishPipelineArtifact@1 - task: PublishPipelineArtifact@1
displayName: 'Publish Release' displayName: 'Publish Release'
condition: succeeded()
inputs: inputs:
targetPath: '$(Build.SourcesDirectory)/jellyfin-web' targetPath: '$(Build.SourcesDirectory)/jellyfin-web'
artifactName: 'jellyfin-web-$(BuildConfiguration)' artifactName: 'jellyfin-web-$(BuildConfiguration)'
- job: lint - job: Lint
displayName: 'Lint' displayName: 'Lint'
pool: pool:

View file

@ -75,7 +75,7 @@ rules:
no-multiple-empty-lines: ["error", { "max": 1 }] no-multiple-empty-lines: ["error", { "max": 1 }]
no-trailing-spaces: ["error"] no-trailing-spaces: ["error"]
one-var: ["error", "never"] one-var: ["error", "never"]
semi: ["warn"] semi: ["error"]
space-before-blocks: ["error"] space-before-blocks: ["error"]
# TODO: Fix warnings and remove these rules # TODO: Fix warnings and remove these rules
no-redeclare: ["warn"] no-redeclare: ["warn"]

3
babel.config.json Normal file
View file

@ -0,0 +1,3 @@
{
"presets": ["@babel/preset-env"]
}

View file

@ -55,6 +55,7 @@
}, },
"dependencies": { "dependencies": {
"alameda": "^1.4.0", "alameda": "^1.4.0",
"classlist.js": "https://github.com/eligrey/classList.js/archive/1.2.20180112.tar.gz",
"core-js": "^3.6.4", "core-js": "^3.6.4",
"date-fns": "^2.11.1", "date-fns": "^2.11.1",
"document-register-element": "^1.14.3", "document-register-element": "^1.14.3",
@ -66,7 +67,7 @@
"jellyfin-noto": "https://github.com/jellyfin/jellyfin-noto", "jellyfin-noto": "https://github.com/jellyfin/jellyfin-noto",
"jquery": "^3.4.1", "jquery": "^3.4.1",
"jstree": "^3.3.7", "jstree": "^3.3.7",
"libass-wasm": "https://github.com/jellyfin/JavascriptSubtitlesOctopus#4.0.0-jf", "libass-wasm": "https://github.com/jellyfin/JavascriptSubtitlesOctopus#4.0.0-jf-cordova",
"material-design-icons-iconfont": "^5.0.1", "material-design-icons-iconfont": "^5.0.1",
"native-promise-only": "^0.8.0-a", "native-promise-only": "^0.8.0-a",
"page": "^1.11.5", "page": "^1.11.5",
@ -91,9 +92,12 @@
"src/components/filedownloader.js", "src/components/filedownloader.js",
"src/components/filesystem.js", "src/components/filesystem.js",
"src/components/input/keyboardnavigation.js", "src/components/input/keyboardnavigation.js",
"src/components/scrollManager.js",
"src/components/sanatizefilename.js", "src/components/sanatizefilename.js",
"src/scripts/settings/webSettings.js", "src/scripts/settings/webSettings.js",
"src/components/scrollManager.js", "src/scripts/settings/appSettings.js",
"src/scripts/settings/userSettings.js",
"src/scripts/imagehelper.js",
"src/scripts/dfnshelper.js" "src/scripts/dfnshelper.js"
], ],
"plugins": [ "plugins": [

View file

@ -242,7 +242,7 @@
} }
.mainDrawer-scrollContainer { .mainDrawer-scrollContainer {
padding-bottom: 10vh; margin-bottom: 10vh;
} }
@media all and (min-width: 40em) { @media all and (min-width: 40em) {

View file

@ -13,7 +13,7 @@ _define("document-register-element", function() {
// fetch // fetch
var fetch = require("whatwg-fetch"); var fetch = require("whatwg-fetch");
_define("fetch", function() { _define("fetch", function() {
return fetch return fetch;
}); });
// query-string // query-string
@ -113,6 +113,12 @@ _define("polyfill", function () {
return polyfill; return polyfill;
}); });
// domtokenlist-shim
var classlist = require("classlist.js");
_define("classlist-polyfill", function () {
return classlist;
});
// Date-FNS // Date-FNS
var date_fns = require("date-fns"); var date_fns = require("date-fns");
_define("date-fns", function () { _define("date-fns", function () {

View file

@ -16,7 +16,7 @@ define(["events", "globalize", "dom", "date-fns", "dfnshelper", "userSettings",
html += '<i class="listItemIcon material-icons" style="width:2em!important;height:2em!important;padding:0;color:transparent;background-color:' + color + ";background-image:url('" + apiClient.getUserImageUrl(entry.UserId, { html += '<i class="listItemIcon material-icons" style="width:2em!important;height:2em!important;padding:0;color:transparent;background-color:' + color + ";background-image:url('" + apiClient.getUserImageUrl(entry.UserId, {
type: "Primary", type: "Primary",
tag: entry.UserPrimaryImageTag tag: entry.UserPrimaryImageTag
}) + "');background-repeat:no-repeat;background-position:center center;background-size: cover;\">dvr</i>" }) + "');background-repeat:no-repeat;background-position:center center;background-size: cover;\">dvr</i>";
} else { } else {
html += '<i class="listItemIcon material-icons" style="background-color:' + color + '">' + icon + '</i>'; html += '<i class="listItemIcon material-icons" style="background-color:' + color + '">' + icon + '</i>';
} }

View file

@ -579,8 +579,8 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
function showDirect(path) { function showDirect(path) {
return new Promise(function(resolve, reject) { return new Promise(function(resolve, reject) {
resolveOnNextShow = resolve, page.show(baseUrl()+path) resolveOnNextShow = resolve, page.show(baseUrl()+path);
}) });
} }
function show(path, options) { function show(path, options) {

View file

@ -279,8 +279,8 @@ define(["appSettings", "browser", "events", "htmlMediaHelper", "webSettings"], f
features.push("screensaver"); features.push("screensaver");
webSettings.enableMultiServer().then(enabled => { webSettings.enableMultiServer().then(enabled => {
if (enabled) features.push("multiserver") if (enabled) features.push("multiserver");
}) });
if (!browser.orsay && !browser.msie && (browser.firefox || browser.ps4 || browser.edge || supportsCue())) { if (!browser.orsay && !browser.msie && (browser.firefox || browser.ps4 || browser.edge || supportsCue())) {
features.push("subtitleappearancesettings"); features.push("subtitleappearancesettings");
@ -383,7 +383,7 @@ define(["appSettings", "browser", "events", "htmlMediaHelper", "webSettings"], f
return window.NativeShell.AppHost.getDefaultLayout(); return window.NativeShell.AppHost.getDefaultLayout();
} }
return getDefaultLayout() return getDefaultLayout();
}, },
getDeviceProfile: getDeviceProfile, getDeviceProfile: getDeviceProfile,
init: function () { init: function () {

View file

@ -52,5 +52,5 @@ define(["connectionManager"], function (connectionManager) {
currentSlideshow = null; currentSlideshow = null;
} }
}; };
} };
}); });

View file

@ -188,9 +188,9 @@ define(['events'], function (events) {
return apiClient.getEndpointInfo().then(function (endpoint) { return apiClient.getEndpointInfo().then(function (endpoint) {
if (endpoint.IsInNetwork) { if (endpoint.IsInNetwork) {
return apiClient.getPublicSystemInfo().then(function (info) { return apiClient.getPublicSystemInfo().then(function (info) {
var localAddress = info.LocalAddress var localAddress = info.LocalAddress;
if (!localAddress) { if (!localAddress) {
console.debug("No valid local address returned, defaulting to external one") console.debug("No valid local address returned, defaulting to external one");
localAddress = serverAddress; localAddress = serverAddress;
} }
addToCache(serverAddress, localAddress); addToCache(serverAddress, localAddress);

View file

@ -7,11 +7,11 @@ define(['loading', 'dialogHelper', 'dom', 'listViewStyle', 'emby-input', 'paper-
systemInfo = info; systemInfo = info;
return info; return info;
} }
) );
} }
function onDialogClosed() { function onDialogClosed() {
loading.hide() loading.hide();
} }
function refreshDirectoryBrowser(page, path, fileOptions, updatePathOnError) { function refreshDirectoryBrowser(page, path, fileOptions, updatePathOnError) {
@ -24,7 +24,7 @@ define(['loading', 'dialogHelper', 'dom', 'listViewStyle', 'emby-input', 'paper-
var promises = []; var promises = [];
if ("Network" === path) { if ("Network" === path) {
promises.push(ApiClient.getNetworkDevices()) promises.push(ApiClient.getNetworkDevices());
} else { } else {
if (path) { if (path) {
promises.push(ApiClient.getDirectoryContents(path, fileOptions)); promises.push(ApiClient.getDirectoryContents(path, fileOptions));
@ -101,7 +101,7 @@ define(['loading', 'dialogHelper', 'dom', 'listViewStyle', 'emby-input', 'paper-
html += Globalize.translate("MessageDirectoryPickerLinuxInstruction"); html += Globalize.translate("MessageDirectoryPickerLinuxInstruction");
html += "<br/>"; html += "<br/>";
} }
html += "</div>" html += "</div>";
} }
html += '<form style="margin:auto;">'; html += '<form style="margin:auto;">';
html += '<div class="inputContainer" style="display: flex; align-items: center;">'; html += '<div class="inputContainer" style="display: flex; align-items: center;">';
@ -144,13 +144,13 @@ define(['loading', 'dialogHelper', 'dom', 'listViewStyle', 'emby-input', 'paper-
function alertText(text) { function alertText(text) {
alertTextWithOptions({ alertTextWithOptions({
text: text text: text
}) });
} }
function alertTextWithOptions(options) { function alertTextWithOptions(options) {
require(["alert"], function(alert) { require(["alert"], function(alert) {
alert(options) alert(options);
}) });
} }
function validatePath(path, validateWriteable, apiClient) { function validatePath(path, validateWriteable, apiClient) {
@ -171,12 +171,12 @@ define(['loading', 'dialogHelper', 'dom', 'listViewStyle', 'emby-input', 'paper-
if (validateWriteable) { if (validateWriteable) {
alertText(Globalize.translate("WriteAccessRequired")); alertText(Globalize.translate("WriteAccessRequired"));
} else { } else {
alertText(Globalize.translate("PathNotFound")) alertText(Globalize.translate("PathNotFound"));
} }
return Promise.reject() return Promise.reject();
} }
} }
return Promise.resolve() return Promise.resolve();
}); });
} }
@ -188,7 +188,7 @@ define(['loading', 'dialogHelper', 'dom', 'listViewStyle', 'emby-input', 'paper-
if (lnkPath.classList.contains("lnkFile")) { if (lnkPath.classList.contains("lnkFile")) {
content.querySelector("#txtDirectoryPickerPath").value = path; content.querySelector("#txtDirectoryPickerPath").value = path;
} else { } else {
refreshDirectoryBrowser(content, path, fileOptions, true) refreshDirectoryBrowser(content, path, fileOptions, true);
} }
} }
}); });
@ -275,7 +275,7 @@ define(['loading', 'dialogHelper', 'dom', 'listViewStyle', 'emby-input', 'paper-
dlg.addEventListener("close", onDialogClosed); dlg.addEventListener("close", onDialogClosed);
dialogHelper.open(dlg); dialogHelper.open(dlg);
dlg.querySelector(".btnCloseDialog").addEventListener("click", function() { dlg.querySelector(".btnCloseDialog").addEventListener("click", function() {
dialogHelper.close(dlg) dialogHelper.close(dlg);
}); });
currentDialog = dlg; currentDialog = dlg;
dlg.querySelector("#txtDirectoryPickerPath").value = initialPath; dlg.querySelector("#txtDirectoryPickerPath").value = initialPath;
@ -293,9 +293,9 @@ define(['loading', 'dialogHelper', 'dom', 'listViewStyle', 'emby-input', 'paper-
if (currentDialog) { if (currentDialog) {
dialogHelper.close(currentDialog); dialogHelper.close(currentDialog);
} }
} };
} }
var systemInfo; var systemInfo;
return directoryBrowser return directoryBrowser;
}); });

View file

@ -186,6 +186,8 @@ define(['require', 'browser', 'layoutManager', 'appSettings', 'pluginManager', '
context.querySelector('#selectLanguage').value = userSettings.language() || ''; context.querySelector('#selectLanguage').value = userSettings.language() || '';
context.querySelector('.selectDateTimeLocale').value = userSettings.dateTimeLocale() || ''; context.querySelector('.selectDateTimeLocale').value = userSettings.dateTimeLocale() || '';
context.querySelector('#txtLibraryPageSize').value = userSettings.libraryPageSize();
selectDashboardTheme.value = userSettings.dashboardTheme() || ''; selectDashboardTheme.value = userSettings.dashboardTheme() || '';
selectTheme.value = userSettings.theme() || ''; selectTheme.value = userSettings.theme() || '';
@ -215,6 +217,8 @@ define(['require', 'browser', 'layoutManager', 'appSettings', 'pluginManager', '
userSettingsInstance.soundEffects(context.querySelector('.selectSoundEffects').value); userSettingsInstance.soundEffects(context.querySelector('.selectSoundEffects').value);
userSettingsInstance.screensaver(context.querySelector('.selectScreensaver').value); userSettingsInstance.screensaver(context.querySelector('.selectScreensaver').value);
userSettingsInstance.libraryPageSize(context.querySelector('#txtLibraryPageSize').value);
userSettingsInstance.skin(context.querySelector('.selectSkin').value); userSettingsInstance.skin(context.querySelector('.selectSkin').value);
userSettingsInstance.enableFastFadein(context.querySelector('#chkFadein').checked); userSettingsInstance.enableFastFadein(context.querySelector('#chkFadein').checked);

View file

@ -143,6 +143,11 @@
<select is="emby-select" class="selectSoundEffects" label="${LabelSoundEffects}"></select> <select is="emby-select" class="selectSoundEffects" label="${LabelSoundEffects}"></select>
</div> </div>
<div class="inputContainer inputContainer-withDescription fldFadein">
<input is="emby-input" type="number" id="txtLibraryPageSize" pattern="[0-9]*" required="required" min="0" max="1000" step="1" label="${LabelLibraryPageSize}" />
<div class="fieldDescription">${LabelLibraryPageSizeHelp}</div>
</div>
<div class="checkboxContainer checkboxContainer-withDescription fldFadein"> <div class="checkboxContainer checkboxContainer-withDescription fldFadein">
<label> <label>
<input type="checkbox" is="emby-checkbox" id="chkFadein" /> <input type="checkbox" is="emby-checkbox" id="chkFadein" />

View file

@ -1,4 +1,4 @@
import multiDownload from "multi-download" import multiDownload from "multi-download";
export function download(items) { export function download(items) {

View file

@ -64,18 +64,18 @@ define(['connectionManager', 'cardBuilder', 'appSettings', 'dom', 'apphost', 'la
} else { } else {
var noLibDescription; var noLibDescription;
if (user['Policy'] && user['Policy']['IsAdministrator']) { if (user['Policy'] && user['Policy']['IsAdministrator']) {
noLibDescription = Globalize.translate("NoCreatedLibraries", '<a id="button-createLibrary" class="button-link">', '</a>') noLibDescription = Globalize.translate("NoCreatedLibraries", '<a id="button-createLibrary" class="button-link">', '</a>');
} else { } else {
noLibDescription = Globalize.translate("AskAdminToCreateLibrary"); noLibDescription = Globalize.translate("AskAdminToCreateLibrary");
} }
html += '<div class="centerMessage padded-left padded-right">'; html += '<div class="centerMessage padded-left padded-right">';
html += '<h2>' + Globalize.translate("MessageNothingHere") + '</h2>'; html += '<h2>' + Globalize.translate("MessageNothingHere") + '</h2>';
html += '<p>' + noLibDescription + '</p>' html += '<p>' + noLibDescription + '</p>';
html += '</div>'; html += '</div>';
elem.innerHTML = html; elem.innerHTML = html;
var createNowLink = elem.querySelector("#button-createLibrary") var createNowLink = elem.querySelector("#button-createLibrary");
if (createNowLink) { if (createNowLink) {
createNowLink.addEventListener("click", function () { createNowLink.addEventListener("click", function () {
Dashboard.navigate("library.html"); Dashboard.navigate("library.html");
@ -640,7 +640,7 @@ define(['connectionManager', 'cardBuilder', 'appSettings', 'dom', 'apphost', 'la
if (enableScrollX()) { if (enableScrollX()) {
html += '<div is="emby-scroller" class="padded-top-focusscale padded-bottom-focusscale" data-centerfocus="true">'; html += '<div is="emby-scroller" class="padded-top-focusscale padded-bottom-focusscale" data-centerfocus="true">';
html += '<div is="emby-itemscontainer" class="itemsContainer scrollSlider focuscontainer-x">' html += '<div is="emby-itemscontainer" class="itemsContainer scrollSlider focuscontainer-x">';
} else { } else {
html += '<div is="emby-itemscontainer" class="itemsContainer padded-left padded-right vertical-wrap focuscontainer-x">'; html += '<div is="emby-itemscontainer" class="itemsContainer padded-left padded-right vertical-wrap focuscontainer-x">';
} }
@ -714,7 +714,7 @@ define(['connectionManager', 'cardBuilder', 'appSettings', 'dom', 'apphost', 'la
if (enableScrollX()) { if (enableScrollX()) {
html += '<div is="emby-scroller" class="padded-top-focusscale padded-bottom-focusscale" data-centerfocus="true">'; html += '<div is="emby-scroller" class="padded-top-focusscale padded-bottom-focusscale" data-centerfocus="true">';
html += '<div is="emby-itemscontainer" class="itemsContainer scrollSlider focuscontainer-x" data-monitor="videoplayback,markplayed">' html += '<div is="emby-itemscontainer" class="itemsContainer scrollSlider focuscontainer-x" data-monitor="videoplayback,markplayed">';
} else { } else {
html += '<div is="emby-itemscontainer" class="itemsContainer padded-left padded-right vertical-wrap focuscontainer-x" data-monitor="videoplayback,markplayed">'; html += '<div is="emby-itemscontainer" class="itemsContainer padded-left padded-right vertical-wrap focuscontainer-x" data-monitor="videoplayback,markplayed">';
} }
@ -786,7 +786,7 @@ define(['connectionManager', 'cardBuilder', 'appSettings', 'dom', 'apphost', 'la
if (enableScrollX()) { if (enableScrollX()) {
html += '<div is="emby-scroller" class="padded-top-focusscale padded-bottom-focusscale" data-centerfocus="true">'; html += '<div is="emby-scroller" class="padded-top-focusscale padded-bottom-focusscale" data-centerfocus="true">';
html += '<div is="emby-itemscontainer" class="itemsContainer scrollSlider focuscontainer-x">' html += '<div is="emby-itemscontainer" class="itemsContainer scrollSlider focuscontainer-x">';
} else { } else {
html += '<div is="emby-itemscontainer" class="itemsContainer padded-left padded-right vertical-wrap focuscontainer-x">'; html += '<div is="emby-itemscontainer" class="itemsContainer padded-left padded-right vertical-wrap focuscontainer-x">';
} }

View file

@ -171,13 +171,29 @@ define(['appSettings', 'browser', 'events'], function (appSettings, browser, eve
// Appending #t=xxx to the query string doesn't seem to work with HLS // Appending #t=xxx to the query string doesn't seem to work with HLS
// For plain video files, not all browsers support it either // For plain video files, not all browsers support it either
var delay = browser.safari ? 2500 : 0;
if (delay) { if (element.duration >= seconds) {
setTimeout(function () { // media is ready, seek immediately
setCurrentTimeIfNeeded(element, seconds);
}, delay);
} else {
setCurrentTimeIfNeeded(element, seconds); setCurrentTimeIfNeeded(element, seconds);
} else {
// update video player position when media is ready to be sought
var events = ["durationchange", "loadeddata", "play", "loadedmetadata"];
var onMediaChange = function(e) {
if (element.currentTime === 0 && element.duration >= seconds) {
// seek only when video position is exactly zero,
// as this is true only if video hasn't started yet or
// user rewound to the very beginning
// (but rewinding cannot happen as the first event with media of non-empty duration)
console.debug(`seeking to ${seconds} on ${e.type} event`);
setCurrentTimeIfNeeded(element, seconds);
events.map(function(name) {
element.removeEventListener(name, onMediaChange);
});
}
};
events.map(function (name) {
element.addEventListener(name, onMediaChange);
});
} }
} }
} }

View file

@ -116,8 +116,9 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
}); });
} }
function normalizeTrackEventText(text) { function normalizeTrackEventText(text, useHtml) {
return text.replace(/\\N/gi, '\n'); var result = text.replace(/\\N/gi, '\n').replace(/\r/gi, '');
return useHtml ? result.replace(/\n/gi, '<br>') : result;
} }
function setTracks(elem, tracks, item, mediaSource) { function setTracks(elem, tracks, item, mediaSource) {
@ -567,19 +568,19 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
self.resetSubtitleOffset = function() { self.resetSubtitleOffset = function() {
currentTrackOffset = 0; currentTrackOffset = 0;
showTrackOffset = false; showTrackOffset = false;
} };
self.enableShowingSubtitleOffset = function() { self.enableShowingSubtitleOffset = function() {
showTrackOffset = true; showTrackOffset = true;
} };
self.disableShowingSubtitleOffset = function() { self.disableShowingSubtitleOffset = function() {
showTrackOffset = false; showTrackOffset = false;
} };
self.isShowingSubtitleOffsetEnabled = function() { self.isShowingSubtitleOffsetEnabled = function() {
return showTrackOffset; return showTrackOffset;
} };
function getTextTrack() { function getTextTrack() {
var videoElement = self._mediaElement; var videoElement = self._mediaElement;
@ -651,7 +652,7 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
self.getSubtitleOffset = function() { self.getSubtitleOffset = function() {
return currentTrackOffset; return currentTrackOffset;
} };
function isAudioStreamSupported(stream, deviceProfile) { function isAudioStreamSupported(stream, deviceProfile) {
@ -1019,7 +1020,7 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
xhr.onerror = function (e) { xhr.onerror = function (e) {
reject(e); reject(e);
decrementFetchQueue(); decrementFetchQueue();
} };
xhr.send(); xhr.send();
}); });
@ -1209,7 +1210,7 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
data.TrackEvents.forEach(function (trackEvent) { data.TrackEvents.forEach(function (trackEvent) {
var trackCueObject = window.VTTCue || window.TextTrackCue; var trackCueObject = window.VTTCue || window.TextTrackCue;
var cue = new trackCueObject(trackEvent.StartPositionTicks / 10000000, trackEvent.EndPositionTicks / 10000000, normalizeTrackEventText(trackEvent.Text)); var cue = new trackCueObject(trackEvent.StartPositionTicks / 10000000, trackEvent.EndPositionTicks / 10000000, normalizeTrackEventText(trackEvent.Text, false));
trackElement.addCue(cue); trackElement.addCue(cue);
}); });
@ -1250,8 +1251,7 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
} }
if (selectedTrackEvent && selectedTrackEvent.Text) { if (selectedTrackEvent && selectedTrackEvent.Text) {
subtitleTextElement.innerHTML = normalizeTrackEventText(selectedTrackEvent.Text, true);
subtitleTextElement.innerHTML = normalizeTrackEventText(selectedTrackEvent.Text);
subtitleTextElement.classList.remove('hide'); subtitleTextElement.classList.remove('hide');
} else { } else {
@ -1428,11 +1428,11 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
} }
if (browser.safari || browser.iOS || browser.iPad) { if (browser.safari || browser.iOS || browser.iPad) {
list.push('AirPlay') list.push('AirPlay');
} }
list.push('SetBrightness'); list.push('SetBrightness');
list.push("SetAspectRatio") list.push("SetAspectRatio");
return list; return list;
} }
@ -1555,11 +1555,11 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
if (video) { if (video) {
if (isEnabled) { if (isEnabled) {
video.requestAirPlay().catch(function(err) { video.requestAirPlay().catch(function(err) {
console.error("Error requesting AirPlay", err) console.error("Error requesting AirPlay", err);
}); });
} else { } else {
document.exitAirPLay().catch(function(err) { document.exitAirPLay().catch(function(err) {
console.error("Error exiting AirPlay", err) console.error("Error exiting AirPlay", err);
}); });
} }
} }
@ -1692,12 +1692,12 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
var mediaElement = this._mediaElement; var mediaElement = this._mediaElement;
if (mediaElement) { if (mediaElement) {
if ("auto" === val) { if ("auto" === val) {
mediaElement.style.removeProperty("object-fit") mediaElement.style.removeProperty("object-fit");
} else { } else {
mediaElement.style["object-fit"] = val mediaElement.style["object-fit"] = val;
} }
} }
this._currentAspectRatio = val this._currentAspectRatio = val;
}; };
HtmlVideoPlayer.prototype.getAspectRatio = function () { HtmlVideoPlayer.prototype.getAspectRatio = function () {
@ -1714,7 +1714,7 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
}, { }, {
name: "Fill", name: "Fill",
id: "fill" id: "fill"
}] }];
}; };
HtmlVideoPlayer.prototype.togglePictureInPicture = function () { HtmlVideoPlayer.prototype.togglePictureInPicture = function () {

View file

@ -116,7 +116,7 @@ define(["dialogHelper", "require", "layoutManager", "globalize", "userSettings",
} }
function createAttribute(label, value) { function createAttribute(label, value) {
return '<span class="mediaInfoLabel">' + label + '</span><span class="mediaInfoAttribute">' + value + "</span>" return '<span class="mediaInfoLabel">' + label + '</span><span class="mediaInfoAttribute">' + value + "</span>";
} }
function showMediaInfoMore(itemId, serverId, template) { function showMediaInfoMore(itemId, serverId, template) {

View file

@ -36,7 +36,7 @@ define(["globalize", "dom", "emby-checkbox", "emby-select", "emby-input"], funct
html += "<option value='" + culture.TwoLetterISORegionName + "'>" + culture.DisplayName + "</option>"; html += "<option value='" + culture.TwoLetterISORegionName + "'>" + culture.DisplayName + "</option>";
} }
select.innerHTML = html; select.innerHTML = html;
}) });
} }
function populateRefreshInterval(select) { function populateRefreshInterval(select) {
@ -120,7 +120,7 @@ define(["globalize", "dom", "emby-checkbox", "emby-select", "emby-input"], funct
html += plugin.Name; html += plugin.Name;
html += "</h3>"; html += "</h3>";
html += "</div>"; html += "</div>";
i > 0 ? html += '<button type="button" is="paper-icon-button-light" title="' + globalize.translate("ButtonUp") + '" class="btnSortableMoveUp btnSortable" data-pluginindex="' + i + '"><i class="material-icons keyboard_arrow_up"></i></button>' : plugins.length > 1 && (html += '<button type="button" is="paper-icon-button-light" title="' + globalize.translate("ButtonDown") + '" class="btnSortableMoveDown btnSortable" data-pluginindex="' + i + '"><i class="material-icons keyboard_arrow_down"></i></button>'), html += "</div>" i > 0 ? html += '<button type="button" is="paper-icon-button-light" title="' + globalize.translate("ButtonUp") + '" class="btnSortableMoveUp btnSortable" data-pluginindex="' + i + '"><i class="material-icons keyboard_arrow_up"></i></button>' : plugins.length > 1 && (html += '<button type="button" is="paper-icon-button-light" title="' + globalize.translate("ButtonDown") + '" class="btnSortableMoveDown btnSortable" data-pluginindex="' + i + '"><i class="material-icons keyboard_arrow_down"></i></button>'), html += "</div>";
} }
html += "</div>"; html += "</div>";
html += '<div class="fieldDescription">' + globalize.translate("LabelMetadataDownloadersHelp") + "</div>"; html += '<div class="fieldDescription">' + globalize.translate("LabelMetadataDownloadersHelp") + "</div>";
@ -265,10 +265,10 @@ define(["globalize", "dom", "emby-checkbox", "emby-select", "emby-input"], funct
renderMetadataFetchers(parent, availableOptions, {}); renderMetadataFetchers(parent, availableOptions, {});
renderSubtitleFetchers(parent, availableOptions, {}); renderSubtitleFetchers(parent, availableOptions, {});
renderImageFetchers(parent, availableOptions, {}); renderImageFetchers(parent, availableOptions, {});
availableOptions.SubtitleFetchers.length ? parent.querySelector(".subtitleDownloadSettings").classList.remove("hide") : parent.querySelector(".subtitleDownloadSettings").classList.add("hide") availableOptions.SubtitleFetchers.length ? parent.querySelector(".subtitleDownloadSettings").classList.remove("hide") : parent.querySelector(".subtitleDownloadSettings").classList.add("hide");
}).catch(function() { }).catch(function() {
return Promise.resolve(); return Promise.resolve();
}) });
} }
function adjustSortableListElement(elem) { function adjustSortableListElement(elem) {
@ -296,8 +296,8 @@ define(["globalize", "dom", "emby-checkbox", "emby-select", "emby-input"], funct
Type: type Type: type
}, currentLibraryOptions.TypeOptions.push(typeOptions)); }, currentLibraryOptions.TypeOptions.push(typeOptions));
var availableOptions = getTypeOptions(currentAvailableOptions || {}, type); var availableOptions = getTypeOptions(currentAvailableOptions || {}, type);
(new ImageOptionsEditor).show(type, typeOptions, availableOptions) (new ImageOptionsEditor).show(type, typeOptions, availableOptions);
}) });
} }
function onImageFetchersContainerClick(e) { function onImageFetchersContainerClick(e) {
@ -315,12 +315,12 @@ define(["globalize", "dom", "emby-checkbox", "emby-select", "emby-input"], funct
var list = dom.parentWithClass(li, "paperList"); var list = dom.parentWithClass(li, "paperList");
if (btnSortable.classList.contains("btnSortableMoveDown")) { if (btnSortable.classList.contains("btnSortableMoveDown")) {
var next = li.nextSibling; var next = li.nextSibling;
next && (li.parentNode.removeChild(li), next.parentNode.insertBefore(li, next.nextSibling)) next && (li.parentNode.removeChild(li), next.parentNode.insertBefore(li, next.nextSibling));
} else { } else {
var prev = li.previousSibling; var prev = li.previousSibling;
prev && (li.parentNode.removeChild(li), prev.parentNode.insertBefore(li, prev)) prev && (li.parentNode.removeChild(li), prev.parentNode.insertBefore(li, prev));
} }
Array.prototype.forEach.call(list.querySelectorAll(".sortableOption"), adjustSortableListElement) Array.prototype.forEach.call(list.querySelectorAll(".sortableOption"), adjustSortableListElement);
} }
} }
@ -407,13 +407,13 @@ define(["globalize", "dom", "emby-checkbox", "emby-select", "emby-input"], funct
function setSubtitleFetchersIntoOptions(parent, options) { function setSubtitleFetchersIntoOptions(parent, options) {
options.DisabledSubtitleFetchers = Array.prototype.map.call(Array.prototype.filter.call(parent.querySelectorAll(".chkSubtitleFetcher"), function(elem) { options.DisabledSubtitleFetchers = Array.prototype.map.call(Array.prototype.filter.call(parent.querySelectorAll(".chkSubtitleFetcher"), function(elem) {
return !elem.checked return !elem.checked;
}), function(elem) { }), function(elem) {
return elem.getAttribute("data-pluginname") return elem.getAttribute("data-pluginname");
}); });
options.SubtitleFetcherOrder = Array.prototype.map.call(parent.querySelectorAll(".subtitleFetcherItem"), function(elem) { options.SubtitleFetcherOrder = Array.prototype.map.call(parent.querySelectorAll(".subtitleFetcherItem"), function(elem) {
return elem.getAttribute("data-pluginname") return elem.getAttribute("data-pluginname");
}); });
} }
@ -455,13 +455,13 @@ define(["globalize", "dom", "emby-checkbox", "emby-select", "emby-input"], funct
} }
typeOptions.ImageFetchers = Array.prototype.map.call(Array.prototype.filter.call(section.querySelectorAll(".chkImageFetcher"), function(elem) { typeOptions.ImageFetchers = Array.prototype.map.call(Array.prototype.filter.call(section.querySelectorAll(".chkImageFetcher"), function(elem) {
return elem.checked return elem.checked;
}), function(elem) { }), function(elem) {
return elem.getAttribute("data-pluginname") return elem.getAttribute("data-pluginname");
}); });
typeOptions.ImageFetcherOrder = Array.prototype.map.call(section.querySelectorAll(".imageFetcherItem"), function(elem) { typeOptions.ImageFetcherOrder = Array.prototype.map.call(section.querySelectorAll(".imageFetcherItem"), function(elem) {
return elem.getAttribute("data-pluginname") return elem.getAttribute("data-pluginname");
}); });
} }
} }
@ -505,20 +505,20 @@ define(["globalize", "dom", "emby-checkbox", "emby-select", "emby-input"], funct
SaveSubtitlesWithMedia: parent.querySelector("#chkSaveSubtitlesLocally").checked, SaveSubtitlesWithMedia: parent.querySelector("#chkSaveSubtitlesLocally").checked,
RequirePerfectSubtitleMatch: parent.querySelector("#chkRequirePerfectMatch").checked, RequirePerfectSubtitleMatch: parent.querySelector("#chkRequirePerfectMatch").checked,
MetadataSavers: Array.prototype.map.call(Array.prototype.filter.call(parent.querySelectorAll(".chkMetadataSaver"), function(elem) { MetadataSavers: Array.prototype.map.call(Array.prototype.filter.call(parent.querySelectorAll(".chkMetadataSaver"), function(elem) {
return elem.checked return elem.checked;
}), function(elem) { }), function(elem) {
return elem.getAttribute("data-pluginname") return elem.getAttribute("data-pluginname");
}), }),
TypeOptions: [] TypeOptions: []
}; };
options.LocalMetadataReaderOrder = Array.prototype.map.call(parent.querySelectorAll(".localReaderOption"), function(elem) { options.LocalMetadataReaderOrder = Array.prototype.map.call(parent.querySelectorAll(".localReaderOption"), function(elem) {
return elem.getAttribute("data-pluginname") return elem.getAttribute("data-pluginname");
}); });
options.SubtitleDownloadLanguages = Array.prototype.map.call(Array.prototype.filter.call(parent.querySelectorAll(".chkSubtitleLanguage"), function(elem) { options.SubtitleDownloadLanguages = Array.prototype.map.call(Array.prototype.filter.call(parent.querySelectorAll(".chkSubtitleLanguage"), function(elem) {
return elem.checked return elem.checked;
}), function(elem) { }), function(elem) {
return elem.getAttribute("data-lang") return elem.getAttribute("data-lang");
}); });
setSubtitleFetchersIntoOptions(parent, options); setSubtitleFetchersIntoOptions(parent, options);
setMetadataFetchersIntoOptions(parent, options); setMetadataFetchersIntoOptions(parent, options);
@ -531,7 +531,7 @@ define(["globalize", "dom", "emby-checkbox", "emby-select", "emby-input"], funct
function getOrderedPlugins(plugins, configuredOrder) { function getOrderedPlugins(plugins, configuredOrder) {
plugins = plugins.slice(0); plugins = plugins.slice(0);
plugins.sort(function(a, b) { plugins.sort(function(a, b) {
return a = configuredOrder.indexOf(a.Name), b = configuredOrder.indexOf(b.Name), a < b ? -1 : a > b ? 1 : 0 return a = configuredOrder.indexOf(a.Name), b = configuredOrder.indexOf(b.Name), a < b ? -1 : a > b ? 1 : 0;
}); });
return plugins; return plugins;
} }
@ -558,10 +558,10 @@ define(["globalize", "dom", "emby-checkbox", "emby-select", "emby-input"], funct
parent.querySelector("#chkSkipIfAudioTrackPresent").checked = options.SkipSubtitlesIfAudioTrackMatches; parent.querySelector("#chkSkipIfAudioTrackPresent").checked = options.SkipSubtitlesIfAudioTrackMatches;
parent.querySelector("#chkRequirePerfectMatch").checked = options.RequirePerfectSubtitleMatch; parent.querySelector("#chkRequirePerfectMatch").checked = options.RequirePerfectSubtitleMatch;
Array.prototype.forEach.call(parent.querySelectorAll(".chkMetadataSaver"), function(elem) { Array.prototype.forEach.call(parent.querySelectorAll(".chkMetadataSaver"), function(elem) {
elem.checked = options.MetadataSavers ? -1 !== options.MetadataSavers.indexOf(elem.getAttribute("data-pluginname")) : "true" === elem.getAttribute("data-defaultenabled") elem.checked = options.MetadataSavers ? -1 !== options.MetadataSavers.indexOf(elem.getAttribute("data-pluginname")) : "true" === elem.getAttribute("data-defaultenabled");
}); });
Array.prototype.forEach.call(parent.querySelectorAll(".chkSubtitleLanguage"), function(elem) { Array.prototype.forEach.call(parent.querySelectorAll(".chkSubtitleLanguage"), function(elem) {
elem.checked = !!options.SubtitleDownloadLanguages && -1 !== options.SubtitleDownloadLanguages.indexOf(elem.getAttribute("data-lang")) elem.checked = !!options.SubtitleDownloadLanguages && -1 !== options.SubtitleDownloadLanguages.indexOf(elem.getAttribute("data-lang"));
}); });
renderMetadataReaders(parent, getOrderedPlugins(parent.availableOptions.MetadataReaders, options.LocalMetadataReaderOrder || [])); renderMetadataReaders(parent, getOrderedPlugins(parent.availableOptions.MetadataReaders, options.LocalMetadataReaderOrder || []));
renderMetadataFetchers(parent, parent.availableOptions, options); renderMetadataFetchers(parent, parent.availableOptions, options);
@ -578,5 +578,5 @@ define(["globalize", "dom", "emby-checkbox", "emby-select", "emby-input"], funct
getLibraryOptions: getLibraryOptions, getLibraryOptions: getLibraryOptions,
setLibraryOptions: setLibraryOptions, setLibraryOptions: setLibraryOptions,
setAdvancedVisible: setAdvancedVisible setAdvancedVisible: setAdvancedVisible
} };
}); });

View file

@ -188,5 +188,5 @@ define(["pluginManager"], function (pluginManager) {
} }
} }
}; };
} };
}); });

View file

@ -1633,29 +1633,29 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla
self.supportSubtitleOffset = function(player) { self.supportSubtitleOffset = function(player) {
player = player || self._currentPlayer; player = player || self._currentPlayer;
return player && 'setSubtitleOffset' in player; return player && 'setSubtitleOffset' in player;
} };
self.enableShowingSubtitleOffset = function(player) { self.enableShowingSubtitleOffset = function(player) {
player = player || self._currentPlayer; player = player || self._currentPlayer;
player.enableShowingSubtitleOffset(); player.enableShowingSubtitleOffset();
} };
self.disableShowingSubtitleOffset = function(player) { self.disableShowingSubtitleOffset = function(player) {
player = player || self._currentPlayer; player = player || self._currentPlayer;
if (player.disableShowingSubtitleOffset) { if (player.disableShowingSubtitleOffset) {
player.disableShowingSubtitleOffset(); player.disableShowingSubtitleOffset();
} }
} };
self.isShowingSubtitleOffsetEnabled = function(player) { self.isShowingSubtitleOffsetEnabled = function(player) {
player = player || self._currentPlayer; player = player || self._currentPlayer;
return player.isShowingSubtitleOffsetEnabled(); return player.isShowingSubtitleOffsetEnabled();
} };
self.isSubtitleStreamExternal = function(index, player) { self.isSubtitleStreamExternal = function(index, player) {
var stream = getSubtitleStream(player, index); var stream = getSubtitleStream(player, index);
return stream ? getDeliveryMethod(stream) === 'External' : false; return stream ? getDeliveryMethod(stream) === 'External' : false;
} };
self.setSubtitleOffset = function (value, player) { self.setSubtitleOffset = function (value, player) {
player = player || self._currentPlayer; player = player || self._currentPlayer;
@ -1669,12 +1669,12 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla
if (player.getSubtitleOffset) { if (player.getSubtitleOffset) {
return player.getSubtitleOffset(); return player.getSubtitleOffset();
} }
} };
self.canHandleOffsetOnCurrentSubtitle = function(player) { self.canHandleOffsetOnCurrentSubtitle = function(player) {
var index = self.getSubtitleStreamIndex(player); var index = self.getSubtitleStreamIndex(player);
return index !== -1 && self.isSubtitleStreamExternal(index, player); return index !== -1 && self.isSubtitleStreamExternal(index, player);
} };
self.seek = function (ticks, player) { self.seek = function (ticks, player) {

View file

@ -1,8 +1,18 @@
define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'focusManager', 'browser', 'apphost', 'loading', 'css!./style', 'material-icons', 'paper-icon-button-light'], function (dialogHelper, inputManager, connectionManager, layoutManager, focusManager, browser, appHost, loading) { /**
* Image viewer component
* @module components/slideshow/slideshow
*/
define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'focusManager', 'browser', 'apphost', 'css!./style', 'material-icons', 'paper-icon-button-light'], function (dialogHelper, inputManager, connectionManager, layoutManager, focusManager, browser, appHost) {
'use strict'; 'use strict';
/**
* Retrieves an item's image URL from the API.
* @param {object|string} item - Item used to generate the image URL.
* @param {object} options - Options of the image.
* @param {object} apiClient - API client instance used to retrieve the image.
* @returns {null|string} URL of the item's image.
*/
function getImageUrl(item, options, apiClient) { function getImageUrl(item, options, apiClient) {
options = options || {}; options = options || {};
options.type = options.type || "Primary"; options.type = options.type || "Primary";
@ -11,7 +21,6 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f
} }
if (item.ImageTags && item.ImageTags[options.type]) { if (item.ImageTags && item.ImageTags[options.type]) {
options.tag = item.ImageTags[options.type]; options.tag = item.ImageTags[options.type];
return apiClient.getScaledImageUrl(item.Id, options); return apiClient.getScaledImageUrl(item.Id, options);
} }
@ -27,8 +36,14 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f
return null; return null;
} }
/**
* Retrieves a backdrop's image URL from the API.
* @param {object} item - Item used to generate the image URL.
* @param {object} options - Options of the image.
* @param {object} apiClient - API client instance used to retrieve the image.
* @returns {null|string} URL of the item's backdrop.
*/
function getBackdropImageUrl(item, options, apiClient) { function getBackdropImageUrl(item, options, apiClient) {
options = options || {}; options = options || {};
options.type = options.type || "Backdrop"; options.type = options.type || "Backdrop";
@ -46,19 +61,19 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f
return null; return null;
} }
function getImgUrl(item, original) { /**
* Dispatches a request for an item's image to its respective handler.
* @param {object} item - Item used to generate the image URL.
* @returns {string} URL of the item's image.
*/
function getImgUrl(item) {
var apiClient = connectionManager.getApiClient(item.ServerId); var apiClient = connectionManager.getApiClient(item.ServerId);
var imageOptions = {}; var imageOptions = {};
if (!original) {
imageOptions.maxWidth = screen.availWidth;
}
if (item.BackdropImageTags && item.BackdropImageTags.length) { if (item.BackdropImageTags && item.BackdropImageTags.length) {
return getBackdropImageUrl(item, imageOptions, apiClient); return getBackdropImageUrl(item, imageOptions, apiClient);
} else { } else {
if (item.MediaType === 'Photo') {
if (item.MediaType === 'Photo' && original) {
return apiClient.getItemDownloadUrl(item.Id); return apiClient.getItemDownloadUrl(item.Id);
} }
imageOptions.type = "Primary"; imageOptions.type = "Primary";
@ -66,15 +81,25 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f
} }
} }
/**
* Generates a button using the specified icon, classes and properties.
* @param {string} icon - Name of the material icon on the button
* @param {string} cssClass - CSS classes to assign to the button
* @param {boolean} canFocus - Flag to set the tabindex attribute on the button to -1.
* @param {boolean} autoFocus - Flag to set the autofocus attribute on the button.
* @returns {string} The HTML markup of the button.
*/
function getIcon(icon, cssClass, canFocus, autoFocus) { function getIcon(icon, cssClass, canFocus, autoFocus) {
var tabIndex = canFocus ? '' : ' tabindex="-1"'; var tabIndex = canFocus ? '' : ' tabindex="-1"';
autoFocus = autoFocus ? ' autofocus' : ''; autoFocus = autoFocus ? ' autofocus' : '';
return '<button is="paper-icon-button-light" class="autoSize ' + cssClass + '"' + tabIndex + autoFocus + '><i class="material-icons slideshowButtonIcon ' + icon + '"></i></button>'; return '<button is="paper-icon-button-light" class="autoSize ' + cssClass + '"' + tabIndex + autoFocus + '><i class="material-icons slideshowButtonIcon ' + icon + '"></i></button>';
} }
/**
* Sets the viewport meta tag to enable or disable scaling by the user.
* @param {boolean} scalable - Flag to set the scalability of the viewport.
*/
function setUserScalable(scalable) { function setUserScalable(scalable) {
try { try {
appHost.setUserScalable(scalable); appHost.setUserScalable(scalable);
} catch (err) { } catch (err) {
@ -83,23 +108,31 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f
} }
return function (options) { return function (options) {
var self = this; var self = this;
/** Initialized instance of Swiper. */
var swiperInstance; var swiperInstance;
var dlg; /** Initialized instance of the dialog containing the Swiper instance. */
var currentTimeout; var dialog;
var currentIntervalMs; /** Options of the slideshow components */
var currentOptions; var currentOptions;
var currentIndex; /** ID of the timeout used to hide the OSD. */
var hideTimeout;
/** Last coordinates of the mouse pointer. */
var lastMouseMoveData;
/** Visibility status of the OSD. */
var _osdOpen = false;
// small hack since this is not possible anyway // Use autoplay on Chromecast since it is non-interactive.
if (browser.chromecast) { options.interactive = !browser.chromecast;
options.interactive = false;
}
/**
* Creates the HTML markup for the dialog and the OSD.
* @param {Object} options - Options used to create the dialog and slideshow.
*/
function createElements(options) { function createElements(options) {
currentOptions = options;
dlg = dialogHelper.createDialog({ dialog = dialogHelper.createDialog({
exitAnimationDuration: options.interactive ? 400 : 800, exitAnimationDuration: options.interactive ? 400 : 800,
size: 'fullscreen', size: 'fullscreen',
autoFocus: false, autoFocus: false,
@ -108,17 +141,15 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f
removeOnClose: true removeOnClose: true
}); });
dlg.classList.add('slideshowDialog'); dialog.classList.add('slideshowDialog');
var html = ''; var html = '';
if (options.interactive) { html += '<div class="slideshowSwiperContainer"><div class="swiper-wrapper"></div></div>';
if (options.interactive && !layoutManager.tv) {
var actionButtonsOnTop = layoutManager.mobile; var actionButtonsOnTop = layoutManager.mobile;
html += '<div>';
html += '<div class="slideshowSwiperContainer"><div class="swiper-wrapper"></div></div>';
html += getIcon('keyboard_arrow_left', 'btnSlideshowPrevious slideshowButton hide-mouse-idle-tv', false); html += getIcon('keyboard_arrow_left', 'btnSlideshowPrevious slideshowButton hide-mouse-idle-tv', false);
html += getIcon('keyboard_arrow_right', 'btnSlideshowNext slideshowButton hide-mouse-idle-tv', false); html += getIcon('keyboard_arrow_right', 'btnSlideshowNext slideshowButton hide-mouse-idle-tv', false);
@ -137,7 +168,7 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f
if (!actionButtonsOnTop) { if (!actionButtonsOnTop) {
html += '<div class="slideshowBottomBar hide">'; html += '<div class="slideshowBottomBar hide">';
html += getIcon('pause', 'btnSlideshowPause slideshowButton', true, true); html += getIcon('play_arrow', 'btnSlideshowPause slideshowButton', true, true);
if (appHost.supports('filedownload')) { if (appHost.supports('filedownload')) {
html += getIcon('file_download', 'btnDownload slideshowButton', true); html += getIcon('file_download', 'btnDownload slideshowButton', true);
} }
@ -148,33 +179,28 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f
html += '</div>'; html += '</div>';
} }
html += '</div>';
} else { } else {
html += '<div class="slideshowImage"></div><h1 class="slideshowImageText"></h1>'; html += '<div class="slideshowImage"></div><h1 class="slideshowImageText"></h1>';
} }
dlg.innerHTML = html; dialog.innerHTML = html;
if (options.interactive) { if (options.interactive && !layoutManager.tv) {
dlg.querySelector('.btnSlideshowExit').addEventListener('click', function (e) { dialog.querySelector('.btnSlideshowExit').addEventListener('click', function (e) {
dialogHelper.close(dialog);
dialogHelper.close(dlg);
}); });
dlg.querySelector('.btnSlideshowNext').addEventListener('click', nextImage);
dlg.querySelector('.btnSlideshowPrevious').addEventListener('click', previousImage);
var btnPause = dlg.querySelector('.btnSlideshowPause'); var btnPause = dialog.querySelector('.btnSlideshowPause');
if (btnPause) { if (btnPause) {
btnPause.addEventListener('click', playPause); btnPause.addEventListener('click', playPause);
} }
var btnDownload = dlg.querySelector('.btnDownload'); var btnDownload = dialog.querySelector('.btnDownload');
if (btnDownload) { if (btnDownload) {
btnDownload.addEventListener('click', download); btnDownload.addEventListener('click', download);
} }
var btnShare = dlg.querySelector('.btnShare'); var btnShare = dialog.querySelector('.btnShare');
if (btnShare) { if (btnShare) {
btnShare.addEventListener('click', share); btnShare.addEventListener('click', share);
} }
@ -182,78 +208,104 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f
setUserScalable(true); setUserScalable(true);
dialogHelper.open(dlg).then(function () { dialogHelper.open(dialog).then(function () {
setUserScalable(false); setUserScalable(false);
stopInterval();
}); });
inputManager.on(window, onInputCommand); inputManager.on(window, onInputCommand);
document.addEventListener((window.PointerEvent ? 'pointermove' : 'mousemove'), onPointerMove); document.addEventListener((window.PointerEvent ? 'pointermove' : 'mousemove'), onPointerMove);
dlg.addEventListener('close', onDialogClosed); dialog.addEventListener('close', onDialogClosed);
if (options.interactive) { loadSwiper(dialog, options);
loadSwiper(dlg);
}
} }
/**
* Handles OSD changes when the autoplay is started.
*/
function onAutoplayStart() { function onAutoplayStart() {
var btnSlideshowPause = dlg.querySelector('.btnSlideshowPause i'); var btnSlideshowPause = dialog.querySelector('.btnSlideshowPause i');
if (btnSlideshowPause) { if (btnSlideshowPause) {
btnSlideshowPause.classList.remove("play_arrow"); btnSlideshowPause.classList.replace("play_arrow", "pause");
btnSlideshowPause.classList.add("pause");
} }
} }
/**
* Handles OSD changes when the autoplay is stopped.
*/
function onAutoplayStop() { function onAutoplayStop() {
var btnSlideshowPause = dlg.querySelector('.btnSlideshowPause i'); var btnSlideshowPause = dialog.querySelector('.btnSlideshowPause i');
if (btnSlideshowPause) { if (btnSlideshowPause) {
btnSlideshowPause.classList.remove("pause"); btnSlideshowPause.classList.replace("pause", "play_arrow");
btnSlideshowPause.classList.add("play_arrow");
} }
} }
function loadSwiper(dlg) { /**
* Initializes the Swiper instance and binds the relevant events.
* @param {HTMLElement} dialog - Element containing the dialog.
* @param {Object} options - Options used to initialize the Swiper instance.
*/
function loadSwiper(dialog, options) {
var slides;
if (currentOptions.slides) { if (currentOptions.slides) {
dlg.querySelector('.swiper-wrapper').innerHTML = currentOptions.slides.map(getSwiperSlideHtmlFromSlide).join(''); slides = currentOptions.slides;
} else { } else {
dlg.querySelector('.swiper-wrapper').innerHTML = currentOptions.items.map(getSwiperSlideHtmlFromItem).join(''); slides = currentOptions.items;
} }
require(['swiper'], function (Swiper) { require(['swiper'], function (Swiper) {
swiperInstance = new Swiper(dialog.querySelector('.slideshowSwiperContainer'), {
swiperInstance = new Swiper(dlg.querySelector('.slideshowSwiperContainer'), {
// Optional parameters
direction: 'horizontal', direction: 'horizontal',
loop: options.loop !== false, // Loop is disabled due to the virtual slides option not supporting it.
autoplay: { loop: false,
delay: options.interval || 8000 autoplay: !options.interactive,
keyboard: {
enabled: true
}, },
// Disable preloading of all images preloadImages: true,
preloadImages: false, slidesPerView: 1,
// Enable lazy loading slidesPerColumn: 1,
lazy: true,
loadPrevNext: true,
disableOnInteraction: false,
initialSlide: options.startIndex || 0, initialSlide: options.startIndex || 0,
speed: 240 speed: 240,
navigation: {
nextEl: '.btnSlideshowNext',
prevEl: '.btnSlideshowPrevious'
},
// Virtual slides reduce memory consumption for large libraries while allowing preloading of images;
virtual: {
slides: slides,
cache: true,
renderSlide: getSwiperSlideHtml,
addSlidesBefore: 1,
addSlidesAfter: 1
}
}); });
swiperInstance.on('autoplayStart', onAutoplayStart); swiperInstance.on('autoplayStart', onAutoplayStart);
swiperInstance.on('autoplayStop', onAutoplayStop); swiperInstance.on('autoplayStop', onAutoplayStop);
if (layoutManager.mobile) {
pause();
} else {
play();
}
}); });
} }
function getSwiperSlideHtmlFromItem(item) { /**
* Renders the HTML markup of a slide for an item or a slide.
* @param {Object} item - The item used to render the slide.
* @param {number} index - The index of the item in the Swiper instance.
* @returns {string} The HTML markup of the slide.
*/
function getSwiperSlideHtml(item, index) {
if (currentOptions.slides) {
return getSwiperSlideHtmlFromSlide(item);
} else {
return getSwiperSlideHtmlFromItem(item);
}
}
/**
* Renders the HTML markup of a slide for an item.
* @param {Object} item - Item used to generate the slide.
* @returns {string} The HTML markup of the slide.
*/
function getSwiperSlideHtmlFromItem(item) {
return getSwiperSlideHtmlFromSlide({ return getSwiperSlideHtmlFromSlide({
imageUrl: getImgUrl(item), imageUrl: getImgUrl(item),
originalImage: getImgUrl(item, true), originalImage: getImgUrl(item, true),
@ -264,11 +316,17 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f
}); });
} }
/**
* Renders the HTML markup of a slide for a slide object.
* @param {Object} item - Slide object used to generate the slide.
* @returns {string} The HTML markup of the slide.
*/
function getSwiperSlideHtmlFromSlide(item) { function getSwiperSlideHtmlFromSlide(item) {
var html = ''; var html = '';
html += '<div class="swiper-slide" data-imageurl="' + item.imageUrl + '" data-original="' + item.originalImage + '" data-itemid="' + item.Id + '" data-serverid="' + item.ServerId + '">'; html += '<div class="swiper-slide" data-original="' + item.originalImage + '" data-itemid="' + item.Id + '" data-serverid="' + item.ServerId + '">';
html += '<img data-src="' + item.imageUrl + '" class="swiper-lazy swiper-slide-img">'; html += '<div class="slider-zoom-container">';
html += '<img src="' + item.originalImage + '" class="swiper-slide-img">';
html += '</div>';
if (item.title || item.subtitle) { if (item.title || item.subtitle) {
html += '<div class="slideText">'; html += '<div class="slideText">';
html += '<div class="slideTextInner">'; html += '<div class="slideTextInner">';
@ -290,42 +348,18 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f
return html; return html;
} }
function previousImage() { /**
if (swiperInstance) { * Fetches the information of the currently displayed slide.
swiperInstance.slidePrev(); * @returns {null|{itemId: string, shareUrl: string, serverId: string, url: string}} Object containing the information of the currently displayed slide.
} else { */
stopInterval();
showNextImage(currentIndex - 1);
}
}
function nextImage() {
if (swiperInstance) {
if (options.loop === false) {
if (swiperInstance.activeIndex >= swiperInstance.slides.length - 1) {
dialogHelper.close(dlg);
return;
}
}
swiperInstance.slideNext();
} else {
stopInterval();
showNextImage(currentIndex + 1);
}
}
function getCurrentImageInfo() { function getCurrentImageInfo() {
if (swiperInstance) { if (swiperInstance) {
var slide = document.querySelector('.swiper-slide-active'); var slide = document.querySelector('.swiper-slide-active');
if (slide) { if (slide) {
return { return {
url: slide.getAttribute('data-original'), url: slide.getAttribute('data-original'),
shareUrl: slide.getAttribute('data-imageurl'), shareUrl: slide.getAttribute('data-original'),
itemId: slide.getAttribute('data-itemid'), itemId: slide.getAttribute('data-itemid'),
serverId: slide.getAttribute('data-serverid') serverId: slide.getAttribute('data-serverid')
}; };
@ -336,8 +370,10 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f
} }
} }
/**
* Starts a download for the currently displayed slide.
*/
function download() { function download() {
var imageInfo = getCurrentImageInfo(); var imageInfo = getCurrentImageInfo();
require(['fileDownloader'], function (fileDownloader) { require(['fileDownloader'], function (fileDownloader) {
@ -345,8 +381,10 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f
}); });
} }
/**
* Shares the currently displayed slide using the browser's built-in sharing feature.
*/
function share() { function share() {
var imageInfo = getCurrentImageInfo(); var imageInfo = getCurrentImageInfo();
navigator.share({ navigator.share({
@ -354,20 +392,29 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f
}); });
} }
/**
* Starts the autoplay feature of the Swiper instance.
*/
function play() { function play() {
if (swiperInstance.autoplay) { if (swiperInstance.autoplay) {
swiperInstance.autoplay.start(); swiperInstance.autoplay.start();
} }
} }
/**
* Pauses the autoplay feature of the Swiper instance;
*/
function pause() { function pause() {
if (swiperInstance.autoplay) { if (swiperInstance.autoplay) {
swiperInstance.autoplay.stop(); swiperInstance.autoplay.stop();
} }
} }
/**
* Toggles the autoplay feature of the Swiper instance.
*/
function playPause() { function playPause() {
var paused = !dlg.querySelector('.btnSlideshowPause i').classList.contains("pause"); var paused = !dialog.querySelector('.btnSlideshowPause i').classList.contains("pause");
if (paused) { if (paused) {
play(); play();
} else { } else {
@ -375,8 +422,10 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f
} }
} }
/**
* Closes the dialog and destroys the Swiper instance.
*/
function onDialogClosed() { function onDialogClosed() {
var swiper = swiperInstance; var swiper = swiperInstance;
if (swiper) { if (swiper) {
swiper.destroy(true, true); swiper.destroy(true, true);
@ -387,53 +436,38 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f
document.removeEventListener((window.PointerEvent ? 'pointermove' : 'mousemove'), onPointerMove); document.removeEventListener((window.PointerEvent ? 'pointermove' : 'mousemove'), onPointerMove);
} }
function startInterval(options) { /**
* Shows the OSD.
currentOptions = options; */
stopInterval();
createElements(options);
if (!options.interactive) {
currentIntervalMs = options.interval || 11000;
showNextImage(options.startIndex || 0, true);
}
}
var _osdOpen = false;
function isOsdOpen() {
return _osdOpen;
}
function getOsdBottom() {
return dlg.querySelector('.slideshowBottomBar');
}
function showOsd() { function showOsd() {
var bottom = dialog.querySelector('.slideshowBottomBar');
var bottom = getOsdBottom();
if (bottom) { if (bottom) {
slideUpToShow(bottom); slideUpToShow(bottom);
startHideTimer(); startHideTimer();
} }
} }
/**
* Hides the OSD.
*/
function hideOsd() { function hideOsd() {
var bottom = dialog.querySelector('.slideshowBottomBar');
var bottom = getOsdBottom();
if (bottom) { if (bottom) {
slideDownToHide(bottom); slideDownToHide(bottom);
} }
} }
var hideTimeout; /**
* Starts the timer used to automatically hide the OSD.
*/
function startHideTimer() { function startHideTimer() {
stopHideTimer(); stopHideTimer();
hideTimeout = setTimeout(hideOsd, 4000); hideTimeout = setTimeout(hideOsd, 3000);
} }
/**
* Stops the timer used to automatically hide the OSD.
*/
function stopHideTimer() { function stopHideTimer() {
if (hideTimeout) { if (hideTimeout) {
clearTimeout(hideTimeout); clearTimeout(hideTimeout);
@ -441,71 +475,76 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f
} }
} }
function slideUpToShow(elem) { /**
* Shows the OSD by sliding it into view.
if (!elem.classList.contains('hide')) { * @param {HTMLElement} element - Element containing the OSD.
*/
function slideUpToShow(element) {
if (!element.classList.contains('hide')) {
return; return;
} }
_osdOpen = true; _osdOpen = true;
elem.classList.remove('hide'); element.classList.remove('hide');
var onFinish = function () { var onFinish = function () {
focusManager.focus(elem.querySelector('.btnSlideshowPause')); focusManager.focus(element.querySelector('.btnSlideshowPause'));
}; };
if (!elem.animate) { if (!element.animate) {
onFinish(); onFinish();
return; return;
} }
requestAnimationFrame(function () { requestAnimationFrame(function () {
var keyframes = [ var keyframes = [
{ transform: 'translate3d(0,' + elem.offsetHeight + 'px,0)', opacity: '.3', offset: 0 }, { transform: 'translate3d(0,' + element.offsetHeight + 'px,0)', opacity: '.3', offset: 0 },
{ transform: 'translate3d(0,0,0)', opacity: '1', offset: 1 } { transform: 'translate3d(0,0,0)', opacity: '1', offset: 1 }
]; ];
var timing = { duration: 300, iterations: 1, easing: 'ease-out' }; var timing = { duration: 300, iterations: 1, easing: 'ease-out' };
elem.animate(keyframes, timing).onfinish = onFinish; element.animate(keyframes, timing).onfinish = onFinish;
}); });
} }
function slideDownToHide(elem) { /**
* Hides the OSD by sliding it out of view.
if (elem.classList.contains('hide')) { * @param {HTMLElement} element - Element containing the OSD.
*/
function slideDownToHide(element) {
if (element.classList.contains('hide')) {
return; return;
} }
var onFinish = function () { var onFinish = function () {
elem.classList.add('hide'); element.classList.add('hide');
_osdOpen = false; _osdOpen = false;
}; };
if (!elem.animate) { if (!element.animate) {
onFinish(); onFinish();
return; return;
} }
requestAnimationFrame(function () { requestAnimationFrame(function () {
var keyframes = [ var keyframes = [
{ transform: 'translate3d(0,0,0)', opacity: '1', offset: 0 }, { transform: 'translate3d(0,0,0)', opacity: '1', offset: 0 },
{ transform: 'translate3d(0,' + elem.offsetHeight + 'px,0)', opacity: '.3', offset: 1 } { transform: 'translate3d(0,' + element.offsetHeight + 'px,0)', opacity: '.3', offset: 1 }
]; ];
var timing = { duration: 300, iterations: 1, easing: 'ease-out' }; var timing = { duration: 300, iterations: 1, easing: 'ease-out' };
elem.animate(keyframes, timing).onfinish = onFinish; element.animate(keyframes, timing).onfinish = onFinish;
}); });
} }
var lastMouseMoveData; /**
* Shows the OSD when moving the mouse pointer or touching the screen.
function onPointerMove(e) { * @param {Event} event - Pointer movement event.
*/
var pointerType = e.pointerType || (layoutManager.mobile ? 'touch' : 'mouse'); function onPointerMove(event) {
var pointerType = event.pointerType || (layoutManager.mobile ? 'touch' : 'mouse');
if (pointerType === 'mouse') { if (pointerType === 'mouse') {
var eventX = e.screenX || 0; var eventX = event.screenX || 0;
var eventY = e.screenY || 0; var eventY = event.screenY || 0;
var obj = lastMouseMoveData; var obj = lastMouseMoveData;
if (!obj) { if (!obj) {
@ -528,125 +567,46 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f
} }
} }
function onInputCommand(e) { /**
* Dispatches keyboard inputs to their proper handlers.
switch (e.detail.command) { * @param {Event} event - Keyboard input event.
*/
case 'left': function onInputCommand(event) {
if (!isOsdOpen()) { switch (event.detail.command) {
e.preventDefault();
e.stopPropagation();
previousImage();
}
break;
case 'right':
if (!isOsdOpen()) {
e.preventDefault();
e.stopPropagation();
nextImage();
}
break;
case 'up': case 'up':
case 'down': case 'down':
case 'select': case 'select':
case 'menu': case 'menu':
case 'info': case 'info':
case 'play':
case 'playpause':
case 'pause':
showOsd(); showOsd();
break; break;
case 'play':
play();
break;
case 'pause':
pause();
break;
case 'playpause':
playPause();
break;
default: default:
break; break;
} }
} }
function showNextImage(index, skipPreload) { /**
* Shows the slideshow component.
index = Math.max(0, index); */
if (index >= currentOptions.items.length) {
index = 0;
}
currentIndex = index;
var options = currentOptions;
var items = options.items;
var item = items[index];
var imgUrl = getImgUrl(item);
var onSrcLoaded = function () {
var cardImageContainer = dlg.querySelector('.slideshowImage');
var newCardImageContainer = document.createElement('div');
newCardImageContainer.className = cardImageContainer.className;
if (options.cover) {
newCardImageContainer.classList.add('slideshowImage-cover');
}
newCardImageContainer.style.backgroundImage = "url('" + imgUrl + "')";
newCardImageContainer.classList.add('hide');
cardImageContainer.parentNode.appendChild(newCardImageContainer);
if (options.showTitle) {
dlg.querySelector('.slideshowImageText').innerHTML = item.Name;
} else {
dlg.querySelector('.slideshowImageText').innerHTML = '';
}
newCardImageContainer.classList.remove('hide');
var onAnimationFinished = function () {
var parentNode = cardImageContainer.parentNode;
if (parentNode) {
parentNode.removeChild(cardImageContainer);
}
};
if (newCardImageContainer.animate) {
var keyframes = [
{ opacity: '0', offset: 0 },
{ opacity: '1', offset: 1 }
];
var timing = { duration: 1200, iterations: 1 };
newCardImageContainer.animate(keyframes, timing).onfinish = onAnimationFinished;
} else {
onAnimationFinished();
}
stopInterval();
currentTimeout = setTimeout(function () {
showNextImage(index + 1, true);
}, currentIntervalMs);
};
if (!skipPreload) {
var img = new Image();
img.onload = onSrcLoaded;
img.src = imgUrl;
} else {
onSrcLoaded();
}
}
function stopInterval() {
if (currentTimeout) {
clearTimeout(currentTimeout);
currentTimeout = null;
}
}
self.show = function () { self.show = function () {
startInterval(options); createElements(options);
}; };
/**
* Hides the slideshow element.
*/
self.hide = function () { self.hide = function () {
var dialog = dialog;
var dialog = dlg;
if (dialog) { if (dialog) {
dialogHelper.close(dialog); dialogHelper.close(dialog);
} }
}; };

View file

@ -30,7 +30,7 @@ define(['playbackManager', 'layoutManager', 'text!./subtitlesync.template.html',
subtitleSyncTextField.updateOffset = function(offset) { subtitleSyncTextField.updateOffset = function(offset) {
this.textContent = offset + "s"; this.textContent = offset + "s";
} };
subtitleSyncTextField.addEventListener("keypress", function(event) { subtitleSyncTextField.addEventListener("keypress", function(event) {
@ -66,7 +66,7 @@ define(['playbackManager', 'layoutManager', 'text!./subtitlesync.template.html',
subtitleSyncSlider.updateOffset = function(percent) { subtitleSyncSlider.updateOffset = function(percent) {
// default value is 0s = 50% // default value is 0s = 50%
this.value = percent === undefined ? 50 : percent; this.value = percent === undefined ? 50 : percent;
} };
subtitleSyncSlider.addEventListener("change", function () { subtitleSyncSlider.addEventListener("change", function () {
// set new offset // set new offset
@ -132,7 +132,7 @@ define(['playbackManager', 'layoutManager', 'text!./subtitlesync.template.html',
elem.parentNode.removeChild(elem); elem.parentNode.removeChild(elem);
this.element = null; this.element = null;
} }
} };
SubtitleSync.prototype.toggle = function(action) { SubtitleSync.prototype.toggle = function(action) {
@ -166,7 +166,7 @@ define(['playbackManager', 'layoutManager', 'text!./subtitlesync.template.html',
} }
/* eslint-enable no-fallthrough */ /* eslint-enable no-fallthrough */
} }
} };
return SubtitleSync; return SubtitleSync;
}); });

View file

@ -29,5 +29,5 @@ define(["datetime", "loading", "apphost", "listViewStyle", "emby-button", "flexS
loading.hide(); loading.hide();
}); });
}); });
} };
}); });

View file

@ -49,12 +49,12 @@ define(["loading", "libraryMenu", "globalize", "listViewStyle", "emby-button"],
} }
page.querySelector(".notificationList").innerHTML = html; page.querySelector(".notificationList").innerHTML = html;
loading.hide(); loading.hide();
}) });
} }
return function(view, params) { return function(view, params) {
view.addEventListener("viewshow", function() { view.addEventListener("viewshow", function() {
reload(view); reload(view);
}); });
} };
}); });

View file

@ -7,7 +7,7 @@ define(["jQuery", "loading", "events", "globalize", "serverNotifications", "date
}).then(function(tasks) { }).then(function(tasks) {
populateList(page, tasks); populateList(page, tasks);
loading.hide(); loading.hide();
}) });
} }
function populateList(page, tasks) { function populateList(page, tasks) {
@ -69,7 +69,7 @@ define(["jQuery", "loading", "events", "globalize", "serverNotifications", "date
var endtime = Date.parse(task.LastExecutionResult.EndTimeUtc); var endtime = Date.parse(task.LastExecutionResult.EndTimeUtc);
var starttime = Date.parse(task.LastExecutionResult.StartTimeUtc); var starttime = Date.parse(task.LastExecutionResult.StartTimeUtc);
html += globalize.translate("LabelScheduledTaskLastRan", datefns.formatDistanceToNow(endtime, dfnshelper.localeWithSuffix), html += globalize.translate("LabelScheduledTaskLastRan", datefns.formatDistanceToNow(endtime, dfnshelper.localeWithSuffix),
datefns.formatDistance(starttime, endtime, dfnshelper.localeWithSuffix)); datefns.formatDistance(starttime, endtime, { locale: dfnshelper.getLocale() }));
if (task.LastExecutionResult.Status === "Failed") { if (task.LastExecutionResult.Status === "Failed") {
html += " <span style='color:#FF0000;'>(" + globalize.translate("LabelFailed") + ")</span>"; html += " <span style='color:#FF0000;'>(" + globalize.translate("LabelFailed") + ")</span>";
} else if (task.LastExecutionResult.Status === "Cancelled") { } else if (task.LastExecutionResult.Status === "Cancelled") {
@ -155,7 +155,7 @@ define(["jQuery", "loading", "events", "globalize", "serverNotifications", "date
ApiClient.startScheduledTask(id).then(function() { ApiClient.startScheduledTask(id).then(function() {
updateTaskButton(button, "Running"); updateTaskButton(button, "Running");
reloadList(view); reloadList(view);
}) });
}); });
$(".divScheduledTasks", view).on("click", ".btnStopTask", function() { $(".divScheduledTasks", view).on("click", ".btnStopTask", function() {
@ -164,7 +164,7 @@ define(["jQuery", "loading", "events", "globalize", "serverNotifications", "date
ApiClient.stopScheduledTask(id).then(function() { ApiClient.stopScheduledTask(id).then(function() {
updateTaskButton(button, ""); updateTaskButton(button, "");
reloadList(view); reloadList(view);
}) });
}); });
view.addEventListener("viewbeforehide", function() { view.addEventListener("viewbeforehide", function() {
@ -178,5 +178,5 @@ define(["jQuery", "loading", "events", "globalize", "serverNotifications", "date
reloadList(view); reloadList(view);
events.on(serverNotifications, "ScheduledTasksInfo", onScheduledTasksUpdate); events.on(serverNotifications, "ScheduledTasksInfo", onScheduledTasksUpdate);
}); });
} };
}); });

View file

@ -14,6 +14,7 @@ define(["jQuery", "loading", "globalize", "dom", "libraryMenu"], function ($, lo
$("#txtVaapiDevice", page).val(config.VaapiDevice || ""); $("#txtVaapiDevice", page).val(config.VaapiDevice || "");
page.querySelector("#selectEncoderPreset").value = config.EncoderPreset || ""; page.querySelector("#selectEncoderPreset").value = config.EncoderPreset || "";
page.querySelector("#txtH264Crf").value = config.H264Crf || ""; page.querySelector("#txtH264Crf").value = config.H264Crf || "";
page.querySelector("#selectDeinterlaceMethod").value = config.DeinterlaceMethod || "";
page.querySelector("#chkEnableSubtitleExtraction").checked = config.EnableSubtitleExtraction || false; page.querySelector("#chkEnableSubtitleExtraction").checked = config.EnableSubtitleExtraction || false;
page.querySelector("#chkEnableThrottling").checked = config.EnableThrottling || false; page.querySelector("#chkEnableThrottling").checked = config.EnableThrottling || false;
page.querySelector("#selectVideoDecoder").dispatchEvent(new CustomEvent("change", { page.querySelector("#selectVideoDecoder").dispatchEvent(new CustomEvent("change", {
@ -58,6 +59,7 @@ define(["jQuery", "loading", "globalize", "dom", "libraryMenu"], function ($, lo
config.VaapiDevice = $("#txtVaapiDevice", form).val(); config.VaapiDevice = $("#txtVaapiDevice", form).val();
config.EncoderPreset = form.querySelector("#selectEncoderPreset").value; config.EncoderPreset = form.querySelector("#selectEncoderPreset").value;
config.H264Crf = parseInt(form.querySelector("#txtH264Crf").value || "0"); config.H264Crf = parseInt(form.querySelector("#txtH264Crf").value || "0");
config.DeinterlaceMethod = form.querySelector("#selectDeinterlaceMethod").value;
config.EnableSubtitleExtraction = form.querySelector("#chkEnableSubtitleExtraction").checked; config.EnableSubtitleExtraction = form.querySelector("#chkEnableSubtitleExtraction").checked;
config.EnableThrottling = form.querySelector("#chkEnableThrottling").checked; config.EnableThrottling = form.querySelector("#chkEnableThrottling").checked;
config.HardwareDecodingCodecs = Array.prototype.map.call(Array.prototype.filter.call(form.querySelectorAll(".chkDecodeCodec"), function (c) { config.HardwareDecodingCodecs = Array.prototype.map.call(Array.prototype.filter.call(form.querySelectorAll(".chkDecodeCodec"), function (c) {

View file

@ -14,7 +14,7 @@ define(["globalize", "loading", "libraryMenu", "emby-checkbox", "emby-button", "
}, { }, {
href: "metadatanfo.html", href: "metadatanfo.html",
name: Globalize.translate("TabNfoSettings") name: Globalize.translate("TabNfoSettings")
}] }];
} }
return function(view, params) { return function(view, params) {
@ -27,7 +27,7 @@ define(["globalize", "loading", "libraryMenu", "emby-checkbox", "emby-button", "
view.querySelector("#chkSaveMetadataHidden").checked = config.SaveMetadataHidden; view.querySelector("#chkSaveMetadataHidden").checked = config.SaveMetadataHidden;
}); });
ApiClient.getNamedConfiguration("metadata").then(function(metadata) { ApiClient.getNamedConfiguration("metadata").then(function(metadata) {
loadMetadataConfig(this, metadata) loadMetadataConfig(this, metadata);
}); });
} }
@ -67,5 +67,5 @@ define(["globalize", "loading", "libraryMenu", "emby-checkbox", "emby-button", "
} }
}); });
}); });
} };
}); });

View file

@ -1,4 +1,4 @@
define(["cardBuilder", "imageLoader", "libraryBrowser", "loading", "events", "emby-itemscontainer"], function (cardBuilder, imageLoader, libraryBrowser, loading, events) { define(["cardBuilder", "imageLoader", "libraryBrowser", "loading", "events", "userSettings", "emby-itemscontainer"], function (cardBuilder, imageLoader, libraryBrowser, loading, events, userSettings) {
"use strict"; "use strict";
return function (view, params, tabContent) { return function (view, params, tabContent) {
@ -7,12 +7,15 @@ define(["cardBuilder", "imageLoader", "libraryBrowser", "loading", "events", "em
pageData = { pageData = {
query: { query: {
StartIndex: 0, StartIndex: 0,
Limit: 100,
Fields: "PrimaryImageAspectRatio" Fields: "PrimaryImageAspectRatio"
} }
}; };
} }
if (userSettings.libraryPageSize() > 0) {
pageData.query['Limit'] = userSettings.libraryPageSize();
}
return pageData; return pageData;
} }
@ -39,7 +42,9 @@ define(["cardBuilder", "imageLoader", "libraryBrowser", "loading", "events", "em
return; return;
} }
query.StartIndex += query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex += query.Limit;
}
reloadItems(context); reloadItems(context);
} }
@ -48,7 +53,9 @@ define(["cardBuilder", "imageLoader", "libraryBrowser", "loading", "events", "em
return; return;
} }
query.StartIndex -= query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex = Math.max(0, query.StartIndex - query.Limit);
}
reloadItems(context); reloadItems(context);
} }

View file

@ -48,7 +48,7 @@ define(["layoutManager", "cardBuilder", "apphost", "imageLoader", "loading", "sc
} }
function getBackdropShape() { function getBackdropShape() {
return enableScrollX() ? "overflowBackdrop" : "backdrop" return enableScrollX() ? "overflowBackdrop" : "backdrop";
} }
function renderActiveRecordings(context, promise) { function renderActiveRecordings(context, promise) {

View file

@ -7,10 +7,10 @@ define(["jQuery", "dom", "loading", "libraryMenu", "listViewStyle"], function($,
html += "<option value=''></option>"; html += "<option value=''></option>";
for (var i = 0, length = languages.length; i < length; i++) { for (var i = 0, length = languages.length; i < length; i++) {
var culture = languages[i]; var culture = languages[i];
html += "<option value='" + culture.TwoLetterISOLanguageName + "'>" + culture.DisplayName + "</option>" html += "<option value='" + culture.TwoLetterISOLanguageName + "'>" + culture.DisplayName + "</option>";
} }
select.innerHTML = html select.innerHTML = html;
}) });
} }
function populateCountries(select) { function populateCountries(select) {
@ -19,25 +19,25 @@ define(["jQuery", "dom", "loading", "libraryMenu", "listViewStyle"], function($,
html += "<option value=''></option>"; html += "<option value=''></option>";
for (var i = 0, length = allCountries.length; i < length; i++) { for (var i = 0, length = allCountries.length; i < length; i++) {
var culture = allCountries[i]; var culture = allCountries[i];
html += "<option value='" + culture.TwoLetterISORegionName + "'>" + culture.DisplayName + "</option>" html += "<option value='" + culture.TwoLetterISORegionName + "'>" + culture.DisplayName + "</option>";
} }
select.innerHTML = html select.innerHTML = html;
}) });
} }
function loadPage(page) { function loadPage(page) {
var promises = [ApiClient.getServerConfiguration(), populateLanguages(page.querySelector("#selectLanguage")), populateCountries(page.querySelector("#selectCountry"))]; var promises = [ApiClient.getServerConfiguration(), populateLanguages(page.querySelector("#selectLanguage")), populateCountries(page.querySelector("#selectCountry"))];
Promise.all(promises).then(function(responses) { Promise.all(promises).then(function(responses) {
var config = responses[0]; var config = responses[0];
page.querySelector("#selectLanguage").value = config.PreferredMetadataLanguage || "", page.querySelector("#selectCountry").value = config.MetadataCountryCode || "", loading.hide() page.querySelector("#selectLanguage").value = config.PreferredMetadataLanguage || "", page.querySelector("#selectCountry").value = config.MetadataCountryCode || "", loading.hide();
}) });
} }
function onSubmit() { function onSubmit() {
var form = this; var form = this;
return loading.show(), ApiClient.getServerConfiguration().then(function(config) { return loading.show(), ApiClient.getServerConfiguration().then(function(config) {
config.PreferredMetadataLanguage = form.querySelector("#selectLanguage").value, config.MetadataCountryCode = form.querySelector("#selectCountry").value, ApiClient.updateServerConfiguration(config).then(Dashboard.processServerConfigurationUpdateResult) config.PreferredMetadataLanguage = form.querySelector("#selectLanguage").value, config.MetadataCountryCode = form.querySelector("#selectCountry").value, ApiClient.updateServerConfiguration(config).then(Dashboard.processServerConfigurationUpdateResult);
}), !1 }), !1;
} }
function getTabs() { function getTabs() {
@ -53,12 +53,12 @@ define(["jQuery", "dom", "loading", "libraryMenu", "listViewStyle"], function($,
}, { }, {
href: "metadatanfo.html", href: "metadatanfo.html",
name: Globalize.translate("TabNfoSettings") name: Globalize.translate("TabNfoSettings")
}] }];
} }
$(document).on("pageinit", "#metadataImagesConfigurationPage", function() { $(document).on("pageinit", "#metadataImagesConfigurationPage", function() {
$(".metadataImagesConfigurationForm").off("submit", onSubmit).on("submit", onSubmit) $(".metadataImagesConfigurationForm").off("submit", onSubmit).on("submit", onSubmit);
}).on("pageshow", "#metadataImagesConfigurationPage", function() { }).on("pageshow", "#metadataImagesConfigurationPage", function() {
libraryMenu.setTabs("metadata", 2, getTabs), loading.show(), loadPage(this) libraryMenu.setTabs("metadata", 2, getTabs), loading.show(), loadPage(this);
}) });
}); });

View file

@ -1,4 +1,4 @@
define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardBuilder", "apphost", "emby-itemscontainer"], function (loading, events, libraryBrowser, imageLoader, listView, cardBuilder, appHost) { define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardBuilder", "userSettings", "emby-itemscontainer"], function (loading, events, libraryBrowser, imageLoader, listView, cardBuilder, userSettings) {
"use strict"; "use strict";
return function (view, params, tabContent) { return function (view, params, tabContent) {
@ -16,11 +16,15 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
Fields: "PrimaryImageAspectRatio,SortName", Fields: "PrimaryImageAspectRatio,SortName",
ImageTypeLimit: 1, ImageTypeLimit: 1,
EnableImageTypes: "Primary,Backdrop,Banner,Thumb", EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
StartIndex: 0, StartIndex: 0
Limit: pageSize
}, },
view: libraryBrowser.getSavedView(key) || "Poster" view: libraryBrowser.getSavedView(key) || "Poster"
}; };
if (userSettings.libraryPageSize() > 0) {
pageData.query['Limit'] = userSettings.libraryPageSize();
}
pageData.query.ParentId = params.topParentId; pageData.query.ParentId = params.topParentId;
libraryBrowser.loadSavedQueryValues(key, pageData.query); libraryBrowser.loadSavedQueryValues(key, pageData.query);
} }
@ -65,7 +69,9 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
return; return;
} }
query.StartIndex += query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex += query.Limit;
}
reloadItems(tabContent); reloadItems(tabContent);
} }
@ -74,7 +80,9 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
return; return;
} }
query.StartIndex -= query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex = Math.max(0, query.StartIndex - query.Limit);
}
reloadItems(tabContent); reloadItems(tabContent);
} }
@ -180,7 +188,6 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
} }
var self = this; var self = this;
var pageSize = 100;
var data = {}; var data = {};
var isLoading = false; var isLoading = false;

View file

@ -32,7 +32,9 @@ define(["loading", "layoutManager", "userSettings", "events", "libraryBrowser",
return; return;
} }
query.StartIndex += query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex += query.Limit;
}
itemsContainer.refreshItems(); itemsContainer.refreshItems();
} }
@ -41,7 +43,9 @@ define(["loading", "layoutManager", "userSettings", "events", "libraryBrowser",
return; return;
} }
query.StartIndex -= query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex = Math.max(0, query.StartIndex - query.Limit);
}
itemsContainer.refreshItems(); itemsContainer.refreshItems();
} }
@ -250,9 +254,13 @@ define(["loading", "layoutManager", "userSettings", "events", "libraryBrowser",
ImageTypeLimit: 1, ImageTypeLimit: 1,
EnableImageTypes: "Primary,Backdrop,Banner,Thumb", EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
StartIndex: 0, StartIndex: 0,
Limit: 100,
ParentId: params.topParentId ParentId: params.topParentId
}; };
if (userSettings.libraryPageSize() > 0) {
query['Limit'] = userSettings.libraryPageSize();
}
var isLoading = false; var isLoading = false;
if (options.mode === "favorites") { if (options.mode === "favorites") {

View file

@ -1,4 +1,4 @@
define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "alphaPicker", "listView", "cardBuilder", "apphost", "emby-itemscontainer"], function (layoutManager, loading, events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder, appHost) { define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "alphaPicker", "listView", "cardBuilder", "userSettings", "emby-itemscontainer"], function (layoutManager, loading, events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder, userSettings) {
"use strict"; "use strict";
return function (view, params, tabContent) { return function (view, params, tabContent) {
@ -16,11 +16,15 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
Fields: "PrimaryImageAspectRatio,SortName,BasicSyncInfo", Fields: "PrimaryImageAspectRatio,SortName,BasicSyncInfo",
ImageTypeLimit: 1, ImageTypeLimit: 1,
EnableImageTypes: "Primary,Backdrop,Banner,Thumb", EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
StartIndex: 0, StartIndex: 0
Limit: pageSize
}, },
view: libraryBrowser.getSavedView(key) || "Poster" view: libraryBrowser.getSavedView(key) || "Poster"
}; };
if (userSettings.libraryPageSize() > 0) {
pageData.query['Limit'] = userSettings.libraryPageSize();
}
libraryBrowser.loadSavedQueryValues(key, pageData.query); libraryBrowser.loadSavedQueryValues(key, pageData.query);
} }
@ -49,7 +53,9 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
return; return;
} }
query.StartIndex += query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex += query.Limit;
}
reloadItems(); reloadItems();
} }
@ -58,7 +64,9 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
return; return;
} }
query.StartIndex -= query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex = Math.max(0, query.StartIndex - query.Limit);
}
reloadItems(); reloadItems();
} }
@ -168,7 +176,6 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
} }
var self = this; var self = this;
var pageSize = 100;
var data = {}; var data = {};
var isLoading = false; var isLoading = false;

View file

@ -1,4 +1,4 @@
define(["layoutManager", "playbackManager", "loading", "events", "libraryBrowser", "imageLoader", "alphaPicker", "listView", "cardBuilder", "apphost", "emby-itemscontainer"], function (layoutManager, playbackManager, loading, events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder, appHost) { define(["layoutManager", "playbackManager", "loading", "events", "libraryBrowser", "imageLoader", "alphaPicker", "listView", "cardBuilder", "userSettings", "emby-itemscontainer"], function (layoutManager, playbackManager, loading, events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder, userSettings) {
"use strict"; "use strict";
return function (view, params, tabContent) { return function (view, params, tabContent) {
@ -30,11 +30,15 @@ define(["layoutManager", "playbackManager", "loading", "events", "libraryBrowser
Fields: "PrimaryImageAspectRatio,SortName,BasicSyncInfo", Fields: "PrimaryImageAspectRatio,SortName,BasicSyncInfo",
ImageTypeLimit: 1, ImageTypeLimit: 1,
EnableImageTypes: "Primary,Backdrop,Banner,Thumb", EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
StartIndex: 0, StartIndex: 0
Limit: pageSize
}, },
view: libraryBrowser.getSavedView(key) || "Poster" view: libraryBrowser.getSavedView(key) || "Poster"
}; };
if (userSettings.libraryPageSize() > 0) {
pageData.query['Limit'] = userSettings.libraryPageSize();
}
pageData.query.ParentId = params.topParentId; pageData.query.ParentId = params.topParentId;
libraryBrowser.loadSavedQueryValues(key, pageData.query); libraryBrowser.loadSavedQueryValues(key, pageData.query);
} }
@ -79,7 +83,9 @@ define(["layoutManager", "playbackManager", "loading", "events", "libraryBrowser
return; return;
} }
query.StartIndex += query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex += query.Limit;
}
reloadItems(tabContent); reloadItems(tabContent);
} }
@ -88,7 +94,9 @@ define(["layoutManager", "playbackManager", "loading", "events", "libraryBrowser
return; return;
} }
query.StartIndex -= query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex = Math.max(0, query.StartIndex - query.Limit);
}
reloadItems(tabContent); reloadItems(tabContent);
} }
@ -175,7 +183,6 @@ define(["layoutManager", "playbackManager", "loading", "events", "libraryBrowser
var savedQueryKey; var savedQueryKey;
var pageData; var pageData;
var self = this; var self = this;
var pageSize = 100;
var isLoading = false; var isLoading = false;
self.showFilterMenu = function () { self.showFilterMenu = function () {

View file

@ -1,4 +1,4 @@
define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "alphaPicker", "listView", "cardBuilder", "apphost", "emby-itemscontainer"], function (layoutManager, loading, events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder, appHost) { define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "alphaPicker", "listView", "cardBuilder", "apphost", "userSettings", "emby-itemscontainer"], function (layoutManager, loading, events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder, appHost, userSettings) {
"use strict"; "use strict";
return function (view, params, tabContent) { return function (view, params, tabContent) {
@ -7,17 +7,22 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
var pageData = data[key]; var pageData = data[key];
if (!pageData) { if (!pageData) {
var queryValues = {
SortBy: "SortName",
SortOrder: "Ascending",
Recursive: true,
Fields: "PrimaryImageAspectRatio,SortName,BasicSyncInfo",
StartIndex: 0,
ImageTypeLimit: 1,
EnableImageTypes: "Primary,Backdrop,Banner,Thumb"
};
if (userSettings.libraryPageSize() > 0) {
queryValues['Limit'] = userSettings.libraryPageSize();
}
pageData = data[key] = { pageData = data[key] = {
query: { query: queryValues,
SortBy: "SortName",
SortOrder: "Ascending",
Recursive: true,
Fields: "PrimaryImageAspectRatio,SortName,BasicSyncInfo",
StartIndex: 0,
ImageTypeLimit: 1,
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
Limit: 100
},
view: libraryBrowser.getSavedView(key) || "Poster" view: libraryBrowser.getSavedView(key) || "Poster"
}; };
pageData.query.ParentId = params.topParentId; pageData.query.ParentId = params.topParentId;
@ -67,7 +72,9 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
return; return;
} }
query.StartIndex += query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex += query.Limit;
}
reloadItems(tabContent); reloadItems(tabContent);
} }
@ -76,7 +83,9 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
return; return;
} }
query.StartIndex -= query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex = Math.max(0, query.StartIndex - query.Limit);
}
reloadItems(tabContent); reloadItems(tabContent);
} }

View file

@ -1,4 +1,4 @@
define(["events", "libraryBrowser", "imageLoader", "listView", "loading", "emby-itemscontainer"], function (events, libraryBrowser, imageLoader, listView, loading) { define(["events", "libraryBrowser", "imageLoader", "listView", "loading", "userSettings", "emby-itemscontainer"], function (events, libraryBrowser, imageLoader, listView, loading, userSettings) {
"use strict"; "use strict";
return function (view, params, tabContent) { return function (view, params, tabContent) {
@ -14,12 +14,16 @@ define(["events", "libraryBrowser", "imageLoader", "listView", "loading", "emby-
IncludeItemTypes: "Audio", IncludeItemTypes: "Audio",
Recursive: true, Recursive: true,
Fields: "AudioInfo,ParentId", Fields: "AudioInfo,ParentId",
Limit: 100,
StartIndex: 0, StartIndex: 0,
ImageTypeLimit: 1, ImageTypeLimit: 1,
EnableImageTypes: "Primary" EnableImageTypes: "Primary"
} }
}; };
if (userSettings.libraryPageSize() > 0) {
pageData.query['Limit'] = userSettings.libraryPageSize();
}
pageData.query.ParentId = params.topParentId; pageData.query.ParentId = params.topParentId;
libraryBrowser.loadSavedQueryValues(key, pageData.query); libraryBrowser.loadSavedQueryValues(key, pageData.query);
} }
@ -49,7 +53,9 @@ define(["events", "libraryBrowser", "imageLoader", "listView", "loading", "emby-
return; return;
} }
query.StartIndex += query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex += query.Limit;
}
reloadItems(tabContent); reloadItems(tabContent);
} }
@ -58,7 +64,9 @@ define(["events", "libraryBrowser", "imageLoader", "listView", "loading", "emby-
return; return;
} }
query.StartIndex -= query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex = Math.max(0, query.StartIndex - query.Limit);
}
reloadItems(tabContent); reloadItems(tabContent);
} }

View file

@ -36,7 +36,7 @@ define(["jQuery", "loading", "libraryMenu"], function ($, loading, libraryMenu)
} }
$(document).on("pageinit", "#playbackConfigurationPage", function () { $(document).on("pageinit", "#playbackConfigurationPage", function () {
$(".playbackConfigurationForm").off("submit", onSubmit).on("submit", onSubmit) $(".playbackConfigurationForm").off("submit", onSubmit).on("submit", onSubmit);
}).on("pageshow", "#playbackConfigurationPage", function () { }).on("pageshow", "#playbackConfigurationPage", function () {
loading.show(); loading.show();
libraryMenu.setTabs("playback", 1, getTabs); libraryMenu.setTabs("playback", 1, getTabs);

View file

@ -1,4 +1,4 @@
define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardBuilder", "emby-itemscontainer"], function (loading, events, libraryBrowser, imageLoader, listView, cardBuilder) { define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardBuilder", "userSettings", "emby-itemscontainer"], function (loading, events, libraryBrowser, imageLoader, listView, cardBuilder, userSettings) {
"use strict"; "use strict";
return function (view, params, tabContent) { return function (view, params, tabContent) {
@ -17,11 +17,15 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
IsMissing: false, IsMissing: false,
ImageTypeLimit: 1, ImageTypeLimit: 1,
EnableImageTypes: "Primary,Backdrop,Thumb", EnableImageTypes: "Primary,Backdrop,Thumb",
StartIndex: 0, StartIndex: 0
Limit: pageSize
}, },
view: libraryBrowser.getSavedView(key) || "Poster" view: libraryBrowser.getSavedView(key) || "Poster"
}; };
if (userSettings.libraryPageSize() > 0) {
pageData.query['Limit'] = userSettings.libraryPageSize();
}
pageData.query.ParentId = params.topParentId; pageData.query.ParentId = params.topParentId;
libraryBrowser.loadSavedQueryValues(key, pageData.query); libraryBrowser.loadSavedQueryValues(key, pageData.query);
} }
@ -66,7 +70,9 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
return; return;
} }
query.StartIndex += query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex += query.Limit;
}
reloadItems(tabContent); reloadItems(tabContent);
} }
@ -75,7 +81,9 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
return; return;
} }
query.StartIndex -= query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex = Math.max(0, query.StartIndex - query.Limit);
}
reloadItems(tabContent); reloadItems(tabContent);
} }
@ -152,7 +160,6 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
} }
var self = this; var self = this;
var pageSize = 100;
var data = {}; var data = {};
var isLoading = false; var isLoading = false;

View file

@ -1,4 +1,4 @@
define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "listView", "cardBuilder", "alphaPicker", "emby-itemscontainer"], function (layoutManager, loading, events, libraryBrowser, imageLoader, listView, cardBuilder, alphaPicker) { define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "listView", "cardBuilder", "alphaPicker", "userSettings", "emby-itemscontainer"], function (layoutManager, loading, events, libraryBrowser, imageLoader, listView, cardBuilder, alphaPicker, userSettings) {
"use strict"; "use strict";
return function (view, params, tabContent) { return function (view, params, tabContent) {
@ -16,11 +16,15 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
Fields: "PrimaryImageAspectRatio,BasicSyncInfo", Fields: "PrimaryImageAspectRatio,BasicSyncInfo",
ImageTypeLimit: 1, ImageTypeLimit: 1,
EnableImageTypes: "Primary,Backdrop,Banner,Thumb", EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
StartIndex: 0, StartIndex: 0
Limit: pageSize
}, },
view: libraryBrowser.getSavedView(key) || "Poster" view: libraryBrowser.getSavedView(key) || "Poster"
}; };
if (userSettings.libraryPageSize() > 0) {
pageData.query['Limit'] = userSettings.libraryPageSize();
}
pageData.query.ParentId = params.topParentId; pageData.query.ParentId = params.topParentId;
libraryBrowser.loadSavedQueryValues(key, pageData.query); libraryBrowser.loadSavedQueryValues(key, pageData.query);
} }
@ -65,7 +69,9 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
return; return;
} }
query.StartIndex += query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex += query.Limit;
}
reloadItems(tabContent); reloadItems(tabContent);
} }
@ -74,7 +80,9 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
return; return;
} }
query.StartIndex -= query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex = Math.max(0, query.StartIndex - query.Limit);
}
reloadItems(tabContent); reloadItems(tabContent);
} }
@ -185,7 +193,6 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
} }
var self = this; var self = this;
var pageSize = 100;
var data = {}; var data = {};
var isLoading = false; var isLoading = false;

View file

@ -1,4 +1,4 @@
define(["displaySettings", "userSettingsBuilder", "userSettings", "autoFocuser"], function (DisplaySettings, userSettingsBuilder, currentUserSettings, autoFocuser) { define(["displaySettings", "userSettings", "autoFocuser"], function (DisplaySettings, userSettings, autoFocuser) {
"use strict"; "use strict";
return function (view, params) { return function (view, params) {
@ -11,7 +11,7 @@ define(["displaySettings", "userSettingsBuilder", "userSettings", "autoFocuser"]
var settingsInstance; var settingsInstance;
var hasChanges; var hasChanges;
var userId = params.userId || ApiClient.getCurrentUserId(); var userId = params.userId || ApiClient.getCurrentUserId();
var userSettings = userId === ApiClient.getCurrentUserId() ? currentUserSettings : new userSettingsBuilder(); var currentSettings = userId === ApiClient.getCurrentUserId() ? userSettings : new userSettings();
view.addEventListener("viewshow", function () { view.addEventListener("viewshow", function () {
window.addEventListener("beforeunload", onBeforeUnload); window.addEventListener("beforeunload", onBeforeUnload);
@ -22,7 +22,7 @@ define(["displaySettings", "userSettingsBuilder", "userSettings", "autoFocuser"]
serverId: ApiClient.serverId(), serverId: ApiClient.serverId(),
userId: userId, userId: userId,
element: view.querySelector(".settingsContainer"), element: view.querySelector(".settingsContainer"),
userSettings: userSettings, userSettings: currentSettings,
enableSaveButton: false, enableSaveButton: false,
enableSaveConfirmation: false, enableSaveConfirmation: false,
autoFocus: autoFocuser.isEnabled() autoFocus: autoFocuser.isEnabled()

View file

@ -1,4 +1,4 @@
define(["homescreenSettings", "userSettingsBuilder", "dom", "globalize", "loading", "userSettings", "autoFocuser", "listViewStyle"], function (HomescreenSettings, userSettingsBuilder, dom, globalize, loading, currentUserSettings, autoFocuser) { define(["homescreenSettings", "dom", "globalize", "loading", "userSettings", "autoFocuser", "listViewStyle"], function (HomescreenSettings, dom, globalize, loading, userSettings, autoFocuser) {
"use strict"; "use strict";
return function (view, params) { return function (view, params) {
@ -11,7 +11,7 @@ define(["homescreenSettings", "userSettingsBuilder", "dom", "globalize", "loadin
var homescreenSettingsInstance; var homescreenSettingsInstance;
var hasChanges; var hasChanges;
var userId = params.userId || ApiClient.getCurrentUserId(); var userId = params.userId || ApiClient.getCurrentUserId();
var userSettings = userId === ApiClient.getCurrentUserId() ? currentUserSettings : new userSettingsBuilder(); var currentSettings = userId === ApiClient.getCurrentUserId() ? userSettings : new userSettings();
view.addEventListener("viewshow", function () { view.addEventListener("viewshow", function () {
window.addEventListener("beforeunload", onBeforeUnload); window.addEventListener("beforeunload", onBeforeUnload);
@ -22,7 +22,7 @@ define(["homescreenSettings", "userSettingsBuilder", "dom", "globalize", "loadin
serverId: ApiClient.serverId(), serverId: ApiClient.serverId(),
userId: userId, userId: userId,
element: view.querySelector(".homeScreenSettingsContainer"), element: view.querySelector(".homeScreenSettingsContainer"),
userSettings: userSettings, userSettings: currentSettings,
enableSaveButton: false, enableSaveButton: false,
enableSaveConfirmation: false, enableSaveConfirmation: false,
autoFocus: autoFocuser.isEnabled() autoFocus: autoFocuser.isEnabled()

View file

@ -1,4 +1,4 @@
define(["playbackSettings", "userSettingsBuilder", "dom", "globalize", "loading", "userSettings", "autoFocuser", "listViewStyle"], function (PlaybackSettings, userSettingsBuilder, dom, globalize, loading, currentUserSettings, autoFocuser) { define(["playbackSettings", "dom", "globalize", "loading", "userSettings", "autoFocuser", "listViewStyle"], function (PlaybackSettings, dom, globalize, loading, userSettings, autoFocuser) {
"use strict"; "use strict";
return function (view, params) { return function (view, params) {
@ -11,7 +11,7 @@ define(["playbackSettings", "userSettingsBuilder", "dom", "globalize", "loading"
var settingsInstance; var settingsInstance;
var hasChanges; var hasChanges;
var userId = params.userId || ApiClient.getCurrentUserId(); var userId = params.userId || ApiClient.getCurrentUserId();
var userSettings = userId === ApiClient.getCurrentUserId() ? currentUserSettings : new userSettingsBuilder(); var currentSettings = userId === ApiClient.getCurrentUserId() ? userSettings : new userSettings();
view.addEventListener("viewshow", function () { view.addEventListener("viewshow", function () {
window.addEventListener("beforeunload", onBeforeUnload); window.addEventListener("beforeunload", onBeforeUnload);
@ -22,7 +22,7 @@ define(["playbackSettings", "userSettingsBuilder", "dom", "globalize", "loading"
serverId: ApiClient.serverId(), serverId: ApiClient.serverId(),
userId: userId, userId: userId,
element: view.querySelector(".settingsContainer"), element: view.querySelector(".settingsContainer"),
userSettings: userSettings, userSettings: currentSettings,
enableSaveButton: false, enableSaveButton: false,
enableSaveConfirmation: false, enableSaveConfirmation: false,
autoFocus: autoFocuser.isEnabled() autoFocus: autoFocuser.isEnabled()

View file

@ -1,4 +1,4 @@
define(["subtitleSettings", "userSettingsBuilder", "userSettings", "autoFocuser"], function (SubtitleSettings, userSettingsBuilder, currentUserSettings, autoFocuser) { define(["subtitleSettings", "userSettings", "autoFocuser"], function (SubtitleSettings, userSettings, autoFocuser) {
"use strict"; "use strict";
return function (view, params) { return function (view, params) {
@ -11,7 +11,7 @@ define(["subtitleSettings", "userSettingsBuilder", "userSettings", "autoFocuser"
var subtitleSettingsInstance; var subtitleSettingsInstance;
var hasChanges; var hasChanges;
var userId = params.userId || ApiClient.getCurrentUserId(); var userId = params.userId || ApiClient.getCurrentUserId();
var userSettings = userId === ApiClient.getCurrentUserId() ? currentUserSettings : new userSettingsBuilder(); var currentSettings = userId === ApiClient.getCurrentUserId() ? userSettings : new userSettings();
view.addEventListener("viewshow", function () { view.addEventListener("viewshow", function () {
window.addEventListener("beforeunload", onBeforeUnload); window.addEventListener("beforeunload", onBeforeUnload);
@ -22,7 +22,7 @@ define(["subtitleSettings", "userSettingsBuilder", "userSettings", "autoFocuser"
serverId: ApiClient.serverId(), serverId: ApiClient.serverId(),
userId: userId, userId: userId,
element: view.querySelector(".settingsContainer"), element: view.querySelector(".settingsContainer"),
userSettings: userSettings, userSettings: currentSettings,
enableSaveButton: false, enableSaveButton: false,
enableSaveConfirmation: false, enableSaveConfirmation: false,
autoFocus: autoFocuser.isEnabled() autoFocus: autoFocuser.isEnabled()

View file

@ -402,7 +402,7 @@ define(['browser', 'dom', 'layoutManager', 'keyboardnavigation', 'css!./emby-sli
this.addEventListener('keydown', onKeyDown); this.addEventListener('keydown', onKeyDown);
this.keyboardDraggingEnabled = true; this.keyboardDraggingEnabled = true;
} }
} };
/** /**
* Set steps for keyboard input. * Set steps for keyboard input.
@ -413,7 +413,7 @@ define(['browser', 'dom', 'layoutManager', 'keyboardnavigation', 'css!./emby-sli
EmbySliderPrototype.setKeyboardSteps = function (stepDown, stepUp) { EmbySliderPrototype.setKeyboardSteps = function (stepDown, stepUp) {
this.keyboardStepDown = stepDown || stepUp || 1; this.keyboardStepDown = stepDown || stepUp || 1;
this.keyboardStepUp = stepUp || stepDown || 1; this.keyboardStepUp = stepUp || stepDown || 1;
} };
function setRange(elem, startPercent, endPercent) { function setRange(elem, startPercent, endPercent) {

View file

@ -136,6 +136,14 @@
<div class="fieldDescription">${H264CrfHelp}</div> <div class="fieldDescription">${H264CrfHelp}</div>
</div> </div>
<div class="selectContainer">
<select is="emby-select" id="selectDeinterlaceMethod" label="${LabelDeinterlaceMethod}">
<option value="yadif">${Yadif}</option>
<option value="yadif_bob">${YadifBob}</option>
</select>
<div class="fieldDescription">${DeinterlaceMethodHelp}</div>
</div>
<div class="checkboxContainer checkboxContainer-withDescription"> <div class="checkboxContainer checkboxContainer-withDescription">
<label> <label>
<input is="emby-checkbox" type="checkbox" id="chkEnableSubtitleExtraction" /> <input is="emby-checkbox" type="checkbox" id="chkEnableSubtitleExtraction" />

View file

@ -186,8 +186,8 @@
</div> </div>
<div id="additionalPartsCollapsible" class="verticalSection detailVerticalSection hide"> <div id="additionalPartsCollapsible" class="verticalSection detailVerticalSection hide">
<h2 class="sectionTitle sectionTitle-cards padded-left">${HeaderAdditionalParts}</h2> <h2 class="sectionTitle sectionTitle-cards padded-left padded-right">${HeaderAdditionalParts}</h2>
<div id="additionalPartsContent" is="emby-itemscontainer" class="itemsContainer vertical-wrap"></div> <div id="additionalPartsContent" is="emby-itemscontainer" class="itemsContainer vertical-wrap padded-left padded-right"></div>
</div> </div>
<div class="verticalSection itemVerticalSection moreFromSeasonSection hide"> <div class="verticalSection itemVerticalSection moreFromSeasonSection hide">
@ -213,17 +213,17 @@
<div id="seriesScheduleSection" class="verticalSection detailVerticalSection hide"> <div id="seriesScheduleSection" class="verticalSection detailVerticalSection hide">
<h2 class="sectionTitle padded-left padded-right">${HeaderUpcomingOnTV}</h2> <h2 class="sectionTitle padded-left padded-right">${HeaderUpcomingOnTV}</h2>
<div id="seriesScheduleList" is="emby-itemscontainer" class="itemsContainer vertical-list"></div> <div id="seriesScheduleList" is="emby-itemscontainer" class="itemsContainer vertical-list padded-left padded-right"></div>
</div> </div>
<div id="specialsCollapsible" class="verticalSection detailVerticalSection hide"> <div id="specialsCollapsible" class="verticalSection detailVerticalSection hide">
<h2 class="sectionTitle sectionTitle-cards padded-left">${HeaderSpecialFeatures}</h2> <h2 class="sectionTitle sectionTitle-cards padded-left padded-right">${HeaderSpecialFeatures}</h2>
<div id="specialsContent" is="emby-itemscontainer" class="itemsContainer vertical-wrap"></div> <div id="specialsContent" is="emby-itemscontainer" class="itemsContainer vertical-wrap padded-left padded-right"></div>
</div> </div>
<div id="musicVideosCollapsible" class="verticalSection detailVerticalSection hide"> <div id="musicVideosCollapsible" class="verticalSection detailVerticalSection hide">
<h2 class="sectionTitle sectionTitle-cards padded-left">${HeaderMusicVideos}</h2> <h2 class="sectionTitle sectionTitle-cards padded-left padded-right">${HeaderMusicVideos}</h2>
<div id="musicVideosContent" is="emby-itemscontainer" class="itemsContainer vertical-wrap"></div> <div id="musicVideosContent" is="emby-itemscontainer" class="itemsContainer vertical-wrap padded-left padded-right"></div>
</div> </div>
<div id="scenesCollapsible" class="verticalSection itemVerticalSection verticalSection-extrabottompadding hide"> <div id="scenesCollapsible" class="verticalSection itemVerticalSection verticalSection-extrabottompadding hide">

View file

@ -2,19 +2,19 @@ Dashboard.confirm = function(message, title, callback) {
"use strict"; "use strict";
require(["confirm"], function(confirm) { require(["confirm"], function(confirm) {
confirm(message, title).then(function() { confirm(message, title).then(function() {
callback(!0) callback(!0);
}, function() { }, function() {
callback(!1) callback(!1);
}) });
}) });
}, Dashboard.showLoadingMsg = function() { }, Dashboard.showLoadingMsg = function() {
"use strict"; "use strict";
require(["loading"], function(loading) { require(["loading"], function(loading) {
loading.show() loading.show();
}) });
}, Dashboard.hideLoadingMsg = function() { }, Dashboard.hideLoadingMsg = function() {
"use strict"; "use strict";
require(["loading"], function(loading) { require(["loading"], function(loading) {
loading.hide() loading.hide();
}) });
}; };

View file

@ -2,9 +2,9 @@ define(["jQuery"], function($) {
"use strict"; "use strict";
$.fn.checked = function(value) { $.fn.checked = function(value) {
return !0 === value || !1 === value ? $(this).each(function() { return !0 === value || !1 === value ? $(this).each(function() {
this.checked = value this.checked = value;
}) : this.length && this[0].checked }) : this.length && this[0].checked;
}, $.fn.checkboxradio = function() { }, $.fn.checkboxradio = function() {
return this return this;
} };
}); });

View file

@ -1,6 +1,6 @@
define(["jQuery"], function($) { define(["jQuery"], function($) {
"use strict"; "use strict";
$.fn.selectmenu = function() { $.fn.selectmenu = function() {
return this return this;
} };
}); });

View file

@ -8,7 +8,7 @@
</div> </div>
<div class="inputContainer"> <div class="inputContainer">
<input is="emby-input" type="text" id="txtManualName" required="required" label="${LabelUser}" autocomplete="username" /> <input is="emby-input" type="text" id="txtManualName" required="required" label="${LabelUser}" autocomplete="username" autocapitalize="off" />
</div> </div>
<div class="inputContainer"> <div class="inputContainer">

View file

@ -101,4 +101,4 @@ export const localeWithSuffix = { addSuffix: true, locale: getLocale() };
export default { export default {
getLocale: getLocale, getLocale: getLocale,
localeWithSuffix: localeWithSuffix localeWithSuffix: localeWithSuffix
} };

View file

@ -1,4 +1,4 @@
define(['connectionManager', 'userSettings', 'events'], function (connectionManager, userSettings, events) { define(['userSettings', 'events'], function (userSettings, events) {
'use strict'; 'use strict';
var fallbackCulture = 'en-us'; var fallbackCulture = 'en-us';
@ -253,7 +253,6 @@ define(['connectionManager', 'userSettings', 'events'], function (connectionMana
updateCurrentCulture(); updateCurrentCulture();
events.on(connectionManager, 'localusersignedin', updateCurrentCulture);
events.on(userSettings, 'change', function (e, name) { events.on(userSettings, 'change', function (e, name) {
if (name === 'language' || name === 'datetimelocale') { if (name === 'language' || name === 'datetimelocale') {
updateCurrentCulture(); updateCurrentCulture();
@ -269,6 +268,7 @@ define(['connectionManager', 'userSettings', 'events'], function (connectionMana
defaultModule: defaultModule, defaultModule: defaultModule,
getCurrentLocale: getCurrentLocale, getCurrentLocale: getCurrentLocale,
getCurrentDateTimeLocale: getCurrentDateTimeLocale, getCurrentDateTimeLocale: getCurrentDateTimeLocale,
register: register register: register,
updateCurrentCulture: updateCurrentCulture
}; };
}); });

View file

@ -1,7 +1,8 @@
define(["browser"], function (browser) { /* eslint-disable indent */
"use strict";
function getDeviceIcon(device) { import browser from 'browser';
export function getDeviceIcon(device) {
var baseUrl = "assets/img/devices/"; var baseUrl = "assets/img/devices/";
switch (device.AppName || device.Client) { switch (device.AppName || device.Client) {
case "Samsung Smart TV": case "Samsung Smart TV":
@ -42,7 +43,7 @@ define(["browser"], function (browser) {
} }
} }
function getLibraryIcon(library) { export function getLibraryIcon(library) {
switch (library) { switch (library) {
case "movies": case "movies":
return "video_library"; return "video_library";
@ -71,8 +72,9 @@ define(["browser"], function (browser) {
} }
} }
return { /* eslint-enable indent */
getDeviceIcon: getDeviceIcon,
getLibraryIcon: getLibraryIcon export default {
}; getDeviceIcon: getDeviceIcon,
}); getLibraryIcon: getLibraryIcon
};

View file

@ -1,4 +1,4 @@
define(["loading", "listView", "cardBuilder", "libraryMenu", "libraryBrowser", "apphost", "imageLoader", "emby-itemscontainer"], function (loading, listView, cardBuilder, libraryMenu, libraryBrowser, appHost, imageLoader) { define(["loading", "listView", "cardBuilder", "libraryMenu", "libraryBrowser", "apphost", "imageLoader", "userSettings", "emby-itemscontainer"], function (loading, listView, cardBuilder, libraryMenu, libraryBrowser, appHost, imageLoader, userSettings) {
"use strict"; "use strict";
return function (view, params) { return function (view, params) {
@ -14,11 +14,15 @@ define(["loading", "listView", "cardBuilder", "libraryMenu", "libraryBrowser", "
IncludeItemTypes: "Playlist", IncludeItemTypes: "Playlist",
Recursive: true, Recursive: true,
Fields: "PrimaryImageAspectRatio,SortName,CumulativeRunTimeTicks,CanDelete", Fields: "PrimaryImageAspectRatio,SortName,CumulativeRunTimeTicks,CanDelete",
StartIndex: 0, StartIndex: 0
Limit: 100
}, },
view: libraryBrowser.getSavedView(key) || "Poster" view: libraryBrowser.getSavedView(key) || "Poster"
}; };
if (userSettings.libraryPageSize() > 0) {
pageData.query['Limit'] = userSettings.libraryPageSize();
}
pageData.query.ParentId = libraryMenu.getTopParentId(); pageData.query.ParentId = libraryMenu.getTopParentId();
libraryBrowser.loadSavedQueryValues(key, pageData.query); libraryBrowser.loadSavedQueryValues(key, pageData.query);
} }
@ -137,7 +141,9 @@ define(["loading", "listView", "cardBuilder", "libraryMenu", "libraryBrowser", "
if (btnNextPage) { if (btnNextPage) {
btnNextPage.addEventListener("click", function () { btnNextPage.addEventListener("click", function () {
query.StartIndex += query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex += query.Limit;
}
reloadItems(); reloadItems();
}); });
} }
@ -146,7 +152,9 @@ define(["loading", "listView", "cardBuilder", "libraryMenu", "libraryBrowser", "
if (btnPreviousPage) { if (btnPreviousPage) {
btnPreviousPage.addEventListener("click", function () { btnPreviousPage.addEventListener("click", function () {
query.StartIndex -= query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex = Math.max(0, query.StartIndex - query.Limit);
}
reloadItems(); reloadItems();
}); });
} }

View file

@ -1,5 +1,7 @@
define(['appStorage', 'events'], function (appStorage, events) { /* eslint-disable indent */
'use strict';
import appStorage from 'appStorage';
import events from 'events';
function getKey(name, userId) { function getKey(name, userId) {
if (userId) { if (userId) {
@ -9,26 +11,23 @@ define(['appStorage', 'events'], function (appStorage, events) {
return name; return name;
} }
function AppSettings() { export function enableAutoLogin(val) {
}
AppSettings.prototype.enableAutoLogin = function (val) {
if (val != null) { if (val != null) {
this.set('enableAutoLogin', val.toString()); this.set('enableAutoLogin', val.toString());
} }
return this.get('enableAutoLogin') !== 'false'; return this.get('enableAutoLogin') !== 'false';
}; }
AppSettings.prototype.enableSystemExternalPlayers = function (val) { export function enableSystemExternalPlayers(val) {
if (val !== null) { if (val !== null) {
this.set('enableSystemExternalPlayers', val.toString()); this.set('enableSystemExternalPlayers', val.toString());
} }
return this.get('enableSystemExternalPlayers') === 'true'; return this.get('enableSystemExternalPlayers') === 'true';
}; }
AppSettings.prototype.enableAutomaticBitrateDetection = function (isInNetwork, mediaType, val) { export function enableAutomaticBitrateDetection(isInNetwork, mediaType, val) {
var key = 'enableautobitratebitrate-' + mediaType + '-' + isInNetwork; var key = 'enableautobitratebitrate-' + mediaType + '-' + isInNetwork;
if (val != null) { if (val != null) {
if (isInNetwork && mediaType === 'Audio') { if (isInNetwork && mediaType === 'Audio') {
@ -43,9 +42,9 @@ define(['appStorage', 'events'], function (appStorage, events) {
} else { } else {
return this.get(key) !== 'false'; return this.get(key) !== 'false';
} }
}; }
AppSettings.prototype.maxStreamingBitrate = function (isInNetwork, mediaType, val) { export function maxStreamingBitrate(isInNetwork, mediaType, val) {
var key = 'maxbitrate-' + mediaType + '-' + isInNetwork; var key = 'maxbitrate-' + mediaType + '-' + isInNetwork;
if (val != null) { if (val != null) {
if (isInNetwork && mediaType === 'Audio') { if (isInNetwork && mediaType === 'Audio') {
@ -61,43 +60,43 @@ define(['appStorage', 'events'], function (appStorage, events) {
} else { } else {
return parseInt(this.get(key) || '0') || 1500000; return parseInt(this.get(key) || '0') || 1500000;
} }
}; }
AppSettings.prototype.maxStaticMusicBitrate = function (val) { export function maxStaticMusicBitrate(val) {
if (val !== undefined) { if (val !== undefined) {
this.set('maxStaticMusicBitrate', val); this.set('maxStaticMusicBitrate', val);
} }
var defaultValue = 320000; var defaultValue = 320000;
return parseInt(this.get('maxStaticMusicBitrate') || defaultValue.toString()) || defaultValue; return parseInt(this.get('maxStaticMusicBitrate') || defaultValue.toString()) || defaultValue;
}; }
AppSettings.prototype.maxChromecastBitrate = function (val) { export function maxChromecastBitrate(val) {
if (val != null) { if (val != null) {
this.set('chromecastBitrate1', val); this.set('chromecastBitrate1', val);
} }
val = this.get('chromecastBitrate1'); val = this.get('chromecastBitrate1');
return val ? parseInt(val) : null; return val ? parseInt(val) : null;
}; }
AppSettings.prototype.syncOnlyOnWifi = function (val) { export function syncOnlyOnWifi(val) {
if (val != null) { if (val != null) {
this.set('syncOnlyOnWifi', val.toString()); this.set('syncOnlyOnWifi', val.toString());
} }
return this.get('syncOnlyOnWifi') !== 'false'; return this.get('syncOnlyOnWifi') !== 'false';
}; }
AppSettings.prototype.syncPath = function (val) { export function syncPath(val) {
if (val != null) { if (val != null) {
this.set('syncPath', val); this.set('syncPath', val);
} }
return this.get('syncPath'); return this.get('syncPath');
}; }
AppSettings.prototype.cameraUploadServers = function (val) { export function cameraUploadServers(val) {
if (val != null) { if (val != null) {
this.set('cameraUploadServers', val.join(',')); this.set('cameraUploadServers', val.join(','));
} }
@ -108,28 +107,42 @@ define(['appStorage', 'events'], function (appStorage, events) {
} }
return []; return [];
}; }
AppSettings.prototype.runAtStartup = function (val) { export function runAtStartup(val) {
if (val != null) { if (val != null) {
this.set('runatstartup', val.toString()); this.set('runatstartup', val.toString());
} }
return this.get('runatstartup') === 'true'; return this.get('runatstartup') === 'true';
}; }
AppSettings.prototype.set = function (name, value, userId) { export function set(name, value, userId) {
var currentValue = this.get(name, userId); var currentValue = this.get(name, userId);
appStorage.setItem(getKey(name, userId), value); appStorage.setItem(getKey(name, userId), value);
if (currentValue !== value) { if (currentValue !== value) {
events.trigger(this, 'change', [name]); events.trigger(this, 'change', [name]);
} }
}; }
AppSettings.prototype.get = function (name, userId) { export function get(name, userId) {
return appStorage.getItem(getKey(name, userId)); return appStorage.getItem(getKey(name, userId));
}; }
return new AppSettings(); /* eslint-enable indent */
});
export default {
enableAutoLogin: enableAutoLogin,
enableSystemExternalPlayers: enableSystemExternalPlayers,
enableAutomaticBitrateDetection: enableAutomaticBitrateDetection,
maxStreamingBitrate: maxStreamingBitrate,
maxStaticMusicBitrate: maxStaticMusicBitrate,
maxChromecastBitrate: maxChromecastBitrate,
syncOnlyOnWifi: syncOnlyOnWifi,
syncPath: syncPath,
cameraUploadServers: cameraUploadServers,
runAtStartup: runAtStartup,
set: set,
get: get
};

View file

@ -1,5 +1,7 @@
define(['appSettings', 'events'], function (appSettings, events) { /* eslint-disable indent */
'use strict';
import appSettings from 'appSettings';
import events from 'events';
function onSaveTimeout() { function onSaveTimeout() {
var self = this; var self = this;
@ -15,10 +17,7 @@ define(['appSettings', 'events'], function (appSettings, events) {
instance.saveTimeout = setTimeout(onSaveTimeout.bind(instance), 50); instance.saveTimeout = setTimeout(onSaveTimeout.bind(instance), 50);
} }
function UserSettings() { export function setUserInfo(userId, apiClient) {
}
UserSettings.prototype.setUserInfo = function (userId, apiClient) {
if (this.saveTimeout) { if (this.saveTimeout) {
clearTimeout(this.saveTimeout); clearTimeout(this.saveTimeout);
} }
@ -37,17 +36,17 @@ define(['appSettings', 'events'], function (appSettings, events) {
result.CustomPrefs = result.CustomPrefs || {}; result.CustomPrefs = result.CustomPrefs || {};
self.displayPrefs = result; self.displayPrefs = result;
}); });
}; }
UserSettings.prototype.getData = function () { export function getData() {
return this.displayPrefs; return this.displayPrefs;
}; }
UserSettings.prototype.importFrom = function (instance) { export function importFrom(instance) {
this.displayPrefs = instance.getData(); this.displayPrefs = instance.getData();
}; }
UserSettings.prototype.set = function (name, value, enableOnServer) { export function set(name, value, enableOnServer) {
var userId = this.currentUserId; var userId = this.currentUserId;
var currentValue = this.get(name, enableOnServer); var currentValue = this.get(name, enableOnServer);
var result = appSettings.set(name, value, userId); var result = appSettings.set(name, value, userId);
@ -62,18 +61,18 @@ define(['appSettings', 'events'], function (appSettings, events) {
} }
return result; return result;
}; }
UserSettings.prototype.get = function (name, enableOnServer) { export function get(name, enableOnServer) {
var userId = this.currentUserId; var userId = this.currentUserId;
if (enableOnServer !== false && this.displayPrefs) { if (enableOnServer !== false && this.displayPrefs) {
return this.displayPrefs.CustomPrefs[name]; return this.displayPrefs.CustomPrefs[name];
} }
return appSettings.get(name, userId); return appSettings.get(name, userId);
}; }
UserSettings.prototype.serverConfig = function (config) { export function serverConfig(config) {
var apiClient = this.currentApiClient; var apiClient = this.currentApiClient;
if (config) { if (config) {
return apiClient.updateUserConfiguration(this.currentUserId, config); return apiClient.updateUserConfiguration(this.currentUserId, config);
@ -82,135 +81,149 @@ define(['appSettings', 'events'], function (appSettings, events) {
return apiClient.getUser(this.currentUserId).then(function (user) { return apiClient.getUser(this.currentUserId).then(function (user) {
return user.Configuration; return user.Configuration;
}); });
}; }
UserSettings.prototype.enableCinemaMode = function (val) { export function enableCinemaMode(val) {
if (val != null) { if (val != null) {
return this.set('enableCinemaMode', val.toString(), false); return this.set('enableCinemaMode', val.toString(), false);
} }
val = this.get('enableCinemaMode', false); val = this.get('enableCinemaMode', false);
return val !== 'false'; return val !== 'false';
}; }
UserSettings.prototype.enableNextVideoInfoOverlay = function (val) { export function enableNextVideoInfoOverlay(val) {
if (val != null) { if (val != null) {
return this.set('enableNextVideoInfoOverlay', val.toString()); return this.set('enableNextVideoInfoOverlay', val.toString());
} }
val = this.get('enableNextVideoInfoOverlay', false); val = this.get('enableNextVideoInfoOverlay', false);
return val !== 'false'; return val !== 'false';
}; }
UserSettings.prototype.enableThemeSongs = function (val) { export function enableThemeSongs(val) {
if (val != null) { if (val != null) {
return this.set('enableThemeSongs', val.toString(), false); return this.set('enableThemeSongs', val.toString(), false);
} }
val = this.get('enableThemeSongs', false); val = this.get('enableThemeSongs', false);
return val !== 'false'; return val !== 'false';
}; }
UserSettings.prototype.enableThemeVideos = function (val) { export function enableThemeVideos(val) {
if (val != null) { if (val != null) {
return this.set('enableThemeVideos', val.toString(), false); return this.set('enableThemeVideos', val.toString(), false);
} }
val = this.get('enableThemeVideos', false); val = this.get('enableThemeVideos', false);
return val !== 'false'; return val !== 'false';
}; }
UserSettings.prototype.enableFastFadein = function (val) { export function enableFastFadein(val) {
if (val != null) { if (val != null) {
return this.set('fastFadein', val.toString(), false); return this.set('fastFadein', val.toString(), false);
} }
val = this.get('fastFadein', false); val = this.get('fastFadein', false);
return val !== 'false'; return val !== 'false';
}; }
UserSettings.prototype.enableBackdrops = function (val) { export function enableBackdrops(val) {
if (val != null) { if (val != null) {
return this.set('enableBackdrops', val.toString(), false); return this.set('enableBackdrops', val.toString(), false);
} }
val = this.get('enableBackdrops', false); val = this.get('enableBackdrops', false);
return val !== 'false'; return val !== 'false';
}; }
UserSettings.prototype.language = function (val) { export function language(val) {
if (val != null) { if (val != null) {
return this.set('language', val.toString(), false); return this.set('language', val.toString(), false);
} }
return this.get('language', false); return this.get('language', false);
}; }
UserSettings.prototype.dateTimeLocale = function (val) { export function dateTimeLocale(val) {
if (val != null) { if (val != null) {
return this.set('datetimelocale', val.toString(), false); return this.set('datetimelocale', val.toString(), false);
} }
return this.get('datetimelocale', false); return this.get('datetimelocale', false);
}; }
UserSettings.prototype.skipBackLength = function (val) { export function skipBackLength(val) {
if (val != null) { if (val != null) {
return this.set('skipBackLength', val.toString()); return this.set('skipBackLength', val.toString());
} }
return parseInt(this.get('skipBackLength') || '10000'); return parseInt(this.get('skipBackLength') || '10000');
}; }
UserSettings.prototype.skipForwardLength = function (val) { export function skipForwardLength(val) {
if (val != null) { if (val != null) {
return this.set('skipForwardLength', val.toString()); return this.set('skipForwardLength', val.toString());
} }
return parseInt(this.get('skipForwardLength') || '30000'); return parseInt(this.get('skipForwardLength') || '30000');
}; }
UserSettings.prototype.dashboardTheme = function (val) { export function dashboardTheme(val) {
if (val != null) { if (val != null) {
return this.set('dashboardTheme', val); return this.set('dashboardTheme', val);
} }
return this.get('dashboardTheme'); return this.get('dashboardTheme');
}; }
UserSettings.prototype.skin = function (val) { export function skin(val) {
if (val != null) { if (val != null) {
return this.set('skin', val, false); return this.set('skin', val, false);
} }
return this.get('skin', false); return this.get('skin', false);
}; }
UserSettings.prototype.theme = function (val) { export function theme(val) {
if (val != null) { if (val != null) {
return this.set('appTheme', val, false); return this.set('appTheme', val, false);
} }
return this.get('appTheme', false); return this.get('appTheme', false);
}; }
UserSettings.prototype.screensaver = function (val) { export function screensaver(val) {
if (val != null) { if (val != null) {
return this.set('screensaver', val, false); return this.set('screensaver', val, false);
} }
return this.get('screensaver', false); return this.get('screensaver', false);
}; }
UserSettings.prototype.soundEffects = function (val) { export function libraryPageSize(val) {
if (val != null) {
return this.set('libraryPageSize', parseInt(val, 10), false);
}
var libraryPageSize = parseInt(this.get('libraryPageSize', false), 10);
if (libraryPageSize === 0) {
// Explicitly return 0 to avoid returning 100 because 0 is falsy.
return 0;
} else {
return libraryPageSize || 100;
}
}
export function soundEffects(val) {
if (val != null) { if (val != null) {
return this.set('soundeffects', val, false); return this.set('soundeffects', val, false);
} }
return this.get('soundeffects', false); return this.get('soundeffects', false);
}; }
UserSettings.prototype.loadQuerySettings = function (key, query) { export function loadQuerySettings(key, query) {
var values = this.get(key); var values = this.get(key);
if (values) { if (values) {
values = JSON.parse(values); values = JSON.parse(values);
@ -218,9 +231,9 @@ define(['appSettings', 'events'], function (appSettings, events) {
} }
return query; return query;
}; }
UserSettings.prototype.saveQuerySettings = function (key, query) { export function saveQuerySettings(key, query) {
var values = {}; var values = {};
if (query.SortBy) { if (query.SortBy) {
values.SortBy = query.SortBy; values.SortBy = query.SortBy;
@ -231,25 +244,24 @@ define(['appSettings', 'events'], function (appSettings, events) {
} }
return this.set(key, JSON.stringify(values)); return this.set(key, JSON.stringify(values));
}; }
UserSettings.prototype.getSubtitleAppearanceSettings = function (key) { export function getSubtitleAppearanceSettings(key) {
key = key || 'localplayersubtitleappearance3'; key = key || 'localplayersubtitleappearance3';
return JSON.parse(this.get(key, false) || '{}'); return JSON.parse(this.get(key, false) || '{}');
}; }
UserSettings.prototype.setSubtitleAppearanceSettings = function (value, key) { export function setSubtitleAppearanceSettings(value, key) {
key = key || 'localplayersubtitleappearance3'; key = key || 'localplayersubtitleappearance3';
return this.set(key, JSON.stringify(value), false); return this.set(key, JSON.stringify(value), false);
}; }
UserSettings.prototype.setFilter = function (key, value) { export function setFilter(key, value) {
return this.set(key, value, true); return this.set(key, value, true);
}; }
UserSettings.prototype.getFilter = function (key) { export function getFilter(key) {
return this.get(key, true); return this.get(key, true);
}; }
return UserSettings; /* eslint-enable indent */
});

View file

@ -323,11 +323,11 @@ var AppInfo = {};
} }
function getElementsPath() { function getElementsPath() {
return "elements" return "elements";
} }
function getScriptsPath() { function getScriptsPath() {
return "scripts" return "scripts";
} }
function getPlaybackManager(playbackManager) { function getPlaybackManager(playbackManager) {
@ -452,6 +452,9 @@ var AppInfo = {};
require(["autoFocuser"], function(autoFocuser) { require(["autoFocuser"], function(autoFocuser) {
autoFocuser.enable(); autoFocuser.enable();
}); });
require(['globalize', 'connectionManager', 'events'], function (globalize, connectionManager, events) {
events.on(connectionManager, 'localusersignedin', globalize.updateCurrentCulture);
});
}); });
}); });
} }
@ -702,7 +705,8 @@ var AppInfo = {};
"page", "page",
"polyfill", "polyfill",
"fast-text-encoding", "fast-text-encoding",
"intersection-observer" "intersection-observer",
"classlist-polyfill"
] ]
}, },
urlArgs: urlArgs, urlArgs: urlArgs,
@ -713,6 +717,7 @@ var AppInfo = {};
require(["polyfill"]); require(["polyfill"]);
require(["fast-text-encoding"]); require(["fast-text-encoding"]);
require(["intersection-observer"]); require(["intersection-observer"]);
require(["classlist-polyfill"]);
// Expose jQuery globally // Expose jQuery globally
require(["jQuery"], function(jQuery) { require(["jQuery"], function(jQuery) {
@ -778,10 +783,7 @@ var AppInfo = {};
define("webSettings", [scriptsPath + "/settings/webSettings"], returnFirstDependency); define("webSettings", [scriptsPath + "/settings/webSettings"], returnFirstDependency);
define("appSettings", [scriptsPath + "/settings/appSettings"], returnFirstDependency); define("appSettings", [scriptsPath + "/settings/appSettings"], returnFirstDependency);
define("userSettingsBuilder", [scriptsPath + "/settings/userSettingsBuilder"], returnFirstDependency); define("userSettings", [scriptsPath + "/settings/userSettings"], returnFirstDependency);
define("userSettings", ["userSettingsBuilder"], function(userSettingsBuilder) {
return new userSettingsBuilder();
});
define("chromecastHelper", [componentsPath + "/chromecast/chromecasthelpers"], returnFirstDependency); define("chromecastHelper", [componentsPath + "/chromecast/chromecasthelpers"], returnFirstDependency);
define("mediaSession", [componentsPath + "/playback/mediasession"], returnFirstDependency); define("mediaSession", [componentsPath + "/playback/mediasession"], returnFirstDependency);

View file

@ -1,27 +0,0 @@
define(["dom", "emby-button"], function (dom) {
"use strict";
function onSubmit(e) {
if (dom.parentWithClass(this, "page").querySelector(".chkAccept").checked) {
Dashboard.navigate("wizardfinish.html");
} else {
Dashboard.alert({
message: Globalize.translate("MessagePleaseAcceptTermsOfServiceBeforeContinuing"),
title: ""
});
}
e.preventDefault();
return false;
}
return function (view, params) {
view.querySelector(".wizardAgreementForm").addEventListener("submit", onSubmit);
view.addEventListener("viewshow", function () {
document.querySelector(".skinHeader").classList.add("noHomeButtonHeader");
});
view.addEventListener("viewhide", function () {
document.querySelector(".skinHeader").classList.remove("noHomeButtonHeader");
});
};
});

View file

@ -919,7 +919,7 @@
"HeaderFavoriteArtists": "الفنانون المفضلون", "HeaderFavoriteArtists": "الفنانون المفضلون",
"Shows": "الحلقات", "Shows": "الحلقات",
"Books": "الكتب", "Books": "الكتب",
"ValueSpecialEpisodeName": "مميز - {0}", "ValueSpecialEpisodeName": "خاص - {0}",
"HeaderFavoriteAlbums": "الألبومات المفضلة", "HeaderFavoriteAlbums": "الألبومات المفضلة",
"HeaderAlbumArtists": "فناني الألبومات", "HeaderAlbumArtists": "فناني الألبومات",
"Genres": "الأنواع", "Genres": "الأنواع",
@ -952,7 +952,7 @@
"Artists": "الفنانين", "Artists": "الفنانين",
"Art": "فن", "Art": "فن",
"Anytime": "اي وقت", "Anytime": "اي وقت",
"AnyLanguage": "اي لغة", "AnyLanguage": "أي لغة",
"AlwaysPlaySubtitlesHelp": "الترجمة التي تطابق تفضيلات اللغة سيتم تحميلها بغض النظر عن لغة الصوت.", "AlwaysPlaySubtitlesHelp": "الترجمة التي تطابق تفضيلات اللغة سيتم تحميلها بغض النظر عن لغة الصوت.",
"AlwaysPlaySubtitles": "شغل الترجمة دائماً", "AlwaysPlaySubtitles": "شغل الترجمة دائماً",
"AllowedRemoteAddressesHelp": "قائمة لعناوين IP أو إدخالات IP / قناع الشبكة مفصولة بفاصلة للشبكات التي سيتم السماح لها بالاتصال عن بعد. إذا تركت فارغة ، فسيتم السماح بجميع العناوين البعيدة.", "AllowedRemoteAddressesHelp": "قائمة لعناوين IP أو إدخالات IP / قناع الشبكة مفصولة بفاصلة للشبكات التي سيتم السماح لها بالاتصال عن بعد. إذا تركت فارغة ، فسيتم السماح بجميع العناوين البعيدة.",
@ -1040,5 +1040,10 @@
"DatePlayed": "تاريخ التشغيل", "DatePlayed": "تاريخ التشغيل",
"DateAdded": "تاريخ الاضافة", "DateAdded": "تاريخ الاضافة",
"CriticRating": "تقييم النقاد", "CriticRating": "تقييم النقاد",
"ResumeAt": "اكمل من {0}" "ResumeAt": "اكمل من {0}",
"AskAdminToCreateLibrary": "أطلب من الأدمن إنشاء مكتبة.",
"Artist": "الفنان",
"AllowFfmpegThrottling": "إبطاء الترميزات",
"AlbumArtist": "المؤدي",
"Album": "الألبوم"
} }

View file

@ -305,7 +305,7 @@
"LabelCustomCertificatePath": "Път към потребителския сертификат:", "LabelCustomCertificatePath": "Път към потребителския сертификат:",
"LabelCustomCertificatePathHelp": "Път до файл с шифровъчен стандарт №12 (PKCS #12), съдържащ сертификат и частен ключ за поддръжка на протокол TLS на собствен домейн.", "LabelCustomCertificatePathHelp": "Път до файл с шифровъчен стандарт №12 (PKCS #12), съдържащ сертификат и частен ключ за поддръжка на протокол TLS на собствен домейн.",
"LabelCustomCss": "CSS по избор:", "LabelCustomCss": "CSS по избор:",
"LabelCustomCssHelp": "Използвайте собствен CSS към мрежовия интерфейс.", "LabelCustomCssHelp": "Добавете собствен стил за Уеб-интерфейса.",
"LabelCustomDeviceDisplayName": "Показвано име:", "LabelCustomDeviceDisplayName": "Показвано име:",
"LabelCustomRating": "Оценка по избор:", "LabelCustomRating": "Оценка по избор:",
"LabelDashboardTheme": "Облик на сървърното табло:", "LabelDashboardTheme": "Облик на сървърното табло:",
@ -786,7 +786,7 @@
"AllowMediaConversion": "Разрешаване на медийни преобразувания", "AllowMediaConversion": "Разрешаване на медийни преобразувания",
"AllLanguages": "Всички езици", "AllLanguages": "Всички езици",
"AllEpisodes": "Всички епизоди", "AllEpisodes": "Всички епизоди",
"AllComplexFormats": "Всички комплексни формати (ASS, SSA, VOBSUB, PGS, SUB/IDX, и т.н.)", "AllComplexFormats": "Всички общи формати (ASS, SSA, VOBSUB, PGS, SUB/IDX, и др. )",
"AllChannels": "Всички канали", "AllChannels": "Всички канали",
"Alerts": "Известия", "Alerts": "Известия",
"AdditionalNotificationServices": "Разгледайте каталога с добавки за допълнителни услуги за известяване.", "AdditionalNotificationServices": "Разгледайте каталога с добавки за допълнителни услуги за известяване.",
@ -836,10 +836,41 @@
"AddItemToCollectionHelp": "Добавяне към колекция чрез търсенето им и използване на дясно-щракване с мишката или контекстното меню.", "AddItemToCollectionHelp": "Добавяне към колекция чрез търсенето им и използване на дясно-щракване с мишката или контекстното меню.",
"Absolute": "Aбсолютен", "Absolute": "Aбсолютен",
"LabelLanNetworks": "Локални мрежи:", "LabelLanNetworks": "Локални мрежи:",
"LabelKodiMetadataSaveImagePathsHelp": "Препоръчително е ако имате изображения, пътят към които не е съобразен с изискванията на Коди.", "LabelKodiMetadataSaveImagePathsHelp": "Това е препоръчително ако имате изображения, пътят към които не е съобразен с изискванията на Kodi",
"LabelKodiMetadataSaveImagePaths": "Записване на пътеките към изображенията в nfo файловете", "LabelKodiMetadataSaveImagePaths": "Записване на пътеките към изображенията в nfo файловете",
"LabelChannels": "Канали:", "LabelChannels": "Канали:",
"DropShadow": "Сянка", "DropShadow": "Сянка",
"Raised": "Повишено", "Raised": "Повишено",
"OptionResElement": "рес. елемент" "OptionResElement": "рес. елемент",
"ButtonChangeServer": "Смяна на сървър",
"ButtonAddImage": "Добавяне на изображение",
"BrowsePluginCatalogMessage": "За да видите наличните добавки, прегледайте каталога с добавките.",
"Box": "Кутия",
"AlwaysPlaySubtitlesHelp": "Поднадписите, съвпадащи с езика от настройките, ще се зареждат, независимо от езика на аудио то.",
"BookLibraryHelp": "Поддържат се звукови и текстови книги. Преглед на инструкция за наименоване {1} на книга {0}.",
"Blacklist": "Списък с блокирани",
"BirthLocation": "Месторождение",
"Banner": "Банер",
"AspectRatio": "Съотношение",
"AskAdminToCreateLibrary": "Помолете администратора за създаване на библиотека.",
"Ascending": "Възходящо",
"AsManyAsPossible": "Колкото е възможно повече",
"Artist": "Артист",
"AroundTime": "Към {0}",
"Anytime": "По всяко време",
"AnyLanguage": "Който и да е език",
"AlwaysPlaySubtitles": "Постоянно изпълнение",
"AllowRemoteAccessHelp": "Ако не е маркирано, всеки отдалечен достъп ще бъде блокиран.",
"AllowRemoteAccess": "Позволяване на отдалечен достъп до този Jellyfin сървър.",
"AllowFfmpegThrottling": "Подтискане на прекодирането",
"AllowMediaConversionHelp": "Даване или отнемане на права за функциите за конвертиране на медия.",
"AlbumArtist": "Изпълнител",
"Album": "Албум",
"ClientSettings": "Клиентски настройки",
"ChannelNumber": "Номер на канала",
"ChannelNameOnly": "Само {0} канал",
"CancelSeries": "Откажи сериите",
"CancelRecording": "Откажи записа",
"ButtonSplit": "Раздели",
"ButtonResetEasyPassword": "Нулиране на бързия ПИН код"
} }

View file

@ -426,7 +426,7 @@
"Images": "Obrázky", "Images": "Obrázky",
"ImportFavoriteChannelsHelp": "Pokud je povoleno, jen kanály označené jako oblíbené budou importována na zařízení tuneru.", "ImportFavoriteChannelsHelp": "Pokud je povoleno, jen kanály označené jako oblíbené budou importována na zařízení tuneru.",
"ImportMissingEpisodesHelp": "Pokud je povoleno, budou informace o chybějících epizodách importovány do databáze Jellyfin a zobrazí se v sezónách seriálu. To může způsobit podstatně delší skenování knihovny.", "ImportMissingEpisodesHelp": "Pokud je povoleno, budou informace o chybějících epizodách importovány do databáze Jellyfin a zobrazí se v sezónách seriálu. To může způsobit podstatně delší skenování knihovny.",
"InstallingPackage": "Instalace {0}", "InstallingPackage": "Instalace {0} (Verze {1})",
"InstantMix": "Okamžité míchání", "InstantMix": "Okamžité míchání",
"ItemCount": "{0} položek", "ItemCount": "{0} položek",
"Items": "Položky", "Items": "Položky",
@ -1584,5 +1584,15 @@
"ClientSettings": "Nastavení klienta", "ClientSettings": "Nastavení klienta",
"Artist": "Interpret", "Artist": "Interpret",
"AlbumArtist": "Interpret alba", "AlbumArtist": "Interpret alba",
"Album": "Album" "Album": "Album",
"OnApplicationStartup": "Při zapnutí aplikace",
"EveryXHours": "Každých {0} hodin",
"EveryHour": "Každou hodinu",
"EveryXMinutes": "Každých {0} minut",
"OnWakeFromSleep": "Při probuzení",
"DailyAt": "Denně v {0}",
"PersonRole": "jako {0}",
"ListPaging": "{0}-{1} ze {2}",
"WriteAccessRequired": "Jellyfin Server potřebuje oprávnění pro zápis v této složce. Zkontrolujte oprávnění a zkuste to znovu.",
"PathNotFound": "Cesta nebyla nalezena. Zkontrolujte, zda je platná a zkuste to znovu."
} }

View file

@ -12,11 +12,11 @@
"AllChannels": "Alle kanaler", "AllChannels": "Alle kanaler",
"AllEpisodes": "Alle episoder", "AllEpisodes": "Alle episoder",
"AllLibraries": "Alle biblioteker", "AllLibraries": "Alle biblioteker",
"AllowHWTranscodingHelp": "Hvis aktiveret, omkoder tuneren streams on-the-fly. Dette kan hjælpe med at reducere omkodning der kræves af Jellyfin Server.", "AllowHWTranscodingHelp": "Lader tuneren omkode streams on-the-fly. Dette kan hjælpe med at reducere omkodning der kræves af serveren.",
"AllowMediaConversion": "Tillad media konvertering", "AllowMediaConversion": "Tillad media konvertering",
"AllowMediaConversionHelp": "Giv eller nægt adgang til Konvertér Media featuren.", "AllowMediaConversionHelp": "Giv eller nægt adgang til Konvertér Media featuren.",
"AllowOnTheFlySubtitleExtraction": "Tillad udtræk af undertekster on-the-fly", "AllowOnTheFlySubtitleExtraction": "Tillad udtræk af undertekster on-the-fly",
"AllowOnTheFlySubtitleExtractionHelp": "Indeholdte undertekster kan trækkes ud af videoer og leveres til Jellyfin apps i ren tekst for at afhjælpe video kodning. På nogle systemer kan dette tage lang tid og forårsage at afspilning kan hænge mens den udtrækker. Slå dette fra, for at have undertekster brændt ind i video kodningen når det er supporteret på klient enheden.", "AllowOnTheFlySubtitleExtractionHelp": "Indeholdte undertekster kan trækkes ud af videoer og leveres til klienter i ren tekst for at afhjælpe video kodning. På nogle systemer kan dette tage lang tid og forårsage at afspilning kan hænge mens den udtrækker. Slå dette fra, for at have undertekster brændt ind i video kodningen når det er supporteret på klient enheden.",
"AllowRemoteAccess": "Tillad fjernadgang til denne Jellyfin Server.", "AllowRemoteAccess": "Tillad fjernadgang til denne Jellyfin Server.",
"AllowRemoteAccessHelp": "Hvis ikke markeret, vil alle fjernforbindelser blive blokeret.", "AllowRemoteAccessHelp": "Hvis ikke markeret, vil alle fjernforbindelser blive blokeret.",
"AllowedRemoteAddressesHelp": "Komma seperareret liste over IP adresser og netmasker der har ret til fjernadgang. Hvis blank er alle adresser tilladte.", "AllowedRemoteAddressesHelp": "Komma seperareret liste over IP adresser og netmasker der har ret til fjernadgang. Hvis blank er alle adresser tilladte.",
@ -1092,9 +1092,9 @@
"Absolute": "Absolut", "Absolute": "Absolut",
"AccessRestrictedTryAgainLater": "Adgang er begrænset. Prøv igen senere.", "AccessRestrictedTryAgainLater": "Adgang er begrænset. Prøv igen senere.",
"Aired": "Blev sendt", "Aired": "Blev sendt",
"AllComplexFormats": "Alle komplekse formater (ASS, SSA, VOBSUB, PGS, SUB/IDX osv.)", "AllComplexFormats": "Alle Komplekse Formater (ASS, SSA, VOBSUB, PGS, SUB,IDX osv.)",
"AllLanguages": "Alle sprog", "AllLanguages": "Alle sprog",
"AlwaysPlaySubtitles": "Afspil altid undertekster", "AlwaysPlaySubtitles": "Afspil Altid",
"AlwaysPlaySubtitlesHelp": "Undertekster, der matcher dine sprogindstillinger, vil altid blive indlæst uanset lydsprog.", "AlwaysPlaySubtitlesHelp": "Undertekster, der matcher dine sprogindstillinger, vil altid blive indlæst uanset lydsprog.",
"HeaderLiveTV": "Live-TV", "HeaderLiveTV": "Live-TV",
"Shows": "Serier", "Shows": "Serier",
@ -1532,5 +1532,9 @@
"LabelServerName": "Server navn:", "LabelServerName": "Server navn:",
"LabelUserLoginAttemptsBeforeLockout": "Fejlede loginforsøg før bruger lukkes ude:", "LabelUserLoginAttemptsBeforeLockout": "Fejlede loginforsøg før bruger lukkes ude:",
"HeaderRestartingServer": "Genstarter Server", "HeaderRestartingServer": "Genstarter Server",
"ButtonAddImage": "Tilføj billede" "ButtonAddImage": "Tilføj billede",
"AllowFfmpegThrottlingHelp": "Når en omkodning eller remux kommer langt nok foran den nuværende afspildings position, pauses processen så der bruges færre resurser. Dette er mest brugbart når man ikke springer i filmen. Slå dette fra hvis du har problemer med playback.",
"AllowFfmpegThrottling": "Begræns Omkodning",
"AlbumArtist": "Album Artist",
"Album": "Album"
} }

View file

@ -11,13 +11,13 @@
"AddUser": "Benutzer anlegen", "AddUser": "Benutzer anlegen",
"AddUserByManually": "Lege einen lokalen User durch manuelle Eingabe der User-Informationen an.", "AddUserByManually": "Lege einen lokalen User durch manuelle Eingabe der User-Informationen an.",
"AddedOnValue": "{0} hinzugefügt", "AddedOnValue": "{0} hinzugefügt",
"AdditionalNotificationServices": "Schau im Pluginkatalog, um weitere Benachrichtigungsdienste zu installieren.", "AdditionalNotificationServices": "Durchsuche den Pluginkatalog, um weitere Benachrichtigungsdienste zu installieren.",
"AirDate": "Erstausstrahlung", "AirDate": "Erstausstrahlung",
"Aired": "Ausgestrahlt", "Aired": "Ausgestrahlt",
"Albums": "Alben", "Albums": "Alben",
"All": "Alle", "All": "Alle",
"AllChannels": "Alle Kanäle", "AllChannels": "Alle Kanäle",
"AllComplexFormats": "Alle komplexen Formate (ASS, SSA, VOBSUB, PGS, SUB/IDX, etc.)", "AllComplexFormats": "Alle komplexen Formate (ASS, SSA, VOBSUB, PGS, SUB/IDX)",
"AllEpisodes": "Alle Folgen", "AllEpisodes": "Alle Folgen",
"AllLanguages": "Alle Sprachen", "AllLanguages": "Alle Sprachen",
"AllLibraries": "Alle Bibliotheken", "AllLibraries": "Alle Bibliotheken",
@ -26,13 +26,13 @@
"AllowMediaConversion": "Erlaube Medienkonvertierung", "AllowMediaConversion": "Erlaube Medienkonvertierung",
"AllowMediaConversionHelp": "Erlaube oder unterbinde Zugriff auf die Medienkonvertierung.", "AllowMediaConversionHelp": "Erlaube oder unterbinde Zugriff auf die Medienkonvertierung.",
"AllowOnTheFlySubtitleExtraction": "Erlaube Untertitelextraktion \"on-the-fly\"", "AllowOnTheFlySubtitleExtraction": "Erlaube Untertitelextraktion \"on-the-fly\"",
"AllowOnTheFlySubtitleExtractionHelp": "Eingebettete Untertitel können aus Videos extrahiert und im Textformat an Clients gesendet werden um die Videotranskodierung zu vermeiden. Auf manchen Systemen kann dieser Vorgang eine lange Zeit in Anspruch nehmen und die Videowiedergabe während der Extraktion unterbrochen werden. Deaktiviere diese Option um eingebettete Untertitel während der Videotranskodierung einbrennen zu lassen, wenn sie nicht nativ vom Client unterstützt werden.", "AllowOnTheFlySubtitleExtractionHelp": "Eingebettete Untertitel können aus Videos extrahiert und in Reintext an Clients gesendet werden, um eine Videotranskodierung zu vermeiden. Auf manchen Systemen kann dieser Vorgang eine lange Zeit in Anspruch nehmen und deswegen währenddessen die Videowiedergabe stoppen. Deaktiviere diese Option, um eingebettete Untertitel während des Videotranskodierens einbrennen zu lassen, wenn sie nicht nativ vom Client unterstützt werden.",
"AllowRemoteAccess": "Erlaube externe Verbindungen zu diesem Jellyfin Server.", "AllowRemoteAccess": "Erlaube externe Verbindungen zu diesem Jellyfin Server.",
"AllowRemoteAccessHelp": "Wenn deaktiviert werden alle externen Verbindungen blockiert.", "AllowRemoteAccessHelp": "Wenn deaktiviert werden alle externen Verbindungen blockiert.",
"AllowSeasonalThemes": "Erlaube automatische Jahreszeitenmotive", "AllowSeasonalThemes": "Erlaube automatische Jahreszeitenmotive",
"AllowSeasonalThemesHelp": "Wenn aktiviert, werden Jahreszeitenmotive von Zeit zu Zeit deine Motiveinstellungen überschreiben.", "AllowSeasonalThemesHelp": "Wenn aktiviert, werden Jahreszeitenmotive von Zeit zu Zeit deine Motiveinstellungen überschreiben.",
"AllowedRemoteAddressesHelp": "Kommagetrennte Liste von IP Adressen oder IP/Netzmasken für Netzwerke, für die externe Verbindungen erlaubt sind. Wenn leer, sind alle Adressen erlaubt.", "AllowedRemoteAddressesHelp": "Kommagetrennte Liste von IP Adressen oder IP/Netzmasken für Netzwerke, für die externe Verbindungen erlaubt sind. Wenn leer, sind alle Adressen erlaubt.",
"AlwaysPlaySubtitles": "Untertitel immer einblenden", "AlwaysPlaySubtitles": "Immer anzeigen",
"AlwaysPlaySubtitlesHelp": "Untertitel die den Spracheinstellungen entsprechen werden unabhängig von der Tonspursprache geladen.", "AlwaysPlaySubtitlesHelp": "Untertitel die den Spracheinstellungen entsprechen werden unabhängig von der Tonspursprache geladen.",
"AnyLanguage": "Jede Sprache", "AnyLanguage": "Jede Sprache",
"Anytime": "Jederzeit", "Anytime": "Jederzeit",
@ -60,7 +60,7 @@
"BoxRear": "Box (Rückseite)", "BoxRear": "Box (Rückseite)",
"Browse": "Blättern", "Browse": "Blättern",
"BrowsePluginCatalogMessage": "Durchsuche unsere Bibliothek, um alle verfügbaren Plugins anzuzeigen.", "BrowsePluginCatalogMessage": "Durchsuche unsere Bibliothek, um alle verfügbaren Plugins anzuzeigen.",
"BurnSubtitlesHelp": "Legt fest, ob der Server die Untertitel basierend auf deren Format während der Videokonvertierung einbrennen soll. Die Vermeidung des Einbrennen von Untertiteln verbessert die Serverperformance. Wähle Auto, um Bildfomate (z.B. VOBSUB, PGS, SUB/IDX, etc.) sowie bestimmte ASS/SSA-Untertitel einbrennen zu lassen.", "BurnSubtitlesHelp": "Legt fest, ob der Server die Untertitel während der Videotranskodierung einbrennen soll. Deaktivieren verbessert die Serverperformance immens. Wähle Auto, um bildbasierte Formate (z.B. VOBSUB, PGS, SUB, IDX) sowie bestimmte ASS- oder SSA-Untertitel einbrennen zu lassen.",
"ButtonAdd": "Hinzufügen", "ButtonAdd": "Hinzufügen",
"ButtonAddMediaLibrary": "Füge Medienbibliothek hinzu", "ButtonAddMediaLibrary": "Füge Medienbibliothek hinzu",
"ButtonAddScheduledTaskTrigger": "Auslöser hinzufügen", "ButtonAddScheduledTaskTrigger": "Auslöser hinzufügen",
@ -185,7 +185,7 @@
"DisplayInOtherHomeScreenSections": "Zeige auf dem Homescreen Bereiche wie 'Neueste Medien' oder 'Weiterschauen'", "DisplayInOtherHomeScreenSections": "Zeige auf dem Homescreen Bereiche wie 'Neueste Medien' oder 'Weiterschauen'",
"DisplayMissingEpisodesWithinSeasons": "Zeige fehlende Episoden innerhalb von Staffeln", "DisplayMissingEpisodesWithinSeasons": "Zeige fehlende Episoden innerhalb von Staffeln",
"DisplayMissingEpisodesWithinSeasonsHelp": "Dies muss auch für Serienbibliotheken in den Servereinstellungen aktiviert sein.", "DisplayMissingEpisodesWithinSeasonsHelp": "Dies muss auch für Serienbibliotheken in den Servereinstellungen aktiviert sein.",
"DisplayModeHelp": "Bitte wähle den Typ des Bildschirms auf dem Du Jellyfin verwendest.", "DisplayModeHelp": "Wähle das Layout welches du für die Oberfläche verwenden möchtest.",
"DoNotRecord": "Nicht aufnehmen", "DoNotRecord": "Nicht aufnehmen",
"Down": "Runter", "Down": "Runter",
"DownloadsValue": "{0} Downloads", "DownloadsValue": "{0} Downloads",
@ -469,7 +469,7 @@
"Images": "Bilder", "Images": "Bilder",
"ImportFavoriteChannelsHelp": "Wenn aktiviert, werden nur auf dem Tuner favorisierte Kanäle importiert.", "ImportFavoriteChannelsHelp": "Wenn aktiviert, werden nur auf dem Tuner favorisierte Kanäle importiert.",
"ImportMissingEpisodesHelp": "Wenn aktiviert, werden Informationen über fehlende Episoden in Deine Jellyfin Datenbank importiert und innerhalb von Staffeln angezeigt. Dies kann zu deutlich längeren Bibliothek Scans führen.", "ImportMissingEpisodesHelp": "Wenn aktiviert, werden Informationen über fehlende Episoden in Deine Jellyfin Datenbank importiert und innerhalb von Staffeln angezeigt. Dies kann zu deutlich längeren Bibliothek Scans führen.",
"InstallingPackage": "Installiere {0}", "InstallingPackage": "Installiere {0} (Version {1})",
"InstantMix": "Schnellmix", "InstantMix": "Schnellmix",
"ItemCount": "{0} Einträge", "ItemCount": "{0} Einträge",
"Items": "Einträge", "Items": "Einträge",
@ -908,15 +908,15 @@
"NoNextUpItemsMessage": "Es wurde nichts gefunden. Schau dir deine Shows an!", "NoNextUpItemsMessage": "Es wurde nichts gefunden. Schau dir deine Shows an!",
"NoPluginConfigurationMessage": "Dieses Plugin hat keine konfigurierbaren Einstellungen.", "NoPluginConfigurationMessage": "Dieses Plugin hat keine konfigurierbaren Einstellungen.",
"NoSubtitleSearchResultsFound": "Keine Ergebnisse gefunden.", "NoSubtitleSearchResultsFound": "Keine Ergebnisse gefunden.",
"NoSubtitles": "Keine Untertitel", "NoSubtitles": "Keine",
"NoSubtitlesHelp": "Untertitel werden standardmäßig nicht geladen. Sie können aber während der Wiedergabe manuell aktiviert werden.", "NoSubtitlesHelp": "Untertitel werden standardmäßig nicht geladen. Sie können aber während der Wiedergabe manuell aktiviert werden.",
"None": "Keines", "None": "Keines",
"NumLocationsValue": "{0} Verzeichnisse", "NumLocationsValue": "{0} Verzeichnisse",
"Off": "Aus", "Off": "Aus",
"OneChannel": "Ein Kanal", "OneChannel": "Ein Kanal",
"OnlyForcedSubtitles": "Nur erzwungene Untertitel", "OnlyForcedSubtitles": "Nur Erzwungene",
"OnlyForcedSubtitlesHelp": "Nur Untertitel, die als erzwungen markiert wurden, werden geladen.", "OnlyForcedSubtitlesHelp": "Nur Untertitel, die als erzwungen markiert wurden, werden geladen.",
"OnlyImageFormats": "Nur Bildformate (VOBSUB, PGS, SUB, etc.)", "OnlyImageFormats": "Nur Bildformate (VOBSUB, PGS, SUB)",
"OptionAdminUsers": "Administratoren", "OptionAdminUsers": "Administratoren",
"OptionAlbumArtist": "Album-Interpret", "OptionAlbumArtist": "Album-Interpret",
"OptionAllUsers": "Alle Benutzer", "OptionAllUsers": "Alle Benutzer",
@ -1036,9 +1036,9 @@
"OptionWeekly": "Wöchentlich", "OptionWeekly": "Wöchentlich",
"OriginalAirDateValue": "Erstausstrahlung: {0}", "OriginalAirDateValue": "Erstausstrahlung: {0}",
"Overview": "Übersicht", "Overview": "Übersicht",
"PackageInstallCancelled": "{0} Installation abgebrochen.", "PackageInstallCancelled": "{0} (Version {1}) Installation abgebrochen.",
"PackageInstallCompleted": "{0} Installation abgeschlossen.", "PackageInstallCompleted": "{0} (Version {1}) Installation abgeschlossen.",
"PackageInstallFailed": "{0} Installation fehlgeschlagen.", "PackageInstallFailed": "{0} (Version {1}) Installation fehlgeschlagen.",
"ParentalRating": "Altersfreigabe", "ParentalRating": "Altersfreigabe",
"PasswordMatchError": "Die Passwörter müssen übereinstimmen.", "PasswordMatchError": "Die Passwörter müssen übereinstimmen.",
"PasswordResetComplete": "Das Passwort wurde zurückgesetzt.", "PasswordResetComplete": "Das Passwort wurde zurückgesetzt.",
@ -1314,7 +1314,7 @@
"LabelProfileCodecs": "Codecs:", "LabelProfileCodecs": "Codecs:",
"LabelProfileContainer": "Container:", "LabelProfileContainer": "Container:",
"LabelSkin": "Textur:", "LabelSkin": "Textur:",
"Art": "Kunst", "Art": "Coverkunst",
"Name": "Name", "Name": "Name",
"Songs": "Songs", "Songs": "Songs",
"ValueSpecialEpisodeName": "Extra - {0}", "ValueSpecialEpisodeName": "Extra - {0}",
@ -1400,7 +1400,7 @@
"Thumb": "Miniaturansicht", "Thumb": "Miniaturansicht",
"TitleSupport": "Hilfe", "TitleSupport": "Hilfe",
"Whitelist": "Erlaubt", "Whitelist": "Erlaubt",
"AuthProviderHelp": "Auswählen eines Authentifizierungsanbieter, der zur Authentifizierung des Passworts dieses Benutzes verwendet werden soll.", "AuthProviderHelp": "Authentifizierungsanbieter auswählen, der zur Authentifizierung des Benutzerpassworts verwendet werden soll.",
"Features": "Funktionen", "Features": "Funktionen",
"HeaderFavoriteBooks": "Lieblingsbücher", "HeaderFavoriteBooks": "Lieblingsbücher",
"HeaderFavoriteMovies": "Lieblingsfilme", "HeaderFavoriteMovies": "Lieblingsfilme",
@ -1492,5 +1492,28 @@
"AllowFfmpegThrottling": "Transkodierung drosseln", "AllowFfmpegThrottling": "Transkodierung drosseln",
"PlaybackErrorNoCompatibleStream": "Es gab ein Problem bei der Erkennung des Wiedergabeprofils des Clients und der Server sendet kein kompatibles Format.", "PlaybackErrorNoCompatibleStream": "Es gab ein Problem bei der Erkennung des Wiedergabeprofils des Clients und der Server sendet kein kompatibles Format.",
"AllowFfmpegThrottlingHelp": "Wenn eine Transkodierung oder ein Remux weit genug über die aktuelle Abspielposition fortgeschritten ist, pausiere sie sodass weniger Ressourcen verbraucht werden. Dies ist am nützlichsten, wenn wenig geskippt wird. Bei Wiedergabeproblemen sollte diese Option deaktiviert werden.", "AllowFfmpegThrottlingHelp": "Wenn eine Transkodierung oder ein Remux weit genug über die aktuelle Abspielposition fortgeschritten ist, pausiere sie sodass weniger Ressourcen verbraucht werden. Dies ist am nützlichsten, wenn wenig geskippt wird. Bei Wiedergabeproblemen sollte diese Option deaktiviert werden.",
"ClientSettings": "Client Einstellungen" "ClientSettings": "Client Einstellungen",
"OnApplicationStartup": "Beim Starten der Applikation",
"EveryXHours": "Alle {0} Stunden",
"EveryHour": "Jede Stunde",
"EveryXMinutes": "Alle {0} Minuten",
"OnWakeFromSleep": "Beim Aufwachen aus \"Energie sparen\"",
"WeeklyAt": "{0} um {1}",
"DailyAt": "Täglich um {0}",
"LastSeen": "Zuletzt gesehen {0}",
"PersonRole": "als {0}",
"ListPaging": "{0}-{1} von {2}",
"WriteAccessRequired": "Jellyfin Server benötigt Schreibrechte auf diesem Ordner. Bitte prüfe die Schreibrechte und versuche es erneut.",
"PathNotFound": "Der Pfad konnte nicht gefunden werden. Bitte versichere dich dass der Pfad korrekt ist und versuche es erneut.",
"Track": "Track",
"Season": "Staffel",
"ReleaseGroup": "Veröffentlichungs-Gruppe",
"Person": "Person",
"OtherArtist": "Andere Künstler",
"Movie": "Film",
"Episode": "Episode",
"Artist": "Künstler",
"AlbumArtist": "Album Künstler",
"Album": "Album",
"BoxSet": "Box Set"
} }

View file

@ -179,6 +179,7 @@
"DefaultErrorMessage": "There was an error processing the request. Please try again later.", "DefaultErrorMessage": "There was an error processing the request. Please try again later.",
"DefaultMetadataLangaugeDescription": "These are your defaults and can be customized on a per-library basis.", "DefaultMetadataLangaugeDescription": "These are your defaults and can be customized on a per-library basis.",
"DefaultSubtitlesHelp": "Subtitles are loaded based on the default and forced flags in the embedded metadata. Language preferences are considered when multiple options are available.", "DefaultSubtitlesHelp": "Subtitles are loaded based on the default and forced flags in the embedded metadata. Language preferences are considered when multiple options are available.",
"DeinterlaceMethodHelp": "Select the deinterlacing method to use when transcoding interlaced content.",
"Delete": "Delete", "Delete": "Delete",
"DeleteDeviceConfirmation": "Are you sure you wish to delete this device? It will reappear the next time a user signs in with it.", "DeleteDeviceConfirmation": "Are you sure you wish to delete this device? It will reappear the next time a user signs in with it.",
"DeleteImage": "Delete Image", "DeleteImage": "Delete Image",
@ -603,6 +604,7 @@
"LabelDefaultScreen": "Default screen:", "LabelDefaultScreen": "Default screen:",
"LabelDefaultUser": "Default user:", "LabelDefaultUser": "Default user:",
"LabelDefaultUserHelp": "Determines which user library should be displayed on connected devices. This can be overridden for each device using profiles.", "LabelDefaultUserHelp": "Determines which user library should be displayed on connected devices. This can be overridden for each device using profiles.",
"LabelDeinterlaceMethod": "Deinterlacing method:",
"LabelDeviceDescription": "Device description", "LabelDeviceDescription": "Device description",
"LabelDidlMode": "DIDL mode:", "LabelDidlMode": "DIDL mode:",
"LabelDiscNumber": "Disc number:", "LabelDiscNumber": "Disc number:",
@ -692,6 +694,8 @@
"LabelKodiMetadataUserHelp": "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:",
"LabelLibraryPageSize": "Library page size:",
"LabelLibraryPageSizeHelp": "Sets the amount of items to show on a library page. Set to 0 in order to disable paging.",
"LabelLineup": "Lineup:", "LabelLineup": "Lineup:",
"LabelLocalHttpServerPortNumber": "Local HTTP port number:", "LabelLocalHttpServerPortNumber": "Local HTTP port number:",
"LabelLocalHttpServerPortNumberHelp": "The TCP port number that Jellyfin's HTTP server should bind to.", "LabelLocalHttpServerPortNumberHelp": "The TCP port number that Jellyfin's HTTP server should bind to.",
@ -1235,7 +1239,7 @@
"PlayFromBeginning": "Play from beginning", "PlayFromBeginning": "Play from beginning",
"PlayNext": "Play next", "PlayNext": "Play next",
"PlayNextEpisodeAutomatically": "Play next episode automatically", "PlayNextEpisodeAutomatically": "Play next episode automatically",
"PlaybackErrorNoCompatibleStream": "There was an issue with the client profiling and the server isn't sending a compatible media format.", "PlaybackErrorNoCompatibleStream": "This client isn't compatible with the media and the server isn't sending a compatible media format.",
"Played": "Played", "Played": "Played",
"Playlists": "Playlists", "Playlists": "Playlists",
"PleaseAddAtLeastOneFolder": "Please add at least one folder to this library by clicking the Add button.", "PleaseAddAtLeastOneFolder": "Please add at least one folder to this library by clicking the Add button.",
@ -1479,6 +1483,8 @@
"XmlTvNewsCategoriesHelp": "Programs with these categories will be displayed as news programs. Separate multiple with '|'.", "XmlTvNewsCategoriesHelp": "Programs with these categories will be displayed as news programs. Separate multiple with '|'.",
"XmlTvPathHelp": "A path to a XMLTV file. Jellyfin will read this file and periodically check it for updates. You are responsible for creating and updating the file.", "XmlTvPathHelp": "A path to a XMLTV file. Jellyfin will read this file and periodically check it for updates. You are responsible for creating and updating the file.",
"XmlTvSportsCategoriesHelp": "Programs with these categories will be displayed as sports programs. Separate multiple with '|'.", "XmlTvSportsCategoriesHelp": "Programs with these categories will be displayed as sports programs. Separate multiple with '|'.",
"Yadif": "Yadif",
"YadifBob": "Yadif Bob",
"Yes": "Yes", "Yes": "Yes",
"Yesterday": "Yesterday", "Yesterday": "Yesterday",
"PathNotFound": "The path could not be found. Please ensure the path is valid and try again.", "PathNotFound": "The path could not be found. Please ensure the path is valid and try again.",

View file

@ -37,9 +37,9 @@
"Favorites": "Favoritos", "Favorites": "Favoritos",
"Folders": "Carpetas", "Folders": "Carpetas",
"Genres": "Géneros", "Genres": "Géneros",
"HeaderAlbumArtists": "Artistas de álbumes", "HeaderAlbumArtists": "Artistas de álbum",
"HeaderContinueWatching": "Continuar viendo", "HeaderContinueWatching": "Continuar viendo",
"HeaderNextUp": "Continuar Viendo", "HeaderNextUp": "A Continuación",
"Movies": "Películas", "Movies": "Películas",
"Photos": "Fotos", "Photos": "Fotos",
"Playlists": "Listas de reproducción", "Playlists": "Listas de reproducción",
@ -61,7 +61,7 @@
"Alerts": "Alertas", "Alerts": "Alertas",
"All": "Todo", "All": "Todo",
"AllChannels": "Todos los canales", "AllChannels": "Todos los canales",
"AllComplexFormats": "Todos los formatos complejos (ASS, SSA, VOBSUB, PGS, SUB/IDX, etc.)", "AllComplexFormats": "Todos los formatos complejos (ASS, SSA, VOBSUB, PGS, SUB, IDX)",
"AllEpisodes": "Todos los capítulos", "AllEpisodes": "Todos los capítulos",
"AllLanguages": "Todos los idiomas", "AllLanguages": "Todos los idiomas",
"AllLibraries": "Todas las bibliotecas", "AllLibraries": "Todas las bibliotecas",
@ -71,7 +71,7 @@
"AllowOnTheFlySubtitleExtractionHelp": "Los subtítulos incrustados pueden extraerse de los videos y entregarse a los reproductores en texto plano para ayudar a evitar la transcodificación de video. En algunos sistemas, esto puede tardar mucho tiempo y provocar que la reproducción de video se detenga durante el proceso de extracción. Deshabilite esta opción para que los subtítulos incrustados se graben con transcodificación de video cuando no estén soportados de forma nativa por el dispositivo cliente.", "AllowOnTheFlySubtitleExtractionHelp": "Los subtítulos incrustados pueden extraerse de los videos y entregarse a los reproductores en texto plano para ayudar a evitar la transcodificación de video. En algunos sistemas, esto puede tardar mucho tiempo y provocar que la reproducción de video se detenga durante el proceso de extracción. Deshabilite esta opción para que los subtítulos incrustados se graben con transcodificación de video cuando no estén soportados de forma nativa por el dispositivo cliente.",
"AllowRemoteAccess": "Permitir conexiones remotas a este Servidor Jellyfin.", "AllowRemoteAccess": "Permitir conexiones remotas a este Servidor Jellyfin.",
"AllowRemoteAccessHelp": "Si no está tildado, todas las conexiones remotas serán bloqueadas.", "AllowRemoteAccessHelp": "Si no está tildado, todas las conexiones remotas serán bloqueadas.",
"AlwaysPlaySubtitles": "Siempre reproducir subtítulos", "AlwaysPlaySubtitles": "Siempre mostrar subtítulos",
"AnyLanguage": "Cualquier idioma", "AnyLanguage": "Cualquier idioma",
"Anytime": "Cualquier fecha", "Anytime": "Cualquier fecha",
"Ascending": "Ascendente", "Ascending": "Ascendente",
@ -107,7 +107,7 @@
"BoxRear": "Caja (lado opuesto)", "BoxRear": "Caja (lado opuesto)",
"Browse": "Explorar", "Browse": "Explorar",
"BrowsePluginCatalogMessage": "Explore nuestro catálogo de complementos para ver los complementos disponibles.", "BrowsePluginCatalogMessage": "Explore nuestro catálogo de complementos para ver los complementos disponibles.",
"BurnSubtitlesHelp": "Determina si el servidor debe grabar subtítulos al convertir videos dependiendo del formato de los subtítulos. Evitar la grabación de subtítulos mejorará el rendimiento del servidor. Seleccione Auto para grabar formatos basados en imágenes (VOBSUB, PGS, SUB/IDX, etc.) y ciertos subtítulos ASS/SSA.", "BurnSubtitlesHelp": "Determina si el servidor debe grabar subtítulos al transcodificar videos. Evitar esto mejorará altamente el rendimiento del servidor. Seleccione Auto para grabar formatos basados en imágenes (VOBSUB, PGS, SUB/IDX) y ciertos subtítulos ASS o SSA.",
"ButtonAccept": "Aceptar", "ButtonAccept": "Aceptar",
"ButtonAdd": "Agregar", "ButtonAdd": "Agregar",
"ButtonAddMediaLibrary": "Agregar biblioteca de medios", "ButtonAddMediaLibrary": "Agregar biblioteca de medios",
@ -321,7 +321,7 @@
"DisplayInOtherHomeScreenSections": "Mostrar en las secciones de la pantalla principal, como últimos medios y continuar viendo", "DisplayInOtherHomeScreenSections": "Mostrar en las secciones de la pantalla principal, como últimos medios y continuar viendo",
"DisplayMissingEpisodesWithinSeasons": "Mostrar episodios faltantes entre temporadas", "DisplayMissingEpisodesWithinSeasons": "Mostrar episodios faltantes entre temporadas",
"DisplayMissingEpisodesWithinSeasonsHelp": "Esto también debe estar habilitado para las bibliotecas de TV en la configuración del servidor.", "DisplayMissingEpisodesWithinSeasonsHelp": "Esto también debe estar habilitado para las bibliotecas de TV en la configuración del servidor.",
"DisplayModeHelp": "Selecciona el tipo de pantalla en el cual estas usando Jellyfin.", "DisplayModeHelp": "Seleccione el estilo de diseño que desea en la Interfaz.",
"DoNotRecord": "No grabar", "DoNotRecord": "No grabar",
"Down": "Abajo", "Down": "Abajo",
"Download": "Descargar", "Download": "Descargar",
@ -335,14 +335,14 @@
"DropShadow": "Sombra paralela", "DropShadow": "Sombra paralela",
"DvrFeatureDescription": "Agendar grabaciones individuales de TV en vivo, grabaciones de series y mucho mas con Jellyfin DVR.", "DvrFeatureDescription": "Agendar grabaciones individuales de TV en vivo, grabaciones de series y mucho mas con Jellyfin DVR.",
"DvrSubscriptionRequired": "Jellyfin DVR requiere una suscripción a Jellyfin Premiere.", "DvrSubscriptionRequired": "Jellyfin DVR requiere una suscripción a Jellyfin Premiere.",
"EasyPasswordHelp": "Tu numero de PIN fácil puede ser usado por las aplicaciones de Jellyfin soportadas, también pueden ser utilizadas para acceder fácilmente al ingresar dentro de tu red.", "EasyPasswordHelp": "Su código PIN fácil se utiliza para el acceso sin conexión en los clientes compatibles y también puede utilizarse para acceder fácilmente cuando se está en la misma red.",
"Edit": "Editar", "Edit": "Editar",
"EditImages": "Editar imagenes", "EditImages": "Editar imagenes",
"EditMetadata": "Editar metadata", "EditMetadata": "Editar metadata",
"EditSubtitles": "Editar subtitulos", "EditSubtitles": "Editar subtitulos",
"EnableBackdrops": "Habilitar fondo", "EnableBackdrops": "Imágenes de fondo",
"EnableBackdropsHelp": "Si esta habilitado, los fondos van a ser mostrados en segundo plano de algunas paginas mientras estas en la biblioteca.", "EnableBackdropsHelp": "Muestra imágenes de fondo en el fondo de algunas páginas mientras se navega por la biblioteca.",
"EnableCinemaMode": "Habilitar modo Cine", "EnableCinemaMode": "Modo cine",
"EnableColorCodedBackgrounds": "Habilitar colores en el fondo del código", "EnableColorCodedBackgrounds": "Habilitar colores en el fondo del código",
"AuthProviderHelp": "Seleccione un proveedor de autenticación que se utilizará para autenticar la contraseña de este usuario.", "AuthProviderHelp": "Seleccione un proveedor de autenticación que se utilizará para autenticar la contraseña de este usuario.",
"CriticRating": "Calificación de la crítica", "CriticRating": "Calificación de la crítica",
@ -352,15 +352,15 @@
"EnableDisplayMirroring": "Habilitar duplicación de la pantalla", "EnableDisplayMirroring": "Habilitar duplicación de la pantalla",
"EnableExternalVideoPlayers": "Habilitar reproductores de video externos", "EnableExternalVideoPlayers": "Habilitar reproductores de video externos",
"EnableExternalVideoPlayersHelp": "Se mostrará un menú de reproductor externo al iniciar la reproducción de video", "EnableExternalVideoPlayersHelp": "Se mostrará un menú de reproductor externo al iniciar la reproducción de video",
"EnableNextVideoInfoOverlay": "Habilitar vista de información del siguiente vídeo durante la reproducción", "EnableNextVideoInfoOverlay": "Mostrar la información del siguiente video durante la reproducción",
"EnableNextVideoInfoOverlayHelp": "Al finalizar un video, mostrar información sobre el siguiente vídeo en la lista de reproducción", "EnableNextVideoInfoOverlayHelp": "Al finalizar un video, mostrar información sobre el siguiente vídeo en la lista de reproducción",
"EnablePhotos": "Mostrar fotos", "EnablePhotos": "Mostrar fotografías",
"EnablePhotosHelp": "Las fotos serán detectadas y se mostrarán junto a otros archivos de medios", "EnablePhotosHelp": "Las imágenes serán detectadas y mostradas junto con otros archivos multimedia.",
"EnableStreamLooping": "Repetir automáticamente transmisiones en vivo", "EnableStreamLooping": "Repetir automáticamente transmisiones en vivo",
"EnableStreamLoopingHelp": "Habilita esto sí las transmisiones en vivo sólo contienen unos cuantos segundos y es necesario solicitarlos continuamente. Habilitar esto cuando no es necesario puede causar problemas.", "EnableStreamLoopingHelp": "Habilita esto sí las transmisiones en vivo sólo contienen unos cuantos segundos y es necesario solicitarlos continuamente. Habilitar esto cuando no es necesario puede causar problemas.",
"EnableThemeSongs": "Habilitar canciones tema", "EnableThemeSongs": "Canciones temáticas",
"EnableThemeSongsHelp": "Al habilitarse, las canciones tema se reproducirán de fondo cuando navegas por la biblioteca.", "EnableThemeSongsHelp": "Reproducir canciones temáticas en el fondo mientras se navega por la biblioteca.",
"EnableThemeVideos": "Habilitar videos de tema", "EnableThemeVideos": "Videos temáticos",
"EnableThemeVideosHelp": "Al habilitarse, los videos de tema se reproducirán de fondo mientras navegues por la biblioteca.", "EnableThemeVideosHelp": "Al habilitarse, los videos de tema se reproducirán de fondo mientras navegues por la biblioteca.",
"Ended": "Finalizado", "Ended": "Finalizado",
"EndsAtValue": "Termina en {0}", "EndsAtValue": "Termina en {0}",
@ -415,7 +415,7 @@
"CopyStreamURL": "Copiar la URL de la transmisión", "CopyStreamURL": "Copiar la URL de la transmisión",
"ButtonSplit": "Dividir", "ButtonSplit": "Dividir",
"ButtonAddImage": "Agregar imagen", "ButtonAddImage": "Agregar imagen",
"AskAdminToCreateLibrary": "Pregunte al administrador para crear una biblioteca.", "AskAdminToCreateLibrary": "Preguntar al administrador para crear una biblioteca.",
"AllowFfmpegThrottlingHelp": "Cuando una transcodificación o conversión avanza demasiado con respecto a la posición actual de la reproducción, se pausara el proceso para consumir menos recursos. esto es mas útil cuando no se hacen búsquedas de tiempo a menudo. Desactive esta opción si experimenta problemas en la reproducción.", "AllowFfmpegThrottlingHelp": "Cuando una transcodificación o conversión avanza demasiado con respecto a la posición actual de la reproducción, se pausara el proceso para consumir menos recursos. esto es mas útil cuando no se hacen búsquedas de tiempo a menudo. Desactive esta opción si experimenta problemas en la reproducción.",
"AllowFfmpegThrottling": "Transcodificación Throttle", "AllowFfmpegThrottling": "Transcodificación Throttle",
"HeaderCancelRecording": "Cancelar Grabación", "HeaderCancelRecording": "Cancelar Grabación",
@ -451,7 +451,7 @@
"FetchingData": "Obteniendo información adicional", "FetchingData": "Obteniendo información adicional",
"Episode": "Episodio", "Episode": "Episodio",
"Yesterday": "Ayer", "Yesterday": "Ayer",
"ClientSettings": "Configuración del cliente", "ClientSettings": "Configuración de cliente",
"BoxSet": "Colección", "BoxSet": "Colección",
"Artist": "Artista", "Artist": "Artista",
"AlbumArtist": "Artista del Album", "AlbumArtist": "Artista del Album",

View file

@ -15,7 +15,7 @@
"Alerts": "Alertas", "Alerts": "Alertas",
"All": "Todo", "All": "Todo",
"AllChannels": "Todos los canales", "AllChannels": "Todos los canales",
"AllComplexFormats": "Todos los formatos complejos (ASS, SSA, VOBSUB, PGS, SUB/IDX, etc.)", "AllComplexFormats": "Todos los formatos complejos (ASS, SSA, VOBSUB, PGS, SUB, IDX)",
"AllEpisodes": "Todos los episodios", "AllEpisodes": "Todos los episodios",
"AllLanguages": "Todos los idiomas", "AllLanguages": "Todos los idiomas",
"AllLibraries": "Todas las bibliotecas", "AllLibraries": "Todas las bibliotecas",
@ -55,7 +55,7 @@
"BoxRear": "Reverso de caja", "BoxRear": "Reverso de caja",
"Browse": "Navegar", "Browse": "Navegar",
"BrowsePluginCatalogMessage": "Explorar el catalogo de complementos para ver los complementos disponibles.", "BrowsePluginCatalogMessage": "Explorar el catalogo de complementos para ver los complementos disponibles.",
"BurnSubtitlesHelp": "Determina si el servidor debe grabar subtítulos al convertir videos dependiendo del formato de los subtítulos. Evitar la grabación de subtítulos mejorará el rendimiento del servidor. Seleccione Auto para grabar formatos basados en imágenes (VOBSUB, PGS, SUB/IDX, etc.) y ciertos subtítulos ASS/SSA.", "BurnSubtitlesHelp": "Determina si el servidor debe grabar subtítulos al transcodificar videos. Evitar esto mejorará altamente el rendimiento del servidor. Seleccione Auto para grabar formatos basados en imágenes (VOBSUB, PGS, SUB/IDX) y ciertos subtítulos ASS o SSA.",
"ButtonAdd": "Agregar", "ButtonAdd": "Agregar",
"ButtonAddMediaLibrary": "Agregar Biblioteca de Medios", "ButtonAddMediaLibrary": "Agregar Biblioteca de Medios",
"ButtonAddScheduledTaskTrigger": "Agregar Disparador", "ButtonAddScheduledTaskTrigger": "Agregar Disparador",
@ -158,7 +158,7 @@
"CustomDlnaProfilesHelp": "Crear un perfil personalizado para un nuevo dispositivo o reemplazar un perfil del sistema.", "CustomDlnaProfilesHelp": "Crear un perfil personalizado para un nuevo dispositivo o reemplazar un perfil del sistema.",
"DateAdded": "Fecha de adición", "DateAdded": "Fecha de adición",
"DatePlayed": "Fecha de reproducción", "DatePlayed": "Fecha de reproducción",
"DeathDateValue": "Fallcimiento: {0}", "DeathDateValue": "Terminación: {0}",
"Default": "Por defecto", "Default": "Por defecto",
"DefaultErrorMessage": "Ha ocurrido un error al procesar la solicitud. Por favor inténtelo de nuevo mas tarde.", "DefaultErrorMessage": "Ha ocurrido un error al procesar la solicitud. Por favor inténtelo de nuevo mas tarde.",
"DefaultMetadataLangaugeDescription": "Estas son sus configuraciones por defecto y puedes ser personalizadas independientemente en cada biblioteca.", "DefaultMetadataLangaugeDescription": "Estas son sus configuraciones por defecto y puedes ser personalizadas independientemente en cada biblioteca.",
@ -189,14 +189,14 @@
"DisplayInOtherHomeScreenSections": "Mostrar en las secciones de la pantalla de inicio como Recientes o Continua Viendo", "DisplayInOtherHomeScreenSections": "Mostrar en las secciones de la pantalla de inicio como Recientes o Continua Viendo",
"DisplayMissingEpisodesWithinSeasons": "Mostrar episodios faltantes en las temporadas", "DisplayMissingEpisodesWithinSeasons": "Mostrar episodios faltantes en las temporadas",
"DisplayMissingEpisodesWithinSeasonsHelp": "Esto también debe estar habilitado para las bibliotecas de TV en la configuración del servidor.", "DisplayMissingEpisodesWithinSeasonsHelp": "Esto también debe estar habilitado para las bibliotecas de TV en la configuración del servidor.",
"DisplayModeHelp": "Seleccione el tipo de pantalla en la que se encuentra ejecutando Jellyfin.", "DisplayModeHelp": "Seleccione el estilo de diseño que desea en la Interfaz.",
"DoNotRecord": "No grabar", "DoNotRecord": "No grabar",
"Down": "Abajo", "Down": "Abajo",
"Download": "Descargar", "Download": "Descargar",
"DownloadsValue": "{0} descargas", "DownloadsValue": "{0} descargas",
"DrmChannelsNotImported": "Los canales con DRM no serán importados.", "DrmChannelsNotImported": "Los canales con DRM no serán importados.",
"DropShadow": "Sombra Paralela", "DropShadow": "Sombra Paralela",
"EasyPasswordHelp": "Su código PIN fácil se utiliza para el acceso sin conexión en los clientes compatibles y también puede utilizarse para acceder fácilmente cuando se está en la misma red.", "EasyPasswordHelp": "El código PIN fácil se utiliza para el acceso sin conexión en los clientes soportados y también puede utilizarse para acceder fácilmente cuando se está en la misma red.",
"Edit": "Editar", "Edit": "Editar",
"EditImages": "Editar imágenes", "EditImages": "Editar imágenes",
"EditMetadata": "Editar metadatos", "EditMetadata": "Editar metadatos",
@ -225,7 +225,7 @@
"ErrorAddingListingsToSchedulesDirect": "Hubo un error agregando la programación de su cuenta de Schedules Direct. Schedules Direct solo permite un numero limitado de programaciones por cuenta. Tal vez necesite acceder al sitio web de Schedules Direct y eliminar otras programaciones de su cuenta antes de continuar.", "ErrorAddingListingsToSchedulesDirect": "Hubo un error agregando la programación de su cuenta de Schedules Direct. Schedules Direct solo permite un numero limitado de programaciones por cuenta. Tal vez necesite acceder al sitio web de Schedules Direct y eliminar otras programaciones de su cuenta antes de continuar.",
"ErrorAddingMediaPathToVirtualFolder": "Hubo un error agregando la ruta de medios. Por favor asegúrese de que la ruta es valida y que el proceso del Servidor Jellyfin tenga acceso a ese destino.", "ErrorAddingMediaPathToVirtualFolder": "Hubo un error agregando la ruta de medios. Por favor asegúrese de que la ruta es valida y que el proceso del Servidor Jellyfin tenga acceso a ese destino.",
"ErrorAddingTunerDevice": "Hubo un error al agregar el dispositivo sintonizador. Por favor asegúrese de que este disponible e intente de nuevo.", "ErrorAddingTunerDevice": "Hubo un error al agregar el dispositivo sintonizador. Por favor asegúrese de que este disponible e intente de nuevo.",
"ErrorAddingXmlTvFile": "Hubo un error accediendo al archivo XmlTV. Por favor asegúrese de que el archivo existe e intente de nuevo.", "ErrorAddingXmlTvFile": "Hubo un error accediendo al archivo XMLTV. Por favor asegúrese de que el archivo existe e intente de nuevo.",
"ErrorDeletingItem": "Hubo un error eliminando el ítem del Servidor Jellyfin. Por favor verifique tenga permisos de escritura en la carpeta de medios e intente de nuevo.", "ErrorDeletingItem": "Hubo un error eliminando el ítem del Servidor Jellyfin. Por favor verifique tenga permisos de escritura en la carpeta de medios e intente de nuevo.",
"ErrorGettingTvLineups": "Hubo un error al descargar la programación de TV. Por favor, asegúrese de que su información este correcta e inténtelo de nuevo.", "ErrorGettingTvLineups": "Hubo un error al descargar la programación de TV. Por favor, asegúrese de que su información este correcta e inténtelo de nuevo.",
"ErrorMessageStartHourGreaterThanEnd": "El horario de fin debe ser mayor al de comienzo.", "ErrorMessageStartHourGreaterThanEnd": "El horario de fin debe ser mayor al de comienzo.",
@ -267,7 +267,7 @@
"EncoderPresetHelp": "Elija un valor mas rápido para mejorar el rendimiento, o uno mas lento para mejorar la calidad.", "EncoderPresetHelp": "Elija un valor mas rápido para mejorar el rendimiento, o uno mas lento para mejorar la calidad.",
"HDPrograms": "Programas en HD", "HDPrograms": "Programas en HD",
"HandledByProxy": "Manejado por un proxy inverso", "HandledByProxy": "Manejado por un proxy inverso",
"HardwareAccelerationWarning": "Habilitar la aceleración por hardware podría causar inestabilidad en algunos entornos, Asegúrese de que su sistema operativo y controladores de video están actualizados. Si tiene dificultades reproduciendo vides después de habilitar esto, necesita cambiar las configuraciones de nuevo a Auto.", "HardwareAccelerationWarning": "Habilitar la aceleración por hardware podría causar inestabilidad en algunos entornos. Asegúrese de que su sistema operativo y controladores de video están actualizados. Si tiene dificultades reproduciendo vides después de habilitar esto, necesita volver a cambiar la configuración a NO.",
"HeaderAccessSchedule": "Acceder Programación", "HeaderAccessSchedule": "Acceder Programación",
"HeaderAccessScheduleHelp": "Crear programación de acceso para limitar el acceso a ciertos horarios.", "HeaderAccessScheduleHelp": "Crear programación de acceso para limitar el acceso a ciertos horarios.",
"HeaderActiveDevices": "Dispositivos Activos", "HeaderActiveDevices": "Dispositivos Activos",
@ -478,12 +478,12 @@
"Hide": "Ocultar", "Hide": "Ocultar",
"HideWatchedContentFromLatestMedia": "Ocultar contenido ya visto de Agregadas Recientemente", "HideWatchedContentFromLatestMedia": "Ocultar contenido ya visto de Agregadas Recientemente",
"Home": "Inicio", "Home": "Inicio",
"HttpsRequiresCert": "Para habilitar las conexiones seguras, es necesario proporcionar un certificado SSL de confianza, como el de \"Lets Encrypt\". Por favor proporcione un certificado, o desactive las conexiones seguras.", "HttpsRequiresCert": "Para habilitar las conexiones seguras, es necesario proporcionar un certificado SSL de confianza, como el de \"Let's Encrypt\". Por favor proporcione un certificado, o desactive las conexiones seguras.",
"Identify": "Identificar", "Identify": "Identificar",
"Images": "Imágenes", "Images": "Imágenes",
"ImportFavoriteChannelsHelp": "Si se habilita, solo los canales marcados como favoritos en el dispositivo sintonizador serán importados.", "ImportFavoriteChannelsHelp": "Si se habilita, solo los canales marcados como favoritos en el dispositivo sintonizador serán importados.",
"ImportMissingEpisodesHelp": "Si se habilita, se importara a su base de datos de Jellyfin información sobre episodios faltantes y se mostrara dentro de las temporadas y series. Esto podría ocasionar escaneos de biblioteca significativamente mas largos.", "ImportMissingEpisodesHelp": "Si se habilita, se importara a su base de datos de Jellyfin información sobre episodios faltantes y se mostrara dentro de las temporadas y series. Esto podría ocasionar escaneos de biblioteca significativamente mas largos.",
"InstallingPackage": "Instalando {0}", "InstallingPackage": "Instalando {0} (versión {1})",
"InstantMix": "Mix instantáneo", "InstantMix": "Mix instantáneo",
"ItemCount": "{0} ítems", "ItemCount": "{0} ítems",
"Items": "Ítems", "Items": "Ítems",
@ -513,7 +513,7 @@
"LabelAllowedRemoteAddresses": "Filtrar IP remota:", "LabelAllowedRemoteAddresses": "Filtrar IP remota:",
"LabelAllowedRemoteAddressesMode": "Modo de filtrado de IP remota:", "LabelAllowedRemoteAddressesMode": "Modo de filtrado de IP remota:",
"LabelAppName": "Nombre del App", "LabelAppName": "Nombre del App",
"LabelAppNameExample": "Ejemplo: Sickbeard, NzbDrone", "LabelAppNameExample": "Ejemplo: Sickbeard, Sonarr",
"LabelArtists": "Artistas:", "LabelArtists": "Artistas:",
"LabelArtistsHelp": "Separar múltiples empleando ;", "LabelArtistsHelp": "Separar múltiples empleando ;",
"LabelAudioLanguagePreference": "Idioma preferido de audio:", "LabelAudioLanguagePreference": "Idioma preferido de audio:",
@ -539,7 +539,7 @@
"LabelCountry": "País:", "LabelCountry": "País:",
"LabelCriticRating": "Calificación de la crítica:", "LabelCriticRating": "Calificación de la crítica:",
"LabelCurrentPassword": "Contraseña actual:", "LabelCurrentPassword": "Contraseña actual:",
"LabelCustomCertificatePath": "Ruta personalizada del certificado ssl:", "LabelCustomCertificatePath": "Ruta personalizada del certificado SSL:",
"LabelCustomCertificatePathHelp": "Trayectoria a un archivo PKCS #12 que contiene el certificado y la llave privada para habilitar soporte a TLS en un dominio personalizado.", "LabelCustomCertificatePathHelp": "Trayectoria a un archivo PKCS #12 que contiene el certificado y la llave privada para habilitar soporte a TLS en un dominio personalizado.",
"LabelCustomCss": "CSS personalizado:", "LabelCustomCss": "CSS personalizado:",
"LabelCustomCssHelp": "Aplicar tu propio estilo personalizado a la interfaz web.", "LabelCustomCssHelp": "Aplicar tu propio estilo personalizado a la interfaz web.",
@ -575,7 +575,7 @@
"LabelEmbedAlbumArtDidl": "Incrustar arte del álbum en DIDL", "LabelEmbedAlbumArtDidl": "Incrustar arte del álbum en DIDL",
"LabelEmbedAlbumArtDidlHelp": "Algunos dispositivos prefieren este método para obtener arte del álbum. Otros podrían fallar al reproducir con esta opción habilitada.", "LabelEmbedAlbumArtDidlHelp": "Algunos dispositivos prefieren este método para obtener arte del álbum. Otros podrían fallar al reproducir con esta opción habilitada.",
"LabelEnableAutomaticPortMap": "Habilitar mapeo automático de puertos", "LabelEnableAutomaticPortMap": "Habilitar mapeo automático de puertos",
"LabelEnableAutomaticPortMapHelp": "Intentar mapear automáticamente el puerto público con el puerto local via UPnP. Esto podría no funcionar con algunos modelos de ruteadores.", "LabelEnableAutomaticPortMapHelp": "Intentar mapear automáticamente el puerto público con el puerto local vía UPnP. Esto podría no funcionar con algunos modelos de ruteadores.",
"LabelEnableBlastAliveMessages": "Bombardeo de mensajes de vida", "LabelEnableBlastAliveMessages": "Bombardeo de mensajes de vida",
"LabelEnableBlastAliveMessagesHelp": "Habilite esto si el servidor no es detectado de manera confiable por otros dispositivos UPnP en su red.", "LabelEnableBlastAliveMessagesHelp": "Habilite esto si el servidor no es detectado de manera confiable por otros dispositivos UPnP en su red.",
"LabelEnableDlnaClientDiscoveryInterval": "Intervalo de Detección de Clientes (segundos)", "LabelEnableDlnaClientDiscoveryInterval": "Intervalo de Detección de Clientes (segundos)",
@ -610,7 +610,7 @@
"LabelH264Crf": "CRF de codificación H264:", "LabelH264Crf": "CRF de codificación H264:",
"LabelEncoderPreset": "Codificación H264 predefinido:", "LabelEncoderPreset": "Codificación H264 predefinido:",
"LabelHardwareAccelerationType": "Aceleración por Hardware:", "LabelHardwareAccelerationType": "Aceleración por Hardware:",
"LabelHardwareAccelerationTypeHelp": "Esta es una característica experimental que solo está disponible en los sistemas soportados.", "LabelHardwareAccelerationTypeHelp": "Aceleración por Hardware requiere configuración adicional.",
"LabelHomeNetworkQuality": "Calidad en Red Local:", "LabelHomeNetworkQuality": "Calidad en Red Local:",
"LabelHomeScreenSectionValue": "Pagina de inicio sección {0}:", "LabelHomeScreenSectionValue": "Pagina de inicio sección {0}:",
"LabelHttpsPort": "Número de puerto local HTTPS:", "LabelHttpsPort": "Número de puerto local HTTPS:",
@ -647,13 +647,13 @@
"LabelLoginDisclaimer": "Aviso legal:", "LabelLoginDisclaimer": "Aviso legal:",
"LabelLoginDisclaimerHelp": "Un mensaje que se mostrará en la parte inferior de la página de inicio de sesión.", "LabelLoginDisclaimerHelp": "Un mensaje que se mostrará en la parte inferior de la página de inicio de sesión.",
"LabelLogs": "Bitácoras:", "LabelLogs": "Bitácoras:",
"LabelManufacturer": "Fabricante", "LabelManufacturer": "Fabricante:",
"LabelManufacturerUrl": "URL del fabricante", "LabelManufacturerUrl": "URL del fabricante",
"LabelMatchType": "Tipo de Coincidencia:", "LabelMatchType": "Tipo de Coincidencia:",
"LabelMaxBackdropsPerItem": "Número máximo de imágenes de fondo por ítem:", "LabelMaxBackdropsPerItem": "Número máximo de imágenes de fondo por ítem:",
"LabelMaxChromecastBitrate": "Tasa maxima de bits para El Chromecast:", "LabelMaxChromecastBitrate": "Tasa maxima de bits para El Chromecast:",
"LabelMaxParentalRating": "Máxima clasificación parental permitida:", "LabelMaxParentalRating": "Máxima clasificación parental permitida:",
"LabelMaxResumePercentage": "Porcentaje máximo de reanudación:", "LabelMaxResumePercentage": "Porcentaje máximo para la reanudación:",
"LabelMaxResumePercentageHelp": "Los medios se consideran totalmente reproducidos si se detienen después de este tiempo.", "LabelMaxResumePercentageHelp": "Los medios se consideran totalmente reproducidos si se detienen después de este tiempo.",
"LabelMaxScreenshotsPerItem": "Número máximo de capturas de pantalla por ítem:", "LabelMaxScreenshotsPerItem": "Número máximo de capturas de pantalla por ítem:",
"LabelMaxStreamingBitrate": "Calidad máxima de transmisión:", "LabelMaxStreamingBitrate": "Calidad máxima de transmisión:",
@ -686,7 +686,7 @@
"LabelMoviePrefixHelp": "Si un prefijo es aplicado al título de las películas, introdúzcalo aquí para que el servidor pueda manejarlo correctamente.", "LabelMoviePrefixHelp": "Si un prefijo es aplicado al título de las películas, introdúzcalo aquí para que el servidor pueda manejarlo correctamente.",
"LabelMovieRecordingPath": "Ruta para grabaciones de Películas (opcional):", "LabelMovieRecordingPath": "Ruta para grabaciones de Películas (opcional):",
"LabelMusicStreamingTranscodingBitrate": "Tasa de transcodificación de música:", "LabelMusicStreamingTranscodingBitrate": "Tasa de transcodificación de música:",
"LabelMusicStreamingTranscodingBitrateHelp": "Especifique la tasa de bits máxima al transferir musica en tiempo real", "LabelMusicStreamingTranscodingBitrateHelp": "Especifique la tasa de bits máxima al transmitir música.",
"LabelName": "Nombre:", "LabelName": "Nombre:",
"LabelNewName": "Nuevo nombre:", "LabelNewName": "Nuevo nombre:",
"LabelNewPassword": "Nueva contraseña:", "LabelNewPassword": "Nueva contraseña:",
@ -758,7 +758,7 @@
"LabelServerHost": "Servidor:", "LabelServerHost": "Servidor:",
"LabelServerHostHelp": "192.168.1.100:8096 o https://miservidor.com", "LabelServerHostHelp": "192.168.1.100:8096 o https://miservidor.com",
"LabelSimultaneousConnectionLimit": "Limite de transmisiones simultaneas:", "LabelSimultaneousConnectionLimit": "Limite de transmisiones simultaneas:",
"LabelSkin": "Piel:", "LabelSkin": "Apariencia:",
"LabelSkipBackLength": "Longitud de salto hacia atrás:", "LabelSkipBackLength": "Longitud de salto hacia atrás:",
"LabelSkipForwardLength": "Longitud de salto hacia adelante:", "LabelSkipForwardLength": "Longitud de salto hacia adelante:",
"LabelSkipIfAudioTrackPresent": "Omitir si la pista de audio por defecto coincide con el lenguaje de descarga", "LabelSkipIfAudioTrackPresent": "Omitir si la pista de audio por defecto coincide con el lenguaje de descarga",
@ -821,7 +821,7 @@
"LabelVersionNumber": "Versión {0}", "LabelVersionNumber": "Versión {0}",
"LabelXDlnaCap": "X-DLNA cap:", "LabelXDlnaCap": "X-DLNA cap:",
"LabelXDlnaCapHelp": "Determina el contenido del elemento X_DLNACAP en el namespace urn:schemas-dlna-org:device-1-0.", "LabelXDlnaCapHelp": "Determina el contenido del elemento X_DLNACAP en el namespace urn:schemas-dlna-org:device-1-0.",
"LabelXDlnaDoc": "X-DLNA doc:", "LabelXDlnaDoc": "Documento X-DLNA:",
"LabelXDlnaDocHelp": "Determina el contenido del elemento X_DLNADOC en el namespace urn:schemas-dlna-org:device-1-0.", "LabelXDlnaDocHelp": "Determina el contenido del elemento X_DLNADOC en el namespace urn:schemas-dlna-org:device-1-0.",
"LabelYear": "Año:", "LabelYear": "Año:",
"LabelYourFirstName": "Su nombre:", "LabelYourFirstName": "Su nombre:",
@ -888,7 +888,7 @@
"MessageDeleteTaskTrigger": "¿Está seguro de querer eliminar este disparador de tarea?", "MessageDeleteTaskTrigger": "¿Está seguro de querer eliminar este disparador de tarea?",
"MessageDirectoryPickerBSDInstruction": "Para BSD, quizás necesite configurar el almacenamiento dentro de su \"FreeNAS Jail\" de manera que permita a Jellyfin accesarlo.", "MessageDirectoryPickerBSDInstruction": "Para BSD, quizás necesite configurar el almacenamiento dentro de su \"FreeNAS Jail\" de manera que permita a Jellyfin accesarlo.",
"MessageDirectoryPickerInstruction": "Las rutas de red pueden ser introducidas manualmente en caso de que el botón de Red no pueda localizar sus dispositivos. Por ejemplo, {0} or {1}.", "MessageDirectoryPickerInstruction": "Las rutas de red pueden ser introducidas manualmente en caso de que el botón de Red no pueda localizar sus dispositivos. Por ejemplo, {0} or {1}.",
"MessageDirectoryPickerLinuxInstruction": "Para Linux en Arch Linux, CentOS, Debian, Fedora, OpenSuse o Ubuntu, debe conceder al usuario del servicio al menos permisos de lectura a sus ubicaciones de almacenamiento.", "MessageDirectoryPickerLinuxInstruction": "Para Linux en Arch Linux, CentOS, Debian, Fedora, openSUSE, o Ubuntu. Debe conceder al usuario del servicio al menos permisos de lectura a sus ubicaciones de almacenamiento.",
"MessageDownloadQueued": "Descargar cola.", "MessageDownloadQueued": "Descargar cola.",
"MessageEnablingOptionLongerScans": "Habilitar esta opción podría resultar en escaneos de bibliotecas significativamente mas largos.", "MessageEnablingOptionLongerScans": "Habilitar esta opción podría resultar en escaneos de bibliotecas significativamente mas largos.",
"MessageFileReadError": "Hubo un error al leer el archivo. Por favor intente de nuevo.", "MessageFileReadError": "Hubo un error al leer el archivo. Por favor intente de nuevo.",
@ -946,15 +946,15 @@
"NoNextUpItemsMessage": "No se encontró nada. ¡Comienza a ver tus programas!", "NoNextUpItemsMessage": "No se encontró nada. ¡Comienza a ver tus programas!",
"NoPluginConfigurationMessage": "El complemento no tiene configuraciones disponibles.", "NoPluginConfigurationMessage": "El complemento no tiene configuraciones disponibles.",
"NoSubtitleSearchResultsFound": "No se encontraron resultados.", "NoSubtitleSearchResultsFound": "No se encontraron resultados.",
"NoSubtitles": "Sin Subtitulos", "NoSubtitles": "Nada",
"NoSubtitlesHelp": "Los subtítulos no serán cargados por defecto. Pero pueden ser activados manualmente durante la reproducción.", "NoSubtitlesHelp": "Los subtítulos no serán cargados por defecto. Pero pueden ser activados manualmente durante la reproducción.",
"None": "Ninguno", "None": "Ninguno",
"NumLocationsValue": "{0} carpetas", "NumLocationsValue": "{0} carpetas",
"Off": "Apagar", "Off": "Apagar",
"OneChannel": "Un canal", "OneChannel": "Un canal",
"OnlyForcedSubtitles": "Únicamente subtítulos forzados", "OnlyForcedSubtitles": "Únicamente forzados",
"OnlyForcedSubtitlesHelp": "Se cargarán únicamente subtítulos marcados como forzados.", "OnlyForcedSubtitlesHelp": "Se cargarán únicamente subtítulos marcados como forzados.",
"OnlyImageFormats": "Solo formatos de imagen (VOBSUB, PGS, SUB, etc.)", "OnlyImageFormats": "Solo formatos de imagen (VOBSUB, PGS, SUB)",
"OptionAdminUsers": "Administradores", "OptionAdminUsers": "Administradores",
"OptionAlbum": "Álbum", "OptionAlbum": "Álbum",
"OptionAlbumArtist": "Artista del Álbum", "OptionAlbumArtist": "Artista del Álbum",
@ -1003,12 +1003,12 @@
"OptionDisplayFolderView": "Mostrar una vista de carpetas para mostrar carpetas de medios simples", "OptionDisplayFolderView": "Mostrar una vista de carpetas para mostrar carpetas de medios simples",
"OptionDisplayFolderViewHelp": "Muestra las carpetas junto con sus otras bibliotecas multimedia. Esto puede ser útil si desea tener una vista de carpeta sencilla.", "OptionDisplayFolderViewHelp": "Muestra las carpetas junto con sus otras bibliotecas multimedia. Esto puede ser útil si desea tener una vista de carpeta sencilla.",
"OptionDownloadArtImage": "Arte", "OptionDownloadArtImage": "Arte",
"OptionDownloadBackImage": "Reverso", "OptionDownloadBackImage": "Atras",
"OptionDownloadBannerImage": "Cartél", "OptionDownloadBannerImage": "Banner",
"OptionDownloadBoxImage": "Caja", "OptionDownloadBoxImage": "Caja",
"OptionDownloadDiscImage": "DIsco", "OptionDownloadDiscImage": "DIsco",
"OptionDownloadImagesInAdvance": "Descargar las imágenes desde el inicio", "OptionDownloadImagesInAdvance": "Descargar las imágenes desde el inicio",
"OptionDownloadImagesInAdvanceHelp": "Por defecto, la mayoría de las imágenes son descargadas solo cuando son solicitadas por alguna aplicación Jellyfin. Habilite esta opción para descargar todas las imágenes desde por adelantado, conforme se vayan agregando mas medios. Esto podría causar escaneos de bibliotecas mas largos.", "OptionDownloadImagesInAdvanceHelp": "Por defecto, la mayoría de las imágenes son descargadas solo cuando son solicitadas por una aplicacion Jellyfin. Habilite esta opción para descargar todas las imágenes por adelantado, a medida que se agregen mas medios. Esto podría causar escaneos de bibliotecas significativamente largos.",
"OptionDownloadMenuImage": "Menú", "OptionDownloadMenuImage": "Menú",
"OptionDownloadPrimaryImage": "Principal", "OptionDownloadPrimaryImage": "Principal",
"OptionDownloadThumbImage": "Miniatura", "OptionDownloadThumbImage": "Miniatura",
@ -1067,7 +1067,7 @@
"OptionReportByteRangeSeekingWhenTranscodingHelp": "Esto es requerido para algunos dispositivos que no pueden hacer búsquedas por tiempo muy bien.", "OptionReportByteRangeSeekingWhenTranscodingHelp": "Esto es requerido para algunos dispositivos que no pueden hacer búsquedas por tiempo muy bien.",
"OptionRequirePerfectSubtitleMatch": "Solo descargar subtitulos que corresponden perfectamente para mis archivos de video", "OptionRequirePerfectSubtitleMatch": "Solo descargar subtitulos que corresponden perfectamente para mis archivos de video",
"OptionRequirePerfectSubtitleMatchHelp": "Solicitar una coincidencia perfecta filtrara los subtitulos para incluir solo aquellos que han sido verificados exactamente con su archivo de video. Desmarcar esta opción incrementara las probabilidades de que los subtitulos sean descargados, a la vez que incrementara las posibilidades de obtener subtitulos mal sincronizados o con texto incorrecto.", "OptionRequirePerfectSubtitleMatchHelp": "Solicitar una coincidencia perfecta filtrara los subtitulos para incluir solo aquellos que han sido verificados exactamente con su archivo de video. Desmarcar esta opción incrementara las probabilidades de que los subtitulos sean descargados, a la vez que incrementara las posibilidades de obtener subtitulos mal sincronizados o con texto incorrecto.",
"OptionResElement": "Elemento res", "OptionResElement": "Elemento Res",
"OptionResumable": "Reanudable", "OptionResumable": "Reanudable",
"OptionRuntime": "Duración", "OptionRuntime": "Duración",
"OptionSaturday": "Sábado", "OptionSaturday": "Sábado",
@ -1079,7 +1079,7 @@
"OptionThursday": "Jueves", "OptionThursday": "Jueves",
"OptionTrackName": "Nombre de la Pista", "OptionTrackName": "Nombre de la Pista",
"OptionTuesday": "Martes", "OptionTuesday": "Martes",
"OptionTvdbRating": "Calificación de Tvdb", "OptionTvdbRating": "Calificación de TVDB",
"OptionUnairedEpisode": "Episodios no Emitidos", "OptionUnairedEpisode": "Episodios no Emitidos",
"OptionUnplayed": "No reproducido", "OptionUnplayed": "No reproducido",
"OptionWakeFromSleep": "Al Despertar", "OptionWakeFromSleep": "Al Despertar",
@ -1089,9 +1089,9 @@
"OptionWeekly": "Semanal", "OptionWeekly": "Semanal",
"OriginalAirDateValue": "Fecha de emisión original: {0}", "OriginalAirDateValue": "Fecha de emisión original: {0}",
"Overview": "Sinopsis", "Overview": "Sinopsis",
"PackageInstallCancelled": "{0} instalación cancelada.", "PackageInstallCancelled": "{0} (versión {1}) instalación cancelada.",
"PackageInstallCompleted": "{0} instalación completada.", "PackageInstallCompleted": "{0} (version {1}) instalación completada.",
"PackageInstallFailed": "{0} instalación fallida.", "PackageInstallFailed": "{0} (versión {1}) instalación fallida.",
"ParentalRating": "Clasificación Parental", "ParentalRating": "Clasificación Parental",
"PasswordMatchError": "La Contraseña y la confirmación de la contraseña deben coincidir.", "PasswordMatchError": "La Contraseña y la confirmación de la contraseña deben coincidir.",
"PasswordResetComplete": "La contraseña ha sido restablecida.", "PasswordResetComplete": "La contraseña ha sido restablecida.",
@ -1115,7 +1115,7 @@
"Playlists": "Listas de reproducción", "Playlists": "Listas de reproducción",
"PleaseAddAtLeastOneFolder": "Por favor agregue al menos una carpeta a esta biblioteca dando clic al botón de Agregar.", "PleaseAddAtLeastOneFolder": "Por favor agregue al menos una carpeta a esta biblioteca dando clic al botón de Agregar.",
"PleaseConfirmPluginInstallation": "Por favor haga clic en OK para confirmar que ha leido lo que se encuentra arriba y que desea proceder con la instalación del complemento.", "PleaseConfirmPluginInstallation": "Por favor haga clic en OK para confirmar que ha leido lo que se encuentra arriba y que desea proceder con la instalación del complemento.",
"PleaseEnterNameOrId": "Por favor introduzca un nombre o id externo.", "PleaseEnterNameOrId": "Por favor introduzca un nombre o ID externo.",
"PleaseRestartServerName": "Por favor reinicie el Servidor Jellyfin - {0}.", "PleaseRestartServerName": "Por favor reinicie el Servidor Jellyfin - {0}.",
"PleaseSelectTwoItems": "Por favor selecciona al menos dos ítems.", "PleaseSelectTwoItems": "Por favor selecciona al menos dos ítems.",
"PluginInstalledMessage": "El complemento ha sido instalado exitosamente. El Servidor Jellyfin necesitará reiniciarse para que los cambios surtan efecto.", "PluginInstalledMessage": "El complemento ha sido instalado exitosamente. El Servidor Jellyfin necesitará reiniciarse para que los cambios surtan efecto.",
@ -1131,7 +1131,7 @@
"Programs": "Programas", "Programs": "Programas",
"Quality": "Calidad", "Quality": "Calidad",
"QueueAllFromHere": "Encolar todos desde aquí", "QueueAllFromHere": "Encolar todos desde aquí",
"Raised": "Elevacion", "Raised": "Elevación",
"Rate": "Calificación", "Rate": "Calificación",
"RecentlyWatched": "Visto recientemente", "RecentlyWatched": "Visto recientemente",
"RecommendationBecauseYouLike": "Porque te gustó {0}", "RecommendationBecauseYouLike": "Porque te gustó {0}",
@ -1155,7 +1155,7 @@
"Repeat": "Repetir", "Repeat": "Repetir",
"RepeatAll": "Repetir todas", "RepeatAll": "Repetir todas",
"RepeatEpisodes": "Repetir episodios", "RepeatEpisodes": "Repetir episodios",
"RepeatMode": "Modo de repeticion", "RepeatMode": "Modo de repetición",
"RepeatOne": "Repetir uno", "RepeatOne": "Repetir uno",
"ReplaceAllMetadata": "Remplazar todos los metadatos", "ReplaceAllMetadata": "Remplazar todos los metadatos",
"ReplaceExistingImages": "Reemplazar imágenes existentes", "ReplaceExistingImages": "Reemplazar imágenes existentes",
@ -1181,7 +1181,7 @@
"SearchResults": "Resultados de la búsqueda", "SearchResults": "Resultados de la búsqueda",
"SendMessage": "Enviar mensaje", "SendMessage": "Enviar mensaje",
"SeriesCancelled": "Serie cancelada.", "SeriesCancelled": "Serie cancelada.",
"SeriesDisplayOrderHelp": "Ordenar los episodios por fecha transmisión, orden del dvd o por su numeración absoluta.", "SeriesDisplayOrderHelp": "Ordenar los episodios por fecha transmisión, orden del DVD o por su numeración absoluta.",
"SeriesRecordingScheduled": "Grabación de series programadas.", "SeriesRecordingScheduled": "Grabación de series programadas.",
"SeriesSettings": "Configuración de la Serie", "SeriesSettings": "Configuración de la Serie",
"SeriesYearToPresent": "{0} - Actualidad", "SeriesYearToPresent": "{0} - Actualidad",
@ -1195,7 +1195,7 @@
"Share": "Compartir", "Share": "Compartir",
"ShowAdvancedSettings": "Mostrar configuraciones avanzadas", "ShowAdvancedSettings": "Mostrar configuraciones avanzadas",
"ShowIndicatorsFor": "Mostrar indicadores para:", "ShowIndicatorsFor": "Mostrar indicadores para:",
"ShowTitle": "Mostrar titulo", "ShowTitle": "Mostrar título",
"ShowYear": "Mostrar año", "ShowYear": "Mostrar año",
"Shows": "Programas", "Shows": "Programas",
"Shuffle": "Aleatorio", "Shuffle": "Aleatorio",
@ -1334,9 +1334,9 @@
"Writer": "Escritor", "Writer": "Escritor",
"XmlDocumentAttributeListHelp": "Estos atributos se aplican al elemento raíz de cada respuesta XML.", "XmlDocumentAttributeListHelp": "Estos atributos se aplican al elemento raíz de cada respuesta XML.",
"XmlTvKidsCategoriesHelp": "Los programas con estas categorías serán mostrados como programas infantiles. Separe varios con un \"|\".", "XmlTvKidsCategoriesHelp": "Los programas con estas categorías serán mostrados como programas infantiles. Separe varios con un \"|\".",
"XmlTvMovieCategoriesHelp": "Los programas con estas categorías serán mostrado como películas. Separe varios con un \"|\".", "XmlTvMovieCategoriesHelp": "Los programas con estas categorías serán mostrados como películas. Separe varios con un \"|\".",
"XmlTvNewsCategoriesHelp": "Los programas con estas categorías serán mostrado como programas noticiosos. Separe varios con un \"|\".", "XmlTvNewsCategoriesHelp": "Los programas con estas categorías serán mostrados como programas noticiosos. Separe varios con un \"|\".",
"XmlTvPathHelp": "Una ruta a un archivo XML de TV. Jellyfin leerá este archivo y lo revisará periódicamente en busca de actualizaciones. Usted es responsable de crear y actualizar el fichero.", "XmlTvPathHelp": "Ruta al archivo XMLTV. Jellyfin leerá este archivo y lo revisará periódicamente en busca de actualizaciones. Usted es responsable de crear y actualizar el archivo.",
"XmlTvSportsCategoriesHelp": "Los programas con estas categorías serán mostrados como programas deportivos. Separe varios con un \"|\".", "XmlTvSportsCategoriesHelp": "Los programas con estas categorías serán mostrados como programas deportivos. Separe varios con un \"|\".",
"Yes": "Sí", "Yes": "Sí",
"Yesterday": "Ayer", "Yesterday": "Ayer",
@ -1352,7 +1352,7 @@
"Extras": "Extras", "Extras": "Extras",
"General": "General", "General": "General",
"HeaderAdmin": "Administrador", "HeaderAdmin": "Administrador",
"HeaderApp": "App", "HeaderApp": "Aplicación",
"HeaderError": "Error", "HeaderError": "Error",
"HeaderFavoriteMovies": "Peliculas favoritas", "HeaderFavoriteMovies": "Peliculas favoritas",
"HeaderFavoriteShows": "Programas favoritos", "HeaderFavoriteShows": "Programas favoritos",
@ -1379,7 +1379,7 @@
"DashboardOperatingSystem": "Sistema operativo: {0}", "DashboardOperatingSystem": "Sistema operativo: {0}",
"DashboardArchitecture": "Arquitectura: {0}", "DashboardArchitecture": "Arquitectura: {0}",
"LabelVideo": "Video", "LabelVideo": "Video",
"LabelWeb": "Web: ", "LabelWeb": "Web:",
"LaunchWebAppOnStartup": "Iniciar la interfaz web al iniciar el servidor", "LaunchWebAppOnStartup": "Iniciar la interfaz web al iniciar el servidor",
"LaunchWebAppOnStartupHelp": "Abre el cliente web en su navegador web predeterminado cuando se inicia el servidor. Esto no ocurrirá cuando se utilice la función de reinicio del servidor.", "LaunchWebAppOnStartupHelp": "Abre el cliente web en su navegador web predeterminado cuando se inicia el servidor. Esto no ocurrirá cuando se utilice la función de reinicio del servidor.",
"LeaveBlankToNotSetAPassword": "Puede dejar este campo en blanco para no establecer ninguna contraseña.", "LeaveBlankToNotSetAPassword": "Puede dejar este campo en blanco para no establecer ninguna contraseña.",
@ -1400,7 +1400,7 @@
"No": "No", "No": "No",
"Normal": "Normal", "Normal": "Normal",
"Option3D": "3D", "Option3D": "3D",
"OptionBanner": "Banner", "OptionBanner": "Baner",
"OptionBluray": "Blu-ray", "OptionBluray": "Blu-ray",
"OptionCaptionInfoExSamsung": "CaptionInfoEx (Samsung)", "OptionCaptionInfoExSamsung": "CaptionInfoEx (Samsung)",
"OptionDownloadLogoImage": "Logo", "OptionDownloadLogoImage": "Logo",
@ -1452,5 +1452,55 @@
"LabelVideoBitrate": "Velocidad de bits:", "LabelVideoBitrate": "Velocidad de bits:",
"LabelTranscodingProgress": "Progreso de la transcodificación:", "LabelTranscodingProgress": "Progreso de la transcodificación:",
"LabelTranscodingFramerate": "Velocidad de cuadros de la transcodificación:", "LabelTranscodingFramerate": "Velocidad de cuadros de la transcodificación:",
"LabelSize": "Tamaño:" "LabelSize": "Tamaño:",
"SelectAdminUsername": "Por favor seleccione un nombre de usuario para la cuenta de administrador.",
"EnableFastImageFadeInHelp": "Habilita la animación de desvanecido rápido para las imágenes cargadas",
"LabelDroppedFrames": "Cuadros saltados:",
"CopyStreamURLError": "Hubo un error copiando la URL.",
"ButtonSplit": "Dividir",
"WeeklyAt": "{0}s a las {1}",
"OnApplicationStartup": "Cuando se inicia la aplicación",
"EveryXHours": "Cada {0} horas",
"EveryHour": "Cada hora",
"EveryXMinutes": "Cada {0} minutos",
"OnWakeFromSleep": "Activarse del Modo Suspensión",
"DailyAt": "Diariamente a las {0}",
"LastSeen": "Ultima vez visto {0}",
"PersonRole": "como {0}",
"ListPaging": "{0}-{1} de {2}",
"WriteAccessRequired": "El servidor Jellyfin requiere permiso de escritura en esta carpeta. Por favor brinde acceso de escritura e intente de nuevo.",
"PathNotFound": "No se pudo encontrar la ruta. Por favor asegúrese de que la ruta es valida e intente de nuevo.",
"Track": "Pista",
"Season": "Temporada",
"ReleaseGroup": "Grupo de salida",
"PreferEmbeddedEpisodeInfosOverFileNames": "Preferir información embebida en el episodio sobre el nombre de archivo",
"PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Esto utiliza la información de el episodio desde metadatos embebidos si esta disponible.",
"PlaybackErrorNoCompatibleStream": "Este cliente no es compatible con los medios y el servidor no está enviando un formato de medios compatible.",
"Person": "Persona",
"OtherArtist": "Otro artista",
"OptionRandom": "Aleatorio",
"OptionForceRemoteSourceTranscoding": "Forzar transcodificación para fuentes remotas (como TV en Vivo)",
"NoCreatedLibraries": "Parece que no has creado ninguna biblioteca todavía. {0}Quisieras crear una ahora?{1}",
"Movie": "Película",
"MessageConfirmAppExit": "Deseas salir?",
"LabelVideoResolution": "Resolución de video:",
"LabelStreamType": "Tipo de transmisión:",
"EnableFastImageFadeIn": "Desvanecido de imagen rápido",
"LabelPlayerDimensions": "Dimensiones del reproductor:",
"LabelCorruptedFrames": "Cuadros corruptos:",
"HeaderNavigation": "Navegación",
"HeaderFavoritePeople": "Personas favoritas",
"Episode": "Episodio",
"ClientSettings": "Configuración de cliente",
"BoxSet": "Box Set",
"AskAdminToCreateLibrary": "Preguntar al administrador para crear una biblioteca.",
"Artist": "Artista",
"AllowFfmpegThrottlingHelp": "Cuando una transcodificación o remux se encuentra muy por delante de la posición de reproducción, pausar el proceso para consumir menos recursos. Esto es mas practico cuando se esta viendo sin buscar constantemente. Deshabilitar esta opción si experimentas problemas de reproducción.",
"AllowFfmpegThrottling": "Aceleración de Transcoders",
"AlbumArtist": "Álbum de artista",
"Album": "Álbum",
"YadifBob": "Yadif Bob",
"Yadif": "Yadif",
"LabelDeinterlaceMethod": "Metodo de Desentrelazado:",
"DeinterlaceMethodHelp": "Seleccione el método de desentrelazado que se usará al codificar el contenido entrelazado."
} }

View file

@ -10,7 +10,7 @@
"Alerts": "Alertas", "Alerts": "Alertas",
"All": "Todo", "All": "Todo",
"AllChannels": "Todos los canales", "AllChannels": "Todos los canales",
"AllComplexFormats": "Todos los formatos complejos (ASS, SSA, VOBSUB, PGS, SUB/IDX, etc.)", "AllComplexFormats": "Todos los formatos complejos (ASS, SSA, VOBSUB, PGS, SUB, IDX)",
"AllEpisodes": "Todos los episodios", "AllEpisodes": "Todos los episodios",
"AllLanguages": "Todos los idiomas", "AllLanguages": "Todos los idiomas",
"AllLibraries": "Todas las bibliotecas", "AllLibraries": "Todas las bibliotecas",
@ -22,7 +22,7 @@
"AllowRemoteAccess": "Permitir conexiones remotas a este servidor Jellyfin.", "AllowRemoteAccess": "Permitir conexiones remotas a este servidor Jellyfin.",
"AllowRemoteAccessHelp": "Si no está activado, todas las conexiones remotas serán bloqueadas.", "AllowRemoteAccessHelp": "Si no está activado, todas las conexiones remotas serán bloqueadas.",
"AllowedRemoteAddressesHelp": "Lista separada por comas de direcciones IP o entradas de IP / máscara de red para redes a las que se les permitirá conectarse de forma remota. Si se deja en blanco, se permitirán todas las direcciones remotas.", "AllowedRemoteAddressesHelp": "Lista separada por comas de direcciones IP o entradas de IP / máscara de red para redes a las que se les permitirá conectarse de forma remota. Si se deja en blanco, se permitirán todas las direcciones remotas.",
"AlwaysPlaySubtitles": "Mostrar subtítulos siempre", "AlwaysPlaySubtitles": "Siempre mostrar subtítulos",
"AlwaysPlaySubtitlesHelp": "Los subtítulos que concuerden con la preferencia de idioma se cargarán independientemente del idioma de audio.", "AlwaysPlaySubtitlesHelp": "Los subtítulos que concuerden con la preferencia de idioma se cargarán independientemente del idioma de audio.",
"Art": "Arte", "Art": "Arte",
"Artists": "Artistas", "Artists": "Artistas",
@ -157,7 +157,7 @@
"Disc": "Disco", "Disc": "Disco",
"Disconnect": "Desconectar", "Disconnect": "Desconectar",
"Dislike": "No me gusta", "Dislike": "No me gusta",
"DisplayModeHelp": "Seleccione el tipo de pantalla que está ejecutando Jellyfin.", "DisplayModeHelp": "Seleccione el estilo de diseño que desea en la Interfaz.",
"DoNotRecord": "No grabar", "DoNotRecord": "No grabar",
"Down": "Abajo", "Down": "Abajo",
"Download": "Descargar", "Download": "Descargar",
@ -869,7 +869,7 @@
"OneChannel": "Un canal", "OneChannel": "Un canal",
"OnlyForcedSubtitles": "Solo subtítulos forzados", "OnlyForcedSubtitles": "Solo subtítulos forzados",
"OnlyForcedSubtitlesHelp": "Solo se cargarán los subtítulos marcados como forzados.", "OnlyForcedSubtitlesHelp": "Solo se cargarán los subtítulos marcados como forzados.",
"OnlyImageFormats": "Solo formatos de imagen (VOBSUB, PGS, SUB, etc.)", "OnlyImageFormats": "Solo formatos de imagen (VOBSUB, PGS, SUB)",
"OptionAdminUsers": "Administradores", "OptionAdminUsers": "Administradores",
"OptionAlbum": "Álbum", "OptionAlbum": "Álbum",
"OptionAlbumArtist": "Artista de álbum", "OptionAlbumArtist": "Artista de álbum",
@ -1001,7 +1001,7 @@
"PackageInstallCancelled": "{0} (versión {1}) instalación cancelada.", "PackageInstallCancelled": "{0} (versión {1}) instalación cancelada.",
"PackageInstallCompleted": "{0} (versión {1}) instalación completada.", "PackageInstallCompleted": "{0} (versión {1}) instalación completada.",
"PackageInstallFailed": "{0} (versión {1}) instalación fallida.", "PackageInstallFailed": "{0} (versión {1}) instalación fallida.",
"ParentalRating": "Calificación de los padres", "ParentalRating": "Clasificación parental",
"PasswordMatchError": "La contraseña y la confirmación de la contraseña deben de ser iguales.", "PasswordMatchError": "La contraseña y la confirmación de la contraseña deben de ser iguales.",
"PasswordResetComplete": "La contraseña se ha restablecido.", "PasswordResetComplete": "La contraseña se ha restablecido.",
"PasswordResetConfirmation": "¿Esta seguro de que desea restablecer la contraseña?", "PasswordResetConfirmation": "¿Esta seguro de que desea restablecer la contraseña?",
@ -1234,7 +1234,7 @@
"Auto": "Automático", "Auto": "Automático",
"AutoBasedOnLanguageSetting": "Automático (basado en la configuración de idioma)", "AutoBasedOnLanguageSetting": "Automático (basado en la configuración de idioma)",
"Banner": "Pancarta", "Banner": "Pancarta",
"BurnSubtitlesHelp": "Determina si el servidor debería incrustar los subtítulos al convertir el vídeo dependiendo del formato de los subtítulos. Evitar incrustar los subtítulos mejorará el rendimiento del servidor. Selecciona Auto para incrustar subtítulos basados en imágenes (VOBSUB, PGS, SUB/IDX, etc.) y algunos subtítulos de tipo ASS/SSA.", "BurnSubtitlesHelp": "Determina si el servidor debe grabar los subtítulos en el vídeo al transcodificar. Desactivar esta opción puede mejorar el rendimiento. Seleccione 'Auto' para grabar formatos basados en imágenes (VOBSUB, PGS, SUB/IDX) y ciertos subtítulos ASS o SSA.",
"ButtonInfo": "Información", "ButtonInfo": "Información",
"ChangingMetadataImageSettingsNewContent": "Los cambios a la configuración de descarga de etiquetas e imágenes sólo se aplicará al nuevo contenido que se añada a la biblioteca. Para aplicar los cambios a los elementos existentes necesitarás actualizar las etiquetas manualmente.", "ChangingMetadataImageSettingsNewContent": "Los cambios a la configuración de descarga de etiquetas e imágenes sólo se aplicará al nuevo contenido que se añada a la biblioteca. Para aplicar los cambios a los elementos existentes necesitarás actualizar las etiquetas manualmente.",
"ColorPrimaries": "Colores primarios", "ColorPrimaries": "Colores primarios",
@ -1465,7 +1465,7 @@
"EnableFastImageFadeIn": "Cargar las imágenes suavemente", "EnableFastImageFadeIn": "Cargar las imágenes suavemente",
"CopyStreamURLError": "Ha habido un error copiando la dirección.", "CopyStreamURLError": "Ha habido un error copiando la dirección.",
"AllowFfmpegThrottlingHelp": "Cuando una transcodificación o un remux se adelanta lo suficiente desde la posición de reproducción actual, pause el proceso para que consuma menos recursos. Esto es más útil cuando se reproduce de forma linear, sin saltar de posición de reproducción a menudo. Desactívelo si experimenta problemas de reproducción.", "AllowFfmpegThrottlingHelp": "Cuando una transcodificación o un remux se adelanta lo suficiente desde la posición de reproducción actual, pause el proceso para que consuma menos recursos. Esto es más útil cuando se reproduce de forma linear, sin saltar de posición de reproducción a menudo. Desactívelo si experimenta problemas de reproducción.",
"PlaybackErrorNoCompatibleStream": "Hay un problema con el perfil del cliente y el servidor no es capaz de enviar el contenido en un formato compatible.", "PlaybackErrorNoCompatibleStream": "Este contenido no es compatible con este dispositivo y no se puede reproducir: No se puede obtener del servidor en un formato compatible.",
"OptionForceRemoteSourceTranscoding": "Forzar la transcodificación para fuentes remotas de medios (como LiveTV)", "OptionForceRemoteSourceTranscoding": "Forzar la transcodificación para fuentes remotas de medios (como LiveTV)",
"NoCreatedLibraries": "Parece que aún no se han creado librearías. {0}¿Quiere crear una ahora?{1}", "NoCreatedLibraries": "Parece que aún no se han creado librearías. {0}¿Quiere crear una ahora?{1}",
"LabelVideoResolution": "Resolución de video:", "LabelVideoResolution": "Resolución de video:",
@ -1489,5 +1489,16 @@
"EveryXMinutes": "Cada {0} minutos", "EveryXMinutes": "Cada {0} minutos",
"EveryHour": "Cada hora", "EveryHour": "Cada hora",
"EveryXHours": "Cada {0} horas", "EveryXHours": "Cada {0} horas",
"OnApplicationStartup": "Al iniciarse el servidor" "OnApplicationStartup": "Al iniciarse el servidor",
"Track": "Pista",
"Season": "Temporada",
"ReleaseGroup": "Grupo de salida",
"Person": "Persona",
"OtherArtist": "Otro artista",
"Movie": "Película",
"Episode": "Episodio",
"BoxSet": "Box Set",
"Artist": "Artista",
"AlbumArtist": "Artista del álbum",
"Album": "Álbum"
} }

View file

@ -1468,7 +1468,7 @@
"AllowFfmpegThrottlingHelp": "Quand le transcodage ou le remultiplexage est suffisamment loin de la position de lecture, le processus se mettra en pause afin déconomiser des ressources. Plus utile lors dune lecture continue. À désactiver en cas de problèmes de lecture.", "AllowFfmpegThrottlingHelp": "Quand le transcodage ou le remultiplexage est suffisamment loin de la position de lecture, le processus se mettra en pause afin déconomiser des ressources. Plus utile lors dune lecture continue. À désactiver en cas de problèmes de lecture.",
"AllowFfmpegThrottling": "Adapter la Vitesse du Transcodage", "AllowFfmpegThrottling": "Adapter la Vitesse du Transcodage",
"NoCreatedLibraries": "Il semblerait que vous n'ayez créé aucune librairie. {0}Voulez-vous en créer une maintenant ?{1}", "NoCreatedLibraries": "Il semblerait que vous n'ayez créé aucune librairie. {0}Voulez-vous en créer une maintenant ?{1}",
"PlaybackErrorNoCompatibleStream": "Problème de profil client, le serveur na pas pu envoyer un format média compatible.", "PlaybackErrorNoCompatibleStream": "Ce client n'est pas compatible avec le média et le serveur n'envoie pas de format compatible.",
"PreferEmbeddedEpisodeInfosOverFileNames": "Préférer les informations intégrées aux noms de fichiers", "PreferEmbeddedEpisodeInfosOverFileNames": "Préférer les informations intégrées aux noms de fichiers",
"PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Utilise les informations des métadonnées intégrées, si disponible.", "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Utilise les informations des métadonnées intégrées, si disponible.",
"ClientSettings": "Paramètres Client", "ClientSettings": "Paramètres Client",
@ -1494,5 +1494,9 @@
"PersonRole": "en tant que {0}", "PersonRole": "en tant que {0}",
"ListPaging": "{0}-{1} de {2}", "ListPaging": "{0}-{1} de {2}",
"WriteAccessRequired": "Le serveur Jellyfin a besoin d'un accès en écriture à ce dossier. Merci de vérifier laccès en écriture et réessayez.", "WriteAccessRequired": "Le serveur Jellyfin a besoin d'un accès en écriture à ce dossier. Merci de vérifier laccès en écriture et réessayez.",
"PathNotFound": "Le chemin d'accès n'a pas pu être trouvé. Merci de le vérifier et de réessayer." "PathNotFound": "Le chemin d'accès n'a pas pu être trouvé. Merci de le vérifier et de réessayer.",
"YadifBob": "Yadif Bob",
"Yadif": "Yadif",
"LabelDeinterlaceMethod": "Méthode de désentrelacement :",
"DeinterlaceMethodHelp": "Sélectionnes la méthode de désentrelacement à utiliser lors du transcodage de contenu entrelacé."
} }

View file

@ -224,7 +224,7 @@
"Home": "Kezdőlap", "Home": "Kezdőlap",
"Identify": "Azonosítás", "Identify": "Azonosítás",
"Images": "Képek", "Images": "Képek",
"InstallingPackage": "{0} Telepítése", "InstallingPackage": "{0} ({1} verzió) telepítése",
"Label3DFormat": "3D formátum:", "Label3DFormat": "3D formátum:",
"LabelAlbumArtists": "Album előadók:", "LabelAlbumArtists": "Album előadók:",
"LabelAll": "Összes", "LabelAll": "Összes",
@ -443,9 +443,9 @@
"OptionWednesday": "Szerda", "OptionWednesday": "Szerda",
"OptionWeekly": "Heti", "OptionWeekly": "Heti",
"OriginalAirDateValue": "Eredeti vetítés dátuma: {0}", "OriginalAirDateValue": "Eredeti vetítés dátuma: {0}",
"PackageInstallCancelled": "{0} telepítése megszakítva.", "PackageInstallCancelled": "{0} ({1} verzió) telepítése megszakítva.",
"PackageInstallCompleted": "{0} telepítése befejezve.", "PackageInstallCompleted": "{0} ({1} verzió) telepítése befejezve.",
"PackageInstallFailed": "{0} telepítése nem sikerült.", "PackageInstallFailed": "{0} ({1} verzió) telepítése nem sikerült.",
"ParentalRating": "Korhatár besorolás", "ParentalRating": "Korhatár besorolás",
"People": "Személyek", "People": "Személyek",
"Play": "Lejátszás", "Play": "Lejátszás",
@ -584,12 +584,12 @@
"Aired": "Adásban", "Aired": "Adásban",
"Albums": "Albumok", "Albums": "Albumok",
"AllChannels": "Minden csatorna", "AllChannels": "Minden csatorna",
"AllComplexFormats": "Minden összetett formátum (ASS, SSA, VOBSUB, PGS, SUB/IDX, stb.)", "AllComplexFormats": "Minden összetett formátum (ASS, SSA, VOBSUB, PGS, SUB, IDX)",
"AllowMediaConversion": "Média konvertálás engedélyezése", "AllowMediaConversion": "Média konvertálás engedélyezése",
"AllowMediaConversionHelp": "Add meg vagy tiltsd le a média konvertálás funkcióhoz való hozzáférést.", "AllowMediaConversionHelp": "Add meg vagy tiltsd le a média konvertálás funkcióhoz való hozzáférést.",
"AllowRemoteAccess": "Engedélyezze a távoli kapcsolatokat a Jellyfin szerverhez.", "AllowRemoteAccess": "Engedélyezze a távoli kapcsolatokat a Jellyfin szerverhez.",
"AllowRemoteAccessHelp": "Ha nincs bekapcsolva, minden távoli kapcsolat blokkolva lesz.", "AllowRemoteAccessHelp": "Ha nincs bekapcsolva, minden távoli kapcsolat blokkolva lesz.",
"AlwaysPlaySubtitles": "Mindig legyen felirat", "AlwaysPlaySubtitles": "Mindig jelenjen meg",
"AnyLanguage": "Bármelyik nyelv", "AnyLanguage": "Bármelyik nyelv",
"Anytime": "Bármikor", "Anytime": "Bármikor",
"AroundTime": "{0} körül", "AroundTime": "{0} körül",
@ -663,7 +663,7 @@
"Disconnect": "Szétkapcsol", "Disconnect": "Szétkapcsol",
"DisplayInMyMedia": "Megjelenítés a kezdőképernyőn", "DisplayInMyMedia": "Megjelenítés a kezdőképernyőn",
"DisplayInOtherHomeScreenSections": "Megjelenítés a kezdőképernyőn, mint például a Legújabb Média, és a Folyamatban lévő filmek", "DisplayInOtherHomeScreenSections": "Megjelenítés a kezdőképernyőn, mint például a Legújabb Média, és a Folyamatban lévő filmek",
"DisplayModeHelp": "Válaszd ki a Jellyfin-n futó képernyő típusát.", "DisplayModeHelp": "Válaszd ki a használni kívánt elrendezést.",
"DoNotRecord": "Ne rögzítsen", "DoNotRecord": "Ne rögzítsen",
"DownloadsValue": "{0} letöltés", "DownloadsValue": "{0} letöltés",
"DrmChannelsNotImported": "A csatornák DRM-el nem kerülnek importálásra.", "DrmChannelsNotImported": "A csatornák DRM-el nem kerülnek importálásra.",
@ -797,7 +797,7 @@
"HeaderSpecialEpisodeInfo": "Speciális epizód információ", "HeaderSpecialEpisodeInfo": "Speciális epizód információ",
"HeaderStartNow": "Indítás most", "HeaderStartNow": "Indítás most",
"HeaderStopRecording": "Felvétel leállítása", "HeaderStopRecording": "Felvétel leállítása",
"HeaderSubtitleAppearance": "Felirat megjelenés", "HeaderSubtitleAppearance": "Felirat kinézete",
"HeaderSubtitleProfile": "Felirat profil", "HeaderSubtitleProfile": "Felirat profil",
"HeaderSubtitleProfiles": "Feliratok profilok", "HeaderSubtitleProfiles": "Feliratok profilok",
"HeaderSubtitleProfilesHelp": "A feliratprofilok leírják a készülék által támogatott feliratformátumokat.", "HeaderSubtitleProfilesHelp": "A feliratprofilok leírják a készülék által támogatott feliratformátumokat.",
@ -1081,11 +1081,11 @@
"NoNewDevicesFound": "Nem található új eszköz. Új tuner hozzáadásához zárd be ezt a párbeszédablakot és add meg kézzel az eszköz adatait.", "NoNewDevicesFound": "Nem található új eszköz. Új tuner hozzáadásához zárd be ezt a párbeszédablakot és add meg kézzel az eszköz adatait.",
"NoNextUpItemsMessage": "Nem található. Kezdj el nézni műsorokat!", "NoNextUpItemsMessage": "Nem található. Kezdj el nézni műsorokat!",
"NoPluginConfigurationMessage": "Ez a bővítmény nem rendelkezik konfigurációs beállításokkal.", "NoPluginConfigurationMessage": "Ez a bővítmény nem rendelkezik konfigurációs beállításokkal.",
"NoSubtitles": "Nincs felirat", "NoSubtitles": "Nincs",
"NoSubtitlesHelp": "A feliratok alapértelmezés szerint nem lesznek betöltve. Lejátszás közben kézzel is bekapcsolhatók.", "NoSubtitlesHelp": "A feliratok alapértelmezés szerint nem lesznek betöltve. Lejátszás közben kézzel is bekapcsolhatók.",
"Off": "Ki", "Off": "Ki",
"OneChannel": "Egy csatorna", "OneChannel": "Egy csatorna",
"OnlyImageFormats": "Csak képformátumok (VOBSUB, PGS, SUB stb.)", "OnlyImageFormats": "Csak képformátumok (VOBSUB, PGS, SUB)",
"Option3D": "3D", "Option3D": "3D",
"OptionAlbum": "Album", "OptionAlbum": "Album",
"OptionAlbumArtist": "Album előadó", "OptionAlbumArtist": "Album előadó",
@ -1254,7 +1254,7 @@
"UserProfilesIntro": "A Jellyfin beépített támogatást tartalmaz a felhasználói profilokhoz lehetővé téve, hogy minden felhasználó rendelkezzen saját megjelenítési beállításokkal, lejátszási és szülői felügyelettel.", "UserProfilesIntro": "A Jellyfin beépített támogatást tartalmaz a felhasználói profilokhoz lehetővé téve, hogy minden felhasználó rendelkezzen saját megjelenítési beállításokkal, lejátszási és szülői felügyelettel.",
"ValueAlbumCount": "{0} album", "ValueAlbumCount": "{0} album",
"ValueConditions": "Feltételek: {0}", "ValueConditions": "Feltételek: {0}",
"ValueDiscNumber": "Lemez {0}", "ValueDiscNumber": "{0}. lemez",
"ValueMinutes": "{0} perc", "ValueMinutes": "{0} perc",
"ValueOneAlbum": "1 album", "ValueOneAlbum": "1 album",
"ValueOneEpisode": "1 epizód", "ValueOneEpisode": "1 epizód",
@ -1302,7 +1302,7 @@
"AllowOnTheFlySubtitleExtractionHelp": "A beágyazott feliratokat ki lehet nyerni a videókból és elküldeni az alkalmazásoknak sima szöveg formátumba, hogy ne legyen átkódolás. Néhány eszközön ez hosszú ideig is eltarthat, valamint a videó lejátszás megakadhat az eltávolítási folyamat futása közben. Ezt kikapcsolva a beágyazott feliratok videó átkódolással beégetésre kerülnek azon kliens eszközökre melyek nem támogatják a külső feliratokat.", "AllowOnTheFlySubtitleExtractionHelp": "A beágyazott feliratokat ki lehet nyerni a videókból és elküldeni az alkalmazásoknak sima szöveg formátumba, hogy ne legyen átkódolás. Néhány eszközön ez hosszú ideig is eltarthat, valamint a videó lejátszás megakadhat az eltávolítási folyamat futása közben. Ezt kikapcsolva a beágyazott feliratok videó átkódolással beégetésre kerülnek azon kliens eszközökre melyek nem támogatják a külső feliratokat.",
"Art": "ClearArt", "Art": "ClearArt",
"AuthProviderHelp": "Válaszd ki az azonosítási szolgáltatást amely ezen felhasználó jelszavának ellenőrzését valósítja meg.", "AuthProviderHelp": "Válaszd ki az azonosítási szolgáltatást amely ezen felhasználó jelszavának ellenőrzését valósítja meg.",
"BurnSubtitlesHelp": "Meghatározza, hogy a szervernek be kell-e égetnie a feliratot videó átkódolás esetén a felirat típusának függvényében. A beégetés elkerülésével a szerver teljesítménye javul. Válaszd az Auto lehetőséget a kép alapú feliratok (pl. VOBSUB, PGS, SUB/IDX, stb) és bizonyos ASS/SSA feliratok beégetéséhez.", "BurnSubtitlesHelp": "Meghatározza, hogy a szervernek be kell-e égetnie a feliratot videó átkódolás esetén a felirat típusának függvényében. Ennek elkerülésével a szerver teljesítménye javul. Válaszd az Auto lehetőséget a kép alapú feliratok (pl. VOBSUB, PGS, SUB/IDX, stb) és bizonyos ASS/SSA feliratok beégetéséhez.",
"ButtonAddScheduledTaskTrigger": "Vezérlő Hozzáadása", "ButtonAddScheduledTaskTrigger": "Vezérlő Hozzáadása",
"ButtonGuide": "Műsorújság", "ButtonGuide": "Műsorújság",
"ButtonRefreshGuideData": "Műsorújság Frissítése", "ButtonRefreshGuideData": "Műsorújság Frissítése",
@ -1415,7 +1415,7 @@
"OptionBlockChannelContent": "Internetes csatornatartalmak", "OptionBlockChannelContent": "Internetes csatornatartalmak",
"OptionBanner": "Banner", "OptionBanner": "Banner",
"OnlyForcedSubtitlesHelp": "Csak a kényszerítettnek jelölt feliratok fognak megjelenni.", "OnlyForcedSubtitlesHelp": "Csak a kényszerítettnek jelölt feliratok fognak megjelenni.",
"OnlyForcedSubtitles": "Csak kényszerített feliratok", "OnlyForcedSubtitles": "Csak kényszerített",
"Normal": "Normális", "Normal": "Normális",
"MusicVideo": "Videoklip", "MusicVideo": "Videoklip",
"MusicLibraryHelp": "Nézd meg a {0}zenék elnevezési útmutatóját{1}.", "MusicLibraryHelp": "Nézd meg a {0}zenék elnevezési útmutatóját{1}.",
@ -1470,9 +1470,32 @@
"ErrorPleaseSelectLineup": "Kérjük, válassz ki egy felhozatalt, és próbáld újra. Ha nem állnak rendelkezésre felsorolások, akkor ellenőrizd, hogy helyes-e felhasználóneved, jelszavad és irányítószámod.", "ErrorPleaseSelectLineup": "Kérjük, válassz ki egy felhozatalt, és próbáld újra. Ha nem állnak rendelkezésre felsorolások, akkor ellenőrizd, hogy helyes-e felhasználóneved, jelszavad és irányítószámod.",
"ErrorAddingListingsToSchedulesDirect": "Hiba történt a felhozatal hozzáadása közben a Schedules Direct fiókhoz. A Schedules Direct csak korlátozott számú fiók hozzáadását támogatja. Lehetséges, hogy be kell jelentkezned a Schedules Direct weboldalán és eltávolítani néhány más listát a fiókodról mielőtt továbblépsz.", "ErrorAddingListingsToSchedulesDirect": "Hiba történt a felhozatal hozzáadása közben a Schedules Direct fiókhoz. A Schedules Direct csak korlátozott számú fiók hozzáadását támogatja. Lehetséges, hogy be kell jelentkezned a Schedules Direct weboldalán és eltávolítani néhány más listát a fiókodról mielőtt továbblépsz.",
"DeviceAccessHelp": "Ez csak azokra az eszközökre alkalmazható, amelyek egyedileg vannak azonosítva és nem gátolják meg a böngészőből való elérést. A felhasználói eszközök kiszűrése meg fogja akadályozni az új eszközök használatát addig, amíg itt nem engedélyezed őket.", "DeviceAccessHelp": "Ez csak azokra az eszközökre alkalmazható, amelyek egyedileg vannak azonosítva és nem gátolják meg a böngészőből való elérést. A felhasználói eszközök kiszűrése meg fogja akadályozni az új eszközök használatát addig, amíg itt nem engedélyezed őket.",
"PlaybackErrorNoCompatibleStream": "Hiba történt a kliens felmérése közben és a szerver nem küld kompatibilis formátumot az eszközre.", "PlaybackErrorNoCompatibleStream": "Ez a kliens nem kompatibilis ezzel a médiával és a szerver nem tud kompatibilis streamet küldeni az eszközre.",
"AllowFfmpegThrottlingHelp": "Ha az átkódolás vagy remux eléggé előtöltődött a jelenlegi lejátszási pozícióhoz képest, ez megállítja a folyamatot, hogy kevesebb erőforrást vegyen igénybe. Ez akkor hasznos, ha ritkán ugrálsz előre a lejátszott videókban. Kapcsold ki, ha lejátszási problémákba ütközöl.", "AllowFfmpegThrottlingHelp": "Ha az átkódolás vagy remux eléggé előtöltődött a jelenlegi lejátszási pozícióhoz képest, ez megállítja a folyamatot, hogy kevesebb erőforrást vegyen igénybe. Ez akkor hasznos, ha ritkán ugrálsz előre a lejátszott videókban. Kapcsold ki, ha lejátszási problémákba ütközöl.",
"AllowFfmpegThrottling": "Átkódolás visszafogása", "AllowFfmpegThrottling": "Átkódolás visszafogása",
"PreferEmbeddedEpisodeInfosOverFileNames": "Inkább a beágyazott epizódokra vonatkozó információkat részesítse előnyben a fájlnevekkel szemben", "PreferEmbeddedEpisodeInfosOverFileNames": "Inkább a beágyazott epizódokra vonatkozó információkat részesítse előnyben a fájlnevekkel szemben",
"PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Ez a beágyazott metaadatok epizódinformációit használja, ha rendelkezésre állnak." "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Ez a beágyazott metaadatok epizódinformációit használja, ha rendelkezésre állnak.",
"OnApplicationStartup": "Az alkalmazás indításakor",
"EveryXHours": "{0} óránként",
"EveryHour": "Óránként",
"EveryXMinutes": "{0} percenként",
"OnWakeFromSleep": "Alvó módból visszatéréskor",
"WeeklyAt": "Minden {0} ekkor: {1}",
"DailyAt": "Naponta ekkor: {0}",
"LastSeen": "Utoljára elérhető {0}",
"PersonRole": "mint {0}",
"ListPaging": "{0}-{1} ennyiből: {2}",
"WriteAccessRequired": "A Jellyfin Szerver írási jogosultságot igényel ehhez a könyvtárhoz. Kérjük, ellenőrizd, hogy van-e jogod írni ide, majd próbáld újra.",
"PathNotFound": "Az elérési út nem található. Kérjük, ellenőrizd, hogy az elérési út megfelelő-e, majd próbáld újra.",
"Track": "Szám",
"Season": "Évad",
"Person": "Személy",
"OtherArtist": "Más előadók",
"Movie": "Film",
"Episode": "Epizód",
"ClientSettings": "Kliens beállítások",
"BoxSet": "Dobozos készlet",
"Artist": "Előadó",
"AlbumArtist": "Album előadó",
"Album": "Album"
} }

View file

@ -192,7 +192,7 @@
"AddToPlayQueue": "Tambah ke dalam antrean putar", "AddToPlayQueue": "Tambah ke dalam antrean putar",
"AddToCollection": "Tambah ke dalam koleksi", "AddToCollection": "Tambah ke dalam koleksi",
"AddItemToCollectionHelp": "Tambahkan item ke dalam koleksi melalui pencarian dan gunakan klik kanan atau ketuk menu untuk menambahkannya ke dalam koleksi.", "AddItemToCollectionHelp": "Tambahkan item ke dalam koleksi melalui pencarian dan gunakan klik kanan atau ketuk menu untuk menambahkannya ke dalam koleksi.",
"AccessRestrictedTryAgainLater": "Akses sedang dibatas. Silakan coba kembali nanti.", "AccessRestrictedTryAgainLater": "Akses sedang dibatasi. Silakan coba kembali nanti.",
"Absolute": "Mutlak", "Absolute": "Mutlak",
"Songs": "Lagu", "Songs": "Lagu",
"Playlists": "Daftar putar", "Playlists": "Daftar putar",

View file

@ -1470,5 +1470,6 @@
"AllowFfmpegThrottling": "Acceleratore Transcodifica", "AllowFfmpegThrottling": "Acceleratore Transcodifica",
"PreferEmbeddedEpisodeInfosOverFileNames": "Preferisci le informazioni incorporate nell'episodio rispetto ai nomi dei file", "PreferEmbeddedEpisodeInfosOverFileNames": "Preferisci le informazioni incorporate nell'episodio rispetto ai nomi dei file",
"PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Questo utilizza le informazioni dell'episodio provenienti dai metadata incorporati, se disponibili.", "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Questo utilizza le informazioni dell'episodio provenienti dai metadata incorporati, se disponibili.",
"ClientSettings": "Impostazioni del client" "ClientSettings": "Impostazioni del client",
"Album": "Album"
} }

View file

@ -256,7 +256,7 @@
"Images": "이미지", "Images": "이미지",
"ImportFavoriteChannelsHelp": "활성화 시, 튜너 장치에서 즐겨찾기로 표시된 채널만 불러옵니다.", "ImportFavoriteChannelsHelp": "활성화 시, 튜너 장치에서 즐겨찾기로 표시된 채널만 불러옵니다.",
"ImportMissingEpisodesHelp": "이 기능을 사용하면 누락 된 에피소드에 대한 정보가 Jellyfin 데이터베이스로 가져와 시즌 및 시리즈 내에서 표시됩니다. 이로 인해 상당히 긴 라이브러리 스캔이 발생할 수 있습니다.", "ImportMissingEpisodesHelp": "이 기능을 사용하면 누락 된 에피소드에 대한 정보가 Jellyfin 데이터베이스로 가져와 시즌 및 시리즈 내에서 표시됩니다. 이로 인해 상당히 긴 라이브러리 스캔이 발생할 수 있습니다.",
"InstallingPackage": "{0} 설치 중", "InstallingPackage": "{0} 설치 중 ( {1} 버전)",
"InstantMix": "인스턴트 믹스", "InstantMix": "인스턴트 믹스",
"ItemCount": "{0} 항목", "ItemCount": "{0} 항목",
"Label3DFormat": "3D 포맷:", "Label3DFormat": "3D 포맷:",
@ -295,7 +295,7 @@
"LabelCriticRating": "평론가 평점:", "LabelCriticRating": "평론가 평점:",
"LabelCurrentPassword": "현재 비밀번호:", "LabelCurrentPassword": "현재 비밀번호:",
"LabelCustomCertificatePath": "사용자 지정 SSL 인증서 경로:", "LabelCustomCertificatePath": "사용자 지정 SSL 인증서 경로:",
"LabelCustomCertificatePathHelp": "자기 소유의 SSL 인증서을 제공하십시오. PFX 파일 형식이어야 합니다.", "LabelCustomCertificatePathHelp": "커스텀 도메인에서 TLS를 지원할 수 있도록 인증서 및 개인키가 포함 된 PKCS #12 파일의 경로입니다.",
"LabelCustomCss": "사용자 지정 CSS:", "LabelCustomCss": "사용자 지정 CSS:",
"LabelCustomCssHelp": "사용자 정의 스타일링을 웹 인터페이스에 적용합니다.", "LabelCustomCssHelp": "사용자 정의 스타일링을 웹 인터페이스에 적용합니다.",
"LabelCustomDeviceDisplayName": "표시 이름:", "LabelCustomDeviceDisplayName": "표시 이름:",
@ -810,7 +810,7 @@
"AirDate": "방영 일자", "AirDate": "방영 일자",
"Aired": "방영됨", "Aired": "방영됨",
"Alerts": "알림", "Alerts": "알림",
"AllComplexFormats": "모든 복잡한 포맷 (ASS, SSA, VOBSUB, PGS, SUB/IDX 등)", "AllComplexFormats": "모든 복잡한 포맷 (ASS, SSA, VOBSUB, PGS, SUB, IDX)",
"AllLibraries": "모든 라이브러리", "AllLibraries": "모든 라이브러리",
"AllowMediaConversion": "미디어 변환 허용", "AllowMediaConversion": "미디어 변환 허용",
"AllowOnTheFlySubtitleExtraction": "실시간 자막 추출 허용", "AllowOnTheFlySubtitleExtraction": "실시간 자막 추출 허용",
@ -818,7 +818,7 @@
"AllowRemoteAccess": "이 Jellyfin 서버에 원격 접속을 허용합니다.", "AllowRemoteAccess": "이 Jellyfin 서버에 원격 접속을 허용합니다.",
"AllowRemoteAccessHelp": "체크 해제 시 모든 외부 접속은 차단됩니다.", "AllowRemoteAccessHelp": "체크 해제 시 모든 외부 접속은 차단됩니다.",
"AllowedRemoteAddressesHelp": "외부 접속을 허용할 IP 혹은 IP 넷마스크를 반점(,)으로 구분하여 입력하십시오. 공란일시, 모든 외부 접속이 허용됩니다.", "AllowedRemoteAddressesHelp": "외부 접속을 허용할 IP 혹은 IP 넷마스크를 반점(,)으로 구분하여 입력하십시오. 공란일시, 모든 외부 접속이 허용됩니다.",
"AlwaysPlaySubtitles": "항상 자막 표시", "AlwaysPlaySubtitles": "항상 표시",
"AlwaysPlaySubtitlesHelp": "오디오 언어를 불문하고 언어 설정에 적합한 자막을 불러옵니다.", "AlwaysPlaySubtitlesHelp": "오디오 언어를 불문하고 언어 설정에 적합한 자막을 불러옵니다.",
"AnyLanguage": "모든 언어", "AnyLanguage": "모든 언어",
"AroundTime": "대략 {0}", "AroundTime": "대략 {0}",
@ -1142,7 +1142,7 @@
"HeaderApiKeysHelp": "외부 애플리케이션은 Jellyfin 서버와 통신하기 위해 API키를 가지고 있어야 합니다. 키는 Jellyfin 계정으로 로그인하거나 수동으로 키를 부여하여 발급할 수 있습니다.", "HeaderApiKeysHelp": "외부 애플리케이션은 Jellyfin 서버와 통신하기 위해 API키를 가지고 있어야 합니다. 키는 Jellyfin 계정으로 로그인하거나 수동으로 키를 부여하여 발급할 수 있습니다.",
"HeaderAllowMediaDeletionFrom": "미디어 제거 허용", "HeaderAllowMediaDeletionFrom": "미디어 제거 허용",
"HardwareAccelerationWarning": "하드웨어 가속을 활성화하면 일부 환경에서 불안정해질 수 있습니다. 운영체제 및 비디오 드라이버가 최신 상태인지 확인하십시오. 이 기능을 활성화한 후 비디오를 재생하는 데 어려움이 있을 경우 설정을 다시 '사용 안 함'으로 변경하십시오.", "HardwareAccelerationWarning": "하드웨어 가속을 활성화하면 일부 환경에서 불안정해질 수 있습니다. 운영체제 및 비디오 드라이버가 최신 상태인지 확인하십시오. 이 기능을 활성화한 후 비디오를 재생하는 데 어려움이 있을 경우 설정을 다시 '사용 안 함'으로 변경하십시오.",
"GuestStar": "게스트 스타", "GuestStar": "게스트 출연",
"GroupBySeries": "시리즈별로 그룹화", "GroupBySeries": "시리즈별로 그룹화",
"Genre": "장르", "Genre": "장르",
"General": "일반", "General": "일반",
@ -1231,11 +1231,11 @@
"ConfigureDateAdded": "라이브러리 설정의 Jellyfin 서버 대시보드에서 추가된 날짜를 결정하는 방법 구성", "ConfigureDateAdded": "라이브러리 설정의 Jellyfin 서버 대시보드에서 추가된 날짜를 결정하는 방법 구성",
"EnableStreamLoopingHelp": "라이브 스트림에 몇 초의 데이터만 포함되어 있고 지속적으로 요청해야하는 경우, 이 옵션을 활성화하십시오. 필요하지 않은 경우, 이 기능을 사용하면 문제가 발생할 수 있습니다.", "EnableStreamLoopingHelp": "라이브 스트림에 몇 초의 데이터만 포함되어 있고 지속적으로 요청해야하는 경우, 이 옵션을 활성화하십시오. 필요하지 않은 경우, 이 기능을 사용하면 문제가 발생할 수 있습니다.",
"FolderTypeUnset": "혼합 콘텐츠", "FolderTypeUnset": "혼합 콘텐츠",
"BurnSubtitlesHelp": "자막 포맷에 따라 비디오를 변환할 때 서버에서 자막을 구워야 하는지를 결정합니다. 자막을 굽지 않으면 서버 성능이 향상됩니다. 이미지 기반 포맷(VOBSUB, PGS, SUB/IDX 등) 및 특정 ASS/SSA 자막을 구우려면 자동을 선택하십시오.", "BurnSubtitlesHelp": "영상을 트랜스코딩할 때 자막 포맷에 따라 서버에서 영상 안에 자막을 입힐지를 결정합니다. 영상에 자막을 입히지 않으면 서버 성능이 향상됩니다. 일부 ASS/SSA 자막을 포함하여 자막 포맷(VOBSUB, PGS, SUB/IDX 등)에 따라 자막을 영상에 입히려면 자동을 선택하십시오.",
"EnableNextVideoInfoOverlay": "재생 중에 다음 비디오 정보 표시", "EnableNextVideoInfoOverlay": "재생 중에 다음 비디오 정보 표시",
"EnablePhotosHelp": "이미지가 다른 미디어 파일과 함께 감지되어 표시됩니다.", "EnablePhotosHelp": "이미지가 다른 미디어 파일과 함께 감지되어 표시됩니다.",
"ButtonParentalControl": "자녀 보호", "ButtonParentalControl": "자녀 보호",
"DisplayModeHelp": "Jellyfin이 실행 중인 화면의 유형을 선택하십시오.", "DisplayModeHelp": "원하는 인터페이스 레이아웃 스타일을 선택하십시오.",
"DefaultSubtitlesHelp": "자막은 내장된 메타데이터에 있는 기본 플래그와 강제 플래그를 기반으로 불러옵니다. 언어 선호도는 여러 옵션을 사용할 수 있을 때 고려됩니다.", "DefaultSubtitlesHelp": "자막은 내장된 메타데이터에 있는 기본 플래그와 강제 플래그를 기반으로 불러옵니다. 언어 선호도는 여러 옵션을 사용할 수 있을 때 고려됩니다.",
"Disc": "디스크", "Disc": "디스크",
"EnableExternalVideoPlayersHelp": "비디오 재생을 시작할 때 외부 재생기 메뉴가 표시됩니다.", "EnableExternalVideoPlayersHelp": "비디오 재생을 시작할 때 외부 재생기 메뉴가 표시됩니다.",
@ -1342,7 +1342,7 @@
"LabelSkipIfGraphicalSubsPresent": "비디오에 내장 자막이 있으면 건너뛰기", "LabelSkipIfGraphicalSubsPresent": "비디오에 내장 자막이 있으면 건너뛰기",
"LabelSkipIfAudioTrackPresentHelp": "오디오 언어와 상관없이 모든 비디오가 자막을 갖추도록 하려면 이 항목을 체크하지 마십시오.", "LabelSkipIfAudioTrackPresentHelp": "오디오 언어와 상관없이 모든 비디오가 자막을 갖추도록 하려면 이 항목을 체크하지 마십시오.",
"LabelSelectFolderGroupsHelp": "체크되지 않은 폴더는 폴더 고유의 보기 방식으로 표시됩니다.", "LabelSelectFolderGroupsHelp": "체크되지 않은 폴더는 폴더 고유의 보기 방식으로 표시됩니다.",
"LabelSelectFolderGroups": "자동으로 이하의 폴더의 항목을 영화, 음악, TV 등의 보기 방식으로 정렬:", "LabelSelectFolderGroups": "자동으로 이하의 폴더의 항목을 영화, 음악, TV 와 같은 보기 방식으로 그룹화:",
"EnableFastImageFadeInHelp": "로드된 이미지에 더 빠른 페이드 인 효과를 적용", "EnableFastImageFadeInHelp": "로드된 이미지에 더 빠른 페이드 인 효과를 적용",
"EnableFastImageFadeIn": "빠른 이미지 페이드 인 효과", "EnableFastImageFadeIn": "빠른 이미지 페이드 인 효과",
"LabelScheduledTaskLastRan": "최근 실행: {0}, 소모시간: {1}.", "LabelScheduledTaskLastRan": "최근 실행: {0}, 소모시간: {1}.",
@ -1377,5 +1377,25 @@
"LabelEmbedAlbumArtDidlHelp": "일부 디바이스는 앨범아트를 얻을 때 이 방법을 선호합니다. 다른 디바이스에서는 실패할 수 있습니다.", "LabelEmbedAlbumArtDidlHelp": "일부 디바이스는 앨범아트를 얻을 때 이 방법을 선호합니다. 다른 디바이스에서는 실패할 수 있습니다.",
"LabelDefaultScreen": "기본 화면:", "LabelDefaultScreen": "기본 화면:",
"LabelDateTimeLocale": "날짜/시간 로케일:", "LabelDateTimeLocale": "날짜/시간 로케일:",
"XmlTvPathHelp": "XMLTV 파일을 저장할 경로를 설정합니다. Jellyfin은 이 파일을 읽어 주기적으로 변경 사항을 확인합니다. 파일 생성 및 파일 업데이트는 사용자가 수동으로 해야 합니다." "XmlTvPathHelp": "XMLTV 파일을 저장할 경로를 설정합니다. Jellyfin은 이 파일을 읽어 주기적으로 변경 사항을 확인합니다. 파일 생성 및 파일 업데이트는 사용자가 수동으로 해야 합니다.",
"MessageTheFollowingLocationWillBeRemovedFromLibrary": "다음 미디어 위치가 라이브러리에서 제거:",
"MessageReenableUser": "재활성화는 아래를 참조하십시오",
"MessagePluginConfigurationRequiresLocalAccess": "이 플러그인을 구성하려면 로컬 서버에 직접 로그인하십시오.",
"MessageNoCollectionsAvailable": "컬렉션을 사용하면 영화, 시리즈 및 앨범의 개인화 된 그룹을 즐길 수 있습니다. + 버튼을 클릭하여 컬렉션 만들기를 시작합니다.",
"LabelPlayerDimensions": "플레이어 넓이:",
"LabelParentNumber": "부모 번호:",
"LabelLineup": "라인업:",
"LabelDroppedFrames": "떨어진 프레임:",
"LabelDeinterlaceMethod": "디인터레이싱 방법:",
"LabelCustomDeviceDisplayNameHelp": "디바이스에서 보고 한 이름을 사용하려면 사용자 정의 표시 이름을 제공하거나 비워 두십시오.",
"Episode": "에피소드",
"EnableColorCodedBackgrounds": "색이 입혀진 배경",
"DropShadow": "하단 그림자",
"Depressed": "압축",
"DeinterlaceMethodHelp": "인터레이스 컨텐츠를 트랜스코딩 할 때 사용할 디인터레이싱 방법을 선택하십시오.",
"ClientSettings": "클라이언트 설정",
"BoxSet": "박스 세트",
"Artist": "아티스트",
"AlbumArtist": "앨범 아티스트",
"Album": "앨범"
} }

View file

@ -14,7 +14,7 @@
"Alerts": "Meldingen", "Alerts": "Meldingen",
"All": "Alle", "All": "Alle",
"AllChannels": "Alle kanalen", "AllChannels": "Alle kanalen",
"AllComplexFormats": "Alle complexe formaten (ASS, SSA, VOBSUB, PGS, SUB/IDX, etc.)", "AllComplexFormats": "Alle Complexe Formaten (ASS, SSA, VOBSUB, PGS, SUB, IDX, etc.)",
"AllEpisodes": "Alle afleveringen", "AllEpisodes": "Alle afleveringen",
"AllLanguages": "Alle talen", "AllLanguages": "Alle talen",
"AllLibraries": "Alle bibliotheken", "AllLibraries": "Alle bibliotheken",
@ -1461,5 +1461,7 @@
"TabStreaming": "Streamen", "TabStreaming": "Streamen",
"TabTrailers": "Trailers", "TabTrailers": "Trailers",
"OptionAuto": "Auto", "OptionAuto": "Auto",
"OptionProfileVideo": "Video" "OptionProfileVideo": "Video",
"AlbumArtist": "Album Artiest",
"Album": "Album"
} }

View file

@ -932,7 +932,7 @@
"Items": "Articole", "Items": "Articole",
"ItemCount": "{0} articole", "ItemCount": "{0} articole",
"InstantMix": "Mix instant", "InstantMix": "Mix instant",
"InstallingPackage": "Instalare {0}", "InstallingPackage": "Instalare {0} (versiune {1})",
"ImportFavoriteChannelsHelp": "Dacă este activat, vor fi importate numai canalele marcate ca preferate pe dispozitivul tuner.", "ImportFavoriteChannelsHelp": "Dacă este activat, vor fi importate numai canalele marcate ca preferate pe dispozitivul tuner.",
"Images": "Imagini", "Images": "Imagini",
"Identify": "Identifică", "Identify": "Identifică",
@ -1295,9 +1295,9 @@
"PasswordResetConfirmation": "Sigur doriți să resetați parola?", "PasswordResetConfirmation": "Sigur doriți să resetați parola?",
"PasswordResetComplete": "Parola a fost resetată.", "PasswordResetComplete": "Parola a fost resetată.",
"PasswordMatchError": "Confirmarea parolei și parola trebuie să corespundă.", "PasswordMatchError": "Confirmarea parolei și parola trebuie să corespundă.",
"PackageInstallFailed": "{0} instalare eșuată.", "PackageInstallFailed": "{0} (versiune{1}) instalare eșuată.",
"PackageInstallCompleted": "{0} instalare efectuată.", "PackageInstallCompleted": "{0} (versiune {1}) instalare efectuată.",
"PackageInstallCancelled": "{0} instalarea a fost anulată.", "PackageInstallCancelled": "{0} (versiune {1}) instalarea a fost anulată.",
"Overview": "Prezentare generală", "Overview": "Prezentare generală",
"OriginalAirDateValue": "Data inițială de emisie: {0}", "OriginalAirDateValue": "Data inițială de emisie: {0}",
"OptionWeekly": "Săptămânal", "OptionWeekly": "Săptămânal",
@ -1464,7 +1464,7 @@
"OptionForceRemoteSourceTranscoding": "Forțați transcodarea surselor media distante (cum ar fi LiveTV)", "OptionForceRemoteSourceTranscoding": "Forțați transcodarea surselor media distante (cum ar fi LiveTV)",
"NoCreatedLibraries": "Se pare că nu ați creat încă biblioteci. {0} Doriți să creați una acum? {1}", "NoCreatedLibraries": "Se pare că nu ați creat încă biblioteci. {0} Doriți să creați una acum? {1}",
"AskAdminToCreateLibrary": "Cereți unui administrator să creeze o bibliotecă.", "AskAdminToCreateLibrary": "Cereți unui administrator să creeze o bibliotecă.",
"PlaybackErrorNoCompatibleStream": "A apărut o problemă cu profilarea clientului, iar serverul nu trimite un format media compatibil.", "PlaybackErrorNoCompatibleStream": "Clientul nu este compatibil cu formatul media, iar serverul nu trimite un format media compatibil.",
"AllowFfmpegThrottlingHelp": "Când un transcod sau un remux se află destul de departe înainte de poziția actuală de redare, întrerupeți procesul, astfel încât să consume mai puține resurse. Acest lucru este cel mai util când priviți fără a derula des. Dezactivați acestă opțiune dacă întâmpinați probleme de redare.", "AllowFfmpegThrottlingHelp": "Când un transcod sau un remux se află destul de departe înainte de poziția actuală de redare, întrerupeți procesul, astfel încât să consume mai puține resurse. Acest lucru este cel mai util când priviți fără a derula des. Dezactivați acestă opțiune dacă întâmpinați probleme de redare.",
"AllowFfmpegThrottling": "Accelerare Transcod-uri", "AllowFfmpegThrottling": "Accelerare Transcod-uri",
"Track": "Cale", "Track": "Cale",
@ -1480,5 +1480,21 @@
"BoxSet": "Set de colecție", "BoxSet": "Set de colecție",
"Artist": "Artist", "Artist": "Artist",
"AlbumArtist": "Artistul albumului", "AlbumArtist": "Artistul albumului",
"Album": "Album" "Album": "Album",
"OnApplicationStartup": "La pornirea aplicației",
"EveryXHours": "La fiecare {0} ore",
"EveryHour": "În fiecare oră",
"EveryXMinutes": "La fiecare {0} minute",
"OnWakeFromSleep": "La trezire din somn",
"WeeklyAt": "{0} la {1}",
"DailyAt": "Zilnic la {0}",
"LastSeen": "Văzut ultima dată {0}",
"PersonRole": "ca {0}",
"ListPaging": "{0}-{1} din {2}",
"WriteAccessRequired": "Jellyfin Server necesită acces de scriere la acest folder. Vă rugăm să vă asigurați accesul la scriere și încercați din nou.",
"PathNotFound": "Calea nu a fost găsită. Vă rugăm să vă asigurați de validitatea căii și încercați din nou.",
"YadifBob": "Yadif Bob",
"Yadif": "Yadif",
"LabelDeinterlaceMethod": "Metoda de intercalare:",
"DeinterlaceMethodHelp": "Selectați metoda de intercalat pe care să o utilizați la transcodarea conținutului intercalat."
} }

View file

@ -5,14 +5,14 @@
"Albums": "Albumy", "Albums": "Albumy",
"All": "Všetko", "All": "Všetko",
"AllChannels": "Všetky kanály", "AllChannels": "Všetky kanály",
"AllComplexFormats": "Všetky komplexné formáty (ASS, SSA, VOBSUB, PGS, SUB/IDX, atď.)", "AllComplexFormats": "Všetky komplexné formáty (ASS, SSA, VOBSUB, PGS, SUB, IDX)",
"AllEpisodes": "Všetky epizódy", "AllEpisodes": "Všetky epizódy",
"AllLanguages": "Všetky jazyky", "AllLanguages": "Všetky jazyky",
"AllLibraries": "Všetky knižnice", "AllLibraries": "Všetky knižnice",
"AllowMediaConversion": "Povoliť konverziu médií", "AllowMediaConversion": "Povoliť konverziu médií",
"AllowRemoteAccess": "Povoliť vzdialené pripojenia k tomuto Jellyfin serveru.", "AllowRemoteAccess": "Povoliť vzdialené pripojenia k tomuto Jellyfin serveru.",
"AllowRemoteAccessHelp": "Nezaškrtnuté znamená, že všetky vzdialené pripojenia budú blokované.", "AllowRemoteAccessHelp": "Nezaškrtnuté znamená, že všetky vzdialené pripojenia budú blokované.",
"AlwaysPlaySubtitles": "Vždy zobraziť titulky", "AlwaysPlaySubtitles": "Vždy prehrať",
"AnyLanguage": "Akýkoľvek jazyk", "AnyLanguage": "Akýkoľvek jazyk",
"AroundTime": "Okolo {0}", "AroundTime": "Okolo {0}",
"Artists": "Umelci", "Artists": "Umelci",
@ -306,7 +306,7 @@
"Identify": "Identifikovať", "Identify": "Identifikovať",
"Images": "Obrázky", "Images": "Obrázky",
"ImportMissingEpisodesHelp": "Ak je možnosť povolená, informácie o chýbajúcich epizódach budú importované do Vašej Jellyfin databázy a budú zobrazené v sériách a seriáloch. Toto môže spôsobiť podstatne dlhšie skenovania knižníc.", "ImportMissingEpisodesHelp": "Ak je možnosť povolená, informácie o chýbajúcich epizódach budú importované do Vašej Jellyfin databázy a budú zobrazené v sériách a seriáloch. Toto môže spôsobiť podstatne dlhšie skenovania knižníc.",
"InstallingPackage": "Inštalujem {0}", "InstallingPackage": "Inštalujem {0} (verzia{1})",
"ItemCount": "{0} položiek", "ItemCount": "{0} položiek",
"Items": "Položky", "Items": "Položky",
"Kids": "Detské", "Kids": "Detské",
@ -578,12 +578,12 @@
"NoNextUpItemsMessage": "Nič nenájdené. Začnite pozerať vaše seriály!", "NoNextUpItemsMessage": "Nič nenájdené. Začnite pozerať vaše seriály!",
"NoPluginConfigurationMessage": "Tento zásuvný modul nemá žiadne nastavenia.", "NoPluginConfigurationMessage": "Tento zásuvný modul nemá žiadne nastavenia.",
"NoSubtitleSearchResultsFound": "Žiadne výsledky.", "NoSubtitleSearchResultsFound": "Žiadne výsledky.",
"NoSubtitles": "Žiadne titulky", "NoSubtitles": "Žiadne",
"None": "Žiadne", "None": "Žiadne",
"Normal": "Normálne", "Normal": "Normálne",
"NumLocationsValue": "{0} priečinkov", "NumLocationsValue": "{0} priečinkov",
"OneChannel": "Jeden kanál", "OneChannel": "Jeden kanál",
"OnlyForcedSubtitles": "Iba vynútené titulky", "OnlyForcedSubtitles": "Iba vynútené",
"OnlyForcedSubtitlesHelp": "Budú zobrazené iba titulky označené ako vynútené.", "OnlyForcedSubtitlesHelp": "Budú zobrazené iba titulky označené ako vynútené.",
"OptionAdminUsers": "Administrátori", "OptionAdminUsers": "Administrátori",
"OptionAllUsers": "Všetci používatelia", "OptionAllUsers": "Všetci používatelia",
@ -677,9 +677,9 @@
"OptionWeekly": "Týždenne", "OptionWeekly": "Týždenne",
"OriginalAirDateValue": "Pôvodný dátum vysielania: {0}", "OriginalAirDateValue": "Pôvodný dátum vysielania: {0}",
"Overview": "Prehľad", "Overview": "Prehľad",
"PackageInstallCancelled": "{0} inštalácia zrušená.", "PackageInstallCancelled": "{0} (verzia{1}) inštalácia zrušená.",
"PackageInstallCompleted": "{0} inštalácia dokončená.", "PackageInstallCompleted": "{0} (verzia{1}) inštalácia dokončená.",
"PackageInstallFailed": "{0} inštalácia zlyhala.", "PackageInstallFailed": "{0} (verzia {1}) inštalácia zlyhala.",
"ParentalRating": "Parental Rating", "ParentalRating": "Parental Rating",
"PasswordMatchError": "Heslo a potvrdenie hesla sa musia zhodovať.", "PasswordMatchError": "Heslo a potvrdenie hesla sa musia zhodovať.",
"PasswordResetComplete": "Heslo bolo obnovené.", "PasswordResetComplete": "Heslo bolo obnovené.",
@ -934,7 +934,7 @@
"DirectStreamHelp2": "Priame streamovanie súboru používa veľmi málo procesorového výkonu bez straty kvality videa.", "DirectStreamHelp2": "Priame streamovanie súboru používa veľmi málo procesorového výkonu bez straty kvality videa.",
"DirectStreaming": "Priame streamovanie", "DirectStreaming": "Priame streamovanie",
"DisplayMissingEpisodesWithinSeasonsHelp": "Toto musí byť povolené pre TV knižnice v nastavení servera.", "DisplayMissingEpisodesWithinSeasonsHelp": "Toto musí byť povolené pre TV knižnice v nastavení servera.",
"DisplayModeHelp": "Zvoľte typ obrazovky, na ktorej používate Jellyfin.", "DisplayModeHelp": "Vyberte štýl layoutu, ktorý chcete pre rozhranie.",
"EnableCinemaMode": "Kino režim", "EnableCinemaMode": "Kino režim",
"EnableNextVideoInfoOverlay": "Zobraziť informácie o nasledujúcom videu počas prehrávania", "EnableNextVideoInfoOverlay": "Zobraziť informácie o nasledujúcom videu počas prehrávania",
"EnableNextVideoInfoOverlayHelp": "Na konci videa sa zobrazia informácie o nasledujúcom videu v aktuálnom playliste.", "EnableNextVideoInfoOverlayHelp": "Na konci videa sa zobrazia informácie o nasledujúcom videu v aktuálnom playliste.",
@ -1036,7 +1036,7 @@
"OptionEnableForAllTuners": "Povoliť pre všetky tunery", "OptionEnableForAllTuners": "Povoliť pre všetky tunery",
"OptionEnableExternalContentInSuggestions": "Povoliť externý obsah v návrhoch", "OptionEnableExternalContentInSuggestions": "Povoliť externý obsah v návrhoch",
"OptionBlockChannelContent": "Obsah internetového kanála", "OptionBlockChannelContent": "Obsah internetového kanála",
"OnlyImageFormats": "Iba obrazové formáty (VOBSUB, PGS, SUB, atď)", "OnlyImageFormats": "Iba obrazové formáty (VOBSUB, PGS, SUB)",
"Off": "Vypnuté", "Off": "Vypnuté",
"MusicVideo": "Videoklip", "MusicVideo": "Videoklip",
"MusicArtist": "Interpret", "MusicArtist": "Interpret",
@ -1180,7 +1180,7 @@
"CancelSeries": "Ukončiť seriál", "CancelSeries": "Ukončiť seriál",
"ButtonSplit": "Rozdeliť", "ButtonSplit": "Rozdeliť",
"ButtonAddImage": "Pridať obrázok", "ButtonAddImage": "Pridať obrázok",
"BurnSubtitlesHelp": "Určuje, či má server vypaľovať titulky počas prevodu videa v závislosti na formáte tituliek. Vynechanie tejto možnosti výrazne zvýši výkon serveru. Vyberte možnosť Auto, pokiaľ chcete vypalovať do obrazu titulky v grafickom formáte (VOBSUB, PGS, SUB/IDX, atď.) a niektoré ASS/SSA titulky.", "BurnSubtitlesHelp": "Určuje, či má server vpáliť titulky počas transkódovania videa. Vynechanie tejto možnosti výrazne zvýši výkon. Vyberte možnosť Auto, pokiaľ chcete vpáliť do obrazu titulky v grafickom formáte (VOBSUB, PGS, SUB, IDX) a niektoré ASS alebo SSA titulky.",
"BrowsePluginCatalogMessage": "Prehliadnite si náš katalóg dostupných zásuvných modulov.", "BrowsePluginCatalogMessage": "Prehliadnite si náš katalóg dostupných zásuvných modulov.",
"Browse": "Prechádzať", "Browse": "Prechádzať",
"Blacklist": "Blacklist", "Blacklist": "Blacklist",
@ -1466,10 +1466,37 @@
"OptionForceRemoteSourceTranscoding": "Vynútiť transkódovanie vzdialených mediálnych zdrojov (ako napr. živá TV)", "OptionForceRemoteSourceTranscoding": "Vynútiť transkódovanie vzdialených mediálnych zdrojov (ako napr. živá TV)",
"NoCreatedLibraries": "Vyzerá to tak, že ste zatiaľ nevytvorili žiadnu knižnicu. {0}Chceli by ste nejakú vytvoriť teraz?{1}", "NoCreatedLibraries": "Vyzerá to tak, že ste zatiaľ nevytvorili žiadnu knižnicu. {0}Chceli by ste nejakú vytvoriť teraz?{1}",
"AskAdminToCreateLibrary": "Pokiaľ chcete vytvoriť knižnicu, musíte sa spýtať administrátora.", "AskAdminToCreateLibrary": "Pokiaľ chcete vytvoriť knižnicu, musíte sa spýtať administrátora.",
"PlaybackErrorNoCompatibleStream": "Nastal problém s profilom klienta a server preto neposiela kompatibilný mediálny formát.", "PlaybackErrorNoCompatibleStream": "Tento klient nie je kompatibilný s médiom a server neposiela kompatibilný mediálny formát.",
"AllowFfmpegThrottlingHelp": "Keď sa transkódovanie alebo remuxovanie dostane do bodu, kedy je dostatočne vopred voči súčasnej polohe prehrávania, pozastaví proces aby spotrebovával menej zdrojov. Toto je najviac užitočné, keď sa pozerá obsah bez pretáčania. Vypnite túto možnosť, pokiaľ má vaše prehrávanie problémy.", "AllowFfmpegThrottlingHelp": "Keď sa transkódovanie alebo remuxovanie dostane do bodu, kedy je dostatočne vopred voči súčasnej polohe prehrávania, pozastaví proces aby spotrebovával menej zdrojov. Toto je najviac užitočné, keď sa pozerá obsah bez pretáčania. Vypnite túto možnosť, pokiaľ má vaše prehrávanie problémy.",
"AllowFfmpegThrottling": "Obmedzenie transkódovania", "AllowFfmpegThrottling": "Obmedzenie transkódovania",
"PreferEmbeddedEpisodeInfosOverFileNames": "Preferovať vložené informácie o epizóde pred názvom súboru", "PreferEmbeddedEpisodeInfosOverFileNames": "Preferovať vložené informácie o epizóde pred názvom súboru",
"PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Toto využíva informácie o epizóde z vložených metadát, pokiaľ sú dostupne.", "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Toto využíva informácie o epizóde z vložených metadát, pokiaľ sú dostupne.",
"ClientSettings": "Nastavenie klienta" "ClientSettings": "Nastavenie klienta",
"Album": "Album",
"DeinterlaceMethodHelp": "Vyberte metódu odstránenia prekladania obrazu videa pri transkódovaní prekladaného obsahu.",
"OnApplicationStartup": "Pri spustení aplikácie",
"EveryXHours": "Každých {0} hodín",
"EveryHour": "Každú hodinu",
"EveryXMinutes": "Každých {0} minút",
"OnWakeFromSleep": "Pri prebúdzaní zo spánku",
"WeeklyAt": "{0}s na {1}",
"DailyAt": "Denne o {0}",
"LastSeen": "Naposledy videný {0}",
"PersonRole": "ako {0}",
"ListPaging": "{0}-{1} z {2}",
"WriteAccessRequired": "Jellyfin Server vyžaduje práva na zapisovanie do tohoto priečinku. Prosím, uistite sa že má práva na zapisovanie a skúste to znova.",
"PathNotFound": "Táto cesta nebola nájdená. Prosím, uistite sa že cesta je správna a skúste to znovu.",
"YadifBob": "Yadif Bob",
"Yadif": "Yadif",
"Track": "Stopa",
"Season": "Séria",
"ReleaseGroup": "Vydavateľ",
"Person": "Osoba",
"OtherArtist": "Ostatný umelci",
"Movie": "FIlm",
"LabelDeinterlaceMethod": "Metóda odstránenia prekladaného videa:",
"Episode": "Epizóda",
"BoxSet": "Box Set",
"Artist": "Umelec",
"AlbumArtist": "Umelec albumu"
} }

View file

@ -95,5 +95,6 @@
"AllChannels": "Сви канали", "AllChannels": "Сви канали",
"All": "Све", "All": "Све",
"Alerts": "Упозорења", "Alerts": "Упозорења",
"Aired": "Емитовано" "Aired": "Емитовано",
"Absolute": "Апсолутно"
} }

View file

@ -1,8 +1,8 @@
{ {
"AccessRestrictedTryAgainLater": "För närvarande är åtkomst begränsad. Försök igen senare.", "AccessRestrictedTryAgainLater": "För närvarande är åtkomsten begränsad. Försök igen senare.",
"Actor": "Skådespelare", "Actor": "Skådespelare",
"Add": "Lägg till", "Add": "Lägg till",
"AddItemToCollectionHelp": "Lägg till objekt till samlingar genom att först söka efter dem och sen högerklicka eller tappa upp menyn för att lägga till dem.", "AddItemToCollectionHelp": "Lägg till objekt till samlingar genom att söka efter dem och använda deras högerklick- eller knack/tryck-meny för att lägga till dem.",
"AddToCollection": "Lägg till i samling", "AddToCollection": "Lägg till i samling",
"AddToPlayQueue": "Lägg till i spelkö", "AddToPlayQueue": "Lägg till i spelkö",
"AddToPlaylist": "Lägg till i spellista", "AddToPlaylist": "Lägg till i spellista",
@ -24,7 +24,7 @@
"AllowRemoteAccessHelp": "Om avaktiverat så blockeras alla fjärranslutningar.", "AllowRemoteAccessHelp": "Om avaktiverat så blockeras alla fjärranslutningar.",
"AlwaysPlaySubtitles": "Visa alltid undertexter", "AlwaysPlaySubtitles": "Visa alltid undertexter",
"AlwaysPlaySubtitlesHelp": "Undertexter på det önskade språket kommer att laddas oavsett ljudspårets språk.", "AlwaysPlaySubtitlesHelp": "Undertexter på det önskade språket kommer att laddas oavsett ljudspårets språk.",
"AnyLanguage": "Vilket språk som helst", "AnyLanguage": "Alla språk",
"Anytime": "När som helst", "Anytime": "När som helst",
"AroundTime": "Runt {0}", "AroundTime": "Runt {0}",
"Art": "Grafik", "Art": "Grafik",
@ -46,7 +46,7 @@
"BoxRear": "Omslag (baksida)", "BoxRear": "Omslag (baksida)",
"Browse": "Bläddra", "Browse": "Bläddra",
"BrowsePluginCatalogMessage": "Besök katalogen för att se tillgängliga tillägg.", "BrowsePluginCatalogMessage": "Besök katalogen för att se tillgängliga tillägg.",
"BurnSubtitlesHelp": "Avgör ifall servern ska \"bränna in\" undertexterna under videokonverteringen, beroende på undertextsformatet. Att undvika inbränning av undertexter kommer att förbättra prestandan på servern. Välj Automatisk för att bränna bild-baserade formats (ex. VOBSUB, PGS, SUB/IDX, etc.) och vissa ASS/SSA undertexter.", "BurnSubtitlesHelp": "Avgör ifall servern ska \"bränna in\" undertexterna under transkodning. Att undvika detta förbättrar prestandan avsevärt. Välj \"Automatisk\" för att bränna bild-baserade format (ex. VOBSUB, PGS, SUB/IDX, etc.) och vissa ASS/SSA-undertexter.",
"ButtonAdd": "Lägg till", "ButtonAdd": "Lägg till",
"ButtonAddMediaLibrary": "Lägg till mediabibliotek", "ButtonAddMediaLibrary": "Lägg till mediabibliotek",
"ButtonAddScheduledTaskTrigger": "Lägg till utlösare", "ButtonAddScheduledTaskTrigger": "Lägg till utlösare",
@ -173,7 +173,7 @@
"DisplayInOtherHomeScreenSections": "Visa sektioner på hemskärmen som till exempel senast media och fortsätt kolla på", "DisplayInOtherHomeScreenSections": "Visa sektioner på hemskärmen som till exempel senast media och fortsätt kolla på",
"DisplayMissingEpisodesWithinSeasons": "Visa saknade avsnitt i säsonger", "DisplayMissingEpisodesWithinSeasons": "Visa saknade avsnitt i säsonger",
"DisplayMissingEpisodesWithinSeasonsHelp": "Detta måste också vara aktiverat för TV-bibliotek i serverkonfigurationen.", "DisplayMissingEpisodesWithinSeasonsHelp": "Detta måste också vara aktiverat för TV-bibliotek i serverkonfigurationen.",
"DisplayModeHelp": "Välj vilken typ av skärm som du kör Jellyfin på.", "DisplayModeHelp": "Välj vilken layout du vill använda i gränssnittet.",
"DoNotRecord": "Spela inte in", "DoNotRecord": "Spela inte in",
"Down": "Ner", "Down": "Ner",
"Download": "Ladda ned", "Download": "Ladda ned",
@ -450,7 +450,7 @@
"Images": "Bilder", "Images": "Bilder",
"ImportFavoriteChannelsHelp": "Aktivera för att endast importera kanaler som är märkta som favoriter på den här TV-mottagaren.", "ImportFavoriteChannelsHelp": "Aktivera för att endast importera kanaler som är märkta som favoriter på den här TV-mottagaren.",
"ImportMissingEpisodesHelp": "Om aktiverat importeras information om saknade episoder till din Jellyfin-databas och visas i seriesäsongerna. Detta kan innebära längre tidsåtgång för biblioteksskanningar.", "ImportMissingEpisodesHelp": "Om aktiverat importeras information om saknade episoder till din Jellyfin-databas och visas i seriesäsongerna. Detta kan innebära längre tidsåtgång för biblioteksskanningar.",
"InstallingPackage": "Installerar {0}", "InstallingPackage": "Installerar {0} (version {1})",
"InstantMix": "Omedelbar mix", "InstantMix": "Omedelbar mix",
"ItemCount": "{0} objekt", "ItemCount": "{0} objekt",
"Items": "Objekt", "Items": "Objekt",
@ -900,7 +900,7 @@
"OneChannel": "En kanal", "OneChannel": "En kanal",
"OnlyForcedSubtitles": "Endast tvingande undertexter", "OnlyForcedSubtitles": "Endast tvingande undertexter",
"OnlyForcedSubtitlesHelp": "Endast undertexter markerade som tvingande kommer att laddas.", "OnlyForcedSubtitlesHelp": "Endast undertexter markerade som tvingande kommer att laddas.",
"OnlyImageFormats": "Endast image-format (VOBSUB, PGS, SUB, etc)", "OnlyImageFormats": "Endast bildbaserade format (VOBSUB, PGS, SUB, etc)",
"OptionAdminUsers": "Administratörer", "OptionAdminUsers": "Administratörer",
"OptionAlbumArtist": "Albumartist", "OptionAlbumArtist": "Albumartist",
"OptionAllUsers": "Alla användare", "OptionAllUsers": "Alla användare",
@ -1029,9 +1029,9 @@
"OptionWeekly": "Varje vecka", "OptionWeekly": "Varje vecka",
"OriginalAirDateValue": "Ursprungligt sändningsdatum: {0}", "OriginalAirDateValue": "Ursprungligt sändningsdatum: {0}",
"Overview": "Översikt", "Overview": "Översikt",
"PackageInstallCancelled": "Installationen av {0} avbröts.", "PackageInstallCancelled": "Installationen av {0} (version {1}) avbröts.",
"PackageInstallCompleted": "Installationen av {0} slutfördes.", "PackageInstallCompleted": "Installationen av {0} (version {1}) slutfördes.",
"PackageInstallFailed": "Installationen av {0} misslyckades.", "PackageInstallFailed": "Installationen av {0} (version {1}) misslyckades.",
"ParentalRating": "Parental Rating", "ParentalRating": "Parental Rating",
"PasswordMatchError": "Lösenordet och bekräftelsen måste överensstämma.", "PasswordMatchError": "Lösenordet och bekräftelsen måste överensstämma.",
"PasswordResetComplete": "Lösenordet har återställts.", "PasswordResetComplete": "Lösenordet har återställts.",
@ -1465,7 +1465,29 @@
"LabelTranscodingFramerate": "Omkodning framerate:", "LabelTranscodingFramerate": "Omkodning framerate:",
"LabelTranscodes": "Omkodningar:", "LabelTranscodes": "Omkodningar:",
"LabelTranscodePath": "Omkodning sökväg:", "LabelTranscodePath": "Omkodning sökväg:",
"PlaybackErrorNoCompatibleStream": "Klienten kunde inte identifieras och servern skickar inte ett kompatibelt medieformat.", "PlaybackErrorNoCompatibleStream": "Klienten är inte kompatibel med mediaformatet och servern skickar inte ett kompatibelt medieformat.",
"AllowFfmpegThrottlingHelp": "När omkodningen går uppspelningen långt i förväg pausas den tills vidare för att spara resurser. Detta fungerar bäst när du kollar utan att spola mycket; stäng av ifall spelaren krånglar.", "AllowFfmpegThrottlingHelp": "När omkodningen går uppspelningen långt i förväg pausas den tills vidare för att spara resurser. Detta fungerar bäst när du kollar utan att spola mycket; stäng av ifall spelaren krånglar.",
"AllowFfmpegThrottling": "Begränsad omkodning" "AllowFfmpegThrottling": "Begränsad omkodning",
"Album": "Album",
"EveryXHours": "Varje {0} timmar",
"EveryHour": "Varje timme",
"EveryXMinutes": "Varje {0} minut(er)",
"OnApplicationStartup": "Vid programstart",
"DailyAt": "Dagligen vid {0}",
"PersonRole": "som {0}",
"ListPaging": "{0}-{1} av {2}",
"WriteAccessRequired": "Jellyfin Server kräver skrivrättigheter till denna katalog. Säkerställ skrivrättigheter och försök igen.",
"PathNotFound": "Sökvägen hittades inte. Säkerställ att sökvägen är korrekt och försök igen.",
"Track": "Spår",
"Season": "Säsong",
"ReleaseGroup": "Releasegrupp",
"PreferEmbeddedEpisodeInfosOverFileNames": "Föredra inbäddad avsnittsinformation före filnamn",
"PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Detta använder avsnittets information från inbäddad metadata om tillgängligt.",
"Person": "Person",
"OtherArtist": "Annan artist",
"Movie": "Film",
"Episode": "Avsnitt",
"ClientSettings": "Klientinställningar",
"BoxSet": "Samlingsbox",
"Artist": "Artist"
} }

View file

@ -415,7 +415,7 @@
"DefaultSubtitlesHelp": "Altyazılar, gömülü meta verilerdeki varsayılan ve zorunlu bayraklara göre yüklenir. Birden fazla seçenek olduğunda dil tercihleri göz önünde bulundurulur.", "DefaultSubtitlesHelp": "Altyazılar, gömülü meta verilerdeki varsayılan ve zorunlu bayraklara göre yüklenir. Birden fazla seçenek olduğunda dil tercihleri göz önünde bulundurulur.",
"DeleteDeviceConfirmation": "Bu cihazı silmek istediğinden emin misin? Bir kullanıcı bir sonraki oturum açışında yeniden görünecektir.", "DeleteDeviceConfirmation": "Bu cihazı silmek istediğinden emin misin? Bir kullanıcı bir sonraki oturum açışında yeniden görünecektir.",
"DisplayMissingEpisodesWithinSeasons": "Sezonlardaki eksik bölümleri görüntüleme", "DisplayMissingEpisodesWithinSeasons": "Sezonlardaki eksik bölümleri görüntüleme",
"AlwaysPlaySubtitles": "Her zaman altyazıları oynat", "AlwaysPlaySubtitles": "Altyazıları her zaman oynat",
"CopyStreamURLSuccess": "URL başarıyla kopyalandı.", "CopyStreamURLSuccess": "URL başarıyla kopyalandı.",
"DateAdded": "Ekleme Tarihi", "DateAdded": "Ekleme Tarihi",
"DatePlayed": "Oynanan tarih", "DatePlayed": "Oynanan tarih",
@ -710,5 +710,7 @@
"OptionNone": "Hiçbiri", "OptionNone": "Hiçbiri",
"None": "Hiçbiri", "None": "Hiçbiri",
"HeaderNavigation": "Navigasyon", "HeaderNavigation": "Navigasyon",
"AllowFfmpegThrottling": "Video Kodlamasını Limitle" "AllowFfmpegThrottling": "Video Kodlamasını Limitle",
"Artist": "Oyuncu",
"Album": "Albüm"
} }

View file

@ -454,7 +454,7 @@
"Images": "图片", "Images": "图片",
"ImportFavoriteChannelsHelp": "如果启用,只有在协调器设备中被标记为我的最爱的频道才会被导入。", "ImportFavoriteChannelsHelp": "如果启用,只有在协调器设备中被标记为我的最爱的频道才会被导入。",
"ImportMissingEpisodesHelp": "如果启用,会将缺少的剧集信息导入到你的 Jellyfin 数据库并分季分剧显示。可能会大大延长媒体库扫描时间。", "ImportMissingEpisodesHelp": "如果启用,会将缺少的剧集信息导入到你的 Jellyfin 数据库并分季分剧显示。可能会大大延长媒体库扫描时间。",
"InstallingPackage": "正在安装 {0}", "InstallingPackage": "正在安装 {0}(版本 {1}",
"InstantMix": "即时混音", "InstantMix": "即时混音",
"ItemCount": "{0} 项", "ItemCount": "{0} 项",
"Kids": "儿童", "Kids": "儿童",
@ -1066,9 +1066,9 @@
"OptionWeekly": "每周", "OptionWeekly": "每周",
"OriginalAirDateValue": "首映日期:{0}", "OriginalAirDateValue": "首映日期:{0}",
"Overview": "概述", "Overview": "概述",
"PackageInstallCancelled": "{0} 安装被取消。", "PackageInstallCancelled": "{0}(版本 {1}安装被取消。",
"PackageInstallCompleted": "{0} 安装完成。", "PackageInstallCompleted": "{0}(版本 {1}安装完成。",
"PackageInstallFailed": "{0} 安装失败。", "PackageInstallFailed": "{0}(版本 {1}安装失败。",
"ParentalRating": "家长分级", "ParentalRating": "家长分级",
"PasswordMatchError": "密码和确认密码必须匹配。", "PasswordMatchError": "密码和确认密码必须匹配。",
"PasswordResetComplete": "密码已重置。", "PasswordResetComplete": "密码已重置。",
@ -1470,7 +1470,7 @@
"OptionForceRemoteSourceTranscoding": "强制远程转码(像电视直播一样)", "OptionForceRemoteSourceTranscoding": "强制远程转码(像电视直播一样)",
"NoCreatedLibraries": "看上去您还未创建任何资料库。{0} 您想现在创建一个吗? {1}", "NoCreatedLibraries": "看上去您还未创建任何资料库。{0} 您想现在创建一个吗? {1}",
"AskAdminToCreateLibrary": "请联系管理员以创建一个新的资料库。", "AskAdminToCreateLibrary": "请联系管理员以创建一个新的资料库。",
"PlaybackErrorNoCompatibleStream": "客户端配置文件存在问题,服务器未发送兼容的媒体格式。", "PlaybackErrorNoCompatibleStream": "该客户端与媒体不兼容,服务器未发送兼容的媒体格式。",
"AllowFfmpegThrottlingHelp": "当转码或者再封装的进度距离当前播放进度足够远时,暂停这个过程以减少资源消耗。当观看视频时不经常调整播放进度的情况下,这个功能将非常有用。如果你遇到了播放问题,请关闭这个选项。", "AllowFfmpegThrottlingHelp": "当转码或者再封装的进度距离当前播放进度足够远时,暂停这个过程以减少资源消耗。当观看视频时不经常调整播放进度的情况下,这个功能将非常有用。如果你遇到了播放问题,请关闭这个选项。",
"AllowFfmpegThrottling": "限制转码速度", "AllowFfmpegThrottling": "限制转码速度",
"PreferEmbeddedEpisodeInfosOverFileNames": "优先使用内置的剧集信息而不是文件名", "PreferEmbeddedEpisodeInfosOverFileNames": "优先使用内置的剧集信息而不是文件名",
@ -1486,5 +1486,21 @@
"BoxSet": "套装", "BoxSet": "套装",
"Artist": "艺术家", "Artist": "艺术家",
"AlbumArtist": "专辑艺术家", "AlbumArtist": "专辑艺术家",
"Album": "专辑" "Album": "专辑",
"ListPaging": "{2} 的 {0}-{1}",
"WeeklyAt": "每周第 {0} 天的 {1}",
"OnWakeFromSleep": "当从睡眠中唤醒时",
"DailyAt": "每天的 {0}",
"LastSeen": "上次观看 {0}",
"PersonRole": "作为 {0}",
"OnApplicationStartup": "当应用启动时",
"EveryXHours": "每 {0} 小时",
"EveryHour": "每小时",
"EveryXMinutes": "每 {0} 分钟",
"WriteAccessRequired": "Jellyfin 服务端需要此文件夹的写入权限。请确认是否拥有写入权限并重试。",
"PathNotFound": "无法找到此路径。请确认路径有效并重试。",
"YadifBob": "Yadif Bob",
"Yadif": "Yadif",
"LabelDeinterlaceMethod": "反交错方法:",
"DeinterlaceMethodHelp": "选择对隔行扫描内容进行转码时所用的反交错方法。"
} }

View file

@ -13,7 +13,7 @@ module.exports = merge(common, {
rules: [ rules: [
{ {
test: /\.js$/, test: /\.js$/,
exclude: /node_modules/, exclude: /node_modules[\\/](?!query-string)/,
loader: "babel-loader" loader: "babel-loader"
}, },
{ {

View file

@ -8,7 +8,7 @@ module.exports = merge(common, {
rules: [ rules: [
{ {
test: /\.js$/, test: /\.js$/,
exclude: /node_modules/, exclude: /node_modules[\\/](?!query-string)/,
loader: "babel-loader" loader: "babel-loader"
}, },
{ {

View file

@ -2362,6 +2362,10 @@ class-utils@^0.3.5:
isobject "^3.0.0" isobject "^3.0.0"
static-extend "^0.1.1" static-extend "^0.1.1"
"classlist.js@https://github.com/eligrey/classList.js/archive/1.2.20180112.tar.gz":
version "1.2.20180112"
resolved "https://github.com/eligrey/classList.js/archive/1.2.20180112.tar.gz#9c7ab3ccdbde5c940f6f26f8fc59bfb6bc813bc4"
clean-css@4.2.x, clean-css@^4.2.3: clean-css@4.2.x, clean-css@^4.2.3:
version "4.2.3" version "4.2.3"
resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78"
@ -6743,6 +6747,10 @@ levn@^0.3.0, levn@~0.3.0:
version "4.0.0" version "4.0.0"
resolved "https://github.com/jellyfin/JavascriptSubtitlesOctopus#7e6b75dcab9f7dad12719983510d05242803707c" resolved "https://github.com/jellyfin/JavascriptSubtitlesOctopus#7e6b75dcab9f7dad12719983510d05242803707c"
"libass-wasm@https://github.com/jellyfin/JavascriptSubtitlesOctopus#4.0.0-jf-cordova":
version "4.0.0"
resolved "https://github.com/jellyfin/JavascriptSubtitlesOctopus#b38056588bfaebc18a8353cb1757de0a815ac879"
liftoff@^3.1.0: liftoff@^3.1.0:
version "3.1.0" version "3.1.0"
resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-3.1.0.tgz#c9ba6081f908670607ee79062d700df062c52ed3" resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-3.1.0.tgz#c9ba6081f908670607ee79062d700df062c52ed3"