diff --git a/package.json b/package.json index 4a23dbcb8a..abfb8b7912 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "hls.js": "^0.13.1", "howler": "^2.2.0", "intersection-observer": "^0.10.0", - "jellyfin-apiclient": "^1.2.2", + "jellyfin-apiclient": "^1.3.0", "jellyfin-noto": "https://github.com/jellyfin/jellyfin-noto", "jquery": "^3.5.1", "jstree": "^3.3.10", diff --git a/src/assets/css/librarybrowser.css b/src/assets/css/librarybrowser.css index 88598fb94d..460585ae61 100644 --- a/src/assets/css/librarybrowser.css +++ b/src/assets/css/librarybrowser.css @@ -24,10 +24,6 @@ padding-top: 7em !important; } -.layout-mobile .libraryPage { - padding-top: 4em !important; -} - .itemDetailPage { padding-top: 0 !important; } @@ -164,6 +160,7 @@ display: flex; flex-direction: column; contain: layout style paint; + transition: background ease-in-out 0.5s; } .hiddenViewMenuBar .skinHeader { @@ -438,12 +435,14 @@ background-repeat: no-repeat; background-position: center; background-attachment: fixed; - height: 50vh; + height: 40vh; position: relative; + animation: backdrop-fadein 800ms ease-in normal both; } .layout-mobile .itemBackdrop { background-attachment: scroll; + height: 26.5vh; } .layout-desktop .itemBackdrop::after, @@ -463,10 +462,20 @@ .detailPageContent { display: flex; flex-direction: column; - padding-left: 2%; + padding-left: 32.45vw; padding-right: 2%; } +.layout-mobile .detailPageContent { + padding-left: 5%; + padding-right: 5%; +} + +.layout-desktop .detailPageContent .emby-scroller, +.layout-tv .detailPageContent .emby-scroller { + margin-left: 0; +} + .layout-desktop .noBackdrop .detailPageContent, .layout-tv .noBackdrop .detailPageContent { margin-top: 2.5em; @@ -477,6 +486,10 @@ margin-top: 0; } +.detailSectionContent a { + color: inherit; +} + .personBackdrop { background-size: contain; } @@ -495,7 +508,23 @@ .parentName { display: block; - margin-bottom: 0.5em; + margin: 0 0 0; +} + +.layout-mobile .parentName { + margin: 0.6em 0 0; +} + +.musicParentName { + margin: 0.15em 0 0.2em; +} + +.layout-mobile .musicParentName { + margin: -0.25em 0 0.25em; +} + +.layout-mobile .itemExternalLinks { + display: none; } .mainDetailButtons { @@ -503,8 +532,6 @@ -webkit-box-align: center; -webkit-align-items: center; align-items: center; - -webkit-flex-wrap: wrap; - flex-wrap: wrap; margin: 1em 0; } @@ -520,6 +547,35 @@ font-weight: 600; } +.itemName.originalTitle { + margin: 0.2em 0 0.2em; +} + +.itemName.parentNameLast { + margin: 0 0 0; +} + +.layout-mobile .itemName.parentNameLast { + margin: 0.4em 0 0.4em; +} + +.layout-mobile h1.itemName, +.layout-mobile h1.parentName { + font-size: 1.6em; +} + +.itemName.parentNameLast.withOriginalTitle { + margin: 0 0 0; +} + +.layout-mobile .itemName.parentNameLast.withOriginalTitle { + margin: 0.6em 0 0; +} + +.layout-mobile .itemName.originalTitle { + margin: 0.5em 0 0.5em; +} + .nameContainer { display: flex; flex-direction: column; @@ -546,6 +602,19 @@ text-align: center; } +.layout-mobile .mainDetailButtons { + margin-top: 1em; + margin-bottom: 0.5em; +} + +.subtitle { + margin: 0.15em 0 0.2em; +} + +.layout-mobile .subtitle { + margin: 0.2em 0 0.2em; +} + .detailPagePrimaryContainer { display: flex; align-items: center; @@ -556,7 +625,7 @@ .layout-mobile .detailPagePrimaryContainer { display: block; position: relative; - top: 0; + padding: 0.5em 3.3% 0.5em; } .layout-tv #itemDetailPage:not(.noBackdrop) .detailPagePrimaryContainer, @@ -566,13 +635,14 @@ padding-left: 32.45vw; } -.layout-desktop .detailSticky, -.layout-tv .detailSticky { +.layout-desktop .detailRibbon, +.layout-tv .detailRibbon { margin-top: -7.2em; + height: 7.18em; } -.layout-desktop .noBackdrop .detailSticky, -.layout-tv .noBackdrop .detailSticky { +.layout-desktop .noBackdrop .detailRibbon, +.layout-tv .noBackdrop .detailRibbon { margin-top: 0; } @@ -584,6 +654,9 @@ white-space: nowrap; text-overflow: ellipsis; text-align: left; + min-width: 0; + max-width: 100%; + overflow: hidden; } .layout-mobile .infoText { @@ -594,13 +667,29 @@ margin: 1.25em 0; } -.detailImageContainer { - position: relative; - margin-top: -25vh; - margin-bottom: 10vh; +.layout-mobile .detailPageSecondaryContainer { + margin: 1em 0; +} + +.layout-mobile .detailImageContainer { + display: none; +} + +.detailImageContainer .card { + position: absolute; + top: 50%; float: left; width: 25vw; z-index: 3; + transform: translateY(-50%); +} + +.detailImageContainer .card.backdropCard { + top: 35%; +} + +.detailImageContainer .card.squareCard { + top: 40%; } .layout-desktop .noBackdrop .detailImageContainer, @@ -613,11 +702,11 @@ } .detailLogo { - width: 30vw; - height: 25vh; + width: 25vw; + height: 16vh; position: absolute; top: 10vh; - right: 20vw; + right: 25vw; background-size: contain; } @@ -657,14 +746,19 @@ div.itemDetailGalleryLink.defaultCardBackground { position: relative; } - .layout-desktop .detailPageWrapperContainer, - .layout-tv .detailPageWrapperContainer { - margin-top: 7.2em; + .layout-desktop .itemBackdrop, + .layout-tv .itemBackdrop { + height: 40vh; } - .layout-tv #itemDetailPage:not(.noBackdrop) .detailPagePrimaryContainer, - .layout-desktop #itemDetailPage:not(.noBackdrop) .detailPagePrimaryContainer { - padding-left: 3.3%; + .layout-desktop .detailPageWrapperContainer, + .layout-tv .detailPageWrapperContainer { + margin-top: 0.1em; + } + + .layout-desktop .detailImageContainer .card, + .layout-tv .detailImageContainer .card { + top: 10%; } .btnPlaySimple { @@ -680,12 +774,12 @@ div.itemDetailGalleryLink.defaultCardBackground { .emby-button.detailFloatingButton { position: absolute; - background-color: rgba(0, 0, 0, 0.5) !important; - z-index: 1; - top: 50%; - left: 50%; + background-color: rgba(0, 0, 0, 0.5); + z-index: 3; + top: 100%; + left: 90%; margin: -2.2em 0 0 -2.2em; - padding: 0.4em !important; + padding: 0.4em; color: rgba(255, 255, 255, 0.76); } @@ -695,16 +789,12 @@ div.itemDetailGalleryLink.defaultCardBackground { @media all and (max-width: 62.5em) { .parentName { - margin-bottom: 1em; + margin-bottom: 0; } .itemDetailPage { padding-top: 0 !important; } - - .detailimg-hidemobile { - display: none; - } } @media all and (min-width: 31.25em) { @@ -868,6 +958,10 @@ div.itemDetailGalleryLink.defaultCardBackground { } } +.detailVerticalSection .emby-scrollbuttons { + padding-top: 0.4em; +} + .layout-tv .detailVerticalSection { margin-bottom: 3.4em !important; } @@ -956,6 +1050,10 @@ div.itemDetailGalleryLink.defaultCardBackground { margin-bottom: 2.7em; } +.layout-mobile .verticalSection-extrabottompadding { + margin-bottom: 1em; +} + .sectionTitleButton, .sectionTitleIconButton { margin-right: 0 !important; @@ -981,7 +1079,13 @@ div.itemDetailGalleryLink.defaultCardBackground { div:not(.sectionTitleContainer-cards) > .sectionTitle-cards { margin: 0; - padding-top: 1.25em; + padding-top: 0.5em; + padding-bottom: 0.2em; +} + +.layout-mobile :not(.sectionTitleContainer-cards) > .sectionTitle-cards { + margin: 0; + padding-top: 0.5em; } .sectionTitleButton { @@ -1134,6 +1238,12 @@ div:not(.sectionTitleContainer-cards) > .sectionTitle-cards { .trackSelections .selectContainer .selectLabel { margin: 0 0.2em 0 0; + line-height: 1.75; +} + +.layout-mobile .detailsGroupItem .label, +.layout-mobile .trackSelections .selectContainer .selectLabel { + flex-basis: 4.5em; } .trackSelections .selectContainer .detailTrackSelect { diff --git a/src/components/actionSheet/actionSheet.js b/src/components/actionSheet/actionSheet.js index c56f42a9d9..2e22111945 100644 --- a/src/components/actionSheet/actionSheet.js +++ b/src/components/actionSheet/actionSheet.js @@ -16,7 +16,7 @@ function getOffsets(elems) { return results; } - for (let elem of elems) { + for (const elem of elems) { let box = elem.getBoundingClientRect(); results.push({ @@ -135,7 +135,7 @@ export function show(options) { let renderIcon = false; let icons = []; let itemIcon; - for (let item of options.items) { + for (const item of options.items) { itemIcon = item.icon || (item.selected ? 'check' : null); diff --git a/src/components/cardbuilder/cardBuilder.js b/src/components/cardbuilder/cardBuilder.js index 1307a89ca0..04e6a3fcaf 100644 --- a/src/components/cardbuilder/cardBuilder.js +++ b/src/components/cardbuilder/cardBuilder.js @@ -1310,7 +1310,7 @@ import 'programStyles'; } const mediaSourceCount = item.MediaSourceCount || 1; - if (mediaSourceCount > 1) { + if (mediaSourceCount > 1 && options.disableIndicators !== true) { innerCardFooter += '
' + mediaSourceCount + '
'; } @@ -1391,34 +1391,36 @@ import 'programStyles'; cardBoxClose = ''; cardScalableClose = ''; - let indicatorsHtml = ''; + if (options.disableIndicators !== true) { + let indicatorsHtml = ''; - if (options.missingIndicator !== false) { - indicatorsHtml += indicators.getMissingIndicator(item); - } + if (options.missingIndicator !== false) { + indicatorsHtml += indicators.getMissingIndicator(item); + } - indicatorsHtml += indicators.getSyncIndicator(item); - indicatorsHtml += indicators.getTimerIndicator(item); + indicatorsHtml += indicators.getSyncIndicator(item); + indicatorsHtml += indicators.getTimerIndicator(item); - indicatorsHtml += indicators.getTypeIndicator(item); + indicatorsHtml += indicators.getTypeIndicator(item); - if (options.showGroupCount) { + if (options.showGroupCount) { - indicatorsHtml += indicators.getChildCountIndicatorHtml(item, { - minCount: 1 - }); - } else { - indicatorsHtml += indicators.getPlayedIndicatorHtml(item); - } + indicatorsHtml += indicators.getChildCountIndicatorHtml(item, { + minCount: 1 + }); + } else { + indicatorsHtml += indicators.getPlayedIndicatorHtml(item); + } - if (item.Type === 'CollectionFolder' || item.CollectionType) { - const refreshClass = item.RefreshProgress ? '' : ' class="hide"'; - indicatorsHtml += '
'; - requireRefreshIndicator(); - } + if (item.Type === 'CollectionFolder' || item.CollectionType) { + const refreshClass = item.RefreshProgress ? '' : ' class="hide"'; + indicatorsHtml += '
'; + requireRefreshIndicator(); + } - if (indicatorsHtml) { - cardImageContainerOpen += '
' + indicatorsHtml + '
'; + if (indicatorsHtml) { + cardImageContainerOpen += '
' + indicatorsHtml + '
'; + } } if (!imgUrl) { @@ -1467,7 +1469,7 @@ import 'programStyles'; let additionalCardContent = ''; if (layoutManager.desktop) { - additionalCardContent += getHoverMenuHtml(item, action); + additionalCardContent += getHoverMenuHtml(item, action, options); } return '<' + tagName + ' data-index="' + index + '"' + timerAttributes + actionAttribute + ' data-isfolder="' + (item.IsFolder || false) + '" data-serverid="' + (item.ServerId || options.serverId) + '" data-id="' + (item.Id || item.ItemId) + '" data-type="' + item.Type + '"' + mediaTypeData + collectionTypeData + channelIdData + positionTicksData + collectionIdData + playlistIdData + contextData + parentIdData + ' data-prefix="' + prefix + '" class="' + className + '">' + cardImageContainerOpen + innerCardFooter + cardImageContainerClose + overlayButtons + additionalCardContent + cardScalableClose + outerCardFooter + cardBoxClose + ''; @@ -1477,9 +1479,10 @@ import 'programStyles'; * Generates HTML markup for the card overlay. * @param {object} item - Item used to generate the card overlay. * @param {string} action - Action assigned to the overlay. + * @param {Array} options - Card builder options. * @returns {string} HTML markup of the card overlay. */ - function getHoverMenuHtml(item, action) { + function getHoverMenuHtml(item, action, options) { let html = ''; html += '
'; @@ -1494,12 +1497,12 @@ import 'programStyles'; const userData = item.UserData || {}; - if (itemHelper.canMarkPlayed(item)) { + if (itemHelper.canMarkPlayed(item) && !options.disableHoverMenu) { require(['emby-playstatebutton']); html += ''; } - if (itemHelper.canRate(item)) { + if (itemHelper.canRate(item) && !options.disableHoverMenu) { const likes = userData.Likes == null ? '' : userData.Likes; @@ -1507,7 +1510,9 @@ import 'programStyles'; html += ''; } - html += ''; + if (!options.disableHoverMenu) { + html += ''; + } html += '
'; html += ''; diff --git a/src/components/groupedcards.js b/src/components/groupedcards.js index 602c4310f4..5f23d8bb18 100644 --- a/src/components/groupedcards.js +++ b/src/components/groupedcards.js @@ -22,7 +22,7 @@ define(['dom', 'appRouter', 'connectionManager'], function (dom, appRouter, conn return void appRouter.showItem(items[0]); } - var url = 'itemdetails.html?id=' + itemId + '&serverId=' + serverId; + var url = 'details?id=' + itemId + '&serverId=' + serverId; Dashboard.navigate(url); }); e.stopPropagation(); diff --git a/src/components/images/imageLoader.js b/src/components/images/imageLoader.js index f7183515c5..ddf1183797 100644 --- a/src/components/images/imageLoader.js +++ b/src/components/images/imageLoader.js @@ -212,8 +212,15 @@ import 'css!./style'; } } + export function setLazyImage(element, url) { + element.classList.add('lazy'); + element.setAttribute('data-src', url); + lazyImage(element); + } + /* eslint-enable indent */ export default { + serLazyImage: setLazyImage, fillImages: fillImages, fillImage: fillImage, lazyImage: lazyImage, diff --git a/src/components/itemHelper.js b/src/components/itemHelper.js index b18f37110c..3508866bdb 100644 --- a/src/components/itemHelper.js +++ b/src/components/itemHelper.js @@ -1,14 +1,12 @@ define(['apphost', 'globalize'], function (appHost, globalize) { 'use strict'; - function getDisplayName(item, options) { + function getDisplayName(item, options = {}) { if (!item) { throw new Error('null item passed into getDisplayName'); } - options = options || {}; - if (item.Type === 'Timer') { item = item.ProgramInfo || item; } diff --git a/src/components/listview/listview.js b/src/components/listview/listview.js index 1bbde6fdbc..22e5e51325 100644 --- a/src/components/listview/listview.js +++ b/src/components/listview/listview.js @@ -125,10 +125,7 @@ define(['itemHelper', 'mediaInfo', 'indicators', 'connectionManager', 'layoutMan var largeTitleTagName = layoutManager.tv ? 'h2' : 'div'; - for (var i = 0, length = textlines.length; i < length; i++) { - - var text = textlines[i]; - + for (const [i, text] of textlines.entries()) { if (!text) { continue; } @@ -438,8 +435,6 @@ define(['itemHelper', 'mediaInfo', 'indicators', 'connectionManager', 'layoutMan html += '
'; - const moreIcon = 'more_vert'; - html += getTextLinesHtml(textlines, isLargeStyle); if (options.mediaInfo !== false) { @@ -490,10 +485,6 @@ define(['itemHelper', 'mediaInfo', 'indicators', 'connectionManager', 'layoutMan html += ''; } - if (options.moreButton !== false) { - html += ''; - } - if (options.infoButton) { html += ''; } @@ -507,14 +498,18 @@ define(['itemHelper', 'mediaInfo', 'indicators', 'connectionManager', 'layoutMan var userData = item.UserData || {}; var likes = userData.Likes == null ? '' : userData.Likes; - if (itemHelper.canMarkPlayed(item)) { + if (itemHelper.canMarkPlayed(item) && options.enablePlayedButton !== false) { html += ''; } - if (itemHelper.canRate(item)) { + if (itemHelper.canRate(item) && options.enableRatingButton !== false) { html += ''; } } + + if (options.moreButton !== false) { + html += ''; + } } html += '
'; diff --git a/src/components/mediainfo/mediainfo.css b/src/components/mediainfo/mediainfo.css index 1883b78726..508c9d96ad 100644 --- a/src/components/mediainfo/mediainfo.css +++ b/src/components/mediainfo/mediainfo.css @@ -41,6 +41,8 @@ width: auto !important; height: auto !important; font-size: 1.4em; + margin-right: 0.125em; + color: #f2b01e; } .mediaInfoCriticRating { diff --git a/src/components/remotecontrol/remotecontrol.js b/src/components/remotecontrol/remotecontrol.js index 092c08680d..655761d932 100644 --- a/src/components/remotecontrol/remotecontrol.js +++ b/src/components/remotecontrol/remotecontrol.js @@ -126,7 +126,7 @@ define(['browser', 'datetime', 'backdrop', 'libraryBrowser', 'listView', 'imageL for (const artist of item.ArtistItems) { let artistName = artist.Name; let artistId = artist.Id; - artistsSeries += `${artistName}`; + artistsSeries += `${artistName}`; if (artist !== item.ArtistItems.slice(-1)[0]) { artistsSeries += ', '; } @@ -143,18 +143,18 @@ define(['browser', 'datetime', 'backdrop', 'libraryBrowser', 'listView', 'imageL } } context.querySelector('.nowPlayingArtist').innerHTML = artistsSeries; - context.querySelector('.nowPlayingAlbum').innerHTML = '${albumName}`; + context.querySelector('.nowPlayingAlbum').innerHTML = '${albumName}`; } context.querySelector('.nowPlayingSongName').innerHTML = songName; } else if (item.Type == 'Episode') { if (item.SeasonName != null) { var seasonName = item.SeasonName; - context.querySelector('.nowPlayingSeason').innerHTML = '${seasonName}`; + context.querySelector('.nowPlayingSeason').innerHTML = '${seasonName}`; } if (item.SeriesName != null) { var seriesName = item.SeriesName; if (item.SeriesId != null) { - context.querySelector('.nowPlayingSerie').innerHTML = '${seriesName}`; + context.querySelector('.nowPlayingSerie').innerHTML = '${seriesName}`; } else { context.querySelector('.nowPlayingSerie').innerHTML = seriesName; } @@ -562,7 +562,6 @@ define(['browser', 'datetime', 'backdrop', 'libraryBrowser', 'listView', 'imageL if (!state.NextMediaType) { updatePlayerState(player, dlg, {}); - //onPlaylistUpdate(); Emby.Page.back(); } } diff --git a/src/components/subtitlesync/subtitlesync.css b/src/components/subtitlesync/subtitlesync.css index 2ff8a3e905..a63d9915bb 100644 --- a/src/components/subtitlesync/subtitlesync.css +++ b/src/components/subtitlesync/subtitlesync.css @@ -1,12 +1,18 @@ +.subtitleSync { + position: absolute; + width: 100%; +} + .subtitleSyncContainer { width: 40%; - margin-left: 30%; - margin-right: 30%; + min-width: 18em; + margin-left: auto; + margin-right: auto; height: 4.2em; background: rgba(28, 28, 28, 0.8); border-radius: 0.3em; color: #fff; - position: absolute; + position: relative; } .subtitleSync-closeButton { diff --git a/src/components/subtitlesync/subtitlesync.js b/src/components/subtitlesync/subtitlesync.js index fb986ec348..a3e60593e8 100644 --- a/src/components/subtitlesync/subtitlesync.js +++ b/src/components/subtitlesync/subtitlesync.js @@ -65,6 +65,9 @@ define(['playbackManager', 'layoutManager', 'text!./subtitlesync.template.html', event.preventDefault(); } } + + // FIXME: TV layout will require special handling for navigation keys. But now field is not focusable + event.stopPropagation(); }); subtitleSyncTextField.blur = function() { @@ -87,14 +90,6 @@ define(['playbackManager', 'layoutManager', 'text!./subtitlesync.template.html', getOffsetFromPercentage(this.value)); }); - subtitleSyncSlider.addEventListener('touchmove', function () { - // set new offset - playbackManager.setSubtitleOffset(getOffsetFromPercentage(this.value), player); - // synchronize with textField value - subtitleSyncTextField.updateOffset( - getOffsetFromPercentage(this.value)); - }); - subtitleSyncSlider.getBubbleHtml = function (value) { var newOffset = getOffsetFromPercentage(value); return '

' + diff --git a/src/components/subtitlesync/subtitlesync.template.html b/src/components/subtitlesync/subtitlesync.template.html index 4ca039aa03..fe202ebf60 100644 --- a/src/components/subtitlesync/subtitlesync.template.html +++ b/src/components/subtitlesync/subtitlesync.template.html @@ -1,7 +1,9 @@ -
- -
0s
-
- +
+
+ +
0s
+
+ +
diff --git a/src/components/syncPlay/groupSelectionMenu.js b/src/components/syncPlay/groupSelectionMenu.js index 067100ad73..48b22261f4 100644 --- a/src/components/syncPlay/groupSelectionMenu.js +++ b/src/components/syncPlay/groupSelectionMenu.js @@ -37,7 +37,7 @@ function showNewJoinGroupSelection (button, user, apiClient) { console.debug('No item is currently playing.'); } - apiClient.sendSyncPlayCommand(sessionId, 'ListGroups').then(function (response) { + apiClient.sendSyncPlayCommand('ListGroups').then(function (response) { response.json().then(function (groups) { var menuItems = groups.map(function (group) { return { @@ -83,9 +83,9 @@ function showNewJoinGroupSelection (button, user, apiClient) { actionsheet.show(menuOptions).then(function (id) { if (id == 'new-group') { - apiClient.sendSyncPlayCommand(sessionId, 'NewGroup'); + apiClient.sendSyncPlayCommand('NewGroup'); } else { - apiClient.sendSyncPlayCommand(sessionId, 'JoinGroup', { + apiClient.sendSyncPlayCommand('JoinGroup', { GroupId: id, PlayingItemId: playingItemId }); @@ -140,7 +140,7 @@ function showLeaveGroupSelection (button, user, apiClient) { actionsheet.show(menuOptions).then(function (id) { if (id == 'leave-group') { - apiClient.sendSyncPlayCommand(sessionId, 'LeaveGroup'); + apiClient.sendSyncPlayCommand('LeaveGroup'); } }).catch((error) => { console.error('SyncPlay: unexpected error showing group menu:', error); diff --git a/src/components/syncPlay/syncPlayManager.js b/src/components/syncPlay/syncPlayManager.js index 6116884d7c..860e3edcd4 100644 --- a/src/components/syncPlay/syncPlayManager.js +++ b/src/components/syncPlay/syncPlayManager.js @@ -139,7 +139,7 @@ class SyncPlayManager { return; } - apiClient.sendSyncPlayCommand(sessionId, 'UpdatePing', { + apiClient.sendSyncPlayCommand('UpdatePing', { Ping: ping }); } @@ -447,7 +447,7 @@ class SyncPlayManager { if (!success) { console.warning('Error reporting playback state to server. Joining group will fail.'); } - apiClient.sendSyncPlayCommand(sessionId, 'JoinGroup', { + apiClient.sendSyncPlayCommand('JoinGroup', { GroupId: groupId, PlayingItemId: playingItemId }); @@ -658,8 +658,7 @@ class SyncPlayManager { */ playRequest (player) { var apiClient = connectionManager.currentApiClient(); - var sessionId = getActivePlayerId(); - apiClient.sendSyncPlayCommand(sessionId, 'PlayRequest'); + apiClient.sendSyncPlayCommand('PlayRequest'); } /** @@ -667,8 +666,7 @@ class SyncPlayManager { */ pauseRequest (player) { var apiClient = connectionManager.currentApiClient(); - var sessionId = getActivePlayerId(); - apiClient.sendSyncPlayCommand(sessionId, 'PauseRequest'); + apiClient.sendSyncPlayCommand('PauseRequest'); // Pause locally as well, to give the user some little control playbackManager._localUnpause(player); } @@ -678,8 +676,7 @@ class SyncPlayManager { */ seekRequest (PositionTicks, player) { var apiClient = connectionManager.currentApiClient(); - var sessionId = getActivePlayerId(); - apiClient.sendSyncPlayCommand(sessionId, 'SeekRequest', { + apiClient.sendSyncPlayCommand('SeekRequest', { PositionTicks: PositionTicks }); } diff --git a/src/itemdetails.html b/src/controllers/itemDetails/index.html similarity index 73% rename from src/itemdetails.html rename to src/controllers/itemDetails/index.html index 44ca561d40..ddb7be3aec 100644 --- a/src/itemdetails.html +++ b/src/controllers/itemDetails/index.html @@ -1,8 +1,5 @@ -
+
-
@@ -15,94 +12,75 @@
- - - - - - - - - - - - - -
@@ -110,7 +88,7 @@
-
+
@@ -124,6 +102,11 @@
+ +
+
+
+
@@ -164,15 +147,15 @@
-

${HeaderSchedule}

-
+

${HeaderSchedule}

+
-
+
-

${HeaderNextUp}

-
+

${HeaderNextUp}

+
@@ -180,64 +163,64 @@
-

+

-
+
-

${HeaderAdditionalParts}

-
+

${HeaderAdditionalParts}

+
-
-

+
+

-
-

+
+

-

${HeaderCastCrew}

+

${HeaderCastCrew}

-

${HeaderUpcomingOnTV}

-
+

${HeaderUpcomingOnTV}

+
-

${HeaderSpecialFeatures}

-
+

${HeaderSpecialFeatures}

+
-

${HeaderMusicVideos}

-
+

${HeaderMusicVideos}

+
-
-

${HeaderScenes}

+
+

${HeaderScenes}

-
-

${HeaderMoreLikeThis}

+
+

${HeaderMoreLikeThis}

diff --git a/src/controllers/itemDetails.js b/src/controllers/itemDetails/index.js similarity index 83% rename from src/controllers/itemDetails.js rename to src/controllers/itemDetails/index.js index c9b6b7fc1c..45c43c19be 100644 --- a/src/controllers/itemDetails.js +++ b/src/controllers/itemDetails/index.js @@ -28,15 +28,11 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti } function hideAll(page, className, show) { - var i; - var length; - var elems = page.querySelectorAll('.' + className); - - for (i = 0, length = elems.length; i < length; i++) { + for (const elem of page.querySelectorAll('.' + className)) { if (show) { - elems[i].classList.remove('hide'); + elem.classList.remove('hide'); } else { - elems[i].classList.add('hide'); + elem.classList.add('hide'); } } } @@ -51,7 +47,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti positionTo: button, cancelTimer: false, record: false, - deleteItem: true === item.IsFolder, + deleteItem: item.CanDelete === true, shuffle: false, instantMix: false, user: user, @@ -75,7 +71,9 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti moreButton: false, recordButton: false }); - return html += '
'; + html += '
'; + + return html; } function renderSeriesTimerSchedule(page, apiClient, seriesTimerId) { @@ -143,9 +141,13 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti var mediaSources = item.MediaSources; instance._currentPlaybackMediaSources = mediaSources; + page.querySelector('.trackSelections').classList.remove('hide'); + select.setLabel(globalize.translate('LabelVersion')); + var currentValue = select.value; + var selectedId = mediaSources[0].Id; select.innerHTML = mediaSources.map(function (v) { var selected = v.Id === selectedId ? ' selected' : ''; @@ -172,7 +174,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti return m.Id === mediaSourceId; })[0]; var tracks = mediaSource.MediaStreams.filter(function (m) { - return 'Video' === m.Type; + return m.Type === 'Video'; }); var select = page.querySelector('.selectVideo'); select.setLabel(globalize.translate('LabelVideo')); @@ -242,12 +244,24 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti select.setLabel(globalize.translate('LabelSubtitles')); var selectedId = null == mediaSource.DefaultSubtitleStreamIndex ? -1 : mediaSource.DefaultSubtitleStreamIndex; - if (tracks.length) { + var videoTracks = mediaSource.MediaStreams.filter(function (m) { + return 'Video' === m.Type; + }); + + // This only makes sence on Video items + if (videoTracks.length) { var selected = -1 === selectedId ? ' selected' : ''; select.innerHTML = '' + tracks.map(function (v) { selected = v.Index === selectedId ? ' selected' : ''; return ''; }).join(''); + + if (tracks.length > 1) { + select.removeAttribute('disabled'); + } else { + select.setAttribute('disabled', 'disabled'); + } + page.querySelector('.selectSubtitlesContainer').classList.remove('hide'); } else { select.innerHTML = ''; @@ -278,7 +292,15 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti var enableShuffle = item.IsFolder || -1 !== ['MusicAlbum', 'MusicGenre', 'MusicArtist'].indexOf(item.Type); hideAll(page, 'btnShuffle', enableShuffle); canPlay = true; - hideAll(page, 'btnResume', item.UserData && item.UserData.PlaybackPositionTicks > 0); + + const isResumable = item.UserData && item.UserData.PlaybackPositionTicks > 0; + hideAll(page, 'btnResume', isResumable); + + if (isResumable) { + for (const elem of page.querySelectorAll('.btnPlay')) { + elem.querySelector('.detailButton-icon').classList.replace('play_arrow', 'replay'); + } + } } else { hideAll(page, 'btnPlay'); hideAll(page, 'btnResume'); @@ -324,8 +346,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti function getArtistLinksHtml(artists, serverId, context) { var html = []; - for (var i = 0, length = artists.length; i < length; i++) { - var artist = artists[i]; + for (const artist of artists) { var href = appRouter.getRouteUrl(artist, { context: context, itemType: 'MusicArtist', @@ -333,10 +354,18 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti }); html.push('' + artist.Name + ''); } + html = html.join(' / '); - return html = html.join(' / '); + return html; } - function renderName(item, container, isStatic, context) { + + /** + * Renders the item's name block + * @param {Object} item - Item used to render the name. + * @param {HTMLDivElement} container - Container to render the information into. + * @param {Object} context - Application context. + */ + function renderName(item, container, context) { var parentRoute; var parentNameHtml = []; var parentNameLast = false; @@ -410,16 +439,12 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti if (parentNameLast) { // Music if (layoutManager.mobile) { - html = '

' + parentNameHtml.join('
') + '

'; + html = '

' + parentNameHtml.join('
') + '

'; } else { - html = '

' + parentNameHtml.join(' - ') + '

'; + html = '

' + parentNameHtml.join(' - ') + '

'; } } else { - if (layoutManager.mobile) { - html = '

' + parentNameHtml.join('
') + '

'; - } else { - html = '

' + tvShowHtml + '

'; - } + html = '

' + tvShowHtml + '

'; } } @@ -428,17 +453,19 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti }); if (html && !parentNameLast) { - if (!layoutManager.mobile && tvSeasonHtml) { - html += '

' + tvSeasonHtml + ' - ' + name + '

'; + if (tvSeasonHtml) { + html += '

' + tvSeasonHtml + ' - ' + name + '

'; } else { - html += '

' + name + '

'; + html += '

' + name + '

'; } + } else if (item.OriginalTitle && item.OriginalTitle != item.Name) { + html = '

' + name + '

' + html; } else { - html = '

' + name + '

' + html; + html = '

' + name + '

' + html; } if (item.OriginalTitle && item.OriginalTitle != item.Name) { - html += '

' + item.OriginalTitle + '

'; + html += '

' + item.OriginalTitle + '

'; } container.innerHTML = html; @@ -470,43 +497,18 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti var imgUrl; var hasbackdrop = false; var itemBackdropElement = page.querySelector('#itemBackdrop'); - var usePrimaryImage = item.MediaType === 'Video' && item.Type !== 'Movie' && item.Type !== 'Trailer' || - item.MediaType && item.MediaType !== 'Video' || - item.Type === 'MusicAlbum' || - item.Type === 'Person'; if (!layoutManager.mobile && !userSettings.detailsBanner()) { return false; } - if ('Program' === item.Type && item.ImageTags && item.ImageTags.Thumb) { - imgUrl = apiClient.getScaledImageUrl(item.Id, { - type: 'Thumb', - maxWidth: dom.getScreenWidth(), - index: 0, - tag: item.ImageTags.Thumb - }); - page.classList.remove('noBackdrop'); - imageLoader.lazyImage(itemBackdropElement, imgUrl); - hasbackdrop = true; - } else if (usePrimaryImage && item.ImageTags && item.ImageTags.Primary) { - imgUrl = apiClient.getScaledImageUrl(item.Id, { - type: 'Primary', - maxWidth: dom.getScreenWidth(), - index: 0, - tag: item.ImageTags.Primary - }); - page.classList.remove('noBackdrop'); - imageLoader.lazyImage(itemBackdropElement, imgUrl); - hasbackdrop = true; - } else if (item.BackdropImageTags && item.BackdropImageTags.length) { + if (item.BackdropImageTags && item.BackdropImageTags.length) { imgUrl = apiClient.getScaledImageUrl(item.Id, { type: 'Backdrop', maxWidth: dom.getScreenWidth(), index: 0, tag: item.BackdropImageTags[0] }); - page.classList.remove('noBackdrop'); imageLoader.lazyImage(itemBackdropElement, imgUrl); hasbackdrop = true; } else if (item.ParentBackdropItemId && item.ParentBackdropImageTags && item.ParentBackdropImageTags.length) { @@ -516,50 +518,35 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti index: 0, tag: item.ParentBackdropImageTags[0] }); - page.classList.remove('noBackdrop'); - imageLoader.lazyImage(itemBackdropElement, imgUrl); - hasbackdrop = true; - } else if (item.ImageTags && item.ImageTags.Thumb) { - imgUrl = apiClient.getScaledImageUrl(item.Id, { - type: 'Thumb', - maxWidth: dom.getScreenWidth(), - index: 0, - tag: item.ImageTags.Thumb - }); - page.classList.remove('noBackdrop'); imageLoader.lazyImage(itemBackdropElement, imgUrl); hasbackdrop = true; } else { itemBackdropElement.style.backgroundImage = ''; } - if ('Person' === item.Type) { - // FIXME: This hides the backdrop on all persons to fix a margin issue. Ideally, a proper fix should be made. - page.classList.add('noBackdrop'); - itemBackdropElement.classList.add('personBackdrop'); - } else { - itemBackdropElement.classList.remove('personBackdrop'); - } - return hasbackdrop; } function reloadFromItem(instance, page, params, item, user) { - var context = params.context; - page.querySelector('.detailPagePrimaryContainer').classList.add('detailSticky'); + const apiClient = connectionManager.getApiClient(item.ServerId); - renderName(item, page.querySelector('.nameContainer'), false, context); - var apiClient = connectionManager.getApiClient(item.ServerId); - renderSeriesTimerEditor(page, item, apiClient, user); - renderTimerEditor(page, item, apiClient, user); - renderImage(page, item, apiClient, user); - renderLogo(page, item, apiClient); Emby.Page.setTitle(''); - setInitialCollapsibleState(page, item, apiClient, context, user); - renderDetails(page, item, apiClient, context); - renderTrackSelections(page, instance, item); + + // Start rendering the artwork first + renderImage(page, item); + renderLogo(page, item, apiClient); renderBackdrop(item); renderDetailPageBackdrop(page, item, apiClient); + + // Render the main information for the item + page.querySelector('.detailPagePrimaryContainer').classList.add('detailRibbon'); + renderName(item, page.querySelector('.nameContainer'), params.context); + renderDetails(page, item, apiClient, params.context); + renderTrackSelections(page, instance, item); + + renderSeriesTimerEditor(page, item, apiClient, user); + renderTimerEditor(page, item, apiClient, user); + setInitialCollapsibleState(page, item, apiClient, params.context, user); var canPlay = reloadPlayButtons(page, item); if ((item.LocalTrailerCount || item.RemoteTrailers && item.RemoteTrailers.length) && -1 !== playbackManager.getSupportedCommands().indexOf('PlayTrailers')) { @@ -570,12 +557,6 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti setTrailerButtonVisibility(page, item); - if (item.CanDelete && !item.IsFolder) { - hideAll(page, 'btnDeleteItem', true); - } else { - hideAll(page, 'btnDeleteItem'); - } - if ('Program' !== item.Type || canPlay) { hideAll(page, 'mainDetailButtons', true); } else { @@ -667,18 +648,15 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti } function renderLogo(page, item, apiClient) { - var url = logoImageUrl(item, apiClient, { - maxWidth: 400 - }); var detailLogo = page.querySelector('.detailLogo'); + var url = logoImageUrl(item, apiClient, {}); + if (!layoutManager.mobile && !userSettings.enableBackdrops()) { detailLogo.classList.add('hide'); } else if (url) { detailLogo.classList.remove('hide'); - detailLogo.classList.add('lazy'); - detailLogo.setAttribute('data-src', url); - imageLoader.lazyImage(detailLogo); + imageLoader.setLazyImage(detailLogo, url); } else { detailLogo.classList.add('hide'); } @@ -704,172 +682,60 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti } } - function renderLinks(linksElem, item) { - var html = []; + function renderLinks(page, item) { + var externalLinksElem = page.querySelector('.itemExternalLinks'); var links = []; if (!layoutManager.tv && item.HomePageUrl) { - links.push('' + globalize.translate('ButtonWebsite') + ''); + links.push(`${globalize.translate('ButtonWebsite')}`); } + if (item.ExternalUrls) { - for (var i = 0, length = item.ExternalUrls.length; i < length; i++) { - var url = item.ExternalUrls[i]; - links.push('' + url.Name + ''); + for (const url of item.ExternalUrls) { + links.push(`${url.Name}`); } } + var html = []; if (links.length) { html.push(links.join(', ')); } - linksElem.innerHTML = html.join(', '); + externalLinksElem.innerHTML = html.join(', '); if (html.length) { - linksElem.classList.remove('hide'); + externalLinksElem.classList.remove('hide'); } else { - linksElem.classList.add('hide'); + externalLinksElem.classList.add('hide'); } } - function renderDetailImage(page, elem, item, apiClient, editable, imageLoader, indicators) { - if ('SeriesTimer' === item.Type || 'Program' === item.Type) { - editable = false; - } + function renderDetailImage(elem, item, imageLoader) { + const itemArray = []; + itemArray.push(item); + const cardHtml = cardBuilder.getCardsHtml(itemArray, { + shape: 'auto', + showTitle: false, + centerText: true, + overlayText: false, + transition: false, + disableIndicators: true, + disableHoverMenu: true, + overlayPlayButton: true, + width: dom.getWindowSize().innerWidth * 0.25 + }); - elem.classList.add('detailimg-hidemobile'); + elem.innerHTML = cardHtml; - var imageTags = item.ImageTags || {}; - - if (item.PrimaryImageTag) { - imageTags.Primary = item.PrimaryImageTag; - } - - var url; - var html = ''; - var shape = 'portrait'; - var detectRatio = false; - - /* In the following section, getScreenWidth() is multiplied by 0.5 as the posters - are 25vw and we need double the resolution to counter Skia's scaling. */ - // TODO: Find a reliable way to get the poster width - if (imageTags.Primary) { - url = apiClient.getScaledImageUrl(item.Id, { - type: 'Primary', - maxWidth: Math.round(dom.getScreenWidth() * 0.5), - tag: item.ImageTags.Primary - }); - detectRatio = true; - } else if (item.BackdropImageTags && item.BackdropImageTags.length) { - url = apiClient.getScaledImageUrl(item.Id, { - type: 'Backdrop', - maxWidth: Math.round(dom.getScreenWidth() * 0.5), - tag: item.BackdropImageTags[0] - }); - shape = 'thumb'; - } else if (imageTags.Thumb) { - url = apiClient.getScaledImageUrl(item.Id, { - type: 'Thumb', - maxWidth: Math.round(dom.getScreenWidth() * 0.5), - tag: item.ImageTags.Thumb - }); - shape = 'thumb'; - } else if (imageTags.Disc) { - url = apiClient.getScaledImageUrl(item.Id, { - type: 'Disc', - maxWidth: Math.round(dom.getScreenWidth() * 0.5), - tag: item.ImageTags.Disc - }); - shape = 'square'; - } else if (item.AlbumId && item.AlbumPrimaryImageTag) { - url = apiClient.getScaledImageUrl(item.AlbumId, { - type: 'Primary', - maxWidth: Math.round(dom.getScreenWidth() * 0.5), - tag: item.AlbumPrimaryImageTag - }); - shape = 'square'; - } else if (item.SeriesId && item.SeriesPrimaryImageTag) { - url = apiClient.getScaledImageUrl(item.SeriesId, { - type: 'Primary', - maxWidth: Math.round(dom.getScreenWidth() * 0.5), - tag: item.SeriesPrimaryImageTag - }); - } else if (item.ParentPrimaryImageItemId && item.ParentPrimaryImageTag) { - url = apiClient.getScaledImageUrl(item.ParentPrimaryImageItemId, { - type: 'Primary', - maxWidth: Math.round(dom.getScreenWidth() * 0.5), - tag: item.ParentPrimaryImageTag - }); - } - - if (editable && url === undefined) { - html += ""; - } else if (!editable && url === undefined) { - html += "'; - } - - var progressHtml = item.IsFolder || !item.UserData ? '' : indicators.getProgressBarHtml(item); - html += '
'; - - if (progressHtml) { - html += progressHtml; - } - - html += '
'; - elem.innerHTML = html; - - if (detectRatio && item.PrimaryImageAspectRatio) { - if (item.PrimaryImageAspectRatio >= 1.48) { - shape = 'thumb'; - } else if (item.PrimaryImageAspectRatio >= 0.85 && item.PrimaryImageAspectRatio <= 1.34) { - shape = 'square'; - } - } - - if ('thumb' == shape) { - elem.classList.add('thumbDetailImageContainer'); - elem.classList.remove('portraitDetailImageContainer'); - elem.classList.remove('squareDetailImageContainer'); - } else if ('square' == shape) { - elem.classList.remove('thumbDetailImageContainer'); - elem.classList.remove('portraitDetailImageContainer'); - elem.classList.add('squareDetailImageContainer'); - } else { - elem.classList.remove('thumbDetailImageContainer'); - elem.classList.add('portraitDetailImageContainer'); - elem.classList.remove('squareDetailImageContainer'); - } - - if (url) { - imageLoader.lazyImage(elem.querySelector('img'), url); - } + imageLoader.lazyChildren(elem); } - function renderImage(page, item, apiClient, user) { + function renderImage(page, item) { renderDetailImage( - page, page.querySelector('.detailImageContainer'), item, - apiClient, - user.Policy.IsAdministrator && 'Photo' != item.MediaType, - imageLoader, - indicators + imageLoader ); } @@ -985,54 +851,41 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti } } - function renderOverview(elems, item) { - for (var i = 0, length = elems.length; i < length; i++) { - var elem = elems[i]; + function renderOverview(page, item) { + for (const overviewElemnt of page.querySelectorAll('.overview')) { var overview = item.Overview || ''; if (overview) { - elem.innerHTML = overview; - elem.classList.remove('hide'); - elem.classList.add('detail-clamp-text'); + overviewElemnt.innerHTML = overview; + overviewElemnt.classList.remove('hide'); + overviewElemnt.classList.add('detail-clamp-text'); // Grab the sibling element to control the expand state - var expandButton = elem.parentElement.querySelector('.overview-expand'); + var expandButton = overviewElemnt.parentElement.querySelector('.overview-expand'); // Detect if we have overflow of text. Based on this StackOverflow answer // https://stackoverflow.com/a/35157976 - if (Math.abs(elem.scrollHeight - elem.offsetHeight) > 2) { + if (Math.abs(overviewElemnt.scrollHeight - overviewElemnt.offsetHeight) > 2) { expandButton.classList.remove('hide'); } else { expandButton.classList.add('hide'); } - expandButton.addEventListener('click', toggleLineClamp.bind(null, elem)); + expandButton.addEventListener('click', toggleLineClamp.bind(null, overviewElemnt)); - var anchors = elem.querySelectorAll('a'); - - for (var j = 0, length2 = anchors.length; j < length2; j++) { - anchors[j].setAttribute('target', '_blank'); + for (const anchor of overviewElemnt.querySelectorAll('a')) { + anchor.setAttribute('target', '_blank'); } } else { - elem.innerHTML = ''; - elem.classList.add('hide'); + overviewElemnt.innerHTML = ''; + overviewElemnt.classList.add('hide'); } } } - function renderGenres(page, item, context) { - context = context || inferContext(item); - var type; + function renderGenres(page, item, context = inferContext(item)) { var genres = item.GenreItems || []; - - switch (context) { - case 'music': - type = 'MusicGenre'; - break; - - default: - type = 'Genre'; - } + var type = context === 'music' ? 'MusicGenre' : 'Genre'; var html = genres.map(function (p) { return '' + p.Name + ''; + }) + '">' + person.Name + ''; + }).join(', '); + + var writersLabel = page.querySelector('.writersLabel'); + writersLabel.innerHTML = globalize.translate(writers.length > 1 ? 'Writers' : 'Writer'); + var writersValue = page.querySelector('.writers'); + writersValue.innerHTML = html; + + var writersGroup = page.querySelector('.writersGroup'); + if (writers.length) { + writersGroup.classList.remove('hide'); + } else { + writersGroup.classList.add('hide'); + } + } + + function renderDirector(page, item, context) { + var directors = (item.People || []).filter(function (person) { + return person.Type === 'Director'; + }); + + var html = directors.map(function (person) { + return '' + person.Name + ''; }).join(', '); var directorsLabel = page.querySelector('.directorsLabel'); @@ -1086,13 +969,39 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti } } - function renderDetails(page, item, apiClient, context, isStatic) { - renderSimilarItems(page, item, context); - renderMoreFromSeason(page, item, apiClient); - renderMoreFromArtist(page, item, apiClient); - renderDirector(page, item, context); - renderGenres(page, item, context); - renderChannelGuide(page, apiClient, item); + function renderMiscInfo(page, item) { + const primaryItemMiscInfo = page.querySelectorAll('.itemMiscInfo-primary'); + + for (const miscInfo of primaryItemMiscInfo) { + mediaInfo.fillPrimaryMediaInfo(miscInfo, item, { + interactive: true, + episodeTitle: false, + subtitles: false + }); + + if (miscInfo.innerHTML && 'SeriesTimer' !== item.Type) { + miscInfo.classList.remove('hide'); + } else { + miscInfo.classList.add('hide'); + } + } + + const secondaryItemMiscInfo = page.querySelectorAll('.itemMiscInfo-secondary'); + + for (const miscInfo of secondaryItemMiscInfo) { + mediaInfo.fillSecondaryMediaInfo(miscInfo, item, { + interactive: true + }); + + if (miscInfo.innerHTML && 'SeriesTimer' !== item.Type) { + miscInfo.classList.remove('hide'); + } else { + miscInfo.classList.add('hide'); + } + } + } + + function renderTagline(page, item) { var taglineElement = page.querySelector('.tagline'); if (item.Taglines && item.Taglines.length) { @@ -1101,44 +1010,21 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti } else { taglineElement.classList.add('hide'); } + } - var overview = page.querySelector('.overview'); - var externalLinksElem = page.querySelector('.itemExternalLinks'); - - renderOverview([overview], item); - - var i; - var itemMiscInfo; - itemMiscInfo = page.querySelectorAll('.itemMiscInfo-primary'); - for (i = 0; i < itemMiscInfo.length; i++) { - mediaInfo.fillPrimaryMediaInfo(itemMiscInfo[i], item, { - interactive: true, - episodeTitle: false, - subtitles: false - }); - - if (itemMiscInfo[i].innerHTML && 'SeriesTimer' !== item.Type) { - itemMiscInfo[i].classList.remove('hide'); - } else { - itemMiscInfo[i].classList.add('hide'); - } - } - - itemMiscInfo = page.querySelectorAll('.itemMiscInfo-secondary'); - for (i = 0; i < itemMiscInfo.length; i++) { - mediaInfo.fillSecondaryMediaInfo(itemMiscInfo[i], item, { - interactive: true - }); - - if (itemMiscInfo[i].innerHTML && 'SeriesTimer' !== item.Type) { - itemMiscInfo[i].classList.remove('hide'); - } else { - itemMiscInfo[i].classList.add('hide'); - } - } - + function renderDetails(page, item, apiClient, context, isStatic) { + renderSimilarItems(page, item, context); + renderMoreFromSeason(page, item, apiClient); + renderMoreFromArtist(page, item, apiClient); + renderDirector(page, item, context); + renderWriter(page, item, context); + renderGenres(page, item, context); + renderChannelGuide(page, apiClient, item); + renderTagline(page, item); + renderOverview(page, item); + renderMiscInfo(page, item); reloadUserDataButtons(page, item); - renderLinks(externalLinksElem, item); + renderLinks(page, item); renderTags(page, item); renderSeriesAirTime(page, item, isStatic); } @@ -1426,8 +1312,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti action: 'playallfromhere', image: false, artist: 'auto', - containerAlbumArtists: item.AlbumArtists, - addToListButton: true + containerAlbumArtists: item.AlbumArtists }); isList = true; } else if ('Series' == item.Type) { @@ -1469,11 +1354,12 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti items: result.Items, showIndexNumber: false, enableOverview: true, + enablePlayedButton: layoutManager.mobile ? false : true, + infoButton: layoutManager.mobile ? false : true, imageSize: 'large', enableSideMediaInfo: false, highlight: false, action: layoutManager.tv ? 'resume' : 'none', - infoButton: true, imagePlayButton: true, includeParentInfoInTitle: false }); @@ -1500,6 +1386,9 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti childrenItemsContainer.classList.remove('vertical-list'); } } + if (layoutManager.mobile) { + childrenItemsContainer.classList.remove('padded-right'); + } childrenItemsContainer.innerHTML = html; imageLoader.lazyChildren(childrenItemsContainer); if ('BoxSet' == item.Type) { @@ -1701,12 +1590,10 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti } function renderCollectionItems(page, parentItem, types, items) { + page.querySelector('.collectionItems').classList.remove('hide'); page.querySelector('.collectionItems').innerHTML = ''; - var i; - var length; - for (i = 0, length = types.length; i < length; i++) { - var type = types[i]; + for (const type of types) { var typeItems = filterItemsByCollectionItemType(items, type); if (typeItems.length) { @@ -1739,8 +1626,8 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti renderChildren(page, parentItem); }; - for (i = 0, length = containers.length; i < length; i++) { - containers[i].notifyRefreshNeeded = notifyRefreshNeeded; + for (const container of containers) { + container.notifyRefreshNeeded = notifyRefreshNeeded; } // if nothing in the collection can be played hide play and shuffle buttons @@ -1876,7 +1763,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti function renderCast(page, item) { var people = (item.People || []).filter(function (p) { - return 'Director' !== p.Type; + return p.Type === 'Actor'; }); if (!people.length) { @@ -1905,12 +1792,10 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti } function bindAll(view, selector, eventName, fn) { - var i; - var length; var elems = view.querySelectorAll(selector); - for (i = 0, length = elems.length; i < length; i++) { - elems[i].addEventListener(eventName, fn); + for (const elem of elems) { + elem.addEventListener(eventName, fn); } } @@ -1923,13 +1808,14 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti return function (view, params) { function reload(instance, page, params) { loading.show(); + var apiClient = params.serverId ? connectionManager.getApiClient(params.serverId) : ApiClient; - var promises = [getPromise(apiClient, params), apiClient.getCurrentUser()]; - Promise.all(promises).then(function (responses) { - var item = responses[0]; - var user = responses[1]; + + Promise.all([getPromise(apiClient, params), apiClient.getCurrentUser()]).then(([item, user]) => { currentItem = item; reloadFromItem(instance, page, params, item, user); + }).catch((error) => { + console.error('failed to get item or current user: ', error); }); } @@ -1980,7 +1866,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti }); } - playItem(item, item.UserData && 'resume' === mode ? item.UserData.PlaybackPositionTicks : 0); + playItem(item, item.UserData && mode === 'resume' ? item.UserData.PlaybackPositionTicks : 0); } function onPlayClick() { @@ -1995,15 +1881,6 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti playbackManager.shuffle(currentItem); } - function onDeleteClick() { - require(['deleteHelper'], function (deleteHelper) { - deleteHelper.deleteItem({ - item: currentItem, - navigate: true - }); - }); - } - function onCancelSeriesTimerClick() { require(['recordingHelper'], function (recordingHelper) { recordingHelper.cancelSeriesTimerWithConfirmation(currentItem.Id, currentItem.ServerId).then(function () { @@ -2092,7 +1969,6 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti bindAll(view, '.btnPlayTrailer', 'click', onPlayTrailerClick); bindAll(view, '.btnCancelSeriesTimer', 'click', onCancelSeriesTimerClick); bindAll(view, '.btnCancelTimer', 'click', onCancelTimerClick); - bindAll(view, '.btnDeleteItem', 'click', onDeleteClick); bindAll(view, '.btnDownload', 'click', onDownloadClick); view.querySelector('.trackSelections').addEventListener('submit', onTrackSelectionsSubmit); view.querySelector('.btnSplitVersions').addEventListener('click', function () { @@ -2125,9 +2001,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti view.addEventListener('viewshow', function (e) { var page = this; - if (layoutManager.mobile) { - libraryMenu.setTransparentMenu(true); - } + libraryMenu.setTransparentMenu(true); if (e.detail.isRestored) { if (currentItem) { diff --git a/src/controllers/playback/videoosd.js b/src/controllers/playback/videoosd.js index d6caf24e81..edab6bdc55 100644 --- a/src/controllers/playback/videoosd.js +++ b/src/controllers/playback/videoosd.js @@ -333,13 +333,21 @@ define(['playbackManager', 'dom', 'inputManager', 'datetime', 'itemHelper', 'med osdPoster.innerHTML = ''; } + let osdLockCount = 0; + function showOsd() { slideDownToShow(headerElement); showMainOsdControls(); - startOsdHideTimer(); + if (!osdLockCount) { + startOsdHideTimer(); + } } function hideOsd() { + if (osdLockCount) { + return; + } + slideUpToHide(headerElement); hideMainOsdControls(); } @@ -352,6 +360,19 @@ define(['playbackManager', 'dom', 'inputManager', 'datetime', 'itemHelper', 'med } } + function lockOsd() { + osdLockCount++; + stopOsdHideTimer(); + } + + function unlockOsd() { + osdLockCount--; + // Restart hide timer if OSD is currently visible + if (currentVisibleMenu && !osdLockCount) { + startOsdHideTimer(); + } + } + function startOsdHideTimer() { stopOsdHideTimer(); osdHideTimeout = setTimeout(hideOsd, 3e3); @@ -1080,7 +1101,7 @@ define(['playbackManager', 'dom', 'inputManager', 'datetime', 'itemHelper', 'med */ var clickedElement; - function onWindowKeyDown(e) { + function onKeyDown(e) { clickedElement = e.srcElement; var key = keyboardnavigation.getKeyName(e); @@ -1194,12 +1215,29 @@ define(['playbackManager', 'dom', 'inputManager', 'datetime', 'itemHelper', 'med } } + function onKeyDownCapture() { + // Restart hide timer if OSD is currently visible + if (currentVisibleMenu) { + showOsd(); + } + } + function onWindowMouseDown(e) { clickedElement = e.srcElement; + lockOsd(); + } + + function onWindowMouseUp() { + unlockOsd(); } function onWindowTouchStart(e) { clickedElement = e.srcElement; + lockOsd(); + } + + function onWindowTouchEnd() { + unlockOsd(); } function getImgUrl(item, chapter, index, maxWidth, apiClient) { @@ -1312,9 +1350,11 @@ define(['playbackManager', 'dom', 'inputManager', 'datetime', 'itemHelper', 'med var headerElement = document.querySelector('.skinHeader'); var osdBottomElement = document.querySelector('.videoOsdBottom-maincontrols'); + nowPlayingPositionSlider.enableKeyboardDragging(); + nowPlayingVolumeSlider.enableKeyboardDragging(); + if (layoutManager.tv) { nowPlayingPositionSlider.classList.add('focusable'); - nowPlayingPositionSlider.enableKeyboardDragging(); } view.addEventListener('viewbeforeshow', function (e) { @@ -1330,18 +1370,27 @@ define(['playbackManager', 'dom', 'inputManager', 'datetime', 'itemHelper', 'med }); showOsd(); inputManager.on(window, onInputCommand); - dom.addEventListener(window, 'keydown', onWindowKeyDown, { + document.addEventListener('keydown', onKeyDown); + dom.addEventListener(document, 'keydown', onKeyDownCapture, { capture: true }); dom.addEventListener(window, window.PointerEvent ? 'pointerdown' : 'mousedown', onWindowMouseDown, { passive: true }); + dom.addEventListener(window, window.PointerEvent ? 'pointerup' : 'mouseup', onWindowMouseUp, { + passive: true + }); dom.addEventListener(window, 'touchstart', onWindowTouchStart, { passive: true }); + ['touchend', 'touchcancel'].forEach((event) => { + dom.addEventListener(window, event, onWindowTouchEnd, { + passive: true + }); + }); } catch (e) { require(['appRouter'], function(appRouter) { - appRouter.showDirect('/'); + appRouter.goHome(); }); } }); @@ -1350,15 +1399,24 @@ define(['playbackManager', 'dom', 'inputManager', 'datetime', 'itemHelper', 'med statsOverlay.enabled(false); } - dom.removeEventListener(window, 'keydown', onWindowKeyDown, { + document.removeEventListener('keydown', onKeyDown); + dom.removeEventListener(document, 'keydown', onKeyDownCapture, { capture: true }); dom.removeEventListener(window, window.PointerEvent ? 'pointerdown' : 'mousedown', onWindowMouseDown, { passive: true }); + dom.removeEventListener(window, window.PointerEvent ? 'pointerup' : 'mouseup', onWindowMouseUp, { + passive: true + }); dom.removeEventListener(window, 'touchstart', onWindowTouchStart, { passive: true }); + ['touchend', 'touchcancel'].forEach((event) => { + dom.removeEventListener(window, event, onWindowTouchEnd, { + passive: true + }); + }); stopOsdHideTimer(); headerElement.classList.remove('osdHeader'); headerElement.classList.remove('osdHeader-hidden'); @@ -1447,16 +1505,13 @@ define(['playbackManager', 'dom', 'inputManager', 'datetime', 'itemHelper', 'med }, options); } - function setVolume() { - playbackManager.setVolume(this.value, currentPlayer); - } - view.querySelector('.buttonMute').addEventListener('click', function () { playbackManager.toggleMute(currentPlayer); }); - nowPlayingVolumeSlider.addEventListener('change', setVolume); - nowPlayingVolumeSlider.addEventListener('mousemove', setVolume); - nowPlayingVolumeSlider.addEventListener('touchmove', setVolume); + + nowPlayingVolumeSlider.addEventListener('input', (e) => { + playbackManager.setVolume(e.target.value, currentPlayer); + }); nowPlayingPositionSlider.addEventListener('change', function () { var player = currentPlayer; diff --git a/src/elements/emby-scrollbuttons/emby-scrollbuttons.css b/src/elements/emby-scrollbuttons/emby-scrollbuttons.css index b2e0d3bc23..5af739bac1 100644 --- a/src/elements/emby-scrollbuttons/emby-scrollbuttons.css +++ b/src/elements/emby-scrollbuttons/emby-scrollbuttons.css @@ -6,7 +6,7 @@ justify-content: center; min-width: 104px; min-height: 24px; - padding-top: 1.25em; + padding-top: 0.85em; z-index: 1; color: #fff; display: flex; diff --git a/src/plugins/htmlVideoPlayer/plugin.js b/src/plugins/htmlVideoPlayer/plugin.js index f8ba7c415c..cc312bb956 100644 --- a/src/plugins/htmlVideoPlayer/plugin.js +++ b/src/plugins/htmlVideoPlayer/plugin.js @@ -649,7 +649,7 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa function setTrackEventsSubtitleOffset(trackEvents, offsetValue) { if (Array.isArray(trackEvents)) { - offsetValue = updateCurrentTrackOffset(offsetValue); + offsetValue = updateCurrentTrackOffset(offsetValue) * 1e7; // ticks trackEvents.forEach(function(trackEvent) { trackEvent.StartPositionTicks -= offsetValue; trackEvent.EndPositionTicks -= offsetValue; diff --git a/src/scripts/dom.js b/src/scripts/dom.js index a3d157f337..080bff66ae 100644 --- a/src/scripts/dom.js +++ b/src/scripts/dom.js @@ -211,7 +211,7 @@ 'MozAnimation': 'animationend', 'WebkitAnimation': 'webkitAnimationEnd' }; - for (let t in animations) { + for (const t in animations) { if (el.style[t] !== undefined) { _animationEvent = animations[t]; return animations[t]; @@ -251,7 +251,7 @@ 'MozTransition': 'transitionend', 'WebkitTransition': 'webkitTransitionEnd' }; - for (let t in transitions) { + for (const t in transitions) { if (el.style[t] !== undefined) { _transitionEvent = transitions[t]; return transitions[t]; diff --git a/src/scripts/itembynamedetailpage.js b/src/scripts/itembynamedetailpage.js index 44eca55589..fd29724225 100644 --- a/src/scripts/itembynamedetailpage.js +++ b/src/scripts/itembynamedetailpage.js @@ -71,12 +71,12 @@ define(['connectionManager', 'listView', 'cardBuilder', 'imageLoader', 'libraryB html += '
'; html += '
'; - html += '

'; + html += '

'; html += section.name; html += '

'; html += ''; html += '
'; - html += '
'; + html += '
'; html += '
'; return html += '
'; }).join(''); diff --git a/src/scripts/keyboardNavigation.js b/src/scripts/keyboardNavigation.js index 6664afed53..6543207fee 100644 --- a/src/scripts/keyboardNavigation.js +++ b/src/scripts/keyboardNavigation.js @@ -78,7 +78,7 @@ export function isNavigationKey(key) { } export function enable() { - document.addEventListener('keydown', function (e) { + window.addEventListener('keydown', function (e) { const key = getKeyName(e); // Ignore navigation keys for non-TV diff --git a/src/scripts/libraryMenu.js b/src/scripts/libraryMenu.js index a055530442..7f3a16e31e 100644 --- a/src/scripts/libraryMenu.js +++ b/src/scripts/libraryMenu.js @@ -13,7 +13,7 @@ define(['dom', 'layoutManager', 'inputManager', 'connectionManager', 'events', ' html += '
'; html += ''; html += ``; - html += ''; + html += ``; html += ``; html += ``; html += ''; diff --git a/src/scripts/routes.js b/src/scripts/routes.js index b5bb04683b..ab12b53abf 100644 --- a/src/scripts/routes.js +++ b/src/scripts/routes.js @@ -15,7 +15,7 @@ define([ 'detailtablecss'], function () { function defineRoute(newRoute) { - var path = newRoute.path; + var path = newRoute.alias ? newRoute.alias : newRoute.path; console.debug('defining route: ' + path); newRoute.dictionary = 'core'; Emby.Page.addRoute(path, newRoute); @@ -240,8 +240,9 @@ define([ transition: 'fade' }); defineRoute({ - path: '/itemdetails.html', - controller: 'itemDetails', + alias: '/details', + path: '/controllers/itemDetails/index.html', + controller: 'itemDetails/index', autoFocus: false, transition: 'fade' }); diff --git a/src/scripts/site.js b/src/scripts/site.js index e5c188bdcc..106d81a8c7 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -1038,7 +1038,7 @@ var AppInfo = {}; } if ('SeriesTimer' == itemType) { - return 'itemdetails.html?seriesTimerId=' + id + '&serverId=' + serverId; + return 'details?seriesTimerId=' + id + '&serverId=' + serverId; } if ('livetv' == item.CollectionType) { @@ -1108,13 +1108,13 @@ var AppInfo = {}; var itemTypes = ['Playlist', 'TvChannel', 'Program', 'BoxSet', 'MusicAlbum', 'MusicGenre', 'Person', 'Recording', 'MusicArtist']; if (itemTypes.indexOf(itemType) >= 0) { - return 'itemdetails.html?id=' + id + '&serverId=' + serverId; + return 'details?id=' + id + '&serverId=' + serverId; } var contextSuffix = context ? '&context=' + context : ''; if ('Series' == itemType || 'Season' == itemType || 'Episode' == itemType) { - return 'itemdetails.html?id=' + id + contextSuffix + '&serverId=' + serverId; + return 'details?id=' + id + contextSuffix + '&serverId=' + serverId; } if (item.IsFolder) { @@ -1125,7 +1125,7 @@ var AppInfo = {}; return '#'; } - return 'itemdetails.html?id=' + id + '&serverId=' + serverId; + return 'details?id=' + id + '&serverId=' + serverId; }; appRouter.showItem = showItem; diff --git a/src/strings/ar.json b/src/strings/ar.json index c1898bb1f9..09de31d043 100644 --- a/src/strings/ar.json +++ b/src/strings/ar.json @@ -1151,5 +1151,6 @@ "DisplayInOtherHomeScreenSections": "عرض في أقسام الشاشة الرئيسية مثل أحدث الوسائط واستمر في المشاهدة", "DisplayInMyMedia": "عرض على الشاشة الرئيسية", "Display": "عرض", - "Dislike": "لم يعجبنى" + "Dislike": "لم يعجبنى", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/strings/be-by.json b/src/strings/be-by.json index c3675b310e..28cf51bcde 100644 --- a/src/strings/be-by.json +++ b/src/strings/be-by.json @@ -19,5 +19,6 @@ "ThisWizardWillGuideYou": "Гэты памочнік правядзе вас праз усе фазы ўстаноўкі і налады. Спачатку абярыце упадабаную мову.", "UserProfilesIntro": "У Jellyfin існуе ўбудаваная падтрымка для карыстальніцкіх профіляў, дазваляючы кожнаму карыстальніку валодаць сваімі ўласнымі параметрамі адлюстравання, станам прайгравання і кіраваннем ўтрымання.", "WelcomeToProject": "Пачатак працы ў Jellyfin!", - "WizardCompleted": "Гэта ўсё, што нам трэба зараз. Jellyfin пачынае збіраць звесткі аб вашай медыятэцы. Азнаёмцеся пакуль з некаторымі нашымі праграмамі, а затым націсніце Гатова, каб праглядзець Инфопанель сервера." + "WizardCompleted": "Гэта ўсё, што нам трэба зараз. Jellyfin пачынае збіраць звесткі аб вашай медыятэцы. Азнаёмцеся пакуль з некаторымі нашымі праграмамі, а затым націсніце Гатова, каб праглядзець Инфопанель сервера.", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/strings/bg-bg.json b/src/strings/bg-bg.json index 7d14080f70..71fdf80e32 100644 --- a/src/strings/bg-bg.json +++ b/src/strings/bg-bg.json @@ -1382,7 +1382,7 @@ "MessagePleaseWait": "Моля,изчакайте. Това може да отнеме минута.", "MessagePlayAccessRestricted": "Възпроизвеждането на това съдържание в момента е ограничено.Моля, свържете се с администратора на вашия сървър за повече информация.", "MessagePasswordResetForUsers": "Следните потребители са занулили паролите си.Те вече могат да влязат с пин кодовете, използвани за извършване на нулирането.", - "MessageNoTrailersFound": "Не са намерени трейлъри.За да подобрите филмовото изживяване инсталирайте канал за трейлъри,може да подредите няколко канала в библиотека.", + "MessageNoTrailersFound": "За да подобрите филмовото изживяване инсталирайте канал за трейлъри,може да подредите няколко канала в библиотека.", "MessageNoServersAvailable": "Не са намерени сървъри, използващи функцията за автоматично откриване на сървър.", "MessageNoMovieSuggestionsAvailable": "Понастоящем няма предложени филми. Започнете да гледате и оценявате филмите си, а след това се върнете, за да видите препоръките си.", "MessageNoCollectionsAvailable": "Колекциите ви позволяват да се наслаждавате на персонализирани групи от филми, сериали и албуми. Кликнете върху бутона +, за да започнете да създавате колекции.", @@ -1551,5 +1551,20 @@ "LabelSonyAggregationFlagsHelp": "Определя съдържанието на aggregationFlags елемента във urn:schemas-sonycom:av пространство от имена.", "LabelXDlnaDocHelp": "Определя съдържанието на X_DLNADOC елемента в urn:schemas-dlna-org:device-1-0 пространство от имена.", "LabelSkipForwardLength": "Време за придвижване напред:", - "LabelSkipBackLength": "Време за придвижване назад:" + "LabelSkipBackLength": "Време за придвижване назад:", + "LabelRepositoryUrlHelp": "Местоположението на манифеста на хранилището, което искате да включите.", + "MessageNoGenresAvailable": "Доставчиците на метаданни ще могат да изтеглят жанрове от интернет.", + "MessageAddRepository": "Ако искате да добавите хранилище, щракнете върху бутона до заглавната част и попълнете исканата информация.", + "LabelRepositoryNameHelp": "Персонализирано име за разграничаване на това хранилище от всички останали добавени към вашия сървър.", + "LabelRepositoryName": "Име на хранилището", + "LabelRepositoryUrl": "Адрес на хранилището", + "HeaderNewRepository": "Ново хранилище", + "MessageNoRepositories": "Няма хранилища.", + "EnableFasterAnimationsHelp": "Използвайте по-бързи анимации и преходи", + "EnableFasterAnimations": "Бързи анимации", + "EnableDecodingColorDepth10Vp9": "Включи 10 битово хардуерно декодиране за VP9", + "EnableDecodingColorDepth10Hevc": "Включи 10 битово хардуерно декодиране за HEVC", + "ButtonCast": "Стриймване", + "ButtonSyncPlay": "SyncPlay", + "TabRepositories": "Хранилища" } diff --git a/src/strings/ca.json b/src/strings/ca.json index df1cdf28f6..680be3ef77 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -818,5 +818,6 @@ "AllowFfmpegThrottling": "Transcodes de l’acceleració", "AllowOnTheFlySubtitleExtractionHelp": "Els subtítols incrustats es poden extreure de vídeos i entregar-los a clients en text senzill per tal d'evitar la transcodificació de vídeo. En alguns sistemes, això pot trigar molt i fer que la reproducció de vídeo s’aturi durant el procés d’extracció. Desactiveu-ho per tenir subtítols incrustats incrustats amb la transcodificació de vídeo quan no són compatibles amb el dispositiu client de forma nativa.", "AlbumArtist": "Album artista", - "Album": "Album" + "Album": "Album", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/strings/cs.json b/src/strings/cs.json index 45a4643012..013cb5543c 100644 --- a/src/strings/cs.json +++ b/src/strings/cs.json @@ -1200,7 +1200,7 @@ "Wednesday": "Středa", "WelcomeToProject": "Vítejte v Jellyfin!", "WizardCompleted": "To je zatím vše, co potřebujeme. Server Jellyfin začal shromažďovat informace o vaší knihovně médií. Vyzkoušejte některé z našich aplikací a potom klikněte na tlačítko Dokončit pro zobrazení nástěnky.", - "Writer": "Napsal", + "Writer": "Scénárista", "XmlDocumentAttributeListHelp": "Tyto atributy jsou použity na kořenový prvek každé XML odpovědi.", "XmlTvKidsCategoriesHelp": "Programy s těmito kategoriemi budou zobrazeny jako programy pro děti. Více kategorií oddělte \"|\".", "XmlTvMovieCategoriesHelp": "Programy s těmito kategoriemi budou zobrazeny jako filmy. Více kategorií oddělte \"|\".", @@ -1231,7 +1231,7 @@ "AutoBasedOnLanguageSetting": "Automaticky (na základě jazykového nastavení)", "Banner": "Výřez plakátu", "BestFit": "Nejvhodnější", - "Blacklist": "Černá listina", + "Blacklist": "Zakázat vše kromě výjimek", "BobAndWeaveWithHelp": "Bob and weave (vyšší kvalita, ale pomalejší)", "Browse": "Procházet", "BurnSubtitlesHelp": "Určuje, zda má server při překódování videa vypálit titulky do obrazu. Tato funkce má velký negativní vliv na výkon. Chcete-li vypálit grafické formáty titulků (VOBSUB, PGS, SUB, IDX, atd.) a některé titulky ASS nebo SSA, vyberte možnost Automaticky.", @@ -1488,7 +1488,7 @@ "Vertical": "Svisle", "VideoRange": "Rozsah videa", "ViewPlaybackInfo": "Zobrazení informací o přehrávání", - "Whitelist": "Bílá listina", + "Whitelist": "Povolit vše kromě výjimek", "HeaderHome": "Domů", "DashboardOperatingSystem": "Operační systém: {0}", "DashboardArchitecture": "Architektura: {0}", @@ -1635,7 +1635,7 @@ "EnableBlurhashHelp": "Nenačtené obrázky budou zobrazeny pomocí neurčitých zástupných obrázků", "EnableBlurhash": "Povolit zástupné obrázky", "ButtonCast": "Přehrát v zařízení", - "ButtonSyncPlay": "Synchronizace přehrávání", + "ButtonSyncPlay": "SyncPlay", "MessageNoGenresAvailable": "Povolit některým poskytovatelům metadat stahovat informace o žánrech z Internetu.", "EnableFasterAnimationsHelp": "Použít rychlejší animace a přechody", "EnableFasterAnimations": "Rychlejší animace", @@ -1648,5 +1648,7 @@ "LabelRepositoryUrlHelp": "Umístění manifestu repozitáře, který chcete zahrnout.", "LabelRepositoryUrl": "URL adresa repozitáře", "HeaderNewRepository": "Nový repozitář", - "MessageNoRepositories": "Neexistují žádné repozitáře." + "MessageNoRepositories": "Neexistují žádné repozitáře.", + "ButtonPlayer": "Přehrávač", + "Writers": "Scénáristé" } diff --git a/src/strings/da.json b/src/strings/da.json index 12b01f7da0..5e29e1574c 100644 --- a/src/strings/da.json +++ b/src/strings/da.json @@ -1608,5 +1608,6 @@ "Filter": "Filtrer", "New": "Nye", "ButtonTogglePlaylist": "Spilleliste", - "ButtonToggleContextMenu": "Mere" + "ButtonToggleContextMenu": "Mere", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/strings/el.json b/src/strings/el.json index 3137f8682a..24fd7c0934 100644 --- a/src/strings/el.json +++ b/src/strings/el.json @@ -1234,5 +1234,6 @@ "AllowFfmpegThrottlingHelp": "Όταν ένας διακωδικοποιητής ή remux φτάσει αρκετά μπροστά από την τρέχουσα θέση αναπαραγωγής, διακόψτε τη διαδικασία ώστε να καταναλώσει λιγότερους πόρους. Αυτό είναι πιο χρήσιμο όταν παρακολουθείτε χωρίς να αναζητάτε συχνά. Απενεργοποιήστε το εάν αντιμετωπίζετε προβλήματα αναπαραγωγής.", "ButtonTogglePlaylist": "Λίστα αναπαραγωγής", "ButtonToggleContextMenu": "Περισσότερα", - "ButtonSplit": "Διαχωρισμός" + "ButtonSplit": "Διαχωρισμός", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/strings/en-gb.json b/src/strings/en-gb.json index 34f50f8ebf..d9e6055d62 100644 --- a/src/strings/en-gb.json +++ b/src/strings/en-gb.json @@ -63,7 +63,7 @@ "Alerts": "Alerts", "All": "All", "AllChannels": "All channels", - "AllComplexFormats": "All complex formats (ASS, SSA, VOBSUB, PGS, SUB/IDX, etc.)", + "AllComplexFormats": "All Complex Formats (ASS, SSA, VOBSUB, PGS, SUB, IDX, …)", "AllEpisodes": "All episodes", "AllLanguages": "All languages", "AllLibraries": "All libraries", @@ -71,7 +71,7 @@ "AllowMediaConversion": "Allow media conversion", "AllowMediaConversionHelp": "Grant or deny access to the convert media feature.", "AllowOnTheFlySubtitleExtraction": "Allow subtitle extraction on the fly", - "AllowOnTheFlySubtitleExtractionHelp": "Embedded subtitles can be extracted from videos and delivered to clients in plain text in order to help prevent video transcoding. On some systems this can take a long time and cause video playback to stall during the extraction process. Disable this to have embedded subtitles burned in with video transcoding when they are not natively supported by the client device.", + "AllowOnTheFlySubtitleExtractionHelp": "Embedded subtitles can be extracted from videos and delivered to clients in plain text, in order to help prevent video transcoding. On some systems this can take a long time and cause video playback to stall during the extraction process. Disable this to have embedded subtitles burned in with video transcoding when they are not natively supported by the client device.", "AllowRemoteAccess": "Allow remote connections to this Jellyfin Server.", "AllowRemoteAccessHelp": "If unchecked, all remote connections will be blocked.", "AllowedRemoteAddressesHelp": "Comma separated list of IP addresses or IP/netmask entries for networks that will be allowed to connect remotely. If left blank, all remote addresses will be allowed.", @@ -79,7 +79,7 @@ "AlwaysPlaySubtitlesHelp": "Subtitles matching the language preference will be loaded regardless of the audio language.", "AnyLanguage": "Any Language", "Anytime": "Anytime", - "AroundTime": "Around {0}", + "AroundTime": "Around", "Art": "Art", "AsManyAsPossible": "As many as possible", "Ascending": "Ascending", @@ -100,7 +100,7 @@ "Box": "Box", "BoxRear": "Box (rear)", "Browse": "Browse", - "BurnSubtitlesHelp": "Determines if the server should burn in subtitles when transcoding videos. Avoiding this will greatly improve performance. Select Auto to burn image based formats (VOBSUB, PGS, SUB, IDX) and certain ASS or SSA subtitles.", + "BurnSubtitlesHelp": "Determines if the server should burn in subtitles when transcoding videos. Avoiding this will greatly improve performance. Select Auto to burn image based formats (VOBSUB, PGS, SUB, IDX, …) and certain ASS or SSA subtitles.", "ButtonAdd": "Add", "ButtonAddMediaLibrary": "Add Media Library", "ButtonAddScheduledTaskTrigger": "Add Trigger", @@ -719,7 +719,7 @@ "MessagePlayAccessRestricted": "Playback of this content is currently restricted. Please contact your server administrator for more information.", "MessagePasswordResetForUsers": "The following users have had their passwords reset. They can now sign in with the pin codes that were used to perform the reset.", "MessageNothingHere": "Nothing here.", - "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.", + "MessageNoTrailersFound": "Install the trailers channel to enhance your movie experience by adding a library of internet trailers.", "MessageNoServersAvailable": "No servers have been found using the automatic server discovery.", "MessageNoMovieSuggestionsAvailable": "No movie suggestions are currently available. Start watching and rating your movies, and then come back to view your recommendations.", "MessageNoAvailablePlugins": "No available plugins.", @@ -1245,7 +1245,7 @@ "LabelPasswordResetProvider": "Password Reset Provider:", "LabelPasswordConfirm": "Password (confirm):", "LabelOriginalTitle": "Original title:", - "LabelOptionalNetworkPathHelp": "If this folder is shared on your network, supplying the network share path can allow Jellyfin apps on other devices to access media files directly.", + "LabelOptionalNetworkPathHelp": "If this folder is shared on your network, supplying the network share path can allow Jellyfin apps on other devices to access media files directly. For example, {0} or {1}.", "LabelNumberOfGuideDaysHelp": "Downloading more days worth of guide data provides the ability to schedule out further in advance and view more listings, but it will also take longer to download. Auto will choose based on the number of channels.", "LabelNumberOfGuideDays": "Number of days of guide data to download:", "LabelNumber": "Number:", @@ -1513,5 +1513,66 @@ "ButtonTogglePlaylist": "Playlist", "ButtonToggleContextMenu": "More", "HeaderDVR": "DVR", - "ApiKeysCaption": "List of the currently enabled API keys" + "ApiKeysCaption": "List of the currently enabled API keys", + "ButtonCast": "Cast", + "ButtonSyncPlay": "SyncPlay", + "EnableBlurhashHelp": "Images that are still being loaded will be displayed with a blurred placeholder", + "EnableBlurhash": "Enable blurred placeholders for images", + "TabDVR": "DVR", + "TabRepositories": "Repositories", + "SyncPlayAccessHelp": "Select the level of access this user has to the SyncPlay feature. SyncPlay enables to sync playback with other devices.", + "ShowMore": "Show more", + "ShowLess": "Show less", + "SaveChanges": "Save changes", + "MessageSyncPlayErrorMedia": "Failed to enable SyncPlay! Media error.", + "MessageSyncPlayErrorMissingSession": "Failed to enable SyncPlay! Missing session.", + "MessageSyncPlayErrorNoActivePlayer": "No active player found. SyncPlay has been disabled.", + "MessageSyncPlayErrorAccessingGroups": "An error occurred while accessing groups list.", + "MessageSyncPlayLibraryAccessDenied": "Access to this content is restricted.", + "MessageSyncPlayJoinGroupDenied": "Permission required to use SyncPlay.", + "MessageSyncPlayCreateGroupDenied": "Permission required to create a group.", + "MessageSyncPlayGroupDoesNotExist": "Failed to join group because it does not exist.", + "MessageSyncPlayPlaybackPermissionRequired": "Playback permission required.", + "MessageSyncPlayNoGroupsAvailable": "No groups available. Start playing something first.", + "MessageSyncPlayGroupWait": "{0} is buffering...", + "MessageSyncPlayUserLeft": "{0} has left the group.", + "MessageSyncPlayUserJoined": "{0} has joined the group.", + "MessageSyncPlayDisabled": "SyncPlay disabled.", + "MessageSyncPlayEnabled": "SyncPlay enabled.", + "MessageNoGenresAvailable": "Enable some metadata providers to pull genres from the internet.", + "MessageAddRepository": "If you wish to add a repository, click the button next to the header and fill out the requested information.", + "LabelRepositoryNameHelp": "A custom name to distinguish this repository from any others added to your server.", + "LabelRepositoryName": "Repository Name", + "LabelRepositoryUrlHelp": "The location of the repository manifest you want to include.", + "LabelRepositoryUrl": "Repository URL", + "HeaderNewRepository": "New Repository", + "MessageNoRepositories": "No repositories.", + "LabelSyncPlayAccess": "SyncPlay access", + "LabelSyncPlayAccessNone": "Disabled for this user", + "LabelSyncPlayAccessJoinGroups": "Allow user to join groups", + "LabelSyncPlayAccessCreateAndJoinGroups": "Allow user to create and join groups", + "LabelSyncPlayLeaveGroupDescription": "Disable SyncPlay", + "LabelSyncPlayLeaveGroup": "Leave group", + "LabelSyncPlayNewGroupDescription": "Create a new group", + "LabelSyncPlayNewGroup": "New group", + "LabelSyncPlaySyncMethod": "Sync method:", + "LabelSyncPlayPlaybackDiff": "Playback time difference:", + "MillisecondsUnit": "ms", + "LabelSyncPlayTimeOffset": "Time offset with the server:", + "LabelRequireHttpsHelp": "If checked, the server will automatically redirect all requests over HTTP to HTTPS. This has no effect if the server is not listening on HTTPS.", + "LabelRequireHttps": "Require HTTPS", + "LabelNightly": "Nightly", + "LabelStable": "Stable", + "LabelChromecastVersion": "Chromecast Version", + "LabelEnableHttpsHelp": "Enables the server to listen on the configured HTTPS port. A valid certificate must also be configured in order for this to take effect.", + "LabelEnableHttps": "Enable HTTPS", + "HeaderSyncPlayEnabled": "SyncPlay enabled", + "HeaderSyncPlaySelectGroup": "Join a group", + "HeaderServerAddressSettings": "Server Address Settings", + "HeaderRemoteAccessSettings": "Remote Access Settings", + "HeaderHttpsSettings": "HTTPS Settings", + "EnableDetailsBannerHelp": "Display a banner image at the top of the item details page.", + "EnableDetailsBanner": "Details Banner", + "EnableDecodingColorDepth10Vp9": "Enable 10-Bit hardware decoding for VP9", + "EnableDecodingColorDepth10Hevc": "Enable 10-Bit hardware decoding for HEVC" } diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 8b94e9cec8..7df61c4c5d 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1535,6 +1535,7 @@ "Whitelist": "Whitelist", "WizardCompleted": "That's all we need for now. Jellyfin has begun collecting information about your media library. Check out some of our apps, and then click Finish to view the Dashboard.", "Writer": "Writer", + "Writers": "Writers", "XmlDocumentAttributeListHelp": "These attributes are applied to the root element of every XML response.", "XmlTvKidsCategoriesHelp": "Programs with these categories will be displayed as programs for children. Separate multiple with '|'.", "XmlTvMovieCategoriesHelp": "Programs with these categories will be displayed as movies. Separate multiple with '|'.", @@ -1561,5 +1562,6 @@ "EnableBlurhash": "Enable blurred placeholders for images", "EnableBlurhashHelp": "Images that are still being loaded will be displayed with a blurred placeholder", "ButtonSyncPlay": "SyncPlay", - "ButtonCast": "Cast" + "ButtonCast": "Cast", + "ButtonPlayer": "Player" } diff --git a/src/strings/eo.json b/src/strings/eo.json index 5f0e658efa..8c7fe70c07 100644 --- a/src/strings/eo.json +++ b/src/strings/eo.json @@ -1,5 +1,6 @@ { "AddToCollection": "Aldoni al kolekto", "Actor": "Aktoro", - "Absolute": "Absoluta" + "Absolute": "Absoluta", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/strings/es-ar.json b/src/strings/es-ar.json index 9758396693..b60e917112 100644 --- a/src/strings/es-ar.json +++ b/src/strings/es-ar.json @@ -8,13 +8,13 @@ "HeaderLiveTV": "TV en vivo", "HeaderSeries": "Series", "LabelAll": "Todo", - "LabelDisplayMissingEpisodesWithinSeasons": "Mostar capítulos no disponibles en temporadas", + "LabelDisplayMissingEpisodesWithinSeasons": "Mostrar capítulos no disponibles en temporadas", "LabelFinish": "Terminar", "LabelNext": "Siguiente", "LabelPrevious": "Anterior", "LabelYourFirstName": "Su nombre:", "LabelYoureDone": "Ha terminado!", - "MoreUsersCanBeAddedLater": "Más usuarios se pueden agregar más tarde dentro del panel.", + "MoreUsersCanBeAddedLater": "Se pueden agregar más usuarios más tarde desde el tablero.", "NewCollectionNameExample": "Ejemplo: Colección de Star Wars", "OptionMissingEpisode": "Capítulos faltantes", "OptionUnairedEpisode": "Capítulos no emitidos", @@ -22,13 +22,13 @@ "TabEpisodes": "Capítulos", "TellUsAboutYourself": "Contanos acerca de vos", "ThisWizardWillGuideYou": "Este asistente le ayudará a guiarlo durante el proceso de configuración. Para comenzar, seleccione su idioma preferido.", - "UserProfilesIntro": "Jellyfin incluye soporte integrado para los perfiles de usuario, lo que permite a cada usuario tener su propia configuración de pantalla, estado de reproducción y controles parentales.", + "UserProfilesIntro": "Jellyfin incluye soporte para perfiles de usuario con configuraciones de visualización granulares, estado de reproducción y controles parentales.", "ValueAudioCodec": "Códec de audio: {0}", "ValueCodec": "Códec: {0}", "ValueConditions": "Condiciones: {0}", "ValueVideoCodec": "Códec de video: {0}", "WelcomeToProject": "Bienvenidos a Jellyfin!", - "WizardCompleted": "Eso es todo lo que necesitamos por ahora. Jellyfin ha comenzado a recolectar información sobre su biblioteca de medios. Dale un vistazo a algunas de nuestras aplicaciones y, a continuación, hacé clic en Finalizar para ver el Panel de control del servidor.", + "WizardCompleted": "Eso es todo lo que necesitamos por ahora. Jellyfin ha comenzado a recopilar información sobre su biblioteca de medios. Consulte algunas de nuestras aplicaciones y luego haga clic en Finalizar para ver el Tablero.", "Albums": "Álbumes", "Artists": "Artistas", "Books": "Libros", @@ -68,7 +68,7 @@ "AllowMediaConversion": "Permitir conversión de medios", "AllowMediaConversionHelp": "Permitir o denegar acceso a la opción de convertir medios.", "AllowOnTheFlySubtitleExtraction": "Permitir extracción de subtítulos al vuelo", - "AllowOnTheFlySubtitleExtractionHelp": "Los subtítulos incrustados pueden extraerse de los videos y entregarse a los reproductores en texto plano para ayudar a evitar la transcodificación de video. En algunos sistemas, esto puede tardar mucho tiempo y provocar que la reproducción de video se detenga durante el proceso de extracción. Deshabilite esta opción para que los subtítulos incrustados se graben con transcodificación de video cuando no estén soportados de forma nativa por el dispositivo cliente.", + "AllowOnTheFlySubtitleExtractionHelp": "Los subtítulos incrustados se pueden extraer de los videos y entregar a los clientes en texto plano, para ayudar a evitar la transcodificación de videos. En algunos sistemas, esto puede llevar mucho tiempo y provocar que la reproducción de video se detenga durante el proceso de extracción. Deshabilite esto para que los subtítulos incrustados se graben con la transcodificación de video cuando el dispositivo cliente no los admite de forma nativa.", "AllowRemoteAccess": "Permitir conexiones remotas a este servidor Jellyfin.", "AllowRemoteAccessHelp": "Si no está tildado, todas las conexiones remotas serán bloqueadas.", "AlwaysPlaySubtitles": "Reproducir siempre", @@ -83,7 +83,7 @@ "AllowHWTranscodingHelp": "Permita que el sintonizador transcodifique transmisiones sobre la marcha. Esto puede ayudar a reducir la transcodificación requerida por el servidor.", "AllowedRemoteAddressesHelp": "Lista separada por comas de direcciones IP o IP/máscara de red para redes a las que se les permitirá conectarse de forma remota. Si se deja vacía, todas las direcciones remotas serán permitidas.", "AlwaysPlaySubtitlesHelp": "Los subtítulos que concuerden con la preferencia de idioma se cargarán independientemente del idioma del audio.", - "AroundTime": "Alrededor de {0}", + "AroundTime": "Alrededor", "Art": "Arte", "AsManyAsPossible": "Tantos como sea posible", "AspectRatio": "Relación de aspecto", @@ -97,12 +97,12 @@ "BirthPlaceValue": "Lugar de nacimiento: {0}", "Blacklist": "Lista negra", "BobAndWeaveWithHelp": "Bob and weave (mayor calidad, pero más lento)", - "BookLibraryHelp": "Los libros de texto y audio libros son soportados. Revise la {0}Guía para Nomenclatura de Libros{1}.", + "BookLibraryHelp": "Se admiten libros de audio y texto. Revise la {0}guía de nombres de libros {1}.", "Box": "Caja", "BoxRear": "Caja (lado opuesto)", "Browse": "Explorar", "BrowsePluginCatalogMessage": "Explore nuestro catálogo de complementos para ver los complementos disponibles.", - "BurnSubtitlesHelp": "Determina si el servidor debe grabar subtítulos al transcodificar videos. Evitar esto mejorará altamente el rendimiento del servidor. Seleccione Auto para grabar formatos basados en imágenes (VOBSUB, PGS, SUB/IDX) y ciertos subtítulos ASS o SSA.", + "BurnSubtitlesHelp": "Determina si el servidor debe grabarse en subtítulos al transcodificar videos. Evitar esto mejorará en gran medida el rendimiento. Seleccione Automático para grabar formatos basados en imágenes (VOBSUB, PGS, SUB, IDX, ...) y ciertos subtítulos ASS o SSA.", "ButtonAccept": "Aceptar", "ButtonAdd": "Agregar", "ButtonAddMediaLibrary": "Agregar biblioteca de medios", @@ -216,7 +216,7 @@ "ButtonSubmit": "Enviar", "ButtonSubtitles": "Subtítulos", "ButtonSync": "Sincronizar", - "ButtonTrailer": "Tráiler", + "ButtonTrailer": "Avance", "ButtonTryAgain": "Intentar de nuevo", "ButtonUninstall": "Desinstalar", "ButtonUnmute": "Desilenciar", @@ -241,7 +241,7 @@ "ChannelAccessHelp": "Selecciona los canales a compartir con este usuario. Los administradores podrán editar todos los canales con el administrador de metadatos.", "ChannelNameOnly": "Sólo canal {0}", "ChannelNumber": "Número del canal", - "CinemaModeConfigurationHelp": "El modo cine trae la experiencia del cine directamente a tu living, con la posibilidad de reproducir tráilers e introducciones personalizadas antes de la función principal.", + "CinemaModeConfigurationHelp": "El modo cine trae la experiencia del cine directamente a tu living, con la posibilidad de reproducir avances e introducciones personalizadas antes de la función principal.", "CinemaModeFeatureDescription": "El modo cine te da la verdadera experiencia del cine con tráilers e introducciones personalizadas antes de la función principal.", "CloudSyncFeatureDescription": "Sincroniza tus medios a la nube para respaldos, archivados y conversiones más fáciles.", "ColorPrimaries": "Colores primarios", @@ -305,7 +305,7 @@ "Display": "Pantalla", "DisplayInMyMedia": "Mostrar en la pantalla de inicio", "DisplayInOtherHomeScreenSections": "Mostrar en las secciones de la pantalla principal, como últimos medios y continuar viendo", - "DisplayMissingEpisodesWithinSeasons": "Mostrar episodios faltantes entre temporadas", + "DisplayMissingEpisodesWithinSeasons": "Mostrar capítulos faltantes entre temporadas", "DisplayMissingEpisodesWithinSeasonsHelp": "Esto también debe estar habilitado para las bibliotecas de TV en la configuración del servidor.", "DisplayModeHelp": "Seleccione el estilo de diseño que desea en la Interfaz.", "DoNotRecord": "No grabar", @@ -318,15 +318,15 @@ "Downloads": "Descargas", "DownloadsValue": "{0} descargas", "DrmChannelsNotImported": "Canales con DRM no van a ser importados.", - "DropShadow": "Sombra paralela", + "DropShadow": "Dejar sombra", "DvrFeatureDescription": "Agendar grabaciones individuales de TV en vivo, grabaciones de series y mucho mas con Jellyfin DVR.", "DvrSubscriptionRequired": "Jellyfin DVR requiere una suscripción a Jellyfin Premiere.", - "EasyPasswordHelp": "Su código PIN fácil se utiliza para el acceso sin conexión en los clientes compatibles y también puede utilizarse para acceder fácilmente cuando se está en la misma red.", + "EasyPasswordHelp": "Su código PIN fácil se usa para acceder sin conexión a clientes compatibles y también se puede usar para iniciar sesión fácilmente en la red.", "Edit": "Editar", "EditImages": "Editar imagenes", "EditMetadata": "Editar metadata", "EditSubtitles": "Editar subtitulos", - "EnableBackdrops": "Imágenes de fondo", + "EnableBackdrops": "Fondos", "EnableBackdropsHelp": "Muestra imágenes de fondo en el fondo de algunas páginas mientras se navega por la biblioteca.", "EnableCinemaMode": "Modo cine", "EnableColorCodedBackgrounds": "Habilitar colores en el fondo del código", @@ -337,9 +337,9 @@ "EnableDebugLoggingHelp": "El registro de depuración debería activarse solo a fin de solucionar problemas. El incremento en el acceso al sistema de archivos podría prevenir que el servidor entre en modo de suspensión en algunos entornos.", "EnableDisplayMirroring": "Habilitar duplicación de la pantalla", "EnableExternalVideoPlayers": "Habilitar reproductores de video externos", - "EnableExternalVideoPlayersHelp": "Se mostrará un menú de reproductor externo al iniciar la reproducción de video", + "EnableExternalVideoPlayersHelp": "Se mostrará un menú de reproductor externo al iniciar la reproducción de video.", "EnableNextVideoInfoOverlay": "Mostrar la información del siguiente video durante la reproducción", - "EnableNextVideoInfoOverlayHelp": "Al finalizar un video, mostrar información sobre el siguiente vídeo en la lista de reproducción", + "EnableNextVideoInfoOverlayHelp": "Al final de un video, muestra información sobre el próximo video que aparece en la lista de reproducción actual.", "EnablePhotos": "Mostrar fotografías", "EnablePhotosHelp": "Las imágenes serán detectadas y mostradas junto con otros archivos multimedia.", "EnableStreamLooping": "Repetir automáticamente transmisiones en vivo", @@ -350,7 +350,7 @@ "EnableThemeVideosHelp": "Al habilitarse, los vídeos de tema se reproducirán de fondo mientras navegues por la biblioteca.", "Ended": "Finalizado", "EndsAtValue": "Termina en {0}", - "Episodes": "Episodios", + "Episodes": "Capítulos", "ErrorAddingListingsToSchedulesDirect": "Ocurrió un error al añadir el alineamiento a tu cuenta de Schedules Direct. Schedules Direct solo permite una cantidad limitada de alineamientos por cuenta. Quizás necesites ingresar al sitio de Schedules Direct y eliminar otros alineamientos de tu cuenta antes de continuar.", "ErrorAddingMediaPathToVirtualFolder": "Ocurrió un error al agregar la ruta de medios. Por favor, asegurate que la ruta es válida y que el proceso que sirve Jellyfin tiene acceso a esa ubicación.", "ErrorAddingTunerDevice": "Ocurrió un error al añadir el dispositivo sintonizador. Por favor asegurate que está disponible e intenta de nuevo.", @@ -392,7 +392,7 @@ "GuideProviderSelectListings": "Seleccionar Listados", "HeaderFavoriteSongs": "Canciones favoritas", "HeaderFavoriteShows": "Programas favoritos", - "HeaderFavoriteEpisodes": "Episodios favoritos", + "HeaderFavoriteEpisodes": "Capítulos favoritos", "HeaderFavoriteArtists": "Artistas favoritos", "HeaderFavoriteAlbums": "Álbumes favoritos", "Shows": "Programas", @@ -409,12 +409,12 @@ "HeaderBooks": "Libros", "HeaderBlockItemsWithNoRating": "Bloquear elementos con rating de información vacía o no reconocible:", "HeaderAutomaticUpdates": "Actualizaciones Automáticas", - "HeaderAudioSettings": "Configuración del Audio", + "HeaderAudioSettings": "Configuraciones de audio", "HeaderAudioBooks": "Audiolibros", "HeaderAppearsOn": "Aparece en", "HeaderApp": "Aplicación", - "HeaderApiKeysHelp": "Las aplicaciones externas requieren una llave API para poder comunicarse con el servidor Jellyfin. Las llaves se emiten iniciando sesión con una cuenta Jellyfin u otorgando manualmente una clave a la aplicación.", - "HeaderApiKeys": "Llaves API", + "HeaderApiKeysHelp": "Se requiere que las aplicaciones externas tengan una clave de API para comunicarse con el servidor Jellyfin. Las claves se emiten iniciando sesión con una cuenta Jellyfin, u otorgando manualmente una clave a la aplicación.", + "HeaderApiKeys": "Claves de API", "HeaderApiKey": "Contraseña API", "HeaderAllowMediaDeletionFrom": "Permitir el borrado de medios desde", "HeaderAlert": "Alerta", @@ -428,14 +428,14 @@ "HeaderActivity": "Actividad", "HeaderActiveRecordings": "Grabaciones activas", "HeaderActiveDevices": "Dispositivos activos", - "HeaderAccessScheduleHelp": "Crear un calendario de acceso, para limitar el acceso en determinadas horas.", - "HeaderAccessSchedule": "Acceder al Calendario", + "HeaderAccessScheduleHelp": "Cree un horario de acceso para limitar el acceso a ciertas horas.", + "HeaderAccessSchedule": "Horario de acceso", "HardwareAccelerationWarning": "Habilitar la aceleración de hardware puede causar inestabilidad en algunos entornos. Asegúrese de que su sistema operativo y los controladores de vídeo estén completamente actualizados. Si tiene dificultades para reproducir el vídeo después de habilitarlo, deberá volver a cambiar la configuración a \"Nada\".", "HandledByProxy": "Manejado por un proxy reverso", "HDPrograms": "Programas en HD", "EncoderPresetHelp": "Elige un valor más rápido para mejorar el desempeño, o elige un valor más lento para mejorar la calidad.", "FetchingData": "Obteniendo información adicional", - "Episode": "Episodio", + "Episode": "Capítulo", "Yesterday": "Ayer", "ClientSettings": "Configuración de cliente", "BoxSet": "Colección", @@ -469,10 +469,10 @@ "HeaderFavoriteBooks": "Libros favoritos", "HeaderExternalIds": "IDs externos:", "HeaderError": "Error", - "HeaderEpisodes": "Episodios", + "HeaderEpisodes": "Capítulos", "HeaderEnabledFields": "Campos habilitados", "HeaderEditImages": "Editar imágenes", - "HeaderEasyPinCode": "Pin sencillo", + "HeaderEasyPinCode": "Código PIN fácil", "HeaderDownloadSync": "Descargar y sincronizar", "HeaderDisplay": "Pantalla", "HeaderDirectPlayProfile": "Perfil Direct Play", @@ -599,7 +599,7 @@ "HeaderStatus": "Estado", "HeaderStartNow": "Empezar ahora", "HeaderSpecialFeatures": "Características especiales", - "HeaderSpecialEpisodeInfo": "Información especial del episodio", + "HeaderSpecialEpisodeInfo": "Información especial del capítulo", "HeaderSortOrder": "Orden de clasificación", "HeaderSortBy": "Ordenar por", "HeaderShutdown": "Apagar", @@ -641,7 +641,7 @@ "HeaderPluginInstallation": "Instalación de complementos", "HeaderPleaseSignIn": "Por favor, inicie sesión", "HeaderNextVideoPlayingInValue": "Reproducción del siguiente video en {0}", - "HeaderNextEpisodePlayingInValue": "Reproducción del siguiente episodio en {0}", + "HeaderNextEpisodePlayingInValue": "Reproducción del siguiente capítulo en {0}", "HeaderMoreLikeThis": "Más como esto", "HeaderMetadataSettings": "Configuraciones de metadatos", "HeaderMediaInfo": "Información de medios", @@ -686,7 +686,7 @@ "LabelCertificatePasswordHelp": "Si su certificado requiere una contraseña, ingrésela aquí.", "LabelCertificatePassword": "Contraseña del certificado:", "LabelCancelled": "Cancelado", - "LabelCachePath": "Ruta de caché:", + "LabelCachePath": "Ruta a la caché:", "LabelCache": "Caché:", "LabelBurnSubtitles": "Grabar subtítulos:", "LabelAudioBitDepth": "Profundidad de bits de audio:", @@ -724,13 +724,13 @@ "LabelBaseUrl": "URL base:", "LabelEveryXMinutes": "Cada:", "LabelEvent": "Evento:", - "LabelEpisodeNumber": "Número de episodio:", + "LabelEpisodeNumber": "Número de capítulo:", "LabelEndDate": "Fecha final:", "LabelEnableSingleImageInDidlLimitHelp": "Algunos dispositivos no se procesarán correctamente si se incrustan varias imágenes en Didl.", "LabelEnableSingleImageInDidlLimit": "Limitar a una sola imagen incrustada", "LabelEnableRealtimeMonitorHelp": "Los cambios en los archivos se procesarán de inmediato, en los sistemas de archivos compatibles.", "LabelEnableRealtimeMonitor": "Habilitar monitoreo en tiempo real", - "LabelEnableHttpsHelp": "Habilita que el servidor escuche en el puerto HTTPS configurado. También se debe configurar un certificado válido para que esto surta efecto.", + "LabelEnableHttpsHelp": "Permite que el servidor escuche en el puerto HTTPS configurado. También se debe configurar un certificado válido para que esto surta efecto.", "LabelEnableHttps": "Habilitar HTTPS", "LabelEnableHardwareDecodingFor": "Habilite la decodificación por hardware para:", "LabelEnableDlnaServerHelp": "Permite a los dispositivos UPnP en su red navegar y reproducir contenido.", @@ -791,11 +791,864 @@ "LabelAlbumArtMaxWidth": "Ancho máximo de la carátula del álbum:", "LabelAlbumArtMaxHeightHelp": "Resolución máxima de la carátula del álbum expuesta a través de upnp:albumArtURI.", "LabelAlbumArtMaxHeight": "Altura máxima de la carátula del álbum:", - "ImportMissingEpisodesHelp": "Si está habilitado, la información sobre episodios faltantes se importará a su base de datos Jellyfin y se mostrará dentro de temporadas y series. Esto puede causar escaneos de bibliotecas significativamente más largos.", + "ImportMissingEpisodesHelp": "Si está habilitado, la información sobre capítulos faltantes se importará a su base de datos Jellyfin y se mostrará dentro de temporadas y series. Esto puede causar escaneos de bibliotecas significativamente más largos.", "HeaderSyncPlayEnabled": "SyncPlay habilitado", "HeaderSyncPlaySelectGroup": "Unirse a un grupo", "HeaderResponseProfileHelp": "Los perfiles de respuesta proporcionan una forma de personalizar la información enviada al dispositivo cuando se reproducen ciertos tipos de medios.", "HeaderKodiMetadataHelp": "Para habilitar o deshabilitar metadatos NFO, edite una biblioteca en la configuración de la biblioteca Jellyfin y localice la sección de ahorradores de metadatos.", "EnableDetailsBannerHelp": "Muestra una imagen de la pancarta en la parte superior de la página de detalles del elemento.", - "EnableDetailsBanner": "Detalles de la pancarta" + "EnableDetailsBanner": "Detalles de la pancarta", + "EnableDecodingColorDepth10Vp9": "Habilitar la decodificación por hardware de VP9 de 10-Bit", + "EnableDecodingColorDepth10Hevc": "Habilitar la decodificación por hardware de HEVC de 10-Bit", + "LabelKodiMetadataEnableExtraThumbsHelp": "Al descargar imágenes, se pueden guardar en extrafanart y extrathumbs para obtener la máxima compatibilidad con Kodi.", + "LabelKodiMetadataEnableExtraThumbs": "Copiar extrafanart al campo extrathumbs", + "LabelKodiMetadataDateFormatHelp": "Todas las fechas dentro de los archivos NFO se analizarán usando este formato.", + "LabelKodiMetadataDateFormat": "Formato de fecha de lanzamiento:", + "LabelKidsCategories": "Categorías de niños:", + "LabelKeepUpTo": "Mantente al día con:", + "LabelInternetQuality": "Calidad de internet:", + "LabelDeathDate": "Fecha de muerte:", + "HeaderTypeImageFetchers": "{0} Buscadores de imágenes", + "LabelSyncPlayNewGroupDescription": "Crea un nuevo grupo", + "LabelSyncPlayNewGroup": "Nuevo grupo", + "LabelSyncPlaySyncMethod": "Método de sincronización:", + "LabelSyncPlayPlaybackDiff": "Diferencia horaria de reproducción:", + "MillisecondsUnit": "ms", + "LabelSyncPlayTimeOffset": "Compensación horaria con el servidor:", + "LabelSupportedMediaTypes": "Tipos de medios soportados:", + "LabelSubtitles": "Subtítulos", + "LabelSubtitlePlaybackMode": "Modo de subtítulos:", + "LabelSubtitleFormatHelp": "Ejemplo: srt", + "LabelSubtitleDownloaders": "Descargadores de subtítulos:", + "LabelStreamType": "Tipo de transmisión:", + "LabelStopping": "Deteniendo", + "LabelStatus": "Estado:", + "LabelSportsCategories": "Categorías de deportes:", + "LabelSpecialSeasonsDisplayName": "Nombre de la temporada especial:", + "LabelSource": "Fuente:", + "LabelSoundEffects": "Efectos de sonido:", + "LabelSortTitle": "Ordenar título:", + "LabelSortOrder": "Orden de clasificación:", + "LabelSortBy": "Ordenar por:", + "LabelSonyAggregationFlagsHelp": "Determina el contenido del elemento aggregationFlags en el espacio de nombres urn:schemas-sonycom:av.", + "LabelSonyAggregationFlags": "Banderas de agregación de Sony:", + "LabelSkipIfGraphicalSubsPresentHelp": "Mantener versiones de texto de subtítulos dará como resultado una entrega más eficiente y disminuirá la probabilidad de transcodificación de video.", + "LabelSkipIfGraphicalSubsPresent": "Omita si el video ya contiene subtítulos incrustados", + "LabelSkipIfAudioTrackPresentHelp": "Desmarque esto para asegurarse de que todos los videos tengan subtítulos, independientemente del idioma de audio.", + "LabelSkipIfAudioTrackPresent": "Omita si la pista de audio predeterminada coincide con el idioma de descarga", + "LabelSkipBackLength": "Saltar de nuevo la longitud:", + "LabelSkin": "Piel:", + "LabelSize": "Tamaño:", + "LabelSimultaneousConnectionLimit": "Límite de transmisiones simultáneas:", + "LabelServerName": "Nombre del servidor:", + "LabelServerHostHelp": "192.168.1.100:8096 o https://miservidor.com", + "LabelServerHost": "Host:", + "LabelSeriesRecordingPath": "Ruta de grabación de la serie (opcional):", + "LabelSerialNumber": "Número de serie", + "LabelSendNotificationToUsers": "Enviar la notificación a:", + "LabelSelectVersionToInstall": "Seleccione la versión para instalar:", + "LabelSelectUsers": "Seleccionar usuarios:", + "LabelSelectFolderGroupsHelp": "Las carpetas que no están marcadas se mostrarán por sí mismas en su propia vista.", + "LabelSelectFolderGroups": "Agrupe automáticamente el contenido de las siguientes carpetas en vistas como Películas, Música y TV:", + "LabelSeasonNumber": "Número de temporada:", + "EnableFasterAnimationsHelp": "Usa animaciones y transiciones más rápidas", + "EnableFasterAnimations": "Animaciones más rápidas", + "LabelScreensaver": "Salvapantallas:", + "LabelScheduledTaskLastRan": "Última ejecución {0}, tomando {1}.", + "LabelSaveLocalMetadataHelp": "Guardar las ilustraciones en carpetas de medios las colocará en un lugar donde puedan editarse fácilmente.", + "LabelSaveLocalMetadata": "Guardar ilustraciones en carpetas de medios", + "LabelRuntimeMinutes": "Tiempo de ejecución (minutos):", + "LabelRequireHttps": "Requerir HTTPS", + "LabelRemoteClientBitrateLimit": "Límite de velocidad de transmisión en Internet (Mbps):", + "LabelReleaseDate": "Fecha de lanzamiento:", + "LabelRefreshMode": "Modo de actualización:", + "LabelRecordingPathHelp": "Especifique la ubicación predeterminada para guardar grabaciones. Si se deja vacío, se utilizará la carpeta de datos del programa del servidor.", + "LabelRecordingPath": "Ruta de grabación predeterminada:", + "LabelRecord": "Grabar:", + "LabelReasonForTranscoding": "Motivo de la transcodificación:", + "LabelReadHowYouCanContribute": "Aprende cómo puedes contribuir.", + "LabelPublicHttpsPortHelp": "El número de puerto público que debe asignarse al puerto HTTPS local.", + "LabelPublicHttpsPort": "Número de puerto HTTPS público:", + "LabelPublicHttpPortHelp": "El número de puerto público que debe asignarse al puerto HTTP local.", + "LabelPublicHttpPort": "Número de puerto HTTP público:", + "LabelProtocolInfoHelp": "El valor que se utilizará al responder a las solicitudes GetProtocolInfo del dispositivo.", + "LabelProtocolInfo": "Información del protocolo:", + "LabelProtocol": "Protocolo:", + "LabelProfileVideoCodecs": "Códecs de video:", + "LabelProfileContainersHelp": "Separado por coma. Esto se puede dejar vacío para aplicar a todos los contenedores.", + "LabelProfileContainer": "Contenedor:", + "LabelProfileCodecsHelp": "Separado por coma. Esto puede dejarse vacío para aplicar a todos los códecs.", + "LabelProfileCodecs": "Códecs:", + "LabelProfileAudioCodecs": "Códecs de audio:", + "LabelPreferredSubtitleLanguage": "Idioma de subtítulos preferido:", + "LabelPreferredDisplayLanguageHelp": "La traducción de Jellyfin es un proyecto en curso.", + "LabelPreferredDisplayLanguage": "Idioma de visualización preferido:", + "LabelPostProcessorArgumentsHelp": "Use {ruta} como la ruta al archivo de grabación.", + "LabelPostProcessorArguments": "Argumentos de la línea de comando del post-procesador:", + "LabelPostProcessor": "Aplicación de postprocesamiento:", + "LabelPleaseRestart": "Los cambios surtirán efecto después de volver a cargar manualmente el cliente web.", + "LabelPlayMethod": "Método de reproducción:", + "LabelPlaylist": "Lista de reproducción:", + "LabelPlayerDimensions": "Dimensiones del reproductor:", + "LabelPlayer": "Reproductor:", + "LabelPlayDefaultAudioTrack": "Reproduce la pista de audio predeterminada independientemente del idioma", + "LabelPlaceOfBirth": "Lugar de nacimiento:", + "LabelPersonRoleHelp": "Ejemplo: conductor de camión de helados", + "LabelPersonRole": "Rol:", + "LabelPath": "Ruta:", + "LabelPasswordRecoveryPinCode": "Código PIN:", + "LabelPasswordResetProvider": "Proveedor de restablecimiento de contraseña:", + "LabelPasswordConfirm": "Contraseña (confirmación):", + "LabelPassword": "Contraseña:", + "LabelParentalRating": "Calificación parental:", + "LabelParentNumber": "Número parental:", + "LabelOverview": "Visión general:", + "LabelOriginalTitle": "Título original:", + "LabelOriginalAspectRatio": "Relación de aspecto original:", + "LabelOptionalNetworkPathHelp": "Si esta carpeta se comparte en su red, el suministro de la ruta compartida de la red puede permitir que las aplicaciones Jellyfin en otros dispositivos accedan directamente a los archivos multimedia. Por ejemplo, {0} o {1}.", + "LabelOptionalNetworkPath": "(Opcional) Carpeta de red compartida:", + "LabelNumberOfGuideDaysHelp": "La descarga de datos de la guía por más días proporciona la capacidad de programar con mayor anticipación y ver más listados, pero también tomará más tiempo descargarlos. Auto elegirá en función de la cantidad de canales.", + "LabelNumberOfGuideDays": "Número de días de datos de guía para descargar:", + "LabelNumber": "Número:", + "LabelNotificationEnabled": "Habilitar esta notificación", + "LabelNewsCategories": "Categorías de noticias:", + "LabelNewPasswordConfirm": "Nueva contraseña confirmada:", + "LabelNewPassword": "Nueva contraseña:", + "LabelNewName": "Nuevo nombre:", + "LabelNightly": "Nocturna", + "LabelStable": "Estable", + "LabelChromecastVersion": "Versión de Chromecast", + "LabelName": "Nombre:", + "LabelMusicStreamingTranscodingBitrateHelp": "Especifique una tasa de bits máxima cuando transmita música.", + "LabelMusicStreamingTranscodingBitrate": "Velocidad de bits de transcodificación de música:", + "LabelMovieRecordingPath": "Ruta de grabación de películas (opcional):", + "LabelMoviePrefixHelp": "Si se aplica un prefijo a los títulos de las películas, ingréselo aquí para que el servidor pueda manejarlo correctamente.", + "LabelMoviePrefix": "Prefijo de película:", + "LabelMovieCategories": "Categorías de películas:", + "LabelMonitorUsers": "Monitorear la actividad de:", + "LabelModelUrl": "URL del modelo", + "LabelModelNumber": "Número de modelo", + "LabelModelName": "Nombre del modelo", + "LabelModelDescription": "Descripción del modelo", + "LabelMinScreenshotDownloadWidth": "Ancho mínimo de descarga de captura de pantalla:", + "LabelMinResumePercentageHelp": "Se supone que los títulos no se reproducen si se detienen antes de este momento.", + "LabelMinResumePercentage": "Porcentaje mínimo de reanudación:", + "LabelMinResumeDurationHelp": "La duración de video más corta en segundos que guardará la ubicación de reproducción y le permitirá reanudar.", + "LabelMinResumeDuration": "Duración mínima de la reanudación:", + "LabelMinBackdropDownloadWidth": "Ancho mínimo de descarga de fondo:", + "LabelMethod": "Método:", + "LabelMetadataSaversHelp": "Elija los formatos de archivo para guardar sus metadatos.", + "LabelMetadataSavers": "Ahorradores de metadatos:", + "LabelMetadataReadersHelp": "Clasifique sus fuentes de metadatos locales preferidas en orden de prioridad. Se leerá el primer archivo encontrado.", + "LabelMetadataReaders": "Lectores de metadatos:", + "LabelMetadataPathHelp": "Especifique una ubicación personalizada para las ilustraciones y los metadatos descargados.", + "LabelMetadataPath": "Ruta a los metadatos:", + "LabelMetadataDownloadersHelp": "Habilite y clasifique sus descargadores de metadatos preferidos en orden de prioridad. Los descargadores de menor prioridad solo se utilizarán para completar la información que falta.", + "LabelMetadataDownloadLanguage": "Idioma de descarga preferido:", + "LabelMetadata": "Metadatos:", + "LabelMessageTitle": "Título del mensaje:", + "LabelMessageText": "Mensaje de texto:", + "LabelMaxStreamingBitrateHelp": "Especifique una tasa de bits máxima al transmitir.", + "LabelMaxStreamingBitrate": "Máxima calidad de transmisión:", + "LabelMaxScreenshotsPerItem": "Número máximo de capturas de pantalla por elemento:", + "LabelMaxResumePercentageHelp": "Se asume que los títulos fueron vistos si se detienen después de este tiempo.", + "LabelMaxResumePercentage": "Porcentaje máximo de reanudación:", + "LabelMaxParentalRating": "Calificación parental máxima permitida:", + "LabelMaxChromecastBitrate": "Calidad de transmisión del Chromecast:", + "LabelMaxBackdropsPerItem": "Número máximo de fondos por artículo:", + "LabelManufacturerUrl": "URL del fabricante", + "LabelManufacturer": "Fabricante:", + "LabelLogs": "Registros:", + "LabelLoginDisclaimerHelp": "Un mensaje que se mostrará en la parte inferior de la página de inicio de sesión.", + "LabelLockItemToPreventChanges": "Bloquee este elemento para evitar futuros cambios", + "LabelLocalHttpServerPortNumberHelp": "El número de puerto TCP al que debe unirse al servidor Jellyfin mediante HTTP.", + "LabelLocalHttpServerPortNumber": "Número de puerto HTTP local:", + "LabelLibraryPageSize": "Tamaño de página de la biblioteca:", + "LabelLanguage": "Idioma:", + "LabelLanNetworks": "Redes LAN:", + "OptionBlockBooks": "Libros", + "OptionBanner": "Pancarta", + "OptionAutomaticallyGroupSeriesHelp": "Si está habilitado, las series que se distribuyen en varias carpetas dentro de esta biblioteca se fusionarán automáticamente en una sola serie.", + "OptionAutomaticallyGroupSeries": "Combinar automáticamente series que se extienden a través de múltiples carpetas", + "OptionAutomatic": "Auto", + "OptionAuto": "Auto", + "OptionAscending": "Ascendente", + "OptionArtist": "Artista", + "OptionAllowVideoPlaybackTranscoding": "Permitir reproducción de video que requiere transcodificación", + "OptionAllowVideoPlaybackRemuxing": "Permitir reproducción de video que requiere conversión sin volver a codificar", + "OptionAllowUserToManageServer": "Permitir a este usuario administrar el servidor", + "OptionAllowSyncTranscoding": "Permitir la descarga y sincronización de medios que requieren transcodificación", + "OptionAllowRemoteSharedDevicesHelp": "Los dispositivos DLNA se consideran compartidos hasta que un usuario comienza a controlarlos.", + "OptionAllowRemoteSharedDevices": "Permitir el control remoto de dispositivos compartidos", + "OptionAllowRemoteControlOthers": "Permitir el control remoto de otros usuarios", + "OptionAllowMediaPlaybackTranscodingHelp": "Restringir el acceso a la transcodificación puede causar fallas de reproducción en las aplicaciones Jellyfin debido a formatos de medios no compatibles.", + "OptionAllowMediaPlayback": "Permitir reproducción de medios", + "OptionAllowManageLiveTv": "Permitir la administración de grabaciones de TV en vivo", + "OptionAllowLinkSharingHelp": "Solo se comparten páginas web que contienen información de medios. Los archivos multimedia nunca se comparten públicamente. Las acciones tienen un límite de tiempo y caducarán después de {0} días.", + "OptionAllowLinkSharing": "Permitir compartir en redes sociales", + "OptionAllowContentDownloading": "Permitir la descarga y sincronización de medios", + "OptionAllowBrowsingLiveTv": "Permitir el acceso a TV en vivo", + "OptionForceRemoteSourceTranscoding": "Forzar la transcodificación de fuentes de medios remotos (como LiveTV)", + "OptionAllowAudioPlaybackTranscoding": "Permitir reproducción de audio que requiere transcodificación", + "OptionAllUsers": "Todos los usuarios", + "OptionAlbumArtist": "Artista del álbum", + "OptionAlbum": "Álbum", + "OptionAdminUsers": "Administradores", + "Option3D": "3D", + "OnlyImageFormats": "Solo formatos de imagen (VOBSUB, PGS, SUB)", + "OnlyForcedSubtitlesHelp": "Solo se cargarán los subtítulos marcados como forzados.", + "OnlyForcedSubtitles": "Solo forzado", + "OneChannel": "Un canal", + "Off": "Apagado", + "NumLocationsValue": "{0} carpetas", + "Normal": "Normal", + "None": "Nunguno", + "NoSubtitlesHelp": "Los subtítulos no se cargarán de manera predeterminada. Todavía se pueden activar manualmente durante la reproducción.", + "NoSubtitles": "Ninguno", + "NoSubtitleSearchResultsFound": "No se han encontrado resultados.", + "NoPluginConfigurationMessage": "Este complemento no tiene opciones para configurar.", + "NoNextUpItemsMessage": "Nada encontrado. ¡Comienza a ver tus shows!", + "NoNewDevicesFound": "No se encontraron nuevos dispositivos. Para agregar un nuevo sintonizador, cierre este cuadro de diálogo e ingrese la información del dispositivo manualmente.", + "NoCreatedLibraries": "Parece que todavía no has creado ninguna biblioteca. {0}¿Te gustaría crear una ahora?{1}", + "No": "No", + "NextUp": "Siguiente", + "Next": "Siguiente", + "News": "Noticias", + "NewEpisodesOnly": "Solo capítulos nuevos", + "NewEpisodes": "Nuevos capítulos", + "NewCollectionHelp": "Las colecciones le permiten crear agrupaciones personalizadas de películas y otro contenido de la biblioteca.", + "NewCollection": "Nueva colección", + "Never": "Nunca", + "Name": "Nombre", + "MySubtitles": "Mis subtítulos", + "Mute": "Silenciar", + "MusicVideo": "Video musical", + "MusicArtist": "Artista musical", + "MusicAlbum": "Álbum de música", + "Movie": "Película", + "MoveRight": "Mover a la derecha", + "MoveLeft": "Mover a la izquierda", + "MoreMediaInfo": "Información de medios", + "MoreFromValue": "Más de {0}", + "Monday": "Lunes", + "Mobile": "Móvil", + "MinutesBefore": "minutos antes", + "MinutesAfter": "minutos después", + "MetadataSettingChangeHelp": "Cambiar la configuración de metadatos afectará el contenido nuevo que se agrega en el futuro. Para actualizar el contenido existente, abra la pantalla de detalles y haga clic en el botón actualizar, o realice actualizaciones masivas utilizando el administrador de metadatos.", + "MetadataManager": "Administrador de metadatos", + "Metadata": "Metadatos", + "MessageSyncPlayErrorMedia": "¡Error al habilitar SyncPlay! Error de medios.", + "MessageSyncPlayErrorMissingSession": "¡Error al habilitar SyncPlay! Falta sesión.", + "MessageSyncPlayErrorNoActivePlayer": "No se ha encontrado ningún reproductor activo. SyncPlay ha sido deshabilitado.", + "MessageSyncPlayErrorAccessingGroups": "Se produjo un error al acceder a la lista de grupos.", + "MessageSyncPlayLibraryAccessDenied": "El acceso a este contenido está restringido.", + "MessageSyncPlayJoinGroupDenied": "Se requiere permiso para usar SyncPlay.", + "MessageSyncPlayCreateGroupDenied": "Se requiere permiso para crear un grupo.", + "MessageSyncPlayGroupDoesNotExist": "No se pudo unir al grupo porque no existe.", + "MessageSyncPlayPlaybackPermissionRequired": "Se requiere permiso de reproducción.", + "MessageSyncPlayNoGroupsAvailable": "No hay grupos disponibles. Comienza a reproducir algo primero.", + "MessageSyncPlayGroupWait": "{0} está almacenando...", + "MessageSyncPlayUserLeft": "{0} ha abandonado el grupo.", + "MessageSyncPlayUserJoined": "{0} se ha unido al grupo.", + "MessageSyncPlayDisabled": "SyncPlay deshabilitado.", + "MessageSyncPlayEnabled": "SyncPlay habilitado.", + "MessageYouHaveVersionInstalled": "Actualmente tiene instalada la versión {0}.", + "MessageUnsetContentHelp": "El contenido se mostrará como carpetas simples. Para obtener mejores resultados, use el administrador de metadatos para configurar los tipos de contenido de las subcarpetas.", + "MessageUnableToConnectToServer": "No podemos conectarnos al servidor seleccionado en este momento. Asegúrese de que se esté ejecutando e intente nuevamente.", + "MessageTheFollowingLocationWillBeRemovedFromLibrary": "Las siguientes ubicaciones de medios se eliminarán de su biblioteca:", + "MessageSettingsSaved": "Configuraciones guardadas.", + "MessageReenableUser": "Ver abajo para volver a habilitar", + "MessagePluginInstallDisclaimer": "Los complementos creados por miembros de la comunidad Jellyfin son una excelente manera de mejorar su experiencia Jellyfin con características y beneficios adicionales. Antes de la instalación, tenga en cuenta los efectos que pueden tener en su servidor Jellyfin, como escaneos de bibliotecas más largos, procesamiento en segundo plano adicional y disminución de la estabilidad del sistema.", + "MessagePluginConfigurationRequiresLocalAccess": "Para configurar este complemento, inicie sesión directamente en su servidor local.", + "MessagePleaseWait": "Por favor espere. Esto puede tardar un minuto.", + "MessagePleaseEnsureInternetMetadata": "Asegúrese de que la descarga de metadatos de Internet esté habilitada.", + "MessagePlayAccessRestricted": "La reproducción de este contenido está actualmente restringida. Póngase en contacto con el administrador del servidor para obtener más información.", + "MessagePasswordResetForUsers": "Los siguientes usuarios han restablecido sus contraseñas. Ahora pueden iniciar sesión con los códigos PIN que se usaron para realizar el restablecimiento.", + "MessageNothingHere": "Nada aquí.", + "MessageNoTrailersFound": "Instale el canal de avances para mejorar su experiencia cinematográfica agregando una biblioteca de avances de Internet.", + "MessageNoServersAvailable": "No se han encontrado servidores con el descubrimiento automático de servidores.", + "MessageNoPluginsInstalled": "No tienes complementos instalados.", + "MessageNoMovieSuggestionsAvailable": "Actualmente no hay sugerencias de películas disponibles. Comienza a ver y calificar tus películas y luego vuelve a ver tus recomendaciones.", + "MessageNoGenresAvailable": "Permitir a algunos proveedores de metadatos extraer géneros de Internet.", + "MessageNoCollectionsAvailable": "Las colecciones le permiten disfrutar de agrupaciones personalizadas de películas, series y álbumes. Haga clic en el botón + para comenzar a crear colecciones.", + "MessageAddRepository": "Si desea agregar un repositorio, haga clic en el botón al lado del encabezado y complete la información solicitada.", + "LabelRepositoryNameHelp": "Un nombre personalizado para distinguir este repositorio de cualquier otro agregado a su servidor.", + "LabelRepositoryName": "Nombre del repositorio", + "LabelRepositoryUrlHelp": "La ubicación del manifiesto del repositorio que desea incluir.", + "LabelRepositoryUrl": "URL del repositorio", + "HeaderNewRepository": "Nuevo repositorio", + "MessageNoRepositories": "Sin repositorios.", + "MessageNoAvailablePlugins": "No hay complementos disponibles.", + "MessageLeaveEmptyToInherit": "Deje en blanco para heredar la configuración de un elemento primario o el valor predeterminado global.", + "MessageItemsAdded": "Artículos añadidos.", + "MessageItemSaved": "Artículo guardado.", + "MessageUnauthorizedUser": "No tiene autorización para acceder al servidor en este momento. Póngase en contacto con el administrador del servidor para obtener más información.", + "MessageInvalidUser": "Usuario o contraseña inválidos. Inténtalo de nuevo.", + "MessageInvalidForgotPasswordPin": "Se ingresó un código PIN no válido o caducado. Inténtalo de nuevo.", + "MessageInstallPluginFromApp": "Este complemento debe instalarse desde la aplicación en la que desea utilizarlo.", + "MessageImageTypeNotSelected": "Seleccione un tipo de imagen del menú desplegable.", + "MessageImageFileTypeAllowed": "Solo se admiten archivos JPEG y PNG.", + "MessageForgotPasswordInNetworkRequired": "Intente nuevamente dentro de su red doméstica para iniciar el proceso de restablecimiento de contraseña.", + "MessageForgotPasswordFileCreated": "El siguiente archivo se ha creado en su servidor y contiene instrucciones sobre cómo proceder:", + "MessageFileReadError": "Se produjo un error al leer el archivo. Inténtalo de nuevo.", + "MessageEnablingOptionLongerScans": "Habilitar esta opción puede resultar en escaneos de biblioteca significativamente más largos.", + "MessageDownloadQueued": "Descarga en cola.", + "MessageDirectoryPickerLinuxInstruction": "Para Linux en Arch Linux, CentOS, Debian, Fedora, openSUSE o Ubuntu, debe otorgar al usuario del servicio al menos acceso de lectura a sus ubicaciones de almacenamiento.", + "MessageDirectoryPickerBSDInstruction": "Para BSD, es posible que deba configurar el almacenamiento dentro de su jaula (Jail) FreeNAS para permitir que Jellyfin acceda a él.", + "MessageDeleteTaskTrigger": "¿Estás seguro de que desea eliminar este activador de tarea?", + "MessageCreateAccountAt": "Cree una cuenta en {0}", + "MessageContactAdminToResetPassword": "Póngase en contacto con el administrador del sistema para restablecer su contraseña.", + "MessageConfirmShutdown": "¿Está seguro de que desea apagar el servidor?", + "MessageConfirmRevokeApiKey": "¿Está seguro de que desea revocar esta clave de API? La conexión de la aplicación al servidor Jellyfin se cerrará abruptamente.", + "MessageConfirmRestart": "¿Está seguro de que desea reiniciar el servidor Jellyfin?", + "MessageConfirmRemoveMediaLocation": "¿Estás seguro de que deseas eliminar esta ubicación?", + "MessageConfirmRecordingCancellation": "¿Cancelar grabación?", + "MessageConfirmProfileDeletion": "¿Estás seguro de que deseas eliminar este perfil?", + "MessageConfirmDeleteTunerDevice": "¿Estás seguro de que deseas eliminar este dispositivo?", + "MessageConfirmDeleteGuideProvider": "¿Está seguro de que desea eliminar este proveedor de guías?", + "MessageConfirmAppExit": "¿Quieres salir?", + "MessageAreYouSureYouWishToRemoveMediaFolder": "¿Estás seguro de que deseas eliminar esta carpeta multimedia?", + "MessageAreYouSureDeleteSubtitles": "¿Estás seguro de que deseas eliminar este archivo de subtítulos?", + "MessageAlreadyInstalled": "Esta versión ya está instalada.", + "Menu": "Menú", + "MediaIsBeingConverted": "Los medios se están convirtiendo a un formato compatible con el dispositivo que los reproduce.", + "MediaInfoStreamTypeVideo": "Video", + "MediaInfoStreamTypeSubtitle": "Subtítulo", + "MediaInfoStreamTypeEmbeddedImage": "Imagen incrustada", + "MediaInfoStreamTypeData": "Data", + "MediaInfoStreamTypeAudio": "Audio", + "MediaInfoSoftware": "Software", + "MediaInfoTimestamp": "Marca de tiempo", + "MediaInfoSize": "Tamaño", + "MediaInfoSampleRate": "Frecuencia de muestreo", + "MediaInfoResolution": "Resolución", + "MediaInfoRefFrames": "Marcos de referencia", + "MediaInfoProfile": "Perfil", + "MediaInfoPixelFormat": "Formato de píxeles", + "MediaInfoPath": "Ruta", + "MediaInfoLevel": "Nivel", + "MediaInfoLayout": "Diseño", + "MediaInfoLanguage": "Idioma", + "MediaInfoInterlaced": "Entrelazado", + "MediaInfoFramerate": "Cuadros por segundo", + "MediaInfoForced": "Forzado", + "MediaInfoExternal": "Externo", + "MediaInfoDefault": "Predeterminado", + "MediaInfoContainer": "Contenedor", + "MediaInfoCodecTag": "Etiqueta de códec", + "MediaInfoCodec": "Códec", + "MediaInfoChannels": "Canales", + "MediaInfoBitrate": "Tasa de bits", + "MediaInfoBitDepth": "Profundidad de bits", + "MediaInfoAspectRatio": "Relación de aspecto", + "MediaInfoAnamorphic": "Anamórfico", + "MaxParentalRatingHelp": "El contenido con una calificación más alta estará oculto para este usuario.", + "MapChannels": "Canales de mapas", + "ManageRecording": "Administrar grabación", + "ManageLibrary": "Administrar biblioteca", + "Logo": "Logo", + "LiveTV": "TV en vivo", + "LiveBroadcasts": "Transmisiones en vivo", + "Live": "En vivo", + "List": "Lista", + "LinksValue": "Enlaces: {0}", + "Like": "Me gusta", + "LeaveBlankToNotSetAPassword": "Puede dejar este campo en blanco para no establecer una contraseña.", + "LearnHowYouCanContribute": "Aprende cómo puedes contribuir.", + "LaunchWebAppOnStartup": "Iniciar la interfaz web al iniciar el servidor", + "LatestFromLibrary": "Últimos {0}", + "Large": "Grande", + "LabelffmpegPathHelp": "La ruta al archivo de la aplicación ffmpeg o la carpeta que contiene ffmpeg.", + "LabelffmpegPath": "Ruta de FFmpeg:", + "LabelZipCode": "Código postal:", + "LabelYear": "Año:", + "LabelWeb": "Web:", + "LabelVideoResolution": "Resolución de video:", + "LabelVideoCodec": "Códec de vídeo:", + "LabelVideoBitrate": "Tasa de bits de video:", + "LabelVideo": "Video", + "DashboardArchitecture": "Arquitectura: {0}", + "DashboardOperatingSystem": "Sistema operativo: {0}", + "DashboardServerName": "Servidor: {0}", + "DashboardVersionNumber": "Versión: {0}", + "LabelVersionInstalled": "{0} instalado", + "LabelVersion": "Versión:", + "LabelValue": "Valor:", + "LabelVaapiDeviceHelp": "Este es el nodo de representación que se utiliza para la aceleración por hardware.", + "LabelUsername": "Nombre de usuario:", + "LabelUserRemoteClientBitrateLimitHelp": "Anule el valor global predeterminado establecido en la configuración de reproducción del servidor.", + "LabelUserLoginAttemptsBeforeLockout": "Intentos de inicio de sesión fallidos antes de que el usuario quede bloqueado:", + "LabelUserLibraryHelp": "Seleccione qué biblioteca de usuario mostrar al dispositivo. Deje en blanco para heredar la configuración predeterminada.", + "LabelUserLibrary": "Biblioteca de usuario:", + "LabelUserAgent": "Agente de usuario:", + "LabelUser": "Usuario:", + "LabelUseNotificationServices": "Utiliza los siguientes servicios:", + "LabelTypeText": "Texto", + "LabelTypeMetadataDownloaders": "{0} descargadores de metadatos:", + "LabelType": "Tipo:", + "LabelTunerType": "Tipo de sintonizador:", + "LabelTunerIpAddress": "Dirección IP del sintonizador:", + "LabelTriggerType": "Tipo de disparador:", + "LabelTranscodingVideoCodec": "Códec de vídeo:", + "LabelTranscodingThreadCountHelp": "Elija el número máximo de hilos para usar al transcodificar. Reducir el recuento de hilos disminuirá el uso de la CPU, pero es posible que no se convierta lo suficientemente rápido para una experiencia de reproducción fluida.", + "LabelTranscodingThreadCount": "Conteo de hilos de transcodificación:", + "LabelTranscodingProgress": "Progreso de transcodificación:", + "LabelTranscodingFramerate": "Velocidad de fotogramas de transcodificación:", + "LabelTranscodes": "Transcodificaciones:", + "LabelTranscodingTempPathHelp": "Especifique una ruta personalizada para los archivos de transcodificación servidos a los clientes. Déjelo en blanco para usar el servidor predeterminado.", + "LabelTranscodePath": "Ruta para las transcodificaciones:", + "LabelTranscodingContainer": "Contenedor:", + "LabelTranscodingAudioCodec": "Códec de audio:", + "LabelTrackNumber": "Número de pista:", + "LabelTitle": "Título:", + "LabelTimeLimitHours": "Límite de tiempo (horas):", + "LabelTime": "Hora:", + "LabelTheme": "Tema:", + "LabelTextSize": "Tamaño del texto:", + "LabelTextColor": "Color de texto:", + "LabelTextBackgroundColor": "Color de fondo del texto:", + "LabelTagline": "Lema:", + "LabelTag": "Etiqueta:", + "LabelTVHomeScreen": "Pantalla de inicio del modo TV:", + "LabelSyncPlayAccess": "Acceso SyncPlay", + "LabelSyncPlayAccessNone": "Deshabilitado para este usuario", + "LabelSyncPlayAccessJoinGroups": "Permitir al usuario unirse a grupos", + "LabelSyncPlayAccessCreateAndJoinGroups": "Permitir al usuario crear y unirse a grupos", + "LabelSyncPlayLeaveGroupDescription": "Deshabilitar SyncPlay", + "LabelSyncPlayLeaveGroup": "Dejar grupo", + "OptionEnableForAllTuners": "Habilitar para todos los dispositivos sintonizadores", + "OptionEnableExternalContentInSuggestionsHelp": "Permita que se incluyan avances de Internet y programas de TV en vivo dentro del contenido sugerido.", + "OptionEnableExternalContentInSuggestions": "Habilitar contenido externo en sugerencias", + "OptionEnableAccessToAllLibraries": "Habilite el acceso a todas las bibliotecas", + "OptionEnableAccessToAllChannels": "Habilita el acceso a todos los canales", + "OptionEnableAccessFromAllDevices": "Habilite el acceso desde todos los dispositivos", + "OptionEmbedSubtitles": "Incrustar dentro del contenedor", + "OptionDvd": "DVD", + "OptionDownloadThumbImage": "Pulgar", + "OptionDownloadPrimaryImage": "Primario", + "OptionDownloadMenuImage": "Menú", + "OptionDownloadLogoImage": "Logo", + "OptionDownloadImagesInAdvanceHelp": "Por defecto, la mayoría de las imágenes solo se descargan cuando lo solicita una aplicación Jellyfin. Active esta opción para descargar todas las imágenes de antemano, ya que se importan nuevos medios. Esto puede causar escaneos de biblioteca significativamente más largos.", + "OptionDownloadImagesInAdvance": "Descargar imágenes por adelantado", + "OptionDownloadDiscImage": "Disco", + "OptionDownloadBoxImage": "Caja", + "OptionDownloadBannerImage": "Pancarta", + "OptionDownloadBackImage": "Volver", + "OptionDownloadArtImage": "Arte", + "OptionDisplayFolderViewHelp": "Mostrar carpetas junto con sus otras bibliotecas de medios. Esto puede ser útil si desea tener una vista de carpeta simple.", + "OptionDisplayFolderView": "Mostrar una vista de carpeta para mostrar carpetas de medios simples", + "OptionDislikes": "No me gustas", + "OptionDisableUserHelp": "Si está deshabilitado, el servidor no permitirá ninguna conexión de este usuario. Las conexiones existentes se terminarán abruptamente.", + "OptionDisableUser": "Deshabilitar este usuario", + "OptionDescending": "Descendente", + "OptionDatePlayed": "Fecha de reproducción", + "OptionDateAddedImportTime": "Use la fecha escaneada en la biblioteca", + "OptionDateAddedFileTime": "Usar fecha de creación de archivo", + "OptionDateAdded": "Fecha agregada", + "OptionDaily": "Diario", + "OptionCustomUsers": "Personalizado", + "OptionCriticRating": "Valoración crítica", + "OptionContinuing": "Continuo", + "OptionCommunityRating": "Calificación de la comunidad", + "OptionCaptionInfoExSamsung": "CaptionInfoEx (Samsung)", + "OptionBluray": "Blu-ray", + "OptionBlockTvShows": "Programas de televisión", + "OptionBlockTrailers": "Avances", + "OptionBlockMusic": "Música", + "OptionBlockMovies": "Películas", + "OptionBlockLiveTvChannels": "Canales de TV en vivo", + "OptionBlockChannelContent": "Contenido del canal de internet", + "MusicLibraryHelp": "Revise la {0}guía de nomenclatura musical{1}.", + "MovieLibraryHelp": "Revise la {0}guía de nombres de películas{1}.", + "LibraryAccessHelp": "Seleccione las bibliotecas para compartir con este usuario. Los administradores podrán editar todas las carpetas con el administrador de metadatos.", + "LaunchWebAppOnStartupHelp": "Abra el cliente web en su navegador web predeterminado cuando el servidor arranque inicialmente. Esto no ocurrirá cuando use la función de reinicio del servidor.", + "LanNetworksHelp": "Lista separada por comas de direcciones IP o entradas de IP/máscara de red para redes que se considerarán en la red local cuando se impongan restricciones de ancho de banda. Si se establece, todas las demás direcciones IP se considerarán en la red externa y estarán sujetas a las restricciones de ancho de banda externo. Si se deja en blanco, solo se considera que la subred del servidor está en la red local.", + "LabelXDlnaDocHelp": "Determina el contenido del elemento X_DLNADOC en el espacio de nombres urn:schemas-dlna-org:device-1-0.", + "LabelXDlnaDoc": "Doc. X-DLNA:", + "LabelXDlnaCapHelp": "Determina el contenido del elemento X_DLNACAP en el espacio de nombres urn:schemas-dlna-org:device-1-0.", + "LabelXDlnaCap": "Tapa X-DLNA:", + "LabelVaapiDevice": "Dispositivo VA API:", + "LabelStopWhenPossible": "Detener cuando sea posible:", + "LabelStartWhenPossible": "Iniciar cuando sea posible:", + "LabelRequireHttpsHelp": "Si se marca, el servidor redirigirá automáticamente todas las solicitudes a través de HTTP a HTTPS. Esto no tiene efecto si el servidor no está escuchando en HTTPS.", + "LabelRemoteClientBitrateLimitHelp": "Un límite opcional de velocidad de bits por flujo para todos los dispositivos fuera de la red. Esto es útil para evitar que los dispositivos soliciten una tasa de bits superior a la que puede manejar su conexión a Internet. Esto puede aumentar la carga de la CPU en su servidor para transcodificar videos sobre la marcha a una tasa de bits más baja.", + "LabelMatchType": "Tipo de concordancia:", + "LabelLoginDisclaimer": "Descargo de responsabilidad de inicio de sesión:", + "LabelLineup": "Alineación:", + "LabelLibraryPageSizeHelp": "Establece la cantidad de elementos para mostrar en una página de biblioteca. Establezca a 0 para deshabilitar la paginación.", + "LabelKodiMetadataUserHelp": "Guarde los datos de observación en archivos NFO para que otras aplicaciones los utilicen.", + "LabelKodiMetadataUser": "Guarde los datos de observación del usuario en archivos NFO para:", + "LabelKodiMetadataSaveImagePathsHelp": "Esto se recomienda si tiene nombres de archivos de imágenes que no cumplen con las pautas de Kodi.", + "LabelKodiMetadataSaveImagePaths": "Guardar rutas de imagen dentro de archivos nfo", + "LabelKodiMetadataEnablePathSubstitutionHelp": "Permite la sustitución de rutas de imágenes utilizando la configuración de sustitución de rutas del servidor.", + "LabelKodiMetadataEnablePathSubstitution": "Habilitar sustitución de ruta", + "LabelInNetworkSignInWithEasyPasswordHelp": "Use el código PIN fácil para iniciar sesión en clientes dentro de su red local. Su contraseña habitual sólo será necesaria fuera de casa. Si el código PIN se deja en blanco, no necesitará una contraseña dentro de su red doméstica.", + "LabelAlbumArtPN": "Art PN de álbum:", + "LabelAlbumArtHelp": "PN utilizado para la carátula del álbum, dentro del atributo dlna:profileID en upnp:albumArtURI. Algunos dispositivos requieren un valor específico, independientemente del tamaño de la imagen.", + "LabelAirsBeforeSeason": "Aires antes de la temporada:", + "LabelAirsBeforeEpisode": "Aires antes del capítulo:", + "LabelAirsAfterSeason": "Aires después de la temporada:", + "OptionEnableM2tsMode": "Habilitar el modo M2ts", + "ReleaseDate": "Fecha de lanzamiento", + "RefreshQueued": "Actualizar cola.", + "RefreshMetadata": "Actualizar metadatos", + "RefreshDialogHelp": "Los metadatos se actualizan en función de la configuración y los servicios de Internet que están habilitados en el panel del servidor Jellyfin.", + "Refresh": "Actualizar", + "Recordings": "Grabaciones", + "RecordingScheduled": "Grabación programada.", + "RecordingPathChangeMessage": "Cambiar su carpeta de grabación no migrará las grabaciones existentes de la ubicación anterior a la nueva. Tendrá que moverlos manualmente si lo desea.", + "RecordingCancelled": "Grabación cancelada.", + "RecordSeries": "Grabar series", + "Record": "Grabar", + "RecommendationStarring": "Protagonizada por {0}", + "RecommendationDirectedBy": "Dirigido por {0}", + "RecommendationBecauseYouWatched": "Porque viste {0}", + "RecommendationBecauseYouLike": "Porque te gusta {0}", + "RecentlyWatched": "Recientemente visto", + "Rate": "Velocidad", + "Raised": "Elevado", + "QueueAllFromHere": "Hacer cola todo desde aquí", + "Quality": "Calidad", + "Programs": "Programas", + "ProductionLocations": "Ubicaciones de producción", + "Producer": "Productor", + "Primary": "Primario", + "Previous": "Anterior", + "Premieres": "Estrenos", + "Premiere": "Estreno", + "PreferEmbeddedEpisodeInfosOverFileNames": "Prefiere la información incrustada del capítulo sobre los nombres de archivo", + "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Esto usa la información de los metadatos incrustados del capítulo si está disponible.", + "PreferEmbeddedTitlesOverFileNamesHelp": "Esto determina el título de visualización predeterminado cuando no hay metadatos de Internet o metadatos locales disponibles.", + "PreferEmbeddedTitlesOverFileNames": "Preferir títulos incrustados sobre nombres de archivo", + "PluginInstalledMessage": "El complemento se ha instalado correctamente. El servidor Jellyfin deberá reiniciarse para que los cambios surtan efecto.", + "PleaseSelectTwoItems": "Seleccione al menos dos elementos.", + "PleaseRestartServerName": "Reinicie el servidor Jellyfin - {0}.", + "PleaseEnterNameOrId": "Por favor, introduzca un nombre o una ID externa.", + "PleaseConfirmPluginInstallation": "Haga clic en Aceptar para confirmar que ha leído lo anterior y desea continuar con la instalación del complemento.", + "PleaseAddAtLeastOneFolder": "Agregue al menos una carpeta a esta biblioteca haciendo clic en el botón Agregar.", + "Played": "Reproducido", + "PlaybackErrorNoCompatibleStream": "Este cliente no es compatible con los medios y el servidor no envía un formato de medios compatible.", + "PlayNextEpisodeAutomatically": "Reproducir el próximo capítulo automáticamente", + "PlayNext": "Reproducir siguiente", + "PlayFromBeginning": "Reproducir desde el principio", + "PlayCount": "Cuenta de reproducciones", + "PlaybackData": "Datos de reproducción", + "PlayAllFromHere": "Reproducir todo desde aquí", + "Play": "Reproducir", + "PlaceFavoriteChannelsAtBeginning": "Colocar los canales favoritos al principio", + "PinCodeResetConfirmation": "¿Estás seguro de que deseas restablecer el código PIN?", + "PinCodeResetComplete": "El código pin ha sido restablecido.", + "PictureInPicture": "Imagen en imagen", + "Person": "Persona", + "PerfectMatch": "Combinación perfecta", + "People": "Personas", + "PasswordSaved": "Contraseña guardada.", + "PasswordResetProviderHelp": "Elija un proveedor de restablecimiento de contraseña para usar cuando este usuario solicite un restablecimiento de contraseña", + "PasswordResetHeader": "Restablecer contraseña", + "PasswordResetConfirmation": "¿Estás seguro de que deseas restablecer la contraseña?", + "PasswordResetComplete": "La contraseña ha sido restablecida.", + "PasswordMatchError": "La contraseña y la confirmación de la contraseña deben coincidir.", + "PackageInstallFailed": "La instalación de {0} (versión {1}) falló.", + "PackageInstallCompleted": "Instalación {0} (versión {1}) completada.", + "PackageInstallCancelled": "Instalación de {0} (versión {1}) cancelada.", + "Overview": "Visión general", + "OtherArtist": "Otro artista", + "OriginalAirDateValue": "Fecha de emisión original: {0}", + "OptionWeekly": "Semanal", + "OptionWeekends": "Fines de semana", + "OptionWeekdays": "Días de la semana", + "OptionWednesday": "Miércoles", + "OptionWakeFromSleep": "Despertarse del sueño", + "OptionUnplayed": "No reproducido", + "OptionTvdbRating": "Calificación de TVDB", + "OptionTuesday": "Martes", + "OptionTrackName": "Nombre de la pista", + "OptionThumbCard": "Tarjeta del pulgar", + "OptionThumb": "Pulgar", + "OptionThursday": "Jueves", + "OptionSunday": "Domingo", + "OptionSubstring": "Subcadena", + "OptionSpecialEpisode": "Especiales", + "OptionSaveMetadataAsHiddenHelp": "Cambiar esto se aplicará a los nuevos metadatos guardados en el futuro. Los archivos de metadatos existentes se actualizarán la próxima vez que el servidor Jellyfin los guarde.", + "OptionSaveMetadataAsHidden": "Guardar metadatos e imágenes como archivos ocultos", + "OptionSaturday": "Sábado", + "OptionRuntime": "Tiempo de ejecución", + "OptionResumable": "Reanudable", + "OptionResElement": "elemento res", + "OptionRequirePerfectSubtitleMatchHelp": "Requerir una combinación perfecta filtrará los subtítulos para incluir solo aquellos que han sido probados y verificados con su archivo de video exacto. Desmarcar esto aumentará la probabilidad de que se descarguen los subtítulos, pero aumentará las posibilidades de texto de subtítulos incorrecto o incorrecto.", + "OptionRequirePerfectSubtitleMatch": "Descargar solo subtítulos que coincidan perfectamente con mis archivos de video", + "OptionReportByteRangeSeekingWhenTranscodingHelp": "Esto es necesario para algunos dispositivos que no buscan el tiempo muy bien.", + "OptionReportByteRangeSeekingWhenTranscoding": "Informe que el servidor admite la búsqueda de bytes al transcodificar", + "OptionReleaseDate": "Fecha de lanzamiento", + "OptionRegex": "Regex", + "OptionRandom": "Aleatorio", + "OptionProtocolHttp": "HTTP", + "OptionProtocolHls": "Transmisión en vivo HTTP", + "OptionProfileVideoAudio": "Video Audio", + "OptionProfileVideo": "Video", + "OptionProfilePhoto": "Foto", + "OptionProfileAudio": "Audio", + "OptionPremiereDate": "Fecha de estreno", + "OptionPosterCard": "Tarjeta de póster", + "OptionPoster": "Póster", + "OptionPlayed": "Reproducido", + "OptionPlayCount": "Cuento de reproducciones", + "OptionPlainVideoItemsHelp": "Si está habilitado, todos los videos se representan en DIDL como \"object.item.videoItem\" en lugar de un tipo más específico, como \"object.item.videoItem.movie\".", + "OptionPlainVideoItems": "Mostrar todos los videos como elementos de video simples", + "OptionPlainStorageFoldersHelp": "Si está habilitado, todas las carpetas se representan en DIDL como \"object.container.storageFolder\" en lugar de un tipo más específico, como \"object.container.person.musicArtist\".", + "OptionPlainStorageFolders": "Mostrar todas las carpetas como carpetas de almacenamiento sin formato", + "OptionParentalRating": "Calificación parental", + "OptionOnInterval": "En un intervalo", + "OptionOnAppStartup": "En el inicio de la aplicación", + "OptionNone": "Ninguno", + "OptionNew": "Nuevo…", + "OptionNameSort": "Nombre", + "OptionMonday": "Lunes", + "OptionMax": "Máx.", + "OptionLoginAttemptsBeforeLockoutHelp": "Un valor de cero significa heredar el valor predeterminado de tres intentos para usuarios normales y cinco para administradores. Establecer esto en -1 deshabilitará la función.", + "OptionLoginAttemptsBeforeLockout": "Determina cuántos intentos de inicio de sesión incorrectos se pueden realizar antes de que ocurra el bloqueo.", + "OptionList": "Lista", + "OptionLikes": "Me gustas", + "OptionIsSD": "SD", + "OptionIsHD": "HD", + "OptionImdbRating": "Calificación de IMDb", + "OptionIgnoreTranscodeByteRangeRequestsHelp": "Si está habilitado, estas solicitudes serán atendidas pero ignorarán el encabezado del rango de bytes.", + "OptionIgnoreTranscodeByteRangeRequests": "Ignorar las solicitudes de rango de bytes de transcodificación", + "OptionHomeVideos": "Fotos", + "OptionHlsSegmentedSubtitles": "Subtítulos segmentados HLS", + "OptionHideUserFromLoginHelp": "Útil para cuentas de administrador privadas u ocultas. El usuario deberá iniciar sesión manualmente ingresando su nombre de usuario y contraseña.", + "OptionHideUser": "Ocultar a este usuario de las pantallas de inicio de sesión", + "OptionHasTrailer": "Avance", + "OptionHasThemeVideo": "Video temático", + "OptionHasThemeSong": "Tema musical", + "OptionHasSubtitles": "Subtítulos", + "OptionHasSpecialFeatures": "Características especiales", + "OptionFriday": "Viernes", + "OptionFavorite": "Favoritos", + "OptionExtractChapterImage": "Habilitar la extracción de imágenes de capítulos", + "OptionExternallyDownloaded": "Descarga externa", + "OptionEveryday": "Cada día", + "OptionEstimateContentLength": "Estimar la longitud del contenido al transcodificar", + "OptionEquals": "Igual a", + "OptionEnded": "Terminó", + "OptionEnableM2tsModeHelp": "Habilite el modo m2ts al codificar en mpegts.", + "ReplaceExistingImages": "Reemplazar imágenes existentes", + "ReplaceAllMetadata": "Reemplazar todos los metadatos", + "RepeatOne": "Repetir uno", + "RepeatMode": "Modo de repetición", + "RepeatEpisodes": "Repetir capítulos", + "RepeatAll": "Repetir todo", + "Repeat": "Repetir", + "RemoveFromPlaylist": "Eliminar de la lista de reproducción", + "RemoveFromCollection": "Eliminar de la colección", + "RememberMe": "Recuérdame", + "ReleaseGroup": "Grupo de lanzamiento", + "ButtonCast": "Transmitir", + "ButtonSyncPlay": "SyncPlay", + "EnableBlurhashHelp": "Las imágenes que aún se están cargando se mostrarán con un marcador de posición borroso", + "EnableBlurhash": "Habilitar marcadores de posición borrosos para imágenes", + "OnApplicationStartup": "En el inicio de la aplicación", + "EveryXHours": "Cada {0} horas", + "EveryHour": "Cada hora", + "EveryXMinutes": "Cada {0} minutos", + "OnWakeFromSleep": "Al despertar del sueño", + "WeeklyAt": "{0}s en {1}", + "DailyAt": "Diariamente en {0}", + "LastSeen": "Visto por última vez {0}", + "PersonRole": "como {0}", + "ListPaging": "{0}-{1} de {2}", + "WriteAccessRequired": "El servidor Jellyfin requiere acceso de escritura a esta carpeta. Asegúrese del acceso de escritura e intente nuevamente.", + "PathNotFound": "La ruta no se pudo encontrar. Asegúrese de que la ruta sea válida e intente nuevamente.", + "Yes": "Sí", + "YadifBob": "YADIF Bob", + "Yadif": "YADIF", + "XmlTvSportsCategoriesHelp": "Los programas con estas categorías se mostrarán como programas deportivos. Separe múltiples con '|'.", + "XmlTvPathHelp": "Una ruta a un archivo XMLTV. Jellyfin leerá este archivo y lo revisará periódicamente en busca de actualizaciones. Usted es responsable de crear y actualizar el archivo.", + "XmlTvNewsCategoriesHelp": "Los programas con estas categorías se mostrarán como programas de noticias. Separe múltiples con '|'.", + "XmlTvMovieCategoriesHelp": "Los programas con estas categorías se mostrarán como películas. Separe múltiples con '|'.", + "XmlTvKidsCategoriesHelp": "Los programas con estas categorías se mostrarán como programas para niños. Separe múltiples con '|'.", + "XmlDocumentAttributeListHelp": "Estos atributos se aplican al elemento raíz de cada respuesta XML.", + "Writer": "Escritor", + "Whitelist": "Lista blanca", + "Wednesday": "Miércoles", + "Watched": "Visto", + "ViewPlaybackInfo": "Ver información de reproducción", + "ViewArtist": "Ver artista", + "ViewAlbum": "Ver álbum", + "VideoRange": "Rango de video", + "Vertical": "Vertical", + "ValueTimeLimitSingleHour": "Límite de tiempo: 1 hora", + "ValueTimeLimitMultiHour": "Límite de tiempo: {0} horas", + "ValueSongCount": "{0} canciones", + "ValueSeriesCount": "{0} series", + "ValueSeconds": "{0} segundos", + "ValueOneSong": "1 canción", + "ValueOneSeries": "1 serie", + "ValueOneMusicVideo": "1 video musical", + "ValueOneMovie": "1 película", + "ValueOneAlbum": "1 álbum", + "ValueMusicVideoCount": "{0} videos musicales", + "ValueMovieCount": "{0} películas", + "ValueMinutes": "{0} min", + "ValueOneEpisode": "1 capítulo", + "ValueEpisodeCount": "{0} capítulos", + "ValueDiscNumber": "Disco {0}", + "ValueContainer": "Contenedor: {0}", + "ValueAlbumCount": "{0} álbumes", + "UserAgentHelp": "Proporcione un encabezado HTTP de agente de usuario personalizado.", + "Upload": "Subir", + "Up": "Subir arriba", + "Unrated": "Sin calificación", + "Unplayed": "No reproducido", + "Unmute": "Dejar de silenciar", + "UninstallPluginHeader": "Desinstalar complemento", + "UninstallPluginConfirmation": "¿Estás seguro de que deseas desinstalar {0}?", + "Uniform": "Uniforme", + "TvLibraryHelp": "Revise la {0}guía de nombres de TV{1}.", + "Tuesday": "Martes", + "Transcoding": "Transcodificación", + "TrackCount": "{0} pistas", + "Track": "Pista", + "TitlePlayback": "Reproducción", + "TitleHostingSettings": "Configuraciones de alojamiento", + "TitleHardwareAcceleration": "Aceleración por hardware", + "Thursday": "Jueves", + "Thumb": "Pulgar", + "TheseSettingsAffectSubtitlesOnThisDevice": "Esta configuración afecta los subtítulos en este dispositivo", + "ThemeVideos": "Videos temáticos", + "ThemeSongs": "Canciones temáticas", + "TagsValue": "Etiquetas: {0}", + "Tags": "Etiquetas", + "TabUsers": "Usuarios", + "TabUpcoming": "Próximamente", + "TabTranscoding": "Transcodificación", + "MarkUnplayed": "Marcar no reproducido", + "MarkPlayed": "Marcar reproducido", + "LabelSkipForwardLength": "Saltar hacia adelante longitud:", + "Trailers": "Avances", + "TabTrailers": "Avances", + "TabSuggestions": "Sugerencias", + "TabStreaming": "Transmisión", + "TabSongs": "Canciones", + "TabShows": "Programas", + "TabSettings": "Configuraciones", + "TabServer": "Servidor", + "TabSeries": "Series", + "TabScheduledTasks": "Tareas programadas", + "TabResumeSettings": "Continuar", + "TabResponses": "Respuestas", + "TabRecordings": "Grabaciones", + "TabProfiles": "Perfiles", + "TabProfile": "Perfil", + "TabPlugins": "Complementos", + "TabPlaylists": "Listas de reproducción", + "TabPlaylist": "Lista de reproducción", + "TabPlayback": "Reproducción", + "TabPassword": "Contraseña", + "TabParentalControl": "Control parental", + "TabOther": "Otro", + "TabNotifications": "Notificaciones", + "TabNfoSettings": "Configuraciones de NFO", + "TabNetworking": "Redes", + "TabNetworks": "Redes", + "TabMyPlugins": "Mis complementos", + "TabMusicVideos": "Videos musicales", + "TabMusic": "Música", + "TabMovies": "Películas", + "TabMetadata": "Metadatos", + "TabLogs": "Registros", + "TabLiveTV": "TV en vivo", + "TabLatest": "Último", + "TabInfo": "Información", + "TabGuide": "Guía", + "TabGenres": "Géneros", + "TabFavorites": "Favoritos", + "TabDVR": "DVR", + "TabDisplay": "Pantalla", + "TabDirectPlay": "Reproducción directa", + "TabDevices": "Dispositivos", + "TabDashboard": "Tablero", + "TabContainers": "Contenedores", + "TabCollections": "Colecciones", + "TabCodecs": "Códecs", + "TabChannels": "Canales", + "TabRepositories": "Repositorios", + "TabCatalog": "Catálogo", + "TabArtists": "Artistas", + "TabAlbums": "Álbumes", + "TabAlbumArtists": "Artistas del álbum", + "TabAdvanced": "Avanzado", + "TabAccess": "Acceso", + "TV": "TV", + "SystemDlnaProfilesHelp": "Los perfiles del sistema son de solo lectura. Los cambios en un perfil del sistema se guardarán en un nuevo perfil personalizado.", + "SyncPlayAccessHelp": "Seleccione el nivel de acceso que este usuario tiene a la función SyncPlay. SyncPlay permite sincronizar la reproducción con otros dispositivos.", + "Sunday": "Domingo", + "Suggestions": "Sugerencias", + "Subtitles": "Subtítulos", + "SubtitleOffset": "Desplazamiento de subtítulos", + "SubtitleDownloadersHelp": "Habilite y clasifique sus descargadores de subtítulos preferidos en orden de prioridad.", + "SubtitleAppearanceSettingsDisclaimer": "Esta configuración no se aplicará a los subtítulos gráficos (PGS, DVD, etc.) ni a los subtítulos ASS/SSA que incorporen sus propios estilos.", + "SubtitleAppearanceSettingsAlsoPassedToCastDevices": "Esta configuración también se aplica a cualquier reproducción de Chromecast iniciada por este dispositivo.", + "Studios": "Estudios", + "StopRecording": "Detener grabación", + "Sports": "Deportes", + "SortName": "Ordenar por nombre", + "SortChannelsBy": "Ordenar canales por:", + "SortByValue": "Ordenar por {0}", + "Sort": "Ordenar", + "SmartSubtitlesHelp": "Los subtítulos que coincidan con la preferencia de idioma se cargarán cuando el audio esté en un idioma extranjero.", + "Smart": "Inteligente", + "Smaller": "Más pequeño", + "SmallCaps": "Letras minúsculas", + "Small": "Pequeño", + "SkipEpisodesAlreadyInMyLibraryHelp": "Los capítulos se compararán usando los números de temporada y episodio, cuando estén disponibles.", + "SkipEpisodesAlreadyInMyLibrary": "No grabar capítulos que ya están en mi biblioteca", + "SimultaneousConnectionLimitHelp": "El número máximo de transmisiones simultáneas permitidas. Ingrese 0 para ilimitado.", + "Filter": "Filtrar", + "New": "Nuevo", + "Shuffle": "Mezclar", + "ShowYear": "Mostrar año", + "ShowTitle": "Mostrar título", + "ShowMore": "Mostrar más", + "ShowLess": "Mostrar menos", + "ShowIndicatorsFor": "Mostrar indicadores para:", + "ShowAdvancedSettings": "Mostrar configuración avanzada", + "Share": "Compartir", + "SettingsWarning": "Cambiar estos valores puede causar inestabilidad o fallas de conectividad. Si tiene algún problema, le recomendamos cambiarlos a los valores predeterminados.", + "SettingsSaved": "Configuraciones guardadas.", + "Settings": "Configuraciones", + "ServerUpdateNeeded": "Este servidor Jellyfin necesita ser actualizado. Para descargar la última versión, visite {0}", + "ServerRestartNeededAfterPluginInstall": "El servidor Jellyfin deberá reiniciarse después de instalar un complemento.", + "ServerNameIsShuttingDown": "Servidor Jellyfin: {0} se está cerrando.", + "ServerNameIsRestarting": "Servidor Jellyfin: {0} se está reiniciando.", + "SeriesYearToPresent": "{0} - Presente", + "SeriesSettings": "Configuraciones de la serie", + "SeriesRecordingScheduled": "Grabación de la serie programada.", + "SeriesDisplayOrderHelp": "Ordenar capítulos por fecha de emisión, orden de DVD o numeración absoluta.", + "SeriesCancelled": "Series canceladas.", + "Series": "Series", + "SendMessage": "Enviar mensaje", + "SelectAdminUsername": "Seleccione un nombre de usuario para la cuenta de administrador.", + "Season": "Temporada", + "SearchResults": "Resultados de la búsqueda", + "SearchForSubtitles": "Buscar subtítulos", + "SearchForMissingMetadata": "Buscar metadatos faltantes", + "SearchForCollectionInternetMetadata": "Busque en Internet obras de arte y metadatos", + "Search": "Buscar", + "Screenshots": "Capturas de pantalla", + "Screenshot": "Captura de pantalla", + "Schedule": "Programación", + "ScanLibrary": "Escanear biblioteca", + "ScanForNewAndUpdatedFiles": "Escanear en busca de archivos nuevos y actualizados", + "SaveSubtitlesIntoMediaFoldersHelp": "Almacenar subtítulos junto a los archivos de video les permitirá administrarlos más fácilmente.", + "SaveSubtitlesIntoMediaFolders": "Guardar subtítulos en carpetas de medios", + "SaveChanges": "Guardar cambios", + "Save": "Guardar", + "Saturday": "Sábado", + "Runtime": "Tiempo de ejecución", + "RunAtStartup": "Ejecutar en el arranque", + "Rewind": "Rebobinar", + "ResumeAt": "Reanudar desde {0}", + "ButtonPlayer": "Reproductor", + "Writers": "Escritores" } diff --git a/src/strings/es-mx.json b/src/strings/es-mx.json index f7762e396e..c22aca4946 100644 --- a/src/strings/es-mx.json +++ b/src/strings/es-mx.json @@ -1066,7 +1066,7 @@ "OptionReportByteRangeSeekingWhenTranscodingHelp": "Esto es requerido para algunos dispositivos que no pueden hacer búsquedas de tiempo muy bien.", "OptionRequirePerfectSubtitleMatch": "Solo descargar subtítulos que coincidan perfectamente con mis archivos de video", "OptionRequirePerfectSubtitleMatchHelp": "Solicitar una coincidencia perfecta filtrará los subtítulos para incluir solo aquellos que han sido probados y verificados exactamente con tu archivo de video. Desmarcar esta opción incrementará las probabilidades de que se descarguen subtítulos, pero incrementará las posibilidades de obtener subtítulos mal sincronizados o con texto incorrecto.", - "OptionResElement": "elemento res", + "OptionResElement": "Elemento res", "OptionResumable": "Reanudable", "OptionRuntime": "Duración", "OptionSaturday": "Sábado", @@ -1424,7 +1424,7 @@ "ValueSeriesCount": "{0} series", "Vertical": "Vertical", "OptionThumb": "Miniatura", - "OptionThumbCard": "Tarjeta miniatura", + "OptionThumbCard": "Miniatura", "HeaderFavoriteBooks": "Libros favoritos", "LabelPleaseRestart": "Los cambios tendrán efecto después de recargar manualmente el cliente web.", "LabelPlayMethod": "Método de reproducción:", @@ -1487,7 +1487,7 @@ "HeaderFavoritePeople": "Personas favoritas", "Episode": "Episodio", "ClientSettings": "Configuración del cliente", - "BoxSet": "Box Set", + "BoxSet": "Colección", "AskAdminToCreateLibrary": "Pide a un administrador crear una biblioteca.", "Artist": "Artista", "AllowFfmpegThrottlingHelp": "Cuando una transcodificación o remuxeado se adelanta lo suficiente de la posición de reproducción actual, se pausa el proceso para que consuma menos recursos. Esto es más útil cuando se mira sin buscar con frecuencia. Apaga esto si experimentas problemas de reproducción.", @@ -1521,7 +1521,7 @@ "HeaderHttpsSettings": "Opciones HTTPS", "HeaderDVR": "DVR", "ApiKeysCaption": "Lista de claves API actualmente habilitadas", - "SyncPlayAccessHelp": "Selecciona el nivel de acceso que este usuario tiene a la función SyncPlay. SyncPlay permite sincronizar la reproducción con otros dispositivos.", + "SyncPlayAccessHelp": "Selecciona el nivel de acceso que este usuario tiene en la función SyncPlay. SyncPlay permite sincronizar la reproducción con otros dispositivos.", "MessageSyncPlayErrorMedia": "¡Fallo al activar SyncPlay! Error en el archivo de medios.", "MessageSyncPlayErrorMissingSession": "¡Fallo al activar SyncPlay! Falta la sesión.", "MessageSyncPlayErrorNoActivePlayer": "No se ha encontrado ningún reproductor activo. SyncPlay ha sido desactivado.", @@ -1552,5 +1552,25 @@ "HeaderSyncPlayEnabled": "SyncPlay habilitado", "HeaderSyncPlaySelectGroup": "Unirse a un grupo", "EnableDetailsBannerHelp": "Mostrar una imagen banner en la parte superior de la página de detalles del elemento.", - "EnableDetailsBanner": "Banner de detalles" + "EnableDetailsBanner": "Banner de detalles", + "ButtonSyncPlay": "SyncPlay", + "ButtonPlayer": "Reproductor", + "ButtonCast": "Elenco", + "EnableBlurhashHelp": "Imágenes que aún están siendo cargadas serán mostradas difuminadas", + "EnableBlurhash": "Habilitar imágenes de fondo difuminadas", + "TabRepositories": "Repositorios", + "ShowMore": "Mostrar más", + "ShowLess": "Mostrar menos", + "MessageNoGenresAvailable": "Habilitar algunos proveedores de metadatos para traer los generos desde internet.", + "MessageAddRepository": "Si desea agregar un repositorio, haz click en el botón junto al encabezado y completa la información requerida.", + "LabelRepositoryNameHelp": "Un nombre personalizado para distinguir este repositorio de otros añadidos a tu servidor.", + "LabelRepositoryName": "Nombre del repositorio", + "LabelRepositoryUrlHelp": "La ubicación del repositorio que desea agregar.", + "LabelRepositoryUrl": "URL del repositorio", + "HeaderNewRepository": "Nuevo repositorio", + "MessageNoRepositories": "Sin repositorios.", + "EnableFasterAnimationsHelp": "Usar animaciones y transiciones más rapidas", + "EnableFasterAnimations": "Animaciones más rápidas", + "EnableDecodingColorDepth10Vp9": "Habilitar la decodificación por hardware de 10 bit para VP9", + "EnableDecodingColorDepth10Hevc": "Habilitar la decodificación por hardware de 10 bit para HEVC" } diff --git a/src/strings/es.json b/src/strings/es.json index 37dd014470..84f01c94e6 100644 --- a/src/strings/es.json +++ b/src/strings/es.json @@ -1,9 +1,9 @@ { "AccessRestrictedTryAgainLater": "Actualmente el acceso está restringido. Por favor, inténtalo de nuevo más tarde.", "Add": "Añadir", - "AddItemToCollectionHelp": "Agregue elementos a las colecciones buscándolos y haciendo clic con el botón derecho o tocando los menús para agregarlos a una colección.", - "AddToCollection": "Añadir a la colección", - "AddToPlaylist": "Añadir a la lista de reproducción", + "AddItemToCollectionHelp": "Puedes añadir elementos a las colecciones buscándolos en tu biblioteca. Una vez hecho esto, abre el menú y selecciona 'Añadir a una colección'.", + "AddToCollection": "Añadir a una colección", + "AddToPlaylist": "Añadir a una lista de reproducción", "AddedOnValue": "Añadido {0}", "AdditionalNotificationServices": "Visite el catálogo de extensiones para instalar servicios de notificación adicionales.", "Albums": "Álbumes", @@ -14,11 +14,11 @@ "AllEpisodes": "Todos los episodios", "AllLanguages": "Todos los idiomas", "AllLibraries": "Todas las bibliotecas", - "AllowHWTranscodingHelp": "Permite al sintonizador transcodificar secuencias en vivo. Esto puede ayudar a reducir la transcodificación requerida por el servidor.", + "AllowHWTranscodingHelp": "Permite al sintonizador convertir el contenido directamente. Esto puede ayudar a reducir la potencia requerida por el servidor.", "AllowMediaConversion": "Permitir convertir los medios", "AllowMediaConversionHelp": "Concede o deniega el acceso a la función de conversión de medios.", "AllowOnTheFlySubtitleExtraction": "Permitir la extracción de subtítulos sobre la marcha", - "AllowOnTheFlySubtitleExtractionHelp": "Los subtítulos incrustados pueden extraerse de los vídeos y enviarse en texto sin formato para ayudar a evitar la transcodificación del vídeo. En algunos sistemas, esto puede llevar mucho tiempo y hacer que la reproducción de vídeo se bloquee durante el proceso de extracción. Deshabilite esta opción para tener subtítulos incrustados grabados con transcodificación de video cuando no sean compatibles de forma nativa con el cliente.", + "AllowOnTheFlySubtitleExtractionHelp": "Cuando el cliente sea compatible, los subtítulos pueden extraerse durante la reproducción para evitar convertir el vídeo. Sin embargo, y en algunos servidores, esto puede llevar mucho tiempo y hacer que la reproducción tenga cortes durante el proceso. Deshabilita esta opción para grabar los subtítulos directamente en el vídeo cuando no sean compatibles de forma nativa con el cliente.", "AllowRemoteAccess": "Permitir conexiones remotas a este servidor Jellyfin.", "AllowRemoteAccessHelp": "Si no está activado, todas las conexiones remotas serán bloqueadas.", "AllowedRemoteAddressesHelp": "Lista separada por comas de direcciones IP o entradas de IP / máscara de red para redes a las que se les permitirá conectarse de forma remota. Si se deja en blanco, se permitirán todas las direcciones remotas.", @@ -376,7 +376,7 @@ "HeaderSelectServerCachePath": "Seleccione la ruta para el caché del servidor", "HeaderSelectServerCachePathHelp": "Navega o introduce la ruta para alojar los archivos caché del servidor. Tienes que tener permisos de escritura en esa carpeta.", "HeaderSelectTranscodingPath": "Seleccione la ruta temporal del transcodificador", - "HeaderSelectTranscodingPathHelp": "Busque o escriba la ruta de acceso que se utilizará para la transcodificación de archivos temporales. La carpeta debe tener permiso de escritura.", + "HeaderSelectTranscodingPathHelp": "Busca o escribe la ruta que se utilizará para guardar los archivos temporales que se generarán mientras se convierten los archivos. Jellyfin debe tener permisos de escritura en la carpeta.", "HeaderSendMessage": "Enviar mensaje", "HeaderSeries": "Series", "HeaderSeriesOptions": "Opciones de series", @@ -399,8 +399,8 @@ "HeaderTags": "Etiquetas", "HeaderTaskTriggers": "Tareas de activación", "HeaderThisUserIsCurrentlyDisabled": "Este usuario está desactivado", - "HeaderTranscodingProfile": "Perfil de transcodificación", - "HeaderTranscodingProfileHelp": "Añadir perfiles de transcodificación para indicar qué formatos se deben utilizar cuando se requiera transcodificación.", + "HeaderTranscodingProfile": "Parámetros de conversión", + "HeaderTranscodingProfileHelp": "Añade los diferentes parámetros de conversión para este dispositivo, de manera que el servidor convierta automáticamente el contenido en un formato compatible para él.", "HeaderTunerDevices": "Sintonizadores", "HeaderTuners": "Sintonizadores", "HeaderTypeImageFetchers": "{0} capturadores de imágenes", @@ -449,7 +449,7 @@ "LabelAlbumArtPN": "Carátula del album PN:", "LabelAlbumArtists": "Artistas de los álbumes:", "LabelAll": "Todo", - "LabelAllowHWTranscoding": "Permitir transcodificación por hardware", + "LabelAllowHWTranscoding": "Activar la conversión acelerada por hardware", "LabelAllowServerAutoRestart": "Permitir al servidor reiniciarse automáticamente para aplicar las actualizaciones", "LabelAllowServerAutoRestartHelp": "El servidor solo se reiniciará durante periodos de reposo, cuando no haya usuarios activos.", "LabelAllowedRemoteAddresses": "Filtro de dirección IP remota:", @@ -620,7 +620,7 @@ "LabelMoviePrefix": "Prefijo de película:", "LabelMoviePrefixHelp": "Si se aplica un prefijo a títulos de películas, escríbalo para que el servidor pueda manejarlo correctamente.", "LabelMovieRecordingPath": "Ruta de grabaciones de películas (opcional):", - "LabelMusicStreamingTranscodingBitrate": "Tasa de bits de transcodificación de música:", + "LabelMusicStreamingTranscodingBitrate": "Tasa de bits para la reproducción de música:", "LabelMusicStreamingTranscodingBitrateHelp": "Especifique una tasa de bits máxima cuando transmita música.", "LabelName": "Nombre:", "LabelNewName": "Nuevo nombre:", @@ -667,7 +667,7 @@ "LabelPublicHttpsPort": "Puerto público HTTPS:", "LabelPublicHttpsPortHelp": "Puerto público que debe ser enlazado al puerto local HTTPS.", "LabelReadHowYouCanContribute": "Aprenda cómo contribuir.", - "LabelReasonForTranscoding": "Motivo de la transcodificación:", + "LabelReasonForTranscoding": "Motivo por el que se realiza la conversión:", "LabelRecord": "Grabar:", "LabelRecordingPath": "Ruta de grabaciones por defecto:", "LabelRecordingPathHelp": "Especifica la ubicación por defecto para guardar las grabaciones. Si lo dejas vacío se usará la carpeta de datos del servidor.", @@ -694,7 +694,7 @@ "LabelSkipIfAudioTrackPresent": "Omitir si la pista de audio por defecto coincide con el idioma de descarga", "LabelSkipIfAudioTrackPresentHelp": "Desactive esta opción para asegurar que todos los vídeos tienen subtítulos, sin importar el idioma de audio.", "LabelSkipIfGraphicalSubsPresent": "Saltar si el vídeo tiene subtítulos integrados", - "LabelSkipIfGraphicalSubsPresentHelp": "Mantener versiones de texto de subtítulos dará lugar a una entrega más eficiente y a disminuir la probabilidad de transcodificación de vídeo.", + "LabelSkipIfGraphicalSubsPresentHelp": "Mantener versiones de los subtítulos en texto plano puede hacer que la reproducción sea más eficiente en un número mayor de dispositivos, evitando la conversión del vídeo.", "LabelSonyAggregationFlags": "Agregación de banderas Sony:", "LabelSonyAggregationFlagsHelp": "Determina el contenido del elemento aggregationFlags en el espacio de nombre urn:schemas-sonycom:av.", "LabelSortTitle": "Clasificar por título:", @@ -721,9 +721,9 @@ "LabelTrackNumber": "Número de pista:", "LabelTranscodingAudioCodec": "Códec de audio:", "LabelTranscodingContainer": "Contenedor:", - "LabelTranscodingTempPathHelp": "Establece la ruta personaliza para la transcodificación de archivos servidos a los clientes. Dejar en blanco para usar la ruta por defecto del servidor.", - "LabelTranscodingThreadCount": "Cantidad de instancias de transcodificación:", - "LabelTranscodingThreadCountHelp": "Selecciona el número máximo de instancias de transcodificación. Reducirlas disminuirá el uso del procesador pero puede no convertirá lo suficientemente rápido para una reproducción fluida.", + "LabelTranscodingTempPathHelp": "Establece la carpeta que se usará para almacenar los archivos temporales de las conversiones. Déjalo en blanco para usar la ruta por defecto.", + "LabelTranscodingThreadCount": "Núcleos a utilizar durante la conversión:", + "LabelTranscodingThreadCountHelp": "Selecciona el número de núcleos a utilizar para la conversión. A menos núcleos, menor será el uso del procesador, pero puede que la conversión no vaya lo suficientemente rápido para una reproducción fluida.", "LabelTranscodingVideoCodec": "Códec de video:", "LabelTriggerType": "Tipo de evento:", "LabelTunerIpAddress": "IP del sintonizador:", @@ -874,21 +874,21 @@ "OptionAlbum": "Álbum", "OptionAlbumArtist": "Artista de álbum", "OptionAllUsers": "Todos los usuarios", - "OptionAllowAudioPlaybackTranscoding": "Permitir reproducción de audio que requiere transcodificación", + "OptionAllowAudioPlaybackTranscoding": "Activar la conversión del audio", "OptionAllowBrowsingLiveTv": "Permitir acceso a la televisión en directo", "OptionAllowContentDownloading": "Permitir la descarga de medios", "OptionAllowLinkSharing": "Permitir compartir los medios en redes sociales", "OptionAllowLinkSharingHelp": "Sólo se comparten las páginas web con información de medios. Los archivos nunca se comparten públicamente. Lo compartido expirará después de {0} días.", "OptionAllowManageLiveTv": "Habilitar la administración de grabación de la televisión en directo", "OptionAllowMediaPlayback": "Permitir la reproducción de medios", - "OptionAllowMediaPlaybackTranscodingHelp": "Restringir el acceso a la transcodificación puede causar fallos de reproducción en aplicaciones Jellyfin debido a formatos de medios no compatibles.", + "OptionAllowMediaPlaybackTranscodingHelp": "Con la conversión, el servidor se asegura que cualquier cliente es capaz de reproducir el contenido, sin importar su formato. Al desactivar la conversión de alguno de estos elementos, es posible que los vídeos no tengan audio o que, directamente, no se pueda reproducir el archivo por no ser compatible con el dispositivo. Para evitar problemas con la reproducción es mejor dejarlas todas por defecto.", "OptionAllowRemoteControlOthers": "Habilitar el control remoto de otros usuarios", "OptionAllowRemoteSharedDevices": "Habilitar el control remoto de otros equipos compartidos", "OptionAllowRemoteSharedDevicesHelp": "Los equipos DLNA son considerados compartidos hasta que un usuario empiece a controlarlos.", - "OptionAllowSyncTranscoding": "Permitir la descarga que requiera transcodificación", + "OptionAllowSyncTranscoding": "Permitir la conversión del contenido cuando se descargue o se sincronice", "OptionAllowUserToManageServer": "Permite a este usuario administrar el servidor", - "OptionAllowVideoPlaybackRemuxing": "Permitir la reproducción de vídeo que requiere conversión sin necesidad de volver a codificar", - "OptionAllowVideoPlaybackTranscoding": "Permitir reproducción de vídeo que requiere transcodificación", + "OptionAllowVideoPlaybackRemuxing": "Activar el cambio de contenedor para el contenido cuyo audio y vídeo es compatible, pero no lo es su contenedor", + "OptionAllowVideoPlaybackTranscoding": "Activar la conversión del vídeo", "OptionArtist": "Artista", "OptionAscending": "Ascendente", "OptionAutomaticallyGroupSeries": "Combinar automáticamente series que se distribuyen en varias carpetas", @@ -949,7 +949,7 @@ "OptionHideUserFromLoginHelp": "Útil para privado o cuentas de administradores escondidos. El usuario tendrá que acceder entrando su nombre de usuario y contraseña manualmente.", "OptionHlsSegmentedSubtitles": "Subtítulos segmentados HLS", "OptionHomeVideos": "Fotos", - "OptionIgnoreTranscodeByteRangeRequests": "Ignorar las solicitudes de intervalo de bytes de transcodificación", + "OptionIgnoreTranscodeByteRangeRequests": "En las conversiones, ignorar las solicitudes de un intervalo específico de bytes", "OptionIgnoreTranscodeByteRangeRequestsHelp": "Si está activado, estas solicitudes serán atendidas pero ignorarán el encabezado de intervalo de bytes.", "OptionImdbRating": "Valoración IMDb", "OptionLikes": "Me gusta", @@ -1160,7 +1160,7 @@ "TabSongs": "Canciones", "TabStreaming": "Transmisión", "TabSuggestions": "Sugerencias", - "TabTranscoding": "Transcodificación", + "TabTranscoding": "Conversión", "TabUpcoming": "Próximos", "TabUsers": "Usuarios", "Tags": "Etiquetas", @@ -1173,7 +1173,7 @@ "TitleHostingSettings": "Configuración del alojamiento", "TitlePlayback": "Reproducción", "TrackCount": "{0} pistas", - "Transcoding": "Transcodificación", + "Transcoding": "Conversión", "Tuesday": "Martes", "TvLibraryHelp": "Revisar la {0}guía de nombres de los programas de TV{1}.", "UninstallPluginConfirmation": "¿Esta seguro que desea desinstalar {0}?", @@ -1354,7 +1354,7 @@ "LabelAuthProvider": "Proveedor de autenticación:", "LabelPasswordResetProvider": "Proveedor de restablecimiento de contraseña:", "LabelServerName": "Nombre del servidor:", - "LabelTranscodePath": "Ruta de transcodificación:", + "LabelTranscodePath": "Ruta para los archivos temporales de las conversiones:", "LabelTranscodes": "Transcodificaciones:", "LabelUserLoginAttemptsBeforeLockout": "Intentos fallidos de inicio de sesión antes de que el usuario sea bloqueado:", "DashboardVersionNumber": "Versión: {0}", @@ -1430,8 +1430,8 @@ "MoreMediaInfo": "Información del archivo", "LabelVideoCodec": "Codec de video:", "LabelVideoBitrate": "Bitrade de video:", - "LabelTranscodingProgress": "Progreso de la transcodificación:", - "LabelTranscodingFramerate": "Velocidad de fotogramas de la transcodificación:", + "LabelTranscodingProgress": "Progreso de la conversión:", + "LabelTranscodingFramerate": "Velocidad de la conversión:", "LabelSize": "Tamaño:", "LabelPleaseRestart": "Los cambios surtirán efecto tras recargar manualmente el cliente web.", "LabelPlayMethod": "Método de reproducción:", @@ -1459,9 +1459,9 @@ "EnableFasterAnimationsHelp": "Las animaciones y transiciones durarán menos tiempo", "EnableFasterAnimations": "Animaciones más rápidas", "CopyStreamURLError": "Ha habido un error copiando la dirección.", - "AllowFfmpegThrottlingHelp": "Cuando una transcodificación o un remux se adelanta lo suficiente desde la posición de reproducción actual, pause el proceso para que consuma menos recursos. Esto es más útil cuando se reproduce de forma linear, sin saltar de posición de reproducción a menudo. Desactívelo si experimenta problemas de reproducción.", + "AllowFfmpegThrottlingHelp": "Las conversiones se pausarán cuando se adelanten lo suficiente desde la posición en la que se encuentre el reproductor. Puede reducir la carga en el servidor y es útil cuando se reproduce de forma continua, sin saltar entre intervalos de tiempo, pero puede que tengas que desactivarlo si experimentas problemas en la reproducción o cambias de posición frecuentemente mientras reproduces contenido.", "PlaybackErrorNoCompatibleStream": "Este contenido no es compatible con este dispositivo y no se puede reproducir: No se puede obtener del servidor en un formato compatible.", - "OptionForceRemoteSourceTranscoding": "Forzar la transcodificación para fuentes remotas de medios (como LiveTV)", + "OptionForceRemoteSourceTranscoding": "Forzar la conversión para fuentes externas (como la televisión en directo)", "NoCreatedLibraries": "Parece que aún no se han creado librearías. {0}¿Quiere crear una ahora?{1}", "LabelVideoResolution": "Resolución de video:", "LabelStreamType": "Tipo de stream:", @@ -1469,7 +1469,7 @@ "LabelDroppedFrames": "Frames perdidos:", "LabelCorruptedFrames": "Frames corruptos:", "AskAdminToCreateLibrary": "Solo un administrador puede crear librerías.", - "AllowFfmpegThrottling": "Acelerar transcodificación", + "AllowFfmpegThrottling": "Pausar las conversiones", "ClientSettings": "Ajustes de cliente", "PreferEmbeddedEpisodeInfosOverFileNames": "Priorizar la información embebida sobre los nombres de archivos", "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Usar la información de episodio de los metadatos embebidos si está disponible.", @@ -1525,7 +1525,7 @@ "EnableBlurhash": "Mostrar una representación de las imágenes mientras cargan", "EnableBlurhashHelp": "Aparecerá una representación de los colores de las imágenes antes de que terminen de cargar", "HeaderDVR": "DVR", - "SyncPlayAccessHelp": "Selecciona los permisos de este usuario para utilizar SyncPlay. SyncPlay te permite sincronizar la reproducción entre varios dispositivos.", + "SyncPlayAccessHelp": "Selecciona el nivel de acceso de este usuario para utilizar SyncPlay. SyncPlay te permite sincronizar la reproducción entre varios dispositivos.", "MessageSyncPlayErrorMedia": "¡No se pudo activar SyncPlay! Error de medio.", "MessageSyncPlayErrorMissingSession": "¡No se pudo activar SyncPlay! Sesión desconectada.", "MessageSyncPlayErrorNoActivePlayer": "No hay reproductor activo. SyncPlay ha sido desactivado.", @@ -1562,6 +1562,16 @@ "ButtonSyncPlay": "SyncPlay", "ButtonCast": "Enviar", "MessageNoGenresAvailable": "Permitir a algunos proveedores de metadatos extraer géneros de Internet.", - "EnableDecodingColorDepth10Vp9": "Habilite la decodificación por hardware de 10 bits para Vp9", - "EnableDecodingColorDepth10Hevc": "Habilite la decodificación por hardware de 10 bits para HEVC" + "EnableDecodingColorDepth10Vp9": "Habilite la decodificación por hardware de 10 bits para VP9", + "EnableDecodingColorDepth10Hevc": "Habilite la decodificación por hardware de 10 bits para HEVC", + "ButtonPlayer": "Reproductor", + "TabRepositories": "Repositorios", + "MessageAddRepository": "Si desea agregar un repositorio, haga click en el botón cerca del encabezado y complete la información requerida.", + "LabelRepositoryNameHelp": "Un nombre personalizado para distinguir este repositorio de otros agregados a su servidor.", + "LabelRepositoryName": "Nombre del repositorio", + "LabelRepositoryUrlHelp": "La ubicación del repositorio que desea incluir.", + "LabelRepositoryUrl": "URL del repositorio", + "HeaderNewRepository": "Nuevo repositorio", + "MessageNoRepositories": "Sin repositorios.", + "Writers": "Escritores" } diff --git a/src/strings/es_419.json b/src/strings/es_419.json index 29ef1a163d..7f1b40241d 100644 --- a/src/strings/es_419.json +++ b/src/strings/es_419.json @@ -1548,5 +1548,6 @@ "EnableBlurhash": "Habilitar marcadores de posición borrosos para imágenes", "ShowMore": "Mostrar más", "ShowLess": "Mostrar menos", - "EnableBlurhashHelp": "Las imágenes que aún se están cargando se mostrarán con un marcador de posición borroso" + "EnableBlurhashHelp": "Las imágenes que aún se están cargando se mostrarán con un marcador de posición borroso", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/strings/es_DO.json b/src/strings/es_DO.json index 7c42778a1c..9f5d299631 100644 --- a/src/strings/es_DO.json +++ b/src/strings/es_DO.json @@ -12,5 +12,6 @@ "Books": "Libros", "Albums": "Álbumes", "Artists": "Artistas", - "Channels": "Canales" + "Channels": "Canales", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/strings/fa.json b/src/strings/fa.json index ad32c135f1..877c0af490 100644 --- a/src/strings/fa.json +++ b/src/strings/fa.json @@ -1553,5 +1553,6 @@ "EnableFastImageFadeIn": "Faster animations", "EnableFastImageFadeInHelp": "Use faster animations and transitions", "EnableBlurhash": "Enable blurred placeholders for images", - "EnableBlurhashHelp": "Images that are still being loaded will be displayed with a blurred placeholder" + "EnableBlurhashHelp": "Images that are still being loaded will be displayed with a blurred placeholder", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/strings/fi.json b/src/strings/fi.json index 3ccf278025..d53de1a44d 100644 --- a/src/strings/fi.json +++ b/src/strings/fi.json @@ -1246,5 +1246,6 @@ "MediaInfoAnamorphic": "Anamorfinen", "ErrorGettingTvLineups": "TV esiintyjälistan lataamisessa tapahtui virhe. Varmista, että tiedot on oikein ja yritä uudelleen.", "EnableDetailsBannerHelp": "Näyttää julistekuvan yksityiskohdat -sivun ylälaidassa.", - "EnableDetailsBanner": "Yksityiskohtien banneri" + "EnableDetailsBanner": "Yksityiskohtien banneri", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/strings/fr-ca.json b/src/strings/fr-ca.json index 61dce082c9..67dd189a1f 100644 --- a/src/strings/fr-ca.json +++ b/src/strings/fr-ca.json @@ -97,7 +97,7 @@ "AllowMediaConversion": "Autoriser la conversion des médias", "AllowMediaConversionHelp": "Autoriser ou refuser l'accès à la fonctionnalité de conversion des médias.", "AllowOnTheFlySubtitleExtraction": "Autoriser l'extraction des sous-titres à la volée", - "AllowOnTheFlySubtitleExtractionHelp": "Les sous-titres intégrés peuvent être extraits des vidéos et distribués aux applications Jellyfin au format texte pour éviter le transcodage. Sur certains systèmes, cela peut prendre du temps et arrêter la lecture de la vidéo pendant le processus d'extraction. Désactivez cette option pour graver les sous-titres avec un transcodage quand l'appareil ne les prend pas en charge nativement.", + "AllowOnTheFlySubtitleExtractionHelp": "Les sous-titres intégrés peuvent être extraits des vidéos et distribués aux clients en format texte pour éviter le transcodage. Sur certains systèmes, cela peut prendre du temps et arrêter la lecture de la vidéo pendant le processus d'extraction. Désactivez cette option pour graver les sous-titres avec un transcodage quand l'appareil ne les prend pas en charge nativement.", "AllowRemoteAccess": "Autoriser les connexions distantes à ce serveur Jellyfin.", "AllowRemoteAccessHelp": "Si l'option est désactivée, toutes les connexions distantes seront bloquées.", "Artists": "Artistes", @@ -134,13 +134,13 @@ "BirthLocation": "Lieu de naissance", "BirthPlaceValue": "Lieu de naissance : {0}", "Blacklist": "Liste noire", - "BookLibraryHelp": "Les livres audios et formats textes sont supportés. Consultez le {0}Guide de nommage de livres de Jellyfin{1}.", + "BookLibraryHelp": "Les livres audios et formats textes sont supportés. Consultez le {0} Guide de nommage de livres {1}.", "Box": "Boîtier", "BoxRear": "Dos de boîtier", "Browse": "Parcourir", "BrowsePluginCatalogMessage": "Explorer notre catalogue des plugins pour voir les plugins disponibles.", - "AllowHWTranscodingHelp": "Permet au récepteur TV de transcoder les flux à la volée. Cela peut aider à réduire le transcodage requis par le serveur Jellyfin.", - "BurnSubtitlesHelp": "Détermine si le serveur doit graver les sous-titres lors de la conversion vidéo en fonction du format des sous-titres. Éviter la gravure des sous-titres améliorera les performances du serveur. Sélectionnez Auto pour graver les formats basés sur l'image (par exemple, VOBSUB, PGS, SUB/IDX etc) ainsi que certains sous-titres ASS/SSA", + "AllowHWTranscodingHelp": "Permet au récepteur TV de transcoder les flux à la volée. Cela peut aider à réduire le transcodage requis par le serveur.", + "BurnSubtitlesHelp": "Détermine si le serveur doit graver les sous-titres lors du transcodage vidéo. Éviter ceci améliorera les performances du serveur. Sélectionnez Auto pour graver les formats basés sur l'image (par exemple, VOBSUB, PGS, SUB/IDX etc) ainsi que certains sous-titres ASS/SSA.", "ButtonAccept": "Accepter", "ButtonAdd": "Ajouter", "ButtonAddMediaLibrary": "Ajouter une médiathèque", @@ -187,7 +187,7 @@ "ButtonMore": "Plus", "ButtonNetwork": "Réseau", "AspectRatio": "Format de visionnement", - "AskAdminToCreateLibrary": "Demander à l'administrateur pour créer une bibliothèque de média.", + "AskAdminToCreateLibrary": "Demander un administrateur de créer une médiathèque.", "Artist": "Artiste", "AllowFfmpegThrottlingHelp": "Quand un transcodage ou rémux se déplace après la position de relecture, suspendre le processus pour consommer moins de ressources. Ceci est le plus utile pour chercher moins. Désactiver s'il y a des problèmes de relecture.", "AllowFfmpegThrottling": "Restreindre la vitesse de transcodage", @@ -198,5 +198,68 @@ "HeaderFavoriteShows": "Séries favorites", "HeaderFavoriteEpisodes": "Épisodes favoris", "HeaderFavoriteArtists": "Artistes favoris", - "HeaderFavoriteAlbums": "Albums favoris" + "HeaderFavoriteAlbums": "Albums favoris", + "ButtonSyncPlay": "SyncPlay", + "Default": "Défaut", + "DeathDateValue": "Mort: {0}", + "DatePlayed": "Date écoutée", + "DateAdded": "Date d'ajout", + "CriticRating": "Évaluation critique", + "CopyStreamURLError": "Une erreur est survenue en essayant de copier l'URL.", + "CopyStreamURLSuccess": "L'URL a été copié avec succès.", + "CopyStreamURL": "Copier l'URL du stream", + "ContinueWatching": "Continuer à visionner", + "Connect": "Connexion", + "ConfirmEndPlayerSession": "Voulez-vous éteindre Jellyfin sur {0}?", + "ConfirmDeletion": "Confirmer la suppression", + "ConfirmDeleteItems": "Supprimer ceux-ci les effacera du système de fichiers et votre médiathèque. Êtes-vous sûr de vouloir continuer?", + "ConfirmDeleteImage": "Effacer l'image?", + "ClientSettings": "Paramètres du client", + "ChannelNumber": "Numéro de canal", + "ChannelNameOnly": "Canal {0} seulment", + "ChannelAccessHelp": "Sélectionner les canaux que vous désirer partager avec cet usager. Les administrateurs seront capable de modifier tout les canaux en utilisant le gestionnaire des métadonnées.", + "Categories": "Catégories", + "CancelSeries": "Annuler la série", + "CancelRecording": "Annuler l'enregistrement", + "ButtonWebsite": "Site web", + "ButtonViewWebsite": "Voir le site web", + "ButtonUp": "Vers le haut", + "ButtonUninstall": "Désinstaller", + "ButtonTogglePlaylist": "Liste de lecture", + "ButtonToggleContextMenu": "Plus", + "ButtonSubtitles": "Sous-titres", + "ButtonSubmit": "Soumettre", + "ButtonStop": "Arrêt", + "ButtonStart": "Démarrer", + "ButtonSort": "Trier", + "ButtonSignIn": "Se connecter", + "ButtonShutdown": "Éteindre", + "ButtonShuffle": "Lecture aléatoire", + "ButtonSettings": "Paramètres", + "ButtonSend": "Envoyer", + "ButtonSelectServer": "Sélectionner le serveur", + "ButtonSelectDirectory": "Sélectionner le répertoire", + "ButtonSearch": "Rechercher", + "ButtonScanAllLibraries": "Analyser toutes les médiathèques", + "ButtonSave": "Sauvegarder", + "ButtonRevoke": "Révoquer", + "ButtonResume": "Reprendre la lecture", + "ButtonResetPassword": "Réinitialiser le mot de passe", + "ButtonResetEasyPassword": "Remettre à nouveau le code NIP facile", + "ButtonRepeat": "Répéter", + "ButtonRename": "Renommer", + "ButtonRemove": "Enlever", + "ButtonRefreshGuideData": "Rafraîchir les données de guide", + "ButtonRefresh": "Rafraîchir", + "ButtonProfile": "Profil", + "ButtonPreviousTrack": "Piste précédente", + "ButtonPlay": "Lecture", + "ButtonPause": "Pause", + "ButtonParentalControl": "Contrôle parentale", + "ButtonOpen": "Ouvrir", + "ButtonOk": "OK", + "ButtonNextTrack": "Prochaine piste", + "ButtonNew": "Nouveau", + "ButtonAddImage": "Ajouter l'image", + "BoxSet": "Coffret" } diff --git a/src/strings/fr.json b/src/strings/fr.json index 941b7c117c..f9ead15363 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -1506,7 +1506,7 @@ "HeaderFavoritePlaylists": "Listes de lecture favorites", "TabDVR": "DVR", "LabelChromecastVersion": "Version de Chromecast", - "LabelEnableHttpsHelp": "Autorise le serveur à écouter les requêtes HTTPS sur le port configurée. Un certificat valide doit être configuré pour permettre ce mode de fonctionnement.", + "LabelEnableHttpsHelp": "Autorise le serveur à écouter les requêtes HTTPS sur le port configuré. Un certificat valide doit être configuré pour permettre ce mode de fonctionnement.", "LabelEnableHttps": "Activer HTTPS", "HeaderServerAddressSettings": "Paramètres adresses serveur", "HeaderRemoteAccessSettings": "Paramètres d'accès distant", @@ -1521,7 +1521,7 @@ "EnableDetailsBanner": "Bannière des détails", "EnableDetailsBannerHelp": "Affichez une image de bannière en haut de la page de détails de l'article.", "HeaderSyncPlaySelectGroup": "Rejoindre un groupe", - "LabelSyncPlayAccessCreateAndJoinGroups": "Autoriser l'utilisateur à créer un ou rejoindre un groupe", + "LabelSyncPlayAccessCreateAndJoinGroups": "Autoriser l'utilisateur à créer ou rejoindre un groupe", "LabelSyncPlayLeaveGroupDescription": "Désactiver SyncPlay", "LabelSyncPlayLeaveGroup": "Quitter le groupe", "LabelSyncPlayNewGroupDescription": "Créer un nouveau groupe", @@ -1529,14 +1529,14 @@ "LabelSyncPlaySyncMethod": "Méthode de synchronisation :", "LabelSyncPlayPlaybackDiff": "Décalage de la lecture :", "MillisecondsUnit": "ms", - "LabelSyncPlayTimeOffset": "Décalage de temps avec le serveur  :", + "LabelSyncPlayTimeOffset": "Décalage de temps avec le serveur :", "HeaderSyncPlayEnabled": "SyncPlay activé", "MessageSyncPlayLibraryAccessDenied": "L'accès à ce contenu est restreint.", "MessageSyncPlayJoinGroupDenied": "Permission requise pour utiliser SyncPlay.", "MessageSyncPlayCreateGroupDenied": "Permission requise pour créer un groupe.", "MessageSyncPlayGroupDoesNotExist": "Impossible de rejoindre le groupe car il n'existe pas.", "MessageSyncPlayPlaybackPermissionRequired": "Autorisation de lecture requise.", - "MessageSyncPlayNoGroupsAvailable": "Aucun groupe disponible. Commencez par lancer quelque chose.", + "MessageSyncPlayNoGroupsAvailable": "Aucun groupe disponible. Commencez par lire quelque chose.", "MessageSyncPlayGroupWait": "{0} est en train de charger...", "MessageSyncPlayUserLeft": "{0} a quitté le groupe.", "MessageSyncPlayUserJoined": "{0} a rejoint le groupe.", @@ -1548,14 +1548,14 @@ "SyncPlayAccessHelp": "Sélectionner le niveau d'accès de cet utilisateur pour la fonctionnalité SyncPlay. SyncPlay permet de synchroniser la lecture avec d'autres utilisateurs.", "MessageSyncPlayErrorMedia": "Impossible d'activer SyncPlay ! Erreur média.", "MessageSyncPlayErrorMissingSession": "Impossible d'activer SyncPlay ! Session manquante.", - "MessageSyncPlayErrorNoActivePlayer": "Aucun player actif trouvé. SyncPlay a été désactivé.", + "MessageSyncPlayErrorNoActivePlayer": "Aucun lecteur actif trouvé. SyncPlay a été désactivé.", "MessageSyncPlayErrorAccessingGroups": "Une erreur s'est produite pendant l'accès à la liste de groupes.", "ShowMore": "Voir plus", "ShowLess": "Voir moins", "EnableBlurhashHelp": "Les images qui sont encore en cours de chargement seront remplacées par une image générique floue", "EnableBlurhash": "Utilise des images génériques floues à la place des images", "ButtonCast": "Diffuser", - "ButtonSyncPlay": "Lecture synchronisée", + "ButtonSyncPlay": "SyncPlay", "TabRepositories": "Dépôts", "MessageNoGenresAvailable": "Utiliser des fournisseurs de métadonnées pour récupérer les genres depuis internet.", "MessageAddRepository": "Si vous souhaitez ajouter un dépôt, cliquez sur le bouton près de l'entête et renseignez les informations demandées.", diff --git a/src/strings/gl.json b/src/strings/gl.json index 5341462de7..e87ce46770 100644 --- a/src/strings/gl.json +++ b/src/strings/gl.json @@ -11,5 +11,6 @@ "AirDate": "Data de emisión", "Aired": "Emitido", "AddToPlaylist": "Engadir á lista de reprodución", - "Add": "Engadir" + "Add": "Engadir", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/strings/gsw.json b/src/strings/gsw.json index e396313856..803b707f61 100644 --- a/src/strings/gsw.json +++ b/src/strings/gsw.json @@ -165,5 +165,6 @@ "VersionNumber": "Version {0}", "Absolute": "Absolut", "Actor": "Schauspiler", - "AccessRestrictedTryAgainLater": "Zuegriff isch momentan beschränkt. Probier bitte später nomau. " + "AccessRestrictedTryAgainLater": "Zuegriff isch momentan beschränkt. Probier bitte später nomau. ", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/strings/he.json b/src/strings/he.json index 5df0ba4fe4..6d506f43c8 100644 --- a/src/strings/he.json +++ b/src/strings/he.json @@ -771,5 +771,6 @@ "LabelSource": "מקור:", "LabelSoundEffects": "אפקטי סאונד:", "ButtonTogglePlaylist": "רשימת ניגון", - "ButtonToggleContextMenu": "עוד" + "ButtonToggleContextMenu": "עוד", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/strings/hi-in.json b/src/strings/hi-in.json index 7a51a4f695..698269c3bf 100644 --- a/src/strings/hi-in.json +++ b/src/strings/hi-in.json @@ -112,5 +112,6 @@ "AlbumArtist": "चित्राधार कलाकार", "AllowOnTheFlySubtitleExtraction": "मक्खी पर उपशीर्षक निष्कर्षण की अनुमति दें", "Album": "एल्बम", - "AddItemToCollectionHelp": "उनके लिए खोज करके संग्रह में आइटम जोड़ें और उन्हें संग्रह में जोड़ने के लिए उनके राइट-क्लिक या टैप मेनू का उपयोग करें।" + "AddItemToCollectionHelp": "उनके लिए खोज करके संग्रह में आइटम जोड़ें और उन्हें संग्रह में जोड़ने के लिए उनके राइट-क्लिक या टैप मेनू का उपयोग करें।", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/strings/hr.json b/src/strings/hr.json index 107014626e..69f5dfaa65 100644 --- a/src/strings/hr.json +++ b/src/strings/hr.json @@ -7,14 +7,14 @@ "AdditionalNotificationServices": "Pretražite katalog dodataka kako bi instalirali dodatne servise za obavijesti.", "AllChannels": "Svi kanali", "AllEpisodes": "Sve epizode", - "AllowHWTranscodingHelp": "Ako je omogućeno, omogućite TV/radio uređaju da konvertira strujanja u letu. Ovo može pomoći smanjiti konvertiranje koje zahtijeva Jellyfin Server.", + "AllowHWTranscodingHelp": "Omogućite TV/radio uređaju da konvertira strujanja u letu. Ovo može pomoći smanjiti konvertiranje koje zahtijeva Jellyfin Server.", "Anytime": "Bilo kada", - "AroundTime": "Oko {0}", + "AroundTime": "Oko", "AsManyAsPossible": "Što više je moguće", "AttributeNew": "Novo", "Backdrops": "Pozadine", "BirthDateValue": "Rođen: {0}", - "BirthLocation": "Lokacije rođenja", + "BirthLocation": "Lokacija rođenja", "BirthPlaceValue": "Mjesto rođenja: {0}", "BrowsePluginCatalogMessage": "Pregledajte dostupne dodatke u našem katalogu.", "ButtonAdd": "Dodaj", @@ -120,35 +120,35 @@ "DoNotRecord": "Ne snimi", "Download": "Preuzimanje", "DrmChannelsNotImported": "Kanali s DRM se neće uvesti.", - "EasyPasswordHelp": "Vaš laki PIN kod se koristi za izvan-mrežni pristup s podržanim Jellyfin aplikacijama, a također se može koristiti za jednostavnu mrežnu prijavu.", + "EasyPasswordHelp": "Vaš laki PIN kod se koristi za izvan-mrežni pristup na podržanim klijentima i također se može koristiti za jednostavnu mrežnu prijavu.", "Edit": "Izmjeni", "EditImages": "Uređivanje slika", "EditSubtitles": "Uredi titlove", - "EnableColorCodedBackgrounds": "Omogući kodirane boje pozadine", - "EnablePhotos": "Omogući slike", - "EnablePhotosHelp": "Slike će biti otkrite i prikazivane zajedno s drugim medijskim datotekama.", + "EnableColorCodedBackgrounds": "Kodirane boje pozadine", + "EnablePhotos": "Prikaži slike", + "EnablePhotosHelp": "Slike će biti otkrivene i prikazivane zajedno s drugim medijskim datotekama.", "Ended": "Završeno", "EndsAtValue": "Završava u {0}", "ErrorAddingListingsToSchedulesDirect": "Došlo je do pogreške prilikom dodavanja postava vašim zakazanim direktnim računima. Raspored dopušta samo ograničen broj postava po računu. Možda ćete morati se prijavite u zakazanim \"Direct\" web stranicama i ukloniti unose drugih s računa prije nastavka.", "ErrorAddingMediaPathToVirtualFolder": "Došlo je do pogreške prilikom dodavanja putanje medija. Provjerite dali je putanja valjana i da proces Jellyfin Server-a ima pristup tom mjestu.", "ErrorAddingTunerDevice": "Došlo je do pogreške prilikom dodavanja uređaja TV/radio pretraživača. Provjerite da je dostupan i pokušajte ponovno.", - "ErrorGettingTvLineups": "Došlo je do pogreške prilikom preuzimanja tv postave. Provjerite dali su vaše informacije točne i pokušajte ponovno.", + "ErrorGettingTvLineups": "Došlo je do pogreške prilikom preuzimanja TV postave. Provjerite dali su vaše informacije točne i pokušajte ponovno.", "ErrorMessageStartHourGreaterThanEnd": "Vrijeme završetka mora biti veće od početka.", "ErrorPleaseSelectLineup": "Odaberite postavu i pokušajte ponovno. Ako niti jedna postava nije dostupna provjerite dali su korisničko ime, lozinka i poštanski broj točni.", "ErrorSavingTvProvider": "Došlo je do pogreške prilikom snimanja TV pružatelja. Provjerite da je dostupan i pokušajte ponovno.", - "ExtractChapterImagesHelp": "Izdvajanje slika poglavlja omogućiti će Jellyfin aplikaciji za prikaz grafičkih izbornika za odabir scena. Proces može biti spor, CPU intenzivno korišten i može zahtijevati nekoliko gigabajta prostora. Ono se pokreće kad je otkriven video, a također i kao noćni zadatak. Raspored je podesiv u području rasporeda zadataka. Ne preporučuje se za pokretanje ovog zadatka tijekom sati čestog korištenja.", + "ExtractChapterImagesHelp": "Izdvajanje slika poglavlja omogućiti će klijentima prikaz grafičkih izbornika za odabir scena. Proces može biti spor, resursi intenzivno korišteni i može zahtijevati nekoliko gigabajta prostora. Ono se pokreće kad je otkriven video, a također i kao noćni zadatak. Raspored je podesiv u području rasporeda zadataka. Ne preporučuje se za pokretanje ovog zadatka tijekom sati čestog korištenja.", "FFmpegSavePathNotFound": "Nismo mogli locirati FFmpeg korištenjem putanje koju ste unijeli. FFprobe je također potreban i mora postojati u istoj mapi. Te komponente su obično u paketu zajedno u istom preuzimanju. Provjerite putanju i pokušajte ponovno.", "Favorite": "Omiljeni", "File": "Datoteka", "FileNotFound": "Datoteka nije pronađena.", "FileReadCancelled": "Učitavanje datoteke je prekinuto.", - "FileReadError": "Prilikom učitavanja datoteke desila se greška", + "FileReadError": "Prilikom učitavanja datoteke dogodila se greška.", "FolderTypeBooks": "Knjige", "FolderTypeMovies": "Filmovi", "FolderTypeMusic": "Glazba", - "FolderTypeMusicVideos": "Glazbeni videi", + "FolderTypeMusicVideos": "Glazbeni spotovi", "FolderTypeTvShows": "TV", - "FolderTypeUnset": "Isključi (miješani sadržaj)", + "FolderTypeUnset": "Miješani sadržaj", "Friday": "Petak", "Genres": "Žanrovi", "GroupVersions": "Verzija grupe", @@ -158,7 +158,7 @@ "H264CrfHelp": "Konstante brzine faktora (CRF) je postavka zadane kvalitete za x264 enkodera. Možete postaviti vrijednosti između 0 i 51, gdje će niže vrijednosti rezultirati boljom kvalitetom (na račun veće veličine datoteka). Razumne vrijednosti su između 18 i 28. Zadana za x264 je 23, tako da to možete koristiti kao početnu točku.", "EncoderPresetHelp": "Odaberite bržu vrijednost za poboljšanje performansi ili sporiju za poboljšanje kvalitete.", "HDPrograms": "HD programi", - "HardwareAccelerationWarning": "Omogućavanje hardverskog ubrzanja može uzrokovati nestabilnostima u nekim sredinama. Pobrinite se da Vaš operativni sustav i video drajveri su u potpunosti ažurni. Ako imate poteškoća s reprodukcijom videa nakon omogućavanja ovoga, morat ćete promijeniti postavku natrag na Automatski.", + "HardwareAccelerationWarning": "Omogućavanje hardverskog ubrzanja može uzrokovati nestabilnostima u nekim sredinama. Pobrinite se da Vaš operativni sustav i video drajveri su u potpunosti ažurni. Ako imate poteškoća s reprodukcijom videa nakon omogućavanja ovoga, morat ćete promijeniti postavku natrag na Ništa.", "HeaderAccessSchedule": "Raspored pristupa", "HeaderAccessScheduleHelp": "Napravite raspored pristupa da bi ograničili pristup određenim satima.", "HeaderActiveDevices": "Aktivni uređaji", @@ -189,7 +189,7 @@ "HeaderCodecProfileHelp": "Profili kodeka definiraju ograničenja kada uređaji izvode sadržaj u specifičnom kodeku. Ako se ograničenja podudaraju tada će sadržaj biti transkodiran, iako je kodek konfiguriran za direktno izvođenje.", "HeaderConfirmPluginInstallation": "Potvrdi instalaciju dodatka", "HeaderConfirmProfileDeletion": "Potvrdite brisanje profila", - "HeaderConfirmRevokeApiKey": "Opozovi Api ključ", + "HeaderConfirmRevokeApiKey": "Opozovi API ključ", "HeaderConnectToServer": "Spoji se na Server", "HeaderConnectionFailure": "Neuspjelo spajanje", "HeaderContainerProfile": "Profil spremnika", @@ -221,7 +221,7 @@ "HeaderForgotPassword": "Zaboravili ste lozinku", "HeaderFrequentlyPlayed": "Često izvođeno", "HeaderGuideProviders": "Pružatelji vodiča", - "HeaderHttpHeaders": "Http zaglavlja", + "HeaderHttpHeaders": "HTTP zaglavlja", "HeaderIdentification": "Identifikacija", "HeaderIdentificationCriteriaHelp": "Unesite barem jedan kriterij za identifikaciju.", "HeaderIdentificationHeader": "Identifikacija zaglavlja", @@ -244,7 +244,7 @@ "HeaderLoginFailure": "Neuspjela prijava", "HeaderMedia": "Medij", "HeaderMediaFolders": "Medijska mapa", - "HeaderMediaInfo": "Info medija:", + "HeaderMediaInfo": "Info medija", "HeaderMetadataSettings": "Postavke meta-podataka", "HeaderMoreLikeThis": "Više ovakvih", "HeaderMovies": "Filmovi", @@ -278,8 +278,8 @@ "HeaderScenes": "Scene", "HeaderSchedule": "Raspored", "HeaderSeasons": "Sezone", - "HeaderSelectCertificatePath": "Odaberi put certifikata:", - "HeaderSelectMetadataPath": "Odaberite putanju meta-podataka:", + "HeaderSelectCertificatePath": "Odaberi putanju certifikata", + "HeaderSelectMetadataPath": "Odaberite putanju meta-podataka", "HeaderSelectMetadataPathHelp": "Pregledajte ili unesite putanju za pohranu meta-podataka. U mapu se mora moći pisati.", "HeaderSelectPath": "Odaberi putanju", "HeaderSelectServer": "Odaberi Server", @@ -288,7 +288,7 @@ "HeaderSelectTranscodingPath": "Odaberite privremenu putanju konvertiranja", "HeaderSelectTranscodingPathHelp": "Pregledajte ili unesite putanju za korištenje konvertiranja privremenih datoteka. U mapu se mora moći pisati.", "HeaderSendMessage": "Pošalji poruku", - "HeaderSeries": "Series:", + "HeaderSeries": "Serija", "HeaderSeriesOptions": "Opcije serija", "HeaderServerSettings": "Postavke Servera", "HeaderSettings": "Postavke", @@ -325,7 +325,7 @@ "Identify": "Identificiraj", "Images": "Slike", "ImportFavoriteChannelsHelp": "Ako je omogućeno, samo kanali koji su označeni kao omiljeni na uređaju TV/radio pretraživača će se uvesti.", - "InstallingPackage": "Instaliranje {0}", + "InstallingPackage": "Instaliranje {0} (verzija {1})", "InstantMix": "Trenutno miješanje", "ItemCount": "{0} stavaka", "Kids": "Djeca", @@ -344,13 +344,13 @@ "LabelAlbumArtMaxWidth": "Maksimalna širina Album art-a:", "LabelAlbumArtMaxWidthHelp": "Maksimalna rezolucija albuma izloženih putem UPnP:albumArtURI.", "LabelAlbumArtPN": "Grafika albuma PN:", - "LabelAlbumArtists": "Izvođači albuma", + "LabelAlbumArtists": "Izvođači albuma:", "LabelAll": "Sve", "LabelAllowHWTranscoding": "Dopusti hardversko konvertiranje", "LabelAllowServerAutoRestart": "Dopusti serveru da se automatski resetira kako bi proveo nadogradnje", - "LabelAllowServerAutoRestartHelp": "Server će se resetirati dok je u statusu mirovanja, odnosno kada nema aktivnih korisnika.", + "LabelAllowServerAutoRestartHelp": "Server će se resetirati samo dok je u statusu mirovanja kada nema aktivnih korisnika.", "LabelAppName": "Ime aplikacije", - "LabelAppNameExample": "Primjer: Sickbeard, NzbDrone", + "LabelAppNameExample": "Primjer: Sickbeard, Sonarr", "LabelArtists": "Izvođači:", "LabelArtistsHelp": "Odvoji višestruko koristeći ;", "LabelAudioLanguagePreference": "Postavke audio jezika:", @@ -362,7 +362,7 @@ "LabelBlastMessageIntervalHelp": "Određuje trajanje u sekundama između svake poruke dostupnosti servera.", "LabelCache": "Predmemorija:", "LabelCachePath": "Putanja predmemorije:", - "LabelCachePathHelp": "Odredite prilagođenu lokaciju za predmemorijske datoteke servera, kao što su slike. Ostavite prazno za korištenje zadanog poslužitelja.", + "LabelCachePathHelp": "Odredite prilagođenu lokaciju za predmemorijske datoteke servera kao što su slike. Ostavite prazno za korištenje zadanog poslužitelja.", "LabelCancelled": "Otkazan", "LabelChannels": "Kanali:", "LabelCollection": "Kolekcija:", @@ -371,12 +371,12 @@ "LabelCountry": "Zemlja:", "LabelCriticRating": "Ocjene kritike:", "LabelCurrentPassword": "Sadašnja lozinka:", - "LabelCustomCss": "Prilagođen css:", - "LabelCustomCssHelp": "Primijenite svoj vlastiti prilagođeni css na web sučelje.", + "LabelCustomCss": "Prilagođeni CSS:", + "LabelCustomCssHelp": "Primijenite svoj vlastiti prilagođeni stil na web sučelje.", "LabelCustomDeviceDisplayName": "Prikaz naziva:", "LabelCustomDeviceDisplayNameHelp": "Navedite naziv prilagođenog prikaza ili ostaviti prazno za korištenje naziva koji je izvijestio uređaj.", "LabelCustomRating": "Prilagođena ocjena:", - "LabelDateAdded": "Datumu dodavanja", + "LabelDateAdded": "Datum dodavanja:", "LabelDateAddedBehavior": "Ponašanje datuma dodanog za novi sadržaj:", "LabelDateAddedBehaviorHelp": "Ako je prisutna vrijednost meta-podataka uvijek će se koristiti prije bilo kojih od ovih opcija.", "LabelDay": "Dan:", @@ -384,29 +384,29 @@ "LabelDefaultUser": "Zadani korisnik:", "LabelDefaultUserHelp": "Određuje koja će biblioteka biti prikazana na spojenim uređajima. Ovo se može zaobići za svaki uređaj koristeći profile.", "LabelDeviceDescription": "Opis uređaja", - "LabelDidlMode": "Didl način:", + "LabelDidlMode": "DIDL način:", "LabelDisplayMissingEpisodesWithinSeasons": "Prikaži epizode koje nedostaju unutar sezone", "LabelDisplayName": "Prikaz naziva:", "LabelDisplayOrder": "Poredak prikaza:", "LabelDisplaySpecialsWithinSeasons": "Prikaz specijalnih dodataka unutar sezona u kojima su emitirani", "LabelDownMixAudioScale": "Pojačaj zvuk kada radiš downmix:", - "LabelDownMixAudioScaleHelp": "Pojačaj zvuk kada radiš downmix. Postavi na 1 ako želiš zadržati orginalnu jačinu zvuka.", + "LabelDownMixAudioScaleHelp": "Pojačaj zvuk prilikom downmix-a. Vrijednost 1 će zadržati originalnu jačinu zvuka.", "LabelDownloadLanguages": "Jezici za preuzimanje:", "LabelEasyPinCode": "Lagan PIN kod:", "LabelEmbedAlbumArtDidl": "Ugradi grafike albuma u Didl", "LabelEmbedAlbumArtDidlHelp": "Neki uređaji podržavaju ovu metodu za prikaz grafike albuma. Drugi bi mogli imati problema sa ovom opcijom uključenom.", "LabelEnableAutomaticPortMap": "Omogući automatsko mapiranje porta", - "LabelEnableAutomaticPortMapHelp": "Pokušaj automatski mapirati javni port za lokalni port preko UPnP. Možda neće raditi s nekim modelima router-a.", + "LabelEnableAutomaticPortMapHelp": "Automatski proslijedi javni port na svom ruteru na lokalni port preko UPnP. Možda neće raditi sa nekim modelima router-a ili mrežnim konfiguracijama. Promjene se neće primijeniti do restarta servera.", "LabelEnableBlastAliveMessages": "Objavi poruke dostupnosti", "LabelEnableBlastAliveMessagesHelp": "Omogući ovo ako server nije prikazan kao siguran za druge UPnP uređaje na mreži.", "LabelEnableDlnaClientDiscoveryInterval": "Interval za otkrivanje kljenata (sekunde)", "LabelEnableDlnaClientDiscoveryIntervalHelp": "Određuje trajanje u sekundama između SSDP pretraživanja obavljenih od Jellyfin-a.", - "LabelEnableDlnaDebugLogging": "Omogući DLNA logiranje grešaka.", - "LabelEnableDlnaDebugLoggingHelp": "Ovo će kreirati iznimno velike log datoteke i jedino se preporuča koristiti u slučaju problema.", + "LabelEnableDlnaDebugLogging": "Omogući DLNA logiranje grešaka", + "LabelEnableDlnaDebugLoggingHelp": "Kreiraj iznimno velike log datoteke i preporuča se koristiti jedino u slučaju problema.", "LabelEnableDlnaPlayTo": "Omogući DLNA izvođenje na", - "LabelEnableDlnaPlayToHelp": "Jellyfin može otkriti uređaje unutar svoje mreže i ponuditi mogućnost da ih daljinski upravlja.", - "LabelEnableDlnaServer": "Omogući Dlna server", - "LabelEnableDlnaServerHelp": "Omogućuje UPnP uređajima na mreži da pregledavaju i pokreću Jellyfin sadržaj.", + "LabelEnableDlnaPlayToHelp": "Otkrij uređaje unutar svoje mreže i ponudi mogućnost da ih daljinski upravlja.", + "LabelEnableDlnaServer": "Omogući DLNA server", + "LabelEnableDlnaServerHelp": "Omogućuje UPnP uređajima na mreži da pregledavaju i pokreću sadržaj.", "LabelEnableRealtimeMonitor": "Omogući nadgledanje u realnom vremenu", "LabelEnableRealtimeMonitorHelp": "Promjene će biti procesuirane odmah, nad podržanim datotekama sistema.", "LabelEnableSingleImageInDidlLimit": "Ograničenje na jednu ugrađenu sliku", @@ -416,12 +416,12 @@ "LabelEvent": "Događaj:", "LabelEveryXMinutes": "Svaki:", "LabelExtractChaptersDuringLibraryScan": "Izvadi slike poglavlja dok traje skeniranje biblioteke", - "LabelExtractChaptersDuringLibraryScanHelp": "Ako je omogućeno, slike poglavlje će se izdvojiti kad se videozapisi uvezu tijekom skeniranja biblioteke. Ako je onemogućeno izdvojiti će se u rasporedu zadatka slika poglavlja, čime se omogućuje da se skeniranje redovne biblioteke završiti brže.", + "LabelExtractChaptersDuringLibraryScanHelp": "Generiraj slike poglavlje kad se videozapisi uvezu tijekom skeniranja biblioteke. U suprotnom, izdvajanje će se odraditi u rasporedu zadatka slika poglavlja, čime se omogućuje da se skeniranje redovne biblioteke završi brže.", "LabelFailed": "Neuspješno", "LabelFileOrUrl": "Datoteka ili url:", "LabelFinish": "Kraj", "LabelForgotPasswordUsernameHelp": "Unesite korisničko ime, ako se sjećate.", - "LabelFriendlyName": "Prijateljsko ime", + "LabelFriendlyName": "Prijateljsko ime:", "LabelServerNameHelp": "Ovo ime će se koristiti za identifikaciju servera. Ako ostavite prazno, ime računala će se koristi kao identifikator.", "LabelGroupMoviesIntoCollections": "Grupiraj filmove u kolekciju", "LabelGroupMoviesIntoCollectionsHelp": "Kada se prikazuje lista filmova, filmovi koji pripadaju kolekciji biti će prikazani kao jedna stavka.", @@ -475,7 +475,7 @@ "LabelMetadataDownloadersHelp": "Omogućite i poredajte željene preuzimatelje meta-podataka po redu prioriteta. Manjeg prioriteta preuzimatelji koristit će se samo za ispunjavanje nedostajućih informacija.", "LabelMetadataPath": "Put meta-podataka:", "LabelMetadataPathHelp": "Odredite prilagođenu lokaciju za preuzete ilustracije i meta-podatke.", - "LabelMetadataReaders": "Čitači meta-podataka", + "LabelMetadataReaders": "Čitači meta-podataka:", "LabelMetadataReadersHelp": "Poredajte željene lokalne izvore meta-podataka po redu prioriteta. Prva nađena datoteka biti će čitana.", "LabelMetadataSavers": "Snimači meta-podataka:", "LabelMetadataSaversHelp": "Odaberite formate datoteka za spremanje meta-podataka.", @@ -567,7 +567,7 @@ "LabelStopWhenPossible": "Zaustavi kada je moguće:", "LabelStopping": "Zaustavljanje", "LabelSubtitleFormatHelp": "Npr.: srt", - "LabelSubtitlePlaybackMode": "Način titlova prijevoda", + "LabelSubtitlePlaybackMode": "Način prijevoda:", "LabelSupportedMediaTypes": "Podržani tipovi medija:", "LabelTag": "Oznaka:", "LabelTagline": "Slogan:", @@ -652,15 +652,15 @@ "MessageDirectoryPickerBSDInstruction": "Za BSD možda ćete morati podesiti pohranu unutar vašega FreeNAS kako bi se omogućilo Jellyfin-u pristup.", "MessageDirectoryPickerInstruction": "Mrežne putanje mogu se unijeti ručno u slučaju da gumb Mreže ne uspije locirati vaše uređaje. Na primjer, {0} ili {1}.", "MessageDirectoryPickerLinuxInstruction": "Za Linux na Arch Linux, CentOS, Debian, Fedora, OpenSuse ili Ubuntu morate dati korisniku Jellyfin sistema barem pristup čitanja vašim lokacijama za skladištenje.", - "MessageDownloadQueued": "Preuzimanje na čekanju", - "MessageFileReadError": "Prilikom učitavanja datoteke desila se greška", + "MessageDownloadQueued": "Preuzimanje na čekanju.", + "MessageFileReadError": "Prilikom učitavanja datoteke desila se greška. Pokušajte ponovno.", "MessageForgotPasswordFileCreated": "Sljedeća datoteka je stvorena na vašem poslužitelju i sadrži upute o tome kako postupiti:", "MessageForgotPasswordInNetworkRequired": "Molim pokušajte ponovno unutar kućne mreže za pokretanje postupka za poništavanje zaporke.", "MessageInstallPluginFromApp": "Ovaj dodatak mora biti instaliran unutar aplikacije u kojoj ga namjeravate koristiti.", "MessageInvalidForgotPasswordPin": "Upisan je neispravan ili zastarjele pin. Molim, pokušajte ponovno.", "MessageInvalidUser": "Pogrešno korisničko ime ili lozinka. Molim, pokušajte ponovo.", "MessageItemSaved": "Stavka je snimljena.", - "MessageItemsAdded": "Stavke su dodane", + "MessageItemsAdded": "Stavke su dodane.", "MessageLeaveEmptyToInherit": "Ostavite prazno da naslijedi postavke od roditelja stavke ili globalnu zadanu vrijednost.", "MessageNoAvailablePlugins": "Nema odgovarajućih dodataka.", "MessageNoMovieSuggestionsAvailable": "Filmski prijedlozi nisu trenutno dostupni. Počnite s gledanjem i ocjenjivanjem svoje filmove, a zatim se vratite da biste vidjeli svoje preporuke.", @@ -672,7 +672,7 @@ "MessagePluginConfigurationRequiresLocalAccess": "Za podešavanje ovog dodatka prijavite se izravno na lokalni server.", "MessagePluginInstallDisclaimer": "Dodaci izgrađeni od strane članova Jellyfin zajednice su sjajan način kako bi unaprijedili Vaše iskustvo Jellyfin s dodatnim značajkama i prednostima. Prije instaliranja budite svjesni učinaka koje mogu imati na vaš Jellyfin Server, kao što je duže skeniranje biblioteke, dodatna pozadinska obrada, a smanjena stabilnost sustava.", "MessageReenableUser": "Pogledajte dolje za ponovno omogućenje", - "MessageSettingsSaved": "Postavke snimljene", + "MessageSettingsSaved": "Postavke spremljene.", "MessageTheFollowingLocationWillBeRemovedFromLibrary": "Sljedeće lokacije medija biti će uklonjene iz vaše Jellyfin biblioteke:", "MessageUnableToConnectToServer": "Nismo u mogućnosti spojiti se na odabrani poslužitelj. Provjerite dali je pokrenut i pokušajte ponovno.", "MessageUnsetContentHelp": "Sadržaj će biti prikazan kao obične mape. Za najbolje rezultate upotrijebite upravitelj meta-podataka za postavljanje vrste sadržaja pod-mapa.", @@ -785,14 +785,14 @@ "OptionMissingEpisode": "Epizode koje nedostaju", "OptionMonday": "Ponedjeljak", "OptionNameSort": "Nazivu", - "OptionNew": "Novo...", + "OptionNew": "Novo…", "OptionNone": "Ništa", "OptionOnAppStartup": "Kada se aplikacija pokrene", "OptionOnInterval": "U intervalu", "OptionParentalRating": "Roditeljska ocjena", "OptionPlainStorageFolders": "Prikaži sve mape kako jednostavne mape za skladištenje", "OptionPlainStorageFoldersHelp": "Ako je omogućeno, sve mape se prezentiraju u DIDL-u kao \"objekt.spremnik.skladišnaMapa\" umjesto više specijaliziranog tipa kao \"objekt.spremnik.osoba.glazbaIzvođač\".", - "OptionPlainVideoItems": "Prikaži sav video kao jednostavne video stavke.", + "OptionPlainVideoItems": "Prikaži sve video zapise kao jednostavne video stavke", "OptionPlainVideoItemsHelp": "Ako je omogućeno, sav video se prezentira u DIDL-u kao \"objekt.stavka.videoStavka\" umjesto više specijaliziranog tipa kao \"objekt.stavka.videoStavka.film\".", "OptionPlayCount": "Broju izvođenja", "OptionPlayed": "Izvođeni", @@ -862,7 +862,7 @@ "RecordingScheduled": "Snimka je zakazana.", "Refresh": "Osviježi", "RefreshDialogHelp": "Meta-podaci se osvježavaju na temelju postavki i internet usluga koje su omogućene u nadzornoj ploči Jellyfin Server-a.", - "RefreshQueued": "Osviježi stavke na čekanju", + "RefreshQueued": "Osviježi stavke na čekanju.", "ReleaseDate": "Datum izdavanja", "RememberMe": "Zapamti me", "RemoveFromCollection": "Ukloni iz kolekcije", @@ -890,7 +890,7 @@ "ServerNameIsShuttingDown": "Jellyfin Server - {0} se gasi.", "ServerUpdateNeeded": "Jellyfin Server treba ažurirati. Da biste preuzeli najnoviju verziju, posjetite {0}", "Settings": "Postavke", - "SettingsSaved": "Postavke snimljene", + "SettingsSaved": "Postavke spremljene.", "SettingsWarning": "Mijenjanje ove vrijednosti može uzrokovati nestabilnost ili kvarove na povezivanju. Ako naiđete na bilo kakve probleme, preporučamo da ih promijenite natrag na zadane.", "Share": "Dijeli", "ShowIndicatorsFor": "Prikaži pokazatelja za:", @@ -1006,9 +1006,237 @@ "AccessRestrictedTryAgainLater": "Dostup je trenutačno ograničen. Pokušajte poslije ponovno.", "Albums": "Albumi", "All": "Sve", - "AllComplexFormats": "Svi kompleksni formati (ASS, SSA, VOBSUB, PGS, SUB/IDX, itd.)", + "AllComplexFormats": "Svi kompleksni formati (ASS, SSA, VOBSUB, PGS, SUB, IDX, ...)", "Books": "Knjige", "Channels": "Kanali", "Collections": "Kolekcije", - "Artists": "Izvođači" + "Artists": "Izvođači", + "DownloadsValue": "{0} preuzimanja", + "Down": "Dolje", + "Playlists": "Popis za reprodukciju", + "AllowMediaConversionHelp": "Dopusti ili odbij pristup mogućnosti konverzije datoteke.", + "AllLibraries": "Sve biblioteke", + "Aired": "Prikazano", + "AirDate": "Datum prikazivanja", + "AddedOnValue": "Dodano {0}", + "Songs": "Pjesme", + "Shows": "Serije", + "Photos": "Slike", + "HeaderFavoriteSongs": "Omiljene pjesme", + "HeaderFavoriteArtists": "Omiljeni izvođači", + "HeaderFavoriteAlbums": "Omiljeni albumi", + "HeaderFavoriteEpisodes": "Omiljene epizode", + "HeaderFavoriteShows": "Omiljene serije", + "HeaderContinueWatching": "Nastavi gledati", + "HeaderAlbumArtists": "Izvođači na albumu", + "Folders": "Mape", + "Favorites": "Favoriti", + "ButtonCast": "Uloge", + "EveryXHours": "Svakih {0} sati", + "EveryHour": "Svaki sat", + "OnApplicationStartup": "Prilikom pokretanja aplikacije", + "Backdrop": "Pozadina", + "Auto": "Automatski", + "Audio": "Audio", + "Artist": "Izvođač", + "AnyLanguage": "Bilo koji jezik", + "AlwaysPlaySubtitlesHelp": "Prijevodi koji odgovaraju odabranom jeziku će uvijek biti odabrani unatoč jeziku audio zapisa.", + "AlwaysPlaySubtitles": "Uvijek prikaži prijevod", + "AllowRemoteAccessHelp": "Ako je odznačeno, svi udaljeni pristupi će biti blokirani.", + "AllowRemoteAccess": "Dopusti udaljene pristupe na ovaj Jellyfin server.", + "AllowOnTheFlySubtitleExtraction": "Dopusti izvlačenje prijevoda u hodu", + "AllowMediaConversion": "Dopusti konverziju datoteke", + "AllLanguages": "Svi jezici", + "Alerts": "Upozorenja", + "AlbumArtist": "Izvođač na albumu", + "Album": "Album", + "AddToPlayQueue": "Dodaj u red izvođenja", + "Banner": "Zaglavlje", + "AutoBasedOnLanguageSetting": "Automatski (prema jezičnim postavkama)", + "AspectRatio": "Omjer", + "Ascending": "Uzlazno", + "Art": "Grafike", + "Absolute": "Apsolutno", + "CopyStreamURLSuccess": "URL uspješno kopiran.", + "CopyStreamURL": "Kopiraj URL streama", + "ContinueWatching": "Nastavi gledati", + "Connect": "Spoji", + "ClientSettings": "Postavke klijenta", + "ButtonTogglePlaylist": "Lista izvođenja", + "ButtonToggleContextMenu": "Više", + "ButtonSplit": "Odvoji", + "ButtonStop": "Stop", + "ButtonScanAllLibraries": "Skeniraj sve biblioteke", + "ButtonInfo": "Info", + "ButtonFilter": "Filtriraj", + "ButtonAddImage": "Dodaj sliku", + "Box": "Kutija", + "AskAdminToCreateLibrary": "Traži administratora da kreira biblioteku.", + "PictureInPicture": "Slika u slici", + "OtherArtist": "Ostali izvođači", + "OptionThumb": "Sličica", + "OptionProtocolHttp": "HTTP", + "OptionProfileVideo": "Video", + "OptionProfileAudio": "Audio", + "OptionPoster": "Poster", + "OptionList": "Lista", + "OptionIsSD": "SD", + "OptionIsHD": "HD", + "OptionDvd": "DVD", + "OptionDownloadLogoImage": "Logo", + "OptionBluray": "Blu-ray", + "OptionBanner": "Zaglavlje", + "Option3D": "3D", + "OneChannel": "Jedan kanal", + "Off": "Isključi", + "Normal": "Normalno", + "None": "Ništa", + "NoSubtitles": "Ništa", + "No": "Ne", + "NextUp": "Slijedi", + "Next": "Slijedeće", + "Never": "Nikada", + "MusicVideo": "Glazbeni spot", + "Movie": "Film", + "Metadata": "Meta podaci", + "MessageSyncPlayLibraryAccessDenied": "Pristup ovom sadržaju je ograničen.", + "MessageSyncPlayDisabled": "SyncPlay onemogućen.", + "MessageSyncPlayEnabled": "SyncPlay omogućen.", + "MessagePleaseWait": "Molimo pričekajte. Ovo može potrajati nekoliko minuta.", + "LabelRepositoryName": "Naziv repozitorija", + "LabelRepositoryUrl": "URL repozitorija", + "HeaderNewRepository": "Novi repozitorij", + "MessageNoRepositories": "Nema repozitorija.", + "MessageConfirmAppExit": "Da li želite izaći?", + "Menu": "Meni", + "MediaInfoStreamTypeVideo": "Video", + "MediaInfoStreamTypeSubtitle": "Prijevod", + "MediaInfoStreamTypeData": "Podaci", + "MediaInfoStreamTypeAudio": "Audio", + "MediaInfoSoftware": "Softver", + "Logo": "Logo", + "List": "Lista", + "LabelYear": "Godina:", + "LabelVideo": "Video", + "DashboardArchitecture": "Arhitektura: {0}", + "DashboardOperatingSystem": "Operativni sustav: {0}", + "DashboardServerName": "Server: {0}", + "DashboardVersionNumber": "Verzija: {0}", + "LabelVersion": "Verzija:", + "LabelTheme": "Tema:", + "LabelTextSize": "Veličina teksta:", + "LabelTextColor": "Boja teksta:", + "LabelSyncPlayAccess": "SyncPlay pristup", + "LabelSyncPlayAccessNone": "Onemogućeno za ovog korisnika", + "LabelSyncPlayAccessJoinGroups": "Dozvoli korisniku da se pridruži grupama", + "LabelSyncPlayAccessCreateAndJoinGroups": "Dozvoli korisniku da kreira i pridruži se grupama", + "LabelSyncPlayLeaveGroupDescription": "Onemogući SyncPlay", + "LabelSyncPlayLeaveGroup": "Napusti grupu", + "LabelSyncPlayNewGroupDescription": "Kreiraj novu grupu", + "LabelSyncPlayNewGroup": "Nova grupa", + "MillisecondsUnit": "ms", + "LabelSubtitles": "Prijevodi", + "LabelStatus": "Status:", + "LabelSoundEffects": "Zvučni efekti:", + "LabelSortOrder": "Redoslijed sortiranja:", + "LabelSortBy": "Sortiranje po:", + "LabelSize": "Veličina:", + "LabelServerName": "Naziv servera:", + "EnableFasterAnimations": "Brže animacije", + "LabelReasonForTranscoding": "Razlog transkodiranja:", + "LabelPreferredSubtitleLanguage": "Preferirani jezik prijevoda:", + "LabelStable": "Stabilna", + "LabelLanNetworks": "LAN mreže:", + "LabelInternetQuality": "Internet kvaliteta:", + "LabelHomeNetworkQuality": "Kvaliteta kućne mreže:", + "LabelFormat": "Format:", + "LabelFont": "Font:", + "LabelFolder": "Mapa:", + "LabelEnableHttps": "Omogući HTTPS", + "LabelEnableHardwareDecodingFor": "Omogući hardversko dekodiranje za:", + "LabelDisplayLanguageHelp": "Prevođenje Jellyfin-a je projekt u tijeku.", + "LabelDisplayLanguage": "Jezik prikaza:", + "LabelAutomaticallyRefreshInternetMetadataEvery": "Automatski osvježi meta podatke sa interneta:", + "LabelAudioChannels": "Audio kanali:", + "LabelAudio": "Audio", + "LabelAlbum": "Album:", + "Label3DFormat": "3D format:", + "Items": "Stavke", + "Horizontal": "Horizontalno", + "Home": "Početna", + "Hide": "Sakrij", + "HeaderSyncPlayEnabled": "SyncPlay omogućen", + "HeaderSyncPlaySelectGroup": "Pridruži se grupi", + "HeaderSubtitleDownloads": "Preuzimanje prijevoda", + "HeaderSubtitleAppearance": "Prikaz prijevoda", + "HeaderStopRecording": "Zaustavi snimanje", + "HeaderStatus": "Status", + "HeaderSeriesStatus": "Status serije", + "HeaderSecondsValue": "{0} sekundi", + "HeaderRemoteAccessSettings": "Postavke udaljenog pristupa", + "HeaderPlaybackError": "Pogreška reprodukcije", + "HeaderPlayAll": "Reproduciraj sve", + "HeaderOnNow": "Trenutno", + "HeaderNextVideoPlayingInValue": "Slijedeći video se reproducira za {0}", + "HeaderNextEpisodePlayingInValue": "Slijedeća epizoda se reproducira za {0}", + "HeaderNewDevices": "Novi uređaji", + "HeaderNavigation": "Navigacija", + "HeaderMyDevice": "Moj uređaj", + "HeaderLibrarySettings": "Postavke biblioteke", + "HeaderHome": "Početna", + "HeaderGenres": "Žanrovi", + "HeaderFavoritePeople": "Omiljeni ljudi", + "HeaderFavoriteMovies": "Omiljeni filmovi", + "HeaderFavoriteBooks": "Omiljene knjige", + "HeaderDVR": "DVR", + "HeaderDownloadSync": "Preuzmi i sinkroniziraj", + "HeaderContinueListening": "Nastavi slušati", + "HeaderConfigureRemoteAccess": "Konfiguriraj udaljeni pristup", + "HeaderAudioBooks": "Audio knjige", + "ApiKeysCaption": "Popis trenutno dostupnih API ključeva", + "HeaderAllowMediaDeletionFrom": "Dozvoli brisanje datoteka iz", + "HeaderAlbums": "Albumi", + "HeaderAdmin": "Administrator", + "Guide": "Vodič", + "GroupBySeries": "Grupiraj po serijama", + "Genre": "Žanr", + "General": "Općenito", + "Fullscreen": "Prikaz cijelog ekrana", + "Filters": "Filteri", + "FetchingData": "Dohvaćanje dodatnih podataka", + "Features": "Mogućnosti", + "Extras": "Dodaci", + "ExtraLarge": "Ekstra veliko", + "ExitFullscreen": "Izađi iz prikaza cijelog ekrana", + "EveryNDays": "Svakih {0} dana", + "Episodes": "Epizode", + "Episode": "Epizoda", + "EnableHardwareEncoding": "Omogući hardversko enkodiranje", + "EnableExternalVideoPlayers": "Vanjski video player", + "EnableDecodingColorDepth10Vp9": "Omogući 10-Bitno hardversko dekodiranje za VP9", + "EnableDecodingColorDepth10Hevc": "Omogući 10-Bitno hardversko dekodiranje za HEVC", + "EnableCinemaMode": "Kino mod", + "EnableBackdrops": "Pozadine", + "EditMetadata": "Izmijeni meta podatke", + "DisplayMissingEpisodesWithinSeasons": "Prikaži epizode koje nedostaju unutar sezona", + "DisplayInMyMedia": "Prikaz na početnom ekranu", + "Display": "Prikaz", + "Disconnect": "Odspoji", + "Disc": "Disk", + "Disabled": "Onemogućeno", + "Directors": "Režiseri", + "DirectPlaying": "Direktna reprodukcija", + "DetectingDevices": "Tražim uređaje", + "Descending": "Silazno", + "DefaultMetadataLangaugeDescription": "Ovo su vaše zadane postavke te se mogu prilagoditi na razini biblioteke.", + "Default": "Zadano", + "DatePlayed": "Datum reprodukcije", + "DateAdded": "Datum dodavanja", + "CriticRating": "Rejting kritičara", + "CopyStreamURLError": "Došlo je do greške prilikom kopiranja URLa.", + "ConfirmEndPlayerSession": "Da li želite ugasiti Jellyfin na {0}?", + "CommunityRating": "Rejting zajednice", + "Browse": "Pretraži", + "BoxRear": "Kutija (stražnja)", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/strings/hu.json b/src/strings/hu.json index 6b32e87858..dfd45cf63c 100644 --- a/src/strings/hu.json +++ b/src/strings/hu.json @@ -1562,6 +1562,14 @@ "MessageNoGenresAvailable": "Engedélyezz néhány metaadat szolgáltatót, hogy műfaj adatokat tölthess le az internetről.", "EnableFasterAnimationsHelp": "Gyorsabb animációk és áttűnések használata", "EnableFasterAnimations": "Gyorsabb animációk", - "EnableDecodingColorDepth10Vp9": "10 bites hardveres dekódolás engedélyezése Vp9-hez", - "EnableDecodingColorDepth10Hevc": "10 bites hardveres dekódolás engedélyezése HEVC-hez" + "EnableDecodingColorDepth10Vp9": "10 bites hardveres dekódolás engedélyezése VP9-hez", + "EnableDecodingColorDepth10Hevc": "10 bites hardveres dekódolás engedélyezése HEVC-hez", + "TabRepositories": "Tárolók", + "MessageAddRepository": "Ha új tárolót szeretnél hozzáadni, kattints a gombra a fejlécben, és add meg a szükséges adatokat.", + "LabelRepositoryNameHelp": "Egy egyedi név, amivel megkülönböztetheted a tárolót a többi, a szervezhez hozzáadott tárolótól.", + "LabelRepositoryName": "Tároló neve", + "LabelRepositoryUrlHelp": "A hivatkozni kívánt tároló manifeszt helye.", + "LabelRepositoryUrl": "Tároló URL-je", + "HeaderNewRepository": "Új tároló", + "MessageNoRepositories": "Nincs tároló." } diff --git a/src/strings/id.json b/src/strings/id.json index 8085767984..e5452d7706 100644 --- a/src/strings/id.json +++ b/src/strings/id.json @@ -204,5 +204,6 @@ "Alerts": "Peringatan", "AddedOnValue": "Ditambahkan {0}", "AllowFfmpegThrottling": "Transcode Tercekik", - "AllowOnTheFlySubtitleExtractionHelp": "Subtitle yang melekat di video dapat dikeluarkan dan dikirimkan kepada klien dalam bentuk text biasa dengan tujuan untuk menghalau terjadinya transcoding pada video. Pada beberapa system ini membutuhkan waktu yang lama dan dapat menyebabkan video playback menjadi terhenti dikarenakan proses ekstraksi. Non-aktifkan fitur ini untuk membiarkan subtitle langsung dilekatkan kepada video dengan cara transcoding ketika klien tidak mendukung fitur ini." + "AllowOnTheFlySubtitleExtractionHelp": "Subtitle yang melekat di video dapat dikeluarkan dan dikirimkan kepada klien dalam bentuk text biasa dengan tujuan untuk menghalau terjadinya transcoding pada video. Pada beberapa system ini membutuhkan waktu yang lama dan dapat menyebabkan video playback menjadi terhenti dikarenakan proses ekstraksi. Non-aktifkan fitur ini untuk membiarkan subtitle langsung dilekatkan kepada video dengan cara transcoding ketika klien tidak mendukung fitur ini.", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/strings/is-is.json b/src/strings/is-is.json index f0d39a1d06..ff8f924e22 100644 --- a/src/strings/is-is.json +++ b/src/strings/is-is.json @@ -547,5 +547,6 @@ "ConfirmDeleteItems": "Ef þessum skrám er eytt verða þær fjarlægðar úr bæði stýrikerfinu og miðlasafninu. Ertu viss um að þú viljir halda áfram?", "CommunityRating": "Mat samfélagsins", "ButtonStart": "Byrja", - "BoxSet": "Kassasett" + "BoxSet": "Kassasett", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/strings/it.json b/src/strings/it.json index e4da012d34..838130ab5f 100644 --- a/src/strings/it.json +++ b/src/strings/it.json @@ -1508,7 +1508,7 @@ "LabelChromecastVersion": "Versione Chromecast", "LabelRequireHttpsHelp": "Se selezionata, il server reindirizzerà tutte le richieste HTTP a HTTPS. Vale solo se il sever è configurato per l'ascolto in HTTPS.", "LabelRequireHttps": "Richiede HTTPS", - "LabelEnableHttpsHelp": "Abilita il server all'ascolto sulla porta HTTPS. Il certificato deve essere configurato e valido per l'abilitazione.", + "LabelEnableHttpsHelp": "Abilita il server all'ascolto sulla porta HTTPS configurata. Il certificato deve essere configurato e valido per l'abilitazione.", "LabelEnableHttps": "Abilita HTTPS", "HeaderServerAddressSettings": "Configurazione Indirizzo Server", "HeaderRemoteAccessSettings": "Configurazione Access Remoto", @@ -1517,7 +1517,7 @@ "SaveChanges": "Salva modifiche", "HeaderDVR": "DVR", "LabelNightly": "Nightly", - "SyncPlayAccessHelp": "Scegli il livello d'accesso di questo utente a SyncPlay. SyncPlay ti permette di riprodurre contemporaneamente su diversi dispositivi.", + "SyncPlayAccessHelp": "Selezionare il livello d'accesso di questo utente a SyncPlay che permetterà di riprodurre contemporaneamente su diversi dispositivi.", "MessageSyncPlayErrorMedia": "Impossibile abilitare SyncPlay! Errore media.", "MessageSyncPlayErrorMissingSession": "Impossibile abilitare SyncPlay! Sessione mancante.", "MessageSyncPlayErrorNoActivePlayer": "Nessun player attivo. SyncPlay è stato disabilitato.", @@ -1567,5 +1567,6 @@ "LabelRepositoryUrlHelp": "URL del repository manifest che si vuole includere.", "LabelRepositoryUrl": "URL Repository", "HeaderNewRepository": "Nuovo Repository", - "MessageNoRepositories": "Nessun repository." + "MessageNoRepositories": "Nessun repository.", + "ButtonPlayer": "Player" } diff --git a/src/strings/ja.json b/src/strings/ja.json index bf2cdc6153..b095ffb877 100644 --- a/src/strings/ja.json +++ b/src/strings/ja.json @@ -1143,5 +1143,6 @@ "ClientSettings": "クライアント設定", "Artist": "アーティスト", "AlbumArtist": "アルバム アーティスト", - "Album": "アルバム" + "Album": "アルバム", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/strings/kk.json b/src/strings/kk.json index 6acd5e46b7..5532af90f5 100644 --- a/src/strings/kk.json +++ b/src/strings/kk.json @@ -1543,5 +1543,6 @@ "HeaderRemoteAccessSettings": "Qashyqtan qatynaý parametrleri", "HeaderHttpsSettings": "HTTPS parametrleri", "HeaderFavoritePlaylists": "Tańdaýly oınatý tizimder", - "HeaderDVR": "DVR" + "HeaderDVR": "DVR", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/strings/ko.json b/src/strings/ko.json index cc5f63e541..2d67f10cd6 100644 --- a/src/strings/ko.json +++ b/src/strings/ko.json @@ -1429,5 +1429,6 @@ "ButtonToggleContextMenu": "더보기", "Rate": "평", "PerfectMatch": "정확히 일치", - "OtherArtist": "다른 아티스트" + "OtherArtist": "다른 아티스트", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/strings/lt-lt.json b/src/strings/lt-lt.json index 773a7c5c8b..c8c2b6e448 100644 --- a/src/strings/lt-lt.json +++ b/src/strings/lt-lt.json @@ -1014,5 +1014,6 @@ "ButtonToggleContextMenu": "Daugiau", "ButtonSplit": "Skirstyti", "AskAdminToCreateLibrary": "Prašyti administratoriaus, kad sukurtų mediateka.", - "Album": "Albumas" + "Album": "Albumas", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/strings/lv.json b/src/strings/lv.json index c58374ad24..18346bbda0 100644 --- a/src/strings/lv.json +++ b/src/strings/lv.json @@ -602,14 +602,14 @@ "AsManyAsPossible": "Cik vien iespējams", "Artists": "Izpildītāji", "Art": "Māksla", - "AroundTime": "Ap {0}", + "AroundTime": "Ap", "Anytime": "Jebkad", "AnyLanguage": "Jebkura Valoda", "AlwaysPlaySubtitles": "Vienmēr Rādīt", "AllowedRemoteAddressesHelp": "Ar komatiem atdalīts IP adrešu vai IP/tīkla masku saraksts, kas norāda uz tīkliem, kas var pieslēgties attālināti. Ja atstāts tukšs, visas attālinātās adreses tiks atļautas.", "AllowRemoteAccessHelp": "Ja atķeksēts, visi attālinātie savienojumi tiks bloķēti.", "AllowRemoteAccess": "Atļaut attālinātus savienojumus šim Jellyfin Serverim.", - "AllowOnTheFlySubtitleExtraction": " ", + "AllowOnTheFlySubtitleExtraction": "Atļaut subtitru izvilkšanu atskaņošanas laikā", "AllowMediaConversion": "Atļaut multimēdiju pārveidošanu", "AllLibraries": "Visas bibliotēkas", "AllLanguages": "Visas valodas", @@ -1231,5 +1231,7 @@ "MessageUnauthorizedUser": "Jūs neesat autorizēti lai piekļūtu serverim šajā brīdī. Lūdzu sazinieties ar savu servera administratoru priekš papildus informācijas.", "MessageInstallPluginFromApp": "Šis paplašinājums ir jāuzstāda no lietotnes, kurā jūs to vēlaties izmantot.", "LabelEmbedAlbumArtDidl": "Ievietot albumu vākus iekš Didl", - "LabelSelectFolderGroups": "Automātiski grupēt saturu no sekojošām datnēm skatos kā Filmas, Mūzika un TV:" + "LabelSelectFolderGroups": "Automātiski grupēt saturu no sekojošām datnēm skatos kā Filmas, Mūzika un TV:", + "AllowFfmpegThrottlingHelp": "Kad trans-kodējums vai remux tiek pietiekami tālu priekšā pašreizējai atskaņošanas vietai, process tiks pauzēts lai patērētu mazāk resursu. Tas ir noderīgākais skatoties bez biežas pārlēkšanas. Atspējo šo ja saskaries ar atskaņošanas problēmām.", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/strings/mr.json b/src/strings/mr.json index 381c609a9e..105ac4ec35 100644 --- a/src/strings/mr.json +++ b/src/strings/mr.json @@ -97,5 +97,6 @@ "ButtonRemove": "काढून टाका", "ButtonPreviousTrack": "मागचा ट्रॅक", "ButtonPlay": "प्ले", - "ButtonPause": "पॉझ" + "ButtonPause": "पॉझ", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/strings/ms.json b/src/strings/ms.json index c377e52af1..0c8363392b 100644 --- a/src/strings/ms.json +++ b/src/strings/ms.json @@ -102,5 +102,6 @@ "HeaderContinueWatching": "Terus Menonton", "Genres": "Genre-genre", "Collections": "Koleksi", - "Channels": "Saluran" + "Channels": "Saluran", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/strings/nb.json b/src/strings/nb.json index aed96da2c6..2e38dbd1ab 100644 --- a/src/strings/nb.json +++ b/src/strings/nb.json @@ -1552,5 +1552,6 @@ "HeaderDVR": "Opptak", "ApiKeysCaption": "Liste over aktive API-nøkler", "EnableDetailsBannerHelp": "Viser et bildebanner øverst på detaljsiden.", - "EnableDetailsBanner": "Detaljebanner" + "EnableDetailsBanner": "Detaljebanner", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/strings/nl.json b/src/strings/nl.json index 32c5d20b11..e24645a86e 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -1558,5 +1558,6 @@ "HeaderRemoteAccessSettings": "Externe toegang instellingen", "HeaderHttpsSettings": "HTTPS instellingen", "HeaderDVR": "DVR", - "ApiKeysCaption": "Lijst met de momenteel ingeschakelde API-sleutels" + "ApiKeysCaption": "Lijst met de momenteel ingeschakelde API-sleutels", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/strings/pl.json b/src/strings/pl.json index 3c470640e1..2eee48ee73 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -1479,5 +1479,6 @@ "DeinterlaceMethodHelp": "Wybierz metodę usuwania przeplotu używaną podczas transkodowania.", "ClientSettings": "Ustawienia klienta", "ButtonTogglePlaylist": "Playlista", - "ButtonToggleContextMenu": "Więcej" + "ButtonToggleContextMenu": "Więcej", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/strings/pr.json b/src/strings/pr.json index 20dc534f54..b58b0cd508 100644 --- a/src/strings/pr.json +++ b/src/strings/pr.json @@ -22,5 +22,6 @@ "HeaderCastCrew": "Mateys", "Add": "Upend", "Actor": "Privateer", - "AccessRestrictedTryAgainLater": "Ye arn't appearin' on the list o' the livin'!" + "AccessRestrictedTryAgainLater": "Ye arn't appearin' on the list o' the livin'!", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/strings/pt-br.json b/src/strings/pt-br.json index d043b19767..331ac989e6 100644 --- a/src/strings/pt-br.json +++ b/src/strings/pt-br.json @@ -1511,7 +1511,7 @@ "LabelNightly": "Nightly", "LabelStable": "Estável", "LabelChromecastVersion": "Versão do Chromecast", - "LabelEnableHttpsHelp": "Habilita que o servidor escute na porta HTTPS configurada. Um certificado válido também deve ser configurado para que isso entre em vigor.", + "LabelEnableHttpsHelp": "Permite que o servidor escute na porta HTTPS configurada. Um certificado válido também deve ser configurado para que isso entre em vigor.", "LabelEnableHttps": "Habilitar HTTPS", "HeaderServerAddressSettings": "Configurações da localização do servidor", "HeaderRemoteAccessSettings": "Configurações de acesso remoto", @@ -1567,5 +1567,7 @@ "LabelRepositoryUrlHelp": "A localização do manifesto do repositório que você deseja incluir.", "LabelRepositoryUrl": "URL do repositório", "HeaderNewRepository": "Novo repositório", - "MessageNoRepositories": "Não há repositórios." + "MessageNoRepositories": "Não há repositórios.", + "ButtonPlayer": "Reprodutor", + "Writers": "Escritores" } diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index 6f8e218a4c..abd2c08a94 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -1452,5 +1452,6 @@ "AllowFfmpegThrottlingHelp": "Suspende o processo de transcodificação assim que este avance o suficiente após o ponto de reprodução atual, para poupança de recursos. Esta funcionalidade é mais útil quando a reprodução é maioritariamente contínua, sem avançar ou recuar manualmente. Desative esta opção caso haja problemas de reprodução.", "AllowFfmpegThrottling": "Reduzir Taxa de Transcodificação", "PreferEmbeddedTitlesOverFileNamesHelp": "Determina o título a apresentar por defeito quando não é possível carregar metadados locais nem da Internet.", - "OptionSaveMetadataAsHiddenHelp": "Alterar esta definição apenas afetará metadados guardados futuramente. Ficheiros existentes serão atualizados assim que forem alterados pelo Servidor Jellyfin." + "OptionSaveMetadataAsHiddenHelp": "Alterar esta definição apenas afetará metadados guardados futuramente. Ficheiros existentes serão atualizados assim que forem alterados pelo Servidor Jellyfin.", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/strings/pt.json b/src/strings/pt.json index 60b2c1cd97..9d6f3faf37 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -1416,5 +1416,6 @@ "HeaderDVR": "DVR", "ApiKeysCaption": "Lista das chaves de API ativadas no momento", "ButtonTogglePlaylist": "Lista de leitura", - "ButtonToggleContextMenu": "Mais" + "ButtonToggleContextMenu": "Mais", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/strings/ro.json b/src/strings/ro.json index 8b560a341e..c1ef5caf1a 100644 --- a/src/strings/ro.json +++ b/src/strings/ro.json @@ -1558,5 +1558,15 @@ "EnableFasterAnimationsHelp": "Utilizați animații și tranziții mai rapide", "EnableFasterAnimations": "Animații mai rapide", "EnableDecodingColorDepth10Vp9": "Activați decodarea hardware pe 10 biți pentru VP9", - "EnableDecodingColorDepth10Hevc": "Activați decodarea hardware pe 10 biți pentru HEVC" + "EnableDecodingColorDepth10Hevc": "Activați decodarea hardware pe 10 biți pentru HEVC", + "LabelRepositoryName": "Nume Repertoriu", + "LabelRepositoryUrlHelp": "Locația manifestului repertoriului pe care doriți să o includeți.", + "LabelRepositoryUrl": "URL Repertoriu", + "HeaderNewRepository": "Repertoriu Nou", + "MessageNoRepositories": "Fără repertoriu.", + "ButtonPlayer": "Redare", + "Writers": "Scriitori", + "TabRepositories": "Repertorii", + "MessageAddRepository": "Dacă doriți să adăugați un repertoriu, faceți clic pe butonul de lângă antet și completați informațiile solicitate.", + "LabelRepositoryNameHelp": "Un nume personalizat pentru a distinge acest repertoriu de altele adăugate la serverul dvs." } diff --git a/src/strings/ru.json b/src/strings/ru.json index a26bed0956..6930855adc 100644 --- a/src/strings/ru.json +++ b/src/strings/ru.json @@ -919,7 +919,7 @@ "MessageNoAvailablePlugins": "Плагинов не имеется.", "MessageNoMovieSuggestionsAvailable": "В настоящее время предложений фильмов не имеются. Начните смотреть и оценивать свои фильмы, а затем вернитесь, чтобы просмотреть рекомендации.", "MessageNoPluginsInstalled": "Нет установленных плагинов.", - "MessageNoTrailersFound": "Трейлеры не найдены. Установите канал трейлеров, чтобы повысить своё впечатление от фильма путём добавления собрания интернет-трейлеров.", + "MessageNoTrailersFound": "Установите канал трейлеров, чтобы повысить своё впечатление от фильма путём добавления собрания интернет-трейлеров.", "MessageNothingHere": "Здесь ничего нет.", "MessagePasswordResetForUsers": "Следующие пользователи сбросили свои пароли. Теперь они могут войти с помощью PIN-кодов, которые использовались для сброса.", "MessagePlayAccessRestricted": "Воспроизведение данного содержания в настоящее время ограничено. За дополнительными сведениями обратитесь к администратору сервера.", @@ -1504,7 +1504,7 @@ "MessageUnauthorizedUser": "В настоящее время у вас нет доступа к серверу. Пожалуйста, свяжитесь с администратором сервера для получения дополнительной информации.", "HeaderFavoritePlaylists": "Избранные плей-листы", "LabelRequireHttpsHelp": "Если этот флажок установлен, сервер будет автоматически перенаправлять все запросы через HTTP на HTTPS. Это не имеет никакого эффекта, если сервер не слушает HTTPS.", - "LabelEnableHttpsHelp": "Позволяет серверу слушать сконфигурированный HTTPS-порт. Действительный сертификат также должен быть сконфигурирован для того, чтобы это вступило в силу.", + "LabelEnableHttpsHelp": "Позволяет серверу слушать HTTPS-порт. Для работы необходим действующий сертификат.", "ApiKeysCaption": "Список действующих текущих API-ключей", "TabDVR": "DVR", "SaveChanges": "Сохранить изменения", @@ -1545,12 +1545,27 @@ "LabelSyncPlayPlaybackDiff": "Разница времени воспроизведения:", "MillisecondsUnit": "мс", "LabelSyncPlayTimeOffset": "Сдвиг времени относительно сервера:", - "SyncPlayAccessHelp": "Выберите уровень доступа данного пользователя к функциональности SyncPlay. SyncPlay позволяет синхронизировать воспроизведение с другими устройствами.", + "SyncPlayAccessHelp": "Выберите уровень доступа данного пользователя к функции SyncPlay. SyncPlay позволяет синхронизировать воспроизведение с другими устройствами.", "MessageSyncPlayErrorMedia": "Не удалось включить SyncPlay! Ошибка медиаданных.", "MessageSyncPlayErrorMissingSession": "Не удалось включить SyncPlay! Отсутствует сеанс.", "MessageSyncPlayErrorNoActivePlayer": "Активный проигрыватель не найден. SyncPlay был отключен.", "ShowMore": "Показать больше", "ShowLess": "Показать меньше", "EnableBlurhashHelp": "Рисунки, которые всё ещё загружаются, будут отображаться с размытым заполнением", - "EnableBlurhash": "Включить размытые заполнители для изображений" + "EnableBlurhash": "Включить размытые заполнители для изображений", + "ButtonSyncPlay": "SyncPlay", + "ButtonCast": "В ролях", + "TabRepositories": "Репозитории", + "MessageNoGenresAvailable": "Разрешить поставщикам метаданных получать жанры из интернета.", + "MessageAddRepository": "Если вы хотите добавить репозиторий, нажмите кнопку рядом с заголовком и заполните необходимую информацию.", + "LabelRepositoryNameHelp": "Имя репозитория для показа на этом сервере.", + "LabelRepositoryName": "Название репозитория", + "LabelRepositoryUrlHelp": "Расположение манифеста добавляемого репозитория.", + "LabelRepositoryUrl": "URL репозитория", + "HeaderNewRepository": "Новый репозиторий", + "MessageNoRepositories": "Репозитории отсутствуют.", + "EnableFasterAnimationsHelp": "Использовать ускоренную анимацию и переходы", + "EnableFasterAnimations": "Ускоренная анимация", + "EnableDecodingColorDepth10Vp9": "Включить аппаратный декодер VP9 10-Bit", + "EnableDecodingColorDepth10Hevc": "Включить аппаратный декодер HEVC 10-Bit" } diff --git a/src/strings/sk.json b/src/strings/sk.json index fc45140d0c..f9ba8c9a95 100644 --- a/src/strings/sk.json +++ b/src/strings/sk.json @@ -1518,12 +1518,12 @@ "HeaderHttpsSettings": "Nastavenia HTTPS", "HeaderDVR": "DVR", "SaveChanges": "Uložiť zmeny", - "MessageSyncPlayErrorMedia": "Povolenie synchronizácie prehrávania zlyhalo! Chyba média.", - "MessageSyncPlayErrorMissingSession": "Zapnutie synchronizácie prehrávania zlyhalo! Aktívna relácia nebola nájdená.", - "MessageSyncPlayErrorNoActivePlayer": "Nebol nájdený žiadny aktívny prehrávač. Synchronizácia prehrávania bola vypnutá.", + "MessageSyncPlayErrorMedia": "Povolenie funkcie SyncPlay zlyhalo! Chyba média.", + "MessageSyncPlayErrorMissingSession": "Zapnutie funkcie SyncPlay zlyhalo! Aktívna relácia nebola nájdená.", + "MessageSyncPlayErrorNoActivePlayer": "Nebol nájdený žiadny aktívny prehrávač. Funkcia SyncPlay bola vypnutá.", "MessageSyncPlayErrorAccessingGroups": "Pri načítaní zoznamu skupín sa vyskytla chyba.", "MessageSyncPlayLibraryAccessDenied": "Prístup k tomuto obsahuje je obmedzený.", - "MessageSyncPlayJoinGroupDenied": "K použitiu synchronizácie prehrávania je vyžadované povolenie.", + "MessageSyncPlayJoinGroupDenied": "K použitiu funkcie SyncPlay je požadované povolenie.", "MessageSyncPlayCreateGroupDenied": "K vytvoreniu skupiny je požadované povolenie.", "MessageSyncPlayGroupDoesNotExist": "Pripojenie ku skupine zlyhalo, pretože skupina neexistuje.", "MessageSyncPlayPlaybackPermissionRequired": "K prehrávaniu je potrebné povolenie.", @@ -1531,13 +1531,13 @@ "MessageSyncPlayGroupWait": "Prehrávanie používateľa {0} sa načítava...", "MessageSyncPlayUserLeft": "Používateľ {0} opustil skupinu.", "MessageSyncPlayUserJoined": "Používateľ {0} sa pripojil k skupine.", - "MessageSyncPlayDisabled": "Synchronizácia prehrávania zakázana.", - "MessageSyncPlayEnabled": "Synchronizácia prehrávania povolená.", - "LabelSyncPlayAccess": "Prístup k synchronizácií prehrávania", + "MessageSyncPlayDisabled": "SyncPlay zakázaný.", + "MessageSyncPlayEnabled": "SyncPlay povolený.", + "LabelSyncPlayAccess": "Prístup k funkcií SyncPlay", "LabelSyncPlayAccessNone": "Zakázať pre tohoto používateľa", "LabelSyncPlayAccessJoinGroups": "Povoliť použivateľovi pripájať sa do skupín", "LabelSyncPlayAccessCreateAndJoinGroups": "Povoliť používateľovi vytvárať a pripájať sa do skupín", - "LabelSyncPlayLeaveGroupDescription": "Zakázať synchronizáciu prehrávania", + "LabelSyncPlayLeaveGroupDescription": "Zakázať SyncPlay", "LabelSyncPlayLeaveGroup": "Opustiť skupinu", "LabelSyncPlayNewGroupDescription": "Vytvoriť novú skupinu", "LabelSyncPlayNewGroup": "Nová skupina", @@ -1545,9 +1545,9 @@ "LabelSyncPlayPlaybackDiff": "Rozdiel v dobe prehrávania:", "MillisecondsUnit": "ms", "LabelSyncPlayTimeOffset": "Časový rozdiel so serverom:", - "HeaderSyncPlayEnabled": "Synchronizácia prehrávania je povolená", + "HeaderSyncPlayEnabled": "SyncPlay je povolené", "HeaderSyncPlaySelectGroup": "Pripojiť sa k skupine", - "SyncPlayAccessHelp": "Vyberte úroveň prístupu pre tohto používateľa k funkcií synchronizácie prehrávania. Synchronizácia prehrávania umožňuje zosynchronizovať prehrávanie s ostatnými zariadeniami.", + "SyncPlayAccessHelp": "Vyberte úroveň prístupu pre tohto používateľa k funkcií SyncPlay. SyncPlay umožňuje zosynchronizovať prehrávanie s ostatnými zariadeniami.", "EnableDetailsBannerHelp": "Zobrazí banner na vrchnej časti detailu položky.", "EnableDetailsBanner": "Detail banneru", "EnableBlurhashHelp": "Obrázky, ktoré sa stále načítavajú budú zobrazené ako dočasný obrázok s rozmazaným pozadím", @@ -1559,6 +1559,16 @@ "MessageNoGenresAvailable": "Povoliť vybraným metadáta poskytovateľom stiahnuť žánre z internetu.", "EnableFasterAnimationsHelp": "Použiť rýchlejšiu animáciu a prechody", "EnableFasterAnimations": "Rýchlejšia animácia", - "EnableDecodingColorDepth10Vp9": "Povoliť 10-Bitové hardvérové dekódovanie pre Vp9", - "EnableDecodingColorDepth10Hevc": "Povoliť 10-Bitové hardvérové dekódovanie pre HEVC" + "EnableDecodingColorDepth10Vp9": "Povoliť 10-Bitové hardvérové dekódovanie pre VP9", + "EnableDecodingColorDepth10Hevc": "Povoliť 10-Bitové hardvérové dekódovanie pre HEVC", + "LabelRepositoryUrl": "URL adresa repozitára", + "HeaderNewRepository": "Nový repozitár", + "MessageNoRepositories": "Neexistujú žiadne repozitáre.", + "TabRepositories": "Repozitáre", + "MessageAddRepository": "Pokiaľ chcete pridať repozitár, kliknite na tlačidlo vedľa hlavičky a vyplňte požadované informácie.", + "LabelRepositoryNameHelp": "Vlastné pomenovanie, ktoré slúži na odlíšenie tohto repozitára od ostatných repozitárov pridaných na vašom serveri.", + "LabelRepositoryName": "Názov repozitára", + "LabelRepositoryUrlHelp": "Umiestnenie manifestu repozitára, ktorý chcete zahrnúť.", + "ButtonPlayer": "Prehrávač", + "Writers": "Scenáristi" } diff --git a/src/strings/sl-si.json b/src/strings/sl-si.json index 66b21b8a19..14bf6aa598 100644 --- a/src/strings/sl-si.json +++ b/src/strings/sl-si.json @@ -77,7 +77,7 @@ "Alerts": "Alarmi", "All": "Vse", "AllChannels": "Vsi kanali", - "AllComplexFormats": "Vsi kompleksni formati (ASS, SSA, VOBSUB, PGS, SUB/IDX, itd.)", + "AllComplexFormats": "Vsi kompleksni formati (ASS, SSA, VOBSUB, PGS, SUB, IDX, itd.)", "AllEpisodes": "Vse epizode", "AllLanguages": "Vsi jeziki", "AllLibraries": "Vse knjižnice", @@ -1275,5 +1275,6 @@ "Episode": "Epizoda", "EnableDetailsBannerHelp": "Prikaži sliko pasice na vrhu strani podrobnosti.", "EnableDetailsBanner": "Pasica podrobnosti", - "DeinterlaceMethodHelp": "Izberite način razpletanja pri prekodiranju prepletenih vsebin." + "DeinterlaceMethodHelp": "Izberite način razpletanja pri prekodiranju prepletenih vsebin.", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/strings/sr.json b/src/strings/sr.json index dc329c1309..d1ed50e87b 100644 --- a/src/strings/sr.json +++ b/src/strings/sr.json @@ -194,5 +194,6 @@ "AlbumArtist": "Извођач албума", "Album": "Албум", "AirDate": "Премијера", - "AdditionalNotificationServices": "Прегледајте каталог додатака да бисте инсталирали сервисе за обавештења." + "AdditionalNotificationServices": "Прегледајте каталог додатака да бисте инсталирали сервисе за обавештења.", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/strings/sv.json b/src/strings/sv.json index 7cee76407e..a8115c42fb 100644 --- a/src/strings/sv.json +++ b/src/strings/sv.json @@ -1513,5 +1513,6 @@ "HeaderServerAddressSettings": "Serveradressinställningar", "HeaderRemoteAccessSettings": "Inställningar för fjärråtkomst", "HeaderHttpsSettings": "HTTPS-inställningar", - "HeaderDVR": "PVR" + "HeaderDVR": "PVR", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/strings/tr.json b/src/strings/tr.json index 7c5656dbda..3e3c94d742 100644 --- a/src/strings/tr.json +++ b/src/strings/tr.json @@ -768,5 +768,6 @@ "LabelSkipIfAudioTrackPresent": "Varsayılan ses izi indirme diliyle uyuşuyorsa atla", "LabelSize": "Boyut:", "LabelSimultaneousConnectionLimit": "Eşzamanlı yayın limiti:", - "LabelServerName": "Sunucu adı:" + "LabelServerName": "Sunucu adı:", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/strings/uk.json b/src/strings/uk.json index 5a859a4aee..0b93964474 100644 --- a/src/strings/uk.json +++ b/src/strings/uk.json @@ -159,5 +159,6 @@ "AllowOnTheFlySubtitleExtractionHelp": "Вбудовані субтитри можуть бути експортовані з відео і надіслані, по черзі, клієнтам у вигляді тексту. Це допоможе уникнути перекодування відео. На деяких системах, перекодування може зайняти тривалий час і зупинити відтворення відео, для того щоб забезпечити експортування. Вимкнення цієї функції дозволить вбудованим субтитрам бути інтегрованим у відео, під час перекодування, якщо вбудовані субтитри не підтримуються на стороні клієнта.", "AllowOnTheFlySubtitleExtraction": "Дозволити експортування субтитрів «на льоту»", "AllowHWTranscodingHelp": "Дозволити клієнту перекодування на «на льоту». Це дозволить відмикати перекодування, якщо вона вимагається сервером.", - "AllComplexFormats": "Усі складні формати (ASS, SSA, VOBSUB, PGS, SUB, IDX, …)" + "AllComplexFormats": "Усі складні формати (ASS, SSA, VOBSUB, PGS, SUB, IDX, …)", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/strings/ur_PK.json b/src/strings/ur_PK.json index 0967ef424b..2942bba2a6 100644 --- a/src/strings/ur_PK.json +++ b/src/strings/ur_PK.json @@ -1 +1,3 @@ -{} +{ + "ButtonSyncPlay": "SyncPlay" +} diff --git a/src/strings/vi.json b/src/strings/vi.json index 84aacf6280..a5b319a86f 100644 --- a/src/strings/vi.json +++ b/src/strings/vi.json @@ -825,5 +825,6 @@ "LabelMaxStreamingBitrateHelp": "Thiết lập bitrate tối đa khi truyền tải.", "LabelMaxStreamingBitrate": "Chất lượng phát tối đa:", "LabelMaxScreenshotsPerItem": "Số lượng ảnh chụp tối đa mỗi mục:", - "LabelMaxResumePercentageHelp": "Nội dung sẽ được cho là đã kết thúc nếu ngừng phát sau thời gian này." + "LabelMaxResumePercentageHelp": "Nội dung sẽ được cho là đã kết thúc nếu ngừng phát sau thời gian này.", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index 6b188783bd..d29d67fccd 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -1546,7 +1546,7 @@ "LabelSyncPlayLeaveGroupDescription": "关闭同步播放", "EnableDetailsBanner": "详细信息页面的横幅", "ButtonCast": "投射", - "ButtonSyncPlay": "同步播放", + "ButtonSyncPlay": "SyncPlay", "EnableBlurhashHelp": "仍在加载的图片将显示带有模糊的占位符", "EnableBlurhash": "为图片启用模糊的占位符", "SyncPlayAccessHelp": "为此用户选择对同步播放功能的访问级别。同步播放让你可以和其他设备同步播放进度。", diff --git a/src/strings/zh-hk.json b/src/strings/zh-hk.json index 97b2d2d1f7..74d25e6b08 100644 --- a/src/strings/zh-hk.json +++ b/src/strings/zh-hk.json @@ -1,7 +1,7 @@ { "Add": "添加", - "ButtonAdd": "新增", - "ButtonAddScheduledTaskTrigger": "新增觸發", + "ButtonAdd": "增加", + "ButtonAddScheduledTaskTrigger": "新增觸發點", "ButtonAddUser": "添加用戶", "ButtonCancel": "取消", "ButtonDelete": "删除", @@ -10,12 +10,12 @@ "ButtonFilter": "過濾", "ButtonHelp": "幫助", "ButtonManualLogin": "手動登入", - "ButtonNew": "最新", + "ButtonNew": "新增", "ButtonOk": "確定", "ButtonPlay": "播放", "ButtonQuickStartGuide": "快速入門指南", "ButtonRefresh": "重新整理", - "ButtonRefreshGuideData": "重新整理電視指南資料", + "ButtonRefreshGuideData": "重新整理指南資料", "ButtonRemove": "清除", "ButtonRename": "重新命名", "ButtonResetPassword": "重設密碼", @@ -378,17 +378,17 @@ "Ascending": "上升", "Artist": "藝人", "Art": "藝術", - "AroundTime": "大約{0}", + "AroundTime": "大約", "AlwaysPlaySubtitlesHelp": "無論語言是哪種音頻,都將加載與語言首選項匹配的字幕。", "AllowedRemoteAddressesHelp": "IP地址或IP /網絡掩碼條目的逗號分隔列表,用於允許遠程連接的網絡。 如果保留為空白,將允許所有遠程地址。", "AllowRemoteAccessHelp": "如果未選中,則將阻止所有遠程連接。", "AllowRemoteAccess": "允許與此Jellyfin服務器的遠程連接。", - "AllowFfmpegThrottlingHelp": "當轉碼或remux距離當前播放位置足夠遠時,請暫停該過程,以減少資源消耗。 在不經常觀看的情況下,此功能最為有用。 如果遇到播放問題,請關閉此功能。", + "AllowFfmpegThrottlingHelp": "當轉碼或無損複製進度遠超於當前播放位置,暫停進程可減少資源消耗。 在不經常觀看的情況下,此功能最為有用。 如果遇到播放問題,請關閉此功能。", "AllowOnTheFlySubtitleExtractionHelp": "可以從視頻中提取嵌入式字幕,然後以純文本格式將其交付給客戶端,以幫助防止視頻轉碼。 在某些系統上,這可能需要很長時間,並且會導致提取過程中視頻播放停止。 如果客戶端設備本身不支持嵌入的字幕,則可以禁用此選項以通過視頻轉碼刻錄字幕。", "AllowOnTheFlySubtitleExtraction": "允許即時提取字幕", "AllowMediaConversionHelp": "授予或拒絕訪問轉換媒體功能的權限。", "AllowMediaConversion": "允許媒體轉換", - "AllowHWTranscodingHelp": "允許調諧器即時轉碼流。 這可以幫助減少服務器所需的代碼轉換。", + "AllowHWTranscodingHelp": "允許調諧器即時轉碼。 這可減少使用伺服器轉碼。", "AllLibraries": "所有媒體庫", "AllEpisodes": "所有劇集", "AllComplexFormats": "所有格式(ASS,SSA,VOBSUB,PGS,SUB,IDX等)", @@ -399,8 +399,109 @@ "Aired": "已播出", "AirDate": "播出日期", "AdditionalNotificationServices": "瀏覽插件目錄以安裝其他通知服務。", - "AddToPlayQueue": "添加到播放列", + "AddToPlayQueue": "添加到播放隊列", "AddToCollection": "添加到收藏", - "AddItemToCollectionHelp": "通過搜索項目並使用右鍵單擊或點擊菜單將其添加到集合中,從而將它們添加到集合中。", - "AccessRestrictedTryAgainLater": "目前限制訪問。 請稍後再試。" + "AddItemToCollectionHelp": "搜尋物件並使用右鍵點擊或點擊菜單將他們添加到收藏中。", + "AccessRestrictedTryAgainLater": "目前存取受限。 請稍後再試。", + "AllowFfmpegThrottling": "轉碼調節器", + "Dislike": "不喜歡", + "Disconnect": "中斷連接", + "Disc": "片", + "Disabled": "已停用", + "Directors": "導演", + "Director": "導演", + "DirectStreaming": "直接直播", + "DirectPlaying": "直接播放", + "DetectingDevices": "偵測裝置中", + "Desktop": "桌面", + "Descending": "倒序", + "DeleteUserConfirmation": "你確定要刪除此用戶嗎?", + "DeleteUser": "刪除用戶", + "DeleteMedia": "刪除媒體", + "DeleteImageConfirmation": "你確定要刪除此圖片嗎?", + "DeleteImage": "刪除圖片", + "DefaultErrorMessage": "處理此請求時發生錯誤,請稍後再嘗試。", + "Default": "預設", + "DateAdded": "日期已新增", + "CopyStreamURLError": "複製URL時發生錯誤。", + "CopyStreamURLSuccess": "成功複製URL。", + "CopyStreamURL": "複製直播URL", + "ContinueWatching": "繼續觀看", + "Connect": "連接", + "ConfirmEndPlayerSession": "你要關閉 {0} 的Jellyfin嗎?", + "ConfirmDeleteImage": "刪除圖片?", + "CommunityRating": "社群分數", + "ClientSettings": "客戶端設定", + "ChannelNumber": "頻道號碼", + "ChannelNameOnly": "只有頻道 {0}", + "Categories": "分類", + "CancelSeries": "取消片集", + "CancelRecording": "取消錄影", + "ButtonWebsite": "網頁", + "ButtonViewWebsite": "瀏覽網頁", + "ButtonUninstall": "解除安裝", + "ButtonTrailer": "預告", + "ButtonTogglePlaylist": "播放清單", + "ButtonToggleContextMenu": "更多", + "ButtonSplit": "分開", + "ButtonStop": "停止", + "ButtonStart": "開始", + "ButtonShutdown": "關閉", + "ButtonSettings": "設定", + "ButtonSend": "傳送", + "ButtonSelectServer": "選擇伺服器", + "ButtonSearch": "搜尋", + "ButtonScanAllLibraries": "掃瞄所有媒體櫃", + "ButtonRevoke": "撤銷", + "ButtonResume": "恢復", + "ButtonResetEasyPassword": "重設PIN碼", + "ButtonRepeat": "重複", + "ButtonProfile": "檔案", + "ButtonPause": "暫停", + "ButtonParentalControl": "家長控制", + "ButtonOpen": "開啟", + "ButtonNetwork": "網絡", + "ButtonMore": "更多", + "ButtonLearnMore": "了解更多", + "ButtonInfo": "資訊", + "ButtonHome": "主頁", + "ButtonGuide": "教學", + "ButtonGotIt": "了解", + "ButtonFullscreen": "全螢幕", + "ButtonForgotPassword": "忘記密碼", + "ButtonEditOtherUserPreferences": "更改用戶個人檔案,圖片及個人偏好。", + "ButtonEditImages": "更改圖片", + "ButtonDownload": "下載", + "ButtonConnect": "連接", + "ButtonChangeServer": "更換伺服器", + "ButtonBack": "返回", + "ButtonAudioTracks": "音軌", + "ButtonArrowUp": "箭咀上", + "ButtonArrowRight": "箭咀右", + "ButtonArrowLeft": "箭咀左", + "ButtonArrowDown": "箭咀下", + "ButtonAddServer": "新增伺服器", + "ButtonAddMediaLibrary": "新增媒體櫃", + "ButtonAddImage": "新增圖片", + "Browse": "瀏覽", + "Blacklist": "黑名單", + "BirthPlaceValue": "出生地點", + "BirthDateValue": "出生日期", + "Banner": "橫幅", + "Backdrops": "背景", + "Backdrop": "背景", + "AlwaysPlaySubtitles": "經常播放", + "Display": "顯示", + "EnableBackdrops": "背景", + "EditImages": "更改圖片", + "DownloadsValue": "下載數目 {0}", + "Download": "下載", + "DisplayInMyMedia": "在主頁顯示", + "ButtonSyncPlay": "SyncPlay", + "ButtonDown": "向下", + "BurnSubtitlesHelp": "確定若服務器對視頻進行轉碼時是否嵌入字幕。 關閉這功能將使用更少時間。 選擇'自動'可嵌入基於圖像的格式字幕(VOBSUB,PGS,SUB,IDX等)和某些ASS或SSA字幕。", + "BrowsePluginCatalogMessage": "瀏覽我們的插件目錄以查看可用的插件。", + "BoxRear": "盒裝(背面)", + "BoxSet": "套裝", + "Box": "盒裝" } diff --git a/src/strings/zh-tw.json b/src/strings/zh-tw.json index a1e7337ce0..5fd153217f 100644 --- a/src/strings/zh-tw.json +++ b/src/strings/zh-tw.json @@ -1015,7 +1015,7 @@ "LabelEnableDlnaServerHelp": "允許網絡上的 UPnP 設備瀏覽和播放內容。", "LabelEnableHardwareDecodingFor": "為以下啟用硬體解碼:", "LabelEpisodeNumber": "集:", - "LabelBaseUrlHelp": "您可以在此處新增自訂路徑來進入伺服器。", + "LabelBaseUrlHelp": "您可以在此處自訂伺服器URL路徑的子目錄。", "LabelExtractChaptersDuringLibraryScan": "於媒體庫掃描時擷取章節圖片", "LabelHttpsPort": "本地 HTTPS 端口:", "LabelFailed": "失敗", @@ -1655,5 +1655,6 @@ "New": "新增", "ApiKeysCaption": "目前已啟用的API金鑰列表", "ButtonTogglePlaylist": "播放清單", - "ButtonToggleContextMenu": "更多" + "ButtonToggleContextMenu": "更多", + "ButtonSyncPlay": "SyncPlay" } diff --git a/src/themes/appletv/theme.css b/src/themes/appletv/theme.css index 579a0e1de5..b92a09d14b 100644 --- a/src/themes/appletv/theme.css +++ b/src/themes/appletv/theme.css @@ -227,7 +227,7 @@ html { color: #fff !important; } -.detailSticky { +.detailRibbon { background: #303030; background: -webkit-gradient(linear, left top, right top, from(#bcbcbc), color-stop(#a7b4b7), color-stop(#beb5a5), color-stop(#adbec2), to(#b9c7cb)); background: -webkit-linear-gradient(left, #bcbcbc, #a7b4b7, #beb5a5, #adbec2, #b9c7cb); @@ -257,11 +257,6 @@ html { background: #fff; } -.mediaInfoTimerIcon, -.starIcon { - color: #cb272a; -} - .emby-input, .emby-textarea { color: inherit; diff --git a/src/themes/blueradiance/theme.css b/src/themes/blueradiance/theme.css index a01a310c1d..6ab2e11ab8 100644 --- a/src/themes/blueradiance/theme.css +++ b/src/themes/blueradiance/theme.css @@ -223,7 +223,7 @@ html { color: #fff !important; } -.detailSticky { +.detailRibbon { background: #303030; background: -webkit-gradient(linear, left top, right top, from(#291a31), color-stop(#033664), color-stop(#011432), color-stop(#141a3a), to(#291a31)); background: -webkit-linear-gradient(left, #291a31, #033664, #011432, #141a3a, #291a31); @@ -261,11 +261,6 @@ html { background: rgba(170, 170, 190, 0.2); } -.mediaInfoTimerIcon, -.starIcon { - color: #cb272a; -} - .emby-input, .emby-textarea { color: inherit; diff --git a/src/themes/dark/theme.css b/src/themes/dark/theme.css index 9491b2cae9..cf35d0b696 100644 --- a/src/themes/dark/theme.css +++ b/src/themes/dark/theme.css @@ -203,11 +203,11 @@ html { background: rgba(30, 30, 30, 0.9); } -.detailSticky { +.detailRibbon { background: rgba(32, 32, 32, 0.8); } -.noBackdrop .detailSticky { +.noBackdrop .detailRibbon { background: #202020; } @@ -236,11 +236,6 @@ html { background: rgba(170, 170, 190, 0.2); } -.mediaInfoTimerIcon, -.starIcon { - color: #cb272a; -} - .emby-input, .emby-textarea { color: inherit; @@ -457,3 +452,8 @@ html { .metadataSidebarIcon { color: #00a4dc; } + +.emby-button.detailFloatingButton { + background-color: #00a4dc; + color: #fff; +} diff --git a/src/themes/light/theme.css b/src/themes/light/theme.css index 74d4c93af2..db273266e8 100644 --- a/src/themes/light/theme.css +++ b/src/themes/light/theme.css @@ -221,7 +221,7 @@ html { color: #fff !important; } -.detailSticky { +.detailRibbon { background-color: #303030; color: #ccc; color: rgba(255, 255, 255, 0.87); @@ -250,11 +250,6 @@ html { background: #fff; } -.mediaInfoTimerIcon, -.starIcon { - color: #cb272a; -} - .emby-input, .emby-textarea { color: inherit; diff --git a/src/themes/purplehaze/theme.css b/src/themes/purplehaze/theme.css index 9bc9f05f0f..bda397da6f 100644 --- a/src/themes/purplehaze/theme.css +++ b/src/themes/purplehaze/theme.css @@ -307,7 +307,7 @@ a[data-role=button] { color: #f8f8fe !important; } -.detailSticky { +.detailRibbon { background: #000420; background: -moz-linear-gradient(left, #000420 0%, #06256f 18%, #2b052b 38%, #2b052b 68%, #06256f 81%, #000420 100%); background: -webkit-linear-gradient(left, #000420 0%, #06256f 18%, #2b052b 38%, #2b052b 68%, #06256f 81%, #000420 100%); @@ -344,11 +344,6 @@ a[data-role=button] { background: rgba(170, 170, 190, 0.2); } -.mediaInfoTimerIcon, -.starIcon { - color: #f2b01e; -} - .emby-input, .emby-textarea { color: inherit; diff --git a/src/themes/wmc/theme.css b/src/themes/wmc/theme.css index 7725cb5b27..b66e7bd425 100644 --- a/src/themes/wmc/theme.css +++ b/src/themes/wmc/theme.css @@ -209,7 +209,7 @@ html { color: #fff !important; } -.detailSticky { +.detailRibbon { background-color: #081b3b; } @@ -243,11 +243,6 @@ html { background: rgba(170, 170, 190, 0.2); } -.mediaInfoTimerIcon, -.starIcon { - color: #cb272a; -} - .emby-input, .emby-textarea { color: inherit; diff --git a/yarn.lock b/yarn.lock index 3696566154..fab1967eff 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6273,10 +6273,10 @@ isurl@^1.0.0-alpha5: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" -jellyfin-apiclient@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/jellyfin-apiclient/-/jellyfin-apiclient-1.2.2.tgz#64f058320603df02d926f4c1b929b42c6acc4527" - integrity sha512-UwC56orm4darWlnNQJ1nbKo+W8ywlheJSJC6d9zm06CslYtOc/Dkv9kz2PadQEh+6EiBsB0hAZCc7FJ9ahOoGQ== +jellyfin-apiclient@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jellyfin-apiclient/-/jellyfin-apiclient-1.3.0.tgz#428ec998ef17a755a7c07f6284f6eb4a56a63242" + integrity sha512-jq+erwtg175Vg/VnxPdMIc+R2e0+t22T42tJiirMU84xBgk+h3maJar7Umr5NHyfkbt6J8d0TmR2O7nXwVpR+w== "jellyfin-noto@https://github.com/jellyfin/jellyfin-noto": version "1.0.3"