mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
Merge remote-tracking branch 'origin/master' into no-limits
This commit is contained in:
commit
6d75c48496
92 changed files with 1501 additions and 961 deletions
|
@ -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:
|
||||||
|
@ -95,7 +91,7 @@ jobs:
|
||||||
displayName: 'Install Dependencies'
|
displayName: 'Install Dependencies'
|
||||||
condition: ne(variables.CACHE_RESTORED, 'true')
|
condition: ne(variables.CACHE_RESTORED, 'true')
|
||||||
|
|
||||||
- script: 'yarn run lint'
|
- script: 'yarn run lint --quiet'
|
||||||
displayName: 'Run ESLint'
|
displayName: 'Run ESLint'
|
||||||
|
|
||||||
- script: 'yarn run stylelint'
|
- script: 'yarn run stylelint'
|
||||||
|
|
|
@ -1,21 +1,31 @@
|
||||||
env:
|
env:
|
||||||
es6: true
|
|
||||||
browser: true
|
|
||||||
amd: true
|
amd: true
|
||||||
|
browser: true
|
||||||
|
es6: true
|
||||||
|
es2017: true
|
||||||
|
es2020: true
|
||||||
|
|
||||||
parserOptions:
|
parserOptions:
|
||||||
ecmaVersion: 6
|
ecmaVersion: 2020
|
||||||
sourceType: module
|
sourceType: module
|
||||||
ecmaFeatures:
|
ecmaFeatures:
|
||||||
impliedStrict: true
|
impliedStrict: true
|
||||||
|
|
||||||
|
plugins:
|
||||||
|
- promise
|
||||||
|
- import
|
||||||
|
- eslint-comments
|
||||||
|
|
||||||
|
extends:
|
||||||
|
- eslint:recommended
|
||||||
|
- plugin:promise/recommended
|
||||||
|
- plugin:import/errors
|
||||||
|
- plugin:import/warnings
|
||||||
|
- plugin:eslint-comments/recommended
|
||||||
|
|
||||||
globals:
|
globals:
|
||||||
# New browser globals
|
# Browser globals
|
||||||
DataView: readonly
|
|
||||||
MediaMetadata: readonly
|
MediaMetadata: readonly
|
||||||
Promise: readonly
|
|
||||||
# Deprecated browser globals
|
|
||||||
DocumentTouch: readonly
|
|
||||||
# Tizen globals
|
# Tizen globals
|
||||||
tizen: readonly
|
tizen: readonly
|
||||||
webapis: readonly
|
webapis: readonly
|
||||||
|
@ -24,7 +34,6 @@ globals:
|
||||||
# Dependency globals
|
# Dependency globals
|
||||||
$: readonly
|
$: readonly
|
||||||
jQuery: readonly
|
jQuery: readonly
|
||||||
queryString: readonly
|
|
||||||
requirejs: readonly
|
requirejs: readonly
|
||||||
# Jellyfin globals
|
# Jellyfin globals
|
||||||
ApiClient: writable
|
ApiClient: writable
|
||||||
|
@ -40,8 +49,7 @@ globals:
|
||||||
getWindowLocationSearch: writable
|
getWindowLocationSearch: writable
|
||||||
Globalize: writable
|
Globalize: writable
|
||||||
Hls: writable
|
Hls: writable
|
||||||
humaneDate: writable
|
dfnshelper: writable
|
||||||
humaneElapsed: writable
|
|
||||||
LibraryMenu: writable
|
LibraryMenu: writable
|
||||||
LinkParser: writable
|
LinkParser: writable
|
||||||
LiveTvHelpers: writable
|
LiveTvHelpers: writable
|
||||||
|
@ -52,9 +60,6 @@ globals:
|
||||||
UserParentalControlPage: writable
|
UserParentalControlPage: writable
|
||||||
Windows: readonly
|
Windows: readonly
|
||||||
|
|
||||||
extends:
|
|
||||||
- eslint:recommended
|
|
||||||
|
|
||||||
rules:
|
rules:
|
||||||
block-spacing: ["error"]
|
block-spacing: ["error"]
|
||||||
brace-style: ["error"]
|
brace-style: ["error"]
|
||||||
|
@ -69,9 +74,14 @@ 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"]
|
||||||
no-unused-vars: ["warn"]
|
no-unused-vars: ["warn"]
|
||||||
no-useless-escape: ["warn"]
|
no-useless-escape: ["warn"]
|
||||||
|
promise/catch-or-return: ["warn"]
|
||||||
|
promise/always-return: ["warn"]
|
||||||
|
promise/no-return-wrap: ["warn"]
|
||||||
|
# TODO: Remove after ES6 migration is complete
|
||||||
|
import/no-unresolved: ["warn"]
|
||||||
|
|
3
babel.config.json
Normal file
3
babel.config.json
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"presets": ["@babel/preset-env"]
|
||||||
|
}
|
13
package.json
13
package.json
|
@ -18,6 +18,9 @@
|
||||||
"cssnano": "^4.1.10",
|
"cssnano": "^4.1.10",
|
||||||
"del": "^5.1.0",
|
"del": "^5.1.0",
|
||||||
"eslint": "^6.8.0",
|
"eslint": "^6.8.0",
|
||||||
|
"eslint-plugin-eslint-comments": "^3.1.2",
|
||||||
|
"eslint-plugin-import": "^2.20.2",
|
||||||
|
"eslint-plugin-promise": "^4.2.1",
|
||||||
"file-loader": "^6.0.0",
|
"file-loader": "^6.0.0",
|
||||||
"gulp": "^4.0.2",
|
"gulp": "^4.0.2",
|
||||||
"gulp-babel": "^8.0.0",
|
"gulp-babel": "^8.0.0",
|
||||||
|
@ -51,7 +54,9 @@
|
||||||
},
|
},
|
||||||
"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",
|
||||||
"document-register-element": "^1.14.3",
|
"document-register-element": "^1.14.3",
|
||||||
"flv.js": "^1.5.0",
|
"flv.js": "^1.5.0",
|
||||||
"hls.js": "^0.13.1",
|
"hls.js": "^0.13.1",
|
||||||
|
@ -59,7 +64,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",
|
||||||
|
@ -84,9 +89,13 @@
|
||||||
"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"
|
||||||
],
|
],
|
||||||
"plugins": [
|
"plugins": [
|
||||||
"@babel/plugin-transform-modules-amd"
|
"@babel/plugin-transform-modules-amd"
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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
|
||||||
|
@ -112,3 +112,20 @@ var polyfill = require("@babel/polyfill/dist/polyfill");
|
||||||
_define("polyfill", function () {
|
_define("polyfill", function () {
|
||||||
return polyfill;
|
return polyfill;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// domtokenlist-shim
|
||||||
|
var classlist = require("classlist.js");
|
||||||
|
_define("classlist-polyfill", function () {
|
||||||
|
return classlist;
|
||||||
|
});
|
||||||
|
|
||||||
|
// Date-FNS
|
||||||
|
var date_fns = require("date-fns");
|
||||||
|
_define("date-fns", function () {
|
||||||
|
return date_fns;
|
||||||
|
});
|
||||||
|
|
||||||
|
var date_fns_locale = require("date-fns/locale");
|
||||||
|
_define("date-fns/locale", function () {
|
||||||
|
return date_fns_locale;
|
||||||
|
});
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["events", "globalize", "dom", "datetime", "userSettings", "serverNotifications", "connectionManager", "emby-button", "listViewStyle"], function (events, globalize, dom, datetime, userSettings, serverNotifications, connectionManager) {
|
define(["events", "globalize", "dom", "date-fns", "dfnshelper", "userSettings", "serverNotifications", "connectionManager", "emby-button", "listViewStyle"], function (events, globalize, dom, datefns, dfnshelper, userSettings, serverNotifications, connectionManager) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function getEntryHtml(entry, apiClient) {
|
function getEntryHtml(entry, apiClient) {
|
||||||
|
@ -16,7 +16,7 @@ define(["events", "globalize", "dom", "datetime", "userSettings", "serverNotific
|
||||||
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>';
|
||||||
}
|
}
|
||||||
|
@ -26,8 +26,7 @@ define(["events", "globalize", "dom", "datetime", "userSettings", "serverNotific
|
||||||
html += entry.Name;
|
html += entry.Name;
|
||||||
html += "</div>";
|
html += "</div>";
|
||||||
html += '<div class="listItemBodyText secondary">';
|
html += '<div class="listItemBodyText secondary">';
|
||||||
var date = datetime.parseISO8601Date(entry.Date, true);
|
html += datefns.formatRelative(Date.parse(entry.Date), Date.parse(new Date()), { locale: dfnshelper.getLocale() });
|
||||||
html += datetime.toLocaleString(date).toLowerCase();
|
|
||||||
html += "</div>";
|
html += "</div>";
|
||||||
html += '<div class="listItemBodyText secondary listItemBodyText-nowrap">';
|
html += '<div class="listItemBodyText secondary listItemBodyText-nowrap">';
|
||||||
html += entry.ShortOverview || "";
|
html += entry.ShortOverview || "";
|
||||||
|
|
|
@ -577,8 +577,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) {
|
||||||
|
|
|
@ -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 () {
|
||||||
|
|
|
@ -95,8 +95,10 @@ import layoutManager from "layoutManager";
|
||||||
return focusedElement;
|
return focusedElement;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default {
|
/* eslint-enable indent */
|
||||||
isEnabled: isEnabled,
|
|
||||||
enable: enable,
|
export default {
|
||||||
autoFocus: autoFocus
|
isEnabled: isEnabled,
|
||||||
};
|
enable: enable,
|
||||||
|
autoFocus: autoFocus
|
||||||
|
};
|
||||||
|
|
|
@ -52,5 +52,5 @@ define(["connectionManager"], function (connectionManager) {
|
||||||
currentSlideshow = null;
|
currentSlideshow = null;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
};
|
||||||
});
|
});
|
||||||
|
|
|
@ -1082,11 +1082,7 @@ import 'programStyles';
|
||||||
|
|
||||||
if (options.showPersonRoleOrType) {
|
if (options.showPersonRoleOrType) {
|
||||||
if (item.Role) {
|
if (item.Role) {
|
||||||
lines.push('as ' + item.Role);
|
lines.push(globalize.translate('PersonRole', item.Role));
|
||||||
} else if (item.Type) {
|
|
||||||
lines.push(globalize.translate('' + item.Type));
|
|
||||||
} else {
|
|
||||||
lines.push('');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1854,6 +1850,8 @@ import 'programStyles';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* eslint-enable indent */
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
getCardsHtml: getCardsHtml,
|
getCardsHtml: getCardsHtml,
|
||||||
getDefaultBackgroundClass: getDefaultBackgroundClass,
|
getDefaultBackgroundClass: getDefaultBackgroundClass,
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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));
|
||||||
|
@ -89,7 +89,7 @@ define(['loading', 'dialogHelper', 'dom', 'listViewStyle', 'emby-input', 'paper-
|
||||||
var instruction = options.instruction ? options.instruction + "<br/><br/>" : "";
|
var instruction = options.instruction ? options.instruction + "<br/><br/>" : "";
|
||||||
html += '<div class="infoBanner" style="margin-bottom:1.5em;">';
|
html += '<div class="infoBanner" style="margin-bottom:1.5em;">';
|
||||||
html += instruction;
|
html += instruction;
|
||||||
html += Globalize.translate("MessageDirectoryPickerInstruction").replace("{0}", "<b>\\\\server</b>").replace("{1}", "<b>\\\\192.168.1.101</b>");
|
html += Globalize.translate("MessageDirectoryPickerInstruction", "<b>\\\\server</b>", "<b>\\\\192.168.1.101</b>");
|
||||||
if ("bsd" === systemInfo.OperatingSystem.toLowerCase()) {
|
if ("bsd" === systemInfo.OperatingSystem.toLowerCase()) {
|
||||||
html += "<br/>";
|
html += "<br/>";
|
||||||
html += "<br/>";
|
html += "<br/>";
|
||||||
|
@ -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) {
|
||||||
|
@ -163,21 +163,20 @@ define(['loading', 'dialogHelper', 'dom', 'listViewStyle', 'emby-input', 'paper-
|
||||||
}
|
}
|
||||||
}).catch(function(response) {
|
}).catch(function(response) {
|
||||||
if (response) {
|
if (response) {
|
||||||
// TODO All alerts (across the project), should use Globalize.translate()
|
|
||||||
if (response.status === 404) {
|
if (response.status === 404) {
|
||||||
alertText("The path could not be found. Please ensure the path is valid and try again.");
|
alertText(Globalize.translate("PathNotFound"));
|
||||||
return Promise.reject();
|
return Promise.reject();
|
||||||
}
|
}
|
||||||
if (response.status === 500) {
|
if (response.status === 500) {
|
||||||
if (validateWriteable) {
|
if (validateWriteable) {
|
||||||
alertText("Jellyfin Server requires write access to this folder. Please ensure write access and try again.");
|
alertText(Globalize.translate("WriteAccessRequired"));
|
||||||
} else {
|
} else {
|
||||||
alertText("The path could not be found. Please ensure the path is valid and try again.")
|
alertText(Globalize.translate("PathNotFound"));
|
||||||
}
|
}
|
||||||
return Promise.reject()
|
return Promise.reject();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return Promise.resolve()
|
return Promise.resolve();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -189,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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -276,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;
|
||||||
|
@ -294,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;
|
||||||
});
|
});
|
||||||
|
|
|
@ -262,15 +262,17 @@
|
||||||
return _transitionEvent;
|
return _transitionEvent;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default {
|
/* eslint-enable indent */
|
||||||
parentWithAttribute: parentWithAttribute,
|
|
||||||
parentWithClass: parentWithClass,
|
export default {
|
||||||
parentWithTag: parentWithTag,
|
parentWithAttribute: parentWithAttribute,
|
||||||
addEventListener: addEventListener,
|
parentWithClass: parentWithClass,
|
||||||
removeEventListener: removeEventListener,
|
parentWithTag: parentWithTag,
|
||||||
getWindowSize: getWindowSize,
|
addEventListener: addEventListener,
|
||||||
getScreenWidth: getScreenWidth,
|
removeEventListener: removeEventListener,
|
||||||
whichTransitionEvent: whichTransitionEvent,
|
getWindowSize: getWindowSize,
|
||||||
whichAnimationEvent: whichAnimationEvent,
|
getScreenWidth: getScreenWidth,
|
||||||
whichAnimationCancelEvent: whichAnimationCancelEvent
|
whichTransitionEvent: whichTransitionEvent,
|
||||||
};
|
whichAnimationEvent: whichAnimationEvent,
|
||||||
|
whichAnimationCancelEvent: whichAnimationCancelEvent
|
||||||
|
};
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import multiDownload from "multi-download"
|
import multiDownload from "multi-download";
|
||||||
|
|
||||||
export function download(items) {
|
export function download(items) {
|
||||||
|
|
||||||
|
|
|
@ -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">';
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
});
|
});
|
||||||
|
@ -1048,11 +1049,12 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
|
||||||
|
|
||||||
function renderSsaAss(videoElement, track, item) {
|
function renderSsaAss(videoElement, track, item) {
|
||||||
var attachments = self._currentPlayOptions.mediaSource.MediaAttachments || [];
|
var attachments = self._currentPlayOptions.mediaSource.MediaAttachments || [];
|
||||||
|
var apiClient = connectionManager.getApiClient(item);
|
||||||
var options = {
|
var options = {
|
||||||
video: videoElement,
|
video: videoElement,
|
||||||
subUrl: getTextTrackUrl(track, item),
|
subUrl: getTextTrackUrl(track, item),
|
||||||
fonts: attachments.map(function (i) {
|
fonts: attachments.map(function (i) {
|
||||||
return i.DeliveryUrl;
|
return apiClient.getUrl(i.DeliveryUrl);
|
||||||
}),
|
}),
|
||||||
workerUrl: appRouter.baseUrl() + "/libraries/subtitles-octopus-worker.js",
|
workerUrl: appRouter.baseUrl() + "/libraries/subtitles-octopus-worker.js",
|
||||||
legacyWorkerUrl: appRouter.baseUrl() + "/libraries/subtitles-octopus-worker-legacy.js",
|
legacyWorkerUrl: appRouter.baseUrl() + "/libraries/subtitles-octopus-worker-legacy.js",
|
||||||
|
@ -1208,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);
|
||||||
});
|
});
|
||||||
|
@ -1249,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 {
|
||||||
|
@ -1427,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;
|
||||||
}
|
}
|
||||||
|
@ -1554,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);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1691,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 () {
|
||||||
|
@ -1713,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 () {
|
||||||
|
|
|
@ -1,74 +0,0 @@
|
||||||
define(["datetime"], function (datetime) {
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
function humaneDate(date_str) {
|
|
||||||
var format;
|
|
||||||
var time_formats = [
|
|
||||||
[90, "a minute"],
|
|
||||||
[3600, "minutes", 60],
|
|
||||||
[5400, "an hour"],
|
|
||||||
[86400, "hours", 3600],
|
|
||||||
[129600, "a day"],
|
|
||||||
[604800, "days", 86400],
|
|
||||||
[907200, "a week"],
|
|
||||||
[2628e3, "weeks", 604800],
|
|
||||||
[3942e3, "a month"],
|
|
||||||
[31536e3, "months", 2628e3],
|
|
||||||
[47304e3, "a year"],
|
|
||||||
[31536e5, "years", 31536e3]
|
|
||||||
];
|
|
||||||
var dt = new Date();
|
|
||||||
var date = datetime.parseISO8601Date(date_str, true);
|
|
||||||
var seconds = (dt - date) / 1000.0;
|
|
||||||
var i = 0;
|
|
||||||
|
|
||||||
if (seconds < 0) {
|
|
||||||
seconds = Math.abs(seconds);
|
|
||||||
}
|
|
||||||
// eslint-disable-next-line no-cond-assign
|
|
||||||
for (; format = time_formats[i++];) {
|
|
||||||
if (seconds < format[0]) {
|
|
||||||
if (2 == format.length) {
|
|
||||||
return format[1] + " ago";
|
|
||||||
}
|
|
||||||
|
|
||||||
return Math.round(seconds / format[2]) + " " + format[1] + " ago";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (seconds > 47304e5) {
|
|
||||||
return Math.round(seconds / 47304e5) + " centuries ago";
|
|
||||||
}
|
|
||||||
|
|
||||||
return date_str;
|
|
||||||
}
|
|
||||||
|
|
||||||
function humaneElapsed(firstDateStr, secondDateStr) {
|
|
||||||
// TODO replace this whole script with a library or something
|
|
||||||
var dateOne = new Date(firstDateStr);
|
|
||||||
var dateTwo = new Date(secondDateStr);
|
|
||||||
var delta = (dateTwo.getTime() - dateOne.getTime()) / 1e3;
|
|
||||||
var days = Math.floor(delta % 31536e3 / 86400);
|
|
||||||
var hours = Math.floor(delta % 31536e3 % 86400 / 3600);
|
|
||||||
var minutes = Math.floor(delta % 31536e3 % 86400 % 3600 / 60);
|
|
||||||
var seconds = Math.round(delta % 31536e3 % 86400 % 3600 % 60);
|
|
||||||
var elapsed = "";
|
|
||||||
elapsed += 1 == days ? days + " day " : "";
|
|
||||||
elapsed += days > 1 ? days + " days " : "";
|
|
||||||
elapsed += 1 == hours ? hours + " hour " : "";
|
|
||||||
elapsed += hours > 1 ? hours + " hours " : "";
|
|
||||||
elapsed += 1 == minutes ? minutes + " minute " : "";
|
|
||||||
elapsed += minutes > 1 ? minutes + " minutes " : "";
|
|
||||||
elapsed += elapsed.length > 0 ? "and " : "";
|
|
||||||
elapsed += 1 == seconds ? seconds + " second" : "";
|
|
||||||
elapsed += 0 == seconds || seconds > 1 ? seconds + " seconds" : "";
|
|
||||||
return elapsed;
|
|
||||||
}
|
|
||||||
|
|
||||||
window.humaneDate = humaneDate;
|
|
||||||
window.humaneElapsed = humaneElapsed;
|
|
||||||
return {
|
|
||||||
humaneDate: humaneDate,
|
|
||||||
humaneElapsed: humaneElapsed
|
|
||||||
};
|
|
||||||
});
|
|
|
@ -109,7 +109,7 @@ define(['dom', 'loading', 'apphost', 'dialogHelper', 'connectionManager', 'image
|
||||||
html += '<span style="margin-right: 10px;">';
|
html += '<span style="margin-right: 10px;">';
|
||||||
|
|
||||||
var startAtDisplay = totalRecordCount ? startIndex + 1 : 0;
|
var startAtDisplay = totalRecordCount ? startIndex + 1 : 0;
|
||||||
html += startAtDisplay + '-' + recordsEnd + ' of ' + totalRecordCount;
|
html += globalize.translate("ListPaging", startAtDisplay, recordsEnd, totalRecordCount);
|
||||||
|
|
||||||
html += '</span>';
|
html += '</span>';
|
||||||
|
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -309,7 +309,7 @@ define(["dialogHelper", "loading", "connectionManager", "require", "globalize",
|
||||||
fullName = idInfo.Name + " " + globalize.translate(idInfo.Type);
|
fullName = idInfo.Name + " " + globalize.translate(idInfo.Type);
|
||||||
}
|
}
|
||||||
|
|
||||||
var idLabel = globalize.translate("LabelDynamicExternalId").replace("{0}", fullName);
|
var idLabel = globalize.translate("LabelDynamicExternalId", fullName);
|
||||||
|
|
||||||
html += '<input is="emby-input" class="txtLookupId" data-providerkey="' + idInfo.Key + '" id="' + id + '" label="' + idLabel + '"/>';
|
html += '<input is="emby-input" class="txtLookupId" data-providerkey="' + idInfo.Key + '" id="' + id + '" label="' + idLabel + '"/>';
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
}
|
};
|
||||||
});
|
});
|
||||||
|
|
|
@ -188,5 +188,5 @@ define(["pluginManager"], function (pluginManager) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
};
|
||||||
});
|
});
|
||||||
|
|
|
@ -470,7 +470,7 @@ define(['itemHelper', 'dom', 'layoutManager', 'dialogHelper', 'datetime', 'loadi
|
||||||
fullName = idInfo.Name + " " + globalize.translate(idInfo.Type);
|
fullName = idInfo.Name + " " + globalize.translate(idInfo.Type);
|
||||||
}
|
}
|
||||||
|
|
||||||
var labelText = globalize.translate("LabelDynamicExternalId").replace("{0}", fullName);
|
var labelText = globalize.translate('LabelDynamicExternalId', fullName);
|
||||||
|
|
||||||
html += '<div class="inputContainer">';
|
html += '<div class="inputContainer">';
|
||||||
html += '<div class="flex align-items-center">';
|
html += '<div class="flex align-items-center">';
|
||||||
|
|
|
@ -173,15 +173,15 @@ define(['serverNotifications', 'playbackManager', 'events', 'globalize', 'requir
|
||||||
};
|
};
|
||||||
|
|
||||||
if (status === 'completed') {
|
if (status === 'completed') {
|
||||||
notification.title = globalize.translate('PackageInstallCompleted').replace('{0}', installation.Name + ' ' + installation.Version);
|
notification.title = globalize.translate('PackageInstallCompleted', installation.Name, installation.Version);
|
||||||
notification.vibrate = true;
|
notification.vibrate = true;
|
||||||
} else if (status === 'cancelled') {
|
} else if (status === 'cancelled') {
|
||||||
notification.title = globalize.translate('PackageInstallCancelled').replace('{0}', installation.Name + ' ' + installation.Version);
|
notification.title = globalize.translate('PackageInstallCancelled', installation.Name, installation.Version);
|
||||||
} else if (status === 'failed') {
|
} else if (status === 'failed') {
|
||||||
notification.title = globalize.translate('PackageInstallFailed').replace('{0}', installation.Name + ' ' + installation.Version);
|
notification.title = globalize.translate('PackageInstallFailed', installation.Name, installation.Version);
|
||||||
notification.vibrate = true;
|
notification.vibrate = true;
|
||||||
} else if (status === 'progress') {
|
} else if (status === 'progress') {
|
||||||
notification.title = globalize.translate('InstallingPackage').replace('{0}', installation.Name + ' ' + installation.Version);
|
notification.title = globalize.translate('InstallingPackage', installation.Name, installation.Version);
|
||||||
|
|
||||||
notification.actions =
|
notification.actions =
|
||||||
[
|
[
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
||||||
|
|
|
@ -544,8 +544,10 @@ import layoutManager from "layoutManager";
|
||||||
}, {capture: true});
|
}, {capture: true});
|
||||||
}
|
}
|
||||||
|
|
||||||
export default {
|
/* eslint-enable indent */
|
||||||
isEnabled: isEnabled,
|
|
||||||
scrollTo: scrollTo,
|
export default {
|
||||||
scrollToElement: scrollToElement
|
isEnabled: isEnabled,
|
||||||
};
|
scrollTo: scrollTo,
|
||||||
|
scrollToElement: scrollToElement
|
||||||
|
};
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -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;
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globalize", "loading", "connectionManager", "playMethodHelper", "cardBuilder", "imageLoader", "components/activitylog", "scripts/imagehelper", "indicators", "humanedate", "listViewStyle", "emby-button", "flexStyles", "emby-button", "emby-itemscontainer"], function (datetime, events, itemHelper, serverNotifications, dom, globalize, loading, connectionManager, playMethodHelper, cardBuilder, imageLoader, ActivityLog, imageHelper, indicators) {
|
define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globalize", "date-fns", "dfnshelper", "loading", "connectionManager", "playMethodHelper", "cardBuilder", "imageLoader", "components/activitylog", "scripts/imagehelper", "indicators", "listViewStyle", "emby-button", "flexStyles", "emby-button", "emby-itemscontainer"], function (datetime, events, itemHelper, serverNotifications, dom, globalize, datefns, dfnshelper, loading, connectionManager, playMethodHelper, cardBuilder, imageLoader, ActivityLog, imageHelper, indicators) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function showPlaybackInfo(btn, session) {
|
function showPlaybackInfo(btn, session) {
|
||||||
|
@ -467,10 +467,11 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
||||||
getNowPlayingName: function (session) {
|
getNowPlayingName: function (session) {
|
||||||
var imgUrl = "";
|
var imgUrl = "";
|
||||||
var nowPlayingItem = session.NowPlayingItem;
|
var nowPlayingItem = session.NowPlayingItem;
|
||||||
|
// FIXME: It seems that, sometimes, server sends date in the future, so date-fns displays messages like 'in less than a minute'. We should fix
|
||||||
|
// how dates are returned by the server when the session is active and show something like 'Active now', instead of past/future sentences
|
||||||
if (!nowPlayingItem) {
|
if (!nowPlayingItem) {
|
||||||
return {
|
return {
|
||||||
html: "Last seen " + humaneDate(session.LastActivityDate),
|
html: globalize.translate("LastSeen", datefns.formatDistanceToNow(Date.parse(session.LastActivityDate), dfnshelper.localeWithSuffix)),
|
||||||
image: imgUrl
|
image: imgUrl
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,5 +29,5 @@ define(["datetime", "loading", "apphost", "listViewStyle", "emby-button", "flexS
|
||||||
loading.hide();
|
loading.hide();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
});
|
});
|
||||||
|
|
|
@ -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);
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
});
|
});
|
||||||
|
|
|
@ -84,7 +84,7 @@ define(["jQuery", "loading", "libraryMenu", "globalize", "connectionManager", "e
|
||||||
}
|
}
|
||||||
|
|
||||||
if (installedPlugin) {
|
if (installedPlugin) {
|
||||||
var currentVersionText = globalize.translate("MessageYouHaveVersionInstalled").replace("{0}", "<strong>" + installedPlugin.Version + "</strong>");
|
var currentVersionText = globalize.translate("MessageYouHaveVersionInstalled", "<strong>" + installedPlugin.Version + "</strong>");
|
||||||
$("#pCurrentVersion", page).show().html(currentVersionText);
|
$("#pCurrentVersion", page).show().html(currentVersionText);
|
||||||
} else {
|
} else {
|
||||||
$("#pCurrentVersion", page).hide().html("");
|
$("#pCurrentVersion", page).hide().html("");
|
||||||
|
|
|
@ -116,7 +116,7 @@ define(["loading", "libraryMenu", "globalize", "cardStyle", "emby-button", "emby
|
||||||
return ip.Id == plugin.guid;
|
return ip.Id == plugin.guid;
|
||||||
})[0];
|
})[0];
|
||||||
html += "<div class='cardText cardText-secondary'>";
|
html += "<div class='cardText cardText-secondary'>";
|
||||||
html += installedPlugin ? globalize.translate("LabelVersionInstalled").replace("{0}", installedPlugin.Version) : " ";
|
html += installedPlugin ? globalize.translate("LabelVersionInstalled", installedPlugin.Version) : " ";
|
||||||
html += "</div>";
|
html += "</div>";
|
||||||
html += "</div>";
|
html += "</div>";
|
||||||
html += "</div>";
|
html += "</div>";
|
||||||
|
|
|
@ -2,7 +2,7 @@ define(["loading", "libraryMenu", "dom", "globalize", "cardStyle", "emby-button"
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function deletePlugin(page, uniqueid, name) {
|
function deletePlugin(page, uniqueid, name) {
|
||||||
var msg = globalize.translate("UninstallPluginConfirmation").replace("{0}", name);
|
var msg = globalize.translate("UninstallPluginConfirmation", name);
|
||||||
|
|
||||||
require(["confirm"], function (confirm) {
|
require(["confirm"], function (confirm) {
|
||||||
confirm({
|
confirm({
|
||||||
|
|
|
@ -75,17 +75,19 @@ define(["jQuery", "loading", "datetime", "dom", "globalize", "emby-input", "emby
|
||||||
html += "</div>";
|
html += "</div>";
|
||||||
context.querySelector(".taskTriggers").innerHTML = html;
|
context.querySelector(".taskTriggers").innerHTML = html;
|
||||||
},
|
},
|
||||||
|
// TODO: Replace this mess with date-fns and remove datetime completely
|
||||||
getTriggerFriendlyName: function (trigger) {
|
getTriggerFriendlyName: function (trigger) {
|
||||||
if ("DailyTrigger" == trigger.Type) {
|
if ("DailyTrigger" == trigger.Type) {
|
||||||
return "Daily at " + ScheduledTaskPage.getDisplayTime(trigger.TimeOfDayTicks);
|
return globalize.translate("DailyAt", ScheduledTaskPage.getDisplayTime(trigger.TimeOfDayTicks));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ("WeeklyTrigger" == trigger.Type) {
|
if ("WeeklyTrigger" == trigger.Type) {
|
||||||
return trigger.DayOfWeek + "s at " + ScheduledTaskPage.getDisplayTime(trigger.TimeOfDayTicks);
|
// TODO: The day of week isn't localised as well
|
||||||
|
return globalize.translate("WeeklyAt", trigger.DayOfWeek, ScheduledTaskPage.getDisplayTime(trigger.TimeOfDayTicks));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ("SystemEventTrigger" == trigger.Type && "WakeFromSleep" == trigger.SystemEvent) {
|
if ("SystemEventTrigger" == trigger.Type && "WakeFromSleep" == trigger.SystemEvent) {
|
||||||
return "On wake from sleep";
|
return globalize.translate("OnWakeFromSleep");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (trigger.Type == "IntervalTrigger") {
|
if (trigger.Type == "IntervalTrigger") {
|
||||||
|
@ -93,23 +95,23 @@ define(["jQuery", "loading", "datetime", "dom", "globalize", "emby-input", "emby
|
||||||
var hours = trigger.IntervalTicks / 36e9;
|
var hours = trigger.IntervalTicks / 36e9;
|
||||||
|
|
||||||
if (hours == 0.25) {
|
if (hours == 0.25) {
|
||||||
return "Every 15 minutes";
|
return globalize.translate("EveryXMinutes", "15");
|
||||||
}
|
}
|
||||||
if (hours == 0.5) {
|
if (hours == 0.5) {
|
||||||
return "Every 30 minutes";
|
return globalize.translate("EveryXMinutes", "30");
|
||||||
}
|
}
|
||||||
if (hours == 0.75) {
|
if (hours == 0.75) {
|
||||||
return "Every 45 minutes";
|
return globalize.translate("EveryXMinutes", "45");
|
||||||
}
|
}
|
||||||
if (hours == 1) {
|
if (hours == 1) {
|
||||||
return "Every hour";
|
return globalize.translate("EveryHour");
|
||||||
}
|
}
|
||||||
|
|
||||||
return "Every " + hours + " hours";
|
return globalize.translate("EveryXHours", hours);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (trigger.Type == "StartupTrigger") {
|
if (trigger.Type == "StartupTrigger") {
|
||||||
return "On application startup";
|
return globalize.translate("OnApplicationStartup");
|
||||||
}
|
}
|
||||||
|
|
||||||
return trigger.Type;
|
return trigger.Type;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["jQuery", "loading", "events", "globalize", "serverNotifications", "humanedate", "listViewStyle", "emby-button"], function($, loading, events, globalize, serverNotifications) {
|
define(["jQuery", "loading", "events", "globalize", "serverNotifications", "date-fns", "dfnshelper", "listViewStyle", "emby-button"], function ($, loading, events, globalize, serverNotifications, datefns, dfnshelper) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function reloadList(page) {
|
function reloadList(page) {
|
||||||
|
@ -7,7 +7,7 @@ define(["jQuery", "loading", "events", "globalize", "serverNotifications", "huma
|
||||||
}).then(function(tasks) {
|
}).then(function(tasks) {
|
||||||
populateList(page, tasks);
|
populateList(page, tasks);
|
||||||
loading.hide();
|
loading.hide();
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function populateList(page, tasks) {
|
function populateList(page, tasks) {
|
||||||
|
@ -66,7 +66,10 @@ define(["jQuery", "loading", "events", "globalize", "serverNotifications", "huma
|
||||||
var html = "";
|
var html = "";
|
||||||
if (task.State === "Idle") {
|
if (task.State === "Idle") {
|
||||||
if (task.LastExecutionResult) {
|
if (task.LastExecutionResult) {
|
||||||
html += globalize.translate("LabelScheduledTaskLastRan").replace("{0}", humaneDate(task.LastExecutionResult.EndTimeUtc)).replace("{1}", humaneElapsed(task.LastExecutionResult.StartTimeUtc, task.LastExecutionResult.EndTimeUtc));
|
var endtime = Date.parse(task.LastExecutionResult.EndTimeUtc);
|
||||||
|
var starttime = Date.parse(task.LastExecutionResult.StartTimeUtc);
|
||||||
|
html += globalize.translate("LabelScheduledTaskLastRan", datefns.formatDistanceToNow(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") {
|
||||||
|
@ -152,7 +155,7 @@ define(["jQuery", "loading", "events", "globalize", "serverNotifications", "huma
|
||||||
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() {
|
||||||
|
@ -161,7 +164,7 @@ define(["jQuery", "loading", "events", "globalize", "serverNotifications", "huma
|
||||||
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() {
|
||||||
|
@ -175,5 +178,5 @@ define(["jQuery", "loading", "events", "globalize", "serverNotifications", "huma
|
||||||
reloadList(view);
|
reloadList(view);
|
||||||
events.on(serverNotifications, "ScheduledTasksInfo", onScheduledTasksUpdate);
|
events.on(serverNotifications, "ScheduledTasksInfo", onScheduledTasksUpdate);
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["loading", "dom", "libraryMenu", "globalize", "scripts/imagehelper", "humanedate", "emby-button", "emby-itemscontainer", "cardStyle"], function (loading, dom, libraryMenu, globalize, imageHelper) {
|
define(["loading", "dom", "libraryMenu", "globalize", "scripts/imagehelper", "date-fns", "dfnshelper", "emby-button", "emby-itemscontainer", "cardStyle"], function (loading, dom, libraryMenu, globalize, imageHelper, datefns, dfnshelper) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function canDelete(deviceId) {
|
function canDelete(deviceId) {
|
||||||
|
@ -103,7 +103,7 @@ define(["loading", "dom", "libraryMenu", "globalize", "scripts/imagehelper", "hu
|
||||||
|
|
||||||
if (device.LastUserName) {
|
if (device.LastUserName) {
|
||||||
deviceHtml += device.LastUserName;
|
deviceHtml += device.LastUserName;
|
||||||
deviceHtml += ", " + humaneDate(device.DateLastActivity);
|
deviceHtml += ", " + datefns.formatDistanceToNow(Date.parse(device.DateLastActivity), dfnshelper.localeWithSuffix);
|
||||||
}
|
}
|
||||||
|
|
||||||
deviceHtml += " ";
|
deviceHtml += " ";
|
||||||
|
|
|
@ -258,14 +258,14 @@ define(["jQuery", "loading", "fnchecked", "emby-select", "emby-button", "emby-in
|
||||||
|
|
||||||
html += "<div>";
|
html += "<div>";
|
||||||
html += '<a is="emby-linkbutton" href="#" class="lnkEditSubProfile" data-profileindex="' + i + '">';
|
html += '<a is="emby-linkbutton" href="#" class="lnkEditSubProfile" data-profileindex="' + i + '">';
|
||||||
html += "<p>" + Globalize.translate("ValueContainer").replace("{0}", profile.Container || allText) + "</p>";
|
html += "<p>" + Globalize.translate("ValueContainer", profile.Container || allText) + "</p>";
|
||||||
|
|
||||||
if ("Video" == profile.Type) {
|
if ("Video" == profile.Type) {
|
||||||
html += "<p>" + Globalize.translate("ValueVideoCodec").replace("{0}", profile.VideoCodec || allText) + "</p>";
|
html += "<p>" + Globalize.translate("ValueVideoCodec", profile.VideoCodec || allText) + "</p>";
|
||||||
html += "<p>" + Globalize.translate("ValueAudioCodec").replace("{0}", profile.AudioCodec || allText) + "</p>";
|
html += "<p>" + Globalize.translate("ValueAudioCodec", profile.AudioCodec || allText) + "</p>";
|
||||||
} else {
|
} else {
|
||||||
if ("Audio" == profile.Type) {
|
if ("Audio" == profile.Type) {
|
||||||
html += "<p>" + Globalize.translate("ValueCodec").replace("{0}", profile.AudioCodec || allText) + "</p>";
|
html += "<p>" + Globalize.translate("ValueCodec", profile.AudioCodec || allText) + "</p>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -319,14 +319,14 @@ define(["jQuery", "loading", "fnchecked", "emby-select", "emby-button", "emby-in
|
||||||
html += "<div>";
|
html += "<div>";
|
||||||
html += '<a is="emby-linkbutton" href="#" class="lnkEditSubProfile" data-profileindex="' + i + '">';
|
html += '<a is="emby-linkbutton" href="#" class="lnkEditSubProfile" data-profileindex="' + i + '">';
|
||||||
html += "<p>Protocol: " + (profile.Protocol || "Http") + "</p>";
|
html += "<p>Protocol: " + (profile.Protocol || "Http") + "</p>";
|
||||||
html += "<p>" + Globalize.translate("ValueContainer").replace("{0}", profile.Container || allText) + "</p>";
|
html += "<p>" + Globalize.translate("ValueContainer", profile.Container || allText) + "</p>";
|
||||||
|
|
||||||
if ("Video" == profile.Type) {
|
if ("Video" == profile.Type) {
|
||||||
html += "<p>" + Globalize.translate("ValueVideoCodec").replace("{0}", profile.VideoCodec || allText) + "</p>";
|
html += "<p>" + Globalize.translate("ValueVideoCodec", profile.VideoCodec || allText) + "</p>";
|
||||||
html += "<p>" + Globalize.translate("ValueAudioCodec").replace("{0}", profile.AudioCodec || allText) + "</p>";
|
html += "<p>" + Globalize.translate("ValueAudioCodec", profile.AudioCodec || allText) + "</p>";
|
||||||
} else {
|
} else {
|
||||||
if ("Audio" == profile.Type) {
|
if ("Audio" == profile.Type) {
|
||||||
html += "<p>" + Globalize.translate("ValueCodec").replace("{0}", profile.AudioCodec || allText) + "</p>";
|
html += "<p>" + Globalize.translate("ValueCodec", profile.AudioCodec || allText) + "</p>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -404,11 +404,11 @@ define(["jQuery", "loading", "fnchecked", "emby-select", "emby-button", "emby-in
|
||||||
|
|
||||||
html += "<div>";
|
html += "<div>";
|
||||||
html += '<a is="emby-linkbutton" href="#" class="lnkEditSubProfile" data-profileindex="' + i + '">';
|
html += '<a is="emby-linkbutton" href="#" class="lnkEditSubProfile" data-profileindex="' + i + '">';
|
||||||
html += "<p>" + Globalize.translate("ValueContainer").replace("{0}", profile.Container || allText) + "</p>";
|
html += "<p>" + Globalize.translate("ValueContainer", profile.Container || allText) + "</p>";
|
||||||
|
|
||||||
if (profile.Conditions && profile.Conditions.length) {
|
if (profile.Conditions && profile.Conditions.length) {
|
||||||
html += "<p>";
|
html += "<p>";
|
||||||
html += Globalize.translate("ValueConditions").replace("{0}", profile.Conditions.map(function (c) {
|
html += Globalize.translate("ValueConditions", profile.Conditions.map(function (c) {
|
||||||
return c.Property;
|
return c.Property;
|
||||||
}).join(", "));
|
}).join(", "));
|
||||||
html += "</p>";
|
html += "</p>";
|
||||||
|
@ -476,11 +476,11 @@ define(["jQuery", "loading", "fnchecked", "emby-select", "emby-button", "emby-in
|
||||||
|
|
||||||
html += "<div>";
|
html += "<div>";
|
||||||
html += '<a is="emby-linkbutton" href="#" class="lnkEditSubProfile" data-profileindex="' + i + '">';
|
html += '<a is="emby-linkbutton" href="#" class="lnkEditSubProfile" data-profileindex="' + i + '">';
|
||||||
html += "<p>" + Globalize.translate("ValueCodec").replace("{0}", profile.Codec || allText) + "</p>";
|
html += "<p>" + Globalize.translate("ValueCodec", profile.Codec || allText) + "</p>";
|
||||||
|
|
||||||
if (profile.Conditions && profile.Conditions.length) {
|
if (profile.Conditions && profile.Conditions.length) {
|
||||||
html += "<p>";
|
html += "<p>";
|
||||||
html += Globalize.translate("ValueConditions").replace("{0}", profile.Conditions.map(function (c) {
|
html += Globalize.translate("ValueConditions", profile.Conditions.map(function (c) {
|
||||||
return c.Property;
|
return c.Property;
|
||||||
}).join(", "));
|
}).join(", "));
|
||||||
html += "</p>";
|
html += "</p>";
|
||||||
|
@ -547,20 +547,20 @@ define(["jQuery", "loading", "fnchecked", "emby-select", "emby-button", "emby-in
|
||||||
|
|
||||||
html += "<div>";
|
html += "<div>";
|
||||||
html += '<a is="emby-linkbutton" href="#" class="lnkEditSubProfile" data-profileindex="' + i + '">';
|
html += '<a is="emby-linkbutton" href="#" class="lnkEditSubProfile" data-profileindex="' + i + '">';
|
||||||
html += "<p>" + Globalize.translate("ValueContainer").replace("{0}", profile.Container || allText) + "</p>";
|
html += "<p>" + Globalize.translate("ValueContainer", profile.Container || allText) + "</p>";
|
||||||
|
|
||||||
if ("Video" == profile.Type) {
|
if ("Video" == profile.Type) {
|
||||||
html += "<p>" + Globalize.translate("ValueVideoCodec").replace("{0}", profile.VideoCodec || allText) + "</p>";
|
html += "<p>" + Globalize.translate("ValueVideoCodec", profile.VideoCodec || allText) + "</p>";
|
||||||
html += "<p>" + Globalize.translate("ValueAudioCodec").replace("{0}", profile.AudioCodec || allText) + "</p>";
|
html += "<p>" + Globalize.translate("ValueAudioCodec", profile.AudioCodec || allText) + "</p>";
|
||||||
} else {
|
} else {
|
||||||
if ("Audio" == profile.Type) {
|
if ("Audio" == profile.Type) {
|
||||||
html += "<p>" + Globalize.translate("ValueCodec").replace("{0}", profile.AudioCodec || allText) + "</p>";
|
html += "<p>" + Globalize.translate("ValueCodec", profile.AudioCodec || allText) + "</p>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (profile.Conditions && profile.Conditions.length) {
|
if (profile.Conditions && profile.Conditions.length) {
|
||||||
html += "<p>";
|
html += "<p>";
|
||||||
html += Globalize.translate("ValueConditions").replace("{0}", profile.Conditions.map(function (c) {
|
html += Globalize.translate("ValueConditions", profile.Conditions.map(function (c) {
|
||||||
return c.Property;
|
return c.Property;
|
||||||
}).join(", "));
|
}).join(", "));
|
||||||
html += "</p>";
|
html += "</p>";
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -591,7 +591,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti
|
||||||
try {
|
try {
|
||||||
var birthday = datetime.parseISO8601Date(item.PremiereDate, true).toDateString();
|
var birthday = datetime.parseISO8601Date(item.PremiereDate, true).toDateString();
|
||||||
itemBirthday.classList.remove("hide");
|
itemBirthday.classList.remove("hide");
|
||||||
itemBirthday.innerHTML = globalize.translate("BirthDateValue").replace("{0}", birthday);
|
itemBirthday.innerHTML = globalize.translate("BirthDateValue", birthday);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
itemBirthday.classList.add("hide");
|
itemBirthday.classList.add("hide");
|
||||||
}
|
}
|
||||||
|
@ -605,7 +605,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti
|
||||||
try {
|
try {
|
||||||
var deathday = datetime.parseISO8601Date(item.EndDate, true).toDateString();
|
var deathday = datetime.parseISO8601Date(item.EndDate, true).toDateString();
|
||||||
itemDeathDate.classList.remove("hide");
|
itemDeathDate.classList.remove("hide");
|
||||||
itemDeathDate.innerHTML = globalize.translate("DeathDateValue").replace("{0}", deathday);
|
itemDeathDate.innerHTML = globalize.translate("DeathDateValue", deathday);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
itemDeathDate.classList.add("hide");
|
itemDeathDate.classList.add("hide");
|
||||||
}
|
}
|
||||||
|
@ -618,7 +618,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti
|
||||||
if ("Person" == item.Type && item.ProductionLocations && item.ProductionLocations.length) {
|
if ("Person" == item.Type && item.ProductionLocations && item.ProductionLocations.length) {
|
||||||
var gmap = '<a is="emby-linkbutton" class="button-link textlink" target="_blank" href="https://maps.google.com/maps?q=' + item.ProductionLocations[0] + '">' + item.ProductionLocations[0] + "</a>";
|
var gmap = '<a is="emby-linkbutton" class="button-link textlink" target="_blank" href="https://maps.google.com/maps?q=' + item.ProductionLocations[0] + '">' + item.ProductionLocations[0] + "</a>";
|
||||||
itemBirthLocation.classList.remove("hide");
|
itemBirthLocation.classList.remove("hide");
|
||||||
itemBirthLocation.innerHTML = globalize.translate("BirthPlaceValue").replace("{0}", gmap);
|
itemBirthLocation.innerHTML = globalize.translate("BirthPlaceValue", gmap);
|
||||||
} else {
|
} else {
|
||||||
itemBirthLocation.classList.add("hide");
|
itemBirthLocation.classList.add("hide");
|
||||||
}
|
}
|
||||||
|
|
|
@ -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", "
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
});
|
});
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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);
|
||||||
})
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -91,21 +91,21 @@ define(["events", "layoutManager", "inputManager", "userSettings", "libraryMenu"
|
||||||
|
|
||||||
switch (recommendation.RecommendationType) {
|
switch (recommendation.RecommendationType) {
|
||||||
case "SimilarToRecentlyPlayed":
|
case "SimilarToRecentlyPlayed":
|
||||||
title = Globalize.translate("RecommendationBecauseYouWatched").replace("{0}", recommendation.BaselineItemName);
|
title = Globalize.translate("RecommendationBecauseYouWatched", recommendation.BaselineItemName);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "SimilarToLikedItem":
|
case "SimilarToLikedItem":
|
||||||
title = Globalize.translate("RecommendationBecauseYouLike").replace("{0}", recommendation.BaselineItemName);
|
title = Globalize.translate("RecommendationBecauseYouLike", recommendation.BaselineItemName);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "HasDirectorFromRecentlyPlayed":
|
case "HasDirectorFromRecentlyPlayed":
|
||||||
case "HasLikedDirector":
|
case "HasLikedDirector":
|
||||||
title = Globalize.translate("RecommendationDirectedBy").replace("{0}", recommendation.BaselineItemName);
|
title = Globalize.translate("RecommendationDirectedBy", recommendation.BaselineItemName);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "HasActorFromRecentlyPlayed":
|
case "HasActorFromRecentlyPlayed":
|
||||||
case "HasLikedActor":
|
case "HasLikedActor":
|
||||||
title = Globalize.translate("RecommendationStarring").replace("{0}", recommendation.BaselineItemName);
|
title = Globalize.translate("RecommendationStarring", recommendation.BaselineItemName);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["loading", "dom", "globalize", "humanedate", "paper-icon-button-light", "cardStyle", "emby-button", "indicators", "flexStyles"], function (loading, dom, globalize) {
|
define(["loading", "dom", "globalize", "date-fns", "dfnshelper", "paper-icon-button-light", "cardStyle", "emby-button", "indicators", "flexStyles"], function (loading, dom, globalize, datefns, dfnshelper) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function deleteUser(page, id) {
|
function deleteUser(page, id) {
|
||||||
|
@ -125,10 +125,11 @@ define(["loading", "dom", "globalize", "humanedate", "paper-icon-button-light",
|
||||||
html += "</div>";
|
html += "</div>";
|
||||||
return html + "</div>";
|
return html + "</div>";
|
||||||
}
|
}
|
||||||
|
// FIXME: It seems that, sometimes, server sends date in the future, so date-fns displays messages like 'in less than a minute'. We should fix
|
||||||
|
// how dates are returned by the server when the session is active and show something like 'Active now', instead of past/future sentences
|
||||||
function getLastSeenText(lastActivityDate) {
|
function getLastSeenText(lastActivityDate) {
|
||||||
if (lastActivityDate) {
|
if (lastActivityDate) {
|
||||||
return "Last seen " + humaneDate(lastActivityDate);
|
return globalize.translate("LastSeen", datefns.formatDistanceToNow(Date.parse(lastActivityDate), dfnshelper.localeWithSuffix));
|
||||||
}
|
}
|
||||||
|
|
||||||
return "";
|
return "";
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
||||||
|
|
|
@ -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" />
|
||||||
|
|
|
@ -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">
|
||||||
|
|
|
@ -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();
|
||||||
})
|
});
|
||||||
};
|
};
|
||||||
|
|
|
@ -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;
|
||||||
}
|
};
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
define(["jQuery"], function($) {
|
define(["jQuery"], function($) {
|
||||||
"use strict";
|
"use strict";
|
||||||
$.fn.selectmenu = function() {
|
$.fn.selectmenu = function() {
|
||||||
return this
|
return this;
|
||||||
}
|
};
|
||||||
});
|
});
|
||||||
|
|
|
@ -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">
|
||||||
|
|
|
@ -292,7 +292,7 @@ define([], function () {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (typeof document !== 'undefined') {
|
if (typeof document !== 'undefined') {
|
||||||
if (('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) {
|
if (('ontouchstart' in window) || (navigator.maxTouchPoints > 0)) {
|
||||||
browser.touch = true;
|
browser.touch = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
104
src/scripts/dfnshelper.js
Normal file
104
src/scripts/dfnshelper.js
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
import { ar, be, bg, ca, cs, da, de, el, enGB, enUS, es, faIR, fi, fr, frCA, he, hi, hr, hu, id, it, kk, ko, lt, ms, nb, nl, pl, ptBR, pt, ro, ru, sk, sl, sv, tr, uk, vi, zhCN, zhTW } from 'date-fns/locale';
|
||||||
|
import globalize from 'globalize';
|
||||||
|
|
||||||
|
export function getLocale() {
|
||||||
|
switch (globalize.getCurrentLocale()) {
|
||||||
|
case 'ar':
|
||||||
|
return ar;
|
||||||
|
case 'be-by':
|
||||||
|
return be;
|
||||||
|
case 'bg-bg':
|
||||||
|
return bg;
|
||||||
|
case 'ca':
|
||||||
|
return ca;
|
||||||
|
case 'cs':
|
||||||
|
return cs;
|
||||||
|
case 'da':
|
||||||
|
return da;
|
||||||
|
case 'de':
|
||||||
|
return de;
|
||||||
|
case 'el':
|
||||||
|
return el;
|
||||||
|
case 'en-gb':
|
||||||
|
return enGB;
|
||||||
|
case 'en-us':
|
||||||
|
return enUS;
|
||||||
|
case 'es':
|
||||||
|
return es;
|
||||||
|
case 'es-ar':
|
||||||
|
return es;
|
||||||
|
case 'es-mx':
|
||||||
|
return es;
|
||||||
|
case 'fa':
|
||||||
|
return faIR;
|
||||||
|
case 'fi':
|
||||||
|
return fi;
|
||||||
|
case 'fr':
|
||||||
|
return fr;
|
||||||
|
case 'fr-ca':
|
||||||
|
return frCA;
|
||||||
|
case 'gsw':
|
||||||
|
return de;
|
||||||
|
case 'he':
|
||||||
|
return he;
|
||||||
|
case 'hi-in':
|
||||||
|
return hi;
|
||||||
|
case 'hr':
|
||||||
|
return hr;
|
||||||
|
case 'hu':
|
||||||
|
return hu;
|
||||||
|
case 'id':
|
||||||
|
return id;
|
||||||
|
case 'it':
|
||||||
|
return it;
|
||||||
|
case 'kk':
|
||||||
|
return kk;
|
||||||
|
case 'ko':
|
||||||
|
return ko;
|
||||||
|
case 'lt-lt':
|
||||||
|
return lt;
|
||||||
|
case 'ms':
|
||||||
|
return ms;
|
||||||
|
case 'nb':
|
||||||
|
return nb;
|
||||||
|
case 'nl':
|
||||||
|
return nl;
|
||||||
|
case 'pl':
|
||||||
|
return pl;
|
||||||
|
case 'pt-br':
|
||||||
|
return ptBR;
|
||||||
|
case 'pt-pt':
|
||||||
|
return pt;
|
||||||
|
case 'ro':
|
||||||
|
return ro;
|
||||||
|
case 'ru':
|
||||||
|
return ru;
|
||||||
|
case 'sk':
|
||||||
|
return sk;
|
||||||
|
case 'sl-si':
|
||||||
|
return sl;
|
||||||
|
case 'sv':
|
||||||
|
return sv;
|
||||||
|
case 'tr':
|
||||||
|
return tr;
|
||||||
|
case 'uk':
|
||||||
|
return uk;
|
||||||
|
case 'vi':
|
||||||
|
return vi;
|
||||||
|
case 'zh-cn':
|
||||||
|
return zhCN;
|
||||||
|
case 'zh-hk':
|
||||||
|
return zhCN;
|
||||||
|
case 'zh-tw':
|
||||||
|
return zhTW;
|
||||||
|
default:
|
||||||
|
return enUS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const localeWithSuffix = { addSuffix: true, locale: getLocale() };
|
||||||
|
|
||||||
|
export default {
|
||||||
|
getLocale: getLocale,
|
||||||
|
localeWithSuffix: localeWithSuffix
|
||||||
|
};
|
|
@ -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
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
|
@ -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
|
||||||
|
};
|
||||||
|
|
|
@ -83,7 +83,7 @@ define(["userSettings"], function (userSettings) {
|
||||||
|
|
||||||
if (html += '<div class="listPaging">', showControls) {
|
if (html += '<div class="listPaging">', showControls) {
|
||||||
html += '<span style="vertical-align:middle;">';
|
html += '<span style="vertical-align:middle;">';
|
||||||
html += (totalRecordCount ? startIndex + 1 : 0) + "-" + recordsEnd + " of " + totalRecordCount;
|
html += Globalize.translate("ListPaging", (totalRecordCount ? startIndex + 1 : 0), recordsEnd, totalRecordCount);
|
||||||
html += "</span>";
|
html += "</span>";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
};
|
||||||
|
|
|
@ -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,127 +81,127 @@ 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.libraryPageSize = function (val) {
|
export function libraryPageSize(val) {
|
||||||
if (val != null) {
|
if (val != null) {
|
||||||
return this.set('libraryPageSize', parseInt(val, 10), false);
|
return this.set('libraryPageSize', parseInt(val, 10), false);
|
||||||
}
|
}
|
||||||
|
@ -214,17 +213,17 @@ define(['appSettings', 'events'], function (appSettings, events) {
|
||||||
} else {
|
} else {
|
||||||
return libraryPageSize || 100;
|
return libraryPageSize || 100;
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
UserSettings.prototype.soundEffects = function (val) {
|
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);
|
||||||
|
@ -232,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;
|
||||||
|
@ -245,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 */
|
||||||
});
|
|
|
@ -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);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -574,6 +577,7 @@ var AppInfo = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
require(["mediaSession", "serverNotifications"]);
|
require(["mediaSession", "serverNotifications"]);
|
||||||
|
require(["date-fns", "date-fns/locale"]);
|
||||||
|
|
||||||
if (!browser.tv && !browser.xboxOne) {
|
if (!browser.tv && !browser.xboxOne) {
|
||||||
require(["components/playback/playbackorientation"]);
|
require(["components/playback/playbackorientation"]);
|
||||||
|
@ -647,12 +651,12 @@ var AppInfo = {};
|
||||||
inputManager: "scripts/inputManager",
|
inputManager: "scripts/inputManager",
|
||||||
datetime: "scripts/datetime",
|
datetime: "scripts/datetime",
|
||||||
globalize: "scripts/globalize",
|
globalize: "scripts/globalize",
|
||||||
|
dfnshelper: "scripts/dfnshelper",
|
||||||
libraryMenu: "scripts/librarymenu",
|
libraryMenu: "scripts/librarymenu",
|
||||||
playlisteditor: componentsPath + "/playlisteditor/playlisteditor",
|
playlisteditor: componentsPath + "/playlisteditor/playlisteditor",
|
||||||
medialibrarycreator: componentsPath + "/medialibrarycreator/medialibrarycreator",
|
medialibrarycreator: componentsPath + "/medialibrarycreator/medialibrarycreator",
|
||||||
medialibraryeditor: componentsPath + "/medialibraryeditor/medialibraryeditor",
|
medialibraryeditor: componentsPath + "/medialibraryeditor/medialibraryeditor",
|
||||||
imageoptionseditor: componentsPath + "/imageoptionseditor/imageoptionseditor",
|
imageoptionseditor: componentsPath + "/imageoptionseditor/imageoptionseditor",
|
||||||
humanedate: componentsPath + "/humanedate",
|
|
||||||
apphost: componentsPath + "/apphost",
|
apphost: componentsPath + "/apphost",
|
||||||
visibleinviewport: componentsPath + "/visibleinviewport",
|
visibleinviewport: componentsPath + "/visibleinviewport",
|
||||||
qualityoptions: componentsPath + "/qualityoptions",
|
qualityoptions: componentsPath + "/qualityoptions",
|
||||||
|
@ -693,8 +697,10 @@ var AppInfo = {};
|
||||||
"webcomponents",
|
"webcomponents",
|
||||||
"material-icons",
|
"material-icons",
|
||||||
"jellyfin-noto",
|
"jellyfin-noto",
|
||||||
|
"date-fns",
|
||||||
"page",
|
"page",
|
||||||
"polyfill"
|
"polyfill",
|
||||||
|
"classlist-polyfill"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
urlArgs: urlArgs,
|
urlArgs: urlArgs,
|
||||||
|
@ -703,6 +709,7 @@ var AppInfo = {};
|
||||||
});
|
});
|
||||||
|
|
||||||
require(["polyfill"]);
|
require(["polyfill"]);
|
||||||
|
require(["classlist-polyfill"]);
|
||||||
|
|
||||||
// Expose jQuery globally
|
// Expose jQuery globally
|
||||||
require(["jQuery"], function(jQuery) {
|
require(["jQuery"], function(jQuery) {
|
||||||
|
@ -768,10 +775,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);
|
||||||
|
|
|
@ -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");
|
|
||||||
});
|
|
||||||
};
|
|
||||||
});
|
|
|
@ -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": "الألبوم"
|
||||||
}
|
}
|
||||||
|
|
|
@ -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": "Нулиране на бързия ПИН код"
|
||||||
}
|
}
|
||||||
|
|
|
@ -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."
|
||||||
}
|
}
|
||||||
|
|
|
@ -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"
|
||||||
}
|
}
|
||||||
|
|
|
@ -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",
|
||||||
|
@ -521,7 +522,7 @@
|
||||||
"Images": "Images",
|
"Images": "Images",
|
||||||
"ImportFavoriteChannelsHelp": "If enabled, only channels that are marked as favorite on the tuner device will be imported.",
|
"ImportFavoriteChannelsHelp": "If enabled, only channels that are marked as favorite on the tuner device will be imported.",
|
||||||
"ImportMissingEpisodesHelp": "If enabled, information about missing episodes will be imported into your Jellyfin database and displayed within seasons and series. This may cause significantly longer library scans.",
|
"ImportMissingEpisodesHelp": "If enabled, information about missing episodes will be imported into your Jellyfin database and displayed within seasons and series. This may cause significantly longer library scans.",
|
||||||
"InstallingPackage": "Installing {0}",
|
"InstallingPackage": "Installing {0} (version {1})",
|
||||||
"InstantMix": "Instant mix",
|
"InstantMix": "Instant mix",
|
||||||
"ItemCount": "{0} items",
|
"ItemCount": "{0} items",
|
||||||
"Items": "Items",
|
"Items": "Items",
|
||||||
|
@ -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:",
|
||||||
|
@ -1212,9 +1214,9 @@
|
||||||
"OriginalAirDateValue": "Original air date: {0}",
|
"OriginalAirDateValue": "Original air date: {0}",
|
||||||
"OtherArtist": "Other Artist",
|
"OtherArtist": "Other Artist",
|
||||||
"Overview": "Overview",
|
"Overview": "Overview",
|
||||||
"PackageInstallCancelled": "{0} installation cancelled.",
|
"PackageInstallCancelled": "{0} (version {1}) installation cancelled.",
|
||||||
"PackageInstallCompleted": "{0} installation completed.",
|
"PackageInstallCompleted": "{0} (version {1}) installation completed.",
|
||||||
"PackageInstallFailed": "{0} installation failed.",
|
"PackageInstallFailed": "{0} (version {1}) installation failed.",
|
||||||
"ParentalRating": "Parental rating",
|
"ParentalRating": "Parental rating",
|
||||||
"PasswordMatchError": "Password and password confirmation must match.",
|
"PasswordMatchError": "Password and password confirmation must match.",
|
||||||
"PasswordResetComplete": "The password has been reset.",
|
"PasswordResetComplete": "The password has been reset.",
|
||||||
|
@ -1237,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.",
|
||||||
|
@ -1481,6 +1483,20 @@
|
||||||
"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.",
|
||||||
|
"WriteAccessRequired": "Jellyfin Server requires write access to this folder. Please ensure write access and try again.",
|
||||||
|
"ListPaging": "{0}-{1} of {2}",
|
||||||
|
"PersonRole": "as {0}",
|
||||||
|
"LastSeen": "Last seen {0}",
|
||||||
|
"DailyAt": "Daily at {0}",
|
||||||
|
"WeeklyAt": "{0}s at {1}",
|
||||||
|
"OnWakeFromSleep": "On wake from sleep",
|
||||||
|
"EveryXMinutes": "Every {0} minutes",
|
||||||
|
"EveryHour": "Every hour",
|
||||||
|
"EveryXHours": "Every {0} hours",
|
||||||
|
"OnApplicationStartup": "On application startup"
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,32 +335,32 @@
|
||||||
"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 codigo",
|
"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",
|
||||||
"DefaultSubtitlesHelp": "Los subtítulos se cargan en base a los indicadores por defecto y los indicadores forzados en los metadatos embebidos. Las preferencias de idioma son consideradas cuando existe más de una opción.",
|
"DefaultSubtitlesHelp": "Los subtítulos se cargan en base a los indicadores por defecto y los indicadores forzados en los metadatos embebidos. Las preferencias de idioma son consideradas cuando existe más de una opción.",
|
||||||
"Dislike": "No me gusta",
|
"Dislike": "No me gusta",
|
||||||
"EnableDebugLoggingHelp": "El registro de depuración debería activarse solo a fin de solucionar problemas. El incremento en el acceso al sistema de archivos podría prevenir que el servidor entre en modo de suspensión en algunos entornos.",
|
"EnableDebugLoggingHelp": "El registro de depuración debería activarse solo a fin de solucionar problemas. El incremento en el acceso al sistema de archivos podría prevenir que el servidor entre en modo de suspensión en algunos entornos.",
|
||||||
"EnableDisplayMirroring": "Habilitar duplicación de la pantalla",
|
"EnableDisplayMirroring": "Habilitar duplicación de la pantalla",
|
||||||
"EnableExternalVideoPlayers": "Habilitar reproductores de vídeo 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": "Habilitar 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,45 @@
|
||||||
"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",
|
||||||
|
"HeaderBranding": "Marca",
|
||||||
|
"HeaderBooks": "Libros",
|
||||||
|
"HeaderBlockItemsWithNoRating": "Bloquear elementos con rating de información no reconocible:",
|
||||||
|
"HeaderAutomaticUpdates": "Actualizaciones Automáticas",
|
||||||
|
"HeaderAudioSettings": "Configuración del Audio",
|
||||||
|
"HeaderAudioBooks": "Audiolibros",
|
||||||
|
"HeaderAppearsOn": "Aparece en",
|
||||||
|
"HeaderApp": "Aplicación",
|
||||||
|
"HeaderApiKeysHelp": "Las aplicaciones externas requieren una llave API para poder comunicarse con el servidor Jellyfin. Las llaves se emiten iniciando sesión con una cuenta Jellyfin u otorgando manualmente una clave a la aplicación.",
|
||||||
|
"HeaderApiKeys": "Llaves API",
|
||||||
|
"HeaderApiKey": "Llave API",
|
||||||
|
"HeaderAllowMediaDeletionFrom": "Permitir el borrado de medios desde",
|
||||||
|
"HeaderAlert": "Alerta",
|
||||||
|
"HeaderAlbums": "Albumes",
|
||||||
|
"HeaderAdmin": "Admin",
|
||||||
|
"HeaderAdditionalParts": "Partes adicionales",
|
||||||
|
"HeaderAddUpdateImage": "Agregar/Actualizar imagen",
|
||||||
|
"HeaderAddToPlaylist": "Agregar a la lista de reproducción",
|
||||||
|
"HeaderAddToCollection": "Agregar a la Colección",
|
||||||
|
"HeaderAddScheduledTaskTrigger": "Agregar disparador",
|
||||||
|
"HeaderActivity": "Actividad",
|
||||||
|
"HeaderActiveRecordings": "Grabaciones activas",
|
||||||
|
"HeaderActiveDevices": "Dispositivos activos",
|
||||||
|
"HeaderAccessScheduleHelp": "Crear un calendario de acceso, para limitar el acceso en determinadas horas.",
|
||||||
|
"HeaderAccessSchedule": "Acceder al Calendario",
|
||||||
|
"HardwareAccelerationWarning": "Habilitar la aceleración de hardware puede causar inestabilidad en algunos entornos. Asegúrese de que su sistema operativo y los controladores de video estén completamente actualizados. Si tiene dificultades para reproducir el video después de habilitarlo, deberá volver a cambiar la configuración a \"Nada\".",
|
||||||
|
"HandledByProxy": "Manejado por un proxy reverso",
|
||||||
|
"HDPrograms": "Programas en HD",
|
||||||
|
"EncoderPresetHelp": "Elige un valor más rápido para mejorar la performance, o elige un valor más lento para mejorar la calidad.",
|
||||||
|
"FetchingData": "Obteniendo información adicional",
|
||||||
|
"Episode": "Episodio",
|
||||||
|
"Yesterday": "Ayer",
|
||||||
|
"ClientSettings": "Configuración de cliente",
|
||||||
|
"BoxSet": "Colección",
|
||||||
|
"Artist": "Artista",
|
||||||
|
"AlbumArtist": "Artista del Album",
|
||||||
|
"Album": "Album"
|
||||||
}
|
}
|
||||||
|
|
|
@ -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."
|
||||||
}
|
}
|
||||||
|
|
|
@ -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",
|
||||||
|
@ -425,7 +425,7 @@
|
||||||
"Images": "Imágenes",
|
"Images": "Imágenes",
|
||||||
"ImportFavoriteChannelsHelp": "Si está activado, sólo los canales guardados como favoritos en el sintonizador se importarán.",
|
"ImportFavoriteChannelsHelp": "Si está activado, sólo los canales guardados como favoritos en el sintonizador se importarán.",
|
||||||
"ImportMissingEpisodesHelp": "Si está activada, la información sobre los episodios que faltan se importará en su base de datos Jellyfin y se mostrará en temporadas y series. Esto puede causar exploraciones de bibliotecas significativamente más largas.",
|
"ImportMissingEpisodesHelp": "Si está activada, la información sobre los episodios que faltan se importará en su base de datos Jellyfin y se mostrará en temporadas y series. Esto puede causar exploraciones de bibliotecas significativamente más largas.",
|
||||||
"InstallingPackage": "Instalando {0}",
|
"InstallingPackage": "Instalando {0} (versión {1})",
|
||||||
"InstantMix": "Mix instantáneo",
|
"InstantMix": "Mix instantáneo",
|
||||||
"ItemCount": "Elementos {0}",
|
"ItemCount": "Elementos {0}",
|
||||||
"Items": "Elemento",
|
"Items": "Elemento",
|
||||||
|
@ -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",
|
||||||
|
@ -998,10 +998,10 @@
|
||||||
"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} (versión {1}) instalación completada.",
|
||||||
"PackageInstallFailed": "{0} 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:",
|
||||||
|
@ -1477,5 +1477,28 @@
|
||||||
"AllowFfmpegThrottling": "Acelerar transcodificación",
|
"AllowFfmpegThrottling": "Acelerar transcodificación",
|
||||||
"ClientSettings": "Ajustes de cliente",
|
"ClientSettings": "Ajustes de cliente",
|
||||||
"PreferEmbeddedEpisodeInfosOverFileNames": "Priorizar la información embebida sobre los nombres de archivos",
|
"PreferEmbeddedEpisodeInfosOverFileNames": "Priorizar la información embebida sobre los nombres de archivos",
|
||||||
"PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Usar la información de episodio de los metadatos embebidos si está disponible."
|
"PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Usar la información de episodio de los metadatos embebidos si está disponible.",
|
||||||
|
"PathNotFound": "No se encontró la ruta especificada. Asegúrate de que existe e inténtalo de nuevo.",
|
||||||
|
"WriteAccessRequired": "Jellyfin requiere de permisos de escritura en esta carpeta. Asegúrate de que existe este permiso e inténtalo de nuevo.",
|
||||||
|
"ListPaging": "{0}-{1} de {2}",
|
||||||
|
"PersonRole": "como {0}",
|
||||||
|
"LastSeen": "Última vez {0}",
|
||||||
|
"DailyAt": "Diariamente a las {0}",
|
||||||
|
"WeeklyAt": "Los {0}s a las {1}",
|
||||||
|
"OnWakeFromSleep": "Al reanudar el servidor",
|
||||||
|
"EveryXMinutes": "Cada {0} minutos",
|
||||||
|
"EveryHour": "Cada hora",
|
||||||
|
"EveryXHours": "Cada {0} horas",
|
||||||
|
"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"
|
||||||
}
|
}
|
||||||
|
|
|
@ -476,7 +476,7 @@
|
||||||
"Identify": "Identifier",
|
"Identify": "Identifier",
|
||||||
"ImportFavoriteChannelsHelp": "Activez cette option pour n'importer que les chaînes ajoutées aux favoris sur le tuner.",
|
"ImportFavoriteChannelsHelp": "Activez cette option pour n'importer que les chaînes ajoutées aux favoris sur le tuner.",
|
||||||
"ImportMissingEpisodesHelp": "Les informations à propos des épisodes manquants seront importées dans votre base de donnée Jellyfin et affichées dans les saisons et séries. Cela peut accroître significativement la durée d'actualisation de la médiathèque.",
|
"ImportMissingEpisodesHelp": "Les informations à propos des épisodes manquants seront importées dans votre base de donnée Jellyfin et affichées dans les saisons et séries. Cela peut accroître significativement la durée d'actualisation de la médiathèque.",
|
||||||
"InstallingPackage": "Installation de {0}",
|
"InstallingPackage": "Installation de {0} (version {1})",
|
||||||
"InstantMix": "Mix instantané",
|
"InstantMix": "Mix instantané",
|
||||||
"ItemCount": "{0} éléments",
|
"ItemCount": "{0} éléments",
|
||||||
"Items": "Éléments",
|
"Items": "Éléments",
|
||||||
|
@ -1058,7 +1058,7 @@
|
||||||
"OptionReportByteRangeSeekingWhenTranscodingHelp": "Nécessaire pour certains appareils qui ne sont pas capables d'effectuer une recherche dans le temps correctement.",
|
"OptionReportByteRangeSeekingWhenTranscodingHelp": "Nécessaire pour certains appareils qui ne sont pas capables d'effectuer une recherche dans le temps correctement.",
|
||||||
"OptionRequirePerfectSubtitleMatch": "Télécharger uniquement les sous-titres qui correspondent parfaitement à mes fichiers vidéo",
|
"OptionRequirePerfectSubtitleMatch": "Télécharger uniquement les sous-titres qui correspondent parfaitement à mes fichiers vidéo",
|
||||||
"OptionRequirePerfectSubtitleMatchHelp": "En activant cette option, seuls les sous-titres ayant été testés et vérifiés avec votre fichier vidéo seront téléchargés. En désactivant cette option, vous aurez plus de chance que des sous-titres soient téléchargés, mais ils risquent d'être décalés ou incorrects.",
|
"OptionRequirePerfectSubtitleMatchHelp": "En activant cette option, seuls les sous-titres ayant été testés et vérifiés avec votre fichier vidéo seront téléchargés. En désactivant cette option, vous aurez plus de chance que des sous-titres soient téléchargés, mais ils risquent d'être décalés ou incorrects.",
|
||||||
"OptionResElement": "res element",
|
"OptionResElement": "Résolution d'élément",
|
||||||
"OptionResumable": "Reprise possible",
|
"OptionResumable": "Reprise possible",
|
||||||
"OptionRuntime": "Durée",
|
"OptionRuntime": "Durée",
|
||||||
"OptionSaturday": "Samedi",
|
"OptionSaturday": "Samedi",
|
||||||
|
@ -1080,9 +1080,9 @@
|
||||||
"OptionWeekly": "Hebdomadaire",
|
"OptionWeekly": "Hebdomadaire",
|
||||||
"OriginalAirDateValue": "Date de diffusion originale : {0}",
|
"OriginalAirDateValue": "Date de diffusion originale : {0}",
|
||||||
"Overview": "Synopsis",
|
"Overview": "Synopsis",
|
||||||
"PackageInstallCancelled": "L'installation de {0} a été annulée.",
|
"PackageInstallCancelled": "L'installation de {0} (version {1}) a été annulée.",
|
||||||
"PackageInstallCompleted": "L'installation de {0} est terminée.",
|
"PackageInstallCompleted": "L'installation de {0} (version {1}) est terminée.",
|
||||||
"PackageInstallFailed": "L'installation de {0} a échoué.",
|
"PackageInstallFailed": "L'installation de {0} (version {1}) a échoué.",
|
||||||
"ParentalRating": "Classification parentale",
|
"ParentalRating": "Classification parentale",
|
||||||
"PasswordMatchError": "Le mot de passe et sa confirmation doivent correspondre.",
|
"PasswordMatchError": "Le mot de passe et sa confirmation doivent correspondre.",
|
||||||
"PasswordResetComplete": "Le mot de passe a été réinitialisé.",
|
"PasswordResetComplete": "Le mot de passe a été réinitialisé.",
|
||||||
|
@ -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 d’une 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 d’une 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 n’a 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",
|
||||||
|
@ -1482,5 +1482,21 @@
|
||||||
"BoxSet": "Coffret",
|
"BoxSet": "Coffret",
|
||||||
"Artist": "Artiste",
|
"Artist": "Artiste",
|
||||||
"AlbumArtist": "Artiste de l'Album",
|
"AlbumArtist": "Artiste de l'Album",
|
||||||
"Album": "Album"
|
"Album": "Album",
|
||||||
|
"OnApplicationStartup": "Au démarrage de l'application",
|
||||||
|
"EveryXHours": "Toutes les {0} heures",
|
||||||
|
"EveryHour": "Toutes les heures",
|
||||||
|
"EveryXMinutes": "Toutes les {0} minutes",
|
||||||
|
"OnWakeFromSleep": "À la sortie de veille",
|
||||||
|
"WeeklyAt": "{0} à {1}",
|
||||||
|
"DailyAt": "Tous les jours à {0}",
|
||||||
|
"LastSeen": "Vu pour la dernière fois {0}",
|
||||||
|
"PersonRole": "en tant que {0}",
|
||||||
|
"ListPaging": "{0}-{1} de {2}",
|
||||||
|
"WriteAccessRequired": "Le serveur Jellyfin a besoin d'un accès en écriture à ce dossier. Merci de vérifier l’accè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.",
|
||||||
|
"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é."
|
||||||
}
|
}
|
||||||
|
|
|
@ -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"
|
||||||
}
|
}
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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"
|
||||||
}
|
}
|
||||||
|
|
|
@ -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": "앨범"
|
||||||
}
|
}
|
||||||
|
|
|
@ -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"
|
||||||
}
|
}
|
||||||
|
|
|
@ -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."
|
||||||
}
|
}
|
||||||
|
|
|
@ -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"
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,5 +95,6 @@
|
||||||
"AllChannels": "Сви канали",
|
"AllChannels": "Сви канали",
|
||||||
"All": "Све",
|
"All": "Све",
|
||||||
"Alerts": "Упозорења",
|
"Alerts": "Упозорења",
|
||||||
"Aired": "Емитовано"
|
"Aired": "Емитовано",
|
||||||
|
"Absolute": "Апсолутно"
|
||||||
}
|
}
|
||||||
|
|
|
@ -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"
|
||||||
}
|
}
|
||||||
|
|
|
@ -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"
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,31 +2,31 @@
|
||||||
"AccessRestrictedTryAgainLater": "目前访问受限。请稍后再试。",
|
"AccessRestrictedTryAgainLater": "目前访问受限。请稍后再试。",
|
||||||
"Actor": "演员",
|
"Actor": "演员",
|
||||||
"Add": "添加",
|
"Add": "添加",
|
||||||
"AddItemToCollectionHelp": "通过搜索并使用鼠标右键单击或点击菜单将项目添加到集合中, 将项目添加到集合中。",
|
"AddItemToCollectionHelp": "通过搜索项目并右键或轻触得到的弹出菜单来将项目添加到集合中。",
|
||||||
"AddToCollection": "加入收藏",
|
"AddToCollection": "加入集合",
|
||||||
"AddToPlayQueue": "添加至播放队列",
|
"AddToPlayQueue": "添加至播放队列",
|
||||||
"AddToPlaylist": "添加到播放列表",
|
"AddToPlaylist": "添加至播放列表",
|
||||||
"AddedOnValue": "已添加 {0}",
|
"AddedOnValue": "已添加 {0}",
|
||||||
"AdditionalNotificationServices": "浏览插件目录来安装额外的通知访问服务。",
|
"AdditionalNotificationServices": "浏览插件目录来安装额外的通知访问服务。",
|
||||||
"AirDate": "播出日期",
|
"AirDate": "播出日期",
|
||||||
"Aired": "已发布",
|
"Aired": "已播出",
|
||||||
"Albums": "专辑",
|
"Albums": "专辑",
|
||||||
"Alerts": "警告",
|
"Alerts": "警告",
|
||||||
"All": "全部",
|
"All": "全部",
|
||||||
"AllChannels": "所有频道",
|
"AllChannels": "所有频道",
|
||||||
"AllComplexFormats": "所有高级特效格式字幕(ASS, SSA, VOBSUB, PGS, SUB/IDX 等)",
|
"AllComplexFormats": "所有复杂格式字幕 (ASS, SSA, VOBSUB, PGS, SUB, IDX 等)",
|
||||||
"AllEpisodes": "所有剧集",
|
"AllEpisodes": "所有剧集",
|
||||||
"AllLanguages": "所有语言",
|
"AllLanguages": "所有语言",
|
||||||
"AllLibraries": "所有媒体库",
|
"AllLibraries": "所有媒体库",
|
||||||
"AllowHWTranscodingHelp": "允许调谐器即时转码。这可能有助于减少Jellyfin 媒体服务器的转码工作。",
|
"AllowHWTranscodingHelp": "允许调谐器即时转码。这可能有助于减少Jellyfin 媒体服务器的转码工作。",
|
||||||
"AllowMediaConversion": "允许媒体转换",
|
"AllowMediaConversion": "允许媒体转换",
|
||||||
"AllowMediaConversionHelp": "授予或拒绝访问转换媒体功能。",
|
"AllowMediaConversionHelp": "授予或拒绝访问媒体转换功能。",
|
||||||
"AllowOnTheFlySubtitleExtraction": "允许同时提取字幕",
|
"AllowOnTheFlySubtitleExtraction": "允许实时提取字幕",
|
||||||
"AllowOnTheFlySubtitleExtractionHelp": "为避免视频转码,可以从视频中提取内置的字幕,并以纯文本的形式发送给客户端。在某些系统中这个提取的进程可能会花费较长时间并导致视频播放出现卡顿。如果禁用这个选项,当内置字幕不能被客户端设备原生支持时,字幕将通过视频转码被烧录进视频中。",
|
"AllowOnTheFlySubtitleExtractionHelp": "为避免视频转码,可以从视频中提取内置的字幕,并以纯文本的形式发送给客户端。在某些系统中这个提取的进程可能会花费较长时间并导致视频播放出现卡顿。如果禁用这个选项,当内置字幕不能被客户端设备原生支持时,字幕将通过视频转码被烧录进视频中。",
|
||||||
"AllowRemoteAccess": "允许与此 Jellyfin 服务器进行远程连接。",
|
"AllowRemoteAccess": "允许与此 Jellyfin 服务器进行远程连接。",
|
||||||
"AllowRemoteAccessHelp": "如果取消勾选,所有的远程连接将会被阻止。",
|
"AllowRemoteAccessHelp": "如果取消勾选,所有的远程连接将会被阻止。",
|
||||||
"AllowedRemoteAddressesHelp": "将允许远程连接的网络的 ip 地址或 ip/网掩码条目的逗号分隔列表。如果留空, 则允许所有远程地址。",
|
"AllowedRemoteAddressesHelp": "允许远程连接的 IP 地址或 IP/子网掩码 的列表,以逗号分隔。如果留空,则允许所有远程地址。",
|
||||||
"AlwaysPlaySubtitles": "总是显示字幕",
|
"AlwaysPlaySubtitles": "总是显示",
|
||||||
"AlwaysPlaySubtitlesHelp": "无论音频为何种语言,都将加载与语言偏好匹配的字幕。",
|
"AlwaysPlaySubtitlesHelp": "无论音频为何种语言,都将加载与语言偏好匹配的字幕。",
|
||||||
"Anytime": "任何时间",
|
"Anytime": "任何时间",
|
||||||
"AroundTime": "{0} 左右",
|
"AroundTime": "{0} 左右",
|
||||||
|
@ -48,7 +48,7 @@
|
||||||
"Books": "书籍",
|
"Books": "书籍",
|
||||||
"Browse": "浏览",
|
"Browse": "浏览",
|
||||||
"BrowsePluginCatalogMessage": "浏览我们的插件目录来查看现有插件。",
|
"BrowsePluginCatalogMessage": "浏览我们的插件目录来查看现有插件。",
|
||||||
"BurnSubtitlesHelp": "根据字幕格式确定服务器在转换视频时是否应压制字幕。避免压制字幕会提高服务器性能。选择“自动”以压制基于图像的字幕格式(如 VOBSUB, PGS, SUB/IDX 等)和一些复杂的 ASS/SSA 字幕。",
|
"BurnSubtitlesHelp": "服务器在转换视频时是否应压制字幕。避免压制字幕会提高服务器性能。选择“自动”以压制基于图像的字幕格式(如 VOBSUB, PGS, SUB, IDX 等)和一些复杂的 ASS/SSA 字幕。",
|
||||||
"ButtonAdd": "添加",
|
"ButtonAdd": "添加",
|
||||||
"ButtonAddMediaLibrary": "添加媒体库",
|
"ButtonAddMediaLibrary": "添加媒体库",
|
||||||
"ButtonAddScheduledTaskTrigger": "添加触发器",
|
"ButtonAddScheduledTaskTrigger": "添加触发器",
|
||||||
|
@ -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": "儿童",
|
||||||
|
@ -921,9 +921,9 @@
|
||||||
"Normal": "普通",
|
"Normal": "普通",
|
||||||
"NumLocationsValue": "{0} 个文件夹",
|
"NumLocationsValue": "{0} 个文件夹",
|
||||||
"OneChannel": "一个频道",
|
"OneChannel": "一个频道",
|
||||||
"OnlyForcedSubtitles": "只显示强制字幕",
|
"OnlyForcedSubtitles": "仅强制字幕",
|
||||||
"OnlyForcedSubtitlesHelp": "只有被标记为“强制”的字幕会被加载。",
|
"OnlyForcedSubtitlesHelp": "只有被标记为“强制”的字幕会被加载。",
|
||||||
"OnlyImageFormats": "仅图像格式(VOBSUB, PGS, SUB等)",
|
"OnlyImageFormats": "仅图像格式(VOBSUB, PGS, SUB 等)",
|
||||||
"OptionAdminUsers": "管理员",
|
"OptionAdminUsers": "管理员",
|
||||||
"OptionAlbum": "专辑",
|
"OptionAlbum": "专辑",
|
||||||
"OptionAlbumArtist": "专辑艺术家",
|
"OptionAlbumArtist": "专辑艺术家",
|
||||||
|
@ -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": "密码已重置。",
|
||||||
|
@ -1334,9 +1334,9 @@
|
||||||
"AuthProviderHelp": "选择用于验证此用户密码的身份验证提供者。",
|
"AuthProviderHelp": "选择用于验证此用户密码的身份验证提供者。",
|
||||||
"ColorPrimaries": "基色",
|
"ColorPrimaries": "基色",
|
||||||
"ConfigureDateAdded": "在Jellyfin Server仪表板媒体库的设置里确认如何添加日期",
|
"ConfigureDateAdded": "在Jellyfin Server仪表板媒体库的设置里确认如何添加日期",
|
||||||
"DisplayModeHelp": "选择您正在运行Jellyfin的屏幕类型。",
|
"DisplayModeHelp": "选择您想要的界面布局风格。",
|
||||||
"EnableColorCodedBackgrounds": "彩色背景",
|
"EnableColorCodedBackgrounds": "彩色背景",
|
||||||
"ErrorDeletingItem": "服务器删除项目时出错。请确认服务器具有对媒体文件夹的写入权限并重试。",
|
"ErrorDeletingItem": "从 Jellyfin Server 删除项目时出错。请确认 Jellyfin Server 是否拥有对媒体目录的写权限,然后重试。",
|
||||||
"GroupBySeries": "按系列分组",
|
"GroupBySeries": "按系列分组",
|
||||||
"HeaderApp": "应用程序",
|
"HeaderApp": "应用程序",
|
||||||
"DirectStreamHelp1": "该媒体文件的分辨率和编码(H.264、AC3 等)与您的设备兼容,但容器格式(.mkv、.avi、.wmv 等)不受支持。因此,视频在串流至您的设备之前将会被即时封装为另一种格式。",
|
"DirectStreamHelp1": "该媒体文件的分辨率和编码(H.264、AC3 等)与您的设备兼容,但容器格式(.mkv、.avi、.wmv 等)不受支持。因此,视频在串流至您的设备之前将会被即时封装为另一种格式。",
|
||||||
|
@ -1470,10 +1470,37 @@
|
||||||
"OptionForceRemoteSourceTranscoding": "强制远程转码(像电视直播一样)",
|
"OptionForceRemoteSourceTranscoding": "强制远程转码(像电视直播一样)",
|
||||||
"NoCreatedLibraries": "看上去您还未创建任何资料库。{0} 您想现在创建一个吗? {1}",
|
"NoCreatedLibraries": "看上去您还未创建任何资料库。{0} 您想现在创建一个吗? {1}",
|
||||||
"AskAdminToCreateLibrary": "请联系管理员以创建一个新的资料库。",
|
"AskAdminToCreateLibrary": "请联系管理员以创建一个新的资料库。",
|
||||||
"PlaybackErrorNoCompatibleStream": "客户端配置文件存在问题,服务器未发送兼容的媒体格式。",
|
"PlaybackErrorNoCompatibleStream": "该客户端与媒体不兼容,服务器未发送兼容的媒体格式。",
|
||||||
"AllowFfmpegThrottlingHelp": "当转码或再封装的进度大幅超过当前播放位置时,暂停该进程,以使其消耗更少的资源。在观看时不经常调整播放进度的情况下,这将非常有用。如果遇到播放问题,请关闭此功能。",
|
"AllowFfmpegThrottlingHelp": "当转码或者再封装的进度距离当前播放进度足够远时,暂停这个过程以减少资源消耗。当观看视频时不经常调整播放进度的情况下,这个功能将非常有用。如果你遇到了播放问题,请关闭这个选项。",
|
||||||
"AllowFfmpegThrottling": "限制转码速度",
|
"AllowFfmpegThrottling": "限制转码速度",
|
||||||
"PreferEmbeddedEpisodeInfosOverFileNames": "优先使用内置的剧集信息而不是文件名",
|
"PreferEmbeddedEpisodeInfosOverFileNames": "优先使用内置的剧集信息而不是文件名",
|
||||||
"PreferEmbeddedEpisodeInfosOverFileNamesHelp": "这将在内置元数据含剧集信息时使用内置信息。",
|
"PreferEmbeddedEpisodeInfosOverFileNamesHelp": "这将在内置元数据含剧集信息时使用内置信息。",
|
||||||
"ClientSettings": "客户端设置"
|
"ClientSettings": "客户端设置",
|
||||||
|
"Track": "音轨",
|
||||||
|
"Season": "季",
|
||||||
|
"ReleaseGroup": "发行组",
|
||||||
|
"Person": "人物",
|
||||||
|
"OtherArtist": "其他艺术家",
|
||||||
|
"Movie": "电影",
|
||||||
|
"Episode": "剧集",
|
||||||
|
"BoxSet": "套装",
|
||||||
|
"Artist": "艺术家",
|
||||||
|
"AlbumArtist": "专辑艺术家",
|
||||||
|
"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": "选择对隔行扫描内容进行转码时所用的反交错方法。"
|
||||||
}
|
}
|
||||||
|
|
|
@ -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"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -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"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
146
yarn.lock
146
yarn.lock
|
@ -1354,6 +1354,15 @@ array-flatten@^2.1.0:
|
||||||
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099"
|
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099"
|
||||||
integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==
|
integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==
|
||||||
|
|
||||||
|
array-includes@^3.0.3:
|
||||||
|
version "3.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348"
|
||||||
|
integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==
|
||||||
|
dependencies:
|
||||||
|
define-properties "^1.1.3"
|
||||||
|
es-abstract "^1.17.0"
|
||||||
|
is-string "^1.0.5"
|
||||||
|
|
||||||
array-initial@^1.0.0:
|
array-initial@^1.0.0:
|
||||||
version "1.1.0"
|
version "1.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/array-initial/-/array-initial-1.1.0.tgz#2fa74b26739371c3947bd7a7adc73be334b3d795"
|
resolved "https://registry.yarnpkg.com/array-initial/-/array-initial-1.1.0.tgz#2fa74b26739371c3947bd7a7adc73be334b3d795"
|
||||||
|
@ -1405,6 +1414,14 @@ array-unique@^0.3.2:
|
||||||
resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
|
resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
|
||||||
integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
|
integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
|
||||||
|
|
||||||
|
array.prototype.flat@^1.2.1:
|
||||||
|
version "1.2.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b"
|
||||||
|
integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==
|
||||||
|
dependencies:
|
||||||
|
define-properties "^1.1.3"
|
||||||
|
es-abstract "^1.17.0-next.1"
|
||||||
|
|
||||||
arraybuffer.slice@~0.0.7:
|
arraybuffer.slice@~0.0.7:
|
||||||
version "0.0.7"
|
version "0.0.7"
|
||||||
resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675"
|
resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675"
|
||||||
|
@ -2320,6 +2337,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"
|
||||||
|
@ -2665,6 +2686,11 @@ constants-browserify@^1.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
|
resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
|
||||||
integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
|
integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
|
||||||
|
|
||||||
|
contains-path@^0.1.0:
|
||||||
|
version "0.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
|
||||||
|
integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=
|
||||||
|
|
||||||
content-disposition@0.5.3, content-disposition@^0.5.2:
|
content-disposition@0.5.3, content-disposition@^0.5.2:
|
||||||
version "0.5.3"
|
version "0.5.3"
|
||||||
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd"
|
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd"
|
||||||
|
@ -3085,6 +3111,11 @@ dashdash@^1.12.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
assert-plus "^1.0.0"
|
assert-plus "^1.0.0"
|
||||||
|
|
||||||
|
date-fns@^2.11.1:
|
||||||
|
version "2.11.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.11.1.tgz#197b8be1bbf5c5e6fe8bea817f0fe111820e7a12"
|
||||||
|
integrity sha512-3RdUoinZ43URd2MJcquzBbDQo+J87cSzB8NkXdZiN5ia1UNyep0oCyitfiL88+R7clGTeq/RniXAc16gWyAu1w==
|
||||||
|
|
||||||
dateformat@^2.0.0:
|
dateformat@^2.0.0:
|
||||||
version "2.2.0"
|
version "2.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062"
|
resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062"
|
||||||
|
@ -3099,7 +3130,7 @@ debug-fabulous@1.X:
|
||||||
memoizee "0.4.X"
|
memoizee "0.4.X"
|
||||||
object-assign "4.X"
|
object-assign "4.X"
|
||||||
|
|
||||||
debug@2.6.9, debug@^2.2.0, debug@^2.3.3:
|
debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9:
|
||||||
version "2.6.9"
|
version "2.6.9"
|
||||||
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
|
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
|
||||||
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
|
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
|
||||||
|
@ -3397,6 +3428,14 @@ dns-txt@^2.0.2:
|
||||||
dependencies:
|
dependencies:
|
||||||
buffer-indexof "^1.0.0"
|
buffer-indexof "^1.0.0"
|
||||||
|
|
||||||
|
doctrine@1.5.0:
|
||||||
|
version "1.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
|
||||||
|
integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=
|
||||||
|
dependencies:
|
||||||
|
esutils "^2.0.2"
|
||||||
|
isarray "^1.0.0"
|
||||||
|
|
||||||
doctrine@^3.0.0:
|
doctrine@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
|
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
|
||||||
|
@ -3758,7 +3797,7 @@ error-ex@^1.2.0, error-ex@^1.3.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
is-arrayish "^0.2.1"
|
is-arrayish "^0.2.1"
|
||||||
|
|
||||||
es-abstract@^1.17.0-next.1, es-abstract@^1.17.2:
|
es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2:
|
||||||
version "1.17.5"
|
version "1.17.5"
|
||||||
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9"
|
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9"
|
||||||
integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==
|
integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==
|
||||||
|
@ -3840,6 +3879,53 @@ escape-string-regexp@^2.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
|
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
|
||||||
integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
|
integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
|
||||||
|
|
||||||
|
eslint-import-resolver-node@^0.3.2:
|
||||||
|
version "0.3.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz#dbaa52b6b2816b50bc6711af75422de808e98404"
|
||||||
|
integrity sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg==
|
||||||
|
dependencies:
|
||||||
|
debug "^2.6.9"
|
||||||
|
resolve "^1.13.1"
|
||||||
|
|
||||||
|
eslint-module-utils@^2.4.1:
|
||||||
|
version "2.6.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6"
|
||||||
|
integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==
|
||||||
|
dependencies:
|
||||||
|
debug "^2.6.9"
|
||||||
|
pkg-dir "^2.0.0"
|
||||||
|
|
||||||
|
eslint-plugin-eslint-comments@^3.1.2:
|
||||||
|
version "3.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.1.2.tgz#4ef6c488dbe06aa1627fea107b3e5d059fc8a395"
|
||||||
|
integrity sha512-QexaqrNeteFfRTad96W+Vi4Zj1KFbkHHNMMaHZEYcovKav6gdomyGzaxSDSL3GoIyUOo078wRAdYlu1caiauIQ==
|
||||||
|
dependencies:
|
||||||
|
escape-string-regexp "^1.0.5"
|
||||||
|
ignore "^5.0.5"
|
||||||
|
|
||||||
|
eslint-plugin-import@^2.20.2:
|
||||||
|
version "2.20.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz#91fc3807ce08be4837141272c8b99073906e588d"
|
||||||
|
integrity sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg==
|
||||||
|
dependencies:
|
||||||
|
array-includes "^3.0.3"
|
||||||
|
array.prototype.flat "^1.2.1"
|
||||||
|
contains-path "^0.1.0"
|
||||||
|
debug "^2.6.9"
|
||||||
|
doctrine "1.5.0"
|
||||||
|
eslint-import-resolver-node "^0.3.2"
|
||||||
|
eslint-module-utils "^2.4.1"
|
||||||
|
has "^1.0.3"
|
||||||
|
minimatch "^3.0.4"
|
||||||
|
object.values "^1.1.0"
|
||||||
|
read-pkg-up "^2.0.0"
|
||||||
|
resolve "^1.12.0"
|
||||||
|
|
||||||
|
eslint-plugin-promise@^4.2.1:
|
||||||
|
version "4.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz#845fd8b2260ad8f82564c1222fce44ad71d9418a"
|
||||||
|
integrity sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw==
|
||||||
|
|
||||||
eslint-scope@^4.0.3:
|
eslint-scope@^4.0.3:
|
||||||
version "4.0.3"
|
version "4.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
|
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
|
||||||
|
@ -4424,7 +4510,7 @@ find-up@^1.0.0:
|
||||||
path-exists "^2.0.0"
|
path-exists "^2.0.0"
|
||||||
pinkie-promise "^2.0.0"
|
pinkie-promise "^2.0.0"
|
||||||
|
|
||||||
find-up@^2.0.0:
|
find-up@^2.0.0, find-up@^2.1.0:
|
||||||
version "2.1.0"
|
version "2.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
|
resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
|
||||||
integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
|
integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
|
||||||
|
@ -5644,7 +5730,7 @@ ignore@^4.0.3, ignore@^4.0.6:
|
||||||
resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
|
resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
|
||||||
integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
|
integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
|
||||||
|
|
||||||
ignore@^5.0.4, ignore@^5.1.1, ignore@^5.1.4:
|
ignore@^5.0.4, ignore@^5.0.5, ignore@^5.1.1, ignore@^5.1.4:
|
||||||
version "5.1.4"
|
version "5.1.4"
|
||||||
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf"
|
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf"
|
||||||
integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==
|
integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==
|
||||||
|
@ -6247,6 +6333,11 @@ is-stream@^1.0.0, is-stream@^1.1.0:
|
||||||
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
|
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
|
||||||
integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
|
integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
|
||||||
|
|
||||||
|
is-string@^1.0.5:
|
||||||
|
version "1.0.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6"
|
||||||
|
integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==
|
||||||
|
|
||||||
is-supported-regexp-flag@^1.0.0:
|
is-supported-regexp-flag@^1.0.0:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.1.tgz#21ee16518d2c1dd3edd3e9a0d57e50207ac364ca"
|
resolved "https://registry.yarnpkg.com/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.1.tgz#21ee16518d2c1dd3edd3e9a0d57e50207ac364ca"
|
||||||
|
@ -6603,6 +6694,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"
|
||||||
|
@ -6643,6 +6738,16 @@ load-json-file@^1.0.0:
|
||||||
pinkie-promise "^2.0.0"
|
pinkie-promise "^2.0.0"
|
||||||
strip-bom "^2.0.0"
|
strip-bom "^2.0.0"
|
||||||
|
|
||||||
|
load-json-file@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
|
||||||
|
integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=
|
||||||
|
dependencies:
|
||||||
|
graceful-fs "^4.1.2"
|
||||||
|
parse-json "^2.2.0"
|
||||||
|
pify "^2.0.0"
|
||||||
|
strip-bom "^3.0.0"
|
||||||
|
|
||||||
load-json-file@^4.0.0:
|
load-json-file@^4.0.0:
|
||||||
version "4.0.0"
|
version "4.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
|
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
|
||||||
|
@ -8294,6 +8399,13 @@ path-type@^1.0.0:
|
||||||
pify "^2.0.0"
|
pify "^2.0.0"
|
||||||
pinkie-promise "^2.0.0"
|
pinkie-promise "^2.0.0"
|
||||||
|
|
||||||
|
path-type@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
|
||||||
|
integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=
|
||||||
|
dependencies:
|
||||||
|
pify "^2.0.0"
|
||||||
|
|
||||||
path-type@^3.0.0:
|
path-type@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
|
resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
|
||||||
|
@ -8359,6 +8471,13 @@ pinkie@^2.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
|
resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
|
||||||
integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
|
integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
|
||||||
|
|
||||||
|
pkg-dir@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
|
||||||
|
integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=
|
||||||
|
dependencies:
|
||||||
|
find-up "^2.1.0"
|
||||||
|
|
||||||
pkg-dir@^3.0.0:
|
pkg-dir@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
|
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
|
||||||
|
@ -9424,6 +9543,14 @@ read-pkg-up@^1.0.1:
|
||||||
find-up "^1.0.0"
|
find-up "^1.0.0"
|
||||||
read-pkg "^1.0.0"
|
read-pkg "^1.0.0"
|
||||||
|
|
||||||
|
read-pkg-up@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
|
||||||
|
integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=
|
||||||
|
dependencies:
|
||||||
|
find-up "^2.0.0"
|
||||||
|
read-pkg "^2.0.0"
|
||||||
|
|
||||||
read-pkg-up@^3.0.0:
|
read-pkg-up@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07"
|
resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07"
|
||||||
|
@ -9450,6 +9577,15 @@ read-pkg@^1.0.0:
|
||||||
normalize-package-data "^2.3.2"
|
normalize-package-data "^2.3.2"
|
||||||
path-type "^1.0.0"
|
path-type "^1.0.0"
|
||||||
|
|
||||||
|
read-pkg@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
|
||||||
|
integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=
|
||||||
|
dependencies:
|
||||||
|
load-json-file "^2.0.0"
|
||||||
|
normalize-package-data "^2.3.2"
|
||||||
|
path-type "^2.0.0"
|
||||||
|
|
||||||
read-pkg@^3.0.0:
|
read-pkg@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
|
resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
|
||||||
|
@ -9828,7 +9964,7 @@ resolve-url@^0.2.1:
|
||||||
resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
|
resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
|
||||||
integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
|
integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
|
||||||
|
|
||||||
resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.4.0:
|
resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.3.2, resolve@^1.4.0:
|
||||||
version "1.15.1"
|
version "1.15.1"
|
||||||
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8"
|
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8"
|
||||||
integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==
|
integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue