mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
Merge remote-tracking branch 'upstream/master' into translate-everything
This commit is contained in:
commit
5146cd8c39
9 changed files with 133 additions and 132 deletions
|
@ -1,18 +1,7 @@
|
|||
define(["dialogHelper", "loading", "connectionManager", "globalize", "actionsheet", "emby-input", "paper-icon-button-light", "emby-button", "listViewStyle", "material-icons", "formDialogStyle"], function (dialogHelper, loading, connectionManager, globalize, actionsheet) {
|
||||
define(["dom", "dialogHelper", "loading", "connectionManager", "globalize", "actionsheet", "emby-input", "paper-icon-button-light", "emby-button", "listViewStyle", "material-icons", "formDialogStyle"], function (dom, dialogHelper, loading, connectionManager, globalize, actionsheet) {
|
||||
"use strict";
|
||||
|
||||
return function (options) {
|
||||
function parentWithClass(elem, className) {
|
||||
while (!elem.classList || !elem.classList.contains(className)) {
|
||||
elem = elem.parentNode;
|
||||
if (!elem) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
return elem;
|
||||
}
|
||||
|
||||
function mapChannel(button, channelId, providerChannelId) {
|
||||
loading.show();
|
||||
var providerId = options.providerId;
|
||||
|
@ -26,7 +15,7 @@ define(["dialogHelper", "loading", "connectionManager", "globalize", "actionshee
|
|||
},
|
||||
dataType: "json"
|
||||
}).then(function (mapping) {
|
||||
var listItem = parentWithClass(button, "listItem");
|
||||
var listItem = dom.parentWithClass(button, "listItem");
|
||||
button.setAttribute("data-providerid", mapping.ProviderChannelId);
|
||||
listItem.querySelector(".secondary").innerHTML = getMappingSecondaryName(mapping, currentMappingOptions.ProviderName);
|
||||
loading.hide();
|
||||
|
@ -34,7 +23,7 @@ define(["dialogHelper", "loading", "connectionManager", "globalize", "actionshee
|
|||
}
|
||||
|
||||
function onChannelsElementClick(e) {
|
||||
var btnMap = parentWithClass(e.target, "btnMap");
|
||||
var btnMap = dom.parentWithClass(e.target, "btnMap");
|
||||
|
||||
if (btnMap) {
|
||||
var channelId = btnMap.getAttribute("data-id");
|
||||
|
|
|
@ -1,25 +1,12 @@
|
|||
define(['dialogHelper', 'loading', 'apphost', 'layoutManager', 'connectionManager', 'appRouter', 'globalize', 'emby-checkbox', 'emby-input', 'paper-icon-button-light', 'emby-select', 'material-icons', 'css!./../formdialog', 'emby-button', 'flexStyles'], function (dialogHelper, loading, appHost, layoutManager, connectionManager, appRouter, globalize) {
|
||||
define(['dom', 'dialogHelper', 'loading', 'apphost', 'layoutManager', 'connectionManager', 'appRouter', 'globalize', 'emby-checkbox', 'emby-input', 'paper-icon-button-light', 'emby-select', 'material-icons', 'css!./../formdialog', 'emby-button', 'flexStyles'], function (dom, dialogHelper, loading, appHost, layoutManager, connectionManager, appRouter, globalize) {
|
||||
'use strict';
|
||||
|
||||
var currentServerId;
|
||||
|
||||
function parentWithClass(elem, className) {
|
||||
|
||||
while (!elem.classList || !elem.classList.contains(className)) {
|
||||
elem = elem.parentNode;
|
||||
|
||||
if (!elem) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
return elem;
|
||||
}
|
||||
|
||||
function onSubmit(e) {
|
||||
loading.show();
|
||||
|
||||
var panel = parentWithClass(this, 'dialog');
|
||||
var panel = dom.parentWithClass(this, 'dialog');
|
||||
|
||||
var collectionId = panel.querySelector('#selectCollectionToAddTo').value;
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
define(["dialogHelper", "globalize", "connectionManager", "events", "browser", "require", "emby-checkbox", "emby-collapse", "css!./style"], function (dialogHelper, globalize, connectionManager, events, browser, require) {
|
||||
define(["dom", "dialogHelper", "globalize", "connectionManager", "events", "browser", "require", "emby-checkbox", "emby-collapse", "css!./style"], function (dom, dialogHelper, globalize, connectionManager, events, browser, require) {
|
||||
"use strict";
|
||||
|
||||
function renderOptions(context, selector, cssClass, items, isCheckedFn) {
|
||||
|
@ -106,16 +106,6 @@ define(["dialogHelper", "globalize", "connectionManager", "events", "browser", "
|
|||
events.trigger(instance, "filterchange");
|
||||
}
|
||||
|
||||
function parentWithClass(elem, className) {
|
||||
while (!elem.classList || !elem.classList.contains(className)) {
|
||||
elem = elem.parentNode;
|
||||
if (!elem) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return elem;
|
||||
}
|
||||
|
||||
function setVisibility(context, options) {
|
||||
if (options.mode == "livetvchannels" || options.mode == "albums" || options.mode == "artists" || options.mode == "albumartists" || options.mode == "songs") {
|
||||
hideByClass(context, "videoStandard");
|
||||
|
@ -320,7 +310,7 @@ define(["dialogHelper", "globalize", "connectionManager", "events", "browser", "
|
|||
triggerChange(self);
|
||||
});
|
||||
context.addEventListener("change", function (e) {
|
||||
var chkGenreFilter = parentWithClass(e.target, "chkGenreFilter");
|
||||
var chkGenreFilter = dom.parentWithClass(e.target, "chkGenreFilter");
|
||||
if (chkGenreFilter) {
|
||||
var filterName = chkGenreFilter.getAttribute("data-filter");
|
||||
var filters = query.Genres || "";
|
||||
|
@ -334,7 +324,7 @@ define(["dialogHelper", "globalize", "connectionManager", "events", "browser", "
|
|||
triggerChange(self);
|
||||
return;
|
||||
}
|
||||
var chkTagFilter = parentWithClass(e.target, "chkTagFilter");
|
||||
var chkTagFilter = dom.parentWithClass(e.target, "chkTagFilter");
|
||||
if (chkTagFilter) {
|
||||
var filterName = chkTagFilter.getAttribute("data-filter");
|
||||
var filters = query.Tags || "";
|
||||
|
@ -348,7 +338,7 @@ define(["dialogHelper", "globalize", "connectionManager", "events", "browser", "
|
|||
triggerChange(self);
|
||||
return;
|
||||
}
|
||||
var chkYearFilter = parentWithClass(e.target, "chkYearFilter");
|
||||
var chkYearFilter = dom.parentWithClass(e.target, "chkYearFilter");
|
||||
if (chkYearFilter) {
|
||||
var filterName = chkYearFilter.getAttribute("data-filter");
|
||||
var filters = query.Years || "";
|
||||
|
@ -362,7 +352,7 @@ define(["dialogHelper", "globalize", "connectionManager", "events", "browser", "
|
|||
triggerChange(self);
|
||||
return;
|
||||
}
|
||||
var chkOfficialRatingFilter = parentWithClass(e.target, "chkOfficialRatingFilter");
|
||||
var chkOfficialRatingFilter = dom.parentWithClass(e.target, "chkOfficialRatingFilter");
|
||||
if (chkOfficialRatingFilter) {
|
||||
var filterName = chkOfficialRatingFilter.getAttribute("data-filter");
|
||||
var filters = query.OfficialRatings || "";
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
define(['loading', 'apphost', 'dialogHelper', 'connectionManager', 'imageLoader', 'browser', 'layoutManager', 'scrollHelper', 'globalize', 'require', 'emby-checkbox', 'paper-icon-button-light', 'emby-button', 'formDialogStyle', 'cardStyle'], function (loading, appHost, dialogHelper, connectionManager, imageLoader, browser, layoutManager, scrollHelper, globalize, require) {
|
||||
define(['dom', 'loading', 'apphost', 'dialogHelper', 'connectionManager', 'imageLoader', 'browser', 'layoutManager', 'scrollHelper', 'globalize', 'require', 'emby-checkbox', 'paper-icon-button-light', 'emby-button', 'formDialogStyle', 'cardStyle'], function (dom, loading, appHost, dialogHelper, connectionManager, imageLoader, browser, layoutManager, scrollHelper, globalize, require) {
|
||||
'use strict';
|
||||
|
||||
var enableFocusTransform = !browser.slow && !browser.edge;
|
||||
|
@ -126,21 +126,7 @@ define(['loading', 'apphost', 'dialogHelper', 'connectionManager', 'imageLoader'
|
|||
return html;
|
||||
}
|
||||
|
||||
function parentWithClass(elem, className) {
|
||||
|
||||
while (!elem.classList || !elem.classList.contains(className)) {
|
||||
elem = elem.parentNode;
|
||||
|
||||
if (!elem) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
return elem;
|
||||
}
|
||||
|
||||
function downloadRemoteImage(page, apiClient, url, type, provider) {
|
||||
|
||||
var options = getBaseRemoteOptions();
|
||||
|
||||
options.Type = type;
|
||||
|
@ -152,7 +138,7 @@ define(['loading', 'apphost', 'dialogHelper', 'connectionManager', 'imageLoader'
|
|||
apiClient.downloadRemoteImage(options).then(function () {
|
||||
|
||||
hasChanges = true;
|
||||
var dlg = parentWithClass(page, 'dialog');
|
||||
var dlg = dom.parentWithClass(page, 'dialog');
|
||||
dialogHelper.close(dlg);
|
||||
});
|
||||
}
|
||||
|
@ -162,7 +148,6 @@ define(['loading', 'apphost', 'dialogHelper', 'connectionManager', 'imageLoader'
|
|||
}
|
||||
|
||||
function getRemoteImageHtml(image, imageType, apiClient) {
|
||||
|
||||
var tagName = layoutManager.tv ? 'button' : 'div';
|
||||
var enableFooterButtons = !layoutManager.tv;
|
||||
|
||||
|
@ -293,7 +278,6 @@ define(['loading', 'apphost', 'dialogHelper', 'connectionManager', 'imageLoader'
|
|||
}
|
||||
|
||||
function initEditor(page, apiClient) {
|
||||
|
||||
page.querySelector('#selectBrowsableImageType').addEventListener('change', function () {
|
||||
browsableImageType = this.value;
|
||||
browsableImageStartIndex = 0;
|
||||
|
@ -319,14 +303,14 @@ define(['loading', 'apphost', 'dialogHelper', 'connectionManager', 'imageLoader'
|
|||
|
||||
page.addEventListener('click', function (e) {
|
||||
|
||||
var btnDownloadRemoteImage = parentWithClass(e.target, 'btnDownloadRemoteImage');
|
||||
var btnDownloadRemoteImage = dom.parentWithClass(e.target, 'btnDownloadRemoteImage');
|
||||
if (btnDownloadRemoteImage) {
|
||||
var card = parentWithClass(btnDownloadRemoteImage, 'card');
|
||||
var card = dom.parentWithClass(btnDownloadRemoteImage, 'card');
|
||||
downloadRemoteImage(page, apiClient, card.getAttribute('data-imageurl'), card.getAttribute('data-imagetype'), card.getAttribute('data-imageprovider'));
|
||||
return;
|
||||
}
|
||||
|
||||
var btnImageCard = parentWithClass(e.target, 'btnImageCard');
|
||||
var btnImageCard = dom.parentWithClass(e.target, 'btnImageCard');
|
||||
if (btnImageCard) {
|
||||
downloadRemoteImage(page, apiClient, btnImageCard.getAttribute('data-imageurl'), btnImageCard.getAttribute('data-imagetype'), btnImageCard.getAttribute('data-imageprovider'));
|
||||
}
|
||||
|
@ -334,7 +318,6 @@ define(['loading', 'apphost', 'dialogHelper', 'connectionManager', 'imageLoader'
|
|||
}
|
||||
|
||||
function showEditor(itemId, serverId, itemType) {
|
||||
|
||||
loading.show();
|
||||
|
||||
require(['text!./imagedownloader.template.html'], function (template) {
|
||||
|
@ -380,7 +363,6 @@ define(['loading', 'apphost', 'dialogHelper', 'connectionManager', 'imageLoader'
|
|||
}
|
||||
|
||||
function onDialogClosed() {
|
||||
|
||||
var dlg = this;
|
||||
|
||||
if (layoutManager.tv) {
|
||||
|
@ -397,9 +379,7 @@ define(['loading', 'apphost', 'dialogHelper', 'connectionManager', 'imageLoader'
|
|||
|
||||
return {
|
||||
show: function (itemId, serverId, itemType, imageType) {
|
||||
|
||||
return new Promise(function (resolve, reject) {
|
||||
|
||||
currentResolve = resolve;
|
||||
currentReject = reject;
|
||||
hasChanges = false;
|
||||
|
|
|
@ -1,24 +1,10 @@
|
|||
define(['shell', 'dialogHelper', 'loading', 'layoutManager', 'playbackManager', 'connectionManager', 'userSettings', 'appRouter', 'globalize', 'emby-input', 'paper-icon-button-light', 'emby-select', 'material-icons', 'css!./../formdialog', 'emby-button'], function (shell, dialogHelper, loading, layoutManager, playbackManager, connectionManager, userSettings, appRouter, globalize) {
|
||||
define(['dom', 'shell', 'dialogHelper', 'loading', 'layoutManager', 'playbackManager', 'connectionManager', 'userSettings', 'appRouter', 'globalize', 'emby-input', 'paper-icon-button-light', 'emby-select', 'material-icons', 'css!./../formdialog', 'emby-button'], function (dom, shell, dialogHelper, loading, layoutManager, playbackManager, connectionManager, userSettings, appRouter, globalize) {
|
||||
'use strict';
|
||||
|
||||
var currentServerId;
|
||||
|
||||
function parentWithClass(elem, className) {
|
||||
|
||||
while (!elem.classList || !elem.classList.contains(className)) {
|
||||
elem = elem.parentNode;
|
||||
|
||||
if (!elem) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
return elem;
|
||||
}
|
||||
|
||||
function onSubmit(e) {
|
||||
|
||||
var panel = parentWithClass(this, 'dialog');
|
||||
var panel = dom.parentWithClass(this, 'dialog');
|
||||
|
||||
var playlistId = panel.querySelector('#selectPlaylistToAddTo').value;
|
||||
var apiClient = connectionManager.getApiClient(currentServerId);
|
||||
|
@ -35,11 +21,9 @@ define(['shell', 'dialogHelper', 'loading', 'layoutManager', 'playbackManager',
|
|||
}
|
||||
|
||||
function createPlaylist(apiClient, dlg) {
|
||||
|
||||
loading.show();
|
||||
|
||||
var url = apiClient.getUrl("Playlists", {
|
||||
|
||||
Name: dlg.querySelector('#txtNewPlaylistName').value,
|
||||
Ids: dlg.querySelector('.fldSelectedItemIds').value || '',
|
||||
userId: apiClient.getCurrentUserId()
|
||||
|
@ -50,9 +34,7 @@ define(['shell', 'dialogHelper', 'loading', 'layoutManager', 'playbackManager',
|
|||
type: "POST",
|
||||
url: url,
|
||||
dataType: "json"
|
||||
|
||||
}).then(function (result) {
|
||||
|
||||
loading.hide();
|
||||
|
||||
var id = result.Id;
|
||||
|
@ -63,16 +45,13 @@ define(['shell', 'dialogHelper', 'loading', 'layoutManager', 'playbackManager',
|
|||
}
|
||||
|
||||
function redirectToPlaylist(apiClient, id) {
|
||||
|
||||
appRouter.showItem(id, apiClient.serverId());
|
||||
}
|
||||
|
||||
function addToPlaylist(apiClient, dlg, id) {
|
||||
|
||||
var itemIds = dlg.querySelector('.fldSelectedItemIds').value || '';
|
||||
|
||||
if (id === 'queue') {
|
||||
|
||||
playbackManager.queue({
|
||||
serverId: apiClient.serverId(),
|
||||
ids: itemIds.split(',')
|
||||
|
@ -85,7 +64,6 @@ define(['shell', 'dialogHelper', 'loading', 'layoutManager', 'playbackManager',
|
|||
loading.show();
|
||||
|
||||
var url = apiClient.getUrl("Playlists/" + id + "/Items", {
|
||||
|
||||
Ids: itemIds,
|
||||
userId: apiClient.getCurrentUserId()
|
||||
});
|
||||
|
@ -95,7 +73,6 @@ define(['shell', 'dialogHelper', 'loading', 'layoutManager', 'playbackManager',
|
|||
url: url
|
||||
|
||||
}).then(function () {
|
||||
|
||||
loading.hide();
|
||||
|
||||
dlg.submitted = true;
|
||||
|
@ -108,7 +85,6 @@ define(['shell', 'dialogHelper', 'loading', 'layoutManager', 'playbackManager',
|
|||
}
|
||||
|
||||
function populatePlaylists(editorOptions, panel) {
|
||||
|
||||
var select = panel.querySelector('#selectPlaylistToAddTo');
|
||||
|
||||
loading.hide();
|
||||
|
@ -116,7 +92,6 @@ define(['shell', 'dialogHelper', 'loading', 'layoutManager', 'playbackManager',
|
|||
panel.querySelector('.newPlaylistInfo').classList.add('hide');
|
||||
|
||||
var options = {
|
||||
|
||||
Recursive: true,
|
||||
IncludeItemTypes: "Playlist",
|
||||
SortBy: 'SortName',
|
||||
|
@ -125,7 +100,6 @@ define(['shell', 'dialogHelper', 'loading', 'layoutManager', 'playbackManager',
|
|||
|
||||
var apiClient = connectionManager.getApiClient(currentServerId);
|
||||
apiClient.getItems(apiClient.getCurrentUserId(), options).then(function (result) {
|
||||
|
||||
var html = '';
|
||||
|
||||
if (editorOptions.enableAddToPlayQueue !== false && playbackManager.isPlaying()) {
|
||||
|
@ -135,7 +109,6 @@ define(['shell', 'dialogHelper', 'loading', 'layoutManager', 'playbackManager',
|
|||
html += '<option value="">' + globalize.translate('OptionNew') + '</option>';
|
||||
|
||||
html += result.Items.map(function (i) {
|
||||
|
||||
return '<option value="' + i.Id + '">' + i.Name + '</option>';
|
||||
});
|
||||
|
||||
|
@ -159,7 +132,6 @@ define(['shell', 'dialogHelper', 'loading', 'layoutManager', 'playbackManager',
|
|||
}
|
||||
|
||||
function getEditorHtml(items) {
|
||||
|
||||
var html = '';
|
||||
|
||||
html += '<div class="formDialogContent smoothScrollY" style="padding-top:2em;">';
|
||||
|
@ -195,7 +167,6 @@ define(['shell', 'dialogHelper', 'loading', 'layoutManager', 'playbackManager',
|
|||
}
|
||||
|
||||
function initEditor(content, options, items) {
|
||||
|
||||
content.querySelector('#selectPlaylistToAddTo').addEventListener('change', function () {
|
||||
if (this.value) {
|
||||
content.querySelector('.newPlaylistInfo').classList.add('hide');
|
||||
|
@ -235,7 +206,6 @@ define(['shell', 'dialogHelper', 'loading', 'layoutManager', 'playbackManager',
|
|||
}
|
||||
|
||||
PlaylistEditor.prototype.show = function (options) {
|
||||
|
||||
var items = options.items || {};
|
||||
currentServerId = options.serverId;
|
||||
|
||||
|
@ -272,7 +242,6 @@ define(['shell', 'dialogHelper', 'loading', 'layoutManager', 'playbackManager',
|
|||
initEditor(dlg, options, items);
|
||||
|
||||
dlg.querySelector('.btnCancel').addEventListener('click', function () {
|
||||
|
||||
dialogHelper.close(dlg);
|
||||
});
|
||||
|
||||
|
@ -281,7 +250,6 @@ define(['shell', 'dialogHelper', 'loading', 'layoutManager', 'playbackManager',
|
|||
}
|
||||
|
||||
return dialogHelper.open(dlg).then(function () {
|
||||
|
||||
if (layoutManager.tv) {
|
||||
centerFocus(dlg.querySelector('.formDialogContent'), false, false);
|
||||
}
|
||||
|
|
|
@ -1,19 +1,6 @@
|
|||
define(['shell', 'dialogHelper', 'loading', 'layoutManager', 'connectionManager', 'appRouter', 'globalize', 'emby-input', 'emby-checkbox', 'paper-icon-button-light', 'emby-select', 'material-icons', 'css!./../formdialog', 'emby-button'], function (shell, dialogHelper, loading, layoutManager, connectionManager, appRouter, globalize) {
|
||||
define(['dom', 'shell', 'dialogHelper', 'loading', 'layoutManager', 'connectionManager', 'appRouter', 'globalize', 'emby-input', 'emby-checkbox', 'paper-icon-button-light', 'emby-select', 'material-icons', 'css!./../formdialog', 'emby-button'], function (dom, shell, dialogHelper, loading, layoutManager, connectionManager, appRouter, globalize) {
|
||||
'use strict';
|
||||
|
||||
function parentWithClass(elem, className) {
|
||||
|
||||
while (!elem.classList || !elem.classList.contains(className)) {
|
||||
elem = elem.parentNode;
|
||||
|
||||
if (!elem) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
return elem;
|
||||
}
|
||||
|
||||
function getEditorHtml() {
|
||||
|
||||
var html = '';
|
||||
|
@ -65,7 +52,7 @@ define(['shell', 'dialogHelper', 'loading', 'layoutManager', 'connectionManager'
|
|||
loading.show();
|
||||
|
||||
var instance = this;
|
||||
var dlg = parentWithClass(e.target, 'dialog');
|
||||
var dlg = dom.parentWithClass(e.target, 'dialog');
|
||||
var options = instance.options;
|
||||
|
||||
var apiClient = connectionManager.getApiClient(options.serverId);
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
"HeaderFilters": "فیلتر ها",
|
||||
"HeaderImageOptions": "گزینه های تصویر",
|
||||
"HeaderInstantMix": "درهم کردن فوری",
|
||||
"HeaderKodiMetadataHelp": "برای فعال یا غیرفعال سازی متاداده های Nfo ، یک کتابخانه را در صفحه تنظیم کتابخانه Jellyfin ویرایش کرده و قسمت سرورهای متاداده را مسیردهی کنید.",
|
||||
"HeaderKodiMetadataHelp": "برای فعال یا غیرفعال سازی ابردادههای Nfo ، یک کتابخانه را در صفحه تنظیم کتابخانه Jellyfin ویرایش کرده و قسمت سرورهای ابرداده را مسیردهی کنید.",
|
||||
"HeaderLatestEpisodes": "آخرین قسمت ها",
|
||||
"HeaderNextUp": "قسمت بعدی",
|
||||
"HeaderPaths": "مسیرها",
|
||||
|
@ -315,5 +315,105 @@
|
|||
"ButtonSelectDirectory": "انتخاب مسیر",
|
||||
"ButtonEditOtherUserPreferences": "نمایه، تصویر و ترجیحات شخصی این کاربر را ویرایش کنید.",
|
||||
"BrowsePluginCatalogMessage": "برای مرور کردن افزونههای موجود، به فروشگاه افزونههای ما سر بزنید.",
|
||||
"AuthProviderHelp": "ارائه دهنده تأیید اعتبار را انتخاب کنید تا برای تأیید اعتبار گذرواژه این کاربر استفاده شود."
|
||||
"AuthProviderHelp": "ارائه دهنده تأیید اعتبار را انتخاب کنید تا برای تأیید اعتبار گذرواژه این کاربر استفاده شود.",
|
||||
"HeaderRecordingPostProcessing": "در حال ضبط پس پردازش",
|
||||
"HeaderRecordingOptions": "گزینههای ضبط",
|
||||
"HeaderRecentlyPlayed": "به تازگی پخش شده",
|
||||
"HeaderProfileInformation": "اطلاعات نمایه",
|
||||
"HeaderProfile": "نمایه",
|
||||
"HeaderPluginInstallation": "نصب افزونه",
|
||||
"HeaderPleaseSignIn": "لطفا وارد شوید",
|
||||
"HeaderPlaybackError": "خطای پخش",
|
||||
"HeaderPlayback": "پخش رسانه",
|
||||
"HeaderPlayOn": "پخش در",
|
||||
"HeaderPinCodeReset": "بازنشانی پین کد",
|
||||
"HeaderPhotoAlbums": "آلبومهای عکس",
|
||||
"HeaderPeople": "افراد",
|
||||
"HeaderPendingInvitations": "دعوتهای در انتظار",
|
||||
"HeaderPasswordReset": "بازنشانی گذرواژه",
|
||||
"HeaderPassword": "گذرواژه",
|
||||
"HeaderParentalRatings": "رتبه بندی والدین",
|
||||
"HeaderOtherItems": "آیتمهای دیگر",
|
||||
"HeaderOnNow": "هم اکنون",
|
||||
"HeaderNextVideoPlayingInValue": "پخش ویدیوی بعد در {0}",
|
||||
"HeaderNextEpisodePlayingInValue": "پخش قسمت بعدی در {0}",
|
||||
"HeaderNewDevices": "دستگاه جدید",
|
||||
"HeaderNewApiKey": "کلید API جدید",
|
||||
"HeaderMyMediaSmall": "رسانهی من (کوچک)",
|
||||
"HeaderMyMedia": "رسانهی من",
|
||||
"HeaderMyDevice": "دستگاههای من",
|
||||
"HeaderMusicVideos": "موزیک ویدیوها",
|
||||
"HeaderMusicQuality": "کیفیت آهنگ",
|
||||
"HeaderMovies": "فیلمها",
|
||||
"HeaderMoreLikeThis": "موارد مشابه با این",
|
||||
"HeaderMetadataSettings": "تنظیمات ابرداده",
|
||||
"HeaderMediaInfo": "اطلاعات رسانه",
|
||||
"HeaderMediaFolders": "پوشههای رسانه",
|
||||
"HeaderMedia": "رسانه",
|
||||
"HeaderLoginFailure": "ورود ناموفق",
|
||||
"HeaderLiveTvTunerSetup": "تنظیم تلویزیون زنده",
|
||||
"HeaderLiveTv": "تلویزیون زنده",
|
||||
"HeaderLibrarySettings": "تنظیمات کتابخانه",
|
||||
"HeaderLibraryOrder": "ترتیت کتابخانه",
|
||||
"HeaderLibraryFolders": "پوشههای کتابخانه",
|
||||
"HeaderLibraryAccess": "دسترسی به کتابخانه",
|
||||
"HeaderLibraries": "کتابخانهها",
|
||||
"HeaderLatestRecordings": "آخرین ضبطها",
|
||||
"HeaderLatestMusic": "آخرین آهنگها",
|
||||
"HeaderLatestMovies": "آخرین فیلمها",
|
||||
"HeaderLatestMedia": "آخرین رسانهها",
|
||||
"HeaderKeepSeries": "سریال ادامه دهید",
|
||||
"HeaderKeepRecording": "ضبط را ادامه دهید",
|
||||
"HeaderItems": "موارد",
|
||||
"HeaderInstall": "نصب",
|
||||
"HeaderImageSettings": "تنظیمات عکس",
|
||||
"HeaderIdentifyItemHelp": "یک یا بیشتر مورد برای جستجو وارد کنید. موارد را حذف کنید تا نتیجه جستجو را افزایش دهید.",
|
||||
"HeaderIdentificationHeader": "سرفصل تعیین هویت",
|
||||
"HeaderIdentificationCriteriaHelp": "حداقل یک مورد تعیین هویت وارد کنید.",
|
||||
"HeaderIdentification": "تعیین هویت",
|
||||
"HeaderHttpHeaders": "سرفصلهای HTTP",
|
||||
"HeaderHome": "خانه",
|
||||
"HeaderGuideProviders": "ارائه دهنده داده راهنمای تلویزیونی",
|
||||
"HeaderGenres": "ژانرها",
|
||||
"HeaderFrequentlyPlayed": "اغلب پخش شده",
|
||||
"HeaderForgotPassword": "فراموشی گذرواژه",
|
||||
"HeaderForKids": "برای کودکان",
|
||||
"HeaderFetchImages": "دریافت عکسها:",
|
||||
"HeaderFeatures": "برجستهها",
|
||||
"HeaderFeatureAccess": "دسترسیهای برجسته",
|
||||
"HeaderFavoriteVideos": "ویدیوهای مورد علاقه",
|
||||
"HeaderFavoritePeople": "افراد مورد علاقه",
|
||||
"HeaderFavoriteMovies": "فیلمهای مورد علاقه",
|
||||
"HeaderFavoriteBooks": "کتابهای مورد علاقه",
|
||||
"HeaderExternalIds": "ID های خارجی:",
|
||||
"HeaderError": "خطا",
|
||||
"HeaderEpisodes": "قسمتها",
|
||||
"HeaderEnabledFieldsHelp": "یک فیلد را برای جلوگیری از تغییر در دادهی آن علامت بزنید تا قفل بشود.",
|
||||
"HeaderEnabledFields": "فیلدهای فعال شده",
|
||||
"HeaderEditImages": "ویرایش عکسها",
|
||||
"HeaderDownloadSync": "بارگیری و همگامسازی",
|
||||
"HeaderDisplay": "نمایش",
|
||||
"HeaderDirectPlayProfileHelp": "نمایهی پخش مستقیم را اضافه کنید تا مشخص کنید با چه فرمی دستگاه میتواند محلی برخورد کند.",
|
||||
"HeaderDirectPlayProfile": "نمایهی پخش مستقیم",
|
||||
"HeaderDevices": "دستگاهها",
|
||||
"HeaderDeveloperInfo": "اطلاعات توسعه دهنده",
|
||||
"HeaderDetectMyDevices": "تشخیص دستگاههای من",
|
||||
"HeaderDeleteTaskTrigger": "حذف راه انداز وظیفه",
|
||||
"HeaderDeleteProvider": "حذف ارائهدهنده",
|
||||
"HeaderDeleteItems": "حذف آیتمها",
|
||||
"HeaderDeleteItem": "حذف آیتم",
|
||||
"HeaderDeleteDevice": "حذف دستگاه",
|
||||
"HeaderDefaultRecordingSettings": "تنظمیات پیشفرض ضبط",
|
||||
"HeaderDateIssued": "تاریخ صدور",
|
||||
"HeaderCodecProfileHelp": "نمایههای کدک محدودیتهای یک دستگاه را هنگام پخش کدکهای خاص نشان میدهد. اگر محدودیتی اعمال شود، رسانهها کد گذاری میشوند ، حتی اگر کدک برای پخش مستقیم پیکربندی شده باشد.",
|
||||
"HeaderCodecProfile": "نمایه کدک",
|
||||
"HeaderChapterImages": "عکسهای سکانس",
|
||||
"HeaderChannels": "کانالها",
|
||||
"HeaderChannelAccess": "دسترسی به کانال",
|
||||
"HeaderCastCrew": "بازیگران و کارکنان",
|
||||
"HeaderCastAndCrew": "بازیگران و کارکنان",
|
||||
"HeaderCancelSeries": "لغو سریال",
|
||||
"HeaderCancelRecording": "لغو ضبط",
|
||||
"HeaderBooks": "کتابها",
|
||||
"HeaderBlockItemsWithNoRating": "موارد مسدود شده با نقص یا عدم وجود اطلاعات امتیاز:"
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
"Alerts": "Alertes",
|
||||
"All": "Tout",
|
||||
"AllChannels": "Toutes les chaînes",
|
||||
"AllComplexFormats": "Tous les formats complexes (ASS, SSA, VOBSUB, PGS, SUB/IDX, etc…)",
|
||||
"AllComplexFormats": "Tous les formats complexes (ASS, SSA, VOBSUB, PGS, SUB, IDX, etc…)",
|
||||
"AllEpisodes": "Tous les épisodes",
|
||||
"AllLanguages": "Toutes les langues",
|
||||
"AllLibraries": "Toutes les médiathèques",
|
||||
|
@ -51,7 +51,7 @@
|
|||
"BoxRear": "Dos de boîtier",
|
||||
"Browse": "Parcourir",
|
||||
"BrowsePluginCatalogMessage": "Explorer notre catalogue des plugins pour voir les plugins disponibles.",
|
||||
"BurnSubtitlesHelp": "Détermine si le serveur doit incruster les sous-titres lors de la conversion vidéo en fonction du format des sous-titres. Éviter l'incrustation des sous-titres améliorera les performances du serveur. Sélectionnez Auto pour incruster les formats basés sur l'image (VOBSUB, PGS, SUB/IDX etc) et certains sous-titres ASS/SSA.",
|
||||
"BurnSubtitlesHelp": "Détermine si le serveur doit incruster les sous-titres lors du transcodage de la vidéo. Éviter cela améliorera nettement la performance. Sélectionnez Auto pour incruster les formats basés sur l'image (VOBSUB, PGS, SUB, IDX etc) et certains sous-titres ASS ou SSA.",
|
||||
"ButtonAdd": "Ajouter",
|
||||
"ButtonAddMediaLibrary": "Ajouter une médiathèque",
|
||||
"ButtonAddScheduledTaskTrigger": "Ajouter un déclencheur",
|
||||
|
@ -186,7 +186,7 @@
|
|||
"DisplayInOtherHomeScreenSections": "Afficher dans les sections de l’écran d’accueil comme Ajouts récents et Reprendre",
|
||||
"DisplayMissingEpisodesWithinSeasons": "Afficher les épisodes manquants dans les saisons",
|
||||
"DisplayMissingEpisodesWithinSeasonsHelp": "Cette option doit aussi être activée pour les médiathèques TV dans les paramètres du serveur.",
|
||||
"DisplayModeHelp": "Sélectionner le type d'écran sur lequel vous utilisez Jellyfin.",
|
||||
"DisplayModeHelp": "Sélectionner l'agencement que vous désirez pour l'interface.",
|
||||
"DoNotRecord": "Ne pas enregistrer",
|
||||
"Down": "Bas",
|
||||
"Download": "Téléchargement",
|
||||
|
@ -948,7 +948,7 @@
|
|||
"OneChannel": "Une chaîne",
|
||||
"OnlyForcedSubtitles": "Seulement les sous-titres forcés",
|
||||
"OnlyForcedSubtitlesHelp": "Seuls les sous-titres marqués comme forcés seront chargés.",
|
||||
"OnlyImageFormats": "Seulement les formats image (VOBSUB, PGS, SUB, etc)",
|
||||
"OnlyImageFormats": "Seulement les formats image (VOBSUB, PGS, SUB)",
|
||||
"OptionAdminUsers": "Administrateurs",
|
||||
"OptionAlbumArtist": "Artiste de l'album",
|
||||
"OptionAllUsers": "Tous les utilisateurs",
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
"Albums": "Album",
|
||||
"All": "Tutto",
|
||||
"AllChannels": "Tutti i canali",
|
||||
"AllComplexFormats": "Tutti i formati complessi (ASS, SSA, VOBSUB, PGS, SUB / IDX, ecc.)",
|
||||
"AllComplexFormats": "Tutti i formati complessi (ASS, SSA, VOBSUB, PGS, SUB, IDX)",
|
||||
"AllEpisodes": "Tutti gli episodi",
|
||||
"AllLanguages": "Tutte le lingue",
|
||||
"AllLibraries": "Tutte le librerie",
|
||||
|
@ -24,7 +24,7 @@
|
|||
"AllowRemoteAccess": "Abilita connessioni remote a questo Server Jellyfin.",
|
||||
"AllowRemoteAccessHelp": "Se deselezionato, tutte le connessioni remote saranno bloccate.",
|
||||
"AllowedRemoteAddressesHelp": "Elenco separato da virgola di indirizzi IP o voci IP / maschera di rete per reti che potranno connettersi da remoto. Se lasciato vuoto, saranno consentiti tutti gli indirizzi remoti.",
|
||||
"AlwaysPlaySubtitles": "Visualizza sempre i sottotitoli",
|
||||
"AlwaysPlaySubtitles": "Riproduci sempre",
|
||||
"AlwaysPlaySubtitlesHelp": "I sottotitoli corrispondenti alla lingua preferita saranno caricati a prescindere dalla lingua dell'audio.",
|
||||
"AnyLanguage": "Qualsiasi lingua",
|
||||
"Anytime": "In qualsiasi momento",
|
||||
|
@ -45,7 +45,7 @@
|
|||
"BoxRear": "Box (retro)",
|
||||
"Browse": "Esplora",
|
||||
"BrowsePluginCatalogMessage": "Sfoglia il catalogo dei Plugins.",
|
||||
"BurnSubtitlesHelp": "Determina se il server deve applicare i sottotitoli quando si convertono video in base al formato dei sottotitoli. Evitando di applicare i sottotitoli migliorerà le prestazioni del server. Selezionare Auto per applicare formati basati sull'immagine (VOBSUB, PGS, SUB / IDX, ecc.) e alcuni sottotitoli ASS / SSA.",
|
||||
"BurnSubtitlesHelp": "Determina se il server deve imprimere i sottotitoli quando i video vengono convertiti. Evitare ciò migliorerà di molto le prestazioni. Selezionare Auto per imprimere formati basati sull'immagine (VOBSUB, PGS, SUB, IDX) e alcuni sottotitoli ASS o SSA.",
|
||||
"ButtonAdd": "Aggiungi",
|
||||
"ButtonAddMediaLibrary": "Aggiungi raccolta multimediale",
|
||||
"ButtonAddScheduledTaskTrigger": "Aggiungi operazione",
|
||||
|
@ -175,7 +175,7 @@
|
|||
"DisplayInOtherHomeScreenSections": "Mostra le sezioni della schermata home come gli ultimi media e continua a guardare",
|
||||
"DisplayMissingEpisodesWithinSeasons": "Visualizza gli episodi mancanti nelle stagioni",
|
||||
"DisplayMissingEpisodesWithinSeasonsHelp": "Questo deve anche essere abilitato per le librerie TV nella configurazione del server.",
|
||||
"DisplayModeHelp": "Scegli il tipo di schermo su cui stai utilizzando Jellyfin.",
|
||||
"DisplayModeHelp": "Seleziona lo stile del layout che vuoi per l'interfaccia.",
|
||||
"DoNotRecord": "Non registrare",
|
||||
"Down": "Giù",
|
||||
"Download": "Scarica",
|
||||
|
@ -901,16 +901,16 @@
|
|||
"NoNextUpItemsMessage": "Trovato niente. Inizia a guardare i tuoi programmi!",
|
||||
"NoPluginConfigurationMessage": "Questo Plugin non ha impostazioni da configurare.",
|
||||
"NoSubtitleSearchResultsFound": "Nessun risultato.",
|
||||
"NoSubtitles": "Nessun Sottotitolo",
|
||||
"NoSubtitles": "Nessuno",
|
||||
"NoSubtitlesHelp": "I sottotitoli non verranno caricati per impostazione predefinita.Possono essere ancora caricati manualmente durante la riproduzione.",
|
||||
"None": "Nessuno",
|
||||
"Normal": "Normale",
|
||||
"NumLocationsValue": "{0} cartelle",
|
||||
"Off": "Spento",
|
||||
"OneChannel": "Un canale",
|
||||
"OnlyForcedSubtitles": "Solo i sottotitoli forzati",
|
||||
"OnlyForcedSubtitles": "Solo forzati",
|
||||
"OnlyForcedSubtitlesHelp": "Solo i sottotitoli contrassegnati come forzati saranno caricati.",
|
||||
"OnlyImageFormats": "Solo formati immagine (VOBSUB, PGS, SUB, ecc)",
|
||||
"OnlyImageFormats": "Solo formati immagine (VOBSUB, PGS, SUB)",
|
||||
"OptionAdminUsers": "Amministratori",
|
||||
"OptionAlbumArtist": "Artista Album",
|
||||
"OptionAllUsers": "Tutti gli utenti",
|
||||
|
@ -1013,7 +1013,7 @@
|
|||
"OptionReportByteRangeSeekingWhenTranscodingHelp": "Questo è necessario per alcuni dispositivi che non hanno l'avanzamento rapido che funziona bene.",
|
||||
"OptionRequirePerfectSubtitleMatch": "Scarica solo i sottotitoli che corrispondono perfettamente ai miei file video",
|
||||
"OptionRequirePerfectSubtitleMatchHelp": "La richiesta di una corrispondenza perfetta filtrerà i sottotitoli per includere solo quelli che sono stati testati e verificati con il file video esatto. Deselezionando questo aumenterà la probabilità che i sottotitoli vengono scaricati, ma aumenteranno le probabilità di testo sottotitolato impreciso o errato.",
|
||||
"OptionResElement": "elemento res",
|
||||
"OptionResElement": "res element",
|
||||
"OptionResumable": "Interrotto",
|
||||
"OptionRuntime": "Durata",
|
||||
"OptionSaturday": "Sabato",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue