mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
Merge branch 'master' into patch-2
This commit is contained in:
commit
84d14c31aa
17 changed files with 614 additions and 369 deletions
|
@ -66,6 +66,7 @@
|
|||
- [Fishbigger](https://github.com/fishbigger)
|
||||
- [sleepycatcoding](https://github.com/sleepycatcoding)
|
||||
- [TheMelmacian](https://github.com/TheMelmacian)
|
||||
- [v0idMrK](https://github.com/v0idMrK)
|
||||
- [tehciolo](https://github.com/tehciolo)
|
||||
- [scampower3](https://github.com/scampower3)
|
||||
|
||||
|
|
|
@ -102,7 +102,15 @@ function onInputCommand(e) {
|
|||
break;
|
||||
}
|
||||
}
|
||||
function saveValues(context, settings, settingsKey, setfilters) {
|
||||
function saveValues(context, settings, settingsKey) {
|
||||
context.querySelectorAll('.simpleFilter').forEach(elem => {
|
||||
if (elem.tagName === 'INPUT') {
|
||||
setBasicFilter(context, settingsKey + '-filter-' + elem.getAttribute('data-settingname'), elem);
|
||||
} else {
|
||||
setBasicFilter(context, settingsKey + '-filter-' + elem.getAttribute('data-settingname'), elem.querySelector('input'));
|
||||
}
|
||||
});
|
||||
|
||||
// Video type
|
||||
const videoTypes = [];
|
||||
context.querySelectorAll('.chkVideoTypeFilter').forEach(elem => {
|
||||
|
@ -111,6 +119,8 @@ function saveValues(context, settings, settingsKey, setfilters) {
|
|||
}
|
||||
});
|
||||
|
||||
userSettings.setFilter(settingsKey + '-filter-VideoTypes', videoTypes.join(','));
|
||||
|
||||
// Series status
|
||||
const seriesStatuses = [];
|
||||
context.querySelectorAll('.chkSeriesStatus').forEach(elem => {
|
||||
|
@ -119,6 +129,8 @@ function saveValues(context, settings, settingsKey, setfilters) {
|
|||
}
|
||||
});
|
||||
|
||||
userSettings.setFilter(`${settingsKey}-filter-SeriesStatus`, seriesStatuses.join(','));
|
||||
|
||||
// Genres
|
||||
const genres = [];
|
||||
context.querySelectorAll('.chkGenreFilter').forEach(elem => {
|
||||
|
@ -127,38 +139,7 @@ function saveValues(context, settings, settingsKey, setfilters) {
|
|||
}
|
||||
});
|
||||
|
||||
if (setfilters) {
|
||||
setfilters((prevState) => ({
|
||||
...prevState,
|
||||
StartIndex: 0,
|
||||
IsPlayed: context.querySelector('.chkPlayed').checked,
|
||||
IsUnplayed: context.querySelector('.chkUnplayed').checked,
|
||||
IsFavorite: context.querySelector('.chkFavorite').checked,
|
||||
IsResumable: context.querySelector('.chkResumable').checked,
|
||||
Is4K: context.querySelector('.chk4KFilter').checked,
|
||||
IsHD: context.querySelector('.chkHDFilter').checked,
|
||||
IsSD: context.querySelector('.chkSDFilter').checked,
|
||||
Is3D: context.querySelector('.chk3DFilter').checked,
|
||||
VideoTypes: videoTypes.join(','),
|
||||
SeriesStatus: seriesStatuses.join(','),
|
||||
HasSubtitles: context.querySelector('.chkSubtitle').checked,
|
||||
HasTrailer: context.querySelector('.chkTrailer').checked,
|
||||
HasSpecialFeature: context.querySelector('.chkSpecialFeature').checked,
|
||||
HasThemeSong: context.querySelector('.chkThemeSong').checked,
|
||||
HasThemeVideo: context.querySelector('.chkThemeVideo').checked,
|
||||
GenreIds: genres.join(',')
|
||||
}));
|
||||
} else {
|
||||
context.querySelectorAll('.simpleFilter').forEach(elem => {
|
||||
if (elem.tagName === 'INPUT') {
|
||||
setBasicFilter(context, settingsKey + '-filter-' + elem.getAttribute('data-settingname'), elem);
|
||||
} else {
|
||||
setBasicFilter(context, settingsKey + '-filter-' + elem.getAttribute('data-settingname'), elem.querySelector('input'));
|
||||
}
|
||||
});
|
||||
|
||||
userSettings.setFilter(settingsKey + '-filter-GenreIds', genres.join(','));
|
||||
}
|
||||
userSettings.setFilter(settingsKey + '-filter-GenreIds', genres.join(','));
|
||||
}
|
||||
function bindCheckboxInput(context, on) {
|
||||
const elems = context.querySelectorAll('.checkboxList-verticalwrap');
|
||||
|
@ -289,7 +270,7 @@ class FilterMenu {
|
|||
}
|
||||
|
||||
if (submitted) {
|
||||
saveValues(dlg, options.settings, options.settingsKey, options.setfilters);
|
||||
saveValues(dlg, options.settings, options.settingsKey);
|
||||
return resolve();
|
||||
}
|
||||
return resolve();
|
||||
|
|
|
@ -9,6 +9,7 @@ import itemHelper from './itemHelper';
|
|||
import { playbackManager } from './playback/playbackmanager';
|
||||
import ServerConnections from './ServerConnections';
|
||||
import toast from './toast/toast';
|
||||
import * as userSettings from '../scripts/settings/userSettings';
|
||||
|
||||
export function getCommands(options) {
|
||||
const item = options.item;
|
||||
|
@ -589,9 +590,16 @@ function play(item, resume, queue, queueNext) {
|
|||
serverId: item.ServerId
|
||||
});
|
||||
} else {
|
||||
const sortParentId = 'items-' + (item.IsFolder ? item.Id : item.ParentId) + '-Folder';
|
||||
const sortValues = userSettings.getSortValuesLegacy(sortParentId);
|
||||
|
||||
playbackManager[method]({
|
||||
items: [item],
|
||||
startPositionTicks: startPosition
|
||||
startPositionTicks: startPosition,
|
||||
queryOptions: {
|
||||
SortBy: sortValues.sortBy,
|
||||
SortOrder: sortValues.sortOrder
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -183,9 +183,9 @@ export function getMediaInfoHtml(item, options = {}) {
|
|||
if (item.EndDate) {
|
||||
try {
|
||||
const endYear = datetime.toLocaleString(datetime.parseISO8601Date(item.EndDate).getFullYear(), { useGrouping: false });
|
||||
|
||||
if (endYear !== item.ProductionYear) {
|
||||
text += `-${endYear}`;
|
||||
/* At this point, text will contain only the start year */
|
||||
if (endYear !== text) {
|
||||
text += ` - ${endYear}`;
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('error parsing date:', item.EndDate);
|
||||
|
|
|
@ -15,6 +15,7 @@ import { PluginType } from '../../types/plugin.ts';
|
|||
import { includesAny } from '../../utils/container.ts';
|
||||
import { getItems } from '../../utils/jellyfin-apiclient/getItems.ts';
|
||||
import { getItemBackdropImageUrl } from '../../utils/jellyfin-apiclient/backdropImage';
|
||||
import merge from 'lodash-es/merge';
|
||||
|
||||
const UNLIMITED_ITEMS = -1;
|
||||
|
||||
|
@ -145,7 +146,7 @@ function createStreamInfoFromUrlItem(item) {
|
|||
}
|
||||
|
||||
function mergePlaybackQueries(obj1, obj2) {
|
||||
const query = Object.assign(obj1, obj2);
|
||||
const query = merge({}, obj1, obj2);
|
||||
|
||||
const filters = query.Filters ? query.Filters.split(',') : [];
|
||||
if (filters.indexOf('IsNotFolder') === -1) {
|
||||
|
@ -1798,15 +1799,15 @@ class PlaybackManager {
|
|||
SortBy: options.shuffle ? 'Random' : null
|
||||
});
|
||||
} else if (firstItem.Type === 'MusicArtist') {
|
||||
promise = getItemsForPlayback(serverId, {
|
||||
promise = getItemsForPlayback(serverId, mergePlaybackQueries({
|
||||
ArtistIds: firstItem.Id,
|
||||
Filters: 'IsNotFolder',
|
||||
Recursive: true,
|
||||
SortBy: options.shuffle ? 'Random' : 'SortName',
|
||||
MediaTypes: 'Audio'
|
||||
});
|
||||
}, queryOptions));
|
||||
} else if (firstItem.MediaType === 'Photo') {
|
||||
promise = getItemsForPlayback(serverId, {
|
||||
promise = getItemsForPlayback(serverId, mergePlaybackQueries({
|
||||
ParentId: firstItem.ParentId,
|
||||
Filters: 'IsNotFolder',
|
||||
// Setting this to true may cause some incorrect sorting
|
||||
|
@ -1814,7 +1815,7 @@ class PlaybackManager {
|
|||
SortBy: options.shuffle ? 'Random' : 'SortName',
|
||||
MediaTypes: 'Photo,Video',
|
||||
Limit: UNLIMITED_ITEMS
|
||||
}).then(function (result) {
|
||||
}, queryOptions)).then(function (result) {
|
||||
const playbackItems = result.Items;
|
||||
|
||||
let index = playbackItems.map(function (i) {
|
||||
|
@ -1830,7 +1831,7 @@ class PlaybackManager {
|
|||
return Promise.resolve(result);
|
||||
});
|
||||
} else if (firstItem.Type === 'PhotoAlbum') {
|
||||
promise = getItemsForPlayback(serverId, {
|
||||
promise = getItemsForPlayback(serverId, mergePlaybackQueries({
|
||||
ParentId: firstItem.Id,
|
||||
Filters: 'IsNotFolder',
|
||||
// Setting this to true may cause some incorrect sorting
|
||||
|
@ -1839,15 +1840,15 @@ class PlaybackManager {
|
|||
// Only include Photos because we do not handle mixed queues currently
|
||||
MediaTypes: 'Photo',
|
||||
Limit: UNLIMITED_ITEMS
|
||||
});
|
||||
}, queryOptions));
|
||||
} else if (firstItem.Type === 'MusicGenre') {
|
||||
promise = getItemsForPlayback(serverId, {
|
||||
promise = getItemsForPlayback(serverId, mergePlaybackQueries({
|
||||
GenreIds: firstItem.Id,
|
||||
Filters: 'IsNotFolder',
|
||||
Recursive: true,
|
||||
SortBy: options.shuffle ? 'Random' : 'SortName',
|
||||
MediaTypes: 'Audio'
|
||||
});
|
||||
}, queryOptions));
|
||||
} else if (firstItem.Type === 'Series' || firstItem.Type === 'Season') {
|
||||
const apiClient = ServerConnections.getApiClient(firstItem.ServerId);
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@ import dom from '../scripts/dom';
|
|||
import recordingHelper from './recordingcreator/recordinghelper';
|
||||
import ServerConnections from './ServerConnections';
|
||||
import toast from './toast/toast';
|
||||
import * as userSettings from '../scripts/settings/userSettings';
|
||||
|
||||
function playAllFromHere(card, serverId, queue) {
|
||||
const parent = card.parentNode;
|
||||
|
@ -177,6 +178,10 @@ function executeAction(card, target, action) {
|
|||
|
||||
const item = getItemInfoFromCard(card);
|
||||
|
||||
const itemsContainer = dom.parentWithClass(card, 'itemsContainer');
|
||||
|
||||
const sortParentId = 'items-' + (item.IsFolder ? item.Id : itemsContainer?.getAttribute('data-parentid')) + '-Folder';
|
||||
|
||||
const serverId = item.ServerId;
|
||||
const type = item.Type;
|
||||
|
||||
|
@ -200,12 +205,17 @@ function executeAction(card, target, action) {
|
|||
});
|
||||
} else if (action === 'play' || action === 'resume') {
|
||||
const startPositionTicks = parseInt(card.getAttribute('data-positionticks') || '0', 10);
|
||||
const sortValues = userSettings.getSortValuesLegacy(sortParentId, 'SortName');
|
||||
|
||||
if (playbackManager.canPlay(item)) {
|
||||
playbackManager.play({
|
||||
ids: [playableItemId],
|
||||
startPositionTicks: startPositionTicks,
|
||||
serverId: serverId
|
||||
serverId: serverId,
|
||||
queryOptions: {
|
||||
SortBy: sortValues.sortBy,
|
||||
SortOrder: sortValues.sortOrder
|
||||
}
|
||||
});
|
||||
} else {
|
||||
console.warn('Unable to play item', item);
|
||||
|
|
|
@ -18,8 +18,8 @@ function onSubmit(e) {
|
|||
function initEditor(context, settings) {
|
||||
context.querySelector('form').addEventListener('submit', onSubmit);
|
||||
|
||||
context.querySelector('.selectSortOrder').value = settings.SortOrder;
|
||||
context.querySelector('.selectSortBy').value = settings.SortBy;
|
||||
context.querySelector('.selectSortOrder').value = settings.sortOrder;
|
||||
context.querySelector('.selectSortBy').value = settings.sortBy;
|
||||
}
|
||||
|
||||
function centerFocus(elem, horiz, on) {
|
||||
|
@ -37,18 +37,9 @@ function fillSortBy(context, options) {
|
|||
}).join('');
|
||||
}
|
||||
|
||||
function saveValues(context, settingsKey, setSortValues) {
|
||||
if (setSortValues) {
|
||||
setSortValues((prevState) => ({
|
||||
...prevState,
|
||||
StartIndex: 0,
|
||||
SortBy: context.querySelector('.selectSortBy').value,
|
||||
SortOrder: context.querySelector('.selectSortOrder').value
|
||||
}));
|
||||
} else {
|
||||
userSettings.setFilter(settingsKey + '-sortorder', context.querySelector('.selectSortOrder').value);
|
||||
userSettings.setFilter(settingsKey + '-sortby', context.querySelector('.selectSortBy').value);
|
||||
}
|
||||
function saveValues(context, settingsKey) {
|
||||
userSettings.setFilter(settingsKey + '-sortorder', context.querySelector('.selectSortOrder').value);
|
||||
userSettings.setFilter(settingsKey + '-sortby', context.querySelector('.selectSortBy').value);
|
||||
}
|
||||
|
||||
class SortMenu {
|
||||
|
@ -104,7 +95,7 @@ class SortMenu {
|
|||
}
|
||||
|
||||
if (submitted) {
|
||||
saveValues(dlg, options.settingsKey, options.setSortValues);
|
||||
saveValues(dlg, options.settingsKey);
|
||||
resolve();
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -29,24 +29,13 @@ function initEditor(context, settings) {
|
|||
context.querySelector('.selectImageType').value = settings.imageType || 'primary';
|
||||
}
|
||||
|
||||
function saveValues(context, settings, settingsKey, setviewsettings) {
|
||||
if (setviewsettings) {
|
||||
setviewsettings((prevState) => ({
|
||||
...prevState,
|
||||
StartIndex: 0,
|
||||
imageType: context.querySelector('.selectImageType').value,
|
||||
showTitle: context.querySelector('.chkShowTitle').checked || false,
|
||||
showYear: context.querySelector('.chkShowYear').checked || false,
|
||||
cardLayout: context.querySelector('.chkEnableCardLayout').checked || false
|
||||
}));
|
||||
} else {
|
||||
const elems = context.querySelectorAll('.viewSetting-checkboxContainer');
|
||||
for (const elem of elems) {
|
||||
userSettings.set(settingsKey + '-' + elem.getAttribute('data-settingname'), elem.querySelector('input').checked);
|
||||
}
|
||||
|
||||
userSettings.set(settingsKey + '-imageType', context.querySelector('.selectImageType').value);
|
||||
function saveValues(context, settings, settingsKey) {
|
||||
const elems = context.querySelectorAll('.viewSetting-checkboxContainer');
|
||||
for (const elem of elems) {
|
||||
userSettings.set(settingsKey + '-' + elem.getAttribute('data-settingname'), elem.querySelector('input').checked);
|
||||
}
|
||||
|
||||
userSettings.set(settingsKey + '-imageType', context.querySelector('.selectImageType').value);
|
||||
}
|
||||
|
||||
function centerFocus(elem, horiz, on) {
|
||||
|
@ -112,7 +101,6 @@ class ViewSettings {
|
|||
dlg.querySelector('.selectImageType').addEventListener('change', function () {
|
||||
showIfAllowed(dlg, '.chkTitleContainer', this.value !== 'list' && this.value !== 'banner');
|
||||
showIfAllowed(dlg, '.chkYearContainer', this.value !== 'list' && this.value !== 'banner');
|
||||
showIfAllowed(dlg, '.chkCardLayoutContainer', this.value !== 'list' && this.value !== 'banner');
|
||||
});
|
||||
|
||||
dlg.querySelector('.btnCancel').addEventListener('click', function () {
|
||||
|
@ -137,7 +125,7 @@ class ViewSettings {
|
|||
}
|
||||
|
||||
if (submitted) {
|
||||
saveValues(dlg, options.settings, options.settingsKey, options.setviewsettings);
|
||||
saveValues(dlg, options.settings, options.settingsKey);
|
||||
return resolve();
|
||||
}
|
||||
|
||||
|
|
|
@ -35,13 +35,6 @@
|
|||
<span>${GroupBySeries}</span>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="checkboxContainer viewSetting viewSetting-checkboxContainer hide chkCardLayoutContainer" data-settingname="cardLayout">
|
||||
<label>
|
||||
<input is="emby-checkbox" type="checkbox" class="chkEnableCardLayout" />
|
||||
<span>${EnableCardLayout}</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
|
|
@ -724,8 +724,13 @@ class ItemsView {
|
|||
const currentItem = self.currentItem;
|
||||
|
||||
if (currentItem && !self.hasFilters) {
|
||||
const values = self.getSortValues();
|
||||
playbackManager.play({
|
||||
items: [currentItem],
|
||||
queryOptions: {
|
||||
SortBy: values.sortBy,
|
||||
SortOrder: values.sortOrder
|
||||
},
|
||||
autoplay: true
|
||||
});
|
||||
} else {
|
||||
|
@ -960,10 +965,7 @@ class ItemsView {
|
|||
|
||||
getSortValues() {
|
||||
const basekey = this.getSettingsKey();
|
||||
return {
|
||||
sortBy: userSettings.getFilter(basekey + '-sortby') || this.getDefaultSortBy(),
|
||||
sortOrder: userSettings.getFilter(basekey + '-sortorder') === 'Descending' ? 'Descending' : 'Ascending'
|
||||
};
|
||||
return userSettings.getSortValuesLegacy(basekey, this.getDefaultSortBy());
|
||||
}
|
||||
|
||||
getDefaultSortBy() {
|
||||
|
|
|
@ -1,19 +1,48 @@
|
|||
import RemoteControl from '../../../components/remotecontrol/remotecontrol';
|
||||
import { playbackManager } from '../../../components/playback/playbackmanager';
|
||||
import libraryMenu from '../../../scripts/libraryMenu';
|
||||
import '../../../elements/emby-button/emby-button';
|
||||
|
||||
export default function (view) {
|
||||
const remoteControl = new RemoteControl();
|
||||
remoteControl.init(view, view.querySelector('.remoteControlContent'));
|
||||
|
||||
let currentPlayer;
|
||||
|
||||
function onKeyDown(e) {
|
||||
if (e.keyCode === 32 && e.target.tagName !== 'BUTTON') {
|
||||
playbackManager.playPause(currentPlayer);
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
}
|
||||
}
|
||||
|
||||
function releaseCurrentPlayer() {
|
||||
const player = currentPlayer;
|
||||
if (player) currentPlayer = null;
|
||||
}
|
||||
|
||||
function bindToPlayer(player) {
|
||||
if (player !== currentPlayer) {
|
||||
releaseCurrentPlayer();
|
||||
currentPlayer = player;
|
||||
}
|
||||
}
|
||||
|
||||
view.addEventListener('viewshow', function () {
|
||||
libraryMenu.setTransparentMenu(true);
|
||||
bindToPlayer(playbackManager.getCurrentPlayer());
|
||||
document.addEventListener('keydown', onKeyDown);
|
||||
|
||||
if (remoteControl) {
|
||||
remoteControl.onShow();
|
||||
}
|
||||
});
|
||||
|
||||
view.addEventListener('viewbeforehide', function () {
|
||||
libraryMenu.setTransparentMenu(false);
|
||||
document.removeEventListener('keydown', onKeyDown);
|
||||
releaseCurrentPlayer();
|
||||
|
||||
if (remoteControl) {
|
||||
remoteControl.destroy();
|
||||
|
|
|
@ -125,7 +125,8 @@ function renderSection(item, element, type) {
|
|||
ArtistIds: '',
|
||||
AlbumArtistIds: '',
|
||||
Limit: 10,
|
||||
SortBy: 'SortName'
|
||||
SortOrder: 'Descending,Desending,Ascending',
|
||||
SortBy: 'PremiereDate,ProductionYear,SortName'
|
||||
}, {
|
||||
shape: 'overflowPortrait',
|
||||
showTitle: true,
|
||||
|
@ -194,7 +195,7 @@ function renderSection(item, element, type) {
|
|||
PersonTypes: '',
|
||||
ArtistIds: '',
|
||||
AlbumArtistIds: '',
|
||||
SortOrder: 'Descending',
|
||||
SortOrder: 'Descending,Desending,Ascending',
|
||||
SortBy: 'PremiereDate,ProductionYear,Sortname'
|
||||
}, {
|
||||
shape: 'overflowSquare',
|
||||
|
|
|
@ -622,6 +622,21 @@ export class UserSettings {
|
|||
getFilter(key) {
|
||||
return this.get(key, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the current sort values (Legacy - Non-JSON)
|
||||
* (old views such as list.js [Photos] will
|
||||
* use this one)
|
||||
* @param {string} key - Filter key.
|
||||
* @param {string} defaultSortBy - Default SortBy value.
|
||||
* @return {Object} sortOptions object
|
||||
*/
|
||||
getSortValuesLegacy(key, defaultSortBy) {
|
||||
return {
|
||||
sortBy: this.getFilter(key + '-sortby') || defaultSortBy,
|
||||
sortOrder: this.getFilter(key + '-sortorder') === 'Descending' ? 'Descending' : 'Ascending'
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
export const currentSettings = new UserSettings;
|
||||
|
@ -672,3 +687,4 @@ export const customCss = currentSettings.customCss.bind(currentSettings);
|
|||
export const disableCustomCss = currentSettings.disableCustomCss.bind(currentSettings);
|
||||
export const getSavedView = currentSettings.getSavedView.bind(currentSettings);
|
||||
export const saveViewSetting = currentSettings.saveViewSetting.bind(currentSettings);
|
||||
export const getSortValuesLegacy = currentSettings.getSortValuesLegacy.bind(currentSettings);
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
"AllowedRemoteAddressesHelp": "Liste séparée par des virgules des adresses IP autorisées à se connecter à distance. Une liste laissée vide signifie que toutes les adresses sont autorisées.",
|
||||
"AlwaysPlaySubtitles": "Toujours afficher",
|
||||
"AlwaysPlaySubtitlesHelp": "Les sous-titres correspondant à la langue préférée seront chargés indépendamment de la langue de l'audio.",
|
||||
"AnyLanguage": "N'importe quel langage",
|
||||
"AnyLanguage": "N'importe quelle langue",
|
||||
"Anytime": "N'importe quand",
|
||||
"AroundTime": "Aux environs de {0}",
|
||||
"Artists": "Artistes",
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -23,11 +23,11 @@
|
|||
"AddToFavorites": "Додади во омилени",
|
||||
"All": "Сите",
|
||||
"Add": "Додади",
|
||||
"Actor": "Актер",
|
||||
"Absolute": "Абсолутно",
|
||||
"Actor": "Глумец",
|
||||
"Absolute": "Апсолутно",
|
||||
"ButtonSubmit": "Испрати",
|
||||
"ButtonStop": "Стопирај",
|
||||
"ButtonStart": "Почеток",
|
||||
"ButtonStart": "Почни",
|
||||
"ButtonSplit": "Раздели",
|
||||
"ButtonExitApp": "Излези од апликацијата",
|
||||
"ButtonSignOut": "Одјави се",
|
||||
|
@ -44,50 +44,50 @@
|
|||
"ButtonRemove": "Отстрани",
|
||||
"ButtonRefreshGuideData": "Освежи податоци на водич",
|
||||
"ButtonQuickStartGuide": "Водич за брз почеток",
|
||||
"ButtonPreviousTrack": "Претходна трака",
|
||||
"ButtonPause": "Пауза",
|
||||
"ButtonPreviousTrack": "Претходна нумера",
|
||||
"ButtonPause": "Паузирај",
|
||||
"ButtonParentalControl": "Родителска контрола",
|
||||
"ButtonOpen": "Отвори",
|
||||
"ButtonOk": "Ок",
|
||||
"ButtonNextTrack": "Следна трака",
|
||||
"ButtonOk": "Во ред",
|
||||
"ButtonNextTrack": "Следна нумера",
|
||||
"ButtonMore": "Повеќе",
|
||||
"ButtonManualLogin": "Мануелна најава",
|
||||
"ButtonManualLogin": "Рачна најава",
|
||||
"ButtonLibraryAccess": "Пристап до библиотека",
|
||||
"ButtonInfo": "Инфо",
|
||||
"ButtonInfo": "Информации",
|
||||
"ButtonGotIt": "Потврдувам",
|
||||
"ButtonFullscreen": "Цел екран",
|
||||
"ButtonForgotPassword": "Заборавена лозинка",
|
||||
"ButtonEditOtherUserPreferences": "Ажурирај го профилот на овој корисник, слики и лични преференци.",
|
||||
"ButtonEditOtherUserPreferences": "Ажурирај го профилот на овој корисник, слики и лични поставки.",
|
||||
"ButtonClose": "Затвори",
|
||||
"ButtonChangeServer": "Смени сервер",
|
||||
"ButtonCast": "Проектирај на уред",
|
||||
"ButtonCancel": "Откажи",
|
||||
"ButtonBack": "Назад",
|
||||
"ButtonAudioTracks": "Аудио траки",
|
||||
"ButtonAudioTracks": "Јазик на звук",
|
||||
"ButtonArrowRight": "Десно",
|
||||
"ButtonArrowLeft": "Лево",
|
||||
"ButtonAddUser": "Додај корисник",
|
||||
"ButtonAddServer": "Додај сервер",
|
||||
"ButtonAddScheduledTaskTrigger": "Додај тригер",
|
||||
"ButtonAddMediaLibrary": "Додај медија библиотека",
|
||||
"ButtonAddScheduledTaskTrigger": "Додај прекинувач",
|
||||
"ButtonAddMediaLibrary": "Додај медиумска библиотека",
|
||||
"ButtonAddImage": "Додај слика",
|
||||
"ButtonActivate": "Активирај",
|
||||
"Browse": "Прелистувај",
|
||||
"Browse": "Пребарувај",
|
||||
"BoxSet": "Сет на кутии",
|
||||
"BoxRear": "Кутија (позади)",
|
||||
"Box": "Кутија",
|
||||
"BoxRear": "Омот (позади)",
|
||||
"Box": "Омот",
|
||||
"BookLibraryHelp": "Аудио и текстуални книги се поддржани. Проверете го {0} водич за именување на книги {1}.",
|
||||
"Blacklist": "Црна листа",
|
||||
"BirthPlaceValue": "Место на раѓање: {0}",
|
||||
"BirthLocation": "Место на раѓање",
|
||||
"BirthDateValue": "Роден: {0}",
|
||||
"Banner": "Банер",
|
||||
"Auto": "Ауто",
|
||||
"AuthProviderHelp": "Одбери автентикациски провајдер кој што ќе се користи за лозинката на овој корисник.",
|
||||
"Authorize": "Авторизирај",
|
||||
"Audio": "Аудио",
|
||||
"AspectRatio": "Соодно",
|
||||
"AsManyAsPossible": "Колку што е можно",
|
||||
"Auto": "Автоматски",
|
||||
"AuthProviderHelp": "Одбери провајдер за автентикација кој што ќе се користи за лозинката на овој корисник.",
|
||||
"Authorize": "Одобри",
|
||||
"Audio": "Звук",
|
||||
"AspectRatio": "Сооднос",
|
||||
"AsManyAsPossible": "Колку што е можно повеќе",
|
||||
"AskAdminToCreateLibrary": "Побарај од администратор да создаде библиотека.",
|
||||
"Ascending": "Растечки",
|
||||
"Artist": "Изведувач",
|
||||
|
@ -96,59 +96,59 @@
|
|||
"ApiKeysCaption": "Листа на моментално вклучени API клучеви",
|
||||
"Anytime": "Било кога",
|
||||
"AnyLanguage": "Било кој јазик",
|
||||
"AlwaysPlaySubtitlesHelp": "Преводи кои се совпаѓаат со јазичните преференци ќе бидат вчитани без разлика на јазикот на аудиото.",
|
||||
"AlwaysPlaySubtitlesHelp": "Преводи кои се совпаѓаат со претпочитаниот јазик ќе бидат вчитани без разлика на јазикот на звукот.",
|
||||
"AlwaysPlaySubtitles": "Пуштај секогаш",
|
||||
"AllowTonemappingHelp": "Тонско-мапирање може да го трансформира динамичкиот опсег на видео од HDR во SDR зачувајќи ги бојата и деталите на сликата, кои што се важни информации за репрезентирање на оригиналната сцена. Моментално функционира само со HDR10 или HLG видеа. Задолжителни се соодветните OpenCL или CUDA рантајм.",
|
||||
"AllowRemoteAccessHelp": "Ако не е штиклирано, сите далечински конекции ќе бидат блокирано.",
|
||||
"AllowRemoteAccess": "Дозволи далечински конекции до овој сервер",
|
||||
"AllowOnTheFlySubtitleExtractionHelp": "Вградени преводи може да бидат екстрахирани од видеа и испорачани на клиентите во обичен текст, со цел да се превентира видео транскодирање. На некои системи ова може да трае долго и да причини заглавување на видеото при екстракцијата. Оневозможете го ова за да ги имате вградените преводи во видео транскодирањето дури и кога не се нативно поддржани на клиент уредот.",
|
||||
"AllowOnTheFlySubtitleExtraction": "Дозволи екстракција на преводи во живо",
|
||||
"AllowMediaConversionHelp": "Додај или одземи пристап за конвертирање на медија.",
|
||||
"AllowMediaConversion": "Дозволи конверзија на медија",
|
||||
"AllowTonemappingHelp": "Тонско-мапирање може да го трансформира динамичкиот опсег на видео од HDR во SDR зачувувајќи ги бојата и деталите на сликата, кои што се важни информации за претставување на оригиналната сцена. Моментално функционира само со HDR10 или HLG видеа. Задолжителни се соодветните OpenCL или CUDA рантајм.",
|
||||
"AllowRemoteAccessHelp": "Ако не е штиклирано, сите далечински врски ќе бидат блокирани.",
|
||||
"AllowRemoteAccess": "Дозволи далечински врски до овој сервер",
|
||||
"AllowOnTheFlySubtitleExtractionHelp": "Вградени преводи може да бидат одвоени од видеа и испорачани на клиентите во обичен текст, со цел да се спречи видео транскодирање. На некои системи ова може да трае долго и да причини заглавување на видеото при екстракцијата. Оневозможете го ова за да ги имате вградените преводи во видео транскодирањето дури и кога не се нативно поддржани на клиент уредот.",
|
||||
"AllowOnTheFlySubtitleExtraction": "Дозволи екстракција на преводи во реално време",
|
||||
"AllowMediaConversionHelp": "Дозволи или забрани пристап за конвертирање.",
|
||||
"AllowMediaConversion": "Дозволи конверзија на медиумска содржина",
|
||||
"AllowHWTranscodingHelp": "Дозволи му на тјунерот да транскодира стримови во живо. Со ова може да се намали транскодирањето потребно од серверот.",
|
||||
"AllowFfmpegThrottlingHelp": "Кога транскодирање или ремукс е доволно пред моментална позиција на плејбек, паузирај го процесот за да конзумира помалку ресурси. Ова е најкорисно кога се гледа без често премотување. Изгасете го ова доколку имате проблеми со гледање и премотување.",
|
||||
"AllowFfmpegThrottling": "Пригуши транскодирања",
|
||||
"AllowedRemoteAddressesHelp": "Листа на IP адреси или IP/нетмаск парови кои ќе имаат дозвола да се конектираат далечински. Ако е оставено празно, сите адреси ќе ја имаат оваа дозвола.",
|
||||
"AllowedRemoteAddressesHelp": "Листа на IP адреси или IP/нетмаск парови кои ќе имаат дозвола да се поврзуваат далечински. Ако е оставено празно, сите адреси ќе ја имаат оваа дозвола.",
|
||||
"AllLibraries": "Сите библиотеки",
|
||||
"AllLanguages": "Сите јазици",
|
||||
"AllEpisodes": "Сите епизоди",
|
||||
"AllComplexFormats": "Сите комплексни формати (ASS, SSA, VobSub, PGS, SUB, IDX, …)",
|
||||
"AllComplexFormats": "Сите сложени формати (ASS, SSA, VobSub, PGS, SUB, IDX, …)",
|
||||
"AllChannels": "Сите канали",
|
||||
"Alerts": "Алармирања",
|
||||
"Alerts": "Предупредувања",
|
||||
"AlbumArtist": "Изведувач",
|
||||
"Album": "Албум",
|
||||
"Aired": "Емитувано",
|
||||
"AirDate": "Датум на емитување",
|
||||
"AgeValue": "({0} години)",
|
||||
"AddToPlayQueue": "Додај во редица за гледање",
|
||||
"AddToPlayQueue": "Додади во ред за пуштање",
|
||||
"AdditionalNotificationServices": "Пребарувајте низ каталогот за плугини за да инсталирате додатни сервиси за известувања.",
|
||||
"AddedOnValue": "Додадено {0}",
|
||||
"AccessRestrictedTryAgainLater": "Пристапот е моментално органичен. Ве молиме пробајте подоцна.",
|
||||
"DirectStreaming": "Директно стримање",
|
||||
"DirectStreamHelp2": "Моќта конзумирана со директно стримање најчесто е зависна од аудио профилот. Само видео стримот е без губење на квалитет.",
|
||||
"DirectStreamHelp1": "Видео стримот е компатибилен со овој уред, но има некомпатибилен аудио формат (DTS, Dolby TrueHD, etc.) или број на аудио канали. Видео стримот ќе биде препакуван без губење на квалитет во живо пред да биде пратен на уредот. Само аудио стримот ќе биде транскодиран.",
|
||||
"DirectStreaming": "Директен стрим",
|
||||
"DirectStreamHelp2": "Енергијата која се троши од директното стримување најчесто зависи од аудио профилот. Само видео стримот е без губење на квалитет.",
|
||||
"DirectStreamHelp1": "Видео стримот е компатибилен со овој уред, но има некомпатибилен формат на звук (DTS, Dolby TrueHD, etc.) или број на аудио канали. Видео стримот ќе биде препакуван без губење на квалитет во живо пред да биде пратен на уредот. Само аудио стримот ќе биде транскодиран.",
|
||||
"DirectPlayHelp": "Изворната датотека е комплетно компатибилна со овој клиент, и сесијата ја прима оваа датотека без модификации.",
|
||||
"DirectPlaying": "Директно гледање",
|
||||
"Directors": "Режисери",
|
||||
"Director": "Режисер",
|
||||
"Digital": "Дигитален",
|
||||
"DeviceAccessHelp": "Ова важи само за уреди кои што можат да бидат уникатно идентифицирани и нема да превентираат пристап на прелистувач. Филтерирање на кориснички пристап на уред ќе ги превентира од користење на нови уреди додека не се одобрени тука.",
|
||||
"DetectingDevices": "Детектирање на уреди",
|
||||
"Desktop": "Десктоп",
|
||||
"Digital": "Дигитално",
|
||||
"DeviceAccessHelp": "Ова важи само за уреди кои што можат да бидат уникатно препознаени и нема да спречат пристап до прелистувачот. Филтрирање на кориснички пристап на уред ќе спречи користење на нови уреди додека не се одобрат тука.",
|
||||
"DetectingDevices": "Откривање на уреди",
|
||||
"Desktop": "Работна површина",
|
||||
"Descending": "Опаѓачки",
|
||||
"DeleteUserConfirmation": "Дали сте сигурни дека сакате да го избришете овој корисник?",
|
||||
"DeleteUser": "Избриши корисник",
|
||||
"DeleteMedia": "Избриши медија",
|
||||
"DeleteMedia": "Избриши медиумска содржина",
|
||||
"DeleteImageConfirmation": "Дали сте сигурни дека сакате да ја избришете оваа слика?",
|
||||
"DeleteImage": "Избриши слика",
|
||||
"DeleteDevicesConfirmation": "Дали сте сигурни дека сакате да ги избришете сите уреди? Сите други сесии ќе бидат одјавени. Уредите ќе се појават повторно кога корисникот ќе се најави.",
|
||||
"DeleteDeviceConfirmation": "Дали сте сигурен дека сакате да го избришете овој уред? Ќе се појави следниот пат кога корисникот ќе се најави со него.",
|
||||
"DeleteAll": "Избриши ги сите",
|
||||
"DeleteDeviceConfirmation": "Дали сте сигурни дека сакате да го избришете овој уред? Ќе се појави повторно следниот пат кога корисникот ќе се најави со него.",
|
||||
"DeleteAll": "Избриши сѐ",
|
||||
"Delete": "Избриши",
|
||||
"DeinterlaceMethodHelp": "Одбери го методот за одпреплетување кога софтверски се транскодира преплетена содржина. Кога хардверска акцелерација која што поддржува хардверско одпреплетување е вклучено хардверскиот одпреплетувач ќе биде користен наместо ова подесување.",
|
||||
"DefaultSubtitlesHelp": "Преводите се вчитани базирано на стандардните и форсирани знаменца во вградената метадата. Преференците за јазик се земени во предвид кога има повеќе можни опции.",
|
||||
"DefaultMetadataLangaugeDescription": "Ова се вашите стандардни опции и можат да бидат прилагодени посебно за секоја библиотека.",
|
||||
"DeathDateValue": "Починал: {0}",
|
||||
"DeinterlaceMethodHelp": "Одбери го методот за одпреплетување кога софтверски се транскодира преплетена содржина. Кога хардверско забрзување кое што поддржува хардверско одпреплетување е вклучено, хардверскиот одпреплетувач ќе биде користен наместо оваа поставка.",
|
||||
"DefaultSubtitlesHelp": "Преводите се вчитани базирано на стандардните и форсирани знаменца во вградената метадата. Поставките за јазик се земени во предвид кога има повеќе можни опции.",
|
||||
"DefaultMetadataLangaugeDescription": "Ова се вашите зададени вредности и можат да бидат прилагодени посебно за секоја библиотека.",
|
||||
"DeathDateValue": "Починал/а: {0}",
|
||||
"DatePlayed": "Датум на гледање",
|
||||
"DateAdded": "Датум на додавање",
|
||||
"Data": "Податоци",
|
||||
|
@ -157,32 +157,32 @@
|
|||
"DashboardOperatingSystem": "Оперативен систем: {0}",
|
||||
"DashboardArchitecture": "Архитектура: {0}",
|
||||
"DailyAt": "Секој ден во {0}",
|
||||
"CustomDlnaProfilesHelp": "Создади прилагоден профил за таргетирање на нов уред или за прескокање на системски профил.",
|
||||
"Cursive": "Закосено",
|
||||
"CustomDlnaProfilesHelp": "Создадете прилагоден профил за да насочите нов уред или да го отфрлите системскиот профил.",
|
||||
"Cursive": "Ракописно",
|
||||
"CriticRating": "Оценка на критичари",
|
||||
"CopyStreamURLSuccess": "Успешно копирана адреса.",
|
||||
"CopyStreamURL": "Копирај адреса на стрим",
|
||||
"CopyFailed": "Неуспешно копирање",
|
||||
"Copy": "Копирај",
|
||||
"Copied": "Копирано",
|
||||
"Continuing": "Продолжување",
|
||||
"Continuing": "Продолжува",
|
||||
"ContinueWatching": "Продолжи со гледање",
|
||||
"Console": "Конзола",
|
||||
"Connect": "Поврзување",
|
||||
"ConfirmEndPlayerSession": "Дали сакате да го изгасите Jellyfin на {0}?",
|
||||
"Connect": "Поврзи",
|
||||
"ConfirmEndPlayerSession": "Дали сакате да го исклучите Jellyfin на {0}?",
|
||||
"ConfirmDeletion": "Потврди бришење",
|
||||
"ConfirmDeleteItems": "Бришење на овие ставки ќе ги избрише и од податочниот систем и од библиотеката. Дали сте сигурни дека сакате да продолжите?",
|
||||
"ConfirmDeleteItem": "Бришење на оваа ставка ќе го избрише и од податочниот систем и од библиотеката. Дали сте сигурни дека сакате да продолжите?",
|
||||
"ConfirmDeleteItems": "Бришењето на овие ставки ќе ги избрише и од податочниот систем и од библиотеката. Дали сте сигурни дека сакате да продолжите?",
|
||||
"ConfirmDeleteItem": "Бришењето на оваа ставка ќе го избрише и од податочниот систем и од библиотеката. Дали сте сигурни дека сакате да продолжите?",
|
||||
"ConfirmDeleteImage": "Избриши слика?",
|
||||
"ConfigureDateAdded": "Намести како метадатата за „датум на додавање“ е одредена во Контролна табла > Библиотеки > NFO подесувања",
|
||||
"Conductor": "Кондуктор",
|
||||
"ConfigureDateAdded": "Поставете како се одредуваат метаподатоците за „Датум на додадено“ во Контролна табла > Библиотеки > Поставки за NFO",
|
||||
"Conductor": "Диригент",
|
||||
"Composer": "Композитор",
|
||||
"CommunityRating": "Оценка на заедницата",
|
||||
"ColorTransfer": "Трансфер на бои",
|
||||
"ColorTransfer": "Пренос на бои",
|
||||
"ColorSpace": "Простор на бои",
|
||||
"ColorPrimaries": "Примарни бои",
|
||||
"ColorPrimaries": "Основни бои",
|
||||
"ClientSettings": "Кориснички поставувања",
|
||||
"ClearQueue": "Исчисти редица",
|
||||
"ClearQueue": "Исчисти ред",
|
||||
"CinemaModeConfigurationHelp": "Кино режин го носи кино искуството директно во вашата дневна соба со можноста на пуштање на трејлери и интра пред главните сцени.",
|
||||
"ChannelNumber": "Број на канал",
|
||||
"ChannelNameOnly": "Само канал {0}",
|
||||
|
@ -197,5 +197,108 @@
|
|||
"ButtonUseQuickConnect": "Користи „брзо поврзување“",
|
||||
"ButtonUninstall": "Деинсталирај",
|
||||
"ButtonTrailer": "Трејлер",
|
||||
"ButtonTogglePlaylist": "Плејлиста"
|
||||
"ButtonTogglePlaylist": "Плејлиста",
|
||||
"Backdrop": "Позадина",
|
||||
"LabelThrottleDelaySecondsHelp": "Време во секунди по кое транскодерот ќе биде пригушен. Мора да биде доволно долго за клиентот да одржува здрав бафер. Работи само ако е овозможено пригушување.",
|
||||
"Art": "Графика",
|
||||
"ButtonSyncPlay": "SyncPlay",
|
||||
"ButtonBackspace": "бек-спејс",
|
||||
"ButtonPlayer": "Плеер",
|
||||
"ButtonSpace": "Празно место",
|
||||
"BackdropScreensaver": "Заштитник на екран во позадина",
|
||||
"AllowCollectionManagement": "Дозволете овој корисник да управува со колекциите",
|
||||
"AllowSegmentDeletion": "Избриши сегменти",
|
||||
"AllowSegmentDeletionHelp": "Избришете ги старите сегменти откако ќе бидат испратени до клиентот. Ова го спречува складирањето на целата транскодирана датотека на дискот. Ќе работи само со овозможено пригушување. Исклучете го ова ако имате проблеми со репродукцијата.",
|
||||
"LabelThrottleDelaySeconds": "Пригуши после",
|
||||
"LabelSegmentKeepSeconds": "Време за чување на сегментите",
|
||||
"LabelSegmentKeepSecondsHelp": "Време во секунди за кое сегментите треба да се чуваат пред да бидат препишани. Мора да биде подолго од „Пригуши после“. Работи само ако е овозможено бришењето сегменти.",
|
||||
"Backdrops": "Позадини",
|
||||
"BurnSubtitlesHelp": "Определете дали серверот треба да вградува преводи додека транскодирате видеа. Избегнувањето на ова во голема мера ќе ги подобри перформансите. Изберете Автоматски за снимање на формати базирани на слики (VobSub, PGS, SUB, IDX, итн.) и одредени ASS или SSA преводи.",
|
||||
"DisableCustomCss": "Оневозможи приспособен CSS код обезбеден од серверот",
|
||||
"Download": "Преземи",
|
||||
"EditImages": "Уреди слики",
|
||||
"EditSubtitles": "Уреди превод",
|
||||
"EnableBackdropsHelp": "Прикажувајте ги заднините во заднината на некои страници додека ја прелистувате библиотеката.",
|
||||
"EnableBlurHashHelp": "Сликите што сè уште се вчитуваат ќе се прикажат со единствено место.",
|
||||
"EnableDisplayMirroring": "Пресликување на екранот",
|
||||
"EnableExternalVideoPlayers": "Надворешни видео плеери",
|
||||
"EnableExternalVideoPlayersHelp": "Ќе се прикаже мени за надворешен плеер кога ќе започнете со репродукција на видео.",
|
||||
"Episodes": "Епизоди",
|
||||
"ErrorAddingListingsToSchedulesDirect": "Настана грешка при додавањето на поставата на вашата сметка на Распореди Директно. Распореди Директно дозволува само ограничен број на постави по сметка. Можеби ќе треба да се најавите на веб-локацијата Распоред Директно и да ги отстраните другите списоци од вашата сметка пред да продолжите.",
|
||||
"ErrorGettingTvLineups": "Настана грешка при преземањето ТВ-постави. Проверете дали вашите информации се точни и обидете се повторно.",
|
||||
"EveryXHours": "Секои {0} часови",
|
||||
"ExtractChapterImagesHelp": "Извлекувањето слики од поглавја ќе им овозможи на клиентите да прикажуваат графички менија за избор на сцена. Процесот може да биде бавен, интензивен за ресурси и може да бара неколку гигабајти простор. Работи кога ќе се откријат видеата, а исто така и како ноќна закажана задача. Распоредот може да се конфигурира во областа за закажани задачи. Не се препорачува да се извршува оваа задача за време на максимални часови на употреба.",
|
||||
"FFmpegSavePathNotFound": "Не можеме да го најдеме FFmpeg користејќи ја патеката што ја внесовте. Потребна е и FFprobe и мора да постои во истата папка. Овие компоненти обично се заедно во истото преземање. Проверете ја патеката и обидете се повторно.",
|
||||
"FileNotFound": "Датотеката не е пронајдена.",
|
||||
"Disc": "Диск",
|
||||
"EnableDetailsBanner": "Детали за банер",
|
||||
"Extras": "Додатоци",
|
||||
"Features": "Можности",
|
||||
"File": "Датотека",
|
||||
"EnableFasterAnimationsHelp": "Користи побрзи анимации и транзиции.",
|
||||
"EnableFasterAnimations": "Побрзи анимации",
|
||||
"EnableHardwareEncoding": "Овозможи хардверско кодирање",
|
||||
"ErrorPlayerNotFound": "Не е пронајден плеер за бараните медиумски содржини.",
|
||||
"EveryHour": "Секој час",
|
||||
"EveryNDays": "Секои {0} дена",
|
||||
"EnablePlugin": "Овозможи",
|
||||
"DoNotRecord": "Не снимај",
|
||||
"DownloadsValue": "{0} преземања",
|
||||
"EnableBlurHash": "Овозможете заматени места за слики",
|
||||
"ErrorStartHourGreaterThanEnd": "Времето на завршување мора да биде поголемо од времето на започнување.",
|
||||
"ExitFullscreen": "Излези од приказ на цел екран",
|
||||
"ExtraLarge": "Екстра големо",
|
||||
"FastForward": "Премотај-напред",
|
||||
"Favorite": "Омилено",
|
||||
"DisplayInOtherHomeScreenSections": "Прикажување во деловите на почетниот екран како што се „Неодамна додадени медиуми“ и „Продолжи со гледање“",
|
||||
"EnableThemeSongsHelp": "Пуштете ги тематските песни во позадина додека ја прелистувате библиотеката.",
|
||||
"EnableRewatchingNextUp": "Овозможи повторно гледање во Следно",
|
||||
"EnableRewatchingNextUpHelp": "Овозможи прикажување на веќе гледаните епизоди во деловите „Следно“.",
|
||||
"Depressed": "Застарено",
|
||||
"DisablePlugin": "Оневозможи",
|
||||
"Disconnect": "Исклучи",
|
||||
"Display": "Прикажи",
|
||||
"DisplayInMyMedia": "Прикажи на почетен екран",
|
||||
"EnableStreamLooping": "Автоматско-повторување на преноси во живо",
|
||||
"EnableQuickConnect": "Овозможи Брзо Поврзување на овој сервер",
|
||||
"EnableNextVideoInfoOverlayHelp": "На крајот на видеото, прикажи информации за следното видео во моменталната плејлиста.",
|
||||
"Episode": "Епизода",
|
||||
"DisplayMissingEpisodesWithinSeasonsHelp": "Ова мора да биде овозможено и за ТВ библиотеките во конфигурацијата на серверот.",
|
||||
"Down": "Надолу",
|
||||
"Edit": "Уреди",
|
||||
"EditMetadata": "Уреди метаподатоци",
|
||||
"EnableAutoCast": "Постави за зададено",
|
||||
"EnableDecodingColorDepth10Vp9": "Овозможи 10-битно хардверско декодирање за VP9",
|
||||
"EnableCinemaMode": "Кино режим",
|
||||
"EnableDetailsBannerHelp": "Прикажете слика на банер на врвот на страницата со детали за ставката.",
|
||||
"EnableAudioNormalization": "Нормализација на звук",
|
||||
"EnableDecodingColorDepth10Hevc": "Овозможи 10-битно хардверско декодирање за HEVC",
|
||||
"EnableNextVideoInfoOverlay": "Прикажи ги информациите за следното видео за време на гледањето",
|
||||
"EncoderPresetHelp": "Изберете побрза вредност за подобрување на перформансите или побавна вредност за подобрување на квалитетот.",
|
||||
"Ended": "Завршено",
|
||||
"EndsAtValue": "Завршува во {0}",
|
||||
"Engineer": "Звучен инжинер",
|
||||
"ErrorAddingMediaPathToVirtualFolder": "Настана грешка при додавањето на патеката за медиумски содржини. Ве молиме проверете дали патеката е валидна и Jellyfin има пристап до таа локација.",
|
||||
"ErrorAddingTunerDevice": "Настана грешка при додавањето на тјунерот. Проверете дали е достапен и обидете се повторно.",
|
||||
"ErrorAddingXmlTvFile": "Настана грешка при пристапот до датотеката XMLTV. Проверете дали постои датотеката и обидете се повторно.",
|
||||
"ErrorDefault": "Настана грешка при обработката на барањето. Обидете се повторно подоцна.",
|
||||
"EveryXMinutes": "Секои {0} минути",
|
||||
"EnableAudioNormalizationHelp": "Нормализацијата на звукот ќе додаде постојано засилување за да го задржи просекот на посакуваното ниво (-18dB).",
|
||||
"DisplayModeHelp": "Изберете го стилот на распоред што го сакате за интерфејсот.",
|
||||
"Experimental": "Експериментално",
|
||||
"DropShadow": "Прикажи сенка",
|
||||
"EnablePhotos": "Прикажи фотографии",
|
||||
"EnablePhotosHelp": "Сликите ќе бидат откриени и прикажани заедно со други медиумски датотеки.",
|
||||
"ErrorDeletingItem": "Настана грешка при бришењето на ставката од серверот. Ве молиме проверете дали Jellyfin има пристап за пишување до медиумската папка и обидете се повторно.",
|
||||
"ErrorPleaseSelectLineup": "Изберете постава и обидете се повторно. Ако не се достапни постави, тогаш ве молиме проверете дали вашето корисничко име, лозинка и поштенски код се точни.",
|
||||
"ErrorSavingTvProvider": "Настана грешка при зачувувањето на ТВ-провајдерот. Проверете дали е достапен и обидете се повторно.",
|
||||
"EnableCardLayout": "Прикажи визуелен CardBox",
|
||||
"DownloadAll": "Преземи сѐ",
|
||||
"EnableColorCodedBackgrounds": "Позадини со кодирани бои",
|
||||
"DisplayMissingEpisodesWithinSeasons": "Прикажи ги епизодите што недостасуваат во сезоните",
|
||||
"EnableTonemapping": "Овозможи мапирање на тонови",
|
||||
"FetchingData": "Прибавување на додатни податоци",
|
||||
"EnableStreamLoopingHelp": "Овозможете го ова ако преносите во живо содржат само неколку секунди податоци и треба постојано да се бараат. Овозможувањето на ова кога не е потребно може да предизвика проблеми.",
|
||||
"EnableThemeVideosHelp": "Пуштете ги тематските видеа во заднина додека ја прелистувате библиотеката.",
|
||||
"DrmChannelsNotImported": "Канали со DRM заштита нема да бидат внесени."
|
||||
}
|
||||
|
|
|
@ -23,5 +23,7 @@
|
|||
"AllChannels": "සියලුම නාලිකා",
|
||||
"AllComplexFormats": "සියලුම සංකීර්ණ ආකෘති (ASS, SSA, VobSub, PGS, SUB, IDX, …)",
|
||||
"AllEpisodes": "සියලුම කථාංග",
|
||||
"AllowedRemoteAddressesHelp": "දුරස්ථව සම්බන්ධ වීමට ඉඩ දෙන ජාල සඳහා කොමාවෙන් වෙන් කළ IP ලිපින ලැයිස්තුව හෝ IP/netmask ඇතුළත් කිරීම්. හිස්ව තැබුවහොත්, සියලු දුරස්ථ ලිපිනවලට ඉඩ දෙනු ලැබේ."
|
||||
"AllowedRemoteAddressesHelp": "දුරස්ථව සම්බන්ධ වීමට ඉඩ දෙන ජාල සඳහා කොමාවෙන් වෙන් කළ IP ලිපින ලැයිස්තුව හෝ IP/netmask ඇතුළත් කිරීම්. හිස්ව තැබුවහොත්, සියලු දුරස්ථ ලිපිනවලට ඉඩ දෙනු ලැබේ.",
|
||||
"AllowSegmentDeletion": "මේ කොටස මකන්න",
|
||||
"AllowSegmentDeletionHelp": "client වෙත යැවීමෙන් පසු පැරණි කොටස් මකන්න. මෙය සම්පූර්ණ ට්රාන්ස්කෝඩ් ගොනුව තැටියේ ගබඩා කිරීම වළක්වයි. ක්රියා කරන්නේ තෙරපුම සක්රීය කර පමණි. ඔබ පසුධාවන ගැටළු අත්විඳින්නේ නම් මෙය අක්රිය කරන්න."
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue