mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
Merge branch 'master' into migrated-livetvseriestimers-to-es6-module
This commit is contained in:
commit
aeb5e944d4
134 changed files with 2913 additions and 3049 deletions
|
@ -29,7 +29,7 @@ module.exports = {
|
||||||
],
|
],
|
||||||
rules: {
|
rules: {
|
||||||
'block-spacing': ['error'],
|
'block-spacing': ['error'],
|
||||||
'brace-style': ['error', "1tbs", { "allowSingleLine": true }],
|
'brace-style': ['error', '1tbs', { 'allowSingleLine': true }],
|
||||||
'comma-dangle': ['error', 'never'],
|
'comma-dangle': ['error', 'never'],
|
||||||
'comma-spacing': ['error'],
|
'comma-spacing': ['error'],
|
||||||
'eol-last': ['error'],
|
'eol-last': ['error'],
|
||||||
|
@ -41,7 +41,7 @@ module.exports = {
|
||||||
'no-multiple-empty-lines': ['error', { 'max': 1 }],
|
'no-multiple-empty-lines': ['error', { 'max': 1 }],
|
||||||
'no-trailing-spaces': ['error'],
|
'no-trailing-spaces': ['error'],
|
||||||
'no-unused-expressions': ['error', { 'allowShortCircuit': true, 'allowTernary': true, 'allowTaggedTemplates': true }],
|
'no-unused-expressions': ['error', { 'allowShortCircuit': true, 'allowTernary': true, 'allowTaggedTemplates': true }],
|
||||||
"no-unused-vars": ["error", { "vars": "all", "args": "none", "ignoreRestSiblings": true }],
|
'no-unused-vars': ['error', { 'vars': 'all', 'args': 'none', 'ignoreRestSiblings': true }],
|
||||||
'one-var': ['error', 'never'],
|
'one-var': ['error', 'never'],
|
||||||
'padded-blocks': ['error', 'never'],
|
'padded-blocks': ['error', 'never'],
|
||||||
'quotes': ['error', 'single', { 'avoidEscape': true, 'allowTemplateLiterals': false }],
|
'quotes': ['error', 'single', { 'avoidEscape': true, 'allowTemplateLiterals': false }],
|
||||||
|
|
|
@ -35,6 +35,7 @@
|
||||||
- [Thibault Nocchi](https://github.com/ThibaultNocchi)
|
- [Thibault Nocchi](https://github.com/ThibaultNocchi)
|
||||||
- [MrTimscampi](https://github.com/MrTimscampi)
|
- [MrTimscampi](https://github.com/MrTimscampi)
|
||||||
- [Sarab Singh](https://github.com/sarab97)
|
- [Sarab Singh](https://github.com/sarab97)
|
||||||
|
- [GuilhermeHideki](https://github.com/GuilhermeHideki)
|
||||||
- [Andrei Oanca](https://github.com/OancaAndrei)
|
- [Andrei Oanca](https://github.com/OancaAndrei)
|
||||||
- [Cromefire_](https://github.com/cromefire)
|
- [Cromefire_](https://github.com/cromefire)
|
||||||
|
|
||||||
|
|
23
package.json
23
package.json
|
@ -20,7 +20,7 @@
|
||||||
"css-loader": "^4.2.0",
|
"css-loader": "^4.2.0",
|
||||||
"cssnano": "^4.1.10",
|
"cssnano": "^4.1.10",
|
||||||
"del": "^5.1.0",
|
"del": "^5.1.0",
|
||||||
"eslint": "^6.8.0",
|
"eslint": "^7.6.0",
|
||||||
"eslint-plugin-compat": "^3.5.1",
|
"eslint-plugin-compat": "^3.5.1",
|
||||||
"eslint-plugin-eslint-comments": "^3.2.0",
|
"eslint-plugin-eslint-comments": "^3.2.0",
|
||||||
"eslint-plugin-import": "^2.21.2",
|
"eslint-plugin-import": "^2.21.2",
|
||||||
|
@ -38,7 +38,7 @@
|
||||||
"gulp-postcss": "^8.0.0",
|
"gulp-postcss": "^8.0.0",
|
||||||
"gulp-sass": "^4.0.2",
|
"gulp-sass": "^4.0.2",
|
||||||
"gulp-sourcemaps": "^2.6.5",
|
"gulp-sourcemaps": "^2.6.5",
|
||||||
"gulp-terser": "^1.2.1",
|
"gulp-terser": "^1.3.0",
|
||||||
"html-webpack-plugin": "^4.3.0",
|
"html-webpack-plugin": "^4.3.0",
|
||||||
"lazypipe": "^1.0.2",
|
"lazypipe": "^1.0.2",
|
||||||
"node-sass": "^4.13.1",
|
"node-sass": "^4.13.1",
|
||||||
|
@ -107,6 +107,7 @@
|
||||||
"src/components/dialogHelper/dialogHelper.js",
|
"src/components/dialogHelper/dialogHelper.js",
|
||||||
"src/components/directorybrowser/directorybrowser.js",
|
"src/components/directorybrowser/directorybrowser.js",
|
||||||
"src/components/displaySettings/displaySettings.js",
|
"src/components/displaySettings/displaySettings.js",
|
||||||
|
"src/components/favoriteitems.js",
|
||||||
"src/components/fetchhelper.js",
|
"src/components/fetchhelper.js",
|
||||||
"src/components/filterdialog/filterdialog.js",
|
"src/components/filterdialog/filterdialog.js",
|
||||||
"src/components/groupedcards.js",
|
"src/components/groupedcards.js",
|
||||||
|
@ -126,6 +127,7 @@
|
||||||
"src/components/lazyLoader/lazyLoaderIntersectionObserver.js",
|
"src/components/lazyLoader/lazyLoaderIntersectionObserver.js",
|
||||||
"src/components/libraryoptionseditor/libraryoptionseditor.js",
|
"src/components/libraryoptionseditor/libraryoptionseditor.js",
|
||||||
"src/components/listview/listview.js",
|
"src/components/listview/listview.js",
|
||||||
|
"src/components/loading/loading.js",
|
||||||
"src/components/maintabsmanager.js",
|
"src/components/maintabsmanager.js",
|
||||||
"src/components/mediainfo/mediainfo.js",
|
"src/components/mediainfo/mediainfo.js",
|
||||||
"src/components/mediaLibraryCreator/mediaLibraryCreator.js",
|
"src/components/mediaLibraryCreator/mediaLibraryCreator.js",
|
||||||
|
@ -138,6 +140,7 @@
|
||||||
"src/components/playback/mediasession.js",
|
"src/components/playback/mediasession.js",
|
||||||
"src/components/playback/nowplayinghelper.js",
|
"src/components/playback/nowplayinghelper.js",
|
||||||
"src/components/playback/playbackorientation.js",
|
"src/components/playback/playbackorientation.js",
|
||||||
|
"src/components/playback/playbackmanager.js",
|
||||||
"src/components/playback/playerSelectionMenu.js",
|
"src/components/playback/playerSelectionMenu.js",
|
||||||
"src/components/playback/playersettingsmenu.js",
|
"src/components/playback/playersettingsmenu.js",
|
||||||
"src/components/playback/playmethodhelper.js",
|
"src/components/playback/playmethodhelper.js",
|
||||||
|
@ -163,6 +166,9 @@
|
||||||
"src/components/syncPlay/playbackPermissionManager.js",
|
"src/components/syncPlay/playbackPermissionManager.js",
|
||||||
"src/components/syncPlay/syncPlayManager.js",
|
"src/components/syncPlay/syncPlayManager.js",
|
||||||
"src/components/syncPlay/timeSyncManager.js",
|
"src/components/syncPlay/timeSyncManager.js",
|
||||||
|
"src/components/toast/toast.js",
|
||||||
|
"src/components/upnextdialog/upnextdialog.js",
|
||||||
|
"src/components/viewContainer.js",
|
||||||
"src/controllers/session/addServer/index.js",
|
"src/controllers/session/addServer/index.js",
|
||||||
"src/controllers/session/forgotPassword/index.js",
|
"src/controllers/session/forgotPassword/index.js",
|
||||||
"src/controllers/session/redeemPassword/index.js",
|
"src/controllers/session/redeemPassword/index.js",
|
||||||
|
@ -189,6 +195,8 @@
|
||||||
"src/controllers/dashboard/metadataImages.js",
|
"src/controllers/dashboard/metadataImages.js",
|
||||||
"src/controllers/dashboard/metadatanfo.js",
|
"src/controllers/dashboard/metadatanfo.js",
|
||||||
"src/controllers/dashboard/networking.js",
|
"src/controllers/dashboard/networking.js",
|
||||||
|
"src/controllers/dashboard/notifications/notification.js",
|
||||||
|
"src/controllers/dashboard/notifications/notifications.js",
|
||||||
"src/controllers/dashboard/playback.js",
|
"src/controllers/dashboard/playback.js",
|
||||||
"src/controllers/dashboard/plugins/repositories/index.js",
|
"src/controllers/dashboard/plugins/repositories/index.js",
|
||||||
"src/controllers/dashboard/scheduledtasks/scheduledtask.js",
|
"src/controllers/dashboard/scheduledtasks/scheduledtask.js",
|
||||||
|
@ -201,12 +209,19 @@
|
||||||
"src/controllers/dashboard/users/userparentalcontrol.js",
|
"src/controllers/dashboard/users/userparentalcontrol.js",
|
||||||
"src/controllers/dashboard/users/userpasswordpage.js",
|
"src/controllers/dashboard/users/userpasswordpage.js",
|
||||||
"src/controllers/dashboard/users/userprofilespage.js",
|
"src/controllers/dashboard/users/userprofilespage.js",
|
||||||
|
"src/controllers/edititemmetadata.js",
|
||||||
|
"src/controllers/favorites.js",
|
||||||
|
"src/controllers/hometab.js",
|
||||||
|
"src/controllers/playback/nowplaying.js",
|
||||||
|
"src/controllers/playback/videoosd.js",
|
||||||
"src/controllers/itemDetails/index.js",
|
"src/controllers/itemDetails/index.js",
|
||||||
"src/controllers/playback/queue/index.js",
|
"src/controllers/playback/queue/index.js",
|
||||||
"src/controllers/playback/video/index.js",
|
"src/controllers/playback/video/index.js",
|
||||||
"src/controllers/searchpage.js",
|
"src/controllers/searchpage.js",
|
||||||
"src/controllers/livetvtuner.js",
|
"src/controllers/livetvtuner.js",
|
||||||
"src/controllers/livetvstatus.js",
|
"src/controllers/livetvstatus.js",
|
||||||
|
"src/controllers/livetvguideprovider.js",
|
||||||
|
"src/controllers/livetvsettings.js",
|
||||||
"src/controllers/livetv/livetvseriestimers.js",
|
"src/controllers/livetv/livetvseriestimers.js",
|
||||||
"src/controllers/shows/episodes.js",
|
"src/controllers/shows/episodes.js",
|
||||||
"src/controllers/shows/tvgenres.js",
|
"src/controllers/shows/tvgenres.js",
|
||||||
|
@ -264,10 +279,14 @@
|
||||||
"src/scripts/globalize.js",
|
"src/scripts/globalize.js",
|
||||||
"src/scripts/imagehelper.js",
|
"src/scripts/imagehelper.js",
|
||||||
"src/scripts/inputManager.js",
|
"src/scripts/inputManager.js",
|
||||||
|
"src/scripts/autoThemes.js",
|
||||||
|
"src/scripts/themeManager.js",
|
||||||
"src/scripts/keyboardNavigation.js",
|
"src/scripts/keyboardNavigation.js",
|
||||||
"src/scripts/libraryBrowser.js",
|
"src/scripts/libraryBrowser.js",
|
||||||
|
"src/scripts/mouseManager.js",
|
||||||
"src/scripts/multiDownload.js",
|
"src/scripts/multiDownload.js",
|
||||||
"src/scripts/playlists.js",
|
"src/scripts/playlists.js",
|
||||||
|
"src/scripts/routes.js",
|
||||||
"src/scripts/settings/appSettings.js",
|
"src/scripts/settings/appSettings.js",
|
||||||
"src/scripts/settings/userSettings.js",
|
"src/scripts/settings/userSettings.js",
|
||||||
"src/scripts/settings/webSettings.js",
|
"src/scripts/settings/webSettings.js",
|
||||||
|
|
|
@ -49,7 +49,7 @@ import 'formDialogStyle';
|
||||||
};
|
};
|
||||||
|
|
||||||
if (parseFloat(updatedSchedule.StartHour) >= parseFloat(updatedSchedule.EndHour)) {
|
if (parseFloat(updatedSchedule.StartHour) >= parseFloat(updatedSchedule.EndHour)) {
|
||||||
return void alert(globalize.translate('ErrorMessageStartHourGreaterThanEnd'));
|
return void alert(globalize.translate('ErrorStartHourGreaterThanEnd'));
|
||||||
}
|
}
|
||||||
|
|
||||||
context.submitted = true;
|
context.submitted = true;
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdrop', 'browser', 'page', 'appSettings', 'apphost', 'connectionManager'], function (loading, globalize, events, viewManager, skinManager, backdrop, browser, page, appSettings, appHost, connectionManager) {
|
define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdrop', 'browser', 'page', 'appSettings', 'apphost', 'connectionManager'], function (loading, globalize, events, viewManager, skinManager, backdrop, browser, page, appSettings, appHost, connectionManager) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
browser = browser.default || browser;
|
||||||
|
loading = loading.default || loading;
|
||||||
|
|
||||||
var appRouter = {
|
var appRouter = {
|
||||||
showLocalLogin: function (serverId, manualLogin) {
|
showLocalLogin: function (serverId, manualLogin) {
|
||||||
var pageName = manualLogin ? 'manuallogin' : 'login';
|
var pageName = manualLogin ? 'manuallogin' : 'login';
|
||||||
|
@ -34,7 +37,7 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
|
||||||
switch (result.State) {
|
switch (result.State) {
|
||||||
case 'SignedIn':
|
case 'SignedIn':
|
||||||
loading.hide();
|
loading.hide();
|
||||||
skinManager.loadUserSkin();
|
Emby.Page.goHome();
|
||||||
break;
|
break;
|
||||||
case 'ServerSignIn':
|
case 'ServerSignIn':
|
||||||
result.ApiClient.getPublicUsers().then(function (users) {
|
result.ApiClient.getPublicUsers().then(function (users) {
|
||||||
|
@ -147,7 +150,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
|
||||||
if (typeof route.path === 'string') {
|
if (typeof route.path === 'string') {
|
||||||
loadContentUrl(ctx, next, route, currentRequest);
|
loadContentUrl(ctx, next, route, currentRequest);
|
||||||
} else {
|
} else {
|
||||||
// ? TODO
|
|
||||||
next();
|
next();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -285,12 +287,9 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
|
||||||
|
|
||||||
connectionManager.connect({
|
connectionManager.connect({
|
||||||
enableAutoLogin: appSettings.enableAutoLogin()
|
enableAutoLogin: appSettings.enableAutoLogin()
|
||||||
|
|
||||||
}).then(function (result) {
|
}).then(function (result) {
|
||||||
firstConnectionResult = result;
|
firstConnectionResult = result;
|
||||||
|
|
||||||
options = options || {};
|
options = options || {};
|
||||||
|
|
||||||
page({
|
page({
|
||||||
click: options.click !== false,
|
click: options.click !== false,
|
||||||
hashbang: options.hashbang !== false
|
hashbang: options.hashbang !== false
|
||||||
|
@ -342,7 +341,7 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
|
||||||
|
|
||||||
if (route.isDefaultRoute) {
|
if (route.isDefaultRoute) {
|
||||||
console.debug('appRouter - loading skin home page');
|
console.debug('appRouter - loading skin home page');
|
||||||
loadUserSkinWithOptions(ctx);
|
Emby.Page.goHome();
|
||||||
return;
|
return;
|
||||||
} else if (route.roles) {
|
} else if (route.roles) {
|
||||||
validateRoles(apiClient, route.roles).then(function () {
|
validateRoles(apiClient, route.roles).then(function () {
|
||||||
|
@ -356,15 +355,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
|
||||||
callback();
|
callback();
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadUserSkinWithOptions(ctx) {
|
|
||||||
require(['queryString'], function (queryString) {
|
|
||||||
var params = queryString.parse(ctx.querystring);
|
|
||||||
skinManager.loadUserSkin({
|
|
||||||
start: params.start
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function validateRoles(apiClient, roles) {
|
function validateRoles(apiClient, roles) {
|
||||||
return Promise.all(roles.split(',').map(function (role) {
|
return Promise.all(roles.split(',').map(function (role) {
|
||||||
return validateRole(apiClient, role);
|
return validateRole(apiClient, role);
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
define(['appSettings', 'browser', 'events', 'htmlMediaHelper', 'webSettings', 'globalize'], function (appSettings, browser, events, htmlMediaHelper, webSettings, globalize) {
|
define(['appSettings', 'browser', 'events', 'htmlMediaHelper', 'webSettings', 'globalize'], function (appSettings, browser, events, htmlMediaHelper, webSettings, globalize) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
browser = browser.default || browser;
|
||||||
|
|
||||||
function getBaseProfileOptions(item) {
|
function getBaseProfileOptions(item) {
|
||||||
var disableHlsVideoAudioCodecs = [];
|
var disableHlsVideoAudioCodecs = [];
|
||||||
|
|
||||||
|
@ -277,7 +279,7 @@ define(['appSettings', 'browser', 'events', 'htmlMediaHelper', 'webSettings', 'g
|
||||||
features.push('targetblank');
|
features.push('targetblank');
|
||||||
features.push('screensaver');
|
features.push('screensaver');
|
||||||
|
|
||||||
webSettings.enableMultiServer().then(enabled => {
|
webSettings.getMultiServer().then(enabled => {
|
||||||
if (enabled) features.push('multiserver');
|
if (enabled) features.push('multiserver');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -407,13 +409,6 @@ define(['appSettings', 'browser', 'events', 'htmlMediaHelper', 'webSettings', 'g
|
||||||
getPushTokenInfo: function () {
|
getPushTokenInfo: function () {
|
||||||
return {};
|
return {};
|
||||||
},
|
},
|
||||||
setThemeColor: function (color) {
|
|
||||||
var metaThemeColor = document.querySelector('meta[name=theme-color]');
|
|
||||||
|
|
||||||
if (metaThemeColor) {
|
|
||||||
metaThemeColor.setAttribute('content', color);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
setUserScalable: function (scalable) {
|
setUserScalable: function (scalable) {
|
||||||
if (!browser.tv) {
|
if (!browser.tv) {
|
||||||
var att = scalable ? 'width=device-width, initial-scale=1, minimum-scale=1, user-scalable=yes' : 'width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no';
|
var att = scalable ? 'width=device-width, initial-scale=1, minimum-scale=1, user-scalable=yes' : 'width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no';
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import browser from 'browser';
|
import browser from 'browser';
|
||||||
import layoutManager from 'layoutManager';
|
import layoutManager from 'layoutManager';
|
||||||
import appSettings from 'appSettings';
|
|
||||||
import pluginManager from 'pluginManager';
|
import pluginManager from 'pluginManager';
|
||||||
import appHost from 'apphost';
|
import appHost from 'apphost';
|
||||||
import focusManager from 'focusManager';
|
import focusManager from 'focusManager';
|
||||||
|
@ -16,17 +15,22 @@ import 'emby-button';
|
||||||
|
|
||||||
/* eslint-disable indent */
|
/* eslint-disable indent */
|
||||||
|
|
||||||
function fillThemes(select, isDashboard) {
|
function fillThemes(context, userSettings) {
|
||||||
select.innerHTML = skinManager.getThemes().map(t => {
|
const select = context.querySelector('#selectTheme');
|
||||||
let value = t.id;
|
|
||||||
if (t.isDefault && !isDashboard) {
|
|
||||||
value = '';
|
|
||||||
} else if (t.isDefaultServerDashboard && isDashboard) {
|
|
||||||
value = '';
|
|
||||||
}
|
|
||||||
|
|
||||||
return `<option value="${value}">${t.name}</option>`;
|
skinManager.getThemes().then(themes => {
|
||||||
}).join('');
|
select.innerHTML = themes.map(t => {
|
||||||
|
return `<option value="${t.id}">${t.name}</option>`;
|
||||||
|
}).join('');
|
||||||
|
|
||||||
|
// get default theme
|
||||||
|
var defaultTheme = themes.find(theme => {
|
||||||
|
return theme.default;
|
||||||
|
});
|
||||||
|
|
||||||
|
// set the current theme
|
||||||
|
select.value = userSettings.theme() || defaultTheme.id;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadScreensavers(context, userSettings) {
|
function loadScreensavers(context, userSettings) {
|
||||||
|
@ -46,6 +50,7 @@ import 'emby-button';
|
||||||
selectScreensaver.innerHTML = options.map(o => {
|
selectScreensaver.innerHTML = options.map(o => {
|
||||||
return `<option value="${o.value}">${o.name}</option>`;
|
return `<option value="${o.value}">${o.name}</option>`;
|
||||||
}).join('');
|
}).join('');
|
||||||
|
|
||||||
selectScreensaver.value = userSettings.screensaver();
|
selectScreensaver.value = userSettings.screensaver();
|
||||||
|
|
||||||
if (!selectScreensaver.value) {
|
if (!selectScreensaver.value) {
|
||||||
|
@ -54,57 +59,6 @@ import 'emby-button';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadSoundEffects(context, userSettings) {
|
|
||||||
const selectSoundEffects = context.querySelector('.selectSoundEffects');
|
|
||||||
const options = pluginManager.ofType('soundeffects').map(plugin => {
|
|
||||||
return {
|
|
||||||
name: plugin.name,
|
|
||||||
value: plugin.id
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
options.unshift({
|
|
||||||
name: globalize.translate('None'),
|
|
||||||
value: 'none'
|
|
||||||
});
|
|
||||||
|
|
||||||
selectSoundEffects.innerHTML = options.map(o => {
|
|
||||||
return `<option value="${o.value}">${o.name}</option>`;
|
|
||||||
}).join('');
|
|
||||||
selectSoundEffects.value = userSettings.soundEffects();
|
|
||||||
|
|
||||||
if (!selectSoundEffects.value) {
|
|
||||||
// TODO: set the default instead of none
|
|
||||||
selectSoundEffects.value = 'none';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function loadSkins(context, userSettings) {
|
|
||||||
const selectSkin = context.querySelector('.selectSkin');
|
|
||||||
|
|
||||||
const options = pluginManager.ofType('skin').map(plugin => {
|
|
||||||
return {
|
|
||||||
name: plugin.name,
|
|
||||||
value: plugin.id
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
selectSkin.innerHTML = options.map(o => {
|
|
||||||
return `<option value="${o.value}">${o.name}</option>`;
|
|
||||||
}).join('');
|
|
||||||
selectSkin.value = userSettings.skin();
|
|
||||||
|
|
||||||
if (!selectSkin.value && options.length) {
|
|
||||||
selectSkin.value = options[0].value;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (options.length > 1 && appHost.supports('skins')) {
|
|
||||||
context.querySelector('.selectSkinContainer').classList.remove('hide');
|
|
||||||
} else {
|
|
||||||
context.querySelector('.selectSkinContainer').classList.add('hide');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function showOrHideMissingEpisodesField(context) {
|
function showOrHideMissingEpisodesField(context) {
|
||||||
if (browser.tizen || browser.web0s) {
|
if (browser.tizen || browser.web0s) {
|
||||||
context.querySelector('.fldDisplayMissingEpisodes').classList.add('hide');
|
context.querySelector('.fldDisplayMissingEpisodes').classList.add('hide');
|
||||||
|
@ -115,12 +69,6 @@ import 'emby-button';
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadForm(context, user, userSettings) {
|
function loadForm(context, user, userSettings) {
|
||||||
if (user.Policy.IsAdministrator) {
|
|
||||||
context.querySelector('.selectDashboardThemeContainer').classList.remove('hide');
|
|
||||||
} else {
|
|
||||||
context.querySelector('.selectDashboardThemeContainer').classList.add('hide');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (appHost.supports('displaylanguage')) {
|
if (appHost.supports('displaylanguage')) {
|
||||||
context.querySelector('.languageSection').classList.remove('hide');
|
context.querySelector('.languageSection').classList.remove('hide');
|
||||||
} else {
|
} else {
|
||||||
|
@ -139,18 +87,6 @@ import 'emby-button';
|
||||||
context.querySelector('.learnHowToContributeContainer').classList.add('hide');
|
context.querySelector('.learnHowToContributeContainer').classList.add('hide');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (appHost.supports('runatstartup')) {
|
|
||||||
context.querySelector('.fldAutorun').classList.remove('hide');
|
|
||||||
} else {
|
|
||||||
context.querySelector('.fldAutorun').classList.add('hide');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (appHost.supports('soundeffects')) {
|
|
||||||
context.querySelector('.fldSoundEffects').classList.remove('hide');
|
|
||||||
} else {
|
|
||||||
context.querySelector('.fldSoundEffects').classList.add('hide');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (appHost.supports('screensaver')) {
|
if (appHost.supports('screensaver')) {
|
||||||
context.querySelector('.selectScreensaverContainer').classList.remove('hide');
|
context.querySelector('.selectScreensaverContainer').classList.remove('hide');
|
||||||
} else {
|
} else {
|
||||||
|
@ -173,16 +109,8 @@ import 'emby-button';
|
||||||
context.querySelector('.fldThemeVideo').classList.add('hide');
|
context.querySelector('.fldThemeVideo').classList.add('hide');
|
||||||
}
|
}
|
||||||
|
|
||||||
context.querySelector('.chkRunAtStartup').checked = appSettings.runAtStartup();
|
fillThemes(context, userSettings);
|
||||||
|
|
||||||
const selectTheme = context.querySelector('#selectTheme');
|
|
||||||
const selectDashboardTheme = context.querySelector('#selectDashboardTheme');
|
|
||||||
|
|
||||||
fillThemes(selectTheme);
|
|
||||||
fillThemes(selectDashboardTheme, true);
|
|
||||||
loadScreensavers(context, userSettings);
|
loadScreensavers(context, userSettings);
|
||||||
loadSoundEffects(context, userSettings);
|
|
||||||
loadSkins(context, userSettings);
|
|
||||||
|
|
||||||
context.querySelector('.chkDisplayMissingEpisodes').checked = user.Configuration.DisplayMissingEpisodes || false;
|
context.querySelector('.chkDisplayMissingEpisodes').checked = user.Configuration.DisplayMissingEpisodes || false;
|
||||||
|
|
||||||
|
@ -198,9 +126,6 @@ import 'emby-button';
|
||||||
|
|
||||||
context.querySelector('#txtLibraryPageSize').value = userSettings.libraryPageSize();
|
context.querySelector('#txtLibraryPageSize').value = userSettings.libraryPageSize();
|
||||||
|
|
||||||
selectDashboardTheme.value = userSettings.dashboardTheme() || '';
|
|
||||||
selectTheme.value = userSettings.theme() || '';
|
|
||||||
|
|
||||||
context.querySelector('.selectLayout').value = layoutManager.getSavedLayout() || '';
|
context.querySelector('.selectLayout').value = layoutManager.getSavedLayout() || '';
|
||||||
|
|
||||||
showOrHideMissingEpisodesField(context);
|
showOrHideMissingEpisodesField(context);
|
||||||
|
@ -209,8 +134,6 @@ import 'emby-button';
|
||||||
}
|
}
|
||||||
|
|
||||||
function saveUser(context, user, userSettingsInstance, apiClient) {
|
function saveUser(context, user, userSettingsInstance, apiClient) {
|
||||||
appSettings.runAtStartup(context.querySelector('.chkRunAtStartup').checked);
|
|
||||||
|
|
||||||
user.Configuration.DisplayMissingEpisodes = context.querySelector('.chkDisplayMissingEpisodes').checked;
|
user.Configuration.DisplayMissingEpisodes = context.querySelector('.chkDisplayMissingEpisodes').checked;
|
||||||
|
|
||||||
if (appHost.supports('displaylanguage')) {
|
if (appHost.supports('displaylanguage')) {
|
||||||
|
@ -221,15 +144,11 @@ import 'emby-button';
|
||||||
|
|
||||||
userSettingsInstance.enableThemeSongs(context.querySelector('#chkThemeSong').checked);
|
userSettingsInstance.enableThemeSongs(context.querySelector('#chkThemeSong').checked);
|
||||||
userSettingsInstance.enableThemeVideos(context.querySelector('#chkThemeVideo').checked);
|
userSettingsInstance.enableThemeVideos(context.querySelector('#chkThemeVideo').checked);
|
||||||
userSettingsInstance.dashboardTheme(context.querySelector('#selectDashboardTheme').value);
|
|
||||||
userSettingsInstance.theme(context.querySelector('#selectTheme').value);
|
userSettingsInstance.theme(context.querySelector('#selectTheme').value);
|
||||||
userSettingsInstance.soundEffects(context.querySelector('.selectSoundEffects').value);
|
|
||||||
userSettingsInstance.screensaver(context.querySelector('.selectScreensaver').value);
|
userSettingsInstance.screensaver(context.querySelector('.selectScreensaver').value);
|
||||||
|
|
||||||
userSettingsInstance.libraryPageSize(context.querySelector('#txtLibraryPageSize').value);
|
userSettingsInstance.libraryPageSize(context.querySelector('#txtLibraryPageSize').value);
|
||||||
|
|
||||||
userSettingsInstance.skin(context.querySelector('.selectSkin').value);
|
|
||||||
|
|
||||||
userSettingsInstance.enableFastFadein(context.querySelector('#chkFadein').checked);
|
userSettingsInstance.enableFastFadein(context.querySelector('#chkFadein').checked);
|
||||||
userSettingsInstance.enableBlurhash(context.querySelector('#chkBlurhash').checked);
|
userSettingsInstance.enableBlurhash(context.querySelector('#chkBlurhash').checked);
|
||||||
userSettingsInstance.enableBackdrops(context.querySelector('#chkBackdrops').checked);
|
userSettingsInstance.enableBackdrops(context.querySelector('#chkBackdrops').checked);
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
<form style="margin: 0 auto;">
|
<form style="margin: 0 auto;">
|
||||||
|
|
||||||
<h2 class="sectionTitle">
|
<h2 class="sectionTitle">
|
||||||
${Display}
|
${Display}
|
||||||
</h2>
|
</h2>
|
||||||
|
@ -123,26 +122,14 @@
|
||||||
<div class="fieldDescription">${LabelPleaseRestart}</div>
|
<div class="fieldDescription">${LabelPleaseRestart}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="selectContainer hide selectSkinContainer">
|
|
||||||
<select is="emby-select" class="selectSkin" label="${LabelSkin}"></select>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="selectContainer">
|
<div class="selectContainer">
|
||||||
<select id="selectTheme" is="emby-select" label="${LabelTheme}"></select>
|
<select id="selectTheme" is="emby-select" label="${LabelTheme}"></select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="selectContainer selectDashboardThemeContainer hide">
|
|
||||||
<select id="selectDashboardTheme" is="emby-select" label="${LabelDashboardTheme}"></select>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="selectContainer hide selectScreensaverContainer">
|
<div class="selectContainer hide selectScreensaverContainer">
|
||||||
<select is="emby-select" class="selectScreensaver" label="${LabelScreensaver}"></select>
|
<select is="emby-select" class="selectScreensaver" label="${LabelScreensaver}"></select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="selectContainer fldSoundEffects hide">
|
|
||||||
<select is="emby-select" class="selectSoundEffects" label="${LabelSoundEffects}"></select>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="inputContainer inputContainer-withDescription">
|
<div class="inputContainer inputContainer-withDescription">
|
||||||
<input is="emby-input" type="number" id="txtLibraryPageSize" pattern="[0-9]*" required="required" min="0" max="1000" step="1" label="${LabelLibraryPageSize}" />
|
<input is="emby-input" type="number" id="txtLibraryPageSize" pattern="[0-9]*" required="required" min="0" max="1000" step="1" label="${LabelLibraryPageSize}" />
|
||||||
<div class="fieldDescription">${LabelLibraryPageSizeHelp}</div>
|
<div class="fieldDescription">${LabelLibraryPageSizeHelp}</div>
|
||||||
|
@ -159,9 +146,9 @@
|
||||||
<div class="checkboxContainer checkboxContainer-withDescription">
|
<div class="checkboxContainer checkboxContainer-withDescription">
|
||||||
<label>
|
<label>
|
||||||
<input type="checkbox" is="emby-checkbox" id="chkBlurhash" />
|
<input type="checkbox" is="emby-checkbox" id="chkBlurhash" />
|
||||||
<span>${EnableBlurhash}</span>
|
<span>${EnableBlurHash}</span>
|
||||||
</label>
|
</label>
|
||||||
<div class="fieldDescription checkboxFieldDescription">${EnableBlurhashHelp}</div>
|
<div class="fieldDescription checkboxFieldDescription">${EnableBlurHashHelp}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="checkboxContainer checkboxContainer-withDescription">
|
<div class="checkboxContainer checkboxContainer-withDescription">
|
||||||
|
@ -196,13 +183,6 @@
|
||||||
<div class="fieldDescription checkboxFieldDescription">${EnableThemeVideosHelp}</div>
|
<div class="fieldDescription checkboxFieldDescription">${EnableThemeVideosHelp}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="checkboxContainer hide fldAutorun">
|
|
||||||
<label>
|
|
||||||
<input type="checkbox" is="emby-checkbox" class="chkRunAtStartup" />
|
|
||||||
<span>${RunAtStartup}</span>
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="checkboxContainer checkboxContainer-withDescription fldDisplayMissingEpisodes hide">
|
<div class="checkboxContainer checkboxContainer-withDescription fldDisplayMissingEpisodes hide">
|
||||||
<label>
|
<label>
|
||||||
<input type="checkbox" is="emby-checkbox" class="chkDisplayMissingEpisodes" />
|
<input type="checkbox" is="emby-checkbox" class="chkDisplayMissingEpisodes" />
|
||||||
|
|
|
@ -1,5 +1,14 @@
|
||||||
define(['loading', 'libraryBrowser', 'cardBuilder', 'dom', 'apphost', 'imageLoader', 'globalize', 'layoutManager', 'scrollStyles', 'emby-itemscontainer'], function (loading, libraryBrowser, cardBuilder, dom, appHost, imageLoader, globalize, layoutManager) {
|
import loading from 'loading';
|
||||||
'use strict';
|
import cardBuilder from 'cardBuilder';
|
||||||
|
import dom from 'dom';
|
||||||
|
import appHost from 'apphost';
|
||||||
|
import imageLoader from 'imageLoader';
|
||||||
|
import globalize from 'globalize';
|
||||||
|
import layoutManager from 'layoutManager';
|
||||||
|
import 'scrollStyles';
|
||||||
|
import 'emby-itemscontainer';
|
||||||
|
|
||||||
|
/* eslint-disable indent */
|
||||||
|
|
||||||
function enableScrollX() {
|
function enableScrollX() {
|
||||||
return !layoutManager.desktop;
|
return !layoutManager.desktop;
|
||||||
|
@ -94,8 +103,8 @@ define(['loading', 'libraryBrowser', 'cardBuilder', 'dom', 'apphost', 'imageLoad
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadSection(elem, userId, topParentId, section, isSingleSection) {
|
function loadSection(elem, userId, topParentId, section, isSingleSection) {
|
||||||
var screenWidth = dom.getWindowSize().innerWidth;
|
const screenWidth = dom.getWindowSize().innerWidth;
|
||||||
var options = {
|
const options = {
|
||||||
SortBy: 'SortName',
|
SortBy: 'SortName',
|
||||||
SortOrder: 'Ascending',
|
SortOrder: 'Ascending',
|
||||||
Filters: 'IsFavorite',
|
Filters: 'IsFavorite',
|
||||||
|
@ -118,7 +127,7 @@ define(['loading', 'libraryBrowser', 'cardBuilder', 'dom', 'apphost', 'imageLoad
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var promise;
|
let promise;
|
||||||
|
|
||||||
if (section.types === 'MusicArtist') {
|
if (section.types === 'MusicArtist') {
|
||||||
promise = ApiClient.getArtists(userId, options);
|
promise = ApiClient.getArtists(userId, options);
|
||||||
|
@ -128,7 +137,7 @@ define(['loading', 'libraryBrowser', 'cardBuilder', 'dom', 'apphost', 'imageLoad
|
||||||
}
|
}
|
||||||
|
|
||||||
return promise.then(function (result) {
|
return promise.then(function (result) {
|
||||||
var html = '';
|
let html = '';
|
||||||
|
|
||||||
if (result.Items.length) {
|
if (result.Items.length) {
|
||||||
if (html += '<div class="sectionTitleContainer sectionTitleContainer-cards padded-left">', !layoutManager.tv && options.Limit && result.Items.length >= options.Limit) {
|
if (html += '<div class="sectionTitleContainer sectionTitleContainer-cards padded-left">', !layoutManager.tv && options.Limit && result.Items.length >= options.Limit) {
|
||||||
|
@ -144,7 +153,7 @@ define(['loading', 'libraryBrowser', 'cardBuilder', 'dom', 'apphost', 'imageLoad
|
||||||
|
|
||||||
html += '</div>';
|
html += '</div>';
|
||||||
if (enableScrollX()) {
|
if (enableScrollX()) {
|
||||||
var scrollXClass = 'scrollX hiddenScrollX';
|
let scrollXClass = 'scrollX hiddenScrollX';
|
||||||
if (layoutManager.tv) {
|
if (layoutManager.tv) {
|
||||||
scrollXClass += ' smoothScrollX';
|
scrollXClass += ' smoothScrollX';
|
||||||
}
|
}
|
||||||
|
@ -154,7 +163,7 @@ define(['loading', 'libraryBrowser', 'cardBuilder', 'dom', 'apphost', 'imageLoad
|
||||||
html += '<div is="emby-itemscontainer" class="itemsContainer vertical-wrap padded-left padded-right">';
|
html += '<div is="emby-itemscontainer" class="itemsContainer vertical-wrap padded-left padded-right">';
|
||||||
}
|
}
|
||||||
|
|
||||||
var cardLayout = appHost.preferVisualCards && section.autoCardLayout && section.showTitle;
|
let cardLayout = appHost.preferVisualCards && section.autoCardLayout && section.showTitle;
|
||||||
cardLayout = false;
|
cardLayout = false;
|
||||||
html += cardBuilder.getCardsHtml(result.Items, {
|
html += cardBuilder.getCardsHtml(result.Items, {
|
||||||
preferThumb: section.preferThumb,
|
preferThumb: section.preferThumb,
|
||||||
|
@ -179,10 +188,10 @@ define(['loading', 'libraryBrowser', 'cardBuilder', 'dom', 'apphost', 'imageLoad
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadSections(page, userId, topParentId, types) {
|
export function loadSections(page, userId, topParentId, types) {
|
||||||
loading.show();
|
loading.show();
|
||||||
var sections = getSections();
|
let sections = getSections();
|
||||||
var sectionid = getParameterByName('sectionid');
|
const sectionid = getParameterByName('sectionid');
|
||||||
|
|
||||||
if (sectionid) {
|
if (sectionid) {
|
||||||
sections = sections.filter(function (s) {
|
sections = sections.filter(function (s) {
|
||||||
|
@ -196,24 +205,22 @@ define(['loading', 'libraryBrowser', 'cardBuilder', 'dom', 'apphost', 'imageLoad
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
var i;
|
let elem = page.querySelector('.favoriteSections');
|
||||||
var length;
|
|
||||||
var elem = page.querySelector('.favoriteSections');
|
|
||||||
|
|
||||||
if (!elem.innerHTML) {
|
if (!elem.innerHTML) {
|
||||||
var html = '';
|
let html = '';
|
||||||
|
|
||||||
for (i = 0, length = sections.length; i < length; i++) {
|
for (let i = 0, length = sections.length; i < length; i++) {
|
||||||
html += '<div class="verticalSection section' + sections[i].id + '"></div>';
|
html += '<div class="verticalSection section' + sections[i].id + '"></div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
elem.innerHTML = html;
|
elem.innerHTML = html;
|
||||||
}
|
}
|
||||||
|
|
||||||
var promises = [];
|
const promises = [];
|
||||||
|
|
||||||
for (i = 0, length = sections.length; i < length; i++) {
|
for (let i = 0, length = sections.length; i < length; i++) {
|
||||||
var section = sections[i];
|
const section = sections[i];
|
||||||
elem = page.querySelector('.section' + section.id);
|
elem = page.querySelector('.section' + section.id);
|
||||||
promises.push(loadSection(elem, userId, topParentId, section, sections.length === 1));
|
promises.push(loadSection(elem, userId, topParentId, section, sections.length === 1));
|
||||||
}
|
}
|
||||||
|
@ -223,7 +230,8 @@ define(['loading', 'libraryBrowser', 'cardBuilder', 'dom', 'apphost', 'imageLoad
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
export default {
|
||||||
render: loadSections
|
render: loadSections
|
||||||
};
|
};
|
||||||
});
|
|
||||||
|
/* eslint-enable indent */
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager', 'scrollHelper', 'serverNotifications', 'loading', 'datetime', 'focusManager', 'playbackManager', 'userSettings', 'imageLoader', 'events', 'layoutManager', 'itemShortcuts', 'dom', 'css!./guide.css', 'programStyles', 'material-icons', 'scrollStyles', 'emby-programcell', 'emby-button', 'paper-icon-button-light', 'emby-tabs', 'emby-scroller', 'flexStyles', 'webcomponents'], function (require, inputManager, browser, globalize, connectionManager, scrollHelper, serverNotifications, loading, datetime, focusManager, playbackManager, userSettings, imageLoader, events, layoutManager, itemShortcuts, dom) {
|
define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager', 'scrollHelper', 'serverNotifications', 'loading', 'datetime', 'focusManager', 'playbackManager', 'userSettings', 'imageLoader', 'events', 'layoutManager', 'itemShortcuts', 'dom', 'css!./guide.css', 'programStyles', 'material-icons', 'scrollStyles', 'emby-programcell', 'emby-button', 'paper-icon-button-light', 'emby-tabs', 'emby-scroller', 'flexStyles', 'webcomponents'], function (require, inputManager, browser, globalize, connectionManager, scrollHelper, serverNotifications, loading, datetime, focusManager, playbackManager, userSettings, imageLoader, events, layoutManager, itemShortcuts, dom) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
playbackManager = playbackManager.default || playbackManager;
|
||||||
|
browser = browser.default || browser;
|
||||||
|
loading = loading.default || loading;
|
||||||
|
|
||||||
function showViewSettings(instance) {
|
function showViewSettings(instance) {
|
||||||
require(['guide-settings-dialog'], function (guideSettingsDialog) {
|
require(['guide-settings-dialog'], function (guideSettingsDialog) {
|
||||||
guideSettingsDialog.show(instance.categoryOptions).then(function () {
|
guideSettingsDialog.show(instance.categoryOptions).then(function () {
|
||||||
|
|
|
@ -59,8 +59,8 @@ import 'css!./imageeditor';
|
||||||
currentItem = item;
|
currentItem = item;
|
||||||
|
|
||||||
apiClient.getRemoteImageProviders(getBaseRemoteOptions()).then(function (providers) {
|
apiClient.getRemoteImageProviders(getBaseRemoteOptions()).then(function (providers) {
|
||||||
const btnBrowseAllImages = page.querySelectorAll('.btnBrowseAllImages');
|
var btnBrowseAllImages = page.querySelectorAll('.btnBrowseAllImages');
|
||||||
for (let i = 0, length = btnBrowseAllImages.length; i < length; i++) {
|
for (var i = 0, length = btnBrowseAllImages.length; i < length; i++) {
|
||||||
if (providers.length) {
|
if (providers.length) {
|
||||||
btnBrowseAllImages[i].classList.remove('hide');
|
btnBrowseAllImages[i].classList.remove('hide');
|
||||||
} else {
|
} else {
|
||||||
|
@ -217,7 +217,7 @@ import 'css!./imageeditor';
|
||||||
reload(context, null, focusContext);
|
reload(context, null, focusContext);
|
||||||
}, function () {
|
}, function () {
|
||||||
import('alert').then(({default: alert}) => {
|
import('alert').then(({default: alert}) => {
|
||||||
alert(globalize.translate('DefaultErrorMessage'));
|
alert(globalize.translate('ErrorDefault'));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -205,7 +205,7 @@ import 'css!./style';
|
||||||
|
|
||||||
/* eslint-enable indent */
|
/* eslint-enable indent */
|
||||||
export default {
|
export default {
|
||||||
serLazyImage: setLazyImage,
|
setLazyImage: setLazyImage,
|
||||||
fillImages: fillImages,
|
fillImages: fillImages,
|
||||||
fillImage: fillImage,
|
fillImage: fillImage,
|
||||||
lazyImage: lazyImage,
|
lazyImage: lazyImage,
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
define(['playbackManager', 'serverNotifications', 'events'], function (playbackManager, serverNotifications, events) {
|
define(['playbackManager', 'serverNotifications', 'events'], function (playbackManager, serverNotifications, events) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
playbackManager = playbackManager.default || playbackManager;
|
||||||
|
|
||||||
function onUserDataChanged(e, apiClient, userData) {
|
function onUserDataChanged(e, apiClient, userData) {
|
||||||
var instance = this;
|
var instance = this;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
define(['browser', 'appSettings', 'events'], function (browser, appSettings, events) {
|
define(['browser', 'appSettings', 'events'], function (browser, appSettings, events) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
browser = browser.default || browser;
|
||||||
|
|
||||||
function setLayout(instance, layout, selectedLayout) {
|
function setLayout(instance, layout, selectedLayout) {
|
||||||
if (layout === selectedLayout) {
|
if (layout === selectedLayout) {
|
||||||
instance[layout] = true;
|
instance[layout] = true;
|
||||||
|
|
|
@ -1,78 +1,74 @@
|
||||||
define(['css!./loading'], function () {
|
import 'css!./loading';
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var loadingElem;
|
let loadingElem;
|
||||||
var layer1;
|
let layer1;
|
||||||
var layer2;
|
let layer2;
|
||||||
var layer3;
|
let layer3;
|
||||||
var layer4;
|
let layer4;
|
||||||
var circleLefts;
|
let circleLefts;
|
||||||
var circleRights;
|
let circleRights;
|
||||||
|
|
||||||
return {
|
export function show() {
|
||||||
show: function () {
|
let elem = loadingElem;
|
||||||
var elem = loadingElem;
|
|
||||||
|
|
||||||
if (!elem) {
|
if (!elem) {
|
||||||
elem = document.createElement('div');
|
elem = document.createElement('div');
|
||||||
loadingElem = elem;
|
loadingElem = elem;
|
||||||
|
|
||||||
elem.classList.add('docspinner');
|
elem.classList.add('docspinner');
|
||||||
elem.classList.add('mdl-spinner');
|
elem.classList.add('mdl-spinner');
|
||||||
|
|
||||||
elem.innerHTML = '<div class="mdl-spinner__layer mdl-spinner__layer-1"><div class="mdl-spinner__circle-clipper mdl-spinner__left"><div class="mdl-spinner__circle mdl-spinner__circleLeft"></div></div><div class="mdl-spinner__circle-clipper mdl-spinner__right"><div class="mdl-spinner__circle mdl-spinner__circleRight"></div></div></div><div class="mdl-spinner__layer mdl-spinner__layer-2"><div class="mdl-spinner__circle-clipper mdl-spinner__left"><div class="mdl-spinner__circle mdl-spinner__circleLeft"></div></div><div class="mdl-spinner__circle-clipper mdl-spinner__right"><div class="mdl-spinner__circle mdl-spinner__circleRight"></div></div></div><div class="mdl-spinner__layer mdl-spinner__layer-3"><div class="mdl-spinner__circle-clipper mdl-spinner__left"><div class="mdl-spinner__circle mdl-spinner__circleLeft"></div></div><div class="mdl-spinner__circle-clipper mdl-spinner__right"><div class="mdl-spinner__circle mdl-spinner__circleRight"></div></div></div><div class="mdl-spinner__layer mdl-spinner__layer-4"><div class="mdl-spinner__circle-clipper mdl-spinner__left"><div class="mdl-spinner__circle mdl-spinner__circleLeft"></div></div><div class="mdl-spinner__circle-clipper mdl-spinner__right"><div class="mdl-spinner__circle mdl-spinner__circleRight"></div></div></div>';
|
elem.innerHTML = '<div class="mdl-spinner__layer mdl-spinner__layer-1"><div class="mdl-spinner__circle-clipper mdl-spinner__left"><div class="mdl-spinner__circle mdl-spinner__circleLeft"></div></div><div class="mdl-spinner__circle-clipper mdl-spinner__right"><div class="mdl-spinner__circle mdl-spinner__circleRight"></div></div></div><div class="mdl-spinner__layer mdl-spinner__layer-2"><div class="mdl-spinner__circle-clipper mdl-spinner__left"><div class="mdl-spinner__circle mdl-spinner__circleLeft"></div></div><div class="mdl-spinner__circle-clipper mdl-spinner__right"><div class="mdl-spinner__circle mdl-spinner__circleRight"></div></div></div><div class="mdl-spinner__layer mdl-spinner__layer-3"><div class="mdl-spinner__circle-clipper mdl-spinner__left"><div class="mdl-spinner__circle mdl-spinner__circleLeft"></div></div><div class="mdl-spinner__circle-clipper mdl-spinner__right"><div class="mdl-spinner__circle mdl-spinner__circleRight"></div></div></div><div class="mdl-spinner__layer mdl-spinner__layer-4"><div class="mdl-spinner__circle-clipper mdl-spinner__left"><div class="mdl-spinner__circle mdl-spinner__circleLeft"></div></div><div class="mdl-spinner__circle-clipper mdl-spinner__right"><div class="mdl-spinner__circle mdl-spinner__circleRight"></div></div></div>';
|
||||||
|
|
||||||
document.body.appendChild(elem);
|
document.body.appendChild(elem);
|
||||||
|
|
||||||
layer1 = elem.querySelector('.mdl-spinner__layer-1');
|
layer1 = elem.querySelector('.mdl-spinner__layer-1');
|
||||||
layer2 = elem.querySelector('.mdl-spinner__layer-2');
|
layer2 = elem.querySelector('.mdl-spinner__layer-2');
|
||||||
layer3 = elem.querySelector('.mdl-spinner__layer-3');
|
layer3 = elem.querySelector('.mdl-spinner__layer-3');
|
||||||
layer4 = elem.querySelector('.mdl-spinner__layer-4');
|
layer4 = elem.querySelector('.mdl-spinner__layer-4');
|
||||||
|
|
||||||
circleLefts = elem.querySelectorAll('.mdl-spinner__circleLeft');
|
circleLefts = elem.querySelectorAll('.mdl-spinner__circleLeft');
|
||||||
circleRights = elem.querySelectorAll('.mdl-spinner__circleRight');
|
circleRights = elem.querySelectorAll('.mdl-spinner__circleRight');
|
||||||
}
|
}
|
||||||
|
|
||||||
elem.classList.add('mdlSpinnerActive');
|
elem.classList.add('mdlSpinnerActive');
|
||||||
|
|
||||||
layer1.classList.add('mdl-spinner__layer-1-active');
|
layer1.classList.add('mdl-spinner__layer-1-active');
|
||||||
layer2.classList.add('mdl-spinner__layer-2-active');
|
layer2.classList.add('mdl-spinner__layer-2-active');
|
||||||
layer3.classList.add('mdl-spinner__layer-3-active');
|
layer3.classList.add('mdl-spinner__layer-3-active');
|
||||||
layer4.classList.add('mdl-spinner__layer-4-active');
|
layer4.classList.add('mdl-spinner__layer-4-active');
|
||||||
|
|
||||||
var i;
|
for (let i = 0, length = circleLefts.length; i < length; i++) {
|
||||||
var length;
|
circleLefts[i].classList.add('mdl-spinner__circleLeft-active');
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0, length = circleLefts.length; i < length; i++) {
|
for (let i = 0, length = circleRights.length; i < length; i++) {
|
||||||
circleLefts[i].classList.add('mdl-spinner__circleLeft-active');
|
circleRights[i].classList.add('mdl-spinner__circleRight-active');
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0, length = circleRights.length; i < length; i++) {
|
export function hide() {
|
||||||
circleRights[i].classList.add('mdl-spinner__circleRight-active');
|
const elem = loadingElem;
|
||||||
}
|
|
||||||
},
|
|
||||||
hide: function () {
|
|
||||||
var elem = loadingElem;
|
|
||||||
|
|
||||||
if (elem) {
|
if (elem) {
|
||||||
elem.classList.remove('mdlSpinnerActive');
|
elem.classList.remove('mdlSpinnerActive');
|
||||||
|
|
||||||
elem.classList.remove('mdl-spinner__layer-1-active');
|
elem.classList.remove('mdl-spinner__layer-1-active');
|
||||||
elem.classList.remove('mdl-spinner__layer-2-active');
|
elem.classList.remove('mdl-spinner__layer-2-active');
|
||||||
elem.classList.remove('mdl-spinner__layer-3-active');
|
elem.classList.remove('mdl-spinner__layer-3-active');
|
||||||
elem.classList.remove('mdl-spinner__layer-4-active');
|
elem.classList.remove('mdl-spinner__layer-4-active');
|
||||||
|
|
||||||
var i;
|
for (let i = 0, length = circleLefts.length; i < length; i++) {
|
||||||
var length;
|
circleLefts[i].classList.remove('mdl-spinner__circleLeft-active');
|
||||||
|
|
||||||
for (i = 0, length = circleLefts.length; i < length; i++) {
|
|
||||||
circleLefts[i].classList.remove('mdl-spinner__circleLeft-active');
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0, length = circleRights.length; i < length; i++) {
|
|
||||||
circleRights[i].classList.remove('mdl-spinner__circleRight-active');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
|
||||||
});
|
for (let i = 0, length = circleRights.length; i < length; i++) {
|
||||||
|
circleRights[i].classList.remove('mdl-spinner__circleRight-active');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default {
|
||||||
|
show: show,
|
||||||
|
hide: hide
|
||||||
|
};
|
||||||
|
|
|
@ -85,7 +85,7 @@ import 'flexStyles';
|
||||||
refreshLibraryFromServer(dom.parentWithClass(button, 'dlg-libraryeditor'));
|
refreshLibraryFromServer(dom.parentWithClass(button, 'dlg-libraryeditor'));
|
||||||
}, () => {
|
}, () => {
|
||||||
import('toast').then(({default: toast}) => {
|
import('toast').then(({default: toast}) => {
|
||||||
toast(globalize.translate('DefaultErrorMessage'));
|
toast(globalize.translate('ErrorDefault'));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
define(['serverNotifications', 'playbackManager', 'events', 'globalize', 'require'], function (serverNotifications, playbackManager, events, globalize, require) {
|
define(['serverNotifications', 'playbackManager', 'events', 'globalize', 'require'], function (serverNotifications, playbackManager, events, globalize, require) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
playbackManager = playbackManager.default || playbackManager;
|
||||||
|
|
||||||
function onOneDocumentClick() {
|
function onOneDocumentClick() {
|
||||||
document.removeEventListener('click', onOneDocumentClick);
|
document.removeEventListener('click', onOneDocumentClick);
|
||||||
document.removeEventListener('keydown', onOneDocumentClick);
|
document.removeEventListener('keydown', onOneDocumentClick);
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -104,7 +104,7 @@ define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'c
|
||||||
var apiClient = connectionManager.getApiClient(serverId);
|
var apiClient = connectionManager.getApiClient(serverId);
|
||||||
|
|
||||||
apiClient.getLiveTvProgram(programId, apiClient.getCurrentUserId()).then(function (item) {
|
apiClient.getLiveTvProgram(programId, apiClient.getCurrentUserId()).then(function (item) {
|
||||||
playbackManager.play({
|
playbackManager.default.play({
|
||||||
ids: [item.ChannelId],
|
ids: [item.ChannelId],
|
||||||
serverId: serverId
|
serverId: serverId
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'connectionManager', 'require', 'loading', 'scrollHelper', 'imageLoader', 'scrollStyles', 'emby-button', 'emby-collapse', 'emby-input', 'paper-icon-button-light', 'css!./../formdialog', 'css!./recordingcreator', 'material-icons', 'flexStyles'], function (dialogHelper, globalize, layoutManager, mediaInfo, appHost, connectionManager, require, loading, scrollHelper, imageLoader) {
|
define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'connectionManager', 'require', 'loading', 'scrollHelper', 'imageLoader', 'scrollStyles', 'emby-button', 'emby-collapse', 'emby-input', 'paper-icon-button-light', 'css!./../formdialog', 'css!./recordingcreator', 'material-icons', 'flexStyles'], function (dialogHelper, globalize, layoutManager, mediaInfo, appHost, connectionManager, require, loading, scrollHelper, imageLoader) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
loading = loading.default || loading;
|
||||||
|
|
||||||
var currentDialog;
|
var currentDialog;
|
||||||
var recordingDeleted = false;
|
var recordingDeleted = false;
|
||||||
var currentItemId;
|
var currentItemId;
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
define(['globalize', 'connectionManager', 'serverNotifications', 'require', 'loading', 'apphost', 'dom', 'recordingHelper', 'events', 'paper-icon-button-light', 'emby-button', 'css!./recordingfields', 'flexStyles'], function (globalize, connectionManager, serverNotifications, require, loading, appHost, dom, recordingHelper, events) {
|
define(['globalize', 'connectionManager', 'serverNotifications', 'require', 'loading', 'apphost', 'dom', 'recordingHelper', 'events', 'paper-icon-button-light', 'emby-button', 'css!./recordingfields', 'flexStyles'], function (globalize, connectionManager, serverNotifications, require, loading, appHost, dom, recordingHelper, events) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
loading = loading.default || loading;
|
||||||
|
|
||||||
function loadData(parent, program, apiClient) {
|
function loadData(parent, program, apiClient) {
|
||||||
if (program.IsSeries) {
|
if (program.IsSeries) {
|
||||||
parent.querySelector('.recordSeriesContainer').classList.remove('hide');
|
parent.querySelector('.recordSeriesContainer').classList.remove('hide');
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
define(['globalize', 'loading', 'connectionManager'], function (globalize, loading, connectionManager) {
|
define(['globalize', 'loading', 'connectionManager'], function (globalize, loading, connectionManager) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
loading = loading.default || loading;
|
||||||
|
|
||||||
function changeRecordingToSeries(apiClient, timerId, programId, confirmTimerCancellation) {
|
function changeRecordingToSeries(apiClient, timerId, programId, confirmTimerCancellation) {
|
||||||
loading.show();
|
loading.show();
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'connectionManager', 'require', 'loading', 'scrollHelper', 'imageLoader', 'datetime', 'scrollStyles', 'emby-button', 'emby-checkbox', 'emby-input', 'emby-select', 'paper-icon-button-light', 'css!./../formdialog', 'css!./recordingcreator', 'material-icons', 'flexStyles'], function (dialogHelper, globalize, layoutManager, mediaInfo, appHost, connectionManager, require, loading, scrollHelper, imageLoader, datetime) {
|
define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'connectionManager', 'require', 'loading', 'scrollHelper', 'imageLoader', 'datetime', 'scrollStyles', 'emby-button', 'emby-checkbox', 'emby-input', 'emby-select', 'paper-icon-button-light', 'css!./../formdialog', 'css!./recordingcreator', 'material-icons', 'flexStyles'], function (dialogHelper, globalize, layoutManager, mediaInfo, appHost, connectionManager, require, loading, scrollHelper, imageLoader, datetime) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
loading = loading.default || loading;
|
||||||
|
|
||||||
var currentDialog;
|
var currentDialog;
|
||||||
var recordingUpdated = false;
|
var recordingUpdated = false;
|
||||||
var recordingDeleted = false;
|
var recordingDeleted = false;
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
define(['browser', 'datetime', 'backdrop', 'libraryBrowser', 'listView', 'imageLoader', 'playbackManager', 'nowPlayingHelper', 'events', 'connectionManager', 'apphost', 'globalize', 'layoutManager', 'userSettings', 'cardBuilder', 'itemContextMenu', 'cardStyle', 'emby-itemscontainer', 'css!./remotecontrol.css', 'emby-ratingbutton'], function (browser, datetime, backdrop, libraryBrowser, listView, imageLoader, playbackManager, nowPlayingHelper, events, connectionManager, appHost, globalize, layoutManager, userSettings, cardBuilder, itemContextMenu) {
|
define(['browser', 'datetime', 'backdrop', 'libraryBrowser', 'listView', 'imageLoader', 'playbackManager', 'nowPlayingHelper', 'events', 'connectionManager', 'apphost', 'globalize', 'layoutManager', 'userSettings', 'cardBuilder', 'itemContextMenu', 'cardStyle', 'emby-itemscontainer', 'css!./remotecontrol.css', 'emby-ratingbutton'], function (browser, datetime, backdrop, libraryBrowser, listView, imageLoader, playbackManager, nowPlayingHelper, events, connectionManager, appHost, globalize, layoutManager, userSettings, cardBuilder, itemContextMenu) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
playbackManager = playbackManager.default || playbackManager;
|
||||||
|
|
||||||
var showMuteButton = true;
|
var showMuteButton = true;
|
||||||
var showVolumeSlider = true;
|
var showVolumeSlider = true;
|
||||||
|
|
||||||
|
@ -119,9 +122,9 @@ define(['browser', 'datetime', 'backdrop', 'libraryBrowser', 'listView', 'imageL
|
||||||
var nowPlayingServerId = (item.ServerId || serverId);
|
var nowPlayingServerId = (item.ServerId || serverId);
|
||||||
if (item.Type == 'Audio' || item.MediaStreams[0].Type == 'Audio') {
|
if (item.Type == 'Audio' || item.MediaStreams[0].Type == 'Audio') {
|
||||||
var songName = item.Name;
|
var songName = item.Name;
|
||||||
if (item.Album != null && item.Artists != null) {
|
var artistsSeries = '';
|
||||||
var artistsSeries = '';
|
var albumName = '';
|
||||||
var albumName = item.Album;
|
if (item.Artists != null) {
|
||||||
if (item.ArtistItems != null) {
|
if (item.ArtistItems != null) {
|
||||||
for (const artist of item.ArtistItems) {
|
for (const artist of item.ArtistItems) {
|
||||||
let artistName = artist.Name;
|
let artistName = artist.Name;
|
||||||
|
@ -142,9 +145,12 @@ define(['browser', 'datetime', 'backdrop', 'libraryBrowser', 'listView', 'imageL
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
context.querySelector('.nowPlayingArtist').innerHTML = artistsSeries;
|
|
||||||
context.querySelector('.nowPlayingAlbum').innerHTML = '<a class="button-link emby-button" is="emby-linkbutton" href="details?id=' + item.AlbumId + `&serverId=${nowPlayingServerId}">${albumName}</a>`;
|
|
||||||
}
|
}
|
||||||
|
if (item.Album != null) {
|
||||||
|
albumName = '<a class="button-link emby-button" is="emby-linkbutton" href="details?id=' + item.AlbumId + `&serverId=${nowPlayingServerId}">` + item.Album + '</a>';
|
||||||
|
}
|
||||||
|
context.querySelector('.nowPlayingAlbum').innerHTML = albumName;
|
||||||
|
context.querySelector('.nowPlayingArtist').innerHTML = artistsSeries;
|
||||||
context.querySelector('.nowPlayingSongName').innerHTML = songName;
|
context.querySelector('.nowPlayingSongName').innerHTML = songName;
|
||||||
} else if (item.Type == 'Episode') {
|
} else if (item.Type == 'Episode') {
|
||||||
if (item.SeasonName != null) {
|
if (item.SeasonName != null) {
|
||||||
|
|
|
@ -1,184 +0,0 @@
|
||||||
define(['apphost', 'userSettings', 'browser', 'events', 'backdrop', 'globalize', 'require', 'appSettings'], function (appHost, userSettings, browser, events, backdrop, globalize, require, appSettings) {
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var themeStyleElement;
|
|
||||||
var currentThemeId;
|
|
||||||
|
|
||||||
function unloadTheme() {
|
|
||||||
var elem = themeStyleElement;
|
|
||||||
if (elem) {
|
|
||||||
elem.parentNode.removeChild(elem);
|
|
||||||
themeStyleElement = null;
|
|
||||||
currentThemeId = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function loadUserSkin(options) {
|
|
||||||
options = options || {};
|
|
||||||
if (options.start) {
|
|
||||||
Emby.Page.invokeShortcut(options.start);
|
|
||||||
} else {
|
|
||||||
Emby.Page.goHome();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function getThemes() {
|
|
||||||
return [{
|
|
||||||
name: 'Apple TV',
|
|
||||||
id: 'appletv'
|
|
||||||
}, {
|
|
||||||
name: 'Blue Radiance',
|
|
||||||
id: 'blueradiance'
|
|
||||||
}, {
|
|
||||||
name: 'Dark',
|
|
||||||
id: 'dark',
|
|
||||||
isDefault: true,
|
|
||||||
isDefaultServerDashboard: true
|
|
||||||
}, {
|
|
||||||
name: 'Light',
|
|
||||||
id: 'light'
|
|
||||||
}, {
|
|
||||||
name: 'Purple Haze',
|
|
||||||
id: 'purplehaze'
|
|
||||||
}, {
|
|
||||||
name: 'Windows Media Center',
|
|
||||||
id: 'wmc'
|
|
||||||
}];
|
|
||||||
}
|
|
||||||
|
|
||||||
var skinManager = {
|
|
||||||
getThemes: getThemes,
|
|
||||||
loadUserSkin: loadUserSkin
|
|
||||||
};
|
|
||||||
|
|
||||||
function getThemeStylesheetInfo(id, isDefaultProperty) {
|
|
||||||
var themes = skinManager.getThemes();
|
|
||||||
var defaultTheme;
|
|
||||||
var selectedTheme;
|
|
||||||
|
|
||||||
for (var i = 0, length = themes.length; i < length; i++) {
|
|
||||||
var theme = themes[i];
|
|
||||||
if (theme[isDefaultProperty]) {
|
|
||||||
defaultTheme = theme;
|
|
||||||
}
|
|
||||||
if (id === theme.id) {
|
|
||||||
selectedTheme = theme;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
selectedTheme = selectedTheme || defaultTheme;
|
|
||||||
return {
|
|
||||||
stylesheetPath: require.toUrl('themes/' + selectedTheme.id + '/theme.css'),
|
|
||||||
themeId: selectedTheme.id
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
var themeResources = {};
|
|
||||||
var lastSound = 0;
|
|
||||||
var currentSound;
|
|
||||||
|
|
||||||
function loadThemeResources(id) {
|
|
||||||
lastSound = 0;
|
|
||||||
if (currentSound) {
|
|
||||||
currentSound.stop();
|
|
||||||
currentSound = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
backdrop.clearBackdrop();
|
|
||||||
}
|
|
||||||
|
|
||||||
function onThemeLoaded() {
|
|
||||||
document.documentElement.classList.remove('preload');
|
|
||||||
try {
|
|
||||||
var color = getComputedStyle(document.querySelector('.skinHeader')).getPropertyValue('background-color');
|
|
||||||
if (color) {
|
|
||||||
appHost.setThemeColor(color);
|
|
||||||
}
|
|
||||||
} catch (err) {
|
|
||||||
console.error('error setting theme color: ' + err);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
skinManager.setTheme = function (id, context) {
|
|
||||||
return new Promise(function (resolve, reject) {
|
|
||||||
if (currentThemeId && currentThemeId === id) {
|
|
||||||
resolve();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var isDefaultProperty = context === 'serverdashboard' ? 'isDefaultServerDashboard' : 'isDefault';
|
|
||||||
var info = getThemeStylesheetInfo(id, isDefaultProperty);
|
|
||||||
if (currentThemeId && currentThemeId === info.themeId) {
|
|
||||||
resolve();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var linkUrl = info.stylesheetPath;
|
|
||||||
unloadTheme();
|
|
||||||
|
|
||||||
var link = document.createElement('link');
|
|
||||||
link.setAttribute('rel', 'stylesheet');
|
|
||||||
link.setAttribute('type', 'text/css');
|
|
||||||
link.onload = function () {
|
|
||||||
onThemeLoaded();
|
|
||||||
resolve();
|
|
||||||
};
|
|
||||||
|
|
||||||
link.setAttribute('href', linkUrl);
|
|
||||||
document.head.appendChild(link);
|
|
||||||
themeStyleElement = link;
|
|
||||||
currentThemeId = info.themeId;
|
|
||||||
loadThemeResources(info.themeId);
|
|
||||||
|
|
||||||
onViewBeforeShow({});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
function onViewBeforeShow(e) {
|
|
||||||
if (e.detail && e.detail.type === 'video-osd') {
|
|
||||||
// This removes the space that the scrollbar takes while playing a video
|
|
||||||
document.body.classList.remove('force-scroll');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (themeResources.backdrop) {
|
|
||||||
backdrop.setBackdrop(themeResources.backdrop);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!browser.mobile && userSettings.enableThemeSongs()) {
|
|
||||||
if (lastSound === 0) {
|
|
||||||
if (themeResources.themeSong) {
|
|
||||||
playSound(themeResources.themeSong);
|
|
||||||
}
|
|
||||||
} else if ((new Date().getTime() - lastSound) > 30000) {
|
|
||||||
if (themeResources.effect) {
|
|
||||||
playSound(themeResources.effect);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// This keeps the scrollbar always present in all pages, so we avoid clipping while switching between pages
|
|
||||||
// that need the scrollbar and pages that don't.
|
|
||||||
document.body.classList.add('force-scroll');
|
|
||||||
}
|
|
||||||
|
|
||||||
document.addEventListener('viewshow', onViewBeforeShow);
|
|
||||||
|
|
||||||
function playSound(path, volume) {
|
|
||||||
lastSound = new Date().getTime();
|
|
||||||
require(['howler'], function (howler) {
|
|
||||||
/* globals Howl */
|
|
||||||
try {
|
|
||||||
var sound = new Howl({
|
|
||||||
src: [path],
|
|
||||||
volume: volume || 0.1
|
|
||||||
});
|
|
||||||
sound.play();
|
|
||||||
currentSound = sound;
|
|
||||||
} catch (err) {
|
|
||||||
console.error('error playing sound: ' + err);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return skinManager;
|
|
||||||
});
|
|
|
@ -5,6 +5,8 @@
|
||||||
define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'focusManager', 'browser', 'apphost', 'dom', 'css!./style', 'material-icons', 'paper-icon-button-light'], function (dialogHelper, inputManager, connectionManager, layoutManager, focusManager, browser, appHost, dom) {
|
define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'focusManager', 'browser', 'apphost', 'dom', 'css!./style', 'material-icons', 'paper-icon-button-light'], function (dialogHelper, inputManager, connectionManager, layoutManager, focusManager, browser, appHost, dom) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
browser = browser.default || browser;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Name of transition event.
|
* Name of transition event.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
define(['dialogHelper', 'require', 'layoutManager', 'globalize', 'userSettings', 'connectionManager', 'loading', 'focusManager', 'dom', 'apphost', 'emby-select', 'listViewStyle', 'paper-icon-button-light', 'css!./../formdialog', 'material-icons', 'css!./subtitleeditor', 'emby-button', 'flexStyles'], function (dialogHelper, require, layoutManager, globalize, userSettings, connectionManager, loading, focusManager, dom, appHost) {
|
define(['dialogHelper', 'require', 'layoutManager', 'globalize', 'userSettings', 'connectionManager', 'loading', 'focusManager', 'dom', 'apphost', 'emby-select', 'listViewStyle', 'paper-icon-button-light', 'css!./../formdialog', 'material-icons', 'css!./subtitleeditor', 'emby-button', 'flexStyles'], function (dialogHelper, require, layoutManager, globalize, userSettings, connectionManager, loading, focusManager, dom, appHost) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
loading = loading.default || loading;
|
||||||
|
|
||||||
var currentItem;
|
var currentItem;
|
||||||
var hasChanges;
|
var hasChanges;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
define(['playbackManager', 'layoutManager', 'text!./subtitlesync.template.html', 'css!./subtitlesync'], function (playbackManager, layoutManager, template, css) {
|
define(['playbackManager', 'layoutManager', 'text!./subtitlesync.template.html', 'css!./subtitlesync'], function (playbackManager, layoutManager, template, css) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
playbackManager = playbackManager.default || playbackManager;
|
||||||
|
|
||||||
var player;
|
var player;
|
||||||
var subtitleSyncSlider;
|
var subtitleSyncSlider;
|
||||||
var subtitleSyncTextField;
|
var subtitleSyncTextField;
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
define(['playbackManager', 'userSettings', 'connectionManager'], function (playbackManager, userSettings, connectionManager) {
|
define(['playbackManager', 'userSettings', 'connectionManager'], function (playbackManager, userSettings, connectionManager) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
playbackManager = playbackManager.default || playbackManager;
|
||||||
|
|
||||||
var currentOwnerId;
|
var currentOwnerId;
|
||||||
var currentThemeIds = [];
|
var currentThemeIds = [];
|
||||||
|
|
||||||
|
|
|
@ -1,36 +1,34 @@
|
||||||
define(['css!./toast'], function () {
|
import 'css!./toast';
|
||||||
'use strict';
|
|
||||||
|
|
||||||
function remove(elem) {
|
function remove(elem) {
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
elem.parentNode.removeChild(elem);
|
elem.parentNode.removeChild(elem);
|
||||||
}, 300);
|
}, 300);
|
||||||
|
}
|
||||||
|
|
||||||
|
function animateRemove(elem) {
|
||||||
|
setTimeout(function () {
|
||||||
|
elem.classList.remove('toastVisible');
|
||||||
|
remove(elem);
|
||||||
|
}, 3300);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function (options) {
|
||||||
|
if (typeof options === 'string') {
|
||||||
|
options = {
|
||||||
|
text: options
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function animateRemove(elem) {
|
const elem = document.createElement('div');
|
||||||
setTimeout(function () {
|
elem.classList.add('toast');
|
||||||
elem.classList.remove('toastVisible');
|
elem.innerHTML = options.text;
|
||||||
remove(elem);
|
|
||||||
}, 3300);
|
|
||||||
}
|
|
||||||
|
|
||||||
return function (options) {
|
document.body.appendChild(elem);
|
||||||
if (typeof options === 'string') {
|
|
||||||
options = {
|
|
||||||
text: options
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
var elem = document.createElement('div');
|
setTimeout(function () {
|
||||||
elem.classList.add('toast');
|
elem.classList.add('toastVisible');
|
||||||
elem.innerHTML = options.text;
|
|
||||||
|
|
||||||
document.body.appendChild(elem);
|
animateRemove(elem);
|
||||||
|
}, 300);
|
||||||
setTimeout(function () {
|
}
|
||||||
elem.classList.add('toastVisible');
|
|
||||||
|
|
||||||
animateRemove(elem);
|
|
||||||
}, 300);
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
define(['dialogHelper', 'dom', 'layoutManager', 'connectionManager', 'globalize', 'loading', 'browser', 'focusManager', 'scrollHelper', 'material-icons', 'formDialogStyle', 'emby-button', 'emby-itemscontainer', 'cardStyle'], function (dialogHelper, dom, layoutManager, connectionManager, globalize, loading, browser, focusManager, scrollHelper) {
|
define(['dialogHelper', 'dom', 'layoutManager', 'connectionManager', 'globalize', 'loading', 'browser', 'focusManager', 'scrollHelper', 'material-icons', 'formDialogStyle', 'emby-button', 'emby-itemscontainer', 'cardStyle'], function (dialogHelper, dom, layoutManager, connectionManager, globalize, loading, browser, focusManager, scrollHelper) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
browser = browser.default || browser;
|
||||||
|
loading = loading.default || loading;
|
||||||
|
|
||||||
var enableFocusTransform = !browser.slow && !browser.edge;
|
var enableFocusTransform = !browser.slow && !browser.edge;
|
||||||
|
|
||||||
function getEditorHtml() {
|
function getEditorHtml() {
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
define(['jQuery', 'loading', 'globalize', 'emby-checkbox', 'listViewStyle', 'emby-input', 'emby-select', 'emby-button', 'flexStyles'], function ($, loading, globalize) {
|
define(['jQuery', 'loading', 'globalize', 'emby-checkbox', 'listViewStyle', 'emby-input', 'emby-select', 'emby-button', 'flexStyles'], function ($, loading, globalize) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
loading = loading.default || loading;
|
||||||
|
|
||||||
return function (page, providerId, options) {
|
return function (page, providerId, options) {
|
||||||
function reload() {
|
function reload() {
|
||||||
loading.show();
|
loading.show();
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
define(['jQuery', 'loading', 'globalize', 'emby-checkbox', 'emby-input', 'listViewStyle', 'paper-icon-button-light'], function ($, loading, globalize) {
|
define(['jQuery', 'loading', 'globalize', 'emby-checkbox', 'emby-input', 'listViewStyle', 'paper-icon-button-light'], function ($, loading, globalize) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
loading = loading.default || loading;
|
||||||
|
|
||||||
return function (page, providerId, options) {
|
return function (page, providerId, options) {
|
||||||
function getListingProvider(config, id) {
|
function getListingProvider(config, id) {
|
||||||
if (config && id) {
|
if (config && id) {
|
||||||
|
|
|
@ -1,7 +1,19 @@
|
||||||
define(['dom', 'playbackManager', 'connectionManager', 'events', 'mediaInfo', 'layoutManager', 'focusManager', 'globalize', 'itemHelper', 'css!./upnextdialog', 'emby-button', 'flexStyles'], function (dom, playbackManager, connectionManager, events, mediaInfo, layoutManager, focusManager, globalize, itemHelper) {
|
import dom from 'dom';
|
||||||
'use strict';
|
import playbackManager from 'playbackManager';
|
||||||
|
import connectionManager from 'connectionManager';
|
||||||
|
import events from 'events';
|
||||||
|
import mediaInfo from 'mediaInfo';
|
||||||
|
import layoutManager from 'layoutManager';
|
||||||
|
import focusManager from 'focusManager';
|
||||||
|
import globalize from 'globalize';
|
||||||
|
import itemHelper from 'itemHelper';
|
||||||
|
import 'css!./upnextdialog';
|
||||||
|
import 'emby-button';
|
||||||
|
import 'flexStyles';
|
||||||
|
|
||||||
var transitionEndEventName = dom.whichTransitionEvent();
|
/* eslint-disable indent */
|
||||||
|
|
||||||
|
const transitionEndEventName = dom.whichTransitionEvent();
|
||||||
|
|
||||||
function seriesImageUrl(item, options) {
|
function seriesImageUrl(item, options) {
|
||||||
if (item.Type !== 'Episode') {
|
if (item.Type !== 'Episode') {
|
||||||
|
@ -56,7 +68,7 @@ define(['dom', 'playbackManager', 'connectionManager', 'events', 'mediaInfo', 'l
|
||||||
|
|
||||||
function setPoster(osdPoster, item, secondaryItem) {
|
function setPoster(osdPoster, item, secondaryItem) {
|
||||||
if (item) {
|
if (item) {
|
||||||
var imgUrl = seriesImageUrl(item, { type: 'Primary' }) ||
|
let imgUrl = seriesImageUrl(item, { type: 'Primary' }) ||
|
||||||
seriesImageUrl(item, { type: 'Thumb' }) ||
|
seriesImageUrl(item, { type: 'Thumb' }) ||
|
||||||
imageUrl(item, { type: 'Primary' });
|
imageUrl(item, { type: 'Primary' });
|
||||||
|
|
||||||
|
@ -76,7 +88,7 @@ define(['dom', 'playbackManager', 'connectionManager', 'events', 'mediaInfo', 'l
|
||||||
}
|
}
|
||||||
|
|
||||||
function getHtml() {
|
function getHtml() {
|
||||||
var html = '';
|
let html = '';
|
||||||
|
|
||||||
html += '<div class="upNextDialog-poster">';
|
html += '<div class="upNextDialog-poster">';
|
||||||
html += '</div>';
|
html += '</div>';
|
||||||
|
@ -112,17 +124,17 @@ define(['dom', 'playbackManager', 'connectionManager', 'events', 'mediaInfo', 'l
|
||||||
}
|
}
|
||||||
|
|
||||||
function setNextVideoText() {
|
function setNextVideoText() {
|
||||||
var instance = this;
|
const instance = this;
|
||||||
|
|
||||||
var elem = instance.options.parent;
|
const elem = instance.options.parent;
|
||||||
|
|
||||||
var secondsRemaining = Math.max(Math.round(getTimeRemainingMs(instance) / 1000), 0);
|
const secondsRemaining = Math.max(Math.round(getTimeRemainingMs(instance) / 1000), 0);
|
||||||
|
|
||||||
console.debug('up next seconds remaining: ' + secondsRemaining);
|
console.debug('up next seconds remaining: ' + secondsRemaining);
|
||||||
|
|
||||||
var timeText = '<span class="upNextDialog-countdownText">' + globalize.translate('HeaderSecondsValue', secondsRemaining) + '</span>';
|
const timeText = '<span class="upNextDialog-countdownText">' + globalize.translate('HeaderSecondsValue', secondsRemaining) + '</span>';
|
||||||
|
|
||||||
var nextVideoText = instance.itemType === 'Episode' ?
|
const nextVideoText = instance.itemType === 'Episode' ?
|
||||||
globalize.translate('HeaderNextEpisodePlayingInValue', timeText) :
|
globalize.translate('HeaderNextEpisodePlayingInValue', timeText) :
|
||||||
globalize.translate('HeaderNextVideoPlayingInValue', timeText);
|
globalize.translate('HeaderNextVideoPlayingInValue', timeText);
|
||||||
|
|
||||||
|
@ -130,9 +142,9 @@ define(['dom', 'playbackManager', 'connectionManager', 'events', 'mediaInfo', 'l
|
||||||
}
|
}
|
||||||
|
|
||||||
function fillItem(item) {
|
function fillItem(item) {
|
||||||
var instance = this;
|
const instance = this;
|
||||||
|
|
||||||
var elem = instance.options.parent;
|
const elem = instance.options.parent;
|
||||||
|
|
||||||
setPoster(elem.querySelector('.upNextDialog-poster'), item);
|
setPoster(elem.querySelector('.upNextDialog-poster'), item);
|
||||||
|
|
||||||
|
@ -141,7 +153,7 @@ define(['dom', 'playbackManager', 'connectionManager', 'events', 'mediaInfo', 'l
|
||||||
elem.querySelector('.upNextDialog-mediainfo').innerHTML = mediaInfo.getPrimaryMediaInfoHtml(item, {
|
elem.querySelector('.upNextDialog-mediainfo').innerHTML = mediaInfo.getPrimaryMediaInfoHtml(item, {
|
||||||
});
|
});
|
||||||
|
|
||||||
var title = itemHelper.getDisplayName(item);
|
let title = itemHelper.getDisplayName(item);
|
||||||
if (item.SeriesName) {
|
if (item.SeriesName) {
|
||||||
title = item.SeriesName + ' - ' + title;
|
title = item.SeriesName + ' - ' + title;
|
||||||
}
|
}
|
||||||
|
@ -161,10 +173,10 @@ define(['dom', 'playbackManager', 'connectionManager', 'events', 'mediaInfo', 'l
|
||||||
}
|
}
|
||||||
|
|
||||||
function onStartNowClick() {
|
function onStartNowClick() {
|
||||||
var options = this.options;
|
const options = this.options;
|
||||||
|
|
||||||
if (options) {
|
if (options) {
|
||||||
var player = options.player;
|
const player = options.player;
|
||||||
|
|
||||||
this.hide();
|
this.hide();
|
||||||
|
|
||||||
|
@ -186,7 +198,7 @@ define(['dom', 'playbackManager', 'connectionManager', 'events', 'mediaInfo', 'l
|
||||||
}
|
}
|
||||||
|
|
||||||
function clearHideAnimationEventListeners(instance, elem) {
|
function clearHideAnimationEventListeners(instance, elem) {
|
||||||
var fn = instance._onHideAnimationComplete;
|
const fn = instance._onHideAnimationComplete;
|
||||||
|
|
||||||
if (fn) {
|
if (fn) {
|
||||||
dom.removeEventListener(elem, transitionEndEventName, fn, {
|
dom.removeEventListener(elem, transitionEndEventName, fn, {
|
||||||
|
@ -196,8 +208,8 @@ define(['dom', 'playbackManager', 'connectionManager', 'events', 'mediaInfo', 'l
|
||||||
}
|
}
|
||||||
|
|
||||||
function onHideAnimationComplete(e) {
|
function onHideAnimationComplete(e) {
|
||||||
var instance = this;
|
const instance = this;
|
||||||
var elem = e.target;
|
const elem = e.target;
|
||||||
|
|
||||||
elem.classList.add('hide');
|
elem.classList.add('hide');
|
||||||
|
|
||||||
|
@ -206,14 +218,14 @@ define(['dom', 'playbackManager', 'connectionManager', 'events', 'mediaInfo', 'l
|
||||||
}
|
}
|
||||||
|
|
||||||
function hideComingUpNext() {
|
function hideComingUpNext() {
|
||||||
var instance = this;
|
const instance = this;
|
||||||
clearCountdownTextTimeout(this);
|
clearCountdownTextTimeout(this);
|
||||||
|
|
||||||
if (!instance.options) {
|
if (!instance.options) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var elem = instance.options.parent;
|
const elem = instance.options.parent;
|
||||||
|
|
||||||
if (!elem) {
|
if (!elem) {
|
||||||
return;
|
return;
|
||||||
|
@ -230,7 +242,7 @@ define(['dom', 'playbackManager', 'connectionManager', 'events', 'mediaInfo', 'l
|
||||||
|
|
||||||
elem.classList.add('upNextDialog-hidden');
|
elem.classList.add('upNextDialog-hidden');
|
||||||
|
|
||||||
var fn = onHideAnimationComplete.bind(instance);
|
const fn = onHideAnimationComplete.bind(instance);
|
||||||
instance._onHideAnimationComplete = fn;
|
instance._onHideAnimationComplete = fn;
|
||||||
|
|
||||||
dom.addEventListener(elem, transitionEndEventName, fn, {
|
dom.addEventListener(elem, transitionEndEventName, fn, {
|
||||||
|
@ -239,12 +251,12 @@ define(['dom', 'playbackManager', 'connectionManager', 'events', 'mediaInfo', 'l
|
||||||
}
|
}
|
||||||
|
|
||||||
function getTimeRemainingMs(instance) {
|
function getTimeRemainingMs(instance) {
|
||||||
var options = instance.options;
|
const options = instance.options;
|
||||||
if (options) {
|
if (options) {
|
||||||
var runtimeTicks = playbackManager.duration(options.player);
|
const runtimeTicks = playbackManager.duration(options.player);
|
||||||
|
|
||||||
if (runtimeTicks) {
|
if (runtimeTicks) {
|
||||||
var timeRemainingTicks = runtimeTicks - playbackManager.currentTime(options.player);
|
const timeRemainingTicks = runtimeTicks - playbackManager.currentTime(options.player);
|
||||||
|
|
||||||
return Math.round(timeRemainingTicks / 10000);
|
return Math.round(timeRemainingTicks / 10000);
|
||||||
}
|
}
|
||||||
|
@ -254,7 +266,7 @@ define(['dom', 'playbackManager', 'connectionManager', 'events', 'mediaInfo', 'l
|
||||||
}
|
}
|
||||||
|
|
||||||
function startComingUpNextHideTimer(instance) {
|
function startComingUpNextHideTimer(instance) {
|
||||||
var timeRemainingMs = getTimeRemainingMs(instance);
|
const timeRemainingMs = getTimeRemainingMs(instance);
|
||||||
|
|
||||||
if (timeRemainingMs <= 0) {
|
if (timeRemainingMs <= 0) {
|
||||||
return;
|
return;
|
||||||
|
@ -266,14 +278,14 @@ define(['dom', 'playbackManager', 'connectionManager', 'events', 'mediaInfo', 'l
|
||||||
instance._countdownTextTimeout = setInterval(setNextVideoText.bind(instance), 400);
|
instance._countdownTextTimeout = setInterval(setNextVideoText.bind(instance), 400);
|
||||||
}
|
}
|
||||||
|
|
||||||
function UpNextDialog(options) {
|
class UpNextDialog {
|
||||||
|
constructor(options) {
|
||||||
this.options = options;
|
this.options = options;
|
||||||
|
|
||||||
init(this, options);
|
init(this, options);
|
||||||
}
|
}
|
||||||
|
show() {
|
||||||
UpNextDialog.prototype.show = function () {
|
const elem = this.options.parent;
|
||||||
var elem = this.options.parent;
|
|
||||||
|
|
||||||
clearHideAnimationEventListeners(this, elem);
|
clearHideAnimationEventListeners(this, elem);
|
||||||
|
|
||||||
|
@ -291,18 +303,18 @@ define(['dom', 'playbackManager', 'connectionManager', 'events', 'mediaInfo', 'l
|
||||||
}
|
}
|
||||||
|
|
||||||
startComingUpNextHideTimer(this);
|
startComingUpNextHideTimer(this);
|
||||||
};
|
}
|
||||||
|
hide() {
|
||||||
UpNextDialog.prototype.hide = function () {
|
|
||||||
hideComingUpNext.call(this);
|
hideComingUpNext.call(this);
|
||||||
};
|
}
|
||||||
|
destroy() {
|
||||||
UpNextDialog.prototype.destroy = function () {
|
|
||||||
hideComingUpNext.call(this);
|
hideComingUpNext.call(this);
|
||||||
|
|
||||||
this.options = null;
|
this.options = null;
|
||||||
this.itemType = null;
|
this.itemType = null;
|
||||||
};
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return UpNextDialog;
|
export default UpNextDialog;
|
||||||
});
|
|
||||||
|
/* eslint-enable indent */
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
define(['browser', 'dom', 'layoutManager', 'css!components/viewManager/viewContainer'], function (browser, dom, layoutManager) {
|
import 'css!components/viewManager/viewContainer';
|
||||||
'use strict';
|
/* eslint-disable indent */
|
||||||
|
|
||||||
function setControllerClass(view, options) {
|
function setControllerClass(view, options) {
|
||||||
if (options.controllerFactory) {
|
if (options.controllerFactory) {
|
||||||
return Promise.resolve();
|
return Promise.resolve();
|
||||||
}
|
}
|
||||||
|
|
||||||
var controllerUrl = view.getAttribute('data-controller');
|
let controllerUrl = view.getAttribute('data-controller');
|
||||||
|
|
||||||
if (controllerUrl) {
|
if (controllerUrl) {
|
||||||
if (controllerUrl.indexOf('__plugin/') === 0) {
|
if (controllerUrl.indexOf('__plugin/') === 0) {
|
||||||
|
@ -14,7 +14,7 @@ define(['browser', 'dom', 'layoutManager', 'css!components/viewManager/viewConta
|
||||||
}
|
}
|
||||||
|
|
||||||
controllerUrl = Dashboard.getConfigurationResourceUrl(controllerUrl);
|
controllerUrl = Dashboard.getConfigurationResourceUrl(controllerUrl);
|
||||||
return getRequirePromise([controllerUrl]).then(function (ControllerFactory) {
|
return import(controllerUrl).then((ControllerFactory) => {
|
||||||
options.controllerFactory = ControllerFactory;
|
options.controllerFactory = ControllerFactory;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -22,94 +22,85 @@ define(['browser', 'dom', 'layoutManager', 'css!components/viewManager/viewConta
|
||||||
return Promise.resolve();
|
return Promise.resolve();
|
||||||
}
|
}
|
||||||
|
|
||||||
function getRequirePromise(deps) {
|
export function loadView(options) {
|
||||||
return new Promise(function (resolve, reject) {
|
|
||||||
require(deps, resolve);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function loadView(options) {
|
|
||||||
if (!options.cancel) {
|
if (!options.cancel) {
|
||||||
var selected = selectedPageIndex;
|
const selected = selectedPageIndex;
|
||||||
var previousAnimatable = selected === -1 ? null : allPages[selected];
|
const previousAnimatable = selected === -1 ? null : allPages[selected];
|
||||||
var pageIndex = selected + 1;
|
let pageIndex = selected + 1;
|
||||||
|
|
||||||
if (pageIndex >= pageContainerCount) {
|
if (pageIndex >= pageContainerCount) {
|
||||||
pageIndex = 0;
|
pageIndex = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
var isPluginpage = options.url.toLowerCase().indexOf('/configurationpage') !== -1;
|
const isPluginpage = options.url.toLowerCase().indexOf('/configurationpage') !== -1;
|
||||||
var newViewInfo = normalizeNewView(options, isPluginpage);
|
const newViewInfo = normalizeNewView(options, isPluginpage);
|
||||||
var newView = newViewInfo.elem;
|
const newView = newViewInfo.elem;
|
||||||
var modulesToLoad = [];
|
|
||||||
|
|
||||||
return new Promise(function (resolve) {
|
return new Promise((resolve) => {
|
||||||
require(modulesToLoad, function () {
|
const currentPage = allPages[pageIndex];
|
||||||
var currentPage = allPages[pageIndex];
|
|
||||||
|
|
||||||
if (currentPage) {
|
if (currentPage) {
|
||||||
triggerDestroy(currentPage);
|
triggerDestroy(currentPage);
|
||||||
}
|
}
|
||||||
|
|
||||||
var view = newView;
|
let view = newView;
|
||||||
|
|
||||||
if (typeof view == 'string') {
|
if (typeof view == 'string') {
|
||||||
view = document.createElement('div');
|
view = document.createElement('div');
|
||||||
view.innerHTML = newView;
|
view.innerHTML = newView;
|
||||||
}
|
}
|
||||||
|
|
||||||
view.classList.add('mainAnimatedPage');
|
view.classList.add('mainAnimatedPage');
|
||||||
|
|
||||||
if (currentPage) {
|
if (currentPage) {
|
||||||
if (newViewInfo.hasScript && window.$) {
|
if (newViewInfo.hasScript && window.$) {
|
||||||
view = $(view).appendTo(mainAnimatedPages)[0];
|
mainAnimatedPages.removeChild(currentPage);
|
||||||
mainAnimatedPages.removeChild(currentPage);
|
view = $(view).appendTo(mainAnimatedPages)[0];
|
||||||
} else {
|
|
||||||
mainAnimatedPages.replaceChild(view, currentPage);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if (newViewInfo.hasScript && window.$) {
|
mainAnimatedPages.replaceChild(view, currentPage);
|
||||||
view = $(view).appendTo(mainAnimatedPages)[0];
|
}
|
||||||
} else {
|
} else {
|
||||||
mainAnimatedPages.appendChild(view);
|
if (newViewInfo.hasScript && window.$) {
|
||||||
}
|
view = $(view).appendTo(mainAnimatedPages)[0];
|
||||||
|
} else {
|
||||||
|
mainAnimatedPages.appendChild(view);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.type) {
|
||||||
|
view.setAttribute('data-type', options.type);
|
||||||
|
}
|
||||||
|
|
||||||
|
const properties = [];
|
||||||
|
|
||||||
|
if (options.fullscreen) {
|
||||||
|
properties.push('fullscreen');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (properties.length) {
|
||||||
|
view.setAttribute('data-properties', properties.join(','));
|
||||||
|
}
|
||||||
|
|
||||||
|
allPages[pageIndex] = view;
|
||||||
|
setControllerClass(view, options).then(() => {
|
||||||
|
if (onBeforeChange) {
|
||||||
|
onBeforeChange(view, false, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options.type) {
|
beforeAnimate(allPages, pageIndex, selected);
|
||||||
view.setAttribute('data-type', options.type);
|
selectedPageIndex = pageIndex;
|
||||||
|
currentUrls[pageIndex] = options.url;
|
||||||
|
|
||||||
|
if (!options.cancel && previousAnimatable) {
|
||||||
|
afterAnimate(allPages, pageIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
var properties = [];
|
if (window.$) {
|
||||||
|
$.mobile = $.mobile || {};
|
||||||
if (options.fullscreen) {
|
$.mobile.activePage = view;
|
||||||
properties.push('fullscreen');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (properties.length) {
|
resolve(view);
|
||||||
view.setAttribute('data-properties', properties.join(','));
|
|
||||||
}
|
|
||||||
|
|
||||||
allPages[pageIndex] = view;
|
|
||||||
setControllerClass(view, options).then(function () {
|
|
||||||
if (onBeforeChange) {
|
|
||||||
onBeforeChange(view, false, options);
|
|
||||||
}
|
|
||||||
|
|
||||||
beforeAnimate(allPages, pageIndex, selected);
|
|
||||||
selectedPageIndex = pageIndex;
|
|
||||||
currentUrls[pageIndex] = options.url;
|
|
||||||
|
|
||||||
if (!options.cancel && previousAnimatable) {
|
|
||||||
afterAnimate(allPages, pageIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (window.$) {
|
|
||||||
$.mobile = $.mobile || {};
|
|
||||||
$.mobile.activePage = view;
|
|
||||||
}
|
|
||||||
|
|
||||||
resolve(view);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -125,28 +116,28 @@ define(['browser', 'dom', 'layoutManager', 'css!components/viewManager/viewConta
|
||||||
html = replaceAll(html, '<\/script>--\x3e', '<\/script>');
|
html = replaceAll(html, '<\/script>--\x3e', '<\/script>');
|
||||||
}
|
}
|
||||||
|
|
||||||
var wrapper = document.createElement('div');
|
const wrapper = document.createElement('div');
|
||||||
wrapper.innerHTML = html;
|
wrapper.innerHTML = html;
|
||||||
return wrapper.querySelector('div[data-role="page"]');
|
return wrapper.querySelector('div[data-role="page"]');
|
||||||
}
|
}
|
||||||
|
|
||||||
function normalizeNewView(options, isPluginpage) {
|
function normalizeNewView(options, isPluginpage) {
|
||||||
var viewHtml = options.view;
|
const viewHtml = options.view;
|
||||||
|
|
||||||
if (viewHtml.indexOf('data-role="page"') === -1) {
|
if (viewHtml.indexOf('data-role="page"') === -1) {
|
||||||
return viewHtml;
|
return viewHtml;
|
||||||
}
|
}
|
||||||
|
|
||||||
var hasScript = viewHtml.indexOf('<script') !== -1;
|
let hasScript = viewHtml.indexOf('<script') !== -1;
|
||||||
var elem = parseHtml(viewHtml, hasScript);
|
const elem = parseHtml(viewHtml, hasScript);
|
||||||
|
|
||||||
if (hasScript) {
|
if (hasScript) {
|
||||||
hasScript = elem.querySelector('script') != null;
|
hasScript = elem.querySelector('script') != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
var hasjQuery = false;
|
let hasjQuery = false;
|
||||||
var hasjQuerySelect = false;
|
let hasjQuerySelect = false;
|
||||||
var hasjQueryChecked = false;
|
let hasjQueryChecked = false;
|
||||||
|
|
||||||
if (isPluginpage) {
|
if (isPluginpage) {
|
||||||
hasjQuery = viewHtml.indexOf('jQuery') != -1 || viewHtml.indexOf('$(') != -1 || viewHtml.indexOf('$.') != -1;
|
hasjQuery = viewHtml.indexOf('jQuery') != -1 || viewHtml.indexOf('$(') != -1 || viewHtml.indexOf('$.') != -1;
|
||||||
|
@ -164,7 +155,7 @@ define(['browser', 'dom', 'layoutManager', 'css!components/viewManager/viewConta
|
||||||
}
|
}
|
||||||
|
|
||||||
function beforeAnimate(allPages, newPageIndex, oldPageIndex) {
|
function beforeAnimate(allPages, newPageIndex, oldPageIndex) {
|
||||||
for (var index = 0, length = allPages.length; index < length; index++) {
|
for (let index = 0, length = allPages.length; index < length; index++) {
|
||||||
if (newPageIndex !== index && oldPageIndex !== index) {
|
if (newPageIndex !== index && oldPageIndex !== index) {
|
||||||
allPages[index].classList.add('hide');
|
allPages[index].classList.add('hide');
|
||||||
}
|
}
|
||||||
|
@ -172,33 +163,33 @@ define(['browser', 'dom', 'layoutManager', 'css!components/viewManager/viewConta
|
||||||
}
|
}
|
||||||
|
|
||||||
function afterAnimate(allPages, newPageIndex) {
|
function afterAnimate(allPages, newPageIndex) {
|
||||||
for (var index = 0, length = allPages.length; index < length; index++) {
|
for (let index = 0, length = allPages.length; index < length; index++) {
|
||||||
if (newPageIndex !== index) {
|
if (newPageIndex !== index) {
|
||||||
allPages[index].classList.add('hide');
|
allPages[index].classList.add('hide');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function setOnBeforeChange(fn) {
|
export function setOnBeforeChange(fn) {
|
||||||
onBeforeChange = fn;
|
onBeforeChange = fn;
|
||||||
}
|
}
|
||||||
|
|
||||||
function tryRestoreView(options) {
|
export function tryRestoreView(options) {
|
||||||
var url = options.url;
|
const url = options.url;
|
||||||
var index = currentUrls.indexOf(url);
|
const index = currentUrls.indexOf(url);
|
||||||
|
|
||||||
if (index !== -1) {
|
if (index !== -1) {
|
||||||
var animatable = allPages[index];
|
const animatable = allPages[index];
|
||||||
var view = animatable;
|
const view = animatable;
|
||||||
|
|
||||||
if (view) {
|
if (view) {
|
||||||
if (options.cancel) {
|
if (options.cancel) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var selected = selectedPageIndex;
|
const selected = selectedPageIndex;
|
||||||
var previousAnimatable = selected === -1 ? null : allPages[selected];
|
const previousAnimatable = selected === -1 ? null : allPages[selected];
|
||||||
return setControllerClass(view, options).then(function () {
|
return setControllerClass(view, options).then(() => {
|
||||||
if (onBeforeChange) {
|
if (onBeforeChange) {
|
||||||
onBeforeChange(view, true, options);
|
onBeforeChange(view, true, options);
|
||||||
}
|
}
|
||||||
|
@ -228,25 +219,28 @@ define(['browser', 'dom', 'layoutManager', 'css!components/viewManager/viewConta
|
||||||
view.dispatchEvent(new CustomEvent('viewdestroy', {}));
|
view.dispatchEvent(new CustomEvent('viewdestroy', {}));
|
||||||
}
|
}
|
||||||
|
|
||||||
function reset() {
|
export function reset() {
|
||||||
allPages = [];
|
allPages = [];
|
||||||
currentUrls = [];
|
currentUrls = [];
|
||||||
mainAnimatedPages.innerHTML = '';
|
mainAnimatedPages.innerHTML = '';
|
||||||
selectedPageIndex = -1;
|
selectedPageIndex = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
var onBeforeChange;
|
let onBeforeChange;
|
||||||
var mainAnimatedPages = document.querySelector('.mainAnimatedPages');
|
const mainAnimatedPages = document.querySelector('.mainAnimatedPages');
|
||||||
var allPages = [];
|
let allPages = [];
|
||||||
var currentUrls = [];
|
let currentUrls = [];
|
||||||
var pageContainerCount = 3;
|
const pageContainerCount = 3;
|
||||||
var selectedPageIndex = -1;
|
let selectedPageIndex = -1;
|
||||||
reset();
|
reset();
|
||||||
mainAnimatedPages.classList.remove('hide');
|
mainAnimatedPages.classList.remove('hide');
|
||||||
return {
|
|
||||||
loadView: loadView,
|
/* eslint-enable indent */
|
||||||
tryRestoreView: tryRestoreView,
|
|
||||||
reset: reset,
|
export default {
|
||||||
setOnBeforeChange: setOnBeforeChange
|
loadView: loadView,
|
||||||
};
|
tryRestoreView: tryRestoreView,
|
||||||
});
|
reset: reset,
|
||||||
|
setOnBeforeChange: setOnBeforeChange
|
||||||
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,38 @@
|
||||||
{
|
{
|
||||||
"multiserver": false
|
"multiserver": false,
|
||||||
|
"themes": [
|
||||||
|
{
|
||||||
|
"name": "Apple TV",
|
||||||
|
"id": "appletv"
|
||||||
|
}, {
|
||||||
|
"name": "Blue Radiance",
|
||||||
|
"id": "blueradiance"
|
||||||
|
}, {
|
||||||
|
"name": "Dark",
|
||||||
|
"id": "dark",
|
||||||
|
"default": true
|
||||||
|
}, {
|
||||||
|
"name": "Light",
|
||||||
|
"id": "light"
|
||||||
|
}, {
|
||||||
|
"name": "Purple Haze",
|
||||||
|
"id": "purplehaze"
|
||||||
|
}, {
|
||||||
|
"name": "WMC",
|
||||||
|
"id": "wmc"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"plugins": [
|
||||||
|
"plugins/playAccessValidation/plugin",
|
||||||
|
"plugins/experimentalWarnings/plugin",
|
||||||
|
"plugins/htmlAudioPlayer/plugin",
|
||||||
|
"plugins/htmlVideoPlayer/plugin",
|
||||||
|
"plugins/photoPlayer/plugin",
|
||||||
|
"plugins/bookPlayer/plugin",
|
||||||
|
"plugins/youtubePlayer/plugin",
|
||||||
|
"plugins/backdropScreensaver/plugin",
|
||||||
|
"plugins/logoScreensaver/plugin",
|
||||||
|
"plugins/sessionPlayer/plugin",
|
||||||
|
"plugins/chromecastPlayer/plugin"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,7 +81,7 @@ import libraryMenu from 'libraryMenu';
|
||||||
updateEncoder(form);
|
updateEncoder(form);
|
||||||
}, function () {
|
}, function () {
|
||||||
import('alert').then(({default: alert}) => {
|
import('alert').then(({default: alert}) => {
|
||||||
alert(globalize.translate('DefaultErrorMessage'));
|
alert(globalize.translate('ErrorDefault'));
|
||||||
});
|
});
|
||||||
|
|
||||||
Dashboard.processServerConfigurationUpdateResult();
|
Dashboard.processServerConfigurationUpdateResult();
|
||||||
|
|
|
@ -52,7 +52,7 @@ import 'emby-button';
|
||||||
});
|
});
|
||||||
}, function () {
|
}, function () {
|
||||||
import('alert').then(({default: alert}) => {
|
import('alert').then(({default: alert}) => {
|
||||||
alert(globalize.translate('DefaultErrorMessage'));
|
alert(globalize.translate('ErrorDefault'));
|
||||||
});
|
});
|
||||||
|
|
||||||
Dashboard.processServerConfigurationUpdateResult();
|
Dashboard.processServerConfigurationUpdateResult();
|
||||||
|
|
|
@ -1,119 +1,118 @@
|
||||||
define(['jQuery', 'emby-checkbox'], function ($) {
|
import $ from 'jQuery';
|
||||||
'use strict';
|
import 'emby-checkbox';
|
||||||
|
|
||||||
function fillItems(elem, items, cssClass, idPrefix, currentList, isEnabledList) {
|
function fillItems(elem, items, cssClass, idPrefix, currentList, isEnabledList) {
|
||||||
var html = '<div class="checkboxList paperList" style="padding: .5em 1em;">';
|
let html = '<div class="checkboxList paperList" style="padding: .5em 1em;">';
|
||||||
html += items.map(function (u) {
|
html += items.map(function (u) {
|
||||||
var isChecked = isEnabledList ? currentList.indexOf(u.Id) != -1 : currentList.indexOf(u.Id) == -1;
|
const isChecked = isEnabledList ? currentList.indexOf(u.Id) != -1 : currentList.indexOf(u.Id) == -1;
|
||||||
var checkedHtml = isChecked ? ' checked="checked"' : '';
|
const checkedHtml = isChecked ? ' checked="checked"' : '';
|
||||||
return '<label><input is="emby-checkbox" class="' + cssClass + '" type="checkbox" data-itemid="' + u.Id + '"' + checkedHtml + '/><span>' + u.Name + '</span></label>';
|
return '<label><input is="emby-checkbox" class="' + cssClass + '" type="checkbox" data-itemid="' + u.Id + '"' + checkedHtml + '/><span>' + u.Name + '</span></label>';
|
||||||
}).join('');
|
}).join('');
|
||||||
html += '</div>';
|
html += '</div>';
|
||||||
elem.html(html).trigger('create');
|
elem.html(html).trigger('create');
|
||||||
}
|
}
|
||||||
|
|
||||||
function reload(page) {
|
function reload(page) {
|
||||||
var type = getParameterByName('type');
|
const type = getParameterByName('type');
|
||||||
var promise1 = ApiClient.getUsers();
|
const promise1 = ApiClient.getUsers();
|
||||||
var promise2 = ApiClient.getNamedConfiguration(notificationsConfigurationKey);
|
const promise2 = ApiClient.getNamedConfiguration(notificationsConfigurationKey);
|
||||||
var promise3 = ApiClient.getJSON(ApiClient.getUrl('Notifications/Types'));
|
const promise3 = ApiClient.getJSON(ApiClient.getUrl('Notifications/Types'));
|
||||||
var promise4 = ApiClient.getJSON(ApiClient.getUrl('Notifications/Services'));
|
const promise4 = ApiClient.getJSON(ApiClient.getUrl('Notifications/Services'));
|
||||||
Promise.all([promise1, promise2, promise3, promise4]).then(function (responses) {
|
Promise.all([promise1, promise2, promise3, promise4]).then(function (responses) {
|
||||||
var users = responses[0];
|
const users = responses[0];
|
||||||
var notificationOptions = responses[1];
|
const notificationOptions = responses[1];
|
||||||
var types = responses[2];
|
const types = responses[2];
|
||||||
var services = responses[3];
|
const services = responses[3];
|
||||||
var notificationConfig = notificationOptions.Options.filter(function (n) {
|
let notificationConfig = notificationOptions.Options.filter(function (n) {
|
||||||
return n.Type == type;
|
return n.Type == type;
|
||||||
})[0];
|
})[0];
|
||||||
var typeInfo = types.filter(function (n) {
|
const typeInfo = types.filter(function (n) {
|
||||||
return n.Type == type;
|
return n.Type == type;
|
||||||
})[0] || {};
|
})[0] || {};
|
||||||
|
|
||||||
if (typeInfo.IsBasedOnUserEvent) {
|
if (typeInfo.IsBasedOnUserEvent) {
|
||||||
$('.monitorUsers', page).show();
|
$('.monitorUsers', page).show();
|
||||||
} else {
|
} else {
|
||||||
$('.monitorUsers', page).hide();
|
$('.monitorUsers', page).hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
$('.notificationType', page).html(typeInfo.Name || 'Unknown Notification');
|
$('.notificationType', page).html(typeInfo.Name || 'Unknown Notification');
|
||||||
|
|
||||||
if (!notificationConfig) {
|
if (!notificationConfig) {
|
||||||
notificationConfig = {
|
notificationConfig = {
|
||||||
DisabledMonitorUsers: [],
|
DisabledMonitorUsers: [],
|
||||||
SendToUsers: [],
|
SendToUsers: [],
|
||||||
DisabledServices: [],
|
DisabledServices: [],
|
||||||
SendToUserMode: 'Admins'
|
SendToUserMode: 'Admins'
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
fillItems($('.monitorUsersList', page), users, 'chkMonitor', 'chkMonitor', notificationConfig.DisabledMonitorUsers);
|
fillItems($('.monitorUsersList', page), users, 'chkMonitor', 'chkMonitor', notificationConfig.DisabledMonitorUsers);
|
||||||
fillItems($('.sendToUsersList', page), users, 'chkSendTo', 'chkSendTo', notificationConfig.SendToUsers, true);
|
fillItems($('.sendToUsersList', page), users, 'chkSendTo', 'chkSendTo', notificationConfig.SendToUsers, true);
|
||||||
fillItems($('.servicesList', page), services, 'chkService', 'chkService', notificationConfig.DisabledServices);
|
fillItems($('.servicesList', page), services, 'chkService', 'chkService', notificationConfig.DisabledServices);
|
||||||
$('#chkEnabled', page).prop('checked', notificationConfig.Enabled || false);
|
$('#chkEnabled', page).prop('checked', notificationConfig.Enabled || false);
|
||||||
$('#selectUsers', page).val(notificationConfig.SendToUserMode).trigger('change');
|
$('#selectUsers', page).val(notificationConfig.SendToUserMode).trigger('change');
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function save(page) {
|
|
||||||
var type = getParameterByName('type');
|
|
||||||
var promise1 = ApiClient.getNamedConfiguration(notificationsConfigurationKey);
|
|
||||||
// TODO: Check if this promise is really needed, as it's unused.
|
|
||||||
var promise2 = ApiClient.getJSON(ApiClient.getUrl('Notifications/Types'));
|
|
||||||
Promise.all([promise1, promise2]).then(function (responses) {
|
|
||||||
var notificationOptions = responses[0];
|
|
||||||
var notificationConfig = notificationOptions.Options.filter(function (n) {
|
|
||||||
return n.Type == type;
|
|
||||||
})[0];
|
|
||||||
|
|
||||||
if (!notificationConfig) {
|
|
||||||
notificationConfig = {
|
|
||||||
Type: type
|
|
||||||
};
|
|
||||||
notificationOptions.Options.push(notificationConfig);
|
|
||||||
}
|
|
||||||
|
|
||||||
notificationConfig.Enabled = $('#chkEnabled', page).is(':checked');
|
|
||||||
notificationConfig.SendToUserMode = $('#selectUsers', page).val();
|
|
||||||
notificationConfig.DisabledMonitorUsers = $('.chkMonitor', page).get().filter(function (c) {
|
|
||||||
return !c.checked;
|
|
||||||
}).map(function (c) {
|
|
||||||
return c.getAttribute('data-itemid');
|
|
||||||
});
|
|
||||||
notificationConfig.SendToUsers = $('.chkSendTo', page).get().filter(function (c) {
|
|
||||||
return c.checked;
|
|
||||||
}).map(function (c) {
|
|
||||||
return c.getAttribute('data-itemid');
|
|
||||||
});
|
|
||||||
notificationConfig.DisabledServices = $('.chkService', page).get().filter(function (c) {
|
|
||||||
return !c.checked;
|
|
||||||
}).map(function (c) {
|
|
||||||
return c.getAttribute('data-itemid');
|
|
||||||
});
|
|
||||||
ApiClient.updateNamedConfiguration(notificationsConfigurationKey, notificationOptions).then(function (r) {
|
|
||||||
Dashboard.processServerConfigurationUpdateResult();
|
|
||||||
Dashboard.navigate('notificationsettings.html');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function onSubmit() {
|
|
||||||
save($(this).parents('.page'));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
var notificationsConfigurationKey = 'notifications';
|
|
||||||
$(document).on('pageinit', '#notificationSettingPage', function () {
|
|
||||||
var page = this;
|
|
||||||
$('#selectUsers', page).on('change', function () {
|
|
||||||
if (this.value == 'Custom') {
|
|
||||||
$('.selectCustomUsers', page).show();
|
|
||||||
} else {
|
|
||||||
$('.selectCustomUsers', page).hide();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
$('.notificationSettingForm').off('submit', onSubmit).on('submit', onSubmit);
|
|
||||||
}).on('pageshow', '#notificationSettingPage', function () {
|
|
||||||
reload(this);
|
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function save(page) {
|
||||||
|
const type = getParameterByName('type');
|
||||||
|
const promise1 = ApiClient.getNamedConfiguration(notificationsConfigurationKey);
|
||||||
|
// TODO: Check if this promise is really needed, as it's unused.
|
||||||
|
const promise2 = ApiClient.getJSON(ApiClient.getUrl('Notifications/Types'));
|
||||||
|
Promise.all([promise1, promise2]).then(function (responses) {
|
||||||
|
const notificationOptions = responses[0];
|
||||||
|
let notificationConfig = notificationOptions.Options.filter(function (n) {
|
||||||
|
return n.Type == type;
|
||||||
|
})[0];
|
||||||
|
|
||||||
|
if (!notificationConfig) {
|
||||||
|
notificationConfig = {
|
||||||
|
Type: type
|
||||||
|
};
|
||||||
|
notificationOptions.Options.push(notificationConfig);
|
||||||
|
}
|
||||||
|
|
||||||
|
notificationConfig.Enabled = $('#chkEnabled', page).is(':checked');
|
||||||
|
notificationConfig.SendToUserMode = $('#selectUsers', page).val();
|
||||||
|
notificationConfig.DisabledMonitorUsers = $('.chkMonitor', page).get().filter(function (c) {
|
||||||
|
return !c.checked;
|
||||||
|
}).map(function (c) {
|
||||||
|
return c.getAttribute('data-itemid');
|
||||||
|
});
|
||||||
|
notificationConfig.SendToUsers = $('.chkSendTo', page).get().filter(function (c) {
|
||||||
|
return c.checked;
|
||||||
|
}).map(function (c) {
|
||||||
|
return c.getAttribute('data-itemid');
|
||||||
|
});
|
||||||
|
notificationConfig.DisabledServices = $('.chkService', page).get().filter(function (c) {
|
||||||
|
return !c.checked;
|
||||||
|
}).map(function (c) {
|
||||||
|
return c.getAttribute('data-itemid');
|
||||||
|
});
|
||||||
|
ApiClient.updateNamedConfiguration(notificationsConfigurationKey, notificationOptions).then(function (r) {
|
||||||
|
Dashboard.processServerConfigurationUpdateResult();
|
||||||
|
Dashboard.navigate('notificationsettings.html');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function onSubmit() {
|
||||||
|
save($(this).parents('.page'));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const notificationsConfigurationKey = 'notifications';
|
||||||
|
$(document).on('pageinit', '#notificationSettingPage', function () {
|
||||||
|
const page = this;
|
||||||
|
$('#selectUsers', page).on('change', function () {
|
||||||
|
if (this.value == 'Custom') {
|
||||||
|
$('.selectCustomUsers', page).show();
|
||||||
|
} else {
|
||||||
|
$('.selectCustomUsers', page).hide();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$('.notificationSettingForm').off('submit', onSubmit).on('submit', onSubmit);
|
||||||
|
}).on('pageshow', '#notificationSettingPage', function () {
|
||||||
|
reload(this);
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,60 +1,62 @@
|
||||||
define(['loading', 'libraryMenu', 'globalize', 'listViewStyle', 'emby-button'], function(loading, libraryMenu, globalize) {
|
import loading from 'loading';
|
||||||
'use strict';
|
import libraryMenu from 'libraryMenu';
|
||||||
|
import globalize from 'globalize';
|
||||||
|
import 'listViewStyle';
|
||||||
|
import 'emby-button';
|
||||||
|
|
||||||
function reload(page) {
|
function reload(page) {
|
||||||
loading.show();
|
loading.show();
|
||||||
ApiClient.getJSON(ApiClient.getUrl('Notifications/Types')).then(function(list) {
|
ApiClient.getJSON(ApiClient.getUrl('Notifications/Types')).then(function (list) {
|
||||||
var html = '';
|
let html = '';
|
||||||
var lastCategory = '';
|
let lastCategory = '';
|
||||||
var showHelp = true;
|
let showHelp = true;
|
||||||
html += list.map(function(notification) {
|
html += list.map(function (notification) {
|
||||||
var itemHtml = '';
|
let itemHtml = '';
|
||||||
if (notification.Category !== lastCategory) {
|
if (notification.Category !== lastCategory) {
|
||||||
lastCategory = notification.Category;
|
lastCategory = notification.Category;
|
||||||
if (lastCategory) {
|
if (lastCategory) {
|
||||||
itemHtml += '</div>';
|
itemHtml += '</div>';
|
||||||
itemHtml += '</div>';
|
|
||||||
}
|
|
||||||
itemHtml += '<div class="verticalSection verticalSection-extrabottompadding">';
|
|
||||||
itemHtml += '<div class="sectionTitleContainer" style="margin-bottom:1em;">';
|
|
||||||
itemHtml += '<h2 class="sectionTitle">';
|
|
||||||
itemHtml += notification.Category;
|
|
||||||
itemHtml += '</h2>';
|
|
||||||
if (showHelp) {
|
|
||||||
showHelp = false;
|
|
||||||
itemHtml += '<a is="emby-linkbutton" class="raised button-alt headerHelpButton" target="_blank" href="https://docs.jellyfin.org/general/server/notifications.html">';
|
|
||||||
itemHtml += globalize.translate('Help');
|
|
||||||
itemHtml += '</a>';
|
|
||||||
}
|
|
||||||
itemHtml += '</div>';
|
itemHtml += '</div>';
|
||||||
itemHtml += '<div class="paperList">';
|
|
||||||
}
|
}
|
||||||
itemHtml += '<a class="listItem listItem-border" is="emby-linkbutton" data-ripple="false" href="notificationsetting.html?type=' + notification.Type + '">';
|
itemHtml += '<div class="verticalSection verticalSection-extrabottompadding">';
|
||||||
if (notification.Enabled) {
|
itemHtml += '<div class="sectionTitleContainer" style="margin-bottom:1em;">';
|
||||||
itemHtml += '<span class="listItemIcon material-icons notifications_active"></span>';
|
itemHtml += '<h2 class="sectionTitle">';
|
||||||
} else {
|
itemHtml += notification.Category;
|
||||||
itemHtml += '<span class="listItemIcon material-icons notifications_off" style="background-color:#999;"></span>';
|
itemHtml += '</h2>';
|
||||||
|
if (showHelp) {
|
||||||
|
showHelp = false;
|
||||||
|
itemHtml += '<a is="emby-linkbutton" class="raised button-alt headerHelpButton" target="_blank" href="https://docs.jellyfin.org/general/server/notifications.html">';
|
||||||
|
itemHtml += globalize.translate('Help');
|
||||||
|
itemHtml += '</a>';
|
||||||
}
|
}
|
||||||
itemHtml += '<div class="listItemBody">';
|
|
||||||
itemHtml += '<div class="listItemBodyText">' + notification.Name + '</div>';
|
|
||||||
itemHtml += '</div>';
|
itemHtml += '</div>';
|
||||||
itemHtml += '<button type="button" is="paper-icon-button-light"><span class="material-icons mode_edit"></span></button>';
|
itemHtml += '<div class="paperList">';
|
||||||
itemHtml += '</a>';
|
|
||||||
return itemHtml;
|
|
||||||
}).join('');
|
|
||||||
|
|
||||||
if (list.length) {
|
|
||||||
html += '</div>';
|
|
||||||
html += '</div>';
|
|
||||||
}
|
}
|
||||||
page.querySelector('.notificationList').innerHTML = html;
|
itemHtml += '<a class="listItem listItem-border" is="emby-linkbutton" data-ripple="false" href="notificationsetting.html?type=' + notification.Type + '">';
|
||||||
loading.hide();
|
if (notification.Enabled) {
|
||||||
});
|
itemHtml += '<span class="listItemIcon material-icons notifications_active"></span>';
|
||||||
}
|
} else {
|
||||||
|
itemHtml += '<span class="listItemIcon material-icons notifications_off" style="background-color:#999;"></span>';
|
||||||
|
}
|
||||||
|
itemHtml += '<div class="listItemBody">';
|
||||||
|
itemHtml += '<div class="listItemBodyText">' + notification.Name + '</div>';
|
||||||
|
itemHtml += '</div>';
|
||||||
|
itemHtml += '<button type="button" is="paper-icon-button-light"><span class="material-icons mode_edit"></span></button>';
|
||||||
|
itemHtml += '</a>';
|
||||||
|
return itemHtml;
|
||||||
|
}).join('');
|
||||||
|
|
||||||
return function(view, params) {
|
if (list.length) {
|
||||||
view.addEventListener('viewshow', function() {
|
html += '</div>';
|
||||||
reload(view);
|
html += '</div>';
|
||||||
});
|
}
|
||||||
};
|
page.querySelector('.notificationList').innerHTML = html;
|
||||||
});
|
loading.hide();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function (view, params) {
|
||||||
|
view.addEventListener('viewshow', function () {
|
||||||
|
reload(view);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
define(['jQuery', 'loading', 'libraryMenu', 'globalize', 'connectionManager', 'emby-button'], function ($, loading, libraryMenu, globalize, connectionManager) {
|
define(['jQuery', 'loading', 'libraryMenu', 'globalize', 'connectionManager', 'emby-button'], function ($, loading, libraryMenu, globalize, connectionManager) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
loading = loading.default || loading;
|
||||||
|
|
||||||
function populateHistory(packageInfo, page) {
|
function populateHistory(packageInfo, page) {
|
||||||
var html = '';
|
var html = '';
|
||||||
var length = Math.min(packageInfo.versions.length, 10);
|
var length = Math.min(packageInfo.versions.length, 10);
|
||||||
|
@ -79,7 +81,7 @@ define(['jQuery', 'loading', 'libraryMenu', 'globalize', 'connectionManager', 'e
|
||||||
page.querySelector('#btnInstall').disabled = true;
|
page.querySelector('#btnInstall').disabled = true;
|
||||||
ApiClient.installPlugin(name, guid, version).then(function () {
|
ApiClient.installPlugin(name, guid, version).then(function () {
|
||||||
loading.hide();
|
loading.hide();
|
||||||
alertText(globalize.translate('PluginInstalledMessage'));
|
alertText(globalize.translate('MessagePluginInstalled'));
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
define(['loading', 'libraryMenu', 'globalize', 'cardStyle', 'emby-button', 'emby-checkbox', 'emby-select'], function (loading, libraryMenu, globalize) {
|
define(['loading', 'libraryMenu', 'globalize', 'cardStyle', 'emby-button', 'emby-checkbox', 'emby-select'], function (loading, libraryMenu, globalize) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
loading = loading.default || loading;
|
||||||
|
|
||||||
function reloadList(page) {
|
function reloadList(page) {
|
||||||
loading.show();
|
loading.show();
|
||||||
var promise1 = ApiClient.getAvailablePlugins();
|
var promise1 = ApiClient.getAvailablePlugins();
|
||||||
|
|
|
@ -1,15 +1,17 @@
|
||||||
define(['loading', 'libraryMenu', 'dom', 'globalize', 'cardStyle', 'emby-button'], function (loading, libraryMenu, dom, globalize) {
|
define(['loading', 'libraryMenu', 'dom', 'globalize', 'cardStyle', 'emby-button'], function (loading, libraryMenu, dom, globalize) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
loading = loading.default || loading;
|
||||||
|
|
||||||
function deletePlugin(page, uniqueid, name) {
|
function deletePlugin(page, uniqueid, name) {
|
||||||
var msg = globalize.translate('UninstallPluginConfirmation', name);
|
var msg = globalize.translate('UninstallPluginConfirmation', name);
|
||||||
|
|
||||||
require(['confirm'], function (confirm) {
|
require(['confirm'], function (confirm) {
|
||||||
confirm.default({
|
confirm.default({
|
||||||
title: globalize.translate('UninstallPluginHeader'),
|
title: globalize.translate('HeaderUninstallPlugin'),
|
||||||
text: msg,
|
text: msg,
|
||||||
primary: 'delete',
|
primary: 'delete',
|
||||||
confirmText: globalize.translate('UninstallPluginHeader')
|
confirmText: globalize.translate('HeaderUninstallPlugin')
|
||||||
}).then(function () {
|
}).then(function () {
|
||||||
loading.show();
|
loading.show();
|
||||||
ApiClient.uninstallPlugin(uniqueid).then(function () {
|
ApiClient.uninstallPlugin(uniqueid).then(function () {
|
||||||
|
@ -21,7 +23,7 @@ define(['loading', 'libraryMenu', 'dom', 'globalize', 'cardStyle', 'emby-button'
|
||||||
|
|
||||||
function showNoConfigurationMessage() {
|
function showNoConfigurationMessage() {
|
||||||
Dashboard.alert({
|
Dashboard.alert({
|
||||||
message: globalize.translate('NoPluginConfigurationMessage')
|
message: globalize.translate('MessageNoPluginConfiguration')
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -95,7 +97,7 @@ define(['loading', 'libraryMenu', 'dom', 'globalize', 'cardStyle', 'emby-button'
|
||||||
html += '<div class="centerMessage">';
|
html += '<div class="centerMessage">';
|
||||||
html += '<h1>' + globalize.translate('MessageNoPluginsInstalled') + '</h1>';
|
html += '<h1>' + globalize.translate('MessageNoPluginsInstalled') + '</h1>';
|
||||||
html += '<p><a is="emby-linkbutton" class="button-link" href="availableplugins.html">';
|
html += '<p><a is="emby-linkbutton" class="button-link" href="availableplugins.html">';
|
||||||
html += globalize.translate('BrowsePluginCatalogMessage');
|
html += globalize.translate('MessageBrowsePluginCatalog');
|
||||||
html += '</a></p>';
|
html += '</a></p>';
|
||||||
html += '</div>';
|
html += '</div>';
|
||||||
}
|
}
|
||||||
|
|
|
@ -89,7 +89,7 @@ import 'emby-checkbox';
|
||||||
});
|
});
|
||||||
}, function (response) {
|
}, function (response) {
|
||||||
import('toast').then(({default: toast}) => {
|
import('toast').then(({default: toast}) => {
|
||||||
toast(globalize.translate('DefaultErrorMessage'));
|
toast(globalize.translate('ErrorDefault'));
|
||||||
});
|
});
|
||||||
|
|
||||||
loading.hide();
|
loading.hide();
|
||||||
|
|
|
@ -145,14 +145,14 @@ import 'emby-button';
|
||||||
function resetPassword() {
|
function resetPassword() {
|
||||||
const msg = globalize.translate('PasswordResetConfirmation');
|
const msg = globalize.translate('PasswordResetConfirmation');
|
||||||
import('confirm').then(({default: confirm}) => {
|
import('confirm').then(({default: confirm}) => {
|
||||||
confirm(msg, globalize.translate('PasswordResetHeader')).then(function () {
|
confirm(msg, globalize.translate('HeaderResetPassword')).then(function () {
|
||||||
const userId = params.userId;
|
const userId = params.userId;
|
||||||
loading.show();
|
loading.show();
|
||||||
ApiClient.resetUserPassword(userId).then(function () {
|
ApiClient.resetUserPassword(userId).then(function () {
|
||||||
loading.hide();
|
loading.hide();
|
||||||
Dashboard.alert({
|
Dashboard.alert({
|
||||||
message: globalize.translate('PasswordResetComplete'),
|
message: globalize.translate('PasswordResetComplete'),
|
||||||
title: globalize.translate('PasswordResetHeader')
|
title: globalize.translate('HeaderResetPassword')
|
||||||
});
|
});
|
||||||
loadUser(view, params);
|
loadUser(view, params);
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,31 +1,30 @@
|
||||||
define(['loading', 'scripts/editorsidebar'], function (loading) {
|
import loading from 'loading';
|
||||||
'use strict';
|
import 'scripts/editorsidebar';
|
||||||
|
|
||||||
function reload(context, itemId) {
|
function reload(context, itemId) {
|
||||||
loading.show();
|
loading.show();
|
||||||
|
|
||||||
if (itemId) {
|
if (itemId) {
|
||||||
require(['metadataEditor'], function ({default: metadataEditor}) {
|
import('metadataEditor').then(({ default: metadataEditor }) => {
|
||||||
metadataEditor.embed(context.querySelector('.editPageInnerContent'), itemId, ApiClient.serverInfo().Id);
|
metadataEditor.embed(context.querySelector('.editPageInnerContent'), itemId, ApiClient.serverInfo().Id);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
context.querySelector('.editPageInnerContent').innerHTML = '';
|
context.querySelector('.editPageInnerContent').innerHTML = '';
|
||||||
loading.hide();
|
loading.hide();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return function (view, params) {
|
export default function (view, params) {
|
||||||
view.addEventListener('viewshow', function () {
|
view.addEventListener('viewshow', function () {
|
||||||
reload(this, MetadataEditor.getCurrentItemId());
|
reload(this, MetadataEditor.getCurrentItemId());
|
||||||
});
|
});
|
||||||
MetadataEditor.setCurrentItemId(null);
|
MetadataEditor.setCurrentItemId(null);
|
||||||
view.querySelector('.libraryTree').addEventListener('itemclicked', function (event) {
|
view.querySelector('.libraryTree').addEventListener('itemclicked', function (event) {
|
||||||
var data = event.detail;
|
var data = event.detail;
|
||||||
|
|
||||||
if (data.id != MetadataEditor.getCurrentItemId()) {
|
if (data.id != MetadataEditor.getCurrentItemId()) {
|
||||||
MetadataEditor.setCurrentItemId(data.id);
|
MetadataEditor.setCurrentItemId(data.id);
|
||||||
reload(view, data.id);
|
reload(view, data.id);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
}
|
||||||
});
|
|
||||||
|
|
|
@ -1,5 +1,15 @@
|
||||||
define(['appRouter', 'cardBuilder', 'dom', 'globalize', 'connectionManager', 'apphost', 'layoutManager', 'focusManager', 'emby-itemscontainer', 'emby-scroller'], function (appRouter, cardBuilder, dom, globalize, connectionManager, appHost, layoutManager, focusManager) {
|
import appRouter from 'appRouter';
|
||||||
'use strict';
|
import cardBuilder from 'cardBuilder';
|
||||||
|
import dom from 'dom';
|
||||||
|
import globalize from 'globalize';
|
||||||
|
import connectionManager from 'connectionManager';
|
||||||
|
import appHost from 'apphost';
|
||||||
|
import layoutManager from 'layoutManager';
|
||||||
|
import focusManager from 'focusManager';
|
||||||
|
import 'emby-itemscontainer';
|
||||||
|
import 'emby-scroller';
|
||||||
|
|
||||||
|
/* eslint-disable indent */
|
||||||
|
|
||||||
function enableScrollX() {
|
function enableScrollX() {
|
||||||
return true;
|
return true;
|
||||||
|
@ -133,8 +143,8 @@ define(['appRouter', 'cardBuilder', 'dom', 'globalize', 'connectionManager', 'ap
|
||||||
|
|
||||||
function getFetchDataFn(section) {
|
function getFetchDataFn(section) {
|
||||||
return function () {
|
return function () {
|
||||||
var apiClient = this.apiClient;
|
const apiClient = this.apiClient;
|
||||||
var options = {
|
const options = {
|
||||||
SortBy: (section.types, 'SeriesName,SortName'),
|
SortBy: (section.types, 'SeriesName,SortName'),
|
||||||
SortOrder: 'Ascending',
|
SortOrder: 'Ascending',
|
||||||
Filters: 'IsFavorite',
|
Filters: 'IsFavorite',
|
||||||
|
@ -145,7 +155,7 @@ define(['appRouter', 'cardBuilder', 'dom', 'globalize', 'connectionManager', 'ap
|
||||||
EnableTotalRecordCount: false
|
EnableTotalRecordCount: false
|
||||||
};
|
};
|
||||||
options.Limit = 20;
|
options.Limit = 20;
|
||||||
var userId = apiClient.getCurrentUserId();
|
const userId = apiClient.getCurrentUserId();
|
||||||
|
|
||||||
if (section.types === 'MusicArtist') {
|
if (section.types === 'MusicArtist') {
|
||||||
return apiClient.getArtists(userId, options);
|
return apiClient.getArtists(userId, options);
|
||||||
|
@ -170,16 +180,16 @@ define(['appRouter', 'cardBuilder', 'dom', 'globalize', 'connectionManager', 'ap
|
||||||
|
|
||||||
function getItemsHtmlFn(section) {
|
function getItemsHtmlFn(section) {
|
||||||
return function (items) {
|
return function (items) {
|
||||||
var cardLayout = appHost.preferVisualCards && section.autoCardLayout && section.showTitle;
|
let cardLayout = appHost.preferVisualCards && section.autoCardLayout && section.showTitle;
|
||||||
cardLayout = false;
|
cardLayout = false;
|
||||||
var serverId = this.apiClient.serverId();
|
const serverId = this.apiClient.serverId();
|
||||||
var leadingButtons = layoutManager.tv ? [{
|
const leadingButtons = layoutManager.tv ? [{
|
||||||
name: globalize.translate('All'),
|
name: globalize.translate('All'),
|
||||||
id: 'more',
|
id: 'more',
|
||||||
icon: 'favorite',
|
icon: 'favorite',
|
||||||
routeUrl: getRouteUrl(section, serverId)
|
routeUrl: getRouteUrl(section, serverId)
|
||||||
}] : null;
|
}] : null;
|
||||||
var lines = 0;
|
let lines = 0;
|
||||||
|
|
||||||
if (section.showTitle) {
|
if (section.showTitle) {
|
||||||
lines++;
|
lines++;
|
||||||
|
@ -215,23 +225,12 @@ define(['appRouter', 'cardBuilder', 'dom', 'globalize', 'connectionManager', 'ap
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function FavoritesTab(view, params) {
|
|
||||||
this.view = view;
|
|
||||||
this.params = params;
|
|
||||||
this.apiClient = connectionManager.currentApiClient();
|
|
||||||
this.sectionsContainer = view.querySelector('.sections');
|
|
||||||
createSections(this, this.sectionsContainer, this.apiClient);
|
|
||||||
}
|
|
||||||
|
|
||||||
function createSections(instance, elem, apiClient) {
|
function createSections(instance, elem, apiClient) {
|
||||||
var i;
|
const sections = getSections();
|
||||||
var length;
|
let html = '';
|
||||||
var sections = getSections();
|
|
||||||
var html = '';
|
|
||||||
|
|
||||||
for (i = 0, length = sections.length; i < length; i++) {
|
for (const section of sections) {
|
||||||
var section = sections[i];
|
let sectionClass = 'verticalSection';
|
||||||
var sectionClass = 'verticalSection';
|
|
||||||
|
|
||||||
if (!section.showTitle) {
|
if (!section.showTitle) {
|
||||||
sectionClass += ' verticalSection-extrabottompadding';
|
sectionClass += ' verticalSection-extrabottompadding';
|
||||||
|
@ -257,23 +256,32 @@ define(['appRouter', 'cardBuilder', 'dom', 'globalize', 'connectionManager', 'ap
|
||||||
}
|
}
|
||||||
|
|
||||||
elem.innerHTML = html;
|
elem.innerHTML = html;
|
||||||
var elems = elem.querySelectorAll('.itemsContainer');
|
const elems = elem.querySelectorAll('.itemsContainer');
|
||||||
|
|
||||||
for (i = 0, length = elems.length; i < length; i++) {
|
for (let i = 0, length = elems.length; i < length; i++) {
|
||||||
var itemsContainer = elems[i];
|
const itemsContainer = elems[i];
|
||||||
itemsContainer.fetchData = getFetchDataFn(sections[i]).bind(instance);
|
itemsContainer.fetchData = getFetchDataFn(sections[i]).bind(instance);
|
||||||
itemsContainer.getItemsHtml = getItemsHtmlFn(sections[i]).bind(instance);
|
itemsContainer.getItemsHtml = getItemsHtmlFn(sections[i]).bind(instance);
|
||||||
itemsContainer.parentContainer = dom.parentWithClass(itemsContainer, 'verticalSection');
|
itemsContainer.parentContainer = dom.parentWithClass(itemsContainer, 'verticalSection');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FavoritesTab.prototype.onResume = function (options) {
|
class FavoritesTab {
|
||||||
var promises = (this.apiClient, []);
|
constructor(view, params) {
|
||||||
var view = this.view;
|
this.view = view;
|
||||||
var elems = this.sectionsContainer.querySelectorAll('.itemsContainer');
|
this.params = params;
|
||||||
|
this.apiClient = connectionManager.currentApiClient();
|
||||||
|
this.sectionsContainer = view.querySelector('.sections');
|
||||||
|
createSections(this, this.sectionsContainer, this.apiClient);
|
||||||
|
}
|
||||||
|
|
||||||
for (var i = 0, length = elems.length; i < length; i++) {
|
onResume(options) {
|
||||||
promises.push(elems[i].resume(options));
|
const promises = (this.apiClient, []);
|
||||||
|
const view = this.view;
|
||||||
|
const elems = this.sectionsContainer.querySelectorAll('.itemsContainer');
|
||||||
|
|
||||||
|
for (const elem of elems) {
|
||||||
|
promises.push(elem.resume(options));
|
||||||
}
|
}
|
||||||
|
|
||||||
Promise.all(promises).then(function () {
|
Promise.all(promises).then(function () {
|
||||||
|
@ -281,30 +289,32 @@ define(['appRouter', 'cardBuilder', 'dom', 'globalize', 'connectionManager', 'ap
|
||||||
focusManager.autoFocus(view);
|
focusManager.autoFocus(view);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
}
|
||||||
|
|
||||||
FavoritesTab.prototype.onPause = function () {
|
onPause() {
|
||||||
var elems = this.sectionsContainer.querySelectorAll('.itemsContainer');
|
const elems = this.sectionsContainer.querySelectorAll('.itemsContainer');
|
||||||
|
|
||||||
for (var i = 0, length = elems.length; i < length; i++) {
|
for (const elem of elems) {
|
||||||
elems[i].pause();
|
elem.pause();
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
FavoritesTab.prototype.destroy = function () {
|
destroy() {
|
||||||
this.view = null;
|
this.view = null;
|
||||||
this.params = null;
|
this.params = null;
|
||||||
this.apiClient = null;
|
this.apiClient = null;
|
||||||
var elems = this.sectionsContainer.querySelectorAll('.itemsContainer');
|
const elems = this.sectionsContainer.querySelectorAll('.itemsContainer');
|
||||||
|
|
||||||
for (var i = 0, length = elems.length; i < length; i++) {
|
for (const elem of elems) {
|
||||||
elems[i].fetchData = null;
|
elem.fetchData = null;
|
||||||
elems[i].getItemsHtml = null;
|
elem.getItemsHtml = null;
|
||||||
elems[i].parentContainer = null;
|
elem.parentContainer = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.sectionsContainer = null;
|
this.sectionsContainer = null;
|
||||||
};
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return FavoritesTab;
|
export default FavoritesTab;
|
||||||
});
|
|
||||||
|
/* eslint-enable indent */
|
||||||
|
|
|
@ -40,7 +40,7 @@ define(['tabbedView', 'globalize', 'require', 'emby-tabs', 'emby-button', 'emby-
|
||||||
var controller = instance.tabControllers[index];
|
var controller = instance.tabControllers[index];
|
||||||
|
|
||||||
if (!controller) {
|
if (!controller) {
|
||||||
controller = new controllerFactory(instance.view.querySelector(".tabContent[data-index='" + index + "']"), instance.params);
|
controller = new controllerFactory.default(instance.view.querySelector(".tabContent[data-index='" + index + "']"), instance.params);
|
||||||
instance.tabControllers[index] = controller;
|
instance.tabControllers[index] = controller;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,27 +1,21 @@
|
||||||
define(['userSettings', 'loading', 'connectionManager', 'apphost', 'layoutManager', 'focusManager', 'homeSections', 'emby-itemscontainer'], function (userSettings, loading, connectionManager, appHost, layoutManager, focusManager, homeSections) {
|
import * as userSettings from 'userSettings';
|
||||||
'use strict';
|
import loading from 'loading';
|
||||||
|
import connectionManager from 'connectionManager';
|
||||||
|
import focusManager from 'focusManager';
|
||||||
|
import homeSections from 'homeSections';
|
||||||
|
import 'emby-itemscontainer';
|
||||||
|
|
||||||
function HomeTab(view, params) {
|
class HomeTab {
|
||||||
|
constructor(view, params) {
|
||||||
this.view = view;
|
this.view = view;
|
||||||
this.params = params;
|
this.params = params;
|
||||||
this.apiClient = connectionManager.currentApiClient();
|
this.apiClient = connectionManager.currentApiClient();
|
||||||
this.sectionsContainer = view.querySelector('.sections');
|
this.sectionsContainer = view.querySelector('.sections');
|
||||||
view.querySelector('.sections').addEventListener('settingschange', onHomeScreenSettingsChanged.bind(this));
|
view.querySelector('.sections').addEventListener('settingschange', onHomeScreenSettingsChanged.bind(this));
|
||||||
}
|
}
|
||||||
|
onResume(options) {
|
||||||
function onHomeScreenSettingsChanged() {
|
|
||||||
this.sectionsRendered = false;
|
|
||||||
|
|
||||||
if (!this.paused) {
|
|
||||||
this.onResume({
|
|
||||||
refresh: true
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
HomeTab.prototype.onResume = function (options) {
|
|
||||||
if (this.sectionsRendered) {
|
if (this.sectionsRendered) {
|
||||||
var sectionsContainer = this.sectionsContainer;
|
const sectionsContainer = this.sectionsContainer;
|
||||||
|
|
||||||
if (sectionsContainer) {
|
if (sectionsContainer) {
|
||||||
return homeSections.resume(sectionsContainer, options);
|
return homeSections.resume(sectionsContainer, options);
|
||||||
|
@ -31,8 +25,8 @@ define(['userSettings', 'loading', 'connectionManager', 'apphost', 'layoutManage
|
||||||
}
|
}
|
||||||
|
|
||||||
loading.show();
|
loading.show();
|
||||||
var view = this.view;
|
const view = this.view;
|
||||||
var apiClient = this.apiClient;
|
const apiClient = this.apiClient;
|
||||||
this.destroyHomeSections();
|
this.destroyHomeSections();
|
||||||
this.sectionsRendered = true;
|
this.sectionsRendered = true;
|
||||||
return apiClient.getCurrentUser().then(function (user) {
|
return apiClient.getCurrentUser().then(function (user) {
|
||||||
|
@ -44,31 +38,38 @@ define(['userSettings', 'loading', 'connectionManager', 'apphost', 'layoutManage
|
||||||
loading.hide();
|
loading.hide();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
};
|
}
|
||||||
|
onPause() {
|
||||||
HomeTab.prototype.onPause = function () {
|
const sectionsContainer = this.sectionsContainer;
|
||||||
var sectionsContainer = this.sectionsContainer;
|
|
||||||
|
|
||||||
if (sectionsContainer) {
|
if (sectionsContainer) {
|
||||||
homeSections.pause(sectionsContainer);
|
homeSections.pause(sectionsContainer);
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
destroy() {
|
||||||
HomeTab.prototype.destroy = function () {
|
|
||||||
this.view = null;
|
this.view = null;
|
||||||
this.params = null;
|
this.params = null;
|
||||||
this.apiClient = null;
|
this.apiClient = null;
|
||||||
this.destroyHomeSections();
|
this.destroyHomeSections();
|
||||||
this.sectionsContainer = null;
|
this.sectionsContainer = null;
|
||||||
};
|
}
|
||||||
|
destroyHomeSections() {
|
||||||
HomeTab.prototype.destroyHomeSections = function () {
|
const sectionsContainer = this.sectionsContainer;
|
||||||
var sectionsContainer = this.sectionsContainer;
|
|
||||||
|
|
||||||
if (sectionsContainer) {
|
if (sectionsContainer) {
|
||||||
homeSections.destroySections(sectionsContainer);
|
homeSections.destroySections(sectionsContainer);
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return HomeTab;
|
function onHomeScreenSettingsChanged() {
|
||||||
});
|
this.sectionsRendered = false;
|
||||||
|
|
||||||
|
if (!this.paused) {
|
||||||
|
this.onResume({
|
||||||
|
refresh: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default HomeTab;
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager', 'cardBuilder', 'loading', 'connectionManager', 'alphaNumericShortcuts', 'scroller', 'playbackManager', 'alphaPicker', 'emby-itemscontainer', 'emby-scroller'], function (globalize, listView, layoutManager, userSettings, focusManager, cardBuilder, loading, connectionManager, AlphaNumericShortcuts, scroller, playbackManager, AlphaPicker) {
|
define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager', 'cardBuilder', 'loading', 'connectionManager', 'alphaNumericShortcuts', 'scroller', 'playbackManager', 'alphaPicker', 'emby-itemscontainer', 'emby-scroller'], function (globalize, listView, layoutManager, userSettings, focusManager, cardBuilder, loading, connectionManager, AlphaNumericShortcuts, scroller, playbackManager, AlphaPicker) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
playbackManager = playbackManager.default || playbackManager;
|
||||||
|
loading = loading.default || loading;
|
||||||
|
|
||||||
function getInitialLiveTvQuery(instance, params) {
|
function getInitialLiveTvQuery(instance, params) {
|
||||||
var query = {
|
var query = {
|
||||||
UserId: connectionManager.getApiClient(params.serverId).getCurrentUserId(),
|
UserId: connectionManager.getApiClient(params.serverId).getCurrentUserId(),
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
define(['cardBuilder', 'imageLoader', 'libraryBrowser', 'loading', 'events', 'userSettings', 'emby-itemscontainer'], function (cardBuilder, imageLoader, libraryBrowser, loading, events, userSettings) {
|
define(['cardBuilder', 'imageLoader', 'libraryBrowser', 'loading', 'events', 'userSettings', 'emby-itemscontainer'], function (cardBuilder, imageLoader, libraryBrowser, loading, events, userSettings) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
loading = loading.default || loading;
|
||||||
libraryBrowser = libraryBrowser.default || libraryBrowser;
|
libraryBrowser = libraryBrowser.default || libraryBrowser;
|
||||||
|
|
||||||
return function (view, params, tabContent) {
|
return function (view, params, tabContent) {
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
define(['layoutManager', 'loading', 'cardBuilder', 'apphost', 'imageLoader', 'scripts/livetvcomponents', 'listViewStyle', 'emby-itemscontainer'], function (layoutManager, loading, cardBuilder, appHost, imageLoader) {
|
define(['layoutManager', 'loading', 'cardBuilder', 'apphost', 'imageLoader', 'scripts/livetvcomponents', 'listViewStyle', 'emby-itemscontainer'], function (layoutManager, loading, cardBuilder, appHost, imageLoader) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
loading = loading.default || loading;
|
||||||
|
|
||||||
function renderRecordings(elem, recordings, cardOptions, scrollX) {
|
function renderRecordings(elem, recordings, cardOptions, scrollX) {
|
||||||
if (!elem) {
|
if (!elem) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
define(['layoutManager', 'cardBuilder', 'apphost', 'imageLoader', 'loading', 'scripts/livetvcomponents', 'emby-button', 'emby-itemscontainer'], function (layoutManager, cardBuilder, appHost, imageLoader, loading) {
|
define(['layoutManager', 'cardBuilder', 'apphost', 'imageLoader', 'loading', 'scripts/livetvcomponents', 'emby-button', 'emby-itemscontainer'], function (layoutManager, cardBuilder, appHost, imageLoader, loading) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
loading = loading.default || loading;
|
||||||
|
|
||||||
function enableScrollX() {
|
function enableScrollX() {
|
||||||
return !layoutManager.desktop;
|
return !layoutManager.desktop;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
define(['layoutManager', 'userSettings', 'inputManager', 'loading', 'globalize', 'libraryBrowser', 'mainTabsManager', 'cardBuilder', 'apphost', 'imageLoader', 'scrollStyles', 'emby-itemscontainer', 'emby-tabs', 'emby-button'], function (layoutManager, userSettings, inputManager, loading, globalize, libraryBrowser, mainTabsManager, cardBuilder, appHost, imageLoader) {
|
define(['layoutManager', 'userSettings', 'inputManager', 'loading', 'globalize', 'libraryBrowser', 'mainTabsManager', 'cardBuilder', 'apphost', 'imageLoader', 'scrollStyles', 'emby-itemscontainer', 'emby-tabs', 'emby-button'], function (layoutManager, userSettings, inputManager, loading, globalize, libraryBrowser, mainTabsManager, cardBuilder, appHost, imageLoader) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
loading = loading.default || loading;
|
||||||
|
|
||||||
function enableScrollX() {
|
function enableScrollX() {
|
||||||
return !layoutManager.desktop;
|
return !layoutManager.desktop;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,30 +1,30 @@
|
||||||
define(['events', 'loading', 'globalize'], function (events, loading, globalize) {
|
import events from 'events';
|
||||||
'use strict';
|
import loading from 'loading';
|
||||||
|
import globalize from 'globalize';
|
||||||
|
|
||||||
function onListingsSubmitted() {
|
function onListingsSubmitted() {
|
||||||
Dashboard.navigate('livetvstatus.html');
|
Dashboard.navigate('livetvstatus.html');
|
||||||
}
|
}
|
||||||
|
|
||||||
function init(page, type, providerId) {
|
function init(page, type, providerId) {
|
||||||
var url = 'components/tvproviders/' + type + '.js';
|
const url = 'components/tvproviders/' + type + '.js';
|
||||||
|
|
||||||
require([url], function (factory) {
|
import(url).then(({default: factory}) => {
|
||||||
var instance = new factory(page, providerId, {});
|
const instance = new factory(page, providerId, {});
|
||||||
events.on(instance, 'submitted', onListingsSubmitted);
|
events.on(instance, 'submitted', onListingsSubmitted);
|
||||||
instance.init();
|
instance.init();
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function loadTemplate(page, type, providerId) {
|
|
||||||
require(['text!./components/tvproviders/' + type + '.template.html'], function (html) {
|
|
||||||
page.querySelector('.providerTemplate').innerHTML = globalize.translateHtml(html);
|
|
||||||
init(page, type, providerId);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
pageIdOn('pageshow', 'liveTvGuideProviderPage', function () {
|
|
||||||
loading.show();
|
|
||||||
var providerId = getParameterByName('id');
|
|
||||||
loadTemplate(this, getParameterByName('type'), providerId);
|
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function loadTemplate(page, type, providerId) {
|
||||||
|
import('text!./../components/tvproviders/' + type + '.template.html').then(({default: html}) => {
|
||||||
|
page.querySelector('.providerTemplate').innerHTML = globalize.translateHtml(html);
|
||||||
|
init(page, type, providerId);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
pageIdOn('pageshow', 'liveTvGuideProviderPage', function () {
|
||||||
|
loading.show();
|
||||||
|
const providerId = getParameterByName('id');
|
||||||
|
loadTemplate(this, getParameterByName('type'), providerId);
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,65 +1,68 @@
|
||||||
define(['jQuery', 'loading', 'globalize', 'emby-button'], function ($, loading, globalize) {
|
import $ from 'jQuery';
|
||||||
'use strict';
|
import loading from 'loading';
|
||||||
|
import globalize from 'globalize';
|
||||||
|
import 'emby-button';
|
||||||
|
|
||||||
function loadPage(page, config) {
|
function loadPage(page, config) {
|
||||||
$('.liveTvSettingsForm', page).show();
|
$('.liveTvSettingsForm', page).show();
|
||||||
$('.noLiveTvServices', page).hide();
|
$('.noLiveTvServices', page).hide();
|
||||||
$('#selectGuideDays', page).val(config.GuideDays || '');
|
$('#selectGuideDays', page).val(config.GuideDays || '');
|
||||||
$('#txtPrePaddingMinutes', page).val(config.PrePaddingSeconds / 60);
|
$('#txtPrePaddingMinutes', page).val(config.PrePaddingSeconds / 60);
|
||||||
$('#txtPostPaddingMinutes', page).val(config.PostPaddingSeconds / 60);
|
$('#txtPostPaddingMinutes', page).val(config.PostPaddingSeconds / 60);
|
||||||
page.querySelector('#txtRecordingPath').value = config.RecordingPath || '';
|
page.querySelector('#txtRecordingPath').value = config.RecordingPath || '';
|
||||||
page.querySelector('#txtMovieRecordingPath').value = config.MovieRecordingPath || '';
|
page.querySelector('#txtMovieRecordingPath').value = config.MovieRecordingPath || '';
|
||||||
page.querySelector('#txtSeriesRecordingPath').value = config.SeriesRecordingPath || '';
|
page.querySelector('#txtSeriesRecordingPath').value = config.SeriesRecordingPath || '';
|
||||||
page.querySelector('#txtPostProcessor').value = config.RecordingPostProcessor || '';
|
page.querySelector('#txtPostProcessor').value = config.RecordingPostProcessor || '';
|
||||||
page.querySelector('#txtPostProcessorArguments').value = config.RecordingPostProcessorArguments || '';
|
page.querySelector('#txtPostProcessorArguments').value = config.RecordingPostProcessorArguments || '';
|
||||||
loading.hide();
|
loading.hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
function onSubmit() {
|
function onSubmit() {
|
||||||
loading.show();
|
loading.show();
|
||||||
var form = this;
|
const form = this;
|
||||||
ApiClient.getNamedConfiguration('livetv').then(function (config) {
|
ApiClient.getNamedConfiguration('livetv').then(function (config) {
|
||||||
config.GuideDays = $('#selectGuideDays', form).val() || null;
|
config.GuideDays = $('#selectGuideDays', form).val() || null;
|
||||||
var recordingPath = form.querySelector('#txtRecordingPath').value || null;
|
const recordingPath = form.querySelector('#txtRecordingPath').value || null;
|
||||||
var movieRecordingPath = form.querySelector('#txtMovieRecordingPath').value || null;
|
const movieRecordingPath = form.querySelector('#txtMovieRecordingPath').value || null;
|
||||||
var seriesRecordingPath = form.querySelector('#txtSeriesRecordingPath').value || null;
|
const seriesRecordingPath = form.querySelector('#txtSeriesRecordingPath').value || null;
|
||||||
var recordingPathChanged = recordingPath != config.RecordingPath || movieRecordingPath != config.MovieRecordingPath || seriesRecordingPath != config.SeriesRecordingPath;
|
const recordingPathChanged = recordingPath != config.RecordingPath || movieRecordingPath != config.MovieRecordingPath || seriesRecordingPath != config.SeriesRecordingPath;
|
||||||
config.RecordingPath = recordingPath;
|
config.RecordingPath = recordingPath;
|
||||||
config.MovieRecordingPath = movieRecordingPath;
|
config.MovieRecordingPath = movieRecordingPath;
|
||||||
config.SeriesRecordingPath = seriesRecordingPath;
|
config.SeriesRecordingPath = seriesRecordingPath;
|
||||||
config.RecordingEncodingFormat = 'mkv';
|
config.RecordingEncodingFormat = 'mkv';
|
||||||
config.PrePaddingSeconds = 60 * $('#txtPrePaddingMinutes', form).val();
|
config.PrePaddingSeconds = 60 * $('#txtPrePaddingMinutes', form).val();
|
||||||
config.PostPaddingSeconds = 60 * $('#txtPostPaddingMinutes', form).val();
|
config.PostPaddingSeconds = 60 * $('#txtPostPaddingMinutes', form).val();
|
||||||
config.RecordingPostProcessor = $('#txtPostProcessor', form).val();
|
config.RecordingPostProcessor = $('#txtPostProcessor', form).val();
|
||||||
config.RecordingPostProcessorArguments = $('#txtPostProcessorArguments', form).val();
|
config.RecordingPostProcessorArguments = $('#txtPostProcessorArguments', form).val();
|
||||||
ApiClient.updateNamedConfiguration('livetv', config).then(function () {
|
ApiClient.updateNamedConfiguration('livetv', config).then(function () {
|
||||||
Dashboard.processServerConfigurationUpdateResult();
|
Dashboard.processServerConfigurationUpdateResult();
|
||||||
showSaveMessage(recordingPathChanged);
|
showSaveMessage(recordingPathChanged);
|
||||||
});
|
|
||||||
});
|
});
|
||||||
return false;
|
});
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function showSaveMessage(recordingPathChanged) {
|
||||||
|
let msg = '';
|
||||||
|
|
||||||
|
if (recordingPathChanged) {
|
||||||
|
msg += globalize.translate('MessageChangeRecordingPath');
|
||||||
}
|
}
|
||||||
|
|
||||||
function showSaveMessage(recordingPathChanged) {
|
if (msg) {
|
||||||
var msg = '';
|
import('alert').then(({default: alert}) => {
|
||||||
|
alert(msg);
|
||||||
if (recordingPathChanged) {
|
});
|
||||||
msg += globalize.translate('RecordingPathChangeMessage');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (msg) {
|
|
||||||
require(['alert'], function (alert) {
|
|
||||||
alert(msg);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function () {
|
||||||
$(document).on('pageinit', '#liveTvSettingsPage', function () {
|
$(document).on('pageinit', '#liveTvSettingsPage', function () {
|
||||||
var page = this;
|
const page = this;
|
||||||
$('.liveTvSettingsForm').off('submit', onSubmit).on('submit', onSubmit);
|
$('.liveTvSettingsForm').off('submit', onSubmit).on('submit', onSubmit);
|
||||||
$('#btnSelectRecordingPath', page).on('click.selectDirectory', function () {
|
$('#btnSelectRecordingPath', page).on('click.selectDirectory', function () {
|
||||||
require(['directorybrowser'], function (directoryBrowser) {
|
import('directorybrowser').then(({default: directoryBrowser}) => {
|
||||||
var picker = new directoryBrowser.default();
|
const picker = new directoryBrowser();
|
||||||
picker.show({
|
picker.show({
|
||||||
callback: function (path) {
|
callback: function (path) {
|
||||||
if (path) {
|
if (path) {
|
||||||
|
@ -73,8 +76,8 @@ define(['jQuery', 'loading', 'globalize', 'emby-button'], function ($, loading,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
$('#btnSelectMovieRecordingPath', page).on('click.selectDirectory', function () {
|
$('#btnSelectMovieRecordingPath', page).on('click.selectDirectory', function () {
|
||||||
require(['directorybrowser'], function (directoryBrowser) {
|
import('directorybrowser').then(({default: directoryBrowser}) => {
|
||||||
var picker = new directoryBrowser.default();
|
const picker = new directoryBrowser();
|
||||||
picker.show({
|
picker.show({
|
||||||
callback: function (path) {
|
callback: function (path) {
|
||||||
if (path) {
|
if (path) {
|
||||||
|
@ -88,8 +91,8 @@ define(['jQuery', 'loading', 'globalize', 'emby-button'], function ($, loading,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
$('#btnSelectSeriesRecordingPath', page).on('click.selectDirectory', function () {
|
$('#btnSelectSeriesRecordingPath', page).on('click.selectDirectory', function () {
|
||||||
require(['directorybrowser'], function (directoryBrowser) {
|
import('directorybrowser').then(({default: directoryBrowser}) => {
|
||||||
var picker = new directoryBrowser.default();
|
const picker = new directoryBrowser();
|
||||||
picker.show({
|
picker.show({
|
||||||
callback: function (path) {
|
callback: function (path) {
|
||||||
if (path) {
|
if (path) {
|
||||||
|
@ -103,8 +106,8 @@ define(['jQuery', 'loading', 'globalize', 'emby-button'], function ($, loading,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
$('#btnSelectPostProcessorPath', page).on('click.selectDirectory', function () {
|
$('#btnSelectPostProcessorPath', page).on('click.selectDirectory', function () {
|
||||||
require(['directorybrowser'], function (directoryBrowser) {
|
import('directorybrowser').then(({default: directoryBrowser}) => {
|
||||||
var picker = new directoryBrowser.default();
|
const picker = new directoryBrowser();
|
||||||
picker.show({
|
picker.show({
|
||||||
includeFiles: true,
|
includeFiles: true,
|
||||||
callback: function (path) {
|
callback: function (path) {
|
||||||
|
@ -119,9 +122,9 @@ define(['jQuery', 'loading', 'globalize', 'emby-button'], function ($, loading,
|
||||||
});
|
});
|
||||||
}).on('pageshow', '#liveTvSettingsPage', function () {
|
}).on('pageshow', '#liveTvSettingsPage', function () {
|
||||||
loading.show();
|
loading.show();
|
||||||
var page = this;
|
const page = this;
|
||||||
ApiClient.getNamedConfiguration('livetv').then(function (config) {
|
ApiClient.getNamedConfiguration('livetv').then(function (config) {
|
||||||
loadPage(page, config);
|
loadPage(page, config);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
define(['loading', 'events', 'libraryBrowser', 'imageLoader', 'listView', 'cardBuilder', 'userSettings', 'globalize', 'emby-itemscontainer'], function (loading, events, libraryBrowser, imageLoader, listView, cardBuilder, userSettings, globalize) {
|
define(['loading', 'events', 'libraryBrowser', 'imageLoader', 'listView', 'cardBuilder', 'userSettings', 'globalize', 'emby-itemscontainer'], function (loading, events, libraryBrowser, imageLoader, listView, cardBuilder, userSettings, globalize) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
loading = loading.default || loading;
|
||||||
libraryBrowser = libraryBrowser.default || libraryBrowser;
|
libraryBrowser = libraryBrowser.default || libraryBrowser;
|
||||||
|
|
||||||
return function (view, params, tabContent) {
|
return function (view, params, tabContent) {
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
define(['layoutManager', 'loading', 'libraryBrowser', 'cardBuilder', 'lazyLoader', 'apphost', 'globalize', 'appRouter', 'dom', 'emby-button'], function (layoutManager, loading, libraryBrowser, cardBuilder, lazyLoader, appHost, globalize, appRouter, dom) {
|
define(['layoutManager', 'loading', 'libraryBrowser', 'cardBuilder', 'lazyLoader', 'apphost', 'globalize', 'appRouter', 'dom', 'emby-button'], function (layoutManager, loading, libraryBrowser, cardBuilder, lazyLoader, appHost, globalize, appRouter, dom) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
loading = loading.default || loading;
|
||||||
libraryBrowser = libraryBrowser.default || libraryBrowser;
|
libraryBrowser = libraryBrowser.default || libraryBrowser;
|
||||||
|
|
||||||
return function (view, params, tabContent) {
|
return function (view, params, tabContent) {
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
define(['loading', 'layoutManager', 'userSettings', 'events', 'libraryBrowser', 'alphaPicker', 'listView', 'cardBuilder', 'globalize', 'emby-itemscontainer'], function (loading, layoutManager, userSettings, events, libraryBrowser, AlphaPicker, listView, cardBuilder, globalize) {
|
define(['loading', 'layoutManager', 'userSettings', 'events', 'libraryBrowser', 'alphaPicker', 'listView', 'cardBuilder', 'globalize', 'emby-itemscontainer'], function (loading, layoutManager, userSettings, events, libraryBrowser, AlphaPicker, listView, cardBuilder, globalize) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
loading = loading.default || loading;
|
||||||
libraryBrowser = libraryBrowser.default || libraryBrowser;
|
libraryBrowser = libraryBrowser.default || libraryBrowser;
|
||||||
|
|
||||||
return function (view, params, tabContent, options) {
|
return function (view, params, tabContent, options) {
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
define(['events', 'layoutManager', 'inputManager', 'userSettings', 'libraryMenu', 'mainTabsManager', 'cardBuilder', 'dom', 'imageLoader', 'playbackManager', 'globalize', 'emby-scroller', 'emby-itemscontainer', 'emby-tabs', 'emby-button'], function (events, layoutManager, inputManager, userSettings, libraryMenu, mainTabsManager, cardBuilder, dom, imageLoader, playbackManager, globalize) {
|
define(['events', 'layoutManager', 'inputManager', 'userSettings', 'libraryMenu', 'mainTabsManager', 'cardBuilder', 'dom', 'imageLoader', 'playbackManager', 'globalize', 'emby-scroller', 'emby-itemscontainer', 'emby-tabs', 'emby-button'], function (events, layoutManager, inputManager, userSettings, libraryMenu, mainTabsManager, cardBuilder, dom, imageLoader, playbackManager, globalize) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
playbackManager = playbackManager.default || playbackManager;
|
||||||
|
|
||||||
function enableScrollX() {
|
function enableScrollX() {
|
||||||
return !layoutManager.desktop;
|
return !layoutManager.desktop;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', 'alphaPicker', 'listView', 'cardBuilder', 'userSettings', 'globalize', 'emby-itemscontainer'], function (layoutManager, loading, events, libraryBrowser, imageLoader, AlphaPicker, listView, cardBuilder, userSettings, globalize) {
|
define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', 'alphaPicker', 'listView', 'cardBuilder', 'userSettings', 'globalize', 'emby-itemscontainer'], function (layoutManager, loading, events, libraryBrowser, imageLoader, AlphaPicker, listView, cardBuilder, userSettings, globalize) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
loading = loading.default || loading;
|
||||||
libraryBrowser = libraryBrowser.default || libraryBrowser;
|
libraryBrowser = libraryBrowser.default || libraryBrowser;
|
||||||
|
|
||||||
return function (view, params, tabContent) {
|
return function (view, params, tabContent) {
|
||||||
|
|
|
@ -1,13 +1,11 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html class="preload">
|
<html class="preload">
|
||||||
<head>
|
<head>
|
||||||
|
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no">
|
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no">
|
||||||
<link rel="manifest" href="manifest.json">
|
<link rel="manifest" href="manifest.json">
|
||||||
<meta name="format-detection" content="telephone=no">
|
<meta name="format-detection" content="telephone=no">
|
||||||
<meta name="msapplication-tap-highlight" content="no">
|
<meta name="msapplication-tap-highlight" content="no">
|
||||||
|
|
||||||
<meta http-equiv="X-UA-Compatibility" content="IE=Edge">
|
<meta http-equiv="X-UA-Compatibility" content="IE=Edge">
|
||||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
<meta name="mobile-web-app-capable" content="yes">
|
<meta name="mobile-web-app-capable" content="yes">
|
||||||
|
@ -15,10 +13,9 @@
|
||||||
<meta name="robots" content="noindex, nofollow, noarchive">
|
<meta name="robots" content="noindex, nofollow, noarchive">
|
||||||
<meta property="og:title" content="Jellyfin">
|
<meta property="og:title" content="Jellyfin">
|
||||||
<meta property="og:site_name" content="Jellyfin">
|
<meta property="og:site_name" content="Jellyfin">
|
||||||
<meta property="og:url" content="http://jellyfin.media">
|
<meta property="og:url" content="http://jellyfin.org">
|
||||||
<meta property="og:description" content="The Free Software Media System.">
|
<meta property="og:description" content="The Free Software Media System">
|
||||||
<meta property="og:type" content="article">
|
<meta property="og:type" content="article">
|
||||||
<meta property="fb:app_id" content="1618309211750238">
|
|
||||||
<link rel="apple-touch-icon" sizes="180x180" href="touchicon.png">
|
<link rel="apple-touch-icon" sizes="180x180" href="touchicon.png">
|
||||||
|
|
||||||
<!-- iPhone 5 -->
|
<!-- iPhone 5 -->
|
||||||
|
@ -64,7 +61,6 @@
|
||||||
<link rel="shortcut icon" href="favicon.ico">
|
<link rel="shortcut icon" href="favicon.ico">
|
||||||
<meta name="msapplication-TileImage" content="touchicon144.png">
|
<meta name="msapplication-TileImage" content="touchicon144.png">
|
||||||
<meta name="msapplication-TileColor" content="#333333">
|
<meta name="msapplication-TileColor" content="#333333">
|
||||||
<meta name="theme-color" content="#101010">
|
|
||||||
|
|
||||||
<title>Jellyfin</title>
|
<title>Jellyfin</title>
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
define(["browser", "dom", "css!./navdrawer", "scrollStyles"], function (browser, dom) {
|
define(["browser", "dom", "css!./navdrawer", "scrollStyles"], function (browser, dom) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
|
browser = browser.default || browser;
|
||||||
|
|
||||||
return function (options) {
|
return function (options) {
|
||||||
function getTouches(e) {
|
function getTouches(e) {
|
||||||
return e.changedTouches || e.targetTouches || e.touches;
|
return e.changedTouches || e.targetTouches || e.touches;
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
define(["events", "playbackManager", "pluginManager", "inputManager", "connectionManager", "userSettings"], function (events, playbackManager, pluginManager, inputManager, connectionManager, userSettings) {
|
define(["events", "playbackManager", "pluginManager", "inputManager", "connectionManager", "userSettings"], function (events, playbackManager, pluginManager, inputManager, connectionManager, userSettings) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
|
playbackManager = playbackManager.default || playbackManager;
|
||||||
|
|
||||||
function getMinIdleTime() {
|
function getMinIdleTime() {
|
||||||
// Returns the minimum amount of idle time required before the screen saver can be displayed
|
// Returns the minimum amount of idle time required before the screen saver can be displayed
|
||||||
//time units used Millisecond
|
//time units used Millisecond
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
define(['browser', 'layoutManager', 'dom', 'focusManager', 'ResizeObserver', 'scrollStyles'], function (browser, layoutManager, dom, focusManager, ResizeObserver) {
|
define(['browser', 'layoutManager', 'dom', 'focusManager', 'ResizeObserver', 'scrollStyles'], function (browser, layoutManager, dom, focusManager, ResizeObserver) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
browser = browser.default || browser;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return type of the value.
|
* Return type of the value.
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "Jellyfin",
|
"name": "Jellyfin",
|
||||||
"description": "Jellyfin: the Free Software Media System.",
|
"description": "The Free Software Media System",
|
||||||
"lang": "en-US",
|
"lang": "en-US",
|
||||||
"short_name": "Jellyfin",
|
"short_name": "Jellyfin",
|
||||||
"start_url": "index.html#!/home.html",
|
"start_url": "index.html#!/home.html",
|
||||||
|
|
|
@ -2,6 +2,7 @@ import connectionManager from 'connectionManager';
|
||||||
import loading from 'loading';
|
import loading from 'loading';
|
||||||
import keyboardnavigation from 'keyboardnavigation';
|
import keyboardnavigation from 'keyboardnavigation';
|
||||||
import dialogHelper from 'dialogHelper';
|
import dialogHelper from 'dialogHelper';
|
||||||
|
import dom from 'dom';
|
||||||
import events from 'events';
|
import events from 'events';
|
||||||
import 'css!./style';
|
import 'css!./style';
|
||||||
import 'material-icons';
|
import 'material-icons';
|
||||||
|
@ -93,23 +94,22 @@ export class BookPlayer {
|
||||||
|
|
||||||
onWindowKeyUp(e) {
|
onWindowKeyUp(e) {
|
||||||
let key = keyboardnavigation.getKeyName(e);
|
let key = keyboardnavigation.getKeyName(e);
|
||||||
let rendition = this._rendition;
|
|
||||||
|
// TODO: depending on the event this can be the document or the rendition itself
|
||||||
|
let rendition = this._rendition || this;
|
||||||
let book = rendition.book;
|
let book = rendition.book;
|
||||||
|
|
||||||
|
if (this._loaded === false) return;
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case 'l':
|
case 'l':
|
||||||
case 'ArrowRight':
|
case 'ArrowRight':
|
||||||
case 'Right':
|
case 'Right':
|
||||||
if (this._loaded) {
|
book.package.metadata.direction === 'rtl' ? rendition.prev() : rendition.next();
|
||||||
book.package.metadata.direction === 'rtl' ? rendition.prev() : rendition.next();
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case 'j':
|
case 'j':
|
||||||
case 'ArrowLeft':
|
case 'ArrowLeft':
|
||||||
case 'Left':
|
case 'Left':
|
||||||
if (this._loaded) {
|
book.package.metadata.direction === 'rtl' ? rendition.next() : rendition.prev();
|
||||||
book.package.metadata.direction === 'rtl' ? rendition.next() : rendition.prev();
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case 'Escape':
|
case 'Escape':
|
||||||
if (this._tocElement) {
|
if (this._tocElement) {
|
||||||
|
@ -123,6 +123,25 @@ export class BookPlayer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onTouchStart(e) {
|
||||||
|
// TODO: depending on the event this can be the document or the rendition itself
|
||||||
|
let rendition = this._rendition || this;
|
||||||
|
let book = rendition.book;
|
||||||
|
|
||||||
|
// check that the event is from the book or the document
|
||||||
|
if (!book || this._loaded === false) return;
|
||||||
|
|
||||||
|
// epubjs stores pages off the screen or something for preloading
|
||||||
|
// get the modulus of the touch event to account for the increased width
|
||||||
|
if (!e.touches || e.touches.length === 0) return;
|
||||||
|
let touch = e.touches[0].clientX % dom.getWindowSize().innerWidth;
|
||||||
|
if (touch < dom.getWindowSize().innerWidth / 2) {
|
||||||
|
book.package.metadata.direction === 'rtl' ? rendition.next() : rendition.prev();
|
||||||
|
} else {
|
||||||
|
book.package.metadata.direction === 'rtl' ? rendition.prev() : rendition.next();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
onDialogClosed() {
|
onDialogClosed() {
|
||||||
this.stop();
|
this.stop();
|
||||||
}
|
}
|
||||||
|
@ -139,8 +158,11 @@ export class BookPlayer {
|
||||||
this.bindMediaElementEvents();
|
this.bindMediaElementEvents();
|
||||||
|
|
||||||
document.addEventListener('keyup', this.onWindowKeyUp);
|
document.addEventListener('keyup', this.onWindowKeyUp);
|
||||||
|
document.addEventListener('touchstart', this.onTouchStart);
|
||||||
|
|
||||||
// FIXME: I don't really get why document keyup event is not triggered when epub is in focus
|
// FIXME: I don't really get why document keyup event is not triggered when epub is in focus
|
||||||
this._rendition.on('keyup', this.onWindowKeyUp);
|
this._rendition.on('keyup', this.onWindowKeyUp);
|
||||||
|
this._rendition.on('touchstart', this.onTouchStart);
|
||||||
}
|
}
|
||||||
|
|
||||||
unbindMediaElementEvents() {
|
unbindMediaElementEvents() {
|
||||||
|
@ -155,9 +177,13 @@ export class BookPlayer {
|
||||||
if (this._mediaElement) {
|
if (this._mediaElement) {
|
||||||
this.unbindMediaElementEvents();
|
this.unbindMediaElementEvents();
|
||||||
}
|
}
|
||||||
|
|
||||||
document.removeEventListener('keyup', this.onWindowKeyUp);
|
document.removeEventListener('keyup', this.onWindowKeyUp);
|
||||||
|
document.removeEventListener('touchstart', this.onTouchStart);
|
||||||
|
|
||||||
if (this._rendition) {
|
if (this._rendition) {
|
||||||
this._rendition.off('keyup', this.onWindowKeyUp);
|
this._rendition.off('keyup', this.onWindowKeyUp);
|
||||||
|
this._rendition.off('touchstart', this.onTouchStart);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -169,13 +195,11 @@ export class BookPlayer {
|
||||||
|
|
||||||
createMediaElement() {
|
createMediaElement() {
|
||||||
let elem = this._mediaElement;
|
let elem = this._mediaElement;
|
||||||
|
|
||||||
if (elem) {
|
if (elem) {
|
||||||
return elem;
|
return elem;
|
||||||
}
|
}
|
||||||
|
|
||||||
elem = document.getElementById('bookPlayer');
|
elem = document.getElementById('bookPlayer');
|
||||||
|
|
||||||
if (!elem) {
|
if (!elem) {
|
||||||
elem = dialogHelper.createDialog({
|
elem = dialogHelper.createDialog({
|
||||||
exitAnimationDuration: 400,
|
exitAnimationDuration: 400,
|
||||||
|
@ -185,6 +209,7 @@ export class BookPlayer {
|
||||||
exitAnimation: 'fadeout',
|
exitAnimation: 'fadeout',
|
||||||
removeOnClose: true
|
removeOnClose: true
|
||||||
});
|
});
|
||||||
|
|
||||||
elem.id = 'bookPlayer';
|
elem.id = 'bookPlayer';
|
||||||
|
|
||||||
let html = '';
|
let html = '';
|
||||||
|
@ -230,6 +255,7 @@ export class BookPlayer {
|
||||||
let cancellationToken = {
|
let cancellationToken = {
|
||||||
shouldCancel: false
|
shouldCancel: false
|
||||||
};
|
};
|
||||||
|
|
||||||
this._cancellationToken = cancellationToken;
|
this._cancellationToken = cancellationToken;
|
||||||
|
|
||||||
return rendition.display().then(() => {
|
return rendition.display().then(() => {
|
||||||
|
@ -253,7 +279,6 @@ export class BookPlayer {
|
||||||
epubElem.style.display = 'block';
|
epubElem.style.display = 'block';
|
||||||
rendition.on('relocated', (locations) => {
|
rendition.on('relocated', (locations) => {
|
||||||
this._progress = book.locations.percentageFromCfi(locations.start.cfi);
|
this._progress = book.locations.percentageFromCfi(locations.start.cfi);
|
||||||
|
|
||||||
events.trigger(this, 'timeupdate');
|
events.trigger(this, 'timeupdate');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -262,7 +287,7 @@ export class BookPlayer {
|
||||||
return resolve();
|
return resolve();
|
||||||
});
|
});
|
||||||
}, () => {
|
}, () => {
|
||||||
console.error('Failed to display epub');
|
console.error('failed to display epub');
|
||||||
return reject();
|
return reject();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', 'globalize', 'events', 'require', 'castSenderApiLoader'], function (appSettings, userSettings, playbackManager, connectionManager, globalize, events, require, castSenderApiLoader) {
|
define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', 'globalize', 'events', 'require', 'castSenderApiLoader'], function (appSettings, userSettings, playbackManager, connectionManager, globalize, events, require, castSenderApiLoader) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
playbackManager = playbackManager.default || playbackManager;
|
||||||
|
|
||||||
// Based on https://github.com/googlecast/CastVideos-chrome/blob/master/CastVideos.js
|
// Based on https://github.com/googlecast/CastVideos-chrome/blob/master/CastVideos.js
|
||||||
var currentResolve;
|
var currentResolve;
|
||||||
var currentReject;
|
var currentReject;
|
||||||
|
@ -363,7 +365,7 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', '
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Promise(function (resolve, reject) {
|
return new Promise(function (resolve, reject) {
|
||||||
require(['chromecastHelper'], function (chromecastHelper) {
|
require(['./chromecastHelper'], function (chromecastHelper) {
|
||||||
chromecastHelper.getServerAddress(apiClient).then(function (serverAddress) {
|
chromecastHelper.getServerAddress(apiClient).then(function (serverAddress) {
|
||||||
message.serverAddress = serverAddress;
|
message.serverAddress = serverAddress;
|
||||||
player.sendMessageInternal(message).then(resolve, reject);
|
player.sendMessageInternal(message).then(resolve, reject);
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
define(['playbackManager', 'events', 'serverNotifications', 'connectionManager'], function (playbackManager, events, serverNotifications, connectionManager) {
|
define(['playbackManager', 'events', 'serverNotifications', 'connectionManager'], function (playbackManager, events, serverNotifications, connectionManager) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
playbackManager = playbackManager.default || playbackManager;
|
||||||
|
|
||||||
function getActivePlayerId() {
|
function getActivePlayerId() {
|
||||||
var info = playbackManager.getPlayerInfo();
|
var info = playbackManager.getPlayerInfo();
|
||||||
return info ? info.id : null;
|
return info ? info.id : null;
|
||||||
|
|
8
src/scripts/autoThemes.js
Normal file
8
src/scripts/autoThemes.js
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
import * as userSettings from 'userSettings';
|
||||||
|
import skinManager from 'skinManager';
|
||||||
|
import connectionManager from 'connectionManager';
|
||||||
|
import events from 'events';
|
||||||
|
|
||||||
|
events.on(connectionManager, 'localusersignedin', function (e, user) {
|
||||||
|
skinManager.setTheme(userSettings.theme());
|
||||||
|
});
|
|
@ -1,6 +1,8 @@
|
||||||
define(['browser'], function (browser) {
|
define(['browser'], function (browser) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
browser = browser.default || browser;
|
||||||
|
|
||||||
function canPlayH264(videoTestElement) {
|
function canPlayH264(videoTestElement) {
|
||||||
return !!(videoTestElement.canPlayType && videoTestElement.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/, ''));
|
return !!(videoTestElement.canPlayType && videoTestElement.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/, ''));
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,6 +35,7 @@ import appHost from 'apphost';
|
||||||
if (eventListenerCount) {
|
if (eventListenerCount) {
|
||||||
eventListenerCount--;
|
eventListenerCount--;
|
||||||
}
|
}
|
||||||
|
|
||||||
dom.removeEventListener(scope, 'command', fn, {});
|
dom.removeEventListener(scope, 'command', fn, {});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
define(['dom', 'layoutManager', 'inputManager', 'connectionManager', 'events', 'viewManager', 'libraryBrowser', 'appRouter', 'apphost', 'playbackManager', 'syncPlayManager', 'groupSelectionMenu', 'browser', 'globalize', 'scripts/imagehelper', 'paper-icon-button-light', 'material-icons', 'scrollStyles', 'flexStyles'], function (dom, layoutManager, inputManager, connectionManager, events, viewManager, libraryBrowser, appRouter, appHost, playbackManager, syncPlayManager, groupSelectionMenu, browser, globalize, imageHelper) {
|
define(['dom', 'layoutManager', 'inputManager', 'connectionManager', 'events', 'viewManager', 'libraryBrowser', 'appRouter', 'apphost', 'playbackManager', 'syncPlayManager', 'groupSelectionMenu', 'browser', 'globalize', 'scripts/imagehelper', 'paper-icon-button-light', 'material-icons', 'scrollStyles', 'flexStyles'], function (dom, layoutManager, inputManager, connectionManager, events, viewManager, libraryBrowser, appRouter, appHost, playbackManager, syncPlayManager, groupSelectionMenu, browser, globalize, imageHelper) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
playbackManager = playbackManager.default || playbackManager;
|
||||||
|
browser = browser.default || browser;
|
||||||
|
|
||||||
function renderHeader() {
|
function renderHeader() {
|
||||||
var html = '';
|
var html = '';
|
||||||
html += '<div class="flex align-items-center flex-grow headerTop">';
|
html += '<div class="flex align-items-center flex-grow headerTop">';
|
||||||
|
|
|
@ -1,10 +1,15 @@
|
||||||
define(['inputManager', 'focusManager', 'browser', 'layoutManager', 'events', 'dom'], function (inputManager, focusManager, browser, layoutManager, events, dom) {
|
import inputManager from 'inputManager';
|
||||||
'use strict';
|
import focusManager from 'focusManager';
|
||||||
|
import browser from 'browser';
|
||||||
|
import layoutManager from 'layoutManager';
|
||||||
|
import events from 'events';
|
||||||
|
import dom from 'dom';
|
||||||
|
/* eslint-disable indent */
|
||||||
|
|
||||||
var self = {};
|
const self = {};
|
||||||
|
|
||||||
var lastMouseInputTime = new Date().getTime();
|
let lastMouseInputTime = new Date().getTime();
|
||||||
var isMouseIdle;
|
let isMouseIdle;
|
||||||
|
|
||||||
function mouseIdleTime() {
|
function mouseIdleTime() {
|
||||||
return new Date().getTime() - lastMouseInputTime;
|
return new Date().getTime() - lastMouseInputTime;
|
||||||
|
@ -15,14 +20,14 @@ define(['inputManager', 'focusManager', 'browser', 'layoutManager', 'events', 'd
|
||||||
}
|
}
|
||||||
|
|
||||||
function removeIdleClasses() {
|
function removeIdleClasses() {
|
||||||
var classList = document.body.classList;
|
const classList = document.body.classList;
|
||||||
|
|
||||||
classList.remove('mouseIdle');
|
classList.remove('mouseIdle');
|
||||||
classList.remove('mouseIdle-tv');
|
classList.remove('mouseIdle-tv');
|
||||||
}
|
}
|
||||||
|
|
||||||
function addIdleClasses() {
|
function addIdleClasses() {
|
||||||
var classList = document.body.classList;
|
const classList = document.body.classList;
|
||||||
|
|
||||||
classList.add('mouseIdle');
|
classList.add('mouseIdle');
|
||||||
|
|
||||||
|
@ -31,7 +36,7 @@ define(['inputManager', 'focusManager', 'browser', 'layoutManager', 'events', 'd
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function showCursor() {
|
export function showCursor() {
|
||||||
if (isMouseIdle) {
|
if (isMouseIdle) {
|
||||||
isMouseIdle = false;
|
isMouseIdle = false;
|
||||||
removeIdleClasses();
|
removeIdleClasses();
|
||||||
|
@ -39,7 +44,7 @@ define(['inputManager', 'focusManager', 'browser', 'layoutManager', 'events', 'd
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function hideCursor() {
|
export function hideCursor() {
|
||||||
if (!isMouseIdle) {
|
if (!isMouseIdle) {
|
||||||
isMouseIdle = true;
|
isMouseIdle = true;
|
||||||
addIdleClasses();
|
addIdleClasses();
|
||||||
|
@ -47,17 +52,17 @@ define(['inputManager', 'focusManager', 'browser', 'layoutManager', 'events', 'd
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var lastPointerMoveData;
|
let lastPointerMoveData;
|
||||||
function onPointerMove(e) {
|
function onPointerMove(e) {
|
||||||
var eventX = e.screenX;
|
const eventX = e.screenX;
|
||||||
var eventY = e.screenY;
|
const eventY = e.screenY;
|
||||||
|
|
||||||
// if coord don't exist how could it move
|
// if coord don't exist how could it move
|
||||||
if (typeof eventX === 'undefined' && typeof eventY === 'undefined') {
|
if (typeof eventX === 'undefined' && typeof eventY === 'undefined') {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var obj = lastPointerMoveData;
|
const obj = lastPointerMoveData;
|
||||||
if (!obj) {
|
if (!obj) {
|
||||||
lastPointerMoveData = {
|
lastPointerMoveData = {
|
||||||
x: eventX,
|
x: eventX,
|
||||||
|
@ -81,11 +86,11 @@ define(['inputManager', 'focusManager', 'browser', 'layoutManager', 'events', 'd
|
||||||
}
|
}
|
||||||
|
|
||||||
function onPointerEnter(e) {
|
function onPointerEnter(e) {
|
||||||
var pointerType = e.pointerType || (layoutManager.mobile ? 'touch' : 'mouse');
|
const pointerType = e.pointerType || (layoutManager.mobile ? 'touch' : 'mouse');
|
||||||
|
|
||||||
if (pointerType === 'mouse') {
|
if (pointerType === 'mouse') {
|
||||||
if (!isMouseIdle) {
|
if (!isMouseIdle) {
|
||||||
var parent = focusManager.focusableParent(e.target);
|
const parent = focusManager.focusableParent(e.target);
|
||||||
if (parent) {
|
if (parent) {
|
||||||
focusManager.focus(parent);
|
focusManager.focus(parent);
|
||||||
}
|
}
|
||||||
|
@ -115,7 +120,7 @@ define(['inputManager', 'focusManager', 'browser', 'layoutManager', 'events', 'd
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var mouseInterval;
|
let mouseInterval;
|
||||||
function startMouseInterval() {
|
function startMouseInterval() {
|
||||||
if (!mouseInterval) {
|
if (!mouseInterval) {
|
||||||
mouseInterval = setInterval(onMouseInterval, 5000);
|
mouseInterval = setInterval(onMouseInterval, 5000);
|
||||||
|
@ -123,7 +128,7 @@ define(['inputManager', 'focusManager', 'browser', 'layoutManager', 'events', 'd
|
||||||
}
|
}
|
||||||
|
|
||||||
function stopMouseInterval() {
|
function stopMouseInterval() {
|
||||||
var interval = mouseInterval;
|
const interval = mouseInterval;
|
||||||
|
|
||||||
if (interval) {
|
if (interval) {
|
||||||
clearInterval(interval);
|
clearInterval(interval);
|
||||||
|
@ -167,8 +172,10 @@ define(['inputManager', 'focusManager', 'browser', 'layoutManager', 'events', 'd
|
||||||
|
|
||||||
events.on(layoutManager, 'modechange', initMouse);
|
events.on(layoutManager, 'modechange', initMouse);
|
||||||
|
|
||||||
self.hideCursor = hideCursor;
|
/* eslint-enable indent */
|
||||||
self.showCursor = showCursor;
|
|
||||||
|
export default {
|
||||||
|
hideCursor,
|
||||||
|
showCursor
|
||||||
|
};
|
||||||
|
|
||||||
return self;
|
|
||||||
});
|
|
||||||
|
|
|
@ -1,18 +1,21 @@
|
||||||
define([
|
import 'emby-button';
|
||||||
'jQuery',
|
import 'emby-input';
|
||||||
'emby-button',
|
import 'scripts/livetvcomponents';
|
||||||
'emby-input',
|
import 'paper-icon-button-light';
|
||||||
'scripts/livetvcomponents',
|
import 'emby-itemscontainer';
|
||||||
'paper-icon-button-light',
|
import 'emby-collapse';
|
||||||
'emby-itemscontainer',
|
import 'emby-select';
|
||||||
'emby-collapse',
|
import 'livetvcss';
|
||||||
'emby-select',
|
import 'emby-checkbox';
|
||||||
'livetvcss',
|
import 'emby-slider';
|
||||||
'emby-checkbox',
|
import 'listViewStyle';
|
||||||
'emby-slider',
|
import 'dashboardcss';
|
||||||
'listViewStyle',
|
import 'detailtablecss';
|
||||||
'dashboardcss',
|
|
||||||
'detailtablecss'], function () {
|
/* eslint-disable indent */
|
||||||
|
|
||||||
|
console.groupCollapsed('defining core routes');
|
||||||
|
|
||||||
function defineRoute(newRoute) {
|
function defineRoute(newRoute) {
|
||||||
var path = newRoute.alias ? newRoute.alias : newRoute.path;
|
var path = newRoute.alias ? newRoute.alias : newRoute.path;
|
||||||
console.debug('defining route: ' + path);
|
console.debug('defining route: ' + path);
|
||||||
|
@ -20,8 +23,6 @@ define([
|
||||||
Emby.Page.addRoute(path, newRoute);
|
Emby.Page.addRoute(path, newRoute);
|
||||||
}
|
}
|
||||||
|
|
||||||
console.debug('defining core routes');
|
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
alias: '/addserver.html',
|
alias: '/addserver.html',
|
||||||
path: '/controllers/session/addServer/index.html',
|
path: '/controllers/session/addServer/index.html',
|
||||||
|
@ -30,6 +31,7 @@ define([
|
||||||
startup: true,
|
startup: true,
|
||||||
controller: 'session/addServer/index'
|
controller: 'session/addServer/index'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
alias: '/selectserver.html',
|
alias: '/selectserver.html',
|
||||||
path: '/controllers/session/selectServer/index.html',
|
path: '/controllers/session/selectServer/index.html',
|
||||||
|
@ -39,6 +41,7 @@ define([
|
||||||
controller: 'session/selectServer/index',
|
controller: 'session/selectServer/index',
|
||||||
type: 'selectserver'
|
type: 'selectserver'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
alias: '/login.html',
|
alias: '/login.html',
|
||||||
path: '/controllers/session/login/index.html',
|
path: '/controllers/session/login/index.html',
|
||||||
|
@ -48,6 +51,7 @@ define([
|
||||||
controller: 'session/login/index',
|
controller: 'session/login/index',
|
||||||
type: 'login'
|
type: 'login'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
alias: '/forgotpassword.html',
|
alias: '/forgotpassword.html',
|
||||||
path: '/controllers/session/forgotPassword/index.html',
|
path: '/controllers/session/forgotPassword/index.html',
|
||||||
|
@ -55,6 +59,7 @@ define([
|
||||||
startup: true,
|
startup: true,
|
||||||
controller: 'session/forgotPassword/index'
|
controller: 'session/forgotPassword/index'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
alias: '/forgotpasswordpin.html',
|
alias: '/forgotpasswordpin.html',
|
||||||
path: '/controllers/session/redeemPassword/index.html',
|
path: '/controllers/session/redeemPassword/index.html',
|
||||||
|
@ -68,42 +73,41 @@ define([
|
||||||
alias: '/mypreferencesmenu.html',
|
alias: '/mypreferencesmenu.html',
|
||||||
path: '/controllers/user/menu/index.html',
|
path: '/controllers/user/menu/index.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
transition: 'fade',
|
|
||||||
controller: 'user/menu/index'
|
controller: 'user/menu/index'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
alias: '/myprofile.html',
|
alias: '/myprofile.html',
|
||||||
path: '/controllers/user/profile/index.html',
|
path: '/controllers/user/profile/index.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
transition: 'fade',
|
|
||||||
controller: 'user/profile/index'
|
controller: 'user/profile/index'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
alias: '/mypreferencesdisplay.html',
|
alias: '/mypreferencesdisplay.html',
|
||||||
path: '/controllers/user/display/index.html',
|
path: '/controllers/user/display/index.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
transition: 'fade',
|
|
||||||
controller: 'user/display/index'
|
controller: 'user/display/index'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
alias: '/mypreferenceshome.html',
|
alias: '/mypreferenceshome.html',
|
||||||
path: '/controllers/user/home/index.html',
|
path: '/controllers/user/home/index.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
transition: 'fade',
|
|
||||||
controller: 'user/home/index'
|
controller: 'user/home/index'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
alias: '/mypreferencesplayback.html',
|
alias: '/mypreferencesplayback.html',
|
||||||
path: '/controllers/user/playback/index.html',
|
path: '/controllers/user/playback/index.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
transition: 'fade',
|
|
||||||
controller: 'user/playback/index'
|
controller: 'user/playback/index'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
alias: '/mypreferencessubtitles.html',
|
alias: '/mypreferencessubtitles.html',
|
||||||
path: '/controllers/user/subtitles/index.html',
|
path: '/controllers/user/subtitles/index.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
transition: 'fade',
|
|
||||||
controller: 'user/subtitles/index'
|
controller: 'user/subtitles/index'
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -113,42 +117,49 @@ define([
|
||||||
roles: 'admin',
|
roles: 'admin',
|
||||||
controller: 'dashboard/dashboard'
|
controller: 'dashboard/dashboard'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/dashboardgeneral.html',
|
path: '/dashboardgeneral.html',
|
||||||
controller: 'dashboard/general',
|
controller: 'dashboard/general',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
roles: 'admin'
|
roles: 'admin'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/networking.html',
|
path: '/networking.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
roles: 'admin',
|
roles: 'admin',
|
||||||
controller: 'dashboard/networking'
|
controller: 'dashboard/networking'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/devices.html',
|
path: '/devices.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
roles: 'admin',
|
roles: 'admin',
|
||||||
controller: 'dashboard/devices/devices'
|
controller: 'dashboard/devices/devices'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/device.html',
|
path: '/device.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
roles: 'admin',
|
roles: 'admin',
|
||||||
controller: 'dashboard/devices/device'
|
controller: 'dashboard/devices/device'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/dlnaprofile.html',
|
path: '/dlnaprofile.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
roles: 'admin',
|
roles: 'admin',
|
||||||
controller: 'dashboard/dlna/profile'
|
controller: 'dashboard/dlna/profile'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/dlnaprofiles.html',
|
path: '/dlnaprofiles.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
roles: 'admin',
|
roles: 'admin',
|
||||||
controller: 'dashboard/dlna/profiles'
|
controller: 'dashboard/dlna/profiles'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
alias: '/addplugin.html',
|
alias: '/addplugin.html',
|
||||||
path: '/controllers/dashboard/plugins/add/index.html',
|
path: '/controllers/dashboard/plugins/add/index.html',
|
||||||
|
@ -156,52 +167,61 @@ define([
|
||||||
roles: 'admin',
|
roles: 'admin',
|
||||||
controller: 'dashboard/plugins/add/index'
|
controller: 'dashboard/plugins/add/index'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/library.html',
|
path: '/library.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
roles: 'admin',
|
roles: 'admin',
|
||||||
controller: 'dashboard/mediaLibrary'
|
controller: 'dashboard/mediaLibrary'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/librarydisplay.html',
|
path: '/librarydisplay.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
roles: 'admin',
|
roles: 'admin',
|
||||||
controller: 'dashboard/librarydisplay'
|
controller: 'dashboard/librarydisplay'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/dlnasettings.html',
|
path: '/dlnasettings.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
roles: 'admin',
|
roles: 'admin',
|
||||||
controller: 'dashboard/dlna/settings'
|
controller: 'dashboard/dlna/settings'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/edititemmetadata.html',
|
path: '/edititemmetadata.html',
|
||||||
controller: 'edititemmetadata',
|
controller: 'edititemmetadata',
|
||||||
autoFocus: false
|
autoFocus: false
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/encodingsettings.html',
|
path: '/encodingsettings.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
roles: 'admin',
|
roles: 'admin',
|
||||||
controller: 'dashboard/encodingsettings'
|
controller: 'dashboard/encodingsettings'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/log.html',
|
path: '/log.html',
|
||||||
roles: 'admin',
|
roles: 'admin',
|
||||||
controller: 'dashboard/logs'
|
controller: 'dashboard/logs'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/metadataimages.html',
|
path: '/metadataimages.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
roles: 'admin',
|
roles: 'admin',
|
||||||
controller: 'dashboard/metadataImages'
|
controller: 'dashboard/metadataImages'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/metadatanfo.html',
|
path: '/metadatanfo.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
roles: 'admin',
|
roles: 'admin',
|
||||||
controller: 'dashboard/metadatanfo'
|
controller: 'dashboard/metadatanfo'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
alias: '/notificationsetting.html',
|
alias: '/notificationsetting.html',
|
||||||
path: '/controllers/dashboard/notifications/notification/index.html',
|
path: '/controllers/dashboard/notifications/notification/index.html',
|
||||||
|
@ -209,6 +229,7 @@ define([
|
||||||
roles: 'admin',
|
roles: 'admin',
|
||||||
controller: 'dashboard/notifications/notification/index'
|
controller: 'dashboard/notifications/notification/index'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
alias: '/notificationsettings.html',
|
alias: '/notificationsettings.html',
|
||||||
path: '/controllers/dashboard/notifications/notifications/index.html',
|
path: '/controllers/dashboard/notifications/notifications/index.html',
|
||||||
|
@ -216,12 +237,14 @@ define([
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
roles: 'admin'
|
roles: 'admin'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/playbackconfiguration.html',
|
path: '/playbackconfiguration.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
roles: 'admin',
|
roles: 'admin',
|
||||||
controller: 'dashboard/playback'
|
controller: 'dashboard/playback'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
alias: '/availableplugins.html',
|
alias: '/availableplugins.html',
|
||||||
path: '/controllers/dashboard/plugins/available/index.html',
|
path: '/controllers/dashboard/plugins/available/index.html',
|
||||||
|
@ -229,6 +252,7 @@ define([
|
||||||
roles: 'admin',
|
roles: 'admin',
|
||||||
controller: 'dashboard/plugins/available/index'
|
controller: 'dashboard/plugins/available/index'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
alias: '/repositories.html',
|
alias: '/repositories.html',
|
||||||
path: '/controllers/dashboard/plugins/repositories/index.html',
|
path: '/controllers/dashboard/plugins/repositories/index.html',
|
||||||
|
@ -241,67 +265,72 @@ define([
|
||||||
path: '/home.html',
|
path: '/home.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
controller: 'home',
|
controller: 'home',
|
||||||
transition: 'fade',
|
|
||||||
type: 'home'
|
type: 'home'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/search.html',
|
path: '/search.html',
|
||||||
controller: 'searchpage'
|
controller: 'searchpage'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/list.html',
|
path: '/list.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
controller: 'list',
|
controller: 'list'
|
||||||
transition: 'fade'
|
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
alias: '/details',
|
alias: '/details',
|
||||||
path: '/controllers/itemDetails/index.html',
|
path: '/controllers/itemDetails/index.html',
|
||||||
controller: 'itemDetails/index',
|
controller: 'itemDetails/index',
|
||||||
autoFocus: false,
|
autoFocus: false
|
||||||
transition: 'fade'
|
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/livetv.html',
|
path: '/livetv.html',
|
||||||
controller: 'livetv/livetvsuggested',
|
controller: 'livetv/livetvsuggested',
|
||||||
autoFocus: false,
|
autoFocus: false
|
||||||
transition: 'fade'
|
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/livetvguideprovider.html',
|
path: '/livetvguideprovider.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
roles: 'admin',
|
roles: 'admin',
|
||||||
controller: 'livetvguideprovider'
|
controller: 'livetvguideprovider'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/livetvsettings.html',
|
path: '/livetvsettings.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
controller: 'livetvsettings'
|
controller: 'livetvsettings'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/livetvstatus.html',
|
path: '/livetvstatus.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
roles: 'admin',
|
roles: 'admin',
|
||||||
controller: 'livetvstatus'
|
controller: 'livetvstatus'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/livetvtuner.html',
|
path: '/livetvtuner.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
roles: 'admin',
|
roles: 'admin',
|
||||||
controller: 'livetvtuner'
|
controller: 'livetvtuner'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/movies.html',
|
path: '/movies.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
controller: 'movies/moviesrecommended',
|
controller: 'movies/moviesrecommended'
|
||||||
transition: 'fade'
|
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/music.html',
|
path: '/music.html',
|
||||||
controller: 'music/musicrecommended',
|
controller: 'music/musicrecommended',
|
||||||
autoFocus: false,
|
autoFocus: false
|
||||||
transition: 'fade'
|
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
alias: '/installedplugins.html',
|
alias: '/installedplugins.html',
|
||||||
path: '/controllers/dashboard/plugins/installed/index.html',
|
path: '/controllers/dashboard/plugins/installed/index.html',
|
||||||
|
@ -309,41 +338,46 @@ define([
|
||||||
roles: 'admin',
|
roles: 'admin',
|
||||||
controller: 'dashboard/plugins/installed/index'
|
controller: 'dashboard/plugins/installed/index'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/scheduledtask.html',
|
path: '/scheduledtask.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
roles: 'admin',
|
roles: 'admin',
|
||||||
controller: 'dashboard/scheduledtasks/scheduledtask'
|
controller: 'dashboard/scheduledtasks/scheduledtask'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/scheduledtasks.html',
|
path: '/scheduledtasks.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
roles: 'admin',
|
roles: 'admin',
|
||||||
controller: 'dashboard/scheduledtasks/scheduledtasks'
|
controller: 'dashboard/scheduledtasks/scheduledtasks'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/serveractivity.html',
|
path: '/serveractivity.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
roles: 'admin',
|
roles: 'admin',
|
||||||
controller: 'dashboard/serveractivity'
|
controller: 'dashboard/serveractivity'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/apikeys.html',
|
path: '/apikeys.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
roles: 'admin',
|
roles: 'admin',
|
||||||
controller: 'dashboard/apikeys'
|
controller: 'dashboard/apikeys'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/streamingsettings.html',
|
path: '/streamingsettings.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
roles: 'admin',
|
roles: 'admin',
|
||||||
controller: 'dashboard/streaming'
|
controller: 'dashboard/streaming'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/tv.html',
|
path: '/tv.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
controller: 'shows/tvrecommended',
|
controller: 'shows/tvrecommended'
|
||||||
transition: 'fade'
|
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
|
@ -352,29 +386,34 @@ define([
|
||||||
roles: 'admin',
|
roles: 'admin',
|
||||||
controller: 'dashboard/users/useredit'
|
controller: 'dashboard/users/useredit'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/userlibraryaccess.html',
|
path: '/userlibraryaccess.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
roles: 'admin',
|
roles: 'admin',
|
||||||
controller: 'dashboard/users/userlibraryaccess'
|
controller: 'dashboard/users/userlibraryaccess'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/usernew.html',
|
path: '/usernew.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
roles: 'admin',
|
roles: 'admin',
|
||||||
controller: 'dashboard/users/usernew'
|
controller: 'dashboard/users/usernew'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/userparentalcontrol.html',
|
path: '/userparentalcontrol.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
roles: 'admin',
|
roles: 'admin',
|
||||||
controller: 'dashboard/users/userparentalcontrol'
|
controller: 'dashboard/users/userparentalcontrol'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/userpassword.html',
|
path: '/userpassword.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
controller: 'dashboard/users/userpasswordpage'
|
controller: 'dashboard/users/userpasswordpage'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/userprofiles.html',
|
path: '/userprofiles.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
|
@ -389,6 +428,7 @@ define([
|
||||||
anonymous: true,
|
anonymous: true,
|
||||||
controller: 'wizard/remote/index'
|
controller: 'wizard/remote/index'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
alias: '/wizardfinish.html',
|
alias: '/wizardfinish.html',
|
||||||
path: '/controllers/wizard/finish/index.html',
|
path: '/controllers/wizard/finish/index.html',
|
||||||
|
@ -396,12 +436,14 @@ define([
|
||||||
anonymous: true,
|
anonymous: true,
|
||||||
controller: 'wizard/finish/index'
|
controller: 'wizard/finish/index'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/wizardlibrary.html',
|
path: '/wizardlibrary.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
anonymous: true,
|
anonymous: true,
|
||||||
controller: 'dashboard/mediaLibrary'
|
controller: 'dashboard/mediaLibrary'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
alias: '/wizardsettings.html',
|
alias: '/wizardsettings.html',
|
||||||
path: '/controllers/wizard/settings/index.html',
|
path: '/controllers/wizard/settings/index.html',
|
||||||
|
@ -409,6 +451,7 @@ define([
|
||||||
anonymous: true,
|
anonymous: true,
|
||||||
controller: 'wizard/settings/index'
|
controller: 'wizard/settings/index'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
alias: '/wizardstart.html',
|
alias: '/wizardstart.html',
|
||||||
path: '/controllers/wizard/start/index.html',
|
path: '/controllers/wizard/start/index.html',
|
||||||
|
@ -416,6 +459,7 @@ define([
|
||||||
anonymous: true,
|
anonymous: true,
|
||||||
controller: 'wizard/start/index'
|
controller: 'wizard/start/index'
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
alias: '/wizarduser.html',
|
alias: '/wizarduser.html',
|
||||||
path: '/controllers/wizard/user/index.html',
|
path: '/controllers/wizard/user/index.html',
|
||||||
|
@ -427,7 +471,6 @@ define([
|
||||||
defineRoute({
|
defineRoute({
|
||||||
alias: '/video',
|
alias: '/video',
|
||||||
path: '/controllers/playback/video/index.html',
|
path: '/controllers/playback/video/index.html',
|
||||||
transition: 'fade',
|
|
||||||
controller: 'playback/video/index',
|
controller: 'playback/video/index',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
type: 'video-osd',
|
type: 'video-osd',
|
||||||
|
@ -435,16 +478,17 @@ define([
|
||||||
fullscreen: true,
|
fullscreen: true,
|
||||||
enableMediaControl: false
|
enableMediaControl: false
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
alias: '/queue',
|
alias: '/queue',
|
||||||
path: '/controllers/playback/queue/index.html',
|
path: '/controllers/playback/queue/index.html',
|
||||||
controller: 'playback/queue/index',
|
controller: 'playback/queue/index',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
transition: 'fade',
|
|
||||||
fullscreen: true,
|
fullscreen: true,
|
||||||
supportsThemeMedia: true,
|
supportsThemeMedia: true,
|
||||||
enableMediaControl: false
|
enableMediaControl: false
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/configurationpage',
|
path: '/configurationpage',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
|
@ -458,9 +502,13 @@ define([
|
||||||
isDefaultRoute: true,
|
isDefaultRoute: true,
|
||||||
autoFocus: false
|
autoFocus: false
|
||||||
});
|
});
|
||||||
|
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: '/index.html',
|
path: '/index.html',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
isDefaultRoute: true
|
isDefaultRoute: true
|
||||||
});
|
});
|
||||||
});
|
|
||||||
|
console.groupEnd('defining core routes');
|
||||||
|
|
||||||
|
/* eslint-enable indent */
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
define(['connectionManager', 'playbackManager', 'syncPlayManager', 'events', 'inputManager', 'focusManager', 'appRouter'], function (connectionManager, playbackManager, syncPlayManager, events, inputManager, focusManager, appRouter) {
|
define(['connectionManager', 'playbackManager', 'syncPlayManager', 'events', 'inputManager', 'focusManager', 'appRouter'], function (connectionManager, playbackManager, syncPlayManager, events, inputManager, focusManager, appRouter) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
playbackManager = playbackManager.default || playbackManager;
|
||||||
|
|
||||||
var serverNotifications = {};
|
var serverNotifications = {};
|
||||||
|
|
||||||
function notifyApp() {
|
function notifyApp() {
|
||||||
|
|
|
@ -80,43 +80,6 @@ import events from 'events';
|
||||||
return val ? parseInt(val) : null;
|
return val ? parseInt(val) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function syncOnlyOnWifi(val) {
|
|
||||||
if (val !== undefined) {
|
|
||||||
this.set('syncOnlyOnWifi', val.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.get('syncOnlyOnWifi') !== 'false';
|
|
||||||
}
|
|
||||||
|
|
||||||
export function syncPath(val) {
|
|
||||||
if (val !== undefined) {
|
|
||||||
this.set('syncPath', val);
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.get('syncPath');
|
|
||||||
}
|
|
||||||
|
|
||||||
export function cameraUploadServers(val) {
|
|
||||||
if (val !== undefined) {
|
|
||||||
this.set('cameraUploadServers', val.join(','));
|
|
||||||
}
|
|
||||||
|
|
||||||
val = this.get('cameraUploadServers');
|
|
||||||
if (val) {
|
|
||||||
return val.split(',');
|
|
||||||
}
|
|
||||||
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
export function runAtStartup(val) {
|
|
||||||
if (val !== undefined) {
|
|
||||||
this.set('runatstartup', val.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.get('runatstartup') === 'true';
|
|
||||||
}
|
|
||||||
|
|
||||||
export function set(name, value, userId) {
|
export function set(name, value, userId) {
|
||||||
const currentValue = this.get(name, userId);
|
const currentValue = this.get(name, userId);
|
||||||
appStorage.setItem(getKey(name, userId), value);
|
appStorage.setItem(getKey(name, userId), value);
|
||||||
|
@ -139,10 +102,6 @@ export default {
|
||||||
maxStreamingBitrate: maxStreamingBitrate,
|
maxStreamingBitrate: maxStreamingBitrate,
|
||||||
maxStaticMusicBitrate: maxStaticMusicBitrate,
|
maxStaticMusicBitrate: maxStaticMusicBitrate,
|
||||||
maxChromecastBitrate: maxChromecastBitrate,
|
maxChromecastBitrate: maxChromecastBitrate,
|
||||||
syncOnlyOnWifi: syncOnlyOnWifi,
|
|
||||||
syncPath: syncPath,
|
|
||||||
cameraUploadServers: cameraUploadServers,
|
|
||||||
runAtStartup: runAtStartup,
|
|
||||||
set: set,
|
set: set,
|
||||||
get: get
|
get: get
|
||||||
};
|
};
|
||||||
|
|
|
@ -18,7 +18,7 @@ function getDefaultConfig() {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export function enableMultiServer() {
|
export function getMultiServer() {
|
||||||
return getConfig().then(config => {
|
return getConfig().then(config => {
|
||||||
return config.multiserver;
|
return config.multiserver;
|
||||||
}).catch(error => {
|
}).catch(error => {
|
||||||
|
@ -26,3 +26,21 @@ export function enableMultiServer() {
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getThemes() {
|
||||||
|
return getConfig().then(config => {
|
||||||
|
return config.themes;
|
||||||
|
}).catch(error => {
|
||||||
|
console.log('cannot get web config:', error);
|
||||||
|
return [];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getPlugins() {
|
||||||
|
return getConfig().then(config => {
|
||||||
|
return config.plugins;
|
||||||
|
}).catch(error => {
|
||||||
|
console.log('cannot get web config:', error);
|
||||||
|
return [];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
|
@ -152,13 +152,13 @@ var Dashboard = {
|
||||||
processPluginConfigurationUpdateResult: function () {
|
processPluginConfigurationUpdateResult: function () {
|
||||||
require(['loading', 'toast'], function (loading, toast) {
|
require(['loading', 'toast'], function (loading, toast) {
|
||||||
loading.hide();
|
loading.hide();
|
||||||
toast(Globalize.translate('MessageSettingsSaved'));
|
toast.default(Globalize.translate('MessageSettingsSaved'));
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
processServerConfigurationUpdateResult: function (result) {
|
processServerConfigurationUpdateResult: function (result) {
|
||||||
require(['loading', 'toast'], function (loading, toast) {
|
require(['loading', 'toast'], function (loading, toast) {
|
||||||
loading.hide();
|
loading.hide();
|
||||||
toast(Globalize.translate('MessageSettingsSaved'));
|
toast.default(Globalize.translate('MessageSettingsSaved'));
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
processErrorResponse: function (response) {
|
processErrorResponse: function (response) {
|
||||||
|
@ -180,7 +180,7 @@ var Dashboard = {
|
||||||
alert: function (options) {
|
alert: function (options) {
|
||||||
if (typeof options == 'string') {
|
if (typeof options == 'string') {
|
||||||
return void require(['toast'], function (toast) {
|
return void require(['toast'], function (toast) {
|
||||||
toast({
|
toast.default({
|
||||||
text: options
|
text: options
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -477,36 +477,30 @@ function initClient() {
|
||||||
|
|
||||||
function loadPlugins(appHost, browser, shell) {
|
function loadPlugins(appHost, browser, shell) {
|
||||||
console.debug('loading installed plugins');
|
console.debug('loading installed plugins');
|
||||||
var list = [
|
|
||||||
'plugins/playAccessValidation/plugin',
|
|
||||||
'plugins/experimentalWarnings/plugin',
|
|
||||||
'plugins/htmlAudioPlayer/plugin',
|
|
||||||
'plugins/htmlVideoPlayer/plugin',
|
|
||||||
'plugins/photoPlayer/plugin',
|
|
||||||
'plugins/bookPlayer/plugin',
|
|
||||||
'plugins/youtubePlayer/plugin',
|
|
||||||
'plugins/backdropScreensaver/plugin',
|
|
||||||
'plugins/logoScreensaver/plugin'
|
|
||||||
];
|
|
||||||
|
|
||||||
if (appHost.supports('remotecontrol')) {
|
|
||||||
list.push('plugins/sessionPlayer/plugin');
|
|
||||||
|
|
||||||
if (browser.chrome || browser.edgeChromium || browser.opera) {
|
|
||||||
list.push('plugins/chromecastPlayer/plugin');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (window.NativeShell) {
|
|
||||||
list = list.concat(window.NativeShell.getPlugins());
|
|
||||||
}
|
|
||||||
|
|
||||||
return new Promise(function (resolve, reject) {
|
return new Promise(function (resolve, reject) {
|
||||||
Promise.all(list.map(loadPlugin)).then(function () {
|
require(['webSettings'], function (webSettings) {
|
||||||
require(['packageManager'], function (packageManager) {
|
webSettings.getPlugins().then(function (list) {
|
||||||
packageManager.init().then(resolve, reject);
|
// these two plugins are dependent on features
|
||||||
|
if (!appHost.supports('remotecontrol')) {
|
||||||
|
list.splice(list.indexOf('sessionPlayer'), 1);
|
||||||
|
|
||||||
|
if (!browser.chrome && !browser.opera) {
|
||||||
|
list.splice(list.indexOf('chromecastPlayer', 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// add any native plugins
|
||||||
|
if (window.NativeShell) {
|
||||||
|
list = list.concat(window.NativeShell.getPlugins());
|
||||||
|
}
|
||||||
|
|
||||||
|
Promise.all(list.map(loadPlugin)).then(function () {
|
||||||
|
require(['packageManager'], function (packageManager) {
|
||||||
|
packageManager.init().then(resolve, reject);
|
||||||
|
});
|
||||||
|
}, reject);
|
||||||
});
|
});
|
||||||
}, reject);
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -532,7 +526,7 @@ function initClient() {
|
||||||
|
|
||||||
window.Emby.Page = appRouter;
|
window.Emby.Page = appRouter;
|
||||||
|
|
||||||
require(['emby-button', 'scripts/themeLoader', 'libraryMenu', 'scripts/routes'], function () {
|
require(['emby-button', 'scripts/autoThemes', 'libraryMenu', 'scripts/routes'], function () {
|
||||||
Emby.Page.start({
|
Emby.Page.start({
|
||||||
click: false,
|
click: false,
|
||||||
hashbang: true
|
hashbang: true
|
||||||
|
@ -653,8 +647,7 @@ function initClient() {
|
||||||
nowPlayingHelper: componentsPath + '/playback/nowplayinghelper',
|
nowPlayingHelper: componentsPath + '/playback/nowplayinghelper',
|
||||||
pluginManager: componentsPath + '/pluginManager',
|
pluginManager: componentsPath + '/pluginManager',
|
||||||
packageManager: componentsPath + '/packageManager',
|
packageManager: componentsPath + '/packageManager',
|
||||||
screensaverManager: componentsPath + '/screensavermanager',
|
screensaverManager: componentsPath + '/screensavermanager'
|
||||||
chromecastHelper: 'plugins/chromecastPlayer/chromecastHelpers'
|
|
||||||
};
|
};
|
||||||
|
|
||||||
requirejs.onError = onRequireJsError;
|
requirejs.onError = onRequireJsError;
|
||||||
|
@ -848,7 +841,7 @@ function initClient() {
|
||||||
define('viewContainer', [componentsPath + '/viewContainer'], returnFirstDependency);
|
define('viewContainer', [componentsPath + '/viewContainer'], returnFirstDependency);
|
||||||
define('dialogHelper', [componentsPath + '/dialogHelper/dialogHelper'], returnFirstDependency);
|
define('dialogHelper', [componentsPath + '/dialogHelper/dialogHelper'], returnFirstDependency);
|
||||||
define('serverNotifications', [scriptsPath + '/serverNotifications'], returnFirstDependency);
|
define('serverNotifications', [scriptsPath + '/serverNotifications'], returnFirstDependency);
|
||||||
define('skinManager', [componentsPath + '/skinManager'], returnFirstDependency);
|
define('skinManager', [scriptsPath + '/themeManager'], returnFirstDependency);
|
||||||
define('keyboardnavigation', [scriptsPath + '/keyboardNavigation'], returnFirstDependency);
|
define('keyboardnavigation', [scriptsPath + '/keyboardNavigation'], returnFirstDependency);
|
||||||
define('mouseManager', [scriptsPath + '/mouseManager'], returnFirstDependency);
|
define('mouseManager', [scriptsPath + '/mouseManager'], returnFirstDependency);
|
||||||
define('scrollManager', [componentsPath + '/scrollManager'], returnFirstDependency);
|
define('scrollManager', [componentsPath + '/scrollManager'], returnFirstDependency);
|
||||||
|
|
|
@ -1,29 +0,0 @@
|
||||||
import * as userSettings from 'userSettings';
|
|
||||||
import skinManager from 'skinManager';
|
|
||||||
import connectionManager from 'connectionManager';
|
|
||||||
import events from 'events';
|
|
||||||
|
|
||||||
var currentViewType;
|
|
||||||
pageClassOn('viewbeforeshow', 'page', function () {
|
|
||||||
var classList = this.classList;
|
|
||||||
var viewType = classList.contains('type-interior') || classList.contains('wizardPage') ? 'a' : 'b';
|
|
||||||
|
|
||||||
if (viewType !== currentViewType) {
|
|
||||||
currentViewType = viewType;
|
|
||||||
var theme;
|
|
||||||
var context;
|
|
||||||
|
|
||||||
if (viewType === 'a') {
|
|
||||||
theme = userSettings.dashboardTheme();
|
|
||||||
context = 'serverdashboard';
|
|
||||||
} else {
|
|
||||||
theme = userSettings.theme();
|
|
||||||
}
|
|
||||||
|
|
||||||
skinManager.setTheme(theme, context);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
events.on(connectionManager, 'localusersignedin', function (e, user) {
|
|
||||||
currentViewType = null;
|
|
||||||
});
|
|
66
src/scripts/themeManager.js
Normal file
66
src/scripts/themeManager.js
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
import * as webSettings from 'webSettings';
|
||||||
|
|
||||||
|
var themeStyleElement;
|
||||||
|
var currentThemeId;
|
||||||
|
|
||||||
|
function unloadTheme() {
|
||||||
|
var elem = themeStyleElement;
|
||||||
|
if (elem) {
|
||||||
|
elem.parentNode.removeChild(elem);
|
||||||
|
themeStyleElement = null;
|
||||||
|
currentThemeId = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getThemes() {
|
||||||
|
return webSettings.getThemes();
|
||||||
|
}
|
||||||
|
|
||||||
|
function getThemeStylesheetInfo(id) {
|
||||||
|
return getThemes().then(themes => {
|
||||||
|
var theme = themes.find(theme => {
|
||||||
|
return id ? theme.id === id : theme.default;
|
||||||
|
});
|
||||||
|
|
||||||
|
return {
|
||||||
|
stylesheetPath: 'themes/' + theme.id + '/theme.css',
|
||||||
|
themeId: theme.id
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function setTheme(id) {
|
||||||
|
return new Promise(function (resolve, reject) {
|
||||||
|
if (currentThemeId && currentThemeId === id) {
|
||||||
|
resolve();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
getThemeStylesheetInfo(id).then(function (info) {
|
||||||
|
if (currentThemeId && currentThemeId === info.themeId) {
|
||||||
|
resolve();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var linkUrl = info.stylesheetPath;
|
||||||
|
unloadTheme();
|
||||||
|
|
||||||
|
var link = document.createElement('link');
|
||||||
|
link.setAttribute('rel', 'stylesheet');
|
||||||
|
link.setAttribute('type', 'text/css');
|
||||||
|
link.onload = function () {
|
||||||
|
resolve();
|
||||||
|
};
|
||||||
|
|
||||||
|
link.setAttribute('href', linkUrl);
|
||||||
|
document.head.appendChild(link);
|
||||||
|
themeStyleElement = link;
|
||||||
|
currentThemeId = info.themeId;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export default {
|
||||||
|
getThemes: getThemes,
|
||||||
|
setTheme: setTheme
|
||||||
|
};
|
|
@ -112,7 +112,7 @@
|
||||||
"Up": "Op",
|
"Up": "Op",
|
||||||
"Unplayed": "Ongespeel",
|
"Unplayed": "Ongespeel",
|
||||||
"Unmute": "Ontstom",
|
"Unmute": "Ontstom",
|
||||||
"UninstallPluginHeader": "Oninstalleer Plugin",
|
"HeaderUninstallPlugin": "Oninstalleer Plugin",
|
||||||
"UninstallPluginConfirmation": "Is jy seker jy wil voortgaan met die oninstallasie {0}?",
|
"UninstallPluginConfirmation": "Is jy seker jy wil voortgaan met die oninstallasie {0}?",
|
||||||
"Uniform": "Uniform",
|
"Uniform": "Uniform",
|
||||||
"TvLibraryHelp": "Hersien die {0}TV benamings gids{1}.",
|
"TvLibraryHelp": "Hersien die {0}TV benamings gids{1}.",
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
"BirthDateValue": "وُلد: {0}",
|
"BirthDateValue": "وُلد: {0}",
|
||||||
"BirthPlaceValue": "مكان الميلاد: {0}",
|
"BirthPlaceValue": "مكان الميلاد: {0}",
|
||||||
"Browse": "تصفح",
|
"Browse": "تصفح",
|
||||||
"BrowsePluginCatalogMessage": "تصفح قائمتنا للملحق لترى المتوفر من الملاحق.",
|
"MessageBrowsePluginCatalog": "تصفح قائمتنا للملحق لترى المتوفر من الملاحق.",
|
||||||
"ButtonAdd": "إضافة",
|
"ButtonAdd": "إضافة",
|
||||||
"ButtonAddMediaLibrary": "إضافة مكتبة وسائط",
|
"ButtonAddMediaLibrary": "إضافة مكتبة وسائط",
|
||||||
"ButtonAddScheduledTaskTrigger": "إضافة زناد",
|
"ButtonAddScheduledTaskTrigger": "إضافة زناد",
|
||||||
|
@ -92,7 +92,7 @@
|
||||||
"CinemaModeConfigurationHelp": "الطور السينمائي يوفر أجواء سينمائية إلى قلب صالتك مع إمكانية تشغيل عروض إعلانية لأفلام أخرى وعرض مقدمات أخرى من انتقاءاتك قبل تشغيل الفيلم الرئيسي.",
|
"CinemaModeConfigurationHelp": "الطور السينمائي يوفر أجواء سينمائية إلى قلب صالتك مع إمكانية تشغيل عروض إعلانية لأفلام أخرى وعرض مقدمات أخرى من انتقاءاتك قبل تشغيل الفيلم الرئيسي.",
|
||||||
"CustomDlnaProfilesHelp": "إنشاء عرائض مخصوصه تستهدف جهازاً جديداً أو يمتطي حساباً نظامياً.",
|
"CustomDlnaProfilesHelp": "إنشاء عرائض مخصوصه تستهدف جهازاً جديداً أو يمتطي حساباً نظامياً.",
|
||||||
"DeathDateValue": "توفي: {0}",
|
"DeathDateValue": "توفي: {0}",
|
||||||
"DefaultErrorMessage": "كان هناك خطأ في معالجة الطلب. الرجاء المحاولة لاحقاً.",
|
"ErrorDefault": "كان هناك خطأ في معالجة الطلب. الرجاء المحاولة لاحقاً.",
|
||||||
"Delete": "حذف",
|
"Delete": "حذف",
|
||||||
"DeleteDeviceConfirmation": "هل أنت متأكد أنك تريد حذف هذا الجهاز؟ سيظهر الجهاز من جديد في المرة القادمة التي يسجل فها مستخدم دخوله عبره.",
|
"DeleteDeviceConfirmation": "هل أنت متأكد أنك تريد حذف هذا الجهاز؟ سيظهر الجهاز من جديد في المرة القادمة التي يسجل فها مستخدم دخوله عبره.",
|
||||||
"DeleteImage": "حذف صورة",
|
"DeleteImage": "حذف صورة",
|
||||||
|
@ -110,7 +110,7 @@
|
||||||
"ErrorAddingTunerDevice": "كان هناك خطأ في إضافة جهاز المولف. الرجاء التأكد من صلاحية الوصول إليه ثم عاود المحاولة.",
|
"ErrorAddingTunerDevice": "كان هناك خطأ في إضافة جهاز المولف. الرجاء التأكد من صلاحية الوصول إليه ثم عاود المحاولة.",
|
||||||
"ErrorAddingXmlTvFile": "كان هناك خطأ في محاولة الوصول إلى ملف XMLTV. الرجاء التأكد من وجود الملف ثم حاول مرة أخرى.",
|
"ErrorAddingXmlTvFile": "كان هناك خطأ في محاولة الوصول إلى ملف XMLTV. الرجاء التأكد من وجود الملف ثم حاول مرة أخرى.",
|
||||||
"ErrorGettingTvLineups": "كان هناك خطأ في إنزال اصطفافات التلفاز. الرجاء التأكد من أن بياناتك صحيحة ثم عاود المحاولة.",
|
"ErrorGettingTvLineups": "كان هناك خطأ في إنزال اصطفافات التلفاز. الرجاء التأكد من أن بياناتك صحيحة ثم عاود المحاولة.",
|
||||||
"ErrorMessageStartHourGreaterThanEnd": "وقت النهاية يجب أن يكون أكبر من وقت البداية.",
|
"ErrorStartHourGreaterThanEnd": "وقت النهاية يجب أن يكون أكبر من وقت البداية.",
|
||||||
"ErrorPleaseSelectLineup": "الرجاء اختيار اصطفاف ثم المحاولة مرة أخرى. إن لم تتوفر أية اصطفافات، فالرجاء التأكد من اسم المستخدم وكلمة المرور الخاصة بك، وتأكد من صحة رمزك البريدي.",
|
"ErrorPleaseSelectLineup": "الرجاء اختيار اصطفاف ثم المحاولة مرة أخرى. إن لم تتوفر أية اصطفافات، فالرجاء التأكد من اسم المستخدم وكلمة المرور الخاصة بك، وتأكد من صحة رمزك البريدي.",
|
||||||
"ErrorSavingTvProvider": "كان هناك خطأ في حفظ مزود التلفزة. الرجاء التأكد من صلاحية الوصول إليه ثم عاود المحاولة.",
|
"ErrorSavingTvProvider": "كان هناك خطأ في حفظ مزود التلفزة. الرجاء التأكد من صلاحية الوصول إليه ثم عاود المحاولة.",
|
||||||
"ExitFullscreen": "الخروج من الشاشة الكاملة",
|
"ExitFullscreen": "الخروج من الشاشة الكاملة",
|
||||||
|
@ -632,8 +632,8 @@
|
||||||
"MoreUsersCanBeAddedLater": "يمكن اضافة المستخدمين لاحقا من لوحة العدادات.",
|
"MoreUsersCanBeAddedLater": "يمكن اضافة المستخدمين لاحقا من لوحة العدادات.",
|
||||||
"Mute": "صامت",
|
"Mute": "صامت",
|
||||||
"NextUp": "التالي",
|
"NextUp": "التالي",
|
||||||
"NoNextUpItemsMessage": "لم يتم ايجاد شيء، إبدأ بمشاهدة برامجك!",
|
"MessageNoNextUpItems": "لم يتم ايجاد شيء، إبدأ بمشاهدة برامجك!",
|
||||||
"NoPluginConfigurationMessage": "هذا الملحق ليس له إعدادات تضبط.",
|
"MessageNoPluginConfiguration": "هذا الملحق ليس له إعدادات تضبط.",
|
||||||
"NumLocationsValue": "{0} مجلد(ات)",
|
"NumLocationsValue": "{0} مجلد(ات)",
|
||||||
"Option3D": "ثلاثي أبعاد",
|
"Option3D": "ثلاثي أبعاد",
|
||||||
"OptionAdminUsers": "المدراء",
|
"OptionAdminUsers": "المدراء",
|
||||||
|
@ -772,7 +772,7 @@
|
||||||
"PasswordMatchError": "كلمة السر وتاكيدها يجب ان يتطابقان.",
|
"PasswordMatchError": "كلمة السر وتاكيدها يجب ان يتطابقان.",
|
||||||
"PasswordResetComplete": "لقد تم اعادة تعيين كلمة السر.",
|
"PasswordResetComplete": "لقد تم اعادة تعيين كلمة السر.",
|
||||||
"PasswordResetConfirmation": "هل انت متاكد من انك تريد اعادة تعيين كلمة السر؟",
|
"PasswordResetConfirmation": "هل انت متاكد من انك تريد اعادة تعيين كلمة السر؟",
|
||||||
"PasswordResetHeader": "إعادة تهيئة كلمة السر",
|
"HeaderResetPassword": "إعادة تهيئة كلمة السر",
|
||||||
"PasswordSaved": "تم حفظ كلمة السر.",
|
"PasswordSaved": "تم حفظ كلمة السر.",
|
||||||
"PictureInPicture": "صورة داخل صورة",
|
"PictureInPicture": "صورة داخل صورة",
|
||||||
"PinCodeResetComplete": "تمت إعادة تهيئة الرمز الشخصي",
|
"PinCodeResetComplete": "تمت إعادة تهيئة الرمز الشخصي",
|
||||||
|
@ -783,7 +783,7 @@
|
||||||
"RecommendationBecauseYouWatched": "لأنك شاهدت {0}",
|
"RecommendationBecauseYouWatched": "لأنك شاهدت {0}",
|
||||||
"RecommendationDirectedBy": "إخراج {0}",
|
"RecommendationDirectedBy": "إخراج {0}",
|
||||||
"RecommendationStarring": "بطولة {0}",
|
"RecommendationStarring": "بطولة {0}",
|
||||||
"RecordingPathChangeMessage": "إن تغيير مجلد التسجيل لم يهجّر التسجيلات الموجودة من الموقع القديم إلى الموقع الجديد. سيتعين عليك أن تنقلهم بنفسك لو شئت.",
|
"MessageChangeRecordingPath": "إن تغيير مجلد التسجيل لم يهجّر التسجيلات الموجودة من الموقع القديم إلى الموقع الجديد. سيتعين عليك أن تنقلهم بنفسك لو شئت.",
|
||||||
"RememberMe": "تذكرني",
|
"RememberMe": "تذكرني",
|
||||||
"Rewind": "الترجيع",
|
"Rewind": "الترجيع",
|
||||||
"Saturday": "السبت",
|
"Saturday": "السبت",
|
||||||
|
@ -862,7 +862,7 @@
|
||||||
"TitlePlayback": "تشغيل",
|
"TitlePlayback": "تشغيل",
|
||||||
"Tuesday": "الثلاثاء",
|
"Tuesday": "الثلاثاء",
|
||||||
"UninstallPluginConfirmation": "هل انت متاكد انك تريد إزالة تثبيت {0}؟",
|
"UninstallPluginConfirmation": "هل انت متاكد انك تريد إزالة تثبيت {0}؟",
|
||||||
"UninstallPluginHeader": "الغاء الملحق",
|
"HeaderUninstallPlugin": "الغاء الملحق",
|
||||||
"Unmute": "غير صامت",
|
"Unmute": "غير صامت",
|
||||||
"UserProfilesIntro": "إمبي يتضمن الدعم التلقائي حسابات المستخدمين، ما يتيح لكل مستخدم أن يحفظ إعدادات العرض الخاصة وحالات تشغيل الوسائط وخواص الرقابة الأبوية.",
|
"UserProfilesIntro": "إمبي يتضمن الدعم التلقائي حسابات المستخدمين، ما يتيح لكل مستخدم أن يحفظ إعدادات العرض الخاصة وحالات تشغيل الوسائط وخواص الرقابة الأبوية.",
|
||||||
"ValueAlbumCount": "{0} ألبومـ(ات)",
|
"ValueAlbumCount": "{0} ألبومـ(ات)",
|
||||||
|
|
|
@ -508,7 +508,7 @@
|
||||||
"NewEpisodes": "Нови епизоди",
|
"NewEpisodes": "Нови епизоди",
|
||||||
"NewEpisodesOnly": "Само нови епизоди",
|
"NewEpisodesOnly": "Само нови епизоди",
|
||||||
"News": "Новини",
|
"News": "Новини",
|
||||||
"NoNextUpItemsMessage": "Нищо не е намерено. Започнете да гледате вашите предавания!",
|
"MessageNoNextUpItems": "Нищо не е намерено. Започнете да гледате вашите предавания!",
|
||||||
"NoSubtitleSearchResultsFound": "Няма намерени резултати.",
|
"NoSubtitleSearchResultsFound": "Няма намерени резултати.",
|
||||||
"NoSubtitles": "Без",
|
"NoSubtitles": "Без",
|
||||||
"None": "Нищо",
|
"None": "Нищо",
|
||||||
|
@ -613,7 +613,7 @@
|
||||||
"OriginalAirDateValue": "Дата на първоначално излъчване: {0}",
|
"OriginalAirDateValue": "Дата на първоначално излъчване: {0}",
|
||||||
"Overview": "Обобщение",
|
"Overview": "Обобщение",
|
||||||
"ParentalRating": "Родителска оценка",
|
"ParentalRating": "Родителска оценка",
|
||||||
"PasswordResetHeader": "Зануляване на паролата",
|
"HeaderResetPassword": "Зануляване на паролата",
|
||||||
"People": "Хора",
|
"People": "Хора",
|
||||||
"Photos": "Снимки",
|
"Photos": "Снимки",
|
||||||
"PictureInPicture": "Картина в картина",
|
"PictureInPicture": "Картина в картина",
|
||||||
|
@ -748,7 +748,7 @@
|
||||||
"TrackCount": "{0} песни",
|
"TrackCount": "{0} песни",
|
||||||
"Trailers": "Трейлъри",
|
"Trailers": "Трейлъри",
|
||||||
"Tuesday": "Вторник",
|
"Tuesday": "Вторник",
|
||||||
"UninstallPluginHeader": "Деинсталиране на приставката",
|
"HeaderUninstallPlugin": "Деинсталиране на приставката",
|
||||||
"Unmute": "Без заглушаване",
|
"Unmute": "Без заглушаване",
|
||||||
"Unplayed": "Непускано",
|
"Unplayed": "Непускано",
|
||||||
"Upload": "Качване",
|
"Upload": "Качване",
|
||||||
|
@ -841,7 +841,7 @@
|
||||||
"OptionResElement": "рес. елемент",
|
"OptionResElement": "рес. елемент",
|
||||||
"ButtonChangeServer": "Смяна на сървър",
|
"ButtonChangeServer": "Смяна на сървър",
|
||||||
"ButtonAddImage": "Добавяне на изображение",
|
"ButtonAddImage": "Добавяне на изображение",
|
||||||
"BrowsePluginCatalogMessage": "За да видите наличните добавки, прегледайте каталога с добавките.",
|
"MessageBrowsePluginCatalog": "За да видите наличните добавки, прегледайте каталога с добавките.",
|
||||||
"Box": "Кутия",
|
"Box": "Кутия",
|
||||||
"AlwaysPlaySubtitlesHelp": "Поднадписите, съвпадащи с езика от настройките, ще се зареждат, независимо от езика на аудио то.",
|
"AlwaysPlaySubtitlesHelp": "Поднадписите, съвпадащи с езика от настройките, ще се зареждат, независимо от езика на аудио то.",
|
||||||
"BookLibraryHelp": "Поддържат се аудио книги такива съдържащи текст. Проверете ръководството за наименуване {1} на книги {0}.",
|
"BookLibraryHelp": "Поддържат се аудио книги такива съдържащи текст. Проверете ръководството за наименуване {1} на книги {0}.",
|
||||||
|
@ -882,7 +882,7 @@
|
||||||
"CinemaModeConfigurationHelp": "Режимът на кино носи театрално изживяване направо във вашата всекидневна с възможност за пускане на трейлъри и персонализирани интродукции преди основния филм.",
|
"CinemaModeConfigurationHelp": "Режимът на кино носи театрално изживяване направо във вашата всекидневна с възможност за пускане на трейлъри и персонализирани интродукции преди основния филм.",
|
||||||
"ChangingMetadataImageSettingsNewContent": "Промените в настройките за изтегляне на метаданни или изображения ще се прилагат само за ново съдържание, добавено към вашата библиотека. За да приложите промените към съществуващите заглавия, ще трябва да обновите метаданните им ръчно.",
|
"ChangingMetadataImageSettingsNewContent": "Промените в настройките за изтегляне на метаданни или изображения ще се прилагат само за ново съдържание, добавено към вашата библиотека. За да приложите промените към съществуващите заглавия, ще трябва да обновите метаданните им ръчно.",
|
||||||
"DefaultMetadataLangaugeDescription": "Това са настройки по подразбиране и могат да се променят на база библиотека.",
|
"DefaultMetadataLangaugeDescription": "Това са настройки по подразбиране и могат да се променят на база библиотека.",
|
||||||
"DefaultErrorMessage": "Възникна грешка при изпълнение на заявката. Моля опитайте по-късно.",
|
"ErrorDefault": "Възникна грешка при изпълнение на заявката. Моля опитайте по-късно.",
|
||||||
"CustomDlnaProfilesHelp": "Създаване на персонализиран профил за целево устройство или заменяне на системния профил.",
|
"CustomDlnaProfilesHelp": "Създаване на персонализиран профил за целево устройство или заменяне на системния профил.",
|
||||||
"CopyStreamURL": "Копиране URL на стрийма",
|
"CopyStreamURL": "Копиране URL на стрийма",
|
||||||
"CopyStreamURLError": "Възникна грешка при копиране на URL.",
|
"CopyStreamURLError": "Възникна грешка при копиране на URL.",
|
||||||
|
@ -903,7 +903,7 @@
|
||||||
"ButtonToggleContextMenu": "Повече",
|
"ButtonToggleContextMenu": "Повече",
|
||||||
"ErrorSavingTvProvider": "Има проблем със запазването на ТВ доставчика.Убедете се ,че е достъпен и опитайте отново.",
|
"ErrorSavingTvProvider": "Има проблем със запазването на ТВ доставчика.Убедете се ,че е достъпен и опитайте отново.",
|
||||||
"ErrorPleaseSelectLineup": "Моля изберете списък и опитайте отново.Ако няма налични списъци се убедете ,че името,паролата и пощенския код са точни.",
|
"ErrorPleaseSelectLineup": "Моля изберете списък и опитайте отново.Ако няма налични списъци се убедете ,че името,паролата и пощенския код са точни.",
|
||||||
"ErrorMessageStartHourGreaterThanEnd": "Времето за край трябва да бъде по-голямо от началното време.",
|
"ErrorStartHourGreaterThanEnd": "Времето за край трябва да бъде по-голямо от началното време.",
|
||||||
"ErrorGettingTvLineups": "Има проблем при опита да бъдат свалени списъци с ТВ.Убедете се ,че информацията е правилна и опитайте отново.",
|
"ErrorGettingTvLineups": "Има проблем при опита да бъдат свалени списъци с ТВ.Убедете се ,че информацията е правилна и опитайте отново.",
|
||||||
"ErrorDeletingItem": "Има проблем при опита да бъде изтрит файла от сървъра.Убедете се ,че сървъра има право да трие папки и опитайте отново.",
|
"ErrorDeletingItem": "Има проблем при опита да бъде изтрит файла от сървъра.Убедете се ,че сървъра има право да трие папки и опитайте отново.",
|
||||||
"ErrorAddingXmlTvFile": "Има проблем при достъпа на XMLTV файла.Уверете се ,че е наличен и пробвайте отново.",
|
"ErrorAddingXmlTvFile": "Има проблем при достъпа на XMLTV файла.Уверете се ,че е наличен и пробвайте отново.",
|
||||||
|
@ -1197,8 +1197,8 @@
|
||||||
"LabelProtocolInfo": "Информация за протокола:",
|
"LabelProtocolInfo": "Информация за протокола:",
|
||||||
"LabelPostProcessorArgumentsHelp": "Използвай {path},като път за записване на файла.",
|
"LabelPostProcessorArgumentsHelp": "Използвай {path},като път за записване на файла.",
|
||||||
"LabelPostProcessorArguments": "Аргументи на командния ред след обработка:",
|
"LabelPostProcessorArguments": "Аргументи на командния ред след обработка:",
|
||||||
"EnableBlurhashHelp": "Изображенията, които все още се зареждат, ще се показват чрез функцията\"размито запълване\"",
|
"EnableBlurHashHelp": "Изображенията, които все още се зареждат, ще се показват чрез функцията\"размито запълване\"",
|
||||||
"EnableBlurhash": "Активиране на функцията \"размито запълване\" за изображения",
|
"EnableBlurHash": "Активиране на функцията \"размито запълване\" за изображения",
|
||||||
"UnsupportedPlayback": "Джелифин не може да дешифрира съдържание, защитено с DRM, но въпреки това цялото съдържание ще бъде обработено, включително защитените заглавия. Някои файлове могат да изглеждат напълно черни поради криптиране или други неподдържани функции, например интерактивни заглавия.",
|
"UnsupportedPlayback": "Джелифин не може да дешифрира съдържание, защитено с DRM, но въпреки това цялото съдържание ще бъде обработено, включително защитените заглавия. Някои файлове могат да изглеждат напълно черни поради криптиране или други неподдържани функции, например интерактивни заглавия.",
|
||||||
"OnApplicationStartup": "При стартиране на приложението",
|
"OnApplicationStartup": "При стартиране на приложението",
|
||||||
"EveryXHours": "На всеки {0} часа",
|
"EveryXHours": "На всеки {0} часа",
|
||||||
|
@ -1423,7 +1423,7 @@
|
||||||
"RefreshDialogHelp": "Метаданните се обновяват въз основа на настройките и интернет услугите, които са активирани от таблото за управление на сървъра.",
|
"RefreshDialogHelp": "Метаданните се обновяват въз основа на настройките и интернет услугите, които са активирани от таблото за управление на сървъра.",
|
||||||
"Recordings": "Записи",
|
"Recordings": "Записи",
|
||||||
"RecordingScheduled": "Записът е насрочен.",
|
"RecordingScheduled": "Записът е насрочен.",
|
||||||
"RecordingPathChangeMessage": "Промяната на вашата папка за запис няма да мигрира съществуващите записи от старото местоположение към новото.Необходимо е да направите това ръчно.",
|
"MessageChangeRecordingPath": "Промяната на вашата папка за запис няма да мигрира съществуващите записи от старото местоположение към новото.Необходимо е да направите това ръчно.",
|
||||||
"RecordSeries": "Запиши сериал",
|
"RecordSeries": "Запиши сериал",
|
||||||
"RecommendationStarring": "В главните роли {0}",
|
"RecommendationStarring": "В главните роли {0}",
|
||||||
"RecommendationDirectedBy": "Режисьор {0}",
|
"RecommendationDirectedBy": "Режисьор {0}",
|
||||||
|
@ -1434,7 +1434,7 @@
|
||||||
"PreferEmbeddedEpisodeInfosOverFileNames": "Предпочитай \"вградената\" информация за епизода вместо името на файла",
|
"PreferEmbeddedEpisodeInfosOverFileNames": "Предпочитай \"вградената\" информация за епизода вместо името на файла",
|
||||||
"PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Това използва информацията за епизода от вградените метаданни, ако е налична.",
|
"PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Това използва информацията за епизода от вградените метаданни, ако е налична.",
|
||||||
"PreferEmbeddedTitlesOverFileNamesHelp": "Това определя заглавието по подразбиране, когато няма интернет метаданни или локални метаданни.",
|
"PreferEmbeddedTitlesOverFileNamesHelp": "Това определя заглавието по подразбиране, когато няма интернет метаданни или локални метаданни.",
|
||||||
"PluginInstalledMessage": "Добавката е успешно инсталирана. Джелифин ще трябва да бъде рестартиран, за да влязат в сила промените.",
|
"MessagePluginInstalled": "Добавката е успешно инсталирана. Джелифин ще трябва да бъде рестартиран, за да влязат в сила промените.",
|
||||||
"PleaseSelectTwoItems": "Моля, изберете поне два елемента.",
|
"PleaseSelectTwoItems": "Моля, изберете поне два елемента.",
|
||||||
"PleaseEnterNameOrId": "Моля, въведете име или външен идентификатор.",
|
"PleaseEnterNameOrId": "Моля, въведете име или външен идентификатор.",
|
||||||
"PleaseConfirmPluginInstallation": "Моля, щракнете върху OK, за да потвърдите, че сте прочели горното и искате да продължите с инсталирането на добавката.",
|
"PleaseConfirmPluginInstallation": "Моля, щракнете върху OK, за да потвърдите, че сте прочели горното и искате да продължите с инсталирането на добавката.",
|
||||||
|
@ -1519,7 +1519,7 @@
|
||||||
"OnlyForcedSubtitles": "Само принудително",
|
"OnlyForcedSubtitles": "Само принудително",
|
||||||
"OneChannel": "Един канал",
|
"OneChannel": "Един канал",
|
||||||
"NoSubtitlesHelp": "Субтитрите няма да бъдат заредени по подразбиране. Те все още могат да бъдат включени ръчно по време на възпроизвеждане.",
|
"NoSubtitlesHelp": "Субтитрите няма да бъдат заредени по подразбиране. Те все още могат да бъдат включени ръчно по време на възпроизвеждане.",
|
||||||
"NoPluginConfigurationMessage": "Тази добавка няма настройки за конфигуриране.",
|
"MessageNoPluginConfiguration": "Тази добавка няма настройки за конфигуриране.",
|
||||||
"NoNewDevicesFound": "Не са намерени нови устройства. За да добавите нов тунер, затворете този диалогов прозорец и въведете ръчно информацията за устройството.",
|
"NoNewDevicesFound": "Не са намерени нови устройства. За да добавите нов тунер, затворете този диалогов прозорец и въведете ръчно информацията за устройството.",
|
||||||
"NoCreatedLibraries": "Изглежда, че все още не сте създали библиотеки. {0} Искате ли да ги създадете сега? {1}",
|
"NoCreatedLibraries": "Изглежда, че все още не сте създали библиотеки. {0} Искате ли да ги създадете сега? {1}",
|
||||||
"NextUp": "Следващ по ред",
|
"NextUp": "Следващ по ред",
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
"AspectRatio": "Relació d'aspecte",
|
"AspectRatio": "Relació d'aspecte",
|
||||||
"AttributeNew": "Nou",
|
"AttributeNew": "Nou",
|
||||||
"Audio": "Àudio",
|
"Audio": "Àudio",
|
||||||
"BrowsePluginCatalogMessage": "Consulta el nostre catàleg per veure els complements disponibles.",
|
"MessageBrowsePluginCatalog": "Consulta el nostre catàleg per veure els complements disponibles.",
|
||||||
"ButtonAdd": "Afegeix",
|
"ButtonAdd": "Afegeix",
|
||||||
"ButtonAddMediaLibrary": "Afegir Biblioteca Multimèdia",
|
"ButtonAddMediaLibrary": "Afegir Biblioteca Multimèdia",
|
||||||
"ButtonAddScheduledTaskTrigger": "Afegir Disparador",
|
"ButtonAddScheduledTaskTrigger": "Afegir Disparador",
|
||||||
|
@ -84,7 +84,7 @@
|
||||||
"ConfirmDeletion": "Confirma supressió",
|
"ConfirmDeletion": "Confirma supressió",
|
||||||
"Connect": "Connecta",
|
"Connect": "Connecta",
|
||||||
"Continuing": "Continuant",
|
"Continuing": "Continuant",
|
||||||
"DefaultErrorMessage": "Hi ha hagut un error processant la petició. Intenta-ho més tard si et plau.",
|
"ErrorDefault": "Hi ha hagut un error processant la petició. Intenta-ho més tard si et plau.",
|
||||||
"Delete": "Esborra",
|
"Delete": "Esborra",
|
||||||
"DeleteImage": "Esborra Imatge",
|
"DeleteImage": "Esborra Imatge",
|
||||||
"DeleteImageConfirmation": "Esteu segur que voleu suprimir aquesta imatge?",
|
"DeleteImageConfirmation": "Esteu segur que voleu suprimir aquesta imatge?",
|
||||||
|
@ -490,8 +490,8 @@
|
||||||
"NewCollectionNameExample": "Exemple: Col·leció Star Wars",
|
"NewCollectionNameExample": "Exemple: Col·leció Star Wars",
|
||||||
"NewEpisodes": "Nous episodis",
|
"NewEpisodes": "Nous episodis",
|
||||||
"NewEpisodesOnly": "Només nous episodis",
|
"NewEpisodesOnly": "Només nous episodis",
|
||||||
"NoNextUpItemsMessage": "Cap trobat. Comença a mirar els teus programes!",
|
"MessageNoNextUpItems": "Cap trobat. Comença a mirar els teus programes!",
|
||||||
"NoPluginConfigurationMessage": "Aquest complement no té opcions de configuració.",
|
"MessageNoPluginConfiguration": "Aquest complement no té opcions de configuració.",
|
||||||
"NoSubtitleSearchResultsFound": "No s'han trobat resultats.",
|
"NoSubtitleSearchResultsFound": "No s'han trobat resultats.",
|
||||||
"NoSubtitles": "Sense subtítols",
|
"NoSubtitles": "Sense subtítols",
|
||||||
"None": "Cap",
|
"None": "Cap",
|
||||||
|
@ -708,7 +708,7 @@
|
||||||
"TrackCount": "{0} pistes",
|
"TrackCount": "{0} pistes",
|
||||||
"Tuesday": "Dimarts",
|
"Tuesday": "Dimarts",
|
||||||
"UninstallPluginConfirmation": "Estàs segur que vols desinstal·lar {0}?",
|
"UninstallPluginConfirmation": "Estàs segur que vols desinstal·lar {0}?",
|
||||||
"UninstallPluginHeader": "Desinstal·lar Complement.",
|
"HeaderUninstallPlugin": "Desinstal·lar Complement.",
|
||||||
"Unmute": "De-silencia",
|
"Unmute": "De-silencia",
|
||||||
"Unrated": "Sense valorar",
|
"Unrated": "Sense valorar",
|
||||||
"Up": "Amunt",
|
"Up": "Amunt",
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
"AccessRestrictedTryAgainLater": "Přístup je v současné době omezen. Prosím zkuste to znovu později.",
|
"AccessRestrictedTryAgainLater": "Přístup je v současné době omezen. Prosím zkuste to znovu později.",
|
||||||
"Actor": "Herec",
|
"Actor": "Herec",
|
||||||
"Add": "Přidat",
|
"Add": "Přidat",
|
||||||
"AddItemToCollectionHelp": "Přidat položky do kolekce jejich vyhledáním a použitím pravého tlačítka myši nebo klepnutím na tlačítko menu - přidat do sbírky.",
|
"AddItemToCollectionHelp": "Přidat položky do kolekce jejich vyhledáním a použitím pravého tlačítka myši nebo kliknutím na příslušnou položku v nabídce.",
|
||||||
"AddToCollection": "Přidat do kolekce",
|
"AddToCollection": "Přidat do kolekce",
|
||||||
"AddToPlayQueue": "Přidat do fronty k přehrání",
|
"AddToPlayQueue": "Přidat do fronty k přehrání",
|
||||||
"AddToPlaylist": "Přidat do playlistu",
|
"AddToPlaylist": "Přidat do playlistu",
|
||||||
|
@ -34,7 +34,7 @@
|
||||||
"Books": "Knihy",
|
"Books": "Knihy",
|
||||||
"Box": "Pouzdro",
|
"Box": "Pouzdro",
|
||||||
"BoxRear": "Zadní část pouzdra",
|
"BoxRear": "Zadní část pouzdra",
|
||||||
"BrowsePluginCatalogMessage": "Prohlédněte si náš katalog, kde najdete dostupné zásuvné moduly.",
|
"MessageBrowsePluginCatalog": "Prohlédněte si náš katalog, kde najdete dostupné zásuvné moduly.",
|
||||||
"ButtonAdd": "Přidat",
|
"ButtonAdd": "Přidat",
|
||||||
"ButtonAddMediaLibrary": "Přidat knihovnu médií",
|
"ButtonAddMediaLibrary": "Přidat knihovnu médií",
|
||||||
"ButtonAddScheduledTaskTrigger": "Přidat Spouštěč",
|
"ButtonAddScheduledTaskTrigger": "Přidat Spouštěč",
|
||||||
|
@ -131,7 +131,7 @@
|
||||||
"DatePlayed": "Datum přehrání",
|
"DatePlayed": "Datum přehrání",
|
||||||
"DeathDateValue": "Zemřel: {0}",
|
"DeathDateValue": "Zemřel: {0}",
|
||||||
"Default": "Výchozí",
|
"Default": "Výchozí",
|
||||||
"DefaultErrorMessage": "Došlo k chybě při zpracování požadavku. Prosím zkuste to znovu později.",
|
"ErrorDefault": "Došlo k chybě při zpracování požadavku. Prosím zkuste to znovu později.",
|
||||||
"DefaultMetadataLangaugeDescription": "Toto jsou vaše výchozí hodnoty a lze je přizpůsobit na základě jednotlivých knihoven.",
|
"DefaultMetadataLangaugeDescription": "Toto jsou vaše výchozí hodnoty a lze je přizpůsobit na základě jednotlivých knihoven.",
|
||||||
"DefaultSubtitlesHelp": "Titulky jsou načteny na základě výchozích a vynucených nastavení ve vložených metadatech. Jazykové preference jsou vzaty v úvahu, pokud je k dispozici více možností.",
|
"DefaultSubtitlesHelp": "Titulky jsou načteny na základě výchozích a vynucených nastavení ve vložených metadatech. Jazykové preference jsou vzaty v úvahu, pokud je k dispozici více možností.",
|
||||||
"Delete": "Odstranit",
|
"Delete": "Odstranit",
|
||||||
|
@ -144,7 +144,7 @@
|
||||||
"Desktop": "PC",
|
"Desktop": "PC",
|
||||||
"DeviceAccessHelp": "Platí pouze pro zařízení, která mohou být jednoznačně identifikována. Těmto zařízením nebude bráněno v přístupu. Filtrování přístupu uživatelských zařízení bude bránit v užívání nových zařízení, dokud nebudou schváleny.",
|
"DeviceAccessHelp": "Platí pouze pro zařízení, která mohou být jednoznačně identifikována. Těmto zařízením nebude bráněno v přístupu. Filtrování přístupu uživatelských zařízení bude bránit v užívání nových zařízení, dokud nebudou schváleny.",
|
||||||
"DirectPlaying": "Přímé přehrání",
|
"DirectPlaying": "Přímé přehrání",
|
||||||
"DirectStreamHelp1": "Médium je kompatibilní se zařízením, pokud jde o rozlišení a typ média (H.264, AC3, atd.), ale je v nekompatibilním kontejneru (.mkv, .avi, .wmv, atd.). Video bude za běhu přebaleno, než bude streamováno do zařízení.",
|
"DirectStreamHelp1": "Médium je kompatibilní se zařízením, pokud jde o rozlišení a typ média (H.264, AC3, atd.), ale je v nekompatibilním kontejneru (.mkv, .avi, .wmv, atd.). Video bude za běhu přebaleno, než bude odesláno do zařízení.",
|
||||||
"DirectStreaming": "Přímé streamování",
|
"DirectStreaming": "Přímé streamování",
|
||||||
"Director": "Režisér",
|
"Director": "Režisér",
|
||||||
"Disc": "Disk",
|
"Disc": "Disk",
|
||||||
|
@ -185,7 +185,7 @@
|
||||||
"ErrorAddingXmlTvFile": "Nastala chyba při přístupu k XMLTV souboru. Ujistěte se, že soubor existuje a zkuste jej znovu otevřít.",
|
"ErrorAddingXmlTvFile": "Nastala chyba při přístupu k XMLTV souboru. Ujistěte se, že soubor existuje a zkuste jej znovu otevřít.",
|
||||||
"ErrorDeletingItem": "Při odstranění položky ze serveru Jellyfin došlo k chybě. Zkontrolujte prosím, zda má server Jellyfin oprávnění k zápisu do složky médií, a zkuste to prosím znovu.",
|
"ErrorDeletingItem": "Při odstranění položky ze serveru Jellyfin došlo k chybě. Zkontrolujte prosím, zda má server Jellyfin oprávnění k zápisu do složky médií, a zkuste to prosím znovu.",
|
||||||
"ErrorGettingTvLineups": "Došlo k chybě při stahování TV sestav. Ujistěte se prosím, že zadané informace jsou správné a zkuste to znovu.",
|
"ErrorGettingTvLineups": "Došlo k chybě při stahování TV sestav. Ujistěte se prosím, že zadané informace jsou správné a zkuste to znovu.",
|
||||||
"ErrorMessageStartHourGreaterThanEnd": "Čas ukončení musí být větší než čas startu.",
|
"ErrorStartHourGreaterThanEnd": "Čas ukončení musí být větší než čas startu.",
|
||||||
"ErrorPleaseSelectLineup": "Vyberte prosím sestavu a zkuste to znovu. Pokud nejsou k dispozici žádné sestavy, zkontrolujte, zda je vaše uživatelské jméno, heslo a poštovní směrovací číslo správné.",
|
"ErrorPleaseSelectLineup": "Vyberte prosím sestavu a zkuste to znovu. Pokud nejsou k dispozici žádné sestavy, zkontrolujte, zda je vaše uživatelské jméno, heslo a poštovní směrovací číslo správné.",
|
||||||
"ErrorSavingTvProvider": "Při ukládání poskytovatele TV došlo k chybě. Prosím, ujistěte se, že je přístupný a zkuste to znovu.",
|
"ErrorSavingTvProvider": "Při ukládání poskytovatele TV došlo k chybě. Prosím, ujistěte se, že je přístupný a zkuste to znovu.",
|
||||||
"ExitFullscreen": "Opustit celou obrazovku",
|
"ExitFullscreen": "Opustit celou obrazovku",
|
||||||
|
@ -235,7 +235,7 @@
|
||||||
"HeaderAlert": "Upozornění",
|
"HeaderAlert": "Upozornění",
|
||||||
"HeaderApiKey": "Klíč Api",
|
"HeaderApiKey": "Klíč Api",
|
||||||
"HeaderApiKeys": "Klíče API",
|
"HeaderApiKeys": "Klíče API",
|
||||||
"HeaderApiKeysHelp": "Externí aplikace musí mít klíč k API, aby mohly komunikovat se serverem Jellyfin. Klíče jsou vydávány přihlášením k účtu Jellyfin nebo ruční žádostí o klíč.",
|
"HeaderApiKeysHelp": "Externí aplikace musí mít klíč k API, aby mohly komunikovat se serverem. Klíče jsou vydávány přihlášením k běžnému uživatelskému účtu nebo ruční žádostí o klíč.",
|
||||||
"HeaderApp": "Aplikace",
|
"HeaderApp": "Aplikace",
|
||||||
"HeaderAudioBooks": "Audio knihy",
|
"HeaderAudioBooks": "Audio knihy",
|
||||||
"HeaderAudioSettings": "Nastavení zvuku",
|
"HeaderAudioSettings": "Nastavení zvuku",
|
||||||
|
@ -341,7 +341,7 @@
|
||||||
"HeaderPreferredMetadataLanguage": "Preferovaný jazyk metadat",
|
"HeaderPreferredMetadataLanguage": "Preferovaný jazyk metadat",
|
||||||
"HeaderProfile": "Profil",
|
"HeaderProfile": "Profil",
|
||||||
"HeaderProfileInformation": "Informace o profilu",
|
"HeaderProfileInformation": "Informace o profilu",
|
||||||
"HeaderProfileServerSettingsHelp": "Tyto hodnoty určují, jak se server Jellyfin bude zobrazovat v zařízení.",
|
"HeaderProfileServerSettingsHelp": "Tyto hodnoty určují, jak se server bude zobrazovat klientům.",
|
||||||
"HeaderRecentlyPlayed": "Naposledy přehráváno",
|
"HeaderRecentlyPlayed": "Naposledy přehráváno",
|
||||||
"HeaderRecordingOptions": "Nastavení nahrávání",
|
"HeaderRecordingOptions": "Nastavení nahrávání",
|
||||||
"HeaderRecordingPostProcessing": "Následné zpracování nahrávek",
|
"HeaderRecordingPostProcessing": "Následné zpracování nahrávek",
|
||||||
|
@ -358,13 +358,13 @@
|
||||||
"HeaderSecondsValue": "{0} sekund",
|
"HeaderSecondsValue": "{0} sekund",
|
||||||
"HeaderSelectCertificatePath": "Vyber cestu k certifikátu",
|
"HeaderSelectCertificatePath": "Vyber cestu k certifikátu",
|
||||||
"HeaderSelectMetadataPath": "Vyberte cestu k metadatům",
|
"HeaderSelectMetadataPath": "Vyberte cestu k metadatům",
|
||||||
"HeaderSelectMetadataPathHelp": "Výběr nebo zadání cesty, kde chcete uložit metadata. Složka musí být zapisovatelná.",
|
"HeaderSelectMetadataPathHelp": "Procházejte nebo zadejte cestu, kde chcete uložit metadata. Složka musí být zapisovatelná.",
|
||||||
"HeaderSelectPath": "Vybrat složku",
|
"HeaderSelectPath": "Vybrat složku",
|
||||||
"HeaderSelectServer": "Vyber Server",
|
"HeaderSelectServer": "Vyber Server",
|
||||||
"HeaderSelectServerCachePath": "Vyber složku pro vyrovnávací paměť serveru",
|
"HeaderSelectServerCachePath": "Vyber složku pro vyrovnávací paměť serveru",
|
||||||
"HeaderSelectServerCachePathHelp": "Vyberte nebo zadejte složku vyrovnávací paměti souborů. Složka musí být zapisovatelná.",
|
"HeaderSelectServerCachePathHelp": "Vyberte nebo zadejte složku vyrovnávací paměti souborů. Složka musí být zapisovatelná.",
|
||||||
"HeaderSelectTranscodingPath": "Zvolte dočasnou složku pro překódovávání médií",
|
"HeaderSelectTranscodingPath": "Zvolte dočasnou složku pro překódovávání médií",
|
||||||
"HeaderSelectTranscodingPathHelp": "Vyberte nebo zadejte složku pro dočasné soubory překódování. Složka musí být zapisovatelná.",
|
"HeaderSelectTranscodingPathHelp": "Vyberte nebo zadejte složku pro soubory překódování. Složka musí být zapisovatelná.",
|
||||||
"HeaderSendMessage": "Poslat zprávu",
|
"HeaderSendMessage": "Poslat zprávu",
|
||||||
"HeaderSeries": "Seriál",
|
"HeaderSeries": "Seriál",
|
||||||
"HeaderSeriesOptions": "Nastavení seriálu",
|
"HeaderSeriesOptions": "Nastavení seriálu",
|
||||||
|
@ -410,8 +410,8 @@
|
||||||
"Home": "Domů",
|
"Home": "Domů",
|
||||||
"Identify": "Identifikovat",
|
"Identify": "Identifikovat",
|
||||||
"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": "Jen kanály označené jako oblíbené na zařízení tuneru budou importovány.",
|
||||||
"ImportMissingEpisodesHelp": "Informace o chybějících epizodách budou importovány do databáze Jellyfin a zobrazí se u sezón a seriálů. Skenování knihovny se tím může značně prodloužit.",
|
"ImportMissingEpisodesHelp": "Informace o chybějících epizodách budou importovány do databáze a zobrazí se u sezón a seriálů. Skenování knihovny se tím může značně prodloužit.",
|
||||||
"InstallingPackage": "Instalace {0} (Verze {1})",
|
"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",
|
||||||
|
@ -441,14 +441,14 @@
|
||||||
"LabelAppName": "Název aplikace",
|
"LabelAppName": "Název aplikace",
|
||||||
"LabelAppNameExample": "Příklad: Sickbeard, Sonarr",
|
"LabelAppNameExample": "Příklad: Sickbeard, Sonarr",
|
||||||
"LabelArtists": "Umělci:",
|
"LabelArtists": "Umělci:",
|
||||||
"LabelArtistsHelp": "Odděl pomocí ;",
|
"LabelArtistsHelp": "Více interpretů se odděluje pomocí středníku.",
|
||||||
"LabelAudio": "Zvuk",
|
"LabelAudio": "Zvuk",
|
||||||
"LabelAudioLanguagePreference": "Preferovaný jazyk zvuku:",
|
"LabelAudioLanguagePreference": "Preferovaný jazyk zvuku:",
|
||||||
"LabelBindToLocalNetworkAddress": "Vázat na místní síťovou adresu:",
|
"LabelBindToLocalNetworkAddress": "Vázat na místní síťovou adresu:",
|
||||||
"LabelBindToLocalNetworkAddressHelp": "Volitelné. Změní místní IP adresu, na kterou se váže server HTTP. Pokud je ponecháno prázdné, server bude svázán se všemi dostupnými adresami. Změna této hodnoty vyžaduje restartování serveru Jellyfin.",
|
"LabelBindToLocalNetworkAddressHelp": "Změní místní IP adresu serveru HTTP. Pokud je ponecháno prázdné, server bude svázán se všemi dostupnými adresami. Změna této hodnoty vyžaduje restartování serveru Jellyfin.",
|
||||||
"LabelBirthDate": "Datum narození:",
|
"LabelBirthDate": "Datum narození:",
|
||||||
"LabelBirthYear": "Rok narození:",
|
"LabelBirthYear": "Rok narození:",
|
||||||
"LabelBlastMessageInterval": "Doba zobrazení zprávy (v sekundách)",
|
"LabelBlastMessageInterval": "Doba zobrazení zprávy",
|
||||||
"LabelBlastMessageIntervalHelp": "Určuje dobu trvání v sekundách mezi zobrazením aktuálních zpráv.",
|
"LabelBlastMessageIntervalHelp": "Určuje dobu trvání v sekundách mezi zobrazením aktuálních zpráv.",
|
||||||
"LabelCachePath": "Složka pro cache:",
|
"LabelCachePath": "Složka pro cache:",
|
||||||
"LabelCachePathHelp": "Zadejte vlastní umístění pro serverové dočasné soubory, jako jsou obrázky. Ponechte prázdné, pokud chcete použít výchozí nastavení serveru.",
|
"LabelCachePathHelp": "Zadejte vlastní umístění pro serverové dočasné soubory, jako jsou obrázky. Ponechte prázdné, pokud chcete použít výchozí nastavení serveru.",
|
||||||
|
@ -461,7 +461,7 @@
|
||||||
"LabelCriticRating": "Hodnocení kritiků:",
|
"LabelCriticRating": "Hodnocení kritiků:",
|
||||||
"LabelCurrentPassword": "Aktuální heslo:",
|
"LabelCurrentPassword": "Aktuální heslo:",
|
||||||
"LabelCustomCss": "Vlastní CSS:",
|
"LabelCustomCss": "Vlastní CSS:",
|
||||||
"LabelCustomCssHelp": "Aplikovat vaše vlastní styly do webového rozhraní.",
|
"LabelCustomCssHelp": "Aplikovat vaše vlastní styly webového rozhraní.",
|
||||||
"LabelCustomDeviceDisplayName": "Jméno pro zobrazení:",
|
"LabelCustomDeviceDisplayName": "Jméno pro zobrazení:",
|
||||||
"LabelCustomDeviceDisplayNameHelp": "Nahradit vlastním názvem zobrazení nebo ponechte prázdné, aby název byl určen zařízením.",
|
"LabelCustomDeviceDisplayNameHelp": "Nahradit vlastním názvem zobrazení nebo ponechte prázdné, aby název byl určen zařízením.",
|
||||||
"LabelCustomRating": "Vlastní hodnocení:",
|
"LabelCustomRating": "Vlastní hodnocení:",
|
||||||
|
@ -495,16 +495,16 @@
|
||||||
"LabelEnableAutomaticPortMapHelp": "Automaticky zpřístupní port na vašem routeru pomocí technologie UPnP. Nemusí fungovat u některých routerů. Změny se projeví až po restartování serveru.",
|
"LabelEnableAutomaticPortMapHelp": "Automaticky zpřístupní port na vašem routeru pomocí technologie UPnP. Nemusí fungovat u některých routerů. Změny se projeví až po restartování serveru.",
|
||||||
"LabelEnableBlastAliveMessages": "Vytroubit zprávu do světa",
|
"LabelEnableBlastAliveMessages": "Vytroubit zprávu do světa",
|
||||||
"LabelEnableBlastAliveMessagesHelp": "Tuto možnost povolte, pokud není server zjistitelný jinými UPnP zařízeními v síti.",
|
"LabelEnableBlastAliveMessagesHelp": "Tuto možnost povolte, pokud není server zjistitelný jinými UPnP zařízeními v síti.",
|
||||||
"LabelEnableDlnaClientDiscoveryInterval": "Čas pro vyhledání klienta (sekund)",
|
"LabelEnableDlnaClientDiscoveryInterval": "Interval pro vyhledání klienta",
|
||||||
"LabelEnableDlnaClientDiscoveryIntervalHelp": "Určuje interval mezi vyhledáváním SSDP, které Jellyfin provádí.",
|
"LabelEnableDlnaClientDiscoveryIntervalHelp": "Určuje interval mezi vyhledáváním SSDP, které Jellyfin provádí.",
|
||||||
"LabelEnableDlnaDebugLogging": "Povolit DLNA protokolování (pro ladění)",
|
"LabelEnableDlnaDebugLogging": "Povolit DLNA protokolování (pro ladění)",
|
||||||
"LabelEnableDlnaDebugLoggingHelp": "Vytváří velké soubory se záznamy a doporučuje se používat pouze pro potřeby odstraňování problémů.",
|
"LabelEnableDlnaDebugLoggingHelp": "Vytváří velké soubory se záznamy a doporučuje se používat pouze pro potřeby odstraňování problémů.",
|
||||||
"LabelEnableDlnaPlayTo": "Povolit DLNA přehrávání",
|
"LabelEnableDlnaPlayTo": "Povolit DLNA přehrávání",
|
||||||
"LabelEnableDlnaPlayToHelp": "Umí detekovat zařízení v rámci vaší sítě a nabízí možnost jeho dálkového ovládání.",
|
"LabelEnableDlnaPlayToHelp": "Umí detekovat zařízení v rámci vaší sítě a nabízí možnost jejich dálkového ovládání.",
|
||||||
"LabelEnableDlnaServer": "Povolit DLNA server",
|
"LabelEnableDlnaServer": "Povolit DLNA server",
|
||||||
"LabelEnableDlnaServerHelp": "Umožňuje zařízením UPnP v síti procházet a přehrávat obsah.",
|
"LabelEnableDlnaServerHelp": "Umožňuje zařízením UPnP v síti procházet a přehrávat obsah.",
|
||||||
"LabelEnableRealtimeMonitor": "Povolit sledování v reálném čase",
|
"LabelEnableRealtimeMonitor": "Povolit sledování v reálném čase",
|
||||||
"LabelEnableRealtimeMonitorHelp": "Změny budou zpracovány okamžitě, v podporovaných souborových systémech.",
|
"LabelEnableRealtimeMonitorHelp": "V podporovaných souborových systémech budou změny zpracovány okamžitě.",
|
||||||
"LabelEnableSingleImageInDidlLimit": "Limit na jednotlivé vložení obrázku",
|
"LabelEnableSingleImageInDidlLimit": "Limit na jednotlivé vložení obrázku",
|
||||||
"LabelEnableSingleImageInDidlLimitHelp": "Některá zařízení nebudou videa zobrazovat správně, pokud je více obrazů uloženo v DIDL.",
|
"LabelEnableSingleImageInDidlLimitHelp": "Některá zařízení nebudou videa zobrazovat správně, pokud je více obrazů uloženo v DIDL.",
|
||||||
"LabelEndDate": "Datum ukončení:",
|
"LabelEndDate": "Datum ukončení:",
|
||||||
|
@ -521,14 +521,14 @@
|
||||||
"LabelFormat": "Formát:",
|
"LabelFormat": "Formát:",
|
||||||
"LabelFriendlyName": "Přívětivý název:",
|
"LabelFriendlyName": "Přívětivý název:",
|
||||||
"LabelGroupMoviesIntoCollections": "Seskupit filmy do kolekcí",
|
"LabelGroupMoviesIntoCollections": "Seskupit filmy do kolekcí",
|
||||||
"LabelGroupMoviesIntoCollectionsHelp": "Při zobrazení seznamů filmu, budou filmy patřící do kolekce, zobrazeny jako jedna položka.",
|
"LabelGroupMoviesIntoCollectionsHelp": "Při zobrazení seznamu filmů budou filmy v kolekci zobrazeny jako jedna položka.",
|
||||||
"LabelH264Crf": "H264 kódování CRF:",
|
"LabelH264Crf": "H264 kódování CRF:",
|
||||||
"LabelEncoderPreset": "Přednastavení H264 kódování:",
|
"LabelEncoderPreset": "Přednastavení H264 kódování:",
|
||||||
"LabelHardwareAccelerationType": "Hardwarová akcelerace:",
|
"LabelHardwareAccelerationType": "Hardwarová akcelerace:",
|
||||||
"LabelHardwareAccelerationTypeHelp": "Hardwarová akcelerace vyžaduje další konfiguraci.",
|
"LabelHardwareAccelerationTypeHelp": "Hardwarová akcelerace vyžaduje další konfiguraci.",
|
||||||
"LabelHomeScreenSectionValue": "Sekce domovské obrazovky {0}:",
|
"LabelHomeScreenSectionValue": "Sekce domovské obrazovky {0}:",
|
||||||
"LabelHttpsPort": "Lokální HTTPS port:",
|
"LabelHttpsPort": "Lokální HTTPS port:",
|
||||||
"LabelHttpsPortHelp": "Číslo portu TCP, ke kterému by se měl HTTPS server Jellyfin připojit.",
|
"LabelHttpsPortHelp": "Číslo portu TCP serveru HTTPS.",
|
||||||
"LabelIconMaxHeight": "Maximální výška ikon:",
|
"LabelIconMaxHeight": "Maximální výška ikon:",
|
||||||
"LabelIconMaxHeightHelp": "Maximální rozlišení ikon nabízené prostřednictvím upnp:icon.",
|
"LabelIconMaxHeightHelp": "Maximální rozlišení ikon nabízené prostřednictvím upnp:icon.",
|
||||||
"LabelIconMaxWidth": "Maximální šířka ikon:",
|
"LabelIconMaxWidth": "Maximální šířka ikon:",
|
||||||
|
@ -552,7 +552,7 @@
|
||||||
"LabelLanguage": "Jazyk:",
|
"LabelLanguage": "Jazyk:",
|
||||||
"LabelLineup": "V pořadí:",
|
"LabelLineup": "V pořadí:",
|
||||||
"LabelLocalHttpServerPortNumber": "Lokální HTTP port:",
|
"LabelLocalHttpServerPortNumber": "Lokální HTTP port:",
|
||||||
"LabelLocalHttpServerPortNumberHelp": "Číslo portu TCP, ke kterému by se měl HTTP server Jellyfin připojit.",
|
"LabelLocalHttpServerPortNumberHelp": "Číslo portu TCP HTTP serveru.",
|
||||||
"LabelLockItemToPreventChanges": "Uzamknout položku pro zabránění budoucích změn",
|
"LabelLockItemToPreventChanges": "Uzamknout položku pro zabránění budoucích změn",
|
||||||
"LabelLoginDisclaimer": "Zřeknutí se zodpovědnosti při přihlášení:",
|
"LabelLoginDisclaimer": "Zřeknutí se zodpovědnosti při přihlášení:",
|
||||||
"LabelLoginDisclaimerHelp": "Zpráva, která se zobrazí v dolní části přihlašovací stránky.",
|
"LabelLoginDisclaimerHelp": "Zpráva, která se zobrazí v dolní části přihlašovací stránky.",
|
||||||
|
@ -576,7 +576,7 @@
|
||||||
"LabelMetadataReaders": "Čtečky metadat:",
|
"LabelMetadataReaders": "Čtečky metadat:",
|
||||||
"LabelMetadataReadersHelp": "Seřaďte své preferované lokální zdroje metadat dle priority. První nalezená data budou načtena.",
|
"LabelMetadataReadersHelp": "Seřaďte své preferované lokální zdroje metadat dle priority. První nalezená data budou načtena.",
|
||||||
"LabelMetadataSavers": "Střadatelé metadat:",
|
"LabelMetadataSavers": "Střadatelé metadat:",
|
||||||
"LabelMetadataSaversHelp": "Vyberte formáty souborů pro uložení metadat.",
|
"LabelMetadataSaversHelp": "Vyberte formáty souborů, které chcete použít pro ukládání metadat.",
|
||||||
"LabelMethod": "Metoda:",
|
"LabelMethod": "Metoda:",
|
||||||
"LabelMinBackdropDownloadWidth": "Maximální šířka pro stažení pozadí:",
|
"LabelMinBackdropDownloadWidth": "Maximální šířka pro stažení pozadí:",
|
||||||
"LabelMinResumeDuration": "Minimální doba trvání:",
|
"LabelMinResumeDuration": "Minimální doba trvání:",
|
||||||
|
@ -592,7 +592,7 @@
|
||||||
"LabelMovieCategories": "Filmové kategorie:",
|
"LabelMovieCategories": "Filmové kategorie:",
|
||||||
"LabelMoviePrefix": "Předpona filmu:",
|
"LabelMoviePrefix": "Předpona filmu:",
|
||||||
"LabelMoviePrefixHelp": "Pokud je v názvech filmů použita předpona, zadejte ji sem, aby ji server mohl správně zpracovat.",
|
"LabelMoviePrefixHelp": "Pokud je v názvech filmů použita předpona, zadejte ji sem, aby ji server mohl správně zpracovat.",
|
||||||
"LabelMovieRecordingPath": "Složka pro nahrávání filmů (volitelné):",
|
"LabelMovieRecordingPath": "Umístění pro nahrávání filmů:",
|
||||||
"LabelMusicStreamingTranscodingBitrate": "Datový tok pro překódování hudby:",
|
"LabelMusicStreamingTranscodingBitrate": "Datový tok pro překódování hudby:",
|
||||||
"LabelMusicStreamingTranscodingBitrateHelp": "Zadejte maximální datový tok pro streamování hudby.",
|
"LabelMusicStreamingTranscodingBitrateHelp": "Zadejte maximální datový tok pro streamování hudby.",
|
||||||
"LabelName": "Jméno:",
|
"LabelName": "Jméno:",
|
||||||
|
@ -605,7 +605,7 @@
|
||||||
"LabelNumber": "Číslo:",
|
"LabelNumber": "Číslo:",
|
||||||
"LabelNumberOfGuideDays": "Počet dnů programového průvodce ke stažení:",
|
"LabelNumberOfGuideDays": "Počet dnů programového průvodce ke stažení:",
|
||||||
"LabelNumberOfGuideDaysHelp": "Stažení více dnů televizního průvodce umožňuje naplánovat nahrávání na delší dobu dopředu, ale trvá déle. Automatické nastavení určí počet podle počtu kanálů.",
|
"LabelNumberOfGuideDaysHelp": "Stažení více dnů televizního průvodce umožňuje naplánovat nahrávání na delší dobu dopředu, ale trvá déle. Automatické nastavení určí počet podle počtu kanálů.",
|
||||||
"LabelOptionalNetworkPath": "(Nepovinné) Sdílená síťová složka:",
|
"LabelOptionalNetworkPath": "Sdílená síťová složka:",
|
||||||
"LabelOriginalAspectRatio": "Původní poměr stran:",
|
"LabelOriginalAspectRatio": "Původní poměr stran:",
|
||||||
"LabelOriginalTitle": "Originální název:",
|
"LabelOriginalTitle": "Originální název:",
|
||||||
"LabelOverview": "Přehled:",
|
"LabelOverview": "Přehled:",
|
||||||
|
@ -645,7 +645,7 @@
|
||||||
"LabelRefreshMode": "Mód obnovy:",
|
"LabelRefreshMode": "Mód obnovy:",
|
||||||
"LabelReleaseDate": "Datum vydání:",
|
"LabelReleaseDate": "Datum vydání:",
|
||||||
"LabelRemoteClientBitrateLimit": "Datový tok streamování do Internetu (Mbps):",
|
"LabelRemoteClientBitrateLimit": "Datový tok streamování do Internetu (Mbps):",
|
||||||
"LabelRuntimeMinutes": "Délka (v minutách):",
|
"LabelRuntimeMinutes": "Délka:",
|
||||||
"LabelSaveLocalMetadata": "Uložit přebaly a metadata do složky s médii",
|
"LabelSaveLocalMetadata": "Uložit přebaly a metadata do složky s médii",
|
||||||
"LabelSaveLocalMetadataHelp": "Povolíte-li uložení přebalů a metadat do složky s médii bude možné je jednoduše upravovat.",
|
"LabelSaveLocalMetadataHelp": "Povolíte-li uložení přebalů a metadat do složky s médii bude možné je jednoduše upravovat.",
|
||||||
"LabelScheduledTaskLastRan": "Poslední spuštění {0}, zabralo {1}.",
|
"LabelScheduledTaskLastRan": "Poslední spuštění {0}, zabralo {1}.",
|
||||||
|
@ -657,7 +657,7 @@
|
||||||
"LabelSelectVersionToInstall": "Vyber verzi k instalaci:",
|
"LabelSelectVersionToInstall": "Vyber verzi k instalaci:",
|
||||||
"LabelSendNotificationToUsers": "Odeslat oznámení pro:",
|
"LabelSendNotificationToUsers": "Odeslat oznámení pro:",
|
||||||
"LabelSerialNumber": "Sériové číslo",
|
"LabelSerialNumber": "Sériové číslo",
|
||||||
"LabelSeriesRecordingPath": "Složka pro nahrávání seriálů (volitelné):",
|
"LabelSeriesRecordingPath": "Umístění pro nahrávání seriálů:",
|
||||||
"LabelServerHostHelp": "192.168.1.100:8096 nebo https://mujserver.cz",
|
"LabelServerHostHelp": "192.168.1.100:8096 nebo https://mujserver.cz",
|
||||||
"LabelSkipBackLength": "Délka posunu zpět:",
|
"LabelSkipBackLength": "Délka posunu zpět:",
|
||||||
"LabelSkipForwardLength": "Délka posunu vpřed:",
|
"LabelSkipForwardLength": "Délka posunu vpřed:",
|
||||||
|
@ -717,7 +717,7 @@
|
||||||
"LabelYoureDone": "Hotovo!",
|
"LabelYoureDone": "Hotovo!",
|
||||||
"LabelZipCode": "PSČ:",
|
"LabelZipCode": "PSČ:",
|
||||||
"LabelffmpegPath": "FFmpeg - cesta:",
|
"LabelffmpegPath": "FFmpeg - cesta:",
|
||||||
"LabelffmpegPathHelp": "Cesta k souboru aplikace ffmpeg, nebo složka obsahující aplikaci ffmpeg.",
|
"LabelffmpegPathHelp": "Cesta k souboru aplikace ffmpeg nebo složka obsahující aplikaci ffmpeg.",
|
||||||
"Large": "Velký",
|
"Large": "Velký",
|
||||||
"LatestFromLibrary": "Nejnovější {0}",
|
"LatestFromLibrary": "Nejnovější {0}",
|
||||||
"LearnHowYouCanContribute": "Zjistěte, jak můžete přispět.",
|
"LearnHowYouCanContribute": "Zjistěte, jak můžete přispět.",
|
||||||
|
@ -798,7 +798,7 @@
|
||||||
"MessageUnsetContentHelp": "Obsah je zobrazen pomocí prostých složek. Pro dosažení nejlepších výsledků pomocí správce metadat nastavte typy obsahu pod-složek.",
|
"MessageUnsetContentHelp": "Obsah je zobrazen pomocí prostých složek. Pro dosažení nejlepších výsledků pomocí správce metadat nastavte typy obsahu pod-složek.",
|
||||||
"MessageYouHaveVersionInstalled": "V současné době máte instalovánu verzi {0}.",
|
"MessageYouHaveVersionInstalled": "V současné době máte instalovánu verzi {0}.",
|
||||||
"MetadataManager": "Manažer metadat",
|
"MetadataManager": "Manažer metadat",
|
||||||
"MetadataSettingChangeHelp": "Změna nastavení metadat bude mít vliv na nový obsah, který bude přidáván. Chcete-li aktualizovat stávající obsah, otevřte obrazovku s detailem a klepněte na tlačítko Aktualizovat, nebo proveďte hromadnou aktualizaci pomocí správce metadat.",
|
"MetadataSettingChangeHelp": "Změna nastavení metadat bude mít vliv na obsah, který bude nově přidán v budoucnu. Chcete-li aktualizovat stávající obsah, otevřete obrazovku s podrobnostmi a klikněte na tlačítko Aktualizovat, nebo proveďte hromadnou aktualizaci pomocí správce metadat.",
|
||||||
"MinutesAfter": "minut po",
|
"MinutesAfter": "minut po",
|
||||||
"MinutesBefore": "minut předem",
|
"MinutesBefore": "minut předem",
|
||||||
"Mobile": "Mobilní",
|
"Mobile": "Mobilní",
|
||||||
|
@ -819,8 +819,8 @@
|
||||||
"News": "Zpravodajství",
|
"News": "Zpravodajství",
|
||||||
"Next": "Další",
|
"Next": "Další",
|
||||||
"No": "Ne",
|
"No": "Ne",
|
||||||
"NoNextUpItemsMessage": "Nic nenalezeno. Začněte sledovat Vaše oblíbené seriály!",
|
"MessageNoNextUpItems": "Nic nenalezeno. Začněte sledovat Vaše oblíbené seriály!",
|
||||||
"NoPluginConfigurationMessage": "Tento zásuvný modul nemá žádné nastavení.",
|
"MessageNoPluginConfiguration": "Tento zásuvný modul nemá žádné nastavení.",
|
||||||
"NoSubtitleSearchResultsFound": "Žádné výsledky.",
|
"NoSubtitleSearchResultsFound": "Žádné výsledky.",
|
||||||
"NoSubtitles": "Žádné",
|
"NoSubtitles": "Žádné",
|
||||||
"NoSubtitlesHelp": "Ve výchozím nastavení nebudou titulky načteny. Během přehrávání však mohou být manuálně zapnuty.",
|
"NoSubtitlesHelp": "Ve výchozím nastavení nebudou titulky načteny. Během přehrávání však mohou být manuálně zapnuty.",
|
||||||
|
@ -852,7 +852,7 @@
|
||||||
"OptionAuto": "Automaticky",
|
"OptionAuto": "Automaticky",
|
||||||
"OptionAutomatic": "Automaticky",
|
"OptionAutomatic": "Automaticky",
|
||||||
"OptionAutomaticallyGroupSeries": "Automatické sloučení k seriálu, které jsou ve více složkách",
|
"OptionAutomaticallyGroupSeries": "Automatické sloučení k seriálu, které jsou ve více složkách",
|
||||||
"OptionAutomaticallyGroupSeriesHelp": "Pokud je povoleno, budou díly seriálu uložené ve více adresářích v této knihovně, automaticky sloučeny k jednomu seriálu.",
|
"OptionAutomaticallyGroupSeriesHelp": "Seriály uložené ve více složkách v této knihovně budou automaticky sloučeny do jednoho seriálu.",
|
||||||
"OptionBlockBooks": "Knihy",
|
"OptionBlockBooks": "Knihy",
|
||||||
"OptionBlockChannelContent": "Obsah internetového kanálu",
|
"OptionBlockChannelContent": "Obsah internetového kanálu",
|
||||||
"OptionBlockLiveTvChannels": "Televizní kanály",
|
"OptionBlockLiveTvChannels": "Televizní kanály",
|
||||||
|
@ -871,7 +871,7 @@
|
||||||
"OptionDatePlayed": "Datum přehrání",
|
"OptionDatePlayed": "Datum přehrání",
|
||||||
"OptionDescending": "Sestupně",
|
"OptionDescending": "Sestupně",
|
||||||
"OptionDisableUser": "Zablokovat tohoto uživatele",
|
"OptionDisableUser": "Zablokovat tohoto uživatele",
|
||||||
"OptionDisableUserHelp": "Pokud není povoleno, server nedovolí tomuto uživateli žádné připojení. Existující připojení bude okamžitě přerušeno.",
|
"OptionDisableUserHelp": "Server nedovolí tomuto uživateli žádné připojení. Existující připojení bude okamžitě přerušeno.",
|
||||||
"OptionDislikes": "Nelíbí se",
|
"OptionDislikes": "Nelíbí se",
|
||||||
"OptionDisplayFolderView": "Zobrazit složku s originálním zobrazením složek médií",
|
"OptionDisplayFolderView": "Zobrazit složku s originálním zobrazením složek médií",
|
||||||
"OptionDisplayFolderViewHelp": "Zobrazte složky vedle vašich ostatních knihoven médií. To může být užitečné, pokud si přejete mít prosté zobrazení složky.",
|
"OptionDisplayFolderViewHelp": "Zobrazte složky vedle vašich ostatních knihoven médií. To může být užitečné, pokud si přejete mít prosté zobrazení složky.",
|
||||||
|
@ -879,7 +879,7 @@
|
||||||
"OptionDownloadBackImage": "Zadek",
|
"OptionDownloadBackImage": "Zadek",
|
||||||
"OptionDownloadDiscImage": "Disk",
|
"OptionDownloadDiscImage": "Disk",
|
||||||
"OptionDownloadImagesInAdvance": "Stáhnout obrázky pokročilejším způsobem",
|
"OptionDownloadImagesInAdvance": "Stáhnout obrázky pokročilejším způsobem",
|
||||||
"OptionDownloadImagesInAdvanceHelp": "Ve výchozím nastavení se většina obrázků stahuje pouze na žádost aplikace Jellyfin. Povolením této možnosti dojde ke stažení všech obrázků předem současně s importem nových médií. Může způsobit výrazně delší skenování knihoven.",
|
"OptionDownloadImagesInAdvanceHelp": "Ve výchozím nastavení se většina obrázků stahuje pouze na žádost klienta. Povolením této možnosti dojde ke stažení všech obrázků předem současně s importem nových médií. Může způsobit výrazně delší skenování knihoven.",
|
||||||
"OptionDownloadMenuImage": "Nabídka",
|
"OptionDownloadMenuImage": "Nabídka",
|
||||||
"OptionDownloadPrimaryImage": "Primární",
|
"OptionDownloadPrimaryImage": "Primární",
|
||||||
"OptionDownloadThumbImage": "Miniatura",
|
"OptionDownloadThumbImage": "Miniatura",
|
||||||
|
@ -911,7 +911,7 @@
|
||||||
"OptionHlsSegmentedSubtitles": "Segmentované titulky HLS",
|
"OptionHlsSegmentedSubtitles": "Segmentované titulky HLS",
|
||||||
"OptionHomeVideos": "Fotky",
|
"OptionHomeVideos": "Fotky",
|
||||||
"OptionIgnoreTranscodeByteRangeRequests": "Ignorovat požadavky na překódování rozsahy bajtů",
|
"OptionIgnoreTranscodeByteRangeRequests": "Ignorovat požadavky na překódování rozsahy bajtů",
|
||||||
"OptionIgnoreTranscodeByteRangeRequestsHelp": "Pokud je povoleno, budou tyto žádosti nadále plněny, ale budou ignorovány hlavičky bytových rozsahů.",
|
"OptionIgnoreTranscodeByteRangeRequestsHelp": "Tyto žádosti budou nadále plněny, ale budou ignorovány hlavičky bajtových rozsahů.",
|
||||||
"OptionImdbRating": "Hodnocení IMDb",
|
"OptionImdbRating": "Hodnocení IMDb",
|
||||||
"OptionLikes": "Líbí se",
|
"OptionLikes": "Líbí se",
|
||||||
"OptionMissingEpisode": "Chybějící episody",
|
"OptionMissingEpisode": "Chybějící episody",
|
||||||
|
@ -923,9 +923,9 @@
|
||||||
"OptionOnInterval": "V intervalu",
|
"OptionOnInterval": "V intervalu",
|
||||||
"OptionParentalRating": "Rodičovské hodnocení",
|
"OptionParentalRating": "Rodičovské hodnocení",
|
||||||
"OptionPlainStorageFolders": "Zobrazit všechny složky jako obyčejné složky pro ukládání",
|
"OptionPlainStorageFolders": "Zobrazit všechny složky jako obyčejné složky pro ukládání",
|
||||||
"OptionPlainStorageFoldersHelp": "Je-li povoleno, všechny složky jsou zastoupeny v DIDL jako \"object.container.storageFolder\" místo specifičtějšího typu, jako je například \"object.container.person.musicArtist\".",
|
"OptionPlainStorageFoldersHelp": "Všechny složky jsou prezentovány v DIDL jako \"object.container.storageFolder\" místo konkrétnějšího typu, například \"object.container.person.musicArtist\".",
|
||||||
"OptionPlainVideoItems": "Zobrazit všechna videa jako s obyčejné video položky",
|
"OptionPlainVideoItems": "Zobrazit všechna videa jako s obyčejné video položky",
|
||||||
"OptionPlainVideoItemsHelp": "Je-li povoleno, všechna videa jsou prezentovány v DIDL jako \"object.item.videoItem\" místo specifičtějšího typu, jako je například \"object.item.videoItem.movie\".",
|
"OptionPlainVideoItemsHelp": "Všechna videa jsou prezentována v DIDL jako \"object.item.videoItem\" místo konkrétnějšího typu, například \"object.item.videoItem.movie\".",
|
||||||
"OptionPlayCount": "Počet přehrání",
|
"OptionPlayCount": "Počet přehrání",
|
||||||
"OptionPlayed": "Shlédnuto",
|
"OptionPlayed": "Shlédnuto",
|
||||||
"OptionPremiereDate": "Datum premiéry",
|
"OptionPremiereDate": "Datum premiéry",
|
||||||
|
@ -964,7 +964,7 @@
|
||||||
"PasswordMatchError": "Heslo a potvrzení hesla musí souhlasit.",
|
"PasswordMatchError": "Heslo a potvrzení hesla musí souhlasit.",
|
||||||
"PasswordResetComplete": "Heslo bylo obnoveno.",
|
"PasswordResetComplete": "Heslo bylo obnoveno.",
|
||||||
"PasswordResetConfirmation": "Jste si jisti, že chcete obnovit heslo?",
|
"PasswordResetConfirmation": "Jste si jisti, že chcete obnovit heslo?",
|
||||||
"PasswordResetHeader": "Obnovit heslo",
|
"HeaderResetPassword": "Obnovit heslo",
|
||||||
"PasswordSaved": "Heslo uloženo.",
|
"PasswordSaved": "Heslo uloženo.",
|
||||||
"People": "Lidé",
|
"People": "Lidé",
|
||||||
"PerfectMatch": "Přesná shoda",
|
"PerfectMatch": "Přesná shoda",
|
||||||
|
@ -1004,11 +1004,11 @@
|
||||||
"Record": "Nahrávat",
|
"Record": "Nahrávat",
|
||||||
"RecordSeries": "Nahrát série",
|
"RecordSeries": "Nahrát série",
|
||||||
"RecordingCancelled": "Nahrávání zrušeno.",
|
"RecordingCancelled": "Nahrávání zrušeno.",
|
||||||
"RecordingPathChangeMessage": "Změna záznamové složky automaticky nepřesune stávající záznamy ze starého umístění do nového. Budete muset přesunout ručně, pokud je to žádoucí.",
|
"MessageChangeRecordingPath": "Změna záznamové složky automaticky nepřesune stávající záznamy ze starého umístění do nového. Budete muset přesunout ručně, pokud je to žádoucí.",
|
||||||
"RecordingScheduled": "Plán nahrávání.",
|
"RecordingScheduled": "Plán nahrávání.",
|
||||||
"Recordings": "Nahrávky",
|
"Recordings": "Nahrávky",
|
||||||
"Refresh": "Obnovit",
|
"Refresh": "Obnovit",
|
||||||
"RefreshDialogHelp": "Metadata se aktualizují na základě nastavení a internetových služeb, které jsou povoleny na nástěnce serveru Jellyfin.",
|
"RefreshDialogHelp": "Metadata se aktualizují na základě nastavení a internetových služeb, které jsou povoleny na nástěnce.",
|
||||||
"RefreshMetadata": "Obnovit metadata",
|
"RefreshMetadata": "Obnovit metadata",
|
||||||
"RefreshQueued": "Obnovení zařazeno.",
|
"RefreshQueued": "Obnovení zařazeno.",
|
||||||
"ReleaseDate": "Datum vydání",
|
"ReleaseDate": "Datum vydání",
|
||||||
|
@ -1131,7 +1131,7 @@
|
||||||
"Transcoding": "Překódování",
|
"Transcoding": "Překódování",
|
||||||
"Tuesday": "Úterý",
|
"Tuesday": "Úterý",
|
||||||
"UninstallPluginConfirmation": "Jste si jisti, že chcete odinstalovat {0}?",
|
"UninstallPluginConfirmation": "Jste si jisti, že chcete odinstalovat {0}?",
|
||||||
"UninstallPluginHeader": "Odinstalovat zásuvný modul",
|
"HeaderUninstallPlugin": "Odinstalovat zásuvný modul",
|
||||||
"Unmute": "Povolit zvuk",
|
"Unmute": "Povolit zvuk",
|
||||||
"Unrated": "Nehodnoceno",
|
"Unrated": "Nehodnoceno",
|
||||||
"Up": "Nahoru",
|
"Up": "Nahoru",
|
||||||
|
@ -1205,7 +1205,7 @@
|
||||||
"Depressed": "Vytlačené",
|
"Depressed": "Vytlačené",
|
||||||
"Descending": "Klesající",
|
"Descending": "Klesající",
|
||||||
"DetectingDevices": "Hledání zařízení",
|
"DetectingDevices": "Hledání zařízení",
|
||||||
"DirectStreamHelp2": "Přímé streamování souboru používá velmi malý výkon bez ztráty kvality videa.",
|
"DirectStreamHelp2": "Přímé streamování souboru vyžaduje velmi malý výkon téměř bez ztráty kvality videa.",
|
||||||
"Directors": "Režiséři",
|
"Directors": "Režiséři",
|
||||||
"Disabled": "Vypnuto",
|
"Disabled": "Vypnuto",
|
||||||
"DisplayInMyMedia": "Zobrazit na domovské obrazovce",
|
"DisplayInMyMedia": "Zobrazit na domovské obrazovce",
|
||||||
|
@ -1237,7 +1237,7 @@
|
||||||
"HeaderFavoriteVideos": "Oblíbená videa",
|
"HeaderFavoriteVideos": "Oblíbená videa",
|
||||||
"HeaderFetcherSettings": "Nastavení načítání",
|
"HeaderFetcherSettings": "Nastavení načítání",
|
||||||
"HeaderImageOptions": "Volby obrázku",
|
"HeaderImageOptions": "Volby obrázku",
|
||||||
"HeaderKodiMetadataHelp": "Chcete-li povolit nebo zakázat Nfo metadata, upravte nastavení knihovny v sekci ukládání metadat.",
|
"HeaderKodiMetadataHelp": "Chcete-li povolit nebo zakázat metadata v souborech NFO, upravte nastavení knihovny v sekci ukládání metadat.",
|
||||||
"HeaderLiveTV": "Televize",
|
"HeaderLiveTV": "Televize",
|
||||||
"HeaderLiveTv": "Televize",
|
"HeaderLiveTv": "Televize",
|
||||||
"HeaderLiveTvTunerSetup": "Nastavení televizního tuneru",
|
"HeaderLiveTvTunerSetup": "Nastavení televizního tuneru",
|
||||||
|
@ -1305,7 +1305,7 @@
|
||||||
"MediaInfoStreamTypeAudio": "Audio",
|
"MediaInfoStreamTypeAudio": "Audio",
|
||||||
"MediaInfoStreamTypeData": "Data",
|
"MediaInfoStreamTypeData": "Data",
|
||||||
"MediaInfoStreamTypeVideo": "Video",
|
"MediaInfoStreamTypeVideo": "Video",
|
||||||
"AuthProviderHelp": "Vyberte poskytovatele ověřování, který bude použit k ověření hesla tohoto uživatele.",
|
"AuthProviderHelp": "Vyberte poskytovatele ověření, který bude použit k ověření hesla tohoto uživatele.",
|
||||||
"HeaderFavoriteMovies": "Oblíbená videa",
|
"HeaderFavoriteMovies": "Oblíbená videa",
|
||||||
"HeaderFavoriteShows": "Oblíbené seriály",
|
"HeaderFavoriteShows": "Oblíbené seriály",
|
||||||
"HeaderFavoriteEpisodes": "Oblíbené epizody",
|
"HeaderFavoriteEpisodes": "Oblíbené epizody",
|
||||||
|
@ -1313,7 +1313,7 @@
|
||||||
"HeaderFavoriteArtists": "Oblíbení interpreti",
|
"HeaderFavoriteArtists": "Oblíbení interpreti",
|
||||||
"HeaderFavoriteSongs": "Oblíbená hudba",
|
"HeaderFavoriteSongs": "Oblíbená hudba",
|
||||||
"LabelAuthProvider": "Poskytovatel ověření:",
|
"LabelAuthProvider": "Poskytovatel ověření:",
|
||||||
"LabelServerNameHelp": "Tento název bude použit k identifikaci serveru a bude výchozí pro název počítače serveru.",
|
"LabelServerNameHelp": "Tento název bude použit k identifikaci serveru a ve výchozím nastavení bude použit název hostitele serveru.",
|
||||||
"LabelPasswordResetProvider": "Poskytovatel obnovy hesla:",
|
"LabelPasswordResetProvider": "Poskytovatel obnovy hesla:",
|
||||||
"LabelServerName": "Název serveru:",
|
"LabelServerName": "Název serveru:",
|
||||||
"LabelTranscodePath": "Cesta pro překódování:",
|
"LabelTranscodePath": "Cesta pro překódování:",
|
||||||
|
@ -1339,7 +1339,7 @@
|
||||||
"OnlyImageFormats": "Pouze obrazové formáty (VOBSUB, PGS, SUB, atd.)",
|
"OnlyImageFormats": "Pouze obrazové formáty (VOBSUB, PGS, SUB, atd.)",
|
||||||
"Option3D": "3D",
|
"Option3D": "3D",
|
||||||
"OptionAlbum": "Album",
|
"OptionAlbum": "Album",
|
||||||
"OptionAllowMediaPlaybackTranscodingHelp": "Omezení přístupu k překódování může způsobit selhání přehrávání v aplikacích Jellyfin kvůli nepodporovaným formátům médií.",
|
"OptionAllowMediaPlaybackTranscodingHelp": "Omezení přístupu k překódování může způsobit selhání přehrávání v klientech kvůli nepodporovaným formátům médií.",
|
||||||
"OptionAllowSyncTranscoding": "Povolit stahování a synchronizaci médií, které vyžaduje překódování",
|
"OptionAllowSyncTranscoding": "Povolit stahování a synchronizaci médií, které vyžaduje překódování",
|
||||||
"OptionBluray": "Blu-ray",
|
"OptionBluray": "Blu-ray",
|
||||||
"OptionCaptionInfoExSamsung": "CaptionInfoEx (Samsung)",
|
"OptionCaptionInfoExSamsung": "CaptionInfoEx (Samsung)",
|
||||||
|
@ -1357,8 +1357,8 @@
|
||||||
"OptionProtocolHls": "Přímý přenos z internetu",
|
"OptionProtocolHls": "Přímý přenos z internetu",
|
||||||
"OptionProtocolHttp": "HTTP",
|
"OptionProtocolHttp": "HTTP",
|
||||||
"OptionRequirePerfectSubtitleMatchHelp": "Vyžadování dokonalé shody filtruje titulky tak, aby obsahovaly pouze ty, které byly testovány a ověřeny s vaším přesným videosouborem. Zrušení zaškrtnutí tohoto políčka zvýší pravděpodobnost stahování titulků, ale zvýší pravděpodobnost chybného nebo nesprávného textu titulků.",
|
"OptionRequirePerfectSubtitleMatchHelp": "Vyžadování dokonalé shody filtruje titulky tak, aby obsahovaly pouze ty, které byly testovány a ověřeny s vaším přesným videosouborem. Zrušení zaškrtnutí tohoto políčka zvýší pravděpodobnost stahování titulků, ale zvýší pravděpodobnost chybného nebo nesprávného textu titulků.",
|
||||||
"PasswordResetProviderHelp": "Zvolte poskytovatele resetování hesla, který bude použit, když tento uživatel o něj požádá",
|
"PasswordResetProviderHelp": "Zvolte poskytovatele resetování hesla, který bude použit při žádosti tohoto uživatele o resetování hesla.",
|
||||||
"PluginInstalledMessage": "Zásuvný modul byl úspěšně nainstalován. Server Jellyfin bude nutné restartovat, aby se změny projevily.",
|
"MessagePluginInstalled": "Zásuvný modul byl úspěšně nainstalován. Server Jellyfin bude nutné restartovat, aby se změny projevily.",
|
||||||
"PreferEmbeddedTitlesOverFileNames": "Preferovat vložené názvy nad názvy souborů",
|
"PreferEmbeddedTitlesOverFileNames": "Preferovat vložené názvy nad názvy souborů",
|
||||||
"PreferEmbeddedTitlesOverFileNamesHelp": "Toto určuje výchozí název zobrazení, pokud nejsou k dispozici žádná metadata z internetu nebo místní metadata.",
|
"PreferEmbeddedTitlesOverFileNamesHelp": "Toto určuje výchozí název zobrazení, pokud nejsou k dispozici žádná metadata z internetu nebo místní metadata.",
|
||||||
"Raised": "Vystupující",
|
"Raised": "Vystupující",
|
||||||
|
@ -1499,7 +1499,7 @@
|
||||||
"LabelStable": "Stabilní",
|
"LabelStable": "Stabilní",
|
||||||
"LabelChromecastVersion": "Verze Chromecastu",
|
"LabelChromecastVersion": "Verze Chromecastu",
|
||||||
"ApiKeysCaption": "Seznam povolených API klíčů",
|
"ApiKeysCaption": "Seznam povolených API klíčů",
|
||||||
"LabelEnableHttpsHelp": "Umožní serveru naslouchat na určeném portu HTTPS. K fungování je nutné nakonfigurovat i platný certifikát.",
|
"LabelEnableHttpsHelp": "Naslouchání na uvedeném portu HTTPS. K fungování je nutné nakonfigurovat i platný certifikát.",
|
||||||
"LabelEnableHttps": "Povolit HTTPS",
|
"LabelEnableHttps": "Povolit HTTPS",
|
||||||
"HeaderServerAddressSettings": "Nastavení adresy serveru",
|
"HeaderServerAddressSettings": "Nastavení adresy serveru",
|
||||||
"HeaderRemoteAccessSettings": "Nastavení vzdáleného přístupu",
|
"HeaderRemoteAccessSettings": "Nastavení vzdáleného přístupu",
|
||||||
|
@ -1543,8 +1543,8 @@
|
||||||
"EnableDetailsBanner": "Obrázek detailu",
|
"EnableDetailsBanner": "Obrázek detailu",
|
||||||
"ShowMore": "Zobrazit více",
|
"ShowMore": "Zobrazit více",
|
||||||
"ShowLess": "Zobrazit méně",
|
"ShowLess": "Zobrazit méně",
|
||||||
"EnableBlurhashHelp": "Nenačtené obrázky budou zobrazeny pomocí neurčitých zástupných obrázků",
|
"EnableBlurHashHelp": "Obrázky, které se ještě načítají, budou zobrazeny pomocí jedinečných zástupných obrázků.",
|
||||||
"EnableBlurhash": "Povolit zástupné obrázky",
|
"EnableBlurHash": "Povolit zástupné obrázky",
|
||||||
"ButtonCast": "Přehrát v zařízení",
|
"ButtonCast": "Přehrát v zařízení",
|
||||||
"ButtonSyncPlay": "SyncPlay",
|
"ButtonSyncPlay": "SyncPlay",
|
||||||
"MessageNoGenresAvailable": "Povolit některým poskytovatelům metadat stahovat informace o žánrech z Internetu.",
|
"MessageNoGenresAvailable": "Povolit některým poskytovatelům metadat stahovat informace o žánrech z Internetu.",
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
"BirthPlaceValue": "Fødselssted: {0}",
|
"BirthPlaceValue": "Fødselssted: {0}",
|
||||||
"BookLibraryHelp": "Lyd- og tekstbøger er understøttet. Se {0}guiden til navngivning af bøger{1}.",
|
"BookLibraryHelp": "Lyd- og tekstbøger er understøttet. Se {0}guiden til navngivning af bøger{1}.",
|
||||||
"Browse": "Gennemse",
|
"Browse": "Gennemse",
|
||||||
"BrowsePluginCatalogMessage": "Gennemse vores plugin-katalog for at se tilgængelige plugins.",
|
"MessageBrowsePluginCatalog": "Gennemse vores plugin-katalog for at se tilgængelige plugins.",
|
||||||
"ButtonAdd": "Tilføj",
|
"ButtonAdd": "Tilføj",
|
||||||
"ButtonAddMediaLibrary": "Tilføj Mediebibliotek",
|
"ButtonAddMediaLibrary": "Tilføj Mediebibliotek",
|
||||||
"ButtonAddScheduledTaskTrigger": "Tilføj udløser",
|
"ButtonAddScheduledTaskTrigger": "Tilføj udløser",
|
||||||
|
@ -119,7 +119,7 @@
|
||||||
"Continuing": "Forsættes",
|
"Continuing": "Forsættes",
|
||||||
"CustomDlnaProfilesHelp": "Lav brugerdefinerede profiler til nye enheder eller for at overstyre en systemprofil.",
|
"CustomDlnaProfilesHelp": "Lav brugerdefinerede profiler til nye enheder eller for at overstyre en systemprofil.",
|
||||||
"DeathDateValue": "Dødsdato: {0}",
|
"DeathDateValue": "Dødsdato: {0}",
|
||||||
"DefaultErrorMessage": "Det opstod en fejl ved behandlingen af forespørgslen. Prøv igen senere.",
|
"ErrorDefault": "Det opstod en fejl ved behandlingen af forespørgslen. Prøv igen senere.",
|
||||||
"DefaultMetadataLangaugeDescription": "Dette er dine standarder og kan brugerdefineres på per-biblioteks basis.",
|
"DefaultMetadataLangaugeDescription": "Dette er dine standarder og kan brugerdefineres på per-biblioteks basis.",
|
||||||
"Delete": "Slet",
|
"Delete": "Slet",
|
||||||
"DeleteDeviceConfirmation": "Er du sikker på du ønsker at slette denne enhed? Den vil dukke op igen næste gang en bruger logger ind med den.",
|
"DeleteDeviceConfirmation": "Er du sikker på du ønsker at slette denne enhed? Den vil dukke op igen næste gang en bruger logger ind med den.",
|
||||||
|
@ -154,7 +154,7 @@
|
||||||
"ErrorAddingTunerDevice": "Der opstod en fejl under tilføjelse af tuner-enhed. Kontroller venligst at den er tilgængelig og prøv igen.",
|
"ErrorAddingTunerDevice": "Der opstod en fejl under tilføjelse af tuner-enhed. Kontroller venligst at den er tilgængelig og prøv igen.",
|
||||||
"ErrorAddingXmlTvFile": "Der opstod en fejl under tilgang til XMLTV-filen. Kontroller venligst at filen findes og prøv igen.",
|
"ErrorAddingXmlTvFile": "Der opstod en fejl under tilgang til XMLTV-filen. Kontroller venligst at filen findes og prøv igen.",
|
||||||
"ErrorGettingTvLineups": "Der opstod en fejl under download af TV-opstillinger. Kontroller venligst at dine informationer er korrekte og prøv igen.",
|
"ErrorGettingTvLineups": "Der opstod en fejl under download af TV-opstillinger. Kontroller venligst at dine informationer er korrekte og prøv igen.",
|
||||||
"ErrorMessageStartHourGreaterThanEnd": "Slut tid skal være større end start tid.",
|
"ErrorStartHourGreaterThanEnd": "Slut tid skal være større end start tid.",
|
||||||
"ErrorPleaseSelectLineup": "Vælg venligst en opstilling og prøv igen. Hvis ingen opstillinger er tilgængelige, så kontroller venligst at dit brugernavn, adgangskode og postnummer er korrekt.",
|
"ErrorPleaseSelectLineup": "Vælg venligst en opstilling og prøv igen. Hvis ingen opstillinger er tilgængelige, så kontroller venligst at dit brugernavn, adgangskode og postnummer er korrekt.",
|
||||||
"ErrorSavingTvProvider": "Der opstod en fejl i forsøget på at gemme udbyder. Kontroller venligst at den er tilgængelig og prøv igen.",
|
"ErrorSavingTvProvider": "Der opstod en fejl i forsøget på at gemme udbyder. Kontroller venligst at den er tilgængelig og prøv igen.",
|
||||||
"EveryNDays": "Hver {0} dage",
|
"EveryNDays": "Hver {0} dage",
|
||||||
|
@ -754,8 +754,8 @@
|
||||||
"News": "Nyheder",
|
"News": "Nyheder",
|
||||||
"NextUp": "Næste",
|
"NextUp": "Næste",
|
||||||
"NoNewDevicesFound": "Ingen nye enheder fundet. For at tilføje en ny tuner, luk denne dialog og skriv enhedens informationer manuelt.",
|
"NoNewDevicesFound": "Ingen nye enheder fundet. For at tilføje en ny tuner, luk denne dialog og skriv enhedens informationer manuelt.",
|
||||||
"NoNextUpItemsMessage": "Ingen fundet. Se dine serier!",
|
"MessageNoNextUpItems": "Ingen fundet. Se dine serier!",
|
||||||
"NoPluginConfigurationMessage": "Dette plugin har ingen indstillinger at konfigurere.",
|
"MessageNoPluginConfiguration": "Dette plugin har ingen indstillinger at konfigurere.",
|
||||||
"NoSubtitleSearchResultsFound": "Ingen resultater fundet.",
|
"NoSubtitleSearchResultsFound": "Ingen resultater fundet.",
|
||||||
"NumLocationsValue": "{0} mapper",
|
"NumLocationsValue": "{0} mapper",
|
||||||
"OneChannel": "En kanal",
|
"OneChannel": "En kanal",
|
||||||
|
@ -890,7 +890,7 @@
|
||||||
"PasswordMatchError": "Adgangskode og bekræft adgangskode skal være ens.",
|
"PasswordMatchError": "Adgangskode og bekræft adgangskode skal være ens.",
|
||||||
"PasswordResetComplete": "Adgangskoden er blevet nulstillet.",
|
"PasswordResetComplete": "Adgangskoden er blevet nulstillet.",
|
||||||
"PasswordResetConfirmation": "Er du sikker på at adgangskoden skal nulstilles?",
|
"PasswordResetConfirmation": "Er du sikker på at adgangskoden skal nulstilles?",
|
||||||
"PasswordResetHeader": "Nulstil adgangskode",
|
"HeaderResetPassword": "Nulstil adgangskode",
|
||||||
"PasswordSaved": "Adgangskoden er gemt.",
|
"PasswordSaved": "Adgangskoden er gemt.",
|
||||||
"People": "Personer",
|
"People": "Personer",
|
||||||
"PictureInPicture": "Billede i billede",
|
"PictureInPicture": "Billede i billede",
|
||||||
|
@ -906,7 +906,7 @@
|
||||||
"PleaseEnterNameOrId": "Indtast venligst et navn eller eksternt ID.",
|
"PleaseEnterNameOrId": "Indtast venligst et navn eller eksternt ID.",
|
||||||
"PleaseRestartServerName": "Genstart venligst Jellyfin Server - {0}.",
|
"PleaseRestartServerName": "Genstart venligst Jellyfin Server - {0}.",
|
||||||
"PleaseSelectTwoItems": "Vælg venligst mindst to elementer.",
|
"PleaseSelectTwoItems": "Vælg venligst mindst to elementer.",
|
||||||
"PluginInstalledMessage": "Plugin blev installeret med success. Jellyfin serveren skal genstartes for at aktivere det.",
|
"MessagePluginInstalled": "Plugin blev installeret med success. Jellyfin serveren skal genstartes for at aktivere det.",
|
||||||
"PreferEmbeddedTitlesOverFileNames": "Foretræk indlejrede titler over filnavne",
|
"PreferEmbeddedTitlesOverFileNames": "Foretræk indlejrede titler over filnavne",
|
||||||
"PreferEmbeddedTitlesOverFileNamesHelp": "Dette bestemmer standard visnings titel når ingen internet metadata eller lokal metadata er tilgængelig.",
|
"PreferEmbeddedTitlesOverFileNamesHelp": "Dette bestemmer standard visnings titel når ingen internet metadata eller lokal metadata er tilgængelig.",
|
||||||
"Premieres": "Premiere",
|
"Premieres": "Premiere",
|
||||||
|
@ -923,7 +923,7 @@
|
||||||
"Record": "Optag",
|
"Record": "Optag",
|
||||||
"RecordSeries": "Optag serie",
|
"RecordSeries": "Optag serie",
|
||||||
"RecordingCancelled": "Optagelse annulleret.",
|
"RecordingCancelled": "Optagelse annulleret.",
|
||||||
"RecordingPathChangeMessage": "Ændring af optagelsesmappe migrerer ikke eksisterende optagelser fra den gamle lokation til den nye. Du bliver nød til at flytte dem manuelt, hvis det ønskes.",
|
"MessageChangeRecordingPath": "Ændring af optagelsesmappe migrerer ikke eksisterende optagelser fra den gamle lokation til den nye. Du bliver nød til at flytte dem manuelt, hvis det ønskes.",
|
||||||
"RecordingScheduled": "Optagelse planlagt.",
|
"RecordingScheduled": "Optagelse planlagt.",
|
||||||
"Refresh": "Opdater",
|
"Refresh": "Opdater",
|
||||||
"RefreshDialogHelp": "Metadata opdateres alt efter hvilke indstillinger og internet-servicer der er aktiveret i Jellyfin Server-kontrolpanelet.",
|
"RefreshDialogHelp": "Metadata opdateres alt efter hvilke indstillinger og internet-servicer der er aktiveret i Jellyfin Server-kontrolpanelet.",
|
||||||
|
@ -1034,7 +1034,7 @@
|
||||||
"Tuesday": "Tirsdag",
|
"Tuesday": "Tirsdag",
|
||||||
"TvLibraryHelp": "Gennemgå {0} TV-navneguiden {1}.",
|
"TvLibraryHelp": "Gennemgå {0} TV-navneguiden {1}.",
|
||||||
"UninstallPluginConfirmation": "Er du sikker på du vil afinstallere {0}?",
|
"UninstallPluginConfirmation": "Er du sikker på du vil afinstallere {0}?",
|
||||||
"UninstallPluginHeader": "Afinstaller plugin",
|
"HeaderUninstallPlugin": "Afinstaller plugin",
|
||||||
"Unmute": "Genoptag lyd",
|
"Unmute": "Genoptag lyd",
|
||||||
"Unrated": "Ingen bedømmelse",
|
"Unrated": "Ingen bedømmelse",
|
||||||
"UserAgentHelp": "Angiv en brugerdefineret bruger-agent HTTP-header.",
|
"UserAgentHelp": "Angiv en brugerdefineret bruger-agent HTTP-header.",
|
||||||
|
|
|
@ -46,7 +46,7 @@
|
||||||
"Books": "Bücher",
|
"Books": "Bücher",
|
||||||
"BoxRear": "Box (Rückseite)",
|
"BoxRear": "Box (Rückseite)",
|
||||||
"Browse": "Blättern",
|
"Browse": "Blättern",
|
||||||
"BrowsePluginCatalogMessage": "Durchsuche unsere Bibliothek, um alle verfügbaren Plugins anzuzeigen.",
|
"MessageBrowsePluginCatalog": "Durchsuche unsere Bibliothek, um alle verfügbaren Plugins anzuzeigen.",
|
||||||
"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.",
|
"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",
|
||||||
|
@ -143,7 +143,7 @@
|
||||||
"DatePlayed": "Abgespielt am",
|
"DatePlayed": "Abgespielt am",
|
||||||
"DeathDateValue": "Gestorben: {0}",
|
"DeathDateValue": "Gestorben: {0}",
|
||||||
"Default": "Standard",
|
"Default": "Standard",
|
||||||
"DefaultErrorMessage": "Es gab einen Fehler beim verarbeiten der Anfrage. Bitte versuche es später erneut.",
|
"ErrorDefault": "Es gab einen Fehler beim verarbeiten der Anfrage. Bitte versuche es später erneut.",
|
||||||
"DefaultMetadataLangaugeDescription": "Das sind deine Default-Werte, die bibliotheksspezifisch verändert werden können.",
|
"DefaultMetadataLangaugeDescription": "Das sind deine Default-Werte, die bibliotheksspezifisch verändert werden können.",
|
||||||
"DefaultSubtitlesHelp": "Untertitel werden gemäß der Standard- und Erzwungen-Ansicht aus den eingebetteten Metadaten geladen. Spracheinstellungen werden zur Verfügung gestellt, wenn mehrere Sprachen verfügbar sind.",
|
"DefaultSubtitlesHelp": "Untertitel werden gemäß der Standard- und Erzwungen-Ansicht aus den eingebetteten Metadaten geladen. Spracheinstellungen werden zur Verfügung gestellt, wenn mehrere Sprachen verfügbar sind.",
|
||||||
"Delete": "Löschen",
|
"Delete": "Löschen",
|
||||||
|
@ -158,8 +158,8 @@
|
||||||
"DetectingDevices": "Suche Geräte",
|
"DetectingDevices": "Suche Geräte",
|
||||||
"DeviceAccessHelp": "Dies wird nur auf Geräte angewandt die eindeutig identifiziert werden können und verhindert nicht den Web-Zugriff. Gefilterter Zugriff auf Geräte verhindert die Nutzung neuer Geräte solange, bis der Zugriff für diese freigegeben wird.",
|
"DeviceAccessHelp": "Dies wird nur auf Geräte angewandt die eindeutig identifiziert werden können und verhindert nicht den Web-Zugriff. Gefilterter Zugriff auf Geräte verhindert die Nutzung neuer Geräte solange, bis der Zugriff für diese freigegeben wird.",
|
||||||
"DirectPlaying": "Direktes Abspielen",
|
"DirectPlaying": "Direktes Abspielen",
|
||||||
"DirectStreamHelp1": "Das Medium ist mit dem Abspielgerät kompatibel bzgl. Auflösung und Codecs (H.264, AC3, etc.), besitzt jedoch ein inkompatibles Containerformat (mkv, avi, wmv, etc.). Das Video wird in Echtzeit neuverpackt bevor es zum Abspielgerät gestreamt wird.",
|
"DirectStreamHelp1": "Das Medium ist mit dem Abspielgerät kompatibel bzgl. Auflösung und Codecs (H.264, AC3, etc.), besitzt jedoch ein inkompatibles Containerformat (mkv, avi, wmv, etc.). Das Video wird in Echtzeit neu verpackt bevor es zum Abspielgerät gesendet wird.",
|
||||||
"DirectStreamHelp2": "Direktes Streaming von Dateien benötigt sehr wenig Rechenleistung ohne Verlust der Videoqualität.",
|
"DirectStreamHelp2": "Direkt Stream benötigt sehr wenig Rechenleistung mit minimalem Verlust der Videoqualität.",
|
||||||
"DirectStreaming": "Direktes Streaming",
|
"DirectStreaming": "Direktes Streaming",
|
||||||
"Director": "Regisseur",
|
"Director": "Regisseur",
|
||||||
"Directors": "Regisseure",
|
"Directors": "Regisseure",
|
||||||
|
@ -210,7 +210,7 @@
|
||||||
"ErrorAddingXmlTvFile": "Fehler beim Zugriff auf die XMLTV Datei. Stelle bitte sicher, dass die Datei existiert und versuche es nochmal.",
|
"ErrorAddingXmlTvFile": "Fehler beim Zugriff auf die XMLTV Datei. Stelle bitte sicher, dass die Datei existiert und versuche es nochmal.",
|
||||||
"ErrorDeletingItem": "Fehler beim Löschen des Mediums vom Jellyfin Server. Bitte stelle sicher dass der Jellyfin Server Schreibzugriff auf den Dateiordner hat und versuche es erneut.",
|
"ErrorDeletingItem": "Fehler beim Löschen des Mediums vom Jellyfin Server. Bitte stelle sicher dass der Jellyfin Server Schreibzugriff auf den Dateiordner hat und versuche es erneut.",
|
||||||
"ErrorGettingTvLineups": "Ein Fehler trat beim Herunterladen des Fernsehprogramms auf. Bitte stellen Sie sicher, dass Ihre Informationen korrekt sind und versuchen Sie es erneut.",
|
"ErrorGettingTvLineups": "Ein Fehler trat beim Herunterladen des Fernsehprogramms auf. Bitte stellen Sie sicher, dass Ihre Informationen korrekt sind und versuchen Sie es erneut.",
|
||||||
"ErrorMessageStartHourGreaterThanEnd": "Die Endzeit muss größer als die Startzeit sein.",
|
"ErrorStartHourGreaterThanEnd": "Die Endzeit muss größer als die Startzeit sein.",
|
||||||
"ErrorPleaseSelectLineup": "Bitte wählen Sie ein TV Programm und versuchen Sie es erneut. Wenn keine Programme verfügbar sind prüfen Sie bitte Benutzername, Passwort und Ihre Postleitzahl.",
|
"ErrorPleaseSelectLineup": "Bitte wählen Sie ein TV Programm und versuchen Sie es erneut. Wenn keine Programme verfügbar sind prüfen Sie bitte Benutzername, Passwort und Ihre Postleitzahl.",
|
||||||
"ErrorSavingTvProvider": "Ein Fehler beim speichern des TV Verzeichnisses trat auf. Bitte stellen Sie sicher das dieser erreichbar ist und versuchen Sie es erneut.",
|
"ErrorSavingTvProvider": "Ein Fehler beim speichern des TV Verzeichnisses trat auf. Bitte stellen Sie sicher das dieser erreichbar ist und versuchen Sie es erneut.",
|
||||||
"EveryNDays": "Alle {0} Tage",
|
"EveryNDays": "Alle {0} Tage",
|
||||||
|
@ -263,7 +263,7 @@
|
||||||
"HeaderAllowMediaDeletionFrom": "Erlaube Medienlöschung von",
|
"HeaderAllowMediaDeletionFrom": "Erlaube Medienlöschung von",
|
||||||
"HeaderApiKey": "API-Schlüssel",
|
"HeaderApiKey": "API-Schlüssel",
|
||||||
"HeaderApiKeys": "API-Schlüssel",
|
"HeaderApiKeys": "API-Schlüssel",
|
||||||
"HeaderApiKeysHelp": "Externe Applikationen benötigen einen API-Schlüssel, um mit dem Jellyfin-Server zu kommunizieren. API-Schlüssel werden beim Anmelden mit einem Jellyfin-Konto oder durch eine manuelle Freigabe vergeben.",
|
"HeaderApiKeysHelp": "Externe Applikationen benötigen einen API-Schlüssel, um mit dem Server zu kommunizieren. API-Schlüssel werden beim Anmelden mit einem normalen Benutzerkonto oder durch eine manuelle Freigabe vergeben.",
|
||||||
"HeaderAppearsOn": "Erscheint auf",
|
"HeaderAppearsOn": "Erscheint auf",
|
||||||
"HeaderAudioBooks": "Hörbücher",
|
"HeaderAudioBooks": "Hörbücher",
|
||||||
"HeaderAudioSettings": "Audioeinstellungen",
|
"HeaderAudioSettings": "Audioeinstellungen",
|
||||||
|
@ -333,7 +333,7 @@
|
||||||
"HeaderItems": "Inhalte",
|
"HeaderItems": "Inhalte",
|
||||||
"HeaderKeepRecording": "Aufnahme behalten",
|
"HeaderKeepRecording": "Aufnahme behalten",
|
||||||
"HeaderKeepSeries": "Serie behalten",
|
"HeaderKeepSeries": "Serie behalten",
|
||||||
"HeaderKodiMetadataHelp": "Jellyfin bietet native Unterstützung von NFO Metadatendateien. Um NFO Metadaten zu aktivieren oder deaktivieren, verwende den \"Metadaten\" Tab um die Optionen für deinen Medientypen zu konfigurieren.",
|
"HeaderKodiMetadataHelp": "Um NFO Metadaten zu aktivieren oder deaktivieren, bearbeite eine Bibliothek und mache den Metadaten-Speicherer Abschnitt ausfindig.",
|
||||||
"HeaderLatestEpisodes": "Neueste Episoden",
|
"HeaderLatestEpisodes": "Neueste Episoden",
|
||||||
"HeaderLatestMedia": "Neueste Medien",
|
"HeaderLatestMedia": "Neueste Medien",
|
||||||
"HeaderLatestMovies": "Neueste Filme",
|
"HeaderLatestMovies": "Neueste Filme",
|
||||||
|
@ -381,7 +381,7 @@
|
||||||
"HeaderPreferredMetadataLanguage": "Bevorzugte Sprache der Metadaten",
|
"HeaderPreferredMetadataLanguage": "Bevorzugte Sprache der Metadaten",
|
||||||
"HeaderProfile": "Profil",
|
"HeaderProfile": "Profil",
|
||||||
"HeaderProfileInformation": "Profil Infomationen",
|
"HeaderProfileInformation": "Profil Infomationen",
|
||||||
"HeaderProfileServerSettingsHelp": "Diese Werte geben an, wie Jellyfin Server sich Ihren Geräten präsentiert.",
|
"HeaderProfileServerSettingsHelp": "Diese Werte geben an, wie der Server sich Ihren Clients präsentiert.",
|
||||||
"HeaderRecentlyPlayed": "Zuletzt gesehen",
|
"HeaderRecentlyPlayed": "Zuletzt gesehen",
|
||||||
"HeaderRecordingOptions": "Aufnahmeeinstellungen",
|
"HeaderRecordingOptions": "Aufnahmeeinstellungen",
|
||||||
"HeaderRecordingPostProcessing": "Aufnahme Nachbearbeitung",
|
"HeaderRecordingPostProcessing": "Aufnahme Nachbearbeitung",
|
||||||
|
@ -399,13 +399,13 @@
|
||||||
"HeaderSecondsValue": "{0} Sekunden",
|
"HeaderSecondsValue": "{0} Sekunden",
|
||||||
"HeaderSelectCertificatePath": "Wählen Sie einen Zertifikat Ordner",
|
"HeaderSelectCertificatePath": "Wählen Sie einen Zertifikat Ordner",
|
||||||
"HeaderSelectMetadataPath": "Wähle Metadaten Pfad",
|
"HeaderSelectMetadataPath": "Wähle Metadaten Pfad",
|
||||||
"HeaderSelectMetadataPathHelp": "Suche oder gib den Pfad für die Speicherung von Metadaten an. Das Verzeichnis muss beschreibbar sein.",
|
"HeaderSelectMetadataPathHelp": "Suche oder gib den Pfad für Metadaten an. Das Verzeichnis muss beschreibbar sein.",
|
||||||
"HeaderSelectPath": "Verzeichnis Wählen",
|
"HeaderSelectPath": "Verzeichnis Wählen",
|
||||||
"HeaderSelectServer": "Wähle Server",
|
"HeaderSelectServer": "Wähle Server",
|
||||||
"HeaderSelectServerCachePath": "Wähle Server Cache Pfad",
|
"HeaderSelectServerCachePath": "Wähle Server Cache Pfad",
|
||||||
"HeaderSelectServerCachePathHelp": "Suche oder gib den Pfad für die Speicherung von Server Cache Dateien an. Das Verzeichnis muss beschreibbar sein.",
|
"HeaderSelectServerCachePathHelp": "Suche oder gib den Pfad für die Speicherung von Server Cache Dateien an. Das Verzeichnis muss beschreibbar sein.",
|
||||||
"HeaderSelectTranscodingPath": "Wähle Pfad für temporäre Transkodierdateien",
|
"HeaderSelectTranscodingPath": "Wähle Pfad für temporäre Transkodierdateien",
|
||||||
"HeaderSelectTranscodingPathHelp": "Suche oder gib den Pfad für die Speicherung von temporären Transkodierdateien an. Das Verzeichnis muss beschreibbar sein.",
|
"HeaderSelectTranscodingPathHelp": "Suche oder gib den Pfad für die Speicherung Transkodierdateien an. Das Verzeichnis muss beschreibbar sein.",
|
||||||
"HeaderSendMessage": "Nachricht senden",
|
"HeaderSendMessage": "Nachricht senden",
|
||||||
"HeaderSeries": "Serien",
|
"HeaderSeries": "Serien",
|
||||||
"HeaderSeriesOptions": "Serienoptionen",
|
"HeaderSeriesOptions": "Serienoptionen",
|
||||||
|
@ -452,8 +452,8 @@
|
||||||
"HttpsRequiresCert": "Um https für externe Verbindungen zu erzwingen, benötigst du ein vertrauenswürdiges SSL-Zertifikat, z.B. von Let's Encrypt. Bitte stelle entweder ein Zertifikat bereit, oder deaktiviere sichere Verbindungen.",
|
"HttpsRequiresCert": "Um https für externe Verbindungen zu erzwingen, benötigst du ein vertrauenswürdiges SSL-Zertifikat, z.B. von Let's Encrypt. Bitte stelle entweder ein Zertifikat bereit, oder deaktiviere sichere Verbindungen.",
|
||||||
"Identify": "Identifizieren",
|
"Identify": "Identifizieren",
|
||||||
"Images": "Bilder",
|
"Images": "Bilder",
|
||||||
"ImportFavoriteChannelsHelp": "Wenn aktiviert, werden nur auf dem Tuner favorisierte Kanäle importiert.",
|
"ImportFavoriteChannelsHelp": "Nur auf dem Tuner favorisierte Kanäle werden 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": "Informationen über fehlende Episoden werden in deine Datenbank importiert und innerhalb von Staffeln angezeigt. Dies kann zu deutlich längeren Bibliothek Scans führen.",
|
||||||
"InstallingPackage": "Installiere {0} (Version {1})",
|
"InstallingPackage": "Installiere {0} (Version {1})",
|
||||||
"InstantMix": "Schnellmix",
|
"InstantMix": "Schnellmix",
|
||||||
"ItemCount": "{0} Einträge",
|
"ItemCount": "{0} Einträge",
|
||||||
|
@ -485,14 +485,14 @@
|
||||||
"LabelAppName": "App Name",
|
"LabelAppName": "App Name",
|
||||||
"LabelAppNameExample": "Beispiel: Sickbeard, Sonarr",
|
"LabelAppNameExample": "Beispiel: Sickbeard, Sonarr",
|
||||||
"LabelArtists": "Interpreten:",
|
"LabelArtists": "Interpreten:",
|
||||||
"LabelArtistsHelp": "Trenne mehrere Einträge durch ;",
|
"LabelArtistsHelp": "Trenne mehrere Künstler durch ein Semikolon.",
|
||||||
"LabelAudioLanguagePreference": "Bevorzugte Audiosprache:",
|
"LabelAudioLanguagePreference": "Bevorzugte Audiosprache:",
|
||||||
"LabelAutomaticallyRefreshInternetMetadataEvery": "Aktualisiere Metadaten automatisch aus dem Internet:",
|
"LabelAutomaticallyRefreshInternetMetadataEvery": "Aktualisiere Metadaten automatisch aus dem Internet:",
|
||||||
"LabelBindToLocalNetworkAddress": "Binde an lokale Netzwerkadresse:",
|
"LabelBindToLocalNetworkAddress": "Binde an lokale Netzwerkadresse:",
|
||||||
"LabelBindToLocalNetworkAddressHelp": "Optional. Überschreibt die lokale IP Adresse des HTTP Servers. Wenn leer, wird der Server an alle verfügbaren Adressen gebunden. Änderungen benötigen einen Neustart des Jellyfin Servers.",
|
"LabelBindToLocalNetworkAddressHelp": "Überschreibt die lokale IP Adresse für den HTTP Server. Wenn leer, wird der Server an alle verfügbaren Adressen gebunden. Änderungen benötigen einen Neustart des Jellyfin Servers.",
|
||||||
"LabelBirthDate": "Geburtsdatum:",
|
"LabelBirthDate": "Geburtsdatum:",
|
||||||
"LabelBirthYear": "Geburtsjahr:",
|
"LabelBirthYear": "Geburtsjahr:",
|
||||||
"LabelBlastMessageInterval": "Alive Meldungsintervall (Sekunden)",
|
"LabelBlastMessageInterval": "Alive Meldungsintervall",
|
||||||
"LabelBlastMessageIntervalHelp": "Legt die Dauer in Sekunden zwischen den Server-Alive-Meldungen fest.",
|
"LabelBlastMessageIntervalHelp": "Legt die Dauer in Sekunden zwischen den Server-Alive-Meldungen fest.",
|
||||||
"LabelBlockContentWithTags": "Blockiere Inhalte mit Tags:",
|
"LabelBlockContentWithTags": "Blockiere Inhalte mit Tags:",
|
||||||
"LabelBurnSubtitles": "Untertitel einbrennen:",
|
"LabelBurnSubtitles": "Untertitel einbrennen:",
|
||||||
|
@ -511,7 +511,7 @@
|
||||||
"LabelCustomCertificatePath": "Benutzerdefinierter SSL-Zertifikatspfad:",
|
"LabelCustomCertificatePath": "Benutzerdefinierter SSL-Zertifikatspfad:",
|
||||||
"LabelCustomCertificatePathHelp": "Pfad zu einer PKCS #12 Datei die ein Zertifikat und einen privaten Schlüssel enthält, um TLS Unterstützung für eine eigene Domain zu aktivieren.",
|
"LabelCustomCertificatePathHelp": "Pfad zu einer PKCS #12 Datei die ein Zertifikat und einen privaten Schlüssel enthält, um TLS Unterstützung für eine eigene Domain zu aktivieren.",
|
||||||
"LabelCustomCss": "Benutzerdefiniertes CSS:",
|
"LabelCustomCss": "Benutzerdefiniertes CSS:",
|
||||||
"LabelCustomCssHelp": "Wende dein eigenes benutzerdefiniertes Styling auf die Weboberfläche an.",
|
"LabelCustomCssHelp": "Wende deine eigenen benutzerdefinierte Styles auf die Weboberfläche an.",
|
||||||
"LabelCustomDeviceDisplayName": "Angezeigter Name:",
|
"LabelCustomDeviceDisplayName": "Angezeigter Name:",
|
||||||
"LabelCustomDeviceDisplayNameHelp": "Lege einen individuellen Anzeigenamen fest oder lasse das Feld leer, um den vom gerät übermittelten Namen zu nutzen.",
|
"LabelCustomDeviceDisplayNameHelp": "Lege einen individuellen Anzeigenamen fest oder lasse das Feld leer, um den vom gerät übermittelten Namen zu nutzen.",
|
||||||
"LabelCustomRating": "Eigene Bewertung:",
|
"LabelCustomRating": "Eigene Bewertung:",
|
||||||
|
@ -547,12 +547,12 @@
|
||||||
"LabelEnableAutomaticPortMapHelp": "Leitet automatisch die öffentlichen Ports des Routers an die lokalen Ports des Servers mit Hilfe von UPnP weiter. Dies kann mit einigen Router-Modellen nicht funktionieren. Die Änderungen werden erst nach einem Neustart des Server aktiv.",
|
"LabelEnableAutomaticPortMapHelp": "Leitet automatisch die öffentlichen Ports des Routers an die lokalen Ports des Servers mit Hilfe von UPnP weiter. Dies kann mit einigen Router-Modellen nicht funktionieren. Die Änderungen werden erst nach einem Neustart des Server aktiv.",
|
||||||
"LabelEnableBlastAliveMessages": "Erzeuge Alive Meldungen",
|
"LabelEnableBlastAliveMessages": "Erzeuge Alive Meldungen",
|
||||||
"LabelEnableBlastAliveMessagesHelp": "Aktiviere dies, wenn der Server nicht zuverlässig von anderen UPnP Geräten in ihrem Netzwerk erkannt wird.",
|
"LabelEnableBlastAliveMessagesHelp": "Aktiviere dies, wenn der Server nicht zuverlässig von anderen UPnP Geräten in ihrem Netzwerk erkannt wird.",
|
||||||
"LabelEnableDlnaClientDiscoveryInterval": "Client-Entdeckungs Intervall (Sekunden)",
|
"LabelEnableDlnaClientDiscoveryInterval": "Client-Entdeckungs Intervall",
|
||||||
"LabelEnableDlnaClientDiscoveryIntervalHelp": "Ermittelt die Zeit in Sekunden zwischen SSDP Suchanfragen die durch Jellyfin ausgeführt wurden.",
|
"LabelEnableDlnaClientDiscoveryIntervalHelp": "Ermittelt die Zeit in Sekunden zwischen SSDP Suchanfragen die durch Jellyfin ausgeführt wurden.",
|
||||||
"LabelEnableDlnaDebugLogging": "Aktiviere DLNA Debug Logging",
|
"LabelEnableDlnaDebugLogging": "Aktiviere DLNA Debug Logging",
|
||||||
"LabelEnableDlnaDebugLoggingHelp": "Erzeugt große Logdateien und sollte nur zur Fehlerbehebung benutzt werden.",
|
"LabelEnableDlnaDebugLoggingHelp": "Erzeugt große Logdateien und sollte nur zur Fehlerbehebung benutzt werden.",
|
||||||
"LabelEnableDlnaPlayTo": "Aktiviere DLNA Play To",
|
"LabelEnableDlnaPlayTo": "Aktiviere DLNA Play To",
|
||||||
"LabelEnableDlnaPlayToHelp": "Jellyfin kann Geräte in Ihrem Netzwerk erkennen und bietet die Möglichkeit, diese fernzusteuern.",
|
"LabelEnableDlnaPlayToHelp": "Jellyfin kann Geräte in Ihrem Netzwerk erkennen und bietet die Möglichkeit diese fernzusteuern.",
|
||||||
"LabelEnableDlnaServer": "DLNA-Server aktivieren",
|
"LabelEnableDlnaServer": "DLNA-Server aktivieren",
|
||||||
"LabelEnableDlnaServerHelp": "Erlaubt UPnP Geräten in Ihrem Netzwerk den Zugriff und die Wiedergabe von Inhalten.",
|
"LabelEnableDlnaServerHelp": "Erlaubt UPnP Geräten in Ihrem Netzwerk den Zugriff und die Wiedergabe von Inhalten.",
|
||||||
"LabelEnableHardwareDecodingFor": "Aktiviere Hardware-Decoding für:",
|
"LabelEnableHardwareDecodingFor": "Aktiviere Hardware-Decoding für:",
|
||||||
|
@ -572,16 +572,16 @@
|
||||||
"LabelFont": "Schriftart:",
|
"LabelFont": "Schriftart:",
|
||||||
"LabelForgotPasswordUsernameHelp": "Bitte gib deinen Benutzernamen ein, falls du dich daran erinnerst.",
|
"LabelForgotPasswordUsernameHelp": "Bitte gib deinen Benutzernamen ein, falls du dich daran erinnerst.",
|
||||||
"LabelFriendlyName": "Benutzerfreundlicher Name:",
|
"LabelFriendlyName": "Benutzerfreundlicher Name:",
|
||||||
"LabelServerNameHelp": "Dieser Name wird benutzt um den Server zu identifizieren, standardmäßig wird der Server-/Computername verwendet.",
|
"LabelServerNameHelp": "Dieser Name wird benutzt, um den Server zu identifizieren, standardmäßig wird der Hostname des Servers verwendet.",
|
||||||
"LabelGroupMoviesIntoCollections": "Gruppiere Filme in Collections",
|
"LabelGroupMoviesIntoCollections": "Gruppiere Filme in Collections",
|
||||||
"LabelGroupMoviesIntoCollectionsHelp": "Wenn Filmlisten angezeigt werden, dann werden Filme, die zu einer Collection gehören, als ein gruppiertes Element angezeigt.",
|
"LabelGroupMoviesIntoCollectionsHelp": "Wenn Filmlisten angezeigt werden, werden Filme in einer Sammlung als ein gruppiertes Element angezeigt.",
|
||||||
"LabelEncoderPreset": "H264 Encoding Voreinstellung:",
|
"LabelEncoderPreset": "H264 Encoding Voreinstellung:",
|
||||||
"LabelHardwareAccelerationType": "Hardware Beschleunigung:",
|
"LabelHardwareAccelerationType": "Hardware Beschleunigung:",
|
||||||
"LabelHardwareAccelerationTypeHelp": "Hardwarebeschleunigung benötigt zusätzliche Konfiguration.",
|
"LabelHardwareAccelerationTypeHelp": "Hardwarebeschleunigung benötigt zusätzliche Konfiguration.",
|
||||||
"LabelHomeNetworkQuality": "Heimnetzwerkqualität:",
|
"LabelHomeNetworkQuality": "Heimnetzwerkqualität:",
|
||||||
"LabelHomeScreenSectionValue": "Startseitenbereich {0}:",
|
"LabelHomeScreenSectionValue": "Startseitenbereich {0}:",
|
||||||
"LabelHttpsPort": "Lokale HTTPS-Portnummer:",
|
"LabelHttpsPort": "Lokale HTTPS-Portnummer:",
|
||||||
"LabelHttpsPortHelp": "Die TCP-Portnummer, die der HTTPS-Server von Jellyfin verwenden soll.",
|
"LabelHttpsPortHelp": "Die TCP-Portnummer für den HTTPS-Server.",
|
||||||
"LabelIconMaxHeight": "Maximale Iconhöhe:",
|
"LabelIconMaxHeight": "Maximale Iconhöhe:",
|
||||||
"LabelIconMaxHeightHelp": "Maximale Auflösung für durch UPnP übermittelte Icons:icon.",
|
"LabelIconMaxHeightHelp": "Maximale Auflösung für durch UPnP übermittelte Icons:icon.",
|
||||||
"LabelIconMaxWidth": "Maximale Iconbreite:",
|
"LabelIconMaxWidth": "Maximale Iconbreite:",
|
||||||
|
@ -609,7 +609,7 @@
|
||||||
"LabelLanguage": "Sprache:",
|
"LabelLanguage": "Sprache:",
|
||||||
"LabelLineup": "TV Programm:",
|
"LabelLineup": "TV Programm:",
|
||||||
"LabelLocalHttpServerPortNumber": "Lokale HTTP Portnummer:",
|
"LabelLocalHttpServerPortNumber": "Lokale HTTP Portnummer:",
|
||||||
"LabelLocalHttpServerPortNumberHelp": "Die TCP-Portnummer, die der HTTP-Server von Jellyfin verwenden soll.",
|
"LabelLocalHttpServerPortNumberHelp": "Die TCP-Portnummer für den HTTP-Server.",
|
||||||
"LabelLockItemToPreventChanges": "Sperre diesen Eintrag um zukünftige Änderungen zu verhindern",
|
"LabelLockItemToPreventChanges": "Sperre diesen Eintrag um zukünftige Änderungen zu verhindern",
|
||||||
"LabelLoginDisclaimer": "Anmeldung Haftungsausschluss:",
|
"LabelLoginDisclaimer": "Anmeldung Haftungsausschluss:",
|
||||||
"LabelLoginDisclaimerHelp": "Diese Nachricht wird am unteren Ende des Anmeldebildschirms angezeigt.",
|
"LabelLoginDisclaimerHelp": "Diese Nachricht wird am unteren Ende des Anmeldebildschirms angezeigt.",
|
||||||
|
@ -634,7 +634,7 @@
|
||||||
"LabelMetadataReaders": "Metadatenleser:",
|
"LabelMetadataReaders": "Metadatenleser:",
|
||||||
"LabelMetadataReadersHelp": "Lege deine bevorzugte lokale Metadatenquelle fest und ordne sie nach Prioritäten. Die erste Datei die gefunden wird, wird verwendet.",
|
"LabelMetadataReadersHelp": "Lege deine bevorzugte lokale Metadatenquelle fest und ordne sie nach Prioritäten. Die erste Datei die gefunden wird, wird verwendet.",
|
||||||
"LabelMetadataSavers": "Metadaten-Speicherer:",
|
"LabelMetadataSavers": "Metadaten-Speicherer:",
|
||||||
"LabelMetadataSaversHelp": "Wähle das Dateiformat, in dem deine Metadaten gespeichert werden sollen.",
|
"LabelMetadataSaversHelp": "Wähle die Dateiformate, die beim Speichern deiner Metadaten verwendet werden sollen.",
|
||||||
"LabelMethod": "Methode:",
|
"LabelMethod": "Methode:",
|
||||||
"LabelMinBackdropDownloadWidth": "Minimale Breite für zu herunterladende Hintergründe:",
|
"LabelMinBackdropDownloadWidth": "Minimale Breite für zu herunterladende Hintergründe:",
|
||||||
"LabelMinResumeDuration": "Minimale Dauer für Wiederaufnahme:",
|
"LabelMinResumeDuration": "Minimale Dauer für Wiederaufnahme:",
|
||||||
|
@ -650,9 +650,9 @@
|
||||||
"LabelMovieCategories": "Filmkategorien:",
|
"LabelMovieCategories": "Filmkategorien:",
|
||||||
"LabelMoviePrefix": "Filmpräfix:",
|
"LabelMoviePrefix": "Filmpräfix:",
|
||||||
"LabelMoviePrefixHelp": "Wenn ein Präfix in Filmtiteln angewendet wird, gib es hier ein damit der Server es korrekt behandeln kann.",
|
"LabelMoviePrefixHelp": "Wenn ein Präfix in Filmtiteln angewendet wird, gib es hier ein damit der Server es korrekt behandeln kann.",
|
||||||
"LabelMovieRecordingPath": "Film Aufnahmepfad (Optional):",
|
"LabelMovieRecordingPath": "Film Aufnahmepfad:",
|
||||||
"LabelMusicStreamingTranscodingBitrate": "Musik-Transkodierung Bitrate:",
|
"LabelMusicStreamingTranscodingBitrate": "Musik-Transkodierung Bitrate:",
|
||||||
"LabelMusicStreamingTranscodingBitrateHelp": "Wähle die maximale Bitrate für das streamen von Musik.",
|
"LabelMusicStreamingTranscodingBitrateHelp": "Wähle die maximale Bitrate für das Streamen von Musik.",
|
||||||
"LabelNewName": "Neuer Name:",
|
"LabelNewName": "Neuer Name:",
|
||||||
"LabelNewPassword": "Neues Passwort:",
|
"LabelNewPassword": "Neues Passwort:",
|
||||||
"LabelNewPasswordConfirm": "Neues Passwort wiederholen:",
|
"LabelNewPasswordConfirm": "Neues Passwort wiederholen:",
|
||||||
|
@ -662,7 +662,7 @@
|
||||||
"LabelNumber": "Nummer:",
|
"LabelNumber": "Nummer:",
|
||||||
"LabelNumberOfGuideDays": "Anzahl von Tagen für die Programminformationen geladen werden sollen:",
|
"LabelNumberOfGuideDays": "Anzahl von Tagen für die Programminformationen geladen werden sollen:",
|
||||||
"LabelNumberOfGuideDaysHelp": "Das laden von zusätzlichen Programmdaten bietet einen besseren Überblick und die Möglichkeit weiter in die Zukunft zu planen. Aber es wird länger dauern alles herunterzuladen. Auto wählt auf Grundlage der Kanalanzahl.",
|
"LabelNumberOfGuideDaysHelp": "Das laden von zusätzlichen Programmdaten bietet einen besseren Überblick und die Möglichkeit weiter in die Zukunft zu planen. Aber es wird länger dauern alles herunterzuladen. Auto wählt auf Grundlage der Kanalanzahl.",
|
||||||
"LabelOptionalNetworkPath": "(Optionaler) Gemeinsamer Netzwerkordner:",
|
"LabelOptionalNetworkPath": "Geteilter Netzwerkordner:",
|
||||||
"LabelOptionalNetworkPathHelp": "Wenn dieser Ordner in deinem Netzwerk geteilt wird, kann die Weitergabe des Netzwerkpfades Jellyfin Apps auf anderen Geräten direkten Zugang zu den Mediendateien ermöglichen. Beispielsweise {0} oder {1}.",
|
"LabelOptionalNetworkPathHelp": "Wenn dieser Ordner in deinem Netzwerk geteilt wird, kann die Weitergabe des Netzwerkpfades Jellyfin Apps auf anderen Geräten direkten Zugang zu den Mediendateien ermöglichen. Beispielsweise {0} oder {1}.",
|
||||||
"LabelOriginalAspectRatio": "Original Seitenverhältnis:",
|
"LabelOriginalAspectRatio": "Original Seitenverhältnis:",
|
||||||
"LabelOriginalTitle": "Original Titel:",
|
"LabelOriginalTitle": "Original Titel:",
|
||||||
|
@ -705,7 +705,7 @@
|
||||||
"LabelReleaseDate": "Veröffentlichungsdatum:",
|
"LabelReleaseDate": "Veröffentlichungsdatum:",
|
||||||
"LabelRemoteClientBitrateLimit": "Limit für die Internet Streaming Datenrate (Mbps):",
|
"LabelRemoteClientBitrateLimit": "Limit für die Internet Streaming Datenrate (Mbps):",
|
||||||
"LabelRemoteClientBitrateLimitHelp": "Ein optionales Bitratenlimit pro Stream für alle Geräte außerhalb des Netzwerkes. Dies ist nützlich um zu verhindern, dass Geräte eine höhere Datenrate verwenden als die Internetverbindung erlaubt. Es kann zu erhöhter CPU-Last auf deinem Server kommen, da ggf. Videos in Echtzeit in eine niedrigere Bitrate transkodiert werden müssen.",
|
"LabelRemoteClientBitrateLimitHelp": "Ein optionales Bitratenlimit pro Stream für alle Geräte außerhalb des Netzwerkes. Dies ist nützlich um zu verhindern, dass Geräte eine höhere Datenrate verwenden als die Internetverbindung erlaubt. Es kann zu erhöhter CPU-Last auf deinem Server kommen, da ggf. Videos in Echtzeit in eine niedrigere Bitrate transkodiert werden müssen.",
|
||||||
"LabelRuntimeMinutes": "Laufzeit (Minuten):",
|
"LabelRuntimeMinutes": "Laufzeit:",
|
||||||
"LabelSaveLocalMetadata": "Speichere Bildmaterial und Metadaten in den Medienverzeichnissen",
|
"LabelSaveLocalMetadata": "Speichere Bildmaterial und Metadaten in den Medienverzeichnissen",
|
||||||
"LabelSaveLocalMetadataHelp": "Durch die Speicherung von Bildmaterial und Metadaten direkt in den Medienverzeichnissen, befinden sich diese an einem Ort wo sie sehr leicht bearbeitet werden können.",
|
"LabelSaveLocalMetadataHelp": "Durch die Speicherung von Bildmaterial und Metadaten direkt in den Medienverzeichnissen, befinden sich diese an einem Ort wo sie sehr leicht bearbeitet werden können.",
|
||||||
"LabelScheduledTaskLastRan": "Zuletzt ausgeführt vor: {0}. Benötigte Zeit: {1}.",
|
"LabelScheduledTaskLastRan": "Zuletzt ausgeführt vor: {0}. Benötigte Zeit: {1}.",
|
||||||
|
@ -717,7 +717,7 @@
|
||||||
"LabelSelectVersionToInstall": "Wähle die Version für die Installation:",
|
"LabelSelectVersionToInstall": "Wähle die Version für die Installation:",
|
||||||
"LabelSendNotificationToUsers": "Sende die Benachrichtigung an:",
|
"LabelSendNotificationToUsers": "Sende die Benachrichtigung an:",
|
||||||
"LabelSerialNumber": "Seriennummer",
|
"LabelSerialNumber": "Seriennummer",
|
||||||
"LabelSeriesRecordingPath": "Serien Aufnahmepfad (optional):",
|
"LabelSeriesRecordingPath": "Serien Aufnahmepfad:",
|
||||||
"LabelServerHost": "Adresse:",
|
"LabelServerHost": "Adresse:",
|
||||||
"LabelServerHostHelp": "192.168.1.100 oder https://myserver.com",
|
"LabelServerHostHelp": "192.168.1.100 oder https://myserver.com",
|
||||||
"LabelSimultaneousConnectionLimit": "Paralleler Streamlimit:",
|
"LabelSimultaneousConnectionLimit": "Paralleler Streamlimit:",
|
||||||
|
@ -783,7 +783,7 @@
|
||||||
"LabelYoureDone": "Du bist fertig!",
|
"LabelYoureDone": "Du bist fertig!",
|
||||||
"LabelZipCode": "PLZ:",
|
"LabelZipCode": "PLZ:",
|
||||||
"LabelffmpegPath": "FFmpeg Verzeichnis:",
|
"LabelffmpegPath": "FFmpeg Verzeichnis:",
|
||||||
"LabelffmpegPathHelp": "Verzeichnis zur runtergeladenen FFmpeg Applikation oder zum Ordner, der FFMpeg enthält.",
|
"LabelffmpegPathHelp": "Verzeichnis zur FFmpeg Applikationsdatei oder zum Ordner, der FFmpeg enthält.",
|
||||||
"LanNetworksHelp": "Komma separierte Liste von IP Adressen oder IP Masken die als lokale Netzwerke behandelt werden sollen um Bandbreitenlimitationen auszusetzen. Wenn befüllt werden alle anderen IP Adressen als externe Netzwerke behandelt und unterliegen den Bandbreitenlimitationen für externe Verbindungen. Wenn leer, wird nur das SubNetz des Servers als Lokales Netz gesetzt.",
|
"LanNetworksHelp": "Komma separierte Liste von IP Adressen oder IP Masken die als lokale Netzwerke behandelt werden sollen um Bandbreitenlimitationen auszusetzen. Wenn befüllt werden alle anderen IP Adressen als externe Netzwerke behandelt und unterliegen den Bandbreitenlimitationen für externe Verbindungen. Wenn leer, wird nur das SubNetz des Servers als Lokales Netz gesetzt.",
|
||||||
"Large": "Groß",
|
"Large": "Groß",
|
||||||
"LatestFromLibrary": "Neueste {0}",
|
"LatestFromLibrary": "Neueste {0}",
|
||||||
|
@ -864,7 +864,7 @@
|
||||||
"MessageYouHaveVersionInstalled": "Du hast momentan Version {0} installiert.",
|
"MessageYouHaveVersionInstalled": "Du hast momentan Version {0} installiert.",
|
||||||
"Metadata": "Metadaten",
|
"Metadata": "Metadaten",
|
||||||
"MetadataManager": "Metadaten-Manager",
|
"MetadataManager": "Metadaten-Manager",
|
||||||
"MetadataSettingChangeHelp": "Das Verändern der Metadata-Einstellungen hat nur Einfluss auf neu hinzugefügte Inhalte. Um eine Aktualisierung bereits hinzugefügter Inhalte durchzuführen, öffnen Sie bitte die Detail Ansicht und klicken die Aktualisieren Schaltfläche. Die Aktualisierung mehrerer Inhalte kann im Metadata Manager durchgeführt werden.",
|
"MetadataSettingChangeHelp": "Das Verändern der Metadata-Einstellungen hat nur Einfluss auf neu hinzugefügte Inhalte. Um eine Aktualisierung bereits hinzugefügter Inhalte durchzuführen, öffnen Sie bitte die Detailansicht und klicken die Aktualisieren-Schaltfläche. Die Aktualisierung mehrerer Inhalte kann im Metadata Manager durchgeführt werden.",
|
||||||
"MinutesAfter": "Minuten nach",
|
"MinutesAfter": "Minuten nach",
|
||||||
"MinutesBefore": "Minuten vor",
|
"MinutesBefore": "Minuten vor",
|
||||||
"Mobile": "Smartphone",
|
"Mobile": "Smartphone",
|
||||||
|
@ -888,8 +888,8 @@
|
||||||
"NextUp": "Es folgt",
|
"NextUp": "Es folgt",
|
||||||
"No": "Nein",
|
"No": "Nein",
|
||||||
"NoNewDevicesFound": "Keine neuen Geräte gefunden. Um einen neuen Tuner hinzuzufügen, schließe diesen Dialog und gebe die Geräteinformationen manuell ein.",
|
"NoNewDevicesFound": "Keine neuen Geräte gefunden. Um einen neuen Tuner hinzuzufügen, schließe diesen Dialog und gebe die Geräteinformationen manuell ein.",
|
||||||
"NoNextUpItemsMessage": "Es wurde nichts gefunden. Schau dir deine Shows an!",
|
"MessageNoNextUpItems": "Es wurde nichts gefunden. Schau dir deine Shows an!",
|
||||||
"NoPluginConfigurationMessage": "Dieses Plugin hat keine konfigurierbaren Einstellungen.",
|
"MessageNoPluginConfiguration": "Dieses Plugin hat keine konfigurierbaren Einstellungen.",
|
||||||
"NoSubtitleSearchResultsFound": "Keine Ergebnisse gefunden.",
|
"NoSubtitleSearchResultsFound": "Keine Ergebnisse gefunden.",
|
||||||
"NoSubtitles": "Keine",
|
"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.",
|
||||||
|
@ -910,7 +910,7 @@
|
||||||
"OptionAllowLinkSharingHelp": "Es werden nur Web-Seiten mit Medieninformationen geteilt. Medien hingenen werden niemals öffentlich geteilt. Die geteilten Inhalte sind nur begrenzt zugänglich werden nach {0} Tagen ungültig.",
|
"OptionAllowLinkSharingHelp": "Es werden nur Web-Seiten mit Medieninformationen geteilt. Medien hingenen werden niemals öffentlich geteilt. Die geteilten Inhalte sind nur begrenzt zugänglich werden nach {0} Tagen ungültig.",
|
||||||
"OptionAllowManageLiveTv": "Erlaube Live-TV Aufnahmeplanung",
|
"OptionAllowManageLiveTv": "Erlaube Live-TV Aufnahmeplanung",
|
||||||
"OptionAllowMediaPlayback": "Erlaube Medienwiedergabe",
|
"OptionAllowMediaPlayback": "Erlaube Medienwiedergabe",
|
||||||
"OptionAllowMediaPlaybackTranscodingHelp": "Das Einschränken des Transcoding-Zugriffes kann bei nicht unterstützten Medienformaten Abspielfehler in Jellyfin Apps hervorrufen.",
|
"OptionAllowMediaPlaybackTranscodingHelp": "Das Einschränken des Transcoding-Zugriffes kann durch nicht unterstützte Medienformate Abspielfehler in Clients hervorrufen.",
|
||||||
"OptionAllowRemoteControlOthers": "Erlaube Fernsteuerung anderer Benutzer",
|
"OptionAllowRemoteControlOthers": "Erlaube Fernsteuerung anderer Benutzer",
|
||||||
"OptionAllowRemoteSharedDevices": "Erlaube Fernsteuerung geteilter Geräte",
|
"OptionAllowRemoteSharedDevices": "Erlaube Fernsteuerung geteilter Geräte",
|
||||||
"OptionAllowRemoteSharedDevicesHelp": "DLNA-Geräte werden als gemeinsam genutzt betrachtet, bis ein Benutzer die Steuerung übernimmt.",
|
"OptionAllowRemoteSharedDevicesHelp": "DLNA-Geräte werden als gemeinsam genutzt betrachtet, bis ein Benutzer die Steuerung übernimmt.",
|
||||||
|
@ -921,7 +921,7 @@
|
||||||
"OptionArtist": "Interpret",
|
"OptionArtist": "Interpret",
|
||||||
"OptionAscending": "Aufsteigend",
|
"OptionAscending": "Aufsteigend",
|
||||||
"OptionAutomaticallyGroupSeries": "Vermische Serieninhalte, die in verschiedenen Ordnern abgelegt sind",
|
"OptionAutomaticallyGroupSeries": "Vermische Serieninhalte, die in verschiedenen Ordnern abgelegt sind",
|
||||||
"OptionAutomaticallyGroupSeriesHelp": "Wenn aktiviert, werden Inhalte einer Serie in verschiedenen Ordnern innerhalb einer Bibliothek als eine Serie angezeigt.",
|
"OptionAutomaticallyGroupSeriesHelp": "Inhalte einer Serie in verschiedenen Ordnern werden innerhalb einer Bibliothek als eine Serie angezeigt.",
|
||||||
"OptionBlockBooks": "Bücher",
|
"OptionBlockBooks": "Bücher",
|
||||||
"OptionBlockChannelContent": "Internet Channelinhalte",
|
"OptionBlockChannelContent": "Internet Channelinhalte",
|
||||||
"OptionBlockLiveTvChannels": "Live-TV Kanäle",
|
"OptionBlockLiveTvChannels": "Live-TV Kanäle",
|
||||||
|
@ -940,7 +940,7 @@
|
||||||
"OptionDatePlayed": "Gesehen am",
|
"OptionDatePlayed": "Gesehen am",
|
||||||
"OptionDescending": "Absteigend",
|
"OptionDescending": "Absteigend",
|
||||||
"OptionDisableUser": "Sperre diesen Benutzer",
|
"OptionDisableUser": "Sperre diesen Benutzer",
|
||||||
"OptionDisableUserHelp": "Wenn deaktiviert wird der Server keine Verbindung von diesem Benutzer erlauben. Bestehende Verbindungen werden sofort beendet.",
|
"OptionDisableUserHelp": "Der Server keine Verbindung von diesem Benutzer erlauben. Bestehende Verbindungen werden sofort beendet.",
|
||||||
"OptionDislikes": "Mag ich nicht",
|
"OptionDislikes": "Mag ich nicht",
|
||||||
"OptionDisplayFolderView": "Darstellung in Verzeichnisansicht zeigt Medien Verzechnisse",
|
"OptionDisplayFolderView": "Darstellung in Verzeichnisansicht zeigt Medien Verzechnisse",
|
||||||
"OptionDisplayFolderViewHelp": "Zeige eine Verzeichnisansicht neben deinen Bibliotheken an. Dies kann praktisch sein, wenn man nur Verzeichnisansichten verwendet.",
|
"OptionDisplayFolderViewHelp": "Zeige eine Verzeichnisansicht neben deinen Bibliotheken an. Dies kann praktisch sein, wenn man nur Verzeichnisansichten verwendet.",
|
||||||
|
@ -948,7 +948,7 @@
|
||||||
"OptionDownloadBackImage": "Zurück",
|
"OptionDownloadBackImage": "Zurück",
|
||||||
"OptionDownloadDiscImage": "Disk",
|
"OptionDownloadDiscImage": "Disk",
|
||||||
"OptionDownloadImagesInAdvance": "Bilder vorab herunterladen",
|
"OptionDownloadImagesInAdvance": "Bilder vorab herunterladen",
|
||||||
"OptionDownloadImagesInAdvanceHelp": "Grundsätzlich werden die meisten Bilder erst dann runter geladen, wenn eine Jellyfin-App diese anfragt. Schalten Sie diese Option ein um alle Bilder im Voraus herunterzuladen, wenn neue Medien importiert wurden. Diese Einstellung kann zu signifikant längeren Bibliothekscans führen.",
|
"OptionDownloadImagesInAdvanceHelp": "Standardmäßig werden die meisten Bilder erst dann heruntergeladen, wenn ein Client diese anfragt. Schalten Sie diese Option ein um alle Bilder im Voraus herunterzuladen, wenn neue Medien importiert werden. Diese Einstellung kann zu signifikant längeren Bibliothekscans führen.",
|
||||||
"OptionDownloadMenuImage": "Menü",
|
"OptionDownloadMenuImage": "Menü",
|
||||||
"OptionDownloadPrimaryImage": "Primär",
|
"OptionDownloadPrimaryImage": "Primär",
|
||||||
"OptionDvd": "DVD",
|
"OptionDvd": "DVD",
|
||||||
|
@ -978,7 +978,7 @@
|
||||||
"OptionHlsSegmentedSubtitles": "HLS segmentierte Untertitel",
|
"OptionHlsSegmentedSubtitles": "HLS segmentierte Untertitel",
|
||||||
"OptionHomeVideos": "Fotos",
|
"OptionHomeVideos": "Fotos",
|
||||||
"OptionIgnoreTranscodeByteRangeRequests": "Ignoriere Anfragen für Transkodierbytebereiche",
|
"OptionIgnoreTranscodeByteRangeRequests": "Ignoriere Anfragen für Transkodierbytebereiche",
|
||||||
"OptionIgnoreTranscodeByteRangeRequestsHelp": "Falls aktiviert, werden diese Anfragen berücksichtigt aber Byte-Range-Header ignoriert werden.",
|
"OptionIgnoreTranscodeByteRangeRequestsHelp": "Diese Anfragen werden berücksichtigt, aber den Byte-Range-Header ignorieren.",
|
||||||
"OptionImdbRating": "IMDb Bewertung",
|
"OptionImdbRating": "IMDb Bewertung",
|
||||||
"OptionLikes": "Mag ich",
|
"OptionLikes": "Mag ich",
|
||||||
"OptionMissingEpisode": "Fehlende Episoden",
|
"OptionMissingEpisode": "Fehlende Episoden",
|
||||||
|
@ -989,9 +989,9 @@
|
||||||
"OptionOnInterval": "Nach einem Intervall",
|
"OptionOnInterval": "Nach einem Intervall",
|
||||||
"OptionParentalRating": "Altersfreigabe",
|
"OptionParentalRating": "Altersfreigabe",
|
||||||
"OptionPlainStorageFolders": "Zeige alle Verzeichnisse als reine Speicherorte an",
|
"OptionPlainStorageFolders": "Zeige alle Verzeichnisse als reine Speicherorte an",
|
||||||
"OptionPlainStorageFoldersHelp": "Falls aktiviert, werden alle Verzeichnisse in DIDL als \"object.container.storageFolder\" angezeigt, anstatt eines spezifischen Typs wie beispielsweise \"object.container.person.musicArtist\".",
|
"OptionPlainStorageFoldersHelp": "Alle Verzeichnisse werden in DIDL als \"object.container.storageFolder\" angezeigt, anstatt eines spezifischen Typs wie beispielsweise \"object.container.person.musicArtist\".",
|
||||||
"OptionPlainVideoItems": "Zeige alle Videos als reine Videodateien an",
|
"OptionPlainVideoItems": "Zeige alle Videos als reine Videodateien an",
|
||||||
"OptionPlainVideoItemsHelp": "Falls aktiviert, werden alle Videos in DIDL als \"object.item.videoItem\" angezeigt, anstatt eines spezifischen Typs wie beispielsweise \"object.item.videoItem.movie\".",
|
"OptionPlainVideoItemsHelp": "Alle Videos werden in DIDL als \"object.item.videoItem\" angezeigt, anstatt eines spezifischen Typs wie beispielsweise \"object.item.videoItem.movie\".",
|
||||||
"OptionPlayCount": "Zähler",
|
"OptionPlayCount": "Zähler",
|
||||||
"OptionPlayed": "Gesehen",
|
"OptionPlayed": "Gesehen",
|
||||||
"OptionPremiereDate": "Premiere",
|
"OptionPremiereDate": "Premiere",
|
||||||
|
@ -1026,7 +1026,7 @@
|
||||||
"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.",
|
||||||
"PasswordResetConfirmation": "Möchtest du das Passwort wirklich zurücksetzen?",
|
"PasswordResetConfirmation": "Möchtest du das Passwort wirklich zurücksetzen?",
|
||||||
"PasswordResetHeader": "Passwort zurücksetzen",
|
"HeaderResetPassword": "Passwort zurücksetzen",
|
||||||
"PasswordSaved": "Passwort gespeichert.",
|
"PasswordSaved": "Passwort gespeichert.",
|
||||||
"People": "Personen",
|
"People": "Personen",
|
||||||
"PerfectMatch": "Perfektes Ergbnis",
|
"PerfectMatch": "Perfektes Ergbnis",
|
||||||
|
@ -1048,7 +1048,7 @@
|
||||||
"PleaseEnterNameOrId": "Bitte gib einen Namen oder eine externe ID an.",
|
"PleaseEnterNameOrId": "Bitte gib einen Namen oder eine externe ID an.",
|
||||||
"PleaseRestartServerName": "Bitte starte Jellyfin Server - {0} neu.",
|
"PleaseRestartServerName": "Bitte starte Jellyfin Server - {0} neu.",
|
||||||
"PleaseSelectTwoItems": "Bitte wähle mindestens zwei Optionen aus.",
|
"PleaseSelectTwoItems": "Bitte wähle mindestens zwei Optionen aus.",
|
||||||
"PluginInstalledMessage": "Das Plugin wurde erfolgreich installiert. Der Jellyfin-Server muss neu gestartet werden, um die Änderungen zu übernehmen.",
|
"MessagePluginInstalled": "Das Plugin wurde erfolgreich installiert. Der Jellyfin-Server muss neu gestartet werden, um die Änderungen zu übernehmen.",
|
||||||
"PreferEmbeddedTitlesOverFileNames": "Bevorzuge eingebettete Titel vor Dateinamen",
|
"PreferEmbeddedTitlesOverFileNames": "Bevorzuge eingebettete Titel vor Dateinamen",
|
||||||
"PreferEmbeddedTitlesOverFileNamesHelp": "Das bestimmt den Standard Displaytitel wenn keine lokale oder Internetmetadaten verfügbar sind.",
|
"PreferEmbeddedTitlesOverFileNamesHelp": "Das bestimmt den Standard Displaytitel wenn keine lokale oder Internetmetadaten verfügbar sind.",
|
||||||
"PreferEmbeddedEpisodeInfosOverFileNames": "Bevorzuge eingebettete Episodeninformationen vor Dateinamen",
|
"PreferEmbeddedEpisodeInfosOverFileNames": "Bevorzuge eingebettete Episodeninformationen vor Dateinamen",
|
||||||
|
@ -1071,11 +1071,11 @@
|
||||||
"Record": "Aufnehmen",
|
"Record": "Aufnehmen",
|
||||||
"RecordSeries": "Serie aufnehmen",
|
"RecordSeries": "Serie aufnehmen",
|
||||||
"RecordingCancelled": "Aufnahme abgebrochen.",
|
"RecordingCancelled": "Aufnahme abgebrochen.",
|
||||||
"RecordingPathChangeMessage": "Das Ändern des Aufnahmeverzeichnisses wird alte Aufnahmen nicht automatisch verschieben. Wenn Du das möchtest, musst Du das selber machen.",
|
"MessageChangeRecordingPath": "Das Ändern des Aufnahmeverzeichnisses wird alte Aufnahmen nicht automatisch verschieben. Wenn Du das möchtest, musst Du das selber machen.",
|
||||||
"RecordingScheduled": "Aufnahme geplant.",
|
"RecordingScheduled": "Aufnahme geplant.",
|
||||||
"Recordings": "Aufnahmen",
|
"Recordings": "Aufnahmen",
|
||||||
"Refresh": "Aktualisieren",
|
"Refresh": "Aktualisieren",
|
||||||
"RefreshDialogHelp": "Metadaten werden auf Basis der Einstellungen und Internet Services in den Jellyfin Server Einstellungen aktualisiert.",
|
"RefreshDialogHelp": "Metadaten werden auf Basis der Einstellungen und Internet Services, die im Dashboard aktiviert sind, aktualisiert.",
|
||||||
"RefreshMetadata": "Aktualisiere Metadaten",
|
"RefreshMetadata": "Aktualisiere Metadaten",
|
||||||
"RefreshQueued": "Aktualisierung eingereiht.",
|
"RefreshQueued": "Aktualisierung eingereiht.",
|
||||||
"ReleaseDate": "Veröffentlichungsdatum",
|
"ReleaseDate": "Veröffentlichungsdatum",
|
||||||
|
@ -1209,7 +1209,7 @@
|
||||||
"TvLibraryHelp": "Überprüfe den {0}Serienbenennungsleitfaden{1}.",
|
"TvLibraryHelp": "Überprüfe den {0}Serienbenennungsleitfaden{1}.",
|
||||||
"Uniform": "Einheitlich",
|
"Uniform": "Einheitlich",
|
||||||
"UninstallPluginConfirmation": "Möchtest du {0} wirklich deinstallieren?",
|
"UninstallPluginConfirmation": "Möchtest du {0} wirklich deinstallieren?",
|
||||||
"UninstallPluginHeader": "Plugin deinstallieren",
|
"HeaderUninstallPlugin": "Plugin deinstallieren",
|
||||||
"Unmute": "Ton ein",
|
"Unmute": "Ton ein",
|
||||||
"Unplayed": "Ungesehen",
|
"Unplayed": "Ungesehen",
|
||||||
"Unrated": "Nicht bewertet",
|
"Unrated": "Nicht bewertet",
|
||||||
|
@ -1369,7 +1369,7 @@
|
||||||
"TagsValue": "Markierungen: {0}",
|
"TagsValue": "Markierungen: {0}",
|
||||||
"Thumb": "Miniaturansicht",
|
"Thumb": "Miniaturansicht",
|
||||||
"Whitelist": "Erlaubt",
|
"Whitelist": "Erlaubt",
|
||||||
"AuthProviderHelp": "Wähle einen Authentifizierungsanbieter, der zur Authentifizierung des Passworts dieses Benutzes verwendet werden soll.",
|
"AuthProviderHelp": "Wähle einen Authentifizierungsanbieter, der zur Authentifizierung des Passworts dieses Benutzers verwendet werden soll.",
|
||||||
"Features": "Funktionen",
|
"Features": "Funktionen",
|
||||||
"HeaderFavoriteBooks": "Lieblingsbücher",
|
"HeaderFavoriteBooks": "Lieblingsbücher",
|
||||||
"HeaderFavoriteMovies": "Lieblingsfilme",
|
"HeaderFavoriteMovies": "Lieblingsfilme",
|
||||||
|
@ -1396,7 +1396,7 @@
|
||||||
"OptionDownloadBoxImage": "Box",
|
"OptionDownloadBoxImage": "Box",
|
||||||
"OptionLoginAttemptsBeforeLockout": "Legt fest, wie viele falsche Anmeldeversuche durchgeführt werden können, bevor es zur Sperrung kommt.",
|
"OptionLoginAttemptsBeforeLockout": "Legt fest, wie viele falsche Anmeldeversuche durchgeführt werden können, bevor es zur Sperrung kommt.",
|
||||||
"OptionLoginAttemptsBeforeLockoutHelp": "Null (0) bedeutet den Standardwert von drei Versuchen für normale, sowie fünf für Administrator-Benutzer zu übernehmen. Ein Wert von -1 deaktiviert die Funktion.",
|
"OptionLoginAttemptsBeforeLockoutHelp": "Null (0) bedeutet den Standardwert von drei Versuchen für normale, sowie fünf für Administrator-Benutzer zu übernehmen. Ein Wert von -1 deaktiviert die Funktion.",
|
||||||
"PasswordResetProviderHelp": "Wählen Sie einen Password Reset Provider, der verwendet werden soll, wenn dieser Benutzer ein Passwort zurücksetzen möchte",
|
"PasswordResetProviderHelp": "Wählen Sie einen Password Reset Provider, der verwendet werden soll, wenn dieser Benutzer ein Passwort zurücksetzen möchte.",
|
||||||
"Box": "Box",
|
"Box": "Box",
|
||||||
"HeaderHome": "Startseite",
|
"HeaderHome": "Startseite",
|
||||||
"LabelAudioCodec": "Audiocodec:",
|
"LabelAudioCodec": "Audiocodec:",
|
||||||
|
@ -1414,7 +1414,7 @@
|
||||||
"LabelTranscodingFramerate": "Transcodierrate:",
|
"LabelTranscodingFramerate": "Transcodierrate:",
|
||||||
"LabelAudioSampleRate": "Audio-Abtastrate:",
|
"LabelAudioSampleRate": "Audio-Abtastrate:",
|
||||||
"LabelBaseUrl": "Basis URL:",
|
"LabelBaseUrl": "Basis URL:",
|
||||||
"LabelBaseUrlHelp": "Fügt ein benutzerdefiniertes Unterverzeichnis zur Server-URL hinzu, zum Beispiel: <code>http://example.com/<b><baseurl></b></code>",
|
"LabelBaseUrlHelp": "Füge ein benutzerdefiniertes Unterverzeichnis zur Server-URL hinzu, zum Beispiel: <code>http://example.com/<b><baseurl></b></code>",
|
||||||
"LabelFolder": "Ordner:",
|
"LabelFolder": "Ordner:",
|
||||||
"LabelPasswordResetProvider": "Anbieter zum Zurücksetzen des Passwortes:",
|
"LabelPasswordResetProvider": "Anbieter zum Zurücksetzen des Passwortes:",
|
||||||
"LabelPlayMethod": "Spielmethode:",
|
"LabelPlayMethod": "Spielmethode:",
|
||||||
|
@ -1504,7 +1504,7 @@
|
||||||
"SaveChanges": "Änderungen speichern",
|
"SaveChanges": "Änderungen speichern",
|
||||||
"LabelRequireHttpsHelp": "Wenn dies ausgewählt ist, leitet der Server alle Anfragen über HTTP an HTTPS weiter. Dies hat keinen Effekt, falls der Server nicht auf HTTPS hört.",
|
"LabelRequireHttpsHelp": "Wenn dies ausgewählt ist, leitet der Server alle Anfragen über HTTP an HTTPS weiter. Dies hat keinen Effekt, falls der Server nicht auf HTTPS hört.",
|
||||||
"LabelRequireHttps": "Erfordere HTTPS",
|
"LabelRequireHttps": "Erfordere HTTPS",
|
||||||
"LabelEnableHttpsHelp": "Erlaubt es dem Server, den konfigurierten HTTPS-Port zu beobachten. Damit dies geschehen kann, muss ein gültiges Zertifikat konfiguriert sein.",
|
"LabelEnableHttpsHelp": "Beobachtet den konfigurierten HTTPS-Port. Damit dies geschehen kann, muss ein gültiges Zertifikat bereitgestellt werden.",
|
||||||
"LabelEnableHttps": "Aktiviere HTTPS",
|
"LabelEnableHttps": "Aktiviere HTTPS",
|
||||||
"HeaderServerAddressSettings": "Server-Adresseinstellungen",
|
"HeaderServerAddressSettings": "Server-Adresseinstellungen",
|
||||||
"HeaderRemoteAccessSettings": "Fernzugriffs-Einstellungen",
|
"HeaderRemoteAccessSettings": "Fernzugriffs-Einstellungen",
|
||||||
|
@ -1543,8 +1543,8 @@
|
||||||
"EnableDetailsBanner": "Detailbanner",
|
"EnableDetailsBanner": "Detailbanner",
|
||||||
"ShowMore": "Mehr anzeigen",
|
"ShowMore": "Mehr anzeigen",
|
||||||
"ShowLess": "Weniger anzeigen",
|
"ShowLess": "Weniger anzeigen",
|
||||||
"EnableBlurhashHelp": "Bilder, die noch nicht fertig geladen wurden, werden mit einem verschwommenen Platzhalter dargestellt",
|
"EnableBlurHashHelp": "Bilder, die noch nicht fertig geladen wurden, werden mit einem verschwommenen Platzhalter dargestellt.",
|
||||||
"EnableBlurhash": "Verschwommene Platzhalter für Bilder erlauben",
|
"EnableBlurHash": "Verschwommene Platzhalter für Bilder erlauben",
|
||||||
"EnableFasterAnimations": "Schnellere Animationen",
|
"EnableFasterAnimations": "Schnellere Animationen",
|
||||||
"EnableDecodingColorDepth10Vp9": "Aktiviere 10-Bit-Hardware-Dekodierung für VP9",
|
"EnableDecodingColorDepth10Vp9": "Aktiviere 10-Bit-Hardware-Dekodierung für VP9",
|
||||||
"EnableDecodingColorDepth10Hevc": "Aktiviere 10-Bit-Hardware-Dekodierung für HEVC",
|
"EnableDecodingColorDepth10Hevc": "Aktiviere 10-Bit-Hardware-Dekodierung für HEVC",
|
||||||
|
@ -1564,5 +1564,8 @@
|
||||||
"Writers": "Autoren",
|
"Writers": "Autoren",
|
||||||
"ClearQueue": "Wiedergabeliste leeren",
|
"ClearQueue": "Wiedergabeliste leeren",
|
||||||
"StopPlayback": "Wiedergabe anhalten",
|
"StopPlayback": "Wiedergabe anhalten",
|
||||||
"ViewAlbumArtist": "Zeige Albumkünstler"
|
"ViewAlbumArtist": "Zeige Albumkünstler",
|
||||||
|
"PreviousTrack": "Zum Vorherigen springen",
|
||||||
|
"NextTrack": "Zum Nächsten springen",
|
||||||
|
"LabelUnstable": "Instabil"
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,7 +43,7 @@
|
||||||
"Books": "Βιβλία",
|
"Books": "Βιβλία",
|
||||||
"Box": "Κουτί",
|
"Box": "Κουτί",
|
||||||
"Browse": "Αναζήτηση",
|
"Browse": "Αναζήτηση",
|
||||||
"BrowsePluginCatalogMessage": "Πλοηγηθείτε στον κατάλογο plugin μας για να δείτε τα διαθέσιμα plugins.",
|
"MessageBrowsePluginCatalog": "Πλοηγηθείτε στον κατάλογο plugin μας για να δείτε τα διαθέσιμα plugins.",
|
||||||
"BurnSubtitlesHelp": "Καθορίζει αν ο διακομιστής πρέπει να εγγράψει τους υπότιτλους κατά τη μετατροπή βίντεο ανάλογα με τη μορφή των υπότιτλων. Η αποφυγή της εγγραφής στους υπότιτλους θα βελτιώσει την απόδοση του διακομιστή. Επιλέξτε Αυτόματα για να εγγράψετε μορφές βασισμένες σε εικόνες (VOBSUB, PGS, SUB / IDX κ.λπ.) και ορισμένους υπότιτλους ASS / SSA.",
|
"BurnSubtitlesHelp": "Καθορίζει αν ο διακομιστής πρέπει να εγγράψει τους υπότιτλους κατά τη μετατροπή βίντεο ανάλογα με τη μορφή των υπότιτλων. Η αποφυγή της εγγραφής στους υπότιτλους θα βελτιώσει την απόδοση του διακομιστή. Επιλέξτε Αυτόματα για να εγγράψετε μορφές βασισμένες σε εικόνες (VOBSUB, PGS, SUB / IDX κ.λπ.) και ορισμένους υπότιτλους ASS / SSA.",
|
||||||
"ButtonAdd": "Πρόσθεσε",
|
"ButtonAdd": "Πρόσθεσε",
|
||||||
"ButtonAddMediaLibrary": "Προσθήκη βιβλιοθήκης πολυμέσων",
|
"ButtonAddMediaLibrary": "Προσθήκη βιβλιοθήκης πολυμέσων",
|
||||||
|
@ -146,7 +146,7 @@
|
||||||
"DatePlayed": "Ημερομηνία Αναπαραγωγής",
|
"DatePlayed": "Ημερομηνία Αναπαραγωγής",
|
||||||
"DeathDateValue": "Πέθανε: {0}",
|
"DeathDateValue": "Πέθανε: {0}",
|
||||||
"Default": "Προεπιλογή",
|
"Default": "Προεπιλογή",
|
||||||
"DefaultErrorMessage": "Παρουσιάστηκε σφάλμα κατά την επεξεργασία του αιτήματός σας. Παρακαλώ δοκιμάστε ξανά αργότερα.",
|
"ErrorDefault": "Παρουσιάστηκε σφάλμα κατά την επεξεργασία του αιτήματός σας. Παρακαλώ δοκιμάστε ξανά αργότερα.",
|
||||||
"DefaultMetadataLangaugeDescription": "Αυτές είναι οι προεπιλογές σας και μπορούν να προσαρμοστούν σε βάση ανά βιβλιοθήκη.",
|
"DefaultMetadataLangaugeDescription": "Αυτές είναι οι προεπιλογές σας και μπορούν να προσαρμοστούν σε βάση ανά βιβλιοθήκη.",
|
||||||
"DefaultSubtitlesHelp": "Οι υπότιτλοι φορτώνονται με βάση τις προεπιλεγμένες και αναγκασμένες σημαίες στα ενσωματωμένα μεταδεδομένα. Οι προτιμήσεις γλώσσας εξετάζονται όταν υπάρχουν πολλές επιλογές.",
|
"DefaultSubtitlesHelp": "Οι υπότιτλοι φορτώνονται με βάση τις προεπιλεγμένες και αναγκασμένες σημαίες στα ενσωματωμένα μεταδεδομένα. Οι προτιμήσεις γλώσσας εξετάζονται όταν υπάρχουν πολλές επιλογές.",
|
||||||
"Delete": "Διαγραφή",
|
"Delete": "Διαγραφή",
|
||||||
|
@ -206,7 +206,7 @@
|
||||||
"Episodes": "Επεισόδια",
|
"Episodes": "Επεισόδια",
|
||||||
"ErrorAddingMediaPathToVirtualFolder": "Παρουσιάστηκε σφάλμα κατά την προσθήκη της διαδρομής πολυμέσων. Βεβαιωθείτε ότι η διαδρομή είναι έγκυρη και ότι η διαδικασία του διακομιστή Jellyfin έχει πρόσβαση σε αυτήν τη θέση.",
|
"ErrorAddingMediaPathToVirtualFolder": "Παρουσιάστηκε σφάλμα κατά την προσθήκη της διαδρομής πολυμέσων. Βεβαιωθείτε ότι η διαδρομή είναι έγκυρη και ότι η διαδικασία του διακομιστή Jellyfin έχει πρόσβαση σε αυτήν τη θέση.",
|
||||||
"ErrorDeletingItem": "Παρουσιάστηκε σφάλμα κατά τη διαγραφή του στοιχείου από τον διακομιστή Jellyfin. Βεβαιωθείτε ότι ο διακομιστής Jellyfin έχει πρόσβαση εγγραφής στο φάκελο πολυμέσων και προσπαθήστε ξανά.",
|
"ErrorDeletingItem": "Παρουσιάστηκε σφάλμα κατά τη διαγραφή του στοιχείου από τον διακομιστή Jellyfin. Βεβαιωθείτε ότι ο διακομιστής Jellyfin έχει πρόσβαση εγγραφής στο φάκελο πολυμέσων και προσπαθήστε ξανά.",
|
||||||
"ErrorMessageStartHourGreaterThanEnd": "Η ώρα λήξης πρέπει να είναι μεγαλύτερη από την ώρα έναρξης.",
|
"ErrorStartHourGreaterThanEnd": "Η ώρα λήξης πρέπει να είναι μεγαλύτερη από την ώρα έναρξης.",
|
||||||
"EveryNDays": "Κάθε {0} μέρες",
|
"EveryNDays": "Κάθε {0} μέρες",
|
||||||
"ExitFullscreen": "Έξοδος από τη πλήρη οθόνη",
|
"ExitFullscreen": "Έξοδος από τη πλήρη οθόνη",
|
||||||
"ExtraLarge": "Πολύ Μεγάλο",
|
"ExtraLarge": "Πολύ Μεγάλο",
|
||||||
|
@ -794,8 +794,8 @@
|
||||||
"Next": "Επόμενο",
|
"Next": "Επόμενο",
|
||||||
"NextUp": "Επόμενο",
|
"NextUp": "Επόμενο",
|
||||||
"No": "Οχι",
|
"No": "Οχι",
|
||||||
"NoNextUpItemsMessage": "Δεν βρέθηκε κανένα. Ξεκινήστε παρακολουθώντας τις εκπομπές σας!",
|
"MessageNoNextUpItems": "Δεν βρέθηκε κανένα. Ξεκινήστε παρακολουθώντας τις εκπομπές σας!",
|
||||||
"NoPluginConfigurationMessage": "Αυτό το plugin δεν απαιτεί ρυθμίσεις.",
|
"MessageNoPluginConfiguration": "Αυτό το plugin δεν απαιτεί ρυθμίσεις.",
|
||||||
"NoSubtitleSearchResultsFound": "Δεν βρέθηκαν αποτελέσματα.",
|
"NoSubtitleSearchResultsFound": "Δεν βρέθηκαν αποτελέσματα.",
|
||||||
"NoSubtitles": "Χωρίς Υπότιτλους",
|
"NoSubtitles": "Χωρίς Υπότιτλους",
|
||||||
"NoSubtitlesHelp": "Οι υπότιτλοι δεν θα φορτωθούν από προεπιλογή.Μπορούν ακόμα να ενεργοποιούνται χειροκίνητα κατά την αναπαραγωγή.",
|
"NoSubtitlesHelp": "Οι υπότιτλοι δεν θα φορτωθούν από προεπιλογή.Μπορούν ακόμα να ενεργοποιούνται χειροκίνητα κατά την αναπαραγωγή.",
|
||||||
|
@ -925,7 +925,7 @@
|
||||||
"PasswordMatchError": "Ο κωδικός πρόσβασης και ο κωδικός επιβεβαίωσης πρέπει να είναι ίδιοι.",
|
"PasswordMatchError": "Ο κωδικός πρόσβασης και ο κωδικός επιβεβαίωσης πρέπει να είναι ίδιοι.",
|
||||||
"PasswordResetComplete": "Ο κωδικός πρόσβασης επαναφέρθηκε.",
|
"PasswordResetComplete": "Ο κωδικός πρόσβασης επαναφέρθηκε.",
|
||||||
"PasswordResetConfirmation": "Είστε σίγουροι ότι θέλετε να επαναφέρετε τον κωδικό πρόσβασης;",
|
"PasswordResetConfirmation": "Είστε σίγουροι ότι θέλετε να επαναφέρετε τον κωδικό πρόσβασης;",
|
||||||
"PasswordResetHeader": "Επαναφορά του κωδικού πρόσβασης",
|
"HeaderResetPassword": "Επαναφορά του κωδικού πρόσβασης",
|
||||||
"PasswordSaved": "Ο κωδικός πρόσβασης αποθηκεύτηκε.",
|
"PasswordSaved": "Ο κωδικός πρόσβασης αποθηκεύτηκε.",
|
||||||
"People": "Πρόσωπα",
|
"People": "Πρόσωπα",
|
||||||
"PerfectMatch": "Τέλεια αντιστοίχιση",
|
"PerfectMatch": "Τέλεια αντιστοίχιση",
|
||||||
|
@ -946,7 +946,7 @@
|
||||||
"PleaseEnterNameOrId": "Εισαγάγετε ένα όνομα ή ένα εξωτερικό αναγνωριστικό.",
|
"PleaseEnterNameOrId": "Εισαγάγετε ένα όνομα ή ένα εξωτερικό αναγνωριστικό.",
|
||||||
"PleaseRestartServerName": "Κάντε επανεκκίνηση του Jellyfin Server - {0}.",
|
"PleaseRestartServerName": "Κάντε επανεκκίνηση του Jellyfin Server - {0}.",
|
||||||
"PleaseSelectTwoItems": "Επιλέξτε τουλάχιστον δύο στοιχεία.",
|
"PleaseSelectTwoItems": "Επιλέξτε τουλάχιστον δύο στοιχεία.",
|
||||||
"PluginInstalledMessage": "Η προσθήκη έχει εγκατασταθεί με επιτυχία. Θα πρέπει να γίνει επανεκκίνηση του διακομιστή Jellyfin για να εφαρμοστούν οι αλλαγές.",
|
"MessagePluginInstalled": "Η προσθήκη έχει εγκατασταθεί με επιτυχία. Θα πρέπει να γίνει επανεκκίνηση του διακομιστή Jellyfin για να εφαρμοστούν οι αλλαγές.",
|
||||||
"Premiere": "Πρεμιέρα",
|
"Premiere": "Πρεμιέρα",
|
||||||
"Premieres": "Πρεμιέρες",
|
"Premieres": "Πρεμιέρες",
|
||||||
"Previous": "Προηγούμενο",
|
"Previous": "Προηγούμενο",
|
||||||
|
@ -1103,7 +1103,7 @@
|
||||||
"Tuesday": "Τρίτη",
|
"Tuesday": "Τρίτη",
|
||||||
"Uniform": "ομοειδής",
|
"Uniform": "ομοειδής",
|
||||||
"UninstallPluginConfirmation": "Είστε σίγουροι ότι θέλετε να απεγκαταστήσετε;",
|
"UninstallPluginConfirmation": "Είστε σίγουροι ότι θέλετε να απεγκαταστήσετε;",
|
||||||
"UninstallPluginHeader": "απεγκατάστησετε το plugin",
|
"HeaderUninstallPlugin": "απεγκατάστησετε το plugin",
|
||||||
"Unmute": "Με ήχο",
|
"Unmute": "Με ήχο",
|
||||||
"Unplayed": "Δεν παίχθηκε",
|
"Unplayed": "Δεν παίχθηκε",
|
||||||
"Unrated": "Χωρίς Βαθμολογία",
|
"Unrated": "Χωρίς Βαθμολογία",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"AdditionalNotificationServices": "Browse the plugin catalogue to install additional notification services.",
|
"AdditionalNotificationServices": "Browse the plugin catalogue to install additional notification services.",
|
||||||
"BrowsePluginCatalogMessage": "Browse our plugin catalogue to view available plugins.",
|
"MessageBrowsePluginCatalog": "Browse our plugin catalogue to view available plugins.",
|
||||||
"CinemaModeConfigurationHelp": "Cinema mode brings the theatre experience straight to your living room with the ability to play trailers and custom intros before the main feature.",
|
"CinemaModeConfigurationHelp": "Cinema mode brings the theatre experience straight to your living room with the ability to play trailers and custom intros before the main feature.",
|
||||||
"ColorPrimaries": "Colour primaries",
|
"ColorPrimaries": "Colour primaries",
|
||||||
"ColorSpace": "Colour space",
|
"ColorSpace": "Colour space",
|
||||||
|
@ -202,7 +202,7 @@
|
||||||
"DatePlayed": "Date played",
|
"DatePlayed": "Date played",
|
||||||
"DeathDateValue": "Died: {0}",
|
"DeathDateValue": "Died: {0}",
|
||||||
"Default": "Default",
|
"Default": "Default",
|
||||||
"DefaultErrorMessage": "There was an error processing the request. Please try again later.",
|
"ErrorDefault": "There was an error processing the request. Please try again later.",
|
||||||
"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.",
|
||||||
"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.",
|
||||||
|
@ -269,7 +269,7 @@
|
||||||
"ErrorAddingXmlTvFile": "There was an error accessing the XMLTV file. Please ensure the file exists and try again.",
|
"ErrorAddingXmlTvFile": "There was an error accessing the XMLTV file. Please ensure the file exists and try again.",
|
||||||
"ErrorDeletingItem": "There was an error deleting the item from Jellyfin Server. Please check that Jellyfin Server has write access to the media folder and try again.",
|
"ErrorDeletingItem": "There was an error deleting the item from Jellyfin Server. Please check that Jellyfin Server has write access to the media folder and try again.",
|
||||||
"ErrorGettingTvLineups": "There was an error downloading TV lineups. Please ensure your information is correct and try again.",
|
"ErrorGettingTvLineups": "There was an error downloading TV lineups. Please ensure your information is correct and try again.",
|
||||||
"ErrorMessageStartHourGreaterThanEnd": "End time must be greater than the start time.",
|
"ErrorStartHourGreaterThanEnd": "End time must be greater than the start time.",
|
||||||
"ErrorPleaseSelectLineup": "Please select a lineup and try again. If no lineups are available, then please check that your username, password, and postal code is correct.",
|
"ErrorPleaseSelectLineup": "Please select a lineup and try again. If no lineups are available, then please check that your username, password, and postal code is correct.",
|
||||||
"ErrorSavingTvProvider": "There was an error saving the TV provider. Please ensure it is accessible and try again.",
|
"ErrorSavingTvProvider": "There was an error saving the TV provider. Please ensure it is accessible and try again.",
|
||||||
"EveryNDays": "Every {0} days",
|
"EveryNDays": "Every {0} days",
|
||||||
|
@ -466,7 +466,7 @@
|
||||||
"Unrated": "Unrated",
|
"Unrated": "Unrated",
|
||||||
"Unplayed": "Unplayed",
|
"Unplayed": "Unplayed",
|
||||||
"Unmute": "Unmute",
|
"Unmute": "Unmute",
|
||||||
"UninstallPluginHeader": "Uninstall Plugin",
|
"HeaderUninstallPlugin": "Uninstall Plugin",
|
||||||
"Trailers": "Trailers",
|
"Trailers": "Trailers",
|
||||||
"TrackCount": "{0} tracks",
|
"TrackCount": "{0} tracks",
|
||||||
"TitlePlayback": "Playback",
|
"TitlePlayback": "Playback",
|
||||||
|
@ -567,7 +567,7 @@
|
||||||
"Refresh": "Refresh",
|
"Refresh": "Refresh",
|
||||||
"Recordings": "Recordings",
|
"Recordings": "Recordings",
|
||||||
"RecordingScheduled": "Recording scheduled.",
|
"RecordingScheduled": "Recording scheduled.",
|
||||||
"RecordingPathChangeMessage": "Changing your recording folder will not migrate existing recordings from the old location to the new. You'll need to move them manually if desired.",
|
"MessageChangeRecordingPath": "Changing your recording folder will not migrate existing recordings from the old location to the new. You'll need to move them manually if desired.",
|
||||||
"RecordingCancelled": "Recording cancelled.",
|
"RecordingCancelled": "Recording cancelled.",
|
||||||
"RecordSeries": "Record series",
|
"RecordSeries": "Record series",
|
||||||
"Record": "Record",
|
"Record": "Record",
|
||||||
|
@ -585,7 +585,7 @@
|
||||||
"Premiere": "Premiere",
|
"Premiere": "Premiere",
|
||||||
"PreferEmbeddedTitlesOverFileNamesHelp": "This determines the default display title when no internet metadata or local metadata is available.",
|
"PreferEmbeddedTitlesOverFileNamesHelp": "This determines the default display title when no internet metadata or local metadata is available.",
|
||||||
"PreferEmbeddedTitlesOverFileNames": "Prefer embedded titles over filenames",
|
"PreferEmbeddedTitlesOverFileNames": "Prefer embedded titles over filenames",
|
||||||
"PluginInstalledMessage": "The plugin has been successfully installed. Jellyfin Server will need to be restarted for changes to take effect.",
|
"MessagePluginInstalled": "The plugin has been successfully installed. Jellyfin Server will need to be restarted for changes to take effect.",
|
||||||
"PleaseSelectTwoItems": "Please select at least two items.",
|
"PleaseSelectTwoItems": "Please select at least two items.",
|
||||||
"PleaseRestartServerName": "Please restart Jellyfin Server - {0}.",
|
"PleaseRestartServerName": "Please restart Jellyfin Server - {0}.",
|
||||||
"PleaseConfirmPluginInstallation": "Please click OK to confirm you've read the above and wish to proceed with the plugin installation.",
|
"PleaseConfirmPluginInstallation": "Please click OK to confirm you've read the above and wish to proceed with the plugin installation.",
|
||||||
|
@ -602,7 +602,7 @@
|
||||||
"PictureInPicture": "Picture in picture",
|
"PictureInPicture": "Picture in picture",
|
||||||
"PerfectMatch": "Perfect match",
|
"PerfectMatch": "Perfect match",
|
||||||
"PasswordSaved": "Password saved.",
|
"PasswordSaved": "Password saved.",
|
||||||
"PasswordResetHeader": "Reset Password",
|
"HeaderResetPassword": "Reset Password",
|
||||||
"PasswordResetConfirmation": "Are you sure you wish to reset the password?",
|
"PasswordResetConfirmation": "Are you sure you wish to reset the password?",
|
||||||
"PasswordResetComplete": "The password has been reset.",
|
"PasswordResetComplete": "The password has been reset.",
|
||||||
"PasswordMatchError": "Password and password confirmation must match.",
|
"PasswordMatchError": "Password and password confirmation must match.",
|
||||||
|
@ -686,8 +686,8 @@
|
||||||
"None": "None",
|
"None": "None",
|
||||||
"NoSubtitlesHelp": "Subtitles will not be loaded by default. They can still be turned on manually during playback.",
|
"NoSubtitlesHelp": "Subtitles will not be loaded by default. They can still be turned on manually during playback.",
|
||||||
"NoSubtitles": "None",
|
"NoSubtitles": "None",
|
||||||
"NoPluginConfigurationMessage": "This plugin has no settings to configure.",
|
"MessageNoPluginConfiguration": "This plugin has no settings to configure.",
|
||||||
"NoNextUpItemsMessage": "None found. Start watching your shows!",
|
"MessageNoNextUpItems": "None found. Start watching your shows!",
|
||||||
"No": "No",
|
"No": "No",
|
||||||
"NextUp": "Next Up",
|
"NextUp": "Next Up",
|
||||||
"NewEpisodesOnly": "New episodes only",
|
"NewEpisodesOnly": "New episodes only",
|
||||||
|
@ -1501,8 +1501,8 @@
|
||||||
"ApiKeysCaption": "List of the currently enabled API keys",
|
"ApiKeysCaption": "List of the currently enabled API keys",
|
||||||
"ButtonCast": "Cast",
|
"ButtonCast": "Cast",
|
||||||
"ButtonSyncPlay": "SyncPlay",
|
"ButtonSyncPlay": "SyncPlay",
|
||||||
"EnableBlurhashHelp": "Images that are still being loaded will be displayed with a blurred placeholder",
|
"EnableBlurHashHelp": "Images that are still being loaded will be displayed with a blurred placeholder",
|
||||||
"EnableBlurhash": "Enable blurred placeholders for images",
|
"EnableBlurHash": "Enable blurred placeholders for images",
|
||||||
"TabDVR": "DVR",
|
"TabDVR": "DVR",
|
||||||
"TabRepositories": "Repositories",
|
"TabRepositories": "Repositories",
|
||||||
"SyncPlayAccessHelp": "Select the level of access this user has to the SyncPlay feature. SyncPlay enables to sync playback with other devices.",
|
"SyncPlayAccessHelp": "Select the level of access this user has to the SyncPlay feature. SyncPlay enables to sync playback with other devices.",
|
||||||
|
|
|
@ -45,7 +45,7 @@
|
||||||
"AspectRatio": "Aspect Ratio",
|
"AspectRatio": "Aspect Ratio",
|
||||||
"AttributeNew": "New",
|
"AttributeNew": "New",
|
||||||
"Audio": "Audio",
|
"Audio": "Audio",
|
||||||
"AuthProviderHelp": "Select an Authentication Provider to be used to authenticate this user's password.",
|
"AuthProviderHelp": "Select an authentication provider to be used to authenticate this user's password.",
|
||||||
"Auto": "Auto",
|
"Auto": "Auto",
|
||||||
"AutoBasedOnLanguageSetting": "Auto (based on language setting)",
|
"AutoBasedOnLanguageSetting": "Auto (based on language setting)",
|
||||||
"Backdrop": "Backdrop",
|
"Backdrop": "Backdrop",
|
||||||
|
@ -61,7 +61,7 @@
|
||||||
"BoxSet": "Box Set",
|
"BoxSet": "Box Set",
|
||||||
"BoxRear": "Box (rear)",
|
"BoxRear": "Box (rear)",
|
||||||
"Browse": "Browse",
|
"Browse": "Browse",
|
||||||
"BrowsePluginCatalogMessage": "Browse our plugin catalog to view available plugins.",
|
"MessageBrowsePluginCatalog": "Browse our plugin catalog to view available plugins.",
|
||||||
"BurnSubtitlesHelp": "Determines if the server should burn in subtitles when transcoding videos. Avoiding this will greatly improve performance. Select Auto to burn image based formats (VOBSUB, PGS, SUB, IDX, …) and certain ASS or SSA subtitles.",
|
"BurnSubtitlesHelp": "Determines if the server should burn in subtitles when transcoding videos. Avoiding this will greatly improve performance. Select Auto to burn image based formats (VOBSUB, PGS, SUB, IDX, …) and certain ASS or SSA subtitles.",
|
||||||
"ButtonAdd": "Add",
|
"ButtonAdd": "Add",
|
||||||
"ButtonAddImage": "Add Image",
|
"ButtonAddImage": "Add Image",
|
||||||
|
@ -178,7 +178,7 @@
|
||||||
"DatePlayed": "Date played",
|
"DatePlayed": "Date played",
|
||||||
"DeathDateValue": "Died: {0}",
|
"DeathDateValue": "Died: {0}",
|
||||||
"Default": "Default",
|
"Default": "Default",
|
||||||
"DefaultErrorMessage": "There was an error processing the request. Please try again later.",
|
"ErrorDefault": "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.",
|
"DeinterlaceMethodHelp": "Select the deinterlacing method to use when transcoding interlaced content.",
|
||||||
|
@ -195,8 +195,8 @@
|
||||||
"DetectingDevices": "Detecting devices",
|
"DetectingDevices": "Detecting devices",
|
||||||
"DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.",
|
"DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.",
|
||||||
"DirectPlaying": "Direct playing",
|
"DirectPlaying": "Direct playing",
|
||||||
"DirectStreamHelp1": "The media is compatible with the device regarding resolution and media type (H.264, AC3, etc), but is in an incompatible file container (mkv, avi, wmv, etc). The video will be re-packaged on the fly before streaming it to the device.",
|
"DirectStreamHelp1": "The media is compatible with the device regarding resolution and media type (H.264, AC3, etc), but in an incompatible file container (mkv, avi, wmv, etc). The video will be re-packaged on the fly before being sent to the device.",
|
||||||
"DirectStreamHelp2": "Direct Streaming a file uses very little processing power without any loss in video quality.",
|
"DirectStreamHelp2": "Direct stream uses very little processing power with a minimal loss in video quality.",
|
||||||
"DirectStreaming": "Direct streaming",
|
"DirectStreaming": "Direct streaming",
|
||||||
"Director": "Director",
|
"Director": "Director",
|
||||||
"Directors": "Directors",
|
"Directors": "Directors",
|
||||||
|
@ -253,7 +253,7 @@
|
||||||
"ErrorAddingXmlTvFile": "There was an error accessing the XMLTV file. Please ensure the file exists and try again.",
|
"ErrorAddingXmlTvFile": "There was an error accessing the XMLTV file. Please ensure the file exists and try again.",
|
||||||
"ErrorDeletingItem": "There was an error deleting the item from Jellyfin Server. Please check that Jellyfin Server has write access to the media folder and try again.",
|
"ErrorDeletingItem": "There was an error deleting the item from Jellyfin Server. Please check that Jellyfin Server has write access to the media folder and try again.",
|
||||||
"ErrorGettingTvLineups": "There was an error downloading TV lineups. Please ensure your information is correct and try again.",
|
"ErrorGettingTvLineups": "There was an error downloading TV lineups. Please ensure your information is correct and try again.",
|
||||||
"ErrorMessageStartHourGreaterThanEnd": "End time must be greater than the start time.",
|
"ErrorStartHourGreaterThanEnd": "End time must be greater than the start time.",
|
||||||
"ErrorPleaseSelectLineup": "Please select a lineup and try again. If no lineups are available, then please check that your username, password, and postal code is correct.",
|
"ErrorPleaseSelectLineup": "Please select a lineup and try again. If no lineups are available, then please check that your username, password, and postal code is correct.",
|
||||||
"ErrorSavingTvProvider": "There was an error saving the TV provider. Please ensure it is accessible and try again.",
|
"ErrorSavingTvProvider": "There was an error saving the TV provider. Please ensure it is accessible and try again.",
|
||||||
"EveryNDays": "Every {0} days",
|
"EveryNDays": "Every {0} days",
|
||||||
|
@ -313,7 +313,7 @@
|
||||||
"HeaderAllowMediaDeletionFrom": "Allow Media Deletion From",
|
"HeaderAllowMediaDeletionFrom": "Allow Media Deletion From",
|
||||||
"HeaderApiKey": "API Key",
|
"HeaderApiKey": "API Key",
|
||||||
"HeaderApiKeys": "API Keys",
|
"HeaderApiKeys": "API Keys",
|
||||||
"HeaderApiKeysHelp": "External applications are required to have an API key in order to communicate with Jellyfin Server. Keys are issued by logging in with a Jellyfin account, or by manually granting the application a key.",
|
"HeaderApiKeysHelp": "External applications are required to have an API key in order to communicate with the server. Keys are issued by logging in with a normal user account or manually granting the application a key.",
|
||||||
"ApiKeysCaption": "List of the currently enabled API keys",
|
"ApiKeysCaption": "List of the currently enabled API keys",
|
||||||
"HeaderApp": "App",
|
"HeaderApp": "App",
|
||||||
"HeaderAppearsOn": "Appears On",
|
"HeaderAppearsOn": "Appears On",
|
||||||
|
@ -400,7 +400,7 @@
|
||||||
"HeaderItems": "Items",
|
"HeaderItems": "Items",
|
||||||
"HeaderKeepRecording": "Keep Recording",
|
"HeaderKeepRecording": "Keep Recording",
|
||||||
"HeaderKeepSeries": "Keep Series",
|
"HeaderKeepSeries": "Keep Series",
|
||||||
"HeaderKodiMetadataHelp": "To enable or disable NFO metadata, edit a library in Jellyfin library setup and locate the metadata savers section.",
|
"HeaderKodiMetadataHelp": "To enable or disable NFO metadata, edit a library and locate the metadata savers section.",
|
||||||
"HeaderLatestEpisodes": "Latest Episodes",
|
"HeaderLatestEpisodes": "Latest Episodes",
|
||||||
"HeaderLatestMedia": "Latest Media",
|
"HeaderLatestMedia": "Latest Media",
|
||||||
"HeaderLatestMovies": "Latest Movies",
|
"HeaderLatestMovies": "Latest Movies",
|
||||||
|
@ -450,7 +450,7 @@
|
||||||
"HeaderPreferredMetadataLanguage": "Preferred Metadata Language",
|
"HeaderPreferredMetadataLanguage": "Preferred Metadata Language",
|
||||||
"HeaderProfile": "Profile",
|
"HeaderProfile": "Profile",
|
||||||
"HeaderProfileInformation": "Profile Information",
|
"HeaderProfileInformation": "Profile Information",
|
||||||
"HeaderProfileServerSettingsHelp": "These values control how Jellyfin Server will present itself to the device.",
|
"HeaderProfileServerSettingsHelp": "These values control how the server will present itself to clients.",
|
||||||
"HeaderRecentlyPlayed": "Recently Played",
|
"HeaderRecentlyPlayed": "Recently Played",
|
||||||
"HeaderRecordingOptions": "Recording Options",
|
"HeaderRecordingOptions": "Recording Options",
|
||||||
"HeaderRecordingPostProcessing": "Recording Post Processing",
|
"HeaderRecordingPostProcessing": "Recording Post Processing",
|
||||||
|
@ -469,13 +469,13 @@
|
||||||
"HeaderSecondsValue": "{0} Seconds",
|
"HeaderSecondsValue": "{0} Seconds",
|
||||||
"HeaderSelectCertificatePath": "Select Certificate Path",
|
"HeaderSelectCertificatePath": "Select Certificate Path",
|
||||||
"HeaderSelectMetadataPath": "Select Metadata Path",
|
"HeaderSelectMetadataPath": "Select Metadata Path",
|
||||||
"HeaderSelectMetadataPathHelp": "Browse or enter the path you'd like to store metadata within. The folder must be writeable.",
|
"HeaderSelectMetadataPathHelp": "Browse or enter the path you'd like to use for metadata. The folder must be writeable.",
|
||||||
"HeaderSelectPath": "Select Path",
|
"HeaderSelectPath": "Select Path",
|
||||||
"HeaderSelectServer": "Select Server",
|
"HeaderSelectServer": "Select Server",
|
||||||
"HeaderSelectServerCachePath": "Select Server Cache Path",
|
"HeaderSelectServerCachePath": "Select Server Cache Path",
|
||||||
"HeaderSelectServerCachePathHelp": "Browse or enter the path to use for server cache files. The folder must be writeable.",
|
"HeaderSelectServerCachePathHelp": "Browse or enter the path to use for server cache files. The folder must be writeable.",
|
||||||
"HeaderSelectTranscodingPath": "Select Transcoding Temporary Path",
|
"HeaderSelectTranscodingPath": "Select Transcoding Temporary Path",
|
||||||
"HeaderSelectTranscodingPathHelp": "Browse or enter the path to use for transcoding temporary files. The folder must be writeable.",
|
"HeaderSelectTranscodingPathHelp": "Browse or enter the path to use for transcode files. The folder must be writeable.",
|
||||||
"HeaderSendMessage": "Send Message",
|
"HeaderSendMessage": "Send Message",
|
||||||
"HeaderSeries": "Series",
|
"HeaderSeries": "Series",
|
||||||
"HeaderSeriesOptions": "Series Options",
|
"HeaderSeriesOptions": "Series Options",
|
||||||
|
@ -531,8 +531,8 @@
|
||||||
"HttpsRequiresCert": "To enable secure connections, you will need to supply a trusted SSL certificate, such as Let's Encrypt. Please either supply a certificate, or disable secure connections.",
|
"HttpsRequiresCert": "To enable secure connections, you will need to supply a trusted SSL certificate, such as Let's Encrypt. Please either supply a certificate, or disable secure connections.",
|
||||||
"Identify": "Identify",
|
"Identify": "Identify",
|
||||||
"Images": "Images",
|
"Images": "Images",
|
||||||
"ImportFavoriteChannelsHelp": "If enabled, only channels that are marked as favorite on the tuner device will be imported.",
|
"ImportFavoriteChannelsHelp": "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": "Information about missing episodes will be imported into your database and displayed within seasons and series. This may cause significantly longer library scans.",
|
||||||
"InstallingPackage": "Installing {0} (version {1})",
|
"InstallingPackage": "Installing {0} (version {1})",
|
||||||
"InstantMix": "Instant mix",
|
"InstantMix": "Instant mix",
|
||||||
"ItemCount": "{0} items",
|
"ItemCount": "{0} items",
|
||||||
|
@ -565,7 +565,7 @@
|
||||||
"LabelAppName": "App name",
|
"LabelAppName": "App name",
|
||||||
"LabelAppNameExample": "Example: Sickbeard, Sonarr",
|
"LabelAppNameExample": "Example: Sickbeard, Sonarr",
|
||||||
"LabelArtists": "Artists:",
|
"LabelArtists": "Artists:",
|
||||||
"LabelArtistsHelp": "Separate multiple using ;",
|
"LabelArtistsHelp": "Separate multiple artists with a semicolon.",
|
||||||
"LabelAudio": "Audio",
|
"LabelAudio": "Audio",
|
||||||
"LabelAudioBitDepth": "Audio bit depth:",
|
"LabelAudioBitDepth": "Audio bit depth:",
|
||||||
"LabelAudioBitrate": "Audio bitrate:",
|
"LabelAudioBitrate": "Audio bitrate:",
|
||||||
|
@ -576,11 +576,11 @@
|
||||||
"LabelAuthProvider": "Authentication Provider:",
|
"LabelAuthProvider": "Authentication Provider:",
|
||||||
"LabelAutomaticallyRefreshInternetMetadataEvery": "Automatically refresh metadata from the internet:",
|
"LabelAutomaticallyRefreshInternetMetadataEvery": "Automatically refresh metadata from the internet:",
|
||||||
"LabelBindToLocalNetworkAddress": "Bind to local network address:",
|
"LabelBindToLocalNetworkAddress": "Bind to local network address:",
|
||||||
"LabelBindToLocalNetworkAddressHelp": "Optional. Override the local IP address to bind the http server to. If left empty, the server will bind to all availabile addresses. Changing this value requires restarting Jellyfin Server.",
|
"LabelBindToLocalNetworkAddressHelp": "Override the local IP address for the HTTP server. If left empty, the server will bind to all availabile addresses. Changing this value requires restarting Jellyfin Server.",
|
||||||
"LabelBirthDate": "Birth date:",
|
"LabelBirthDate": "Birth date:",
|
||||||
"LabelBirthYear": "Birth year:",
|
"LabelBirthYear": "Birth year:",
|
||||||
"LabelBitrate": "Bitrate:",
|
"LabelBitrate": "Bitrate:",
|
||||||
"LabelBlastMessageInterval": "Alive message interval (seconds)",
|
"LabelBlastMessageInterval": "Alive message interval",
|
||||||
"LabelBlastMessageIntervalHelp": "Determines the duration in seconds between blast alive messages.",
|
"LabelBlastMessageIntervalHelp": "Determines the duration in seconds between blast alive messages.",
|
||||||
"LabelBlockContentWithTags": "Block items with tags:",
|
"LabelBlockContentWithTags": "Block items with tags:",
|
||||||
"LabelBurnSubtitles": "Burn subtitles:",
|
"LabelBurnSubtitles": "Burn subtitles:",
|
||||||
|
@ -601,14 +601,14 @@
|
||||||
"LabelCustomCertificatePath": "Custom SSL certificate path:",
|
"LabelCustomCertificatePath": "Custom SSL certificate path:",
|
||||||
"LabelCustomCertificatePathHelp": "Path to a PKCS #12 file containing a certificate and private key to enable TLS support on a custom domain.",
|
"LabelCustomCertificatePathHelp": "Path to a PKCS #12 file containing a certificate and private key to enable TLS support on a custom domain.",
|
||||||
"LabelCustomCss": "Custom CSS:",
|
"LabelCustomCss": "Custom CSS:",
|
||||||
"LabelCustomCssHelp": "Apply your own custom styling to the web interface.",
|
"LabelCustomCssHelp": "Apply your own custom styles on the web interface.",
|
||||||
"LabelCustomDeviceDisplayName": "Display name:",
|
"LabelCustomDeviceDisplayName": "Display name:",
|
||||||
"LabelCustomDeviceDisplayNameHelp": "Supply a custom display name or leave empty to use the name reported by the device.",
|
"LabelCustomDeviceDisplayNameHelp": "Supply a custom display name or leave empty to use the name reported by the device.",
|
||||||
"LabelCustomRating": "Custom rating:",
|
"LabelCustomRating": "Custom rating:",
|
||||||
"LabelDashboardTheme": "Server dashboard theme:",
|
"LabelDashboardTheme": "Server dashboard theme:",
|
||||||
"LabelDateAdded": "Date added:",
|
"LabelDateAdded": "Date added:",
|
||||||
"LabelDateAddedBehavior": "Date added behavior for new content:",
|
"LabelDateAddedBehavior": "Date added behavior for new content:",
|
||||||
"LabelDateAddedBehaviorHelp": "If a metadata value is present it will always be used before either of these options.",
|
"LabelDateAddedBehaviorHelp": "If a metadata value is present, it will always be used before either of these options.",
|
||||||
"LabelDateTimeLocale": "Date time locale:",
|
"LabelDateTimeLocale": "Date time locale:",
|
||||||
"LabelDay": "Day:",
|
"LabelDay": "Day:",
|
||||||
"LabelDeathDate": "Death date:",
|
"LabelDeathDate": "Death date:",
|
||||||
|
@ -640,19 +640,19 @@
|
||||||
"LabelEnableAutomaticPortMapHelp": "Automatically forward public ports on your router to local ports on your server via UPnP. This may not work with some router models or network configurations. Changes will not apply until after a server restart.",
|
"LabelEnableAutomaticPortMapHelp": "Automatically forward public ports on your router to local ports on your server via UPnP. This may not work with some router models or network configurations. Changes will not apply until after a server restart.",
|
||||||
"LabelEnableBlastAliveMessages": "Blast alive messages",
|
"LabelEnableBlastAliveMessages": "Blast alive messages",
|
||||||
"LabelEnableBlastAliveMessagesHelp": "Enable this if the server is not detected reliably by other UPnP devices on your network.",
|
"LabelEnableBlastAliveMessagesHelp": "Enable this if the server is not detected reliably by other UPnP devices on your network.",
|
||||||
"LabelEnableDlnaClientDiscoveryInterval": "Client discovery interval (seconds)",
|
"LabelEnableDlnaClientDiscoveryInterval": "Client discovery interval",
|
||||||
"LabelEnableDlnaClientDiscoveryIntervalHelp": "Determines the duration in seconds between SSDP searches performed by Jellyfin.",
|
"LabelEnableDlnaClientDiscoveryIntervalHelp": "Determines the duration in seconds between SSDP searches performed by Jellyfin.",
|
||||||
"LabelEnableDlnaDebugLogging": "Enable DLNA debug logging",
|
"LabelEnableDlnaDebugLogging": "Enable DLNA debug logging",
|
||||||
"LabelEnableDlnaDebugLoggingHelp": "Create large log files and should only be used as needed for troubleshooting purposes.",
|
"LabelEnableDlnaDebugLoggingHelp": "Create large log files and should only be used as needed for troubleshooting purposes.",
|
||||||
"LabelEnableDlnaPlayTo": "Enable DLNA Play To",
|
"LabelEnableDlnaPlayTo": "Enable DLNA Play To",
|
||||||
"LabelEnableDlnaPlayToHelp": "Detect devices within your network and offer the ability to remote control them.",
|
"LabelEnableDlnaPlayToHelp": "Detect devices within your network and offer the ability to control them remotely.",
|
||||||
"LabelEnableDlnaServer": "Enable DLNA server",
|
"LabelEnableDlnaServer": "Enable DLNA server",
|
||||||
"LabelEnableDlnaServerHelp": "Allows UPnP devices on your network to browse and play content.",
|
"LabelEnableDlnaServerHelp": "Allows UPnP devices on your network to browse and play content.",
|
||||||
"LabelEnableHardwareDecodingFor": "Enable hardware decoding for:",
|
"LabelEnableHardwareDecodingFor": "Enable hardware decoding for:",
|
||||||
"LabelEnableHttps": "Enable HTTPS",
|
"LabelEnableHttps": "Enable HTTPS",
|
||||||
"LabelEnableHttpsHelp": "Enables the server to listen on the configured HTTPS port. A valid certificate must also be configured in order for this to take effect.",
|
"LabelEnableHttpsHelp": "Listen on the configured HTTPS port. A valid certificate must also be supplied for this to take effect.",
|
||||||
"LabelEnableRealtimeMonitor": "Enable real time monitoring",
|
"LabelEnableRealtimeMonitor": "Enable real time monitoring",
|
||||||
"LabelEnableRealtimeMonitorHelp": "Changes to files will be processed immediately, on supported file systems.",
|
"LabelEnableRealtimeMonitorHelp": "Changes to files will be processed immediately on supported file systems.",
|
||||||
"LabelEnableSingleImageInDidlLimit": "Limit to single embedded image",
|
"LabelEnableSingleImageInDidlLimit": "Limit to single embedded image",
|
||||||
"LabelEnableSingleImageInDidlLimitHelp": "Some devices will not render properly if multiple images are embedded within Didl.",
|
"LabelEnableSingleImageInDidlLimitHelp": "Some devices will not render properly if multiple images are embedded within Didl.",
|
||||||
"LabelEndDate": "End date:",
|
"LabelEndDate": "End date:",
|
||||||
|
@ -660,7 +660,7 @@
|
||||||
"LabelEvent": "Event:",
|
"LabelEvent": "Event:",
|
||||||
"LabelEveryXMinutes": "Every:",
|
"LabelEveryXMinutes": "Every:",
|
||||||
"LabelBaseUrl": "Base URL:",
|
"LabelBaseUrl": "Base URL:",
|
||||||
"LabelBaseUrlHelp": "Adds a custom subdirectory to the server URL. For example: <code>http://example.com/<b><baseurl></b></code>",
|
"LabelBaseUrlHelp": "Add a custom subdirectory to the server URL. For example: <code>http://example.com/<b><baseurl></b></code>",
|
||||||
"LabelExtractChaptersDuringLibraryScan": "Extract chapter images during the library scan",
|
"LabelExtractChaptersDuringLibraryScan": "Extract chapter images during the library scan",
|
||||||
"LabelExtractChaptersDuringLibraryScanHelp": "Generate chapter images when videos are imported during the library scan. Otherwise, they will be extracted during the chapter images scheduled task, allowing the regular library scan to complete faster.",
|
"LabelExtractChaptersDuringLibraryScanHelp": "Generate chapter images when videos are imported during the library scan. Otherwise, they will be extracted during the chapter images scheduled task, allowing the regular library scan to complete faster.",
|
||||||
"LabelFailed": "Failed",
|
"LabelFailed": "Failed",
|
||||||
|
@ -671,9 +671,9 @@
|
||||||
"LabelForgotPasswordUsernameHelp": "Enter your username, if you remember it.",
|
"LabelForgotPasswordUsernameHelp": "Enter your username, if you remember it.",
|
||||||
"LabelFormat": "Format:",
|
"LabelFormat": "Format:",
|
||||||
"LabelFriendlyName": "Friendly name:",
|
"LabelFriendlyName": "Friendly name:",
|
||||||
"LabelServerNameHelp": "This name will be used to identify the server and will default to the server's computer name.",
|
"LabelServerNameHelp": "This name will be used to identify the server and will default to the server's hostname.",
|
||||||
"LabelGroupMoviesIntoCollections": "Group movies into collections",
|
"LabelGroupMoviesIntoCollections": "Group movies into collections",
|
||||||
"LabelGroupMoviesIntoCollectionsHelp": "When displaying movie lists, movies belonging to a collection will be displayed as one grouped item.",
|
"LabelGroupMoviesIntoCollectionsHelp": "When displaying movie lists, movies in a collection will be displayed as one grouped item.",
|
||||||
"LabelH264Crf": "H264 encoding CRF:",
|
"LabelH264Crf": "H264 encoding CRF:",
|
||||||
"LabelEncoderPreset": "H264 and H265 encoding preset:",
|
"LabelEncoderPreset": "H264 and H265 encoding preset:",
|
||||||
"LabelHardwareAccelerationType": "Hardware acceleration:",
|
"LabelHardwareAccelerationType": "Hardware acceleration:",
|
||||||
|
@ -681,7 +681,7 @@
|
||||||
"LabelHomeNetworkQuality": "Home network quality:",
|
"LabelHomeNetworkQuality": "Home network quality:",
|
||||||
"LabelHomeScreenSectionValue": "Home screen section {0}:",
|
"LabelHomeScreenSectionValue": "Home screen section {0}:",
|
||||||
"LabelHttpsPort": "Local HTTPS port number:",
|
"LabelHttpsPort": "Local HTTPS port number:",
|
||||||
"LabelHttpsPortHelp": "The TCP port number that Jellyfin's HTTPS server should bind to.",
|
"LabelHttpsPortHelp": "The TCP port number for the HTTPS server.",
|
||||||
"LabelIconMaxHeight": "Icon maximum height:",
|
"LabelIconMaxHeight": "Icon maximum height:",
|
||||||
"LabelIconMaxHeightHelp": "Maximum resolution of icons exposed via upnp:icon.",
|
"LabelIconMaxHeightHelp": "Maximum resolution of icons exposed via upnp:icon.",
|
||||||
"LabelIconMaxWidth": "Icon maximum width:",
|
"LabelIconMaxWidth": "Icon maximum width:",
|
||||||
|
@ -711,7 +711,7 @@
|
||||||
"LabelLibraryPageSizeHelp": "Sets the amount of items to show on a library page. Set to 0 in order to disable paging.",
|
"LabelLibraryPageSizeHelp": "Sets the amount of items to show on a library page. Set to 0 in order to disable paging.",
|
||||||
"LabelLineup": "Lineup:",
|
"LabelLineup": "Lineup:",
|
||||||
"LabelLocalHttpServerPortNumber": "Local HTTP port number:",
|
"LabelLocalHttpServerPortNumber": "Local HTTP port number:",
|
||||||
"LabelLocalHttpServerPortNumberHelp": "The TCP port number that Jellyfin's HTTP server should bind to.",
|
"LabelLocalHttpServerPortNumberHelp": "The TCP port number for the HTTP server.",
|
||||||
"LabelLockItemToPreventChanges": "Lock this item to prevent future changes",
|
"LabelLockItemToPreventChanges": "Lock this item to prevent future changes",
|
||||||
"LabelLoginDisclaimer": "Login disclaimer:",
|
"LabelLoginDisclaimer": "Login disclaimer:",
|
||||||
"LabelLoginDisclaimerHelp": "A message that will be displayed at the bottom of the login page.",
|
"LabelLoginDisclaimerHelp": "A message that will be displayed at the bottom of the login page.",
|
||||||
|
@ -737,7 +737,7 @@
|
||||||
"LabelMetadataReaders": "Metadata readers:",
|
"LabelMetadataReaders": "Metadata readers:",
|
||||||
"LabelMetadataReadersHelp": "Rank your preferred local metadata sources in order of priority. The first file found will be read.",
|
"LabelMetadataReadersHelp": "Rank your preferred local metadata sources in order of priority. The first file found will be read.",
|
||||||
"LabelMetadataSavers": "Metadata savers:",
|
"LabelMetadataSavers": "Metadata savers:",
|
||||||
"LabelMetadataSaversHelp": "Choose the file formats to save your metadata to.",
|
"LabelMetadataSaversHelp": "Choose the file formats to use when saving your metadata.",
|
||||||
"LabelMethod": "Method:",
|
"LabelMethod": "Method:",
|
||||||
"LabelMinBackdropDownloadWidth": "Minimum backdrop download width:",
|
"LabelMinBackdropDownloadWidth": "Minimum backdrop download width:",
|
||||||
"LabelMinResumeDuration": "Minimum resume duration:",
|
"LabelMinResumeDuration": "Minimum resume duration:",
|
||||||
|
@ -753,9 +753,9 @@
|
||||||
"LabelMovieCategories": "Movie categories:",
|
"LabelMovieCategories": "Movie categories:",
|
||||||
"LabelMoviePrefix": "Movie prefix:",
|
"LabelMoviePrefix": "Movie prefix:",
|
||||||
"LabelMoviePrefixHelp": "If a prefix is applied to movie titles, enter it here so the server can handle it properly.",
|
"LabelMoviePrefixHelp": "If a prefix is applied to movie titles, enter it here so the server can handle it properly.",
|
||||||
"LabelMovieRecordingPath": "Movie recording path (optional):",
|
"LabelMovieRecordingPath": "Movie recording path:",
|
||||||
"LabelMusicStreamingTranscodingBitrate": "Music transcoding bitrate:",
|
"LabelMusicStreamingTranscodingBitrate": "Music transcoding bitrate:",
|
||||||
"LabelMusicStreamingTranscodingBitrateHelp": "Specify a max bitrate when streaming music.",
|
"LabelMusicStreamingTranscodingBitrateHelp": "Specify a maximum bitrate when streaming music.",
|
||||||
"LabelName": "Name:",
|
"LabelName": "Name:",
|
||||||
"LabelChromecastVersion": "Chromecast Version",
|
"LabelChromecastVersion": "Chromecast Version",
|
||||||
"LabelStable": "Stable",
|
"LabelStable": "Stable",
|
||||||
|
@ -770,7 +770,7 @@
|
||||||
"LabelNumber": "Number:",
|
"LabelNumber": "Number:",
|
||||||
"LabelNumberOfGuideDays": "Number of days of guide data to download:",
|
"LabelNumberOfGuideDays": "Number of days of guide data to download:",
|
||||||
"LabelNumberOfGuideDaysHelp": "Downloading more days worth of guide data provides the ability to schedule out further in advance and view more listings, but it will also take longer to download. Auto will choose based on the number of channels.",
|
"LabelNumberOfGuideDaysHelp": "Downloading more days worth of guide data provides the ability to schedule out further in advance and view more listings, but it will also take longer to download. Auto will choose based on the number of channels.",
|
||||||
"LabelOptionalNetworkPath": "(Optional) Shared network folder:",
|
"LabelOptionalNetworkPath": "Shared network folder:",
|
||||||
"LabelOptionalNetworkPathHelp": "If this folder is shared on your network, supplying the network share path can allow Jellyfin apps on other devices to access media files directly. For example, {0} or {1}.",
|
"LabelOptionalNetworkPathHelp": "If this folder is shared on your network, supplying the network share path can allow Jellyfin apps on other devices to access media files directly. For example, {0} or {1}.",
|
||||||
"LabelOriginalAspectRatio": "Original aspect ratio:",
|
"LabelOriginalAspectRatio": "Original aspect ratio:",
|
||||||
"LabelOriginalTitle": "Original title:",
|
"LabelOriginalTitle": "Original title:",
|
||||||
|
@ -822,7 +822,7 @@
|
||||||
"LabelRemoteClientBitrateLimitHelp": "An optional per-stream bitrate limit for all out of network devices. This is useful to prevent devices from requesting a higher bitrate than your internet connection can handle. This may result in increased CPU load on your server in order to transcode videos on the fly to a lower bitrate.",
|
"LabelRemoteClientBitrateLimitHelp": "An optional per-stream bitrate limit for all out of network devices. This is useful to prevent devices from requesting a higher bitrate than your internet connection can handle. This may result in increased CPU load on your server in order to transcode videos on the fly to a lower bitrate.",
|
||||||
"LabelRequireHttps": "Require HTTPS",
|
"LabelRequireHttps": "Require HTTPS",
|
||||||
"LabelRequireHttpsHelp": "If checked, the server will automatically redirect all requests over HTTP to HTTPS. This has no effect if the server is not listening on HTTPS.",
|
"LabelRequireHttpsHelp": "If checked, the server will automatically redirect all requests over HTTP to HTTPS. This has no effect if the server is not listening on HTTPS.",
|
||||||
"LabelRuntimeMinutes": "Run time (minutes):",
|
"LabelRuntimeMinutes": "Runtime:",
|
||||||
"LabelSaveLocalMetadata": "Save artwork into media folders",
|
"LabelSaveLocalMetadata": "Save artwork into media folders",
|
||||||
"LabelSaveLocalMetadataHelp": "Saving artwork into media folders will put them in a place where they can be easily edited.",
|
"LabelSaveLocalMetadataHelp": "Saving artwork into media folders will put them in a place where they can be easily edited.",
|
||||||
"LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.",
|
"LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.",
|
||||||
|
@ -836,7 +836,7 @@
|
||||||
"LabelSelectVersionToInstall": "Select version to install:",
|
"LabelSelectVersionToInstall": "Select version to install:",
|
||||||
"LabelSendNotificationToUsers": "Send the notification to:",
|
"LabelSendNotificationToUsers": "Send the notification to:",
|
||||||
"LabelSerialNumber": "Serial number",
|
"LabelSerialNumber": "Serial number",
|
||||||
"LabelSeriesRecordingPath": "Series recording path (optional):",
|
"LabelSeriesRecordingPath": "Series recording path:",
|
||||||
"LabelServerHost": "Host:",
|
"LabelServerHost": "Host:",
|
||||||
"LabelServerHostHelp": "192.168.1.100:8096 or https://myserver.com",
|
"LabelServerHostHelp": "192.168.1.100:8096 or https://myserver.com",
|
||||||
"LabelServerName": "Server name:",
|
"LabelServerName": "Server name:",
|
||||||
|
@ -938,7 +938,7 @@
|
||||||
"LabelYoureDone": "You're Done!",
|
"LabelYoureDone": "You're Done!",
|
||||||
"LabelZipCode": "Zip Code:",
|
"LabelZipCode": "Zip Code:",
|
||||||
"LabelffmpegPath": "FFmpeg path:",
|
"LabelffmpegPath": "FFmpeg path:",
|
||||||
"LabelffmpegPathHelp": "The path to the ffmpeg application file, or folder containing ffmpeg.",
|
"LabelffmpegPathHelp": "The path to the ffmpeg application file or folder containing ffmpeg.",
|
||||||
"LanNetworksHelp": "Comma separated list of IP addresses or IP/netmask entries for networks that will be considered on local network when enforcing bandwidth restrictions. If set, all other IP addresses will be considered to be on the external network and will be subject to the external bandwidth restrictions. If left blank, only the server's subnet is considered to be on the local network.",
|
"LanNetworksHelp": "Comma separated list of IP addresses or IP/netmask entries for networks that will be considered on local network when enforcing bandwidth restrictions. If set, all other IP addresses will be considered to be on the external network and will be subject to the external bandwidth restrictions. If left blank, only the server's subnet is considered to be on the local network.",
|
||||||
"Large": "Large",
|
"Large": "Large",
|
||||||
"LatestFromLibrary": "Latest {0}",
|
"LatestFromLibrary": "Latest {0}",
|
||||||
|
@ -1067,7 +1067,7 @@
|
||||||
"MessageSyncPlayErrorMedia": "Failed to enable SyncPlay! Media error.",
|
"MessageSyncPlayErrorMedia": "Failed to enable SyncPlay! Media error.",
|
||||||
"Metadata": "Metadata",
|
"Metadata": "Metadata",
|
||||||
"MetadataManager": "Metadata Manager",
|
"MetadataManager": "Metadata Manager",
|
||||||
"MetadataSettingChangeHelp": "Changing metadata settings will affect new content that is added going forward. To refresh existing content, open the detail screen and click the refresh button, or perform bulk refreshes using the metadata manager.",
|
"MetadataSettingChangeHelp": "Changing metadata settings will affect new content added going forward. To refresh existing content, open the detail screen and click the refresh button, or perform bulk refreshes using the metadata manager.",
|
||||||
"MinutesAfter": "minutes after",
|
"MinutesAfter": "minutes after",
|
||||||
"MinutesBefore": "minutes before",
|
"MinutesBefore": "minutes before",
|
||||||
"Mobile": "Mobile",
|
"Mobile": "Mobile",
|
||||||
|
@ -1100,8 +1100,8 @@
|
||||||
"No": "No",
|
"No": "No",
|
||||||
"NoCreatedLibraries": "Seems like you haven't created any libraries yet. {0}Would you like to create one now?{1}",
|
"NoCreatedLibraries": "Seems like you haven't created any libraries yet. {0}Would you like to create one now?{1}",
|
||||||
"NoNewDevicesFound": "No new devices found. To add a new tuner, close this dialog and enter the device information manually.",
|
"NoNewDevicesFound": "No new devices found. To add a new tuner, close this dialog and enter the device information manually.",
|
||||||
"NoNextUpItemsMessage": "None found. Start watching your shows!",
|
"MessageNoNextUpItems": "None found. Start watching your shows!",
|
||||||
"NoPluginConfigurationMessage": "This plugin has no settings to configure.",
|
"MessageNoPluginConfiguration": "This plugin has no settings to configure.",
|
||||||
"NoSubtitleSearchResultsFound": "No results found.",
|
"NoSubtitleSearchResultsFound": "No results found.",
|
||||||
"NoSubtitles": "None",
|
"NoSubtitles": "None",
|
||||||
"NoSubtitlesHelp": "Subtitles will not be loaded by default. They can still be turned on manually during playback.",
|
"NoSubtitlesHelp": "Subtitles will not be loaded by default. They can still be turned on manually during playback.",
|
||||||
|
@ -1126,7 +1126,7 @@
|
||||||
"OptionAllowLinkSharingHelp": "Only web pages containing media information are shared. Media files are never shared publicly. Shares are time-limited and will expire after {0} days.",
|
"OptionAllowLinkSharingHelp": "Only web pages containing media information are shared. Media files are never shared publicly. Shares are time-limited and will expire after {0} days.",
|
||||||
"OptionAllowManageLiveTv": "Allow Live TV recording management",
|
"OptionAllowManageLiveTv": "Allow Live TV recording management",
|
||||||
"OptionAllowMediaPlayback": "Allow media playback",
|
"OptionAllowMediaPlayback": "Allow media playback",
|
||||||
"OptionAllowMediaPlaybackTranscodingHelp": "Restricting access to transcoding may cause playback failures in Jellyfin apps due to unsupported media formats.",
|
"OptionAllowMediaPlaybackTranscodingHelp": "Restricting access to transcoding may cause playback failures in clients due to unsupported media formats.",
|
||||||
"OptionAllowRemoteControlOthers": "Allow remote control of other users",
|
"OptionAllowRemoteControlOthers": "Allow remote control of other users",
|
||||||
"OptionAllowRemoteSharedDevices": "Allow remote control of shared devices",
|
"OptionAllowRemoteSharedDevices": "Allow remote control of shared devices",
|
||||||
"OptionAllowRemoteSharedDevicesHelp": "DLNA devices are considered shared until a user begins controlling them.",
|
"OptionAllowRemoteSharedDevicesHelp": "DLNA devices are considered shared until a user begins controlling them.",
|
||||||
|
@ -1139,7 +1139,7 @@
|
||||||
"OptionAuto": "Auto",
|
"OptionAuto": "Auto",
|
||||||
"OptionAutomatic": "Auto",
|
"OptionAutomatic": "Auto",
|
||||||
"OptionAutomaticallyGroupSeries": "Automatically merge series that are spread across multiple folders",
|
"OptionAutomaticallyGroupSeries": "Automatically merge series that are spread across multiple folders",
|
||||||
"OptionAutomaticallyGroupSeriesHelp": "If enabled, series that are spread across multiple folders within this library will be automatically merged into a single series.",
|
"OptionAutomaticallyGroupSeriesHelp": "Series that are spread across multiple folders within this library will be automatically merged into a single series.",
|
||||||
"OptionBanner": "Banner",
|
"OptionBanner": "Banner",
|
||||||
"OptionBlockBooks": "Books",
|
"OptionBlockBooks": "Books",
|
||||||
"OptionBlockChannelContent": "Internet Channel Content",
|
"OptionBlockChannelContent": "Internet Channel Content",
|
||||||
|
@ -1161,7 +1161,7 @@
|
||||||
"OptionDatePlayed": "Date Played",
|
"OptionDatePlayed": "Date Played",
|
||||||
"OptionDescending": "Descending",
|
"OptionDescending": "Descending",
|
||||||
"OptionDisableUser": "Disable this user",
|
"OptionDisableUser": "Disable this user",
|
||||||
"OptionDisableUserHelp": "If disabled the server will not allow any connections from this user. Existing connections will be abruptly terminated.",
|
"OptionDisableUserHelp": "The server will not allow any connections from this user. Existing connections will be abruptly terminated.",
|
||||||
"OptionDislikes": "Dislikes",
|
"OptionDislikes": "Dislikes",
|
||||||
"OptionDisplayFolderView": "Display a folder view to show plain media folders",
|
"OptionDisplayFolderView": "Display a folder view to show plain media folders",
|
||||||
"OptionDisplayFolderViewHelp": "Display folders alongside your other media libraries. This can be useful if you'd like to have a plain folder view.",
|
"OptionDisplayFolderViewHelp": "Display folders alongside your other media libraries. This can be useful if you'd like to have a plain folder view.",
|
||||||
|
@ -1171,7 +1171,7 @@
|
||||||
"OptionDownloadBoxImage": "Box",
|
"OptionDownloadBoxImage": "Box",
|
||||||
"OptionDownloadDiscImage": "Disc",
|
"OptionDownloadDiscImage": "Disc",
|
||||||
"OptionDownloadImagesInAdvance": "Download images in advance",
|
"OptionDownloadImagesInAdvance": "Download images in advance",
|
||||||
"OptionDownloadImagesInAdvanceHelp": "By default, most images are only downloaded when requested by a Jellyfin app. Enable this option to download all images in advance, as new media is imported. This may cause significantly longer library scans.",
|
"OptionDownloadImagesInAdvanceHelp": "By default, most images are only downloaded when requested by a client. Enable this option to download all images in advance, as new media is imported. This may cause significantly longer library scans.",
|
||||||
"OptionDownloadLogoImage": "Logo",
|
"OptionDownloadLogoImage": "Logo",
|
||||||
"OptionDownloadMenuImage": "Menu",
|
"OptionDownloadMenuImage": "Menu",
|
||||||
"OptionDownloadPrimaryImage": "Primary",
|
"OptionDownloadPrimaryImage": "Primary",
|
||||||
|
@ -1204,7 +1204,7 @@
|
||||||
"OptionHlsSegmentedSubtitles": "HLS segmented subtitles",
|
"OptionHlsSegmentedSubtitles": "HLS segmented subtitles",
|
||||||
"OptionHomeVideos": "Photos",
|
"OptionHomeVideos": "Photos",
|
||||||
"OptionIgnoreTranscodeByteRangeRequests": "Ignore transcode byte range requests",
|
"OptionIgnoreTranscodeByteRangeRequests": "Ignore transcode byte range requests",
|
||||||
"OptionIgnoreTranscodeByteRangeRequestsHelp": "If enabled, these requests will be honored but will ignore the byte range header.",
|
"OptionIgnoreTranscodeByteRangeRequestsHelp": "These requests will be honored but will ignore the byte range header.",
|
||||||
"OptionImdbRating": "IMDb Rating",
|
"OptionImdbRating": "IMDb Rating",
|
||||||
"OptionIsHD": "HD",
|
"OptionIsHD": "HD",
|
||||||
"OptionIsSD": "SD",
|
"OptionIsSD": "SD",
|
||||||
|
@ -1222,9 +1222,9 @@
|
||||||
"OptionOnInterval": "On an interval",
|
"OptionOnInterval": "On an interval",
|
||||||
"OptionParentalRating": "Parental Rating",
|
"OptionParentalRating": "Parental Rating",
|
||||||
"OptionPlainStorageFolders": "Display all folders as plain storage folders",
|
"OptionPlainStorageFolders": "Display all folders as plain storage folders",
|
||||||
"OptionPlainStorageFoldersHelp": "If enabled, all folders are represented in DIDL as \"object.container.storageFolder\" instead of a more specific type, such as \"object.container.person.musicArtist\".",
|
"OptionPlainStorageFoldersHelp": "All folders are represented in DIDL as \"object.container.storageFolder\" instead of a more specific type, such as \"object.container.person.musicArtist\".",
|
||||||
"OptionPlainVideoItems": "Display all videos as plain video items",
|
"OptionPlainVideoItems": "Display all videos as plain video items",
|
||||||
"OptionPlainVideoItemsHelp": "If enabled, all videos are represented in DIDL as \"object.item.videoItem\" instead of a more specific type, such as \"object.item.videoItem.movie\".",
|
"OptionPlainVideoItemsHelp": "All videos are represented in DIDL as \"object.item.videoItem\" instead of a more specific type, such as \"object.item.videoItem.movie\".",
|
||||||
"OptionPlayCount": "Play Count",
|
"OptionPlayCount": "Play Count",
|
||||||
"OptionPlayed": "Played",
|
"OptionPlayed": "Played",
|
||||||
"OptionPoster": "Poster",
|
"OptionPoster": "Poster",
|
||||||
|
@ -1275,8 +1275,8 @@
|
||||||
"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.",
|
||||||
"PasswordResetConfirmation": "Are you sure you wish to reset the password?",
|
"PasswordResetConfirmation": "Are you sure you wish to reset the password?",
|
||||||
"PasswordResetHeader": "Reset Password",
|
"HeaderResetPassword": "Reset Password",
|
||||||
"PasswordResetProviderHelp": "Choose a Password Reset Provider to be used when this user requests a password reset",
|
"PasswordResetProviderHelp": "Choose a password reset provider to be used when this user requests a password reset.",
|
||||||
"PasswordSaved": "Password saved.",
|
"PasswordSaved": "Password saved.",
|
||||||
"People": "People",
|
"People": "People",
|
||||||
"PerfectMatch": "Perfect match",
|
"PerfectMatch": "Perfect match",
|
||||||
|
@ -1301,7 +1301,7 @@
|
||||||
"PleaseEnterNameOrId": "Please enter a name or an external ID.",
|
"PleaseEnterNameOrId": "Please enter a name or an external ID.",
|
||||||
"PleaseRestartServerName": "Please restart Jellyfin Server - {0}.",
|
"PleaseRestartServerName": "Please restart Jellyfin Server - {0}.",
|
||||||
"PleaseSelectTwoItems": "Please select at least two items.",
|
"PleaseSelectTwoItems": "Please select at least two items.",
|
||||||
"PluginInstalledMessage": "The plugin has been successfully installed. Jellyfin Server will need to be restarted for changes to take effect.",
|
"MessagePluginInstalled": "The plugin has been successfully installed. Jellyfin Server will need to be restarted for changes to take effect.",
|
||||||
"PreferEmbeddedTitlesOverFileNames": "Prefer embedded titles over filenames",
|
"PreferEmbeddedTitlesOverFileNames": "Prefer embedded titles over filenames",
|
||||||
"PreferEmbeddedTitlesOverFileNamesHelp": "This determines the default display title when no internet metadata or local metadata is available.",
|
"PreferEmbeddedTitlesOverFileNamesHelp": "This determines the default display title when no internet metadata or local metadata is available.",
|
||||||
"PreferEmbeddedEpisodeInfosOverFileNamesHelp": "This uses the episode information from the embedded metadata if available.",
|
"PreferEmbeddedEpisodeInfosOverFileNamesHelp": "This uses the episode information from the embedded metadata if available.",
|
||||||
|
@ -1326,11 +1326,11 @@
|
||||||
"Record": "Record",
|
"Record": "Record",
|
||||||
"RecordSeries": "Record series",
|
"RecordSeries": "Record series",
|
||||||
"RecordingCancelled": "Recording cancelled.",
|
"RecordingCancelled": "Recording cancelled.",
|
||||||
"RecordingPathChangeMessage": "Changing your recording folder will not migrate existing recordings from the old location to the new. You'll need to move them manually if desired.",
|
"MessageChangeRecordingPath": "Changing your recording folder will not migrate existing recordings from the old location to the new. You'll need to move them manually if desired.",
|
||||||
"RecordingScheduled": "Recording scheduled.",
|
"RecordingScheduled": "Recording scheduled.",
|
||||||
"Recordings": "Recordings",
|
"Recordings": "Recordings",
|
||||||
"Refresh": "Refresh",
|
"Refresh": "Refresh",
|
||||||
"RefreshDialogHelp": "Metadata is refreshed based on settings and internet services that are enabled in the Jellyfin Server dashboard.",
|
"RefreshDialogHelp": "Metadata is refreshed based on settings and internet services that are enabled in the dashboard.",
|
||||||
"RefreshMetadata": "Refresh metadata",
|
"RefreshMetadata": "Refresh metadata",
|
||||||
"RefreshQueued": "Refresh queued.",
|
"RefreshQueued": "Refresh queued.",
|
||||||
"ReleaseDate": "Release date",
|
"ReleaseDate": "Release date",
|
||||||
|
@ -1495,7 +1495,7 @@
|
||||||
"TvLibraryHelp": "Review the {0}TV naming guide{1}.",
|
"TvLibraryHelp": "Review the {0}TV naming guide{1}.",
|
||||||
"Uniform": "Uniform",
|
"Uniform": "Uniform",
|
||||||
"UninstallPluginConfirmation": "Are you sure you wish to uninstall {0}?",
|
"UninstallPluginConfirmation": "Are you sure you wish to uninstall {0}?",
|
||||||
"UninstallPluginHeader": "Uninstall Plugin",
|
"HeaderUninstallPlugin": "Uninstall Plugin",
|
||||||
"Unmute": "Unmute",
|
"Unmute": "Unmute",
|
||||||
"Unplayed": "Unplayed",
|
"Unplayed": "Unplayed",
|
||||||
"Unrated": "Unrated",
|
"Unrated": "Unrated",
|
||||||
|
@ -1561,8 +1561,8 @@
|
||||||
"EveryXHours": "Every {0} hours",
|
"EveryXHours": "Every {0} hours",
|
||||||
"OnApplicationStartup": "On application startup",
|
"OnApplicationStartup": "On application startup",
|
||||||
"UnsupportedPlayback": "Jellyfin cannot decrypt content protected by DRM but all content will be attempted regardless, including protected titles. Some files may appear completely black due to encryption or other unsupported features, such as interactive titles.",
|
"UnsupportedPlayback": "Jellyfin cannot decrypt content protected by DRM but all content will be attempted regardless, including protected titles. Some files may appear completely black due to encryption or other unsupported features, such as interactive titles.",
|
||||||
"EnableBlurhash": "Enable blurred placeholders for images",
|
"EnableBlurHash": "Enable blurred placeholders for images",
|
||||||
"EnableBlurhashHelp": "Images that are still being loaded will be displayed with a blurred placeholder",
|
"EnableBlurHashHelp": "Images that are still being loaded will be displayed with a unique placeholder.",
|
||||||
"ButtonSyncPlay": "SyncPlay",
|
"ButtonSyncPlay": "SyncPlay",
|
||||||
"ButtonCast": "Cast",
|
"ButtonCast": "Cast",
|
||||||
"ButtonPlayer": "Player",
|
"ButtonPlayer": "Player",
|
||||||
|
|
|
@ -97,7 +97,7 @@
|
||||||
"Box": "Caja",
|
"Box": "Caja",
|
||||||
"BoxRear": "Caja (lado opuesto)",
|
"BoxRear": "Caja (lado opuesto)",
|
||||||
"Browse": "Explorar",
|
"Browse": "Explorar",
|
||||||
"BrowsePluginCatalogMessage": "Explore nuestro catálogo de complementos para ver los complementos disponibles.",
|
"MessageBrowsePluginCatalog": "Explore nuestro catálogo de complementos para ver los complementos disponibles.",
|
||||||
"BurnSubtitlesHelp": "Determina si el servidor debe grabarse en subtítulos al transcodificar videos. Evitar esto mejorará en gran medida el rendimiento. Seleccione Automático para grabar formatos basados en imágenes (VOBSUB, PGS, SUB, IDX, ...) y ciertos subtítulos ASS o SSA.",
|
"BurnSubtitlesHelp": "Determina si el servidor debe grabarse en subtítulos al transcodificar videos. Evitar esto mejorará en gran medida el rendimiento. Seleccione Automático 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",
|
||||||
|
@ -201,7 +201,7 @@
|
||||||
"DatePlayed": "Fecha de reproducción",
|
"DatePlayed": "Fecha de reproducción",
|
||||||
"DeathDateValue": "Muerte: {0}",
|
"DeathDateValue": "Muerte: {0}",
|
||||||
"Default": "Predeterminado",
|
"Default": "Predeterminado",
|
||||||
"DefaultErrorMessage": "Hubo un error procesando la solicitud. Por favor intentalo nuevamente mas tarde.",
|
"ErrorDefault": "Hubo un error procesando la solicitud. Por favor intentalo nuevamente mas tarde.",
|
||||||
"DefaultMetadataLangaugeDescription": "Estos son tus predeterminados y pueden ser personalizados por librería únicamente.",
|
"DefaultMetadataLangaugeDescription": "Estos son tus predeterminados y pueden ser personalizados por librería únicamente.",
|
||||||
"Delete": "Borrar",
|
"Delete": "Borrar",
|
||||||
"DeleteDeviceConfirmation": "Estas seguro que quieres borrar este dispositivo? Este va a volver a aparecer cuando una persona se registre.",
|
"DeleteDeviceConfirmation": "Estas seguro que quieres borrar este dispositivo? Este va a volver a aparecer cuando una persona se registre.",
|
||||||
|
@ -271,7 +271,7 @@
|
||||||
"ErrorAddingXmlTvFile": "Ocurrió un error al acceder al archivo de XmlTV. Por favor asegúrate de que el archivo existe e intenta de nuevo.",
|
"ErrorAddingXmlTvFile": "Ocurrió un error al acceder al archivo de XmlTV. Por favor asegúrate de que el archivo existe e intenta de nuevo.",
|
||||||
"ErrorDeletingItem": "Ocurrió un error al eliminar el ítem del servidor Jellyfin. Por favor verifica que el servidor Jellyfin tiene permiso de escritura a la carpeta de medios e intenta de nuevo.",
|
"ErrorDeletingItem": "Ocurrió un error al eliminar el ítem del servidor Jellyfin. Por favor verifica que el servidor Jellyfin tiene permiso de escritura a la carpeta de medios e intenta de nuevo.",
|
||||||
"ErrorGettingTvLineups": "Ocurrió un error al descargar la guía de programación de TV. Por favor asegúrate que tu información es correcta e intenta de nuevo.",
|
"ErrorGettingTvLineups": "Ocurrió un error al descargar la guía de programación de TV. Por favor asegúrate que tu información es correcta e intenta de nuevo.",
|
||||||
"ErrorMessageStartHourGreaterThanEnd": "La hora de fin tiene que ser mayor que la de inicio.",
|
"ErrorStartHourGreaterThanEnd": "La hora de fin tiene que ser mayor que la de inicio.",
|
||||||
"ErrorPleaseSelectLineup": "Por favor selecciona un alineamiento e intenta de nuevo. Si no existen alineamientos disponibles, asegúrate de que tu nombre de usuario, contraseña y código postal son correctos.",
|
"ErrorPleaseSelectLineup": "Por favor selecciona un alineamiento e intenta de nuevo. Si no existen alineamientos disponibles, asegúrate de que tu nombre de usuario, contraseña y código postal son correctos.",
|
||||||
"ErrorSavingTvProvider": "Ocurrió un error al guardar el proveedor de TV. Por favor asegúrate de que está disponible e intenta de nuevo.",
|
"ErrorSavingTvProvider": "Ocurrió un error al guardar el proveedor de TV. Por favor asegúrate de que está disponible e intenta de nuevo.",
|
||||||
"EveryNDays": "Cada {0} días",
|
"EveryNDays": "Cada {0} días",
|
||||||
|
@ -918,8 +918,8 @@
|
||||||
"NoSubtitlesHelp": "Los subtítulos no se cargarán de manera predeterminada. Todavía se pueden activar manualmente durante la reproducción.",
|
"NoSubtitlesHelp": "Los subtítulos no se cargarán de manera predeterminada. Todavía se pueden activar manualmente durante la reproducción.",
|
||||||
"NoSubtitles": "Ninguno",
|
"NoSubtitles": "Ninguno",
|
||||||
"NoSubtitleSearchResultsFound": "No se han encontrado resultados.",
|
"NoSubtitleSearchResultsFound": "No se han encontrado resultados.",
|
||||||
"NoPluginConfigurationMessage": "Este complemento no tiene opciones para configurar.",
|
"MessageNoPluginConfiguration": "Este complemento no tiene opciones para configurar.",
|
||||||
"NoNextUpItemsMessage": "Nada encontrado. ¡Comienza a ver tus shows!",
|
"MessageNoNextUpItems": "Nada encontrado. ¡Comienza a ver tus shows!",
|
||||||
"NoNewDevicesFound": "No se encontraron nuevos dispositivos. Para agregar un nuevo sintonizador, cierre este cuadro de diálogo e ingrese la información del dispositivo manualmente.",
|
"NoNewDevicesFound": "No se encontraron nuevos dispositivos. Para agregar un nuevo sintonizador, cierre este cuadro de diálogo e ingrese la información del dispositivo manualmente.",
|
||||||
"NoCreatedLibraries": "Parece que todavía no has creado ninguna biblioteca. {0}¿Te gustaría crear una ahora?{1}",
|
"NoCreatedLibraries": "Parece que todavía no has creado ninguna biblioteca. {0}¿Te gustaría crear una ahora?{1}",
|
||||||
"No": "No",
|
"No": "No",
|
||||||
|
@ -1208,7 +1208,7 @@
|
||||||
"Refresh": "Actualizar",
|
"Refresh": "Actualizar",
|
||||||
"Recordings": "Grabaciones",
|
"Recordings": "Grabaciones",
|
||||||
"RecordingScheduled": "Grabación programada.",
|
"RecordingScheduled": "Grabación programada.",
|
||||||
"RecordingPathChangeMessage": "Cambiar su carpeta de grabación no migrará las grabaciones existentes de la ubicación anterior a la nueva. Tendrá que moverlos manualmente si lo desea.",
|
"MessageChangeRecordingPath": "Cambiar su carpeta de grabación no migrará las grabaciones existentes de la ubicación anterior a la nueva. Tendrá que moverlos manualmente si lo desea.",
|
||||||
"RecordingCancelled": "Grabación cancelada.",
|
"RecordingCancelled": "Grabación cancelada.",
|
||||||
"RecordSeries": "Grabar series",
|
"RecordSeries": "Grabar series",
|
||||||
"Record": "Grabar",
|
"Record": "Grabar",
|
||||||
|
@ -1232,7 +1232,7 @@
|
||||||
"PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Esto usa la información de los metadatos incrustados del capítulo si está disponible.",
|
"PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Esto usa la información de los metadatos incrustados del capítulo si está disponible.",
|
||||||
"PreferEmbeddedTitlesOverFileNamesHelp": "Esto determina el título de visualización predeterminado cuando no hay metadatos de Internet o metadatos locales disponibles.",
|
"PreferEmbeddedTitlesOverFileNamesHelp": "Esto determina el título de visualización predeterminado cuando no hay metadatos de Internet o metadatos locales disponibles.",
|
||||||
"PreferEmbeddedTitlesOverFileNames": "Preferir títulos incrustados sobre nombres de archivo",
|
"PreferEmbeddedTitlesOverFileNames": "Preferir títulos incrustados sobre nombres de archivo",
|
||||||
"PluginInstalledMessage": "El complemento se ha instalado correctamente. El servidor Jellyfin deberá reiniciarse para que los cambios surtan efecto.",
|
"MessagePluginInstalled": "El complemento se ha instalado correctamente. El servidor Jellyfin deberá reiniciarse para que los cambios surtan efecto.",
|
||||||
"PleaseSelectTwoItems": "Seleccione al menos dos elementos.",
|
"PleaseSelectTwoItems": "Seleccione al menos dos elementos.",
|
||||||
"PleaseRestartServerName": "Reinicie el servidor Jellyfin - {0}.",
|
"PleaseRestartServerName": "Reinicie el servidor Jellyfin - {0}.",
|
||||||
"PleaseEnterNameOrId": "Por favor, introduzca un nombre o una ID externa.",
|
"PleaseEnterNameOrId": "Por favor, introduzca un nombre o una ID externa.",
|
||||||
|
@ -1256,7 +1256,7 @@
|
||||||
"People": "Personas",
|
"People": "Personas",
|
||||||
"PasswordSaved": "Contraseña guardada.",
|
"PasswordSaved": "Contraseña guardada.",
|
||||||
"PasswordResetProviderHelp": "Elija un proveedor de restablecimiento de contraseña para usar cuando este usuario solicite un restablecimiento de contraseña",
|
"PasswordResetProviderHelp": "Elija un proveedor de restablecimiento de contraseña para usar cuando este usuario solicite un restablecimiento de contraseña",
|
||||||
"PasswordResetHeader": "Restablecer contraseña",
|
"HeaderResetPassword": "Restablecer contraseña",
|
||||||
"PasswordResetConfirmation": "¿Estás seguro de que deseas restablecer la contraseña?",
|
"PasswordResetConfirmation": "¿Estás seguro de que deseas restablecer la contraseña?",
|
||||||
"PasswordResetComplete": "La contraseña ha sido restablecida.",
|
"PasswordResetComplete": "La contraseña ha sido restablecida.",
|
||||||
"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.",
|
||||||
|
@ -1357,8 +1357,8 @@
|
||||||
"ReleaseGroup": "Grupo de lanzamiento",
|
"ReleaseGroup": "Grupo de lanzamiento",
|
||||||
"ButtonCast": "Transmitir",
|
"ButtonCast": "Transmitir",
|
||||||
"ButtonSyncPlay": "SyncPlay",
|
"ButtonSyncPlay": "SyncPlay",
|
||||||
"EnableBlurhashHelp": "Las imágenes que aún se están cargando se mostrarán con un marcador de posición borroso",
|
"EnableBlurHashHelp": "Las imágenes que aún se están cargando se mostrarán con un marcador de posición borroso",
|
||||||
"EnableBlurhash": "Habilitar marcadores de posición borrosos para imágenes",
|
"EnableBlurHash": "Habilitar marcadores de posición borrosos para imágenes",
|
||||||
"OnApplicationStartup": "En el inicio de la aplicación",
|
"OnApplicationStartup": "En el inicio de la aplicación",
|
||||||
"EveryXHours": "Cada {0} horas",
|
"EveryXHours": "Cada {0} horas",
|
||||||
"EveryHour": "Cada hora",
|
"EveryHour": "Cada hora",
|
||||||
|
@ -1412,7 +1412,7 @@
|
||||||
"Unrated": "Sin calificación",
|
"Unrated": "Sin calificación",
|
||||||
"Unplayed": "No reproducido",
|
"Unplayed": "No reproducido",
|
||||||
"Unmute": "Dejar de silenciar",
|
"Unmute": "Dejar de silenciar",
|
||||||
"UninstallPluginHeader": "Desinstalar complemento",
|
"HeaderUninstallPlugin": "Desinstalar complemento",
|
||||||
"UninstallPluginConfirmation": "¿Estás seguro de que deseas desinstalar {0}?",
|
"UninstallPluginConfirmation": "¿Estás seguro de que deseas desinstalar {0}?",
|
||||||
"Uniform": "Uniforme",
|
"Uniform": "Uniforme",
|
||||||
"TvLibraryHelp": "Revise la {0}guía de nombres de TV{1}.",
|
"TvLibraryHelp": "Revise la {0}guía de nombres de TV{1}.",
|
||||||
|
|
|
@ -50,7 +50,7 @@
|
||||||
"Box": "Caja",
|
"Box": "Caja",
|
||||||
"BoxRear": "Caja (parte trasera)",
|
"BoxRear": "Caja (parte trasera)",
|
||||||
"Browse": "Explorar",
|
"Browse": "Explorar",
|
||||||
"BrowsePluginCatalogMessage": "Explora nuestro catálogo de complementos para ver los complementos disponibles.",
|
"MessageBrowsePluginCatalog": "Explora nuestro catálogo de complementos para ver los complementos disponibles.",
|
||||||
"BurnSubtitlesHelp": "Determina si el servidor debería quemar los 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.",
|
"BurnSubtitlesHelp": "Determina si el servidor debería quemar los 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",
|
||||||
|
@ -156,7 +156,7 @@
|
||||||
"DatePlayed": "Fecha de reproducción",
|
"DatePlayed": "Fecha de reproducción",
|
||||||
"DeathDateValue": "Falleció: {0}",
|
"DeathDateValue": "Falleció: {0}",
|
||||||
"Default": "Por defecto",
|
"Default": "Por defecto",
|
||||||
"DefaultErrorMessage": "Ha ocurrido un error al procesar la solicitud. Por favor, inténtalo de nuevo más tarde.",
|
"ErrorDefault": "Ha ocurrido un error al procesar la solicitud. Por favor, inténtalo de nuevo más tarde.",
|
||||||
"DefaultMetadataLangaugeDescription": "Estos son sus valores por defecto y pueden ser personalizados en cada biblioteca.",
|
"DefaultMetadataLangaugeDescription": "Estos son sus valores por defecto y pueden ser personalizados en cada biblioteca.",
|
||||||
"DefaultSubtitlesHelp": "Los subtítulos se cargan basados en los indicadores «por defecto» y «forzado» incluidos en los metadatos. Las preferencias de idioma son consideradas cuando hay múltiples opciones disponibles.",
|
"DefaultSubtitlesHelp": "Los subtítulos se cargan basados en los indicadores «por defecto» y «forzado» incluidos en los metadatos. Las preferencias de idioma son consideradas cuando hay múltiples opciones disponibles.",
|
||||||
"Delete": "Eliminar",
|
"Delete": "Eliminar",
|
||||||
|
@ -224,7 +224,7 @@
|
||||||
"ErrorAddingXmlTvFile": "Hubo un error accediendo al archivo XMLTV. Por favor, asegúrate de que el archivo existe e inténtalo de nuevo.",
|
"ErrorAddingXmlTvFile": "Hubo un error accediendo al archivo XMLTV. Por favor, asegúrate de que el archivo existe e inténtalo de nuevo.",
|
||||||
"ErrorDeletingItem": "Hubo un error eliminando el elemento del servidor Jellyfin. Por favor, verifica que el servidor Jellyfin tiene permisos de escritura en la carpeta del medio e inténtalo de nuevo.",
|
"ErrorDeletingItem": "Hubo un error eliminando el elemento del servidor Jellyfin. Por favor, verifica que el servidor Jellyfin tiene permisos de escritura en la carpeta del medio e inténtalo de nuevo.",
|
||||||
"ErrorGettingTvLineups": "Hubo un error al descargar la programación de TV. Por favor, asegúrate de que tu información sea correcta e inténtalo de nuevo.",
|
"ErrorGettingTvLineups": "Hubo un error al descargar la programación de TV. Por favor, asegúrate de que tu información sea correcta e inténtalo de nuevo.",
|
||||||
"ErrorMessageStartHourGreaterThanEnd": "La hora de finalización debe ser mayor que la hora de inicio.",
|
"ErrorStartHourGreaterThanEnd": "La hora de finalización debe ser mayor que la hora de inicio.",
|
||||||
"ErrorPleaseSelectLineup": "Por favor, selecciona una programación e inténtalo de nuevo. Si no hay disponible ninguna, entonces, por favor, verifica que tu nombre de usuario, contraseña, y código postal sean correctos.",
|
"ErrorPleaseSelectLineup": "Por favor, selecciona una programación e inténtalo de nuevo. Si no hay disponible ninguna, entonces, por favor, verifica que tu nombre de usuario, contraseña, y código postal sean correctos.",
|
||||||
"ErrorSavingTvProvider": "Hubo un error al guardar el proveedor de TV. Por favor, asegúrate de que sea accesible e inténtalo de nuevo.",
|
"ErrorSavingTvProvider": "Hubo un error al guardar el proveedor de TV. Por favor, asegúrate de que sea accesible e inténtalo de nuevo.",
|
||||||
"EveryNDays": "Cada {0} días",
|
"EveryNDays": "Cada {0} días",
|
||||||
|
@ -934,8 +934,8 @@
|
||||||
"Next": "Siguiente",
|
"Next": "Siguiente",
|
||||||
"NextUp": "A continuación",
|
"NextUp": "A continuación",
|
||||||
"NoNewDevicesFound": "No se encontraron nuevos dispositivos. Para agregar un sintonizador nuevo, cierra este diálogo e introduce la información del dispositivo manualmente.",
|
"NoNewDevicesFound": "No se encontraron nuevos dispositivos. Para agregar un sintonizador nuevo, cierra este diálogo e introduce la información del dispositivo manualmente.",
|
||||||
"NoNextUpItemsMessage": "No se encontró nada. ¡Comienza a ver tus programas!",
|
"MessageNoNextUpItems": "No se encontró nada. ¡Comienza a ver tus programas!",
|
||||||
"NoPluginConfigurationMessage": "Este complemento no tiene configuraciones disponibles.",
|
"MessageNoPluginConfiguration": "Este complemento no tiene configuraciones disponibles.",
|
||||||
"NoSubtitleSearchResultsFound": "No se encontraron resultados.",
|
"NoSubtitleSearchResultsFound": "No se encontraron resultados.",
|
||||||
"NoSubtitles": "Ninguno",
|
"NoSubtitles": "Ninguno",
|
||||||
"NoSubtitlesHelp": "Los subtítulos no serán cargados por defecto. Pueden ser activados manualmente durante la reproducción.",
|
"NoSubtitlesHelp": "Los subtítulos no serán cargados por defecto. Pueden ser activados manualmente durante la reproducción.",
|
||||||
|
@ -1087,7 +1087,7 @@
|
||||||
"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.",
|
||||||
"PasswordResetConfirmation": "¿Estás seguro de querer restablecer la contraseña?",
|
"PasswordResetConfirmation": "¿Estás seguro de querer restablecer la contraseña?",
|
||||||
"PasswordResetHeader": "Restablecer contraseña",
|
"HeaderResetPassword": "Restablecer contraseña",
|
||||||
"PasswordSaved": "Contraseña guardada.",
|
"PasswordSaved": "Contraseña guardada.",
|
||||||
"People": "Personas",
|
"People": "Personas",
|
||||||
"PerfectMatch": "Coincidencia perfecta",
|
"PerfectMatch": "Coincidencia perfecta",
|
||||||
|
@ -1109,7 +1109,7 @@
|
||||||
"PleaseEnterNameOrId": "Por favor, introduce un nombre o ID externo.",
|
"PleaseEnterNameOrId": "Por favor, introduce un nombre o ID externo.",
|
||||||
"PleaseRestartServerName": "Por favor, reinicia el servidor Jellyfin - {0}.",
|
"PleaseRestartServerName": "Por favor, reinicia el servidor Jellyfin - {0}.",
|
||||||
"PleaseSelectTwoItems": "Por favor, selecciona al menos dos elementos.",
|
"PleaseSelectTwoItems": "Por favor, selecciona al menos dos elementos.",
|
||||||
"PluginInstalledMessage": "El complemento ha sido instalado con éxito. El servidor Jellyfin necesitará ser reiniciado para que los cambios surtan efecto.",
|
"MessagePluginInstalled": "El complemento ha sido instalado con éxito. El servidor Jellyfin necesitará ser reiniciado para que los cambios surtan efecto.",
|
||||||
"PreferEmbeddedTitlesOverFileNames": "Preferir títulos incrustados a los nombres de archivo",
|
"PreferEmbeddedTitlesOverFileNames": "Preferir títulos incrustados a los nombres de archivo",
|
||||||
"PreferEmbeddedTitlesOverFileNamesHelp": "Esto determina el título mostrado por defecto cuando no hay disponibles metadatos en Internet o localmente.",
|
"PreferEmbeddedTitlesOverFileNamesHelp": "Esto determina el título mostrado por defecto cuando no hay disponibles metadatos en Internet o localmente.",
|
||||||
"Premiere": "Estreno",
|
"Premiere": "Estreno",
|
||||||
|
@ -1131,7 +1131,7 @@
|
||||||
"Record": "Grabar",
|
"Record": "Grabar",
|
||||||
"RecordSeries": "Grabar series",
|
"RecordSeries": "Grabar series",
|
||||||
"RecordingCancelled": "Grabación cancelada.",
|
"RecordingCancelled": "Grabación cancelada.",
|
||||||
"RecordingPathChangeMessage": "Cambiar la carpeta de grabaciones no moverá las grabaciones existentes de la antigua ubicación a la nueva. Necesitan moverse manualmente si se desea.",
|
"MessageChangeRecordingPath": "Cambiar la carpeta de grabaciones no moverá las grabaciones existentes de la antigua ubicación a la nueva. Necesitan moverse manualmente si se desea.",
|
||||||
"RecordingScheduled": "Grabación programada.",
|
"RecordingScheduled": "Grabación programada.",
|
||||||
"Recordings": "Grabaciones",
|
"Recordings": "Grabaciones",
|
||||||
"Refresh": "Actualizar",
|
"Refresh": "Actualizar",
|
||||||
|
@ -1281,7 +1281,7 @@
|
||||||
"TvLibraryHelp": "Revisa la {0}guía de nombrado de series de TV{1}.",
|
"TvLibraryHelp": "Revisa la {0}guía de nombrado de series de TV{1}.",
|
||||||
"Uniform": "Uniforme",
|
"Uniform": "Uniforme",
|
||||||
"UninstallPluginConfirmation": "¿Estás seguro de querer desinstalar {0}?",
|
"UninstallPluginConfirmation": "¿Estás seguro de querer desinstalar {0}?",
|
||||||
"UninstallPluginHeader": "Desinstalar complemento",
|
"HeaderUninstallPlugin": "Desinstalar complemento",
|
||||||
"Unmute": "Activar sonido",
|
"Unmute": "Activar sonido",
|
||||||
"Unplayed": "No reproducido",
|
"Unplayed": "No reproducido",
|
||||||
"Unrated": "Sin clasificar",
|
"Unrated": "Sin clasificar",
|
||||||
|
@ -1544,8 +1544,8 @@
|
||||||
"ButtonSyncPlay": "SyncPlay",
|
"ButtonSyncPlay": "SyncPlay",
|
||||||
"ButtonPlayer": "Reproductor",
|
"ButtonPlayer": "Reproductor",
|
||||||
"ButtonCast": "Elenco",
|
"ButtonCast": "Elenco",
|
||||||
"EnableBlurhashHelp": "Imágenes que aún están siendo cargadas serán mostradas difuminadas",
|
"EnableBlurHashHelp": "Imágenes que aún están siendo cargadas serán mostradas difuminadas",
|
||||||
"EnableBlurhash": "Habilitar imágenes de fondo difuminadas",
|
"EnableBlurHash": "Habilitar imágenes de fondo difuminadas",
|
||||||
"TabRepositories": "Repositorios",
|
"TabRepositories": "Repositorios",
|
||||||
"ShowMore": "Mostrar más",
|
"ShowMore": "Mostrar más",
|
||||||
"ShowLess": "Mostrar menos",
|
"ShowLess": "Mostrar menos",
|
||||||
|
|
|
@ -40,7 +40,7 @@
|
||||||
"Box": "Caja",
|
"Box": "Caja",
|
||||||
"BoxRear": "Caja (trasera)",
|
"BoxRear": "Caja (trasera)",
|
||||||
"Browse": "Explorar",
|
"Browse": "Explorar",
|
||||||
"BrowsePluginCatalogMessage": "Explore el catálogo de extensiones para ver las extensiones disponibles.",
|
"MessageBrowsePluginCatalog": "Explore el catálogo de extensiones para ver las extensiones disponibles.",
|
||||||
"ButtonAdd": "Añadir",
|
"ButtonAdd": "Añadir",
|
||||||
"ButtonAddMediaLibrary": "Añadir biblioteca de medios",
|
"ButtonAddMediaLibrary": "Añadir biblioteca de medios",
|
||||||
"ButtonAddScheduledTaskTrigger": "Agregar Activador",
|
"ButtonAddScheduledTaskTrigger": "Agregar Activador",
|
||||||
|
@ -138,7 +138,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.",
|
||||||
"DeathDateValue": "Murió: {0}",
|
"DeathDateValue": "Murió: {0}",
|
||||||
"Default": "Por defecto",
|
"Default": "Por defecto",
|
||||||
"DefaultErrorMessage": "Ha habido un error procesando la solicitud. Por favor inténtalo más tarde.",
|
"ErrorDefault": "Ha habido un error procesando la solicitud. Por favor inténtalo más tarde.",
|
||||||
"DefaultMetadataLangaugeDescription": "Estos son tus ajustes y se pueden personalizar para cada biblioteca.",
|
"DefaultMetadataLangaugeDescription": "Estos son tus ajustes y se pueden personalizar para cada biblioteca.",
|
||||||
"DefaultSubtitlesHelp": "Los subtítulos que se utilizarán dependerán de como estén etiquetadas las pistas de los archivos (si \"por defecto\" o \"forzado\"). Los ajustes de idioma se tienen en cuenta cuando hay varias opciones disponibles.",
|
"DefaultSubtitlesHelp": "Los subtítulos que se utilizarán dependerán de como estén etiquetadas las pistas de los archivos (si \"por defecto\" o \"forzado\"). Los ajustes de idioma se tienen en cuenta cuando hay varias opciones disponibles.",
|
||||||
"Delete": "Borrar",
|
"Delete": "Borrar",
|
||||||
|
@ -185,7 +185,7 @@
|
||||||
"ErrorAddingTunerDevice": "Ha habido un error añadiendo el dispositivo sintonizador. Por favor, asegúrate de que es accesible e inténtalo otra vez.",
|
"ErrorAddingTunerDevice": "Ha habido un error añadiendo el dispositivo sintonizador. Por favor, asegúrate de que es accesible e inténtalo otra vez.",
|
||||||
"ErrorAddingXmlTvFile": "Ha sucedido un error accediendo al archivo XML. Por favor, asegúrate que el archivo existe e inténtalo de nuevo.",
|
"ErrorAddingXmlTvFile": "Ha sucedido un error accediendo al archivo XML. Por favor, asegúrate que el archivo existe e inténtalo de nuevo.",
|
||||||
"ErrorGettingTvLineups": "Ha habido un error descargando la programación de TV. Por favor, asegúrese que la información es correcta e inténtalo de nuevo.",
|
"ErrorGettingTvLineups": "Ha habido un error descargando la programación de TV. Por favor, asegúrese que la información es correcta e inténtalo de nuevo.",
|
||||||
"ErrorMessageStartHourGreaterThanEnd": "La hora de finalización tiene que ser mayor que la de inicio.",
|
"ErrorStartHourGreaterThanEnd": "La hora de finalización tiene que ser mayor que la de inicio.",
|
||||||
"ErrorPleaseSelectLineup": "Por favor selecciona una alineación e inténtalo otra vez. Si no hay alineaciones disponibles, revisa que tu nombre de usuario, contraseña y código postal son correctos.",
|
"ErrorPleaseSelectLineup": "Por favor selecciona una alineación e inténtalo otra vez. Si no hay alineaciones disponibles, revisa que tu nombre de usuario, contraseña y código postal son correctos.",
|
||||||
"ErrorSavingTvProvider": "Ha habido un error guardando el proveedor de TV. Por favor, asegúrate de que es accesible e inténtalo otra vez.",
|
"ErrorSavingTvProvider": "Ha habido un error guardando el proveedor de TV. Por favor, asegúrate de que es accesible e inténtalo otra vez.",
|
||||||
"EveryNDays": "Cada {0} días",
|
"EveryNDays": "Cada {0} días",
|
||||||
|
@ -854,8 +854,8 @@
|
||||||
"Next": "Siguiente",
|
"Next": "Siguiente",
|
||||||
"NextUp": "Seguidamente",
|
"NextUp": "Seguidamente",
|
||||||
"NoNewDevicesFound": "No se han encontrado nuevos dispositivos. Para añadir un sintonizador cierra este diálogo e introduce la información del dispositivo manualmente.",
|
"NoNewDevicesFound": "No se han encontrado nuevos dispositivos. Para añadir un sintonizador cierra este diálogo e introduce la información del dispositivo manualmente.",
|
||||||
"NoNextUpItemsMessage": "Nada encontrado. ¡Comienza a ver tus programas!",
|
"MessageNoNextUpItems": "Nada encontrado. ¡Comienza a ver tus programas!",
|
||||||
"NoPluginConfigurationMessage": "Este complemento no tiene opciones que configurar.",
|
"MessageNoPluginConfiguration": "Este complemento no tiene opciones que configurar.",
|
||||||
"NoSubtitleSearchResultsFound": "No se han encontrado resultados.",
|
"NoSubtitleSearchResultsFound": "No se han encontrado resultados.",
|
||||||
"NoSubtitles": "Sin subtítulos",
|
"NoSubtitles": "Sin subtítulos",
|
||||||
"NoSubtitlesHelp": "Los subtítulos no se cargarán de forma predeterminada. Tienen que ser activados manualmente durante la reproducción.",
|
"NoSubtitlesHelp": "Los subtítulos no se cargarán de forma predeterminada. Tienen que ser activados manualmente durante la reproducción.",
|
||||||
|
@ -1000,7 +1000,7 @@
|
||||||
"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?",
|
||||||
"PasswordResetHeader": "Restablecer contraseña",
|
"HeaderResetPassword": "Restablecer contraseña",
|
||||||
"PasswordSaved": "Contraseña guardada.",
|
"PasswordSaved": "Contraseña guardada.",
|
||||||
"People": "Gente",
|
"People": "Gente",
|
||||||
"PinCodeResetComplete": "El código PIN se ha restablecido.",
|
"PinCodeResetComplete": "El código PIN se ha restablecido.",
|
||||||
|
@ -1017,7 +1017,7 @@
|
||||||
"PleaseEnterNameOrId": "Introduzca un nombre o un identificador externo.",
|
"PleaseEnterNameOrId": "Introduzca un nombre o un identificador externo.",
|
||||||
"PleaseRestartServerName": "Por favor, reinicie el Servidor de Jellyfin - {0}.",
|
"PleaseRestartServerName": "Por favor, reinicie el Servidor de Jellyfin - {0}.",
|
||||||
"PleaseSelectTwoItems": "Seleccione al menos dos elementos.",
|
"PleaseSelectTwoItems": "Seleccione al menos dos elementos.",
|
||||||
"PluginInstalledMessage": "El complemento se ha instalado correctamente. El servidor Jellyfin deberá reiniciarse para que los cambios surjan efecto.",
|
"MessagePluginInstalled": "El complemento se ha instalado correctamente. El servidor Jellyfin deberá reiniciarse para que los cambios surjan efecto.",
|
||||||
"PreferEmbeddedTitlesOverFileNames": "Preferir títulos incrustados sobre los nombres de archivo",
|
"PreferEmbeddedTitlesOverFileNames": "Preferir títulos incrustados sobre los nombres de archivo",
|
||||||
"PreferEmbeddedTitlesOverFileNamesHelp": "Esto determina el título que se utilizará cuando un elemento no tenga etiquetas ni estas se hayan podido descargar de Internet.",
|
"PreferEmbeddedTitlesOverFileNamesHelp": "Esto determina el título que se utilizará cuando un elemento no tenga etiquetas ni estas se hayan podido descargar de Internet.",
|
||||||
"Premieres": "Estrenos",
|
"Premieres": "Estrenos",
|
||||||
|
@ -1037,7 +1037,7 @@
|
||||||
"Record": "Grabar",
|
"Record": "Grabar",
|
||||||
"RecordSeries": "Grabar serie",
|
"RecordSeries": "Grabar serie",
|
||||||
"RecordingCancelled": "Grabación cancelada.",
|
"RecordingCancelled": "Grabación cancelada.",
|
||||||
"RecordingPathChangeMessage": "Cambiar la carpeta de grabación no migrará las grabaciones existentes de la ubicación antigua a la nueva. Tendrá que moverlos manualmente si lo desea.",
|
"MessageChangeRecordingPath": "Cambiar la carpeta de grabación no migrará las grabaciones existentes de la ubicación antigua a la nueva. Tendrá que moverlos manualmente si lo desea.",
|
||||||
"RecordingScheduled": "Grabación programada.",
|
"RecordingScheduled": "Grabación programada.",
|
||||||
"Recordings": "Grabaciones",
|
"Recordings": "Grabaciones",
|
||||||
"Refresh": "Refrescar",
|
"Refresh": "Refrescar",
|
||||||
|
@ -1169,7 +1169,7 @@
|
||||||
"Tuesday": "Martes",
|
"Tuesday": "Martes",
|
||||||
"TvLibraryHelp": "Revisar la {0}guía de nombres de los programas de TV{1}.",
|
"TvLibraryHelp": "Revisar la {0}guía de nombres de los programas de TV{1}.",
|
||||||
"UninstallPluginConfirmation": "¿Esta seguro que desea desinstalar {0}?",
|
"UninstallPluginConfirmation": "¿Esta seguro que desea desinstalar {0}?",
|
||||||
"UninstallPluginHeader": "Desinstalar complemento",
|
"HeaderUninstallPlugin": "Desinstalar complemento",
|
||||||
"Unmute": "Activar audio",
|
"Unmute": "Activar audio",
|
||||||
"Unrated": "Sin clasificar",
|
"Unrated": "Sin clasificar",
|
||||||
"Up": "Arriba",
|
"Up": "Arriba",
|
||||||
|
@ -1511,8 +1511,8 @@
|
||||||
"LabelEnableHttps": "Activar HTTPS",
|
"LabelEnableHttps": "Activar HTTPS",
|
||||||
"TabDVR": "DVR",
|
"TabDVR": "DVR",
|
||||||
"SaveChanges": "Guardar cambios",
|
"SaveChanges": "Guardar cambios",
|
||||||
"EnableBlurhash": "Mostrar una representación de las imágenes mientras cargan",
|
"EnableBlurHash": "Mostrar una representación de las imágenes mientras cargan",
|
||||||
"EnableBlurhashHelp": "Aparecerá una representación de los colores de las imágenes antes de que terminen de cargar",
|
"EnableBlurHashHelp": "Aparecerá una representación de los colores de las imágenes antes de que terminen de cargar",
|
||||||
"HeaderDVR": "DVR",
|
"HeaderDVR": "DVR",
|
||||||
"SyncPlayAccessHelp": "Selecciona el nivel de acceso de este usuario para utilizar SyncPlay. SyncPlay te permite sincronizar la reproducción entre varios dispositivos.",
|
"SyncPlayAccessHelp": "Selecciona el nivel de acceso de este usuario para utilizar SyncPlay. SyncPlay te permite sincronizar la reproducción entre varios dispositivos.",
|
||||||
"MessageSyncPlayErrorMedia": "¡No se pudo activar SyncPlay! Error de medio.",
|
"MessageSyncPlayErrorMedia": "¡No se pudo activar SyncPlay! Error de medio.",
|
||||||
|
|
|
@ -114,7 +114,7 @@
|
||||||
"Unrated": "Sin clasificar",
|
"Unrated": "Sin clasificar",
|
||||||
"Unplayed": "No reproducido",
|
"Unplayed": "No reproducido",
|
||||||
"Unmute": "Activar sonido",
|
"Unmute": "Activar sonido",
|
||||||
"UninstallPluginHeader": "Desinstalar complemento",
|
"HeaderUninstallPlugin": "Desinstalar complemento",
|
||||||
"UninstallPluginConfirmation": "¿Estás seguro de querer desinstalar {0}?",
|
"UninstallPluginConfirmation": "¿Estás seguro de querer desinstalar {0}?",
|
||||||
"Uniform": "Uniforme",
|
"Uniform": "Uniforme",
|
||||||
"TvLibraryHelp": "Revisa la {0}guía de nombrado de series de TV{1}.",
|
"TvLibraryHelp": "Revisa la {0}guía de nombrado de series de TV{1}.",
|
||||||
|
@ -306,8 +306,8 @@
|
||||||
"NoSubtitlesHelp": "Los subtítulos no serán cargados por defecto. Pueden ser activados manualmente durante la reproducción.",
|
"NoSubtitlesHelp": "Los subtítulos no serán cargados por defecto. Pueden ser activados manualmente durante la reproducción.",
|
||||||
"NoSubtitles": "Ninguno",
|
"NoSubtitles": "Ninguno",
|
||||||
"NoSubtitleSearchResultsFound": "No se encontraron resultados.",
|
"NoSubtitleSearchResultsFound": "No se encontraron resultados.",
|
||||||
"NoPluginConfigurationMessage": "Este complemento no tiene configuraciones disponibles.",
|
"MessageNoPluginConfiguration": "Este complemento no tiene configuraciones disponibles.",
|
||||||
"NoNextUpItemsMessage": "No se encontró nada. ¡Comienza a ver tus programas!",
|
"MessageNoNextUpItems": "No se encontró nada. ¡Comienza a ver tus programas!",
|
||||||
"NoNewDevicesFound": "No se encontraron nuevos dispositivos. Para agregar un sintonizador nuevo, cierra este diálogo e introduce la información del dispositivo manualmente.",
|
"NoNewDevicesFound": "No se encontraron nuevos dispositivos. Para agregar un sintonizador nuevo, cierra este diálogo e introduce la información del dispositivo manualmente.",
|
||||||
"NoCreatedLibraries": "Parece que no has creado ninguna biblioteca todavía. {0}¿Quisieras crear una ahora?{1}",
|
"NoCreatedLibraries": "Parece que no has creado ninguna biblioteca todavía. {0}¿Quisieras crear una ahora?{1}",
|
||||||
"No": "No",
|
"No": "No",
|
||||||
|
@ -580,7 +580,7 @@
|
||||||
"Refresh": "Actualizar",
|
"Refresh": "Actualizar",
|
||||||
"Recordings": "Grabaciones",
|
"Recordings": "Grabaciones",
|
||||||
"RecordingScheduled": "Grabación programada.",
|
"RecordingScheduled": "Grabación programada.",
|
||||||
"RecordingPathChangeMessage": "Cambiar la carpeta de grabaciones no moverá las grabaciones existentes de la antigua ubicación a la nueva. Necesitan moverse manualmente si se desea.",
|
"MessageChangeRecordingPath": "Cambiar la carpeta de grabaciones no moverá las grabaciones existentes de la antigua ubicación a la nueva. Necesitan moverse manualmente si se desea.",
|
||||||
"RecordingCancelled": "Grabación cancelada.",
|
"RecordingCancelled": "Grabación cancelada.",
|
||||||
"RecordSeries": "Grabar series",
|
"RecordSeries": "Grabar series",
|
||||||
"Record": "Grabar",
|
"Record": "Grabar",
|
||||||
|
@ -604,7 +604,7 @@
|
||||||
"PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Esto utiliza la información del episodio desde los metadatos incrustados si están disponibles.",
|
"PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Esto utiliza la información del episodio desde los metadatos incrustados si están disponibles.",
|
||||||
"PreferEmbeddedTitlesOverFileNamesHelp": "Esto determina el título mostrado por defecto cuando no hay disponibles metadatos en Internet o localmente.",
|
"PreferEmbeddedTitlesOverFileNamesHelp": "Esto determina el título mostrado por defecto cuando no hay disponibles metadatos en Internet o localmente.",
|
||||||
"PreferEmbeddedTitlesOverFileNames": "Preferir títulos incrustados a los nombres de archivo",
|
"PreferEmbeddedTitlesOverFileNames": "Preferir títulos incrustados a los nombres de archivo",
|
||||||
"PluginInstalledMessage": "El complemento ha sido instalado con éxito. El servidor Jellyfin necesitará ser reiniciado para que los cambios surtan efecto.",
|
"MessagePluginInstalled": "El complemento ha sido instalado con éxito. El servidor Jellyfin necesitará ser reiniciado para que los cambios surtan efecto.",
|
||||||
"PleaseSelectTwoItems": "Por favor, selecciona al menos dos elementos.",
|
"PleaseSelectTwoItems": "Por favor, selecciona al menos dos elementos.",
|
||||||
"PleaseRestartServerName": "Por favor, reinicia el servidor Jellyfin - {0}.",
|
"PleaseRestartServerName": "Por favor, reinicia el servidor Jellyfin - {0}.",
|
||||||
"PleaseEnterNameOrId": "Por favor, introduce un nombre o ID externo.",
|
"PleaseEnterNameOrId": "Por favor, introduce un nombre o ID externo.",
|
||||||
|
@ -628,7 +628,7 @@
|
||||||
"People": "Personas",
|
"People": "Personas",
|
||||||
"PasswordSaved": "Contraseña guardada.",
|
"PasswordSaved": "Contraseña guardada.",
|
||||||
"PasswordResetProviderHelp": "Elige un proveedor de restablecimiento de contraseña para usar cuando este usuario solicite un restablecimiento de contraseña",
|
"PasswordResetProviderHelp": "Elige un proveedor de restablecimiento de contraseña para usar cuando este usuario solicite un restablecimiento de contraseña",
|
||||||
"PasswordResetHeader": "Restablecer contraseña",
|
"HeaderResetPassword": "Restablecer contraseña",
|
||||||
"PasswordResetConfirmation": "¿Estás seguro de querer restablecer la contraseña?",
|
"PasswordResetConfirmation": "¿Estás seguro de querer restablecer la contraseña?",
|
||||||
"PasswordResetComplete": "La contraseña ha sido restablecida.",
|
"PasswordResetComplete": "La contraseña ha sido restablecida.",
|
||||||
"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.",
|
||||||
|
@ -1303,7 +1303,7 @@
|
||||||
"EveryNDays": "Cada {0} días",
|
"EveryNDays": "Cada {0} días",
|
||||||
"ErrorSavingTvProvider": "Hubo un error al guardar el proveedor de TV. Por favor, asegúrate de que sea accesible e inténtalo de nuevo.",
|
"ErrorSavingTvProvider": "Hubo un error al guardar el proveedor de TV. Por favor, asegúrate de que sea accesible e inténtalo de nuevo.",
|
||||||
"ErrorPleaseSelectLineup": "Por favor, selecciona una programación e inténtalo de nuevo. Si no hay disponible ninguna, entonces, por favor, verifica que tu nombre de usuario, contraseña, y código postal sean correctos.",
|
"ErrorPleaseSelectLineup": "Por favor, selecciona una programación e inténtalo de nuevo. Si no hay disponible ninguna, entonces, por favor, verifica que tu nombre de usuario, contraseña, y código postal sean correctos.",
|
||||||
"ErrorMessageStartHourGreaterThanEnd": "La hora de finalización debe ser mayor que la hora de inicio.",
|
"ErrorStartHourGreaterThanEnd": "La hora de finalización debe ser mayor que la hora de inicio.",
|
||||||
"ErrorGettingTvLineups": "Hubo un error al descargar la programación de TV. Por favor, asegúrate de que tu información sea correcta e inténtalo de nuevo.",
|
"ErrorGettingTvLineups": "Hubo un error al descargar la programación de TV. Por favor, asegúrate de que tu información sea correcta e inténtalo de nuevo.",
|
||||||
"ErrorDeletingItem": "Hubo un error eliminando el elemento del servidor Jellyfin. Por favor, verifica que el servidor Jellyfin tiene permisos de escritura en la carpeta del medio e inténtalo de nuevo.",
|
"ErrorDeletingItem": "Hubo un error eliminando el elemento del servidor Jellyfin. Por favor, verifica que el servidor Jellyfin tiene permisos de escritura en la carpeta del medio e inténtalo de nuevo.",
|
||||||
"ErrorAddingXmlTvFile": "Hubo un error accediendo al archivo XMLTV. Por favor, asegúrate de que el archivo existe e inténtalo de nuevo.",
|
"ErrorAddingXmlTvFile": "Hubo un error accediendo al archivo XMLTV. Por favor, asegúrate de que el archivo existe e inténtalo de nuevo.",
|
||||||
|
@ -1374,7 +1374,7 @@
|
||||||
"DeinterlaceMethodHelp": "Seleccione el método de desentrelazado que se usará al transcodificar contenido entrelazado.",
|
"DeinterlaceMethodHelp": "Seleccione el método de desentrelazado que se usará al transcodificar contenido entrelazado.",
|
||||||
"DefaultSubtitlesHelp": "Los subtítulos se cargan basados en los indicadores «por defecto» y «forzado» incluidos en los metadatos. Las preferencias de idioma son consideradas cuando hay múltiples opciones disponibles.",
|
"DefaultSubtitlesHelp": "Los subtítulos se cargan basados en los indicadores «por defecto» y «forzado» incluidos en los metadatos. Las preferencias de idioma son consideradas cuando hay múltiples opciones disponibles.",
|
||||||
"DefaultMetadataLangaugeDescription": "Estos son sus valores por defecto y pueden ser personalizados en cada biblioteca.",
|
"DefaultMetadataLangaugeDescription": "Estos son sus valores por defecto y pueden ser personalizados en cada biblioteca.",
|
||||||
"DefaultErrorMessage": "Ha ocurrido un error al procesar la solicitud. Por favor, inténtalo de nuevo más tarde.",
|
"ErrorDefault": "Ha ocurrido un error al procesar la solicitud. Por favor, inténtalo de nuevo más tarde.",
|
||||||
"Default": "Por defecto",
|
"Default": "Por defecto",
|
||||||
"DeathDateValue": "Falleció: {0}",
|
"DeathDateValue": "Falleció: {0}",
|
||||||
"DatePlayed": "Fecha de reproducción",
|
"DatePlayed": "Fecha de reproducción",
|
||||||
|
@ -1496,7 +1496,7 @@
|
||||||
"ButtonAddImage": "Agregar imagen",
|
"ButtonAddImage": "Agregar imagen",
|
||||||
"ButtonAdd": "Agregar",
|
"ButtonAdd": "Agregar",
|
||||||
"BurnSubtitlesHelp": "Determina si el servidor debería quemar los 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.",
|
"BurnSubtitlesHelp": "Determina si el servidor debería quemar los 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.",
|
||||||
"BrowsePluginCatalogMessage": "Explora nuestro catálogo de complementos para ver los complementos disponibles.",
|
"MessageBrowsePluginCatalog": "Explora nuestro catálogo de complementos para ver los complementos disponibles.",
|
||||||
"Browse": "Explorar",
|
"Browse": "Explorar",
|
||||||
"BoxRear": "Caja (parte trasera)",
|
"BoxRear": "Caja (parte trasera)",
|
||||||
"Box": "Caja",
|
"Box": "Caja",
|
||||||
|
@ -1541,10 +1541,10 @@
|
||||||
"AllChannels": "Todos los canales",
|
"AllChannels": "Todos los canales",
|
||||||
"All": "Todo",
|
"All": "Todo",
|
||||||
"Alerts": "Alertas",
|
"Alerts": "Alertas",
|
||||||
"EnableBlurhash": "Habilitar marcadores de posición borrosos para imágenes",
|
"EnableBlurHash": "Habilitar marcadores de posición borrosos para imágenes",
|
||||||
"ShowMore": "Mostrar más",
|
"ShowMore": "Mostrar más",
|
||||||
"ShowLess": "Mostrar menos",
|
"ShowLess": "Mostrar menos",
|
||||||
"EnableBlurhashHelp": "Las imágenes que aún se están cargando se mostrarán con un marcador de posición borroso",
|
"EnableBlurHashHelp": "Las imágenes que aún se están cargando se mostrarán con un marcador de posición borroso",
|
||||||
"ButtonSyncPlay": "SyncPlay",
|
"ButtonSyncPlay": "SyncPlay",
|
||||||
"MessageNoGenresAvailable": "Permitir a algunos proveedores de metadatos obtener géneros desde Internet.",
|
"MessageNoGenresAvailable": "Permitir a algunos proveedores de metadatos obtener géneros desde Internet.",
|
||||||
"MessageAddRepository": "Si desea agregar un repositorio, haga clic en el botón al lado del encabezado y complete la información solicitada.",
|
"MessageAddRepository": "Si desea agregar un repositorio, haga clic en el botón al lado del encabezado y complete la información solicitada.",
|
||||||
|
|
|
@ -73,7 +73,7 @@
|
||||||
"MessagePleaseEnsureInternetMetadata": "لطفا مطمئن شوید دانلود متاداده از اینترنت فعال است.",
|
"MessagePleaseEnsureInternetMetadata": "لطفا مطمئن شوید دانلود متاداده از اینترنت فعال است.",
|
||||||
"MoreUsersCanBeAddedLater": "بعدا میتوانید کاربران بیشتری را در داشبورد اضافه کنید.",
|
"MoreUsersCanBeAddedLater": "بعدا میتوانید کاربران بیشتری را در داشبورد اضافه کنید.",
|
||||||
"NextUp": "بعدی چیه",
|
"NextUp": "بعدی چیه",
|
||||||
"NoNextUpItemsMessage": "چیزی یافت نشد. دیدن سریال ها یتان را شروع کنید!",
|
"MessageNoNextUpItems": "چیزی یافت نشد. دیدن سریال ها یتان را شروع کنید!",
|
||||||
"OptionAscending": "صعودی",
|
"OptionAscending": "صعودی",
|
||||||
"OptionDescending": "نزولی",
|
"OptionDescending": "نزولی",
|
||||||
"OptionDislikes": "پسندیده نشده ها",
|
"OptionDislikes": "پسندیده نشده ها",
|
||||||
|
@ -225,7 +225,7 @@
|
||||||
"AddToCollection": "افزودن به مجموعه",
|
"AddToCollection": "افزودن به مجموعه",
|
||||||
"ExitFullscreen": "خروج از تمام صفحه",
|
"ExitFullscreen": "خروج از تمام صفحه",
|
||||||
"EveryNDays": "هر {0} روز",
|
"EveryNDays": "هر {0} روز",
|
||||||
"ErrorMessageStartHourGreaterThanEnd": "زمان پایان باید پس از زمان شروع باشد.",
|
"ErrorStartHourGreaterThanEnd": "زمان پایان باید پس از زمان شروع باشد.",
|
||||||
"Episodes": "قسمتها",
|
"Episodes": "قسمتها",
|
||||||
"EndsAtValue": "تمام شده در {0}",
|
"EndsAtValue": "تمام شده در {0}",
|
||||||
"Ended": "تمام شده",
|
"Ended": "تمام شده",
|
||||||
|
@ -272,7 +272,7 @@
|
||||||
"DeleteDeviceConfirmation": "آیا از حذف این دستگاه اطمینان دارید؟ هنگامی که یک کاربر دوباره با آن دستگاه وارد شود، دوباره نمایش داده میشود.",
|
"DeleteDeviceConfirmation": "آیا از حذف این دستگاه اطمینان دارید؟ هنگامی که یک کاربر دوباره با آن دستگاه وارد شود، دوباره نمایش داده میشود.",
|
||||||
"Delete": "حذف",
|
"Delete": "حذف",
|
||||||
"DefaultMetadataLangaugeDescription": "این موارد پیشفرضهای شماست و میتوانید برای هر کتابخانه آن را شخصی سازی کنید.",
|
"DefaultMetadataLangaugeDescription": "این موارد پیشفرضهای شماست و میتوانید برای هر کتابخانه آن را شخصی سازی کنید.",
|
||||||
"DefaultErrorMessage": "خطایی در پردازش درخواست رخ داد. لطفا اندکی بعد دوباره تلاش کنید.",
|
"ErrorDefault": "خطایی در پردازش درخواست رخ داد. لطفا اندکی بعد دوباره تلاش کنید.",
|
||||||
"Default": "پیشفرض",
|
"Default": "پیشفرض",
|
||||||
"DeathDateValue": "تلف شد: {0}",
|
"DeathDateValue": "تلف شد: {0}",
|
||||||
"DatePlayed": "تاریخ پخش شده",
|
"DatePlayed": "تاریخ پخش شده",
|
||||||
|
@ -312,7 +312,7 @@
|
||||||
"ButtonShutdown": "خاموش",
|
"ButtonShutdown": "خاموش",
|
||||||
"ButtonSelectDirectory": "انتخاب مسیر",
|
"ButtonSelectDirectory": "انتخاب مسیر",
|
||||||
"ButtonEditOtherUserPreferences": "نمایه، تصویر و ترجیحات شخصی این کاربر را ویرایش کنید.",
|
"ButtonEditOtherUserPreferences": "نمایه، تصویر و ترجیحات شخصی این کاربر را ویرایش کنید.",
|
||||||
"BrowsePluginCatalogMessage": "برای مرور کردن افزونههای موجود، به فروشگاه افزونههای ما سر بزنید.",
|
"MessageBrowsePluginCatalog": "برای مرور کردن افزونههای موجود، به فروشگاه افزونههای ما سر بزنید.",
|
||||||
"AuthProviderHelp": "ارائه دهنده تأیید اعتبار را انتخاب کنید تا برای تأیید اعتبار گذرواژه این کاربر استفاده شود.",
|
"AuthProviderHelp": "ارائه دهنده تأیید اعتبار را انتخاب کنید تا برای تأیید اعتبار گذرواژه این کاربر استفاده شود.",
|
||||||
"HeaderRecordingPostProcessing": "در حال ضبط پس پردازش",
|
"HeaderRecordingPostProcessing": "در حال ضبط پس پردازش",
|
||||||
"HeaderRecordingOptions": "گزینههای ضبط",
|
"HeaderRecordingOptions": "گزینههای ضبط",
|
||||||
|
@ -520,7 +520,7 @@
|
||||||
"Unrated": "بدون امتیاز",
|
"Unrated": "بدون امتیاز",
|
||||||
"Unplayed": "پخش نشده",
|
"Unplayed": "پخش نشده",
|
||||||
"Unmute": "صدادار",
|
"Unmute": "صدادار",
|
||||||
"UninstallPluginHeader": "حذف نصب افزونه",
|
"HeaderUninstallPlugin": "حذف نصب افزونه",
|
||||||
"UninstallPluginConfirmation": "آیا اطمینان دارید که میخواهید {0} را حذف نصب کنید؟",
|
"UninstallPluginConfirmation": "آیا اطمینان دارید که میخواهید {0} را حذف نصب کنید؟",
|
||||||
"Uniform": "یکپارچه",
|
"Uniform": "یکپارچه",
|
||||||
"Tuesday": "سهشنبه",
|
"Tuesday": "سهشنبه",
|
||||||
|
@ -698,7 +698,7 @@
|
||||||
"MessageInvalidUser": "نام کاربری یا گذرواژه نامعتبر است. لطفا دوباره تلاش کنید.",
|
"MessageInvalidUser": "نام کاربری یا گذرواژه نامعتبر است. لطفا دوباره تلاش کنید.",
|
||||||
"MessageInvalidForgotPasswordPin": "کد پین نامعتبر یا منقضی شده وارد شد. لطفا دوباره تلاش کنید.",
|
"MessageInvalidForgotPasswordPin": "کد پین نامعتبر یا منقضی شده وارد شد. لطفا دوباره تلاش کنید.",
|
||||||
"MessageInstallPluginFromApp": "این افزونه باید از داخل برنامهای که قصد استفاده از آن را دارید نصب شود.",
|
"MessageInstallPluginFromApp": "این افزونه باید از داخل برنامهای که قصد استفاده از آن را دارید نصب شود.",
|
||||||
"PasswordResetHeader": "بازنشانی گذرواژه",
|
"HeaderResetPassword": "بازنشانی گذرواژه",
|
||||||
"PasswordResetConfirmation": "آیا واقعا تمایل به بازنشانی گذرواژه دارید؟",
|
"PasswordResetConfirmation": "آیا واقعا تمایل به بازنشانی گذرواژه دارید؟",
|
||||||
"PasswordResetComplete": "گذرواژه بازنشانی شد.",
|
"PasswordResetComplete": "گذرواژه بازنشانی شد.",
|
||||||
"PasswordMatchError": "گذرواژه و تکرار گذرواژه باید یکسان باشند.",
|
"PasswordMatchError": "گذرواژه و تکرار گذرواژه باید یکسان باشند.",
|
||||||
|
@ -743,7 +743,7 @@
|
||||||
"Refresh": "بهروزرسانی",
|
"Refresh": "بهروزرسانی",
|
||||||
"Recordings": "ضبط شده ها",
|
"Recordings": "ضبط شده ها",
|
||||||
"RecordingScheduled": "ضبط برنامه ریزی شد.",
|
"RecordingScheduled": "ضبط برنامه ریزی شد.",
|
||||||
"RecordingPathChangeMessage": "با تغییر محل ذخیره فایل های ضبط شده، فایل های موجود به صورت خودکار منتقل نمی شوند. در صورت نیاز، شما باید خودتان این کار را انجام دهید.",
|
"MessageChangeRecordingPath": "با تغییر محل ذخیره فایل های ضبط شده، فایل های موجود به صورت خودکار منتقل نمی شوند. در صورت نیاز، شما باید خودتان این کار را انجام دهید.",
|
||||||
"RecordingCancelled": "ضبط شدن لغو شد.",
|
"RecordingCancelled": "ضبط شدن لغو شد.",
|
||||||
"RecordSeries": "ضبط کردن سریال ها",
|
"RecordSeries": "ضبط کردن سریال ها",
|
||||||
"Record": "ضبط کردن",
|
"Record": "ضبط کردن",
|
||||||
|
@ -767,7 +767,7 @@
|
||||||
"PreferEmbeddedEpisodeInfosOverFileNamesHelp": "این از اطلاعات قسمت در فراداده های تعبیه شده در صورت موجود استفاده می کند.",
|
"PreferEmbeddedEpisodeInfosOverFileNamesHelp": "این از اطلاعات قسمت در فراداده های تعبیه شده در صورت موجود استفاده می کند.",
|
||||||
"PreferEmbeddedTitlesOverFileNamesHelp": "این عنوان نمایش را به صورت پیش فرض تعیین می کند، زمانی که فراداده اینترنتی یا محلی موجود نباشند.",
|
"PreferEmbeddedTitlesOverFileNamesHelp": "این عنوان نمایش را به صورت پیش فرض تعیین می کند، زمانی که فراداده اینترنتی یا محلی موجود نباشند.",
|
||||||
"PreferEmbeddedTitlesOverFileNames": "عنوان های تعبیه شده را به نام فایل ترجیح بده",
|
"PreferEmbeddedTitlesOverFileNames": "عنوان های تعبیه شده را به نام فایل ترجیح بده",
|
||||||
"PluginInstalledMessage": "افزونه با موفقیت نصب شد. برای اعمال تغییرات سرور جلیفین نیاز به بارگذاری مجدد دارد.",
|
"MessagePluginInstalled": "افزونه با موفقیت نصب شد. برای اعمال تغییرات سرور جلیفین نیاز به بارگذاری مجدد دارد.",
|
||||||
"PleaseSelectTwoItems": "لطفا حداقل دو مورد را انتخاب کنید.",
|
"PleaseSelectTwoItems": "لطفا حداقل دو مورد را انتخاب کنید.",
|
||||||
"PleaseRestartServerName": "لطفا سرور جلیفین را دوباره بارگذاری کنید - {0}.",
|
"PleaseRestartServerName": "لطفا سرور جلیفین را دوباره بارگذاری کنید - {0}.",
|
||||||
"PleaseEnterNameOrId": "لطفا یک نام یا شناسه خارجی را وارد کنید.",
|
"PleaseEnterNameOrId": "لطفا یک نام یا شناسه خارجی را وارد کنید.",
|
||||||
|
@ -797,7 +797,7 @@
|
||||||
"LaunchWebAppOnStartup": "نمای وب هنگامی که سرور آغاز به کار میکند باز بشود",
|
"LaunchWebAppOnStartup": "نمای وب هنگامی که سرور آغاز به کار میکند باز بشود",
|
||||||
"NoSubtitles": "خالی",
|
"NoSubtitles": "خالی",
|
||||||
"NoSubtitleSearchResultsFound": "نتیجهای یافت نشد.",
|
"NoSubtitleSearchResultsFound": "نتیجهای یافت نشد.",
|
||||||
"NoPluginConfigurationMessage": "این افزونه هیچ تنظیماتی برای پیکربندی ندارد.",
|
"MessageNoPluginConfiguration": "این افزونه هیچ تنظیماتی برای پیکربندی ندارد.",
|
||||||
"No": "خیر",
|
"No": "خیر",
|
||||||
"Next": "بعدی",
|
"Next": "بعدی",
|
||||||
"News": "اخبار",
|
"News": "اخبار",
|
||||||
|
@ -1543,7 +1543,7 @@
|
||||||
"TvLibraryHelp": "Review the {0}TV naming guide{1}.",
|
"TvLibraryHelp": "Review the {0}TV naming guide{1}.",
|
||||||
"UserAgentHelp": "Supply a custom user-agent HTTP header.",
|
"UserAgentHelp": "Supply a custom user-agent HTTP header.",
|
||||||
"ValueContainer": "Container: {0}",
|
"ValueContainer": "Container: {0}",
|
||||||
"EnableBlurhash": "Enable blurred placeholders for images",
|
"EnableBlurHash": "Enable blurred placeholders for images",
|
||||||
"EnableBlurhashHelp": "Images that are still being loaded will be displayed with a blurred placeholder",
|
"EnableBlurHashHelp": "Images that are still being loaded will be displayed with a blurred placeholder",
|
||||||
"ButtonSyncPlay": "SyncPlay"
|
"ButtonSyncPlay": "SyncPlay"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"BrowsePluginCatalogMessage": "Selaa lisäosakuvastoamme katsoaksesi saatavilla olevia lisäosia.",
|
"MessageBrowsePluginCatalog": "Selaa lisäosakuvastoamme katsoaksesi saatavilla olevia lisäosia.",
|
||||||
"ButtonAddUser": "Lisää Käyttäjä",
|
"ButtonAddUser": "Lisää Käyttäjä",
|
||||||
"ButtonCancel": "Peruuta",
|
"ButtonCancel": "Peruuta",
|
||||||
"ButtonDeleteImage": "Poista Kuva",
|
"ButtonDeleteImage": "Poista Kuva",
|
||||||
|
@ -47,7 +47,7 @@
|
||||||
"TellUsAboutYourself": "Kerro meille itsestäsi",
|
"TellUsAboutYourself": "Kerro meille itsestäsi",
|
||||||
"ThisWizardWillGuideYou": "Tämä työkalu auttaa sinua asennusprosessin aikana. Valitse kieli aloittaaksesi.",
|
"ThisWizardWillGuideYou": "Tämä työkalu auttaa sinua asennusprosessin aikana. Valitse kieli aloittaaksesi.",
|
||||||
"UninstallPluginConfirmation": "Oletko varma, että haluat poistaa {0}?",
|
"UninstallPluginConfirmation": "Oletko varma, että haluat poistaa {0}?",
|
||||||
"UninstallPluginHeader": "Poista Lisäosa",
|
"HeaderUninstallPlugin": "Poista Lisäosa",
|
||||||
"Absolute": "Ehdoton",
|
"Absolute": "Ehdoton",
|
||||||
"Actor": "Näyttelijä",
|
"Actor": "Näyttelijä",
|
||||||
"Add": "Lisää",
|
"Add": "Lisää",
|
||||||
|
@ -201,7 +201,7 @@
|
||||||
"DateAdded": "Lisäyspäivämäärä",
|
"DateAdded": "Lisäyspäivämäärä",
|
||||||
"DatePlayed": "Toistopäivämäärä",
|
"DatePlayed": "Toistopäivämäärä",
|
||||||
"Default": "Oletus",
|
"Default": "Oletus",
|
||||||
"DefaultErrorMessage": "Pyynnön käsittelyssä tapahtui virhe. Yritä myöhemmin uudelleen.",
|
"ErrorDefault": "Pyynnön käsittelyssä tapahtui virhe. Yritä myöhemmin uudelleen.",
|
||||||
"DefaultMetadataLangaugeDescription": "Nämä ovat sinun oletuksetasetukset ja niitä voidaan muokata kirjastokohtaisesti.",
|
"DefaultMetadataLangaugeDescription": "Nämä ovat sinun oletuksetasetukset ja niitä voidaan muokata kirjastokohtaisesti.",
|
||||||
"DefaultSubtitlesHelp": "Tekstitykset ladataan pakotettu- ja oletusmäärityksien upotetun metadatan mukaan. Kieliasetukset otetaan huomioon, kun on enemmän kuin yksi tekstitys josta valita.",
|
"DefaultSubtitlesHelp": "Tekstitykset ladataan pakotettu- ja oletusmäärityksien upotetun metadatan mukaan. Kieliasetukset otetaan huomioon, kun on enemmän kuin yksi tekstitys josta valita.",
|
||||||
"DeleteDeviceConfirmation": "Oletko varma, että haluat positaa tämän laitteen? Se ilmaantuu uudelleen seuraavan kerran, kun jokin käyttäjä kirjautuu sillä.",
|
"DeleteDeviceConfirmation": "Oletko varma, että haluat positaa tämän laitteen? Se ilmaantuu uudelleen seuraavan kerran, kun jokin käyttäjä kirjautuu sillä.",
|
||||||
|
@ -303,7 +303,7 @@
|
||||||
"Play": "Toista",
|
"Play": "Toista",
|
||||||
"PinCodeResetConfirmation": "Haluatko varmasti nollata PIN-koodin?",
|
"PinCodeResetConfirmation": "Haluatko varmasti nollata PIN-koodin?",
|
||||||
"People": "Ihmiset",
|
"People": "Ihmiset",
|
||||||
"PasswordResetHeader": "Nollaa salasana",
|
"HeaderResetPassword": "Nollaa salasana",
|
||||||
"OriginalAirDateValue": "Alkuperäinen esityspäivä: {0}",
|
"OriginalAirDateValue": "Alkuperäinen esityspäivä: {0}",
|
||||||
"OptionWeekly": "Viikottainen",
|
"OptionWeekly": "Viikottainen",
|
||||||
"OptionWeekends": "Viikonloput",
|
"OptionWeekends": "Viikonloput",
|
||||||
|
@ -831,7 +831,7 @@
|
||||||
"OnApplicationStartup": "Käynnistyksen yhteydessä",
|
"OnApplicationStartup": "Käynnistyksen yhteydessä",
|
||||||
"NumLocationsValue": "{0} kansiota",
|
"NumLocationsValue": "{0} kansiota",
|
||||||
"NoSubtitleSearchResultsFound": "Ei tuloksia.",
|
"NoSubtitleSearchResultsFound": "Ei tuloksia.",
|
||||||
"NoPluginConfigurationMessage": "Tällä liitännäisellä ei ole asetuksia muokattavaksi.",
|
"MessageNoPluginConfiguration": "Tällä liitännäisellä ei ole asetuksia muokattavaksi.",
|
||||||
"NoCreatedLibraries": "Vaikuttaa siltä, ettet ole luonut vielä yhtään kirjastoa. {0} Haluaisitko luoda sellaisen nyt?{1}",
|
"NoCreatedLibraries": "Vaikuttaa siltä, ettet ole luonut vielä yhtään kirjastoa. {0} Haluaisitko luoda sellaisen nyt?{1}",
|
||||||
"No": "Ei",
|
"No": "Ei",
|
||||||
"NextUp": "Seuraavana",
|
"NextUp": "Seuraavana",
|
||||||
|
@ -1216,7 +1216,7 @@
|
||||||
"FolderTypeUnset": "Sekalainen sisältö",
|
"FolderTypeUnset": "Sekalainen sisältö",
|
||||||
"FetchingData": "Noudetaan lisätietoja",
|
"FetchingData": "Noudetaan lisätietoja",
|
||||||
"Features": "Ominaisuudet",
|
"Features": "Ominaisuudet",
|
||||||
"ErrorMessageStartHourGreaterThanEnd": "Loppumisajan on oltava myöhemmin kuin aloitusaika.",
|
"ErrorStartHourGreaterThanEnd": "Loppumisajan on oltava myöhemmin kuin aloitusaika.",
|
||||||
"MediaInfoAnamorphic": "Anamorfinen",
|
"MediaInfoAnamorphic": "Anamorfinen",
|
||||||
"ErrorGettingTvLineups": "TV esiintyjälistan lataamisessa tapahtui virhe. Varmista, että tiedot on oikein ja yritä uudelleen.",
|
"ErrorGettingTvLineups": "TV esiintyjälistan lataamisessa tapahtui virhe. Varmista, että tiedot on oikein ja yritä uudelleen.",
|
||||||
"EnableDetailsBannerHelp": "Näyttää julistekuvan yksityiskohdat -sivun ylälaidassa.",
|
"EnableDetailsBannerHelp": "Näyttää julistekuvan yksityiskohdat -sivun ylälaidassa.",
|
||||||
|
|
|
@ -138,7 +138,7 @@
|
||||||
"Box": "Boîtier",
|
"Box": "Boîtier",
|
||||||
"BoxRear": "Dos de boîtier",
|
"BoxRear": "Dos de boîtier",
|
||||||
"Browse": "Parcourir",
|
"Browse": "Parcourir",
|
||||||
"BrowsePluginCatalogMessage": "Explorer notre catalogue des plugins pour voir les plugins disponibles.",
|
"MessageBrowsePluginCatalog": "Explorer notre catalogue des plugins pour voir les plugins disponibles.",
|
||||||
"AllowHWTranscodingHelp": "Permets au syntonisateur de transcoder les flux à la volée. Cela peut aider à réduire le transcodage requis par le serveur.",
|
"AllowHWTranscodingHelp": "Permets au syntonisateur de transcoder les flux à la volée. Cela peut aider à réduire le transcodage requis par le serveur.",
|
||||||
"BurnSubtitlesHelp": "Détermine si le serveur doit graver les sous-titres lors du transcodage vidéo. Éviter ceci améliorera les performances du serveur. Sélectionnez Auto pour graver les formats basés sur l'image (par exemple, VOBSUB, PGS, SUB/IDX etc) ainsi que certains sous-titres ASS/SSA.",
|
"BurnSubtitlesHelp": "Détermine si le serveur doit graver les sous-titres lors du transcodage vidéo. Éviter ceci améliorera les performances du serveur. Sélectionnez Auto pour graver les formats basés sur l'image (par exemple, VOBSUB, PGS, SUB/IDX etc) ainsi que certains sous-titres ASS/SSA.",
|
||||||
"ButtonAdd": "Ajouter",
|
"ButtonAdd": "Ajouter",
|
||||||
|
|
|
@ -49,7 +49,7 @@
|
||||||
"Box": "Boîtier",
|
"Box": "Boîtier",
|
||||||
"BoxRear": "Dos de boîtier",
|
"BoxRear": "Dos de boîtier",
|
||||||
"Browse": "Parcourir",
|
"Browse": "Parcourir",
|
||||||
"BrowsePluginCatalogMessage": "Explorer notre catalogue des plugins pour voir les plugins disponibles.",
|
"MessageBrowsePluginCatalog": "Explorer notre catalogue des plugins pour voir les plugins disponibles.",
|
||||||
"BurnSubtitlesHelp": "Détermine si le serveur doit incruster les sous-titres lors du transcodage de la vidéo. Les performances seront grandement améliorées sans incrustation. Sélectionnez Auto pour incruster par image les formats (VOBSUB, PGS, SUB, IDX etc) et certains sous-titres ASS ou SSA.",
|
"BurnSubtitlesHelp": "Détermine si le serveur doit incruster les sous-titres lors du transcodage de la vidéo. Les performances seront grandement améliorées sans incrustation. Sélectionnez Auto pour incruster par image les formats (VOBSUB, PGS, SUB, IDX etc) et certains sous-titres ASS ou SSA.",
|
||||||
"ButtonAdd": "Ajouter",
|
"ButtonAdd": "Ajouter",
|
||||||
"ButtonAddMediaLibrary": "Ajouter une médiathèque",
|
"ButtonAddMediaLibrary": "Ajouter une médiathèque",
|
||||||
|
@ -155,7 +155,7 @@
|
||||||
"DatePlayed": "Date de lecture",
|
"DatePlayed": "Date de lecture",
|
||||||
"DeathDateValue": "Décédé(e) le {0}",
|
"DeathDateValue": "Décédé(e) le {0}",
|
||||||
"Default": "Par défaut",
|
"Default": "Par défaut",
|
||||||
"DefaultErrorMessage": "Il y a eu une erreur lors de l'exécution de la requête. Veuillez réessayer plus tard.",
|
"ErrorDefault": "Il y a eu une erreur lors de l'exécution de la requête. Veuillez réessayer plus tard.",
|
||||||
"DefaultMetadataLangaugeDescription": "Ce sont vos réglages par défaut. Ils peuvent être personnalisés pour chaque médiathèque.",
|
"DefaultMetadataLangaugeDescription": "Ce sont vos réglages par défaut. Ils peuvent être personnalisés pour chaque médiathèque.",
|
||||||
"DefaultSubtitlesHelp": "Les sous-titres seront chargés selon les marqueurs par défaut et forcé dans les métadonnées intégrées. Les langues préférées seront utilisées quand plusieurs options seront disponibles.",
|
"DefaultSubtitlesHelp": "Les sous-titres seront chargés selon les marqueurs par défaut et forcé dans les métadonnées intégrées. Les langues préférées seront utilisées quand plusieurs options seront disponibles.",
|
||||||
"Delete": "Supprimer",
|
"Delete": "Supprimer",
|
||||||
|
@ -172,7 +172,7 @@
|
||||||
"DeviceAccessHelp": "Ceci ne s'applique qu'aux appareils qui peuvent être identifiés de manière unique et n'empêchera pas l'accès par navigateur. Le filtrage de l'accès aux appareil par utilisateur empêchera l'utilisation de nouveaux appareils jusqu'à ce qu'ils soient approuvés ici.",
|
"DeviceAccessHelp": "Ceci ne s'applique qu'aux appareils qui peuvent être identifiés de manière unique et n'empêchera pas l'accès par navigateur. Le filtrage de l'accès aux appareil par utilisateur empêchera l'utilisation de nouveaux appareils jusqu'à ce qu'ils soient approuvés ici.",
|
||||||
"DirectPlaying": "Lecture directe",
|
"DirectPlaying": "Lecture directe",
|
||||||
"DirectStreamHelp1": "Le média est compatible avec l'appareil en ce qui concerne la résolution et le type de média (H.264, AC3, etc), mais se trouve dans un conteneur de fichiers incompatible (mkv, avi, wmv, etc). La vidéo sera rempaquetée à la volée avant d'être diffusée à l'appareil.",
|
"DirectStreamHelp1": "Le média est compatible avec l'appareil en ce qui concerne la résolution et le type de média (H.264, AC3, etc), mais se trouve dans un conteneur de fichiers incompatible (mkv, avi, wmv, etc). La vidéo sera rempaquetée à la volée avant d'être diffusée à l'appareil.",
|
||||||
"DirectStreamHelp2": "Le streaming en direct d'un fichier utilise très peu de puissance de traitement sans perte de qualité vidéo.",
|
"DirectStreamHelp2": "Le streaming en direct utilise très peu de puissance de traitement avec une perte minime de qualité vidéo.",
|
||||||
"DirectStreaming": "Streaming direct",
|
"DirectStreaming": "Streaming direct",
|
||||||
"Director": "Réalisateur(trice)",
|
"Director": "Réalisateur(trice)",
|
||||||
"Directors": "Réalisateurs",
|
"Directors": "Réalisateurs",
|
||||||
|
@ -224,7 +224,7 @@
|
||||||
"ErrorAddingXmlTvFile": "Une erreur est survenue lors de l'accès au fichier XMLTV. Assurez-vous que le fichier existe et réessayez.",
|
"ErrorAddingXmlTvFile": "Une erreur est survenue lors de l'accès au fichier XMLTV. Assurez-vous que le fichier existe et réessayez.",
|
||||||
"ErrorDeletingItem": "Une erreur s'est produite lors de la suppression de l'élément du serveur Jellyfin. Vérifiez que le serveur Jellyfin a un accès en écriture au dossier multimédia et réessayez.",
|
"ErrorDeletingItem": "Une erreur s'est produite lors de la suppression de l'élément du serveur Jellyfin. Vérifiez que le serveur Jellyfin a un accès en écriture au dossier multimédia et réessayez.",
|
||||||
"ErrorGettingTvLineups": "Une erreur est survenue pendant le téléchargement des programmes TV. Assurez-vous que vos informations sont correctes et réessayez.",
|
"ErrorGettingTvLineups": "Une erreur est survenue pendant le téléchargement des programmes TV. Assurez-vous que vos informations sont correctes et réessayez.",
|
||||||
"ErrorMessageStartHourGreaterThanEnd": "La date de fin doit être postérieure à la date de début.",
|
"ErrorStartHourGreaterThanEnd": "La date de fin doit être postérieure à la date de début.",
|
||||||
"ErrorPleaseSelectLineup": "Veuillez sélectionner une programmation et réessayer. Si aucune programmation n'est disponible, veuillez vérifier que vos identifiant, mot de passe et code postal sont corrects.",
|
"ErrorPleaseSelectLineup": "Veuillez sélectionner une programmation et réessayer. Si aucune programmation n'est disponible, veuillez vérifier que vos identifiant, mot de passe et code postal sont corrects.",
|
||||||
"ErrorSavingTvProvider": "Une erreur est survenue lors de la sauvegarde du fournisseur TV. Assurez-vous qu'il est accessible et réessayez.",
|
"ErrorSavingTvProvider": "Une erreur est survenue lors de la sauvegarde du fournisseur TV. Assurez-vous qu'il est accessible et réessayez.",
|
||||||
"EveryNDays": "Tous les {0} jours",
|
"EveryNDays": "Tous les {0} jours",
|
||||||
|
@ -277,7 +277,7 @@
|
||||||
"HeaderAllowMediaDeletionFrom": "Autoriser la suppression de médias à partir de",
|
"HeaderAllowMediaDeletionFrom": "Autoriser la suppression de médias à partir de",
|
||||||
"HeaderApiKey": "Clé API",
|
"HeaderApiKey": "Clé API",
|
||||||
"HeaderApiKeys": "Clés API",
|
"HeaderApiKeys": "Clés API",
|
||||||
"HeaderApiKeysHelp": "Les applications externes ont besoin d'une clé d'API pour communiquer avec le serveur Jellyfin. Les clés sont distribuées lors d'une connexion avec un compte Jellyfin, ou bien en accordant manuellement une clé à une application.",
|
"HeaderApiKeysHelp": "Les applications externes ont besoin d'une clé d'API pour communiquer avec le serveur. Les clés sont distribuées lors d'une connexion avec un compte normal ou en accordant manuellement une clé à une application.",
|
||||||
"HeaderApp": "Application",
|
"HeaderApp": "Application",
|
||||||
"HeaderAppearsOn": "Apparait dans",
|
"HeaderAppearsOn": "Apparait dans",
|
||||||
"HeaderAudioBooks": "Livres audios",
|
"HeaderAudioBooks": "Livres audios",
|
||||||
|
@ -397,7 +397,7 @@
|
||||||
"HeaderPreferredMetadataLanguage": "Langue de métadonnées préférée",
|
"HeaderPreferredMetadataLanguage": "Langue de métadonnées préférée",
|
||||||
"HeaderProfile": "Profil",
|
"HeaderProfile": "Profil",
|
||||||
"HeaderProfileInformation": "Information de profil",
|
"HeaderProfileInformation": "Information de profil",
|
||||||
"HeaderProfileServerSettingsHelp": "Ces valeurs contrôlent la façon dont le serveur Jellyfin se présentera aux appareils.",
|
"HeaderProfileServerSettingsHelp": "Ces valeurs contrôlent la façon dont le serveur se présentera aux clients.",
|
||||||
"HeaderRecentlyPlayed": "Lus récemment",
|
"HeaderRecentlyPlayed": "Lus récemment",
|
||||||
"HeaderRecordingOptions": "Options d'enregistrement",
|
"HeaderRecordingOptions": "Options d'enregistrement",
|
||||||
"HeaderRecordingPostProcessing": "Traitement des enregistrements",
|
"HeaderRecordingPostProcessing": "Traitement des enregistrements",
|
||||||
|
@ -421,7 +421,7 @@
|
||||||
"HeaderSelectServerCachePath": "Sélectionner le chemin d'accès du cache de serveur",
|
"HeaderSelectServerCachePath": "Sélectionner le chemin d'accès du cache de serveur",
|
||||||
"HeaderSelectServerCachePathHelp": "Parcourir ou saisir le chemin d'accès à utiliser pour les fichiers cache du serveur. Le dossier doit être accessible en écriture.",
|
"HeaderSelectServerCachePathHelp": "Parcourir ou saisir le chemin d'accès à utiliser pour les fichiers cache du serveur. Le dossier doit être accessible en écriture.",
|
||||||
"HeaderSelectTranscodingPath": "Sélectionner le chemin d'accès du dossier temporaire de transcodage",
|
"HeaderSelectTranscodingPath": "Sélectionner le chemin d'accès du dossier temporaire de transcodage",
|
||||||
"HeaderSelectTranscodingPathHelp": "Parcourir ou saisir le chemin d'accès à utiliser pour les fichiers de transcodage temporaires. Le dossier doit être accessible en écriture.",
|
"HeaderSelectTranscodingPathHelp": "Parcourir ou saisir le chemin d'accès à utiliser pour les fichiers de transcodage. Le dossier doit être accessible en écriture.",
|
||||||
"HeaderSendMessage": "Envoyer un message",
|
"HeaderSendMessage": "Envoyer un message",
|
||||||
"HeaderSeries": "Séries",
|
"HeaderSeries": "Séries",
|
||||||
"HeaderSeriesOptions": "Options de la série",
|
"HeaderSeriesOptions": "Options de la série",
|
||||||
|
@ -471,8 +471,8 @@
|
||||||
"Home": "Accueil",
|
"Home": "Accueil",
|
||||||
"HttpsRequiresCert": "Pour activer les connexions sécurisées, vous devrez fournir un certificat SSL vérifié, comme ceux fournis par Let's Encrypt. Veuillez fournir un certificat ou désactiver les connexions sécurisées.",
|
"HttpsRequiresCert": "Pour activer les connexions sécurisées, vous devrez fournir un certificat SSL vérifié, comme ceux fournis par Let's Encrypt. Veuillez fournir un certificat ou désactiver les connexions sécurisées.",
|
||||||
"Identify": "Identifier",
|
"Identify": "Identifier",
|
||||||
"ImportFavoriteChannelsHelp": "Activez cette option pour n'importer que les chaînes ajoutées aux favoris sur le tuner.",
|
"ImportFavoriteChannelsHelp": "Seules les chaînes ajoutées aux favoris sur le tuner seront importées.",
|
||||||
"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ées 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} (version {1})",
|
"InstallingPackage": "Installation de {0} (version {1})",
|
||||||
"InstantMix": "Mix instantané",
|
"InstantMix": "Mix instantané",
|
||||||
"ItemCount": "{0} éléments",
|
"ItemCount": "{0} éléments",
|
||||||
|
@ -505,14 +505,14 @@
|
||||||
"LabelAppName": "Nom de l'application",
|
"LabelAppName": "Nom de l'application",
|
||||||
"LabelAppNameExample": "Exemple: Sickbeard, Sonarr",
|
"LabelAppNameExample": "Exemple: Sickbeard, Sonarr",
|
||||||
"LabelArtists": "Artistes :",
|
"LabelArtists": "Artistes :",
|
||||||
"LabelArtistsHelp": "Séparer les différents éléments par ;",
|
"LabelArtistsHelp": "Séparer les différents éléments par un point-virgule.",
|
||||||
"LabelAudioLanguagePreference": "Langue audio préférée :",
|
"LabelAudioLanguagePreference": "Langue audio préférée :",
|
||||||
"LabelAutomaticallyRefreshInternetMetadataEvery": "Actualiser automatiquement les métadonnées depuis internet :",
|
"LabelAutomaticallyRefreshInternetMetadataEvery": "Actualiser automatiquement les métadonnées depuis internet :",
|
||||||
"LabelBindToLocalNetworkAddress": "Lier à l'adresse de réseau local :",
|
"LabelBindToLocalNetworkAddress": "Lier à l'adresse de réseau local :",
|
||||||
"LabelBindToLocalNetworkAddressHelp": "Optionnel. Remplace l'adresse IP locale à laquelle se lie le serveur HTTP. Sans paramètre, le serveur va se lier à toutes les adresses disponibles. La modification de cette valeur nécessite le redémarrage du serveur Jellyfin.",
|
"LabelBindToLocalNetworkAddressHelp": "Remplace l'adresse IP locale du serveur HTTP. Sans paramètre, le serveur va se lier à toutes les adresses disponibles. La modification de cette valeur nécessite le redémarrage du serveur Jellyfin.",
|
||||||
"LabelBirthDate": "Date de naissance :",
|
"LabelBirthDate": "Date de naissance :",
|
||||||
"LabelBirthYear": "Année de naissance :",
|
"LabelBirthYear": "Année de naissance :",
|
||||||
"LabelBlastMessageInterval": "Intervalle des messages de présence (secondes)",
|
"LabelBlastMessageInterval": "Intervalle des messages de présence",
|
||||||
"LabelBlastMessageIntervalHelp": "Détermine la durée en secondes entre les messages de présence.",
|
"LabelBlastMessageIntervalHelp": "Détermine la durée en secondes entre les messages de présence.",
|
||||||
"LabelBlockContentWithTags": "Bloquer les éléments avec les étiquettes :",
|
"LabelBlockContentWithTags": "Bloquer les éléments avec les étiquettes :",
|
||||||
"LabelBurnSubtitles": "Graver les sous-titres :",
|
"LabelBurnSubtitles": "Graver les sous-titres :",
|
||||||
|
@ -569,7 +569,7 @@
|
||||||
"LabelEnableAutomaticPortMapHelp": "Mapper automatiquement les ports publics vers des ports locaux via UPnP. Cela peut ne pas fonctionner avec certains modèles de routeurs. La modification de ce paramètre ne prendra effet qu'après redémarrage du serveur.",
|
"LabelEnableAutomaticPortMapHelp": "Mapper automatiquement les ports publics vers des ports locaux via UPnP. Cela peut ne pas fonctionner avec certains modèles de routeurs. La modification de ce paramètre ne prendra effet qu'après redémarrage du serveur.",
|
||||||
"LabelEnableBlastAliveMessages": "Diffuser des message de présence",
|
"LabelEnableBlastAliveMessages": "Diffuser des message de présence",
|
||||||
"LabelEnableBlastAliveMessagesHelp": "Activer cette option si le serveur n'est pas détecté de manière fiable par les autres appareils UPnP sur votre réseau.",
|
"LabelEnableBlastAliveMessagesHelp": "Activer cette option si le serveur n'est pas détecté de manière fiable par les autres appareils UPnP sur votre réseau.",
|
||||||
"LabelEnableDlnaClientDiscoveryInterval": "Intervalle de découverte des clients (secondes)",
|
"LabelEnableDlnaClientDiscoveryInterval": "Intervalle de découverte des clients",
|
||||||
"LabelEnableDlnaClientDiscoveryIntervalHelp": "Détermine la durée en secondes entre les recherches SSDP exécutées par Jellyfin.",
|
"LabelEnableDlnaClientDiscoveryIntervalHelp": "Détermine la durée en secondes entre les recherches SSDP exécutées par Jellyfin.",
|
||||||
"LabelEnableDlnaDebugLogging": "Activer le débogage DLNA dans le journal d'événements",
|
"LabelEnableDlnaDebugLogging": "Activer le débogage DLNA dans le journal d'événements",
|
||||||
"LabelEnableDlnaDebugLoggingHelp": "Génère de gros fichiers de journal d'événements et ne devrait être utilisé que pour des diagnostics d'erreur.",
|
"LabelEnableDlnaDebugLoggingHelp": "Génère de gros fichiers de journal d'événements et ne devrait être utilisé que pour des diagnostics d'erreur.",
|
||||||
|
@ -579,7 +579,7 @@
|
||||||
"LabelEnableDlnaServerHelp": "Autorise les appareils UPnP de votre réseau à parcourir et à lire le contenu.",
|
"LabelEnableDlnaServerHelp": "Autorise les appareils UPnP de votre réseau à parcourir et à lire le contenu.",
|
||||||
"LabelEnableHardwareDecodingFor": "Activer le décodage matériel pour :",
|
"LabelEnableHardwareDecodingFor": "Activer le décodage matériel pour :",
|
||||||
"LabelEnableRealtimeMonitor": "Activer la surveillance en temps réel",
|
"LabelEnableRealtimeMonitor": "Activer la surveillance en temps réel",
|
||||||
"LabelEnableRealtimeMonitorHelp": "Les modifications des fichiers seront traitées immédiatement, sur les systèmes de fichiers qui le permettent.",
|
"LabelEnableRealtimeMonitorHelp": "Les modifications des fichiers seront traitées immédiatement sur les systèmes de fichiers qui le permettent.",
|
||||||
"LabelEnableSingleImageInDidlLimit": "Limiter à une seule image intégrée",
|
"LabelEnableSingleImageInDidlLimit": "Limiter à une seule image intégrée",
|
||||||
"LabelEnableSingleImageInDidlLimitHelp": "Quelques périphériques ne fourniront pas un rendu correct si plusieurs images sont intégrées dans Didl.",
|
"LabelEnableSingleImageInDidlLimitHelp": "Quelques périphériques ne fourniront pas un rendu correct si plusieurs images sont intégrées dans Didl.",
|
||||||
"LabelEndDate": "Date de fin :",
|
"LabelEndDate": "Date de fin :",
|
||||||
|
@ -595,9 +595,9 @@
|
||||||
"LabelForgotPasswordUsernameHelp": "Saisissez votre nom d'utilisateur, si vous vous en souvenez.",
|
"LabelForgotPasswordUsernameHelp": "Saisissez votre nom d'utilisateur, si vous vous en souvenez.",
|
||||||
"LabelFormat": "Format :",
|
"LabelFormat": "Format :",
|
||||||
"LabelFriendlyName": "Nom d'affichage :",
|
"LabelFriendlyName": "Nom d'affichage :",
|
||||||
"LabelServerNameHelp": "Ce nom sera utilisé pour identifier le serveur. La valeur par défaut est le nom d'ordinateur du serveur.",
|
"LabelServerNameHelp": "Ce nom sera utilisé pour identifier le serveur. La valeur par défaut est le nom d'hôte du serveur.",
|
||||||
"LabelGroupMoviesIntoCollections": "Grouper les films en collections",
|
"LabelGroupMoviesIntoCollections": "Grouper les films en collections",
|
||||||
"LabelGroupMoviesIntoCollectionsHelp": "Dans l'affichage des listes de films, les films faisant partie d'une collection seront affichés comme un élément groupé.",
|
"LabelGroupMoviesIntoCollectionsHelp": "Dans l'affichage des listes de films, les films d'une collection seront affichés comme un élément groupé.",
|
||||||
"LabelH264Crf": "CRF d'encodage H264 :",
|
"LabelH264Crf": "CRF d'encodage H264 :",
|
||||||
"LabelEncoderPreset": "Profil d'encodage H264 :",
|
"LabelEncoderPreset": "Profil d'encodage H264 :",
|
||||||
"LabelHardwareAccelerationType": "Accélération matérielle :",
|
"LabelHardwareAccelerationType": "Accélération matérielle :",
|
||||||
|
@ -605,7 +605,7 @@
|
||||||
"LabelHomeNetworkQuality": "Qualité du réseau local :",
|
"LabelHomeNetworkQuality": "Qualité du réseau local :",
|
||||||
"LabelHomeScreenSectionValue": "Section {0} de l'accueil :",
|
"LabelHomeScreenSectionValue": "Section {0} de l'accueil :",
|
||||||
"LabelHttpsPort": "Numéro de port HTTPS local :",
|
"LabelHttpsPort": "Numéro de port HTTPS local :",
|
||||||
"LabelHttpsPortHelp": "Le port TCP que le serveur HTTPS de Jellyfin doit utiliser.",
|
"LabelHttpsPortHelp": "Le numéro de port TCP pour le serveur HTTPS.",
|
||||||
"LabelIconMaxHeight": "Hauteur maximum des icônes :",
|
"LabelIconMaxHeight": "Hauteur maximum des icônes :",
|
||||||
"LabelIconMaxHeightHelp": "Résolution maximum des icônes exposée par upnp:icon.",
|
"LabelIconMaxHeightHelp": "Résolution maximum des icônes exposée par upnp:icon.",
|
||||||
"LabelIconMaxWidth": "Largeur maximum des icônes :",
|
"LabelIconMaxWidth": "Largeur maximum des icônes :",
|
||||||
|
@ -633,7 +633,7 @@
|
||||||
"LabelLanguage": "Langue :",
|
"LabelLanguage": "Langue :",
|
||||||
"LabelLineup": "Programmation :",
|
"LabelLineup": "Programmation :",
|
||||||
"LabelLocalHttpServerPortNumber": "Numéro de port HTTP local :",
|
"LabelLocalHttpServerPortNumber": "Numéro de port HTTP local :",
|
||||||
"LabelLocalHttpServerPortNumberHelp": "Le port TCP que le serveur HTTP de Jellyfin doit utiliser.",
|
"LabelLocalHttpServerPortNumberHelp": "Le numéro de port TCP pour le serveur HTTP.",
|
||||||
"LabelLockItemToPreventChanges": "Verrouiller cet élément pour éviter de futures modifications",
|
"LabelLockItemToPreventChanges": "Verrouiller cet élément pour éviter de futures modifications",
|
||||||
"LabelLoginDisclaimer": "Avertissement sur la page d'accueil :",
|
"LabelLoginDisclaimer": "Avertissement sur la page d'accueil :",
|
||||||
"LabelLoginDisclaimerHelp": "Le slogan sera affiché en bas de la page de connexion.",
|
"LabelLoginDisclaimerHelp": "Le slogan sera affiché en bas de la page de connexion.",
|
||||||
|
@ -659,7 +659,7 @@
|
||||||
"LabelMetadataReaders": "Lecteurs de métadonnées :",
|
"LabelMetadataReaders": "Lecteurs de métadonnées :",
|
||||||
"LabelMetadataReadersHelp": "Classez vos sources locales de métadonnées préférées dans l'ordre de priorité. Le premier fichier trouvé sera lu.",
|
"LabelMetadataReadersHelp": "Classez vos sources locales de métadonnées préférées dans l'ordre de priorité. Le premier fichier trouvé sera lu.",
|
||||||
"LabelMetadataSavers": "Enregistreurs de métadonnées :",
|
"LabelMetadataSavers": "Enregistreurs de métadonnées :",
|
||||||
"LabelMetadataSaversHelp": "Sélectionnez un format de fichier pour l'enregistrement des métadonnées.",
|
"LabelMetadataSaversHelp": "Sélectionnez un format de fichier qui sera utilisé pour l'enregistrement des métadonnées.",
|
||||||
"LabelMethod": "Méthode :",
|
"LabelMethod": "Méthode :",
|
||||||
"LabelMinBackdropDownloadWidth": "Largeur minimum d'image d'arrière-plan à télécharger :",
|
"LabelMinBackdropDownloadWidth": "Largeur minimum d'image d'arrière-plan à télécharger :",
|
||||||
"LabelMinResumeDuration": "Temps de reprise minimum :",
|
"LabelMinResumeDuration": "Temps de reprise minimum :",
|
||||||
|
@ -675,7 +675,7 @@
|
||||||
"LabelMovieCategories": "Catégories de films :",
|
"LabelMovieCategories": "Catégories de films :",
|
||||||
"LabelMoviePrefix": "Préfixe de film :",
|
"LabelMoviePrefix": "Préfixe de film :",
|
||||||
"LabelMoviePrefixHelp": "Si un préfixe est appliqué aux titres de film, précisez-le ici afin que le serveur puisse le gérer convenablement.",
|
"LabelMoviePrefixHelp": "Si un préfixe est appliqué aux titres de film, précisez-le ici afin que le serveur puisse le gérer convenablement.",
|
||||||
"LabelMovieRecordingPath": "Chemin d'enregistrement des films (optionnel) :",
|
"LabelMovieRecordingPath": "Chemin d'enregistrement des films :",
|
||||||
"LabelMusicStreamingTranscodingBitrate": "Débit du transcodage de la musique :",
|
"LabelMusicStreamingTranscodingBitrate": "Débit du transcodage de la musique :",
|
||||||
"LabelMusicStreamingTranscodingBitrateHelp": "Spécifiez le débit maximum pendant la diffusion de musique.",
|
"LabelMusicStreamingTranscodingBitrateHelp": "Spécifiez le débit maximum pendant la diffusion de musique.",
|
||||||
"LabelName": "Nom :",
|
"LabelName": "Nom :",
|
||||||
|
@ -688,7 +688,7 @@
|
||||||
"LabelNumber": "Numéro :",
|
"LabelNumber": "Numéro :",
|
||||||
"LabelNumberOfGuideDays": "Nombre de jours de données du guide à télécharger :",
|
"LabelNumberOfGuideDays": "Nombre de jours de données du guide à télécharger :",
|
||||||
"LabelNumberOfGuideDaysHelp": "Télécharger plus de journées du guide permet de programmer des enregistrements plus longtemps à l'avance et de visualiser plus de contenus, mais prendra également plus de temps. Automatique permettra une sélection automatique basée sur le nombre de chaînes.",
|
"LabelNumberOfGuideDaysHelp": "Télécharger plus de journées du guide permet de programmer des enregistrements plus longtemps à l'avance et de visualiser plus de contenus, mais prendra également plus de temps. Automatique permettra une sélection automatique basée sur le nombre de chaînes.",
|
||||||
"LabelOptionalNetworkPath": "(Optionnel) Dossier réseau partagé :",
|
"LabelOptionalNetworkPath": "Dossier réseau partagé :",
|
||||||
"LabelOptionalNetworkPathHelp": "Si le dossier est partagé sur votre réseau, donner le chemin d'accès au dossier réseau peut permettre aux applications Jellyfin sur d'autres appareils d'avoir accès à ses fichiers directement. Par exemple, {0} ou {1}.",
|
"LabelOptionalNetworkPathHelp": "Si le dossier est partagé sur votre réseau, donner le chemin d'accès au dossier réseau peut permettre aux applications Jellyfin sur d'autres appareils d'avoir accès à ses fichiers directement. Par exemple, {0} ou {1}.",
|
||||||
"LabelOriginalAspectRatio": "Ratio d'aspect original :",
|
"LabelOriginalAspectRatio": "Ratio d'aspect original :",
|
||||||
"LabelOriginalTitle": "Titre original :",
|
"LabelOriginalTitle": "Titre original :",
|
||||||
|
@ -733,7 +733,7 @@
|
||||||
"LabelReleaseDate": "Date de sortie :",
|
"LabelReleaseDate": "Date de sortie :",
|
||||||
"LabelRemoteClientBitrateLimit": "Limite de débit de streaming Internet (Mbps) :",
|
"LabelRemoteClientBitrateLimit": "Limite de débit de streaming Internet (Mbps) :",
|
||||||
"LabelRemoteClientBitrateLimitHelp": "Une limite de débit optionnelle par streaming pour les connexions hors du réseau local. Utile pour éviter que les appareils ne demandent un débit supérieur à ce que votre connexion internet peu fournir. Cela peut augmenter la charge du processeur de votre serveur pour transcoder les vidéos à la volée à un débit plus faible.",
|
"LabelRemoteClientBitrateLimitHelp": "Une limite de débit optionnelle par streaming pour les connexions hors du réseau local. Utile pour éviter que les appareils ne demandent un débit supérieur à ce que votre connexion internet peu fournir. Cela peut augmenter la charge du processeur de votre serveur pour transcoder les vidéos à la volée à un débit plus faible.",
|
||||||
"LabelRuntimeMinutes": "Durée (minutes) :",
|
"LabelRuntimeMinutes": "Durée :",
|
||||||
"LabelSaveLocalMetadata": "Enregistrer les illustrations dans les dossiers des médias",
|
"LabelSaveLocalMetadata": "Enregistrer les illustrations dans les dossiers des médias",
|
||||||
"LabelSaveLocalMetadataHelp": "L'enregistrement des illustrations dans les dossiers des médias les placera à un endroit où elles seront facilement modifiables.",
|
"LabelSaveLocalMetadataHelp": "L'enregistrement des illustrations dans les dossiers des médias les placera à un endroit où elles seront facilement modifiables.",
|
||||||
"LabelScheduledTaskLastRan": "Dernière exécution {0}, durée {1}.",
|
"LabelScheduledTaskLastRan": "Dernière exécution {0}, durée {1}.",
|
||||||
|
@ -745,7 +745,7 @@
|
||||||
"LabelSelectVersionToInstall": "Sélectionner la version à installer :",
|
"LabelSelectVersionToInstall": "Sélectionner la version à installer :",
|
||||||
"LabelSendNotificationToUsers": "Envoyer la notification à :",
|
"LabelSendNotificationToUsers": "Envoyer la notification à :",
|
||||||
"LabelSerialNumber": "Numéro de série",
|
"LabelSerialNumber": "Numéro de série",
|
||||||
"LabelSeriesRecordingPath": "Chemin d'enregistrement des séries (optionnel) :",
|
"LabelSeriesRecordingPath": "Chemin d'enregistrement des séries :",
|
||||||
"LabelServerHost": "Nom d'hôte :",
|
"LabelServerHost": "Nom d'hôte :",
|
||||||
"LabelServerHostHelp": "192.168.1.1:8096 ou https://monserveur.com",
|
"LabelServerHostHelp": "192.168.1.1:8096 ou https://monserveur.com",
|
||||||
"LabelSimultaneousConnectionLimit": "Limite de flux simultanée :",
|
"LabelSimultaneousConnectionLimit": "Limite de flux simultanée :",
|
||||||
|
@ -819,7 +819,7 @@
|
||||||
"LabelYoureDone": "Vous avez terminé !",
|
"LabelYoureDone": "Vous avez terminé !",
|
||||||
"LabelZipCode": "Code postal :",
|
"LabelZipCode": "Code postal :",
|
||||||
"LabelffmpegPath": "Chemin vers FFmpeg :",
|
"LabelffmpegPath": "Chemin vers FFmpeg :",
|
||||||
"LabelffmpegPathHelp": "Le chemin d'accès vers l'application FFmpeg, ou un dossier contenant FFmpeg.",
|
"LabelffmpegPathHelp": "Le chemin d'accès vers l'application FFmpeg ou un dossier contenant FFmpeg.",
|
||||||
"LanNetworksHelp": "Liste des adresses IP ou des entrées IP/masque de réseau séparées par des virgules pour les réseaux qui seront considérés comme locaux lors de l'application des restrictions de bande passante. Si elle est définie, toutes les autres adresses IP seront considérées sur le réseau externe et seront soumises aux restrictions de bande passante externe. Si elle est vide, seul le sous-réseau du serveur est considéré comme se trouvant sur le réseau local.",
|
"LanNetworksHelp": "Liste des adresses IP ou des entrées IP/masque de réseau séparées par des virgules pour les réseaux qui seront considérés comme locaux lors de l'application des restrictions de bande passante. Si elle est définie, toutes les autres adresses IP seront considérées sur le réseau externe et seront soumises aux restrictions de bande passante externe. Si elle est vide, seul le sous-réseau du serveur est considéré comme se trouvant sur le réseau local.",
|
||||||
"Large": "Grand",
|
"Large": "Grand",
|
||||||
"LatestFromLibrary": "{0}, ajouts récents",
|
"LatestFromLibrary": "{0}, ajouts récents",
|
||||||
|
@ -932,8 +932,8 @@
|
||||||
"NextUp": "A Suivre",
|
"NextUp": "A Suivre",
|
||||||
"No": "Non",
|
"No": "Non",
|
||||||
"NoNewDevicesFound": "Aucun nouvel appareil détecté. Pour en ajouter un, fermez cette fenêtre et saisissez les informations de l'appareil manuellement.",
|
"NoNewDevicesFound": "Aucun nouvel appareil détecté. Pour en ajouter un, fermez cette fenêtre et saisissez les informations de l'appareil manuellement.",
|
||||||
"NoNextUpItemsMessage": "Aucun élément trouvé. Commencez à regarder vos émissions !",
|
"MessageNoNextUpItems": "Aucun élément trouvé. Commencez à regarder vos émissions !",
|
||||||
"NoPluginConfigurationMessage": "Cette extension n'a aucun paramètre à configurer.",
|
"MessageNoPluginConfiguration": "Cette extension n'a aucun paramètre à configurer.",
|
||||||
"NoSubtitleSearchResultsFound": "Aucun résultat trouvé.",
|
"NoSubtitleSearchResultsFound": "Aucun résultat trouvé.",
|
||||||
"NoSubtitles": "Pas de sous-titres",
|
"NoSubtitles": "Pas de sous-titres",
|
||||||
"NoSubtitlesHelp": "Les sous-titres ne seront pas chargés par défaut. Ils peuvent toujours être activés manuellement pendant la lecture.",
|
"NoSubtitlesHelp": "Les sous-titres ne seront pas chargés par défaut. Ils peuvent toujours être activés manuellement pendant la lecture.",
|
||||||
|
@ -954,7 +954,7 @@
|
||||||
"OptionAllowLinkSharingHelp": "Seules les pages Web contenant des informations de médias sont partagés. Les fichiers multimédias ne sont jamais partagés publiquement. Les partages sont limités dans le temps et expirent après {0} jours.",
|
"OptionAllowLinkSharingHelp": "Seules les pages Web contenant des informations de médias sont partagés. Les fichiers multimédias ne sont jamais partagés publiquement. Les partages sont limités dans le temps et expirent après {0} jours.",
|
||||||
"OptionAllowManageLiveTv": "Autoriser la gestion des enregistrements de TV en direct",
|
"OptionAllowManageLiveTv": "Autoriser la gestion des enregistrements de TV en direct",
|
||||||
"OptionAllowMediaPlayback": "Autoriser la lecture de média",
|
"OptionAllowMediaPlayback": "Autoriser la lecture de média",
|
||||||
"OptionAllowMediaPlaybackTranscodingHelp": "Limiter l'accès au transcodage peut entraîner des échecs de lecture dans les applications Jellyfin en raison de formats de média non pris en charge.",
|
"OptionAllowMediaPlaybackTranscodingHelp": "Limiter l'accès au transcodage peut entraîner des échecs de lecture dans les clients en raison de formats de média non pris en charge.",
|
||||||
"OptionAllowRemoteControlOthers": "Autoriser le contrôle à distance des autres utilisateurs",
|
"OptionAllowRemoteControlOthers": "Autoriser le contrôle à distance des autres utilisateurs",
|
||||||
"OptionAllowRemoteSharedDevices": "Autoriser le contrôle à distance des appareils partagés",
|
"OptionAllowRemoteSharedDevices": "Autoriser le contrôle à distance des appareils partagés",
|
||||||
"OptionAllowRemoteSharedDevicesHelp": "Les appareils DLNA sont considérés comme partagés tant qu'un utilisateur ne commence pas à les contrôler.",
|
"OptionAllowRemoteSharedDevicesHelp": "Les appareils DLNA sont considérés comme partagés tant qu'un utilisateur ne commence pas à les contrôler.",
|
||||||
|
@ -986,7 +986,7 @@
|
||||||
"OptionDatePlayed": "Date de lecture",
|
"OptionDatePlayed": "Date de lecture",
|
||||||
"OptionDescending": "Décroissant",
|
"OptionDescending": "Décroissant",
|
||||||
"OptionDisableUser": "Désactiver cet utilisateur",
|
"OptionDisableUser": "Désactiver cet utilisateur",
|
||||||
"OptionDisableUserHelp": "Si désactivé, le serveur n'autorisera pas de connexion de cet utilisateur. Les connexions existantes seront interrompues.",
|
"OptionDisableUserHelp": "Le serveur n'autorisera pas de connexion de cet utilisateur. Les connexions existantes seront interrompues.",
|
||||||
"OptionDislikes": "Pas aimés",
|
"OptionDislikes": "Pas aimés",
|
||||||
"OptionDisplayFolderView": "Afficher une vue de dossiers pour montrer les dossiers multimédia en intégralité",
|
"OptionDisplayFolderView": "Afficher une vue de dossiers pour montrer les dossiers multimédia en intégralité",
|
||||||
"OptionDisplayFolderViewHelp": "Afficher les dossier au côté de votre médiathèque. Cela peut être utile si vous souhaitez avoir une vue complète des dossiers.",
|
"OptionDisplayFolderViewHelp": "Afficher les dossier au côté de votre médiathèque. Cela peut être utile si vous souhaitez avoir une vue complète des dossiers.",
|
||||||
|
@ -995,7 +995,7 @@
|
||||||
"OptionDownloadBoxImage": "Boîtier",
|
"OptionDownloadBoxImage": "Boîtier",
|
||||||
"OptionDownloadDiscImage": "Disque",
|
"OptionDownloadDiscImage": "Disque",
|
||||||
"OptionDownloadImagesInAdvance": "Télécharger les images en avance",
|
"OptionDownloadImagesInAdvance": "Télécharger les images en avance",
|
||||||
"OptionDownloadImagesInAdvanceHelp": "Par défaut, la plupart des images sont téléchargées seulement lorsqu'une application Jellyfin le demande. Sélectionnez cette option pour télécharger toutes les images à l'avance, lorsqu'un nouveau média est importé. Cela peut allonger significativement la durée d'actualisation de la médiathèque.",
|
"OptionDownloadImagesInAdvanceHelp": "Par défaut, la plupart des images sont téléchargées seulement lorsqu'un client le demande. Sélectionnez cette option pour télécharger toutes les images à l'avance, lorsqu'un nouveau média est importé. Cela peut allonger significativement la durée d'actualisation de la médiathèque.",
|
||||||
"OptionDownloadPrimaryImage": "Principal",
|
"OptionDownloadPrimaryImage": "Principal",
|
||||||
"OptionDownloadThumbImage": "Vignette",
|
"OptionDownloadThumbImage": "Vignette",
|
||||||
"OptionDvd": "DVD",
|
"OptionDvd": "DVD",
|
||||||
|
@ -1026,7 +1026,7 @@
|
||||||
"OptionHlsSegmentedSubtitles": "Sous-titres segmentés HLS",
|
"OptionHlsSegmentedSubtitles": "Sous-titres segmentés HLS",
|
||||||
"OptionHomeVideos": "Photos",
|
"OptionHomeVideos": "Photos",
|
||||||
"OptionIgnoreTranscodeByteRangeRequests": "Ignore les requêtes de transcodage de plage d'octets",
|
"OptionIgnoreTranscodeByteRangeRequests": "Ignore les requêtes de transcodage de plage d'octets",
|
||||||
"OptionIgnoreTranscodeByteRangeRequestsHelp": "Si l'option est activée, ces requêtes seront honorées mais l'en-tête de plage d'octets sera ignoré.",
|
"OptionIgnoreTranscodeByteRangeRequestsHelp": "Ces requêtes seront honorées mais l'en-tête de plage d'octets sera ignoré.",
|
||||||
"OptionImdbRating": "Note IMDb",
|
"OptionImdbRating": "Note IMDb",
|
||||||
"OptionLikes": "Aimés",
|
"OptionLikes": "Aimés",
|
||||||
"OptionMax": "Maximum",
|
"OptionMax": "Maximum",
|
||||||
|
@ -1039,9 +1039,9 @@
|
||||||
"OptionOnInterval": "Par intervalle",
|
"OptionOnInterval": "Par intervalle",
|
||||||
"OptionParentalRating": "Classification parentale",
|
"OptionParentalRating": "Classification parentale",
|
||||||
"OptionPlainStorageFolders": "Afficher tous les dossiers en tant que simples dossiers de stockage",
|
"OptionPlainStorageFolders": "Afficher tous les dossiers en tant que simples dossiers de stockage",
|
||||||
"OptionPlainStorageFoldersHelp": "Tous les répertoires seront affichés dans le DIDL en tant que \"object.container.storageFolder\" au lieu de formats plus spécifiques comme, par exemple \"object.container.person.musicArtist\".",
|
"OptionPlainStorageFoldersHelp": "Tous les répertoires seront affichés dans le DIDL en tant que \"object.container.storageFolder\" au lieu de formats plus spécifiques comme, par exemple \"object.container.person.musicArtist\".",
|
||||||
"OptionPlainVideoItems": "Afficher les vidéos en tant que simples éléments vidéos",
|
"OptionPlainVideoItems": "Afficher les vidéos en tant que simples éléments vidéos",
|
||||||
"OptionPlainVideoItemsHelp": "Si activé, toutes les vidéos seront affichées dans le DIDL en tant que \"object.item.videoItem\" au lieu de formats plus spécifiques comme, par exemple \"object.item.videoItem.movie\".",
|
"OptionPlainVideoItemsHelp": "Toutes les vidéos seront affichées dans le DIDL en tant que \"object.item.videoItem\" au lieu de formats plus spécifiques comme, par exemple \"object.item.videoItem.movie\".",
|
||||||
"OptionPlayCount": "Nombre de lectures",
|
"OptionPlayCount": "Nombre de lectures",
|
||||||
"OptionPlayed": "Lu",
|
"OptionPlayed": "Lu",
|
||||||
"OptionPremiereDate": "Date de la première",
|
"OptionPremiereDate": "Date de la première",
|
||||||
|
@ -1082,7 +1082,7 @@
|
||||||
"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é.",
|
||||||
"PasswordResetConfirmation": "Êtes-vous sûr de vouloir réinitialiser le mot de passe ?",
|
"PasswordResetConfirmation": "Êtes-vous sûr de vouloir réinitialiser le mot de passe ?",
|
||||||
"PasswordResetHeader": "Réinitialiser le mot de passe",
|
"HeaderResetPassword": "Réinitialiser le mot de passe",
|
||||||
"PasswordSaved": "Mot de passe sauvegardé.",
|
"PasswordSaved": "Mot de passe sauvegardé.",
|
||||||
"People": "Personnes",
|
"People": "Personnes",
|
||||||
"PerfectMatch": "Correspondance parfaite",
|
"PerfectMatch": "Correspondance parfaite",
|
||||||
|
@ -1103,7 +1103,7 @@
|
||||||
"PleaseEnterNameOrId": "Veuillez saisir un nom ou un identifiant externe.",
|
"PleaseEnterNameOrId": "Veuillez saisir un nom ou un identifiant externe.",
|
||||||
"PleaseRestartServerName": "Veuillez redémarrer le serveur Jellyfin - {0}.",
|
"PleaseRestartServerName": "Veuillez redémarrer le serveur Jellyfin - {0}.",
|
||||||
"PleaseSelectTwoItems": "Veuillez sélectionner au moins deux éléments.",
|
"PleaseSelectTwoItems": "Veuillez sélectionner au moins deux éléments.",
|
||||||
"PluginInstalledMessage": "Cette extension a été installée avec succès. Le serveur Jellyfin doit être redémarré afin que les modifications soient prises en compte.",
|
"MessagePluginInstalled": "Cette extension a été installée avec succès. Le serveur Jellyfin doit être redémarré afin que les modifications soient prises en compte.",
|
||||||
"PreferEmbeddedTitlesOverFileNames": "Préférer les titres intégrés aux médias aux noms des fichiers",
|
"PreferEmbeddedTitlesOverFileNames": "Préférer les titres intégrés aux médias aux noms des fichiers",
|
||||||
"PreferEmbeddedTitlesOverFileNamesHelp": "Cela détermine le titre affiché par défaut quand il n'y a pas de métadonnées en ligne ou locales disponibles.",
|
"PreferEmbeddedTitlesOverFileNamesHelp": "Cela détermine le titre affiché par défaut quand il n'y a pas de métadonnées en ligne ou locales disponibles.",
|
||||||
"Premieres": "Inédits",
|
"Premieres": "Inédits",
|
||||||
|
@ -1124,11 +1124,11 @@
|
||||||
"Record": "Enregistrer",
|
"Record": "Enregistrer",
|
||||||
"RecordSeries": "Enregistrer la série",
|
"RecordSeries": "Enregistrer la série",
|
||||||
"RecordingCancelled": "Enregistrement annulé.",
|
"RecordingCancelled": "Enregistrement annulé.",
|
||||||
"RecordingPathChangeMessage": "Modifier votre dossier d'enregistrement ne déplacera pas les enregistrements existants de l'ancien emplacement vers le nouveau. Vous devrez les déplacer manuellement si vous le souhaitez.",
|
"MessageChangeRecordingPath": "Modifier votre dossier d'enregistrement ne déplacera pas les enregistrements existants de l'ancien emplacement vers le nouveau. Vous devrez les déplacer manuellement si vous le souhaitez.",
|
||||||
"RecordingScheduled": "Enregistrement planifié.",
|
"RecordingScheduled": "Enregistrement planifié.",
|
||||||
"Recordings": "Enregistrements",
|
"Recordings": "Enregistrements",
|
||||||
"Refresh": "Actualiser",
|
"Refresh": "Actualiser",
|
||||||
"RefreshDialogHelp": "Les métadonnées sont actualisées en fonction des paramètres et des services Internet qui sont activés dans le tableau de bord du serveur Jellyfin.",
|
"RefreshDialogHelp": "Les métadonnées sont actualisées en fonction des paramètres et des services Internet qui sont activés dans le tableau de bord.",
|
||||||
"RefreshMetadata": "Actualiser les métadonnées",
|
"RefreshMetadata": "Actualiser les métadonnées",
|
||||||
"RefreshQueued": "Actualisation mise en file d'attente.",
|
"RefreshQueued": "Actualisation mise en file d'attente.",
|
||||||
"ReleaseDate": "Date de sortie",
|
"ReleaseDate": "Date de sortie",
|
||||||
|
@ -1265,7 +1265,7 @@
|
||||||
"TvLibraryHelp": "Consultez le {0}guide de nommage des émissions{1}.",
|
"TvLibraryHelp": "Consultez le {0}guide de nommage des émissions{1}.",
|
||||||
"Uniform": "Uniforme",
|
"Uniform": "Uniforme",
|
||||||
"UninstallPluginConfirmation": "Êtes-vous sûr de vouloir désinstaller {0} ?",
|
"UninstallPluginConfirmation": "Êtes-vous sûr de vouloir désinstaller {0} ?",
|
||||||
"UninstallPluginHeader": "Désinstaller Plug-in",
|
"HeaderUninstallPlugin": "Désinstaller Plug-in",
|
||||||
"Unmute": "Rétablir le son",
|
"Unmute": "Rétablir le son",
|
||||||
"Unplayed": "Non lu",
|
"Unplayed": "Non lu",
|
||||||
"Unrated": "Non noté",
|
"Unrated": "Non noté",
|
||||||
|
@ -1386,7 +1386,7 @@
|
||||||
"MediaInfoStreamTypeSubtitle": "Sous-titres",
|
"MediaInfoStreamTypeSubtitle": "Sous-titres",
|
||||||
"MediaInfoStreamTypeVideo": "Video",
|
"MediaInfoStreamTypeVideo": "Video",
|
||||||
"AuthProviderHelp": "Sélectionner un fournisseur d'authentification pour authentifier le mot de passe de cet utilisateur.",
|
"AuthProviderHelp": "Sélectionner un fournisseur d'authentification pour authentifier le mot de passe de cet utilisateur.",
|
||||||
"PasswordResetProviderHelp": "Choisissez un Fournisseur de réinitialisation de mot de passe à utiliser lorsqu'un utilisateur demande la réinitialisation de son mot de passe",
|
"PasswordResetProviderHelp": "Choisissez un fournisseur de réinitialisation de mot de passe à utiliser lorsqu'un utilisateur demande la réinitialisation de son mot de passe.",
|
||||||
"HeaderHome": "Accueil",
|
"HeaderHome": "Accueil",
|
||||||
"LabelUserLoginAttemptsBeforeLockout": "Tentatives de connexion échouées avant que l'utilisateur ne soit verrouillé :",
|
"LabelUserLoginAttemptsBeforeLockout": "Tentatives de connexion échouées avant que l'utilisateur ne soit verrouillé :",
|
||||||
"DashboardOperatingSystem": "Système d'Exploitation: {0}",
|
"DashboardOperatingSystem": "Système d'Exploitation: {0}",
|
||||||
|
@ -1497,7 +1497,7 @@
|
||||||
"HeaderFavoritePlaylists": "Listes de lecture favorites",
|
"HeaderFavoritePlaylists": "Listes de lecture favorites",
|
||||||
"TabDVR": "DVR",
|
"TabDVR": "DVR",
|
||||||
"LabelChromecastVersion": "Version de Chromecast",
|
"LabelChromecastVersion": "Version de Chromecast",
|
||||||
"LabelEnableHttpsHelp": "Autorise le serveur à écouter les requêtes HTTPS sur le port configuré. Un certificat valide doit être configuré pour permettre ce mode de fonctionnement.",
|
"LabelEnableHttpsHelp": "Écouter les requêtes HTTPS sur le port configuré. Un certificat valide doit être fourni pour permettre ce mode de fonctionnement.",
|
||||||
"LabelEnableHttps": "Activer HTTPS",
|
"LabelEnableHttps": "Activer HTTPS",
|
||||||
"HeaderServerAddressSettings": "Paramètres adresses serveur",
|
"HeaderServerAddressSettings": "Paramètres adresses serveur",
|
||||||
"HeaderRemoteAccessSettings": "Paramètres d'accès distant",
|
"HeaderRemoteAccessSettings": "Paramètres d'accès distant",
|
||||||
|
@ -1543,8 +1543,8 @@
|
||||||
"MessageSyncPlayErrorAccessingGroups": "Une erreur s'est produite pendant l'accès à la liste de groupes.",
|
"MessageSyncPlayErrorAccessingGroups": "Une erreur s'est produite pendant l'accès à la liste de groupes.",
|
||||||
"ShowMore": "Voir plus",
|
"ShowMore": "Voir plus",
|
||||||
"ShowLess": "Voir moins",
|
"ShowLess": "Voir moins",
|
||||||
"EnableBlurhashHelp": "Les images qui sont encore en cours de chargement seront remplacées par une image générique floue",
|
"EnableBlurHashHelp": "Les images qui sont encore en cours de chargement seront remplacées par une image générique floue.",
|
||||||
"EnableBlurhash": "Utilise des images génériques floues à la place des images",
|
"EnableBlurHash": "Utilise des images génériques floues à la place des images",
|
||||||
"ButtonCast": "Diffuser",
|
"ButtonCast": "Diffuser",
|
||||||
"ButtonSyncPlay": "SyncPlay",
|
"ButtonSyncPlay": "SyncPlay",
|
||||||
"TabRepositories": "Dépôts",
|
"TabRepositories": "Dépôts",
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue