diff --git a/dashboard-ui/bower_components/emby-webcomponents/.bower.json b/dashboard-ui/bower_components/emby-webcomponents/.bower.json index 575c9bf65c..cd37d7b8b4 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/.bower.json +++ b/dashboard-ui/bower_components/emby-webcomponents/.bower.json @@ -16,12 +16,12 @@ }, "devDependencies": {}, "ignore": [], - "version": "1.3.44", - "_release": "1.3.44", + "version": "1.3.45", + "_release": "1.3.45", "_resolution": { "type": "version", - "tag": "1.3.44", - "commit": "7634be33759be48574ff2531df4d111fa1177e54" + "tag": "1.3.45", + "commit": "dbaa46e3aa38a939b82f305c61e875e1a30da2fe" }, "_source": "https://github.com/MediaBrowser/emby-webcomponents.git", "_target": "^1.2.0", diff --git a/dashboard-ui/bower_components/emby-webcomponents/dialoghelper/dialoghelper.js b/dashboard-ui/bower_components/emby-webcomponents/dialoghelper/dialoghelper.js index af2802ae1e..3a3e8b638d 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/dialoghelper/dialoghelper.js +++ b/dashboard-ui/bower_components/emby-webcomponents/dialoghelper/dialoghelper.js @@ -217,7 +217,16 @@ var keyframes = [ { transform: 'scale(0)', offset: 0 }, - { transform: 'scale(1,1)', offset: 1 }]; + { transform: 'none', offset: 1 }]; + var timing = elem.animationConfig.entry.timing; + return elem.animate(keyframes, timing).onfinish = onFinish; + } + + function slideUp(elem, onFinish) { + + var keyframes = [ + { transform: 'translate3d(0,30%,0)', opacity: 0, offset: 0 }, + { transform: 'none', opacity: 1, offset: 1 }]; var timing = elem.animationConfig.entry.timing; return elem.animate(keyframes, timing).onfinish = onFinish; } @@ -240,6 +249,15 @@ return elem.animate(keyframes, timing); } + function slideDown(elem, onFinish) { + + var keyframes = [ + { transform: 'none', opacity: 1, offset: 0 }, + { transform: 'translate3d(0,30%,0)', opacity: 0, offset: 1 }]; + var timing = elem.animationConfig.entry.timing; + return elem.animate(keyframes, timing); + } + function closeDialog(dlg) { if (!dlg.classList.contains('hide')) { @@ -260,7 +278,18 @@ return; } - fadeOut(dlg).onfinish = onAnimationFinish; + var animation; + + if (dlg.animationConfig.exit.name == 'fadeout') { + animation = fadeOut(dlg); + } else if (dlg.animationConfig.exit.name == 'slidedown') { + animation = slideDown(dlg); + } else { + onAnimationFinish(); + return; + } + + animation.onfinish = onAnimationFinish; } } @@ -276,10 +305,12 @@ onAnimationFinish(); return; } - if (dlg.animationConfig.entry.name == 'fade-in-animation') { + if (dlg.animationConfig.entry.name == 'fadein') { fadeIn(dlg, onAnimationFinish); - } else if (dlg.animationConfig.entry.name == 'scale-up-animation') { + } else if (dlg.animationConfig.entry.name == 'scaleup') { scaleUp(dlg, onAnimationFinish); + } else if (dlg.animationConfig.entry.name == 'slideup') { + slideUp(dlg, onAnimationFinish); } } @@ -355,9 +386,9 @@ dlg.setAttribute('data-autofocus', 'true'); } - var defaultEntryAnimation = browser.animate ? 'scale-up-animation' : 'fade-in-animation'; + var defaultEntryAnimation = browser.animate ? 'scaleup' : 'fadein'; dlg.entryAnimation = options.entryAnimation || defaultEntryAnimation; - dlg.exitAnimation = 'fade-out-animation'; + dlg.exitAnimation = 'fadeout'; // If it's not fullscreen then lower the default animation speed to make it open really fast var entryAnimationDuration = options.entryAnimationDuration || (options.size ? 200 : 300); diff --git a/dashboard-ui/bower_components/emby-webcomponents/strings/es-MX.json b/dashboard-ui/bower_components/emby-webcomponents/strings/es-MX.json new file mode 100644 index 0000000000..07f43fff45 --- /dev/null +++ b/dashboard-ui/bower_components/emby-webcomponents/strings/es-MX.json @@ -0,0 +1,55 @@ +{ + "ValueSpecialEpisodeName": "Especial - {0}", + "Share": "Compartir", + "ServerUpdateNeeded": "Este Servidor Emby necesita ser actualizado. Para descargar la ultima versi\u00f3n, por favor visite {0}", + "LiveTvGuideRequiresUnlock": "La Guia de TV en Vivo actualmente esta limitada a {0} canales. De clic en el bot\u00f3n Desbloquear para saber como desbloquear la experiencia completa.", + "AttributeNew": "Nuevo", + "AttributePremiere": "Fecha de Estreno", + "AttributeLive": "En Vivo", + "TrackCount": "{0} Pistas", + "ItemCount": "{0} \u00edtems", + "ValueSeriesYearToPresent": "{0}-Presente", + "ReleaseYearValue": "A\u00f1o de estreno: {0}", + "OriginalAirDateValue": "Fecha de transmisi\u00f3n original: {0}", + "EndsAtValue": "Termina a las {0}", + "OptionSundayShort": "Dom", + "OptionMondayShort": "Lun", + "OptionTuesdayShort": "Mar", + "OptionWednesdayShort": "Mie", + "OptionThursdayShort": "Jue", + "OptionFridayShort": "Vie", + "OptionSaturdayShort": "Sab", + "HeaderSelectDate": "Seleccionar fecha", + "ButtonOk": "Ok", + "ButtonCancel": "Cancelar", + "ButtonGotIt": "Hecho", + "RecordingScheduled": "Grabaci\u00f3n programada.", + "HeaderNewRecording": "Nueva Grabaci\u00f3n", + "Sunday": "Domingo", + "Monday": "Lunes", + "Tuesday": "Martes", + "Wednesday": "Mi\u00e9rcoles", + "Thursday": "Jueves", + "Friday": "Viernes", + "Saturday": "S\u00e1bado", + "Days": "D\u00edas", + "RecordSeries": "Grabar Series", + "LabelPrePaddingMinutes": "Minutos de protecci\u00f3n previos:", + "LabelPostPaddingMinutes": "Minutos de protecci\u00f3n posterior:", + "RecordOnAllChannels": "Grabar en todos los canales", + "RecordAnytime": "Grabar en cualquier momento", + "RecordOnlyNewEpisodes": "Grabar s\u00f3lo nuevos episodios", + "HeaderBecomeProjectSupporter": "Obtener Emby Premiere", + "HeaderEnjoyDayTrial": "Disfrute de una Prueba Gratuita por 14 D\u00edas", + "MessageActiveSubscriptionRequiredSeriesRecordings": "Se requiere de una suscripci\u00f3n de Emby Premiere para crear grabaciones automatizadas de series.", + "OptionConvertRecordingsToStreamingFormat": "Convertir autom\u00e1ticamente las grabaciones a un formato amigable para transmisi\u00f3n", + "OptionConvertRecordingsToStreamingFormatHelp": "Las grabaciones ser\u00e1n convertidas en tiempo real a MP4 para una f\u00e1cil reproducci\u00f3n en sus dispositivos.", + "FeatureRequiresEmbyPremiere": "Esta caracter\u00edstica requiere de una suscripci\u00f3n activa de Emby Premiere.", + "Record": "Grabar", + "Save": "Guardar", + "Edit": "Editar", + "Download": "Descargar", + "Advanced": "Avanzado", + "Refresh": "Actualizar", + "RefreshQueued": "Actualizaci\u00f3n programada" +} \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-webcomponents/strings/nb.json b/dashboard-ui/bower_components/emby-webcomponents/strings/nb.json new file mode 100644 index 0000000000..d839d7c00b --- /dev/null +++ b/dashboard-ui/bower_components/emby-webcomponents/strings/nb.json @@ -0,0 +1,55 @@ +{ + "ValueSpecialEpisodeName": "Spesial - {0}", + "Share": "Del", + "ServerUpdateNeeded": "Denne Emby serveren trenger en oppdatering. For \u00e5 laste ned nyeste versjon, vennligst bes\u00f8k: {0}", + "LiveTvGuideRequiresUnlock": "Live TV Guide er p\u00e5 n\u00e5v\u00e6rende tidspunkter begrenset til {0} Kanaler. Trykk p\u00e5 l\u00e5s opp knappen for \u00e5 l\u00e6re hvordan f\u00e5 full opplevelse.", + "AttributeNew": "Ny", + "AttributePremiere": "Premiere", + "AttributeLive": "Direkte", + "TrackCount": "{0} spor", + "ItemCount": "{0} elementer", + "ValueSeriesYearToPresent": "{0}-N\u00e5v\u00e6rende", + "ReleaseYearValue": "Utgivelse \u00e5r: {0}", + "OriginalAirDateValue": "Original slippdato: {0}", + "EndsAtValue": "Ender p\u00e5 {0}", + "OptionSundayShort": "S\u00f8n", + "OptionMondayShort": "Man", + "OptionTuesdayShort": "Tir", + "OptionWednesdayShort": "Ons", + "OptionThursdayShort": "Tor", + "OptionFridayShort": "Fre", + "OptionSaturdayShort": "L\u00f8r", + "HeaderSelectDate": "Velg dato", + "ButtonOk": "Ok", + "ButtonCancel": "Avbryt", + "ButtonGotIt": "Skj\u00f8nner", + "RecordingScheduled": "Planlagte opptak.", + "HeaderNewRecording": "Tar opp n\u00e5", + "Sunday": "S\u00f8ndag", + "Monday": "Mandag", + "Tuesday": "Tirsdag", + "Wednesday": "Onsdag", + "Thursday": "Torsdag", + "Friday": "Fredag", + "Saturday": "L\u00f8rdag", + "Days": "Dager", + "RecordSeries": "Ta opp serien", + "LabelPrePaddingMinutes": "Pre-padding minutter:", + "LabelPostPaddingMinutes": "Post-padding minutter:", + "RecordOnAllChannels": "Ta opp fra alle kanaler", + "RecordAnytime": "Ta opp n\u00e5r som helst", + "RecordOnlyNewEpisodes": "Ta opp kun nye episoder", + "HeaderBecomeProjectSupporter": "Skaff Emby Premiere", + "HeaderEnjoyDayTrial": "Nyt en 14 dagers gratis pr\u00f8ve versjon", + "MessageActiveSubscriptionRequiredSeriesRecordings": "En aktiv Emby Premiere abonnement er n\u00f8dvendig for \u00e5 skape automatiserte serie innspillinger.", + "OptionConvertRecordingsToStreamingFormat": "Automatisk konvertere opptak til en str\u00f8mnings vennlig format", + "OptionConvertRecordingsToStreamingFormatHelp": "Innspillinger vil automatisk bli konvertert til MP4 for enkel avspilling p\u00e5 dine enheter.", + "FeatureRequiresEmbyPremiere": "Denne funksjonen krever et aktivt Emby Premiere abonnement.", + "Record": "Ta opp", + "Save": "Lagre", + "Edit": "Endre", + "Download": "Last ned", + "Advanced": "Avansert", + "Refresh": "Oppdater", + "RefreshQueued": "Oppdatering k\u00f8" +} \ No newline at end of file diff --git a/dashboard-ui/bower_components/polymer/.bower.json b/dashboard-ui/bower_components/polymer/.bower.json index 3e8a4009a3..bbad7fe7ba 100644 --- a/dashboard-ui/bower_components/polymer/.bower.json +++ b/dashboard-ui/bower_components/polymer/.bower.json @@ -34,6 +34,6 @@ "commit": "11c987b2eb3c73b388a79fc8aaea8ca01624f514" }, "_source": "git://github.com/Polymer/polymer.git", - "_target": "^1.0.0", + "_target": "^1.1.0", "_originalSource": "Polymer/polymer" } \ No newline at end of file diff --git a/dashboard-ui/components/collectioneditor/collectioneditor.js b/dashboard-ui/components/collectioneditor/collectioneditor.js index e8d1c1403d..d82b2d984e 100644 --- a/dashboard-ui/components/collectioneditor/collectioneditor.js +++ b/dashboard-ui/components/collectioneditor/collectioneditor.js @@ -123,7 +123,13 @@ html += '
'; + html += '
'; + html += Globalize.translate('CreateCollectionHelp'); + html += '
'; + html += '
'; + html += '
'; + html += '
'; html += ''; html += ''; html += '
'; @@ -206,6 +212,9 @@ html += '
'; html += title; html += '
'; + + html += '' + Globalize.translate('ButtonHelp') + ''; + html += ''; html += getEditorHtml(); diff --git a/dashboard-ui/dashboardhosting.html b/dashboard-ui/dashboardhosting.html index 8de4ad9d19..6e9af2f7b6 100644 --- a/dashboard-ui/dashboardhosting.html +++ b/dashboard-ui/dashboardhosting.html @@ -1,4 +1,4 @@ -
+
@@ -14,10 +14,6 @@
${LabelPublicHttpPortHelp}
-
  • - -
    ${LabelExternalDDNSHelp}
    -
  • ${LabelHttpsPortHelp}
    @@ -31,6 +27,10 @@
    ${LabelCustomCertificatePathHelp}
  • +
  • + +
    ${LabelExternalDDNSHelp}
    +
  • ${LabelEnableHttps}
    ${LabelEnableHttpsHelp}
    diff --git a/dashboard-ui/movies.html b/dashboard-ui/movies.html index 51fb488300..b69b344b31 100644 --- a/dashboard-ui/movies.html +++ b/dashboard-ui/movies.html @@ -61,13 +61,13 @@
     
    + +
  • - -
    diff --git a/dashboard-ui/scripts/dashboardhosting.js b/dashboard-ui/scripts/dashboardhosting.js index 0c444e2145..56e3fbe501 100644 --- a/dashboard-ui/scripts/dashboardhosting.js +++ b/dashboard-ui/scripts/dashboardhosting.js @@ -1,22 +1,5 @@ define(['jQuery'], function ($) { - function loadPage(page, config) { - - $('#txtPortNumber', page).val(config.HttpServerPortNumber); - $('#txtPublicPort', page).val(config.PublicPort); - $('#txtPublicHttpsPort', page).val(config.PublicHttpsPort); - - $('#chkEnableHttps', page).checked(config.EnableHttps); - $('#txtHttpsPort', page).val(config.HttpsPortNumber); - - $('#txtDdns', page).val(config.WanDdns || ''); - $('#txtCertificatePath', page).val(config.CertificatePath || ''); - - $('#chkEnableUpnp', page).checked(config.EnableUPnP); - - Dashboard.hideLoadingMsg(); - } - function onSubmit() { Dashboard.showLoadingMsg(); @@ -52,24 +35,43 @@ }]; } - $(document).on('pageshow', "#dashboardHostingPage", function () { + return function (view, params) { - LibraryMenu.setTabs('adminadvanced', 0, getTabs); - Dashboard.showLoadingMsg(); + var self = this; - var page = this; + function loadPage(page, config) { - ApiClient.getServerConfiguration().then(function (config) { + $('#txtPortNumber', page).val(config.HttpServerPortNumber); + $('#txtPublicPort', page).val(config.PublicPort); + $('#txtPublicHttpsPort', page).val(config.PublicHttpsPort); - loadPage(page, config); + var chkEnableHttps = page.querySelector('#chkEnableHttps'); + chkEnableHttps.checked = config.EnableHttps; - }); + $('#txtHttpsPort', page).val(config.HttpsPortNumber); - }).on('pageinit', "#dashboardHostingPage", function () { + $('#txtDdns', page).val(config.WanDdns || ''); - var page = this; + var txtCertificatePath = page.querySelector('#txtCertificatePath'); + txtCertificatePath.value = config.CertificatePath || ''; - $('#btnSelectCertPath', page).on("click.selectDirectory", function () { + $('#chkEnableUpnp', page).checked(config.EnableUPnP); + + onCertPathChange.call(txtCertificatePath); + + Dashboard.hideLoadingMsg(); + } + + function onCertPathChange() { + + if (this.value) { + view.querySelector('#txtDdns').setAttribute('required', 'required'); + } else { + view.querySelector('#txtDdns').removeAttribute('required'); + } + } + + $('#btnSelectCertPath', view).on("click.selectDirectory", function () { require(['directorybrowser'], function (directoryBrowser) { @@ -83,7 +85,7 @@ callback: function (path) { if (path) { - $('#txtCertificatePath', page).val(path); + $('#txtCertificatePath', view).val(path); } picker.close(); }, @@ -94,6 +96,18 @@ }); $('.dashboardHostingForm').off('submit', onSubmit).on('submit', onSubmit); - }); + view.querySelector('#txtCertificatePath').addEventListener('change', onCertPathChange); + + view.addEventListener('viewshow', function (e) { + LibraryMenu.setTabs('adminadvanced', 0, getTabs); + Dashboard.showLoadingMsg(); + + ApiClient.getServerConfiguration().then(function (config) { + + loadPage(view, config); + + }); + }); + }; }); diff --git a/dashboard-ui/scripts/itemdetailpage.js b/dashboard-ui/scripts/itemdetailpage.js index f7bdfeb3e1..88e201b3c7 100644 --- a/dashboard-ui/scripts/itemdetailpage.js +++ b/dashboard-ui/scripts/itemdetailpage.js @@ -1,4 +1,4 @@ -define(['layoutManager', 'datetime', 'jQuery', 'mediaInfo', 'scrollStyles'], function (layoutManager, datetime, $, mediaInfo) { +define(['layoutManager', 'datetime', 'jQuery', 'mediaInfo', 'backdrop', 'scrollStyles'], function (layoutManager, datetime, $, mediaInfo, backdrop) { var currentItem; @@ -75,14 +75,13 @@ // For these types, make the backdrop a little smaller so that the items are more quickly accessible if (item.Type == 'MusicArtist' || item.Type == "MusicAlbum" || item.Type == "Playlist" || item.Type == "BoxSet" || item.MediaType == "Audio" || !layoutManager.mobile) { $('#itemBackdrop', page).addClass('noBackdrop').css('background-image', 'none'); - require(['backdrop'], function (backdrop) { - backdrop.setBackdrops([item]); - }); + backdrop.setBackdrops([item]); } else { //$('#itemBackdrop', page).addClass('noBackdrop').css('background-image', 'none'); //Backdrops.setBackdrops(page, [item]); hasBackdrop = LibraryBrowser.renderDetailPageBackdrop(page, item); + backdrop.clear(); } var transparentHeader = hasBackdrop && page.classList.contains('noSecondaryNavPage'); @@ -475,7 +474,7 @@ }); }); - $('.itemGenres', page).each(function() { + $('.itemGenres', page).each(function () { LibraryBrowser.renderGenres(this, item, null, isStatic); }); LibraryBrowser.renderStudios($('.itemStudios', page), item, isStatic); @@ -1098,10 +1097,13 @@ html += '
    '; + html += '
    '; html += '

    '; html += '' + type.name + ''; html += '

    '; + html += ''; + html += '
    '; html += '
    '; @@ -1131,6 +1133,15 @@ removeFromCollection(page, parentItem, [itemId], user, context); }); + + collectionItems.querySelector('.btnAddToCollection').addEventListener('click', function () { + require(['alert'], function (alert) { + alert({ + text: Globalize.translate('AddItemToCollectionHelp'), + html: Globalize.translate('AddItemToCollectionHelp') + '

    ' + Globalize.translate('ButtonLearnMore') + '' + }); + }); + }); } function removeFromCollection(page, parentItem, itemIds, user, context) { diff --git a/dashboard-ui/scripts/librarybrowser.js b/dashboard-ui/scripts/librarybrowser.js index fda7cccc90..2a5616e31a 100644 --- a/dashboard-ui/scripts/librarybrowser.js +++ b/dashboard-ui/scripts/librarybrowser.js @@ -1066,7 +1066,8 @@ } if (item.CollectionType == 'games') { - return 'gamesrecommended.html?topParentId=' + item.Id; + return id ? "itemlist.html?parentId=" + id : "#"; + //return 'gamesrecommended.html?topParentId=' + item.Id; } if (item.CollectionType == 'playlists') { return 'playlists.html?topParentId=' + item.Id; diff --git a/dashboard-ui/scripts/librarymenu.js b/dashboard-ui/scripts/librarymenu.js index bb83f29223..3fb2ff4bc6 100644 --- a/dashboard-ui/scripts/librarymenu.js +++ b/dashboard-ui/scripts/librarymenu.js @@ -743,7 +743,7 @@ var helpUrl = page.getAttribute('data-helpurl'); if (helpUrl) { - html += 'Help'; + html += '' + Globalize.translate('ButtonHelp') + ''; } } } diff --git a/dashboard-ui/scripts/livetvsuggested.js b/dashboard-ui/scripts/livetvsuggested.js index d0722c1390..ed952e3ba2 100644 --- a/dashboard-ui/scripts/livetvsuggested.js +++ b/dashboard-ui/scripts/livetvsuggested.js @@ -8,14 +8,6 @@ return enableScrollX() ? 'overflowPortrait' : 'portrait'; } - function getThumbShape() { - return enableScrollX() ? 'overflowBackdrop' : 'backdrop'; - } - - function getSquareShape() { - return enableScrollX() ? 'overflowSquare' : 'square'; - } - function getLimit() { return enableScrollX() ? 12 : 8; @@ -109,7 +101,7 @@ var html = libraryBrowser.getPosterViewHtml({ items: items, - shape: shape || (enableScrollX() ? getSquareShape() : 'auto'), + shape: shape || (enableScrollX() ? 'autooverflow' : 'auto'), showTitle: true, centerText: true, coverImage: true, diff --git a/dashboard-ui/scripts/moviesrecommended.js b/dashboard-ui/scripts/moviesrecommended.js index 2a9a40af5f..6d1ccab082 100644 --- a/dashboard-ui/scripts/moviesrecommended.js +++ b/dashboard-ui/scripts/moviesrecommended.js @@ -301,7 +301,7 @@ baseUrl += '?topParentId=' + topParentId; } - libraryBrowser.configurePaperLibraryTabs(view, mdlTabs, view.querySelectorAll('.pageTabContent'), [0, 4, 5]); + libraryBrowser.configurePaperLibraryTabs(view, mdlTabs, view.querySelectorAll('.pageTabContent'), [0, 3, 4, 5]); var tabControllers = []; var renderedTabs = []; diff --git a/dashboard-ui/scripts/site.js b/dashboard-ui/scripts/site.js index a674d3dc0d..f3e80e6418 100644 --- a/dashboard-ui/scripts/site.js +++ b/dashboard-ui/scripts/site.js @@ -2243,7 +2243,7 @@ var AppInfo = {}; var baseUrl = 'bower_components/emby-webcomponents/strings/'; - var languages = ['da', 'en-US', 'kk', 'nl', 'ru']; + var languages = ['da', 'en-US', 'es-MX', 'kk', 'nb', 'nl', 'ru']; var translations = languages.map(function (i) { return { @@ -2404,9 +2404,10 @@ var AppInfo = {}; defineRoute({ path: '/dashboardhosting.html', - dependencies: [], + dependencies: ['paper-checkbox', 'paper-input', 'paper-button'], autoFocus: false, - roles: 'admin' + roles: 'admin', + controller: 'scripts/dashboardhosting' }); defineRoute({ @@ -2698,7 +2699,7 @@ var AppInfo = {}; defineRoute({ path: '/movies.html', - dependencies: ['paper-checkbox', 'paper-fab', 'scripts/alphapicker', 'paper-button'], + dependencies: ['paper-checkbox', 'scripts/alphapicker', 'paper-button'], autoFocus: false, controller: 'scripts/moviesrecommended', transition: 'fade' diff --git a/dashboard-ui/strings/en-US.json b/dashboard-ui/strings/en-US.json index 4d08016d0f..308f7dbd00 100644 --- a/dashboard-ui/strings/en-US.json +++ b/dashboard-ui/strings/en-US.json @@ -561,8 +561,8 @@ "LabelWebSocketPortNumber": "Web socket port number:", "LabelEnableAutomaticPortMap": "Enable automatic port mapping", "LabelEnableAutomaticPortMapHelp": "Attempt to automatically map the public port to the local port via UPnP. This may not work with some router models.", - "LabelExternalDDNS": "External WAN Address:", - "LabelExternalDDNSHelp": "If you have a dynamic DNS enter it here. Emby apps will use it when connecting remotely. Leave empty for automatic detection.", + "LabelExternalDDNS": "External domain:", + "LabelExternalDDNSHelp": "If you have a dynamic DNS enter it here. Emby apps will use it when connecting remotely. This field is required when used with a custom https certificate.", "TabResume": "Resume", "TabWeather": "Weather", "TitleAppSettings": "App Settings", @@ -2351,5 +2351,7 @@ "LabelOriginalTitle": "Original title:", "LabelSortTitle": "Sort title:", "OptionConvertRecordingPreserveAudio": "Preserve original audio when converting recordings", - "OptionConvertRecordingPreserveAudioHelp": "This will provide better audio but may require transcoding during playback on some devices." + "OptionConvertRecordingPreserveAudioHelp": "This will provide better audio but may require transcoding during playback on some devices.", + "CreateCollectionHelp": "Collections allow you to create personalized groupings of movies and other library content.", + "AddItemToCollectionHelp": "Add items to collections by searching for them and using their right-click or tap menus to add them to a collection." }