diff --git a/deletehelper.js b/deletehelper.js index 38a8433f..cad321c5 100644 --- a/deletehelper.js +++ b/deletehelper.js @@ -1,4 +1,4 @@ -define(['connectionManager', 'confirm', 'appRouter', 'globalize'], function (connectionManager, confirm, appRouter, globalize) { +define(['connectionManager', 'confirm', 'dialog', 'appRouter', 'globalize'], function (connectionManager, confirm, dialog, appRouter, globalize) { 'use strict'; function alertText(options) { @@ -126,36 +126,73 @@ define(['connectionManager', 'confirm', 'appRouter', 'globalize'], function (con }); } - function deleteItem(options) { + function getRejectPromise() { + return Promise.reject(); + } - var item = options.item; - var apiClient = connectionManager.getApiClient(item); + function deleteSeries(item, apiClient, options) { - if (item.Type === 'Device') { - return deleteDevice(item, apiClient, options); - } + return apiClient.getEpisodes(item.Id, { - if (item.Type === 'Server') { - return deleteServer(item, apiClient, options); - } + Limit: 1, + SortBy: 'DatePlayed', + SortOrder: 'Descending', + IsPlayed: true, + UserId: apiClient.getCurrentUserId(), + ExcludeLocationTypes: 'Virtual' - if (item.Type === 'User') { - return deleteUser(item, apiClient, options); - } + }).then(function (result) { - if (item.Type === 'Plugin') { - return uninstallPlugin(item, apiClient, options); - } + if (!result.Items.length) { + return deleteItemInternal(item, apiClient, options); + } - var itemId = item.Id; - var parentId = item.SeasonId || item.SeriesId || item.ParentId; - var serverId = item.ServerId; + return dialog({ + + title: globalize.translate('HeaderDeleteSeries'), + text: '', + buttons: [ + + { + name: globalize.translate('Cancel'), + id: 'cancel', + type: 'submit' + }, + { + name: globalize.translate('HeaderDeleteLastPlayedEpisode'), + id: 'deletelastplayed', + type: 'cancel' + }, + { + name: globalize.translate('HeaderDeleteSeries'), + id: 'deleteseries', + type: 'cancel' + } + ] + + }).then(function (id) { + + if (id === 'deleteseries') { + return deleteItemInternal(item, apiClient, options); + } + + if (id === 'deletelastplayed') { + return deleteItemInternal(result.Items[0], apiClient, options); + } + + return Promise.reject(); + }); + }); + } + + function deleteItemInternal(item, apiClient, options) { - var msg = globalize.translate('ConfirmDeleteItem'); - var title = globalize.translate('HeaderDeleteItem'); + var itemId = item.Id; return apiClient.getDeleteInfo(itemId).then(function (deleteInfo) { + var msg = globalize.translate('ConfirmDeleteItem'); + if (deleteInfo.Paths.length) { msg += '\n\n' + globalize.translate('FollowingFilesWillBeDeleted') + '\n' + deleteInfo.Paths.join('\n'); @@ -165,13 +202,16 @@ define(['connectionManager', 'confirm', 'appRouter', 'globalize'], function (con return confirm({ - title: title, + title: globalize.translate('HeaderDeleteItem'), text: msg, confirmText: globalize.translate('Delete'), primary: 'cancel' }).then(function () { + var parentId = item.SeasonId || item.SeriesId || item.ParentId; + var serverId = item.ServerId; + return apiClient.deleteItem(itemId).then(function () { return onItemDeleted(options, serverId, parentId); @@ -188,6 +228,34 @@ define(['connectionManager', 'confirm', 'appRouter', 'globalize'], function (con }); } + function deleteItem(options) { + + var item = options.item; + var apiClient = connectionManager.getApiClient(item); + + if (item.Type === 'Device') { + return deleteDevice(item, apiClient, options); + } + + if (item.Type === 'Server') { + return deleteServer(item, apiClient, options); + } + + if (item.Type === 'User') { + return deleteUser(item, apiClient, options); + } + + if (item.Type === 'Plugin') { + return uninstallPlugin(item, apiClient, options); + } + + if (item.Type === 'Series' && apiClient.isMinServerVersion('4.5.0.3')) { + return deleteSeries(item, apiClient, options); + } + + return deleteItemInternal(item, apiClient, options); + } + return { deleteItem: deleteItem }; diff --git a/prompt/prompt.js b/prompt/prompt.js deleted file mode 100644 index 7fabaad8..00000000 --- a/prompt/prompt.js +++ /dev/null @@ -1,100 +0,0 @@ -define(['dialogHelper', 'layoutManager', 'globalize', 'dom', 'require', 'material-icons', 'emby-button', 'paper-icon-button-light', 'emby-input', 'formDialogStyle', 'emby-scroller'], function (dialogHelper, layoutManager, globalize, dom, require) { - 'use strict'; - - function setInputProperties(dlg, options) { - var txtInput = dlg.querySelector('#txtInput'); - - if (txtInput.label) { - txtInput.label(options.label || ''); - } else { - txtInput.setAttribute('label', options.label || ''); - } - txtInput.value = options.value || ''; - } - - function showDialog(options, template) { - - var dialogOptions = { - removeOnClose: true, - scrollY: false - }; - - if (layoutManager.tv) { - dialogOptions.size = 'fullscreen'; - } - - var dlg = dialogHelper.createDialog(dialogOptions); - - dlg.classList.add('formDialog'); - - dlg.innerHTML = globalize.translateHtml(template, 'sharedcomponents'); - - if (layoutManager.tv) { - } else { - dlg.querySelector('.dialogContentInner').style['padding-bottom'] = '10em'; - dlg.classList.add('dialog-fullscreen-lowres'); - } - - dlg.querySelector('.btnCancel').addEventListener('click', function (e) { - dialogHelper.close(dlg); - }); - - dlg.querySelector('.formDialogHeaderTitle').innerHTML = options.title || ''; - - if (options.description) { - dlg.querySelector('.fieldDescription').innerHTML = options.description; - } else { - dlg.querySelector('.fieldDescription').classList.add('hide'); - } - - setInputProperties(dlg, options); - - var submitValue; - - dlg.querySelector('form').addEventListener('submit', function (e) { - - submitValue = dlg.querySelector('#txtInput').value; - e.preventDefault(); - e.stopPropagation(); - - // Important, don't close the dialog until after the form has completed submitting, or it will cause an error in Chrome - setTimeout(function () { - dialogHelper.close(dlg); - }, 300); - - return false; - }); - - dlg.querySelector('.submitText').innerHTML = options.confirmText || globalize.translate('ButtonOk'); - - dlg.style.minWidth = '28em'; - dlg.style.maxWidth = '90vw'; - - return dialogHelper.open(dlg).then(function () { - - var value = submitValue; - - if (value) { - return value; - } else { - return Promise.reject(); - } - }); - } - - return function (options) { - - return new Promise(function (resolve, reject) { - require(['text!./prompt.template.html'], function (template) { - - if (typeof options === 'string') { - options = { - title: '', - text: options - }; - } - showDialog(options, template).then(resolve, reject); - }); - }); - }; -}); \ No newline at end of file diff --git a/prompt/prompt.template.html b/prompt/prompt.template.html deleted file mode 100644 index 458c8d4b..00000000 --- a/prompt/prompt.template.html +++ /dev/null @@ -1,23 +0,0 @@ -
- -

-
- -
-
-
-
- -
-
- -
- -
-
-
-
\ No newline at end of file diff --git a/recordingcreator/recordingbutton.js b/recordingcreator/recordingbutton.js deleted file mode 100644 index a4de2bfb..00000000 --- a/recordingcreator/recordingbutton.js +++ /dev/null @@ -1,116 +0,0 @@ -define(['globalize', 'connectionManager', 'require', 'loading', 'apphost', 'dom', 'recordingHelper', 'events', 'registrationServices', 'paper-icon-button-light', 'emby-button'], function (globalize, connectionManager, require, loading, appHost, dom, recordingHelper, events, registrationServices) { - 'use strict'; - - function onRecordingButtonClick(e) { - - var item = this.item; - - if (item) { - - var serverId = item.ServerId; - var programId = item.Id; - var timerId = item.TimerId; - var timerStatus = item.Status; - var seriesTimerId = item.SeriesTimerId; - - var instance = this; - - recordingHelper.toggleRecording(serverId, programId, timerId, timerStatus, seriesTimerId).then(function () { - instance.refresh(serverId, programId); - }); - } - } - - function RecordingButton(options) { - this.options = options; - - if (options.item) { - this.refreshItem(options.item); - } else if (options.itemId && options.serverId) { - this.refresh(options.itemId, options.serverId); - } - var button = options.button; - button.querySelector('i').innerHTML = ''; - - var clickFn = onRecordingButtonClick.bind(this); - this.clickFn = clickFn; - - dom.addEventListener(button, 'click', clickFn, { - passive: true - }); - } - - function getIndicatorIcon(item) { - - var status; - - if (item.Type === 'SeriesTimer') { - return ''; - } - else if (item.TimerId || item.SeriesTimerId) { - - status = item.Status || 'Cancelled'; - } - else if (item.Type === 'Timer') { - - status = item.Status; - } - else { - return ''; - } - - if (item.SeriesTimerId) { - - if (status !== 'Cancelled') { - return ''; - } - } - - return ''; - } - - RecordingButton.prototype.refresh = function (serverId, itemId) { - - var apiClient = connectionManager.getApiClient(serverId); - var self = this; - apiClient.getItem(apiClient.getCurrentUserId(), itemId).then(function (item) { - self.refreshItem(item); - }); - }; - - RecordingButton.prototype.refreshItem = function (item) { - - var options = this.options; - var button = options.button; - this.item = item; - button.querySelector('i').innerHTML = getIndicatorIcon(item); - - if (item.TimerId && (item.Status || 'Cancelled') !== 'Cancelled') { - button.classList.add('recordingIcon-active'); - } else { - button.classList.remove('recordingIcon-active'); - } - }; - - RecordingButton.prototype.destroy = function () { - - var options = this.options; - - if (options) { - var button = options.button; - - var clickFn = this.clickFn; - - if (clickFn) { - dom.removeEventListener(button, 'click', clickFn, { - passive: true - }); - } - } - - this.options = null; - this.item = null; - }; - - return RecordingButton; -}); \ No newline at end of file diff --git a/recordingcreator/recordingcreator.css b/recordingcreator/recordingcreator.css deleted file mode 100644 index dc1ba9b3..00000000 --- a/recordingcreator/recordingcreator.css +++ /dev/null @@ -1,27 +0,0 @@ -.recordingDialog-imageContainer { - flex-shrink: 0; - padding: 1em 1em 1em 0; - width: 25%; -} - -.recordingDialog-img { - width: 100%; -} - -.recordingDialog-itemName { - margin-top: .7em; -} - -.recordingDetailsContainer { - display: flex; -} - -.recordingDetails { - flex-grow: 1; -} - -.recordingDetailText { - display: flex; - align-items: center; - flex-wrap: wrap; -} diff --git a/recordingcreator/recordingcreator.js b/recordingcreator/recordingcreator.js deleted file mode 100644 index 2adbd193..00000000 --- a/recordingcreator/recordingcreator.js +++ /dev/null @@ -1,217 +0,0 @@ -define(['appRouter', 'dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'connectionManager', 'require', 'loading', 'datetime', 'recordingFields', 'events', 'emby-checkbox', 'emby-button', 'emby-input', 'paper-icon-button-light', 'formDialogStyle', 'css!./recordingcreator', 'material-icons', 'emby-scroller'], function (appRouter, dialogHelper, globalize, layoutManager, mediaInfo, appHost, connectionManager, require, loading, datetime, recordingFields, events) { - 'use strict'; - - var currentDialog; - var closeAction; - var currentRecordingFields; - var currentSeriesTimerId; - - function closeDialog() { - - dialogHelper.close(currentDialog); - } - - function init(context) { - - context.querySelector('.btnPlay').addEventListener('click', function () { - - closeAction = 'play'; - closeDialog(); - }); - - context.querySelector('.btnCancel').addEventListener('click', function () { - - closeAction = null; - closeDialog(); - }); - - context.querySelector('.btnManageSeriesRecording').addEventListener('click', function () { - - closeAction = 'manageseries'; - closeDialog(); - }); - } - - function getImageUrl(item, apiClient, imageHeight) { - - var imageTags = item.ImageTags || {}; - - if (item.PrimaryImageTag) { - imageTags.Primary = item.PrimaryImageTag; - } - - if (imageTags.Primary) { - - return apiClient.getScaledImageUrl(item.Id, { - type: "Primary", - maxHeight: imageHeight, - tag: item.ImageTags.Primary - }); - } - else if (imageTags.Thumb) { - - return apiClient.getScaledImageUrl(item.Id, { - type: "Thumb", - maxHeight: imageHeight, - tag: item.ImageTags.Thumb - }); - } - - return null; - } - - function renderRecording(context, defaultTimer, program, apiClient, refreshRecordingStateOnly) { - - if (!refreshRecordingStateOnly) { - var imgUrl = getImageUrl(program, apiClient, 200); - var imageContainer = context.querySelector('.recordingDialog-imageContainer'); - - if (imgUrl) { - imageContainer.innerHTML = ''; - imageContainer.classList.remove('hide'); - - } else { - imageContainer.innerHTML = ''; - imageContainer.classList.add('hide'); - } - - context.querySelector('.recordingDialog-itemName').innerHTML = program.Name; - context.querySelector('.formDialogHeaderTitle').innerHTML = program.Name; - context.querySelector('.itemGenres').innerHTML = (program.Genres || []).join(' / '); - context.querySelector('.itemOverview').innerHTML = program.Overview || ''; - - var formDialogFooter = context.querySelector('.formDialogFooter'); - var now = new Date(); - if (now >= datetime.parseISO8601Date(program.StartDate, true) && now < datetime.parseISO8601Date(program.EndDate, true)) { - formDialogFooter.classList.remove('hide'); - } else { - formDialogFooter.classList.add('hide'); - } - - context.querySelector('.itemMiscInfoPrimary').innerHTML = mediaInfo.getPrimaryMediaInfoHtml(program); - } - - context.querySelector('.itemMiscInfoSecondary').innerHTML = mediaInfo.getSecondaryMediaInfoHtml(program, { - }); - - loading.hide(); - } - - function reload(context, programId, serverId, refreshRecordingStateOnly) { - - loading.show(); - - var apiClient = connectionManager.getApiClient(serverId); - - var promise1 = apiClient.getNewLiveTvTimerDefaults({ programId: programId }); - var promise2 = apiClient.getLiveTvProgram(programId, apiClient.getCurrentUserId()); - - Promise.all([promise1, promise2]).then(function (responses) { - - var defaults = responses[0]; - var program = responses[1]; - - currentSeriesTimerId = program.SeriesTimerId; - - renderRecording(context, defaults, program, apiClient, refreshRecordingStateOnly); - }); - } - - function executeCloseAction(action, programId, serverId) { - - if (action === 'play') { - - require(['playbackManager'], function (playbackManager) { - - var apiClient = connectionManager.getApiClient(serverId); - - apiClient.getLiveTvProgram(programId, apiClient.getCurrentUserId()).then(function (item) { - - playbackManager.play({ - ids: [item.ChannelId], - serverId: serverId - }); - }); - }); - return; - } - - if (action === 'manageseries') { - - appRouter.showItem({ - Type: 'SeriesTimer', - Id: currentSeriesTimerId, - ServerId: serverId - }); - } - } - - function showEditor(itemId, serverId) { - - return new Promise(function (resolve, reject) { - - closeAction = null; - - loading.show(); - - require(['text!./recordingcreator.template.html'], function (template) { - - var dialogOptions = { - removeOnClose: true, - scrollY: false - }; - - if (layoutManager.tv) { - dialogOptions.size = 'fullscreen'; - } else { - dialogOptions.size = 'small'; - } - - var dlg = dialogHelper.createDialog(dialogOptions); - - dlg.classList.add('formDialog'); - dlg.classList.add('recordingDialog'); - - var html = ''; - - html += globalize.translateDocument(template, 'sharedcomponents'); - - dlg.innerHTML = html; - - currentDialog = dlg; - - function onRecordingChanged() { - reload(dlg, itemId, serverId, true); - } - - init(dlg); - - reload(dlg, itemId, serverId); - - currentRecordingFields = new recordingFields({ - parent: dlg.querySelector('.recordingFields'), - programId: itemId, - serverId: serverId - }); - - events.on(currentRecordingFields, 'recordingchanged', onRecordingChanged); - - dialogHelper.open(dlg).then(function () { - - events.off(currentRecordingFields, 'recordingchanged', onRecordingChanged); - executeCloseAction(closeAction, itemId, serverId); - - if (currentRecordingFields && currentRecordingFields.hasChanged()) { - resolve(); - } else { - reject(); - } - }); - }); - }); - } - - return { - show: showEditor - }; -}); \ No newline at end of file diff --git a/recordingcreator/recordingcreator.template.html b/recordingcreator/recordingcreator.template.html deleted file mode 100644 index b38f17d6..00000000 --- a/recordingcreator/recordingcreator.template.html +++ /dev/null @@ -1,62 +0,0 @@ -
- -

-
- -
-
-
-
-
- -
-
-

-

-

-

- -
-
- - - -
- - - - -
-
-
- -

-
-
- -
-
-
-
\ No newline at end of file diff --git a/recordingcreator/recordingeditor.js b/recordingcreator/recordingeditor.js deleted file mode 100644 index f0ff2e38..00000000 --- a/recordingcreator/recordingeditor.js +++ /dev/null @@ -1,160 +0,0 @@ -define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'connectionManager', 'require', 'loading', 'imageLoader', 'scrollStyles', 'emby-button', 'emby-input', 'paper-icon-button-light', 'formDialogStyle', 'css!./recordingcreator', 'material-icons', 'flexStyles', 'emby-scroller'], function (dialogHelper, globalize, layoutManager, mediaInfo, appHost, connectionManager, require, loading, imageLoader) { - 'use strict'; - - var currentDialog; - var recordingDeleted = false; - var currentItemId; - var currentServerId; - var currentResolve; - - function deleteTimer(apiClient, timerId) { - - return new Promise(function (resolve, reject) { - - require(['recordingHelper'], function (recordingHelper) { - - recordingHelper.cancelTimerWithConfirmation(timerId, apiClient.serverId()).then(resolve, reject); - }); - }); - } - - function renderTimer(context, item, apiClient) { - - var program = item.ProgramInfo || {}; - - context.querySelector('#txtPrePaddingMinutes').value = item.PrePaddingSeconds / 60; - context.querySelector('#txtPostPaddingMinutes').value = item.PostPaddingSeconds / 60; - - loading.hide(); - } - - function closeDialog(isDeleted) { - - recordingDeleted = isDeleted; - - dialogHelper.close(currentDialog); - } - - function onSubmit(e) { - - var form = this; - - var apiClient = connectionManager.getApiClient(currentServerId); - - apiClient.getLiveTvTimer(currentItemId).then(function (item) { - item.PrePaddingSeconds = form.querySelector('#txtPrePaddingMinutes').value * 60; - item.PostPaddingSeconds = form.querySelector('#txtPostPaddingMinutes').value * 60; - apiClient.updateLiveTvTimer(item).then(currentResolve); - }); - - e.preventDefault(); - - // Disable default form submission - return false; - } - - function init(context) { - - context.querySelector('.btnCancel').addEventListener('click', function () { - - closeDialog(false); - }); - - context.querySelector('.btnCancelRecording').addEventListener('click', function () { - - var apiClient = connectionManager.getApiClient(currentServerId); - deleteTimer(apiClient, currentItemId).then(function () { - closeDialog(true); - }); - }); - - context.querySelector('form').addEventListener('submit', onSubmit); - } - - function reload(context, id) { - - loading.show(); - currentItemId = id; - - var apiClient = connectionManager.getApiClient(currentServerId); - apiClient.getLiveTvTimer(id).then(function (result) { - - renderTimer(context, result, apiClient); - loading.hide(); - }); - } - - function showEditor(itemId, serverId, options) { - - return new Promise(function (resolve, reject) { - - recordingDeleted = false; - currentServerId = serverId; - loading.show(); - options = options || {}; - currentResolve = resolve; - - require(['text!./recordingeditor.template.html'], function (template) { - - var dialogOptions = { - removeOnClose: true, - scrollY: false - }; - - if (layoutManager.tv) { - dialogOptions.size = 'fullscreen'; - } else { - } - - var dlg = dialogHelper.createDialog(dialogOptions); - - dlg.classList.add('formDialog'); - dlg.classList.add('recordingDialog'); - - if (!layoutManager.tv) { - dlg.style['min-width'] = '20%'; - dlg.classList.add('dialog-fullscreen-lowres'); - } - - var html = ''; - - html += globalize.translateDocument(template, 'sharedcomponents'); - - dlg.innerHTML = html; - - if (options.enableCancel === false) { - dlg.querySelector('.formDialogFooter').classList.add('hide'); - } - - currentDialog = dlg; - - dlg.addEventListener('closing', function () { - - if (!recordingDeleted) { - dlg.querySelector('.btnSubmit').click(); - } - }); - - dlg.addEventListener('close', function () { - - if (recordingDeleted) { - resolve({ - updated: true, - deleted: true - }); - } - }); - - init(dlg); - - reload(dlg, itemId); - - dialogHelper.open(dlg); - }); - }); - } - - return { - show: showEditor - }; -}); \ No newline at end of file diff --git a/recordingcreator/recordingeditor.template.html b/recordingcreator/recordingeditor.template.html deleted file mode 100644 index 83d94d5c..00000000 --- a/recordingcreator/recordingeditor.template.html +++ /dev/null @@ -1,44 +0,0 @@ -
- -

- ${HeaderRecordingOptions} -

-
- -
-
-
-
-
-
-
- -
-
- ${MinutesBefore} -
-
-
-
-
-
- -
-
- ${MinutesAfter} -
-
-
-
- -
- - -
-
-
-
\ No newline at end of file diff --git a/recordingcreator/recordingfields.js b/recordingcreator/recordingfields.js deleted file mode 100644 index 9344856b..00000000 --- a/recordingcreator/recordingfields.js +++ /dev/null @@ -1,270 +0,0 @@ -define(['appRouter', 'globalize', 'connectionManager', 'serverNotifications', 'require', 'loading', 'apphost', 'dom', 'recordingHelper', 'events', 'registrationServices', 'paper-icon-button-light', 'emby-button', 'flexStyles', 'detailButtonStyle'], function (appRouter, globalize, connectionManager, serverNotifications, require, loading, appHost, dom, recordingHelper, events, registrationServices) { - 'use strict'; - - function showSeriesRecordingFields(context, programId, apiClient) { - - context.querySelector('.recordSeriesContainer').classList.remove('hide'); - } - - function loadData(parent, program, apiClient) { - - if (program.IsSeries) { - parent.querySelector('.recordSeriesContainer').classList.remove('hide'); - showSeriesRecordingFields(parent, program.Id, apiClient); - } else { - parent.querySelector('.recordSeriesContainer').classList.add('hide'); - } - - var btnManageSeriesRecording = parent.querySelector('.btnManageSeriesRecording'); - - if (program.SeriesTimerId) { - - if (btnManageSeriesRecording) { - btnManageSeriesRecording.classList.remove('hide'); - } - parent.querySelector('.seriesRecordingButton .recordingIcon').classList.add('recordingIcon-active'); - parent.querySelector('.seriesRecordingButtonText').innerHTML = globalize.translate('HeaderCancelSeries'); - } else { - - if (btnManageSeriesRecording) { - btnManageSeriesRecording.classList.add('hide'); - } - - parent.querySelector('.seriesRecordingButton .recordingIcon').classList.remove('recordingIcon-active'); - parent.querySelector('.seriesRecordingButtonText').innerHTML = globalize.translate('HeaderRecordSeries'); - } - - if (program.TimerId && program.Status !== 'Cancelled') { - parent.querySelector('.btnManageRecording').classList.remove('hide'); - parent.querySelector('.singleRecordingButton .recordingIcon').classList.add('recordingIcon-active'); - - if (program.Status === 'InProgress') { - parent.querySelector('.singleRecordingButtonText').innerHTML = globalize.translate('HeaderStopRecording'); - } else { - parent.querySelector('.singleRecordingButtonText').innerHTML = globalize.translate('HeaderDoNotRecord'); - } - - } else { - parent.querySelector('.btnManageRecording').classList.add('hide'); - parent.querySelector('.singleRecordingButton .recordingIcon').classList.remove('recordingIcon-active'); - parent.querySelector('.singleRecordingButtonText').innerHTML = globalize.translate('Record'); - } - } - - function fetchData(instance) { - - var options = instance.options; - var apiClient = connectionManager.getApiClient(options.serverId); - - return apiClient.getLiveTvProgram(options.programId, apiClient.getCurrentUserId()).then(function (program) { - - instance.TimerId = program.TimerId; - instance.Status = program.Status; - instance.SeriesTimerId = program.SeriesTimerId; - - loadData(options.parent, program, apiClient); - }); - } - - function onTimerChangedExternally(e, apiClient, data) { - - var options = this.options; - var refresh = false; - - if (data.Id) { - if (this.TimerId === data.Id) { - refresh = true; - } - } - if (data.ProgramId && options) { - if (options.programId === data.ProgramId) { - refresh = true; - } - } - - if (refresh) { - this.refresh(); - } - } - - function onSeriesTimerChangedExternally(e, apiClient, data) { - - var options = this.options; - var refresh = false; - - if (data.Id) { - if (this.SeriesTimerId === data.Id) { - refresh = true; - } - } - if (data.ProgramId && options) { - if (options.programId === data.ProgramId) { - refresh = true; - } - } - - if (refresh) { - this.refresh(); - } - } - - function RecordingEditor(options) { - - this.options = options; - this.embed(); - - var timerChangedHandler = onTimerChangedExternally.bind(this); - this.timerChangedHandler = timerChangedHandler; - - events.on(serverNotifications, 'TimerCreated', timerChangedHandler); - events.on(serverNotifications, 'TimerCancelled', timerChangedHandler); - - var seriesTimerChangedHandler = onSeriesTimerChangedExternally.bind(this); - this.seriesTimerChangedHandler = seriesTimerChangedHandler; - - events.on(serverNotifications, 'SeriesTimerCreated', seriesTimerChangedHandler); - events.on(serverNotifications, 'SeriesTimerCancelled', seriesTimerChangedHandler); - } - - function onManageRecordingClick(e) { - - var options = this.options; - - if (!this.TimerId || this.Status === 'Cancelled') { - return; - } - - var self = this; - - require(['recordingEditor'], function (recordingEditor) { - - recordingEditor.show(self.TimerId, options.serverId, { - - enableCancel: false - - }).then(function () { - self.changed = true; - }); - }); - } - - function onRecordChange(e) { - - this.changed = true; - - var self = this; - var options = this.options; - var apiClient = connectionManager.getApiClient(options.serverId); - - var button = dom.parentWithTag(e.target, 'BUTTON'); - var isChecked = !button.querySelector('i').classList.contains('recordingIcon-active'); - - var hasEnabledTimer = this.TimerId && this.Status !== 'Cancelled'; - - if (isChecked) { - if (!hasEnabledTimer) { - loading.show(); - recordingHelper.createRecording(apiClient, options.programId, false).then(function () { - events.trigger(self, 'recordingchanged'); - fetchData(self); - loading.hide(); - }); - } - } else { - if (hasEnabledTimer) { - loading.show(); - recordingHelper.cancelTimer(apiClient, this.TimerId, true).then(function () { - events.trigger(self, 'recordingchanged'); - fetchData(self); - loading.hide(); - }); - } - } - } - - function sendToast(msg) { - require(['toast'], function (toast) { - toast(msg); - }); - } - - function onRecordSeriesChange(e) { - - this.changed = true; - - var self = this; - var options = this.options; - var apiClient = connectionManager.getApiClient(options.serverId); - - var button = dom.parentWithTag(e.target, 'BUTTON'); - var isChecked = !button.querySelector('i').classList.contains('recordingIcon-active'); - - if (isChecked) { - showSeriesRecordingFields(options.parent, options.programId, apiClient); - - if (!this.SeriesTimerId) { - - var promise = this.TimerId ? - recordingHelper.changeRecordingToSeries(apiClient, this.TimerId, options.programId) : - recordingHelper.createRecording(apiClient, options.programId, true); - - promise.then(function () { - fetchData(self); - }); - } - } else { - - if (this.SeriesTimerId) { - apiClient.cancelLiveTvSeriesTimer(this.SeriesTimerId).then(function () { - sendToast(globalize.translate('RecordingCancelled')); - fetchData(self); - }); - } - } - } - - RecordingEditor.prototype.embed = function () { - - var self = this; - - var options = self.options; - var context = options.parent; - - var singleRecordingButton = context.querySelector('.singleRecordingButton'); - - singleRecordingButton.classList.remove('hide'); - - singleRecordingButton.addEventListener('click', onRecordChange.bind(self)); - context.querySelector('.seriesRecordingButton').addEventListener('click', onRecordSeriesChange.bind(self)); - context.querySelector('.btnManageRecording').addEventListener('click', onManageRecordingClick.bind(self)); - - fetchData(self); - }; - - RecordingEditor.prototype.hasChanged = function () { - - return this.changed; - }; - - RecordingEditor.prototype.refresh = function () { - - fetchData(this); - }; - - RecordingEditor.prototype.destroy = function () { - - var timerChangedHandler = this.timerChangedHandler; - this.timerChangedHandler = null; - - events.off(serverNotifications, 'TimerCreated', timerChangedHandler); - events.off(serverNotifications, 'TimerCancelled', timerChangedHandler); - - var seriesTimerChangedHandler = this.seriesTimerChangedHandler; - this.seriesTimerChangedHandler = null; - - events.off(serverNotifications, 'SeriesTimerCreated', seriesTimerChangedHandler); - events.off(serverNotifications, 'SeriesTimerCancelled', seriesTimerChangedHandler); - }; - - return RecordingEditor; -}); \ No newline at end of file diff --git a/recordingcreator/seriesrecordingeditor.js b/recordingcreator/seriesrecordingeditor.js deleted file mode 100644 index 6a2ffa9b..00000000 --- a/recordingcreator/seriesrecordingeditor.js +++ /dev/null @@ -1,149 +0,0 @@ -define(['globalize', 'layoutManager', 'mediaInfo', 'apphost', 'connectionManager', 'require', 'loading', 'imageLoader', 'datetime', 'scrollStyles', 'emby-button', 'emby-checkbox', 'emby-input', 'emby-select', 'paper-icon-button-light', 'css!./recordingcreator', 'material-icons', 'flexStyles'], function (globalize, layoutManager, mediaInfo, appHost, connectionManager, require, loading, imageLoader, datetime) { - 'use strict'; - - var currentItemId; - var currentServerId; - - function deleteTimer(apiClient, timerId) { - - return new Promise(function (resolve, reject) { - - require(['recordingHelper'], function (recordingHelper) { - - recordingHelper.cancelSeriesTimerWithConfirmation(timerId, apiClient.serverId()).then(resolve, reject); - }); - }); - } - - function renderTimer(context, item, apiClient) { - - var program = item.ProgramInfo || {}; - - context.querySelector('#txtPrePaddingMinutes').value = item.PrePaddingSeconds / 60; - context.querySelector('#txtPostPaddingMinutes').value = item.PostPaddingSeconds / 60; - - context.querySelector('.selectChannels').value = item.RecordAnyChannel ? 'all' : 'one'; - context.querySelector('.selectAirTime').value = item.RecordAnyTime ? 'any' : 'original'; - - context.querySelector('.selectShowType').value = item.RecordNewOnly ? 'new' : 'all'; - context.querySelector('.chkSkipEpisodesInLibrary').checked = item.SkipEpisodesInLibrary; - context.querySelector('.selectKeepUpTo').value = item.KeepUpTo || 0; - - if (item.ChannelName || item.ChannelNumber) { - context.querySelector('.optionChannelOnly').innerHTML = globalize.translate('ChannelNameOnly', item.ChannelName || item.ChannelNumber); - } else { - context.querySelector('.optionChannelOnly').innerHTML = globalize.translate('OneChannel'); - } - - context.querySelector('.optionAroundTime').innerHTML = globalize.translate('AroundTime', datetime.getDisplayTime(datetime.parseISO8601Date(item.StartDate))); - - loading.hide(); - } - - function onSubmit(e) { - - var form = this; - - var apiClient = connectionManager.getApiClient(currentServerId); - - apiClient.getLiveTvSeriesTimer(currentItemId).then(function (item) { - - item.PrePaddingSeconds = form.querySelector('#txtPrePaddingMinutes').value * 60; - item.PostPaddingSeconds = form.querySelector('#txtPostPaddingMinutes').value * 60; - item.RecordAnyChannel = form.querySelector('.selectChannels').value === 'all'; - item.RecordAnyTime = form.querySelector('.selectAirTime').value === 'any'; - item.RecordNewOnly = form.querySelector('.selectShowType').value === 'new'; - item.SkipEpisodesInLibrary = form.querySelector('.chkSkipEpisodesInLibrary').checked; - item.KeepUpTo = form.querySelector('.selectKeepUpTo').value; - - apiClient.updateLiveTvSeriesTimer(item); - }); - - e.preventDefault(); - - // Disable default form submission - return false; - } - - function init(context) { - - fillKeepUpTo(context); - - context.querySelector('form').addEventListener('submit', onSubmit); - } - - function reload(context, id) { - - var apiClient = connectionManager.getApiClient(currentServerId); - - loading.show(); - if (typeof id === 'string') { - currentItemId = id; - - apiClient.getLiveTvSeriesTimer(id).then(function (result) { - - renderTimer(context, result, apiClient); - loading.hide(); - }); - } else if (id) { - - currentItemId = id.Id; - - renderTimer(context, id, apiClient); - loading.hide(); - } - } - - function fillKeepUpTo(context) { - - var html = ''; - - for (var i = 0; i <= 50; i++) { - - var text; - - if (i === 0) { - text = globalize.translate('AsManyAsPossible'); - } else if (i === 1) { - text = globalize.translate('ValueOneEpisode'); - } else { - text = globalize.translate('ValueEpisodeCount', i); - } - - html += ''; - } - - context.querySelector('.selectKeepUpTo').innerHTML = html; - } - - function onFieldChange(e) { - this.querySelector('.btnSubmit').click(); - } - - function embed(itemId, serverId, options) { - - currentServerId = serverId; - loading.show(); - options = options || {}; - - require(['text!./seriesrecordingeditor.template.html'], function (template) { - - var dlg = options.context; - - dlg.innerHTML = globalize.translateDocument(template, 'sharedcomponents'); - - dlg.removeEventListener('change', onFieldChange); - dlg.addEventListener('change', onFieldChange); - - dlg.classList.remove('hide'); - - init(dlg); - - reload(dlg, itemId); - }); - } - - return { - embed: embed - }; -}); \ No newline at end of file diff --git a/recordingcreator/seriesrecordingeditor.template.html b/recordingcreator/seriesrecordingeditor.template.html deleted file mode 100644 index b37e5dcf..00000000 --- a/recordingcreator/seriesrecordingeditor.template.html +++ /dev/null @@ -1,60 +0,0 @@ -
-
- -
- -
- -
${SkipEpisodesAlreadyInMyLibraryHelp}
-
- -
- -
- -
- -
- -
- -
${KeepUpToHelp}
-
- -
-
-
- -
-
- ${MinutesBefore} -
-
-
-
-
-
- -
-
- ${MinutesAfter} -
-
-
- - -
diff --git a/strings/ar.json b/strings/ar.json index db7586f8..136a0943 100644 --- a/strings/ar.json +++ b/strings/ar.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Audio streams will be converted to {0}, or copied from the original file if they are already {0} and the quality fits within the conversion options.", "AudioWillBeConvertedToOrCopied": "Audio streams will be converted to {0}, or copied from the original file if they are any of ({1}), and the quality fits within the conversion options.", "HeaderSpecialKeys": "Special Keys", - "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:" + "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/bg-BG.json b/strings/bg-BG.json index 8d9ebd7c..ae35a390 100644 --- a/strings/bg-BG.json +++ b/strings/bg-BG.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Audio streams will be converted to {0}, or copied from the original file if they are already {0} and the quality fits within the conversion options.", "AudioWillBeConvertedToOrCopied": "Audio streams will be converted to {0}, or copied from the original file if they are any of ({1}), and the quality fits within the conversion options.", "HeaderSpecialKeys": "Special Keys", - "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:" + "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/ca.json b/strings/ca.json index 08ae7341..8f002515 100644 --- a/strings/ca.json +++ b/strings/ca.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Audio streams will be converted to {0}, or copied from the original file if they are already {0} and the quality fits within the conversion options.", "AudioWillBeConvertedToOrCopied": "Audio streams will be converted to {0}, or copied from the original file if they are any of ({1}), and the quality fits within the conversion options.", "HeaderSpecialKeys": "Special Keys", - "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:" + "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/cs.json b/strings/cs.json index 09a3b66b..1175041a 100644 --- a/strings/cs.json +++ b/strings/cs.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Audio streamy budou p\u0159ek\u00f3dov\u00e1ny do {0} nebo zkop\u00edrov\u00e1ny z p\u016fvodn\u00edho souboru pokud jsou u\u017e {0} a kvalitou odpov\u00eddaj\u00ed mo\u017enostem p\u0159ek\u00f3dov\u00e1n\u00ed.", "AudioWillBeConvertedToOrCopied": "Audio streamy budou p\u0159ek\u00f3dov\u00e1ny do {0} nebo zkop\u00edrov\u00e1ny z p\u016fvodn\u00edho souboru pokud jsou n\u011bkter\u00e9 z {1} a kvalitou odpov\u00eddaj\u00ed mo\u017enostem p\u0159ek\u00f3dov\u00e1n\u00ed.", "HeaderSpecialKeys": "Speci\u00e1ln\u00ed kl\u00e1vesy", - "FollowingSpecialKeys": "N\u00e1sleduj\u00edc\u00ed speci\u00e1ln\u00ed kl\u00e1vesy podporuje v\u011bt\u0161ina kl\u00e1vesnic a d\u00e1lkov\u00fdch ovl\u00e1d\u00e1n\u00ed:" + "FollowingSpecialKeys": "N\u00e1sleduj\u00edc\u00ed speci\u00e1ln\u00ed kl\u00e1vesy podporuje v\u011bt\u0161ina kl\u00e1vesnic a d\u00e1lkov\u00fdch ovl\u00e1d\u00e1n\u00ed:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/da.json b/strings/da.json index 1c835259..e26251ed 100644 --- a/strings/da.json +++ b/strings/da.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Audio streams will be converted to {0}, or copied from the original file if they are already {0} and the quality fits within the conversion options.", "AudioWillBeConvertedToOrCopied": "Audio streams will be converted to {0}, or copied from the original file if they are any of ({1}), and the quality fits within the conversion options.", "HeaderSpecialKeys": "Special Keys", - "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:" + "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/de.json b/strings/de.json index 881e9d1f..4a408804 100644 --- a/strings/de.json +++ b/strings/de.json @@ -254,7 +254,7 @@ "Desktop": "Desktop", "Mobile": "Mobil \/ Tablet", "Navigation": "Navigation", - "HeaderVideoPlayback": "Video Playback", + "HeaderVideoPlayback": "Videowiedergabe", "TV": "TV", "HeaderEmbyConnect": "Emby Connect", "Seasons": "Staffeln", @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Audio-Streams werden nach {0} konvertiert oder von der Originaldatei kopiert, falls sie bereits als {0} vorliegen und die Qualit\u00e4t zu den Konvertierungseinstellungen passt.", "AudioWillBeConvertedToOrCopied": "Audio-Streams werden nach {0} konvertiert oder von der Originaldatei kopiert, falls sie als eine davon ({1}) vorliegen und die Qualit\u00e4t zu den Konvertierungseinstellungen passt.", "HeaderSpecialKeys": "Spezialtasten", - "FollowingSpecialKeys": "Die folgenden Spezialtasten werden von den meisten Tastaturen und Fernbedienungen unterst\u00fctzt:" + "FollowingSpecialKeys": "Die folgenden Spezialtasten werden von den meisten Tastaturen und Fernbedienungen unterst\u00fctzt:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/el.json b/strings/el.json index b1c0adf3..11893f83 100644 --- a/strings/el.json +++ b/strings/el.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "\u03a4\u03b1 stream \u03ae\u03c7\u03bf\u03c5 \u03b8\u03b1 \u03bc\u03b5\u03c4\u03b1\u03c4\u03c1\u03ad\u03c0\u03bf\u03bd\u03c4\u03b1\u03b9 \u03c3\u03b5 {0}, \u03ae \u03b8\u03b1 \u03b1\u03bd\u03c4\u03b9\u03b3\u03c1\u03ac\u03c6\u03bf\u03bd\u03c4\u03b1\u03b9 \u03b1\u03c0\u03cc \u03c4\u03bf \u03b1\u03c1\u03c7\u03b9\u03ba\u03cc \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03b1\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03ae\u03b4\u03b7 {0} \u03ba\u03b1\u03b9 \u03b7 \u03c0\u03bf\u03b9\u03cc\u03c4\u03b7\u03c4\u03b1 \u03c4\u03b1\u03b9\u03c1\u03b9\u03ac\u03b6\u03b5\u03b9 \u03bc\u03b5 \u03c4\u03b9\u03c2 \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2 \u03bc\u03b5\u03c4\u03b1\u03c4\u03c1\u03bf\u03c0\u03ae\u03c2.", "AudioWillBeConvertedToOrCopied": "\u03a4\u03b1 stream \u03ae\u03c7\u03bf\u03c5 \u03b8\u03b1 \u03bc\u03b5\u03c4\u03b1\u03c4\u03c1\u03ad\u03c0\u03bf\u03bd\u03c4\u03b1\u03b9 \u03c3\u03b5 {0}, \u03ae \u03b8\u03b1 \u03b1\u03bd\u03c4\u03b9\u03b3\u03c1\u03ac\u03c6\u03bf\u03bd\u03c4\u03b1\u03b9 \u03b1\u03c0\u03cc \u03c4\u03bf \u03b1\u03c1\u03c7\u03b9\u03ba\u03cc \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03b1\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03ba\u03ac\u03c4\u03b9 \u03b1\u03c0\u03cc {1} \u03ba\u03b1\u03b9 \u03b7 \u03c0\u03bf\u03b9\u03cc\u03c4\u03b7\u03c4\u03b1 \u03c4\u03b1\u03b9\u03c1\u03b9\u03ac\u03b6\u03b5\u03b9 \u03bc\u03b5 \u03c4\u03b9\u03c2 \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2 \u03bc\u03b5\u03c4\u03b1\u03c4\u03c1\u03bf\u03c0\u03ae\u03c2.", "HeaderSpecialKeys": "\u0395\u03b9\u03b4\u03b9\u03ba\u03ac \u039a\u03bf\u03c5\u03bc\u03c0\u03b9\u03ac", - "FollowingSpecialKeys": "\u03a4\u03b1 \u03c0\u03b1\u03c1\u03b1\u03ba\u03ac\u03c4\u03c9 \u03b5\u03b9\u03b4\u03b9\u03ba\u03ac \u03ba\u03bf\u03c5\u03bc\u03c0\u03b9\u03ac \u03c5\u03c0\u03bf\u03c3\u03c4\u03b7\u03c1\u03af\u03b6\u03bf\u03bd\u03c4\u03b1\u03b9 \u03c3\u03c4\u03b1 \u03c0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03b1 \u03c0\u03bb\u03b7\u03ba\u03c4\u03c1\u03bf\u03bb\u03cc\u03b3\u03b9\u03b1 \u03ba\u03b1\u03b9 \u03c4\u03b7\u03bb\u03b5\u03c7\u03b5\u03b9\u03c1\u03b9\u03c3\u03c4\u03ae\u03c1\u03b9\u03b1:" + "FollowingSpecialKeys": "\u03a4\u03b1 \u03c0\u03b1\u03c1\u03b1\u03ba\u03ac\u03c4\u03c9 \u03b5\u03b9\u03b4\u03b9\u03ba\u03ac \u03ba\u03bf\u03c5\u03bc\u03c0\u03b9\u03ac \u03c5\u03c0\u03bf\u03c3\u03c4\u03b7\u03c1\u03af\u03b6\u03bf\u03bd\u03c4\u03b1\u03b9 \u03c3\u03c4\u03b1 \u03c0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03b1 \u03c0\u03bb\u03b7\u03ba\u03c4\u03c1\u03bf\u03bb\u03cc\u03b3\u03b9\u03b1 \u03ba\u03b1\u03b9 \u03c4\u03b7\u03bb\u03b5\u03c7\u03b5\u03b9\u03c1\u03b9\u03c3\u03c4\u03ae\u03c1\u03b9\u03b1:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/en-GB.json b/strings/en-GB.json index b79ca00f..7dfaca37 100644 --- a/strings/en-GB.json +++ b/strings/en-GB.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Audio streams will be converted to {0}, or copied from the original file if they are already {0} and the quality fits within the conversion options.", "AudioWillBeConvertedToOrCopied": "Audio streams will be converted to {0}, or copied from the original file if they are any of ({1}), and the quality fits within the conversion options.", "HeaderSpecialKeys": "Special Keys", - "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:" + "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/en-US.json b/strings/en-US.json index 58bf0318..1ace1fc5 100644 --- a/strings/en-US.json +++ b/strings/en-US.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Audio streams will be converted to {0}, or copied from the original file if they are already {0} and the quality fits within the conversion options.", "AudioWillBeConvertedToOrCopied": "Audio streams will be converted to {0}, or copied from the original file if they are any of ({1}), and the quality fits within the conversion options.", "HeaderSpecialKeys": "Special Keys", - "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:" + "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/es-AR.json b/strings/es-AR.json index fc3dd426..c86a4296 100644 --- a/strings/es-AR.json +++ b/strings/es-AR.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Audio streams will be converted to {0}, or copied from the original file if they are already {0} and the quality fits within the conversion options.", "AudioWillBeConvertedToOrCopied": "Audio streams will be converted to {0}, or copied from the original file if they are any of ({1}), and the quality fits within the conversion options.", "HeaderSpecialKeys": "Special Keys", - "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:" + "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/es-MX.json b/strings/es-MX.json index dbb7f10e..2967da23 100644 --- a/strings/es-MX.json +++ b/strings/es-MX.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "La pistas de audio sera convertida a {0}, o sera copiada del archivo original si ya es {0} y la calidad coincide con las opciones de conversi\u00f3n.", "AudioWillBeConvertedToOrCopied": "La pista de audiosera convertida a {0}, o sera copiada del archivo original si hay alg\u00fan ({1}) y la calidad coincide con las opciones de conversi\u00f3n.", "HeaderSpecialKeys": "Teclas Especiales", - "FollowingSpecialKeys": "Las siguientes teclas especiales son soportadas por la mayor\u00eda de los teclados y controles remotos:" + "FollowingSpecialKeys": "Las siguientes teclas especiales son soportadas por la mayor\u00eda de los teclados y controles remotos:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/es.json b/strings/es.json index 29474ca0..ad30e9a1 100644 --- a/strings/es.json +++ b/strings/es.json @@ -1,5 +1,5 @@ { - "EmbyLoginTerms": "Emby is designed to help you manage your personal media library, such as home videos and photos. Please see our {0}terms of use{1}. The use of any Emby software constitutes acceptance of these terms.", + "EmbyLoginTerms": "Emby ha sido dise\u00f1ado para administrar tus archivos personales multimedia, como videos caseros y fotos. Por favor, lee nuestros {0}t\u00e9rminos de uso{1}. Cualquier uso del software Emby constituye la aceptaci\u00f3n de estos t\u00e9rminos.", "MessageUnableToConnectToServer": "No podemos conectar con el servidor seleccionado ahora mismo. Por favor aseg\u00farate de que esta funcionando e int\u00e9ntalo otra vez.", "EmbyIntroMessage": "Con Emby puedes transmitir v\u00eddeos, m\u00fasica y fotos a smartphones, tablets y otros dispositivos desde tu servidor Emby.", "HeaderSignInWithConnect": "Inicia sesi\u00f3n con Emby Connect", @@ -18,29 +18,29 @@ "Password": "Contrase\u00f1a", "LabelPassword": "Contrase\u00f1a:", "HeaderResetPassword": "Restablecer Contrase\u00f1a", - "Preview": "Preview", + "Preview": "Previsualizaci\u00f3n", "Submit": "Enviar", - "HeaderKeyboardAndRemote": "Keyboard and Remote", - "NoSelectedItemsSupportOperation": "There are no items selected that support this operation.", - "NoOperationsForSelectedItems": "There are no operations available for the selected items.", - "UploadOnlyOnWifi": "Upload only on Wifi", + "HeaderKeyboardAndRemote": "Teclado y Remoto", + "NoSelectedItemsSupportOperation": "No hay elementos seleccionados que admitan esta operaci\u00f3n.", + "NoOperationsForSelectedItems": "No hay operaciones disponibles para los elementos seleccionados.", + "UploadOnlyOnWifi": "Subir s\u00f3lo con Wifi.", "LabelPasswordConfirm": "Contrase\u00f1a (Confirmar):", "LabelUsername": "Nombre de usuario:", "HeaderAddServer": "A\u00f1adir Servidor", - "Close": "Close", + "Close": "Cerrar", "LabelEmail": "Correo:", "LabelHost": "Host:", - "LabelHostHelp": "192.168.1.100 o https:\/\/myserver.com", + "LabelHostHelp": "192.168.1.100 o https:\/\/miservidor.com", "LabelPort": "Puerto:", "Disabled": "Desactivado", "Uninstall": "Desinstalar", "NextValue": "Siguiente: {0}", "HeaderNextItem": "Elemento Siguiente", "HeaderPreviousItem": "Elemento Anterior", - "NoTrailersMessage": "No Trailers found. To add Trailers, please install the Trailer plugin from the {0}Emby plugin catalog{1}.", - "UninstallPluginConfirmation": "Are you sure you wish to uninstall this plugin?", + "NoTrailersMessage": "No se han encontrado Trailers. Para agregar Trailes, por favor instala el plugin Trailer, desde el cat\u00e1logo de {0}plugins de Emby{1}.", + "UninstallPluginConfirmation": "\u00bfEst\u00e1s seguro de desinstalar este plugin?", "HeaderUninstallPlugin": "Desinstalar Plugin", - "AreYouStillWatching": "Are you still watching?", + "AreYouStillWatching": "\u00bfQuieres seguir viendo?", "LabelCurrentPassword": "Contrase\u00f1a actual", "LabelNewPassword": "Nueva contrase\u00f1a", "LabelNewPasswordConfirm": "Confirmar nueva contrase\u00f1a:", @@ -48,45 +48,45 @@ "ServerUpdateNeeded": "El servidor necesita actualizarse. Para descargar la \u00faltima versi\u00f3n visita {0}", "LiveTvRequiresUnlock": "TV en vivo requiere de una suscripci\u00f3n activa de Emby Premiere.", "MessageThankYouForConnectSignUp": "Gracias por iniciar sesi\u00f3n con Emby Connect. Se te ha enviado un correo con las instrucciones para confirmar tu nueva cuenta. Por favor confirma la cuenta y vuelve aqu\u00ed para iniciar sesi\u00f3n.", - "MessageThankYouForConnectSignUpNoValidation": "Thank you for signing up for Emby Connect! You will now be asked to login with your Emby Connect information.", + "MessageThankYouForConnectSignUpNoValidation": "\u00a1Gracias por registrarte en Emby Connect! Ahora te pediremos iniciar sesi\u00f3n con tu cuenta de Emby Connect.", "ErrorMessagePasswordNotMatchConfirm": "La contrase\u00f1a y la confirmaci\u00f3n de contrase\u00f1a tienen que coincidir.", "ErrorMessageUsernameInUse": "El usuario ya est\u00e1 en uso. Por favor elige otro nombre e int\u00e9ntalo de nuevo.", "ErrorMessageEmailInUse": "La direcci\u00f3n de correo ya est\u00e1 en uso. Por favor introduce una nueva direcci\u00f3n de correo e int\u00e9ntalo de nuevo, o utiliza la caracter\u00edstica de restablecer contrase\u00f1a.", "HeaderUpcomingOnTV": "Pr\u00f3ximos en la TV", "HeaderConnectionFailure": "Fallo de conexi\u00f3n", "HeaderConnectToServer": "Conectar al servidor", - "ConnectToServerManually": "Connect to server manually", + "ConnectToServerManually": "Conectar al servidor manualmente", "LabelEnterConnectUserNameHelp": "Este es el usuario o email de su cuenta Emby online.", - "HeaderSignInError": "Sign In Error", + "HeaderSignInError": "Error en el login", "HeaderManualLogin": "Acceder Manualmente", - "PasswordResetConfirmation": "\u00bfEstas seguro que desea restablecer la contrase\u00f1a?", - "ContactAdminToResetPassword": "Please contact your system administrator to reset your password.", - "ForgotPasswordInNetworkRequired": "Please try again within your home network to initiate the password reset process.", - "ForgotPasswordFileCreated": "The following file has been created on your server and contains instructions on how to proceed:", - "ForgotPasswordFileExpiration": "The reset pin will expire at {0}.", - "InvalidForgotPasswordPin": "An invalid or expired pin was entered. Please try again.", - "PasswordResetForUsers": "Passwords have been removed for the following users. To login, sign in with a blank password.", + "PasswordResetConfirmation": "\u00bfEstas seguro que deseas restablecer la contrase\u00f1a?", + "ContactAdminToResetPassword": "Por favor, contacta con el administrador del sistema, para restablecer tu contrase\u00f1a.", + "ForgotPasswordInNetworkRequired": "Por favor, intenta nuevamente dentro de tu red dom\u00e9stica para iniciar el proceso de restablecimiento de contrase\u00f1a.", + "ForgotPasswordFileCreated": "El siguiente archivo ha sido creado en tu servidor y contiene instrucciones de como proceder:", + "ForgotPasswordFileExpiration": "El reseteo del pin expira en {0}", + "InvalidForgotPasswordPin": "Has introducido un pin inv\u00e1lido o expirado. Por favor, int\u00e9ntalo otra vez.", + "PasswordResetForUsers": "Se han eliminado las contrase\u00f1as para los siguientes usuarios. Para acceder, introduce una contrase\u00f1a en blanco.", "HeaderForgotPassword": "Contrase\u00f1a olvidada", "ForgotPasswordUsernameHelp": "Introduce tu nombre de usuario, si te acuerdas.", "HeaderPasswordReset": "Restablecer Contrase\u00f1a", "AttributeNew": "Nuevo", "Premiere": "Premiere", "LabelPinCode": "C\u00f3digo Pin", - "LabelLocalNetworkPinCode": "Local network pin code:", - "LabelLocalNetworkPasswordMode": "Local network sign in mode:", - "RequirePasswordInLocalNetwork": "Require a password on the local network", - "NoPasswordInLocalNetwork": "Don't require a password on the local network", - "PinCodeInLocalNetwork": "Allow a numeric pin code on the local network", - "LocalNetworkPasswordModeHelp": "Select the sign in method for devices on the same local network as your Emby Server.", - "HeaderLocalNetworkAccess": "Local Network Access", + "LabelLocalNetworkPinCode": "Pin para red local:", + "LabelLocalNetworkPasswordMode": "Modo de acceso desde red local:", + "RequirePasswordInLocalNetwork": "Pedir una contrase\u00f1a en la red local", + "NoPasswordInLocalNetwork": "No pedir una contrase\u00f1a en la red local", + "PinCodeInLocalNetwork": "Permitir un pin num\u00e9rico en red local", + "LocalNetworkPasswordModeHelp": "Selecciona el m\u00e9todo de acceso para dispositivos en la misma red local que tu servidor Emby.", + "HeaderLocalNetworkAccess": "Acceso red local", "Live": "Directo", "Repeat": "Repetir", "Tracks": "Tracks", - "HeaderCameraUpload": "Camera Upload", + "HeaderCameraUpload": "Subida desde C\u00e1mara", "TrackCount": "{0} Tracks", "ItemCount": "\u00edtems {0}", "HeaderLatestMusic": "\u00daltima M\u00fasica", - "HeaderLatestDownloadedVideos": "Latest Downloaded Videos", + "HeaderLatestDownloadedVideos": "\u00daltimos v\u00eddeos descargados", "HeaderRecentlyPlayed": "Reproducido Recientemente", "HeaderFrequentlyPlayed": "Reproducido Frecuentemente", "HeaderMoreLikeThis": "M\u00e1s Como Esto", @@ -132,7 +132,7 @@ "Cancel": "Cancelar", "Restart": "Resetear", "Shutdown": "Apagar", - "Logs": "Logs", + "Logs": "Registros", "Notifications": "Notificaciones", "Plugins": "Plugins", "Systems": "Sistemas", @@ -176,33 +176,33 @@ "HeaderRecordSeries": "Grabar Series", "HeaderCinemaMode": "Modo Cine", "HeaderCloudSync": "Sincronizaci\u00f3n en la nube", - "Conversions": "Conversions", + "Conversions": "Conversiones", "Downloads": "Descargas", - "HeaderManageDownloads": "Manage Downloads", + "HeaderManageDownloads": "Administrar Descargas", "InternalStorage": "Almacenamiento interno", "ExternalStorage": "Almacenamiento externo", - "UploadToFollowingServers": "Upload to Servers", - "UploadingNumItems": "Uploading {0} of {1}", - "HeaderSampleRate": "Sample Rate", - "HeaderReferenceFrames": "Reference Frames", - "HeaderBitDepth": "Bit Depth", - "HeaderPixelFormat": "Pixel Format", + "UploadToFollowingServers": "Subida a servidores", + "UploadingNumItems": "Subiendo {0} de {1}", + "HeaderSampleRate": "Radio de ejemplo", + "HeaderReferenceFrames": "Marcos de referencia", + "HeaderBitDepth": "Profundidad de bits", + "HeaderPixelFormat": "Formato de p\u00edxel", "Profile": "Perfil", "Bitrate": "Tasa de bits", "Container": "Contenedor", - "Format": "Format", - "Path": "Path", - "Size": "Size", - "Resolution": "Resolution", - "HeaderCodecTag": "Codec Tag", - "Framerate": "Framerate", - "Interlaced": "Interlaced", - "Anamorphic": "Anamorphic", - "Level": "Level", - "Timestamp": "Timestamp", - "Language": "Language", + "Format": "Formato", + "Path": "Ruta", + "Size": "Tama\u00f1o", + "Resolution": "Resoluci\u00f3n", + "HeaderCodecTag": "Etiqueta de Codec", + "Framerate": "Ratio de Frames", + "Interlaced": "Entrelazado", + "Anamorphic": "Anam\u00f3rfico", + "Level": "Nivel", + "Timestamp": "Marca de tiempo", + "Language": "Idioma", "Codec": "Codec", - "HeaderExtradata": "Extra Data", + "HeaderExtradata": "Datos extra", "HeaderOfflineDownloads": "Medios fuera de l\u00ednea", "HeaderOfflineDownloadsDescription": "Descargue los medios a sus dispositivos para un uso sin conexi\u00f3n.", "CloudSyncFeatureDescription": "Sincroniza tus medios en la nube para una copia de seguridad, archivado y conversi\u00f3n f\u00e1cil.", @@ -214,47 +214,47 @@ "HeaderBecomeProjectSupporter": "Consigue Emby Premiere", "LabelEmailAddress": "Direcci\u00f3n de correo", "PromoConvertRecordingsToStreamingFormat": "Convierta autom\u00e1ticamente las grabaciones a un formato f\u00e1cil de transmitir con Emby Premiere. Las grabaciones se convertir\u00e1n al vuelo a MP4 o MKV, seg\u00fan la configuraci\u00f3n del servidor Emby.", - "PlaybackTvModeRequiresEmbyPremiere": "Media playback in TV mode requires an active {0}Emby Premiere subscription{1}.", - "FeatureRequiresEmbyPremiere": "Esta caracter\u00edstica necesita una suscripci\u00f3n {0} a Emby Premiere{1}.", + "PlaybackTvModeRequiresEmbyPremiere": "La reproducci\u00f3n de medios en el modo TV requiere una suscripci\u00f3n activa a {0}Emby Premiere{1}.", + "FeatureRequiresEmbyPremiere": "Esta caracter\u00edstica necesita una suscripci\u00f3n a {0}Emby Premiere{1}.", "HeaderConvertYourRecordings": "Convierte tus grabaciones", "Record": "Grabar", - "Save": "Grabar", + "Save": "Guardar", "Edit": "Editar", - "HeaderSavePlaylist": "Save Playlist", + "HeaderSavePlaylist": "Guardar Playlist", "Latest": "\u00daltimas", "Download": "Descargar", "Downloaded": "Descargado", "Downloading": "Descargando", "Advanced": "Avanzado", - "LinkedToEmbyConnect": "Linked to Emby Connect", + "LinkedToEmbyConnect": "Enlazado a Emby Connect", "Delete": "Borrar", - "HeaderDeleteServer": "Delete Server", + "HeaderDeleteServer": "Borrar Servidor", "HeaderDeleteItem": "Borrar elemento", - "HeaderDeleteUser": "Delete User", - "DeleteServerConfirmation": "Are you sure you wish to delete this server?", - "DeleteUserConfirmation": "Are you sure you wish to delete user {0}?", + "HeaderDeleteUser": "Borrar Usuario", + "DeleteServerConfirmation": "\u00bfEst\u00e1s seguro de eliminar este servidor?", + "DeleteUserConfirmation": "\u00bfEst\u00e1s seguro de eliminar el usuario {0}?", "HeaderDeleteDevice": "Borrar Dispositivo", - "DeleteDeviceConfirmation": "Are you sure you wish to delete this device? It will reappear the next time a user signs in with it.", + "DeleteDeviceConfirmation": "\u00bfEst\u00e1s seguro de eliminar este dispositivo? Volver\u00e1 a aparecer la pr\u00f3xima vez que un usuario acceda con \u00e9l.", "ConfirmDeleteItem": "Al borrar este \u00edtem se borrar\u00e1 del sistema de archivos y de la biblioteca.", - "FollowingFilesWillBeDeleted": "The following files and folders will be deleted:", - "AreYouSureToContinue": "Are you sure you wish to continue?", + "FollowingFilesWillBeDeleted": "Los siguientes archivos y carpetas ser\u00e1n eliminados:", + "AreYouSureToContinue": "\u00bfEst\u00e1s seguro que quieres continuar?", "Refresh": "Refrescar", - "RefreshingMetadataDots": "Refreshing metadata...", - "ScanningLibraryFilesDots": "Scanning library files...", + "RefreshingMetadataDots": "Actualizando metadata...", + "ScanningLibraryFilesDots": "Escaneando archivos de biblioteca...", "AddToCollection": "A\u00f1adir a la colecci\u00f3n", - "HeaderAddToCollection": "Agregar a la colecci\u00f3n", - "HeaderNewCollection": "New Collection", - "HeaderNewPlaylist": "New Playlist", - "Create": "Create", - "AddedToValue": "Added to {0}.", - "AddedToPlayQueue": "Added to play queue.", + "HeaderAddToCollection": "Agregar a la Colecci\u00f3n", + "HeaderNewCollection": "Nueva Colecci\u00f3n", + "HeaderNewPlaylist": "Nueva Playlist", + "Create": "Crear", + "AddedToValue": "Agregado a {0}.", + "AddedToPlayQueue": "Agregado a la cola de reproducci\u00f3n.", "LabelCollection": "Colecci\u00f3n:", "Help": "Ayuda", "LabelDisplayMode": "Modo de visualizaci\u00f3n:", "Desktop": "Escritorio", "Mobile": "M\u00f3vil \/ Tablet", - "Navigation": "Navigation", - "HeaderVideoPlayback": "Video Playback", + "Navigation": "Navegaci\u00f3n", + "HeaderVideoPlayback": "Reproducci\u00f3n de V\u00eddeo", "TV": "TV", "HeaderEmbyConnect": "Emby Connect", "Seasons": "Temporadas", @@ -289,11 +289,11 @@ "HeaderAddToPlaylist": "A\u00f1adir a la lista", "Subtitles": "Subt\u00edtulos", "LabelTheme": "Tema:", - "LabelSettingsTheme": "Settings theme:", + "LabelSettingsTheme": "Opciones del tema:", "SearchForSubtitles": "B\u00fasqueda de Subt\u00edtulos", "LabelLanguage": "Idioma:", "Search": "Buscar", - "NoSubtitleSearchResultsFound": "No se han encontrado resultados.", + "NoSubtitleSearchResultsFound": "No se han encontrado resultados. \u00bfHas configurado la {0}descarga de subt\u00edtulos{1}?", "File": "Archivo", "Exit": "Salir", "Sleep": "Suspender", @@ -336,11 +336,11 @@ "HeaderViewAlbum": "Ver Album", "HeaderViewArtist": "Ver Artista", "HeaderPlayAll": "Reproducir Todo", - "PictureInPicture": "Picture in picture", + "PictureInPicture": "Imagen en Imagen (PIP)", "Fullscreen": "Pantalla completa", - "ExitFullscreen": "Exit full screen", + "ExitFullscreen": "Salir de pantalla completa", "Rewind": "Rebobinar", - "FastForward": "Fast-forward", + "FastForward": "Avance r\u00e1pido", "Remove": "Eliminar", "Rename": "Renombrar", "Queue": "En cola", @@ -348,13 +348,13 @@ "PlayAllFromHere": "Reproducir todos desde aqu\u00ed", "PlayFromBeginning": "Iniciar desde el principio", "ResumeAt": "Continuar desde {0}", - "HeaderRemoveFromPlaylist": "Remove from Playlist", - "HeaderRemoveFromCollection": "Remove from Collection", + "HeaderRemoveFromPlaylist": "Eliminar desde la Playlist", + "HeaderRemoveFromCollection": "Eliminar desde Colecci\u00f3n", "Sort": "Ordenar", "Trailer": "Tr\u00e1iler", "HeaderMarkPlayed": "Marcar como Visto", "HeaderMarkUnplayed": "Marcar como no Visto", - "HeaderGroupVersions": "Group Versions", + "HeaderGroupVersions": "Agrupar versiones", "PleaseSelectTwoItems": "Seleccione al menos dos elementos.", "HeaderConfirmRecordingCancellation": "Confirmar la cancelaci\u00f3n de la grabaci\u00f3n", "MessageConfirmRecordingCancellation": "\u00bfCancelar grabaci\u00f3n?", @@ -400,7 +400,7 @@ "Label3DFormat": "Formato 3D:", "FormatValue": "Formato: {0}", "DownloadsValue": "{0} descargas", - "HashMatch": "partido de hash", + "HashMatch": "Coincidencia de hash", "EnableExternalVideoPlayers": "Activar reproductores externos", "EnableExternalVideoPlayersHelp": "Aparecer\u00e1 un men\u00fa de reproductor externo al iniciar la reproducci\u00f3n de video.", "HeaderSpecialEpisodeInfo": "Informaci\u00f3n del episodio especial", @@ -418,8 +418,8 @@ "Links": "Enlaces", "HeaderMetadataSettings": "Ajustes de metadatos", "People": "Gente", - "LabelMetadataDownloadLanguage": "Idioma preferido visualizado", - "LabelImageDownloadLanguage": "Preferred image download language:", + "LabelMetadataDownloadLanguage": "Idioma preferido de descarga de metadata", + "LabelImageDownloadLanguage": "Idioma preferido para descarga de imagen:", "LabelLockItemToPreventChanges": "Bloquear este \u00edtem para evitar futuros cambios", "MessageLeaveEmptyToInherit": "Dejar en blanco para heredar la configuraci\u00f3n de un elemento principal, o el valor predeterminado global.", "LabelCountry": "Pa\u00eds:", @@ -465,12 +465,12 @@ "PackageInstallFailed": "{0} instalaci\u00f3n fallida.", "PackageInstallCancelled": "{0} instalaci\u00f3n cancelada.", "SeriesYearToPresent": "{0} - Actualidad", - "OneDevice": "1 Device", - "DeviceCountValue": "{0} Devices", - "OneUser": "1 User", - "UserCountValue": "{0} Users", - "OneLibrary": "1 Library", - "LibraryCountValue": "{0} Libraries", + "OneDevice": "Un Dispositivo", + "DeviceCountValue": "{0} Dispositivos", + "OneUser": "Un Usuario", + "UserCountValue": "{0} Usuarios", + "OneLibrary": "Una Biblioteca", + "LibraryCountValue": "{0} Bibliotecas", "ValueOneItem": "1 elemento", "ValueOneEpisode": "1 episodio", "ValueEpisodeCount": "{0} episodios", @@ -533,7 +533,7 @@ "HeaderLearnMore": "Aprende m\u00e1s", "SeriesSettings": "Ajustes de series", "HeaderRecordingOptions": "Ajustes de grabaci\u00f3n", - "HeaderDoNotRecord": "Do not record", + "HeaderDoNotRecord": "No grabar", "HeaderSeriesOptions": "Opciones de Series", "Layout": "Dise\u00f1o", "Channels": "Canales", @@ -567,9 +567,9 @@ "Music": "M\u00fasica", "Kids": "Infantil", "MoreFromValue": "M\u00e1s de {0}", - "BirthPlaceValue": "Birth place: {0}", - "DiedValue": "Died: {0}", - "BornValue": "Born: {0}", + "BirthPlaceValue": "Lugar de nacimiento: {0}", + "DiedValue": "Muri\u00f3: {0}", + "BornValue": "Nacido: {0}", "EnableColorCodedBackgrounds": "Habilitar fondos codificados por color", "SortChannelsBy": "Ordenar canales por:", "RecentlyWatched": "Vistos recientemente", @@ -620,10 +620,10 @@ "Quality": "Calidad", "Auto": "Auto", "AndroidUnlockRestoreHelp": "Para restaurar su compra anterior, aseg\u00farese de iniciar sesi\u00f3n en el dispositivo con la misma cuenta de Google (o Amazon) que originalmente realiz\u00f3 la compra. Aseg\u00farese de que la tienda de aplicaciones est\u00e9 habilitada y no restringida por ning\u00fan control parental, y aseg\u00farese de tener una conexi\u00f3n a Internet activa. Solo tendr\u00e1s que hacer esto una vez para restaurar tu compra anterior.", - "HeaderAspectRatio": "Aspect Ratio", + "HeaderAspectRatio": "Relaci\u00f3n de aspecto", "Original": "Original", "Fill": "Llenar", - "Cover": "Cover", + "Cover": "Portada", "MessageNoServersAvailableToConnect": "No hay servidores disponibles para conectarse. Si te han invitado a unirte a un servidor, aseg\u00farate de aceptar aqu\u00ed abajo o haciendo clic en el enlace del correo.", "MessagePlayAccessRestricted": "La reproducci\u00f3n de este contenido est\u00e1 actualmente restringida. P\u00f3ngase en contacto con su administrador del servidor Emby para obtener m\u00e1s informaci\u00f3n.", "Accept": "Aceptar", @@ -641,8 +641,8 @@ "HeaderActiveRecordings": "Grabaciones activas", "HeaderLatestRecordings": "\u00daltimas Grabaciones", "LabelConvertTo": "Convertir a:", - "LabelDownloadTo": "Download to:", - "HeaderDownloadToDots": "Download to...", + "LabelDownloadTo": "Descargar en:", + "HeaderDownloadToDots": "Descargar en...", "Next": "Siguiente", "LabelSource": "Fuente:", "LabelVersion": "Versi\u00f3n:", @@ -652,8 +652,8 @@ "HeaderPlayNextUp": "Reproducir a Continuaci\u00f3n", "HeaderLatestFrom": "Lo \u00faltimo de {0}", "LabelHomeScreenSectionValue": "Secci\u00f3n de la pantalla de inicio {0}:", - "PasswordResetComplete": "The password has been reset.", - "PasswordSaved": "Password saved.", + "PasswordResetComplete": "La contrase\u00f1a ha sido restablecida.", + "PasswordSaved": "Contrase\u00f1a guardada.", "SettingsSaved": "Configuraci\u00f3n guardada.", "Upcoming": "Pr\u00f3ximo", "None": "Nada", @@ -669,10 +669,10 @@ "HeaderLibraryOrder": "Orden de la Biblioteca", "HideWatchedContentFromLatestMedia": "Esconder medios vistos de los medios m\u00e1s recientes", "HeaderOnNow": "Transmitiendo Ahora", - "HeaderForKids": "For Kids", + "HeaderForKids": "Para ni\u00f1os", "HeaderPlaybackError": "Error de reproducci\u00f3n", "PlaybackErrorNotAllowed": "No est\u00e1s autorizado a reproducir este contenido. Contacta con el administrador para m\u00e1s detalles.", - "RateLimitExceeded": "Your account has exceeded the maximum streaming limit set by your Emby Server administrator. Please contact them for assistance.", + "RateLimitExceeded": "Tu cuenta ha excedido el limite de transmisi\u00f3n m\u00e1ximo establecido por el administrador de tu Servidor Emby. Por favor, contacta con \u00e9l para solicitar asistencia.", "PlaybackErrorNoCompatibleStream": "No tienes disponible ninguna calidad por ahora. Int\u00e9ntalo m\u00e1s tarde o contacta con el administrador para m\u00e1s detalles.", "PlaybackErrorPlaceHolder": "El contenido elegido no se puede reproducir desde este dispositivo.", "Guide": "Gu\u00eda", @@ -684,7 +684,7 @@ "LabelSelectFolderGroups": "Agrupar contenido autom\u00e1ticamente desde las siguientes carpetas en vistas como Pel\u00edculas, M\u00fasica y Series:", "LabelSelectFolderGroupsHelp": "Las carpetas sin seleccionar se mostrar\u00e1n ellas mismas en su propia vista.", "Mute": "Mute", - "Unmute": "Unmute", + "Unmute": "No mute", "Folders": "Carpetas", "DisplayInOtherHomeScreenSections": "Mostrar en las secciones de la pantalla de inicio, como los \u00faltimos medios y continuar viendo", "DisplayInMyMedia": "Mostrar en la pantalla de inicio", @@ -700,7 +700,7 @@ "HeaderTermsOfPurchase": "T\u00e9rminos de compra", "PrivacyPolicy": "Pol\u00edtica de privacidad", "TermsOfUse": "T\u00e9rminos de uso", - "HeaderRepeatMode": "Repeat Mode", + "HeaderRepeatMode": "Modo de repetici\u00f3n", "RepeatOne": "Repetir uno", "RepeatAll": "Repetir todo", "LabelDefaultScreen": "Pantalla predeterminada:", @@ -708,7 +708,7 @@ "Yesterday": "Ayer", "Yes": "Si", "No": "No", - "HeaderScanLibraryFiles": "Scan Library Files", + "HeaderScanLibraryFiles": "Escanear archivos de Biblioteca", "LiveTV": "TV en vivo", "Schedule": "Horario", "Recordings": "Grabaciones", @@ -741,10 +741,10 @@ "HeaderEmbyAccountRemoved": "Cuenta de Emby eliminada", "MessageEmbyAccontRemoved": "Se ha eliminado la cuenta de Emby para este usuario.", "HeaderInvitationSent": "Invitaci\u00f3n enviada", - "Offline": "Offline", + "Offline": "Fuera de l\u00ednea", "HeaderSignUp": "Registrarse", - "ServerDownloadMessage": "To download and install the free Emby Server visit {0}", - "ServerDownloadMessageWithoutLink": "To download and install the free Emby Server visit the Emby website.", + "ServerDownloadMessage": "Para descargar e instalar el servidor gratuito Emby, visita {0}", + "ServerDownloadMessageWithoutLink": "Para descargar e instalar el servidor gratuito Emby, visita su sitio web.", "MessageInvitationSentToUser": "Se le ha enviado un correo a {0}, invit\u00e1ndolo a que acepte lo que has compartido.", "MessageInvitationSentToNewUser": "Se le ha enviado un correo a {0}, invit\u00e1ndolo a que se registre en Emby.", "GuestUserNotFound": "Usuario no encontrado. Aseg\u00farese de que el nombre es correcto y vuelva a intentarlo o intente ingresar su direcci\u00f3n de correo electr\u00f3nico.", @@ -774,7 +774,7 @@ "Large": "Grande", "ExtraLarge": "Extragrande", "Forced": "Forzado", - "External": "External", + "External": "Externo", "OnlyForcedSubtitles": "S\u00f3lo subt\u00edtulos forzados", "AlwaysPlaySubtitles": "Mostrar siempre subt\u00edtulos", "DefaultSubtitlesHelp": "Los subt\u00edtulos se activan en funci\u00f3n de los ajustes por defecto y etiquetas en los metadatos integrados. Los ajustes de idioma se tienen en cuenta cuando hay varias opciones disponibles.", @@ -827,8 +827,8 @@ "Browse": "Navegar", "HeaderUploadImage": "Subir imagen", "HeaderAddUpdateImage": "A\u00f1adir\/Actualizar imagen", - "HeaderShowFields": "Show Fields", - "LabelView": "View:", + "HeaderShowFields": "Mostrar campos", + "LabelView": "Vista:", "LabelImageType": "Tipo de imagen:", "Upload": "Subir", "Primary": "Principal", @@ -864,7 +864,7 @@ "AllowSeasonalThemes": "Permitir temas estacionales autom\u00e1ticos.", "AllowSeasonalThemesHelp": "Si est\u00e1 habilitado, los temas estacionales ocasionalmente anular\u00e1n la configuraci\u00f3n del tema.", "AutoBasedOnLanguageSetting": "Autom\u00e1tico (basado en la configuraci\u00f3n de idioma)", - "SameAsMainTheme": "Same as main theme", + "SameAsMainTheme": "El mismo que el tema principal", "LabelDateTimeLocale": "Lugar de fecha y hora:", "DirectorValue": "Director: {0}", "DirectorsValue": "Directores: {0}", @@ -875,8 +875,8 @@ "LabelVideo": "V\u00eddeo:", "LabelSubtitles": "Subt\u00edtulos:", "Off": "Apagado", - "Title": "Title", - "Year": "Year", + "Title": "T\u00edtulo", + "Year": "A\u00f1o", "Filters": "Filtros", "Unplayed": "No reproducido", "LabelTVHomeScreen": "Pantalla de inicio del modo TV:", @@ -900,50 +900,52 @@ "HeaderFavoriteSongs": "Canciones Favoritas", "Ascending": "Ascendente", "Descending": "Descendente", - "HeaderColorPrimaries": "Color Primaries", - "HeaderColorSpace": "Color Space", - "HeaderColorTransfer": "Color Transfer", - "HeaderVideoRange": "Video Range", + "HeaderColorPrimaries": "Color primario", + "HeaderColorSpace": "Espacio de color", + "HeaderColorTransfer": "Color de Transferencia", + "HeaderVideoRange": "Rango de v\u00eddeo", "SeriesDisplayOrderHelp": "Ordenar episodios por fecha de emisi\u00f3n, orden de dvd o numeraci\u00f3n absoluta.", - "LabelVerticalPositionFromBottom": "Vertical position (from bottom):", + "LabelVerticalPositionFromBottom": "Posici\u00f3n vertical (Desde abajo):", "HeaderFavoritePeople": "Gente favorita", "MultiSelect": "Selecci\u00f3n-M\u00faltiple", "HeaderSignOut": "Cerrar sesi\u00f3n", "HeaderSelectServer": "Elegir servidor", - "HeaderChangeServer": "Change Server", + "HeaderChangeServer": "Cambiar Servidor", "HeaderLoginSettings": "Configuraci\u00f3n de inicio de sesi\u00f3n", "LabelRememberLogin": "Recuerde iniciar sesi\u00f3n:", "LabelAutomaticallySignOut": "Cerrar sesi\u00f3n autom\u00e1ticamente:", "BetaTesterMessage": "\u00a1Gracias por ser un beta tester de Emby! Por favor, deje sus comentarios en el {0} \u00c1rea de Pruebas de la Comunidad Emby {1}.", "HardwareAccelerated": "Hardware acelerado", "Software": "Software", - "Metadata": "Metadata", - "HeaderMediaInfo": "Media Info", - "Locked": "Locked", - "HeaderSplitVersionsApart": "Split Versions Apart", - "Any": "Any", - "Admin": "Admin", - "LabelLocked": "Locked:", - "LabelTrailers": "Trailers:", + "Metadata": "Metadatos", + "HeaderMediaInfo": "Informaci\u00f3n Medios", + "Locked": "Bloqueado", + "HeaderSplitVersionsApart": "Dividir versiones aparte", + "Any": "Cualquiera", + "Admin": "Administrador", + "LabelLocked": "Bloqueado:", + "LabelTrailers": "Tr\u00e1ilers:", "LabelExtras": "Extras:", - "LabelThemeSongs": "Theme songs:", - "LabelThemeVideos": "Theme videos:", - "HeaderReadMore": "Read More", - "HeaderReadLess": "Read Less", - "CustomRatingHelp": "A custom rating is used for parental control evaluations but is not displayed. The parental rating field is still displayed.", - "KeepUpToHelp": "Recordings over the limit are deleted when the next recording begins. Oldest recordings are deleted first, by date added.", - "NoItemsMatchingFound": "No items matching your search criteria were found.", - "TwoSearchCharsRequired": "Please enter at least two search characters.", - "PreventPlaybackContinuing": "Prevent playback from continuing indefinitely by periodically prompting for user input.", - "PromptStillWatching": "Enable 'Are You Still Watching?' prompt", - "HeaderMissingMetadata": "Missing Metadata", - "HeaderIncludedIn": "Included In", - "EmbyConnectUserAlreadyLinked": "The Emby Connect user is already linked to another user on this server.", - "VideoFilesWillBeConvertedTo": "Converted videos will be saved as {0}.", - "VideoWillBeConvertedTo": "Video streams will be converted to {0}, or copied from the original file if they are already {0} and the quality fits within the conversion options.", - "VideoWillBeConvertedToOrCopied": "Video streams will be converted to {0}, or copied from the original file if they are any of ({1}), and the quality fits within the conversion options.", - "AudioWillBeConvertedTo": "Audio streams will be converted to {0}, or copied from the original file if they are already {0} and the quality fits within the conversion options.", - "AudioWillBeConvertedToOrCopied": "Audio streams will be converted to {0}, or copied from the original file if they are any of ({1}), and the quality fits within the conversion options.", - "HeaderSpecialKeys": "Special Keys", - "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:" + "LabelThemeSongs": "Canciones de Tema:", + "LabelThemeVideos": "V\u00eddeos de Tema:", + "HeaderReadMore": "Leer m\u00e1s", + "HeaderReadLess": "Leer menos", + "CustomRatingHelp": "Una valoraci\u00f3n personalizada es usada para las evaluaciones de el control parental pero no se muestra. El campo de la evaluaci\u00f3n parental se mantiene visible.", + "KeepUpToHelp": "Las grabaciones por encima del l\u00edmite se eliminan cuando comienza la pr\u00f3xima grabaci\u00f3n. Las grabaciones m\u00e1s antiguas se eliminan primero, por fecha de adici\u00f3n.", + "NoItemsMatchingFound": "No se encontraron elementos que coincidan con tus criterios de b\u00fasqueda.", + "TwoSearchCharsRequired": "Por favor, escribe al menos dos caracteres para buscar.", + "PreventPlaybackContinuing": "Evita que la reproducci\u00f3n contin\u00fae indefinidamente solicitando peri\u00f3dicamente la entrada del usuario.", + "PromptStillWatching": "Habilitar '\u00bfQuieres seguir viendo?'", + "HeaderMissingMetadata": "Metadatos faltantes", + "HeaderIncludedIn": "Incluido en", + "EmbyConnectUserAlreadyLinked": "El usuario de Emby Connect ya esta enlazado a otro usuario en este servidor.", + "VideoFilesWillBeConvertedTo": "S\u00f3lo se convertir\u00e1n los v\u00eddeos guardados como {0}.", + "VideoWillBeConvertedTo": "Las transmisiones del v\u00eddeo ser\u00e1n convertidas a {0}, o copiadas desde el archivo original si esta preparado {0} y la calidad se ajusta a las opciones de conversi\u00f3n.", + "VideoWillBeConvertedToOrCopied": "Las transmisiones ser\u00e1n convertidas a {0}, o copiadas desde el archivo original si alguno de ellos de ({1}), y la calidad se ajusta a las opciones de conversi\u00f3n.", + "AudioWillBeConvertedTo": "Las transmisiones del audio ser\u00e1n convertidas a {0}, o copiadas desde el archivo original si esta preparado {0} y la calidad se ajusta a las opciones de conversi\u00f3n.", + "AudioWillBeConvertedToOrCopied": "Las transmisiones de audio ser\u00e1n convertidas a {0}, o copiadas desde el archivo original si alguno de ellos de ({1}), y la calidad se ajusta a las opciones de conversi\u00f3n.", + "HeaderSpecialKeys": "Teclas especiales", + "FollowingSpecialKeys": "Las siguientes teclas especiales son soportadas en la mayor\u00eda de teclados y mandos a distancia:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/et-EE.json b/strings/et-EE.json index 5e3ca995..837d647b 100644 --- a/strings/et-EE.json +++ b/strings/et-EE.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Audio streams will be converted to {0}, or copied from the original file if they are already {0} and the quality fits within the conversion options.", "AudioWillBeConvertedToOrCopied": "Audio streams will be converted to {0}, or copied from the original file if they are any of ({1}), and the quality fits within the conversion options.", "HeaderSpecialKeys": "Special Keys", - "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:" + "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/fi.json b/strings/fi.json index 578c3661..c7b25a56 100644 --- a/strings/fi.json +++ b/strings/fi.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Audio streams will be converted to {0}, or copied from the original file if they are already {0} and the quality fits within the conversion options.", "AudioWillBeConvertedToOrCopied": "Audio streams will be converted to {0}, or copied from the original file if they are any of ({1}), and the quality fits within the conversion options.", "HeaderSpecialKeys": "Special Keys", - "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:" + "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/fr-CA.json b/strings/fr-CA.json index 7d1f81a1..7629331e 100644 --- a/strings/fr-CA.json +++ b/strings/fr-CA.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Les flux audio seront convertis en {0} ou copi\u00e9s depuis le fichier original s\u2019ils sont d\u00e9j\u00e0 en {0} et que la qualit\u00e9 correspond aux options de conversion.", "AudioWillBeConvertedToOrCopied": "Les flux audio seront convertis en {0} ou copi\u00e9s depuis le fichier original s\u2019ils font partie de {1} et que la qualit\u00e9 correspond aux options de conversion.", "HeaderSpecialKeys": "Touches Sp\u00e9ciales", - "FollowingSpecialKeys": "Les touches sp\u00e9ciales suivantes sont support\u00e9s sur la plupart des claviers et des t\u00e9l\u00e9commandes :" + "FollowingSpecialKeys": "Les touches sp\u00e9ciales suivantes sont support\u00e9s sur la plupart des claviers et des t\u00e9l\u00e9commandes :", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/fr.json b/strings/fr.json index d3cd755c..db6a6930 100644 --- a/strings/fr.json +++ b/strings/fr.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Les flux audio seront convertis en {0} ou copi\u00e9s depuis le fichier original s\u2019ils sont d\u00e9j\u00e0 en {0} et que la qualit\u00e9 correspond aux options de conversion.", "AudioWillBeConvertedToOrCopied": "Les flux audio seront convertis en {0} ou copi\u00e9s depuis le fichier original s\u2019ils font partie de {1} et que la qualit\u00e9 correspond aux options de conversion.", "HeaderSpecialKeys": "Touches sp\u00e9ciales", - "FollowingSpecialKeys": "Les touches sp\u00e9ciales suivantes sont prises en charge sur la plupart des claviers et des t\u00e9l\u00e9commandes\u00a0:" + "FollowingSpecialKeys": "Les touches sp\u00e9ciales suivantes sont prises en charge sur la plupart des claviers et des t\u00e9l\u00e9commandes\u00a0:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/gsw.json b/strings/gsw.json index 90a1fb77..99738461 100644 --- a/strings/gsw.json +++ b/strings/gsw.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Audio streams will be converted to {0}, or copied from the original file if they are already {0} and the quality fits within the conversion options.", "AudioWillBeConvertedToOrCopied": "Audio streams will be converted to {0}, or copied from the original file if they are any of ({1}), and the quality fits within the conversion options.", "HeaderSpecialKeys": "Special Keys", - "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:" + "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/he.json b/strings/he.json index 163c01e1..17639d5b 100644 --- a/strings/he.json +++ b/strings/he.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Audio streams will be converted to {0}, or copied from the original file if they are already {0} and the quality fits within the conversion options.", "AudioWillBeConvertedToOrCopied": "Audio streams will be converted to {0}, or copied from the original file if they are any of ({1}), and the quality fits within the conversion options.", "HeaderSpecialKeys": "Special Keys", - "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:" + "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/hr.json b/strings/hr.json index a7349fe6..e69fe0ce 100644 --- a/strings/hr.json +++ b/strings/hr.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Audio streams will be converted to {0}, or copied from the original file if they are already {0} and the quality fits within the conversion options.", "AudioWillBeConvertedToOrCopied": "Audio streams will be converted to {0}, or copied from the original file if they are any of ({1}), and the quality fits within the conversion options.", "HeaderSpecialKeys": "Special Keys", - "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:" + "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/hu.json b/strings/hu.json index eca8cbd0..7803d23d 100644 --- a/strings/hu.json +++ b/strings/hu.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Audio streams will be converted to {0}, or copied from the original file if they are already {0} and the quality fits within the conversion options.", "AudioWillBeConvertedToOrCopied": "Audio streams will be converted to {0}, or copied from the original file if they are any of ({1}), and the quality fits within the conversion options.", "HeaderSpecialKeys": "Special Keys", - "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:" + "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/id.json b/strings/id.json index 4706df71..84103921 100644 --- a/strings/id.json +++ b/strings/id.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Audio streams will be converted to {0}, or copied from the original file if they are already {0} and the quality fits within the conversion options.", "AudioWillBeConvertedToOrCopied": "Audio streams will be converted to {0}, or copied from the original file if they are any of ({1}), and the quality fits within the conversion options.", "HeaderSpecialKeys": "Special Keys", - "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:" + "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/it.json b/strings/it.json index c255af89..f2c9dd09 100644 --- a/strings/it.json +++ b/strings/it.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Audio streams will be converted to {0}, or copied from the original file if they are already {0} and the quality fits within the conversion options.", "AudioWillBeConvertedToOrCopied": "Audio streams will be converted to {0}, or copied from the original file if they are any of ({1}), and the quality fits within the conversion options.", "HeaderSpecialKeys": "Special Keys", - "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:" + "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/ja.json b/strings/ja.json index 99eba9c7..d7e0ea41 100644 --- a/strings/ja.json +++ b/strings/ja.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Audio streams will be converted to {0}, or copied from the original file if they are already {0} and the quality fits within the conversion options.", "AudioWillBeConvertedToOrCopied": "Audio streams will be converted to {0}, or copied from the original file if they are any of ({1}), and the quality fits within the conversion options.", "HeaderSpecialKeys": "Special Keys", - "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:" + "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/kk.json b/strings/kk.json index 63aac67c..08bd8218 100644 --- a/strings/kk.json +++ b/strings/kk.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Audio streams will be converted to {0}, or copied from the original file if they are already {0} and the quality fits within the conversion options.", "AudioWillBeConvertedToOrCopied": "Audio streams will be converted to {0}, or copied from the original file if they are any of ({1}), and the quality fits within the conversion options.", "HeaderSpecialKeys": "Special Keys", - "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:" + "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/ko.json b/strings/ko.json index a514619c..61be3376 100644 --- a/strings/ko.json +++ b/strings/ko.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Audio streams will be converted to {0}, or copied from the original file if they are already {0} and the quality fits within the conversion options.", "AudioWillBeConvertedToOrCopied": "Audio streams will be converted to {0}, or copied from the original file if they are any of ({1}), and the quality fits within the conversion options.", "HeaderSpecialKeys": "Special Keys", - "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:" + "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/lt-LT.json b/strings/lt-LT.json index 49570ba5..17e329f8 100644 --- a/strings/lt-LT.json +++ b/strings/lt-LT.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Audio streams will be converted to {0}, or copied from the original file if they are already {0} and the quality fits within the conversion options.", "AudioWillBeConvertedToOrCopied": "Audio streams will be converted to {0}, or copied from the original file if they are any of ({1}), and the quality fits within the conversion options.", "HeaderSpecialKeys": "Special Keys", - "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:" + "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/ms.json b/strings/ms.json index c0cc6e60..c7891fd2 100644 --- a/strings/ms.json +++ b/strings/ms.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Audio streams will be converted to {0}, or copied from the original file if they are already {0} and the quality fits within the conversion options.", "AudioWillBeConvertedToOrCopied": "Audio streams will be converted to {0}, or copied from the original file if they are any of ({1}), and the quality fits within the conversion options.", "HeaderSpecialKeys": "Special Keys", - "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:" + "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/nb.json b/strings/nb.json index 55678bfc..4065d84d 100644 --- a/strings/nb.json +++ b/strings/nb.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Audio streams will be converted to {0}, or copied from the original file if they are already {0} and the quality fits within the conversion options.", "AudioWillBeConvertedToOrCopied": "Audio streams will be converted to {0}, or copied from the original file if they are any of ({1}), and the quality fits within the conversion options.", "HeaderSpecialKeys": "Special Keys", - "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:" + "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/nl.json b/strings/nl.json index 6d9274cf..4ba1aa60 100644 --- a/strings/nl.json +++ b/strings/nl.json @@ -253,8 +253,8 @@ "LabelDisplayMode": "Weergave mode:", "Desktop": "Desktop", "Mobile": "Mobiel \/ Tablet", - "Navigation": "Navigation", - "HeaderVideoPlayback": "Video Playback", + "Navigation": "Navigatie", + "HeaderVideoPlayback": "Video afspelen", "TV": "TV", "HeaderEmbyConnect": "Emby Connect", "Seasons": "Seizoenen", @@ -465,12 +465,12 @@ "PackageInstallFailed": "{0} installatie is mislukt.", "PackageInstallCancelled": "{0} installatie geannuleerd.", "SeriesYearToPresent": "{0} - Heden", - "OneDevice": "1 Device", - "DeviceCountValue": "{0} Devices", - "OneUser": "1 User", - "UserCountValue": "{0} Users", - "OneLibrary": "1 Library", - "LibraryCountValue": "{0} Libraries", + "OneDevice": "Apparaat", + "DeviceCountValue": "{0} Apparaten", + "OneUser": "1 Gebruiker", + "UserCountValue": "{0} Gebruikers", + "OneLibrary": "1 Bibliotheek", + "LibraryCountValue": "{0} Bibliotheken", "ValueOneItem": "1 item", "ValueOneEpisode": "1 aflevering", "ValueEpisodeCount": "{0} afleveringen", @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Audiostreams worden geconverteerd naar {0} of gekopieerd uit het oorspronkelijke bestand als ze al {0} zijn en de kwaliteit past binnen de conversieopties.", "AudioWillBeConvertedToOrCopied": "Audiostreams worden geconverteerd naar {0} of gekopieerd uit het originele bestand als ze een van ({1}) zijn en de kwaliteit past binnen de conversieopties.", "HeaderSpecialKeys": "Speciale toetsen", - "FollowingSpecialKeys": "De volgende speciale toetsen worden ondersteund op de meeste toetsenborden en afstandsbedieningen:" + "FollowingSpecialKeys": "De volgende speciale toetsen worden ondersteund op de meeste toetsenborden en afstandsbedieningen:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/pl.json b/strings/pl.json index 835737b0..f03f9e7a 100644 --- a/strings/pl.json +++ b/strings/pl.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Audio streams will be converted to {0}, or copied from the original file if they are already {0} and the quality fits within the conversion options.", "AudioWillBeConvertedToOrCopied": "Audio streams will be converted to {0}, or copied from the original file if they are any of ({1}), and the quality fits within the conversion options.", "HeaderSpecialKeys": "Special Keys", - "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:" + "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/pt-BR.json b/strings/pt-BR.json index 2dce895b..9e0b320a 100644 --- a/strings/pt-BR.json +++ b/strings/pt-BR.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "A transmiss\u00e3o de \u00e1udio ser\u00e1 convertida para {0}, ou copiada do arquivo original se j\u00e1 est\u00e1 {0} e a qualidade estiver de acordo as op\u00e7\u00f5es de convers\u00e3o", "AudioWillBeConvertedToOrCopied": "A transmiss\u00e3o de v\u00eddeo ser\u00e1 convertida para {0}, ou copiada do arquivo original se \u00e9 qualquer uma de ({1}) e a qualidade estiver de acordo as op\u00e7\u00f5es de convers\u00e3o.", "HeaderSpecialKeys": "Teclas especiais", - "FollowingSpecialKeys": "As seguintes teclas especiais s\u00e3o suportadas na maioria dos teclados e controles remotos:" + "FollowingSpecialKeys": "As seguintes teclas especiais s\u00e3o suportadas na maioria dos teclados e controles remotos:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/pt-PT.json b/strings/pt-PT.json index 9269b380..7e312a57 100644 --- a/strings/pt-PT.json +++ b/strings/pt-PT.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Audio streams will be converted to {0}, or copied from the original file if they are already {0} and the quality fits within the conversion options.", "AudioWillBeConvertedToOrCopied": "Audio streams will be converted to {0}, or copied from the original file if they are any of ({1}), and the quality fits within the conversion options.", "HeaderSpecialKeys": "Special Keys", - "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:" + "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/ro.json b/strings/ro.json index 4228a71f..06414473 100644 --- a/strings/ro.json +++ b/strings/ro.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Audio streams will be converted to {0}, or copied from the original file if they are already {0} and the quality fits within the conversion options.", "AudioWillBeConvertedToOrCopied": "Audio streams will be converted to {0}, or copied from the original file if they are any of ({1}), and the quality fits within the conversion options.", "HeaderSpecialKeys": "Special Keys", - "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:" + "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/ru.json b/strings/ru.json index 7afaa721..1ec093e9 100644 --- a/strings/ru.json +++ b/strings/ru.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Audio streams will be converted to {0}, or copied from the original file if they are already {0} and the quality fits within the conversion options.", "AudioWillBeConvertedToOrCopied": "Audio streams will be converted to {0}, or copied from the original file if they are any of ({1}), and the quality fits within the conversion options.", "HeaderSpecialKeys": "Special Keys", - "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:" + "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/sk.json b/strings/sk.json index ef464c1b..6becc061 100644 --- a/strings/sk.json +++ b/strings/sk.json @@ -253,8 +253,8 @@ "LabelDisplayMode": "Re\u017eim zobrazenia:", "Desktop": "Stoln\u00fd po\u010d\u00edta\u010d", "Mobile": "Mobil\/Tablet", - "Navigation": "Navigation", - "HeaderVideoPlayback": "Video Playback", + "Navigation": "Navig\u00e1cia", + "HeaderVideoPlayback": "Prehr\u00e1vanie videa", "TV": "TV", "HeaderEmbyConnect": "Emby Connect", "Seasons": "Sez\u00f3ny", @@ -465,12 +465,12 @@ "PackageInstallFailed": "{0} in\u0161tal\u00e1cia zlyhala.", "PackageInstallCancelled": "{0} in\u0161tal\u00e1cia zru\u0161en\u00e1.", "SeriesYearToPresent": "{0} - S\u00fa\u010dasnos\u0165", - "OneDevice": "1 Device", - "DeviceCountValue": "{0} Devices", - "OneUser": "1 User", - "UserCountValue": "{0} Users", - "OneLibrary": "1 Library", - "LibraryCountValue": "{0} Libraries", + "OneDevice": "1 zariadenie", + "DeviceCountValue": "{0} zariadenia", + "OneUser": "1 pou\u017e\u00edvate\u013e", + "UserCountValue": "{0} pou\u017e\u00edvatelia", + "OneLibrary": "1 kni\u017enica", + "LibraryCountValue": "{0} kni\u017enice", "ValueOneItem": "1 polo\u017eka", "ValueOneEpisode": "1 epiz\u00f3da", "ValueEpisodeCount": "{0} epiz\u00f3d", @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Zvukov\u00e9 streamy sa skonvertuj\u00fa do {0} alebo sa skop\u00edruj\u00fa z p\u00f4vodn\u00e9ho s\u00faboru, ak u\u017e s\u00fa {0} a kvalita odpoved\u00e1 mo\u017enostiam konverzie.", "AudioWillBeConvertedToOrCopied": "Zvukov\u00e9 streamy sa skonvertuj\u00fa do {0} alebo sa skop\u00edruj\u00fa z p\u00f4vodn\u00e9ho s\u00faboru, ak s\u00fa z ({1}), a kvalita odpoved\u00e1 mo\u017enostiam konverzie.", "HeaderSpecialKeys": "\u0160peci\u00e1lne kl\u00e1vesy", - "FollowingSpecialKeys": "Na v\u00e4\u010d\u0161ine kl\u00e1vesn\u00edc a dia\u013ekov\u00fdch ovl\u00e1da\u010doch s\u00fa podporovan\u00e9 tieto \u0161peci\u00e1lne kl\u00e1vesy:" + "FollowingSpecialKeys": "Na v\u00e4\u010d\u0161ine kl\u00e1vesn\u00edc a dia\u013ekov\u00fdch ovl\u00e1da\u010doch s\u00fa podporovan\u00e9 tieto \u0161peci\u00e1lne kl\u00e1vesy:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/sl-SI.json b/strings/sl-SI.json index 8f5c5818..12e3ec50 100644 --- a/strings/sl-SI.json +++ b/strings/sl-SI.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Audio streams will be converted to {0}, or copied from the original file if they are already {0} and the quality fits within the conversion options.", "AudioWillBeConvertedToOrCopied": "Audio streams will be converted to {0}, or copied from the original file if they are any of ({1}), and the quality fits within the conversion options.", "HeaderSpecialKeys": "Special Keys", - "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:" + "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/sv.json b/strings/sv.json index ed9892d3..49a557eb 100644 --- a/strings/sv.json +++ b/strings/sv.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Ljudstr\u00f6mmar konverteras till {0} eller kopieras fr\u00e5n originalfilen om de redan \u00e4r {0} och kvaliteten passar in i konverteringsalternativen.", "AudioWillBeConvertedToOrCopied": "Ljudstr\u00f6mmar konverteras till {0} eller kopieras fr\u00e5n originalfilen om de \u00e4r n\u00e5gon av ({1}) och kvaliteten passar in i konverteringsalternativen.", "HeaderSpecialKeys": "Specialtangenter", - "FollowingSpecialKeys": "F\u00f6ljande specialtangenter st\u00f6ds p\u00e5 de flesta tangentbord och fj\u00e4rrkontroller:" + "FollowingSpecialKeys": "F\u00f6ljande specialtangenter st\u00f6ds p\u00e5 de flesta tangentbord och fj\u00e4rrkontroller:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/tr.json b/strings/tr.json index 04993a37..eb3c8083 100644 --- a/strings/tr.json +++ b/strings/tr.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Audio streams will be converted to {0}, or copied from the original file if they are already {0} and the quality fits within the conversion options.", "AudioWillBeConvertedToOrCopied": "Audio streams will be converted to {0}, or copied from the original file if they are any of ({1}), and the quality fits within the conversion options.", "HeaderSpecialKeys": "Special Keys", - "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:" + "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/uk.json b/strings/uk.json index 071eea6b..529cc69f 100644 --- a/strings/uk.json +++ b/strings/uk.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Audio streams will be converted to {0}, or copied from the original file if they are already {0} and the quality fits within the conversion options.", "AudioWillBeConvertedToOrCopied": "Audio streams will be converted to {0}, or copied from the original file if they are any of ({1}), and the quality fits within the conversion options.", "HeaderSpecialKeys": "Special Keys", - "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:" + "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/vi.json b/strings/vi.json index ccbc6cbf..0d4c4062 100644 --- a/strings/vi.json +++ b/strings/vi.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Audio streams will be converted to {0}, or copied from the original file if they are already {0} and the quality fits within the conversion options.", "AudioWillBeConvertedToOrCopied": "Audio streams will be converted to {0}, or copied from the original file if they are any of ({1}), and the quality fits within the conversion options.", "HeaderSpecialKeys": "Special Keys", - "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:" + "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/zh-CN.json b/strings/zh-CN.json index 85acaaf2..4d5ea447 100644 --- a/strings/zh-CN.json +++ b/strings/zh-CN.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "\u97f3\u9891\u6d41\u5c06\u88ab\u8f6c\u6362\u4e3a{0}\uff0c\u6216\u4ece\u539f\u59cb\u6587\u4ef6\u590d\u5236\uff0c\u5982\u679c\u4ed6\u4eec\u5df2\u7ecf\u662f{0}\u548c\u8d28\u91cf\u7b26\u5408\u8f6c\u6362\u9009\u9879\u3002", "AudioWillBeConvertedToOrCopied": "\u97f3\u9891\u6d41\u5c06\u88ab\u8f6c\u6362\u4e3a{0}\uff0c\u6216\u8005\u4ece\u539f\u59cb\u6587\u4ef6\u4e2d\u590d\u5236(\u5982\u679c\u5b83\u4eec\u662f{1})\uff0c\u5e76\u4e14\u8d28\u91cf\u7b26\u5408\u8f6c\u6362\u9009\u9879\u3002", "HeaderSpecialKeys": "\u7279\u6b8a\u952e", - "FollowingSpecialKeys": "\u5927\u591a\u6570\u952e\u76d8\u548c\u9065\u63a7\u5668\u5747\u652f\u6301\u4ee5\u4e0b\u7279\u6b8a\u952e\uff1a" + "FollowingSpecialKeys": "\u5927\u591a\u6570\u952e\u76d8\u548c\u9065\u63a7\u5668\u5747\u652f\u6301\u4ee5\u4e0b\u7279\u6b8a\u952e\uff1a", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/zh-HK.json b/strings/zh-HK.json index 07d7ada6..f59e447b 100644 --- a/strings/zh-HK.json +++ b/strings/zh-HK.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Audio streams will be converted to {0}, or copied from the original file if they are already {0} and the quality fits within the conversion options.", "AudioWillBeConvertedToOrCopied": "Audio streams will be converted to {0}, or copied from the original file if they are any of ({1}), and the quality fits within the conversion options.", "HeaderSpecialKeys": "Special Keys", - "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:" + "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file diff --git a/strings/zh-TW.json b/strings/zh-TW.json index d7344038..9a0e8a1d 100644 --- a/strings/zh-TW.json +++ b/strings/zh-TW.json @@ -945,5 +945,7 @@ "AudioWillBeConvertedTo": "Audio streams will be converted to {0}, or copied from the original file if they are already {0} and the quality fits within the conversion options.", "AudioWillBeConvertedToOrCopied": "Audio streams will be converted to {0}, or copied from the original file if they are any of ({1}), and the quality fits within the conversion options.", "HeaderSpecialKeys": "Special Keys", - "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:" + "FollowingSpecialKeys": "The following special keys are supported on most keyboards and remote controls:", + "HeaderDeleteSeries": "Delete Series", + "HeaderDeleteLastPlayedEpisode": "Delete Last Played Episode" } \ No newline at end of file